From 5958995d66c7446bdbc8fcc1914b022511f8bdb4 Mon Sep 17 00:00:00 2001 From: Arnaud Diederen Date: Tue, 15 Oct 2019 15:05:19 +0200 Subject: [PATCH] IDAPython for IDA 7.4 --- BUILDING.txt | 57 +- README_python3.txt | 43 + Scripts/FindInstructions.py | 7 +- Scripts/ImpRef.py | 6 +- Scripts/ImportExportViewer.py | 2 +- Scripts/VirusTotal.py | 2 +- Scripts/callstack_test.py | 5 +- api_contents.txt => api_contents2.txt | 93 +- api_contents3.txt | 11189 +++ build.py | 9 +- examples/{ex_actions.py => core/actions.py} | 38 +- examples/{ex_hotkey.py => core/add_hotkey.py} | 0 examples/{hotkey.py => core/add_hotkey2.py} | 0 .../auto_instantiate_widget_plugin.py} | 0 .../{colours.py => core/colorize_region.py} | 0 .../create_structure_programmatically.py} | 2 +- examples/{ex_cli.py => core/custom_cli.py} | 0 .../custom_data_types_and_formats.py} | 10 +- .../dump_flowchart.py} | 6 +- examples/{ex_expr.py => core/extend_idc.py} | 0 examples/{ => core}/idapythonrc.py | 0 .../install_user_defined_prefix.py} | 0 .../{ex_imports.py => core/list_imports.py} | 4 +- .../list_patched_bytes.py} | 0 .../list_segment_functions.py} | 0 .../list_segment_functions_using_idautils.py} | 0 .../{ex_strings.py => core/list_strings.py} | 0 .../{ex_timer.py => core/register_timer.py} | 0 .../trigger_actions_programmatically.py} | 0 .../dbghooks/automatic_steps.py} | 0 .../{ex_dbg.py => debugging/misc/tempo.py} | 4 +- .../show_debug_names.py} | 0 examples/ex1.idc | 35 - examples/ex_graph.py | 90 - .../decompile_entry_points.py} | 0 examples/{ => hexrays}/vds1.py | 0 examples/{ => hexrays}/vds10.py | 0 examples/{ => hexrays}/vds11.py | 0 examples/{ => hexrays}/vds12.py | 2 +- examples/{ => hexrays}/vds13.py | 0 examples/{ => hexrays}/vds17.py | 0 examples/{ => hexrays}/vds3.py | 0 examples/{ => hexrays}/vds4.py | 8 +- examples/{ => hexrays}/vds5.py | 30 +- examples/{ => hexrays}/vds6.py | 2 +- examples/{ => hexrays}/vds7.py | 0 examples/{ => hexrays}/vds8.py | 0 examples/{ => hexrays}/vds_create_hint.py | 0 examples/{ => hexrays}/vds_hooks.py | 7 +- .../{ => hexrays}/vds_modify_user_lvars.py | 4 +- examples/{ => hexrays}/vds_xrefs.py | 2 - .../ana_emu_out.py} | 2 +- .../assemble.py} | 0 .../paint_over_navbar.py} | 8 +- .../populate_pluginform_with_pyqt_widgets.py} | 0 .../log_misc_events.py} | 0 .../forms/askusingform.py} | 2 +- .../graphs/custom_graph_with_actions.py | 142 + .../graphs/sync_two_graphs.py} | 0 .../idaview/wrap_idaview.py} | 2 +- .../listings/custom_viewer.py} | 36 +- .../listings/save_and_restore_listing_pos.py | 79 + .../tabular_views/custom/choose.py} | 38 +- .../tabular_views/custom/choose_multi.py} | 4 +- .../tabular_views/custom/func_chooser.py} | 0 .../strings_window/show_selected_strings.py | 77 + .../widgets/waitbox/show_and_hide_waitbox.py | 49 + extapi.cpp | 136 + extapi.hpp | 43 + idapy.hpp | 226 + idapyswitch.cpp | 706 + idapyswitch_linux.cpp | 474 + idapyswitch_mac.cpp | 442 + idapyswitch_win.cpp | 476 + python.cfg => idapython.cfg | 2 +- python.cpp => idapython.cpp | 454 +- idapython.script | 11 +- idapython_implib.def | 11 +- makefile | 252 +- out_of_tree/parsed_notifications.zip | Bin 4290459 -> 4184813 bytes pydoc_injections.txt | 73630 -------------- pydoc_injections2.txt | 82127 ++++++++++++++++ pydoc_injections3.txt | 82030 +++++++++++++++ python/idadex.py | 41 +- python/idautils.py | 49 +- python/idc.py | 299 +- python/init.py | 19 +- pywraps.cpp | 410 +- pywraps.hpp | 141 +- pywraps/py_bytes.hpp | 22 +- pywraps/py_bytes_custdata.hpp | 21 +- pywraps/py_bytes_custdata.py | 3 +- pywraps/py_dbg.hpp | 37 +- pywraps/py_diskio.hpp | 16 +- pywraps/py_fpro.hpp | 68 +- pywraps/py_frame.hpp | 2 +- pywraps/py_gdl.py | 13 +- pywraps/py_graph.hpp | 84 +- pywraps/py_graph.py | 60 +- pywraps/py_hexrays.py | 18 +- pywraps/py_hexrays_hooks.hpp | 16 +- pywraps/py_ida.py | 20 +- pywraps/py_idaapi.hpp.in | 72 +- pywraps/py_idaapi.py | 77 +- pywraps/py_idaapi_loader_input.hpp | 99 +- pywraps/py_idc.hpp | 2 +- pywraps/py_idd.hpp | 62 +- pywraps/py_idd.py | 27 +- pywraps/py_idp.hpp | 76 +- pywraps/py_idp.py.in | 15 - pywraps/py_idp_idbhooks.hpp | 4 +- pywraps/py_kernwin.hpp | 144 +- pywraps/py_kernwin.py | 120 +- pywraps/py_kernwin_askform.hpp | 17 +- pywraps/py_kernwin_askform.py | 54 +- pywraps/py_kernwin_choose.hpp | 209 +- pywraps/py_kernwin_choose.py | 31 +- pywraps/py_kernwin_cli.hpp | 22 +- pywraps/py_kernwin_custview.hpp | 48 +- pywraps/py_kernwin_custview.py | 26 +- pywraps/py_kernwin_idaview.hpp | 4 +- pywraps/py_kernwin_plgform.hpp | 23 +- pywraps/py_kernwin_plgform.py | 48 +- pywraps/py_kernwin_viewhooks.py | 48 +- pywraps/py_lines.hpp | 16 +- pywraps/py_lines.py | 1 + pywraps/py_loader.hpp | 8 +- pywraps/py_lumina.hpp | 2 +- pywraps/py_nalt.hpp | 4 +- pywraps/py_name.hpp | 4 +- pywraps/py_name.py | 4 +- pywraps/py_pro.hpp | 6 +- pywraps/py_range.py | 4 + pywraps/py_registry.hpp | 14 +- pywraps/py_segregs.py | 6 +- pywraps/py_typeinf.hpp | 188 +- pywraps/py_typeinf.py | 2 +- pywraps/py_xref.hpp | 8 +- pywraps/pywraps.vcproj | 12 - pywraps/sidc.py | 9 +- pywraps/swig_stub.cpp | 6 - pywraps/swig_stub.h | 25 - ..._contents.txt => release_api_contents2.txt | 90 +- release_api_contents3.txt | 10482 ++ release_pydoc_injections.txt | 71596 -------------- release_pydoc_injections2.txt | 78888 +++++++++++++++ release_pydoc_injections3.txt | 78937 +++++++++++++++ swig/bytes.i | 3 +- swig/dbg.i | 17 +- swig/diskio.i | 2 + swig/enum.i | 2 +- swig/expr.i | 5 + swig/funcs.i | 14 + swig/hexrays.i | 41 +- swig/idaapi.i | 5 + swig/idp.i | 2 +- swig/kernwin.i | 46 +- swig/lines.i | 2 +- swig/loader.i | 10 +- swig/lumina.i | 63 +- swig/moves.i | 2 + swig/nalt.i | 6 + swig/netnode.i | 28 +- swig/pro.i | 9 + swig/range.i | 13 +- swig/strlist.i | 4 +- swig/struct.i | 4 +- swig/typeinf.i | 35 +- swig/ua.i | 7 +- tools/chkapi.py | 251 +- tools/deploy.py | 6 +- tools/deploy/header.i.in | 591 +- tools/docs/hrdoc.py | 2 +- tools/doxygen_utils.py | 2 +- tools/doxygen_utils.pyc | Bin 3188 -> 0 bytes tools/dumpdoc.py | 389 +- tools/gen_idc_bc695.py | 121 +- tools/genhooks/gendoxycfg.py | 4 +- tools/genhooks/genhooks.py | 16 +- tools/genhooks/recipe_dbghooks.py | 1 - tools/genidaapi.py | 4 +- tools/genswigheader.py | 7 +- tools/inject_base_hooks_flags.py | 2 +- tools/inject_plfm.py | 2 +- tools/inject_pydoc.py | 176 +- tools/inspect.py | 3049 + tools/patch_codegen.py | 27 +- tools/patch_codegen/idp.py | 11 +- tools/patch_codegen/kernwin.py | 17 +- tools/patch_codegen/nalt.py | 6 + tools/patch_constants.py | 93 +- tools/patch_directors_cc.py | 12 +- tools/patch_h_codegen.py | 6 +- tools/patch_python_codegen.py | 8 +- tools/pydoc.py | 2663 + tools/pydoc_data/__init__.py | 0 tools/pydoc_data/_pydoc.css | 6 + tools/pydoc_data/topics.py | 79 + tools/split_hexrays_templates.py | 4 +- tools/wrapper_utils.py | 111 + 200 files changed, 356011 insertions(+), 147970 deletions(-) create mode 100644 README_python3.txt rename api_contents.txt => api_contents2.txt (99%) create mode 100644 api_contents3.txt rename examples/{ex_actions.py => core/actions.py} (53%) rename examples/{ex_hotkey.py => core/add_hotkey.py} (100%) rename examples/{hotkey.py => core/add_hotkey2.py} (100%) rename examples/{ex_auto_instantiate_widget_plugin.py => core/auto_instantiate_widget_plugin.py} (100%) rename examples/{colours.py => core/colorize_region.py} (100%) rename examples/{structure.py => core/create_structure_programmatically.py} (95%) rename examples/{ex_cli.py => core/custom_cli.py} (100%) rename examples/{ex_custdata.py => core/custom_data_types_and_formats.py} (96%) rename examples/{ex_gdl_qflow_chart.py => core/dump_flowchart.py} (91%) rename examples/{ex_expr.py => core/extend_idc.py} (100%) rename examples/{ => core}/idapythonrc.py (100%) rename examples/{ex_prefix_plugin.py => core/install_user_defined_prefix.py} (100%) rename examples/{ex_imports.py => core/list_imports.py} (93%) rename examples/{ex_patch.py => core/list_patched_bytes.py} (100%) rename examples/{ex1_idaapi.py => core/list_segment_functions.py} (100%) rename examples/{ex1_idautils.py => core/list_segment_functions_using_idautils.py} (100%) rename examples/{ex_strings.py => core/list_strings.py} (100%) rename examples/{ex_timer.py => core/register_timer.py} (100%) rename examples/{ex_uirequests.py => core/trigger_actions_programmatically.py} (100%) rename examples/{debughook.py => debugging/dbghooks/automatic_steps.py} (100%) rename examples/{ex_dbg.py => debugging/misc/tempo.py} (91%) rename examples/{ex_debug_names.py => debugging/show_debug_names.py} (100%) delete mode 100644 examples/ex1.idc delete mode 100644 examples/ex_graph.py rename examples/{ex_hexrays.py => hexrays/decompile_entry_points.py} (100%) rename examples/{ => hexrays}/vds1.py (100%) rename examples/{ => hexrays}/vds10.py (100%) rename examples/{ => hexrays}/vds11.py (100%) rename examples/{ => hexrays}/vds12.py (98%) rename examples/{ => hexrays}/vds13.py (100%) rename examples/{ => hexrays}/vds17.py (100%) rename examples/{ => hexrays}/vds3.py (100%) rename examples/{ => hexrays}/vds4.py (94%) rename examples/{ => hexrays}/vds5.py (93%) rename examples/{ => hexrays}/vds6.py (99%) rename examples/{ => hexrays}/vds7.py (100%) rename examples/{ => hexrays}/vds8.py (100%) rename examples/{ => hexrays}/vds_create_hint.py (100%) rename examples/{ => hexrays}/vds_hooks.py (93%) rename examples/{ => hexrays}/vds_modify_user_lvars.py (91%) rename examples/{ => hexrays}/vds_xrefs.py (99%) rename examples/{ex_procext.py => idphooks/ana_emu_out.py} (98%) rename examples/{ex_idphook_asm.py => idphooks/assemble.py} (100%) rename examples/{ex_paint_over_navbar.py => pyqt/paint_over_navbar.py} (90%) rename examples/{ex_pyqt.py => pyqt/populate_pluginform_with_pyqt_widgets.py} (100%) rename examples/{ex_uihook.py => uihooks/log_misc_events.py} (100%) rename examples/{ex_askusingform.py => widgets/forms/askusingform.py} (99%) create mode 100644 examples/widgets/graphs/custom_graph_with_actions.py rename examples/{ex_sync_graphs.py => widgets/graphs/sync_two_graphs.py} (100%) rename examples/{ex_idagraph.py => widgets/idaview/wrap_idaview.py} (99%) rename examples/{ex_custview.py => widgets/listings/custom_viewer.py} (84%) create mode 100644 examples/widgets/listings/save_and_restore_listing_pos.py rename examples/{ex_choose.py => widgets/tabular_views/custom/choose.py} (78%) rename examples/{ex_choose_multi.py => widgets/tabular_views/custom/choose_multi.py} (90%) rename examples/{ex_func_chooser.py => widgets/tabular_views/custom/func_chooser.py} (100%) create mode 100644 examples/widgets/tabular_views/strings_window/show_selected_strings.py create mode 100644 examples/widgets/waitbox/show_and_hide_waitbox.py create mode 100644 extapi.cpp create mode 100644 extapi.hpp create mode 100644 idapy.hpp create mode 100644 idapyswitch.cpp create mode 100644 idapyswitch_linux.cpp create mode 100644 idapyswitch_mac.cpp create mode 100644 idapyswitch_win.cpp rename python.cfg => idapython.cfg (96%) rename python.cpp => idapython.cpp (87%) delete mode 100644 pydoc_injections.txt create mode 100644 pydoc_injections2.txt create mode 100644 pydoc_injections3.txt delete mode 100644 pywraps/swig_stub.cpp delete mode 100644 pywraps/swig_stub.h rename release_api_contents.txt => release_api_contents2.txt (99%) create mode 100644 release_api_contents3.txt delete mode 100644 release_pydoc_injections.txt create mode 100644 release_pydoc_injections2.txt create mode 100644 release_pydoc_injections3.txt delete mode 100644 tools/doxygen_utils.pyc create mode 100644 tools/inspect.py create mode 100644 tools/patch_codegen/nalt.py create mode 100755 tools/pydoc.py create mode 100644 tools/pydoc_data/__init__.py create mode 100644 tools/pydoc_data/_pydoc.css create mode 100644 tools/pydoc_data/topics.py create mode 100644 tools/wrapper_utils.py diff --git a/BUILDING.txt b/BUILDING.txt index 85862fc..81722d3 100644 --- a/BUILDING.txt +++ b/BUILDING.txt @@ -16,11 +16,24 @@ REQUIREMENTS - Python [2.5.1, 2.6.1, 2.7] http://www.python.org/ - - Simplified Wrapper Interface Generator (SWIG) [2.0.12] - http://www.swig.org/ + - Simplified Wrapper Interface Generator (SWIG) + - if you intend to build for Python 2.x: [4.0.1] + - if you intend to build for Python 3.x: [4.0.1, with support for -py3-limited-api] + Hex-Rays cannot guarantee support for IDAPython versions built with other versions of SWIG. + If building for Python 3.x: + You can obtain the correct version of swig like so: + `git clone --branch py3-stable-abi https://github.com/idapython/swig.git swig-py3-stable-abi`, + and then compile it. + + On Windows, please refer to the following instructions: + `http://www.swig.org/Doc4.0/Windows.html#Windows_cygwin_mingw` + On Linux or OSX, + `sh autogen.sh`, then + `configure --prefix=/my/swig-4.0.1-py3-install && make && make install` + - Unix utilities (GNU patch on Windows): http://www.research.att.com/sw/tools/uwin/ or http://unxutils.sourceforge.net/ or @@ -40,7 +53,7 @@ BUILDING Make sure all the needed tools (compiler, swig) are on the PATH. 1. Unpack the IDA SDK into: - '.../idasdk69' + '.../idasdk74' Note: the path you unpack the IDA SDK into cannot contain white spaces, or special characters (such as '(', etc...) @@ -56,41 +69,21 @@ Note: the path you unpack the IDA SDK into cannot contain white spaces, 3. Place the IDAPython sources into the SDK directory, such that the file: - '.../idasdk69/plugins/idapython/BUILDING.txt' exists + '.../idasdk74/plugins/idapython/BUILDING.txt' exists -Note: To build with Hex-Rays decompiler support, you will need to copy - .../ida_install/plugins/hexrays_sdk/include/hexrays.hpp -> .../idasdk69/include/hexrays.hpp - -Note: on Windows, you will also have to - - copy .../idasdk69/lib/x86_win_vc_32 -> .../idasdk69/lib/x86_win_vc_32_opt - - copy .../idasdk69/lib/x86_win_vc_64 -> .../idasdk69/lib/x86_win_vc_64_opt - This is a kludge, which we will solve for the next version + Note: To build with Hex-Rays decompiler support, you will need to copy + .../ida_install/plugins/hexrays_sdk/include/hexrays.hpp -> .../idasdk74/include/hexrays.hpp + Note: If you want to build for Python3 (let's say you are building for Python 3.8), + please set the following environment variables: + - export PYTHON_VERSION_MAJOR=3 ('set PYTHON_VERSION_MAJOR=3' on Windows) + - export PYTHON_VERSION_MAJOR=8 ('set PYTHON_VERSION_MINOR=8 on Windows) 4. Build the plugin - python build.py + python build.py --swig-home /my/swig-4.0.1-py3-install --with-hexrays --idc /path/to/ida74_install/idc/idc.idc - It is possible to build the plugin for different Python versions by - running build.py with the corresponding Python binary. - - Run 'build.py --help' for more information. + You can also run 'build.py --help' for more information. 5. Install the components as described in README.md - - -MISC ----- - -On 64 bits distributions, you may need to compile Python to generate a 32bit -version of the interpreter: - -1. tar xvf Python-2.6.6.tar.bz2 -2. cd Python-2.6.6 -3. CC="gcc -m32" CXX="c++ -m32" ./configure --prefix=/path/to/py32 --enable-shared -4. make -5. make install -6. cd /path/to/py32/lib -7. ln -s libpython2.6.so.1.0 libpython2.6.so.1 -8. PYTHONHOME=/path/to/py32 LD_LIBRARY_PATH=/path/to/py32/lib idaq diff --git a/README_python3.txt b/README_python3.txt new file mode 100644 index 0000000..56ee6af --- /dev/null +++ b/README_python3.txt @@ -0,0 +1,43 @@ + +IDAPython comes in two flavors: + +* IDAPython-for-Python2 +* IDAPython-for-Python3 + +# Switching between Python 2 and Python 3. + +Depending on your choice at the install time, your "plugins" directory will have +one version of plugin installed as idapython.[dll|so|dylib] (and/or idapython64) and +the other will be present with the ".disabled" extension. To switch, just rename the +current version to .disabled and the disabled one back to the .dll/.so/.dylib +(depending on your OS) + +For example, to swith from Python 3 to Python 2 on Windows: + +1. rename idapython.dll to idapython.3.disabled and idapython64.dll to idapython64.3.disabled +2. rename idapython2.disabled to idapython.dll and idapython642.disabled to idapython64.dll + + +# Selecting a Python install to use + +The situation for IDAPython-for-Python2 is simple: it uses Python 2.7, +and will expect that [lib]python2.7.[dll|so|dylib] is present in the system +library path so that IDA can find it. + +When it comes to IDAPython-for-Python3, it gets more complex: because +different users might have different (and possibly multiple) versions +of Python3 installed, IDA comes with a tool called `idapyswitch`, that +can be run to select the desired Python3 runtime to tailor +IDAPython-for-Python3 to. + +If you selected IDAPython-for-Python3 at installation-time, +`idapyswitch` utility should already have been run, and selected +the most appropriate Python3 version. + +Should you want to switch to another Python3 install after installation, +please run `idapyswitch` from IDA's directory. It will scan for Python +installs present in the system's standard locations and offer you to choose one. +It also supports optional command-line switches to handle non-standard installs. +Run `idapyswitch -h` to see them. + + diff --git a/Scripts/FindInstructions.py b/Scripts/FindInstructions.py index 71223ea..51dc175 100644 --- a/Scripts/FindInstructions.py +++ b/Scripts/FindInstructions.py @@ -18,6 +18,7 @@ ALL RIGHTS RESERVED. """ from __future__ import print_function import re +import sys import ida_idaapi import ida_lines @@ -55,7 +56,7 @@ def FindInstructions(instr, asm_where=None): for line in lines: if re_opcode.match(line): # convert from hex string to a character list then join the list to form one string - buf = ''.join([chr(int(x, 16)) for x in line.split()]) + buf = bytes(bytearray([int(x, 16) for x in line.split()])) else: # assemble the instruction ret, buf = idautils.Assemble(asm_where, line) @@ -65,13 +66,13 @@ def FindInstructions(instr, asm_where=None): bufs.append(buf) # join the buffer into one string - buf = ''.join(bufs) + buf = b''.join(bufs) # take total assembled instructions length tlen = len(buf) # convert from binary string to space separated hex string - bin_str = ' '.join(["%02X" % ord(x) for x in buf]) + bin_str = ' '.join(["%02X" % (ord(x) if sys.version_info.major < 3 else x) for x in buf]) # find all binary strings print("Searching for: [%s]" % bin_str) diff --git a/Scripts/ImpRef.py b/Scripts/ImpRef.py index fc70f4f..0838ed0 100644 --- a/Scripts/ImpRef.py +++ b/Scripts/ImpRef.py @@ -23,7 +23,7 @@ def find_imported_funcs(dllname): imports = [] nimps = ida_nalt.get_import_module_qty() - for i in xrange(0, nimps): + for i in range(0, nimps): name = ida_nalt.get_import_module_name(i) if re.match(dllname, name, re.IGNORECASE) is None: continue @@ -37,14 +37,14 @@ def find_import_ref(dllname): imports = find_imported_funcs(dllname) R = dict() for i, (ea, name,_) in enumerate(imports): - #print "%x -> %s" % (ea, name) + #print("%x -> %s" % (ea, name)) for xref in idautils.XrefsTo(ea): # check if referrer is a thunk ea = xref.frm f = ida_funcs.get_func(ea) if f and (f.flags & ida_funcs.FUNC_THUNK) != 0: imports.append([f.start_ea, ida_funcs.get_func_name(f.start_ea), 0]) - #print "\t%x %s: from a thunk, parent added %x" % (ea, name, f.start_ea) + #print("\t%x %s: from a thunk, parent added %x" % (ea, name, f.start_ea)) continue # save results diff --git a/Scripts/ImportExportViewer.py b/Scripts/ImportExportViewer.py index 7baa1c4..df925e4 100644 --- a/Scripts/ImportExportViewer.py +++ b/Scripts/ImportExportViewer.py @@ -26,7 +26,7 @@ class ImpExpForm_t(PluginForm): tree = {} nimps = idaapi.get_import_module_qty() - for i in xrange(0, nimps): + for i in range(0, nimps): name = idaapi.get_import_module_name(i) if not name: continue diff --git a/Scripts/VirusTotal.py b/Scripts/VirusTotal.py index b627412..2177a31 100644 --- a/Scripts/VirusTotal.py +++ b/Scripts/VirusTotal.py @@ -266,7 +266,7 @@ Options: # Compile the form once if not self.Compiled(): _, args = self.Compile() - #print args[0] + #print(args[0]) # Populate the form self.txtApiKey.value = cfg.apikey diff --git a/Scripts/callstack_test.py b/Scripts/callstack_test.py index d9c0245..426a257 100644 --- a/Scripts/callstack_test.py +++ b/Scripts/callstack_test.py @@ -61,7 +61,7 @@ m = int(sys.argv[2]) func_params = {'n': 0, 'n1': 0, 'ident': '', 'pause' : ''} -for i in xrange(1, n + 1): +for i in range(1, n + 1): func_params['n'] = i func_params['n1'] = i+1 func_params['ident'] = " " * i @@ -82,11 +82,10 @@ f = file('src.cpp', 'w') f.write(body) f.close() - __sys(""" if exist src.exe del src.exe bcc32 src if exist src.exe move src.exe src_bcc.exe if exist src.obj del src.obj cl32 src.cpp /Zi /Od -""") \ No newline at end of file +""") diff --git a/api_contents.txt b/api_contents2.txt similarity index 99% rename from api_contents.txt rename to api_contents2.txt index 1e75cd5..d3bf300 100644 --- a/api_contents.txt +++ b/api_contents2.txt @@ -202,6 +202,7 @@ 'IDP_Hooks_ev_get_autocmt', 'IDP_Hooks_ev_get_bg_color', 'IDP_Hooks_ev_get_cc_regs', + 'IDP_Hooks_ev_get_code16_mode', 'IDP_Hooks_ev_get_dbr_opnum', 'IDP_Hooks_ev_get_default_enum_size', 'IDP_Hooks_ev_get_frame_retsize', @@ -255,6 +256,7 @@ 'IDP_Hooks_ev_realcvt', 'IDP_Hooks_ev_rename', 'IDP_Hooks_ev_replaying_undo', + 'IDP_Hooks_ev_set_code16_mode', 'IDP_Hooks_ev_set_idp_options', 'IDP_Hooks_ev_set_proc_options', 'IDP_Hooks_ev_setup_til', @@ -373,11 +375,11 @@ 'action_ctx_base_t_cur_value_set', 'action_ctx_base_t_focus_get', 'action_ctx_base_t_focus_set', + 'action_ctx_base_t_graph_selection_get', + 'action_ctx_base_t_graph_selection_set', 'action_ctx_base_t_has_flag', 'action_ctx_base_t_regname_get', 'action_ctx_base_t_regname_set', - 'action_ctx_base_t_reserved_get', - 'action_ctx_base_t_reserved_set', 'action_ctx_base_t_reset', 'action_ctx_base_t_widget_get', 'action_ctx_base_t_widget_set', @@ -529,6 +531,8 @@ 'argloc_t_is_rrel', 'argloc_t_is_scattered', 'argloc_t_is_stkoff', + 'argloc_t_justify_reg_high', + 'argloc_t_justify_stkoff_right', 'argloc_t_reg1', 'argloc_t_reg2', 'argloc_t_regoff', @@ -1421,6 +1425,23 @@ 'ccases_t___lt__', 'ccases_t___ne__', 'ccases_t_compare', + 'cdg_insn_iterator_t_dslot_get', + 'cdg_insn_iterator_t_dslot_insn_get', + 'cdg_insn_iterator_t_dslot_insn_set', + 'cdg_insn_iterator_t_dslot_set', + 'cdg_insn_iterator_t_dslot_with_xrefs', + 'cdg_insn_iterator_t_ea_get', + 'cdg_insn_iterator_t_ea_set', + 'cdg_insn_iterator_t_end_get', + 'cdg_insn_iterator_t_end_set', + 'cdg_insn_iterator_t_has_dslot', + 'cdg_insn_iterator_t_is_likely_dslot_get', + 'cdg_insn_iterator_t_is_likely_dslot_set', + 'cdg_insn_iterator_t_is_separate_dslot_get', + 'cdg_insn_iterator_t_is_separate_dslot_set', + 'cdg_insn_iterator_t_next', + 'cdg_insn_iterator_t_ok', + 'cdg_insn_iterator_t_start', 'cdo_t___eq__', 'cdo_t___ge__', 'cdo_t___gt__', @@ -1603,6 +1624,7 @@ 'cfunc_t_user_unions_set', 'cfunc_t_verify', 'cfuncptr_t___deref__', + 'cfuncptr_t___ptrval__', 'cfuncptr_t___ref__', 'cfuncptr_t___str__', 'cfuncptr_t_argidx_get', @@ -1743,6 +1765,7 @@ 'choose_get_widget', 'choose_idasgn', 'choose_local_tinfo', + 'choose_local_tinfo_and_delta', 'choose_name', 'choose_named_type', 'choose_refresh', @@ -1962,6 +1985,8 @@ 'codegen_t_gen_micro', 'codegen_t_ignore_micro_get', 'codegen_t_ignore_micro_set', + 'codegen_t_ii_get', + 'codegen_t_ii_set', 'codegen_t_insn_get', 'codegen_t_insn_set', 'codegen_t_load_operand', @@ -2394,6 +2419,7 @@ 'delete_cblock_t', 'delete_ccase_t', 'delete_ccases_t', + 'delete_cdg_insn_iterator_t', 'delete_cdo_t', 'delete_ceinsn_t', 'delete_cexpr_t', @@ -3535,13 +3561,13 @@ 'func_item_iterator_decode_prev_insn', 'func_item_iterator_next', 'func_item_iterator_prev', + 'func_item_iterator_t___next__', 'func_item_iterator_t_chunk', 'func_item_iterator_t_current', 'func_item_iterator_t_decode_preceding_insn', 'func_item_iterator_t_decode_prev_insn', 'func_item_iterator_t_first', 'func_item_iterator_t_last', - 'func_item_iterator_t_next', 'func_item_iterator_t_next_addr', 'func_item_iterator_t_next_code', 'func_item_iterator_t_next_data', @@ -3565,9 +3591,9 @@ 'func_md_diff_handler_t_on_score_changed', 'func_md_diff_handler_t_on_user_stkpnt_changed', 'func_parent_iterator_set', + 'func_parent_iterator_t___next__', 'func_parent_iterator_t_first', 'func_parent_iterator_t_last', - 'func_parent_iterator_t_next', 'func_parent_iterator_t_parent', 'func_parent_iterator_t_prev', 'func_parent_iterator_t_reset_fnt', @@ -3622,11 +3648,11 @@ 'func_t_tails_set', 'func_tail_iterator_set', 'func_tail_iterator_set_ea', + 'func_tail_iterator_t___next__', 'func_tail_iterator_t_chunk', 'func_tail_iterator_t_first', 'func_tail_iterator_t_last', 'func_tail_iterator_t_main', - 'func_tail_iterator_t_next', 'func_tail_iterator_t_prev', 'func_tail_iterator_t_set', 'func_tail_iterator_t_set_ea', @@ -3788,6 +3814,7 @@ 'get_compiler_abbr', 'get_compiler_name', 'get_compilers', + 'get_cp_validity', 'get_ctype_name', 'get_curline', 'get_current_idasgn', @@ -3805,6 +3832,7 @@ 'get_custom_data_types', 'get_custom_refinfo', 'get_custom_viewer_curline', + 'get_custom_viewer_location', 'get_custom_viewer_place', 'get_data_elsize', 'get_data_value', @@ -3855,6 +3883,7 @@ 'get_enum_member_serial', 'get_enum_member_value', 'get_enum_name', + 'get_enum_name2', 'get_enum_qty', 'get_enum_size', 'get_enum_type_ordinal', @@ -4525,6 +4554,7 @@ 'idc_parse_types', 'idc_print_type', 'idc_set_local_type', + 'idc_value_t___get_e', 'idc_value_t__create_empty_string', 'idc_value_t_c_str', 'idc_value_t_clear', @@ -4727,6 +4757,7 @@ 'inf_handle_rtti', 'inf_hide_comments', 'inf_hide_libfuncs', + 'inf_huge_arg_align', 'inf_inc_database_change_count', 'inf_is_32bit', 'inf_is_64bit', @@ -4759,6 +4790,7 @@ 'inf_prefix_show_funcoff', 'inf_prefix_show_segaddr', 'inf_prefix_show_stack', + 'inf_prefix_truncate_opcode_bytes', 'inf_propagate_regargs', 'inf_propagate_stkargs', 'inf_readonly_idb', @@ -4836,6 +4868,7 @@ 'inf_set_hide_comments', 'inf_set_hide_libfuncs', 'inf_set_highoff', + 'inf_set_huge_arg_align', 'inf_set_indent', 'inf_set_kernel_mode', 'inf_set_lenxref', @@ -4876,6 +4909,7 @@ 'inf_set_prefix_show_funcoff', 'inf_set_prefix_show_segaddr', 'inf_set_prefix_show_stack', + 'inf_set_prefix_truncate_opcode_bytes', 'inf_set_privrange', 'inf_set_privrange_end_ea', 'inf_set_privrange_start_ea', @@ -5236,6 +5270,7 @@ 'is_float', 'is_float0', 'is_float1', + 'is_floating_dtype', 'is_flow', 'is_fltnum', 'is_forced_operand', @@ -5503,7 +5538,7 @@ 'loader_input_t_close', 'loader_input_t_file2base', 'loader_input_t_filename', - 'loader_input_t_from_cobject', + 'loader_input_t_from_capsule', 'loader_input_t_from_fp', 'loader_input_t_from_linput', 'loader_input_t_get_char', @@ -5603,12 +5638,11 @@ 'lowertype_helper_t_func_has_stkframe_hole', 'lowertype_helper_t_get_func_purged_bytes', 'lumina_client_t_get_pop', + 'lumina_client_t_is_pattern_id', 'lumina_client_t_pull_md', 'lumina_client_t_pull_md__SWIG_0', 'lumina_client_t_pull_md__SWIG_1', 'lumina_client_t_push_md', - 'lumina_client_t_push_md__SWIG_0', - 'lumina_client_t_push_md__SWIG_1', 'lumina_client_t_set_pattern_id_md5', 'lumina_op_res_vec_t___eq__', 'lumina_op_res_vec_t___getitem__', @@ -5710,6 +5744,7 @@ 'lvar_saved_info_t___ne__', 'lvar_saved_info_t_clear_keep', 'lvar_saved_info_t_clr_forced_lvar', + 'lvar_saved_info_t_clr_nomap_lvar', 'lvar_saved_info_t_clr_noptr_lvar', 'lvar_saved_info_t_cmt_get', 'lvar_saved_info_t_cmt_set', @@ -5718,6 +5753,7 @@ 'lvar_saved_info_t_has_info', 'lvar_saved_info_t_is_forced_lvar', 'lvar_saved_info_t_is_kept', + 'lvar_saved_info_t_is_nomap_lvar', 'lvar_saved_info_t_is_noptr_lvar', 'lvar_saved_info_t_ll_get', 'lvar_saved_info_t_ll_set', @@ -5725,6 +5761,7 @@ 'lvar_saved_info_t_name_set', 'lvar_saved_info_t_set_forced_lvar', 'lvar_saved_info_t_set_keep', + 'lvar_saved_info_t_set_nomap_lvar', 'lvar_saved_info_t_set_noptr_lvar', 'lvar_saved_info_t_size_get', 'lvar_saved_info_t_size_set', @@ -5774,6 +5811,7 @@ 'lvar_t_append_list', 'lvar_t_clear_used', 'lvar_t_clr_arg_var', + 'lvar_t_clr_automapped', 'lvar_t_clr_dummy_arg', 'lvar_t_clr_fake_var', 'lvar_t_clr_floating_var', @@ -5804,6 +5842,7 @@ 'lvar_t_has_user_type', 'lvar_t_is_aliasable', 'lvar_t_is_arg_var', + 'lvar_t_is_automapped', 'lvar_t_is_dummy_arg', 'lvar_t_is_fake_var', 'lvar_t_is_floating_var', @@ -5820,6 +5859,7 @@ 'lvar_t_name_get', 'lvar_t_name_set', 'lvar_t_set_arg_var', + 'lvar_t_set_automapped', 'lvar_t_set_dummy_arg', 'lvar_t_set_fake_var', 'lvar_t_set_final_lvar_type', @@ -5987,7 +6027,6 @@ 'mbl_array_t_graph_insns', 'mbl_array_t_has_bad_sp', 'mbl_array_t_has_over_chains', - 'mbl_array_t_has_overvars', 'mbl_array_t_has_passregs', 'mbl_array_t_idaloc2vd', 'mbl_array_t_idb_node_get', @@ -6260,6 +6299,8 @@ 'mcallinfo_t_dstr', 'mcallinfo_t_flags_get', 'mcallinfo_t_flags_set', + 'mcallinfo_t_fti_attrs_get', + 'mcallinfo_t_fti_attrs_set', 'mcallinfo_t_get_type', 'mcallinfo_t_is_vararg', 'mcallinfo_t_lexcompare', @@ -6479,6 +6520,7 @@ 'minsn_t_is_ignlowsrc', 'minsn_t_is_inverted_jx', 'minsn_t_is_like_move', + 'minsn_t_is_mbarrier', 'minsn_t_is_memcpy', 'minsn_t_is_memset', 'minsn_t_is_mov', @@ -6515,6 +6557,7 @@ 'minsn_t_set_fpinsn', 'minsn_t_set_ignlowsrc', 'minsn_t_set_inverted_jx', + 'minsn_t_set_mbarrier', 'minsn_t_set_multimov', 'minsn_t_set_noret_icall', 'minsn_t_set_optional', @@ -6583,6 +6626,7 @@ 'mnumber_t_update_value', 'mnumber_t_value_get', 'mnumber_t_value_set', + 'modify_user_lvar_info', 'modify_user_lvars', 'modinfo_t_base_get', 'modinfo_t_base_set', @@ -6666,6 +6710,7 @@ 'mop_t_create_from_vdloc', 'mop_t_double_size', 'mop_t_dstr', + 'mop_t_empty', 'mop_t_equal_mops', 'mop_t_erase', 'mop_t_erase_but_keep_size', @@ -6678,6 +6723,7 @@ 'mop_t_get_stkvar', 'mop_t_has_side_effects', 'mop_t_is01', + 'mop_t_is_arglist', 'mop_t_is_bit_reg', 'mop_t_is_bit_reg__SWIG_0', 'mop_t_is_bit_reg__SWIG_1', @@ -7072,6 +7118,9 @@ 'new_cblock_t', 'new_ccase_t', 'new_ccases_t', + 'new_cdg_insn_iterator_t', + 'new_cdg_insn_iterator_t__SWIG_0', + 'new_cdg_insn_iterator_t__SWIG_1', 'new_cdo_t', 'new_ceinsn_t', 'new_cexpr_t', @@ -8097,6 +8146,7 @@ 'place_t_clone', 'place_t_compare', 'place_t_copyfrom', + 'place_t_deserialize', 'place_t_ending', 'place_t_enter', 'place_t_generate', @@ -8109,6 +8159,7 @@ 'place_t_next', 'place_t_prev', 'place_t_rebase', + 'place_t_serialize', 'place_t_toea', 'place_t_touval', 'plan_and_wait', @@ -8214,11 +8265,17 @@ 'print_tinfo', 'print_type', 'print_vdloc', + 'printop_t_aflags_get', + 'printop_t_aflags_set', + 'printop_t_features_get', + 'printop_t_features_set', 'printop_t_flags_get', 'printop_t_flags_set', 'printop_t_get_ti', - 'printop_t_is_ti_valid_get', - 'printop_t_is_ti_valid_set', + 'printop_t_is_aflags_initialized', + 'printop_t_is_ti_initialized', + 'printop_t_set_aflags_initialized', + 'printop_t_set_ti_initialized', 'printop_t_suspop_get', 'printop_t_suspop_set', 'printop_t_ti_get', @@ -8309,15 +8366,9 @@ 'pyg_select_node', 'pyg_show', 'pygc_create_groups', - 'pygc_del_nodes_infos', 'pygc_delete_groups', - 'pygc_get_current_renderer_type', - 'pygc_get_node_info', 'pygc_refresh', - 'pygc_set_current_renderer_type', 'pygc_set_groups_visibility', - 'pygc_set_node_info', - 'pygc_set_nodes_infos', 'pyidag_bind', 'pyidag_unbind', 'pyscv_add_line', @@ -8352,7 +8403,7 @@ 'qfile_t_close', 'qfile_t_filename', 'qfile_t_flush', - 'qfile_t_from_cobject', + 'qfile_t_from_capsule', 'qfile_t_from_fp', 'qfile_t_get_char', 'qfile_t_get_fp', @@ -8419,8 +8470,8 @@ 'qlist_cinsn_t_insert__SWIG_3', 'qlist_cinsn_t_iterator___eq__', 'qlist_cinsn_t_iterator___ne__', + 'qlist_cinsn_t_iterator___next__', 'qlist_cinsn_t_iterator_cur_get', - 'qlist_cinsn_t_iterator_next', 'qlist_cinsn_t_pop_back', 'qlist_cinsn_t_pop_front', 'qlist_cinsn_t_push_back', @@ -9504,7 +9555,6 @@ 'show_auto', 'show_name', 'show_wait_box', - 'show_wait_box__varargs__', 'simd_info_t_match_pattern', 'simd_info_t_memtype_get', 'simd_info_t_memtype_set', @@ -9847,6 +9897,7 @@ 'switch_info_t_regdtype_set', 'switch_info_t_regnum_get', 'switch_info_t_regnum_set', + 'switch_info_t_set_elbase', 'switch_info_t_set_expr', 'switch_info_t_set_jtable_element_size', 'switch_info_t_set_jtable_size', @@ -11131,4 +11182,4 @@ 'xreflist_t_swap', 'xreflist_t_truncate', 'yword_flag', - 'zword_flag']} + 'zword_flag']} \ No newline at end of file diff --git a/api_contents3.txt b/api_contents3.txt new file mode 100644 index 0000000..be68556 --- /dev/null +++ b/api_contents3.txt @@ -0,0 +1,11189 @@ +{'functions': ['AssembleLine', + 'DBG_Hooks_dbg_bpt', + 'DBG_Hooks_dbg_bpt_changed', + 'DBG_Hooks_dbg_exception', + 'DBG_Hooks_dbg_finished_loading_bpts', + 'DBG_Hooks_dbg_information', + 'DBG_Hooks_dbg_library_load', + 'DBG_Hooks_dbg_library_unload', + 'DBG_Hooks_dbg_process_attach', + 'DBG_Hooks_dbg_process_detach', + 'DBG_Hooks_dbg_process_exit', + 'DBG_Hooks_dbg_process_start', + 'DBG_Hooks_dbg_request_error', + 'DBG_Hooks_dbg_run_to', + 'DBG_Hooks_dbg_started_loading_bpts', + 'DBG_Hooks_dbg_step_into', + 'DBG_Hooks_dbg_step_over', + 'DBG_Hooks_dbg_step_until_ret', + 'DBG_Hooks_dbg_suspend_process', + 'DBG_Hooks_dbg_thread_exit', + 'DBG_Hooks_dbg_thread_start', + 'DBG_Hooks_dbg_trace', + 'DBG_Hooks_hook', + 'DBG_Hooks_unhook', + 'Hexrays_Hooks_close_pseudocode', + 'Hexrays_Hooks_cmt_changed', + 'Hexrays_Hooks_combine', + 'Hexrays_Hooks_create_hint', + 'Hexrays_Hooks_curpos', + 'Hexrays_Hooks_double_click', + 'Hexrays_Hooks_flowchart', + 'Hexrays_Hooks_func_printed', + 'Hexrays_Hooks_glbopt', + 'Hexrays_Hooks_hook', + 'Hexrays_Hooks_interr', + 'Hexrays_Hooks_keyboard', + 'Hexrays_Hooks_locopt', + 'Hexrays_Hooks_lvar_cmt_changed', + 'Hexrays_Hooks_lvar_mapping_changed', + 'Hexrays_Hooks_lvar_name_changed', + 'Hexrays_Hooks_lvar_type_changed', + 'Hexrays_Hooks_maturity', + 'Hexrays_Hooks_microcode', + 'Hexrays_Hooks_open_pseudocode', + 'Hexrays_Hooks_populating_popup', + 'Hexrays_Hooks_prealloc', + 'Hexrays_Hooks_preoptimized', + 'Hexrays_Hooks_print_func', + 'Hexrays_Hooks_prolog', + 'Hexrays_Hooks_refresh_pseudocode', + 'Hexrays_Hooks_resolve_stkaddrs', + 'Hexrays_Hooks_right_click', + 'Hexrays_Hooks_stkpnts', + 'Hexrays_Hooks_structural', + 'Hexrays_Hooks_switch_pseudocode', + 'Hexrays_Hooks_text_ready', + 'Hexrays_Hooks_unhook', + 'IDB_Hooks_allsegs_moved', + 'IDB_Hooks_auto_empty', + 'IDB_Hooks_auto_empty_finally', + 'IDB_Hooks_bookmark_changed', + 'IDB_Hooks_byte_patched', + 'IDB_Hooks_callee_addr_changed', + 'IDB_Hooks_changing_cmt', + 'IDB_Hooks_changing_enum_bf', + 'IDB_Hooks_changing_enum_cmt', + 'IDB_Hooks_changing_op_ti', + 'IDB_Hooks_changing_op_type', + 'IDB_Hooks_changing_range_cmt', + 'IDB_Hooks_changing_segm_class', + 'IDB_Hooks_changing_segm_end', + 'IDB_Hooks_changing_segm_name', + 'IDB_Hooks_changing_segm_start', + 'IDB_Hooks_changing_struc_align', + 'IDB_Hooks_changing_struc_cmt', + 'IDB_Hooks_changing_struc_member', + 'IDB_Hooks_changing_ti', + 'IDB_Hooks_closebase', + 'IDB_Hooks_cmt_changed', + 'IDB_Hooks_compiler_changed', + 'IDB_Hooks_deleting_enum', + 'IDB_Hooks_deleting_enum_member', + 'IDB_Hooks_deleting_func', + 'IDB_Hooks_deleting_func_tail', + 'IDB_Hooks_deleting_segm', + 'IDB_Hooks_deleting_struc', + 'IDB_Hooks_deleting_struc_member', + 'IDB_Hooks_deleting_tryblks', + 'IDB_Hooks_destroyed_items', + 'IDB_Hooks_determined_main', + 'IDB_Hooks_enum_bf_changed', + 'IDB_Hooks_enum_cmt_changed', + 'IDB_Hooks_enum_created', + 'IDB_Hooks_enum_deleted', + 'IDB_Hooks_enum_member_created', + 'IDB_Hooks_enum_member_deleted', + 'IDB_Hooks_enum_renamed', + 'IDB_Hooks_expanding_struc', + 'IDB_Hooks_extlang_changed', + 'IDB_Hooks_extra_cmt_changed', + 'IDB_Hooks_flow_chart_created', + 'IDB_Hooks_frame_deleted', + 'IDB_Hooks_func_added', + 'IDB_Hooks_func_noret_changed', + 'IDB_Hooks_func_tail_appended', + 'IDB_Hooks_func_tail_deleted', + 'IDB_Hooks_func_updated', + 'IDB_Hooks_hook', + 'IDB_Hooks_idasgn_loaded', + 'IDB_Hooks_item_color_changed', + 'IDB_Hooks_kernel_config_loaded', + 'IDB_Hooks_loader_finished', + 'IDB_Hooks_local_types_changed', + 'IDB_Hooks_make_code', + 'IDB_Hooks_make_data', + 'IDB_Hooks_op_ti_changed', + 'IDB_Hooks_op_type_changed', + 'IDB_Hooks_range_cmt_changed', + 'IDB_Hooks_renamed', + 'IDB_Hooks_renaming_enum', + 'IDB_Hooks_renaming_struc', + 'IDB_Hooks_renaming_struc_member', + 'IDB_Hooks_savebase', + 'IDB_Hooks_segm_added', + 'IDB_Hooks_segm_attrs_updated', + 'IDB_Hooks_segm_class_changed', + 'IDB_Hooks_segm_deleted', + 'IDB_Hooks_segm_end_changed', + 'IDB_Hooks_segm_moved', + 'IDB_Hooks_segm_name_changed', + 'IDB_Hooks_segm_start_changed', + 'IDB_Hooks_set_func_end', + 'IDB_Hooks_set_func_start', + 'IDB_Hooks_sgr_changed', + 'IDB_Hooks_sgr_deleted', + 'IDB_Hooks_stkpnts_changed', + 'IDB_Hooks_struc_align_changed', + 'IDB_Hooks_struc_cmt_changed', + 'IDB_Hooks_struc_created', + 'IDB_Hooks_struc_deleted', + 'IDB_Hooks_struc_expanded', + 'IDB_Hooks_struc_member_changed', + 'IDB_Hooks_struc_member_created', + 'IDB_Hooks_struc_member_deleted', + 'IDB_Hooks_struc_member_renamed', + 'IDB_Hooks_struc_renamed', + 'IDB_Hooks_tail_owner_changed', + 'IDB_Hooks_thunk_func_created', + 'IDB_Hooks_ti_changed', + 'IDB_Hooks_tryblks_updated', + 'IDB_Hooks_unhook', + 'IDB_Hooks_updating_tryblks', + 'IDB_Hooks_upgraded', + 'IDP_Hooks_ev_add_cref', + 'IDP_Hooks_ev_add_dref', + 'IDP_Hooks_ev_adjust_argloc', + 'IDP_Hooks_ev_adjust_libfunc_ea', + 'IDP_Hooks_ev_adjust_refinfo', + 'IDP_Hooks_ev_ana_insn', + 'IDP_Hooks_ev_analyze_prolog', + 'IDP_Hooks_ev_arg_addrs_ready', + 'IDP_Hooks_ev_assemble', + 'IDP_Hooks_ev_auto_queue_empty', + 'IDP_Hooks_ev_calc_arglocs', + 'IDP_Hooks_ev_calc_cdecl_purged_bytes', + 'IDP_Hooks_ev_calc_next_eas', + 'IDP_Hooks_ev_calc_purged_bytes', + 'IDP_Hooks_ev_calc_retloc', + 'IDP_Hooks_ev_calc_spdelta', + 'IDP_Hooks_ev_calc_step_over', + 'IDP_Hooks_ev_calc_switch_cases', + 'IDP_Hooks_ev_calc_varglocs', + 'IDP_Hooks_ev_calcrel', + 'IDP_Hooks_ev_can_have_type', + 'IDP_Hooks_ev_clean_tbit', + 'IDP_Hooks_ev_cmp_operands', + 'IDP_Hooks_ev_coagulate', + 'IDP_Hooks_ev_coagulate_dref', + 'IDP_Hooks_ev_create_flat_group', + 'IDP_Hooks_ev_create_func_frame', + 'IDP_Hooks_ev_create_switch_xrefs', + 'IDP_Hooks_ev_creating_segm', + 'IDP_Hooks_ev_decorate_name', + 'IDP_Hooks_ev_del_cref', + 'IDP_Hooks_ev_del_dref', + 'IDP_Hooks_ev_delay_slot_insn', + 'IDP_Hooks_ev_demangle_name', + 'IDP_Hooks_ev_emu_insn', + 'IDP_Hooks_ev_endbinary', + 'IDP_Hooks_ev_ending_undo', + 'IDP_Hooks_ev_equal_reglocs', + 'IDP_Hooks_ev_extract_address', + 'IDP_Hooks_ev_find_op_value', + 'IDP_Hooks_ev_find_reg_value', + 'IDP_Hooks_ev_func_bounds', + 'IDP_Hooks_ev_gen_asm_or_lst', + 'IDP_Hooks_ev_gen_map_file', + 'IDP_Hooks_ev_gen_regvar_def', + 'IDP_Hooks_ev_gen_src_file_lnnum', + 'IDP_Hooks_ev_gen_stkvar_def', + 'IDP_Hooks_ev_get_abi_info', + 'IDP_Hooks_ev_get_autocmt', + 'IDP_Hooks_ev_get_bg_color', + 'IDP_Hooks_ev_get_cc_regs', + 'IDP_Hooks_ev_get_code16_mode', + 'IDP_Hooks_ev_get_dbr_opnum', + 'IDP_Hooks_ev_get_default_enum_size', + 'IDP_Hooks_ev_get_frame_retsize', + 'IDP_Hooks_ev_get_macro_insn_head', + 'IDP_Hooks_ev_get_operand_string', + 'IDP_Hooks_ev_get_reg_info', + 'IDP_Hooks_ev_get_reg_name', + 'IDP_Hooks_ev_get_simd_types', + 'IDP_Hooks_ev_get_stkarg_offset', + 'IDP_Hooks_ev_get_stkvar_scale_factor', + 'IDP_Hooks_ev_getreg', + 'IDP_Hooks_ev_init', + 'IDP_Hooks_ev_insn_reads_tbit', + 'IDP_Hooks_ev_is_align_insn', + 'IDP_Hooks_ev_is_alloca_probe', + 'IDP_Hooks_ev_is_basic_block_end', + 'IDP_Hooks_ev_is_call_insn', + 'IDP_Hooks_ev_is_cond_insn', + 'IDP_Hooks_ev_is_far_jump', + 'IDP_Hooks_ev_is_indirect_jump', + 'IDP_Hooks_ev_is_insn_table_jump', + 'IDP_Hooks_ev_is_jump_func', + 'IDP_Hooks_ev_is_ret_insn', + 'IDP_Hooks_ev_is_sane_insn', + 'IDP_Hooks_ev_is_sp_based', + 'IDP_Hooks_ev_is_switch', + 'IDP_Hooks_ev_last_cb_before_loader', + 'IDP_Hooks_ev_loader', + 'IDP_Hooks_ev_lower_func_type', + 'IDP_Hooks_ev_max_ptr_size', + 'IDP_Hooks_ev_may_be_func', + 'IDP_Hooks_ev_may_show_sreg', + 'IDP_Hooks_ev_moving_segm', + 'IDP_Hooks_ev_newasm', + 'IDP_Hooks_ev_newbinary', + 'IDP_Hooks_ev_newfile', + 'IDP_Hooks_ev_newprc', + 'IDP_Hooks_ev_next_exec_insn', + 'IDP_Hooks_ev_oldfile', + 'IDP_Hooks_ev_out_assumes', + 'IDP_Hooks_ev_out_data', + 'IDP_Hooks_ev_out_footer', + 'IDP_Hooks_ev_out_header', + 'IDP_Hooks_ev_out_insn', + 'IDP_Hooks_ev_out_label', + 'IDP_Hooks_ev_out_mnem', + 'IDP_Hooks_ev_out_operand', + 'IDP_Hooks_ev_out_segend', + 'IDP_Hooks_ev_out_segstart', + 'IDP_Hooks_ev_out_special_item', + 'IDP_Hooks_ev_realcvt', + 'IDP_Hooks_ev_rename', + 'IDP_Hooks_ev_replaying_undo', + 'IDP_Hooks_ev_set_code16_mode', + 'IDP_Hooks_ev_set_idp_options', + 'IDP_Hooks_ev_set_proc_options', + 'IDP_Hooks_ev_setup_til', + 'IDP_Hooks_ev_shadow_args_size', + 'IDP_Hooks_ev_str2reg', + 'IDP_Hooks_ev_term', + 'IDP_Hooks_ev_treat_hindering_item', + 'IDP_Hooks_ev_undefine', + 'IDP_Hooks_ev_use_arg_types', + 'IDP_Hooks_ev_use_regarg_type', + 'IDP_Hooks_ev_use_stkarg_type', + 'IDP_Hooks_ev_validate_flirt_func', + 'IDP_Hooks_ev_verify_noreturn', + 'IDP_Hooks_ev_verify_sp', + 'IDP_Hooks_hook', + 'IDP_Hooks_unhook', + 'TPointDouble___eq__', + 'TPointDouble___ne__', + 'TPointDouble_add', + 'TPointDouble_negate', + 'TPointDouble_sub', + 'TPointDouble_x_get', + 'TPointDouble_x_set', + 'TPointDouble_y_get', + 'TPointDouble_y_set', + 'TWidget__from_ptrval__', + 'UI_Hooks_create_desktop_widget', + 'UI_Hooks_current_widget_changed', + 'UI_Hooks_database_inited', + 'UI_Hooks_debugger_menu_change', + 'UI_Hooks_finish_populating_widget_popup', + 'UI_Hooks_get_chooser_item_attrs', + 'UI_Hooks_get_custom_viewer_hint', + 'UI_Hooks_get_ea_hint', + 'UI_Hooks_get_item_hint', + 'UI_Hooks_get_widget_config', + 'UI_Hooks_hook', + 'UI_Hooks_idcstart', + 'UI_Hooks_idcstop', + 'UI_Hooks_plugin_loaded', + 'UI_Hooks_plugin_unloading', + 'UI_Hooks_populating_widget_popup', + 'UI_Hooks_postprocess_action', + 'UI_Hooks_preprocess_action', + 'UI_Hooks_range', + 'UI_Hooks_ready_to_run', + 'UI_Hooks_resume', + 'UI_Hooks_saved', + 'UI_Hooks_saving', + 'UI_Hooks_screen_ea_changed', + 'UI_Hooks_set_widget_config', + 'UI_Hooks_suspend', + 'UI_Hooks_term', + 'UI_Hooks_unhook', + 'UI_Hooks_updated_actions', + 'UI_Hooks_updating_actions', + 'UI_Hooks_widget_closing', + 'UI_Hooks_widget_invisible', + 'UI_Hooks_widget_visible', + 'View_Hooks_hook', + 'View_Hooks_unhook', + 'View_Hooks_view_activated', + 'View_Hooks_view_click', + 'View_Hooks_view_close', + 'View_Hooks_view_created', + 'View_Hooks_view_curpos', + 'View_Hooks_view_dblclick', + 'View_Hooks_view_deactivated', + 'View_Hooks_view_keydown', + 'View_Hooks_view_loc_changed', + 'View_Hooks_view_mouse_moved', + 'View_Hooks_view_mouse_over', + 'View_Hooks_view_switched', + '_ask_addr', + '_ask_addr__varargs__', + '_ask_long', + '_ask_long__varargs__', + '_ask_seg', + '_ask_seg__varargs__', + '_kludge_use_TPopupMenu', + '_ll_call_helper', + '_ll_call_helper__varargs__', + '_ll_create_helper', + '_ll_create_helper__varargs__', + '_ll_dereference', + '_ll_lnot', + '_ll_make_num', + '_ll_make_ref', + '_ll_new_block', + 'accepts_small_udts', + 'accepts_udts', + 'action_ctx_base_t__get_form', + 'action_ctx_base_t__get_form_title', + 'action_ctx_base_t__get_form_type', + 'action_ctx_base_t_action_get', + 'action_ctx_base_t_action_set', + 'action_ctx_base_t_chooser_selection_get', + 'action_ctx_base_t_chooser_selection_set', + 'action_ctx_base_t_cur_ea_get', + 'action_ctx_base_t_cur_ea_set', + 'action_ctx_base_t_cur_enum_get', + 'action_ctx_base_t_cur_enum_set', + 'action_ctx_base_t_cur_fchunk_get', + 'action_ctx_base_t_cur_fchunk_set', + 'action_ctx_base_t_cur_flags_get', + 'action_ctx_base_t_cur_flags_set', + 'action_ctx_base_t_cur_func_get', + 'action_ctx_base_t_cur_func_set', + 'action_ctx_base_t_cur_seg_get', + 'action_ctx_base_t_cur_seg_set', + 'action_ctx_base_t_cur_strmem_get', + 'action_ctx_base_t_cur_strmem_set', + 'action_ctx_base_t_cur_struc_get', + 'action_ctx_base_t_cur_struc_set', + 'action_ctx_base_t_cur_value_get', + 'action_ctx_base_t_cur_value_set', + 'action_ctx_base_t_focus_get', + 'action_ctx_base_t_focus_set', + 'action_ctx_base_t_graph_selection_get', + 'action_ctx_base_t_graph_selection_set', + 'action_ctx_base_t_has_flag', + 'action_ctx_base_t_regname_get', + 'action_ctx_base_t_regname_set', + 'action_ctx_base_t_reset', + 'action_ctx_base_t_widget_get', + 'action_ctx_base_t_widget_set', + 'action_ctx_base_t_widget_title_get', + 'action_ctx_base_t_widget_title_set', + 'action_ctx_base_t_widget_type_get', + 'action_ctx_base_t_widget_type_set', + 'action_desc_t_cb_get', + 'action_desc_t_cb_set', + 'action_desc_t_flags_get', + 'action_desc_t_flags_set', + 'action_desc_t_icon_get', + 'action_desc_t_icon_set', + 'action_desc_t_label_get', + 'action_desc_t_label_set', + 'action_desc_t_name_get', + 'action_desc_t_name_set', + 'action_desc_t_owner_get', + 'action_desc_t_owner_set', + 'action_desc_t_shortcut_get', + 'action_desc_t_shortcut_set', + 'action_desc_t_tooltip_get', + 'action_desc_t_tooltip_set', + 'activate_widget', + 'add_auto_stkpnt', + 'add_bpt', + 'add_bpt__SWIG_0', + 'add_bpt__SWIG_1', + 'add_byte', + 'add_cref', + 'add_dref', + 'add_dword', + 'add_encoding', + 'add_entry', + 'add_enum', + 'add_enum_member', + 'add_extra_cmt', + 'add_extra_cmt__varargs__', + 'add_extra_line', + 'add_extra_line__varargs__', + 'add_frame', + 'add_func', + 'add_func_ex', + 'add_hidden_range', + 'add_hotkey', + 'add_idc_class', + 'add_idc_gvar', + 'add_idc_hotkey', + 'add_mapping', + 'add_path_mapping', + 'add_pgm_cmt', + 'add_pgm_cmt__varargs__', + 'add_qword', + 'add_refinfo_dref', + 'add_regarg', + 'add_regvar', + 'add_segm', + 'add_segm_ex', + 'add_segment_translation', + 'add_sourcefile', + 'add_spaces', + 'add_struc', + 'add_struc_member', + 'add_til', + 'add_tryblk', + 'add_user_stkpnt', + 'add_virt_module', + 'add_word', + 'addon_count', + 'addon_info_t_cb_get', + 'addon_info_t_cb_set', + 'addon_info_t_custom_data_get', + 'addon_info_t_custom_data_set', + 'addon_info_t_custom_size_get', + 'addon_info_t_custom_size_set', + 'addon_info_t_freeform_get', + 'addon_info_t_freeform_set', + 'addon_info_t_id_get', + 'addon_info_t_id_set', + 'addon_info_t_name_get', + 'addon_info_t_name_set', + 'addon_info_t_producer_get', + 'addon_info_t_producer_set', + 'addon_info_t_url_get', + 'addon_info_t_url_set', + 'addon_info_t_version_get', + 'addon_info_t_version_set', + 'align_flag', + 'alloc_type_ordinal', + 'alloc_type_ordinals', + 'allocate_selector', + 'aloc_visitor_t_visit_location', + 'analyzer_options', + 'appcall', + 'append_abi_opts', + 'append_argloc', + 'append_cmt', + 'append_func_tail', + 'append_struct_fields', + 'append_tinfo_covered', + 'apply_callee_tinfo', + 'apply_cdecl', + 'apply_idasgn_to', + 'apply_metadata', + 'apply_named_type', + 'apply_once_tinfo_and_name', + 'apply_startup_sig', + 'apply_tinfo', + 'apply_tinfo_to_stkarg', + 'apply_type', + 'argloc_t___eq__', + 'argloc_t___ge__', + 'argloc_t___gt__', + 'argloc_t___le__', + 'argloc_t___lt__', + 'argloc_t___ne__', + 'argloc_t__consume_rrel', + 'argloc_t__consume_scattered', + 'argloc_t__set_badloc', + 'argloc_t__set_biggest', + 'argloc_t__set_custom', + 'argloc_t__set_ea', + 'argloc_t__set_reg1', + 'argloc_t__set_reg2', + 'argloc_t__set_stkoff', + 'argloc_t_advance', + 'argloc_t_atype', + 'argloc_t_calc_offset', + 'argloc_t_compare', + 'argloc_t_consume_rrel', + 'argloc_t_consume_scattered', + 'argloc_t_get_biggest', + 'argloc_t_get_custom', + 'argloc_t_get_ea', + 'argloc_t_get_reginfo', + 'argloc_t_get_rrel', + 'argloc_t_get_rrel__SWIG_0', + 'argloc_t_get_rrel__SWIG_1', + 'argloc_t_has_reg', + 'argloc_t_has_stkoff', + 'argloc_t_is_badloc', + 'argloc_t_is_custom', + 'argloc_t_is_ea', + 'argloc_t_is_fragmented', + 'argloc_t_is_mixed_scattered', + 'argloc_t_is_reg', + 'argloc_t_is_reg1', + 'argloc_t_is_reg2', + 'argloc_t_is_rrel', + 'argloc_t_is_scattered', + 'argloc_t_is_stkoff', + 'argloc_t_justify_reg_high', + 'argloc_t_justify_stkoff_right', + 'argloc_t_reg1', + 'argloc_t_reg2', + 'argloc_t_regoff', + 'argloc_t_scattered', + 'argloc_t_scattered__SWIG_0', + 'argloc_t_scattered__SWIG_1', + 'argloc_t_set_badloc', + 'argloc_t_set_ea', + 'argloc_t_set_reg1', + 'argloc_t_set_reg2', + 'argloc_t_set_stkoff', + 'argloc_t_stkoff', + 'argloc_t_swap', + 'arglocs_overlap', + 'argpart_t___lt__', + 'argpart_t_bad_offset', + 'argpart_t_bad_size', + 'argpart_t_off_get', + 'argpart_t_off_set', + 'argpart_t_size_get', + 'argpart_t_size_set', + 'argpart_t_swap', + 'argpartvec_t___eq__', + 'argpartvec_t___getitem__', + 'argpartvec_t___len__', + 'argpartvec_t___ne__', + 'argpartvec_t___setitem__', + 'argpartvec_t__del', + 'argpartvec_t_add_unique', + 'argpartvec_t_at', + 'argpartvec_t_begin', + 'argpartvec_t_begin__SWIG_0', + 'argpartvec_t_begin__SWIG_1', + 'argpartvec_t_capacity', + 'argpartvec_t_clear', + 'argpartvec_t_empty', + 'argpartvec_t_end', + 'argpartvec_t_end__SWIG_0', + 'argpartvec_t_end__SWIG_1', + 'argpartvec_t_erase', + 'argpartvec_t_erase__SWIG_0', + 'argpartvec_t_erase__SWIG_1', + 'argpartvec_t_extract', + 'argpartvec_t_find', + 'argpartvec_t_find__SWIG_0', + 'argpartvec_t_find__SWIG_1', + 'argpartvec_t_grow', + 'argpartvec_t_has', + 'argpartvec_t_inject', + 'argpartvec_t_insert', + 'argpartvec_t_pop_back', + 'argpartvec_t_push_back', + 'argpartvec_t_push_back__SWIG_0', + 'argpartvec_t_push_back__SWIG_1', + 'argpartvec_t_qclear', + 'argpartvec_t_reserve', + 'argpartvec_t_resize', + 'argpartvec_t_resize__SWIG_0', + 'argpartvec_t_resize__SWIG_1', + 'argpartvec_t_size', + 'argpartvec_t_swap', + 'argpartvec_t_truncate', + 'array_of_bitsets___eq__', + 'array_of_bitsets___getitem__', + 'array_of_bitsets___len__', + 'array_of_bitsets___ne__', + 'array_of_bitsets___setitem__', + 'array_of_bitsets__del', + 'array_of_bitsets_add_unique', + 'array_of_bitsets_at', + 'array_of_bitsets_begin', + 'array_of_bitsets_begin__SWIG_0', + 'array_of_bitsets_begin__SWIG_1', + 'array_of_bitsets_capacity', + 'array_of_bitsets_clear', + 'array_of_bitsets_empty', + 'array_of_bitsets_end', + 'array_of_bitsets_end__SWIG_0', + 'array_of_bitsets_end__SWIG_1', + 'array_of_bitsets_erase', + 'array_of_bitsets_erase__SWIG_0', + 'array_of_bitsets_erase__SWIG_1', + 'array_of_bitsets_extract', + 'array_of_bitsets_find', + 'array_of_bitsets_find__SWIG_0', + 'array_of_bitsets_find__SWIG_1', + 'array_of_bitsets_grow', + 'array_of_bitsets_has', + 'array_of_bitsets_inject', + 'array_of_bitsets_insert', + 'array_of_bitsets_pop_back', + 'array_of_bitsets_push_back', + 'array_of_bitsets_push_back__SWIG_0', + 'array_of_bitsets_push_back__SWIG_1', + 'array_of_bitsets_qclear', + 'array_of_bitsets_reserve', + 'array_of_bitsets_resize', + 'array_of_bitsets_resize__SWIG_0', + 'array_of_bitsets_resize__SWIG_1', + 'array_of_bitsets_size', + 'array_of_bitsets_swap', + 'array_of_bitsets_truncate', + 'array_of_ivlsets___eq__', + 'array_of_ivlsets___getitem__', + 'array_of_ivlsets___len__', + 'array_of_ivlsets___ne__', + 'array_of_ivlsets___setitem__', + 'array_of_ivlsets__del', + 'array_of_ivlsets_add_unique', + 'array_of_ivlsets_at', + 'array_of_ivlsets_begin', + 'array_of_ivlsets_begin__SWIG_0', + 'array_of_ivlsets_begin__SWIG_1', + 'array_of_ivlsets_capacity', + 'array_of_ivlsets_clear', + 'array_of_ivlsets_empty', + 'array_of_ivlsets_end', + 'array_of_ivlsets_end__SWIG_0', + 'array_of_ivlsets_end__SWIG_1', + 'array_of_ivlsets_erase', + 'array_of_ivlsets_erase__SWIG_0', + 'array_of_ivlsets_erase__SWIG_1', + 'array_of_ivlsets_extract', + 'array_of_ivlsets_find', + 'array_of_ivlsets_find__SWIG_0', + 'array_of_ivlsets_find__SWIG_1', + 'array_of_ivlsets_grow', + 'array_of_ivlsets_has', + 'array_of_ivlsets_inject', + 'array_of_ivlsets_insert', + 'array_of_ivlsets_pop_back', + 'array_of_ivlsets_push_back', + 'array_of_ivlsets_push_back__SWIG_0', + 'array_of_ivlsets_push_back__SWIG_1', + 'array_of_ivlsets_qclear', + 'array_of_ivlsets_reserve', + 'array_of_ivlsets_resize', + 'array_of_ivlsets_resize__SWIG_0', + 'array_of_ivlsets_resize__SWIG_1', + 'array_of_ivlsets_size', + 'array_of_ivlsets_swap', + 'array_of_ivlsets_truncate', + 'array_of_rangesets___eq__', + 'array_of_rangesets___getitem__', + 'array_of_rangesets___len__', + 'array_of_rangesets___ne__', + 'array_of_rangesets___setitem__', + 'array_of_rangesets__del', + 'array_of_rangesets_add_unique', + 'array_of_rangesets_at', + 'array_of_rangesets_begin', + 'array_of_rangesets_begin__SWIG_0', + 'array_of_rangesets_begin__SWIG_1', + 'array_of_rangesets_capacity', + 'array_of_rangesets_clear', + 'array_of_rangesets_empty', + 'array_of_rangesets_end', + 'array_of_rangesets_end__SWIG_0', + 'array_of_rangesets_end__SWIG_1', + 'array_of_rangesets_erase', + 'array_of_rangesets_erase__SWIG_0', + 'array_of_rangesets_erase__SWIG_1', + 'array_of_rangesets_extract', + 'array_of_rangesets_find', + 'array_of_rangesets_find__SWIG_0', + 'array_of_rangesets_find__SWIG_1', + 'array_of_rangesets_grow', + 'array_of_rangesets_has', + 'array_of_rangesets_inject', + 'array_of_rangesets_insert', + 'array_of_rangesets_pop_back', + 'array_of_rangesets_push_back', + 'array_of_rangesets_push_back__SWIG_0', + 'array_of_rangesets_push_back__SWIG_1', + 'array_of_rangesets_qclear', + 'array_of_rangesets_reserve', + 'array_of_rangesets_resize', + 'array_of_rangesets_resize__SWIG_0', + 'array_of_rangesets_resize__SWIG_1', + 'array_of_rangesets_size', + 'array_of_rangesets_swap', + 'array_of_rangesets_truncate', + 'array_parameters_t_alignment_get', + 'array_parameters_t_alignment_set', + 'array_parameters_t_flags_get', + 'array_parameters_t_flags_set', + 'array_parameters_t_lineitems_get', + 'array_parameters_t_lineitems_set', + 'array_type_data_t_base_get', + 'array_type_data_t_base_set', + 'array_type_data_t_elem_type_get', + 'array_type_data_t_elem_type_set', + 'array_type_data_t_nelems_get', + 'array_type_data_t_nelems_set', + 'array_type_data_t_swap', + 'asgop', + 'asgop_revert', + 'ask_buttons', + 'ask_buttons__varargs__', + 'ask_file', + 'ask_file__varargs__', + 'ask_for_feedback', + 'ask_for_feedback__varargs__', + 'ask_str', + 'ask_text', + 'ask_yn', + 'ask_yn__varargs__', + 'asm_t_a_align_get', + 'asm_t_a_align_set', + 'asm_t_a_ascii_get', + 'asm_t_a_ascii_set', + 'asm_t_a_band_get', + 'asm_t_a_band_set', + 'asm_t_a_bnot_get', + 'asm_t_a_bnot_set', + 'asm_t_a_bor_get', + 'asm_t_a_bor_set', + 'asm_t_a_bss_get', + 'asm_t_a_bss_set', + 'asm_t_a_byte_get', + 'asm_t_a_byte_set', + 'asm_t_a_comdef_get', + 'asm_t_a_comdef_set', + 'asm_t_a_curip_get', + 'asm_t_a_curip_set', + 'asm_t_a_double_get', + 'asm_t_a_double_set', + 'asm_t_a_dups_get', + 'asm_t_a_dups_set', + 'asm_t_a_dword_get', + 'asm_t_a_dword_set', + 'asm_t_a_equ_get', + 'asm_t_a_equ_set', + 'asm_t_a_extrn_get', + 'asm_t_a_extrn_set', + 'asm_t_a_float_get', + 'asm_t_a_float_set', + 'asm_t_a_include_fmt_get', + 'asm_t_a_include_fmt_set', + 'asm_t_a_mod_get', + 'asm_t_a_mod_set', + 'asm_t_a_oword_get', + 'asm_t_a_oword_set', + 'asm_t_a_packreal_get', + 'asm_t_a_packreal_set', + 'asm_t_a_public_get', + 'asm_t_a_public_set', + 'asm_t_a_qword_get', + 'asm_t_a_qword_set', + 'asm_t_a_rva_get', + 'asm_t_a_rva_set', + 'asm_t_a_seg_get', + 'asm_t_a_seg_set', + 'asm_t_a_shl_get', + 'asm_t_a_shl_set', + 'asm_t_a_shr_get', + 'asm_t_a_shr_set', + 'asm_t_a_sizeof_fmt_get', + 'asm_t_a_sizeof_fmt_set', + 'asm_t_a_tbyte_get', + 'asm_t_a_tbyte_set', + 'asm_t_a_vstruc_fmt_get', + 'asm_t_a_vstruc_fmt_set', + 'asm_t_a_weak_get', + 'asm_t_a_weak_set', + 'asm_t_a_word_get', + 'asm_t_a_word_set', + 'asm_t_a_xor_get', + 'asm_t_a_xor_set', + 'asm_t_a_yword_get', + 'asm_t_a_yword_set', + 'asm_t_accsep_get', + 'asm_t_accsep_set', + 'asm_t_ascsep_get', + 'asm_t_ascsep_set', + 'asm_t_cmnt2_get', + 'asm_t_cmnt2_set', + 'asm_t_cmnt_get', + 'asm_t_cmnt_set', + 'asm_t_end_get', + 'asm_t_end_set', + 'asm_t_esccodes_get', + 'asm_t_esccodes_set', + 'asm_t_flag2_get', + 'asm_t_flag2_set', + 'asm_t_flag_get', + 'asm_t_flag_set', + 'asm_t_header_get', + 'asm_t_header_set', + 'asm_t_help_get', + 'asm_t_help_set', + 'asm_t_high16_get', + 'asm_t_high16_set', + 'asm_t_high8_get', + 'asm_t_high8_set', + 'asm_t_lbrace_get', + 'asm_t_lbrace_set', + 'asm_t_low16_get', + 'asm_t_low16_set', + 'asm_t_low8_get', + 'asm_t_low8_set', + 'asm_t_name_get', + 'asm_t_name_set', + 'asm_t_origin_get', + 'asm_t_origin_set', + 'asm_t_rbrace_get', + 'asm_t_rbrace_set', + 'asm_t_uflag_get', + 'asm_t_uflag_set', + 'assemble', + 'attach_action_to_menu', + 'attach_action_to_popup', + 'attach_action_to_toolbar', + 'attach_custom_data_format', + 'attach_dynamic_action_to_popup', + 'attach_process', + 'auto_apply_tail', + 'auto_apply_type', + 'auto_cancel', + 'auto_display_t_ea_get', + 'auto_display_t_ea_set', + 'auto_display_t_state_get', + 'auto_display_t_state_set', + 'auto_display_t_type_get', + 'auto_display_t_type_set', + 'auto_get', + 'auto_is_ok', + 'auto_make_code', + 'auto_make_proc', + 'auto_mark', + 'auto_mark_range', + 'auto_recreate_insn', + 'auto_unmark', + 'auto_wait', + 'auto_wait_range', + 'backup_metadata', + 'banner', + 'base2file', + 'beep', + 'begin_type_updating', + 'bgcolors_t_epilog_color_get', + 'bgcolors_t_epilog_color_set', + 'bgcolors_t_prolog_color_get', + 'bgcolors_t_prolog_color_set', + 'bgcolors_t_switch_color_get', + 'bgcolors_t_switch_color_set', + 'bin_flag', + 'bin_search', + 'bit_bound_t_nbits_get', + 'bit_bound_t_nbits_set', + 'bit_bound_t_sbits_get', + 'bit_bound_t_sbits_set', + 'bitfield_type_data_t___eq__', + 'bitfield_type_data_t___ge__', + 'bitfield_type_data_t___gt__', + 'bitfield_type_data_t___le__', + 'bitfield_type_data_t___lt__', + 'bitfield_type_data_t___ne__', + 'bitfield_type_data_t_compare', + 'bitfield_type_data_t_is_unsigned_get', + 'bitfield_type_data_t_is_unsigned_set', + 'bitfield_type_data_t_nbytes_get', + 'bitfield_type_data_t_nbytes_set', + 'bitfield_type_data_t_swap', + 'bitfield_type_data_t_width_get', + 'bitfield_type_data_t_width_set', + 'bitset_t___eq__', + 'bitset_t___ge__', + 'bitset_t___gt__', + 'bitset_t___le__', + 'bitset_t___lt__', + 'bitset_t___ne__', + 'bitset_t_add', + 'bitset_t_add__SWIG_0', + 'bitset_t_add__SWIG_1', + 'bitset_t_add__SWIG_2', + 'bitset_t_back', + 'bitset_t_begin', + 'bitset_t_clear', + 'bitset_t_compare', + 'bitset_t_copy', + 'bitset_t_count', + 'bitset_t_count__SWIG_0', + 'bitset_t_count__SWIG_1', + 'bitset_t_cut_at', + 'bitset_t_dstr', + 'bitset_t_empty', + 'bitset_t_end', + 'bitset_t_fill_with_ones', + 'bitset_t_front', + 'bitset_t_has', + 'bitset_t_has_all', + 'bitset_t_has_any', + 'bitset_t_has_common', + 'bitset_t_inc', + 'bitset_t_includes', + 'bitset_t_intersect', + 'bitset_t_is_subset_of', + 'bitset_t_itat', + 'bitset_t_itv', + 'bitset_t_last', + 'bitset_t_shift_down', + 'bitset_t_sub', + 'bitset_t_sub__SWIG_0', + 'bitset_t_sub__SWIG_1', + 'bitset_t_sub__SWIG_2', + 'bitset_t_swap', + 'block_chains_begin', + 'block_chains_clear', + 'block_chains_end', + 'block_chains_erase', + 'block_chains_find', + 'block_chains_free', + 'block_chains_get', + 'block_chains_insert', + 'block_chains_iterator_t___eq__', + 'block_chains_iterator_t___ne__', + 'block_chains_iterator_t_x_get', + 'block_chains_iterator_t_x_set', + 'block_chains_new', + 'block_chains_next', + 'block_chains_prev', + 'block_chains_size', + 'block_chains_t__print', + 'block_chains_t_dstr', + 'block_chains_t_get_chain', + 'block_chains_t_get_chain__SWIG_0', + 'block_chains_t_get_chain__SWIG_1', + 'block_chains_t_get_chain__SWIG_2', + 'block_chains_t_get_chain__SWIG_3', + 'block_chains_t_get_reg_chain', + 'block_chains_t_get_reg_chain__SWIG_0', + 'block_chains_t_get_reg_chain__SWIG_1', + 'block_chains_t_get_stk_chain', + 'block_chains_t_get_stk_chain__SWIG_0', + 'block_chains_t_get_stk_chain__SWIG_1', + 'block_chains_vec_t___getitem__', + 'block_chains_vec_t___len__', + 'block_chains_vec_t___setitem__', + 'block_chains_vec_t_at', + 'block_chains_vec_t_begin', + 'block_chains_vec_t_begin__SWIG_0', + 'block_chains_vec_t_begin__SWIG_1', + 'block_chains_vec_t_capacity', + 'block_chains_vec_t_clear', + 'block_chains_vec_t_empty', + 'block_chains_vec_t_end', + 'block_chains_vec_t_end__SWIG_0', + 'block_chains_vec_t_end__SWIG_1', + 'block_chains_vec_t_erase', + 'block_chains_vec_t_erase__SWIG_0', + 'block_chains_vec_t_erase__SWIG_1', + 'block_chains_vec_t_extract', + 'block_chains_vec_t_grow', + 'block_chains_vec_t_inject', + 'block_chains_vec_t_insert', + 'block_chains_vec_t_pop_back', + 'block_chains_vec_t_push_back', + 'block_chains_vec_t_push_back__SWIG_0', + 'block_chains_vec_t_push_back__SWIG_1', + 'block_chains_vec_t_qclear', + 'block_chains_vec_t_reserve', + 'block_chains_vec_t_resize', + 'block_chains_vec_t_resize__SWIG_0', + 'block_chains_vec_t_resize__SWIG_1', + 'block_chains_vec_t_size', + 'block_chains_vec_t_swap', + 'block_chains_vec_t_truncate', + 'bookmarks_t_erase', + 'bookmarks_t_find_index', + 'bookmarks_t_get', + 'bookmarks_t_get_desc', + 'bookmarks_t_mark', + 'bookmarks_t_size', + 'boolvec_t___eq__', + 'boolvec_t___getitem__', + 'boolvec_t___len__', + 'boolvec_t___ne__', + 'boolvec_t___setitem__', + 'boolvec_t__del', + 'boolvec_t_add_unique', + 'boolvec_t_at', + 'boolvec_t_begin', + 'boolvec_t_begin__SWIG_0', + 'boolvec_t_begin__SWIG_1', + 'boolvec_t_capacity', + 'boolvec_t_clear', + 'boolvec_t_empty', + 'boolvec_t_end', + 'boolvec_t_end__SWIG_0', + 'boolvec_t_end__SWIG_1', + 'boolvec_t_erase', + 'boolvec_t_erase__SWIG_0', + 'boolvec_t_erase__SWIG_1', + 'boolvec_t_extract', + 'boolvec_t_find', + 'boolvec_t_find__SWIG_0', + 'boolvec_t_find__SWIG_1', + 'boolvec_t_grow', + 'boolvec_t_has', + 'boolvec_t_inject', + 'boolvec_t_insert', + 'boolvec_t_pop_back', + 'boolvec_t_push_back', + 'boolvec_t_push_back__SWIG_0', + 'boolvec_t_push_back__SWIG_1', + 'boolvec_t_qclear', + 'boolvec_t_reserve', + 'boolvec_t_resize', + 'boolvec_t_resize__SWIG_0', + 'boolvec_t_resize__SWIG_1', + 'boolvec_t_size', + 'boolvec_t_swap', + 'boolvec_t_truncate', + 'boundaries_begin', + 'boundaries_clear', + 'boundaries_end', + 'boundaries_erase', + 'boundaries_find', + 'boundaries_first', + 'boundaries_free', + 'boundaries_insert', + 'boundaries_iterator_t___eq__', + 'boundaries_iterator_t___ne__', + 'boundaries_iterator_t_x_get', + 'boundaries_iterator_t_x_set', + 'boundaries_new', + 'boundaries_next', + 'boundaries_prev', + 'boundaries_second', + 'boundaries_size', + 'boundaries_t_at', + 'boundaries_t_size', + 'bpt_location_t___eq__', + 'bpt_location_t___ge__', + 'bpt_location_t___gt__', + 'bpt_location_t___le__', + 'bpt_location_t___lt__', + 'bpt_location_t___ne__', + 'bpt_location_t_compare', + 'bpt_location_t_ea', + 'bpt_location_t_index_get', + 'bpt_location_t_index_set', + 'bpt_location_t_info_get', + 'bpt_location_t_info_set', + 'bpt_location_t_is_empty_path', + 'bpt_location_t_lineno', + 'bpt_location_t_loctype_get', + 'bpt_location_t_loctype_set', + 'bpt_location_t_offset', + 'bpt_location_t_path', + 'bpt_location_t_set_abs_bpt', + 'bpt_location_t_set_rel_bpt', + 'bpt_location_t_set_src_bpt', + 'bpt_location_t_set_sym_bpt', + 'bpt_location_t_symbol', + 'bpt_location_t_type', + 'bpt_t_badbpt', + 'bpt_t_cb_get', + 'bpt_t_cb_set', + 'bpt_t_cndidx_get', + 'bpt_t_cndidx_set', + 'bpt_t_condition_get', + 'bpt_t_condition_set', + 'bpt_t_ea_get', + 'bpt_t_ea_set', + 'bpt_t_elang_get', + 'bpt_t_elang_set', + 'bpt_t_enabled', + 'bpt_t_flags_get', + 'bpt_t_flags_set', + 'bpt_t_get_cnd_elang_idx', + 'bpt_t_get_size', + 'bpt_t_is_absbpt', + 'bpt_t_is_active', + 'bpt_t_is_compiled', + 'bpt_t_is_hwbpt', + 'bpt_t_is_inactive', + 'bpt_t_is_low_level', + 'bpt_t_is_page_bpt', + 'bpt_t_is_partially_active', + 'bpt_t_is_relbpt', + 'bpt_t_is_srcbpt', + 'bpt_t_is_symbpt', + 'bpt_t_is_tracemodebpt', + 'bpt_t_is_traceoffbpt', + 'bpt_t_is_traceonbpt', + 'bpt_t_listbpt', + 'bpt_t_loc_get', + 'bpt_t_loc_set', + 'bpt_t_pass_count_get', + 'bpt_t_pass_count_set', + 'bpt_t_pid_get', + 'bpt_t_pid_set', + 'bpt_t_props_get', + 'bpt_t_props_set', + 'bpt_t_set_abs_bpt', + 'bpt_t_set_rel_bpt', + 'bpt_t_set_src_bpt', + 'bpt_t_set_sym_bpt', + 'bpt_t_set_trace_action', + 'bpt_t_size_get', + 'bpt_t_size_set', + 'bpt_t_tid_get', + 'bpt_t_tid_set', + 'bpt_t_type_get', + 'bpt_t_type_set', + 'bpt_vec_t___getitem__', + 'bpt_vec_t___len__', + 'bpt_vec_t___setitem__', + 'bpt_vec_t_at', + 'bpt_vec_t_begin', + 'bpt_vec_t_begin__SWIG_0', + 'bpt_vec_t_begin__SWIG_1', + 'bpt_vec_t_capacity', + 'bpt_vec_t_clear', + 'bpt_vec_t_empty', + 'bpt_vec_t_end', + 'bpt_vec_t_end__SWIG_0', + 'bpt_vec_t_end__SWIG_1', + 'bpt_vec_t_erase', + 'bpt_vec_t_erase__SWIG_0', + 'bpt_vec_t_erase__SWIG_1', + 'bpt_vec_t_extract', + 'bpt_vec_t_grow', + 'bpt_vec_t_inject', + 'bpt_vec_t_insert', + 'bpt_vec_t_pop_back', + 'bpt_vec_t_push_back', + 'bpt_vec_t_push_back__SWIG_0', + 'bpt_vec_t_push_back__SWIG_1', + 'bpt_vec_t_qclear', + 'bpt_vec_t_reserve', + 'bpt_vec_t_resize', + 'bpt_vec_t_resize__SWIG_0', + 'bpt_vec_t_resize__SWIG_1', + 'bpt_vec_t_size', + 'bpt_vec_t_swap', + 'bpt_vec_t_truncate', + 'bptaddr_t_hea_get', + 'bptaddr_t_hea_set', + 'bptaddr_t_kea_get', + 'bptaddr_t_kea_set', + 'bring_debugger_to_front', + 'build_snapshot_tree', + 'build_stkvar_name', + 'build_stkvar_xrefs', + 'build_strlist', + 'byte_flag', + 'bytesize', + 'calc_basevalue', + 'calc_bg_color', + 'calc_c_cpp_name', + 'calc_dataseg', + 'calc_def_align', + 'calc_default_idaplace_flags', + 'calc_dflags', + 'calc_dist', + 'calc_fixup_size', + 'calc_func_metadata', + 'calc_func_size', + 'calc_idasgn_state', + 'calc_max_align', + 'calc_max_item_end', + 'calc_min_align', + 'calc_number_of_children', + 'calc_offset_base', + 'calc_prefix_color', + 'calc_probable_base_by_value', + 'calc_reference_data', + 'calc_stkvar_struc_offset', + 'calc_switch_cases', + 'calc_target', + 'calc_target__SWIG_0', + 'calc_target__SWIG_1', + 'calc_thunk_func_target', + 'calc_tinfo_gaps', + 'calc_type_size', + 'call_nav_colorizer', + 'call_stack_info_t___eq__', + 'call_stack_info_t___ne__', + 'call_stack_info_t_callea_get', + 'call_stack_info_t_callea_set', + 'call_stack_info_t_fp_get', + 'call_stack_info_t_fp_set', + 'call_stack_info_t_funcea_get', + 'call_stack_info_t_funcea_set', + 'call_stack_info_t_funcok_get', + 'call_stack_info_t_funcok_set', + 'call_stack_t___eq__', + 'call_stack_t___getitem__', + 'call_stack_t___len__', + 'call_stack_t___ne__', + 'call_stack_t___setitem__', + 'call_stack_t__del', + 'call_stack_t_add_unique', + 'call_stack_t_at', + 'call_stack_t_begin', + 'call_stack_t_begin__SWIG_0', + 'call_stack_t_begin__SWIG_1', + 'call_stack_t_capacity', + 'call_stack_t_clear', + 'call_stack_t_empty', + 'call_stack_t_end', + 'call_stack_t_end__SWIG_0', + 'call_stack_t_end__SWIG_1', + 'call_stack_t_erase', + 'call_stack_t_erase__SWIG_0', + 'call_stack_t_erase__SWIG_1', + 'call_stack_t_extract', + 'call_stack_t_find', + 'call_stack_t_find__SWIG_0', + 'call_stack_t_find__SWIG_1', + 'call_stack_t_grow', + 'call_stack_t_has', + 'call_stack_t_inject', + 'call_stack_t_insert', + 'call_stack_t_pop_back', + 'call_stack_t_push_back', + 'call_stack_t_push_back__SWIG_0', + 'call_stack_t_push_back__SWIG_1', + 'call_stack_t_qclear', + 'call_stack_t_reserve', + 'call_stack_t_resize', + 'call_stack_t_resize__SWIG_0', + 'call_stack_t_resize__SWIG_1', + 'call_stack_t_size', + 'call_stack_t_swap', + 'call_stack_t_truncate', + 'callregs_t_fpregs_get', + 'callregs_t_fpregs_set', + 'callregs_t_gpregs_get', + 'callregs_t_gpregs_set', + 'callregs_t_init_regs', + 'callregs_t_nregs_get', + 'callregs_t_nregs_set', + 'callregs_t_policy_get', + 'callregs_t_policy_set', + 'callregs_t_regcount', + 'callregs_t_reginds', + 'callregs_t_reset', + 'callregs_t_set', + 'can_be_off32', + 'can_decode', + 'can_define_item', + 'can_exc_continue', + 'cancel_exec_request', + 'carg_t___eq__', + 'carg_t___ge__', + 'carg_t___gt__', + 'carg_t___le__', + 'carg_t___lt__', + 'carg_t___ne__', + 'carg_t_compare', + 'carg_t_consume_cexpr', + 'carg_t_formal_type_get', + 'carg_t_formal_type_set', + 'carg_t_is_vararg_get', + 'carg_t_is_vararg_set', + 'carglist_t___eq__', + 'carglist_t___ge__', + 'carglist_t___gt__', + 'carglist_t___le__', + 'carglist_t___lt__', + 'carglist_t___ne__', + 'carglist_t_compare', + 'carglist_t_flags_get', + 'carglist_t_flags_set', + 'carglist_t_functype_get', + 'carglist_t_functype_set', + 'cases_and_targets_t_cases_get', + 'cases_and_targets_t_cases_set', + 'cases_and_targets_t_targets_get', + 'cases_and_targets_t_targets_set', + 'casevec_t___eq__', + 'casevec_t___getitem__', + 'casevec_t___len__', + 'casevec_t___ne__', + 'casevec_t___setitem__', + 'casevec_t__del', + 'casevec_t_add_unique', + 'casevec_t_at', + 'casevec_t_begin', + 'casevec_t_begin__SWIG_0', + 'casevec_t_begin__SWIG_1', + 'casevec_t_capacity', + 'casevec_t_clear', + 'casevec_t_empty', + 'casevec_t_end', + 'casevec_t_end__SWIG_0', + 'casevec_t_end__SWIG_1', + 'casevec_t_erase', + 'casevec_t_erase__SWIG_0', + 'casevec_t_erase__SWIG_1', + 'casevec_t_extract', + 'casevec_t_find', + 'casevec_t_find__SWIG_0', + 'casevec_t_find__SWIG_1', + 'casevec_t_grow', + 'casevec_t_has', + 'casevec_t_inject', + 'casevec_t_insert', + 'casevec_t_pop_back', + 'casevec_t_push_back', + 'casevec_t_push_back__SWIG_0', + 'casevec_t_push_back__SWIG_1', + 'casevec_t_qclear', + 'casevec_t_reserve', + 'casevec_t_resize', + 'casevec_t_resize__SWIG_0', + 'casevec_t_resize__SWIG_1', + 'casevec_t_size', + 'casevec_t_swap', + 'casevec_t_truncate', + 'casm_t___eq__', + 'casm_t___ge__', + 'casm_t___gt__', + 'casm_t___le__', + 'casm_t___lt__', + 'casm_t___ne__', + 'casm_t_compare', + 'casm_t_one_insn', + 'catch_t_obj_get', + 'catch_t_obj_set', + 'catch_t_type_id_get', + 'catch_t_type_id_set', + 'catchvec_t___eq__', + 'catchvec_t___getitem__', + 'catchvec_t___len__', + 'catchvec_t___ne__', + 'catchvec_t___setitem__', + 'catchvec_t__del', + 'catchvec_t_add_unique', + 'catchvec_t_at', + 'catchvec_t_begin', + 'catchvec_t_begin__SWIG_0', + 'catchvec_t_begin__SWIG_1', + 'catchvec_t_capacity', + 'catchvec_t_clear', + 'catchvec_t_empty', + 'catchvec_t_end', + 'catchvec_t_end__SWIG_0', + 'catchvec_t_end__SWIG_1', + 'catchvec_t_erase', + 'catchvec_t_erase__SWIG_0', + 'catchvec_t_erase__SWIG_1', + 'catchvec_t_extract', + 'catchvec_t_find', + 'catchvec_t_find__SWIG_0', + 'catchvec_t_find__SWIG_1', + 'catchvec_t_grow', + 'catchvec_t_has', + 'catchvec_t_inject', + 'catchvec_t_insert', + 'catchvec_t_pop_back', + 'catchvec_t_push_back', + 'catchvec_t_push_back__SWIG_0', + 'catchvec_t_push_back__SWIG_1', + 'catchvec_t_qclear', + 'catchvec_t_reserve', + 'catchvec_t_resize', + 'catchvec_t_resize__SWIG_0', + 'catchvec_t_resize__SWIG_1', + 'catchvec_t_size', + 'catchvec_t_swap', + 'catchvec_t_truncate', + 'cblock_t___eq__', + 'cblock_t___ge__', + 'cblock_t___gt__', + 'cblock_t___le__', + 'cblock_t___lt__', + 'cblock_t___ne__', + 'cblock_t__deregister', + 'cblock_t_compare', + 'ccase_t___eq__', + 'ccase_t___ge__', + 'ccase_t___gt__', + 'ccase_t___le__', + 'ccase_t___lt__', + 'ccase_t___ne__', + 'ccase_t_compare', + 'ccase_t_size', + 'ccase_t_value', + 'ccase_t_values_get', + 'ccase_t_values_set', + 'ccases_t___eq__', + 'ccases_t___ge__', + 'ccases_t___gt__', + 'ccases_t___le__', + 'ccases_t___lt__', + 'ccases_t___ne__', + 'ccases_t_compare', + 'cdg_insn_iterator_t_dslot_get', + 'cdg_insn_iterator_t_dslot_insn_get', + 'cdg_insn_iterator_t_dslot_insn_set', + 'cdg_insn_iterator_t_dslot_set', + 'cdg_insn_iterator_t_dslot_with_xrefs', + 'cdg_insn_iterator_t_ea_get', + 'cdg_insn_iterator_t_ea_set', + 'cdg_insn_iterator_t_end_get', + 'cdg_insn_iterator_t_end_set', + 'cdg_insn_iterator_t_has_dslot', + 'cdg_insn_iterator_t_is_likely_dslot_get', + 'cdg_insn_iterator_t_is_likely_dslot_set', + 'cdg_insn_iterator_t_is_separate_dslot_get', + 'cdg_insn_iterator_t_is_separate_dslot_set', + 'cdg_insn_iterator_t_next', + 'cdg_insn_iterator_t_ok', + 'cdg_insn_iterator_t_start', + 'cdo_t___eq__', + 'cdo_t___ge__', + 'cdo_t___gt__', + 'cdo_t___le__', + 'cdo_t___lt__', + 'cdo_t___ne__', + 'cdo_t_compare', + 'ceinsn_t_expr_get', + 'ceinsn_t_expr_set', + 'cexpr_t___eq__', + 'cexpr_t___ge__', + 'cexpr_t___gt__', + 'cexpr_t___le__', + 'cexpr_t___lt__', + 'cexpr_t___ne__', + 'cexpr_t__deregister', + 'cexpr_t__get_a', + 'cexpr_t__get_fpc', + 'cexpr_t__get_helper', + 'cexpr_t__get_insn', + 'cexpr_t__get_m', + 'cexpr_t__get_n', + 'cexpr_t__get_obj_ea', + 'cexpr_t__get_ptrsize', + 'cexpr_t__get_refwidth', + 'cexpr_t__get_string', + 'cexpr_t__get_x', + 'cexpr_t__get_y', + 'cexpr_t__get_z', + 'cexpr_t__register', + 'cexpr_t__replace_by', + 'cexpr_t__set_a', + 'cexpr_t__set_fpc', + 'cexpr_t__set_helper', + 'cexpr_t__set_insn', + 'cexpr_t__set_m', + 'cexpr_t__set_n', + 'cexpr_t__set_obj_ea', + 'cexpr_t__set_ptrsize', + 'cexpr_t__set_refwidth', + 'cexpr_t__set_string', + 'cexpr_t__set_x', + 'cexpr_t__set_y', + 'cexpr_t__set_z', + 'cexpr_t_assign', + 'cexpr_t_calc_type', + 'cexpr_t_cleanup', + 'cexpr_t_compare', + 'cexpr_t_contains_comma', + 'cexpr_t_contains_comma_or_insn_or_label', + 'cexpr_t_contains_insn', + 'cexpr_t_contains_insn_or_label', + 'cexpr_t_contains_operator', + 'cexpr_t_cpadone', + 'cexpr_t_equal_effect', + 'cexpr_t_exflags_get', + 'cexpr_t_exflags_set', + 'cexpr_t_find_num_op', + 'cexpr_t_find_num_op__SWIG_0', + 'cexpr_t_find_num_op__SWIG_1', + 'cexpr_t_find_op', + 'cexpr_t_find_op__SWIG_0', + 'cexpr_t_find_op__SWIG_1', + 'cexpr_t_get_1num_op', + 'cexpr_t_get_const_value', + 'cexpr_t_get_high_nbit_bound', + 'cexpr_t_get_low_nbit_bound', + 'cexpr_t_get_ptr_or_array', + 'cexpr_t_get_type_sign', + 'cexpr_t_get_v', + 'cexpr_t_has_side_effects', + 'cexpr_t_is_call_arg_of', + 'cexpr_t_is_call_object_of', + 'cexpr_t_is_child_of', + 'cexpr_t_is_const_value', + 'cexpr_t_is_cstr', + 'cexpr_t_is_fpop', + 'cexpr_t_is_jumpout', + 'cexpr_t_is_negative_const', + 'cexpr_t_is_nice_cond', + 'cexpr_t_is_nice_expr', + 'cexpr_t_is_non_negative_const', + 'cexpr_t_is_non_zero_const', + 'cexpr_t_is_odd_lvalue', + 'cexpr_t_is_type_signed', + 'cexpr_t_is_type_unsigned', + 'cexpr_t_is_undef_val', + 'cexpr_t_is_vftable', + 'cexpr_t_is_zero_const', + 'cexpr_t_maybe_ptr', + 'cexpr_t_numval', + 'cexpr_t_print1', + 'cexpr_t_put_number', + 'cexpr_t_requires_lvalue', + 'cexpr_t_set_cpadone', + 'cexpr_t_set_v', + 'cexpr_t_set_vftable', + 'cexpr_t_swap', + 'cexpr_t_theother', + 'cexpr_t_theother__SWIG_0', + 'cexpr_t_theother__SWIG_1', + 'cexpr_t_type_get', + 'cexpr_t_type_set', + 'cfg_get_cc_header_path', + 'cfg_get_cc_parm', + 'cfg_get_cc_predefined_macros', + 'cfor_t___eq__', + 'cfor_t___ge__', + 'cfor_t___gt__', + 'cfor_t___le__', + 'cfor_t___lt__', + 'cfor_t___ne__', + 'cfor_t_compare', + 'cfor_t_init_get', + 'cfor_t_init_set', + 'cfor_t_step_get', + 'cfor_t_step_set', + 'cfunc_parentee_t_calc_rvalue_type', + 'cfunc_parentee_t_func_get', + 'cfunc_parentee_t_func_set', + 'cfunc_t___str__', + 'cfunc_t_argidx_get', + 'cfunc_t_body_get', + 'cfunc_t_body_set', + 'cfunc_t_build_c_tree', + 'cfunc_t_del_orphan_cmts', + 'cfunc_t_entry_ea_get', + 'cfunc_t_entry_ea_set', + 'cfunc_t_find_item_coords', + 'cfunc_t_find_item_coords__SWIG_0', + 'cfunc_t_find_item_coords__SWIG_1', + 'cfunc_t_find_label', + 'cfunc_t_gather_derefs', + 'cfunc_t_get_boundaries', + 'cfunc_t_get_eamap', + 'cfunc_t_get_func_type', + 'cfunc_t_get_line_item', + 'cfunc_t_get_lvars', + 'cfunc_t_get_pseudocode', + 'cfunc_t_get_stkoff_delta', + 'cfunc_t_get_user_cmt', + 'cfunc_t_get_user_iflags', + 'cfunc_t_get_user_union_selection', + 'cfunc_t_get_warnings', + 'cfunc_t_has_orphan_cmts', + 'cfunc_t_hdrlines_get', + 'cfunc_t_hdrlines_set', + 'cfunc_t_maturity_get', + 'cfunc_t_maturity_set', + 'cfunc_t_mba_get', + 'cfunc_t_mba_set', + 'cfunc_t_numforms_get', + 'cfunc_t_numforms_set', + 'cfunc_t_print_dcl', + 'cfunc_t_print_func', + 'cfunc_t_refcnt_get', + 'cfunc_t_refcnt_set', + 'cfunc_t_refresh_func_ctext', + 'cfunc_t_release', + 'cfunc_t_remove_unused_labels', + 'cfunc_t_save_user_cmts', + 'cfunc_t_save_user_iflags', + 'cfunc_t_save_user_labels', + 'cfunc_t_save_user_numforms', + 'cfunc_t_save_user_unions', + 'cfunc_t_set_user_cmt', + 'cfunc_t_set_user_iflags', + 'cfunc_t_set_user_union_selection', + 'cfunc_t_statebits_get', + 'cfunc_t_statebits_set', + 'cfunc_t_treeitems_get', + 'cfunc_t_treeitems_set', + 'cfunc_t_user_cmts_get', + 'cfunc_t_user_cmts_set', + 'cfunc_t_user_iflags_get', + 'cfunc_t_user_iflags_set', + 'cfunc_t_user_labels_get', + 'cfunc_t_user_labels_set', + 'cfunc_t_user_unions_get', + 'cfunc_t_user_unions_set', + 'cfunc_t_verify', + 'cfuncptr_t___deref__', + 'cfuncptr_t___ptrval__', + 'cfuncptr_t___ref__', + 'cfuncptr_t___str__', + 'cfuncptr_t_argidx_get', + 'cfuncptr_t_body_get', + 'cfuncptr_t_body_set', + 'cfuncptr_t_build_c_tree', + 'cfuncptr_t_del_orphan_cmts', + 'cfuncptr_t_entry_ea_get', + 'cfuncptr_t_entry_ea_set', + 'cfuncptr_t_find_item_coords', + 'cfuncptr_t_find_item_coords__SWIG_0', + 'cfuncptr_t_find_item_coords__SWIG_1', + 'cfuncptr_t_find_label', + 'cfuncptr_t_gather_derefs', + 'cfuncptr_t_get_boundaries', + 'cfuncptr_t_get_eamap', + 'cfuncptr_t_get_func_type', + 'cfuncptr_t_get_line_item', + 'cfuncptr_t_get_lvars', + 'cfuncptr_t_get_pseudocode', + 'cfuncptr_t_get_stkoff_delta', + 'cfuncptr_t_get_user_cmt', + 'cfuncptr_t_get_user_iflags', + 'cfuncptr_t_get_user_union_selection', + 'cfuncptr_t_get_warnings', + 'cfuncptr_t_has_orphan_cmts', + 'cfuncptr_t_hdrlines_get', + 'cfuncptr_t_hdrlines_set', + 'cfuncptr_t_maturity_get', + 'cfuncptr_t_maturity_set', + 'cfuncptr_t_mba_get', + 'cfuncptr_t_mba_set', + 'cfuncptr_t_numforms_get', + 'cfuncptr_t_numforms_set', + 'cfuncptr_t_print_dcl', + 'cfuncptr_t_print_func', + 'cfuncptr_t_refcnt_get', + 'cfuncptr_t_refcnt_set', + 'cfuncptr_t_refresh_func_ctext', + 'cfuncptr_t_release', + 'cfuncptr_t_remove_unused_labels', + 'cfuncptr_t_reset', + 'cfuncptr_t_save_user_cmts', + 'cfuncptr_t_save_user_iflags', + 'cfuncptr_t_save_user_labels', + 'cfuncptr_t_save_user_numforms', + 'cfuncptr_t_save_user_unions', + 'cfuncptr_t_set_user_cmt', + 'cfuncptr_t_set_user_iflags', + 'cfuncptr_t_set_user_union_selection', + 'cfuncptr_t_statebits_get', + 'cfuncptr_t_statebits_set', + 'cfuncptr_t_treeitems_get', + 'cfuncptr_t_treeitems_set', + 'cfuncptr_t_user_cmts_get', + 'cfuncptr_t_user_cmts_set', + 'cfuncptr_t_user_iflags_get', + 'cfuncptr_t_user_iflags_set', + 'cfuncptr_t_user_labels_get', + 'cfuncptr_t_user_labels_set', + 'cfuncptr_t_user_unions_get', + 'cfuncptr_t_user_unions_set', + 'cfuncptr_t_verify', + 'cgoto_t___eq__', + 'cgoto_t___ge__', + 'cgoto_t___gt__', + 'cgoto_t___le__', + 'cgoto_t___lt__', + 'cgoto_t___ne__', + 'cgoto_t_compare', + 'cgoto_t_label_num_get', + 'cgoto_t_label_num_set', + 'chain_keeper_t_back', + 'chain_keeper_t_for_all_chains', + 'chain_keeper_t_front', + 'chain_t___lt__', + 'chain_t__print', + 'chain_t_append_list', + 'chain_t_clear_varnum', + 'chain_t_dstr', + 'chain_t_endoff', + 'chain_t_flags_get', + 'chain_t_flags_set', + 'chain_t_get_reg', + 'chain_t_get_stkoff', + 'chain_t_includes', + 'chain_t_is_fake', + 'chain_t_is_inited', + 'chain_t_is_overlapped', + 'chain_t_is_passreg', + 'chain_t_is_reg', + 'chain_t_is_replaced', + 'chain_t_is_stkoff', + 'chain_t_is_term', + 'chain_t_key', + 'chain_t_overlap', + 'chain_t_set_inited', + 'chain_t_set_overlapped', + 'chain_t_set_replaced', + 'chain_t_set_term', + 'chain_t_set_value', + 'chain_t_varnum_get', + 'chain_t_varnum_set', + 'chain_t_width_get', + 'chain_t_width_set', + 'chain_visitor_t_parent_get', + 'chain_visitor_t_parent_set', + 'chain_visitor_t_visit_chain', + 'change_segment_status', + 'change_storage_type', + 'channel_redir_t_fd_get', + 'channel_redir_t_fd_set', + 'channel_redir_t_file_get', + 'channel_redir_t_file_set', + 'channel_redir_t_flags_get', + 'channel_redir_t_flags_set', + 'channel_redir_t_is_append', + 'channel_redir_t_is_input', + 'channel_redir_t_is_output', + 'channel_redir_t_is_quoted', + 'channel_redir_t_length_get', + 'channel_redir_t_length_set', + 'channel_redir_t_start_get', + 'channel_redir_t_start_set', + 'char_flag', + 'check_bpt', + 'check_process_exit', + 'checkout_hexrays_license', + 'choose_activate', + 'choose_choose', + 'choose_close', + 'choose_create_embedded_chobj', + 'choose_entry', + 'choose_enum', + 'choose_enum_by_value', + 'choose_find', + 'choose_func', + 'choose_get_widget', + 'choose_idasgn', + 'choose_local_tinfo', + 'choose_local_tinfo_and_delta', + 'choose_name', + 'choose_named_type', + 'choose_refresh', + 'choose_segm', + 'choose_srcp', + 'choose_stkvar_xref', + 'choose_struc', + 'choose_til', + 'choose_trace_file', + 'choose_xref', + 'chooser_item_attrs_t_color_get', + 'chooser_item_attrs_t_color_set', + 'chooser_item_attrs_t_flags_get', + 'chooser_item_attrs_t_flags_set', + 'chooser_item_attrs_t_reset', + 'chunk_size', + 'chunk_start', + 'cif_t___eq__', + 'cif_t___ge__', + 'cif_t___gt__', + 'cif_t___le__', + 'cif_t___lt__', + 'cif_t___ne__', + 'cif_t_assign', + 'cif_t_cleanup', + 'cif_t_compare', + 'cif_t_ielse_get', + 'cif_t_ielse_set', + 'cif_t_ithen_get', + 'cif_t_ithen_set', + 'cinsn_t___eq__', + 'cinsn_t___ge__', + 'cinsn_t___gt__', + 'cinsn_t___le__', + 'cinsn_t___lt__', + 'cinsn_t___ne__', + 'cinsn_t__deregister', + 'cinsn_t__get_casm', + 'cinsn_t__get_cblock', + 'cinsn_t__get_cdo', + 'cinsn_t__get_cexpr', + 'cinsn_t__get_cfor', + 'cinsn_t__get_cgoto', + 'cinsn_t__get_cif', + 'cinsn_t__get_creturn', + 'cinsn_t__get_cswitch', + 'cinsn_t__get_cwhile', + 'cinsn_t__print', + 'cinsn_t__register', + 'cinsn_t__replace_by', + 'cinsn_t__set_casm', + 'cinsn_t__set_cblock', + 'cinsn_t__set_cdo', + 'cinsn_t__set_cexpr', + 'cinsn_t__set_cfor', + 'cinsn_t__set_cgoto', + 'cinsn_t__set_cif', + 'cinsn_t__set_creturn', + 'cinsn_t__set_cswitch', + 'cinsn_t__set_cwhile', + 'cinsn_t_assign', + 'cinsn_t_cleanup', + 'cinsn_t_collect_free_breaks', + 'cinsn_t_collect_free_continues', + 'cinsn_t_compare', + 'cinsn_t_contains_free_break', + 'cinsn_t_contains_free_continue', + 'cinsn_t_contains_insn', + 'cinsn_t_create_if', + 'cinsn_t_insn_is_epilog', + 'cinsn_t_is_ordinary_flow', + 'cinsn_t_new_insn', + 'cinsn_t_print1', + 'cinsn_t_swap', + 'cinsn_t_zero', + 'cinsnptrvec_t___eq__', + 'cinsnptrvec_t___getitem__', + 'cinsnptrvec_t___len__', + 'cinsnptrvec_t___ne__', + 'cinsnptrvec_t___setitem__', + 'cinsnptrvec_t__del', + 'cinsnptrvec_t_add_unique', + 'cinsnptrvec_t_at', + 'cinsnptrvec_t_begin', + 'cinsnptrvec_t_begin__SWIG_0', + 'cinsnptrvec_t_begin__SWIG_1', + 'cinsnptrvec_t_capacity', + 'cinsnptrvec_t_clear', + 'cinsnptrvec_t_empty', + 'cinsnptrvec_t_end', + 'cinsnptrvec_t_end__SWIG_0', + 'cinsnptrvec_t_end__SWIG_1', + 'cinsnptrvec_t_erase', + 'cinsnptrvec_t_erase__SWIG_0', + 'cinsnptrvec_t_erase__SWIG_1', + 'cinsnptrvec_t_extract', + 'cinsnptrvec_t_find', + 'cinsnptrvec_t_find__SWIG_0', + 'cinsnptrvec_t_find__SWIG_1', + 'cinsnptrvec_t_has', + 'cinsnptrvec_t_inject', + 'cinsnptrvec_t_insert', + 'cinsnptrvec_t_pop_back', + 'cinsnptrvec_t_push_back', + 'cinsnptrvec_t_push_back__SWIG_0', + 'cinsnptrvec_t_push_back__SWIG_1', + 'cinsnptrvec_t_qclear', + 'cinsnptrvec_t_reserve', + 'cinsnptrvec_t_resize', + 'cinsnptrvec_t_resize__SWIG_0', + 'cinsnptrvec_t_resize__SWIG_1', + 'cinsnptrvec_t_size', + 'cinsnptrvec_t_swap', + 'cinsnptrvec_t_truncate', + 'citem_cmt_t___str__', + 'citem_cmt_t_c_str', + 'citem_cmt_t_used_get', + 'citem_cmt_t_used_set', + 'citem_locator_t___eq__', + 'citem_locator_t___ge__', + 'citem_locator_t___gt__', + 'citem_locator_t___le__', + 'citem_locator_t___lt__', + 'citem_locator_t___ne__', + 'citem_locator_t_compare', + 'citem_locator_t_ea_get', + 'citem_locator_t_ea_set', + 'citem_locator_t_op_get', + 'citem_locator_t_op_set', + 'citem_t__get_op', + 'citem_t__obj_id', + 'citem_t__set_op', + 'citem_t_cexpr_get', + 'citem_t_cinsn_get', + 'citem_t_contains_expr', + 'citem_t_contains_label', + 'citem_t_ea_get', + 'citem_t_ea_set', + 'citem_t_find_closest_addr', + 'citem_t_find_parent_of', + 'citem_t_find_parent_of__SWIG_0', + 'citem_t_find_parent_of__SWIG_1', + 'citem_t_index_get', + 'citem_t_index_set', + 'citem_t_is_expr', + 'citem_t_label_num_get', + 'citem_t_label_num_set', + 'citem_t_print1', + 'citem_t_swap', + 'cleanup_appcall', + 'cleanup_name', + 'clear_bits', + 'clear_cached_cfuncs', + 'clear_refresh_request', + 'clear_requests_queue', + 'clear_strlist', + 'clear_tinfo_t', + 'clear_trace', + 'cloop_t_assign', + 'cloop_t_body_get', + 'cloop_t_body_set', + 'cloop_t_cleanup', + 'close_chooser', + 'close_linput', + 'close_pseudocode', + 'close_widget', + 'clr__bnot0', + 'clr__bnot1', + 'clr__invsign0', + 'clr__invsign1', + 'clr_abits', + 'clr_align_flow', + 'clr_cancelled', + 'clr_colored_item', + 'clr_database_flag', + 'clr_fixed_spd', + 'clr_has_lname', + 'clr_has_ti', + 'clr_has_ti0', + 'clr_has_ti1', + 'clr_libitem', + 'clr_lzero', + 'clr_lzero0', + 'clr_lzero1', + 'clr_node_info', + 'clr_noret', + 'clr_notcode', + 'clr_notproc', + 'clr_op_type', + 'clr_retfp', + 'clr_terse_struc', + 'clr_tilcmt', + 'clr_usemodsp', + 'clr_usersp', + 'clr_userti', + 'clr_zstroff', + 'cnumber_t___eq__', + 'cnumber_t___ge__', + 'cnumber_t___gt__', + 'cnumber_t___le__', + 'cnumber_t___lt__', + 'cnumber_t___ne__', + 'cnumber_t__print', + 'cnumber_t__value_get', + 'cnumber_t__value_set', + 'cnumber_t_assign', + 'cnumber_t_compare', + 'cnumber_t_nf_get', + 'cnumber_t_nf_set', + 'cnumber_t_value', + 'code_flag', + 'codegen_t_analyze_prolog', + 'codegen_t_emit', + 'codegen_t_emit__SWIG_0', + 'codegen_t_emit__SWIG_1', + 'codegen_t_emit_micro_mvm', + 'codegen_t_gen_micro', + 'codegen_t_ignore_micro_get', + 'codegen_t_ignore_micro_set', + 'codegen_t_ii_get', + 'codegen_t_ii_set', + 'codegen_t_insn_get', + 'codegen_t_insn_set', + 'codegen_t_load_operand', + 'codegen_t_mb_get', + 'codegen_t_mb_set', + 'codegen_t_mba_get', + 'codegen_t_mba_set', + 'collect_stack_trace', + 'compact_til', + 'compare_tinfo', + 'compile_idc_file', + 'compile_idc_snippet', + 'compile_idc_text', + 'compiler_info_t_cm_get', + 'compiler_info_t_cm_set', + 'compiler_info_t_defalign_get', + 'compiler_info_t_defalign_set', + 'compiler_info_t_id_get', + 'compiler_info_t_id_set', + 'compiler_info_t_size_b_get', + 'compiler_info_t_size_b_set', + 'compiler_info_t_size_e_get', + 'compiler_info_t_size_e_set', + 'compiler_info_t_size_i_get', + 'compiler_info_t_size_i_set', + 'compiler_info_t_size_l_get', + 'compiler_info_t_size_l_set', + 'compiler_info_t_size_ldbl_get', + 'compiler_info_t_size_ldbl_set', + 'compiler_info_t_size_ll_get', + 'compiler_info_t_size_ll_set', + 'compiler_info_t_size_s_get', + 'compiler_info_t_size_s_set', + 'const_aloc_visitor_t_visit_location', + 'construct_macro', + 'contains_fixups', + 'continue_process', + 'convert_pt_flags_to_hti', + 'convert_to_user_call', + 'copy_idcv', + 'copy_named_type', + 'copy_sreg_ranges', + 'copy_tinfo_t', + 'create_16bit_data', + 'create_32bit_data', + 'create_align', + 'create_byte', + 'create_bytearray_linput', + 'create_code_viewer', + 'create_custdata', + 'create_data', + 'create_disasm_graph', + 'create_disasm_graph__SWIG_0', + 'create_disasm_graph__SWIG_1', + 'create_double', + 'create_dword', + 'create_empty_widget', + 'create_encoding_helper', + 'create_field_name', + 'create_float', + 'create_generic_linput', + 'create_graph_viewer', + 'create_idcv_ref', + 'create_insn', + 'create_memory_linput', + 'create_menu', + 'create_mutable_graph', + 'create_numbered_type_name', + 'create_outctx', + 'create_oword', + 'create_packed_real', + 'create_qword', + 'create_simple_diff_handler', + 'create_simple_idb_diff_handler', + 'create_source_viewer', + 'create_strlit', + 'create_struct', + 'create_switch_table', + 'create_switch_xrefs', + 'create_tbyte', + 'create_tinfo', + 'create_toolbar', + 'create_typedef', + 'create_typedef__SWIG_0', + 'create_typedef__SWIG_1', + 'create_user_graph_place', + 'create_word', + 'create_yword', + 'create_zword', + 'creturn_t___eq__', + 'creturn_t___ge__', + 'creturn_t___gt__', + 'creturn_t___le__', + 'creturn_t___lt__', + 'creturn_t___ne__', + 'creturn_t_compare', + 'cswitch_t___eq__', + 'cswitch_t___ge__', + 'cswitch_t___gt__', + 'cswitch_t___le__', + 'cswitch_t___lt__', + 'cswitch_t___ne__', + 'cswitch_t_cases_get', + 'cswitch_t_cases_set', + 'cswitch_t_compare', + 'cswitch_t_mvnf_get', + 'cswitch_t_mvnf_set', + 'ctext_position_t___eq__', + 'ctext_position_t___ge__', + 'ctext_position_t___gt__', + 'ctext_position_t___le__', + 'ctext_position_t___lt__', + 'ctext_position_t___ne__', + 'ctext_position_t_compare', + 'ctext_position_t_in_ctree', + 'ctext_position_t_lnnum_get', + 'ctext_position_t_lnnum_set', + 'ctext_position_t_x_get', + 'ctext_position_t_x_set', + 'ctext_position_t_y_get', + 'ctext_position_t_y_set', + 'ctree_anchor_t_get_index', + 'ctree_anchor_t_get_itp', + 'ctree_anchor_t_is_blkcmt_anchor', + 'ctree_anchor_t_is_citem_anchor', + 'ctree_anchor_t_is_itp_anchor', + 'ctree_anchor_t_is_lvar_anchor', + 'ctree_anchor_t_is_valid_anchor', + 'ctree_anchor_t_value_get', + 'ctree_anchor_t_value_set', + 'ctree_item_t__get_e', + 'ctree_item_t__get_f', + 'ctree_item_t__get_i', + 'ctree_item_t__get_it', + 'ctree_item_t__get_l', + 'ctree_item_t_citype_get', + 'ctree_item_t_citype_set', + 'ctree_item_t_get_ea', + 'ctree_item_t_get_label_num', + 'ctree_item_t_get_lvar', + 'ctree_item_t_get_memptr', + 'ctree_item_t_is_citem', + 'ctree_item_t_loc_get', + 'ctree_items_t___eq__', + 'ctree_items_t___getitem__', + 'ctree_items_t___len__', + 'ctree_items_t___ne__', + 'ctree_items_t___setitem__', + 'ctree_items_t__del', + 'ctree_items_t_add_unique', + 'ctree_items_t_at', + 'ctree_items_t_begin', + 'ctree_items_t_begin__SWIG_0', + 'ctree_items_t_begin__SWIG_1', + 'ctree_items_t_capacity', + 'ctree_items_t_clear', + 'ctree_items_t_empty', + 'ctree_items_t_end', + 'ctree_items_t_end__SWIG_0', + 'ctree_items_t_end__SWIG_1', + 'ctree_items_t_erase', + 'ctree_items_t_erase__SWIG_0', + 'ctree_items_t_erase__SWIG_1', + 'ctree_items_t_extract', + 'ctree_items_t_find', + 'ctree_items_t_find__SWIG_0', + 'ctree_items_t_find__SWIG_1', + 'ctree_items_t_has', + 'ctree_items_t_inject', + 'ctree_items_t_insert', + 'ctree_items_t_pop_back', + 'ctree_items_t_push_back', + 'ctree_items_t_push_back__SWIG_0', + 'ctree_items_t_push_back__SWIG_1', + 'ctree_items_t_qclear', + 'ctree_items_t_reserve', + 'ctree_items_t_resize', + 'ctree_items_t_resize__SWIG_0', + 'ctree_items_t_resize__SWIG_1', + 'ctree_items_t_size', + 'ctree_items_t_swap', + 'ctree_items_t_truncate', + 'ctree_parentee_t_recalc_parent_types', + 'ctree_visitor_t_apply_to', + 'ctree_visitor_t_apply_to_exprs', + 'ctree_visitor_t_clr_prune', + 'ctree_visitor_t_clr_restart', + 'ctree_visitor_t_cv_flags_get', + 'ctree_visitor_t_cv_flags_set', + 'ctree_visitor_t_is_postorder', + 'ctree_visitor_t_leave_expr', + 'ctree_visitor_t_leave_insn', + 'ctree_visitor_t_maintain_parents', + 'ctree_visitor_t_must_prune', + 'ctree_visitor_t_must_restart', + 'ctree_visitor_t_only_insns', + 'ctree_visitor_t_parent_expr', + 'ctree_visitor_t_parent_insn', + 'ctree_visitor_t_parents_get', + 'ctree_visitor_t_parents_set', + 'ctree_visitor_t_prune_now', + 'ctree_visitor_t_set_restart', + 'ctree_visitor_t_visit_expr', + 'ctree_visitor_t_visit_insn', + 'cust_flag', + 'custfmt_flag', + 'custom_data_type_ids_fids_array___getitem__', + 'custom_data_type_ids_fids_array___len__', + 'custom_data_type_ids_fids_array___setitem__', + 'custom_data_type_ids_fids_array_data_get', + 'custom_data_type_ids_t___getFids', + 'custom_data_type_ids_t_dtid_get', + 'custom_data_type_ids_t_dtid_set', + 'custom_data_type_ids_t_fids_get', + 'custom_data_type_ids_t_fids_set', + 'custom_viewer_jump', + 'cwhile_t___eq__', + 'cwhile_t___ge__', + 'cwhile_t___gt__', + 'cwhile_t___le__', + 'cwhile_t___lt__', + 'cwhile_t___ne__', + 'cwhile_t_compare', + 'data_format_t___get_id', + 'data_format_t_hotkey_get', + 'data_format_t_hotkey_set', + 'data_format_t_is_present_in_menus', + 'data_format_t_menu_name_get', + 'data_format_t_menu_name_set', + 'data_format_t_name_get', + 'data_format_t_name_set', + 'data_format_t_props_get', + 'data_format_t_props_set', + 'data_format_t_text_width_get', + 'data_format_t_text_width_set', + 'data_format_t_value_size_get', + 'data_format_t_value_size_set', + 'data_type_t___get_id', + 'data_type_t_asm_keyword_get', + 'data_type_t_asm_keyword_set', + 'data_type_t_hotkey_get', + 'data_type_t_hotkey_set', + 'data_type_t_is_present_in_menus', + 'data_type_t_menu_name_get', + 'data_type_t_menu_name_set', + 'data_type_t_name_get', + 'data_type_t_name_set', + 'data_type_t_props_get', + 'data_type_t_props_set', + 'data_type_t_value_size_get', + 'data_type_t_value_size_set', + 'dbg_add_bpt_tev', + 'dbg_add_call_tev', + 'dbg_add_debug_event', + 'dbg_add_insn_tev', + 'dbg_add_many_tevs', + 'dbg_add_ret_tev', + 'dbg_add_tev', + 'dbg_add_thread', + 'dbg_appcall', + 'dbg_bin_search', + 'dbg_can_query', + 'dbg_del_thread', + 'dbg_get_input_path', + 'dbg_get_memory_info', + 'dbg_get_name', + 'dbg_get_registers', + 'dbg_get_thread_sreg_base', + 'dbg_is_loaded', + 'dbg_read_memory', + 'dbg_write_memory', + 'debapp_attrs_t_addrsize_get', + 'debapp_attrs_t_addrsize_set', + 'debapp_attrs_t_cbsize_get', + 'debapp_attrs_t_cbsize_set', + 'debapp_attrs_t_is_be_get', + 'debapp_attrs_t_is_be_set', + 'debapp_attrs_t_platform_get', + 'debapp_attrs_t_platform_set', + 'debug_event_t_bpt', + 'debug_event_t_bpt__SWIG_0', + 'debug_event_t_bpt__SWIG_1', + 'debug_event_t_bpt_ea', + 'debug_event_t_clear', + 'debug_event_t_clear_all', + 'debug_event_t_copy', + 'debug_event_t_ea_get', + 'debug_event_t_ea_set', + 'debug_event_t_eid', + 'debug_event_t_exc', + 'debug_event_t_exc__SWIG_0', + 'debug_event_t_exc__SWIG_1', + 'debug_event_t_exit_code', + 'debug_event_t_handled_get', + 'debug_event_t_handled_set', + 'debug_event_t_info', + 'debug_event_t_info__SWIG_0', + 'debug_event_t_info__SWIG_1', + 'debug_event_t_modinfo', + 'debug_event_t_modinfo__SWIG_0', + 'debug_event_t_modinfo__SWIG_1', + 'debug_event_t_pid_get', + 'debug_event_t_pid_set', + 'debug_event_t_set_bpt', + 'debug_event_t_set_eid', + 'debug_event_t_set_exception', + 'debug_event_t_set_exit_code', + 'debug_event_t_set_info', + 'debug_event_t_set_modinfo', + 'debug_event_t_tid_get', + 'debug_event_t_tid_set', + 'debug_hexrays_ctree', + 'dec_flag', + 'decode_insn', + 'decode_preceding_insn', + 'decode_prev_insn', + 'decompile', + 'decompile_func', + 'decompile_many', + 'deep_copy_idcv', + 'default_compiler', + 'define_exception', + 'define_stkvar', + 'del_absbase', + 'del_aflags', + 'del_alignment', + 'del_array_parameters', + 'del_bpt', + 'del_bpt__SWIG_0', + 'del_bpt__SWIG_1', + 'del_bptgrp', + 'del_cref', + 'del_custom_data_type_ids', + 'del_debug_names', + 'del_dref', + 'del_encoding', + 'del_enum', + 'del_enum_member', + 'del_extra_cmt', + 'del_fixup', + 'del_frame', + 'del_func', + 'del_global_name', + 'del_hidden_range', + 'del_hotkey', + 'del_idasgn', + 'del_idc_hotkey', + 'del_idcv_attr', + 'del_ind_purged', + 'del_item_color', + 'del_items', + 'del_local_name', + 'del_mapping', + 'del_member_tinfo', + 'del_named_type', + 'del_node_info', + 'del_numbered_type', + 'del_op_tinfo', + 'del_refinfo', + 'del_regvar', + 'del_segm', + 'del_segment_translations', + 'del_selector', + 'del_source_linnum', + 'del_sourcefile', + 'del_sreg_range', + 'del_stkpnt', + 'del_str_type', + 'del_struc', + 'del_struc_member', + 'del_struc_members', + 'del_switch_info', + 'del_switch_parent', + 'del_til', + 'del_tinfo', + 'del_tinfo_attr', + 'del_tryblks', + 'del_value', + 'del_virt_module', + 'delay_slot_insn', + 'delete_DBG_Hooks', + 'delete_Hexrays_Hooks', + 'delete_IDB_Hooks', + 'delete_IDP_Hooks', + 'delete_TPointDouble', + 'delete_UI_Hooks', + 'delete_View_Hooks', + 'delete___qmutex_t', + 'delete___qsemaphore_t', + 'delete___qthread_t', + 'delete___qtimer_t', + 'delete_action_ctx_base_t', + 'delete_action_desc_t', + 'delete_addon_info_t', + 'delete_aloc_visitor_t', + 'delete_argloc_t', + 'delete_argpart_t', + 'delete_argpartvec_t', + 'delete_array_of_bitsets', + 'delete_array_of_ivlsets', + 'delete_array_of_rangesets', + 'delete_array_parameters_t', + 'delete_array_type_data_t', + 'delete_asm_t', + 'delete_auto_display_t', + 'delete_bgcolors_t', + 'delete_bit_bound_t', + 'delete_bitfield_type_data_t', + 'delete_bitset_t', + 'delete_block_chains_iterator_t', + 'delete_block_chains_t', + 'delete_block_chains_vec_t', + 'delete_boolvec_t', + 'delete_boundaries_iterator_t', + 'delete_boundaries_t', + 'delete_bpt_location_t', + 'delete_bpt_t', + 'delete_bpt_vec_t', + 'delete_bptaddr_t', + 'delete_call_stack_info_t', + 'delete_call_stack_t', + 'delete_callregs_t', + 'delete_carg_t', + 'delete_carglist_t', + 'delete_cases_and_targets_t', + 'delete_casevec_t', + 'delete_casm_t', + 'delete_catch_t', + 'delete_catchvec_t', + 'delete_cblock_t', + 'delete_ccase_t', + 'delete_ccases_t', + 'delete_cdg_insn_iterator_t', + 'delete_cdo_t', + 'delete_ceinsn_t', + 'delete_cexpr_t', + 'delete_cfor_t', + 'delete_cfunc_parentee_t', + 'delete_cfunc_t', + 'delete_cfuncptr_t', + 'delete_cgoto_t', + 'delete_chain_keeper_t', + 'delete_chain_t', + 'delete_chain_visitor_t', + 'delete_channel_redir_t', + 'delete_chooser_item_attrs_t', + 'delete_cif_t', + 'delete_cinsn_t', + 'delete_cinsnptrvec_t', + 'delete_citem_cmt_t', + 'delete_citem_locator_t', + 'delete_citem_t', + 'delete_cloop_t', + 'delete_cnumber_t', + 'delete_codegen_t', + 'delete_compiler_info_t', + 'delete_const_aloc_visitor_t', + 'delete_creturn_t', + 'delete_cswitch_t', + 'delete_ctext_position_t', + 'delete_ctree_anchor_t', + 'delete_ctree_item_t', + 'delete_ctree_items_t', + 'delete_ctree_parentee_t', + 'delete_ctree_visitor_t', + 'delete_custom_data_type_ids_fids_array', + 'delete_custom_data_type_ids_t', + 'delete_cwhile_t', + 'delete_data_format_t', + 'delete_data_type_t', + 'delete_debapp_attrs_t', + 'delete_debug_event_t', + 'delete_disasm_line_t', + 'delete_disasm_text_t', + 'delete_ea_array', + 'delete_ea_name_t', + 'delete_ea_name_vec_t', + 'delete_ea_pointer', + 'delete_eamap_iterator_t', + 'delete_eamap_t', + 'delete_edge_info_t', + 'delete_edge_layout_point_t', + 'delete_edge_segment_t', + 'delete_edge_t', + 'delete_enum_const_t', + 'delete_enum_member_t', + 'delete_enum_member_vec_t', + 'delete_enum_member_visitor_t', + 'delete_enum_type_data_t', + 'delete_enumplace_t', + 'delete_eval_ctx_t', + 'delete_exception_info_t', + 'delete_excinfo_t', + 'delete_excvec_t', + 'delete_extra_cmt_t', + 'delete_extra_cmts', + 'delete_extra_cmts_t', + 'delete_fixup_data_t', + 'delete_fixup_info_t', + 'delete_fnum_array', + 'delete_fnumber_t', + 'delete_frame_desc_t', + 'delete_frame_mem_t', + 'delete_frame_mems_t', + 'delete_func_info_and_frequency_t', + 'delete_func_info_and_frequency_vec_t', + 'delete_func_info_and_pattern_t', + 'delete_func_info_and_pattern_vec_t', + 'delete_func_info_base_t', + 'delete_func_info_pattern_and_frequency_t', + 'delete_func_info_pattern_and_frequency_vec_t', + 'delete_func_info_t', + 'delete_func_info_vec_t', + 'delete_func_item_iterator_t', + 'delete_func_md_diff_handler_t', + 'delete_func_parent_iterator_t', + 'delete_func_t', + 'delete_func_tail_iterator_t', + 'delete_func_type_data_t', + 'delete_funcarg_t', + 'delete_funcargvec_t', + 'delete_gco_info_t', + 'delete_generic_linput_t', + 'delete_graph_chains_t', + 'delete_graph_item_t', + 'delete_graph_location_info_t', + 'delete_graph_node_visitor_t', + 'delete_graph_path_visitor_t', + 'delete_graph_visitor_t', + 'delete_group_crinfo_t', + 'delete_hexrays_failure_t', + 'delete_hexwarn_t', + 'delete_hexwarns_t', + 'delete_hidden_range_t', + 'delete_highlighter_cbs_t', + 'delete_history_entries_helper_t', + 'delete_history_item_t', + 'delete_history_t', + 'delete_ida_lowertype_helper_t', + 'delete_idaplace_t', + 'delete_idc_global_t', + 'delete_idc_value_t', + 'delete_idc_values_t', + 'delete_idp_desc_t', + 'delete_idp_name_t', + 'delete_imports', + 'delete_input_file_t', + 'delete_insn_cmt_t', + 'delete_insn_cmts_t', + 'delete_insn_ops_repr_t', + 'delete_insn_ops_reprs_t', + 'delete_insn_site_t', + 'delete_insn_t', + 'delete_instant_dbgopts_t', + 'delete_int_pointer', + 'delete_interval_t', + 'delete_intvec_t', + 'delete_ivl_t', + 'delete_ivl_with_name_t', + 'delete_ivlset_t', + 'delete_llabel_t', + 'delete_loader_input_t', + 'delete_loader_t', + 'delete_lochist_entry_t', + 'delete_lochist_t', + 'delete_lock_func', + 'delete_lock_segment', + 'delete_longlongvec_t', + 'delete_lowertype_helper_t', + 'delete_lumina_client_t', + 'delete_lumina_op_res_vec_t', + 'delete_lvar_locator_t', + 'delete_lvar_mapping_iterator_t', + 'delete_lvar_mapping_t', + 'delete_lvar_ref_t', + 'delete_lvar_saved_info_t', + 'delete_lvar_saved_infos_t', + 'delete_lvar_t', + 'delete_lvar_uservec_t', + 'delete_lvars_t', + 'delete_mba_range_iterator_t', + 'delete_mba_ranges_t', + 'delete_mbl_array_t', + 'delete_mblock_t', + 'delete_mcallarg_t', + 'delete_mcallargs_t', + 'delete_mcallinfo_t', + 'delete_mcases_t', + 'delete_md_type_parts_t', + 'delete_member_t', + 'delete_meminfo_vec_t', + 'delete_memory_info_t', + 'delete_memreg_info_t', + 'delete_memreg_infos_t', + 'delete_menu', + 'delete_metadata_iterator_t', + 'delete_microcode_filter_t', + 'delete_minsn_t', + 'delete_minsn_visitor_t', + 'delete_mlist_mop_visitor_t', + 'delete_mlist_t', + 'delete_mnumber_t', + 'delete_modinfo_t', + 'delete_mop_addr_t', + 'delete_mop_pair_t', + 'delete_mop_t', + 'delete_mop_visitor_t', + 'delete_mopvec_t', + 'delete_mutable_graph', + 'delete_mutable_graph_t', + 'delete_netnode', + 'delete_node_info_t', + 'delete_node_iterator', + 'delete_node_layout_t', + 'delete_node_ordering_t', + 'delete_number_format_t', + 'delete_op_parent_info_t', + 'delete_op_t', + 'delete_operand_locator_t', + 'delete_operands_array', + 'delete_operator_info_t', + 'delete_opinfo_t', + 'delete_oprepr_t', + 'delete_optblock_t', + 'delete_optinsn_t', + 'delete_pattern_id_t', + 'delete_pkt_clean_db_t', + 'delete_pkt_debugctl_t', + 'delete_pkt_dump_md_result_t', + 'delete_pkt_dump_md_t', + 'delete_pkt_get_pop_result_t', + 'delete_pkt_get_pop_t', + 'delete_pkt_helo_t', + 'delete_pkt_pull_md_result_t', + 'delete_pkt_pull_md_t', + 'delete_pkt_push_md_result_t', + 'delete_pkt_push_md_t', + 'delete_pkt_rpc_fail_t', + 'delete_pkt_rpc_notify_t', + 'delete_pkt_rpc_ok_t', + 'delete_place_t', + 'delete_plugin_info_t', + 'delete_point_t', + 'delete_pointseq_t', + 'delete_pointvec_t', + 'delete_pop_fun_t', + 'delete_predicate_t', + 'delete_printop_t', + 'delete_process_info_t', + 'delete_procinfo_vec_t', + 'delete_ptr_type_data_t', + 'delete_push_md_opts_t', + 'delete_push_md_result_t', + 'delete_qbasic_block_t', + 'delete_qfile_t', + 'delete_qflow_chart_t', + 'delete_qlist_cinsn_t', + 'delete_qlist_cinsn_t_iterator', + 'delete_qmutex_locker_t', + 'delete_qrefcnt_obj_t', + 'delete_qvector_carg_t', + 'delete_qvector_ccase_t', + 'delete_qvector_history_t', + 'delete_qvector_lvar_t', + 'delete_qvector_snapshotvec_t', + 'delete_range_array', + 'delete_range_t', + 'delete_rangeset_t', + 'delete_rangevec_base_t', + 'delete_rangevec_t', + 'delete_rect_t', + 'delete_refinfo_t', + 'delete_reg_info_t', + 'delete_regarg_t', + 'delete_reginfovec_t', + 'delete_register_info_t', + 'delete_regobj_t', + 'delete_regobjs_t', + 'delete_regobjvec_t', + 'delete_regval_t', + 'delete_regvar_array', + 'delete_regvar_t', + 'delete_renderer_info_pos_t', + 'delete_renderer_info_t', + 'delete_renderer_pos_info_t', + 'delete_rlist_t', + 'delete_row_info_t', + 'delete_rrel_t', + 'delete_scattered_aloc_t', + 'delete_scattered_segm_t', + 'delete_scif_t', + 'delete_scif_visitor_t', + 'delete_screen_graph_selection_base_t', + 'delete_screen_graph_selection_t', + 'delete_segm_move_info_t', + 'delete_segm_move_info_vec_t', + 'delete_segm_move_infos_t', + 'delete_segment_t', + 'delete_seh_t', + 'delete_sel_array', + 'delete_sel_pointer', + 'delete_selection_item_t', + 'delete_serialized_tinfo', + 'delete_simd_info_t', + 'delete_simple_diff_handler_t', + 'delete_simple_idb_diff_handler_t', + 'delete_simpleline_place_t', + 'delete_simpleline_t', + 'delete_sizevec_t', + 'delete_skipped_func_t', + 'delete_skipped_funcs_t', + 'delete_snapshot_t', + 'delete_sreg_range_t', + 'delete_stkpnt_array', + 'delete_stkpnt_t', + 'delete_stkpnts_t', + 'delete_stkvar_ref_t', + 'delete_strarray_t', + 'delete_string_info_t', + 'delete_strpath_ids_array', + 'delete_strpath_t', + 'delete_struc_t', + 'delete_struct_field_visitor_t', + 'delete_structplace_t', + 'delete_strvec_t', + 'delete_strwinsetup_t', + 'delete_sval_pointer', + 'delete_switch_info_t', + 'delete_switch_table', + 'delete_sync_source_t', + 'delete_tev_info_reg_t', + 'delete_tev_info_t', + 'delete_tev_reg_value_t', + 'delete_tev_reg_values_t', + 'delete_tevinforeg_vec_t', + 'delete_text_sink_t', + 'delete_thread_name_t', + 'delete_tid_array', + 'delete_til_symbol_t', + 'delete_til_t', + 'delete_tinfo_t', + 'delete_tinfo_visitor_t', + 'delete_toolbar', + 'delete_treeloc_t', + 'delete_try_handler_t', + 'delete_tryblk_t', + 'delete_tryblks_t', + 'delete_twinpos_t', + 'delete_type_attr_t', + 'delete_type_attrs_t', + 'delete_type_mods_t', + 'delete_typedef_type_data_t', + 'delete_uchar_array', + 'delete_udc_filter_t', + 'delete_udcall_map_iterator_t', + 'delete_udcall_t', + 'delete_udt_member_t', + 'delete_udt_type_data_t', + 'delete_udtmembervec_t', + 'delete_ui_requests_t', + 'delete_ui_stroff_applicator_t', + 'delete_ui_stroff_op_t', + 'delete_ui_stroff_ops_t', + 'delete_uintvec_t', + 'delete_ulonglongvec_t', + 'delete_unreferenced_stkvars', + 'delete_user_cmts_iterator_t', + 'delete_user_cmts_t', + 'delete_user_graph_place_t', + 'delete_user_identification_t', + 'delete_user_iflags_iterator_t', + 'delete_user_iflags_t', + 'delete_user_labels_iterator_t', + 'delete_user_labels_t', + 'delete_user_lvar_modifier_t', + 'delete_user_numforms_iterator_t', + 'delete_user_numforms_t', + 'delete_user_stkpnt_t', + 'delete_user_stkpnts_t', + 'delete_user_unions_iterator_t', + 'delete_user_unions_t', + 'delete_uval_array', + 'delete_uval_ivl_ivlset_t', + 'delete_uval_ivl_t', + 'delete_valrng_t', + 'delete_valstr_t', + 'delete_valstrs_t', + 'delete_valstrvec_t', + 'delete_var_ref_t', + 'delete_vc_printer_t', + 'delete_vd_failure_t', + 'delete_vd_interr_t', + 'delete_vd_printer_t', + 'delete_vdloc_t', + 'delete_vdui_t', + 'delete_view_mouse_event_location_t', + 'delete_view_mouse_event_t', + 'delete_vivl_t', + 'delete_voff_t', + 'delete_wrong_stkvar_ops', + 'delete_xrefblk_t', + 'delete_xreflist_entry_t', + 'delete_xreflist_t', + 'demangle_name', + 'deref_idcv', + 'deref_ptr', + 'deserialize_tinfo', + 'detach_action_from_menu', + 'detach_action_from_popup', + 'detach_action_from_toolbar', + 'detach_custom_data_format', + 'detach_process', + 'diff_metadata', + 'diff_trace_file', + 'disable_bblk_trace', + 'disable_bpt', + 'disable_bpt__SWIG_0', + 'disable_bpt__SWIG_1', + 'disable_flags', + 'disable_func_trace', + 'disable_insn_trace', + 'disable_script_timeout', + 'disable_step_trace', + 'disasm_line_t_at_get', + 'disasm_line_t_at_set', + 'disasm_line_t_bg_color_get', + 'disasm_line_t_bg_color_set', + 'disasm_line_t_is_default_get', + 'disasm_line_t_is_default_set', + 'disasm_line_t_line_get', + 'disasm_line_t_line_set', + 'disasm_line_t_prefix_color_get', + 'disasm_line_t_prefix_color_set', + 'disasm_text_t___getitem__', + 'disasm_text_t___len__', + 'disasm_text_t___setitem__', + 'disasm_text_t_at', + 'disasm_text_t_begin', + 'disasm_text_t_begin__SWIG_0', + 'disasm_text_t_begin__SWIG_1', + 'disasm_text_t_capacity', + 'disasm_text_t_clear', + 'disasm_text_t_empty', + 'disasm_text_t_end', + 'disasm_text_t_end__SWIG_0', + 'disasm_text_t_end__SWIG_1', + 'disasm_text_t_erase', + 'disasm_text_t_erase__SWIG_0', + 'disasm_text_t_erase__SWIG_1', + 'disasm_text_t_extract', + 'disasm_text_t_grow', + 'disasm_text_t_inject', + 'disasm_text_t_insert', + 'disasm_text_t_pop_back', + 'disasm_text_t_push_back', + 'disasm_text_t_push_back__SWIG_0', + 'disasm_text_t_push_back__SWIG_1', + 'disasm_text_t_qclear', + 'disasm_text_t_reserve', + 'disasm_text_t_resize', + 'disasm_text_t_resize__SWIG_0', + 'disasm_text_t_resize__SWIG_1', + 'disasm_text_t_size', + 'disasm_text_t_swap', + 'disasm_text_t_truncate', + 'disown_DBG_Hooks', + 'disown_Hexrays_Hooks', + 'disown_IDB_Hooks', + 'disown_IDP_Hooks', + 'disown_UI_Hooks', + 'disown_View_Hooks', + 'disown_aloc_visitor_t', + 'disown_cfunc_parentee_t', + 'disown_chain_visitor_t', + 'disown_codegen_t', + 'disown_const_aloc_visitor_t', + 'disown_ctree_parentee_t', + 'disown_ctree_visitor_t', + 'disown_enum_member_visitor_t', + 'disown_func_md_diff_handler_t', + 'disown_graph_node_visitor_t', + 'disown_graph_path_visitor_t', + 'disown_graph_visitor_t', + 'disown_highlighter_cbs_t', + 'disown_microcode_filter_t', + 'disown_minsn_visitor_t', + 'disown_mlist_mop_visitor_t', + 'disown_mop_visitor_t', + 'disown_mutable_graph_t', + 'disown_optblock_t', + 'disown_optinsn_t', + 'disown_predicate_t', + 'disown_scif_visitor_t', + 'disown_struct_field_visitor_t', + 'disown_text_sink_t', + 'disown_tinfo_visitor_t', + 'disown_udc_filter_t', + 'disown_ui_stroff_applicator_t', + 'disown_user_lvar_modifier_t', + 'disown_vc_printer_t', + 'disown_vd_printer_t', + 'display_copyright_warning', + 'display_gdl', + 'display_widget', + 'double_flag', + 'dstr', + 'dstr_tinfo', + 'dummy_ptrtype', + 'dump_func_type_data', + 'dword_flag', + 'ea2node', + 'ea2str', + 'ea_array___getitem__', + 'ea_array___setitem__', + 'ea_array_cast', + 'ea_array_frompointer', + 'ea_name_t_ea_get', + 'ea_name_t_ea_set', + 'ea_name_t_name_get', + 'ea_name_t_name_set', + 'ea_name_vec_t___getitem__', + 'ea_name_vec_t___len__', + 'ea_name_vec_t___setitem__', + 'ea_name_vec_t_at', + 'ea_name_vec_t_begin', + 'ea_name_vec_t_begin__SWIG_0', + 'ea_name_vec_t_begin__SWIG_1', + 'ea_name_vec_t_capacity', + 'ea_name_vec_t_clear', + 'ea_name_vec_t_empty', + 'ea_name_vec_t_end', + 'ea_name_vec_t_end__SWIG_0', + 'ea_name_vec_t_end__SWIG_1', + 'ea_name_vec_t_erase', + 'ea_name_vec_t_erase__SWIG_0', + 'ea_name_vec_t_erase__SWIG_1', + 'ea_name_vec_t_extract', + 'ea_name_vec_t_grow', + 'ea_name_vec_t_inject', + 'ea_name_vec_t_insert', + 'ea_name_vec_t_pop_back', + 'ea_name_vec_t_push_back', + 'ea_name_vec_t_push_back__SWIG_0', + 'ea_name_vec_t_push_back__SWIG_1', + 'ea_name_vec_t_qclear', + 'ea_name_vec_t_reserve', + 'ea_name_vec_t_resize', + 'ea_name_vec_t_resize__SWIG_0', + 'ea_name_vec_t_resize__SWIG_1', + 'ea_name_vec_t_size', + 'ea_name_vec_t_swap', + 'ea_name_vec_t_truncate', + 'ea_pointer_assign', + 'ea_pointer_cast', + 'ea_pointer_frompointer', + 'ea_pointer_value', + 'ea_to_ea64', + 'ea_viewer_history_push_and_jump', + 'eamap_begin', + 'eamap_clear', + 'eamap_end', + 'eamap_erase', + 'eamap_find', + 'eamap_first', + 'eamap_free', + 'eamap_insert', + 'eamap_iterator_t___eq__', + 'eamap_iterator_t___ne__', + 'eamap_iterator_t_x_get', + 'eamap_iterator_t_x_set', + 'eamap_new', + 'eamap_next', + 'eamap_prev', + 'eamap_second', + 'eamap_size', + 'eamap_t_at', + 'eamap_t_size', + 'eclose', + 'edge_info_t_color_get', + 'edge_info_t_color_set', + 'edge_info_t_dstoff_get', + 'edge_info_t_dstoff_set', + 'edge_info_t_layout_get', + 'edge_info_t_layout_set', + 'edge_info_t_reverse_layout', + 'edge_info_t_srcoff_get', + 'edge_info_t_srcoff_set', + 'edge_info_t_width_get', + 'edge_info_t_width_set', + 'edge_infos_wrapper_t_clear', + 'edge_infos_wrapper_t_ptr_get', + 'edge_infos_wrapper_t_ptr_set', + 'edge_layout_point_t___eq__', + 'edge_layout_point_t___ne__', + 'edge_layout_point_t_compare', + 'edge_layout_point_t_e_get', + 'edge_layout_point_t_e_set', + 'edge_layout_point_t_pidx_get', + 'edge_layout_point_t_pidx_set', + 'edge_segment_t___lt__', + 'edge_segment_t_e_get', + 'edge_segment_t_e_set', + 'edge_segment_t_length', + 'edge_segment_t_nseg_get', + 'edge_segment_t_nseg_set', + 'edge_segment_t_toright', + 'edge_segment_t_x0_get', + 'edge_segment_t_x0_set', + 'edge_segment_t_x1_get', + 'edge_segment_t_x1_set', + 'edge_t___eq__', + 'edge_t___lt__', + 'edge_t___ne__', + 'edge_t_dst_get', + 'edge_t_dst_set', + 'edge_t_src_get', + 'edge_t_src_set', + 'edit_manual_regions', + 'enable_auto', + 'enable_bblk_trace', + 'enable_bpt', + 'enable_bpt__SWIG_0', + 'enable_bpt__SWIG_1', + 'enable_chooser_item_attrs', + 'enable_extlang_python', + 'enable_flags', + 'enable_func_trace', + 'enable_insn_trace', + 'enable_manual_regions', + 'enable_python_cli', + 'enable_step_trace', + 'encoding_from_strtype', + 'end_type_updating', + 'enum_const_t_serial_get', + 'enum_const_t_serial_set', + 'enum_const_t_tid_get', + 'enum_const_t_tid_set', + 'enum_flag', + 'enum_import_names', + 'enum_member_t___eq__', + 'enum_member_t___ne__', + 'enum_member_t_cmt_get', + 'enum_member_t_cmt_set', + 'enum_member_t_name_get', + 'enum_member_t_name_set', + 'enum_member_t_swap', + 'enum_member_t_value_get', + 'enum_member_t_value_set', + 'enum_member_vec_t___eq__', + 'enum_member_vec_t___getitem__', + 'enum_member_vec_t___len__', + 'enum_member_vec_t___ne__', + 'enum_member_vec_t___setitem__', + 'enum_member_vec_t__del', + 'enum_member_vec_t_add_unique', + 'enum_member_vec_t_at', + 'enum_member_vec_t_begin', + 'enum_member_vec_t_begin__SWIG_0', + 'enum_member_vec_t_begin__SWIG_1', + 'enum_member_vec_t_capacity', + 'enum_member_vec_t_clear', + 'enum_member_vec_t_empty', + 'enum_member_vec_t_end', + 'enum_member_vec_t_end__SWIG_0', + 'enum_member_vec_t_end__SWIG_1', + 'enum_member_vec_t_erase', + 'enum_member_vec_t_erase__SWIG_0', + 'enum_member_vec_t_erase__SWIG_1', + 'enum_member_vec_t_extract', + 'enum_member_vec_t_find', + 'enum_member_vec_t_find__SWIG_0', + 'enum_member_vec_t_find__SWIG_1', + 'enum_member_vec_t_grow', + 'enum_member_vec_t_has', + 'enum_member_vec_t_inject', + 'enum_member_vec_t_insert', + 'enum_member_vec_t_pop_back', + 'enum_member_vec_t_push_back', + 'enum_member_vec_t_push_back__SWIG_0', + 'enum_member_vec_t_push_back__SWIG_1', + 'enum_member_vec_t_qclear', + 'enum_member_vec_t_reserve', + 'enum_member_vec_t_resize', + 'enum_member_vec_t_resize__SWIG_0', + 'enum_member_vec_t_resize__SWIG_1', + 'enum_member_vec_t_size', + 'enum_member_vec_t_swap', + 'enum_member_vec_t_truncate', + 'enum_member_visitor_t_visit_enum_member', + 'enum_type_data_t_bte_get', + 'enum_type_data_t_bte_set', + 'enum_type_data_t_calc_mask', + 'enum_type_data_t_calc_nbytes', + 'enum_type_data_t_group_sizes_get', + 'enum_type_data_t_group_sizes_set', + 'enum_type_data_t_is_64bit', + 'enum_type_data_t_is_char', + 'enum_type_data_t_is_hex', + 'enum_type_data_t_is_sdec', + 'enum_type_data_t_is_udec', + 'enum_type_data_t_swap', + 'enum_type_data_t_taenum_bits_get', + 'enum_type_data_t_taenum_bits_set', + 'enumerate_files', + 'enumplace_t_bmask_get', + 'enumplace_t_bmask_set', + 'enumplace_t_idx_get', + 'enumplace_t_idx_set', + 'enumplace_t_serial_get', + 'enumplace_t_serial_set', + 'enumplace_t_value_get', + 'enumplace_t_value_set', + 'equal_bytes', + 'error', + 'error__varargs__', + 'eval_ctx_t_ea_get', + 'eval_ctx_t_ea_set', + 'eval_expr', + 'eval_idc_expr', + 'exception_info_t_break_on', + 'exception_info_t_code_get', + 'exception_info_t_code_set', + 'exception_info_t_desc_get', + 'exception_info_t_desc_set', + 'exception_info_t_flags_get', + 'exception_info_t_flags_set', + 'exception_info_t_handle', + 'exception_info_t_name_get', + 'exception_info_t_name_set', + 'excinfo_t_can_cont_get', + 'excinfo_t_can_cont_set', + 'excinfo_t_code_get', + 'excinfo_t_code_set', + 'excinfo_t_ea_get', + 'excinfo_t_ea_set', + 'excinfo_t_info_get', + 'excinfo_t_info_set', + 'excvec_t___getitem__', + 'excvec_t___len__', + 'excvec_t___setitem__', + 'excvec_t_at', + 'excvec_t_begin', + 'excvec_t_begin__SWIG_0', + 'excvec_t_begin__SWIG_1', + 'excvec_t_capacity', + 'excvec_t_clear', + 'excvec_t_empty', + 'excvec_t_end', + 'excvec_t_end__SWIG_0', + 'excvec_t_end__SWIG_1', + 'excvec_t_erase', + 'excvec_t_erase__SWIG_0', + 'excvec_t_erase__SWIG_1', + 'excvec_t_extract', + 'excvec_t_grow', + 'excvec_t_inject', + 'excvec_t_insert', + 'excvec_t_pop_back', + 'excvec_t_push_back', + 'excvec_t_push_back__SWIG_0', + 'excvec_t_push_back__SWIG_1', + 'excvec_t_qclear', + 'excvec_t_reserve', + 'excvec_t_resize', + 'excvec_t_resize__SWIG_0', + 'excvec_t_resize__SWIG_1', + 'excvec_t_size', + 'excvec_t_swap', + 'excvec_t_truncate', + 'exec_idc_script', + 'exec_system_script', + 'execute_sync', + 'execute_ui_requests', + 'exist', + 'exist_bpt', + 'exists_fixup', + 'exit_process', + 'expand_struc', + 'extend_sign', + 'extra_cmt_t_next_get', + 'extra_cmt_t_next_set', + 'extra_cmt_t_prev_get', + 'extra_cmt_t_prev_set', + 'extra_cmts_t___getitem__', + 'extra_cmts_t___len__', + 'extra_cmts_t___setitem__', + 'extra_cmts_t_at', + 'extra_cmts_t_begin', + 'extra_cmts_t_begin__SWIG_0', + 'extra_cmts_t_begin__SWIG_1', + 'extra_cmts_t_capacity', + 'extra_cmts_t_clear', + 'extra_cmts_t_empty', + 'extra_cmts_t_end', + 'extra_cmts_t_end__SWIG_0', + 'extra_cmts_t_end__SWIG_1', + 'extra_cmts_t_erase', + 'extra_cmts_t_erase__SWIG_0', + 'extra_cmts_t_erase__SWIG_1', + 'extra_cmts_t_extract', + 'extra_cmts_t_grow', + 'extra_cmts_t_inject', + 'extra_cmts_t_insert', + 'extra_cmts_t_pop_back', + 'extra_cmts_t_push_back', + 'extra_cmts_t_push_back__SWIG_0', + 'extra_cmts_t_push_back__SWIG_1', + 'extra_cmts_t_qclear', + 'extra_cmts_t_reserve', + 'extra_cmts_t_resize', + 'extra_cmts_t_resize__SWIG_0', + 'extra_cmts_t_resize__SWIG_1', + 'extra_cmts_t_size', + 'extra_cmts_t_swap', + 'extra_cmts_t_truncate', + 'extract_argloc', + 'extract_extra_cmts_from_metadata', + 'extract_frame_desc_from_metadata', + 'extract_insn_cmts_from_metadata', + 'extract_insn_opreprs_from_metadata', + 'extract_module_from_archive', + 'extract_name', + 'extract_type_from_metadata', + 'extract_user_stkpnts_from_metadata', + 'f_any', + 'f_has_cmt', + 'f_has_dummy_name', + 'f_has_extra_cmts', + 'f_has_name', + 'f_has_user_name', + 'f_has_xref', + 'f_is_align', + 'f_is_byte', + 'f_is_code', + 'f_is_custom', + 'f_is_data', + 'f_is_double', + 'f_is_dword', + 'f_is_float', + 'f_is_head', + 'f_is_not_tail', + 'f_is_oword', + 'f_is_pack_real', + 'f_is_qword', + 'f_is_strlit', + 'f_is_struct', + 'f_is_tail', + 'f_is_tbyte', + 'f_is_word', + 'f_is_yword', + 'file2base', + 'find_binary', + 'find_bpt', + 'find_byte', + 'find_byter', + 'find_code', + 'find_custom_data_format', + 'find_custom_data_type', + 'find_custom_fixup', + 'find_custom_refinfo', + 'find_data', + 'find_defined', + 'find_error', + 'find_free_selector', + 'find_func_bounds', + 'find_idc_class', + 'find_idc_func', + 'find_idc_gvar', + 'find_imm', + 'find_not_func', + 'find_notype', + 'find_plugin', + 'find_regvar', + 'find_regvar__SWIG_0', + 'find_regvar__SWIG_1', + 'find_selector', + 'find_suspop', + 'find_syseh', + 'find_text', + 'find_tinfo_udt_member', + 'find_unknown', + 'find_widget', + 'first_idcv_attr', + 'first_named_type', + 'fixup_data_t_calc_size', + 'fixup_data_t_clr_extdef', + 'fixup_data_t_clr_unused', + 'fixup_data_t_displacement_get', + 'fixup_data_t_displacement_set', + 'fixup_data_t_get', + 'fixup_data_t_get_base', + 'fixup_data_t_get_desc', + 'fixup_data_t_get_flags', + 'fixup_data_t_get_handler', + 'fixup_data_t_get_type', + 'fixup_data_t_get_value', + 'fixup_data_t_has_base', + 'fixup_data_t_is_custom', + 'fixup_data_t_is_extdef', + 'fixup_data_t_is_unused', + 'fixup_data_t_off_get', + 'fixup_data_t_off_set', + 'fixup_data_t_patch_value', + 'fixup_data_t_sel_get', + 'fixup_data_t_sel_set', + 'fixup_data_t_set', + 'fixup_data_t_set_base', + 'fixup_data_t_set_extdef', + 'fixup_data_t_set_sel', + 'fixup_data_t_set_target_sel', + 'fixup_data_t_set_type', + 'fixup_data_t_set_type_and_flags', + 'fixup_data_t_set_unused', + 'fixup_data_t_was_created', + 'fixup_info_t_ea_get', + 'fixup_info_t_ea_set', + 'fixup_info_t_fd_get', + 'fixup_info_t_fd_set', + 'float_flag', + 'flt_flag', + 'flush_buffers', + 'fnum_array___getitem__', + 'fnum_array___len__', + 'fnum_array___setitem__', + 'fnum_array_data_get', + 'fnumber_t___eq__', + 'fnumber_t___ge__', + 'fnumber_t___get_fnum', + 'fnumber_t___gt__', + 'fnumber_t___le__', + 'fnumber_t___lt__', + 'fnumber_t___ne__', + 'fnumber_t__print', + 'fnumber_t_compare', + 'fnumber_t_dereference_const_uint16', + 'fnumber_t_dereference_uint16', + 'fnumber_t_fnum_get', + 'fnumber_t_fnum_set', + 'fnumber_t_nbytes_get', + 'fnumber_t_nbytes_set', + 'fopenA', + 'fopenM', + 'fopenRB', + 'fopenRT', + 'fopenWB', + 'fopenWT', + 'for_all_arglocs', + 'for_all_const_arglocs', + 'for_all_enum_members', + 'force_name', + 'forget_problem', + 'format_basestring', + 'formchgcbfa_close', + 'formchgcbfa_enable_field', + 'formchgcbfa_get_field_value', + 'formchgcbfa_get_focused_field', + 'formchgcbfa_move_field', + 'formchgcbfa_refresh_field', + 'formchgcbfa_set_field_value', + 'formchgcbfa_set_focused_field', + 'formchgcbfa_show_field', + 'frame_desc_t_argsize_get', + 'frame_desc_t_argsize_set', + 'frame_desc_t_frregs_get', + 'frame_desc_t_frregs_set', + 'frame_desc_t_frsize_get', + 'frame_desc_t_frsize_set', + 'frame_desc_t_members_get', + 'frame_desc_t_members_set', + 'frame_mem_t_cmt_get', + 'frame_mem_t_cmt_set', + 'frame_mem_t_info_get', + 'frame_mem_t_info_set', + 'frame_mem_t_name_get', + 'frame_mem_t_name_set', + 'frame_mem_t_nbytes_get', + 'frame_mem_t_nbytes_set', + 'frame_mem_t_offset_get', + 'frame_mem_t_offset_set', + 'frame_mem_t_rptcmt_get', + 'frame_mem_t_rptcmt_set', + 'frame_mem_t_type_get', + 'frame_mem_t_type_set', + 'frame_mems_t___getitem__', + 'frame_mems_t___len__', + 'frame_mems_t___setitem__', + 'frame_mems_t_at', + 'frame_mems_t_begin', + 'frame_mems_t_begin__SWIG_0', + 'frame_mems_t_begin__SWIG_1', + 'frame_mems_t_capacity', + 'frame_mems_t_clear', + 'frame_mems_t_empty', + 'frame_mems_t_end', + 'frame_mems_t_end__SWIG_0', + 'frame_mems_t_end__SWIG_1', + 'frame_mems_t_erase', + 'frame_mems_t_erase__SWIG_0', + 'frame_mems_t_erase__SWIG_1', + 'frame_mems_t_extract', + 'frame_mems_t_grow', + 'frame_mems_t_inject', + 'frame_mems_t_insert', + 'frame_mems_t_pop_back', + 'frame_mems_t_push_back', + 'frame_mems_t_push_back__SWIG_0', + 'frame_mems_t_push_back__SWIG_1', + 'frame_mems_t_qclear', + 'frame_mems_t_reserve', + 'frame_mems_t_resize', + 'frame_mems_t_resize__SWIG_0', + 'frame_mems_t_resize__SWIG_1', + 'frame_mems_t_size', + 'frame_mems_t_swap', + 'frame_mems_t_truncate', + 'frame_off_args', + 'frame_off_lvars', + 'frame_off_retaddr', + 'frame_off_savregs', + 'free_chunk', + 'free_custom_icon', + 'free_idcv', + 'free_til', + 'func_contains', + 'func_does_return', + 'func_has_stkframe_hole', + 'func_info_and_frequency_t_frequency_get', + 'func_info_and_frequency_t_frequency_set', + 'func_info_and_frequency_vec_t___getitem__', + 'func_info_and_frequency_vec_t___len__', + 'func_info_and_frequency_vec_t___setitem__', + 'func_info_and_frequency_vec_t_at', + 'func_info_and_frequency_vec_t_begin', + 'func_info_and_frequency_vec_t_begin__SWIG_0', + 'func_info_and_frequency_vec_t_begin__SWIG_1', + 'func_info_and_frequency_vec_t_capacity', + 'func_info_and_frequency_vec_t_clear', + 'func_info_and_frequency_vec_t_empty', + 'func_info_and_frequency_vec_t_end', + 'func_info_and_frequency_vec_t_end__SWIG_0', + 'func_info_and_frequency_vec_t_end__SWIG_1', + 'func_info_and_frequency_vec_t_erase', + 'func_info_and_frequency_vec_t_erase__SWIG_0', + 'func_info_and_frequency_vec_t_erase__SWIG_1', + 'func_info_and_frequency_vec_t_extract', + 'func_info_and_frequency_vec_t_grow', + 'func_info_and_frequency_vec_t_inject', + 'func_info_and_frequency_vec_t_insert', + 'func_info_and_frequency_vec_t_pop_back', + 'func_info_and_frequency_vec_t_push_back', + 'func_info_and_frequency_vec_t_push_back__SWIG_0', + 'func_info_and_frequency_vec_t_push_back__SWIG_1', + 'func_info_and_frequency_vec_t_qclear', + 'func_info_and_frequency_vec_t_reserve', + 'func_info_and_frequency_vec_t_resize', + 'func_info_and_frequency_vec_t_resize__SWIG_0', + 'func_info_and_frequency_vec_t_resize__SWIG_1', + 'func_info_and_frequency_vec_t_size', + 'func_info_and_frequency_vec_t_swap', + 'func_info_and_frequency_vec_t_truncate', + 'func_info_and_pattern_t_pattern_id_get', + 'func_info_and_pattern_t_pattern_id_set', + 'func_info_and_pattern_vec_t___getitem__', + 'func_info_and_pattern_vec_t___len__', + 'func_info_and_pattern_vec_t___setitem__', + 'func_info_and_pattern_vec_t_at', + 'func_info_and_pattern_vec_t_begin', + 'func_info_and_pattern_vec_t_begin__SWIG_0', + 'func_info_and_pattern_vec_t_begin__SWIG_1', + 'func_info_and_pattern_vec_t_capacity', + 'func_info_and_pattern_vec_t_clear', + 'func_info_and_pattern_vec_t_empty', + 'func_info_and_pattern_vec_t_end', + 'func_info_and_pattern_vec_t_end__SWIG_0', + 'func_info_and_pattern_vec_t_end__SWIG_1', + 'func_info_and_pattern_vec_t_erase', + 'func_info_and_pattern_vec_t_erase__SWIG_0', + 'func_info_and_pattern_vec_t_erase__SWIG_1', + 'func_info_and_pattern_vec_t_extract', + 'func_info_and_pattern_vec_t_grow', + 'func_info_and_pattern_vec_t_inject', + 'func_info_and_pattern_vec_t_insert', + 'func_info_and_pattern_vec_t_pop_back', + 'func_info_and_pattern_vec_t_push_back', + 'func_info_and_pattern_vec_t_push_back__SWIG_0', + 'func_info_and_pattern_vec_t_push_back__SWIG_1', + 'func_info_and_pattern_vec_t_qclear', + 'func_info_and_pattern_vec_t_reserve', + 'func_info_and_pattern_vec_t_resize', + 'func_info_and_pattern_vec_t_resize__SWIG_0', + 'func_info_and_pattern_vec_t_resize__SWIG_1', + 'func_info_and_pattern_vec_t_size', + 'func_info_and_pattern_vec_t_swap', + 'func_info_and_pattern_vec_t_truncate', + 'func_info_base_t_metadata_get', + 'func_info_base_t_metadata_set', + 'func_info_base_t_name_get', + 'func_info_base_t_name_set', + 'func_info_pattern_and_frequency_t_frequency_get', + 'func_info_pattern_and_frequency_t_frequency_set', + 'func_info_pattern_and_frequency_vec_t___getitem__', + 'func_info_pattern_and_frequency_vec_t___len__', + 'func_info_pattern_and_frequency_vec_t___setitem__', + 'func_info_pattern_and_frequency_vec_t_at', + 'func_info_pattern_and_frequency_vec_t_begin', + 'func_info_pattern_and_frequency_vec_t_begin__SWIG_0', + 'func_info_pattern_and_frequency_vec_t_begin__SWIG_1', + 'func_info_pattern_and_frequency_vec_t_capacity', + 'func_info_pattern_and_frequency_vec_t_clear', + 'func_info_pattern_and_frequency_vec_t_empty', + 'func_info_pattern_and_frequency_vec_t_end', + 'func_info_pattern_and_frequency_vec_t_end__SWIG_0', + 'func_info_pattern_and_frequency_vec_t_end__SWIG_1', + 'func_info_pattern_and_frequency_vec_t_erase', + 'func_info_pattern_and_frequency_vec_t_erase__SWIG_0', + 'func_info_pattern_and_frequency_vec_t_erase__SWIG_1', + 'func_info_pattern_and_frequency_vec_t_extract', + 'func_info_pattern_and_frequency_vec_t_grow', + 'func_info_pattern_and_frequency_vec_t_inject', + 'func_info_pattern_and_frequency_vec_t_insert', + 'func_info_pattern_and_frequency_vec_t_pop_back', + 'func_info_pattern_and_frequency_vec_t_push_back', + 'func_info_pattern_and_frequency_vec_t_push_back__SWIG_0', + 'func_info_pattern_and_frequency_vec_t_push_back__SWIG_1', + 'func_info_pattern_and_frequency_vec_t_qclear', + 'func_info_pattern_and_frequency_vec_t_reserve', + 'func_info_pattern_and_frequency_vec_t_resize', + 'func_info_pattern_and_frequency_vec_t_resize__SWIG_0', + 'func_info_pattern_and_frequency_vec_t_resize__SWIG_1', + 'func_info_pattern_and_frequency_vec_t_size', + 'func_info_pattern_and_frequency_vec_t_swap', + 'func_info_pattern_and_frequency_vec_t_truncate', + 'func_info_t_metadata_get', + 'func_info_t_metadata_set', + 'func_info_t_name_get', + 'func_info_t_name_set', + 'func_info_t_size_get', + 'func_info_t_size_set', + 'func_info_vec_t___getitem__', + 'func_info_vec_t___len__', + 'func_info_vec_t___setitem__', + 'func_info_vec_t_at', + 'func_info_vec_t_begin', + 'func_info_vec_t_begin__SWIG_0', + 'func_info_vec_t_begin__SWIG_1', + 'func_info_vec_t_capacity', + 'func_info_vec_t_clear', + 'func_info_vec_t_empty', + 'func_info_vec_t_end', + 'func_info_vec_t_end__SWIG_0', + 'func_info_vec_t_end__SWIG_1', + 'func_info_vec_t_erase', + 'func_info_vec_t_erase__SWIG_0', + 'func_info_vec_t_erase__SWIG_1', + 'func_info_vec_t_extract', + 'func_info_vec_t_grow', + 'func_info_vec_t_inject', + 'func_info_vec_t_insert', + 'func_info_vec_t_pop_back', + 'func_info_vec_t_push_back', + 'func_info_vec_t_push_back__SWIG_0', + 'func_info_vec_t_push_back__SWIG_1', + 'func_info_vec_t_qclear', + 'func_info_vec_t_reserve', + 'func_info_vec_t_resize', + 'func_info_vec_t_resize__SWIG_0', + 'func_info_vec_t_resize__SWIG_1', + 'func_info_vec_t_size', + 'func_info_vec_t_swap', + 'func_info_vec_t_truncate', + 'func_item_iterator_decode_preceding_insn', + 'func_item_iterator_decode_prev_insn', + 'func_item_iterator_next', + 'func_item_iterator_prev', + 'func_item_iterator_t___next__', + 'func_item_iterator_t_chunk', + 'func_item_iterator_t_current', + 'func_item_iterator_t_decode_preceding_insn', + 'func_item_iterator_t_decode_prev_insn', + 'func_item_iterator_t_first', + 'func_item_iterator_t_last', + 'func_item_iterator_t_next_addr', + 'func_item_iterator_t_next_code', + 'func_item_iterator_t_next_data', + 'func_item_iterator_t_next_head', + 'func_item_iterator_t_next_not_tail', + 'func_item_iterator_t_prev', + 'func_item_iterator_t_prev_addr', + 'func_item_iterator_t_prev_code', + 'func_item_iterator_t_prev_data', + 'func_item_iterator_t_prev_head', + 'func_item_iterator_t_prev_not_tail', + 'func_item_iterator_t_set', + 'func_item_iterator_t_set_range', + 'func_md_diff_handler_t_on_comment_changed', + 'func_md_diff_handler_t_on_extra_comment_changed', + 'func_md_diff_handler_t_on_frame_member_changed', + 'func_md_diff_handler_t_on_function_comment_changed', + 'func_md_diff_handler_t_on_insn_ops_repr_changed', + 'func_md_diff_handler_t_on_name_changed', + 'func_md_diff_handler_t_on_proto_changed', + 'func_md_diff_handler_t_on_score_changed', + 'func_md_diff_handler_t_on_user_stkpnt_changed', + 'func_parent_iterator_set', + 'func_parent_iterator_t___next__', + 'func_parent_iterator_t_first', + 'func_parent_iterator_t_last', + 'func_parent_iterator_t_parent', + 'func_parent_iterator_t_prev', + 'func_parent_iterator_t_reset_fnt', + 'func_parent_iterator_t_set', + 'func_t___get_points__', + 'func_t___get_regvars__', + 'func_t___get_tails__', + 'func_t__from_ptrval__', + 'func_t_analyzed_sp', + 'func_t_argsize_get', + 'func_t_argsize_set', + 'func_t_color_get', + 'func_t_color_set', + 'func_t_does_return', + 'func_t_flags_get', + 'func_t_flags_set', + 'func_t_fpd_get', + 'func_t_fpd_set', + 'func_t_frame_get', + 'func_t_frame_set', + 'func_t_frregs_get', + 'func_t_frregs_set', + 'func_t_frsize_get', + 'func_t_frsize_set', + 'func_t_is_far', + 'func_t_llabelqty_get', + 'func_t_llabelqty_set', + 'func_t_llabels_get', + 'func_t_llabels_set', + 'func_t_need_prolog_analysis', + 'func_t_owner_get', + 'func_t_owner_set', + 'func_t_pntqty_get', + 'func_t_pntqty_set', + 'func_t_points_get', + 'func_t_points_set', + 'func_t_referers_get', + 'func_t_referers_set', + 'func_t_refqty_get', + 'func_t_refqty_set', + 'func_t_regargqty_get', + 'func_t_regargqty_set', + 'func_t_regargs_get', + 'func_t_regargs_set', + 'func_t_regvarqty_get', + 'func_t_regvarqty_set', + 'func_t_regvars_get', + 'func_t_regvars_set', + 'func_t_tailqty_get', + 'func_t_tailqty_set', + 'func_t_tails_get', + 'func_t_tails_set', + 'func_tail_iterator_set', + 'func_tail_iterator_set_ea', + 'func_tail_iterator_t___next__', + 'func_tail_iterator_t_chunk', + 'func_tail_iterator_t_first', + 'func_tail_iterator_t_last', + 'func_tail_iterator_t_main', + 'func_tail_iterator_t_prev', + 'func_tail_iterator_t_set', + 'func_tail_iterator_t_set_ea', + 'func_tail_iterator_t_set_range', + 'func_type_data_t_cc_get', + 'func_type_data_t_cc_set', + 'func_type_data_t_dump', + 'func_type_data_t_flags_get', + 'func_type_data_t_flags_set', + 'func_type_data_t_get_call_method', + 'func_type_data_t_guess_cc', + 'func_type_data_t_is_high', + 'func_type_data_t_is_noret', + 'func_type_data_t_is_pure', + 'func_type_data_t_is_vararg_cc', + 'func_type_data_t_retloc_get', + 'func_type_data_t_retloc_set', + 'func_type_data_t_rettype_get', + 'func_type_data_t_rettype_set', + 'func_type_data_t_spoiled_get', + 'func_type_data_t_spoiled_set', + 'func_type_data_t_stkargs_get', + 'func_type_data_t_stkargs_set', + 'func_type_data_t_swap', + 'funcarg_t___eq__', + 'funcarg_t___ne__', + 'funcarg_t_argloc_get', + 'funcarg_t_argloc_set', + 'funcarg_t_cmt_get', + 'funcarg_t_cmt_set', + 'funcarg_t_flags_get', + 'funcarg_t_flags_set', + 'funcarg_t_name_get', + 'funcarg_t_name_set', + 'funcarg_t_type_get', + 'funcarg_t_type_set', + 'funcargvec_t___eq__', + 'funcargvec_t___getitem__', + 'funcargvec_t___len__', + 'funcargvec_t___ne__', + 'funcargvec_t___setitem__', + 'funcargvec_t__del', + 'funcargvec_t_add_unique', + 'funcargvec_t_at', + 'funcargvec_t_begin', + 'funcargvec_t_begin__SWIG_0', + 'funcargvec_t_begin__SWIG_1', + 'funcargvec_t_capacity', + 'funcargvec_t_clear', + 'funcargvec_t_empty', + 'funcargvec_t_end', + 'funcargvec_t_end__SWIG_0', + 'funcargvec_t_end__SWIG_1', + 'funcargvec_t_erase', + 'funcargvec_t_erase__SWIG_0', + 'funcargvec_t_erase__SWIG_1', + 'funcargvec_t_extract', + 'funcargvec_t_find', + 'funcargvec_t_find__SWIG_0', + 'funcargvec_t_find__SWIG_1', + 'funcargvec_t_grow', + 'funcargvec_t_has', + 'funcargvec_t_inject', + 'funcargvec_t_insert', + 'funcargvec_t_pop_back', + 'funcargvec_t_push_back', + 'funcargvec_t_push_back__SWIG_0', + 'funcargvec_t_push_back__SWIG_1', + 'funcargvec_t_qclear', + 'funcargvec_t_reserve', + 'funcargvec_t_resize', + 'funcargvec_t_resize__SWIG_0', + 'funcargvec_t_resize__SWIG_1', + 'funcargvec_t_size', + 'funcargvec_t_swap', + 'funcargvec_t_truncate', + 'gcc_layout', + 'gco_info_t_append_to_list', + 'gco_info_t_flags_get', + 'gco_info_t_flags_set', + 'gco_info_t_is_def', + 'gco_info_t_is_reg', + 'gco_info_t_is_use', + 'gco_info_t_name_get', + 'gco_info_t_name_set', + 'gco_info_t_size_get', + 'gco_info_t_size_set', + 'gen_complex_call_chart', + 'gen_decorate_name', + 'gen_disasm_text', + 'gen_exe_file', + 'gen_file', + 'gen_fix_fixups', + 'gen_flow_graph', + 'gen_gdl', + 'gen_idb_event', + 'gen_idb_event__varargs__', + 'gen_microcode', + 'gen_simple_call_chart', + 'gen_use_arg_tinfos', + 'generate_disasm_line', + 'generate_disassembly', + 'generic_linput_t_blocksize_get', + 'generic_linput_t_blocksize_set', + 'generic_linput_t_filesize_get', + 'generic_linput_t_filesize_set', + 'generic_linput_t_read', + 'get_16bit', + 'get_32bit', + 'get_64bit', + 'get_8bit', + 'get_abi_name', + 'get_absbase', + 'get_action_checkable', + 'get_action_checked', + 'get_action_icon', + 'get_action_label', + 'get_action_shortcut', + 'get_action_state', + 'get_action_tooltip', + 'get_action_visibility', + 'get_active_modal_widget', + 'get_addon_info', + 'get_addon_info_idx', + 'get_aflags', + 'get_alias_target', + 'get_alignment', + 'get_archive_path', + 'get_arg_addrs', + 'get_array_parameters', + 'get_asm_inc_file', + 'get_auto_display', + 'get_auto_state', + 'get_base_type', + 'get_basic_file_type', + 'get_bblk_trace_options', + 'get_best_fit_member', + 'get_bmask_cmt', + 'get_bmask_name', + 'get_bpt', + 'get_bpt_group', + 'get_bpt_qty', + 'get_bpt_tev_ea', + 'get_bptloc_string', + 'get_byte', + 'get_bytes', + 'get_bytes_and_mask', + 'get_c_header_path', + 'get_c_macros', + 'get_call_tev_callee', + 'get_chooser_data', + 'get_chooser_obj', + 'get_cmt', + 'get_colored_demangled_name', + 'get_colored_long_name', + 'get_colored_name', + 'get_colored_short_name', + 'get_comp', + 'get_compiler_abbr', + 'get_compiler_name', + 'get_compilers', + 'get_cp_validity', + 'get_ctype_name', + 'get_curline', + 'get_current_idasgn', + 'get_current_operand', + 'get_current_source_file', + 'get_current_source_line', + 'get_current_thread', + 'get_current_viewer', + 'get_current_widget', + 'get_cursor', + 'get_custom_data_format', + 'get_custom_data_formats', + 'get_custom_data_type', + 'get_custom_data_type_ids', + 'get_custom_data_types', + 'get_custom_refinfo', + 'get_custom_viewer_curline', + 'get_custom_viewer_location', + 'get_custom_viewer_place', + 'get_data_elsize', + 'get_data_value', + 'get_db_byte', + 'get_dbg_byte', + 'get_dbg_memory_info', + 'get_dbg_reg_info', + 'get_debug_event', + 'get_debug_name', + 'get_debug_name_ea', + 'get_debug_names', + 'get_debug_names__SWIG_0', + 'get_debug_names__SWIG_1', + 'get_debugger_event_cond', + 'get_default_encoding_idx', + 'get_default_radix', + 'get_default_reftype', + 'get_defsr', + 'get_demangled_name', + 'get_dtype_by_size', + 'get_dtype_flag', + 'get_dtype_size', + 'get_dword', + 'get_ea_name', + 'get_ea_viewer_history_info', + 'get_effective_spd', + 'get_elf_debug_file_directory', + 'get_encoding_bpu', + 'get_encoding_name', + 'get_encoding_qty', + 'get_entry', + 'get_entry_forwarder', + 'get_entry_name', + 'get_entry_ordinal', + 'get_entry_qty', + 'get_enum', + 'get_enum_cmt', + 'get_enum_flag', + 'get_enum_id', + 'get_enum_idx', + 'get_enum_member', + 'get_enum_member_bmask', + 'get_enum_member_by_name', + 'get_enum_member_cmt', + 'get_enum_member_enum', + 'get_enum_member_expr', + 'get_enum_member_name', + 'get_enum_member_serial', + 'get_enum_member_value', + 'get_enum_name', + 'get_enum_name2', + 'get_enum_qty', + 'get_enum_size', + 'get_enum_type_ordinal', + 'get_enum_width', + 'get_event_bpt_hea', + 'get_event_exc_code', + 'get_event_exc_ea', + 'get_event_exc_info', + 'get_event_info', + 'get_event_module_base', + 'get_event_module_name', + 'get_event_module_size', + 'get_extra_cmt', + 'get_fchunk', + 'get_fchunk_num', + 'get_fchunk_qty', + 'get_fchunk_referer', + 'get_file_type_name', + 'get_fileregion_ea', + 'get_fileregion_offset', + 'get_first_bmask', + 'get_first_cref_from', + 'get_first_cref_to', + 'get_first_dref_from', + 'get_first_dref_to', + 'get_first_enum_member', + 'get_first_fcref_from', + 'get_first_fcref_to', + 'get_first_fixup_ea', + 'get_first_free_extra_cmtidx', + 'get_first_hidden_range', + 'get_first_module', + 'get_first_seg', + 'get_first_serial_enum_member', + 'get_first_struc_idx', + 'get_fixup', + 'get_fixup_desc', + 'get_fixup_handler', + 'get_fixup_value', + 'get_fixups', + 'get_flags', + 'get_flags_by_size', + 'get_flags_ex', + 'get_float_type', + 'get_forced_operand', + 'get_frame', + 'get_frame__SWIG_0', + 'get_frame__SWIG_1', + 'get_frame_part', + 'get_frame_retsize', + 'get_frame_size', + 'get_full_data_elsize', + 'get_full_flags', + 'get_full_type', + 'get_func', + 'get_func_bitness', + 'get_func_bits', + 'get_func_by_frame', + 'get_func_bytes', + 'get_func_chunknum', + 'get_func_cmt', + 'get_func_name', + 'get_func_num', + 'get_func_qty', + 'get_func_ranges', + 'get_func_trace_options', + 'get_global_var', + 'get_gotea', + 'get_graph_viewer', + 'get_group_selector', + 'get_grp_bpts', + 'get_hexdump_ea', + 'get_hexrays_version', + 'get_hidden_range', + 'get_hidden_range_num', + 'get_hidden_range_qty', + 'get_highlight', + 'get_ida_subdirs', + 'get_idainfo_by_type', + 'get_idasgn_desc', + 'get_idasgn_desc_with_matches', + 'get_idasgn_qty', + 'get_idasgn_title', + 'get_idati', + 'get_idb_notifier_addr', + 'get_idb_notifier_ud_addr', + 'get_idc_filename', + 'get_idcv_attr', + 'get_idcv_class_name', + 'get_idcv_slice', + 'get_idp_name', + 'get_idp_notifier_addr', + 'get_idp_notifier_ud_addr', + 'get_ids_modnode', + 'get_imagebase', + 'get_immvals', + 'get_import_module_name', + 'get_import_module_qty', + 'get_ind_purged', + 'get_inf_structure', + 'get_input_file_path', + 'get_insn_tev_reg_mem', + 'get_insn_tev_reg_result', + 'get_insn_tev_reg_val', + 'get_insn_trace_options', + 'get_int_type_by_width_and_sign', + 'get_ip_val', + 'get_item_color', + 'get_item_end', + 'get_item_flag', + 'get_item_head', + 'get_item_size', + 'get_kernel_version', + 'get_key_code', + 'get_last_bmask', + 'get_last_enum_member', + 'get_last_hidden_range', + 'get_last_seg', + 'get_last_serial_enum_member', + 'get_last_struc_idx', + 'get_linput_type', + 'get_local_var', + 'get_local_vars', + 'get_long_name', + 'get_lookback', + 'get_lumina_rpc_packet_t_index_from_base', + 'get_manual_insn', + 'get_manual_regions', + 'get_manual_regions__SWIG_0', + 'get_manual_regions__SWIG_1', + 'get_mapping', + 'get_mappings_qty', + 'get_mark_comment', + 'get_marked_pos', + 'get_max_offset', + 'get_max_strlit_length', + 'get_member', + 'get_member_by_fullname', + 'get_member_by_id', + 'get_member_by_name', + 'get_member_cmt', + 'get_member_fullname', + 'get_member_id', + 'get_member_name', + 'get_member_size', + 'get_member_struc', + 'get_member_tinfo', + 'get_member_type', + 'get_merror_desc', + 'get_min_spd_ea', + 'get_module_info', + 'get_mreg_name', + 'get_name', + 'get_name_base_ea', + 'get_name_color', + 'get_name_ea', + 'get_name_expr', + 'get_name_value', + 'get_named_type', + 'get_named_type64', + 'get_navband_ea', + 'get_navband_pixel', + 'get_next_bmask', + 'get_next_cref_from', + 'get_next_cref_to', + 'get_next_dref_from', + 'get_next_dref_to', + 'get_next_enum_member', + 'get_next_fchunk', + 'get_next_fcref_from', + 'get_next_fcref_to', + 'get_next_fixup_ea', + 'get_next_func', + 'get_next_func_addr', + 'get_next_hidden_range', + 'get_next_member_idx', + 'get_next_module', + 'get_next_seg', + 'get_next_serial_enum_member', + 'get_next_struc_idx', + 'get_nice_colored_name', + 'get_nlist_ea', + 'get_nlist_idx', + 'get_nlist_name', + 'get_nlist_size', + 'get_node_info', + 'get_numbered_type', + 'get_numbered_type_name', + 'get_octet', + 'get_offbase', + 'get_offset_expr', + 'get_offset_expression', + 'get_op_signness', + 'get_op_tinfo', + 'get_opinfo', + 'get_opnum', + 'get_optype_flags0', + 'get_optype_flags1', + 'get_or_guess_member_tinfo', + 'get_ordinal_from_idb_type', + 'get_ordinal_qty', + 'get_original_byte', + 'get_original_dword', + 'get_original_qword', + 'get_original_word', + 'get_outfile_encoding_idx', + 'get_output_curline', + 'get_output_cursor', + 'get_output_selected_text', + 'get_path', + 'get_place_class', + 'get_place_class_id', + 'get_place_class_template', + 'get_plugin_options', + 'get_predef_insn_cmt', + 'get_prev_bmask', + 'get_prev_enum_member', + 'get_prev_fchunk', + 'get_prev_fixup_ea', + 'get_prev_func', + 'get_prev_func_addr', + 'get_prev_hidden_range', + 'get_prev_member_idx', + 'get_prev_seg', + 'get_prev_serial_enum_member', + 'get_prev_sreg_range', + 'get_prev_struc_idx', + 'get_printable_immvals', + 'get_problem', + 'get_problem_desc', + 'get_problem_name', + 'get_process_options', + 'get_process_state', + 'get_processes', + 'get_qword', + 'get_radix', + 'get_refinfo', + 'get_reftype_by_size', + 'get_reg_info', + 'get_reg_name', + 'get_reg_val', + 'get_reg_val__SWIG_0', + 'get_reg_val__SWIG_1', + 'get_reg_val__SWIG_2', + 'get_reg_vals', + 'get_registered_actions', + 'get_ret_tev_return', + 'get_root_filename', + 'get_running_notification', + 'get_running_request', + 'get_scalar_bt', + 'get_screen_ea', + 'get_segm_base', + 'get_segm_by_name', + 'get_segm_by_sel', + 'get_segm_class', + 'get_segm_name', + 'get_segm_num', + 'get_segm_para', + 'get_segm_qty', + 'get_segment_alignment', + 'get_segment_cmt', + 'get_segment_combination', + 'get_segment_translations', + 'get_selector_qty', + 'get_server_connection', + 'get_short_name', + 'get_signed_mcode', + 'get_source_linnum', + 'get_sourcefile', + 'get_sp_delta', + 'get_sp_val', + 'get_spd', + 'get_special_folder', + 'get_sptr', + 'get_srcinfo_provider', + 'get_sreg', + 'get_sreg_range', + 'get_sreg_range_num', + 'get_sreg_ranges_qty', + 'get_step_trace_options', + 'get_stkvar', + 'get_stock_tinfo', + 'get_str_encoding_idx', + 'get_str_term1', + 'get_str_term2', + 'get_str_type', + 'get_str_type_code', + 'get_strlist_item', + 'get_strlist_options', + 'get_strlist_qty', + 'get_strlit_contents', + 'get_stroff_path', + 'get_strtype_bpu', + 'get_struc', + 'get_struc_by_idx', + 'get_struc_cmt', + 'get_struc_first_offset', + 'get_struc_id', + 'get_struc_idx', + 'get_struc_last_offset', + 'get_struc_name', + 'get_struc_next_offset', + 'get_struc_prev_offset', + 'get_struc_qty', + 'get_struc_size', + 'get_struc_size__SWIG_0', + 'get_struc_size__SWIG_1', + 'get_switch_info', + 'get_switch_parent', + 'get_tab_size', + 'get_temp_regs', + 'get_tev_ea', + 'get_tev_event', + 'get_tev_info', + 'get_tev_memory_info', + 'get_tev_qty', + 'get_tev_tid', + 'get_tev_type', + 'get_thread_qty', + 'get_tinfo', + 'get_tinfo_attr', + 'get_tinfo_attrs', + 'get_tinfo_details', + 'get_tinfo_pdata', + 'get_tinfo_property', + 'get_tinfo_size', + 'get_trace_base_address', + 'get_trace_file_desc', + 'get_trace_platform', + 'get_tryblks', + 'get_type', + 'get_type_flags', + 'get_type_ordinal', + 'get_unk_type', + 'get_unsigned_mcode', + 'get_user_idadir', + 'get_user_strlist_options', + 'get_view_renderer_type', + 'get_viewer_graph', + 'get_viewer_place_type', + 'get_viewer_user_data', + 'get_visible_name', + 'get_visible_segm_name', + 'get_wide_byte', + 'get_wide_dword', + 'get_wide_word', + 'get_widget_title', + 'get_widget_type', + 'get_widget_vdui', + 'get_window_id', + 'get_word', + 'get_zero_ranges', + 'getb_reginsn', + 'getf_reginsn', + 'getn_bpt', + 'getn_enum', + 'getn_fchunk', + 'getn_func', + 'getn_hidden_range', + 'getn_selector', + 'getn_sreg_range', + 'getn_thread', + 'getn_thread_name', + 'getnode', + 'getnseg', + 'getseg', + 'getsysfile', + 'graph_chains_t_acquire', + 'graph_chains_t_for_all_chains', + 'graph_chains_t_is_locked', + 'graph_chains_t_release', + 'graph_chains_t_swap', + 'graph_item_t_b_get', + 'graph_item_t_b_set', + 'graph_item_t_e_get', + 'graph_item_t_e_set', + 'graph_item_t_elp_get', + 'graph_item_t_elp_set', + 'graph_item_t_is_edge', + 'graph_item_t_is_node', + 'graph_item_t_n_get', + 'graph_item_t_n_set', + 'graph_item_t_p_get', + 'graph_item_t_p_set', + 'graph_item_t_type_get', + 'graph_item_t_type_set', + 'graph_location_info_t___eq__', + 'graph_location_info_t___ne__', + 'graph_location_info_t_orgx_get', + 'graph_location_info_t_orgx_set', + 'graph_location_info_t_orgy_get', + 'graph_location_info_t_orgy_set', + 'graph_location_info_t_zoom_get', + 'graph_location_info_t_zoom_set', + 'graph_node_visitor_t_is_forbidden_edge', + 'graph_node_visitor_t_is_visited', + 'graph_node_visitor_t_reinit', + 'graph_node_visitor_t_set_visited', + 'graph_node_visitor_t_visit_node', + 'graph_path_visitor_t_path_get', + 'graph_path_visitor_t_path_set', + 'graph_path_visitor_t_prune_get', + 'graph_path_visitor_t_prune_set', + 'graph_path_visitor_t_walk_backward', + 'graph_path_visitor_t_walk_forward', + 'graph_trace', + 'graph_visitor_t_visit_edge', + 'graph_visitor_t_visit_node', + 'group_crinfo_t_nodes_get', + 'group_crinfo_t_nodes_set', + 'group_crinfo_t_text_get', + 'group_crinfo_t_text_set', + 'guess_func_cc', + 'guess_table_address', + 'guess_table_size', + 'guess_tinfo', + 'handle_debug_event', + 'has_any_name', + 'has_auto_name', + 'has_backup_metadata', + 'has_cached_cfunc', + 'has_cf_chg', + 'has_cf_use', + 'has_cmt', + 'has_dummy_name', + 'has_external_refs', + 'has_extra_cmts', + 'has_immd', + 'has_insn_feature', + 'has_lname', + 'has_name', + 'has_regvar', + 'has_ti', + 'has_ti0', + 'has_ti1', + 'has_user_name', + 'has_value', + 'has_xref', + 'hex_flag', + 'hexrays_alloc', + 'hexrays_failure_t_code_get', + 'hexrays_failure_t_code_set', + 'hexrays_failure_t_desc', + 'hexrays_failure_t_errea_get', + 'hexrays_failure_t_errea_set', + 'hexrays_failure_t_str_get', + 'hexrays_failure_t_str_set', + 'hexrays_free', + 'hexwarn_t___eq__', + 'hexwarn_t___ge__', + 'hexwarn_t___gt__', + 'hexwarn_t___le__', + 'hexwarn_t___lt__', + 'hexwarn_t___ne__', + 'hexwarn_t_compare', + 'hexwarn_t_ea_get', + 'hexwarn_t_ea_set', + 'hexwarn_t_id_get', + 'hexwarn_t_id_set', + 'hexwarn_t_text_get', + 'hexwarn_t_text_set', + 'hexwarns_t___eq__', + 'hexwarns_t___getitem__', + 'hexwarns_t___len__', + 'hexwarns_t___ne__', + 'hexwarns_t___setitem__', + 'hexwarns_t__del', + 'hexwarns_t_add_unique', + 'hexwarns_t_at', + 'hexwarns_t_begin', + 'hexwarns_t_begin__SWIG_0', + 'hexwarns_t_begin__SWIG_1', + 'hexwarns_t_capacity', + 'hexwarns_t_clear', + 'hexwarns_t_empty', + 'hexwarns_t_end', + 'hexwarns_t_end__SWIG_0', + 'hexwarns_t_end__SWIG_1', + 'hexwarns_t_erase', + 'hexwarns_t_erase__SWIG_0', + 'hexwarns_t_erase__SWIG_1', + 'hexwarns_t_extract', + 'hexwarns_t_find', + 'hexwarns_t_find__SWIG_0', + 'hexwarns_t_find__SWIG_1', + 'hexwarns_t_grow', + 'hexwarns_t_has', + 'hexwarns_t_inject', + 'hexwarns_t_insert', + 'hexwarns_t_pop_back', + 'hexwarns_t_push_back', + 'hexwarns_t_push_back__SWIG_0', + 'hexwarns_t_push_back__SWIG_1', + 'hexwarns_t_qclear', + 'hexwarns_t_reserve', + 'hexwarns_t_resize', + 'hexwarns_t_resize__SWIG_0', + 'hexwarns_t_resize__SWIG_1', + 'hexwarns_t_size', + 'hexwarns_t_swap', + 'hexwarns_t_truncate', + 'hidden_range_t_color_get', + 'hidden_range_t_color_set', + 'hidden_range_t_description_get', + 'hidden_range_t_description_set', + 'hidden_range_t_footer_get', + 'hidden_range_t_footer_set', + 'hidden_range_t_header_get', + 'hidden_range_t_header_set', + 'hidden_range_t_visible_get', + 'hidden_range_t_visible_set', + 'hide_all_bpts', + 'hide_border', + 'hide_item', + 'hide_name', + 'hide_wait_box', + 'highlighter_cbs_t_cur_block_state', + 'highlighter_cbs_t_prev_block_state', + 'highlighter_cbs_t_set_block_state', + 'highlighter_cbs_t_set_style', + 'history_entries_helper_t_next_entry', + 'history_entries_helper_t_next_entry_index', + 'history_entries_helper_t_res_get', + 'history_item_t_ea_get', + 'history_item_t_ea_set', + 'history_item_t_end_get', + 'history_item_t_end_set', + 'history_t_pop', + 'history_t_push', + 'history_t_top', + 'history_t_top__SWIG_0', + 'history_t_top__SWIG_1', + 'ida_lowertype_helper_t_func_has_stkframe_hole', + 'ida_lowertype_helper_t_get_func_purged_bytes', + 'idadir', + 'idainfo_abibits_get', + 'idainfo_abibits_set', + 'idainfo_af2_get', + 'idainfo_af2_set', + 'idainfo_af_get', + 'idainfo_af_set', + 'idainfo_appcall_options_get', + 'idainfo_appcall_options_set', + 'idainfo_apptype_get', + 'idainfo_apptype_set', + 'idainfo_asmtype_get', + 'idainfo_asmtype_set', + 'idainfo_baseaddr_get', + 'idainfo_baseaddr_set', + 'idainfo_bin_prefix_size_get', + 'idainfo_bin_prefix_size_set', + 'idainfo_cc_get', + 'idainfo_cc_set', + 'idainfo_comment_get', + 'idainfo_comment_set', + 'idainfo_database_change_count_get', + 'idainfo_database_change_count_set', + 'idainfo_datatypes_get', + 'idainfo_datatypes_set', + 'idainfo_demnames_get', + 'idainfo_demnames_set', + 'idainfo_filetype_get', + 'idainfo_filetype_set', + 'idainfo_get_abiname', + 'idainfo_get_maxEA', + 'idainfo_get_minEA', + 'idainfo_get_procName', + 'idainfo_highoff_get', + 'idainfo_highoff_set', + 'idainfo_indent_get', + 'idainfo_indent_set', + 'idainfo_lenxref_get', + 'idainfo_lenxref_set', + 'idainfo_lflags_get', + 'idainfo_lflags_set', + 'idainfo_listnames_get', + 'idainfo_listnames_set', + 'idainfo_long_demnames_get', + 'idainfo_long_demnames_set', + 'idainfo_lowoff_get', + 'idainfo_lowoff_set', + 'idainfo_main_get', + 'idainfo_main_set', + 'idainfo_margin_get', + 'idainfo_margin_set', + 'idainfo_max_autoname_len_get', + 'idainfo_max_autoname_len_set', + 'idainfo_max_ea_get', + 'idainfo_max_ea_set', + 'idainfo_maxref_get', + 'idainfo_maxref_set', + 'idainfo_min_ea_get', + 'idainfo_min_ea_set', + 'idainfo_nametype_get', + 'idainfo_nametype_set', + 'idainfo_omax_ea_get', + 'idainfo_omax_ea_set', + 'idainfo_omin_ea_get', + 'idainfo_omin_ea_set', + 'idainfo_ostype_get', + 'idainfo_ostype_set', + 'idainfo_outflags_get', + 'idainfo_outflags_set', + 'idainfo_procname_get', + 'idainfo_procname_set', + 'idainfo_refcmtnum_get', + 'idainfo_refcmtnum_set', + 'idainfo_s_cmtflg_get', + 'idainfo_s_cmtflg_set', + 'idainfo_s_genflags_get', + 'idainfo_s_genflags_set', + 'idainfo_s_limiter_get', + 'idainfo_s_limiter_set', + 'idainfo_s_prefflag_get', + 'idainfo_s_prefflag_set', + 'idainfo_s_xrefflag_get', + 'idainfo_s_xrefflag_set', + 'idainfo_set_maxEA', + 'idainfo_set_minEA', + 'idainfo_short_demnames_get', + 'idainfo_short_demnames_set', + 'idainfo_specsegs_get', + 'idainfo_specsegs_set', + 'idainfo_start_cs_get', + 'idainfo_start_cs_set', + 'idainfo_start_ea_get', + 'idainfo_start_ea_set', + 'idainfo_start_ip_get', + 'idainfo_start_ip_set', + 'idainfo_start_sp_get', + 'idainfo_start_sp_set', + 'idainfo_start_ss_get', + 'idainfo_start_ss_set', + 'idainfo_strlit_break_get', + 'idainfo_strlit_break_set', + 'idainfo_strlit_flags_get', + 'idainfo_strlit_flags_set', + 'idainfo_strlit_pref_get', + 'idainfo_strlit_pref_set', + 'idainfo_strlit_sernum_get', + 'idainfo_strlit_sernum_set', + 'idainfo_strlit_zeroes_get', + 'idainfo_strlit_zeroes_set', + 'idainfo_strtype_get', + 'idainfo_strtype_set', + 'idainfo_tag_get', + 'idainfo_tag_set', + 'idainfo_type_xrefnum_get', + 'idainfo_type_xrefnum_set', + 'idainfo_version_get', + 'idainfo_version_set', + 'idainfo_xrefnum_get', + 'idainfo_xrefnum_set', + 'idaplace_t_ea_get', + 'idaplace_t_ea_set', + 'idc_get_local_type', + 'idc_get_local_type_name', + 'idc_get_local_type_raw', + 'idc_get_type', + 'idc_get_type_raw', + 'idc_global_t_name_get', + 'idc_global_t_name_set', + 'idc_global_t_value_get', + 'idc_global_t_value_set', + 'idc_guess_type', + 'idc_parse_decl', + 'idc_parse_types', + 'idc_print_type', + 'idc_set_local_type', + 'idc_value_t___get_e', + 'idc_value_t__create_empty_string', + 'idc_value_t_c_str', + 'idc_value_t_clear', + 'idc_value_t_create_empty_string', + 'idc_value_t_e_get', + 'idc_value_t_e_set', + 'idc_value_t_funcidx_get', + 'idc_value_t_funcidx_set', + 'idc_value_t_i64_get', + 'idc_value_t_i64_set', + 'idc_value_t_is_convertible', + 'idc_value_t_is_integral', + 'idc_value_t_is_zero', + 'idc_value_t_num_get', + 'idc_value_t_num_set', + 'idc_value_t_obj_get', + 'idc_value_t_obj_set', + 'idc_value_t_pvoid_get', + 'idc_value_t_pvoid_set', + 'idc_value_t_qstr', + 'idc_value_t_qstr__SWIG_0', + 'idc_value_t_qstr__SWIG_1', + 'idc_value_t_reserve_get', + 'idc_value_t_reserve_set', + 'idc_value_t_set_float', + 'idc_value_t_set_int64', + 'idc_value_t_set_long', + 'idc_value_t_set_pvoid', + 'idc_value_t_set_string', + 'idc_value_t_set_string__SWIG_0', + 'idc_value_t_set_string__SWIG_1', + 'idc_value_t_swap', + 'idc_value_t_u_str', + 'idc_value_t_vtype_get', + 'idc_value_t_vtype_set', + 'idc_values_t___getitem__', + 'idc_values_t___len__', + 'idc_values_t___setitem__', + 'idc_values_t_at', + 'idc_values_t_begin', + 'idc_values_t_begin__SWIG_0', + 'idc_values_t_begin__SWIG_1', + 'idc_values_t_capacity', + 'idc_values_t_clear', + 'idc_values_t_empty', + 'idc_values_t_end', + 'idc_values_t_end__SWIG_0', + 'idc_values_t_end__SWIG_1', + 'idc_values_t_erase', + 'idc_values_t_erase__SWIG_0', + 'idc_values_t_erase__SWIG_1', + 'idc_values_t_extract', + 'idc_values_t_grow', + 'idc_values_t_inject', + 'idc_values_t_insert', + 'idc_values_t_pop_back', + 'idc_values_t_push_back', + 'idc_values_t_push_back__SWIG_0', + 'idc_values_t_push_back__SWIG_1', + 'idc_values_t_qclear', + 'idc_values_t_reserve', + 'idc_values_t_resize', + 'idc_values_t_resize__SWIG_0', + 'idc_values_t_resize__SWIG_1', + 'idc_values_t_size', + 'idc_values_t_swap', + 'idc_values_t_truncate', + 'idcv_float', + 'idcv_int64', + 'idcv_long', + 'idcv_num', + 'idcv_object', + 'idcv_string', + 'idp_desc_t_checked_get', + 'idp_desc_t_checked_set', + 'idp_desc_t_family_get', + 'idp_desc_t_family_set', + 'idp_desc_t_is_script_get', + 'idp_desc_t_is_script_set', + 'idp_desc_t_mtime_get', + 'idp_desc_t_mtime_set', + 'idp_desc_t_names_get', + 'idp_desc_t_names_set', + 'idp_desc_t_path_get', + 'idp_desc_t_path_set', + 'idp_name_t_hidden_get', + 'idp_name_t_hidden_set', + 'idp_name_t_lname_get', + 'idp_name_t_lname_set', + 'idp_name_t_sname_get', + 'idp_name_t_sname_set', + 'import_type', + 'inf_abi_set_by_user', + 'inf_allow_non_matched_ops', + 'inf_allow_sigmulti', + 'inf_append_sigcmt', + 'inf_big_arg_align', + 'inf_check_manual_ops', + 'inf_check_unicode_strlits', + 'inf_coagulate_code', + 'inf_coagulate_data', + 'inf_compress_idb', + 'inf_create_all_xrefs', + 'inf_create_func_from_call', + 'inf_create_func_from_ptr', + 'inf_create_func_tails', + 'inf_create_jump_tables', + 'inf_create_off_on_dref', + 'inf_create_off_using_fixup', + 'inf_create_strlit_on_xref', + 'inf_data_offset', + 'inf_dbg_no_store_path', + 'inf_decode_fpp', + 'inf_del_no_xref_insns', + 'inf_final_pass', + 'inf_full_sp_ana', + 'inf_gen_assume', + 'inf_gen_lzero', + 'inf_gen_null', + 'inf_gen_org', + 'inf_gen_tryblks', + 'inf_get_abibits', + 'inf_get_af', + 'inf_get_af2', + 'inf_get_af2_low', + 'inf_get_af_high', + 'inf_get_af_low', + 'inf_get_appcall_options', + 'inf_get_apptype', + 'inf_get_asmtype', + 'inf_get_baseaddr', + 'inf_get_bin_prefix_size', + 'inf_get_cc', + 'inf_get_cc_cm', + 'inf_get_cc_defalign', + 'inf_get_cc_id', + 'inf_get_cc_size_b', + 'inf_get_cc_size_e', + 'inf_get_cc_size_i', + 'inf_get_cc_size_l', + 'inf_get_cc_size_ldbl', + 'inf_get_cc_size_ll', + 'inf_get_cc_size_s', + 'inf_get_cmtflg', + 'inf_get_comment', + 'inf_get_database_change_count', + 'inf_get_datatypes', + 'inf_get_demname_form', + 'inf_get_demnames', + 'inf_get_filetype', + 'inf_get_genflags', + 'inf_get_highoff', + 'inf_get_indent', + 'inf_get_lenxref', + 'inf_get_lflags', + 'inf_get_limiter', + 'inf_get_listnames', + 'inf_get_long_demnames', + 'inf_get_lowoff', + 'inf_get_main', + 'inf_get_margin', + 'inf_get_max_autoname_len', + 'inf_get_max_ea', + 'inf_get_maxref', + 'inf_get_min_ea', + 'inf_get_nametype', + 'inf_get_netdelta', + 'inf_get_omax_ea', + 'inf_get_omin_ea', + 'inf_get_ostype', + 'inf_get_outflags', + 'inf_get_pack_mode', + 'inf_get_prefflag', + 'inf_get_privrange', + 'inf_get_privrange__SWIG_0', + 'inf_get_privrange__SWIG_1', + 'inf_get_privrange_end_ea', + 'inf_get_privrange_start_ea', + 'inf_get_procname', + 'inf_get_refcmtnum', + 'inf_get_short_demnames', + 'inf_get_specsegs', + 'inf_get_start_cs', + 'inf_get_start_ea', + 'inf_get_start_ip', + 'inf_get_start_sp', + 'inf_get_start_ss', + 'inf_get_strlit_break', + 'inf_get_strlit_flags', + 'inf_get_strlit_pref', + 'inf_get_strlit_sernum', + 'inf_get_strlit_zeroes', + 'inf_get_strtype', + 'inf_get_type_xrefnum', + 'inf_get_version', + 'inf_get_xrefflag', + 'inf_get_xrefnum', + 'inf_guess_func_type', + 'inf_handle_eh', + 'inf_handle_rtti', + 'inf_hide_comments', + 'inf_hide_libfuncs', + 'inf_huge_arg_align', + 'inf_inc_database_change_count', + 'inf_is_32bit', + 'inf_is_64bit', + 'inf_is_auto_enabled', + 'inf_is_be', + 'inf_is_dll', + 'inf_is_flat_off32', + 'inf_is_graph_view', + 'inf_is_hard_float', + 'inf_is_kernel_mode', + 'inf_is_limiter_empty', + 'inf_is_limiter_thick', + 'inf_is_limiter_thin', + 'inf_is_mem_aligned4', + 'inf_is_snapshot', + 'inf_is_wide_high_byte_first', + 'inf_like_binary', + 'inf_line_pref_with_seg', + 'inf_loading_idc', + 'inf_macros_enabled', + 'inf_map_stkargs', + 'inf_mark_code', + 'inf_no_store_user_info', + 'inf_noflow_to_data', + 'inf_noret_ana', + 'inf_op_offset', + 'inf_pack_idb', + 'inf_pack_stkargs', + 'inf_postinc_strlit_sernum', + 'inf_prefix_show_funcoff', + 'inf_prefix_show_segaddr', + 'inf_prefix_show_stack', + 'inf_prefix_truncate_opcode_bytes', + 'inf_propagate_regargs', + 'inf_propagate_stkargs', + 'inf_readonly_idb', + 'inf_rename_jumpfunc', + 'inf_rename_nullsub', + 'inf_set_32bit', + 'inf_set_64bit', + 'inf_set_abi_set_by_user', + 'inf_set_abibits', + 'inf_set_af', + 'inf_set_af2', + 'inf_set_af2_low', + 'inf_set_af_high', + 'inf_set_af_low', + 'inf_set_allow_non_matched_ops', + 'inf_set_allow_sigmulti', + 'inf_set_appcall_options', + 'inf_set_append_sigcmt', + 'inf_set_apptype', + 'inf_set_asmtype', + 'inf_set_auto_enabled', + 'inf_set_baseaddr', + 'inf_set_be', + 'inf_set_big_arg_align', + 'inf_set_bin_prefix_size', + 'inf_set_cc', + 'inf_set_cc_cm', + 'inf_set_cc_defalign', + 'inf_set_cc_id', + 'inf_set_cc_size_b', + 'inf_set_cc_size_e', + 'inf_set_cc_size_i', + 'inf_set_cc_size_l', + 'inf_set_cc_size_ldbl', + 'inf_set_cc_size_ll', + 'inf_set_cc_size_s', + 'inf_set_check_manual_ops', + 'inf_set_check_unicode_strlits', + 'inf_set_cmtflg', + 'inf_set_coagulate_code', + 'inf_set_coagulate_data', + 'inf_set_comment', + 'inf_set_compress_idb', + 'inf_set_create_all_xrefs', + 'inf_set_create_func_from_call', + 'inf_set_create_func_from_ptr', + 'inf_set_create_func_tails', + 'inf_set_create_jump_tables', + 'inf_set_create_off_on_dref', + 'inf_set_create_off_using_fixup', + 'inf_set_create_strlit_on_xref', + 'inf_set_data_offset', + 'inf_set_database_change_count', + 'inf_set_datatypes', + 'inf_set_dbg_no_store_path', + 'inf_set_decode_fpp', + 'inf_set_del_no_xref_insns', + 'inf_set_demnames', + 'inf_set_dll', + 'inf_set_filetype', + 'inf_set_final_pass', + 'inf_set_flat_off32', + 'inf_set_full_sp_ana', + 'inf_set_gen_assume', + 'inf_set_gen_lzero', + 'inf_set_gen_null', + 'inf_set_gen_org', + 'inf_set_gen_tryblks', + 'inf_set_genflags', + 'inf_set_graph_view', + 'inf_set_guess_func_type', + 'inf_set_handle_eh', + 'inf_set_handle_rtti', + 'inf_set_hard_float', + 'inf_set_hide_comments', + 'inf_set_hide_libfuncs', + 'inf_set_highoff', + 'inf_set_huge_arg_align', + 'inf_set_indent', + 'inf_set_kernel_mode', + 'inf_set_lenxref', + 'inf_set_lflags', + 'inf_set_limiter', + 'inf_set_limiter_empty', + 'inf_set_limiter_thick', + 'inf_set_limiter_thin', + 'inf_set_line_pref_with_seg', + 'inf_set_listnames', + 'inf_set_loading_idc', + 'inf_set_long_demnames', + 'inf_set_lowoff', + 'inf_set_macros_enabled', + 'inf_set_main', + 'inf_set_map_stkargs', + 'inf_set_margin', + 'inf_set_mark_code', + 'inf_set_max_autoname_len', + 'inf_set_max_ea', + 'inf_set_maxref', + 'inf_set_mem_aligned4', + 'inf_set_min_ea', + 'inf_set_nametype', + 'inf_set_netdelta', + 'inf_set_no_store_user_info', + 'inf_set_noflow_to_data', + 'inf_set_noret_ana', + 'inf_set_omax_ea', + 'inf_set_omin_ea', + 'inf_set_op_offset', + 'inf_set_ostype', + 'inf_set_outflags', + 'inf_set_pack_idb', + 'inf_set_pack_mode', + 'inf_set_pack_stkargs', + 'inf_set_prefflag', + 'inf_set_prefix_show_funcoff', + 'inf_set_prefix_show_segaddr', + 'inf_set_prefix_show_stack', + 'inf_set_prefix_truncate_opcode_bytes', + 'inf_set_privrange', + 'inf_set_privrange_end_ea', + 'inf_set_privrange_start_ea', + 'inf_set_procname', + 'inf_set_propagate_regargs', + 'inf_set_propagate_stkargs', + 'inf_set_readonly_idb', + 'inf_set_refcmtnum', + 'inf_set_rename_jumpfunc', + 'inf_set_rename_nullsub', + 'inf_set_short_demnames', + 'inf_set_should_create_stkvars', + 'inf_set_should_trace_sp', + 'inf_set_show_all_comments', + 'inf_set_show_auto', + 'inf_set_show_hidden_funcs', + 'inf_set_show_hidden_insns', + 'inf_set_show_hidden_segms', + 'inf_set_show_line_pref', + 'inf_set_show_repeatables', + 'inf_set_show_src_linnum', + 'inf_set_show_void', + 'inf_set_show_xref_fncoff', + 'inf_set_show_xref_seg', + 'inf_set_show_xref_tmarks', + 'inf_set_show_xref_val', + 'inf_set_snapshot', + 'inf_set_specsegs', + 'inf_set_stack_ldbl', + 'inf_set_stack_varargs', + 'inf_set_start_cs', + 'inf_set_start_ea', + 'inf_set_start_ip', + 'inf_set_start_sp', + 'inf_set_start_ss', + 'inf_set_strlit_autocmt', + 'inf_set_strlit_break', + 'inf_set_strlit_flags', + 'inf_set_strlit_name_bit', + 'inf_set_strlit_names', + 'inf_set_strlit_pref', + 'inf_set_strlit_savecase', + 'inf_set_strlit_serial_names', + 'inf_set_strlit_sernum', + 'inf_set_strlit_zeroes', + 'inf_set_strtype', + 'inf_set_test_mode', + 'inf_set_trace_flow', + 'inf_set_truncate_on_del', + 'inf_set_type_xrefnum', + 'inf_set_unicode_strlits', + 'inf_set_use_allasm', + 'inf_set_use_flirt', + 'inf_set_use_gcc_layout', + 'inf_set_version', + 'inf_set_wide_high_byte_first', + 'inf_set_xrefflag', + 'inf_set_xrefnum', + 'inf_should_create_stkvars', + 'inf_should_trace_sp', + 'inf_show_all_comments', + 'inf_show_auto', + 'inf_show_hidden_funcs', + 'inf_show_hidden_insns', + 'inf_show_hidden_segms', + 'inf_show_line_pref', + 'inf_show_repeatables', + 'inf_show_src_linnum', + 'inf_show_void', + 'inf_show_xref_fncoff', + 'inf_show_xref_seg', + 'inf_show_xref_tmarks', + 'inf_show_xref_val', + 'inf_stack_ldbl', + 'inf_stack_varargs', + 'inf_strlit_autocmt', + 'inf_strlit_name_bit', + 'inf_strlit_names', + 'inf_strlit_savecase', + 'inf_strlit_serial_names', + 'inf_test_mode', + 'inf_trace_flow', + 'inf_truncate_on_del', + 'inf_unicode_strlits', + 'inf_use_allasm', + 'inf_use_flirt', + 'inf_use_gcc_layout', + 'info', + 'info__varargs__', + 'init_hexrays_plugin', + 'input_file_t_md5_get', + 'input_file_t_md5_set', + 'input_file_t_path_get', + 'input_file_t_path_set', + 'insn_add_cref', + 'insn_add_dref', + 'insn_add_off_drefs', + 'insn_cmt_t_cmt_get', + 'insn_cmt_t_cmt_set', + 'insn_cmts_t___getitem__', + 'insn_cmts_t___len__', + 'insn_cmts_t___setitem__', + 'insn_cmts_t_at', + 'insn_cmts_t_begin', + 'insn_cmts_t_begin__SWIG_0', + 'insn_cmts_t_begin__SWIG_1', + 'insn_cmts_t_capacity', + 'insn_cmts_t_clear', + 'insn_cmts_t_empty', + 'insn_cmts_t_end', + 'insn_cmts_t_end__SWIG_0', + 'insn_cmts_t_end__SWIG_1', + 'insn_cmts_t_erase', + 'insn_cmts_t_erase__SWIG_0', + 'insn_cmts_t_erase__SWIG_1', + 'insn_cmts_t_extract', + 'insn_cmts_t_grow', + 'insn_cmts_t_inject', + 'insn_cmts_t_insert', + 'insn_cmts_t_pop_back', + 'insn_cmts_t_push_back', + 'insn_cmts_t_push_back__SWIG_0', + 'insn_cmts_t_push_back__SWIG_1', + 'insn_cmts_t_qclear', + 'insn_cmts_t_reserve', + 'insn_cmts_t_resize', + 'insn_cmts_t_resize__SWIG_0', + 'insn_cmts_t_resize__SWIG_1', + 'insn_cmts_t_size', + 'insn_cmts_t_swap', + 'insn_cmts_t_truncate', + 'insn_create_stkvar', + 'insn_ops_repr_t_flags_get', + 'insn_ops_repr_t_flags_set', + 'insn_ops_repr_t_op0_get', + 'insn_ops_repr_t_op0_set', + 'insn_ops_repr_t_op1_get', + 'insn_ops_repr_t_op1_set', + 'insn_ops_reprs_t___getitem__', + 'insn_ops_reprs_t___len__', + 'insn_ops_reprs_t___setitem__', + 'insn_ops_reprs_t_at', + 'insn_ops_reprs_t_begin', + 'insn_ops_reprs_t_begin__SWIG_0', + 'insn_ops_reprs_t_begin__SWIG_1', + 'insn_ops_reprs_t_capacity', + 'insn_ops_reprs_t_clear', + 'insn_ops_reprs_t_empty', + 'insn_ops_reprs_t_end', + 'insn_ops_reprs_t_end__SWIG_0', + 'insn_ops_reprs_t_end__SWIG_1', + 'insn_ops_reprs_t_erase', + 'insn_ops_reprs_t_erase__SWIG_0', + 'insn_ops_reprs_t_erase__SWIG_1', + 'insn_ops_reprs_t_extract', + 'insn_ops_reprs_t_grow', + 'insn_ops_reprs_t_inject', + 'insn_ops_reprs_t_insert', + 'insn_ops_reprs_t_pop_back', + 'insn_ops_reprs_t_push_back', + 'insn_ops_reprs_t_push_back__SWIG_0', + 'insn_ops_reprs_t_push_back__SWIG_1', + 'insn_ops_reprs_t_qclear', + 'insn_ops_reprs_t_reserve', + 'insn_ops_reprs_t_resize', + 'insn_ops_reprs_t_resize__SWIG_0', + 'insn_ops_reprs_t_resize__SWIG_1', + 'insn_ops_reprs_t_size', + 'insn_ops_reprs_t_swap', + 'insn_ops_reprs_t_truncate', + 'insn_site_t_fchunk_nr_get', + 'insn_site_t_fchunk_nr_set', + 'insn_site_t_fchunk_off_get', + 'insn_site_t_fchunk_off_set', + 'insn_site_t_toea', + 'insn_t___get_auxpref__', + 'insn_t___get_operand__', + 'insn_t___get_ops__', + 'insn_t___set_auxpref__', + 'insn_t__from_ptrval__', + 'insn_t_add_cref', + 'insn_t_add_dref', + 'insn_t_add_off_drefs', + 'insn_t_assign', + 'insn_t_create_op_data', + 'insn_t_create_op_data__SWIG_0', + 'insn_t_create_op_data__SWIG_1', + 'insn_t_create_stkvar', + 'insn_t_cs_get', + 'insn_t_cs_set', + 'insn_t_ea_get', + 'insn_t_ea_set', + 'insn_t_flags_get', + 'insn_t_flags_set', + 'insn_t_get_canon_feature', + 'insn_t_get_canon_mnem', + 'insn_t_get_next_byte', + 'insn_t_get_next_dword', + 'insn_t_get_next_qword', + 'insn_t_get_next_word', + 'insn_t_insnpref_get', + 'insn_t_insnpref_set', + 'insn_t_ip_get', + 'insn_t_ip_set', + 'insn_t_is_64bit', + 'insn_t_is_canon_insn', + 'insn_t_is_macro', + 'insn_t_itype_get', + 'insn_t_itype_set', + 'insn_t_ops_get', + 'insn_t_ops_set', + 'insn_t_segpref_get', + 'insn_t_segpref_set', + 'insn_t_size_get', + 'insn_t_size_set', + 'install_command_interpreter', + 'install_microcode_filter', + 'instant_dbgopts_t__pass_get', + 'instant_dbgopts_t__pass_set', + 'instant_dbgopts_t_attach_get', + 'instant_dbgopts_t_attach_set', + 'instant_dbgopts_t_debmod_get', + 'instant_dbgopts_t_debmod_set', + 'instant_dbgopts_t_env_get', + 'instant_dbgopts_t_env_set', + 'instant_dbgopts_t_event_id_get', + 'instant_dbgopts_t_event_id_set', + 'instant_dbgopts_t_host_get', + 'instant_dbgopts_t_host_set', + 'instant_dbgopts_t_pid_get', + 'instant_dbgopts_t_pid_set', + 'instant_dbgopts_t_port_get', + 'instant_dbgopts_t_port_set', + 'int_pointer_assign', + 'int_pointer_cast', + 'int_pointer_frompointer', + 'int_pointer_value', + 'internal_get_sreg_base', + 'internal_ioctl', + 'internal_register_place_class', + 'interval_t___eq__', + 'interval_t___ne__', + 'interval_t_contains', + 'interval_t_empty', + 'interval_t_intersect', + 'interval_t_length', + 'interval_t_make_union', + 'interval_t_move_by', + 'interval_t_x0_get', + 'interval_t_x0_set', + 'interval_t_x1_get', + 'interval_t_x1_set', + 'intvec_t___eq__', + 'intvec_t___getitem__', + 'intvec_t___len__', + 'intvec_t___ne__', + 'intvec_t___setitem__', + 'intvec_t__del', + 'intvec_t_add_unique', + 'intvec_t_at', + 'intvec_t_begin', + 'intvec_t_begin__SWIG_0', + 'intvec_t_begin__SWIG_1', + 'intvec_t_capacity', + 'intvec_t_clear', + 'intvec_t_empty', + 'intvec_t_end', + 'intvec_t_end__SWIG_0', + 'intvec_t_end__SWIG_1', + 'intvec_t_erase', + 'intvec_t_erase__SWIG_0', + 'intvec_t_erase__SWIG_1', + 'intvec_t_extract', + 'intvec_t_find', + 'intvec_t_find__SWIG_0', + 'intvec_t_find__SWIG_1', + 'intvec_t_has', + 'intvec_t_inject', + 'intvec_t_insert', + 'intvec_t_pop_back', + 'intvec_t_push_back', + 'intvec_t_push_back__SWIG_0', + 'intvec_t_push_back__SWIG_1', + 'intvec_t_qclear', + 'intvec_t_reserve', + 'intvec_t_resize', + 'intvec_t_resize__SWIG_0', + 'intvec_t_resize__SWIG_1', + 'intvec_t_size', + 'intvec_t_swap', + 'intvec_t_truncate', + 'invalidate_dbg_state', + 'invalidate_dbgmem_config', + 'invalidate_dbgmem_contents', + 'is__bnot0', + 'is__bnot1', + 'is__invsign0', + 'is__invsign1', + 'is_action_enabled', + 'is_additive', + 'is_align', + 'is_align_flow', + 'is_align_insn', + 'is_anonymous_member_name', + 'is_assignment', + 'is_attached_custom_data_format', + 'is_auto_enabled', + 'is_autosync', + 'is_autosync__SWIG_0', + 'is_autosync__SWIG_1', + 'is_basic_block_end', + 'is_bblk_trace_enabled', + 'is_bf', + 'is_binary', + 'is_bitop', + 'is_bnot', + 'is_bool_type', + 'is_break_consumer', + 'is_byte', + 'is_call_insn', + 'is_char', + 'is_char0', + 'is_char1', + 'is_chooser_widget', + 'is_code', + 'is_code_far', + 'is_colored_item', + 'is_commutative', + 'is_comp_unsure', + 'is_control_tty', + 'is_custfmt', + 'is_custfmt0', + 'is_custfmt1', + 'is_custom', + 'is_data', + 'is_data_far', + 'is_database_flag', + 'is_debugger_busy', + 'is_debugger_memory', + 'is_debugger_on', + 'is_defarg', + 'is_defarg0', + 'is_defarg1', + 'is_double', + 'is_dummy_member_name', + 'is_dword', + 'is_enum', + 'is_enum0', + 'is_enum1', + 'is_enum_fromtil', + 'is_enum_hidden', + 'is_filetype_like_binary', + 'is_finally_visible_func', + 'is_finally_visible_item', + 'is_finally_visible_segm', + 'is_fixed_spd', + 'is_fixup_custom', + 'is_float', + 'is_float0', + 'is_float1', + 'is_floating_dtype', + 'is_flow', + 'is_fltnum', + 'is_forced_operand', + 'is_func', + 'is_func_entry', + 'is_func_locked', + 'is_func_tail', + 'is_func_trace_enabled', + 'is_funcarg_off', + 'is_gcc', + 'is_gcc32', + 'is_gcc64', + 'is_ghost_enum', + 'is_head', + 'is_hidden_border', + 'is_hidden_item', + 'is_idaq', + 'is_ident', + 'is_ident_cp', + 'is_in_nlist', + 'is_indirect_jump_insn', + 'is_inplace_def', + 'is_insn_trace_enabled', + 'is_invsign', + 'is_kreg', + 'is_libitem', + 'is_loaded', + 'is_logical', + 'is_loop', + 'is_lvalue', + 'is_lzero', + 'is_lzero0', + 'is_lzero1', + 'is_main_thread', + 'is_manual', + 'is_manual_insn', + 'is_mapped', + 'is_may_access', + 'is_mcode_addsub', + 'is_mcode_call', + 'is_mcode_commutative', + 'is_mcode_convertible_to_jmp', + 'is_mcode_convertible_to_set', + 'is_mcode_divmod', + 'is_mcode_fpu', + 'is_mcode_j1', + 'is_mcode_jcond', + 'is_mcode_propagatable', + 'is_mcode_set', + 'is_mcode_set1', + 'is_mcode_shift', + 'is_mcode_xdsu', + 'is_member_id', + 'is_miniidb', + 'is_msg_inited', + 'is_multiplicative', + 'is_name_defined_locally', + 'is_nonbool_type', + 'is_noret', + 'is_noret_block', + 'is_not_tail', + 'is_notcode', + 'is_notproc', + 'is_numop', + 'is_numop0', + 'is_numop1', + 'is_off', + 'is_off0', + 'is_off1', + 'is_one_bit_mask', + 'is_ordinal_name', + 'is_oword', + 'is_pack_real', + 'is_paf', + 'is_pascal', + 'is_place_class_ea_capable', + 'is_prepost', + 'is_problem_present', + 'is_ptr_or_array', + 'is_public_name', + 'is_purging_cc', + 'is_qword', + 'is_refresh_requested', + 'is_reftype_target_optional', + 'is_reg_custom', + 'is_reg_float', + 'is_reg_integer', + 'is_relational', + 'is_request_running', + 'is_restype_enum', + 'is_restype_struct', + 'is_restype_struni', + 'is_restype_void', + 'is_ret_block', + 'is_ret_insn', + 'is_retfp', + 'is_same_data_type', + 'is_same_func', + 'is_sdacl_byte', + 'is_seg', + 'is_seg0', + 'is_seg1', + 'is_segm_locked', + 'is_signed_mcode', + 'is_small_udt', + 'is_spec_ea', + 'is_spec_segm', + 'is_special_member', + 'is_step_trace_enabled', + 'is_stkvar', + 'is_stkvar0', + 'is_stkvar1', + 'is_strlit', + 'is_strlit_cp', + 'is_stroff', + 'is_stroff0', + 'is_stroff1', + 'is_struct', + 'is_suspop', + 'is_tah_byte', + 'is_tail', + 'is_tbyte', + 'is_terse_struc', + 'is_tilcmt', + 'is_trusted_idb', + 'is_type_arithmetic', + 'is_type_array', + 'is_type_bitfld', + 'is_type_bool', + 'is_type_char', + 'is_type_complex', + 'is_type_const', + 'is_type_correct', + 'is_type_double', + 'is_type_enum', + 'is_type_ext_arithmetic', + 'is_type_ext_integral', + 'is_type_float', + 'is_type_floating', + 'is_type_func', + 'is_type_int', + 'is_type_int128', + 'is_type_int16', + 'is_type_int32', + 'is_type_int64', + 'is_type_integral', + 'is_type_ldouble', + 'is_type_paf', + 'is_type_partial', + 'is_type_ptr', + 'is_type_ptr_or_array', + 'is_type_struct', + 'is_type_struni', + 'is_type_sue', + 'is_type_tbyte', + 'is_type_typedef', + 'is_type_uchar', + 'is_type_uint', + 'is_type_uint128', + 'is_type_uint16', + 'is_type_uint32', + 'is_type_uint64', + 'is_type_union', + 'is_type_unknown', + 'is_type_void', + 'is_type_volatile', + 'is_typeid_last', + 'is_uname', + 'is_unary', + 'is_union', + 'is_unknown', + 'is_unsigned_mcode', + 'is_user_cc', + 'is_usersp', + 'is_userti', + 'is_valid_cp', + 'is_valid_trace_file', + 'is_valid_typename', + 'is_vararg_cc', + 'is_varmember', + 'is_varsize_item', + 'is_varstr', + 'is_visible_cp', + 'is_visible_func', + 'is_visible_item', + 'is_visible_segm', + 'is_weak_name', + 'is_word', + 'is_yword', + 'is_zstroff', + 'is_zword', + 'ivl_t___eq__', + 'ivl_t___ge__', + 'ivl_t___gt__', + 'ivl_t___le__', + 'ivl_t___lt__', + 'ivl_t___ne__', + 'ivl_t_clear', + 'ivl_t_compare', + 'ivl_t_contains', + 'ivl_t_dstr', + 'ivl_t_empty', + 'ivl_t_extend_to_cover', + 'ivl_t_includes', + 'ivl_t_intersect', + 'ivl_t_overlap', + 'ivl_with_name_t_ivl_get', + 'ivl_with_name_t_ivl_set', + 'ivl_with_name_t_part_get', + 'ivl_with_name_t_part_set', + 'ivl_with_name_t_whole_get', + 'ivl_with_name_t_whole_set', + 'ivlset_t___eq__', + 'ivlset_t___ge__', + 'ivlset_t___gt__', + 'ivlset_t___le__', + 'ivlset_t___lt__', + 'ivlset_t___ne__', + 'ivlset_t__print', + 'ivlset_t_add', + 'ivlset_t_add__SWIG_0', + 'ivlset_t_add__SWIG_1', + 'ivlset_t_add__SWIG_2', + 'ivlset_t_addmasked', + 'ivlset_t_compare', + 'ivlset_t_contains', + 'ivlset_t_count', + 'ivlset_t_dstr', + 'ivlset_t_has_common', + 'ivlset_t_has_common__SWIG_0', + 'ivlset_t_has_common__SWIG_1', + 'ivlset_t_includes', + 'ivlset_t_intersect', + 'ivlset_t_sub', + 'ivlset_t_sub__SWIG_0', + 'ivlset_t_sub__SWIG_1', + 'ivlset_t_sub__SWIG_2', + 'jcnd2set', + 'jobj_wrapper_t_get_dict', + 'jumpto', + 'jumpto__SWIG_0', + 'jumpto__SWIG_1', + 'last_idcv_attr', + 'leading_zero_important', + 'lexcompare', + 'lexcompare_tinfo', + 'list_bptgrps', + 'list_bptgrps__SWIG_0', + 'list_bptgrps__SWIG_1', + 'llabel_t_ea_get', + 'llabel_t_ea_set', + 'llabel_t_name_get', + 'llabel_t_name_set', + 'load_and_run_plugin', + 'load_binary_file', + 'load_dbg_dbginfo', + 'load_debugger', + 'load_ids_module', + 'load_plugin', + 'load_til', + 'load_til_header', + 'load_trace_file', + 'loader_input_t___idc_cvt_id___get', + 'loader_input_t___idc_cvt_id___set', + 'loader_input_t_close', + 'loader_input_t_file2base', + 'loader_input_t_filename', + 'loader_input_t_from_capsule', + 'loader_input_t_from_fp', + 'loader_input_t_from_linput', + 'loader_input_t_get_byte', + 'loader_input_t_get_linput', + 'loader_input_t_gets', + 'loader_input_t_getz', + 'loader_input_t_open', + 'loader_input_t_open_memory', + 'loader_input_t_opened', + 'loader_input_t_read', + 'loader_input_t_readbytes', + 'loader_input_t_seek', + 'loader_input_t_set_linput', + 'loader_input_t_size', + 'loader_input_t_tell', + 'loader_t_flags_get', + 'loader_t_flags_set', + 'loader_t_version_get', + 'loader_t_version_set', + 'lochist_entry_t___eq__', + 'lochist_entry_t___ne__', + 'lochist_entry_t_acquire_place', + 'lochist_entry_t_is_valid', + 'lochist_entry_t_place', + 'lochist_entry_t_place__SWIG_0', + 'lochist_entry_t_place__SWIG_1', + 'lochist_entry_t_plce_get', + 'lochist_entry_t_plce_set', + 'lochist_entry_t_renderer_info', + 'lochist_entry_t_renderer_info__SWIG_0', + 'lochist_entry_t_renderer_info__SWIG_1', + 'lochist_entry_t_rinfo_get', + 'lochist_entry_t_rinfo_set', + 'lochist_entry_t_set_place', + 'lochist_t_back', + 'lochist_t_clear', + 'lochist_t_current_index', + 'lochist_t_fwd', + 'lochist_t_get', + 'lochist_t_get_current', + 'lochist_t_get_place_id', + 'lochist_t_get_template_place', + 'lochist_t_init', + 'lochist_t_is_history_enabled', + 'lochist_t_jump', + 'lochist_t_netcode', + 'lochist_t_save', + 'lochist_t_seek', + 'lochist_t_set', + 'lochist_t_set_current', + 'lochist_t_size', + 'lock_func_range', + 'lock_segm', + 'log2ceil', + 'log2floor', + 'longlongvec_t___eq__', + 'longlongvec_t___getitem__', + 'longlongvec_t___len__', + 'longlongvec_t___ne__', + 'longlongvec_t___setitem__', + 'longlongvec_t__del', + 'longlongvec_t_add_unique', + 'longlongvec_t_at', + 'longlongvec_t_begin', + 'longlongvec_t_begin__SWIG_0', + 'longlongvec_t_begin__SWIG_1', + 'longlongvec_t_capacity', + 'longlongvec_t_clear', + 'longlongvec_t_empty', + 'longlongvec_t_end', + 'longlongvec_t_end__SWIG_0', + 'longlongvec_t_end__SWIG_1', + 'longlongvec_t_erase', + 'longlongvec_t_erase__SWIG_0', + 'longlongvec_t_erase__SWIG_1', + 'longlongvec_t_extract', + 'longlongvec_t_find', + 'longlongvec_t_find__SWIG_0', + 'longlongvec_t_find__SWIG_1', + 'longlongvec_t_has', + 'longlongvec_t_inject', + 'longlongvec_t_insert', + 'longlongvec_t_pop_back', + 'longlongvec_t_push_back', + 'longlongvec_t_push_back__SWIG_0', + 'longlongvec_t_push_back__SWIG_1', + 'longlongvec_t_qclear', + 'longlongvec_t_reserve', + 'longlongvec_t_resize', + 'longlongvec_t_resize__SWIG_0', + 'longlongvec_t_resize__SWIG_1', + 'longlongvec_t_size', + 'longlongvec_t_swap', + 'longlongvec_t_truncate', + 'lookup_key_code', + 'lower_type', + 'lowertype_helper_t_func_has_stkframe_hole', + 'lowertype_helper_t_get_func_purged_bytes', + 'lumina_client_t_get_pop', + 'lumina_client_t_is_pattern_id', + 'lumina_client_t_pull_md', + 'lumina_client_t_pull_md__SWIG_0', + 'lumina_client_t_pull_md__SWIG_1', + 'lumina_client_t_push_md', + 'lumina_client_t_set_pattern_id_md5', + 'lumina_op_res_vec_t___eq__', + 'lumina_op_res_vec_t___getitem__', + 'lumina_op_res_vec_t___len__', + 'lumina_op_res_vec_t___ne__', + 'lumina_op_res_vec_t___setitem__', + 'lumina_op_res_vec_t__del', + 'lumina_op_res_vec_t_add_unique', + 'lumina_op_res_vec_t_at', + 'lumina_op_res_vec_t_begin', + 'lumina_op_res_vec_t_begin__SWIG_0', + 'lumina_op_res_vec_t_begin__SWIG_1', + 'lumina_op_res_vec_t_capacity', + 'lumina_op_res_vec_t_clear', + 'lumina_op_res_vec_t_empty', + 'lumina_op_res_vec_t_end', + 'lumina_op_res_vec_t_end__SWIG_0', + 'lumina_op_res_vec_t_end__SWIG_1', + 'lumina_op_res_vec_t_erase', + 'lumina_op_res_vec_t_erase__SWIG_0', + 'lumina_op_res_vec_t_erase__SWIG_1', + 'lumina_op_res_vec_t_extract', + 'lumina_op_res_vec_t_find', + 'lumina_op_res_vec_t_find__SWIG_0', + 'lumina_op_res_vec_t_find__SWIG_1', + 'lumina_op_res_vec_t_grow', + 'lumina_op_res_vec_t_has', + 'lumina_op_res_vec_t_inject', + 'lumina_op_res_vec_t_insert', + 'lumina_op_res_vec_t_pop_back', + 'lumina_op_res_vec_t_push_back', + 'lumina_op_res_vec_t_push_back__SWIG_0', + 'lumina_op_res_vec_t_push_back__SWIG_1', + 'lumina_op_res_vec_t_qclear', + 'lumina_op_res_vec_t_reserve', + 'lumina_op_res_vec_t_resize', + 'lumina_op_res_vec_t_resize__SWIG_0', + 'lumina_op_res_vec_t_resize__SWIG_1', + 'lumina_op_res_vec_t_size', + 'lumina_op_res_vec_t_swap', + 'lumina_op_res_vec_t_truncate', + 'lvar_locator_t___eq__', + 'lvar_locator_t___ge__', + 'lvar_locator_t___gt__', + 'lvar_locator_t___le__', + 'lvar_locator_t___lt__', + 'lvar_locator_t___ne__', + 'lvar_locator_t_compare', + 'lvar_locator_t_defea_get', + 'lvar_locator_t_defea_set', + 'lvar_locator_t_get_reg1', + 'lvar_locator_t_get_reg2', + 'lvar_locator_t_get_scattered', + 'lvar_locator_t_get_scattered__SWIG_0', + 'lvar_locator_t_get_scattered__SWIG_1', + 'lvar_locator_t_get_stkoff', + 'lvar_locator_t_is_reg1', + 'lvar_locator_t_is_reg2', + 'lvar_locator_t_is_reg_var', + 'lvar_locator_t_is_scattered', + 'lvar_locator_t_is_stk_var', + 'lvar_locator_t_location_get', + 'lvar_locator_t_location_set', + 'lvar_mapping_begin', + 'lvar_mapping_clear', + 'lvar_mapping_end', + 'lvar_mapping_erase', + 'lvar_mapping_find', + 'lvar_mapping_first', + 'lvar_mapping_free', + 'lvar_mapping_insert', + 'lvar_mapping_iterator_t___eq__', + 'lvar_mapping_iterator_t___ne__', + 'lvar_mapping_iterator_t_x_get', + 'lvar_mapping_iterator_t_x_set', + 'lvar_mapping_new', + 'lvar_mapping_next', + 'lvar_mapping_prev', + 'lvar_mapping_second', + 'lvar_mapping_size', + 'lvar_mapping_t_at', + 'lvar_mapping_t_size', + 'lvar_off', + 'lvar_ref_t___eq__', + 'lvar_ref_t___ge__', + 'lvar_ref_t___gt__', + 'lvar_ref_t___le__', + 'lvar_ref_t___lt__', + 'lvar_ref_t___ne__', + 'lvar_ref_t_compare', + 'lvar_ref_t_idx_get', + 'lvar_ref_t_idx_set', + 'lvar_ref_t_mba_get', + 'lvar_ref_t_off_get', + 'lvar_ref_t_off_set', + 'lvar_ref_t_swap', + 'lvar_ref_t_var', + 'lvar_saved_info_t___eq__', + 'lvar_saved_info_t___ne__', + 'lvar_saved_info_t_clear_keep', + 'lvar_saved_info_t_clr_forced_lvar', + 'lvar_saved_info_t_clr_nomap_lvar', + 'lvar_saved_info_t_clr_noptr_lvar', + 'lvar_saved_info_t_cmt_get', + 'lvar_saved_info_t_cmt_set', + 'lvar_saved_info_t_flags_get', + 'lvar_saved_info_t_flags_set', + 'lvar_saved_info_t_has_info', + 'lvar_saved_info_t_is_forced_lvar', + 'lvar_saved_info_t_is_kept', + 'lvar_saved_info_t_is_nomap_lvar', + 'lvar_saved_info_t_is_noptr_lvar', + 'lvar_saved_info_t_ll_get', + 'lvar_saved_info_t_ll_set', + 'lvar_saved_info_t_name_get', + 'lvar_saved_info_t_name_set', + 'lvar_saved_info_t_set_forced_lvar', + 'lvar_saved_info_t_set_keep', + 'lvar_saved_info_t_set_nomap_lvar', + 'lvar_saved_info_t_set_noptr_lvar', + 'lvar_saved_info_t_size_get', + 'lvar_saved_info_t_size_set', + 'lvar_saved_info_t_type_get', + 'lvar_saved_info_t_type_set', + 'lvar_saved_infos_t___eq__', + 'lvar_saved_infos_t___getitem__', + 'lvar_saved_infos_t___len__', + 'lvar_saved_infos_t___ne__', + 'lvar_saved_infos_t___setitem__', + 'lvar_saved_infos_t__del', + 'lvar_saved_infos_t_add_unique', + 'lvar_saved_infos_t_at', + 'lvar_saved_infos_t_begin', + 'lvar_saved_infos_t_begin__SWIG_0', + 'lvar_saved_infos_t_begin__SWIG_1', + 'lvar_saved_infos_t_capacity', + 'lvar_saved_infos_t_clear', + 'lvar_saved_infos_t_empty', + 'lvar_saved_infos_t_end', + 'lvar_saved_infos_t_end__SWIG_0', + 'lvar_saved_infos_t_end__SWIG_1', + 'lvar_saved_infos_t_erase', + 'lvar_saved_infos_t_erase__SWIG_0', + 'lvar_saved_infos_t_erase__SWIG_1', + 'lvar_saved_infos_t_extract', + 'lvar_saved_infos_t_find', + 'lvar_saved_infos_t_find__SWIG_0', + 'lvar_saved_infos_t_find__SWIG_1', + 'lvar_saved_infos_t_grow', + 'lvar_saved_infos_t_has', + 'lvar_saved_infos_t_inject', + 'lvar_saved_infos_t_insert', + 'lvar_saved_infos_t_pop_back', + 'lvar_saved_infos_t_push_back', + 'lvar_saved_infos_t_push_back__SWIG_0', + 'lvar_saved_infos_t_push_back__SWIG_1', + 'lvar_saved_infos_t_qclear', + 'lvar_saved_infos_t_reserve', + 'lvar_saved_infos_t_resize', + 'lvar_saved_infos_t_resize__SWIG_0', + 'lvar_saved_infos_t_resize__SWIG_1', + 'lvar_saved_infos_t_size', + 'lvar_saved_infos_t_swap', + 'lvar_saved_infos_t_truncate', + 'lvar_t_accepts_type', + 'lvar_t_append_list', + 'lvar_t_clear_used', + 'lvar_t_clr_arg_var', + 'lvar_t_clr_automapped', + 'lvar_t_clr_dummy_arg', + 'lvar_t_clr_fake_var', + 'lvar_t_clr_floating_var', + 'lvar_t_clr_forced_var', + 'lvar_t_clr_mapdst_var', + 'lvar_t_clr_mreg_done', + 'lvar_t_clr_noptr_var', + 'lvar_t_clr_notarg', + 'lvar_t_clr_overlapped_var', + 'lvar_t_clr_spoiled_var', + 'lvar_t_clr_thisarg', + 'lvar_t_clr_unknown_width', + 'lvar_t_clr_user_info', + 'lvar_t_clr_user_name', + 'lvar_t_clr_user_type', + 'lvar_t_cmt_get', + 'lvar_t_cmt_set', + 'lvar_t_defblk_get', + 'lvar_t_defblk_set', + 'lvar_t_divisor_get', + 'lvar_t_divisor_set', + 'lvar_t_has_common', + 'lvar_t_has_common_bit', + 'lvar_t_has_nice_name', + 'lvar_t_has_regname', + 'lvar_t_has_user_info', + 'lvar_t_has_user_name', + 'lvar_t_has_user_type', + 'lvar_t_is_aliasable', + 'lvar_t_is_arg_var', + 'lvar_t_is_automapped', + 'lvar_t_is_dummy_arg', + 'lvar_t_is_fake_var', + 'lvar_t_is_floating_var', + 'lvar_t_is_forced_var', + 'lvar_t_is_mapdst_var', + 'lvar_t_is_noptr_var', + 'lvar_t_is_notarg', + 'lvar_t_is_overlapped_var', + 'lvar_t_is_result_var', + 'lvar_t_is_spoiled_var', + 'lvar_t_is_thisarg', + 'lvar_t_is_unknown_width', + 'lvar_t_mreg_done', + 'lvar_t_name_get', + 'lvar_t_name_set', + 'lvar_t_set_arg_var', + 'lvar_t_set_automapped', + 'lvar_t_set_dummy_arg', + 'lvar_t_set_fake_var', + 'lvar_t_set_final_lvar_type', + 'lvar_t_set_floating_var', + 'lvar_t_set_forced_var', + 'lvar_t_set_lvar_type', + 'lvar_t_set_mapdst_var', + 'lvar_t_set_mreg_done', + 'lvar_t_set_non_typed', + 'lvar_t_set_noptr_var', + 'lvar_t_set_notarg', + 'lvar_t_set_overlapped_var', + 'lvar_t_set_spoiled_var', + 'lvar_t_set_thisarg', + 'lvar_t_set_typed', + 'lvar_t_set_unknown_width', + 'lvar_t_set_used', + 'lvar_t_set_user_name', + 'lvar_t_set_user_type', + 'lvar_t_set_width', + 'lvar_t_tif_get', + 'lvar_t_tif_set', + 'lvar_t_type', + 'lvar_t_type__SWIG_0', + 'lvar_t_type__SWIG_1', + 'lvar_t_typed', + 'lvar_t_used', + 'lvar_t_width_get', + 'lvar_t_width_set', + 'lvar_uservec_t_clear', + 'lvar_uservec_t_find_info', + 'lvar_uservec_t_keep_info', + 'lvar_uservec_t_lmaps_get', + 'lvar_uservec_t_lmaps_set', + 'lvar_uservec_t_lvvec_get', + 'lvar_uservec_t_lvvec_set', + 'lvar_uservec_t_stkoff_delta_get', + 'lvar_uservec_t_stkoff_delta_set', + 'lvar_uservec_t_swap', + 'lvar_uservec_t_ulv_flags_get', + 'lvar_uservec_t_ulv_flags_set', + 'lvars_t_find', + 'lvars_t_find_input_lvar', + 'lvars_t_find_lvar', + 'lvars_t_find_stkvar', + 'make_name_auto', + 'make_name_non_public', + 'make_name_non_weak', + 'make_name_public', + 'make_name_user', + 'make_name_weak', + 'make_pointer', + 'map_code_ea', + 'map_code_ea__SWIG_0', + 'map_code_ea__SWIG_1', + 'map_data_ea', + 'map_data_ea__SWIG_0', + 'map_data_ea__SWIG_1', + 'map_ea', + 'map_ea__SWIG_0', + 'map_ea__SWIG_1', + 'mark_cfunc_dirty', + 'mark_position', + 'may_create_stkvars', + 'may_trace_sp', + 'mba_range_iterator_t_chunk', + 'mba_range_iterator_t_fii_get', + 'mba_range_iterator_t_fii_set', + 'mba_range_iterator_t_is_snippet', + 'mba_range_iterator_t_next', + 'mba_range_iterator_t_rii_get', + 'mba_range_iterator_t_rii_set', + 'mba_range_iterator_t_set', + 'mba_ranges_t_clear', + 'mba_ranges_t_empty', + 'mba_ranges_t_is_fragmented', + 'mba_ranges_t_is_snippet', + 'mba_ranges_t_pfn_get', + 'mba_ranges_t_pfn_set', + 'mba_ranges_t_ranges_get', + 'mba_ranges_t_ranges_set', + 'mba_ranges_t_start', + 'mbl_array_t__deregister', + 'mbl_array_t__print', + 'mbl_array_t__register', + 'mbl_array_t_aliased_args_get', + 'mbl_array_t_aliased_args_set', + 'mbl_array_t_aliased_memory_get', + 'mbl_array_t_aliased_memory_set', + 'mbl_array_t_aliased_vars_get', + 'mbl_array_t_aliased_vars_set', + 'mbl_array_t_alloc_lvars', + 'mbl_array_t_analyze_calls', + 'mbl_array_t_arg', + 'mbl_array_t_arg__SWIG_0', + 'mbl_array_t_arg__SWIG_1', + 'mbl_array_t_argbase', + 'mbl_array_t_argidx_get', + 'mbl_array_t_argidx_ok', + 'mbl_array_t_argidx_set', + 'mbl_array_t_bad_call_sp_detected', + 'mbl_array_t_blocks_get', + 'mbl_array_t_blocks_set', + 'mbl_array_t_build_graph', + 'mbl_array_t_calc_shins_flags', + 'mbl_array_t_callinfo_built', + 'mbl_array_t_cc_get', + 'mbl_array_t_cc_set', + 'mbl_array_t_chain_varnums_ok', + 'mbl_array_t_clr_cdtr', + 'mbl_array_t_clr_mba_flags', + 'mbl_array_t_clr_mba_flags2', + 'mbl_array_t_combine_blocks', + 'mbl_array_t_common_stkvars_stkargs', + 'mbl_array_t_consumed_argregs_get', + 'mbl_array_t_consumed_argregs_set', + 'mbl_array_t_copy_block', + 'mbl_array_t_deleted_pairs', + 'mbl_array_t_deserialize', + 'mbl_array_t_display_numaddrs', + 'mbl_array_t_display_valnums', + 'mbl_array_t_dump', + 'mbl_array_t_dump_mba', + 'mbl_array_t_dump_mba__varargs__', + 'mbl_array_t_entry_ea_get', + 'mbl_array_t_entry_ea_set', + 'mbl_array_t_error_ea_get', + 'mbl_array_t_error_ea_set', + 'mbl_array_t_error_strarg_get', + 'mbl_array_t_error_strarg_set', + 'mbl_array_t_final_type_get', + 'mbl_array_t_final_type_set', + 'mbl_array_t_find_mop', + 'mbl_array_t_first_epilog_ea_get', + 'mbl_array_t_first_epilog_ea_set', + 'mbl_array_t_for_all_insns', + 'mbl_array_t_for_all_ops', + 'mbl_array_t_for_all_topinsns', + 'mbl_array_t_fpd_get', + 'mbl_array_t_fpd_set', + 'mbl_array_t_frregs_get', + 'mbl_array_t_frregs_set', + 'mbl_array_t_frsize_get', + 'mbl_array_t_frsize_set', + 'mbl_array_t_fti_flags_get', + 'mbl_array_t_fti_flags_set', + 'mbl_array_t_fullsize_get', + 'mbl_array_t_fullsize_set', + 'mbl_array_t_generated_asserts', + 'mbl_array_t_get_args_region', + 'mbl_array_t_get_curfunc', + 'mbl_array_t_get_graph', + 'mbl_array_t_get_ida_argloc', + 'mbl_array_t_get_lvars_region', + 'mbl_array_t_get_mba_flags', + 'mbl_array_t_get_mba_flags2', + 'mbl_array_t_get_mblock', + 'mbl_array_t_get_mblock__SWIG_0', + 'mbl_array_t_get_mblock__SWIG_1', + 'mbl_array_t_get_shadow_region', + 'mbl_array_t_get_stack_region', + 'mbl_array_t_get_std_region', + 'mbl_array_t_gotoff_stkvars_get', + 'mbl_array_t_gotoff_stkvars_set', + 'mbl_array_t_graph_insns', + 'mbl_array_t_has_bad_sp', + 'mbl_array_t_has_over_chains', + 'mbl_array_t_has_passregs', + 'mbl_array_t_idaloc2vd', + 'mbl_array_t_idb_node_get', + 'mbl_array_t_idb_node_set', + 'mbl_array_t_idb_spoiled_get', + 'mbl_array_t_idb_spoiled_set', + 'mbl_array_t_idb_type_get', + 'mbl_array_t_idb_type_set', + 'mbl_array_t_inargoff_get', + 'mbl_array_t_inargoff_set', + 'mbl_array_t_insert_block', + 'mbl_array_t_is_cdtr', + 'mbl_array_t_is_ctr', + 'mbl_array_t_is_dtr', + 'mbl_array_t_is_pattern', + 'mbl_array_t_is_snippet', + 'mbl_array_t_is_stkarg', + 'mbl_array_t_is_thunk', + 'mbl_array_t_label_get', + 'mbl_array_t_label_set', + 'mbl_array_t_last_prolog_ea_get', + 'mbl_array_t_last_prolog_ea_set', + 'mbl_array_t_loaded_gdl', + 'mbl_array_t_lvar_names_ok', + 'mbl_array_t_lvars_allocated', + 'mbl_array_t_lvars_renamed', + 'mbl_array_t_mark_chains_dirty', + 'mbl_array_t_maturity_get', + 'mbl_array_t_maturity_set', + 'mbl_array_t_may_refine_rettype', + 'mbl_array_t_mbr_get', + 'mbl_array_t_mbr_set', + 'mbl_array_t_minargref_get', + 'mbl_array_t_minargref_set', + 'mbl_array_t_minstkref_ea_get', + 'mbl_array_t_minstkref_ea_set', + 'mbl_array_t_minstkref_get', + 'mbl_array_t_minstkref_set', + 'mbl_array_t_natural_get', + 'mbl_array_t_natural_set', + 'mbl_array_t_nodel_memory_get', + 'mbl_array_t_nodel_memory_set', + 'mbl_array_t_notes_get', + 'mbl_array_t_notes_set', + 'mbl_array_t_npurged_get', + 'mbl_array_t_npurged_set', + 'mbl_array_t_occurred_warns_get', + 'mbl_array_t_occurred_warns_set', + 'mbl_array_t_optimize_global', + 'mbl_array_t_optimize_local', + 'mbl_array_t_optimized', + 'mbl_array_t_pfn_flags_get', + 'mbl_array_t_pfn_flags_set', + 'mbl_array_t_precise_defeas', + 'mbl_array_t_propagated_asserts', + 'mbl_array_t_qty_get', + 'mbl_array_t_qty_set', + 'mbl_array_t_really_alloc', + 'mbl_array_t_regargs_is_not_aligned', + 'mbl_array_t_remove_block', + 'mbl_array_t_remove_empty_blocks', + 'mbl_array_t_reqmat_get', + 'mbl_array_t_reqmat_set', + 'mbl_array_t_restricted_memory_get', + 'mbl_array_t_restricted_memory_set', + 'mbl_array_t_retsize_get', + 'mbl_array_t_retsize_set', + 'mbl_array_t_returns_fpval', + 'mbl_array_t_retvaridx_get', + 'mbl_array_t_retvaridx_set', + 'mbl_array_t_rtype_refined', + 'mbl_array_t_saverest_done', + 'mbl_array_t_serialize', + 'mbl_array_t_set_mba_flags', + 'mbl_array_t_set_mba_flags2', + 'mbl_array_t_shadow_args_get', + 'mbl_array_t_shadow_args_set', + 'mbl_array_t_short_display', + 'mbl_array_t_should_beautify', + 'mbl_array_t_show_reduction', + 'mbl_array_t_spd_adjust_get', + 'mbl_array_t_spd_adjust_set', + 'mbl_array_t_spoiled_list_get', + 'mbl_array_t_spoiled_list_set', + 'mbl_array_t_stacksize_get', + 'mbl_array_t_stacksize_set', + 'mbl_array_t_std_ivls_get', + 'mbl_array_t_std_ivls_set', + 'mbl_array_t_stkoff_ida2vd', + 'mbl_array_t_stkoff_vd2ida', + 'mbl_array_t_term', + 'mbl_array_t_tmpstk_size_get', + 'mbl_array_t_tmpstk_size_set', + 'mbl_array_t_use_frame', + 'mbl_array_t_use_wingraph32', + 'mbl_array_t_valranges_done', + 'mbl_array_t_vars_get', + 'mbl_array_t_vars_set', + 'mbl_array_t_vd2idaloc', + 'mbl_array_t_vd2idaloc__SWIG_0', + 'mbl_array_t_vd2idaloc__SWIG_1', + 'mbl_array_t_verify', + 'mbl_array_t_write_to_const_detected', + 'mbl_graph_t_get_chain_stamp', + 'mbl_graph_t_get_du', + 'mbl_graph_t_get_mblock', + 'mbl_graph_t_get_ud', + 'mbl_graph_t_is_du_chain_dirty', + 'mbl_graph_t_is_redefined_globally', + 'mbl_graph_t_is_ud_chain_dirty', + 'mbl_graph_t_is_used_globally', + 'mblock_t__print', + 'mblock_t_append_def_list', + 'mblock_t_append_use_list', + 'mblock_t_build_def_list', + 'mblock_t_build_lists', + 'mblock_t_build_use_list', + 'mblock_t_dead_at_start_get', + 'mblock_t_dead_at_start_set', + 'mblock_t_dnu_get', + 'mblock_t_dnu_set', + 'mblock_t_dump', + 'mblock_t_dump_block', + 'mblock_t_dump_block__varargs__', + 'mblock_t_empty', + 'mblock_t_end_get', + 'mblock_t_end_set', + 'mblock_t_find_access', + 'mblock_t_find_def', + 'mblock_t_find_first_use', + 'mblock_t_find_redefinition', + 'mblock_t_find_use', + 'mblock_t_flags_get', + 'mblock_t_flags_set', + 'mblock_t_for_all_insns', + 'mblock_t_for_all_ops', + 'mblock_t_for_all_uses', + 'mblock_t_get_reginsn_qty', + 'mblock_t_get_valranges', + 'mblock_t_get_valranges__SWIG_0', + 'mblock_t_get_valranges__SWIG_1', + 'mblock_t_head_get', + 'mblock_t_head_set', + 'mblock_t_insert_into_block', + 'mblock_t_is_branch', + 'mblock_t_is_call_block', + 'mblock_t_is_nway', + 'mblock_t_is_redefined', + 'mblock_t_is_rhs_redefined', + 'mblock_t_is_simple_goto_block', + 'mblock_t_is_simple_jcnd_block', + 'mblock_t_is_unknown_call', + 'mblock_t_is_used', + 'mblock_t_lists_dirty', + 'mblock_t_lists_ready', + 'mblock_t_make_lists_ready', + 'mblock_t_make_nop', + 'mblock_t_mark_lists_dirty', + 'mblock_t_maxbsp_get', + 'mblock_t_maxbsp_set', + 'mblock_t_maybdef_get', + 'mblock_t_maybdef_set', + 'mblock_t_maybuse_get', + 'mblock_t_maybuse_set', + 'mblock_t_mba_get', + 'mblock_t_mba_set', + 'mblock_t_minbargref_get', + 'mblock_t_minbargref_set', + 'mblock_t_minbstkref_get', + 'mblock_t_minbstkref_set', + 'mblock_t_mustbdef_get', + 'mblock_t_mustbdef_set', + 'mblock_t_mustbuse_get', + 'mblock_t_mustbuse_set', + 'mblock_t_needs_propagation', + 'mblock_t_nextb_get', + 'mblock_t_nextb_set', + 'mblock_t_npred', + 'mblock_t_nsucc', + 'mblock_t_optimize_block', + 'mblock_t_optimize_insn', + 'mblock_t_optimize_useless_jump', + 'mblock_t_pred', + 'mblock_t_predset_get', + 'mblock_t_predset_set', + 'mblock_t_prevb_get', + 'mblock_t_prevb_set', + 'mblock_t_remove_from_block', + 'mblock_t_request_demote64', + 'mblock_t_request_propagation', + 'mblock_t_serial_get', + 'mblock_t_serial_set', + 'mblock_t_start_get', + 'mblock_t_start_set', + 'mblock_t_succ', + 'mblock_t_succset_get', + 'mblock_t_succset_set', + 'mblock_t_tail_get', + 'mblock_t_tail_set', + 'mblock_t_type_get', + 'mblock_t_type_set', + 'mcallarg_t__print', + 'mcallarg_t_argloc_get', + 'mcallarg_t_argloc_set', + 'mcallarg_t_copy_mop', + 'mcallarg_t_dstr', + 'mcallarg_t_ea_get', + 'mcallarg_t_ea_set', + 'mcallarg_t_make_int', + 'mcallarg_t_make_uint', + 'mcallarg_t_name_get', + 'mcallarg_t_name_set', + 'mcallarg_t_set_regarg', + 'mcallarg_t_set_regarg__SWIG_0', + 'mcallarg_t_set_regarg__SWIG_1', + 'mcallarg_t_set_regarg__SWIG_2', + 'mcallarg_t_type_get', + 'mcallarg_t_type_set', + 'mcallargs_t___eq__', + 'mcallargs_t___getitem__', + 'mcallargs_t___len__', + 'mcallargs_t___ne__', + 'mcallargs_t___setitem__', + 'mcallargs_t__del', + 'mcallargs_t_add_unique', + 'mcallargs_t_at', + 'mcallargs_t_begin', + 'mcallargs_t_begin__SWIG_0', + 'mcallargs_t_begin__SWIG_1', + 'mcallargs_t_capacity', + 'mcallargs_t_clear', + 'mcallargs_t_empty', + 'mcallargs_t_end', + 'mcallargs_t_end__SWIG_0', + 'mcallargs_t_end__SWIG_1', + 'mcallargs_t_erase', + 'mcallargs_t_erase__SWIG_0', + 'mcallargs_t_erase__SWIG_1', + 'mcallargs_t_extract', + 'mcallargs_t_find', + 'mcallargs_t_find__SWIG_0', + 'mcallargs_t_find__SWIG_1', + 'mcallargs_t_grow', + 'mcallargs_t_has', + 'mcallargs_t_inject', + 'mcallargs_t_insert', + 'mcallargs_t_pop_back', + 'mcallargs_t_push_back', + 'mcallargs_t_push_back__SWIG_0', + 'mcallargs_t_push_back__SWIG_1', + 'mcallargs_t_qclear', + 'mcallargs_t_reserve', + 'mcallargs_t_resize', + 'mcallargs_t_resize__SWIG_0', + 'mcallargs_t_resize__SWIG_1', + 'mcallargs_t_size', + 'mcallargs_t_swap', + 'mcallargs_t_truncate', + 'mcallinfo_t__print', + 'mcallinfo_t_args_get', + 'mcallinfo_t_args_set', + 'mcallinfo_t_call_spd_get', + 'mcallinfo_t_call_spd_set', + 'mcallinfo_t_callee_get', + 'mcallinfo_t_callee_set', + 'mcallinfo_t_cc_get', + 'mcallinfo_t_cc_set', + 'mcallinfo_t_dead_regs_get', + 'mcallinfo_t_dead_regs_set', + 'mcallinfo_t_dstr', + 'mcallinfo_t_flags_get', + 'mcallinfo_t_flags_set', + 'mcallinfo_t_fti_attrs_get', + 'mcallinfo_t_fti_attrs_set', + 'mcallinfo_t_get_type', + 'mcallinfo_t_is_vararg', + 'mcallinfo_t_lexcompare', + 'mcallinfo_t_pass_regs_get', + 'mcallinfo_t_pass_regs_set', + 'mcallinfo_t_retregs_get', + 'mcallinfo_t_retregs_set', + 'mcallinfo_t_return_argloc_get', + 'mcallinfo_t_return_argloc_set', + 'mcallinfo_t_return_regs_get', + 'mcallinfo_t_return_regs_set', + 'mcallinfo_t_return_type_get', + 'mcallinfo_t_return_type_set', + 'mcallinfo_t_role_get', + 'mcallinfo_t_role_set', + 'mcallinfo_t_set_type', + 'mcallinfo_t_solid_args_get', + 'mcallinfo_t_solid_args_set', + 'mcallinfo_t_spoiled_get', + 'mcallinfo_t_spoiled_set', + 'mcallinfo_t_stkargs_top_get', + 'mcallinfo_t_stkargs_top_set', + 'mcallinfo_t_visible_memory_get', + 'mcallinfo_t_visible_memory_set', + 'mcases_t___eq__', + 'mcases_t___ge__', + 'mcases_t___gt__', + 'mcases_t___le__', + 'mcases_t___lt__', + 'mcases_t___ne__', + 'mcases_t__print', + 'mcases_t_compare', + 'mcases_t_dstr', + 'mcases_t_empty', + 'mcases_t_resize', + 'mcases_t_size', + 'mcases_t_swap', + 'mcases_t_targets_get', + 'mcases_t_targets_set', + 'mcases_t_values_get', + 'mcases_t_values_set', + 'mcode_modifies_d', + 'md_type_parts_t___eq__', + 'md_type_parts_t___ne__', + 'md_type_parts_t_fields_get', + 'md_type_parts_t_fields_set', + 'md_type_parts_t_type_get', + 'md_type_parts_t_type_set', + 'md_type_parts_t_userti_get', + 'md_type_parts_t_userti_set', + 'mem2base', + 'member_t_by_til', + 'member_t_eoff_get', + 'member_t_eoff_set', + 'member_t_flag_get', + 'member_t_flag_set', + 'member_t_get_soff', + 'member_t_has_ti', + 'member_t_has_union', + 'member_t_id_get', + 'member_t_id_set', + 'member_t_is_baseclass', + 'member_t_is_destructor', + 'member_t_is_dupname', + 'member_t_props_get', + 'member_t_props_set', + 'member_t_soff_get', + 'member_t_soff_set', + 'member_t_unimem', + 'meminfo_vec_t___eq__', + 'meminfo_vec_t___getitem__', + 'meminfo_vec_t___len__', + 'meminfo_vec_t___ne__', + 'meminfo_vec_t___setitem__', + 'meminfo_vec_t__del', + 'meminfo_vec_t_add_unique', + 'meminfo_vec_t_at', + 'meminfo_vec_t_begin', + 'meminfo_vec_t_begin__SWIG_0', + 'meminfo_vec_t_begin__SWIG_1', + 'meminfo_vec_t_capacity', + 'meminfo_vec_t_clear', + 'meminfo_vec_t_empty', + 'meminfo_vec_t_end', + 'meminfo_vec_t_end__SWIG_0', + 'meminfo_vec_t_end__SWIG_1', + 'meminfo_vec_t_erase', + 'meminfo_vec_t_erase__SWIG_0', + 'meminfo_vec_t_erase__SWIG_1', + 'meminfo_vec_t_extract', + 'meminfo_vec_t_find', + 'meminfo_vec_t_find__SWIG_0', + 'meminfo_vec_t_find__SWIG_1', + 'meminfo_vec_t_grow', + 'meminfo_vec_t_has', + 'meminfo_vec_t_inject', + 'meminfo_vec_t_insert', + 'meminfo_vec_t_pop_back', + 'meminfo_vec_t_push_back', + 'meminfo_vec_t_push_back__SWIG_0', + 'meminfo_vec_t_push_back__SWIG_1', + 'meminfo_vec_t_qclear', + 'meminfo_vec_t_reserve', + 'meminfo_vec_t_resize', + 'meminfo_vec_t_resize__SWIG_0', + 'meminfo_vec_t_resize__SWIG_1', + 'meminfo_vec_t_size', + 'meminfo_vec_t_swap', + 'meminfo_vec_t_truncate', + 'memory_info_t___eq__', + 'memory_info_t___ne__', + 'memory_info_t_bitness_get', + 'memory_info_t_bitness_set', + 'memory_info_t_name_get', + 'memory_info_t_name_set', + 'memory_info_t_perm_get', + 'memory_info_t_perm_set', + 'memory_info_t_sbase_get', + 'memory_info_t_sbase_set', + 'memory_info_t_sclass_get', + 'memory_info_t_sclass_set', + 'memreg_info_t_ea_get', + 'memreg_info_t_ea_set', + 'memreg_info_t_get_bytes', + 'memreg_infos_t___getitem__', + 'memreg_infos_t___len__', + 'memreg_infos_t___setitem__', + 'memreg_infos_t_at', + 'memreg_infos_t_begin', + 'memreg_infos_t_begin__SWIG_0', + 'memreg_infos_t_begin__SWIG_1', + 'memreg_infos_t_capacity', + 'memreg_infos_t_clear', + 'memreg_infos_t_empty', + 'memreg_infos_t_end', + 'memreg_infos_t_end__SWIG_0', + 'memreg_infos_t_end__SWIG_1', + 'memreg_infos_t_erase', + 'memreg_infos_t_erase__SWIG_0', + 'memreg_infos_t_erase__SWIG_1', + 'memreg_infos_t_extract', + 'memreg_infos_t_grow', + 'memreg_infos_t_inject', + 'memreg_infos_t_insert', + 'memreg_infos_t_pop_back', + 'memreg_infos_t_push_back', + 'memreg_infos_t_push_back__SWIG_0', + 'memreg_infos_t_push_back__SWIG_1', + 'memreg_infos_t_qclear', + 'memreg_infos_t_reserve', + 'memreg_infos_t_resize', + 'memreg_infos_t_resize__SWIG_0', + 'memreg_infos_t_resize__SWIG_1', + 'memreg_infos_t_size', + 'memreg_infos_t_swap', + 'memreg_infos_t_truncate', + 'metadata_iterator_t_data_end', + 'metadata_iterator_t_data_get', + 'metadata_iterator_t_data_set', + 'metadata_iterator_t_key_get', + 'metadata_iterator_t_key_set', + 'metadata_iterator_t_next', + 'metadata_iterator_t_size_get', + 'metadata_iterator_t_size_set', + 'microcode_filter_t_apply', + 'microcode_filter_t_match', + 'minsn_t___dbg_get_meminfo', + 'minsn_t___dbg_get_registered_kind', + 'minsn_t___lt__', + 'minsn_t__deregister', + 'minsn_t__make_nop', + 'minsn_t__obj_id', + 'minsn_t__print', + 'minsn_t__register', + 'minsn_t_clr_assert', + 'minsn_t_clr_combinable', + 'minsn_t_clr_combined', + 'minsn_t_clr_fpinsn', + 'minsn_t_clr_ignlowsrc', + 'minsn_t_clr_multimov', + 'minsn_t_clr_noret_icall', + 'minsn_t_clr_propagatable', + 'minsn_t_clr_tailcall', + 'minsn_t_contains_call', + 'minsn_t_contains_opcode', + 'minsn_t_d_get', + 'minsn_t_d_set', + 'minsn_t_dstr', + 'minsn_t_ea_get', + 'minsn_t_ea_set', + 'minsn_t_equal_insns', + 'minsn_t_find_call', + 'minsn_t_find_ins_op', + 'minsn_t_find_num_op', + 'minsn_t_find_opcode', + 'minsn_t_find_opcode__SWIG_0', + 'minsn_t_find_opcode__SWIG_1', + 'minsn_t_for_all_insns', + 'minsn_t_for_all_ops', + 'minsn_t_get_role', + 'minsn_t_get_split_size', + 'minsn_t_has_side_effects', + 'minsn_t_iprops_get', + 'minsn_t_iprops_set', + 'minsn_t_is_after', + 'minsn_t_is_alloca', + 'minsn_t_is_assert', + 'minsn_t_is_between', + 'minsn_t_is_bswap', + 'minsn_t_is_cleaning_pop', + 'minsn_t_is_combinable', + 'minsn_t_is_combined', + 'minsn_t_is_extstx', + 'minsn_t_is_farcall', + 'minsn_t_is_fpinsn', + 'minsn_t_is_helper', + 'minsn_t_is_ignlowsrc', + 'minsn_t_is_inverted_jx', + 'minsn_t_is_like_move', + 'minsn_t_is_mbarrier', + 'minsn_t_is_memcpy', + 'minsn_t_is_memset', + 'minsn_t_is_mov', + 'minsn_t_is_multimov', + 'minsn_t_is_noret_call', + 'minsn_t_is_optional', + 'minsn_t_is_persistent', + 'minsn_t_is_propagatable', + 'minsn_t_is_readflags', + 'minsn_t_is_tailcall', + 'minsn_t_is_unknown_call', + 'minsn_t_is_wild_match', + 'minsn_t_l_get', + 'minsn_t_l_set', + 'minsn_t_lexcompare', + 'minsn_t_may_use_aliased_memory', + 'minsn_t_modifes_d', + 'minsn_t_modifies_pair_mop', + 'minsn_t_next_get', + 'minsn_t_next_set', + 'minsn_t_opcode_get', + 'minsn_t_opcode_set', + 'minsn_t_optimize_solo', + 'minsn_t_optimize_subtree', + 'minsn_t_prev_get', + 'minsn_t_prev_set', + 'minsn_t_r_get', + 'minsn_t_r_set', + 'minsn_t_set_assert', + 'minsn_t_set_cleaning_pop', + 'minsn_t_set_combinable', + 'minsn_t_set_extstx', + 'minsn_t_set_farcall', + 'minsn_t_set_fpinsn', + 'minsn_t_set_ignlowsrc', + 'minsn_t_set_inverted_jx', + 'minsn_t_set_mbarrier', + 'minsn_t_set_multimov', + 'minsn_t_set_noret_icall', + 'minsn_t_set_optional', + 'minsn_t_set_persistent', + 'minsn_t_set_split_size', + 'minsn_t_set_tailcall', + 'minsn_t_set_wild_match', + 'minsn_t_setaddr', + 'minsn_t_swap', + 'minsn_t_was_noret_icall', + 'minsn_t_was_split', + 'minsn_visitor_t_visit_minsn', + 'mlist_mop_visitor_t_changed_get', + 'mlist_mop_visitor_t_changed_set', + 'mlist_mop_visitor_t_curins_get', + 'mlist_mop_visitor_t_curins_set', + 'mlist_mop_visitor_t_list_get', + 'mlist_mop_visitor_t_list_set', + 'mlist_mop_visitor_t_topins_get', + 'mlist_mop_visitor_t_topins_set', + 'mlist_mop_visitor_t_visit_mop', + 'mlist_t___eq__', + 'mlist_t___ge__', + 'mlist_t___gt__', + 'mlist_t___le__', + 'mlist_t___lt__', + 'mlist_t___ne__', + 'mlist_t__print', + 'mlist_t_add', + 'mlist_t_add__SWIG_0', + 'mlist_t_add__SWIG_1', + 'mlist_t_add__SWIG_2', + 'mlist_t_add__SWIG_3', + 'mlist_t_addmem', + 'mlist_t_clear', + 'mlist_t_compare', + 'mlist_t_count', + 'mlist_t_dstr', + 'mlist_t_empty', + 'mlist_t_has', + 'mlist_t_has_all', + 'mlist_t_has_any', + 'mlist_t_has_common', + 'mlist_t_has_memory', + 'mlist_t_includes', + 'mlist_t_intersect', + 'mlist_t_is_subset_of', + 'mlist_t_mem_get', + 'mlist_t_mem_set', + 'mlist_t_reg_get', + 'mlist_t_reg_set', + 'mlist_t_sub', + 'mlist_t_sub__SWIG_0', + 'mlist_t_sub__SWIG_1', + 'mlist_t_sub__SWIG_2', + 'mlist_t_swap', + 'mnumber_t___eq__', + 'mnumber_t___ge__', + 'mnumber_t___gt__', + 'mnumber_t___le__', + 'mnumber_t___lt__', + 'mnumber_t___ne__', + 'mnumber_t_compare', + 'mnumber_t_org_value_get', + 'mnumber_t_org_value_set', + 'mnumber_t_update_value', + 'mnumber_t_value_get', + 'mnumber_t_value_set', + 'modify_user_lvar_info', + 'modify_user_lvars', + 'modinfo_t_base_get', + 'modinfo_t_base_set', + 'modinfo_t_name_get', + 'modinfo_t_name_set', + 'modinfo_t_rebase_to_get', + 'modinfo_t_rebase_to_set', + 'modinfo_t_size_get', + 'modinfo_t_size_set', + 'mop_addr_t_insize_get', + 'mop_addr_t_insize_set', + 'mop_addr_t_lexcompare', + 'mop_addr_t_outsize_get', + 'mop_addr_t_outsize_set', + 'mop_pair_t_hop_get', + 'mop_pair_t_hop_set', + 'mop_pair_t_lop_get', + 'mop_pair_t_lop_set', + 'mop_t___dbg_get_meminfo', + 'mop_t___dbg_get_registered_kind', + 'mop_t___eq__', + 'mop_t___lt__', + 'mop_t___ne__', + 'mop_t__deregister', + 'mop_t__get_a', + 'mop_t__get_b', + 'mop_t__get_c', + 'mop_t__get_cstr', + 'mop_t__get_d', + 'mop_t__get_f', + 'mop_t__get_fpc', + 'mop_t__get_g', + 'mop_t__get_helper', + 'mop_t__get_l', + 'mop_t__get_nnn', + 'mop_t__get_pair', + 'mop_t__get_r', + 'mop_t__get_s', + 'mop_t__get_scif', + 'mop_t__get_t', + 'mop_t__make_blkref', + 'mop_t__make_callinfo', + 'mop_t__make_cases', + 'mop_t__make_gvar', + 'mop_t__make_insn', + 'mop_t__make_lvar', + 'mop_t__make_pair', + 'mop_t__make_reg', + 'mop_t__make_reg__SWIG_0', + 'mop_t__make_reg__SWIG_1', + 'mop_t__make_stkvar', + 'mop_t__make_strlit', + 'mop_t__obj_id', + 'mop_t__print', + 'mop_t__register', + 'mop_t__set_a', + 'mop_t__set_b', + 'mop_t__set_c', + 'mop_t__set_cstr', + 'mop_t__set_d', + 'mop_t__set_f', + 'mop_t__set_fpc', + 'mop_t__set_g', + 'mop_t__set_helper', + 'mop_t__set_l', + 'mop_t__set_nnn', + 'mop_t__set_pair', + 'mop_t__set_r', + 'mop_t__set_s', + 'mop_t__set_scif', + 'mop_t__set_t', + 'mop_t_apply_ld_mcode', + 'mop_t_apply_xds', + 'mop_t_apply_xdu', + 'mop_t_assign', + 'mop_t_change_size', + 'mop_t_create_from_insn', + 'mop_t_create_from_ivlset', + 'mop_t_create_from_mlist', + 'mop_t_create_from_scattered_vdloc', + 'mop_t_create_from_vdloc', + 'mop_t_double_size', + 'mop_t_dstr', + 'mop_t_empty', + 'mop_t_equal_mops', + 'mop_t_erase', + 'mop_t_erase_but_keep_size', + 'mop_t_for_all_ops', + 'mop_t_for_all_scattered_submops', + 'mop_t_get_insn', + 'mop_t_get_insn__SWIG_0', + 'mop_t_get_insn__SWIG_1', + 'mop_t_get_stkoff', + 'mop_t_get_stkvar', + 'mop_t_has_side_effects', + 'mop_t_is01', + 'mop_t_is_arglist', + 'mop_t_is_bit_reg', + 'mop_t_is_bit_reg__SWIG_0', + 'mop_t_is_bit_reg__SWIG_1', + 'mop_t_is_cc', + 'mop_t_is_ccflags', + 'mop_t_is_constant', + 'mop_t_is_equal_to', + 'mop_t_is_extended_from', + 'mop_t_is_glbaddr', + 'mop_t_is_glbaddr__SWIG_0', + 'mop_t_is_glbaddr__SWIG_1', + 'mop_t_is_impptr_done', + 'mop_t_is_insn', + 'mop_t_is_insn__SWIG_0', + 'mop_t_is_insn__SWIG_1', + 'mop_t_is_kreg', + 'mop_t_is_mob', + 'mop_t_is_negative_constant', + 'mop_t_is_one', + 'mop_t_is_positive_constant', + 'mop_t_is_reg', + 'mop_t_is_reg__SWIG_0', + 'mop_t_is_reg__SWIG_1', + 'mop_t_is_reg__SWIG_2', + 'mop_t_is_scattered', + 'mop_t_is_sign_extended_from', + 'mop_t_is_stkaddr', + 'mop_t_is_udt', + 'mop_t_is_undef_val', + 'mop_t_is_zero', + 'mop_t_is_zero_extended_from', + 'mop_t_lexcompare', + 'mop_t_make_blkref', + 'mop_t_make_first_half', + 'mop_t_make_fpnum', + 'mop_t_make_gvar', + 'mop_t_make_helper', + 'mop_t_make_high_half', + 'mop_t_make_insn', + 'mop_t_make_low_half', + 'mop_t_make_number', + 'mop_t_make_reg', + 'mop_t_make_reg__SWIG_0', + 'mop_t_make_reg__SWIG_1', + 'mop_t_make_reg_pair', + 'mop_t_make_second_half', + 'mop_t_may_use_aliased_memory', + 'mop_t_oprops_get', + 'mop_t_oprops_set', + 'mop_t_preserve_side_effects', + 'mop_t_probably_floating', + 'mop_t_set_impptr_done', + 'mop_t_set_udt', + 'mop_t_set_undef_val', + 'mop_t_shift_mop', + 'mop_t_signed_value', + 'mop_t_size_get', + 'mop_t_size_set', + 'mop_t_swap', + 'mop_t_t_get', + 'mop_t_t_set', + 'mop_t_unsigned_value', + 'mop_t_valnum_get', + 'mop_t_valnum_set', + 'mop_t_value', + 'mop_t_zero', + 'mop_visitor_t_prune_get', + 'mop_visitor_t_prune_set', + 'mop_visitor_t_visit_mop', + 'mopvec_t___eq__', + 'mopvec_t___getitem__', + 'mopvec_t___len__', + 'mopvec_t___ne__', + 'mopvec_t___setitem__', + 'mopvec_t__del', + 'mopvec_t_add_unique', + 'mopvec_t_at', + 'mopvec_t_begin', + 'mopvec_t_begin__SWIG_0', + 'mopvec_t_begin__SWIG_1', + 'mopvec_t_capacity', + 'mopvec_t_clear', + 'mopvec_t_empty', + 'mopvec_t_end', + 'mopvec_t_end__SWIG_0', + 'mopvec_t_end__SWIG_1', + 'mopvec_t_erase', + 'mopvec_t_erase__SWIG_0', + 'mopvec_t_erase__SWIG_1', + 'mopvec_t_extract', + 'mopvec_t_find', + 'mopvec_t_find__SWIG_0', + 'mopvec_t_find__SWIG_1', + 'mopvec_t_grow', + 'mopvec_t_has', + 'mopvec_t_inject', + 'mopvec_t_insert', + 'mopvec_t_pop_back', + 'mopvec_t_push_back', + 'mopvec_t_push_back__SWIG_0', + 'mopvec_t_push_back__SWIG_1', + 'mopvec_t_qclear', + 'mopvec_t_reserve', + 'mopvec_t_resize', + 'mopvec_t_resize__SWIG_0', + 'mopvec_t_resize__SWIG_1', + 'mopvec_t_size', + 'mopvec_t_swap', + 'mopvec_t_truncate', + 'move_bpt_to_grp', + 'move_idcv', + 'move_segm', + 'move_segm_start', + 'mreg2reg', + 'msg', + 'msg_clear', + 'msg_get_lines', + 'msg_save', + 'must_mcode_close_block', + 'mutable_graph_t_belongs_get', + 'mutable_graph_t_belongs_set', + 'mutable_graph_t_calc_group_ea', + 'mutable_graph_t_change_group_visibility', + 'mutable_graph_t_clear', + 'mutable_graph_t_create_digraph_layout', + 'mutable_graph_t_create_group', + 'mutable_graph_t_del_custom_layout', + 'mutable_graph_t_delete_group', + 'mutable_graph_t_edges_get', + 'mutable_graph_t_edges_set', + 'mutable_graph_t_empty', + 'mutable_graph_t_exists', + 'mutable_graph_t_get_custom_layout', + 'mutable_graph_t_get_edge', + 'mutable_graph_t_get_first_subgraph_node', + 'mutable_graph_t_get_graph_groups', + 'mutable_graph_t_get_next_subgraph_node', + 'mutable_graph_t_get_node_group', + 'mutable_graph_t_get_node_representative', + 'mutable_graph_t_gid_get', + 'mutable_graph_t_gid_set', + 'mutable_graph_t_is_collapsed_node', + 'mutable_graph_t_is_deleted_node', + 'mutable_graph_t_is_displayable_node', + 'mutable_graph_t_is_dot_node', + 'mutable_graph_t_is_group_node', + 'mutable_graph_t_is_simple_node', + 'mutable_graph_t_is_subgraph_node', + 'mutable_graph_t_is_uncollapsed_node', + 'mutable_graph_t_is_user_graph', + 'mutable_graph_t_is_visible_node', + 'mutable_graph_t_node_flags_get', + 'mutable_graph_t_node_flags_set', + 'mutable_graph_t_node_qty', + 'mutable_graph_t_nodes_get', + 'mutable_graph_t_nodes_set', + 'mutable_graph_t_npred', + 'mutable_graph_t_nrect', + 'mutable_graph_t_nrect__SWIG_0', + 'mutable_graph_t_nrect__SWIG_1', + 'mutable_graph_t_nsucc', + 'mutable_graph_t_org_preds_get', + 'mutable_graph_t_org_preds_set', + 'mutable_graph_t_org_succs_get', + 'mutable_graph_t_org_succs_set', + 'mutable_graph_t_pred', + 'mutable_graph_t_preds_get', + 'mutable_graph_t_preds_set', + 'mutable_graph_t_predset', + 'mutable_graph_t_reset', + 'mutable_graph_t_set_custom_layout', + 'mutable_graph_t_set_deleted_node', + 'mutable_graph_t_set_edge', + 'mutable_graph_t_set_graph_groups', + 'mutable_graph_t_set_node_group', + 'mutable_graph_t_size', + 'mutable_graph_t_succ', + 'mutable_graph_t_succs_get', + 'mutable_graph_t_succs_set', + 'mutable_graph_t_succset', + 'nbits', + 'negate_mcode_relation', + 'negated_relation', + 'netnode___eq__', + 'netnode___eq____SWIG_0', + 'netnode___eq____SWIG_1', + 'netnode___ne__', + 'netnode___ne____SWIG_0', + 'netnode___ne____SWIG_1', + 'netnode_altdel', + 'netnode_altdel__SWIG_0', + 'netnode_altdel__SWIG_1', + 'netnode_altdel_all', + 'netnode_altdel_ea', + 'netnode_altdel_idx8', + 'netnode_altfirst', + 'netnode_altfirst_idx8', + 'netnode_altlast', + 'netnode_altlast_idx8', + 'netnode_altnext', + 'netnode_altnext_idx8', + 'netnode_altprev', + 'netnode_altprev_idx8', + 'netnode_altset', + 'netnode_altset_ea', + 'netnode_altset_idx8', + 'netnode_altshift', + 'netnode_altval', + 'netnode_altval_ea', + 'netnode_altval_idx8', + 'netnode_blobsize', + 'netnode_blobsize_ea', + 'netnode_chardel', + 'netnode_chardel_ea', + 'netnode_chardel_idx8', + 'netnode_charfirst', + 'netnode_charfirst_idx8', + 'netnode_charlast', + 'netnode_charlast_idx8', + 'netnode_charnext', + 'netnode_charnext_idx8', + 'netnode_charprev', + 'netnode_charprev_idx8', + 'netnode_charset', + 'netnode_charset_ea', + 'netnode_charset_idx8', + 'netnode_charshift', + 'netnode_charval', + 'netnode_charval_ea', + 'netnode_charval_idx8', + 'netnode_copyto', + 'netnode_create', + 'netnode_create__SWIG_0', + 'netnode_create__SWIG_1', + 'netnode_delblob', + 'netnode_delblob_ea', + 'netnode_delvalue', + 'netnode_eadel', + 'netnode_eadel_idx8', + 'netnode_eaget', + 'netnode_eaget_idx', + 'netnode_eaget_idx8', + 'netnode_easet', + 'netnode_easet_idx', + 'netnode_easet_idx8', + 'netnode_end', + 'netnode_get_name', + 'netnode_getblob', + 'netnode_getblob_ea', + 'netnode_getclob', + 'netnode_hashdel', + 'netnode_hashdel_all', + 'netnode_hashfirst', + 'netnode_hashlast', + 'netnode_hashnext', + 'netnode_hashprev', + 'netnode_hashset', + 'netnode_hashset_buf', + 'netnode_hashset_idx', + 'netnode_hashstr', + 'netnode_hashstr_buf', + 'netnode_hashval', + 'netnode_hashval_long', + 'netnode_index', + 'netnode_kill', + 'netnode_long_value', + 'netnode_lower_bound', + 'netnode_lower_bound_ea', + 'netnode_lower_bound_idx8', + 'netnode_moveto', + 'netnode_next', + 'netnode_prev', + 'netnode_rename', + 'netnode_set', + 'netnode_set_long', + 'netnode_setblob', + 'netnode_setblob_ea', + 'netnode_start', + 'netnode_supdel', + 'netnode_supdel__SWIG_0', + 'netnode_supdel__SWIG_1', + 'netnode_supdel_all', + 'netnode_supdel_ea', + 'netnode_supdel_idx8', + 'netnode_supdel_range', + 'netnode_supdel_range_idx8', + 'netnode_supfirst', + 'netnode_supfirst_idx8', + 'netnode_suplast', + 'netnode_suplast_idx8', + 'netnode_supnext', + 'netnode_supnext_idx8', + 'netnode_supprev', + 'netnode_supprev_idx8', + 'netnode_supset', + 'netnode_supset__SWIG_0', + 'netnode_supset__SWIG_1', + 'netnode_supset_ea', + 'netnode_supset_ea__SWIG_0', + 'netnode_supset_ea__SWIG_1', + 'netnode_supset_idx8', + 'netnode_supshift', + 'netnode_supstr', + 'netnode_supstr_ea', + 'netnode_supstr_idx8', + 'netnode_supval', + 'netnode_supval_ea', + 'netnode_supval_idx8', + 'netnode_valobj', + 'netnode_valstr', + 'netnode_value_exists', + 'new_DBG_Hooks', + 'new_Hexrays_Hooks', + 'new_IDB_Hooks', + 'new_IDP_Hooks', + 'new_TPointDouble', + 'new_TPointDouble__SWIG_0', + 'new_TPointDouble__SWIG_1', + 'new_TPointDouble__SWIG_2', + 'new_UI_Hooks', + 'new_View_Hooks', + 'new___qmutex_t', + 'new___qsemaphore_t', + 'new___qthread_t', + 'new___qtimer_t', + 'new_action_ctx_base_t', + 'new_action_desc_t', + 'new_addon_info_t', + 'new_aloc_visitor_t', + 'new_argloc_t', + 'new_argloc_t__SWIG_0', + 'new_argloc_t__SWIG_1', + 'new_argpart_t', + 'new_argpart_t__SWIG_0', + 'new_argpart_t__SWIG_1', + 'new_argpartvec_t', + 'new_argpartvec_t__SWIG_0', + 'new_argpartvec_t__SWIG_1', + 'new_array_of_bitsets', + 'new_array_of_bitsets__SWIG_0', + 'new_array_of_bitsets__SWIG_1', + 'new_array_of_ivlsets', + 'new_array_of_ivlsets__SWIG_0', + 'new_array_of_ivlsets__SWIG_1', + 'new_array_of_rangesets', + 'new_array_of_rangesets__SWIG_0', + 'new_array_of_rangesets__SWIG_1', + 'new_array_parameters_t', + 'new_array_type_data_t', + 'new_asm_t', + 'new_auto_display_t', + 'new_bgcolors_t', + 'new_bit_bound_t', + 'new_bitfield_type_data_t', + 'new_bitset_t', + 'new_bitset_t__SWIG_0', + 'new_bitset_t__SWIG_1', + 'new_block_chains_iterator_t', + 'new_block_chains_t', + 'new_block_chains_vec_t', + 'new_block_chains_vec_t__SWIG_0', + 'new_block_chains_vec_t__SWIG_1', + 'new_boolvec_t', + 'new_boolvec_t__SWIG_0', + 'new_boolvec_t__SWIG_1', + 'new_boundaries_iterator_t', + 'new_boundaries_t', + 'new_bpt_location_t', + 'new_bpt_t', + 'new_bpt_vec_t', + 'new_bpt_vec_t__SWIG_0', + 'new_bpt_vec_t__SWIG_1', + 'new_bptaddr_t', + 'new_call_stack_info_t', + 'new_call_stack_t', + 'new_call_stack_t__SWIG_0', + 'new_call_stack_t__SWIG_1', + 'new_callregs_t', + 'new_callregs_t__SWIG_0', + 'new_callregs_t__SWIG_1', + 'new_carg_t', + 'new_carglist_t', + 'new_carglist_t__SWIG_0', + 'new_carglist_t__SWIG_1', + 'new_cases_and_targets_t', + 'new_casevec_t', + 'new_casevec_t__SWIG_0', + 'new_casevec_t__SWIG_1', + 'new_casm_t', + 'new_casm_t__SWIG_0', + 'new_casm_t__SWIG_1', + 'new_catch_t', + 'new_catchvec_t', + 'new_catchvec_t__SWIG_0', + 'new_catchvec_t__SWIG_1', + 'new_cblock_t', + 'new_ccase_t', + 'new_ccases_t', + 'new_cdg_insn_iterator_t', + 'new_cdg_insn_iterator_t__SWIG_0', + 'new_cdg_insn_iterator_t__SWIG_1', + 'new_cdo_t', + 'new_ceinsn_t', + 'new_cexpr_t', + 'new_cexpr_t__SWIG_0', + 'new_cexpr_t__SWIG_1', + 'new_cexpr_t__SWIG_2', + 'new_cexpr_t__SWIG_3', + 'new_cexpr_t__SWIG_4', + 'new_cfor_t', + 'new_cfunc_parentee_t', + 'new_cfuncptr_t', + 'new_cfuncptr_t__SWIG_0', + 'new_cfuncptr_t__SWIG_1', + 'new_cgoto_t', + 'new_chain_keeper_t', + 'new_chain_t', + 'new_chain_t__SWIG_0', + 'new_chain_t__SWIG_1', + 'new_chain_t__SWIG_2', + 'new_chain_visitor_t', + 'new_channel_redir_t', + 'new_chooser_item_attrs_t', + 'new_cif_t', + 'new_cif_t__SWIG_0', + 'new_cif_t__SWIG_1', + 'new_cinsn_t', + 'new_cinsn_t__SWIG_0', + 'new_cinsn_t__SWIG_1', + 'new_cinsnptrvec_t', + 'new_cinsnptrvec_t__SWIG_0', + 'new_cinsnptrvec_t__SWIG_1', + 'new_citem_cmt_t', + 'new_citem_cmt_t__SWIG_0', + 'new_citem_cmt_t__SWIG_1', + 'new_citem_locator_t', + 'new_citem_locator_t__SWIG_0', + 'new_citem_locator_t__SWIG_1', + 'new_citem_t', + 'new_citem_t__SWIG_0', + 'new_citem_t__SWIG_1', + 'new_cloop_t', + 'new_cloop_t__SWIG_0', + 'new_cloop_t__SWIG_1', + 'new_cloop_t__SWIG_2', + 'new_cnumber_t', + 'new_codegen_t', + 'new_compiler_info_t', + 'new_const_aloc_visitor_t', + 'new_creturn_t', + 'new_cswitch_t', + 'new_ctext_position_t', + 'new_ctree_anchor_t', + 'new_ctree_item_t', + 'new_ctree_items_t', + 'new_ctree_items_t__SWIG_0', + 'new_ctree_items_t__SWIG_1', + 'new_ctree_parentee_t', + 'new_ctree_visitor_t', + 'new_custom_data_type_ids_fids_array', + 'new_custom_data_type_ids_t', + 'new_cwhile_t', + 'new_data_format_t', + 'new_data_type_t', + 'new_debapp_attrs_t', + 'new_debug_event_t', + 'new_debug_event_t__SWIG_0', + 'new_debug_event_t__SWIG_1', + 'new_disasm_line_t', + 'new_disasm_line_t__SWIG_0', + 'new_disasm_line_t__SWIG_1', + 'new_disasm_text_t', + 'new_disasm_text_t__SWIG_0', + 'new_disasm_text_t__SWIG_1', + 'new_ea_array', + 'new_ea_name_t', + 'new_ea_name_t__SWIG_0', + 'new_ea_name_t__SWIG_1', + 'new_ea_name_vec_t', + 'new_ea_name_vec_t__SWIG_0', + 'new_ea_name_vec_t__SWIG_1', + 'new_ea_pointer', + 'new_eamap_iterator_t', + 'new_eamap_t', + 'new_edge_info_t', + 'new_edge_layout_point_t', + 'new_edge_layout_point_t__SWIG_0', + 'new_edge_layout_point_t__SWIG_1', + 'new_edge_layout_point_t__SWIG_2', + 'new_edge_segment_t', + 'new_edge_t', + 'new_edge_t__SWIG_0', + 'new_edge_t__SWIG_1', + 'new_enum_const_t', + 'new_enum_member_t', + 'new_enum_member_vec_t', + 'new_enum_member_vec_t__SWIG_0', + 'new_enum_member_vec_t__SWIG_1', + 'new_enum_member_visitor_t', + 'new_enum_type_data_t', + 'new_eval_ctx_t', + 'new_exception_info_t', + 'new_exception_info_t__SWIG_0', + 'new_exception_info_t__SWIG_1', + 'new_excinfo_t', + 'new_excvec_t', + 'new_excvec_t__SWIG_0', + 'new_excvec_t__SWIG_1', + 'new_extra_cmt_t', + 'new_extra_cmts_t', + 'new_extra_cmts_t__SWIG_0', + 'new_extra_cmts_t__SWIG_1', + 'new_fixup_data_t', + 'new_fixup_data_t__SWIG_0', + 'new_fixup_data_t__SWIG_1', + 'new_fixup_info_t', + 'new_fnum_array', + 'new_fnumber_t', + 'new_frame_desc_t', + 'new_frame_mem_t', + 'new_frame_mems_t', + 'new_frame_mems_t__SWIG_0', + 'new_frame_mems_t__SWIG_1', + 'new_func_info_and_frequency_t', + 'new_func_info_and_frequency_vec_t', + 'new_func_info_and_frequency_vec_t__SWIG_0', + 'new_func_info_and_frequency_vec_t__SWIG_1', + 'new_func_info_and_pattern_t', + 'new_func_info_and_pattern_vec_t', + 'new_func_info_and_pattern_vec_t__SWIG_0', + 'new_func_info_and_pattern_vec_t__SWIG_1', + 'new_func_info_base_t', + 'new_func_info_pattern_and_frequency_t', + 'new_func_info_pattern_and_frequency_vec_t', + 'new_func_info_pattern_and_frequency_vec_t__SWIG_0', + 'new_func_info_pattern_and_frequency_vec_t__SWIG_1', + 'new_func_info_t', + 'new_func_info_vec_t', + 'new_func_info_vec_t__SWIG_0', + 'new_func_info_vec_t__SWIG_1', + 'new_func_item_iterator_t', + 'new_func_item_iterator_t__SWIG_0', + 'new_func_item_iterator_t__SWIG_1', + 'new_func_md_diff_handler_t', + 'new_func_parent_iterator_t', + 'new_func_parent_iterator_t__SWIG_0', + 'new_func_parent_iterator_t__SWIG_1', + 'new_func_t', + 'new_func_tail_iterator_t', + 'new_func_tail_iterator_t__SWIG_0', + 'new_func_tail_iterator_t__SWIG_1', + 'new_func_type_data_t', + 'new_funcarg_t', + 'new_funcargvec_t', + 'new_funcargvec_t__SWIG_0', + 'new_funcargvec_t__SWIG_1', + 'new_gco_info_t', + 'new_graph_chains_t', + 'new_graph_item_t', + 'new_graph_location_info_t', + 'new_graph_node_visitor_t', + 'new_graph_path_visitor_t', + 'new_graph_visitor_t', + 'new_group_crinfo_t', + 'new_hexrays_failure_t', + 'new_hexrays_failure_t__SWIG_0', + 'new_hexrays_failure_t__SWIG_1', + 'new_hexrays_failure_t__SWIG_2', + 'new_hexwarn_t', + 'new_hexwarns_t', + 'new_hexwarns_t__SWIG_0', + 'new_hexwarns_t__SWIG_1', + 'new_hidden_range_t', + 'new_highlighter_cbs_t', + 'new_history_entries_helper_t', + 'new_history_item_t', + 'new_history_item_t__SWIG_0', + 'new_history_item_t__SWIG_1', + 'new_history_t', + 'new_ida_lowertype_helper_t', + 'new_idc_global_t', + 'new_idc_global_t__SWIG_0', + 'new_idc_global_t__SWIG_1', + 'new_idc_value_t', + 'new_idc_value_t__SWIG_0', + 'new_idc_value_t__SWIG_1', + 'new_idc_value_t__SWIG_2', + 'new_idc_values_t', + 'new_idc_values_t__SWIG_0', + 'new_idc_values_t__SWIG_1', + 'new_idp_desc_t', + 'new_idp_name_t', + 'new_input_file_t', + 'new_insn_cmt_t', + 'new_insn_cmts_t', + 'new_insn_cmts_t__SWIG_0', + 'new_insn_cmts_t__SWIG_1', + 'new_insn_ops_repr_t', + 'new_insn_ops_reprs_t', + 'new_insn_ops_reprs_t__SWIG_0', + 'new_insn_ops_reprs_t__SWIG_1', + 'new_insn_site_t', + 'new_insn_t', + 'new_instant_dbgopts_t', + 'new_int_pointer', + 'new_interval_t', + 'new_interval_t__SWIG_0', + 'new_interval_t__SWIG_1', + 'new_interval_t__SWIG_2', + 'new_intvec_t', + 'new_intvec_t__SWIG_0', + 'new_intvec_t__SWIG_1', + 'new_ivl_t', + 'new_ivl_with_name_t', + 'new_ivlset_t', + 'new_ivlset_t__SWIG_0', + 'new_ivlset_t__SWIG_1', + 'new_llabel_t', + 'new_loader_input_t', + 'new_loader_t', + 'new_lochist_entry_t', + 'new_lochist_entry_t__SWIG_0', + 'new_lochist_entry_t__SWIG_1', + 'new_lochist_entry_t__SWIG_2', + 'new_lochist_t', + 'new_lock_func', + 'new_lock_segment', + 'new_longlongvec_t', + 'new_longlongvec_t__SWIG_0', + 'new_longlongvec_t__SWIG_1', + 'new_lumina_op_res_vec_t', + 'new_lumina_op_res_vec_t__SWIG_0', + 'new_lumina_op_res_vec_t__SWIG_1', + 'new_lvar_locator_t', + 'new_lvar_locator_t__SWIG_0', + 'new_lvar_locator_t__SWIG_1', + 'new_lvar_mapping_iterator_t', + 'new_lvar_mapping_t', + 'new_lvar_ref_t', + 'new_lvar_ref_t__SWIG_0', + 'new_lvar_ref_t__SWIG_1', + 'new_lvar_saved_info_t', + 'new_lvar_saved_infos_t', + 'new_lvar_saved_infos_t__SWIG_0', + 'new_lvar_saved_infos_t__SWIG_1', + 'new_lvar_uservec_t', + 'new_lvars_t', + 'new_mba_range_iterator_t', + 'new_mba_ranges_t', + 'new_mba_ranges_t__SWIG_0', + 'new_mba_ranges_t__SWIG_1', + 'new_mcallarg_t', + 'new_mcallarg_t__SWIG_0', + 'new_mcallarg_t__SWIG_1', + 'new_mcallargs_t', + 'new_mcallargs_t__SWIG_0', + 'new_mcallargs_t__SWIG_1', + 'new_mcallinfo_t', + 'new_mcases_t', + 'new_md_type_parts_t', + 'new_member_t', + 'new_meminfo_vec_t', + 'new_meminfo_vec_t__SWIG_0', + 'new_meminfo_vec_t__SWIG_1', + 'new_memory_info_t', + 'new_memreg_info_t', + 'new_memreg_infos_t', + 'new_memreg_infos_t__SWIG_0', + 'new_memreg_infos_t__SWIG_1', + 'new_metadata_iterator_t', + 'new_microcode_filter_t', + 'new_minsn_t', + 'new_minsn_t__SWIG_0', + 'new_minsn_t__SWIG_1', + 'new_minsn_visitor_t', + 'new_mlist_mop_visitor_t', + 'new_mlist_t', + 'new_mlist_t__SWIG_0', + 'new_mlist_t__SWIG_1', + 'new_mlist_t__SWIG_2', + 'new_mnumber_t', + 'new_modinfo_t', + 'new_mop_addr_t', + 'new_mop_addr_t__SWIG_0', + 'new_mop_addr_t__SWIG_1', + 'new_mop_addr_t__SWIG_2', + 'new_mop_pair_t', + 'new_mop_t', + 'new_mop_t__SWIG_0', + 'new_mop_t__SWIG_1', + 'new_mop_t__SWIG_2', + 'new_mop_visitor_t', + 'new_mopvec_t', + 'new_mopvec_t__SWIG_0', + 'new_mopvec_t__SWIG_1', + 'new_netnode', + 'new_netnode__SWIG_0', + 'new_netnode__SWIG_1', + 'new_netnode__SWIG_2', + 'new_node_info_t', + 'new_node_iterator', + 'new_node_layout_t', + 'new_node_layout_t__SWIG_0', + 'new_node_layout_t__SWIG_1', + 'new_node_ordering_t', + 'new_number_format_t', + 'new_op_parent_info_t', + 'new_op_t', + 'new_operand_locator_t', + 'new_operands_array', + 'new_operator_info_t', + 'new_opinfo_t', + 'new_oprepr_t', + 'new_optblock_t', + 'new_optinsn_t', + 'new_packet', + 'new_pattern_id_t', + 'new_pkt_clean_db_t', + 'new_pkt_debugctl_t', + 'new_pkt_dump_md_result_t', + 'new_pkt_dump_md_t', + 'new_pkt_get_pop_result_t', + 'new_pkt_get_pop_t', + 'new_pkt_helo_t', + 'new_pkt_pull_md_result_t', + 'new_pkt_pull_md_t', + 'new_pkt_push_md_result_t', + 'new_pkt_push_md_t', + 'new_pkt_rpc_fail_t', + 'new_pkt_rpc_notify_t', + 'new_pkt_rpc_ok_t', + 'new_plugin_info_t', + 'new_point_t', + 'new_point_t__SWIG_0', + 'new_point_t__SWIG_1', + 'new_pointseq_t', + 'new_pointvec_t', + 'new_pointvec_t__SWIG_0', + 'new_pointvec_t__SWIG_1', + 'new_pop_fun_t', + 'new_predicate_t', + 'new_printop_t', + 'new_process_info_t', + 'new_procinfo_vec_t', + 'new_procinfo_vec_t__SWIG_0', + 'new_procinfo_vec_t__SWIG_1', + 'new_ptr_type_data_t', + 'new_push_md_opts_t', + 'new_push_md_result_t', + 'new_qbasic_block_t', + 'new_qfile_t', + 'new_qfile_t__SWIG_0', + 'new_qfile_t__SWIG_1', + 'new_qflow_chart_t', + 'new_qflow_chart_t__SWIG_0', + 'new_qflow_chart_t__SWIG_1', + 'new_qlist_cinsn_t', + 'new_qlist_cinsn_t__SWIG_0', + 'new_qlist_cinsn_t__SWIG_1', + 'new_qlist_cinsn_t_iterator', + 'new_qmutex_locker_t', + 'new_qstring_printer_t', + 'new_qvector_carg_t', + 'new_qvector_carg_t__SWIG_0', + 'new_qvector_carg_t__SWIG_1', + 'new_qvector_ccase_t', + 'new_qvector_ccase_t__SWIG_0', + 'new_qvector_ccase_t__SWIG_1', + 'new_qvector_history_t', + 'new_qvector_history_t__SWIG_0', + 'new_qvector_history_t__SWIG_1', + 'new_qvector_lvar_t', + 'new_qvector_lvar_t__SWIG_0', + 'new_qvector_lvar_t__SWIG_1', + 'new_qvector_snapshotvec_t', + 'new_qvector_snapshotvec_t__SWIG_0', + 'new_qvector_snapshotvec_t__SWIG_1', + 'new_range_array', + 'new_range_t', + 'new_range_t__SWIG_0', + 'new_range_t__SWIG_1', + 'new_rangeset_t', + 'new_rangeset_t__SWIG_0', + 'new_rangeset_t__SWIG_1', + 'new_rangeset_t__SWIG_2', + 'new_rangevec_base_t', + 'new_rangevec_base_t__SWIG_0', + 'new_rangevec_base_t__SWIG_1', + 'new_rangevec_t', + 'new_rect_t', + 'new_rect_t__SWIG_0', + 'new_rect_t__SWIG_1', + 'new_rect_t__SWIG_2', + 'new_refinfo_t', + 'new_reg_info_t', + 'new_regarg_t', + 'new_reginfovec_t', + 'new_reginfovec_t__SWIG_0', + 'new_reginfovec_t__SWIG_1', + 'new_register_info_t', + 'new_regobj_t', + 'new_regobjs_t', + 'new_regobjvec_t', + 'new_regobjvec_t__SWIG_0', + 'new_regobjvec_t__SWIG_1', + 'new_regval_t', + 'new_regval_t__SWIG_0', + 'new_regval_t__SWIG_1', + 'new_regvar_array', + 'new_regvar_t', + 'new_renderer_info_pos_t', + 'new_renderer_info_t', + 'new_renderer_pos_info_t', + 'new_rlist_t', + 'new_rlist_t__SWIG_0', + 'new_rlist_t__SWIG_1', + 'new_rlist_t__SWIG_2', + 'new_row_info_t', + 'new_rrel_t', + 'new_scattered_aloc_t', + 'new_scattered_segm_t', + 'new_scif_t', + 'new_scif_visitor_t', + 'new_screen_graph_selection_base_t', + 'new_screen_graph_selection_base_t__SWIG_0', + 'new_screen_graph_selection_base_t__SWIG_1', + 'new_screen_graph_selection_t', + 'new_segm_move_info_t', + 'new_segm_move_info_vec_t', + 'new_segm_move_info_vec_t__SWIG_0', + 'new_segm_move_info_vec_t__SWIG_1', + 'new_segm_move_infos_t', + 'new_segment_t', + 'new_seh_t', + 'new_sel_array', + 'new_sel_pointer', + 'new_selection_item_t', + 'new_selection_item_t__SWIG_0', + 'new_selection_item_t__SWIG_1', + 'new_selection_item_t__SWIG_2', + 'new_selection_item_t__SWIG_3', + 'new_serialized_tinfo', + 'new_simd_info_t', + 'new_simpleline_t', + 'new_simpleline_t__SWIG_0', + 'new_simpleline_t__SWIG_1', + 'new_simpleline_t__SWIG_2', + 'new_sizevec_t', + 'new_sizevec_t__SWIG_0', + 'new_sizevec_t__SWIG_1', + 'new_skipped_func_t', + 'new_skipped_funcs_t', + 'new_skipped_funcs_t__SWIG_0', + 'new_skipped_funcs_t__SWIG_1', + 'new_snapshot_t', + 'new_sreg_range_t', + 'new_stkpnt_array', + 'new_stkpnt_t', + 'new_stkpnts_t', + 'new_stkvar_ref_t', + 'new_strarray_t', + 'new_string_info_t', + 'new_string_info_t__SWIG_0', + 'new_string_info_t__SWIG_1', + 'new_strpath_ids_array', + 'new_strpath_t', + 'new_struct_field_visitor_t', + 'new_strvec_t', + 'new_strvec_t__SWIG_0', + 'new_strvec_t__SWIG_1', + 'new_strwinsetup_t', + 'new_sval_pointer', + 'new_switch_info_t', + 'new_sync_source_t', + 'new_sync_source_t__SWIG_0', + 'new_sync_source_t__SWIG_1', + 'new_tev_info_reg_t', + 'new_tev_info_t', + 'new_tev_reg_value_t', + 'new_tev_reg_values_t', + 'new_tev_reg_values_t__SWIG_0', + 'new_tev_reg_values_t__SWIG_1', + 'new_tevinforeg_vec_t', + 'new_tevinforeg_vec_t__SWIG_0', + 'new_tevinforeg_vec_t__SWIG_1', + 'new_text_sink_t', + 'new_thread_name_t', + 'new_tid_array', + 'new_til', + 'new_til_symbol_t', + 'new_til_t', + 'new_tinfo_t', + 'new_tinfo_t__SWIG_0', + 'new_tinfo_t__SWIG_1', + 'new_tinfo_t__SWIG_2', + 'new_tinfo_visitor_t', + 'new_treeloc_t', + 'new_try_handler_t', + 'new_tryblk_t', + 'new_tryblk_t__SWIG_0', + 'new_tryblk_t__SWIG_1', + 'new_tryblks_t', + 'new_tryblks_t__SWIG_0', + 'new_tryblks_t__SWIG_1', + 'new_twinpos_t', + 'new_twinpos_t__SWIG_0', + 'new_twinpos_t__SWIG_1', + 'new_twinpos_t__SWIG_2', + 'new_type_attr_t', + 'new_type_attrs_t', + 'new_type_attrs_t__SWIG_0', + 'new_type_attrs_t__SWIG_1', + 'new_type_mods_t', + 'new_typedef_type_data_t', + 'new_typedef_type_data_t__SWIG_0', + 'new_typedef_type_data_t__SWIG_1', + 'new_uchar_array', + 'new_udc_filter_t', + 'new_udcall_map_iterator_t', + 'new_udcall_t', + 'new_udt_member_t', + 'new_udt_type_data_t', + 'new_udtmembervec_t', + 'new_udtmembervec_t__SWIG_0', + 'new_udtmembervec_t__SWIG_1', + 'new_ui_requests_t', + 'new_ui_stroff_applicator_t', + 'new_ui_stroff_op_t', + 'new_ui_stroff_ops_t', + 'new_ui_stroff_ops_t__SWIG_0', + 'new_ui_stroff_ops_t__SWIG_1', + 'new_uintvec_t', + 'new_uintvec_t__SWIG_0', + 'new_uintvec_t__SWIG_1', + 'new_ulonglongvec_t', + 'new_ulonglongvec_t__SWIG_0', + 'new_ulonglongvec_t__SWIG_1', + 'new_user_cmts_iterator_t', + 'new_user_cmts_t', + 'new_user_identification_t', + 'new_user_iflags_iterator_t', + 'new_user_iflags_t', + 'new_user_labels_iterator_t', + 'new_user_labels_t', + 'new_user_lvar_modifier_t', + 'new_user_numforms_iterator_t', + 'new_user_numforms_t', + 'new_user_stkpnt_t', + 'new_user_stkpnts_t', + 'new_user_stkpnts_t__SWIG_0', + 'new_user_stkpnts_t__SWIG_1', + 'new_user_unions_iterator_t', + 'new_user_unions_t', + 'new_uval_array', + 'new_uval_ivl_ivlset_t', + 'new_uval_ivl_ivlset_t__SWIG_0', + 'new_uval_ivl_ivlset_t__SWIG_1', + 'new_uval_ivl_t', + 'new_uval_ivl_t__SWIG_1', + 'new_valrng_t', + 'new_valrng_t__SWIG_0', + 'new_valrng_t__SWIG_1', + 'new_valstr_t', + 'new_valstrs_t', + 'new_valstrvec_t', + 'new_valstrvec_t__SWIG_0', + 'new_valstrvec_t__SWIG_1', + 'new_var_ref_t', + 'new_vc_printer_t', + 'new_vd_failure_t', + 'new_vd_failure_t__SWIG_0', + 'new_vd_failure_t__SWIG_1', + 'new_vd_failure_t__SWIG_2', + 'new_vd_failure_t__SWIG_3', + 'new_vd_interr_t', + 'new_vd_printer_t', + 'new_vdloc_t', + 'new_view_mouse_event_location_t', + 'new_view_mouse_event_t', + 'new_vivl_t', + 'new_vivl_t__SWIG_0', + 'new_vivl_t__SWIG_1', + 'new_vivl_t__SWIG_2', + 'new_voff_t', + 'new_voff_t__SWIG_0', + 'new_voff_t__SWIG_1', + 'new_voff_t__SWIG_2', + 'new_xrefblk_t', + 'new_xreflist_entry_t', + 'new_xreflist_t', + 'new_xreflist_t__SWIG_0', + 'new_xreflist_t__SWIG_1', + 'next_addr', + 'next_chunk', + 'next_head', + 'next_idcv_attr', + 'next_inited', + 'next_named_type', + 'next_not_tail', + 'next_that', + 'next_unknown', + 'node2ea', + 'node_info_t_bg_color_get', + 'node_info_t_bg_color_set', + 'node_info_t_ea_get', + 'node_info_t_ea_set', + 'node_info_t_flags_get', + 'node_info_t_flags_set', + 'node_info_t_frame_color_get', + 'node_info_t_frame_color_set', + 'node_info_t_get_flags_for_valid', + 'node_info_t_text_get', + 'node_info_t_text_set', + 'node_info_t_valid_bg_color', + 'node_info_t_valid_ea', + 'node_info_t_valid_flags', + 'node_info_t_valid_frame_color', + 'node_info_t_valid_text', + 'node_iterator___eq__', + 'node_iterator___ne__', + 'node_iterator___ref__', + 'node_layout_t___eq__', + 'node_layout_t___getitem__', + 'node_layout_t___len__', + 'node_layout_t___ne__', + 'node_layout_t___setitem__', + 'node_layout_t__del', + 'node_layout_t_add_unique', + 'node_layout_t_at', + 'node_layout_t_begin', + 'node_layout_t_begin__SWIG_0', + 'node_layout_t_begin__SWIG_1', + 'node_layout_t_capacity', + 'node_layout_t_clear', + 'node_layout_t_empty', + 'node_layout_t_end', + 'node_layout_t_end__SWIG_0', + 'node_layout_t_end__SWIG_1', + 'node_layout_t_erase', + 'node_layout_t_erase__SWIG_0', + 'node_layout_t_erase__SWIG_1', + 'node_layout_t_extract', + 'node_layout_t_find', + 'node_layout_t_find__SWIG_0', + 'node_layout_t_find__SWIG_1', + 'node_layout_t_grow', + 'node_layout_t_has', + 'node_layout_t_inject', + 'node_layout_t_insert', + 'node_layout_t_pop_back', + 'node_layout_t_push_back', + 'node_layout_t_push_back__SWIG_0', + 'node_layout_t_push_back__SWIG_1', + 'node_layout_t_qclear', + 'node_layout_t_reserve', + 'node_layout_t_resize', + 'node_layout_t_resize__SWIG_0', + 'node_layout_t_resize__SWIG_1', + 'node_layout_t_size', + 'node_layout_t_swap', + 'node_layout_t_truncate', + 'node_ordering_t_clear', + 'node_ordering_t_node', + 'node_ordering_t_resize', + 'node_ordering_t_set', + 'node_ordering_t_size', + 'nomem', + 'nomem__varargs__', + 'num_flag', + 'number_format_t_flags_get', + 'number_format_t_flags_set', + 'number_format_t_get_radix', + 'number_format_t_is_char', + 'number_format_t_is_dec', + 'number_format_t_is_enum', + 'number_format_t_is_fixed', + 'number_format_t_is_hex', + 'number_format_t_is_numop', + 'number_format_t_is_oct', + 'number_format_t_is_stroff', + 'number_format_t_needs_to_be_inverted', + 'number_format_t_opnum_get', + 'number_format_t_opnum_set', + 'number_format_t_org_nbytes_get', + 'number_format_t_org_nbytes_set', + 'number_format_t_props_get', + 'number_format_t_props_set', + 'number_format_t_serial_get', + 'number_format_t_serial_set', + 'number_format_t_type_name_get', + 'number_format_t_type_name_set', + 'oct_flag', + 'off_flag', + 'op_adds_xrefs', + 'op_bin', + 'op_chr', + 'op_custfmt', + 'op_dec', + 'op_enum', + 'op_flt', + 'op_hex', + 'op_num', + 'op_oct', + 'op_offset', + 'op_offset_ex', + 'op_parent_info_t_blk_get', + 'op_parent_info_t_blk_set', + 'op_parent_info_t_curins_get', + 'op_parent_info_t_curins_set', + 'op_parent_info_t_mba_get', + 'op_parent_info_t_mba_set', + 'op_parent_info_t_topins_get', + 'op_parent_info_t_topins_set', + 'op_plain_offset', + 'op_seg', + 'op_stkvar', + 'op_stroff', + 'op_t___get_addr__', + 'op_t___get_reg_phrase__', + 'op_t___get_specval__', + 'op_t___get_value__', + 'op_t___set_addr__', + 'op_t___set_reg_phrase__', + 'op_t___set_specval__', + 'op_t___set_value__', + 'op_t__from_ptrval__', + 'op_t_assign', + 'op_t_clr_shown', + 'op_t_dtype_get', + 'op_t_dtype_set', + 'op_t_flags_get', + 'op_t_flags_set', + 'op_t_is_imm', + 'op_t_is_reg', + 'op_t_n_get', + 'op_t_n_set', + 'op_t_offb_get', + 'op_t_offb_set', + 'op_t_offo_get', + 'op_t_offo_set', + 'op_t_set_shown', + 'op_t_shown', + 'op_t_specflag1_get', + 'op_t_specflag1_set', + 'op_t_specflag2_get', + 'op_t_specflag2_set', + 'op_t_specflag3_get', + 'op_t_specflag3_set', + 'op_t_specflag4_get', + 'op_t_specflag4_set', + 'op_t_type_get', + 'op_t_type_set', + 'op_uses_x', + 'op_uses_y', + 'op_uses_z', + 'open_bpts_window', + 'open_calls_window', + 'open_disasm_window', + 'open_enums_window', + 'open_exports_window', + 'open_frame_window', + 'open_funcs_window', + 'open_hexdump_window', + 'open_imports_window', + 'open_linput', + 'open_loctypes_window', + 'open_modules_window', + 'open_names_window', + 'open_navband_window', + 'open_notepad_window', + 'open_problems_window', + 'open_pseudocode', + 'open_segments_window', + 'open_segregs_window', + 'open_selectors_window', + 'open_signatures_window', + 'open_stack_window', + 'open_strings_window', + 'open_structs_window', + 'open_threads_window', + 'open_tils_window', + 'open_trace_window', + 'open_url', + 'open_xrefs_window', + 'operand_locator_t___eq__', + 'operand_locator_t___ge__', + 'operand_locator_t___gt__', + 'operand_locator_t___le__', + 'operand_locator_t___lt__', + 'operand_locator_t___ne__', + 'operand_locator_t_compare', + 'operand_locator_t_ea_get', + 'operand_locator_t_ea_set', + 'operand_locator_t_opnum_get', + 'operand_locator_t_opnum_set', + 'operands_array___getitem__', + 'operands_array___len__', + 'operands_array___setitem__', + 'operands_array_data_get', + 'operator_info_t_fixtype_get', + 'operator_info_t_fixtype_set', + 'operator_info_t_flags_get', + 'operator_info_t_flags_set', + 'operator_info_t_precedence_get', + 'operator_info_t_precedence_set', + 'operator_info_t_text_get', + 'operator_info_t_text_set', + 'operator_info_t_valency_get', + 'operator_info_t_valency_set', + 'opinfo_t_cd_get', + 'opinfo_t_cd_set', + 'opinfo_t_ec_get', + 'opinfo_t_ec_set', + 'opinfo_t_path_get', + 'opinfo_t_path_set', + 'opinfo_t_ri_get', + 'opinfo_t_ri_set', + 'opinfo_t_strtype_get', + 'opinfo_t_strtype_set', + 'opinfo_t_tid_get', + 'opinfo_t_tid_set', + 'oprepr_t_flags_get', + 'oprepr_t_flags_set', + 'oprepr_t_opinfo_get', + 'oprepr_t_opinfo_set', + 'optblock_t_func', + 'optblock_t_install', + 'optblock_t_remove', + 'optimize_argloc', + 'optinsn_t_func', + 'optinsn_t_install', + 'optinsn_t_remove', + 'outctx_base_t__from_ptrval__', + 'outctx_base_t_close_comment', + 'outctx_base_t_clr_gen_label', + 'outctx_base_t_default_lnnum_get', + 'outctx_base_t_default_lnnum_set', + 'outctx_base_t_display_voids', + 'outctx_base_t_flush_buf', + 'outctx_base_t_flush_outbuf', + 'outctx_base_t_forbid_annotations', + 'outctx_base_t_force_code', + 'outctx_base_t_gen_block_cmt', + 'outctx_base_t_gen_border_line', + 'outctx_base_t_gen_cmt_line', + 'outctx_base_t_gen_cmt_line__varargs__', + 'outctx_base_t_gen_collapsed_line', + 'outctx_base_t_gen_collapsed_line__varargs__', + 'outctx_base_t_gen_empty_line', + 'outctx_base_t_gen_empty_line_without_annotations', + 'outctx_base_t_gen_printf', + 'outctx_base_t_gen_printf__varargs__', + 'outctx_base_t_gen_xref_lines', + 'outctx_base_t_get_stkvar', + 'outctx_base_t_init_lines_array', + 'outctx_base_t_insn_ea_get', + 'outctx_base_t_insn_ea_set', + 'outctx_base_t_multiline', + 'outctx_base_t_only_main_line', + 'outctx_base_t_out_addr_tag', + 'outctx_base_t_out_btoa', + 'outctx_base_t_out_char', + 'outctx_base_t_out_chars', + 'outctx_base_t_out_colored_register_line', + 'outctx_base_t_out_keyword', + 'outctx_base_t_out_line', + 'outctx_base_t_out_long', + 'outctx_base_t_out_name_expr', + 'outctx_base_t_out_printf', + 'outctx_base_t_out_printf__varargs__', + 'outctx_base_t_out_register', + 'outctx_base_t_out_spaces', + 'outctx_base_t_out_symbol', + 'outctx_base_t_out_tagoff', + 'outctx_base_t_out_tagon', + 'outctx_base_t_out_value', + 'outctx_base_t_outbuf_get', + 'outctx_base_t_outbuf_set', + 'outctx_base_t_print_label_now', + 'outctx_base_t_restore_ctxflags', + 'outctx_base_t_retrieve_cmt', + 'outctx_base_t_retrieve_name', + 'outctx_base_t_set_comment_addr', + 'outctx_base_t_set_dlbind_opnd', + 'outctx_base_t_set_gen_cmt', + 'outctx_base_t_set_gen_demangled_label', + 'outctx_base_t_set_gen_label', + 'outctx_base_t_set_gen_xrefs', + 'outctx_base_t_setup_outctx', + 'outctx_base_t_stack_view', + 'outctx_base_t_term_outctx', + 'outctx_t__from_ptrval__', + 'outctx_t_bin_ea_get', + 'outctx_t_bin_ea_set', + 'outctx_t_bin_state_get', + 'outctx_t_bin_state_set', + 'outctx_t_bin_width_get', + 'outctx_t_bin_width_set', + 'outctx_t_curlabel_get', + 'outctx_t_curlabel_set', + 'outctx_t_gen_func_footer', + 'outctx_t_gen_func_header', + 'outctx_t_gen_header', + 'outctx_t_gen_header_extra', + 'outctx_t_gen_xref_lines', + 'outctx_t_gl_bpsize_get', + 'outctx_t_gl_bpsize_set', + 'outctx_t_insn_get', + 'outctx_t_insn_set', + 'outctx_t_out_custom_mnem', + 'outctx_t_out_data', + 'outctx_t_out_immchar_cmts', + 'outctx_t_out_mnem', + 'outctx_t_out_mnemonic', + 'outctx_t_out_one_operand', + 'outctx_t_out_specea', + 'outctx_t_retrieve_cmt', + 'outctx_t_retrieve_name', + 'outctx_t_set_bin_state', + 'outctx_t_setup_outctx', + 'outctx_t_wif_get', + 'outctx_t_wif_set', + 'oword_flag', + 'pack_idcobj_to_bv', + 'pack_idcobj_to_idb', + 'pack_object_to_bv', + 'pack_object_to_idb', + 'packreal_flag', + 'parse_command_line3', + 'parse_dbgopts', + 'parse_decl', + 'parse_decls', + 'parse_reg_name', + 'parse_user_call', + 'partial_type_num', + 'patch_byte', + 'patch_bytes', + 'patch_dword', + 'patch_fixup_value', + 'patch_qword', + 'patch_word', + 'pattern_id_t_data_get', + 'pattern_id_t_data_set', + 'pattern_id_t_type_get', + 'pattern_id_t_type_set', + 'peek_auto_queue', + 'ph_calcrel', + 'ph_find_op_value', + 'ph_find_reg_value', + 'ph_get_cnbits', + 'ph_get_dnbits', + 'ph_get_flag', + 'ph_get_icode_return', + 'ph_get_id', + 'ph_get_instruc', + 'ph_get_instruc_end', + 'ph_get_instruc_start', + 'ph_get_operand_info', + 'ph_get_reg_code_sreg', + 'ph_get_reg_data_sreg', + 'ph_get_reg_first_sreg', + 'ph_get_reg_last_sreg', + 'ph_get_regnames', + 'ph_get_segreg_size', + 'ph_get_tbyte_size', + 'ph_get_version', + 'pkt_debugctl_t_args_get', + 'pkt_debugctl_t_args_set', + 'pkt_dump_md_result_t_contents_get', + 'pkt_dump_md_result_t_contents_set', + 'pkt_dump_md_t_sort_get', + 'pkt_dump_md_t_sort_set', + 'pkt_get_pop_result_t_results_get', + 'pkt_get_pop_result_t_results_set', + 'pkt_get_pop_t_nresults_get', + 'pkt_get_pop_t_nresults_set', + 'pkt_helo_t_client_version_get', + 'pkt_helo_t_client_version_set', + 'pkt_helo_t_key_get', + 'pkt_helo_t_key_set', + 'pkt_helo_t_license_id_get', + 'pkt_helo_t_license_id_set', + 'pkt_helo_t_record_conv_get', + 'pkt_helo_t_record_conv_set', + 'pkt_pull_md_result_t_codes_get', + 'pkt_pull_md_result_t_codes_set', + 'pkt_pull_md_result_t_results_get', + 'pkt_pull_md_result_t_results_set', + 'pkt_pull_md_t_flags_get', + 'pkt_pull_md_t_flags_set', + 'pkt_pull_md_t_keys_get', + 'pkt_pull_md_t_keys_set', + 'pkt_pull_md_t_pattern_ids_get', + 'pkt_pull_md_t_pattern_ids_set', + 'pkt_push_md_result_t_codes_get', + 'pkt_push_md_result_t_codes_set', + 'pkt_push_md_t_contents_get', + 'pkt_push_md_t_contents_set', + 'pkt_push_md_t_ea64s_get', + 'pkt_push_md_t_ea64s_set', + 'pkt_push_md_t_flags_get', + 'pkt_push_md_t_flags_set', + 'pkt_push_md_t_hostname_get', + 'pkt_push_md_t_hostname_set', + 'pkt_push_md_t_idb_get', + 'pkt_push_md_t_idb_set', + 'pkt_push_md_t_input_get', + 'pkt_push_md_t_input_set', + 'pkt_rpc_fail_t_error_get', + 'pkt_rpc_fail_t_error_set', + 'pkt_rpc_fail_t_result_get', + 'pkt_rpc_fail_t_result_set', + 'pkt_rpc_notify_t_text_get', + 'pkt_rpc_notify_t_text_set', + 'pkt_rpc_notify_t_type_get', + 'pkt_rpc_notify_t_type_set', + 'place_t__print', + 'place_t_adjust', + 'place_t_as_enumplace_t', + 'place_t_as_idaplace_t', + 'place_t_as_simpleline_place_t', + 'place_t_as_structplace_t', + 'place_t_beginning', + 'place_t_clone', + 'place_t_compare', + 'place_t_copyfrom', + 'place_t_deserialize', + 'place_t_ending', + 'place_t_enter', + 'place_t_generate', + 'place_t_id', + 'place_t_leave', + 'place_t_lnnum_get', + 'place_t_lnnum_set', + 'place_t_makeplace', + 'place_t_name', + 'place_t_next', + 'place_t_prev', + 'place_t_rebase', + 'place_t_serialize', + 'place_t_toea', + 'place_t_touval', + 'plan_and_wait', + 'plan_ea', + 'plan_range', + 'plan_to_apply_idasgn', + 'plgform_close', + 'plgform_get_widget', + 'plgform_new', + 'plgform_show', + 'plugin_info_t_arg_get', + 'plugin_info_t_arg_set', + 'plugin_info_t_comment_get', + 'plugin_info_t_comment_set', + 'plugin_info_t_dllmem_get', + 'plugin_info_t_dllmem_set', + 'plugin_info_t_entry_get', + 'plugin_info_t_entry_set', + 'plugin_info_t_flags_get', + 'plugin_info_t_flags_set', + 'plugin_info_t_hotkey_get', + 'plugin_info_t_hotkey_set', + 'plugin_info_t_name_get', + 'plugin_info_t_name_set', + 'plugin_info_t_next_get', + 'plugin_info_t_next_set', + 'plugin_info_t_org_hotkey_get', + 'plugin_info_t_org_hotkey_set', + 'plugin_info_t_org_name_get', + 'plugin_info_t_org_name_set', + 'plugin_info_t_path_get', + 'plugin_info_t_path_set', + 'point_t___eq__', + 'point_t___ne__', + 'point_t_add', + 'point_t_negate', + 'point_t_sub', + 'point_t_x_get', + 'point_t_x_set', + 'point_t_y_get', + 'point_t_y_set', + 'pointvec_t___eq__', + 'pointvec_t___getitem__', + 'pointvec_t___len__', + 'pointvec_t___ne__', + 'pointvec_t___setitem__', + 'pointvec_t__del', + 'pointvec_t_add_unique', + 'pointvec_t_at', + 'pointvec_t_begin', + 'pointvec_t_begin__SWIG_0', + 'pointvec_t_begin__SWIG_1', + 'pointvec_t_capacity', + 'pointvec_t_clear', + 'pointvec_t_empty', + 'pointvec_t_end', + 'pointvec_t_end__SWIG_0', + 'pointvec_t_end__SWIG_1', + 'pointvec_t_erase', + 'pointvec_t_erase__SWIG_0', + 'pointvec_t_erase__SWIG_1', + 'pointvec_t_extract', + 'pointvec_t_find', + 'pointvec_t_find__SWIG_0', + 'pointvec_t_find__SWIG_1', + 'pointvec_t_grow', + 'pointvec_t_has', + 'pointvec_t_inject', + 'pointvec_t_insert', + 'pointvec_t_pop_back', + 'pointvec_t_push_back', + 'pointvec_t_push_back__SWIG_0', + 'pointvec_t_push_back__SWIG_1', + 'pointvec_t_qclear', + 'pointvec_t_reserve', + 'pointvec_t_resize', + 'pointvec_t_resize__SWIG_0', + 'pointvec_t_resize__SWIG_1', + 'pointvec_t_size', + 'pointvec_t_swap', + 'pointvec_t_truncate', + 'pop_fun_t_ea64_get', + 'pop_fun_t_ea64_set', + 'pop_fun_t_hostname_get', + 'pop_fun_t_hostname_set', + 'pop_fun_t_input_get', + 'pop_fun_t_input_set', + 'predicate_t_should_display', + 'prev_addr', + 'prev_chunk', + 'prev_head', + 'prev_idcv_attr', + 'prev_inited', + 'prev_not_tail', + 'prev_that', + 'prev_unknown', + 'print_argloc', + 'print_decls', + 'print_idcv', + 'print_insn_mnem', + 'print_operand', + 'print_strlit_type', + 'print_tinfo', + 'print_type', + 'print_vdloc', + 'printop_t_aflags_get', + 'printop_t_aflags_set', + 'printop_t_features_get', + 'printop_t_features_set', + 'printop_t_flags_get', + 'printop_t_flags_set', + 'printop_t_get_ti', + 'printop_t_is_aflags_initialized', + 'printop_t_is_ti_initialized', + 'printop_t_set_aflags_initialized', + 'printop_t_set_ti_initialized', + 'printop_t_suspop_get', + 'printop_t_suspop_set', + 'printop_t_ti_get', + 'printop_t_ti_set', + 'process_archive', + 'process_info_t_name_get', + 'process_info_t_name_set', + 'process_info_t_pid_get', + 'process_info_t_pid_set', + 'process_ui_action', + 'procinfo_vec_t___getitem__', + 'procinfo_vec_t___len__', + 'procinfo_vec_t___setitem__', + 'procinfo_vec_t_at', + 'procinfo_vec_t_begin', + 'procinfo_vec_t_begin__SWIG_0', + 'procinfo_vec_t_begin__SWIG_1', + 'procinfo_vec_t_capacity', + 'procinfo_vec_t_clear', + 'procinfo_vec_t_empty', + 'procinfo_vec_t_end', + 'procinfo_vec_t_end__SWIG_0', + 'procinfo_vec_t_end__SWIG_1', + 'procinfo_vec_t_erase', + 'procinfo_vec_t_erase__SWIG_0', + 'procinfo_vec_t_erase__SWIG_1', + 'procinfo_vec_t_extract', + 'procinfo_vec_t_grow', + 'procinfo_vec_t_inject', + 'procinfo_vec_t_insert', + 'procinfo_vec_t_pop_back', + 'procinfo_vec_t_push_back', + 'procinfo_vec_t_push_back__SWIG_0', + 'procinfo_vec_t_push_back__SWIG_1', + 'procinfo_vec_t_qclear', + 'procinfo_vec_t_reserve', + 'procinfo_vec_t_resize', + 'procinfo_vec_t_resize__SWIG_0', + 'procinfo_vec_t_resize__SWIG_1', + 'procinfo_vec_t_size', + 'procinfo_vec_t_swap', + 'procinfo_vec_t_truncate', + 'ptr_type_data_t___eq__', + 'ptr_type_data_t___ne__', + 'ptr_type_data_t_based_ptr_size_get', + 'ptr_type_data_t_based_ptr_size_set', + 'ptr_type_data_t_closure_get', + 'ptr_type_data_t_closure_set', + 'ptr_type_data_t_delta_get', + 'ptr_type_data_t_delta_set', + 'ptr_type_data_t_is_code_ptr', + 'ptr_type_data_t_is_shifted', + 'ptr_type_data_t_obj_type_get', + 'ptr_type_data_t_obj_type_set', + 'ptr_type_data_t_parent_get', + 'ptr_type_data_t_parent_set', + 'ptr_type_data_t_swap', + 'ptr_type_data_t_taptr_bits_get', + 'ptr_type_data_t_taptr_bits_set', + 'push_md_opts_t_eas_get', + 'push_md_opts_t_eas_set', + 'push_md_opts_t_min_func_size_get', + 'push_md_opts_t_min_func_size_set', + 'push_md_result_t_codes_get', + 'push_md_result_t_codes_set', + 'push_md_result_t_contents_get', + 'push_md_result_t_contents_set', + 'push_md_result_t_eas_get', + 'push_md_result_t_eas_set', + 'put_byte', + 'put_bytes', + 'put_dbg_byte', + 'put_dword', + 'put_qword', + 'put_word', + 'py_add_idc_func', + 'py_get_ask_form', + 'py_get_call_idc_func', + 'py_get_open_form', + 'py_load_custom_icon_data', + 'py_load_custom_icon_fn', + 'py_register_compiled_form', + 'py_ss_restore_callback', + 'py_unregister_compiled_form', + 'pycim_get_widget', + 'pycim_view_close', + 'pyg_close', + 'pyg_select_node', + 'pyg_show', + 'pygc_create_groups', + 'pygc_delete_groups', + 'pygc_refresh', + 'pygc_set_groups_visibility', + 'pyidag_bind', + 'pyidag_unbind', + 'pyscv_add_line', + 'pyscv_clear_lines', + 'pyscv_close', + 'pyscv_count', + 'pyscv_del_line', + 'pyscv_edit_line', + 'pyscv_get_current_line', + 'pyscv_get_current_word', + 'pyscv_get_line', + 'pyscv_get_pos', + 'pyscv_get_selection', + 'pyscv_get_widget', + 'pyscv_init', + 'pyscv_insert_line', + 'pyscv_is_focused', + 'pyscv_jumpto', + 'pyscv_patch_line', + 'pyscv_refresh', + 'pyscv_show', + 'pyw_convert_defvals', + 'pyw_register_idc_func', + 'pyw_unregister_idc_func', + 'qatoll', + 'qcleanline', + 'qcontrol_tty', + 'qdetach_tty', + 'qexit', + 'qfile_t___idc_cvt_id___get', + 'qfile_t___idc_cvt_id___set', + 'qfile_t_close', + 'qfile_t_filename', + 'qfile_t_flush', + 'qfile_t_from_capsule', + 'qfile_t_from_fp', + 'qfile_t_get_byte', + 'qfile_t_get_fp', + 'qfile_t_gets', + 'qfile_t_open', + 'qfile_t_opened', + 'qfile_t_put_byte', + 'qfile_t_puts', + 'qfile_t_read', + 'qfile_t_readbytes', + 'qfile_t_seek', + 'qfile_t_size', + 'qfile_t_tell', + 'qfile_t_tmpfile', + 'qfile_t_write', + 'qfile_t_writebytes', + 'qflow_chart_t___getitem__', + 'qflow_chart_t_append_to_flowchart', + 'qflow_chart_t_bounds_get', + 'qflow_chart_t_bounds_set', + 'qflow_chart_t_calc_block_type', + 'qflow_chart_t_create', + 'qflow_chart_t_create__SWIG_0', + 'qflow_chart_t_create__SWIG_1', + 'qflow_chart_t_flags_get', + 'qflow_chart_t_flags_set', + 'qflow_chart_t_get_node_label', + 'qflow_chart_t_is_noret_block', + 'qflow_chart_t_is_ret_block', + 'qflow_chart_t_npred', + 'qflow_chart_t_nproper_get', + 'qflow_chart_t_nproper_set', + 'qflow_chart_t_nsucc', + 'qflow_chart_t_pfn_get', + 'qflow_chart_t_pfn_set', + 'qflow_chart_t_pred', + 'qflow_chart_t_print_names', + 'qflow_chart_t_print_node_attributes', + 'qflow_chart_t_refresh', + 'qflow_chart_t_size', + 'qflow_chart_t_succ', + 'qflow_chart_t_title_get', + 'qflow_chart_t_title_set', + 'qlgetz', + 'qlist_cinsn_t___eq__', + 'qlist_cinsn_t___ne__', + 'qlist_cinsn_t_back', + 'qlist_cinsn_t_back__SWIG_0', + 'qlist_cinsn_t_back__SWIG_1', + 'qlist_cinsn_t_begin', + 'qlist_cinsn_t_clear', + 'qlist_cinsn_t_empty', + 'qlist_cinsn_t_end', + 'qlist_cinsn_t_erase', + 'qlist_cinsn_t_erase__SWIG_0', + 'qlist_cinsn_t_erase__SWIG_1', + 'qlist_cinsn_t_erase__SWIG_2', + 'qlist_cinsn_t_front', + 'qlist_cinsn_t_front__SWIG_0', + 'qlist_cinsn_t_front__SWIG_1', + 'qlist_cinsn_t_insert', + 'qlist_cinsn_t_insert__SWIG_0', + 'qlist_cinsn_t_insert__SWIG_1', + 'qlist_cinsn_t_insert__SWIG_3', + 'qlist_cinsn_t_iterator___eq__', + 'qlist_cinsn_t_iterator___ne__', + 'qlist_cinsn_t_iterator___next__', + 'qlist_cinsn_t_iterator_cur_get', + 'qlist_cinsn_t_pop_back', + 'qlist_cinsn_t_pop_front', + 'qlist_cinsn_t_push_back', + 'qlist_cinsn_t_push_back__SWIG_0', + 'qlist_cinsn_t_push_back__SWIG_1', + 'qlist_cinsn_t_push_front', + 'qlist_cinsn_t_rbegin', + 'qlist_cinsn_t_rbegin__SWIG_0', + 'qlist_cinsn_t_rbegin__SWIG_1', + 'qlist_cinsn_t_rend', + 'qlist_cinsn_t_rend__SWIG_0', + 'qlist_cinsn_t_rend__SWIG_1', + 'qlist_cinsn_t_size', + 'qlist_cinsn_t_swap', + 'qrefcnt_obj_t_refcnt_get', + 'qrefcnt_obj_t_refcnt_set', + 'qrefcnt_obj_t_release', + 'qstring_printer_t__print', + 'qstring_printer_t__print__varargs__', + 'qstring_printer_t_get_s', + 'qstring_printer_t_s_get', + 'qstring_printer_t_s_set', + 'qstring_printer_t_with_tags_get', + 'qstring_printer_t_with_tags_set', + 'qstrvec_t_add', + 'qstrvec_t_addressof', + 'qstrvec_t_assign', + 'qstrvec_t_clear', + 'qstrvec_t_create', + 'qstrvec_t_destroy', + 'qstrvec_t_from_list', + 'qstrvec_t_get', + 'qstrvec_t_get_clink', + 'qstrvec_t_get_clink_ptr', + 'qstrvec_t_insert', + 'qstrvec_t_remove', + 'qstrvec_t_set', + 'qstrvec_t_size', + 'qswap', + 'quote_cmdline_arg', + 'qvector_carg_t___eq__', + 'qvector_carg_t___getitem__', + 'qvector_carg_t___len__', + 'qvector_carg_t___ne__', + 'qvector_carg_t___setitem__', + 'qvector_carg_t__del', + 'qvector_carg_t_add_unique', + 'qvector_carg_t_at', + 'qvector_carg_t_begin', + 'qvector_carg_t_begin__SWIG_0', + 'qvector_carg_t_begin__SWIG_1', + 'qvector_carg_t_capacity', + 'qvector_carg_t_clear', + 'qvector_carg_t_empty', + 'qvector_carg_t_end', + 'qvector_carg_t_end__SWIG_0', + 'qvector_carg_t_end__SWIG_1', + 'qvector_carg_t_erase', + 'qvector_carg_t_erase__SWIG_0', + 'qvector_carg_t_erase__SWIG_1', + 'qvector_carg_t_extract', + 'qvector_carg_t_find', + 'qvector_carg_t_find__SWIG_0', + 'qvector_carg_t_find__SWIG_1', + 'qvector_carg_t_grow', + 'qvector_carg_t_has', + 'qvector_carg_t_inject', + 'qvector_carg_t_insert', + 'qvector_carg_t_pop_back', + 'qvector_carg_t_push_back', + 'qvector_carg_t_push_back__SWIG_0', + 'qvector_carg_t_push_back__SWIG_1', + 'qvector_carg_t_qclear', + 'qvector_carg_t_reserve', + 'qvector_carg_t_resize', + 'qvector_carg_t_resize__SWIG_0', + 'qvector_carg_t_resize__SWIG_1', + 'qvector_carg_t_size', + 'qvector_carg_t_swap', + 'qvector_carg_t_truncate', + 'qvector_ccase_t___eq__', + 'qvector_ccase_t___getitem__', + 'qvector_ccase_t___len__', + 'qvector_ccase_t___ne__', + 'qvector_ccase_t___setitem__', + 'qvector_ccase_t__del', + 'qvector_ccase_t_add_unique', + 'qvector_ccase_t_at', + 'qvector_ccase_t_begin', + 'qvector_ccase_t_begin__SWIG_0', + 'qvector_ccase_t_begin__SWIG_1', + 'qvector_ccase_t_capacity', + 'qvector_ccase_t_clear', + 'qvector_ccase_t_empty', + 'qvector_ccase_t_end', + 'qvector_ccase_t_end__SWIG_0', + 'qvector_ccase_t_end__SWIG_1', + 'qvector_ccase_t_erase', + 'qvector_ccase_t_erase__SWIG_0', + 'qvector_ccase_t_erase__SWIG_1', + 'qvector_ccase_t_extract', + 'qvector_ccase_t_find', + 'qvector_ccase_t_find__SWIG_0', + 'qvector_ccase_t_find__SWIG_1', + 'qvector_ccase_t_grow', + 'qvector_ccase_t_has', + 'qvector_ccase_t_inject', + 'qvector_ccase_t_insert', + 'qvector_ccase_t_pop_back', + 'qvector_ccase_t_push_back', + 'qvector_ccase_t_push_back__SWIG_0', + 'qvector_ccase_t_push_back__SWIG_1', + 'qvector_ccase_t_qclear', + 'qvector_ccase_t_reserve', + 'qvector_ccase_t_resize', + 'qvector_ccase_t_resize__SWIG_0', + 'qvector_ccase_t_resize__SWIG_1', + 'qvector_ccase_t_size', + 'qvector_ccase_t_swap', + 'qvector_ccase_t_truncate', + 'qvector_history_t___eq__', + 'qvector_history_t___getitem__', + 'qvector_history_t___len__', + 'qvector_history_t___ne__', + 'qvector_history_t___setitem__', + 'qvector_history_t__del', + 'qvector_history_t_add_unique', + 'qvector_history_t_at', + 'qvector_history_t_begin', + 'qvector_history_t_begin__SWIG_0', + 'qvector_history_t_begin__SWIG_1', + 'qvector_history_t_capacity', + 'qvector_history_t_clear', + 'qvector_history_t_empty', + 'qvector_history_t_end', + 'qvector_history_t_end__SWIG_0', + 'qvector_history_t_end__SWIG_1', + 'qvector_history_t_erase', + 'qvector_history_t_erase__SWIG_0', + 'qvector_history_t_erase__SWIG_1', + 'qvector_history_t_extract', + 'qvector_history_t_find', + 'qvector_history_t_find__SWIG_0', + 'qvector_history_t_find__SWIG_1', + 'qvector_history_t_grow', + 'qvector_history_t_has', + 'qvector_history_t_inject', + 'qvector_history_t_insert', + 'qvector_history_t_pop_back', + 'qvector_history_t_push_back', + 'qvector_history_t_push_back__SWIG_0', + 'qvector_history_t_push_back__SWIG_1', + 'qvector_history_t_qclear', + 'qvector_history_t_reserve', + 'qvector_history_t_resize', + 'qvector_history_t_resize__SWIG_0', + 'qvector_history_t_resize__SWIG_1', + 'qvector_history_t_size', + 'qvector_history_t_swap', + 'qvector_history_t_truncate', + 'qvector_lvar_t___eq__', + 'qvector_lvar_t___getitem__', + 'qvector_lvar_t___len__', + 'qvector_lvar_t___ne__', + 'qvector_lvar_t___setitem__', + 'qvector_lvar_t__del', + 'qvector_lvar_t_add_unique', + 'qvector_lvar_t_at', + 'qvector_lvar_t_begin', + 'qvector_lvar_t_begin__SWIG_0', + 'qvector_lvar_t_begin__SWIG_1', + 'qvector_lvar_t_capacity', + 'qvector_lvar_t_clear', + 'qvector_lvar_t_empty', + 'qvector_lvar_t_end', + 'qvector_lvar_t_end__SWIG_0', + 'qvector_lvar_t_end__SWIG_1', + 'qvector_lvar_t_erase', + 'qvector_lvar_t_erase__SWIG_0', + 'qvector_lvar_t_erase__SWIG_1', + 'qvector_lvar_t_extract', + 'qvector_lvar_t_find', + 'qvector_lvar_t_find__SWIG_0', + 'qvector_lvar_t_find__SWIG_1', + 'qvector_lvar_t_grow', + 'qvector_lvar_t_has', + 'qvector_lvar_t_inject', + 'qvector_lvar_t_insert', + 'qvector_lvar_t_pop_back', + 'qvector_lvar_t_push_back', + 'qvector_lvar_t_push_back__SWIG_0', + 'qvector_lvar_t_push_back__SWIG_1', + 'qvector_lvar_t_qclear', + 'qvector_lvar_t_reserve', + 'qvector_lvar_t_resize', + 'qvector_lvar_t_resize__SWIG_0', + 'qvector_lvar_t_resize__SWIG_1', + 'qvector_lvar_t_size', + 'qvector_lvar_t_swap', + 'qvector_lvar_t_truncate', + 'qvector_reserve', + 'qvector_snapshotvec_t___eq__', + 'qvector_snapshotvec_t___getitem__', + 'qvector_snapshotvec_t___len__', + 'qvector_snapshotvec_t___ne__', + 'qvector_snapshotvec_t___setitem__', + 'qvector_snapshotvec_t__del', + 'qvector_snapshotvec_t_add_unique', + 'qvector_snapshotvec_t_at', + 'qvector_snapshotvec_t_begin', + 'qvector_snapshotvec_t_begin__SWIG_0', + 'qvector_snapshotvec_t_begin__SWIG_1', + 'qvector_snapshotvec_t_capacity', + 'qvector_snapshotvec_t_clear', + 'qvector_snapshotvec_t_empty', + 'qvector_snapshotvec_t_end', + 'qvector_snapshotvec_t_end__SWIG_0', + 'qvector_snapshotvec_t_end__SWIG_1', + 'qvector_snapshotvec_t_erase', + 'qvector_snapshotvec_t_erase__SWIG_0', + 'qvector_snapshotvec_t_erase__SWIG_1', + 'qvector_snapshotvec_t_extract', + 'qvector_snapshotvec_t_find', + 'qvector_snapshotvec_t_find__SWIG_0', + 'qvector_snapshotvec_t_find__SWIG_1', + 'qvector_snapshotvec_t_has', + 'qvector_snapshotvec_t_inject', + 'qvector_snapshotvec_t_insert', + 'qvector_snapshotvec_t_pop_back', + 'qvector_snapshotvec_t_push_back', + 'qvector_snapshotvec_t_push_back__SWIG_0', + 'qvector_snapshotvec_t_push_back__SWIG_1', + 'qvector_snapshotvec_t_qclear', + 'qvector_snapshotvec_t_reserve', + 'qvector_snapshotvec_t_resize', + 'qvector_snapshotvec_t_resize__SWIG_0', + 'qvector_snapshotvec_t_resize__SWIG_1', + 'qvector_snapshotvec_t_size', + 'qvector_snapshotvec_t_swap', + 'qvector_snapshotvec_t_truncate', + 'qword_flag', + 'range_array___getitem__', + 'range_array___len__', + 'range_array___setitem__', + 'range_array_count_get', + 'range_array_data_get', + 'range_t___eq__', + 'range_t___gt__', + 'range_t___lt__', + 'range_t___ne__', + 'range_t__print', + 'range_t_clear', + 'range_t_compare', + 'range_t_contains', + 'range_t_contains__SWIG_0', + 'range_t_contains__SWIG_1', + 'range_t_empty', + 'range_t_end_ea_get', + 'range_t_end_ea_set', + 'range_t_extend', + 'range_t_intersect', + 'range_t_overlaps', + 'range_t_print', + 'range_t_size', + 'range_t_start_ea_get', + 'range_t_start_ea_set', + 'rangeset_t___eq__', + 'rangeset_t___ne__', + 'rangeset_t__print', + 'rangeset_t_add', + 'rangeset_t_add__SWIG_0', + 'rangeset_t_add__SWIG_1', + 'rangeset_t_add__SWIG_2', + 'rangeset_t_begin', + 'rangeset_t_begin__SWIG_0', + 'rangeset_t_begin__SWIG_1', + 'rangeset_t_cached_range', + 'rangeset_t_clear', + 'rangeset_t_contains', + 'rangeset_t_contains__SWIG_0', + 'rangeset_t_contains__SWIG_1', + 'rangeset_t_empty', + 'rangeset_t_end', + 'rangeset_t_end__SWIG_0', + 'rangeset_t_end__SWIG_1', + 'rangeset_t_find_range', + 'rangeset_t_getrange', + 'rangeset_t_has_common', + 'rangeset_t_has_common__SWIG_0', + 'rangeset_t_has_common__SWIG_1', + 'rangeset_t_includes', + 'rangeset_t_intersect', + 'rangeset_t_is_equal', + 'rangeset_t_is_subset_of', + 'rangeset_t_lastrange', + 'rangeset_t_next_addr', + 'rangeset_t_next_range', + 'rangeset_t_nranges', + 'rangeset_t_prev_addr', + 'rangeset_t_prev_range', + 'rangeset_t_sub', + 'rangeset_t_sub__SWIG_0', + 'rangeset_t_sub__SWIG_1', + 'rangeset_t_sub__SWIG_2', + 'rangeset_t_swap', + 'rangevec_base_t___eq__', + 'rangevec_base_t___getitem__', + 'rangevec_base_t___len__', + 'rangevec_base_t___ne__', + 'rangevec_base_t___setitem__', + 'rangevec_base_t__del', + 'rangevec_base_t_add_unique', + 'rangevec_base_t_at', + 'rangevec_base_t_begin', + 'rangevec_base_t_begin__SWIG_0', + 'rangevec_base_t_begin__SWIG_1', + 'rangevec_base_t_capacity', + 'rangevec_base_t_clear', + 'rangevec_base_t_empty', + 'rangevec_base_t_end', + 'rangevec_base_t_end__SWIG_0', + 'rangevec_base_t_end__SWIG_1', + 'rangevec_base_t_erase', + 'rangevec_base_t_erase__SWIG_0', + 'rangevec_base_t_erase__SWIG_1', + 'rangevec_base_t_extract', + 'rangevec_base_t_find', + 'rangevec_base_t_find__SWIG_0', + 'rangevec_base_t_find__SWIG_1', + 'rangevec_base_t_grow', + 'rangevec_base_t_has', + 'rangevec_base_t_inject', + 'rangevec_base_t_insert', + 'rangevec_base_t_pop_back', + 'rangevec_base_t_push_back', + 'rangevec_base_t_push_back__SWIG_0', + 'rangevec_base_t_push_back__SWIG_1', + 'rangevec_base_t_qclear', + 'rangevec_base_t_reserve', + 'rangevec_base_t_resize', + 'rangevec_base_t_resize__SWIG_0', + 'rangevec_base_t_resize__SWIG_1', + 'rangevec_base_t_size', + 'rangevec_base_t_swap', + 'rangevec_base_t_truncate', + 'read_dbg_memory', + 'read_range_selection', + 'read_regargs', + 'read_selection', + 'read_tinfo_bitfield_value', + 'readbytes', + 'reanalyze_callers', + 'reanalyze_function', + 'reanalyze_noret_flag', + 'rebase_program', + 'rebuild_nlist', + 'recalc_spd', + 'rect_t___eq__', + 'rect_t___ne__', + 'rect_t_area', + 'rect_t_bottom_get', + 'rect_t_bottom_set', + 'rect_t_bottomright', + 'rect_t_center', + 'rect_t_contains', + 'rect_t_empty', + 'rect_t_grow', + 'rect_t_height', + 'rect_t_intersect', + 'rect_t_is_intersection_empty', + 'rect_t_left_get', + 'rect_t_left_set', + 'rect_t_make_union', + 'rect_t_move_by', + 'rect_t_move_to', + 'rect_t_right_get', + 'rect_t_right_set', + 'rect_t_top_get', + 'rect_t_top_set', + 'rect_t_topleft', + 'rect_t_width', + 'refinfo_t_base_get', + 'refinfo_t_base_set', + 'refinfo_t_flags_get', + 'refinfo_t_flags_set', + 'refinfo_t_init', + 'refinfo_t_is_custom', + 'refinfo_t_is_pastend', + 'refinfo_t_is_rvaoff', + 'refinfo_t_is_signed', + 'refinfo_t_is_subtract', + 'refinfo_t_is_target_optional', + 'refinfo_t_no_base_xref', + 'refinfo_t_set_type', + 'refinfo_t_target_get', + 'refinfo_t_target_set', + 'refinfo_t_tdelta_get', + 'refinfo_t_tdelta_set', + 'refinfo_t_type', + 'refresh_chooser', + 'refresh_choosers', + 'refresh_debugger_memory', + 'refresh_idaview', + 'refresh_idaview_anyway', + 'refresh_navband', + 'refresh_viewer', + 'reg2mreg', + 'reg_data_type', + 'reg_delete', + 'reg_delete_subkey', + 'reg_delete_tree', + 'reg_exists', + 'reg_flush', + 'reg_info_t___eq__', + 'reg_info_t___ge__', + 'reg_info_t___gt__', + 'reg_info_t___le__', + 'reg_info_t___lt__', + 'reg_info_t___ne__', + 'reg_info_t_compare', + 'reg_info_t_reg_get', + 'reg_info_t_reg_set', + 'reg_info_t_size_get', + 'reg_info_t_size_set', + 'reg_load', + 'reg_read_binary', + 'reg_read_bool', + 'reg_read_int', + 'reg_read_string', + 'reg_read_strlist', + 'reg_subkey_exists', + 'reg_subkey_subkeys', + 'reg_subkey_values', + 'reg_update_filestrlist', + 'reg_update_strlist', + 'reg_write_binary', + 'reg_write_bool', + 'reg_write_int', + 'reg_write_string', + 'regarg_t_name_get', + 'regarg_t_name_set', + 'regarg_t_reg_get', + 'regarg_t_reg_set', + 'regarg_t_type_get', + 'regarg_t_type_set', + 'reginfovec_t___eq__', + 'reginfovec_t___getitem__', + 'reginfovec_t___len__', + 'reginfovec_t___ne__', + 'reginfovec_t___setitem__', + 'reginfovec_t__del', + 'reginfovec_t_add_unique', + 'reginfovec_t_at', + 'reginfovec_t_begin', + 'reginfovec_t_begin__SWIG_0', + 'reginfovec_t_begin__SWIG_1', + 'reginfovec_t_capacity', + 'reginfovec_t_clear', + 'reginfovec_t_empty', + 'reginfovec_t_end', + 'reginfovec_t_end__SWIG_0', + 'reginfovec_t_end__SWIG_1', + 'reginfovec_t_erase', + 'reginfovec_t_erase__SWIG_0', + 'reginfovec_t_erase__SWIG_1', + 'reginfovec_t_extract', + 'reginfovec_t_find', + 'reginfovec_t_find__SWIG_0', + 'reginfovec_t_find__SWIG_1', + 'reginfovec_t_grow', + 'reginfovec_t_has', + 'reginfovec_t_inject', + 'reginfovec_t_insert', + 'reginfovec_t_pop_back', + 'reginfovec_t_push_back', + 'reginfovec_t_push_back__SWIG_0', + 'reginfovec_t_push_back__SWIG_1', + 'reginfovec_t_qclear', + 'reginfovec_t_reserve', + 'reginfovec_t_resize', + 'reginfovec_t_resize__SWIG_0', + 'reginfovec_t_resize__SWIG_1', + 'reginfovec_t_size', + 'reginfovec_t_swap', + 'reginfovec_t_truncate', + 'register_action', + 'register_addon', + 'register_and_attach_to_menu', + 'register_custom_data_format', + 'register_custom_data_type', + 'register_info_t_bit_strings_get', + 'register_info_t_bit_strings_set', + 'register_info_t_default_bit_strings_mask_get', + 'register_info_t_default_bit_strings_mask_set', + 'register_info_t_dtype_get', + 'register_info_t_dtype_set', + 'register_info_t_flags_get', + 'register_info_t_flags_set', + 'register_info_t_name_get', + 'register_info_t_name_set', + 'register_info_t_register_class_get', + 'register_info_t_register_class_set', + 'register_timer', + 'regobj_t_regidx_get', + 'regobj_t_regidx_set', + 'regobj_t_relocate_get', + 'regobj_t_relocate_set', + 'regobj_t_size', + 'regobj_t_value_get', + 'regobj_t_value_set', + 'regobjvec_t___getitem__', + 'regobjvec_t___len__', + 'regobjvec_t___setitem__', + 'regobjvec_t_at', + 'regobjvec_t_begin', + 'regobjvec_t_begin__SWIG_0', + 'regobjvec_t_begin__SWIG_1', + 'regobjvec_t_capacity', + 'regobjvec_t_clear', + 'regobjvec_t_empty', + 'regobjvec_t_end', + 'regobjvec_t_end__SWIG_0', + 'regobjvec_t_end__SWIG_1', + 'regobjvec_t_erase', + 'regobjvec_t_erase__SWIG_0', + 'regobjvec_t_erase__SWIG_1', + 'regobjvec_t_extract', + 'regobjvec_t_grow', + 'regobjvec_t_inject', + 'regobjvec_t_insert', + 'regobjvec_t_pop_back', + 'regobjvec_t_push_back', + 'regobjvec_t_push_back__SWIG_0', + 'regobjvec_t_push_back__SWIG_1', + 'regobjvec_t_qclear', + 'regobjvec_t_reserve', + 'regobjvec_t_resize', + 'regobjvec_t_resize__SWIG_0', + 'regobjvec_t_resize__SWIG_1', + 'regobjvec_t_size', + 'regobjvec_t_swap', + 'regobjvec_t_truncate', + 'regval_t___eq__', + 'regval_t___ne__', + 'regval_t_bytes', + 'regval_t_bytes__SWIG_0', + 'regval_t_bytes__SWIG_1', + 'regval_t_clear', + 'regval_t_fval_get', + 'regval_t_fval_set', + 'regval_t_get_data', + 'regval_t_get_data__SWIG_0', + 'regval_t_get_data__SWIG_1', + 'regval_t_get_data_size', + 'regval_t_ival_get', + 'regval_t_ival_set', + 'regval_t_rvtype_get', + 'regval_t_rvtype_set', + 'regval_t_set_bytes', + 'regval_t_set_bytes__SWIG_0', + 'regval_t_set_bytes__SWIG_1', + 'regval_t_set_bytes__SWIG_2', + 'regval_t_set_float', + 'regval_t_set_int', + 'regval_t_set_unavailable', + 'regval_t_swap', + 'regvar_array___getitem__', + 'regvar_array___len__', + 'regvar_array___setitem__', + 'regvar_array_count_get', + 'regvar_array_data_get', + 'regvar_t_canon_get', + 'regvar_t_canon_set', + 'regvar_t_cmt_get', + 'regvar_t_cmt_set', + 'regvar_t_user_get', + 'regvar_t_user_set', + 'reload_file', + 'reloc_value', + 'relocate_relobj', + 'remember_problem', + 'remitem', + 'remove_abi_opts', + 'remove_command_interpreter', + 'remove_func_tail', + 'remove_pointer', + 'remove_tinfo_pointer', + 'rename_bptgrp', + 'rename_encoding', + 'rename_entry', + 'rename_regvar', + 'renderer_info_pos_t___eq__', + 'renderer_info_pos_t___ne__', + 'renderer_info_pos_t_cx_get', + 'renderer_info_pos_t_cx_set', + 'renderer_info_pos_t_cy_get', + 'renderer_info_pos_t_cy_set', + 'renderer_info_pos_t_node_get', + 'renderer_info_pos_t_node_set', + 'renderer_info_t___eq__', + 'renderer_info_t___ne__', + 'renderer_info_t_clear', + 'renderer_info_t_gli_get', + 'renderer_info_t_gli_set', + 'renderer_info_t_pos_get', + 'renderer_info_t_pos_set', + 'renderer_info_t_rtype_get', + 'renderer_info_t_rtype_set', + 'renderer_pos_info_t___eq__', + 'renderer_pos_info_t___ne__', + 'renderer_pos_info_t_cx_get', + 'renderer_pos_info_t_cx_set', + 'renderer_pos_info_t_cy_get', + 'renderer_pos_info_t_cy_set', + 'renderer_pos_info_t_node_get', + 'renderer_pos_info_t_node_set', + 'renderer_pos_info_t_sx_get', + 'renderer_pos_info_t_sx_set', + 'reorder_dummy_names', + 'repaint_custom_viewer', + 'replace_ordinal_typerefs', + 'replace_wait_box', + 'replace_wait_box__varargs__', + 'request_add_bpt', + 'request_add_bpt__SWIG_0', + 'request_add_bpt__SWIG_1', + 'request_attach_process', + 'request_clear_trace', + 'request_continue_process', + 'request_del_bpt', + 'request_del_bpt__SWIG_0', + 'request_del_bpt__SWIG_1', + 'request_detach_process', + 'request_disable_bblk_trace', + 'request_disable_bpt', + 'request_disable_bpt__SWIG_0', + 'request_disable_bpt__SWIG_1', + 'request_disable_func_trace', + 'request_disable_insn_trace', + 'request_disable_step_trace', + 'request_enable_bblk_trace', + 'request_enable_bpt', + 'request_enable_bpt__SWIG_0', + 'request_enable_bpt__SWIG_1', + 'request_enable_func_trace', + 'request_enable_insn_trace', + 'request_enable_step_trace', + 'request_exit_process', + 'request_refresh', + 'request_resume_thread', + 'request_run_to', + 'request_select_thread', + 'request_set_bblk_trace_options', + 'request_set_func_trace_options', + 'request_set_insn_trace_options', + 'request_set_reg_val', + 'request_set_resume_mode', + 'request_set_step_trace_options', + 'request_start_process', + 'request_step_into', + 'request_step_over', + 'request_step_until_ret', + 'request_suspend_process', + 'request_suspend_thread', + 'resolve_typedef', + 'restore_database_snapshot', + 'restore_user_cmts', + 'restore_user_defined_calls', + 'restore_user_iflags', + 'restore_user_labels', + 'restore_user_lvar_settings', + 'restore_user_numforms', + 'restore_user_unions', + 'resume_thread', + 'retrieve_exceptions', + 'retrieve_input_file_crc32', + 'retrieve_input_file_md5', + 'retrieve_input_file_sha256', + 'retrieve_input_file_size', + 'retrieve_member_info', + 'revert_byte', + 'revert_ida_decisions', + 'revert_metadata', + 'rlist_t_dstr', + 'row_info_t_bottom_get', + 'row_info_t_bottom_set', + 'row_info_t_height', + 'row_info_t_nodes_get', + 'row_info_t_nodes_set', + 'row_info_t_top_get', + 'row_info_t_top_set', + 'rrel_t_off_get', + 'rrel_t_off_set', + 'rrel_t_reg_get', + 'rrel_t_reg_set', + 'run_plugin', + 'run_requests', + 'run_to', + 'save_database', + 'save_struc', + 'save_tinfo', + 'save_trace_file', + 'save_user_cmts', + 'save_user_defined_calls', + 'save_user_iflags', + 'save_user_labels', + 'save_user_lvar_settings', + 'save_user_numforms', + 'save_user_unions', + 'scattered_segm_t_name_get', + 'scattered_segm_t_name_set', + 'scif_t_mba_get', + 'scif_t_mba_set', + 'scif_t_name_get', + 'scif_t_name_set', + 'scif_t_type_get', + 'scif_t_type_set', + 'scif_visitor_t_visit_scif_mop', + 'score_metadata', + 'score_tinfo', + 'screen_graph_selection_base_t___eq__', + 'screen_graph_selection_base_t___getitem__', + 'screen_graph_selection_base_t___len__', + 'screen_graph_selection_base_t___ne__', + 'screen_graph_selection_base_t___setitem__', + 'screen_graph_selection_base_t__del', + 'screen_graph_selection_base_t_add_unique', + 'screen_graph_selection_base_t_at', + 'screen_graph_selection_base_t_begin', + 'screen_graph_selection_base_t_begin__SWIG_0', + 'screen_graph_selection_base_t_begin__SWIG_1', + 'screen_graph_selection_base_t_capacity', + 'screen_graph_selection_base_t_clear', + 'screen_graph_selection_base_t_empty', + 'screen_graph_selection_base_t_end', + 'screen_graph_selection_base_t_end__SWIG_0', + 'screen_graph_selection_base_t_end__SWIG_1', + 'screen_graph_selection_base_t_erase', + 'screen_graph_selection_base_t_erase__SWIG_0', + 'screen_graph_selection_base_t_erase__SWIG_1', + 'screen_graph_selection_base_t_extract', + 'screen_graph_selection_base_t_find', + 'screen_graph_selection_base_t_find__SWIG_0', + 'screen_graph_selection_base_t_find__SWIG_1', + 'screen_graph_selection_base_t_grow', + 'screen_graph_selection_base_t_has', + 'screen_graph_selection_base_t_inject', + 'screen_graph_selection_base_t_insert', + 'screen_graph_selection_base_t_pop_back', + 'screen_graph_selection_base_t_push_back', + 'screen_graph_selection_base_t_push_back__SWIG_0', + 'screen_graph_selection_base_t_push_back__SWIG_1', + 'screen_graph_selection_base_t_qclear', + 'screen_graph_selection_base_t_reserve', + 'screen_graph_selection_base_t_resize', + 'screen_graph_selection_base_t_resize__SWIG_0', + 'screen_graph_selection_base_t_resize__SWIG_1', + 'screen_graph_selection_base_t_size', + 'screen_graph_selection_base_t_swap', + 'screen_graph_selection_base_t_truncate', + 'screen_graph_selection_t_add', + 'screen_graph_selection_t_add_node', + 'screen_graph_selection_t_add_point', + 'screen_graph_selection_t_del_node', + 'screen_graph_selection_t_del_point', + 'screen_graph_selection_t_has', + 'screen_graph_selection_t_items_count', + 'screen_graph_selection_t_nodes_count', + 'screen_graph_selection_t_points_count', + 'screen_graph_selection_t_sub', + 'search_down', + 'seg_flag', + 'segm_adjust_diff', + 'segm_adjust_ea', + 'segm_move_info_t___eq__', + 'segm_move_info_t___ne__', + 'segm_move_info_t__from_get', + 'segm_move_info_t__from_set', + 'segm_move_info_t_size_get', + 'segm_move_info_t_size_set', + 'segm_move_info_t_to_get', + 'segm_move_info_t_to_set', + 'segm_move_info_vec_t___eq__', + 'segm_move_info_vec_t___getitem__', + 'segm_move_info_vec_t___len__', + 'segm_move_info_vec_t___ne__', + 'segm_move_info_vec_t___setitem__', + 'segm_move_info_vec_t__del', + 'segm_move_info_vec_t_add_unique', + 'segm_move_info_vec_t_at', + 'segm_move_info_vec_t_begin', + 'segm_move_info_vec_t_begin__SWIG_0', + 'segm_move_info_vec_t_begin__SWIG_1', + 'segm_move_info_vec_t_capacity', + 'segm_move_info_vec_t_clear', + 'segm_move_info_vec_t_empty', + 'segm_move_info_vec_t_end', + 'segm_move_info_vec_t_end__SWIG_0', + 'segm_move_info_vec_t_end__SWIG_1', + 'segm_move_info_vec_t_erase', + 'segm_move_info_vec_t_erase__SWIG_0', + 'segm_move_info_vec_t_erase__SWIG_1', + 'segm_move_info_vec_t_extract', + 'segm_move_info_vec_t_find', + 'segm_move_info_vec_t_find__SWIG_0', + 'segm_move_info_vec_t_find__SWIG_1', + 'segm_move_info_vec_t_grow', + 'segm_move_info_vec_t_has', + 'segm_move_info_vec_t_inject', + 'segm_move_info_vec_t_insert', + 'segm_move_info_vec_t_pop_back', + 'segm_move_info_vec_t_push_back', + 'segm_move_info_vec_t_push_back__SWIG_0', + 'segm_move_info_vec_t_push_back__SWIG_1', + 'segm_move_info_vec_t_qclear', + 'segm_move_info_vec_t_reserve', + 'segm_move_info_vec_t_resize', + 'segm_move_info_vec_t_resize__SWIG_0', + 'segm_move_info_vec_t_resize__SWIG_1', + 'segm_move_info_vec_t_size', + 'segm_move_info_vec_t_swap', + 'segm_move_info_vec_t_truncate', + 'segm_move_infos_t_find', + 'segment_t_abits', + 'segment_t_abytes', + 'segment_t_align_get', + 'segment_t_align_set', + 'segment_t_bitness_get', + 'segment_t_bitness_set', + 'segment_t_clr_comorg', + 'segment_t_clr_ob_ok', + 'segment_t_color_get', + 'segment_t_color_set', + 'segment_t_comb_get', + 'segment_t_comb_set', + 'segment_t_comorg', + 'segment_t_defsr_get', + 'segment_t_defsr_set', + 'segment_t_end_ea_get', + 'segment_t_end_ea_set', + 'segment_t_flags_get', + 'segment_t_flags_set', + 'segment_t_is_header_segm', + 'segment_t_is_hidden_segtype', + 'segment_t_is_loader_segm', + 'segment_t_is_visible_segm', + 'segment_t_name_get', + 'segment_t_name_set', + 'segment_t_ob_ok', + 'segment_t_orgbase_get', + 'segment_t_orgbase_set', + 'segment_t_perm_get', + 'segment_t_perm_set', + 'segment_t_sclass_get', + 'segment_t_sclass_set', + 'segment_t_sel_get', + 'segment_t_sel_set', + 'segment_t_set_comorg', + 'segment_t_set_debugger_segm', + 'segment_t_set_header_segm', + 'segment_t_set_hidden_segtype', + 'segment_t_set_loader_segm', + 'segment_t_set_ob_ok', + 'segment_t_set_visible_segm', + 'segment_t_start_ea_get', + 'segment_t_start_ea_set', + 'segment_t_type_get', + 'segment_t_type_set', + 'segment_t_update', + 'segment_t_use32', + 'segment_t_use64', + 'segtype', + 'seh_t_clear', + 'seh_t_filter_get', + 'seh_t_filter_set', + 'seh_t_seh_code_get', + 'seh_t_seh_code_set', + 'sel2ea', + 'sel2para', + 'sel_array___getitem__', + 'sel_array___setitem__', + 'sel_array_cast', + 'sel_array_frompointer', + 'sel_pointer_assign', + 'sel_pointer_cast', + 'sel_pointer_frompointer', + 'sel_pointer_value', + 'select_thread', + 'select_udt_by_offset', + 'selection_item_t___eq__', + 'selection_item_t___lt__', + 'selection_item_t___ne__', + 'selection_item_t_compare', + 'selection_item_t_elp_get', + 'selection_item_t_elp_set', + 'selection_item_t_is_node_get', + 'selection_item_t_is_node_set', + 'selection_item_t_node_get', + 'selection_item_t_node_set', + 'send_database', + 'serialize_tinfo', + 'serialized_tinfo_fields_get', + 'serialized_tinfo_fields_set', + 'serialized_tinfo_type_get', + 'serialized_tinfo_type_set', + 'set2jcnd', + 'set__bnot0', + 'set__bnot1', + 'set__invsign0', + 'set__invsign1', + 'set_abi_name', + 'set_abits', + 'set_absbase', + 'set_aflags', + 'set_align_flow', + 'set_alignment', + 'set_archive_path', + 'set_array_parameters', + 'set_asm_inc_file', + 'set_auto_state', + 'set_bblk_trace_options', + 'set_bits', + 'set_bmask_cmt', + 'set_bmask_name', + 'set_bpt_group', + 'set_bptloc_group', + 'set_bptloc_string', + 'set_c_header_path', + 'set_c_macros', + 'set_cancelled', + 'set_cmt', + 'set_code_viewer_handler', + 'set_code_viewer_is_source', + 'set_code_viewer_line_handlers', + 'set_code_viewer_lines_alignment', + 'set_code_viewer_lines_icon_margin', + 'set_code_viewer_lines_radix', + 'set_code_viewer_user_data', + 'set_colored_item', + 'set_compiler', + 'set_compiler_id', + 'set_compiler_string', + 'set_cp_validity', + 'set_custom_data_type_ids', + 'set_custom_viewer_qt_aware', + 'set_database_flag', + 'set_debug_event_code', + 'set_debug_name', + 'set_debugger_event_cond', + 'set_debugger_options', + 'set_default_dataseg', + 'set_default_encoding_idx', + 'set_default_sreg_value', + 'set_defsr', + 'set_dock_pos', + 'set_dummy_name', + 'set_entry_forwarder', + 'set_enum_bf', + 'set_enum_cmt', + 'set_enum_flag', + 'set_enum_fromtil', + 'set_enum_ghost', + 'set_enum_hidden', + 'set_enum_idx', + 'set_enum_member_cmt', + 'set_enum_member_name', + 'set_enum_name', + 'set_enum_type_ordinal', + 'set_enum_width', + 'set_fixed_spd', + 'set_fixup', + 'set_forced_operand', + 'set_frame_size', + 'set_func_cmt', + 'set_func_end', + 'set_func_name_if_jumpfunc', + 'set_func_start', + 'set_func_trace_options', + 'set_gotea', + 'set_group_selector', + 'set_has_lname', + 'set_has_ti', + 'set_has_ti0', + 'set_has_ti1', + 'set_header_path', + 'set_highlight', + 'set_highlight_trace_options', + 'set_ida_state', + 'set_idcv_attr', + 'set_idcv_slice', + 'set_ids_modnode', + 'set_imagebase', + 'set_immd', + 'set_insn_trace_options', + 'set_item_color', + 'set_libitem', + 'set_lzero', + 'set_lzero0', + 'set_lzero1', + 'set_manual_insn', + 'set_manual_regions', + 'set_member_cmt', + 'set_member_name', + 'set_member_tinfo', + 'set_member_type', + 'set_name', + 'set_nav_colorizer', + 'set_node_info', + 'set_noret', + 'set_noret_insn', + 'set_notcode', + 'set_notproc', + 'set_numbered_type', + 'set_op_tinfo', + 'set_op_type', + 'set_opinfo', + 'set_outfile_encoding_idx', + 'set_path', + 'set_process_options', + 'set_process_state', + 'set_processor_type', + 'set_purged', + 'set_refinfo', + 'set_refinfo_ex', + 'set_reg_val', + 'set_reg_val__SWIG_0', + 'set_reg_val__SWIG_1', + 'set_regvar_cmt', + 'set_remote_debugger', + 'set_resume_mode', + 'set_retfp', + 'set_root_filename', + 'set_script_timeout', + 'set_segm_addressing', + 'set_segm_base', + 'set_segm_class', + 'set_segm_end', + 'set_segm_name', + 'set_segm_start', + 'set_segment_cmt', + 'set_segment_translations', + 'set_selector', + 'set_source_linnum', + 'set_sreg_at_next_code', + 'set_step_trace_options', + 'set_str_type', + 'set_struc_align', + 'set_struc_cmt', + 'set_struc_hidden', + 'set_struc_idx', + 'set_struc_listed', + 'set_struc_name', + 'set_switch_info', + 'set_switch_parent', + 'set_tail_owner', + 'set_target_assembler', + 'set_terse_struc', + 'set_tilcmt', + 'set_tinfo', + 'set_tinfo_attr', + 'set_tinfo_attrs', + 'set_tinfo_property', + 'set_trace_base_address', + 'set_trace_file_desc', + 'set_trace_platform', + 'set_trace_size', + 'set_type', + 'set_type_alias', + 'set_usemodsp', + 'set_user_defined_prefix', + 'set_usersp', + 'set_userti', + 'set_view_renderer_type', + 'set_viewer_graph', + 'set_visible_func', + 'set_visible_item', + 'set_visible_segm', + 'set_zstroff', + 'setup_selector', + 'show_addr', + 'show_auto', + 'show_name', + 'show_wait_box', + 'simd_info_t_match_pattern', + 'simd_info_t_memtype_get', + 'simd_info_t_memtype_set', + 'simd_info_t_name_get', + 'simd_info_t_name_set', + 'simd_info_t_size_get', + 'simd_info_t_size_set', + 'simd_info_t_tif_get', + 'simd_info_t_tif_set', + 'simple_diff_handler_t_indent_get', + 'simple_diff_handler_t_indent_set', + 'simple_diff_handler_t_lines_get', + 'simple_diff_handler_t_lines_set', + 'simple_diff_handler_t_on_comment_changed', + 'simple_diff_handler_t_on_extra_comment_changed', + 'simple_diff_handler_t_on_frame_member_changed', + 'simple_diff_handler_t_on_function_comment_changed', + 'simple_diff_handler_t_on_insn_ops_repr_changed', + 'simple_diff_handler_t_on_name_changed', + 'simple_diff_handler_t_on_proto_changed', + 'simple_diff_handler_t_on_score_changed', + 'simple_diff_handler_t_on_user_stkpnt_changed', + 'simple_graph_t_colored_gdl_edges_get', + 'simple_graph_t_colored_gdl_edges_set', + 'simple_graph_t_title_get', + 'simple_graph_t_title_set', + 'simple_idb_diff_handler_t_header_generated_get', + 'simple_idb_diff_handler_t_header_generated_set', + 'simple_idb_diff_handler_t_pfn_get', + 'simple_idb_diff_handler_t_pfn_set', + 'simpleline_place_t_n_get', + 'simpleline_place_t_n_set', + 'simpleline_t_bgcolor_get', + 'simpleline_t_bgcolor_set', + 'simpleline_t_color_get', + 'simpleline_t_color_set', + 'simpleline_t_line_get', + 'simpleline_t_line_set', + 'sizeof_ldbl', + 'sizevec_t___eq__', + 'sizevec_t___getitem__', + 'sizevec_t___len__', + 'sizevec_t___ne__', + 'sizevec_t___setitem__', + 'sizevec_t__del', + 'sizevec_t_add_unique', + 'sizevec_t_at', + 'sizevec_t_begin', + 'sizevec_t_begin__SWIG_0', + 'sizevec_t_begin__SWIG_1', + 'sizevec_t_capacity', + 'sizevec_t_clear', + 'sizevec_t_empty', + 'sizevec_t_end', + 'sizevec_t_end__SWIG_0', + 'sizevec_t_end__SWIG_1', + 'sizevec_t_erase', + 'sizevec_t_erase__SWIG_0', + 'sizevec_t_erase__SWIG_1', + 'sizevec_t_extract', + 'sizevec_t_find', + 'sizevec_t_find__SWIG_0', + 'sizevec_t_find__SWIG_1', + 'sizevec_t_grow', + 'sizevec_t_has', + 'sizevec_t_inject', + 'sizevec_t_insert', + 'sizevec_t_pop_back', + 'sizevec_t_push_back', + 'sizevec_t_push_back__SWIG_0', + 'sizevec_t_push_back__SWIG_1', + 'sizevec_t_qclear', + 'sizevec_t_reserve', + 'sizevec_t_resize', + 'sizevec_t_resize__SWIG_0', + 'sizevec_t_resize__SWIG_1', + 'sizevec_t_size', + 'sizevec_t_swap', + 'sizevec_t_truncate', + 'skipped_func_t_count_get', + 'skipped_func_t_count_set', + 'skipped_func_t_pattern_id_get', + 'skipped_func_t_pattern_id_set', + 'skipped_funcs_t___getitem__', + 'skipped_funcs_t___len__', + 'skipped_funcs_t___setitem__', + 'skipped_funcs_t_at', + 'skipped_funcs_t_begin', + 'skipped_funcs_t_begin__SWIG_0', + 'skipped_funcs_t_begin__SWIG_1', + 'skipped_funcs_t_capacity', + 'skipped_funcs_t_clear', + 'skipped_funcs_t_empty', + 'skipped_funcs_t_end', + 'skipped_funcs_t_end__SWIG_0', + 'skipped_funcs_t_end__SWIG_1', + 'skipped_funcs_t_erase', + 'skipped_funcs_t_erase__SWIG_0', + 'skipped_funcs_t_erase__SWIG_1', + 'skipped_funcs_t_extract', + 'skipped_funcs_t_grow', + 'skipped_funcs_t_inject', + 'skipped_funcs_t_insert', + 'skipped_funcs_t_pop_back', + 'skipped_funcs_t_push_back', + 'skipped_funcs_t_push_back__SWIG_0', + 'skipped_funcs_t_push_back__SWIG_1', + 'skipped_funcs_t_qclear', + 'skipped_funcs_t_reserve', + 'skipped_funcs_t_resize', + 'skipped_funcs_t_resize__SWIG_0', + 'skipped_funcs_t_resize__SWIG_1', + 'skipped_funcs_t_size', + 'skipped_funcs_t_swap', + 'skipped_funcs_t_truncate', + 'snapshot_t___eq__', + 'snapshot_t___ge__', + 'snapshot_t___gt__', + 'snapshot_t___le__', + 'snapshot_t___lt__', + 'snapshot_t___ne__', + 'snapshot_t_children_get', + 'snapshot_t_children_set', + 'snapshot_t_clear', + 'snapshot_t_desc_get', + 'snapshot_t_desc_set', + 'snapshot_t_filename_get', + 'snapshot_t_filename_set', + 'snapshot_t_flags_get', + 'snapshot_t_flags_set', + 'snapshot_t_id_get', + 'snapshot_t_id_set', + 'soff_to_fpoff', + 'split_metadata', + 'split_sreg_range', + 'srcdbg_request_step_into', + 'srcdbg_request_step_over', + 'srcdbg_request_step_until_ret', + 'srcdbg_step_into', + 'srcdbg_step_over', + 'srcdbg_step_until_ret', + 'sreg_range_t_tag_get', + 'sreg_range_t_tag_set', + 'sreg_range_t_val_get', + 'sreg_range_t_val_set', + 'start_process', + 'std_out_segm_footer', + 'step_into', + 'step_over', + 'step_until_ret', + 'stkpnt_array___getitem__', + 'stkpnt_array___len__', + 'stkpnt_array___setitem__', + 'stkpnt_array_count_get', + 'stkpnt_array_data_get', + 'stkpnt_t___eq__', + 'stkpnt_t___ge__', + 'stkpnt_t___gt__', + 'stkpnt_t___le__', + 'stkpnt_t___lt__', + 'stkpnt_t___ne__', + 'stkpnt_t_compare', + 'stkpnt_t_ea_get', + 'stkpnt_t_ea_set', + 'stkpnt_t_spd_get', + 'stkpnt_t_spd_set', + 'stkpnts_t___eq__', + 'stkpnts_t___ge__', + 'stkpnts_t___gt__', + 'stkpnts_t___le__', + 'stkpnts_t___lt__', + 'stkpnts_t___ne__', + 'stkpnts_t_compare', + 'stkvar_flag', + 'stkvar_ref_t___eq__', + 'stkvar_ref_t___ge__', + 'stkvar_ref_t___gt__', + 'stkvar_ref_t___le__', + 'stkvar_ref_t___lt__', + 'stkvar_ref_t___ne__', + 'stkvar_ref_t_compare', + 'stkvar_ref_t_get_stkvar', + 'stkvar_ref_t_mba_get', + 'stkvar_ref_t_off_get', + 'stkvar_ref_t_off_set', + 'stkvar_ref_t_swap', + 'store_exceptions', + 'store_til', + 'str2ea', + 'str2reg', + 'str2user', + 'strarray', + 'strarray_t_code_get', + 'strarray_t_code_set', + 'strarray_t_text_get', + 'strarray_t_text_set', + 'string_info_t___lt__', + 'string_info_t_ea_get', + 'string_info_t_ea_set', + 'string_info_t_length_get', + 'string_info_t_length_set', + 'string_info_t_type_get', + 'string_info_t_type_set', + 'strlit_flag', + 'stroff_as_size', + 'stroff_flag', + 'strpath_ids_array___getitem__', + 'strpath_ids_array___len__', + 'strpath_ids_array___setitem__', + 'strpath_ids_array_data_get', + 'strpath_t___getIds', + 'strpath_t_delta_get', + 'strpath_t_delta_set', + 'strpath_t_ids_get', + 'strpath_t_ids_set', + 'strpath_t_len_get', + 'strpath_t_len_set', + 'stru_flag', + 'struc_t_age_get', + 'struc_t_age_set', + 'struc_t_from_til', + 'struc_t_get_alignment', + 'struc_t_get_member', + 'struc_t_has_union', + 'struc_t_id_get', + 'struc_t_id_set', + 'struc_t_is_choosable', + 'struc_t_is_frame', + 'struc_t_is_ghost', + 'struc_t_is_hidden', + 'struc_t_is_union', + 'struc_t_is_varstr', + 'struc_t_members_get', + 'struc_t_members_set', + 'struc_t_memqty_get', + 'struc_t_memqty_set', + 'struc_t_ordinal_get', + 'struc_t_ordinal_set', + 'struc_t_props_get', + 'struc_t_props_set', + 'struc_t_set_alignment', + 'struc_t_set_ghost', + 'struct_field_visitor_t_visit_field', + 'structplace_t_idx_get', + 'structplace_t_idx_set', + 'structplace_t_offset_get', + 'structplace_t_offset_set', + 'strvec_t___getitem__', + 'strvec_t___len__', + 'strvec_t___setitem__', + 'strvec_t_at', + 'strvec_t_begin', + 'strvec_t_begin__SWIG_0', + 'strvec_t_begin__SWIG_1', + 'strvec_t_capacity', + 'strvec_t_clear', + 'strvec_t_empty', + 'strvec_t_end', + 'strvec_t_end__SWIG_0', + 'strvec_t_end__SWIG_1', + 'strvec_t_erase', + 'strvec_t_erase__SWIG_0', + 'strvec_t_erase__SWIG_1', + 'strvec_t_extract', + 'strvec_t_grow', + 'strvec_t_inject', + 'strvec_t_insert', + 'strvec_t_pop_back', + 'strvec_t_push_back', + 'strvec_t_push_back__SWIG_0', + 'strvec_t_push_back__SWIG_1', + 'strvec_t_qclear', + 'strvec_t_reserve', + 'strvec_t_resize', + 'strvec_t_resize__SWIG_0', + 'strvec_t_resize__SWIG_1', + 'strvec_t_size', + 'strvec_t_swap', + 'strvec_t_truncate', + 'strwinsetup_t__get_strtypes', + 'strwinsetup_t__set_strtypes', + 'strwinsetup_t_display_only_existing_strings_get', + 'strwinsetup_t_display_only_existing_strings_set', + 'strwinsetup_t_ignore_heads_get', + 'strwinsetup_t_ignore_heads_set', + 'strwinsetup_t_is_initialized', + 'strwinsetup_t_minlen_get', + 'strwinsetup_t_minlen_set', + 'strwinsetup_t_only_7bit_get', + 'strwinsetup_t_only_7bit_set', + 'suspend_process', + 'suspend_thread', + 'sval_pointer_assign', + 'sval_pointer_cast', + 'sval_pointer_frompointer', + 'sval_pointer_value', + 'swap_idcvs', + 'swap_mcode_relation', + 'swapped_relation', + 'switch_info_t__from_ptrval__', + 'switch_info_t__get_values_lowcase', + 'switch_info_t__set_values_lowcase', + 'switch_info_t_assign', + 'switch_info_t_clear', + 'switch_info_t_custom_get', + 'switch_info_t_custom_set', + 'switch_info_t_defjump_get', + 'switch_info_t_defjump_set', + 'switch_info_t_elbase_get', + 'switch_info_t_elbase_set', + 'switch_info_t_expr_ea_get', + 'switch_info_t_expr_ea_set', + 'switch_info_t_flags_get', + 'switch_info_t_flags_set', + 'switch_info_t_get_jrange_vrange', + 'switch_info_t_get_jtable_element_size', + 'switch_info_t_get_jtable_size', + 'switch_info_t_get_lowcase', + 'switch_info_t_get_shift', + 'switch_info_t_get_version', + 'switch_info_t_get_vtable_element_size', + 'switch_info_t_has_default', + 'switch_info_t_has_elbase', + 'switch_info_t_ind_lowcase_get', + 'switch_info_t_ind_lowcase_set', + 'switch_info_t_is_custom', + 'switch_info_t_is_indirect', + 'switch_info_t_is_nolowcase', + 'switch_info_t_is_sparse', + 'switch_info_t_is_subtract', + 'switch_info_t_jcases_get', + 'switch_info_t_jcases_set', + 'switch_info_t_jumps_get', + 'switch_info_t_jumps_set', + 'switch_info_t_marks_get', + 'switch_info_t_marks_set', + 'switch_info_t_ncases_get', + 'switch_info_t_ncases_set', + 'switch_info_t_regdtype_get', + 'switch_info_t_regdtype_set', + 'switch_info_t_regnum_get', + 'switch_info_t_regnum_set', + 'switch_info_t_set_elbase', + 'switch_info_t_set_expr', + 'switch_info_t_set_jtable_element_size', + 'switch_info_t_set_jtable_size', + 'switch_info_t_set_shift', + 'switch_info_t_set_vtable_element_size', + 'switch_info_t_startea_get', + 'switch_info_t_startea_set', + 'switch_info_t_use_std_table', + 'sync_source_t___eq__', + 'sync_source_t___ne__', + 'sync_source_t_get_register', + 'sync_source_t_get_widget', + 'sync_source_t_is_register', + 'sync_source_t_is_widget', + 'sync_sources', + 'tag_addr', + 'tag_advance', + 'tag_remove', + 'tag_skipcode', + 'tag_skipcodes', + 'tag_strlen', + 'take_database_snapshot', + 'take_memory_snapshot', + 'tbyte_flag', + 'term_hexrays_plugin', + 'tev_info_reg_t_info_get', + 'tev_info_reg_t_info_set', + 'tev_info_reg_t_registers_get', + 'tev_info_reg_t_registers_set', + 'tev_info_t_ea_get', + 'tev_info_t_ea_set', + 'tev_info_t_tid_get', + 'tev_info_t_tid_set', + 'tev_info_t_type_get', + 'tev_info_t_type_set', + 'tev_reg_value_t_reg_idx_get', + 'tev_reg_value_t_reg_idx_set', + 'tev_reg_value_t_value_get', + 'tev_reg_value_t_value_set', + 'tev_reg_values_t___getitem__', + 'tev_reg_values_t___len__', + 'tev_reg_values_t___setitem__', + 'tev_reg_values_t_at', + 'tev_reg_values_t_begin', + 'tev_reg_values_t_begin__SWIG_0', + 'tev_reg_values_t_begin__SWIG_1', + 'tev_reg_values_t_capacity', + 'tev_reg_values_t_clear', + 'tev_reg_values_t_empty', + 'tev_reg_values_t_end', + 'tev_reg_values_t_end__SWIG_0', + 'tev_reg_values_t_end__SWIG_1', + 'tev_reg_values_t_erase', + 'tev_reg_values_t_erase__SWIG_0', + 'tev_reg_values_t_erase__SWIG_1', + 'tev_reg_values_t_extract', + 'tev_reg_values_t_grow', + 'tev_reg_values_t_inject', + 'tev_reg_values_t_insert', + 'tev_reg_values_t_pop_back', + 'tev_reg_values_t_push_back', + 'tev_reg_values_t_push_back__SWIG_0', + 'tev_reg_values_t_push_back__SWIG_1', + 'tev_reg_values_t_qclear', + 'tev_reg_values_t_reserve', + 'tev_reg_values_t_resize', + 'tev_reg_values_t_resize__SWIG_0', + 'tev_reg_values_t_resize__SWIG_1', + 'tev_reg_values_t_size', + 'tev_reg_values_t_swap', + 'tev_reg_values_t_truncate', + 'tevinforeg_vec_t___getitem__', + 'tevinforeg_vec_t___len__', + 'tevinforeg_vec_t___setitem__', + 'tevinforeg_vec_t_at', + 'tevinforeg_vec_t_begin', + 'tevinforeg_vec_t_begin__SWIG_0', + 'tevinforeg_vec_t_begin__SWIG_1', + 'tevinforeg_vec_t_capacity', + 'tevinforeg_vec_t_clear', + 'tevinforeg_vec_t_empty', + 'tevinforeg_vec_t_end', + 'tevinforeg_vec_t_end__SWIG_0', + 'tevinforeg_vec_t_end__SWIG_1', + 'tevinforeg_vec_t_erase', + 'tevinforeg_vec_t_erase__SWIG_0', + 'tevinforeg_vec_t_erase__SWIG_1', + 'tevinforeg_vec_t_extract', + 'tevinforeg_vec_t_grow', + 'tevinforeg_vec_t_inject', + 'tevinforeg_vec_t_insert', + 'tevinforeg_vec_t_pop_back', + 'tevinforeg_vec_t_push_back', + 'tevinforeg_vec_t_push_back__SWIG_0', + 'tevinforeg_vec_t_push_back__SWIG_1', + 'tevinforeg_vec_t_qclear', + 'tevinforeg_vec_t_reserve', + 'tevinforeg_vec_t_resize', + 'tevinforeg_vec_t_resize__SWIG_0', + 'tevinforeg_vec_t_resize__SWIG_1', + 'tevinforeg_vec_t_size', + 'tevinforeg_vec_t_swap', + 'tevinforeg_vec_t_truncate', + 'text_sink_t__print', + 'textctrl_info_t_assign', + 'textctrl_info_t_create', + 'textctrl_info_t_destroy', + 'textctrl_info_t_get_clink', + 'textctrl_info_t_get_clink_ptr', + 'textctrl_info_t_get_flags', + 'textctrl_info_t_get_tabsize', + 'textctrl_info_t_get_text', + 'textctrl_info_t_set_flags', + 'textctrl_info_t_set_tabsize', + 'textctrl_info_t_set_text', + 'thread_name_t_name_get', + 'thread_name_t_name_set', + 'thread_name_t_tid_get', + 'thread_name_t_tid_set', + 'throw_idc_exception', + 'tid_array___getitem__', + 'tid_array___setitem__', + 'tid_array_cast', + 'tid_array_frompointer', + 'til_symbol_t_name_get', + 'til_symbol_t_name_set', + 'til_symbol_t_til_get', + 'til_symbol_t_til_set', + 'til_t_base', + 'til_t_cc_get', + 'til_t_cc_set', + 'til_t_desc_get', + 'til_t_desc_set', + 'til_t_flags_get', + 'til_t_flags_set', + 'til_t_is_dirty', + 'til_t_name_get', + 'til_t_name_set', + 'til_t_nbases_get', + 'til_t_nbases_set', + 'til_t_nrefs_get', + 'til_t_nrefs_set', + 'til_t_nstreams_get', + 'til_t_nstreams_set', + 'til_t_set_dirty', + 'til_t_streams_get', + 'til_t_streams_set', + 'tinfo_t___eq__', + 'tinfo_t___ge__', + 'tinfo_t___gt__', + 'tinfo_t___le__', + 'tinfo_t___lt__', + 'tinfo_t___ne__', + 'tinfo_t___str__', + 'tinfo_t__print', + 'tinfo_t_append_covered', + 'tinfo_t_calc_gaps', + 'tinfo_t_calc_purged_bytes', + 'tinfo_t_calc_score', + 'tinfo_t_calc_udt_aligns', + 'tinfo_t_change_sign', + 'tinfo_t_clear', + 'tinfo_t_clr_const', + 'tinfo_t_clr_const_volatile', + 'tinfo_t_clr_volatile', + 'tinfo_t_compare', + 'tinfo_t_compare_with', + 'tinfo_t_convert_array_to_ptr', + 'tinfo_t_copy', + 'tinfo_t_create_array', + 'tinfo_t_create_array__SWIG_0', + 'tinfo_t_create_array__SWIG_1', + 'tinfo_t_create_bitfield', + 'tinfo_t_create_bitfield__SWIG_0', + 'tinfo_t_create_bitfield__SWIG_1', + 'tinfo_t_create_enum', + 'tinfo_t_create_forward_decl', + 'tinfo_t_create_func', + 'tinfo_t_create_ptr', + 'tinfo_t_create_ptr__SWIG_0', + 'tinfo_t_create_ptr__SWIG_1', + 'tinfo_t_create_simple_type', + 'tinfo_t_create_typedef', + 'tinfo_t_create_typedef__SWIG_0', + 'tinfo_t_create_typedef__SWIG_1', + 'tinfo_t_create_typedef__SWIG_2', + 'tinfo_t_create_udt', + 'tinfo_t_del_attr', + 'tinfo_t_del_attrs', + 'tinfo_t_deserialize', + 'tinfo_t_deserialize__SWIG_0', + 'tinfo_t_deserialize__SWIG_1', + 'tinfo_t_dstr', + 'tinfo_t_empty', + 'tinfo_t_equals_to', + 'tinfo_t_find_udt_member', + 'tinfo_t_get_array_details', + 'tinfo_t_get_array_element', + 'tinfo_t_get_array_nelems', + 'tinfo_t_get_attr', + 'tinfo_t_get_attrs', + 'tinfo_t_get_bitfield_details', + 'tinfo_t_get_declalign', + 'tinfo_t_get_decltype', + 'tinfo_t_get_enum_base_type', + 'tinfo_t_get_enum_details', + 'tinfo_t_get_final_ordinal', + 'tinfo_t_get_final_type_name', + 'tinfo_t_get_func_details', + 'tinfo_t_get_modifiers', + 'tinfo_t_get_named_type', + 'tinfo_t_get_nargs', + 'tinfo_t_get_next_type_name', + 'tinfo_t_get_nth_arg', + 'tinfo_t_get_numbered_type', + 'tinfo_t_get_onemember_type', + 'tinfo_t_get_ordinal', + 'tinfo_t_get_pointed_object', + 'tinfo_t_get_ptr_details', + 'tinfo_t_get_ptrarr_object', + 'tinfo_t_get_ptrarr_objsize', + 'tinfo_t_get_realtype', + 'tinfo_t_get_rettype', + 'tinfo_t_get_sign', + 'tinfo_t_get_size', + 'tinfo_t_get_stock', + 'tinfo_t_get_til', + 'tinfo_t_get_type_name', + 'tinfo_t_get_udt_details', + 'tinfo_t_get_udt_nmembers', + 'tinfo_t_get_unpadded_size', + 'tinfo_t_has_details', + 'tinfo_t_has_vftable', + 'tinfo_t_is_anonymous_udt', + 'tinfo_t_is_arithmetic', + 'tinfo_t_is_array', + 'tinfo_t_is_bitfield', + 'tinfo_t_is_bool', + 'tinfo_t_is_castable_to', + 'tinfo_t_is_char', + 'tinfo_t_is_complex', + 'tinfo_t_is_const', + 'tinfo_t_is_correct', + 'tinfo_t_is_decl_array', + 'tinfo_t_is_decl_bitfield', + 'tinfo_t_is_decl_bool', + 'tinfo_t_is_decl_char', + 'tinfo_t_is_decl_complex', + 'tinfo_t_is_decl_const', + 'tinfo_t_is_decl_double', + 'tinfo_t_is_decl_enum', + 'tinfo_t_is_decl_float', + 'tinfo_t_is_decl_floating', + 'tinfo_t_is_decl_func', + 'tinfo_t_is_decl_int', + 'tinfo_t_is_decl_int128', + 'tinfo_t_is_decl_int16', + 'tinfo_t_is_decl_int32', + 'tinfo_t_is_decl_int64', + 'tinfo_t_is_decl_last', + 'tinfo_t_is_decl_ldouble', + 'tinfo_t_is_decl_paf', + 'tinfo_t_is_decl_partial', + 'tinfo_t_is_decl_ptr', + 'tinfo_t_is_decl_struct', + 'tinfo_t_is_decl_sue', + 'tinfo_t_is_decl_tbyte', + 'tinfo_t_is_decl_typedef', + 'tinfo_t_is_decl_uchar', + 'tinfo_t_is_decl_udt', + 'tinfo_t_is_decl_uint', + 'tinfo_t_is_decl_uint128', + 'tinfo_t_is_decl_uint16', + 'tinfo_t_is_decl_uint32', + 'tinfo_t_is_decl_uint64', + 'tinfo_t_is_decl_union', + 'tinfo_t_is_decl_unknown', + 'tinfo_t_is_decl_void', + 'tinfo_t_is_decl_volatile', + 'tinfo_t_is_double', + 'tinfo_t_is_empty_udt', + 'tinfo_t_is_enum', + 'tinfo_t_is_ext_arithmetic', + 'tinfo_t_is_ext_integral', + 'tinfo_t_is_float', + 'tinfo_t_is_floating', + 'tinfo_t_is_forward_decl', + 'tinfo_t_is_from_subtil', + 'tinfo_t_is_func', + 'tinfo_t_is_funcptr', + 'tinfo_t_is_high_func', + 'tinfo_t_is_int', + 'tinfo_t_is_int128', + 'tinfo_t_is_int16', + 'tinfo_t_is_int32', + 'tinfo_t_is_int64', + 'tinfo_t_is_integral', + 'tinfo_t_is_ldouble', + 'tinfo_t_is_manually_castable_to', + 'tinfo_t_is_one_fpval', + 'tinfo_t_is_paf', + 'tinfo_t_is_partial', + 'tinfo_t_is_ptr', + 'tinfo_t_is_ptr_or_array', + 'tinfo_t_is_purging_cc', + 'tinfo_t_is_pvoid', + 'tinfo_t_is_scalar', + 'tinfo_t_is_shifted_ptr', + 'tinfo_t_is_signed', + 'tinfo_t_is_small_udt', + 'tinfo_t_is_sse_type', + 'tinfo_t_is_struct', + 'tinfo_t_is_sue', + 'tinfo_t_is_tbyte', + 'tinfo_t_is_typeref', + 'tinfo_t_is_uchar', + 'tinfo_t_is_udt', + 'tinfo_t_is_uint', + 'tinfo_t_is_uint128', + 'tinfo_t_is_uint16', + 'tinfo_t_is_uint32', + 'tinfo_t_is_uint64', + 'tinfo_t_is_union', + 'tinfo_t_is_unknown', + 'tinfo_t_is_unsigned', + 'tinfo_t_is_user_cc', + 'tinfo_t_is_vararg_cc', + 'tinfo_t_is_varstruct', + 'tinfo_t_is_vftable', + 'tinfo_t_is_void', + 'tinfo_t_is_volatile', + 'tinfo_t_is_well_defined', + 'tinfo_t_present', + 'tinfo_t_read_bitfield_value', + 'tinfo_t_remove_ptr_or_array', + 'tinfo_t_requires_qualifier', + 'tinfo_t_serialize', + 'tinfo_t_set_attr', + 'tinfo_t_set_attrs', + 'tinfo_t_set_const', + 'tinfo_t_set_declalign', + 'tinfo_t_set_modifiers', + 'tinfo_t_set_named_type', + 'tinfo_t_set_numbered_type', + 'tinfo_t_set_symbol_type', + 'tinfo_t_set_volatile', + 'tinfo_t_swap', + 'tinfo_t_write_bitfield_value', + 'tinfo_visitor_t_apply_to', + 'tinfo_visitor_t_prune_now', + 'tinfo_visitor_t_state_get', + 'tinfo_visitor_t_state_set', + 'tinfo_visitor_t_visit_type', + 'to_ea', + 'toggle_bnot', + 'toggle_lzero', + 'toggle_sign', + 'treeloc_t___eq__', + 'treeloc_t___lt__', + 'treeloc_t_ea_get', + 'treeloc_t_ea_set', + 'treeloc_t_itp_get', + 'treeloc_t_itp_set', + 'try_handler_t_clear', + 'try_handler_t_disp_get', + 'try_handler_t_disp_set', + 'try_handler_t_fpreg_get', + 'try_handler_t_fpreg_set', + 'try_to_add_libfunc', + 'tryblk_t_clear', + 'tryblk_t_cpp', + 'tryblk_t_empty', + 'tryblk_t_get_kind', + 'tryblk_t_is_cpp', + 'tryblk_t_is_seh', + 'tryblk_t_level_get', + 'tryblk_t_level_set', + 'tryblk_t_seh', + 'tryblk_t_set_cpp', + 'tryblk_t_set_seh', + 'tryblks_t___eq__', + 'tryblks_t___getitem__', + 'tryblks_t___len__', + 'tryblks_t___ne__', + 'tryblks_t___setitem__', + 'tryblks_t__del', + 'tryblks_t_add_unique', + 'tryblks_t_at', + 'tryblks_t_begin', + 'tryblks_t_begin__SWIG_0', + 'tryblks_t_begin__SWIG_1', + 'tryblks_t_capacity', + 'tryblks_t_clear', + 'tryblks_t_empty', + 'tryblks_t_end', + 'tryblks_t_end__SWIG_0', + 'tryblks_t_end__SWIG_1', + 'tryblks_t_erase', + 'tryblks_t_erase__SWIG_0', + 'tryblks_t_erase__SWIG_1', + 'tryblks_t_extract', + 'tryblks_t_find', + 'tryblks_t_find__SWIG_0', + 'tryblks_t_find__SWIG_1', + 'tryblks_t_grow', + 'tryblks_t_has', + 'tryblks_t_inject', + 'tryblks_t_insert', + 'tryblks_t_pop_back', + 'tryblks_t_push_back', + 'tryblks_t_push_back__SWIG_0', + 'tryblks_t_push_back__SWIG_1', + 'tryblks_t_qclear', + 'tryblks_t_reserve', + 'tryblks_t_resize', + 'tryblks_t_resize__SWIG_0', + 'tryblks_t_resize__SWIG_1', + 'tryblks_t_size', + 'tryblks_t_swap', + 'tryblks_t_truncate', + 'twinpos_t___eq__', + 'twinpos_t___ne__', + 'twinpos_t_at_get', + 'twinpos_t_at_set', + 'twinpos_t_x_get', + 'twinpos_t_x_set', + 'type_attr_t___ge__', + 'type_attr_t___lt__', + 'type_attr_t_key_get', + 'type_attr_t_key_set', + 'type_attr_t_value_get', + 'type_attr_t_value_set', + 'type_attrs_t___getitem__', + 'type_attrs_t___len__', + 'type_attrs_t___setitem__', + 'type_attrs_t_at', + 'type_attrs_t_begin', + 'type_attrs_t_begin__SWIG_0', + 'type_attrs_t_begin__SWIG_1', + 'type_attrs_t_capacity', + 'type_attrs_t_clear', + 'type_attrs_t_empty', + 'type_attrs_t_end', + 'type_attrs_t_end__SWIG_0', + 'type_attrs_t_end__SWIG_1', + 'type_attrs_t_erase', + 'type_attrs_t_erase__SWIG_0', + 'type_attrs_t_erase__SWIG_1', + 'type_attrs_t_extract', + 'type_attrs_t_grow', + 'type_attrs_t_inject', + 'type_attrs_t_insert', + 'type_attrs_t_pop_back', + 'type_attrs_t_push_back', + 'type_attrs_t_push_back__SWIG_0', + 'type_attrs_t_push_back__SWIG_1', + 'type_attrs_t_qclear', + 'type_attrs_t_reserve', + 'type_attrs_t_resize', + 'type_attrs_t_resize__SWIG_0', + 'type_attrs_t_resize__SWIG_1', + 'type_attrs_t_size', + 'type_attrs_t_swap', + 'type_attrs_t_truncate', + 'type_mods_t_clear', + 'type_mods_t_cmt_get', + 'type_mods_t_cmt_set', + 'type_mods_t_flags_get', + 'type_mods_t_flags_set', + 'type_mods_t_has_cmt', + 'type_mods_t_has_info', + 'type_mods_t_has_name', + 'type_mods_t_has_type', + 'type_mods_t_name_get', + 'type_mods_t_name_set', + 'type_mods_t_set_new_cmt', + 'type_mods_t_set_new_name', + 'type_mods_t_set_new_type', + 'type_mods_t_type_get', + 'type_mods_t_type_set', + 'typedef_type_data_t_is_ordref_get', + 'typedef_type_data_t_is_ordref_set', + 'typedef_type_data_t_resolve_get', + 'typedef_type_data_t_resolve_set', + 'typedef_type_data_t_swap', + 'typedef_type_data_t_til_get', + 'typedef_type_data_t_til_set', + 'uchar_array___getitem__', + 'uchar_array___setitem__', + 'uchar_array_cast', + 'uchar_array_frompointer', + 'udc_filter_t_apply', + 'udc_filter_t_init', + 'udc_filter_t_match', + 'udcall_map_begin', + 'udcall_map_clear', + 'udcall_map_end', + 'udcall_map_erase', + 'udcall_map_find', + 'udcall_map_first', + 'udcall_map_free', + 'udcall_map_insert', + 'udcall_map_iterator_t___eq__', + 'udcall_map_iterator_t___ne__', + 'udcall_map_iterator_t_x_get', + 'udcall_map_iterator_t_x_set', + 'udcall_map_new', + 'udcall_map_next', + 'udcall_map_prev', + 'udcall_map_second', + 'udcall_map_size', + 'udcall_t___eq__', + 'udcall_t___ge__', + 'udcall_t___gt__', + 'udcall_t___le__', + 'udcall_t___lt__', + 'udcall_t___ne__', + 'udcall_t_compare', + 'udcall_t_name_get', + 'udcall_t_name_set', + 'udcall_t_tif_get', + 'udcall_t_tif_set', + 'udt_member_t___eq__', + 'udt_member_t___lt__', + 'udt_member_t___ne__', + 'udt_member_t_begin', + 'udt_member_t_clr_baseclass', + 'udt_member_t_clr_unaligned', + 'udt_member_t_clr_vftable', + 'udt_member_t_clr_virtbase', + 'udt_member_t_cmt_get', + 'udt_member_t_cmt_set', + 'udt_member_t_effalign_get', + 'udt_member_t_effalign_set', + 'udt_member_t_end', + 'udt_member_t_fda_get', + 'udt_member_t_fda_set', + 'udt_member_t_is_anonymous_udm', + 'udt_member_t_is_baseclass', + 'udt_member_t_is_bitfield', + 'udt_member_t_is_unaligned', + 'udt_member_t_is_vftable', + 'udt_member_t_is_virtbase', + 'udt_member_t_is_zero_bitfield', + 'udt_member_t_name_get', + 'udt_member_t_name_set', + 'udt_member_t_offset_get', + 'udt_member_t_offset_set', + 'udt_member_t_set_baseclass', + 'udt_member_t_set_unaligned', + 'udt_member_t_set_vftable', + 'udt_member_t_set_virtbase', + 'udt_member_t_size_get', + 'udt_member_t_size_set', + 'udt_member_t_swap', + 'udt_member_t_tafld_bits_get', + 'udt_member_t_tafld_bits_set', + 'udt_member_t_type_get', + 'udt_member_t_type_set', + 'udt_type_data_t_effalign_get', + 'udt_type_data_t_effalign_set', + 'udt_type_data_t_is_cppobj', + 'udt_type_data_t_is_last_baseclass', + 'udt_type_data_t_is_msstruct', + 'udt_type_data_t_is_unaligned', + 'udt_type_data_t_is_union_get', + 'udt_type_data_t_is_union_set', + 'udt_type_data_t_is_vftable', + 'udt_type_data_t_pack_get', + 'udt_type_data_t_pack_set', + 'udt_type_data_t_sda_get', + 'udt_type_data_t_sda_set', + 'udt_type_data_t_swap', + 'udt_type_data_t_taudt_bits_get', + 'udt_type_data_t_taudt_bits_set', + 'udt_type_data_t_total_size_get', + 'udt_type_data_t_total_size_set', + 'udt_type_data_t_unpadded_size_get', + 'udt_type_data_t_unpadded_size_set', + 'udtmembervec_t___eq__', + 'udtmembervec_t___getitem__', + 'udtmembervec_t___len__', + 'udtmembervec_t___ne__', + 'udtmembervec_t___setitem__', + 'udtmembervec_t__del', + 'udtmembervec_t_add_unique', + 'udtmembervec_t_at', + 'udtmembervec_t_begin', + 'udtmembervec_t_begin__SWIG_0', + 'udtmembervec_t_begin__SWIG_1', + 'udtmembervec_t_capacity', + 'udtmembervec_t_clear', + 'udtmembervec_t_empty', + 'udtmembervec_t_end', + 'udtmembervec_t_end__SWIG_0', + 'udtmembervec_t_end__SWIG_1', + 'udtmembervec_t_erase', + 'udtmembervec_t_erase__SWIG_0', + 'udtmembervec_t_erase__SWIG_1', + 'udtmembervec_t_extract', + 'udtmembervec_t_find', + 'udtmembervec_t_find__SWIG_0', + 'udtmembervec_t_find__SWIG_1', + 'udtmembervec_t_grow', + 'udtmembervec_t_has', + 'udtmembervec_t_inject', + 'udtmembervec_t_insert', + 'udtmembervec_t_pop_back', + 'udtmembervec_t_push_back', + 'udtmembervec_t_push_back__SWIG_0', + 'udtmembervec_t_push_back__SWIG_1', + 'udtmembervec_t_qclear', + 'udtmembervec_t_reserve', + 'udtmembervec_t_resize', + 'udtmembervec_t_resize__SWIG_0', + 'udtmembervec_t_resize__SWIG_1', + 'udtmembervec_t_size', + 'udtmembervec_t_swap', + 'udtmembervec_t_truncate', + 'ui_load_new_file', + 'ui_run_debugger', + 'ui_stroff_applicator_t_apply', + 'ui_stroff_op_t___eq__', + 'ui_stroff_op_t___ne__', + 'ui_stroff_op_t_offset_get', + 'ui_stroff_op_t_offset_set', + 'ui_stroff_op_t_text_get', + 'ui_stroff_op_t_text_set', + 'ui_stroff_ops_t___eq__', + 'ui_stroff_ops_t___getitem__', + 'ui_stroff_ops_t___len__', + 'ui_stroff_ops_t___ne__', + 'ui_stroff_ops_t___setitem__', + 'ui_stroff_ops_t__del', + 'ui_stroff_ops_t_add_unique', + 'ui_stroff_ops_t_at', + 'ui_stroff_ops_t_begin', + 'ui_stroff_ops_t_begin__SWIG_0', + 'ui_stroff_ops_t_begin__SWIG_1', + 'ui_stroff_ops_t_capacity', + 'ui_stroff_ops_t_clear', + 'ui_stroff_ops_t_empty', + 'ui_stroff_ops_t_end', + 'ui_stroff_ops_t_end__SWIG_0', + 'ui_stroff_ops_t_end__SWIG_1', + 'ui_stroff_ops_t_erase', + 'ui_stroff_ops_t_erase__SWIG_0', + 'ui_stroff_ops_t_erase__SWIG_1', + 'ui_stroff_ops_t_extract', + 'ui_stroff_ops_t_find', + 'ui_stroff_ops_t_find__SWIG_0', + 'ui_stroff_ops_t_find__SWIG_1', + 'ui_stroff_ops_t_grow', + 'ui_stroff_ops_t_has', + 'ui_stroff_ops_t_inject', + 'ui_stroff_ops_t_insert', + 'ui_stroff_ops_t_pop_back', + 'ui_stroff_ops_t_push_back', + 'ui_stroff_ops_t_push_back__SWIG_0', + 'ui_stroff_ops_t_push_back__SWIG_1', + 'ui_stroff_ops_t_qclear', + 'ui_stroff_ops_t_reserve', + 'ui_stroff_ops_t_resize', + 'ui_stroff_ops_t_resize__SWIG_0', + 'ui_stroff_ops_t_resize__SWIG_1', + 'ui_stroff_ops_t_size', + 'ui_stroff_ops_t_swap', + 'ui_stroff_ops_t_truncate', + 'uintvec_t___eq__', + 'uintvec_t___getitem__', + 'uintvec_t___len__', + 'uintvec_t___ne__', + 'uintvec_t___setitem__', + 'uintvec_t__del', + 'uintvec_t_add_unique', + 'uintvec_t_at', + 'uintvec_t_begin', + 'uintvec_t_begin__SWIG_0', + 'uintvec_t_begin__SWIG_1', + 'uintvec_t_capacity', + 'uintvec_t_clear', + 'uintvec_t_empty', + 'uintvec_t_end', + 'uintvec_t_end__SWIG_0', + 'uintvec_t_end__SWIG_1', + 'uintvec_t_erase', + 'uintvec_t_erase__SWIG_0', + 'uintvec_t_erase__SWIG_1', + 'uintvec_t_extract', + 'uintvec_t_find', + 'uintvec_t_find__SWIG_0', + 'uintvec_t_find__SWIG_1', + 'uintvec_t_has', + 'uintvec_t_inject', + 'uintvec_t_insert', + 'uintvec_t_pop_back', + 'uintvec_t_push_back', + 'uintvec_t_push_back__SWIG_0', + 'uintvec_t_push_back__SWIG_1', + 'uintvec_t_qclear', + 'uintvec_t_reserve', + 'uintvec_t_resize', + 'uintvec_t_resize__SWIG_0', + 'uintvec_t_resize__SWIG_1', + 'uintvec_t_size', + 'uintvec_t_swap', + 'uintvec_t_truncate', + 'ulonglongvec_t___eq__', + 'ulonglongvec_t___getitem__', + 'ulonglongvec_t___len__', + 'ulonglongvec_t___ne__', + 'ulonglongvec_t___setitem__', + 'ulonglongvec_t__del', + 'ulonglongvec_t_add_unique', + 'ulonglongvec_t_at', + 'ulonglongvec_t_begin', + 'ulonglongvec_t_begin__SWIG_0', + 'ulonglongvec_t_begin__SWIG_1', + 'ulonglongvec_t_capacity', + 'ulonglongvec_t_clear', + 'ulonglongvec_t_empty', + 'ulonglongvec_t_end', + 'ulonglongvec_t_end__SWIG_0', + 'ulonglongvec_t_end__SWIG_1', + 'ulonglongvec_t_erase', + 'ulonglongvec_t_erase__SWIG_0', + 'ulonglongvec_t_erase__SWIG_1', + 'ulonglongvec_t_extract', + 'ulonglongvec_t_find', + 'ulonglongvec_t_find__SWIG_0', + 'ulonglongvec_t_find__SWIG_1', + 'ulonglongvec_t_has', + 'ulonglongvec_t_inject', + 'ulonglongvec_t_insert', + 'ulonglongvec_t_pop_back', + 'ulonglongvec_t_push_back', + 'ulonglongvec_t_push_back__SWIG_0', + 'ulonglongvec_t_push_back__SWIG_1', + 'ulonglongvec_t_qclear', + 'ulonglongvec_t_reserve', + 'ulonglongvec_t_resize', + 'ulonglongvec_t_resize__SWIG_0', + 'ulonglongvec_t_resize__SWIG_1', + 'ulonglongvec_t_size', + 'ulonglongvec_t_swap', + 'ulonglongvec_t_truncate', + 'unhide_border', + 'unhide_item', + 'unmark_selection', + 'unpack_idcobj_from_bv', + 'unpack_idcobj_from_idb', + 'unpack_object_from_bv', + 'unpack_object_from_idb', + 'unregister_action', + 'unregister_custom_data_format', + 'unregister_custom_data_type', + 'unregister_timer', + 'update_action_checkable', + 'update_action_checked', + 'update_action_icon', + 'update_action_label', + 'update_action_shortcut', + 'update_action_state', + 'update_action_tooltip', + 'update_action_visibility', + 'update_bpt', + 'update_extra_cmt', + 'update_fpd', + 'update_func', + 'update_hidden_range', + 'update_segm', + 'use_mapping', + 'user_cancelled', + 'user_cmts_begin', + 'user_cmts_clear', + 'user_cmts_end', + 'user_cmts_erase', + 'user_cmts_find', + 'user_cmts_first', + 'user_cmts_free', + 'user_cmts_insert', + 'user_cmts_iterator_t___eq__', + 'user_cmts_iterator_t___ne__', + 'user_cmts_iterator_t_x_get', + 'user_cmts_iterator_t_x_set', + 'user_cmts_new', + 'user_cmts_next', + 'user_cmts_prev', + 'user_cmts_second', + 'user_cmts_size', + 'user_cmts_t_at', + 'user_cmts_t_size', + 'user_graph_place_t_node_get', + 'user_graph_place_t_node_set', + 'user_identification_t_email_get', + 'user_identification_t_email_set', + 'user_identification_t_license_id_get', + 'user_identification_t_license_id_set', + 'user_identification_t_user_name_get', + 'user_identification_t_user_name_set', + 'user_iflags_begin', + 'user_iflags_clear', + 'user_iflags_end', + 'user_iflags_erase', + 'user_iflags_find', + 'user_iflags_first', + 'user_iflags_free', + 'user_iflags_insert', + 'user_iflags_iterator_t___eq__', + 'user_iflags_iterator_t___ne__', + 'user_iflags_iterator_t_x_get', + 'user_iflags_iterator_t_x_set', + 'user_iflags_new', + 'user_iflags_next', + 'user_iflags_prev', + 'user_iflags_second', + 'user_iflags_size', + 'user_iflags_t_at', + 'user_iflags_t_size', + 'user_labels_begin', + 'user_labels_clear', + 'user_labels_end', + 'user_labels_erase', + 'user_labels_find', + 'user_labels_first', + 'user_labels_free', + 'user_labels_insert', + 'user_labels_iterator_t___eq__', + 'user_labels_iterator_t___ne__', + 'user_labels_iterator_t_x_get', + 'user_labels_iterator_t_x_set', + 'user_labels_new', + 'user_labels_next', + 'user_labels_prev', + 'user_labels_second', + 'user_labels_size', + 'user_labels_t_at', + 'user_labels_t_size', + 'user_lvar_modifier_t_modify_lvars', + 'user_numforms_begin', + 'user_numforms_clear', + 'user_numforms_end', + 'user_numforms_erase', + 'user_numforms_find', + 'user_numforms_first', + 'user_numforms_free', + 'user_numforms_insert', + 'user_numforms_iterator_t___eq__', + 'user_numforms_iterator_t___ne__', + 'user_numforms_iterator_t_x_get', + 'user_numforms_iterator_t_x_set', + 'user_numforms_new', + 'user_numforms_next', + 'user_numforms_prev', + 'user_numforms_second', + 'user_numforms_size', + 'user_numforms_t_at', + 'user_numforms_t_size', + 'user_stkpnt_t_delta_get', + 'user_stkpnt_t_delta_set', + 'user_stkpnts_t___getitem__', + 'user_stkpnts_t___len__', + 'user_stkpnts_t___setitem__', + 'user_stkpnts_t_at', + 'user_stkpnts_t_begin', + 'user_stkpnts_t_begin__SWIG_0', + 'user_stkpnts_t_begin__SWIG_1', + 'user_stkpnts_t_capacity', + 'user_stkpnts_t_clear', + 'user_stkpnts_t_empty', + 'user_stkpnts_t_end', + 'user_stkpnts_t_end__SWIG_0', + 'user_stkpnts_t_end__SWIG_1', + 'user_stkpnts_t_erase', + 'user_stkpnts_t_erase__SWIG_0', + 'user_stkpnts_t_erase__SWIG_1', + 'user_stkpnts_t_extract', + 'user_stkpnts_t_grow', + 'user_stkpnts_t_inject', + 'user_stkpnts_t_insert', + 'user_stkpnts_t_pop_back', + 'user_stkpnts_t_push_back', + 'user_stkpnts_t_push_back__SWIG_0', + 'user_stkpnts_t_push_back__SWIG_1', + 'user_stkpnts_t_qclear', + 'user_stkpnts_t_reserve', + 'user_stkpnts_t_resize', + 'user_stkpnts_t_resize__SWIG_0', + 'user_stkpnts_t_resize__SWIG_1', + 'user_stkpnts_t_size', + 'user_stkpnts_t_swap', + 'user_stkpnts_t_truncate', + 'user_unions_begin', + 'user_unions_clear', + 'user_unions_end', + 'user_unions_erase', + 'user_unions_find', + 'user_unions_first', + 'user_unions_free', + 'user_unions_insert', + 'user_unions_iterator_t___eq__', + 'user_unions_iterator_t___ne__', + 'user_unions_iterator_t_x_get', + 'user_unions_iterator_t_x_set', + 'user_unions_new', + 'user_unions_next', + 'user_unions_prev', + 'user_unions_second', + 'user_unions_size', + 'user_unions_t_at', + 'user_unions_t_size', + 'uses_modsp', + 'uval_array___getitem__', + 'uval_array___setitem__', + 'uval_array_cast', + 'uval_array_frompointer', + 'uval_ivl_ivlset_t___eq__', + 'uval_ivl_ivlset_t___ne__', + 'uval_ivl_ivlset_t_all_values', + 'uval_ivl_ivlset_t_begin', + 'uval_ivl_ivlset_t_begin__SWIG_0', + 'uval_ivl_ivlset_t_begin__SWIG_1', + 'uval_ivl_ivlset_t_clear', + 'uval_ivl_ivlset_t_empty', + 'uval_ivl_ivlset_t_end', + 'uval_ivl_ivlset_t_end__SWIG_0', + 'uval_ivl_ivlset_t_end__SWIG_1', + 'uval_ivl_ivlset_t_getivl', + 'uval_ivl_ivlset_t_lastivl', + 'uval_ivl_ivlset_t_nivls', + 'uval_ivl_ivlset_t_qclear', + 'uval_ivl_ivlset_t_set_all_values', + 'uval_ivl_ivlset_t_single_value', + 'uval_ivl_ivlset_t_swap', + 'uval_ivl_t_end', + 'uval_ivl_t_last', + 'uval_ivl_t_off_get', + 'uval_ivl_t_off_set', + 'uval_ivl_t_size_get', + 'uval_ivl_t_size_set', + 'uval_ivl_t_valid', + 'validate_idb_names', + 'validate_name', + 'valrng_t___eq__', + 'valrng_t___ge__', + 'valrng_t___gt__', + 'valrng_t___le__', + 'valrng_t___lt__', + 'valrng_t___ne__', + 'valrng_t__deregister', + 'valrng_t__print', + 'valrng_t__register', + 'valrng_t_all_values', + 'valrng_t_compare', + 'valrng_t_cvt_to_cmp', + 'valrng_t_cvt_to_single_value', + 'valrng_t_dstr', + 'valrng_t_empty', + 'valrng_t_get_size', + 'valrng_t_has', + 'valrng_t_intersect_with', + 'valrng_t_inverse', + 'valrng_t_is_unknown', + 'valrng_t_max_svalue', + 'valrng_t_max_svalue__SWIG_0', + 'valrng_t_max_svalue__SWIG_1', + 'valrng_t_max_value', + 'valrng_t_max_value__SWIG_0', + 'valrng_t_max_value__SWIG_1', + 'valrng_t_min_svalue', + 'valrng_t_min_svalue__SWIG_0', + 'valrng_t_min_svalue__SWIG_1', + 'valrng_t_reduce_size', + 'valrng_t_set_all', + 'valrng_t_set_cmp', + 'valrng_t_set_eq', + 'valrng_t_set_none', + 'valrng_t_set_unk', + 'valrng_t_swap', + 'valrng_t_unite_with', + 'valstr_t_info_get', + 'valstr_t_info_set', + 'valstr_t_length_get', + 'valstr_t_length_set', + 'valstr_t_members_get', + 'valstr_t_members_set', + 'valstr_t_oneline_get', + 'valstr_t_oneline_set', + 'valstr_t_props_get', + 'valstr_t_props_set', + 'valstrvec_t___getitem__', + 'valstrvec_t___len__', + 'valstrvec_t___setitem__', + 'valstrvec_t_at', + 'valstrvec_t_begin', + 'valstrvec_t_begin__SWIG_0', + 'valstrvec_t_begin__SWIG_1', + 'valstrvec_t_capacity', + 'valstrvec_t_clear', + 'valstrvec_t_empty', + 'valstrvec_t_end', + 'valstrvec_t_end__SWIG_0', + 'valstrvec_t_end__SWIG_1', + 'valstrvec_t_erase', + 'valstrvec_t_erase__SWIG_0', + 'valstrvec_t_erase__SWIG_1', + 'valstrvec_t_extract', + 'valstrvec_t_grow', + 'valstrvec_t_inject', + 'valstrvec_t_insert', + 'valstrvec_t_pop_back', + 'valstrvec_t_push_back', + 'valstrvec_t_push_back__SWIG_0', + 'valstrvec_t_push_back__SWIG_1', + 'valstrvec_t_qclear', + 'valstrvec_t_reserve', + 'valstrvec_t_resize', + 'valstrvec_t_resize__SWIG_0', + 'valstrvec_t_resize__SWIG_1', + 'valstrvec_t_size', + 'valstrvec_t_swap', + 'valstrvec_t_truncate', + 'var_ref_t___eq__', + 'var_ref_t___ge__', + 'var_ref_t___gt__', + 'var_ref_t___le__', + 'var_ref_t___lt__', + 'var_ref_t___ne__', + 'var_ref_t_compare', + 'var_ref_t_idx_get', + 'var_ref_t_idx_set', + 'var_ref_t_mba_get', + 'var_ref_t_mba_set', + 'vc_printer_t_func_get', + 'vc_printer_t_func_set', + 'vc_printer_t_lastchar_get', + 'vc_printer_t_lastchar_set', + 'vc_printer_t_oneliner', + 'vd_failure_t_desc', + 'vd_failure_t_hf_get', + 'vd_failure_t_hf_set', + 'vd_printer_t__print', + 'vd_printer_t__print__varargs__', + 'vd_printer_t_hdrlines_get', + 'vd_printer_t_hdrlines_set', + 'vd_printer_t_tmpbuf_get', + 'vd_printer_t_tmpbuf_set', + 'vdloc_t___eq__', + 'vdloc_t___ge__', + 'vdloc_t___gt__', + 'vdloc_t___le__', + 'vdloc_t___lt__', + 'vdloc_t___ne__', + 'vdloc_t__set_reg1', + 'vdloc_t_compare', + 'vdloc_t_is_aliasable', + 'vdloc_t_reg1', + 'vdloc_t_set_reg1', + 'vdui_t_calc_cmt_type', + 'vdui_t_cfunc_get', + 'vdui_t_cfunc_set', + 'vdui_t_clear', + 'vdui_t_collapse_item', + 'vdui_t_collapse_lvars', + 'vdui_t_cpos_get', + 'vdui_t_cpos_set', + 'vdui_t_ct_get', + 'vdui_t_ct_set', + 'vdui_t_ctree_to_disasm', + 'vdui_t_del_orphan_cmts', + 'vdui_t_edit_cmt', + 'vdui_t_edit_func_cmt', + 'vdui_t_flags_get', + 'vdui_t_flags_set', + 'vdui_t_get_current_item', + 'vdui_t_get_current_label', + 'vdui_t_get_number', + 'vdui_t_head_get', + 'vdui_t_head_set', + 'vdui_t_in_ctree', + 'vdui_t_invert_bits', + 'vdui_t_invert_sign', + 'vdui_t_item_get', + 'vdui_t_item_set', + 'vdui_t_jump_enter', + 'vdui_t_last_code_get', + 'vdui_t_last_code_set', + 'vdui_t_locked', + 'vdui_t_map_lvar', + 'vdui_t_mba_get', + 'vdui_t_mba_set', + 'vdui_t_refresh_cpos', + 'vdui_t_refresh_ctext', + 'vdui_t_refresh_view', + 'vdui_t_rename_global', + 'vdui_t_rename_label', + 'vdui_t_rename_lvar', + 'vdui_t_rename_strmem', + 'vdui_t_set_global_type', + 'vdui_t_set_locked', + 'vdui_t_set_lvar_cmt', + 'vdui_t_set_lvar_type', + 'vdui_t_set_noptr_lvar', + 'vdui_t_set_num_enum', + 'vdui_t_set_num_radix', + 'vdui_t_set_num_stroff', + 'vdui_t_set_strmem_type', + 'vdui_t_set_valid', + 'vdui_t_set_visible', + 'vdui_t_split_item', + 'vdui_t_switch_to', + 'vdui_t_tail_get', + 'vdui_t_tail_set', + 'vdui_t_toplevel_get', + 'vdui_t_toplevel_set', + 'vdui_t_ui_edit_lvar_cmt', + 'vdui_t_ui_map_lvar', + 'vdui_t_ui_rename_lvar', + 'vdui_t_ui_set_call_type', + 'vdui_t_ui_set_lvar_type', + 'vdui_t_ui_unmap_lvar', + 'vdui_t_valid', + 'vdui_t_view_idx_get', + 'vdui_t_view_idx_set', + 'vdui_t_visible', + 'verify_argloc', + 'verify_tinfo', + 'view_mouse_event_location_t_ea_get', + 'view_mouse_event_location_t_ea_set', + 'view_mouse_event_location_t_item_get', + 'view_mouse_event_location_t_item_set', + 'view_mouse_event_t_button_get', + 'view_mouse_event_t_button_set', + 'view_mouse_event_t_location_get', + 'view_mouse_event_t_location_set', + 'view_mouse_event_t_renderer_pos_get', + 'view_mouse_event_t_renderer_pos_set', + 'view_mouse_event_t_rtype_get', + 'view_mouse_event_t_rtype_set', + 'view_mouse_event_t_state_get', + 'view_mouse_event_t_state_set', + 'view_mouse_event_t_x_get', + 'view_mouse_event_t_x_set', + 'view_mouse_event_t_y_get', + 'view_mouse_event_t_y_set', + 'viewer_attach_menu_item', + 'viewer_center_on', + 'viewer_create_groups', + 'viewer_del_node_info', + 'viewer_delete_groups', + 'viewer_fit_window', + 'viewer_get_curnode', + 'viewer_get_gli', + 'viewer_get_node_info', + 'viewer_get_selection', + 'viewer_set_gli', + 'viewer_set_groups_visibility', + 'viewer_set_node_info', + 'viewer_set_titlebar_height', + 'visit_patched_bytes', + 'visit_stroff_fields', + 'visit_subtypes', + 'vivl_t___eq__', + 'vivl_t___eq____SWIG_0', + 'vivl_t___eq____SWIG_1', + 'vivl_t___ge__', + 'vivl_t___gt__', + 'vivl_t___le__', + 'vivl_t___lt__', + 'vivl_t___ne__', + 'vivl_t__print', + 'vivl_t_compare', + 'vivl_t_contains', + 'vivl_t_dstr', + 'vivl_t_extend_to_cover', + 'vivl_t_includes', + 'vivl_t_intersect', + 'vivl_t_overlap', + 'vivl_t_set', + 'vivl_t_set__SWIG_0', + 'vivl_t_set__SWIG_1', + 'vivl_t_set_reg', + 'vivl_t_set_stkoff', + 'vivl_t_size_get', + 'vivl_t_size_set', + 'voff_t___eq__', + 'voff_t___ge__', + 'voff_t___gt__', + 'voff_t___le__', + 'voff_t___lt__', + 'voff_t___ne__', + 'voff_t_add', + 'voff_t_compare', + 'voff_t_defined', + 'voff_t_diff', + 'voff_t_get_reg', + 'voff_t_get_stkoff', + 'voff_t_inc', + 'voff_t_is_reg', + 'voff_t_is_stkoff', + 'voff_t_off_get', + 'voff_t_off_set', + 'voff_t_set', + 'voff_t_set_reg', + 'voff_t_set_stkoff', + 'voff_t_type_get', + 'voff_t_type_set', + 'voff_t_undef', + 'wait_for_next_event', + 'warning', + 'warning__varargs__', + 'was_ida_decision', + 'word_flag', + 'write_dbg_memory', + 'write_tinfo_bitfield_value', + 'writebytes', + 'xrefblk_t_first_from', + 'xrefblk_t_first_to', + 'xrefblk_t_frm_get', + 'xrefblk_t_frm_set', + 'xrefblk_t_iscode_get', + 'xrefblk_t_iscode_set', + 'xrefblk_t_next_from', + 'xrefblk_t_next_from__SWIG_0', + 'xrefblk_t_next_from__SWIG_1', + 'xrefblk_t_next_to', + 'xrefblk_t_next_to__SWIG_0', + 'xrefblk_t_next_to__SWIG_1', + 'xrefblk_t_to_get', + 'xrefblk_t_to_set', + 'xrefblk_t_type_get', + 'xrefblk_t_type_set', + 'xrefblk_t_user_get', + 'xrefblk_t_user_set', + 'xrefchar', + 'xreflist_entry_t___eq__', + 'xreflist_entry_t___ne__', + 'xreflist_entry_t_ea_get', + 'xreflist_entry_t_ea_set', + 'xreflist_entry_t_opnum_get', + 'xreflist_entry_t_opnum_set', + 'xreflist_entry_t_type_get', + 'xreflist_entry_t_type_set', + 'xreflist_t___eq__', + 'xreflist_t___getitem__', + 'xreflist_t___len__', + 'xreflist_t___ne__', + 'xreflist_t___setitem__', + 'xreflist_t__del', + 'xreflist_t_add_unique', + 'xreflist_t_at', + 'xreflist_t_begin', + 'xreflist_t_begin__SWIG_0', + 'xreflist_t_begin__SWIG_1', + 'xreflist_t_capacity', + 'xreflist_t_clear', + 'xreflist_t_empty', + 'xreflist_t_end', + 'xreflist_t_end__SWIG_0', + 'xreflist_t_end__SWIG_1', + 'xreflist_t_erase', + 'xreflist_t_erase__SWIG_0', + 'xreflist_t_erase__SWIG_1', + 'xreflist_t_extract', + 'xreflist_t_find', + 'xreflist_t_find__SWIG_0', + 'xreflist_t_find__SWIG_1', + 'xreflist_t_grow', + 'xreflist_t_has', + 'xreflist_t_inject', + 'xreflist_t_insert', + 'xreflist_t_pop_back', + 'xreflist_t_push_back', + 'xreflist_t_push_back__SWIG_0', + 'xreflist_t_push_back__SWIG_1', + 'xreflist_t_qclear', + 'xreflist_t_reserve', + 'xreflist_t_resize', + 'xreflist_t_resize__SWIG_0', + 'xreflist_t_resize__SWIG_1', + 'xreflist_t_size', + 'xreflist_t_swap', + 'xreflist_t_truncate', + 'yword_flag', + 'zword_flag']} \ No newline at end of file diff --git a/build.py b/build.py index a93a7aa..706a21c 100644 --- a/build.py +++ b/build.py @@ -40,8 +40,6 @@ What follows, are example build commands parser.add_argument("--swig-home", type=str, help="Path to the SWIG installation", default=None) parser.add_argument("--with-hexrays", help="Build Hex-Rays decompiler bindings (requires the 'hexrays.hpp' header to be present in the SDK's include/ directory)", default=False, action="store_true") parser.add_argument("--debug", help="Build debug version of the plugin", default=False, action="store_true") -if "linux" in sys.platform: - parser.add_argument("--python-home", help="Python home, where the 'include' directory can be found", default=None) parser.add_argument("-j", "--parallel", action="store_true", help="Build in parallel", default=False) parser.add_argument("-v", "--verbose", help="Verbose mode", default=False, action="store_true") parser.add_argument("-I", "--idc", required=True, help="IDA's idc.idc file (necessary for generating 6.95 compat API layer)", type=str) @@ -76,15 +74,10 @@ def main(): env["__NT__"] = "1" # to enable PDB flags else: env["NDEBUG"] = "1" - try: - if args.python_home: - env["LINUX_PYTHON_HOME"] = args.python_home - except: - pass if args.verbose: argv.append("-d") env["IDC_BC695_IDC_SOURCE"] = args.idc - for ea64 in [False, True]: + for ea64 in [True, False]: if ea64: env["__EA64__"] = "1" else: diff --git a/examples/ex_actions.py b/examples/core/actions.py similarity index 53% rename from examples/ex_actions.py rename to examples/core/actions.py index 3a65f82..da922d6 100644 --- a/examples/ex_actions.py +++ b/examples/core/actions.py @@ -30,25 +30,25 @@ class SayHi(idaapi.action_handler_t): print("Creating a custom icon from raw data!") # Stunned panda face icon data. -icon_data = "".join([ - "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x02\xCA\x49\x44\x41\x54\x78\x5E\x65", - "\x53\x6D\x48\x53\x6F\x14\x3F\xBA\xB5\xB7\xA0\x8D\x20\x41\xF2\xBA\x5D\xB6\x0F\x56\xF4\x41\xA2\xC0\x9C\xE9\xB4\x29\x4A\x7D\xB0\x22\x7A\x11\x02\x23\x48\x2A\xD4\x74\x53\x33\x3F\xD4", - "\x3E\x4A\x50\x19\xE4\xB0\xD0\x22\xCD\x44\x45\x4A\x31\x8C\x92\xA2\x3E\x65\x0A\x4D\xCB\x96\x7E\xE8\xD5\x97\xCC\xFE\xFE\x37\xA7\x77\xDB\xBD\xA7\xE7\x3C\xBE\x05\x9E\xED\xB7\xB3\xF3", - "\x7B\x39\xF7\xEE\x19\x17\xA8\xAC\x56\xDB\x54\x82\x60\x41\xB3\x59\xBC\xFF\xAC\xF9\xCA\xB5\xAE\x86\xCA\xF9\x4E\xAF\x1B\x3B\xEA\x5D\x48\x9D\x66\xE2\x49\x27\x9F\xD5\x66\x9B\xA2\x1C", - "\x22\x02\xD0\x40\xE4\x81\x6C\x3B\x76\x37\x56\xE3\x37\x5F\x2F\x62\xE8\x0B\xD3\x66\x19\x7E\x53\xA7\x99\x78\xAE\x1F\x64\x3E\x21\x71\x69\x09\x5F\x20\x98\x2D\x58\x70\x24\x07\x07\x7B", - "\x6F\xB0\x79\x82\x61\x81\x21\xCC\xDE\x21\x54\x16\x02\xD4\x69\x26\x9E\x74\xEE\xCB\xCF\x4D\xC7\x44\xB3\x88\x7C\x81\xC5\x22\xFE\x6C\xB9\xE9\x46\x67\x46\x1A\x8A\x16\x2B\x0A\x5B\x05", - "\x74\x66\x65\xE1\x98\x6F\x00\x31\x32\x87\x9F\x59\x77\x66\x66\x61\x42\xBC\xC0\xF5\x6C\x47\x1A\x36\xD7\xB9\x51\x14\xC5\x1E\xBE\xA0\xC3\x5B\xD9\x98\x99\xE1\xC0\xCE\xBE\x57\x48\xD7", - "\x9A\x63\x68\xEA\x7C\x8A\xF6\x14\x3B\x9F\xF6\xA6\xA4\x60\xEB\xE3\x3E\x9C\x5F\xD6\x5A\x7A\xFA\x71\xBF\xC3\x81\x3D\x4D\x35\x0D\x7C\xC1\xF3\x87\x57\x43\xF9\x87\x8F\x21\x95\x5E\xAB", - "\x41\x83\x4E\x83\x54\xDB\x92\x76\x20\xCA\xBF\xD0\x99\x9D\xBB\x4E\xDB\xBD\xC7\x8E\x2F\x5A\x3D\x74\x3D\x50\x03\x80\x7E\x7A\x7A\x06\x46\x47\xFD\xA0\x33\x6C\x84\x18\x46\x0C\xBD\x1F", - "\x86\x2D\x71\x71\x00\x52\x10\x16\x17\xE6\xC1\xE7\x1B\x61\x9A\x81\x69\x31\x30\xFC\x61\x14\xB4\x3A\x3D\x20\x82\x1E\x58\xA9\x15\x05\x41\x14\x05\xB8\x58\xEE\x82\x7D\xE9\x99\x20\xCB", - "\x32\x94\x95\x95\xC3\xA5\xD2\x53\x00\x51\x09\xAA\x4B\x0B\xA1\xB8\xA4\x0C\x52\x53\x33\x40\xA5\x52\x81\xDB\x5D\x01\xA2\x45\x00\x45\x51\x80\x2A\x36\x12\x8D\x42\x49\x51\x01\x44\xE5", - "\x18\x90\x22\x0A\x98\x8C\x46\xF0\x54\x14\x42\x6D\x7D\x3B\xE4\x1C\x75\x41\xAD\xB7\x1D\x3C\x55\x85\x60\x32\x19\x41\x8A\x2A\xDC\x57\x5C\x74\x12\x28\x47\xA5\x8E\x44\xE4\xF0\x76\x5B", - "\x82\xA6\xCD\x5B\x0D\xB2\x12\xE6\xE4\x06\xB5\x1A\x66\xA7\x26\x41\x92\xC2\xA0\xD5\x6A\x60\x67\x92\x19\xAE\x7B\xCE\x70\x4D\x15\xAB\x01\xAD\xC1\x08\x3F\x46\x64\x6E\x8E\x9D\xF9\x13", - "\xE8\x1A\xFF\xE4\x63\x8A\x0E\xE6\x02\x41\xF8\x3F\x18\x82\x40\x28\x04\xFD\xDD\x75\xF0\xB6\xFF\x2E\x75\x9A\x89\x27\x9D\xFB\xC8\x4F\x39\xBE\xE0\xB4\xAB\xCE\x35\xFE\x71\x00\x16\x17", - "\x25\x76\x50\x26\x76\x6B\x61\x86\x08\xE4\x1D\xAF\x81\xBC\x13\x97\xA9\xD3\x4C\x3C\xE9\xDC\x47\x7E\xCA\xF1\x05\x0C\x5F\x7D\xFE\xEF\x35\x03\xAF\x9F\x00\xB0\x73\x30\x9A\xE2\x81\x0E", - "\xF6\xC1\xED\x52\xB8\x77\xAB\x98\x3A\xCD\xC4\x73\x9D\x7C\x6F\xDE\xF9\xCF\x53\x0E\xFE\xA9\xCD\xAE\xB3\x87\xCE\x75\x35\x54\xE1\xD0\xCB\x47\x38\x39\x36\x88\xFF\x4D\xF8\x57\x41\x33", - "\xF1\xA4\x93\x0F\x00\x36\xAD\x3E\x4C\x6B\xC5\xC9\x5D\x77\x6A\x2F\xB4\x31\xA3\xC4\x40\x4F\x21\x0F\xD1\x4C\x3C\xE9\x2B\xE1\xF5\x0B\xD6\x90\xC8\x90\x4C\xE6\x35\xD0\xCC\x79\x5E\xFF", - "\x2E\xF8\x0B\x2F\x3D\xE5\xC3\x97\x06\xCF\xCF\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82"]) +icon_data = b"".join([ + b"\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1F\xF3\xFF\x61\x00\x00\x02\xCA\x49\x44\x41\x54\x78\x5E\x65", + b"\x53\x6D\x48\x53\x6F\x14\x3F\xBA\xB5\xB7\xA0\x8D\x20\x41\xF2\xBA\x5D\xB6\x0F\x56\xF4\x41\xA2\xC0\x9C\xE9\xB4\x29\x4A\x7D\xB0\x22\x7A\x11\x02\x23\x48\x2A\xD4\x74\x53\x33\x3F\xD4", + b"\x3E\x4A\x50\x19\xE4\xB0\xD0\x22\xCD\x44\x45\x4A\x31\x8C\x92\xA2\x3E\x65\x0A\x4D\xCB\x96\x7E\xE8\xD5\x97\xCC\xFE\xFE\x37\xA7\x77\xDB\xBD\xA7\xE7\x3C\xBE\x05\x9E\xED\xB7\xB3\xF3", + b"\x7B\x39\xF7\xEE\x19\x17\xA8\xAC\x56\xDB\x54\x82\x60\x41\xB3\x59\xBC\xFF\xAC\xF9\xCA\xB5\xAE\x86\xCA\xF9\x4E\xAF\x1B\x3B\xEA\x5D\x48\x9D\x66\xE2\x49\x27\x9F\xD5\x66\x9B\xA2\x1C", + b"\x22\x02\xD0\x40\xE4\x81\x6C\x3B\x76\x37\x56\xE3\x37\x5F\x2F\x62\xE8\x0B\xD3\x66\x19\x7E\x53\xA7\x99\x78\xAE\x1F\x64\x3E\x21\x71\x69\x09\x5F\x20\x98\x2D\x58\x70\x24\x07\x07\x7B", + b"\x6F\xB0\x79\x82\x61\x81\x21\xCC\xDE\x21\x54\x16\x02\xD4\x69\x26\x9E\x74\xEE\xCB\xCF\x4D\xC7\x44\xB3\x88\x7C\x81\xC5\x22\xFE\x6C\xB9\xE9\x46\x67\x46\x1A\x8A\x16\x2B\x0A\x5B\x05", + b"\x74\x66\x65\xE1\x98\x6F\x00\x31\x32\x87\x9F\x59\x77\x66\x66\x61\x42\xBC\xC0\xF5\x6C\x47\x1A\x36\xD7\xB9\x51\x14\xC5\x1E\xBE\xA0\xC3\x5B\xD9\x98\x99\xE1\xC0\xCE\xBE\x57\x48\xD7", + b"\x9A\x63\x68\xEA\x7C\x8A\xF6\x14\x3B\x9F\xF6\xA6\xA4\x60\xEB\xE3\x3E\x9C\x5F\xD6\x5A\x7A\xFA\x71\xBF\xC3\x81\x3D\x4D\x35\x0D\x7C\xC1\xF3\x87\x57\x43\xF9\x87\x8F\x21\x95\x5E\xAB", + b"\x41\x83\x4E\x83\x54\xDB\x92\x76\x20\xCA\xBF\xD0\x99\x9D\xBB\x4E\xDB\xBD\xC7\x8E\x2F\x5A\x3D\x74\x3D\x50\x03\x80\x7E\x7A\x7A\x06\x46\x47\xFD\xA0\x33\x6C\x84\x18\x46\x0C\xBD\x1F", + b"\x86\x2D\x71\x71\x00\x52\x10\x16\x17\xE6\xC1\xE7\x1B\x61\x9A\x81\x69\x31\x30\xFC\x61\x14\xB4\x3A\x3D\x20\x82\x1E\x58\xA9\x15\x05\x41\x14\x05\xB8\x58\xEE\x82\x7D\xE9\x99\x20\xCB", + b"\x32\x94\x95\x95\xC3\xA5\xD2\x53\x00\x51\x09\xAA\x4B\x0B\xA1\xB8\xA4\x0C\x52\x53\x33\x40\xA5\x52\x81\xDB\x5D\x01\xA2\x45\x00\x45\x51\x80\x2A\x36\x12\x8D\x42\x49\x51\x01\x44\xE5", + b"\x18\x90\x22\x0A\x98\x8C\x46\xF0\x54\x14\x42\x6D\x7D\x3B\xE4\x1C\x75\x41\xAD\xB7\x1D\x3C\x55\x85\x60\x32\x19\x41\x8A\x2A\xDC\x57\x5C\x74\x12\x28\x47\xA5\x8E\x44\xE4\xF0\x76\x5B", + b"\x82\xA6\xCD\x5B\x0D\xB2\x12\xE6\xE4\x06\xB5\x1A\x66\xA7\x26\x41\x92\xC2\xA0\xD5\x6A\x60\x67\x92\x19\xAE\x7B\xCE\x70\x4D\x15\xAB\x01\xAD\xC1\x08\x3F\x46\x64\x6E\x8E\x9D\xF9\x13", + b"\xE8\x1A\xFF\xE4\x63\x8A\x0E\xE6\x02\x41\xF8\x3F\x18\x82\x40\x28\x04\xFD\xDD\x75\xF0\xB6\xFF\x2E\x75\x9A\x89\x27\x9D\xFB\xC8\x4F\x39\xBE\xE0\xB4\xAB\xCE\x35\xFE\x71\x00\x16\x17", + b"\x25\x76\x50\x26\x76\x6B\x61\x86\x08\xE4\x1D\xAF\x81\xBC\x13\x97\xA9\xD3\x4C\x3C\xE9\xDC\x47\x7E\xCA\xF1\x05\x0C\x5F\x7D\xFE\xEF\x35\x03\xAF\x9F\x00\xB0\x73\x30\x9A\xE2\x81\x0E", + b"\xF6\xC1\xED\x52\xB8\x77\xAB\x98\x3A\xCD\xC4\x73\x9D\x7C\x6F\xDE\xF9\xCF\x53\x0E\xFE\xA9\xCD\xAE\xB3\x87\xCE\x75\x35\x54\xE1\xD0\xCB\x47\x38\x39\x36\x88\xFF\x4D\xF8\x57\x41\x33", + b"\xF1\xA4\x93\x0F\x00\x36\xAD\x3E\x4C\x6B\xC5\xC9\x5D\x77\x6A\x2F\xB4\x31\xA3\xC4\x40\x4F\x21\x0F\xD1\x4C\x3C\xE9\x2B\xE1\xF5\x0B\xD6\x90\xC8\x90\x4C\xE6\x35\xD0\xCC\x79\x5E\xFF", + b"\x2E\xF8\x0B\x2F\x3D\xE5\xC3\x97\x06\xCF\xCF\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82"]) act_icon = idaapi.load_custom_icon(data=icon_data, format="png") hooks = None diff --git a/examples/ex_hotkey.py b/examples/core/add_hotkey.py similarity index 100% rename from examples/ex_hotkey.py rename to examples/core/add_hotkey.py diff --git a/examples/hotkey.py b/examples/core/add_hotkey2.py similarity index 100% rename from examples/hotkey.py rename to examples/core/add_hotkey2.py diff --git a/examples/ex_auto_instantiate_widget_plugin.py b/examples/core/auto_instantiate_widget_plugin.py similarity index 100% rename from examples/ex_auto_instantiate_widget_plugin.py rename to examples/core/auto_instantiate_widget_plugin.py diff --git a/examples/colours.py b/examples/core/colorize_region.py similarity index 100% rename from examples/colours.py rename to examples/core/colorize_region.py diff --git a/examples/structure.py b/examples/core/create_structure_programmatically.py similarity index 95% rename from examples/structure.py rename to examples/core/create_structure_programmatically.py index 0714c75..13f6e92 100644 --- a/examples/structure.py +++ b/examples/core/create_structure_programmatically.py @@ -29,7 +29,7 @@ print("ASCII:", add_struc_member(sid, "tascii", -1, FF_STRLIT|FF_DATA, STRTYPE_C # Test enum type - Add a defined enum name or load MACRO_WMI from a type library. #eid = get_enum("MACRO_WMI") -#print "Enum:", add_struc_member(sid, "tenum", BADADDR, FF_0ENUM|FF_DATA|FF_DWORD, eid, 4) +#print("Enum:", add_struc_member(sid, "tenum", BADADDR, FF_0ENUM|FF_DATA|FF_DWORD, eid, 4)) # Test struc member type msid = get_struc_id("mystr2") diff --git a/examples/ex_cli.py b/examples/core/custom_cli.py similarity index 100% rename from examples/ex_cli.py rename to examples/core/custom_cli.py diff --git a/examples/ex_custdata.py b/examples/core/custom_data_types_and_formats.py similarity index 96% rename from examples/ex_custdata.py rename to examples/core/custom_data_types_and_formats.py index 572ca8a..3a9b898 100644 --- a/examples/ex_custdata.py +++ b/examples/core/custom_data_types_and_formats.py @@ -4,6 +4,8 @@ from __future__ import print_function # (c) Hex-Rays # from idaapi import data_type_t, data_format_t, NW_OPENIDB, NW_CLOSEIDB, NW_TERMIDA, NW_REMOVE, COLSTR + +import sys import struct import ctypes import platform @@ -43,12 +45,12 @@ class pascal_data_format(data_format_t): def printf(self, value, current_ea, operand_num, dtid): # Take the length byte - n = ord(value[0]) + n = ord(value[0]) if sys.version_info.major < 3 else value[0] o = ['"'] for ch in value[1:]: - b = ord(ch) + b = ord(ch) if sys.version_info.major < 3 else ch if b < 0x20 or b > 128: - o.append(r'\x%02x' % ord(ch)) + o.append(r'\x%02x' % b) else: o.append(ch) o.append('"') @@ -98,7 +100,7 @@ class simplevm_data_format(data_format_t): REGS = {1: 'r1', 2: 'r2', 3: 'r3'} def disasm(self, inst): """A simple local disassembler. In reality one can use a full-blown disassembler to render the text""" - opbyte = ord(inst[0]) + opbyte = ord(inst[0]) if sys.version_info.major < 3 else inst[0] op = opbyte >> 4 if not (1<=op<=5): return None diff --git a/examples/ex_gdl_qflow_chart.py b/examples/core/dump_flowchart.py similarity index 91% rename from examples/ex_gdl_qflow_chart.py rename to examples/core/dump_flowchart.py index f90a90e..04ecd19 100644 --- a/examples/ex_gdl_qflow_chart.py +++ b/examples/core/dump_flowchart.py @@ -9,16 +9,16 @@ def raw_main(p=True): return q = idaapi.qflow_chart_t("The title", f, 0, 0, idaapi.FC_PREDS) - for n in xrange(0, q.size()): + for n in range(0, q.size()): b = q[n] if p: print("%x - %x [%d]:" % (b.start_ea, b.end_ea, n)) - for ns in xrange(0, q.nsucc(n)): + for ns in range(0, q.nsucc(n)): if p: print("SUCC: %d->%d" % (n, q.succ(n, ns))) - for ns in xrange(0, q.npred(n)): + for ns in range(0, q.npred(n)): if p: print("PRED: %d->%d" % (n, q.pred(n, ns))) diff --git a/examples/ex_expr.py b/examples/core/extend_idc.py similarity index 100% rename from examples/ex_expr.py rename to examples/core/extend_idc.py diff --git a/examples/idapythonrc.py b/examples/core/idapythonrc.py similarity index 100% rename from examples/idapythonrc.py rename to examples/core/idapythonrc.py diff --git a/examples/ex_prefix_plugin.py b/examples/core/install_user_defined_prefix.py similarity index 100% rename from examples/ex_prefix_plugin.py rename to examples/core/install_user_defined_prefix.py diff --git a/examples/ex_imports.py b/examples/core/list_imports.py similarity index 93% rename from examples/ex_imports.py rename to examples/core/list_imports.py index 88eea1f..73db7fd 100644 --- a/examples/ex_imports.py +++ b/examples/core/list_imports.py @@ -18,7 +18,7 @@ nimps = idaapi.get_import_module_qty() print("Found %d import(s)..." % nimps) -for i in xrange(0, nimps): +for i in range(0, nimps): name = idaapi.get_import_module_name(i) if not name: print("Failed to get import module name for #%d" % i) @@ -27,4 +27,4 @@ for i in xrange(0, nimps): print("Walking-> %s" % name) idaapi.enum_import_names(i, imp_cb) -print("All done...") \ No newline at end of file +print("All done...") diff --git a/examples/ex_patch.py b/examples/core/list_patched_bytes.py similarity index 100% rename from examples/ex_patch.py rename to examples/core/list_patched_bytes.py diff --git a/examples/ex1_idaapi.py b/examples/core/list_segment_functions.py similarity index 100% rename from examples/ex1_idaapi.py rename to examples/core/list_segment_functions.py diff --git a/examples/ex1_idautils.py b/examples/core/list_segment_functions_using_idautils.py similarity index 100% rename from examples/ex1_idautils.py rename to examples/core/list_segment_functions_using_idautils.py diff --git a/examples/ex_strings.py b/examples/core/list_strings.py similarity index 100% rename from examples/ex_strings.py rename to examples/core/list_strings.py diff --git a/examples/ex_timer.py b/examples/core/register_timer.py similarity index 100% rename from examples/ex_timer.py rename to examples/core/register_timer.py diff --git a/examples/ex_uirequests.py b/examples/core/trigger_actions_programmatically.py similarity index 100% rename from examples/ex_uirequests.py rename to examples/core/trigger_actions_programmatically.py diff --git a/examples/debughook.py b/examples/debugging/dbghooks/automatic_steps.py similarity index 100% rename from examples/debughook.py rename to examples/debugging/dbghooks/automatic_steps.py diff --git a/examples/ex_dbg.py b/examples/debugging/misc/tempo.py similarity index 91% rename from examples/ex_dbg.py rename to examples/debugging/misc/tempo.py index ba58d22..7413fc3 100644 --- a/examples/ex_dbg.py +++ b/examples/debugging/misc/tempo.py @@ -10,7 +10,7 @@ def test_getmeminfo(): out.append("%x: %x name=<%s> sclass=<%s> sbase=%x bitness=%2x perm=%2x" % (start_ea, end_ea, name, sclass, sbase, bitness, perm)) f = file(r"d:\temp\out.log", "w") - f.write("\n".join(out)) + f.write(("\n".join(out)).encode("UTF-8")) f.close() print("dumped meminfo!") @@ -27,7 +27,7 @@ def test_getregs(): out.append(" %s" % s) f = file(r"d:\temp\out.log", "w") - f.write("\n".join(out)) + f.write(("\n".join(out)).encode("UTF-8")) f.close() print("dumped regs!") diff --git a/examples/ex_debug_names.py b/examples/debugging/show_debug_names.py similarity index 100% rename from examples/ex_debug_names.py rename to examples/debugging/show_debug_names.py diff --git a/examples/ex1.idc b/examples/ex1.idc deleted file mode 100644 index cc5d7dc..0000000 --- a/examples/ex1.idc +++ /dev/null @@ -1,35 +0,0 @@ -// -// Reference Lister -// -// List all functions and all references to them in the current section. -// -// Implemented in IDC -// -#include - -static main() -{ - auto ea, func, ref; - - // Get current ea - ea = get_screen_ea(); - - // Loop from start to end in the current segment - for (func=get_segm_start(ea); - func != BADADDR && func < get_segm_end(ea); - func=get_next_func(func)) - { - // If the current address is function process it - if (get_func_flags(func) != -1) - { - msg("Function %s at 0x%x\n", get_func_name(func), func); - - // Find all code references to func - for (ref=get_first_cref_to(func); ref != BADADDR; ref=get_next_cref_to(func, ref)) - { - msg(" called from %s(0x%x)\n", get_func_name(ref), ref); - } - - } - } -} diff --git a/examples/ex_graph.py b/examples/ex_graph.py deleted file mode 100644 index f71df04..0000000 --- a/examples/ex_graph.py +++ /dev/null @@ -1,90 +0,0 @@ -from __future__ import print_function -# ----------------------------------------------------------------------- -# This is an example illustrating how to use the user graphing functionality -# in Python -# (c) Hex-Rays -# -from idaapi import * - -class GraphCloser(action_handler_t): - def __init__(self, graph): - action_handler_t.__init__(self) - self.graph = graph - - def activate(self, ctx): - self.graph.Close() - - def update(self, ctx): - return AST_ENABLE_ALWAYS - - -class ColorChanger(action_handler_t): - def __init__(self, graph): - action_handler_t.__init__(self) - self.graph = graph - - def activate(self, ctx): - self.graph.color = self.graph.color ^ 0xffffff - self.graph.Refresh() - return 1 - - def update(self, ctx): - return AST_ENABLE_ALWAYS - - -class MyGraph(GraphViewer): - def __init__(self, funcname, result): - self.title = "call graph of " + funcname - GraphViewer.__init__(self, self.title) - self.funcname = funcname - self.result = result - self.color = 0xff00ff - - def OnRefresh(self): - self.Clear() - id = self.AddNode((self.funcname, self.color)) - for x in self.result.keys(): - callee = self.AddNode((x, self.color)) - self.AddEdge(id, callee) - - return True - - def OnGetText(self, node_id): - return self[node_id] - - def OnPopup(self, form, popup_handle): - # graph closer - actname = "graph_closer:%s" % self.title - desc = action_desc_t(actname, "Close: %s" % self.title, GraphCloser(self)) - attach_dynamic_action_to_popup(form, popup_handle, desc) - - # color changer - actname = "color_changer:%s" % self.title - desc = action_desc_t(actname, "Change colors: %s" % self.title, ColorChanger(self)) - attach_dynamic_action_to_popup(form, popup_handle, desc) - - -def show_graph(): - f = idaapi.get_func(here()) - if not f: - print("Must be in a function") - return - # Iterate through all function instructions and take only call instructions - result = {} - tmp = idaapi.insn_t() - for x in [x for x in FuncItems(f.start_ea) if (idaapi.decode_insn(tmp, x) and idaapi.is_call_insn(tmp))]: - for xref in XrefsFrom(x, idaapi.XREF_FAR): - if not xref.iscode: continue - t = get_func_name(xref.to) - if not t: - t = hex(xref.to) - result[t] = True - g = MyGraph(get_func_name(f.start_ea), result) - if g.Show(): - return g - else: - return None - -g = show_graph() -if g: - print("Graph created and displayed!") diff --git a/examples/ex_hexrays.py b/examples/hexrays/decompile_entry_points.py similarity index 100% rename from examples/ex_hexrays.py rename to examples/hexrays/decompile_entry_points.py diff --git a/examples/vds1.py b/examples/hexrays/vds1.py similarity index 100% rename from examples/vds1.py rename to examples/hexrays/vds1.py diff --git a/examples/vds10.py b/examples/hexrays/vds10.py similarity index 100% rename from examples/vds10.py rename to examples/hexrays/vds10.py diff --git a/examples/vds11.py b/examples/hexrays/vds11.py similarity index 100% rename from examples/vds11.py rename to examples/hexrays/vds11.py diff --git a/examples/vds12.py b/examples/hexrays/vds12.py similarity index 98% rename from examples/vds12.py rename to examples/hexrays/vds12.py index e8f3deb..6c231f6 100644 --- a/examples/vds12.py +++ b/examples/hexrays/vds12.py @@ -61,7 +61,7 @@ class xref_chooser_t(ida_kernwin.Choose): self.ndefs = n self.curr_ea = ea self.gco = gco - self.items = [ self._make_item(idx) for idx in xrange(len(xrefs)) ] + self.items = [ self._make_item(idx) for idx in range(len(xrefs)) ] def OnGetSize(self): return len(self.items) diff --git a/examples/vds13.py b/examples/hexrays/vds13.py similarity index 100% rename from examples/vds13.py rename to examples/hexrays/vds13.py diff --git a/examples/vds17.py b/examples/hexrays/vds17.py similarity index 100% rename from examples/vds17.py rename to examples/hexrays/vds17.py diff --git a/examples/vds3.py b/examples/hexrays/vds3.py similarity index 100% rename from examples/vds3.py rename to examples/hexrays/vds3.py diff --git a/examples/vds4.py b/examples/hexrays/vds4.py similarity index 94% rename from examples/vds4.py rename to examples/hexrays/vds4.py index 1231ffc..df261ed 100644 --- a/examples/vds4.py +++ b/examples/hexrays/vds4.py @@ -26,7 +26,7 @@ def run(): labels = idaapi.restore_user_labels(entry_ea); if labels is not None: print("------- %u user defined labels" % (len(labels), )) - for org_label, name in labels.iteritems(): + for org_label, name in labels.items(): print("Label %d: %s" % (org_label, str(name))) idaapi.user_labels_free(labels) @@ -34,7 +34,7 @@ def run(): cmts = idaapi.restore_user_cmts(entry_ea); if cmts is not None: print("------- %u user defined comments" % (len(cmts), )) - for tl, cmt in cmts.iteritems(): + for tl, cmt in cmts.items(): print("Comment at %x, preciser %x:\n%s\n" % (tl.ea, tl.itp, str(cmt))) idaapi.user_cmts_free(cmts) @@ -42,7 +42,7 @@ def run(): iflags = idaapi.restore_user_iflags(entry_ea) if iflags is not None: print("------- %u user defined citem iflags" % (len(iflags), )) - for cl, f in iflags.iteritems(): + for cl, f in iflags.items(): print("%x(%d): %08X%s" % (cl.ea, cl.op, f, " CIT_COLLAPSED" if f & idaapi.CIT_COLLAPSED else "")) idaapi.user_iflags_free(iflags) @@ -50,7 +50,7 @@ def run(): numforms = idaapi.restore_user_numforms(entry_ea) if numforms is not None: print("------- %u user defined number formats" % (len(numforms), )) - for ol, nf in numforms.iteritems(): + for ol, nf in numforms.items(): print("Number format at %a, operand %d: %s" % (ol.ea, ol.opnum, "negated " if (nf.props & NF_NEGATE) != 0 else "")) diff --git a/examples/vds5.py b/examples/hexrays/vds5.py similarity index 93% rename from examples/vds5.py rename to examples/hexrays/vds5.py index 0628f0b..58e3583 100644 --- a/examples/vds5.py +++ b/examples/hexrays/vds5.py @@ -172,10 +172,12 @@ class cfunc_graph_t: # alas we can't inherit gdl_graph_t def gen_gdl(self, fname): with open(fname, "wb") as out: - out.write("graph: {\n") + def write_out(s): + out.write(s.encode("UTF-8")) + write_out("graph: {\n") - out.write("// *** nodes\n") - for n in xrange(len(self.items)): + write_out("// *** nodes\n") + for n in range(len(self.items)): item = self.items[n] node_label = self.get_node_label(n) node_props = [""] @@ -184,17 +186,17 @@ class cfunc_graph_t: # alas we can't inherit gdl_graph_t color = self.get_node_color(n) if color is not None: node_props.append("color: %s" % get_color_name(color)) - out.write("""node: { title: "%d" label: "%d: %s" %s}\n""" % ( + write_out("""node: { title: "%d" label: "%d: %s" %s}\n""" % ( n, n, node_label, " ".join(node_props))) - out.write("// *** edges\n") - for n in xrange(len(self.items)): + write_out("// *** edges\n") + for n in range(len(self.items)): item = self.items[n] - out.write("// edges %d -> ?\n" % n) - for i in xrange(self.nsucc(n)): + write_out("// edges %d -> ?\n" % n) + for i in range(self.nsucc(n)): t = self.succ(n, i) label = "" if item.is_expr(): @@ -207,10 +209,10 @@ class cfunc_graph_t: # alas we can't inherit gdl_graph_t label = "z" if label: label = """ label: "%s" """ % label - out.write("""edge: { sourcename: "%s" targetname: "%s"%s}\n""" % ( + write_out("""edge: { sourcename: "%s" targetname: "%s"%s}\n""" % ( str(n), str(t), label)) - out.write("}\n") + write_out("}\n") def dump(self): print("%d items:" % len(self.items)) @@ -231,10 +233,10 @@ class graph_builder_t(ida_hexrays.ctree_parentee_t): def __init__(self, cg): ida_hexrays.ctree_parentee_t.__init__(self) self.cg = cg - self.reverse = {} # citem_t -> node# + self.reverse = [] # (citem_t, node#) tuples def add_node(self, i): - for k in self.reverse.keys(): + for k, _ in self.reverse: if i.obj_id == k.obj_id: ida_kernwin.warning("bad ctree - duplicate nodes! (i.ea=%x)" % i.ea) self.cg.dump() @@ -244,7 +246,7 @@ class graph_builder_t(ida_hexrays.ctree_parentee_t): if n <= len(self.cg.items): self.cg.items.append(i) self.cg.items[n] = i - self.reverse[i] = n + self.reverse.append((i, n)) return n def process(self, i): @@ -253,7 +255,7 @@ class graph_builder_t(ida_hexrays.ctree_parentee_t): return n if len(self.parents) > 1: lp = self.parents.back().obj_id - for k, v in self.reverse.items(): + for k, v in self.reverse: if k.obj_id == lp: p = v break diff --git a/examples/vds6.py b/examples/hexrays/vds6.py similarity index 99% rename from examples/vds6.py rename to examples/hexrays/vds6.py index 3545758..bce37c3 100644 --- a/examples/vds6.py +++ b/examples/hexrays/vds6.py @@ -14,7 +14,7 @@ import ida_hexrays import ida_lines def dbg(msg): - #print msg + #print(msg) pass def is_cident_char(c): diff --git a/examples/vds7.py b/examples/hexrays/vds7.py similarity index 100% rename from examples/vds7.py rename to examples/hexrays/vds7.py diff --git a/examples/vds8.py b/examples/hexrays/vds8.py similarity index 100% rename from examples/vds8.py rename to examples/hexrays/vds8.py diff --git a/examples/vds_create_hint.py b/examples/hexrays/vds_create_hint.py similarity index 100% rename from examples/vds_create_hint.py rename to examples/hexrays/vds_create_hint.py diff --git a/examples/vds_hooks.py b/examples/hexrays/vds_hooks.py similarity index 93% rename from examples/vds_hooks.py rename to examples/hexrays/vds_hooks.py index d499584..53f78a2 100644 --- a/examples/vds_hooks.py +++ b/examples/hexrays/vds_hooks.py @@ -36,8 +36,8 @@ class vds_hooks_t(ida_hexrays.Hexrays_Hooks): def stkpnts(self, mba, stkpnts): return self._log("stkpnts: mba=%s, stkpnts=%s" % (mba, stkpnts)) - def prolog(self, mba, fc, reachable_blocks): - return self._log("prolog: mba=%s, fc=%s, reachable_blocks=%s" % (mba, fc, reachable_blocks)) + def prolog(self, mba, fc, reachable_blocks, decomp_flags): + return self._log("prolog: mba=%s, fc=%s, reachable_blocks=%s, decomp_flags=%x" % (mba, fc, reachable_blocks, decomp_flags)) def microcode(self, mba): return self._log("microcode: mba=%s" % (mba,)) @@ -99,7 +99,8 @@ class vds_hooks_t(ida_hexrays.Hexrays_Hooks): return self._log("double_click: vu=%s, shift_state=%s" % (vu, shift_state)) def curpos(self, vu): - return self._log("curpos: vu=%s" % (vu,)) + return self._log("curpos: vu=%s (vu.cpos.lnnum=%d, vu.cpos.x=%d, vu.cpos.y=%d)" % ( + vu, vu.cpos.lnnum, vu.cpos.x, vu.cpos.y)) def create_hint(self, vu): return self._log("create_hint: vu=%s: " % (vu,)) diff --git a/examples/vds_modify_user_lvars.py b/examples/hexrays/vds_modify_user_lvars.py similarity index 91% rename from examples/vds_modify_user_lvars.py rename to examples/hexrays/vds_modify_user_lvars.py index 28c6939..b58024f 100644 --- a/examples/vds_modify_user_lvars.py +++ b/examples/hexrays/vds_modify_user_lvars.py @@ -29,7 +29,9 @@ class my_modifier_t(ida_hexrays.user_lvar_modifier_t): varlog("flags = %x" % one.flags) new_type = self.new_types.get(one.name) if new_type: - ida_typeinf.parse_decl(one.type, None, new_type, 0) + tif = ida_typeinf.tinfo_t() + ida_typeinf.parse_decl(tif, None, new_type, 0) + one.type = tif one.name = self.name_prefix + one.name one.cmt = self.cmt_prefix + one.cmt diff --git a/examples/vds_xrefs.py b/examples/hexrays/vds_xrefs.py similarity index 99% rename from examples/vds_xrefs.py rename to examples/hexrays/vds_xrefs.py index d6aa4c4..28ecf01 100644 --- a/examples/vds_xrefs.py +++ b/examples/hexrays/vds_xrefs.py @@ -184,8 +184,6 @@ class XrefsForm(idaapi.PluginForm): _xtype.remove_ptr_or_array() _typename = idaapi.print_tinfo('', 0, 0, idaapi.PRTYPE_1LINE, _xtype, '', '') - #~ print 'in', hex(cfunc.entry_ea), _typename, _m - if not (_typename == typename and _m == m): continue diff --git a/examples/ex_procext.py b/examples/idphooks/ana_emu_out.py similarity index 98% rename from examples/ex_procext.py rename to examples/idphooks/ana_emu_out.py index 0d06e2b..0262c55 100644 --- a/examples/ex_procext.py +++ b/examples/idphooks/ana_emu_out.py @@ -1,5 +1,5 @@ from __future__ import print_function -# this script implements disassembly of BUG_INSTR used in Linux kernel BUG() macro +# this script implements disassembly of BUG_INSTR used in Linux kernel BUG() macro # normally it's architecturally undefined and is not disassembled by IDA's ARM module # see Linux/arch/arm/include/asm/bug.h diff --git a/examples/ex_idphook_asm.py b/examples/idphooks/assemble.py similarity index 100% rename from examples/ex_idphook_asm.py rename to examples/idphooks/assemble.py diff --git a/examples/ex_paint_over_navbar.py b/examples/pyqt/paint_over_navbar.py similarity index 90% rename from examples/ex_paint_over_navbar.py rename to examples/pyqt/paint_over_navbar.py index d9e56f3..85cde9e 100644 --- a/examples/ex_paint_over_navbar.py +++ b/examples/pyqt/paint_over_navbar.py @@ -25,9 +25,9 @@ class painter_t(QtCore.QObject): def add_random_item(self): R = random.random s = ida_segment.getnseg(int(ida_segment.get_segm_qty() * R())) - ea = s.start_ea + long((s.end_ea - s.start_ea) * R()) - radius = 4 + long(R() * 8) - color = QtGui.QColor(long(255 * R()), long(255 * R()), long(255 * R())) + ea = s.start_ea + int((s.end_ea - s.start_ea) * R()) + radius = 4 + int(R() * 8) + color = QtGui.QColor(int(255 * R()), int(255 * R()), int(255 * R())) self.add_item(ea, radius, color) def eventFilter(self, receiver, event): @@ -63,4 +63,4 @@ class painter_t(QtCore.QObject): painter = painter_t() # Try the following: -# for i in xrange(100): painter.add_random_item() +# for i in range(100): painter.add_random_item() diff --git a/examples/ex_pyqt.py b/examples/pyqt/populate_pluginform_with_pyqt_widgets.py similarity index 100% rename from examples/ex_pyqt.py rename to examples/pyqt/populate_pluginform_with_pyqt_widgets.py diff --git a/examples/ex_uihook.py b/examples/uihooks/log_misc_events.py similarity index 100% rename from examples/ex_uihook.py rename to examples/uihooks/log_misc_events.py diff --git a/examples/ex_askusingform.py b/examples/widgets/forms/askusingform.py similarity index 99% rename from examples/ex_askusingform.py rename to examples/widgets/forms/askusingform.py index 3fa82ad..644cecf 100644 --- a/examples/ex_askusingform.py +++ b/examples/widgets/forms/askusingform.py @@ -17,7 +17,7 @@ class TestEmbeddedChooserClass(Choose): flags=flags, embedded=True, width=30, height=6) self.items = [ [str(x), "func_%04d" % x] - for x in xrange(nb + 1) ] + for x in range(nb + 1) ] self.icon = 5 def OnGetLine(self, n): diff --git a/examples/widgets/graphs/custom_graph_with_actions.py b/examples/widgets/graphs/custom_graph_with_actions.py new file mode 100644 index 0000000..984ab92 --- /dev/null +++ b/examples/widgets/graphs/custom_graph_with_actions.py @@ -0,0 +1,142 @@ +from __future__ import print_function +# ----------------------------------------------------------------------- +# This is an example illustrating how to use the user graphing functionality +# in Python +# (c) Hex-Rays +# + +import ida_kernwin +import ida_graph +import ida_ua +import ida_idp +import ida_funcs + +class _base_graph_action_handler_t(ida_kernwin.action_handler_t): + def __init__(self, graph): + ida_kernwin.action_handler_t.__init__(self) + self.graph = graph + + def update(self, ctx): + return ida_kernwin.AST_ENABLE_ALWAYS + + +class GraphCloser(_base_graph_action_handler_t): + def activate(self, ctx): + self.graph.Close() + + +class ColorChanger(_base_graph_action_handler_t): + def activate(self, ctx): + self.graph.color = self.graph.color ^ 0xffffff + self.graph.Refresh() + return 1 + + +class SelectionPrinter(_base_graph_action_handler_t): + def activate(self, ctx): + try: + sel = ctx.graph_selection + except: + # IDA < 7.4 doesn't provide graph selection as part of + # the action_activation_ctx_t; it needs to be queried. + sel = ida_graph.screen_graph_selection_t() + gv = ida_graph.get_graph_viewer(self.graph.GetWidget()) + ida_graph.viewer_get_selection(gv, sel) + if sel: + for s in sel: + if s.is_node: + print("Selected node %d" % s.node) + else: + print("Selected edge %d -> %d" % (s.elp.e.src, s.elp.e.dst)) + return 1 + + +class MyGraph(ida_graph.GraphViewer): + def __init__(self, funcname, result): + self.title = "call graph of " + funcname + ida_graph.GraphViewer.__init__(self, self.title) + self.funcname = funcname + self.result = result + self.color = 0xff00ff + + # + # for the sake of this example, here's how one can use + # 'ida_kernwin.View_Hooks' (which can be used wich all + # "listing-like" and "graph" widgets) to be notified + # of cursor movement, current node changes, etc... + # in this graph. + # + class my_view_hooks_t(ida_kernwin.View_Hooks): + def __init__(self, v): + ida_kernwin.View_Hooks.__init__(self) + self.hook() + # let's use weakrefs, so as soon as the last ref to + # the 'MyGraph' instance is dropped, the 'my_view_hooks_t' + # instance hooks can be automatically un-hooked, and deleted. + # (in other words: avoid circular reference.) + import weakref + self.v = weakref.ref(v) + + def view_loc_changed(self, w, now, was): + now_node = now.renderer_info().pos.node + was_node = was.renderer_info().pos.node + if now_node != was_node: + if self.v().GetWidget() == w: + print("Current node now: #%d (was #%d)" % (now_node, was_node)) + + self.my_view_hooks = my_view_hooks_t(self) + + + def OnRefresh(self): + self.Clear() + id = self.AddNode((self.funcname, self.color)) + for x in self.result: + callee = self.AddNode((x, self.color)) + self.AddEdge(id, callee) + + return True + + def OnGetText(self, node_id): + return self[node_id] + + def OnPopup(self, form, popup_handle): + # graph closer + actname = "graph_closer:%s" % self.title + desc = ida_kernwin.action_desc_t(actname, "Close: %s" % self.title, GraphCloser(self)) + ida_kernwin.attach_dynamic_action_to_popup(form, popup_handle, desc) + + # color changer + actname = "color_changer:%s" % self.title + desc = ida_kernwin.action_desc_t(actname, "Change colors: %s" % self.title, ColorChanger(self)) + ida_kernwin.attach_dynamic_action_to_popup(form, popup_handle, desc) + + # selection printer + actname = "selection_printer:%s" % self.title + desc = ida_kernwin.action_desc_t(actname, "Print selection: %s" % self.title, SelectionPrinter(self)) + ida_kernwin.attach_dynamic_action_to_popup(form, popup_handle, desc) + + +def show_graph(): + f = ida_funcs.get_func(here()) + if not f: + print("Must be in a function") + return + # Iterate through all function instructions and take only call instructions + result = [] + tmp = ida_ua.insn_t() + for x in [x for x in FuncItems(f.start_ea) if (ida_ua.decode_insn(tmp, x) and ida_idp.is_call_insn(tmp))]: + for xref in XrefsFrom(x, idaapi.XREF_FAR): + if not xref.iscode: continue + t = get_func_name(xref.to) + if not t: + t = hex(xref.to) + result.append(t) + g = MyGraph(ida_funcs.get_func_name(f.start_ea), result) + if g.Show(): + return g + else: + return None + +g = show_graph() +if g: + print("Graph created and displayed!") diff --git a/examples/ex_sync_graphs.py b/examples/widgets/graphs/sync_two_graphs.py similarity index 100% rename from examples/ex_sync_graphs.py rename to examples/widgets/graphs/sync_two_graphs.py diff --git a/examples/ex_idagraph.py b/examples/widgets/idaview/wrap_idaview.py similarity index 99% rename from examples/ex_idagraph.py rename to examples/widgets/idaview/wrap_idaview.py index e38b4ef..aed1df8 100644 --- a/examples/ex_idagraph.py +++ b/examples/widgets/idaview/wrap_idaview.py @@ -46,7 +46,7 @@ class Worker(threading.Thread): # 'idaapi.execute_sync' to send requests to the main thread. # Switch back & forth to & from graph view - for i in xrange(3): + for i in range(3): self.req_SetCurrentRendererType(idaapi.TCCRT_FLAT) sleep(1) self.req_SetCurrentRendererType(idaapi.TCCRT_GRAPH) diff --git a/examples/ex_custview.py b/examples/widgets/listings/custom_viewer.py similarity index 84% rename from examples/ex_custview.py rename to examples/widgets/listings/custom_viewer.py index 34fcfd5..c6c8fc3 100644 --- a/examples/ex_custview.py +++ b/examples/widgets/listings/custom_viewer.py @@ -19,6 +19,23 @@ class say_something_handler_t(idaapi.action_handler_t): def update(self, ctx): return idaapi.AST_ENABLE_ALWAYS + @staticmethod + def compose_action_name(v): + return "custview:say_%s" % v + + +# create actions +actions_variants = ["Hello", "World"] +for av in actions_variants: + actname = say_something_handler_t.compose_action_name(av) + if ida_kernwin.unregister_action(actname): + print("Unregistered previously-registered action \"%s\"" % actname) + + desc = ida_kernwin.action_desc_t(actname, "Say %s" % av, say_something_handler_t(av)) + if ida_kernwin.register_action(desc): + print("Registered action \"%s\"" % actname) + + # ----------------------------------------------------------------------- class mycv_t(simplecustviewer_t): @@ -33,7 +50,7 @@ class mycv_t(simplecustviewer_t): if not simplecustviewer_t.Create(self, title): return False - for i in xrange(0, 100): + for i in range(0, 100): prefix, bg = idaapi.COLOR_DEFAULT, None # make every 10th line a bit special if i % 10 == 0: @@ -56,12 +73,6 @@ class mycv_t(simplecustviewer_t): print("OnClick, shift=%d" % shift) return True - def OnPopup(self, form, popup_handle): - for thing in ["Hello", "World"]: - actname = "custview:say_%s" % thing - desc = ida_kernwin.action_desc_t(actname, "Say %s" % thing, say_something_handler_t(thing)) - ida_kernwin.attach_dynamic_action_to_popup(form, popup_handle, desc) - def OnDblClick(self, shift): """ User dbl-clicked in the view @@ -155,6 +166,15 @@ class mycv_t(simplecustviewer_t): """ return (1, "OnHint, line=%d" % lineno) + def Show(self, *args): + ok = simplecustviewer_t.Show(self, *args) + if ok: + # permanently attach actions to this viewer's popup menu + for av in actions_variants: + actname = say_something_handler_t.compose_action_name(av) + ida_kernwin.attach_action_to_popup(self.GetWidget(), None, actname) + return ok + # ----------------------------------------------------------------------- try: # created already? @@ -180,7 +200,7 @@ if not mycv: def make_many(n): L = [] - for i in xrange(1, n+1): + for i in range(1, n+1): v = mycv_t() if not v.Create(i): break diff --git a/examples/widgets/listings/save_and_restore_listing_pos.py b/examples/widgets/listings/save_and_restore_listing_pos.py new file mode 100644 index 0000000..69c745f --- /dev/null +++ b/examples/widgets/listings/save_and_restore_listing_pos.py @@ -0,0 +1,79 @@ + +# +# This example lets the user save the current position of +# the current listing widget, and restore it later +# + +import ida_kernwin +import ida_moves + +class listing_action_handler_t(ida_kernwin.action_handler_t): + def update(self, ctx): + is_listing = ctx.widget_type in [ + ida_kernwin.BWN_ENUMS, + ida_kernwin.BWN_STRUCTS, + ida_kernwin.BWN_DISASM, + ida_kernwin.BWN_CUSTVIEW, + ida_kernwin.BWN_PSEUDOCODE, + ] + return ida_kernwin.AST_ENABLE_FOR_WIDGET if is_listing else ida_kernwin.AST_DISABLE_FOR_WIDGET + +class last_pos_t(object): + def __init__(self, widget_title, lochist_entry): + self.widget_title = widget_title + self.lochist_entry = lochist_entry + +last_pos = None + +class save_position_ah_t(listing_action_handler_t): + + ACTION_NAME = "save_and_restore_listing_pos:save_position" + ACTION_LABEL = "Save position" + ACTION_SHORTCUT = "Ctrl+Shift+S" + HELP_TEXT = "Press %s in a 'listing' widget such as 'IDA View-A', 'Enums', 'Structures', 'Pseudocode-A', ... to remember the position" % ACTION_SHORTCUT + + def activate(self, ctx): + global last_pos + e = ida_moves.lochist_entry_t() + if ida_kernwin.get_custom_viewer_location(e, ctx.widget): + last_pos = last_pos_t(ctx.widget_title, e) + else: + print("Failed to retrieve position") + + +class restore_position_ah_t(listing_action_handler_t): + + ACTION_NAME = "save_and_restore_listing_pos:restore_position" + ACTION_LABEL = "Restore position" + ACTION_SHORTCUT = "Ctrl+Shift+O" + HELP_TEXT = "Press %s in a 'listing' widget such as 'IDA View-A', 'Enums', 'Structures', 'Pseudocode-A', ... to restore a previously-saved position" % ACTION_SHORTCUT + + def activate(self, ctx): + global last_pos + if last_pos: + w = ida_kernwin.find_widget(last_pos.widget_title) + if w: + ida_kernwin.custom_viewer_jump(w, last_pos.lochist_entry) + else: + print("Widget \"%s\" not found" % last_pos.widget_title) + else: + print("No last position to restore") + + +klasses = [ + save_position_ah_t, + restore_position_ah_t, +] + +for klass in klasses: + if ida_kernwin.unregister_action(klass.ACTION_NAME): + print("Unregistered previously-registered action \"%s\"" % klass.ACTION_LABEL) + + if ida_kernwin.register_action( + ida_kernwin.action_desc_t( + klass.ACTION_NAME, + klass.ACTION_LABEL, + klass(), + klass.ACTION_SHORTCUT)): + print("Registered action \"%s\". %s" % (klass.ACTION_LABEL, klass.HELP_TEXT)) + diff --git a/examples/ex_choose.py b/examples/widgets/tabular_views/custom/choose.py similarity index 78% rename from examples/ex_choose.py rename to examples/widgets/tabular_views/custom/choose.py index 005dce1..bcb9555 100644 --- a/examples/ex_choose.py +++ b/examples/widgets/tabular_views/custom/choose.py @@ -2,6 +2,7 @@ from __future__ import print_function import ida_kernwin from ida_kernwin import Choose +# ----------------------------------------------------------------------- class chooser_handler_t(ida_kernwin.action_handler_t): def __init__(self, thing): ida_kernwin.action_handler_t.__init__(self) @@ -18,7 +19,24 @@ class chooser_handler_t(ida_kernwin.action_handler_t): if ida_kernwin.is_chooser_widget(ctx.widget_type) \ else ida_kernwin.AST_DISABLE_FOR_WIDGET + @staticmethod + def compose_action_name(v): + return "choose:act%s" % v + +# create actions +actions_variants = ["A", "B"] +for av in actions_variants: + actname = chooser_handler_t.compose_action_name(av) + if ida_kernwin.unregister_action(actname): + print("Unregistered previously-registered action \"%s\"" % actname) + + desc = ida_kernwin.action_desc_t(actname, "command %s" % av, chooser_handler_t(av)) + if ida_kernwin.register_action(desc): + print("Registered action \"%s\"" % actname) + + +# ----------------------------------------------------------------------- class MyChoose(Choose): def __init__(self, title, nb = 5, flags = 0, @@ -37,7 +55,7 @@ class MyChoose(Choose): width = width, height = height) self.n = 0 - self.items = [ self.make_item() for x in xrange(nb) ] + self.items = [ self.make_item() for x in range(nb) ] self.icon = 5 self.selcount = 0 self.modal = modal @@ -98,18 +116,14 @@ class MyChoose(Choose): def OnClose(self): print("closed", str(self)) - def OnPopup(self, form, popup_handle): - for c in ["A", "B"]: - actname = "choose:act%s" % c - desc = ida_kernwin.action_desc_t( - actname, - "command %s" % c, - chooser_handler_t(c)) - ida_kernwin.attach_dynamic_action_to_popup( - form, popup_handle, desc) - def show(self): - return self.Show(self.modal) >= 0 + ok = self.Show(self.modal) >= 0 + if ok: + # permanently attach actions to this chooser's popup menu + for av in actions_variants: + actname = chooser_handler_t.compose_action_name(av) + ida_kernwin.attach_action_to_popup(self.GetWidget(), None, actname) + return ok def make_item(self): r = [str(self.n), "func_%04d" % self.n] diff --git a/examples/ex_choose_multi.py b/examples/widgets/tabular_views/custom/choose_multi.py similarity index 90% rename from examples/ex_choose_multi.py rename to examples/widgets/tabular_views/custom/choose_multi.py index 5e62a36..0bd69c2 100644 --- a/examples/ex_choose_multi.py +++ b/examples/widgets/tabular_views/custom/choose_multi.py @@ -10,7 +10,7 @@ class MyChoose(Choose): title, [ ["Bit", Choose.CHCOL_HEX | 10] ], flags = Choose.CH_MULTI) - self.items = [ str(1 << x) for x in xrange(nb) ] + self.items = [ str(1 << x) for x in range(nb) ] def OnGetSize(self): return len(self.items) @@ -24,7 +24,7 @@ class MyChoose(Choose): def show(self, num): self.deflt = [x - for x in xrange(len(self.items)) + for x in range(len(self.items)) if (num & (1 << x)) != 0] if self.Show(True) < 0: return 0 diff --git a/examples/ex_func_chooser.py b/examples/widgets/tabular_views/custom/func_chooser.py similarity index 100% rename from examples/ex_func_chooser.py rename to examples/widgets/tabular_views/custom/func_chooser.py diff --git a/examples/widgets/tabular_views/strings_window/show_selected_strings.py b/examples/widgets/tabular_views/strings_window/show_selected_strings.py new file mode 100644 index 0000000..cda92a8 --- /dev/null +++ b/examples/widgets/tabular_views/strings_window/show_selected_strings.py @@ -0,0 +1,77 @@ + +# +# This example lets the user programmatically retrieve +# the strings currently selected in the "Strings window" +# + +import ida_kernwin +import ida_strlist +import ida_bytes + +class show_strings_base_ah_t(ida_kernwin.action_handler_t): + + def __init__(self, use_get_chooser_data): + ida_kernwin.action_handler_t.__init__(self) + self.use_get_chooser_data = use_get_chooser_data + + def activate(self, ctx): + for idx in ctx.chooser_selection: + if self.use_get_chooser_data: + _, _, _, s = ida_kernwin.get_chooser_data(ctx.widget_title, idx) + else: + si = ida_strlist.string_info_t() + if ida_strlist.get_strlist_item(si, idx): + s = ida_bytes.get_strlit_contents(si.ea, si.length, si.type) + print("Selected string (retrieved using %s) at index %d: \"%s\"" % ( + "get_chooser_data()" if self.use_get_chooser_data else "get_strlist_item()", + idx, + s)) + return 0 + + def update(self, ctx): + return ida_kernwin.AST_ENABLE_FOR_WIDGET \ + if ctx.widget_type == ida_kernwin.BWN_STRINGS \ + else ida_kernwin.AST_DISABLE_FOR_WIDGET + + +class show_strings_using_get_chooser_data_ah_t(show_strings_base_ah_t): + ACTION_NAME = "test:show_string_using_get_chooser_data" + ACTION_LABEL = "Show current string(s) using get_chooser_data()" + ACTION_SHORTCUT = "Ctrl+Shift+S" + + def __init__(self): + show_strings_base_ah_t.__init__(self, True) + + +class show_strings_using_get_strlist_item_ah_t(show_strings_base_ah_t): + ACTION_NAME = "test:show_string_using_get_strlist_item" + ACTION_LABEL = "Show current string(s) using get_strlist_item() + get_strlit_contents()" + ACTION_SHORTCUT = "Ctrl+Shift+K" + + def __init__(self): + show_strings_base_ah_t.__init__(self, False) + + +klasses = [ + show_strings_using_get_chooser_data_ah_t, + show_strings_using_get_strlist_item_ah_t, +] + +sw = ida_kernwin.find_widget("Strings window") +if not sw: + sw = ida_kernwin.open_strings_window(ida_idaapi.BADADDR) + +for klass in klasses: + if ida_kernwin.unregister_action(klass.ACTION_NAME): + print("Unregistered previously-registered action \"%s\"" % klass.ACTION_LABEL) + + if ida_kernwin.register_action( + ida_kernwin.action_desc_t( + klass.ACTION_NAME, + klass.ACTION_LABEL, + klass(), + klass.ACTION_SHORTCUT)): + print("Registered action \"%s\"" % (klass.ACTION_LABEL,)) + if sw: + ida_kernwin.attach_action_to_popup(sw, None, klass.ACTION_NAME) + print("Permanently added action to \"String window\"'s popup") diff --git a/examples/widgets/waitbox/show_and_hide_waitbox.py b/examples/widgets/waitbox/show_and_hide_waitbox.py new file mode 100644 index 0000000..0a5be2b --- /dev/null +++ b/examples/widgets/waitbox/show_and_hide_waitbox.py @@ -0,0 +1,49 @@ + +# +# A simple example showing how to use: +# ida_kernwin.show_wait_box +# ida_kernwin.hide_wait_box +# ida_kernwin.replace_wait_box +# + +import time +import random + +import ida_kernwin +import ida_hexrays +import ida_funcs + +import idautils + +perform_decompilation=False + +# Note: this try/except block below is just there to +# let us (at Hex-Rays) test this script in various +# situations. +try: + perform_decompilation = under_test__perform_decompilation +except: + pass + + +step_sleep = 0.5 +ida_kernwin.show_wait_box("Processing") +try: + all_eas = list(idautils.Functions()) + neas = len(all_eas) + for i, ea in enumerate(all_eas): + if ida_kernwin.user_cancelled(): + break + ida_kernwin.replace_wait_box("Processing; step %d/%d" % (i+1, neas)) + + if perform_decompilation: + try: + ida_hexrays.decompile(ida_funcs.get_func(ea)) + except ida_hexrays.DecompilationFailure as df: + print("Decompilation failure: %s" % df) + + time.sleep(step_sleep * random.random()) +finally: + ida_kernwin.hide_wait_box() + + diff --git a/extapi.cpp b/extapi.cpp new file mode 100644 index 0000000..49142b6 --- /dev/null +++ b/extapi.cpp @@ -0,0 +1,136 @@ + +#include + +#include + +#include "extapi.hpp" + +#ifdef __NT__ +#include +#include +//------------------------------------------------------------------------- +bool ext_api_t::load(qstring *errbuf) +{ + QASSERT(30602, lib_path.empty() && lib_handle == nullptr); + + // Inspired by https://docs.microsoft.com/en-us/windows/win32/psapi/enumerating-all-modules-for-a-process + HANDLE hProcess = GetCurrentProcess(); + HMODULE hMods[1024]; + DWORD cbNeeded; + if ( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded) == 0 ) + return false; + + const void *wanted = (const void *) Py_IsInitialized; + for ( size_t i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ ) + { + MODULEINFO module_info; + if ( GetModuleInformation(hProcess, hMods[i], &module_info, sizeof(module_info)) ) + { + if ( wanted >= module_info.lpBaseOfDll ) + { + LPVOID end = (LPVOID) ((const char *) module_info.lpBaseOfDll + module_info.SizeOfImage); + if ( wanted < end ) + { + // found module + lib_handle = (void *) hMods[i]; + break; + } + } + } + } + + if ( lib_handle == nullptr ) + return false; + +#define BIND_SYMBOL(Name) \ + do \ + { \ + * (FARPROC *) &Name ## _ptr = GetProcAddress( \ + (HMODULE) lib_handle, TEXT(#Name)); \ + if ( Name ## _ptr == nullptr ) \ + { \ + errbuf->sprnt("GetProcAddress(\"%s\") failed: %s", \ + #Name, qstrerror(-1)); \ + return false; \ + } \ + } while ( 0 ) + + BIND_SYMBOL(PyEval_SetTrace); + BIND_SYMBOL(PyRun_SimpleString); + BIND_SYMBOL(PyRun_String); + BIND_SYMBOL(PyFunction_New); + BIND_SYMBOL(PyFunction_GetCode); + BIND_SYMBOL(_PyLong_AsByteArray); + +#undef BIND_SYMBOL + + return true; +} + +//------------------------------------------------------------------------- +void ext_api_t::clear() +{ + lib_handle = nullptr; +} + +#else + +#include + +//------------------------------------------------------------------------- +bool ext_api_t::load(qstring *errbuf) +{ + QASSERT(30603, lib_path.empty() && lib_handle == nullptr); + + // First, let's figure out the library to load + Dl_info dl_info; + memset(&dl_info, 0, sizeof(dl_info)); + int rc = dladdr((void *) Py_IsInitialized, &dl_info); + if ( rc == 0 ) + { + *errbuf = "Cannot determine path to shared object"; + return false; + } + + lib_path = dl_info.dli_fname; + lib_handle = dlopen(lib_path.c_str(), RTLD_NOLOAD | RTLD_GLOBAL | RTLD_LAZY); + if ( lib_handle == nullptr ) + { + errbuf->sprnt("dlopen(\"%s\") failed: %s", lib_path.c_str(), qstrerror(-1)); + return false; + } + +#define BIND_SYMBOL(Name) \ + do \ + { \ + Name ## _ptr = (Name ## _t *) dlsym(lib_handle, #Name); \ + if ( Name ## _ptr == nullptr ) \ + { \ + errbuf->sprnt("dlsym(\"%s\") failed: %s", #Name, qstrerror(-1)); \ + return false; \ + } \ + } while ( 0 ) + + BIND_SYMBOL(PyEval_SetTrace); + BIND_SYMBOL(PyRun_SimpleString); + BIND_SYMBOL(PyRun_String); + BIND_SYMBOL(PyFunction_New); + BIND_SYMBOL(PyFunction_GetCode); + BIND_SYMBOL(_PyLong_AsByteArray); + +#undef BIND_SYMBOL + + return true; +} + +//------------------------------------------------------------------------- +void ext_api_t::clear() +{ + if ( lib_handle != nullptr ) + { + dlclose(lib_handle); + lib_handle = nullptr; + } +} + +#endif diff --git a/extapi.hpp b/extapi.hpp new file mode 100644 index 0000000..c9a7c4c --- /dev/null +++ b/extapi.hpp @@ -0,0 +1,43 @@ +#ifndef EXTAPI_HPP +#define EXTAPI_HPP + +#include + +#ifdef Py_LIMITED_API +typedef void *Py_tracefunc; +struct PyCompilerFlags; +struct PyFrameObject; +#else +#include +#endif + +typedef void PyEval_SetTrace_t(Py_tracefunc, PyObject *); + +typedef int PyRun_SimpleString_t(const char *); +typedef PyObject *PyRun_String_t(const char *, int, PyObject *, PyObject *); + +typedef PyObject *PyFunction_New_t(PyObject *, PyObject *); +typedef PyObject *PyFunction_GetCode_t(PyObject *); + +typedef int _PyLong_AsByteArray_t(PyObject *, unsigned char *, size_t, int, int); + +struct ext_api_t +{ + qstring lib_path; + void *lib_handle; + + PyEval_SetTrace_t *PyEval_SetTrace_ptr; + PyRun_SimpleString_t *PyRun_SimpleString_ptr; + PyRun_String_t *PyRun_String_ptr; + PyFunction_New_t *PyFunction_New_ptr; + PyFunction_GetCode_t *PyFunction_GetCode_ptr; + _PyLong_AsByteArray_t *_PyLong_AsByteArray_ptr; + + ext_api_t() { memset(this, 0, sizeof(*this)); } + ~ext_api_t() { clear(); } + + bool load(qstring *errbuf); + void clear(); +}; + +#endif // EXTAPI_HPP diff --git a/idapy.hpp b/idapy.hpp new file mode 100644 index 0000000..b8bee0c --- /dev/null +++ b/idapy.hpp @@ -0,0 +1,226 @@ +#ifndef IDAPY_HPP +#define IDAPY_HPP 1 + +// This set of wrappers lets us keep the typemaps in an acceptable shape. +// Once IDAPython loses support for Python 2.7, these will go. + +#ifdef PY3 + +inline int IDAPyInt_Check(PyObject *obj) +{ + return PyLong_Check(obj); +} + +inline long IDAPyInt_AsLong(PyObject *io) +{ + return PyLong_AsLong(io); +} + +inline Py_ssize_t IDAPyInt_AsSsize_t(PyObject *pylong) +{ + return PyLong_AsSsize_t(pylong); +} + +inline PyObject *IDAPyInt_FromLong(long ival) +{ + return PyLong_FromLong(ival); +} + +inline int IDAPyIntOrLong_Check(PyObject *obj) +{ + return PyLong_Check(obj); +} + +inline long IDAPyIntOrLong_AsLong(PyObject *obj) +{ + return PyLong_AsLong(obj); +} + +inline int IDAPyStr_Check(PyObject *obj) +{ + return PyUnicode_Check(obj); +} + +inline bool IDAPyStr_AsUTF8(qstring *out, PyObject *obj) +{ + PyObject *utf8 = PyUnicode_AsUTF8String(obj); + bool ok = utf8 != NULL; + if ( ok ) + { + char *buffer = NULL; + Py_ssize_t length = 0; + ok = PyBytes_AsStringAndSize(utf8, &buffer, &length) >= 0; + if ( ok ) + { + out->qclear(); + out->append(buffer, length); + } + } + Py_XDECREF(utf8); + return ok; +} + +inline PyObject *IDAPyStr_FromUTF8(const char *v) +{ + return PyUnicode_FromString(v); +} + +inline PyObject *IDAPyStr_FromUTF8AndSize(const char *v, Py_ssize_t len) +{ + return PyUnicode_FromStringAndSize(v, len); +} + +inline int IDAPyBytes_Check(PyObject *obj) +{ + return PyBytes_Check(obj); +} + +inline int IDAPyBytes_Size(PyObject *obj) +{ + return PyBytes_Size(obj); +} + +inline PyObject *IDAPyBytes_FromMem(const char *v) +{ + return PyBytes_FromString(v); +} + +inline PyObject *IDAPyBytes_FromMemAndSize(const char *v, Py_ssize_t len) +{ + return PyBytes_FromStringAndSize(v, len); +} + +inline int IDAPyBytes_AsMemAndSize(PyObject *obj, char **buffer, Py_ssize_t *length) +{ + return PyBytes_AsStringAndSize(obj, buffer, length); +} + +inline char *IDAPyBytes_AsString(PyObject *o) +{ + return PyBytes_AsString(o); +} + +#else + +inline int IDAPyInt_Check(PyObject *obj) +{ + return PyInt_Check(obj); +} + +inline long IDAPyInt_AsLong(PyObject *io) +{ + return PyInt_AsLong(io); +} + +inline Py_ssize_t IDAPyInt_AsSsize_t(PyObject *pylong) +{ + return PyInt_AsSsize_t(pylong); +} + +inline PyObject *IDAPyInt_FromLong(long ival) +{ + return PyInt_FromLong(ival); +} + +inline int IDAPyIntOrLong_Check(PyObject *obj) +{ + return PyInt_Check(obj) || PyLong_Check(obj); +} + +inline long IDAPyIntOrLong_AsLong(PyObject *obj) +{ + return PyInt_Check(obj) ? PyInt_AsLong(obj) : PyLong_AsLong(obj); +} + +inline int IDAPyStr_Check(PyObject *obj) +{ + return PyString_Check(obj); +} + +inline bool IDAPyStr_AsUTF8(qstring *out, PyObject *obj) +{ + char *buffer = NULL; + Py_ssize_t length = 0; + bool ok = PyString_AsStringAndSize(obj, &buffer, &length) >= 0; + if ( ok ) + { + out->qclear(); + out->append(buffer, length); + } + return ok; +} + +inline PyObject *IDAPyStr_FromUTF8(const char *v) +{ + return PyString_FromString(v); +} + +inline PyObject *IDAPyStr_FromUTF8AndSize(const char *v, Py_ssize_t len) +{ + return PyString_FromStringAndSize(v, len); +} + +inline int IDAPyBytes_Check(PyObject *obj) +{ + return PyString_Check(obj); +} + +inline int IDAPyBytes_Size(PyObject *obj) +{ + return PyString_Size(obj); +} + +inline PyObject *IDAPyBytes_FromMem(const char *v) +{ + return PyString_FromString(v); +} + +inline PyObject *IDAPyBytes_FromMemAndSize(const char *v, Py_ssize_t len) +{ + return PyString_FromStringAndSize(v, len); +} + +inline int IDAPyBytes_AsMemAndSize(PyObject *obj, char **buffer, Py_ssize_t *length) +{ + return PyString_AsStringAndSize(obj, buffer, length); +} + +inline char *IDAPyBytes_AsString(PyObject *o) +{ + return PyString_AsString(o); +} + +#endif + + +//------------------------------------------------------------------------- +// common code +//------------------------------------------------------------------------- + +inline bool IDAPyBytes_AsBytes(bytevec_t *out, PyObject *obj) +{ + char *buffer = NULL; + Py_ssize_t length = 0; + bool ok = IDAPyBytes_AsMemAndSize(obj, &buffer, &length) >= 0; + if ( ok ) + { + out->qclear(); + out->append((const uchar *) buffer, length); + } + return ok; +} + +inline bool IDAPyBytes_as_qtype(qtype *out, PyObject *obj) +{ + bytevec_t bytes; + bool ok = IDAPyBytes_AsBytes(&bytes, obj); + if ( ok ) + { + out->qclear(); + out->append(bytes.begin(), bytes.size()); + } + return ok; +} + +#endif // IDAPY_HPP + diff --git a/idapyswitch.cpp b/idapyswitch.cpp new file mode 100644 index 0000000..6b3a0b5 --- /dev/null +++ b/idapyswitch.cpp @@ -0,0 +1,706 @@ + +/* + * This utility is meant to be used to let IDA switch between + * installed versions of Python3. + * + * See the documentation placed in 'opts.epilog', near the bottom + * of this file. + */ + +#ifdef __NT__ +# include +#endif + +#include + +//lint -esym(1788, iinc) is referenced only by its constructor or destructor + +#include +#include +#include +#include +#include + +#define EXIT_CODE_FORCE_PATH_FAILED 110 + +#define EXIT_CODE_NO_INSTALLS 120 +#define EXIT_CODE_APPLY_FAILED 121 + +#ifdef __LINUX__ +# define EXIT_CODE_SPLIT_DEBUG_EXPAND_DT_NEEDED_ROOM_FAILED 140 +#endif + +#ifdef __GNUC__ // gcc defines those macros, that are in our way +# undef major +# undef minor +#endif + +//------------------------------------------------------------------------- +struct user_args_t +{ + qstring force_path; + bool verbose; + bool auto_apply; + bool dry_run; +#ifdef __UNIX__ + bool ignore_python_config; + uint32 major_version; +#endif +#ifdef __LINUX__ + qstring split_debug_expand_libpython3_dtneeded_room; //lint !e958 padding of 4 bytes needed to align member on a 8 byte boundary +#endif + + user_args_t() + : verbose(false), + auto_apply(false), + dry_run(false) +#ifdef __UNIX__ + , ignore_python_config(false), + major_version(3) +#endif + {} +}; +static user_args_t args; + +//------------------------------------------------------------------------- +static int out_ident = 0; +struct out_ident_inc_t +{ + out_ident_inc_t() { ++out_ident; } + ~out_ident_inc_t() { --out_ident; } +}; + +//------------------------------------------------------------------------- +AS_PRINTF(1, 0) int vout(const char *format, va_list va) +{ + for ( int i = 0; i < out_ident; ++i ) + printf(" "); + return vprintf(format, va); +} + +//------------------------------------------------------------------------- +AS_PRINTF(1, 2) int out(const char *format, ...) +{ + va_list va; + va_start(va, format); + int rc = vout(format, va); + va_end(va); + return rc; +} + +//------------------------------------------------------------------------- +AS_PRINTF(1, 2) int out_verb(const char *format, ...) +{ + int rc = 0; + if ( args.verbose ) + { + out("V: "); + va_list va; + va_start(va, format); + rc = vout(format, va); + va_end(va); + } + return rc; +} + +//------------------------------------------------------------------------- +AS_PRINTF(2, 3) void error(int exit_code, const char *format, ...) +{ + va_list va; + va_start(va, format); + vout(format, va); + va_end(va); + qexit(exit_code); +} + + +//------------------------------------------------------------------------- +struct pylib_version_t +{ + int major; + int minor; + int revision; + qstring modifiers; //lint !e958 padding of 4 bytes needed to align member on a 8 byte boundary + qstring raw; + + pylib_version_t( + int _major=0, + int _minor=0, + int _revision=0, + const char *_modifiers=nullptr, + const char *_raw=nullptr) + : major(_major), + minor(_minor), + revision(_revision), + modifiers(_modifiers), + raw(_raw) {} + + bool valid() const { return major > 0; } + + const char *str(qstring *out) const + { + out->sprnt("%d.%d.%d%s ('%s')", + major, minor, revision, + modifiers.c_str(), raw.c_str()); + return out->c_str(); + } + + DECLARE_COMPARISONS(pylib_version_t) + { + if ( major != r.major ) + return major - r.major; + if ( minor != r.minor ) + return minor - r.minor; + if ( revision != r.revision ) + return revision - r.revision; + // when it comes to modifiers, we'll consider: + // - that a debug version is lesser than a non-debug one + // - that a version with more modifiers is "greater" than + // one with fewer modifiers. + const int has_debug = qstrstr(modifiers.c_str(), "d") != nullptr; + const int r_has_debug = qstrstr(r.modifiers.c_str(), "d") != nullptr; + if ( has_debug != r_has_debug ) + return r_has_debug - has_debug; + return modifiers.length() - r.modifiers.length(); + } +}; +DECLARE_TYPE_AS_MOVABLE(pylib_version_t); + +//------------------------------------------------------------------------- +struct pylib_entry_t +{ + pylib_version_t version; + pylib_version_t compatibility_version; // only for OSX + qstrvec_t paths; + bool preferred; + + pylib_entry_t(const pylib_version_t &_version) + : version(_version), preferred(false) {} + + const char *str(qstring *out) const + { + qstring pbuf, vbuf; + for ( auto const &p : paths ) + { + if ( !pbuf.empty() ) + pbuf.append(", ", 2); + pbuf.append(p); + } + out->sprnt("Version: %s; paths: %s", version.str(&vbuf), pbuf.c_str()); + if ( preferred ) + out->append(" (PREFERRED)"); + return out->c_str(); + } + + bool operator ==(const pylib_entry_t &r) const { return paths == r.paths; } + bool operator !=(const pylib_entry_t &r) const { return !(*this == r); } +}; +DECLARE_TYPE_AS_MOVABLE(pylib_entry_t); +typedef qvector pylib_entry_vec_t; + +//------------------------------------------------------------------------- +struct pylib_entries_t +{ + pylib_entry_vec_t entries; + + pylib_entry_t *get_entry_for_version(const pylib_version_t &version) + { + for ( auto &e : entries ) + if ( e.version == version ) + return &e; + return nullptr; + } + + pylib_entry_t &get_or_create_entry_for_version(const pylib_version_t &version) + { + pylib_entry_t *e = get_entry_for_version(version); + if ( e == nullptr ) + { + pylib_entry_t ne(version); + entries.push_back(ne); + e = &entries.back(); + } + return *e; + } +}; + +#ifdef __UNIX__ +static void set_preferred_pylib_version(pylib_entries_t *result); +#endif + +//------------------------------------------------------------------------- +struct pyver_tool_t +{ + static bool reverse_compare_entries( + const pylib_entry_t &e0, + const pylib_entry_t &e1) + { + if ( e0.preferred ) + return true; + if ( e1.preferred ) + return false; + int rc = e0.version.compare(e1.version); + if ( rc > 0 ) + return true; + return false; + } + + bool path_to_pylib_entry( + pylib_entry_t *out, + const char *path, + qstring *errbuf) const + { + return do_path_to_pylib_entry(out, path, errbuf); + } + + void find_python_libs( + pylib_entries_t *result) const + { + do_find_python_libs(result); + +#ifdef __UNIX__ + set_preferred_pylib_version(result); +#endif + + std::sort(result->entries.begin(), result->entries.end(), reverse_compare_entries); + + qstring buf; + if ( args.verbose ) + { + out_ident_inc_t iinc; + for ( auto const &e : result->entries ) + out_verb("%s\n", e.str(&buf)); + } + } + + bool apply_version( + const pylib_entry_t &entry, + qstring *errbuf) const + { + return do_apply_version(entry, errbuf); + } + +private: + // These three need to be implemented in different + // ways on __NT__, __LINUX__ and __MAC__ + + // Look on the filesystem (or the registry on Windows) + // for available Python3 installations. + void do_find_python_libs(pylib_entries_t *out) const; + + // Given a path to a .so, .dll or .dylib, try and parse the + // Python3 version and produce an entry with it. + bool do_path_to_pylib_entry(pylib_entry_t *entry, const char *path, qstring *errbuf) const; + + // Do patch the idapython.[so|dylib] binary (or the + // registry on Windows) so that they refer to the right + // Python3 version. + bool do_apply_version(const pylib_entry_t &entry, qstring *errbuf) const; +}; + +//------------------------------------------------------------------------- +// Accepts: +// "3.7" +// "3.7.1" +// "3.7m" +// "3.7.1dm" + +//lint -esym(528, parse_python_version_str) not referenced +static bool parse_python_version_str(pylib_version_t *out, const char *raw) +{ + int major = 0; + int minor = 0; + int revision = 0; + int nchars_read; + + const char *p = raw; + + if ( qsscanf(raw, "%d.%d%n", &major, &minor, &nchars_read) != 2 ) + return false; + p += nchars_read; + + if ( p[0] == '.' && qisdigit(p[1]) ) + { + if ( qsscanf(p, ".%d%n", &revision, &nchars_read) != 1 ) + return false; + p += nchars_read; + } + + *out = pylib_version_t(major, minor, revision, p, raw); + return true; +} + +#ifdef __UNIX__ +//------------------------------------------------------------------------- +static bool extract_version_from_str( + pylib_version_t *out, + const char *p, + const char *stem, + const char *end_delimiter) +{ + const size_t stemlen = qstrlen(stem); + if ( !strneq(p, stem, stemlen) ) + return false; + p += stemlen; + const char *p2 = qstrstr(p, end_delimiter); + if ( p2 == nullptr ) + p2 = tail(p); + size_t nbytes = p2 - p; + char raw[MAXSTR]; + if ( nbytes > sizeof(raw) - 1 ) + nbytes = sizeof(raw) - 1; + memmove(raw, p, nbytes); + raw[nbytes] = '\0'; + parse_python_version_str(out, raw); + return true; +} + +//------------------------------------------------------------------------- +static void set_preferred_pylib_version(pylib_entries_t *result) +{ + // If python(3)-config exists, use it to determine the preferred version + if ( args.ignore_python_config ) + return; + + const char *config_util = args.major_version == 3 ? "python3-config" : "python-config"; + qstring cmd; + cmd.sprnt("%s --libs", config_util); + + qstring error; + qstring verbuf; + FILE *fp = popen(cmd.c_str(), "r"); + if ( fp != nullptr ) + { + char outbuf[MAXSTR]; + /*ssize_t nread =*/ qfread(fp, outbuf, sizeof(outbuf)); + int rc = pclose(fp); + if ( rc == 0 ) + { + pylib_version_t version; + const char *p = qstrstr(outbuf, "-lpython"); + if ( p != nullptr + && extract_version_from_str(&version, p, "-lpython", " ") ) + { +#ifdef __MAC__ + // python3-config output on OSX will contain modifiers, i.e. "-lpython3.7m", but when detecting pylibs on OSX + // we extract the python version from the LC_ID_DYLIB load command, which does not contain modifiers. + // it seems safe to ignore the modifiers on OSX, they appear to be only used for compatibility purposes. + version.modifiers.clear(); +#endif + out_verb("Preferred version, as reported by \"%s\": %s\n", cmd.c_str(), version.str(&verbuf)); + pylib_entry_t *e = result->get_entry_for_version(version); + if ( e != nullptr ) + e->preferred = true; + else + error.sprnt("\"%s\" reports preferred " + "version \"%s\", but no corresponding library file " + "was found.\n", cmd.c_str(), version.str(&verbuf)); + } + else + { + error.sprnt("Error parsing \"%s\" output", cmd.c_str()); + } + } + else + { + error.sprnt("Error calling \"%s\"", cmd.c_str()); + } + } + else + { + error.sprnt("\"%s\" is not available", config_util); + } + + if ( !error.empty() ) + out_verb("%s. Cannot determine preferred version this way.\n", + error.c_str()); +} +#endif // __UNIX__ + +#if defined(__LINUX__) || defined(__MAC__) +# ifdef __LINUX__ +# define SOSFX "so" +# else +# define SOSFX "dylib" +# endif + +//------------------------------------------------------------------------- +struct file_visitor_t +{ + virtual int visit_file(const char *path) = 0; +}; + +//------------------------------------------------------------------------- +static int visit_files( + file_visitor_t &dv, + const char *dir, + const char *pattern, + int attr = 0) +{ + char path[QMAXPATH]; + qmakepath(path, sizeof(path), dir, pattern, nullptr); + + qffblk64_t fb; + for ( int code = qfindfirst(path, &fb, attr); + code == 0; + code = qfindnext(&fb) ) + { + qmakepath(path, sizeof(path), dir, fb.ff_name, nullptr); + int ret = dv.visit_file(path); + if ( ret != 0 ) + return ret; + } + + return 0; +} + +//------------------------------------------------------------------------- +//lint -esym(528, for_all_plugin_files) not referenced +static int for_all_plugin_files(file_visitor_t &dv, qstring *errbuf) +{ + char path[QMAXPATH]; + char found = 0; + for ( int is_ea64 = 0; is_ea64 < 2; ++is_ea64 ) + { + // Only patch for actually available IDAs (e.g. don't fail in std edition) + qmakepath(path, sizeof(path), idadir(""), is_ea64 ? "ida64" : "ida", nullptr); + if ( qfileexist(path) ) + { + found++; + qmakepath(path, sizeof(path), idadir(""), "plugins", is_ea64 ? "idapython64." SOSFX : "idapython." SOSFX, nullptr); + int ret = dv.visit_file(path); + if ( ret != 0 ) + return ret; + + qmakepath(path, sizeof(path), idadir(""), "python", args.major_version == 3 ? "3" : "2", is_ea64 ? "ida_64" : "ida_32", nullptr); + ret = visit_files(dv, path, "_ida_*.so"); + if ( ret != 0 ) + return ret; + } + } + if ( !found ) + { + errbuf->sprnt("Nothing to patch in %s", idadir("")); + return -1; + } + + return 0; +} +#endif + +#ifdef __LINUX__ +# include "idapyswitch_linux.cpp" +#else +# ifdef __NT__ +# include "idapyswitch_win.cpp" +# else +# include "idapyswitch_mac.cpp" +# endif +#endif + +//------------------------------------------------------------------------- +static void set_verbose(const char *, void *) { args.verbose = true; } +static void set_auto_apply(const char *, void *) { args.auto_apply = true; } +static void set_dry_run(const char *, void *) { args.dry_run = true; } +static void set_force_path(const char *arg, void *) { args.force_path = arg; } +#ifdef __UNIX__ +static void set_ignore_python_config(const char *, void *) { args.ignore_python_config = true; } +#endif +#ifdef __LINUX__ +static void set_split_debug_expand_libpython3_dtneeded_room(const char *arg, void *) +{ + args.split_debug_expand_libpython3_dtneeded_room = arg; +} +#endif +#ifdef __MAC__ +static void set_use_python2(const char *, void *) { args.major_version = 2; } +#endif + +//------------------------------------------------------------------------- +static const cliopt_t _opts[] = +{ + { 'v', "verbose", "Verbose mode", set_verbose, 0 }, + { 'a', "auto-apply", "Run non-interactively; automatically apply the preferred version (if found)", set_auto_apply, 0 }, + { 'r', "dry-run", "Only report what would happen; don't do it", set_dry_run, 0 }, + { 's', "force-path", +#ifdef __LINUX__ + "Have IDAPython use the specified \"/path/to/libpython[...]so\" shared object", +#else +# ifdef __NT__ + "Have IDAPython use the specified \"\\path\\to\\python3.dll\" DLL", +# else + "Have IDAPython use the specified \"/path/to/libpython[...]dylib\" dylib", +# endif +#endif + set_force_path, + 1 + }, + +#ifdef __UNIX__ + { 'k', "ignore-python-config", "Don't use python-config to find out the preferred version number", set_ignore_python_config, 0 }, +#endif +#ifdef __LINUX__ + { 'x', "split-debug-and-expand-libpython3-dtneeded-room", "Expand the DT_NEEDED room to N bytes, using the local `patchelf` (needed at build-time only)", set_split_debug_expand_libpython3_dtneeded_room, 1 }, +#endif +#ifdef __MAC__ + { 't', "use-python2", "Search for alternate Python2 installations, and patch the Python2 version of idapython", set_use_python2, 0 }, +#endif +}; + +//------------------------------------------------------------------------- +static const char usage_epilog[] = + "Switch between available installations of Python3\n" + "\n" + "Because Python3 does not systematically install a single,\n" + "always-available \"python3.dll\", \"libpython3.so\" or \"python3.dylib\",\n" + "but rather allows for multiple versions of Python3 to be\n" + "installed in parallel on a given system, many tools\n" + "provide a way to switch between those versions.\n" + "\n" + "IDA is no exception, and this tool is one such Python3 'switcher'.\n" + "\n" + "It can be run in 3 ways:\n" + "\n" + " 1) The default, interactive way\n" + " -------------------------------\n" + " > $ idapyswitch\n" + " will look on the filesystem for available Python3 installations,\n" + " present the user with a list of found versions (sorted according\n" + " to preferability), and let the user pick which one IDA should use.\n" + "\n" + " 2) The 'automatic' way\n" + " ----------------------\n" + " > $ idapyswitch --auto\n" + " will look on the filesystem for available Python3 installations,\n" + " and automatically pick the one it deemed the most preferable.\n" + "\n" + " 3) The 'manual' way\n" + " -------------------\n" + " > $ idapyswitch --force-path /path/to/libpython3.7dm.so.1.2\n" + " will pick the path that the user provided.\n" + "\n" + "Once a version is picked, this tool will do the following:\n" + "\n" +#ifdef __NT__ + " * place the path to the directory containing python3.dll\n" + " into the registry. IDA will pick it up at launch-time,\n" + " and add it to the list of paths that have to be looked\n" + " into by the DLL loader.\n" +#else +# ifdef __LINUX__ + " * patch 'idapython.so' and 'idapython64.so' so that they\n" + " have a DT_NEEDED corresponding to the DT_SONAME of the\n" + " library that was selected.\n" +# else + " * patch 'idapython.dylib' and 'idapython64.dylib' so that\n" + " they refer to the right Python3 dylib.\n" +# endif +#endif + ; + +//------------------------------------------------------------------------- +int main(int argc, const char **argv) +{ + cliopts_t opts(out); + opts.epilog = usage_epilog; + opts.add(_opts, qnumber(_opts)); + opts.apply(argc, argv); + + qstring errbuf; + +#ifdef __LINUX__ + if ( !args.split_debug_expand_libpython3_dtneeded_room.empty() ) + { + if ( !split_debug_expand_libpython3_dtneeded_room( + args.split_debug_expand_libpython3_dtneeded_room.c_str(), + &errbuf) ) + { + error(EXIT_CODE_SPLIT_DEBUG_EXPAND_DT_NEEDED_ROOM_FAILED, + "Cannot split debug/expand DT_NEEDED room: %s\n", + errbuf.c_str()); + } + return 0; + } +#endif + + pyver_tool_t tool; + + if ( !args.force_path.empty() ) + { + const char *path = args.force_path.c_str(); + pylib_version_t dummy_version; + pylib_entry_t entry(dummy_version); + if ( !tool.path_to_pylib_entry(&entry, path, &errbuf) ) + { + error(EXIT_CODE_FORCE_PATH_FAILED, + "Cannot determine python library version for \"%s\": %s\n", + path, errbuf.c_str()); + } + if ( !tool.apply_version(entry, &errbuf) ) + { + qstring buf; + error(EXIT_CODE_FORCE_PATH_FAILED, + "Applying \"%s\" (extracted from path \"%s\") failed: %s\n", + entry.str(&buf), path, errbuf.c_str()); + } + } + else + { + pylib_entries_t entries; + tool.find_python_libs(&entries); + + const size_t nentries = entries.entries.size(); + if ( nentries > 0 ) + { + qstring buf; + const pylib_entry_t *preferred = nullptr; + if ( args.auto_apply ) + { + preferred = &entries.entries[0]; + } + else + { + out("The following Python installations were found:\n"); + for ( size_t i = 0; i < nentries; ++i ) + { + out_ident_inc_t iinc; + const pylib_entry_t &e = entries.entries[i]; + out("#%" FMT_Z ": %s (%s)\n", + i, + e.version.str(&buf), + !e.paths.empty() ? e.paths[0].c_str() : ""); + } + + size_t picked = size_t(-1); + while ( picked >= nentries ) + { + out("Please pick a number between 0 and %" FMT_Z " (default: 0)\n", nentries-1); + char numbuf[MAXSTR]; + qfgets(numbuf, sizeof(numbuf), stdin); + qstring qnumbuf(numbuf); + qnumbuf.rtrim('\n'); + if ( qnumbuf.empty() ) + picked = 0; + else + picked = qatoll(qnumbuf.c_str()); + } + preferred = &entries.entries[picked]; + } + + out("Applying version %s\n", preferred->version.str(&buf)); + if ( !tool.apply_version(*preferred, &errbuf) ) + { + error(EXIT_CODE_APPLY_FAILED, + "Apply failed: %s\n", + errbuf.c_str()); + } + } + else + { + error(EXIT_CODE_NO_INSTALLS, + "No Python installations were found\n"); + } + } + + return 0; +} diff --git a/idapyswitch_linux.cpp b/idapyswitch_linux.cpp new file mode 100644 index 0000000..643e86d --- /dev/null +++ b/idapyswitch_linux.cpp @@ -0,0 +1,474 @@ + +//------------------------------------------------------------------------- +static bool extract_version_from_libpython_filename( + pylib_version_t *out, + const char *p) +{ + return extract_version_from_str(out, p, "libpython", ".so"); +} + +//------------------------------------------------------------------------- +void pyver_tool_t::do_find_python_libs(pylib_entries_t *result) const +{ + // + // Find all libpython3*so* present on disk + // + static const char lib_pattern[] = "libpython3*.so*"; + static const char *dirs[] = + { + "/usr/lib/x86_64-linux-gnu", // Debian/Ubuntu + "/usr/lib64", // RedHat - FHS +#ifdef _DEBUG + "/opt/test-python-libs" +#endif + }; + + qstring verbuf; + + for ( size_t i = 0; i < qnumber(dirs); ++i ) + { + const char *d = dirs[i]; + out_verb("Searching for \"%s\" in \"%s\"\n", lib_pattern, d); + { + out_ident_inc_t iinc; + char path[QMAXPATH]; + qmakepath(path, sizeof(path), d, lib_pattern, nullptr); + qffblk64_t fb; + for ( int code = qfindfirst(path, &fb, 0); + code == 0; + code = qfindnext(&fb) ) + { + pylib_version_t version; + if ( extract_version_from_libpython_filename(&version, fb.ff_name) ) + { + qmakepath(path, sizeof(path), d, fb.ff_name, nullptr); + out_verb("Found: \"%s\" (version: %s)\n", path, version.str(&verbuf)); + pylib_entry_t &e = result->get_or_create_entry_for_version(version); + e.paths.push_back(path); + } + } + } + } +} + +//------------------------------------------------------------------------- +bool pyver_tool_t::do_path_to_pylib_entry( + pylib_entry_t *entry, + const char *path, + qstring *errbuf) const +{ + const char *fname = qbasename(path); + const bool ok = fname != nullptr && qfileexist(path); + if ( ok ) + { + extract_version_from_libpython_filename(&entry->version, fname); + entry->paths.push_back(path); + } + else + { + errbuf->sprnt("Couldn't parse file name \"%s\"", fname); + } + return ok; +} + +#define msg out +#define warning out +AS_PRINTF(1, 2) void ask_for_feedback(const char *format, ...) +{ +} +#include "../../ldr/elf/reader.cpp" + +//------------------------------------------------------------------------- +static bool read_ident_and_header_and_get_dyninfo( + dynamic_info_t *out_dyninfo, + reader_t::dyninfo_tags_t *out_dyninfo_tags, + reader_t &reader, + qstring *errbuf) +{ + if ( !reader.read_ident() ) + { + *errbuf = "Couldn't parse ELF file ident"; + return false; + } + + if ( !reader.read_header() ) + { + *errbuf = "Couldn't parse ELF file header"; + return false; + } + + dynamic_linking_tables_t dlt; + if ( reader.read_section_headers() + && reader.sections.has_valid_dynamic_linking_tables_info() ) + { + dlt = reader.sections.get_dynamic_linking_tables_info(); + } + else if ( reader.read_program_headers() + && reader.pheaders.has_valid_dynamic_linking_tables_info() ) + { + dlt = reader.pheaders.get_dynamic_linking_tables_info(); + } + return dlt.is_valid() + && reader.read_dynamic_info_tags(out_dyninfo_tags, dlt) + && reader.parse_dynamic_info(out_dyninfo, *out_dyninfo_tags); +} + +//------------------------------------------------------------------------- +static bool find_libpython_dt_needed_info( + char out_dt_needed_buf[MAXSTR], + qoff64_t *out_dt_needed_off, + const reader_t::dyninfo_tags_t &dyninfo_tags, + reader_t &reader, + const char *path, + qstring *errbuf) +{ + static const char needed_stem[] = "libpython"; + for ( const auto &dyn : dyninfo_tags ) + { + if ( dyn.d_tag == DT_NEEDED ) + { + const qoff64_t off = reader.dyn_strtab.offset + dyn.d_un; + input_status_t save_excursion(reader); + if ( save_excursion.seek(off) == -1 ) + { + errbuf->sprnt("Couldn't seek to offset %" FMT_64 "u in \"%s\"", off, path); + return false; + } + out_dt_needed_buf[0] = '\0'; + qlread(reader.get_linput(), out_dt_needed_buf, MAXSTR); + out_verb("DT_NEEDED at offset %" FMT_64 "u is: \"%s\"\n", off, out_dt_needed_buf); + if ( strneq(out_dt_needed_buf, needed_stem, sizeof(needed_stem)-1) ) + { + *out_dt_needed_off = off; + return true; + } + } + } + errbuf->sprnt("No DT_NEEDED starting with \"%s\" found", needed_stem); + return false; +} + +//------------------------------------------------------------------------- +static bool patch_dt_needed( + const char *path, + const qstring &replacement, + qstring *errbuf) +{ + out_verb("Setting relevant DT_NEEDED of \"%s\" to \"%s\"\n", path, replacement.c_str()); + out_ident_inc_t iinc; + linput_t *linput = open_linput(path, /*remote=*/ false); + if ( linput == nullptr ) + { + errbuf->sprnt("File not found: %s", path); + return false; + } + linput_janitor_t lj(linput); + reader_t reader(linput); + dynamic_info_t dyninfo; + reader_t::dyninfo_tags_t dyninfo_tags; + if ( !read_ident_and_header_and_get_dyninfo( + &dyninfo, + &dyninfo_tags, + reader, + errbuf) ) + { + return false; + } + + char dt_needed[MAXSTR]; + qoff64_t dt_needed_off; + if ( !find_libpython_dt_needed_info( + dt_needed, + &dt_needed_off, + dyninfo_tags, + reader, + path, + errbuf) ) + { + return false; + } + + out_verb("Found DT_NEEDED; currently: \"%s\"\n", dt_needed); + + // count the maximum number of bytes we can store in there + size_t room = 0; + { + input_status_t save_excursion(reader); + if ( save_excursion.seek(dt_needed_off) == -1 ) + { + errbuf->sprnt("Couldn't seek to offset %" FMT_64 "u in \"%s\"", dt_needed_off, path); + return false; + } + + // find the end of the current DT_NEEDED + uint8 byte; + const int64 filesz = qlsize(reader.get_linput()); + while ( qltell(reader.get_linput()) < filesz && reader.read_byte(&byte) == 0 ) + if ( byte == 0 ) + break; + + // then find the beginning of the next string, or the end of file + while ( qltell(reader.get_linput()) < filesz && reader.read_byte(&byte) == 0 ) + if ( byte != 0 ) + break; + room = qltell(reader.get_linput()) - dt_needed_off - 1; + } + + const size_t nbytes = replacement.length(); + out_verb("We have room for %" FMT_Z " bytes, and need to write %" FMT_Z "\n", + room, nbytes); + + // and patch + if ( room >= nbytes ) + { + FILE *fp = openM(path); + if ( fp != nullptr ) + { + file_janitor_t fpj(fp); + if ( qfseek(fp, dt_needed_off, SEEK_SET) == 0 ) + { + if ( !args.dry_run ) + { + // we want to write the zero as well! + if ( qfwrite(fp, replacement.c_str(), nbytes+1) == nbytes+1 ) + { + out_verb("File \"%s\" successfully patched\n", path); + } + else + { + errbuf->sprnt("Couldn't write %" FMT_Z " bytes to \"%s\"", nbytes, path); + return false; + } + } + else + { + out("Would write %" FMT_Z " bytes (\"%s\") to file\n", + nbytes, replacement.c_str()); + } + } + else + { + errbuf->sprnt("Cannot seek to position %" FMT_64 "u in \"%s\"", dt_needed_off, path); + return false; + } + } + else + { + errbuf->sprnt("Couldn't open \"%s\" for writing", path); + return false; + } + } + else + { + errbuf->sprnt("Replacement \"%s\" has a length of %" FMT_Z + " bytes, but there is only room for %" FMT_Z "" + " bytes in the file. Cannot proceed.\n", + replacement.c_str(), nbytes, room); + return false; + } + return true; +} + +//------------------------------------------------------------------------- +bool pyver_tool_t::do_apply_version( + const pylib_entry_t &entry, + qstring *errbuf) const +{ + qstring soname; + for ( const auto &path : entry.paths ) + { + out_verb("Trying to find out DT_SONAME from file \"%s\"\n", path.c_str()); + linput_t *linput = open_linput(path.c_str(), /*remote=*/ false); + linput_janitor_t lj(linput); + reader_t reader(linput); + dynamic_info_t dyninfo; + reader_t::dyninfo_tags_t dyninfo_tags; + qstring nonfatal_errbuf; + if ( read_ident_and_header_and_get_dyninfo( + &dyninfo, + &dyninfo_tags, + reader, + &nonfatal_errbuf) ) + { + for ( const auto &dyn : dyninfo_tags ) + { + if ( dyn.d_tag == DT_SONAME ) + { + soname = dyninfo.d_un_str(reader, dyn.d_tag, dyn.d_un); + out_verb("Found DT_SONAME: \"%s\"\n", soname.c_str()); + break; + } + } + } + else + { + out_verb("%s: %s", path.c_str(), nonfatal_errbuf.c_str()); + } + if ( !soname.empty() ) + break; + } + if ( soname.empty() ) + { + *errbuf = "No SONAME found"; + return false; + } + + // Now, do patch + struct ida_local patcher_t : public file_visitor_t + { + const qstring &lsoname; + qstring *lerrbuf; + + patcher_t(const qstring &_soname, qstring *_errbuf) + : lsoname(_soname), lerrbuf(_errbuf) {} + + virtual int visit_file(const char *path) + { + return patch_dt_needed(path, lsoname, lerrbuf) ? 0 : -1; + } + }; + patcher_t patcher(soname, errbuf); + return for_all_plugin_files(patcher, patcher.lerrbuf) == 0; +} + +//------------------------------------------------------------------------- +static int run_command(const char *_cmd, qstring *errbuf) +{ + qstring cmd(_cmd); + if ( args.dry_run ) + cmd.insert("echo "); + int rc = -1; + out_verb("Running: \"%s\"\n", cmd.c_str()); + FILE *fp = popen(cmd.c_str(), "r"); + if ( fp != nullptr ) + { + char outbuf[MAXSTR]; + /*ssize_t nread =*/ qfread(fp, outbuf, sizeof(outbuf)); + rc = pclose(fp); + if ( rc != 0 ) + errbuf->sprnt("Error calling \"%s\"; output is: %s", cmd.c_str(), outbuf); + } + else + { + errbuf->sprnt("Command \"%s\" couldn't be run", cmd.c_str()); + } + return rc; +} + +//------------------------------------------------------------------------- +#define SLOT_SIZE 64 +static bool split_debug_expand_libpython3_dtneeded_room( + const char *path, + qstring *errbuf) +{ + qstring cmdline; + char dt_needed[MAXSTR]; + { + qstring debug_path(path); + debug_path.append(".debug"); + + char path_dir[QMAXPATH]; + if ( !qdirname(path_dir, sizeof(path_dir), path) ) + { + errbuf->sprnt("Cannot obtain directory name for path \"%s\"", path); + return false; + } + + { + char cwd[QMAXPATH]; + qgetcwd(cwd, sizeof(cwd)); + + if ( qchdir(path_dir) == 0 ) + { + out_verb("Changed directory to: \"%s\"\n", path_dir); + } + else + { + errbuf->sprnt("Cannot chdir to \"%s\"", path_dir); + return false; + } + + + cmdline.sprnt("objcopy --only-keep-debug %s %s", qbasename(path), qbasename(debug_path.c_str())); + if ( run_command(cmdline.c_str(), errbuf) != 0 ) + return false; + + cmdline.sprnt("strip -s -x %s", qbasename(path)); + if ( run_command(cmdline.c_str(), errbuf) != 0 ) + return false; + + cmdline.sprnt("objcopy --add-gnu-debuglink=%s %s", qbasename(debug_path.c_str()), qbasename(path)); + if ( run_command(cmdline.c_str(), errbuf) != 0 ) + return false; + + if ( qchdir(cwd) == 0 ) + { + out_verb("Back to directory: \"%s\"\n", cwd); + } + else + { + errbuf->sprnt("Cannot chdir back to \"%s\"", cwd); + return -1; + } + } + + linput_t *linput = open_linput(path, /*remote=*/ false); + if ( linput == nullptr ) + { + errbuf->sprnt("File not found: %s", path); + return false; + } + linput_janitor_t lj(linput); + reader_t reader(linput); + dynamic_info_t dyninfo; + reader_t::dyninfo_tags_t dyninfo_tags; + if ( !read_ident_and_header_and_get_dyninfo( + &dyninfo, + &dyninfo_tags, + reader, + errbuf) ) + { + return false; + } + + qoff64_t dt_needed_off; + if ( !find_libpython_dt_needed_info( + dt_needed, + &dt_needed_off, + dyninfo_tags, + reader, + path, + errbuf) ) + { + return false; + } + } + + qstring replacement(dt_needed); + replacement.resize(SLOT_SIZE, '_'); + + // call patchelf to replace the DT_NEEDED with a padded one + out_verb("Found DT_NEEDED: \"%s\"; replacing with \"%s\"\n", + dt_needed, replacement.c_str()); + + cmdline.sprnt("patchelf --replace-needed %s %s %s", + dt_needed, + replacement.c_str(), + path); + if ( run_command(cmdline.c_str(), errbuf) == 0 ) + { + out_verb("\"%s\" command successful. Restoring the " + "original DT_NEEDED of \"%s\"\n", + cmdline.c_str(), dt_needed); + qstring padded_dt_needed(dt_needed); + padded_dt_needed.resize(SLOT_SIZE, '\0'); + if ( !patch_dt_needed(path, padded_dt_needed, errbuf) ) + return false; + } + else + { + return false; + } + + return true; +} diff --git a/idapyswitch_mac.cpp b/idapyswitch_mac.cpp new file mode 100644 index 0000000..7a1692d --- /dev/null +++ b/idapyswitch_mac.cpp @@ -0,0 +1,442 @@ +#include + +#define BUILD_IDAPYSWITCH +#include "../../ldr/ar/ar.hpp" +#include "../../ldr/ar/aixar.hpp" +#include "../../ldr/ar/arcmn.cpp" // for is_ar_file +#include "../../ldr/mach-o/common.cpp" + +//------------------------------------------------------------------------- +static void get_python_version(pylib_version_t *out, uint32 mask) +{ + out->revision = uint8(mask); + out->minor = uint8(mask >> 8); + out->major = uint8(mask >> 16); +} + +//------------------------------------------------------------------------- +static uint32 get_python_version_mask(const pylib_version_t &version) +{ + return version.revision + | version.minor << 8 + | version.major << 16; +} + +//------------------------------------------------------------------------- +static bool get_pylib_entry_for_macho( + pylib_entry_t *entry, + const char *path, + qstring *errbuf) +{ + linput_t *li = open_linput(path, false); + if ( li == nullptr ) + { + errbuf->sprnt("Failed to open file: %s", winerr(errno)); + return false; + } + linput_janitor_t lij(li); + + macho_file_t mfile(li); + if ( !mfile.parse_header() ) + { + errbuf->sprnt("Failed to parse Mach-O header"); + return false; + } + + size_t n = 0; + size_t nfat = mfile.get_fat_subfiles(); + if ( nfat == 0 ) + { + if ( mfile.get_subfile_type(0) != macho_file_t::SUBFILE_MACH_64 ) + { + errbuf->sprnt("File is not 64-bit Mach-O"); + return false; + } + } + else + { + bool found_x64 = false; + for ( size_t i = 0; i < nfat; i++ ) + { + if ( mfile.get_subfile_type(i) == macho_file_t::SUBFILE_MACH_64 ) + { + found_x64 = true; + n = i; + break; + } + } + if ( !found_x64 ) + { + errbuf->sprnt("No 64-bit arch found in FAT header"); + return false; + } + } + + if ( !mfile.set_subfile(n) ) + { + errbuf->sprnt("Failed to parse load commands"); + return false; + } + + struct ida_local lcid_finder_t : public macho_lc_visitor_t + { + pylib_entry_t *entry; + lcid_finder_t(pylib_entry_t *_entry) : entry(_entry) {} + virtual int visit_dylib(const struct dylib_command *dl, const char *begin, const char *end) + { + if ( dl->cmd == LC_ID_DYLIB ) + { + get_python_version(&entry->version, dl->dylib.current_version); + get_python_version(&entry->compatibility_version, dl->dylib.compatibility_version); + return 1; + } + return 0; + } + }; + + lcid_finder_t finder(entry); + if ( !mfile.visit_load_commands(finder) ) + { + errbuf->sprnt("failed to determine libpython version: LC_ID_DYLIB not found"); + return false; + } + + if ( entry->version.major != args.major_version ) + { + qstring verbuf; + errbuf->sprnt("unsupported python version %s", entry->version.str(&verbuf)); + return false; + } + + entry->paths.push_back(path); + return true; +} + +//------------------------------------------------------------------------- +static int extract_pylib_bin(pylib_entries_t *result, const char *version_dir) +{ + struct ida_local pylib_finder_t : public file_visitor_t + { + pylib_entries_t *result; + pylib_finder_t(pylib_entries_t *_result) : result(_result) {} + virtual int visit_file(const char *bin) + { + qstring errbuf; + pylib_version_t dummy; + pylib_entry_t entry(dummy); + + if ( get_pylib_entry_for_macho(&entry, bin, &errbuf) ) + { + qstring verbuf; + out_verb("Found: \"%s\" (version: %s)\n", bin, entry.version.str(&verbuf)); + result->entries.add_unique(entry); + return 1; + } + + out_verb("Skipping %s: %s\n", bin, errbuf.c_str()); + return 0; + } + }; + + // the name of the Framework binary can vary. just be safe and examine all files. + pylib_finder_t f(result); + return visit_files(f, version_dir, "*"); +} + +//------------------------------------------------------------------------- +static void extract_pylib_versions(pylib_entries_t *result, const char *framework) +{ + struct ida_local version_visitor_t : public file_visitor_t + { + pylib_entries_t *result; + version_visitor_t(pylib_entries_t *_result) : result(_result) {} + virtual int visit_file(const char *version_dir) + { + extract_pylib_bin(result, version_dir); + return 0; + } + }; + + // examine all Python versions in the Framework + version_visitor_t v(result); + char versions[QMAXPATH]; + qmakepath(versions, sizeof(versions), framework, "Versions", nullptr); + visit_files(v, versions, "*", FA_DIREC); +} + +//------------------------------------------------------------------------- +void pyver_tool_t::do_find_python_libs(pylib_entries_t *result) const +{ + static const char *framework_dirs[] = + { + "/Library/Frameworks", + "/System/Library/Frameworks", + "/Library/Developer/CommandLineTools/Library/Frameworks", + "/Applications/Xcode.app/Contents/Developer/Library/Frameworks", + "/usr/local/opt/python@3/Frameworks", + "/usr/local/opt/python@2/Frameworks", + }; + + struct ida_local python_framework_finder_t : public file_visitor_t + { + pylib_entries_t *result; + python_framework_finder_t(pylib_entries_t *_result) : result(_result) {} + virtual int visit_file(const char *framework) + { + extract_pylib_versions(result, framework); + return 0; + } + }; + + python_framework_finder_t pff(result); + for ( size_t i = 0; i < qnumber(framework_dirs); ++i ) + visit_files(pff, framework_dirs[i], "Python*.framework", FA_DIREC); +} + +//------------------------------------------------------------------------- +bool pyver_tool_t::do_path_to_pylib_entry( + pylib_entry_t *entry, + const char *path, + qstring *errbuf) const +{ + return get_pylib_entry_for_macho(entry, path, errbuf); +} + +//------------------------------------------------------------------------- +// misc information required to patch the load command for libpython +struct python_lc_info_t +{ + uint32 off; // offset of libpython load command + uint32 size; // size of libpython load command + qstring path; // libpython path + pylib_version_t version; // libpython version + bytevec_t header; // header data: mach_header + all load commands + uint32 headerpadsz; // size of header, including all padded bytes + python_lc_info_t(void) : off(0), size(0), headerpadsz(UINT_MAX) {} +}; + +//------------------------------------------------------------------------- +static bool get_python_lc_info(python_lc_info_t *plc, const char *path, qstring *errbuf) +{ + linput_t *li = open_linput(path, false); + if ( li == nullptr ) + { + errbuf->sprnt("Failed to open file: %s", winerr(errno)); + return false; + } + linput_janitor_t lij(li); + + // here we are assuming the target binary was built by us, which means it is a non-fat, + // 64-bit Mach-O file that links against a PythonX.X framework, and has its header padded + // so that we can patch the load commands without issue. + macho_file_t mfile(li); + if ( !mfile.parse_header() ) + { + errbuf->sprnt("Failed to parse Mach-O header"); + return false; + } + if ( mfile.get_fat_subfiles() > 0 || mfile.get_subfile_type(0) != macho_file_t::SUBFILE_MACH_64 ) + { + errbuf->sprnt("Unexpected filetype (expected 64-bit Mach-O)"); + return false; + } + if ( !mfile.set_subfile(0) ) + { + errbuf->sprnt("Failed to parse load commands"); + return false; + } + + const secvec_t §s = mfile.get_sections(); + + // find the section with the smallest fileoff. it will tell us the size of the padded header. + for ( size_t i = 0, nsects = sects.size(); i < nsects; i++ ) + { + const section_64 &s = sects[i]; + + if ( s.size != 0 + && (s.flags & S_ZEROFILL) == 0 + && (s.flags & S_THREAD_LOCAL_ZEROFILL) == 0 + && s.offset < plc->headerpadsz ) + { + plc->headerpadsz = s.offset; + } + } + + if ( plc->headerpadsz == UINT_MAX ) + { + errbuf->sprnt("Failed to determine padded size of the Mach-O header"); + return false; + } + + // extract the libpython load command + struct ida_local python_lc_finder_t : public macho_lc_visitor_t + { + python_lc_info_t *plc; + python_lc_finder_t(python_lc_info_t *_plc) : plc(_plc) + { + plc->off = sizeof(mach_header_64); + } + virtual int visit_any_load_command(const struct load_command *lc, const char *begin, const char *end) + { + if ( lc->cmd == LC_LOAD_DYLIB ) + { + const struct dylib_command *dl = (const struct dylib_command *)begin; + const char *p = begin + dl->dylib.name.offset; + if ( p < end ) + { + qstring _path = qstring(p, end-p); + const char *basename = qbasename(_path.c_str()); + if ( strneq(basename, "Python", 6) || strneq(basename, "libpython", 9) ) + { + plc->path = _path; + plc->size = dl->cmdsize; + get_python_version(&plc->version, dl->dylib.current_version); + return 1; + } + } + } + // not libpython, keep looking + plc->off += lc->cmdsize; + return 0; + } + }; + + python_lc_finder_t finder(plc); + if ( !mfile.visit_load_commands(finder) ) + { + errbuf->sprnt("No libpython dependency found"); + return false; + } + + mfile.get_mach_header_data(&plc->header); + return true; +} + +//------------------------------------------------------------------------- +typedef janitor_t fd_janitor_t; +template <> inline fd_janitor_t::~janitor_t() +{ + qclose(resource); +} + +//------------------------------------------------------------------------- +static bool do_patch( + void *map, + const pylib_entry_t &entry, + const python_lc_info_t &plc, + qstring *errbuf) +{ + const char *path = entry.paths[0].c_str(); + size_t path_len = entry.paths[0].length(); + + // validate the size of the new load command + mach_header_64 *mheader = (mach_header_64 *)map; + uint32 sizeofcmds = mheader->sizeofcmds; + uint32 newcmdsize = align_up(sizeof(dylib_command) + path_len + 1, 8); + + int32 diff = newcmdsize - plc.size; + sizeofcmds += diff; + + if ( sizeofcmds + sizeof(mach_header_64) > plc.headerpadsz ) + { + errbuf->sprnt("Updated load commands do not fit in the Mach-O header"); + return false; + } + + // patch the mach header + mheader->sizeofcmds = sizeofcmds; + + // patch the libpython load command + dylib_command *cmd = (dylib_command *)((uchar *)map + plc.off); + cmd->cmdsize = newcmdsize; + cmd->dylib.current_version = get_python_version_mask(entry.version); + cmd->dylib.compatibility_version = get_python_version_mask(entry.compatibility_version); + + // write the new libpython path + uchar *ptr = (uchar *)cmd + sizeof(dylib_command); + memcpy(ptr, path, path_len); + ptr += path_len; + size_t npad = newcmdsize - (sizeof(dylib_command) + path_len); + memset(ptr, 0, npad); + ptr += npad; + + // copy the original load commands after libpython + const uchar *org = plc.header.begin() + plc.off + plc.size; + const uchar *end = plc.header.end(); + size_t norg = end - org; + memcpy(ptr, org, norg); + ptr += norg; + + // if the new sizeofcmds is smaller, fill excess space with 0s + if ( diff < 0 ) + memset(ptr, 0, -diff); + + return true; +} + +//------------------------------------------------------------------------- +static bool patch_python_dylib_cmd( + const char *path, + const pylib_entry_t &entry, + qstring *errbuf) +{ + out_verb("patching: %s\n", path); + + python_lc_info_t plc; + if ( !get_python_lc_info(&plc, path, errbuf) ) + return false; + + // be careful that we're not patching the wrong build of idapython + if ( entry.version.major != plc.version.major ) + { + errbuf->sprnt("idapython binary %s was not built against python %d", path, entry.version.major); + return false; + } + + int fd = qopen(path, O_RDWR); + if ( fd < 0 ) + { + errbuf->sprnt("Failed to open file: %s", winerr(errno)); + return false; + } + fd_janitor_t fdj(fd); + + qstatbuf sbuf; + memset(&sbuf, 0, sizeof(sbuf)); + if ( qfstat(fd, &sbuf) != 0 ) + { + errbuf->sprnt("fstat() failed: %s", winerr(errno)); + return false; + } + + void *map = mmap(0, sbuf.qst_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); + if ( map == MAP_FAILED ) + { + errbuf->sprnt("mmap() failed: %s", winerr(errno)); + return false; + } + + bool ok = do_patch(map, entry, plc, errbuf); + + munmap(map, sbuf.qst_size); + return ok; +} + +//------------------------------------------------------------------------- +bool pyver_tool_t::do_apply_version( + const pylib_entry_t &entry, + qstring *errbuf) const +{ + struct ida_local patcher_t : public file_visitor_t + { + const pylib_entry_t &entry; + qstring *lerrbuf; + patcher_t(const pylib_entry_t &_entry, qstring *_errbuf) : entry(_entry), lerrbuf(_errbuf) {} + virtual int visit_file(const char *path) + { + return patch_python_dylib_cmd(path, entry, lerrbuf) ? 0 : -1; + } + }; + patcher_t patcher(entry, errbuf); + return for_all_plugin_files(patcher, patcher.lerrbuf) == 0; +} diff --git a/idapyswitch_win.cpp b/idapyswitch_win.cpp new file mode 100644 index 0000000..2c094ac --- /dev/null +++ b/idapyswitch_win.cpp @@ -0,0 +1,476 @@ + +#define PYTHON3_DLL "python3.dll" + +//------------------------------------------------------------------------- +#define IDA_HKEY HKEY_CURRENT_USER +#define IDA_ADDLIB_SUBKEY L"Software\\Hex-Rays\\IDA" +#define IDA_ADDLIB_VALUE L"Python3TargetDLL" + +#define PYTHON_INSTALLS_KEY L"Software\\Python" +#define PYTHON_INSTALL_PATH_SUBKEY L"InstallPath" +#define PYTHON_DISPLAY_NAME_SUBKEY L"DisplayName" +#define PYTHON_SYSVER_SUBKEY L"SysVersion" +#define PYTHON_INSTALL_PATH_DEFAULT_VALUE L"" + +//------------------------------------------------------------------------- +static bool open_ida_addlib_subkey(HKEY *out, REGSAM samDesired) +{ + DWORD err = RegOpenKeyExW(IDA_HKEY, IDA_ADDLIB_SUBKEY, 0, samDesired, out); + if ( err == ERROR_SUCCESS ) + return true; + if ( samDesired == KEY_READ ) + return false; + // opening for write failed; create the subkeys + err = RegCreateKeyExW(IDA_HKEY, IDA_ADDLIB_SUBKEY, 0, NULL, REG_OPTION_NON_VOLATILE, samDesired, NULL, out, NULL); + return err == ERROR_SUCCESS; +} + +//------------------------------------------------------------------------- +static bool read_string( + qstring *out, + HKEY key, + const wchar16_t *value, + qstring *errbuf=nullptr) +{ + DWORD type; + DWORD size; + if ( RegQueryValueExW(key, value, nullptr, &type, nullptr, &size) == ERROR_SUCCESS && type == REG_SZ ) + { + bytevec_t buf; + buf.resize(size); + if ( RegQueryValueExW(key, value, nullptr, &type, buf.begin(), &size) == ERROR_SUCCESS && type == REG_SZ ) + return utf16_utf8(out, (wchar16_t *) buf.begin(), buf.size() / sizeof(wchar16_t)); + } + if ( errbuf != nullptr ) + errbuf->sprnt("Couldn't query value \"%ls\"\n", value); + return false; +} + +//------------------------------------------------------------------------- +static bool write_string( + HKEY key, + const wchar16_t *value, + const char *str, + qstring *errbuf=nullptr) +{ + qwstring wstr; + bool ok = utf8_utf16(&wstr, str) + && RegSetValueExW(key, value, 0, REG_SZ, + (LPBYTE) wstr.c_str(), + wstr.length() * sizeof(wstr[0])) == ERROR_SUCCESS; + if ( !ok ) + errbuf->sprnt("Couldn't write string data \"%s\" to value \"%ls\"", str, value); + return ok; +} + +//------------------------------------------------------------------------- +static bool extract_version_from_path( + pylib_version_t *out, + const char *_path) +{ + qstring qpath(_path); + qpath.rtrim('\\'); + const char *path = qpath.c_str(); + const char *p = qbasename(path); + if ( p == nullptr ) + return false; + if ( !strnieq(p, "Python", 6) ) + return false; + p += 6; + if ( !qisdigit(p[0]) || !qisdigit(p[1]) ) + return false; + out->raw = p; + int major = p[0] - '0'; + int minor = p[1] - '0'; + int revision = 0; + p += 2; + if ( qisdigit(p[0]) ) + { + revision = p[0] - '0'; + ++p; + } + out->major = major; + out->minor = minor; + out->revision = revision; + out->modifiers = p; + return true; +} + +//------------------------------------------------------------------------- +static bool is_python3Y_dll_file_name(const char *fname) +{ + return fname != nullptr + && strnieq(fname, "python3", 7) + && qisdigit(fname[7]) + && strieq(&fname[8], ".dll"); +} + +//------------------------------------------------------------------------- +static bool probe_python_install_dir_from_dll_path( + qstrvec_t *out_paths, + pylib_version_t *out_version, + const char *path, + qstring *errbuf) +{ + char dir[QMAXPATH]; + if ( !qdirname(dir, sizeof(dir), path) ) + { + errbuf->sprnt("Couldn't retrieve directory name from \"%s\"", path); + return false; + } + extract_version_from_path(out_version, dir); // not fatal if this fails + + bool found_python3_dll = false; + bool found_python3Y_dll = false; + static const char dll_pattern[] = "python3*.dll"; + + char pattern_path[QMAXPATH]; + qmakepath(pattern_path, sizeof(pattern_path), dir, dll_pattern, nullptr); + qstring verbuf; + qffblk64_t fb; + for ( int code = qfindfirst(pattern_path, &fb, 0); + code == 0; + code = qfindnext(&fb) ) + { + const char *ext = get_file_ext(fb.ff_name); + if ( ext != nullptr && strieq(ext, "dll") ) + { + char dll_path[QMAXPATH]; + qmakepath(dll_path, sizeof(dll_path), dir, fb.ff_name, nullptr); + out_verb("Found: \"%s\" (version: %s)\n", dll_path, out_version->str(&verbuf)); + out_paths->push_back(dll_path); + + if ( !found_python3_dll && strieq(fb.ff_name, PYTHON3_DLL) ) + found_python3_dll = true; + if ( !found_python3Y_dll && is_python3Y_dll_file_name(fb.ff_name) ) + found_python3Y_dll = true; + } + } + + if ( !found_python3_dll ) + { + errbuf->sprnt("No \"" PYTHON3_DLL "\" file found in directory \"%s\"", dir); + return false; + } + if ( !found_python3Y_dll ) + { + errbuf->sprnt("No \"python3[0-9].dll\" file found in directory \"%s\"", dir); + return false; + } + return true; +} + +//------------------------------------------------------------------------- +// given a key to a path like HKLM\SOFTWARE\Python\PythonCore, +// - enumerate subkeys and their check InstallPath subkey, using the default value as the directory to the installation +// e.g. +// HKLM\SOFTWARE\Python\PythonCore\3.6\InstallPath -> (Default) = C:\Python36\ +// - check for python3.dll and python3Y.dll in it and add them to 'result' +static void enum_python_key(pylib_entries_t *result, const HKEY hkey, qstring *_errbuf, qstring *_verbuf) +{ + qstring &errbuf = *_errbuf; + qstring &verbuf = *_verbuf; + int index = 0; + WCHAR subkey[MAXSTR]; + qstring displayname; + if ( read_string(&displayname, hkey, PYTHON_DISPLAY_NAME_SUBKEY) ) + { + out("Checking installs from \"%s\"\n", displayname.c_str()); + } + while ( true ) + { + DWORD subkey_sz = qnumber(subkey); + if ( RegEnumKeyExW(hkey, index++, subkey, &subkey_sz, + nullptr, nullptr, nullptr, nullptr) != ERROR_SUCCESS ) + { + // no more installs + break; + } + HKEY ihkey; + if ( RegOpenKeyExW(hkey, subkey, 0, KEY_READ, &ihkey) == ERROR_SUCCESS ) + { + out_verb("Opened \"%ls\"\n", subkey); + //opened an install. get its version from SysVersion value + qstring sysver; + pylib_version_t version; + bool ok = read_string(&sysver, ihkey, PYTHON_SYSVER_SUBKEY); + ok = ok && parse_python_version_str(&version, sysver.c_str()) && version.major >= 3; + if ( ok ) + { + if ( read_string(&displayname, ihkey, PYTHON_DISPLAY_NAME_SUBKEY) ) + { + out("Checking \"%s\" (%s)\n", displayname.c_str(), sysver.c_str()); + } + HKEY vhkey; + if ( RegOpenKeyExW(ihkey, PYTHON_INSTALL_PATH_SUBKEY, 0, KEY_READ, &vhkey) == ERROR_SUCCESS ) + { + qstring install_path; + if ( read_string(&install_path, vhkey, PYTHON_INSTALL_PATH_DEFAULT_VALUE, &errbuf) ) + { + char probe[QMAXPATH]; + qmakepath(probe, sizeof(probe), install_path.c_str(), PYTHON3_DLL, nullptr); + pylib_version_t unused; + qstrvec_t paths; + if ( probe_python_install_dir_from_dll_path( + &paths, + &version, + probe, + &errbuf) ) + { + out("Found: \"%s\" (version: %s)\n", install_path.c_str(), version.str(&verbuf)); + pylib_entry_t &e = result->get_or_create_entry_for_version(version); + e.paths.insert(e.paths.end(), paths.begin(), paths.end()); + } + else + { + out_verb("Ignoring directory \"%s\": %s\n", install_path.c_str(), errbuf.c_str()); + } + } + else + { + out_verb("Couldn't query \"%s\"'s value \"%ls\": %s\n", + subkey, + PYTHON_INSTALL_PATH_DEFAULT_VALUE, + errbuf.c_str()); + } + RegCloseKey(vhkey); + } + else + { + out_verb("Couldn't open \"%s\"\n", subkey); + } + } + else + { + out_verb("Not a Python 3.x or no version info, skipping\n"); + } + + RegCloseKey(ihkey); + } + } +} +//------------------------------------------------------------------------- +void pyver_tool_t::do_find_python_libs(pylib_entries_t *result) const +{ + qstring errbuf; + qstring verbuf; + + // + // Enumerate: + // * HKEY_LOCAL_MACHINE\Software\Python\PythonCore\* versions + // * HKEY_CURRENT_USER\Software\Python\PythonCore\* versions + // + static const HKEY top_keys[] = + { + HKEY_LOCAL_MACHINE, + HKEY_CURRENT_USER, + }; + + static const char * knames[] = + { + "HLKM", + "HKCU", + }; + for ( size_t i = 0; i < qnumber(top_keys); ++i ) + { + HKEY hkey_python; + out_verb("Searching for subkeys of \"%s\\%ls\"\n", knames[i], PYTHON_INSTALLS_KEY); + if ( RegOpenKeyExW(top_keys[i], PYTHON_INSTALLS_KEY, 0, KEY_READ, &hkey_python) == ERROR_SUCCESS ) + { + WCHAR subkey[MAXSTR]; + int index = 0; + while ( true ) + { + DWORD subkey_sz = qnumber(subkey); + if ( RegEnumKeyExW(hkey_python, index++, subkey, &subkey_sz, + nullptr, nullptr, nullptr, nullptr) != ERROR_SUCCESS ) + { + break; + } + HKEY hkey; + if ( RegOpenKeyExW(hkey_python, subkey, 0, KEY_READ, &hkey) == ERROR_SUCCESS ) + { + out_verb("Found \"%s\\%ls\\%ls\"\n", knames[i], PYTHON_INSTALLS_KEY, subkey); + enum_python_key(result, hkey, &errbuf, &verbuf); + RegCloseKey(hkey); + } + } + RegCloseKey(hkey_python); + } + } + + // + // See if we already have one registered for IDA + // + { + HKEY idahkey; + if ( open_ida_addlib_subkey(&idahkey, KEY_READ) ) + { + qstring existing; + if ( read_string(&existing, idahkey, IDA_ADDLIB_VALUE) ) + { + out_verb("Previously-used DLL: \"%s\"\n", existing.c_str()); + pylib_version_t version; + qstrvec_t paths; + if ( probe_python_install_dir_from_dll_path( + &paths, + &version, + existing.c_str(), + &errbuf) ) + { + out("IDA previously used: \"%s\" (guessed version: %s). " + "Making this the preferred version.\n", + existing.c_str(), version.str(&verbuf)); + pylib_entry_t e(version); + e.paths.swap(paths); + e.preferred = true; + result->entries.push_back(e); + } + else + { + out_verb("Ignoring directory \"%s\": %s\n", + existing.c_str(), errbuf.c_str()); + } + } + else + { + out_verb("\"%ls\" exists, but no \"%ls\" value found\n", + IDA_ADDLIB_SUBKEY, IDA_ADDLIB_VALUE); + } + RegCloseKey(idahkey); + } + else + { + out_verb("No \"%ls\" key found\n", IDA_ADDLIB_SUBKEY); + } + } +} + +//------------------------------------------------------------------------- +bool pyver_tool_t::do_path_to_pylib_entry( + pylib_entry_t *entry, + const char *path, + qstring *errbuf) const +{ + return probe_python_install_dir_from_dll_path(&entry->paths, &entry->version, path, errbuf); +} + +#include + +#include "../../ldr/pe/pe.h" +#include "../../ldr/pe/common.cpp" + +//------------------------------------------------------------------------- +bool pyver_tool_t::do_apply_version( + const pylib_entry_t &entry, + qstring *errbuf) const +{ + HKEY idahkey; + if ( !open_ida_addlib_subkey(&idahkey, KEY_WRITE) ) + { + errbuf->sprnt("Couldn't open \"%ls\" key for writing\n", IDA_ADDLIB_SUBKEY); + return false; + } + + qstring replacement; + bool ok = false; + for ( const auto &path : entry.paths ) + { + const char *candidate = qbasename(path.c_str()); + if ( is_python3Y_dll_file_name(candidate) ) + { + replacement = candidate; + ok = write_string(idahkey, IDA_ADDLIB_VALUE, path.c_str(), errbuf); + break; + } + } + RegCloseKey(idahkey); + if ( !ok ) + { + errbuf->sprnt("Couldn't find a suitable python3Y.dll file"); + return false; + } + + // Now, let's handle sip.pyd + out_verb("Handling sip.pyd\n"); + char path[QMAXPATH]; + qmakepath(path, sizeof(path), idadir(""), "python", "3", "PyQt5", "sip.pyd", nullptr); + linput_t *linput = open_linput(path, /*remote=*/ false); + if ( linput == nullptr ) + { + errbuf->sprnt("File not found: %s", path); + return false; + } + linput_janitor_t lj(linput); + pe_loader_t pl; + if ( !pl.read_header(linput, /*silent=*/ true) + || pl.process_sections(linput) != 0 ) + { + errbuf->sprnt("%s: couldn't read header, or process sections", path); + return false; + } + + for ( int ni = 0; ; ++ni ) + { + peimpdir_t tmp; + off_t off = pl.pe.impdir.rva + ni*sizeof(peimpdir_t); + out_verb("Reading import table at %u (0x%x)\n", uint32(off), uint32(off)); + if ( !pl.vmread(linput, off, &tmp, sizeof(tmp)) ) + { + errbuf->sprnt("%s: failed reading import table", path); + } + if ( tmp.dllname == 0 || tmp.looktab == 0 ) + break; + + char dll[MAXSTR]; + bool ok = true; + pl.asciiz(linput, tmp.dllname, dll, sizeof(dll), &ok); + if ( !ok ) + break; + out_verb("Import table entry #%d; dll name: \"%s\"\n", ni, dll); + if ( is_python3Y_dll_file_name(dll) ) + { + out_verb("Found python3Y.dll: \"%s\" at offset %u (0x%x)\n", + dll, tmp.dllname, tmp.dllname); + FILE *fp = openM(path); + if ( fp != nullptr ) + { + file_janitor_t fpj(fp); + if ( qfseek(fp, pl.map_ea(tmp.dllname), SEEK_SET) == 0 ) + { + const size_t nbytes = replacement.size(); // we want to write the zero as well! + if ( !args.dry_run ) + { + if ( qfwrite(fp, replacement.c_str(), nbytes) == nbytes ) + { + out_verb("File \"%s\" successfully patched (with \"%s\")\n", path, replacement.c_str()); + } + else + { + errbuf->sprnt("Couldn't write %" FMT_Z " bytes to \"%s\"", nbytes, path); + return false; + } + } + else + { + out("Would write %" FMT_Z " bytes (\"%s\") to file\n", + nbytes, replacement.c_str()); + } + } + else + { + errbuf->sprnt("Cannot seek to position %u in \"%s\"", tmp.dllname, path); + return false; + } + } + else + { + errbuf->sprnt("Couldn't open \"%s\" for writing", path); + return false; + } + break; + } + } + + return true; +} diff --git a/python.cfg b/idapython.cfg similarity index 96% rename from python.cfg rename to idapython.cfg index 65e6c69..91f3f55 100644 --- a/python.cfg +++ b/idapython.cfg @@ -14,7 +14,7 @@ SCRIPT_TIMEOUT = 3 AUTOIMPORT_COMPAT_IDAAPI = YES // Should the plugin automatically load a 6.95 bw-compatibility layer? -AUTOIMPORT_COMPAT_IDA695 = YES +AUTOIMPORT_COMPAT_IDA695 = NO // Is IDAPython namespace-aware? // If yes, then plugins, loaders & processor modules will each be loaded diff --git a/python.cpp b/idapython.cpp similarity index 87% rename from python.cpp rename to idapython.cpp index e3e788f..458ce67 100644 --- a/python.cpp +++ b/idapython.cpp @@ -18,13 +18,6 @@ #define _SSIZE_T_DEFINED 1 #endif -#ifdef __LINUX__ -#include -#endif -#ifdef __MAC__ -#include -#undef SEG_DATA // avoid conflict between mach-o/loader.h and segment.hpp -#endif // Python defines snprintf macro so we need to allow it #define USE_DANGEROUS_FUNCTIONS #include @@ -38,10 +31,19 @@ #if defined (PY_MAJOR_VERSION) && (PY_MAJOR_VERSION < 3) // in Python 2.x many APIs accept char * instead of const char * GCC_DIAG_OFF(write-strings) -#else -#error remove me once we switch to Python 3 #endif +#ifdef PY3 +# define PYCODE_OBJECT_TO_PYEVAL_ARG(Expr) (Expr) +#else +# define PYCODE_OBJECT_TO_PYEVAL_ARG(Expr) ((PyCodeObject *) Expr) +#endif + +#include "extapi.hpp" +#include "extapi.cpp" + +ext_api_t extapi; + #include "pywraps.hpp" #include "pywraps.cpp" @@ -108,7 +110,6 @@ static bool idaapi IDAPython_extlang_eval_expr( //#define ENABLE_PYTHON_PROFILING #ifdef ENABLE_PYTHON_PROFILING #include "compile.h" -#include "frameobject.h" static int tracefunc(PyObject *obj, _frame *frame, int what, PyObject *arg) { PyObject *str; @@ -120,7 +121,7 @@ static int tracefunc(PyObject *obj, _frame *frame, int what, PyObject *arg) str = PyObject_Str(frame->f_code->co_filename); if ( str != NULL ) { - msg("PROFILING: %s:%d\n", PyString_AsString(str), frame->f_lineno); + msg("PROFILING: %s:%d\n", IDAPyStr_AsUTF8(str), frame->f_lineno); Py_DECREF(str); } } @@ -133,12 +134,18 @@ static int tracefunc(PyObject *obj, _frame *frame, int what, PyObject *arg) static bool g_ui_ready = false; static bool g_alert_auto_scripts = true; static bool g_remove_cwd_sys_path = false; -static bool g_use_local_python = false; static bool g_autoimport_compat_idaapi = true; static bool g_autoimport_compat_ida695 = true; static bool g_namespace_aware = true; static bool g_repl_use_sys_displayhook = true; +//------------------------------------------------------------------------- +bool ida_export is_api695_compat_enabled() +{ + return g_autoimport_compat_ida695; +} + +//------------------------------------------------------------------------- // Allowing the user to interrupt a script is not entirely trivial. // Imagine the following script, that is run in an IDB that uses // an IDAPython processor module (important!) : @@ -167,7 +174,8 @@ static bool g_repl_use_sys_displayhook = true; struct exec_entry_t { time_t etime; - exec_entry_t() { etime = time(NULL); } + exec_entry_t() { reset_start_time(); } + void reset_start_time() { etime = time(NULL); } }; DECLARE_TYPE_AS_MOVABLE(exec_entry_t); typedef qvector exec_entries_t; @@ -178,13 +186,13 @@ struct execution_t exec_entries_t entries; int timeout; uint32 steps_before_action; - bool waitdialog_shown; + bool wait_box_shown; bool interruptible_state; execution_t() : timeout(2), steps_before_action(0), - waitdialog_shown(false), + wait_box_shown(false), interruptible_state(true) { reset_steps(); @@ -193,15 +201,53 @@ struct execution_t void push(); void pop(); bool can_interrupt_current(time_t now) const; + void reset_current_start_time(); void stop_tracking(); void sync_to_present_time(); - void maybe_hide_waitdialog(); + void maybe_hide_wait_box(); void set_interruptible(bool intr) { interruptible_state = intr; } - static int on_trace(PyObject *obj, _frame *frame, int what, PyObject *arg); + bool is_our_wait_box_in_charge() const; + static int on_trace(PyObject *obj, PyFrameObject *frame, int what, PyObject *arg); }; static execution_t execution; -//#define LOG_EXEC 1 +//------------------------------------------------------------------------- +typedef qvector idapython_wait_box_requests_t; +static idapython_wait_box_requests_t idapython_wait_box_requests; +static inline bool idapython_is_user_waitbox_shown() +{ + return idapython_wait_box_requests.has(false); +} + +//------------------------------------------------------------------------- +//lint -esym(683,show_wait_box) function 'show_wait_box' #define'd, semantics may be lost +//lint -esym(750,show_wait_box) local macro '' not referenced +//lint -esym(750,hide_wait_box) local macro '' not referenced +void ida_export idapython_show_wait_box( + bool internal, + const char *message) +{ + idapython_wait_box_requests.push_back(internal); +#undef show_wait_box + show_wait_box("%s", message); +#define show_wait_box USE_IDAPYTHON_SHOW_WAIT_BOX +} + +//------------------------------------------------------------------------- +void ida_export idapython_hide_wait_box() +{ + if ( !idapython_wait_box_requests.empty() ) + { + idapython_wait_box_requests.pop_back(); + execution.reset_current_start_time(); + } +#undef hide_wait_box + hide_wait_box(); +#define hide_wait_box USE_IDAPYTHON_HIDE_WAIT_BOX +} + + +// #define LOG_EXEC 1 #ifdef LOG_EXEC #define LEXEC(...) msg("IDAPython exec: " __VA_ARGS__) #else @@ -229,7 +275,7 @@ void execution_t::reset_steps() void execution_t::push() { if ( entries.empty() ) - PyEval_SetTrace(execution_t::on_trace, NULL); + extapi.PyEval_SetTrace_ptr((Py_tracefunc) execution_t::on_trace, NULL); //lint !e611 cast between pointer to function type '' and pointer to object type 'void *' entries.push_back(); LEXEC("push() (now: %d entries)\n", int(entries.size())); } @@ -246,8 +292,8 @@ void execution_t::pop() //------------------------------------------------------------------------- void execution_t::stop_tracking() { - PyEval_SetTrace(NULL, NULL); - maybe_hide_waitdialog(); + extapi.PyEval_SetTrace_ptr(NULL, NULL); + maybe_hide_wait_box(); } //------------------------------------------------------------------------- @@ -256,16 +302,17 @@ void execution_t::sync_to_present_time() time_t now = time(NULL); for ( size_t i = 0, n = entries.size(); i < n; ++i ) entries[i].etime = now; - maybe_hide_waitdialog(); + maybe_hide_wait_box(); } //------------------------------------------------------------------------- -void execution_t::maybe_hide_waitdialog() +void execution_t::maybe_hide_wait_box() { - if ( waitdialog_shown ) + if ( wait_box_shown ) { - hide_wait_box(); - waitdialog_shown = false; + LEXEC("execution_t (%p)::maybe_hide_wait_box() hiding dialog\n", this); + idapython_hide_wait_box(); + wait_box_shown = false; } } @@ -282,8 +329,18 @@ bool execution_t::can_interrupt_current(time_t now) const return can; } +//------------------------------------------------------------------------- +void execution_t::reset_current_start_time() +{ + if ( !entries.empty() ) + { + LEXEC("reset_current_start_time()\n"); + entries.back().reset_start_time(); + } +} + //------------------------------------------------------------------------ -int execution_t::on_trace(PyObject *obj, _frame *frame, int what, PyObject *arg) +int execution_t::on_trace(PyObject *obj, PyFrameObject *frame, int what, PyObject *arg) { LEXEC("on_trace() (steps=%d, nentries=%d)\n", int(execution.steps_before_action), @@ -294,33 +351,51 @@ int execution_t::on_trace(PyObject *obj, _frame *frame, int what, PyObject *arg) if ( get_active_modal_widget() != NULL ) { - LEXEC("on_trace()::a modal widget is active. Not showing the wait dialog.\n"); + LEXEC("on_trace()::a modal widget is active. Not showing our 'interrupt dialog'.\n"); return 0; } execution.reset_steps(); + + if ( idapython_is_user_waitbox_shown() ) + { + LEXEC("on_trace()::a user wait dialog is currently shown. Not showing our 'interrupt dialog'.\n"); + return 0; + } + time_t now = time(NULL); LEXEC("on_trace()::now: %d\n", int(now)); - bool can_interrupt = execution.can_interrupt_current(now); - if ( can_interrupt ) + if ( execution.can_interrupt_current(now) ) { - LEXEC("on_trace()::can_interrupt. Waitdialog shown? %d\n", - int(execution.waitdialog_shown)); - if ( execution.waitdialog_shown ) + const bool user_clicked_cancel = user_cancelled(); + LEXEC("on_trace()::can_interrupt. 'Interrupt dialog' shown=%d, user cancelled=%d\n", + int(execution.wait_box_shown), + int(user_clicked_cancel)); + if ( execution.wait_box_shown ) { - if ( user_cancelled() ) + if ( user_clicked_cancel ) { - LEXEC("on_trace()::INTERRUPTING\n"); if ( PyErr_Occurred() == NULL ) + { + LEXEC("on_trace()::INTERRUPTING (setting 'User interrupted' exception) at line %d\n", + PyFrame_GetLineNumber(frame)); PyErr_SetString(PyExc_KeyboardInterrupt, "User interrupted"); + } return -1; } } else { - LEXEC("on_trace()::showing wait dialog\n"); - show_wait_box("Running Python script"); - execution.waitdialog_shown = true; + if ( !user_clicked_cancel ) + { + LEXEC("on_trace()::showing wait dialog\n"); + idapython_show_wait_box(/*internal=*/ true, "Running Python script"); + execution.wait_box_shown = true; + } + else + { + LEXEC("on_trace()::not showing wait dialog; user_cancelled()\n"); + } } } @@ -445,23 +520,22 @@ static void PythonEvalOrExec( { // Compile as an expression PYW_GIL_CHECK_LOCKED_SCOPE(); - PyCompilerFlags cf = {0}; qstring qstr(str); - newref_t py_code(Py_CompileStringFlags(bomify(&qstr), filename, Py_eval_input, &cf)); + newref_t py_code(Py_CompileString(bomify(&qstr), filename, Py_eval_input)); if ( py_code == NULL || PyErr_Occurred() ) { // Not an expression? PyErr_Clear(); // Run as a string - PyRun_SimpleString(str); + extapi.PyRun_SimpleString_ptr(str); } else { PyObject *py_globals = get_module_globals(); newref_t py_result( PyEval_EvalCode( - (PyCodeObject *) py_code.o, + PYCODE_OBJECT_TO_PYEVAL_ARG(py_code.o), py_globals, py_globals)); @@ -482,10 +556,16 @@ static void PythonEvalOrExec( bool ok = false; if ( PyUnicode_Check(py_result.o) ) { + qstring utf8; +#ifdef PY3 + IDAPyStr_AsUTF8(&utf8, py_result.o); +#else newref_t py_result_utf8(PyUnicode_AsUTF8String(py_result.o)); ok = py_result_utf8 != NULL; if ( ok ) - msg("%s\n", PyString_AS_STRING(py_result_utf8.o)); + IDAPyStr_AsUTF8(&utf8, py_result_utf8.o); +#endif + msg("%s\n", utf8.c_str()); } else { @@ -523,7 +603,7 @@ static bool idaapi IDAPython_extlang_eval_snippet( PyErr_Clear(); { new_execution_t exec; - newref_t result(PyRun_String( + newref_t result(extapi.PyRun_String_ptr( str, Py_file_input, globals, @@ -624,18 +704,6 @@ static bool check_python_dir() } } - // on linux, PyQt needs to drop python/lib/python2.7/lib-dynload/sip.so, - // thus we can't rely on the mere presence of 'lib'. However, we know - // the bundled python drops python/lib/python27.zip. Let's look for that. -#ifdef __LINUX__ - qmakepath(filepath, sizeof(filepath), g_idapython_dir, "lib", "python27.zip", NULL); - if ( qfileexist(filepath) ) - { - deb(IDA_DEBUG_PLUGIN, "Found \"%s\"; assuming local Python.\n", filepath); - g_use_local_python = true; - } -#endif // __LINUX__ - return true; } @@ -643,7 +711,7 @@ static bool check_python_dir() // This function will execute a script in the main module context // It does not use 'import', thus the executed script will not yield a new module name // Caller of this function should call handle_python_error() to clear the exception and print the error -static int PyRunFile(const char *FileName) +static int PyRunFile(const char *path) { #ifdef __NT__ // if the current disk has no space (sic, the current directory, not the one @@ -661,25 +729,30 @@ static int PyRunFile(const char *FileName) #endif PYW_GIL_CHECK_LOCKED_SCOPE(); - PyObject *file_obj = PyFile_FromString((char*)FileName, "r"); //lint !e605 !e1776 - PyObject *globals = get_module_globals(); - if ( globals == NULL || file_obj == NULL ) - { - Py_XDECREF(file_obj); - return 0; - } - PyErr_Clear(); - PyObject *result = PyRun_File( - PyFile_AsFile(file_obj), - FileName, - Py_file_input, - globals, - globals); - Py_XDECREF(file_obj); - int rc = result != NULL && !PyErr_Occurred(); - Py_XDECREF(result); - return rc; + PyObject *__main__globals = get_module_globals(); + + //lint -esym(429, fp) custodial pointer not freed or returned + FILE *fp = qfopen(path, "rt"); + if ( fp == NULL ) + return 0; + file_janitor_t fpj(fp); + qstring contents; + const uint64 fpsz = qfsize(fp); + if ( fpsz == 0 ) + return 0; + contents.resize(fpsz); + qfread(fp, contents.begin(), fpsz); + + newref_t code(Py_CompileString(contents.c_str(), path, Py_file_input)); + if ( code == NULL ) + return 0; + + newref_t result(PyEval_EvalCode( + PYCODE_OBJECT_TO_PYEVAL_ARG(code.o), + __main__globals, + __main__globals)); + return result != NULL && !PyErr_Occurred(); } //------------------------------------------------------------------------- @@ -698,7 +771,7 @@ void IDAPython_RunStatement(void) { PYW_GIL_GET; new_execution_t exec; - PyRun_SimpleString(qbuf.c_str()); + extapi.PyRun_SimpleString_ptr(qbuf.c_str()); } // Store the statement to the database @@ -763,7 +836,7 @@ static bool IDAPython_ExecFile( if ( globals == NULL ) globals = get_module_globals(); - newref_t py_script(PyString_FromString(script)); + newref_t py_script(IDAPyStr_FromUTF8(script)); borref_t py_false(Py_False); newref_t py_ret(PyObject_CallFunctionObjArgs( py_execscript.o, @@ -816,9 +889,9 @@ static bool IDAPython_ExecFile( ok = true; } } - else if ( PyString_Check(ret_o) ) + else if ( IDAPyStr_Check(ret_o) ) { - *errbuf = PyString_AsString(ret_o); + IDAPyStr_AsUTF8(errbuf, ret_o); } else { @@ -917,15 +990,24 @@ static bool idaapi IDAPython_extlang_call_func( break; } - borref_t code(PyFunction_GetCode(func)); + borref_t code(extapi.PyFunction_GetCode_ptr(func)); qvector pargs_ptrs; pargs.to_pyobject_pointers(&pargs_ptrs); +#ifdef PY3 newref_t py_res(PyEval_EvalCodeEx( - (PyCodeObject*) code.o, + PYCODE_OBJECT_TO_PYEVAL_ARG(code.o), + globals, NULL, + pargs_ptrs.begin(), + nargs, + NULL, 0, NULL, 0, NULL, NULL)); +#else + newref_t py_res(PyEval_EvalCodeEx( + PYCODE_OBJECT_TO_PYEVAL_ARG(code.o), globals, NULL, pargs_ptrs.begin(), nargs, NULL, 0, NULL, 0, NULL)); +#endif ok = return_python_result(result, py_res, errbuf); } while ( false ); @@ -983,10 +1065,7 @@ static bool idaapi IDAPython_extlang_compile_expr( bool isfunc = false; qstring qstr(expr); - PyCodeObject *code = (PyCodeObject *)Py_CompileString( - bomify(&qstr), - "", - Py_eval_input); + PyObject *code = Py_CompileString(bomify(&qstr), "", Py_eval_input); if ( code == NULL ) { // try compiling as a list of statements @@ -995,7 +1074,7 @@ static bool idaapi IDAPython_extlang_compile_expr( qstring func; wrap_in_function(&func, expr, name); bomify(&func); - code = (PyCodeObject *)Py_CompileString(func.c_str(), "", Py_file_input); + code = Py_CompileString(func.c_str(), "", Py_file_input); if ( code == NULL ) { handle_python_error(errbuf); @@ -1004,12 +1083,8 @@ static bool idaapi IDAPython_extlang_compile_expr( isfunc = true; } - // Set the desired function name - Py_XDECREF(code->co_name); - code->co_name = PyString_FromString(name); - // Create a function out of code - PyObject *func = PyFunction_New((PyObject *)code, globals); + PyObject *func = extapi.PyFunction_New_ptr(code, globals); if ( func == NULL ) { @@ -1030,6 +1105,7 @@ ERR: idc_value_t result; return IDAPython_extlang_call_func(&result, name, NULL, 0, errbuf); } + return true; } @@ -1117,7 +1193,11 @@ static bool idaapi IDAPython_extlang_create_object( py_res = try_create_swig_wrapper(py_mod, clsname, args[0].pvoid); if ( py_res != NULL ) { +#ifdef PY3 + PyObject_SetAttrString(py_res.o, S_PY_IDCCVT_ID_ATTR, PyLong_FromLong(PY_ICID_OPAQUE)); +#else PyObject_SetAttrString(py_res.o, S_PY_IDCCVT_ID_ATTR, PyInt_FromLong(PY_ICID_OPAQUE)); +#endif } else { @@ -1213,8 +1293,8 @@ static bool idaapi IDAPython_extlang_get_attr( break; // Convert name python string to a C string - const char *clsname = PyString_AsString(string.o); - if ( clsname == NULL ) + qstring clsname; + if ( !IDAPyStr_AsUTF8(&clsname, string.o) ) break; result->set_string(clsname); @@ -1323,7 +1403,7 @@ static bool idaapi IDAPython_extlang_eval_expr( { { new_execution_t exec; - result = newref_t(PyRun_String(expr, Py_eval_input, globals, globals)); + result = newref_t(extapi.PyRun_String_ptr(expr, Py_eval_input, globals, globals)); } ok = return_python_result(rv, result, errbuf); } @@ -1684,7 +1764,7 @@ void convert_idc_args() char attr_name[20] = { "0" }; for ( int i=1; get_idcv_attr(&attr, idc_args, attr_name) == eOk; i++ ) { - PyList_Insert(py_args.o, i, PyString_FromString(attr.c_str())); + PyList_Insert(py_args.o, i, IDAPyStr_FromUTF8(attr.c_str())); qsnprintf(attr_name, sizeof(attr_name), "%d", i); } } @@ -1744,7 +1824,7 @@ static ssize_t idaapi on_ui_notification(void *, int code, va_list) { PYW_GIL_GET; // See above g_ui_ready = true; - PyRun_SimpleString("print_banner()"); + extapi.PyRun_SimpleString_ptr("print_banner()"); if ( g_run_when == RUN_ON_UI_READY ) RunScript(g_run_script); } @@ -1782,81 +1862,69 @@ static ssize_t idaapi on_idb_notification(void *, int code, va_list) return 0; } -#ifdef _DEBUG -//------------------------------------------------------------------------ -// extern int PyThread_acquire_lock(PyThread_type_lock lock, int waitflag); -extern PyThreadState *_PyThreadState_Current; -static ssize_t idaapi ui_debug_handler_cb(void *, int code, va_list) +//------------------------------------------------------------------------- +#ifdef PY3 +static wchar_t *utf8_wchar_t(qvector *out, const char *in) { - // This hook gets called from the kernel, but its very point is to - // make sure that we don't hold the GIL. Thus: No PYW_GIL_GET here! - switch ( code ) +#ifdef __NT__ + qwstring tmp; + utf8_utf16(&tmp, in); + out->qclear(); + out->insert(out->begin(), tmp.begin(), tmp.end()); +#else + const char *p = in; + while ( *p != '\0' ) { - case debug_assert_thread_waitready: - // We will *always* be in a non-main thread when this is called. - if ( _PyThreadState_Current != NULL ) - { - PyThreadState *tcur = PyGILState_GetThisThreadState(); - if ( tcur == _PyThreadState_Current ) - { - // This thread is the '_PyThreadState_Current'; i.e., it holds the lock. - // We're likely to end up in a deadlock. - BPT; - } - } - break; - default: + wchar32_t cp = get_utf8_char(&p); + if ( cp == 0 || cp == BADCP ) break; + out->push_back(cp); } - return 0; -} + out->push_back(0); // we're not dealing with a qstring; have to do it ourselves #endif + return out->begin(); +} +#endif // PY3 + //------------------------------------------------------------------------- // - remove current directory (empty entry) from the sys.path // - add idadir("python") static void prepare_sys_path() { - char buf[QMAXPATH]; - qstrncpy(buf, Py_GetPath(), sizeof(buf)); - char *ctx; - qstring newpath; - for ( char *d0 = qstrtok(buf, DELIMITER, &ctx); - d0 != NULL; - d0 = qstrtok(NULL, DELIMITER, &ctx) ) - { - if ( d0[0] == '\0' ) - // skip empty entry - continue; + borref_t path(PySys_GetObject("path")); + if ( path == nullptr || !PySequence_Check(path.o) ) + return; - if ( !newpath.empty() ) - newpath.append(DELIMITER); - newpath.append(d0); - } - if ( !newpath.empty() ) - newpath.append(DELIMITER); - newpath.append(idadir("python")); - PySys_SetPath(newpath.begin()); -} - - -//------------------------------------------------------------------------- -// we have to do it ourselves because Python 2.7 calls exit() if importing site fails -static bool initsite(void) -{ - PyObject *m; - m = PyImport_ImportModule("site"); - if ( m == NULL ) + qstring new_path; + Py_ssize_t path_len = PySequence_Size(path.o); + if ( path_len > 0 ) { - PyErr_Print(); - Py_Finalize(); - return false; + for ( Py_ssize_t i = 0; i < path_len; ++i ) + { + qstring path_el_utf8; + newref_t path_el(PySequence_GetItem(path.o, i)); + if ( path_el != nullptr + && IDAPyStr_Check(path_el.o) > 0 + && IDAPyStr_AsUTF8(&path_el_utf8, path_el.o) ) + { + if ( path_el_utf8.empty() ) + continue; // skip empty entry + if ( !new_path.empty() ) + new_path.append(DELIMITER); + new_path.append(path_el_utf8); + } + } } - else - { - Py_DECREF(m); - } - return true; + if ( !new_path.empty() ) + new_path.append(DELIMITER); + new_path.append(idadir("python")); +#ifdef PY3 + qvector wpath; + PySys_SetPath(utf8_wchar_t(&wpath, new_path.c_str())); +#else + PySys_SetPath(new_path.begin()); +#endif } //------------------------------------------------------------------------- @@ -1867,48 +1935,48 @@ bool IDAPython_Init(void) return true; // Form the absolute path to IDA\python folder - qstrncpy(g_idapython_dir, idadir(PYTHON_DIR_NAME), sizeof(g_idapython_dir)); + qmakepath(g_idapython_dir, sizeof(g_idapython_dir), + idadir(PYTHON_DIR_NAME), + QSTRINGIZE(PY_MAJOR_VERSION), + NULL); // Check for the presence of essential files if ( !check_python_dir() ) return false; char path[QMAXPATH]; -#ifdef __LINUX__ - // Export symbols from libpython to resolve imported module deps - // use the standard soname: libpython2.7.so.1.0 -#define PYLIB "libpython" QSTRINGIZE(PY_MAJOR_VERSION) "." QSTRINGIZE(PY_MINOR_VERSION) ".so.1.0" - if ( !dlopen(PYLIB, RTLD_NOLOAD | RTLD_GLOBAL | RTLD_LAZY) ) + qstring errbuf; + if ( !extapi.load(&errbuf) ) { - warning("IDAPython dlopen(" PYLIB ") error: %s", dlerror()); + warning("Couldn't initialize IDAPython: %s", errbuf.c_str()); return false; } -#endif #ifdef __MAC__ - // We should set python home to the module's path, otherwise it can pick up stray modules from $PATH - NSModule pythonModule = NSModuleForSymbol(NSLookupAndBindSymbol("_Py_InitializeEx")); - // Use dylib functions to find out where the framework was loaded from - const char *buf = (char *)NSLibraryNameForModule(pythonModule); - if ( buf != NULL ) + if ( !extapi.lib_path.empty() ) { // The path will be something like: // /System/Library/Frameworks/Python.framework/Versions/2.5/Python // We need to strip the last part // use static buffer because Py_SetPythonHome() just stores a pointer static char pyhomepath[MAXSTR]; - qstrncpy(pyhomepath, buf, MAXSTR); - char * lastslash = strrchr(pyhomepath, '/'); + qstrncpy(pyhomepath, extapi.lib_path.c_str(), sizeof(pyhomepath)); + char *lastslash = strrchr(pyhomepath, '/'); if ( lastslash != NULL ) { *lastslash = 0; +#ifdef PY3 + qvector buf; + Py_SetPythonHome(utf8_wchar_t(&buf, pyhomepath)); +#else Py_SetPythonHome(pyhomepath); +#endif } } #endif // Read configuration value - read_config_file("python.cfg", opts, qnumber(opts)); + read_config_file("idapython.cfg", opts, qnumber(opts)); if ( g_alert_auto_scripts ) { if ( pywraps_check_autoscripts(path, sizeof(path)) @@ -1925,25 +1993,6 @@ bool IDAPython_Init(void) } parse_plugin_options(); - if ( g_use_local_python ) - { - // Set the program name: - // "This is used by Py_GetPath() and some other functions below to find the - // Python run-time libraries relative to the interpreter executable". - // - // - // Note: - // "The argument should point to a zero-terminated character string - // in static storage whose contents will not change for the duration - // of the program's execution" - static qstring pname = idadir(""); - Py_SetProgramName(pname.begin()); - Py_SetPythonHome(g_idapython_dir); - } - - // don't import "site" right now - Py_NoSiteFlag = 1; - // Start the interpreter Py_InitializeEx(0 /* Don't catch SIGPIPE, SIGXFZ, SIGXFSZ & SIGINT signals */); @@ -1956,13 +2005,6 @@ bool IDAPython_Init(void) // remove current directory prepare_sys_path(); - // import "site" - if ( !g_use_local_python && !initsite() ) - { - warning("IDAPython: importing \"site\" failed"); - return false; - } - // Enable multi-threading support if ( !PyEval_ThreadsInitialized() ) PyEval_InitThreads(); @@ -1992,7 +2034,7 @@ bool IDAPython_Init(void) #endif ); - if ( PyRun_SimpleString(init_code.c_str()) != 0 ) + if ( extapi.PyRun_SimpleString_ptr(init_code.c_str()) != 0 ) { warning("IDAPython: error executing bootstrap code"); return false; @@ -2008,14 +2050,12 @@ bool IDAPython_Init(void) qmakepath(path, MAXSTR, g_idapython_dir, S_INIT_PY, NULL); if ( !PyRunFile(path) ) { - qstring errbuf; - // Try to fetch a one line error string. We must do it before printing // the traceback information. Make sure that the exception is not cleared handle_python_error(&errbuf, false); // Print the exception traceback - PyRun_SimpleString("import traceback;traceback.print_exc();"); + extapi.PyRun_SimpleString_ptr("import traceback;traceback.print_exc();"); warning("IDAPython: error executing " S_INIT_PY ":\n" "%s\n" @@ -2034,7 +2074,7 @@ bool IDAPython_Init(void) } #ifdef ENABLE_PYTHON_PROFILING - PyEval_SetTrace(tracefunc, NULL); + extapi.PyEval_SetTrace_ptr(tracefunc, NULL); #endif // Register a exec_python() function for IDC @@ -2045,9 +2085,6 @@ bool IDAPython_Init(void) if ( g_run_when == RUN_ON_INIT ) RunScript(g_run_script); -#ifdef _DEBUG - hook_to_notification_point(HT_UI, ui_debug_handler_cb); -#endif hook_to_notification_point(HT_UI, on_ui_notification); hook_to_notification_point(HT_IDB, on_idb_notification); @@ -2106,9 +2143,6 @@ void IDAPython_Term(void) unhook_from_notification_point(HT_IDB, on_idb_notification); unhook_from_notification_point(HT_UI, on_ui_notification); -#ifdef _DEBUG - unhook_from_notification_point(HT_UI, ui_debug_handler_cb); -#endif // Remove the CLI enable_python_cli(false); diff --git a/idapython.script b/idapython.script index 7a292e9..7248af6 100644 --- a/idapython.script +++ b/idapython.script @@ -1,7 +1,6 @@ { global: PLUGIN; - PyWStringOrNone_Check; PyW_CreateIdcException; PyW_GetError; PyW_GetNumber; @@ -26,7 +25,10 @@ global: enable_python_cli; idapython_hook_to_notification_point; idapython_unhook_from_notification_point; + idapython_show_wait_box; + idapython_hide_wait_box; idcvar_to_pyvar; + is_api695_compat_enabled; lookup_info_t_commit; lookup_info_t_del_by_py_view; lookup_info_t_find_by_py_view; @@ -38,16 +40,11 @@ global: py_customidamemo_t_collect_class_callbacks_ids; py_customidamemo_t_collect_pyobject_callbacks; py_customidamemo_t_create_groups; - py_customidamemo_t_del_nodes_infos; py_customidamemo_t_delete_groups; - py_customidamemo_t_get_current_renderer_type; - py_customidamemo_t_get_node_info; - py_customidamemo_t_set_current_renderer_type; py_customidamemo_t_set_groups_visibility; - py_customidamemo_t_set_node_info; - py_customidamemo_t_set_nodes_infos; py_customidamemo_t_unbind; pycim_lookup_info; + pylong_to_byte_array; pyobj_get_clink; python_timer_del; python_timer_new; diff --git a/idapython_implib.def b/idapython_implib.def index f37f78f..f01c474 100644 --- a/idapython_implib.def +++ b/idapython_implib.def @@ -1,5 +1,4 @@ EXPORTS - PyWStringOrNone_Check PyW_CreateIdcException PyW_GetError PyW_GetNumber @@ -22,6 +21,7 @@ EXPORTS disable_script_timeout enable_extlang_python enable_python_cli + is_api695_compat_enabled idcvar_to_pyvar lookup_info_t_commit lookup_info_t_del_by_py_view @@ -33,15 +33,10 @@ EXPORTS py_customidamemo_t_collect_class_callbacks_ids py_customidamemo_t_collect_pyobject_callbacks py_customidamemo_t_create_groups - py_customidamemo_t_del_nodes_infos py_customidamemo_t_delete_groups - py_customidamemo_t_get_current_renderer_type - py_customidamemo_t_get_node_info - py_customidamemo_t_set_current_renderer_type py_customidamemo_t_set_groups_visibility - py_customidamemo_t_set_node_info - py_customidamemo_t_set_nodes_infos py_customidamemo_t_unbind + pylong_to_byte_array pyobj_get_clink python_timer_new python_timer_del @@ -66,6 +61,8 @@ EXPORTS get_callable_arg_count idapython_hook_to_notification_point idapython_unhook_from_notification_point + idapython_show_wait_box + idapython_hide_wait_box register_module_lifecycle_callbacks prepare_programmatic_plugin_load pycim_lookup_info DATA diff --git a/makefile b/makefile index e0364e5..ed2f58f 100644 --- a/makefile +++ b/makefile @@ -18,7 +18,24 @@ include ../../allmake.mak #---------------------------------------------------------------------- # default goals .PHONY: configs modules pyfiles deployed_modules idapython_modules api_contents pydoc_injections public_tree test_idc docs -all: configs modules pyfiles deployed_modules idapython_modules api_contents pydoc_injections # public_tree test_idc docs +all: configs modules pyfiles deployed_modules idapython_modules api_contents pydoc_injections bins # public_tree test_idc docs + +ifeq ($(OUT_OF_TREE_BUILD),) + BINS += $(IDAPYSWITCH) +else + # when out-of-tree (i.e., from github), we only build idapyswitch64, + # and rely on it even for the __EA32__ build + ifdef __EA64__ + BINS += $(IDAPYSWITCH) + else + IDAPYSWITCH_64_HACK := 64 + endif +endif + +IDAPYSWITCH:=$(R)idapyswitch$(IDAPYSWITCH_64_HACK)$(B) + +BINS += $(IDAPYSWITCH) +bins: $(BINS) #---------------------------------------------------------------------- # configurable variables for this makefile @@ -49,9 +66,9 @@ ifneq ($(OUT_OF_TREE_BUILD),) LIBDIR = $(IDA)lib/$(TARGET_PROCESSOR_NAME)_$(SYSNAME)_$(COMPILER_NAME)_$(ADRSIZE)$(STATSUF) endif -# HACK for mkdep to add dependencies for $(F)python$(O) +# HACK for mkdep to add dependencies for $(F)idapython$(O) ifdef __MKDEP__ - OBJS += $(F)python$(O) + OBJS += $(F)idapython$(O) endif # allmake.mak defines 'CP' as 'qcp.sh' which is an internal tool providing @@ -64,13 +81,37 @@ endif #---------------------------------------------------------------------- # the 'configs' target is in $(IDA)module.mak -CONFIGS += python.cfg +CONFIGS += idapython.cfg #---------------------------------------------------------------------- # the 'modules' target is in $(IDA)module.mak -MODULE = $(call module_dll,python) +MODULE = $(call module_dll,idapython) MODULES += $(MODULE) +#---------------------------------------------------------------------- +ifdef __MAC__ + # it is important that we guarantee some available space in the header, + # we might want to patch the libpython load commands later. + LDFLAGS += -Wl,-headerpad,0x400 +else + ifdef __LINUX__ + # We want the 'DT_NEEDED' of idapython.so to be sufficiently large + # to hold any libpython3.Y.so. Therefore, at + # build-time, let's use our tool (which will in turn use patchelf) + # to expand the DT_NEEDED 'slot' size. + ifeq ($(PYTHON_VERSION_MAJOR),3) + IDAPYSWITCH_MODULE_DEP := $(IDAPYSWITCH) + ifndef __CODE_CHECKER__ + # this is for idapython[64].so + POSTACTION=$(IDAPYSWITCH) --split-debug-and-expand-libpython3-dtneeded-room $(MODULE) + # and this for _ida_*.so + POSTACTION_IDA_X_SO=$(IDAPYSWITCH) --split-debug-and-expand-libpython3-dtneeded-room + endif + endif + endif +endif + + #---------------------------------------------------------------------- # we explicitly added our module targets NO_DEFAULT_MODULE = 1 @@ -78,15 +119,17 @@ DONT_ERASE_LIB = 1 # NOTE: all MODULES must be defined before including plugin.mak. include ../plugin.mak -include ../pyplg.mak # NOTE: target-specific rules and dependencies that use variable # expansion to name the target (such as "$(MODULE): [...]") must # come after including plugin.mak +# setup PYTHON_{C,LD}FLAGS (from allmake.mak) +$(eval $(call setup_python_flags)) + #---------------------------------------------------------------------- -PYTHON_OBJS += $(F)python$(O) +PYTHON_OBJS += $(F)idapython$(O) $(MODULE): MODULE_OBJS += $(PYTHON_OBJS) -$(MODULE): $(PYTHON_OBJS) +$(MODULE): $(PYTHON_OBJS) $(IDAPYSWITCH_MODULE_DEP) ifdef __NT__ $(MODULE): LDFLAGS += /DEF:$(IDAPYTHON_IMPLIB_DEF) /IMPLIB:$(IDAPYTHON_IMPLIB_PATH) endif @@ -98,6 +141,8 @@ ifdef __LINUX__ LDFLAGS += -Wl,-soname,$(notdir $(MODULE)) endif +PATCH_CONST=$(Q)$(PYTHON) tools/patch_constants.py -i $(1) -o $(2) + #---------------------------------------------------------------------- # TODO move this below, but it might be necessary before the defines-* ifdef DO_IDAMAKE_SIMPLIFY @@ -132,7 +177,7 @@ ifeq ($(OUT_OF_TREE_BUILD),) endif # output directory for python scripts -DEPLOY_PYDIR=$(R)python +DEPLOY_PYDIR=$(R)python/$(PYTHON_VERSION_MAJOR) DEPLOY_INIT_PY=$(DEPLOY_PYDIR)/init.py DEPLOY_IDC_PY=$(DEPLOY_PYDIR)/idc.py DEPLOY_IDAUTILS_PY=$(DEPLOY_PYDIR)/idautils.py @@ -144,19 +189,30 @@ ifdef TESTABLE_BUILD endif ifeq ($(OUT_OF_TREE_BUILD),) TEST_IDC=test_idc - IDC_BC695_IDC_SOURCE?=$(DEPLOY_PYDIR)/../idc/idc.idc + IDC_BC695_IDC_SOURCE?=$(DEPLOY_PYDIR)/../../idc/idc.idc endif # -SDK_SOURCES=$(wildcard $(IDA_INCLUDE)/*.h) $(wildcard $(IDA_INCLUDE)/*.hpp) ifeq ($(OUT_OF_TREE_BUILD),) + include ../../etc/sdk/sdk_files.mak + SDK_SOURCES=$(sort $(foreach v,$(SDK_FILES),$(if $(findstring include/,$(v)),$(addprefix $(IDA_INCLUDE)/,$(notdir $(v)))))) + SDK_SOURCES+=$(IDA_INCLUDE)/hexrays.hpp + SDK_SOURCES+=$(IDA_INCLUDE)/lumina.hpp ST_SDK_TARGETS = $(SDK_SOURCES:$(IDA_INCLUDE)/%=$(ST_SDK)/%) else + SDK_SOURCES=$(wildcard $(IDA_INCLUDE)/*.h) $(wildcard $(IDA_INCLUDE)/*.hpp) ST_SDK_TARGETS = $(SDK_SOURCES) endif -PYTHON_DYNLOAD=$(BIN_PATH)../python/lib/python2.7/lib-dynload -DEPLOY_LIBDIR=$(PYTHON_DYNLOAD)/ida_$(ADRSIZE) +# Python 2-3 +ifeq ($(PYTHON_VERSION_MAJOR),3) + _SWIGPY3FLAG := -py3 -py3-stable-abi -DPY3=1 + CC_DEFS += PY3=1 + CC_DEFS += Py_LIMITED_API=0x03040000 # we should make sure we use the same version as SWiG +endif +DYNLOAD_SUBDIR := python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) + +DEPLOY_LIBDIR=$(DEPLOY_PYDIR)/ida_$(ADRSIZE) ifdef __NT__ MODULE_SFX = .pyd @@ -233,14 +289,14 @@ deployed_modules: $(DEPLOYED_MODULES) ifdef __NT__ IDAPYTHON_IMPLIB_DEF=idapython_implib.def - IDAPYTHON_IMPLIB_PATH=$(F)python.lib + IDAPYTHON_IMPLIB_PATH=$(F)idapython.lib LINKIDAPYTHON = $(IDAPYTHON_IMPLIB_PATH) else LINKIDAPYTHON = $(MODULE) endif ifdef __NT__ # os and compiler specific flags - _SWIGFLAGS = -D__NT__ -DWIN32 -D_USRDLL -I$(PYTHON_DIR)/include + _SWIGFLAGS = -D__NT__ -DWIN32 -D_USRDLL -I"$(PYTHON_ROOT)/include" CFLAGS += /bigobj $(_SWIGFLAGS) -I$(ST_SDK) /U_DEBUG # override runtime libs in CFLAGS RUNTIME_LIBSW = /MD @@ -262,8 +318,6 @@ endif DEF_TYPE_TABLE = SWIG_TYPE_TABLE=idaapi SWIGFLAGS=$(_SWIGFLAGS) -Itools/typemaps-supplement $(SWIG_INCLUDES) $(addprefix -D,$(DEF_TYPE_TABLE)) $(BC695_SWIGFLAGS) -LDFLAGS += $(PYTHON_LDFLAGS) $(PYTHON_LDFLAGS_RPATH_MAIN) - pyfiles: $(DEPLOY_IDAUTILS_PY) \ $(DEPLOY_IDC_PY) \ $(DEPLOY_IDC_BC695_PY) \ @@ -318,7 +372,6 @@ endif # Create directories in the first phase of makefile parsing. DIRLIST += $(DEPLOY_LIBDIR) DIRLIST += $(DEPLOY_PYDIR) -DIRLIST += $(DEPLOY_PYDIR)/lib DIRLIST += $(ST_PARSED_HEADERS) DIRLIST += $(ST_PYW) DIRLIST += $(ST_SDK) @@ -431,17 +484,20 @@ $(ST_PYW)/py_hexrays_hooks.hpp: pywraps/py_hexrays_hooks.hpp \ #---------------------------------------------------------------------- CFLAGS += $(PYTHON_CFLAGS) +CC_DEFS += PYTHON_ABIFLAGS=$(PYTHON_ABIFLAGS) CC_DEFS += $(BC695_CC_DEF) CC_DEFS += $(DEF_TYPE_TABLE) CC_DEFS += $(WITH_HEXRAYS_DEF) CC_DEFS += USE_STANDARD_FILE_FUNCTIONS CC_DEFS += VER_MAJOR="7" -CC_DEFS += VER_MINOR="3" +CC_DEFS += VER_MINOR="4" CC_DEFS += VER_PATCH="0" CC_DEFS += __EXPR_SRC CC_INCP += $(F) CC_INCP += $(IDA_INCLUDE) CC_INCP += $(ST_SWIG) +CC_INCP += ../../ldr/mach-o/h +CC_INCP += $(IRRXML) CC_INCP += . ifdef __UNIX__ @@ -527,15 +583,16 @@ define make-module-rules # files. # ../../bin/x86_linux_gcc/python/ida_$(1).py (note: dep. on .cpp. See note above.) - $(DEPLOY_PYDIR)/ida_$(1).py: $(ST_WRAP)/$(1).cpp $(PARSED_HEADERS_MARKER) $(call find-pydoc-patches-deps,$(1)) $(call find-patch-codegen-deps,$(1)) | tools/inject_pydoc.py + $(DEPLOY_PYDIR)/ida_$(1).py: $(ST_WRAP)/$(1).cpp $(PARSED_HEADERS_MARKER) $(call find-pydoc-patches-deps,$(1)) $(call find-patch-codegen-deps,$(1)) | tools/inject_pydoc.py tools/wrapper_utils.py $(QINJECT_PYDOC)$(PYTHON) tools/inject_pydoc.py \ - -x $(ST_PARSED_HEADERS) \ - -m $(1) \ - -i $(ST_WRAP)/ida_$(1).py \ - -w $(ST_SWIG)/$(1).i \ - -o $$@ \ - -e $(ST_WRAP)/ida_$(1).epydoc_injection \ - -v > $(ST_WRAP)/ida_$(1).pydoc_injection 2>&1 + --xml-doc-directory $(ST_PARSED_HEADERS) \ + --module $(1) \ + --input $(ST_WRAP)/ida_$(1).py \ + --interface $(ST_SWIG)/$(1).i \ + --cpp-wrapper $(ST_WRAP)/$(1).cpp \ + --output $$@ \ + --epydoc-injections $(ST_WRAP)/ida_$(1).epydoc_injection \ + --verbose > $(ST_WRAP)/ida_$(1).pydoc_injection 2>&1 # 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) @@ -549,14 +606,18 @@ define make-module-rules --interface-dependencies=$(subst $(space),$(comma),$(SWIG_IFACE_$(1))) \ --xml-doc-directory $(ST_PARSED_HEADERS) - # obj/x86_linux_gcc/wrappers/X.cpp - $(ST_WRAP)/$(1).cpp: $(ST_SWIG)/$(1).i tools/patch_codegen.py tools/patch_python_codegen.py $(PATCH_DIRECTORS_SCRIPT) $(PARSED_HEADERS_MARKER) tools/chkapi.py - $(QSWIG)$(SWIG) -modern $(addprefix -D,$(WITH_HEXRAYS_DEF)) -python -threads -c++ -shadow \ - -D__GNUC__ $(SWIGFLAGS) $(addprefix -D,$(DEF64)) -I$(ST_SWIG) \ + # creating obj/x86_linux_gcc/wrappers/X.cpp and friends + # 1. SWIG generates x.cpp.in1, x.h and x.py from swig/x.i + # 2. patch_const.py generates x.cpp.in2 from x.cpp.in1 + # 3. patch_codegen.py generates x.cpp from x.cpp.in2 + # 4. patch_h_codegen.py patches x.h in place + # 5. patch_python_codegen.py patches ida_x.py in place using helpers in tools/patch_codegen + # 6. on windows, patch_directors_cc.py patches x.h in place again + $(ST_WRAP)/$(1).cpp: $(ST_SWIG)/$(1).i tools/patch_codegen.py tools/patch_python_codegen.py $(PATCH_DIRECTORS_SCRIPT) $(PARSED_HEADERS_MARKER) tools/chkapi.py tools/wrapper_utils.py + $(QSWIG)$(SWIG) $(addprefix -D,$(WITH_HEXRAYS_DEF)) -python $(_SWIGPY3FLAG) -threads -c++ -shadow \ + -D__GNUC__ -DSWIG_PYTHON_LEGACY_BOOL=1 $(SWIGFLAGS) $(addprefix -D,$(DEF64)) -I$(ST_SWIG) \ -outdir $(ST_WRAP) -o $$@.in1 -oh $(ST_WRAP)/$(1).h -I$(ST_SDK) -DIDAPYTHON_MODULE_$(1)=1 $$< - $(Q)$(PYTHON) tools/patch_constants.py \ - --input $(ST_WRAP)/$(1).cpp.in1 \ - --output $(ST_WRAP)/$(1).cpp.in2 + $(call PATCH_CONST,$(ST_WRAP)/$(1).cpp.in1,$(ST_WRAP)/$(1).cpp.in2) $(QPATCH_CODEGEN)$(PYTHON) tools/patch_codegen.py \ --apply-valist-patches \ --input $(ST_WRAP)/$(1).cpp.in2 \ @@ -618,22 +679,29 @@ endif # is at the end of the link command. # See Python's dynload_win.c:GetPythonImport() for more details. $(_IDA_X_SO): STDLIBS += $(LINKIDAPYTHON) -$(_IDA_X_SO): LDFLAGS += $(PYTHON_LDFLAGS_RPATH_MODULE) $(OUTMAP)$(F)$(@F).map -$(F)_ida_%$(MODULE_SFX): $(F)%$(O) $(MODULE) $(IDAPYTHON_IMPLIB_DEF) +$(_IDA_X_SO): LDFLAGS += $(PYTHON_LDFLAGS) $(PYTHON_LDFLAGS_RPATH_MODULE) $(OUTMAP)$(F)$(@F).map +$(F)_ida_%$(MODULE_SFX): $(F)%$(O) $(MODULE) $(IDAPYTHON_IMPLIB_DEF) $(IDAPYSWITCH_MODULE_DEP) $(call link_dll, $<, $(LINKIDA)) ifdef __NT__ $(Q)$(RM) $(@:$(MODULE_SFX)=.exp) $(@:$(MODULE_SFX)=.lib) endif -# ../../bin/x86_linux_gcc/python/lib/lib-dynload/ida_32/_ida_X.so +# ../../bin/x64_linux_gcc/python/2/ida_32/_ida_X.so $(DEPLOY_LIBDIR)/_ida_%$(MODULE_SFX): $(F)_ida_%$(MODULE_SFX) $(Q)$(CP) $< $@ +ifdef __LINUX__ + ifndef __CODE_CHECKER__ + ifeq ($(PYTHON_VERSION_MAJOR),3) + $(Q)$(POSTACTION_IDA_X_SO) $@ + endif + endif +endif #---------------------------------------------------------------------- ifdef TESTABLE_BUILD -API_CONTENTS = api_contents.txt +API_CONTENTS = api_contents$(PYTHON_VERSION_MAJOR).txt else -API_CONTENTS = release_api_contents.txt +API_CONTENTS = release_api_contents$(PYTHON_VERSION_MAJOR).txt endif ST_API_CONTENTS = $(F)$(API_CONTENTS) .PRECIOUS: $(ST_API_CONTENTS) @@ -653,20 +721,22 @@ endif #---------------------------------------------------------------------- # Check that doc injection is stable ifdef TESTABLE_BUILD -PYDOC_INJECTIONS = pydoc_injections.txt +PYDOC_INJECTIONS = pydoc_injections$(PYTHON_VERSION_MAJOR).txt else -PYDOC_INJECTIONS = release_pydoc_injections.txt +PYDOC_INJECTIONS = release_pydoc_injections$(PYTHON_VERSION_MAJOR).txt endif ST_PYDOC_INJECTIONS = $(F)$(PYDOC_INJECTIONS) .PRECIOUS: $(ST_PYDOC_INJECTIONS) +PYDOC_INJECTIONS_IDA_CMD=$(IDA_CMD) $(BATCH_SWITCH) -OIDAPython:AUTOIMPORT_COMPAT_IDA695=NO -S"$< $@ $(ST_WRAP)" -t -L$(F)dumpdoc.log >/dev/null pydoc_injections: $(ST_PYDOC_INJECTIONS) $(ST_PYDOC_INJECTIONS): tools/dumpdoc.py $(IDAPYTHON_MODULES) $(PYTHON_BINARY_MODULES) ifdef __CODE_CHECKER__ $(Q)touch $@ else ifeq ($(OUT_OF_TREE_BUILD),) - $(QPYDOC_INJECTIONS)$(IDA_CMD) $(BATCH_SWITCH) -OIDAPython:AUTOIMPORT_COMPAT_IDA695=NO -S"$< $@ $(ST_WRAP)" -t -L$(F)dumpdoc.log >/dev/null + $(QPYDOC_INJECTIONS)$(PYDOC_INJECTIONS_IDA_CMD) || \ + (echo "Command \"$(PYDOC_INJECTIONS_IDA_CMD)\" failed. Check \"$(F)dumpdoc.log\" for details." && false) $(Q)(diff -w $(PYDOC_INJECTIONS) $(ST_PYDOC_INJECTIONS)) > /dev/null || \ (echo "PYDOC INJECTION CHANGED! update $(PYDOC_INJECTIONS) or fix .. what needs fixing" && \ echo "(New API: $(ST_PYDOC_INJECTIONS)) ***" && \ @@ -726,6 +796,16 @@ ifeq ($(OUT_OF_TREE_BUILD),) (cd $(F) && zip -r ../../$(PUBTREE_DIR)/out_of_tree/parsed_notifications.zip parsed_notifications) endif +IDAPYSWITCH_OBJS += $(F)idapyswitch$(O) + +ifdef __NT__ + ifndef NDEBUG + RUNTIME_LIBSW = /MDd + $(F)idapyswitch$(O): CFLAGS := $(filter-out /U_DEBUG,$(CFLAGS)) + endif +endif +$(R)idapyswitch$(B): $(call dumb_target, pro, $(IDAPYSWITCH_OBJS)) + #---------------------------------------------------------------------- # the 'echo_modules' target must be called explicitly # Note: used by ida/build/pkgbin.py @@ -736,13 +816,91 @@ echo_modules: clean:: rm -rf obj/ +$(MODULE): LDFLAGS += $(PYTHON_LDFLAGS) $(PYTHON_LDFLAGS_RPATH_MAIN) + # MAKEDEP dependency list ------------------ -$(F)python$(O) : $(I)bitrange.hpp $(I)bytes.hpp $(I)config.hpp \ - $(I)diskio.hpp $(I)expr.hpp $(I)fpro.h $(I)funcs.hpp \ - $(I)gdl.hpp $(I)graph.hpp $(I)ida.hpp \ +$(F)idapyswitch$(O): $(I)auto.hpp $(I)bitrange.hpp $(I)bytes.hpp \ + $(I)config.hpp $(I)diskio.hpp $(I)entry.hpp $(I)err.h \ + $(I)fixup.hpp $(I)fpro.h $(I)funcs.hpp \ + $(I)ida.hpp $(I)idp.hpp $(I)kernwin.hpp $(I)lines.hpp \ + $(I)llong.hpp $(I)loader.hpp $(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 ../../ldr/elf/elfr_arm.h \ + ../../ldr/elf/elfr_ia64.h ../../ldr/elf/elfr_mips.h \ + ../../ldr/elf/elfr_ppc.h ../../ldr/elf/reader.cpp \ + ../../ldr/mach-o/../ar/ar.hpp \ + ../../ldr/mach-o/../idaldr.h ../../ldr/mach-o/base.cpp \ + ../../ldr/mach-o/common.cpp ../../ldr/mach-o/common.h \ + ../../ldr/mach-o/h/architecture/byte_order.h \ + ../../ldr/mach-o/h/arm/_types.h \ + ../../ldr/mach-o/h/i386/_types.h \ + ../../ldr/mach-o/h/i386/eflags.h \ + ../../ldr/mach-o/h/libkern/OSByteOrder.h \ + ../../ldr/mach-o/h/libkern/i386/OSByteOrder.h \ + ../../ldr/mach-o/h/libkern/i386/_OSByteOrder.h \ + ../../ldr/mach-o/h/libkern/machine/OSByteOrder.h \ + ../../ldr/mach-o/h/mach-o/arm/reloc.h \ + ../../ldr/mach-o/h/mach-o/arm64/reloc.h \ + ../../ldr/mach-o/h/mach-o/fat.h \ + ../../ldr/mach-o/h/mach-o/hppa/reloc.h \ + ../../ldr/mach-o/h/mach-o/i860/reloc.h \ + ../../ldr/mach-o/h/mach-o/loader.h \ + ../../ldr/mach-o/h/mach-o/m88k/reloc.h \ + ../../ldr/mach-o/h/mach-o/nlist.h \ + ../../ldr/mach-o/h/mach-o/ppc/reloc.h \ + ../../ldr/mach-o/h/mach-o/reloc.h \ + ../../ldr/mach-o/h/mach-o/sparc/reloc.h \ + ../../ldr/mach-o/h/mach-o/stab.h \ + ../../ldr/mach-o/h/mach-o/x86_64/reloc.h \ + ../../ldr/mach-o/h/mach/arm/_structs.h \ + ../../ldr/mach-o/h/mach/arm/boolean.h \ + ../../ldr/mach-o/h/mach/arm/thread_state.h \ + ../../ldr/mach-o/h/mach/arm/thread_status.h \ + ../../ldr/mach-o/h/mach/arm/vm_types.h \ + ../../ldr/mach-o/h/mach/boolean.h \ + ../../ldr/mach-o/h/mach/i386/_structs.h \ + ../../ldr/mach-o/h/mach/i386/boolean.h \ + ../../ldr/mach-o/h/mach/i386/fp_reg.h \ + ../../ldr/mach-o/h/mach/i386/kern_return.h \ + ../../ldr/mach-o/h/mach/i386/thread_state.h \ + ../../ldr/mach-o/h/mach/i386/thread_status.h \ + ../../ldr/mach-o/h/mach/i386/vm_param.h \ + ../../ldr/mach-o/h/mach/i386/vm_types.h \ + ../../ldr/mach-o/h/mach/kern_return.h \ + ../../ldr/mach-o/h/mach/kmod.h \ + ../../ldr/mach-o/h/mach/machine.h \ + ../../ldr/mach-o/h/mach/machine/boolean.h \ + ../../ldr/mach-o/h/mach/machine/kern_return.h \ + ../../ldr/mach-o/h/mach/machine/thread_status.h \ + ../../ldr/mach-o/h/mach/machine/vm_types.h \ + ../../ldr/mach-o/h/mach/message.h \ + ../../ldr/mach-o/h/mach/port.h \ + ../../ldr/mach-o/h/mach/ppc/_structs.h \ + ../../ldr/mach-o/h/mach/ppc/boolean.h \ + ../../ldr/mach-o/h/mach/ppc/kern_return.h \ + ../../ldr/mach-o/h/mach/ppc/thread_status.h \ + ../../ldr/mach-o/h/mach/ppc/vm_param.h \ + ../../ldr/mach-o/h/mach/ppc/vm_types.h \ + ../../ldr/mach-o/h/mach/vm_prot.h \ + ../../ldr/mach-o/h/mach/vm_types.h \ + ../../ldr/mach-o/h/ppc/_types.h \ + ../../ldr/mach-o/h/sys/_posix_availability.h \ + ../../ldr/mach-o/h/sys/_symbol_aliasing.h \ + ../../ldr/mach-o/h/sys/cdefs.h \ + ../../ldr/mach-o/macho_node.h idapyswitch.cpp \ + idapyswitch_linux.cpp idapyswitch_mac.cpp \ + idapyswitch_win.cpp +$(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 python.cpp pywraps.cpp \ - pywraps.hpp + $(I)ua.hpp $(I)xref.hpp extapi.cpp extapi.hpp idapy.hpp \ + idapython.cpp pywraps.cpp pywraps.hpp diff --git a/out_of_tree/parsed_notifications.zip b/out_of_tree/parsed_notifications.zip index a9ac86dd715f806580ee4597d2989fc5158d48c8..b527e67e017a7c73ede0fa945aaae7a4d7f823c3 100644 GIT binary patch delta 3515317 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

Ecp<;tbuYTvEzF+fU%`G z(=%)Rtr9HRr%1ntvU@?h)+e!ZvlkSD49_`8eJ`~b?KZp!7IBLvZ|={>6d@2J!KF%7 zISB?Ht&adBqE47_Kk)t25GoWeXL03*h#%7A=TPB%2PEjVh%fL1n3fhNrfSOm5mTt) z6|V{oGA8SSs0t30#N1&bN(%zrEu1>dap9Bp-0Q=945)J&kAQV~vk5dy{s$o;L-$cX zNQS+DFo55?F9E3(c<+zMRt^WRbYKYa7zT~8 zci>GFLq_g66-EPc6|C2p7!rIYTr1}y^2C^Q4I-Tw009w!^fl&q0Bc2-z7(QI_c;); zsWGu5%7+Gz9Y%hIlMt$jp^AMD)V7;yu>+(trn!9c91K?@^|5E;_VB@3vxh^9do$NQ(I4 z*trG+nO{@`kV#I+F^!K%)@MJ#hcdbG(jSZM(W&F-g&@h7DnWt1=~0w?Y^gkZMF=M< zT^=K9wBC+Wj6m8S$|~=B<-_CxuYm~A-xFh^$S$411ttB!pKk?4ZpCeGg%9t>)8qIq z&CJfG_$mBh`?q6OIS5aVNOBozPv*w%-(r5p3=Z>Ie!U}x^T<|b# z|K=wR4iY}3qli^FH-0nq3H>g6`7n~IL%9wN>|&r_t0+YsUXb{Qu#mE5eFpw{WsGbu z6c%a+5GV=k@$YXvmfwM^B;oR~PLU4>IVzPdKt&iDD0X>&zFga7QW6ZV>=03SZj105 zaRVPf2+4vyG7^G{pg~I$!*)yJwi%r@&}+;W0zq14DJ>w?JKQTp@ zYzZkWwzbZyqQ>{R8q*RhKu-|kGvx~pc#s+cQt`j5t|>fy8S!PYw{0+wfH@$A-RK{M zlg21R`8m175Y>s*S;fQ!&f{#Ec$ij=$J*kq64f(eQ{QDwR%l<1Gc9Z9RBi-|O0x)k z1v9x&>3v?V#GfLCC#J#lv&oaQgzCjIlDv$Rf9HjsGfrZ2G1}#ne|Z{X&tUnQI}xS< zFr5hZrI|)@tYffUEk+hEv({QJWDcEY<=^fqPcD&XRtWQ!nOFDXY`CKzS9PU7SBI8M zHm>TOBU?SZ-j_^5Mwp5WGsda)>xrqPTQK&RH;eGp@wNgLnU$`@yW18Li*dS2V zos9LL`IX1GrPg+5*<`vHGo6VidO~UpoBzTi<*ayLb1kiZF${t&X`8h>of5*BZP0&Jm3h*P(LG{-i-}2`Gisx$a z2CwGXE9{N(?CX-RG+DsDnfVV0nJhzp4Udr4?oGGXO)+_c129Gc58}%Fm7%}uCCY;x z#1ADyLbKOjvvrM3PF1R9Zi!mg(!jX8V`lF%cJI@Tt=c~iGM~SEc_dn1yFbmf>R;)l zG+ur6`HZj~{VOSMJpS}7XZ(E!h!@|m4_R@pai+0&L#>Am99m-gw3CO{y;{|ik< zTyiI-FQW;@;EvxLWrhC_Dce~ZtUr>U*-U!XYuvF@{A#QT9t9KM_{9(3F+9>l!ZekP ztw`gE0?Rs&exSbxQ&X)A1vTmBDilCpCBdW&d@rS8WYWO72^GoK#&e|rfUFMr@Z4?A zi?mXo*kl#f*nhJ&ʴ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≤Ik+N{>(Er^aoK&sTy{RQ54pA3w| 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

?F) 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%0Db&O9~K!k?4Q!F9X9(R-n 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%0AYq6TsonNG`va;A_1syX&1)W3~C>@i8 z6sWO`0PzmFD<*%+g@_+g#`1Ge*Y=e4w6DnBF=f#?9#`;dQ73%OJ(U!yshgRl%`9aFyUo%>W`xp2-bt4vSHWn{S@6nhAE`)?6qDRc zD6`>{`@PtGU;je0q>d#SLNJHov6mQy$^Ema-o^Xax3o2eF&L`d zo5)M!EF1k@jrt9rT|FN|Jo7kXqb9k1bsuK_YV&_rSqWLQZju?HZc;LgdTyAoUG%ZDWj~?t66Zz zj8JeVN-nKUEC}O_2F^mHLMiG1JQF!$a4MAXxLfSp3U13-TXV*0y$CplZV!C3zlre1 zab|yJ>S$9(S&37#bdVXLbda_p@TjR#E+x;RwnRBYS<(=lf(bd;!_(#%Ejwhp)Q-ia zmjZNIx7V-H=S}ocDg>5(=J?!!^){wOIc0@T&3Z>>gnCDYK?)J6#t;3)ercdT3>F(id zqDJoNeEw&;YSUFwag%LU?Xe?N?Fo#KWPl59l`u>T!h&=<#$YwqWI~nXkubd5J%)wH zhv3IzSentdwpdkqf#8j?8MV1F;TnGk9CU488Q~?r~=V9`u=Q`x>+xBPet-)XQYr6OEkT+eN z4@gW&PibP3OC2R6F$a$k=S-j`@k?>HX8~i~hQoGX7{_%^n|gv~wrI0OQ7M*fmNv3u zls2Lw8I}l7l7<|rR4rY3^eM)zgAoQSp^+)*`Ya z)FMjODoHG7KuIu6CXfliW-aanBvlj2`Tey1d39;^gLh)T9va)w=g73)K(HsfD}Aw6`i3`SZ0+MhAALEDLbK1t9LbmmqCLBn}umcYvU)B zd>siOxovfBGEh?cn5C(Gr1H{c5h?rQa5?O>fLBxtYFTr&XCtikQjtI$@R)RnxYwtg zD?$meKG#*8kd_@ma&mur5{)mz#Zsn`yzMtny4W9ZaHsyn`udp0xB}(YOqbxMVqV!Fg*G(b7z4os00~RuA|b z4@}_qxY~1e_iYQi`@6sEH}Af!pZBja`c>Kdp6f5i$DPYL3!dEWM|}*Aoo?apPMp0O z*A3z|sS81_Mu*-!outRG=h(DCYzhB+;mN zOhzU_gcK>jg#jP##E>E5z51AZhqvZByf`;#j0!IeNhUfG5x>DHPa}xPwbk;{+&rJ% z&8`8TKc-`966%M4Hn!TUNLfXqYCl8Czis zZjZLm((M-y+x7F1Q^LxBRq^=b9-vYd)GLF3+^?|J`@0=vopUa&xPvT*T6S-z+WnVt zYrKqaOiDOh^=)~lVcC5tXLC7|Pn&$o>N922M=HzvNP&bPI2ULxIN^2jjG>JHXgpZr z%#qr&3p5MLn^fBm(7)4(dDInR1lqN|h8jP`$;r5Yw!-&?Cg8F`us~d!;A*NDu z3wed&z0uv5-8X(BJ@2%5sI1slHyz2kyd#-u2}yVhBnloJXW(qgySBhW0yizOZ4H6y z9C%=`+jSv-H?4mDIFbIeKwVbItD6pLGeWW)CW)~ia?vs>Xt2p?Cll4l10*(~z?

SS2;YEkG0$7@Y_nS+tfOJ+vF3XP)nZjU%7mH{%QUob`rs* zu?-`FmjQNG8Xo9Yz0S39J|)E@Mcw&QPcwZ}e~p`e)YD&_*|5!qWmVCp>6kX<9n;=8 zFNLNGgc6n_1xijh6_R@qI2(dTBLR)&M49DiF0(|vOCn5vXr;~PeHE~BPMrLOp>l%5*N^VLp@6>7 zUmc_Psmw|YY1UBN8_ZfPSd_ijl3{X>PE!!O=Y2=yfAIq&fXg^=JxT2qCZLz*YH;10vnl!1BB7a$+H6!(tC+Xv4K||X-FB8ZiO*}!zz?Mh!%wJxb_`X1lp#T#1G}doeMF*=ITH37 zW+k-$N{HCu_X!`38$+)JlJ4QV)F!dBDiQy3^vklHy7vxu$ECm3OUjVS|!?F~}eo z5fF_Q5QtDzO2Kj(^=Wb5dQ+bAdeW!9>USo*PfB=mQrSyzT4-s+QoNl6f!L>9``V$CSvoJ zU%0u4`Rvd2*qrcDx4CDx@uq%Uf2NjK564WsZR#y4bVaUh9s`U}2}^4ybJ;7-lFV*6 zORdnHdPNll=O$DM3;x+}UDz*N#8&HEi9=X7o0=7aRR+7FP<0o> zYz<^MqxM>hw~|C38J({GLs9@AgPliBPc>KCyg+j$Wxs(Hyg>XkwfQz`bfATeF zak`bfZu+5xZ7s~n_XV|U`tk=TyTx7bfr83eVTsgOF{_jiib`d$wj|)}d#E97FP6c5M~FXvkOyl_*dtI*x-x)G z)2BW_JF-h?SabQJ}T$sx3i{Wdw>dj z9$U;w#9-t3D0z&^qEtM|BQG#Z=IdBcIUN_Xvnh;Tuj-V4c2-`QFu44qAF;IA$UR9f zedLHCr7@-?aD=%uAqZh&^bz}0NiX*j_kq2AH#~T!?}{IJ8R@*~F&?1y8X?N!piID8 zq#5Wjb&67sxE4sU5uHu{WELR9qcZpH$ zUiN_rZA{32%SGo+|MdVR(QpjP1(6EA24WGIxYjevQX>AdMhAD}LsC6q|*xgeZrz(46Q z4v5+yi4?()s4kuHe(K=P-beP=tCxB!RjdI0)@6Es*wpCdWBmJOG9BOtF$UfJ6sv5G zu(HtZv4JTr{J(krzR+Gwu1wLuU8+xtY8Ge)1PwqEshH)%8d@&KteNadxI zi>5<#gO+v1sI}ybS&UQg?w=UgEWA`lp8|#D;Ki-iBb5hV2KHmPIO@4W0%q>4^MG zJ}mCBq{;%8&<(H?ya-ZK_JQb6dA4NYk)yqK@k^6pUo^5j-Nbmdcg+y0*n25vMW4t;s|TXco( z%OQGTS_{)~UM99|`j7`G9jCY=fe`J$Xz?*JFu34fW2xp;>hLa6v`f+3V< z%6k^87JJB0(Wm|nj*BnT&D-4Plo<>i4a%=6SVFfYbVF^SQW)LHkB?ok6?LiS+h`F6w{AmM)^_=bou8#|1Qb zDbu8QX`2`8wS!R>gEjx9yc*ES;Vx z{XkDPd`U-Ss}C`K=n7di8|?40&SL^x@S1e+rPI3&+(zu*#<&nBDSp~i?cL3MykZ7Elx;)LmlsK+`;?2R_a2}Po0BT5T9-%R0!d|#XG zw#;ltEnMS^`Vc3=#-+%AS!u=?HQdk`=XXOBE2BahB`b+bEtK`#vXu8(8z0GtQZA+l zQDTu`F@1sm_1%B%w_nx0{X+1KcJeTVGHklK_%&EO!qnFzLRPjg#-xb|`CY$~1jHC+ zQ4t+AQZo4H02Ugu?E6eTP77Gu#=l>DyC zz`er`V-HFJLt&kQg^4T2Xdp&fKc1y?8NL+LXYp3wHJOj}Hv-bs?*JL!4A)+ZJVHrjbFkapAr z8KPsJ#gXOqd@&B%FWr03!T8=PpDymF@F!czrS&_RA3Fbkt~#HUPm4*@kxBDAGGRIA z7$d}yP?%9pkck+{z$|yvsu2-Mk~Vs~p6-*Xb!dCqbv>0A-&8o}O>_O!zHBp7Mz}`^ zRf&ITqG>>9>{9Oe99!+N`!7Ixl;^Lj2x z=MWB@mUQ2LTqyM6KzV><4U$=Tx|lYd-E;t+u0fWBXqd&sE2=n72bL6-oJbnthzK9E z@(8tuLFvh&J6v3r15SUnxpbxL`#GW8bSMY-TfuMT-KA&jUg#Wv9=&oO`dxYLH|#_LX7JNhsA?lEJR>u*YIxAi1 zRm9TttG-y5MO%l>`PBI(Z6f*PyWRJPwy$3%-l;&@y06lIvm1jhQr0el^T53(?&W1u zvu3=4<&ReoYLwHO8W{<9#!F&2BZfqQ40UWwxVH#q+1L57x1ooymX9U*5Dd+S0XG>P zkmY56le1aTOr;p$`&Ct_} znI}i*Ea?ImZS!Jnmb28t)9&wPy|nt$&dvWpp6hcTUCu6WByhIG`K2+ofB7?LbLgC2 zb(ZR@-=(nIRsAt8Sj$U^=gkNaA0R@c6;aB6Ba4Cw6bC|`mj)BbgOWVeKN$xMc4WY%89ja7 zu4lnd?bjmo3rlpLu{`_q$63qalrb-VyH_+FOLBmk0MtlsBdoQ-I?kk(QCqEq6~rN` zMr3xTm2gx12KqEz#kdK59Oa!$>zfCT+5pW#-$H8H;5yoTCFoBFe&lY(zi=b9uE+rNDLp zfDRz~z4~MFwAvPS8=KLcIto-(CR@%HDfmn$ zSs248LlG7m>Z9V3A;wvB;Y7cG)^FO26I%AgyM$`)j$3t?K}!RdEj0EnPK^5!?4DUS zic75FqCpt$Ts6`!k9DKHZscWss-_234Un6GcqVADh+7hgcmqfp&{!GB6@9~W-s zWsRz)gL;5^a)A=WsIZC~hLjQBIqp5709leTH6nYv#H~*iw)ENfR|S)xja}OEr&v^n zu3)S;6{5~I>5Bz?kv>-rvbyBlGS0t*%Q?>9NObE_t5VQP(#wgs-@H&Cc!gKa23mV! zXxV?~nW0tp_5=UfeeC{!Q{t7Qc~-h=tosO8&xS!yl$CSr0n=@m&dZ5y7W%^j6#C;> z5zjF)mRavGLD5I1g$4L_j&LmNb`|%S9DhgUH9M3j0#v-Rx&ba*197D z)VlLg8Xjrnj9V^$opF*gCKY#tDoV%XN>94JQ}ipCia$(F?mDi+n4@+-gmv;kw>S^D z$_-apDb}P}MUD(mMJ`%KmD0jl9+{_v8GtZk0k5=H#*8RuYw5YTl3ZQdC9jRUjyF{e z5Uc8P_Hm!w!olvekX~EwHpo`%4oK^+Tlw(ZoPwOJL~_!9tanESsCOqgHYP+zL$E<2 z#HGLvw1dt^*I?Uo4zNtNq%15cJCfHQK0=m19quHSx#*HSs9NT*@e{BuZ$CuuG}xFla2{4%v}qKXr*DH0#B% zH;YBO^bk^i??Xdsv~eR1Y2Wf06+TGz?$PK6!{?8Jove&{(yTB@2B za}>3TgmM|Qf?xc|&X#ZHFTS@wr}84Kw#9BsRNlQy!d!kZMX}zrPWwDnf9;C;u0x{A z7xUPiTlrYNeyG*$>VOv*WVckxI=w`LJnFArl$d>gkN)AujV{VrT{~>4$W%6qq@7J5M3dh&JUiD;Zh4ntu z{i!oc^Ib;#r}Ft1p|&MO9v^!p<;P7D{~iZw=J)5|??B%)ZVymwgJM?hIcZi{Bm-1f zYLfJU6s;4y}|&_poDN;lqUK+*qWyD6pzyQ250ot>fC1jMK6xK0Ag)ZAq# zY_|P}pV-M@T-^_ImrKardsL?buMwpe`*>*+pf)-Os>7o&i0m)n8u#QA?s?T=s&=d92TmBg-8sh?~tSofWEL=$jC|v2CLW~AZ9dXdHE<0J{oH>$S%L>!3p5QImJc0)Jxr zaSV=W*LW&h;3u=5rjTeK^DPA>`Xmg0JbGsTXh%!;h){|m&^pwx@;(0QEsYbH(sQ>xz zUnxQV#(DX)@WsG|;a?`d{_@>F;qT#bX0iBMJ#~{F``xd<{4@E!?u&0gb45;n(pUAk zz2;&e$z{#`>n4<%y8rIXlsPwDE=`rcmtWbinV7>Qn7pj~7ADMh|M~Y{zW;IZugeMi zQTE;B#eAJSn@?e~TEd8~mM}fG?s-zd$95em-?yLq*DwD8vjS$%Z(+R*3z$BO1$5!- z*9puXm;ud2>2%prya!jc#bTT#sgNx8*ai_+_Jy^XFMn%p znW{@+pL8^T($h~i#oJAp%}c+A(uF;nVeMw-%knAxn%Z65vpLdk?r1%K=+ofwqIYOA z4dL^A;mfw_>&x*}X0c>@gA69! zrdUNl#tKh1Z;Z0@^D!NN84x%iO=%388IFBalz0RCUlc6i(Z4mqPMB0bZ2);gQ!lEo zD*I--Tov=U3oP!IplgJ*u=$tT1AKC(9qf4>2C1oqJ-QUZx3X2=Af)kr>Oh7&q~ug_ z6(f%^rL>nAaTBTKN*HOiaU_$J{!S^cj5OUOWjl;=i>N{d3iD8Za*4Hqt%66YNF*@M3@ttBk7H@xaB^&UECza!7p-)te`%@ zbK(WfCioG{WNh9$@t5hR`+OkrT;EE$-jmLzV7GLi+ zDHmV=FHGTr#cFnc&t$!l)^dxiCz%>I4L>3QM0C{P$iPmu0a>J-PmUU)NbA(bEyC7| z@;y@0XbhoN!fNNNwtl) zM2pRSi=5kHHT``XwqY7xUWxhO}CJE9)l+a`17DPZ?wypJ-hgbQ2l6kr7wEoj+qF-I^`~7})1b8irg`fh# zUS+MB+e)B>DOm`+zFDaGdyH!EoLZ!gJZtWQb>$d;Gx!T!)wCVzO6K|G*~dS2NPLO5 z<~2ry7Er_i#MGW!(UNn({!?9B92NiJ*5_B&2>RUN=JUix7n$0?TM3eI)iATrmN4~b z_(EU#;q{Jnwn37$MX2bt5CPfPxl;H@|H#w@F<%pMi`dnQb*}rr6&GUDf{co{bVPSJwC!&kTKKsXas!g)z-OW(GB3S{V}1KvqV}J1h&T7{?9?<*U5Y_e-nQ@a44yS8pY-rWTS%gH?^kj&O=q&fiX#$LH63ld013 zYK3i(MVSFyAg2jcI(iMQ^c@6R?c-s8rhCsQINu1|Et@qb)2l<8z>$u|8b{mmz1~Zu z5ICbvaMREk>N89A3^1=n;8%@yoKSmuyLZ!D1|e0e1A-)`sEX}h0@@EMkP%yVtn#e< zaGo!B%o10%*=3l%h`88J`;n1_^rWx+N#AZE7Y_WNL5_VNH0)dnsLstBMF~*`% zVv#IH5dwP$miNil9@gz@;CubNe{IVrJ*9cjD&!P!z9y$Oj| zDX|aL6!DQkW#t0V+}9kzCG=K*NcY!IZ*NiPAgw%NhSo;d@)1We`)s9zm2B4*-Ctw9 zi9}~7amFaxQ%|YMDt$z+!$A1b4&LyAWKSLTZ}?{k6^;#nyj)i+&oO!gMC-w}kPFAN ztyX&zP+1Vg(fXp&U2}S2*H&01Qmt)EX4C=QU(daX1Q8!3H85#6j*=sP)F>1HcPR;c zaEFX`B>QTqHxYGZC$lyOYcs!2)DyM}M0S+4wvcWh+Ej179Y#S27y?%e&JA2<7m$ z)iPFDOnpbP?{_#qYlnh=*0GYOEo&;3n~Y}Co5eak?Y^U4@jIlu>%X@{YRzQu&!d+m z_$-e^okHw5e8nHg*aznR8u3juvlQ>i$(pn9f_?*Gn=__1GB&GiMYExfd=t;;>pB&V z@h3~IXKN61(EFp%C~Ze>^uKua)S7QXqLSO1i@$1&gHWp`Z`)3<1Qp>dnc7}Qbss42$NHGKkn@Yz% zS_!#Jfxc-(Qnj{}R))y2xNB3+>Oto1tcMnMunReVmM);sKKv|TPaxZ*hE-SOT}=9? zRja{Zv`4~zL|(mA=x2gz6I)zk%A1lM_Ur4*l-FxT1fMw)kOUuc(VRAtLGN`U!h=aWy! zzz-iUhvqzlS{jR?uk)hfw^>JSA=hC#v!qSz#_>GOA19xMaBP+^)h;6sNKZ-Dg#@QB zO2aY3Y1@=sb2P9VpWdX$a?iju*IrT%3C>x6O-Bwxs$VPYw00#v9M9!NuDf%3JfGhV zm29z%;L`{akRgPQ+&Os8pyM|r_l*|xIbrMIJ(?goaadMwo$5eS*c)w$TGUv>wmtgO zaKvLy9HM8bLAg?47Qf!WMa){O0W@fv1-)Kt^73@3a|>!YaDc-W%j8|q!^?>y5DTY& zwkeW282)yW=f~$mi&UfpH`WMV%|^;4)>sN8c3c!e6n4zU_(b!6Uk*D)go@RuT80Ln z?%>jm=b#)4LAJ$hUI1X874qryg#R4cC=tO5pr$1*2n1cL_T)toP1R)m`BluX15$ng z4?WmR6O|PxY9Av}s1c{Gf$^kTrrETAO^LND99#44@fBk3?df#)rHq^9D!)|Lt@VV% z*2ZeKz(qSm-6YvnMs!%$^t3k?91V$NjFmOWv_uIJh?LfR2tp zX^}!O%(>FgQI)CI6%tK?))w8AIdnWvQ(m60S)J2&n|i2sXn90yBLkBuM1#hE5N1uo zy!=}?p1aS|;^|}X=%Lafi-c7p2vAxvz@EUmdEk?YdC8_yf@5--di1gD3dO)Jhql-m zLb2*?<61+6Xx&v9`5n#CNzpY^Ud?@6!2dAftFj;>vB`uO+LV9$%P0GeadLhKm{;a7 z5(5x^R)SC;y-yg@Mp_Ed;ElY0&ud-mP;zRJ*L{?cX6-z3g(P|(p&7~cwQdl#6b0LuLK>MZKH}&2hhaEDUvR=IA}({&1=QVmWeVSU>?r;@M7|M zI3hJBig`d0jEKDvzvRsd!c&IKzAOG*K0?r|ze{lZF0Hy+OkI0_!iR`pKSlhKeZ|S! zGez$MlLNU{wvMd_OHDC=*<>)BO59*kIBqz3W6Cb&^WfLwj&E)efAGD6Y9jFD?rm-Z z${}irK1OiYJqv)j%(ESi25ikIppHCyP9eG*sHv`)LzkI$Wl0^)4-cnyXb>I#o>lkR zXjR3`Cuvk8xC3^7YnuBU^+zw|p%SOHDj+uC(!DA*8qF$~vgYVzTNU_mUS3baCj{x| z7dyd|zJ2?4>_wQIQYM5OMfhptt%%@oq;=)oapX4ng8v8X@flI#*!w*`o0pYq4}Gkr zkt2&YSVsH}I+bvn=uxwcrVOpa}p4@cQOkr0U@@f8h`tka5ctI#xZe17Hsi>{IY)*d+ zgD2OKQ{9Gt<~MkS!ATcT2}_%+!OrE<2iXl^QNo$Z%-ITS|< z9D@0)5sQ`&IP%^q${t16jJsN_faCZkWw>Ulov{3WiI6!$=UGYwyk4lMUBzHPIlApF zj<7-wF5BwVZefJ%JjVyU*;tzrIso$Ha=};62$EVY#td&(ArI!Lkf_@(lYWe2 z_|@ci`R0bvK+L8CD!I5^$RgI4_B=Mpgy%;+`hf8oxsn8{wQyLaWMXz__19Demil*p=u3FHw86| zwHAL}RnjKD>`2!0^XswPUsA84L}~d;uvy9PDo;v5Q_W+`)bCF$-s^EJ7Hq^K^UJT- z;s2Vwoier>Imc4BJYM#R>al-9G< z9LY-^MrFh@{5_Gm{z$)me+?j^T0SK2j`$&q|E6CLV} zW69>z@_a&lXg>4{h5{36x#8D0wNE=3F#Lndgf?cIK3|`xF|(GS2$fb4CZmJfisjya z@$i3RLRQNlWW(p;h)~r6c9v^O0rtavQ@-|!=7-6{d^|n89&0#7L|oV#jZxh%_Xb)s zS{-UR?wUC1k5kM0v6D(>Vh&t7R3%spv?O&H5QCtFIKw8l{9;G9sdXv^#6?Qy#b9K~ z*c5+VTL!7IO}z5Oemu_Ke#TAFTIy_nAy8+dXyhXqK>)ONA6T;LCK7Y`d0p+TEwJO! zOP5iwB{RaosUJV_$%dPJz~$Op>|=5K>D_}H30V+q@CjQ~+8oP8O!oVtJmOGSk&Ys1LTD0sMWC%oWKTfX?hf=g2oes=Ak_cO^m@E%T_qbwTy>z~)@YYRl6MEqXc6mMRA`pxP4!x=Kuqt4N^ zCZ{STFqeWr3Li$Tk=4bM8>P5^=Usw#kDWe4`{3R|?Y8=AL4tYaS@rW^` zO@*3IK$jz12e+)$&abC?)R`tAbD16?3o2mb0LFugo%aS^qNt4jML)*KbrLXNA40HAhHVJG95q@oX zEn9vRZ=Xlwp0PsH$SyK?-8=4?>yEBAcI|{o>lbOWWt_{UQCn8D{&Z}q*p#Ay-PN;$ zqqXoWr4+J+e?Ctnsj!G$t^-@k;)wuPi;`5gJ^N`jx&a79~ zSQ*!INjMq^x}yQf*$zJu2iaxKgZw(L-JWuEoran@0_{01y6Y*vx~$XSc$FKtF>3re8?(Wq@Lnk*G70~p z@VMiSvnYB+R2UJSP4}p>TcMPO>N#kasL-9wD>6TP6RgD!j0;UIx{w+&bW{?yrO!Hv zdsGnwZVKK+r&ZB{itCSXNuadq~7quP-~ z8O8?2cAG^7Va938|H4xqL>tu%7Wd4UvvY7)Q`PMk+r?RpG9K3Dqh2;`4Ui>QZ+gWuPA?0p}o0=kP|8?H~k+sj*Cf#@}Vo^-n zdQ0i>HWeOsDGbj_0aZt=f0t4`IxsreSG`ZEAz`RXpvoq-Dww)HG74ED(&wd8G`0+X zJ$K^46q~~wungpl37RG;P;3Ve?Ux`rsYCgH^etUpbj40OXOz{~lm?A&F-bo?zK+qQ zUXVL{!gN8rm<_7S7e<%cNa+Fo_C&F|jWH)CA~&iNt7#lWCh!R+%sb<_xvyR54I$P9-k5rPN$JIs0n~AD0{1ZF}SB<(~ACm z(|FpJXmgYDE+z+_6~MI_QpCm@Tm?R_mtMzgB5RF|GvQ1y7EOyjVOFq{-qV|ZMXj+= zy)AmuB+b=4=+$oKH|jfM_bP=jeXDFvhhwDoosfi7%kCJ@pYWlKpQs&R%*BvOJC-BkxS#(?gIp%n=KjH90% z$ke>1)=$BTmqr|o)c0O%ciN|aatbsz1t8UC*&J{y$0x6sJs5>vpZL{FlMA0;=Eh)JJ6Q55F(%Pfs@!=mVUFIoM~_1(FPM`R z$@Au%qpWV>Vrj!ET?q)-NCECAP+9hkiZm*Jqj}w7LZOt^>g?24 zbJD)po| zA7&%IQ~9VY+7`H-wyWB>A zEie`mkK@*M4pk3-i+u3qJ>@PehhB1u`K0)0#-xuWX~%ub%K zc85Kfi3a5XJ-3!7#`*NpA>IxiZ?po0NVm3n+bE{c$YR*3vLekPim1$SZ`J1K$l4r* z$y}`2gh7HDNr?8_=lJVUVXwouu~?&~%tLM;aGlX`c~e_|o>2(%?fq$x(CLb7UVW6k z1_WHC*($5VGbCudgdn4s;M4DK`tjuCW^}3$#v@ubu4pes7bB@`b$huf&9|QyJ?tA- zAlICwUeC>cK1Y8w_>V{LjN_1Dkvfb!78AFE z(S(jNb&Tvt!5}_HR7u}Ro5x|3ZuF%f2+(rQ-fdBX+)Ih^BQoiu(%c$UPm_4aseKjL zrG5*;E%}BO%}`B$Rk%F{;t0VOagdY{7)Q8MMm#x(dCI96&7)uKxtq0ku6GffN3#L^ zU`jB5%si(Q73GnwWNCC-y%YIqE;y(-THgK0w8|?5RG&z#8oZI_wZz$&^=g=|N~gx9 z_@-GhG-(ErYE5jV7AN0^Evl3Nf-SlocCQysY1*Agn<7lpyW-V0H2w=Muy_X|AGzSj z&CsUrAOHUTq>7-6&k?0BMK`V1j6M1|H--#<;F|I}<2meVV-PoWi3`Nr2phe}OUPNf z!l3k&$@%@;x39l_y#Mu3>yf)V)eiO|gQYjvyvfJ}{RMfChcFpevmf&3hdrH~D_qlR z(HwxW#h(&*pcYR@%wSV8wy1}6u%V~hxzWt=U#Ss^u-HD{9z7#hM5ow) z=~s7RDM4zW9gXE|HO=rJ*<`XBuZg{MpY?Y3OI(X~E8dph6!2IAbqt@|tT`+bKDPF= z2Fz10?$D#i{27Nh-@kl+H~sYf`Rk)f>;dV771L%9wS+$xQWCYf9YWeNws?fupAb(9 z!*a^mhh3u)_n>~r&K_|2r=*~z5aJqtPnMBKsST#&m@=_tUYcW2v}NnN_nWbdvH)^S zdT%L11%9r3pZzFfH4UEvm6tLz5$dn!+c&KCCy`bbio3!MA@Al>sWfOhAF`@pO(jK| zgRv`7XsJ=hxM!5IlqkF~C{T`ZPEmDvh&r-)bi`Zh64fj&kfSCO%Kq-tQu;rCN3gFw z{!vBSmTLQi*@za%3ekz>G|Oaorja2-aw&O!kCk?YH@c>SPlsqCqN_-%JLT#okAP<| z9oK^&v%`_dWtP5eOx;*_DMd{gbUUqBPa8`Ld-5JbWQ<)MZh3CPWK9b59p3Z*2Km#E zpWog;zWVw6`LAEU$M1jo@qYa-^;;0K5Y^8={Pd%K{o~JH?90zT{0C4=0|XQR000O8 z>vm61DWy;G5Ci}KA0C&nE(a%T}K~GoHcgJgb0b&QYnRP}YG(T!`oYuS2Tzm#Us#A(f;5g} z8A25@kR(JALJ3wJBp^Zj_*t0Tc7a0cWfuwH-;*#XSjk2c`(X2h?YnNa*Z+G!!tMbH z4}S}Yj45G+hA?6TA~&2cjCq0*pg00Z=;H_EX57W2V!Rsf6mg(^ma&_GSA&rw=grI#1xysAT?H5i95z;*( z9Q%N$kcKNg!iM>K>5k`a|iE*M7r8;x~9X~BscU|mF?siiW?@P%Wl@<5qbm&0c(}504 zhk{&cggH_g#u`B^DGw9GRp_?xAyCIp$K-ZA`P{{`WbJ4NCGp;`fag}I(haq3^KQ?; zj64};x_=)W?eji3*qkk{*0!8kZ7eJQ_R?=H`{od|4eIn(r@N!GzW`860|XQR000O8 z>vm61wpl;*)&&3nStXNko+g+58Uq=BxxuAfxxuAfb$AN^0R-p+000E&0{{T+TFG+b zHW0nfSFm^(CpEDMf&>?jq&cK2rzDq5s&Zq2SSVyDfWyVh-v=N?k@O;4wCp%3-$XRf zcn!RVt+o7ez0IvlR#rmE)tS2hXBLx0Q6aO{*`Hs3Igie)s>YJyTuHV%lj`h$%lgBT zs_UDKNlUku)x~usR`#Z@iwnoOy1H6ic?(r$4g|n;{`&3LKgfn{@wt%35n;Ba>t9Iq zJKnOYz=U=7UlqZ%L17cMEmR}v;<}>t9-QqiqJ@j>^#{vZ_Ejk3mY^%Us>_DdWP_z- zd6JZjiZV%R+xjNt-fUYrmRW;;Gq$pS{`ASVic-}pyJ*r}kk;>Xy=71(QL`lqoW^Oa zad&rjXx!bUvBuqjVvc z0L6yqNt8ec&V@n7<3MT4fdw_z^1hU`lCwMrlEFdHD#d!DR!gRY9)FG74L7F0v~C2u zYx@+B13rz$^G;}9WXOBiCla3ZFU`j~unqB@470vXo<$fHiK4s||EGgk4>x@d+dz3F-FDO@V?TALNG7Y2_PjzC80F9c;oeq<8Kd@OK3 zElF<}YHhooGB-R<;jcv%aIA67uU)*m?=9L>lhD{ z3hG^kKB=CFlgk{9g@l?`B*C znF;%SwDx?5RET-8#E`yGe5inF$THj@hHo%$4V;18cy^>ff?+p?Yg7{kOc?t4aU4SJN59Rx!q%?kf6T@S6&y z4?_PMox44dl#7n!d-T_T0SAgu?}rhuh#wFL>`sP}eR;i~TBFx_TeEbM6+C4<_s9H? zlW@Uss7pThEaBbDAzB40|NM#~3VT4wQXx3=@e{X=FdhOIbXWa)LeEWqT|hn7>$Wn; zhLZP)3++<{^o^T?m3ZRr_~SbHiGai{j^Ee{ky(nHgkIK{z!>28fdZ6^LRYtXfIBwi zY-PZ%Dqt7h!mpSPj%YVE7p!1Vb(1M7k2r9n} zDxdTU1!)Vc$5L1gL*w8+ro<-Mbnrg-Igi@Y-4juEQaM&GMn$bzBr~~n<$PC0OsirE zCbv%1*(YUN?$TutSYRpad!~;qs0Z&71t_9EO_wfpu$Q9ws zQMWV80c$@J1d5%%BDI0f z|3R0~{|zreNW=h%|KQ0MJz_u!1nhso&iTBjA!N{ZG5|01fBz{!3SS&r4-R0+R9~hv}J#Y{9A6`2rvXZAJ^w;AaT{z zrLy@qa(UeWn&OV>zav94fWWsm8+!naKWoH1pD_}rmhavA`#{v8!ZdseI5$tlWls6u zK212Kjf}(n{r$}X9}oy0I3IwV_VqG+^+h7n+}|Qq{0+qvZ1qcE{3~3el7`7}@?+a6 zAh^Dt=%svQ8N17?ymS`VEVp9^v2Exb0M<|qZ-PgriYVovW@E1%&Jqy>-c70Hwg^T& zg<;icfHbu2`>_ZnmKF(JpgC+IY-s`TNNcp%8be`qI&z$69hGbc7FR-$?@KqhGiWB< zP-$WWtCD9)5=PN+9$rNAdia>S7I+e4(^{SJFe~q-hiwJIh=rAC!la0yFkq@(s9AZW zS=Snf+Z}!QEH_%BkKLSlaSI+_`|NWGas2+C zcoyCIfhW}ie-xG(qWTpbiuEcC-vEU^` z(7S|Ysaa#|MO*!opJYUk8MWg13ozg;ka=3}+g#lMbmiQ3b<*KaE1UQ(5F5~~G#C5A z*9-g+dddfJFHFIb8?OwW4a&uTgJhCTv4K~WefUA=4r+Vp z;KoJ|h_qcNMuor?;bShcoLJ$CG#4i{{bVC6;!4wf;4KKH=;7rjTb9qo%GyFgVWh$& zRe=hc9_t85CNX4TuAyxcRf7MApdY`R{C>L)Yhp*XvTZ3Gb}Q2r|5emy%w%^(2-QYE zK(H=-L|-XZ;Qr1&?uRHN(`i1^0T%5|PRGTz_KpSgP$6=k5m zr8W?gx7|)zNcQ(;>iEPf8C1ft8w%P z@OAuK;}t;f;C``rQ>*mbrItna@%y7DsyiqLuM=G6w0J4t5WR8U&r{&W*c6(hQFw|T z_ilxp>YAVS@jVCn0;q?23GCYcU~zw9jCKnOfsR6~KbM(+pOil63@6^nmi=n};Tfe! zs1p;3CrK9rF;s{CCTOJPj2t4;KJpd_%<6B?ol7u3H9Vwjn*P_QAM1D&JY(_BUE5bi zPifIW7%!ddV{?~f6d1fbh5bqH)FWp!R`(-FAZSDac@5l<$~nwLWY7MJPe?)bGd-+2 zHH@Oi@KqHTb_5l)(|~g;cA?=fdP&vm<}4fdq&SN;#oM7j{9?hEP~A0uj2uk{Y-bcu z`Ps^<^7APF{GOStdK^zOt2dsObx=XLG!(X>GtGnw;m^e%|_bKSVu%fqz2V*-JZ*X|YEg^xg3a0hY7!5}!SgXwSHKq_uOVI6YR z9Uneval0T91p^#*q@HH{D-h68K#e*ap~6ky`8?)CD1oh=2I?dAtqz`m0UT3VH4PidAerT=Mrg3fv2;gue+>Vc$s;7e0u2BRVtlCvP8{#4aeV zjA^<#LU{=>_s+g`DRDX`=m$<7*yS15t#0MmSj4^?^)Z*Mk3(YMXMK`;39S=>dHI0aYOXP;4}i?*=9e zkU?OOWH9tkuWPMjqKzM!UL}4mr#~b2##j>3D6SdsLpjB&#e7b*%%=<~#AYfmGYx5A z_}IH?q_3yA+-7$Oz!n5B$fRj>xx3l%b#+Nc5ZZ((5&Ol(O3-R#FTjm`V)VeqiRf;n zkyB;Ki%5`O%m+U(JUqNhN`SG*7eyor+&x;)DDz~3cd*nulS~71|6tYF2oElk$&;n* zp-wViQ~Oq~nKU?evRl5?=js5CLm?s>I0_3^P(!o!yZ6+AsV2fCt=J-~oK0pP%)9RL z?0Rhv7x(BWOO~;EPU(45v1DUoQM_sY;(SvS_z7~M zSfQbt5KcdZesQvro7EN7J`Ix+XI6s!A!<3nHb&&nH&>SePF0bQ4Sk?|s19i(hEp-* zPur~WD%Ilu@v(fq=gI-+W>|Hwv^o^A@o82LtNW7;t_OehWOOWDHbYy@6~DX2jhcqJ zj4(n%F>NkPd}IS`k-SU*y1>2)SnGuHd2CEOUyQ=R`RZZu>{RDcKcm2y`YD@gcMXx| zCV&X{qR?tYHd&=pJ=dm89iyy&F=MH8#(1%Ooks`QLGR?D;JUs!91n($htAC^DJfX` zvs`7#v9o$FEiz(g{o~7O=O}BBTRV9beAlVv+b@I}SEO zg3snTe?yq;kKVpe-QSM7Wp-+wY_4zc7}YFyammYn{)a&QH-A!-lA_1?ms%sh11SM{$wB99 zf@pBCV1WN7O)b~V0G4mS=H=>dO#a1Ldb%H#MFY>qS3@)A)cfQzQcWACP?a!do0-KK z71Q-X@a0#tu?dh>m{nIe=?-THmk69nTewYn2#9*`xb4+wFLE@59ONga#DuR|RXDGv zMsLA6y32yPEsNLsdgV=S?(~H}c?&ZN1ovxeOdlZcSL0QdyN4}+PSLD|UKgx|^8zAJ zQylWhmopbQe`e^XAi!EMk_et^(_PACcE2S5M` zp^%Zanv*XOV9tM1de&1EKTF$ftbRAu;&>!lQ%1Joc1NTg?I*RChL|o%#2!uSFlZB; zWZ64n8=gOBtgGMMUh!x==g%CIv3k(2W%1Tk4*{kmzx>{XY~Z^;hUoA=GKClH705sa z%5QSJ5>AZ0YyE~AFy-Q_CAG#H5tWsqeyZLDC8)M%}L$u%@;Q8fi=vB$!xzfMG-=H_x@1PJN02SQJ zK4Q?Se81dhAgEOcp#Q%qdettgy)=mECqU#sFRaD#Cx96OVi^aNB?54SZ1!5Vd;_70 z0*ry^LGE3oe|QCi=`eMd!MB_6*Au|q=wXxELtq2IAr6aBPyuq~*5ApVOUU7zWBDzs zCAf9x|BW^9qamh-KcG!=GaypgI1nZ8)0;+kdSHS0xix*V3~0Q%4IBRv|| zSyVPZ!qdfwB{q`y5c-B#=8))9B-{cw`r1bEWa(f=pUjoOs25buUuGOQX#5`y6TRsE z(P6tkK{a9kW5|y!pY$&frZ}Jj2+?47hMGE!oE$Mzf^h)VREVxE@S~bIifN~r5&UVc zroVlLujEOu65e$Kax49a$2IYQ{Lkqg7skPfFu$poB?qH{*r@~OWN7v^$6dTCEeBDW z4q})gl-x>9g5GO)c31bOAP1@8l_{Aw6e|fGp>5e%DvA{7zyW&obrYzXT#YJ`r!@b{uLgGA7hn8CzPa|xkVS5=YL#lI@_!EW04)6 zg=Q4%Vz|?<9FgLlMxI8mH<*4rzqZe$;m%2d6+PW#eB4*&efAdQ{i8m*AO4s)U9%W`w%19sY=JmqHkA?DX9r z;g>}$?+(4>;Az-$N@-yZ9-vjMrA?dV4W6bcVYY}$Fl~T*hZ~1mfzV{nBJsOHDVOVn zo1TCFjLw7zNm=J4LLV-;f-41n3-AN*?{yFv3Y@Yi_Z{O> z(=3{-rQteUR-$v^Y1O zR4s8ihK+0}7J_7~XBp-v_Z+s0FwkdG498CfpJS9_BC-eV@*@+hZ|t89R#@FfYYg5T zXUNPSHCsqst`e_=X@WE0z=2++0Y*Th$Qdu`QJX|%9Qq!!+^dV3C_U}Eo;8E2-)Yr7 zi2P(Z>OhR3c~O4hh|1Hwe7fpl6oGdbuY!p-9=4eRCQVv<2FYYJwUiRWC>UxH)&a27_dfLzq*mkX%HMOngDf2`eGVh4a z@zeh5xn_QmQ;LhBG6}QD85SV@vfjobow|m_I>i;QbjQD$LjUT8IqxSF_hTh)?Qm<4 zq-^J%?ey@n9iyE};;X9_P4ChooDR#~f-|dso9PbEC{9hI zSKB-HXPdc;gC5hV+$GzK=c>MGr3%?XIW6Sj1LgiHnIq37q4U_O0RpVZ@94LS+0U-}8z9-i+R8fi1c?&*VcvM5K z)@ZU#zHS$f({muZS7ywN8-(qBS0||jqh?XY*6mw(6^4x#FF|1I>l~&dT+;i_N~h{stmfx#6w>aqIPavm55)o_S$D@PmOvCP1`5 zhO*dldq$`;)C!_FVo}UL0Z)N9foNoQjmTl3H;rptFcx4sTo>gl>&B7)l!?E!pLt=M`M%s^UXVV zG1n$q_y%amjYxn$F7UUj?*1v~WV5}k8d50V(&bGr-wpmh34KKI zYM~S&7?_*Qf9Y=sL5iFJNYJ*H5F|)oQ}Fx$2kL`%a_t=y;YZC4k-CFczOprKE!_}L506m~uIcxj#ZAO)k8Bd5MS zE@@|+kin5xWbz73Qd-kd>rvBF)BBHQ{n$#e6bw#a!C=C0JQXa5Bn8pZMTjbMmUUMd zoJ4pSNclj$xN#R)Lcsc%6#BVo1iq0=b2CXLCDHN_$;_7{udc5q>L*(rR90UmMs7XtbZ7NuQ2l_5fkOp8HK7RMccC!SkRN_m|bPd?|)&8f{+kI+D{FkuFkSg9G$ zhLq&LkB%d^q?uLO=LzMVObLm^1X^%FIs8S`7EKKux!0k|vW3~LXqZ6{JB9GjsBikWMLclnNVf25))1Fdn~9Pq*6Jz0bqLWQ18Tyl?h1ZXPqv6OIhrrfnw7&BPdDR?Nq^*S(ow9a$Z!hNuhYGZ zPCZE-I}X%?M=Kj5LEBb|K9pe3fOi4(!|k&nj&ptQJsfj^R2%s)S8shb5W>PZ*^_16 zAX`9f;2FDxh$@>>Go;7T6=5HQHs%I7C8NDW_A%lU^xWq^lV{U6kxeY45{uOZwhbir z=*HA0fHWb@>_`(PWsPye%xr!V$jPEyFhUj)dTj1zO5OY;OXi%G;xC z2RB;hua6&7g;SMzA9XS<+Qh8hHLT5M9!B|lKWY=NzhK?%+s?pBu9mSi=2a0Zo(g_S9~nGK z?6pWEpW$hsVpM(P0UCFy@2@`No?QSZdd}RgCD4uDp(xUnY}M$^`q1^o9Sl$CvUJen zXTsh&GybvCGf8_T{P@g&PS5hz2TtD^kc~LrV~fyWq}F&JTS`a=)oXz+5>gRr&-Y0& z3y@E$e|iVKU7FLaVVdv|WOvoBYhQnjdhWdnLqYB1A|ZGZ>bX`+^NThC1O!Y2{98nj zF_o!OyW#duwwxCEX8;Si!8sy6AI*^G8stcO-JaYqw;F}oM!@K7Q1sU>>EWjd>EX)$ zN&y2bS^pm=ehUmQGF0Hizf@7K+wZz?VDG9j+8x%0-_f;xm-Rlj8YEIa5c$Ylq?G=) zfMrSroPQfEM=&{}R$IW6nZ_?v1Ke8)9mZhqEO42W`3@rIWuqm2hQVJ#9+~Q`$!k%1m@$F*D5$?!*f&f(>A9CJaNs$v z)GJwQTz9mtNw-(zI0`aDjmt+drP5ip#355aD7v~tDGzu!nt`1omB0VJIh*N<)smkGghop^YJx0IncOt3C9)>m7{6P_gnI4*WOe-j&hgd%7wttUJZqGAzt=3*5W2jCrh;~n^4Ahr{=Ku`bqJ-oj zieUxs{sjJb>{0?00BC4Qk~NC0`3Q9Qcv^FxVF&oJ1Zo&st$*QTPTUn9z2YSbl?lm! zwd2~Ku65sfTp3Pi?$bf$98;Zg7P>Z6$u4*)W$#`d}mNfH%_SML*@k}~i`Irzni zH`7DT1`&=Zump*S6soaEG~7=yDT*#evW5nHPfOteR|~bZ{{5x1xD{cN_e(MbddK5f z(pId#DMFTGU3Y0Zd;P_z{p7`mu|l5j@X0=gZ+KbQUJO!LK+M$W%Htaz;n8vDuR^I` zsvzL019(lrD}!`-vA6OI%wdbx3s)P9h786P?OvI8NwT{21q)9RX3cmNyI~Xh;US^j zc9+l7<+2^!zC*C75=&3rHr{*|y(#aS@q$5jTT6`fBXtGoUV>2T>bi>HDns#=R;Niy z?uEz~VtaV|#1BbHF}9ZA<{}&3YO-%p|3Fp<@mzQxan3teVtDX8mcc_(k zCwn}4C!ceihdL{A>idqFnjRAwh&kGr?krt#VB~OMHWzca#t}`BQ^586(5VrD#gF9a z)?*yzv%#6I!WZ<q-zhJ&Q1tuF7*$4>%pzRZ@nf=Vs4*us5?WZE?uUgnP!vvbx@fUHXP=RffA{7N3W#ifRbqb}!)Qgf{ zXi6DS*}qZeW0^hg*rIhxjkT=34wgiZbPg&O*EHGKXT3fCIYz_@%D}E4ooA_ctJw&i zZFhfu&k{1bpWI#&TywDW)c&G!4UYwqX(X(Sp@0{FJH*LB=(KkuuDMSiA%z|ZJvMF; zOmJj1X>7i+CD21nYDw6z|9<-OSt&j>N8CVeyQ8I^~9T((yxhuph!GuP| zkSt0l6+HpAXag2`drbfanha41gc_apw2vV`AUts1sA@ysK&*rmg-O-omi7Q@wr)5v zJ=k1Go+=MfeUD-I`MnqtN`YQHxPHYIQCS@dPM)Tp@SiK}qE9;JT=tK z5RKxRlTFDzua%TbTsFXwOWPh@l18tukpd>orM}D8e5d#{vPb(m?`Lmcs7N-NXqn#+ z@vwxACs^k$J9#kA5QX5;M~7yRSyX6DN#KvYi;1ePzN01Sc3YvMVZKA4d37o2CJ_-w zLiK&A+q-CK--H7@HM$#JLpP62az>FGi*GN>_oE`!1p!{FqvJm_X>;Pxu7@4I|Ez4y zG$4WBuuSgC=b{E?OzK#oEjpXXo^>_&x8)?-&Ecwk0BS1#@{F(S+0wfwNUNPz?Z@So zv0nQ}*vUaiC6j7za&AcgM?pfRrdM(BY29WqV`X2Pqa`;hKde5SA3bdL-)7(Z(fPjA$--_me)d99Xx;<6j1r#M z)r4r>cuaSC?o|F%3dF|T*1mH#6b^6LTgQmf$XH+Z`?Gn}A*C$s5iqz@$B4Pl7h#y5U|WSZhn1_9A~0@oAAffY|R(wF;FbT6FOdsn36Kp zffpUnO5W^zY(PM;nQV@)bi|OTVILj}0Riw@BC6fOvS?N$BLvi(Y4e^lX#(dOs~np& zff%d{h9l;gA+pK5Ndw&1ZO1g$QS zFS6lD%0k4Q|G`&yu`aZc&gyqozae^swRB|F zgeK`37yA?fH~tWK!K}DsXdr=Stk=AjN)K-$`jBm`qR)toRfjY37jBHgoRIz=ZVVt0 zzN}t;imSJhwn3tPVo~<8kZ*~G;QzBR-FiiAwhZ9+9BK2C7tfh3-q!{aQsdI@_&{aG zK!-lY*}sWS2@J>$v!1_>wz^U25;9ipTNrJeEx1&lV2Ez z@R*uDAu|bj`JKO3F#7~;d=P^Oj9mFkDq~Z1p#2^!#$p6NW+aBX2#t?fubugZOF}cD zV+U6;ns|=%!bU;ht19W;q*;`-Mf@`wrsMhAwMs9s0}GWZ2R z{r}TQtTKPIvV5=x<0wO51eKJOQq@d%EA{nw>+BbpMUA z5jMED`~84^Wv*f@ob@gvR@+QPROafkIObSqC+!Xf9VpfggFI0Krum(Q+{6!rZQW=Y zZYvWItXaeUtwoohm>5~pR=YC~`+a|30>)D91cBmF&B9Si zRA&x~YOL~#ev|fnrgGj!4_Ct!mn5)0z=KgU^(C3J(osArEd;eguLA(Rw3}vJh0eJ1 z(@w$-QmtSOUmXv#Kj>y;Xc=5wprBHyG|XI^BI?<^?YB~Zrc$mu_K-reT|));338xb z1+dBjx(C{T=r}a}khWpdaC|6Wwb}ur2o}~m!2nO9ZaRP^TsnmWX#t%Syp_qsxgDPhtYutGY}-ECXlJ=DNprk41v`WULJ9^B@n(GFz(v3 zgjd>w<;;&e_J@&m=Sw=ck&#xvB!`@A3#|<(ftuI~OR$`;%Vm2>c%L z{Q>ctFME;2G3g=YI8}@?VF8(#q3$c030Dj$+I&kc8_J4(h>SY^Wo%6I03?_bC2(Q- zM~g-#vWC;6Rp$jlr`KA3O9}m}phcu|I+G|oMqMjaKiRKhfd}J+Kg5q(&z5W1yIUjN zVlEYbYi4b0Z?@7v-|VJ3$y)t9wlwMZbOdYF6Xq8Klh;g2xFRhA0?rJu>(8!v$f*7> zYe6L?1kDsF6gXv)CzoAsP;M@ZPXOOgKn!t@Z!s0N>QfgQk%P1+9|^b*oGK%8baz1L zf11kKSlt?Sb$8AfXy>Up;~>O+d<>66x6<>Yplk)%uAaNVl=(X+?8R8oigCHmsyxdr zCBGDd9roIHa}1vuFL=rTPo7+}01F&QVtb`B1}fa(vkUMJwvFQ{wV(v^F`!k0Uqqds z{Xlr?`1-!f2$|~AvywvJboS8aL1smXTq5TzsSd-~luV5^UK+HF(k!Qijqxk>^D)AV zqezyZhH30R>>^@Fjsr&5ik1d$*TixfRfwR3!=@V%VbJHd5e(XE!veuBBA+wEgPZr& z>RYbRt;1R|JAI1a#9^A+QIi{}-p*Nc)^CoK9@ci7&)*h*-OS*5aH@YVJGE%I98$2o z-%apfu9v|*mWh}1oQbT{(^mc!aiP@b#@!D8_Rpo|M1p;Lp^pP(q~;Z8O!zF zb;4f;^jJ1F^Dek%c0fO?zWI?Ro3SUUhtcCRTJ@nfj|U5`Y+nB9z{d4~JtX5*o3kD` zh%4UTzw{%r3c&YsI>7f`aG2sRs+PYoP*un#kXdlVPp%g8@5S&)!_wKv>Qa(5AxnZklE})eG4V+&X#2sna`B;S-p77o ztrPiSe$9(uns8Oli~3<&?%h~tj&YEG;haC17xgA=t@*oOp18DSM*_>V_=HoT&}+t3 z+I1``;`v|b<|^Wg9`A)^g4Qy&FGyCeC&vG|nrT|idZ6qyfZTr;4P;x0h6TK;$>lmH zTaEg;w{GQyR5oUjD3egWp(|`@Z6ZYCXT}HmxQLI6t{Z0hG(arN8c@|LP=8W6O*}h-gb}I2 zIB?gyEo-YR_qNtjP*5nKGy{@F1_#^VY5~6^+NKN3p$(d_?oBgCi-|Lv62KbzZPri3%$1RDqE=}xrh=HCJ`IAiD^Hm` zqGnudWr>Dnz+s)24A-n2fhay?%n?Wv|21N1d04@9;Jn|1{*x-Hp$fP^bTwqdUWXWU z>Vg3G31iKvLgjaA7t5^T?rBdT#7y9kCoUY}^{Ptumgj-pK2)ffEaYPA(tawt zfO1)Jgf}rn6G#_gWLIdmIKoFc=p>3)n-!xh?typ32pDZEbV5A5U>3yo0e z>VXP?$P1hri-;b^9t8>(FPa(Ol7vf8rTXBpA~mLf9fr8HO~~tziF-fo#(ERqyEE~FcmFQ*+!|%j-yUH zuxl{HlAhD+)TVepK%_sn5OO-!TZi8Xfu>)@0H5})q%Dlx>k_EB#+hbIZbvruvXFEm zxU}Y`R{zJ6Utf{O?OOLRc@Ud=HIO{lGhuMRJncxjUza~d7Vlf}Pm}hsdq6*%b0ux& ziAhAXwl!|7CxSNk(?}zZhi0_E3x0_GgDwwb?_x zlN5n)Zzoj@X@E^bS9h$gz2tdY7g>pNm&1afVOE7jH@<^X$piM7UbM~WSv=M& zTdm%FnV;QeaJxQ=;QLBRxO~fYo4Bx-d9-kYA%uHMNnBZJ@7@vouW~iZ0-=NWI3`K+ zy;-n^5vL6pO2qs;LUI4LXb-f%UKl@cbY+i)WNTD2GtR{S;E7|2`T7BJ$mpp2?fJ;3wTJF2&)UI06ZvRWYPPEE1W1-YDZzJgGRcBMw@O{xTC1lVpgS3Tqji`BXImb3@kq9d_pT2&eq{N*FrGXY-5Wz%UHqr5R^I-k;!=q%n zqQ(A%{~rfw+*-F4_pxZX{!tMXe-uToHHO5h#)|51EF8U;uN!-IjHyZ#@=mp~2x^FIMI zF)s)WxZjNKJ6&V&5GO~`fFZQOSj>Y4Mwe#Pd82i zd*Qk4Sx*fH9lG-begqMasDF9raXZVPp{1qU6R5GHX9Ta8UYV-b^Y(NF^qSr#uaL$N zKQu9{*+xI;(6{Z*NWH!EHI4k!!k|ugslNIEJZ>(>ARO9P$Pv)<5!N_x$@?PRRW1!_&YXO=eQC(gDdRWS~K7db3B*`{f*89P&t@ ziI!e0hE=jzJ4QQc^L6>=Hw#?D#orq=mX>D0Q_Dlu2}LeH!%uw;8~Wv5E{t|N?w%6$ zVm}vdlZI{s&I&ZO^lt|Z||z(1mk9HjhAbiTHb5c%$n$26zG~NANca+;QCW1 z38{p`qVz-LlJ|+zR8ZN+;aVz7Jq{5A`OawOo7P6X^&np+`K=qTJ%c*h(w@D1TkRP8 zwi~YKT!IwIxY#FPjp`CZ?8VuCi<=w&z7zGXI8!RvKQ_%mM;}bA`?@h@sTQ;Ix_wGV z*TTw_>-zna=KZY5(^CJrdcLsEkuttIh7Q8G@Wy_~i14aKvd4#d6Bllg5?t_QEj_wXnx2jZdWz%U-SH)9 zvLspd6(-7R7Lao)YP}^F{F;Vd<7x7tQC7}=+OCpVd z`JDh4P+7bog$H=#0THNvB92Q;mxnwC>io^hY_Iji-uQRd9mI#wypH&p?^}73I(-~a zvvv5Q*_i7q9W{~=RJFZ8Ho3AxZR(gHL&3Ei@1?7&uD{)%VGmgkha4X+=tZN_kDjxSb6eV!m=>XJtatScXWo#doVK zjBc)VT@x|Z^e0z#X#vym*P}h3XFK}45>eiv2n@otlLS!M&A>1Vs~|yvgw7U$0>sAA z`WduM;0z^B>=O+k(Q3;SE?y3&dno5;f{PBHe1DIatkDjT=`S6mra46JT+nrra#1ih z&eZBokN67_L}~p*Y&=oYRTaW2O)ASnk`E0Ej!*1t9{GKL2(fh-;o6_hNhn_^4s*Xc zbs>O+3I(|ORyC?H?0Azna#lT#H#Nt*MOU~hhV;2q_q7oW&cG7q4HY{4rSd=I`1%d zErf72pTx-QroDdp_v#qvVe)~%33$v9dtzVRlw1zX8SGY}Gy`!~GGgdVSUNQ5Z<+2jPL>CZyMP5F$6?9yl@M3JiZQwf<4PnstLbauM7fu=XRemB*5HBGLk)xxl zDuti`Tc{whq$gu-8=m`BkI&gUMS~-Iki+4~1kfcj;Qk`0N`5!lFo$90SYWcl;x6KD zhC%s4QmRRX)B6YprP@27?;#U^TCoN-hYL;b(iEn{RuGvjNM{*EhJzz}2(EcljOH!N z2H95kNAk70!!nyAe~IDrud#7SVDP9RC<~_n*_6RDi{VI$!|dU-BVatMeg#Z{9J+$| z{V{0}@`T^f*eptNN4b?}#7XmzrOP;@kmaRll3l46La?N`1lmCl@G8XRpjygn;b3Cb zupAePi%M2*i6!o$B?C!zRDL`iY%|m3Sn8sJo+o)AaK##oB7GcEZbt> zkt8Rse~_3Tk%@{m7$gpH1%e~m&-3ra|DM|Ym$1x6FqDWnvf#Mvx|XSD3>~XY6sZ)} z5-OM-L0c`-z?aB(ObG9k&b11z1mRUJ*M1$x5{eU!J%&u2{<7yb%e5)Bd8fbS-(mUY zIJh>&S?orLM~H=Vz4QYkRY>Z#VM^YCRKv!q^ymF0#NH7(SH&0Joct2q>!{J_#Hh-) zwQ91wXI+>g${|Uj0o_Yoga`c$CTa{l(-k=ixj(BcWkhegG8uh;W%owAYLvtmp4ho% zyMMB^cd`ChyW$Ei%Tsaz`kfNbc~niaAoLx6!Be|QVhi5Mucx_r#$4Cm5}*|UBVaC& zcMu&da>+P?)B6@?H9CAg{Hd3hbHWqy3gC%*D1?WQ9Oqr*GO|cVs*rCe@Q_n^%)rc~JuP+ZSJ2O8( z*RMu3Xr{9=@2z6pE4?oZs6Mq@)Ynwl1&alI_a;+Z5JmG(4X?RNkMXtv_t94)M(Hnz z8l$p+sR9$){K)p7vB1;(k}ZSz;gWR z8`V1RO6l>#!mW2sR@;z9L0ebWw$dtwmGZI^%UcmAe6!Q#U#+Ffr=t$NNpm*fyx4eoLz|wo z8MC@8=f4r@3lkp-(zbg+(+rGk zf3n!puIv3jidq!5ipX@yf2)95|9gMc{zFq5s`^PXLSomt8&4}(bL4xOjEX5X74xc- z%B~oP8e6660e;nKodtKw=Q<*f!#A}-)&QY&Q7!z=dH#0clFql%N|4Cvd%8 z-5^;#Ot5=0rhn1@#1BlQ*$L$$I&3nxsu;K>Y2U%#aVMC`B`8^JJFWUMBrw^ zi@mb{X>TrEZN1)r+c<1z*z$N+LAjJG$2iX$=vb|7&Nu9-7R}E*X(qXc*N%G&QB2i| zIxO_5zrVu&F4@lTV7tHUhNZuHdwzO8!ee6r#7h?&8I70J&^5%R%ofBhxUu@w#~*Up zefEd+G(3Hbi*E9C(18b*AKXzrep6}D%#SSso@^;G3nW;(aJ4OYddy>@%Xq#mEqtK? zrjQej=h&X+t1Gi6gkoxw$lo;M|0+2^LAO(RAE%W{t>2nDsGmO$l-t$by(Z&Ny}Wh- zgJ@JZjq;_DG<3~HySug0#PJr3Fji5b6moUjMHw)SSXY;m3o~jGmX>$%mJmI--yE4c zmVG6wqR&^`8gk%nMfIKww|6C*?DL052Fr_0SZrq&8x744LR(C>8c9tjew;%|7S?g8 z;E;O5Yv7=DN%b+ecpP&9-wLtxwMMys@~-gf(-7Y~-x&OZ4t&l{(vnQL)4#GC$eCA2 zbF!h2!o^&?>!)G9ClE8pnOQe9o_+NvkkfhO+!6oZ!MnNo9-N0!h&!`2ZjZ5mjR)D>{6$CmEBzMj5BrwsZ(xjXMMNOtA5|} zVDknQ`P^!blL)s@c2dHHMfgnL3_pFt2ccpylR-^1U_i47%7_g**xBf(ukeaVWA1Vu zvP)L$fnz;C%cEr~R>Et`j4O11LURp!J)73~P115FXtvGlW}D{nRue@!73LaT?Q2q_ zRA_K{f7-lYAG|g8eM{Ao@YUrRVRP%jkAdlOu{HixdDJ&fr+PA*V8!s)S1F@8$UDjq z+7J&FG@x-bNn6spGBJ$d&-ncgIeC4stcgcPmGzmZ3t&=MJGkC&&D{`O zVSQk-*^N0m#zktWz3K?CQ#5-Un}JKD#e)Fn4lZ&%LcRv3C|n3L8Y^82g3OJ{SO2vO z1Q-N!5Jn3@eL_|KTlHrOd8>x&I3P*qlCf|){ZB_ zkrBWyWDM9sLp$jo^y`y|khy5T$o4Dbrz^m&Xs$o~aVn%x6z_>^AyKq0ra$yrX^53} z@~%Ulq?fmVMqHc|FU01j+jP`v&nu{1 zx*vuNVWf|Pj=~tlxEx7z9=swofbO6}UxoKAM^_nPl0W|7Yyf84dpfUYcc>&J+!mpt;TM-X7G^S_;; z3_Zlez{gGDrqsepDoUa%ct7?;yIC1U9ok`7*W};e^&2I*w@)J?i;11&0L);Es5mCh z*V~sD6P*VFTN9E9ggcz0<)w=^1CpOUeZM|gKZP|5U0o*RX`1rZ%(T+|Ozr!U>$z!O zZemswZFq+}rqAa)d-d1q2Os6=ohCTRYfHu7A1wgE%M^!P` zqpAaaV@KvumX&X&B#h3xlJoUNSog_}2yWzFF+>mlXc!WVAhfu3?mpPyh@u!GkZ=g@ zhu(lMb}jw)_CVJM(NlKwiXHyg>ez#2WLaino1tP?0VRSd=aRZ0pbUdJ40s}v0S(F! zBI2~|WSYo1daD~72S4M3f&Jsq5VE=PVTAd$nr$Ded_<_}6#?T@z6A~*S?l_g{69%7PANONMR!wjhmoHGj4cv0K9QMS0(cv&vWZon;S`7Fa9qu3p zBO%Z^2Iis1D-75jaH_%`i=l|1v@at|ifbAs1VIrc0%MKt{^@M*>g)Y*WpD56eAj=w zs~P04^|OS8su;S8maI-vy5?~|ZTqK7Lh*t)YLbM$$z3U9{Jn&q$R?%oQf zAL%GgASB5Zk`dK87hYQ!2^k5JTL;}U1;+;yB`3#c6M}XEfTF$b)I9z+Srgr_keoXi z65VQuE^vcBt}F;OP@P2R6g^U;g7j-jg3vEnp6?S!n&2)}h-iG6AMAlQHKgDH9$}iL zHcoYy92rVO8lz!`U=pP?LlUrMKR~e>8EBh?sf^*_@pwjAvq!7*NZNY+Zt%fO-5_oX zpX0{o0XKF4%uv_;ZY>rg}u+IuE54HBS}v-PcTl{jdCFjSG#wDtl0H{9VV~;~VFyi*Jiu+6rGX{0K;4C0v6rwsiA&T6CXH&L336yps$v7|F>m7iUn&v}YUV#9Kzjs9 z;ZRW|yD<*cZH)fsOcpkxgVE&IOM-u0n<$IUT)C_QkZu0ynMXR;;wRh~_4Yu~{3?nI z1+4UYK4LI&{%!S3BB59dKG!)QwS6P9Sg9hDiCxv2WG3bf^H zg5@lpIZxWpiV$Q!GLOl6%xcVWW&R3C#qRwaRV7&1|KQYM0?Ow0o?d+Z8NhViCQc216fO0$m6*g zvNf(nPY0c^waSQ~Nl;20VG)6Ih{Kg%e+nj6bH9a)CY^RWU4E6Ye|Bd874XUsr?C}QRhZ60h$3H%HK29R)~8pEU2f^vx$Y0+_!nl#fZmCQ;|>jZFhv|sicmxR z)f%=H0Ko8O=j76>2K6cY=J|L$p09t#MOzupKdX*Hg!0-X64_OHf$9^2-%nxRfq-4l z4|>uCb^$@Y<{hE)0`AZ(1Gu%~ck1DfJzJha^Zw?AxI)GE*S>z4K^fE@#Nx++wo64u zltOnJhKzx*{DAPz$bg6QJ1^{WN#88~`lC$sp;oxPt*zpw085F%7MzWl@VaDC4`lzG!&ciSA z8K#bIwXbrjV$GUc+sCkxPKRm1y5cWuAA||YVeRaaIRuD^xKQZfS~~xD*+~7ki20IO zN^;acw$NI1+i={3MIFoJ7;Miq;pg@zRiu3r3C`Zi-wfJQzW_!P4a&8KQHu5K8KI(P z+)K})_;9}5x_27r!e=rKR35cU_!{)s=>BV6HCLERuVje0sqAWS>lOoF<%+ML1R3uyl-`I;==YpY$5XCuMtPYlE^VxtpqR z>&XBHVL;O&GndXhM3da8bL;G)c-MvDmXbT5SQSMeyO!As!)xm4PHCsw&i{Bj{J4DG zE&8aWbKDd*?gWuxJFrX08HOGlFu7Gq0&iMqCNqAtNf9|RVc3ZA0HD4_ylLLVIN zV*uJ{N-yl^R6luOC>Hd*pIB=w9J9|q>#Nc5Xu4WdlbO{7Cbdx<9=>u~VFiy@8)>~$ zzd!61gj)otKD=F(qbg*z_r%JsG?gFvrb)ndhE~$0M1RZT65?=Kq9Bj$Yq(=8wy^F@ zeWmQ3FaLsp4bywWoN-mA-GsdjJLg-gdH`5ey{5F!+l7qY!)$7CL}*Q0&h{tJW%;DG z7i>F~8mwG2#a)Uuuz?$X>-UR%5lCt$d_UC<$zFLWGJisGAxP)-cRgq}GiwcW3cUpZqtc%}m zUsvxW!{Qh*+18Dk&PM^e*FRS?M1Dtm@77aclTg6oq4>KX zjzt(&7(3vr`dQXi)@Hf0dE!rdRsyKvhGBh|j0|}#uk}i`*|4sF&d<`iuE|tEQVNQE~CVihngMY(p5VH5A4widV+YrX2l!B3b0V z2oiS5xOn0DxkxIr5MI;v_NU!^MTL0Fsazi&a9ydtyuPa0TQ$JN%81IQJ`X5(dsUKe z5tH$b_f582^^(bqwmgY80G)B zT72Oh<$rcD?^NicX_%*Jg=@JsJdG^T&RshRn<+Ykr~Is{<*B;NKvojq(wQyk?9PRO8k`a1^dMJtT5x`Gely?k$+`cGXQ!k_$u>dXRknA zRr{hu($RW{s$Tx)%V0SBu@14>E9#GlZV%KFFj%0z$43^W{Gj4V`YH0cGYOg>NKF{!fYI!ciZXLlfft# zVc_DScwq~t7eEoPT zGcHIfv_zA9q&lMP@9YTX@Abr&mI4Ep6#1P^HYPX!Be`mn7yX03!zq*WU{FoYb5Za< z!#Vq{p*FjBxE(<@^Oww?tz&rv z=Xw3?7gaXRfZwrEtLocw8zkn;V~?`ob`i{5QnA3WO(y2;rGPL5o|B^OcMO zQcbvC$TPq#Wk?e{P=J1B=m6~mVH|sX^Z5=Y!YrR&re6cPd&K#waP=SgmHt06RvFYH z4Za^z$)o2At>z5;@qgXLb2S^}d3V-^kw0d?CZB!Ss*;N5-oz~;#! zSxJS9C!PGMYF?tl8Y#Ep%m-e13)`mzF$VeH>@juGgcF1%Nge$g0)~Sb2{hb*1YWSfUJ(f)A+}))YPai!O{~;!6%ewwN02xCIpIA zs)+!neT~VIdJ;r1``YGyM=2n`Sg0WS{rWzp`(o@O%&#Kzpyj;G(KjJ^mc4c@C-I<} zc{QaMxzwR^8g?;*iV6|3tERFJy-)2kNHOO!}>alOf(qio_;fusv-|qsP zPir4IVpcRSG}kVl2vjR652fFPnFs~3koKuX6L>~ZAJZ(&@uo?P#f8zQ?rrE3EBtKr|g^oiJO^QHk{ zPdXv=D>@rqnzm4w2wD7E=7oo@*A0Mdla|)HEUy@@S7ph}<1GuW+s_bQWz<2%*J&f}Gr#ALWoADWG|zX z&LKIy^$6if<09<6+L8~3*L$QWtKrip2OU1rUzZz*al>tJXcT5X3!djsjg2NCpDA5pm~5; zvl!FeThWX>pgFZ;of-y;xl58p#6ohUM?^?XA4R z4ZippGn&nH7rHhVyJ{k4q=zVBDfY=s5M?kd`Kcg{CSa1~JDZ@ML@uound`Uf)|v_N z>H!K{c+^RC)tj)J_lkm931jxL5{1%+I_w4B(o_N%`vGJb&{fWY^C{%9%C+n#F2B6k zx1dhYv;1OB1108TW@P{huvZ(r@K54>tTz3qMfn5a_?`?NGD~{^ANk~zP*&L$@K`Mq z>xr*aa#a|R5<{CKXeq68F@9IBm1!JSRJb3`$HfOYQkmm4zLCx{J2xMj0OQB^!H|Vz~r*hdK(AW z1*3a4QHSgfR1Ux1A)^b8%Vm1<7M^7gW+_w^_!9<#t_AH+o$4d4H;3A9t5APmf~w;i zx4`ySy2Xbj@o*xB)o)+nz3ac;is$3`95Ztx}SfW?9ea1v&Hk>7{-9w$ru$ni2PXP140X_jR&bP%_Fz?Bh=Hq1X@dF9VdLcE1*&R4aTF0s~wvApO<;;)(dx9)-w=`|++qC8` zAJ@FzWN~D=IdmpBfTDK%F@Mo-!x3(=)10sdX6Rq!5DC5J^zUkw8_Zde_&2XLn15U< zcUF7pMyp5NfI=1BukxSxkCk>4|S;p!g#Zz={axSL4c(Vh+#vxbVg+Fe<6b3IXM5OAP1ApQo8*;j7^De(>7wP`;_crE+_vx z-&Ez*s~M|+6+Qfckh1Eq&0TB1mX!)y_X%MbHZ8RG&AYKpNp zroULHv*;gr*BM1WI+CvD7zUIS;%+=3k4eVN{Yng17@#T~RYUiJdU3-nV{k_1UgXu` zy92Q%PWFscQoI6YTb=kOnKOevi#o+fB+uFZ3E3@QJMd6nqK13txxU6&itS%^=!$cu zQ1M5HP1*44!z1i-Yz3ppj*NO~Pcb_yL3$GucTt$=n5PNG_K0yvO z4OlyY7VxEUGB^~dvXWi-#k214bLFil5re@lR?D-x{ zCKGt_Qs=d7ezyGJrs;7!_@+-=TYJY-WCy)X!j=xD(2~*a&is>MM+E$nA$KWqKK`_l zlrD@%PJ_LsGNlC=_|Q%d1`bB1zh!d-R1;aF4ZL&Gw4rTEtyC-CAHxYg z0f3$`==G3ZqW)KQ6m3^C{ytjb-J;e_U<6$kzz&$yylkLDvStcufiwIAqspOmYgmXf zN7%8q@UeA(y1W5zFba9}c}KrXsI8pxKd(#_qT@DHQ4$c1MsK83R&T@f1w!ry^O4Z9 zCad(|A28TdCQc&1Rx|mCC)cbs(f~52BmmIy_33l-bmVh0o_@~f`+mdr^?KSbbMrMR z$9BzUy~)4S?ruogWL71>7HKKAnPq6w?3TyLmhTZa89)#gpuymuZ7f`h9Ku{DSYx+8 zbMNeKmOt~%ZQHuRTw~n3Mnel7mr>E}#vQUUkYfw8w#KN97aDtokgnl((W71H3&dKk9J*uf9%*3pr^ssSS4$zyf6GPj-WgF~!a6%X@vyxb9`?dgW)6d2q>-e0} zL8~H@Bs*M>$@hYQH8Ee856ZGPf4XmoLfdbxGFzA{&YrW5K#J4m~<$ zC@t95fR*G#{rAiV~5imNE(@1?gD_ zHTMe=O#u5yKYyOaxXEgijYijT&`t1gx(e~t zI%{7UZJ$kb&9^|TdF*hbU~aHuDnPjtOY8N%IsgFuonh)Gwkp4V2`D&3%#>!(no!|8 z(0Tzt%UK#JHX+4Nv4xPGc+28{KOXC~%)G4c3aw0r7LnN32xUj$u63Qdgs9l7 z%K*aK4|uFXHNjUU0P9mtG|MDm)7v{E)Xa&DZ+h$q&FN15Kc#xu^s)x?JCA$LuOBM5 zgD4RA^YTOSgVZVcV`eG8c+-vZZ=FBkRx||+i8IE#Ooc7)hLDMzdBPPP6!;oi24!b9 zj)_u!tA+s4Pr_`meNeWB2LX-hRTo^AUs2CD3*?-FT$k9@0?y`sk%WrydTE^Yg5M>+ z@`L4jGmNdXj&;(V4J*hBA~6-EZva>P8^q$_bG3f3^We2p#eWZ*W4%1iv#!5dW|9NB zEQCP4l4@(6uS+KV!x}6S&GP6L@1`nti>i75?>z7U=M%RBYC`lCjTOfs;&X~T+fj-EWhfE7OUc0sp$)RzZ-cUz@Q19-)NGb7^7Ow zF#ZHpL?8%L-iU=d0q0`q6cL-42T#k;Pe)_FA>x_@-Grd}&1xL(|Z{~p93>9ZZ|Vh~&PCt1w%-$C-` z7P!%9Z&Qe)*QJ*y|27vTSoS1y>y~EKtJ0{4IAHZ0e4${Z5cn*9T1g>`_%IPVIR&YI zIIjjPJE}&$H^j9ebh>Y~{Df)tD3Hz^*>^gZrDb3BU}QI9bZG86LaW?Z$C!IUlz2A% ze%7OD(SOPbW=MOPO?tbbKg@ByNqaLt%Zh2;X~Oi_f1197?wo)6CJLw`)o&JbQ_LzL z2hiCu-0qkiG&4-Ew`BzElKWtHvU&0T&SR-q{ba(&LdDr2V-hyiw8JgGzwuV$jU-0^ zM0@OGWtT1aZ_8U_g3{3BB<-Ro1ett4zXVwevwMdYxC4e((QlO*l{LShB-plq+ix^# znAl@|Frxf7WjH=<`lTdPy4Ix$r*oV550`^+^mcbik%ToOwX=jvfelWb0UGJ08G?24 z&~EN3>2-8PnX33fgnlU1^Dk$5X z?u+vYO^7aZrqG2KC2xnJSSc6u(Q787AaasUST z*9I*Auq~T);H63*Yt=edev<799BJE?(x0O$i@_+{!6Mm|E5_mT+6zcWjAZ`BRukkBn4z1rNa=%u*5RkO02So>H7l#4vGZ3`yKNcM*;{^Tk4uJ zpM%jL7tg;ZJ2*V3Gp#?33Ie#kF#vVMH(Hm?DTuNd1@HYR%x7NkwHzKcmB-^?Eum(o z9)HofT{md0exINB^V6H87dUK$W(53bM&aCi*IL;fTR0de<1sY6w!ycq1wMtPJ_h2& z(01U-e_ z8=may^H?&EK2Q`m249|f#;532tCtsxZZXrHqIXkmvA<4V=M#3g9{pvl}Y9_YhW#cAK=Siy_?1Z9~}mDQ;XhrZI&@y%CzCx)~3^&ffK zz6W*3haV6{A^MMFkTjV=oDU?~dzTOSe-je%9pNzm$7%?i##$s+qf7mBqONeiJS9CX zpdQHNy+Am$x3V1R`)?)N!V6(uc+1Qhk5&zi&fjn&vF+n9&{B z11Ph~C5Eo|$IIKc``F6Z6%8bU!F5J%gTpIo|iZ396rchhP5Mhfi0^irD?oSMrE ztNuecnXlMEbC)P%>`2Z>3q_V;jMg?`rN&8+gDy#!;G58m$Xw!vD$FhVe~#zd z-QcLGZA@iX4-{jTu6pWzJKtyaE@eq<@>moD2vA~SO<2k>n&q!F3RMM7Zu4jiL~bOf za0)YDMHvEa7d9&Z$W3!mMTmQimrfo+MOl8>!d<`sEMx%-4s*b(vqKgSL^F0Z7%SoPEcB;Ex{ktGPW16khXB@%?b>_xz&CS>MSA3NR}&Jf%K3Kvyha zs_%~l!Gc!-w$t)&|2X-gxte#Q)emm%u&U|c6L5P%C?R@?q8hz>eL*q@rqO*rM@fkj zk9qbMD)f#RvDQ$H31XbuTKprtbP~MOpbQTh_Mu==ia$|PO1bH7BOr7R3f)mq*vMwB z_8!4*G*}@OCC*BwtRhw~w=~#60Mm79_WNp~Hh}~w)l~2VXeGB_T!LNSOuGkar_y58twc{O0c&YFXr3#M9i0Xr94I>O473@zsc; zEb56c{)7!kibVGDl=t-+^bU?Lj_UE#WTETZ#8bMo?)fA0=+M-SmS*&50Pfq)Tas+D znY3Aq<1Bnx2Ru)ZP>&wjEa@8ZrK0!oCDO3LBdHR)9QcY5?3|J{0~f1r7Ii$u8xWl+ zRvoY8HYe}b!(}Jjm8@1XrsMd>O)wR;{On-dziuwB>ha0-`=b}$76pj3SDmJ>JeHQC zv9lv0KR-VllxQYtPw+~UkU8XD(V07`VI|`v*!{TogV{@IgKGH z7(CR=HgELPw@Mb(Ei)$~hsyeBQeU3f-0-U(tRL^UGE?-xC z{NnMW zA0AZKTPx5FbLpOJ$GDWzGp7?-=X2DCc`URUqt3x|1%59vz~}7i{BmgJ$=m@s*;+Za z`vU!cpar=9QXN19>@*<$C|CEOl5els$&z&)1i+IsFM+ZDr%0UKeF=;YIGkR9Y?8u+ z0lQ>ffeL1fq!}$$)nZE8DEjt|%N#frYcsjjWxWZc-SoO@ecqtv;Luq_Z853bQ!GH9 zb|CkIB%(wgcXoVz{AA7oDy+?Ei3=!1CL}LjRS-Np^Bo0Y*b<~w4KKdYJU8{9+1$)@ zLT9hjA=-A~advU|3f8U%V9B-C@COO#U!V*64zMV}l3B0tC4*Rv|3=bat3zJUpoD5Z z$T=Q}LhrqR@G~|N)PQ7{$(^$iV?Iqta>-JvaL77;4>{y09_tXa?;l)(3xJ9+2~DO6 zzK)6}G}kOuT5%Q`l)%>~4`N`hXK{qz*w<9g%mEh-#78eUqfpBE$ubv`*%#iwv{^_i z#~Yfcl1yBb8KEIJ)Z%Zz`WX%^^%k+l;JM4xF45BOELEAh^sdcbpf%&5Czf7cE0a9i z8aj#gk|%CZV3rA)A`VuQqY zK%#*u2zP2ojCpWiK?^YrlfZp?$hQTfri;((=7k)yJSP&%l%edL&m@%;x(Dw3oot^*7R=#4A6R}q#V*?x}? z@qf?nUTS94X7O9#7*H%_XCE3htUH-DZ>_Th)4^n))!WThwi&PC*yOt>U^Z|vVyk<1 z>ZxRgXW&(k|9a(uUYem{gyYzCaNFzXd!b>1CB`2XSJDMSb(8qC}{1cPsIH*kw%bVsvIG^5p*`RK$^l>z}-TliaI{HePsU)44-S5YIUyg&@pdyq?#AX_n z!`E{co73^vqGauWmRbuSyW+vncOpyxyzRK-tpWST!|D7Zxo74fn@|7(-q-sNn@?wZ zt+hi^Q7^VB5NHe_Uf(_1N{gnr{`P8@np7ypIJ4>vGPGZVUG3H%5-hN=qnwb>1V-#0q2N#ekZI^U66a@}=yB!v&8L4;VR;K|h(#)#Z zRK6+pFqf85iuG5fyKs;~x3^^qt=}wL@;X&n`j!Xp(2ed=P0mq&TTz+?N~j=du9Q|; zkVrgQTUghYeJ*Vs-{q#>Sfu$hgGv%Oyp;gZ%i&mSD=l?nn|P? z=T->(!7XP}r`v^Zj&jFZg6#tu$X6+os20X7EHR>mgoTg|WHFD2An0%wy_=sIj!g2X zJ9@n}-omYJWbT1-ywz7E;sUtK^wPooC?$}$A-~y6h7bEgiC(S6`j`4Av6;Flff&uN zjhU@=tRcwPt60{a$FYW)f{3*<0p3g~n;L zV+MxC2E1@uZy=sYK-=Ibx9$ih)=e2+P;kGuS1=o2m-$h-k1lNnUh4rD2fci3iAPd@_~^}WN2`qFq!39t+dG=p3*|+NLHkv*q*s@ODq=@7Aol( z{$xk--zv>Kf4pb)aenSXGY|M;!}a}jr>C_pd(pXGGnx_BQ{`Yv9GoWihWb7^Y=c(O zo5TG@_S-VtIiHF&0$vCc8QP!o3gR`3@=C!d1ysCwK&F3a6#%gI4$3W?R!&km_@W;X zcx4?*J*-}rH#|1XD-!eUgb`tZDeaSJ)RN-+MM=?v_3o8(wNL$_B;sG%JZ1Fo$tYTh zwYi(XwtqkQScdH~-kw?7mT#tlib}B^dgR$21Dp^K<*+CNSX6w;6vYQ-v=qT)a6|y^ zAqYibq{?swqXA$og;%Jim64XRL7N6i63MN8PtYIV#WQ}~18klZ~ z%B#8o96%u&_x1s+^>U6oH4ZNiS{0V(6aPy@gwrh^k{@TXRa`FdXsFD=ZWsxTTO zgpmP?QJFYx{IxL`n5R`OxgXE01rd@n{GIYgGaKeZR< ze#D<8r+O}4&dJMZ%==gPuiMXVxQ6O8UWagb7W+t{d$3b%F+D^vM!`<{h*v5$oX2Dy zN5F!4WGV{O{Y*$4Fo%#u3nWJ^8MAZ;h?q*!u#iKZXj>N7L}3+$xD_6fwAv zW+_+^1%^Vq#3id3-5&T`+O31z$y1WsUeHfu{dKdPN8cv75EHZ@VjWs`mO>gcy%Sq29y{nVXH#H1u4~A$V7@+t=ErcL8 zD4tx`GWVTq3xU1Rm(6p z#(^dlrHD`CLJizzo)Xn|5>4RnOsZn*Q<0LCJ5Fy>%|i2N#JVRr{L=b{@NF4SI)v1= zI_uQWOm!^!ag2_|gp3&U14^8VYI%}>INwU`r zxJt8hSJ5Rzf{`;q5LI#*Mudgg&kPN$jRz^MB$Df^SLXoK_dB7*5-W6_WcmJ4nLQ$M zJIEC3%dS|!@Kvha3WOJ2jlav}T$dC^kVg|c??a-&?!MQewzrR;0A!RqL?e#XcW*{9 z;}1i=-KdRxtd7yqYq5xdvjG}Diat0yWXTchF7%3kszs+{#~mZDl!Cf?7stFVOCFiI z=ujn`epO1J^a<%jL8Sz!Zr99pjeFdHBX(109qc~)&o9vvEj8?$t}UON$;eBPo5>D4 z_Y%VDsn7zp->^YtfclQJ2_r*Pi0&Zu(LX=>kbHIgcs;)3N6%Dd+9x|lx~#{3_1LJKTGmrf3u=wo zu|v$ZrY2oc{haSX05PS;v zu&-0T7`ut;p=LA02^Llmwmu5Wuw^A3*d-{b;R*Rj;_t+O~X7IHq3C_<4m6Tsk6;6{tCA#5PS9y^f#)>pFvyQQjT zN;cXps4?C2Dy-`N&~?twfyGUik8RtwJ+U#d?POvn6WrLg?aais?M!Uj6Km&vcc0zb zt=hlf-XHo~)u+49`J4}@#GW*B1-J$;aZarw>hN2xEPA>M5N;r@9HHoGdbtUxJa^XW zBxEMZk{T7v%eq*LGByVAD5w%>8jAgd(;zvfYtyDW6oa%9(DJQ4^Ez005SFs!&2<1s zj~tQ6xT*mbC@wAhmpB0)B2x&0ggN%{diIkBDV@iVo|FV$L!9LevxLOVrEcgh< z#AK`LRoEimZt0m`-$!Unep$Esl7ZMeH60VlHYL<0ls+271E?hK~9I*C4 zu$PJaBg{Whosgt2R;J&pR<>>bHd(?-MgtWKofG~#*Xz>JEoSN|z_K`qO~Zbo2%Z+| zhn>D`;fMTQe*RdPdpzQl_4?=XiD21*ByQY&kTCKKk@M`C$+KB&E!ZmQI@rpv3fh?f z>lUr>_ds(;VB=Ud$!~X)vTLbobl@fVC*e$l{*i~)#`SRSzFQYhAmVqubSLbS(9kQ; z&X2gc!z4&wVqtVfcrAy+-E1Ft^~c!q@n0)l1DJfw93mEVBEG0oYz1lIXUeZ@;G_d( z!DZR1gS;V=m48KcW)|u9ax2NyJm;A?l6`fi7L+L9=DKnd{adx(iXl?=#{fgz2_Zd* zycwpMt=yh%sV@zIDRdSg#$Wk3m95f?brt*KgXa-ndw(biMkI@}Jbi{PBSeB?zx-#7 zcHVNY+rv=`K_Ay@&smR#kvzd$hWjB!5`=d>pb1~;E`C(}`yP5_>?hGG!eu0XD>DG8qodEfhn-unOcT^-; zY@FPPNzR|x{jKBZcmdije=*wgPsvmhej(VcJkwZquqC)RkNu&egEgO|allJy^G=n} z=8YH?$;?X*p@{zR7>i~E>DRKX%FL~A9*`0OcF<5 z&K(;8{s9$f?{gm0-Khu8r7?`anAf=40<90*95(f@py|BXoMqJqHq&nN%I;-Lc$ z>pXbA*EO@x#`QrNgBY|bCTC_uSXxH@tG=rYwGMqFQ3Q78V@>AVtA;(v2T=zr^;QjA zSe%hu3DSN7WHY;m`z1x&hSU`;e;T|JEs?oD3EOX7sa#Ub_QSG(Zy%Rj?YBpeW^nTY z3&`Bse)n(tVF}}g+rxbK@@KYwUwnWf5frloYZoz6kI#$qQ^>|)!z~K=0rJ>*q+c8q554TS*A4H)EOYm?()wXv8FDnT7~mO-r7vWv9yKnUEB^S;9& zgA_E1cD<{rF5tdplq#LjP8uar-52^fh*ol+m$4nKs|jgrUwqVYtW+Jl9T?NQYp#{W zCR3e|WVfZ7Bc`UPU;`hUEhRu*AJvk$VsNe+WHd_ent$o&zD;>oB5ZBL<17=b;H&{UVXL0@;pP-C zJa}A0&8&3x)$+DpI*<|Cg{CFP&Z+Vq7fAg5$xI|NO?>h7{5)gg)mumumvHi$cK+D- z`^Z6h@0QQwfyW$UST!@Iw0W?8(`7>}$}F0Bq0FytP!9JU|E@}{1XwQ@dgH={Zp?C- zsLYdCZ^kFT*J@C)i_-yzI#~>cCyCW9pGK|f!=aPZ3;cT&`T517iH@MGsvJ<2`|-|b zQ8)}I`m8&jg0z1T=#GfWPQNF9kF~$d6`oiqep6J-oV|giV+9))ey_Ex4&FUMt3@X{^=oGAoY z)t{YB1jwXWRa%XN5?UhjRkM)6S8TdM#iny>Luf4FBz#H1rJoEQ3Y9 zlvv@_kWcE3|M4xtlsah>`M02Y={bVzpQ^H|WIUC~jVD>!PR$IWq+F3^ck_mLkj28F{W=sb34Q9D>dwVg{?77Hkz)Xeqc|r#k~%v)V109 z#OeV%36ek{Yd<(1su`3u=`iYXZ-xo#X=VXnNLPCu!ocZt8K6f4)1irCPY=Vdp%h#Q z!vZ}VBpfDs?r#*!k%lHi=Hmnld1)7ipGY&n5AAl(%yLOu_&Xx=py4~>qU2k}aSr?b z=KMyiSP|{)e3g@)TSL{+qfKo4GJ%~q|J{f>n6dv#o5J)@EipsV}BD_Na7f6(O zena&aV>1D&r=myU51mCB+DN;W8}dkFI%cV-fp;tJ64e{++{)!e$Dea`sW-R5jq~s( zw?Tq)m=T6z|Ad1TD_G+`@o;c8Jo&EXxlNY_|t(I+z4buw7O zs9=CJKy+aj1~J&NAEQrg$as_!WI)GIoZ|kV=k-N@VB>CEot2L>Atm4nqmIpEae()y z8A=vEQOOYhcA)fGTGBoHqy&KDwi?P7 zT$W&*`OtNgOVhadl4e4*sQUieLMr8 z+`8I#7iO`w*w~MdVUF`nehl-b2NAnau1aW(%@}U7fVy{H=`F3)Jq|QvwpwypH)Qfy zGzB|LkqwCW#~&0DG*|`WU?xxno>Ze_Y%8gL<35mgn;IZ0_Pa~{wszh;=VzK;Rt*_+ z=+=s{X;3PxTb#(Af1Xsn6W4Z1yuBCX6KbCgKq`(uZn5*s-vd;^a+bLD5iK zK}dhmRfMz6u%zfxo$u^t3KL4?n+}>qusPKpp9;z_+z@KM7M&X|=Yvp=l@kG=eBzYY zrdy$v(eblvns?}Ai+^Zsi}q-ZUm^qv(o&LwG|eJ&fb}pObOiL6Pi^k03R%?zY57*x zRMRfI2=VDV(~`S0>+<*Nbf|z*6;-gr=h6j~d{=46d=MJ+Ps(gPU-8}Uj#hUJLv4gB zU(;Wg_@>pqrf?W>qJgv}0`X2jKJRS!TjvFJJcTb`q=OU!mhV85=5wW}EgQ_%lYY^#MtTvYKdrdGE5oq(x3#T{;U2UA-up zpQm&g`rh?6snw-yDCFuD!>%y!x%S4=DAd)Dsz#{*cHYcWSGTmaGgor}+!KA%G09K2 z_IKHlN5R1MgTb%OyuVlSqmG83lyOffPoqjRS~Hf5+(gwdcSMf+8r8#g22usp*Ly4Q zF4USn5hi>}55?LKQM}PvO?LBEoJ($@i(Q24Bi+d~H3RF0kKflYFZ^b3?6338vIgjj z?#|i;LOFixroDWp_AW;QzOUfdmPHXvnG4zx%m3OY(6Tga3HT7nb<~XcHhuZP{0L%q z{lE{qc_b;|?b9q+j()>AeDL^ed(4YHV%e58Ph{v~llo0?{e1F!Z_9N%i+6srZsTPD z*AxHxeuJB2j=uxDNsE*vKX^L>-+DvbQlxnXW{te@+YgJlS}%+9VE1+Bu{EOYj>9eVOos`5 zy0Rc29>U_wTrcnVyczuS75n!_=vEKnl5a}uT|U$xzCDyz!3J}8nepgG_BHD~1&4J# zg>yv4=iLKb!*h! zwoDvG{H5@6o7Tq;;q>2qEu9Pxu#<3yZXz;@+8nO|KwtUTjZv|rZ5Ik<>U5O zoIyQz4Xlgc_3v0x zg^(VTzU^8`+j!}knuzr;@9U;E`XOJ=z2zj>PMFYmUxA6J2F1%5_}0(edhbe7Ff+QM z4JG~StZJ?)`NP#;n=8>Jw8vBS;u&xmeHhhE1Y)P78Cid{YS ze&ym;ZQORWv$u$sb!x_ew;BD{iZAfgRtx58y6yI2f!Umu)jX&F4x1}o&7u+>1rvQk zbbaq}fU@xm;^X!J`?aMGy_!u2|({S+O}jKn~=Uxnlki5x522d2Dfq5y3#Wm}MHf zeRp={ZlWBo>IQ%S$i;u4q{(x4~f=G?O3+V)kU8Y8D@t zK%AOk2H&$i_C#|`ch>Fi%BOv;r}urY#oL!LM{2@c{?oozbQ=-3K#GA#&?quUjX-fO z4Z5T71}teuT@O|Y^i61>BDTI9Tikt349u*0q_pnS-$KUC5P8?H?ryw=+kc9|}%H8?1UW-hLHXEwu%Xzi)&ydW}FQb=}BNg*_4YkQego9?XT(haMg&?*C2sU>6Qy-(C9uP#n> zK5@4@KG)Jj<6)c_o;eg7N=btheWWo(S}dX|>XAaLVVi?bC9FltI$5{wK(2>^Pn5yC zpu@NQ2OILgew|xNCu8Sd@)P4ue19n%zrp%@WD_a>M&K!h+0vN>LGwIkXBqZHSguNn z;NIKak9l^y9S+wX))EbtLCZ!#3&19%4d|OCOD_~@>UEJ0dTYz$;J_e?dCw8ZMmj?# zZW|1X(!-meP-vw{4dEFU0FsS9Yhi4xrEOi`=bty~hH{-06$_~IzMx{f1G?o{0$P46 zqCADg5G+f;QN!(?RJGn0a>zV^gj&$RvlOM6jSHkOe0~Fs0*Un@7Y98~3}* zB+}i%*>7f@F|c@`x8^NP<#0G0&26{K$N{{-@n>eFt-^(wvRQ{2FuZ9v+O0u5dOfgr z_gE_Z(4xTXL2aTNNI$>->?82C>9(Y-e|~W&yAS?{?q7A0>d%0+e0&K?+r?u)@Q%8& ze6OiK7Y_6}zPtn(#4TSkcS62qh&rAOjLs9;OF2aR7$s~G_~>F;r+|Zki8~A+4vX{kC4L97C>Rwf7RLNp zclR_;b-@)S-eC-(Sy~O|#&|~`&p~oOu>I9O7As&8fp72@GFLw+Atp=EDiEQ>6&Wv= zhl1{`;Dj@uUYTy>8jN<_Y0aKL>h`yrF5_(gLhx*sqeA!@=%wN8Yn`ol;Qda*>1UkC z>2pVQFp)SEmck%HWDVB!DM1$-Vq`N9R>S;E z89=W~7<2HDSwidc+iUtq!%9`5af7%0>0H`C@xBn<&~5=~$Ym%_@X zCKXvXqLLm3D5aRTJ+u4g7M9NG@#5+p3?TO-+D09p^~_o+aBf_L`)W1l=^G<3WYJ=9 z#Ax~iB(Y=|_9%WL_1(O~?_(!5wx}QBw6~ZqsR|QWW^~DpqEnik#NnVso|=HHe^`i( zOG~pZVo)Y1zzj1WKw>H90 za&<}iX|TvaTbogN#Dn->Z`)JpOPkkGJ1yspaP!0bJ^uU6I}3H?>tfQzU3WEQEixA zvr++9p8oi*rtAbOQiQD3EIOGDY$QUh4k{{-jb#WEN_Eqo=H*;t75lC8qnXi3&d$+L zK4=4n5C+G{I`9V{YYF5MRs(LE)l2W6(n%E{J(!DrzdFY^bK8Zt*&XuTq2;Rjdz524bRKXJNM$$fE?zFj098j6(ovhQ^AZ-%%RE@uCS2rDo_b%zngZ01yNqRn0(0fz9bUpfVFDWep?xkT>(U7$*my$-e+p z_fD>-(ThI~oCesr^7}h=-yp6#KM13qSm-e48c7TJF}M(|c}rvRK<<#+8t6T-wle-{ zeD#C*+M%pSI{`5s!(pyU^PE+Q3=cqz4L3{2{b7Q4uBB_;N*Z`NOJGbZkr~%%!>7kO zl)Yzcnj#nCo1=I|?;Mh+x&H&OKW1xSHmlK1D5)qj-@;9d+0L8ZV@;_7sn&x``f8lD zv&D3ETlH%UQ2kbDTP&U|$uNTIgJ6Q+w)*@YWEezyI@ukNJkF7Zb5@o;L9gM{=W&%)FCMwe$<~> z&W^e8=P!S%EC13{R-SryLO}St#Cq?G9};CCWEJIa?w8^TtGoMaq0d&554pzs!rZwp zJaHkx;LPKRAGwH`SH=nOI|19HJVP5SA{2YZ7kooEssEp=%}j0mRGB714LF zXUMhpr;llf7%UZMG+HILXtqL17jI!DIkHGGP=aovSRFk=XyOK%k0wXR0xINQhA}Kb zYtJzjXaDkVy0j)nL0GIH%vz{qa=XlhCdnvbXoU4EwOaI@_hOv@Gj6m>25M0GXX>mI z`0%zKHTT<*U`CY!)Tdh$E9c35OT+sX{99}Qp)m7(3I`4`7h)(%jFzYpLvk$S9BP6x znrt;D`1!jw#2IahOM`%VO&8x*>5G|8Tw|L|3h02qV#oPOYK4$seCsBNBpKuT9`M6Hn*rW}wdyXD*HDPAmE7g^8*I&8kD~X#jun*OYdH zj)C_2AG23u8&j-+T0h5i*VkH9{T?-MXkno&Z|!iEj%$XIkO|OSt@0$oUe8_n3=Tmn zs!L;=zdUvBixfme4$Ip&k!@Z2^%mRl%z+KZ{4zqF{FAQ$+Vc>Q{&xW1`B#Fy`>%AH zuru{<1kEbda+&?ksJOC}CLv^@JmA)i^WvE}C^F*yb6l+2N$Pg9BO)91+@F}9+wUMH zBxADGOt?In$K8{I!NCk@1gd0K@{nQX5HeD?4L;c~7?4n3;3{DBarIdS_N_KYdruur zOLVK$ss7JEnw^Xg2jOZnqw9^i(4W&u;AuL=b+c0N#{`02tx_2oeYL;bb!QcG{p4ak zFX!PC>H}nNZlPAui&m#Qenk5M;68L73VBVM?@fALCjeSzu}dumgq(ml@lN#hi!>1M z731B^68H8YF2HKALb|9fg!7@FXo22EoOo`zu3ZA(RG_wb(d=&ZbYiku;xpm*VLjA3*y%BQV%*ULC;5~KeBYOvbsX6W8lAfA-1eKw zE4rUx=zb!}b~vC9Goqz)TJWhokUWBhsQQDU@Ix7%_B-=rDneI4v}(Jn1T1nUImcBn zX;nHf6fuWp9E=|9I*Ph0&-%zv0;Tv@W#j3MsY}2)?r(*z!yhEqMf!uycJ~}Vp^)`X zvmoHwu;aIV<*6$1)Z5VCKQ*QHTuSr|<+&La&ghMCZ}S&}N6dCbe($l9D5LH9`|st1 za_QrQzkZsK$U<#zBmLWt9*5xKaWKoH<4K4D67rPEBWxJSMg>ZvxYz{W6zh(NNY++9 zK7<=RYAr)<TOC9Wft2DrheB_GuUCumRnQw6i zs@JApaMu_6>}6tcPO-sxQ`RFqG28LwpVsSJ+k5GrUkrQRAFq3J+OBr^eh29)w@Gz; zXdHfIzvc}Vmw)bgQZa9M)Y{u++0@h(30 zVMl%i%tqyO{KVK>&<{~ebL&c(1e+Gk@#tTg2o7C|&r4M?^U+cGn&SuMf}*CAzoIom zoaoZ|eH3U0=y6TitcG!nIMrZ}pp3BQ#3>+bf|QC`dC=a=_ZcM1en(gQo7$EGKS#7R zVDhN0>}$K%#p)j6np)fJ=pOJ*YU)xoS18P$WyK{moPEq@35Z1_jiQ59`q^w-i&gf5 zTL(1di%s2r)$+2-5y56mq;TCh_Ml8e_08mt{@ga82Gp9DOYY3UYc12=4?`o6(=< zugc2V_Or4N4-T57I+96{ne@s9Fkne#{SN*rdm#mJPB^m`J-D`q;t~f3nn{YJ3i_w< zG>AT;ubOdl9Lo8`LN<43Q~g(KM(E>napEPRVI;)qwHvHvf8lcJ=@w!fX;EXrR1I6mY8goeQj97I!vPh4uMAQ(T=`pD7qM-(b9}O z%ZhWFP$IBjJ?uDVd;N^z>%e{I+**vgkUAz7alSLFj*RGV5EZFdRjUk48UvU#9OGW- z{3wozZ84d5ql`56acEty(c2Q!YXbkFy29C=fK}<(2hqSawCNcjcm1`cMH zF!Tj5uv1q0YX!6tV?X7OgMigp+8~@ZRtI^hs3<}+2Q04%mN8y}G~p!`$E5~z3=(g7 zrHI2npTsERC^DiE5q9$qBRrM>r@M#!a(w~a01G&+lXiX87cb>lm{@J8Vn}4|wSIMPz)OaIu zh`ZCRBbJBd>I8U0%iln7%5R)qv%{K&M8mc`9CVB)Ho6BuniF*`f{s!#RXJo(WYQ(q zbkfWu=jkFO2GJ;!Oo#fG9PK^rNHFvYUglYAn{==Top7QaFdqz*9bg|4!NuoZWXaNz zGhvXF%`zw$NClL2Oz=Ydt5~@UmT364W~e*9;dtjdq_~#}Kdi0XvL5S#9_r_FpYLD~ zew!oo=Zpr@wg_cb(Z2b`+bkP7WZNJ;=dD5&lzUf9PCvbQ6(_>#PE4W6KWBd{5r^DDbUTKrD0b#P z-i@L0rGhn%tBmCOwOeGJH}yeh)ybt9bpbANb&SeIW+kZwF?seNPu&Zy)^n{vn4f;I_e~p9y~$ z*B${(Zdvg9ZkONX9OiF8ZgE9Gk=c))YUM3l*JD{0^;{~ZBqp-#ndA?+a- z5ibsniYe!r9S$68R3~1PQT6!S@riZXB34RH1I_Fj4KH)SvA{=WFopGw^z zr5Wd>vy8e1dx3+c4{Z;$#suFrxEL+-b4r~?p8gIE8=yr z_|VmOdOPI`$$Rp!BPLv=%_`-=L{iToLN5I>EsqyUM$)$1^Eq|DA#;Rttn0Z77?T@9P zpKRXk-%@;72B0pV`jShwI*hu>gMPex+T;x9m5=W%oYs&o*8l!88ckOK{vnl79^{V| z@JKl*obwv)Wm!poKlmrY!t=4@fq6JI`^hmXgj8+T*TlfrVy8YU5n_J|z$W$h5SL9G zbY$($UfQTzA*&gm&x-Cll$3v#sr>@0KrEsmYWB=w)AG7jdM<>i9J;&e&Fz6b_R%gL z6F)05dJTeA74$7Z7t4bpLd*d;Zqi|4v%RihnwTsT3#nJ{Nx;hVl5H=z8RXA7Yj`4l zE{)w>1Uak^v5Yp6H}aKedA}^$gx73i=qef(49u1(a}Q9(v}X`#8_7})vzJU$StKQj z;8g`FpH2}m#96cI+AX!%Yp*!+Lz?zHAFNyaOKpIp>FLkEhN_H{|MQOxu)fS!jopH* zMF9dPLK64Wd-K{~V(2feP-uiD17AhZc6v5r3kghM_40;y?(bP0s4ND?y2AJHO~*EmXa8x6yJEu)3Yn>q zs5`QcWzxQ7$Pvd``^f{?R#vG6SKkI`)>j-7-`X4rygbr2>QjAtLel<0+BC5ofmV}9 zQTaSjv*!jJ$UF|o0{Q67KoQbTaQoy4t1M|63C|3StEsIDuXq{j>xFAbGR2;!X5~@E zszb3g0oh{b!i)PH!#*$pHiNXfTdk(^ABr4g8E6}WU=KZN z)3~xWZF zyQrk#{o$C5uUBp;1N&SqA0fCCEqx+eOad!3*L7AGGYDYewY#*=L7$5XQH10>xo>T` z)ljqd+~o6`%w6;Mb*j_r4YVsvq4ul6%je~0zd0fMEzInI{zUg-QnRG=cfV-Hz5p9u zMuIjRshM&Io%b`bcZY}Aw|YI=>L}$la$c{m)op5eA$m(an4r?b-^)>0-{cDJQ^(!>x)+-RN@EIali=<^&N)MNPtuIVS!)(_jNp;&o2zFk#D-??{( zH^uqtoieD0v@OY+X#*Y*XB?ajx1A8dR6H}vOE{}?|0r040q$_D0;>#AIk%QM?Ss#}r( z;OcxD#m6Iv>+Hf|ur&L4x?9rmY3fJV7G+J8XrDo3KkyAbu%?G`YN7@30@-X_dtWzs zYVin4WX^0LXm4HpKqMV|x;8!Fu|okgodG3BXCJGd2C?W-1}QoRZI;kVu~#-p_OHu% z>uIVyfYzjN`_}Z2RhmC)shXi4p=r~KmAwtDKAk|md>6rqJ<{bT*E#Dg393Rzqa`HzqN;xH~e7H7(P%D?sC1 zyMoAn4XxyM_VxYG9KAx0EljWZS_)P;>VLHn_#E%Qf?$%BH&TeQt{i<<^;1EHw3Nh7lH{!l^@KOU;BMEddRNR zbI#kvb<3rf&pZp$^$a(iVN`{kgn*rA&*tvyZ${ex50c4JNYaJprqV?x>-#WcL^ip8lz4iOu5vqZrelA7HOAN^-a}v z&xj!7pxxpmM#wo}%B!-}*nrjcmlDvAJd)!bEclZPx{H3ie&ko3ASR|ecN66*9fP2= zeyO|R*~hiL$6$%I$X$d_g9Dhy7}U_UlncaF6_1k1iwh-A6yC(w>9l{|PGydtH4k_! z{J*)xd0r0wwrlLfWGl4O8h;3SQr+DAGQe3{-^6L-HvIb-8aBX^AqLE=Xab&^uZ5r6 z5Gpxb?`VtAfo^v>PpZ4VtLs-dr~}s{ok%&pyDd^>LsK{Srk6)K1zNF&HPb_Q#`ev2 z3h(JRD2)pShn}!adhSq$ynYQH_HMC;6|iQBwnGB3@kc$?AS`a+ZPXr+wzRr_e{@`a z*2+1imo^d`@G$!y!T=+dmXZit^VjmBtk2Spj9kl{m8g9y|FUa1SxavEifDZpFEEpp z8!?G~{8=*Hk0|R(rw{J1zLhO<+D!`ep#>Gn#~ZolEH7JdP#=$H1)(^!x#QvCG?J9? z!XndyB+CuY6$zhVj0mT0oU%Q&=xWT36{2C0>Q+x>}MxMOU7J z-2onVg%p$5g^m*O0cCKm*Pju8r7qXWHaTMCyMa|^G1{cQ5BGDf6_IHqhr&*WnAU#u zp6wU|5&LS0mrExd=2ZZ!6^3tGRNFMSR} zNdY}u`n(&zK?2K(B0hz&QTj`w!T5ftFHUm^hncf1U@_^R-N27h&Lu4#EvlZ{#FWeHPS(~X9FrD5It}{HFcCS zd(VSqUt*Rr%ZfI#SUM^u5yLRLO9JgYfN1BGbGys{?>fA@hge3C$Q~vDjemw`QUes! zha!N#4_>YJ%vF?F5@6@MT8d>~;2jI-&RPeV$FHGj<5Z@E64%KSvpV(I5MKTHJ&b$khMM>g?7_gg`I(uBBVE30iUYp2KLLxD zQEP@<(+ZkSx!Oiam|P}SUjdlsmz2G~s(P5hmw&Jwtbbh0DS+zWxTXI>hQzDB%NO%m zvn3wkfA7HUNLR+r(GbC5GOdk-kc@~9eLG1irPFzPFO3`SA|!4$R<{pdm--$GTrzh$ zMX|tpbogd!_`0{wg2))P(E>EOKj2fManq8Zeek1YW3@C0HuNEokUr&Lf*5lM3$%L; z1!#VF?Qx;~PSjvcHqys7jymANo?aPUUywvwYK^g_2rzXBX^-#SmrIpYDYs4R#R&wl zq$!Aqr1C~$r!Pe2=xP13pa|i7bcfXs&PY#k;m}Eekp>s5hnLqi4F_Z(8(im_I-=<& z@@;Z#Ib>C;aN@yf9;!4?b-z^v|c^5)Vf+>4*1RyN58gXl7%>rptBq%_R zyp9_;+uR_}v8Q#w4)cS?#pw?1GTHk6coWoKr_ zTPi5T$f^Z_;P2el-uxXK$wn&BHNyN9BgqdU5{R;L-qgk^ZKLROEmblzX(%+}h0VQg zEUrFas&kfOY*v1-0;Jm6p}k>Vum6yB{*xh1$-0ErliFp;aZ^RNACZ zE$Z&BL#27kUHa}ikoD`jbA zwKa~v`V5+_U~-04^EeThU|XDHWrI8$i{Qz{JD%vtYIQ&0(}oMhe#-dRh>j} zNcsbki;u-K#i&cr+;iSC zUQWLlc0bz+mIL#$00P7p-)%|F4GzO|9`RCj)tmQZ(l#=eZCrR+Qut}(B;Tz}C5T$$ zEajE=+sZf`tv(1n;bRV%8$FLp09p|c1I~219ge=!gJ3jNYw|*uD~FNj4PA)mURspV z_I(vW@hZ(%mlb53{#Za8Y*0^Biwi>MqX~~8V=>M^arBxe3-~;nw0!jM15U>X5tEx#kQ%f3CRO(p@ zbPjacXr_^W5|iWJUpb_2=NTgtzc~@%(H5uvh1k!sO=9&Qz7 z+pB{q9J^fnm$p06jFPEB4REb|!NU)^u(kRpXK5k%l ze;@dlVc~{Oom60rei;+R4~#utdc)E@-{r03I5$ z^*{T6eM3mhx0?tp30U>vF)N^sZiJ@Y>#}3jJn9NB!JNtiBJ(Ja=24_RB?x2Hf@eBf zacSYGX%@)U^eQ=^C(4MzhbbPgB&vqL>@aEu!C# zj<#v&pp5~xI8b?4hJ{%??uetn1NhRT!%g9In6*kj{^J&Qo`U~v!U{#Uj@P4=pFdoS zA-6?sGetX4f^N15y8%GXBVa=cvbyESbrfu#bP|{e4al!(CFZ(7zu@xMHutXsP3_xv zWL*#^CfU@2wrj%#ok59EGk4lzkwa4ughY2m!4!I2k&tz?yQpR`mkpwnoCOG?+^ z=-jqzah2eXpU<*9Bg+TjVlYd|XdNRy5-O zJ)SWX1YYjwRh$CUF zGc1?|xyMS=#$Lv$YPn^>#`s#i^G}od2m7om8n-lgNAZLVsv>G9_u8fS%cqNO*3dG` zSSgquCdA6yLW2R%wJrhL39bFQcAX7;`X);z%Z|vJa8I(Y4nac20Pq7AdN6iKZ zpip^)n6rwl{2|48n=FfUa3Nk#=cjr*@`?`BCL0ks4Y_v~e1GkTp1EZjQ(jw#Q=8t#GPyn0GIwG&<%1iMXw!bW>l8xsIc~ zZ!vcq(cgNc;Qakv1Z0C&1(Mfrb#?T}8YIvVui%_8PEq541Bi=55vEP6OEhd1S!VCk zqGbbjwLm2qfr%`0r+?LirUot^D@WC^(FC9@OGw18*mFv-! zLWeb+rGEDnt8S0*&I^>^$PApkZ^a9}#_3O}wloUz>VFW}W%=bp=6j(NZD0mx;zV$j z$>#dG7K{oM?~8wT1R5kLZ#q>a`eySMB0(fOz71n~&9@8?)c}v4 zc8{Kx#&O8Rt*Mq-OztVm9>0iK4XKq+{Do$F^;= zlXPs`&Kui$V>;UvAQMK=aFw z@-M+x+UNbS&HXT6+;=E}K6KDp>LeNY980jR7vZo9ZuPELO{QSHe}q<~AI>k?zieUU z#oLIEZ`*mbYXCg-CC_|F3KB%O;7LB&cGwPl-T{@qXZhvAs{2iG7H~=P**G+eZ(N;ztj~P7TWTqb>u#WZK+7 zj{WaBvlaG~cDaw8U$~FhVx{DIi4wL?g{TIR8QRxG`+x%hh+zhwsh=mg-Cvhsw>5%a zCP!~lf}J>tk3?p*Yle{Le1?!T=orn0sQspM@zGiWk6b<^nqvOn!;B*J^y||p4xMvQ~!#6PO1U<*p<^w=72o|Yu%{&jpb?&BTs z-6Hhbh5-z1@aD*3uUBu5+cvNwrBAiM^$+kTLb$ypn!9jwzH08Pz9$Xlw%{ow3H=1( z?Q;yOFO_U$$4Me##*wpDo5{)RY9$#OaCGRjd}PobB$c4Eq27V5`44ZemM4|~Sxu75 z?+LCD9N*l9JKH%IQr~rfC%OAn;S~;$4#e9NIDq1=jNI>BY5Q(P6!|m%TT%#F(WVGe zX_S!bxVNs6xVKhsa+hWh=iE7{2r4bH-s`CH?Cafoa;Zn=9LtYzLh>;a>@&p-oO}>Q z>keMt32-?Rnk3@xHFoI}A1!Le$dCzh9A?MY*YpBl^vj%uW45m$?h(g#;r~pg}pF@?(dnYr~wH{oe{E9P4@C_>a8VPXbsG zB&2#$_rFc9KwJALysTc|_QyAtsuaZ4a{xg(BGdJyq${Eqk=L=@Np?&Sfa=3^7VM@2 zO1l}lk=G$j&E9fCu(b|+>`{mWpc|!iXV@U7=d_Mrc|B&AQ~TETPb#{MI;=A|WAueo zmuOa6U}Ihh`=&HYUFY!fZlG-J+{daAPA^}xpxZCoU!~+s)Jes;p74@Z5$snB0pd25 z&LCY(GmB|gjQgJ`1K1V8y=`6^cvlv0gf#|+C4BV=Z|k196ofW9CucCO>dd=3dTohH zuK1YoJqMo9D@#-^SHNOQ3~ce8&nnk`Dt5bsuH#L{@?9+vIGkf^YP1f2IZ1G~(h5q? zdMa?;ow-WZW?tF3=~2dZl6!NEknZT%-%y?F14oVJ3wG})-LAGivHqu!0|M;8h5lQ# zwG7#Tll+&9AM`UTcN6f&@&6kHayo&NgJJ-6o&E{C>PxasohOPZhfsTgmrz&%hWlu~ zfI5{5OZ%B;FYx4s!ri>V7|9`RQlk;CXHNe|{cc>Kh?)cgK%$qYA-Xb*sP8PWNK!2o-cM1_BWw{yA#6 z6eWHE<|tg?ViDhxzIMP6rlDatv{9uZ*3e{x8buoIMM zEh!B7Bk_O|V~5pb8u|XF{J1-R+e%!@lc7L>gS3Mq`wd<=mSqw6=G7QUTyJA$)>8Vc z@n|@t&x9n1559iP$BH7viykggXMiAXPoSHIZtI$~cApjs9t<_67`Enxrx~RSOtOwy{DnnOARghC zT4b^_F%qW<0Z17Jcd`LX#CUNi)?aB=0Tfjp*Y~$CPFYuSAiJEVa!z^>>6R>NHUVv&Y^Tkq7WAMQVRkEP4>ogQpui z6!9%VSJ22K!%~uF3KSRc{c^g0bbk0ey87B}SwEToZ0W$Nm02EsrS{`K@r$!RQ@2`P z$99Ocp%|TA4SjR_J@*$SWGt7p_bJv}wf!B?*!{itWPVAfH~rF&!<|~DD!S`#7qAdQ zUdB;)%FTWb53^3WeRFDTGIs-5W+k}I2ko}ap!j`8vD0y1tO1R>rbEdtxF?GsC#~Mj zl2!@+Rw(O8dG=00j;rS;E2bm(5y)vCdayV0LpK%=lnb|?0^62`hzoL=OR#~0+%4`y z!Th7i#NEH+2dzupcc+cXbizonxjw{eQ%#R(T)R1Q3sQw{G$?QK)e|>??lzlE&CxL_ z-~0b+y{wO=nghbSfs6e2oK9j$$7^wL1AhYpQO$e82aRj>Kmh?Ql0+Gx{>I z=FbLmxBc#U)QJSM`x|>oN+v7fs)rluGe85J2{E!A>!nMF=k0iVZ!4*fm| zxecU4wr;8(>3~Ch`HJoi7&cZc1IKS&44q7EN7VAs$_&N*(_xC7N?dml#YyTEO8ai= z$Yl+2(!%^`dxc_+YnlS0m>n>=^`yNPC$IY@X=b`!Q1(ph3WYlYL1(Lq(D;*8M;s6t%8uz9;pyRUt zM;8N$xP^%B)Ezc4ta-JY{kFakithQH@t`R;Ar@iem3Up6I6tle)IMh>iW zLq8eaKUasZQ;k*ttQtu=jd}9Ebx(eJmZO_%JT<>KuI^^&sP?%V2+-_-=g#Ai-Cw&Zl|sAKOUhO#M9$I0b0m;RrLyV2k}Uwxu)cI4_Y=^0xBC685aILOc2pcQIT zSbc1qrCzB3IQFs?yzJtxznekT3a);Ec`i*3UoJlGp*DSbT{Kr5zP?tqc^)j5Pj1Qy zny?R>I)Us(Q=hPzPA7}k`@$g(Zf6le4d z-odm^__%Lacu!w3hjJD@-QH%zeyaUZS-$j9XY=18dGnZT(KatU$}e9>;qXZQ-hgBi z4KYau;1o~sxa*X<^k6W>Y(bO=i(wQ2L#0VuAM?tzqsF$CVwnj4M59J_nmf2Li!Cqb zN8x62lh(u0Dr+i;@=OEkOd7z(Ijf4-g_a$AVT4fVsr=QX{gVPLr2`9l10|-d__KIG z77Hp)x;e={FO4}(_DKx`AX*kHxWn!0FY3zy0A6}OTLb3)S|I{lJx;+~mu@#mY)P{F z?M1lM*$6zKCx^*6G(K?Mpv93pdvaa*oz2cWa7zfcoER3(RtN!oBm zq3r=YjXYo!92~3+uWQk$>geDSKO3nW(+&f6cSw8s+)4m1Mq(Z%dd|Y7M*j(M*b5Yp zX*$evU5TW8B;y>w~QI|%tmS7Nw2`h4QzFEUo&ET9CHYHx#+r*zZ z511IAx-S1S$aw%gqO0h0;O1()l!GZ4cYKV^je+)DmiDVoE|*8Eogpyi@e*dPDoF)) zed&V9P5$1S@~h~B2s+-cn^}xAuy7yHSEm}FIh1sq04rW78gspLLXj18>z4Zf*y@94%{!^{y=}1I8d%Iw*#NHXzWz89e>Dd>&RJBmb5s481r#y zZ2&2(h!YAyWuxCrL+v=9r_vM07C@L0|Iv~;CVU{Jzs~`)>%H3ACWR4@`RV-d=WcHz zmZG%B))}>(2e38?SRd5@|Axq zar?&gUp+LvP{GqHA=2;!+n*i4f^$V}0a}`_;4PnWKRWMS$bxs65x02eKPAu7V6oDCyCg$+)6@XrYI)Arm#bo^F0c6q5$gs2j4AHpz@ZjRWz#8QB zOFnJ}3TA-_>=1D3PD3pgVlizJivxA1zXHE>QAfHytD(Y84qbPv;7_5A@xuZXbMSKU z>tU(on`&uJ#h`=3Q`5D^%G5)dc0b>mCO0CtG>(-4PJiJJ+YkW?m{lw7e#zR>EnTCh zp7KxiS$b{ZSqa$5^+VSAMXD!saOi$=(M;2$zOSs=E9)I_CBp%uc_^WfX=Y2zp{A9^ z3RV;#S@UN6RqkTx1OppcpZ-pV;8&52P)bjo_+d9uzm6L@Xp*sXz)ce+1cRuH4m5=pR#=r0)A#_0a;T6T9%rQ*eArcF5i$@GW#a4d(K=D1JjcveF;ue^XMPN!XBjLV z>ilpX)hq@DvzP^lsAcSd??RQ!kdD%&tk|i+@5O(|Uf5fGM4mGbnE-#`ebi#SwO2+2 zTd=f<%*(4#`p7fUff z3RLKcO6PY1l@STV6@4QopfSO=ibSdfY4TL720^X?wv*Raa=o=@EwV+h>sX@85k>IC z*MHQoYb?eCBe$$}Lx3o~wD@l!&m(yazQbqetoEd}$k45Y!IbfTcIa^h%aiiXTPC)( z-gL^(x_-I*1|#_O@bYT`y2_FzKx&vAyP$D4Au3#<;vR8{v3-**|6L2I%UTQyfq?D7 zf^A_R(7i!phSQtIjQdOBvhZ%fN+f-Ar{~M(N&FkpjyYuf+?mr$#!ma;u~cMObf_3v z7&JOG~Pk$7tE!?>D!{X3rz^6mQQ)oAdI-n%DY2LMOWx@mIjFx53GR zP49iWDB`xHDTK*e(G@1Crb=z-B6xrK9-?o<*Ia&Jb1p{05m4&mIP2 zDS3_+Q8FTjfDy9=vxA*Z&a?a0x9>sgi_!FAgf`=Sf_9XM_;NGf&(5GA52&e)-YmI1 zJ%?lXw>i&{xz+&tx{dbUV})t00Bzz`~d4Cg#E-33kVNfTjYh3+AZ0@I9AS>Fq0@u`aq8* zorU|;r)gWiW-gz=&(o(C`+^2vJJvWRfL%)?=hh%gQAyK#e3M@JfUS}ajVO*Z9k@7p zYEq6vLH72{k&fjWD0X(H%r#^YfRITJCcL;Oq;`lHBuH(-e`ZN`vUVesX+y(o9)am8 zW%I$t@a3gi!EJGoT!--F{O)S@44-pJQ#dgKG?8-jYyg8?;tyhY;nFn!hTiBIE5F96 za}i!@BV-Y;LlImKoJ=E29{277oJ8{9n>AlI{TR}vfP(|Q&y74p za*hwaGhhKdOA}p&#)KSToj^u5%&}tXKuL1uU-?ko+>I#njGugUn?0HPvZ*Qd(=<95 zWN2=TjIoR)6isMQcAzdk&h>*X|5Si`17I&VZ+F-*ug#;~i8Va|uxh#Y4b`a8QT;-~ z*Tp{obpsse&>Gs`=)mS?JBkm6D^yaNTfqquu(}NCkrvIM@01*MpL{t>4YSouZ_*qWln_1MK^jBYM8ANFukMqZ;#`VBAfhRvQg z+BCHutauPS|M&)RoRkptd6ee*-d4A_zSdX~owM269CajkvcX_aR5eT~hpd8krnbWY zlRydcyFLQ$2S>)E^y9K7168?zG{85aW0SI}vD!}Z{VQ~V#8`@#Ap{(VLYq9cHTwZr017S@KM)^C z&bydFsFlOob1YrAyJFZV{IGk~#E7in!MJ+#K!)5HHpY-GZ=v$777BPA02L zTZqS)&Sjcd=#?*sAHsB}I7+bmyO*_=Mhd5_d{tlo zLV|mkPlhdOXTjlYP|sN42~a(SN@~+hYIDyPG+8vH6Ji-SxQ=3;SqddHP85Pbp`Lkk z9%w-@>ssizJ2(^I<+qv1*ynmZicblXBuUv#4FW@rI6#Lp27v-maOm>W7?Cl5GV|cs z#G#ww*qjh{T$*-vprj8q(ZLN-PB)N)LY4s~=lKy6*T_SF>!p!h4Or^E;!^~t7@V0V z5fM*pfnqX5MMhyKqs=bH!*}ocv9;Ce4cZgX*@9!kSZ0!U%?Owb0^bV^C(Ezrl1z8k zqRa_2=Lmj$x511cx7Fq>c%^&tvYSY`s}x9lgPO~G#tEQN?MQy6e(T=+R%DilRrER|B>spnCC6ND< z-MY%bQ#&&80g>mhU)(%ERy6R>W*jt%$9@6J6x!#9oGxqN%jdLh=KdH zh4L}@i%@~tEcJ&5g<@IMgcEHLR1?YB8)Ed;j-BSGf2Vl}UmzPLo$*qDYyx#PamhB+ zaUe&s9dc7+fr8j)am-h1Ft)_b{i(gX$_T^wtp|{s2{4To8h3phKoYFoH>{GPdfi#0wC1N}-oCTf?R%B2Lv;PQ&Eexw0YJXzA>WQRwm-LUcI;3l``IDm4wO;rAeY< zgGj)lj0ZntNsm(*Z{k*L?cR->FhVF1)ynaQY(iZVP+NGtiezf6wQfI+^3|lhu5f~L zJA5Wl*W*gfZ0#B}4#-hM_gPlgp@|H^aR5})lAItvHBvoBxC=Df(vCa{@5BX0e|{f$ zn7AmddF{r-K@Sq-$sv<~Cxn8vEL6grynW8Ux4gb15&bi1OC0UG^MM~G9~N28Ft&l# zK=(E;qclhWftO;&M__L0jnH-F&;I2twO1P5p@*u)K_7)~>1Ha>Pvf+V^#_~k1{y#$ z18WzqwDW^gA@6}3$c0OSqHbB$4!5|Nz%dG@Gd<$iPWgqYzilg(3_y$_6dN@7{|d7u*Q#XqtRICHVVNe%sI_H`UP? zjF|wD8G=~scXWhsATcgkQBT1c83zC&JmiY+aY?$36QzkSL0?pDkPHtaH|e-gy-1s) z{_Rf?mc67NU%#ksB(5g;zWx?zY>+A<*b}TP(dxA1=Q}YW!3ty8v|J`9XOQxSWt!>Z z7rd)J@SZogy{2XdfGsYwJyfZ$>3)8wT0Q!&afUCHG)5lxB< zLEjV&GNUSsF12H*%Ni;^#%-U;Tca@Gm*B? z$CGLmyPzTutI$bX{|_I1O{dHu48j(DpHbfL$s)$ac{1hW?{$6Y}&{ zF(CI1Aba8LG$TnO-{gSKZ4ChL9aH^@9rH5$X91*S-C8M0kF7~AE{xH#mCp9+>h$U* zzHbTEh0t|;vfE8RpV>zIcaF`we0(A}WzaDTQ*_GwkmXE(cthL_0?YV*aD}EPlz?Kz zNe6Z2*_?wQNNV{v4LR<)O`W`^<>q)Usr%A&rNL`>#5wN z3x?3Lgd77}oLgLIG3!BI@HxmD>Z{nF>B4VyoWqk&FB2wZws)_-Aqg~k&)0p5Xw~2L z&WqovDL=pNh$#WIZEt;yk0imkV;Gr#4;+g7_a5fLSU!uYC& z<>em&SI#_ke8U?mD;`)f;=O27&{oqquyBO8h3f*8$DdQ1p3s2(p0<*Rk4iWd4+lBx z-LeKmW;!9bh+u~tS19O~$O;&(6IEZ|%D6HwRlU zpO^TNX)+cFfgWTZxN?gdxdKrG1+J3DKU>Tg z;fe&{$_C1)Z!-V_>8-K9Tf#ldclO7~2JwKP54?lzvQa@w9j6tkp8@`RQdU@L`BTj3 zIEn6HLaj029ayheF?n7$y|7+G&$@ENj31XAN1NJI`vKvZqGsBdwj3d8AY~zm86$b1 zbfm~B6v*4UFeFvXH630Tvz{oDL}_japCvJ?>E}6bJtzQC8DlvZhv0%6DCEB29k8c! zooBZNC7GzY$eGT+WIun|d>@Q8cRaCm8r{lrDPyTD5k-F$1pUddr+X;8U)5n%7K7URQ}3aXBA zJFsd2to$fH$M)o*$JVY7c3DC#i=m_QpI_x>ht@yn zI7*jM)kPGyrrHD!B{W_EJSrE{1vqJ-tbB}QUNB&bD(S{R<{L3Rc)CA~B`n8Y!)GG}n|;0`|5)G`lCfO=Eq-t?1e z%Lf1wF&&Zoabd*1n#+JoepRq%C72;f@Mp{KDR{%nYCjjj-+tRHTf!sfQ**1QTr?wH zn4?CeA|hXzTY073LQU+vrt3|fgR!B*X|}N-O^60b*-S&3agnmg)OAsZQ_*(KU`t>b zxLPP@RI4>Xk)FPxrZH&ZvX$sZD~`t3QU=IT(AIMFQ)3wNbEO@#q50{+Xy2Wj)SV73 z@s+SZIe-^+#`n%fuCc2uj`#YytMT~+N=3)ekPo=8F5^T7@Dy~%DL1_~QIf`Lc zw}L)8iNsLBVR0Ww)v>-bQ;dV_%e{ywoN~DgPoRtl`%red-1I)}SCN!9#=-nahZwDqhD*EfxfFLQLp=Bp~kUV@!9{J(u+r#Pcb6 zup@=@Tf<@u{0Pb-H5P?UK{PYPskol9f2c8#=SWo!>M)Wa`csT@3P^IDIop0w1SaW{ zVvRtFH|>F=ApIgT1~=dFhrO7WJc9Y&{SW^g4$`@StN&(z^6qb zPm|(T5^7Gw58&cff?{yxr3b?Vvo$J&%NCLaK@pTbWH?;G)cZ)yKZjG0P)X2Z*UBD( zh0R9`0YFr&5L{|WpEzHkGp%WkDLWIwczhx$L}I>>;cUm=sliJ>0CyX*w>pcN$6asa z*WnGZ+-I#x3S7`x_aM>@xM>}^nXCQk+4XmZgSFHot&>)8#-ff~g$q8bTFJmTdw7u; z?eR@fy%&rOQqXIa@;DcPf)ni%;uato@MioQk6}TV$;kPtl?hN&I6W1cZB6m z+{Qey^H;lv4b+DaH2PMd?HK{WZ^SGw#IRd#5kLlr1%@`^8nzSEz7v5jg+)p?23G<7PtGU&Bvx2E(6m;k`(;Ql{9N>uiB1fG>(6d+`F&4M&$@wG7K7_Dg?p&5GLO@YD)WfdYCt6 z7G5*xb)bcyqYzQpq9-~6$l1BmB9EBC@vmET-QXIxr(fH1WS&yw$TZy*5JP_=33h*{ zaMTXP>2Q(464t+@$9M0rpCGDY?_ZM-4o&tIIBkyV)t;)eUNdnsW?{}VJ*FZ-PwErH zTMexCX;ZJdtEq9Sk@F7c^FJg+0Y~B=XyjMsWZ|}qkH5?VP^?=iEDc{5;MQSXKw=BP z`i$6=IIql@)xC$tc*T}$De?s1oaD6D{pW!@rQoapJ&Ik-`f~$r4L97UV;b$ya*J~0 z^(RwoFm&k*H2=av6ovviSnF`oM4&N}?NT4!@*cf6gBU2OaET4YS3Wo2QR^6H{nsBR5NeVTa!V@v;Sq*x}>z0x{O1W8 zJ0u)ggL}UR1eAjl0%m0a4=i3As=o6XL|7JF1znPZIx%TzT_4l!w14Y6=I}abW2Hbm zg?^%@8YUj1kidwEYYiKwQE2*ZU#V#EQv%zp6&*$0Hv`I}Xe-)V>&lb(94H~irLjdp zd+vgnaluHUA;@BC%Fmdh(GoGA1o8S|f>{1={rtn<^g9da34k^KMIdRPr0UJy+n2-E1i6oh zKkvX_yg99`1i8!}v+vzt`LWOL18^7o>wN6?@R50D(;ue~ADWNJ>4&T-;Pc~u&Szj& z1-R({nWsk;;LhL(|8dkOr}QyT`5!-M7?{8YO`Q6d79J>Y`ClyH|0ekUdzrAMp$WVn z6qFL^-U9v(QG|qNdkS=K1=j;~^s+v8h7CBcZW{074Esslr&U| z^;OfGvYOEr`!?F~Zodo}O=CZs|WcRWTd1rhbA204EZ|}!#ecrb;ZZ=h|U{=ZY2)QSs+G*uw(~Bytm}#qD zbu6VSaj069E>$zdd9{d$TSOFW2xc`__ZX(Wtiz@@o{5r`);Em-Xt<F@p&IwA+K_5{TyBp`Br_l>UPq8Zp_=xn-oa`I>XJ za{l>FgTQHtr4@Y3WMg4${RxSGZbyeC*p?w;S$V%4c<>yV-*~z+QS1D4m8yF!_4umc zIOc&WW^tjncXup)b;G3k*l6>B#%Mvm&nE)LQ&@hcYHY)D>)P*xsO_0ZOq{;PVgMSp zbWup`APpKh<-V)%L$*^pJK|7k#q>3sZTqH(MLsjjJX|{PH>M)pI8{V`;Q?1p^&OGfHDA0Y1oAziYF&dBq{^CfJuN! zR5#VcquBY6b%hEI%%V{Rlm)3iD^KoG9?S>sE{=tqGog6&g%1>7#{10iI(;qJ2I#=+ zLTM}eM6b|L`rXKuo$WRN7#D}&Xw^8y7Om7pCBzIu3T;WBL9oc)_}X|4apE{-Az~5W zoJzpN326~5GoT{lrGS`(69?gW$;~4s$9c1iT5Kmb0Km1Lj!+pIcWvz9s;5jCDeQ%& z8A(b=r5&2}NH+zshD<1Xw=1>&4I(@kSxv1ByjLj!5oz0C`eh9$-+41Q9YP!*LY%M< z;jHgpajHFr$k~5iAZK&2S!eT|CrL$%*Y3gN66-|`)=a$|urr_l6^=~|PQcO*<{5Yr z-7cb^SUx(rPjs|YR51R#wJgjX+L~Yw_7XbyKGbZ!g}olRySl=Wfe&E0tjN4pe2XlP z%?^j9m9`NB&0+vNImkH}C`j#*KatfDv}W}d#z8Esz9m$%5;sgn-mazBH2Rm1-JP)m zloZKjI#AgBpG4D$FvnCqzEAg&_mJBDI-h8_gmx_kc3sOejGvp6VuxWWOw3SH)kUB| zx=Eo?I@To_T=1;$gY{x4#EJgq&y~1oP?8rG{D+-Ss)GZ-y3(2g=2?~SyJglGfcGjco^sC-9`9pr@5$)hFM6%lA{$L{@#|*x8oo>2@`~i<aipzfLFq_ zSEqL&qM9$kR~0YM{T!k{j_|NYxoZ6Ru^lck-6AsHSaz;D?yNI?Yhgp#EMJFVko;m_ zPI(MrOeY55L645yf|0m+f!O_RS)Sq%;dJ>Wko0O^<)4I{Lw)!@%Z(277MYHk(7Kz= znRia=L7;w#cnj%&kSsKn~n#++4#2H6_kOy zTDAN$pZD}qKCSpEfO|8Io-C_OcQ-aA9$SB?K*9iku2M;~g)-yC>H*CloIp8qui}pu zM2Mw`UNY-6p)MP+Rqz+HaB#}7E0#75!2GoxL_`j!1xGHGUp8B*4eT)9@bI)>70c{NQ+6rei*8X8yRcX6+D-RQNcYuHtslZ|;5 z|ErB0f7Dv{8omQ?3A5X_sjVj(K<5Y;Tr`PFK zTovhuESGuH9_#Uhw5hBc&&T?vkU$Ye^c>-RhnHW77FB;Ir*D7$FCZXrvmadW|HS#9 z1K^}k(EkzVvDogxf%4=3*I3dx_&qeSS@6w7>iySbukx(Ebx_jd=GqjyEoB5-%%|C9Sb@bBqXGHC>Gmx@o*Bc-D~%2 zz*dxZ)4_7_Q*1D-|9p2@Cbxch*P%$voqNpAk~vDa*(yhcmcsI1c(+jqi?L!V#5>x5 zCW?{2aIv}JFm)TOqVkak>#4NXA$AJNTJD2J1C%d+91CuG{-yh{aaw2?Qm6UWwCpOU zv%pi;UJTg!D64l!M(|Q-(C90Gn~zVK#;h6?L+ z`aHeE@wb+$zj3gu(R7orEc2R8f3oKeRvam;-}og%Sm&cy9tgM{w)x>})f)0))Z!Nk!2GH}ve>1S+ca=x*S9PM0Mu!q&TeLd8h4GJjWX$qp zZJFcgxIGyjV?41&5AIkbyh?qC0U?7y4OS{wl2%Q2`hyX{9Yh-I01MG(0wOT6Jq38R z^vA^?kc9z9iqno32;{5AoXH_ z(B_;L_U|GLtUM%`o<%6dxCWsis(K@|c#izEzV_m!`dBuUovl^Sj& zCQ}8W1|#PpO&Yx*evRXdo2?M}?C2&JP52d#_gVGM|8 zfym3tbs^p>+&Ms9LM4xF2+-Oi`_sC>7fA}kTyQEL6lCEjdvkhY^T`K={8a+7J1M|w z$FMJf_LoL)uHinhi;hvOh@1|skIQM;F-MG?1|z~Gx(r`I0&60Q_SSYl;n?*2INJOn z0cg=L>(T?~E8jVAv(f1hr#~s%+I_LMk>uMpG8_r$ypfFR>dwXsBn+m#kL&-Ji}xlLa3KGk)+lueZ|JCFHn6!c zxHhbCT02NAq~Vm2>Qk3Ur9virzy1lsw6Zc0&02C0x=^)rt}f^rb#m@F-5YQOkz~a0 zL^+R=_d~XCz>WXyUom%R7aAQFCa@LVg&)=F0pNO%j^fE@TL$9QM5R6)ShcHAW^>5J z$jF$41t7hz+Lte>zF)4{1`PAIOBz!|lgN?GywQ>XM7_04pyy@2bd3t(VZ#pvl8T6v zjD>e_@Lec(2M~6SVEjv!N!TEwD-HkLq0)AW$_?BGV91T~#bSU@%ViBBJCHS#ug$T4 z0G~bam`Hoa6&=IwGa&Xo%2IBiyIPV3^-FhhdLv(;4GW`VJ2in;Ns^Oh}UP0 zV->{luj=K%W)$w&(NXQJdc~$C6&lJ}@+Z;JGYzo6X|QOLjSGKGp?WN>&-;qpt6%y% zg`!pm@gb+Kh@0#}!l8S(aBCBDYEC&K1A?8C_qY*JV1diMvyvs)%_F^Czs#b>VsOJl z^A&J5#nvu|Tql&3$<_{!xtg&f?-MLyp0aj}RmxpmbecTC1SDhGSFiFmO#;(fb*f(A zt7FZY#*`F7I2JYMaYbI6XX<99yCSlt@)m0;*H$dzmd6saW`7Z3PHC#+#5Pitt1kw~ z1*|Fik8dE-vmkS;7qRa>RJnZo3U`#Tlg&0{MvEXT;gt;w?xY}=O6S%||G30IZb)NQ zCfuhVs=FR!QAPY&N<6JV32@b8_2m}Y&Qv7nNd$TWE!M$F0gdP{0twLzblx#igfcS| zNMJ0w;KI0cwTdS!Vr*%U4Dy{O;ZncPXzShzhvlL)`Hk{nOWVSG0uJ4@q9-*XJaS#Y z#7B^Y(;;Rz9TD}1ZHo)ltYvzLcnyI67tqdDWmn1$O&m1=2f@j{kXWcb(o3^rDtB{2X zHU>z}PP1_va7Uj)h~UcZ6IlgfM;zGe_@*7KW+X688d6-3?E{N%$EQdu^km z-U!`*`PpIKp@_`}J#+=%(r(YsDJr;6bbl;rnbB1Bb&kLKyz`?$4Tn!$3=#yApIrsZ zn^*CDvgZ~x1+K{YB|6X@>Go#_CL-dI7BT+ZG8{Ks_w+$sOXn>aE%kY^_B zJ$5g+?GV)aa@ier7pyj93wMt*>)x6S&7HP8x*x4MKHlyId_QFS;VRZl!-%|me1E;y z0NgnptOXDyO~nzXAnQJA3U0S2=qD(Kde5G_W3$tNRb0;d>!Tjbcez()UpDKltRK?8 zeIFNhCA~XFsso|`Z1~UP29ya&VnCNKzQeaI#oMK*`yhSwkg%T`bbJ$#s?bH1mX(e_%fe$A@?UOO5AW{E6DJA6Fg)Ik zRR>4V@59)mFYS-r19dU_XZNno*4k)gs)v$ZUuQDYzn$~|Tdu^!ORZ?ThEDwKNtuf& z9#t0$P7ZAQ=9v|@UWRn&?~}T^E3{1bzT9)G_qLPAri;S|wP8*($`W!~O^%wRZI+cr-{J-DjdAGNmD;39Y`SGW?dbV>2jRVe}|Nh=UlstN^t{J2E z_G8CmES?Po(8z__FyUw;cso%vuf0#Om9EV@G!iNUc;c3Su9bz&r>^yDl}mO>Z6Y;E zEH7u&Vz;f{TQ$(Bi`#Q~HFN*k>U~To&PbL2Hu}>W=XYkWmv>*N$1`jO&-1x{YLD0rj*^PQh$)5b$&LEO3 zfi$)OO#J!5Lm#E4wWx)wAD~@c^2Ntr-JcJ`kXDho`zVj{ohb^@LuUq3${Cc`Y}VayMhW1tb^g;O#>+bVt%JB%p^c6_#6=kTyp zIG7KA@=sr2Bb~at0dA|Pp+`%p!Qr@3N?1`Z06e6uttyZ8-;+iWMZlYdqc(|BTv3jN zcsjdJ+RskxSP3TAkaXMo;c-T5$$J~7^w{IvX$m-P_{~)cEZwE1Hd|V2$ZED5mczd? z4vc0@pV-}qk~=NgU9F(|hF-7wN^%A~R7nhnx(!kHk4TwLgl2X;S;>NWdU6vBI$!$$ zNI!Tp&VBJ+sDfJ`1H&CTWq+cVT{c)ozmM^qYmlI*m4y9l>U9jjO3}@;7kZ8Ukg%4_ z+v%Q<{ztKNi-Wac`}t1stvQm@hsFx@9yDw4kLO@$v|5n~yfYy!6gGtC&}N@VW}+cqfWtDyXT}|CN(oKy`K^5*t_YXd)v_ z=?F{KFvq%@{|w`eyHKsGQw=gAM|B?-M(_YHmP55;KY3|MfmH_#4U4DN`q%jBxV_=etNj?sv{1U&*S7TdD7 zH-1$sdB`HR>*#{tko&+J4oSho3X27EOAsT1#L1{oo)k(w6bu8Xp~{!?jF>yYP1imX zS0L>slrGb)KS=l`(096A_$^-&n$Pa$<{h$o)c+_IG;vFm>fCFU;3h^pk}J3VX2($0GB4FaTwN_!YLX`tf2t2fGW3N(Zb{+Ri#!IM@;iO@L;pV}>kTHYPQu0z;#~lKp6|%ix z_Pz5HZoG0j2n*ndUGGZJ@g#Lf{5?zqmAbKJ9sA>X!`mjfC?5y<8KdqWIz)Yym(t)@ zpl4cNIA$Nu55-})gC#uNf4%rn7DkFuS}SXw12l3G0!AA?#M-j=F^5guK$;U}$;$?( z?uMpt+vcKE`wIozKpSwZC@ zaBqXfONp4fe7Y4f%B&Yi(1jl(nzbM@)kE+;XT;XvQ zp=0p#1gQP5r<7CBRc`jta#3X~Nz$cH?SCT+>{GP!mF#6>EMq{uoNF@4*a6ohzn`+w z(_HVVB3+`S%7qbHVqs82^yRrJqgBmf0rdIJp&gG*6Wb&mto=gR?yFwIXN2|IUf&hA z18uIG^{D1e)_@-|hEbJGNTy?9N)y&&KchagQS?}@Lq}sTQ^;q(SKiGra2b(3)D@|6 zo`#>~M#9Gg_wxo8YLJxTGsob!^Cq%BKV;`|auj|8BF@toW-Yy=+`C6w^WBNY0Ray5 zgq~^2Ph86U$d?$qe&JFqaj397mj%!^BsrxSrIr0(N;Go(jHSlhc^r{~HjJybGy=^h zc28H<_vFrp9sH&cXidLDiC|ZEf)m|K8)p1MY_9qQY?D z@{%cJZm@+EN^u9hX9W5T0x4JxfbN-6l7(3wLg7YHD%qAhU0akzaZtc2%pKk}jx$Wp z$sKyuVFEH)=N_8ho24!=-#U%iIulgk4e5Vb&Y;R7Aci2|-07vV@8lL=V$3v4$r+4> z_ptZ@?r=Q0eq5&_z;?^eCdpRa3!#qABH1|x6=a&NtLCsHvH@z!PF&Fhl<4>FSG`o? zI^P^uZqT~3m)KYoTd4WNR#Tc3`!vvS%(zaLKBe+GhO|z2qk8@EiHog<=AR31^pTRZ z?_hbjloqk>`%_63{)xkZS8PFQQKQVRCCX0C915eD7Hrg$K^qz=Lp5b*Kj0`QY%hR1 zb;%THR(>^qv5QYgX)?hIT%abfbVwjLi#5H>D<2}EN3)~<4b5ua&i8jFW-HMTkBHwV zL492Do+?&=I0XZ-kV7ZIM$H*li6O$NAOp5#!(=$YAbSma8 z$5A1N!k9)*oV6Ukw-_FaIMzmDz+UwDj7-w}i-WyWJlB9x1iqF4XeN$2N%gt?A%Y=` z5_Ex-U?Dwze!W$&i@rg&Ia%|#85k{&Z!F$;kc>l>R-$2BMQ`GqlwQQ|M&z0KB{z@|JA4!A>HpE_{=e&FDtB2Mc#%GxG68b#;{IKzt zvQU)5gb1&U9oj4l5aaf_4-Z`2fHGPmAyD`o=1}vqg9bNOZ=U$8H+7Lre4KJ+ZWv8j z+1{-d)m5Pd1%+Z~|Lhaj5xjihjZwZ6{nXg5}~X3?#&&il+KKsdn}g;fP^xiF>mI9DdE07RVn@R z5CP%o2n@8S>Zra<2VQI^0}~Hq*s0zom~GJ|4}OVqcZ?C2qf-vJJ)S1t>vXSYBQtb2 z<2&q?5&~`d8fFWncEmCV8hO4^9?(cI#qf~kHV>FY#Eq$ipV`6+%g`+vvjuLUxG1ozwx2_z37ttW^}C(1j9U?h3Ft#^I{)YSySQx6Ef(T;BrhW5Xjh zKM9RY>!tyJ@qYBJ*Hug_%SKxmkEqvDamYa!Z0B0zTNS*!Ne$IZ;&}Wxg z_toDL>UEtqa6_wX=LNtj?9K(+e~YuP7%}YQBB192s^GEWx|V7#5-iCoo|$(xw|`z- z?j0XCvLf!aYPwz9uYE#13fh+l>;BcSwMe5GxMi#obNNbJ=OcN7YabRwA~UfRutsrv z{7*&*Wp)jOQ}R;sb=^q`8=rR+^Za|=eV*X@Qp^;`faoqF`=vWqx(2+iR4pEcAP7qbrWH-TPFCoNDluV?SfgdS-AK)eEa$go( z){%TsnM-L_Vc-8G`3cbAAmI%f zlM-@MDu|#+ftP^BN~&dbq{`gZVdlGgDXH`U`**gk{C4kIez(kb5IxPgh?hKDWxNtx zP7t_s^gSBU==J1Su|aJp?8;g3ou{@OzP9=?GX}RiRvCGXT=6ndQU@526yTcuYEGd( zGEt&3DE*77wmPGT4kR`P`;)?a9N;c+*ppYESOxyeHpH!~GE-7sf9(pN1BdcN|OVvDg2$eHUQ;Q$NGvtuY#N zSb|{i0o5Sx_hcjhi6{YMM}cPGTeu<>QN|p7T)V^xViOzjJci#Jq>=|VcmH8HG zN{>_vUMT_YxPR?DUg zW9uKowED415W?;7S3-uDw!_bF(=SZoibuEyX=Sk6@qHo`;94AqOI!8kr;9P#i03g! zsV(=ZkuJr}A)XjYXwEW|5wVdx^*wAmbY+b#3OG@)#`j_oNCw@3CeeScEWY8Q%z7FQ zx%u7s3kt$q*|Z3I+VgUR0yL7v;DI=vD8&|7XLO)iq*#?6LCl8)FZ|3P=-_II?BD9> zrN9Zwr*xkq9j016VcJ$J5sb%5&0ushKJ-PkNG&QJQz7lS;UV~2Q2d#YS)CeMH7h4I zXIkNnTSiL%jki^WYBW`04Xm5|WCW#01(wm|=#^)rOAt80B$=iFD4bN|CD~15lukcC zgPh(sDG=+wjxm(F8J9(xS?GUwIQ!+oLta{P?u+jmKP)Q@;9ERPh=MdlR14==fb% zXP4tu)0OW}yD~*BpaWkSu1ZIP>{WEx6`w4++E+(YG#M@c>#}YZpM_9A@v4gg<^1z*oXz~?OV zM!TB3syIl&P2=Zj!fS?0uBVVd8Imkw?_bq(*x~pQOd(p}$_$PzQY0Ej>#)5I?Fp@% z+2zi<&a%%{f6$8w@>^0z>T+T8LmS1smA>g80-5DMYvBRuAgFx;^@TZLlB+?LVOxR8 z8ZE>K$^E8!vk0gLQh$!(f4_SLxG{l`rfSzKDeW*LXY-KJKlk&e={%U?rC_sY6q`W? zE7n0>Iv{EQ$I!mMv5Adqeot_S7G;BSxs`U=}f4ux3Nt-yHg{T zN++;?br}L|-5Am|tPJ0Ob8!D4x`-^bu(T|&G|*^SkVP$AT;($1%=9n|P+MKaZS@)G zo#%Q!W%ng~abg?nO|0wp^qV#czkDx(eznA1?vUgFcH8Xt!{R5q&$SRw-OjJ*^Q4{L9$C z9{#RkI|<`s^VdTEunZ)to=5vbk$V0}yJhDU1Ma^fy%9}bny|6#qA!nvt^ew;BGh0DQWL_kqOY^l9$n_9vQ1UU z9TMH{o;|4P1+bej`%;Dc(J@0I97>h^7S4eGuR}q(g<@cu$gJf#>(pn~@#X&8m5JR7 z!X2%U=r>tJWevADmj5A^+4w`;$xdqEP8U>Q zXjPPG0!+T86X#ogzfGt;9qOIxM+O}PN2Oop+yz;>BUM`R+^=$?bNXqZOAUBt?57Z5 zP9KJx1CFi0!sdPRjIUHJuO?CU?}WX&2)L(Ms4E0JltQwLXxys9PJ+UQ3dR%v8igNq zvmSj4hgSx=@FScHq_Muqmi1ah4j@i0;MY5sTk~>t$`b6qr$*FEch3KLl-%VIql9KN zYo-$u#2-(*fWAtIAl10VXfjA5?R8|{3<1k!1x_N6()YT|dA6AK3Lsa4mR|~_lKu=} zWZlXn&F)Gh&Av_^OC>E&5W$OG?ckX7k&01sfD1H=f$odL2;BK^bArjDGtP~|@B!VA z-4;?V%woyt2%X@+#-tK==-dxE=-kJQx7;(abdXZdlp?LV2EHM7IzWg%@&W4C zKsTk7AG64TKCH{5Jw#_zG7}H1coPb#_WY5T3PZbRen-QPrb)L8m03?cG8lc$5F@m+ zY{$+v=B&9PaOvj9(VOkF{pW|(u}i}MA%r!1p1ix2d^h<`f|ak`K#r$gP}_?JNG%5D zP$HYb7O+Xs)`KAL3tqjmbjz&$pdXLDK;Va;_aeMeSuQq+?O(_>+{Pa477JkH3d*RH zLa$nPYf<#d&K2RLD=|_ld{PYSEN}OIN66@wNbngS+x)Y|VUALlHES$XR5Y~}&xG0F9IvwpYP$}Z%hGe^K%q$$9ScT27fWMd`B zJdl`KMR|`HaHpvX$%U%rRKgyYPC-%)Bx5)o#*Cw(BEu-|djz#hsi6>>2V>r&37Hv` zn@g0_Fqz5?H^k^Y8|J1EeNitSR3uQpB0 z;#=TZRQig5M8)^ZMP!Rq@&%Cr^jI5tL_9BU7)3EQLWVoL34(%GPW2#)^QHUJ96gKe zj&(DtkU#deXVBFa`nLP*gd)*rtpDEBQB*{H*@3=~Bcq*l{dnKcX^?ujIvG$O3B%{d zV?fz_gyARb>g3jk8MicH!Ddl*8at9OBQXbiAHO4Uy91r(YCF!?4Pwjye1q})?_Gp< zu(MDqERRUSnyk|U$)+KSM0Bu@1mdg*`!R+3+5Yf!QV;MNN@a~W0+|>iSAN`j^jMZ6 zdeL?)QE<-b7Kg@xXc0m`eb1v}iZEUrI55lB9GNHCm3`SJHf0fQBao2@t(d5Z62pkm zd7;fo80EwzOu9n9pv^G=YzQnOM2%9mt?5+KnQ`c(Uw5KW?3r$O?8-_(716L;DWWqg z?p<=#E0lv)2+y^ovSB&2_5HpiP_RFH-0x7$Q+TZuscn=g=ZPpJ?p(c$aUH>6>|Fn# zjzpRM(lpLC4)mngDpKU>XwZThS!VBVpCSRLQ02|pM=tm!4HIPy*!k}7p+D%U-LtFc zfS!%^+lQ*P__`Btt{my{@}l5TFn_A8OOk*+#LLj~6!j<2w7E*_M}wU}mjtd=ev=v* zLC>2papqM@x0j9CkTiK0 zE@Ts;YS031!JZXqT|`(2aR&ujADa`z+1LS90?(2Mnp*sKJC%_s{E4m%T7g&2^p3t# zuvQ5R(i~LWAj1o^HCHrn-#HcA3H58Q%=3b?u9-&f4S_ien75N=E*!KPX}0;oQ=6_2 zx98ffe_|ezIMN)X*qPNWW?8w9b_5rGPWc%eseNhZr`>u{Dr$4=1d0!_$2#J^Mlfx{sph%9ZV`gO3@k_yMsIgwvyd;k{MEcJ z6QR8vc$47;4hjFdN<4l-bLzS??!CS`Imug}_UD#YYjBRmiIwxj4tln&sVJ(FObapyFK82+umH+JF3%!Rdum*uh zT~y`u9T6Gvr=cI$L5=Ri$<&qoNf=+){yEq+9xXkD$*V&;DW2DV^v~Wyc zWJM=*ovF6gI+IfCR}H4|YaIwH^WdNhu?A+lYtl4X8eGl#cr#HAu38O80Rf1{HASOb zAO{`?mNJXT7)hTAI9d*MZ2#Q@GjzG3O)u>>@UHuWEe8eSM@rSNmrY;uqnc61TMA+V zZkRP*dR|9+$Kq}ARK6zGsB*Kq(_g{Ra&3v)@Uq!}xICuBY z)7s$K$8{v0fw0tENqvUk?0)+@F;_jotOHsiCQZ63wCLb?U3C-!x|pTYW%YEmMfq!F z(6&GxO?eJht?$(5I&`}=tPwCbOi@AET#w(Vu_k?xBJ^w@GgwzPvSG0hItW0VIgL8C z%Z0kPoyX(Dwz50E)mIaD!h(vGDNZ(l+EF~;8fTqh8Bj# zhK7t@_IB!O|GS(1ucMyf1qMk1@Oh?s496QmM+IT3N|bm<`PuiBdK_^pJ+C$_reb** zDMdVhsl1~U)Xee}9CW;PWNPkZ=SbLa;Px9cgXk$wmuAO9WuzQ_{DUIIU=F2e_^~Vb z+&TZ$WbWz6bAinLVS|Jfhwsg1dkMbV*V&1)6Dnq3E(iy927I}^rOmto__wmlJjGk! z3SYwKZ2YJ4aWuEb71<`6=KIP54em8-PV>x;dAZOL>nNi;UdVw53SrKmlkAM_c%Crba+nz*THG>|z}C0gXn zZs9-XJ&u+cs>q+ZMzy3R^A`v++uI&{{5mEJH)rgp$JDwPLIykJw))_A7-T6X>@-#> zhG}N316`6!s1sZXVKQK1BPSu?lEaM+6)pK5-sHUxXT+@GcNyXVeeEvhoJxmTm0$Jj zHETVbXVn270nY3+e|>53`0UE%58>*|XHI(};zql?>9}%c7)E3>I+DL!*a(A+Q2Ph_ z`r78nC0qu)#Nuk->7#M+_!(u(5ZmjN3-2=M@bJDYOMG?Pv@~)B7@q)!^k^%O_t5i( z&}BGWVzX6W`OkX*TUt#+ zVeCt;Tz3lx{5XB@t9);+-|usetKzS={3>#2e0zN z4==|f^OHE|J^T?c8-z(+9DjTEKt1E3{p9&!6pHyhZ;|r>wp5Wp($q!#18NlS%%b+7 zvD1`3!9M(iok>?O@y!F4ltrA%SB{4CvK9TEy`i{PHl@q*q|z=(wsVQ?JVw0$;3szC z+>D5511y@{5OEocg|!?yDYcANq!PaQ9K%3j4{Tzu0umKffkFI2Ucsr+L|a%@!-cO1 z`4$i9zAY(`e43gV+TDpz9GT3G5EcnJX&OAV)Z@PcLAtBJNSP5)!DMN6eTE}t)W|@- zy0C_&c^j5&b($*PAPp;HO*{xPV$H}LPEV05MsG3->u%ZFeygqImt- zD~K_RPROoyyVE#~>pVWcu+IMEytggeZy$aSsD4er?kxx>+B*B%es&+)f0IqOeA*Ae z5?U{v&O2b0u2|hojeq(4Z>rqSk^Z}WFc1(^cn}aq5PT3PV;5I*Ged`rK1OJqj9Ms2 zwEw3|E`3^YlNqD`_Ah2W(>BtQb22BaO!O#cX;ia3u2lE;PXxj!0v^WHk0)0ht1Rk5 zIj4iArGLcTkB5hcA#>FbI%7U_Ht&2Np`9q^Tpq+*?4oW zkGJR@0otOV_Lc2{W>v_aPW1x9XK!ylegtuGbxPkLzJ2iKeVJhwlf28k#AgQfUlLh8 z#<3UM!lK*$*@C}QZxaScJ z_YIGs!daWHM=KrE)Epzd++E6f;a*k^Z!nC&u$2MAU`*F+9Rtkb;`^cX6!DoD;>)t` zpPhfH7>!>{KBCVo;&^^@;RRn*w6e{C&H!&#BCIqS4uu`B@+HlPqC~EO5<&vn7j&MEi)L{Odn(YP0n<%A~~F9$T*rzD0^^#n82Uk zJHEt=SyBT$xu5l8R^qYwuaRIb!D-MMU>;)7-%4v-9V8 z1ZNIq8*t-wImR{^wpsjRXhcrjt@~ls(iU?>tKZPRlW6Jt-~B&6X%>mH|D>rY*dQSE z|M?g)7yu6Z3}Qwshz#KeA=v-&{rty&78HSlkrA+k4bu(}2PqBlKjrMQ24MFYdPtC> z!2e6psxc71`A^Y$tBJxt9MNA+KH0pIlq(hj0=e)!hczx=C?#W&PO2WY@$~5*k!)|x z)s`gxjCN$Abu^X3mCJQRe*2Op`ciCNHh(^4=*33P&Zc+4n)mTOJLb(VR#%p-YThbk zxiPf^I69&^JSUXR!TfaZUT5*&kBK-QWT$}TpQS4Jdi~9{85KQK<{>O+ z1o4b#|5=)5Wjit4`1Om~h5&v_PCZBAaisV7RUGL(#%sUf?is4+$ZGI=5V@kWZBBfU zr#)_td1ok5%zWNbg+MIEvbm&e(!uUd??|Ns5G(JzeJs;V=mu63wDBBx(r+i4Z-=;| z!nW)@Uo3$U50P=5$FBXe#x@e_yb{AUqXMZb3RA4 z8t>&@1O^g)V1$3|2xm}if;KozxxoMSJaKSFcYJ1rXBJgw1$6l2n8xC_JZQ;mpTo8_p!o7V~X0+KnF>3?u zm-XcBc%>RjV`#vbh*u0MTXl^dw8@cZ5B{WgP#dlQjCuFyY%M)t=|vo|>WOfY=^G*t8<)ym5TTX3kOsZpc zsw$ZEA7a~hjCow^V>*0YaK7^8R-nwTAQ!Q;MDoJ7d$)yV3^Z=u-T90Bf1iCb1koS` z{*SdU7!8sa5%s^^CqBFeF~r|MK%llkK*%##8ZihmVjqPN{=ec<+my|=;@IcT|tz02MxDWhgS@#%T_u+|H2iNG_X=%EyYD&W*B||n+**GH4V+xD`AU=)}Ty% zwB?2$PY*HJ4sV}B92nZ;`f9sB8zh)!9WH#Hr$vlHiOT|AQkc$oK>R`}64mj^!e4g1IIFTfw!6h{V2RGGfm^%+M4 zy)Eyxay(2AeorNHidU_{f15_-$-gWV7J+WPf2FRisgCsK>TN4Y9ZNy_7@SURY75S8 z)w!j=hX*}Inup3P0N`$ajY*-osO`_<(&f?@23P>6B(rs|#E!P0Tz9=oMAiFY^sEj{ z;{#V+OD#Fi(q0;J1nebZ5Q4gbh_hoG{jbe$O8OAOOHH~PRFi(#ET$0{qkN@H3K^^5 zW|i-(Zt5aDrG&qGV~0nlBBRXD$3_uGRQUzQ#?#bRPZ~Wv zrO&Y>Dg3VW^zaty#!EAbm>ME5MIB{Z3k3(v++xSP*m0KC0UQxa-nyK(Aq1$%{k#)- z{1nh>k{9zUwktp6&5;*212lPD=x^|wzCTJN;k;IT?f9CZ)niOqHzD373OIh@^1WAQ z&rI&U>RmP1M-=HLP%?vjCopP7jRF^5D#~dmoYFvzQ*~N}hA|k}+>Q^r+AH$+BA5lJ zNp*K9Mq>vbLEbp)%yDXPCHOXuOXF>q^MGax`Q1NBYNsDiXMGrMqk}Cxok0xo7Dmfa@ zch)3THxPTfu_;hCOI}$;a+gch=g6zZyk{F_<)MxU!VxpEsInoE4L;$r__m$i3-(_g ziL&e?yoe37ubM>_ht=NQN`eiAeuTa8a8B*Z{?6bVBHn*|*u$?PVhRlP=m`OOz*A}6 zg*~R2(QwMGiV5fmnokbaLG(wZHBjt?upBAiRX%{{YvOcKKMdhZUWK z4MWTuG8v$D==yG+=^W!I#i$z5A9V3Y9HXoi@{*PxZ?ldD{x2^zhP}QY)z>vw zPsl>O6ZsOlBxdej`x@@+O zCaL71&7UPQ))zaVe*^To04ppUTDU92kc>>rV++0I55%RvSP}lsZ@pKe?(;beb{ke> z*OaQ2Qnl{~m$>crFoJD`YrO%GSuPO0;3F*8@w@m-yzHa)zdGMfm5s}9hSF=h1MrzR zp<33Gm}cMPT`aY0P@M@D6hi2}aiOfPKWG?2+cvh5a;cD7Qv-?oV{1MUVBJT1)SQ1s zteh&$$hf&BaubQ^#};HLe^TjK{gZ&|i|eSDd$0JflUU_u1XSOV2RD zxLpj6O+_}&+Fg*(a~2N{Y(Ot%xth#@fLd6f~1Q^lpTp_VJU&L%mtG4@t2 zZTnI*5!9wqHYUNMd`h9H40-0+qjw3=6P!hH#NK!-~?H}%HWn%vb zCPf5c=+ky{2#N}98q&p)!})YI)Wi%f4OOm;FKbbM#o1o0M&m1%Q521k)98ouPEHca z*-1aPrhrWMEm}%)6AV6@OyvO&&QVo`NM4%h@`c#bWqIB_>#{txlai`fxq4P_5Q>a( znz{Ut>9TpOW23StTb(2J*)7$q^`C75YLq7}T*oc76*sLW@8>gwWDFR-sfb=G)8J~V z6q@q4Q40gV5U>iFc}OwHAH9**e1iRAW%#O2^nvA{;Re;~s${y>73)_eRdV@y=9T?w z#{DzeG8nT}=ukzu(#M%goB#~%V)!@wT6UKAMPD1$r>IRUxOxXJxlyIx`P&<$KH+v( zaYdDa59y=dd>m|Y*NAcOhVQ1A&@0DX_fgU`P#W~}Rml@mcqX${HS+B?88_Ro(Q8L| z)d4a3txxP@il;jTnd@YMtbPSn~*YDdhu5>j88{$DP7k@JcvIXzPyt6iQFZ56>d!CF3}9;Gp2ybcideXu>%mtC_epl|xP{ zC5RjgE211r+_rODHwCu|HHPVT5j0E2HF*_*Z%ASCL@!{m-laoRmc&!u!@MP79Jo9T z!A!@0#FW;KWa&aQG)y#Wu`~xWUY*+~%Jns(%mc2{(!RGSz;zcjo|8#^OCHAww*%ts z{BTBt;B91nE~$)iEJPGGN?WeA7u^oB0mAHmOxp6&(e;HUcP^MOSa@}BS9a8c3Z#d1 zZh3mF&zx_6wfeW#q_)2eqv6pf1$^!DW|wpv4AzQn>Bd1CmBV67u^thMn|bS`pUI<1 zDi1MRaMRq-o?2FQoR@$Lqo(P~RRM?mnu&P9)Wy+cW@-0-G5#GDo%a{57<1KLM5-L# zs3FT}OpO{V7L2BvC?tpxHt23E(U1qz6zsAzHLwd7m<>}snp`+c}3gr>80fbCE-WX+5?Px=D9 z!Q7**yOVGQbt1sRIv;ONiW@JUd7T@lV(S_u0STP+Z0l@ZvjlBOnG&IERs7TXmm9Bd zs!*?{wU8m#-_jqRtypBafPy`qal21Uk_@J_9ONwGak|cRDSJBG0Q)!5q$4B&#u53$ zxLdAKqB`^dlgMs_AZ5|;$UzN+pks&d4z0XV-*>w;(4KoQ(Z{0ji((#;+COWDjXSrw zF&X#fpb9uVLKWmOJT269m}+@Uci2efIu*7`L5pz_4qcG zp&kF)l!s;Grq68oJ^l%6O~tg9WevD@`%%}L&ioE0lW78>{$sljzaw9V!0l^_dLLpW zPuHii9OskvX1ww|NclwmUSxiQkhCo2V)b(gYdsO+cCK>T$M4DAW{EAs7OFEaqJ{9~ zkZICYwerw6`&?&az=}m?ZsB(H&`ZSw($>-?f_8e6R7`ts%4SF0qTK4EaIr~OVzV`@ z5sY{WhE@P;(7QSnYeC02j#d0NdTTrP;Oq0^Y5CGh@9%YAfdA8EdX``|DLjKAKELr>@BhP^+!i#IwHGA3Hl}$38Y87d(AVP$7@2tOV&F^B|1S! zO7euvfB8e|$K45(kMD*}6tgCf0Pl_~(BHJ>UOZDCKe8!(ySv%qpwMlt zY&cEVp+kOcYt!!FHr{bO0VW9oEwmh+>kBn-K^zJ?Q+NLjHKgk{y*j;JX8Ua$8Pmq? zgIvL*^gB@)f!&;^DT+2kKFZb59W0cL(ja$vrdLGTkM1^kK4$K`)gF(Zm?Qj<2l|ZQTc7SSa2}=fo}|T60T7-$ufh^E zQOPnYf@I(QV2-QUWWrSSaUZy?K+5n<{d@J7*vT3AOWvdwDIXB0?A!!UPH)k*qhH1$ zVUPuQWcVVy*o6!bEwGRkaLVv}j`3G|MCY(M0OvVLqjh>5k)Yi-8ECxlpN$4?}f-Bh_fM$XYs$}YmvH4LuCG&N3T^W9#2eb1Toc# zA42~=Y|zjm9`~?JJqWxQETl0%N<2P*%J~-*DTKP>F*(j*t5q5~NPgl8w;oXkg-e#-r57TG?NS{zEW(ACb< zSQ=a-j9j`y;bS#ip7Fd3{yaxIyXp{QRe^sCp~qlxt{Ibs5ea{;b<+rC3i}9*2RV(S z4RLR{6Zox?FJp7sFMv~3NrL8t){M}9*fc%Nu$qeBL_!{evY4cTA)>)Um`Kq-tqei% zCAG--gLtK95rGDH4Vs(g2dr!1octV8;ZAaOg7Ri!zxTeIfL;GEIPm}L*5}X;DHt;h zT~zVw{ab&E({W~nAJBQQhM@+RcS7Cyt?h6@)RJ;%X%|AGKEjm`mJR|wV{IjTt| zCW97QUG8!Vlx%_(=P==?S+de~NN0pgyj!og=2Z2#x&7x;MZwp{^74ygz~^yB&FYIm z;-*q^298g{9oF{QQv44h&$E6(hP4K0>~?|7V$C|@fg@uH-Xkv~f*Tf+fxk`0GTjO2j!5k{Y}-x50E3C3ZInucF)V48ZM!ibJgdH z^F>JvcZJ7LNro-h$)Q-vOhHo12**v!MDt+ZZkW#BI&{)uuv@eEtAKy?s$ry#~q)5hx4M|^RfHKb$x~f zR^2a$@558mX|61mY{Qzi2QNMBEsvO)h}w85dz_mW?)((SN!K}7+gAKD*#xU{?aA=%KQ7x%d^*QrZZt2f90Rc^5ttB zL(X1XKa%BtM}Umk#I{g!Kur<-j598mOz< zNwVkqf_+~*@w)ZNXwaV$`t5?jM5a}ke9IJT*mb)%BpD$hOUI&G(kzHaOO_-zydS__ zr+-AjB-hX0S?6dtpiAxiU@uWj3h9a6j8{FRy0Lna;gUhTY0acyVymDmpZ2> zh`g-c&M0gQT2YgWOZ`-vk@P2OyA819vuyDWy*B=AHQsfdB6QE|J=WqrHHBLQb8Wp< zv$uNB{7m_!C4b+;o+kitkNjat8FLgi7lsZzB^?{5ABpZ>fk@**n?-bPBW-y5f>^LE z_hLH9uFC{%M?#E=+L?y5x)x-$kLrUPV}?=YUBiK#su%NujEQtkuZXRYhCf%a5hJ{ z2*JyulCu)7BKgY z5;A5-(4TOKGY>F=Q^G=}a-ZKmY~=%ZCDCMX+DY+r$}P+e*-OaFt!cSMaFl6J+SsTX z5cTYN&_ILtaHXi8%n4m$!9SzLd&dy&MvGWI)Zz=1K;rN7x^od;jhKJWFC;i7@HE%!)K8KxRtKJX}1QxcIt>0jp%eA6n0h zl65T~N%LRVXB!T~kKf z6QMfeivGwHDNS$$KZz}ap6^QQ{x%QN4#CEdE{jbJ@+pAyh(}Gz7g@V3KvXY^$+ox5 z@XCRDQ=i7cR7on_0EYw&)Ku0H`-=P4o(CH!jZ0af-mBNzS8bH(ct(9%Md-;Z)>pKY z{JNh%zUPSc`Z%;<&5oO;QVoesau=qH75%P9t8g+Pu)?!y^J)KWw0dPs!1S=g=Xg#j zWN*@-(^13Svyk)_n+we5^S?!1$gu7up@M^CWN<_B{-3a{HEu|{|An_Er-G?-%|PIX ziDca}9Iq;mXXe=?C=0J6TLhJ|>O#8E@e$?$R{m_QknzCVAE$(Y3U8BHG{47*lF!BqZyIU6z6qkt&mNq?c*G~VLo8C+h z{=4#bi`U_OT*9;S*sai3>d+lfT$iR=|8PO0j=LOJRpbnJ#k@7a#kn&9=ICla zX#wR50kB{;o%5>zXx5YEtPt42lY_`nu+_%7|AkvNBgl%X$~_cLkHiK0%+QX6w2>>^ zD;G{PmLhlQu8++U5!C}k;qUJDzh&qutja#aEMhe?5r!NoeEC+W6T#>m)wUTIv455$ z{?lo_T9`gN9H8~+z9tDvXxfUGg+QspZxHLK1B#d*kcdNZUxK2q{*ieKfhE;o_syJt zn{=!#hTkw(iD(K^zAq>W!Xdm<>6uGw(+C)*q0dZm)5>3qQdD9l>|TiCw)`K6# z{gjnkAQj$Hd(5g>M&2|MV$r=kx!mkHrO^d#MafGc-a^H?L3!6cV;&1tQE4O{VJ{Me z0n(WVU=Fou$pYi&w)KI|9v|RacO{*N?#YJY{0m7;xf^I?(5)ciQraz1{s1~C{g5Pd zZQes22pK9~BDt~lOo<tk85JK{lAdmfz3 z(JOTlmv~iVOzU`~5KURXGNG(gnG||517#*Nj=T8z$wk7Y7&T&7G5I+ezsN9N;SAZx zid7ZFnG0Flt-=ZQRPo^=4*urLe0|F>=* zHumOP83G6hx=%(@CKg2oiZCR}f0}<8MsS!I09iX~@4IH>$)3DjLnIfot#p-IwM(;W zWFD<%nF>8W?t)nrj*pbh5A3h!-%e6V#TL}bV$LJ<$Ti3OAbwVEz%~d}|FI$AO?Zzl z^_X^&VNVJ6kv_7EVJLlHr_W1+;n(NR&&xO}PGk?QBc~@urk#)D|H0QeHfI`jZ8~;3 zw(WFmcWm3Xtvj}D+qP}nPRF*UYu*|>Q}xadxOVOR;rg)FiQ_$UQl7`V$GjPUhcDwj*ocNbaEb;c}Y{?nQZcpu&!$o9!SRuRQd!0-7X`u%NiqtDZT ze}2l3wj)c88vgrQbeIJJ1K}`^CqU|NaC;t8`*+D|r*;=I;d6t1aumh!lHADpwmDRw z;FuvUoGsE5;zYlG!XuyQ+o6_(ojKqkv%K5C^2lx%kozcV!q_e;s>D9^N&Aru;t1x! zJL{HmMZ7w0@-xou!elmD*QP_v_SqVQQQA%bcP)g{M}g`2q7km<5#L+uD|5xro7;qgxW#+7#}GRtV<@vE3%85T1{(}F@>G&GdpEBVe;T9=wkd{>l1_SCdoYhYinFMXObp*gr|V2N zs&A;h_m!Z z0F~dWa$*aB)hN;B3j+2_HTd=~O>Am+t(07*(C#JJb@Yzzl4-cPn;IJNlDd1HL4SLO zOi;9b1fN?ZTT3xJ1ToABiAd3krS_5K&!6YfQH&%+n;yVMRiEeHG7OBae^O6c<@<&> z6cXsMm&2d$7QE2a&r6x!mh#&%1*J&$I(8z4w!qdKVk|Gq>H_q|o_@haIbnk)B+}(p((+#0T3rH+a^{Fh+VaJc~es#u*S06TnC8kiyefO^rIXGozTmagXh5+BgQxxCWa)aMQRE%G^|x?=@Kw=WHqM| ztZXMqzCP^ItTcpNSLe~S{`qK*kL5#uW3Ua5)aDXYBBnhBF0&_z(#wPU8y|tBAR%@6a zXjjNVj_r@z3lPReMVQyu!}3W8>lq(79jK7$dfC2ESilJMIVlmfWg0yw!NhZ667C0i zC&bEzLf_O>60P)?^2FX!HuyI$Qyhg=905~r8uO$*_B6W{5)gz}+?_=hHHREAR28?e zPf;HGzyaoIfCkY@qZn9(Mbf0OC9fs5SgT;>q+y&GX-(BkPkJyP>An?lM+M)129Eu{6>T%4X3jdC=a>5U2Dtr39tEc}J1g#|Stf34s zM=eZUtH2vE2%DtDsS7LxR}iQRJ?!Je@2bU(CIcu_WC~{esbxp>Z0@U3wl=zE;9@ob zRibvKEkPARPB!c#q!Xa7P9^3rDMnDFAz_#0?ZqqE$|gKD(wX0teTWV0^2Ytj*rhV` z9!bwue@q@zQnw(B7Zj6E(X8(!PWo6E zWCd_jy3j(J5F(BikqI(fp_-2ilnil@p)Ct#hXe+MN?7!^WloF)DnP&dZm&SE3w2Nj zK8!9a-ru6Si~$z?LFxii82;>Ee&C^lnz6mOY+1R>-B$f`?evGgvj$?dICiDAK@y_8 z4RMJXJqiL@#hA22&?DCofL&w7HIjQcJ_?w(;-v4Y9g5h@(Cg)h*nzrakd=hhpNATN za~IWql7K>@9;;A-i)bur{%nlo62S-t4tJ&kH`EEs5G^nN2e1^S)IQjTxMimMD)@EI zDws>bfUPq+Z>s&rQoJInzm7u&t5qPl4wD-)L<8nyBUcpP62z#!3qqv6^G3jnU=U!u zkEWV(UiBJ5;imV9Iqm-IkjWZO(XuXsdY}smxowG*s~SE8_~B+X1Gvj3SAl)7QhK1K zde<@y;L{**@v8kH$uN7lF;o*m5UG>xhHc2QuFQH###fm~F}>k;p*wFmge5Z&(+D5kc&Y__u2qf-Yv4BO+I*z;}x?%yog zbsF308*5C-Vl~-Lp=;_YDbkw>?84t^q_J=&+XS?9Zy)pwXWS3g+%ys+|H(2Yj~;-6 z!PS_0u&mZ&nJGJ!+So0id3S~-vwo0SsHXF>#s2wv_=he!UIl!cZQrnX7677kO>`YQ zVg2{`Zt5llS#y60lhAp_vV?70orfnAQ`U0c=~AcA!syVLz}ohm+cg*`Nhi|H2B~k% zuEN%uyo0!bP8G@iu`PPywj-?lV6=oCk zvIQzY>K5vlv}qSctJQ9(sERVg_?Sq!8%J@XEueah^Cb&;F0Vtyq7*D~e^2op?+#q! z_hwR-#16*xs##nh{8Z|}w;DkVGVGW)%IV{>SRxHDQQ(FpVOrOTX9FCT7-oR`{G@Ww zyPYoY!O6!Io@-eh3JT##@0A~b78uUrSNtp_Smo12cfh=f+H6z-v`d$$^{blRG2R(r zpXOHnDlD|{l6j}em2OEsHn6uAh2 z2nAN$4zn#)iXB^%YfX>NhoSKh(Pp7(lVu@bSc#m~KG%I9&!$=gGBr%{h%h80(y}<7 zxiX&TT}+A`E+0kQx-_iyMDP_enpTQHlYTusJm-uiuEjy$M}U3Pyb7|yLs=waHTsCt zY4yt%#4KeZs%nqF`{E-*hV0tP^!ZS84CqT`)^VMf-zTY2a0iFAG<6qWHQI|i0;*nJwM@#gD@b`l2TSDp6zXsc= zuKqqF$?AfoVbPopRAr3LabenWx#asAkO`&$wvNX_za=#Rnec;f6Fi{8g~(l)GYEgv z>;T=0(JED6qmNRI{Oy|6#lE_eEs6BHH3uP}Z0}n73V>?lUA+x%SWN=Sx#VQl@^!Kd zh=bn~8d%lu6lYErpT4mxib=b_DERqm*uS4m?+;D=r)1aDD7H)RNIm{=#rFVb3-~+F zg{SbGS>`O(cWX>TEDE&wcSt^R-yzSi%wGeZv9TS9-1%+qSd+;{^jQ0|vO zvpPU_T|gVVn~Pl#YHL{6TtYMHS=XAHrB*#JI{>E5QoL+cN0(E1+}C&;<=C06E0@wG z+%--YipesQogFJitKD~3xOI}1U4iRq2Up(JV(|)me#eRsb3|)QO9S)jrli| z-=Dk2;ez998O8eHgqjW(^qGT=V{g)G?Wdo&>Whb;KQOl4#TB~A6UL556ymj_4r z?`+9e8d9knY^Xb@YJc4s7o|Z)MtG$CXgy`sEZBXruDy*V*es)tCJaN~UfLVro`Kl# znKE-sL#sYkzW8|6eRu4bAIFsYi`BQi2IqMV1H>mpIy!#-741SicqyCHQqC0VS9%fM z@c--3r7Pd!FO?>oLmxKOyG?GK=hADtUR+$fwctsjcKMngbNcyyn!GU{Y;o@kW)w~f z6!0ZFvU8t|z(p}V?G+Db4j&+L%$&^58}t#(HnNXl&qC-9Z}bhFyC)RV2;cxuhQko4 zuk5Yx4%Q$e+W^f^9YxX6QxbPiQ&arFHL-1ZB$CwLwob#fdI33AXk4S@CVG!{57 z*pm=0HM0WhYErKwH7fhS$6b@q#OsHKOk7Sfc_3fn^jjQ*oU6)-ymdMt;jMtAQKQnB z(x$8*$z@+h{sLK5yI=$yF#3qkL!9J)u1a9DjciOkj(skS-VaNq5i9 zyi=MM=d}^mi6Tg~vS@kv8@KP32$*pp{51|nk90m`L$#z)F9xUllUSQ-Ya}nVhNjo? zw2_i)G^_zqDS|pHXWfD4lw>i*EULu<=qzmyBlEFUxXPHK7S0dKJWjadzxKrz#=_|I zNkT@B{t`dgI7Y>Itn{*$G*|hh?l!<+j~KshYc+RDczCv45{2v>yO7MwY+9lLnRAHG zz0TX>_*D)eL|{$IEw~YHU>bdbW<0b{3ne;*L&lN=ZUkUK7-7bJ&&Nn`;EAmT5C)3p zaeO3RIpv}0Mz__WvGx+QQ(K7D`@gjhu46^C%^^~ZaNeB%Na8FnoB~k-M1>Sx@u2y! z{v43>VK5ZW@iyL79MC|64T5`_lX4}#mKZO_1CNUGEb7<16 zosLvs9v}BeXa^(jOv&2LuQq2c|E2cbUipyfR|(#IJ7Qm5aA^8Zd_tM?i-cF&;!|*0 zsTnq%^Gaq}#k%NJq}w6y?nbH+A0ZwHGChZXC*ja*`m5JDxn=T>LX1;2r&GcIq~7s2 zZ@p4y1Y=LEQO!9bzGse9CiO()h6$q!*yY{sGv|PHM`^&`cMJ;ocayZAEFHyaY^3X! zj94pPGksQ83V8gRX0V&m$J^6s+#veHhPAExO&4S4BR5I+euLN9^#;XKBhEoJ-C9GHFn&4t_hJtjyg(8uoZ`!@T3I?G*Z|AOVg0|C8Qq~>{`lcq{N^CSG< zaG3wOZrU6}>ba@acMt1suIIc7C9yy#pRh=jN~ln_u_-^9Cozx#W)YuQ!2jG_1eGLy zEC>rd+E#~Dg9e*>FgUrmt~GhG^nS<%{Cs75 zFl*FkV{La)@88O3bidvG?F>}c(asUz?C+dB282eMIB@XlRHGA^HqPe$U+^a_^Zx^uW6<}Ve9EcVS4J6PS2T(=(;t3Bnq=+x zWiGs&@Fp)7-jF8-UPuuaNg&;&v}@6;Jr(Byc=&W>CK`6R*j992WQJTF4UJrB+wUGu#con<-|ZtScX|+h(Y1pWBPn~hLV^3L z+=&kbBZUpryT`pNwtT!D?buo!My`vPY@xj;vg5Pu9wj0=S)FKIPL(P;uV>T2X7(rf zJGySy=L2t?&(B}qoFy|40>sJVo`UU-fIOonVhJ1QhXGMfP{86AOQOC?&?ng9__}AZ z3_Ij15aPhOBe2;1(lTV@$?O$YkV=w>Z`{e}QAa4hcbNh76X)mW*_2L~4tlR(@(wY= zfW_kP-5(Rjr%hzpyW0=FU#4_gn-JPQ3AqRwUQ7MT7d6%8rd752cvCGTy;xrz06$a% ztaC#L$N}rob|@OPDIz|{)9Xc%vr6~3vFc9QnOYvpga{t>3KJ2 zuFn0N%aA@Fs%jZ!Hm=%aH2)4^K%(1Fd0u)FAH;g*0wf*37|Q4gs+JNHmPMI;h(x~Y6L(d^`Kflboj`qw8;E;vQXmO2)AX?Bu z1W##(L#UZpf*T#$K7_VW;+~&6x-r{8ct`zpq}+P6q~S{7cwIH-Ql2szaDYWE-{u-$ zKpqZLbSugbksv}{*d`?*<*BCkCD^4O6JWLFNGx3}>LjRDJ}qm74lT!Qf1;7wnrVbBQM zFIQf^wxZ)0bv1eN(VV6Yz~007*2t~(>0%~m?FQrEl4ui2&V#uK-qacgRDclx9r9$wLRbufVxEvOl=|x}GrgJzVByGH?;83s?LE=c zWJljK>GJ7do@e*(y|kr4(b5ki2k^5G^J&7RLR1wBhbX^Mii2P)t&0RjE}R#RXolY% z-g@f!gP!EXUe&Hi*x&wcowl~kiXHbDMWDzeEky;MN+RN?5n+SN=V?}AK;Ltlcbc5J zG8(J?R=m+)pFYr?53U=!aN^(8PIV{v z0-cTKY*^C*TEzLUk4hw>^jn}b9bs_)xa1K-8xSuJIe_b(=|p*|eE#Nuf$E&`1UuDRZA_xMQs^Wj}vZ3tq{6gr*eeTI>ct zJ3DVIYBk-oC0{{rFh@kiDnme1Gnufc!%HfG^5v@n5cEu525uXk^Ao0R1upU-+te-cVSZ`( zCe60KNKW-Hf0$Nedy%n)=qf1#S{~*x4qmH+IT-0Tspb_C!y?FPqX#8%p^}p_NJ+_S zeAsXSUw5urRUN1-ooYF1waruVu}FnpQEkVJj$0z==>AGn+6xg%(*+m{BIG9eR2FjI zy{$#218!vzIrrJC0p@u(WAmlGN7ZM)zlKsuy>R*ou>40of9`U2=P%X{OXV@9Cz~jm zwX$~ls4AhNR~^GE>b93>2E9K9EPOXvItNbxrz<8RZ+C*dmM%iJhxric?Yny|0qzaO zHdIVjI_R>I9@g0H9q60=z!e6*Pc^s8dk0X0v}#nmz(p_7CTe82O^^6gSq;YTC*4AE$Q! z+?UhG6_U1myFmxXct{V3R1db?`ohdOUBc1C#ZS^+gW!la-BbP-XKqgjDfyaBt*X{B z?B!d-7sZ^R^=CRr<6a>0J*fQ^=OTb)rp$|xe=Pe7$TloyLF)a% zE(*$O;mNFf$e9{gHrII8X@O;m?lafTchHc!bF4 z@MsDNdBn}+WXND{#tf4IS{zjq^xS?pkMJQguikRTI;E`KpjI+?t~iR8B1?=0h=XCk z2|y1k@`l-tY+)Q})-v-x+Er{)5WJnW7m;Pzf;-9sI`J+(Cbu5(%^|E7(M@6-(CBEX zs+?G~CIcOmPq#<-cDf)pAvETILsrld!j7QzEy*dxh4>&%Vd!$m!-4rT&Lo{yVVB^Q z9lNFKMO2aL{ch$7&#R#EZ!Fr5z_^%5cRMo&Gh-8eaI8ObxQU4l@r&ZkiO_}CG30x+ zC$F`^ufY`e=DnH+8aX`h0dfpRp@ym1%@@oeGsYHIk_#*NDyveF{B7Ia`^;G4%2p+ z1w(C|2s$+0aB_i*Fv&lXeZnx9_Wc|qS&5h*2JRNCIBCBqu@j@wrN|9T8m6eR5y@6} z5-A}-D=Qn!@`;N?PMAdj^_5U5?v#;)hQR?uY7}f76Rsj`#sCjBYd2TTf5?t`$~sNa zz(+;=I^|ZvGF10OJhmKb%iNpeJ(5);#dfGfJ(Oqb$GS zN0@_UBi&&g^Y`V06-K+J5AC`EAw=y5TAdBCk;H&A~F6hHA3vrVSmDe#18!YXQx_A6I-WCmJ zdoDWIn|=?_ziMJ7LywCHb;IHo|8CSbPT=Y-iye2(}PD3$PXf&z?moziH*VKj%DD^IDHJlkdXGbgwgECBUxERg6hvuK*p-Z z%Q{A1K4^Oh;+w^Vogv1@-OTgXCmb**i4r|M38YyY_Vm~wz>BfiLuTTmyI00AMTKKU zZzMqHbFA|OV1@j;Pz5gI1+6d&u%w0{x`)YUBL%=(-m;vOexoe;LloanahfI!QLUJz zJqgsu!5Mb_h*ZqXvC%zUu-UdptRpE)gCLu-!vMv@8i^nVD%rbPx3XBQ)>gR%yM1sU z<5>|_(Sn!>I!tRMD699ukf_HLYaICV+Qr}mY?TQB$@3}%&H6JWG^ZWL zM*Us2RXvQ1cb^7h2zoCf>b2sXt$?czS0{9TX{^GxZ^u_dDEH{Fue}JawmyPaB4eVo z6GzbiPQnlPkb^QEqhbcvS5{T9h+sPD)Y@{4P>EIqbqh`!5A+{n0|8Y)0jK7Bpp&F_ z{TucEKkTYY9Su7iv6g=rn)y_OLsAs2=HK{IPM{RbP&J7_^`P2Y7zL`~C=sMQ0!|lQ;b&sP;J;{m;qyS2HKPiExK}zHigZDOw$o+2~q| z!?&^CSM~Ru^8?SF+(9aHO|e`T4?98N#04(;D5-E3Ch8nJfHo{=4=(U`LuF({Z?w3ig9d0dN=T+@M zKs?Tj4`nLz6raq1KI+H0C6oUtl%08+`7=E_q;B6$?M#Z$*0uV1o z?F?H_m6&o>lc4Fe=CT1dUJ%smf(&FLPSdO_?t_6T#Ngfyhttb`|5(gdDYxvli+!7) zHIo0Uhn@A0$FoA+w>?7!;8KrkwX}#oXKDswC+Yj85xxZ26x)yE%%a>Y7zg1L@UL#P zn|RsvKYNzO`jyT98Hof&p^8cw&QJJWwR^Q>>p zpe-BB0(WxH~LD;FL3o#=d@YhNM+AR0w{Nt?ph+s|@H)Cj!zK$itPM_@SmLY8k zl`95O#F2zl!8$q)G=0l_66qz(sHi(aTO@96$?6(6%);(w`shKyGs^1v-Hy(U@i=8a z+V0#SO9SaIhmmF1cpBD_wGAnc`~<`~6|y?wWEt`fXGGdwl0NA^IA+TrK-Qej*dHWK zm;o!Wyex*^lN`}imqUt?Nzkyw9?m_|o^ChO0H<6tc5`q2ad0rLrDV>bMun%7<2aT= zwm2-KkWfIwidF+|0qUQGqYeJ+otuW;NILykpNi5h?Z5h8{XM9gj|^bhXCVu*$UfTJ z@mu?+7ww@DoIV*sbOA_bTyl|@JaqW6r4C^27Q6$38dTwi+Dw&bR!Dl+jdfp-{j;E*M+aG)TH)g0@o2cVi)a*=b6UGA~b0j;+1F7$CG4 z{+ZQHW6R6`7+OL$XBi6J<-$aEq3&upfIzpUfg6_ z?ysoiY-4tTlc04+uAXs{b^7x7)N@=RAmm=o!+gb=4+HQK8A6g!bj68~q~^hFv-HV{ z^XpMod{YR^=&g(KBlt5f#`Q`y6clFdClT7>XL=02Ybna7zRw$Mcf4F)Y}LK8&i+OA zdi873o*Tqe9!-_Wh!`ne3x>HguNmT@hytq+ne6RVMWBd?eYo~Mq)dJ?`s|?5 zgglKIStTW)$q8dz5F(j~E6H<9(%*4sfT|axgy?1FPKO_H<-xy}ChEU~cZZ+&X3;+I z2GT;}ff(8ek-r2}OVAndcbev9(sd_ARRzG|U>6Sk@)APYCGPC;dYHWUuI2v(UG=+& zN)L7L?b{DYhkTuc<}~V7$-$aw8l*)Q{UfZXXjq+?)&iZ&gLEWrI~I=;koBktJ=G1T zPYia&0gtP&ALq&xuwDo1SY#D9d84skVix>h$!UixC=7*xIjrk-lJ%&KIh7Qv%?Frk z^pqYu7Tt0Ha&z-8N*;HBHHQWNT3(HWn&|!MCi%NAIkdwFt|2pzM!EPYUm`=9*tLPO zLyjRya(hxxj4Tih2f>d@R2{#mG5MGzZ>uuv4VBWG%+8 zWO*6fv#I~}6w0o%m_y5dq>kdqLIXGov)?ET<1GynF9ccMF{p@hOMu!aIXR*t#E@3) zBXgtxWtYLKA7GqwoC%2eLj-jdwjXpT-rWgnYq#t3ay`1L1FC%uQ=4%_zNfykMr}Al zTp5lEqd;a|2L{=12-V+j#i!7h+_*c+XbQfaa5N4y3mGC>(ymt`r8 zuwm9s?eqHL*BR8gKCk(A*!BI2Tev6&f|o_t~o6w zUaUt6XwR6y(XuKgE=yWe6dO0L-H9(0?TnYGz>d8y^uhzJRx1o(I+XdOBa6?J`yCdw~S5qnzX0hPIa2A2fj@uA#mnXZ&i-%uYn z#L2-%hhDd+U8mptU=Viq+|!dc#P)vz(G|F{d1H_@hQM4iyriReQ~F>STu zelnLV2jZ}~hos1G@r2PinO4SqmDMH+3y^?!K{nI;d`i3*D6@rq$OH^#SCrKF) zHNXRdz;B5-ce^>Ciq0?b@jS_J(Q3QDqngGNmeV86IJl2tSL}38?dI4?-cD8PoZ4p( zjt*6~m4-x&&+N40Yr39b_4A?=Y3PdGO=n0k;YP&$GauScEY> zQb&JG-{%FGC$j#@q;)c9wh=z7Ct?RdeaSz&E_QkB zOxI*U{?=c!V8^xE7W(DU(6RQ&a(*pAaeBhzJwJR(rs)0+MP(-{?s1ZHyCzb1fl4$V zaCp`Zr%r`0Bb`Z}cPK1=V=nSBmQb9-+UaevpN;G0l7u72_g2422mf4|vbnQU9RV1Q zK~=x~bdmWa^7_7}K{JKf5d_QK<{mLVnjpEwLmV8S!jD<>@C|(Vwe@NDJLY1Z-9bx) z2Ejb5p8ehKDhcQ{Z37=V)^V0SJ&i@X z4ZRHMsAaW^%Tk}^Jpr5I?C&m+l}AIZpO`pwR_F6h9UszZPerm`;PH9V(K~aDKi720 z6&58NJrA9ga*6!>?lOOWApU&|PiZBJ<^Hh6bbAmLhAvTHois6T)cn(avjfP1uB?7} z;SmPfYTi99WECP9cvlN#6AIRqzRZ<34lB5Km~fcZLTh*1SA1XjZvt@WT9Il9IP9M{XH%3@_Ch;MA;3}IVYI@Hz|WSquf z93<0x4`$6DGF1-aw*pwMisVwq>>_v#O>V+3ENBhJibMLF#@$bb#AYATl`=);pRGcK z-A}u&n$zNItrOTW)f=BCEK_z$7q}YXQPH)^B`SZTK#3t<6oMIDrzTcz-HEWIrP82^ zR>$DXKema{U|ZQ?^LOWc;u>`9!^jB!_}!GRR=swL;39ciy%sRFiHTH1@CT}i$N(P) zEeINSh)8h{y?)NpE*LWKq|cW1i{<8%t7*D=Wqkc0bKLflr5wM87-5Qbcf!Jk*zSHT zVvg8ITv<|!IGaseR5~8gA{=W!rjRbe{^8D97VSiDi6}FYOIcT0i2$BRn0cyvk6zIN zx>(e+&Qm$c1{*NWk5z#{mC~i*zK(qanJQ;WPwS)jSei4tRqnT<;JNuz* z<9lVgi|$fAHk7FW%lua77(=o4*Gq}GZ9UM?dNa}-n;1aB+Y}m}-5NcSh{NpwIELFg z^j7EjZK@X7pw48sKblV~YQ*7!IaQV>_g%@%?Q-!+EW$1lF|%njOJrD|mjH1sp}AzX z=!!Le*EE$HWM4sC?87={lipCnU_qh!ix&B<>v$rYl`GTfD4sU5{JJLijo7dyJnggE z&AIU@X2xXG(+oiWd?Y+|SbW!Oe3!|jzZ`A`9X+$ud-mz!wmsE((Ph#4MYXInd{&0DHTkefP-1=!8lPj zv;Y-D2SC^&nQ#~Yb;%ILgXfc+Ip`~pINZ&Qhow_O=YxAmVyOCSBB7-Gz&l0xX#v-x zZRy#4Al|oPoONCDd{)7E9{Y5nE0QI*A7o)>p91KF+1jcBdFWzHGZ*;se_kY(!~uVv z@rOR+hz&xVlC5VS;XggLM&vJUQvb2E_gEeo2H z=G5gHVB;)?0vAF)O4YXwd-7%^r(+_A3#lNMTS+la5}~8~oD@Y%|MvPkOm?>NfA1n> z3-*o?>?2J>$(_t_l#AIj2y>2mpZ^XOT-8LPBlE`=m91yehaTg?TgwF@-(0IjNCldP z26R$^V?#><`8+Y?*g*yKmqpgi=DH(I4@GV%t+}a&z?@X>UaNz9uEMT0zdwAOQ^1bk za;Rt>`0b+EOzkVDKPnc#~Ldj`Cq&J6!~r7DzT}n zN>;4YO@6>=*KbqDP{RF2EH%dDkv$2%cUk7)&5xEnd3g7)#tuG_BizhpsVj}(k!0LE? zqE?P=dd|5g*TpZi=9$a}gvoL@W$cPLI0A|NdE1cC}fP0*+!2HNskWAH9dao5WkejQ^fmC{9V40<>yuI zOupBq;nYh^0G`>g&*fsWoxjvOfN0Md?mI4r>rsy+cgo1=c(&Ye>nUlt3&V$o^{T+ba6@ zrz&3WJv+x3w;wtUP;XJ7y}+=Tc+=3esxT1M{9C>cXS_fR(n@#p*-K;$@Z*dFLu2CGF4|^)j#x;q1oRz z7pKV%ZGDE=nU%>j7aaj<>NqExsI4(@-iF2hrXTZIM zxZB~2)JLqfjND04FbP#&V-z|?OI%@g=u#0y!}pIHaR5P(r-Z&>l|{7e;5{E^S()Lls<+oQ=%xIXT{smJLZsNYUO;+?c1KyQqvwc|`ZAx{ zV8fJ^$%>(XIdjal%X~qB2(hh{X5_2~lz}6)v_m&TOY)43%9Sasl zMi!8&B1(t@EYa}>@P;PsU%?NrE*VP=&QiUPhMHqEU{bUb7&D5R#QsQ#r0=Kj;5aZx z#V^JLk%qR?Ri}(oq+>}5L(!y`4g1#+5h&J4c#`QD+XEDjghrt7g;?U?Qu8maFz?>EtP z$t;s*9Y(;M*p62%rJY*&T5Z|0pZk%pKn+ARtZZ|={GPbTyKrNya;E}WXo(8ivZqNFY%s=3jf0SdYu)w-N~qA2 zpuGnH99aFX@aLBXxoQ2z5ygqdPZ%ypZousausg&jjZbN+c$XXfV%Z`TebdAUWP6B? z`D(e&UjSXp4rsFVTLWc3h{kzwxfr^58msnFd)kASs5DNKrS?KkScVA7fL13O@)61* z9ksCoqaU0kx>)8BFHvScd2s7)B#aADk{2IJl!s%HP(Mo&VB@1&qT8^1-n(()-s}@Mfu2gvBLsy*@_^CI ztdc&!E*H(;&sq2v&Oh$%;bO(9oMGLxW@ePZ>+O-89KB)pxEuZb1N@(&S#nt3*%UMo z(7WRQDVR^~q=!UHjl-aYF|)8WwbRpc{@)CW|E4tiN?R*-vklF6wifX-ZvC3gXyLl)g0A(SX`xf9<)Dm4I{1bawE zS(TcZdYakGE%BIrcefWi{qyW$$TS|1Y6bu&rSnWQ7L02N99sos9^Wi4r7#y?HGGz8 zS5oI;{`KaXJWX%+p`O-p<`P%zO+%$|(}%M?h66_BU*?9m zWMP&9n0tyHX#xd|LkW`pZuX%BC6bTZgp-3V@gKXi+Wb~8@1PkU^Y(XU56<&(z4mMX z?3K(TSdcEU#K&pTRg;2_(5zHwd*H8W3Rfn(l&CuST*Y8lhk)QWX ze!kDw$q${l9^C{om4bz%-j=rB$T4$ufP5_`M!3sJN{6`V{^|xbE?Ww=Ryk?&$=}Ur zG|@p9wH17PwKcF3tO+TB1lpPDQ<7Q$8(ImCS5y{;FZ>qul33{y4%~A5KD^>Dd2F`bV9PCWN;cHBCk^@BKKN< z?C)05b+*?RbbRzw?B09;>k&h5IRw0^K#I`t0FO%wxHE5X47J*sy;*-=;#wiI8LBW+ z`4D^v4sqvhOvk`hOs?MvubKd;gPyIZ1$Q=-clu1FuxvvbFvQqZ-UyiZ_30R$qs}qM;VXCh=Q8-=^^|;W%I#gjJBM0!S^9;W?qC*I(_cYgLNv%k3BAR!rLql zh}RoqQ|ZDsbG$V@V`tDF=V63${KUnNjIe>z-OBs&YmP4F_wDpCTpIwtjNOEJFmlf~ zt@wPt&U@5;Co*q)AlfgV_<8;EsB0_Zv=5+*KoeWDn1XMbumA=ErBzig+g9&RQyw3Qkihulk{(^h*N31VV*?2+X4nx0bR5r41qJY6rq9~k~}?3L97HKi_XoaCiOp0 zUOJU!$yEP$1w2<&j|{m_p1P?SxUp6;9rk{OSuimSvNpvzaRLB3hZQtNfD>e1E{Z06 zdfq$i@bS}fSZY{Td1vQ8N^U3ya!qDumDzQ}q$sY?>sktENLhlAQm9cNu%oZ**}C;5 zhUQ!y!lC>d&vSLKHY+gIS*qW^wI(za9;iA@>8G)z7G~y}mplza=nNthwp(-tl=*U7 zynnuTYQX-zH4K3M-$&pcvxn@xm#=tQHJE6UoPW&({cxt>M#qR?qec>*u=9}NFjHi` zT$zEI4Y)=SDJO}L<}}>RiS`wWDXK|m&u!x0Ex7Pfmq)kSAKZ0Powk>*J!%76*DwAe zW(eV08Mi4(BmTjv50Nk9=}yljnx7f`_yKMnWU?n%ssT*4+giThw%<>R*2EcA2BFn2 z0ZEzw^=Wz=A>G`nWS2y1z=iI)Gt6N0T;VD zQ(G$`(v7mCMjaXPUjclgm)T*Ro1?APU6=0gx@n(Nc4&qoBv)n3M;} z{|8;?6r@?ut?9CD+qP|VRhMns)>pP|+qP}1%eJe_nx2@LIrE>0bFnXT$KDz7uFPDy z*82=z@X=Nsm-uGB9hkVLnM~Pz+Dr-mO-G9w`;+Csu72Ke#PD_Xy@0{U`k5ujZfC?F z)nQe*lpE%$MR-C^dX0BA<+Fm|^jpr>$dEqDcm%%yAfY5vBU;To@DO)kE$H$!x!PZr zTlQ5gaGi$tcSbFQ9(}7x)nST`Y1~@{gZJzYE~;5?xV!CEK&3tJ3Ic7n)XEqibBs%k z>}J8$FLbNU4!|h3*o`6njY=;|Z&WTPvY0Qb@Z`=LLpsFJ^mk6pwv`W1V9>X1MpP*G-5^tdOsu;c1KFi_Fjt_p- zl^X>5GB)45Dr9zKmc=fH6huUpI|_SG444QV033sz&98Yae5&6xq0q|@tq|v?b9^|Q z&9w4m)-YwE`skC-aL-1|-`t@|*`%u9;p0Db7N}zuIs#*Pl`IUQbpzBO#7v+phIV{9 zgD8LKlznQ6nkM=-TWF|x9D?6PlJ_ii=G&mJ=_{;u2-}FmJYhUj0;1Efu3?IPGQd3s z0FvG4u6~vDwAhWFemRGp5Tk7HB)y@HVjMSeVu^ZDqmFY~X|Utj5r^Mqeb`e%KOHH| zND`SLSoLq*qKnHWoiNGi`v%Wijbjvt9i*S*rH8dnNxC{5u$j{`2a|(biS%uGif~A( z{fa|`vu1x1P0S1_Reci2{gUf^-x}x!sQe3_NIRJkx`ykMmOFfP4OTVzn$(bGw7O&k zxg~J9wRG7yymD*zd2^gM;Hz|~b03tk_LfB_Po7H4_*9=D9{+IB8UWBua z(#TfHww&HSz($)c7xGBf(zCimty|+~V2(}3^T39iqR-dJtB8H>K$s zbUV9EXVtx{y)89#62pL+en(ozaK z?Hu;n3c1ZIw8cZS^X~&o>YkC@)lzv3Y`U)h5FD=F7-A+_W|V9b?CTx4U`APbf|TP< zLa3jcuR@llWW{kZtaeHat%T9u>VN$=j}_^m?sPWre=UZ$glYRx$mD5v;s4MW|I_|W zb2qMt1Ie$i59EISugk_AEm^&s6JiRDYUguF%`&IS6|o~GT+4*rbD!X5e6XB9Ic{yu zvhTWT|6#@)>!ati$D3zf$tbCVuyboBm$J7J&=7ZlO;hIQ{l{IHwz;M2aX=LK9 zL&gYIqy==w_nczJBNdI@VL)S1v}G|M+}6zkl=gA#ciyj}JJ-jpR%pkX zW~&m(oa03=Vnw+^xH4Xl!M%8@U)t-=f9VPhw9ytTb@Vz}H0^3H11fy_nh~04$dzJ% zs<-mh)b?xhw+kAN*f`>xuuYinlGaHN&_*g;Zmkg_@X#RlK@Qg;cym8;FZVnE1cBEE z&HWLV{(uvV6cF+eoZf_M8PhT?*%*lf>O5Et#^Vjd%Q_;5bKA4%NHqSDO&#??%-K|> z%aRiK?5l|sWr>ukjWTR{$F9E9WQLm2;JfSgZ)3oQ5ewoM~bOADfVgtIa!P@~cyQ!c>Eb$XqDU8bL{GB1ry ze38Kg0{#1GvRKev$RkjQ#Odr1MEPzk(ig|bU@12^#2FuYZ`Xsi8LK(K$I)u{@0~|K z3fPTx&pK6vS?@~~JiQuB8qUtD5FFJd2-W+k7!jxN`JwM`jLiSMJcCCo(9eQWe<3FeIYCYl>7ku=Zbf8lwEo44UE?#bRH-O00ZirLQi74VWH&+SeW zFD^4aYkJdJDoLnB*JorZ#_*bx1Q6`BIKm2{+KR7fRLx}sz>>@;Oi=y1N?IFuCi5L^ z>l-E4tQ(swtvE?{sik7tb>=ca4^l(KH6JUy0UQRs>%9H|n|!z6i>zz{Ts-~@-;q_H z`Wln=8iLbK`~{yVZ{DuHI_`Dco4vv#PA?CRt@Irr35UkD<0I=Wp6Hw=0yl)V(qhQr z8T-!08!^RJaQUjPyn$~eb-HWqJudt!gHMF#194#I>!7A$S@8@?D!D2ax6aFo+^{Pt zd#;HVys1#v$IjdpDp3~KKmurN*Apd!yp68C3L{GDe z{V#*Kw7OVuY0yk;&9skLa2xm{hjJ^e73q^&c<0uEG?zGV3V=t>&$~JIlOGm#N_9QE zRLu$AHVkR?V);tt@rE4|^6IZ1MN@?^=+GsB6M^Uj%1?4K_f{Bqd#JUzqqrc3An@3S zUlsUK#Td)yoTD&2&cz!%U}-P3pI%;`>`!i0 zxWOVYv<~#&`v9+-I^Wk{Jz>VYa)sb^Sez|J zn9;&gV;?}Zoz%P()$~|3wWbOCVtV}pgJFLD;hf@!rd~Ym3xYs}U__;*(4mnk$p%Ah z2>$d^W3US-VakK3y83FE6sTq{r6x~Svy2bHTQB57 za16m7QoT}ltS3~%G*446!xR)&>t)o;L_`FQJq73vJ+(`&BUEdyko4O9^VPD|wwI}z z{ML8=Yw16=OW6Kd(Lri7G^CL=8ffYBp>zt z4G#G8=aN5rXAj=ybA8l(_PyJGXV!Hn!+$`pc@F{~r(QCJexHUWPUkPa&v^<^7VZi$ z{WQE4m_}+;*ywvth->3cvDewQFG}@{4bpBv(vWs<2r`T4oFr%E0U- zddlIXD8rlf`6zfNRW%0F>>^<26A~r2#NcJt&;uf$vsWU6@Duhw71)SxQu+1|nmCiT zr$BBD*Kw;K3sRNNUYFjSKwm)l>m$6Igm{t_zYDJUMPAqv=v6t4`19_0)RC^H$RSfFB=;Z&xBWdJ|1-5gaTv0= z{r2UgKqMt(;n8BIUGfR&fW0)8wv&!ie0|dc#Mw~&UPMVi8JWn-w_Qq0H7hCdp-wpt zTH&EWhp1Ed;M~&wq9>tG$gD9$AMH>;H5ug zoKm4kYz@!p)sC!Ps;g1hSq&EBT*FB84Z^Z^xpGPXD{yIl{8;KI3n^-6u*XESkDg#p z%T7q?w4%Dxp&Ba9u0j{hNlviDmjfctI>f{zE^``ZWnJ43jKEj=5- z-amg!Kj(0nJnkXj+$@BeJAD{xYc4T8mk#RmU!U=M%E2HfX83D0B&w_uc!=2tmYYxv zyM+Ha^=g*J(VH0zww|`vUU$a!K$L0!bneEr5g<4e(DNJ-2oBJ_V}a6hcJ#{RA{m&DZ}<1=>ek6z!Mm35Rrd zx7L*Lh^Zzc7*C71hZ&yOf_?W`KlkwtcOt5z#Ttm&3m!n_L@Y)mdWe4CuPlEdh?X?O z(q)C$K#3vavLFQ$!;F7{GyNga#%E~_<*ivl7y0<|YtD-;j$AO|1GvrC)&1U`h^6ot z4+bYe13~RWdBByoNHr3X{YfIz*rXv!kfw1)jzQ1_t2)SMeUONS!^Zk>~}##CH^pmJhFCD6^S8PnZ6z zIHf8P##MA`Y6@dX3<$(5jV3R~+R*1daWKxeuzEQwirPY1FvwKJHF!}~(;tLySd9#+ zkCe4QQBn=-F&J?ehwspJ0YlK6Zp}Rv%k6^4ls{|F?Q$rSoy(F-y+L6-!7N@6T8mzn z6N*3DIKUk3fKd(;Cz8UEhPMThsgo=JI2Ouk*8lsz*`V{rW#NkNb zD`pEtC=g0`5=Ac9im?`IcmYRw`5>>PJL0&SJa=V4nYvs_T{}M{?F^)9YMH*`;-576 zvnCJ*rpFubK$}z|M>$~dlRC2$O!49SBD>Y8hwC(e57O<*aULxR?UMyI9pU5LdQFd6eu@wrJ> zT(*Vt^ZK1#TQnM)^^{NZvmsx-S9@=g3$vv{uX-P22h!7p)c$%3=Ji5aA63z3qy7?m z&12nCrQ>ckHlJ?UF_N7om!%8WBoMlLztzbS`58U_*9juox^74KwCcE(#6G9~mil25 z${N!e%qQgheL;6C`hLofh>b2><^Z zQ_L^3p#ioyI=^@HiKjs}i?i0d^%vLqg%4VR7mF>FvUTzB;5?ozNM)B2Mk7AiK*O-E+>_-oG6zA4_}iFaq*?8J3C$$}30b5D*1@-(BvY3DJ_4 zM8SagK2I6#cd`E^QI`FkBn# zbO7@qLB=D*_DLt6HqorUk+nz$HD>;jGnEim?3{2YS3M6MvWoZl_2_v{G@;_hqgr-j zaR+!H{J|nSlvc!tA63pNF^i|ducSu3(P?kAGp)$s`}^b}(Oas=FQ`LpbD_;CJ(rV{ z@=N4pun(S}FUw3-%iXaB^Yold=UDuk?K`v5hRMFwldRdhBO$BRFUhQpJ^h3tOG|w= z^X-h{t&EK@a=`;Hly}+!qXHpzGcd^E=MAubRS_yhq|AeAE+B8lYADy1tA=UJnZCy3 zY`!6fk)k8OkGtFi;Gr%(+;{l)Dp>a=7*qzQrqrOeWM5vzm8gacW(H0+$waOffCJ7~ zwYp#k+f5>265jr5g)KmBkR6*tycCS;Vh8z_?LQ5JrCSDXh&!dp>a6+d?k$1=*#r28 zM2paa1&39aZ)l0cKf}!^<+K$Dpjp){QH}eTR3EF%UT#GdPNLhos<*0PLskjA(;VI`NAeq?S{_NPeWaU!pS3J zQmMiWyoUIL z)BE|h-StA*rz?nlMxpH3Mx6WGWD(&Pi_(*imTCnVRlsmLA7iCh*Kp}EmolbdET`OU zS~ihIG1#KiEmc}LY7p8eif4bfYUY78<=IHquDo9N``X=6-ai{E55O1PJ|loxR8cJt zU6_9E^g>xHCQ(Br^qWH&qg~Mywd_hAq%!S0=5oyS??f9`r&;gN}sV(vB4AWRyR|3d#`oY=62E*U)ouBJ&KlK zTP?jMRrdh&zDT&>$M-cO!4QyovNSiOY#fROALZzpuBEyW7be>(Qct{S;EI3*9$+h% zAU9V?%q3-H+?J0)2+Jd|!4p7cW!G-;uUBMX&%w?bZ#E_d;bhG0&>1RaR7A5d24OvQ z1E#Eg3Rv@fSK1s6Bw zvWgXBYPc}n2!4LPU;iFZ^}ByAOHxP7n|R0JK5kZ^dX-oX&I3d`g%Tqm)T9XO?IV;9 zMRD3c+b>Ja2Wn^qq_~7L7iK6ZVC~n#oq)Cz*gw9m>ziNIKI>MUll{&#r1wcYIW8Le zjdI!eI`*fz^5-NaYnTxAG>8t1-zys{#Z)UJ?wDNg<#HJ{x}f(-OwOr*^59sF-?1GE zU>^|?2u|a2J!VBJHA(LQ+uOY>7o~W>1wHj2G3_6K{7+Yei zb8xUa^co^Z$Ixp>I0F-6drDk6&M=?b2q_Bh^;{Wwv;sJ3g$_tRE(v*`8_7w}MpRQz zRAJTC5PH_e7MWFUVXBcN|DBOxpWvqD58-5O=WzePSk*m`(agcj{PoNt>|MFbt@>D*9MWI#4CSAg2RDi6OyE~$EbAl7p|tA1HfAwq^Np_3G)WF(@6z( z6Ich~PajNll3lfbC&E`Ry47us(+SEydTC9X|6?k1YHH2yTF$+OKHVIzk-676ae-)v zoOB03aZlk7i{PNx(T)bHwM$;em0X6anf1Lt)!N`=I>p7)n&wYvDX2aK?j< z)5*qoiBGCIIWh(wlF&ZfPi8*~QXi7U+x#%tqlwngVoab=qFAD2@z2ZB^&)d1Pl?cv0p8oJ_n6e6NBBroegi(n-ZNa#f=EZ;nwH)X4;g>C=!#50Q| z0f5ZoJTyBs;cd*H@efGqU4E&Sr&KLN`X`F;UnB)Y3-*P%AwLOEt^vA%E=P+?imsf= zvlgF_rRoDJe-V`%ywknR1B~TGqo^DQY7~c|X&VNG6CrE?+Uc2lPipL7iMOr$u8Ox^ zvh6jCG|uipwz5WHk-Y;S8B=A_+ZqoRxd02nS_)}ZGSajdLPD~>@+gzySl$(%5I;HmCurj28Ao`$(?IK;m<8th+tEAtq=U{R_#^HDF+&)b5*w5+;*pQv#wwo#Mk+f-P=JE? zVb*~1`C)7E^nD%a6TAZVqyyws{9uoAH_gzs)oc6(-l7I)>YZty#a7Ihp<)0Ju4rq4 z#3!mfKBsHbfij3@;ZkL^&p|SFi|lI=Nz+W=0ZIq<51*jUyk-#>49049ab~-jZOHsdAF^zt|Q%YFzBdHk|A$N+UeA$`N4(l7!dim%=1zF z=Z`aT=2v!dkrB>OfZLqb;f?)u5x^QsASQ;B9CD(_-O+rftl5Q@ZIOj~smal8A+i1Q zh=TKyxXJoQfWHqik3gZHE(HXuxCXtS1=7|;pB68XV7o{&J+sSfiVckiC%Ax^eI_uL z6W2}Ex1=@yY!?IV#Sqpg3V^1*Dl^rtDkdD!OxCX*1g6@Cz-K!hHxP&o1*c5ICDSiD zRsR&|g~CU1FjM-OE{MaWmq)au)(!UM$c*s(8_e!aFsk|crzaOz&02p3TNZvRs8%T{ zqO)AL#!?gATzcC}2@>ss0gtRNEhaLf-LW)UmZd~jZ55_U4dp2T5rCQ%J-9n97dY|C zg9xg|FRj-xtty;}c;42~Ve5$Q zFID+ORA;xqlp)Ry24IQili%;{@$NXPZ73)x=!7h+q;RyBU!&0ibNk&Iy8-QqfUZLN zhHuf9Y5}C*V8H1Btwo?cC)gUSdrfG=dpWXzt18qG?zR*sZQNx!juBV1(JU)d_ChL; z5#+ahnXcb5?RMghj=gCT|;U?5)?b9fSenI7~eCJ_}=3Mh*-Hn}bW#ibhVt3A6 z*GAx;MBiv125@xQ#I0)i?3j$r;;VhNju2dX2dsS9AVp2h%$1tED)-chF^b$ zJNup1R`=Uzr)fd$Xs5M4l>qw+>i%gPMvwGDd|4q&rcb7FA0|hu7qB)S=svag~0=u=8sq#k^6hQ5%4>POwW~6lOdZf1o+KhS-2;xax z*WnL5WbP!7?>0#Q13q_q#F({wFMARvfrz`B{_^hhone2NBDCJrrRlr52h|&c^V?zQ zh3m8+>GsT0?!xZLb8su?8(-IxB}OB8qXX8fMLft8Cn8;X`@$rr`hOIF3FvBOskqY?_MB+<=rSLf+ zY+Z$4Lr=_HI@t9NhlwionVA!=rq{zM$AH2|>Gk+UJz!naY%i2n7N=UbZt)aEvat1M;I4m;}`X)RSiE+=^i|Z z-Wwt*bLQOR)1=$T^sWWr`q|BM3e~L9)S~oF1O@#mVC|Qd%db&waF;KPHuMGCMu5=5 z-H{86qo?Yo#Qi%PKO)>ly3R3)tQ~_aU_C7)@w-X?Oy(K3&`7fT`f!xif^T0>hPF8| zT%(*?h-XVv@Zlc#zE$y!={iyTs~i+`F2Yp@FPf6~^j_gq8Z>7w9xX3>8@D^^`<`L- zZq_}}{TG^niVQK_ays+@+Z}|V3?L&Z)?RMz^TDI7c8JA8y?br=nZK6YYxht!Ne7~F z9XdV$VgSW?7zG-7G*x>jxgQ8P3^cVZclY5q057ip5^(~)r6iE;2)-lP#J zP_r_)wRi`Z!O(#_+vwiG*{G9_$48i|EsXOy?1X#37qaFAAauaW?WxNVUA5n2r9P3QNxoue=lA`CS=!3{v{1jDrEN8l!G}7 zUI{P;{t#$kCU<{DIVIs0~Nvmf}0iMJ`DEW z%w4D6XtFZBeZPYCpTauMAdl5icD?go{N6R>oUqSaD1|Twy(+4K{?Q%z_f@$4(bEE< zCy$3xkDoC2ypne5TW*NQOC_bhwt6+_;rZyJnXbl+iSKtXzF1QCqwhL{N2x0hI!cxGzL)Hop#rk%7eg345n6D@gkW>2*h z{&B&ks+{cCL7#K&0lG;#Mu_cMKGxzH7_-vXK=u2AanbWY3VZE~PkJ3;lLW$%r{Y$w z_B;h8s|n=4rqyY-WoFad1h~MT%G``8EPB>7RcW3*09*wx>Hm03H#lAA?rZ|~d!gc20R}fp+oHm@RFQdrTD)yyx0E||pEW@@>aw~IApMEV# zd8M~=f(+GqKpl3i*Ng+F9;^gc0U@Ky3Nq_vtv%o#G+Rw#3>OW2PNL~kZ;zR+fiS7Qa6_kvy-0OnWe9f z-H_$SpzfD9;KE@=S+YyBFDO=oDEvvy5sJKQBgr7w^UPox{~{6X#nf#e1-O;-S=*}Q z7>H8HzA!G{qQh?Gi#MG6 zFi-!{x9i8bJ}0-~p3{FQgtT?!TM0=gQs%Kx%UI~vQRb%B%V5UPi5hZ&zf!6>$$vTzTX*nPEQ07~(=C$5=d}Oya6~ z$JVJdy<%$A)yvT-S|5UKQ`A;PLLV0=qQZkN9QTZL)drkHvsm ziO$3CuJq3I5!L+WPNS}eVbxPdGW%ZrxAm%OfD8YXg5Hgb7Drg3fV54*kvKYji(~0` zUpMWg?V;4*?FTIs9g+#Azfg#ENSg>AxVjcH5{Sp7Pg!XeZ3qS2Qu4Js(l0> z!gRVk%$a%}`YHpC;%apG*|(*02qX5h0B{NY5P0sHGg5RxH@8zCwR@ykwG z^7LcQ=gt$8Hpvs3PiKT3*0>+gf+o2#(+p{BUC?;TgZ=uU1%j>vPn!LmEH z_YSz9v~Tj2VB`;OXJ*DEf9~)uK2;p-)Y?zH|6Z&ZZX^kFIgee{39G|x6?%F{{5;o; zp#Q?hWzWbj=Eww(glAt>9(84E1Q-b?z+5_|rGFqLtx3=KJ>AO>A3YhQwggPny+%G)#R5g{@z8=K$+J7%6R={brBJB&XNbjKwDA10 zNbr|y^~_WUrZzl-OUNC=w+@l`9rA8?DgeOz_IC95=lvwyPf*wM}#m?`T z?$4Bfj2H}X()@*xt{)XvlvTlpn!k$s-JkrTy}ontgze^B)k!ebCLVKLEHf(g3uub4 zRI%7v#DQEx2*{{NkLYT+7l7jx;~z23iUUD&ZQUUVWhgryb-KEnS+9*Od_IHpYisS+ zH0^rwk>1xX(f-_LbXVD?95?Ix9&-=|{Sg7iUEG|g>rK1^A=`slf!kaA7Pd)v@58DI z{WNWZO{y0;l^?R}45IYx&G7ucgYQ|0?_bwiS0g=-EzAj0t(*?qm;n2n!OAKiQX{(^ zJ71gL*B;7Jn_gD$EjV1Cot@cRov-QRG!weM&%Ik0)LuqynU-N&*e9>ArD9xF@I z_ZCfL4+^TL18`s8*MZ8P0n0g`-h`-+CTrjB0D5qcUCuP_4-5o}G5ibpW8;){iMKe! z_tF|hpOG%yT|U>TQGngftd`o{I=-&?)Jf*N$0bsq(c}7=I+qcPEbL2UC zdq}^S-1==4rFw&58}+hizLWpM*B_~cIU7-*C_BiKT2b-31bz8Z#(A{6tQ|!oYm(%* z*!%`=MMP0|VEe$Cj6-CF>HxJmw~RYai(7sgC*t$>mz{a@31AxnH@n-L^W*q>;;n9J ziJVTOBak2@_3M~(3}TN^VD4@v2I3xjMTg^#E)u`ouIBzTT`T}<~^By zky5-Zv4R9!o|xEV_7-oK-0GXC*x9ilAvnb{WYKKRC_n_RF(4cl16%{aTM`1X(aLk?_7zxt#c=s{1uKOrHwT%_Mb8c}DdQXQ@ z8AqxtC*F3?Mx&zR!OBeSrnP8@-L~&E2T26vjOS37K=lkdYs-^HZo0NyS0kp7(Sppk z0I$kV0-#FxB4q|y*2CGJSzBX2p&2Jo{%)bcX>d&kijNA%r9~DbhjUBr=d!_j23(!{ zTnD|H3C4&F+AXbs#{Z*Aqo8`ECU18umL0ZS1j&vnf{uAs`lx-3A+|9ow_IUdlZ|sp z0yr{bISwRITCMfAv5i-7Vn+Ket@S~baZS#s5&XbSEf!BJQxF0XF86PZ&q(!zjBKv4 zql-}FNa{)&r%3s~>tle<74|xj#<}{^b9D3(;bg|L*@=!4qN-0NWZ(=oLZI%$K`Adl z83E1gLRnSkUFVEz=9s6FvlLb^&Okt_R3MD-!%V^cuuy@hrGa#=XpVl4U(Z*cYt5_$ zer!@DZqpi|urk>Fs?7Tq^)6C|(;h%^C1iWz63JzQw8hb(T;V`=Y*LVVRtq(Cnb9H9 z5&x2H!`BxMPR-bNC}Z(4fl11P2{49X4FD!|V|1HrrLpLzvpM;)+t?a}J-4!iwNxDc zvD5^iJ=RPO@QjNDvZLhZas;lE*6O$|7ChV=$;Op(S0g9i;#zpbc#=QTYx ze1IBJ7J|2<9Jl)mX&H+XL5U3j6IHkrjHn=d61M(UdIe$#ks1TC(2VJT*P$YLNtx#0H)#!H39gJ!l(XILJ`o4p+x_zhBDRO8=HHaaa?;)5tea9 z|F)Ep^ibeJv^Fu2nfDwF{=`~h?6#%ws5S^tNKGjik|6M-0y5(FnCChm1n9?{&Fv=W z4q+@fovHXCQ#)L%8_3}nShZ2)`;(R6QXHz#pw6crDaM;g3&;aK9Vn3P6tK5G75>KN z#>SmaY>1Y~bc%$e7zu1fr5$h?drA><_qw#cu&gH2UyMYo0J6XyC%G2PWVCN@C_P8* z78(A7?~t%Rb6Lw9buVwGysN+a==Zp>4e;x{kIMUg5d6l(KYM6sAgk*Q?$fkt1M}?;=xGnQzJnopj&dkSUoem00aSsL zh0{sx$ju`j6VhIy4x+TZD{mbS?7I7Acf}7&F01rv?Ed=N_BQozq!o%Wlp^5sW8_Wa z_q7hed$+CBCKTA4pPtTSM~!U7b>(;We50i#^0|>7M%32d8!J?PI0g~^9Z_jEFYx}o zsPF~^57uZ3)ds32x-3%$z9hP+{+PKw6*|{ki{paRg}3v!e;KBKsecq}AJ(QKSp7=^ zrp5%BRgCtG?ByU2)wX2V#1_EHb^NAcbtkO7K-)r4|JH0uO>YIjZyGyOs+^iMnREta zHiKD8G`JY8;@Gk4)$Jko;tueZ&7yDw81`cx}GFl8b4?!eJA`E&z!?1OD3wTS;wC&FFp6kLdTh~j`zndyA20jl24Sp724S6pC z&dsW`3-b65{R7Z9ctC0jazYI%buR-r6xzoOf5_d@P!mOnD~x5zQbm&} z!jYv>=o*G{I&k#~bmIhdY+Xjh>seh5{luZxFLY9$*!J9U3wtDX)_oYe={9N9ZOZgg zc^Q-gm{mdzr-?}`WXU9HOqb(l9XFpAHsi9GLb?E~sxrQygPwcDq`jDQw(JG6?wRxC z9O60?V4YwvR|bXk{$%^p8g_;oeFFT2<&guH>`}(ZrB>C zN*Y&50`pUqz*=2EG&e9r2I~KrOAF-sbauCUxi>;9ck?Rm3wat>ZO!&~_oOKa?51UJ zsVSRxH_JwH`gMcqrtmlMGSa`xhSiAM%5f?CrXXtXQsJCCtD8t^5j)T*6?OcIcIHyu zk_L9=s??GV@u9$MRl9jHzm(lJmAIlN-`zeP`#3oE3EH|K@%el4-@-d!4S zlHh8k&Ax~Li6^jyyh=sCOWvIF=u?U<8a$qC_6P;v;h zGj|dxbqZtc2;2F#$v+C-6#!5;@Jm*fzpW#NH=7GOJH6IBW~%IuEe&?lPqg!N1(Q$i zTso#vRNRWjhc;V2=KF2BPCuUa3IB6>TFJtZNCOOmOa4EY*vv3EEC`4OWZK3kcpc*Z zo)cPP(}GngARwb?kThWuUedH58Wixf{xNXm|2rtnk&Y9!?Q#rU9RvX7snqV(noSvz zgLZC$C?p&9uSjMag2fj&qGIlD;yiV*b8sy=Qn+_@i5|!@+qIu7IPhTR8fx^3DqxPFye<%?_1%< z@L=suJG&W^#bI}v=1qXRZJqy2)x(kNMdQtauLg8i&&v~2+l-;n8E~u)boA1e%o*_* z-ZAtL5R&A3KS&wbw`mSpE;LP$`_+IAL=x1SA5H1AFO0|vyE-aU*!>;O@!7=qLsCMF z?C2g5&MYw0F$a+-JrY@WjA%^(7TxzhGNbyM+`)v|(_aIbonZivm(j!L@DV90D-n5h z+Lp1TCL1uCnlMT%UuwAV-}`XvNs2~j3{wQNUQoBc%V=*E)T1S(h&vLL)I8Q0hR9fJ zI+gkS3J@@ETg~1|tUPk=%&Z)@sE;o<7fdYAK!jv_Qz4eqmsT0M%8FrwnXN7%F@oQl z90H5IPl$7iR|9}x0;gpIkVlkYrAes@E(DoK1Mt5D$xs1)bg61lrmWxqEaf&L&_C~R zm~)Y)Ppy@Vl|}m&&-p@#+!T_`T)85x2HZ;t4Wa%_EIoJh3kwr-`|D#_S4C^oPH^Fp zq9V{}(e4x3`C^b`Op%1aD{W%kTR!1wd0y8|I~_w%d9eV(aaVJ*`?Q?V-Cmx!UJav# z1}42z^KOE)`$Z`NG)VCnQ935t<|QG=ex*PWI>^H|WIc(5{Di#$)`0rQLCwen;E0St z;5&LB`?(n#s6+LyXYSn@OxqW?#nhj`q47RQw!(n!#os(~jn-*h7E6ADYspsdTZ zwU_{POQ_uy%b()GMyE>=7Lt^wa1;ecJ_Ve9nJ}Hd^Fm1i1NX67A3=3f&50Iq5@2u6 zQbtF3C@t&AA^ub|LYjsREtxFP_q6rDeCd$c=JD+|?1gVEhlUSR!eMCg5(5ZBmIfn#8fog9#6S zFB7^jM=GxbM!paApZLBKW}iPTR1yRaUF%rZA8F#qSWW%-PCbzN|^`)Cl^^s8*pH|dCZxalSZ>&r_?$A+aV+@ga7O;3Y@JhIcK=FA0 zx5HH9t~=DjpAMTY&>?VMF3?>ydyxeOl$r&7uUiv4hA8pvQP}W**Y^PN?hSIhnC+5> zG~mjFDInGP@q}cs`*n!RmZWI!P*o;0LN4LeSfV;U;17Xkq!U2=f75btSJj8i8lMVJp|lrUF# zOR`h&@X&E={PlBzk{#gm7rGD|WLen;PjnS#jLs2(`O>H2x}B*H>^6S!@0uZx z-IuMh@8+ArKYW^)>Vy*CSsJ3OXP1LFH`6X7n*5I=kKroSBF&0m3upGSd4qM-`pEc! zrYlo){6j^GQs0Ye>`s3cE5j*5dz*neoL}0p3bqBCp^OKC;?S;6l4M$kik8x$da`T$`qHpH`4oa z&~Cn18Ln`dtTX{s$8ceRmkG=?UFzf56u_4>ZD*?Q419o_SVA1VDN4Yc(Q68zpz({# zkl_m^g|lo57{nFhD&`fA=QPU`oG}n&uh0|G3i8F4jXtrsjs>Jb!oBZM)NZHoEN&Jh zSXFRmY&WDZUY&ZKtP%6BpBXlUVsz$QE-_IpltPp>#qj}G=7bx4XxExO(SBkm@(-Aa z&bAvl8)e1`vftT(INW7>Osycy5{pimsTzhksDWJ;PKIZw(TGX1TIWu7ouh9)s zFWx&+i#2_MOp_xspY{OaY>)Nr0lUUa1$I|3#&`2yAC13|vk!~wXY+;^Nhuq!%ofs87P;)`n!-U; z8MGe9y-h2;9h}xypRO1VN}sc6@zkgVapSmL9EYs41DgLATjv-YNYuUg*mg3pZQHhO z+fF*RtqCTYIGI=z+nzX?IGNb~=iPUAYd`FluIj3;x~FlwPoMjo=f|-A?tA9$Jh$hs z#qWT=^(HMBz$ge@o?I&UiEu6%`jlHzJpGuQ~Vx0V1us@QHW|yPNk&sF~UwR&R_uY5y3F%F@g2>{Kl(FhYGsK^)ji(yO@rg4F)QPE4!P)Mf0 zlnAb&{Vt+&qyPI0oXx%ew$6!irl1ZEgE#eWj18p-Yd9xpZv3h{Kl?OM;R+e_aXQ;@ zhjrysQ2Sv}jjA;4VF`Mg2V;K%|TIaQY9ty+`MPGUs1s#K}zqC=>rlxUlPUw4PhpD@L zbjeInJmP$Eq#5@(VZsT?2)S?6jLHw;Xp3N4N_uF?WU*zm(x0QO0?uxK*SZ5f9d`oG z)?k=E{Jn<$R9+T5%5<;ETr=}JF-IWX-LtL|Tx$iu|CR=1$^y+s%+}@`wnaJFj;=>B z&DLOc!DRF}{cyXL$+CoDXiE4s)+}H}1cPn|q=C?T4O%sJ=m`8);?U59fX^QZGu=F* z<44FWe;ZZ=t|DyhP(fHHA?doX^Pp`hFtz{0u@$^{AkV*8q{^5s7}yctb-yTrYl;2g z**Q#U4@?0L5kDwDE(c_f`8Jy!FW}C|+Ul{D-4V0A+1~N1)oYh$NR&K$7E0*mF7sBf z7=%w3dfn$cyRScp(y?Q2r7W*TlX211dzz!={eo4L_FhHhpu_y2vJf}8-{IDfdnf{h zpjW;?Fs#v!fJu(6vi3*E)u>qEls18;Vw#2M2-RVZ@#1v82QzXw7o%vl% zrAy#X*9$=i=d7q3(nl-FU{`9!w-TnXl4n?%OR>=ftQWl4&CA*z-9~qb8mkJzz5Qv%hWMIolMMxz47)n%=|DqTf*FK_uE9=_@*oUaP{_bd-#I>#J2+Y z7T?anMyLFXE+urOEBV;#9)17~x!S^oAwh{t=dcNuufv5>miC6t_b&^HQmV_#{KR7& zF#Cz+N!&BKgMw?$WOYg6Wzn0NunNg4oGj*v+#0!&9y-bhecHrD?rgI6smWrVl|~Ok zYE4YP(LTIdo<1-{{*p8C@$u`_1o<(R7ztI}6DW?{zzmyY%!FKnWQ4Bz<~wRY^D~oo z4U!&M@i`^&3NLJg55`rD`vqo(tOA+yEi42h*qM&n)Qb{KuqL@F?>QQ>@!xpTirpXR z57KCGa*;+Y(EB95lqe!MInjE}Y)gu|%ZVetX zSuW$A(OncC^E#BT!48~f23M2pLqUh)5|{uY+mC{7yEB&!?di*B%rK%5d^3UaOKftT z-Xk1Xgu!~3gj8ZBaU-j&B?b(R+_8b@^9ssRT$SQE=SYV5WlDrgX;Phkl&@8_m319C z;f3aRsFVnGSxL-#S#;q8_#f`YSRd>IvWkd9gDk7)%)=mLuP;NI`-05UAI@|Qyt=G| zB^c6n;VAGSI7~FH#{3njm{8lOIJq9wLIZ`0NX!(^!Y(ug3_k{Pq$`zh9H{vJ4ew#Da|dPsN{4~N3TEzSTOXJ|x_m81r8+cDJ2J&vqdV?u zTmB*}0$FeG*Cnf-QD|gyUKnNxNxILXh4Msy$RcC-o-q%`uDDDO%ygBuuv_!lDx{`< z52W-C8N`v^KPuNLD6o76o^3L^AT2$FLtGLX)MRZ=yT~GBE^9H-E~eFE(IT8;LNX@e zrtjRw(5Z)mNQJnjUN+b#W)$FMDh3kd@JdotrT6phVE8ZuD9W|?daCBq#@%Ws+B%3- zyR6%m7SZ|oOc3yI*uLVEZ+x3;FDAp+tLci#@tqNsb?gVm^Q+gN5}e!Eq6xL@ zBF}XMFc1SO&~b)?NQB6yUgEw6lSX&WA=6R}2}Kj%K~fuJILMdV=jhgCwy!!U3s_k> zQ|98q1{c5<=rcv2ziFJWo{??*x?`gd^xi+LJ4ehgG#i?T5HXFJRs3t}gCuJv&wZR- z!6rRo{2Mz-o7SQwNL(O{-|lIYb*2r_jX^HFwQu07q4aa;^Xw+BD;xeC^jXx&(C(tM|C=ZA9!!k$JH$TQU@G|)8h3N?1_WkwtLMlm;{ZQk?h8e=$?tD zRNQev;4?GEw}PQlw`_klScFBRbnz~VGY8=+ArJrP&VXWS!9`-Q8*D{(*snHE&i%>X zfkgw%h?5KY4g;WakF4t3vFF@kx)7jLz?g>6O;DxsRbo$?Ya`pZ8rSF@`|8JX!TkO^ zhxe`OdzF=;j+rkT_7`z_OgjY}-Jn zGF`P=6GmrHsYBe`zV_qpITl*E+LjPH1nmM`kU+3rZIJz=5}$(9uRv(xvxhW&Nb23N z$RzpO;CE=$Oj(dubYtjk{%ycGqeDoF5evOezW!sInGu8^)6gY8S6Q>+!7&3^iu=vR zaQ+A%vik9<$ENDV4eSo+mzL$}sSRh3jWrNNeeY$4LU?Ys+B(Yj3B15%qwu+cn>g0L z!oUq9OV=&gT;C6egNg$a8xAr1n!?<1!D4}B*^k+l`2{veEWVEFy;#9=h2eYZG1iEZ zg1*5K%u^?O)a>{KN`7Me1VX@1{HyR(F);PFfw3Q;PTANAy=@Ndxy>shi@(l~V5$9t z$7V!s1)-;I-DV?7Ad90TBfWwKCjx$ zS(Qr!dg{v1eIL$;nf}q&#|Ci=CzA5bvYW7+N_($t+edp5bQUkBVPiw|D|? zX^4C_zTp>5=^8H@9@80knJ-LdW7Dd=tW@V9c0ze<--ku}&olW4E5KCmkg6rz0)s__ zRBf%HX(fp2+`}7GcrY!p(xH z@_1pj-fy`KdU~GQeseXVMex5pU1JP)+#>O39xkvB-)x}+-gMy1E$N^u2oJPBiz?f8mZ@VoFFg_l4N(vm@Xl9uj7xjhmm~qA@lWY+;go zGlXp?`W3j(FuDa>ko4|Bl55UorkDIWI$aQjQZgiH%<$!4=WRlxl45$w!9hDe@h{X9 zaTH2hw~;UfxDul8Ye)A4N!cc%{B=ZD|B>+bAA+6*)Wlj&Yy@tcN?N{dk+d)zGic5w ztKGLpmbsRjtpWI8sEc^N*1Wom-0;ssGcV`f+3kGqq}4;jH(q;5J3j4Rrtf(@T(?U? z{UgW{uAD+zzuUj1JU_S(m^A8ptys;Nug75%j@Kq{0%|8YzP7gO%j|&xwtjk7jRD*X z8$Rkv``fh1_pP$#R)4Og+Ng_@4RLFz59Zw>+OZ8`(5&4vVL{{j2Wb?pVXi-J+Lq7p zHQzhI&lUH&6x9B0I;EB2)Cy1uxJ>zy_B?KEzlD4+%4odJst*e3mqa&(j27{A>b)vk z_V%dB1&q`?eYrx5wlpDEN#6st!QL*AihDP=9wF_$9Pr@IUtztZTrztE8P8TmERLwJ zB~=^TY2=mDTn-z!M0&ZdNC@uDiZxGezm*-;5;4UupU-W2zdvA@dL0G6^0Ty8X>sri zdR$I0KHU}laqsc(#KUS_>sj}JswRBpw4D}Q15Qz*cd+)Pz3o0w_tlV-SjJ5-Pm(pA z9(3Q|?k`%uI5lgAi;~?xMIR1eprkCDR?>K-@D+W8MxSxwnZsr$7PPUM&(Py`qcb<> z8Wo-*TeB_S&xUm#s-2hX zq&xJPHb;Z5-Mrv}333I!EMWN0xGGy#;?KA^DpJzw!Ou-oC@k7V>R0K^cqlQF6?QdY z`jPAGEfcl|j2Q|xmP_ZPRQ!f1LZIddfbg${;x47c8@AbEoM5T^mg3lC*F$pE9b%fl z+2N~V>vlDH1+uD?1U-fa3~ueIJfJ2JDAo_nqBWxd#QQT|LxgdS!X@nTu1qxWn#2V0 zLl}JL5fE^Oh9E4=UEZ{UZ9*@PzxTDDXVJOh-&n|uzO!XWWT}ad1r@7uKK=Yr1gP3h z)|-Z$kenD4uN)%~76TLf(x061^Y+E;J-O@KX5R};5W+y5z0~(?@&Hf~X@bT}Pv>Ey0hi%@S0H8x58CIsNQ}c5W z2VVyp1Z??NAwK`%gt$+>#JSpl5fHQ1Is)ZVu$e8DrPNxn(9m_CMHsHgj0ax)k0-FJ z=YU;kAY)-G#hM&aY6VV~#bt}+kQ;N$cxtX$lWwb84A-Q~g5J1?$~B}92WKBS=HUwr zhue}PIf_%0ogO7AlfD3D6UIQMYqK}doML;P03Us23+3p9Cclc&hY%e}2t*M^M3aAF zpc71rOAtvZJV4HM^-ysL4dgG%+kvsc+zx^mBZOx|kPy&|462+ksU6%qL>I)`Hp7K> zUzt?o^JOpGu|UDB(gogrFfP6!bSjgb*09X6SRzp5xYQQQ!AGWJNOqDej94r2*YJ98 zq5_(%;Q7WJbstP=CkIndK!#?B+iu6a=G04xTOc*RTykl5u2CSX&HCH*kwcF$t%p}Q z$Jsb0*4llAH6O3vp9co^qI``rOTLt~?cdK&?$x&a{&bD+`MxRBLT@$OM;}E!d{4Vq zFJx2DiHn-CNR<e{o(EUO6RTNac3vegTrX5pSNvOty-+H0(*Vr$)!QYT4B@K>-{+u0>v?Y*Y%57gO1bM3QW%m$@dOztXPmE z&WVT0AGU;Zynbz~*k?y-ZeHJ?Wigx{6#g)y;oTPtzaXriXX+nA;sLj;X&i4_8Bfc` z{p4l3p$;Wkk?kRB`0ZpO16i)agfb=hksXGD2j0JHSG}fS-Fw@5#JfL8A0wR!r{4w5*1$N94yOV&osqK z6v-8C<OXQ}<(i2Kac+G%7-`v)=LC=nH+=Z7qb7aC~K}5O67kn(2jv zgotoR8#Xp0L!6g6ff-P79x-c^HkjEf?uOiqJqzB6y9gVp2cAF_9^F-3$i?#&R?lHO z9W@^7ihR`F^#~r1Ag;8QX3kQN*zOy-!1+%JXW5Vw#~~Mu{qEWrpDWcx99411qNSBE zrPH=?o1^p?^ZG`$Pr+R#wUw+F`Ts=iNmQEj%;9ptv-t&8)O??WdigQj42i2m`Yh~- z#pUj|{pc#v16+1AeSb^^O-boE_#yLP(9CACpG_g!_ikD9+9#FneZHyA6<>Pc}+pcqIYE952 zY_P%b-ti}hF&DD{yz6S;nR0?w^Aq0JwK=T)r0hvBME4}kVySlr-nkq?DJge3k`lC# zXxaJs6PVn^SGH>bYtXp$yFFRNMc|o4!chExDE9=H7=V~3w-rV7_DYD{QE!T(^=SaR za~i+28!=r?7{ISAq`K%>>V4G1@YENEcQLb~VSZnLLZ}PXR^upuHtIXMT5Spn+_dxa zAob<3UZg4cE^=G+q|f0+(t&Gd_k?N8BbSus?IkV(k!O#5-($+9akFNRBjEJcpU5_OSIEo1f;Y6PR~@+!Bw1+Z}Gmj*xv zxEc8wFl9Hi=GcFWaG1JQB>Elt$!)xBghQOMuu2VgV@FA-V(Gd8Cw0-n5(t5=%Zr?pjEz*Uw}|@0aAI#@Dh`us(scT-!Gb+3JmwDNpt|GRvv4N0x2lT{%=Fg=GKjYu5vPJ79E5W9L z9o4lPmn!cxpbin3F7uvRLm>CtkvGHo!&u!Xl=W3Qw*OdB@G)vBk0}4)S_MkI9rJl} zlS=Hkhu3zt=U_yS^1fK#Cvl(&TuKDItF{iB%p_{_2eI@xw&=vKuGTJod82EsUwAY> zrG-krzGaJ&Ii%gO z>|bM0Z9)ow$k6<45QOo;5E|CB(~RvFEI*E_TXuwH;(5ZDWmwZ88RFoRwe~7luZQt~ ztKGo(#5LYonHXZ&s8i%wbPF=iMRDh!bI!$HL{rpT`#q(<2KBvQzCKo)=}1O-Gp1oU zKo|HU5tgSDY4BGCyK9RQAUcPv0jzX6{dhV`G?1+sGYSq>8GUIK?nXlmIr>oJlO-`q zL&{PRR}+rkt!vvWgwl8ZmBgC}z!3d#GO822(?9lr_5?zph)~FKJ)Rg5LuHBx z|C)N*x>1OHIj4h%NM%D=e+z2eefIelAHa;}2GV^y3^~m0p~x50-2WyTyn|ioII~XT zO=`qLK%hQQ+}U>#Ll!;0SrlxO5F6ag?jkS#>#)$TS{Jrx{!kpH`Q$z_-riw;t2|0b{69cWeJEblc@bD6na_oKQ3(r0qHn^cKtB~LyZ2x&dEZL{m2Mg-NgAp{>4{0+B+e~@N= zAHF^kNeTr3PuJUiPA}Ys=Uvt+^dG;NWiYw87Ou`DX{dz+(UQpc9aRwmv3;6ff2YKL zFWd9vyzSNKL%8@!Q?>c8OeRbS$!(9DCN*g)i~r)X2l(t^O44FBV&E*BBU5k^YSKb5 zbZ5}vhc06Fe^SONjY*R}1#LZg?J4R?D3B;X>H+F5QmRb^q&7&}wF<+wF444Vh?g&5>eLb~ML$QO zmDM@J)+6m%*OF*1fa-4wwT_Zop<|5Nhe6>M=3kE?5$!}A!Riqc3Vn8c_(A$~ap~wR z(`0F2P)3-8i>}K+V`b{FfN@~bwU|BXT;)11ZN?EvDBczAaQmdOzGMA%9drp^Veg#Y zpfU4%`{h}geH1j?GxU_*_YYqa;B7|6yChuc%9_yQ`hA>AD3an$+t_)XH`r$7BXTLe zApD2R$o0tEf}&JJAm$i%V&9)fMo#R0^mF`qF>n@+>_n?`=6AOZ>W+=BUh50{H=Pri4C6^O*UR z1wHra8tbG>&@%P^0?s{@zCS8_A1hH?kvjsi+(=v?2~(g|zPV-w-9TakqX%TzUutzG z6X6FQ|GguEy6YLy^Nb~=yZ-t%$kIBt(p%Gbt+Rh^3KM2n?KxXz!dvD(yhM-eJAz{) z=Y7QvxLBzvAylag76_alAqvORaO@`$_k2meZ{U6_d7!)()uO(eG%Kg^1qn`i2Pp(Q zW03Dir;S{*)hc0H#j11wqF$VJpz&#UAIwnQ{w?v3J%Bfs#KRU~(*>M*u3xgm24ps^ zMSZ?%wMqSsT~H{o#5B>GWYv z^}x2~W1v}hM80GtAo~LXe8}Cz9Y*v(Gk1l^sT1HsRM6o=jHv^_9NM^uohtdzDg^m= zD^NSxXFU)xj@x&cDQ$}D?M4iuI zrBa0$Wyh9ig#CctEJKg*-h@bT2N?TBX9p(U)>1qNCn2s#iSxW4*fw=_md1vf$spZQ zxDwW>%fMaUz{BF(RS7}hy$!ggF%3VGAG5qxp~guKKVEz$DVkP) zwX!`ymoX@>h3y%#%Zw~JR4xTgDf6P6(M5uU(nEGa$#uY8QE)K;kTL{l{o3@hK~K}~ zU^==cM_O!F!JA!c7MXkr#vX)(17zLTpGaCj2iGCm1KdD8T}Ex(ZH_WVD=)_MZ5{*( zszgH{h2HLVH>bQ7lwO6(CwHT>ndD5y7O9Pz(p2LD#%UCP>!}&CHc6ky4EEuGq^(rd zjUN*3Py@ala70>M(G^&a-|@54+x8{2YpJTRd5o0u7WuKBZ1b@D1|kd@TZ`N_;eHQt zx6rTiXIU`Adu6Vemfww7GJk5!%Y$aEJd)UK9^@2UpS!nEqtZ~+Z?rio4Nw{=`6GGA zxX?w<7@3R0ak9@y9ujNM#Md_d>lenVpS@jObOQR38I8_{+aeW4>h(V#KQFgG329f$ zWBnsE;V@01Wp}TvT1Dk1sDCXt{H!olF=Yhn$HR~ydOsU9DO;N!8Fct?P+H5^M4VtN zy%(`L9XcoW33wK8;wZXg5%c2zUZ<5PygC-REn1mNc_P$O;dh&8ZLdgF!0isPBI_svD+EDYN@>mCjI zXW{QP-7RFtWe}aDe$ada+HZ>8ll$y-_W&p4$5~GZ_3*^2@rF-rofxy$OkTr{%Tt}1 z$U658eK{*{_K0{$J3qfvLT(O!&Bo&%Y2O(S0i!x8xJ##vo7(C>;Vm5chza<`G*IijiN&lXUn)mVnlI6pq>fMiZEhM8oOdtw zYNa&q-dzqh{p>HrEO)Tn!HP)VZP?v*G+{acaZ0ykF!I9 z8^0X0NM88c)Z{s(N$`VVaWUhw2@bi>;j%NUMhlbw*TO(JBpv5FA!r1H&JxgS0J7^a zqztUZoiym`wSQaKpdVm5WAN7S=>H=YEK?p@iYf2hY@bwUw$z7Bu+fcbAZLXZFsp zYw#NCo4D26y5FZIEH&r8n+x3Jqd9W9mA*{Xne}wMzF0mRryLtj7tBm=p0pq-CFDVQ z4B}@OAyzD@n6P5c)Tg+#&Z{GzMa6PGSb4e;VG3Mv_u`5+echasMVm z<8)=flP1FA&2?=tGBpm#fytO03C;n=2QfAn<`1T7h)DwVZiTpT8W=F?TH}s!>|uOC z&nSrKt{2AJ#+Zh&SRvVgXxsv_saU5V>=i-&1mMpMwA;DO8zW{?64?V!~>%Xp+na$Y0_-APbjEfS3iU<^;0dlKVe-$lZSpz$$dUm>1 zvHSG#KHidTt6j1!A{b2~r30sn*J&!U!CPHiCr{iJvG!`j`n7uw?Up?p=>^hhO70M2 zR06)Oy@C1uaC`k2hz;TVs!!csI`U_Rxp$3z^1Hi@gd$KPCv!s7$X?htWFO_*lLhzlaoqr1|w;%r9A*{a+9d;$GVU3>&EBk(Ou|Y zK3yX_B<}A<)cLd5mmkMAMnp)wJRj_*KEAo95BNpUG;Z7f*xkJLqGtl!9bo4R4;e%& z#-1PRmgU^O{a#D8>)Vc~eRTdj=Sn2<%JO^NvU=@5;RG7Se`D>owAAgXN$)Sv$REkk z5ILrSbUM=B7HI~S@w>aKvZyS9hiA4TV>Fh78#u5kDLI}lQKmMVDw)kS(plZAjGI=S z(jR?0S}rd~JwKnCKIhBdqNuPERu1&ob#EYC&WX^lRbdIKwV1LGR`#8rV?rh-w~Q51 z(EI|P(f|uUhrxTzkL`=Tm_T&3M~64KwDpT8u`Iq2!c$(lFz*@8bxls8?y(k%d8Ij} zv$>fZ$vd(8fNUktZiMdlbB?=(`xD6%hr$$fc6}x-kN3kb{N-KWQ}WozzgUeuh-D^C z+At)(Cw8BTke7yt`><%+{tIJXMYVMIJjoPq4nSt%%Eh9}^0cUDRVPp3UTu21;ot=3 zPtJi%wm&77>Bhnrn~O?}kn`Bq1(AHXM2gjGwYAv(VNx+>O5q^-X7-_i*GJ(ch<$UV zyBd6czDZPl<(3kp&q2C*J9nv*kmWa(ftrN=@jqJlSU&{VV|e>?4eUu~bEl^AR`Ugo zdm!~&zM-hBp80dK*Dp8rk9`ySPyt)uSOKsX# zKV9B=^*xlv8nh>L;sut-7TtLr{#6AwasiGWsy(XU#%O{eGB!>t;A)NmwKID@dZZex ze5EZ)3GBQ|HkWgzv0b%lhMg_xjAexB92st@9b267RULASL4sNXdnWerttLm#k7*-C zhGe!GJJKt+G9RBO=NMS<^#aEEZW^JKYo}Z<=k^@2sJ`#d$7%T1LMM4^H6cXl_Q2sn zV%8WA{dcQ%qk*|b2nKhs&5VAv@+kRD`3RB*L;7CPBZ$Yci&L)mKkF)7bWDe!tNIvj zt{)3?X*Tzhi$ozM#L@Qx_Q=}cL9>z``HO7&l^IF?z41BgK2`bnEb&ls?~7aOlFeyL zY(9AUJbKor^?}X{I!KzJqV8pP%?zsJ%rRW$N;gNgI#HlN3*lWgyM|#) zDl?3>nSm2%&G2gGYTJvIbUn}H?lCp@J#6PVTWE(@#?Oqs_%km5_oVerbt_^su3k@P z@+17;b!$`@D@xW}!)RRsLCy1Sr@l^8)I@A~cYa>G=(B;h!r^C4Tlobek^o)qGMQTu z08*}xJWjc-y{Uefff;d0IF9%?FmP;d)6KpHL*m91#1+YvzY)^6dVjMqBaM*djRgMO z1u_VeyFhc8#od99092req1Z@v(2dY6A)yw3-}=^kidn@-S>bncv1}+!YfzqL{R?8w zv@hLc(N)9!&RZOM1e`&kD9~tq2vMSxNA-Ed+&=7LmME{st9-9Y@|b**5~TR>^d#+b zcvst30+~@@a!x2bc2hZDoRz!GgP}4L<8WK1sJP1ce!3`LM5myR%$>H^ZM$u!#dTkK z)H5T#{v9Ty6P^g*kQwThe3B?|d&D=o2}opmjtZQrWepfJc{7J81wss#Kx7x-)-#N( z?p>6UhRt-3#+m~skp+eV?+@dJ4()5SdQR`hhyF(Cz4N0S^Mue^U8HvwHr2%8p2BjD zHK**R-{(4}<@RX89J0MF7OP$K&y{JuUuiFb?;l7P2by+16dWy5a(y7AY&c7Crd zB)O--h}DG}W1w4#1_*sxe#%UalIboUSd@sTSM9KzG#qr!>z7+q&|P}Sq9Hkr6&xkz z=OtI%ASmBWF7lS9m+SnDEt{eHjaXKoq{wRDUA~e-f@bc^{^9PkmD#Nv?61l(? z@0v!=5v!^=ARo0#K&}f>vbI&MDixu)-)`h5+63A7-q8g7*i#|*US`#R~xqg1NU5J z*sZIqS8owP%vd(vM#u650WiT=3k{9VA1Euq!ZGjzYa2XZ7C-DQinSSxDeq^1Au9m^ z=($ABj+<2GOGN`h=eTp;H-s$*r+MksNKB5%DY=&xLuleb?nGn-L9&;hCjS&4`0o$U zmdv(b#dIU1NyvV+8UO9S0inMPI*C@jv!SV%qrMQWWGq9)$*cGo1{mkJQJX@TRQzy@ zk`!yh4IAb-)-J9VXqGQ~F!Y1f-@~Z(S}Xdm@Bo%ItSzk6tN38ky90kH+D28JRN4)< zeIbMH^!q>*+iXESJS#7K#LlaOutLtZ2K*=V2um`x_HNNjXTJ9zZo_z zxi>oFS-AcC+L-D7o9&!%=@-EH*KxIo{4<1Ny-CHd7+!eR7zA+(xJzpb3Q`tQ;&=$w z2;08`=)-Emn3-D(`oY*azLJGke+lSRF z=sF&d2FE$ZeCvmUupwN7#uyTZ7NtWQorKmFAKV|p4Qq|ElQSihUNb99rAl1F{zq0- zN2cq_5U(gR9~=rAaDQQjrBNcbIAR}LVw*rR6hAdd?~bkhvSZPPs6aDCJ@8)ybH|*0 z!MV>v4%Q9q%2V30OVX*Bl}p7s#=!Xzr%d|gFbj(g>rVw@X!7Gdb!`K2Q7}se?H5Bv z#eWw96q%Wy(_{NkXIq8$ZP~(hk5(RUv4q0Fx zoB4wfOpGcN{%Q_z1d1zc?J|f#y7W0d&ai}>vy6CA_;fe~3mNj(yrADHbi-!junUvE z)r%<8BPsSv;-whNVL=}MO93rUY8e*#RbN^5<)-DLF+p5oUod8*!X`X^!BSDy4qD&| zLA0#^zV*i??AcVp<$;qjwaT*pr~F{dD>6qmrWB0X*eju)C9)`3xR7{Z#gIoxrrPg2 z7Vs;x_b)VFF*$QCP8dI-DB%HZNHH^!l4YwyZW?7>F*MeXikB)VTZ>)<6O4uLtT)Mj zhMxMW`z;nZZC^RTh*glVew!_Z+yv9_%{zw!-Vld3p>uzJ9MWa$Q)Vb5>2{OK_#sL2 z&VYbYABaUwz;xyFtI!-bSqO5p6ymE~grQ`))R!QF?TUjXh(DLNIjPM*+i*e@Ir(LkFcTQy#+ z^9F@O{h=*c+7+F}YZ7{A>_u9Cl!VvMDLZCfQ;%B`kN>0_ssd4oHiUzYg$R$f5Ot3t z*wvOVk4Kei{I|EmIfWJDKf=H?#?c_)S=?}eq^ZQAdmZ(T2&<}0M&Qe+Iv`cb6?I>aDu;(QkQISq_2jX?*9tTQxg zAj}XW>YDEs$ftxQyS>~gz6y)Mie(#NH29156&}ga%3yjpqW)n;$IxTEa_B?L40pEDR{JxDq`q!LH=_#3~Y5^ z%BD)|Zt`q`sig4|?lSi7h|LM8>`vP#UuiRJf~AJKzC;+B#xbVveV6`NSW7?G_FV7v z`iyH<{${+d#YoP$m#`UodG2Uscyms(MW|#(UyFo_fb6ZMI$mGO`==3d5H1%RWN`|c;$k`8ebI#B=H8fK`3kfw>U51#fbPp+f zvw2-UQv1z?TSdY*6!z~#^>2nmX2J`N$pY^2K>_&uZS!P+x<(&X3dH;d;(ds252~N%GKyC01TERNuqiozF+o)nNA8QT5U z{JMJJf}X(W;`)JL5BuXVq;Eds=>0PhajEtncwW#A#AJ>-GBZy=-T58cPnZy+Q6ZHW zHQSIU9!GK%v_}u`JM+DZA@DrR&J@zq#P)@A4(URz1;aFid5vvf?%zsQwY8dj_f~YF zI#xPomx5xFKYOW4UERV3p17sqlw5H(DY8K}V8I zEMQjAM{`d$-f(GoVe!UdXCarM0zu3(3FnC~`bcU<HNm8Yh4Wfk&f(1ioqzVV4D5Uf}jW~ocK2qacYJZQG{&dv{Y&(%ybax#3smbS0 zd*2`I+?L(g95$1fB-EU@Q^d3qSxz7hJzfz`5zGqOQ?ax(c81b^80IDjdVG!CHOUm2 zW^QWuZGzGxTzd*s=8RJuG^aBI9Vqy0Ww=1?&oi5~1>NTLA|%cyVU#USr12$X4X8#t zI4WP+yeNXLq8ql<2Ja06i@UHG&T)&DqU@`K6aBmoUAnxQhLHY2u8-Gi{jZOXGWu79 zapNO8Vvf@ck0GHWwlTW)+tq**&j!l>b zl<$)g`kSQ8d>#JvHpH;~@>Hjf+w@B#nJaa#=&hB(*htN_V68JR#E(aPr7X&BlS$M`WUe_qEIIprM-(48P79MNlcqN&}V2@38iWov(mB7}@*UToY z@Xv$@TVMP;bd%MPb9kxMjQ|gcq&fMvDmX)5^UUe5$&h|=<(xoRdG(G8rfckoMhbnq z{5PBF5?OhJ@!{roxPo6)gAT?#-ZNSvIx+3Po{#-^|C;Rn=!^Vyi>a}Q1D_+X9KzpLT@7s5gX>!iu3{t$o z^}jJW?IhRk1k_H&3ZXj^4{x|c({3mz>@q+LdwzW9Uef9obgUrNZ7>uTp@L@B^{Ce( zXJ{#Vk8-@bzlJ>WS#>AV8KZPG4~|})C` z#!hIDfOvcKy~<4-NMU+KdH%)iV`;&0TrkaLk+}kYY~P3k>A^;0TqTR1SFk3}FW~O+ zY@o`}u%Nr-vN{kjs;$G9>$Yjy%KRJTaJUR2YDQI)o5U zT~7t+_&kp+2uwQy{NH~l0k6A8|J&>Z6$A$4KTa;bTArnjU+y+Vh?y!y5EPk;Z$c>l zue(hFDpV9W%zuvD>J*sDWWt0J_&**wnMAeRxWGGR7?OhDPl{8$igUsi8Wj5+3S{Wu%1naU{20ME`i@W`(#II%| zU7U(Ld)K>>rCjV2)H8Z(*z`GWp83P$rMofhoTVv*FH_MDK0^=Nzmqi%2?k#6`Ux3* zqd*he$|L_pptqkV&7t-HeCca61aI71Vlz)9UMCa;(gPb=??aVySjD%-S=Xl1l178P z0jZNHsp&gdvpqfRXbLsgzmvL+);Iihw~S1;8zw~QzXQ4mU7X^|+7?rDSTGjeZn$&09o zW5l&1OtigGVxmS=g1X}7$w8g97x4I8awJq}cJCw_WaaT4T1aS)Ia? z*J_)7!O`Bsu2;0){1i5O{AlEx`JtgL`%keo;@Vk_`O3i>;O>yMQbOL5)Ia zqX!3+?xvZx@&diH_&=dX(UmpqDrv#d^ehoE?S^!_Y78E$f->;&oA$4TV?)WoW|UHy z72a{+28Cy}gcw61)TkdJ&i~zCQc+zJQZj60HYG+)1#~SshpDubb(_pse*-jX1Z(Ub z-?Ts(1h}nF_JT7kU9hf*#Tnlw;mML8taOseDIWi(LHmVB9<2^NJ5eF0W?aavarnq; z=48a{$tHYUScvOM=>%V}f$`=EjK#9ko2tO5h@)Wf!^#Q`6OaEY+AF$7xB5e8wPq?( zx0lEIy;)hvPtbFWpFl+~v;dGev+qRl6c(6qm?jDConhTRB8)_N$9N;X_Ks1(7f}{> zm8zd|_Vd?QJ6mMx{vH3g2ZsA#8*uD|VdL&0_6gzfZG1Wss#rwiTTdXD@}sP6vm2RL z_-C|627$iC>R!bpwoNir^rgvUgFFQG{0xeytrjGdVORP1R<}^MH=yl%e-z4k+bxx< zg9!hFJxo1z?XEu~+pf%zhn_xz!9xfCi%>CFwD4sNtQf4qN6uIqcJ85fz zN4kz_XO+Zj^ffY40#FbAak1Gwd?;$}HTGL`+$sH#Ty}inFcXSmOkj;O?NfYt7H1p9wzz86bj=)Gs@RAVULGE40nwKh%Cl(*8Fj0HT zj%!{Lr6QH2k54tsQ2P7E!aF!P4OAWay?zcBgpd zdpS5r@lX&)Q3uE#=zU+}`i6JJbRa+SB!2g|t`mupAe~q}KWz*(Y^zp}Mlb6?s|65ytA|lF2oxcY|IML$1vepf zQkeL3$SuQBRwspv>L3jufa;d%+%wloXfVao$ujX^nyp9@Y@Lxo3$yfkwzBlJfMh3o zrMQUUP0X}qwD@JTgsUp-$r;dorXA0@R7=j1H8>x?H5nSy8zTIeLRe7qxmiV=mITfS zgt{gDgKR-JQ7^w_&2P{nN!8bPX8e^Y_q>8}vYWI&WcJ$sk57yT${(S3j^K}b&K(X? zpBlMvk>^+_qtjw007U_(L&C)zM>qj2>FH$tMd;!Sb3pCm(|0s3KYx(tZ9_c1YOIts zgj`z7fmqtqxnmho@~d8JI{jF)5{vipSJ4Wpzy&oHL&EIodB4qoyND6{7@K!` zM@E={YxMI_J8@A^>?P`KZ>Yo1xAMLKOUxA_8CSG5eM}JDNUh-tdV9sjf(iV?r(zm# zjp+Tf^@sD@&eYXzNeqbcroVPU8;E-*kPexJt$^@iqGUL0*PswCX2{$X3f8y(ES z`PR!d_!P}My8DWXwezZM?ArKSoIdJ0>K^8so4+l(VYse^9W1G$mAJqLgxk&M*=`)9 zPkrBJo-UuHlv^edQ_!$UhWYYJ4Twhpz&V?MyLO za&AA;Rdl_*K4T1>K^RtEeC-|~I`Dd9^DJ6e;mkG3B0B$>6N>ijgiiG>rJ(wt{1@kr zt){yH#6JZC9q`}vOU%qlN*FW%poR@ru>?|r4@iMn|B{QA4^m(s6llb)<4ZoD@b*B1 z)tRNktwZZvj)!{OeqO8O3CkHyRy#T(3Pl{a_q-(0?fB zZ+LTG1ULX7T^GF9Nly(X7T`q!?@|E~{#C8D+)@E4;NbtOk|QbEA!`8>F$1~&^`*ch z_1su3j?6$eNXP&~@EI%65ftunw}E=W*n>t!!)l6+pU=?euM!C`5ho`t@(1qzHbm3K z{J4*PZenx`-(E}wKP)-+w-h+m?@I~GKETgc%q(vb=L-U<7mTEWupz}eCZE$L_iS}^b{DK9cc3z zjs#H5f&K#u^&@G>lh*rCR}Hb%KM?`*djdF(9jE}R`FKGhGTCenV#JovVGSbaO=Pu; zHeNjbyM4}gu)?Wz#!3$6aGBlf^XT3y3JG&V%*eM&%KSK+`p;fCAVe|j`KYDeQ+LhG zI0C_S!OIM&7h3G8(-}NTh|${9zBl{0jy&LgCkvPWXrq(RUSZw%g|ENxe-epMze(!P z__fM`!Xlb88`_93%}{*3W&3jVl@y{i7yqn9N%>r{tGI`K{vmZbp>N@3*JWQnYRV_9 z&-DFlry|ST^+-EiBZ~Ovx=<-#DR`_dR13D8fI5h7aaI%-VlPrwIN4RbJPV@$0Yk$fj3Y<-K5pwAE z(R#POsO+Z0Uh{MVkIg@WW->8$ELtRdHMSPtHKu<;$(niQdY+XXKN$#$Ta9xdZOIQP zr%?y}h{KP06f7%{cZ6@1oTeLN$hpH*?pG@aCa&u>%Eg&Tj@u6Q@6F3{0^0-z z_^Udd0H$9o{LzFcXi?|mUre8Gx^h4BqnB`hHr69goSr$Dg`b9*O6L$oEF~-kp+Hp- zK&Pb%u8jhLQl#P9XO^f`Ym|R#`;%f^T;1%8MMzp2DtAek4W}i?eQ82I%~2!yK6r}@s0f05?xm&HxH&FD zkmb6@&0?f8Lun-m{wBqth7B)8>WFr^>m$W}p5KIs>0OI%;?{tiK;n zVjim|zHNyEoa~+T`DY`=FfEg4e>C0~>4+v1)FtN#S%y60<#MFB(iooK%)~OZE3(I# zHk9`+^gZz)thQq<$iDPlVRS3x&@7ScZy@e)TVC@8S){C-tu}Pzf&*+H#{4?G(ZA~i zRe2p>N-##|c^nnvb@4-3ZboZ^k7jwI0$`AE4_$KCUX`*n?{TnwIT4;F%NfVI{EKuD zOWgx{KnSy%#I$1=jiCX6@YJo-|a#oUYG!k6OKn!lUUX)*F`vEXL z2FxcJ`2j}2xXH9%r;x?|cR7=_v$7Fi|; zTy&kj2PaJ@ikyQ9!z~4xoO1e$b?bUx7C=!Fi zh$JDQN_2=|1tzPOCSwdR#0YYDt4w*7LgjvHSsn}>7&*3UJX+33f{+Hw@&n~S0C|W8 z1Y|Y2gWgELPgt{Y%#H8A3r_4T40O64Y(7@ZA8eOmX9{RfJIkB=*oKzNq}zIQzF*c% zi?lOzm?kq%@3kwHP}XX~f-hI7q1I|==?gzu;& z1wBl}LmDR?SFG|wc5*R?Wex2DvN94s%RYxztZrcrI2?7+ns?=^Ez>(mT0O^7%}K+3 zQaJeX>S+9>>B!9274U7Y1ziwG3h|F1X5_%e5*DPts7md>f|vzBZGS`Z|Lf=Kfe3(r zKK#C8_>{O(lC3X?9h0UgqK;}G&Fok^Y~fQ zliJJq2)BUbR@AZ)F@{O;}L_uJF8`%YCyrPh>! z9@p{5`_%ZE1!SOc$_`$po_WB*ii z$58g(B+-u5x|3ADN72xwk*21ELWM#qY@f64u!bfGTI9<@&c4fsLkT5?-jeAMvH8dI z!%BK8j`jn~#05*lnLIgZJQ{+#z6Wi(%W4tHd7;PK&!Z(Lzh9N4pJc||TM*-s-U)*- z>W_+ct+1dSKbxucn&9OeKvvH)bYb;aCr%ROYivk2Lv&Ni>nuCUCS}|@jW|!WznEHSW@g!6`JMVoXeGp~73%5c&mkh-S87>p-)h|zzZEI4{g9j>5>#z#P zpHrU18KqKAwEgzcSW~7C(@gpI@l zytOFF|Hd9;F4Kk9%CZ36z}2b10fmpDxYDV*x!a#(AG79Te|g{4L~KV$U^eSsz+3z$ zhdd|J{6rw^KAb7sHq7lXv-%7#)*_e*#Olj_N55`Qm-)V#0&7TItIV(#TN9 zS15ujC=}(nI$~A$C7&oY$6hArIOkY{kuc&Sa@t_vQ)Zid$wDNg<;HXATfoH`kl0z5 zF#!jXsTFGc{RUa{vjYs&e;F6J`5U!-%Zh!_Kt z4xP8}9+c~;ccTx8F^UD+#`6n;V2f>Su7rI*w_ldJBh`zl`HwSvEV_tQWN@p#(NH`W zjm^?9LE%PY)d=#Ro;WlPJXhh;0ZT?gLW*!PK0h$=~AMZW!n_fA;tFMnSNvXPtfN*X-M%d7I0o;Mn(&8jw9 zq||n`g;;lJ-e+|0)}Hovb^o*saqK?Wg*94;tr}+PUnOxMH0P5MsFd7jL$UNkSdsOlq(K$1 zq*YnJGhlzc!0V5#^vG4uZK4tc^^^;eKQ|+@`Y<-_kt^HT-)j~Ut&xSit81X>Z^_FBU?ckL|D;?U)7kLwAH~K^})fvzW#jmjnqULD_&LE zIRa`v6q8j0bl}@iW{`{%?uEJVJa;Ke8UvH+Lsd+*2N#C)`?}T&T07I$d-cdmjPiWm}E>RH>!d;EYHeV|l|L_*W$f3#VbsGPndeSK{}0B+d^$2{$bzb<*cqWgv;Q?ebviT1@JT6 zwj0LFDqo6|U%aNCE{bgTb+IBbsa5Z?D-X+}FVwz%->em0#&~pYX5OGsTwC-#8St%c zl7pehFiBT@5G@3VdzxlTT|a>DJK3MNH2!H2G#V{PdPzsAp%))fcNl)eS2tC%?eE!( z3kX((hQhgaFdKrb^I~N^!R0!is?L=W7_4x^P?Z0{-t&{&G78w z2%FvIN=^BYHg+Xnxl4!GAQPzHETC-Ql42l!YShmRxf~ldvsIy`xmP-j>~SzH5+=e7 z;x41&JG936nGFLgt@szm%MQDHdIh*bvo#ZDp~Oz7*^)20gsgjnH2Xq#^^5xiAk&xg z^HBuolHlvsSuK3e+xa4l`R6v}2Y-eZ@!ien<|rt@sUFfyLIbB%RwjaG%|ne2OQ=Vk zg=_`=E!Pj%KUyS~oholMv7;i`xb)8v2n;JAK?|tw<(K%`Yh{%X0vIZ(+^sRk>A57= zOM=`O`^zr})--KlH+*B*3HmMt&+(jCIs+p05W-!;?Mv-maO*fj!(mVphFp|tfo`I| zFL>GlsaGR;s)|t0Z$*Q*S?mkGAI%n7v48(Eoq{l$1F3xI6H-YdtD0r95&1WA!(1!n zOETP3`~0?p5(LUrKS%o`on=jz^PW5`u-U%)<&h7K^ye2&l(NVU6YDX23C1>R6V94K zK{*v~CGp4T3t_RyQQNAEaC`b@oG$@_<8L~u!EbvD_{(3v4}}>#x7O2mjh`R*NY{C+ zUt){sh=@gPUX^HVV3c5Z*Fwl?-!y8aAr7Y!f%E%R|b3=zZ=U))dtcRxuBc?p)0|}EI8E%8er$g z&?ikI)`(M-^f7TY&%(+m&y^w5l!V-LCvh5l$_+Ri%Ny9I?;>p*EY*t~1$pcYp<%Ob zvbzsvSpGH`Y{AeD-Y#`B*U><_^}`ns{Dig`{_K_bjR4fO_LP2XHeKq#1QHDK^$`qd zP+L~*HNyTPh#2s=hg)^*<`ckgh&?=_hRF~!R(dx1oli1{!8i#nEq#{d zwSz1!3v8qPMuT~qEq_Mu!VjFH9J0?}C4y5NVfE+FN_o2!WQX>oFgPkYg3%FGvGq#x z47Q^9Wyx3KS_|J6i*XWO9_%`4t%$IRjOtqEebk~9|W6G;0`TgzQh;hh`#+(RhC zIS@s>^A=k33t~>OAt9dHtX2eyNy$X59rI^e9#Eb#}D2D(5tN;Rl zgAsUF4#@E@fSQyajM2g*59CDo2Vq71QT?g`w$%X&(Eax+um9{)t}9O=L2>e^L*_c<#_9M~ZTZeGgNL zWfx8W-HApU&9Bq$xxV!_K)G4&>g_N)L}6 z*R^wX?tul^ImhRr3;p`3^-XzuU2iB^#H`A)t=cqmf=7jHP#VVf=sQ7gF0UZ>0+i({ z=fCTS-V0bU*xbo)(q?G0BBZrSD2jC1f0LM|w^w&g0x;J&)M`{}FeXu4L6R-zWIAr!}e%~}`F$4F+>62+Pq=DozmGj}; zZ;2zx5kdp0BaZ#=FC`%~X5+w&U8?oAr%yM6)$=Yxx`L9MbodV05x zt(0wNOy}AQjZG7xrCt|Ca z(ex^aIL3dc7KMG>mpNPl{WTrmVYVX~xL$9U9o(HYL8Gc5zk-YEVIP=Jwdphds_$sq zYFWqHb*)Mkvc)ut6XnS4jGzC|{vrk)cKZUdf|E`-Q2gochc=zD0rr*#3f*yXBkg)+ z_cOy5e_)XMzo74BMBpfsAq|8ctXkU1Ct5PHHZpL^B1DAOjtGy@Rgn7Pk$$swn}>KR z9tg>90`)T8ZBE5EvtG#<28Iqn6JjO>3xDNLi&UA^rHqgnM8(FW#>M+_s)CuM;aBK^ zD&Luroi_Mp9JsGG2>mGvUXX@LR~#C_xau%mYF5-FfkWIhJ+^k%%+2KDI%F znv{&}*4>lcd6oIw`LAgh`ynV3hypasi!2Bll?kb#lIvtG#%QQij;3EEKNBM|+i$-= zoBN;Ft2QLz)H5@;tX)0^Um)VA;kJ0NafzVVE@HOh1ovRqIrPug zBTzPQvQ;_F>~x&bvnU3f5($zqBz}m<_Ki|esY)W+aqq!{InjbCq*Qb`+paW;#Ej<4 z)@9&7auZ8wjpp)_JzT?dcjdkc6%9jwwgeed#xHa1Y0X1RsQ)O`-tFmVFYt(0FsU)8 zCLHT_QT7SU97aNkg6F?%&(R*nJ+brL7gmvxX9z)ysugnVd$#0^G4PZ8h#9$exW4!F zi;PF|R-8fcR zjo=$(LHyFf<}n$M>^(m7$aD0Gi);MVT?y%r+Q9pB{1e9U+rt-566=GzA9r7~B9|@W zvGTgU^rm|1GwJ!Y8$A3*kG_^?+|rsZ)&EN%KyC5nb|t)D!UT)e37 zLLB`n3A`Q*P`18zrZW?aO`new60OzFT5@q0RG8Z{HNxNLr>_Pb za~?;>^wi7M&zduvRo$_Hm$RgX5IJMN-vY0m6WrMr?0!!7dgfkdLB)34aS?Q?7N=uQ z1PBoz1F*Evsp^k*YlJ|a2tZ+c3b=jM*(2f6zLh00@xw=uKp~`-U4Cv$2IJm(+V8dd z?d|PQ`=osJbS|P8pX=+L?mq!5Ec23%G zY@61Q_y>7HNTKgY)kJ`BH;UjA{{+fKNvzd)iYOB*RlE^kAP!Xq1{^oKb^u#@un_14 zQlz>_yT218%{@>&8mnxC{EbJum;d&!?AYSxniQdAFM3h zTK*X3#&_q&p8`iOu6D`qrl>xw`N&Udf+=Sx){>tYT%LM~MH`B4NA9`#v?_(jL1lHS zWKJtlXc}GG&?}V|f9653yJp#m0|7P}aIj)u#T*97)DZlzt<_9>%Bm*2xSl?db)1fh zj_7Lr7Redsps{edZ>98gm-S9Iq6+eY1Y=U7XyyiP-IQPGgyD`inUPO5y_rh;u$ru< z!IF0TH_tm~!jWGAu7a&`t?^5a^7SNMK9E&$41W54M4lqCGuKeSee{ACg4UTQaZG62 zO)v(;gE7Q8%@Rv}pmjWK0&R7--vnrEHEj;wBg+!?r)1`={z2kUZU;VUWw1;xgK7Wb zy6bb7ze2KNllO+kqU6Jy9aaeal4K=aI_8pK$WNp&fBQW#)XIrDjoxe*bs?BaB6ZD6 zFyQ3)Hyz80wN8m(-qq6xsvg4gG^xPbcj+0BoqyvB=Ur5n03)>E*4kE?37;C$Js!eX z7KIhdrvbnoAg)9vJb^J%1$A=T&5hv-sao)ivt^`GpH&6sF58;VF`ceuDCvz3RVWM6 zVzwLhs^rW-^!Za)&L^UStUu5wvLipgp+sMtR)so1YM@LJldCI})x@Yzc>*ooF^-t<^3HV6m` zDU8ly8rC(N0Lpq6K-ao-$L*?m8qu<6wMN$H!5Kl$SZ|re7$_W&lWc|MZVe0 zeQ96ihCKt+QCCK_8!x7O=jD>v6X7n%Rr)r=QMJ7Mtco)eO2YHcFPcVQvR-{X<;1z+ z@KGBu;pP`7=2L{~%s{6&!Bh%Y!%YgS}=fm~*l{qJf_Vsv;O(^lt<0lPIu3GZeSAiCc5UT1&3xoD+3B*8t5^%)5rfktjH?S5N)? zyg74Qc1t4m3iSz>&nXe=*UE~b2Q-|+uCl8mwsf7v@%`j;gMip?+pfc9d=1JZV@`i^ z3qzFvN+V-d{NFDJD|@DfDOl*xjm1BxF?Mc-pn8yQebs(yD2{$SGwFn~iUVeqQt zARnh8xHF;+0msa#Sl8-sQw);kd6nuh^pC?yrbFfYGQmKlLl-o_^L?7x)z5zNburz2m>s^-I)^H6I6of!4%>FC*Dj$D!aMj#%`6y9>8Ge<@)N$ z&r^mc5s$^|m@Y*0S5fcT3_S{&*dPKY}=Ghc>yh|8$ zTPl33WKA>=`x%a(TiCfRFPq7lJFHd$)mbypbc}~0G1T88qh}HR3J%P~g)x$uIBKh+vqQQZ-GaQY4I*aY+UM`%+Z2+JP}IICg*ldOSRa$g4s^9SI`XvcK}*# z?cu|G7OY|V5Rovuc?Mbex=04RH7-wZ@Aksd_Wi>FQm9Fyh>*)^ntbOdxgxZ{Y4iwp zcp%LkkvU81t7e@;Z1Tg=XZlZG2GebA!n=i#eAk zA@II_|vJv&f81`(>Ixw5bTDl@CeRAe4X>x=rVI1q^Ykl z&z>ocg*x0-7_s!#-x@#8PVhAbST{?Bpnl%Z_;2t)P2F^>IT&Fu*@AkH4h>{FnJ##w z%G4DgaS*Uxwn<6hZKu()#Qnfs>;88yajSMhj}W*)`ZgYRzLLG<428pkHcH5To5QPw zP+9DX85%8`UPfI|k$1Kq>frW)GmipW8tvIGp*mk&x3rcKU#UDhP~P>YYd2|quA-~r zQE^2qn~u?nY7n?+yz1QJ; z;bRtx<=t--8vgE{-+JW_cF8G|I!veED)~L*>+nH182#kmN$B1h&4?{2RubW90^`CBRdsiUFzbhYkRa^p4coG#l zvDZW*TY6*8ZS;oNrK0zOf3K>jJR||2@sQ|sqk}{uLY0EgjekM+yK&vB-lg9TF1%7jIbaSvvD6R+e!-(o15q1_HGvz4*ddaG& zeiOP04N^~U+twE3X~c~Ix7B-di(q+cEEIS&pL4tlMDre1+RFL+wujN|_-}1es&qIo zdcBKpzu&v0oT@GtC!)BqDmhkJXjv<@ZO0UU3wRdOQOF^pgjz~xxpQ!Vh?(XP?MSn| zR6W@-o4^=7%bN_1@kg{x@oEYU>bT#=97~cH$xC122PXeG+KpWeGQ%`A?NLL<)b#Wvr|N7>=>4? z_e3@OnZ|ru1Sr1t_>o0}WG7*dpzFk3NLjz8*9)U31X>kh6g1wOW9>z*QZ^BfA}Axa z^aEgonQE#*Zy|8nDD!l!^0$!4>eI6@F?EB<+Um|KnQYc~oQz@4Z`BHRj<=Fo5kvEd zxH0gau$wO>8gndZ=Kfa-k!WXr&LghaY@^1r9gS2W3>a60FbDjgB90P{&oEsqc+e_B zu|a-e!{kI1P#oxDE&v%R9(pZ!%6?4r($`?u*ac&Dbo8fyct1c82U(&=N%x#XX}n8b!McW7#D)xZ+81!p?ukitO{~`2r2h<*zuRe zEuxFXp$Gt1EcYYOYV|{p-sUQ}xRuy%@Rz|Zx-T;~YFW7OwlHu$H71M#4zdF?bn)o7 zFp;{*q$(EePBl9Zi-_9oC&<%YfVB;jl@rBgA**d^NHi9RTku4PGu7UDxnSZ^BnEu`0dic=qGf>_`P+C zqk!T0L;IFBQY>cI&)$1?Mw^NBY|E7#MR$e~#AFD2l_)?|R}w{Msm?5SND>7S**cId*YG~NI=u+^`yyuzrOSMHWKKT=Hyx7 z@ypSpwC!^4Aomh&&nRZ=gkal1dl(;xtD)0m3x$K^W!+^qc`v5vNk2KeY(g}+N2kylz zM_6jTKcj#L#j?H%K~GM<|Azw+%<2XF|2u<0Ucf<^f3|N@{y>?3YaQ4h82{gG9eoH; z`d{Mqm!Dy^#QlZri2u+*I$gFwYajs7$@EVhT#x@BI=D9r!~ywVztKbM&ATO}VLs$R zZg|toE;NIih3$d4oE`NPrwOKS7jm+Gqp^%pb@Q;DVI(Ee(@0V~@nVq+O3W97p6C)~ z^)7C(#J$<%s;Q1COcw4vACC(H-Ol5YMOhTubms0>ZckS4M&k|O8o31Cc6S}Y?quuZ z>T)_zmV8cbE{Hg1PE3=5nh4-+2212N}Hyh-Tb=C}zGq2+FH@!%ufsR>S$Lz&erEMA~QgmiGtczE9T^?^@PR~>Cs2NZt*T&UJOz}O!Rl^Y!$H4aAQ zLSoD27}N~qc)~_HG2bd7l&wS^bJ;~FpqxT?kZvnxaWXbCay;iUZ`F7$6KPhqm0!1@ z$`|4rHT;2(w&k8*VVNI%SYR459(Sndb>8|TTozhrp`k~onB%};#^tI)o-^xjFX)~! zCq&Jh-y^NA)5DM&%^2S@dS_k0P5Xi)uvp}!1v+Xo*E$2ZkV4P8YNamPU|>|6aI8hL z`Eu|`G^JP&!9kr0xKQ(XQSN(N75;m87*s@>5OjbVSOztbgMMlgR2}5Ga(1zB* zfRKFn&nXCi=&-o2(B7=^j+jyaXabc_QPR+f*=fNx&16GniJ9iG7_}rCdf_%FyV=Pb zlDxQhXS)IkRHOGS`N@SO*rZGGG64y2l=Gt!qu%uMIugWz?d^z$+F;LAgRmXVVcP+m zSR{kzoSU;>Y&XAgS!l@>eaVa~)#OoOL1ckw`THMPi-~CUI(Lj!OK_6pKJ0&DiC zOh0c;v+M8q_|i2^Ks7A^O$k9N}gt~lx`C*tea@d z8eI>*s+<%HIkm zEBq1ZW}x#<&Ghidu=*6fE%TCm10pYQR*iq?-o#0m64siB^I+4o^CRYrSE5MApU7}b z6NOzNw{5{zA}78O@xWC|mH9K|5vVoHA&%<>2quda6NV{-6v?(1V>$)7+FB-ExoZokmS+ z_BD@u+9J{8Y+L3=oYGvjtzjU~?H<@=frOm6FJS*Ebn<#{ckTG{H(ZI7gZ}dhBVuBW z8?YD;N8y)e9kJWo3ZXdL3W(yUNCz)=12!8-_op5?oYSQx##P!S%a9{W9j8l^dfuzc zQuuF{o>k8oi?Yp)P6b*U{PF}{OAKteSk2N^X{eyBl=EcKLUfgSKR#tRIiMVpmN;by|~`87R1&UT7FJC;H@Be z(t6Jpo-HQ_-W3j#(nR(%5g@-eh>Kn_OR2)iQa3fi?hn~Nsx`9nYS!E6Ryc9KwP4cE z&bgB04kdg#MHmblsb$$jk$Dq|(@CVT0>|Icgz!rB<9DZLkAg}lC+>m-X)Oko{VWh9-X!KWK_QZOim!YUCxXY%(_o zCth2NkN!GWR-gf_(bSzQPee?7P1M!VsU@#FLYf5nb9cs77mU@jq-`thZ)^1O#_*9+ zlc(zpLG_`=(^NsKBO9sQJg}KhJbd2h?=E8Jo4E2!@(C+j7?VRb0VpJsoD;2NvuLe^`0ZkC z-j&n27+)h)8>R@?F+cSpP93PA$UQ*JiDyL`rUr31 zQRv?O!I?_bRdK!%=Cc>CZ*%tZNuojhx0oUN_=O8!m^~IcQ|K#n&ga>J8fben6f-t` z|BTfIfHdvts@394ovBY6TvHG4UQ)_W*cPgQ48<3HGf5z&oFBxcyc_&Oh@{3dG54-t z<`Tho_ogF^rdg7%>j4(u$dtG$beNhoxE425_2A2t)rWQez<)Whix5~tbE-Ev6ttQ- zW{0-_#fi`())(-`c2^KC0~VKurzJ?Ipn$_X0^NiR@-28rdil+9=m<-gnB=Gj9Plxa z4LXxLNTWIdWZP6#(csPN`gGVgehuYNBW6W({zwTtyLa|l!xBiAuMf}sH4)sC zkCTfd(Y3CvFl2*@LRp9qmPpi(C+fG7fGV!u#t{)r%v*ip(9dHwjvW7SSEJ;oLGo>6 z7xWR3AB)b?Il>6-o6o^KSH6_ihCur_^}Wy6f;KoJT6a%n8qSgS0qy~#I<1sKs%50K zP!BTGI+9;)L zStp7h@ZgTs!$J_qhKb^}Gye&T5+x4TBv}Rs55w=(e!xo-jj#_l-gfhmK9N za|>kW@C75hHkX{!jO*;eDy1Py39H$0<@x3 z=4z*Rm8HmE-r0-nL4koz7H5X(FhhPS{5<(kc$1|Vk7j1(*T3+&;o(uv!W=g@zp)Bd zk7I1j_K(fLf{8+Q{s+X>CsBR-x{r

@rs5i{(iFJzBC5N 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%0A3#M-xv0X^3TsN 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

jMG?bMv==|^X0M_ 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ǻx(_B&7YLs2p%3oS~bsXU*;n4Q5?YT21UqxR=T!uqiTF7sHVAio2D zCqjm#dNP3IWoli7F8e+&0>09~;trDY6PmO_RWxqzW81ZjhL2WZb6+buS7js4h^t_bbRX2)H2IkH`L)h7pI~`ullZIk3u(3G9a|xp?h* zWWs|bl!=dyUHw^K5vneLSFxf)Pp5+&fG=a(iZMVyYtm8>Mr%wNn#xBJvn_Y`FkSze zFS0%I(dDdW@3lS{<_Nuy6|)qqh~j-mURL7QGzOne`|!x0?Mgc5JZot4rYi764^#=z_vNGNXZ-&7NXZoWJ6z2hg@4_DOT82k|xiWsO}kNq9s<#gX@gz5H;z6rM=`+G1% z-LW|oIVmgC(n>MtE-Wnq%!1s*o|o%@DlaY6gGNsb>l8KQG`Ok@duvs5S!Tr#*9fA2(*bUNm)djK5>$H~Xj%tg)=FWT(^!uxGnx zfsqCnRcjtLjD`r@GXzJ#FakQo3O%qGOis|CBc)40!#Arcqg*~;DE+lF>CEdeL&NmJ z>QD>?YR3yBfhi`R2=R3@PV~4vnl0t3mGL%B6t_aiINrFyN=9@Um19lhLc&0O!uD2u z{ti@jjpinf2s!kKwYc*eKmKi=>+j*T@PNl-QyP}_BwcO;`5#4qr z(SllRWiGgY2)o0MLmiDnrzE>DcpQ}UNX|8mWwV9XUP*JCi?T3uoK+kyti!~UA+5xf zCs!UfqCIngace&S!H)LctoOiR4ivl7W;QWobq)oA7D!V4DlG1!9@f%#ibg`6dpz9& z@?L1p2fX+d`^k}C;iUk$j+qjtD)`HcR8+bQ_rGy9s>*Tdiwff3pH5#li(*Um_ZqtL$z&5abrz#Pwk&JzLA6+a(M-`CuO1h>?7W;Ld6aom}PhJ zHCeEh6H4=^2l3;)U}eUT!Vb*~xf|ZGaxc z1cP@1#PYi$uqXMG7)xjwGTepe&U+U8BK*Df(s?VUjM!Zpqd8)mbKg+!sasu%cytT& zy}xj&c2@GQ-1R!6acenxfk|tt8Im~I!^+RX+!o9lz%MA;MTF=&VMqxZvpCxy*!q3+ ze2sp|^EmVLWKMuqB1VH~VkJ>)VQ^CD+*;-B~b(X#w}C z6XBbQqO}HfsHGn<@6{R`4UR)B^p@u7%km0PeT|>+N%e9qe7c01e7ij-JNBt8cJ?UD zNA%VC$*)ndizSnAI}7~k*(;}A;=LM*>X-e!2?nxbwrxrBaeTPhRC* z;(K$i!ArW;=rhqYblQR9E2F1}S_%U;vu9%X2w(V53dJ<7o{jh0Si_4WPld7wDcBiE z|2FjJO~nf43HI%tnldM&CYqc_N?&I#8O)jN$A^c9D^CB>gEfG!k6)(O=gWHwfC9gr z@=@;iOXh?Z9;`S*Ctfpx^$4v-k!AYLFGpHLfuE(Mq&b2sSwSX~F5@HTHK1Q-6pY z*7bsEtyW0lGc>FfCVk2xJKws@$rK_uBCK$T5A(4NEDiukjyf~xfb&pUoPxz0gV#^+ zWLDoA1{|b5#F75!wMf&^V+~)+G{{=Jv9HJTmyTD!*09-0(~d$^q#lq2ymobI-uB%o zsFXv~(P`fJoirudA~#;VzW=P9A%dcU%u-bOq;x|W{}hB+?Z$I;@prxWp@MvF!=25} zg2&d;yAFVXuAf`}+^}mRCoSUkuFLeKD7Mp?j@neG!28Y7k$949TD&QCSsG0~C%;pP zNLD(n+lSE=lFef0s#@q4d_~&Dz`hB&{g>neX2*%Sk+}+C^I}i#TKXk*wI{p#rPW{Z zN};=>hP(J_72b(rvlJ!^SpCVIAnsI4Q0a!6rT_rTPuXJloOP^;`FHN9DlTCi2C1+M z!dw#1H9?!gfgk1d6GBrX!Hyq2t8QNY8A#Bpjh=AtQ}Odft33?`tROSH={+564 z&z=BQ!hP(zf9BWMou;UBoZqiOr5|m!>wPA)f6JC$lY*~NsZCf7cxEkv19_UNY}5AW6I*63xi?LXO$ZNsn$Z<1`B(L%4cK z#T=8;^SZ@J8-wy1pn*vwkKeuLP|*gT=k`SkAI4C)&gMWv7ZimhmHg9>|0<=5e4XAd zDhJ1FlF)4LXH=dS{=m<)g62J!(|n7RD}t7)Js-O~SSRFbugLpJP5B(UIG&J~p$9Rd z10H3Uqdk8ur`EptYrq3!I1e149nie-;D^2-ZTKGl{wr$%T+cqm! z$Ew(7$3`dV*tTtTj6d(*|F=IJR9$tjYSvl@bJm>CGsZn8WM9?7ryd3^C|P~s%Rbkx zXw+oNDupKVrV<)=vOTja`NlxbY)YjBOx?YoQmHZ|blN8ld_Gb8u+^L}cN}I0Xo&j{ z12m9GULxl$pWLJdpplha`5W;<5gqR7VhSZ_wyHW*Jw#C4$s;Pru-DxBkUSH00m%#B z$H84eh+R#YU~UjKE7)e=FA}s*n5xex=7x>o8CUK2SPt~JvvpZ54k-$echk|@3QS@k z4V3XjEG#Vg;Q03)JK|~Ss;YS>XM(%X?$wWac{S?O<|-l1u2Bp&s5Ks~B&`9xuo?mI zg_GN+yyx+E$m=e6t|Ra=^}tW^@EA&U~N@W)hFPGa0{^DzSK@THi~I)JoZP{hn)kB9KRpb z%>DRGEj$BlO6?}Tn*bY*A9nf;L8tEQ6I*m8tq%xbYiR__gQJ7Ejg>#L3)u9|9Z^U(>GZ}gZ4MQTQ|H0tP zx6t@Fi`_C#w&tE2g;3$AaXUpgq8QaskR8Vn)5?j39mCXJLsdGxgIiIq5>7x6|2gPR ztzimXzm($3FunPKER!7W?VNvY1?kef8{JtUDwg2uVeQJzfWvQ)pwTk zzu1!SWtF{p_x$o}2JZ0&cCT`@B0L8kfJI5)D{n3ZkgOvaY!>NFX!yQ_PSF;hTUH`{ z153ThXj2Sm1OxxsiDZ^;dL#UmbcmT_HbKX2#*4SmxJC9|8>|i63a|~i*83?gex@U$ zuG8p}&}4Nt56`asYwm zS@_*jU>jpHRLCent%+1uQG#S$Ht@&ZP&gRml{!!N9BvXV-$%L*%O2@ZaJqurhUb8E zs#m04cfXu`2Nu2UEkMEUp16%KenI~0hB5Of{i@vY**<4}q zLwuMp$25yU3*s38{vu965B-GaD9YcwC6Op?txKPpD3>*<0PNnk-93|yexE7O zc?7>2!L;_dy+@bRUR!z={`ZOC7r)b4n~(MW(=h<(zp8j>ARr(xApgQrxZcMcyH#J~uL6OAc+j+Hc1HFLo_4nCYX6P708X@_U`5QqrYk7UsCEc+ZS5+0Ze$W+w;sj8Ybs{ZZyZ zfzyRs3j`5YCX=@0CD~R(j%%fZS*8I1qCX%{7%g{kV+3q)QUqmLNTcd*FhAvPPboKKQ(5{;@inmdWCl;^Pnf(XujKh8RKx&9qPg zjjD{I8!CKV=U&EZ#}_eW(l~PIs^XaOTi4kSy|e->9HGn-U5>7JbY@9lK?B0;FH`dT z4;Kp_lH?|}bN|YItKm2rvit%kz%lU;moMJ3fBy*-X;UxclZ&oAt`-$0#ldKr&R!-q z_8xufl+$_bCrImAtrQQO;J1Mq|G#l2a_IF+m)spTK89f9NVhn%!C zS5P);>QxVV;Vo)}^8DxJUd!C4jbNMEze@|_==?mKNd9okM_vx^No6z{0SY5^UMZ(s zZ=66^XZmX4fVUU?Mh+&lU7vUTwM|Zc5C0&4_DBjjj@ShO(l5kN#QX9Lv7NU1L5rTd}updijfWMudlO&mP(^sZQ8NuDl9< zw!Xb_DW7Tm&diq}LQilA2gJ&!jrldInFxv9AbDmDyOq5=d$p09YwaoT{(U^^`B;Wx z&K-&-E`4^|?x1_{73PjDB$Q-;&9cl6Q=72mpAhg{g<|E@__V|VB^JV0+pHs8oi_@^ z9WVm1(Y~82rDyhe9Mdp4aakkpi!`|=q4wh>1Km9q5d%$ex2zS02k5lD^(e~LZS&Wp z@`eA*?f(OfhzUKwuiKgiYSI_$J31|dBz;^63vb!~Z3)E*4`01iOQ`+pjsC*E8N&+7 zOK?YjnSS{-?Qz3*Ixr_)r|}UP;ha=Rw8833o<-`;w#-!iqMLp3%jb|ed4;IgWb3^Y zHgoiMZm0;k!T0+Vpc)4$J0sU%?s?G2l!Q{U5d^wORq6mLr7C{TIK24^inUZfF$ajjY1?mM%IYn;$Do`q% zA!`8YWCjE96j)FL6P09goikB%xYiSzk6t;5gFFQSDJ|9z=k<$z>%ZS14m;56X|7iO zbx`XLN`44dguHWa%LL^1Xh#In)*IO|-~%d0q6Xj~7)c zY>{YMUXGY5il6c?(I&wKjiF2vux4LxIun*IIp_)EWuIm9o9R1qr?T%K=C+NW!5v6| zZjpc|Hs~0*vN#KUQQtLYw(TaGf~Jmz4Lr8Z zejeTBl69ev0@o$MTNeyFvT50V=UL}~bM0JAMTrWRV@<9ygK;AZH<%X*dBcoyvR^jA z>rk_p$e1O?tZq2Iiao(fmMKYXbwOw9j4uh$TfV}g44;=llLP z?V!r+5UP1n7E?Vrn{qJn5^*H|Fvv3e|-HJls*^na{Ye%Ma(XSz%st{1W%i8v3JX`egqI$nO8)ZT~n zb&MqSBx{8ixe1_k=*V;_e8YLLm@3Ef@yKwIo#0<{VHXl_cQBir*vK#Rv6d@Ek)K|b zDGC8&K`g_r#0?lXb+KI*D~0H=cs+VYoX+q;%ZQw{1zAYlPf_4r5f`oo@LBq(R5imn z)ciU^3O6nJ?&FHcK`X4He^`qtT|#H*H{D;PCfO`zW&@v^>Dw%&Mo}pJV+Q^gD~;rj z><;^Kfcy~f@$fX0Vb!eUk84_m{!({&(f~PagHweW9a}yQE;g=LVU!|$S3S!@!9b$8 z!0bs6&acr;PHaw}#oUWUfH7IGF0J1N7$Vy0wB-rrsn8gH9vcHaL1pYNl}@cTRYs{F zKbN#L_F@`2^+mM~tvAP3?!+U$lqtmPzW0cH*>&7+7b{;IUw z-d(zFo6D^^XHA$r!fOuAcDnm^r{mn{3P}X_=0ReT=*c%-BY(LZvRW#)C!1`uC;J&F zv%n)R6T*+=Os4dgQM`=8$GLy&+OH+TN>h38=Qi}lY7M|(Fi7q4=V3OVVfQXlufBMT zT?DB=A3n;tW~`3i0lWt|i8ha#)Su@%ZG?SXTqms;rG0pbU%0nme*&9?YZy!{<5D?C z{MWn*)s3HZ==iXwq8Wx|vTB!&TipHp*FrX97_|>DuTGd^!bjlu^*X zcLK3v)eN#M?>EQ{{_gr(FIORr2G4Y)No9=7Z-(ajbby`)ryDS|pzg`Oh3Kt#WKlX^ z6;0{lH>ZB{CBW|>r2XFbvz){l?y3fV72+Gtltx#&R_)1R(mWc4xhlwad}>@p2SRNR z3%QM;L}6vTftm|%Ll;VlV>}7I5{_@8R!Kzl8yFHZrDI!AJ$`SmQ-YhHtGc*JoU#ap z*s_XSvw&jwA`t@zW;vHIj&pW;R5V$IWap`G7*pk{yfaa!Rxef8-PL_R5nJ)jm5pAJ z!^R;cimqfbpUIr5$=8dCy?W@Er})EOp!MbIyHuZmE1G1s zTFs2))kJ~kkdcNZ02oCrkY_C7@pBFf5G&AI*X7QOxyh>ni?IT&+rI}o zpdvFVMdk}7@K@}d*`Pf{f*=@re6Ot|qz`by*+&v-_&O{&8`_+H{k(ck+5wjochFh+ z)A>K?iP;U7u@GcAduwgG~ zg&5XqAbzSGdQ*3IVF62EdZ6JMNl0X7|Ij9#U`P9qA z`uy_Op4goS;_cz{e+wpnhWE(Q|2b9tx<_t9__y2L4h-eLqken9P=XK;{yA+?e!nnk z`*OQ$0GU<4QvwZ3*&%_I=0dRlG+6&XFEFXc9RpZ^jKT^>XdHnqo+&t6#0%U)Mqvi^ z0HUCvkOHuFw^8N+gfF2R@toboo_^b)ePoz*S`_y?pJo^zNX(O2pa zQUwD8nQkQxWA(}8jOyCn`<1hgV`unV7c-uh_qTsLzKoE+8fTnG7nuAePBR*_t@2&q z&X>37YSooSzzB8m6}Ip~G-ZNY)GhPM^IoMt;sLef*>yzm%IIo!dDMl8V`Y6kOuN+6 zOz|uaPzLJ*Hm?;L>$oJl=((P&ws8ZZEu0TGbK!9&01s80^4U>pjY@}U`C#%e^K(E? zqiPioq)Na+wsm;NfMZLQiK+l!5_dxpSoGVq8xxbW z0zcqed=L3?xttlcB1xX^C`bVrCP{czgcYdKs0l*_c)Iu9!|sHBNuOwXeF^An;2Cd> zAgdX^Ij^=5G=y|O&2L_G&ygG?vy~g_F$GC&nt~9Suuz)agnhcHN)dE*Fm>P|Dhd)c zjh_7inDY1FLhX0xI+wYnAj`d9c_;!F-Vf2%+Wx+yw{yyaCJE-msXziW6f#hCpePy& z31HRH@A=-HP?3!*xwLs`DewGm`;spKk+?829(Ga8h-x5uC<_z{lAVS`A)kVZGVI6~ zetZ%P7Fx3;)5GDR0G%LuHm=xe(mqg&JRl&MYjoKH9Ft!__ukd*p6))f!I`FD>oa2g_=z~`kOjV3mdMZmYFxFCGz6L3sfVn zxpwR!ol(m%nJA@1YbaKxaydt@dNU!u~=x8vHsV||$>lSAWR({nuoW ztaRQtC{H?&R*;|%>jL;U=lNfjJ#wd(!V5MJbHU~?|Cj6v;cHpAI#b8@`&t&5F#ip~ z=p7S;0^(Z;A^Z>FMN16^N&`3`aIK~ao-*Ez;`a+M6=E-r-=t&%mE0y(dC!{iD$GA* zo@5Q-vBRVhvLWV=z%i%QdDW`2r$vFKVhS*9HeDZ}A@p$;5G%3J($Ad}22i0Jy*!C) z=mF7vF?y)wet>*-(SJSftmwRGc(uIiIZ*KEQ#JF6qc~n~gXK}~fb|AU3dquA7Nb*7 z*0*D%N-o9Z#QF4_3`chKb&`hmsc#x|tGIe>XzBs+mmFJZo9 z#_Rhubb?x)RV;>i%@$<*z zY*W#i0}vhcrk?kXYJ2M2wBmVFaKz=7Q}qG4<~{MDR4#pDte@;AMJ)QubUOPhEC+?^ zBNx>!&76ItjK4~+=xjQ*`$8MhbC=E3>9kV>)tq$q>0;-qRBpLrY1h1!PTT|S$jP$l zN95$r2?hNdt2>7)BC{E-3bd-*ig_14b!I<7erQXbJ7P}Icjq=degPoGVSI!6DnxX zn_AAk8w-oq={!imiCY$+&EobglcpISJAr^=5a093I7%rKkp~hB!PLFKAB$;5rQ@%B zoiensN&gz|MY)%FPyTVm)n3>a;82{SXG>V?@GtwrJuC#Zllu9zvXXIn8L%vP>$S|BzrAYmtpD^0(Z)<6 zPmvau_;l6CC#0m&tJ%diVTN!@)r{RO0_-Cx)a#ZdM<06C(2AdUw>WLDd>^|HDHmE} zDN$H5D`KO7AGQfKr-O&M;#*tUom&CBhl|HRh2|0hg>7@xi;c$xg#rt}N)00QW-uM9 z23x{0=35#hLQFrZk4Gkask!%rX=`TmTSD@+qMB;0Ev9g9AoY3C1aGS|p=m?92AqZJ zfnZjiiUcg-Y;yJfZURMA0BLO?z0!QvWl(j`nwY3U@#$jY+ls>~96%D07X1x!m~i$A z(b^a1xc`^}HFmGl`An_RmZNc&Ad~4S@U#BTuh~F?KSEIKWk=_UeID?XkMtP+vgwJ? zYqJDmy8wdtHmBv!m5dF{xiY$J13(y6NNEZuxBE z$l^uscH#@S;{%YM|Bjd7yVXK(>-z~tNEAzC7!BQiL*xh(vuNtY@I=7+CmdwD>P*Op z+Lbn?tOxpjnDE$zoB(pp?!m6PO2CS;a-!`#+?>(x+E#lt*o=6dL~%f*2w(mArCfT5 zZ#o=7n3T|%5M@VY|CtPi8paQY8T%B-Ly95+$omZV1{V3ZF6|Y01_TP_hUAzSQ3`^J z1SezbiC?UN4qF7$Tn`%Kcsf@Is;Or&aYEW?WAjk`W`w4xh$399h_Nj{4nrTSD;cx1 zH>;5ZlW1#>@)y-SeIR$TQ9wKsvZvK0o4F;&y4UqLaF_9UvJm0@Q5f-da9FM)kZ)vQ zfDs-9LniZRg!q|l3~4We z?i%sF-ENcl=8o@`k2TOEFO%MWVh)hi7ikSCfUDKSz#p1bLpX%1f2+#u@DxR^yONLzc#vyr zt2ZeZEGqrgJ9E`@U%SdWYCK7~hwDGzX9;x^KS+7{nX&F2VTU@8S@zl8Kl8s$!8&EHWCqkoDc@Lpa5TNM)et6&-LBjf8n`zXz08*7dQ&?g%GJOms`kug;hrpp z$A0VN|I2#3vU%CftG|6w?ooIoq`0#@u}8i@NgP*p)}Cgw*_+rdq;l91|D1z9-AP)z z{rGEku1j?2r}?8Gh?`_h=J8<d-XP6vzh=rm)u9<%o1B%9~< zYG`IWETiXXaGy;aLWG>?i+-3EGA@;dkHBEdrsNfC#K$BP;7=i`*a+St_QbG>#2TVKzMeNktXTeKt2-o^&&E$*oGk4m}iuYT$$Y{O7QZ|#_ zLJ7z3?k5)9WSU*@T+5468j}U{(tWazx|8|N*Lbu^^N|fbNzeT25rZ-~Tp8F@RtuWH z&x2JI84uRraHrl^vv(X9+?qo8LQesx>J zi{WhucISSh-QeENh<StbjJ(gu70N$wvX zyLTOPK<&FnvkO5}n_=Ut1>!T+5BXuLqj}j~Z9Z9ZeW89bhQ6Y-FgjC|1E)Gp(_DsH z!7PJrc9fpW&Wo)_o# z=uD)Xda~SQjsNSBLCs1^5+VQg*06o2HnFN`8%=_5?xYaSqCkyz=>(PzuM5Y)1O(#b7^+5YbR$Qk7)#mbDr9U;um~WNZ zfTJ$PnSQK0`B43Z7GtTCs$Qz~%$t=Tjb}~GXIpzf+}3Y?wQ_oIH7V^W3|17ZjCZoAfD9gSaw{c6Vo*aSV0N(TjhUw#j*qN)I3fxxQST0?d|= z(3u3BIA$?K6oMbF(Fhe6RZYLS`f|NO^75S|ws5ye61bO;j(1TkMi9e#d`On95T8 zjo{A@_C{OASk#1yqcA{;UFb~|No?e(0VBpIHa`mbpmMz@9HmOwG}4?Ga}@g2!jW>p z&mp!~U)Jm?`fE~I15B_fH&Yx&bMk!M()k5Zt(9>w8d?q1F%P}n$5j_e8^^fCV*%*R z7{zjEQzGVYRIjX?-n(CvusaamZ&jY*(NdK^9b<{W22~+w`hNk0L5xgCiO)f{`qyf9*1t{TI$WpFRh?DCAa229!^Huzq z9Xfy$W|rzU0^hzJ`Qhq6()83q+H;`SuHedn^6|>;m>J5jC&63ox=<7^qFRplK}EwM zlYD54B*^qclV$_ZjkuaXt!(%DreDYy7mYTZh5RFj)?d{x+z!k()TL%)pI=g&rfVxS z)We(%HD_%o!FhPGr_FZJK~apTK(IW6R_j(_Xt2!$=taLHye0}4S*=5@)ORB0etRvB zfJU6MA+E(wc{(o}z!WYn=7}D zX5pt4fzwE4nhwppg=>@5bH6I5rcT7}tqASG7GoHSKoI4DfXFc+24FssUB7eijj@gV zJXIE)uybnk{+T$Me{d(7Oy5JXbTAh*6h0%3dya%+ki^Xs_U-^YPp97{`BJze^w@>> z*pQ0F#PS2I$GrwEG9Ni`7=6h0iUag;WyUlib%?gm-e0tao3)p%@C5N6QLzj_Ov&cD z;rS+sANhmMji)hnTf$fI9k-zGDmmN=-vO@yJs2l$s0Oce$hshaX@;X;*G}mHFu%|P z{mkJ}MZtptdNHv)2xq05cBfO90K$^*Vs#6iYog2rI zGEGv33gudU5c>v=9-X$$tUOv zLmfv^8g#tjc_D~0l93EM5*7xI@++bJ20h@-VCax%G4xU)%rArcYHX*Q-?vtioye8v zNUL7Hw4T<%wW4^AJhi>=j$29Kn)@bVFmM1%>Oi#yMg=dI_RmwX2Entda@jpIEG0H@ zm2UUxIeCSgI*aA2Ec`=SjrMH-o1A)8$bcFU?1z8ucV)Vqo0>FL0Ih%AKz_h~X#xmf z|K%D8sxG8Vl8=g|EETzkR83#>hS8(WCX!h`&wTnKi~| z&s^p2?Iy)l^sYa#f8i;BhD@4L%#i>likt*=kibABa*7|=Re5a?!MvA>pKmw)rMVv; z%x@PB|8Xz4wP&Jt7MQt2jBUy|mbtoId7F5w-twmJRww7yKDey%%#azIxM+!q8_AE$R9GeO zaJ`G%oKY6N&L`eEb^pWZbQ4Tk%IDIZjxN}UOJb6v(^Z-J*L%!H|L-;L*djmI9Vmk! zOf#aRaBkPVwXQcOJ6|mAk0XFj(uVT)dss!A!wM&cIj@Vr;)-o8xknbdzf3)6Gj*Gb zocPMvhCWM44_$VGwPPLjyH{p|3T$oeoW21I*}<)woA&V0VNacV_CgMOYpAE9om)3W z%79mosXKV4HkXgemWd{-BG6P1evaw2>xYdeV*X=K{zd>2qJst^_B4QZ^ZLx;fjev6 zjkm|%u~b$J&X9`(i5$srN_g865&_t8GZWZ z_p41^Y!?5o;F!&C_%Y$t9tbU!RT+Q&93q+0%|W_{8oZyxzk2*%*AXRz$>hvG)oOGQ z5MTu}3fq6}ty>P5QO^GDKteTYPCfp@v$+xd+kphmiGubYDG@#=iar<^EI!bW8$}G@ z=`49f>2dFom`M&xL3~qp6^ahcW=ecRG#E+jIgEB|>YPio8xTl7FJGQ3*%K2DoaFcR zzno!SckwX$6PzNkYU$KD`K!=%@brKMaDPv-`cVZwC? zM20h+3LWzUxO90$1S7dLl5LA%@`S(7$sVU^mAkdz%f0=z30qGqmDKK?#kMCTGNe2! zHgJ#!MFqfhRN#87d-OL*$eZ~lF+_5CpU|MFnFN9BL5wc6my&kI<={S3cSNP%NvYx?(M!92*V_gzTh=l-R3l9 z0tyN(<>T#||7x4BYBczzknt~4)I<1RM25DF-(pVHEGwrc7A-pLF;zY4R|XwW95`T3 zEoT5EyWj0&#B&M={Rq3Awr+S$ULl`GnUn?-hvtDOX}l!t0xI` zyvQ_p{S{eEDJ)RwO&DXR^F3~e;~~eCt@#~*8!jo#=Q}7O0V*$NMZzubDOVsQhWBf` zToUH}Hp7o?5nTAFElpLTuXmpW1_nXo`xDAH7|I;#ACR6inCxe0Oqm~)grCcdn0q@H z8*g#pTn`^!Yy&2VAy{m;9cPxwLp$m4-bCG3-B~S=W#wz_pYY?j z2JippBwNZT(5dky*^5N{A4yWW*8j#J|JR9D_=N@?7zfD%(-O^(qW13yDrTGCxF%m; zR73=#@Ig`oF@;eO|1(YLgi*#p!OL+~fUhDb+K}kkc%{ccZBZ0q$Ul^lbpF6xQ51Q| zkrB`@OYe;+iU6b;WhpH$kWCE5?O(PFZb*+4@UOA+V1R~BP=rbGIbU`_F%*LTn%_Wh z@vr_xu}_wwF8gEp#|MeO6kn|kAovn1U4T%joFq)m3Nd zVfPM%<~bovS{Ce>!Tr}G#W-7fIG*HDQ071Y$`fPChsZZ0nbD9Iz-;u7Auv|GM*uaKB(YxDFlbZIa(?L^z61Px7TV`lHf)9nytg@uX| zT9h56mKLm(lx7r$Gd3VRX+{vP*{=r75^48j1<-?K3#&v|Zd<9GwkN7`EqxawC2|&k zyp(6$`p@<6FBd0G#pZ~% z9@dA8Un28?EnBX9=}%XdbmqyYcVja1y%S%yy(H}H(o*#xg&!k04`srCW$S2v)2%U< zJHxWhRdLo^_t7%Dj%6G|p9*ba5T%X+z%*rKu@lV;Tl(vY5-+)&aAUk3Tx*EO%o^lw z-77?#LuSC|tj+Q`m@aP4prC%og4Z8o(2qW5c2Fctvh*K0hRazqW(*A3*CTBT`md&!mkYm zLY~CDfCrS5`pVM&XXbW%z5Y+e;(oS{%esX7(AGP(lAJMjlTG~$kOyAb3saRx?>*J-|%}!1ikD6}!O3UHaU=qAfy(ZtvNxcS@ zLATc}x)|#{b-c8LXY00_^Br*$q#DLc5P~RCDWn`fb@U<4aIK@CvjY577XWLD!^#EW zoARo@t8U$pJ32MDW(|wWlizoOZ$_%u8Z$ImAKFwNSW)hzv74+B(V>%%;BmIulz9LdqR(UpUMGbkG~=G&S1qrC`NF zYwGkrgwERERJGa029eqpt{pe)rtn5VUg_kcK5AK2S4=^z86t1CIPC#0mm^-sPUrl# z++5FKSQ#3?niE)eADPCHU4iW^sC*yzD^3%_M$+^#_pSF;) ztR#4CVt}x$1g4*x-ue+GF@kz|niC;S!SC;+2lDZ;#)ls*cOTunpYRE;AI{`h?zrb% zr#*HjS-oYizPcU~+BYaU6g5)0i4@JF*=@)u6I6ETa8J$vChtN#?l-+gUnkD`54;p@ zO)A_I3=2xzCl^Q{hG03o`$9^p$4+g_Am>eXNal|(Ut%Q@YA$o)k9FTKUz`6E*8Ro=&AUvG(t6rG>9grRm}# zVa2n#LB}Qo1o_TCy=%Ci1aS>YeisG5atO4wzo=+*T>1EH8&3LcR>Zqs2`F+|3T+JH z9kvXbM~_@>+!gRKu2K9xiSpMYjv}Ep_YMs`?m*K|B8W8M--fLT=j(;pa~PG**A+68 zdk~*OTPC;GJKK!wF|8D4{L&gGSK70Z(=(~gg0YeVV5wAlW1M*!at8a5lp^1l(y5S8 zUWZwbIOF&Q?%Y57O+5T6KaCgZmYSSI!IpApYSw|jKiWz?Bd#k!fgRj*7uJP+E?2I0 z*gp7BXR-WtnUM%OBAN3hBq$)O+OwmsMlRu1LNEW* z1xBs{tAvaV*`fKmicYQk z8g*jBLmrGU;Pu|HY4PVQo@>xyRm@@y+~qHH$@tJ*{^pv8A}!Skuejn?_CGRIcDi!_ zx-$YD&Q}$>#YA89fVJ~pGoP;grHAwCL zn=!06)sf)m?Zj?7su3}@`Md%iN2?2u4_nx=oWY}L@^}e!opTYY1>6`CSm5cv=(4oR zt+sxyQxm^Bml*wXy8K@OJNG~!<&>hur`yZe>(bRG6jN>Zxt&eEt!xw3 z=g`6w7sw5i1IIdE$=R&e8ICHj(zCE7yN~p>%0~Sw*mrVsFQsCk0qO4AI*haJq3)rj z|NBpC{K^w1HA}DVAFW!|YjBmRc4d<_wtKqy-zVz15EU;@N8Grb%S3mnS;vV0WXz9! zT87E>I3|Wj*NP zha@vA-%g*74;gkHHWo9Z&Z@I@6eSoh4#3?$mM8zXTUw%oy9w}PEvpcsGpGA_3yHv6 zrxJ6+$_rWM?pmQ<43GqlwO>R7{ut=_25t4NA>O`(V%NBZn%g`_Wp z&_PA@hol4RW0i+Dk|U;zgo0%py#qEp5^lb~9an-f2t9#^_YmNhrF2;StZv!hOMLwz zxjb}so6RxksrprGj2*rvJT#3JATX|8h46>5)?>!R4CqGy*4e~yP~bWZ zqj@HXN&Ac@=^q$kx{fFvHsKACit8~iHjS<_&AW9OZJlZaARo1DGjuv?^q4)GUYFo4 zKNe34xK9d9W{N>}ma)at%pkO+k;MpHz8KrT$0Ehr_1|F;^L`f1F0gNLI%YH4oyacP zuE#K*mC&csYF3UCC}Qj_R7zH3iMD-C+GXj_74lhA4t zC&MW}Bv0>h&+MAyLyAOPM0{UX6@>_#2AgaphmtPW!W+(r_`VtQU2a$dDsN$O%v;4Y zGRriwZg@5aMKri05tWqi4PyWqT#gtmD4vUqJAtk~lP)=qj)lAcV5(5CuO%i;kv9{> zRmDu95eAQny`N85pQ4LK<4=(n??Ks;3fmVtP@Q`2tu(qL2g?vhkA=R`C{mhbu^ zOhH_3n<%DyXoFr-G0YHJW=$+3o)?p_f3Q5|sk!&L7d!+q057qT9LU0A37}~#Q2{r) zA;T_uAU9WpfK_gsp!2{*gTa)co9n6!4o1^HU>;rW}7$|d!~-h zEvQ6^>tfPg4$r7<5SvGj_0jT4;q z)K=FDbLC|QU9wzidA7A))q)wu(`|L-x5^*twiHAP!4+9x=Yy+UYDTz2N>Vgz?5jG# zfHrk7A4!Zbsl?>EzkwBTj0yr-@P$!Ds>K}D+l!j-zuc6~7V;O$^A3)BmmrQusSE6@ zzVg_NDS8hgoRtiPilJ6Tz(F8?$n>k+zYAe{f1Cp6j9ep4+s|2aMX$A8)Wa(_d?Tfo zIQ%v7bafR1s8dxXH?(jgsilgFbi+zg0ijr%E(RFR8(stD3} zTHKf+^PEo$acxLJi;)dud*eZ9df{)Pu%+lcerRn=kG8(RsNJgs2Z;E96xUG7O)Xex z=8-VeI*nP$=iiuc4^@2KYkx}rG)hs5*`)F=zuO?O42rp$a9S{b?+zv(G~RYqHIy4YoXjstQCBc?BC_rz z$K$~kC$OV)PlS^4n9a)xoi3czG6Had=1&NuAkzdew!XV~)aiAWUyr@$%J&H$WL?2E zD0+4|DZyxiG!~6oUx1RqINEb-;^C0X$p~(bylUcR^)fvZ;Zw>Tq7hL7&N?;H{EW}o zx%md9qGaP*gNO^~uu#CMAC({@k`=LS-NYy37c6&&fu_!fdJ^Fy=uaawu%@|#-g{nE zXi+S~OdM$<)#;QFyoy8`AzU5Mf})FAk>I)y*LFO_7|t^&7W7pMkq)4G*uonLk!;jlopW4Hu=0m|p1svo?uDMiAl6Q7pl~ zdSiKFqZ^15n?t~|moaX4@1OJD@UM~_?e09zabrALZhApWg0+%hJ zPd>rZ4Q3$)hx7;vILa*%R#+64Tq(8JPZDiQaJnpE?qi7}a*xJ|g;0v;-krs%i_Ib) z;gun^04VSr#sc#NtSvCj&@fNp1VY$$1~vyd;&sNWaku^h9`OYG0k&#eI}Ba>Go}%oCA=m2JLC;I@o*gqJW*hFhPuj0#h387AH%HM|@3M6+*^%8Q-IViy70=S9t@fZMl~z)I%4NelAQ68SZ1{-l7I$`G5|{w1;0j(>sQbj?O|ovTkD4%Mt6QNiA!kPxLQFgBR+&L9hlHG69tbpRAT;Q~C&A9S#CWhJ7uD0K z=+4SAr)sdCc4k9ZwGpYykLQVYy%wM0*DlQ7*0T9M=gsK9j?A86j1fa?$4Xg^~(4W%T_p6OGTC0 zl|%R`wJW3bHR!%*v%y^Pj_cQQAviX(ZvlZ|q;ex9D>a4}M&hfKBOII8%qI_a3V6cK zBaZ5NnprcoUGqm=L$O`=S>{o!iA+xmgJ@BwZEV}NZQHi(q_N)EXza$e z?Ivlg#&#MfznHi8oU_j5A274#!(Ovy?>+l@{;W|>XMH|B+zAOGJ}*uBOIL2%7R1sm zX?RMt>iIDta&0i)p(q;qp*6nm9b7~J$%rkb+$hGd3;gDq9IEl9lA?AcmKo3}%ZOpr zZ`XfpoQgv>ihfc2+3FGSzi~Onx^f%S<8`^B)hh4QOdmc<f2PZtKq|v_dZeDX2kNJefP0u=PSwlOr)llkJ#}F`4 zq4Dpf(hNlQa51l!S^~xPbm{->TrC1I;AH)rH0u(wFGZcFT8kRVQ;>b_5I$9Y#^*2&@+1rTvrd|tIAg!^ zoW@^+t?5+dP6})c8mHx{tILiLMvbMH9fS5GsQgK}^Lk@GdJMMtV+jC>=L;f!K6pPP zA)lAOyUzi2!mVzRr}ofiD;Iea3wt+t_PQze)aE*96&_2F(SM0~2&pOHt!F239T+6a zPW0goMNNXP{agbcj*CFMt7sP9js}y6PQK1wPee{>P!W%UTY!FzSXtB5<)vfG)(Fda zn{hFv|3x(d`Y{9nPYb}W%EYcDdLo<(QtS|~{!{Xu+UVa1PLASCf~^9-ik->5xA~=0 z4aId8GLjvPBymGlU~3cS4<C$ax2i)5g4|NOO}2w;(`&+la?q633i03y!qWdnK=A{qt9TR)u?XWg zSG}sY{#BI9u6nQHha@@M<_h!HYO~&{uGFe!({IuW_C?e5rN{#2Y$z<@|&KCWfxznGh|BBC;D$ zgY1&BWX&+!O);%4AR}0c>SG@3Pdf!&O z+HCzX#ks8T!ENQZ_`u02?z=A1FfYCv$`Rx`9Sn-57((?#Cbbw#*O;G0`nW$$Q8ZHQ zb)Z8*DJkq(nV`JDoU-j`zXDGxX%e#SEAI%`dIMC^wzL#FWv`FZSNisdBoj1}k4boQ z38xQrM_C5m3;Va?8y2qE0_pXPELtI$4wO>n)20PCq6fi8x*lDI8l259Dp^xZ0jB z;sKAF(K)**yR6)npgY?N=MgBS=C4CVyR<%X<*Mr6;!3N9G7OAz4X2fERz61w|X%_c9Ee8i)_vJB=uk$6tG?dMmb zLSUCzktnQzaW<4F*c&ehZJZrrP$ko=0^sfvmRCLH!G5~;-pLI=Ep1)3VGwrW z3Htl|Sq~&^O!j$v@@QKv{Ip-ors$lV_4C7G3*0y|Fhx?}g_?Lxi@szFXqztkB$BM+ zP@@tQm&p`Jc~Osq2P>)2-uY#77^)~pOBkay-Eh|Tv3xd>?4)m^4G+{lS~=P71El8L znaMZsH6WAMFH^CBch{AN*oHm$-#vTU6_?v0+#kHd{9{qr@WgV!`HLWw=7NpIDRt+6 zbMOH!E>ri3IwhV;V9SmjCQS=9!ud1h$vouK3P^Vc0b*&Hze;ua>!+J z4k^UWcrV_nU+WmL_C*w${g(1q0Tk%6(=BI1f2Sw1-N1O_jy73eOl%E7+%g8rrg>#C z8JK^P&hMoKMm)pd*E{Zku>;5Io5<5uPSC*lckCO{FmM_h7@C-H8UF6V$8i@!*ZrR4 zc*@4l5k4kQURQ7|aPP(Y?e3SCE2)1i%}ndb+vX-(9wZqar|Pzh(=U>9K&?8v7S=nR zN6hMl#+y0U)GDi3pdNfW7eX(%l{xL`?Dy#cOPTy8&ipj?22JE$H+4x$6EJLUSVD1m z<7fh8>G|y;a=GCYhIkQnjxK6GyP+t`j2)bz?V2HG9VnWbFJ;_CbFdO}FI>EHlZr1_ zw89mZv&1Du&Kw%wzhkp=0d0tCH!1jwGPl1=V(`^};ONqd*>qIR3EfvpVx;41tuOkt z)FT)N2*xXSSe}_$IdDJk%%RgiV!wbB=Ax!_gx(;s&{HywiyijKZz=lRt0|LioE7AqKZ&|%OIH&tjpUYLa)EuCfh`JDwq;gyYE7e1}eRfMT5B~C=FlGaEw z)_8ggVR z9$6|5MWo~hY0DpN#vV+}-wV#5=DteBGZZUq3F(?jR4Wc@z{T>ZXP9`H7QwS0p-~ILd}o)hbq6zXah7u_N*?$Qb?Y_f?!M0<>*mHW3}@AoreRCtv2g& zP2b*{2*b=P0n&emaHS+snOydcoM)Baf^dczu(_OlW;USDe4YpxLq|KFh`eEi6!d04 zbly9i z?z8x>FO9$Xa&OxtyME-*wYn<7wtXqu_41*y5icqaXzVuQqAQkx%NnDTQ@1S1g-nlo zO+`KiyQp0Lq;z_9B1_f3<0gMvU&luj@VxNI+Xs5ppAAxDM*4g?G$ z;DblXbAP~~%19!YboJm_*!rvz5jB{~`g5;krN2Na{%(4+B8*^%tShdXw-vDGVjmcq zx)tvSP!(a~z7#cEyQ|NOpT@Y%o&QcD(L}5Qp+v}b`eKtOFtNa5XoM~MD0>k^n$xHZ z7kx{OH62XMAO~ZkR2pYM?6FFoAmgPSSgvkax1P7(394(SnyeKv=*z@JwRdm^i|w318I*TYf0LcT(A{i!@$k11^gmLY>k^xjmD=Q{Air zNJZ~4I5zfm@@MzjHG8D|zcPyl0`Yh30its&)d@Ee|p}rsOJFzD_y$s3k=> z2xE|HoCc+8b19<0ZYqY^nKz!(zUu;DzM#<9cCipy=x-{+|olPp5tN`o0Fi#d_ zO8aj5D0E@jW!L!k*bUvmTB9r+bgDK)L_^&vT-1PClZYT&`7i~Iv)NXd$ zfe@R;64t2Q)GQH^sSn zPJN)3YM_<3`q@sP04@@DJ2-YiudxN~COmCR+YVFFPIMq5_|8@C&C(w*J40Qol3ls7 z1|MD1am?$p_swEQ`gRRqsesY09SEdb%We`HO*wfKI5ZpY;~ixuG%He8*06PeELj?K zrelW)lARwL-$1Qu8L*Z{9d)}g{tH(Ue-|8ii$ZKfE^dO4i>lG)8+p1eK!`*-h;F1p z+WtVp45nxrxFi1+FBE+^?Cm-Aua+`PlVr@NAnf9wUyHddUrfk=MQrjS^L9D+dGB6p(zC~o_J;b8{Ud(K);Y!RA4B4DNP$SuqKX$S5%3Ty^KKpzkk3R61$5Si zPfK~Ch}OEb0$f@1IG!yeNlLSF{vD3EY$OmmDJ_wE*qbyqOqeWr3&tXo`ZC^M;28$^ z^KMET{^!*j(VDmIG(l8^L&V+6;WwR?IAw4H3IaYF=Kw>xqBNGW`1tT1hq>1A!gGVL z9%j>N6~+j#GR?XA0%{On<1qQRsNY-x%q!}0G}x5YCcU{N>4iM^9-9PX`+ny=Uj?)1 zbRre_WMRZa$RZ5+H#Q-!05$vv`(YNjhn>U(+o3)1AQ(PgVjs1BPi1jof~;N|^ZTh5 z$R>FzUX)iuhl3zRL$9I(vW!N%EQspwz;ijvUn)RTTr+3SsJk#Umx!+~I_iFs@xrpj z-hZK|pBs@`H&uI~pp8sYEG!gkFr--Bu1)|X`7E76SKCSmjd-CnY2E{A#~ZGwEmHN> zo|n1*$ScFfru%ykox|7tEt>iM$3i*tM2e&J zb7H`3C3iMrbd!xCojE@;n!n-EY4VM(@kYvPtQU13EMHIe&z#8@tDx~)j(_*cl!=-!s>gEhmZC$-jiP=K=7#{T&o ze&P$Xize$Bv33wjy6Xl?{xIRWsUX^$bhY7R?@+$(eqa4q=p&;i@@ zqjQ2XRgEsZ=Y&$Rjon~F#Us{+f%Az{1=J*>D0%@-ujZ~F57hu7YKqc?VfcL|!c>%j zpY=AE)A~IplCjYFFm70JWw0yndAB{UG?Z7Y2A zCf6TX^+ea6uw*}ws$|Dk>&+SwkN_2Dbot;D5@@EH1@V|)#h}_ZU6`yZ0J zL0f}%8nR@MJ(x<vaya~2~ ze|=6y`GEG3xFX1ae7t;b1@IBfChT&78+P;U)!q6e@?HK|Z*3^~#BdCtR?WBJzRFzR zVno-I>Ar_+UD*5zhYV_V7ZYHV;X%NB-+qLbS-q7*B{+3Na|q&Xl|~rb^)%e(`A%sg zxdrofC+oOhleCUmK+HcvLqdrBO&7YWeLl^5u=sqdhyl~1%+I|w9e7ki;l7u3 z+P`R>vD6G?L4$;&X(*mQG3NI8A{ube=_$%9u%ai0F5t92dMMCZzS?t^JN0Njv_39 zhtnwKv-cY}Y0ryHF(6bioS4YJf^GuW3eU%cpfWH-6-yJ1e~Mm_Ye6&}(IEHWL+no3 zF!5~9$v}KU)y`?X)-jlVXzkj8W_`M-K>FS#!;pnOPh&C;0~~%EiH$%Wb13P#R`=Lo zzoTC#>V+6?#>wYZORCYNMKgGUD4#qACsdjN*?@H*8txlDyth{(;}ajLh4jx1WP ztH(!Vluk3h#ysJcQZJpia=LQadf3#_V66e;B@o&5tkSb~i(&0zLi6U$zXS0W$#A0v=#mJ*5WLpEl{Hb4Qyfvb%s2 zdg_wd7{Wuod3)N(Z$HPgJ&U+FYG;*I@X^$X<@9g6p6TcOu-M) za1%fJ*{OrtP2=60{6<&DwoXgv5Ue}7Msn9=kGsIK4Q0M{a?A^Z$G11HwC||dVIW0& zG9;yk}`_uPJSvwI67n%SmESVHTx{AJ-?>aS zu<2Y#Y5JilWFJA4{mvKBw@yoU(CPp`+yH;!wAz=>(IJm>J` zJ8SMiUf2P~cbhZvdMgKGs%tc}sLMYRVxTG%E^}-5a;(fX6kknwMGWbZy%JGF zR9?^&p1pHthy+TtR%@(79D|&9KdCecw@QV1IO!8jBn$l>y_@ZcPg-stAKw>?W*?|@ zXzCYuVF`r0e0@5Xg>__O-Y?YhNx&hRT%NC>@C*p0uF{AiP(?XjHy(1Au;N4jr}L(Oxf zQRp9jh9k>w{KV%;lZA%q+&%dhtaHu|ow)9D^nyg>bQ_FMJ3i>Ee0&VB%77D`!*cI; z?gonMJw3YQ^dce>9|$yilG-?Q=!`uTevM-;zp+Odat*;3(>)L+u|rxMRm^W6p|8sTE&H@n`W<_|89n!A8lMk*TCl$p2#RQgz+*0zn< znQn%e%mgO(G+6750zN@@+z)c7N6A^bK>+ec$5ZH9+U*%MYI*vm$l) ztZhA9b$gjPmAR{)Pmb5RrrmY-dEq=YvBrZ0PKGGrMkC+)r)?$k(6k925Tw1%jGD4QsI&ay(P(s%EsM->z}!+3d(S=FF$Vxs>da2^AG%5(ih&8p>)X zjDu&RdI1g1-;z*a`!s8z7jiEL;vPSkWD1rgo%| z?v{v0M&pk3Ik!pIEp1onR4e=L?C=N~F?9a6x4aE$b@oG|5Bi^^dVKtJzlE_8)%eg8 zPQT}Y0qy;fp{pRRxeXC+yhnVH<*QH)EUrmSvnRpo&HL`|&g1R}uJ%}by^o-*<8lpe z-r39+#b-u>72weDEwDje@{4|;N@l3Om@)cto2Jm86M|Hn_H?pr9O1!Hc*~EOBe2-C z#Ucv}!I}?!S=IQFrVXjGFSVeS46Qjkak5s-IpR|sYra_Wp!RSXss3XW@jYWT(k@AM zcSt_XxEeXLqS~+dGOyE19R4ofO$5J%#+B0~~)XWEz;<6$>ng8AS;d19`Q?mEq zyEXtO3{=O(>T)DWdGK~X{#sgjapP#zx>s#m?QXx5QRBpk{>$B=fOQ@yH*1$BY|kK< zpCciOw%<(>PZrbyv!z#DuYubX&p5Dk6Y!@gyCZ8;i}OD5}&Su;id7NLgue*c0^Y^q;gs&44lkNva(v8JDzmyu{-Nlf`1Fp+N zjl>2$CVbdGQl+e1J!onF#MySdL28o|#mKE!TaV*UXV&Ifc$%+KbBh??;;ZNbuI)rk z7_g>JBFgL;s|tIhK`TGsPGDEr-5TjGukzEcU0aVUG!LfYUu6Zfa!snaE^4hz$#l^j z$&=o#ll>!>A)V-TXXNwtgxp=V>esNA%bsNGL8frh-8d_Iy_{kXPfh{^=!}Uia_(Q) zEw5r$b8X)=Y~6QXgO*%>N9(;Kf!=DK4yB@bDyX5|>r`WQn>=ftqxQwCIt+5Z}oAapw$&>Sq(aBG*XERoA zK3T@vBQubgtDCdW*2J{h)OBKQJU}wazEMY7wH_wvUj;H(@p))*{#B_}r{pkmwh&yL z;)2_S*hL(7C>|Vq2OG*KLIwPQ_EpCP6J!K&6pqzwusgEUn;m_U2%~Ofyuqsk*u^QO$3M?P4J>asv z*N=&@u`te4x7FVR>H(@F$(GM=uIOrZ4Gwux@5H8t)zX!82({!n&ok{3<{S>J6GlJX(kY%f z*6hxDPD{VOpSBQ7XTc0hufa7om_Yc86^u}kf11cye+XJQ#6XL>x-*kaea4w^XLYv_ z&(zjWODD)s z00x&hm9*%TFvP&veG5i2ceR&7JNF8;`sMB}Yqu4F4p+Y?3dUnY4F1bM-??!Id(iJd zWvu18phaU~y|c2xy2vN-r)S*qAzHm%vh|h67fb&%HjW_&Jj+;BiFyro_YIo!oEB&{ zr(&cp$?R_7tIrW!K=wd2Tk;#2<>7{USZl)ws5ICneRk>CHP*5{ZtkJ;&ON2|ZS_Km z0sP%uFyMw<_^jx0A2t*Qyd#>qM)=s}vfCqrB!NW^1F7nX|4Cp;bt}U1ZV`BXc7LA{ z=uhj7CJab>wac?w{I)W}XFsrX!N>tIT=NZ6lTVJN9cqmPAju6@%LE+-*hR0~F*;uO zdAay_G^P`r3;ihdy}f%ppz-e!P1zYsAN9?r z)F~we3jeMQ;4=ILfowJzmwm(wlGW_Cr1=UdroAO+{Yj>${X4G{9~$Rb3J_Za*h%=>z{xkkPoGynlYNV|pD3TzY|3mBAlm-D$xTQC`nq8FH~) z^HMF0Rppz_TzO;>*)V`o$2wCbon!TFZ^t4jJ|NyKO%fujJP{e`;Yp=Zb>#SbQO zf#{nmJ(OOIH}BZ3!kxaX#TdvDAJo<9b+omS!cN)Sa14Stq9sm2P^tjLKwC#IeX@?d zz+X}TK3m?-!F0XYj^E+Ds+3{05mCqIid(b9_NOkKVf{QLk6AEFv`b`!x&F?ha8SRx zgT~Oc82WTuRe&TGkF$fl2l}Hut z2(J~D6j$XD5!ArnmMpRtUqqd+`?0FYN;++U_w)xuRBncj+h=;-Fu4e)zM_~3)Hem@ zxE(#lcbAzV{aBZo20tIP1i!TYvP2}u$FS$40y*V`ehMR1n``v9A5dz+QE=qg1=UjE zcWCi^S2Q*mEA^(mQDSM$xl~`qt&A;G7yHP& z6ID|c6I%Y$JHl`&1Fq36VxPB&NN|||tSs9`)6_(AeY!kaJ%zfRg{g3n85hnp^(5tz zWR32@Bmc^o>l^yce!;O=&&R{JA7{64Duzh2C`WC%H=bXP{9lx(oZr_%Rtzrzn~-{I z!AE6Q;%HC)5*itad~s$8<_s8^7wrO-x4Q%SDAB zUbnO#kaHl}bc9;SHq7Um_IK7LnxrJ}{n+_580h3kmNee?mCm7Lg*^rQl@=zyPrR7lneDzf}Ms|OpIRd<%^-&{biCeVz7-}uu-8A z^RP_U{`Bhez9dQB65N3x%^7KO>0h*@2sR_rN}g}$rmikiq}{t!PNl46sa~U@yifPU%`R)9KLvYxmjix(aa^boDDrV64+B2bmlh0_%$& zoMkwj1;IVd0(uSk#fNR9;8!Y1}5S0rHaW_$0@&fG-Yps z*<@dq3I`3F_S=o(ExY=U6(hZFPl%~vtvAxIH?mzGj5RXcPzFS7^YHT@#|`Nd*w8;M z)J^!^Se?{%`Jh7=y_3b7IG%8mg_0_Qo0{0Cgoe(mOGk0XF~Xa$wQwUEf77DfAjf2y z3{~qQ*3$5H0V3Du2PrA441@4;N@+LjSn*#dVsrdqu1kz&`8*p(zr8{~BE6cC7R`EtWR!2pgV=T|mbE2Wi;h)=Kij;QDcts<#J5PORC zv#Mbhn64?3>e1<9 zI=J=F3!OB}XWb*g5BSUrSAPqxgF2(`ev`H6KaD$%*LNjEr#jA?(D-s<1tk$K^Frt1 z35E5aK-5oTg?aKc*ijd0^2FE%^!Wp83`!P9xkL~#mCw}JxV$I&h*jq0>uW-bf3ONxnj#(X=2hs+H7j3fH_(5)sB7#j4?f9hT0 zc;zTQPB_QXnicAajfjel;Pt23JMK#ml0~u}5IEtqiv!$)Ls*(ttkUNR1ZVhR=LKJf z>W0Hx{r*81)-0-H&Rk|ajw%_dZq>X+6a!IYzj8otpa2(*Lm<^)04v`!=@=Opy#6D9 zr9he6&(Rk`)F}%QQ^H#QNXaS=^ft6H*?|Om4jcFEIKE$46xN}p5Ma0=@&%{d4?%GpApfH%%eFoB%%z}5O;8irHs?d?7_Q=kMN_X?1N0IUAWSd#mBJazJ`y0 ztB9Bta#)5Iq=ZMZ6SRDj{If%~@ulTsj@OlhhX9}Di?AEmW!)ud`>vcoy=p%{KeS)R zBUwi~9ng!{;}xt+(yRN7QY)e&3l0kbn9#@XDU->NRxF5*n&kY_Wp{{v{rO~KZy=~( zl)$QW?u>p-zPGa%^IYEp`D&=R5!R*h8a|5V<``g*m>%{5&gROi24dZ)Z&^c+$Os>> z!vp*c`3iUUCoqzRDcU}XLV52BF_LyLnmj)~KQksi5x+4VaRqmZkq7!1cBh^I9`5+? z#0(uZF?624u|tK58GH?YZiY3R8(yz&_Xg;^bLo~F`E6f#QlniOeNIiCF6Q;>zM8yu zl(sWZ47+te%bRo_T^i9@-Dj5Rt*>@$Vlqm#twUA@$;%w_aL(B4U_8u6U~G7$AD@&& zoX@?}cUi&FXAX93p-YGDZ>QD*{Na$-vXlz5cjfvpAa08yF-nX35U0%zQ7lDGua%B* z{!2q2TumVi7=tQFyg~4MUHAmu?8?HJXr{o5M6@T?Fdb6W5mJ;!_C(QnY13+zN!FpA z!sd&7Z>RWG2Uz!9C5^|;6nNO_flC{B<^-NZCp2xv07yi4HGNN0#oBowpa!B>qo;#$ zZL_E`LNC^R5!%hv{Nr+_Wb#XeHV+tr4J??FlJVHmL_-|B>V}H7+rCIYyg(Y+_X5m8 zYfHX^aZjOMe>{2DNO(7`MbE#DMM_k*TKX9D-^%=R(dKxU8j@_JZGM-lFeHInX}ik1 zi_5H~dF~HfNM&d4?ooLH8lcMjZ<5k+kRl?ieukw(hTgGs|5D-REZHcVfA_6+n7A5@nmJ4(ibI*>I;BEcG1<;cH0q7&R-81Ynb}$YAj#GS40!XU`E7`>0+UjW z{%{qB`dl4w7LM$0b(RTYq8Ycs%wPnK_|Lnb&8p*$#?%|VLPaPREeFIB& zTU(N$OD5Ov;{7+kB7)x5Z)z*#H+9{vD&u4s$M36?f7~WRlLlNHvExE~F(O?AJx7-% zlO7dHY_EE_7#lH*AO0D;^J+SHuUnm&Re}h7c|A4H&zi0og=FF{ZBPX7;MPw&jVY*{ z&4ep{W!U{rN;RjE&{Yma#kJ7in?D z*KB&LX#chcpX>9*Zzc70_eYjJ4txRXe2`(+5gL!m| zzO7NRn*|;OwXF6$pS2BiX^AkTR?vL8O#N_MRENJJJFg9?^8FU~7C`8y&L$n@Vc@8g zl7Lm?tkmrbXz+LBC@#v^cXYO9hbMQtJFN9?n>d6bx!NH^nppVG3Lh{U#Zy$*A!F*W zEG#(%JUuW8^#p((uEN+Rcrf!_35hnxL_s_rL~dpRohcY$?nlC=;l; zu96bLsA9iS2N+Ma`O4wrlef}LZg|5Rj6p^oVM{guW6yeU<51bq;s;o{-)h5_jOX0& zK1~~l04y(w^{(KNaHUn!f4ACz0$$*Y6^Hy{WCryw{W<1g9L&%N_Q8~JemM=jt@bVY z&@NMV9U0QajCT({qT}3|3%%_%yy3U80lZp48Wq2}>k^GZd-avgo7UW15BHu;)gU{7 zjwcN0&22~A?1^`HmAv&yH`=*1&{8dz4CvU4A>C8 zqy1)sCu7Hrf2nMxMY|5PE#u~u%2WT#JInwmJ(oi1oLg-ajK9ib^ieokvC8rbl)i^) zj_0j7YofZPvf=ivaGWy zmpCTgXMBFCN|R3t-LEI*&a560g78)gmOevvexNqbpI>V!0@ofc*Q{?}Q|Cnnu`L1a z2p^XnOk`>H`*R*<>7oi*CH&o?Bw4L--I!(T$0i5wV2@G7?f$Yj%FB9f=lM#8nwqtp zIlb%_zT^SPrc#C)pH5DXVTR!+ymC!4ggP+GfoL`C{U6gcs$hPzUC;T!Z8JGMO!z~Z zrNf%WgwYIq`*}hP8`kF=oQnr}0c<#|M~7N{-~La^?enEJUQGH%42sNugLigkA<^1| zVo@5wfla%ed-?pFv~00LntNNEJ{&>YhqoegBt-OcoD&kL(fF50_OfLdqo$;jxvrmU zsyftNT>BG{Qx!c!8K~=jQ+d}#nIgGVBPKPR8Y2V*2TPQ>Z%dTx(RSw6Jm*&x=wQ{; zC@0&l78IT{yuC(foQ;EI@aVsToI^7z3qlrfoo0?J{7-!+*!~bo?W%24=N4UW`BsAD zx$j3l;n;Wo*v&A_hN^KTT4h{&jk^ClEh99PQugPKKPn3la0@@`nep*(Pn)<99@!2^ zDS2dfO*au#&G!GlVenNOrflA@U|_o3$tH0B6GQ}+US%%~|Gz_0ag$Kg01czmgTD!F z%b+=ghlx_VneA(~2g^{0(|jAIneDgzDkiaRy4zt;b)&s7nhKsA4k~b!vaMs znNO!dZA62wc%^x~Kg>Iw-JE%0+?&R1U|*`EK!wEU zcokz3^*SL?qtIvZ%#Jj17=b5WRSPutpOpUnTYa(Cc4$p-v>&qx#&3ZW;?9w5 zyJy|$WMKCFy`WEjJ_co%>7#uW9)4S%3QFtB$-h6|SJQq3vjA!N@z~ePVq_GVi+I70 z?MwJqJ5N`k^@BOLg%z$08zHrAdcvOmgD{qU4eKN58UE*6z-x3xk|l_5rCjxzQR%t$XxcA^N3r_(G?Y2esxDB`PhCQg#2Ue`+9Qb z-1AfbNc63cPYVh}7AS=}<95tI?ss9x+Ha8hj5WP5#osrZRV;hb-_JJuNry{C2?2`c zr}pHueR%0JhwAU5Z^)=GINm(APxP#KaO5^mw5vyBI zm22B3M3PWkjvR^O?VNSkbkMO*7SQ z;8y=uXUx;4Ka3buu3Ta+zUncLn#=j*Rf<29Y~i1-U!J_NbzGI4uZ!mCm^TSw{c4F* z+vR{s$xZc4;5QpSW_Sv||Lv-^!j*lwWYUzd}nDM+AG$1?chm3%x z^h^+f=(#?nSx|_A4Q)N+vg5Z?d&XN;e}m*qt+QGDPAR zAAuau+nvfBXY$r&NO@G4=>WfI-Gl0ugh9#qoZqIgx^SN2FF(pbt z-)+BU@@HO>wE`yFa{4(ZStgj~j*(k=*K;V0l&(;K`AazxHvl|K$}LBN~dt0%_&fEYdMpuigpBLRIWEeT+u6ubJ?|t2QPL_P`PIIODm6 z7sqfJU#GADMC!kshZ6CA^YfDX35L-ZLQ_JZwA6_&MjSGm{8sqU><>%AN+4f)i&Z=^ z?HojMJ3h;cuQdrU+F??FG=C@;*BgsX7vG_Yqb{b_Mz&Q67MrjL`6QLYe5E2b?D(Z~ zgdLhrX``f4ji}=Yi7H>v@81_?o0K)*86kOpM#xACCpx&PJZ>oS7Emz9&Dx8xS zY3%&SZ()tW(=LzvNv$=s?XVqlO3C3w&0qfWkJ2P$G2@ef|JT~J(p#H;LUwB<`S=}p zpQ-_rGI{Yz2LW0~g;gmA9g6ziSMKWbhhL0}I@C5M9WMH}zsU=i!(lh||Hf;X@WdLb z@WC2}cPAwkE1giUSbfE7MkA&j@_!b8@W?QhP(`3D#@8uM$}X&kYHg-T;ZhZ~Xm?u6 zb1_yg$;!(BC@R)8V<#zbY#WKh&II-|=xnx|<<29%e4AEn21j;zSZZ#H zb-6YhA*#6(tw3@-rzPI|uAeqLnyg%^jD9|OE(t#`klT_P&bfZPmbOB;$!rh9pphad zrMje8z}Jq0fk*ix!V`lCIoqp^lr z?9}A(GYLXQ&mgn@v|dG_@JFa5DakKte^J#+KUY(NqOa;24<&-|P8k$GW5=2!QcxQY za!yTLzmchWg#OS7PuS!glBcX_4BbnIY#fxA0iwxBr6m@vR8uROA#p0$a*L%Ub!i%p z#>s424k%zY=+!LrDy38e>pa8f~nM~)?7`dO=`}YgrX;)BQ9;grt89+NHAfk z#uAr~1*5(DjYaM`Kvt9ls~-ECS%Z^{TB?nv8ZrQR%B-*+BRHI%6`UZmy!^1lzhWrnVi{{z=s_m0nPq zyeR}}=yxyle?EfCjnw;-|FI|$QT`KgD$t^ViZkfnu-uLwjFNHE%e-j58%3SS4(1srha~S-i6y1o*GfTkKzW551!;oh;$HY zOz`8MLXIXM42)~-irQqK4Ctne-J7NT*cO#aOKo*!*4f@9!Se7GmKYxAB#}DkckRaX+IHCPZ%BJhhP@Up zFPJWP{svTS#-`a54w3_fr0|7*@sFBJ8CSqzX<-TfeXd}UES=*Vw#?Q_+W%0gKA_R` zq5d0<*i?h&N_Yw;Ls4U%`UW#adlF1clAg%MXqvlV}yBuN4f zTyUfUmK&|tonaCGKPx)zU7v=cX2Itc?Hz$8$#E6Pr*_K_)N*fR^uE}VmvB%}zE7a^ zX?q9vU%>_SU&i!w>QWSu|Hh^|m!i=BC*61=!(j;PpM(mHEIo+f8&$fs(|*xmwqo@m}lDs45iIcVX$Uc^*B zt`my-@Yik^4w0jw)vy+ml{7xwt_o|Zln@aG1K!#{6ED&icE7}#xn5tTTRBZZ#4aj% z??T|L#9Y5qNqE9wmX2MrMLytmHAnJ3*%FvDW%6~*DGiz&aX#K+w%7Jhy2eFep!_hr?ru)pPvI% ziSUx%EU)a?xNOF5%8IAoQVdofp&SPBR`WN`V(9_-a5at&>&u;3;T?04k8CJH`(hf?J^VdtA=`GyV!;ls(yXr$yIZ5lw7k3S^&gF7=PjW<0a%4|((w^jG{m3D4PjX04a=PPuxg6G$oSyJZdcrg5 z3D2Y_Jd>XAOnSmI?FrAcCp^(s!MjYjO^Vy6p(fv~-EwFyF3a{OotM1JQae618 z{O%NUfBNihdS{Ay)Ir3O<{GOJlAsPUmNZvYPm!)}e=K1M1sSW`O?`iIc{jPur(n7; zm?eFIxIr@8K?YsYpK}_z3N=>*b`5XnNng|Ma_+D55)6*=ab8y)##_9c3)hzu=pcqH zCBq(v9b_!&!U8^ST$3fqaWMH3tfjgBwSa;_RnDeplWm|tmeB4xA47-wE@^t>+r0zo zmyA9fe>rOuSumJx+DB+HeOO~OEzwqA-prugY0CY8S%TS4X6LFZEgH5fLFGH+Zqs9b z6fiX-GzRAqaX8IP-8R*r-iy%QsnP10=}~U>TDyHvdwKJu8^{_A^1_w($ZMW;5t)xC z_sE++*-Tovn2ct_yjUWuebA|3b}|@vKgP16f8n$6sIx!|mAOY?c+^GUytenWU;DUo zk61mtSEhf~wNt7>O{$BsULx-5(GqbeutHLR!`Az#8kf|pg6U6qnHONMhT`D`cpx90 z;oa)+puL(u^sPG0Ctl9c;Y3Z<(KBRBTABBen-xKR71d=_&g#jmjz(U{6C7jV)xR7b ze=Me-%N)a4!}PjXO^NnyJJJS3#abp(Bt}?cz-CfYqZoJGBsx=0^IHw#J%x2{8i&@k znh4&sAru2Fq%WXvu4@ll+xB^#t5No0p61||)XpoI70)cx zDj$KpC*|tLd7(>tc~8<+4@a$UGxAQ!f2Vt!Pa}JwN1yI7fo6*-N3$``0%)1}th&qc zsj!Qtbt}+cgGazmWKmaN;p1M!_(>bDmO(~2rnOUsOD7VU5rv@15~Qm_NEr*Z8DxA0 zM|n|W21-rx!$8k&bfXKfz*cU{5?#L?1q3w%DPZW)i_^1{=x=WFqwnFXl-J_ae{@(i z?Cogr-G$q?(0n_GJAmFXcyfLXPtpfGy})h2(+HAEVL7+N5vsT~9Di6!ZLE_xgD(b8 zSC;j5;kl5*&cjpm4NtKhc!H2Z5Kxo@MPw3gv=CY|ngTJ}`(nQkJg?^8E5JR*7A&ed z`n`c%^j9^W{On(Q9O)r8Zi!qRe@lm=KMlg=;(g>@;b#|w_m$zAVY0w9c6^Y?z6Xiy zFh~xr+42Jk^cxs@HoO6a{#QADAAQX0i_loe_Cvzxkt?UsMAc|f7sDSrlIS@bUrM8y zG~6wIfAYU(YIH{% zd?<6fN)Pzwk-r%DCYjEga_wOC=~j-hyE1Q$GT+GK>+6*TKDhPrjt$YUm~uTtJ54&P z@F^8_iHOq#FbAux5}8VzR4gM5xsv=^@QHM0+&4b&%KVPchvSoM1)mC-;3`IDq;-ml z6L^a3D9yO0v9ZE_7CtYbf9egOmHGgE1N5%U?*M%`Kxw}mCkVXaIR2_P(1VV-a+Yx_ zVwvhR)*2F)aEtaq%E5dsN?BRE0M88&4+{A?DDpUJf6>R$@1=9t`gPFpLDKerh5ei#K zr2KAy!63aH0wwSVhwA^K4R zzK~nh19kaX;@ehRf0cuOCoFZ{LHj?0 z*Kb}uTMt|Mej?i8W$o`j zjzVyk@4QDpM&nskM@EfC{?Xt{%)l$|NBjHxkE6FI?|jV%9`q+~ep~|fuNJbTXULMC zAbXR^WZWi%KmyXFaVA6ph*`#rAUgJoBOS1M{OsAuf9rRH<2TQKJ^kO4HDINP)-MOv zw-YeAyF^5)8UY*Dnp`;@tANc4rXRpY`Z7{ebCG|5sMY3g0dA=ATXB%yUr(%c))H(* zBb_4*)j8^M;V1zEVwo17M@v3=qKtt_vn10h^lt~=DeD*BUfveqEn=scN&K1$M?2mo zDI_Lgf6`?XA+I+KGFgQ8vsdTuPS1Z^hwtQ%!*_iFR}qPgibb95wJc&>p&q_KWczUO z@9}Nfb?FB1} zIj%F~ln;(38vBY+l4e>d>?p}y++hHC>+0>vFK@SC96pSU5hKP%%6k|h}zCN{7tKw=q=&W~TNW15Jgq$`fzfEO8|GQt;j z21l}Q9CeAR?1-ZnrSn*_#HNM{N|1Ua4s4w1G?q!yRUf@PK3@-`v@48Ws$!-_!CKxG z45fWzDBT{049;EB7|Ife{jwBZYLyTte^M$y#j6&wmtp9|>Dk#@5Rnd+K?9-}dGP-Q zY7`CCWM|Y-&ony-+!mCmV?tR}Nf`(o3zZs>F(VmTp4z5am+glhN~bShuct?}Gn87M zosTEww4P&XN8m(yULpwsw*@CBxJXl?gcHVbmnAYqwWNtvj#6&BtdKOCX}!||f2X(3 zc*={q4DK|mYNb^LePF2({m!qA;Q!#P3vP?x*a)3rzaeJP zTxy!eXye(0QwG9l=;AN)xO?{M`C4{Py7LN(|3p5G=C{KpREl1iT@0e~;U1pz}gaFWZ&9#^?3qo5FF=3mQS-)~w96!2{jA z6&poG&@burokAD|je11I*sg0--fRud-Y3ydku8hAs!3V>Tu0`ni|sJ4VT^^eqr9q7 zrvKw_wcF0_CUp6y*(CBOQe1B~yH0d}@|#?v+8{C1CaC$SEJl~1Qu?xne=53~Y?_Hi z%@-kCC-;T=083*^I>yV~8ND~+VuGvMFWFact#B4Ab8xF+zo7x%w>y$-(H)tg78YD{ zL5PuHQ;4OZAYCee60W)|%LjsVcD$A!CEX{g<5^v{8JeVZ5lydK|iKSwi6bETKV#M5kHj>ed=m-;P*Ad$uB=YH^+Y!9En zl>nTqD9Jdaj7x4)Dr4tYVL-&Ic3CaM=h>^*>r@`;w2s}N?0H@xfBm@hd#yqkb?g2_ zgp}dEs$FH?5w8R7+ow*q=u?M8YR`-^O^u0#qF}hwEJkg}lafEuxDI!57IL*35WY)Nhrm-Y~ZFtaD z0Mhfbvy*?X)>}<5e~TTBnjha!W%F2}@#1#kKK2s_iCX{*NivEGM-oD;CM1h#s*_kL zlOcf6cJC4#9)h9=&)2A-1}A^pZ=;~*5c>`r>}0Zd92M;YHl*+1g3%zqa$hErCW<-g zSV}d^6lJLtlu##m3c8E?^6d0Qh}1^we+vOmx8kUGVYZ^Ie`hKb1on!gAyT0Nu{6S8 z0Z%wm2}_jW39*DJBWU8ZBFOZN_90zK><@91HlqedQM$w@_R61p<|{LIWDlW$ zX)rId9&XtTbfp;>R?(Dy^lTyjdfkW26;qiU9puJf% zR_Ca`KN#EXQRb1IjmMXfuidV|x@V0Y1a24BibEVbAAql|86L;TX05}9bx3NtNq8sY z`5Mt@n{1Zt9Pap)=;`pO!kt2O&yjMh_Z=yB=?7(05ldN;WsCw6kJuwzSR!JYt3B>Ns`gjkxY|J7@HYT_re-$vp}tzB^ST=?zeS$ ztSIdrf1cq>K)ZqQtmp8(AaJ`FkCT`s(ivk7BZxZ-NJorhNK#Usi7sbzv=~2r`*I_U zcMmfD42)Y&Nenz@G?tJiR3}op%w@op%ZQctVjOGJVEplC58F(b z&{R?Bv|f6$T$B5mkBGb;VfPKLx-55Ofb|@we;5RAnHpK0GKrLd8pl!7N<@c}MrAmQ z*n~WQ8sVQ`-@RNP#os;jde;Y7;~nzH*hh~ROY{6sqQssXPo_{+DCDuf z&g(F7*$^@JID*=IO95^P>Dk{E1a1M0X<}H)jFvz%C)3oTuA<2201YS3SQiyP2jlsx zcbnm{vy%53&L5&O4}t7&)6;w_mEZXE9wy$2+q%0 z_WbJV*4Dk#=f}~}7-EYsD%T zJv&f?!0lp{asUR9LXsj~(-s6te+3#zPSVUc(IqsY#p?4n$N$>G;;lzjyG3UTcB(!` z@ByZmwf}Neq#Vw#0crl~8f?1}z{zFL##j)zWgThalro|%kF|@XO&#N?A~hIom~csV z+-(#O(|K{V)pRY-Q!M_z(J3Qwz@OTV1 zM{~s6)i*R}GiOg{?c}{5h3)g<`0I8A`2C7FJ^OPl{Zoj%;|=_$EWo_4(9UTkf-)EF z)L-5f8`6yxmSi%U;tlYTe_r)fPI(wR;I|b8VgY(K9QxAXTLpYL{1KINqp&)R( zBO^_yh#?a~6E0OkCH~7aktvQ5srUn!!LO(5xA8w<&FS4Dasm!Lg>3gR`{wG;uxe+6 zmWTKaZ#W}>n$FF*6PwqMqvowDLd`$>wouwPf0bM3uY@35$Y^Xte~QdiiPWZCFy~Lt z@u7(i(BIGhxt>RKU$^n-m@@>_V|R~4ZPZ*i6m`K#>itONtgw4W|7Gte z(;o&&R&iKlvB=6!0yrIK*68je=p;a6v4Bvl!{$b&)T9*0yV(D}^{RMDmMBu9e6%uy zv?Y&_m{4|T{durz?;BATD_@14e-bfwW9Ira@I1^_q(UKy z3gaE@xOeA&9H7M1EetaL1OQX+G_j=+OJ8{?3VFB#s(tuns8jjEf3H8U!l#O&j4XHZDTGhjgC)(R zv_%4jQ*qLCIh}u%12V}1)!9WRO`xW8JZOO_&i6QKiK5eT-446+s@MSklNvJ`Pl? zi7)*=1>Al+{bT(0^z-SP(@$sPw`bPoJ^#?&!vc9bG_d%dTrI9@L71m(mTN`MY255g zWO^~bJPsBWg##y|nE?mY%yRwzvTKuznc{vFBjSd>B1(%!7h@Lkz;{*LhfRI@^lp6m z<@1N%PCuV_NFMHA5~uW})Hrq&_eVGZ!IkK?`)z#x*Qxp#z`E3R~99qRH2#Ft2DFYE} zNf|3wpqS#oQ;Gy$pVE^Ctv;T9{*P{G)!TM#pw)~Wi`b)h;1B~d;NkEIg@0Tyg%pot zZT2ClkXFwXk_2nboqGKQ-xpILyi4axcb8Db20}qJ%#ql7G#FTsG6N2ZQDPjMJjCLp z%JoqosULAqafw}qkn+L^A;F@s*BSrYH}8HO|I(pbSZ|Rhgq_7J8$WzEw*nekA##AW5wQhxb zmF|W&{rPM=kLvBEnoDRh#Il=XlXpYwZPe42 zOKX(4TVB@+(Y$gt#ea#k`F2k~Zb)BlCzovmvz=sKR8SoX(lOJ@lTT5^Lgk^rRXlJb zDUgVunGap{N^OGl*&ny^9Bx5+lTO|O>9g;WFEnGCY|0mZd;s5G*sc@6O_{qb0NOLAr$IAg;t=goW~H6zKoCq9df=p1<1)>0lT1R!U|v zXE?YSLy^<*&%fP@;cp=TwU|uId5lwZi8Z8<&m>P2Wd0ZN zdVG3y1;KoPJ`aPU2Yvw_=L+hD2UJD~5v>Gc&tnYfdw<+e`P)f7|SUDQ{S#xe@NWRB0w2DuG3yu^h)ysI9!f^WDJj*h#~Pqa>Z{2^gCt zx8##?K!2J>p|6XzIQ88{^Ki(Weljt|`^IzU*(4dk1*kL$Uz6l1AWAh%JvPfOaxE*h zN%DHjbE zFUrNj)2g?Wp3+)3#?14ySXfib({6KYr+MW#m8 z_5RDRzrudgYMe6V2u9a~n2ZfAj$XZTO^$|rta$!p2dsFpgz?RH*`NRo04@J^A^~>* z6l&r{mE&h{V{`{7P*#=T({!$7+})5K8h-$6)2~C|!{bRITWZ}oM7GXeojY4J4dG(_ zFOW)!KuHlr9%TU`IO3e6&ar>i{%xQ?pJ>MT=QphrO|!L?S&C~Gt^YBZ|NENiE{V{l z0wCC?@-A?Lxn7oc`NswH9Nwg*3K@>#Dr~dsD4ZNW?qA}O^BpN$L zMKthr5TdCD+Jk5c6|Hgik&qC=!;(;l_DN`HA)!F2Ae6qR?ODcX5J!SgB9s?$j{TT- z%&{Mugv{e*3d|+~s;-v=^lTRrs((juo*5!4f7qLdmImrgM7Ofdj)QWdaA2oW)T5BF)R#-@P&EsC<}v(I0C zfA4&oCc@ygb?{Bt_HSH{LmnPm7zCHRcxefmT#=v44Z_1=O-y!d_O#p zK8mQ&{Fl4j#}wicy-3E4$8pU4HNKx^pjOVGW01orTGC*9she#yzx^%jLGw2e$9>tax>QP61KlC5M`r<`@C4!4XqowJsHgH=cGq(>$BrtTu{Kj)kQ2 z>Xl<&E40cgCoWy|!Y)aQq8NR7$Wa|<*mDHuNiuh!^TK~Gu4ehuzdPsivSxkZ7nD}LXZS88RLK=;=4pL5le{v4Uq_1 zD@_kf^ZhNHRl`PQQuZd)n(Bd8^LZ;>u9=}5Sq{X|+G#rPXb5d0w0C-UR`V!m?YJl` zKnI~P6iGio9#Vb~au&JBqtG}LBka+bwx`PtOJSB__aZTWcw|W$UdVYt0QOK6G{3Q! zOuASdX8IyNqLs`xPtwui*eaQdRqRSHyVHTCw13ID4G*e_%&O4IJcsguMFzGB%lXc( zW)nFwF*+a5Y`sb6x=`dbpd4Fu@Z*{N`}AZ*p}(36h_SXsey3S-k)&F7TDTi~qYM~g zP8qzV{|mi;bx)l4Z(f%D*vyLLcP)FN`!2MFVEV}m%_w9B@j~C{6Q&2O?|33lE>4`; zjh<8E4}WS#SsEY%_@s}jZ>mS!gYXE-Ln?6?OPBdXfAEQqU8;O8DVK!bljg1G)C&Y9 zfdmk#E=UNAK~UnFDCIGtnOo>WhYvSl&OnF`))Edt4 z{_NfO-TCiOF2opCSBrdJG?3mUp=LL-GHi117w|zTXnS3#<9D1bR!fw<_hH#!(S#Pd zZ|ff~GB&%+?`9{3*cxUZQ~Oe^TfErRt0yJ2AS@OB;ivy*r@b4NRf@U2xA=a40aOHR z+>BTmrxhnQWr_X?3)7~wC`L4ub6~A@5cj3Cn3Z)5WGZZ%b^B}$jryS%E5q%bS;GMF= zc3^I7k`J+5WmG0dTXu_ysFDDGr!$#Wn6eAyJl=FSZ#fELxQGR$%^J#MOnq1RegKuB z0z^b410ut4wLa0q_Z;Y%hIbw`@5yg+F`0-YTjNt$J_|K~-tH?{UGcHH3%c&8dI87n zoH*1WxWU?cwupgU{IH6DSjBf`6*pMQ-g{t<9>?T*-PrmKdT_lCsB@BkpEw_xwsGuv zN7?O8zvxB!HJx6kcVmD)1{c6z+5=Fs*uBBus1-AeWUx;zGFjDbDO<&!zx`OI{9bAX z^s|w8FEvf~SBpU8K{jc}lm3ww@<&pa^M7wOzHy(t?k_&KDfQ zyc;vs4?HGaUuztPiBv>?E@zrP2=%znUFxeSlzvEJFLbGD&ruv!*Dq>dbyxM5A1DL* z$1LNQ$+s?A{+~s>&NC>cKek@RWgWk|qsV)-c0i%xKdV&yrk1K_weT;0UZejv29{YC zFO*3XX|)P&?XG`>WTnyi5#jo^6UMNQU4;bkg^B`&T^wM=<+_u9E4!*L%3=k~hi_fn z19TdQ^x#aD_LUD|t8_KzDk2(Swg+Y(JsecDtY?_au)`Dv%(rAeQ58rHjL3II5X3@a zA`p&34`B{9wbva2*V#`i9JNaK1jVybGV(?=lVj_tHrA?n`}C{BHsRPImwDox3SopB zo7BsFIe7WP$Do#f9+S`4_YV_KABLfeiPryI&*dR?CDelvo*N=UV&&4uqX%Bdw5yx9 z*#^g%!rzetrS+X>YF5O0NrtLV-pI^l#Nd{I*R+@4c5@c{_O3v;SjTd2pKUHkv+KPi zmjzg>yLood5F`DH4m`fM*Z3M|TA|Zjt2#u0aVj%tQm5$wXqUm{5fgtGhnTa0oV$&c zJC|CyxTDYvLnM1|z+_98VHrhe_Vh|NdT?xX_T14fy#aO!;Rn0z(S+4&*#;3SS|p9C zXofP9rHE?CSbAZ6_fQicN%>?U?g&DM^zvSewP9=eC|+#v^;Ya=)!)0n3J33LcRAXj zo7ycw+vuMLTiBp`-*bQAWX`HciHj2W^1Hmdn6P2W7!QLVQ%G=W5VC${TinNW;17^( z2|?RSMKg!z2u^CW?9{e2jL(g0Ts(enb95Lhg9U+Lf?$v0h{wcJ6!{oy8^c4MPe@yX zg$HJ30AxKlb?#lZqRKJRRJqy6m_coGr~ufWIbW}$o27AoZq18bdsGo0cNpYg2xovDf%K zNzG=BDmrqQbIr08SfggCbzQn+@|9zB7%kS1Q6xPY3s*4Y$8JDe;Sr8vPhg4K8(BUq zEmrTks}gGuQ%!NGXZo?(JX^24)+y9lDzqxE_2k`j*XDl;T94Sx>W*3;yoZG4&MNqU zw9Bf1eiiDfH!+2FTPsTCH2a#H@)OsIRx2T&r|w_@f^9mu^SeaI!8AoJed7gmX|}D1m{jZ~{>PQ#G8i=ay6 zu*o&MdHjD-mDoQ_29*ds8F-wjm`!Jy=CDMP#Og|kt*Dy?RN;Q#87!OWzbtQjAVowB<`QsPn_%Ome#xZj-RU*** zKGuAmi3l?!FjI_$aa-HL2bT^lzt1zq%l@{u1Z?+&iPePYWgH%~ZX@`;zQu7CWHfhs`t4Jx_@L@E?0jZK?~>Wr83-hjJ&j+7CGeQu*pQy? zjGAF93>R6t<=w>%5HeIP3JPz|B%7DVRiJI$Dl*LV{Y8k_f1ZCFIj6ttf9HR|pAWyi z`}O>dEuU#ym;fG3vno5f>`1~E^XV1vBa?p$E%c&c&GC(M{`S-<=9j4$TE!{yUG*+r z{gkBB#r&rslcbaMWy63zftb3NRo3*Hmvc8Ef)&BHL3tSKiw;lI8#3PeEXTh8;K_l2t5{naK{i+uefzJqMDW1r}I9sM97QOM-tW zIq@v!yKlX!;w4j;dB}=`z=$o8b-$zD@q3*oY)-3DXbW-1HT z;24`+V}jj}alUB^vQ7W_1$xq6C*%+Wey;AoiN^Gm@{TSR5}?&DtRh`he}d#^CgrT= zW~&L6*M&)h$w2ujL?ID}0byDd53qmaagq>0l^?|^R?&!9?%gY@@THdga#HZ|3BNz2 zrV6yOQ+aM}_AsTnwKCoa8r_dVm^x^Bi|$PW$ap>~^DkeoLmNHO`A&D>(lANYc15j*%r5?!G=Ntl7(+G)>(^L;rCYsyf7_qi8 zd$7j!B&_3DM)me)!3IY2j8DoOuOq`x_tt56()?izq~EyGVG1d1y500J+iqN1)1BYW zKm)f}Nl*v@l7Rn}EsFcr8Bu?1GE8xSBoZm3gmD@P#r!ZOB0?w?DZ+@caKsRpCuL0z zsfE&73Z=@MEUZI=RYTeAsxQ;lt15_6hazfFbj!zJefcaG1{m2W7zKm#m>TG)N-pMBA*XK-F0=yYO?yR*5_ z&)9wdv%`B+{N8+Xp2OgG%7%@>9upV2UpQ1tFgSjXU8MeFE~E-c#DYMD5sG4=&!^x@ zV4u>22Z?HfL$Ld_KjMGFZDem_-k>Os{8WiFiuG_sB#6W;i4&zs4EYgigMg_H)FEI# z#nYo~uRY19(gA+WAfa0S*g1RD6n88v{Y{0Q3IXKN!`AGxcOA0Zmsppsq!uW;sR_cVBi%d2lExVLn1Vc#gtJ$M!pmbOB(nI zjRG!^zyTptD;hCBp8#Wv>?ZOfG;|wta6^IW7+7mUADk*s^848t*^&~yd--Y|WdKk?%0 zov^(#2^__oXW?=itk0y`yt%rUJ-BEVrA%B$y;ki-cCCl}<<6CXDF!X((!uK#T4Hmw z0KNk!NH2dz)pZe(S~OA!=d#)N0YjC4%tiS~=!v*U3 zxR=*ODfp5+%7ZJvW>95nHgA3Nb&1hvn9yE*BbO0m?sApj#HUL7g!;-)v>f$0iANBl zyCmk%KYsf3%g5gjkcnXToU4n)bbXu6CacT$?-765DICkD4-<;6{knmJPidaJ4!5AT z7Q?XyjLTM;YLJEXXvanwe))%<1jFc#DM@@^C=vMr%(+AcQ9>v|jD%dpV#Ij%y1nTr z9kP1y&88R6ow>Q$j{Hc2uYGy1`);$3e(kij^;3G->_-c&G=YY4N0UPb=UUZ?a3qYd;*qoK| z`q@uyKh+af;uZE3A+>0=F*t6PMtAyXI?C;h)=K21Ru#b(Q_iHC-}wkm5)M-~B=r%K zP;fxVI1Un|`w@~blHe$c12rOC^iz=k4H18@nVljs#5__QGa@4xIggSk2~djsHp{zM zOkh9q%JlvW?o?~#36mm%-OqrqV#{wgK`2?S-HWSLD-d$=`F=Gzm~aWIS%HdX<~ z0p}44QyOB$Xppc#GR{*Z2_Df2`xLOhQ2Ta4_Pb}ARWy#Gqecr`1buH5R5tgrBW8b% zc&;*k>j_P62G`z&xp%rhz5DF;&eSr4=d|$3!J|N@-YNsPmlMyXjkn$$u)ZMXL{feS zr$}YDYXfZTz>Y7^NcP18T^duCBoL!YLq9}9Q)$d8;t25sC4!R^MXMft9eW-zHtA45 zBqo)N|%-kX2ijXkKRwO;$xy$`qSZs}-W5@mC;yNmC*ES6JL z-?2V+quakV`>J_>)0g1_U{zw1QfR;yvQ_V<(Vi@$wp3eP)d%}8cxo4Pb!R3czpmsg z*Y8|`cb2kTvkbt1fbSiPHHNv-BJVcONasaxCPudk4t9RAl(~VgpViQ^^i_Xs`DoA` z?Y52(vR9L4Zh*B8Jf_7!-QatkfqF3shY>|GR4JB321@D+4fl} zdgdh!t7=DdjQyz*dO1#IwEei&dYN;n7gDtH%9nP_;uhDtverAijUZOXnL^w@tT~r@j%(4sUPbrIE^Fh3ml6i5f~@>`W=Owr<``PJs*Fl^c0+xF0x&G zxb~P;Vf1}t@(eCqzcU}mf?KIZti_@g00>Nv|QF-^y5&w3U#Sm{|> z`{|FWDdQ|mF=i^#q|AK%!xW|@U@=OKtHdAIEE2Z9I;49LPKAO zIOZxKSl@5cl&i##NH}6#W_RMy+Q)t0#L;Z?g%HQ@dQecGuO2Dt?Nn^@`VpUgHgm|914L|%ewyba>dwGh2W)YIC-2I_4d#sT^(m^B2o&H!}6RB+JqawQekwy0AB zx<||GqO8+=c@Ky^dm_!$!e%C|S0!oN@(LyiSAYBdy-ffzIqCM@cYE+wf_DZq^tL%_ zzFrx#k=>NSg1Z%2#eY|4EIZmd4osyHE7xWK|DJ!zedth?Ij*nD8lT`{@>)<7fH|Jv zm}zMkibw@qU*!mr7@<&fi&-2yph_Ay`+@wt?pL=(X^tq3)aa^TKYlU%Z?|&LM_G!G zI`VoGGR3a21uijF05xx1%Ub$t{nZaE1JqD5?fbdN)T1jta|>}lhWf5d)OdbX0Nh)2 zx&D7~M6zC?949^f zqArk8i=2l_AHU^;T=r5!W*^ut;OOS(52LGP&oF-H6!J9*);DRyV;0kh2a%6yqS7Q5 zWJGUQcS*Un?f&2m29ZO~}#;&_vWi5o6k+2UcYdO0Mh z1%`eq(e)Foij^yF%pR;v?;^y`u`}Z;2MO)jqFn~b!2v`*orou=(n!WJ3YUK?94ifn zF|`CyA_=33uelTBLSm|LC_KY@og;R)q-mUr-JWukuv48zxyLtsXeo~YDyW+?*<{t# zxooqu0j5sDV-1#L>N|eBoUa#?$t2hR))O_EwDQnT#d6qbo6whh!7J1jui#_TzeB0Ab)NX$UoUQ)ED2hTK2r~u*6cpa;603co8G&9EvqCPqrd+Y% zH36ts{&xQP$}=EJZ=d*Y&r~lMsJgb#wNeoCR8p$2j2VuikU&wb(2sc9F{OG`y+BRZ z`Q5};PwWL7aHGM)27w}BiqGlL=k!5Nio&9jZB4V5`{Tcz5$L5` z^tWA$kH7Z4M8CvKxV(PSl=0L)zRtl`O1+ub<;}}#Zu?%zW_M=TqE?k;gP&}5D!vxyK{8Cu z4<0Mbv~CcvL{SkCB#B@&3}ckYAobZfsgnA(QyiB`kp#X+n{Itm?b3 zzE8V4ckZ`k!25Du^m6UKg~3{$=oVIE0^eEh5KhKfA3lFIgG-^n3@WSbGD}gZ%RLB^ zGvf8ZFsKs&WF%^~E>Vb*gy94;mBtjOArF~i-FW?hfWobY^ct5oJe^OMgQ=}8ZJ#^m zeqBWsGiE+#ABb?-#2_&(fm_`!+V4jeUMqCYym0nQ%g=LL|llX$ks-#FMEX4v8Kw#PPg$zZ)qA(R)Z(=lJuD}pC zQ#n<(-ibk4n}}?w_kF&6Jb)_q-cPr;y+J&~-SiBkSs{gg`R&)q%`ZRw^Dh$s1fAS` z`1s4uzyJN?|CE)J>VU)1X+AHq%lG206(pRO)x4pN zyuu={Y>x$_+X}+gXsd)Lt>LKV2Q+e*-QIaqed(QgjrP9Gm!E4eW`)o0V!n{GD--jr zFFw-cdG5M83up(%52_z1|bqqkZ8S>?^@~4-{m8Mi6u< zJm55MssjKRjPlXDU+4C@>SUPkz8|KmKh_7Qtb?g_RPf#PogLE;xB9)K#-)Fmg671U z#4677%rWj5;?5DmrddG*ddO_0NAsUSQJBE-mHckLo(j(tjw=$w;D;`B(~D&WWLfU( zwRh3+OhZO1(2wo?%4WEJrJxR7Zt%6Oa-ah%H$3}Ke<+4$xU=qQ{`FDwp#S=h{|8V@ z0|XQR000O8>vm61X|3351*rxzGJxs=}+PMbChkDFO#=A{@eYT>Pu^WcySA@as& z0A#N!LMoue$eUO*ukt*nd6Ao(=eY+Sb@?jjY__aQ7kT{o=I$!b{5S8GYK?9RC%2RN zOqLBOR*8Y;rIK~#FU6gzQ?4a%g>53sh)>jdYw1kRn6z(%nzF*x;N7fqIH7+iB~Ya- zMoJ};K#DmdB!)pElSnCh2%As(*I(+P&9aE8Fk#f;~I2XTjT;(@FPwd&myyGD!cA znWO%vh@}D3RXb+>Ml`-DzOD)$`jm9xAcX{u3&juyDH%Y~tZKNaV#fE75&Ae@Yt$jE zXWX9}zZXun3#RDooeeK^b8wu<+-8H9TcQ7;84S%5Gl-jQ6!f>g~adFj-iMggysG5p9 z%i|PP%92u{ihvd|AYq6-a05GEKPNxMkk=TtFG{GkGVqEvgY0*tL1*k%ljB=dKRoF` z26jM0A|a#hND`7^D*DO#A-WjxJl>ljTxkYrgvVg#+RuedkUXiDsMA*||LSn58Gvo)BFLLu1Hz#Vv1OS;fxq92DiWp$KTCI1>!Y# zM^DqxKwNx!c&)Q?wO2=!k=|l-Vyry&7_kVSsi-}MBY^W*QCcKMI82rF&4KvXzi-h# z{m1+LLbn!l;vQx}CZLfdyl^;vfI$HqUxkGMBV238~?@G6o8D z!t*A#$Iq|*D?8+i9^Q>{#U^Gxe?uV9p&a%yD@wcEu&Z)n&v$oTFSMD11b z4)dMV$alvL@jqDRw+!jwJ89Q>yZ-CH-x82Yt6lIj8Hr$MQva!K*}e^iwgm zrU8|4XXng3(vAs*W(*3T%V^>>EP#G zY)3W&HRs`kDQXpbX2+u=5}+*(ic8c73!Pc1o<~{mWdm5}9+G9c!7*7D$p7s{B|9fH zOXZ{)3)Mze{4>5ix`H9iF;_neefTNh=u5AuP8dfGR`Pn3klrq7Y z0PUQ!VInKvRkGd}0f5iZ-#5hapc#;npq>2S3(AzE(KNpz>@~F*4W^& z-?#l`ef^uThx8hV`bHtE&lN3)8eXCAiA_Ogm z$2k$6K`0FP%<6nnz0ZhwT8p#0{H9F@v0;wnyy#XDZP)FN3M%J*0EzhBF2(aY^xE)H z9JgHN985jkYA6BMrd?0CNH7_trTr`%IRJ6Dbw8S-Gwe4Fmj9@Vl;G#;I4egqdxi{% z++V8UR#{K!RFtzSveqmW?6jW~b>`-s0e)Md%=`t$AEUI7K4#$aNQcj}2u{1hVU9h| z26L+zgPv0QOm6eKMut&9*!j~ljB@9T?y%>K?D2_izmqm3tcFY@Ma#_m>C_BBuBWXH}MErhDgUlgh?)`;KRqZaO-yTdEvDX!9EdQMojvTV7 z#I^&(Ts_%ebtW0;9F#mhG;B%R!fCeRg`@;%vl!;?I`G6vPY2*VsT?%m(CPb7pcZj% zO$OsCx%NO)$dSP71}_>`o0diohrs-_bkJds^BQWUTp`dJy21(p-%myB-yoOX`_hue zjp?rmNg~&jfztWpM<92JZaiecOOwG>QauEUN7t~fpP>RTe4r(1e?A1Shbe1Yf}A5h z$$;-j*01l7o9Qnpd|%B1c#G*Vz-+10Jn7)e+2AIdqK;ICZ^`@tSuyW0vy5KmIwk9S zWK?I&zmj@Y5BYZxMf~zOhnS3U($s#};zlN=lS-g%y%vsVK@50fLu`9$iJd`xO)!|S zIrGYoo2o#jP7k^nS;i!-|A`V>H7Z?B!20Af8B&Mx9(jytLZ_07qG-O=DUSn9qFk`% z{(jdLESSyrqy2NsG4=VbcE7$&Ux`ip^*`{6xn&lma>gt?n&^K4lx`pc-U7> z)wUZ4;6#%y)z~uB2kW1U!GuOD?S61kzdJsQq40;tEePo~NqnC0T6*U?fjU8O>O96j zyiH9q5&CNmA7yS(x^(h(Z}P-QaRKy{VKGHRa>%=IdT;1(S~~mH05*HidOL51kHfRB z)so6QK z5}$3+mHWD+IV<-7d9jF?FO@4SZiNmF?&sketsa}*9sjlK@5!DS1*ZEgQZCv0@K~2; zN!tg(&g?JWz*jdx*Iz!}>MawR6`&S~8!340CCZbyDL+juxLh;v;DHWH*TN5jfs%6V zFD2~U_~CfANS9uBV~=|wy~&urZKH0L*M z9m>%JPW-XIZ(pXscW+Nl*LHXV8k*V~(;sj68_`_P0B7>&ukKnZCrk`9-ubFBBj&-m zhIECJGo1P$0Il9%Uf|y-I_dU}UNn2Du5-;({G{O)aZyMtVyP?Bo0XpT-p_dX5Q{3X z*M_A4-5PeTyQ}0PC0P3A1YSI1zKHLm8JjdM+1X7f|H#V*86u6^y#qI7NW%!6tMXl%8>3O$uC7h-B&{1 zXLw;PQ4O^e(wybSDu^pDa0Ah>f!Ui21W~06;Lsblh?>q!;-s_PL!F}IDc>LCRS((v zcdtT%IbN5>`dErJJg&@yqM0mO0*6BIe9}+;=&QmYfIr93e+N;oh1s4!I&w3b^76+X z1~EbTOQ}mrATX_z|4x;8ihmE4v5D;76ctqAC%|VWIr_)srh-}*vqAu|NQ1Ms-#giyX-+2WhFJw3NxNBze%7xF1iST1*<}V)W)*A z7x386@7XHC+AP}PI*OzED|U(Y&3=|prG z%|C|1Tqo%8GI3+%==F$rF|P#DFV%BNt3@UDe5k-Lc5r+0KKnF~M}m}Mgxy3vq6Y=l z3i5`cG^JedAGa^CYyYLOd5g&^q_lxchl#9Be& zf+Hzh4QSd{z@91o>4(@(zkW7!68!qnpOr+!kG_yG10jSM2Awu3?3@llbWQq5hKC6m zW|K5$*r#ucW`cjz&@;>yZF5~bc)eetxNxSn{N9{Ne9z6(rl(`=g+ShIxj!;)~*R(ZvMpZ%gUsH z(@n@gshBLom%k12f+O1kWh+|tGf#@~Hp^30%bxX&OtkM*dx=nfelG3W3}=kjl+;dN zp#L5EWa9&*HX%VkevoIV0Qo30f_ix%GMHV3QT}gHYeFtmJfO38!zL9LY)CZ&ZKR@` ztD6nmB0e;PFf5`(lfL=u?sIUgxNQ-Gjv`g<*a2<`2+_`60CHjw74hn%w9YL9whVu- z1o@}tK8r$T)XCx|Gcd5r&FM!E2@AOj+Wo0R?p9!KZ%%{xC;LewSo48@&&-Ir0fq$c zO3T>T*gQEAC2(Dz&7IH&`1y4MZE!=`iQb4I-dWZE;*#r6C6`|wcGvYyT2zvxTfweV zCWG5N&ueui$%7fch1#^V&L@%8B8G#EIZ$S6XimwfIrS_?_LKFX&!}QT3)SgOos#Uf zhr&%z0~qjasIkC6TV|^Zm0b8^E@2HvJtw$DQ=4Vp7ijSKH|Ve@ATO9qAbLX9d@d&S zMN#kvg{qamf)AZTt~H+4=UN&Brq$hRZ;6P1E&Z2%rxa3F`vhNfVPLUUu}} zvli0G>X7z%TOvDTlY}Wbt$HRq0kx;V`m#nBCJHpP#DSHf^}ufAN?OI7OquH--5>YH zp3h!_6(|w{*8sC?A#s|8YV!P#k+*d zK`RU!j-ZA1QCsVm$w=Rbe0?HmjYULE}B?7KxA#jz|mw1 zAuoLRXHhiJ`h(fzMA7&fN&)w~&>1W-7wBJssr5I+e1cg7S5XM)8tiSXr5JPpe#4{b7g@4c5D2RS?l<7pG>M^J@;=I%Mo+j3UJ@%Khk$0tGZhwp;v zX;B$Z{}TC`oE0Kt|9I@Mml&W0A?#$1mqS{UB71yILpdqFJ#0xvdgc*5Wl>3b21rj) zf|42pK*!~G@9lR58yZQk6?1fTm*sv#rY-@VnM@$+ls$udw5Kg;edm;v)Fp!0+@L}i z4l`kd@wURUG*(7Nt!IYUL1Gr$WEFi-?B2_vPi-)INHhO-bMiqTeSY(qx;$Zd#=Ogv zV2p&SliIffTLe+r78!098~O>;3?$}HTvlKICa5>QVy-LbeCqW1F%+@b^MLKt!#^l@ z{nqpFZx{w=bd}~H_^qY4LY5|A^Kw2TU~J%IaX;h_OvVH-lONmJvx?a}$;AquQ*!6~ z#VO+p4WH|7Y?2Pbb6fn?I!VJ=-^XB|oKQr{IimDwwv zNhxUKn@A0M@|%P2hbS|8Q&sUL`$#T~j7H(mP18Xek2Q85#!B}We^my4R8$~i9 zw#;aEp`cb{*-`cTmchkWbVl3E(DKE2w$5|jw_jbic6n;QdmcjKC-Qlb38+DdXF(e* ztm74&q|T)KP0+5i=919@y=nfU8zWlhnJ?pw&F@|21QxP$JA4;)9fYCl_nwEbQs38Y z10tJwoWOGwS{&|0hdZ>y5GwkpC!E^Saw_t;Jn$bl946q7v}-{oQK1 zmQsq-ggduEzz zq$S(bT&mM6E7?!S`Z=5Sx%)K!XVxb)N-nRgj7smT-Ze@(q8F4N`E@sDmcHty6C&q8 zEsI%!5pPTj(sAP7u$u*G>aBDbF^^8Rme*g9|NTv9V6YD~h6Mr9(+2@z03iTzHgR>c zNYyXF$Ut!u#{9n@1{Dot4B$ZrYTtFe@hQr+?-*7T7ggJHQdKTzCq?CiLU{QUVYGU5 z+E{bs=Ow6&4w;1x6-C@C?JGcy3Y1+?)Chb#9?CJ$CwDdlx|^Yy>{qXJ{eXn2n?WW+ z!H(g_$u98MA8Z+&@vYxF$(x(8JsmGcSCRN?{DCadx^%0=|?jg$$vGXhis#AbN6Sllr4S@mKDmZTLsG|2CMMC z*$G?LO3CpI2B5FNzed=Cy2GWNgs-Rj*<$lXhN{hZ(^AVU$6*hMW1^+))WS2%Ex%p$ z#~*Ulb|oGs4nnaOPbBnyl+{4ntjhVaKU*_D3>?n|ep^s2PazKw&84c7CF7A~njz?z z{|HCIwd(juOC>AYG_do;RRzqZTWl}x!J)j@(3o^2%17}=SZ)vR^`l`;)!&KBiFC-4 zNL)amohm2b@_;ikn} z=4NYRHyXYFGmyUe92;J)cg$e{!9qmYm05et;Uy)rt=3S{mHZu_v8-$OX>UhmP+EK& zVR?W!n_x*)nu#Z#o5~Ng&_@&HZeb1Y*BM6*kz%{HJY{(SdbH=$&>J|swfeMvwEa`v zw5on9jz?4IUWXPy=;7Y#NGd@M0ngx_%mHtGalZK1m z%VsNw+*A3z<({)i#~imkx#zKdK4qYF!P@5F4QHVTdorzqn$-;a!{?e_N&tq`YLQ7| z!!3;Fe1^iMk6xvKG2@Gh9(e61rxu2}-|s@+*a&7PqhZUy83ilZ73L^p?%qCe2RE>~ zzO{0mvOay-!XH0vhiau@1$MB|na-6tb5J|&*N@;Re@5Rv@i@upY@o~KCxgnKhD1N2 zQANOlfEQDu23Q87l!v)=nEiTw5XRmav;J;Lgg45qEokZ?9Clji21j0R^2sw=2G$;4 zbj~0&u<n^^#-JvQSyd8Id$N;1!YWVGj!l~jGlK)w#J~fo zaSxJxNXUGXVz2tT9a!ejvN5k)AkwnYuM1&+9IY>s1;hZkF@GYQG;4R$yPnp{=Cb-aNy$F0F^Bowy?N{l;V1UuBvJ)KizZds2VQ)IK<5Td^` zDOBkzGKGIHW`i*lqU=n|?S@V6ObCcu7;RbHEor8X$lLObleu&--}bEI^KgoEHNr}p z=s%&^u&4uN(Pa?A6Wkb84+w+@S;9dA;j2l#$)2vE=h}iZ{`z&wGkx;WpQL7I7U*ut z$gR?K=6cJ-{`^R5F*zNd@Rwb2JSe$+K++{)%p@FTK2)7)pH(8>kZ5@yn5I70A+HE+ z`N#(x2lSnhn=&%!y;4{2B1pnSRKU(1*Fk$w5PKK>57+-nsr$4Ee*T`Q+;f zbjSg=%Wdpx-j9HcazcqT*K5jaz6Mxw#=c#(Z5kc=-)i|egF3wvv;|!^t9Q8pk<|`M z-w!V*JOM}p#4xW@ErNG_h?iHJ!cb&(y~E;mrzmFq_1f|#ManTzK`TDU9@0H;4;tsQ zyNC1DM+>RIKa?9|+;)2jzncwVbq=SAq5Ocn!GF%eR&q_I<47e{%X7Hz}O{&P(ypwc?VeHGsF{ej|vff3h6u`&|h< zBjiz>_I0tPBCBpEpE+-p4jw{)9mjoMVPqZtjx2P)R_Xn*1Zwxf^0xhSQ?y46*C#dL zgQqp%v!UTkyP$Z*(iJ55rUraU{GCX=Kqlf3Ze(551Gpi$}{g<;}Anb)c|PF|qA z*D<#G`&4tTUTl!gBI$IePqjc*i(teBNqP5 zs?MD#ry&jk9tSA-s3&0o%+%jZkvW6`V2~U06bp2B849;Gf_ihn6sot~GdRLwI9?o7+~ng8`%ZU{bgkaW2xCzU8_&1hqmE*t^w>K;N}5 zvlVZyX30Z$?0Gpa)Z|42l$Bi5!Ai+o?P1XQBr?zn_AnlhoulNC(?T0Fub2)7&1EWy z*7*(-&Qq4u(bEYpK<6TG{2Qp@YSsVYX_+c<$bdUPogzZwnvSq1ZcK$LjZ4jYgra6n zLb|a`EpRSpGD9X;HWf&W)>jjsM@l*+xzRvtSs&oBLw6`JTS2$<`@BN=umo>_@>VEl z5vLr1d^FE$Bkbm0!76wlwn7OGo7W&-%>EA~GM2{@)cvK*tr9ETC(zyK!*8HUSDdJJ27Y%}S?Z zfF{(b9X4XUmy`;}&>Bdm$K9o%s|{#V=HkQITv0+C!|IszKxoS&@dk{}E&h=*+2V;N zRO}btyrN0+o6a?^C_2dqE%Kash6;u6JtiaAlGBn3Q`!nH9|DCkER!}f(X;qFJD3qKBo3_Um33QuLed64GrFur7ob2bAw*I&RmQ~woT zb9`f2Q#42r0}tNEX%}g9_M>|EIx=>zE?$kD+Z+uk66jv9M!vP|nSI{cN!s?l*co?p zg8KEo5B%>)%)R%C1{@g#WZ5}G#Ttq@LzxR4GUJ;L4GY*gP-^fW)59Ac1Qg=$zY6F7 zUM>xE61OB%0-x(i&IXz|G_{D#iCnA0gDpLcg%7a(f^ZqI!uhK^tH>rL(!2ZuKP6K< z{@D(1pRKQiUXW$QeXz3j#YLGX1$=%5@w!Ois%L4W^1EFdTD(?2bL|>zetel+G{IcW#I!$4yg54Sr8l<^?Qd^yFBA4ooE(sf zz#xCWJ}3Ul(&N%_T3~=-bwm+)Z`b*%&h9cTi>s~&PQ}xK#{`d;H~S~ASHBM;t?WU) z$m;K#JKq~%7}RHLpA;_*GNNl>s0rZ4|I_s1=q8Mx5P6`T*3^QU7q>VF$LsbAMFzet zl4MWc-)$SW&804>qqUn`2Axy=u9En%I+RE6VO9&*&MN?oa^n8qo`z-n6h<`cMW2iF6mTR}=z2>-b0X=izfS1?=Q;m3R zBUaluSf30tHo5h8&Kkg~*YN!3l`BeIwY&l(UpCVONgvS=8bm)0vE|jVuhFE&tS!=k z{w$~dj`nO}_D~n7HM=#7Z-78em;=y!Xm5c5@odfUi+3aYyWOc=*8sU)*U?ey-bE#7 zq3L$|(fQnX(bPtP#Mn%r6>?hb#6)+BKW|yJ-paPl(b6aTha=GsAN8Fs5Q-{giPfRA zH_5>p<>8eM*&m9z0)ZahU#{7wTY|YAk6R<-DMQIhL+r;>`~`R^h9)OG>b3^{e~4u9)vc86D0jw9eH8W zr;#@|k&~<(=TB%*Sz{mO-!AjBm{0h%G?QIVgJ^$B-B1 zvB$vVtVNZ84!kQq>^)@(6pIb+ENz9BLA1&+S7ua8oH46tb64q)9Yi965|gVyC|YIR z6|IFDO)HO6Y0Z`~-aOz*D$GN<G6Yg1A$#M22cU)-1Ft^vzy)BsXcWch~(KceFTxMS4nN=3b9#4}YG zv~h$YBoicX=SU)1RPY}g@4`P{i8R7HMMcpsFOShvN(iKt{p;37a{fS{FfRDR8?w=+ zRmpMH?d4oZFtEorrSa0cX(lw6&w^YVYg(iFbCFld_uRY>n;Nqf=zDd*bMnci37 zlo2REQ-Kq86XpWu@QXiB2C}fu+g445Rn0F()6@wRq7W(Qc*Z1 zu#yPy1Zo&;Lj{bX{bKx7p`If^v$;h;#rFgmVzd|T(jp^MPJfrV3GD(xi7Kby}t-dol97^i90QOC+Y7W01 zT1cd?I@;AFFr6Yyqcjc5d0tqIAE~!!j};z$RS8$bsWy#B zWrQ1c(#`or7<*O5$G%(s20WMW%(7B`pGTs^hP5@y6|g7aD8^ z;9U#ApBL1~tDc}$RanK*QkTkyv8|CPH#MsEi8pPG6x&bmOEp~$7cxiH1YjG1^O&{B ztz1tY?#t(exfDiY%+coUW>{j9UHQ3MJpRcfUXC=L>}V zU(TI=8E7&E*kkOTmHt|m1A4gsYn^WO?>zpt;^U7cR#VeJ|o zz8+`h<92-)B-lLunV7tnDS75imOV^YBKur@r%IwSQD7jAFs(!*8^9b{GAXhkOY%l5 zaKE@`>wI-TUS!)pE8Wej+#p(?s9-kOn+|E7VA|R>g6*9e@;C9B?psbJu+qK0j?^M+ z&w2_+j0pw$rlg+#iR7n0K~a6ZY101`G`J$|VY%NrT)A|l&&#e~bn~#xH%@RI(!<+t zHr5!kd%$(qXM}|qbI*xKFWo-e^V4};uhq19I{o14jL@r{cHnK)NSxFwT=WKkPCddN zPq*OGvu-CvTzz&*`{mXmkon>aFypfUq|Ckj2Fw86WsthJUVGNDySF|YHZs_y-WT+Z zPg(9epiDuJ{S6;oHXPSh8}N559;nS@9I|3XEIAu!k3T#5l1syI;5(c3J^z$ z@j-rr=$<$+`2}9a%AhF$z0LXcW(eQ28Ey^CFy7))DKR}XmE~uf8Pi9#Pos(<<&NzT z_-&#qj9_~aG^a<3c$e8v?mVZw33b0VSQ9`P%Uf8kycdlcNPhRQ-G!Znp@G z)#`O`=?*W2ypB}T9u5(Qxos(CukT5 z8RUOfr(QCn`XT%mLM$89ef{^bfh8XBScB&*(=(kLyLycR3crdb)I&E%(6Wn9`kH}! zls9)64IPQI!iK;wpuFD=Z%iOK%(1(J|Cq-7BaRK!5mMhBjW32jR02jWjR0ds5cYT7 z@~>K9BKk@P@HU%9ExCqs)pAZ8{9j9}c!vXWt`2*gfv9}~TX`81n<%n6;P$IPxIgR% zxe^R*ic|Y27==3!UAYv$ybQud@Oo5Xgh2bUx&%IkgW#qZW>#B9p+$1n?-HHf5 zU_1$!r;xq=SP8UC>Sa)h7xGvH5;-0mRo-)%>KO~%PcL#N<@5!uBHhlnuW$4_=n8Eh zU5(R?|3}nn3+Zk?!*lar^lJ&tQR#T|#i_O>sQY!2vQ|F>eY7~NKbs^u(It0ylpY3} zloW;GD%4nKEPz?^Uz?{m!~!2ojVW?|0SP`Ib+|mm`CkM2**B^7UZ5C;+eoKo7$v(U zijvuB$tWpbDOlwJj8$x>UEv7sTwg4f31gF{+;yBXQ-nQ5Fprh^0#2Hpl07chur@>7 zY0x|?qzu{-*^O>kBzVJ5+1gsS80x;n8Xo^mwmaNcD^@|ksS24#SEt&Eo5E}v$E?jY#7c(a;!HZ|v&bf;N zX)L{b_KMxX6{QHpE>7{W=Qn4Gv0k4x2JLFARQi&UM|`n)r-)qU*)RXspLRA>F_rm_ z0IL%9Rpm@+WwuhOsw^C8BYF`y+)Xe6;Db3@&_^pv3)OrZLu#!!1^J^>XosN!D~sXT zrjmL;?@>h%hK2RCj-mRlh0^QMoNCG}?G%iZPu(=NjCL!Tgj6u0JRU1@@tO4}5r z>-fw1ur+%ETIstSq!d{iA-5Td+HaZBg>=p0;zZG49B5w?b1yErhQe9w2v3i@fFK(d zHA~DFC$p1o_?eVx$3_bC{WbVxAQn_HO?l!doF}gD%vd%157c4vn{&-Q?Jh}(-5L%4 zv+V2(I0xHI_g1)Q+0r+V7$tH!u7tzdbx+3cASjj*7=k}tf^Cdva{zY%Fbp17%ZK2P z$#tO{K`>1`$Nb=@8-x}=z#O;Z55n&9f5wGS?ifyJu0HSTy|#ytZ@f`Zz|08L)?7f^ z5~YZ7gvbRHN{1p&I7a~TVjgQIOqNUauLe2Ff%U$Tl!@%wqyhy6#x}3yPlDz1hgZB! z;0Bzeke5rJ=JL+~dPt%qx&Y=myi0!{Hx@Ig(6KmGoiX`!0utM*>;nT*Gd1K*mBS7s z&@nfA>L*$<7!@=%wx^$UK*H~DVrDl7(#fQPqu=2ZP+}1?v1yursCo!`*R+)0Ev4)Y zNQ}e+VK4I0)(F%3foF|}*M#G-rjNH`04Ln!U)?)NQ^5#_aBvU*O+8)Wnl_-22U7YBbMf!M=O zW{`%KRHuKZv=JPQ0D5ZKxA|Q@_oL4X&{nT?&W)T0DWUZ_10(lK=e3d=??QaC zirh7ZWFW#>&1(P%!0fmq81VXu!<1zFtVV1JnaOAs56&>1JMX8TtJW~dmF51*G_HE)VWYAR3ybjz?LJK>Q0RBK~=@U^UHH-pT){C9ZZv1Tu(9{Dv#J2{dJ32 zDQ1%yy$W6|+%Lb_p1rz?(>jHOf1TUoEW#Pe3R;A^377Y(z@vfFxH8|3ybuO6FtF#eMy6eWni(E8bfF5j6Ql-E@rlhLOE> zKYKwp2E9q%^ptcY`Y12Z{r*4rLBa!9PPYH}L2o1(w~>OB87RV#P#GseXej?ll+L*B z$NUd+P*iH!KXQ;#jw({tDeY_t5_gBXh+d+a>E5p(Qn8F2oD7`MAa^ZBu2>9iRYl!0^hC!}V^ztBziA`+fWU9$P ztXhYVr1`kql&*GPW-~!Q+4bvJ!PbF{N+~eiZ1eZq`{aqxU&Pt*QgvO_qcYHgdi7hr zaUTP;iSDmiNXmFglLa#7*l^QSi|HvuZghn~*t@B9{Gq5-F&yj&bG2s2Do6+0tPI@Q zl0Wx8W_azY4qfu(%`ht^>T=%rCi(QR!YJ>q(w@bY+0&f zOZ}PqFs;u9K2@0%^Sv2xq)hTZku)wHLyfbY=gGwIrKH$lB<aRb8;96Cg%iKp{Gn}+)`cHhlP?KJU%7v~}(B9CDKymzWMKR)~ zHtI?WY!oux@g_C=j1sa-Ae# zVnh;el*C

%%tBT7&kCn(WD17Pf_%jHIon9il6SD>edTpU6Ll1;!?cx^*i&-zK&e z8y4xBDxK;jME&v`O4eG1K)oCYpyq@W_g>W6AhHY?kByqF=w@h%cnEaeNnG-sSlLio zTcrIVIv!8p-}&EWj>2FuqO-sf3>8iPH0lb~GS|GxhD}%8A97>k%`&0d@m=t($jkc=n<=F}4|C1|rvKUf@?Y`_c|zvr^mV6y>V9LgZlv;84tnA-#5cLLDyaD(Yu)x)>Xj=4l zKR)$p*>sG?{C$hO4;|K|xgVZzzcGlLb0h>cj)g~(RJUKU-S2P`t?TGap=u@zxhKM* zwr0c9qp|>t!cV@Pyl2gF=t=WYFU{LaOZw>xho$ZDvO&zsZ|7J2ylrVBiXLAmvg zQx*~g${8V!FqY2ZZM9+Gw=K?b!Ytq!S8iI(J46Ntlv(t}?05VJU^p2@G{fW%9C8tH zHuZUFQ%|SW&oU`avLx;=i z;7%X5dl|Q4Xym|~CW$@j0>c!guNVKj_SeJsS?aM7CPYHKb(N6bIb?q!S^oVyVQ$c| z2Vj5sKO!?ectaQ$@X?W<@Bm=qm3X=_P8ql)_L z1o#b$m~L?)ZvNk&jxhu{W7q9sJ~VNWV%`+~EZ$7yGAh7Ul7*NwF8pTo0dGAA0MZBP zyhxB0-^JMmlvzoa0h{%1Kr9E2oRj(J#=0gLfKn>1_0PVxS*cIaBe-ntL||vrMef_JSH%yq`&xci}BH5v(K%YBS0y{=ZtZH2T*`` zx3t;qCXB??KQrikCbG_h^UUyOWg_s{@W;Fc$eY~#_3gl!5Q4KD+jbkF@f&#K8s8qe+(1flQgQovbtZ7a_m>ISnzc&ZSqinYU7W7Zj$?by#bERj zK69pG!1b?0V!>2K`ngQ_j3@w1&A04tr3&Lx(XiGhMw-4dXOk&rZkJ7MTm4st>HcWlpJjAIA)n@AFQW93`~RcNy?q4K#`m^5$m2L?x%%hbRsqebCdm<)aqY*)@MpYYFG@kke{q| zn)j}Me?OT&#ndKhc&aY0+0F1`ZvueWTMFL0s1JoLy337TXiFBNzG@pRjO#0nUUv&V z>>V37YW|ljE4dbFKg8WU(iia?R4h?uaWA6@INgFNx1Yn1aPRpnL*w{*D8J5@?`ftx zE6&`-r179C)khC7emsnBHt7}z@T}8WL{HS7?X?oWprB-Fg`*1l4VMI?{Mwe{F_M z*bwVxh?iBw?}W-Q%eimX`WQF;+>aM4N4DIrP{Q$S9|sPbFEpU`4c|QnF@8kleP(eA zOBqQZ$bX<3he%J1P!R@vKdpN6fc+2&`6&vQo)AV5pubB2ROjqQMDLf3wOv-{4{sl> z_;KRUzB$gBE#3Q1IvTm>mk{tx)=?*VRKG(!OvLz8OEge~vKoV|rWu$5fg1^irbDL# z&uc>mhrDMD&`}J*)!zk4x-g)b1TCkniK~kqaD=y+sbV;YurV*0VFe#RW%AJSJNK@((YZ}A)^&=mzS#C@xWn+0&}7Uxo&70SP@>GZu|}T=u2*a6FU0j( zO3fj$UE`c#<|>&o7W|4T5?5hsP_K~%K<%*XKoQAX!N<{8=<#V~^ zfb!EJJnvO9!2;MGiPAT*-fKk<8OAY8CG%onlBC72oq~G$9BV(Rr|V?3CEq7-JfwKZ z^VX}v0<<+%=@_gc*R78?L9}Jqt?#0*J0c5cQXZk&q91J0bA<81bfk5 z%KJhLA^Lb?d2VMsRK7XwDXldY1u|B-g#Jffk+CO_CjXx~L_3=T8WQCHHn2}!X%eaZ zmv5MJWbF6QQ)dth@FJkH{nw|>e>&c$s-lhke;fS0dyK$>3nl zcL|mw7NUHJaB@3cUX-~$Hccmy$j=;>^1SM8YCz6ZX)4NeRsa2VpRu`zhe??nS0a1& zZU?Na6Pl^Fly}I-)+b9!AK5NLc^++IXy#k=_w~)@Uq}DJJXL97a(}%m_$iX%FX0%z z6hp&>Qu8bI%&X~-gd|P;I8{yvF5dwHKP=T6$FUa7bekNGQj#%A zO3F`^IB}J#d~ZWREB=^t{%LO_iPB)Auq|L6tFr8&sRGu=&dcc#G`K}4-F3V@VR?w= z2HzXy8uzNNUTge{tK}7A)sd;{&E)}seP}_R&luz8CZRwKfu!oV-sfs|$>_)04D=>@ z4!q1F$H9oF79)i@8ssDccs*%f<%+{pPBbikL6%;nE^GzpGA}Z3i^p1%K7UHeZVIqz zO2YmEtL}yF*r)p{`7mUdmg41}HX3jnaIx+g#Nq}P0ty{W{1T=z_E*N&=9%W-W(Him;5lWgf6-6$77Ykq%8#PesusRD3|xvDlrRlGUpw z;Kx+`yT-1^F1l>%PC)79RVr<1DFtjON2z8+*$T^OuwI9?^I)i$4R2*q1&k#;VD4GQh&FUrOj?pVd&MCr%X+mHVbNFMW zk{P`Vu8Y8IIX8lTBGlBNU|A+~W?r0!BD?i_aMg)l(fGK}@1;8<0l?=Z_~Q3<(CMi6 znJ>cwxT2}$NHC#apO}401Ih5yX+MT5N(NvXe$qaVnLGB+NecD}sJqdk7V`4moid`N z@UlH$Y_MhVS(syLYsqI`L_ToYv>t*d5A0Soy}>!A9O0bF%$Aw~$$u=bDT%<-#2`+~ z>FrIaZ`@dyot*T%L-78O^{%Hfa_GpM8caa^$%*Wr&EBVyD@!tKa!2Jy-YD))kuH#8 zhA+no|FD~qugqOt$jKi#j##(Dc6J}bY>XFSn!j6zaPV4EX+s%mp>3@{wy=62RYi6 z>c326s3I!LQKj;Zdao@AgRNy^Drkt&`l+WX(+VV|(xjo@(>}_curwyB5%+0*8f$!c zr8NUq2-7rYM(E^TVdM}1mz#B&*?k8Hux2DW{zwY*NYXr4t>li9GWVL%`!~! z{g4O}I)~6>BW~z#4MZzHS6bF{yFmf1kebXBd8|@O;`bZ= zy7}QL5poMgBw)TZPU}-YWF<1%KU}`gBwM*1@|}m*1-Ps%((%=t=#VG23CR4F>%ZO8 zy2<_~nXi*RQ?5L;Kz;aMbiHGAW>K)N8{1Y#9ox2T+h)i7V%zN4=-9Sx+qQGEkM7y~ zj{SFyT5F7@IcwH@->0^{@C?pZ{Hul3TS-U*_#l9%@A3tT0>tq?-|l1Cp~^uZ&Oroy z2x&tjWO}VEoM8Y4y;ej6F?@u%e_d3k5+TyHhrMn=S2XW*RNRCkvrNWyRf>!{JZ%lO z-P%;L6VggLhvz+;>a|8fJ2f8l(b9i0wxLm0$XJ;4!Yum!@k48KsPCR9GU?5I_QZBzHkAD{oe$4vzRaA-tSKI-Ymk@#{6G@L-Ts&i;vrw-s+Bc^tTAH3$8z=?{ho3w%PI0-l0Sr zzh@O29cKvY7QPRey5BJW^LlC|I^FGuTmnR!c)LNKs^=yE{~v~i|2?my`iEj;HlyjI zRDu4_*{FJQ0H^0?55WsP@%EBDb;eBq`TvP-Mm9!S1N)zWQ-d-Ymp_3d*r~gb$OMUg zu#l+)7AW|1|NFxKKb>B>t^GP1((v}PGLmPl^Pp9DLTTuPTB@}L$}a#1YXHW1Bq552 z8;?@=cYH#qy;)+GcS!k^3L{r8=((Q&QPM=j?a9vB-RJp^-$Djv!g0CZtY99(mI!@_ z(qvau9^r}ZLTEh~F7~okYG|>Cmlt=73q(0iW|OJn{dM9#tRp;bQ)n>P zA!?~KUG6!*TEICOtT3QdvaC25Z^FuwCXxAs5KF;KgdPf;PKKnAB=N^vU1o_rtTV=e zu`IQyup68q!{8LSVKUfP?4l2?V1S~y-*l6~4L`|^k)1f@j4-RIRDs75=e42t#l^y1 zu>|U4g)~{2A=1wBkcx6MrJ*HbkRZ@#SL0&D_{#|gbsDcIm&k)Ec2DC%CMK4b0?mTjPgGzSOu3`aY*STHHZuyf@&&LaHqdk?Ih*jkM&V>-1mG>x0yO9bUSRhsz@hCUJC z``ab^6V_dSXAkgi;1Y6wv1JIGXnq#s8GU@KlhlAUG;dXSR*OUxqAW;DMRPTpm&RkT z00;C?z-ojW27{R>;Mk*Y5FR_D%8+18C$_Q9BEy_>;rL1|Jrg+qF{4cCWwuFxmrD)iD!2@ElOb0)>+o`Kzr-FlekKQEV8( z62eQUVF(_$`hnPF9w^#OPq|+QW=x05iXZ3RX55VLg$8YSL zXnBSz`h8*-32Ga7s^z#12*H%^5E>O@#kY;P$4;;FV~x-WcyT+o_urm3?Z7C@@~SSU zt1NZ7kRrebVzz*_&R00CTmQVMd=Yc<<+S*g&i}jdRN4ENt z==p#cuPvOJ=S#v&DEojsCatF0!x)t-)syFmmUh6W7yKN&Y(3ll_02}#?&O4tL~<=w@YJO8tP~TFL1zM&&*2@~6@L3( z=G!9}Olu1emPa0kUX;IwUMj^KE=u0G@;Lw{<@kn|li1i)#Qi2}Yrw5HjEnX~^|G}t zs7_RU=&EP5^#-{g{5!WLO;;w|hzG)puV5inTVe>Aa>r-hS<&%D_BPo;{mpr(kXGKH zvOHK^NLl}{!c;~opLNW#cNO374lYhW+;;YKn|9pmwu-d70(u-RR34_9t2bV73k#8?CQN>2Al> zcf_yDT#Mz;0p!jX#Q!|x>NWuRv%>)aeT%0G^8X(dv#%`*_W#ZQ|JtIMf`DYiq=Gx3 zB!b`Up7uAVW;>uzLmIgghlPqDrA|Ab+yOHELAgnFY{j2GD*44MLP=;OCzOA8CMAej z*+_&t_5VuD{foSo3j7gh)c)^$HLvvVIYIDaU3T@|?D1I^`j)Vwm-Ps}>T#v}GcVcU zCin(;Q+vk;y{=+YF!j_q*Is!bb(^PV>*flmoty%V7K;E~HxH$6*N@7rF%m+H<_|!Z zuA8>{{EV9Y-#Ys**FGQ07EO%_9mrY-)d7&Gs&t+gJj_W?jvq`*M2-QtL!B2!!`93e z$iy!1`)b?drfbuM9^n&dUm~wLqP~M)jg7-$YUqZN@5>8vUtlu~Pz%NevP=jTvmkT| ziSiKV)O?A8ua{(#=&Q~*1y{?Bog#pZK?I=z`)q$G2)!QQJ+kCu_th>FeQ{G3?~{hJ z8k>Nlc^EDwLV27VB!H%l|7sX4tJHEM88emw<_@rHNF|4#=xGeRF=1XP*%_r@yZ|Iq zTDe!1jS5%2I!?_SCCr8N5YH=G;xsC$AqmMu=pavZtxOhny55^J92hpMegQV|3MZ^~ z_7NcwybspnmD-Qprn#{#_ zFG+{4^^~1KNlz(vei8bZ+a4RbKJDOMp$A>~S7cPBm_E8*AMep}A6Pz3QR4sXe%xMX zUn9p3X;<}&az>70FYBhzM*tA(AIaYy&6{aqZG~~{->$vVFKXW5xCIG>S6u3|_AMjN zrwtq*Iccgx>tB?Me;wh4!Qm4m`Ct*SS#FW!BrZZb-KZv6xVat&VqC|sU9M`A+m;^3 z@~2cwJ(J42AzvabG%^zlK}K1a1*X!Np6;YSg}@SSc~PcgLm5VO&HzY3ct9XU(Qp*% zpi}~hfLUND%KHsYiX+Rtn@`Mzs*3Ky8N%RXL%Ha|anPN5VR2gl5771GBh{E3{VgtH zT;k3N5iMvasas&bNaPja8oNGw{1p{p6y%U)POvO)WMJgs!FNUQEIc~bbp|;TaFl%bOX)W9r^AONN=dpX#84I~3iin@<4}P#i_U zk%I2j(W+Ed``K|KjAsJ{^pLznQ$4JmH;UBxG0?&=Oqe9VM}Vrl0j@(EB*$D*y`!S} zI#4t;7x`RC>q!zKwVKkFhOtotO4KFMvd}dN;t9_@*p|`^U}YrTzU+RfsDQcnp!OUT zCBz_v`+dEe!UaBD1%Ww5P*fVf84Nd${?3KiDYUoVz;O@x6p9G1tmi3;^F~xMFN2y= zqabG;5iX>zazIW1qYsX0(bOeYhqoO^K->Gl7NR%xcHHoRK?>L%pyVVnS+}ToOfxi9hItg8&K+xIUF9X8~ZX;kZD!9aj*n z!d{M{ti+bNrFo@rO5b zkyw6{6VCnxYiJA-!jafEKxX*_5|av8hGLP*F#?dJ-nAMz#SB>Qn394JOAk_zvo@mQ2}gfU^Ehl0OO10F#v z8+WkCiWFXxMsdgTRiR=Eh@k61-%aG>;s?-5i*t)$xs2{`{E=k(NaAO;IDe*6-kc}C z?8DV(5VM!89jgK}5(&4128K1O9Z=Gcdw{6dEWz*UKRYN)QnYuHs4#aV(Sty-S~>^~ z%)VG+GLYc8bI_$DP*=;0Q1Se5mcoRdj5Eml?O*1({t!hd)wE(a1C;1#!y*baB!Lp6 z0+o8x%hN%4iJxhf`9>&l4)%FKNUaQNV2p7>-1xgd>Ys0dKJJlMC%-)=fHf6#oB$$X z!Qcz6y?ni1?r5V^F(isaJ?`439imIAwdKON&?!74Q1#txMwt+K!au-(zNK>ZmM`c_yY zslLIAwr_zRf!VQ-O=M_9$$4kN8YF@|u|v7GJO9*!%iNoeBi=6<17fxiFU7y~y$Q&HDn|HRwYsG*DC9K9 z{|#Gea5uo8{4g5gDo(s}vc$=s9!A@!W-&M2_b+S&LQVV{z)PZZCm;y6a&qo~@2YB~ zlBUj9d)j&vUq=Bdt&e7Tv@lys@=IG2H+8n>l4!cRy72$@@~knCe+P->=yiKSO6!Iz z8@CJOGQvEeo^ORoy=(bhJ^sTBYpMVVtgvdXvub&QxsK>}9tmX`yhjZxUM7>m94W=t zW3f{`_Ru?^nr3WcdD3cW?A|pLUV44i*5X{lQRzx|0bCEs?j$!?H%vvkfM<{j|O&b=@#cVztG?%f! z3wBUqIeVdWTFXJ=jicI35W|*QgJ)SUT}I?`xw!yxlrgR+BHXU{V)GJ1U}*A!FmiQ{ zV&Fv3%aTK=5CtaAShC0V^uCB>Z-~X)LE-oWWN#V_{u2_FMq|cI#XQ)KIFXD4B0^(% z5(|b5KJL$Z$W2P88;7ng|2n>`35|wB!+0@7EHlb97^g_pqXvQ}P|C`tuq2hVfbbw@ zS0e%U`oaVFaI;OQ_v*BTFE2EMu}yIzME=0XmVFV5a54}tq zI4h`6{b$gXS_MGC1=RUpeoyyYAu`px2f}}lN>{HBw>6fA-Bg(70Q7h{>U%#zLnmb^ zajV!qT{T#fo*rBuiP_`p;jPZ*Bu-OdX&hQ`$2b1Od%ZCjHr+BNt<=tB72`p=(*zFB zFQV?4@jtLOUjEuPMO!|8=FJ97QQ)SdQ17bJtd?t4MQgs|0U8YBoto5ww-s-e-skN3 z%d1NKA8Q-Ph&8-_LvnAck%9xYR;3om4z9%h&6Lr;pKTuBQ0w-l}-y~q~27rB@`fsMxnj|nNhR3j~C zqKfV{HI_jW2rx;6n|wBxJG>+@`N0bzeE_f2HPDcHk!z@-cQ~m6cumlP<@qXzjgZ0B zhzmMnA~Z8iL^EQe>@)1N(lkqgoBYg0p=y`*B2Yq%CH!UHGG;VX18E5JC?tf{(8QTS zv_u)X!e8UnP)=-_z0-o^pyZ}9MFtNngq>r&M@BVv0ZB4Llj6&N)?@?73W(&F3B1bs6;GNSQ5pjkoeRkNBl|*R2KPZhtq>}BUk6F zVu}D4R$EwJCsj?7Y@3B>0~yan%c?tfQ(!pON2Z4Ab)` z%2Rt$p>DCugOlUr=X^C>DPoGoK7{gAqmVQR2ausrmLC-6yAFz}G_UShF*B~fdC8kr z5=I^Ml(yp~C{b#%Fz^L(q(x0&BE{fP1~_F}SgXvAf~5U$EJr59o6g(AMV42>Zq%jv zG(d=ZaSB1O=n7&~Si5`WL)9oaVz!k0V0Fz-%0|RI+1Dnl7;)DotGjcGpNO+4XQ3lh z0eWqOjT1u5;^&0bXCHVivhS8#6KuJ59EBjBsx){Cw$wLdxM*dsj~LiJi1TSA1;Onq zRv~<@AdM5I{8lEY*-I?lTWp)tJhjDww!~vBB7cz?{$kh|iuV2xEL*3pb7Y&3H(6{* zL`U(lMvtUO@_~$hSM;oj?Q!$N9vLv_0|M5V7QCPpl) z8-*ET+2${DwR8%FSleDl{R)1!4dzrACnK9yvY}Tcv9^^*;Mp|lai_5^G28g^0B1q` zs|jt3U=39BgqM;WI@-y7BLuSkd%bDyK7V8BK&;ec_MmubQ-;$qN}igRFYVyW2Jq(p zv_|PVi545v+81lh3RFS+IjhC$fRU=1DGiYJHzy7p7 zd9X>sJEZCFJqvP0`xhJqN7FhW_V1%NN(b+SeMx_yc4QL|$b(tZgn|5GNSG(op2>0Q zp~sDY4}8Htj0RtSKEc5>$J8}QU_h_&k$p@@W|yO~iDPwNI>nf(G&FR`h*S9jP@IwP z79Sn!qyvsr$dHYn1*^_1B?)sPn*#UXLA!j7wI>Z{jp zZU{_we%VF{^&ojEG=~5}ShT!2CKW+VaH8p%NucUiQyexi>6!~loCHbiX@JtfKzP*; zwvyTAc)Ev7G>Nar6TG}T--)sm)-s}b*81g9W`#|6+j&wX9!vKSNrF4CL0OX{TT){N zZ6;abp4qkT7VV`i)Fe8W5+??o@wUZQD2yxq-rKaZTYlZL9T{jJP4JG8wE>Q@&aaLz zkr|fmKKQYQ+nE#|^&2s%RX;aNP(xWYIbpI-_&SZsq{%s?Ghx3OH}f`U*K)JlJ@~6< z6*|#4oaR4}l`?rq6yrAD-(U7F?wxNN+wlcz8U&Z{uHSELEdM zO@S#z57@Gefyr}ghNn2_Oy*tH)ZD9b`h+H8XJ;SJbT5+?&L@N#)$h*MzoB)$&?sj_ zf{g0;5;>Kx1YKuFsQ=V)IvP?nsBYIol%jD{+xgscXqiYc3}6?BLVrd9W=+T+h@KUe zr?fp0@Yez;MpYNKvCHZqek4tIzPi8e?gd~R03t){rzDp>dx4gS$yKZ3uc220CPE|+ zOfg)m;mJHJDs_K)gbpHUmF>gD-2C~$Fn#hWP2KgHt3{^eeNk_9b?9&pi!O$ zy5aA6R;0uG&RGYfYMwbuF1r_lVtS2MYTniBepnTCa#{vI=pb0L1(; zfJCX!>Q0)C zAdf96eP&U4LyOPQBdM`hD1N!m4a)hMeVw#=L$cM%Y={$%xXN>kL~msav9adg@WZBS z#yjF`6j99x-rtuq9!gG8LniiNY;CXp030`hKi)vUIfseJyedcjR(uO-^@!*e5r;Tr z*W;*Br+^_th5-kp34XE7@qIf!9k0IMV=BVxN3I!H20^r&+mBZROCI+4J^r%}ELMNg zCbIv09M%5rKB#3GzbApd?||_@I0p*g*+Y-)Q_T=%?TGH!2KXSioixszRuIH50)7z| zE!HyMt+mUUq}$!ZW#eD|D$(YjUiZU|5?Zc& z)W*Iu77M;rdEXAZ(*QA=CFlJuEZAXt56(7?@Z}(qPBiw^_WIJu`Cqr3ayu4!uzw^9jo7J*V;rQZ1mQoM zJpT>A;ZSojc8?9M`&!@dP{FL>7YgK^C}@RM(cd3+Lb9iD%%vZ9_^-iHxO#xkC6;sR=6s7cUr z$G_>s^Z^(-M#OCN)MNg8M}L~)ZS1Nl%F|Y#?(gqkJeV*J$6S9wu6=)eUCMV9b9x%+ z!1gVGSbauC@+-)h`ZKUT*n<>EX&V~GW9A>3bi@y=;hOh4a)kVCd;t^a&=#_Q!AjSz zqq5e?s}rFgH+@u^IZVifDXRs?$KL)|BM|aZE(W0HYVPv=vhmMHTil>JBQb74-bDUs z9tiup9(naA$$s~<)4&?mlr04#m2Kqp1ts7YTH*WcNrcU=MNGc>j#`f~YjD|=GDI`8e=%j5y5X=Ml4=*M% z4jBOdQOUi5lG{QG5T4l;EM1ree8_8V(o1WdxbuFGgDd+&@Z8 z8Ra)S3Fu<3I=LvUcuDF4%>FBOM_P36tlEI#TA13X1mALA88aT_gF~=$B*t}O*g_dd zd6MrnTtM3d)<5=f^r7+ab~I5_<^U3p25!o7rBuoVZB#cL4WP)%DOM!f++QhU2^INM~q zjH)rA^`3bp=5?c$piee7<2RJ0%E9IH)UV&)D`i8pS?Sc0+8w_L=p=F!nj8Q)p%0~r zpWQnZ)9}By;s^&pcY>F}bW3{`S?EGvEBNg;Buszp8!v&Ns#KW?k3_TQtX(E(r zZl%|y6_?_E-;xYW&OjEP+lv%AijELB`i=oP3VI((2twNv3t5Y7JT$2P}d~ zZqH<_*N999Dy~^mQT~--ssc<&VRg6ms`*Bp+q860wsOq$Cw~d7I41#XzLBpNaoB(h z`*mlb0@3G_TmAD>!SlEw|N5S*njO}0i2}Fr5*?L(n|1n1QZ2>v9kg5%(da!nuafMG z9t-;RY2D59^X;2;wE3^gNXu&^qr^?Ia-Y;>3B{Cj8N1AwqxZ`=9Yv_;4V&75{1aL{ zc*Bj7TMKOYom2KnOqQ}ie3^$l! zVXsB()xgOoK*-UTa&y4zwCU|B|9@VmlE|cDr2535@cv(5c5e&{Dj;@^0jcwznnwQ* zF5Nzm6D*C51?R@T`iz0%?}vB8qg{Sj!|4GQ((HH6)x_` z0i$mC;5QE~bQ?}gBrHY7@lRG+Q3@P9Los4Dbgsl9$1%RZXZvCNDR}7M-%QV+F?4*k zwP%-oIt8_wjUf{Oui|4Zr0hMpftl&on`p)5qwX_j=r4>$ZuE1InP1*GhD>e#QLY@JQy6a#+mDM|TCa~T!{`;7 zYZ`H31fM3Isi!B0X%8<4SE5rn1f9u-|`q?Z69;Qy0v{8yF5VaoRZQd!)qBYCIk<0$9bXinK+o@W39&$&vh8Tz2S z?2|a%XSnmb7WFVlTYLwDF z`Ce|mn&*xDvdqPpY~cYDkV6Q1baG~Mc1^5UXdThq>m01Z(%0+ELQCh54%zUw>Zlnc zl&|-bhm9IS{c_3S{$K`Z59UK%rtmE(&?lFvY77K!{=v3d?M#1K98s>>L+1?{Wrp1y z17fbQuS+-685WQ0aN~A+_9Ob_rc_*K-b{#EO>497l^iLS*}lC8FRRQjAvI=f^F&j#XeW(RWf4wYBdHM6c?{-p|9Yi;IKj_t>0S zP9;iW9)k^UxNQK@I!U2(vxD)*zyvoKDrh<9^5|g%j)qF($Pn9j_|3Bll5rA>&Ph6k!3Jj|P?+6@Fq=X|C6Hz@`R6W&>9gn^_Nm8YelHuH^r#oYh+c(F#lWy`$cXv;*U;*i) zI9AU{U!y7)e(KflkiWtPOZ31lJ3Ly{RmhMBee2h>Fs3Hdm%1mmm>0J0>-}L-DJRHQ z%5If{IvxPfsmM*@MmI^}+rDtRIbQ!u7XtH? z2kdbqAfReTpw!w2IQ;*`9sBSSfc=l3?Z3%fFLh7tH^frD|90ok5G=9TR8&YT6(uKU zk5<+~ByjwYTQnySg1AUyR!tB`m*NLMuHPd}2&|g5jM%lYH3dP^)jK^^AHB?f`P^MT zk_e|(SI!Xwo&)f9F-H!IYb<@gt_JD(y8!@dz1(uOR#naTb~pOFy}{;^?W~o(x1)_i zD5>McTbJZ6T-}Ao2X~&Xwl=P|h}eibZ#+YpA;9bIyZlj~?7}(=Vo($=(aRSHy{`(Y zx@@xJ<@+^k!CBAX2wI{gWy5k=TI*9x@l#Cq!Q2EBTT~k`_fmSvgg)Il%l8 z%17@0H4%AC#g|X{_-gZ{efgibg%-wR`>b^B!uhpgqWSa%>})YkI~h&KsG zT@>V#Ktx56n!h6QjLxKbhLE|i*|WTznDk8Tr|t%18>myOx>ZceogpMzcmb~FBAord z<&B7qs*UZ5cP;Yam-IxJR!KB*`}`)kSY@9JMk^6i)@x7BLe|bR%eYxF%XzTbQ^(mS zfmmp5wh9WuOQvTZA-)0X z`?S}U6{;DWUgD#d|K@ctp8!WO`RjUS*%~0#LdzI$*ZbBfS*DhJ?R?zqM>H{05th7i zRpl4Qj?^H8=zbS&1!+Bg>BO0`0Ut36rNso<3Lrx*mE1MkeIAE)UgLAx|Pe^@*w?zKM%!KwdkIm_4*7OPZ&4d8MhY5vOEMqYDL8x59*9w=q_Vxq=YBacQqJJ+SNmWJBLfqaW z2@DE{Nnzd!*^Wt9q=EDzarFfm0LN>I2vSK_qEfSuz&yatz}7zc>@j`UC8jyl=gc&q zT_tDIrG&)V8+QLesCw%2(45GfkF2jxR-3v9FPM+jZB?*bWP4hKC$sM9+9Om5bQ9*j$&Vo{znI;-bRj@G!?+|-K+TPb!PRhOJiwq_A z$Zo+*NewO{ziojVCoGM88W-0Y$oRUL`YUy31cF2Yl)(d)S+WT7a)hHV;mheFuork} z=h)iOBR(@TFc!P}LDk#JA?(&5E!NWOM6J$w8IFI5Y#FWW{^4Ehdb1Ha1u>Cbn6qJAm~ zA_~L;8cA`53?gyGQYPWcy60F?;OX_*idRaO>rbsPt``#-dq5CNbwFx`DN@rsrHrf6 z6C%9M1ga#)pju+G%17dd73l`I#){m*4)36;prDUc>(`W(0jK&bo{VYQ46B1Cc^KtO zsL=|1nJrALRrnQa3mhY|agc>~ugCwm25S`ns*`Sl{H(s!%t*VH6=Aty0e{-$DsUPW z-RkR{J>Z430Fst@R}q?<9IJu`xQn;KikPPHWqzojXN44Qi{A30m7xz6gZ>{@l)-Ef*d?^H30O34$>6#6$Gy8vH4a~@p~me16AJC zv6Dk!EEi=Zw-wwixE*x%map`};WJJZ)fL za0qEHXa?cSD0u+oAveaPL-1N~R>7Y9Fi%i^@Jduz4qYTPgG!?3NF&zv0;N|{M%Six zCM6(xkLM4!e7}8zSDI(BV@;zBBV?oHMGr_um}jW&9@{D}lsA-@->!AnIg1$Jbn1B? z6W$+^Ea6TR2VKhF9BP@K{Wv}V>I96&ml!VAm|$H3hv8F8dAt_1EY2u#*lVfgo`*?B zk!i<7T=)V>NmvvvP@)iIl(9CK=_m?k{8yS}-{e$cTX)%l484@uq}6HPpxTT#=o7hx#_F2v_2Do=4K*SsJtaT zFDpW{q@kgd_@LJ`F|xWO4q@JH)lzehlV-J{uRw!3Rl?;iUA?PTgVG|vjm`1QZz(lo z4m6WAH7bk@v4J=eH61dVUNw;=RGQ>Sh(^#U@hB@Hf#!iEZ5;p0Tee;)XyKskAGj@H zfcuDw&buyT6WQ4cqV2EnKyCjzY!Q)g(vCsku>; zD_2?+kLV$_Az2+g`w9nuzSGUyRFXt4g6EjkSe86`u-FvELm6X*X`%( zu)got^f%x8e5gD>t&Cin8b_#^%jlflmq@53!NaaRz@mhL>VZl6oXg2x@UWN)ann%O zBdD5A2f@%h3{!noHrt8Tq_c)>t|za6I6PPaOd`?@=`PsWzM%|&nbB9IoZecg-*q-Y zcc+=xw;{`3R2RO9)I+CK?lj~?0nTWN+U6=_A1)s}JK^;^eR+->wO_;1VVW`)TB2>0 zWfNZ17I=;~R)KrU3Vg_eO*B8V$77Y4#efxT^}cbPs4J$RnQH>Gk-EuH#`k02(IOUl zDr#-Wj)pey1v?9XS<+dbpjlPLl8ebB#M2kUwPrIV={mMPRx_R$4YS3{e<*6Xg#5Fw<;>ubs&a`{ejzF4+bBZs%rK zH*huTH(VPc^>TlQcF*8@PTQU#EO0c^DC-`~+eLHP8R%yK-@}n_IrOR41Qs@~Fwx@6~ z5gEV>{zi$Hkm-$JOiY`^fUCZO*Xfb)KTklSSFJS4=cKS;h>8)+HAz4cv?shcPDIv* zGQLqDkwyWC_u*KeTf$Mn&@jvlr>suSs$Cr=>4ueYh5W2?cgp$jVGL2-ij$>z>ii-A8^7bQRSUYzPNk%jhOOb60mqeyUSEfnFtBh5Zt`C>SuT zXdnrX>WnrP#13lZ8mdK8d&?f|(v@wRupXGyZWv9laZ(XNY8vrLlU3qKpIP1f?Fq0fby*20L6=@s10UKt?pF^#%Kw(oAyrJd* zTb6R?QVF5^=~NY&n(AfeVoAxf4fo3&(mzUR%1f%{QNu|n9iqpNIB*Bs*m$x!&e7_f zD&z*x6(|Pv@*F58y}R>v!bE#s^JddE<KS*o6{%qOTM% z80Q4u3s?I#D%v*c zHIQij*d(&1>i)`!_6S#y-LBAYc2EnIxM~NEd@Mja73m6mAlZ{K-C zyYziiBYQPY9#UQC@asCA`!`5hs;Cv9*`Ki^$681oa?<6|ub#SZEQ;33LGr{Ol_aMR z|KK&|jX3SN_=7C-!^M!TPq^A`sNy`kUzfhI6?~M9#DPYgXO>5jhlr(V%7RKT`!38z zHM1KyK~@bR@Bm$?o#>SqyoDDQ5AihF$OCrx4+9>zgXr&KO_Ho|8nU%OSRep^Q?g;9 z_pk+X7+&icq>e7a1~;z%y;aJWB24?LiRw^~;Y)#50Z$G`V|H}g_fvyRxO#}VqN28M zQ$b^BM^*x4H%XEt+FN0qB?7x=P2?|`HYUM0hK5{4J*4e~C$^e<3ZlS6)(%b~CrtY7>Kba8=CI;e-X(M0zNkI7cl8gzO6!oS{gt)y z?%Ncm^X#q-4sw?ig#==d26xeNiOqf*H8r^9{_XztH)IZ*-_v=jymOLs}ZknC~J{kt|P% ztI8PmcX{P{!^PwNd%gVkLmxSnP4dC}q}DPE>{;^8Vsl&^qfc-$?!&i~}&sjBq89#oR2??9Ap?pWuOd5q5U zVrqnw_hMXh%26dKPH9i}bX>UiyW+#U%!hdUd$SgrlN_l2UbFD5GxC=PylyVn*XOB%No&-&H3^`BOQ z|5=oLojsq^x8I;&_xv1!`Z;8h>UhywQ$?>oK4|tiA=^DD!|l-6Ua|Fz3H-*;Tp+&j ztdYb=Q-x1E7h2NwzUq13U<EI8f&N)LIB)+&@SkhYsoq5>6931{ zkoxhP2DkaB2&LtJS;L%r{{T__Fx=IXQ)}rU$x{!#1rYxq6Itp-ISMJ@LZ-~NWFKdH zELHA05hfK>8#R1ENo9R?jiB4lWcBJ)2Lg_>Q5lb1PKOvlR51q_&l{-WIW_dP@&*0u zuz~7XfA`lzx!;_suh!O8cU!CP`%f{223OgWxk73MpsM!o>+T5AtIPAn9o7`NVEhmf zas2e_q}mdL|Ke(Ed;1!&F`r%DwMh!KyQwcH|5K))n0%gR${y)04Lbx-R4_A#9`9FdnRLouT(0rbp?uogJUmEav-iPL|tYh3FMU-t5Y%VQYF{aBDC%(U2 zk|!$O8fw`gRvPPxB;TfQ<8|}%WnEl;9o5R#nypRjOul33Z(`E02H~W*iKeBmA8uV8 zt+eUTw1TD5aq12po$krcqln3aA2Bp5d|$nk{PPG%<*P)&1SqOcep%Gk)tBKGJr}39 zeJX15@>+VY9b>vbj1RsZ{uG$6?$5PT(^BTmtjy-W{of|7y`BCjeK; z*unsso8RkR?j>z_gLe#1&rXRqL!pNH7LMR~Xv*6(G5*cE4Q^e%ruf4`*9(ErNfO;8VVzxz}){cd_ETrpvzRYy$JJ|;_&DHpBhel$Df zzwq^I>&Qvrc8eS=4GT7c>ZR#ouFj}BLRR6WnoDft(1wY;w%D|hPsjHIn|gL{co$i` zLRGsIG#;^NAGB5I)mCH}CSd4-ruRz4KfSMAU zDS_b_MUGjx;vmJh+K8_mD!#wj2y0C&+Lw$&0M5d)un_*Vc^x?aW5p%zgEEglR?#w6 zMM?rYD`JkqTFp1(w(MOWWnZ*mc92cxNDSPKDwyJwF1d(hhRMxdT4E}|D#lkHgHjzD zI)evK%68ZL_3fO3s0Cw%xc1P*GFdLST7rXM+2S?lkW)z1zaNd3BnewKO%`n?WgWn( z1Q@YMl3sgs^o>q2YBIeSwC1BD+yZE4Y7q7nhl1js;+we5S%Ym|^tb*Y*L4i-Q z8m?IZuktn}-Upt4w~ZWKGFFn>pJr#Ghqtk~bK}YOv@e5osLSruq=0}Q>Hr1mnoLPi z3)hH&^o1PExiavL{##!XT<@!bT#5+W0MP8R;c51?r-FB=Yv%GeM97-JOXkb=to@;i zf`(E+qHCXab@cc$X0tobU1}MGZD39#p9%R5=l!_J7TTFVysy`L)pUXg_f z)nJxlzHH5}chEkKR!^HbonF=Jt)Vji2!)Fu!?d$W4Z2mq6z5k2E#iS~6tIJZ3dq$Y z%uOrEBF@bI)zQv_LvTb6m06S0!0Lv~o+E)9!@RS}{c{fU3>y+~n3H&#pk7cePu-d& z5jY}UX2bk_e`cch>KE2hLW9SldcBJl1D@^A{X=x9+ZsUcf?4MwYZR3=P=HCrH47Tz znz-^`zWwobNYX7R%C+77z^P(GM2OHYaUf8{jiKAwJO|lI)u}A%|8?azdfT@FLGk0uNU3Na%jhB__Nr z7=s%JvEuS2ArTg_5|3)3|KmoIzY)G9}podX0nidDN zN8k~Lh4D->RHVd?N+%zZ+x*`geB2W`Pn`(X&^ngB*;{s7+}2VA;ka@cgl+7Q`T9;s z6>QQPG9ry)89y9JHJc>q0Lo^|Ma`qWvii*V4^w4I3vCX-s!D5yaHsG2oK+z3A=KtN z=xhaV?h=Iw8enOP_|mu$gWImBa9>1n-#t@vhaK`2WcTM2v>PwhYaJdHH4!Kidj1l4 zI76I+Q7Ec9;8C+-p>U8%$mKQjheXq%vk4tm->;b0Sz=QZm0tRAwoDm+88atX7Pfjv^Z} ztT^T)MV|2mAKE_%kLFsrp9 zHt$c@0FbmVL)NML_>~Edcm?%>n>j!!4R5f>A|t98jV!B@53l|`J7{r#8{1aSlZh&N zClJJ)Y9L41(=VRIJy4uWthqV=?b@kUGr=e+_T{r z6L9?pXYy|hC^5}+ui>vKSWFTN@zXL~Vun<&2JCOo&*hxh*sbH(vZ{WqfTr~A+H@6> zP-9q==O%$CYgjB{3M520XsJMS8H#)(j4>m=2n}EQ%gxu<#aUBVd0W&a6gD??Rq4{- zmVkam@H#J5LN8Tt1iXX+YI}Hv63V6^sGBrma;Tk;#jEQn`hSRa)ri$~mR`tf#a8VV zXG2vPrneKD4we2FTR091GJ!05mZk!XcnVGa+kN+6FO{@zj1QSD z?b{b4uNer#cq9MuAl#rqhy=Ot@NSvd0966TaY>Zcagmc1)A%#IEiIPyITOY!#SUzL z=%3;Z`{N<&ygUfKk|FVoi9sR8O7B=eLaShO-okQ=JA#Ax?P>R>^;=%ph`V5j>e%pn z2>;`C9;-sp{D*bxo-F&2h+!|QKq|DSY~n9EemE!K{pqX}-8wdYdtl80E#M5GM^vhZ z4kCd?CirND+Ty$vShF;&qKbsGjeJ3y7v^Q}GqNS%7AO~KvP)U>`zI7b<=N~f6eEB* zBfW43nld48wB zy9Hi7Sv#KAw1j;HE=hNp1Qjd<7d*P@qAk1ng45dse>IMyO_y`o_X?YH{kJnl@VOz& zzXb)mXeJwXd!&V~#i8N1t8tbgg&>O}=5&z)!AhGJ)i93e*;E^z(rC!#3C>bDzFYe)A19J7Wh!0p4) z(cepJSKp^6{=P^*+#I9z5iMRuvB!VgL;c@ai8DiukUilZmqBML5IuS`BKjb9ar{F2 z=uEkEXzbM+MVT?|WX|s=hES(B7B*PXkJLW}6fzHo?oc~@hzorlQNQ`gB9xOFgARBT z$^Q!b2e?&6xTl76TI=B9vq#=BbLRA{W) zKzM5w>E!~nBH&1*1nxeRh|%dIQ|Ob5ArFIPzJZ(X!`R%A5}-+7R~;!K$QLglNRUsI z>(3bK$MVbdu}>*`Pv7rwN9Ie%o~zYsOVWnsmz$7mjSnHE<^oAUjy8-hZ=u`iv1eBqm0X?UcFFzI=i6IiW@s02Rb6i!AxNqa?luKhvkobk{`pxe904x zzH*|Kz&k$pqXF_4w24`@n@8F&6AF*?`cH_k@-e{&EZ^%Vpwg;Unx~d&y76zZj{1~P zxxV>>T4LN>VIc2gmm%8o-$p9B-db2r0@50W#0H~12#pMv5`NMK&NxQagM8DUVPA#= z0*#r&(01B8J)e$ZTTZX8`4Xm1Ty7s#8oyV$DAKBl1b0OFpZ-^r*-PZhBFe z!CpFk!s!2>3~nRoL?Z`>_>adYU8)C7Q;)UCIJ zBO&7{eUP%)g`cWg8$#@f$l3edsNb|3ywC;cKL2i2GpDg&hr#YiSmX#6oZv?+$Fs5q!lvw8fJ zBj3K4HRdsqq9k!(uuDee-wK;39wd(5ro5Hj9NHuHNu*hHI^w@P#i;U12~C$Wb&F|Mq>Ql9HlBAs zauajxKQmbk7l17qwc;%maR1_Nc1abJ^DpR_)0Mvvk`l4dw$8F*0}&9QjBpb-h!YD3 z;0TY~*$ywDOIj612?TJAuGIy?UwnfkCt>91?6o>^w#ic!%41#J|xWnVK#dsDp ze8%o}?OcGO@hr;$!rrf4Q&Q-TpF&^Z4b z#_xU|_yO;$&q6>aWQxqMCFSzamESCf{&<3%Agxy>`XhMcrh`*~Q034bCnGU8$UB@c z{9{iGH93t582hI-GvUEbRw&Tat;f3P%oCpZ5x>}3AeylMP-O+4&PG2Nxl|Avj!P}E@&CTBW>4Uaan6)KP|IV;@du1Iha_4xT+AE*dp{`#nl=0f6?h7O1t8Ik; zU1CjP(Q-LW1I+t4@ptQHZ2cAduP_1BPa764t;DOpOPL~1xW7uBq*{qPNOfi$7GD9^ zkHtk@NQS}WOEJMlEmeI4{_%Wd_lG+ZuD+0M-ydtCX>59(g@=Dz2{RK3 z+rJYRw86;xG{k_NY8ZPkRxclFB^iFhV#`Wqow=!nIMw|E3SZw&B^CyuX>E zTF2Q(Gcckv6AJGkoDK}eM%ewt+TQ})v3uX}tb3Jo)}X}i-ogAvz$Z}pFQ9prZN6eY znR0qqXR!{ctD~pP-5Ll8t>pOhJJ=&?Udi z(2?pPJPm4#02F4qq)nomkf!_OVD(^UM)=F4hHR=9R@?=)2Jm2_RU41r$KrrA$G-h9 zbl2)cQmf3{@-Uve?cX|YwwbNAWlLC@Te5XC>vfRwga;j+u>yv}vY91!uM zBlAyGKQ?pByB3W-@l<~^*t1-}+N0)=;^(JAGD5yCJ#Ty;6*3ZTCxb*;ZKm#Ay>p#D z?e_N?Ea_;m5pc>Kt~tX{_Ywyrbg|XXtj7+N?<=f-F5B`1GP$^=m>DH7=IWDVhw16M zluvkjf9i@2SMG8eGE?Bs(3k5m)LCL~M4!@`KQ}!0Pv%nV<0+;VMcNkQxzS?c9HzqM zA`@G?O`n(+P#&s8vD!*RHrdD(tAaY9h4DmXZat?jZQHUlEop0P;O+wRIhDyWOzNxh z;PQ%cB7ry}5|Q(14nkIcHU&Ia*a7r(;u5tGkX}Y1lE0dWT`#iA7YM}r$BI~AOEVmv z@yl+O<3Bho-Fb889n8zkhz#!MZg-Rjgz=6(82Fj)&u-wWjy*(h?)|tD&kzr|gPe_0 zxOpc5<((mAN)Dl+m*Qf9U&~`a~+tAU+QPi_eh6Cu}&+Ff>8@I;A zlxi^-X6q~U?;GYTF~1pZW=)g83eP~!Ceo>jSB#pW6AYxKjlclEbE(97BWml>A_Lbo zs8$vjC<3r+9A!-=$nhJBWhlf6Ax5Oo+?5Is5h9Nf{SIcpSp8K(a890bc(U^OG5At) z7l+Pu_*3wA%7a-)WC{b{Z%r7}zG4Gx)RH?iPXk@#q8*i52CYy*7p=IhF?IjaMmHLh zFungkoHl2Czvl$V8HmRbgp9zctEKSD=k^nFjMoF7@xdR2@#iAH3npOiydbf=;Uib0 z`X(*!C5Jd15+;{i>pfT-$(87MY!GpwJj!iw=+s25wjZ?=Nu*`4+kHjcNQB~zT}j87 zP|JaIst&yflay^J^BJ#cxbz2`TSGuw3Xrw`ZQIPT&Km+Y!2cjT@F;V37dkDn#**#5 zcBoJ)H4-@-~~q)X6ocGJ^JIi--=wjZ3W z&A;gz91A#r%^*Nm^V#40!}19)XG0HX7)6LXFYQM~!(PwByc=ijPRo*Cke*y^K_%5> zBeM6yg}lJI;co%@4B|zVoR(OwmJ0L6G#=+CAMtvGA7>oA)CTop*SLGH)3oj8JMuAF ztp4LeQ|bczW*q(dv-8(YFNR236`@+z9Fo82Ar4RhP5RDcbiunLPBE+PE?z;?RO?g7R`HBW+IUhxP7 zd-c()VYFwp)4KweRFe;6b$<-`9E*DMxM;wMb@X#KF9z)x&ZTr5VTp%*ByL$HpZfRi zi6TBAn8z?;UPEUPzhdn|f+76O9uiAh6h2yQ9)sU1vDhWeJd1-phFG3@;NStP}GpUIESh=Mq zytYU4bhfVZYtwb3)-2m!3K?0vqoeLvDdLu{I zk%-dX>|D+ClVf|Mo0lrABa`Sy&JPM#7}4~7T|U$n+fmlMIfY=y4choFr5jizK_!a! zYssi$5O@3cN6qdrjOElB`)BiYT%6N#%uO_V%yJr(VFTs|v1&`>^lp_dj6@#Yv;jFF zws56#q8%VDtIumZiC66eh%)?49<3D{r6hdq0u7xAGX@nY=!vdZ`Vv301B ziX~N8>3uoULn8{`zWB#=R4M#-Q~URYyHvycn7bhPO%xw(@#k@Z_i?xm+VByP@4ley>9u4+??~&E`{{Ecusb9XSMy@N)3AVN~G>sZT@a0M9;M)U{RKi`3I%@ z^72B*a47}hU`=0ho%R(=yh>!}?y}RmkE@XjDBayU>g^3$(CX{+?P%Yto&IsF@b;2j zZOq@?wI9Y?H&)nl`^UVQtUp)%S>bE;D0>Q>jbqhgH=Rz$1r!IQUJ8dkhPFw+u%g>U z(E22%ehvDhaw#c%MP$En(ZmjVs7Vu>Sp>c0*AK} zkbgZ)yqyf_0m3l`Gfa{vL$LL%J6#Z&n}d!#3(g)`7BhqHk?d`~@l*@nbaZ`gq%inq z#2`@I7JXgklBM`+UzD?b3EtDFJ&b1I^Ba_>oJ3VN&yv`ifKQ6jLYK8Ww*SXhdS%WJw?biW^SiOo@~c;-sxAUufn{&@pref~|(( zaYGKZc_+kUhGBv+D@5!A2CM$X0+@hh*E@3@O*;|r!wC2c=Z-WvAGQlh_&|gLil~K7 z95t`ri=jjy9ZEt@Dc_&S>Zr^f{EeZ6(}&nS_Dq*uyP|ZoL9J#jBi@S0U_uQgBQC=%<5_<*?EpqoH-9;+BuS^$G9>-;OVOm6G^z_LC*q7rTBAIL2iV?({Ro zJY^#Nkk!l-QQLP%?ske?>|%WmcFKb8shnBVROqVz@)vs>30Pin7kO4qQn>wKL3tfh z=GtSUt(No&uFLipBur_bbt3)yCX#BTG-?vLRSEDIJ1@@?OoO0J>L3DIK0j_I`_&OE z%3poLFH$Y}#GXn*F3pI5=*bIa>E$3+`NkpTC9i3*7Ij5p<_$Wo8T{!-X2eH(-Dymh zw71RHN=difTB&#|nIzhARm7;qo-3-lI;iDogO;RSSkKj2tFY~i=h$t9RQeEti@b(S zo3I#VC_OZY<1MI|7+5TnMQzg`)S`KULbGFwU&03l!hC%e^)|M^g^ILa#N;k__Oeo6 zUa@;awmQ?sIH%-D#UqarYcD4x2J}4fmlUx5ss!1J*!0WNm}gO=Qx=gg8`jewJBd zXTL*S4QbZPV3-WRu|n`~_fD68Ve^yzi!}vgF854q6asx5ZK6tp!Xx$Nb{D8jJ%uVS zU3WYTEIs7PcvXKY=kORJVt=|#MQvL1nh2a}tWUOU1a!e)tDIdBdV|nKf0r8<;LM85 zlz6h!#}%-_i5>~tC!``AS38|^*sI*TcvF(R9G)sGQ?dr2{z1_`dL|yL+Y)NQON0DF zY?61xBz+NgK9AcCz8J!4nsEMZ)Nu(B`S;Q|h5hP`=MuV}R*-n(c^HI7e(pWowi$5} zQ5{!*@9cZZ?!pu}vRANemexHDqH4Ao`O=ozs6x34A-1lanCNwHve8h?FDuPHK$CUK z@@>@h|3U}MZ7`nWoPIcjG5TF$?-HH%8DaENI_@I(w{ZAj!L*rE$(+n#p5m>4iFU*X zx;6qS$rm)#K9U_{O}9+&#|sEUJIv4H>?_@k-=y1koiyG7MhJFg?#!?%S>ufU(oApw ze+Llc_FS9}`Et7_YMXi`4#rnw>{IV}}nxEr>aN5M?;AOy5-j^Sdglc<8^=rsV z=w*9W+Hyondc5fhrwgkGaEZA#uTSc@L0ABKHS+|!HCE+MFIP{cE9BMQg<>=QHled_ zngIU;#NTBE)m1Yk{iKLsh#)*vEiz@3)F>RUcudQ`j%IH~14z~{l}?V(hjaaZ+0X~v zo5Zk+1KI@Rdhn~hV#+xLk)5zUe44Z$EMFqHh_4g!289wWQF7;1yzshDq{#xwO(y|= z86=x`;-;$E(K1^u*yoFQWV^2^LZKSI$xo{vN3St)-sX@GBF@{rLN1i0PY4CohY&Tu5eP2%2#Bw9K#BVWh(uBpD*Xy-4W`F0C zE=Ge6dZryg*Lq)x*vg-Xh-N)K`~S3tz73+|53QFqu9@i@MT3yJ!xz}k7q1)4<(f$r zUBTW;@QG0_n?DfKXb|7Z74Y>m6a;IkxIFS|-TgH)rOMY(yVyejf>v%#2sH0O3yE8Jd{X01ZQ}ym(d6?Rj8eH<<6w$5i?{ zvXI}``Pc*Y+oQ$DrRfS$&g3m{TnajY%OU9#{WD&X8QB(Fl(aY$69MKi{ zlRQjSfedY4ES=bXjHigLFBkYa5L$of1N^_=l^w33Bt(=P5)Sgs9TvTFuEDC{@QTupX0*uGkVe3n%F~(MA%GiZ?q)c%*SE2#EkIYya?}d{O@x z*+F(cQ-;#uMuH^fQ71cKc*mjZ_;^IOOex0%H08}v%ea~6*ez4Me-rM(OF%%vC50Id z>#xhZ)#UJ-&Y`#`PE@pLtymB8w-TVjQ`Tbh+_Y8@3!KZ+?surHurctA;xUs$k=Ojm z=@5)*9$(S=Er`MDfxQd_rL4Pv1Jkh0#Sk^|7|tWCx$FViDJ;eOaPm?C)WnFfOFpp< z9xQc1KG`#;J@K$6Qa#3pFf3YztS&XIsnkg1OdS2)rkVi-Xdp6dfuUu{&rL+M#|E4( zB@RTdtkuQGm$tdWRY4*uGFK$8C`B=(=9+d(QG=Pq zAPbYYgi%XKkqo5``4y0BlJSG+=8rBC-_)3!q4@~I#FC2XC8ajqNm%eU9DF9*Al2X= zehkTFw4zvkiGe=d6|upCqC5{X5+&l114?#60C#?xv;bf_+Q2ydoi#g5todS6XP(15 zD3Z=>0FLI!c?EJZBvR7_ivtvkj*p%rquB4`SNa73!)9>XC_%NvAx|NUSj8!*c& ziy6^uTq|I;^ky=fd{`sO90TTp1O!$YLK3r|lOLs~oibKvskH1^L5s&icrsI(R9NJG z;ztC8c5_6QT5}nc zTLYl+42c;0gx1~3vgjr$ki+F^l!DvQIW{9bb{VJ4m!#JCDEGHaXypuGDR2wgir)Rj zbo7&3o3-fqifS^s^+~Mf1}KJTR}Cb1_ZAX94T~+@U*GCn`H-SLh5UEjMp0FHqG^X> z#`>9mVWQEB=t{sA*E3G>)qrEZU&&Tr3MY|^n0{uRR^u33g{ZYej1?j1LiAFzdte9vl~k#)YA zPA3lgvlwH5+aBQtsOv)Pu%dc6Yx(;xFJqIaP)LeK{4$hw${5HJZj3I1CK^`oxcHs* zKoBG>8wOJtL^Bt#!4n)BEow{O&{ps_FXeOdrO%%acvzgLIQ(@u1#RJM&wAk@XkX+%=4OE2kn@s49|=w5wpUgbY_YOIEK*gB|etw6Cp#dr{%Bz6%xe?vZ~B30s>Np3I;-vF7lg$Fg+U({#SVVZ(v8) zKxw+MJO>7_#hLVV-4|4jjNOGM2LXDpKQ8Nqe#+S*lhT;nQ{B~*HK;bk5uTGkpf|bv zakENtN*Q^8U@?B`c}Zs%M)AuUq|d)#emKYfJI_>cTWeKQqvt0iZ(Lu5eW6@3CiYz4 z->cP|{ClRN&cx6}FP*hhBaCD0-5dd4j^pFyP)0JK!eD9c+r{O}e6!8ToTB1RkB`SY z5^?(Shz#1;*^!X{>s?FUMy78TW?n+86lw~fnIbfm`SVnD^ZF&eG%fb@Ksvq2tAl3x z&cY#XWtyg`;O5p<)bczIc$adt^f zZ1Mhq8aaFUdZ=G`n?T^O=?rw ztO=q};3Q~ZC1_IKRnVf8Y0MXu$IA*66vRlg!$djZL+!EP))_Dw*FDXV&+eO7b51hx z%oKePL?IPxw;hx=O}P-xw-M)wx^lMxPJZy5(Kc9a1NIjfyk@I$OIBzlTZF_s(&}uu zG_JSj((w4$F#+~7d?&wrmKzsb%X>?BaQi22d%d_1lzhFZAVNcMc+28onctpGEX>gF zPdHgMjovYvquvo1t#_19w?17#Zwiv*wdDe2$Z(UMIX5>AMVsQaKjXtY{T)Jqp78#F zQ$SA!x1)=crg?XPEJX?pt5~3lW6n}XEq=gyPW(l}^gBnJ+1alhjUuf&Gv&p_VuR?T z5u%6gweMMCUPSvpbZL;&VxNtnPdcS`;NBd8>Bl8#yX(S6JE~37D|5wjR~4JCbdf9A z5cc)yxImBi3~MHGvtQdoqniDIQ~hSPv&mnYagZ?qCgJ5@**a$W%CZiXnK29Bo@GI|y_QQlBqM^lJG{iaKQDhIw4e35KuU&=Y*M*jj zm(EC_XRm_iIFGA`!*OfC!N20KH@Fvqkbugt!F#*x>=RCL>so;9Q{Ib%5JAqvpeAqn zBdP9brcB2aZMJX%iraN;@jxZT>34=cj>qNk>gqw?BlCd|>%=xJ)uQKRr8nZX5l_K9Oskzl|QM$Q{2tE&vb3FjWif zhseh_J7EWGY)0Zwmu2_4bh}!&z6Nhy^FF4|>j7hp%#G%HfTRAgX|blE=@QxQzQ%Eu zDEAc^u;Zz5gOzuBtT3EDwOIZ^*oe)h$4=OjrhimpkCiImm|ur$KQ?L5!ezpKk~dNl zVVG6(Lg&4$QrQ>PoBLX8MBSD3m6j=0K(TtcZQR^8pke0kxW{SC|Z$-|(95{LsZf-;j*@P#@ z@3{WES!2r|Pej4Npiwkd=I?r$>6H%JMbADo4ff^@D%MO$J3$C>HaR6>UM*RHef z$rUNS=~zSaZ@u>OHgedPCcgpFRBP-b`W_dAC9{O4V%B)weE=58pJsz7r&Nb!g%$V4 zK1seTbfE-hRDboAV=i%XHx-Y8o2D_wHx;Y9A|SQtW%ct-%eg!<>QqVP`DZ5$7F#=* zr@h7wplttuTG!Ssqhc@j*CxxMR%`n@O9=9D%PHfddmvb$_IQ+c=&C91FuQmuE_qfD z$=5~*VQPwT_YO+R!v$uWxM)|dJDVmUwyC@#7yOIEbMdMq#M)3J(@o(1a0-c^tu;}{ zai*m_H|j5!@;@(0;HrV4guPv5qnhv-bL2xK@Y$Io=FwS~xGJ~3+L~P5mC8lg2y*GA zr-5bM)~NVs&v1b8W4mfO^|~^CwbOjD$?$14zDYFoc;uW8Eui8$VF`#+XZntY6uIu5%quFg(p2Jo2fsa=N%1Y z0L0&onvsFIcFSYKlh4ZfjI>T-yfe#1w&^FGEBEC^?XRQ0U7$je$d$O8iC^5yi%L5h zy(bO?Og=UudY*Hpv}#v9#Z5C!E3jV89Zv#!-ejxSjO914JyKkbTQzG#m8%ZkDjJ5_ z4i~eryWgd*lKFIYy5I?ggMNULI29t}0R+7*Upqgw1;wS(qb@cDrh$%*n=#~9V4Y+R|aRgk8GpW<@UMtV#}DGSV!adM*EX6%{-G8brNUO6y~ z(pfmNzLVF~7Dt_Lf@{m$jHlsNyVrZpxLB9_b3z~NKe?r4se zwnPz)^n=)C<_neYJwI7Nar|@ z44W657hhtsEvpRG85oUpoXd1-Be!CEu{v&cMFt)NbECB|?9LMUKZ&%tYt)_f{xK3S zm$K?!Q9fJ($i{rVF^4!WzjwBL#`k_5H{5|8a&V>GWrkTSpQQApYMd-) zZvLr1Yna=;r7MG4>Ta0YirJd9u#`MJl%WGJ?FQi}_m#}>IcPfkW^Y2D31DX0y7t04 zEhW+x7ePE;B!6`N5!Ak#Gqz2$v6x!1!wD3UxrVy)GNl(myP=f^7#mth1h!EX*5u;S z#)&C$kB0}0P$IN(YJ|z;$x7>?N<<1$V9FDvlhu)a3Om9LzdR@B&rt*aAY8{sUBrf8 zjba3z@B1MG)M!#v)u$axt%!bE3o8=gcToCSHI8vk79?KtYn+!;4fI`sawQfGRP`az zW3DyU0G@Mwh+6Az1;j9;b(PVSVhIPA(;oPay{H_?3ggs?e zOiWEPV;$xHxIftJQ|J`}9v6?g(syqX3e7_h+>&np8eK!Rk&(HF*o8F=QK4pyG^kdZ zG%Ooic`*U)^!aw%qHj}z9d|dco*QYXw`MY6t=VdzS~B*2jxnuq#xdH+4i&uVuL>3x zyV=inf%^_qU9-E2o$MwO_9mb8^DhWLTt5rU}oIpQMtCn5P}a> z#k~6bzHK@QeHEp1rRNya-md_f3eS!a`VM5Rqx&Cs&kbVqu&_Um z1`0|um?Kn~I|<|qsVY%412-gS!&{mNp?|Id0$AGICS}VTa zLA2q{K3j)HO>HdFGX{;@7@@$!8BQk$ceT+NJjv7#a<6+5At*jx0*0jV;K_F+Io_j} zu=RjUgnS0eq=Z*$*cw1H1N2}2nOqLLJWLQz>8MIHNHNWF(1lBemzJg_3LANm3!x>7 z0Q0X9b@mBxT08~>$QiPVmPsA*3YAHi+~GY6l`1JZye4#x3GJo5qkd&E(V{SZ1ltnO zJ}8#j5*cpnNDkV4#kCYXRD8zK!qMYWdniC9c&sQ)eCI@h(c-K2x%-b^X1<{3Lc*R5 zF%-W({do@7677D?C|YlSl%NHU3guYPScyk=qT4Z4?2_0um=G zS2N_T2ZwW^{iAm=-_lG)e8S{qk=tAy4?0e^PRnGH0!(M50RjS+*@A|W%8jBl1DBVI zst4hjgcl}z-bE~hKzkgzIH6qxIT*+eakYSSW#N_>wmvn@F->F6ea%HY9NjOI11AuU z#c^oNsuGx(>@$B}JLPz3`q>NHVDi*ZOl{teBBb1pVpA3AI*o%sHOZW=Js6`u;(IqLQU=>dumL*`LuRIRZ76hms7NvaM zrP8Is(`Bp*1pV4W5Ks=F;ZUj|NQrZ|jE$RXH-IAufB7^$_2 zIiH^yJMUySWT6FkcyM6?i^#h$iwNSLNr(;x+n8CIPL?()8Y${P267(Dui(P1ihWNK zJVKi%p(;$bH{$t2k41T<;>_;zdoTSrNtwl5kL}TXau@n1q_RaiLbuq`xN-X;(pEkp_|z(NHsJ4(kRIt}!D##h{jyq{_(0 zBRGqgFz81^RMB5Ll9xNl$(biRp;`1U;h2Vh*c}Rja{B+5<1uePBsD|96yq z{ykWpnm`un`}DeBO&9vSzhA!Kn}xZB#`~e&#OoB#VqNFh7u_4nV&v{6K5$ae|5O5E zptG)x^Dl;YZcGG;V2zi0U~-ujw)DHv3%c$GcKE)`+so0#89*Gbd*bW)2kZL+&RhZf ztfrcwS@kJm##7r2HDlclEh(ppyfa;iv_w@(DXc=S+(C%!`deJ=sn7Ojo*xIXm=SKe zstP*(IUC`}ri3_cu{s@xOHyI4hyV5U#mocksvo4~#^(wt-}{c$uD*W(sIKBfkxO&>38HvH!^3p_iK+2-tySvH!4X!g>|YY;nh218IL1n?#y zGVfDYE4I#~m1FTK6b+`+j;sG%7)6IB!DD)rt|}ah;DZWy7+lE5+sceJGBt6SaBM*)^_!Or~avnhdYm?Nzje4m_ zo;|Urwm%cdIcRI;rrEnK=!fmz?tnrnW{JbJ0Aln?nmHR9VdYGz%ziUi{{HtuZof%! zpjlJ&Z;^dTh!KUo?O7R4S}Klrqr8t0<~@j<><|?T6zaHQZcqrD@?RD5_3jt@<=DHu zyt{4{lV?kdnM)e$Z*O$@bP>`7%H3a9L$vrj{j}mwhdYbL7jHQsjv^)u20U@7c5RI^G}p<4LrQE95xU#2{cr=GpbFQlgw z`I|{C;y4&nAmo1IJ;Z4u_x(i|gJc`d8h~@^nCh=7RWy<0m)KY^cKZ>r0aAv(Oa)$m zUEX&c+s17_BL;D6@X{g9-c3cB z4rc~zoWMC*G1iAHiuW?{b!uqlRQcG=Q5y2(C?d7?TuM7DSaN5QzQOqGeNRfY@8;gv zEFc2nPQ2Q!F}7gSM`W)Ve*MaUEoxuThpGCxAL11%UysFBCaTz8Cvtey{BUsdFCiik z;;-{M%^AgnDWn^gJxYu|#VCv{K>0l&tX1Dft_2-RF4MuG`|=68kI3V>PyXtyF?}pw z)$&8{w79^EJUVq$=T-!B94WekIS-mVaX!Sf3^k)D5GVJLhs&3OGYN!eTeu^Fk%YM% zavM{p=4b{CWgysNMLL!Ydx3sLq=7pm$W(hcLrtJD5g#^IJ`3b*Z65KJMehlG+{i9nSyLZM$@YZ-;yVm=M2WM2OfNuRj=&=aS z*g`9cR-Wpm3xt_Q5N?pKqCg}hzRv~aSpMS9v0gbic4_hZL~^r`bR}%Ys5E=qJbG|q z{FVz@$X~jlKO_4a(sZ7TfF8fGC_ENZ(nu6Ga$)>4rlMfd;azo+Yr1nWFU3nAo~|pq7=U2>l>q zD_&-mzf@$tMKpwXrZo-hW)OXGpI`lqPitf(u;G=Hl#9kh)Lo&+W2@^xBeKI1Sdcu3 zNQlEQL2csNf0Y^w2Xcc4L{7b)jTy;oqouQ!lkOHwAp@`?w5u~BM_p!NES6v~Yox-M zW9o<4^?Wbgkoi8+p|^WxXa@A)TMA2zTZnaPHs+GPOiQU)tjA)h$#AGr5U|WnYob*w zaVsK|!eR&JHw^R|N67b88q4AtG#9OG79mlS%p;oSz4s$g0TStUm$d_HaZQKixsY*h z@inYOsKlUDpCbYF>&S1OQYPk<&S-cP$E8q#BDylSKbpwRrM|d%1bDBJ42hptp;VUt zGayMsT~jc^HbgT`b_5)564Ih!l%NoYKMAhd-tO^ihW1@RJ6wuYq}8)OCM~A0@t#G! zh68)UPWC5IY&aqu(!!1Vb5w<{QBCM6kND4Pfr;Vs^NN&cYe`-=<9E>Fz-e~xM}0Zm)Be&{5OyBhEC1M52kX`a?%q^YMO#+bRkCz=*$YC7}6U{ zOk{X}2N@NmX4qhC_QuyE*1?ianytB0Q<2N>_qwBj1!(#RP*gI8Ce8hdN>TAQ0&?@n zgcctb`zfg@sfh*f8SByy9JJI`oGI&e<{&eQ+()$A+k)@XivIg(#Q64O6^x{eq?C3D z?8TU*N1dY}?~xC$7(t$y?(Zh&%^nc^y9MNyE0rMaMpWX`ygmrvjl?R&BKg`EIwNa z^Bvn%HCsYsUfe%V=t}t7j2#R!6E+EWqqYP=$jE&mp{A7RI2sKgTX0FfReZ)365@~p z0*RU~MJ)vp0r*!N}~WB3wH8rU6UWp7B%Vw4s}7*wRB89Sl)6XLvKMq9 zWr;;*i^5IuX^NP{hSM>=;$Ji1iWH{1({EGn@zwPm+RE0_Kf5`^Jo0TZhRpbYKR+*-0@gQWBx+f{{q;+=PRy z6u#CWkmtgr_`gl4v9r(Iu&~Ffiz`YfD@(&n86>Fd+R~6|qNk-IrgT5g?(DpRC@b=W zolPa7u?g7UU^Vvj}!<5ob1)r*^al zlzsl-37&mFwzXs1wr$(C?cdngv2EM7ZF9%wj_;mx z?s@p%i2G0#{m{|T(NUF^o!`t))_eX_&eYrSb=@g;#xZ;Q+bVw9czb!W=gJ1}=`|Gh z&V(v4Z_eH_Z6Y+8RE!8Q4m+VCgP&uz1zLw2mYAOO!@Wz)eMnr|Y@7n7G}@y*hD`7E zf>Luu8NWx(-z%^c@P&j^C^HnvZWgXdgM!pcb&YEjFMv#Y2BIVnYhV*j2VEaJ9}Bx$ z?S)q}{$h}OaOH&E!-X7&PdvSLrleJzi{r}e$BkO7jF7qo*}p=_*q-T{?XmW+rv3W0 zq`0<1iJ4ccZh-kqUGD_2HQcb@Fm7J&qw-EfEgF-=-tsI*VHFFd#5}JyZkXo6-*_+f z-k0MV?~~&OdG|QG*Jc_J1TVNXm;WPPpfp`!*6fAY^&HHc){A*er#ZZl9SD*uA{**u~98@c!z#*?esM_?SSH^uCI`(Ei11Ulr|! zVX&V@4T>rb_WE8IpXLgR>Iv{=^Yq)k%o|)Q+R`!PACSXv&x-tVoq`_iG_*J6(YC@# zVL^Zyu`Uiq0f~qtQc9HO79Di4UAB?urf54Aqc;g^OD~S3(>!U!t6?N31(Swq7!9nW z!8%x`7RM|NVfG}WxV^_tI_=AGSLp1skAc}JOeAkJ?3i+I9xR9YO$ONi8x_Gh9%}nJgBb~VwM8>eSAiYHivlKxZ8>lUB3WpH<=c2w< zSL@1|{V_1PgA=R!A{$QsS-)3$&p{S$3*`|Mf}n|zX~r@%@?I3WSS%(zzy&uHZCzVY zZXCj#@7=n}eg6Emh6A8u-(B*aXT7n%@sMQRZ7NxURpZ*9i(^8Dj2n&lFJs8XPEf*2 zh*yP|;^YNOfFc}T1ZRVlWXrp38@U2j=47%Mj|@xL%1j0Qiens5`arlNeCwZ`FG8O4W~#@ zmlbb*N1s-xeZD8oUjsa-q*Ug}f1yvuBibjTn7CI?G&3J5*af*iZm8U7q{~wv{tWYz z7Z>wLM78+qK?AZ8(=nw$MMe+y;hK~wFHEG{p=nQ4QS1XQ@d*&)y6V>2M6JH3=w(3B zGA{J~YRZX7kH8#h@hBy+!(!a5#0`3Nj!gPzrf?!M&OKsj%r;}im~RJlFBP+9UW{Cx zfcAN=aMgw#d1Fjhf;~7SscJ9B(ym6hlT}P>9pfG8vj8wC$Dp1Z^3@54g^Ulgo1EY) zK0bnjcf$tn6*i@DC3#2Tos|@@rl$n*Lwi#EJyx6O&D28_GyHxO8<$b;`j*)01 zF7kc6H~DJ)t9D=H4b*&kpNXeuuJn>}dsIqP5N1>)&(zJaE8mIRjc_6Q zmdqUin1DEOHI)M(j7(Vmn4QW$PqEH=%K@~jU@l~9VJfIviV-FyUWC|2h5fZ~A!Shh ztzf&C_)qK=?g<(Jr?r|md+HT7au6zgHb3`Q*gTB*;zN%Iw12L#J>`#HUgrimWoKx= zwx_47KC``PbH}J4AC>GGr;^*jPgomau-sbze8RwRqJ`b+`XoXtrON?FFadm7XuT8en z_Vx+YZVh)Jve_FbarY6;H?77%L{A7 zTx)Q7RzPv((;Hj?x0hfVMPRM3(K9b2cjeg@27)uD<7vi1*_dh4g1PXsvQ9+P4akZa zla>#KgR4*S@+-U#Z)R?<A`oJl@ipv(COt+3g|Z942E9DGOV;R#Wye zsL^L22XRXw0vP+lN^pb``XQrcmPdQ0Q2FMp>E?N3)G@7`qQmz<|8d+_13o3#3Sjv| zT9V*hhzI4BC0|mwuiM1;lT#BqVTe6@GwIJVe0^pik*d$mzE{qTU@^pu z{P~&7pz}!BtA+)1+ffB)8P=``VG8;F z61L=;d&8KmP?{%*GR$a4jHK|wU6vCBlCSdiB7J(Dl9-lpV(8z27@G#IniHy(5*1f` zlvh6p@F!5<4+!R{O1$UBZCRfSJFVYNl+5Tm_;Td#3Q_BN8if~)Vj&+MZvg8s9$1yO z^FX6mSB(ArSk)b=UR*piU2{Ssz^NZ+ue+O((1pwP-CR+%VTv@JbRqE10Pv=NwN?Fi zoccS!lG_uAZu6>c!E~cpXZG0OA5;2vXNFGzo~C2Mf7k%^a)H73i%HqAeI@ZOS`=Ix z_MFQHSGc5y!rHBAv3FV5e?=6@UO%J`v;bafR_dwv?(Zd2*g#l*m4gDPluc49?M7`E zu~}b9XwbHk)VhcXxhwU4#2R_bG6v{>ZTF(ZmCCcll{}#B_DYq&h!CnFC32V zBXGoqwo&`zHDX=8YO&7u_Au+aY8AS%&RzNw_P0%nlq-D#3Qq2f%vA(NJzl^0?rwi* zE3{70fY=jRC&IEY z_N|y<1bhJAK2cGnK8%D+VW+19h(gJLR={ULqb~*mRu%Y_A zALN8`u|*edt=Jd;B*N!i90owD^khVTeS9fuByC+3&V6OOrpa*dP7WZb)*sAA%lKp_bT@M zz33g<{I8y=cvH1sQ-x;mr^TaY&JIWF`{N6}ysI*~IPq)%M{+gG`O5PMAZ^@*@?qa* zU8Ttqj1_4UWeB7g-_!Z?Rq6wQm`ErYMMyIF@GA+8D_x?m>|?F<7SDuG%&J|l1Q}t0 zF8b5XY@ti~{+okx7heqi_!TP_ajSM1)_Y%h$XN}~8?CQ4UJ0bh25hZHwl6^GLR=Oa z)82<3-h|;!5{2tRQc5-y(4@S*-z44pEy3MXn*uc;ZgE%(R4&FATU{@I1q+EfAs@TJ ze43#XizZ2yM|fC->zT7KZ?riAjm&yij>^+;?1alCpQ1K~k~P9kaqS9~G>T6mE}6^v zBDH@+XQnuNeSw^zXdh2(lV+MTyIv=O9_iH@Qz4_56&eFBZ5SyCphCa#(pv$IS2LB8 z6k3-vJwVzartxea_pbV^(I9_tdw3tpBJhd%>|LTNf>5b<0(J@g8kxjN6Klibv@0gn za#xbTimgcDKvq1>F38kMX-ikNDzu{Ett#L+}$rPIM18 zBep~@QGxB&NW4x3$Va*Of-~EPst9BwuoPvaXeHkTKn0+=>53g9z>*B`RnT%mhx*9G zfBoIMdsYxY{E71vA8l*<=IVJjxcl{kXj;fjjf~*nf0Vq&F{@#?{L%#dSQc=g4pii) zcOY3<>HRuXw>q|V*VZjw$A`Uf{!Gc^QDJwMm~$C_e`Z<+AaC3WDZ?+)@eV^w%e@`J zA2~f7!6Kz`aB&K2d`&ROozdGBgi?FWTV6AV>|*1o848`s92sX-m0`3f{T{9h>9tt| zX?>(rl&fA1j^j3qw9vN9LUC2ExzlbY;??j=Twr^55+YMq?5*BM5xgf-A^+BV>JcOqLZo74dYj?=DgT^N)`*{B`_5FNV~`dslLo z5`Gf0eXtk_A`nBehN?t+ef0Q|h5`eRm5^fsyu!KjZgffB$rhZo?bFMwaAswOB`y>X z*9hCI@lVfs;6rqV@!N_+;W3_Uam~2?U{9K~zNmBtaMMFH_!uMk-~|uQ!8K9^hww3v z(~q0yK%*KeFbN>l7U3?Bzo1GiaykuCCKfpGD1-@R=VBIjf$z)Me6+S0Fa$rPm*HR2 zDBv9(B(uzUEU$i$f{_iHWHI7X=;9h=JEI4;^D#wq#R;{_8~%7>6_1hLSQ20gVcK1sQMyx%5I47F_E$QdschGEJO}p$!FMmIze&%*K`&-ATrc2lj zu$sRglV$ML+RB#Ye$L@l9gaA zcNJjM%|y{dXg=dy{v+Y_mspbT1@M?(_*}eNoL6(UfvGWohX&0JW@aCKxzzG|!{z}^ zXj^1I(A+o)E2GTHV zSX$I0Liki_Ds_~$FJ_;sFjVC#4ej)XNV4e!s(k=8&j@tzX1Nxi0I8TXvI2TjqP z;Lq8(p_Lj^{2MqahDiszT=Z~~W9jeBb^d`*&Ujr;Bej-ck8*UHCNNK6_f$j`HEmV* zUnMGti@`R6#{L3XwKEi_J^j5d2^A05v}lS=O_^_CQw#UVjNJHClZa z{b>F*y!WuP)X);YWpeVXxDrDKMVmuQby+o~S0pVlcI|(K=|CDTx)7@d@G=-U&pnbo z3InC-B|_vGzytiAUl9r5ZzGvXZ#l01j-s5DeHj12uwD;I!8bXQ6tSFrM07M5* z`z;PF%jL3=@@I7iqB3J%T{<#cExB9{w&vUU?oPkWAT}B~_^dN7>#2=SHfr(?bH_kz zdeNOPC(kW7l^!qjC;?3XvOyGS%vdCg7O?0?1VPsWS!RW<%81)CN1V%HQ^&X*wkb2xQ3zb^kV$NGVh#Igf|qUJ|)%@1|UYHLZ8^Uu)X= zv3(WT`kHh9`JYR^E`fTV?v3Gr%Bq?E^NDyue_1?^1SJr&sfNWLW+=N!VTRw6(-+oi zOOIdh>99I_fZgdIpf~gEQUlCC2JClqKsO#WX^Qb}87}!uA-~N1fpD(;X7XG5h1}q1 z>J6dEvvtj5k{#bQTZ30V2j2^iOEE>3xjB@~%Gu21h!8Oaq46BO-fEtw!Vv|2?k=9^ zR%Na(D?*1k(ndV2LpTVkxYe#)0#m9Y3c(&8kC*ED03z43wzRH2C*_=}rlI{UKCges ze%T*)4MGb;!;@(4t8hpWhf@zo`F%L@t|uR5#wCl*M0Xt^1x%}RF`w}KO_|Kwh)OvX z=d^KV)9~&<68Q>+U+;`UQ9TGu6Ag!Z(BhXXW00a)V&JuBsoiS|{^IoA-&`Th`kR3W zi*d$s0XVq-ie6un!~%*Swhz=VW3juB>>A9UjZG0MA>HVBuG5MOTG1`a=#xbkJ4cKY zUEYYhex<+UJyf*bg7(nd4{cR2K9sotPo^Ms904}NlUcfVhZq}VcxpL88sc0_k^@Rt z_?~AtA<4`Eu{y`%5vAIp+-E-kF3G(_wxR&W1o-zpMV$I1wgn2OLldZ^Hv(3FA_}TY zWuPPylxpG^N+Q0TVYp!eE zcoThkuh&+CbSw%l?d2^jmWX*6SfCI3Tx?2@LoY2+n^^@$LgEv<*iKFlyK}4S4d{u_ z02T0Q-0`(uRZW{#yVn}IF67nk;y)+7c3t?7B*Y{mZjlju@}TAvgEG1;LjGG;*2KCF z*CZ+5R{v6vg+4)sH#41|xPJ8Cfky+pxE}K`snepP6bcRz(JI4FIV9(rIx+0ZM?+7Zr zT~JGSAaJ&=)g=xubE;oYNoOY2^3=PuXuiGAO2Sp;^oZgh78s(pxr%N7ShMT=06aRs z0w64!h7IxyyN&PQ=-=C!}jXs^WDC5(^AVvv7 zHc>!jqqjNpy=El&xwIw6IqSk*fN=tXqpo2#_%+ zFdi|~!6j@l9b9uN2gPIY!(7+vEqu##$@v4TN-?7x#XA2aEn3#sp*(2CJT4C$ZP_1s z_XU5YJR2|A6lk!>T9E#{6qzF6e(Sq4?az!Vy6b-iES}^pNFI*L*n3_G;7iQP?yeuY zii@Re@}+EpUaZKukn|vF!84Ua?gFTopzrdUr5 zV#MZTb&T}rzv$~N>~O9Gn}7fYzW$(DQSSJ@XnFZ=ae&nrSlx*2@KFY=6HeRU_hzis zS2TYlxV_Zu8R!FK9jGw3GHA^Br-Vmw+)=Rx2{;(F7c1WUjShZn9``bf9L!Ue4kuf+dTgJuHrHAeDCJU2+5w<52G@{4nC%6PWVt|WA+5uiiTnM^av3FckY92 z0uA&8DxiRnExSs1X|Nzy_3AN#bf3{88m6-bdq1&M&76(LQ?;73^UtJM#$Jqu_P;6n z2KDDVgFvyzu_upKC%79_ouPv=rfU7rw)^IqK=SxzZ z;+g)2;;zku2}0USOunPBvzBg4iQbXgmC_i+4xg#$)OZQ26UaG}MtcJknN0cV20PK> zO9y}#zosndn0>_?-mFavd20J^>y-7@fP^oQI7I`(!=z2mkyv&ip~6b(rR(U)N<3##9sr!1mVo4MO!*f?81|cI< z9SbC_Dohy%avSB$4j=-4SmmzmLMN_M1SKFBu@@V^>Xn6)1_NT)T2s?%tf)*8V-nFH z-ZB5gteJpf^J$Y%7Vo~GqCNDCqwAlM%VSdLA0jar+6!mgQcU0T@UZgD9t)zn`vNQr zJizs!fApe^nX9S6*o-d51e^D`RqVN^o&8v?jI0$}P4Ci;XxHHMmj=Ht?%+b{NV=0* z+XmYzC7qL4*hN1ygZ%-hs3T;d&WXc%BxF;P#u0^BQ2jsFh|zlLeSOvhLzwL?B&tR* zapbliHTWSZy1`3h=YMdiya7NEHH5g@*gzDpyWpIS;T4YOpy`dIcu9Dk!n4;d z7L1tL2uOU&QhGoLvJ^)?u`=sm-`p=3X;TH57()|L7iq87w2ZL(zY|<=%oyt|v`W{N z>|kzWPxt4^;zbLfBB0F9ya(N{IFD(ei)l~~+Y=1wxNjW<{JjNye-36&4FG^IiHwP| zYK7U6W~5l!^d1yVDoc;u?}X}+m5vH>8&?#onye9?_0z_z8C$o$pL8I%5Xcb@)%L`O z5L6xH22vqnP~#8ZwyV$@TAOCuw#MpT{z_rF=q!6zJm1@%qb^9^3=pe0+m`JhJy<18 zZ{JeV^MWaRImTa~zG95;N`Ooe1;R5}8B0S~8-GT%Lpq7j4YTk_xHkSi=KW1zV_j_L zEQ-Oj7)L3TLRGiJ58kJ2(tFeB$?t=eEDeXY3fuL~#`RhS&RoL4?<5@S=Gh6OtR?r7+96+Yl{gcI?CU4K4 zksKs>^A7@>-vz6I@AIcA`MnTG9zk=gYw=54fzL`ckavHq%y%l%I#T<^;b4Lpg9q%d zcLR_VSlGB{Zk!^%1EF5)JhWR+1EWrI8A|>(IX>dr=wa0DM zg-xiE6o+^Q+}6OP3;9hwIFD zekXWKBQUd&lpdaPUa9uAnSBLoOSk(iN>j!l^)K%;k={T#aX@)StnyFeWmW#3a<}1W z=Zd8pbTf%dH#FxX8#g*BN2XoPMpkoI#g1LT?}i2*{-SQAWdKBnm)@JR&ID>|>Ay?P zK+=Z|<)NtO(nD;&Vdjw`GS3RR7z-%M^2MucBL0;uSw;T%3B!wxt=eV!1u~j}SdBv9 zNXs0I&Sqz059po~v(TkOuqM<$R6Qu`MW$ydDTB&oxFfXX&ozc>eS&dKwFy(iXSkk@ zpe;2z#YwR@*#qiAzC{@psyB``gNa2|TYps~e}ob*!L82y87>fk40H3y?Z&r!BSmP4 z;2Pce!gQVdGE3cURmvv^a5@h`&CgF)cR?oA#xkdxfBk0Gq0TdeRBAVqbit-<;WuZjw8tcTm2Je)z~)$xDWCV5uc^SMZM6Ga ztgR+%)K}Qi<>qR(luEphK@!Gz2PWHJNohzTj}gI=7$9L&o$figUp{rCZ!LrqTGIYl z#=WtFK>#dIc~LXLHck}t`KQw}b_cy*Eog+l}1nNU6q{ho# zMfS|&XukU4LrxP&s0l%N<9ss*E8tlgpfOgcsSS!ZUa0QF;hXJ`7G8(J=+v9@!Vm`d}c<(E(G?N2H z-K`-ky(nXEdXG0Eisimd>*bV58*sf?(?&+M9ieiQkgMV7TJ{z44kr4t#lP<7-Ab}J znGm6krWJ&VIopoP;cdlT5ash_L4r|3B#c|Yw>=DVw@~4mZGBKdS6)2KKCKhfX_sXA zg8{XB5`IYsTv=Vo42EVGQY#iTa#3wz;c(1;K@F3QNm9&{1w8|7OFKlQ@L}i z4nEZ=Pt5BSH!XM)$Dc62rLdK@IvePB1Jr4>hjW24Kz8Ua4(f3@ z-4|C1)Rz3Z$qQ5XcvodBm`*aOzTz1x=W&#tCJzjY_LpfrwP>BQ|jyif!t@l$pF~<2jDz;j&%knJ{%GYUz>_FoNq~~ zL7W65kj721a)`eegdrMV?<1epX@yT=;)Z1{bi@RDP%)RymhpI(=Wvi_XaYj*rkt&;Vg4xU)6qn7q18eS!mTF@Fx@GtzH=RmiRr2VW*l z)(Uc(JU5`^Q1SLJGg61Q?t@+)Y4)Q-u}>*o_TmS^^fCu9pQIlIm77j^m;7@fU~`yJ zOkQe}bAQSG#)3Ux9ABe8GBxy@P3dCnHCUerjRms-V$re}CD93;F)Y2vDg})F{UeK) zpq}2=Psk2Ap_3B z%YYw$Ht@pry%V7W{2YAMI79}7)xIyJI~LY2)10)rDuCMzj5d?j;iynp-)e?;o=|A& zh=F0UM-WGZkF2Mw56$}c2l77~$BB9-(^5kM0qwK@Pj5ImGE@{m=Rk?xe+@TJSRi1q zvwzI||DOJ2={OvXqL1yps=z%dIwaJxam4szNc^*x1+E(ERBzQcol}ve7o*!t`CxVupGPgQX>TtYx55-D ze(He4?RS1iBpxY%Gc)O{C0nM#@x{xw|NCo= zednTB{-Aq9!IQOAHbxE@-ArFlOMoP6dF9-5$zn$!ro5j`$HBcxi~UoY8Pkr3*3hWn zQ|;r@CoeH05^i)8^mP$)mI`9DSqa93#?BNAj}51CPJCpsG!lo+LY3miHu=w%*id5^ zj$b>V>#rmC?#^*1*F+*WlhuO(<=j2$?q|Z%{aoFx_ZD;Dy2zi&V#^zLL&fyPYzlO3 z^?jwp0&fJ$e$d;6bI+Yt9KP@8JG-p#O;W1AYdT{F4)V-dAE$em?=7QGu#S`nNqMo( zAGh~O`%A17sR~OOE-K<>UP|$(4%9!KxkD-dtK6z1FQtDU6DSh~x*Bkz3!1_~k+tehdTpf;20Him#&(!jVvjLL*K^B%NNX>n8x{ zu%1A_om|;grIf+VH-8x-l73c5#!jT13vH5Dx(z82gtCY-1O>@{-kz9Ey|{Qe>~a^a zs1@z#rWK(?1qnc6FA#%nf~m;|Qx#4K13C@3O1;Tr=A$%A4J=rvL68S;Wld#I9Ux&Q zZ+@w5+Ufk(=;DmtuT8E&F_^=#XrBh)H~FUE!Ki?|&Z@Hfag-g=91Xz*~F?u>PWlo71gi__heK}_^u!pQ66zMwMB!xJZ`U-HL=aMKt6%c z!7*CRs9Y`J`7u$gG5IS}5cQ&fj+aO+LupQ57zNxC=7fqYg6T9p+)&7VA-w{)9@!cC z<404iYEgY?*1D=CtgA-1#Jr_a&UBGJ_DYdc3=STY*zbP3kIgUAZWIfoF^q2=HMzA85|Y%iDFyRgf=m` zb+VYR1+=%@fnwhxXn$i(E~AN&{KE{WTp0xY3YNZ0*E*tfVLcphy+`svcIY_B1acdV zoQ1f0@Lr@oRNfizrnqY zsT{BD;T*NRwV={JV0Jk43T1srFbs;jF>XIITulju`pI))9!Uad18uBBB8u;+qgdS& zn&&&f-tOODw%DC?P+PB0Wi+I~EmyiPT4edCi9+ngO`&oVE58$iUIe#(HkMKydaso^8UP-D{?Okx06DD^dfj;{l@irm|-Fs zVpMR92om87BNuiI#@jm_h`R3mFt;|zEgH%FS_a?>fA_F=(0Om62_#poSZnj7XF9qv=9i@SbN16FKim7h&`BOly-0C`37rr6%ca#QM7e~k)=cEaO{imE^okH@ldGwPB z>-|^RT6)Mz;W81Ejn>MGcva4-wQ)8sXs3|uSw?U zl29J~`lzuc%vbF|MD!1{yT^CDFk`BPcHXsd1^E8<_jXWFbLVM-8_NEA-6Qb-Bcr)c zMY#~fDGPN1NGmrugLz1HE?*L$l!uKq9$cYTGb1iV>`1rmmz%a?WZRkeL?>Fa!vIbc zJv2}Jr8NPIk6y1$8wLG_MwV5Fin4UvTHNNy^7augATOC&@$a5g+Bi?LS`tPf#Yb&< zfD_-=o3;hoZ!r(T&15*>{XGN-Pst{jA$hiA`pG*wrHK@OYAfE1HLZrsIkT4j5Gwz^+?En+B1&?|+Hj?KSw0xH zavE(ktzq&kUm8uO@z#wSOAIB9B5z-QKt61e^iaJB;^%yGAP#<0I$7|%dk0)GLq^LU zc)5+(FipRy8iuxWY;OetGTJ5DiJ)7VYWx8ONDIFiI-8!mU$|XRd$|lLIs)3qM!Nlz? z7aNwTnvg0Y>~6-gRG`=V-9Vlt!(!8)FyqK8j)8ZtP0t`CmBGr8Wsf7bGDFE(nTE-$ zDuKxii6PP1E!Wt6n71-dL1R$6sj3rdHPnxfOoLntSk5_-Qn^Hy#v~gRKo*(1xL|El zv$&Ixw5E$5eeU`mb}XYd3IdC6Ds`JrpNZOhvzcuoF`r&-sbsFyK+d!+^qE@UXvtzo zAlwRqyZ~}xN}E*;&A<$_=DvMTrH?oWZ=7 zNFX{B3Jrg@$c&`$G+BwxxRQ7&N`+D}l}QQOnmncaZrxh6{kPemLEoD?IrSY2~Z~0n9=Q?u9E6APhmQxN=@ugNA5#Ls$EdquGpui?q)w^~+ubN=t z%-DIkTTE&vJ`*mSw}8(-TUV}Sc-=E3Ug_vLCu%rL1#BZ?vnXQqYUQOTwCs-`gi~vp z*D}?unc^^39Ka^pCc74FMSDxZc?A1nu8xaTWK%B zy%TjkZ>=6mY>n49U^WtgV*8%!;Kq3nF9lT>^DG1mq9i+LPE-=_=6zr3w`^vCFM>R7 za~xHC)k+=KBw7{W0D!J}$1<=8^Hy5ex#l8^ z+}`cLN>qYHLJAdn9&wfYttZQyaMzLFFFUsBq+U6iyD9n|YyK~puGbvT!4HQ}?A^aI zJPscJq?NAbCU{6oB+S6b@2>igTQ6KuK`%;P9nYtYa-n)iOYCP0sMR>@-%lq}p{cAN z>c=SFj^=eyfZXW*%3M&?33He0dC^7tGPR|hKNS@SvsoA41%!Jy1FUqP>KoiIt1(vC z?j8=}ec?q9DMT_NG>mo}X#A%I2V3rEQs!7_6IbC30d;D&9^H|41~)F#4ib{8;Wd4D z?=g5K;+>qU^nTe+J?sN~OV1fk@YH%)ILqd#jG%LlfQ+M{M_!tNA{J3V_}PQg3)`dK z(TtvbWCYhR2s&D#ae?ViMpH`iWjOxucHQapxr^Xwb|yc~(;Pua#r5bMRL-(qA;)$z z_=L)SLX4nltLf$wEZXl8WOq^2y45}Me<%6u7F5lyn~LlAmxG;)hd}S$re3U*; zr|@|VfM4lgx7k?Qe`y9N^Pa3D{!sIFx#YK0iN`0DUd3@M^+1|Z3}{+2U7f8(<6$D>2}Ki7l1R}TIq(vD$u(XzSb z0}}0(@*uuuJLb4v!Gl0}wwm5|2vXb%hPd3wJhR`}S@aZ~$4td7wMwBp|MCiT8)Yf2 zEMPW4%K6t3jQ_!_1=>qApIpK#q$>ZpJ&0;ipx z2G!s`E96$*gIixu^?o9Mgz(PeQsk&501$-BFRCfvvG}=hya1QG_|w&$3wS?Cx@^Pv zA*Be8tS;n~c%#j}q*!Z&)+N46x05X?^0WqG;_B59t3+*n+exJc}{`E(9U?Owz z_*fw(ppMqWA3AP~ey8(3CMHGJL)px#^ig4PW2|!%Hhw|h_z{W|h^%UF3Zboi#S3q- z8Ka9*bWd~>m#BB%Q4(-k|I}zF04?$#*0>cuttw?4$J{{vXh3S+vVPR`p6rCc3g5QS zORJrRTLB?m6H8Tj?UCx(4=SC0IEKwJ2+xiF3Lf~|*5iv#1;Tw!d%h=c0 z4LM2%m2MeYS6QI^Zv^PJ<)*xwiLIE@saR@qX+bk%5!Q9R!gIY+x}f(KKoTxlUfjQO z(+TxZlPc=W?t)#uX+nGZMs|y0p0iF&^Q=RildEpG{w>J!8+4cUAG5th_mVyK*OinU1YjS_!jnf1z+p+!Axg5S;9@yLgWB zOx@f~+$GDkU@_Omr3=mK02GbaawqR!cb@zQ4}*c|Yi_e@n_R?tefZoQJMv9_1MqzI z-_`qJ`03a%H~k4k1xVq!$X?XLH-XUwnBn@71QAXy8h(_u1;AH_b7 zm{B&C`Tm5pIgGE0wjvD8aKoz|G|cPk@NksyqAz0=;K1|-h_nr@eYGl~(DPkY02Ryc zi=Y2=bJKRULs|btj=T`l64Eiq(hT)Mq0#~Z1u+2s*qI&wf=mB3{+|HTwZ@eF5j)z> zDGjIYG95%~uDh+q11*dz+jS}3e2$}-G6D~Zl%gu_kDnA(EAE;zz6ly;b2JdjZE$$_ zsjkFCSu6Dd$r4){aSj*@ASj(M(YZm60`U3$=*lJ30xVRJ98`iz1fa-c_kd2h_MZZ4 zTq)FVV^g>fX0pEa>e{hyjW$ zsc`H4mwIo}VitJE#=4`_xRyjVNh}e(tTw#fc(s818=#^`qIM-l5+V3?MvQR(yw*RQ z?hpC-yHk6Fhb5uGMk=jfwyC^2_nRPR^cZIy(eqST9lF_w0HQ*tz&%cVawF)OoAuiw zJ(QWBfO~4Lk!!};BRw9NO%^_jVqz4)fZ=+FI& zpS0_Jm079VO>|BGUf0C4()5|^TPTTQM&v2?oS~Wi_xPGsMh0{E$&Dy~R_#2oWpa$rJW)9R-+ zWbTSS0>BP;)6>@lCtoT`R>^4g#0v7d0zmxGq|BQQi^Ea$u?f&H74sCt#^WOWtdat}0obQz= z{2JJf4<hmK$_l47QpXPInGD>fl z{Yf*tXA#EpbFw{Bb-FzQd6Ss9CXTTR#25U$@#&LOx65=(4_8-A?hY37)_@o%8x;(+ z8~t7LW48n5=gsou@QL|O{d6rhAL$__ImBUnDr}Se-R0%-%JH9jPgc@woGa~C0973D z|J!MrbMY7KNWFc1gOdf#-g+pYGUFJY;nFG8Jui#u7j({7(Cs!?luTWBdwmV4k{D2C zZB?z|9_wmX8TY=ALwR;5dG0u3x%t(_3(>%M;-DazI7H9ZOn;AF^KQ&Rm9fxq8`#02Gw1yM&T zr86ujuX_Vn^@6GMWmRx~OH?4j04vGXwb}x}qxZ++2|$&TN9lu%v#2IO2OB3-V~(cr zsc*}Uq)0Z+E(@FtPY+;2H^l|1@&s{7$%2OaNaU$BGxZ@pQ09|por+_7T?}+egG!ou zLJqghg2k+BTR|#8K`bcTa%We?0^j-fB^`O}YV7 zZJCe~HSo5~lsaS-Zsr5e#3jl9G*Bj{snVlQ{>eajqEcbU0rMnYg~Cr(wsmQB=lE>L z;2br;V69+-t++Bxq}*lSr7p%6%BCrMJ#sr}^K^_7RC0sxtcbu8wV|xC%&)0NCJH<^ zXZ^%*$X~vl=4#p-W8K3yl566DG%En73U@#CTIwtQZTBe$Ki*+uCRytV4qKJaekaI6 z8rZ$H1(d#akBFu#*_k>2wuloWi-Xmy+ZBFaI})EAl;cvxdSE*t(~m7~EE?<)TW*;` zs6=FRrP2Cs3<2Q)wBD7po)viu&n@}9Q{)| zgVhZlx=scj4Ss^L>CSgH7rNRzu=Q)f238$=Kk^Ib)#oc)(D7+M~Bh=|E~33twL@(|cV z1jS#5_*<;gqx`uaji?W4ryuYUIfv5r`ks3>j)}*ZzxbNpF?_lwp78*RUa|?i3ZPk? z=gFE^VVtKO7d;lZEM@j~Z|N0-QW~piNfMD$A&{$}L;jU4j(YMF{CvwZLS z)y25h<#>)#va9s_7S%x!OIu_y+~qBVi~<$la#QtN_%(=G!+j$kjURh}GV0?%8kb3j_94f?lBi zG&t9JJ_%nSK>s?j0s*lC;Q~1tIlGvd8rVCe83sULrg;PjqW>>4`=74Vb}Wke>;HCI z{*gcx``+In>v^qUjA|M;Uu_F=H8iyXI+MGN{xr*Y;u^1>%o~{yJ$)vZxFI z?QbzdO=}ui+D2Vl&J254W94KQmc9Js18F}8klGmCWpA36npJ0WzDpHE z6WlT!VOWtx(XEzJ9cYgcX6@6CObt2!Q%;s{dbBvB+O5T^ziN$W1r_CL?R-@gU0rNf zuo)E=^Oir>3{r|-n*=46Xod5=R~ap^>mg?p3M6P2&{aDVyodmC0*;8lD62ezZc(5j zvo2l#ID1KMg}$6gd}I0cAJ@Q8m=-1#{`HRni%F6ZJIUl`*tQPKKa(BO&5Znj*=lK{ zGJ~2Fr_!9I>BZPLOWfF{FTdx`bgiC-9AQe0&_?+KKc*({*jfol;F6+fH!_jL1yL~s znN$MGRtVFO)ZZn^*_d3k=D5&}JWQ^V>FjVUD5anj^L?xAcd1lIS=Y{?_ls_+#0+%e zhC=w&_@d~p8OD9*ft0N9w2N|pQfMn|??w&Fr6II*(+-Ua1I5^V9z$)q?i!4}HeugG zBpgGA2s@2)Abs4h{^tZ#AT&b3aSowR!tJ`zccl48<+u>9l7pFG-cG*pqFYGk0Hg=Y zD{v#seawIekUUW#qz!-BPexC=ajIoQK6qt10dTo)tjKBUfhN4P~p|7#t3sPE~Wf&O+z^!`C+kXBNC)#>vFCor&#< zZQHhuH@0nKV%xTD+jg?^t3~a9Yj>+|f4SA&RozeBzTM|JeGY`I74*dr+sqBiN~LQQjKF;GqYZeXzj zwO$`AqdqwhZE878F<|-7=lkrzR7SB>LjPO^!l>p)bux*}9aN<=N7>$Gg|D3#A&A+O zrX`7x>+e4$`@OfSgDL=UO@<9HS%2m5S^Y|M=Kb^)&;rg^x@@EPE*}uH`U_s=o>Zl- zKICQ`oCSXdgXm-7gcfqjDz&-{+@};3HD;q!M8Qfdi)0J{O1)^Txs34%Xg1arl5#p7 zkZ-DY>0|v96jtMHsWR-lhr3CMH4auD3OobAKstZ45(jc3wH5(xCQb!r-ZEqrH}-VT zsomt9)3F=M!T}p z8#+6Ju&iF1$nu#LT-{7kPE0H87UH8DI{0etd6Es5eyG&FU!ni&y4rmUC?Na=1T;_m zABRSQRC#t#@Km)Rex(1;A?ip|%4uU1sr#me-(8)eqmJVrnQ9(iv8hzXQCu;(Tsh(& z9fia|2ABnE+!6lm$|5dFcq4&Efbt^_v;t~U|2Q+p*Lw#jGPj0aZ3)dKv)x8kZw%$G zyZ}P8GV@_U?dSD_zGeVWVYyHWu~2Sv`lzzd{r+~@0p7eqFkM#mdS?1??5UJHP518m zW%>v3^ZhmE(^9@IL%G6bzX+W5#G4!>=a-}yFdn8YpMd<^#Ct=m7%<0BmN(er7*;2CyUM5sly2DvjhC@ zIwH@mLyo+x`aGs4quGP^bE9PG@^bd!L*+-QDbs#UZ727IkM=k>3Xs-htKTHDzA5dt zUHmk}q+Pkv$)un1iEY@?YhwL2=m{A5{JU5EGHvl(xb-$uZIa#Y?BV9q z5M?kr<2S>1);X#p6U>g@?)mkr`;Ej#+^1YE2!ZF#-D&F(osZ}C)F`?_NM9`&k}tdI zt>vwWS!x@wdG&OUt6#QMuk+%x9SYZ-z4K1*^jWBM(q$J#FY6+0cruo&U!<#l zOE?s;-QjXKbl#f@KlC|DI3j-BGPBbX(zkQnK=M$4Mq=Bsg^Pf#K2~F^uj+2r#RzdX`AJ3o(Bu#{stu5y4+fbNQlpeAN`$zms zEheKH;})p@yPHk@jw3ig>3y%^A4ceR6(s6~hZfH^7Qq6{!c~*$P(6&SXg={;2}P6w z0-si@1WQG@@MISrt;~oEO^FI&F$--^X+$aFHzy&zYZJE|?lKgra2u3&*eL-;E{0R! zbSfk}3|(r>WDDX>ExAQ$&4m4^&S3+v4@y8Qa)ebJJX8b=M6te*ouj$PX+3Nv5kSA` zsuvV4oVCEwsYfhkidQMfE#N1t%JIK6IiVw&-NMu1nXzAf=fRwjzdMz{0yp+P97l6* z_60F_Zo|hylXbirr+Lwt{FBb$jwftNI!taOFY8x@H6n)CYb9$(l%GQBQx6X4gI5rw zax8vz9bJ9MCOxYi#SLQ=6&Eo{#wAU*$pX?yWjhd0aF%#b#TIn^JcO^Sf%lL5?Dk;$$)bl}_jrM&XYjreZvB(=KvDj@TLlU%Jf(%$7D)|HRwX6r!l^WE za_4M*sP^HLg%aJC8)F5oyq^azGeOUw)Eud=kVb^Uuwb?oYJki7gF6BMO|61L<+wtJ z$g-CIOD^7t3*pQgql>)al$vLZJ|k-{>$HXdvMyZ8DjVm1amyW0`TWbj~H;&wmH1E)n;C?Qyg@mk$wgMj#4>m7E%mE*dM$o z_0R?+R(c~oNFUoWcnI@q0=RnP=|25L=HH6Q1+qVfGhxQHiwM)3AqDfye@n`7WpB&a zCno0!vfjOIOP6ESQ+U+`(O3+e&ps(go7iP2bl5q?Gb1a{ryCMG)=qQ`)XO7cFCxTX z%3=E=P%Fudf_n|XG$>yz)&(hH1$jR&aiHm;PbTM#p52mDQsM2ADkx^NyGJhIGMhldZ6lLSIZ zBlHihjAKIe*8nFfrR$f5+qtB`B)4rPX8_$3lc60G_n zLOY@9&-eS9^=_Q9+FdE{rpR!6=QB!pU_R z#{^2(@50>$5J-(izWLB^-TaZ-@=0k(Blt7Q`*98UuY0atTJz+C)E_+*f&V9XrX}T8 z$cDN-Q!{HYH+eAV$Iqj<(Qs;^c1E*4&AIgkCBb1?o9BmevZDrK9Y_EMYFlcfS~t7Y zrKYx1TA@~w%U%J+Q^#^pm$sFLasa^~U^qVH==$)~l55+A6L+L8k2@4FWh?9rc<}hP zl{}c5Nccsl6?ti!c$fYhcQTe;&BwCbYmMCZ;Qx#V|mE0_;@n;D~ zrI-bSR8uL%KPh-T9I{#BPOAA9KS4Mn@hjXkBdp0og)x4o^u1Z7Ot^duQ{hWhhYF9* zr+vsH=bnFKtZMbQ{+aIOuTosd_^6XMC>m*8?B)YaQFAbe`@BG!87JNmK*1oK4H&2^ zA|&fFCq?jve$#aFcRfNf#(eB2nZZNZp4kTLGykE7%cN zd^}O{f~Aj&PFvn2Zp4oXu=ER`kzpxv+{fvw)u&2`GbQ@;OtY&iBa*O$-Ylb8MHJ1S ze{?BtsE^=%xDEpe<6_ECVzfUXl4Hz8)Gvk*l{c00RDw)($o*wFIU@ z?viHK?FnslBd!DYIa_c~Z(tA0v^6`OSQ)Ka* zFE6J5+fuJv5TE8h$c4|#?1v|4*46p%{ zk*j-%_9=-RHY2dCN6_*2f$9fpYqld^iPIt#Hu>#bhoecv3cJz5U0bueO8CxLdFz%F zQ2wo7r4CjG3Y=>w%a@eX>`<+^5^XJc65nA5YoC3GwabFFtL+aAF)(OYGRfh33YH&L z83_d)ZnX*zsJDKxGvG%YQNRIJ{sIP#sG4wx{kz!3s1F6Y`L87#)~>EU@Sqc>L-uT) z&`g7jsYett3>O4EZfGAJEM_MNclclIW|c2sVDUlw^<*HM*&5U?0RYrv*IoV%YyOQ6 z@H@q+dnTH1d@0n5coTU;)7vm0u6<; zuy7ji;?iWN^o@9$Q7HG8vzB(>C1oc!z3uU(2vp%P!41rJ|LI>0bYt7kPa|a*>T*lE zG$H4po?~j7INY?_X28o=L_5Hl93N$mSUOZoqm;#S*-o_>oVCxv;@u!ix8^7E@h}Nw zCM`2?bdrII5gTn4$u|+R6j))M#dNwh0?`6s$EjIg(~Ui4CA#k=(Zu{qS`1e-CaBB{ zRc71K8fP>x!A|O;e6!wDuuyiPZRW0_MzX=sZmjaTswji0)E(}8sY-}SOUx^h@nTi|0s7D-5b_3) zt9y{Pg_nEI<~Vx$ChFFzEQbLRo8yH$O9PM=-lk1UwjP-iG9%xM5vLO7&bXH?P*kjB z{+)c;bh4WQ|2l$4$+=Mlnrz)-F0q?E6SFl^($4KoX2^sVi^}-4ed~NrU}p8_n`??S z%RN8#WsAb z^nH1EJ`UE##!}4ezPEXuIjwD9!#h39Q(*aQR`$4=ds3-EP|PoX?*K(SfVW|L(ElJ9 zeqYo7*B|5$?uJ*Yj2Q|q9fFeEV_YDlV)Fy6|CO{$P|Zvcynj9$vk^n@WS(t*6B(11i)oGsvw zJfuZv`C2Xv_d}o%AQnh^G#Sfx3?xDv>X0>#NE&Fswabm{^7wSQzcF@nMDX|gMpDIi zL;-ZUz^$@;r?4un3%GG!O@w+2n6|!~_=bLEYG8})aSBwA?sfdVqNMd9jj6a8E4Fmk zyv0-#3s~;C-G%w$1E7$7zO@+&TDF~8#ii8K{3h+2-ttBr$+xp`SZWP^7+3g>R<@}c~6?M zGdU^^1Z0^9l6rT=Ly&qI`ri?v|HS8?MdkmQX1~nVaNB5Z_S>1M*}WIatZrrlHndK3 z=B&#+Sdyj~u$f6j7fmlkE=y3h&JF$8xPc&BbF2~%fH`7QSzrn0wD#K#B2mzb)XX%-lnoc5;54h&-{IYQw3poA?dIbWIp|(Nl4r zYI(UH&SdNQ?O~&gVdP|zI^LRSTFG0rc?MnCVpT}-)^1EzqZF~$|fT{a5A?{5~oE=t&Y5ts? zCdBvstt?3m%x4S)K{%Ii15>fOsu2Tx*|bCer4!H=HNH@S*sizxt$!@L+?h;Xf4DO) z%Y;N{WX;6%)|EF`n}HGihDQ(G8x*%-_uSNN66+-s_jYIDu5Z1g+-#GC?V}!aR%IQ) zBzmkyTxzZkFPHFD8!alk5r?9fIA0Oj7$BRyg%p!2o$}zU?>c;ACB((+MJNP#lxDR& zIeLh#u-hO8DgFAb_=~sH&xba#izVS7DEcuPYcEwgj72jfzA2XYvL&2)PldzIPtAbhF_#^>ujt)oh&=?wG9F ziL?s|5(Y&y%X;0t9DLFflXH<~kT{b(K3II^MXisUd{A#?#J^vWeRFNOUvOCY*bN%T z$WrMZpWLz9jZA$V8iRIT`z!dn9zR4tOAde&7TPjPVI1smI$js)afo(hCwMS2sy>I3 zk76@x?UU!qO&2JBH4vg7UE@BJdAVoKMOQ)FesI~on%b*+S|`Kmn3`zn)(U0>CO+$?BiQ!YM>XmZ4^W&-ft zQ>D);Wpd(CAssnD(q5RRzC1eKOvlbj9e6*_)^ z9M(F7dY@QUCgtdN+tR%ard~;lx2zEheLjA$kF1663#P{;bJrm^Lm7;416T;1mMJq=jh1fsHr zO{Em$QUiZT(>Q`UUQW+C4C4Oo7!RHssb*>D%g;2u89CYR=Ja86fBOb+ynC|W>O>l^ zRxZ5nsrHCccQ4A!wX2?&IqP((vKW_e@BFufa41B3ehTWO9Gr1fl+{-$6kg)c zY(eoeY{?luPeE*V3Xb62;0{#X;WM!tNAke!Ed4?v7{+M(7f(TmO#X>zZ)#3JlS5Y( zHzT<>pR2c6txX!uf%(sdWosdNv=Tf*Wu@g1+G9K(j$(8cuylWPg26PSItJ9 zQF?B-&Lvh%SFPCA{cCf}m4x4B#{{>}-0Gsv*+EZw zk6Fme7~yy(L!(r)w^eOY{wgFLOwv`D#mjHaH&#$KR?tBNvzA314R(S~qf`BBZ`iXe zFt)}5>4fdc7;XjU&wc1d1k4Cb752bMo-r~6J`-@+qeKPCCg4fDhGfr;Q#KWtA`!(*Y$f)bf?J<;3qXD)K4cwE1`Q!N zTz*~{DzU+coGcIN#wT)_{Ohwm0UTY@G72{cF!=k{ohBqVdLU`Iotq!N->_j_V9vq? zu|o~;S~M*+hIdqqE3kN+6PU6W@Ey1$-n+ld4ycEI%EQDI~gFmVnoNvzJfzYi6NHSX_fqR_zOb|zoHkI=v zz;i!YNZEt9xCQy_^pI?NjP044iyQy&8jT-7%*t;lhD|93#cdqtGHem!SPga(V*y=t zZsLsXc)S0a+IRQRU`7uqrHIgl9+3X;AJ1W!|-9@CH=F`QX>0jd~r;S z+3PCU9v#>ZTARX}b`M-#j7Db~T##)VKVwDajp*v}Z%{*lDTol7$_ac!V*5-@re`G} z-=;pYo_j{wC3$J9&8lAr0f+TF>wYUw9GQ7VY7^X<6IpaaP)fml!bMlzC@B@>PSBCI zz?3#^3hU-{)sBF9n^LZ--ZQ+Tcf=1PHfc^$GLprV;Muvl^HBv*LXKj7T#s#94$7M{g^ppo#retMTCH^i{_UXw z>jX4kk4btRATm{auY9YDRtUr^Zr7BKxMh6^)Vn$G50Vb&}r>cUMvM*p%;J-8UD4QJYRY7{*8d)8C3^llv$+pH<|GoJiP*}HP3OYa zliCW?4MvxQNIWv`WWy1nCk{B))H>%ig&$gv7?YTPn-L6RS;T7JI7in-EtjL)> z%}x5NuzfVUWYS=o&^@f6Lave5=V^cJ>)u)m6u>^i2KjOGxsDt-mWW5`P;WE~zp2lW z)|)$}&l9U1pE^&Nf+IkBCur}dh($w&GG3P^@nk2L+x5ri!O;GF;ta6RxE8x0WmdAa zy(*ctsk%Sd>_{eo4?`<29z}- zrZE^kwf{RVjGRdf73Ui6Y16BK6j{G8N_dme1tD%b3qQ9=_q_1g#2>SNj27n`EJa3h zfaZWrE%->;eZZv}#tg6`*i=EA@G{qof})h3oe>>r@za28 z<$1yxBQq^K)n4IgzziH!?%Mcn@PRee->|Y)+%b?AtN^g+h=P8}bd=1WaVIDY;^O#z z_$6A1RX5JWC|Ba}d$o_@7&}I*v~(cf%9mquTXyPgznx7fdV-5RXEEBcnn`7Ca@uq$ zo4U3FWhF{wiMlf$ySZZjg^xa$=?xY&-5p|_HkhJ_a8#q1@Nxq06Xj?gagfv>lYy=V z_TObP7jJ;$yD4ZM>KA@@WUd^zZ^`*ekAl5CoPo!Y@a>3MH-tn zRJv6ec)!A0cDews&&$oq1?c1_GC;8ZTVoxk``v;J;key;KFR)X(9Tj+bN$u0<*UY< z9miV|MV9CIg3XT%4snwZu9jdD2w#j}jFKiLnKS^2nXh%^${EH*^beUe9c87}CVJ7- z;=1=axp}8&IG0xQo>71iZ~J@a=s;O1*Auc^+;mR#v=bC+ZEpb6Ib$L`cNmtue^PVE zAbbU!ZntNHFa5zOIMTxTN_qERPqZgE`9xr}f4u#%9Gb^|nkK7dsZBJ6Me(X^7iA_* za|ys-mEqegN&7`i^mtH`K)vlQ4T5k{gcneuJ)!QY#YsYFS)bRERd5dVvSX(|G(^&V z@2mPed-`@ld$R{x72c+i_TBP{?O)qEuGM9xKRGgezdz2mgpm+pZHsWfWWUXd2s9kU z;)>nCYAo2c^LQ?wVrmg(15k$%!{!6> zwQIA4I3yjh*-XT8#yZ0^P?4axyzaQJjFW%wAB)z_>|tTE>)#)dy5yMY6e z=o+WG4nq{I$`&czBABBw!E%El)$?+?G!T>rkwZU}>XUbtT88FNOn8 z&&idcloD&{<3y$%NsH<+(*@r^oWeD%|K8qzJv=p(7N`mJsywxjsKIqS_$Zl|Q5^jX z9Jr!D7#*dd?1>`BRgi-Re#mNaX)i!=666eM{v(xwuVf3+S(8?EX;Zc>ghqWe%w4WK zKS<+TVODp)x^^6|C4e|ap&CXA>tNo01-u8B(PMFh97I)ayIZD1<+QQAZTmViK(fnA zh~B|Xf>HSpUFt0CHZReAI%oohB55G_i1DHxL}J8mzK7kLEc#2*HU}Z`?F?fT2sEr~T`6ZxkFP+SYZ!nXdAdck^7p{_LMlZ`Ahm{=$x07T8 z!Yq$;u->k>1)^#aTB+UG%_e{13YAzaq4 z;22WniuW=J_W#Q!7J^J-0h-vT8 z!+{Js&9{KG(m}M&nZ)~l^ z!oAnG@kwtCBN#{yGX&t29x2E{8ePJVk)J|M`}w=u*D2NHWw(M;zj!7pLk=2fv1;ns zx(MD`+tFHyBI;USiq?s=G{fVyiU)aEKasfrEjjIwvHQGf-1p`9YvO4`_ihm-F zurKMdDr~Jr$3vP@2*y3vOcf}iZK4bt67|(IAkb5;qarn(+ zRZOD3@8rEZC@kk40($!@=;S2RY%6e(HIbThdQm2nuCWF3B% z+k843#4TOEss4W4{wEhU_>Z`k6ES_80H|ai%1qmG(R54fxc&U>5*hblI(Ol(gbMw# zVHfpyH2h-#(rJY5=!pr8`8kaQy+ezRyoL}>6SlWKapaHDjilE`>(bN91NHIqK(G=i zyqn`XIRH{Nt9e-FvR9Vg^ADD`4Uwict;Loe;MEa58ckzQ!ppVlFVDH(iOK+D*sDvLc>FddvLGi)*%Sx=( z_v9RMr~N(O0bXV;m>rC(%)$gyX!@kjGSzF196;2xT!x?usR**WPCBNHZ7XSmb$T~~ zGYissw&wgOjo|X*IlmEq2)^xc4|2ofvBz9%FiBNUlL`+L0ShhcbybLDho}PI#Q8$s z=j!}=J_YfdX$jY|Xa0J*d-*h{u=ai`7k3Dum`23F6JcQ`W)!#hbuk^)+8+>DoOA}A z2S7k2plGh4NIZ8;n!-?^z*LoV-3*>YI0zg%dAn1PIGavHe@#h1hd3z=JF34S-IsN! z4!)he&VJWtbR9Mq`DLSZdc8Ha_x6KV^{cica|cuLOL`|zk~3!9LfD}uW_FT}klEgm z^BRs%usFj(*mXyaTVlxrtQRHQ3?+ir1c1Wk2l*BV!8sKq2 zO`CFD8=tf#NgP)rJa*PfLk~00)%Edt>JGxTY&mC{GD&J?F{ZcdA_=Olm}vlx1Hd_X zZ>}NC8+AO2LoSH#I7s^-$n^V$n2F>>P|My?FgV>qn$+j;@w=y zx(wa{)I!j{tXObb_#0d_WHAk90#RI#IK7MJq5X9^lA`A72s$hq$&bg*#S67~~OI%uRkIMs7R%^M|d| z#jAHNT1+)6ZGLi0foU|?94X6a+O^?g&{i)Y(G$l{>V3sVpmY=elugYt+IA}*B0jfsejQ(N`? zDV`;-TpgvYWVTKx7OTV+2_ifC8sS{b63N#zh__9_Zm=^|YF3cT=9jDai-xG=K3 z@Y)h(8-FKmrhT_pA1!bGF+?8BRx-5(Dp+(vz_p)vQER@GUP?^({jk20qoDyNxKQxa zZh}qmomRA5(XF(nM+!2k%Z&I?NrwlRbNWriY%8na>*U%vd2ZhK4|6wKw+yUtW-cDX zy2^H7w1kh}5z;N5ZrqNnmN!?n#Kw^VX82fO?FUI`-4A?Cq@>4i>T-O%WLqTNv}-7@R{%9@Y{um@Uxm z>G4eZq^Pzim$3YipO=TPPZ0UjRXTFH`}C2w;Vzm+#?zw)g=t7^8QCFLrnN=0&$0L3 z>Aqag@>1VC)sKdikbvavRst7JfKhXSw-)fz!^0WpvZ505l|}&4@+3-ecsvyK4EW08 ztqGpp_(mz;Cy=VvylTZ;`@9m$0zH)@%cb7PkA~hMCOP=Q_(toU1Y6N^6&1^o0yx9i zbfJXt$s8%%ZxU535wdVo!e;?ZYrL^8Qw5!-oB}p-Lix3i1wdiqLLtJ>S^&MV5fk&G zA#M~5;R;_J$x)UXMB7@ZUhALSs*ik-?mN52~cJ{f%V*6;*-Ju{LIGgW!oPz5k@FN z?NnEqTeX}g1^|&6(@;d5AfdioxSV_wFUlo{r{{(|o;skFgkIlt( zf1#mTn9wiVbMta)1U4_z)f)LN+Ou@DPWE$TI2_EG%OAZC(RSQEy{$~^S6?I{ta%tj zX)ypO7}16`WXzS(!v%Cb(4eM&Ir$fM%IuHeI*El=d>PDWsqR>FF|=rNFK%t>;!ihts6 ztW_7^2)YhF5j|Tu`+=|%bxa}?d(Iiqndn6YFfaNCRmg0o)$Hz{Cw-Tn9J8tl$K0qI z!h;TR_l~Fw>qc}?j_V}Xl{bU-%WnpsHdhM95^;UvE?3Th5DhXavz&IGQ|@)-3!JGx zRzBMvuWO7V8vebn8#BMVB`RHfbG88=S+Uqm7y5EYJ|&8@c-#(kT|t~NG(X* z2((m}8I%{iGhzpA*@kHhI;@I1dTX0tBeRG}uB4?g{Bdh~CG^24`1i2GY)7lKX8N6~ zP)IMy6iC>)z4O3uBPd_9(lshy2T1*li8)DFJgbyiiH zMiaYtVI2A@j?2*ne7fFhG-oRwS2VaCepQOZHM|;i&55yF66?Dk$+*!t%3fH+UJ#7z zFXJrjWQS_$Ib=`nkE7@P#>Y~=WEI??|98dSbvaCGucj+$iC%bhEP!PpEZfKudnrvq z5Up5|*^)AGnLDsn1Qxuk5=9bbVSG(R`5oZ)O>}N*W{238*JV)WbBlFu*31BZs4qYY)Vh0k`Ewe?jrvNf9Ge3qbRlc-<2ODN7wp4;Mwx zGgI9(mnZY_m&`~v&^M4WMUvrn`V1NgCv#XhkEEA@z4{r7ZtS-e-x}DrDa&~cG4QL` za%L9bT*k9RuQx78+_7(=oB`0ecv#kod_J z=Wj8n3DMs|XQ9b(h6qi3xDIC76gEtWF719}Bk#QA@Eo|{+?n_Bbzw9Ad{6bAe>Y|B zZBZP-5t?nLAbHIQJ!~M`x+LxZ5>nX5W%**P!L+z`0mz-1@r`aEW%V6#|8GH|f~Wt<8J$2~1C?N5{5U|KcmyioK0`Y!-nC{ZO)z5D0Q1*-Eki z&q>ZYM}SI}{fKt{EXlfka4l;~q@V=jN9A4S;LvQy2z>S%gRlBoe zCeA_jN!#use)E*2LS6qS6~+st0s+eEOcfnv7+; z^S&k+CbESV7(LE&5g)xGmJOoaW8q=w#M{?MVJTRwKW(WQvmsA32+HBY1xh{@pE*;E zS-|O(4t~oDKQBSL&IMDxw#`&7obvx?wsmxdOsVLD(@qxWbKtT!F<<^1F8 z3OyH)C`kE)F`NZCqn52LdLX9$5ISGA)&SyVkj~U^k2*zNga*eWnM+t~0tR1607x~3 zRPlpB-AsZ#-Ic)kTv2= zHBstEcfMJDs2oc__$7nbcDnp76!22`toO-crA;T;HU5n4We)gh#x^I*kO?!5g~gTX zOE$!295QDJIrevg)iK~}P^43ge>RMG;44{CL2EQ~7qc8xY>QS;iPjqxs>2{WSKT~1 zhFc?+W!t6Km#8!%fibcjmeAjwQJsw#K8{Z^iI2&cbS0C?F1KkVlUhC51W;y$n%`*- zhb2oxM>ZKwddh_zAV7Wyo;HGf@6*~#<6x``){--#zJLZzwHvMBkhmR`(wKcKnjQ)8 zsIbG8d2Tyb>!x)LD=~8{KLmNNT8nGd8kL z!Wbmf^*wCMhC(#=v-$+&0S%K2f3vB*l0I4KS-VWJb0GJ8=n7~>!S>fLIOqp*e$QY9 zpu4olDy?7!qsgG7Z)6UCLCZCaQFg?5&70#g(8$<*y)9px5!k{elwZ-k;aPjG<+b>U zt>wF2{-iw(9XK_ent2rhqf9tmQkWtuRfH)IsQUWKwWW~p zZ(%E86qNGyspn0{0K448_QYX?saUoFqZ0t*X;%|?h6Ux*246fv$%J}P6jM+i7jP}^ z%*yrMgkGQPB$9w*VGo*oP=v!YM*=643Dj&|rR|Ssb z4q)neWjKCk?51b=}0KndWft2cVNda4ERH1on@`y_YE($&*N4e1Y<2TdWfz-I4skEexmR-J2f_9w<_6wAOi zYC>fCy|1o$a#>&9QUedKgz!vUX$^f9B^e7f{;W?A$emof{|x^FXg>asEcT&qinMDE zlJ^coB1Fp}7Th0}9x1fq__F2oYzuTi{TYE3gcO6LWq7k44=!>IkUFlMxcWRxO-B?l z>UX$786-=2VgJ0GqVVayoz|?#yUJhPg?$;`_uhbpnto{oHSxp(7d7_*>2nNqIe=f@ zpfqR&OsNHNxhoTPX*6EEMA@cchifDiZ%`ZmIomhkB_@j;y`s`Ul`Ie2bs&tuDF}y& zizQ)Ejgjgq@0eG^_;t3Qa9wFyrCebf^C_}eP7795y4qbbz3@ob6%ey=aIp`?_KoPP znA_LSImiNzimk^HQ9wwwv6iy6o`W6{AAMs1$m0uGu>eAv>@raDUkkY~ned!gEpiV>*IRxw8PSwUS&={(gB@e%xd+${ZNsqWHHemxV{~Br$&6{+z7pPIS#FXHgxjKARigA6WyDo zX_m*s5j#IOhfN2(G!{c0$PkA)Mj=>ffKye$c1Si7cKoiz;*p~*Ec9xk7`kyN~ zPbJ)&I_AG?j>p{~#He$t)N~ig%?&1SR zj-MVP)eY=NhxGagA~uvn?OL>30PY$u$L+ONq8qVKf2uiYqdHy(_QTg8#B6SRhJBKg z*2m}6v}9xb+Dczkx@gP;YoUVd`sh-%oQaQdiKL=xwVAWMBwc#?KAm2GjZ+F;R51Hp?D-F_QHM(=#C>~`k`4%n%kCQzxNYG2=xQ#0a2sN-K(Vx^^xM#(<^Vm*MY30y%yiH{VZEiAOks_JoIa z<=3B+6nRX6rp8sSnLq(H0AVO%evA_}mP1VNQ9i>zP4d!c^|YpQp*vW(uY9IceX{S0 z=lK;x>YaBAJsOMaDV&)V0*q%we-u4QjrV*ym3ZrQkfQkH8EfwfU(ha#V_!;aCQjZZ zJ*lGENf(3b8TJz0U0?sCbGh(4OsJt;XZUdufYI1Dn(9`0QdV*k zvpX!1my(t*Db*6W!*5yF8(+gIrTz?3%z&iIkBb&B2p|FEBz}}U;c$m!p$A6#N$1?_ zvp-vrq_qOC4Q-1 zpxJmj;cJu%5s)9MG*K80bP8nWp&8ariq z$m1{-cM|fzbUGix6DiCj8D}yyuLm0EFz{t{&X!HCs+m(njJHfVG>8Douh(Kr@%K?? z+w2n$9$|$hu*GaCc#e6N3C?d`{E#I#N9tp|;3TZOiVv%NKxI^6_NjM2_^-6=s@6dVq3Qg|i%?n%CL5 zjBUmnKg`KE0WB?rakg+ch~fneF^#fiA2az;pv#~nHPSz<~u-!OQJKfbp>Z`zJJ9l@FHrq_0ls&U3OFMp%m3i1R{f#WD z6z><_2Mnt$%&Qn?OBR29Buuz!m_jepX){WJC{8@J07kcm>l8d_69yQ~&9fq6Y;!g( z!FZ@HQ#A_}7ZLQOzN2^C#4B4o`qc+?A1R(8Dr!;uwU|`sWnHS60+k zY9_DAn_CBBu%>vmWWPUp5+XrQ5+g=citeW*l?Tz$c*EhU=W}0M=Bv}1F(wz__I$cp z5J13rfI;{}Dd+M3#??7?X97iMG`4NqwllG9+cw_Vwr$&(*qGSn#CFo@YFAg=kM|#( zbMEu(?SG?YX}obN3J!qj`w}M#-{{kgGA2_u&%6JdC!~*mtrqvjhZ=2|uzoe^eW#YC zAn{p;yZ9VIr_>+608(2S5I2WnhkF~rTM+TLakASJp2yW<>Jf5blH-cT5(ThAI}oTB zukRC}CV)L|qvuy0*waHy8Sld1X9VB}#aJFs3Tt0Gj2<|hjFPXXAO`_mga-CcmK)W} z#T#s8i}KD2q>6%%tSHYoiUJ$PjESW1iTNp%xB)&$SG6=-E%+4Usl1Nr|L{qi+2yG` z(J#)t)E_uWH;Ce#qiY<(v2@P&`+nFC|8ZtC(1Y8l#oaE8<2e0<-QXB^HUzvHvk~Sf zQ7B(9Jn?%1!~4<+Py^T(H3}*xtFYmtm(lBoCl>E!@(?J)U&Q%mQvNCFG=2t;jur~o z8(fr2)I)PsGH2{#)2OLrXxMabX^2Nk`58aBB4!R-CcZC1u2k1KFUk<}RI}+8szpZ- z2Huo)PvXRokCu(p7p!M`R{=^U8$)SoH30RF#XY_v8Id`>;+sj84y?}*C+Wk`nTdtN z^Uu1jDBiJ*5Xg&K^1w*`Llv>sD9aqjW2JMKLm#DsMmzFDU8)Q}1~p$as#zNKN&$E- zxZ=w;r&l)%_;0l4=)7hh8|)l-R(cSk=O-Taf8+SW`5C{=+^j+fC7}FM{ALmNu$FaZ|m3^`IH;5QBvUlKmKl&|Ww@mTW8j$VvLH{ePnF^%5i@Y+s?w#TIX zfS4~FydKwpWHC;UEmyToTx4w7`rOSu0EC|KqqTA||Imm-Ri{o)#-NH7Mq1ddOVH07 z#;GZ0{P<1rFO%xq##fp2h zsn^}RVM;lM9k4JP+xrej%f!-;xU+4Xj(a5my{5u;=Q?dHs%7j;kt9jB1qG+zX(T0d zE9|rMI?vn~i;qD?KsO<=^)$n^3f-r3=yrj0U`I6zscc;X;LhI8W^((SV5d7{?W8Ev z^%DM9d@74U83q045K=P{Ea*dHl-HKqh^%%`-S9|I2l%OR-YBRWqwclde zP(;hWHKw(C$l3roYX!5V##~gbZw6DF>a1B-bGlcX>d({Cp9kho3J_4A7?%VjB~m4X zjE3kc3s>BiSXd&3r67p~C0vee`p2xfM>I+f0pzdlw3FlM^>FY0dV{UV+&MN9*ohOP zM;B8elO*L)nu>rK8If?OCm#HnYQ_#<%^T($E0tCKy+Jda(7h6A~Tq-l=6NwhRAUy z05mY2P(ZOS6Ua#tmBgnrW)U>xtf_Fbk8dv@7izV=NLrN5PP{9}$^QD_WtsN;MMZ!W z5M>x`jbr3XGxB&6aweK&A(%>e z55i0Bu5uxL_LSv%Yhqc6ME1C?9aUcn8^HbcryC`L-xw-jCrdH^6*-nWS-N?gBGhx# zF|z^`BWYbwo0D-wP8e^V!+5nX<4kAj?>vLAM{6}D^5BQ!gMH8(hxBW+{)xZ}3vVK~ zJ3TAP!+iaIp}*6_YzCNLG;W51Ghg{;&Q@J1BN6tKC6j!8U12^hKlS}QCo0pQQ$QX0 z3C{Gjy1xx8gV*=S_pq`vX}lnz?2~QIiI-C?tV+%t%RI$X&uh&dW&fn@)#yl%KWWmG zZIxZr!=UPbeenga|xun6$1p)PA{bXUpMsT^g(Tgqp)U(21Jk ze|dm4tp4dOaP2m{041J{G42 z6{1h-X-i3dBHo(`9!ajkM&HpdFTNVV=OH`-WAvee+$0Ju{mjX&XT&Bk%s$(vTHe=W zXedJmN!zsbl1eE*9I>3G1mI8v<5_`wY>$3UMmmh1V1yD!+myNS$m*OnhdIC`b+jbL zqSiM8iKJp-^LWJ?^y98&r}END>+&m={Lo~J_1s`_GD756%^TCXXx|*~+9BR%0EvPw zw1=wRSWU*2;z+2_AQ<=F7g@SpMTaM!XvXjvB&FEb^7#ebP`>t!0Z_OH`d;p3S%F|Z zRxIf`1O)Dr^bsYJ1%KB`>=a~XY1{NPC0>Z%NSmCJyMpOfDhvG66-oNFE&$b9{${4g zjir~>sXI_lV(2p29Y@ge3*+2-?!%LFINQ2@8jN!I^KzlbtDz;9+sP8r{3v2jgKjH+ zyIsaNYjY!~(oM^c2$)shoW)eOuKi1mNLkjHjPCwRT{Axibuc{zrx0#`0a1h+D^`pS zN~4d1jH>{>%>lvC4DCvn;7^v}Lycc1xNYo-5v(OP%0+p$fm!3S5_i;wkNOJ}ZBN z1%GfaUkTqqUpiTy1oUy>v+;Fg#JpxW-BBNuTJW33r|pu(iPo<#kFM*#x}9|ujD;^hNKVLsqK_268GXSDd*2Wwt7 z3~NvN8~aT~)gMSv_#@5m!mmRNI%oI2P?b*KIv%lKIx|QC>nnOToh{B>k=Ycs=ml?t{Ahy$_Nrs=;+FS zg-`#l&&AvFDS-d`)lj_IdPYr;^*m_!qire!m?W#t&Vh9b^zQ~v-!vWr=cq~k>_Wlv z0`~(K`}T9Geg3+^XrCSggpQ)ZIFfxEVc9cW8h{AOM-J-wLj+y|j-f&5DMN8sDSSMr z-VrY^`4+m1fU5Rd+4Zu&P8Xl|DHy|`U+wD3X(QWNxUF;X9~3Q?`Px@F^LK0JgXUD3 z(QMVfz@Idyn87~-)gtFOP9DhfQMG+ap9^X!3=tQ5(GMhdwN%`xa*JjIoyy7re$A)> ztN-#3Eq9X`=c6F4<)uUl|f*74PAhbUutl3LdFOvu z8p-e~@wc`WRbY2gpsAjzb6P`AFM-y6Pc2m0seRDpGhgmbySm&$KPbSR`szO{i<^XW>mvA&SqMwDlCjb1}o6x%{-M(wR+Vzk$MDxKP zgyaoih=1P7oz-QYd&?jpVE79ZW+pNnKv_H64Jp@1u5E!KHbX% zH;W-)?Jw2~t`DX4|J~YYh_3)8OxWaJxpSaY>Y|*bc|lU22s`#Hc&@nx*906$k!e+^ zWeJ85@ZnP0B+8(svzo<2^U zKL`bzZbE_kbPqJK6VHAtXo>(&tKd*7O#{;gj6?T;I(u^;_mHaW{{<+}N$t0ThJ*(Q zt6XdY2TQ1Kk1KRAjNt7Kg!NpD?z)qPwO4O_lbZy?R9JOu720j9!n*0CtP9~ly|Dih zw_N6j3|tOpXU)HpiX(|;iI*Ab)jSV?&d1$%8i0O4{ij++)D&JqS8F9FK~VP=nM&De3A+yY1GgFa@3@;-ZNRH zQnTcsXn96VBU8C@rP3F74t`xW zDse4F$W`y(XE|W?L{Vo&a5+-vvgAUct4~Mo=EX^)pDn=z{dMp*Kpe;6yX6@aJ7n}V zDO}%I2o$?m)_w8GrvJCgR%BhjMy|un5%ZGQ%jE505{R3qIzc@TU8EkT`D4*9srj*E zA#&-#05N7*69aGJ08!y!Di$E**z(W$ThLJiwgb%pky-$VLZc)r_JX81Fze_coT=e2 zDjO1`sYSp!%-FU2_MZQSD*Ac$aB?$GAET1o{;&;sW7|u&Pl1w$`ati#M7I{01dSD- zPD$^@-kT5F(7z!1J=hAJ45>0X*)fpM_{)G;Ep?R>!xNr{b6Hnn!1T1K^EmE{g&O+3 zLpJHK(+ogJWJJZTWMm2DT9P3pIXuKQuWIspMyi*78IDd1w)VN*hxt{XPWIfuM)Ec1 zymD0XN~yajK<&rJl2gz;31x!GmYXPy27-wKK~5-$iAkB0&YU@uV*|cyv$6R)a^y!K zrMAVlNJ0382PWWJt7mTdUbnm5~icHSe%@As>V{rph5k}ah;0p%D{_KYgBbiP1W z>N2=%85%Z$^D)BpLKnVSEHT%r$+k{MEE1p-8T_<$^l5`l2f{d~;d%{Pm>#Rw4oB?q z<lGm&-m)8qC2ib#C^EwM*(}eoO zAxx7C#~}C}wg%ey&J6NQ5?WY zJ};n!EDn7hY>nm-J>#ZCH0(=^S|S`55~+z2mPgn~wIZV8uN&E*9=5mSK5JA@YG_-) zPyDIf-|cf4w}e5J{&xIl=%>(0sG41!xo)-(mIMI;>;uJ%*H*;fO`%&DsG(2iejwKV zO%LG!#*EzGnzZY>3B0G2#;T1@>KM@Hs&5j;7~OPoz6>_Oir*Ic{Bsu%=vcK^ZC}N? z1o1>2({R6$REZzy;ig3!bpU+bPgMsCxwQ|ydNAu1m{ zDV6krsQ6!c$tu|c2~*2~T*=IuqRb~C+drQFb>)nBz8$gBNpNpvl;qXRbPr~T$9UYA zt0Gs^Q93@bZ-7?IJA=1r%TU042<*1(#gY^l&@KTl;yH<4F&R`jYVBTf-GmGPWcB0E zufB;GY7LI)c6XF@H;#+PT?0&+@DvmLnloq1vC}$2Gk-oeZ~GYq4f=kL$3Suf(+ zF|$*DZijdX1Q%>HrF~aO*(9-Gu}TAwOhLNTLjskTknqXajuJQO%cgQ?Hw}Y#gn;wQ zUVwvePy!sZ(HxUcDzVPx|NIUHDkxk;MLNTWdc<9FT^Jmz4poS%&;lTX)263^US8sA z59P1#oi$1MiXK)C3KrKrWh37j2nhkOu8~p45=nxvjoHo;hB+ab{Ct!g>>jnvbO+Bi zb+hYeShDww&DT5VF;BHU=F~&^Q&xj)o^3Nl@xRu_(+0H@JznS8FMG^lHK(T<(6XK% z0JPF(GO_*Vd9W>z^neKMBOY9OO6}}JVO!qr#OFNJNg9Fb@;@c0m~jE96J_3E49B+S zZ)^C7XEmb%=huKse6RIko=7Tvuk1%!l;Y*;`;*Mt>=RAaTJurHi+a4rGqx#})&9yb z#mnrCv$#m@C1sxju;@W4H@K$N(RIwYB_04p;Y3PEZ^KI9Z-ChJ@0fc}Jl5}@D?Kd- zTy7NqU4uUgus;82pr!`Xqur7R&`5AeS~aX#mwi}#$2*DS@!BE>fPS^hZnq9I{6-Sh@NT_7^>@&6H?_W!;kv|9BTK0su;&j!pQkwl8@QK%F&D7Q=*y zz_~R4>kZC*RvUbUp>puPf(fs{g`Ad^&;C2Q@|7QuFJrZ8JI z*!6og!(WJqbORwkeTp=ti7Cp!B|`ho5JK*bX?a;)wNZvp;A8DFeZ)`l^FZ0^24NMua%m#Eh7L$U`TyF*ibETDM`_E9N^Z9~0PqAb|Q-IJ`@d z5;#Fdt-QYh$BRYAcp_LZOYW|Cba1uAroxyPUj1Ug5o>$)5NRAlV0b*O!_A?OTF>V< z2gqt6Nn*SwCWah7wf({tiJ8l6ATDOsGL{8=I6pO_p>0;=>MWHZFW%P`QrY7Wd^bia zxF?FJz%2$==U%7~!$%5-!w{RsK#uA{kEYhkNj_J~W%s>nYd84cI!rYMckUlJ@UxlJ zscxh8HUro9XR!&}!%NF^l)|ZyWbpx)DNZ-_eC#!@cUy_M`mk;pd@~1+zJfAg#aIA&!Cw0OP4h zm=H8#QvV|IZIczW)0i6amt4xfK>YI8$@hs*(c`BxFR1tFDBEcytOR|$84>>^2h-dB z{nISUhM~?_YSoc(H>^`gLVrvNXFWjffxDDVVid-i8kEjZOU-0WX4MQk=iE>jr6C0H zcd?wDwHsQ|;$3b~B`XvcSs8ys05(+$O^dAYIo|2%PcWj|3hqc*f@={RPKh>0$a!wL ztv$=LI9wp9)9!&oG-@o%Q3KyHp=?Rhr^*rIWLpd4@m^>N{N5%ysuLX$?iEQ7CkATw zInwqQi*fqbRGVzo1+~&}%eE2F`BCJ`^Rl4N{&+<2os5h82=hm@6Mi_@_B3!Bz3PTBUOq5WBW;oex?yj5X2&F^R zgon^9JMu5^Pqnf|WN8D&--^xM!4mMP^ZV$(S93T8|0!x66{FuDYm5a>u0Z)OBrFJu zE%ed$=nnLs1P?PkI6=3e0onwvF03DfRi9>8xn888-B0(h6-y7nPeH&V)ZKD3ikMno zVTjw0LGoXiZ+hUL8y#1Bx7G~IMkgYJ2nGjkqy!RGU#pb8+U~fBK&(b?>2h}QgabG8 zoDEH;+IF1Y0nDGA4MeLxAw74W6?fx#^QiFy9v0I0kxH>`ZXLQ+fRjN^$d^q?d{lzS z3|a!_0k{m6LzSLLB-^y{CX1j@vGbYi6V~?Z^;iyP4y=sGW@8^aVl;=|Logzf<59(|eXjl|3O)%ZYU>}}gfurj88;*nq(!^k8+W;tm+mjFjUrR#(uk8u>1-Y$$yZD!r)d-W0UX)o}+E>&OYW6Od#efOE>{xd#fE=c|brFW?2}je*Wu3l`)_Y)&bMX+ zU)~N>i-B>*sW*fX!Ee)4T?}r`nu)(=w)*IuAFfXbX^;8MuEtRW%p~g1YQXe3V-jLN znUDlMUA5}LuqVsA&eWq}h}VDw`Qex3(`zK^RNc@v1F1c?LJ!) zSGKTz@nEg2?KY57&yqwF5o?g1_}d!7uaLkNW1gmi!Y(7tgoexLOOGkT+%=?P7kIg? zFAWWBXlCK$NKZ$4;0u;;5^MLg+H0~Y8J6V`=(9VLcw--iP2KQ9gLF}N_R+^{A-AI; z0KQIkrWI$~WfFbIs-CHG^7xd@&2Vengy(HOX3mMngw2-9jz6cX9!b6=adfSI6kFi! z9X%aI1{; z+s@0IA>GE|HHjCSTdp<{Gq|NdrTn*aRyPkbB_7#a`| z5ERgV0@_xPa5pp4h2H-k_$8#p|dzj@V&HH?8(4y?`Y?_Sv ze1zwNa6n1V9yEX3KF?NYC)|nRlv1nSs&Y&0UgY$;J1K7_l()URJ)S+5;^M8};a6Qh zKkKV&zZpH8%NHaBjE;$Uaf$=|zGKvQz;(Id_-mKO85o00UijVJqgfGK-8R|b_twKy zWv>ljW*ITpxpemVR9yd~awvYQi6_d#^Fb^nPf)FSnmnBscRgv`F1Oes+q_hUXvHJ# zKXX48^qk``J2{j(r`{ZGu#kLr6L(d;tksKfET(iC>LwL&NTB<4ZQ8?VNgHaN$|~oR zO>tR|E@0M)%dfW95$k?TIN86uhqgm~oX8A_P@Ke~KoX{jF@lnu4oDjzQtUzS2`f6J+XHPg$qh3VGmrs2kJSIY+k z$NpelRZe$lhh{u~lpdx>H|t_PPvz&lEAPM4dPunlmKTfsSbYAL?3%sb7WKA}jZ)IK zy>K#DGXuaYIO-AZIu})+ z0<-&*{B>XwXDh_>w$D|@!X6}l90damLk*#2X^z^LJ)FN?IlDcO=u%-YxcW{z7ESW2 zrRsz;>L``D6|IKK$I-0%GB)%0(N)Ize>!2c?8jLR`7M|eIc-@Df(zq8g9HxdU;#%g zB@kiAY#v*`oxhtcVMUtNI(y)zuS)qq0$2OV+wh!cHn-VwB_zfXllqB3*kJ)!=!Ykj zhPXYTh^Bgh^{Mtjf*KS2Wa}y02@S$xMn&B7wz}Odx2oR1J+aXK#8DUdDVu_)$|~9g zj_69kbu^^mR+6!U*kH>1@$zQpHlRl&qs5r})8_h--8dnh*;D}`f_jlbu|g@QX$e>O zyhDls6%@uLp0k`MV!=1~hvfob&5~c<9Q{wx*YAl$=B*kxn2X#Eyg3LsY6px`EeSG!k?HoXdETgW!WM6Gd zyYZ8XHhS5nm4Pk-^!u=dhdW5)CV7yu)u#edBcDH3)uHiSALw3Ea+!y3;S zixo!Euy}dd)=A*U)#-OMRLF2sSryIJ1`kyY9p^=^o88Z4ZltgxId7Ttv$ZHuL9e;4 zk!a`vk>s-wCaEs3h@tPdHx8k}3CxJg)7PIn13P)#u=}I}ou(|$uSBs(v!cW+2x&}; zU=gZgZZH&5IjC3;B}M^&+{x6%qceM_zn46e6Q6E+>BdgGsDW}9(Pj1TmA>YvwjH6C z-Vl6Lh!3)9E7(9z5KB{Rq**Jl9J3tl0cf)K)R1j?Kqo(#W{VVHv)~EP$J2IZR*%t( zDys>PMULWVADrhgD;bG*3*&^BJ5a}PMqF3)^@h}pe)SS7*tHEw0!etmICC}*_%&|5LYauod9OD@Gy1Uaqc?#0j6`UFS;mnm8rY~vAwTH|Ka)~h=wYoNSj72$i2 z#9a>gN+NLM8e?*)$)TY#BiV08foPu_2h4^H%9XR;!?u#e;5Y;t}%&M zd;Z&qBit~Yqe6u4LSpG>&fF5DN!AElzeU5`D;YeWuYdtahg1~(BmS)&n$xz6j0`bN z^u9{dzsYMT(MQK&=MCGCsdtt1wZ4DH4>#nNir-z=q_MgT3SSc_?RAMS637S1291h1 z7jwtA;b!-*4YqzzU&4iE_i%HshaSM|J!=jsTxBw)_H5G`7GjR&E^A1hq7lZy+aDqv z;bhShC2s*Bq>N|+WkSY=T@<(!qD+T!y=ZN_^M2H3_8?~5XX4=bD>VOw!c`vY5ld!6 zf#)PCClbZep@6<K)-%~NC7L!i+fh>nFyiFdEe zD;`M^0Rvk&V00TTua><0Hnu*uIP}p4@-KB>O)~@Vd){0<9u?n11g)^AU*^z{&+g_b zLQ@=(9haXs7Vl*PQyD{or1Ov7d$NA>7wF|7E46H?$H^*OwO`yo4bDI%nXk>=7`;&X zWrd(5DXAX5W!i$K8^T?vnu2A_9wu)7K)}Sm^moBnRs#qA6d zn!J5!^S+te8A?_ILAlyww%&QWnv>tjOOpcl3?;Q}xHu*Y3${vNesn!JH}?*v1;6H8e8w)P1ImUso4lD2g$>-SgcA0#6^uV-0CN5 z7T=EEPkvMFAl7natxRT;v@g5xz;nKmSA-Z}+#Bs})cUQCUi`7S+kw7dHo*w@f=dA` z*^s9MDa+hP=@G-%MIS%8-rbXx5o$}Z)xM0Jnik(Pex$sAYy)X6i{P%|gS0i6L?b<0 zBWurwtR#3+psfVpM$khMhMZ12qB?zI66OUx7QTB8h%kDC;?A{Uh^Em`@Xqh&)u0#`V+%SM&P@e(3uGvEh+Iv&-} zdZw|TVsyLSSPAp7T~n3vBq>5(5pxQ)#LtQAH}g_aN_p)`M2S#@#b+s2Jw52@I7DP_7pR>6%+pH*};+b zWB>ob{#D?hbH8M&^}*0k{|B_|35GT<3Vfd~EQv-5xHBpc z@bKbYNtXI8MG6xci5XGyI#5neX+oXz+7@&e-Q8FnsSF5fAu2uep2~ zdwZl+7<2r&U9lKysh9mstWZfO04Q%qFDf{DZX|~nI$S%{80cTC|2^@LeXUmb37}_p zxLqUUgbVO&gz%{EX`MSn#uqdM7(Xbxkmj$CC>`APsZE~TWl@J}=zt?K-F^23BVP{O zILZjpkP6tJ)28_Zq;8i;;BfB~rc04MDeE5BXo<_#Z|EX4+&_Q&0>qXI#YvQ5(5H|2 zR7z3O&d*R>+2~5r^oeZe;0C4oEFC}smQjj?r7E^Rx5Rw4*bLc+7lb;o_vAA z`~?mH3Y`ae-Y_`7kH7L46?K;gXB1 zRv)XL{UTylPmx#)SP;GKJvcSy7m$sb z`8~1VpJD*+o&6nr@w-fzeQLu($`RUmH|9|cn(!?Be0rxfCJd)h4+)cXNiDy&1Hbk) z;D8##)Pd^dHbXxnHd@c)kGax8o!kB#xDM1iDk|WWRG%spZ#wLWpuLA{A*Aqe56H6{ zVZUkWc$(lSw{&(u8+d{sWD|{0Z~q_&t{Q6_v6u=L%q6{B1gEq5P|-df;qZ=u(HyVWyszwsh=kd=;b;s7rOKIG72k-r>hCeNW6< zwOUdVy%I=SYL*L*rU&298IG=h@5Em+SUCvXzS%m9^q>d8wy2`T@j<7EY(4g5J?6{q zexuM+uvTi$)UA{Wb=0_&BaX~0&KtSOdj1PIQ+DFRb;_aAoW2WK+`b#wxG9YqTK}1_ z8)o2d!dwIQC}Fp@s>T;C5hTmvtyG;Vy@>2%F=7kBim_ra`OcFJ35u~)Dra_hU_KWV zcEXbP9*8x-iDO+`dcFhdZ%Vwlhk-Fw5eymnPF>UwxLFJdSgTj?zt(~|{5W{U8aw#Y z(_L`xUXIiAOlT^>B5bIrO~dsF0|K5*4s6J|6cJUl5U#Y7aM-$%CE;Fu9-;HoHkPL~ zP`QHNpCz>PoFRD`#hv@4BSL+@Bo*ld;H_d0eOtc(Z)EY1Q1F@D1D!9!fzBM)+eoon zKr8gve=drx6`0W?HBAC_T#7wwxF*5gp+%~8R?j|?3O~OQ>XYZQRqYZ8M@kP)$alem zAg2RN4zRV;;f`Kby>g6+;1`m3LpAT{lU3^y=KCB`BifrFGTK4c!LyQC0?rO~oi9EY;=Fb*+23URX z{o&EPsSh723qZ)wXv4-(;k~?P$5Z9QxweY0NmQ#+)Xhc$&duxQ;SkscxG(F4lkJ z0Wt%KslplfrPLNl6GY<*$!!!TbI4b^$9Pc>Dc?oLeZoUPePmpBP8_D#k^!wGpYJ<> z=Ap3WD<6J8^I(1@CQN6X+A+ga-)#6SW(^~18x;BMaCofDoD@=AE9wVt5|_G{GP}PG z*E%){nG^L&KM}7QyP|`yJQs&ZDacu!PUuGRk%gJ$I+r#eQ(vd_sa|x?`Ho!7(Bot& zrH=SY&M``QPt>a7HLf;5hJrb{)+-8t({4Y?a+$f`65`PbV|X#Rp=`w`dzYXUa{BKP z&)+T!rgnejwj|Z9r-p*8l^`dzI^LTk!7k^l3EN-Ff3azJGvwigmWi1@XR6(_deOrh z8_pPiY&1SlB3mMvxBiL_y=BN11Zrtb5o>@jJ8$;t+WvM04&Qs9jv++&g?q&hm|HQ{ z*ptn|EL||z4snl4Bun`E9U2H~j#hzzz%ZJSJ^P#n4$q}P%H8Q~U%-$RjX@C^b#D~UQp0Lxsi_pWQ;9M@Hqt!F z=oNjNP6o!ck_X!BHSumKR|TFO;Obk;-!^F{{I>l*H`bk*jAMddh<;O9(cu*#mPvvZ z&|U(lm?RTpQ;E^8tL|6FtGJS=dtjlWYKp_xQCUwX#Ff$O@Xy=x73*37z$<){M zmY9|O(F973&OGvT`T18U(EW$@ama3_YTYRy=1bUDblGiJUSkeH@AqqA3Wkfl6ew}} zT$>niJS16uK#QSAks-ZIjh=`){xEbAfI(4{9BvE)2Si1ZzV*)q$f)x&fHysQ=4)u1 zYjAqr8Jym&?r7nzC;3GaZls27rp3@pp7q9J)FV4@NB3oO<}{nMg@}UV1ww4in9&3y z#E&R6nLQp$5i=#|S*u|4TPmLKq<~y5PzE|d?MN3LU;=fy|0N4ChW_DvVkLf>|H0_} z{bueWXuu;5O%?HXtC%K9nHFJ-hD%D@?_3%dMPqColGx13k)V0s)Dd$sg|-_xr>%{o z-`mdxU?hP?UNk+a5AXlW>;Y!!^sla{q}_V0EsiWwrmk^$<5_Lo4O#YF+0nfj6n9r9vE z_Y08k;3VJ9xS#v!2^2@VbVynCjwqD`BE&A+zt!qS&!wwqrKiBIZ+7TR&#cL?3LH;g znD^vuk6wZX_S0KR#@F=-6+|x8C{Y}@F45EpFrYzvg9(ooPM-xoKJltofx0aUJ# zVJ;k^Ykb@|M=C1m?G+C8&~cbgH0zFu$%y1c?yO^q(^NdvIT>D z`A;;BX}Daat#OM_ustwYpoa|#90Yr-d87g7v8!dh7amhhvdFh>46 z(TNT@K~Fa(?D}hNbf{K=a$!_w+a1tv)Xl|Q#YJw+lC(EUk@#!US zKL1-PvOzUDwGBvE!*&OHSu|n%cTSeao*xfL_=ej;(gDW&DLbwUj8<5*#FJ)*HC;+! zWswyNslHR*1E+1*+g*4&v;0`T#rI8J)w=$~-65j$!-Yfs<9qqf>;Kzp`5p}WM*bOV zu#nORl;Mez8$Q9)B_oC4{+EX)eV_>v72tBfh17Sd(cy}PpfZ3Z$P{yjS7t5W?6baI z)!S(*#Q`JYY?_$>=ufhX5%uH>;l2u_F?D-c{rj!G9o2WkF};DJr96;MYQcxC6+#+F zJ(pe#`2K#wimOo;jw43Rp_9;!=^H~t#^_$nag?!naBieMN2y7n!D#!szi07x(i;;w zd3I%Sx&-{ZK4EGn!uytNVTpigYWok2y|XxdD6JN!0II7OeHK>19k(nJ$dnAn14&gyKQ zciEbLuy|PaWeL8<>mJW1c(c7Pq|ydq2xzTLY1CnSKEpBS#UP6-8C?|wt)wU0mk#bU z3dn(mA$rtxNaE&lbi#PgQPRIk!Ydrkr6^M57-<-`=?-WjQz+d# zR8z7%P}XxYyar7d(?TOgnL8yG84h108UcpG-_7PGhJj1>)Iy^G+(hDT<#!A~M%WNC zTs&t9;-9$e3lhG=8m-obFlWGMg)^o%Xu2Ud1xo3$&2GWJqpiY(j3_8d53QLmZo^rcCQM6dtuKfA}9C)K!GWaXRa63dd^?h;(m$ z(Xfv|mMuskNS5v@nDM$Q_K_rUurAlWW$90>-pHi;kl1e5@)J33e*x%SclKx`U0K3b zeq%TMgS9gpC0>?)eg`kc8d_RppQp7k7KsTK$JYakaDN@u^; zmVITer%_K_8M_pGUaog{w)K7T=boV#vFTICiA>~@8RN|tRVMoOwOUI@AsJqa-!z0F z4k~^Xo#}_n9K2dJ5%Py|Km7rI6P160oNKo~r{P8(8X|4aOMKK^!U{q)(PO7m$yXNooxy*WaA5I7|id)@6N3l#a zm&ea5y;23po>ELeC=mL2{!Af$Dk-Y7u(HgsdcIRl5q>>9W}_w>=pqoo>R#7;-WAE_ zJ%_2We*^AbUms5AB=RSe^x@*1u!;_M4f=UjMX@Fblcr%8=3#Z;37bD-@r1e4aI#+N z|INV$(Rs5HhrUUf#nB6oC#e^Or2ZkAH;>swT$$v|hQY&pS7!3+`G{kO`nSvzTcFt` zbp@*C!I5~s7k8Qg|6F06DXXX4Pk=bxzU0HyF@W48+2Z-I5H^~jA9ZBnqKLA_`VxBf zi~RPG_;0!=Yx80Ti}mU$X0l8@%*5&+0)t;I`4sC%MS}BP3XXz=8e{VARssYHtaWII zM+`75Oay4oe71QV7FzZN*I2?uJC~I{dD7tLR$f{J-HjD-VU%Mt$y$9T`A)%Tc=id( z*Z?iK=k!31B~y(l%%NuGu(^CwLJRzEtgpjTH1CX(G6w%F*@BK!fpV1$IbP>Z<*^68 zZl92vcJVZFG|S z=c2fymetf5XHN-doJynnj#_b+Ruwhd5CgwT_*NyEU#LO zU98I~2iOl4am0iU#gaDCbBXpC@mZj`;#!{^xj{Odjq4{rJJ$hj+TpQela-WH=^dvz z9t`JdHzU?1L--MNej5%UncsTd(AbV&r%bFGVnX~iWruk;6QI_mYugOigKz1T=A+;3 z?#1oW|L}JpHV%H~o>?~<|7&RV&k6izq5KLMb=#2AJ(T*~G{w~C%rLp`7$^b$pr||>GSRGN9Zu0rsu~O5-p;i*8Sm`)j%F` z4zb!^EiI)k+!b!}FyXE-h8yg*?D0$#EK<(knm^%k;#*V=tlH}Rh@W@w-~Sh!;j&Km zmS4%L$fvyd<>_J)Hh*HB7|XPOS5iOuTz}btBfdYs{Ib~k3B*yYgo|6}2Mx5PGN?9VA z+?183C3r#K`!FcqujTtP^7g2a-#PjZxhL>;G8tUGo>slY=dLdZss*-?0irv`0iq68 zYtGZBJ$DF56{k;cTN($cQegQiQZGWl$prW=#Aqu+lo5zOfYaL1389gXDq9 zubXCNFoat(7?B^M^^;;zGdh>yxhF0EUC_xTye5?roen`kjz@=>G#&`VmWyP{s2U&E zXjxDIXhhaoScB$Tm@WSY0G~i$zkGy?v3s3Nza^Q6=F{FKlz+Y8Q&QBAvmgAYiHFj{ zba@|js`5NNsr}m0n_88Vx>f$YAN&3w&6P}Rv*6o3Pq4@(i$U2i(9_4xfK&mUpyXBpM${`EP zH95DxPBN97%YSRKZhM(d*CYbJoba@_FYD?B4H!^}J!Bl~^UD{#z!%h3lF#E1=mAxW z^WVV(+<#kgbaVWFfkr4zV+q8lm{H9LmPT-mq@+SiW(0gy8d0yCbgdA}LLcR1NOn@(yTcjDOOj8P7Xd@}C$`_}#Id#!|W z4BGb5Kyqd%a0yn2IusVL!A6ouu!taP3~Lrjot&q=rmK3VLs|BH`)fUT>~zMxJ$j6<6xyz8D zwSO@Og`&`Th}aUNrNP!jT(Zz|aeDy&lqaSgz^~+3av4o+J9ip0u@4|W7|8uD$j(7- zC04{L9>)=cNY5HP}qN}w1aA*iGr(I`a7Mt6)F`F~F7m>4aId{CmpDN%d?kKwQ#S!$$+BC3QH zN)Rm~VF?4Jl)j@L!vnH&U(pDC0Qlhm&JO@^YMsqS%mucHY8fjfBFP1%oCrn~y~U}b zt|`$$K)w+C0QAEFeg6QrOFHD2E$RiK+%~M}2Be6ISO}?O0*(_gBqBT5GAe;Cx zoR6_zRGtm|(R_{SZ>(J85HyL!NFf_b!xW7og$cF>W5aDkBr@SGPLFmC_rzRu zyu1Emp-T=GaN$+SYf!TgywE0Rh<}sOI0bKxrvUma3%_hUU1UEkpqdm}S?ADcUP9@8 zc%_F&?mvHs+rM_hauIwxsD64{kJCa&o$a5?U#ty(_4-HmUk_=qJRvwBr+6;njw2i~ zD`^--7R7`K8Jb(1z3n6hPqIc+x(mS<68~zwYoPzKoasw*w}AUlwo#r`{0V` zAzTqRam+#`b;yL(MrayG8X4Ddo`kVmjM!^vwo-*FIhNc|gSQ>JF!y5@dpaU7bw7P* zL~qlGsiXXImGBN_wpYj&`Do!tWHsIG=gMe4+zY10_Ma7Qu>=BE$MqT?V}K(AN`tWo z02J0BZ*jJ^mKNxtEQ0S_X@AKgLq52hpw-KqoYl>WAME3*Rw>k6m z-1YI`nwhTk{qakw9n8I3HWLq)+D#k(a^SzYAkJSNb`-pKk3T|@L4O*U+~vvg%HJ%O z*h`;dRPW)J*=05KxnyR7p&XBs^fHiI!?-H_%b>wyAj|0vuI1?OW_y4orW6E71d3a# z1hG;R5mV!QpcIzgp29ok-%j6GGq@hF`gQ;Jr$f0@;Ts29lg;lv<0_x5IOFE?_qDVq zb!mTAms<_QS{3#)5r50|*ybtgI_~Eyx0bZhyln-}JMxPQbiKB%0N0@p^ZskrPaJ~q zQl=%d5sO0{JBAxE8v`{M6xc8XbEkH0uIkzTvm>ke?en%!=i8n#*+YeQ>F$GWt?Sky z&KUqiu~Lx;wH1+!gg~)0F^)M1KlOOCW2~)oYx&4rb6cZ7Wq%tnFch08hDb9M>zGE? zV&~uyk3$q~I3QQf;PR+yw5|Rw*@I16w`qr1N^wI; zEQ>-09Hv^z4(xoP-*r^r0qb%3~@>=%P=>?vf)Jw4P&{-K_Qrbbm3K)Y84I72BS|E{{kk zLv9#iSZiXnW?D(am?B}w1&(66fvT-EV;?Si^Qof;=lE5ch>mCGn@RcJwRUCtetoB1 z6cgd%F@J4|RiS1kHk@J$g1Qjg@@?z4SGDW)+3#=8UcY$t;?0_3)w(TH7tj``3}N53 ziwD~f(5w}_mKVurG73`22GwwJ0NZa5d-?n4TNQ4weZ=bo=il9fC7$I|D&oc$ zGI?q9`AJ3im@pg>$~19-50?PO8XH?3hJREng;4`S9jh|K;mn-@bd_ z|MlIAUta#c6>8u9ImxS^`u$`y?l+&?BJYhy+1T6ui(pdvE1@oH#QD`Gk2fdT`7`%? z`Oc%iJ?IGP5_AN01iIPXR%JhPf6+i9%D9XuGB{$0YCrrO&Ag>TOjZJP5;@y zUw=IN&sMyJ7h$+R!v4PaV4WHz)|F9O!-t7E#|ryt85$9TBH$s8DQ5^mz~Q#JnGN`O z^L8(UpxZ#mbd5dFn*D86;IDNJlBJ#1E+laIvT}aUtB>}iuAp!x?4?gQy}!==r~Q?A zPXd{yE2+!iaW%|K2>!?Kh&7N^eLa5s-G6t%=ftH{{%Y)TDs^Ku&p-Tp{{Gp&&)x;E zre|WV7TesGTkkFKj@|zzg0_PV=JYECJ?|9s{7|3|c@#??N??p2!(?Ph3_@`&aTs&6 z?S$S2(Es}3=T|SE?ZSL(#^;b)LiMCRg4f`+sm?uct`X@HM-e#`j%37fj1gxM(0`aR zVGJjj3Js9}PPguO*=RiX#S*9-eWJ3TSKIg;utFYW<`Sf?0bhr$ps8f$;a0x^al(Aa2#g|tfA&=A;m zZs{7EvQ5NDYTi$NQZR7BKrN*%V4*mfS^8pE^)plC;i z>E3~=(?~8lSR@y5B_pC@8A~BKN5)b_RjjPh5L3GCXyQgty?S~6eg~xZt$)mKt%4CQ z>NBkk9#>BC9r+mze-NNf=bmP>1F*{{$g6yD^zZR7{|uj?c;a*B?s5G~0A(Nxm!+u6JAt5TlEwSP93W--5Jl5(8N%RmOxO9?!{Y>j|>U@_xPW6bz)F=oi> zo%#$|tRoO1vmmSpG2)ztsHGcz_4e7>tDU6o7A>YOz}cyw{wB;vqN#2~t|d5zvrh#|0Rsw&h~R%jZA8c(ZFRj@~A?7aqL~ z2Fa(|*Vou{RSh81xp7war<$;yoj-f|GEkS5!{Tf$!hlQRe?CO(yzoiW%cJ1D{#B7n zZ?5NUZt(7}f=OKV+JAdI|M2?tA9n|^o%;CrU_M?MjbchP#f%~2LZrx%*Dxl^u~@=w z%Y}$v-oAVGVkdjOUHZEE!!`E+Mc%5j${<@jJziX4k5_J2oJG_j6{T1QGvL^M|l zh>W*wINr!aYg@9LirykneRx0em6mB*qjKzeaS;gB@M}DIzxmHo+r(3aL9&2nWlN5&?w3HBt!I=S^&gB*rZ# zE}y@6_5SST9)C2qee~4)z_AC~(BJ%4pH%Zd)zv}3G&jM`UI&?Z+N$ap-~FfMq@4bw zvd>#Hg(r6hhn-GO@vf(*vVPUz(9uzhge0+%u>iyXERJFj8ppBFqRnE=oA-XsbBB9x zi@zEg{w|4moYLGw;R2tb^cPG_f3orKAHL&mO&jjqwtvkrpSy;(rlg5g}Gl8^>G$b<8VlX^qa`|L1?t-fcw?`BDVAlJ&XM7^VrQnVraSYCORn_d&4<@panyPb-5f`kBbEEv;rc|O%&L2V zqE08&YH^1_QA8sSh!Q3-v$4X6MHVTDokPu`UPiRC!gM|Rftz{$*T{A=Ce;geX6L0!q^79w}^7TLe<8^b$@?H=x z5q64GFYZ7r-pS?$I5o-$3rvFr#H9w#E#$g+GGGPClq7+I4< zVr4JJmAcs3$De+xgq6IzF4iBp;iw;4#eW0t1&kW?_UGYtWD|;L1xf}XGC`80k(q#m zAb}Ywqf~X0Rl&jV%iGV@;ls6K&?k#%PR`2nZ(W(eZ~G&W8qJT%!|eu238e`8NU(=2 zXJ#ek;DaYvC#fVAt_P*F!=p{sp}sqo`T;)s>H7BK`@;E|euai9Ind)ec7K4*DSzpt zWJwP8L#JvqvMCSODB3P35p&3U%dwD*IhqzgO097WJ06*F3fHk9k4`UsJ^p%jD1S9-_2uDq z10|-pkBDJoc(jsJFCg7diC{V64%e~z07^f9Jll+<`e~yOv@-Y#_4AVQbOrG%dnlb6 zwf^#OyMYw)TnQS3vM50+5P`8FTv*HramZD5>|Ft=laHs>PEJ5n{RC1#RHxUy+-E>F zYT)JJb^|DfB<99@@06DUBYy^wFv;pe5eq_mo%sHv?Q&O=)>Io&5W76=L4nVi43qS3 z`h($Lrzuef`Gm_(&zgORXrQ#w_^LeIjzC69K+$u}BcdKN#f72HB2PiZ(sjJ(31r8g z&ki>)gmrRCOO>kEFXN4KzR_za%?Is$(`(ubG&LGvm51ArhK{YnEPpCVj1D|v=40U4 zD-yBBwAP-?5yZ})Z-=NmWO6Pc%J*`n+nxcd(ZH)b+>U_df^nV-PB2NUpVOQgEDa8x z$fUQ|iQFrJwM|+Es+G(+P7%&HD!mD224s5ys7B+j@^B3UDqIXF)k3|(CQ8Z#4q90+ zG!79b6#FE<5U%B$I)6Mry?FcS)BhZvZ7R}n7azL0&M7*k+)7SwCv?X7WkuFmaikX` zBs{bSxg2s6J;00mUj+jx?s3#<^}3yJb9E*AA%Z7A>40Xs)BSX^eK~5>{gsE?9b_#c znlq0Sl@RnLxi?mjV6^5*k27_)7&Bx~KmK(5&o7^L;Fxb;c7J>QP-63s(RHic1)H;Y zRku*NBhA#0+_(eio=8ZJ8ue%7;dTc%q+}2%NDz`Ct-M;gBqk$`9ucZSEstvfx2=}l zJ9zKQWw$JdU|QX9JG=DS(GU_Hhag4UW!}$VFW}aww<8bNxQ6E@URh>^!zLM@oC$Ba zj$AUAAgHXS%zxJjuRl6{4{+NQDtNc$ct*C3;{?l+@p~-Tc%v?lJlyV(CWVPuSml_< zTqznA;)FVZ6;vD|^|q2S(()Gf4%X3e9k!O~wnp7O+vn!IQO`#nZg-&KoOtV`*8zEs zgkug-fgFlhd+G5V#MjB&cZZvuws%=ACn>NKeC2Gjy?Jte51r^*hty;orhN>Ra${^QlFSI~&89|nUqlsMT3lr`HP zpz;0yb0`zUU}&glXgbvd!-6uJr4^DSBU6}q!GsBAkdCtz&gyT9Przk+!><$l%XFtL zdCH<>FMr@sMxE>q8TMMetM+hm`q*`1<}ZR%%PKwl5bVl%qv42oxZPnCGwuaajOq|M zl14h}(;;a>NZ8f&HrNY{Zc3ZH+a~+OCP-AtJx+>Jkx+{aLa)DuKcKeLek6i$(P*S% z9&VRnP4IFIa>oyfR-z+1EKT(OI2#;Hh)76&J^q7+f?pg4t9>3v9yv2(sodD1c7pd;fB zcHr0H%_XxmZwVCLpNh3}PbFQW!H;>k-62mix=Kp>}+KHY+~7 zJAXRexSHOt<}z%~=XSoOhPMx(YIeJz@$OLbwyHopI^}$%H~~yyhf&m;qy;pY7O3{} z2^~KZtah+VpQPAm03O;II2~jsZjx2A5bNEf0}F=5KESToZG*;|NWt*qHnT2iXr2ix zja5-b>SDxFAQF(*$&{@VY?QF}x5L9v7k}qxZ;wxoPmeAxJ{%t%pI4W|c&OHnj~y&h zHCqf`)d9;^y|P16Le_W6&c809%S3{L6wYztu=PpEM8+v|SOzPjt@67;7(~*&7m-%9 zmS1R`Uf^%!eE$Mw1D(|uAP3VcQ*&!hG3jW;Go+IRqphQiGG(wqQPO~&kQgmI!+-Rq z<9U5K``g87`tTl_e=g2!fgRqo&>!pgp^_u2d14b+Z03uqVB=%Ml8@SUfeN$C#-ueqK{DI@O*4<4r zG%-qVRnkYL(NbtDJjFgpB(1~3k;TlNWsdvx^!(!Z!{O;tI-7(ZI*(t3goB{3p_ zoOVh(ZUr=;qf2!vSCjY4hx1toyB%CWDtn(Bi)0y&sk%*g_>wYP|4_GbmcPReK>pv`&bu;|9rb#qJN{ptsC1pOD2bM z7zpz=ZrJ&@(3WYub+zcmePrToBb6CPL0Cj-U_Ls9(+Z7Enmj_D$QTzrRO_jH^6?*s zOQEYeEQTZ#h)p` zMGVwO!Zo8hTJ9}V)_+N?sFzeYy4Z_rJ;6_pmwUzCnckg8j_`F)RW?6_wZaU;kxPoP=V>`b5LwP>Ro?Sm zRD!F1`2C``KV;J+jrKufhjmEjkzlQ`9#a-Ew-{vVW{>%Yzki=!oPPRpc69jRLTyyV ze|S31$9oXf{)pV?r6I7Py77nP~dcmy@N0ttE0k9j@Oe7m=LJmA=0|DCbi1C2k^+ z1yr;2ZG9}u_=F|&qa=5+FisPpxJ!5jAF0ENqokJ!x_@QzM4>#+H1A0lr8}hY1*jYf zC;OOa6t&b6A)d@+0?`sYx)m*ZMop^Rf@*H#GlCAF?ch+FeEk#Hr9Lp`M zJ}rUPb$`rY@cT_-u3mozm#%kp-5YiNcR!ZD71#uGzcqV#QRF6=i^6+)FZ86tal#^2KK_r?FhP#d|Ra32&CgQB6q9AwwXwQ2YFAskkyMpp)* z?h}Q*mRpjAja?K`iwcavsQ%wg%m$&p?+G{a1Jpo&QL z^?ye5Ua3Tq$!3}8K7}FHvji5LLse+vyfd8oq{~~4kj2qaMN#E8@e^l>q7hXiOfep+ zk}dws@5pS?=srmvZU<~3ZA5~5nMg0FrU|8qOB|Efnc%spDwqD$*`kwc_cX#5*=GT0$Zvlt~gO(ZMpqRAr)UMt^GY zG5m3zer}iF+TDU|@cE|Q&qupIz^9SvEW4|`xiZ~Ek6tHD&s?Ojdi_cd*6J%-gD}ht zvza+w1d})_n1kXOa!=FN_i*h&c8kT1xg5MfFRPendbb7s0dLjS^!xZR;g*XJl^@G> zO1Cb|yZkZ(>xJRg4L|!JRks-v=zq>PTH#%s9Y2$9)eVYQcw;(0qWps3Q^nnz6fb1} zT^P2YZ%F8bVOiL>7ojj~dl;@D;CN+F;H%c#@(d`JW1*7kx8c`>ht~-y#b!df$HAn^ z#6ioOp=sG~!-S>VUf&Q>+2u1!q7oc#pAB)jC?tn+_V|y&}pYPnSZ7>j^)dw zNptS!9}14n$G-b<`WsBKeA4_KE{5|Lk7bzgo&VM`oa&q!|mPj)cnLh6HqJ_)<{r6FC_}AiZ>-8*xx4Amq zGW2iT11Nb7{lN!if%SZSYt;aMS$LWUcp;_Oxc3{G)!oKbZU#`{X5}^?h=k00I?EU^!Ss%H|I=%97vaTjg8pL`w07>(vL_su~At94_ zYlY^@QYneEQBme~P`+~e`7s)|xg}05i4ps~tAkc4JT{uMvw!0^BO&1a_hQ|qL{RhQ zf^mDbeBr*^t-C9u_^Fp6dpr|=R_sre4^c)r z?^X++QmE=S@XNj_`-RB*wFE*bYG1X^XPrP$pS@#XX*HeBM5=-DWZV#1xRzd}($zHl z+WP$E-RJZ7KfgVD)%v-28*W1X0JLH)!(yHt z--%s9cL=Vqe(Oc{Blg38WfFtwD-1B>%Pf3xjVdxN-|iQ?UT?l@cYCAZcTIV5uZMkj z#DeJa?z;5YS3O^B2t35nSD^piPXrGELydP4TDR$+NdhT7=2+f5$n!Mi)*Xb<`h0rv zed|^0BlIgspN~JhJ3M`#9e|^L(mJ7346G>$qy69;SlI{dtLsjGfSuN<)|Qy2#O{xS zk#qAZ;`D+iq!)0#1HC}vsF6ktQK~!<(ojh>l~8e4dUa19+ym84*mBo%N&%4Upmozr;`MvjA$$XSLY0ca+>N(W3nq83S^+e*>+0%}shcI?aCLux80)A3PvgW!aX z_aY!9)4%vQ-c&EqUhK+G^}NzHfw7=FeCd|VQ+VC_UtpU&*2{yu7hjImF2Zj7cozBe z6;k_=%3jHTb|8DLfbrN=w#$c+y_KSNX%2si+MSEq z<^|mv4RBV>ZBhpR6lz-uHHCMfP>LWJCD=g#2zM%3rOtRlBg4vIQPn5!VPip(t(Sdk z^^MF;CggP3e}M_P&aiq9`=(RpWy@S&!>(JqTlzkK|Eu+)Y(@#kUcWvyWnFpDBVNCr zX_BxHjh?Y;w)!;;H?4lHYF58q&utoGPC3@pab^Q0NpoPzqohGt;{&^2EF z@8Z)bqL#9B&E`};ElW^|rS*LoC+aSWAGh-G%*^BQxOkS+pf(oWS*FJ}drAuw+m$zG zdhXqSw16scRqg_&ml*n{vmm!-S~k3#Dgp~nU8)48ALb*CdxPmF#AuKg_Q5cii9XQl zLJa*}9C8_TQ98ua{~bs-Na_ms%-eB(My1XX+n1wK=NJvbs_R$D*heZUb)%(z@^Dj0 z*<4^6bBIbTEb>@muUYiU8LcBWm<5aP7ns(6u%x_c586q)ZC*2(9rzLJCN|8(W^dL| z_CX;bsL?FpJlurM2x?6IXObC(gO^@O?8N`KcRjvs<5>D%(cyqWd(+8~lthZ1T`YRj z?(6_Fv$MS}a5x+g@Rt&!j@`BFCfURN@B1Dp$&%wFwk0ce;-Y91TcSvc{NDF|@I8`$ zq%J2!$~3iFPg588gf`=ZK#gmT9P6&D5Fi_-xZ;d{`J zsZoaJLQfv57EDcXweX@+<%CFa!+wQzQag?T`@n4uGB5cZqyo{>nXTfH%w%8 z9|5_O=?jXsWpp1dnwSZynI(x$GL1zIG^30g3mhk9`c7feLr3cn+=6%R3AR@s@C@NeNvOna1w-qL@ z+z~C0|DA_pb$#OTO5@K8iMUSRFjinc|9Og3xs-_ljcl&t>6; ztpKsSwTX%DW{!5?tq+Aw7xQ+m2Aq*_DD37zoNPaEGnjmW(_k>ZL2^IfwC(da*v(Uk zjSt~HSLbS{%QMG#V0$GOS$Hpf+g+L`s{DB>|57{48ffLqVjk&5p1YZUuTqMGX&fCJ zf*yx;(|IhT2@a*))I;?9riV`70Psv_b~M3LUeg@ixy5vsY2Q}Re@9U&8#Tdrv=Ye9 z8UlLkCKvO|%76VFWOAJCK_=T23xE@2iF27EN^zFO78DH7Et1%*ma;qOV-T0H@3+ix z^q_cbw6~dTJlq5#AKle|w9I6WfwntD?+jl%dX0`)tn{HD63>n zn5IkuStBt};KUAS+3n%r)8+KK&mG@r@2Piusqjw-+OtV3LRj)4Cs;G3}yE551Wwt&yy2E2~=TDgA7JkIpH(j=^a6lbf%m zvhqtjdS9FJFelgObI62regl7^Yv8di@;_p*=B2v<4eDYvFJAlKq2Z#kI5iV@07gu8 zo%OX&nfwWU!6VFC6|OqNfm62_qur`ho32)~fLu>!pP|bb&*_tV%-qFdtY&-46}_L_ zVPPI?@&Lob@Yb_`(xQjawXl8hL`|7*7bL)9Y|&!57fa$%Wt>)%Drr|(PB04>a5dTw z(40GflDCfkp?0|!Bkz%`hkPH0nv}7|W<1v}%b8@r8)0s>6iOu0GIE?!5>aq#QR#o2 zPdAg0^%D+6Og{F2`SieqV|552oJ+jH@aMwsjncwb=S)0*NEvj%i7W9vbT z_L;zP2YKLE3e4opRYCI2IX`w#--qhMDX}pzgy_tfm|1EiO+=bWD^f$$fOU9$S?Fyr zy?w(H(!Z+lViP040xrbkbN>1g)Vruc<#Ri@&RouTswvG`8mGdhj98P~gea96n&t5t z+7bq_iRY|;o|e5yju)fB`KfH{Z*6Vq^JIEmL`qK=^S5nP36Ib(uHe5a6LaA%t^lZt zP@8App0;ukbVhxjj=;@AUcXQ+FX)A8Qd|$@Y8z5X+(1Vx6^N5kw~Y{AS2kyIKEJ1I z&TrV)u=(I!VI>+&jZr)goh>8#5bq?VCQG39azL+2jJ|vw#y@7H}z}k zArtck?<7>-tCmAp59jl>*w$V%o4g5JRfn3n;HRp<+5P1Wk0Pe13?>4ab2%N`E{^Bz zh5TWE)Rox2-;F)ix%-#XYY;xlV3Or}@|TUEnFbvt zvhE5GIisZeeeBRpR43?Ij=i27jCnSo-=GVB%8lWDHPVGtWd$44T5i*&m&iM z%=SSIRVq>)Yhw~a8Hw{;=fn`FwQy>v9A$eUg%2^oiUMA2Ub1;J(zlU`=tS#|fY!aF zYI3G6pU=$vrnjYLbZcJwSJiyZ!t5`8#B{_3a6x2)~Xl)O<10P(abXV zn{Z*|3q`djU}$R|eZsU8rX3QdiGG=yXfZX>8&lIf;|j3C2%CzOB*t>a6UJ0xl9W;L z!Z582H0s0tA2ay(a->J|=`0`|G>)-N+r!;zuTEIETk~sYB;`3e!Hi^CB2&(l%XpGf zO0vvpfx60_8S!s-eP~a!xAp6P-zPwqi|Ql;4p9d5%WFl8*UH}F?qtpr!UWA@%N^%{ zyv(GD5UEmB2=Y>S?P1D-`+9eh2`8Cwk_m?|6J*@0Ou*)9nUM5XFped;%SbM>G?l3_ zGL@WUl4<~CW0@SJg6&?w>LFoJ0r(cN*n>o0pG*M9xYZL(K-Aw>_suPTw>l-gCBAnu zmo$#4RaRR;fMHq16HOhJ#yb1#xB8aB%Y%k1pSJ!{Zhgvn-TK&EW9#>KiXn{?(5x(B zh8w4x%djwPYIu^1oaIkv{p+lfJg)gw2(WwX@1W7XCm=XZAn4TuYkX0)e9h0mgd;0c>sw0&#y8uxPG1 zN#jhXQmEK+WrU1DF`$`D6ZUlR^G^c;+r%{t7i)TgfTM(fxL32EZ>|9WSzi!9c`V{g zB*bKzQ)6g~1@Me^f-`6M(*b1Fl*QVS zTxZI~Sd+vgiODjVq?w4VK3)T1H&7UaAM70Ic!GrEgapwqB#0&?^p`Y113O4;=0G#h z9H1a3GLIb*Ja)|3?CDZ9Jq;vm9V&8Afr6(9i>>kP6k&0=5ZZ6Hf~1wLAnEUnoK#to zncP{YGaXX`2t|YiB`!5_s+TX16c~R?S_kwJ(VO*3X$#zwVFppEDNDG?VnY~l&ZU%@ zZmFzx&Mp7h%_i5QNqsgtrG#e^*mURE_PE|B_tD=boO>x(|aTKyYW0r2j;BjMev3spjW!Q17STmZy)zzy7;&SHB zqHolfY4HP2U-&7)>S5tWr^=5o*EMjevTR#{54yWRo_~7yI~lo;B&RlTwmsz3POY{~ zIw!PBNv^0(jmbd(GbU1@#S?#t#KS7L;^zy?IPP}FCrC!rFD8vsKV>bqX`YAgg5L4d zhflwqzx)07|M~FouN#)L_WjyShCaj7J)On=BPzk-5-MpZ82gi|LoZMmc_r*SN-V2aRnN^Wz{RdetZ6=;8c#8MTrWkFdG z)SeAA3dp|lAB3`XksTFZ#>zM>#`k))p5I)3b_D{6=s*lEFB;Hk7To7}2 z*X^4Kme*)r@pNC=5ij;-ci`7z6rSI%UtF%@Mh^!nXWzp_PZoc;Yj8xBHh|Muj_k~@ zA3w#|siNFSw-GrWR^PxpQ^MdH_#0w4UdDAE53aPj=IY8Y&R`wFlCN*CD|SvNSThP{ z;L@4Ta8X%_Y;_j=9`R_1-(IT;z+QM*r3bUcw<-q zgIKN@kP^gj^PL`JovD43uHcGNLS}*4TeoFb7If$J#B=MJFB^w{tB7 zpgk+e-8McIefO~ktNOwy4_SHau8a-t2V2^pK@WhH&{kRQFWmXz=ItL4mtiH_5{~gd z57lMay@0K6i-rC+XfsP-TwZ$rO>e#R_I#|g8*g#vw%3;<+WwAmQ2SPn{F3i1yH6!d z4~;iX&dq=Qyy?zH9F{rVr98DUpe_}!Z|Ck&veVp6-><;MvGAc}AABelLM58!N*f(3 zZio`nq>dTEl}kG2|LV?%($rc)9EmBa5+)Tq+*Q}_bYTaK2+Y?Qh<^+>DFlW}xyOF+Lb%ckVNb7|#6H1iW zHNIte?QVqrod+NC`vzees7x&T-Mv7TW0?u zcwqpt&f{qMn!H1MSbtXDuMNHO2uz~u%aOTU4h1ElnhitP1DJMSV9-qE+6dd>EDE2Y zk1e>^yko`&i!iX@D|IuvQsV|`4p+e)?Rd2DypBoKj!R3qFtKKYBzX){g{Q#%GUh1e z9>0U3zrOqL|N8Xt??3+j?$ckYxF_#L9L->Nx^Y-aC1bBUuzwr|Itxek%rhWo7W2_p zSKS38^Iw)D!bZIPd@(`hTzME@p)GZC`+69=b&y@1Und&da6JAMhFLi#?J+pm5aN7` z{*B+(PQ9SF!HX(^yo7I~CTQr^=wV)?w2TYmz$HAdL9`20T&py`LW*%C5F6HxN6rbQK8Q11Jvbfq^|;j#NTvUm?V zy-|2VlO>d;nFJLqTnc^;c?AT*K!Tcf%tTuaAnE-8Ztp*q&~DJt=W5f)Z@X3)+jtx=hCjB#cp ze2{j_Jkf){w^JU2t#wVz8L`|sRl0}WYCZ+W9mZcq|A7s>i5B4rz)iLx_KEJ_- z%-lcDv3K5|i@*Kx{og*F|M~B~{PN%qTcQB@BDvjns=+yDn8hRwJ23+`Xq+hl6o+jY$eYvPhKj4A7`iA%I zg~i>SyP|0qwWMmA2l7ic)_LbK_;U&{hB6Zk9sjiOG^6D-)T3g@C+>}XgiI<6tB^So>G_$}DvQ*_F7paP|aFeuZ zINObnKi|sOvT{c>Dng1If2GfHZq#^uyTO0{!ujzI{Cu*`=rX#POlPic9HaT$pVUr& z`p5Fbbo~jdK6!A@-rM!-CeQnbJ0F-owHUdf)Z{#u)Mdi3 zoDrpnQ&z??N8DeB?5pp3gLJ0tTlO4SKsV2L(_0Fv{BQ#=#+!;f3{0>TV9z%#m_s%PC%kmGv?3I%+ zEY!z`aqiQeVu3x|!EQHv{6428P*k+~k@wOS6PJW=O&94$^3DUrJ&|pfYnl{+4(oPLPpMvq4|fCr z06-R(U~vW?laQVVmmr%I9|yU?rCqtfrI$vV6dr#?;B&VYbqiVL}z4gUP& zmtj00x~7uTLP?knq#AslKP6mkwhNF1S4%zJXfd;vbzM$vd%a$d*8WIU3)^!X*Z%9* zufKn@C9LRBNMneBMNoe#)o*kKx}*#``B%kgZBSTDtxDBMKH6w*9l%-cC?2_?HGd)` z*{g8KiQqF!*Hy!6wp2<(m8PPGRhrVeu5_B#7I_x(pk$GP%0)vLFtfgV`ec!^QuWL# zo2(G5wcfKY5#xMswzb+BtrPo|O1DZ#Ry2PcG^rprsGgycYa!EkS(dmhI#|pssjT@< zFv9PNyRa2XdI%jrp5Kz4>VJ;*Fr+qpK5TlU7IAwpt zc;J3@xifd1BPQBI8g~QDAKP z(xjvnoon$A5S5d9DKzOq+*B~acOZDYMMl{(hDRGG0UukvTtLAIk_exQf+$&R+Xb)@ zx<*er1>IT6MTM)q-8VvuHQnk?b&7wmTNFJv&SE`?h0GM+UWmXoVX3R8yvD%F<;jFg}oCw7SBI8poP#&A)Wui2-jyR6l{?&-2g;oOt58 zz6YV>hGPm4MKs49T@JlG>%4!m=Gg*ct18ooO;TNB)Is%9-!alVTTf@=oxEz9(JuL6 zxDY;`3*il1u#Y3vn^RWaNOpO~GE%eboii5WZsf&b7{NGjCgac#VrT65Vay>5^7tBy zn8JCvdxTAiVzGM@vJ2}LG)~8&YCp@Nd1`3!U&dXb#sxy0op;~j$4`GhUuDQyoB!ju z_I>aodORd6|W~(UpJmc}%%^e2Bft>kvo#5GMs*SXGW!;x5qoq~z>}z(@b4I8!hZ z&F~g-p#^oalRpUi?D#0=8{7U}m@hZhJH5E|3UHSfy#e}8*tg!>?}6RFPu~gq)>e8C z?0&m?4Lh;V(f0VWvn`ESrn=w1^QV6SP)h>@6aWAK2mtGLPfwTHpAtdj?eGF zfS&k~V@6aWAK2mtGLPfwR=sT4>Dy1}Jgy1}KlRGm|F7=7FI8z+s^*tXpmjcwbuF|lpi zww=bd8ryc#e7)cA=sB1CmZ3}H2*k^)}riM+~Z<(DQ}<*lQ3q|Pveg!gxsR$vn1rU@`u%-j`@VW@SV zFLwMhi1Ca5o_e2Kgbf@ynyKR;+n#zIXHR73+a%|qDah*t~-LM$_9a%okX?GQo)6wu`i-em7 zX_n&B1x2+5i$gB{J!h32E*Lp8DZYi)t6IIDHd$TcrRq!u5tNB_{SjkJV;M`OWkt59 zmhTxI0jZuYod6@sza2JW*~;XgYTK;NHbymz6x|I#DyJ>6rRLOl#Bf6{Yuvcpx&2JP zB!MdXxE(7lz52JN6UEWd=pP)f%5@o|g+FOcES41I>CvL&E=|&EgY3=do|<;GGr zEYGj$*+Q~)a!kp@;Iv`H;Kbu~sPZ&1pOlO4ZU@8HDgdojbIhbPCM)nLY#XuvL@k@R z`YY|dY{KlgBH0RDEw(-9cf>spzSrYW$s`3_CT&?VnIpAaDoM(4g7~b{my5TM4x#CZ*)UhJS=c6wQ=ng%FGu-ke&O`gZ zDtYM;F@TZs(Z&6olF;vo=voxa!*-j}ALqPCJZwGMe9~r$vOcU+cjGKuluL-U@Tx!h znj5j2kmG4FQtVdhHy@geGSglfb_XGhchf` z1HYksYbN;MFWBNqI2#5N>tX7w>{zBtY!;-c=?1#`6bAi6g1}sM1%wCtSqHR(xS|-r zQH-!F{Oq9v`!GO?&s6MJzpnkGHOq|j1{wp7?=23!bKoZ>7KYq8%IkbuvTGc1l)5C6 z&uI0FEicyK2420P+tz|xbk;xUZNT47ydvv6SJ?O~&=1M$FP6~jXTeA5i!%n$WA@ML2l4Gdi^&I}BKLt+fT+GQdQWAR^?f@5<>#oR^tzzK~w^n0COB2A*d^$LyUA_ziNy z6JkDLX|8k7JVjN*(#xSOWKjj9q{5RBVG3A5i5A3h2PL}~U&8B7LMwK}@(l<6%1)pW zuQdQ~i&48s)K=#s{_`TgC;uc(Pmu}_Pz4H+@E>q4YNMPf={Xby|3ap~bH+wo-Y{xj zG^%F`Z1-z~Mc^jk1Tl^Z`xYS}LE3anABQbP2Z9bR_U5vK+eu-lx-91XuCubfM;;M* zcQVzNDrhmK;|eAhp#t6K2m7$T?ip-biy#X0wyx3HUGcKqH&ak-yBr$FD*-mOf#tZ( zzE(I_w-dg(xHqAJiMj7Bh^l|{#(%6&=Bou}pn19Ub90~bO@{{I_?`aqWG;jpOE0dFPeC7w#1KqwK zJO^Or07N`I-_GuWBo~s8#Zmmpu)$v37dFSL= zt({l4W5Dko7#kq`AC#~*kc9tkidvG02&7cI3|jJR5L!aiC;VfjGV}iKVeI^Uth~2t zQ;xk9++e0L@>7KG=YvDQc#qkXZ_Id4sPC4z2?iE=9W?b&7&8)ycrqz1zBw81v~&0kQCP7{jJ^G^7mSv-lEyon;#F-9xrtc~`TvITN{A5j1MAHsJ* z)@k_h?ORyrw^RqmpZKZAQ3A;S;q3lv)cHs2O3V*J16o>quWS2W@*Pmrh}}!AIupAS zow>|PPm4~ov}Vi&w5@aGi^d~uF0VeGyT8Q|lPPdSI$jJXLPe6+eWRuIJ`aHSr#Utp zqG~)+#4H^D!XZYPg;B7YC^&ljy=aZK>%Gs-?;?aDamcv2H1jLTT)I^wm;vv}C+Cp+H6Hd{GmKf~p0^RQ;wGR=oV{Qt>Fbcjwc^?)Df2D_c za*@U#pMjzz)CLSORy?_RW`n?uEW9Z$w;-s$-?+svwh5h8F$}cx!m>wG8w^bg z;^`SJeMMS@f0zz=lhJXYw4zUh0j&*`>=$=!2aAr$VXaCpBZ3B&>}lgL1hu? z0jSZzpO8OdXe7#C7Hyq5D;r}F7^gPVXDbYh1{qUEWbU%eI&Zc$N|?sx$v|PF0*U)t zWwbYZ>NcIba!y`&=U_Y&Ak+GCpm%$q(|wQ|-iQ}h=2^0OpdU$=1TMUd4X;gFJFUNEBGLncdpJ7r=!ebr$v|nWrr6Fb(f5_ z=W-hq+k{!&RCk+~ZEQ+wyOZd1K-x7iJl;jIBE8$U5CnAy`?b6hWoQE`(>O3pFf-%X zqKNn;nCy6doO_4S#@E`0k2%9IlOPFkp%u~rRN2wCQ%zHS15?gFrdjTb5Gv)iolE_uJqOxN_WfjB=$<8w5}0q0F=89(kRZ5 zjlHNMe)uRe2$;>FXOQ`!(X+@&8ZnWZvm83H;9RocXfv@7eX;aAf{OTPX2LHX{-iBJ zhzoGKW#pOo-%<-m6aJLHGyN;O3ZeHml21ySt^F6|*QvA;i8oAW7fuZ^Q3wPl9-9p= zZa{U@4E3-(&d4c>D!bSI*6^5Hf{~yuFCR^%BVXnBl}UsoffI zj(w4IGBJz{^9=i>h@U^(C+8iRD_+^Lqi@I@cy~Q=u78XS;4btz2LX}rGj%o-H`bZX zqZ6SVc4F7tJ&(<8S=N^R_A^I4HjYP5_~22&?C3dTRJ7z1M20S~tD6nsefLF1Z)b@~eZlF9P?2OVGc+iFrQE4q`*r244utGZYg>26d z?h1+*A=39~@?2Od!uzcofpg)+iCHK8lvvWgzUS&1&uQjm*j@P|TS9nXj&Yrh>HcN| z)?v|J6z2<$R?E!k20RA^Pw}T_EwOskR|aX{6rn$#S=)~!!vM~gbvQICVt8f5*%8z@ zt|JIBLU+$CIr;Q^`WHNy7pO=L0}{+1AoW6_Km3JlztO&h7@=6ImtaAPLfOx8CMJ`m z#^kDLSE}9QW#FHPql`W) z!eFk>-W;$XyN12L>-qZfdVXz;a1bfl&j^I|75dU8p0ad%Lq)srMz^xPuzcSwletP!f~(d)Q%F zRq2(ZH30Q3;jY)d_XU>Df%RFbNucb!o;0)dh=vf~7eIgTJ=9xufIP#%Wnm`S&nm@S zx<8RLfnMu_ve(pnI0Y;|gIeC~ec09N_IiH42|qHE{^aM76*v?T8WqyVMLqblI&JuY zJvlTO%&`2}j_~VG`$ndEO>urD3|-a=X%0?@tP$Yn(20IaSrWxf%v#2nW{`&NgnPC| zZseMps2#4&dlupOWt1?`<@;+GzgkVom`-Ww>@**CqNP{#OYgNSzo!zmi~P)^+{+Vs2K$t(zQ<5qAvAs`kglp1Zs&zm+bcF zwIa|hZHPkVrpCS`Pus4Bl#lNV9XuATHvuPt0(Z_ zPdw>*xci5Os}rzxdy)8XO}|8>Vuf_UO@9Gn1cH>82r;+9FnD-d#ddP$8To?|_8?l2XmS$d#0hUUsRxGGNRD_X8pAy?vtfH>~`0!6T(oTs52r8 zi23-H4L2(+B%T z?e_{q43Mk+sR8Wf=1zPzS!kM`lmaWgc@E>_X_fHJT}5g;eXL%A1f6Aq3$q1|uEWLw zNAPeb5^PB7)2V%u&ROKQ$_SNbhJU>o7yQp=GPQ`&cBxqT(~I)F?2PSdOa%1opeIBn z>SvLdZQ*Z@4#Sg_9^M~w_aCt1H-0?y?p{jG4jnCh`H0S2`$f?5tJo?3OaM%bBUa(D z;UIJ803j>zS%l#Pho2ZcR24;7?Ncl)d`T1>8)Y_A8!+Qa8btBkC8RMbBolG)BC#g1 zCZTdje1c1XRKVC)HsQCD1i&3vizDYvtp*hosG?A zSZFThwxwbwd6`GWQ8RK-20$GV$5ABY*2gY`*N7g8z*0d(-RFO{A)#U2-dN8%W`rJ8 z!EQvD-U@yE6S-6yRXH>kNJjZwl3DjV6>DduwNcy6F%|C!q4zk_cG+?v&(6(RL8y{x zC81)^WITipb(~s9y}UOgXn-K?MUw*L0d&P~Lc&W}y}wDiwM|k=9au|bozI)GgW(L! zb0OaJC6Swu|Jjzhq>w4*<~XhTWpAO4yHKmH4S>EL1z+-AKdJRlRw>rQH})MgveIALc)+e^3jGoL zAU80nQW6d1vm}EfZ5+6x?KUzU|5FFQyRn4Y#DZsE=YBcj6K>*MdE z-SyU|8?SXr0co5=$QoP{DMFe>` z{il#C=+$7|yE8FHWJHrszCl_yyzo)q@JCCk11-#cA&h|G1ovo+!wE~EJ6{RNNDooa z;oE9K3x+-8cOX5Oz^2RoT71`#_`P+f7RVKWf+gaEKqN4}sVnvNA>;KqxZoe+M8w$t zLq1_~4>>U}dH#pyrD8t2?vmh_mj?UbA2uC>&>S%;rfj54$l?HS`fo(-{FlW^1F~mU z`5{fCVnnF{#53!Uj?m6I2cISE550jmT!+b>9J{QbD?rRt0TE-Wyo{)!!IT(WIauVn z!@&j5MFDCE@sN}ayT+qvU=2TlUx zkz{Vvz^ORV8ogy@5H?p^gN9qR<)vU*{dDs0;M0K4fZ$X0m=W9sePzZC!r!H<7^)+Z z^Kfh4-msic@@)Ix($5%9TK~!5p;L-!+0@4z=G4RXhmWGILT*}oHZY)WlqEN4JvSNm z1pvJXh0)IqZ=Ygn)HqQefUT2~KK~mhh6le6F2o1mg%9-%$tG^GDNGZYR>&U8M0v_wwn5BV>Y zS0N!RUaee`8w$$ytu``Nwr+t`?YlzX83)=9Ap?lcu0_8e>6@18R1y_l_xv{aJY>N zeBQ!OBW6O4!u8SQgw|lKA{h&Tt|C{rgKKV15eo4Z&Q3&eTd|@<8H4OY0Kx80S}+FM#wQD=tY=@aL#b<;Ygj2y-w@RxmcgK@$6 z!ew+}q1<(vQun;tg-r%uQgj6jheSPwa1yd-%7;%7ge*pT%pIyYCsPWc``eG2?}>>s zQWS6I!^tDRcGNPC;fK2T0O+|pVyh9uS&uz3D7Fs^XI|n$YgXnZmjHAMY48v`#f?X} zX_*Lk7H4&&wvw?<<%X*Y#c@YF<$QU*iH-P?Ek_@rytNalO2H;hrJoFv^~zgPCbbV& zF6PEuMN{v_9sKE6awYE|($CyMm`RRnK=SCuy;A zI8M`5XVgxq0vab$0qKcL#C}d#UjDkDNBM{L2An%GjttIlg7CJP00_7i4_Wj6(K8rW zjaYn-CqrK6_bER6G-=0SO_C*R;&shE^TrV8Gf!O(2wh0pw|ROr?E>0nnmlzqNIh)Gf3Ls{05YVF&jI z3-)qz4)`7g82+vJnT%ib??YajaCFfd72irzF10q9p>wAi%uFvnu)rK!3ieRg(M1wd zN^w%UQi~+z!PhCh_dV>l_DI+(-C?4TNYHk%NJcS}poPXwReD&gTCrkC9#N%Lc0}eH z8|oWwn50oU)3x(%4Af8y`cyE@@m6c5l80JHAa$pt89_znxI`7==u~b9r_Cm*^9+aV zX+J}h>1|rg+f3a9K(S#GT{iOu6swRP{t9DODrG8iC2o{*Kp*aI5>hps$FD0ue_yM+ zs?l7YRs7Fb6ZqWzUmGxcFY1qKYUUKGFwp+b`1|j2afkf|0)FzZ?c)D#7ui})`@{8q z+xIl`-Zxy~Zfwty-JRvidqvuZFIji>N*+d2#bN_Y5cA+go4mb$C%+Z_&J+*_KPV0k ztw!?`MEv%&!ke0t(+a%0^G?_rXdK<|ZPI)|c8}-TJLO`eUh95-Eb!}A0%{r>=>wT- zUH`(hh}X*Au773?|JTbYN(AkePLdu#d+(N5S)u9e<8Zq>7|KC#lKFaf7eE-q@b|v< z`fEg|zu6-jLn1Cv0(}C|nFJVDH%(y8d}Cds-oKQ3p0 z9OKBtE>8}PKdTy7mgP8(kuTQQD|grqOB<2Zl~eG`Np*bPQHVdjHhE*~O`2J2*1hwp zB^x)qv0@`UZn-{Pj7$@s-8eRvI+TVg_PXpFaS#tXhD+KyG->yM$YHskQjQeY=L>dw zYpodP+}I!rzfd#z+}}c`+%#$LwUqkL&lW(*-G*v**9Y!;lsm9v$>|7uBjDBT>YB8< zE(O3XsE}Y1EUWSQ=Qn*KN~R^|8>ro;lxiztl1s<8dN1!x76ylypU<35v`Vg@p9;`D z^~Ai>yG9pE-FrQOR_o_!YcY(Tzg!G8`sr#r+q%|&0ER_ch6zd%M^u_WoNWvWR&ya~ zUe%VYR_VfF{Ha<;k$7tubSpf{Ve6kGLnTpKW3>A@oGUvY>9ZHiG)b7ny$tC9{j*c3E%yaNJQYkiGP2~SQN-KCsy~zr@hN+FhfUP!57?{dIo~0F4R1-aI)oo`%3l)osns)xpwizX+ zXU6Pwx%*6@BSI-{9r-b#eO~-=T!qdKsYV(Nka}m-Xf;izi2fOn0#+5?pCv_(NeGo- zKd6!??qv_%oY%ZOR+uFMGdD+0fDyKXzAwOeIPVnD1)GyE-ZWT04Ih@VlHS$Z&eljD zQ%2PqJ7(frFjx)&7xsH2SRS=-mPY(2pjnIszs$UqtIglyadPU!mO4 z*eWOQs3#`ie50fDsxnqY24xh^B~@v*QKh}JG~bSAvggb6fRqE5qpR=>=;JcTs34?K z!_Y2yal%8&IZ2CrPZKEELe>_6GFIsT2O$NKZX$i1hw!~`+#U)ddh@|KE@M8vw7-2P zO*{y&h24Z8k0}l0w^kubo#VWWM67R*?bd98)Oq^+G zhItlUWB0Bu)k&uP?1n|FQ)6Y0lZK7vyCN*{8Zn*u&qp$Gf#8uwI#%=8(eDx;y{pxrsrR$CnL7&AB zq>@n!sc^UDGnSRBArx=K^=_2=hUU!2s!eP6O9UZi9Pr2(A@@FftMj@d{kWt0?0G4S zH;(x${EH{^#zORnoMuh9+9f2~`VjFVn8pN5xrLwd%SJc=D1}+o67TByoT?aI60cP= zu5M*Dd>+JYjstlW#x&M=m_q<}oMeRA+*$VRlM!~e%7^_(Lnz;2^7bwt87wSN0CLBhpgPI2N%*u^|5^zCe^Pn+Q&0+ zq$l-CTiUXJgY7F|nU3DD`6rP6=;B_TARkb%NlAv96LRdr9@%p(Y(iMnjsd4BTye-|D zsXY|)*w0cV1}4xMAUjJ-D5eHJ%};Yhe$6)MfnjWWe!;OnXYB#&YfwHw;Dvw?Nl*f z_*?)(bWT{2x}Mk6`^+G5hw3}$3%*yrX+sMGhv*BR<$;zZ@$yT%)8;mtf#_OPiOw-9 zuF;vbvelX9U*t2qB&JV&RRg#SyOzA?uIiu8u0(fDjc)k3g+64W#Bz+tkxHX*43a=) z;s>)h^{Iovz&bk_7MklZ^;%mYFP#viOSg?#F`?jwcLs;We~}1g5n@7xRan%q2GLBJ zD9g#*v|~oGc5RgQtGC~p!}hHZ$0E@8$|ug1-#UC@iH#%5Z~0VxFacBuo-h}L%FuG~ zY&lpYFb00`kuo09l#yaRbfOIu_p?L=`yhpNsS2lM3hIY~qZ?YMUXBE@@A49O>}wMv zqA&S7GR#eKZ1s(iJPWsK#h@S%@}r#Cy@fD2cgvKoEXE~RIcrh|OKl6a4TACOv89~6 z25L~bYXFHCE7*(;BmhYO-YCjF6VM_}P0j`iJ}-qQo;N_;pVJT5gyqM3_x1OZzvq2- z+SR5n*Vbp7Vl&mdExtOKQ{g~_eKN56;h9xDnd=6`za+HA1#@%fU1&N z!GZ&k`$&0MN;FhS-BCUp##muNU}z+qEG!6D$h#Z#mrc=S8Soe7?tBQYCckW)PN(;w zF*{gl8CD|NN%q&obe{qP-tu=sN|GgGGC*m^;rD!DtocRWoSnKI-8Fp$2Ohj&W?~eK zFj!e%zb9QA%&6ZzUruX2o8E6TAuV3HzgCas{Cihqe92sbebhzBg7cQg>Wo>xO|ijd zC7tNVaa^JfvH@w`-pId9iPkiEeE10S&-;r?1Tb)rRyc7fDL;RB`OiaGil29U6-M{O zOz3;Ul;!%Lc63$q%Jv{H`dqF<4Itgj&ION%@Pv&wXUKZ$%n;+nvVVQotCnJrEz5D_m+cp=2RkpW#qfE{OKvOW%G*hHtp}bdv%`;I6F7*4kOc84AVX2H zHk27Xa})E=Ibt1(r0s-Dq5Khk>{db0$L-I13R5w$K7CiN%ZPhQs>nrjrgAYq79p^( ztO4_&NtY9m6Z{SL1A0|*5-#Q+J)Q`fVc{<*&r{nn8&6EPk(AUhR^y=iQ~$ zC%0IWL=MVB(gFXoqw{h)1+%0P0xqaf+h~xk6pp(e>qwVnN_kvvDYMgyyyz-r=IQvw z)g%@ZK3t*KV!+Dd*_H|)zF`;yB=wu__zo_Us3`D-QSV4!#E!^ilW~S6Mmt`rxaczU zWeYJAHQz?utEcKE3odhlUg?}ibtoV)n;@Tv!XO#+6R8rnc+ug!Gm1Xv>gMfa|L|~e z5UwJ+tnaV)R?f}bDLjng%+FGo4N!|b1J5{4Mj{n~RR~##{oh{URSFRro|<9HEZp6t z0nVJ0E75Sg1j4*>EQ!??rp%M9PI*Gac(ko)pe5secgs##Ne}&=PO{S{R9M>`UWG*S zUD1@heu^`x{2QoP7#3g@3mw4JaY#b08d&q`6?p77co_MaRJ)CT(#j>(2Q!FWBo+xC zM&Vyc2ud?VJhpj&q|-%kiKgK+qv$Bkc)w*WQ|oy4k6%=FPm|siGl=`qPygzBuu;l# z%)G~zqZqJEhf_KK^;gV+XbhD-5holj5EI}q-BQN#qB@1GoG&(fe61o{!K*QBvRSRSUP=v#N}Q5>_^>pSI>H)`TvizPjRC90ggxROZ;sYTP!Ee zc$#tq9DLyC5G2cPE){e+MV{?FGeOlz6P-7>g?QW>ye$xxW9T&%hFg*^Mu{P4v5Uru zzu|_jj+FGhGWkwDYjyU##kdDC;mn}L(K3Zm2crI|HRK@f!oguFQ4q`flv{l!ka3-< zq@6GW=bWge-9CbS2P9V^$}(}{d@R$*B}$c7U5a7LFe=z9EFkAt`gA#q3eR+UF+g%- zkXtS)ZwG)Lp`ZF@T<;!Pv&d#??s`{Q}@vOj5nBpN2LtIVKAm?d5{UPFjYS zVtQjKhBcOzpvdC}-oD6$_Q`+^SiS~#@YiU|jA!(@HoMWc_xQh>ya9T0Ui zFa(H#EFd(pj5+S4=vQ1xNf0!lUz!?JCTyq6xEp9c<_HK{%d~|V49^Cc3Q7*ZHBW>8 zCdq@-*vE7l@LVL5SQ)E(+TG49wv5$$_3`e0Zkcre_mua2%YGf1`?8i(M@Ty5my!33 zReD3dWD~C?BgR)af&*J9ZhY6c*{_jyXa^J@O)05z53`xKZK8x$*nX=q4b?B-fF=8o zgUyaSwOZ*q6uo>K>JG(=vxx`|-%(hmlFN#nMnbC3`qnyL^5{hu9mA(zC(xK3^r1`7$Vpb+iu^liHdGIZZ^9YwSbA_?f{j>wLAXNyqV> z<1Qy_Rqu4CdkG{fg6?eIxdpySK1HA?7=JcAwysdF6~*wnB=aDJM3kiQNN`G5Wrqs!(|)5PZKLGB39lQj z7bRj8-}AI@BpGMt+jg8U@`C&5nEwRMCO-FO=Xz({#CQ?(G9Gxz>h`xJsMP@m32Nq{ zf$Z~s^%lZ#^7D*S-DU{#7axzQAf}uL1p9%VBtQm*EDT(mQy5X9L{sTHa&*uEv!+s{ z_rverY!du$C@KX-@_)%`Hq&yYf|8e8DL=_K-?MglHKTUop-%4P<4`={1-sTj|789{37iW z&5bI94GTXW8*{aFC%0Q?$ZGRm{EU$kN0QcD zR92(F6Tb{ZK3II{B_Iz;6%>aIzDz(HdM@Gz*2ZIplxDQjV%LWLw&uhJdC-Pc-Y3;u}h!G{{8?`UBB?=Cck&X|9zb0Fx@D1_oU5D6+vg)Xs+G#1u! zzCIBN9b%hwF1fI5ShYAIOy;L2H{3ifuNCUF2pBIjM$*-j3BbE=Rp;kyQhRq1h`*Nm3J7tuv*)N%T*g01U*S z={&>(niJK&y>yu;jgh>Eb|mi&>*v5c_?7jl7;+psKMFSg zISr3Dd|3buhT&MU`BB?w>pSLuReHtfhVkcQ>;U1m_@O1kWg1(%djdlA*JvCGCp#JB z35R*chMpV{S~*V5TF+onPq=|Cfn#v%)PVq*WL_SKI z9Lv=l^nDD52!Pg>5@?$|7A<6h?j-n_W z;*mhlLI8fOKMTr(o!o=?_p`&8eYCq{pdEvqLAOqAi2GEc?ph$*f%|oSa9sPSjpKw{ z4tr~(#_37KP2vG{fJt>%ID&G^u-4m=Z<51doZY&+D9%)K^PIVWRd*@qQ2LG!^-!61 z7MN*`us; zT0Q2e<>z047%vnP7f?<_JhPFyRyi&ib}#j z(t#;xP`-E4(@s!qRsWSKo4at@(|Oedd()QqU7I2nOeI;rV8oEN^*#-aI+R$Y0A1YMk`T7m zqQp4dw*7uMqtwe+0C{ZO#UK$}tFn9V3H;dNfcL4%-+jAuL(_7Oph|&*Hf}3WlEl#p@U7Gr3mV2trH=g$t7q)2~kF z%}Z1w-`@1M&t+@0|bUZ4t`_8N(_-5+d9C#xxxWlEB zs*Rw@tr$mVE{E&mkHTY*;5Y3uajN_IqPrWgiFPn4vyE!p5b$90gOYx~KH%k?Qd}yw zpbaV6aSToRo4yH(D$X1V;w|C58i4E77I&!(k2NcEAS1_hCUI>79u|u?=Hls5AKffe zKj!DQW;jbEg46bB@)+Z*6mxJhvb*@C>w9p^yS-@C;Q3(VOyRp<@A-0G7D^fXo4AH9 zUCl(gSfIIKN;6Rmtw(xSl7WL+gg?Y1o`deRh|I@pFnmQkHha{iV^9#30TAR?yIwo+ zLj|R2pyxE6q$BRICC|DuoW#FPoR~RixwGlMp3SAeKfiU1Iluj;cMgKz>!uQw{oXeu z=CiZs^46z-IwU1qmKjsdDNSu26+s+y}>l0a= zU8reJBmC2P3&i%kDY3dw(4<>3mAovA0%Z*khz4z-vgwNsLlyMp}s?zNrrLO9B3!*arOwn0&m^;_X zX3qV@HSZy{3`xfpgP?UF|Cs=e5tHHU@4r#-_=)XwOjo`G8a}QAnw|!O(@wfeve(^4 zmd0KVBmNJot@+OGGN3onE%bW4)XfWAD}K}sc)gYT@@AzR+0b@ZO5L7^wG-c(_FAWP z^H8ziKLYzW;&|dR_nt4k18BzG-Uo$Uz5?rcynP)v9Um8Ha6tLw^0f7~8SEVR&u+z- z>%hryIyR;HyXn6cVD^;Mw|PJQ-s8AGtek?SA0sXzkYfF%1!7|uekKP-3RfHp^WAgQ zBE0{J?Pd?`Sb<~L;iaJ7zV`6ZuzNDnPRP%j=K0zV!n;_`1ll$~Z}ZnbO`k_V?(IJg z{lXE?qHg$-@@+ACp?A3JQ)?&xE`Y9F?(L?6Z3FHI`$W_pJ_n&ErlUVLQcK^Ad~!Kf z(oR`4RroGXfKd=VytBXSYQ-JAyDk?(o*qYhi4R+e6b3V2snNkdoji7P{yyXow7woa zu-|2th=-c3(Yduge7fcGr!i_`@@VSVR;0}c&pV!!F?2P(RCH+zD}UT8U;x~+{hxJ4 z4_*#m6M`gzsn3~aQERC;nOEO6k)bBaKNxzPxs@2^|G`L>Gc$+&x)(Q+@O3!vn7l9O z>-JW`d%w=-$F8pq&5H3J37bZjK*hT99D6UDn=Urey|5#uW{tpIqa<|f1$=v}&$&HqOArVM_8x-4Un#lN5Vmt3Y?`64&Wqc z2po-nJyszZ5Z@hF88coqe#QhA4p56SGYN>Q*(_Fk8Z>vAUa{>~Q`MROwQeKXVBwb_ zffw;?5V5D8haRFCjEBxRHbqRyi*rOKTGI5C1uksh&7*eIUCR5KCmN=fG5I$%E5KbQ}tSm?0hukfP7n6Fo02V;Y)_2t|JV|07Y+|`Lew0F6o$^a%5BT^Qmsh z22jqr)kM^S`KW6Ro5_dT?6PNJ&fJDm#MeZAur9XE&`ME8DfSptXQ@NS?uaNS)9$Te7Cu}fS5ZUEyqs_ zdTqta6W4kt4Xntjq-F{I>tJp7uSOdJmR)+jJ!!VdgH;ksN<#5qEB%BzB(3`<;DVB$ zd)JkE=UL<6wJeICp>?96OXrGj>M*}p^xt-bkz$D-GCH=@9T&8xYBR%&ZQT$J7jm+( zw>XRoG>E@|fxIqQs&AbHsj)~eZi!C|NY$Q}vwptldPW}#R0wu64cl6p42OhAmRPn0 zujULpSi5PsJg9s>DUsjHQv~S&@VsU_L*H7X=ylB?eVbP`dJ0cHeafO46@94O)Q zzx+cfvG9&}-GY0KIo6t#1@U#wl{V3=yFtoc@K+sCNySh=kf9Ixf&v!e4dOOi z&59sV zwfwyNy0$L1YVDRQy*DIu0d>w$%(H~XX!a)QXb0uwNpBex+J|v++}-VJyCJ`8c2+^9 znaIxBGvXPfXPp@`(ofO@?Z?ZitI`jDJ5fqvq1J@t z(E65KYcH&c1ng~}0J`BY{yw*ZuNeLBtf@8%_%SO{ku9s+=%qDt^^F7EvP9J)yd$?> zr28Lpo8~CK`0X#r`r0kU#XU4No98+l>5G+^b}}L#0R&Mh&or&D;qL!S)>5 zZ^BND^8MZr0pJv(z-vNk39Bjx#*8-%V?WbiGRUu-bMw7+hyi$*H(nwh_ZeBsLGnGO% zVy-yJ0`rf<3euG#>-unU$lV%vU+Tlxs6qNQ0UJ!M4fIjh7YwNl))Z0h zNzOl(r4Piv8O1v6}91+y(gCrz*&UDjEFEqhE|kEIdim{8Ajl; zRJRIm*R6hX)3|sRsTH-RqnYU z{0ZM@N}N;m8NEJHIvyodB{(+h{Ly8SAyPp|CxPvmpCp*A=B*+Q~G=0)JOya6Y(C(lxWI63j%jkm%7Bp(_Qt zba>ihGqxWT+#jy(8aN%b8{lWEd5MZy0=AI}%9`N_P$W$?*#TqXB}MjBvCQ!2zGAa~ zs>oE)U{mx9T}8uxq^|yoYDP{}v~KmxhML6b*qBuf6W^i(a;&&CnTp4-2|4RgD-xjH zLPk}|iq`24JsY#M?#;ZD<2Fb^j|s7G$oxdAhv=}a68>H&o0>Kw66`s8rMf+S0w0$2 z6pl!w?(hSOf;^Fv)y#Wc{%ca0zW(eoew*Vo$J6x?GYTgzMc(OL|Cp_1IDZDT>=YX?}H1F0f)MVK;3@swP@q5mu+mKlrFr@^(WDLz4a>vgWf zw8Qc_7`#F$)_g0;hKd&%#simHlxj-dNbJ&qGF1!Oz>@7>&8oK2vJvdkw;mCJ-5rdn zLyR=k5%7}E3qIaJZIXwtMwKk1`Kvui2>lY1HzX}(pLtzud^O$#vGToM1ekQOelMfM zFe@k*gwCl;i0NDDq~F{9MWIDWzswb82`W+=>BNTNkXWBdw1)3Ai$|DQF?64wM>Dq; zwAE5=rRjtmFStU(i8@N*YUk>G7>IHYBGOt>nnqO+*V$*&seWo!+p1GIP!=Y_TtUAM zq4o<5ZJBa;T2g+xUQKzG3#h7o!|sm%e{{W7R9#WGrHi}6#@*fB-Q5Z9?yegP?zVA) zJA~j4!QI^keOxgNos}MhmIp|w&&+yN5}nGq&RZ+#I*Gbidm81 z+mbS1LknV!{&CO^Y_D?Iohm1_eteMLZHEQ@jqG#rcU{Lhq=6X-E$1CFFHOv&RJIF9 zOJ7M<(r+dJVO*C%lJTh!+o9*IU%l7PY3E?RUfIUt>5#{EEM89`fTT9+g+MA+Z!(-K zs;9P?;J*En1Y6kkePZ)+!Mrnk20XAX`te?M-oI(h%7YKqoDd!s$16Q;R`SKBT#gpFQ&NUrQBBWlL`S%v@VweVUxY^khnXMm zixGSkQmk89ED&_n*)P4$@oQB7aC(vr{25Pl2prk_@a)J+Tl3IV2^?aW^<>g%UBK*U z`S=7iDKlQ3#ukRODZrB_fu5q4mS~uE<9wIoP#-VZGKFu>9lDUE`nIdgR*rn^S@vYn zqS|qzwp#$6*dEyQ7Min~m^c@}1+90X=Cui%*)<|RyO9{D;H+D)78ozv_H)Jbn|}6G z*m_2N5X} zu!kIUq7SFQdQ-dD)KixbB!T%1lICcJ)8m09TlBv@eyAwmVHq$dfPFGqWqXYRI{r&EU!eIe*ua+djIU4bD>|3cDn` z|NR+;s#5JDW5RDNFI+9_u#V)PULlz}f4Chqt}7Sp!9e>tjL(i^;cJdk>tpE1U1GGQ ze&;{*W$%KX{9&1pFP`6w5w0B@gG3!=EHq4n`6FmQU}t{&IuN-K_;~f5{iovz1hYg` ztl#Q`E*u$->JdgGAj*8p+JEzy^+69i$WN9hX;HZl)xn)hRL{ulfeGvAu@H?9d zj;;**qkbm1wthv)22;J)MKVT4IuSEARMWB0_B18Es*#qCjQDw3yDuz3s4MBfyfe5x zP9UGYz4M=?%x%nipjy$nGzpJJZPO2~u>|JH*zGf80e-`NY=Pq}2^A)bI`^y^yrMKQ zxWUf#_bmz6j(dQ07{ozVKfYZ?O9b^b#vYn|fxu?>7o+?AzEt}G%An8OA%QOjoBL@+ zBMe*RUqoU-XDit1`Q72O(okUNg8djWpHF)FdJTPgL&cUg5S7-sk=gLR+Q@5aV6F|L zT)ybYk4Kb`Rj0bJ;!w}4fgQ;DM&y1$jJLS81YQ-kqfLIBtw#7u9Y-?WP`C^9)n`)4 zq+3@j(MG{mlC6N{O*FI3A#%Iai})y=2z$^ZN3DZ3oBhKMCPWU9DN%&ym1$y}pnrU= zO=zc#IWjW^?7*U!|3c`nS&mz;J6Wc<$6n-P#d?6h1|JmlflYs~8scNd43ocIgy`P@l!lsI0 zu*)?iUgFVd`gp>()B$EXKOj@6BHUNMBxg0|kXX6_NYs2nMCX_JB>selwzkO6RV5sR z-kumM+`-2eaT~C;XgA@&^`us1lf>%tJp=2s*hl|&9i-P!INzPlr~ng$+X-PgfiTSo zW?p^1^3~hAZ_~(UWaPfUHc8Bc47xR_R?~v3h*heTbrZsNL%=o(DpejOUzzmUw@N}W z2l}}f(9{bSKF}niON#tzpU)UofBd?LY072NZteo}2tmxI2B1Fqoi?5aduT!7;;Q1D zxHT#q?m@#2ZjC5NTEmQFv!9|P)1l^HZ|LLMec_M zbAMOg`-b@6Tac|lRhPfMpg@A?U|=B5GIUCie1a&-e^3NpI08`KCl(=$T<}l|O9QC) z6N?zU7PS5Oh59Xj&-a!W9ZYdeo>mb7`uXn_U^rHoaHc{Wm5b;1z$;rR)-BV)g>H%) z*K!sJAezT8tQazbx(|QSXq}-5)?Wv;`vM7ANXu~ybj8?sp-$_=-{OycAmU5J16j=N zYOs|V@5D1gAGEXi^bd1`X09Jt@^-_M)*`~i#CdZBDuF4M=n?qytcqHDNdnB=yD{dG zGP|82rINq1I$>+!k$Lc-T9b}Qkt!`tvh*bw5K89I^er!6A2j6X%&cRl$r42`&6&F0 zWjB5n%;N?wC7$}Q-@I3PXHkaP{COzeb75Bw*dgF8QJtU6D~e+$7T~6i7;%@8jU2=f z(kC(1A_Zpi@G!F{h*eKN8EC1xnyOGuwTyp@U4e$moy$eAV6UJ=R!h@_xom06z;fIV z)z?SiKtrakL0(KM1eIjB3nsY5*(6HIsE^(m&{;>* z_JG#nbiO9wV0bZXq#xL?Nl`5wdR!iN|GK2#!H_WouR~;AWpPh*Z;B2;!QcQK@MKUX zIDiEBUKET^ng*x49Lgxa0w^BSs|-m-<#Cn^^*gyUI$&V^!Ct4Nfd!a^|3=7@#FMS< zeNLjV^L>eI9X8Jc%&-S?detIfshhi~Avo6&g*ysri%mm!{JB-5yAXwJ5Ta#?0GZ;5 zYC%r0$Kt{b|3TGDHz?t@$tx6Ae%$O;0$3+$%0dJB1yJfe=7 z0=i7IsIvHn%Ac)i4yK2N8sc?k_?COm1wsd+zQWC&Jc9u?0w46eIO#A2XI|x1T$*Jc zTurHuG?f&H!DR*?a7U6kT5(%rRE47E}c8X$= zttB6<{d-0oQ~Z%V7qs!;ZM;XEo$fg&PuS2-_zzJJBl#d#NB}kv7rFev7Kn9FwyQ!T zJY)#2KW)SMa-0$7$J=Wobn+|dz8X8c96L;6zIV&)FH6FeJ?j>XBF0-W>g&T(X6sHF zG6_lhPA>;BF1WygGS@;2cQanAAelIZ;c#rkq?7cc{od#7&$1aOU8mP(_czE2dQ;vH z_{H7C$2OXg(K%w+6-V&SgHjC;3KW1;zCboxEQd2wl(NCERk zwm|6U?I1zq?EVoa^h~X!8u$-R`2*&^9~eJt^0j%P!N3ZML25t&Do`F20OvmxG0>zh z9zGC`-{BjhS+}v?nm_HV#>Pa8s56XIf&({arM#xu(~39cOW|q)NzBvF(IHl@fjyo9 z=V#n9V-TXLpoE?))yUKIXb+F5`cPYL{1@T&ZYA=0yMi-04vxw+fMw}@Wz2AV(Txkz z*2Gy)h?zl{`}iA9V#dSmExX^1bXBfiog+|Sd8haDF@D-qjJVAKNsSeG5tw#{`YX7K z6pR1GIR<0v2W#awtf~x$rkc!lXlwprpFdDXf2LXI;}OC(cO4wGJ8CM2cW?-yJq#7g z*E#dsHpdku(DhP~WhyI(fc6?)0^Rw%e$ynax!t@@I!tv zmbz837|$-awv527Y%#CD3?7+}gm7VoVc${@Eke(XB5;7z6>n@Hn03V4 z{21Fp8ZonvH}iU}5cG%BI><&K?K|h4OF$H%h?kp-ALn&$zaWr$A0xus@Aclug-*05 zag%_6BzJwRwlXik+3wghWe}*g+lk~La`!ciPV5@O*B2Uv=A~g5DMk$2aFDvHbRig> zGTP$WH5pG9N?I;cVYt9YH^b4XwL!yuphY%nS5=~`WEu@FeWWY^(d*78V*by(Jj8m3 z7a2cnhX+~L>@^NU0M#A;B^r^t?i&6fIin5~`In+xY+{b~;9p?cbr$et_uk7%$@$oS zVS_rk01|_M-C!m9z>ji9TwEw-5%u7&Oc_ssoYrp-l<;nMHK5~ZSn6gs*Vq<=tkdOH znRR`&FVpD;Xi0kALm-PdD3`AV*@;-j6~gptf!C$ql^vgt>}Fr%R4l#5;|V7NI_9P0 zJIy|K3PXkBK^ExJ`UN=qRvpc&SgLXS81`z@EAEnTEAk$2^lhEzu|e+|rd7BPR%p3% z&Qsx4YV)Cs7h(swOYo*R&Tp662-{o$p$P6J0Nh(Yq9?X1OMTzM7WxqO+>6U`Nb>Jz zu%Y+?%Jmo^VCHDVs_}To5BbU8VR+cn{yF(?IW*naAN`4o4k(}m!vXvc){ZqUd^G9e zUtq|VT;j!!k)0YEkB=UCnN?T^l(J>x+@XLJnNpP*K}H$5)Z(5&Sz<`}CM3jv9NIikldg~2 zK(#jXc!;wL}JT`#;SGNerdYCgOG2vJx*ITjj z-eG=dq?;o-o@U}M(J%jb{-D9TImqgmrllNyg5molKijM_H4sccpG-vcg%w6gpx7Fj zuxHNse!~B}Vw4EeFXGmT8}YbK1jJo87xe#<=DupBg^+dM zdOD&lcEeVi%GP&(`zpe?MEWA*c!MYqH?KUKg-Ui`e)t>bZ@#1c_jC51;!GN3OaKu1 z53Udt5{ZWibl>1c3%-5<;1Zu{Nbbwcr>Du$wB%G`c-OSmBf=(@#$}W91`MhL1I5M~ z4x)+Tu}(`;X)l<)a9)wI`~FUu8U2`1#24*TgAWt6J z>px=J!X>SUFm1{3MV6)DFW*Kl{JJcLYs%57W0*3T%iJYv14B&#Kk9!5h!3#P!?;;Y z(Pl2yRsUji*UJa2F-|~u*iW#8rcdc;mp%#h2o@Mv4E!Bi{Z`xT2yVX8thG|qmDFg3 zTQ{N&bgQ2WzLL1?uHSlQ(HH;wgEg`}^dG^?U4xYmwG?yIu(YaFmUg=`G{^YKsN|px zns0E`dUNrQGfh*^*_D!JKdiK?{z~uH%+>pq36Vw-=AB-Gh{UW~4+mR)2E6MnV#s|xK3#O542MvH5Fj`o^e%4^Qb&7x!NvBBW;IIBUY*vW& zI>hAN{NGnIeR}H*mdqd(-Oao2ZXz$VE@wL~WV+g`zw|9QYB}WDb(#ygezCQ_&+L{} zLHq%9@l(kKH!*ay)370{URzH@`(YZlbaWTgexeEy*1Mt!Ct(WzXcSPSR4!F?nbuY2 z1LCIt)hvOcfsbuA$-ahK*f>`K5ty2F{-*3)9#hAj80H?ewhe4B2*ffe^@nBvNL!e}M4G8{>DIg~)1WkG zQ^5JqNR&Wb+`Lmn`jn?^A`4H^2T%ae0Ml^$z0ZAnjq~!He@8pSFWe7r)n=?l{#p1& z2(Rc<&$=h^d(gZrWH`-4$s${Px;+W%HeA*!Zqv{HjBmWm8Yf5BOuz9Sio(NsgJ7}G z0mU-bPe%qEdyPT&Pm)Q);^3q#zP+?>iQ**Pn1)z8dIL;R3$*?1%-Yg$nC34oEnp)H zay{7E&UO-y`)om}>e>Sx&qyC&i$Ui;$)GeSwTQkv{8+q{o`xX7oUQm zk>h&3OVg{`8I4~1ku|W<7)WY<{z3fqBAZRN!JvQfV+u`n`e4wQgMv=X4#Pcv5X%B0 zbTH-W_wvT+{l9@Vn66RO1FD>|9N>T}#_*Fot_Y9N57d65 z2;=S$6y$e&@gP4QZf`J^jcV=>VsGiq>sy29NqYa0{P&~e?6ndBbV35K{C`cEUg{{g z@AIPd9P3ngz(vyig>-Q+6O63PUbrywYO!->*29p-B=e=@>+3Zh<8B$iu*;-uWf~7I z2@2S%RbeVGKovmAubfwmd7#XE!4!qg2#km>MS*Gb!Dck|f)(|{AoGC4)st}4j7O%Roq15h^%%Wl zVrbnIj;Ipk@lAqNxo-o-*f5wU0CU&%;PNw1mdJKx)41qQ@q=FO;X~!+8Y8Z9%p~Lv z{QelMg0UYry7N8SXjg9=o==r*BMuE`G?&#n5){OiKx-^PTl>VssnrB`ZzfzJRKYY@ zm*CR3DIF7FB*8`v3&Yd-!X0C=n32fbP$yi#Lf?c=+AfwChCpvQu_DzM0+Y}#><&md z!!T75mk1fMOUK2V6D1<~=Kmcx#%oq_AA6b7a!z(MFE-w-3GpPF)O;xPYZ0;~AN#~! zC|YV7Z*%C>8c-aSD4t_(f{xg};3E>G+#8ClI{BF5k(ZmH8qmExs1aF<1bnz%HTP0Gr1q6dB7+r7bfrq%i zz~m@zIeA)s8*q{(x-0{~_fz&0q7%t2a~JWW4YldX#gY3nazfV63yg+W=8o=#mwP7W zERB>uY(U;2LR9GLqa>3Pi=j2bP=rT$qePG(bU3nM+t(&wpPX(5BK97xaM>9ycSft_ zmAB4Ta@>f3@R^55hDx7dn0+OjFTPzLruAyatW3C+LbY_eCm>X2Yi1y5Z4f6Vg>ws{ zq_E;?jM1wKU!m)G0k3^uPrj+xn^~kpm&d-lr?E#Kleazh?mD$s7!2HY>M%K5pgQBx zAa76Gq^bz)ZUKHSKVoyo^q;A!&ttF5K1Z~pOZXjtZvQZwf+k+`FQSEGgeK7aGsfu3 zTZGp~k@vd}lZ4Nuof)^B4KNC_!Wc?2JAhpKtO{HiU-SQmT-pcwj>jGbUH&Dlk84kf z9-C1{5w_93g|h?xQtry@#kGNa6IUP5|NZv`y;1=F542dG5-Lj8}|KA69Pi2pTT-YUrgD277)uXXO|SgmGwFfbfV zFi^ui5-}(-MHKBniJvb9B`A#tKnf(dqlwAoB%|rApechMB(ic;2CDiz|%*~DIAw~&bl=7uXCU5-KWHC=dS*+{0gQR6& zWPs@8zme4P804Cp*GVrQsa)cv|NiG2YT&gUs|{a4(ds6AasFu~&Hk0F$Ai=P?uzkU z8ArT%ai7t)+Xm;R?dL&|8W%9eJa0T77bQX=r!+$=^ILP$Xtx@ToC_ zLpIf+l?xZTTejsf#xK>*x7MLt2;i?GBC&P(+Oy`nWUWls!593Q=s&1~?pSt7k8jmef56zygdV6mWJtC=8fB4WOmm%SR%Gr4*et-;_WSQ-(Lw zElPrR&(>2PBX8e`NtLrM>)d?c$B`NN=$!uOpHucfi#5lT)T8v9Gv?p&N64e;zDR%f z?&A>XvR!MEN|NT+^aIi^*qB7}Yb+Y6m3dGjg;h{7>EOt?CRJ=uDd_;V(Z8Fo*|(-c z0b866_MeJ;JPy1|@7Zos#g-G&aH~`<;l1&SI2z4pF%~i?QnxFdpHo^1H#98OT9UK! zI0+^iSJtQB5m)V0g6Hx{i}|&o9^el1Lq{#uIp~|`q2!g*#DQ=w+5m=Qn(`5Advj=~ zpXw$A2Z;uz8*g682MQwxuEp_gBlH+lb&;P8FO0qcMN!~TRr*JSIAB*hYJw~A76ev{f zaWuGh=zE)|^#n1HW9g{{1?zI3SC5$>-Z$Gc3 zi9NI+HK1~Bn1fjlA)dA6(L`bIFe$QO;J+1Aw~7Z;R#}Y-=W#=_UK*IN?OGO@Q^tTC zmz3jD>5H>Tul(!|6_D!MfKCiwozw8NWidhGJM(_`Hd%kmAZYi(>+9dLzW<>cFA6a0pq`;c`#_e+>3zq4k7Cy`9mCok& z_HqB^w*CWI+AVH3n=Le_FAAZpn$B`|79NNthD%DEMA|0^mql&r8JBxq@X_PP!2}Dx z7EB2XUx`Oq0-uyA1#K(&-K}{7ps9;zCKfYKIxBllPs(O``|&zm3jF)=wtunt>4U1C zFtr0i$ESX_l`S*nFr^?ZYBM^Bj3oO50gM_SZpKoSo*MTbLWzg6%1(WPqLD*U3Ive+ z;cB$l%IlBBZ_2~I&;hXTZsW8?XyE<9eY&v-Xl#^bw~oE$7+2|FzPG+<7WE$oqiS|> zf{e^OnPY4k*TRB!RwVi8aZn&M36Q(IK~(c2Ck7g#RJy(;$;agf?C0gj3(1Gnu>+SK zsb~&uDHwb`9%UDN(rTC~4AQvO5HS#DP-?VPQyn)#*3R%$cQwa+M|fC3;PZs!3zpe? zMM&g?lCLd^T>FIX!dxG;2$ldzERXaP$BsNL1cBAn$wr&J4C{ve$I-*u8cD`C=C?2& zYik^tkFnFexyYq9TQle5Q^aS7FtJ#%xU=|dcVA@6JuJ*bx5N%Czfkp=SrBkp*9IJq z6#L0Iq<`f#k^n3S2)0a+dVISKW8(jhdF0Rb?{lKHOVOO_!)xzNEn4_PAsskHfQ%Dd zIxH^_$$I!bdr9#3J-@c*+b8T6W?^FjsnjNqV>1KoU?yXC9G-A_<5c?O=I1)i2BD>9 zJn_19MwkJ@1sHPkVqSBt8VulFN)4R#)sc_6qx7t1his=ru|Jmglh-;2jytgtv+MK_ zke;TPL*?7vKwzAoxnJM;a7pzsa+t-1*VMT`*C^wTi z4n6N(JN3gO3P&v=*V8vxLTMz&-JSH)e}wf9f5h6QU%ji;T{CX2GQWnp;w0cO&Q(Oq zecD-C9q+v&(6PDz?+RkV*(4ho4d_^n`h&q>nMJd|zA1|s(HTlB7=Q9$7+(*qC^Zhq z={yy^u!bX*rb!G5oq8ZTj9?xOy@Y5%Ec>hHWYm%#-F1MFdeuvbQnzNfkd8R15}G_K zIQ64P1A-7fMk;5rYKGd}YQWUV-Ry&lgdCR!hEsS7r}#IrBZ!*lz}8t4G>$mFLb#Ch z89WjJsx=8OH)Nx1vchKasv@b_Rzn|94=wc7{W|K^Nc35ewLe^{V3^IlH?J!;jy8+{mVjmf z(ZNbeMg|taE?MnW6T}W`spkkZw`T6xY`f_lkKdx+PSNvmPB(KO-jKx z^FBNpD^{lPpjU`Mee9@LBpeR>thj28o~L0VVZ!;@+-_oOZxdaak!9N+t(|#%E|ZyP z`7ajKzFbzkuOsvn^dj=#L&#w^HR@iFgBU>KKY<{qMGPPhM?QBVY(vON0D=<-@Iq_| zfW*ZCT;MGrA8~*ncr~b596$@K1>khepRbe-nSHjnjEjHcHR!QHRJh6JN%E@ktCzDa z_$Aos-J2o!P+-`qRbQ6cyvebE-+FYZf6RXT-K(T_-QQ@%lKd@xQ=BE7xz((`OR-J% zQj^eY8_P|evrk+##Ec9%m9@x#o$yR{D4TATBrb1pazaL zb?3i%@qXN~kJ-ghhq#YX+Gsj6t<6#E?Qb@w+J%_@^?3CNi)$u;AgishHZss}DABr)U24U-&6nSwOTC_+iXR-Y`K2sXb8VAf{= zhIOFQM17=q@uwOht?NP(2OmO*r~syBbTuS$N$A~_m{FJbiUd5VSy}kzcDiP^Vhjj5 zKAKE0NWjqe&sj84akD>Y%|Ls2@9YhRe&KdZs=8vY;$3%4f=~j?4Z1fMGcI@X3Ud1W z$*5KIga}EzDhbleG#)Z9d%>}oQm$)*UoXqtghs&1w`1*+lH6hizGmo z_zB6E54UcLJ#~SS<7Lt5`GUBl&NEBNF_LZWRrVOfCm^7~$qhRUwDLFyt{3L|1&fRYvB`JdmRmv8)}7jlq{~r*F)yG)FZ`cd)~i_E5b19a;1B7e$%{OQ(Y0wVC8B zI_Qp4D}G3e#C|d2R=vFX6}LLj8P*X;{pV@#!_l;cH|x!Z2~3?pF7fQ{Qj7^)FvVID z5JZ!Kx2$Z$9VU1Z1oHv*#NiYFih3exm^TqK(_!a8Qft*gB(L#rOBe;wu^JgN)OW_=uiB*YBDkp`N+~(O!k~0wL?+GW4CPvw}np@8iE7 zE|w2S2Y~~fhdT@BC0`ieX8B=`j@^eh;CL2gaXgczPnd7`=Y#ATWbh-nqRzuagq)Ha ze~Qe4=Zsp$SdZoTg6n{1C!3Q|;Q(A7rVyww-RMv^a9+8{Gmlbz);A$cddwNG>2ujB9y1lS|dTcPT zvbY~!{ooeilwb-F@xyH0#5cU`tCY^9y=xx?vhLcP@Y+85QH=jeGyJcNL`FUU0Q#h0f^GdL2iOA#LUJXWHfSr?69^cydrf;p_^+)} z3#VK`@$nR%x+p?K3iO%yb*+a#sNZiRb!-jfEVJO@CgRW}j8I(l5#Wi^x7x zFQDf*469l^ZIT|yBl7r`a%XrLc$`WP17;EdkKAVOj>|eu`#aMF69Z*WOn#Lw@N}lw zH;^73I8i{`DAjdOLdiY>!J4!;5*R~f35Rh3gKe2KF1X8ABX99*$)NtL10MnXurD9) z*3z0%D{PkD)sdxcaRB~CGr=JB>XGzUz*v!Bpx)6ss!!hAq?7#+2JyzGw)Xreq;hkP z!5^{>V5#7Xwto!tk`ux@UIm~n3{1%-W<{wT*kZdRwed^cTI?484%?%fl=f2h*gepd z_1AdG(lZLOes)GU6@8gvYoOEj3-CenB$hoG$EL%#-0y8diH1Vy3qi^GX*_vLYKKvV zhFJGaDBIdcU>|K+5~ud;uy685Cn|4)4@5H|lWt54jikRfWfZ5QW6>c*3sIFU+ZPf#euf(gLop0rM5o+!pW1vH5Q2 zAbT_e&JbAkW)bs`O>bV#LP$Q}_{7#SVZiem)+6vwveW9Zbqd2JO0i+oaH(NweW9VX z$9gjyyAqbD3H!d!sEm;)>+KXN7#JTd@cGEr8zZII%^Nz>@I!YH;&5m#N#v#(($~+kTre9y+IEme( z9kHNMSwMOJ+zYsK2|k>z7?B)}I823ES}#R?wQ3Qn6csosYSI8U_Rii+=jMdzSwIvX6Cv6<>GkZ@4)z=CZ$}Y%e-iM0TY#3~i zXk^93?t?R`o|{K<4apt2kQXPhea+1*xoI9vVx!!N}j>@p`5 zX4hfi0W3VQ^#T$tsDXh9tnoUs37j=2Q4#X*gODq6M13Hx0GP#&JuReY3$qFm*sAvg z515I)GY6Q-^|?JHT92EW1Ig*6PdtB4Y?0;fWWJ&f%1)oB|C9`1!QjCDN7m3l1t9jH z(qn6h3LxWun#cu5DH?`+(J2KmL289iR3JwU0OtRWDf2KH2wICY0Nvm~!b)%st=5M> zp?!&*{Au29sBH~1H*ej4ah1^FRN}tVj5>`l|91UG2_5g7`-7H+a!4?tFzz6HIK`^f zOov-J?Dg5yFkGw0HH?Z)@j#q?EES7n zI_!mS@OYT7lVf^KW}h%sQ#Jw}i*qk2hLM5QYA__1LvC$~0D>p@s%3=-S|*1q{OULm zju;}q3G7Y)G80G{jD;TVn_?Qhkef<7qspB5I!vfB>dculJ30UoL(oHd zK)s(Mokd-*ho_NTUz(Ocn{jYK>h5&*@5o_`W3@{4(%s$NK;x_Ga!$Ir-s71u@bew@ zmnC1%@ppr$pNHaoK>BguZY~#qTJinEU(SW0Qa6RYe%w%u1O?eJKT3Zcbua9ar65R` zaajg!d>*pn8CGdLdz-}7?;+!=8s^NdDS7m(c!Y+vU)dm7?>^Z!Yh(agu zAU@joi2Wk6oN|3<5?FjLjUI5+ihhSvwsh-1)c70-dk*U67cRv{pNJ}@lA%fkV##1h zJ+(R7=QFCf@J(Q97xX{29r2D0${F5pw=_7G<`0qYf2$+#5k@eG^$9xTL&x0FzrTDO zs%*{mxM#jKWWdoLd^&*!zf>5?UtU47j64hYv0vWk0Eg`*f`BdGQmeCtaSRx;^65Xk zN(@HytSJy4yI!eA48GH7+vbD-Hh&#J`$Lf&k~D~R-y3yl=PLLVpr7Qvn12@?zqx|` zDVg=-ea_20iDL}l)6JpAK2(MA);Dw*{V|haI>IadXRLGmIT>40!UCDt^JKnke@K3K zyE^`7ryBBhKMto;qKk~uE3d6)9Z=p@SfGP*OZz7cF}6Xn1;C6`GU?S0)Z9N5Cx7j; zyJaJjS5IF|xkaQNde}CqQ~uS(4}S+cByi7^ZN?%i`$sy8)Ji{G58D;<3^w^7@Opo% zsfHcXxfw#W>l3Z-6C_TwWmHiNFW${h@Ko%K&s%6b@z1CuXGMm?gK$0ca2wc9u^I6qYqJ%yX6 znnVgeXK%3$D(LEk1MB>re;(9CYxwh7QPv2gHwcd@Z>9zrFe_}|z<%%#lTyU}avq|s zwC!lbA=9EBWjaS0Nm7+O@oR;5CRk2z1X;A%`l+IsL#hm{!dv@z0>k}=$uWn|K=&-5 zO)m13Ze1zC-zO17-_>#VAI{!}EG+t=EN1p?ts;>78@Oh=sPrj3Mnj4*ABP?6(Ft*w z;#I$669SyvI1Dg#GvP#D*N}2xN3@#5>JFseWWngxx@1=D`VbjV5OTgchRrUY`0rp`-7@HDdHr z8v^X)nvAT_><2o_9={$W7R%S3Mq<2(ISzR~mr@FI8r#5t#4bnARBK#*)IAU-Lr#RUb<$bFWdUEYYP@;9H!SZfmhm^#n%zk_v0_rzW z#!fBLr3ioI62wC%Lu^ijgL{SFm~dLkBmzQ98thX*4$esL)0fhvM9U{W=Yt z`c`n@>2=5m&+b$T8ecZ@C@HSTB+;%<=}>QTtQbm{q;6xp!!iDMS(HsMO)8e%f2g}F zQSEzKWb8f=WW4Po&1C#-z|jtoNu|nC*S8m+nZE`rc(o^e=O6L5j)eVGY_(B(MqnVM z;z0~Om#hj_9y=j2g8U0yqQ$ft`2zJ2ZzvVuMEoyyi-9S1HC(P7i?576SQc66L|X&d ztwcPT+4B)u`XWtjf9g17s~^$*pxxu^P#8winI)uX>T}H)Lij-p^wiHxMF{WNor*W^ zE{-iQBqui;WNpy|XWRUb@M1Z7O&b`Bp2+W|ogKORyc}@53$BlU{fVvl;?CzMct=6N z&twxxZPvc&5eIH)r`gHzQ_O4(4SWnggTJ_9+`3a`JiFozJl9qB2>Kw)l)4RG83|O| z00(0Vg$e$VzLwR7nq?7=ZNe~_bVDJH1aVvrJli*0{!+h8yQ;_mVda%rm0!3kTtOj^ z)BD5$n;ZS^s0*9k<9nW;Bs@DcbrbwRY(?z4xtarrRzJ6WdL`)jnJ^?@4X&ir`w~me zX+5K5u=;Qg=EXEL(XXb{D4{~ zqm_G@QO%GI!+7MJI7}G)iK4Yban3>TDBi^y2&;j$xhBqxR1#x`=_DE_e0x$LYyykQ zWDFm3*I(*Z>H@9-*qv``Et5ah5uUJR{P}c`m&H|XtOo+=m891n%KD1qtxxn(`mcNk zQscJzL??#XcqeRqSH!s&R^f%KF_7Y5l~Sg=!D)<4>>s-s+;iY`EEbHWvHX254zjW( z{W0XtoxZueoO;tn-pRX!3L6{%=a6)c;1fFW@OA?#!bOBxxAk&=&{gWmt$)ukm+JQ2 zk>`LQeU)Jq_DVW9+}QZyX$(aV!ox46Nj}?W*herBWc%5E=HvW~S%aJr)cs+-9R3kc z*#Gjav_HUE*n<+Yr8>2}hVRBKB8yNaOtWNH3!IVj;pfj*F)lX4H;^9*&`4{kr7gmV zO;{LSOpyIv@(AB&9=aiE#aIgr(eKq$UP4#78Y0ESi05&eAK$I@U|NG-CueV6Fm((ylGSw%sDaCf+6f@?F9nGU`ww?RW-JzN^q-snD}# zvvkibU3@el?=s_YtMzW)g|LAmX{sk4?hArPmjnC66p1=fU6f8VrR=HStZQx9itVZD zA@K$Jo~ykfDyI!~Uhj0?7!2ZUp63rz$kP+b+E++gI|S_TiDfuxAh#_T&8riQ3%OE- zkL@M@_%W*|K26~_7ni!nzdJO>GWajQ$A+p(1SJ+r$7)ObAh(>67ZH6g$C_I-D(W;u zLjuY`gh^Lau#E!w_kRYI-qR)mBEBo*6o_xzUP0BsY;Uq@oczdf4a0^dYwp)O6URJC zT4!3&aWD>RaM%sp0m?ztMVnf;>0acpYi{RT8||&MiTK_jyv1b9F%H?hY4-j}Q?}#Y z`^9CHy0W(bccE1labt5;z?ryC!Vqjc!kLaDe4N^g5ipiboaHffxI%a2OWSxMR4?UQ4jHh~gK1`8Y+ClERkxdFw%F{Jfr!`|XoFrL|v* zNHPcDr+gNXX5s)HwI09fP@nD7Ybw@&J#bVFkTdnw&#TIaGO* zrCffQNiMq&Q9yn~@dvTaH;9(2A7}pPMY)e0CkMS8$Q}uw7WnM;Wb0vQkSqManKc8E zO`74y*o+xUJ|g$FD4!I@xF0bX_w#BTK3PsAD9&Ev8mT~fb0~0Aqn$cVXV*6^d9-{m z*^5HVHY#;coY-tt753vUA0rA)?4WP@vr63C^}%oHQvpLoVLgI>-hicx*>4_%=}LQJSkY1&VmdE#_a*>S4SoVC0#%E4nFffJK4~`tFx!X&yL6X zrZS+EROqi?ecn1!z7Kcrom%QwBr9#RCnrViTReZ98onBMz1jnOeA;|}I*t2vb9!#+ zejKl$ekSnn%B+-_U=H~dsy%NMy&)gARjS5y?uewZ+2H|V+a{~s^eK5>sr3k>^>KMV z;`bP@c5K(rz*2TKDaN*nY|kAxhbfTI&>+NH*K6peEP9YEzK9Rn+P;k9#rVVku+QPnW!r({F%XU>y zW2-cmlbPqT+sKxTr7%digIl5bNmK6T- z=bieDFjN{iX4H2qnzfTZ#nil|1ZXQIXGexw71B>6bbmcHHTHIFEUV@k@a5|9%v};< zAEot~_%?0J4(}>q80^uUv6hgqQ?KYTAV0|Sati^(U}tHN`D$&8466wHf%+n z^P(_uFjfP-Pn@I6pmw}DHh|v9w zb^BoOTO_Y}e|(KZ{S*;*o@Ti(3!i0CF*2EFE7<^&6MG|G=x{4mFnb(y;kJvVorIi2 zX*ySw;f9#%MH3M?-KKO5QXwOEh}`rPiKKpD((!*mZlq6S3aXZ4$NN2tystF)Z(0rI zQhIw!@ZKd=IK$*Tg8l`N#!WrOwH;!bgnWCiua4mAwbO-M+9fF!{2fb9Odwo@an;Vt z>VgI2wJIte?ORQ79N;0kCct!6RzGHFdZMilsyfDec5+ItRu~~N^z(4f%`I0rjE(0| z7M)sN`FuAlhQYU-saJb!mtNzr(~MCPf)5Zv$sKJ-KHaE1JXc2Z$xr6>`%90{Rh=Zf zAcNu=H9C&4Qo(fI`Lg8B`rr)+T%bRjtSzh9lhWn0$fpJmIz3h4T{9&d27UvHUfWccDa8T_( z`vTd}43#&GuLkot_@OiF2Ul}EfJp)kb(;vmh6qxq0{#)F)JA;dJv0vs-|+4JM*FUd9FsTe`K7R;p2(y_(0)}JC z?;|yw2%3ne#Upnu;!z>m>uq@b|B2&gQH5NDBn->1IuIq)`jR?!sYzJ(&y@m8@hKb$ z5*X-~RQX&qE5?>wd|eFCJ#`8ee?q%Ba5=Sl7KTrI?48I~g^wpEy?OqZVqJWjTiE2d zd%B6-YR9jfO}6IWC0_hW%5G8`Ez-j! zSxa(Kxokh?pi#}Uy5<);I%j`cJ*AcQ~A zivL#FUhg&@mTLXg^A$7LF@QAKI-hQK?-znv%KyjLH%3<$AnV3D|#E3QXr=fAtyuMnB)iOS&#cJbU*XkOEB2sXlj#-P6;1Oi;f?}rW7 z1_;pso9w;^dDdUJF%GcHx*Ur<;9efa%qGg#CEbhik@LCjycCbZ;djI~`~tK!hW8iwRP{wH zmuVWGLW?YwAu8LpE!RPE1QYZGP^1bgWUlqHQ7<&LWo+`N;Aw2~eXsKrotdff8^hgV z-1+nsW{Bl9!H^z9U!IlcN8pJGJa`fl)~PogH_xMc=v&x@c#?$Vk_9qNtM_*}DKf2c zYZ=hd7`A`qC+xK-rK$^a0WnKQs3xguWML{PQPd+U3XtM(Iy`N&$hoduS5)#$-0HAe zocAbrP~x_V*Zl9F`W9B4uSnppA>Yk~nJhB7w_Qq1{jkvcRD#*{8ym`%h0yvCh13$j zYCb{yVVXg?q%v?(8w1oe`7nST_Iy~iSF_}v!$Ov1ob&8+8yB;o-F~i z`M28%`EGUh+bl}o3e>%Bx5EgUqZ7E)!edpp0sV!x%_`~8oU-Ei>NdAKkLvOxzHL#J zcqBR~3x;e!se^Fk@4w@i4+3=fk?7N>{J1?8!D75tVB!#R34s0O{ya5t^9YgS*i2!6 zBj@e+(8#QsgyoT@`jy8{hTcq-#{#w$=R(YwcD*$E~F6dqgxx#OI=SK zara~G$+7FV35BN~G#z@YF(0Hb$W7qTjC8N3G1LvzXwm!JtxD}sAVby+GlDhn7~@In zA%4E$YiTcWg8@^9ku012ez{F;#BxNCja64`)PR>eb!MWI$?5(yO@MYI8q-|$yO{S7|pUTz2xs&HA=5A zfPZ9)cr8Oks%rZqxL0Vdp~aL_pBUOvTminNG16ue z1>#mV4s}E#A4~BSBXRC{7%^{e?u;W$k;&)A8{MEh)}PBIebv#F$K06)?nU2}LXVhc z3GuCgt7!Tn>T8~`xoS#Kp@kIE`@! z{eD-2@}C{j0FsB7&K`Ks$dOc8pm&z#mZQvp91vlbf4LbAFdLzJ9E<}TWONGr2DKgZ zY1z}R%q)1EAP+(er^7L@#yBCtitb_b0exaB$na;F=)YqJW;UFU^we#Gtd7wJ2c=+k z!!f&`MG(K&Q2h+y`@0HRS6BLj9B!aW2jBoR;ypa_!@~f6Oguc+=_tOq;WEA8D+t60 zXaN}&G%z2BjvVpcFv&ptGw^_&nO|u;gW$>{3Myf2AVeJBY(Xr62iU_GNq7j0RCJG6A%{6pS?HuTH_g>ky~wJ-sp z%+iBYfP~ejxUc|i9moa_G$hWL5SisWQC^vA9kFhX5EDx|RMz>F+csCAqNBwH*Fma> zzt}ce2O54>CI5ToekHHcSg8WTx$*>-18HC*K*c`qtvcV!Ffyk=KCdGO1Z^J+=rz`l zp+}wP)|(jT6aGkXvi1cC z!N<%5465KEcqtPF;@Feoce**`bh19ITt%3E&qBD2K)eU9RsZ#nVp&>!4+8Wm)cW!m zyy)4jaO$_Mt)yV6-0NiMKn{%TMAq;gI8N|okHOFz^o~0iOYqGer;R5EdQaBkYneYC z55Vw>wVrRd=OniManu`?M_9YL_~V3c@@u>JT{SbxA8aJKOmo}&~=IaQ>; z_pt!{0Ja4~@ytT7mmxM+QI*Yt`$RcalgsLcb<;WTNDb7`x2u$$_kEW?&daiOC{{s! zcOsvNi~iHpcE&RsHagZ3GNLtkDai~vM5xgT8b0;GMKvZVYgQt-vKh>AV7H-vvhw^I zQCu9mF;A_7E=410Q;h=v!oYOVBKi{aA}&`c-X-{`<_!nd%EKk2HzIA_7`{)xY_9U^y%q zRLIz|ZIlUdB_yR2u}*o?m;H8%zWi_R2S3QF4H%^>=L>IWr?mSwL4oi{kZDA$6a!4L z&bVaK5b-9=WS(QiC=sJ4cK*IyxJb1OE$Aul_=aF`yxt+YA>Kzcd>9&zgvJNxC;>CO zV;b#ns!&4jg$7~xe6^#2XlJuuiapqAUi{SQEa*>{j@9#Q`o7Hy-UUO zWg25TP41foqBn;(NkDLxBk5S`j1tu1IEldFo?J3IL*5==-{&?!ivjc>{poSEg)^}4 z-qyIy{kW4@UASqSw!?b;FSK)bC#ktBMBvBAql8apg|Ms?t+o`Q!E+sHX7>H(&hpe|S%7X*k7i#=DjT>+;+ zNFT8$L?7!Lrc|pSfEcj(d4>W?zjXzn^6<-9_Q4*LKF#b!PCFX52^J*s)~u%U;VVw2 z{?{IAT~Y&AegKNUdChN8XkQqTIGKqy)Bt*L%GA#^A;kYIExS`3f>!rrfExttKL`QX${AcNiSYoY zREi7${{QRvd!Zq3zsiK&^Q6%x5G4-?7Lo#!JvN+I*kD*I+8`O_*k-RMU8COFno)qu zugY%{PkeMNOM3pe-W#2{n-^PF%L(A60ig3;wg(v^E5<+?`rthE_fW%Zqv&?i8Y{qSuy{+J!R7b9R zZ#|tYJWhmUi>@WgN;Wfw`Rtt>(Qi`L#uYPg{1mv9b_>QGqF^4C zc*xQ10~ZVeeOZcjhQ5P~1#WNaKH{Q3b-G+Ru%YP3#K89xqG3?ZjQ^5T&+ z3bqR0<4a4~kx#E&U2ygaO0R?Y%f_Z{mdfQEA+*Or8J~Hl+^iza4idft(8&FNQ zTGn4d6(y7Ih>!3w8v+tp^{X0|xGu9hFO!}X4H)OOHqW3)+tmY~olTRSO}AF8KKDJs zN6BfO-Vv|av{Yu@nV&B`fem}!Uy+mC4rN~axYLjcj=zbE!qMh6eKwQ^#zHNPYe7Ev zCUk|zWz?km*V|*c*b1YcRLEG&O5X_YB4flMcT8?e{~E57B<(fS!SLIzo^y?H%*xhn zACLz!fy#cXmD1)hx~QG<&i$5;z5SvtG+T7OXbSH>jBbfnTYN4 z`2CRRBE8p--|BNY!z0OPOY%3oC6jzun%7XSmkZnQ$Vgh=O|J3oP-3G_} zEd3-QQy9lCCg>Mwm^!ds*q_dycRa{{pKYFV-yH9G-WLn&NRODgn}0+%V@3OB*q^)% zfB&Ct&)ho5Gc`9Gp#ATsXg``h zP}6=BQ`z<2={=<$$}_)VnX2i@Sj!Jj-`n@LGQn8hR_fcOK$Qmm&}qExZj$S~3VnW0 zDyf;2dp9GcE^!n;+t{t>Ghob(Zd-g-lgjOtcj-OD{`EHfIU*{>@GrOP`t*yYY$pp@ zzESaZ_sdA9&0Z=jn>|VwGqt07xrN6({fnfRtMEeiqzCVcd(Yxqqxno3UWYQm%_L%T zFt>f{+ZF$do)JPs>!bHzO(Pm=__tu5*On?8R<~8o{cpfn?@q+P@HSCKylM8p&N8y%G5qL`_ zPHF+`>F>tEZtuRG=A_REVTG3Bpae@7XjQGltYagCp*SXbWP1z@XgcALN2)3JvZ=Q) zQhGo3udUe!w808sk)aCz;*0gqQ$R?YV_JkIi@7%X(!9%V576!!%)B(eotZk1@_jiJ zlzDyb{4dW6dK;oUt1nRg0VY++0*Wa0+Ef@OHSQnCyiD=`Mdn-eiUGm@lCTn;K(1MR zNmzeMCf;07rV{b`7iA>=t)yQQ;s_A)u`sZ6hsZG#@? zc}!gd3L`B-iw-5I^o|<8(vG>ln~!;xKw3woyvSv)yzSDUA3A8rMjN!cWd^BmZ+dRo z!nAjH>#f&djx3qrh$s2Hyq~!D02ApmX$kz>hG1?vSKlYJPk2TSus=<>?gAhWOD^PU zhj+Ij1QG{b;u(%{u{2;zOEJFD7Kz1VxAH$NO_+5)VEd}PcKuWublGUsK71ZrYsGe5 zdd7G6U7-@l)7!S(Rz+YEAbr9d#R^wXUa#cRD%Dn7ALJCC70ODH*MH(A` zp5bs`;0l9`NE6B+o=aAcW^&(cR-onHX|JTrD_DA)0ci2!t~(1_ld4Zxv?)(qX_h(9 z@ErB%6UpV3>vhSqspZlO27Cm6;J5 zBnl)G;scX_=(Mg9M;Tga;3!334SuZJ_Q1tT9xWXv4o+TaVxCm7n&LrP*a(LWM@a>X z6Kc*QlMXKmXcwFZ7Ng3@YzL@;)h-HEbpoI%SZ6W1Oly>mHrPoIJjbT^v8a6! zT`}Cbj8(?_%bu8%PDhLOs8}2ahvWP8zV~~i48KY=hG0xW>7Yz1P-30G;i25X8J|(L zeAZ0muQ-x)mu=D|@><5-g;hIyHl+*`Wluc(XJ9QLN3tlucf2NS_D6z`wK$ey7o~ zpYU_44ZQC=?$fzAa8`nFmQiRZuQm^L?9si|+nsx;P+d_FS_RL$hb7FCf5WRS4J}6W z4GC!lO5ie=^Al^PR)6EJ(%d6Q?nlHP)^YvcPq*_={9n-GS3C0!u7bM8lsK4AUXPl+ zgjb8`zFvUxlS)|vJ*n)G8|kwu&~mxq3^Ubr{x;*wnej=%?{(e)3yZ>|opN(T29{BI z&JUv~dt^ZsO3HV#>LY#EnL>6wkta*jeMuSxpnQ;NKg(XOk>dm7|7MtI{@ z;OW{>ZvC(UX3g~c`JAS?>1a3e8o1tJZ$0}SIZPhdy#KHXJwtN*b>;Nu^tIX6ntan3 z;qZLf8K!t^-fCECGHoZ_#J9!wL1)mQg+Q}xIB(4&G;)ckyj!^mH}+UU)bOD{Gg~~u zU~x-cIsv{DeJMvec+v%(Hv7kzogL1cNjB3@nV*O$N98uN6b>6dMxYxTN8PTvTIHt_ zPHwVSmhIUu$ln`Vo$D1UCkIW}EqHf*=dCS&-Fx70rcmGAIv+lA{}vU{^{cD06y!^< zYxG8M+#E@S`Y;Z{>+zZX)j#+l^6dU-pww=Y(gfW4v?G`ML)}An<<d) z?dS&xKVRryZme9_`6CP;^wnsN?2RV_E=MIPRD22^fdR zf%EraPMLg z-UNU~j`0XKFt#3xRl{<#Y|K@#T)?*>?MPY~?3izmEGP2y^%YRXLLy3Wp;c5dCJ4$b8fRZ62xy@kZ0Abvxp*uLKJ9pB5P0wuQ1SV&!sjCLh?~fgap2TEfKL zMh9ui!(u-%^`zW7KV3K#)wRNP5$fa{_ijCgjb}*R9H<54}Hlxfbz&?=^~iCCsJ)QziAkPuioC_7HD^pdyeiZ+v2qjrNC zicDUYtJeXyL~zKQgV7Fjex|cTQ60c^s8dP%hf`osSL_!RxD89Vv@aJ{PW1(|p7SU7 z#50XR6oNWS$rPI~PkJEqGht^i<`J!BmH5CVP%y({Dt4A&ycWSzG4vHCw@sXQ} z)KAD_6{Tod99j^NX%OV2Ff5p93N<2H5FtJI*8||8n>OJ3#-YTmf=41*w$}`QCos?G z(Xfkh@do4^He3xihAUX(=HGB!F!Fs7Z$d~G*qU-t9da>kb|m`+B)+xBFv(`R4W1cp zOGN+^_=OUtlBL8zp(NDL+l~)y0uov}+0Q@y@WJNhN~^ zuK|yP|>&JrekMl_|eeU zKRyW|n7j&=+Lqe%C69;!;?M@TNEkFRX+hwi33=K@sps@2Bmphx@SwO>A;s7iXP`A5 zi$>R4iI>jRLJJlFFjzBSrqQeH{gN|Y5ZYa!kN3%k#u4i=jVzU^SS`U}Re!;BZL=Q>Dca0ca9uQ4sAr7j(UMy^bXQEm z98p+9F}D$xm<7=eP?E#Jh{QpPC`kcvD)OoVAWLCO_WC(F}NL# zD&<!a8>fde&(>TGnYLF`1HTX@uSg= z_{d)%iXtGDxeLJlZyw1%yxOo@gS!A|5dXwl#8;f1U7bB2mdxXNkEXQm6U= zc>kVcTd(>6QeZ$rGV%hN>Lng&#G+_^(M&=prpd`{nGb(!ldaXz_OR~u(GORafYtsa z{d%8qjWPFn0qSr- zk|c$ICvj zlA8sFCmn2d92b(j$e|}F?7ImS=;@ikU7|fJN@NSU3HlIUZSD!q>K}sydwhq6h9) zUgN9s%Z4z2-2>kQ(bpfWUt@rB4*eQrZB+S&V~KHfOk_$w!7rUh?+mg@7(rHKQP#WB zY<})Hb$#|I+c>yEH9tg&3+}o;$_hvsMnB$hRfbhVZPp8z)e6*9wO2hlQTg88jqN-D ziw_>Qc)8{rwI#4N%N6wf1y4>n|ERunWVcSZdoWT+x^Jsgx_T8usaryU$}lT=+PbFi z*)%`t(~MaEb@1IfF{4A+KC$by#U;p(%k_S;Xq@7|@1YB$F#yw_C$_Mva6bNaY_e||;#8)fjQGVu_oLlh(N{m+Nf zK*kwJkY|;l-=@ivXa@6!rm>;hp{V=1v_OGKaJ}0!hr~*X2CIm;1dd0;@ zsCGoDL8I-yCzh_kYuSTaT)B)Nfi}T2VYLksfv*D{=h&&=Q(z^W#zR6fvC_b7y!hY! zo<$l2s0JLXUyNLC4h8?`U{C&vS|I`t0s-38dn|vX)=vPefX*G*99(+03A`Ouj6VRs1g{?Tm6()hsnwJjaA1hj>&8ol z0{3=-OBc)A5!GWas~b~5DbLKS$Sf&kS9vH3@zxzkqiS$Zo2X`Pk;Q|`YK}GCUZEay zp`5Y$SdKD<>dox2?n=9{)$5l9`!2z4exjVGcjl{?*{;-I#B=T6fa8Hqgjog=4#d=; z@#8D39=&Eymb*tYxkn%4Y)(SwKA-XXnXT5JA9PQGE<_RbSDA~qZ%Fp24N6QHKAE4N zC2zOIFm)^Ee78jNgot6{)T?QD04mrC?tVyVHX6djcxjYx;uF>WdQ!(oDAv13lN7{0 zZ)h5Kjd~dHIZ##6z``oT2f3kD%^Q4w&wWo2pf9Q@p+r&u6q09&)jf`aYuMv48UeVU~?6z(eFX($ZZQhit6l1vV13Rm`?y3$8M6QhI19c9HV+w zr1`|s-s&DaDokpm^Tbj+s5j?;wz3y}kHx3zJf5GUKTpWeuHCk>L&F8Ri_l^Ir#1O$>%p1i4l?_g z+a9MxxHQauwtO@>Y*XM5*_%|Nu9|Cr<7c9byYB>5nFKylK{}#-LsC&wj-`DY$ZmJ4 zW=PhJ=$r{^#>-wp*IUWtF~f+wz}Cq5T^uhLE9RPAWF? z?@9=cB_I9)N=k5a7JwT%=GpCZj2v9Jf$&m6`7XjV_Z?qGi|G!sI8dm5PnrPb*$5DM zDdu7{;3s6hxNOrx4x|w{tVJnR+hGc*!w#7vxKNOm){`@PIoA%_jkHmeJat*$PY~;@ z@PUtlKmOzasy~CpMa7dePbID7WyoMI$3QkQ*VhdpA5Zu^MBl6Cp!bwYo1iC_zetmQ zNs^NCFkHnUk-{Fd(P}hSd)aYf%%?*rW>tO7t;y4XXiy+`JN{;st-#}%Ox|fU2D){e zoQf$`X^sO3ZSoEuqENWbaxBVraX)qyQ<=eKD=5NYO|XA98(jlv1J($d$8qTlsCc~7 zH_zQ-k~Hk3<@QX{s$D*$ZF|$~AMzJC(qvw^%l_GBAGrwhn-$@2#09BfRf!o zKj8NaW4Wfq~jodPzf}Zyo|sUO>4<2UlNo+ZGAMH z>f}`LEY7==m#LX=o1v!xH`~oYgdjiO6h>#@uG2`;t8tJh$51hRA;3u`1Pz-O`=GxH zvvL@CL96im2eeoS5)LOHv%NSdfm_;`xiL>W1>B@<^4d_I0z?fihs?_Jni(b@m^~kA zz{~)3yybhmrHjBum3+;|+)J)d-Umk-X!H$7Od9GZFthtLJ;pehz*$j=8CELIl^R5h zp$-k%2*lJCmM6)B#Q_szIg4C61QNri-$@lX86F0@>Q0~6)N!Q&j#Jgdj%fu-o|3QW z?<`XO_4&+T2t;s+J8ri=`anxGV0pAr>(elBscw*T|El%L3WynRgE=H=Rv@l2rUhHk z8XHmboP>|CD3ghFM~ODwUFtOlT3+?QA!ittfYkoH=FrU3x0uO}r4UQ< zPX&LUkp=Z+5qOB1`1?I=`RYP`BvTN5tLNpk_kVV^ROW^MU~_vf0OtRTwXL)S5c}^b zyq}g0y|s1;a0mUbDZJX_Dg4Xv&`$gxQ#etoA}2UxYDSI_!GG8hw7zWu3Ss|gkodj_ zsT2K$W&_|sQe$htiBk!#0Vw}|b}QR8p!C1qxpn)+ApdtSrN09>qWtr9WqW%iLI4nu z>%2szqW^l^EI8)>l}kI)aiRkg*IH6Oa(?umAcrUZu{)1kaHC-?=VVv0PsuPzsnAf- z(`4x2R*!5DYrlAZZ6|J4?2f?LxGcK(N>0Ln#Rqv>M+9-a-3yD9z9Bq}Y{=;O8`?v* zg~5cVMptTH+xs%J_4jqaM}^LcGulpBe&>O6;WU$I%f}V15}9bmKzkdwurOSS9C`aN z=czZNPeAlTU%#hopRw{~g_$&%@N=g3{bJbx3F}gvdkPYgi{|>T#=_~34M;jO2BEjN zt%~i_s9h>mtVS#DXhuQ0-8rarR9{PdWzYM=$^tH}Ewpa{(;-O;yZUP)YY*g|`z8UJ z&6I_QgF>U-5_4I1sM=Vd-`~G)g+?5;r^}L!#kooO)HN#G7{c9JSgN`BSGxB04|bqu zlg?E{pZ3IEgQKTbe#J4nzTBhs3s$crK<$q4xy;4vAKy=jB22m5?{?1`U&9jjXp3u4 zqnH@CM7ye2;mh<~nyoYZ>=!dT>wTBuds;`t`G16ZAtg?HZutR#HJAKNJoqb485JLA z2p1pji#iH}COC%mHHee^>_=2ARMCmL`*V0*_qXr+9=_&p!~zj}NeAqa2DG;H8CaIw zdXa!lS5Pd%!?n!Y+L!vm%>BnCo}8w588|eIVqNBO%eYl#N$zBl=Sq1=g+)_~ILv&J zh-RXlK?ER!#@3fmy-4hl&^LHEI=dMx(%~$Y)x+6o{e4AW{Q02iS6%D6$3ul^;xyt~ z>H51(Kw((L{#2v=_ZZ$EtxviKYboaR%ZKD-=l4vE=C&u4teo!le$(_*PD)chFeyi; znlDsFmx<2Uiro$%cBgs?w?3S?AJpDGCJWs^xU{HSNep*@wXt!CqeMwu!%A9yT>S7m zNsS9u>O`q?^t)?&68nlUnZkRj<9scN2jWYClHxTb8r(0SNr`;twuUcYCYClmg!aJ? z9;DSl2b?8R1#ndTA{l*&zbQnTm?KcipWcyadJ&s;ebq*Gd3)t%BE?^LvzCT;p8^uH z#UG8{d=a~WIx~xAY>2RlE!(COWg1&N${xk*Yp0ewTWW*5PaiaYf(nKs>7Eje7V(Bn zwQ{k3bZRv}8{T-owZ7OY6?wYWze4K#@$-O#ST;t}y+YHCm38RXbiv10GcXZyTA=!g zAp?2E&$=rNUBEuO&5h~! zv-xGeUtRE0eo~(dR$f^k5EflxxdzVui;~>!_r&+f<(N$yAgy(qX7ZBHjP2OdkM1S6 zz02a-8r`lCW$9pcyFo($ zt?wJfu6X=QbIq(+n>iA_VGVjDg>pAL3R4}_wt|bR&CIr{Y29lu6Wk!AMUNl@P=|CX zQ4|Khtk>!VE2fYv;<4rPcsLGu@<#crVh_So*jLaxNr+fPU)lq(8@+7jHTIoE{b5qkh12 zke2~S(b%w-$jb;;{JnD9Fd0bL3vcJ4W$5!2;06O@Pj1leH*z46N&mK4 zDl1D&CQgW)w*ZvIa10&WeJevl7N2#O1wMro>cp_H7{RP!v>Z^8TJ58#(!#2XZVPKl zE6$6cD0}sD&4@f%aKqUl#{}|LKN(su*a(IOcJdx@z!jE2w(WLj()A8STg#*~Q=7U` ziAzqOk`+@!(iW2I7acblB!Edoqf#O6-k7=enP%2Qm)G@LW6b$_B+K&kJvv^705y>I z#LT(L_C$u5lvyX3YRH1u4c@dpp4NKQ1AJokpV<=xRR&TYcGtT9=)ZGfuqL$^DB0Ns zKxu|!J^Qo_E_750V$L{W;<<+93i)vb{>TAjv2z+O=NN)xT?7*~h{0BI9uA8`>S=^* z)!S7Wb!bjILkS)YeBLfF3Vz&90)by98RbMIGG{(W`8hs5D@p3~X9ZQcwbt5w@BF`* zyYv-EIEwYBOCew4)IT#?I2LO!)6`u_|C$bkO{h((yKWZk5EkbYxQX#6!=D{fb2z;t zaDYkLD;Mh6RXq@rx}i0*=TJna5>@9!M0S_HW{B%#qgX&Q`HX+M%wG(_J;Isq5YX-#{bP3R`~!_4Y%md&U_nJdua zh_1n7W#x~t%hM0}8=c8RKn`nT%v^tO&d#H<-v7NC!f_tNXb4?t-#3aLGrIVJ@W6AB zWIG$`@x*4Snav41A*8`?&JlN`Nt7K|so@ujJXoA`XD?O_=A$NE3#h5A(o30@uJ~YRlOPx@ z#dxPT_71$>eC>PebL{C0wt`O2a6@r#=9Z2xEg~7^{J1D+Sx6F{4GAbJ;}ds(&0^z> zbkU&Q_ow&QVS(EvwrwkfK(7R{Fj4mq#b(;jwH?u~7I@moo4>bxujzu$zRC<;9l|RVVS8%QP18o1xP~X!$p;5s85TKrH=*`;vfxo_173MeDoAR== zodQoaeYohDpP_O!L z>26g8i4{@O25b{6@s2GLHE$#N?6%{uHoz>JqkKBWp}7f|DS}$pnW2@XD^wT^be6q- zdG}Qb)X_b`I$ys-d#g?sKToi1{99o2N(5RGyoy@#fV<^LEBAat^V9sZ>z5z2dQTQ- zqgcDna&qlsfNcOfX*czmClqeQfe+}Gz*x*r337b88v4rm^5`ysWCB#V*tWwC>Z(18 zwD{CQ7)#6D(BeE}12}oO(qI-WAit;zDWS>KgZcVcsMQ6_)x`SX)}M1-?;bBTVZX18 z;qmO8k(R)Z_o$o4w1@Nu4Hg{BGKWyDgsK)EO6zuWD7G;SJC=-g|a zpGFh>W3nEv%9L__Q={bHOUEQdb8}fsN~QCd`FT3d=604HVIjtOOXZS?ZA{i*x~50L zp|j=CVx3w9GvPSXO@N+T=4!7Iq6=o7qrMatI+vPa88wD6SRS?sZu;1}W$5bQ2Mo-p zF28O(A+SO??nC1$*T&3kG4D=>bycIs6`Ln#;}`C*#dYci>WZQ%`f-z=JZLSsqyt!P zv2j*c3%~czRg!sd z6bxraY$ISTSfYfPNIb5YgAL+pV&?&Rka}-d7pKi;b~>-Qmfh<=Dm^=6NRHGqO6>zhCBy4o`cw#{Y^jnw5c336ZBDTor6)%lV`oU@|S;|x1taX6eZSjB4Qu35-~ zCH5v0>*=ly_<<7X+Ov``Xvu`C`ZEryshKM=cem$0sti}m1WI~-yRfnAWrHe0cr~?H zN*~=PZ6%{QAhwe0x*Hfv#TR3ps#2SgB)%dI%8XrRB)zHru;~RHB7zfqrxeb2;WiGf z@03;{c<^1)62A4r_`X}H(o^nVYh1i-eS^~ckjKv$N}z(6RL+S_a51q(G?8gw1y*^O z=HB0`zs`U5I7;7}=vjysNbd9^e_hp&jjlENty;In{06ea^R`SbZtb#(8t!>e2yJ&9o+xZ$2T8@yH0F?Z(V-D)z@7Pn|ZEUub-2)|=G!Jq%_clEBX zu(j#-ya04O>T%FlFj5&mHIu2!yxClA*RQ;b=Xvg+is6j4@AN&=ffne+`TN*a`jIiq zt$2FZ6r^iEYI_v8u~?8@I2vo+-aV%vF3m2 zXo<{zt;N1MG>QJ(5~eMK({)`&^F@m+BqA&UgBz$XxV4lYmNUn?dka$GmOXl5Ev0bF zvq{rFUeqkIws*LC)mkO&()ZJh!(&`IVZNaD7!gaT>q)u6x^}6n|A|*C*s8_ZNX^^O zm2T>AYR3Alji^q{UvfL|rxV1Sc%G-F$v?rn)zg)4eF~`yw;O0)+q}m@g?~{xC13B) zfCB%8b@*XY4cB={vq^cR#dYDrW$goz5=yBg;#v*c`pT#v zsY-vEhX+8-6kY#TL{S(T9G>dDc0*w?zvFFBV58~1)defg1ArpjM5)v0ttGuXj1`ct zTF!vg2LyL1sX9#2gKrN=JJHXd17i`UCr+4{6C=WR!s-{n=HQ0qUmIR7u)oSn z^6h^>dG%c@uMRHU6-0bZ{Hc-%qVBH4!uDytSTsn%?RsE;@PLL}=PwSyLA>?$4A+Ll zcIhJ3KY1uzKxfwj$@;q3v3a=6x52%@B|r^vpk*Oj$3P4PHS z1iLDoqT7*&9fRT}oDG?@Qll0cS&Ua7VD?GjkvMs2-?!Y@%DmWVF!+Zijg z{rjfTPzXl=3FbWn7-t##gn)3haqUagGNAW-YZD%C34Zc0H`V^G0jw1;q;-iKGq34~4^-}hmBN7jCk9J! zS)Q~2`76vYG6|v<)p)3nPQnQGbwr8fKGylCV_Oe5L?$t85R3!YwFF3qQVv>mIrGRZ zQ{W;$-LLpKVtb_-NsxVky*!LUY~j$fDxR#x=W=0<_b;l%D+=kE4;oB#-yF~oGfEDq z>>RRTwE&a8$KGdn4R)NA+UV`F%`SPw4|fvnB;rY#An4=5c^$g5ckC-ckti7(LW6@Q ziLAzZAfD7;#)aF{`*}s|qYfXFlq_<#w!@n&4jfY7?cli?93*y5te1-q-TIZ_CQGM#Zw+moxq%8kcEKg+z7kt@=Fb{P(6!86+_ zfu)Td-E~NMzv1L4fKT|U86Z0b(mcirITBA6J-kh(OphEJj}$}+DvmU`6IVsbas>_8 z{q*ik$qF^XZaZRe{Tr_82)M`R{V5L*Gi2VslCGhts`!oEa~FbOrJi2}xXFW*#8Q5J z1rEP)P3W~&YEDMPPRhZB4p$E3HtvGc*KcYz^)K>7`}j~X4t0jav5yX=nz9bEVXdG+ zvYFHnterIPL$wq_tC=G=*J0|Rl9HvLjyqU6op83%CR5i&Zd8N0x2d2<3TER( zYf1kFHIKG^xj9-#eXli3HVjXb`Q7R#mL8ktOusEt8e71WA~W@%7nKfhb{9~9Z$G^p z+_AI099_48A9E%#c1Lmh{>Cr||dKnXnGNXl@Ri8mhNRv?8rzwzy|8 zm=KB3Ae&hk{_LC{t=8ocO(%IwJ{j(WBjre3iG31Y*_v7GJM;-6;7#(!<$TwB2l#b! zp11a&)vNvISGUTrv&#QPun*nnU+VaxZ6IMMI_8k4LgWi!{Rak|S^-N(*m{kFIRg&H z$C=vyW!4Gybv4~3z#RIQWk>}frrdu6!5@T}pa}m2d`-iU20gySJDCXoWHS>pU}F6H zSE;-Vn55wJrU|Kr44Cx5{ficwaV!gMQx~3_lFMNKe^8K%63-S_9NE5An`+n1TS!r^ z%55^lq8YYyg0b~mY~&*%51-yj!U^;7~Cuy@~b zWMMf?HNIssllz)8jxB}lpm98Mm~Mga(~c6lJ`!_#C;Wxi5r_nf4Z8B=ixBSMbMVBD zgcNg(YmDR1tVS+1KT18STqxbS)kj)ZOl!C{o;&Ck(A#_}rag>Q^a}WO$2UzriA8r^ zj0gMUmGu%hZO)i?w!4vQ{^j|QJ2LtC`zl|#0#LYLT-i*ml z2l^P=#8dW-AS@NlMr`ggd}v9g}W$P&2F_r6<~`MBf84Rl|u4 z`>HFZ27n1c_E6XWGXI_Nc&m+V{q((YEA$@^`MD3Ynbw^)5HJt)gpa>#$MV0UjSRGu{WF`;wxOtLA+L244nm2!JQDqhKRB>nU&K;WNMB0Be(k+ z=bRgQ#e$et@g_c~Nciz)862phfoW)% zJ}RQJUhllklE5vxksgVihUZoD^W6v3k&nhYO8!I>Uk?e!G)VdHOX`sD+AVDc;r>ou zPuPl3?@jLT?eYK8%T1Q1{KEPoR@LFAeiKF@PrWD*!uJPIiIni^!D}+JPRSq zS?ds`s3tfVgyNX_!!r%iHzuf;d&UshlwR!BniCvV)}91)m>F!(vL&cj=DGn_^{5+b z371V>V&!#yFTT@sO4pK9>0U%yvG=~dl-k!ksQq?R^rQlw!5wL+`93V}Zv0w~B~sTE zXX~`GCt5Qi+;ZJGgAoa0Q7!umgay<>1@QP-^<+qP|^W81bnwt2_4 z?%1|%8y%~Yj%}xte0}tudfuw@Rqg-l$KHFbx#k#iTsK8l9w>J>MMLukZMJQ7AG4x* z9Y?>?TYdZWJ)8lLeHHP=&g!DAn?rCXcWXv|s8ZQw*T;81ZKsE>mh))qV75)`9hKK+ zlc_^O_+|DAyGdCdJ%^SSd^(2j%qvg(tSU5CR@}es;VpV_#I55JFs^~LbXpDqZP1_e zModpTKgIsVV5appd5Pq5FLTQw{TepUQl#@;dS1n2U?Tx^hS%A`;S(RNcC@YMj9eGe z4x}G80pogR2Fk*>CwM%EaLT-n&%k?7LH0oI4nEP5yN0fWr7rB(>RB$06G9T*h`Bm4 za&=NU7UHcN8KCXidm6;*Wky7jvI#>^$>-Y@C4 z>=x1afD-~Ji_7c!d+pojW|P?`m)xv088gEb5h?|3b0|Fga5-`+*cZxaSrW_j)$E{J zn-Mu0Xkyx8&QUa4$1C!q?De?qIpjQssUas_5iLK?3uqRNh!g|`^wry*i48N}D+gTw z@x{uI4z*YHlV(im7Ap3{K>CyP9L5U;AO?}{w;*66B|TDK*)J;dkMrTVOZT;sAHmZ_ zkE)7L7|tqjV{ThtoIrMcGY_w-0I$nu?d8dc2P3KUEF(77L*jJa-`~@FX)|Bom%ALN zyJKG>!#K|`?00|>04weHDE(`G&aV;D?%uru$7*Hn3zKZ)3wvylmSXvT&kbMX+}nk$ z6<}*uR7Z#bcpcwB*!&P*6%mTf43#NjKEIw#Z3vh=VD|k$&!b}AHBq~qO4b0+?k;BZ zSiVSNFCKYYWEeDkt6{_OnJ(6g%$CTXWOtbKj_P)$Q8vkh$;r zCvBxg5Auk!BK<=q^kU}xt;}+WE5neLYrIBAEG%Jv>l_4`yP3&lK^9M{ucwu=y?JJa zTc-J6tu&t6Rj(->dU?^BWyqa9u%a@PB6eop&9$Iurb$Wiqn``?H?Y)UL$^cuQGf&j z5YW7sV3qQOpT!P)U_eqXEL=c_&A*v`i#Z4-dnZXg!r-+r=RX~7=%gjvposA!8LkKV z#zbMBcsObdUUC-2X!1uog1BSRY|1O~5SiAD8FxRNs4)$yNR_~wtx;$Od1}8gNz{(Q zAkEZ|!#G6s6m;-<+N7a0qLskW*0QgMr9=6Lb9BPzy0&Ep;}Rz-Z9D)VXo(+DD4GFL zENEo#Scq0mb9%Gjbd<2xNHnKpjLlJ}kqLx_1h9*6)rr=bmbeeU!__Tu4SYMaaD5>EQVzEeH@KoW_br)%&2_dpiClwzzy@tWrG)?WJH^p+Y#jzsdRg<*bWR`RVN~NWn{A#L7sU)5+(OOt| z==?hg5WYSi0dUl**8uD~p>iW#4<(gm^KaLs{hj}Im>}O-r{@9!b&=Lk+~~b@Souvu3M+}92$O8d|1F4S94q8Bg?>W|twq|k^7*)2za^gU zp#hs`MV`5LH>0!8F3gJ+dPkP``S1et<^fkFRaBs{1wOGhJGg%rzaa$myI{?KCP z1cZg?NmR#jK{K1J(DNV)x+ivv<{hXB8Ey2Pe8>?b$G&IwQ%p$ywhpba;h z7){hU;p#-IocO6$_^wbX7+kR^{Fu<{C4nb+ZfDpr5+4VIIWzaTPArwWXPNNdLjJq0 zpB+@^IoiO7DBov$*riM+*RLQ*5H?Dg47l$$G_DJ;w&K3A4i)HcwL$2ng78wSNJv@% z6Wm+lXPrZsmQljT$uEPxGr^b*1(j-V--reJl*{nK`AvjpiF%->OyDsh5m~k_M&Pf7 zc}(L;x{6XdX!|D*cbSr_lWMB6H9mA@-pMBdqiWY;EtmxpFZNh5HUO&*XXTU!fGq=E z;~XCcIvWetV2Zb&t>s4iHZrU`7zGz~Bm+g;nv!KG8T{N(YULZ_f(`@?+3w{WCXO81j{el{J4|bRiJ#{{+2Tv*l}fAb}y+KX4b0IteqWPPH}& zwyBm6k0I+-R$tQPaTTn6eg3mn1?WM(D8GRQ&flc>BW2x|wH9xzA zm1YUoF$^Q3;qM+EdlGslkQV1bQE8>Rt<3m4|Kh~n*JB}}kf}c)z*9l19Kfpxp;-*2 z5%H9l!?gI#*2BECiWV`AmHW)4|5%;$syOhaxijc|vq31|Qpnd)2Qc%^Fb;@*vL35% z_?!;q^`x8;B(v+KW}wSdCzG=H$8A#jabPIuiGPcYr$^CPG2chp1w0vc2Mlt9^|o5{ z!<~%&{3j-G1Ag_u-7V)o(3>qJxmU^~?RwWXv|x29?HvAr{!dF#dKnC7=D!IxKI#9F zQ=blw3=P~Z7Do90sRpm~4P1+Pu>5a~MDAG5>dr=BLMfW!KTN8htv!r>dfNWhe|Kvc z+yl!gIa#ZRcnw(}qcQoFDbrO&kBX)ReMWG0E<5$Ob-?y?ZJ~0`-`xqKH5f+Co(G@H z=)m;#a0Ad!hOe&ySW#JJS>7L$O*8k+3Mxo^z50`~&-dh}ttFK9-8ojQ1yR40FB;i^?%9b>WJyT=g|UkkG_lKbn0k;3SZ2;JM%U)otL+pa|JuU){` z#*3ze;m&I{ryOT}?bXIKLYa4{`DBa=e`XBT= znh`2)is?i$0aO;m!U4SKE^D(8+tP)o1Qv-qQuExAkCWrj+` z%U4y)22nYSu25{B746(QD-p{u{nMu8FkmgC6*IFP`yJmr4lTgqNP*hDF}HBCu(a2) zszR}pCy(!Jeie6m^aZ{C*`loWr$DKF#PKB{MGE4ia&9%@0rKR5Cg-HurU;U8bjLiQ zGJJ3|mO21qVC2OsuMViW-)Bkh8_xNWWi3G8JXYdQ!kEMyB(%}w*Hrq(9yQMcNkax3 zgNUj#<28_+7>XQC3qy1W#Ql)0^P9C+#w zJrU>sP!yQjl6E*)%R}EeVfJs@(&puJ{yVxs7;%vB@rS7UqGV}ecV6{D=@x=L3+14m z0v6s3g;tR@nsgBMbE&b#J@R<$m@#x&~%|@J)d-dgMOieevtxI9KLUWl4=U{C*Pg4~!PtfG38d--B_%Hdy zNV9>So~^8ArbikVK6YuI=O7er0-Z_Sd`%ulyq>K3Lq8_K+Pcv|KJ7jso5gmExcMle z2H8ArEWxj!fZR5PKxLI|$b_r|t}v5~T$~gW7Lu(%Wdc@ek8#S!P}4J{=vTg;0Qb>6 zt&gooMuU-_TX(`&;!fe^z-tq@!3Hm0IKeyvKcpsIYA_3ksbpy^c~}7%4n(92UO%u= z1Pcq`52n-hDtPEjlW=#yR)G%`DIT*R3#v$DgP;jYr8J4e!61#h8VLnabyOsJLYkK= zj;u|3ArcoqfF@Ap-V2mO<_)%wn21ukLE&lRttM#7NR@<1U?ot{Aop2dC2r}q1^N=tbE*I~ znojs%Oi;|9Pz|2WrYkRB9dctQOlK~h%dbMn#%N6_a;XqF^kW#Dcl0N&^9k;<|TrH1S~2$zT|o=0|u+bM;2)P{fU;M-ofb2?XB3b=kHTDc88cxJdDzuzN zaS;omCarvrc%ZEq7CFE!zvvuK2*X`p@`9lN&_GW8NP=C*i@$Q-B6zNj02_J!Cwn5IyncHO_yFAyjl4kwyn5|M=;)pf zoWEovAQ%<$UOesRFqodj?3kCEjrltx(aD^fEm_`m>-O^GmJ2v*)6+S9-#jlWsNTAQ zws_WzI&w;da5B25wP4%%eQl@e+xerLFTl*LNh^ByTz#3dMM8nHtQS7BjoW-n4&L|l znN+^*=4P`$WfPj15Og=%0pwM)E5!^`$B@{z*VzFvo>(<-#|dZS-Q#$8nof&D0pIk7 zX^rbl4H%{W*$E(5n`}9Jv+u`#5JTe@=%b;ffHT{CCl)UEtZRe~D^C$ci2a8T3_k3OH9)jc2@u9tGjTkJN~9hVI1Au zq2pP}rW46B9@}gu(Ea+W!)D-)?eK!swf7e%9^1hUv9qfu0J7Y$E3;Mg0SNe+|MlM@ zFz7O{MSw;USc3m`g;2>v!~hg?VFb+AFWfd*H{*v0Z#T8E=jNU*wK3aUz8^1QRu2Y) z#peQyVC_N<9F~5DNHy zm9;=naR6lmls6gO1p|4@dd|M{RP=E%ux7Em+tlq^m@-?zEeBONg8Mjo z!Hjz_P4qz~TV$iBn{;K;WJfKVr@)X^?Y9^cP16{hhp1QE=kpm8v2{2b?iH z=;Ca;n$_d3dgCQE=>SYPBOj*-xgu|j)aX+te|__ow7%Ej_b=h$Np0%qdEhTsOoOQ zFgi2P?(Lvvz_gNA69-LoaJLY@5W(UKeWu>rYR0<>U9Y&5o&fh(WqL0yF_sG1iUJ{B z{%{Us9`?nYmCzJv9PADMcvV*;yE`Ven@QG~&Pk`J*jYtOjXU1fl;^E%?^i`DS0#!1 zr<4U@Gx)^^1lV3#4js@XU2-15C)>Al5`y$5&r8HBt6!eWEqp97{7q4;JP-bgMqOX|eI8=JxL=2tT@ zU~q(Z#)k#SQRKZJ^_0jNaUavEKYvcs6$qfI?_WX%|hsXUp3;ap?TB((C?(j{4fnD z@&NdF3qZ0y0W{xYuQbUdipqlS89FG$QbY+$=@xVhnCB~v(=Iz)@C1D100C<_tdz7k z>)1AGVT@Jikk*j*o~4)j3xe z1DwHXAfw2&5JGnEpN-2W8)$=+dHc&(5;7iriRmDs2*{!?&4oB1sq(IF-vn z7^%8CgTJoM1=GKqY>3`|tnIiwtny@NEA_NI{*&ahS8Ba=_aASkov94F3V#VGd(o-~ zcmZZ8KJN4f+-e2jam4N=KKe$j<%x`2^I?gj+P-~S3jP#Bx)(u?O`HKgjm!ny8xNHC zKSE6pQ&>VpVUWnn`hO%!SlSixBc3`s?>J!X6?Q$r8)i*p$>i` z;6B&TC}M>PaZ(njgM>ua(-(X;+i`AIe=624opJtX7Bmy!q@~hPnRiv)^XnU~WgEMo zxPHsqRVdUAD)-%}vObfRerf;$ySVW^q!Q;Wrfj6}t*_`C9_6|^Wp&bd{;V3>IRVmd z#|n8#9Cv?|Y-aioYIrqP9~OOQZ+N0%vaIKf#HciK zwsbF%#RYOqzgz^C9c}n8a82tY)tTH3ssWtl=j`6aE`8}1i1!D%dW9zX*0?`KJRF4I zhcA3re-r;s0zdy^`Ec<280M!bH9}<*c%cmmS&n*>X0y3@xbP7LY-Jm<$=84Vw~$Kx z9|LpTz<4>V{~OcyZ_h`Ebvziu4A?aixdqV)y&Jv) z%Gl-gD;CZa6w_fOv-= z)L#IO^BtgKI^i3xzbj$uE>sQ+GiS3c2vM9M#TI z)5U-0vRQfzZ_l-(4KW?Z?)w^-C%3aQr8MzGcgPE? zN*4Z>*Z;tGn8}(?U=Ldg5wbnZ1U2X4E@U?vTs~5AMsw z*3t(|x+{oT&t-|K;Jq0ykV>!^f^QZqSoRz%`bSb&D<}h8&5GuYri;<~_6E=(mM%cO zYe(*7V>Fu6bO#PaSxGqu>ttzsauSXz#t1KZg^XXVM~-_+{Y&yL6S2Vx`gY0>TFoL) z`ahb}U6-93vD1duU+-P9^C_l|%MMkx1lzvJ2m#@jHHDDqIz>{ zs?@G)U2!WG@WQLrHHOdl6I7#Bj@*E5FFt=qpfz+b5BK#0c{^o-?)|nP#UyT5Tei>`f zos${>{Xqy)15utp+K#`DNkV^z;8V{L$tp`cn)jw{lr@kN7H=Xgad;YhZ zDH%DBY@om(XnJq5JlW^Gi%=-rs3&s%`Nr<;mMI^FV=Zk0g|-NX=Xg1S*C7#sTU(|( z;CNXqz<-_<34-WV%JH_@z!w1j&us+d=FIY1;`+J1v|7K}q6NS!-#_5P{1(@Ii?j`N zR?)GKG!>y^O4%F2!xxal=!pV2t*ujJ-+$OWEc+##cGXmkduBK$NoyU3+8A6ueeCl0 z9~AbZx6GC=6wUocH(Vi3`TDkM#jYKBU6j3)sMfgsQ4hmYncr{0%m)}#owbi?9Y@PE zytqiMQ@l7MBrFWLzH@8olF4Xu2>1@}aUiP+ro*1P9&euVu0R?de?R(N&=lb19xBwK zK=V8n{?Qa&eZ+;{u|P2{+1fd{jv?c#{BnoE{NP#BZ*z48an!dlIsS5s_4y^+%S(LV z5{wmDlkzEWC`xVLSGQe`|KA^l6_h%K`;NPrl?eN&O zhxLx&6dV=HbtPOXJZ&y_v=_X*mwg)R4_JOK;(m&3X1#R{>J$m9V@I37r)hWZy?y5C z(Ke=a$u?xNk*eqvj2iB3NpwQ?s0k1X2>v1(iE)ur6Wvu#O)kK&@DJ2?v;oSC20RK8 zK2iiS|r}b(u4K z^CeE16D*2COV|MxhJxLK&LBW@sjU52k>n9X^PO;LRqE+{X#LD}rKw6}v(N`Ip#up1 z=Ov9-cWASn+Mj+`#&%8k} z$Lts{+_b>LHI+3fXf!l)(Ud`nnU`M>RMdQqVq+O}&2?0!LghF?`4|L5#Uu za8VxUEC>daoD#-{Bj?T2_6UArS|rl;y`wlY#bMAxh;&5hQ!Bwn8AmFkX(R|LjzzK6 zJGRYIF$@lNrHiLt4ijzSL*?qNkJg9@b*9hspPEpWpHX6FqKF3 z8=Q(f1ipm}#bj5N0A6^9bmL6b(1ijo zdIQ`N-Hy4W5;b3-I4sd6cs9XoY?B2vDBffsxj~J#1BkKw`aI~t4RF<0B<_28a!G+@ zd#Rj@h2#$fdA~}T8~*O!v2%>LxHSnSUms7 zMAPo1hNS`ykXp;)Y5uY12|sSY-riky{jGTX`xUQ;6e1)N$`HdSq1ftj6xPg8=q`Nn z^l0L*q0=+R_0HlzpAX&Lb+Ime%!&3Yw%62B#|voaLB~rsb<=DC|Ibp`4<-2wVxvG7 z09+qy>8&02rjEnbRq~;m1R05UE^S=|0`EW0Aa%VJfcEerDqS3NfsY_r)9trd8s)sT zB!YmG4AgHPl115|%cOZUn8Q+CYw*L%6`*d#+Ve{%5@85JQ17Y5f$c*J|G?7y*4-oW zNbSL3`+=qp`=h`rF$C&%>_0fWblvZY1UL8tV~}CuXgy4L3HwP#`OpD#;=y{4eH8WB z6|}b}0OsuU+N)RRXlJ6}T;+#6@pyIIr-Er~5!526sr?;SkBzd>l#k6D!|F%d2=dwY z%TZHc^!{Hv+=-v_k3@yZ3s1%?$wY4)<9FL_8hq!ru-Z|O-Y?I{$?%#7h=xkXj{_V0 ztVYO~tLR8Pv6LS6;Vx9dSn22(nM=M_Jm7FtfGc#9o?rD-*M<1O1`vH)sK>r}fJX$^ zZeY+X-^gdCKRh9YwZ$)6D46u2>o~YGTuXB4%H8OV z%WWK6|D|edR+k?;wS9HYqATeLFPc^DWt*(6k$7tp`t8)(TzaGUtSbtg39BZC$`6Uf08h@d+PR9Cq&8Bt1 zYZcW^e6$m1X|{M$7{IMpzF&aGxu;UxTVyQLbj=hw_|C;oBJWTh21yWN6N0D-;V@)b zyoMo|MuXiWW&7;>@(j~9b_Su#SfA*uU@wD?>^%h8x;_sf-08LERtWyM>__=Y{SEe? z-@U-QLIC?eUs@E}|Dr2bmi}i@$Bqt`!v9JXTDab%E&qpBCtv`o0Qmm*bg{l67S4b5 z9cEuR@c>pWR+|W>Ny{;^_VY!;T1yT;B;YZ^2Fi!y8DNtM_y9sB7~@T5(~V?GOH?pm z+J5>($tQ_DKmvgNEc%5eM(NbANl1bqc)1dW1G-!VrhxCi514%oQ_&?k6gqTN*w!9* z&hHL0%_}?dCFym!>1)-h3YXbcQ}u+Fo%-?V*8m#&pGaUJKLB6%XWSm-$A_||V<_lt zrPD^`8};T)Q#mY)hkz-ZN(8uUiwAza62BI@&QFlJaB}|OJ^_DAodb7NrjpW*y5z(r zh8tC^af>#ZjL3tjw!R9tTuVJz8B2IJbo7sMWMVsd<|Z4{6Zk9|%`H0}1WsD zoB)ru`}6%SQQC|kJ7o_0qp&W@v<@;24H_FEjGP!=%+a!KMp}%*D54m#Q!{COTCm_q zh>7uK*C*mQ7)X6lQS!Oo2t|&#&7Vbdqf{PQ8>@aQnNa5moCt^|UDKm(`c@?GMk|rc zIJ>8-U`D3IVhP3=ptxZwFoE+1(G4(R%m5wsoUYXo2Ol#f?8|TrGpTZgaYcLYrNrxM z*)-hTvW$PjacgT9X_!7-U%`XBX5|`QWb7cyZnnPvk>{@Y+jZ1lixiavS z6xfvX>V0NAXA=iSWOS&1g=eqr(tgG65>{-cWp2X{Bu~xgNq#$P24Pdv8Px3KngJSP z_8IC4Mr9`Zd5px9m^6NLO}Z*Ll#W`930Sv{Hkq?>`!q5xX(QW~WgV-k)GA~_n0Wa@ z+Mfh1&w*ES%iv28U`OefTsDZy*Hy03qK+BJgC^13v!p1?QH}&p3A>2$BRH3fYnN%2 zMEO%co|9;H8p5cr99Fd8F8sLA#00pz_*eumO5aN>wUS;u5J%68TNoI6M441y9v#&& zxS96UJnZ+-?L(Uqt4+KJaqOI_PLgib8*(h(7Dee61>qEsnycMth*d!OBFGXrAw}Mh zD&o3)qKIJ`E0SGG@^v2wE@tF^aGC`W1Lc9@9-h%xajzX{KRl!D&FXXBaR9IO=bkPt z*h_z5yeSGGB#FwwOy&KKVUMk=I@Mjib>w~b&;2B;t{DE_)uK&XE-+I=W;*sE+c9^4 zR{D-4Z)(O3fb@Sms92A`(jWS;JhB;O+c7@e5}=`}2=nj1y(17AN0ux^5Qz*2f{{dl zTz`v-wnjMNVw?W7@@0bMtOdB8pAZdZhd#@~6b(|E%ePTt@3q} z*^HwhNtv8C4E_i;y|Gz`K*6iX-JJQY-f5H;^1<9XnNGKe`dtd7BM0n)6CrIUN-bMV zpa+16DWaf&bkZd#=hE%=SKjxR$sQur$(l9QPVEtlE8sd~u%cM&_%KP%SYX@+ z$_leQf<2mQRLZ(~saa4)n+#d#K^gfLfc*Kh5&KVGpGO5a!6p(x{!F=(!H_vP??K&$3_;({utVK`niF=yhP!-Nz$Qu~Eg+z%Y(gM-)JXyG;CWP$MpxZ&U;qe^@se= zW1w-eZkhoO1jJY6f5pW)m}3$DKNI%}HXJTGo<0M@3L<1qkkD)!&G`<@iQq73Sgz#C zg?AxjOYEL)@S|OF0{mqd+xC@LRcOi?9fG>Gf054rdyk!V0N%1FXOfx{?`JnlA#G2n z$s&R!yBD{Ym)$S7{yuiuc(&MNesX}4r%u4j^aGG_E}@<;8Mnw?Q;1~BHWf!^ga-mdgju2xqw{Byo9XtgMdgSftPLRsgVIw^7yvLG)_%ns zuwxu(saJF@O+E6kC3FLNMz7XY-wVcf|*fCoPl|J6-2uPyi=Jte@YZH))?Eb}!V4A<9--Frg?{ zetXRCVceo)z?u|*ZKOR>1 zjaS6`b$)cw2nu$#%B&%#Xuv(VXAeGFC90qC`EX*v_N{>#j&x7ms_Jb0d6T1vzf!f5 zzl=1=zkqu~9tQEi0C*3Xtf-|-lDF>5*bL`QLlR*WN&7v_%-$I)=1cu-rh#e+(Hl$+D9yD z&K|MoFE$joQY$o6;{g7{*!_r4pwq$U^*U@b<+ADNve0`RMN(OutS(aDanf9fZR zdxOE{9;Qy1D7NY0E5(QvZr$pHr)GS!b6uraYK&X?n@oJztNa#q7N>sNTbOe}O+fC> zv=OH4@9MdVTce2{HX&TKARz*mXh2UH%#;K3W05dI>B)%$Ow*0$u(m!3AVT(Nre0l9 zsq%bWrq49l1>jY^fcpNY%L+ZBt$nP|etdu41+(7Yws%<->8*P)uE^9}nb&FzvJwXK zF)OR3HjcezQ*T-5NG`B%qHOy$3tLD~XKlG`japvk_X&0K19*Tc8tWmYEs?lPTq~~X z$1Q;H@~mKMZO~fKDo{@>2k-b7CXzj*Gc25|W`f(eGN4fiHT5WCIr^NzzP%o=2vjCd zY)Vd5N@dpdhHtj77qt;fU0NpryvY}nY0W#~q8*-MxVHA`W3}Ar2Cop?&iOV zmVmKFm|RptGP$ilJIzXJhPz7SHoj$Drpq9Q*mubD{N)GJ7U+SgIrJ#!jHu;9Uf5$I z1as;QIH2+mi{=!SLU!3AkD38Izw%<|m#{&Yx@*=buXF{zbcQ^$f0#PlK{U%x67$xi zy29}dD_?)EHWm8W=g`G6!7mXHM$F487$8a@YD*%DgZHzqct3Hd`^*M1?DvM1-vKh; z7dwdK7E17%D!kypR4&EWuNlOdME7i57xgh_3_!pozWfB`IWgmASPxV-kx#JKvI7oH!@a<}1fgr00k1&4)xuXEo55bHe3rq>o;PFX%oI$Zb zr~Wnw^fv5EoO0PQo~)i=csB?M&pjljBRmzu_kPRvTvVO5ZZ?n)YkB1?B}vAvuGy{o4?rJ!} zgnvr=XuMY=J>wFkVb`yz&@X5b;q}Rs4poyau}rmCsAht$Bqf;ElCfyj@YS!j3D z`+<2Iu77^kPgp|%MPa5TOY*3?*7qv2i~+}>tO|Z|URWv1-?IfvZBvGvqxjl3tVB(U zkz{05@lJaTj{_6?WWPori8Fpubcfoy2hl8vLupyhPG+HuRhsdzP$B1eSd9hc!6$$> z%cEoKuX9T5WETvxht|-yDkL`{a?5i*E@zED>5F1jj}JYYgIMYM%M1pM84U-oVF9qT zO;tyK=ulSAu-Fl@AmkQHOaEelMKL?Y)U}7vbrLQ>(318?z8(mx{PNV#fiWX{N#qm4 z?GUamvlsp24Se8_hg@|GVd#tuI7Cw$fkjeHKE8DCft9V8aH|{IEm}~Err|)f%AQ3x z6PM+fWS~%#UKLfPNCG}{Cb=~#}YZ*cT9u3LvbaM zuc%`Uq}QKxCb1pJdV||up40(`;V6XOf-oVv5C5_bv0cS#K^cMu9_5_Q5%RxW$e$QL z*M;WoZ`X~$Rk?%dJcBX^cZzHl314v4s;*x{JvJ+}|4NHtEMEu|!=qdwz`WLh7K9@zc|~hC zZ#U)?D06aGn*%&jRB_c(3FF`&}-(Kk!~|DF42<>J9AH#7~U|@14{J^QG&jT zfZJWX-!{PN$Y${$hUNo^l#C1wWW_Wfkp0}{eMrA# zn`#;y{KGa<4&akJ#~7anY1;J5)S}-jiz0y6l7T8#DPwQ@HV&K z%ZBUp?;NJ_Hk*#7G3q+%y=@SdcJSZ3Q@UZrSIwFoMFo|KzfCQ3$e2>5pdXVFYKYow z=xGl_#Q<8zI)jzxfoPrLm;>>g z%j^L^R+K49MkGxLkchJ(E^@B)(-sALKok#0wY{WWf@$e%j zEgaZ1x*h+r^3F|rU;e|t)?Rbm-!}^Iz4qQ#f)4|a9W@%tE875jUjlrh@u zbBk>%Cdlk@mKv}kLAN8aoRB2&ghWZ$^x=tqrXui!hK5+>+wOb1$p2IZgP0Y;Y`TCy zv>bED5q^6d%%y;u?*$)pt_n)C0knMERb`s#99qq(hpL&6bHu)yjhZ+5Lj2FllU*%D zg!A7BTLdx)h{*rsPr0~Sm>W4bx&f7b@goBf%7y9vhoka;bF}|E=sFEJ=#tHX5`N@J&QxN0v#o>rii@T^86QBHCK{3J2?D3{oXQ77TV%V)Xn7$ zZWfmOF>2%8E-joM4X<;9-4F2Z-eE%9VxQEhrntmbWz0k7=BopYxgxTO=x&xTM*D9* z_6AHfEuFRS?=YuTHb3p`(0x379$9V(k2{39fu|)>t$)i@5!ZlM>%cC3Ggq1SPLnZe zl&_GyxwP=-rpRecU%9l(Aalz!#Tf9YN9}#2!lyX4t#r{$BZi#!t#1Pi>|>s~7^=pZ z|AJ~>*k=)h<-7ylMe4$nGNwc@>o;Cs6Wc|R%nX4R0sV7n*X)CtN8<+1N;lRZq?8%5 zEr~c4`eZc{+s9jy7mqBNl;;LqFMk8o%lS_V5REAVji3gf<=EXj3bmXeQpKxKdQF|2dqR9L&OsN`DOzN%%3PkS3G( zx*`>a)vxzqy;D6uV$@)C! z`efVgbF#*p+Y_@;PcHXl$-J9V6#}E@_YO}lWikN=Veau0RaH$WH!f`As_bTeR;qZ~ zEtQUjJ%isf2LfI<-S0#sPbmtZRF3Y4`|P9#0u(OJn}czaVtLY6H?V$w3Xp~ zH=4!eVy%KQ*#g$6#HcQixTV?833EsJul_AC^;|Z}7kl|{MPXq~+Gd-uIb~2ep~!sxY3h$TbkYH$e>?P)uk&yuzIzHV(^g>yric z&^Nx3?{Ax76HaGm=i2wz(~Qzgq1K;T1&~!&zXE;X?%z^x4(&aAavb-+jPj3qI@Q zxy+Yk?4Tavh!aCXRrPnDcE(A>Wlh{(f(8;il!YPb(zWTq@e8Af$w2M#*2B`p1_CQ~ zfLE?T>95P{)dJX`w%zMGttI#;RT4PAfB%MRcQ!tE=ZPl63h?>94p|>aM^1Yd2BR5# z4dVjbGOkC%pZ>jx-J5GJ7_y^ZvckQrDS>uLg_Ief;^-!$xDunl5TB%Mt#b$+wjAC0 z+3J$&r}A!GUUKNObIZwawxv~1Q)zRM4rsBtSB=8Dg-|80t&wuE_L~14M#nfM8BEEE z5#T;6*DlMY5e9F9NvVr4+ruerhWC7D@B>U6rB8jn?_fg(*X6_}ZAok!tBrSgyaC^k zJ`cD)G#+ipnn%6JuVgA1?mTylCdq@%n?KzXdE!b%lzMGct5$R**B1A%PWUDO4mjMq zrkh9|Q*0?N2DhfI^&|YPfW)ZBAiH4gwJ&&l>toM~vXWN%XYvqdv8@x5hpWf^ur(Mg zo5n^%Ko~LqPR2<;jU<1gfj#0K}w{8>DVzkYg(}>ff!o|aEfUZan+Gcd_W*PX40I?k}aMhoBDtUyW&+R zd78|WKQmU?&6l`2y@fvXr=m=M+G4r@^#RwV`h@Ie|8D==H1@Wpu)Fjr^9)K>_MaF2&ARR37(!28u z!b1abb@v=BxIo<9_Q2_iOP~zoMHOMsvyt6`}_eUQVsr5r&V!8fXwo3^3O`lvMx`; zYlK}QlHR^=fnHZ;M9U?<0ONUT&ufWyJC||#YkwE(*L8TIukaR2NZIZW(CNCq|JK|G z3VUL4|DX1Jdw?ev2H5{3D_+@Cq+bEEy|Mm_Yn8&3i35D{#$o_;ODqx~L=Jm9A7}p= zj!}v*u-U%rL6K#$v~rk7V5&3~bx3a(at!E%vy@apo0P7iFq$jL^4IOvV{!Ldcd`y_ zVW>k6)6UvznyF*F`1%S6xS7-FYb4l`Ts7+V{|a$8vrn_+?bEY#3~!k z12j`pH{nyN49Wn{$+O6i>W{XWMc{ssA(z4O}#47hWsdU_NdZc<) z)+OQ&&*sCx<9TAi49WCr7wexNJebQI()y{qg~Hx@5~V%GhQTq_#hYPIk%s@g?|Y2A z(2jeaE-+B)=@+fh--h+meP?`0!_su#rTxzooLaS^STq1^O(kzLRq3p2TxMOp0(U|O zlU$TRb$Sjh;VegN&FKx8bU$Ee$sz9KBon5D&XP%4Q49I(TjHHYE7ZYH6OH2ZmGj%7 zWu3IWPQ~&$<=i-*4K3YF@59YIgP8~Pl)SJc-ozD7G9Fp0({2p4t;Sp)@tg?Mhl7#Q z5oG>uViN#}KCKmD^6!10X)v}7OjWCVtvKwlIOmoxK}MmW*Uz$l%vx0 z`Oe7R%0To*Fl(_iEuHo&NS0Szht%V$_5W>NQm#o)se0tDu|V;XoZKXWd@MH2%RjNF z>*kxwbxDEurLd>1NPX>!VcW#3__Awt&6+yau#y7*7|I%_5Iu0GG-V;+6Zjfu0p&5< z94(nLJ}n^Ty4Y&9^5`9sOPFl6=uQdRd`XHVpL7l>y(K5k)t0U6Km$K4JV0U4m=54x z3~H$e7gk3~8L-w%v32ryS>7iyAx(CWPn3-{{8MuKv?0GTSo~1p?FsDlk0R{z!7n2E zP)Ut?C?A7LgUHnvb4bnpu+Mxr7u?HF! zoQtn#?#f#$FX1~UCTpLX>lPgQ85I0vp;A1i>q>uVZgCZHoI^r;VY=U=mjYiH9GJl` zSyZ|I?vMR|T9BQ^XUmU}zu`n)GCW~1KrAOLhXymEba|?Vc%^W9;Rc+`{RG>okVq|T z)|tuXXv3cU!;!1BDD6YSsh1aX&T5*HV&|(Ls2;0jaVD;^%ovwC!hf|pXKNZEGqJV! z0igEU{8g~wG;k?gYhe2MN?_`~eyUkg!?u2_DHkTP+0)0dma7=sMWiG3R@iD~j2z|x z8VLc=Fx=olcU@~+><6H@ve*J{GPLCUTQlb??T3NA=*K8Po>Dy5;7N!d?NyX{5ZsMkZHAWQthcV2o*d4(es86Y6Y^apsO@C=;U-1kn5juS!>#L>bQWpofBg=9b?d0deU1c>vz-~e1g;E8<3KQB3ZfgN~k z2x(~S(d1jD84@(H{-O5KAtS@TV+?8;`zFQ*hI4r0FDM~?fK#?bB#oz##0Cd8+{PxT z-6Q3urvwY31J#UjsmE_8*>BB|O?Gillga_)RR>r(p6B1@nm2tQ|5?I-_V4_8g#ZBu zc_IRW!h;e6QDQl<&`eF4yzK2X)c@}tqMZwXg$DUQcS4?wAD=uxl~62&|Jo)?L$Tn& zz`zQCP2pH+fObU|1U_nXlxSXKgIVofmUOp84PiaP{U`V!78 zwirz1bv6o47m^li9^XWY13!NJe9@#ZQ*;r!B#%q&j1F%bxBllnv(>!k3+T`RVH(Q7 zbTx;xg*nypL?})4@Ht^bT%6Oipjg(*p-oDAt2y*a0K%HEvwtF9v7ctg?aSM3b^zkqqUpd(NK@`^S|cUFA@n6r5m;G|(7gr8N?&C`XZP zM9R>F0FR0MAUp(-*bML=PDyAu9){AUcv#HEG^#U1CE+V)lb6~TT&U)>EAiyE^xR75 zn*s`_l-5NI;z)9#pr)cI1crY)n_m zyra0`7%XNPn3^!iiDmIJd%RzBQ1r-pe^a=$(@Y zXm@D9orK-nPlRLZJQI@oY?Hx6DJ+pwrxyo+qRQ8``+(qh~j7+&p|&>X;`$=B=$s~%iLuGIN8*!0(6xL8bLIq5a^rAENar77{TkVi!>%KbXlahdTgBXJ8j5VkcoB6V0G8Du-yj->YQCuee zWjmrEEARPQb<7S0%0{L&2xggNlgYMjb~VycI`l@%{Ax8c+E%dA1bZ0NKj>F&N>bp* zKFmnY${1r*+K?w3$n35va~N`Agl|I;QAd{ccm^n<**T(1Q3lq%-k2B8RPDX_aAaft z+)y*|2*n1h{*uRh$EStw%=~z|U91B9RrdQb-}%cYmJ2R!ep)WY zIhZPxPToaJD{xubaeh0Kt<277-jrj7iW#{bBKAhVNaTH;S;9tlspQ&ujG(@e{$lQ} zbqoNLx{Bp$R3TeQzV`<{ad0#37WNftc_E!s^&6{Z7T}QX=!`r8BVI<+ook6UR9m|Y z{)Ih}4@jVdTFkSY?ANrF@zpSWz>c-LY^TwRxI@PJ7viOA;tZ=oRvS-2uxp}J7t{>A zGTvObO%jqe_~r8K;JtX;D43oJdKM>iGb?c*b4ErQsS8PN{@j{wXch&-x=`@3(jheqQ2ru#B+@uD;#7U2=E`jnPkB1j_nEM z{aQr9mo}df2{vUnor&HdvKL$-=wB(7uEzzJrgCP6KSH z9zH()umkRHIiU~-FH zk8NnL=-4cGu)h4LVcdGSV27ILN{)4=f+wX!J5!j=~Pj50m#0$2_bvGqR*;m7Ut-HqP z5WlqtS)2Bwab~)W*BLU#FO0VlJip?1Qg6dZ|3M1mkXZMq>zVs*< z@yt}09R#&WP}o!B7Hi+FPS|*!eIax7!9=h2I*yoweh(QlrEaPTxur5}_X3&hbfIaq zg%k~`z<_9~YT>oSa_l&Z!-#qSt43-TzYohFp({%ZOxC|tGcTUp3>N#Pifc!_r4<0Q z)4-D0JcNDL9|a^5g|w?N86dArf7nDx*puWAq~q-!=g|&sd<+TlamkfrC1c=%Z>ktO zYAy(s6SJpyZmdTz(WYy7K?Onon#9n1rplMLqm9vUrDOtfX4r&JcZHyfz#s{-ElukpHJejd>G)S^fd{i3@>7Oa( z8lRCJEe@A1>%w@_PnVzS3!tQqRp)Jy!$CP!S|Nk?PE_v@9h%P9wK_s8r&3Ue8*w5L zjKH$2K*jxmksa{tciRT{|Is)jNmK7@x8u zQcxy$p%TcJS2*KhqUt=S6T$;Lr$oc_Q}%9?KJ+sB9+6uA9I1>kUa6$C0&AlvINMb| zT0PU%nI{H77BUhesD22Tec)pHcr!M)9y|%vMib$sS^`*9pU> zsnGIlBSf%+YQX)@)cYShKzzF&gg5_SL6Fc7uYK~M;ViG`|6=vnc%4CK>2DGj_6iSv zTFn(Cw9@7V%YoOy_pFq8Gr%9S+IwR2yCA2xYdxUo*@ha*sYAZ&`5t>f2$9_BNY$H4 z8M$4q@`zLqD{y<31}6~qK*zun zyflCe92~*zCLaw295(9`MJoC35mcv|M9UQD9fGdFXUzDx(72kHErt|CxbiXAHF!9f z3p@=>v9NX9>19e9WmCc%vh4UE5HNDHNLILQ-7no?39=JdbvEvGS+6_Q?gxamF^Db zOtk8>n?z9e4AIj1`j2)5ZKKst<6mo?8z~3~Fg_Vm39!e>zd|F-^{_OWPaiV|sYEuXJsGBwI zit1GH$^X#n^67XUwH>wOGYFg-0epO%^7nxyU2xIh3WE-QKl^N<`~++#RqM8Z=)6{$ z*f|Fn;*ai^uAyHa7!V9iZVlcIt|@SKzB1s-X0?h)|c?aq{la>YLq#L*3eB z4yA3S3(fEod(;SW6$NN$v#a3&qc1Z(cLnInU5vKPpX#rrndfbk{-}6CU9ZeLCq7?0 zE|SyoDz9cfR*t4mPVd`tT8QaP>3%~^VcRml5z{OM%Nw!(>Am&h4ks@hm1bUCH}%(u zN7LqH(981{0?c4;Q`HW-GDX?5#ahr@BbIg6VpUvA9PrWp^Y)AIv1ss`RCaL6I#Hjz zDNE6jW*zNfuL-_ta*|X!N-U}#Lao(N&BZx|nd72?WIve}l2+FXyk5;zLuNgQM#nBF zx3@e7r14NPj@237GNgqt?EY4*Jb@J(=kiJM@+*Bx#bA$^hZE)z_J}HBvgCm?>C|A0 z#EDMrnW$c94+g-m_gk6Ox_=?9bY`#jI5&Pwf;M^ABQAoYt}*R!S%+8iyQM80G<5X9 z`@QxTM^B(Au;ChEzzDTOQu{m7KQBhFDHyVy{KQMs7$&@|&Ar`YSMM5G!cz31?0xN7 zpQOATc*@eU{M+q~TY+Vw5`D8%By7Lg^iKMwR_QQy{th6qXNfMRZYGs z%F|9?=N1|v`zqH!#eR=~F-}`%;0{4v<5^5(D*H#w=3|6T4bbx{zYftDtoY5~c4*-3 zn_M;_>mVSa_Bau!GCQUF`%hWB z&AAK{_nAaM!JtqQPTa8wjOx?VS$BG^r7JpH7;6Yh3} zx&K7FH4UqAxBUcK#J#G01 z#$GhEUo?3(bZxZp&D+O97`N*?XZ4~ZhYtX(YMKZ;tevo=OAz2%{Xuo$xsfaEUS_bQ z70V#1M7&dLIkZGXy2BkD`W7H0;?sn(y~!xjZ%0x~j~UGQgv|p^)91>3RYxrvU3tpX z!gG0Z^%7L=L9O@tt}CTri5zi2U}IaBu0?~>HgXcXeiMygDpB$sC1b;YXwkb zj5=I5jlUe@UzW(>!$$ibl0lv#Hcg8R$&fOE!1lamqZ5E+hPbPu7b8syABjlFH~`DP zeMv|%P@oK;Cuyaxq=K{j7+5w-CWNtg6}jLJF{YCo15ZlsRFz0rXL%6(kQ#EzCi=}< zjMjE^#mJ$knKIFbhfx@AmDnI~zr3#}TBW1=?jYY-c_1P*LjvR^DZ*;ZDS?B`$GJEl z#8TKYIzMfl->0!X_X~3Dv$;fer{a6<O6Br7QMK*2 zZ2PzgH4x2S=p?GAJ>xQVzJpOnEeEo$AjGEHN5iV8%I6H2WX;M&x2qAA%H5Gh z%q$;ii@1tKmWP3j=KF3QsmryVAw;3UPcxsgQ^X3 z7-%O^HPl7wK{=!Zm#~Q*=EBrLy7>5eGnOo>)1A=!Vmj?PQ$iLxVD-bC*faMMeQ{s3 zhO_RjmYBDoQIdWxFUkP6#xGY@Kx*wwV==zC#z`;RngcoK5WNg1{2;q|Pe}C3X#>D? zj*z7+3{g-U2be)+2*d7k_GMtHqK*lI9{R(@#q=;BaJX>0Uvg_4((~@V1wha1ZOvvWnkwF-RDhNW+L8bA*#vrNsGL8}IZnYM(05yt%O=hA zE6!O3xq_-C!DBw0MMOcW3f`i=$#l76g)S(wnJmJhd-WR_faAuHXy${yxlFhm?QDW% zPW(Byy_M5hiy^gP0Kv{?OB~VP`6c!PN1-33C8Tkvw{$GNQP|SE(_vc%28>lXThJ1H zQac=i1yb4HBeX8Nb#1M!X`L;j-8rz~y~gqt!+^{EE#+c8y)yUKwwboq=P_>*&hv;+%d326#! zoi675=L^Wgk1O&Nt(3WNr=7c5da40?e_6|Bd!%4wD6)yaS$W%U0%4iD6+pV?*bWu3 z$%$!*Oz@HxR4MklTU$MT?HEUWf_eW&u`!C}7PiALDrX79X`7hkR$fDgwiasy=7clQ z-pkXIyG8a#p{*eTNjNaH3zH5~=o^!u2C%gYQy;*JUW9-VDHN+O6pv68_+1i(zBWz? zfZWgl5S>d76K`Y9=6L$>k@Gw95FQ#|7N;Ro6n+EyWX~rX)JxT7& z1|JBq70Rl&g5SSY-PT(s>Q`zbQNBp3im zk;dY(Lqqa%&W5m{>CQ%~g^(uU+_h94dNec^Nk=5Z zL`Nj4(EL$GPMJt7enx#o>3|Nx#O#`gggc;QiPr9E3EmVA^7t|6FG9lP8*9H22~CN9 z$X=={PGCzmrMOR?;1Zw`#c8hF>lyHV-wp9cr#r^mPZ4t|sPqyRHmU5FL4F{#8JR>U z`S-{h&Dy|&mOFC^#Rd0Z13xKJ5>g9?waB-JV~`k#Sb~J?4*tywOO|RSEh4Ay@*yZr zZbDOdm!vW9v~GSk>3xApx`mw@j&XVU6B^@DX)&%L#Cz*DLRTAsf!-o?ZK?pULYDJO zxe!z@H?b?i$o|!DJFm0*hhuL_&tFjA=HktA^pCV#$<^0EP5UO!mP+aZE9PqP9Dp88 zctUl8aq@g7@1T8V#F}0V%XsGYmY}JEJrL+DjmPbOo$sgn+wc7OMFHfJ{llGs|Meej zNdAyz_F+SQ33+f(fPQq~6hOW{%>TnK1PZ=TqXVNMxnKZzRfbAv&i4AACl9fEze9+r zm&o$sz5Bdg*J6_#w#2sAK$(6w62Cma`em`0hKm5VF{o3Kk-1&)xQ;>c`1rW{YW({( zwLd{@FIpZDfmailq-V(tf#$1N-Np34Y}@0k-7Tl5-t(>iiP?C5HadL0BH2!lB))5i zU*P8BH+45H;xD8*VYj}jqLyT$6CMX77js?V`Dx4BdCN$0`38Jk+)sG3vM}3ku+{&W zq>Xnc%YAMgt=wnDPR?y%g^55AnzNSUuTy(ffVc(d5QMjed`Euyb)Td-P9m41BpORb zZRREPZHp;@`Y=9JFq0{=b>ju+LRBRXlCW^6A=$v_kxF>x{eaKw#pCrb0pF!Dv0+;G zR_qh;J-yO`g?zIL|EyFuAZ|;fs?7jsut#wDtc^EaPDX6b-6gpClaqy9>wHVr$7$0F zjb{;nI9#N18pSVYyHE;jTTY$bS|F zZM1kR428;A5g}#NLhyUy6e(w1QCbzzMpq!vW&jflFi7g_5{?0@2Q6UVk*c7-Xr(@|2C5ym#c*|P+<1dCv&>1I z+c-%~ihiNJ^VkXzw*q)F`8)Qh6r{it^+C)?eEZg@wYyNiMCdq*H3myKhr+eoeA@+jI-JfSvictc#pY@KTJr%AZX$@* zxTQ$!`qq~aVKxx9%ob7+@mxMXyIx1vt3t^0S>(57Es5#IGY{SQcl~^p&w&z zKTAfKdTPtp(9DRSk-e=U9bp zt!lL<&FR##Xs)0>tno{wGEGo+@*svFtj$knlQa$`)fkw9TAI2JSX_rxe^brF`Rx-h zXV^0!>sinICTvyUZg{k`Q6=dqO-X0eu*O{0pgG8t(mj~vc=(QSoy-J?wS>Vz;rlr5n>s~gw?a|{{JO8aNlcO&PE~7NW8BV2{#KjA z1>6bUJGQV^C((@x%}fRS1-6YTW_#^np4r->hTte0b`JkYHv^pruf49%Zg9K1d6vQB zN=_pGo!Y2L6=p4K&}$>QSX20O(WC%`tnr{ih&u^0mP%6F_K%t^;u56YG)AC`TLR$73tQ#;?bKU5<0W?voBfk?(g{ptgQ6 zEW9_ZB1!?@4^Y8CI4`IJO$RT!qf9uu3D8WPrjSle)zpI*B6p~ZCF$>3WRtjumC5W` z-2%%q9}yh2N>b zybZ!7`-5c1n5$nWzy^-Ve&j)LDi2q}Zi7gL6PmzWh*+{ne-WrK343(dNcFo3Gh~|Z zH+ zk=krB3_md=1&1UV3&=%d%b0o&eDfrt!f2$7^(;OW8Y(fd|F8TRGTH18Qr|p*A52Q^ zL%0OhYxZf)7<%bs2omRMFnML8RPYMbpH#=(ig5roa`&`|%@a}&2BM)GCmwN%8}OEt z-e3#c>-ca$(rg2FAxbT|uz9IuR;a_Mai?qiN#}#A#cgv((PPz(t}SoYiFQ33P)Hwh zrB&)+j3RKKuKCb*lggH^YvgdDm`JXbXu|LHx#>IC6Xq6yLwE0)LS~3BV)ZX&>lkr( zl4lh7(w6n1jnQ;0Wz5%qZESSDuGMRYkbvhn@Q)= zm%Bhk;a$t_=DU^?2Q_4V=nhB>Y7{DA7}Okf8FXQFM#5a*kj^+kT)m#dTVl|nZqU(H zp4Fytv^(~7BKkpgy?->w5q=JT2L(n?VDeD?Uv$G6%40UG3@Gh~G%&hewdR~PM!>rX zOcTIZe{-rVMSQ~hOKWF5p7{W_bCv`cd2H9rL7I7w7Rh#K)gSbnOMj_Z&ANH&+7Nn5(xwhe!0HMPSWV&#Al zDav&wE$M}px~f2FmBjsfgvu()nu);l73<~f{C5Me(R54ZghXH~7kAr+Bxb$d1U2{b z)$@J=9v(LJ_B{Biz+wLe1)ddESUzRSVw5Ges=gYGL8b~m-(}XOk94C@xdTy($Ij(R zLZl=zgg=YDtbHU0oElY0goEzeo)OhgP4Dff`v=y+gs30fFO%H3vQ;;ICRerfK(a2{ zM~sqB&4x2L0?u%`GJoZHO3lYTayuTEuFEOgAab(A^i=?Fi9W8Ys50wh<=*vnUA!ay zWm#C~L*qMn?rg?=vRR}qn#aopcBDl+i;q_UJO4lavb~$syh2~7aBwaV5CI^n4h=Ps zZ4Q(0KjAV^YwoL~lUt}6^S83JcVkk|YIS{iX3wP*NGNsMKp$o4HHCa3#VE&=%}!B8 z`c*VxjXP4o1N~&#hrG^{m(CL#rQNKHLw6_Wc_x~OG#U@tN>WPg<2pkR$NQ?yj}I|D z(XkcujXe`kb~RD=``L3>BfSkkst~Hdsp0d3Ps)0KU8`<8fZz|G&zswOtPXJADFH=D zyzBGkw#o*|@%9HzY7~Ay>HS>niU1x7TT8;iCTM5>=FUKX2;<#dxy7o)R|3EReeTHl&b zLzRnJ>E9*%!_p#Gin%Lgi63aW_y#54xBOMb6ohcT0b&YI7`Y;Yxf~HYIZ~@mOq-nz ztk6?c0GizuG>mp%p*fb0P10C3^_q?5bq}A-&gwn0lk{%*(Y;&!h1n+E&foBI`@e;^ zjUT5+d-z@6Z7>6FPE&T9X(ffycPLB;E<9Y6XIACAhU-0iLMxOdOfZB=m7|!^9t6%j zw+d;r0BAt2$>VN$b-|}ouEk=Xm+%y&@wiOlLsy>X2!*?9`31$V!ymLM2@xI%?sa#U z;?I_u7zZAW>copob5ZJKOi|il$hd4nip+D*-mDc2PPnG!+`mVs`p@uiqg_CGS48i! z8RdBD{C{LpiGjloY7U~=1{SUPLfx!kH<_fk0)i}V+iAGW^m%l1$b?NSuYf@(vm2e) z%__n}6?)$#io@lER;%Nu~#v!t?aGo zw|)Gg>tv~DG$(!h_orzeLkV>L9ubR*4}Rctck=&*pFV{Rf7ENmo@Jc-enKl_a`1W+ z0U&Q_0BUy9tM7BR)du9rCZQ0eO-p9*p z)mJ}ketxmC@?s4%NOmoZOA68ZCpjD;3cx-4cYZ@vNGq*Fg}E`G2tYbgANX{?A$ozI zm7E_rF#)qoY<5M`wM%v1hNn5a;YA#@(-5Pxx@RR*mQ7QqW&2bD_uXzFWJqgp4a+pM zh&1C(`4r4J-UZ42goHFBn!R%(H7IoM;-H7u>Vyo9yH2P}{IdLgCv6$y)(86OcYxt| zoNx`FRmms5_1u~ghLSkw;WBP7t7J1;^MT|y@`?|Sderd!QvZ=>&%jIWpiAQ>VF{8v zDq&O+56CLJ@f3*a5|ss*KaTp6ULH^1cAhF~g5LF(dpX&|_A%Y0>JPq(2U?}y20`qM zes>Wz2G*vgdCWM?1&|P}L>xJ{lmY<14Md1i8>eZQ_1di}qt=jc_I#E{DxpmgdMIh^ zHPvBOP%z`jYG#T`rZx)v;VEJjk%M_`!|Yj9nCJ+|<#t+w?a_*Xf1&BXD73G(q6$X; zaKHYxoZ7}Rc`V|t%-E*JmIsr@xFvQX#kb@qlTv_G&i5l=_Bv%{@#G!&5(nEFom$m* zAg=RcQ4Wy-ACuN7xVye}a_tw*@||2Ezd$u1FTargt!Ii@o=DHVtH$&k4CGT@SW_Qv zlVe|jgGQ{~dAFD3`cN`;npzmIU8|B^cJf`wXT-c2kH{G(Sp@T54{qow6(Gxfl>umkWX!yIy6y0;%$p_w=WI1tu3^CY&N}r`s~K(2^pVfO z$eiW(xz&8;sJ~CHFMn5p^r}raepik68{7wu&KIswc7rJTp(&Fw^MZFHw;%DSpl@WO zkM+dy*!-AtqMdm@XqRfnv)${x>d}n=tv?IuC4^fB-sGOTYEyJIaUW1-@m?u@WSjbc zijOc)@x6(0S>A}v`L!f1Ur&k8B8mmttn+BH{{a7Er<*e==kzfm_u{y_(Pr{EUfgg1 z{nrr=^=T<@2v;1mmdhj3SmA~A*rx@^$#8CNVuTL}o3p1!gf}M*w(&exwZ8$qfb|AH z{TAVthDOe_*U{5g_e=nmw&4+$_S+RC*6gZAPnhOTa0kVn9Svs2t(;R70i+2sXg~W4aTResY)<4M_-k$K36a~0Ug)1C;ASl52EHXR zZiG);9JRf|ipa*ibqO%XK`t>85Qr2Jr$eAe+45CwNX-Dwx-r&;C3Mn z5G?|4g(T_Zus;DZePf0@qwbDOeD-ywe%#6+7FYd0z+ij6nUGV)`U+TTQIV-=BmDup zu=o2AQuivAq;7z+nPoA6q6|;G?xi3EWA`wp4OzC)r;PL1FOkN1l;f031%4<&{?Vjq zQKPs!2BS=Sw54ZZUeJIfF*miRp=!^Ls!M=RB!1-Gb}|QWtbU>KW;VOk8LFERWz^+R z{C_cF!}=Q};E0pM3maK{AR~}KNLO?x#AeSZq0&AMO6Hjh;RzCYaiwmI`Z4O)GIakz z4}>p^`TiqEpEoY>DaM1D1&UTxcoJOmGRQdn7m!SshFCB-F#CCig zUN^xp6zK{p3lRivK`?P+TwE?70oFVS6U?%S2lg!xDzBX>(tOPinUJ0WDKyxqyG8HI zIdHTmzSVd2@+R*>4_DJSspSdE;hhk=(1u>eiY#D&NEU29k+?GoYhpK^hL(mzT?M%uj`-x z5DvrXC{x*er7mgFfjvryMDZvWFaTRSJ-vSlhyQ6l+)tK`-eJQYy1b<-*XBU1AsBKI z^Xs^;w?;mfN-U+m8T)3(zNCoevgGr^)!kcZYN{w^wI#Gg61k*7d4J(Y zdgx7!qs(C1VHcj~4Ihpt^$7O?2=@Uus;oVIh6jCTeK$Gv29M5=grc^a{O2A`5(|A( zd5P-y7qSzb@F*4eg+egPkh*sPIt5;9Bm z2B+srGqErEac)AvShKyz-=!h&!)+ay$VmKs%5g4`sh%nrN$oR4<_9IqIUZyp<| zXNkm+!~*bA6@z~M#J)eBLNw*RGx0!q5SuQCW|njM>phI##fdyJq7ROTxDNk5AVX8D z1X%!y87Q6WR_F*y+c#6KIS?`3BB`(%WDr}gwchN8WyQf!C*j4hAAu7+Mrz`rJE3d0 zfhfm%!GDyLbN)H_nQ;6FFfx-~=PahXD|9?>Zf_o|IGL+;(c#awqm@dzfS$BDmhOr- zHBhJoeQizs(00*SiXb}z%o3QX?7q3ERYaCB;g<2|Pn2%>$TeAZ z+N?r|@@kqv%ErKsyD+1Pqp=*MV4B~Bw#^|9neXyOV)Mk2@iN8%GKt->*pl^sreNTN z&FL%IWm5S`LZ#zrDDc7Jd7$Dk;iNsq^o#FBHIGz|%DQ~FaX=^}ESc7(7ILr5U)r5lyCV;#M@OUW{M)?;QRDS5WX$;-;Zf`( z&qK8%20y|e+(ex~Rv$4T**vk1M-^6O5yc>!SRspFMj0ifA9{JQiWqqIl^i9=X1dd^ zvG`y=#yW19ukO(OXl9FP0oe!R-uy(7=U;wxBysPtkk5YvPR3h!GEHrf7zOvuD3Cx|E*V|;xdh90!E3VQ3C-r0>u9nJObAbzGR?o?b*b02a>Z% z`Lr?Wh`&L?boQ3yhGLeIc4cO}hU5xmwSHu%k@p)hD($@T@g2ILby~ln%Bw3sTEUlNDI-%cc~WN?KU$QgBDvwLY5(@%CSTftk&o&%JEiIh>9tS1nJK?(4d&2I+`Q``VqV&X^71D z3La@QgbLCfHP9IZ^ce(IyM0j1nK`BTVc zQqrLdMYoX`c^`~kfogM9ZQZy?q)zWvf)|ZS`QdUEr>(b!NzLSguv7JqV^{t5RV9nh zSmmb?nHH@*V7iftPNZql6O8-hnP?5<vF`j#CS!zO2B=k`17kzXgv&=gK zLY_O{(DU7RI`Jp6(#^iD!p%N_{F6WmX`*UxOJStvJ7668r@;|ea1TG|n|rn6WRwmA zfB(-lLoBTF8B%f4X%ck;>)sH{Q`of2C{|3hC0c(2L0OjrzdtqPJ+l;UX8;4URASCe zi0F59j{}JDj6XvYI{7DE-?c<>QJpsz$0D-+cXo#3xmk%hJ{E%k2vaM7^WRe|>;#h- zfE6h4%~Y|Z%!1vz;3CF|JCZw$V0i-Nqtk^6C0H&Qt8{J%4E41$D*Cb|=Bf6lgPnAN zp+5z|g;YlCHL+Vl3mqjQ7afBl zPZPBn9J)i1<>rT-J=Fh9D)2}$1q%%W9V%*|bke?g!QZArGz$Y476|sp%QfO*R6P}Q z(Qi-NJ7E4wa2egTQjWoCZ=M*C1K35;f9__@D&v+KL`P&739*} z6II!wQYMEk5oE#^Hc#%oVM&B=9VkWp@Uz{{HCWG-eUxd6OexziW*>W7+7Gz@o>RFq zjmmXPU`#Q0h4~RWi48GiE~y<816wBP%itTX5Xg=!S&KDwShM6p4h4TnWb^0@&1|RL zS;|wdyj{j!sBy+&RMcw$H^fDb{bI#pv_<(8H_a*6$}zI?M~p^3i}S=rNj9+`b|-f2 ze{rf#_ThF-w&+Dm2*hGY*(X>l$XAM|oi$Q_nuysmq{{HZR1cT+hJ%1dak7ZsGk4!foR30fg-WY*fiu)(yNY?Jc4@p+0*h4NDrxdi2z5l7wA_A#Q? zTP|+Mav^@~89!yc zI^1!+-3L?~9p<>4Y~bS2;Xc=2&P3GxV^%TStS=9IZElMM|H=x+j-ikNkuEUF{X?pFSADO(m>V#~(3tQmshBTTFO)cw`6*zv-GLS*=FhPZDhcwpf2p5txjk zK+VS7I1YY_;1$CK=HPrzFrrbzeY=(IX^ND20AMi6_oPgarE_$)v@%8xCN_1} zPW#VhF8>| zt{^g^9qf3;=&DJ8%`_TsKGhBZwS5Xmi#0K0whb3|GBA9(RjC$Zgv z5O$$p=rZ8Q^3f0}-$}@LSDvoO5CkTQ$VKpJcgVJY9Lan}pb^hZWT*>ABhAWy~ zolMfhnfN^$010y|c=`TC5juMN+%+Z?aAPM+Hp6RlKn=V~(ZXxAUk$PATJhIdo#$~& z*CpTrugXHs(kcWbU(mgumV|%p_ivg6!Lfij&^SS(!&(a7=mxlpJrSdYGieqKRct9@ z#<=|wR!6f$u_DG96yJU zS z5yOc(fHEUw)uj8RAHe}V^bd`+j$x@foa%v(oaeXuoa<}lCH-)sxmC{OY z+jcffaTT}7I_`U`2nWZ8Vg~xk4swgZuV`Vn#uLRKxS@(5dbNjUfDS?5fsY@xwd}o4 zNvZonZOIWn!Ooed?|%Fmn4_+V^)9~)gx3=%Y{=5%Sr{)lqeyG2Elc}n;0(mR{ZjP( z|0T92!&^*RaO8i<8eZ8AjCo2xK;-qIfi-ssguu23%y0jraA@l(_-7P-mZ9ai#+Kx} zc}vsm5t@-I0w$pSZIx;{3GIBzVH7BHPy!DG53^@q7OkbTumZe+{a*jwFh>?3N4^@b zY@7mtEVKImZ+IA4<~$h?S|bf~AI+H_6j@|!hHEn?<8lilX z!(M3^coxRRaa4>n zuKi?uS+_e@C~8pz4=t-25dBDXU*FL_&cbuaf?wj2Iglrfs&;g-0;Oq0$176W4Tvr^w-FGZjBh>ML1%!m5qR=F1w z=G4nTy&~YR>)Lo5z^3EnOI%359h>^!j;ivD&RQGXVrVCx4jMyUHP_0|+%ci}DI=>F ztEY%c^uF0pREz#$7DHt;MuY;?fZ0$Ii~jr+v&cf!_+Z1N|GF}R4gY=drSEt;vuIi1 z7X=+x96ZCZ0>)T9B<43A${!Zie{8t}4%r5Dj2te1<+cGmwHjwP(3Zk0Q;#j|{9hu} zr&W5M;cNhUpfu$-GJxf=MLC;|FN;<~IjD2goxTq_!%jm@?v9Tj;XJa!=ShpS?geY-z%O)2Z)+3f?Y*>1wn|c~s>eIq&W!ioU(T?e9;ZiOM0K|g zg_hP)zP~`X{9Y6>^VH4td9XM;F>%;n5N=q zclMlcKdf>>q9U-?It`Nr(Y}K<{o<&)7exm7iHGD#$|-cYrfceU{K+BM~Rv)<_CC|Ldr1e=-%VN?+r`l^Vs@U8?Gt*sL;vq z+8{#BE-SVx3ssSOtGoftNsl}E#WTEd%`_VL3X^T%v%B-0s4{I0d` zIt}u!2k^{vXA^Z7#;%or46DfQ(2mPI3RhnPbu$S_*)W69f7!(Y!l*`{rKT5Ue`+D1 z0&sU&C@JFiU;1>Gfrr2%H5jB^ylQ)&0i|S~O54Kac$~iobFLF+V^gJ?e<|W6 z87(LnQi3-1mE?L?<*ve1eG|n4Da-#9&FPb+h(#&|BVMQaTvyj96w{s6BJ4utRi+;t zz4x4s^jwdPY){()hG7tVYVupHSY{rxS;>>!imumhA3hrrcAv>@Dt&QvwX+gwM_gP;U7gy|SjW+eZgw_)?k;d9F5W}? z=Bu+DC28eLLF*Kv@O4*|HkvHf%}gJt$h=yklwPVV@fHOH%|qE;&wQu(!F>@o2fW&t zL(KJOQcswG9-q0b$|vNLcg+Kx<4@=4C)VCNm6^v*Hz4=7D|+rfH~q7epUj1*=IOtv zP=H{LWia35zUTSD?G!{3E?rqTwST_ozmw$xw8e+Cn$JA;8ih0>`V+$V1DKBgfb=8) zlMdnpe|9sNr8t5y9}ZxT`gnTUHD@wC4^hDrs!gc^3f8&ij1A|EN#|^sI=+=VhCq(S zeowv5u8lLZ!H*tB8~z3}aipBZvaB(kX(|sE z#ZH4a#(CJ+C2fsF${`$TMaBYmq785M2Qz${;h3Ru?B>Dlem27d`jUs6CmsL&N=W-jqpuw9r$2Zd2Pf5N{9oVs2&mSSC)5+PLJioh)ba`;qx05p26l9T)s$;x zrSvXpGJm^H?&8AMZBkaw2^sb}ik2|oP7l|bm&Be8 zYsoRwQLuVwDH+7#4Z#E@>T`wPZT);W_m^Z1EZyRCTa zj5{4;KTf3#@5vMooiN%Np9(hOW=3lQFboF)IU_RV7F93AX|Qy- zzFt1Q`iczs-YGSCXbI$o3FhKK!}yMkQi0y<-n?2~{ZIUrU z3|GWp1SqGu!bk&^!U}`A0fvTT5SEM`{PxTKagTzQKXExLyun$<$?s#SlQtI~oSg{+;c;|gY1q?tX2a|`o!nKX&*;%Ib} zVA<@O-OrNApTaA+I9bYNX7}rp_J<7rji^|1!hD)b&14eK|1V+XLADMqpi5>PU zmh<;RJoWald*-faAYj-)n{3I#Rpr-uUNt|2iBd008%;%=33gEjO&?}PICf7B&R-Vt zw2Nw;yp8(09BVF(XHrrujL@E&;O1gLT<2I03BIo&|In`}a6q}%ALXou-@$f{z@?53 zQ$=Ts2I@{zN34r-+qH9IpF)3a*r!mzl?dTJ5aDFbr1O?>!L-6rp#@bp0^Ap`->=0M z4~Wq=gRQM*v#1>Z1MQAPY1dymd7Fe*N^7mNnp(z8u7qNQd(8sMSX=9dM}7Z1IQZqT zk554c=NA5Z(X?0Kod@gRe4ADCCWGB}*QQwAyK(`#Dv8fB7}sXM8uUPAjD}2r)1h-;b)`Qx2!Atquw|XOi|0ZcJf^PU;2dn`r`1{J>uR>Ne7DwX zwS_bP zWleEX#;ig$hgz3zOHvB)e{qtOExdWQn6%m|5Y7fImgm8Rw}=qx5D>~N9r7(iVC(tu zoAufL&a)cK*7Kr0E1Fnla?Nk4(N9 z&*!Z9?z1kf8B)~epp@{QaVZtcS%?!+&V(DN%Jz@{y*5yMeD6*VLt~Cr+e$2Bi&!G^ zzkTnsHco$Db)V&H#`}EpXDq}1_2Exk_9{OsdzF$VqQ9D7)#yuN^DyEL2aQS%!bXT3 zOKPPBtiyyDw%UZ=|NEEq36jH+Rr=STG~%YsbbYc-pEjz*pJS`!pJRUkmiEe1uOu+b z6f<67Lxs~h2}c~_ZkS3%zrH!@VZBF!^=nnQ?D2nM`4PxBTahnOB5l5;lebZxD3IU{ z3d|VI1xTAKVw6RkTF1E`_<18b{_y(e9>qoDc={R6L*#9XnVx3lBEIT&FqQa&ezlno z`fr%Zwa3mG=e#o#uouEmPB15q7)@YcLN_wCUPqCUOugJjp3-JTI(eJqNg~T632vGN z5ypSnAm=eKmGj`LQy8>cSLEr%&--uJ@|2I{>BXt8v&YMF@AKs!TVnYV@BXGXv-{f( zRaj}QxiH9Rjf4Hu+<2Df7#s^KOAcHdNAC`PS_>5&3Dr9|iG@2`!cp2pM<;Ki9u#*- zaUPVB4z3h348<*MtgucamCK09i1EU-N+?QZ`R@@#;PUTZkq?5wwSP!w^191sKZ#8;2UWsh!D(KL9IeSa*luK zkgXyjO$Py|wKU0*G#vzxpzg+JOJGV{KiJ9JXgH@(&KM9Q0D~9G3F~FhRRRTTr|7`q z33T{o{r^5kjb!Pts^cd4m#f-af>Yv*c=9bqzSK=%iOsF{6nTZ6$r0Bfq!XHP%G6-T z>D~Lc>n+{>*g&o;?aHcc^1~A+#FKw-;_;;)PAPVXU`3gr)G%V5$BG2MTrk4qz~aGx z)B5eTo{y$U+mF}95Zi&1N}LN<8_tC*P7op3NvDFDQ&i@;P*mq!V2QXIvL{Su>|U*} z=6W&K*i9?leMLR5in84*e_SQbh^q}}!~r=A+EL{c!yK$KL?FpU2=a0RFgSlB{^8wv ztX_`Ih%cJ9nq@W2YiOWsx5zVBiBsZg!zpnYx3wkOdSZbq8O)wF2z!vk`JgF>c;>I) zO>m#8mBX>c1veXUpF*ryfv)^C{H5NmB2<-lzbTb`zo{=ELqe$B0Z47Eu-H*6r1f5c z2W#{o$b#;||EXX}%~Rq`r`msTrqkzIP(vBQOsH61prql!JSr^+@@`;76z)^Og2(c- ztraXPalTV+INzyq?{aB_X5tbFLUTlN$rZB1GHu+zoC5As!9vC|wT%@liMO9q$+w^T z(y_8kAY?SroH|WBM}jg?NLj1Al|%Mej6C(JV9Ceww7nH9DskphZ8(4PDKTb}dqIWZ zUVES*5Cs~XDaE+R2d?qq9u+KfEL2-n!IF57L6v-u!7nrDhB(3nh`0?r7lyeUDL|A9 zZh{9ju!05ms9<4ZIohHMmgrnbcIV zX2^KJ0i4OCQl+{p(rY1Uq?WPs>vQgH2_y_iEn38O59LK_x=(*^&spzTLJ)OZ&ER$N zSk$I?YFi!)y!~b~e=CC9gcAwcGeVn`b8tx1i)W_;5~9i-T3sTVxdn-B;IuS|^ufZ)2CPb-66?{+o@BR|K~S zCLzd4>-m(2q2zuCZeMR2Q;am}kiy51p2 z!DNzFg$TllS{ZUb03O^T+bL#cmpwr7YUlV(zAuPKIa%Evm( zE@$sf4?Ab?FOOC&yr}wZu2Ng8;h_IH4LSi^YPYyb|M<}FRL0fLtJ_%-P4wEX&N`fy zDODz)ps;2ViXAt+wt0HtO|R_EU4@z4eDw{@r@)vr8-cF~ZVROprv?d5De4>pX{V`* zB3jA0=1PCMIteiurN8Z6thCaO>w@%po^G`ai&h9dOdF1yW`f&-lTuD2K`adsN6rMO zQel`8jEERftTRI(!)fpB)BThm?S!^2y1(dvwt(W)1FbGp(-hTt3Sdj{*>D^-6Ko!z z-jwDx(t&w2+GrH5*GM6Q6_aU|h-1g2s8eQfc-enhBhz%2Xu8=ro+S7V_b&I^)EW)b zh6nOg1h)$-iUR;C;Gl!nN&ucLu~Blvog)g@T*}`6<8qz31e?GrJ))MNsNoO?-Ol8c zMHESdf`~zK7YI0`CI%f5rQnF_z@x2M1NQsb`Ks(cydjEihGX9n6g3>spxc>}vWOy3 zqp5$J9v8--U@5|2`8evGwH8}KY6kNU*MJe(5JrADP2H4Rgr4rWIK+Ay1lC~WGmJ$|&GsK_powmXraz~~kB4nSQ^U~)x}6~@i)d07IV&V(lq#^6 zJkC?Fy#P;5BCBearCzRKD6tLERJO-bYIuJVN=0zXZd@88K&fF0IhVq!0XeC0n!95? zCpA-$FD}pDo~(-7^9_MCDaUCssNXBY*z{Y1sD=YqbUOo3mOMDX5cY^i6g^fhjqHu7 z?nVY?4D&TdU;?7vAFM)@*c?$Q1LAfXMLQtXaIA@LXXwcyqy$F9h(JTIR)J9DL^^*d zFqN95$Wu*7ovmRy$qf-Tbfrml(~qC7uPXy;2a9UT$&Z+*JPf)O<4yn;4JQNA?F>9w z#F=+EAVClV4Tz15-e_bL(_BZxw5?e+c>MNkZ$SI2SCNv1EAEU0lkt4 z!h*w|C>DvMK}Q0J6QO24{C|J10k2IHS^oDHUV_cw#W86Wyqb=Nil(EXrqk~XJEKks zp8;H!WA43_I88rtl1qo3HDGNSiNWHkQ?9!A_Uzqd2h6Nrj`j{ORyMeLiLs+|4{}g7 znJMA&hohnw3p1$t_+{nVE5misn-pQ-hSNbA#=*a-vZYhwzq~l~(e!_(VN%@m`u)O& zYD{oB1V;k)zJ_O<_ne3S!{DmyzDcKnvsCHUrl{V9UpV7%T=WK2fHz?-(}r&Yz~Bk1@jPt74$#sFOOS%0!fZ>Gk>7bVm zetm65Bf$8=4&lw!o81C^QZbbt9K6GXlUENZgRd6TtYM2G6Wk`IO;AwAtMxyONGQ4%Wi)<9w%?TI@V45<#ZgX zFFzH=xiEs`k}&QLC*h9F)!2->J!ksGPT2)@0e@1iE^Gic$r_=WC7-{HUsn&Kge_)P zSL4Q^VxZ-9;>nwDiyswV_UlR>cp$?fn;9 zS^lDGN0FSHUQd7f88MX!(O4l?;+I9+BtiFjIL_D}6ztdCVjO@62AMm)B`7wWW5*lM zv6}!0#~lZ79CSWba8ycJ5+ha72F#rhOh(GBwVrb7Qk%%N;dpU*esFgBpPi$NgS|DT zx96W4cK0j{H5_~l<1cK5xr(18JNTf0yb{g4rmr3yKi1k2gT&`O&+#YYoE9KQ#>E^>LZx z+55^iO|{g0<3f(pFBqur|M~d%_^>U|Y+7K77Z8{+_<*PsB*aLNh}P)<5)?CI5XQdF zWVksrPr!emeS5TOJ!po^8iwsG^#Q!1cLoGv|MjH&+@Cx0;8pbou0QpacRxx6jh_~j za(c!)lUIeA6bG*>dFsK={c{=yt{uUD@K&0}XVby|QATL2kjXhG$fU7N+!A4^bb?y0 z2}hP2&+05uzPq?Q?p&Upov&C;+Mx0uB;+`E?*@Oet$>jr4Qt>`aC)jH-HLO=N!7T!gIVpk>+IWk+a!fIkiV>xdG$>go>RAEqAq zkGX&P{1E!85c+fs-iI4rC;P4?t4*Tm9wegi9wbY!3ko}`6>%mIg$NZExyZHjD0qc^ zoxo%TyOnK7XzfyLglZ z0R3`y`RmaitE$TCVyJ6AhN3$xKZMT!rSX4<S8)Oi&pb8OYG18Pj7EP^2slQ!x4$cnO?ML&B$%lVA za+YqO9sOuz(*ZKsc!2CnSW(2ZGLkt1Xz~b=z%Vz)2=19dHM0+o->(!}cw<=2TMQQY z@wB6zrEEH;B^!@veE}&K3<*wphKW_4U`jz!@u;m=Ugq`MI*>Z~ZRKb>wlSoBF_Yp1 zoIanH+N(6Jq9wqR4O>^4;C6vUl~8}y+Elm|l;HYF!C*;pC=Qx^Aa8h{LuZtYIT76Kn)w`2-yWXXs!fm{pFL2%lVPEQmCB zSb{}`1qYj}UZcNvozt_!_baDlY_O2-hgGiJBoux+f(JWG{%i%7RMYLkRbzkc!k4gQ zO+X5qKLo-l1Rpq3o+;)eM;^IY%Lm-Q01vQpcyx^S-@R{YS?4kM)xL+F^C z%h0XDOMnn2V``f0sUgS<210)(5Dwm(P+ZnoE#5yl?OYt~oge(tIoP{cnfX;e=PNa9 zpM=4r*Op>dLK=>RR|H=MS%zq<1LlYkNhr2n@E{5C!W-_juG6@00a>SK>tL&XS!=>p zZ_qY$HS4TZ1YZVSjz=zth>CGGWlYg~@uKn|)y_J7y)V0@*7it1r zH@GT{c~Fk~ulG|@YD>`8tm9S@d>ORyplAq`QjL(b*hmB-4EfZG)LJj=ga{VUc5-@h zd9*4DwLzvI++Qa>v)$tM|+Gf0D0fKa02XHltk0I%8Nkc!~T01q2uxnzP+OPTgw zX=jwcSZggnk=AKsvm}4!E`B-tz42m^#mcAd@CIx(Gj`o{g;(P+nWS*lbmUV=6b=nx z&=T}D+lZ?o_(CRJ5Sj+Xz-kQOR#GFSBBJ9i1vap7D00lKFz$K*x0Ui}sm>EShidt%kz>1`nr~p1obPo)Knx>MVY8X`U_gCoC@$sv= zV0}NU{$0GJrRRUdwZV)z0?$ZUtPE#SX@e96TZ0p?AGoaW=hXDGSvlExHM_iWSWG_j zMn$^F;-(u0Gwq*pf~vw2FapeVD>61fH8vf#QFX#LKTblnZItwY*M1>_Mn zij(jVr<6V4Dd%I;GUY`O#mqDCj%W8&~PqJ6Bsk< zt%J6O-3x!XpfYyKo!B>56To2pf4BHJ?D^vFQ~zo;8lO1yahT3dy9Q3@Go;N`zSb}< zUV|tPk1LQEBoWdf;#^91_TEtB2*zN^Q4}qEfLjOQQ`t!^EavKC_i^&tYC_=;c)=QM zLd`(-L@kIW4isvdiS-5f(KviuBHsq3gE48A3-Nz*qHB+{p$A>2B8%K{*nt5+Bvk>7 z4-=S)e9c~$&t=1F^SJ}>p&SoCcbo-&45m}A!+f*-9_O_Cl-FjtH1{~Q;F`>eic$-g z2wt2S(E!r`!8)>kEqCLi89(l7 z%qPh_z-OALIZFgvZUwSJa4-QpxXmh3Cj5VsS--{gG^a^Esym*-cvcokB&ST#&b);4 zdDwk`+!k?LX_dp!4`nFKpnxY0=S+?8stWZ;FQb|LUrgg~_cZv;QJVqK+WRv&-E zrxEmHT^F@4^QbD-t>b`w>Dl_;vIE1M#PYmJV-6Lh(QIM znofQh2O5uu<6Er(#5-_t!*Tf(U(GIIcId)E;Eg9{?PRZJO+&0I+2{nbTjZ}GuJV@& zXeDzMI_Wae$6}VBP`TcfH!l?T`dO}o z%7xAWeB*syqa2&TRd`cere2D-hPNMvNlue?-Sq2Ofq%Z;stNuu0$=tfxsQKhrZ9O^ z9DVAQ#Z9m57IVB8*Kme(%&ZA-7!0RZ-NN@KABxEcq{ExpYf24#`#^3cRPweTe!lx% zaua6vlE0@XnD)QFZ2^VL+yCj_hWiIUwCd3vPWwLf8SW2n!no?vR{`)YsJlRRnZ%Ee zUi;ejG6(y!@8tGv+Rz`S@N|FGl56(nU*c9W^q+kn+hyGi9>kAJ;Drs7-u0*-k_w$6 zx$5XRgYwTPF~ab}Zjsww-}ENoj#YAv=iMdTQJSCU8!$c?S=;oeVMoAwo)UhQyOb!@bjdr&hx@91^oq`);5*XYGHFug<=-d?a z({T9eFMawg>eB|)$gFel_oGS{2O2l0N}^DKP(xe<6TyaP7_n*SfTmVyW1fn|w?dUv z=6+|%q5pqQ z)W3!5@!aZyS=Z57mSwTidjoQ5X^)$3&vlEgnN)69@{LyT+QV6_)TC)_KJb_tWunyD ziF(eRWW;+G9}pG$dxv|6hv##fEIDw+WC|BEzqA}Wee=yTwAg`Wz47Eu%?@LwcHvc)y{lx;9eT>6wsZfGH<%NKywXt6L;xv z=?^--z2Rlm@5Afz>j442{2@7qOv8t^1QA7|1f=FtnqXD2Q%=K@#GsUSFKj7Y&a zvRnr!peLLk)qxzw-ak&+HpO&WT)&;e9KJwTsVOCKrhc>$x6RwNgWK|Pc8cIuGuaqw ztwdKVQR4Zb%SFIiVVe`haxR4SD()qWkpk_`t2KXzZhFt#gogd-Q1a~4oaQFe*;O&{ zwFy#5v((Eyr9@Q%Zy{~kjTF~gW9O)3Erx+ZB57v}>WICBR@3I&J=$HJG4W6RF_3Pg zLuEg)Vc3m3Pr&r2WtTD7T4joRr7EXgc7}d`pM6OYeLd)34$I#{?GQAQ(s7H8uFfwO z2O)nvRdp2hC)vX%Ask*6`$$MzGBMH<#24C)S#abEL=?rHxa%II zBsd-oV$PMYy=q_OoL%eR;rojEA$ya)S@3^FeD}{^K7M@ITVLLKzed0lhffo3O^tXY zdB|N#nwoN>q;J~v;OV0~J$SjOo9;1l>uykP!5cmJ9(F_8V(`OW6`J?)&8_4rq}1;! z{VhUs5^ifAsd-ISWm&_n9 zY@os_`&T(eJDSsbF%gR*l zHCWqKEZa#wT+t-;v|NRHkNro6_o9ECRYGa!`M}=o5A9&);+oe@hD%dmk7qOb3MG&U1;#8)r^Wb@p|tKN%I#iY$xjZ>O;LF0y`w>!{;`{3&bh)4SY< zKAPkvP<|{TS{>=5NAJ~ua!}50rh4j`>w$Vsy#qt5Rq{hdx<{9ub_49vW{c=A1 zsi~Ov@jQL%U-t(Z3e>vhR5P<$odDsQx;!@pEPNPj+vFR{U6Dq52o z4^!VAj~P4Xx zaRS_P6nC=-RIi&y!v6_bvSEK*Trbdz~?RN65ZZgO$Yue;>jiB6r0GQS6fu*0g?p)V_ECdaP|icVBP$Fbt^9M>|Q>fR}XaPA#* zl#3|Y)gHMBTS~Nfnn2$!(s4`zeU~uD;;|5)6ADeCScuxN^nx4XBPta}4r4CjJGW{dO7d3iLHmw@-j1y?`3gnSEvJ8|R$#jvqR1dfd3RCC9LGSVq&gSCGue@43=*b&>_^vyA!>z+@n zkS}w~cOvMcWTyfXgK|unmq?0S=v<>*V{fh9N3>zvEnlsAl+8mu7~HnE@9zx!Y&L(> zw^48UqKXLGvG>F545Ecs{kU6)=Pv^Xq!ZDP81qDl5WgTM2$32G>T-#M3y$oV7uQ`z z?WLdgAjW_D$gGKth*%l(&|rA_US1d=3o50C<32T4kMo3NfmOD_59!b2L|im1GCLcO zpk7ifJm+vs& zOd5ZD_a4t8*)cx;rqScfHkTA*ewc#d|BCN(Hh@OS@ul{!^&o;@Pl_S5on93iIve^g z70`cPs?bfk!JvQLpDtueDoSojh>5?vhOY)r{mJu8u>{=c@m`ZE)7IGe!Amkq;5IEr zjeN?B?8hi3u1&Q2(n75$W_2xhzc=mq-gSTc&i95r*Xym-(>}nm!k(ydHLI@V`|8SA z>XnNv7&X}bv{YZGSv;Cb<1xO2Xg9)!*27Aht!qiEhRt_)w~yRE-c11}Wils(5k;9o zLJMwqpvGfFg$W$*7Gd7fT)cm~io@ z*6Lv-qrxMk0}q5z%X49ka!NDry%qcL;RA)rCR8Shl`xo1u6orW@gN}KlFhX9&EdAg z;@ZdD+B^9kZkScCAR01bomin=fAW9ZizxXevXjmzNKtNyQASJ6xD1#oN^#B%CIlm9 z_Gj^wZuiGnJS$g#&;A+`>e})?G{!shX|v>^pNzcihknB&u;LsX#a|{bz*3{Km*K9L zon-h0LUYY<$b%8mS|*Hg}ds~Ro`FvYybNb{0t8&ev7e>*uStn&_Ov&Q(iP?SjGI?xS6I=n~A@P zpSgY+XQ1lj36C{u7npGY%PpFRP(wbZR_ov>kKYpy4u0AAh%{4Uno(zgF z(NHWo`^NsdnAWs?Kt5-@)wAWkEJN>IYTh&Ux@P7nENCL}Ud8zKm@I$I<*J|EEln72 zVQID)D~v`ZlP21(o;V?cvC1*;2oKuOVDi2AfS!|>nhgf+%c{np$1boIO2myG%zW8C zY^}ktWw*on;@Zi(*2*|~2X4;Vl?O21LLS7QS}OyNB40%1B}nh7w1`>bg(N{(LZtEh z)h4MN#_+doWdty-mS%s+u%dbaGbMQ%^l0>l9~av>smpt|BSPSrx-?gYof6CJXlkv? z)@%-6t;(T=?B+y{%-{GSh|n@brn7nNHe5F;u6^avj3T-W0?fvDy!k+LSW&MobWymx zz91`cl;}~*;rzfukhlHtZn-7f4)E6Ra1jWpYGtE5fO*B4ue^WPeT0OEZE)<&U}a!} z#mJALZ1@>Wtd$u3G-W8oS@@xCcqI4n{B!8}x0Bu?O0>3Fj znD_)?xbY7Wa2lFNN3C&QIGswt;ljnz>L#YU56xGCVVt4tEIv?3qU-$F^)lK`;Tc9+ z2qr1ZZGd*un&f{JbC+|(1Gjd!jIUjcDr=A-L?f&e_r{rAN1cgKMvbw|X|qOs`uQLK z^YV5k0{ogAUs*aF6U|lsXY+jOG=}9ly4qIqXwF35jqkhyFaXa0p6V-B)KJk7x z&+Sh|bud@0<;z1pP5DK{U+8kV#LnhZ8gFhs!B4FP?v;Pb1;w5^#Jvy}$j$_|9QcWi zF?&qCPVxCiSvxCNWX=z^2I@Ahkj8k&?gjZN>cA0!3mBHoG!jV5{Ayc_qslTWhAw$K z;e*E8sFMS&czTz5(EnpSv-q<`VK>~bxszD4TyrFivoy||Mo+y-1%ovryaw4!2 zfl?(RYQi1~HNlPbD3B~)kPS_L+Lm{{8tc&5c=~p3(2LBCd6*OUzbh;FKuL6H`@uJxP6ap}4C-dUnD%l_2=+PU3 ztP_GDq zr8Hd(5;VISRSVB|_X$LzI`Ehjn=xGkc}SPl-^a3s>V)@UmJAUzfuj8p=;c z-a-ffWmW?Dnff{&jpuc2ppG)Ht(9FWf-A zlO9>T&VydA&}CYpW(VAR(%do^^%6TB+@84b5uIq$kBV1|~ye5|UV42GuXC8kG zb!gqd0!2`3& z&ailzdN9?$c`)6KHc)~?$eF}m zqFi_+1Pk07B6959p$lkm)OQS5C@6oYne#cbS{Up+b2Mrl+^++B+&q*#3GC_0JGw^8 zXm_UtcUR(_l2^R9i}!8{=5i4bbHH*Zw2Kx77s_Gj198ae{dB$9gm)4+7c^JG$&ho; zf_7XDcfnTi{<&qme?Bd|e=hMZ*el-K#d|kBsT@NNQYn8Vwk~ST zGG|6aliix!mS6zn3Ujsl;=@lrmJcz>Mg_!W z;=|tb{g1bHWw@-9$e1V?|uT8=Oy8U-4^A%uGF@u3y{=OPH&HtiQky9 zA2wR~-8KrrbCeD(Dk;Y!X!1@nw^cMIf{(Vj*VZw{XjD2p<03a!dW#MnyLc{wrfs)E zbI?-|HPbJ}LexyMGuDtblUHF=3!6JROv7U8>kOvp8hfcfOnJ2s9f5zi4kS6H9H+ms zuP&$GWLO+~9uh;HwBt6^aK@G4)KP8}&Z!_4DakA)$_f3_L$ZaP`sudv>JYk zOe`l?Lb+{UW}T+Drl(CN#{ zCS57YjRLhl^B z%d0{B|1`4$J(&PX$JYSRYTYKIci-Q9^X(QKF8`=;>>@Ecu&7hKio9FPoUpv zmWzjh8SXI9U-w@8Ze?q%W>2IfeLGGy-SL!;itkl6?MKBU@lBV6;7L>HPg2UlMfRc0 z|JA0r@%0v5P%s<6G+ssIQMP#-6ve38*Kwa8kza$6PEw^1)0|lBXneR8T__Ui+0~wSxNR#+>3CDQ|P6Xs> zh)RAQcC0x+2~k2xyP~8T?-WD{FmEk93Ta|(2$r}8AS8cMHQ?K-d6BX}03``^9= zN(v|tte7a0q5>=xpGfndk6vx*A(>Vp-mT}f7r zcY2a6O{{+nNfy_jdr9`WbxHOp+4!UrawijYpf z^Xx1E@@<%=WWv#-n76Kmx645TzA|o3+^vcz|Z*XpTB(kcs%5N2WYTY?&6)F zyl$NZf~T&~N=@ic)h~IzI}_)@-Ac6D0h%Z^yC>zF%*tT!u^+zOl!67BoA{sOJSc*Z z@mhaa>5;@pBa!pnIxy^&GUcW}=}&tjJ+)WfCB5ts1S)ub{E`%_Jga#4-dJL={JVIFCw{OuGk3oD_B)VF8_)5zkKUG{fjd5Y$*%Fr`MYks>9slv zBic*uC<~IB+>0C=hlP$Z)I^mLXt(d^DD{7eRa#29Zk<@HMMvW{_td6^ux6)qDDSc9 z1~a$0b1&@j!}RX`72uQUc&a1=wuDiYSu-z`hMb=ivg@GXE^gyk1wxSQ0BS)(@Xn79 zB)$iDc-ZwjKf8@v$7uT-H0~ahU7gAZZ-9QkRe#Sq&{Kc5?(GRD8&DG0x{t0LAaj2; zXWm4s+RP#>nhaS2o1*v9nVJ7CiP*LuMx1l^J|Ry+_=;VM|v_@o^X0) z-RpX#S&%$5EdB}gmdo`Pe#p3)LQW|FCZMdJfFt{L zKGv8uJYyScEWBP=-fsgCd3F&kz4@ggJR z1?5p1KsZF5cHn~X-qo9H&D-}k#(h=hnu>**FxM_t?GV|>N{{sraU-3_ielw3MTmPv zJab+$NL+9EOAD>La%XekS7rO9JjhP7@2¬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%0D2Wi6iU#@QeONIL%Wr5g|t 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%0D-^cMqF(cYR&% z*YJstMuce>pDh-kV@0ZeF)2rz3f3kSc+Yut?}u+Ijt)K=g`{Gei2%G+mponT&cBW=%of^Y-JjHiT`={^!hZjbNk5W=O*XJ&rh&7FK=3Z4C%8J2-Woe@~La{dZ*5Y_i z=$(t~DrF+Pr31=OW_m*MQakYR>h?j0zx>yk@@+BfNNJ%uE_BA503DTFvW)>fXJ}3^ zd3v z*ld+fwMgKJ`@AE=QxDK(7#9s7$C~njMk^Sd4v9Smcx>YV6m^^*ihaHN;}gUe#y#s; zGrM1M0M-|_{`DroZ~5tI$<5uj&-nUMk{B{PUwRLvc+s?`CTcCg&ik4z`|z&u+85D*(!WIRG3z7*Jv7JShnvcAogQ`_xf@Ygg>K5Nw2*0TaY>utYvH(ubPZ z&2S$)UiQ(UmeH6IY@AI_lt{J4Ww^R(0_eq2TS&lvb=(x4Z1>B<^J(63iuUyA^5m&R z?atGzcQHGfz`%mcXe~m5W#+bHOAZHD$vM9$^-n{W^4MjMV|{^Q-{`L9=vwHl{FbaXAaMrnuL|ZY;dNy#M?<21xCbLsKWG6cvV|} zfHTJ?Di9@mm2!jS%)q8#5WprGy4u}5&-?!2@bFG^%ul1>mE_zbFV8HGoZyS!yl{yG zNXZ9AI}~=Qgg*ksWJNWSkx}P)&)bz3TJHth2z(`Q`Y^Jgv#)t|1;95nwx^rlDe*w* zGRYw;g*}zA$2`1WFCi9J^(a0LW6kt`AZ2W~vMQ?Uz2K&3(R=ssaRxid+dOQo4M4=^ zn5U@^PcOej@(4bfRK)ZVz_XMrGoP6X*HWp|7@Gro>m2dL^JKjCpoJHfB}*3ZtQV_d zw|0tgpK1+Xw%P*Q)=2gX3wtOQr2wmFu?>*yE>qcf!x8CgwD*|HTH}%4n#ptId#;vL z55shye6xma8HK8gMFeA=r?0MZ4ey24WWmfTdl{qxvLedWSX&IuvHar{A5U%miE@n# zf$1*R0+>b*b69#Ttol=PejE7LPTxHqaxjGzGQ)N6{y8_0{FUW5mU!})=T9(~$AmGICt(H>&<>ojQqHNR z3A0ov9SlpI?z@-QtXP5%hGJR-+Y)B(!ZSkedxxv8KtpC&)8-`XgUR`fp<#lGvVzS~ z88EQ477s8J%xZsCrQyVXjuK~%!bRPB4$zm_2dvVtR{6vjY1m^U)8Mjm)a9e00Q_4m zaS51a*Y450&+IeQfo|q`5&sGGxhGlK-kzvD&rhGBI)4gU+yuCoVFE8c+DgxG#q7v| zJ*>~JHt_{_S4E=?~lj?c?~#lvzbCO9rv3{z!w z6+L`l`c4AeR^vaVGjFE`xCIhHom(Cmx@v7oP#YLIo=_YKcD`I=-V8)rE7tj}>~OXK z#%Ud6b55I>fFY*?`DA^0N+gNAmFI9zH~W02_ImiOtq+N&n{U%910?apYO%2HcmAHtUHa5`Rn#){!iJ)vkou>Sb{1QDkj~ylzS1&%-e;Mf-jwa^*;wt3R7tv!2)JoEsGjh zT@WTS3N|nAvu}LHf9l$2T)tWie>I9GUEKL|RePuBMs7`e!rQSy5A zx;PvOQsxMM0Ibd=-X7&{OauPu2pW67P_6bQjk~-=gv%bT7s@X_9QhYbz#f;#{-^&g zVD_o5?bE8`%mz>n`(G-oOsK#XrrVs7z_WC3mbU$RzjCyyMH8Q3L>A999d@=}jBiH9 zOnxkHGInNXPoz#@%A*wL0AN~xpuv2Wj1&nWevKc0J3i@4WFTVWC;(iS{g{DxEvCxC z{<8EUA9wbe#kSg9sR*xvwfNm z#?@p)5@pL2wh`%W`O@eY4F{gRv0r_KffG}I`2M8VIt*Y_m@X~zKO3{XpDjj6*+35k z>YsX!eKyy{rWq$}e!Flx^LF>r4)@zBDA!}~6Q@8dFMO@kR8&niqf7uD49_f^4$Oy_ z*ITSXg6;7-BZ78go$cLr$F>KW3#;RoJAkj=^eL`$jZB%5|+7t zX!-u~vhf+nCnLaCJK%FIvlOVR#$ph>g<_)_!K{fn<=gkecH+~ue1uCz*}MlqQ_Ia+ zuc^3W_f7y`xAX^#25q}Hpdx-WAzMsXtxvF08E`Ab4twe5()n-gO843EgX1q@dbYa& z!t=wi`@yi1vvD&l9WiHr*T&fNHsiB@F<2Xq{rF}DlFnq(kc99kGu@Zg8KdJEzG>T( z)%(m8Rl|N{E?BNam0}!Q>_>5`eTF55KaOE5WUH`_@MuFt8>|+O(v!z-wGnmIn}8+%ZAbHF}r-ba2&&p&L!}1^KcEhJDbJT z;$f0n(a777F)o^iTb)Z&1fZPvLwqR?)hso#C1UM@2)r%t?T%x((YYKWWY)q|F)p~o z0;C3ORh@4@PUG?zZg?&;)FWGeMo5KmE|JThLlGShhx^rdb|fHvA0MB!UC2h@=YM}HxiK+u zPR#o~{`A-vws^r|4S_9nB<9u(OjuuHm_IHKW^-t{7}YeLwG}|s?Du|u&W~%F~P9$u~mW-B(tN;RLT32MI5$uQmYZrp&&dIL8|6+R0)#{O=o&1}C<- zl9I?AQ<5qiy|>P|F-tP*_G%c-^UKrQ(~XD2W^>pQ;NYajTHm#IKSXStolWvD4Ch~e zg0cOb%?@w9Z7sHF;>Z(!ks8Tj2DBY$Iq`zr&t-!Dmknq{lYo$l_dOMy9W32ciON== z@)vT@GXwh3y!n?5D+hJ6AfztG{$VXeW5^daVosX;x?J>d_x%+gd42os`R0QnfQ(s5 zwPye!MpO?_JA2M0#c|OD{Cw*Ji8mhA9PB-YP4wl6tumv{(oOJxGU3;kMPEnC>DR;E z)AQ>cUu9ny*7j`Jb7L5}F(3Bh$9pqkXJio7m<05IBV%j#Rv2@QJZj?N%-Fi z{_zXP6q}WXMZr<=#tYdQn<0sOfxYW)iG}wk?as^BQW_3R^}b~0(2M2M_5obM^ya!L z@B7zoGK86e*jz?Qj@c54R;5FCoO)Buy2;x$S-XY#u(>6FQraiM2@PzK5PSA)!@!oY z%Y$)6-tPPWQW+h1pM9dNcxDemCHaSbnF(i7c+crNmcEaU z9iWEXFmtuo0_nw(-<9u90vo0l&*Uxsj6ijryL!=M{qi-fJ^nJL3w~;&UwW@R;x&kY z87|F_QdN6@hOucm!qSAeE(zJ%=l4`zX<-VWV~?XS$K*-cGx~5C!{}=ox|fYtx+n5x zF5V*cQ7L%_oRkrn?9&-*uX!$SkhfR)oCxGA<2qX9+rZAu*|AspIP(9Ncxi%LYiv#g zlHgcfa_@b@t5Gv;Bz=AHp^vt#r`=IbbRrRf+pIW$Fw^-q=IC)k5izw$MToMzsh-b! zGg8OcC^|dFK%hoSUO@g-)P>YScaxQy%L0g}$EUqnxc96ZP-q5H9<`Ip907CU4Xy7X zvth5cAY2FH;^h&=0mYxLn`DI|RzLgwyuxY%`(CV2qMw~ZEQJD7xFAQIRKW7v%9?KewTTb z_OmPIR2!oLeF2kMNmerJytI0`z`}bE190VkfsLs*+U^=6Y`DuII<{`WzQWY5i`U;} zUNcJ*yN~360J`x7$^o}KO`ZxPm%^HQhe_A#=4ib`Ebj#I+3b9LpQ_I+OmH3;>q4;? zBwjPa$#%#N5m|>roYObRaoMEisPHB`Jpc0vUfW9JTD}wp*wb2rgKfK<}cFh*n#H$Duu>hYi zqA9_wOZJ#;@o}AU8c)gu%G>vsy|(~=KQ6{xn8CvBo1SCUz}C10VIZ)aS-0|ThxYit z|EJ^bb{l zwrVOiwCG{ieK#S_i9@yA+rOdlD`7qi%Et86@uz!}Qy;$1o1F|>ZrGfiSMY3q|Ep2h zQZxY`C9@0)p6Bipbw+wq=xT8a7#q7Q2=fdeE?sCPYxvSq>`zRclb#!bXODmQngY!e zn}H!vAmw!JYyQ$#y?=bz)Zy@x0hAJsFX|mop>?$v?Jj1vn`WWaTEQ+Hfv*gw=LSFD zXXCTQ?iDd%bo5F!);Yqufd1Ei49D|ya)o@%wmX@|HL;_(XlIkWOuYQ@i^c2QD zW^Mw6$-6d(W0H&WW7G@vdAE=bcMXlGA%xON+u?9lW6nt@Nyzf@8tcedv-ev3>;P0o z^^Ua-9jH1e8{hMxXM@3*>(@iqzMwm6t;D1}t(gKegCh})=R2NSJ?vo!Z^uG_RC4vEL2pY-YYn*~7kEy-b=IkGI^ctWAyb89-^|p3l^JU;mn$-X z=fp=~9?R!*X^_oBL#jDoD^hfc6puH|1D>6|2ioz#J_YIrkwsG$mhEE{ajx%`ugC(P z6`uw`UJeLPX3^SXY%(-|!gCChVH#HAe{W}dXzh6OaHJahgv{}1^Z2{1gpMD-d@NxS zc4Ref0BN$q#8v~xDCF8GW=(RvmkaEy@QD~Guz53rTE2>#2>J|LaEK9X{8Bgo?#{*= zXT?`yd9s6&@F6vYt~2Wd$O|}X*VK{_|M;|rP35d~pUIle7|kYs$m`ye+&Vy~v6drP zf|0l1wno|)C*NaFE@w6I*dJA$WOx{a!*PZSl#j2^PY;j#?~6~x4_jTr{+CcE6x+-! z2}cldd6pq<*{D#yyzba`H*IIKm^>UI#FjKV3k1qm@5>vmg~DAu4vCSiZX9B*nP6io zHa-J%IsDZCnclL0IOc=mO_nDjQZ`2_M1)}0W;+=FC5dv0iSOIP{hlU`XT>WEkgO$D zlrg}-IQqkq0HzdM?Yc=ZDc7G~b~S@JD?h`6w={Fr>~k;1hAE2OP%Rzac6k>J`On|? z@VuWFZ!>HT!rV;4?%o1=tX52kzQD0MH{ z1qG(XI#k2%S}BoeYPka6_4V}z^4Tq{)F^CF3DcLHCI3ly8rmsX(j2i$e(0YjHqpZt2bNf!)6Jr_j_guib1dupcqN zc!o4R+dbJa^V)$QHr_X$5lP%x9W32A4y@T9>gdojg6SyX7X5>LIKyd{Ae|^=9~{4(jNuPwPjJKe!nF@sDc{ zuLI_t#+YhxXcg$YBgS$38~fjVP6F{C=Ok~k0r&FsNntmCv9YfEuOFj=%o4LPt#_hP6fbr*)gi&CUwd z!3GJeCJP808WbdP2pW%>vAW#XeTDO<3k)cK(sHZGLMLm_)k&WX%Hgb^c71)m(-56V zHKa>64o<9SurtFS2SiC7N6SlDb7Vj8>gE1=u@2`+hae>NCXT_zg(Hz4J&huEne8A^ z^Paxtr>DubA~RxslUGi?#_rk1MBxXrF_*ybE@J8vv1|mc4cLd3vDo2JqHmK8>|l$3 z0UwrkP0!DI7rm>?S>Iyqd+j5U*Hk32ag~Z6ID@sQ&eGN=aMweBwNs%9 z2CJBAoXNeC?ST-=;KV5ds|ycRIq5x*9Zm(4VaHouWcG|@w*?a=jqS*_ii^wH>i@uM zUBAfU1Reo?!OsYY&O4fH3$RwIwo6<_jCy!`xqh;tB-3+8fH%6aqggjyH^O@U+GkxR z!ZF$H*8m^3mJCj#*GXH~IstnVIPzi*4o&)ZP|oR%?Hm!jueBx9>q z;Mc%sHS4mP!}H6wr07|xbxio+QBu&Fn@rvi=Q(3Hjl9!q4)w20)y|2Km9!wOxK*qzIQ@VKhE$924pV0>kV#=^jj78_A&oT&6~)std{O+=!O9nQG{-P9 z8JT?`-?xVu^J@mGdp+FYTi5GSQuh2!ITb$Vl^%n7QeZi?d{FhvGF6Xv>y!7(4qgv*p)G8s>-lEB~LWiW1GncHLq?lW(Q`e2`Lgx`yH*o8<&Nc#D zniVt0k?1F78)e;|58=Y~fHJjFtIt4EZ5GZCII{LW5WDcA>=KrLzx$%E@75bgwlG)~ zmNBvaXonfIsj>m;(kW1V#?u!ZuSb;PHFX^@kfceCV#PO~aE|*r{9Vi4mXy+izC6es z;=050_qTOw>c{VX{A@#l>cfY*xW>WD167P@bLk95r2$YW5Uc!!0`@~@;o(ttrZmop z&jr}V%mM%v>HI=}j}Fmv^3giPE6Ws4e|(bPZXiD(N@ZgMUi#sDg-BY?N>k}!I^1%P zU(Rn z%*-|6E1BqGWhpbO+0>!Gecp@OSgiEOh{`0;4Wd}Va0_3|-ZQslo43bh_I>7~0Vk@G zP|k%7x_vd-*xW?54F+lGDXZ-h`$Jtcc2=rY>)7ZbWVQ}Y)`R!!4jLR}7>1N$?4?y? zhGT=|7Ez;r0%-3ntLcjFCS~731ax=fE4)+NY_%KdL1~tcY5S_P@M}-f^w8ro=bcI4 zypsC3^&XuBv4`fz&Q4TX0`|9s&_f>H#!yu(Hv(_R#Y(bFSoThMmad9)$J(OVay{5_ zVD!lkewPF+H;zxVR(q)>AeGaxM`pufWz#r~{P*jBiBLUGRfw5hQkD_X$%`Pcxr+C! zY%l~^yZwe&^$+j5L;`?Gpjef0kg~N_RtXx>yVgM`g~L7LpXCl%!`0pno}+7xm*hGL ztc6mcI0K-m9Iqku@OY*2ulwz?NQu$VP-ub?LJpYLwj!K%86!s%yESPHL-y^aE$rht zTy$7}4^TB#m4|s`i*(0G6#=8Iofv0d3_^2OsFH_TOmm84dSa;>d3@bNAZc(q6(@@8 z7GI*gR)m*OlS=BL5?OkSe0o$ckjc*w*f4^@_L9z7g`Yeq=(s7}1w+F0mC&kjx_4!= zj=>0BiQOfQ|1c0?1uuCsq^K_B3L1tf?j9U}8>FvjsOTW7(Zg7_MR;Q{q-PiBCbGc@ zDu|?5Sy_odvsBU-D|0Rn~4U7}QrNe#>%b zuIA>v5rwtFZS6UDKMuiNcRPQ2>;ga$i!er|o>>WkN{DeEIb#>Mxd^3oHwkZM8ed$0 zL3UkHi4H59)f7yVn9*;>HQzDtz?rZNpFhX}qmibfQ)h7c^z`$?OX2!p3{JN+v@F7f zs0#Ehm)%>22bwBOAL8eK?{;h8>sSC00F98Fb#1g;vLGb2W|u$Ev{uxB93)r*#-jljp2joxR< zTFu7ltd}EHEmhR6vam7J6Fl=Yu}6eauFRFxUR~OLMvCMkuY*F!tby2c@S-Mv997q9 ziglc@d3lxlN1-N{{N~r~VLOvH`S9%Y=+l!+VbizopYHo?lf8n{YT2wV;3cltU?r#l zrhW)3rkAY8;3p)ILWAiFs6!P-7y+=SNXCZ~a(JAFcMHV8G$1K!L`HCPlB=8_@LtU6-PYV9`2{eNXS#GOxF| zi#S;|fdOf#Ip|kgwaO)l+5roP*y~~Vb=R6FhEE_px-%ZIHiA9Y6=uKaibcSByy)2d zw%yie$5Y0JP30-3?D*49Po6l=#{)q+<&ImZ@OJlin@!oDVMcs^>hYl^I_~vLC%9R( zX(@Urm%<&u^gQj9P>k4!Lv}xX;+jMKX5_AnPz>YJFeEt%MxLt98o?>`7>5p<0F9iPl*RQ*62H2bH_!inL~aazxe;MQA5dd9Z3B%DxKmN!+rythNS^MqoCKb#VFL+0r z{`o0Bbbix+`%)romMWA@nE*W_vCl=Vs!MA`3^Kl0^mcoH|LK`gFqMjby@qbSW9;O$ zx7ym|k_$2m@3L|%vIGd2jn4gR;V||0FLzupwl}-9B$G8*rEQm}Xo zF@dhdvYG;an`b)ER6Hx=KmjfnF*_NP)d03eMGuDOmFm7XpR*SJg;amN{TaT?+uL-! zaQ~khJh5hSFFgosD24wlD`J4}n;=awFCkTL=4abC81MTEmt7bOz*1M zu5y!QPPoJN!|j@E_V>uwY6p-pkqI8yhp~gM#%ywb0+ut$j87-zyT84HgjFhR?(Q{9 zu?8VnrbWD?;kD$msRl^%E01oJ?Kz@QM2_}jOKV#3xgzo zKuu=X;aP?&;2NW)t~LW%L5uY+OvJpXYQ+>Z!H4K;Egn!>7aM zuI(pLE;|&ZBv)V|DnmYCacvd8(s@^ZZ4zeaF?>3g4`NWD3ztK5fNNDssjlnnTx9tj zDH=AWR71D*(`;-$Z|fQ#?x~poA%O{}(^Lr~qgOhy+<@~@0-epC&S%PbnMG$?sG?+r z)fTmxY9#QhY93t4S~;trUQqvKoXB@qm_H}92j5}8W(6$adI>pWVn!lNJ`3i5lck%@ zq1~nFg7YFt0QaaW*^(Bh7?cdES~X*wC?@1MG@XZ!yU&*^sOnY9-r7zKT5@Nl0uN=u z+$7)h{OE`FVQE9ip#UX9MO)Y@e7OT<0Vz=6^0_1l-Y~w@ozCUdoT#JV?H zR%nQ5ieSz06m2!GBsDBV0mv|aQQyH~SmMBck><4P{`vQ3z4l+diBsyc7p5u?*cECk8LF6)6CpZ2_Bf#tXJl zkKMprIi-fz5T_S+)zHj;-=3;NIvggD8YPMYd@RwB0;i!;9yk>*4Xbx*)bn-GEh~sC#49s0iM7-7p(kiE+aD)dh)4YX)Gb*mAQTt0IBu zFfqPowgH`q{yCMay!6a}PW##0hw1l=j`-u7rpyXf<;XDgdb-Mg2S){Y?yO4(($dG_ z$?J~R%Yd~<;UzY8C_yrUCIf|5oxzVlQpep{w(HR5%YYHqpcm+A3U^w)u`%aNDY-}nQo;ln`v7Xu7;jWKr%h_aqF(_idr(S2K3Q@(Q3`&4+$GkR96I! zXy(mF9+wS&_khWN1eJs~F!ij)&{SSA(^(5Wukn1+FW$LzwstUt?eXc%|XRgqRy zu<$Ahqq;)t3A&)vKJK=)+Z`_)I#kgDO_*&>Bo=!HCB_m=VLV>W1~lTwi^k5mve=WW zsZ<~gX3QHFCt#^7Ov5nJdQ=8s;dcJ;@dp1N*{inX!_1C;d63U7+0<`dO$_4_wsC2J zi9=ww4UE!%THRt)R?n2>`F$k7qRBobN%yH>H-q0P6QUPNv~B?;P3|m_G>qh7j8y6^SOmFxB#$?+t`DPUtcsp!tQUI*#CUf>88z)um6;?w+ zAU`wgDhKr2aY3j>0n1@6&E#1`Q?H@wY~^f1yvo1yiC z&d$REe@ykkq#pN0z2AR$yrW*8R6i$3QJ4ZiZ5H)bkFDW#uQ{;sB~Jd3%gybG%R~~M zweN&zWbGn@$5z;;!2G~2<@j!Bsxi;onZxmysipGf<8B#rJ1bIEK1*Aqmd;>@G}F2O zcIu*gn_!gYt|%t4&aB%aOE3v|_;Pzpzil?Je}L7%DDWRVKL7RO=gq^+NR!vdTiMw9F9H+syX>udQF`gt6y`LHJG?%v(Y568-Mg&8vDnEDrrok8Zs^v7jA4p~4#wRb z81t%@0rPTLqm1fKgI)_KOfD%T7GsC1#Tw-y%6Qr;SDTOo-~l5OqE$MDnrq5z9Gi5v zsR}<745hoO zEXFmffd`9+f{QFPXp=M`L(FtDe&{j3+qb*@uC&8px4-gI)!1BXKr1C=6D7!5f9?f5 zwq*8@86r3AnYO>>9;P(ge=qENyhJ3G8S+8UEp!hpI2Ya5Sz`0{ z;EDo8!+uGQEgJ!0La9!(VUq-e0HY5>N6Mpi+1z5G?m#6D8;E#V73+F#(U>$U%Y?5y z3+9#x0b$gwl`}QP@6sMyf9M%-U2`8{GkYgpgZXBrJPbL2R~1c~oI|eTVtP0ChmV`x z{qc%cp+->tT$Cyqd&xEMH``^TCjj=-jlEClw%)XBf^)4bv|Toub*&s!PZe}H0%HLB z)i4u?IZ5)kv#$oYw9B%9*xHyZ5PH_8OA8>OJ$T%>lgAmdeL0kne=b$!7=aU6NxTSX z0sK@Pqw2-b1@Zg$77UOk<7B1kR8$pz##{`vL2I2()nWMN^NSv@bk;cQ&#=y*0JXdf z9vTueWiz8Y8v~7XOyjt`RO{v~O1++kpeVu8tRnJuqZI`p2n-UH1|S-ja(gA!H$e4j zjE6;ST4kFDqq8nJe|XK%~AUO)g2FbdJ2606!MSi{WK0 z=V{{W4@nD;%UYG2+w4-SVT9R7tHwPZ@Lun7PufBD7V?sJ+Dc?qztZa1ii z8N`t6=|pwqaggn|KrdyrQ~6Y2?1%GO~rYl(_YEHIp_K$>6wM^JLkiFlgi?a zTsf`0#i{CYFAC>6WLiOvyS%c#JuXoqM=6%d=6P1&W(&wr2g|{1UsI^EPo=jl8Q2PM z2JC8|H+cO8fU9HWKw!j?8hAoA5#kau>Ok)J*=4H%yCF&4cQBie_skDN%uMm%Y;g5oK<0$Ciz9?%~hvYz+W?+=gryzg@&>Z&dz`c@7Zh5|R*RC7j^L{Up>qk2cM^m!1#KZh+@j%yQ zf0(g!Ja;$u2fu2JE!XIp1WvZkd5G&w$5O2g3I0-h?f`#}Nh}6wm&93;k}VF&1E2yj z=>fE0;A)pa>-Zu^3U*_{6o?ts4->i}LAE!}oAprMhvTaZ6WWSY7nrAN=}_C;lBvQQ zR-e)`G~Yh_v1`=wnM8&r<P((K$pgl{AF36jr`@HNG{D*pxR+Lc^7~( z*zDY3<(u}jzAtTmKJA%_d$!1w5c7ekl(o>x=2tVdZ8W=8*H<`?PdA^p%IZT1B#S{R z9!Qp7`eyju!V9<}*h;&+%DR`ADYq|&^rueseel*dTi=lnRJTpql69dHGHMmMx9zwK5B^8vXYsfcQGGn9c`VF>+viO8e@#H203 z0bV!mUJeSiHhDXc9nWh|(I#Wo)X^Cm8EQrCA?xV)Z zo(@?9OZuVq>E(fc*vGSQrcuat_rH8d zFhmuEGv@*4VZO>angB&WEddFPztE<0T;|qER*-nc5HqY8*f$_enX_v(e|@Zj&CT=6 zVWBWkQtAO!hiqd;wgTiba&9H1qU$frg6m@`HamWxzQu*Ysjo?m5=giP|3Bus7w5*9`St z?xoxx4XQSjjoV}*lbB|9fAY4^kYeb`k2;qa@ZrS|yvkw@S#y135HPPaFAH@iB?&Kwa(=)x{oXjgq3 zj(7HO#-p{W&=jQN^;AENZE$1?;w=yM+9|u95z$T%KPabHGil6*DTkX#>lPNk7aHteuzF z>#8BV=V&}n(ph;Af29ft>u~wWMZ|KWJ{V)y<@m2_eLU!(kjyj}Vid>{LKtJW0-fR$ zzx&ehzlwd9r-LX_dbh5`(tPxqvK<{LW=w;4W05E?b(yEi{Km&zyc2paJIG7Xg zQk9Wpu=K_)Kk{`m&fj4NBsa5~G%WBaP+AIonBkSpejSFie>@579LITVfv%A5Yy_Kn zS6{N#NYY5aVq|f$K74$99Hc0J*qWJ-i4GyO9Ekr*vt{%&48m0~)~HOG*5q|p|Jw!b6>NetvD3%)9BbnIrCw5pZwSn$mX!?`1z&lw zI!>owZXbHPz0gE4{(9t^#)awO`y)6EEU3!w|huhB=TXM#?hpyD8vzHRO znm}VNDdI>lrEf+9OtdUSczw%hp;_0tI{Y@9imaX8czxgsZ+G@GS_<#zbCQ5Hm6o8j z-ihZ3f86NF)3;jJX#n57$Vu)VU;g*>r38P6BYN{oIM2SbXbann0f~Gnt({t`cbJD$Qk*r(G-u#~-8wmx{GZtra$cUSX)D7CQF=cYF z&Oa*KL7F1$2HI>j?M@ z4D5r){+A^!$0qvfSq?uG&0#u56nS|c(FV0X1sGcGK}L>!x$2*3;&UQf^(KbaT=gVI ze{4u)Jx9xUJsY$6V=j=7iSEF{MB}-&=9}}JztB>zJzCqx(slm?(Uz?zb9R8Ip|h`JsE{dw1f?YB~!sS;RLvz=2I>jdEnAh#fJ z;&0b?AJ-il{7@zUW`{LZ&OxiO&ge7X%CN|AJ-o`g+w3?jiEJ9viNyt^XUwXre`tEF!NTf>x=vGk^whHPIGWZjtVjwn_y=o zR+ZG#5@LNF)qQ-u6|Rv((pje5q*NO!5Wcs_Ez*q3_5S{R9Z~TD%*I|x)e>?8k~bPz z%2Ig}3#7N!><=Y#pI+v}AG>NR z&gB+tBAr2s@C|}Mf161JH0o5+;lvAND>ulx=B_)obGf;v*k)qYY2>kYNWAb0es*|b zr%Q1DB2RZ8k!$-HhK&V9)gZpJRfY)xGJ20-zf66gwqJW=*t>UBzK`7&HoybPA@CSY zodaw-dpeR^CkV^w2UkgjB70x)b!AI%@q=htc}5yZr@4{}f4dV{|C7wqU;lJ^*i{yA z{##5x*bQuE5Eqne_=rXTmZVS|wXNr2BhCJF|J&z%?f2gqH7j@kAFV-F)CNZ*Bvylv zK?gRlF8%nhPAM zoz>>w89LkhWH4QHfYPj5K&%`NnPWp@v#c2Y{r+Vaq1boMbX2i6x?u;$A@Te{O$#M6jl4(k5uM8pnjE524>$+MVY0Uus)_dL%^RV)2_Py!4EBxVjga_?PW%cJ z@G8}1joR*e;5TwPh8ddEBl2GF(+Dt`V&SJ?u%@l$PU%nb%azAR3)vxemszKp=0@*^ zaEw$)f66Rk(uD%yFNkn&N#0xGGxr&%pK#JSI@Vz)P04Uvg2`!(CEu&{0rPo0oj4TW zg7G|ldEgq;`SvmzPOX6>9&8|AQskUyWS5$K#HTiW-Ja3*jH-Jhw3LkS3P)>VL4*-9 z#u~O2W>qBh%ZPLLaiDr#ZuDz4|6=#=l=>{I<^%efq>}lq@R;Ow6#+DuRvl*@bn7>W8E@-X7P$=4m8+*2Akapz;#gvXXV(563|q z$HltP%@~$br!-oGvKXfNZEhqPXD=zve|MX@UvcjK1{2*~4T$c}VwHC`I6!#U%Sgo) z1G}$=1)P1lu%7!eZ})1=xzsu;OHv1i_4#cEE&x5SXEZd;wx(0qmpGh@+{QtNq-Of! z(&P}_mWhBgOY7_QlKUSIu)A*0$l!Q7kpyDBZ`(85BUfzQcQ5?Xycl@==p2?Kf5igS zO7B?gK=`V0%?!FPB)=8Q=0Wj@#^U3MAp=et_|6RX*?dXM{kxm-15&42&%1M~C=@7L z`j}osHIdtRd6#kRVdz3^fiLR=As9||iW#i8lhl9(wtKtvY*fMGZ}&mTx3VE1^N_hp zluo`*9VO)Yo?2b_HBjT`65ee5Qt$VoE3HL7Ss$13xJem(m9&W%c$eENZIxZ+~A-{pAg(jk$$0b&Q?J<^ay2HNyyt zI}*DpmPPP9s@%pEaY)7WmuX++k{OGXN-1?UoE02fi_jHP$z#iwe}?!~E;;fJ$OT~S zvstmK0dQbUgcG9yK6j8jYAQyct0HJqm8fJUL@3j2FRw@!?9k=XdfQ83!npnvk8MWtKGryu-jM=F4$ z|CnIfUn1vy?cTxHf4frP8Dojj$h=VD@GAKE<=TsnH*y2}^{Tf6pBWiSFDa=nT}pwb zoAqtWb%alEgjMZ>2Qt}`XATk7@6%vMWWu39 zTEzT6ZCAD&$8IctMSi$`u)|^Oiyik@JOLB{ir3ssQ9S3t;cvg0BQ7)4V5Yk%Kb#{< zoamayQk4l*WyM;DvCNFG)l^kHpbs@uU6?~WK4GKDe-?t5(5ZK3v!i39MssI_-k^w|a?WS}=90__lhk)l>q7-J!u!P>5M#IKvF~-2(6%AZB zSMWXrTB~M|Bm`SN10)tEY?YKtWJxOpA=ETeiwQ*K?*4AaM{TkT2j252V0*w`UKI7$ z6y?tVe+K4>O9UW43}baaeSh5I^D?U|hmSrrD=i9}f2)SSA}(SNO(XKV?c2M)A_xE7 z^?H%Y9tF;J%iFAT#Ru)iDYM+&^=M_^h z32b`3Xh~f?-hY4Cfrh~1KX=c&vID<0JAFmfe;u$63x}WeP@!6%DY0jqQwk_#x}2#z zEerj_+`6i|VX8GSL2|BDZr)7&XwVFO5Zg{!Z=beqZ7+?<$_Abys*V}Z%2dz8TVwiJ z&2$jZ{WsX2j&S$wsoXv7cCB9BKRlhu(0lpd>*p5H{Ev_Rfg?PnyfUD*Z81}_0kaIK ze=p8NKgAKP*W3FwH)1EPry^!p&6+riog8h)Ocx2pM&s2yU9jIhf7UdW?_y=KuN8Kl z1#Pt~QH&wAr04DGzTU6u&2iE;B}f38hQV8dKUTxo=%S=<5%k;iyzZf_Qj$GsJAk5R z;G60IO;w3?NCX1V*%#5h&O0;RKYseXf30(6I3IhlF_oH!k!mDZe23A~9FspRtFk$} z&Q%3jmYkI*<>+2lp(=87xm)n7=}LQM^MlXZcOV4Lvy#4*p>%UCDF+M|Q~`@l(^oG~ zPeo4Moh)`I`17n6;qRAuj~`Fs`t>z-z+q9;=uEz-!GgPNEbH;o*}Q>u1Nmk$e+&uP zkWl3c${K4D@46V~`q(pF&E{xh*%{fBem_O}a74ymT|Oe?r}jtmrCU>L#6|;Y$~l4P zvl^As=QdB1`BtQuznZFGg%18D3=PB(6Z<1oK?JR?w>;0AS#(2pY>FLWu#n*~Ll``} zEef+zhUTv7?|u2k<8{AlZ+Wpte`B}8TpwMkuL;X-c;5xAthTK6XvKpJo73iQ?tfcv zYIy15naKvSlz~G+(j!>JO1619ICeTRMfuzHwh(+RlbT|%F&p?rX^PUU)v>qhyM)oP zt=Af!KW`YvfEZw7vq3e36#*VbPgJ1qwZXf=>f8MHbSUHvbNV|?+;-FfxiKOtTna+o-`H@i2md$YwZ z0B{^|+6uson#mydCN!YnSPexMf4%o%qwIuDQrRvdu$_4mFKKiZe>ofoHvKB^W1V&- zM}!WxE-X>21_VK!ah{)CT0;NX5P^LZkEttxbpq^N>%cIK?ZRS0cVVae?~1C-SBoks zMfFp!lTFGOY!lTK55F9f4=+sOA2wJ7SA?&lQe=w7rH*A=wNQuD@xrED-Xd}F%8m9Mn^W}Ynq}4_ zC^y!Obfv*pCg8nA#|<_+(CS`VCIDx(ju9OqZe(5S zVExb~n}6M4vnb2HZWO=k8T7PC=q3BmTuP?TuP@#Z`UabWXD{MIH+y+gfB+krv(-TL z*q!T=%`bo2V6?*HWVr4O-{w{B`!b!R9n3fOyuD=ff8Sdslo^0cbz7=4cIbcrnL;&! zFJrTsrcAuW4 z3h&+?cc7@)nFRw$orI~yRf)id7F)CqVWcQt+eFXaFai65 zO~FDw==k$-=Js-uTa6-ufw6Wc*3medM`HggZ-)$C*`8f4-@2^2zd1DA;n|zC;F1G4 ze*spv3d=LH>yIsFj!JIJKl|?c-MS99N0ucd>##eN10M-&wb6)iv+9x!g89_){d3>d z%_E(>Yl#gI*!D0`8jg9U4jizgT4kDP@Y9}IKh(B&!Xb}|20da+aRZvI93VtdW-f;F zY0KGa=fN$3iv)EENP+C5I<&A1vSW zyQ_6|MTb_Sp|*q-u{;Rsk=n2-uymYf{c5_jSQm%hGoY?r!0eI!vp(jYrtyO+KTIqElsHpVCDqz4FI1!Ct7%qc3U3if7#~y z-!8~Ee|gIOfWIUFT#zMzFNFhl`UN39j^pizJML`o<2Hf$jN zd)Cf9vmMkp+P2=z$FV%q6ZN@Rk6WV<=|=V208TnBUC%R`Y)=+{H(; zHNuE9fXCW{t=p6&1XUYCLuM1^|3=~5%Xc_GjLV1cNAgEbD!1TSEgl_3f8J`KQbuK+ zk((xeuv>Irm2z`nRKeSNkU}2hXv(`Y$Eo+&dbEh>^G2VWrtF7@5}kc2c-tfy2qHHJ zq?j}QqRm)Y=D1{BOHq~Wi!I4u0S@g}QrFDT=m*!jKer=W)$8ZLA`deY9Eln}sbmMx zw@2i{*DzK_pAPExZ~bv;e;vq)flV&5>JLuKMpnb6HrNxFf?%=8yvN7!VqL!%9>49F zxhnnUX0IN`a+c}Nc>H$s+57Vm^{j>c@|9izIGc?bdmT~Mcp1PB-2r>2xzyX^nyHs6`Ed^FY&A!in z{%cZg<4)b&duFLM>@&0P!*p|Q&Zr_(^yVGoCNN{)(qP%?a z>2H5~{n#b2a`M@G<$+iMj$7C4_v3xr_bq9XeC=SOlPlF%`-_3Z%)C!YTLZ+7Kd}$2 zV&0L$ZcsL8vD5f_fBk98aHC4=+CvG#yskJxb|m7g#jAR*sC+!&pZEgBglyb^8yIW| z>!>W9hVKqe*pJH^!^_V%XJ4UZ>yyu>D-bkxHE8?rT1H?Qf?WIxEAF>vUqLBVQ}ZJv zP*lnyAnq~u4I$7dV=kU;pUm)C76hKpoY6fmI-YxeA%H$=e-4>xO;MSoYac;Bn*t6m zyuN!i!Vs2%@gCb%}4RODpXK*q?CzCC6m4SNOMIZI8!Ly=M&wgz#tB1S1CL zDdGb*B2yN;_TckvJb8Gm1VI+8ai~(WDw+CA;_$ljn~uf0>L2VGgwk3o8wF5vfITGv z+AC%fAlt{rA15W@yFK#owGFps*{Fm zfY-gQcP2siXGASuNY%; zJ0l_?e>dOTDp9?+9hsCuSRxzJ%I*7@w5U^zxxgKm=}VqD$6OJY9&XM=riYt_vFYK4 zt}J$TP{=jGSp#vj0B{wn#5#(vb*|^KO7-L2UT+brp@6b7ca2P^rR2QyR;-R^x`waQ zSb8_etFYQqZrU;tDM>_ditsc&I-Bx5!Rlx%f7jVG%~zANbr#&*BhU{fL6ky?9^kim z64EDZN*%STQGm~T1W_M6=ZmhhdT`V<^`Xz@W>ulh!CQhEw&J{VY$6@7-9*7(k7o4H zV}3UcpSHFf?Jb}Mhys*so91!OA!vLE9?fU8KB|%4gZvV0Urxv2a zf1~GeKr0AWWNIbw1WQf<*<$gQ>Nt}9^kfGQTRET~E$h&z_^Ntn3E`qCM0>455T8BQ z@yzmXU++&gL|FCK9xzRL?Rv<4bp4W;%sCHO@#&G5e z^OIIv(8^b*4Ov!Ba6zna(Lf(5+qtf6X&VO@gUZ8Q6NAl(^`dO!<+Wy>TUYarf9IPG z4nQ>ua0P&VmJX@RTyNLd2vEM+g4Kj>JzPP>~+Q^m-Plw^fPsF6+PZ4|W9uOqw_I6d$ z%7NV;y<@Bbz=Pdl$>;hQ8tfxB)u(CE>lx&m$%6Ic0kMME1l;URr?Pd{vhOYwKYhn~ zYF{Rg)d}KeQUc+SJa{IX0Wm>#`n;z0WDa0`vjsW_G9V|{nEL1eJh}udQ(vi>=d=$t&Q5l*M!!AnK53ge#RVXXS(ime@XNrY0hgFBBYk>P zh*92XF~r7_X@gj;N{)KOq`K665((_DUJS z0Kgm0lXZd6%gxP??r$r!rH+l4Ld9*PoFNNhj!RTdG4(^|*ygo1A2-fg!!;)+{{ing zpRB^5M`KdXC9_7WH$w$6QzC!-q-~<-9U@44o=vl zWP?$WoshDp(i}X0#y@ryjPicoymMV!)+3udcy%UP?N!m(f3$E>gE_sJ>d5TYnazKF z#%Q%3{4+~w$tOT-Y!wqLD^xwWub)onr#+MQQB%YxQJf8ap#cc$j*Y8FZUCRteTqkX z+PJW%LJxagGRf=(sP=cnV58J`pTf{@*LPPpeYd#f)Ctq@6s(3B3LCg)wxEZ@f}aw+ zHzMN23*j|Yf8IxiJyWxjiG|lxmVH|HO@Lhm<1k{Ucyvp#_py6q&O;X)SPSF>fMJO| zL{3EwX>Dq__N(g^QiI1YTl@YjCu>$9cbgIZfZ#GfFx4-nN9GF;c29W>k9Y%~;cXGC z@p`p1P`b*510U-2p6WAi*-FbP!UcQJ zZ?$Gb*15bWn?!zplocn(M`o!VW{m4vm7Yupy(geVm7FLYji0WTbFaH_{vOXw-s7^F zdwh9~e_?zww*5bC*R~tSkz{`<@0WR+!K?=uEY=IGKcJA8NU3d-&FQ9WYaiy@_nf9_ zajDK$br)sBvMmu6S$T;#CoAGa^|`Pf*Cf&yTVtzK2~tyat@Y0Pt;GuWobhDDrrN4d z(nZH4;P~AP;FF6N2xKhx$LD+RwQ|jG2SBNPfA)s2RZCgN6^L+XEhbxxv`5E*ds+f+GmYYl7vp79t^Htxm1Cw#nSj4N5E88x9 zF^agKZR)357R+6uC@U}XFqs{gXS(&N#(J|+W||~+0CSX1tC7VQiK^a`9TszXL9xjw zeDa z;OmS($SMi6x3*2Ew99ZE;U4e;Q*Kmm(GRB*`2O@>@zibL(-rAcUrY)}i8o*+9^^WA z7eE+z)!%}(J(Otxp~<@6-!#P_^4Z4`f1J0Gvfpq-AVM0O3?Q$}p&V^qb%Xlq#C8!; zo^K`~oB%mw)@h8MaIEIq88nH9+%&UzC0878^?1H@W)4=g#akpGV#{_)Qre^~zZ_rL$}(@+2XKR?}Kd+^hr0tdp2f3mxP z>o_^qQF$@=5~lYD?_nE+i08Cx(|y4PGEO^9@%$d8l1lNkuYJd)5 zn^75|6}Xe{YMYmEI5I(}%qUQ6i^}ylOtB;CDf4{~+hEHcw99?R2{9Hwn`e@;L2@-yG8+k5*+POwge3QexC?%XP{P*dTRvr-85 zU-+)T`@R_cYh15=bA!n;;G7G5CWSa-^bxVbs+>m8C8_#_k8(_>fb=IJUE2Pk)8uy@ zADo?!hO(iCb>ylS+lNaI!~`_mmg)FfTUadd(8}?O3yL#CB$1QKNe`jj%ffDYq zmuf*5?T=D`WJo7EcFr>W+(!HU8`=!Qs<*z5b!;OzGvTuNHk zWPuiJ0JzO9!=WLHC4*S5TDvqjvvF`GdS_zB>5BzqR9hp}DbriYqq#E9yY>7%O#(s` z<9stG%{5^C!afW|6mReS_!3XQnvWm<`Qxepe)Gr>>T%$Dg>xUxe_MneQ7Q7q%raSc zzET+2@?U@Z=|4Axn-(g&9W~QUiG|m_8oU!D05$Yqq|e`eXk`cS<;rd^XUqrNEoGDe zXnF`!2x3l z5!VSA44!(PBYI8ef0=U|M5&aqI~=u-F$a~dMY)mU0K16O&OXQW#dzmt-ZkBP*SsAz z9hjOG6GRdQyE2cds=Az&6<9yXP8xePb--tnoX;J9c`8k7O?W$f*fIiG?wYSJ zXN)JhcIM7je+g<727(AOpK8~A6gzFr(&Z7BHyyW_yUGrWOtt@totFSjJnt3(sbZO) z@`K#(pJZ992REH|0Rrg;$kIjCz@nS<*jsMc2-N4FI+@>}4&^z#Z1gu_0GG+2x^c9+ zVn85LcCgMcs#l4qUr)dlUE0prRiN((r5SY1*OId2e_&J^s@GwYOVjK4vy}QqPn+46 zrwPkadph|V=KT$c(bzVhR`CAaI@Oi2B$dx1}gvhRPL5*I_RA-4mbk` zoE-~he}(tVE?Fj*vdygwH8uXRJoGzR?)R%&Lrr-?cg9v1S?XR!M9?uIgp|A_7QfE3 zJx>7dkI1)W0G3JE*mEf~CcCPTDOMXLN~T2b^#1OT3eA31`_gke5crLs#Cit4>&;qc z*}_x`r~ktDZ#bZBQCG3*4;a3&9F9d~M%ez&fBEh*%ul!e$?$#?*y%v5!=1i?#wtpB z7})$tv)8X3^RL#s<9n<))iTF0Ue%(aG32- zyu)_GD0~L<)y~dUMBc%+VUWwE`Btq_R90&~8?Ax2DxA#ps2%akm8m=Dth2-w4B#=3hgft&M&X6|60rq=gqyq4v%mZ}Y+_*xhtte@DH` z?AeZ5dHCnxEwM@MplG$eN^m-3cYXWxb7Ty=xQnkftAY0fEEj|f(C-kjq33`Ic2^Z{ zP1iTFM^KI}SgLX;&a(p<1Qg*!OuwPRZrc7j5Eb5ljn_%|NV|EH^X1z@66HN<7~HDSdy;1LXa2(2qZeN z9cu%AofiY_@9XYCmaTUj@R>SM=ih2D*{C&urd7_3Y^u0FA zsn-Z)qPtgE4-Lfc0`QWVmmmL0HkRG}6~#z<5sjUzX}!MPSRVFITkrN$wc(^Ef7lS@*d}Ix_+u|t z-#l|2FYwNXayV?e+=lhezC@w!yhR~DUh1m2(&ssWG% z0DKMKIg&Lj?w=MFT$vU6+9Cixpzd%%*Xr@M8RWGiR*NWv>*;rwE0aQBSqun%!#N*L zmrayQXAxJ-zELLIPd|2DnG^cTqOXW`29XcYT4mLG3axure_QhzlzsY%;oAJ(S0)AY zKMQOCVPem8#g483xjrT{+`Kc@o3nWBhV4G|T$|TUiSjHmi17NnZvyU^SJQ8^iW3iH z!@ge*%j#7TVlMGr1ptmTz3BP(#+Qv<4faYB_D!iu156k8Jat)X9HY&ZmS3C1j*TM} zX~8&~z{)*df3v#E(!6ZOH#<^Y(MaR9*%)gBa-ht)O$MG9QB-h@(kP=|rgi7hR{UZ(VVYr$y~=U3x5JHDDtj9EoyjCY{3NDp5N8$32OE);d%>i6vF{99YC zEiQ&sVJsO80({>Btxs!aZ?>qr)mcl*EI?q`AJJnI=kPyQrA z=^INa`mox&p64BAZk<%0J4L_)=TxUKtaB;J=mU^0**t}EH%}_RfGRN8nz{_*RCn0` zN(vB9e=uzxNsd>S#Ju)6?6RkwDUt*0UIEzIZBb*ALEqJMuO6>1PgK{;Msr1IJ*#oBN_ zgnFYA<4_5%VTd4(Srae5>FsBwGSAs~DcHQme_{ZGD!jT6i5N+p2Fz2gN82#RgGq!* zc==)t_$Y%{fLRtk;SZ+H{l)P4d0rxK)s8VG zT(j@bt7hx2;AnkZmY1xZ<*^*f{c$>je}DY^%a8x@)8C%cxgDk*H0u7>=mqE_D+dCv zs0x^PDO18!{*`l%t~%q+?B}4gjWk-reM3dCt0er*W`@A41WoyQyogRL{@Z-~=J|QOz{_a{uY+ zeFp+(o|BFPT&s4UE5L}4;OyEMUX#xAFb{|K9Z1MZf$Fv1K%p&=v;$RY_-$rY`1#7n z!>TN}6(bNIssZe+BiRJZ5K~dXf3m2K75`wzJ7$ z@WCq_ycjE$Ii`*JeqEP|cHZcS&RekY+9_GnQyGJb$~a^A-%_Ufg`YNAwO;tuubLXwFxsBmydlQd8|nt*F|+*$ z9BYXQP*j6TyJ(nijv4p!f3M%5S+^TiCfddfM>bU%h;1cNvbt85mihS|;XyW;jW#)} zT-PCYP(9;SAGv88J)*nJlgW?IsvWl*_F#0)Dk>AT5dA1zUCBl&7jf-6G&NeD()dpgv%8|&`r zx7|@T8fOMWW#xI)BN@KE%|K=fdo7PRUGV!)8x9xAp-C=j9d&R%lZL~KT6S+@vz3|A zzPkp1zI7$fBKW5iQV{XzOxBrVut1$E&ub9w_ZzTB2NP_)0^*rq*?)JSd6P_L13C6O zm|rDd(`w)=>~X3zfdQwuwqQAUWlC!KhTk3UBg6mI0kSG9me~Ny>()i((KK7xHbuZS zzfS(R8&AuDS5UVb4{@*?pagH2iB>ajb(dZw?+E zJ$u*U)KUbFsD;<6CTlsR8JLz4ZhJmxAg1+&4trD1O*EZ`yy@wQ{#{ z)@!a^*bOnWLv=K{mIhRW&EMcurvB^2_?8#<(IoFw^<9FpiGOM0M4l4aV(fw>QM-Tq zaLon6+qLcpg*Z>}E1;#k)&o`ctlZUj_X|m0_m5ZITf9X>F;%#d5RwM4_bMe1vQ9l< zAmBW2)k3qI{7Hw2;f=WLQp~`9ol?&ra>-m!M&~4NFkAVN5fs(8ifN65YFC-EIw5Fj z7aCyPKgz$hV1IzY{(dzp3%FTY4$-&}6`;1TaPNZIhqHFqXj?tklpo6HWuj~KNR*b1q7yPbM?!0c7dX> z^4KEU0e@CyO5kBVvPny}lEXA3aXHw$)TlMCfC-5W$_F-T(SmU2*mKl0KR?Cj$J54q zfOA$6LEv;u9f_UtD5f+_Efj}vom${CKXBj%!`-oL6Ffd^Icm!qw_>WTNz9<;o3LLE zkb0iiKOOq*kL|KA@7GVWShdmA;EKvlTky^d;(wz+hfJFnsT`iR*9E^b>Ac0~3j%8A zw9YatlTU$`o30+AWo0|#D(5t!XTBA+?4yp{FZ0ZBL+H-QC_8;s=Fy!lf87RzP_=dg zqZ>SPll%~`C^L&+&V{T$y8itmtpbQgDMHUwv|ZEEOcdYG6Ub&0_ORZ?*M!^)TAiJLE3{$QEoz_(W*sBcdVFSCBf?^gi z)|Sz|OQuoeLDhLXt3_b2i=!fi+yRl7gTn-`*>#d)r4|8#&GRZsuB&Tp zdpA_Kq1q6e3kCkgX#@_X9HPdUZ*MFe98Po0b%m8VwXLHI|YYw*1ne={Vm= zIUAogQjoi+$HSpMVJ_dV@DN`0a?utp^7f{rldbC(Jpw>30PD6W4`dfqu8b9F+JyYL zy(0CT+2RKfRaf4RhOmqH>#6k>f`1cM>`f`jaceX3sbvK}q%l>v{}upr8i1u0xF@P$ z#QC=8`LVw28LZEWy;j+-h!sqxlFlb~L-khA^IPvn*+q~(81CThY+B@84ZhGx+gN~i z7?f<$Q};M-&(%I}I==t+@#bMk-s8Vdw|#z!zg+pRfBm}d&u97P?#+2 zZj;TClJDe8O~4x9v$V!!kC^FGltl`R`SRDrHGaoqspB|L(0Kmq4cQq#@5AuodIz1i z!+>#(+L@+c!EdWmcr!K4#D5u^BI!qa#sI6th=KE&^=QT>HYGPeiM?QfPNxliTs&^K zr5_GV+L@0XFIleGFnq6X_gs25@D|h-r1oJY-7Icmn^AW+wSj7s|4(6y&j(BOG&7-Ag);eUVQcWN0xmB zTJO!W&ZaX(PuJ+g8!!wXn+d*y?W8(2%lix}cJ9k+eLu%c2Co9vG;HXRa|CK>M4;JI zs(5bwO1s@4Vt=M+@|Ftx*~MxWrJ5;Ty1U;5n9dt5q^&K6?kSJbC~Dyc{%r7H z5%X;&mAbr&>bk=iP*x^Z<#NW{nO>ANyPn5Nq-sNU5g?bP^T*EtU)O=KBS};ThcDw)VB0z5w@q>r;C8>mpq9XLk7R zmRzaQP3I0JOAMjnN$}&K`-39G0_y4uzq|A!{%lM zKBS0N)7??9;D>EtU^=gvg_5{K*Ci)<#TY_yQE{tS$#iR!`lo-N&dIH945nD}plye7 zdc6O8C4Z}me~64wuDF7)tC}n$u&%~rbPy`7qcC~As$R;*3SBYGp2iNAuxj; zEFcD#T1*H$W~ooMW$rZYj(fV2p0jM5h8b>WD4;?%Y&Tfbrj(FNZ1HzS#{JDW_4mWQ zi|~9j?kU?|^kC=uWjCe7kTRTETH29K(?QOE?SBg&qPiYb9le-nv6w2DU$*eyAbUE+ z`Nqvo535zRE@DuOU{wBJ z9-=T$2ZIqn44X7>ylxr*A$BYcJbkDKt+`KWvOS09lZ>XlYd=| zN`?2WfC!rBqSKFG+P|M}?#E}$zZ3&P4OYjtIxLGaV;TlMVUxFWOxXms3o(zUYs z*x%b%G70(`hd?wi4Uz^+l`${i?BkOjU{J}aXwkN?v9V%KkE<@$tOavpo|!w*$lAz^ zpPysOiQk~THQMlUAFidW5v8I;!hfm(OetUvJz-&Cd=ch9BcJiLy%1dJ*281qV28&8EQ= zvoUPV%_r)wx(a5Z;Dtnm@@EuypxccDe1D4Es0YS^w{7@E4}hG&8FrdicN&kodT6~dT54u$Rb^e1 zDDd5GVbd;c7p$2l67Fh2{MI6(dTT{&j0&$9s{^Fd)@L&WpLx21;Fo}>AAzO&_|Jul z7p{oRsrz1nG<;X4(Nnsi#f6tl$P2DzGfU4;(sp5R0?ze$4_UG z{J3!1W-wM*VnYcMRltXYF}B^~hc#thuC=EV(Ho0A6-{ci7L5wQvxT~ja2%rq3$!v_ zqTI5-%%Z`obumHk|0I7k4 zt_iPSIK<#O!7=m2CO>Qf>ogQi0r>V&<`SV_E;Xo<&zLz@0UmkE>$_mP@xBSedz

VE%vJI(6ag0>XC2N4fZQ~pHh-W}kO$#b!Wf7a}7|7tvD#A=>@xR(pIeY=;7x$cVX z$*bDgeaV>sc7GL0tpIllo?YhJcN>pA&l;ut=g3LG44gHZy<>swlw$K%(8~2s`1VEj z8?W>+quVjOwhmm#6|3U_z3(;kIE`5U{K5Lh1Dqf2^!m8<{lU%h*IQ0(UhcyMp+i9E zYu$F;na0e%EbMfQxEynvc9q_h<@U;+HQqTyz=~CKbHjDE+pWSqrRKeC~U8iQR61Q=4OdGGONE z(dzB}m-_ePwsNMARu%9uQ!iW@;;a;ycNGs1;bb;|H_)-by-y6jY@h?RGkTL@>XWPf^jqPwU2FQXr3lY7%Qc=~p8Du+Wm z-q0D(KEU%;FBkoJ^xxlIy?6Cj-cZ*5Ig>Wf2OC`ckM7vUv5r2hWm_p zCf2bds{q+$RtG4c+vJI(B{n_Xn)*?09uNJd9B)}Sc6!7OckEQ1d5}<9U+*g=72v4h zv45?m@UD@{O}c4P%A!TMG^B6i=KIa*3;y(QcYAucZd_WnV56Fyf>kTMCw zOYK#na^#S>6`u79;_cjt^@OhQB} zOax)SY-@)~-NGBFW^$?X&o zJh+NyCy>T&1P(lPdanF*JRY_oj=5_Rp~8Ux){Ft_k#ZR960``u)HbEVpJAJQ(PQOk zV@-xuj2n)!&Ty8d+c^QbdwTeKt!+R^o`^`ccA-6~rD1J$fY3`P$JI^kvt7HlF%S6E z!vP$IC!=!$!mEB>w1I}ayXiu&ihm?w`+0iz(WCU@l-7V5M%j6r;V9YEcCUNV!*97S-}Up?=<<4$OfIkG)%H^YGEDLZ`C(a2n`_r>^i6R&gu zbOe1@u?{tA;h9szXSa)x?-WQc>-|&4zBeD(R}mb-g`7P8pJJmd5_XjQj4!>+_=J!(z zI!DJ=*A|haxFQDgE4|XB{vhAqcTePBHZx_&Y|-MGQ3>A>V}B7xWkQ7RmgW)?@4x1L z)6uIe##Z2A3@TzqHDUmm0oT1zb78PgFwMq+2vLBj#)uNr0zzgru_?AQo}b)blFs_p zvKaVjxCHA!Z41*Of|Q_h1X93Mo1dfqD4X(J&Kku!0i|v5jFeS~c!oTBvWCUh)EJ!^ zJ&%WW_yguv{C`msfLA_WxK$b8%)JlKt)Zg~R}qGlA0-U|57Kyb1qf`WY8A&l65HoZ z4Uu~dIfDVJPGI6_Gd&@cAt^St5B&I76Q z#=XXSE|>=sm|Z_cfd`4jSj^}UrzE?5+r4@}*fxf}j(@1S-Bpb|j|aW1(fVkD_IY|> zv^8;J)i`i&Q`Euka9P|&aiL`ujj2N;@=s^m-XiSt)}wbx63}gRit6JCRYGl2u|PgD zZ+kdfY?nVtONko#RZ}TBJI5SB&6dsNdu}e%!c(Q4xZflQVcx}&mC>6w4Y|DUQ`}1aeh6rr4u}05LX6OLq^8> z%T*Gaa;{L%zsBA5(;z6VsR3zY<@jScSbPpjUn+#1vYsA~M;N=K+s7doNh7MpQN?** zK|^aCmv{X)@)9me1`uAIDgHlbt4sw1TlAw{>$xs!_AHt>_GgN zwJSlcS$+WuS09wzd9cNT(o}Q?ryG@ z0)Dp%7AYo0uhZfjd7$t-tjWa~N~eeA-OrV^H}CdxWf7n#Mu+|C>ST8viUHWhjDN+o zAm4>h{}*#`4;{0qQba&fCrBGc*(=|x>%T5l58~@ztT{xD8eu|>3FR_OIIuWz>GLXngkt z{11*p26u>nj18qsrdX`tE-yH;VI)gQE%cHsh+6S^DZ3GL1weGvPxK;oC_ug`2uSrFEHy5!~EPv{7F>^Z5hRP-cT5Ez=&CA%s%Y!5K5`1R> zF@V$F#PPSiVgS$iay9L`5gMNd_3@f)xPQEw)F{Dri{M%&h!ItugO39nH|bisoD}up zwvU^Gz8l2HHSx_G>NYUbX@AUAn?=N!!@E6cp4W#zA0GdHxH;|#$EcLNGM?#$QgTcHcLr40v_6;5aPM{xPIWO7%d~_2 zLE&EE-7PqWsx$rmti;K0Vl8T%*2Eo+x; zm5U0dfKQ4N$68?;R(~J=8c%oi8+_!^xwh07YG6ko%t9Gt88gN>TWbo0wm0It$NIv@ z!GoigTx|kr$N#2Ma|=7msZtfxmby3U=WmZp#6M^_HKwCZgmUdMHb)u!+>0{d}FIrBDUucw{E6ut%7(7p~oD$ohUqaDQ;F)x#wNLs?~Ig-ih8 znTs7nPa`g)FU*4W0bv~7U8ReREhbE$-wYTND5^z05$)?v!?64E$L;g6LyUdwJ@|}M z1bX=AnFEiJ@5WA_`rZ}g_v@g8zEbP(VApD-+k$-+r{gXwZ2=xX!Z5}{=Wx3WemdJ5p{bZH!e7_h~QLt-ikS0^``B4R&s+>vkv*>|`bDrcYD=>a480 zXMAr|a>yh|V`fI55AX^tRQ!E1VRuvGNWZz}K4{bjrhn!OivlnSYA#rqXIzD5Q`ccIXTa#jbJ;Ki7?-~ZUxQ} zAGbOKMKBr|J&SeWs+GCdhVZ=xUAJ1_9{P^cqLFhdtz*Dt=GNe+vlMLaZ2ABFAZ2JMj=QU0DmWT zSXXw915=x(w_&jgzfTA_HsjdISW&5xJ0g~KuKH+Q1J(^Q=5?CPKN$cAR~i$HdA1=N z9BLPE$Ph;;K~@4QO?O$$;Y$abaxhB4V2}xL2|v@UOt1EN)34qe?QyG}YPBh0nnS|Y zY8hA?oH&M(b8vZAs`%7h2M#Y4QGYPMl?9KL{iJ&c8Kf~$F6@Gwn}gn(no@Kg%mORe z)s*v@jc<{Z9N0}dI&v8_hywYC9x0=yS@G}xX_*{$0{P7Ta5n?Tr# zO%0Ik)y*DE{LSe-c+uk73|6;n*T8IFPPU;Qrzto}>ubBWqkGV3Ew*e4I7#CGw6_!J*2Xe=q^jZXjo!3tG$H;8f^2fo z3>-30j>Xzm84jc|@NHDrxPSWK1%Nb@M%%K_fTyYM2WHm9#>ixl_4C3(bKNBGbBORn z#r8hAi4%el0ufN8T|R`qHLiL-dd(qS5MiTf7T`&?tP?=G;3I2u-C8f5hvqF);oy7Z zjFgDVll`g_TW7&IJ_7qWmbibNG;bg3-6`vtUN^gxWm*cV%?<=TN`LTL2fXF(h3rwn zucH!Dc&e847)#CGTB+4ghHU3ilFs2lZ`gD6(8EmvVl$v4V1sqT>J70SXv2Bi;@(?T zy}PZ?%=S4~TJyTKP3rq)H9!8)r8PDG{L(GNQRR6UXSA^UiEE?uf*)^9!FTFu{=%=g zHYxHa%K(HuP|~^}w0}jme4EDQU*eyxh> zypGnq%-DL947ky8cUkZAkTV^%;@D=y+ft00v7vVJuTBTQe!%P9Ust!G{Aiu& zRFr6Uk@bKT*v%Ug1b)QBm#uFaKHY4`J^^Nv7S>-@oh+xV)qmy5+G>n`t~ zi=^Z%7(GBSV53iIBGS8H!(7W((e5FGUDTuuuNXV%yoeM5^@C0Jv+jBM*t-q%Sf2XZ zH{7?nmAl_xpfbQeyZzBC6b3&3{k*uyY-8BWFfEFAAb%eK<;HgK1hzk2O8Gq9UeP9Z zX&qZR=dO(cf-Q>-z;n>_8Q`pjZA*R1`6bqU?TLBBit{u*)rP4_)@`@=ChUd1WT1yz zK&&f*!SW;Ofcphk7|cn>X)2CMz}*U{Fg)en9pM*P&t;6J3M9frEN_bALp0wKi{fX? zdn@)Gzkj*3A;RxAfsR5wsgP}nfSFTfso>ur87=p*e2rf#uU~%Tp5FRRUUcT({_M4f z?xO`Fu~7s#pfMWZl;sduTpFzoCpM*}0K@gC?o;zjK>*%!!$+I~s#M10VjFDC3+%hp zoVfnjeQw_L%r=*;IW2xBnOd`JHU$kcuf6QybAR{gSE!Xxl#K;==YyE$a}zkgsww5V zE@-^|;C*U-vc6gX$GWoD;utAn3up%8V|o2Dw(;bBg?&lVYvv>F1U}Pg!S5QDKgPrY zy7hJ2AFmIem5W??=GNHg{it06kbeG!+q8xVKQ>J>k~xl?Q)bd-nn7G!>IGb=lfSU4 z2!EZ`xLSsnWI^XL0B+r~d}0UdSf1zYcbqVs91x0=F|e3T1Um@`S2|y-lZkD)il0pK z5%XtCIrXW>B&B+q4vVKLS?CuG> zpsbw_r!#~Z+f*GmOfox_wZ*R!^2hzRmwzjS*+1CrIc_3wk!~{B;q%bW6mbx#xFhI) zC5!ubs49@bV1iz76OPk(gk>?-!MfUYo04-5`^O@y14&I847sx}D>$6Vs@=9hgt8<) zZ(fh`&h_@;%o&?mf|G2q$kt=&OM&a&XeGRh+m$<BR z{a9eSyy5%lmu>hrmZTM{fe-p4xyHbTybXW$B51?sm6V~{KfEBo1m!(>=-V4w0MVq zYCSnV#;2)0EN#AZX1q))_4C2@fqzxR;qcO?slE+oqBab^dOQ9}p89adSf5{5&O%}I zGv=qsu_+Tfx(}Fo#G{$mTgg%rV7;+!pV&+J+wDpF$}Wj4caP23h`?W%Neo8g10TAU zTkJoVdFRi!b-?KXec^RM7CSS=I^nLl+2Wk*(&;z7|HF3e=)%JahaAW#s(%}?CeC|v zY(B8E+b?g>^Q%dOSbr&Ky?tpH99{Ajeb+QHL!IkmVkt7+RkDq=f`LiaVeQd$}{QSWK_F7ij!$G@3l zaeT~R!BePS(;|Gecx$Z-vxdPY*tRT>?|i+xJ2mLe6q-UwW24Cy~V zM*=(dKTlbvf+q_bsT*C23(;6{us&@ADhSI~X15QR=?f(&KQ&Cv`(Q?(qx3D?h-GeZ zmX?PF17G@%d*H{HKk=InTP`MsqPBn~mbpEYBP3x@vpmA(xE%7kDuUEWYe^~2T zOm{rMYTIl|#adw#{krWeqlT5or{hS>x!62!eryt#GESUp?3dj@VOe$jyV*Z!UK&xrY?Fsxn26Kxe)?NS}d~YGdF3~Wron0i? z`|dxmeb_8`B(_ybwF|&^GaeqcW0{R=ZoaSa=$4OkRVva4#xZ7R-aNDUr+Wh{*!OG* zJY!wM@LO%?3a@PcHj?tjH@Rr?S{C)?_9QgU%==}{wIXm9 zzK!M#jvadHOg!IR>xXOlmVW?i15T?siul4AI-*1gF{LQp#@(11DUQ?0@~qMc_z)qOOIxCC@VP&U8Q}m$P4s z-#0d{8;L3GgV!&gLl&D16wkz65-Dys)e5=c|itG_5nGVqSqj zY=3EUXieG@h^<=!pvS(Y6X?y~_35(Lg3rx2xD8&_6f?(6vF6&#>^W&^&a`D{1o~yx z+VQyPB5)@lzDVmBGOyzp7b7FQ&jUsKU$d zZ2m{vwXWB3!^T$v@8r{*k0eN2jc(P&X@B~o&)%6mvgFj}vCgjhCr*?^SniU*37t?#eVk}WSPG{{C&c9d))=L1_kYo`X{oFb!m7WP`P8DSrgES0s0#_dB@oU<>w->3N+Yy}iB25>W! z!p&i+C`v zs);E~Ahc!W+$%iI-#7Q$_H+C1@<@C*<~dWk%jT}L#3B~K+dB41z_)sfXE>5I9^&ZV+886k^@1CCn}0Y@_wT;ooiEH?(%DO6bYan;OIFgbm!zLw7NtX<46SCUORQNBwZ|=(Q_&@`;njw< z2tO66nOwR~Y~&~FrKdClVr$4wdp8o`=7;Gck%g~IFY4{>CWhT!Z*KQ9Po3Ha%bqKX zy-V;SZsx$LFyP^Kx#OP(?0^4r!e1Va-1l{FMW|7cJwAd_6NFk#DK$LGdYtlBSiRY< zzb=9JY>tK4wUr?e4AhvObLNckZV_#DJ& zCy=EsQ^6xHynSHz`{&bq{B{7rYXB*7VY2$Am8^LdrvT9m1VCHM#(y(5Pd?)J9m?lf zrj0}H$x*L;uuD}!b3sD_#9PadeHr(xHe^Qe8PN8M`RYGGEFWMNZr*J(ab^U}Vm`t} zyn46pyL)_kc&uOk$RiM8y5eg~xg`szsfoy%Ludm_Dwghk+z#4*tTzXO4Z;dmnq-I% zZo=2ce_+u(T~IA|I3x2_!i z-Jv6huRnXMH3I7>LI6i0Rw-cucDOc|yWs4Do(BJ6zXuB4!|<3T)vYey0%w+Ja2^}Q z>zDDKN016Rr_B}ZfA>M-RKR?2smd8h0MIrz38LOL9NGZ|jDL@^?O z7^WfG7O>i~C19g0q5e5DcI2}o##Z1BW)a|Vaw5E&n?NCZj>{#q(XUV_|HP@bucP;=TFaaq4g%5uqLxozWf3PZtVXYYU)Qa8=i5}CP4Yee}k>qp20j#kaX zG%1`j)`Q#TEE~Z|kFxY@&wpg`)e=?FwTWjY&_@7Gmm6=ebgU)aHf^HA)^lo!vj%Jg znymoX99BuS-~ha(<)RSgA9(eaweoNyQEGMMaz4VF`+tx_Qg!P_^M5UVzxfCjUz41uk{&1plV?Mvqjdx&r3ni}ZpxTJY`-5O(5gul9oI%Go+h z+i&}0`F}{wFjp9XCPvlRoJCwg5G}6e>6Yme1hZD3_Xp9@{Kj4?brobLz!r+4!oj+V z__CJ6)(Qf3WW}*>x=`3+C4(*|4c-7zAk5g|=30H_{F#q1$F9cuAtP@pk_{VfZ0Z9B zi?5n5DUYAw>VC*>Ne)x2Bg3J1HCji+KjHItY=8F41Is_%vHa_JRskAn!G3bR+ivK} zghH7$g2A|p@eJ>qB^XEE`LMl)381J-N#pD|9@jXarj$ZhXDa@Fx_KF=mj|{?Fk1rV z(vPrq3K@070!o0HWI)+0i=lwn6MSA;##L;L6SF3#=f~p@(Jkl+XZ3))Ti{qBd9mIN z5r59lUAlO1W|F1TSvj1tCSQ)EYz+|2VAf(z7dGu_>1zMy zj~EwV=|Y(k&ynM)7wGJl@#_VX1Riz~Uo(PH0Yzfs7%x8_Igs_W4- zJp29ii9bG2cxK_{;ov!`jdy|C#RJVoj&BXJ{L)Oy&!>8Y^7K#67Wl0cY-SF|aT$nC zikRkY0ejG~bUD|zX#M)7mtreBJ}gH>SBJMCQbw}?moBX@AFpdq`}NA50!Ga4eSf6{ zH3B@a95GBr=qc-gUEl9LPt1)TxCqm2RC0{e4w!5+X$@qe<2!IL)Ka;Z$!I-o*D(9f z*O1^5Xli9omqT1li5cn{*$X+AsDfMlnB^v+h1jX4(-6yT_dxNM1e`+EBi z-Z`Vof!)?-NW5s{)Ya*PGYcfMHh*jQB$wtPzkPB<_jcf$Z$!O%IB^TO?&@Ui;TS#7 zMt$97NZa!8n@Gulew5N=Oc#qc^roR@iq0XpOuMOPEfb-ycl#rlA2sGpsVPqZifTFc zu83xEYzX8_NB)gg$rJZ)w92lC;cd%_qee1_vT6=mN-LM{84nvyF;n;^gMXCy*1!|t zSSeK|2^2LfclhJe%`XKpJ_(jGkWoUIF2Pmf1;oK4e%q}-CFG?a{WhMC+@@m>0h-pS zqA*mkpNc{JV74=beT3cm~xH9+^$ohjLb^$t5{ zpja1npcF0yJLi_z=e`on8h?7KW8i4_@tfq=A=5qBD6zp(!8r;R5rZXYTNV$%eV74S*j&TQj~?*B#oogjGK{;2Z{wixZZbGANB2_nJlU9%`0T+< zBp|GZ%r5j8qw!(jRe&BvfTn3PT)@iwe0btz^6BAo zGKhn{(F#~uJ5w<`QPM}LtgRnB3};9?CS&BeM-xNiDpcMtnxc;q}OCkSPJ7Kft-ZyOQ2 zi||HImnZH>3MdW06R?6n$?OQiYuSa@wc*^wxt>mQ$fh$R^j^WOYaQw+$;%;@EdWZ? zbv5ES?W7#ZcBCEf=Wf)ZU$J$=6^J%987;yIxuB8rVToD=J$ zB+h4^0b749Si7zN+)jJ&2{`ni@v<6Lr$)u=P#MBI^I770>fo32jGV)70LCZ7TN0}t z5lyHDPzCt757q)--T}4$b@TzIFEzw~)7?!1Qf@sk@7dF2Z{DThNKZHQ_DEwd=%+E9 zof1WOEu5`vO@9Tx_()>-|Cixz%|@S1O8EBTEDKaBCqb!{T;_U&>hTOWRgVBzv=*OR zbZ`Ju*fbxrA0P=!%Q`N-?@vp^oC|p`NW+}}gU?CBeE(&1ByM^T-Hex-g$@K8Syg8D zJr14AmiVhl&kr_7G`(qx@RZoLpqgRw(mQ~cP?ht-K!5qGvHy=NO`to74`%k%lE*$8 zffJy>rekVmY4u!Oh7)@&v;D!gb#?%42NPYNW^`AWQEB**b|3Rn@Zd|o5(51AmR+^t zA|PN1+HB)=^pFSZEXt-e8V$HemE?iVD>&~Z zC;1Bd{eN_I-_sA)a{|L6AZfwanI>p`x7O-R3A}e*-SK4`=W*1!i5UTU0D~A~n$0k} zb!RIFtM&C@v$wTxyZx$Z2>%Y`~iwF=Lz4b z)+p0@*74yWI1#FXuj9lsU%>g`9Xs?Kn%m)S5PvXcOC7EouOiI^f7hJTOUkc!1ApQP zDw{|Xsef!#;wrQE*nFJKF4w2tRgFcVz*s5gj~ySj^1vwZfJ2fPxv>VXP5v5DTD@4+)@ETx$wQ8hMxO1 zj(>YS7Vt(6=PbcxFrv!-!{MbOw7R^`m~-F%5w{z#Y`7e?mZ_~8Y+=O_l?)rcgDe@* z#bnbbu?qg@3pj=U_A?;m{9EWn)9g}YBx<<<^Y<8h&ttG0p7{TLDNi@!UOzGzI=+ni z>uwd_ZBBzAok8vpsJD)P88r_$EwIaK+JCawpOUR@m&M4U-v)r7GvnY?2F$93d11uM z3u>lMg%BzzPwNIJc=X#|(>{(a`;$(*%6C=s}evRba57(-Mn;ELAMeaVpbV zLE+OPonbJFceFU;a90ogVO0@2VjiE19wZ`XE<$ty}ZFYI9TjkY>CPnn)1%Fat z8p1DE_;u8M294?JnM1D`K%>}DhHs*<*2*;9t_;4^o2%}n-VF|K#cUdm#qm0@Xfz~3 z_>@&c`BQY^-JT6Dj$ySXsSYUGz?~XyofP2G-CD70<6Qep+5mb7a@lb9qn~b2`<4|A z&ZZzso^WlS-MhiU@+HHrk5J&SbAOLjLBcS9kk(vxPDxu7){6HJv9_z+@=U z(n2&B&0epr_HkMq2dP$UA%Ewyw9vi9`n7=4a7gwgV4$BAu>aWuror0TnWA8AuCaeb~?9fyAFzS5wWs3GV9IN5s z;3q(`=gGqzmtL99<$J<>TF*Skv1y2kF(TC>%*B!k-xIDZw5c3gme9Gq4> z=Lb%y(*x6DLs{w8^ODX0=&o-h|MPX6<$||9yDM|nANHL#3koVAMu_KeOdI+D>I@w( zM3!&+eqbvfww}3q!@;>D^ya9PD1FS)q$^0$va{;@>UG>byo~7g8Lu-MACqXCUS@Bd z?LVUk&^O@Iy0P})Cw~Y3?4aI;c|Q-r-zNZ!(=0VL_P1TO`vico({9uvuEA$Hm6ny7 zI3{Zi0OGB-B@Mr;e~r^o<6EBvrMJyCXHQswP|hu7lP`R^&*(FESyaw8b=vJTE;>*) zld!Y88CKX$zTVmNnET=`aA6YX%H}y)yE3sdpkq@cyY;}V-G57*xfEc0oZdb_6HPa) zjoRiQz>}^ zjbwD48NRyg?0;kbgi^ObkU*lWP8g%Pw3T9ka+LKExwfG2BijH*(bzl+`c^>aTyUJ( z%dsW4&2sqw;ReK=r!Gyt0bsw~!JdIV9=Q3MTq&VTlG+V!p2X+AyN9k9-Ou1SRe zWpAP2VQh*8?yxk#*1DcrxVP5lW0N76N=XFh+2aAEX7CcGwBST8w3zLzaQeX;14NEg z!8?GS8m!_iyCha98z9T~{oO8j^ghFYtg~1Xe2tvs$}DB?McG@)vVi4+-)o}zuJ@(7 zlr_+mSAS`RZliG&wE-O(WfMvGt>yjuYg#uDW^IAH%t0xdn4EYY*fgEX61|;^?>9KJ zZ^;O=)^c3E?`n9d;c7zsOBq1JjHTW8CF3*Sj_2pof9!Rl##o>Uu)kPajwO5UGdvQ0 z;sGm{m7{NCso8LHtq$u)RJ2+_OvL79DEyi{%YV8C4q8HBOzZZ|vuz!7zwK$6#Xy`u zyaHqf_Q0D^b`DoixAnF4`HLS~Hoq-v0!(0GavOotZ}9B~ZzI_Fo6UA;)qbXsLWxNS zzVb*}O^Fm0x8$nr;&tuwPFxx2#OORUfRo^)rI1B6WStSXdb!-KQ1LuQW^Ymuk;-rm zL4U#SG6e7u;VRhF!5Ca0%aHj8Om|K()2KBASmG!($8A0AK=}0PFHM?yzoy)`X5*;V z?xYx>)adMWROea_lM?2a2mHR7zS+&eoxn(I!69;3TY8loQwK9cuq;m3WwC$6ddf}{ zomlOvoZ?mifvfeYaF&i<>QR3Bdi2F74}ZixH6+0N1Pav^neUnb{ze{6!k%(+tdSZu2o+G#eUyL0?4 zalU<>5vz*=5Ng<(7bY+Min&;7^e&&X?;2$U!9t5y7itqnSEN6{`*GNlbk#S|00d&hnI4iN+0(m!FZX13 zv&bf@Dyujbnap-=wx??|kVqiH9f-qFOsokrYU8p! zgFtGB%$}UMq*%?Mmo*y2V#62i%^h>uU+@07yZ?5#jo`Ao2SnwqF;%uy3`(=J$ysv} zT%$tY5!-j)_KDse+;@zve!xyKW(-(KiMsgRQIdY$jS)6GR`l3a^?5+3C;&&b!|H#n zizxv7!aGjSYcnawzVFlRpATQ=4ZE9M@tHHCqXcGYmRS`(JLAP&lnfZ&Wlb|)2k`rV z6T2#hhU=s~{CID30x&zf7{r5Kp6L`zW zF-8kim0-9}HZ%oaE($8~NjK?lOwNB1XNaX5r|L&%&nsZ}I6W&In^|Y>v^`bvZ%me) zNlX&n7P|$U)Mf8F@ElP^tIJFDz3LxtjDm-CFa#sMu>*(;DR^ZQ767YM*Cj8%tew4v zHHol)8rXj|-fQW@_3S;lv4nLx;njwL)^$|B)u<+zW%?%5iJY-uX={Oxt(1RnS4Gp? zP2<~yqt8I+0Bi67IgXIKsX4+$t;HpFo|L{_QC2fNyn1T(loYB<*hakg^;M#-MTejE zNL9Tt83X-0`k#Q;Se z6=l21ut_~w-wIrl1>1I+nv;LCrq;;<$6A}}TEpOaELZ9i>uNBpl?=3)K?9ueVJ%p+ zVYbT`l?&DI<{6+oS1~yOtBT-F9k5ebx3b>Me*M_)+0kqhMm`qKwjZ1q&%Qs4d(&pk zaD*L^vX_m#*IkY{Nxgg&~mUa-=cW)ddcKCS&7}*M2S-)Gca=jl^ zoLVPtZbG!IX1&xj#fLZ5Mipy;9wU)gmw53X50amk`lh@xlg0 zF-0B%>oRBbnh)DM4|{*(WXEX3O8p=SE|^`mD3E!imEQ9{&F8mfr6&ZM(IcpOS4=cB zW<>*gu3JgV{qv%By|cC0yCsz}JDTBphQ=eP8f_oKTS+%!UN=$xZu%1Jbg++d5A=Uk zY>3%sq0bOITA2yacDawf8^31CD;8Gil=E#Fpu6;9>`-=7;9Y;px?AP$ZfbAMDm%Wi zIUaV9ftlpPaDFDyYQqT21x8iztKK(KMLuDx_MVu7Sn=XE0IT|u)#&nl|GIs;#UFQf zNqo1jaw=1&G1GQzU6wt$1Udj-Qf*DkRkmf;Uh~>OZZ6M=wG0AeLNlc~02<&|-vM@( z^?o~(>)*ZYXgPliHDyDrKo?43LeGA~reK4w_tgEDi}!J>$qpV}*Anp$siQkvG84R9 z&g=g3Y?RlYpZ6#fy`Nz?&CGUYYz7H`RT2e;Lk2GIWv#6GE85s?+9;`>9kKby#nnrY zS;tUgUFxzt3HmbsNrcoMFP?2>SjwQ5B{I7pDRVS!GO2%NX|g_OBxb$FTZ3H2VgXqN zp<>hVtN(+aOG4m#eSN&C(O=TGzL z2r}p2o&$f&U!Jn%Drr=Q@2*NONZaSeBE;heqa*5z*gg(r6itq z!WsuUJE=G202kLqFppTEm)Y!jN^>b;6Xe+%7L3mB5Nxbv6O}c4{ML41;hzSliOD&m znh{yx<`m!|wCQ=jG0eI%#m*eD1B*hFap@Q{urEfBAPm_c;FU*akm*0v#iKqK_j= z%^rWWll`vYD+~TbkYUz6HUGOkopmAb&RokTN@o`=cBjdK-k;YWtx29^oi%v)R(tFX z!0{B+0?_n8^=ekGPrfP$i>~`$oV%^xnPbBjVN#;&g+ftm3_u;}?F={1bxXrN3NG(# zI^l7qEg&4lR6{|wQKVQ87DS!)eiKFfsBB+*`hLnXcz@r!S2q>zN`J~S(n@&8=cwCN$Nb())CIz4hCu2v)Y$w zmf^17o)>r)R!g5Ds`KpAgtzX7N$&#qKciN+yve!!C~@LU7jm;9xtkl{*XO4r?&N>v zXD`1x$FaPB?v_puXdhziowu7NmJF_{r3*_VQ&`@pd}S)@?VdgHf$@?-&^i-3wbib^ zR~NIWBeMYFU4GGXaqbb*qwv--IiB)oGiw)W=L-ViNIklBN%rmhB0HAThsF_dT@$>k zAAQpf0N5t7;k7rF4A!ppqc48(6bOF>m1jxVQWepdd3d8lYg};H#7El8vI*J!<3Ij! z?EtX$0v2BBJ=tnqG~jh$J+)B5A|J`Qd>O#Me>8xzp!oLdB@}=8+tX0|$5XcG5@YcZ z0Ha|hb+mwQnsNcQ3b`I@C4WA$IWXt5dKSR2K_&^4hLWat2&f)-eBIvs>0W<#WEmY8 z96)ZhFdbI_j=_@x!k5L%8t1{ympgS{YEUp{jYbo zc+5p6YqKSV0VvcWQ$gWunJ9laM#F@AyS$iU%LJI+lMHxZl{MfqH&ZR^nuHw(3&rIq zf;Q7!BLDuco98{+2?r)kXT_9Guc0$(Dzu@>%-7V+=*N4@ofp=AF)7Sj#_E}dm2VCd zCnPFUlnn1CYtcF;@qn{z&%4NQOCnNRESOIlMF>pb+wJg?eaDWqbCZ9s5B#5(EnhgF z=tE~lv31V-Zbq3jE|iO0dT*MYFHzxs#})eF$5q%izU25s}$}$BxJr z9`HP1wjGe)+#JC3$2B^8`SF|Io`KOmHo?2H=xZAxX*bge;)<&|1$=O-a}KuzY7gh- zDV#DNIwqMyel{jddG~+SC4e>uGTrTv<-yOH@-C;$tH$_}zhJlOUaP&Z$y#HwUdwC5 zbmS{sHJ~yP2&X2g!B3VdxQ2f^Z(W50@avMvziU7_f`!#=a&(~6>NRF?6rjoN$lk9H z>Hn?)jS7&!L2PMoSUwppS&A`ruzAW7UjA(ZvJMew^cFRy5o&+J3ew6}+rczx>q5-4 zkM&M2;u3m}vBu^w1tH8)fG|q4;F7>{YZ2Lfrw{8dk_YIHWcHF_cYx%FABg`kXc*os zmq?Sp+THk+A@r1(i=Q=k&~^a*0Q6&`8g*J^oo@B@?tv=4a+dzqsX?UdN{K@QmZIm$ zjABUAtDP0d%P)T;^^ZY(`;?g&0~7%;nkDSuy#aeSrJg{-Tg5s(HHc4ft5}D@4wt5( zyfzrW;h9{aU`DQft*iWF5dZTTgD{50?twQlaHL`s)YzFK(G+Y}S!Nr4AH;bnv!@0z zRS?%ED~Y`yl1E0ANt%W_@nKyT{&NuLsa2f(AeaWM1g3uh22;EP^8qP_1D}m46sLx9 zW>VtGSkjsL$n>tEl?;fbh;UmCAs7>KYFT{JD3~?3r3eAZhrn{R#7n2bBKA?^sdcgI zlxDp+TV`(Ym;qdca_>43)39W7FV(GUdVUUq&Hr{Cd#=aQsv6*X_^56t{u|6}Swh{U zKmA(j^80^S?)&dIw|5U;+UK}(aH(N5Y8$arif=Yw5lGnr0{F))ujapx26OV6qlsex z{c9d!rk3c=M*;5}p(pm!I`y3}H=p7~*y0v(#5(L4_J%Z?ylAl)3ZmN*^SsW~S@~Y4#sPoQYc&8XQy-0`rWrejqJO=0$zh3+ zf6T_ep64fxqz~WfEZ*4KrcGT#u%YOt6IaW+S?kM4{(l7jS4JR~+$>t4ZRRozO2F_k zybm2_gmvP{=Zzpbm8oz~8pL#;0r(P_?9^;Q zX4ik}C68wcr=Fx?DaW2>v2z%(!R&lc{He#7;HY&?!|ty>xOtZv|KWkn$?W(KAGxjW z3Ywh)Je(h3y3;4iByQ8EWstnK9BO5^col^u4RP9xkeq5vB~Xy34>3z!+NZNm99NcI z2l5DIG%Va)rk}}z&uN-WujTk7y*J!$1)FV6|{?P3xBa*;jtvxir4MI2+u97bKrl6 z6^L`JdC?E+|8~h;;m^T5&fiWu5B}(U=W+N*Zlz3d%7J;U6hlk+6WE@L0ANQOm$}V|pKY8Pt(t1I{_3n^{BBu~jTA_YsiUN4w~}yVvI??YZ6D3`7)sn)Nm8_aFZF z-5D3Mzdm})b#rWQ%dB_<7g<5*;IMxx;%~2%K3%=#pL_0RKeTK@iQStbji;f?1Gtu_ zXB~*DSvQYfzWT)@0rawljg*t)X|)S=PM$OAcD=ejKX2!qGaWOnGLjk!ix1E;aAvHv z&Spf(jhg*3-ox}(3%5rG^y3l431rdKu{lK$E5ghJN*e=t6kT^Br9{Tn6K{X*aM4+7 zqH|3_!ki*()=*e^UzbaOZ+}Iu@z25BKEF7?le_Ha4|i;{gNJVi0z<)hds1G}0ORGJ zbu?q#6w0Q3>OOmGI#>xl&7LuYZsA3#B;UQqVr!v|WqQJymt#k5dn{*f;IeZ~W&}yV z^bK^PnP^1v^0jw0K3Ld}eoKGckEW}EhvQ*Pwl?9#Dd}LBn3K=C+BkWA0tP|UV9I_3 zlWQ(gjnUg!!@4+gR|fIIxXLEh#byPVWN)xvu+3WI6=_ykUWfiMcVuWUY~3d8HYcEvn67eX$5z?}zBYY}U!5mSNE?2&WpyVrlT&&!Qdp3OQj zOhAfEDK8x#r8Bify&p>|xjpOS^}o-%o$zTpT-i&WinP=*mq40WQ&`uU$TJcPMZ*!r z@b~ui%;-xY2M~OLp=j{Yn#omx?mF&fs4bb89xrlwqc$*kvK!fRR! z{#|adm^Kjz0d*VC)boER6g=?V+w3v(`vc)QR)bYC1a^nA8n9bLy8&N{?7P#~cfMDF zkC$TV?j`c3ab{yHYbrz&g(c$FCF+>rO|@zKxu;y_jcwO`h5rp$yR}T<4fa0s;H{II zz-^hyPup+{kL?=cIT?5Y-`KM@m8=DkDE8vFc1}@`Tr%@J|M7otcd_ND!bT^|uph+^ zyg6A^FbGk+v{@eR{hadqhsXJ_r%dv#_ej-A9|Ivc3Dvr>fo+Y>8?1!3K3iO%%=5VE z?RdOr|E-%Fz5VihEFJ0RFTelr43_%A!?~q+2GT9Qa|o7-b7r{STaQ>-+3H#jr#+u1 zRCUxkA-fxHZkK zm)HZ~^@^G7v--e3uZ3+)s`YW!7}l*~_UL=PS}Sp66I%}@hlu53v;pJIp>^chWO>B9 zBX{<2Dp_Ub*zS9nT4HQ!99()Cl}SR&f|ng3`qfwmQ|vS-hP_HKp}}eF%u@oTkac_F zON>!zg!z9hGr);qPOax<5Gb2AgN3=4+1u5E=GC5;1Y%(Os5K%GIIqs+9&CxAsU|Ej z0A;i;u?K+FbId$+C_Yop8qAC}gxGo0uA9ExKHX5p`u=WD7q?flvkV(uM=0=xU7{3B zWJ?r57_MO+(|U!w?fYb2U(Ld?R2Z%m;T^aFASZuR@7aFDVa={@6Jb`{<34@JgO^P` z^f|2<#bzj_BKnn~A~Hj_>&8BO*)Ox*-QN9n^RP#w=fDdf^!eBU?;3@}YK|p~2c8bB z|5%qL!!*3=)ANq*$_GYEnVn~K3XDFO$3H^0#`gHbjRlE-wl zzfu1DY&`eguwb8t8e8xI-4ChUDdO|z!*qE zXBUf^89`=dfE9FDg{ z8sY`X)w%CozT@5u6C%x_3JfC=+FyhOJ!%xp%MY z=&`rw=lgjIxA{C-u;Bnn!|XuVscHeS(bhDD^-NSw$GHV-GMcMAiEpy670;J?q}B_7`skL& zDx3nox3O-qI}tW~1A>cSC3b)G?}@pW7y@9lB@w^KRQ+%goDX zJ#RIzD#x1=i=RM|v+w|h()R3m8fItA$?J`HQW292ViX6+V_ym7WHWydKp8V*0d|M{ z-UcX(v66$>v`r7=&4NWfz)xbG_CkpHcPo7>q6B=~q=GD4$C3N8n&JHzxdGS9x~Gay zeG{Z?NwRC?+8InKQ()EbOq7#b8)(bkL*Hb$C{-^gNR~MAAOOOGG_+u-$x-9Fi;Yiw z8<=gqRL;cB-2>Bd7(jmpu);Txg!Nx5>d^F!VAh4%IKXDz=tVRi0&b%kH7^&{qdBH+f7Zk0BH_;^M#YhHgPlosDzU_Bu1UZt;c8ak#Div zYetkt=#rQ?`U>r0jG9p8ZCtqg#k=#*l`L0!+OYXd2crjEW=ex==w zv)mo4=D0`~rAiujHUun|J=WscuTmt{;p6%s?T?!+BR7h0u1E(TbqQ%%I1@T4F#XtR zT>AN@=a?&La>#$e$ovvjY78+H#p_NI4S>jcApCigf{pAc7@;`>SqYeEO>q`L5vyjM z6hG>9Pr0r~t`Fb{k%xnx^$R}xia=Ri?d$WEW1|``u3<(9oA3v9f>Kg!<6e?=zGSO8 z{#}X@KMdw#lLwOHU{qgut)Eh1a}%EKKMcS1*XJW*0~Zb&yPLL~lGH>UlspxV`>eABiq0%A@6U+KUZ9FeoX%P3 zTR}1ajUs>N@jMpUC-t>r+&MMfi+m$^t)P6oi3TgO+F=za$~5+%ug`Dpj;onnLha-BKo;V6iT)Z^oohGGV72NXt^UUn(i>H6>U>$P^M}Zl@H_Dp|a*gX#LI``; zV(&QhEKC&xtP-$$Z69pg=HTq!BU_VY=Jl}4)1qw`hZ%K_qAeT1hv7L@khf&rC#PG# z&W`Cn=fl@?(5d&1c%^j=6EryNsmA6)t)4Sj)*^MA@ZxD2B2`&O1+3N`&??w=Hj{L0 zfFXa_r3-PMWy8muHtZv!zfH|iB{+ESKA`g?__0aq*E8TbQ0wJh=G|1C<4A4SHOf|uk>hX&A zoCka9X`HHP0T4BCS!1@jNfH5qQ*{wI3hB_xp8Rn?3l<~rFCuU0zDTI*vNLQP@THl` z!lWIW?0r3`7jfaUB?liZv6OGr71uZu01Xf1IBWSYefE6e7r2!=?pq)YMI;Qpj|zY0 z5rA=W_=^~I-fS^bx-hp#WLUvIQqGMWnM&KeEN?AtG)tD=M%O4a7?~`>>>*98Ij2gm z=ZS7+-xvB6CqN=F;I1u>5?IDJbb@eoS6H36zDU2(Ea>wLgKZwtEbMe_C`E88AX=K% zLZzG8FK>@0&5FW#;{dm-NIKGL=RJR1?JjF4g8Y9n>sy+`m{d$I*voMm6Ot_zfl<4+ zdr|7-F;rkp59mM;KUg){fpDDgP(OmIw7r|vhkJlzm_0{DtYMv90Xzp>b>MrpmV}hU ztWegO=kZDIb-vu4yJrNMG#tXvvSx|A>h#8zB-u3M)~5xV(R*0^+U}o^Nk4yH>|~?V zc|(Q+p{9}rZ%n$=$sPrPP5u->aL5KEQ8!C9KX1Cv(j3sPLWRGZ6OR`!36x97j-3uM6P zAdRCpjDS0Ij#C?kQ_Ku!buPcapVWvyGU{aY4HB|&$YDB=s}taAW67BWV4Kt%@Ri4Wp;Bn_{cO#aDUtcD$22%F+6 z(uM7r2Uo3#fqRd2U-flE!avzdKv>o%gRL5nj$J{b%4y0b`qASOz5l$F$87q}**^m4 zV`ZAiva(POkaVmej`cPAEjDKcx=N$N7ZDUg$N8 zVk$MVaKIYRd00zAc2M-@he2?A$vKvgoNl5%g$iE4k;TFOx~H{?oZUYbDBU9MnC$XE z&;z=g(E`ncAzI%^M{LuRE~MRhI0 z#wH;v>~Hca_11rG-Os+k5qfSm(|H{Mm!OU+GARHf{C|CJan@cyatI1;35;eZHQ)`{ zmM7cPO99hQd-Uzdbl!{j)*GCCMDb0FT0leX-Bt>Lj6TT7NW8QIOS9aXb@`x1}*D>X9It^>|B%?HP7n%7*4us@+Kz% z=rc8$P}MIZ_|?~7|FTD}9`L|dk*HcmSv?TlEt_FnY!ON=&^VM}x&rioCN z0$iWf*C6V7eGq)Ni;zf{= zO~_HxNTmeJ&OlfkZl~eq+wz`G$J6C05x{%a>0N)DQ)=xzH)F4YS*K%~1)_euPW0t- zRFC-VAr^})l|q(CE5X`q${6^?`uOb2czBcR)JamvPsfcxEcI+@jCTBWG_gZY`{)HtATT8_G(UyM9w(|A<{Py_r#=l?hk8i)fVuO5q5&?gP_USm2o$aCEqd?$eQWgfR2LG2=PqHZw zA6UFgn`X)!4n(n)QGMePPR9PkZW+AfSvJ8xJ^yici``bM2`M<^Y(h+nlto0wHwfk_ z^}2j(&-3-|`AF=%G#VmXxk4EdO^Ol;X(o_kiaiEdH{ksGK9AZ3Vl-eH@Qr2=JZFEh z7O=;Xuu3g!QP$t?&}$5Ov0EDK*|48%C|8+Xk$@kptXLU*`zq~qE??|*&haGsLp{I! z{tD;#_@s9j6^gU0!Us7VKI@2JRAC^l`3tS08^hs|?RM4rc-6&eOleamJPVD={C(FynRX&!HkvXQjkPa-nmk})iUc>^Cn}WZFD!a zavqHlmn#yetj{%XwyZK;?8%49vSG_3TqF?%*$5f&XnD$UqW=4r-NnPH88VxKEVW&W z82r#_cYN#16tY|Pc(t2u_t1YkZo2*cIye3HQ3Uw#6YQVqt9pT}&RBydP>ne|txJb_ zIC3BUv&msS;y}UfNi|8+5@mu6^{+GZ!U4zQB6nu3NJ$rI*-qj~%E;%vLMW92JXztV`M%rFCqu)pvh;@Ea2VO-jce zm@cKv5{-~c@?aF}k*9zu06iz{l{h5%t{ry#WbXkewKyr7ldsG9uE)dl`<_F9DvpB^ zMk{Gbt{p+!n!N8=I4aps~bAUk=oId^a{hQzmdq z>JDxtEv1+WcvrBTp3r}n%;7*K&3993Or2KQGFM$!%@JF~gT*5Dsb5c2Kd~1<4cN2< zKC-nji?=aHqp9%vD(Nyp9FRx;a5KcYHZmScYO7eq(kCKd7)UKH#pO1<>b(4CQ*{Ok z&&LLMqP!ggmJI^t*D59H*1GH`-c{VL{W_R;Z0sGv>&h1K7KVS|2FpW-1NGA%emvp4 z9q^9x;aYB`f;tcG$zrE-OTF#`wY49fWvrIeH;Ef%&jWY|l2@Bs8~R+DI$8+--JS^h zI11dC1$jPDw9Ry~R*;}xmTYGn>WKOgH+t}ZkVr8}vx4++ActpRMagx?+6n&}PQh_B zftqr*iLI<%Qfhx|1?_zqqV($-V}`N>MNQIVD9Q+zX2m?-CMWzYJ&b_ixV0R&5vi^B zJW|Y5aA`SHj0Zm5*RzNmuHV`T<$Wko(3x`93$G@I#B(mb?(GU0@%ZS z5wC0k=my0?=up9KDR{VbxAd{0dmq*)KNBP)Guz}`vA};Kd2pUb8cEmVNVjJA$FE;s zpYP=9%ZXf_szXf99-z9%01iG3qkiy}<1N;DFf{xoC!ki(wmMbAK@utTDO0?OwXrhA z)ph;OX7Gzlx*)bl9U{30c12IS9x=|zS+}gOVI{foxmQ!&7=tyy zR%_>pH0OWa?sYSrSzZY)jS>OvB?~rfD3gOChff@1T9(@uK(@na{(YwpPwn;o%Zcos z8el`NVRB*z;==INfT0%ZNNJ6GT_VYiwif?b& zOrTN8*uS^s{&OVEmQsIQd8ex7#JX3m*|sSFMj5eB?eKxyEPimxz%Lc>^xzLN(G?+v6f zONoBO5j8g(q7Q9GbrOq<>llR3xc}n>aS$ofu_r2)1`iEYngap|Aefrnx?KBzPcCVi z)q{UpQo)3JF+2od&90FIoL&5KfBw&WKG1Rf;SE@|KBkXgLOJ5&0f(`kzG@cw=dHD9 zzXWnXY)Pf@UNOcr^Q?Gna6YXhV$1U=Y?kZJs6Ux=jPZKRHlyV=jhltQufW= z^|#l%f6n>!;Eain_h=_}4EXIRISFjFm4B5@Jc`d_n3WA$96kcfjXhtjNmQ6%c4)ChZ>$-YklSP_$`uy~G_jqlI^RLG* zHUmVm%B~X?0CCL7tsBWNO}~ux`Z}Mdoc$6W3y=6-IH{i6 z7Q@9Hsx2iEYNvJi)8*P98sPSWt>~;1A!!B|qVok#T@CX!HiE3{JKskYYb#8df4p7WZY4Q#{1*QK@0Wcuuxnre!v+>>zaEguWVbLHN!Dd{_Ql`s zh&t+?%Zf)*)mfuw&?Aj>lB^;#Bgo9iI!w0_ShofTtk3J9e}c(QXj_@~P+fnl>J$#L z4L0xU79@K)%l#IyNmO$kIYuqjPOy32kdDdzopY_kx8I`c4IsWN=zIZsAKFv)YA}Fa zr~`5NvEKglv4p|jMLd8$#8D{?;dK`HLrP{L@B{!|tILRYw)th3P15+#s7RWHNCiuH zaM8Mv06)h%O<}*u7}zBf!DfFVwCAG3s4K$-9SvBpE??$(norL^?6Qif<aMZ%>k>NcJE*}+t<(Z%XEkZw2Wu$PQiimO6}@En=gIDMw_y}v)1V$3 z7*gW_82P_4#Fxuc-Dfg_twdkum=e4xQ=Jhug~&iPS>Ic_{q_fZ>W+VFf!2!lnp#6# z9jV(^#LUr+big*hZsT^uD63llO|guzF;(G_D3aZy&N2WM*WzO|y7!D0uMjV13CYsPc|xO7UF-a2XurI*s|mnfJe+ zBA^JM7hFDY7027c>u!pcdWMGo}H}1KE62$_#3pbM+*{0D;XYn5u z`grenQqzp@+A4@$=J_ZD+zQ#T&X-4k312JrUA#t5?vbW zgA1@(<->2Q&8yThasl%zTQy3YN>#YDe5pR3F$knB^IX(dvaCA(rqs%7|f zV`O?r9^3D;I>5=KEB*l-Z3y;olz@tCITL^2FqT{AN?(L`Tp~~mdn9zvtehOW zq?q!B0CbZ3yQk;2=OPTtr#WYHjlhhBT#kaB5)^1vv6e4+;>{(#St9b@OcSM>m3Mmp z{x-+x{m5(u8v!`nCAhfn-ZpxdK!^+e22QlyN(GJ@#U+a`FV1pTDvb9oVzCIgS}=bj zX9@|=*;uX#@P9G9KHNXuJm37J2i|D|my>JeyCist(z`jA;B96s~(;3ZlQ)z8EXgmuH%^PSB7-%elK?T$xV$_Qgfu-`g${08e{LKdd!kQ zwt9n`(19<7{Wg@zu2Sc^NzSG+w==)QGEJu!;Lzy`oJBEx6wvG9ctI}9;5zPK`t4q$ z6wA_*MG@Bkgd_W2`4U+~7}$TOW}VccPx||7Sbu!Bl3vlSgv zD#*J5;S$j4wbINtlY8K}R!@Vho9YvA0*e>$(D35A&owwba%2irk%fN=EY904Q!%t6 zz*61-aH#weTOV&glCM!F_^qb+;R9lv_n(sC{Ow1cQ6ZeH;pH@ym~ziR3yxivCt^=u z>PtL4zI+U$tqiM9fiDO>5F$~3B-_p_1vm2yeSNF>#)Nkb0FkctWOTwwq^4ms=539c zCfCxX|@4SsMK5x&^g$>xLF zE0`w2P{E+E(5GAHW4!lZt}rzAezrq0)jPsq9s~8IK$oU3@IA|Y|G)naV`CS;*c!$m zlMQu8jXv;N*8&`t^*QD3z5H;!Q49*x4Q-UGciNIk)H(8z${9}9wfHZ0*Bu9(@HD}9 z7qV{6!EG)sS~GtmmHaQ>Xm4#5PtRZ3kK)biv=8m%&NELAj3_N;YTv#+%Zd$N49OMS4R^ZVwy`>KyO z&!4$0f5U%x2S4e)hXLy1CS32RSc?;!MY}PzFO1)TBAssA-|t^O_~w@b5Vh4cywDs{ zP$PgUvBffZC&xw}t6lNs=Gep&)0fqnl#=OI%t*x~Q^W(Om712GqU-Jb-DfJ<-mpDt z2@={MCL1+N9zgs7h=na$nw=}#+f)B!A>AA1fwF%!P)E;sE!OG)KgOElRgxQXF6A32 zkoNQe@7yO?9DX*M{f!s0eG}Z{re}AD?sYQ$aJw2r(ewVC6S312D{p z-By3{Qfq?C?V#mK036MzvrGvkmk>LaoQVL#nwOhQ$Crba9WWc#bk!I_te`<5_+f2t z#bJm4stwR@&J4~UFm9e6*kb-O8MJTh@=f@ZJ{%o?MW}c?#x4&(hu&`UKiAkD9|z!# z_GwB{S8{A42vb7%g}3YkygV=)g{P%;vKp(@mnSznkbC|%*FYwlr7%*--4ftBn)Lp)9W=KUu5rhGk|dvq5k&Y$iUKMA3NtT4t}#rKL~S zpKqQ%b3OJ}R32jBdwWI@433RL`ebgV>jRu{U8}~M_3eE>>UL)bBG2rJV=o{mph>Lk z@)3Qo0H*;&p@td?LF>C?`SN)G@`-DI*|(yj(U=u%C?iHXxIw@~3`%6GOMa~|{B*q` z^ftYl>|M-$c;E^)s_P)7-b?K3GRd1Kz>`~j)^Qvz0+(C%JSpI1G9yLLKpnCHbS|O$ zwb}z7!_@`>cMGC4d+gS$^;@1JR%M>dKI!Y~x3g0Im4LJHktsF^18lQQ5w_NUgDXsL z0(W2E=<;pcKVJd32g=+Hrbh?%^onc-*#lf+2di0Mkg>jiOY!&!*z3ZMRM{2~`_UQ$ z2Zgx6J~$w9mu`DWqJU1ek32jM$F`6OA*l2cd>zTNmW@><7~O@`m@RMo$A@bSA>>r4 zLA*(XNW`AlB60wM$$%=Cw&pi~B6Wp*QH+8~N3q?8jNKU33;}ylKOA7}MYXBBD~^M? z#+3zOCSy4k3hPf7qenaoX{_Bf#=+~`>nsY-^7YCzCBY5>$qtkVO}&;fY+AmNZEvth zO;4}k>saK1Uz!QHF@zeEtCX%&ycSEJ8P@`9j9lmJsVh=_En8dQ;ac*4DlRe|9F&SD zoTIEm*cL_g=W7lHPIEX`M|YbGfU8qV`?Xj@b`79%xkB!q^zr#OtK=BU5kQ%M*HW}q z@QRYU_Bo1W8)|VELdkg`zw#f)#sMq~e-2!ka;?MWoCgT6!752i^jLRy|Elr>-p=2y zfiJKKiiQlhSBzo5+l&E!h^J(g*md>Tt2WE=0i+sc&W>4W0%8G27O*%Q_KpDLnI+CX z1B)vRpwUT;VTm#k#lY@rHg16CN(Dzcp)%<%&mA6WaJ zJ#&z-W8uy5jTyS(HAxt2{>cOSV}88$%mQmCylu2GNon9@qK-ntX6dl*9zIpD`qnzA z(@SoJ%I6mG-M}TJV0{$dK}45t;P8~O=PAt9fNK*7hL+qA!$9=~>k-@XLZ;@i8HWr; zF|{E=@(wOw+1mntv+zUS<*-&m^WtxyKPWq^A z$4s!$n5YjQ+*6YYB4OQ#)v%20!hz>O%hk_L+EBq>qKSTsgIbCsMgYNBTORkX7rn>) zt^=RWuD8&eOVnel>ZOLztxILCUVxb&J<^)aS1rbtgsp~u#a!=1vt2BUjVvY(HdjQ8tuPMWbZO>v z<;SkS${4Y+W-m-fp&an`q+vuE84qNgdybhOHlB^&3Izc(YIMBuW7t#?a%Ia}>k+OweBECy#5)FjU)MNw=|foqP;1ZMD?Zx)K=|Y3}h;Xf}#gTb` zhWvz=v3=Ceq}n@u<^@1@Yb{up^P-fEv&!U&{K%@@o96QJ|4V=g1WZwHZhD`*wX1v#xG`9i% zv%1Lt@N@3%->=Av_+nhB`p#Z2YI8)eK*$_bc&UY%Hm^3bt{B!58C9nuHo3At>uVNF`iW>J9|ohsx^V9 zlz<(y-L(I_fBW)A7GKQurE9S4Hm-=pV@WQU0Eo9{KV^U4d3h1&FY7b=jmcPR?`fno zQ&2?RFmtw)08{ZT(q5$XVICSBh0O_qa|v9dwX~?GJnG2i$B1PMLx1mY-|Ih44rOdU z!O{4YeNH-s{oG_Bn!yppeYO;T48BH5|BJz8lM>3w;oSG$!8d>`Y?Y8A6AHJHIj>mpY`%N-^)N#0kz=0C2L14N*3GKRU~68dYbQz#fp8W(4FZj;%arn@EObUJi*^5Y&QZQn)aQ%QFnrF%BSNv8tcqtNU#FmI z1OK+CME&i@*EH;THcARHW&`hzJ;QpcE-Gl)7|wx_Z|^)F4Za5BKC{WIv<1UULQWNE z3V+ONP@pl6z2AY&vvab46xi7fc)IAQuEP#DMmg#rLBqZo(xbt%K`sRUP{d7JI>2uW zIYg7uW&s@8E7Zd#j^~Lt7d`?}`NW3~uI6K*EQl(v5o5eI$jjB?$sk8^ydbLpA0bxt zAS*z2#iU0|ZGVR|``JQ{#S%M8o+Kbv2j3nWxB&jZM!vdFH|%eJj_mmrDd`9XG+ORT zQQg=QE2488fIoYCXKT0yf?=*;e$g$t0D@W)!Xv=!L|nc)pLc+(CrHkD`0Z>pgi7@% zP_2lKq_wBOwli1f^w4IB6Y;}aDFBSKd$nfS;Yhk*683!Hk8#!$eC5=blbqthMinok zW}Z)K1})&rpAPhY#Ar%X@~*4FuR4mB1IP(b4^`pa*ej%7cF?KO0GeC{-n5KTfnQl3 z&g#TgyfRhuiYvHe)|{M_5@mLf8-V5*R%5YRNK3LGR`Na_7bclNa}q@wg*jDL@e2sK zbg98I7`m9hrV0v+_@JXP#xa|^#Ydqu0e+f}6e{adw2i%g1T`%F_Aq}x@dvqP91U<- zUn>}`x1K@lGC~u%2`09Qb$zXKN~mrh))tC`!Tr;@OFx(2!iC*VMJ%D%N0Om_Rn zr=y8Y0T6kz86%JZ4kYGwTEfC2cBX6W^_Tu|276{kXdZ5XbaitX6sWsq1ApkM_%_!p zo`tUN1M$^GkCJIif3!RVGzjCXao@gx7SDo7%6YI^wJh&urW)IDtc`Bkz)IToNIuQ# z86p6a6pT(2hUbNqgB12I>`MVqxz7f9n%F}aVvPwOfgMa;3-|@xgpUb*8e-V~s`PPg z&y3DgDXC|m&O;kpSw%h^m;$!Dv6t(j(NixQhcjc*6ZX>>e^|y4z(q7K=E9UKJyewpQ!MtoQ>U7z*hn_Y~uXEuf7V6$0KI4drn&d8UzxzHPPt@xW z8!(Si0vvpnf5!WYCICO|r7)?znXdWw8?YCgc>}gfQxVB5xr&jN%7(3DVl(e^Ngm0` zp;d)r9e!al^9-uKbeBQ|%!I!frEL=hKjWZNyFQo)ybTE2)Wl))wX6UuTvhVWpMarL zvyGCBrCaG`mcf>)fMl%Fgd;Y;ZyfoAh>p=_)ri0Xe-9rb#gP_Ku6pVaH!76<1Qs2S zwn!+d=1b5C`jA)0BHhXNy=_ai@l3VUy=7oz^DR1z89^9 z&9lc2ey&t)3ZO>K^sK5$Tw^1#680@z9}S)jvPYXKh8U>|7K@__Fb;`Ous8R8A=mLB ze~UR6G`5a7-m!-|_HJBozlxYXWqUAh8Kh-()YVTFLCpaw4M0*#pV0Sa*=NAO<`Fr~ zaOiM8zzwaHR>0i~kazS&nFM%!kf)?goY&yY0S`I=e7Bl!vYbuo5W9UD8f>0<9v6oK z9VDND5CXi7_*NGNE^xRyubq!$k_aF|e|6&))LGIFZzmLHmjtMmbuXCx_Wl3OhdX5+ z$O$4#DK1Rvimb;s4AwgZ1Rjy)(ffp%XI2j%J!WW)1tEY91vBjWn3Dx4IGri)MdvWZ zr<9oJmc^XlFd;Ijafmjy`o!ol^lbox$wNjQt+17gh$WnjPNBqKS&d!ABnNwh0?-h%Od|0u5fbkx*Vd$c&2^+}FhV$vu*yn-MAso`- zEGZybB1p36AWG%Cz;pse!S*#j3z>)bhb=ceCAh&I;CSZHK>3sqWl1XgZc9(@{gk^{ z0F-C3R0E2y*g_zS&iSUvv6JGTe`8fAmM`ZzOJX4>))l8`6nI6p4$!Ms&zXyY8I^_K zk~gzBBXzp#Xs*F(wJr63a=V9CDK$`iz$szcP!ttj?KJC|`A~bD@Z1HSLissK)-tP< zl7p|u1`E=JFF-l8Ekpe51dq9zX~)h2V!#~FAd(aFd13%CqB_t|JmIO?f8IflDzABG z&e=fuV<=5SFogHGZ#Vzs4o}TmjLadp#BS_gjp754J;DwkXxTTeeDaCMW|IUgD(hpY za%2@m4cye&BfYNuRr4`w0XC~Kb*FJ8CWd2`BU_g>Li@Z=$$mOMXM9P+;wuG}zo&%R z6Elr6PBL)Cyi)7;Wb}b`f3_#iIPxmr!5{Xzh=DWMsn&)`Zo&317SGL|U!KKU1d%o? zoCm2t1;gr;iF{t1ZSU%Mnv3a6NgX<4@0)#Gnlf4e~xkUm0q%bJPN?wtJ z7M2N?IWw@+o+Q%ZnJX&Q7f;3p;uc1raELQD#YxmuX;&BX6yCc6j_tT@L1fqmuDDUX zQRta%3AWMY7Mr8Xf0&kfUKDv;DXaG&ja?hii`%O`(B>hhz_|#LBeN*5S$n9~RCHld zB}(3x|J-0Q4(i!vpAbcI$CO4L0yaD@Ejjo6n2O5sxPptZKBtJb|P0!TZg*ASyU!T}>lrYK!;sjYTR>yX*837WU1)yHX+$*!_+xPma z>hxzW$jRc>n8C9ToXyEb@Q9T|L5%BOKk2i{vuh0vJ<1@J@J+nOe|QE9LWc)}kC}IZ1$?-R>He1d$>L!~1IV@kgcV9i0?#kUOv|-exV&Uu z(=|LCW{$~~P~p|RlZ-&Etou|rqjXVQ{!@lIN=XHFasIP;O0^DvFoYLZ;hXj^;OE1{ z9%Z!}oNCi08PghtZZK4#OzE|x`9q6q^1)XYQyqZ}f5f}s993Zzf1`Ue`{9;}&CNnf z0mr50l)!suSqNvdl-!svd!-!VaF_zn6AVy@9lDuYSpX7@jjR(ewcqZaCyQspq$mdU zH7NvMEV;ahM0H8*l9QVgxkz;kWs6X`N>Y6P5M0%|Jy0;)#ze{|yc3r_B+{ z{(|#ke>l1{&PjE$TN+!-fND;coev_RQ^IK9*Zt@^p1OK!BrjfjhKXY?S*G2S!^2uo6dPXYMq0e=2v3p;>id=}2yfrW&G05YY-xuzk6H z|J#3F(GL2n{TWO~^sAR??7!W3g_;Cmr1kxU6U%{*3>H7w=fn+owE<99YY9MCOpU|w z-}hVnTub`*zn@?Zuf!a~=>o9wfX7k#6sL6N>bIl(Z1gWDMjLx2rMLqAA=G$)-^qE36*GFe7J>6V z8~v`g$Kxlw`^3*a@#YBqIx)8_KwOzQ@4F=j_av zwY&S)vG>@f%osEK^}hK^7qgBhQ08EF|6zTOD{k2!tSMCeH;nY>X{;)hzq`i zT$91W)M&+LRyuC`Q;ip4-yhp7qk~RZ16rzf$!HjcXr)*$%Ij|XrRp21P`-bW5BsrY zaR%CyL1>hT;ZCSsge^mX1sJ!Tf93UnUvD*D)S9rlarKCeIrtp4uNszh%zWJTW_ocK zupgVHB3c=PdCRs!b5Rj6a2|Y{2q1MEHeN)}HPO^&(RiR?jeFV*SN+`~Q^Q+P8F6LMCp6Qyv_GMp}@M!tQT}Qns08b3o=|sS*(}e9T zKuF!(r?5Xw{B4ID49z0^e~I;m2%C*bJ>*dnKF!NsUG<_!PSbbm{lnemtGqt)Jx1Qg zZ}jmI*nYNm`Kzzb*V9j2iBLcIyvv1KD5ZNIQm-i0F^&n^?bZtrGqU)?3> zJJW?c3f^Ss@Bl6FByCiM8y%CVKkeMuE8hRUGYOPC5Syr~;?>}we}!*5o?09&g{{f^ zbCUs4DZ_t(rQzsKaPFpyLd;eX65EzR-Mx8@LicxO*Ni}f03YTAU@!uIWUwg%W1Oq* zOH*&N>am-EuXC+Ez)PqN(3;-acPOy?^z|6=^&UPj4~mQ_wKPG)fw*`xR|=c9FOZEZ z&4)e{$G`sdhIK9>e=-A_P2s#n7jv=DitstT54WWpCrtUf#pZBbi5b5#3)*4g-2$Iv zMV{N&3Y-w;Z*9Banld9fv(nSgu>w1c`!Y1z+-HXTp{w=3H@U|54>lj}-@Vzj6~6q` zA3yZdw!+_iC|zU zl`?I5X>9ZAr_@&SmPTAYgy)x}gI#q<@BJ`XI!y3$zim3r4dG;PY>g}&l9CC}w0ad6%cET-&Bmv1(ld>hVF zGHTT7bWpx2e}$mgs;$|tiP7FR;K-~*b*Zo?OdZ})UjR&1bhWmBuNiM|TjQjlj2^q2 zGFdqSd{Eu7=4d$;f2CK!t=l@nTQVyi6fWuFt16tgG`KIP;fk31?nuAfZ!v%Nn#1%I%h&_e|)rsPM_D^MD%YP*-O9t}7Z+ z_KF+LuT2KW3tL}w@rtA4sQ4<>%LBe-oya!}*Go)CWG$etY$gbAIF@xFnF&z$CrqrmT{@((rU+>?&@V@*7U&57@lXG=SOUB00=7HhJzO9G+ zMTFqHFVX+~-}@5OTZkb{g}4 zf9=Y4w2iVUc6<$w#%R)mY4c4b4x};ST_1x2)|~ZMzup8;E|!+>6Gq&TiaY+g9t(l*db! z^x<%-->%!#z~}Z=0@@1NHvt#-+9h29Wiva12~*Y6wEVYw*(?#fV!p*3yus^te{6V_ z3m)AhU}*qb6XzG4Uf*YLUG=G1b_(D*L?mCKj)4#@3^waq?H6z<{kTaxaAm&(JXDZ~ z0MgW*&Ivdkc+57e3W@Xbuj9jE9KUWmYMxs!gEgl*WI#i&Y=I*UPNW+LjuF&aFVBy% z^T~5jAd5VUDZG^9^au^0&>0Dof7O{Ev9savrV6dO?Uu(F#Apa8DZ}4}94vf56^jAc zwdS_xZ5U?djklh1O@ob?2Eext08`eqpn;E@U(?{1-HujjW{054W|$fi-x6Fc3(GY; zudFrzpiIX;{uNM^{3jZ~=^+_jqS3-|OW(Hg$qnF%Qz-f7wi0OKp_I z(n{sQlR7CbmbC?kuRCu_GOt)yPP?eORwcR$_u2{;ftKJ1sOGw_Cv3+DcA}^}ll&}~ z*Xv6*;h6LN;c#Cra=QMZf&d@<{<)211h0Jal7rLASVFg6bd$Vj`@+A91)6C;TYkR4 zjrE4Jzt>Hh07j3=?y=fDe^dYo1)eCKn&!&R!+O2jRMxU;x>?F|CE(*Qd~>}pzJ^Zj zMD^xrR6XAxPd7yL*R9*=lo-ttm#6{dOajZdW68gk@w2Drivo_v%R5+Cq3}iy!iQ?q z<&A@-1|bjeDz~sw2>0rOd-FJQ!WILN(+I6CB={YmxjfR4!gA}Wf2+Ajxx4$u%OvO5 zLd=$I83*)wnhZbrV}fk?zv-x3G>iP2#R4A9B=N4YlCr>ubvK2EtX?J;(3^?&v&BJO z)|_oMKG}}o%t{T%_5(gq;^a>j&CM32XoW{Xs9 z*QW3qK^=idZOK+oe-$Sn(d?&{M$Z=A%@&mx01WXZ^%B`>cTimp!Pl`JNSn^;>1In{ zj8yumR1y)k_u*l!?F!Zh*3L9jKrnx^v4YJ!@Gv%6g{d5Pmr}61*q6tIGWF~T;@h)q z&&I4DOpaDoX#+M0%q;DSsDxFFOno_wZLgL7u_ysaqgcdhf60m$8kwgI6cNgi=SRB< z_;1!S01z8em~8TB8E&hww?OT>X8p?DZ>5`~KslJly_hbyUP!wsLOWc5JVu_N$rh zwKPAbLH9p^e^72V7HXknB&aKIwiT9nJJplvywp-;nkl)hrN$2zVn7!>;;2muPXlO? z*(@3`%9-Bs^fdSG{N?ty#?}Nb8(!+K8liyo)h%F~Wo$M-bs`^+AGS9xeKuwsd{x0h zciD~(Cgzz9s8-pG-8QDip1Ptud^}%n=!)_q1OOkge<~2jzZdTqeHP74UmP5mUt1`* zd;eAnoFvEnnvz?OQ)#Rk-wNQ-S zw-k^6e++UyOR?DQa3hRBIRPag!i}+X?f!$kx6Y|eRB}?W<*2|Uz#IZEBjc3@__jEW zK$z3*sv$oEkXBJuz_8p?3<|IWZ_n{CoA+ksVlZ;$^L@D;r*x0#LxEpcqjLlJ&vt3m zv+O&X`C(bRyS&k&cuG4~YDyp=C|%*EF{Oijf7tWNP2{&(1IYyQ!wP9Gdo%cmo&^bA zH8z-9%W}La&K3uzfcY#DkCga|duUd&R9(!@>Xl|(@e%c(HQY!JJPbG*91b_Lm_Xj9W8ib_;wf1IC#fq!*5ZR=7yx8Lx%)s4gcW`(?fb);emr51FyHsvQeOV`=Su$L68`;L_!J0o04Rv81@N!1e*pyC zB>B{MlY>&BKh>)>(~L z15=<51=PXy*vgz!mg^>V^1`6*Vpyn^2Xzsu>&1$~LS<{Xj4@0R;PtX~Nxrbzb&%#_ z6m7N5#sWkXSgwwp0=i7$-?lTce;4MGW9!1<@Srw0TMI>6#&S*)^)GTXFY?7ZP9ZLG zzlIo=A8&Ep-@k{Lxs+~r;Tw3eP<3BnDFVx~qOgZ_^Y-0fGWi~ZSsFJqR>y#gB+wAh zpyYh)E4YA@|2CU$*v7j=RMraYa;d-+vZT;#N@}eo^lx+ehF3;SmG;-le@pxRfi17? z$9FN6GMv$pwM0YV+R8?nzAX7~tyX$<@$WmH=6HHItv$^0^G(n4{hR1~2k5pG%8+*+ zDf)zcYijj)#9ZvOl3>@PJYL)N>)}w#!@Ml*`-hg#Y6>+qiWMff8uo@KXg(?vA0K> z-xqnjF4@3aeE19FRLl_eRx&LBG7;94ptJ&rQYPnV#Cp<(P9|564)@dQ?f)#(_OI&DeGsZ4gaPAif0{kFG@MSJ#_^U=xmiZ1XM0RZR~X7@sDbc z-H>I32tS(@{H>@_vFs5@5nqEcbLZYZZEcYrXeF{tsGqZ9HGPV z&PdM14K|aMf6WdcCYBfiFWc53#=_yQSiaw;7(HFzg*~Zy;qCNlK*+JgRJL#}NrG=v z-~`JzN-wU(_67_ zB5P;>*pg-K6FiDRK)1F@oHw$6xE2tj&qvvGayzr0be9YYTJ!)|?Ga9PRGUDOS@$?^ zE7*?@_jl#n;q&>}cX_u&3Cj?>0c%iv;Tm2|TkHiy8>{BGzT^rlbvk^-_wRGBfG`pB z>{1q?|3lSC*b< z0bXF=_Ol_ordS)ni(0J%QeX)h@|rdmq~sjH^t(&}Q*;r4MgwDbY1AIfAQn;;sIeZa zawPS5I^XXf0tPT*UveZF%m!Y+)lPvH>b!#2f2l@TB7u^-CmbjHra4|e%!#HpNZNv$PH_m^N=!^;`P@(gC) zrr;tE*YgE&`W>Knu#8oi5?LkyhG!Lee^=O}Rx&%JPl3`aS+%z<$jrvs#`8*g=M7#~ ztPkvmM2$i{9l*ceZ3GcJP+Vtu#K1~O6>Mx!gTF;yiu`Veon&w>~o5)o1v>xb__V>%3d1Q zz&~I=sySlg!++lY^med85!exH^A$jf_I;#gyy+R>WnNuC^IMB5rw+g&LOS1rDevuEyhwC!Efjf7Hbgb|pPkwO(VLs|J3aVf{&=WvC?G&#NyNcf*_%Xu$Il z*u4#O=Y5OB+ul|RHUwo3g{=aCNR(e6%uUx(Uxl7{>D^~zV<{Srz&A{8{%~adn`9Ypp;JzGqEHdn{AvOwb zM2mT_BVb2(SMpp+=I-&~<6-~FGMijQ%bRvS`9)^|PPi5u12A`)Yo$He-+Qc0)~l@a z;ehUH*P<#b9uu{Ze^=VgV7q@hJbm4+$RpqsO}fP>DmHln;wVdfljCem(GK$v?|?Ih z8cYCU%7uY$ECP8R(Kz?|YdzO%=HCP5dT#kpU^O_7qhb}Nl1yyf&8v54T|V7kzwLIo zDbz}*I~ph!Z$kI1EeNo#BT=DiZ3Oj6n{n?Dys*dkFs&#Se;H6iZ-gA!ULK30Onv^6 z5&a&3cp9}FL2hdHGK~PO!uvMeLe&U7TGeI{7j3gf89&d@e$UOm!w5h-1BhNq*bP8r zEFJ2NU7&z|0S2ec_tz2Z+71oz&R_#r>QxG*Hz>fOyX~p2wE6q~F7C?x1G9oVM-i|s z5RgQ7K`3xCf0~DT<~20JG_|@So+`<9X3F&lJdtApg0l3^72|_ud&MB$*m(nWxjx>% zhf`!16{moEya^%cpn*eT9oQr$iJRKL$n|oR&$9RV8#s4#;$rkV;3A9d(prjnFAEP1&8^?4s2 zZpkS4zsSlrI^=?wh*>a=iIJpM8btmYoDN@(*N+QVd7lJv4vJdb?Asf_)|s0ES(50p z?mT2&f5%F^cybZGqkSjogR&v2QBCrxF%S5X8LsAJ;J2q~iu-%P0G9Hs{k1X!E7O7_ zS8;edswHZgbc$Q%OzqjVWJ!7a`VJ$YdDq2sIIKwYI!17{14?>!3tFYFPiGeIL10s^ z-2g&a%gc3u5Qgyzaa;6~FJC3lmF95>Q}e&~ZldWG+lApJ?-q2eQkff@m3u0nDQy zyps5IP2A%QBF(%I=fmBh-oLHZZZWGBWs>3HLAr9vHo44Oy(5P1l1yu!__SY+ecRQM ze^(~C7kF*x`X|e=4<(I`0wr?|o*6!AurVQ$5&!cf>ey>Yn|$ zlB;p;#C!)fU6NEWG$*xEe^ZajAd{tsz{}bdv;Y5tN}sMI#lboi0P$ps45`+!WTm87 zo0?DcPCUBAdMwzX2QUywpfy6pY(Jvuoj#-fA8*&T97m30e`WV&pLxH;#(ax{e*{Te zJF-eE$vxXI{`Ng5CEJp!SkBBU%|mx|t1=Qyk^l}!;NWaTbO{n&!hq~TfVC19Vzs~k zc>slFLlzo4Z-Dajk}PwHWnOOHYr!;=kI^Fv#1eNW*lNrSIP2QK-S-_i$jeE*=3%6* zP^1dEt^4Ri8dQ4Udg~PVxZ|`?aKcr?n>4X=3-quvE5)%e;PD z5`wYM&t}Hme*5-Ux!bwB0ooFrp-o8;>?i3>goJ?bOFqD&pZjVE=5hZFf4i-a?h`_J z;170(=-RicqE3+s4o(BTo;_*d-)_G4va%=2DZe~ALVOPkmX{{q9ibJwineBq8PoXs zm+)~o?7DGV%(&{o1nEfu^hJEHuqBvvi$V8i@_;e#`|3JgpkApXdc;S4WLVPb1@p~5 z;3K9k)0pYyVwq%OI}MqZe_(Xd1(sWKwytGnaa8CuOwIXqep%w1g{Xe#SNp7lHpFDr z3-9%TyhN*s$i)vZ04n{DglHj@{)_1J34IKmpFKj*Tp7Rt*+@8pb@Ve`5UlgYcj;MoNL^*VvJuL9sx2Y{=QEl$jsOQjuvf)FvZ!ELP`)z1k6w z27IV(0QuU(E5bL&e~_mqOef}ek9c?h8?*A!*IW__iJkG)!ZCF~f-&7jPyZ?#syvUx zY7&zvwy464YerCQ7!6zLybL?Pfqr4V-xP`;$qt#x7Knv)$O7Fl`10B#kl3g(&wEa{ zeop#2<@qO6nH|0`oL1-hgU4Q;!b2-G=;K@YkwJSNY82Qae^J9E#Rgm%aRnlqSf}vv zr06xXd}0i7uyVLG*DT@}GP#sMcptk-aFo-Fl^@p}#4romlg0|D>a^*Ir~rbJO)8Z+ z6Yrj#c0#;y0ZK)ZIv-Vv&fC~+Br5RDs5;fJYi+jH>-R76e0O%Q{d#ESUVHP>C8bCe zSdh|&#N>KUe*qvnHR}!5?r#$dq5mWU*bZu)h zIw;!-lExnbDqr)uDKo%=l3`1)$HLOnL?#Y$~@qg*fkrtN6h@R;m7rcKvq-seU%cHe?C$ON4;gAw3c(MeF|zX-{r4~JUKN( z5)(Ef2f9ujHVLlCC-3GHYA*GQE*LGZ&W)D6xIIG9mE# zf1)vq2s#1(2!K?Qoj2k5@o6I(q!U6=t(|pEG!(RojHNKx)Z))%Snbn})1!b@R8pcT z%)IlN1xG$)awW18)O=p9uO%zAW3yT;VLe>F8GV$TR39P%AjCQLZ}j+5Hzm@!zf>QV z(@)@VWh|^-jmkhR5E78YDvSYZJYVEfe_y?C1jcyie5}nek2uLr|9om zJN#?En^W`hiRFQnTl@88+*!ksKcV?T0^aB(gcQB@CD(wBJ!f#ayJf}rU;Xjve|AgJ z&Gw~hpW7`uB^ZtdXslh!p1qA#%rRu_-(pRl23C(<4v*~y@zsW;=nt|jG2@qWHssyjf7&kEMTw~cHu{EdO&x)P)Lsq312yVgbAMbxwi$|L zpbcQ%4IL^wQ&_D@1J+|b!xyvDYP|XCzy=>*WN-)_`4N$@x`0xN9oe-cDHc3gp3 zQJJ-QQWYYpF{c^d=c`YTp)rBU5+)#63cP|$7QWj6NXHS~G;BGu8kY^IcCmHE>j+D(9DjUGF8g zrBYfq+Y#uF0M9Tj*}cA=f3DEa&5HSwsF0Ozne7df7xC5F))7A8Z(-#5G4@6RkQ0(~ zt+^q7gb85vsqtH9jkO zdj0fuga5_DJN)mF2p$U$z$!9bB&Wzb+p~+l_hf|S`SY~leg5~<2!>$Cbz2=-y5oQY zG%aVz(OD?Md8|2^e~HTm#5^swxk-+E{D|CqD%pk6T?7u!(^I@3pEe>f*1$IS&P>e` zq~?GKSD8e3Xxr6s>FH6VGN28@+X6*^Lb_OG8Z-N~LU{J?(~%Xru~{jWm3LjS!6jn8 zDkF)Gp-8g6FU)mq+Gk>)?|UoR09$Ee0^%$Q(1OxU0Qe6^e-9Bo&$_v7tNM7(TGZcnO_kCn48_fGcB#M`F!C_IM0h%^6|$U0QzFWeD*iE3Q**sn?Qv4iPY`vw|bc z`|Ywr>4m$Df4m+Va6>uRTh~oaR&4i0Rb#AOWoj>5^_Rl)q*zwv0K9S>Ua-|G??%nM z_WsB9hTyTlfp@XOCe-8|>RRie*h(wF)_$HbT|lmC)dnb?9srkCHC=;sZ0?*~^Xk(N zzaJmu=4O=J^O-PwYI$g-8GZX!>UK<8*aA;Ar({Huf7;ZMQ~=jrRvCaA8vuh24?PPTh08WiZmOMx>IRvePOE7R(zi0Zm z4mvq@e?X1FHRDHZqqBP`CPhQ{)u#iMWjObT=iBl3AGPfDu`PP`>&*)$OIA0)!`g$@ zx{_KX`Z0?HNgh@5z3WS~wgpku)u5JDKPRrKLWmp($ z+^C_8Ni8cfMyT#`%G2}G$+YhthqR%c1~gP9f09W@kvfB|K*{4)=Y5lYTzeokR2H>J z&I(Ziv)~#VCQ3soYm+G;CqX?3r2fzsIp1=B=@QPWWL> zbF2?phd-jaxgV;?|{8RqGqKeU7xt!V7R!RVFa9$_v zf2@ylcG_zVK-)6#+1Tfjt7cAX2)-M{rV0~duAV^rPB=8YL3jzIX3WPtM~@@ren zd=%KVE5KnkH5*5T_e12a5af}u0ytrwe;oYo(>94rUgr^1Cx0k&%ex|zORb3b;DOJ; zp#35dC%cTuIa=K{OkQ)TD39RXAl&Hlqltw~Y}YqhN4jj6gBHybLtCwPqa$1=mEH8T z^7-(6OAGWj5(`_sd8XAC$77#ZoJ-jMQcX6aPl27>9oF$eeH2LY0Gmr1VJw7Hf0m~L z&0ss3%2V2@z{A7e$Fp&)zas2?)^$| z_)#7-!7?eMCVXdV#iXIUKoG)ELFh4)SNoUS`}^B|4p^D!q6G4Xy4*cmsEsa= zIwJls6WZ_FPKn|>U|y}7DgwlB9YP(eLdZi$pUzQqvDxyj%^GSE6{Ggbf5H7bNK-%q zp=&ZXMmH_)*yQ<-rdB5lcm+3U$;ccB+npzEeX7Qnz13-dHbBjjF{U(3bjz@=J_+or z(!d+G&CmYV<@tP+R;{jZ#6ZV^Jy1d`*0hq@$a%ml%#~#2`R7M@a3P3=rFYYfu0-rf zLRt#sfGquVzdj$<6@nkhe*?tma9Vm~t%n^h#en}4AOY*loJ!-dlW1z6m-L=Zc^k_w znu*REhKSKB$G(bF2h#6XR`ws+IjA3W68d0jQV6_w@|DzUPs1{`F@jJ@_#osUvIyBy~96bf_|-!zGL68g_`;1=HYqXb>m{>_~2b{Tw{v4m~)n61=4m*c`H0C!?m>p$}yXk=n7`5Sk$3 zhIIwJf_^CD8juKvVG)z4X%g*0A@{_&A?VK*Xakj$%u#`|auAVi7}W?fHb z{Bp^?Vp})mn@xc?R|o?`Z^2gw+t_6~-{o-wwd9E{)`rRmI0d1f^1UE5>pUjWCRk|J z^l}zH{PCjif7S3tB;>YTX;>)4V@es;GW!m+9jDh;?e6Z|7XGVa$vFZoWE&!PbqYMv zVvlvPnk=7YN};kf@!)uCBl7I31dABSdslSr%>;G0i8eUOh3&P8{VQgcAlx=+pUhMI&Uf0?kro%E}MHL4JZ$N|7b!pKmO zoToBZFWQmBfv9%q;T4Pz*^P3G0>4UUV2qmgiC#;+dnB;CW*W56b*T{0mF?XXlf97& zJU!(VVw-|}0@V!X`}a3gZi(6sHm-W+edP(W=k!xVq;=A@zA4q%rcBj>O-cU>s9X5fvrP-2R3P( z!oKC#6@c&cElZXzJOiKrHez;yDMc)uT&-T|f1pg8>cR%z&o|PVHDq9dSI91R1kR2v zf?#DD)0Wg!5ws(&UAL0 z4^RdY6AyBSrTJ0TB{HiF6#*n{rGZvjV<89r?NSRy&+m~++fv8%Tb=@HOI{?3T5hRp ze;|9Q(h7hXa_2{9-?yao{g$UQc4;NUkZ#Gw;@HnDDut+^A~u{~!rpGF6??OW2<{LC zbgY;Twi|=}i9JJdc&{Z)=kvaQ*+i21R%AysZcSx+dJBNyB~+*j$p>_7b$X_BHlAFe zAqX?P&)GuTMN-$Pc;j+R6`(`S3qO8}fBldD+$WdJjckU>i-9owC~S#{MOBJqhGTkU z*PgbVk-Ys-HbEUu6~{xfI-I4QgZqyHP&jWFKf6j>g$F7AssHa35&r!B&zSJ{n}{X^ z8quqAssId7$``hEcAR<_o|?tMI<_#FTy0fA@3w z9&SicddA&7EWfXDc)wn?*b~R3605w;j^7bU?;#cFPk@}J2Xs4WM1xGnGUXjy*`Sn z-ucGnf0Zq%s)Ew_`3=&?1>Gzde}Nx9&_skSUIIIg&0JRvAb!Q@9Ie~XmR1P;2Z z(2eTz9}OUmVXdg$8O z&%**W8n%h()@KP7?q^7{5{4Z)Mtk%0Vsk zqN*{sv*+jCWxwMo)tj?@glzph{?-C1g<+a>21GW(9hdd@t;4%?l@1*IFkRQn8h7?I(+O)^JA3&^HF9&CoaAXY_9vjvGrs-s z@Wl)=4BdwTs$gni2$de9P>b=lb`ysOvH#@glyeXGoFyb6j-UdzYg4%lw%3g6CaOBi z6Ak#(gO-|BfE+TIpRaaHWKy~$x4zwontgI!?El;+e;@4NYr}{J_-arBR|OVKvlUqb z=9!JoE&`t$Jv$2d2yeYq7d_>(T#9Tx;~Tpg-OlKM?On=4BCP*8a%D%mRz`HD+0Yw1 zw}O=<;OJzy^9b^I>MC}*uA_m?Yj&KQqy@J>xBJ}3_O764w?Koza#L1dgYKI?dMlYJZe zcs|U?fm?~z~5w(@7yyaLLm~2T!G{Dq!t0Io9 zHZR6ebA#(hEql$5SCL)Yi>WOroAt~*f70uHf88Bl84x}m?C%=sC{WrJ-XX*JSn?RA z25>6S9BdtX&q$89-b$@N229P`TCgA3t9e+IO7vchpVUqN&dTyq)&|g$OhxdL+YU*XS&WQ5# zImmn;vS?4m*{*`6LGap%+B8X`r2?{lhlQVk)pzX!rMJN~CBYelH_V>NBWOArmJ3e9 z$kqY=e7=6>Wa0h>=FJio+;r{_e*n`Cc7QFctJOaI5H!4H;MxrgpOS0~R=X&jT9;Vw z>>Illc0KCUML*u__u;u?j@0AnlTms!nMtUSfS03T1?m*}ZOw5XZH)Wy?g&6JiLG2q zyAu+wOcr`mrT-C_IWaO)<>(wy^th*zGSXpFs_>(eTU}8&Uwox2dWYB`5qwvuO&V z*~ayJ`3;kmZps-d0K8GNStK`(ke6Ho26%~ zatpatUZsiC07XE$zd*9h8#HJnPKPxZ8vmtb`6deY*=`%aq zNy=sa^2DgO(8OXJ2yk+lM;gL7XMhXAKx2*G<*C`8OtS0k8^ENS8Rjc>SZ&IQ$Itil|thK?y&&<2NV3+LQr+;JdQA`+E zt!rCXUIR_X1UNGc+c)C(;&d}#_yF#{;B`51nb*2T(#@)>PXqreHJIoUaAE}*Q>?L? zS$dKislb0~k8EusOdMI@VoGQZmci1}4Fxu)!DWBm4Y_kmJ!e_C}Y8a+X5r0W2HSG>S zX^-44f7HB$h)mvse}4%}mn9~xqAeNt>n9DozXdqu(7qXn@6RjG9;zOq6OX`Z6el9R z*4lWFDugopls|7+R=ykh2kcmRQrwMFO^w7G_0}|C#sW@5^&4tj%u{yfT{-NZ7H2Yn z8+HhtDaAd3t)tV8YN=rB;ldGHUMaS332_>H#0z-Bt4i@Mqmp zj~f8@Cb1hB9B7^*@K#=SU&>e6J*aE@XxPpm_9{858X|5-_6Sp2C)QF8Y?`Tw&#&K4 z##Z{C;k{0|cYg-zn%T|83((mpS*6sbtNbP|x8wLPmjZu8aiD3c?{YGqsk6F&95G7pLGj?-BY*y}7OQ%oiWq}x!`?X_yX?yK za%|5FlPs!>RTcA3CEDbqw1d^W-2VxHg~HXg~^tjlo`_%{$}3G5q$M} zS_mDS$7!iIjJ9Vb38cXAmTDf6nrKuy9>ukJ zRS@^{W**7^r)qESFS!N5%03%b27>|`VN#=NAAePjt=>s(T)w9^&R{f{*U~O4Jy6#q zgTYjn;UJBa*pmm~Rkg*D^z`}c@?2h?VC32$7%08iJeZ*E+lheh8g!wtx`|9|4tYAC z(1i(@;7UY%HtYzHigPZfnqt;icF-?(2axq$UuvCC1+&C{k1CJst8qnBEQZ(AwCd9k z2!H0Xc0 zztSy>ZPe1M?aB|(0TFRv01=20TgCKNo4I$+c>Z$y{d48`_c>KaLz`M+inb_r-3uxq zX!|U9sZ4{*;mAU!og49vnN_ zgMaDykp#fwp?zI>Yatf!Kg?EA-HaBRtDsqd#bdoUbGOc3Cg8wtS5`XR(FSTgAXX+Muw%gUWW;dEFKKm{I@(NhCw14)_X>F^~ zU0XzEFlcKLTbfOn-70emNDEIZEANyqU`%S%RE)Da#in)YwUwf&bTr*11FvicirWhd zeT{0pVQY*WyMh~JmnohqcN^iVWs1f&8;`H6O-#=FXaKuXg;N|LQdPR5Vmu`;WO}Z6 zVwaddS)+4(=?jmzjZRckw10_umm@mY0{d5)VF6f0&+iXx%|R9$7{FYjQZ4~8z;6@M z*bX3(NMc5qA_ra);e}NlcF*{-(BCwWzTSNXgTX_{s~ENLwvu;d^m)qa>3?OUk1;ff zmUZxaNN-p1=jAUZ0*;-h5EjCl61Ucz-nwu9CfI*@8F+ zX{56A>tBCdfEuN(E-&)%*pZSD@ZlrXs8V7(jhL>JTIAW1ggOiFsH(`dcf_%@kkA?!B8^%8n1!{nYruOKW#!BD4bXno38xp_dSPsg{? z6W$kEc?1spE!2R86Mss5!21~L`FDeda)i6Pyw?+=&eG~+I&iT(eoB~FP-|@VR(-=t z56SbA{%r<gKl?RJpzve-V?az>C*l!9`m zCF^?C_%0{on$y!g^R!)_B)V9enr^l=HNqyyKeR%u8Kc$AhJVtvj`psU?^+A7mrbm_ zvb%I1vFoYO;Q1xouvTKL#;m3Nwz4Jx(`XDBRx7DTV4_d}%lUiVcRzQQ zz#7-r-DSTJmQ(jygB5n3)F+F#fGMQxTm+2>>dqC3%dXV@;x#YPNUCbc5Vlo!0O!q? z8sXNhQ}#}^=zkwuFP^nIE$94DPWO~S302T=k5P4Ff-fRPre&C$50_D{2Sh}?zS`98 ze9RFRI?2YeB{%>__L>bw+m@zUcB0)!13@7qgD8( zfdNhvPS*O zP{K%h4u6Jd=1DGxIjQ1OTqMkFe(ceq$TB8vo|B%XAsytFmR2lr$+)2)4}N}82Xk(db4qqO2jySa za$rbYyVTx$-IZhOQdTy`SX2;Rno&mlm@9Hz&+!madts_QQN6Pc1U_3?44}K~vGmp(-kaulbxU34t;F>G-cfG|>OWg4u1A&YON77O=xFoR9e$JojUQ+Fk?X4@PZ0hVNgxaCO@i#rZjeQCE3in` zdUjWufo7b|Kw9o4yx2@b1g7lF=+*uKBcWl=zkkD zjDP;pIfZV>G02Qa-hRwpDYPW`t6BDPjZ~$6b5L!HJkoqZp^%mlQvxr7+N!zdFEi`4 zpyAC?QR#s*H7ZcglG?eCHnODh1Ie)Ct!qyw@bBoN!w}&=bmp8mCZ}$QtSfz(L+l!Wl zY+DD*cOM>K9_;P)!D-35%8G9Kn2x(kmFmheq7QLz(DwOO$lKp|jo1Tic-^2IYmbw9 z|I2Bx=JE}X#09#2W}m!tzq*vLQj1toAg3xb9=esFTWjkE^g^e>}{)Opm__ov?U3icpVL>G$ctEKs&G^{;&0POyhVN%>@N zK5x3NU>(H~H8gfffoArG+3iMLTj}l}KLD!D<6hyLV@IqgDd49_BYrp+foT1t2Qg}v zeCY-F-ah8}v(n+)C%JT+)qi4EKc~17mG{GP30`U9^~EFPwcuyF#!9N1?C6+n82pII zol%ohG2~G&qFb>)$#6l9FWwB{y0G!#@#}85O^1k{yYMPj1eNa%M57E>y#RBFzC3aSBTYnk;`;2G49$KJY zgerdNh}F}Wv{mZ*fN^vkd()tozn$nz1ElR>2Y}wLq9z$I^;nu~>;nj|ZljWJ9m(_U zc%aOIrJJS#-A1gZ*k^MXV9PpI-Yz3Xe&3&-9zL9y%Xu!|Tl2Les#Metq>a)h1yrkd zTl+n(qn~;=&YVcrL4SM5s7aiRQ0M_>gWMxd6q2~NIQ#MG>G9*s^QR;5GoXl7aj0Pl zi8D?EUXP0;j4{}DdLR4F>o4#5@*mE$=6Y9#pWH&OK{4Nr{&LDq=Dx(zHkbV6vkEK~ zjqb6p{U*E)TA!jigSb;QH7|3u2Jdx_U&zvbXAXJ}nAu7xXMdE57K#T%;kjOH>N}QP zYjx`>a!Q0;j13ln;>xWo6iIGT1>|vxEl;;~TsoyMUNVjCT4LH$Qq(bIM6o@PTpdKp>d9lY4q#x|=BxsOjMjWG3UaulVc>I%2HKS0c;Ayc z*vOf2Q9}ozeEwLkis{?9&%Lz+l&8pR#&-!hdTi;FM7))9#!LTcgI)LfC+L zpmZbR(}K$?=Cue&mGSz6l(fwt=QXbLOh{BE1$qL3wc2pHu%;y9ThA@vygFTor7beI{&bg!PIt%N{qnP_ zZ(vFdy?-y@61KnmO7Jr>UdEeKZTi5Da`37cK<6<7MgogP(Yh7-v{ZD;vc!ck1#fN@ zKu}ON9N66Ae&ns#r=~b}7<2ZyaErB05K3`aV-~Qo*n4{`@Hv6!s_I=r9^p}xRBQC( ztA#$r(dx~CKC9g<~H&KVOA-1QFlI6Z`Ead z0L|0d&A{grmw6`HEfk?u3JO>7BP8T=fFtm{wuOF|i76wM0FnW7W>YJuTfQVOypW8K zAN%$JF49T168hvlv}yolRIYcD`+-ggm~Mu@Kmxg|TFNU4^18?R5}?vq*63L9DTVE3 z&3}dJ#zsBhG7bC&xTOUL+<+Xrrg;FEx#d|W)mXLX4lXI9qH>3!zzsTmvITCHW8H$K zYc6&hfHz)|1_g?dPnm`aYNWR#jkvAg=aq(=Dk`<0hVgK?JKhywSFDuo1LocqEnRgB zJ6G45b_}$Pq26QZcV3F)nNQNWeSj+jZ+}q0ywVxEEnq{ewpDc?Z~>`ydGC6Cg=#2} zT5iq4NVTJ!V9rfmgZ6zbkg&a3{UyS=rD0ah;;VEs#S(9H6$CXR-Iled23P2=)qtf< z2Qk|0IajnhueAxC$9Z%3#+#oPVH&}K3a*%9lLY*d0A_M8bBcj=D}&5O*syQQgd~NmQiEc>d|;eNZojU zqqKo0{j2WOUJ|98^WpmPlPDUr)I=7kaW##sc2xF;0|w6n|myvFlv$D4=c_RQ+ERE(x3D7XXTkFq;g zI$BXy1n}`QY&#P!Qh`CK8L~n19=(ca6ZyB+6z7nFugfQ^%59 zDs_#Qgt?7=smoG9mM61_z}%b%sQIZxuj0k8zTY#wN;NGi;D2t^?tpKKV78&~SOC@Q zPMhENhTxZ-Qti&j@GBySiUuH^ips|`d(6J>n{MNtclStBlAj|4Ufc2DwRuMNV^@_S zLAP`MN=J<8T&Xf6pp_59jpF=p)dwwrziSV6t}_qeef^B=jyLBiq*>)bV9C>=*e16< z>Agm8oc0QfUVqxOY(nAlanu;I%S{|0-?q?RC=BWCxHX!^{0i!ZuSkXi;Lq3|H*ez2 zi-i9*L`;3&I|1VypLDpEi@HiEvi95cr^SMEtht(D)G^qlc$d3HRDS72TOV7Jd0Gd! zQrvz5+JMS|;l-lKq6}R#u7}^wooh;^YUJC2jFf*Vu9_ZEa`yRVMK&lf9oK zyRk6O@y%se#rMcu`?8(lm-)X-0hn+J-z`=c&pB= ziD-|#^!sCqs}$`DSVKyYhZfD6t2_c8c!-i)rhoX>t>Sh?`~^_&QOzb#q%rviX1&W5 z6l1Ydam(Z{l6KP(S_v5tugy?PMVg-rxwqlL*3|9!;6@otyZWyYGE1oKY-jVKlxQub*=G}vLZ3>- z(0}Y(pRds<8z2^#cs;2PvtkW;=6&Fe97|^{1KrAU8qv zY00wGYN&NOwn(oCR3FD=Cq~Ju7OaCCNq_gGwAZm)MafNZvRXy8YZO1909nYseG4)! z(ZrgoW=9)BQ46spBs!N%nX?ab{noDim2y`j0AvBuBteZ2g&UVkC>jld(R;p~axc^k z0=6t!d8K+Oz*RvZZah3wUV(`9=K0Mvf>j8b(;6P*Qnm1psRxI37!%Uaei!*F{eKd$ zSqT~_+T>|sk?D%XUQAx_+D5-d2tva|<^#FONWVx!H4nvK_AUcVYiu#!6-q}dBGb|+ zICuIY${Zul8RDc@XR6ybzeXY``x+*Y8WkB+z?}+WtEl@k(z>Xl3L$($E$I6O#LHC3gvV8jcXO65jD7~x zl`^6s>A1EZ|I6g>BHPQ0Vd{k{4Ww@n0(pRKAP}cF@zz-#L%Nlt{IHk5sDIDST0P8} z=^Ul~_D0?Xs(QSqLMse_EN*m+7I_WLQ^|9cu}?c!$pdA2I#=%V;3?RJiDbuJ-5`ml zD%-?!jqI3Aoz|C6joty0d@+ipYjX*xU$)y@S1F3kQIYgl=Ao@EcH&aOZXvis(NEiz ze~DhIE@_@EQ+SAq$v4~d3xDHYf%~oPPtU&X8G7Xb{`FtRdbbE8F}z&$`6#^8&g#&I*sQ54E&iI; zK}FOxXlwLB0jzzxEKV#I$;j?1=-!aoyEo3*2f(%=NLA9(n2fb$80@y!HU5 zIr|XOh>9AMS1cqqgYLL1sKdjR#TLy(bE1oObFVl?7HwsYPLOR%@_<*?*C zL7_Vj=3k3FYHENK1%DIHH=lgUappxgJK!$A-_Ce_;l1@KT)-4?jV??8ws9&i*&ND_ z>{WDIobmjReotr0YoYU);CH44Jh%Chf$=j1{8I+1*S6i!Iu6QS9zXu>cPAf!`Vo>b z%UTZHN!93msIK5aCaB96;e398fBNUMPY^6*(^_2W$bGa5oPTi@ssJ?s;@Bqphffj` zOaf=uKiEwjwX_*RkOH);k!r0pr5GSPw~owzc(9jO+p&LJq51Lohj;G)l@2MLeVyTt zy`P_c=r@#^Z+|Q4yCKUjWL2ZU65BEG)*U3S4_9Z}rkMNo%U%iGF`0rZU9q&BS6?N_ zikcljbXB(v{D1!8!zUPXXM%s_5z6q14#7Mq0d>oO(<`erEI5=qx81sU^|PNC&fIZ$4U{ypymb&N3Vp_LwsX+54KbwAczty>X;}8M=a>hzVFi$6On8 zBnskC9i*(9*0zvx9iI*ktPX4(BXBx$8G<9F<~2N!bARMn)js%#7gW*L;{WFHCEC3? zuE!7jwh{g5cOAD5N1Dh+qH8O%6+^{nL&;S1OfBfN(|Nf_U|MPGE_2)nQ>5p%HLNL)!q3aayeNEN` z6?D+16@LKs=c)aTj_1?k)4Q(*;O@YhTfnp$Rw7V|p-hZf3}CG|T1#x_78NG%oY-H2 z4oX>;4pbULK;TeY;PpT+SWnKv78O3+O)fXY*qpJib-D@2W@dM)F_e(O(IB=N`h>D|VGG z8Gi`Q{A$T@w|16@rMny}gY3fo-~0F6LU^=$T7$kGTOV}~XQ@RODPb3Q~@;s-Iq$Vw{0HdVfI5N+Im4zP@>8A^Vf6`qcbrrI*IbHG;Gp zc*}0PGxv-ceP8p#H(AmbswiUptR;#hZ7BoH=DaN2(BwK7wS$iy*Cw%M1xp9mz>Av4 zQ)rU8ecA6Y&)t!$999&?M`@{-h1}sosVKZF&gy^V&dA%dm8nt0j|!yTuUtd{g?|zS z(0aPD6>!{>e0=vX-#o8mqR58hY#~tR!cdr8m!df&O!Msk0|UQMzui7QzCRN`$p5o; zZM$(K$@OpiV8B4$FYs^p%`k|(L~7{OQc{bWS-;G;`<&vXNr}*Z@58p)3HF$8z zV4E0LNm^r5t|7(-Iz%OFod)fDfX@b9q^H*Irw_zx3yjx$v%C*H(p0h2?tp)`Sg|uw zbqqkoMZ>h7XSE?)UYe<~Z?9VNOPgQ;!X6eQ9n=n4HX{U$25W^{9qMD<*MHLR(qhN1 zj5Fl8fbeH?CELPDKbE8A##Ak8*!wD{{Pv)$@F=XHx#qW*>I?7t=g(it#bJXDaUNi_ zR)YMA|7eqKYi%@9!NT_+W5?an8-_g$6{^b=-{GJF+8$|l&WNBJRi*E*r{kwx-w<3s z|04zcc|LvMif4KLuI+@!1Ap@XJ`48ySfS27gPT~>aMV{;ePrFV`}@=Fj-dJ4umu)? z`-7Ctx@?MxdSEO~;ayHis&qIE^S_Up^}x^odJ=4E>?Y-$oWwzau~+sOT`;@$ou|FF z+pTeS0Jbx{STVL|+l1rbK;Do&F4>*C6oFpbUAZ9duT=SBYY78{#ed*`7h#`QR`Dh6 z-rpX7&bd?UwKwCP#8Cw~GJr-AAuPONoe#I~hi%%>!AEVNma+$+js&?~LL77XYSlZD zUpCMF)h=gzaXrQ=BX!@9MkpUR*|zBPQnSA=n%)r_-U$p>hlQus6ruo|*!ssI71Npu zegKpsu1s^uS%InKw1110yfiGiOwcY{B49J{>jE1B8}YfWJe;Urb98q;E|(*BT?B%y z3t_Jf1VGPBG9tK9ycCL##lXkoX2cxozy<2LgZCLkq~v*V;#>f0_}yFc5#7OBHJnkv z>X4L@t30cOw}vHo>T_le2BJs6h4*T~_Zm2-?FhAw@y~bTynn4ds&^R&qy5u4RVyBN zi|vDyZ4GlE?5^SQ!ma4SB|q(%9b0mIZr{IuTc5xDb#pWRXs4G~7Te#>Cit0$k6hZD zZ+#&>cH&<(m74QJVD-_uSzThS(I_cs$GIDddHX`^sMe}ytY6nv%_7sCEIcxwwEv2S7vTi1DaInK_k6MXO;T+v4n_4MF(*$40j2ybQy zegMdffx}1FIkz^jXGE~ zR)DOlP9e0AHaQL!d=&sstm!j@81R^M+ErY;ToV6C*{{6UP=0|m5oyXzq-A7i*Ln(w za0Xb5-Pn2y@}s2O_8UGDU55p(lbA}+Q_KSI?0?vHzO%NY>YCdyzbX2B_y^eFR~WTB zyz(5TrN|8Dq#2(*(5D)6zMgLH?(rL@JR;8@SJr4NzhfZA7HoI+LV~tfc1Qs715=oS z@Tb0qyK7HT6uTU?(wEOJ1fd-B^k7ay96W+mZ0ZiYQw~wCwTrZ}y5Y^5OV%6k924hA zZGVL{W9(|I{oryVXK*A3)=!Ohjx%6ZgY(M(4A*j-g{4xXODTCiN-NjaR95i$-eh+vE_90@T;ZAwJ_&rG-iQR0Z!TJ zSj*%bMX?RVgjD#i5Xq~c|Ly%lao^jZ|9|PP?*jg(57Kw)0;KmN4&#i&LPXfYhTSt- z%IC-U6V%_TNOp$l7gnVdS0V>rBS<1gX3MJ-hv>i#_N2bNb$hx_?e7 z9uZo)j{w+01!vRLVn+6+9x@oL0QuOGK%^4jkHxN}TX;)-zpQK1KhyEIcnrhU z+K3Q!0`ghzK3#Vw^vc|dYgk9Y6@Ry)r#yZ|gmh~F48=awbLg9!uWg!}o81N_4*`Xo zvjA?iSv?#cRJwB9NU2dT)xC1`*DGTKNxW1BFXw|Xvkd@@H3D+{=ys_I@AK^){;=Cz zbOS(+V%RP71hMBR$;|FO{G{tGKQH}%$EyQ8@;)a7i3Riq;M%Gb&e*j9!GBBTEyt`` zL_!Ok5=xKFaBN28DBTbSryphYUj6T5=Dg>i2nlBRnl0N3EUyd!*IB+dR95m_R)1tC zF!INeZAj9`%4JnJr1yrTM8{-T_7J=>R#>KnXV_!z1*r@>4q>d+MDhL$lCE7o9q>z^ zJKkHRFgxgUSrjxhm6hEKzJGe5^5i->`qwM7i%OL-Wo+(&Otz5Syb)qtAExS+SC4ym zWsQOkg;&?kfVlU-k(J=A5iFY5FnYDem521Nj8P-W)@t&S=BJ-7nneu_8;S{_PAV8V zeYvj3=k-go1_`+Y$Jt1An9|%_u7RGyHKSLxD!?FjP{OCBwE(OG4u3KRYaarlbjRvu zOR>46Pd`28kIi;=CbRf>YZj|;eQ-{!qasv7^ z73Um$X{3#-W*-A!zQ>yz*;3%kIqU0C(c__)W)b!cSmX4L6WJ=}13d7!3Q~n()z8mF@G9fzZa?4>GHeHNzP22 zoaWWD4}}+N*yO5AjqsJT^G{H^fPYiy0AQ>K-m6C>J?uvTO;Ga!Ego_f zAd&<)J0|jv1L|`QKo*JCN0T{r>RqtDAFa3Ca_Jpt41b|>aRfyLlo*X-a%okSYCV~J zv+4D!Q;dK9xR-z3-01lU^#0k#&tJ+F1_##!M(R<3CZr+6tVWII42Ggt z!@Do|^%rh8>wt=-^f@9n3MXUQ(i00O zBKra^G+gkDu79|{8Xhgz-Vl#U?lZgS!QNwH>lTNcsFdlg^&YXGL&Up8JY3CDk;ou6 z1z8k71ZC8z#z_!<-;DOV-st6*dHsug=!~{`m47_(JhSbHKOK}1dCViOm!)?`UD@#d ztHH7gRrCgjk#G`o3DtwcnAzJ5F7qybv!6>v%K=4 zNfE3tuqVcXWSK?;)(TP_D}k3T!}omO@n3sxJYH>Aq%gO(;pu~uo0^Gy*!U;g;mZ2_ z;U~-g@o%5*|MQq_mR*PL&8#dn1oq@0AAf@|!MkRs@7#;GJXZz2@ArUoZwI~YPwz&& z?Nj9c!Nyo!hnM1cnPu%vAmrFEaGm6yee|b`m)pBPFeLwe<~AiE-9IcMf9gl;#e!wKfBYY>t>9xexm@%#ScIbQx$4gUDo z_p8AlKS)Mumob62W21}AJb;EB;$+2}>vgJt314wD<~2AvFCUKAexj4qP1GtN}KzX$zK>X1!N=S zJW{Fw^a3EUbwD)>s$Zq4?d&vq$J??)R{JzIg37RpcwjeRw__)S<-Am;pi5SN-0rFE zKil+elx`Y@!K_6fPCPjUB$XOgUqQXhrOi(VZI;ws^Ps}EHn)J-I*VvKi+}9r3VJ6a zZJv($Zk%p9>z$QUY#o*D$IjLn7hGwGdb3NTJ9`+;MqxG0?XVAsewq@cB8HE`$`K@8 zwZ5K4`{#cgwi`2;L&A3LMR;FWoKJSP6&7|da>r%6*VYXGx>q?$!aGB&$m*1NZP9hM zce6_1VoYi~dnaBjHW}dJ%zuOG>>Mb;lx|EdZ6s%2+zh=LAr4zLV2W$a0DrBO1u|w9 z_EWI1tF6mUJQS#m#ngV@ac0`G#mZ;)qJai^HjHDl32pTW|d@1 znF~PNjHdP?{&jo*$IbmNy_mOu06QRgd&GS^LW^ujj-1&chI2#IU4Qgp!<0`09}o^> zaY0I)9;>dsB6JNzPL*^iPyX-^X{^B=oDwloXh3Dz=ZWO&7qyD|<-*jXNcm40YRTNg z-`>T_4KgMZznaK5rW-OAnkX+u2q zSst(})#Mplb*yr0Eb9}%1ddf7b#;9h0KVk*(~$>TQo;faMT_!UAV7Az>J{S~xTQWv zcvFbHnP2`oVl-6NkXG!?5Hclt*=!!HjTwB?=w}WOMz5O|{*%cxN=3p-wbkNTT;5rC zys$4!5TG#idVlN7*Z;dYwYyJ;VvpO#fp5E?-CAI0Qjj%F@f==%;R2nQ@8F3YewxhuN92GW+!rY9niK=ogc2MmZ z-GUc)s~+0Duztj<1xZ^r*3b}mEiHn`vtg)&V2yq~^M5LZ?TSdgQhRFx3V^Q2LLkE9 z6@Zdbk>m8T#={o<$PViRayOxayNK-}cMrl?#?1O?y1zeQvIPV^URs*w?Z{#po-x$| zsBNrYiyXLOKW~~C22v-jX3k!XrI{5=MHZhnNBwH}BR0)kW6LeEv1)q3c?=d^qlvRt z^~87o<$v&tNS_c43NaqKZ^v>=YbGIvJUMkHjJk6GnS=L;9 zkGdrF&I-h{=WxOZ6_5pvlOk^n%Ax{Om~p&N5Ydiy|NDOq7_FJDnQ$O@jY){_j(yk( z*tj8o*LUk<4;ke>Vdvbs={iyiOR4Q-M@#p4{?L{J+>jx0jcN0C0_ zx4SRefXY9XH3e7+f>>1@K;ltn3^33HE4TRbH=`gk!N!qs3Mx~X#&X+lrlHc z*i1oDGgN>o|GGc5al}uJuvxZ^)lEkRhN0AR7K*eZ*y`h>ZtwnA4wwGG92S2csUti` zfhdawA01&9lnNVA5~6sbj`XT}wdBtE8NZxhA-Lx5IQP`BfS7FxzB&;fS~P0P+F9Oy zJ`}J(Q@taq*PdG_f6t`BPMTr#0sM+;4=VMgTr2HX@%mQzk79a zjO<|pe&a0=RD=}q|CC7tTHDMe!2;xiS9ngK-i{Q!D0SwYzOQX52pR4Sw$3E}D)I1zB z0IeCo;>D>wp2cp~NxN{8a@1bun5r=wRgl5(hc%0JPt~XK|Fm7pawLDbk^CE-@qQe& z(%fW{Y|Zwtr!qVO-LxT_ttzrLd(pSAdve4s77NA9DoQ3B8+Dg55(yx}9fPOV{VyXS9r|9HM?JB%2yNZ6{>^kA_Yu_m)N z4ng0?xzWBwr{ZVS1$Bu=Ob~b#u=(u43_XRIEYGCoNu`IgX{>*%?sS)9W~yX7fBSX! zdJ{Cg*?sx>%dcO5{PFef)XL)GvY4*ewV|{;QnwY0mLf#XReX_Y{`IDARhQm?4HChI zHMUE^ye8~X6;x(9Hx`?oYOAfSIs5nx;BZ?ux_5Dm){5PJ8tHTD;6U>;&x_M><2#L> zaz*Sh@XA>cXC{A#xZ_ynq^Z89)EzdMudM)Uk!F>sJc((SFiF2=UxCo z4LdTs5MyZ6bQBGo8A4LjXNl7!ruO_f_6s(cVpnMVOAaK?6a(v4Dwt52AERAb47a@z zTW2TgH0k7mb;fCa5^26rF>Q{tuW<(F?1!p4%o~$Ru&D;GY!v}*Lxg5=Y055NEZ z=g*hD#2h1kc?-#K0hYosAnHj#n-#W3i+Gnb;=JJSgO76ads#8qr_CxXPlLcwV@1qJ z3fq~|(Nk{tuMID@Ww~5j8>^SXviULywTKi}bZfD|Mbee8tp$zXFja^?JW+aWOBawM zqgG2m+@+QFl=b9lA1stZwssP{i% z6Cn+-NqLrxs5)9s*s+9}&AMjOyxbehylm-@ePpvlP`IXY96%EinJ+<^fP!@#*k9&z zPBPzrnH}DiR>4=Q*+X|pyzp2FW@7)ET?zX^73@xdk@~cGi$;zsbAvs zV))hW+QO=Lma}q*5CG{|wmRwLL(ihMs;cHu<->ZtKipqwI3N}@Kt`&$^Drlx0Ym`O zp#)HS(CxHy*o`!9pYw+=ZK@C&YaNw7m5yQ?MV zsJrvorJ7{)!irPOYm9RZinVDY?>{Wn5;#<5IAES`2! zgFT`(Z>e~%tJ&L%DOEkrYigIo?8C}Cop)9Z_F*oG>2fvML1u@@8j85WGR*nm?r%@m zoOCRQJ9xGV1KY$p_{1K)$;q1tf1isj^QLzsNaQJI#QzyAG)HReZ8T6}Bh%ss|e zl!k4uNl8a_2_A=;4xg3P{no0f%?HbW0Lhb&l&nU$&TP9@si8H?CBHJW`>pL{usA#x zCYAAe6J87W-icV)4Qej_UsiP}JNJ$8cp!P8KZkt){>^I$xH{*VjTh%VC`X9E!ZWICAFb{;Mm(I zv}HVF6rUCGDI;cppZHQ)0i88lGTT_~Jchj6G@D1;I%U%I#1t}4)N9`{L)~a`$*j@7JdXzEdvbFb;RyZxp+GH zxJBh|OY*t9Vmcxz;7JaVavu~{|9p$!oz~V2-bBU{SO#LOVUKUXdp!rZH(1o(Q(Rdq zcwlym>n_758o=wUa-BMe!}F>JROh~GMvS8r#0W$|BeETb1HQDuf*;O*izKeLm_4ZI zh@+3llLg&7a0#%qjshg6reF1Xi!s!qs~rIZL3`@3vXoM=Y{e!sziatg4)FF550C5f zB2N9iVLuOE#ZsQq_F%yiy9V_Z^0PVUYxmE6gY^E%c;iy^hLDokrYHbG@X)5{2zOZK zviqygGtSub$+S`MfxU}=J`Mw)Yp`jukG#tX^NSOJxod3#lSElg%9-ZYiVl|bqQ&!^ zy4XuP>f35PZnK*tNCb$cCxG)U;A7dTUKN~v z$kWyIZT&^fxy59nw&F372;!MXN1)o#FS>!XmpO&ll+yp!W)nnzlI%uD*yI?&>1)yn zATc##<{5?Ca(quvcLE~A{;XjrKU^4=%}=p`Yk;SkYiHi!1J}k=FkkolH;*qoJJ>)Q=uNDr=HZ^2_m?*&~H{D6wQXfyCH@oU+ zt43|c#ibgdVkEe$cDH+FmIIl;xC4y4s8ibW|t<2B2ZyBWpLIj2y zR0Jp;I4TjA4lm&9HqYA#-7rcl9Uur5;q+VRl?{wzcS#C3yR*}|ynp~~Ac$7>NW zCK7a!G7uGiW~(11OCQyVQVOA9X8HO1_Zuyn2nKAy*5h3Llevl; ztA|f^Y#qH(U^u(9AV&lT9+4s*sG8;##LF4XZKlDi0AJvmf#LvS;0~j7KWxzm`X8kH z>_D`x4fmsFiVuNM3a|Sd+wLiY&kP6I`n)*&`(A#3++sJ!X6U3!u+73jD)GZR>|l@o z7P*|(aLb1lE4?;^TcAkRz9HOd%jPB7CY9n`IhzB%#c*_8y2N2!fSC#!-PohMw;{In zxd!^f)-x?9Yb{aHns^_TKLq+Pz3 z=MRnwPNmm988B%6RQ|VH%p7w80fm>(%^WQO%a{Gl957UV6;`6GI~sZyM-25&fz2cV zha+;R;&`md?WyzpzGG`r#H&GmQ)&38N3`O#Bz8*m%~$q^Zu1PLyTk7F^Wu+pSHD0< z@UjX~v#Jt8@_8(M3h^D6fzBK#0V9{H&KzD{-#>f#)yMfE?;cAhXo6s=;;X6*60fyV zlsIp`#R5b$uV>;T){~oaroqxZE5s|pX^x6Q;n63a9fttaZ~^+A9ru-Q(K@TPwTR_K zOyGfnL+r_&+HQHC^YgFIeV1j=95DjlWS5xF94dbfDH_G5)W$oTSTDss=XRJz*|IV} zH2b#cR`=}aL0m%~n%&%7E4_DE$NE#?LaNP=7ykUqpZ)+@K&HR)$N&Ci_dkFA)8GF7 zzkmF%zx;CBdw>Hmp_>Qpl=_2nS6$UcwfWw?%@E_|(=>fErcjshQG@hN7Q8#XH! z{E`s|!aFm}f81m^nx>PI0L#@VENBETP#4u)69A>@xdESW^K5=Fj~k|NaZLfiSGlIC zC%9ClH(r%g72%xhm{##TmHqja<7NhsK&cTV#xdX@*tWF!4Xx9Tvic6Y;)+=}8%XKm9atA3i_P;lka_6G}WSFA6 zn%~=h9(FIwX!rP?f4=TI^UMnbD*ELtA=eQEfu?c=gC2x3#E$88=C{Wkm(=dJ{kkqp z=RUV3k=7X=OrN)utfx^61 zH4N{6l*e)HfK86w1(*Quia-?Ij#gcR|7{e1cbl{9!>&CaHlAW0e`s(`KuPDs^uUtb zrHyYB2n|RQvvzw>iF-!G^-5du`sH&;9^%0T|4a*v_fL)<3boW`Sx_0h= z3tL5bAfLL}IAXSdrXe60f!#YbPy5@^cia?-thOG*1x3LS6X*b@*LnwTW~GOD8s}np zQH8(Kuv0xtrOpiH9Vk?kz`J#fg19j3)MxHq+~tq6zH%jy__Eu5042WcR%3~u597^g zO6-Oc3vW1F;L$=V@E4tGdO@c5MR?4Amhbq+CRkh(I3R7h^=*jCG7KVoGlS*v^R5ir z%5_c#YBSa=OM}=fT7%k|2##r+37wKO^MO7+@6R3it(`h7_Dl1|zg{(KFVErLV^TwK zn55FQtI<}T5G3G*5-FMeSyT3E&{@zg&4YIxqH(<9$Fd(3v1}}Q_$<0`G{m}pT=#lm zy(t{F8ACH>VXy1*@yCd+ZEX9J75c#>buKXB?Tz$HK=y>(ydLH(P`tR)ipXZ!#WJ9 z8T;P*D2auE0Dj%FV$NmdrvPYw$%uK}?`|d6Z%+=-P3-C^T`+9%N#G^52gK+KB*7pO zX~adzCE96!u|4PT%iXGTqIX6eMaP>M_9j5U^%cCtyIx5CqO=SCdbjp;=AF%mAg@e| z75p+3;XCLWEFxbtyji$l6KHwUJ^!mscxSj4gD??1fSYkxCiu>&wq}cex^xP=JLl!r zu8_OK(mCg&VEgj3^%3{&V@Ym#VJYCaO=8O})XsdV>2sW`=ua&|td8jl!C(mJQDc-r4o@Fss>s13ljxlHakFN4Oxe9Bo zue$nrZ!>o``(}R~9z=sbW|KyWB@LULOVgw1z1%;pm79KV)k>f^Uvsu*>h{wo22DNR z4lFjNB59lX5W5W!zZ&K8W}O=%AYfE5jEg3! zGL-8Pf%%frasRlkL&kfvLACBwei3`|2|G<0TZU6U58dZ~^4v6A|LbclX@-*BOrkzC_#l|GZt>ZX~&}{3YHmZ^y8`zyikl z;rKiYWRlc>HdZ6)NSg86e!C+|GoxFxRMp+^!|rIHno3p`nHfQ5Mi$SqBp>*lg^j$@ z(8>8}BK#T8+u)}&I~3slOpXS=%SwT1GIPtUbS63D6}JQ=fhTGyC@fcCNRT|^yo)>= znx=7bN34~7hcvGqv|B$Ani^JW4?}m|6+kmj^Mcs(tX5;R@tH|^((Onf?k;PP zum(I?=Q{I0tnO?D{AK~^Hj0!eRwo&ml-)aoON1@(PctW)-*$u6pEj)(HXufHWa^ZS zsdk_OuHxl*YKjF8$M-ommrmCl7=N5>v6?=jajB46YU{X#tXdL4fzfiD=63IBu5o1c zf<3c;d`R4plvbGNGm`en*eZ6)zy2rs6AfxE%RwFDj%k}674rOu0Q`&USVw1_0wWr-iWxPy->eX3D zIQFVtDLMC=B)}PU(*asAnc2E+4p^?vgu>MZzF*(9@8HeA5!Ka}stSvS$#f21orw;e z(vpHjcp><;%B#@32L(02=5e0jcdlJUH4DVkk@12D+!BCrXly1C;D0vee(_wp?8T)m zI~-0tD7R*E0Wdx_<*qYgMu%g~z_BCSD5K1`^A|T1@+EBj}g=ZJiIP{M28pMR2UygfCvU$(FB@78v) zzF)gs$}6`_&13g}PR5H~vT3I`4)6cn_K~<6z1*01wai(J)JHc5Zr1#=vc* zXo3ZNaR7xz#KMVFbX}BBaZ0dSUmL|qo@kR3+V6mtr++lg8nE?XK+KCRLm9wD<3zxZ|n;ZnaLc zsVqFat$!i9c^b^|DR$x@D4@@#^`hb9Jat=At|bO9G1!C&i6XgMSqT`axRn zFw>GPh3W^N3*DdN+m^2oa<;9j&V=(+0z8X$wy82O>+4)0Znk-{)0r%;ZJS5orMtb# z>-#gF1?3Sjy0u_1Aq$~Q)ZmvG-}($!W0Wy>T;Q3rTDO=TRlPp*1U_xz^y^ zr!W5T5>HOq%<7Z`yU4}cfkp0g1Vd&Q^0Y!pW>fE+(Wr=^WlK{7VO)ihT(v;hP6akC zt$&}EEuZFc-VMUQ+fXgS5AQJtfM_U|fu%sX!aVN)yY6>3)iB>29_O0&%P&7KSpI$w zZrJ(G1g@m03d;ue-2pfk#E{lQE7S7&x0W`PN4}U8_Rs_<_YUl62w*yU`w^bjF#No6 z_8BHAi^{DQFF}WH%1F)`s*8nTVpa1Qe1E#h(Y?54*_$d3i&a`9u^2FsO+(srtNG6} zY=U)mo-VS2qiUxc_qR*p*JPRfG#c*I_!yNPTmjhWTiYk96zg7 z>D|9S3wgL=YovR1vt=8(wvi~m8b{(!Ryk?xDxa{@<21F6@of*1d~3C7p*m!*8GoFR zZ618~%yF)O6bAHYni#)J{OYaEOb4bB!MYo!c;H7oyU(!KT#jzOk+xTm>aAIaH4mW7 z`rvAP!~jN7E_V|e$f%v}Tkn=LdTTa-_*S4Z5It%P>7{QWpz8o|>?>M^A7;{SZ+$OU zSN-<-aNDOo8<%{);&aFS=60O0s(&Qr4f2ScsxTC7b08tWC{(7ICjj@Sf8Ra)@m%J= zedWJ5Uut5?ZDQLp9z1)dtAuEs#T<%dI*Sf>@^o|cd%0~l+cvb1n`bvtJaN=mGCqz$ zd}1gr5xMK-SBi1u+tt(IOTYWN!|lDdj;PNyiWLLAud#aJce9sP27ThZx@v?4kvE6q zjUYFgX8k#n4zX~l)0p#!pdM_Su7-1YYWn8x`ntEPJ(92QO*_$}g&J762BV#AVww4i zt_b@eUU%D7f3D@m;c@z z76F=<7T+8zJ9=0c$;fj&_tEj4U|oy_H8ZYKKTcFto#}y;wN@kMxenK#mocx!_yz#0 ztQ7po9!W9e!BU8Z=sm3?mwewG9e)X7u5t6oE}2_%*^ZlLBMa%E{{w)cww7JuNoGZm zwLPsZOSs^3pW9PX9GIy`gqtEZ3WX(7^V)#StaJ_Gb3gR||Jng$%ks1I!?%tM>9Og)VHIebKM{VbWL!x$S#Vjbz#td?-n}2a8B=Au& zs!n0m@*-~Uo(?-??BCl4o9a$cxIc*Lh)8$^mO1ziBQoBE4hsSdANhlF_C6kF34#0SGRUU1Z_>A{y927DfHKmju9K~pFIqwppfZHy{$p2M|# ziNzb70Z2v};P5P-&t5Sn1%Hb{fl6doit6+Jg`9quL1c-Fp`OhQFcX3?r41}l<&1G! znwk#bZ-4*g*Wdnr^_PGAZ)*#Ix}?Z)3vd9sPmj-Fj`Z-Fs6lCy4qNvizVq@2}(^PV}JWLTa()uGRN^f zzCR}oPnj~V{C?qb-3G#ZV9JatY|G#@xcnTE{dxJJ0Eh}W ziL(hr3{g62hZR{(aDNpHJWRJqPdRTrJ^~FN;mJxn;dPQRd?GFP>ec?>7rS5bYcqV|mUYddYnK(`93X#Gq>X*Jq^a#b zJ?!QGE;IzsOj;iAMms_a;(_p*^{$P=R+iHt9Bv<<%I(wPoK&rczEZ2lUvBuq&-dVi zXu~AznAk-OV0{>>g(mi35b(Ka>Eu5Bs-NbV@$J}lJyUtWG#;akqT^C8($tE`!U-|} z3mABm^7PanCFtv0s0gexH}?mdif>QXg;3-A2z^r5*+A z&w<{n+VDPQq~0nR@cj7q_yXAYgom;6Sor0Zhgt4HqNLc9KwHFT^5g7f*dAOSy&3k8 zpFP2sx})Cf#az=4LD)9ly)iKj%)mq{w;&Q~Gc~u*W4zc4sc0OH?_)=*Mp6mBSyweh zoncX5NRji!p6|W8Y^iLQPvaaZe>vt_jm(aD`0em`z+KiSqCfe2fAemP9ruMe`ALOtM+c# zYLf5MlAVo>ezy!k*H#b@Z3kW-Roj4w1@vQwfLkRstuEQ6(6c^-6cHU$7`^+byl7ut zaolqCy~Z@}FN(KtwJ+;ueH>vlKwr2q7Wa=H#MGdb2If`H=y{<{0|L0@I2wplJRaZ2fBoIAx~fm6Cp+DSp_tp6QKd zqaXbAw_lu7QH3#te^NM@@roS1SLL$wICVm&$~mbmSbni9ph^P7#;|XiihxOVt|i`Ffh`jL6NyS$4aEdn&H5 z?1#d}3P8b0tSaW@?7R!iUA?;7-d*#J$p~g0%oyxZHB=lqStr!*E(n8pE||S^(mvg+ z5256)FsB9}e-NNC=F%`G2C1IO+G}t446`i{+1C;8x-k1CE07Xn8}LrgY(=;#!gRj%k=)Q(`5Y536jz%r?ZS`_A?wEm57_n`l>#CjFl-VZKU^*^jI}qC6E9l*N#Y zr)Y@68e4hzo4eA^vTXq*lN2_W7v~%x4O+E!i4>-vt}{IN?}wK}=Nu~mrk8N%932QK z{2bX`Xx?p?mFFBWf8Ktsh55Ky+V#liEm&5~kFtpH#N65IRVC9)g;$@~Od~*VRTubZ z6w#xxU#9NVaCJ+*cQHO9Sf*ae^xVAM9Im%#sk}AmC>1=ii{&s^u>2Asi}Dl z7qH0ou3T>{1_OfTF;UpI5defulq`?}drErmrc4PC{nQx?f0MQ7)`zMg1m?vS7Gno% zop$rQ6}`0wPCS@j8V*wv^Gm3e>BOaW**ozBK&{|f)|9W z!4Eoku&eWaRF8don$cT7M5X@hoo1U5-MRIY3{aMlm}-*gVps6V+wFrBHeu%a-~8Q{t(NZs++*ZM zGO1E>e|3Q01m6&#K;`sO^g8w5hnrn3!G9W5-Qd;(zzWN*Avo#uy_VD$AdYF2;tlqt zwfr<0iiy#)p_Ose$L6`MK}d|rw2{JeIh<9l{%U8OyW1<@>&JD=Wm`Vo`x`Gu{03eo zxh%BQw>{it-Wl6ZipxI)qnJZ zpE?X+5}U1d7zdm%!Zo-9b9_z7_;ZaQUUV2Cax2K?svOo?P1SXy9V;F))5KO3qc1uP zf8cp$I47)u;B#lYR{X8P*Hrw~{Ry(4|Mm+HW9e7e zoC0YE?t#lyEEW6@Z`Zoq$gMM9iTBHS85aqXjw_C>BYSs~Kj+!M?vZ!bwnTYGQogNJ zlCoz97+wH02{d5)q*l>$f=F7lvcGm~e@5U+9pHR5?XDfVOCMr#$Q4d9ex0?l>7L}2 z0->jzLS&18oOQ3IM=izqh00*wHsB(jl+)J9dI%y7mGvQZk3EUC$=fq-mw9c>b#32& zD)g35+@K4uQ)d3>*JI05EBw!=_bxdbJpsV;ARNZfvh+ByFGUNcs92^YXJeEHm7|JbvkqZA;qB3E2qqu(E=31;GsY*MPWtX+E?eD!Vh) zH=DD~Pl+GwImBEH*c7p<=L|!m9AY_TGp69ORPzlABs$s=3c$bWV+gMT@&I~M%SFWW zOt}BGdp%Wfwr*KJ{MEj?;pZc3e=qmnzix4-H4g0(CYKE!Ft}|r2_n5EHp{$G^5Q3{ zSi-7HQ4&1~K}0eKm*wv=;?OE-x1=Rs+(;A3>>m5wT^$eS_6(olBda#e zyB98LAuhrc_(nEnrz45z5QsI`0R+PDwuqnD_m+0l+eY=HTpK+PIek=0x<*{V3IP=> z0H5tLPyOBZ`-bP9R2_4$ zmIbdCUoEl4bD0E{b$a~#E5r-HRUJW`%1}b_M%J0)N9-9;d(LXP+doTx;ce(+`RDHC z@%i!tkT;du!x(oz3pl@8+sng0pIyJmKg;0sSN6Pu?PN2_gvHRve+%Y9H_t=NSut5ijz*fA4pK*WGVvs(wZpW8wYa>?<~|BU$Arp?eE(T11C=3IUYie{ZVG z7|eFZ>NRb-=&f*&5=zuYFa6}s=mInH`g~Jmf^M<#md7>093hl;f+@nf(ZRJjMJ|;2 z`6Fg6Er+_d)XO=q0_ozgvwQYMJb_N}(tHfb&sqQe9d%M~fABI0@0&BRh914?J}Y(* z2pX2)j5_`A*M0d{lw!G$57s#?#8etejSB+t`orZN#ij4*CUS9v)-B=~q92Wj2 zHdV+Zv)9fQ;6hTS3^&hL;d0t@qaEbkRHrI60;45cEmltRnjLqXUl73i3-A*74*Y`w|Vi zY{P97pQ2ZD=8FFG@(tGcEz9J-Kk>ZgR#O#{GZu4Img72RwgD`qChYYhVXD)3-UBY& zZAM8`t2mOuE^;Fa+d(O@D)5MZ6p7i-i?ZJIc)yfyf1{7>UaRhl2@2kvv~P-)j3rk3 z_o@4O)8~1|^?RG>i;Z`pWA5EhK(4lFgu|F8V-<_FztH68hPsI^YPbQJV`O?PTcxne zcN2Ep(|x|Nci&!D-JyS}KyEDwL#+(>my*wxDe|Qi;Iba(%XN2>hHh1M_M0+qH7JuD z?ZZQde`mf<)c*9!CCy({5V({)SY_U9RhrP_J8M`zZLRM)Pv?I(HZ*4XN(ruauT8Vj>Y+xd)mqbvZ`u{u z-f3RI^&WAiQB0L>0X-mH_q_*rYn@{XCF_KpIX`XxVxn%Kn(HcR>qJ_2-d7DPfk-__ ze}p^0ww<2tT^PsA)JU%C2yd-BdvODTCuJPMm|n7pp-$t@n*}q|@j?8HEnK_H%rh}V zS3oP^blW=?({$?2M>OkQ#p6OwwRr6d!yBy zyqa&=x~+ao&6W!b_%@ZQnOh@;On0T|(c`mN(jW7yJ5U=qDlUOk&O!mtJ& zq_w#>J~`xS#|6*T3@$@ zPYBdQAh2YFmn^BH zzCVhzomZQUZL+1-;cPI8f3zb&XQrw;O;#QckDdQ>q1Z9R@-n*(-Re^5Pg>*JJkzAL zpEr~I_oIuC1~Zdl3ti(ibXtp$}m)x3BKo=kUibK z?B)AI|8dQidsvL+s<_0^tSJd*L)d|r+iOk@w(q4aueowHe}AeaIklRIAMW72;q+;W=^lLgdf4@YkD%_P2bOUA9>_g~g;}l+-)#<$W-k38vFz z>4%rQm)DaW+t*4ittl%lGy`yL$Qo(A3B$lTVpGrI4kZ8e+`er&?mv}sjYQ6r)S(c;-xSs_ ztL*hU+1?n1UH1{_D2 zw{5*&cr>K&XVLcRmVznPS*$>DQ`d68 z5O6(SCmiA|;vJ*>MQ|*)-hea~rOh3_vNJeW5(yBs{y1 z!(cZ2`Pg`QOJ(qP%~mJmVskQp1A~~j!pwCC2=84?2y><(@*z6kZ)wtZLU^-IRa+4t ze?tSd=CNUf0P_kj=jR>T1rhQqb4(9M7LYt~(=!|%d zEC@~4nnxbfucfB3=@oZ3>)0Qq_EG2eS_>2Djz78D zJk{E>ZN*h=gk~)pRi=Rrkvqv{=9GP8ir;#aGT9N?XW&f39#wuQW!R{wf2L|<$X>T; z7}Tp`tYvMc$+<8R z%LqxPd0-3XSkn9NZsMy(3OOMBtigl?OPNFR_#fs+g^}`fTP&@5-yLRNt%%d6Cvp5478-Qz!R z+xBkT>Chy$i=J2MBC%$uph?$}y3>t(e;A(8@E~#raL>qw#@o)A?OEvjZ>kMtwNCu9Hx<( z^aY`kX4&jCnZ8`mitM06E%N7&vS;SUtoxsL+AP|ugn^o4te%J_ujFnKjpVzPK`|G!pBo`}WYEwgY>`;{v=)!If zX22WA+OQ<^(&o$i4IiYRX@Bwd`_0V_U;o6wz-`V3W7% zRLAfH3{x|be}@8k^HUhVtsUTJsY*h~0BGJ6L>eI?A`MO_NvyAuc`MURy)TcXl3XPS zE8(OJkJXr2k_&qV!$!K&x!pJ#;Y-Aip8R0Tf~XZ@3RZCi*A<(pV#DV-58RKkg`V)U z*xUj$6a28GnvN|;wqOd%VJK8Sf8la?+2y-pU-tX*f6tkv`}V+^h5PGWT(yWAvhF6a zhRE7j;oKaTy6*eI;=!5Mw*ZZ9f%0a!&cYXrusHM=(E&fd=5Q_$ad*1k&Yds z8!P~8f3I3k9mCf4(Z`Z)k{sA#paWCmQg3rcD*L~fdFy|I@1_=_FC5C9_O*qrOm z1Nn7C-UShNm^W!THNO`rkg@$C*1+)xM0J@QDMG3yrUrL6?;3I|1#EyJ3N6>7E$mQi zerca-dlMZI!hMxfdKClW>z>JG=XTNZ`&B#Wf9*}&JW1u6Y{9rzof}P3mRiV(WOLTj zJ`IoS5_3;TG}f4kL2E^`*_pTSUu3{H0|S}j6d^opVmN#+QM($oQ_T(_Vc&)9T18s# ze&p!qe8R0izMirXtL~7f#`NB3`Q_J_MQ`sQjPW`SEV&T?9soY0PR95aTOe0?oH~px ze>w5LrNP_g6cYUI5KAV22oMK&4REVQm+64vt^YkqhWMq#relUt6MRZ_iye;VWe#4>aJ8`T5H-?R_L|m=X zo5w#eUqCZw>fLtxmE;Pa1;*@CimKudf0-@Wb`~2tciREZU74PZJn!4X)4KDK&myhG zChJ(HBDOJ^HLxPa+eq7D+BpyLZDkeCXOY6oGCi!AF?ci_NCcTuP?2^1bK+{Y@G5(} z=n|o7sR6~pq)X^khE%J`99NBY#!Mq&2>tf7>5AsJOy_)6A!+y<DvZj?~f4m6gfXC+ zx)yz0lvHz1a52nyPew9)gZV27uw8edNH{Ytl*7mV`rGyGPBNR0*)dxNf8*OsWp7t} zIs&f1Yh6Fvc5APXb)NQ*qfeh+a`(o4P}h2%8{ys~+aa*^JvM+U zT`^jP4Dd)k9iGR);0qPle>HJ@9Js3gEL%kPh0<$R!Ir$<8v(V`4 zH*FBV?JoLzb%o*k^yl2x`TEROJLcXSr|;`_3eJroQN6N9$~U{IK>Gh!H>RI8Fu zIHlp)#h0wB>#NIuFWNt=+ciV;y9j-sfv6FVsE~#Nv7rIJ5g3M8jBi%y?uNnWq=(O| zWyc8*WefKGZjjnCf4-jV;i+fVI~VBX#!VUFl&(KB-0bt|CS)l@Q$2Y2Lf1_RRy7H* z<)usG?qN@@`d#E}%^oWX#sqdV!#gV$FyMD@*-v69A8258wOW5B@ZWiV|Ggp^`G%9p zyN9+tnSA(4#?f?xrLfl78cjla1nqDi)gnr|*LJgAefs!Cf98LpUNESOMW&>%;DK$0 zs}5i&H>ueAi)SyuMcLffiTS%-QHwAD^DRd4IBxqMb(02DlLu z0*xS|(+GHv&8Mss!+3b>WS)`W?4!s+1X4CYyopY9fY4BsXHN6b1YMPMyU6H1k}TDf zrXt{&Ty4HUf3PhnH_S$1_4Y{e@1H&{;#YhmSo`AXNa0j^X$Wy5bnwzvgm&0|!xQpp z{`ZpHVB}&Gx?y@XY`*Lk?<(I?Ifxh9BJ!e<9Y^InR6TeXV163ML@IiK{fl zv<6?T;9qBQ9d6g@X1(Y(q6w{Q}oJ>?_rqZ^bD)aM=2Trs%o)D@-9dliYAvnVp{;Y;pNliwk?N8lG*M9 z{u=>xe?f@L;M}jc+-B}vJPq_S&&A<5>cg9)aY# z@Dl2g>>zA$h^d#1f za~p=^y&x@nXup+KY%uEzJ{pdEy8EuBby=|Zf5q@9cPcd9Z)11WeRRo1GV^-232yj3 zR|$tzWgohZkLl)*z4kS1x0D^Y#34Y*I`FEh>Do&!FspSK{Y}^YzpeTbX!=Mv1T=&N zt#v>thz$ZzSr$NZfp|rZ+d({s@CHmI$k+>@(ruPqK&51x0ek@&kG(;~UrKS0za7bXgsnNxJ}i3l&&1qXo>K znlJzS>v>fv4%=S}xV3Im`#PC`5*lflM z(zCY$WOey;xz|$F&Kf`r3y|SL@mgZje~@k>#Q-hFT(K0tzXt@ai@v08BuVBrw;vt?4ZpYr-9f9)sU ziIQbxR3ixTv}n?aFqP(Jk;jbnQ-9!RzfT*)s%T_qd3p7!=*iy|y|FdHs_`55bf5|%f zrAmKrzs6@iKeG9L?cocFD40r!U`Hqfm_{2`z9wEk!Q=Akc6^3$eX}St=aFP~3(W!n zPc$?w(7=b5J4|azCdk=Bf5X35b>f>?vjx+>iUbxv2UjbJ_u=4SQ>_mYsIw-r%MO>; z6C=Nid>a*8z>{#5$HO7O;laEaD4_FP6ZU74&&G>}$Ah*zp#I*NtCu}29c*nAL-+bz z@)6Z0<>6T2%%#hYS?1Y9AdTi-vCq`%dmuboBTR7G*O*!R+}Mq*em_C1kJp`M|DP=Q?Ysx=Socxc z<^b$~@8_i7?Y})_Cn2gO557d3cKW^+gx?^1A%7z=w`BDLm9GS|t^_PFa;!ld#YVL7hqC9K!#b z8IZ*jv2K5Taqm;T>0l1{*z^=1+C2J?-pa_;V0|f@4byEAf50c|Sv2p$9ISm)tA)3THB?}R$#MF}}Z1pZy>G^L00nvHbCRgG&vmJt1aCsTx+I@1-H zOsuL(UQ2~Zf7K4Y!KNWJd-4E!`)Qk2&vX+xJ9&KU?x`(j@WFdomk_&B30^kZVrwgm zuBxnvDN|1+&()HDS~`*6%Z{*xHi+Jf0p<$LrrteYmfn@*$625lFTg&0m>eIu%!z}-^hC^Ik{V_AafB&rSp4et`@4b#UblJkGdNv)w z6i47`tk?uVjU8LE8%D~1-aO5kw)Hoa_08o*tMmD>txeB&ubpmv6@mi5#lr5{qG=Ud zWP?=4CUb6hL$e)s*jR3Bo!w)!i@`)5{&unjHmfXrX-H!hgs1BX7f5#2vSU4az#3Il zh`a-=f4$aXh45jxTNb8{JS95R9-62^Fo#z=Tga?Yuydk;u^%UotW#cg-t^>5_o#(b zSj!k@rWptXhACT761@5N%;)JySM*- z%-5IW;lwkaAK79wAG~m?*k(XyYRJJW7(3G?Glzwp>M8mV=?%VWTd`Td(jsoIf?PZ? zSK!MWNF3Z;LTEdl!v(A?k3UvqSR!T=TG_EpNL5>OB}Z#$MGsFUpBUoZrgCNqx177X ze*=KT8?7E#?^8-@?3OHJ=r*Tj<2XHS`J7Flu9Gn*8CBW5-b-mE+gTLp0Pf&P#_3Ai z^`ZIx>wqrU3Dq|*Qj`wAVc#L{?d&L+hFO1Cd0C#&SAn?~Wqi*nV)03m$+G-Hw-x}K z%b4bI+4=mp;RJw05EY1>N+gk|&5n!^f7+)4q0i--zQ`j(9~KKtW;cjqo3ti0ZKrev zm*Nn#mR%;#HmR^&T1&!Z*>mVLB}VB)F7$E2GIrNaQ|GdWqp!Ze8+hq?HdSHHM6=#i zF|=L_ljFb2^NQ;trkZ22tOsrIuhp`DM9yxUk@_)}o9kT!_Mo*w=*G5miku=5e&|h1cyOkJTbp8@6>xE(r~@C_8Y}v=j4qK(FwgmUfy$AX7umkX)n02G2ZM zZx!;$YHP-I%ezZ-h}9zNP*akQ-6u*CLe&_gkpL5OEfMPKX1nU;??g6LNCi+ad%TWj zsjqQC1lMeU^`51w+*M|b-SzBKe|5#d$&-;;0RKlRBXCR{%DnH5mR|p?zl&ua-21FI zhAN&{3#WVS(aUad#PfEz^z1ve3u zmo`;Z=nlQ%k)t#Caudeaqj#b|)$I@T?@6_gq*>p@*0Qh*zC^Ee={n=*YR28r?xeOQ z4GQkBt(=X<2!{mlVY|?xe@9ztvPSb%Y123_YQ1xRdb{qTI|p3lcsItLFg`I6+4y*m z{Ou{b#~-q#4q3qxi6UJ3vtAhd7QmzGW4KauNwXx;9_pl_Y!P!WTIP34N%cF_U2ZI=4))y z!}-q&F4tEJYUUqUe=(s-u?;_Tr`hS=)(`;x6Qj0qe%+McdVQJJPj`mf?3yhQKY)ER z5KUTDCLSj;rr0Wj9=qnto83Pan@8jljO&On$g2Ys1=EtFD_B)^%p44%`+RI=4s}9+ z1ArK^jYb%FDn!H$3cxLI{MfyuH`p#8u#QtT8s@t2SV;TIe@Re9eBH_SD-(ZRClU;A zS@pS8Vsg@IUMVG(RiujUe);z3?VBIADoI?dS`$4) zr+UT@i0ysx8O8^`ox~vZTSoqqs+}I6y?^`j@j({}pfQ%eXx zHYj%V_WYNhe-5J=ew5awUQ3qMk#Gwmg8m#OZ~OsMbN%OHpL4 zD)uRSPE?uo{|M4z*V3xKVV`0$FW$fSpMxl-L+MRt(n~Ts1p}u-6_wq3wanj=a-LM| z?CACJe?hgAa0gXJ8wCQq7;>^*VxHl>;Iy)xw;@NTr$@hB9KSt&cM#pW<6Ir%J5Bv&MUW4v2&Bm8ncT%GH>88rBLwB{=PoU zvg<%%x{~U!0FtO0v~FJe;+PZS=Ux35_1^sN07F2$zkgwzDg!P!e1uyx#0g%j6h#tP zWd!@q&MNoeLNg57VUVVAfNv%!JmcY1Nx@hn97K)SAU@A(_V(!P{IKd( zM1O;^Asm!&S~&vy%3Ql+RX~NJo87}94V+Pk2(>XbCHO1E5uSOtq|#)Px||<7D0g)7 z{^Ve;%LpH^0T}O-2BjzmNQ|gLI%}HE8T#H77w32P{MZ;ey1`O3iwm}qSE;#)4!W9qbhPbfF4#)NU;omdi#m^Rr~5`SR3 zW)T?l8s}Bp>$q*BYGg-pzM1BN_0<+pb2KSSc+3ufHeN+%pQD1^&vl`c&CM~(yV&L@ zemfa6ezC>(_S6!Z4!LXkf7-5PNsb#y{u17g518Ya&0!CFqXCEj*}KiIo_ulmP-|JUF5)2MB(4YkCSV1OV5 z84Iw!On~Xu=ZYBp>-Y1szwNhK1Da7nQv9Npuoa>m6B)DG;_*q>A9M2r8Gm19m=sG2 z*=MZG5*+@H4}xf4X8v zqDN|{Fea9p+7PfY%k-{!E`P-jbjxhrFypJ{SSW&7Iv%un@NE6(?_DpCTdh#dbTQPQH4XH53~x%eZ)ToaQ#x%U_;ZWd zPu`=8G3*c#V^P1cf0Q;@EmXFEnMHH>c1S>~=1tRVB?kZ2$EwAM_kShuLi2A3S(AiR zP(|3|JVU5#SFo;F??wH2N8R_y^{v%our1gCIg%I;q=;&!NDU+QFp(-wr)O_?P*<{{ zTx`xRd4mm-j>Q@*SrNF~`Q`avi(gy~*d?fOV1fg@pF&5RUQShL7~^6-7kl}j_uUUK zRf2UcyW(93JwQ>J!GGAQ?An|8yanU)&8<}>HKXia&m9FYCmIVj)nGJu@P*|h{LTGM zO*n)(otdctQ~S{)W$=&-XXw_QuBB&vdeej6+Ni}~=?>}_f#EbjR%9p2Ze*D{#;KT= z=uKfwAJzKq=1}7$0uK)LN$YaNJw_TR5K^K?XmE_uR^to|`IiFu*B6sXz9M94fPdcDJ|`g7oOAH$YrS(e|`lP~5DCU(eq2a!w2gyk!|!UTJ~>%#1p3hRx@GUeC7% z7H_g^u0~Ptno0$UYL%_jCKq=u^@>f+-P_Vavc;xh&vmW7Qyl)kt>^8)4t8V{!Q(@=fc-}fk=C80 zb6Cv4lU{hYg&$L*^e|NX&=L-`TxPW0X^;NA!}LH@6f?Lf`lMe@$|Xh)CZ%4gql%U5 zWLmAAHt93^&sqV#f9J&!ITFNKJ18gNy(1YBT7MR;`Rv;}zajXH2H-VlX20QZGaD>E zCNZ$inAZ+xKjR+v{&~fTHMGbBn6%i&9tXjzxVOmFB)V;{65i1(&c@%Y- zvV;TsyC3e{-t=>~ctpND{o0=7$YEPMnq6$b89oGQi4ccw1KKJ+0X1q?vvvr%-?Uvj z-G5BfIl!sO(`IZj`Y)PTq>8S*V~)T#HE#Dp(SIx|8#(3|M3duvexwqEyZX?-T=vf4 zA{EjA1ag?%!~mE%XpEt?ZmA4^E$(A`qG`?+L&7@7!_GpO6RNLt@Uws>VBn?ZmC5E2 z`t{*|A1=S{mF8}H0qw=cO}%1i6(B(8e19-hh)k<}b%e%Wx3$7djt$6GV?q)sc;kAs zx*(Cqszt9p^5%3R)&J5ITKjsT#W=+aGKeC!bhYPph2O$%k0*Kn052vX;t;?ApFu|> zGK)-O`}sWSx4^qIWZjvVQ7VQ}|8^hZ@H~97^bbRnN>YW|Tye#XJ} zPbY;)8?-D|*IGyD>qHO0;JIGPxG} z?%~C{vK2Xz(lkmiIS2e9hU&4kWk)*Mu6|@hPGKu+W@_)Zk!NoK_=_DBAb%T{h*RD9 z;O)D>{zGn4KL$1tOigM8Q3w19AzH5#D@`ELay5bQU8k+UAr>AMDjgPpd^|^+y9W#^ ze&+g-z*}Xa1P9{S23ea;lVaNyG=&hoek<**o`_?rBIToX?xK3}-m|Y52xv zm~%(-@9AUnc~kY#ICf4T2!D`BJ){yqXd;ca+SPshy8FN^3c(M=pocFKW^~O1dLet^ zKi5&_>-NgBy<_v%S%gI?N1gQaLM6tF4=JCX{=AR8x0xv3De9=d7!`RtSU@3U5$tQF zddWv3@8u7hu&#lw`UF`{z?->y=Ide%z0_7FB7eN?y_}h|t7d{w^ndKkteiPD(HhU= zuevxC`3|h*^7=FG?(cI5Ku@E&6HVGslu?+1Yq6M8wYz>bYwkzxgk3)8uE<@bX>ch4 zc#U3U+IW5x^Bv{hU)mmFWfPVe1C?+NBu-OC^;8!ZRE=^S54`l>UiL0Pq@Wf}iVLx) z+7!S)u4|7hZh!(m^nb*651;qo=9FOpfof}I>KqhO)!{;%+VosV{yP}CT(;+PPrRF7)!ZEy;jEY@>07pTu0PXG0Dzb}Nm z;m}3=bi5frO+=E`fRq&hv5+CX)N+0ie_XTF;1j8Qu{tx| zJm_eNF2?|l;Jjighae&z*jAUC$>*0_#}?f_!jjoSQQpD|eIU_aII}o`1tN5myQ-j`yX6l10_K)hgPg z_+$ZiD94jR-fI}422(`t!}3jYg_L*MeK2@JJe(QW9nANfz;hHJYDXW`>TB+u7-50N zoB|X3EPP_D8~k?wr}{YEYW>`Dlwh$xjYWV6mSq(=w7@ulI_V)l(Q}&;ZwSejvQ4JAR%=b@kb-Bvfn0yMydf+Fo0ml?x2&j zXTZCbAq6jdF7xdscTRYl^l;ILissGHM-Q~p6MvX(^mSRWH=okgOcz2@3Es_gl(6nw zm_TJLsmqYNj~QkUr5knQop{KCqs5cx3 z41W%=>gWKusYVy8otDOD*rt7WSuuzkP6B`|DJM6T7mQOWsDy&1+&uJ}k`^JbpA6|&K1m-=hANi;Y+ zd3!nmP4H<;rz~^?ac0X{wehATzoqtzmg)($JMKid7~@xO+V&5$Oek1{Qo8{u#WGlPxCWs58K z(+%x`R3R_Y0@849%H}bfY5$0au75e5yRb3zv4?L7?&u?vit8vo;BE#q&J>?Xm)ShG zY*!Sn{JJDEXR~M zZA8|1=9pK>?3ebme;P#Xg-&_okSt|oOR(S$06&$+W9O%*zo!&z?N68fKf68q-hg38 zYJb<#($w6^9%x-{vD(AZtAG5D=$lh7j;0?d*LDUv5a72M-+*-|=#!?nv=n|DVU-)A zS6WNBNWCjyv6+C0nyuZ0UJ4K5R?ukosN6YTu3>S-M8T*Q0Il)%v(-Am{Fk}xEs5*B ze%%~M!E^be;U`;8i&ZQ<6H5hYiXaxUZ2Nr+{=n#4*<^|dje?Uk2!F*yNAr>Lj(!;G zdMvBg!^;=M--1TLb40!Y`MS!G42F~6H1_ixAnA)*6u zD|PUUu%tLLlG>bQb${3N`m9fzQLV2rdTgS~p}ffiEk1S!#LL97LfJ^vc)Oc%N2L^u z3q9GC%`r76mQAmcs+HyO)#K~aXMp?7z`ob1z&bkPm>Nn1mupt7aS~%R=dKCuejK5Z zCP|XFR@JDfM3GUtNt$au%(f|8QgbYAd5llr-|hP#pR5K@bAJVUa+agMpvnfQ4_uwP z&S!Ba{`7!dZ-4#PRn*`Wh1y_JluSRRZUnTw_*uZF*F$uO{P6bIZ@um`a!UQsJ48vI zQwT}2H`daWZb>1J*~s178X(GSkGU={)mQuqC&!qi^WML+Rr@R4^|jq^H-d_peiT6L z6nHabN~|+h{(s{^V0Gcx@bA~VCw>0(@7H#J_y=sA$6#4wJx>|n$-o}g^^`aP<>SAvl!$3hyi7=djhf6+`V+ckXr5K%Y%NJkH74li{uRMRJ9{H16f7~Mt_0wA8K*|fFvy!*Ymz+NJ8B= zF^wqJu*a9EzG+bx3|Y-8YU`Z<(AU=Wr zQgJQKR_f{UdA{L6@r=2Zpnix!-Ls)ZXEPOJW@gelT|s)k|De`!E{=XNCZ|XgT{>u> z1b+a_Dl6@h`|Sty!&g*V%Vs7?1r;6jr!_(O9o(s>8R1PK>-mn|OxyXWhRJ(LpQ>@F z?lJaR20%?j1v2)WXy4`<*i4#MOtK-)5Uo|yV;sR|XM5@Onw{MC9aE{)*#P;Z7i#OA zubs(KXx#>}=Wb*F0S7(PS#KyLX(f#*-G5lDG-B9jf$mNT%I&s+K}!JRbW$2HTqF-h z!Lh@8rRD6k$hS^4%h8t&RDpFy3qPbOC&`WiW+pbC`z2l;0GGcVCB0mB*P7=oJjE9s z-hmJJ2zgev2!X&vEvGB|oA%v}*P0~&WqGzHN(^8SR%^1L#uop$eBRzMzO;wWx_>Qn zLjS8kElj|w5O_QbS{4&Ugh%q{(_;tDAS*pYIQGu&=%6r7H?D*XXju)Q)yQDxEuc!D zbCt{2$M&S3e!YA7vPBzwYha(bJ6A_)Na494t5uy9;QG8AD>>maR@m0VX5`8a(0E@5D1eU^zZoPuf)4lw727h#8gZSkc ze!ls1^Mu7Y?-kF>Uas2GHU7Nzx4Yt1=Uv0$9tLX8422B)$H7n~n-iPEZE@ZI*ze|RYWeMk zwe;mK&p9STYG=R8r1G##gkX7(Rt4rl=lK%a9>Sk_i$mg_zH!qSRWf^Fd9fhOsuKBAD4d2Sj%EurhM$Ujn!b2A_T^qQN1rfekjm06NQH z6Q5X}0tCN+59**K&$m@SeXiHQ;w51=v(*c;oLd6!EZ#ea`n6V|y^$rwLxME|wY_@+|h z)5UGOfy7{kW7RCZk*Wa`+uH{2Z>QV4FX+GdyL0f{xaMQ;xA!t zmsYj#Z5BKUd>L|vlfLV2{FV<)TVZ2M#ycL zOsaj+Y~46remxxiyWF+gzM}eZ(aSYk=FO{HF19{n>Ok!EYzAmwjxE&yGt@_Be)H^G zwwq78KIRE-pqq=_we!q{fV~}Xw0gKyTy@hqG=Cl*`=)5O8L+4VYXfVmoUj3P@Bt>k zC!fVJ2V~07&J6TL50FNpJkxOUvDnryrBa97aF9~q#M7O-S^t4|=F;;v*5j}B_Q#`1 zwEXnw)%e@B>GS$7WP_GEh^E_VXxtw0B47CF*lWNLUTHHPej zWq(51_=r(K#{1g7C7-^zKinpZhM-`yqnOYy%Zpb7RG0?*BmK9@myyEwPLK!W| zq$$JuMm>N7<=#dDKKowJK>vCbD*V1Or82=rYsn)A==w4WDThn*DsESSDg{c;e1El( z%7|=QEWz{~Fvz0pJnw;f{ui5pG%Qv_(y>eGU_9AFgVkKBL=yJtN8Q=~;T57$cqxhA zf?y?ZN9~4lshOyX4Xf#57tY)Yt|2j5mM!oYOApe)D0mGcTg_@AflG}61bv2__rgML zCO~Co2+hdSF~cW4mDLw?I66Z0N`GbVhV~is9E;L9mGTlDtndi)RJ@(-hK`Mpir%Tt z)*3aYf;q%)ouG7#KJYR%vJ7Ck^mCflt@e&5gqB?os`I76EsJ5xp?S;|G0%U`O|<5h zo4ebayFMj0FTa1E+I+hc-IQ&HdYtX+I$elXtW0Iu=BG%VDylvC-LC-?V}CI*8<=&{ zGLyM7teRCkd+T+|!g+@aA!8h-wgjgHN37wT!eAU(cg*aHW6EwGc+0;W{yEPHNshs0dLl_ zWk0fMu>LCW)`j_S|7mSq^4FV|<@0?OKCY4A;Y9FK@7C)XIJnbm9^$JcUR(7aLY!w3t7p!y;Wq~Vf{@MbV~ z!de5-%R;fn0X;WGB@VTrup&Sqr{3a9*vMQrd^iXx6*ClEg^Q|^G^+tSJEwEk!TQ+1 zIehkP&}waM6`!>+veZC}&&xZm@BVFhUscL**+tj0FhoeCP-tc`N#fK)1IZ+>7Fi(~8(n$AmSQfVd>xWV3C7Mnj9YHCfVAUw9y!#P%ZbQC7Z$ZW3 z9h@d-v5s{(Od{4z32Y`lU8!H^?r(p1`rVb&=%@SkX?+?kSAT4sMqh5np@m?sOfrWq zccVo+6bWTh%)PN@YTS2*F}y)#F>u!_X0EW9FW9Qpc#JU&6s0TE9VPy8Icg2Lc9ug) z0vQ6gR$=t8YI29&*KvB1DnISnczgp|*fKF$hdGRQRZiG>PwVbocRJ*0Xu-HG+fr`N z!!j9?RaQH_41bW>X?k=Y23)C;dDFeqxpV<|V?(6`JA^OnjBTz%TZhC>bfRsTM_zB$ zUgu#4X0zd8QspVC3m{#E;odg8lAtKo#L!*;Wp6Oo+n0uvWif8H%d+^`EZ#XkRvDhFixYN+Z zDq-RKd7U95Up3efY^J9KS%r_CV_=n5n3q}@KcVK09tq34(lqUdaVKjYQxlmZtTtW4!Xcdv#&s8ArhCR z)FeyIXMfUI?ke>P_Qz`5E4v36gU4;zEblyn zO})iZFbP}e!$d0#|5U6e3_hIJ4&Cl=w;j5@_Yq7gLmLqAlw2E3>M(|p2F`^V=D{lS zg?QDPaJ~lkm_Gb~bH%@)ok16&ntL_#@<4x^r%6L%>|m4)k|;$+m~`VD1WE!2kSW!f z^nZEZvd{9l$>A_=Zl7L72)x>B;U!}}g#*Wv^;d5;g7r48w6rXckw70P0e$ut!0kW_w%`ezx)$NwuK8a*Ss;&f8MJDZrhi7nQY}+OC(!xPLqh z?d74?Klk=8{Cvta`rt;h?FoxVl+PJb3!1)qm*?_*A3Hfl>_+*aLblE(Rj_*-K`F$qB8}9_xVM^JeG`mLzV*(UPg&L)csovP>7_+I!?Z%|z33Q0f*4B8s z$BdT1Cae&JIn_~)L#R&PxQyGzB>NqkYp25v_oc;|4C~Y)i_MDlc{JUJf>52VrO|f8 z{+^)XQ`Q^?ThBzkr_CubgMX4u;Pfa{rgX+`TmsL6?@kS;6We8FR`RLhq0U06l2`jG z?x|@odwJ#9Usy$Pa;;&D_8*ifBWP8M?6B*Nn>s0q(fE>e?^zs)`i8q zyUgo?E!kOTBAgFqpXGQu$IxngMY7qZwY>$4W&Y4 z!NXuQ=v&V@DkjdX)}p<6eBvWqgFg78Bd~K>POM^?zycr~5}RDj1@OMwRa0A&W0SaS zy`%_ZS0Vfrv!e~uv{%9zpFZTvXYbh7lU==ehylgVa^{SPbu4(ky0!cfpWZZ>xF%XV z2d;o+P)8M(&9NYwD}S9}i2o7ao^b%Z!tR7#SjXPM=5zB0bVB01WA6fg^~X1rH9SHr z4MNEoQ#EucjD6KTSZ}8vUv3{iqew#B~AJiHeN zG07IU&Gi~(u(xaT26V32{H`|Mcg}vw*zvK!C481)Re~^~H1{2IJ!&)N0nV505S*wK zFO5z90_HT_Y=6Z(*BJKFf~#>J=e#pQWrCh83%OvTgG4H=O$NJ>ZrJ7!K1NO1&14UA zE3B5n%Cfq3C#hkTC8v5|X)dRYtQJc?u10w-Cw;r>-Ef}7>-L-_o!*zn!z`u8|A)1D z#G)OKFFu$&-te~K*iiWw&?Ju>D=i zI##^NGJk#bhjO-r(H`hz8|x@K&=(Q|Y#L@_N zh)SyZ6!4S59G&@z_4!qQ=~L)2D%;a1II>m-ykPa^z-`REadg+`My^^ zL8(9=P%I%BQ({!Dda>O%HrQyZy-eic;lBRQmH5!BV`v?FWN1pWw&kpAXZB=cYVn6F z$dgYnv>KuZtSsz(R=I`YbhgHsk;7_pC{XxyCAaC&^5$@0iSqvGX?kdR^Yx1N4=rEa zZhzs*uJ;mZcDC9faC3uuuuB+sUFnJR_<4Kr!4uG?K$8Q{Ev;6OZNA}1C2%h^x-f6x z{@ow`^^gDlhr@sU@lW6X`CtC+@ZI;gWWa8FVWjB~RWbkgebM*2iiub*BcJZVI*FVpOx6q8X4_)3rY$x8rw32l z^X9){)s&0r1#Y`*Q+0DqcW))KN`H~>GSyEzf>XX?vG;U_saraaG`t~@nM2Ze^x%(r zkUie?yY?+6WmhlXZ*Yc5IJs4*K`S1k%BpOs8*7!)?WnBmE4bTj)gRwrvC)<93ZyTC zb|}1z4&9|5`f`wE&SSB0&IMo*SjhxiLkJ+*_*9{)lrV-(C4E%u=oQ$@9Do1E3lNKA ziKAp3d&miEt%vL?gMDD=Y@H0{3*tXrfT*30!TDIEu~L6wmlpO3wgS0xypqo%{_`c% zh3T={4QN-D2D{gS2Vp%33k1cZ21sWS|NfG9Y|uii~cIL(Bm0fme#} zyyXAWc5S{B$0C9uDu9H-Cv6B$J#GRwL=?wl-kww>zRnqZz52-Bl&c8U_}t zLS>UhW=1BN5&u)Z-L0yBzTc2uWgU@*WXmoM1vi(Hc4{QsZL$}>=6^r;474Khs9aTL zhy19WC2a(u=1oIpBIhl#pNaq9V_3KB872(iES9kGoeDIz4&d5o#|6XJFubzH{LZk2 z)3$nH_SDHVosgUu(~UOS+vF~+-#vaP3+XFtqss@sKq(&XFB!B7L`vr@C?eVpG=wMAnLO>3uIuMt6Du=CV1-S0K#dQeky;p#} zU^DATt_I}M)y0HZR=P>8=L;)nLmTN&lLL;Otu#7HV-2hO#Osn8+lCiO^X1*L!zhWC zniF2$Vbgxa+Hs@CR@}2hbC)E~Gu>`{27Xh{S&HmpMSn@FdMLAEqOdfKwzqV6%ZnuBGDBo*(wj7F7cDn$4?&2c_3My$`SqZ_V= zlJH#-Ra6jU1%IRt(9=@qev4S6KE>kv&?1iXE8dY!Gq+gb>8BN-{T2~ zL7`6smsUb3AAet0Yzsx zc?U2=m48KiW>P+e%Qc>V?lCIJ$vgsxbIDOK7HA$x3mjq`01R_I?f39{*GwaYu(>E7 z3W8^i86E=bxtQwp81t^w_XvBB?SxMpg^+>j-NV_65EBz(PbjWkUeN!$E88EyeiDad zA{A%DXswV&pCqGcF8uWBq)q|tb@kahp>oxs-hVwF4li;wlM?OsC;8y=+=?pgiFYsE z&fe5Sby_35?46Ogm{_PF9;};RJKn-LJTYCr(+(%Z9_Gj;0nF4U-nfN$e_pA*|FT-< z`TP%%*0E<}!msF9X7E@Fh%uNv0FA@ENWJZb`)T7$-YBcBvub2t9JwWr5DefE;Zvui zU4I)dY@9aU$q!m%P?V!V0)UCY7odiz7oLAjI|??ba7>IlGZL~qae4$ybZUVbf`9|q z*GcB}-MgzTC)THJljV}?1HERLqw2BW73-VU3V=Fo2QQ8^qApD@~ZDD@;BO0JpN=O6A=}?`Q(4reXQjN!?F}6skPqz<>}4-{)81`EFFMtbfCsi)0AvS^o2w42z70kDY)J2@lTuY$$$9>T-kk# zte1@vMrg>TYVSyFE@m&=eg5g+QA`S%TJ1g)TXq+7tHxPFG21j}^!+Tae~kfOuU-N# zPj6lVC#*1Yt`Y=pP>-VF5+zcYhVqER1Y^ULYiIKkIBgyqZq$-Jk{q8Ac8izft53?O z?4#Mo6}jVg#6V$gYfDD_$A2$N%sUo^v0BkAP4!*6-Zzn53;xEcBDuey2qHg4~~tzP`E&u?D- zCoK_ps_1m5)P^)?Q&6e6Sbfwkx#Id10&U&^vmYSTgwjJ*Qd}CXbAKY4T@Ji49*lf$ z3(nbJ;<_O2kM3#{L}o)Vj(}_*zpSb=5*eSh2_7E*xVw2gzW`pIS^L#rU%8w|*OW@H zL9F-!#8H)Tr6AX>quMzsw)E@AE!CW3!=spPo6;=kJ7m^{%}2dypl-ODDaJT8;GI*u z^c1Y#WiL-}-eV`MEPpixV7nGd&Eg#r$%y10sYddlk_7$pcGzk2PP^u_)Tnxtu7P(V zWgG*0>aoRtLuPsUcbLkmEN^|qTotv%LUx@@Q#w(A`1kFuXTa2R#nK;tzxQnb@r(e>>r#;g+-V~%a;l!x`4NPp+GjZtMO@Y$oAxoQw& z{!W{%YVjc?Cs;57oYa+#B{@wY*E2fd+lruXOj={8SWq#$re(GX8l>on8krhd+Vnu~ z{de4I7hAMaXMWV6i^@%VtWJr+!)tXfQ!w@cRyWwczxgt|!~gQvi`VyG-?H2ym4P8B zY%hwcFAYB=3xAao8}R&`CuA-8@3BRffF5#6Ci}p%)WJ&zs%B&|L(PlDYb(`921^^f z(?rDLhig%#u5$)THKT<#7YF-?)~mFWj|{?5<`}YIF?Ma5aHP0{HCKQd{7J5zMo!prcm-SBEKvM)8305xq4CArGFdFy4Rel<#6Z+OwpJJycc zWRyN?@PFPVm~QIF$*_+sk{~o9d+^o?Mp#Tid~n4N-bBpvGE%#}Td!mFW{AD{RM}E0 zS*u>CvKXj=k~1%oO^auE&B~VIBa_Gs*?yF*_tiM#e6NnZ+#xoqCr@YfofqF`G;bx?(C-k|rs`y_z#xXdg0Kbx=ke_G0Jtn12d~4$NxF2SXmFX(II3hpe*xZWlrX z(aRYaxkt50$juGgg)RcseJgi}t`$2mlEX`5u{P6dGiB(;Gr5oU=pGpiPUl`i@U>8( z2+%jepm8&gh)eXt`eBIrC;_ zQ-7;P+^9xds~Ymo#JR=i#Gb`mpR@UNv#J68IHUltTK37s41eI8D!lwm(k9^<$64B< z{{Q=yZ3rV342*hVn%V=2eM0z0OE&53_iW$xt)W8MaA4$?l9WPjQ+!kHRb85u<{b3* zU7lKBP3mxDcO*YDH={Ky5qV^m@VZ?intw)D+Y}*R-5?cw=f)`bQ{ z!dyDEF_cvWqYu2{#PaR@&gBi#(EVnsqbdnyFU#l&!6m|CtR?lN)S2t7S2xcb@jjn# z)EF!UXC!5CVj`F+^P@DL3yFb@{{Y6-sZJb%#y<3^ZEi?!#+!{aR+(#@Cae%PNcB>kC7Y5W5T5#eipGAx3FF&pTj&;g zC;$&bXHz;%lbh}gY5KoDFvBgyl&PTZZ0?v>0GQ!S=FL`{kbFWry z(@I0aL8&!^9AhBBBFp(rbDY?WP8C3r9uQ)&wt`YDrVzO4DdXJPIbK=)dU&H%_rCh| za6zZ;?OTX*W3!`BZ%?oDs(pw(OW zUxnGz*dOy+O~3iF4VAo_4B2B$uI21UOjs-cokdv10PHMd+Lr$PwVR^YtId|0)A%2i zX+-x$c>@vC2v3W%pEEk0767_zuo?h9CcOZC$_ISOpahxrq6RK`N`Gs8cYk}gZ-^Ef zpjuZQYxtqS;UG=1p*Eg~DmCc}dwBz5*cR>aH+Jd0O_9;8ffr{_&jM?aq$QW<8}Qu@ z*=AIdgxF$bzppZg+s2kreIw_osbN~O`RhYg(*VRoaLl1MKrZ9Fc8cxJsSom=Uby7? zfjwheC6jN;Q7Ij@B7d`G*Vwd%0$Oveb>?XwaSstO%=_+me1U*DXt^~BrF8>uF$KBp z_U7T~TmO)4_#ts&Wa2+pN=+u~;mLyLdiQfK(Qx0M55?RqJQl|T%LoS58_ z?TDCs)e7}=)HHlz%t)ISNQPk__KzD$TP0-&i!6ryyTecw8Gl(#7CvA z?Li~{Wv-g}S0MPgqU!4P@ZO>jn+u(pa?~E~K`d31r0U^@onEzkK0JKAyMjs_{%X`vGX zu(h~5tKnv}j(^#9kv2Vae?DB_-hA0(QHzI*u@;l+N+4mg1yoe*-%j4i6b3vWkmUup z$E2sM=8_3uex1@3duS!A0Y9#jns&%MAD*7q3AMeq*pjGGDtSDWq41?J?+SrRfTWY1 zSv<(9;@W$2Z19i6QkAJ$WvjTNV?y#Ab7SdtdSzwTntvG>mrwX&_=uu%$CgO+SEeCI z{UTI-WNl@K?a_)sZtQH!h`iYs-%=pYH}Jot=tZUghuux|6tR}p!89RuLLB^`qrNWdeqCMvRq zoTHw@;D5T|KGR#15xZMd2i$kO8!5mKJtu=b0AvFMH$}m6>N?N5>1&6>QVKeAF%r-G zcx1&SzIh@2Nbusb*IEa%&DB_?25M7j?6_ZwoJV&C5I#3d{Mxw?M3pSRcGnIDg=SW0hR$jo&3<|OI}TwQ_- zl~sDl#aav8F{YvZ>jtT=Bcs5XYQ>Nk;0FZ7f zB5()nrnc~O{buvZD@U%6z>&8WSqMfltrxKdJ3sN0{&327t=>kRbdY_oTX` zEKi{tpHK}Px#KijTz#?ky}@L&LP7=Cs7&?9wlSA}VEV+55$*Kq;`3Gi^M7zU-??a0 znIxkFo=Xm$S0s}fr5WBXCajufbX%kXep)la3{F=vn8KuP6p;jS0CY_H7oDqPd6v8D z{=Df*{j1H`u_$BXRo4(|W)O(RJD^5W2p~TvXMHtSM;IgP9GXjpitfEq*DVEV51YAK zZ`+vLy&B|Q1Jjg+uf(#HqJKK}8K9}dUUx&CP3jKY_(Ogg<-O>F*s4gHy0E{ITB}s; zq&9?&=_v1RcWn(spoL)$QKDy3Ln=gxP{}|4D)@48gk|jhTISaY zzH2D%o>`r&)4l(fw|^_yY9v{*zvT0amr`(mtgin1zBd>I1ujBC ziCRFGkYpA6GQnmV+oxJqf7A6<<)RP8ZXMk*SahrlNGE`yj#2AuQqV(J z!|U>MLbs1FuQOohvLBgAOG*`2yw8O-$*P+N+P`uBm+cfMcz-ZEG`wTQ=3tzh;Z3o} zTEYgM1JiLQ_rLAvoHtoKlKh}s6IL;;pc0G(kC@K}$T}}T`7F0x*16#%IH$~LVapVG z082o$zs)kd-P`Qh6S4;Xs)gG7`0V{d`)&8ID)!*Ly~UGi3t$jo;lbHhB%p#8TTHEz zGf|&-&^y_*ZH8scyBmMbFs?W7RvMIFGv_F=-tf6tvg0p)^ClYsbF>U-OiRjt0RT!$ zbvEGCUQaDArM6#pcXE8#U7B9_BAjFnhJU%5X1Ga(h;x5)FAPgn6qywG`N2CuEzcqCeuR)gzy!+L+XfD+Hf2|kbVR$tB< z=hd*SL-ZvXxLUZJk_7a5L_N=xSsLl^UrU{XO;4>{hoA+`V`=qlS^%+a-FZhCGav0Q zi4_9+(c&;!deyAAt~Faf*c4lg^AMB$!loO8nlH>=J(=h1ye~Wv%`Sxse_%~%T7g#= zP>Sg$ev-Wusn~xi+ZfO?hKRE)uu(06we`ki2zG6#XX*Tx1Y91fTy|ZZ{A0up=k9 zLy=$y3AwE$m%x(&Jxn=MyL|WS_!Yqz+CH$B3_}fvW|ovQAq=;4t)16|{)$XB8VsaO zHTo`1F*?mTFARG0WC`cy7T<+0-@KV@0AY=R08d#kXOHcnHse`|s=_M?DXKH4 zt;;h%O5Zfk+Jos@AcB-zuNY#*THr}k@7m8T*RzM(3VdLgnKh4{B&=?(#9)<4sDzq; z1=CZ||M~Uvb|*aB-vp%%tH(lOf*4&HmZ*RXQm=oQ>z<~=yg*vU48&4k+P3y8fFM23MVCXPq1?Q*lIpgOQECX7-JC0)Ux5(AfJ(DvYNZ$Vu+c&f z#q)&9GmQ*ls(?b&0Kj$4Y71w1RwiHEDmaa90Gqv#AY#4+2q?f{r5u+NzxiG0VRv(P z`&)lGE>%G{iB1C?IH#q929K#K{Dq6rx6JIzd8^w;_OiPxeZT3%IHb-}@6Eaj`ro{$ z2v*qWn~is6iuRrb3w~_mrGr>nyAG=is#LmlX;ff7>vaEA?)}o6ZP;FuO3gAXj(KW0!Jac0c6+Z{^w}<_dC$0)K=FQFS=glu@zmq@6I(dIM z_SX`%Z{v^ona7Vje&Xc==PtL_h+9sbM)Qi%U?l;Kxlu6)hV2Ht&9B;cZ>v7PQV9Uf zn3)Ib3hyyg0s3^NV7CPrRXe>x*)|bRi{S&UW*3Qnoq!dWiXVMDy)+{{fcnVWP2|P5 z&rHAzv8RNme^!9bxXXBTLj88e*Q|f`nF?N~Dx*hicuyL|K4uImN&tkhPH#HyE(8b@ z@$i=xp3D@(BNMP!h=m`kY-^-z|2t~6%|x4&Fae6Kq(ui;S)Y%0c4F8|V@!iES7m&k z7adw>yq3v~$#*3?40TQ{`k}^1Zdw`edE&pWf$yp|=YnM_b_UV3&S5ZA02hB~V}9Xu z|4<(OhG{Rt=I~L0&VDZzN z(aYLaoa6-?3;2VNSTH=K$lZT-)tmH~hX$FN-uzy6)BGaOvXNwR0G38rQH0q6qe&A$ z{9x-8+rJseizI?9VsDP3vxVpmhZBnpWq>4SseN7zZ?i;6In@|3Wuq15kTopN5P3JM z?3nYH?Gi!sa{_Ko+IOc_)3Jaxc@U=p1@u(nMIE_cO=6M^q7X2i(XfB5nbfLdu)*?x zejfe3QCwlgovv%@CIipKUQ;t5;)bnW?K~Up@igi8%V@%BCk8_@vQ(sTu;>-EziS>s zgC*v91GlH>t}P+~Pjx7{>g2?+p)5c{PaR&2y#~XS<;$NBOgCg9hMPYwI@>s{APauW znt&A~m>I)7s|4rvAcB9iL34KURGDUr&XHm-;N-!Xzkmb{z8#9s6TD{OT74lD^0!2DELk*iZ3XyWKD$E9sD1 zit`#c?dJGU_Qy>!dCO}?SH|*oFypI29E`Kv%*KxPJ9zVq-brKs-NU24SK#moF$Y!VK+&f&wL%pE@exWeH- ze#a92pL~X|g@=%q`f#F5OuR}Sj5nD&{L8G`i@4g@j+c23y7lV8RVw_k0V#)1c5{G! zAw77JXYp)p$#;KjR!eh0qc&8wbPf?HXPVV{A-;H#HwEOFez9F@$R5F5rKhU3=Pj%!SQ{yVSd>=IURqt|@K3v=vvaZ-cmh|j5lw&(1eoKq1|8;Y zX+c{yJ!5#xKxV(>Tm*YxVT4@;M9pH%JT(U5_Q#82yiPk(HG}ztu?dDrRi&ol0vrOY zPj&O&n)`qI&7(S+X1yQFMzDbYR*C|`@Ks7zsZ6~PByL|ls+tll2yltTG}cs2B{-J` zt6-Zx1*t!_ub!q{HWfH6WEHVB>nM0ahFVZk_68?6xH&Xyw@L{J5m)^M`_?3ADNft~oNcy}@02hF-Y}0%WEa5jVFN-Qs^J z8+1p9!ah{Ia;OHj9*(*trJ8tOrq_IzucUXPNky_3pgwF?z_41q7j7e?4FJ*7wN~H;3pjuLr#-l~_vWEGw>R^WS9*A?FMWtDGx22OUF`HodpJeD%DD%(_Tl zN}OTdV%M0q;ygIDM9kYf5cID@da>NBm&)p}ezvk%kM!0ZJscorpF>R0lUaXy&nHWT z@4vrg*WSLn*&U$;%NgD81iuIVb=xn2Zpk}7_xumvjkS__W3r+ z#jr>M3oHT%wNRE20=5)(g~z3*5@u9wsY7;3;kmh&TGmy_->6*fTJdby2w;SY%}5BN zv-(G9zMm2i-zj%r{hRA7%P)6vyV=# z&~7*O$8tDaQ_CQ^XHYJ0>KIHzs--qBjHjqa5Hzj${Ah`g#iM&og;Ehv9^|#nG$gb;}Yl>vKI9 z&F;9b_xHbDSH*v&mR-%=0(#?ZNwL6lYS9I0tqG&KsfsYhVuHm1{4MR1jAXo3I^WL<;L80=J8|N$6QCMwr8KQ z{WT|=MT-k_>@jQr%!wuU@vFz-l|RLQzfa2MQ`jO@O2SCLV%QTiM<&G^CqUpa&4;jq6h3g8*QN+;pTb1Sz3FKx5d(rT))Nw=~bk6_36V0bR|i8cKB@Err$ScVP&A{5Lu zsOf*`COOlAwv%>#jyDMu4ReWh#Mp!1f+a&yn^U!~LZ1Rn1R~ zdZY%FZM~!vVv2of|Hf24ncK(L!+Cu(Uh&iB09pX_YI=f(v3Qst5NrLa8q53BFkS(C z!+bmVJz+bkAR3d-s}yIf&N5mqFqEIq_o9F4H8(f&FT4f#&La#D(=!A+$re~2@9f;s zJPzUY=NM42v#I5f5IbI}PG?nhT*rlj`GKPlg560NeZMOypfa*j=PtITKi=i7WXFJWMC zyiuWq#5!WS7eHQsA;6$McZqKe(Det@dHm52JGupVt*jK8Q{(wXY3z5rZa}YZj--iI zDN5@(U|kL|;$WOWDP)O1T3M(4U;iA^ z;I+XV`Q%NlITt4;01uU5SvFwpfL@oCWoJzlqnfzUMkqenI6!$STvPUH&dOet`-Y)p zm(h_1cv$ka_b3>|TxuTp1ij~6N%`?}2kduUM~?06!4Fw0Di0NHH(ZDbc7lTgO z_?kx2N&zM*r?Q^=o413xGMs6v_qLYTGO*h{Xf`i20>_gWk*HWr@ce&JJ~d#yHpMZ3 zYDp!YL>h@Xx8Xayp>_(UQm?p2T9oBWS3N-mz(_V*FdM}l>H7b9ySC*xZY29h8@MJC zZ~F!F3k(36kVLge4k^p_eEpm(X=Kl?3hcHFIvjSWSz?{WCG#90FL)TsR8?Dwi>sRN z;ND;;*?N#+{l(0LC76FgDDXE#3Z^N#2%Guup*%X6>=Y9eFvBj9SkR#cSaNjEX~t)7PC*hylsmwgW6tI|u|k z4gBB`_(rSFn4_zCPFXOXqe$Xz#siPthnEthS+#phoUtxEHP$@3(ktlpFFtF1H&P9u zHf``SAlz!aY_v8&)XuM!EaCUSxSdO6XOSH2E&c>tyM$3;b(}EJrm$kP-w^I~(9Uc0 z(k)X-iR|3Dy5N7c+9{vvpZ&cf&N@ALa#9zK36cDnsssz9E$0PV~In^EITzNj^S znP3uqL2?d!*3{;%Jw55>Q@$c(QTg6_SoTU$dLGFIaS(s0P56rYuJ3SnS{;mDFJz&k zAx7(DjuAd4M*D-bKROB>|u^IWVV4Q9QOA;odZp#lB~jH zlsx7LK2YhF^wU_*sp2m{Rj8m1?Omb_joEZN0%X;A`@^2K>}M>ecP<{wf`F z;I1^H8yybYv&2RzVgQHL{GaFBIYtt6V7Tn=^)Mll_XTtP`xDYF% zR!aMKm80_U&b2qZwSNk}mlOoHTRnsUw)``O6e3xWZH?G;q3 zRqMIo!e~8B%{>)SrNuSI8%1o*LZa3s12TSCg=SA$sepJ5NsDm){|w)=LEJouJK?4~8!W=)U8gibE|kOFQ=` z)?!Q54shNArmLeV^n6U!N=qos7`wGTE4?`<=QG|PA3uI-&mZ678a3tMyahx#tM`8g z1>h|7yT&F?nHKlw?^baLSEnyq6;%A*^W^1k4_uYI{OwsQY@vyTN7jsQ3G=EhG7W-> z?J2u_TB5+30pB*-f4nninXr@?SQwpNthrEwQcd00F(#iE)40AU>yKXRLG|psMy$(U z&)v7#J@!MjN_fnt)v9hO%=)AEHu!)2)IsPtCt+F-B&Te+1eJjM9{*gbzuvdVcb zW9g^K0U#HF`(N&!L7g9;!T)}FdH>;IURAc@Hgw(E;U#v%JBcuK>bdotz3Z))n9k3r zZP?nEozNP`$QY%HC!EyevYoRzFe(kz*K@W4Xiv{@vG4BML%aO`uj?GcZQ$5PKP*+Q zI%-zQ-uf$nHdhen@~67MKLURTJN9Azey2|#fbs8#R;?^Nh>5vUs5OBLQx;bt!s{&Q z-0MH~mq&9{@QRkGD^@o0?s($w2Ps0`cM%Z#l461SC^1iXoHW>D##iGf{oUus$IFY! zqW2r1;S=lF3@T4a#Mc~^%}rV3(oW|`1c3J8<<5#3;?dbM@;o7|8ge&c>fY7Ha?9dU3lAs$+Mg1f`JgKRGCh>ci(gm1SJ^ZM!O z(y#^}t~_eFarkl{Z0#vq^aYG>j@+H=5%#aQnHH&hU+#{k#%~2QrS58=08|2tGAXM9 zC_`A5@u#MmKLYxHA^v~;=(OexL2lIp#hMS*Ai>%jgv;Cs)zFgN3^1pDA zH1DjjMvmZ&rFqy7*Da?@a)c2%rEu~Dn|AZ-WE9R+L5Wq5#_o#Y7{S_?%#p&ff$U$U z6P6=@x8x8yfg-cF9y7LsTF_q3+2T(#h2}EUmUZsJ-mnVFwX1&&b*W}8;?7HA{}c(R z8Lyxo9K^GBc>5xr1JPhB7J1&e;Aj22x9CU;$6H2p$@xqB_!DN@Ha$0u$XMLH3QH!sX z2V46DtB&oNdIW!W@|Fa3I>vw9O;v$O|5`y>hxfHk2Fv!jbeIhp%Np5#k70+lv}hCy zSBK@q3|p=K7BlA_5}j|Oztg!mhI+@G^VB36OD^^Vu4T<3GtKjQ!9VRcD)(7MF%5;_ zUqRa$L@Go8s4%3bFJ8KYYsK!%XE~L)_}N0*{`&a*u|0p=FMavXH%UVR&EmWDqwUzO zsfAVwG1zs<{?zo}-HDFN%ai^n=;W1e(k>Us{R6@GU;p8cLX=;B{6F~V;;a1Wci2K8 zaQ-6f#}WR4uK`s68<&fZBj^4jnf|}-nrXl7JuS@1)(%8#tO2aSmEh9I@ZXY#UsSUC z$3N~Kez|{K#T0IYRKZWNN30U5M!V@9cJej7n-&hJtI2{wBJqR0|B`abX^Oef?~ z8M$Dp+#vD?SL1lv6P4!}=G^7sma;}69L|5e!+=z%^OhAeX zoLZ5Nhl9jn!C*bXv6XZAb0E6v4DUunZG=9Z-93MjrC5zpX~GMs1BDB9oGS`LBv-|z z-MWq{Mgn6rXaIrb&#)zu*Xf8sCD-fdx~2vdTD9!}AykyD!!tx*3g!Hi%P_rMRSxAwLAwKn^?; z=D?>J&hLs2L{}vQ-f94>8$@k6d+*iP95m$$)hM+puPUq>qN@(VZv-T1s+DJGDa2}i z*GnppHjc6CQ+x%`4vSYf(qNe7}Gek4PajbW_|#FA-ZbUvgws0nQ3C`&$K*R>lUCCygpKWLT;hE$q{ zmLTK`gW3CVeg^do(!8pA-L0#;S#=p_agGzRnQC?-!Lel##!OH)f$G0*K!gux0F^9MT-2=6dZ1G6q&@pdOP4!-y-sxA3P~Mo zlbd+|95H~xIf|043#u=EkuhYDv-2a2wTjl(a6op7Ibm=%jfYx2I?5S{|_=n8E1R0f+{RCfGoC3lFo3>P8^6E`GxuNj|{Q<(4s;uO}1 z_`>7-_I}dlG*usE0T)OtRc;vgKG}!ZKI8F{7aYJZX~E;OA+DiQFse zNPc*F`O|FD>KE1wi_J$1idvF&wCxx({Maqoqk*&6cN*wG*RLT(`8yDWmdc5v3{NKwgFKLVLG3V>zK>YI+I%k{PGuxN!_4r$ z6?$$}w+f)%Uv``Z5QiFt)yinulwtb(2oT*Gf^|PwA^Naq-&OJn)~T_#jhC#yEGbE{ z5{P~FC0Y9L>6b0H0RexDJ2%$>Kz(4a5+aLrh+HgXdkN{PLX5ZCCWb>BN#Wh{=$4#T zx`JWm6bnl}Ph~j(?XcgiQOwqBs|*hjDJekB*-dh1iE&MFe;mg8(};5PQ~Vg*OVXL~ z#}Z@01cIb+Tq=_f4?8xSKkjO*M?1Mtv8a8rmR)1?PPMHs1Au>M2U*JAmo_`}Ny*hZ ziD7XEQ36?l=3bw@15(_C-;TZlKL8)N@-hx*3KatcG)1~>1(R+bLVAZ@wHQRiCp&?T;B zxDf%36Lr>&w1IyGugwxL?eMuB09{<684_ZQu7DLlkRd!N!7yqf(n#CReXA#4>+IG%wHJ@3;6{%a;$0;8k3m za47gkgE~-3R=2n#lu5HGgu6|GNrW+28-N{)d(K!Z+$_vD+?mC- zDwxxl;B@m5vhMKh>A*sOp~24|TaS=0(lbx621pdCXrd_QMXd4SvL<*BC`b=TKpGF*p%;w%K0ckq=w!w%3}5g|>K01JGEw4RJMC zBM%O7O|~C)97^;cl0dh?+AKA;bkqG-=M;agt*mntAb<)q8+DO2`<)Co>niJt-iAr!Z0;p&2~z8#gXiwwG=T-V%Y%PQyi>8Sz0)AOXqhuSt(R=__93X~(3&%T6g^|Is>mj;WS2TGPaM zRk-10Q2G6yjW(;mOmp=LEkX*)Z=I}R1FVzKnvCq&XZW8m_`hnWFiVF?Qt!dx#9{lz z`Lsi4c)7tb~w3WcQ(Zjtnik)HS#PqYmh)%d|94L9+-Aql?0CD3pIuW0JPRU zjAoxbU^j-;mgM9BwI@CyIhTKXnJla|NS*2;*mt!yOK#Ch%|N}A9mc7I=A!duL{Js5 z$^sWNA)YLC*k`wtaF-8TAmxA$t5vCDYc8KNjOWzAV_5gBb-Lo^-42ezwa937z~us6 zi0UUOQ-{^WB8%%xyvudnDsB#)wna?;rtR8x?7DH~FX=++@;MSkA_jl#wBdFxIA4E? z%b8cL`0Z8n>2U6S zl-{*>y5CNI{Tg!E8nS<^wVLHv6Ck zabV0=6BABf_r3+rW8B+b+@uI>lC~Asxn$6APB{@clp2jT!NZ^4)7Y+I$Wz@ z^>rpt(i8yQEueoZ7YVTcIaJ6+e6s_a+R29nARI=G0(xMH+aBxn;Kj6eb)SZ)R7R&f zq%RvXas_Q6lX>ph&Rr_xVQ16OErO#jRe9=sW>b};nh_%MJ>kKs5Tja04A40dw*gT6 zU4GZ9HY>r~4!thb39$;kK6_(er**72-z0KYm!#OHdm(?t<5eM6`B)VllJi)KkVT+W zt_^llcJ)!cN2{`H`6|kbRejKedIic zEo-V?j&i-j{Pq!1bv~Tyl5%cbUBUo?T+M5UrTak5YaWJ0pApyqnK&OK@n?&PG*@#@ zdJqxF?=OEYb5Z`WDTE>HI_c3v0v1Tpwl@Ytx}NYu!)7e zrXsge8edoGca10*KmY*H>?~f#P?8XDA3C5}{5^mA-pu@a2pI3+Z`^RybTEM;Gt z=6Tx6t6XowfBy(k>tOL8c2^vOH3VBWwUkWDQy_n{=p!O>Qyc6uaf}>W^&rpUGc1oV z0Ot!5`1m7YiGWU~jG|0x;xBdEUw@|5!!EUaC7Q4(B1+cLu{}U>&GKpW$nKLWsHea3 z&bxo2$@dV?E_{5HR&VY;&n#ZoF__-$aqQ*k2^OsgHV#BtX6Z7O5CIDdeS~>6-g22W=BEsg>zCZZvCit&0Zx zKQ@It6o8HATFXvc#CUJD!L6fO@&j1#9GbzHIbhVNuF*So5Vb6R{u)hd^k#}y^?5CQt#G7ka#sJ!pGq>1(CB1vXc@x+!}DD0Z^Xl+&e5Dn?M^RTmrIlFKCB|Jf8GD1d|uzI1>M zqz*;qoy9SMdhg7+3ot%LMYxn6z_)geYrh;}g!uH->e z@d3W$)65ODvuwV{%^woMSilD;&zv?O9j{bd0jx^`qF}pfzdnxt_z1a=qojclwc|w&(Dn27PuPP`D7@uNG+pVX>XO_H*`n4z&t@ z!behhn2~TY9y6>gLp_UGH>YQpjcVtcy~@KKaz~<8{}H z^xMtS25;eORQjPmL$oQ<%npA{>L~ zex6R@+z>wJHKBaQR5%XsI-Ba(?_QMB7c!jqBwx6hDqmsK=f4|{@?Vhvjm-tPji(7` zqe0b)fjmQ0%5~p9LuxL8m3U`lwbp#F4Jan4rC(lxPU+fL6!-aCNY{TQP0+bx+hsci zd3Nr+z`}bUE;V$Glb^qZyrdjXNFn5ds?%A1LocIwFIWZ>mTPwV+z}0h=7p%>14wdv z90LWGZC=qd08HrK2L34_a%bR3ZM2qWH$-g2ZJ{kY^_q40B+;u$`tRmu|JRVT7N4?R zKZuvv0uN`+NOnFTIKO|KHkcHVOor^7@@&V4aBiPjn^qV0+JUihy@yHt8RAR>M}D{# zoVgZ^Jd@2%rKi+F#x>`Fv@Lo?CNO^~;=$>R_RMobo&z69 zMO~W0@FnJ&^!|A1CWTa1$o~K?aA9)XB#q2F00(@zhF~Hl51d(Q#g75^`xD^ zO6D9=O4(ZOm*8$vNUhE|M}Tbk)XbTx$}?%M;|F_8x)xQyrVx37DOHh8ICq~Z<&q-1 z;IF6kvu4h3>lA+^Fp#`!t{vclSrY+Sda)ef2{1VIeC17UR74Qpjc0Mi;gL%PHBq>c zh!4>0ow#1FcORQV+Ma!l;NGL8HQ2`)mgEoN%RtF@x{`1=Dr6GE=^z5k`2DKj;NCrx z`y5FSA>QC6Yzh&F@)o{kElnSMZV5k{4H<8jBi`csW>bGiAg2Npj*n%QOf3Tv3^0{p zCwqV0wQ}IGDWn(_j7jj70SI@%R0Q~P&C(DHrcY&kGb$vMPsxP9tzdR4x|VIwIv0x~ zzt4PwPcec6SQ>!K%DPL|jqKa2%Y03*zjE21H={y&#RwfV$-P?? zCIuA}wkm^bEv`UL0Cv5XNg#YFA9(`?Avda(5?6oqF~X~RoLb3__I`ZK4xrsz$P5u6 z$a%UH%PGXJdnSKn!@QTw8otGSp?(cxNO4xV6DO?-R^;M|-xlgrBAohhbMbf4A0z-YusyRb78tW7X->7We*{&k+6L4Yrhfb4UW#)Rjr_ z^|s+m1ip9oq@N-4$Xv*hK}mW--lawpq;o%Gq;eT|ef`g$A0e&TrMkR_>qfSgWP_R% z5CzLyjMH6({4=B*ghh^-L&)7o(nz+Efw5+qs?bYJ`Xl1TqAXcBXA{(9*`iilCt`nD z-(&1a_g9sl`WYgGK(4M~NVF+8TVPJB_|I)S67@MOm?XY@KNo2Kz-Aw{pcLf2}Ve8>f@Tqdv5&7w_tvaCH*x z;}rPT&7{BOw}|@_M)q(4t1&Y$ZPkBLWNlLX5PV$p$}Io>xX<7b2x*JzYJ~r9<+7GZvZwiJ|8~8xtEkC zj$A4WhTa8s_UB(Kf?5)>w>tPhxkYCa&}Cl}JGGYi0Mg%3U_*uN`EROuqJAi9Q(dpdH;M&8@y>F(2>OF{fx`F<1rMjMR-%1Y}riVO%7Ik@XpMVCqTMLulG5;Zd1s+3JHLnSfw_- zgtyP-N=f(+a7)aA*SZW>Zp%JF zjdGbo)!GCzelsehnqYOGGyybM8|f+C`+1P_yu}v(zh9|5Mup5#!&yU^Tn*8wI4ZE3 zbhA%-$w)Ok%^5la&GF+s{YgO?1Icev#k4N;aFVn)^s1Sc$u+qukP08!T&4Bcd zo-+Vt99QwnoM#vn@|@waySOY+YF@aKcbAjzmC?^aMdakU+rm~IA9jcx)JMC}W2azG)BR!i z*Gh%-Zz8XF>w&ANb-;B5Ev1|vW%yd{;_iqvREp@K3W!2P+H*XvPWT5UdpRox# zzJ$1vOyyk=ya^waLUnB3Y+m6vOWOBU`V!(xDTALc2Fk3t$@G$kc9a+i8J6nxF4#>9 z;lzIl3D%Z79rh34z+04w7OAv0?xSjK$1GE? zWHoOeP2=+ojEk zN(r1LO|ZQ>z0Ev($RL+ebq?5q(>y5Wz=5D40GrYYZ71(23ewqHuT7A@{uEHbrb+1t5Syj=Fyf z`?%-@!qNm*8jwM`ho>)5D|N;ZpU7?r6hT_;TCqyIrrEp??`l+x=xeU2fbJ^Ws;=Px zA~kj@S^Lgu%6*++QpmxZQxPJ4rbnL5HOvyem6fZvdEfPT>`Tl#Np3((J9{ebsp5W^gQW#kVe5VhDac*38 z%i0>)`CNUnlsi3en?g1ZG|roo`FOjX%fF6-V325K9;7Tm3uvw0j+?{pT%5jAVb2*}+;|F~1XyU1qD^ zY@X6qMDlxc;LE1Zh?OcXfm5leuIvHzm4+ zh@vTRAr=7O2b+K1a?EVvoEX$R=hcvjaQG8cx24YQUQ)zENRV&1k6^FRGCOSPey%27*$uF*^W3N2b?RV zuZ|tu$weQ^6NdT->0exJVz*k>V`&0}AMRz2m2}mOz{4_89rVTq$Xw1-5jwWD>O4O(@4jFjC``A3jZ*)LRbr_=#5t@li0 zWs`~ECHa4$r2`8UqWNGRU)4{ktpYqAs}b7Bla zbvpHjd&Hmm5piAaX?Rve9H=;daB)`?JGmef)LDP-BZ=IlVyx0iUi-^H!1xqlv#S8F zFehe!_9rYAW0WiCgVzc8LYaOWywXG--1wH);@)xa*9s|@POg!W6_{?C z0$3%bJ`_diM+6BKudGSB_o2jxHgzt3`t*aXQ1^o2US z%pPR8H0c7NdQ(it9&NNTSU`D<$U%)hy)VP_^NjjS7IDI zReLBW{rcyGn534prk0n3C%6_6UZ=V?0z#*|I^&P85R-;%#%Bdt1!2m3;>D`fjYQ0x z^I?@@L@cuodQAaJe)7&X{8)yg7^9us*qpmbJX<;OG%M>l!n^ ziH6im+u3{&8W(qO@vQ7KI;A#lMq=a2hTp!ggTF4~j>S2`>}O^Isp|%!u5F7=pAeGE z6_V@wd&K66%l^*34-mm7e4&41;ktn(w|=%>bIbep0AE0$zYvwLW3wGAE{!VqRFGf% z_BGd>lFWN8DNKr(TzY!nor+gwZK?>HKKagX68(1Uv z!H<#`vg!0@PhKDp=b;hKZHgI@ooVR7NhGE{(zf+#+($m1*84T>xlLaYo2OM5VUenL z4COK<9hXaTZh_T%jd6*Qs8w)AzC}!lja{aqlr{f{UI$CVa|xBoKHPCj1}PD#WY&6@B?Y zj+|eu=t~g3U9EiXZxhZ!_(Qv@H~ za;R_?`uedV_O5$z^6)XI9=sEec3e`u**>Y#y?eoJir6~^ zG#GshS=cmgOBbkr=$y?fI|0@2r|#=Vh>rs?O|4)JnZ$cQYc)^L;L3R))rWKUBgDsb z4EAYxbh`NL^D%6e^Aa)7MCbZ^?KVaDcwOEMgFt`;PY(;eZStZYP~axq4yXy(r&p3gMtNQTNJVBoqQ&H>Qc*1nyMcmFy19-KdD&6IZTj z$8T4Ff7_l6gKVs2&f({ym&efcJY1=G2*_t^fWvKO?_X$$r#$OjIrWcKA#|M^Ft8wU z_u0Wl-IyYOym1LcS0aQ7|JO?Q7w!Mr6|#@2mhr1aZ0r+%J-k~k&#Hx!>9|*N{nxILeFUVM zE@%S}8-A^aUjZ*9ukLDAAI@XU7^LE@I|VV+$LZyhZH+?doCMrae>8$N8aE{HBh{B-! zQoRM?JF6aq_3CPm`4o`*ii3HN=;oK7Av)B;JVzzR=>sb>hUevC-R59zci{fADx|4z z`4q|BGj@$MB~3I}D+8y{Ko0L{!CqJWA!1IYd!IOXMXmj8>D;t8ESZP;ddCX(9#VUM ziW4^JG$iD5R?B1hfPu#9w^*y)b=_do3hBWrtCX#>Knq>E#ngrGQWIS=>%-IEH_+LT zh`{inY+n40<2V02w=;Kti2#bYuTu`0khXde8vgnq;HnKoP+jMIHQ-R$=OM-XkPtzc z!igt&yO4+EzqW4DbHNEPAf?Bhf3^e&_J8KkI~ z*A4pAl92mCIPK(F^{Zya3DrUrt*fe{g$wzzEpD z7_&;A83_g~v>bepmzM1c)xu!T{BT?RXSE{Q>`w+gKIQCLhSqTsfRw7Y+Lzpa%N-HF z9@#=>7yDS2oJwu0&P;|sGSt;1^o(xl-Zv9e%s7h;IWzIXN%V16^Hrep5~>Hzy9ZGG zmHIP8e|f!7koyib{M@|bsUJc_&!g{Ti5r%&@imUR zM0La#DmKr#jPNTUiF*i>282k1kZwE9Z|c6$K@lJ?c6 zkMj|-PzwmSdo80)stUXC3vvLH6^Zda3l~O(*i=W-*|0wOb$1QOHx9n&msh2Yr-56a zF%GrIG#DfJ+%@7s zedQ26rQK^ird)l3#_@3sd0C}ay=(!Q=)tV7Z#iTWD_p(QG7@bcP;XMF4+U&gDdGRQ zdppef$|1d@tsv*+L|~$SOLIRJzi(t&Tc-T*$_2B+c2P(f$8M<@flE{q>0*)uJihCF z8j;%-wO-lUrjop7-9Sl?izt9u0MaDe^{xu*YT6O5MZ2>LsQ6n%nJx{jL~9|YdJ+A- z3KTYlxI24imU(kzDF81orAjWT*EO-PdJPV5=l!>YOge7|*d?!jt_Sfnp9<=n&8K7f zlTE(MCcLlTA-e}8yZ{y|kJnA(&iKc0BAGhVoY&|Mn__TP+surhjx5t0U={0%#4~h) zaJ4J`eE${$tHzYdC&M0U4*BwSfi-*8Guoi5m&2x*pzec6)F0*5yZvOlp0=kMS?LtI z@7?!*R>(q?F1nq67f&JrtI1&UKryfnxIyn%3oz>Mw-^N4$VI*3QCba$aL(Xse&PzJ=$!Q)M5P9b;8-WZc(sjgoVQ$Of07E-oqPv-qB@ z3Nfk?rDTks07rcSP@7!Vb^zbfx%WfCsQ0gb#YBa4=BS*1Wp0F0(gMy5wgW<#YBPH} zfgw?$Bb+B1_!l4oxqwNV$FCRwu7IlU(ewL1zd{yjQ%jWnNwQ^AsfY->r(!yoxZgVx zeS%8}vDt%=f?c_Kk6!x1r=x7|!}am-cSryA7P5IT1_abgz*&G_0Fb*^%96s<(t~v7 z_a7n4)Pa6~t3PY`%#EBEiz`EB04(o)+*j1{Lt@DLDs86Q1k>hnQ=QQ);iHwZ6EOotbkgfHJ+$L`K(W z@Ukjot>#Icw>R4Yx>)J7dNKulm>wAJlZw9n{$(+LM22&#+dA?x7V5~}I}1zRMM0GJ zz3?S!|9Tz?J5^_E6STcx>6kZC^LovCyfV?S?E`|s$K@=YVCjuHfiRN?R6v?Z*O2h_ zGm2h;4x0^b|4-W$E!lO#$X@~h0zL->#HpQe9FNDz{{41eyY`Wj7sXYvJ#(k50wJ|P z>TYX)NooDn(SNXHntRVN-#dgpr_U`FKzaq-+{nlsXAx+nl5up$&iT!2e-K-XeOzh> z4u-S{(@I@u?IpRLP$viBuh-U}Zr6-utdzFk_q;cg-AUD|zNRARTvw}JJ*h4mcou5( z1$b9dK7&v2QKWTSwi})8(JUuC+~rUUKn*2-Ohiye6`CUF5lblhKKA#o6Hs6$_{^ci zGz`GSwx$$HK@j)x|p@$(NCZU@XZ>L-yxMd;ZrNCGALbBKl6lxmaUHJ3EJR6L1>10$C zQ?<&#|NF6XP#;HLm#rA1%3Xo(8}FxFrZ)30{m>=~XK(B_p%Q!T>Z7=e8hYIpscS2M?_ z#}4+UZEdM~iXP;>f=`sGyci;@?Y%+vV=R|(j9RD#9|y4A3T0+28Df;pK)tmP9)^%m zJ-Dy~G=wMe2gOBcVG9*VL1%=6wV`*?%J=c{KTZTyJ)znoX`UgRYpm8|&Wl%npz-7_ zceDQb`PHYWnaNHq?U==e%6KdeCFTUwz`x#i@MV?D?DWB(ZPME%mrM$bbxv3dFu9Be zHk04oI6s2RV`M<)JDNC~tUHhm%0``iG7;T1UjE-OkG?o;SzIJg2yG&)AFYBfN37Xg z)Pwv_hIw?xQT`_Nec!~;ZLt=`%wZS4scYIo_x9wt8tIA=KjRGuxw$85SF5@T; zf!Lhq8X{oT=hwf!`*eP_jg*KoH3;H8sXBI!eQOB0RfO25<@)O6TU@O@tSGr7x5kxr z)K-{~Mjz{n;c1qWb7`$D77hhwnOhN4$2RGfXTi7c+4^Ock9Wn<=5DK@6sstkham}J zSN9qsGUaI#y?iT?0|upkSDkznq}U2yECWJVT@uQ3*mAkYs(o+j3!X)GJ=E2^0yu|V zI`G$d>??fpxv>o;O3Pvq3zln0{6!*M4My3MC(nA@K32&Yyix1A1>pg1hM0gPZ8K7X z>B*{B*m5x}#)kSZ9>RrzKsr+_EsP<(N$+#LJ>w~LkBz@d#YxnZ7WVOa`S2@j`Lq$ujO+|#b*i?UPOgCT+p@^8 z-S6ZzzrvP_S$jxO&Hdzp+Ke5TBS&hG&D~pm7~44Vrwcn_pEa#&arGDuMQ?Kv6L=SY zraTP7e)SnT4Mk^v;EZm|(YBV1&vX=GBp(4re=zEslT}MgoYD}>`n#2aQa2 z!aLOBfS?Nj3g6{>h}4?qhah?-^k0TCbxf}JbeaSB9__R)8wmt#g3r=1- zh?qx06KV@QE>!W@y|Q{s2{m-3+*r&9wRAz{D#u8lb~TEkV=jZR0O?2fhKuLE8_BGU zgxxBZ5f&bQh(+v6b?LT3DB7iwQTd=~4)_eq3}~f>cmx%_B%SyXS->vWSkB=)k5GQBzDR18aN=(CiGbcI z)rgot>e;8^JD2p*6ki5BSnOH=IIrnoeSi&Cl6Y@_etr$#x$xVOkW^weU=Irbpky~s zy^xGEAV53~-?=aZ=cKiiGgfIbzFxg>3U)b7b)u+$ zSqZ5}O6Y)mT1rea)&LYy&%K@Yw^=S1Rkh*YUv@%|i6o8aKS!H)+LPa-%pRMV zN^UK(RxUZm4%jz&D_Yn&Zs*QC^m~-q1^OX48FsFzAyAdICj3e`*OfE<>v5FXDa;#3 z6-iiw{M;*<#TSXQ&)PsV@lFH%+b)-XI6nYC1%*WI4aZUo3e;WLA`QH=x;-Upx6p;k zJyPGC#Kutv3LkR)=oGD}$L`%0uhDO(AVJdgg>x5egw1CY{H29hW8~!beKLrn-!4Zn ztz|9g8Zn`$pmK2AvkX`TTyt;mT7Xe=m=B|W)_?lkfGDqucJEmlN@x-~vI=7l0kQnU^f3M*7p}q) z&OYQkDPl;PBvdg`0B85(Wl13AUR$&PD(N_LB!r&_YU zkcwxE(#o>6@gdPc)$<2J2r>$|T-35xVVa~;fbz;%{lsYGNlJ<^e`grs?7qttR;Y#Z z@D0m_;;(E#QQJ6yQ){f}$Vl4mI(8zMpUO!Yk-qIya#?8pC2v&eNKSP)hj9(6v%NR zuLLCM3b0W6d>rb3`t-RGA`?pn;G~rCY?8=VzuDz+^45n5IL=SGc)6aC=SWzY7_xE{ zTnLSUKZEuMjU5{0!i1Yj*AWpe0SwM*6ZHcbm$ePCR2~%TX_bpoV6T)cjTAYKhGWRt z&pg&7(?OgMvw~E^bn&VbV=5^44j+{oqE%BY-(hPZd#&z&Mt%1&Dv_B9TUg0HMy4%^ zJDIFnQ0J5fg@}*O>0uM)DNa6V!L_NpoFya)eNCX5g?+u+^o!}>Z=W4pqnU-4c^u1_ z67k0v5F|R)HSUY`i|fG0us*5MGJ&cP+s&wp0!4x*1z~SdkVU|0u4%uQ{Ze$O@U5`oo z%yEZNDawFDX?xZ5!0Jz478jt`bK5;rb}OwSGFHpF8oBSL%z6cS zZ4AM%WRc3p4UzRuAoc0i>ye}!@_iv*p*E#n3*b6`rF(bUOYU@Xzj;|a%nEbQfH-Pn zSUtl=2qcS{wJ&6y`{U$qUKXFu7@1~0j$HuP%gzl&*H{|osqKNq=3ghYp5Z|?)?@+2 z49bR*5+7$O0)-w}cJ=lD{V@D<9`B_&De9TLPpX5OQph=hH+}d)mdy`Vecv8hEfg+X z^~|t;f(Ar%Y~V>5u1-BxYxkx4XMFp^Wrp(bela8CoV|r~%dJxTYM{75W&e05yFNX7 zjNv?5!ZwemV8O#BZOL@X-jKE}d(jxRoDWyuZEiWKL=qKM5?GJc}UDSO^`kY>I4 znAPVV<5;QMM>_FLMa8rEpiE#h9#`vMmwrco>!FXGtr`j&rMR~isi&c4-t*3qZSUXy zwJ(1}b8LlzC}6WDA`8*nhALeNvcu@h)8s*i~3>g?wu-%gQYUH91m!Tov= zf1Bk(QFeBu52-aQR$I|5_NshfDn;+{;fq(xcuLs0x!T$Q4%0}(b&~Aa*=bnsZmj)yX>2&Rl&@d)+z$#{e~-d>)VO8$B1)4ti4KC|Qq0Sjv`cUT8mXHoYY9T!`>7BV$;c%)$D=z4%zQ>y4V%YS}OwIjWVU6mRKC@j9ZoTR}ajS%r!1n=~@P7%C%t& zVajZK)^d(b*&CtnTner(&2lI^X$^x+WUUh@>@J3)@GiSL-VoVcP!-#MyCRTzMHYOG zd5#*8lG$ukgWV(hm@W$Th0{_?MIz-sQmi^PREvO~09yLMCF~QY@;I}jaIjZ9v3As> zo!^KRX(!$rhG>(^HK>-k>dYCN)o|n{zK!Jq0L-?=os9P9yVKPkPd&V-EbBGw)%%)f zTVE8i-$$+v1*6{f@Nn~ggI!aSEs$+!)L1ecKCZ=QaD4HK6@I?IjnA(xBCrt%bdqxg z7$L1A3bdY*MH~3!zBBj!eE+^bKHptB)(fgXP6_KGrB5=T;@qj9HYneDy~zIg{_V&2 zH$u|BC2TOo6SfVaH zj0)enUUvL^|M#zRT#V|d_{xDrf|MMy4rCpi$GGsx`-D7=`sy=$_hK)tF9>yr)un`) z#tEs!d$jso9y~RFZ33omEjzZhrWL_n0u!S?O}WlHmHzkj zU<&CN;COa?^v)6W-M;;FnHBCO2km3q0ve`}{js8`vvxJR>q5U|?7#o;Fl!b=HDjsr z)o4@{$k;z&M^moAHTUV)7tO27y+S^~bHsPWCTYD82{!A08J4R!gAZ1{`7}}hM~zaL zWa3O6zod8459wY()}0yV7tO1ORc(y6g2fio+MQClGk3%;?4b>ynFp(W(Y(66jI7gJ zFQ@c06iIqzcFQ6*)UNY96PG&qR?Ru=Tw)vxAi*qGSzE%kYGSHSw76fLoU82F1rA?Z z9cRc483n0-#1qHpr`&~7e$%|V^yyUVfWjm1JZCCY%I*38XuG!Lx^7)LB@%oOhXg=J z70L3^ws(9p`rBC2Ir-zt5Au*LODd!I0J=${8uP(SAIp8pyt>>aA*cATbFS|$LEQq#*ajkyLSBV|)(RH2mPS!?7|=GEn7rVuwOjLpX& z&!*09yt$cq7>#pS>s6h^z!V&!+OvwaYZ|n=>?nQWr!F_dmP<)ir53B)fgF0AyKvA&c{uD1>IxLyMEcfKIBpqx55 z;!Jg54dKrkmiL^o)Brkdw_^7$njX_PDVlT!kD*xT*ncTx5XC7S=x^Ovp#EWhnk?@R z7b8E4DRD|QT&~TaI5Y306+Dcw)Xo&_viI~@S8Oh$LxI=VzC=B&Az)>}>~)OZ5h7nf zxzGvF=TIxsIcefr&9NCNq6MQp_}XnyKB^Es+4)cmretH1jgi)uH2(YHaloXhM{!cM!HviN1aql&zMEm)^HKHUZN%Y_S0 z)iSpN4fleTmGVT0Na;gro%=p07av=osJddHL8?vS4#d@zzVW>&pH-1A%UBm1)V;y1 z%-<7)o;s+Gq=;?D8fJ{;repraM?cE?DovPu0*K;Ytom$5ewEF@Z=CyoBrYFYm-<%= zCQFmp%V!jxX~unoe86Rj)EjSP1m&@&c(j@NTA&dbNsGlmOuSmW@{03(^L6#PxZrgR zls!LLBr}l){5HEvFUtQROV=Zt`h%ZwEl9*>;as?yti{r6=+?%d0EU+`nD&2|6;WM@_~Fv z;<46&krCbHy7FpDVUB2Og6)&fv(WQ12pO8v37@;$rTO};4zkPOM#8<+^ z#4YRBT}4<2l@@y4W6_P5?Ppjn8Qx$qB8ale0HsK4fLkEMRc6?KHL9!i%Vj5`>gcN2bs?8j$}U?0_^i(hwHk!tUxei%6M-)dUae;2 zc5_Tl1N<}>?cikLEEDk=mdj2gU>b~4q)J)Me=fvHI}{l}J5z7M`sE{x(gFyVxj&A; zJ*CZrpswfTHD-K&&s|V1ulqo-?Djc;QN%37C^juma4w8i?B{o*KYpsq+deX9u$-vL zFsHX2@qtC9nJ`1&cM&&V918a$Q zRNxn_X5`M1&8n~FG*>@2P4EXNj~9NF=d2M#6_5cD_FiZMw-1scUd3olUI70xwIRdQLzkOCZ z=Bb;QXe+3MyA8XgC~1OV*tgf?kcEiYY960@ zE;YX&PP1oY!X`5(Lw6XPS=k&=TSvVK`FM$n74=XL-{@UxS->zkw$c^<^%7#m7eU0N zoqIp|^_z>OOrbW+mtoVY5fwS0#(chxrl#kAZmO5>&(|N{Jf3`X*#m^8Z}6Ks!TXRy zK_#kDL3^8dit2$cxu|@g$Qd5kSpgSH;x+(ELo2nTHiI7?gZk+*dp!#CB!KnNX`}R+ zb8O5N055Ghmzd|9{&pFs0!YVwsgBsd;{~a-V0be3L_E*JBhRx?JoQO!7> z?HH}3J_G2?)>=&??0EG5d~>QX!F=69>Kl751l^^8Y4ti{Dj2GGT|pz&SW46*CE!E5S6zk5_;ou-l07r=@Hy;PCHZh7||@}x7D`3&lH zx|}ygsXCb&HeTZzQnG2Y2FF^uQNNqO#09&wDxm1JLonA<+R?59!EDwrXXJB#Gx%pv zPNUU|&`4P78soxmI+m4P;@AsqP{6YZxISLqJVt9ZPIY4MX^#}md9n6dz`T-~mCUnD zpg#W8|NExj=i~9>)T~}sw)TjOX;eXa2Vq`fLb{0b=Dw0&-+noXe3vw`Hh>sT`RbId z8E|4*?h#U9nW6W(g=d}%r4Rt2Oe64sr2CAlzKaKe7}Bi+LbKi2mS)mA z3tSL5rckfvX5D26*B*<1X>Su{sXb|vW;D>6`&R}N6vTV1cscS_#YB9?FG^q;S@M6nLF3fD=?b#f>En ze3=3$1M<{bp)>;ZJHIdip7TgeX8sy7h68k=kDY-xQ$y~KrL}S6Bl<(sLn?-ni8w|v z0pYZWhPjtzKs$TCB>T3D#p7gSaL|DKxa}1VWw4i&c2$ne2+VOUeY}5oOkCtlJFP*x zo6>?vl09eceYVtpwj4uxOqY<#G+SCB2%$Q(#B(zo$OV==vs@KE(#R4VE5gBTv*MgzPlVJj&&(dNK&Lo zN+B-uOtKrRolTYH<~Z>OyBsHKL=~x<)>bq9VJ%}%Q+Q2+)h{>P;Gyc{(HXF+c$(vK zT#7oJ>BxbvOIIHIW_2D*JQyaIX zfuu^Uxx_qE<_UP$G}1aw;?v7YWAb(30nDjp{Tiw;6Kzc9rV`J(Oiwo}4ZG(zH}4to zSHv{>LjEdwZI0vS*uaAFY1E2I+87{vqwi=3>7X=!)+$ma;OE)==L*VWq#CkQZ8L!D zRS6A<3MDX%fm%35x=~VfbhBxoz+f{er<5XU^~gD(Dz0Ecs-vE7MIG&I02fqpZ>HV` z2$OO{mM^k^tgr>w`3l+X3Is@4OUKHx7Nme3*tLO&qV&|+=Z$)>>m7(42QLJbw>D(2 z!hPj`pjdFI(AJ557n#omTVz10#A5SU$l6}B$&53SK63pTIy_x(*k)6~bWZF=t)-ws z_Pr_X1pJ=c+4}M6c4-6(IPoj9a3sb+aj?^lUNE)hZgCft^R1EYYQTMJ1_GR%gHXe7 zx6BQUbJkgX+F7HMVqxDSWEs{Ak8&hBOUs6T14jTbyeZcfl}7@T%Vc8-ICF>%lR4}y zeG?9?TT}X7R6c&0t*1Jxj%p3Ld}%5YMyd2^4M4X;<)dVkE{Ui;8WIFhPOyhegH3PT z901NG$WJ7#P_{L#mfS0*Z)=t`)ZSTvWz=&8@>5BhCS0#}yBxIzrX-cv9x{}S`hD(y z%Y8b^q+!q5(Psmyq1Yy;pWv{{f*osztz&f-K#U$L zYodTkd2WaOCpZ^~ZwI5u7ATKPRcJ4NHSb>}S1KdU{4dAN1?ZbDn9|mW9TAZ_Vxoi% zAS>^^4y9oX#BS)*NG)-jfzAD~=8xvZ&*bif&Pk(b>#MYFem-ed4U zeH{5_q`W-AbL5S5x;LN~fIX$r22GPk+Sy+2+(+etyL6?nd%*mq98K(=wA&F=Mjp%K z?4-iapYk8_ffLA`BbEY`69EeA2v}m+fn8Rh(#|O7D=v@mLJZZO$+S^(C_r829BUm* zMI$iA?RfnF;C7L&NOnDdWQuWr;$EkDc}2kK7$uinZu00Am&n*N7eB!DFG>A@WH*Ki@jmyIcDz%Y+1*4=n&1}+A zpxhzJ(r(72XWLJU>mlUwSfzkD+Esa;c4aS88?oFsAMSF$c z39tqzY;F_gm(sQA*@fQXax0LvQ0GX^no$eItGy`zg)QK)mF^RmTgD&A4ao0h+l7L4 zUDiDE299pcu+MF#a7$s!^ee1)9V;te_f(x~yOjB*+!*J42IjPX##Cb9W!^`1bd4yK zAx}=CL~)dJbIem-d=7MwRqIAvVh->n8nibsmayJT;^I7w7L*IRM;HM?L>>bio3;t9 zG3X*q%<5Sz&w_GEU32f$0lx;Ae$Pz0?465s3ee6sZxODbT=G0t)6fO%*JK0F;M?qm zFEa>aRXSe?IT-|hw3^oFi>)ZORNI)`0s~PG(pqj@E}a|#+MJ^cXS+ww6Ido>&{_$( zGRjUn->ZLF1UQ`zrczr1(~#EsGU+7H3%kM=5iI$B9DxN4#%`-mlxqNr zl8O=Tvi7;<>gj2$Ai<#Dw#UM{XA+LQR}T`WX>8ump#64#y<+eo9Ni4MH*$N$cMVXo zYNv5B!)QPlCjGWq=JzVaip zxzq-mR3bU$u0s;&CV|FgfH!cQ!v8}xWRW?aU*!Bi=5x=hy)KhhPR)>!)VJV-QjRoh z=XoFGFJvx%&Rz9v0hK>-rF7U@6r-J?odt6Ce4N2MvKW%jMbqHW4o)rw0ZS)A6yfg@ zx`ijpmutD7$XuRctj@{l#vCS4cUb&?*nI&Ort4C|^aGj8J_AveV4+$<4zP}2^@6RI z^f7p@J%1$niOl1h1@1AV${dkA=^ip!$h3PL2F=@lKY}a;pEm_=HBrt$X&gw26dqDx z;bY<~`{z{bCo-3-u*eFqPFE9lWeM_m(8ci(34G&ubL3BCKJlz&9ZSLQ`QE|7Cz3|a zCB==@`FzyeFJvx{@F52}{oyq3%<8$-_Y$P`(FVxu2atVxQ?JxHdB+r+<&eTSBY{04 z3uJ_Uw938qT#Eb~oXZJ~lLO0`#1BGRoon=>q2mt+jq3xu4dA?zLDJkINoGzXtuS_E zGH5AUTKmN3?JoZZ&V_oXo)Ty+2e|J#(_YB;Y-OIcp4LCMtX|=*Lw7S?#L{QM!uEvY zP~vD3`ijqew*C*C%hRcz%u)*|%>^x-%?90n?6Cta$DD60*YT+K%^N(N1gs6^ zTLk+~BuUS&%YGvB_+|*Z5h=c$0~$j2P_}za=sykkx96?9Kasg)1po@BUBl*N;w`2$ zA{k4U3^4DJ^)mrROnmPKRaEYulFR}$W#iDQ;l|G+-;3T(~llHGws1lud%WF}dE z8GCJq8J}Bm{X*vQK!}f46DUy_$X6gCd9M}gI(9;va?^S5$b2U7>at^LSV`Kje6n|j zDy?ltcG2B3)pukr@k~~o*j+XDCG*f?2CBWa0^+vy^0@Sl%!}prj!cQA6bLFTVnT*$ zsd2EZ=J~v#=NB>;)oua-ibc$M#Hnk4jm9xmp(on+?OTF+N9I#QlR$kM-&d{4Ml5R- z?<$j5Sy?}_&%9V}KMm*c%!Wh`DnyIcGd3&uGv}JzkvU!vS+S|RAXJ1>0!Uiul`~Y? z$P(*${ygz-a4sx2^;`nv!8Qbu-cO--`7WgoL)?A-jQ<0iS2B30%4=U>oVa_MRI>#XYEEL=w}oio=n zR$X&nsL_k(eJ&0`Z#%`MCZ!>dj)+(?`r$B=TY1YnG_UApE$qWFj{%wWfL|81JWY>| z$m`}0LUU)lVf%tt65-`YHO-i3eINSk~)6;L1->*3USls zsc+6{1vOf&Sf!CeKHx~_dO{tqi%ye{y>GGeUPe}tOh-Ypc_x&9=|#rBc-|MK6~lQ9 z%aRQunb%r1A)(^qu{_|S<6k^4jQUOz3ug_s7A2&B#AOnDt!IvlkKezbx#-bVDq9R| zkjkI)K@_Zr4+!~0xx81scwQOxAw?kH+kmbTEg>DOsevYO9^u83{}(iuW{;W&?WtBM zDTld`Ie8^A8pBwOTK3(F0m>nhqf2)-Ri z_KCiU>0n9}jr;ZN= zk`Zz=dX=s+PlPVWj|}nrX7ZDl>5#_RN{e)1=>g(Np$f7ND9>hDE)_eUyj+LC95*{4 z5x2$}dm~Cr2=>Yv+-ob!Coda8fcNKIr-aZp@>3ilq8a?>j>_d*Vf`%C9;$Q% z_-P{#&9St9gg{#^9p=A3=CwIhw;qswKHddI&>E0R*kl^>S&E%jE|r?^$efB>>uyNd zZFhqV=%8Q&40{z@9n@d)bK3Kc%%^^CgY-}AFYGWo1^x5psH<$iV zYVfqrUO`w$J>M&KqD38-$!!4j<)7u^864+W0@B)lv>@OY_Hx%am!`;0+)EAEm-+3F zFJJ%m`CxG;6+oiHNUsVaHcA@Wa_A%Va+%olj?5?6BL_t-vm90dx0G4@k`O0oq0uf4 zA3uP(sPVROAIkqF7XY(Y`# zbD=>{E?EZ*8KOGwJ~q{2fWClyY}K?`d_H)8i=ccatKztoc*YvBShQMu+twv&=7xVh z*W&@orCMrtdKN4exYxOk6dNI~)c4S+dO3Yx|DG||QCUy(ernFnyY)3m~WJx9N zC1>2Cx)-@(Lk_lhZwh8?p`5eo=0uG?N6-Dbgr7b;S=`CM%1!JgW4Fm(;HQPHL)JB3 zOxp;{r^6R}`<%Kf1Z%0ajlPTSV0}J+W=LI^@RL(j_{e)lq`%awNLqAuXnn?%kgP8^ zyFm5X2Npy~np&bF_c#QFO7mv4Xg6b%Q_(hvU3$_e?8#yB#68;+$& z>FYzdT)r2`ogOgKHI8u1h0;M0+Hlf$vR+g4%YR&q9KxV;R+}mzV9#e$&5w(~EJ%+1 zGBNiZmPhKbF*k_ASgmmmr8b1nIT7dwxN_2qP$e#(I-Sk=j(yUf9h4zz>j!3$i-+zpfy@J)fyD^d0ZCNaaV?KK9$K0K{R0PkYvtYMrOm*2w~PjKbJWA`fZxJ z%iAvKDQKg&9+bBm}VI}m&+2q`4Fv#RaOWstbN8~J~Sls2xGLkz$q?7>&=O0 zov?K^8M7B!HVirvaHLUx+6k)lA}iiLyM$4McH@&5bYNlI7?v*tuzACNAK5P93ZPur zd&`@>MH_-}N{sPjO+`SM@w1zY*Vn&%g2J@WdyE-ckWYsQ3Gc3TmO)X=bJhn;E<38} zE?_H~)~WH-W!PY)_l50FE9j?~UZ;LjkHkDdrBYX}SkB}yH74wT_p#Z~bMe6;D5o1p zI^H4@uuqfU>ey;&KZcOo#WI4RTt-#zXcf`2M?_3o--gwyq&Uiuq?h8r*SY@q_RTzS z)kHJ>+4`8(;yIwo8`*{f^jePPBe?$Sv9lJZUxhteF0*j@TF?^)!u+B+>GM&{4_t3P z-)l@h-^j=u)nJEz_M~O9sPe2lZ-&qBxLm$hUX5c?4m(EatRMUAb1|O(A zj$j!Z@o5?u3kaW%wRx$$ask~NLGKIr=JK&(;gRj`hULB?Do3fZFt;pS*kwXLDdt0PCxv&h&Umxh>)6-+z1Y zC{3X$QH9=rYBeo?ZaAMwrU|Iw#@LgN2Cun zj^pJJ{v2!L@x^3y-P-w(3dXl>8vBehE6%yso<9Zrg62|)1rcBAH^g>}xguEUpUHn#W$lS7MC{^x+a(nsbP2TDna+ zqvSF{>2-bn^7i>p7mkYKSN67mkH$eaYt1?mjZ-(h&dc*Vt=IMCb^qyc04%GPJ;uUn z_RRKyBqwd_oztE^1k2~mB7)ICjkO+YuV4~?pb>lu9!Q+CKffz|hvl(|pz(P$9Uv3Z zkOummx!_F3T*@xzwz~++ta0GU8$zvN4{XH|%hdh@v;u-{zL z5e)`1e>+PNDWLVOmH99&DK$rs!wWNf!16KJLiRxh=LAH9E?b6^3AR|Gu5>PA*4|;c zgw(o_7IRyPGX(~xV1Z5KoO)`h)C=8tz;Zc_dTJ$^wmCovC$;QpwdPi{g-crbn;+iV&PJ-?X$0nFnxe>MYk1^3b#$Kkk5O#@6ZSlyE1#g6ZF z|Mew0_41U%LA#?Oj&(@1*mvT54V7-AgSy^*OhiolW^UpEzcP4}X83RpCRQeT@@EmvGVFTz#~6lZ{+(qp5B(vy<5CPt-u~*{z9(s5}x-TD*nmTF1!Mpl@YR<8u1?(t7dIedV|a z4-$bG3e_K5(KSNv3$oU1rH*7-Qor3he-o99hHh`^r}YkFD7fA0(B(^?>Da zuR3?F^*|;fj5W!<(=&HTWmQDJe+(;n{lvz)uixH0khO{B%44L46|5_4y7P|9sn2qgr=~^cLK;^Qz6x?`dmA3IGte-(!GmWC5cA1xX z;SX3IsA8jqaAbm%98P7LJg0GlUrtvVh`-5&+hA`CBI;VFq|m@|z?o?se;L=K3ifhc zNmMTPBMadHa$nbx)p(m*H;2DN0wG@H%WWl5xm;HE9W%H*NT8P89{rLu?JaEC0u{WY za^W^XW<7%s`$Ag<3*(NfUq7;^kj4*V736%HR_6@Fb=I8|1<)g}?x ze|@~lEbrZ{T3|0?l$1gmf2KR+vgP7K@%qE@!Q~2~AGY)qC~3}!6nwM)(RL-tk>$AZ zN}Pw&w2>Gx(^}J4NL8{r{dYW-_3}|0)Fv}SAuBfyfIA7o<0_zG6WlN!uKWK5=5j0u zvXC%TGAJll1W`7}X}bb7=eI-TvWNLD_v={Xd*-n08p;~6NRJ8Xe;O$q#6BK&qgxLH z&G=}TTm`8q=6E$TVnYQ78}VRObD?q}HoCLw2ADh{L9X6sv-jpK2fAgbd>*@EO>sAKuwbq40ysm7&C1V8t>Xu%JZ5kOr06cG zN0Ai z92FFK^|`s2)qtc!D~h-8XTdIY&D2(ul9D}oTGkiCnw`e9$4;PIr|ACr*W=4Y9xhs& zLlbMSRriiF#i?r)stqyzRHpQe%Y)B!Oj$}{)UfRomxJ9HFut2w%N$NQ`oiTxm@8yO zs&*lk24n^pe<0^f+uE8^+^1D3kk13Rb58}4^ z%GgLt%GOc3EAqC)!=c+ZE|;@rP6^Zx=+x>OtC$twf6UxfM;?bJ>i^<$IY)|HS+4r| zZ8aKHC+4(eP#g|5o!9+8KKro_C_`@9ES0dZO4*?V&DOj#O`Rt$Xt-SVqm-tlt34Bm zbz0jf2_bZ(OnZqyhwImGTrMZ`DO&eE4YT2kVoq5Qvlz1)3#D*c_n%KLvzV-pl{Ho% zupQpDe?~|lkyb_%0f|1M`u*<0Q?0LEjzNk*$#x_jV;7bI%xpmqUCA$8F60Z$Z-UBG z=*D++^vtyd>%@n79EYyC7c7@U-OVE--E@dWq-n&8FvK2A&00XgPFwNw>B-00y(cr6 z$Dbpl1y;Yi*}EfS;#ZG>9;jT(xMm&JKYsVVe*kFOQAGKU4pm1wg@@0lPoI4lN?mi# zwT3b1L?q4nhej=x_}~fm_Uh7;R<5>tG$CPUm?Ouv6IIR4O#cpsCvNQ))S6f+<7-;6 zh-SoWnt>xeL$Ke63(m*yPxTN#t%laI*$TefcLYxcC&VuZD@Lpx$h@I)xxi>S#U7NG ze;Hvct929WqA{|Byicz>4V6o{DuLHPQqB+>EnvWO1qA$V1}xTe{|w6|GVmCX7FnRE zdo(5(MK%%;nR`fG2g3aL^XtXsXoRUu2~e?(tO-%I3t{sE1^=7jbaig1d`gEU(s!Y0 zZ?r=nRe-Y;G3%AnBW6S865GwxY8F$|f6TO| zSA?wVYX})>oNinVl#4o4yUJg&vG&PW@!i%tVnaeE%!d|_hRUUEt2JwO9#fCWI$9Yj z=;*!6sBxyl;Uqx0+=z*c)QZMx4|Mai%6QJRC{|d=dU`Bus9dhYqB(Y3yH}8_e+CXe zIVhA*g}MiiIk2mT54qBXSY8kl=H78lM6K5I0&mC}T0&02>V5fGD~6?W@nUUA(#=wj zReC4Dkqb5 zLYibPa}Ujs0LmwT>fC`tqg*#%f33+V$FjqUO1m7o#9yF1_8;r8LTb>?SQZy6W0p}U z@1$t~^AVL#P?%QIHZo1<(^{9cAj`vSXTX)^pqc^7CxBvPAiE@IyVN8av`A{ntHzl1 z^t{ecxs28K6Lesz4T?q}>(g!vQhp_Kq&lKJ$}xs{U4Ajm>^GN9*5a=iCtVbal|q?a+7G zK)KXraVIN`v=Xf%Ln>wKeW^9;%e@-y>b*k+KDxZ!uVx{@f?34!B%&t>2RzITr>?6j0C?>dI zxzx_gIl}53m+`6GQjQX}gBv#f`Xwp|Y^iF*He0ih){&pFyo^@tJO>bO0lBMQ7{UL_MuML{Ak^-@tsjD_HSBNs($!L9;g7fW6GI^3K+B z|0l>?E}3e?-?&FBn#RA75aZB+P`@(ec4|O$0ef;;WF?Kb@Y9WGVctc(<($E|a*#rL z()HiKy!djLm4Z3JfA!HDn~7LUjS_U>IG6?f3(RMcmBbnc5)pwpBN@%uA`#e^bgNhV z5i*xW7Mbe+7qt#=$OF@PXx;Qq zZ!WJ$V}V4(Ps$Lh#6ZdxX#9<3PrSh=PM~}&yF^AFi$V({e^)cQt%Y{Q7iLbh?+<9+ zUq4@bJW>(rbAjri783O8%)zR()^_bk!1f($KA|NS9)d&HK~?qrXtOI8NsbEj<}Iu~&P;Ms1|LI3wok z824KLT39Z%)HS5GvH1uLq7oBp%EF{Akce`qJu)_~x?N?D3|ESSAg`QRvFXGkt1Wj&ZD2o(wPU$ocvBdZyG7Adpevjzj@ zlAKLwm26e-L97wql+|NPDdMkj-=84ap@@^G%VYr`ZmSmXs#GI5X1&3+$3Kk4=PkB_&Kf3?chVyxZTh~PU4e#*$vbC}Zq0W6mw zn(+;Wa<&H+=Hx8bd0;41rH2!&>omk=Z9x%E!jRPvhIRD4ZZcb+J$7qycOM)6#pM#S za>#2ZD+3M_+OR<&2GTiljw8+cHUBN_UB)YLOCVR=0thM5nvjNr%p+?_O^1$c|Kf77 zf1POpvXDYSo>}GyS7vCS5epKw@59;mmy_>I?KN|n)VEcrtS|&K2SSKngp95C*Y{se z#xs!3lvYi$Yw}(dwV30^;1(2}8ndEd3IfVn5MpespT(4Ws9VgpCMK zp^l(?+}9?5IoBzsC9at!c4XRlV5#%LW%`$V{CUw=ms7tmw^fmvf1goF z7^~2?wQTPoT4Nnd>K<;mY7bAK(TG*a$Z!2~^Si&(DybG)b0&hniIS>LGUQ z0TWRJ@gvKImIJ{CS1}LSmJSZZZ=a9fF7@~YSukI1XhN<*@mIFCRcqxsIUer7p5I>I zd|nB#NJ({)Zk}nU-CDJ}F=K+V554uD>B*y~F_dWr9S%8aP9d}> z@!^39F(6?6QpRXC$rF1}LKRIl+Yla7&YySj@sr52E~=HWfs z^W(_}RGb{7R=YwC8WG_ee^~ss3In9-d014B4-c|l`iOfgVrcGyZMR2YgiS7WYt4t7 z%jXAwhzEf|B(l18fuNZMgVVd(qq%L~8$F!5oXeNT?2Uw^5(r^xWbIrbmuKxo7{9d2 zybtJV&Bfe~Ys*l3AcrLdmH=tf?8!ZonuZ96Vx#{db9w&{a#f4@f0M)%TS*89oUQjv zZoTp$-RLu50i4g>7e3AnGD7N-4fei6D?tO~7t=V@Tl^21OC`v->Obx#KVf{ZOc2^KD@f-BTlU{Hq$-rQE(d$v-s zw0NA(y02C5bQW15=R@isHlw#xzHgytXb<@;ug3{sS}aGY#O4O>QRZK|Qk~f0qtYXisYo zclY18T$b0aR-mO^=1dmbvE0dC5n$OZ@QOo3eQ}FjGtk2P*<5Px2p1!ihO|9n9b496 zH@>(9F9rKce?5mZ!RaBZ?OAOo9osVR5cVN4zPLp%Dzc!0xD9FGU1O1C>(SOh^tBzV zNxpHptS_^5Vhqp-Tc;#QwNzJcR+O7X_K$G+RAO{{BDyzLyjla!onzmrO|dfXahtOD z3qSwY<7gzB=jU9F8l`LGs@?iv3nWsJ+X^jUBA0uoe{Ls8v88~p4t~0Ag;@olYNoz# z>o5${r%Qh-^V4jg@mT1yn#W%b+QbT7Wya$;xmW~8)s5{oa+&yUA%+l&V1Z)BJni-_ z)7I1LUp|MWt>uEGSQciItg(NXW>cDGT=!1~0P2aqJP6Gu#LQJj(z>m?WfkZQ^Xkgb zW%u31e*o(7;Q^`^tz~h_+jv4;6hZx_*>sty%zX>OulL8t>$^*#c{Pjh*sz$a$`v1U zFa|6t>u8kj4n|Y>hGosn$6#~4s(ls3&{;3z#iTRRZA7?0d5l!6yQ$erC1}G* z;4^7yfPRo5<9XBp8G5+fc8 zr{C!H`T38}k@xN)%nUtfrkZ=3sYYqD3*^1tmmk^}SuBV63i1m%=wV0ET2y@jKV(-uyLzcY@{y_};&#TWOiyF;u zH-LVDpE6Wp4>2yq$c@?$rp{*0f9*74CddYLD{mVzchwN5T<2W>PusQa=6U15SCT~P z^fU{J6oUe7H)+z{KK>4WJKpxj`fk_)NgV%12pz~7isat z8rtcS$JV8@DDLHU!NzoJ4Ec%1{uQ&Ih)9Jp0ak0(S_Rkf(B=lT*by^7&xODHvOi-? z>!YNSC*rv=r>fJdz$dT9f7H&n^uoVEvZz>Ijo>Ay*3yBldz+FC;0LiCTMWA&pt2~_ zloIUOragOg7m1W!N(J7)Rap7DYH>$xRQ#S>C35ZVT5J~^&PIGd^r6q2m*1gTjAh^> zClPzcWNl)`IBZr_q!%FCOZoL1G>h6!SI^sxUji7OEeAajLa6d5e@CvDN&9c;EXuS) zUW-#*yw2lQS^oOsv+WlXF7I_eUjQvCPPtN|YkVD-%qHLuJ!MMj*2MFSS7QEqTnObg z#xNM?uiLn;44R&&ms^pG`dk6`m#{!}qz!NGT-;oPMr08U>}x}qpmxVYU&4aBSD>}D z*-CLqG{9Rg?z4UHe<9&}p2d+`nD;o7GCZ4rKG_)cjKt+2MlEnFYu6BZzQvU2Aa<6y za7Wij*jDqd>wR!7X6<&VvwF*zh16L!a#{9f-JM$NQWsUu3amkT#*>U$NU@v=?Jn${ zc_-&{%w?+m{g2LQmzwC0j9G+b$-K|A!^5@=t6q~eTraAVe_1;7jx~bL*Y05B-gxRW zHCzo{OHB!X9;ryXD9XKO%tERaq-Pu2QWt5HJcq!|GgZSAeEbBP#q8r86K8*pq%L%{ za~j1OKx9^{%dX)v>U{00y$!8{N0HT=f|)Fk%?&D?a(|HUcYqPo#w*@dMU_hPk=F^d z6D(znoN@Rrf7*cW8MBbF2!&km!AxCovgQTP+OzWV=Ru>-=UTjH%tB7s#`5Gkaq0oD zNAb6=F|nm!=&ri;EMpc@adkZRIk)q2P*Y}8^BPJu852pi!cCi|+ z{`h7fPIhL>a&=;_j9G+XmDfr@g{G`vysa+R8uqqm7eTq`u6|_9LJB~VDVD4cRZhj{ zb;5y7Mr2BK=??wKn8i$I^nSiZX~RKS zYn)xhe+EA@&n|YZAn|9$EM|-z7HxUMICjn=dE|4O-1Ct!3vsun9U!m)9=Qdf zJ*f_H^*K#bX1&IN_l#LcX>*{f!ZX{)EX^LBhjh^25H{>oom zf00f#*K0WV5*DZw^fJwfPjZr!6sJrP4zQ^s`WW;yy;O*I|X2W|Y5d|88 z!7j62E&G`<3qg?$E)7H&9t|`AH)8jiCV+=`*ywrS*FyRUh9DFj2HIxqs8xpB1st+8 zIP*=koNiT1=B*zN}H@q23wl&75S8|N6jZ5 zSUq}wZ+&635X*e*N~y&vC`uwv1+|qyjs+mHru8KEAG2a*c`I(6w7q3Hi-5E&YPR4o zvfSTtf({t3mVJpB;Ch}+ZS}!K>>NecWm4`NHVf+Sfm7g3N0|xc72nF^YRbFlf4NsN zhMlk0*=5CKf(-Y9Q>H-Idn7ryrt&Of7GfEK(Qr*^@Zhk!*Cc5-3Yvu7?gu)B9O78AYG z0T3&5rP^BS;w5mVv-RjwSCC@TuF}^He!LXO7R`vJj_*l|(SRUT%{Vw3{TfCC#T zkv9~Bh^K=%g^U)0ye|XE7#T>S|USr7zu#fgi{x+ACR}ybkJx_pH&{5;vW~SN^ z0uI6VZaG{$@7UC*z&*>Dg;-VyfxtIWx>$E*VHgXB0)J}&wbx|(TgEI#M(1?=kAQB} zeW20-;9el(g|o}B-1*X%uuHHNY}_T9xXGL>-Z<_O*42tn=D9u`fBwvv#cU}qK-(n` z;99V8AT_Tc0W-*i@OqhV@sTl$aUT9A?Gs%X{^HE@l0vbvrgW|H1fxX-DlCsBAAROJ ztZM2i5zSRbJfgPCaF?GMvk=Ruo>NQ`PnAQOyb!2Y(Dk*ttFu1Ln8n!U?e%cFt67@B zxqu?;6fck9PMxo-e|EmbOa}46wg~Tt@6=U^eF87hwk8FX>T1@nF>*GEGTHGit1@Km z%3fn|T0h(MJ@0w;Ur&fxK-SnfoG&?vg{GDa_ePu3O5W!5EMpeZdXI=CTQz%;2I#MX z1K{8Tta;xM-}!ma`2x-!nT8pT|474J{{x~E#B8hy9sG`$rNCY2QmCh%uXf%R^vh9!Uw{K4XnJDotBS@ ze^mD$V%LH}f7nf*JJHRxN463^qBW;BZwjLy8MBb8JSqb>k+uL%OBKLI9qz!i&S{?y z>G)g5EF?_&n_KUt)7b=gv0e>+4zN>4IJhoa&>6#>9D8qpmzXC@)`{~rT_)Tnt37~X zA!e0=C0UCZKJ4K88^N)X)l|2*81|!#S%|LyCvpj(f7(2g4W9HmTOIJQ6YE7}?IU9r zvSjcR6QR1d&ZQZx4f_PQ(?_w$J-_~zF$;-E2d+QUX{l`N=XMEm*gB0*_jc)L8MBZY zv$jT=wH_a3FLROW5a7ghMDW`0{rEpKW--;Dx&Zj$_FbN}rcr#zBO|=0?ZD?@#w^6N z<(d*Ue^X{_mUG>wmkL@Z2uqV5JQn_lish%Lmg+3?rH2ZM8!A?+t;GzHg8YkWQ;@NXHj5Pv({v^9qef1QUqVnX*$O~>24*7UH(EGDRTf?J!} zOK5Y$5A5RV*t!OnKGHQe`;jpVaUL5OG4IWN_+B=)kvl+J#@`NokZz9)p}U@`tsk9+ zmCCNkRw|D^96XkCy$4^y0#)_Nw1u}APQ6(HG6J6)x=mo=z5eG*Sa9blZGhCBJYKTO zf8)#~xw*>n0)M%N(4QHzkX74b(o!rK?VZ;Kc`C)Hwy>*-q|fv1>(^htgow4RzFm%U zs!N1+nxnzd!p&;m(&a**URHgJc-92TRH|*4$?#%6Nb}4M?6JyWxjY{3U(fIQThK74 z3Uel@R-7vU@3DQ!?3|9+DUa+5iJ6R#e`JJB5b<0a0EV?}nX-;r?2^O&`es_s_x ziun+mHOb?*_muNa`2Bd=;E7%T4Ve_+lSL;d>kT{(Vbf+2FELv_b?S4>_-i2eSK*e}7}K z*Y_Vr<*yO~v&Fxj#}xS0JMgLJ?$0%C~B z|6}bUb~e?q5@Df+tYOJOoe;-ef1w4TD_?Y(Kdk#D=vLsGHr4`$zD9FFUo69B++i>k zpGNrHx`?&oS`>GqBzy-Z>GCW$E=WI1_icp#|E&wU6*7+}lHo#zNGgS?2rVCDY%1mR zLH_?-yNFxiEm)J-%GP>@HbR_-hpDnD@jurtVrQo)7A(&L)FwXve{c0EHD%zW zmiuk`$iIL4`p5YmGZ)2Ms9UC8LGFNZkC!kt06BccLoVy~VOdBbmkY4vn99`PJ(jCn z7w0d#xH{Y=k^7$?U$uOTi2Js|@RFR@DB30n6|-SvmXU#3zP@f2>$KXBKch!8VT6%kCW)v`A{l=igis3NY+@(2A-0oWJD5 zXp3PpYnPl>uL!L5;Br1NEM&p_k<18R!dZZ}XfZihx$P+rmVR*;ZwnS;7_OiuN}KvV z%wCRA%5vQ^&i+Jpd5rqck8j^f%mC)9z4C0;CM@gzOB0ufn_Bx#f6Dybu9$%beJS{! z2*IE>Tc5nh%s3we&+A5h$CdmZA;gQn5qnK*T&#=`Fq>=Y^_CjT)5uAmx5V@!CT4J9d}}~|Gc3l7dyX1#)`Pm1oxK0vVlb zi>Kmuy0BqbhQl8dFb5#MRyYdW1abMlU8hZ-mOBa9`U3mk4GVeUVb4>Yg+Sm#t9JwJ zXI}fIZr487fO#1f1u`!ij>5BwxA|H1SyVQ$fonIb z8NuLl2B-V$cW}{&416upDfI)|Oflu}Wy9ZA{rrfXzrL>DgXB6^&&5ZAa%p?` z0NTvDC%&sEl?%Flw<~0>M}dzxV7A;k5Kuz=K02C5|-gEc7PQD zUem1j&js8vn0a|AugE3S_|vwaOy2IyiiI0vo{@4zp!A}5<#Rl6KC>+-k0%Qh1RH66 zP{%*wQupkdh4{{){`uYf+qy;U>1xzwmQ-4?bp}hS+N$)O&4Kr$^A?pmZV85HI>VMs zCIls!e^r3ij+ZE3y8V9I7L_^n`I~7VJ`IHMWNpwG26*dPsns8^Tf})w1kgWuYy<`P zkgA3iJ1xm_x?Ucgx2UW!H_u;Zntb?p5~#jfUuREc(7gCv`{l1czy9)D%$xt7Bu$Mb zRxg7YubLN-(7Xy*zns zf9K%+msbkm*I}9G^kIb9%}0iXG_Sd^2%P`fsT2e0o28TxrS>JI_ik56m7`fge^3IcYXD{JZ>;bifI?YI+Lwb5yM9~0$H}6QU3Cm1}e5@Fam6T{tQ&-fS2%o^*PYjD0_hH*x z*IHg}k;~3!>w643Jv+{Qw3Q)e?0>Xf+pb(UuKXqHE`E+Al8FJ|vTbLA^Yy3Le{DN? zYV8*qmm~$V_F>FE!|R<^i#Sj(Zy!@nf760vg$_u%jX}6qS6SmVTYN%`lA3aoE8(iA2xpxN zib%5%z5{=JdVR0=6Izh3X`LtSmWTP401%<>GkkrXZ&KtO#$c( zG7Z8(HN=CudmrNeB&~w4^5W{h%XUBQ9OCmCX&XUG(gM9MYe0*02frq3h_1KJli%q6 zmqTtYsDVIuC&gNon=+`5J>L$cjtdR@dOm%PXl`oN*=pxQ!ak$g5G?$ra}Hk%nO-w$ z2lXQY72FE6z9*J)f1Ez}CBa4jlU^1Tew`T|RnUCKT9U%i^WN3}ilfWZm$gC{jn}Vm z4^xHQQY%{nunyi()941q+K26mPc_?RagL*k_z-y}<;E599n^Ufp!DSJOfX-T%OlOh zR3W8W#rO9h{n;+toB-BkK3+lFoau5E=BOfS2r53lC2JE7e@lD@qx(8M%$w+Z{>j}` z5vaP4RI_@zwGC-a8DeAPyb&0P>t&nn*I#W0A$c*I9b?aeKxA_z7*7e}5sC4Vn8@c?g89_T z+{)j`Lh94~f7#FE?1TtWigzaIkugs~D3e5}Rye5NF_%NYXHha6!mM5=}W%09Fy3wJFtb21P@V(slc zuwvpDV%7FG+Fi1C!$;Zu3+Od%I^}+ZA3`XguNyWHf92|Onm9E`AyXtq+B?^Gc-Dsy z-V90TtBkZ99b+d~uT5mLZC4)UlCB@HLS8&7pKS&4pcweyrnKvTw+%@CJ#T~If8q-1 zULn7OBM<7mQJ)iL<1rRhr0;Zj@Nit;L%zk?e40Z=riO47ojMaVhWSIxDt2ihf5M9R z7SC?Ee;-0JY+koK=N=i+eGMNHU)t+xq9?4FMoL0*-m1GHp2GEK_E({`lkS`^qfDN# zLNelz;%}ffj%H%=WiDs5Q9J2meSL@egcY-8FD3j)!=O2=TN-aSwRQ&(p~@cS?n58f7p@RV(zEo6n(i^R%OIe7EOq)>2{9) zMBR4bPc@hQA~g4;LW9ibXc9h4zTDA&{rG?9a|lIUpb*FV2jE<6zAF@h$S=g97;9UX z;V%zZAuYO@se|@SLu^>-*w_a@^QCb%l3pVHr{ybhK8A?d#U~?Vd2PP0wMJM~?i0A0 zf73*|-Fmtko^;)&dh5JeeMB57%hgx&|Q2b zjtHp!ElvPch^=h*$nr)hIcxw!o&{HH>0dHbR%KHfKbe9fsI@8;ZI z47?E2uBbw6HL_1QNQd*VVcv0#7*?B1f99FWr7HRBr!Rkh3SnIWIRO|um(+Xr=5NZg z8WTQBB%q7zf53`hUCD=UORHdivbC%+yjh^bMaSUZ1;NI#IV_}-u_ybM{Ae{sVv zXOoWJ(p=nF`>4>_<{eJ=u=OnjmbY~ms@q5NR|Pb(x(Yl$%k+s# z?>WSfoCpH3la%C3HW4Ih&CA9a!!7YB%==RY^B5?J59SlH(n+#{5-@E!Joa-vKfT+8Cv?9=ac~wKXaDV?mjOe zcW<^ETpr1~9D?_YC+I3n`1g9=@Awi!V5yOq7m~oe@<~~se`fW|FN7|--P$}3F$9-y zT8F-8FB&f-%xx`y#hwuRe=S`)GarW-5g$qy_1#;$2<6rZj5!Ue=?uRfyv#;_9%4v1 zO~VH!Sp%mx5C>7xvt^yUz@F({hZuv4WDEQBGT#f+K>vJieNr)elk+C@!A@gd?=t9? z!I@NGA5aMHvlztCkTc#9x4wnIVu8Y`>oLr@p95y^XE^7`ytLk`f6N|-7-KFd>0Viz zYoHBBpI~3dNrd5FyDS6y`sv5Vk0EzRrB0t62=7LQZm<_kXdz!f=M9gS%Xy&s{^8r7 zAMASw7X$;u|0r`l6N0Dq%uOoQda`lv7n6N?3+Y;_6@j5A9wQ-MY4gQ3+3;f!iq=lf~2Ti@k^!DXr%z|$3Yt(E5(mGW*lSzj1XJksP z=^_#V>hF-(g0sPpAz*zbQbM#q>ghb|puS+RODF}Zkb0?M+ER6~qm7c+-tew@!}CWO zw|XfzRftzXM~r^zWd*|F0GU(#zZ!w>r)hSX9e;DuwQaUU2q53s*(!%}f zRc|3)<@+7$SYvVFHPTc|-fwB+EPq13MA5gHsIV!O1aW%I6ZN45T|pBhOJ!TSjnj8i zg`k>zeA{;JX6qC+g|)`?o35qfwtV2*S>M0wTgXFV9$p1&**Ajw{z;KSy-a+beeNR{ z*ZPGlBuRIFe;p`XZ4>bk70AQ71q$2S%-(0S5RKSXkq(cO2l9J}<=aG88qB)VwfyH7 zvIv{`K3F-3q&6*3LJYYGpKos~0#x;<>XOg$tu6@czIx-VU1ncit8_Eh z$B%!<+#*TRK9e{4Hzn_;VE{TglhfwQRp7U`AXIzUe-^(CJi|l{q!i2{`g zZ$(K@TrnYHO!s=JDQiD6455ORtmyWK>-XS__!e_3Hpgij3ijyHHfzgly%`cx8L#d2 z?av<;f7P)Lr&?+HT>P=9vChif$Ib8{uefhBCAGhRh16+urLt4%6G6W~cWh^2 zTiX$7$KDaeLV~_mNA;bHPx2akEcJHQ028YR(Z9VT=!eAoB-GQfntk%T`k(C=&`j=V zblD&9gcb78Lh!0H2ujThWjAQVNoV#t%`{)eh(2M($ZR<$6~xojb!Ld8m2y92RX_&B ze=8*n;W_Fv6786HRGrJS-BRgW*o%|rSb z^7^Xl0V`&B*R(ZMM>Ft1sR&)!O36NrKiO@7=@V9nwUAmi^O+~p8L$+-$F&e!cLje< z7vDNxQw{MgWq*3@qa{&Y#Af)8#&_U~8QLyhYp`u*NbS-f5@+I6(-9Z` z_WFA8r@dn4M^;`6!)(NLX1M=se|(g;iO{+{9{jXd%>MJrko;*ukEx82$Y-KA$$FBv z_rJ#VS-ze1F~-9(KNDi{M?_l1w^(i;xRK1kzJBKag)An5K_>Q@dY7Dz&t}l=OYjnC zPpaoq@A=ziAsvDfB(*~OR3ak;`3$8d>`%t#6G7i+vk*UPyU#O5?F!v5e@RDYvAnE# z4cg@%=k42HZ{LHmjB6Lc-TQctZ;p?Q`gqI2EI(N zvEIb5HZM1YPkV(>vE=n6CarqU`f5_PoVD!uOZ(y10`jN5LV7+|wWF4H+f*X=TVl!p$DI3%e$n~5#>l*XSwGndZQtJO3S%{A{e*~>51V8h=U{b5^ z%N`5Kvy^w7<>TcsW>Ztk8;YpmSWV2lIjFF&jQ3rmwjX`O2Wfvveu zYU1mNt+3Cc;+txFSSuua_54_P#|ki2y;5(rIpzSyW0zs^PiuwvmO%b%od%&h>#4}v zKAd`G_*tFhbwS62=mdF}Di2vYe9~=YS+n@FAL(g4$G$YJfBys);$NE!=xp0+;=^#f(m6te_)#+AGFe9f1KA#dEbBR7V;Qa zXYU9W5G2kL8^mQUqjMQ{`o7GW_{p;40vz(CLXb0$OgvU;-6}z|fN2lCB=~>91x2__ zKJ^bQC|R#vHaAg0jC-tkz7#Y3*K#q#dzbp`-mV8R9fBLup+8`dCstC_sV9R$}E-1()PQ}|~O7|;{oDfVB5GLeS-Eh2jf{XDvh|ZN# z$w^7PJtgBPp^^<2+06d<(u#Hg}|}vD@ON(>Kh%+j22;ht-I) zx2`dC@!qgsF7vG7qxkEk^yqy0`Y~jVl)u-ve^W9vU$I8>^w#-o=@87kZ)1@hmd04C z^}ZR}1$qiB1Y*h?jv9dq+qhN10@h~@DU>&<>f23x#%Y?XCvtX46%4aYotKVR#}#vo zM8ik8L#8i8k5aiS`CM2nINL<`QO%!Y&e0ki{mkx@Gd8oPdFt?Ii}U}qUF)u;r;dCj zf53p@alk-l)VHLQoH?4OpQ^Pxoqr$ej}=A9zASAEj9mqG8DSR5|7zF%!$k!g%uXzF za0fN;_gt)-l#mpZies`DjFXA?c{ zP4y=2a5kelMNuTHOC8zAdGy)HysP!he>MY-tIPxZNk#+!IW3)=Y~aU%^jWc-6S&DN z#o9_ITa%>4VnPfv5Yu-~q>EvsCG3{uRfn##5l|yXon$JYUrsn08t+{uW0UFz~GyKi_S~W)`#P}3}M-ee@0bc z>9eEkI5`#wd(9-)D#2>Zz&`ydg8xcHE-h{+5F5_5 z0W9JQG3DO)X2Kkm>>j=ly?lD)e-H5eNCxi;dFLGDyhfCT#nz%ZPXLb*^d$b^H?qtEw5>(XP4E2rNDnUo28`Akzo5-|A#jD2(+|ifAg@PXKfJL z+Np}%N6}P|Jm1LDCYLZ@GT=NALnz}!O$In&^ED~_0I@!%McU+ooh`RrOUZHdsdeia z+S)nVlI`(aeerpGbMdDgN{|BN-dVFkxrz+RKMG(V$0LV3@*L zU-{(KmBW!QvEbYK<}#=w0U9?Xy~W{@zzMa=?6a?uLRjUIxW0_?@TjBPDndd@2`7$) zDZ>H-XpSNE=jx)*UZeMB2vPeK>fN&f1nD`>lfk|ODbemm`OHMqe<7UN+a$Dyc$LeR4a@{+ZmyFy)n80?VTnJDb{w@vRDa{q8 zKEmP8e}DVkK2Mj1e^%B>ubyj|VdpqF8NGH}aU&#L9%?_#`d^pT0(W@HD)b(6BB!V1 zmUet;5}#+seVFBv{HUSBl8Mfz9@bFUSecUAr2?^+=j8Y8`(GYAm~zeGRLTRi$gxJ! z$We1n7O{5EUS5j1vr2iSeYD9(#;UyP2*IgR>sTog7$hB&KG)^4_Vf229`1Bf0VoH&-0ZySDO)dX z=F}J#^jU2MCi$co5YK^(4F92MHah}j9@Z^Ull|GleR_~{P!K$pj#S{M#PP~QR%n~W z_xZVk_Onl~fA)y@7E<2MGsn6s1Lk4r!%3}KdXD7Ze^3O#2L@LeDip9+fG9+OfX_^< z-YFx6=aBhfmWzBa=-nuY0PWPOVzsRaP@ceLjAGhvnB{V}9$7kI8aTR^4o< zYGW;JKzKXeX3YFF%fq*j_bimwI5RRtQI;hQ38Jq7AuHc0M+@uE>K5*N4aR%J{jg=ciddGpIK30@%$CgJnFR?fChE zMYZLWp5xYsSuRhzyY_bU#Lyel_2OF~d`x*QBhLd$KL7Wd55fu(skKzB#}<*BPXbo1 zK~4MOQ^eIMmwY&oZ7AfebJy0XU}^(MCZ{rSHt$Bc$bWFA1t!xt&N8vzGKG`@0Vgl8 z#-(reWt2-URKU<8nO*fKAIgL1$_hUN7o5-XGoQUs76q2hsBB28%KN-Nb=BM%>ut2> z?eoG|4Y{s2P-Rv!^WNofE)S@DE@9euMh#vFE4QB6`Kdehu{FT&k*#YYLtR^+F@qbv zYS^k-Pk$br^RHS2K#oa{u5j=xm(%AHrdC^)H;9(0c9C4I#oW%TlL{g9YLm-w4cT#b zxD%EJ@iOQzY$npP^dcocUw}HvQ6V}Cj~agO^n(0{2$f?m2mE5@{R|YGbh{9vj$!A( zAI1SQtvG%MpDGH}H{#<3=%2rhNc{*8-AK@Q;eXb3lfW^>JDrvL$T*C(%d?IV?fSO= z``7k>#-M>cS^`^b^8mIZ@r<5XoCYlO+}c39zW(_sdYA>$5Vrsbhrpt*1yrnBUgBNs zK7GS150Op2&&X^rW^%e3P^U&c^Mo}{r*`Zm3UdBIX! zIDg6Z&F^8E(@yqGeYmNtvgH7J&J+ZCUnPP|XnF*qzYOzOu>q1(OC4KU2ozvzp@|_i zHsoy3ohQTgH~Zq!poMs#Y(2$V+1eA7A}VrY*eBJw9(R#8{q52~Sr@PPn;_n2>ZG

BZ`&AI?v=z-LpX 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

heS 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 uvPSch|6-+GmwQX4aj{kd;CxYqqTI_0>!Qc8@8e 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

VU~UO?hB(svc3{Ic7>Tb}GT(^J*RElN88 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%0Dq9l}zVn+UkH8(Bo&NIbx06?| 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

?2d*=>3tvwi@sNbjHY^3)@Oi9;TL^sYJQ*y6y7 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∋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

q?oO^JMatX5oPzgF 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

6pQY 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ð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 cRaf$H>s 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

dh6F;@b6%yxY4TLVs16CDF8C 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∾FRO8l^M|Z`LsQ>T^Shx~m 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%0D1bf9chb= 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

s~KZz5=*Z_AnRQBP?p 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

-3<>M9J|2-Wm1NHK| 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

0Sa3jMOaFjK^R$rp%~R(j*p436Q1S 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�n`8LAQd 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
%@n_y5dn@z-Ns$V~eet+GolP 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

vi>;S_>edBKk&J8A~O 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%0A3YBqv*|A%f<7f*TJ5;{vCVXg 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%0DfkHbi z%2X*WjY5Jh#tLP#vPxK4=@cPu_R7(7=rLGwx@_i?7q48i?Z|&NtkD$a!jPmQ-bC6?|4!EG<*4bu1aY zx>rGm5=*sc*V-(*S!+2I0ZB#Ts@Xa+V09^07nGgVt_Q-`i~7BxjMmj{CJj`vgmi%S ziN+)1JBY}3Rj+^7rfb8OVD!`U<%eWvUTezZoL5#^o#t_(bgm>%VquCTEgk0hooHf9 zx_93C1YC{~b8ufN3OxSaLKJ-Oh0O2ah%nP6;gTgf;YyZe%s3YrQ@jL)E6sjnekf5k z=>6;=Ox#5M028r!Kdp`UG9hyS6B%csOp4gbQm~XKWubqPq|{OgkyxzT-e)4gLemSd z$rjX^`7%wQ+1uX8`&vX|d=Zl>e@60{pNO{$H~nBs)+>+n0KUKo14AX1J!6>pVAOU9 zecY&52rRJ!aq$cu&NPdK!Zs+D{J`fBz3T&#y>sWalUEDW>6zmQd_6RZv}2FMgMN%o-m39U{$_KBqmERpv=S_{RiWctTao8H7Sd{7 zB+8n-(7s5DHtWX_qLgAaEc1&DeUYJ$Ekm1ikdc!N?RWQ!2t8yGTBcc6uu^5Ev{Koe z8EG`UoEJQ)w2Al2b;c4>n1}@oxtUFd{?Ipz^{Ri^G8`M-3?-UjrJSHc=qW}+$%ek1 z#68@BcwU=<)@~dV{CSg!5d$D3C9jOG5eCSOx}B$d{Jl}(CILseKxm_lZs!9*tXscX zzkC>Dk{e1Ozj(xX3=Q~fw_ESfqD}%Di^vn-wC9Vw2D`t&5jL{xCmb`2!|#-Co`u-6>j` zs0dL6%_C_J;FvzE)0P!Qu1vvMT9&y^i?k|CF0;&vs?7FGo=5tFg^~;BX)Lsn+lvdc zA1}RIiywb_^}|omU*ATr-+c48KmYm757B?OufF^4n^)id?~l(Z#>cZVOQnH{&P|eV zEqPuVDXQEkWZKwgu2<$mw?JQR;k=SNQ|!@n>VKNepU$Hsj^jUmJ$-GCw9GETZVpA% zh;!3Bpdds@%?)>aS6d>QrDPQc=6dfpDZTS{UA%3U%jUZGYdz+BL`diD@J)iYUSWT> z@U*$zSRq^#DpA^GR>lZ`7RQY1EK^0wv`%+HfqwJq^{dyffAC(~-`XvK8Qtn=>p;U+ zZH-{wVq?yte{8ST?QtZ*D^iyRexvG+W8b~@^wvz_cv{K7epa%)}!}N zSn=ESy4m2Q*Q*F*yS|2o!=tl`&4qsn;`0v}RFoNVcH8q8tM>Xyf~`z9Y`?eX7)4hH zftM!ty+2x*h$LV`eNHObr;nh|&I+*>qrC3U&RjYZW`DuwotrV7G}vwzcQUNzSuxkG zZJ4a_`(W(+*zbus`FAH#r`r=DHXHCy0@y*j!CFz&_lPhsb~C{<1zF zuzf1BjHv=_CC-(!r7YsI6e3|o#giQV-9Kdol;fg#zo%Im!VVgfR!Db^KwGy>7zY~K z*D(!tlCXH>{_~e@)BQL0KEmF+KX258(igE}LVzh@grfx^F>MBmY4|=_5x;CEzq8_DCUESW7> zD#}8NGB0DJOSxAXE(vqz1&jG`!A4n5n;V3@DS)zf1f9j%XL&-Ox65v(yNv_6{RRDVd!x;A0ZbOtmyg~BTSv=+cKBeF z9J%TwIt-Ch-R&WQlMyvv2noOPGl7_r;9l#RIB0!9h&anW2-E`e+|Mp!j?LdO+8wQ%!%i>_-=v1M`;*+1pSi-e`7G;E2c(ao?O{@IJ^sIUF6yY^p`B zg|MvBRjy^4=QajSnI*%P%TR5b<4-fS3r{&9qg~vqchv)}> z1d^7L@p^ISNXvixr+!xjPeELU7a{s0L_bl8V$PP~MW%QO_AE1&rKOUYDkZa~O3Xe& zl=krk?67vx$$CaaM&i(}iG^Y1LhINII!Hggji4*x@m8LZwD|PVzg+OXT=4Eac_C;@ zK4PW~9qc~4w$Gv&(`U>F1U{YX2!v23h?32~u#w5ew$`cqX^mg`sv!&0V7o@$xEZ&k@sl_q;#d1FAS z)>xEWuk3$(1uYm+8f!KkdqsVhSANQgd?WUMvzi$%wRE$^3oivD{h6+HFeUpqy2Kd& zab!C60Kq2cc?i*SSLoo1_$9fY2Dx9fsq~?_aTvExmOb*Z)Mxl=WFI!1qx0P*h7uMJ zl9NqAikF=17aQh_b?3jUsy}IdK91s(JIeY%>)C%5S1Pu7BC3MfB(73!t&$adlCqNY zz6uy|m1bAJ6WEzS{}R$`*GAZl(>_n+%;yP{7huZ2cc%@QJ1k6gHU7U z*-?jZ6MMjyv7`bRe~e1`?&I1ldX+UtGW!8cqXY|#F>bjMr7n1>a>2R4@99iu`_%w| zwXj_;x_TF8=*{|f_6YUwKVt8Yuu5!~;F`f2N6T7n1U#-ijgEYNql={@I~c))L@RUc zC~v49i;{ChCy<5Xt9wZL(8R&-M=%lXaYU2S-}GSW&XN>de~%sH2n2*rz@4HY!xtm? zCN@c(Z9jq*yYgWk_)o0BS;nu4<%Fawu+6h-g0PJ}y#MnwIK9Bz$&$)&or*%096lnA zD62Fr5}o96wy)PCWIeyvL&kX1wlxL|Uw!kgx6=tB(Qicap);$N_A*8m9qzYB^@eRO zYy8gF?&GwHekIU*2vmQi;U$IFseyMpPAd&6 zg!%RhjEstA(0V($J$qR1Dbyu;H6#c8)SST7B=`?IIX#`HkOl`04L-=2DfoeT;nTsp z)o+KPJGT~IJ)1nz`^!kN0&id_`UJVv{$uiyS!M_Ke{L9K{%Va8+LQ4#ynB6sMtzt( zf&1XnA8wr<%^5jh(^wSDlrpx)nnWp?+Nw}o$U;{+Ph-AU!rztnuvmAS1v=!jY8z;{ z#)^qP5+H^;?;2xmoe9qi@nno0n43|Y-kqR>H-pkNvvHc}vZ`1b=Sf3J6*r)k-Xzxm3>$D2NH>3)ZkUx#l)mrqN$K1r3)n%E-R%lh)f^k+^l_oL# zk;`42$LgvN+s#4Qfm7PpBl9%4tWuq3MODC7PEEylmgGs6u_{Y!ny_>~VT*fODGY4R zS3-Z|J_GEu#+Uqo9gdKvHDS38mOOj_E%V8ne}T8W8++JIPl0LdIzIfq!1VC`t-$m= zR%Q^K-luxdlg~!`K6!%FJO#)EX}OFmCb^aHUKXpgtjbcvvDgd98|6gX{VX;Y3wKF3 zZ}Jf}8QD#975(`A0RLZa;P|&4-ts}mwzwXr(c7_R{w!LnvnW1}U{{K>=p_EY)8lAO ze=mOED~_{7*#abuL?oHL`03kAp_}Uk z?3Z?a`>i*eT_t-#P?i=MW0iEY915X5>*Ti{Hxc9fv=)<)^e9v&7Xm7qC$tW+q5hx(4o>e+2*T zW6pru7&v2#uC_rogu|-xaF>om>&~2XzqK#A8+)RW{{X>?@ZQu-6z(gdP!NjGs>%CQ zbuuDCI0_)`c;Nkt)rOq3~gmRMss zXFTWNehQgYxeTLec}K{5e~e>?iS)LVY>y! zqS$-q->?cs0_xvS;J z34izhvv=jqZ5vtst6;rVQ*ug@yV18N$(G|N8P!e_mF>({YG;bor;L~)e>nu{*vaO* zZyx{%o}wg>5-tBDks$EUX!P&(yWcG6-}9ZFYe=JoDd|i<8ckxY;40T=9~+^Y6uXp& zDy1nzt@T25(q;uJoEFb&sZ!yW6lIhaODAQ$K3n}-Y{F3Cas(u#IiZSa!K~)YLMo}_ zaJy9Vz$W}$M5%J`3}PmCfBA{1HK3g{f%( zSn61MORfmBkpFeNYfoU7RE`JFM!8V}Yhk4qvY4d+37$jC1yh3Lj&EP7Ji+@u1g%Dh zS~4ee%0Vpq&R(9s_p~rgQo9hM=8NLaM5@44KS%lchuTTn(IRWU_4;`@Y#bBBoOBp!O_kwLU}`ni z&R~@rMda3O{Qdp$fANNE&#Is&eqN^jta>;e+j2BaRbEq);_2yW^`U#V*h%$*9k9h< zxs3Upkqt@}LTai_teP&bm+SsCdSCqe44c_r1kWX1Lry>Rb`gHm6cQM!U)P2o)jzlP zld1|y*ty>pelZSOaa#4{?cJ!qa@HytWLFc{_cOD8-r}ztf2VCeC}sb1_VvIOA8dE! zMOvPNK(_^@&r-%`DdR3u#!ntBLl5$i-{L}UP8m3IAx)uE6WlsMF*Z$#36jRdr2W|1 zps9uNyxlA1xV>KcLpiA!eIh$syG^GNPdb%CAIlG+7S*NJCm$$I>6Wu?x2a*(Y`B9^ zkYXCkT!qxKf0aXvWhIjOJFB;zSVma|&UVqev^Fe-LOhApdZAL@s+`4V z@!_-hAU{nbg(KK;VlmPP<6bH_OHu%R|&!qX0u=YM703oZSv`sFZuFWkq9Q@Ke|F)A->`8_)I z=?zTF^Q^&%SIq`Sj!iX`P&pumWCtO%8F%N_5>MGLkgj41>KMzEE_70fyU{MxvIz~> zPq?2MsmmangrWy=jt(d)VRts86=4ZS<;d#7e~a{$+o#HY=wpFvbw?8S1|cE^TBW9)!2WwG zfBQjI->VKxK(GGL)~g0FheJVKm)L~xeaaR8Iyoof0+ciCC+V?88$6#o!q=v zo$2S&&Kru8t8yu&xnq94)8PKl252t0e?Mt};jk^6FqQdmq^8hedhoq4@^L3+>o>(m zhvl?E4T-C5#?o7p@gQS&4#>Rpmwrc0>{I#OXh)*@KPIWG@~3Fk;ir=?)b3Thn7mBXPHF6S6gf5x^<*h{w$gb6Rje?9Cx z?z}J`Ily?2an-y%n(pffIj)Q7&p1~Z3RD#> zFK6AAq_yym=V0T(q&$Vus9z)}=nQHzfXoK8Vrc)D&BtMn>NspbbBig2mUBimQ;-6# zL%z5IMqq1J#Ff4}`@Z-3;-~XEf2QP67>ouyAOtW6m0urdo_IT^=>a(nEqVc zX5{9sz94L1-{USh>^?X}cikb|HB-i+I`myoeDepH6rDFMy+u;4PF>Ne zXpH?B=mNC5TXqX3wn@=1ey^mI1fyH|9&XB&gJlXl_iA5cnPuo7e-~|^g;9U4`m$6} z1|g8JZd33s_Ga-XR~-r-JbUE`L#3Q>1Su#Sg$5fYjW*h!%h6WFwvE-paj4}K4(yG& zep}u3S?KtYK4vm|nUx=})UaQ5TI`s^dRamqFMY4yvxhq2ciOeN{AL5|hrt zgOn-od8Tqy{fFm5PZNdO^HO;ys_V0k;IaOxH_ga3Y3(UK%>%x0MbiSppL*ILy_z{c zIq?~*JiW;cjk~1k*F&X|A)3sJbk_R_g2oRSe z|I=t(M7b|ow-yF-?y`@=X&g=9RL0-3KOCjTjf+%+n{Dv1vLu!^J)9p%RMb=VXxU2I zp9_8W1Dck$&XdWG{#lq&xc-l#jD13T{+Gd@+56C!e{pu;C~DZp?Oe#G>mT5n!TZz3 zvx#m-7Lz6$4xRc_+A_9~RMtOK;Yp;olFGnD-?(i0@)>)&v?#AzlEpv`&Bry%Z_|%W z+2qhq^Q$LA_3N__6!*N4F#XWG)VhcA(1`At7ePw%&i@;odO_q#7W%$@^~AHECw|2J z>DAz?e<$!s7VdLHLgA8fBFB?J4X5umY#80se`V8VHH~<2mad*H&fett^XiPt*r%~K znG^8?-#=cUlzovtc~1E>thDCFv(W_eXVQ7Tz9G5Rl{0e5SUo??#XYH0mio|vL|B(V z3e*}Poxsg7dRC?=i}tbEp;~#5h&V|F*q^M0U`!!beY*jJ1`Y(IMi=1OYC=DrNm_P_Px5|rGE7YZ8FhP03=O#?X z)8=7U7F&Zu#~ zN$m)b&I)5KX8sLP!H~!?c880z!rTpF;rgAU%PTHHu3c5$Z`AAeTqyCkQbf3D#LV+= z%R@s5?i3+-w+NvG=h9KHU+2oo9BL!E@{5@ILx!=%#@}~C2!seL!hz#PVq*o?f08O_ zEH;PtD1q zm-ey>>aF{n@TaF<@OqJz)6r-+o|Lr(c{++Q2I**s6RTp2BIUWVMGqWG1a@k(3)FTA zrBGTNC~lFp3?U~R$H-~F1uGe@W~XO~JP) zbELe^gS9eBTH*z*T>E_r*@4d9^lYzr31x<lI&WV?Oku1(% z%mXU;zOMWT$9Du(o6gRG)k;Ha;-URwxU}I>t8rwrrzuafUxw3^otCnpQeDk>X>ux6 z8D%qfRdB1ubIoZAdC2??f3J!`=(YLuV1R~Emp}{Db_p~`p#{QkSYC&b1RBRtZY0zW zSd|mE80m1UZL1X)2CTn*PAwCHdcji*uGor=>+Nv(F2qqZ7~F)t=Hvy) z^^*7VZg^{mTno0!aQ!~!54XMIDSCgr%5nOMd5RzbUAl@Axm_Xwe<((jWflPwlzXUh z&ZVN9Y6NoxZY{vIy^z~)AL0DfyT{mG#z@*bZXPW%TQ2A2G?;k(BUs9mf-aYGB)3zw zUL%=PqZQEBP$H30eo0%PawkA^x*n=75)xT^gXz_s*M3E1%cVa{9a&Dn{*;$}mj>WO zZkNlRNoXZyxy1rme=QUdiW+3N7jO&}b}`>}>t!GGydZw8U#aPg`K3AuYG*IiZ@$Z7 zZPVGgl>a)Yw0@cQhl9(^4E;pe>?n@lX%)~|lr4$BBjQ9>&r)H-_Zl`V!7+5@p4g=43jdqZc915d?f6q{crfatpTf6|WQA`N} z%>r+h{oZednY{g9{IBcRd^~9rkFKfh)oNsl%gS!lw410)@}?%;DN0foA%QUJ#HXRz zx*TM-3ZslcqK&E>D@>Ldh^2?BQY!OtqV;Veu`Fb1$Nqc6Nh;FP6n(6xx@y*!$omh| zDv(z8i_1YXf7mK!Hl_QVUQ-yR_2$68nj*xl=?H@;-wwx^8C^rU#WvTIUstE43U-RIzR$DsZ+^%w zUe-~~VT%9otB4&#atuZG=i%_vyi+wWlG`ai#eyk_e~plcE2M}67$Rl}!5Ub&)RX;y zWalE7zI!R(;EsVwbCkA}q0gh`J&MpVmnr4PhWPTV3b!8(%d!YU$nr(y zV=$sH)T!nf$?Y^$DVNsfPUcR@+#pGD?)*)i0~Tl$7WD1V^L|*E&1REu#)73}ItY7X zuj~&ee|KB&bA+~B?yssmpyS%m-EV{ezs7@1{5aNcm)7t^ZYKfbAt`2kxOkm1vti{U zD==k387Can03hQSG!jrF4WxEsxOg=4ef8v{EuUoe!^r<$OwupKAWdZa>3uPdhX*I& z(=?R-T!2YPEZzi?@cTSQykOA_5z~I=w=gIke+861P2=4Jn0cxTh>5wVv+r$)FOB`# z!pUpl_MaE8dLefEr;9hQKYd(zVWG<~BXJiUbqj1z=?r&>C}<1?3@MrmOIQw-@G!v} zcZGY#MiBn>`z`j5n?R!>x-VqBI(zZ=m;ZS47=S@L1qN*aBfz9d7!;M`~LOXh}BOHYh7ygky;CDwEJBMb0BE0bAp64&i|zl8I}|7a!aj!pjh*& z2ihX`ds~!MvN2sLZ(qFq8nX*63B4>mFKfez`b1|M9z@ z9t*k%=+ZhKskP80y4Uu!G#*t9TBQ+(h;b^o762j*q|zIs+V2rv<>cLT)E&Soa`%og zstm(~TLGmE>b933yc)oB#hC({f3A@aU%z?r^1pjOUpyX+br}Q}sWli2i0d3QqduN!~lwprFQLk2Yd011d*;Gt)}sluG9) zSYu7`qGIpOH^00&dpuz4vUE$N)&g7ihJC?|)&O9mm_f)Pf}|0^>t&88e{IP_HS7mu zT**SOdS`f2~2=o4@`1!#BNe&fh#9xOG_}BT{R@4RsDT?iDu9kiwpC z>YNz`oztP{F)|oBL?0;J>O6M8BkA$5!(DEP@clziG6XQ87zz zs?k&0=w7~hM5dBXt7!l-2fG^ZxKf@JG8t-7@9f!tVAsNPzv`PU<2XSvBO<%~tNv$2#wz zQ^Q83l?3mGa~2rDHOh_EHa7@ziD_;jTGhkCE3Mz2efRq8`z060F56ag(b0S3Ob93e zBEm3XU7i!_obpP%kd|4@y?-LVX(pDusk@wsE_#IzLP^YWWOd<+xn>pH4tuHF#$lvt zc#)>l5;1d%5bRzugMevhh~SjxN@?T_w?=V8ptRKCZQ?n?$Gz_m;Xuznr2VkP{;;ty z`69L57x(L!g*Tz`9l*A<{ZuA;mY!NpRqCG;=O;C28D*RHJtocmo_8SUt%HVB;|d}ZF2qQn}U8!wX5&B#C6$mf0O^YTu&lGluglyjS0$5gTfXKfHcs(Zr~e`4>iG2ZbR!p8Q`KgTM7dl$ z>xSKdR?JN`=+$!*XMacctG+<>Q-!Ih4sH-^*F1xtk^KtA51cbV0=kR?OXM2X07LD? zu33W%-Xx*~5;=p!Yx-C+Bovg|Dj_&}Jgg!7`2Xx(+iv5!lKquD4F-*V;QfO0JOd0c z|6uS^Oncg~y=|v^@4p{XvK=#WB*vz4(vg5X#5adj66 zwQ!hn72dm{Z`+t|c_CakO=*1MX%2w;Q3aAaZ?R@cC~pp8;OlxSSO4#3U6WQ|JzkKc?a z8^UzcUKLEY{mp>u0H@$gjpOvn-t*E zt$L?*7Y6ORbGvm-yD%Gd*AZA#)EObia|G7+y9#YxH0i*^TSJLN=@nH1Ag1( z+U!aWKYua|#{1hAeg10`LcGO?=HZF|e}71|)gP?cLjuL=<#OG8mddXQ_OMQY6a8hO zFGf}w#mAxFWujiadyE*6+*1}LwHk!R)?;Ce_f}~M*CgSm*&9BbIZp3gqfWP?uaDDB z8@H3@QK&!rBycXMR>I4mIj~?nS5i1Ey>{MT(|;+pPvh|1w~y=0{9Wd+sWy&OpZgQ# z2>wKBDfkG@Nd1^#pNdNcr>UVJC`Kjn{x8D(agK|bzi}jPe)jV9MSEp@J>=!v{G0*T z1zg?q=`#24srvpshmApmdFkSFY>c3caUW^g>mZCr6Y}r59W<%P8>Mjp=#B#4*vz;1 zZ+|cLUN!xGsfk;e{r=S98tr&)Xy7p0x2pHE! zafO@x8=GHlM?D{1oRiw!+(oG|ogUSh=(|K;w1%0wws}7E)AhN@8+T?+M{jJ)+Ch|%avbIi)qgHj z>uLg3?!4CZo!644LTrvkt!#r*OmHzK{ zXq;PrkN^30>^7t7-8CF9bp~(_;JTVdo%*sSm)+s-6MuZ;zx_wR7fs(9dUNdY4e*}EQwrbs9=+;P?B(I}RxF&VT+eM9=3Z zpN4L#N#t~?7Vf4H=vfegkIN|uuV_Oyl)b>sVy+crES_Y)(xs=QH= z+#5*hdjpBG79+-lbw*2}g2qNrCBej{H>io3=bJ6;%&qo$d-}cEo`2rlYzF~-?(Yx7 z^!v{LIzqI%<6awY zg;b#9Y!ZcoLOkwREPwYwPmDEI#=`2JJxVKTk59m62YxY}OX8)^uR$NB(*DaCnrWm< zBUNRGislYRTHnFQ0Eh`h3M7M*4ioGML*NNv7J{BoF45+IFjb&1t3^sWe;b>$VP1Q9 zOuY{uNM`+g4JH{OtZd+*GJQC6QHP6IRS~74xyzK*cbQrwsehy1ARcUx&M_<*7R-~B zosOCbanU2J7yHA{UuL(6U%hKzle`TN?WmGW;%R%>eSg^hillRR_%%@JBp<}rpr^}e z>9}Q%^Yq40PqSE}pGfmOLN1{c4xobzo(Y7V7tW^qBp@-1+ke2<9>nHW5A*1+nL)b@ zT35)*a@RGh?|-@uk{C}N!76yfbrRAGZkmMIDXZYb7<31ZcQNSk_mMS+iSn|quR)aE z@g1-6jq#mktArhAvbjPwb!Dt9_gk|OWUST(#(@dtJO*inA;e2?Caz12rE|I|k#QT-8t*&P?5V+%A!j=uHpBhP57G1 z4}_I@>`&i%>aC2KMo#xrN-U>~ysNW;N(#-?&CJqemb!x7yfl#-p)`>-+yqXAQ_@o6 ztgzC0%zpv|K{!V0t-pB3)UGVG4);(DSxEF1c?vvL;l(%G z25ZGZiNLI%kkdX**1{$?Q%Q_w!rr&-Cbnc(u-L)jdADw>uRk;mrBA~t+3u71d(pfb z?|Nyt`KzvkEU%lSMyQ(< z6v37%!Zav^G>*h&T_i7wtw-EXsCHm7OD#0d_s!WSTUT0|qy9}r*4H1Gi}JP|Pcths zWppTm*HwDu1$Wd41$R8BT4}9L=M0n#gGc$E`siUsMDK8zQMkpO5HFMO5_72=i;J%X=#qY~U)JYc^ieAW7JugW+`@Vr)1sWZLZ`gmks6`iks=VBkAGC7 zkY)%;YY?_d3na8q$WJH+`^WNwoF9xf(op+Nm*+Bh({meg_igv9_145+ z4Qsj&?~pfLoeu~^aEoyuoO0LCsx9%l~m*zfJP(3ZU z)fHdmwTScxwTOb&f+I}{VB{3x0eFaD(>huL9E%C%{C?W}y1BIa(K~V2l*Tq>o!#i1 z__t*6zmY5sn>irj-@ryy)qia|udSp(?ko)6cK=I5PCwPR_W+< zo16h~j~n9kiA{fsHe$?V;Y&!}KM07y|W6Z+{%7Z#*Y#=VhjiE^Sm*XKI`s z3~EyUU{Io<12qzpz<&t?jEJO+Yl*-SrR0QSK_ZaNYWcV>C5{q*|Eo4Vx zX8?BrTvfHFNq%Za>$|M92LysrBv9bdRQ7R7y$X&4HiF0rRev3OjQihX-sycbaA6UQ zJ8X6ZP##j#TyORjZl(p3s>(A>a|aWx?_hG02FWexxVdx&nV=~#&RDGkl3Yz_o%8Ty z){pTyE==IJTpuWT__l-n_lLjQHy^%jo)51w`Zd}7p4%_`<=&*61y5%Gvpoino$lbT zUYxxe*B#{P0%V6bG88ySr! zDe#0gTW$yD5cfhWb67m?HqRxegpI3W`D7lUQ5Li-gIylhvDNPndq_IxR9bNlNe;E@ zH>bM&*KupSjBiXzI9~OAd8c93e<>GpIg?M9e5&d*HO+mbtiF#FkaLVu7PkwASs5%L zagP9T^M9a`QB$hi*!VNk{a?hlZ7o%Fr`6d{Iv)7y$`M)aCuQ~hq`?HG0bylGv>>cx z-WkayCCDr0*o5SW$se+dt4g8ycs3dBb2vvZoeNa_Ui!n2^V>g`gPxd|p6@Ua$F;ZO zg^nEGG;+C$=BA8%2|t!ID|T72u3nPm&SzfV`F|{w<s`dqUS@9qN8zc|jaSi5>?espd832&P7k>BR>yF_nL=|4t*d^=#Z>7M_d3i zEwOD2f#w{zFxc(3keg0Ff1F5vTA;2g9M} zxOFA7GIx5)`c6*}(z!sBV3uQJtkc?31&n)TrJGV#!6Ur(B}?!-A-gYLaA&Z7Bv|W8 zOl9sFRP{ZBni&J&3BpO)E(N#Adk}F;tnne>>45d5FHZ;vyE3U;DQK^>J%5Au^MSXn zL{;S;KvmxZ$c0o!J7>94akCsS(KK$CNx;?w<|ee#rt`iASScq?`a-Fk;P~~EyRQ_` zSNf}@F1Q$f?Q_AIJ4WP=xfGI80*gqjIS6U^GI z{)unLH&>gI0v%0gNpOdu>VNRB8?F;w(sn#UunWPuLO`8+xO9CF7YYFhiQ^)UqPZM* z;NAu4j72 zjMhZl4iG?7Dh8OiVb?}b4~2C6bAVsaSPV^ml#-y+bL%&H08V|rf!*_vJ|a=b90_|1 zGt^ZN>PsIXL1+Z^pk-P($DHB9G3p_%Y*Z?sA;QrUF&$=zpZX>sHLl>#B|e5zEx(KG zN!^UU$5_~2)_C3X9e+EPQ7iq`Nj>x_rRXFYKki($bq7c(@t>jxMKt{ z@Jcdph>28!m1sI4ab?3in{9o{8%Uq}s^6LLJ}KeNNoB9`T}}C9BsiJz-57O{QUM3! zu@Hg=sVz#u{Zcv200i+9;=4mSt6ltvjY6WO#qt0pH6a_*FMt2l0?hX|mOp;9hTrX* z$Kd|v`{y^)H_dT0=Qmfdemwl>CCTf9t>b9!Tul8`kDPmt5Fm<$3YKGq6h)vU1Z0Ry z6%0E!_c))!xgPTgAJxpgxQ%!9V}>)eym~lh>g`f*O`&V#TAWjF{bK+r4NqmSC<#2d z;dIL5La`NCV1F=XLY1)K@59cx!@~I3YMU#ugmu$avtiKYReYuZ*3Ik7pp*6&=QLFP z#V|VqDQDEd-Qv9@F+@h^>;I4xz^7p6QPWe+l{T-?TuoVUbL}Y6EA~8ib-T zEeHV}Ody(QgRI73LYbrD^pK;Qs3uxG#kG6M3+v#XU9U%8_hxpZW-u$Cwukdq;=>LooJ? zd&-68%6|$ch@H?m;xQiJh}6Gh8^y*>inV>QZE|92khJelse85SIu4_DXqCC-KHeMT zmQwDU7PHh8Ge;`Pz1Jg@MDqwq_5bW$>5uD1a{pI^%@_N{@b-NyyapCoAPJBF2Aq5r z`lz1KS|iO$)I0Lmr<#;B;^^Xt&GCDt3>zL%6o0GO-Sz9bx=KavB&95nfI=IHq0DO% z0*tB7T9en|V%o%vv|xxn3Q0%X@hT zwM{}r8*>qf6oNKBP{UOciJ{6IbK$I``P&X(7sYEkz=OJjw$pY;LAOXjyD47VNI z1Albji_}xeQZCUOla?tNPjd65NTQ;Gknx~$J}%}TrZ{_@x>Ndx`p%5O^&j05OWQ>H z6upc|5rYaw)|`xN7QTdcQ<-u?+iL{CsF`~2SAKe`1qJQpwhJ4oN$h+E$^?V&g!}1fZdXrC5En_O~ zxO$fu)$V2Qm~e~i_Ozjed9F)eYB2ysqJCYG;u!f2zZQuWi!)7+lxLxUpmh?(|zYKgnQ6TD~KcNOXp&o2K;5`Bm1l6)7F%#mWY0Q-Qt@_>if;g^cn7H$kkZEC zWM@~Sk2ZK=iSRypFI^DH=~HzX;vJ-VfmGSVYuWZs57CH?PzccjIAhWL;M$ACRqzlw zSj|V|Uy3mAqe;~bEO8jn61)gfFJ#66QrB8jHbZuYl4B?-o7^nhuId3Ay?=Ssa{}%x z%7h?{091aAw~mOkMUOwEiZd?JE}Jne+aBiudZ&3syyGb0iil{4 zc2cQm33#HDuG__qMYO}xJ#6MVAk@R4sda@X_hnlD8n)kj2+Ii9>M6da{|AGC8KqkRQyjrOpm<}KOvl4#{RUq?EmyILc74qBcLA{`->|Mbvc;=e^wYYLTl^~y z=an;9uemCF7HiA)kfEZF-5nekU*>w==Dw!PVCeWVbEn8OD-F5$Ie$-Uy@2wEJFabU zt!y5+YP+5F5V~5VxpJ-~0i!u-lcA9BxV%NkMCu&A22Y9T6J1 z_>axH!U^(qp9kntWPf{`9E4N&uy{G)@vu{pcF)>=(|p`nbJq&vAG7los5s8TX_!2h zhqHZ!?uQTh)w4KvT4MLQXV}~iXjeX)9}H~t-R-?&BvhnqCbe$sMW%c>UT}@@=S4^= zDPxV%Aq5{TP?JcIVmwH=0yhsItInt5o_?5Y7KjK7h?Di>a(|V@oAM#`pwY_WD(Dmf1xb8lIydnJnG|?C zqAuJK=I+aMJzrMSU21QqT4wpAM(uO@;Nf#Vj@x`l`NOsFSesyX_jnl<;DU$dN^W+3 zw}EM-?li`QFn?v!pG`Z`Zpug6UE+pvLIvgAB`>W?PI4)Uj?Q>GqC&M>D=PD`NXrfY zv%NFR`)am7Q`-1=7W)o}v(KC7X>^s_nRe-NQqOBPZY^!JSxlOvp$=7Z6@|y56FY5?`njmd-~D|P%WFTZGYN14t9X5aJep{kxbY`c%&9I zjm|m}lwnDW5tX2wt*7`xv8&E@TNSti3jO?E_Y!LZ3v$_%X4`go+wv}NkTK9eX-tIS zRQO;}Or!~d19RHP@d)w)K3CJM^uNvgYD)6FQjV%w{2_N}%1uG=+Y0K^9QjYYxKo_A z-)~`{`G2&5%Uvj6Gg-=HYu@4;)`4)udp-VWvMv$ZPUIkJ*Orm9O6|j8qnWEPywSyi?u>W;K(HDI1y5hDQ^DXwwks&?Rr}IS(n6}b5+fTaNrzq_s#ip z?+%nZNNz#0Xnr@PybY4&o!!9^&mcMBDT{_1Npps`;aW1yA&n?%^-!NV%k8o|rUJa& zT=!4Re;p?T)UNNxjBeAR9N@1RzcqOvKYwHQLTA&!UtYOWWAA+LH|#+bs(+Hc<`-l?O@s;kg{vxdR71J}C<&K>vKxK}ijpR#tmf`65d zS1|5Ou$DWWm<%pz=A>YbB}E($VobO<2e;_zeAw&ILuku~oRlek(^Cb#D{zz10a?)l z1C+IcFsytKM)2Hb6l}DRq|?L%sU%^-c~t1q`_#JmI)E%2+qkr+9eo6cbs0W9xmk8} z)_uTHX`59mw|K}DKJ5N(H<;LPZr@(lK+EJz@7%j<&nklcL+B{FI*}Ma$ zT`OR-d(bP{7?&s%O?s!i9S7h8)Oq3DrYLZo5e3$`JYJn)4SxkA`XDJ3~hYdy&+zLSX#JCkeG?7}z=t3e+jZEdmd)#JTO<}Ql z>M9xG37-_M_dh%F?6>+GTsy&~N!Gj&V&jK_1wR@eB7qeBGA3-ieC zd-O37l}!-!`S#eGQ5s4X(|A`R+5w7LsD)&y=1pvBs3SVxj zgJ$7PjA0uEYFfE09)IRJ_)}ZVVRv7(%`L6vEVFv0c3q3P9_c;9b`fvJ;$1>Dz2jEb z`^MynD;64i7bix)DuHMAjp|a?aMel}zPfAVZ|?iX(Z0dTW_`-G2UQJFn}J24ICvsG z1MZBG!Q(~eREWlh5mgziT_G!|a0ztSHTDYXhvp|Iw*&ktGk>w)Gp@U0cJ$xAF}z(f zyb?g)4aC=sLfZlULt^{5aI8`vGa}YOj7sRdeVH=X%{B>ccu;nB#@~xp9zfd-N>Q>@!?0)cT5}TaQ|8 zdst*nFIN+N^?yQL;1yrF7-;PiL+kN7pBdT=Z#VFN=$GApioJR^&vMtybr9Pr-svUC~p!XrMDfwuK6-IjHH6i#X@DQ!nk$(VHZ8znL%Ao?QCn{ z<7n5v-o{y04;MxJh~8ImHs@?1`0dMGK#=-PItNNt9gp;k3qHyw(YBi<(gB(!QiO@X zqBC0C1W86s7~>%cuP8)5BFim{GphP;fRDOz*erfND525x@LJ`&u3|@vSfN^F$j#SW zyW)C_vwu~0Yi3-)QZ^a6-FuJ@(0ec@?PTIf3hAW|E@&x)HZm}7I3JTMJ2QPj=c8 z!ce+gB>I?GA!Iq=rflVbOYP%Zz2h$fU%HowK7kr#bL`ta`{)2Y`?#c1>!iG9Mp;g1 z$bY5kC`v4of%uVCKMgra=%G`Fy_?VTtuG<E6Azx)hu1Ft$%#TUpLgc?&`o77{pqtd7WNLgFG0oPAM__ z5&hkd8(rkHxp&ZH|ARGi2jL?S=4I2<+pPoH0IdU+ve7Z?n3K-x5G)5r2$j?V=rE=< z%k0;7F|O8i7mhDoz3N%jg4Mp#{i!ocvt32}5B2jeLhTV3Wqj-nmtSv@`1d$aGk@z} zgZ~Qp=6Sn=;xQ-|%{^!B4vTDn4vW(J-0xZ%hR{fJ89X7VRF)|b1S2C#YIN}*n{_pP z(JMNi+Sw_ZZ9x3c9M{QUnaN#-!Zz*S{lrcI<*Gl-U2Y-U_o&VljPLG;92dS7P1f`H9ZgXQs#6T0yniLa3X#wDj0NB3%TKVH?xSYiq6FJ!6nJ&9d0L-I zs<;SkM`U}PQ>V%qOFb~IozUQdGCcR6VBiBw?$ns=-k~Gv<+uDJrf7@{q>5&tvv%W3 zHbCRb7z_~{Bo8zs(98x!xCKNgVvQ0b%J$0cH|J+vtF7lM6g!B*Uu7vkkbio06(_j% z4n93+8y5d})dBdzK@YGpjC-YnVkD^$gR>fFw90}L&U(Vm6xHaCR=XE2hF9;(dY+Xb zA~C>~A~H!WgC{-`LZkA=8m%=K$(`c8SsEQ;F?in{Zja%%Xx2V!x4>irw7~SBEKN3X zgk3|mk2X@E77Tz)mc2_A_jV<%^}e)>RS#+cW3q_z`)}MVFEb)pGUY^s3 zzx(x0hfB)tCA18lXOz@9->?Tj{%jD60gvoM&GrC;h^4NsONdq676*Ru@IQg$% z{sUJ9uAbjuwSYM;pMUurhw%B!1XmBPfcB>JyxWwhXDmb$@E;L~po&n(+{ z`~l2=t}{mSHrsqW_PmR- zZ&7!9xpw-_`nHS>CvW}f&wD|Bg_ATU!&!7_{}S*_ zrubS3JE2njv_|BGwp=uq8vSOvSXQ&N3oP!optmsT8E4u?gik4KK$|yEZ zIIcr2HMIs!g-BA++7S^=5@;)wV|70Bwcjrv47-_KoNYrnp@MSml9yH`ToY0f9i8#? z$bED>yP1m@zsN1TqWD0REO1Ya5z1>Fk!uCo8{G7A$;1AMY1AkL^danA+{afoN-N5aMxBAK2x2M^C|};D5{vd!L-|`+ed}@2TUjkMvTv!G zf~~hON>U;UK}s8vaNa42A?e_dag;jT8%i;{evUA&`lu{EFsqql3^y-kwBgZ2Alg}k zT7QVXn1rn>c%Cjl=6t}LdBv?s8x=VM7-fM3O=uv7GOtMpsJIm4_0y~hkJI4Ry;kd6 ztBKyq?#KQ(YYCzjP$|#~MC~=CG0on`!wiX=)K;FXrDzL8+Z2C^;uM|3alAK;;ikecr+&s?P>t zo;#dq8C=w;w+b`~lOm1>QDmE%0}g2AXH^eAwH1L!P0@-@33mW(iE=3QNkeoBifAiO zh)vJ1a*NnY;EhU#dJc&EQTRl45;)z)gd`mlF;>C?2ea3XZ#~0-Q(PNwQWO$V6n|Ou zJjsCLTx7>zx`)l&RectxSHwHC?{G1qt&jVWR4Q76Tfa`)%A;(tK5X{&r&vM%pSNpK z%JjyuujGq-dm75RxWf(&T|oCFZ$C#sW@k64`ZJBbq*9dtKUF^1lFpH2nKl`8DG2od z=gaW!13VD)#MyPoTK}EF{dsv>bAP33og_nyQcWA8YP3DzO-IiWdA^T(ItPE%yD!gA z-@kq8uL_@TT0ow#(9s(XsWWQV0D4Zy3HVs9=Y7ue{`#2%OWx9`0v=_%J9HEM)qL6v+qm(EAKY(e-Gq3Q1ROkN6o!aL^`A)$PgpY;7QdN=&>#(}H1mRQS3 z#iPOL#w#M6VwL;1yO)Qj*MH9@Q)SdM8rvevvJ<#KEgPzI&7MY^5d>Q8{b8oho>6eV zm3Ue;8&0OrgfxL8U4u2R5%PEaER{mw%(lTz(`2a6D%~@{d=7zM4T?CS_VxQ`H+@tP zQnkJyNOH-l*#0A+{h$IBu{C0qkIMIt`}tEj$^Y`r&7WE3pS&pfbAPTr!=YEtO*7nk z%fn`oJo51RBgie=cZY5lPX3T0y_fBkGp_+KE)3F}~n=$w78O$w0k-s5{se9gpKmrud3LbQdm<&+JEkU;e^yiZ$jeJTAoX_WPD^%JGDVH&$Cx@2^|XQ^Yzo)Ta+e9 zE3aIkwGp;_#F6Z|M{DU6i`t^k*H~{N(LG6=F^bMIOBr(7T-oa|5WW<_8{Uz`)M5XE zf0oqY*Z|1Ob-nXmYi2;SnJk1{IG(Ut?M*=KKon=2huU<_>3@Y?JL$Acy^oO0r~~?Z zJ@+OOM0}9c#H7rCiLc4t_SOhDs~Xp|<}7Cv+Hl%n2k;1x zoRQlUP`ABpM}MS}&N#=c*%YuJ9KX`rI_)sch-BaIaQ?0xO4`>cp0@0zbsn;Y$sCsZ z_OyFMz2bLBpRWJj4ynD8!9TCrj^MMr3QbCR;_%_SLF6E)Mtl>^Zq0jgs@5uepx;2) z_ReLj>H}><(FD|yZ{k_=yiJ8;d}U?KY6D^pdVe)qZGS}MM*oc`rq+BD616(cJ_MH2 zS!Z6)S_-v;QE& zd}QhvkfW!SDPw{(+KMP1y#a}-Yu|)3Dn68%ij~T+ms)b!prd8A<+~OHC!(%=6H8gE zbDG|}p?_)!rWs%63_?)sXh^q_V~MFf-wvPi*s=s|J*bdBwPvHzUJyf>b4-E_XaZ`# zx1l6St-JCRaA;D*o-<%8y)T(%M08vJCzQ)`Q|)Z1f^0PQEbKR?JJ^loalF?h%xD6O zv$y@Tt&wTe-UK^Ca{$#jQrI&HE2JFuACMvnxPQ0vQ=Ym7uc?KHk(sIAqhM<|cl)#` z=@VMyy?yi&PTi19Lcj&TFetaZtFC_F9HMkWP$BrX*sheB4^&QNPaR|>9a}|xX2z@$ z9XNm!RfxU4J9CRc73fOqtj6A-YxBtVam7i4978~{_9l{Zv>8Z%XAGM4JepL{&fJph zR)1HJ@dOlfZzCCvJcD}@!3lVEpAY1lHzF7l2NieXioUm{XfCt%UYJ(Opf-ExY=D^< zVRh!9Y-m(r__hluJUu-{Qc4>FX|wX^ou-we{e)Cyf7}HWX8!_Xn_bVOOgSY6H)pb~;oH*cDNeW2f^XASOn(1M}Nqy=(K zh>0rjk*P|^HA;Z_Vvlz|Ap<{rc)2v^AvDT541HY>HNVZe>PWRO(_N(mu^Y$pb$`3_ zSqRr=2}_@{>Vou?VpB+P`mzihGk=`6pyZmPf#vx0CcTz>ChoP*R%$A6&T6`9TGIVm z;iMCl_;5Tg&+@iAcMp$`-!GMHd938q2nvuPgswU{dCp+sH>A!$3;LL_b@3i;5S_fN zs<%!}plR%lwnQUq?kQ}K{xBTzniGfU*?Lm$)R@JuH*gcPF?s?G3bUZsw||0WWN^je2TTmYA4UV1t{eR&V+UNV%yHDR?xLMutJ6O}kEQ{(`XV?LCo6ta;B&zD> zu->w{UWdOL63JSpYLab*3LG{m!+gq`g#?Ba2kBm2FI?@g%OM57-uslLt1DCQCl%TR zX(}3&XmdPYw>&?+B|+|fv8|VShf!Cyu_`c`f@5n=Y4@_stED~g+<$#k;_lw(bY9A| zt4KOMgD;em6YL2jl@~r)n2!Wy-W`*xx~q@fR1j<)HI2g_P@8q{veuq5G+tC4;deAw z=Mc{>^$hoM3ID@f3iLK25}RyjhoE%TpT2N+jg#{$vwSM2RTzNqvzCPBnsdXD0$Ch5 zw)ee0o%3Rsayf$`Xi@s z&8Ood%yxLDihocvKugm?Q01U{iKBUX)XUMhkK3(`vup{Xj6kl|HV-UIX-Ac_f#x8F z{?GTXmv$ZHtP5!J;F3v?T3)oXUw*Y_Eo1=8JDB@Ny?-`&y&RDm6Xm*~2v)}4h~J53 z1>tE+_Kb=@FYh7f)yMc>ze}f|k;~Ls@F61DPZPhB-hXlOVusGWV{#yGg`jK8r_xJK zU^W#DrxOoY6pkBC-r5qSeD3`g+4a33;_st(P)!7$I=w4wK{;e?*{AMBT}uF%m;Gp$ zqXAp0%8L$J-gDNHLP=MXRq19ilz_y<@HYZ4ng|q+3w&;zkm61?Y)s&N+pCF zMfe%yoqOPLr2W)7apZ!0!T$sH@PsIF?R6L*Wy{Karn%10%$dde5i`C6d2|V^w+Hx~ z(D9akT-yWN%K;QQ$Njd8qc&O^*s(&oLMF{PynoBLsq}er;XUT4I}M*flqRHITZSL) zpuU%P9C!9`JOlj8{o}QnxJG9-qv}&Ae8Aokgw~Xs<>SMkqA>m0)0o%r?NMxUI(96J zFr77|ZXUXNr4&`Q`?`O<`}X>Lc|oXH9a9h3si>WLY;S)%f;ab7OAkZy8@$5hOfH*p z)qm6usDYW$6!^L_a;imzLtbzA0Q2(8(?9QCE>6JhDln8u%TsQMNy!SgO(TzXUoOQ_5~pPT$ikuH^MJe+iK<7@ zvvX8O5^!AK(+k&3eG-*Tal&ibM@=7PwI24S)lQPElS`hnrTE>XQ`o(73Nreq@2@_h<@?ubYl*AFg?}M5 z_O=-$Gf!TU&F}>X*_=UP#liUN+t+p#_+`G8m#Pgc-4xU;_ul+5QYk@v*^!*5r`Kz_ zzm(ZUiOTVZQ>&6+?cG$8mR?uLkn9gE-s^EK7Hq^J^Sh#Nv+}ii_hBAAbIq-Xy!G{g zP>7x{VzS82-g&LR))mA4g9#m|0s=gi31&li9(AV)^Ve^}jGsYE%%i<$q&jM5t>6 zJFC5v1pDC`l&^h5^UdUbKiu8FUTZi_L|oV#t<~Kx&jDJqMqg?*M-6E7x18n2wSzr& zVNTp8R3%spv?NU!5QCtlyi<@{ezvRI)F!nC;v#MGVKA~{Y>IF9Q9)`fh*v(_w}<`P z-*K^Wi~};cW}C7a5bO+ppntww;&bzYOy=dS7uScb_`|Lj_ua9;H{%m_sExgjbN=eL z5hnz6P|$Qh{`0>B5kr%eQcsmVb<_!AS*s`gvNml|WAcFL`?tH-`%4+k%pN^=T}6Z~ z^;`>_*nqZVp8^Z z_<-0ReFQmx?=SW?3V-mnLo82N0}jS{3p) z-N$(A3m{%OrxH}x_yF{BWv5-pO6~FW?lWo(X4_I)T+8t&h=8~V`UIN3XWKg@LlHJx zq|%b!RGPd$+&dB5B$3~&rLt;-g@(-yVOm{;WVbF<)oA8AaA=RfZI*~MR@h9C?hi{I zgj572e;!SAPk*1%)bTAHA#)4P!~P5<<;85WG9k3|)v&-`yo2-DY`cZ@0Qm~bCzjY| zT8sB83ER#&kM5<*+5FW>Vh#Bth73*V?uuYZX=+(*z~F7y!y}uw#)h$0 zau$R`Zedv7JGf%~_Y=0>C3>Q_-C>23!c75e=(NgO@8~cqqPhx6zqZX~=PYYHmV8m zjoNjQ33BZ%3#lurF1JPh`5tEkIqu+f#sB3KzkPgtb|4V7>{pugRyRaKaXPQgFahA^ zo3^@AFd(PnlXEy$W0_;~c8VHSUQJ3*d4DUKiTGe!RGqv_)Z1-Vf>(f7JZ4eDmT`db zzxa*^(Z+qc#nmn5>>Sk9RQ0%EySS_EjHg}su#vNm26+%et@}`yb*{(>!uPtK^3d)v zNTeH$wTTr|p-L$o61>8SErl*$DYV|-?)%?2{*TTzF7_(#lWWL=-8leMbGOQv4u3u} zYAhqt=LIl(93K99#6p91B-}Y5!?!ou&#*2@~5?U07F57M#o)1R>)PicwJH zJL}tj{PyDuKgm=WM6N^W_QRcDXurO7&Zz0GDb4iWv_Or_kUFrpNy;E>z;nppj zOpIwhK=y&* z6tTME{Mt{P%c}6k(!+yXVPiNE_9$q*3=9+Dqa`#{12@c1uy?zSg=T&`b-eW@*w~EY zjte$Z){i{M%aY%T|MRXsrJ30^zr`{|MZ#KGR?s5Oa;WvIZ}|JeC{8GH#tt7h=B6(3 zXA7e{to>>_Vg5Jjfl##cNI!4T@PTrGs1Kd0i~2eh0SAfqn`*9Xg{&*gu9K@ZFL1q9 zL$7e8P+Mw^gMxUSIxqn}ZuXu3suK{OsL3^7l_LTQGv2B`I>01OH5BtWYaTWKL@vE2 z!4HA$l#F0A54j~H(=z(6+UYn4n7F<$(=XE2$*5mT- z5FU^D@Yqm~+fT~K6B?-Va9j(tXdv+e`6ddu*fx=+9O{V-(xZwteQS%se7KI~yxH2W znRxsiIZ?<4T4N2i!XTuujoSCh8h;e=m4fNDNl_Dr+WV^B^z6eq>j#t#uNN_ zX4U&p$&xflCCT9{<+0(1DlfAn5vn(ZgTV{|MTa6(mVfR4MK$BO(1O;BRY0zi-<%8CnDC#LINrdUU!rSpnvaS4-JlJ48w~Fm6Ge`I6l0cv987F-3@PNk7W{JOf3D~f+&ZTC}CCvLR1xAR$GXi;U=P927$a+u? z<-^64F8Sig$!T*Q3{aN+t~xp1qpS34{zFab`z~P7#!m_Mlu1F<_W3Mu`g~O)G68U@ zTUAH`rqh`igB{uPCV1FS*pOflQz`P@W5@4aTp#uA1@ARIN`_v>L zB=Hf>jjZ0VvEoW|+qx@gmRp~*KKl`5!gU%J6>`z0kqJD*9fDlW)}*4RiZR6>Pz*=% z6L#hC_xY^KmCBU68c*5@ZeES?;ES6gNODjNQPv9TrQ)JEDD8vrLKJl9$*AH>4l)b9 zKA&!nWJ!+*lZQ#nAc1o@@|ILre=O)&4f# z{-Rm^_2;U-jb5soD%d1TX3dPZLn;-8z2pIfaUeeHaKWBDhe3rcs#G!E_Es*5bWaO- z@BQaYuv$QX`N&uzsXwrw)s-^8kcO`FS3MqHnF$P)KRLyww0 zJH2WjtsD>Ib#L5rOj`|sb06bg{TWDsPtz#Yv3%8RHl2cYVn`kQuS1ib%e-4-{t@H} zI}z$(Ln9sQcpfMj;uhxGb%~DFP1B@oUXUtC)SzE77S0T1n#Ua?ws`b>$BAa#tyH-h zDB%B7JoM@P_~m@Gx$W0*)XJKT1hd+k?|I}=t7*$2HVggsb`B&=R`uVb#XlUD{Jo1j znk0vA3xKE;B%=jxueaq4A8w8|Y;RTQedJFt)d$u!|2Uvhy+@~*M8Uyv6ZW4ySmBA5 z?*KEJ+hnU~hRpxFO)1EkpR9&UuA*k%}-OO%-mzV(~) z!8hGxTde~2j!l<`?mq|q%VdNW%Hv#bhmRSnG~p!KD4Rv>{UFU zca0KM5Zu|J%0HcAIhqFT6CN#6LECMkJdYYoM`PWw{}!^;ajD~y;?(<42vllla^fn{ zCC&i@Igmpd8KjMe8Vvp(Ew4X|ki{OW>7aU8;vl}Q!(*8&viNp_Lm0^U$oHu{QmjKkLjc4qi^e1BZZ|C@hf zUvWxrT!rxm2htW6ZXVg2DUPq~A)5gG56HnWN1nADqK3x|pF1wILHE5RVc($%s&9?3 z-IZ$eB%()AHH$AehND?EKObnZ$H^n?L^VYuu*Yh}Hs3E)VJggDj7mEb)57F>HmexXbUrMH3gDUO;FeB01ZO(T4iC|p{X8}vA{b1DR!b(tn<;M2^EMq;$X zlZP7Su5RlFoF^`!#a%7r@n_;~KSqTbv86)XKxAatQ7{PIym1r}m$W6afvEX! zhxmNoh1*{*_p0x2<9uH~+N4YceHh868OAARzd73G$v4DWf{PKVV@% z0N^I5+W$_mV<5C_-4l?~+h_Io~V+!g2FTdS`K$QqiB7ZOZ49ye)cO zKkQh>=jKCiWv}fl^Io8s-K#6}xQ|VHvDvObksYMO&!t{&X;SoGn%Z`H#axbUgCZMK zCPqfv{>{USQEBK-zgT;xO53};@{+vMGX0J_{ObA|>e)>WsMG)r3R19L!zXi)m3_~2 zuJK19#BZ6;b?8UVdHaDv%>h2#Xa;M99L9aU8as>Hzmkd+Z6JWvSDc*}#(!5s#2i(P z1=du#j=X_7K|OAg>6;3^`=2?g6RT`xW(;@t+v6K6jwoMc)xyv91Dz`f)@9|JFKM1g z70av*%LR>QU|I95s($w^rB~wAqt?k8RNf)s^FNkYW@0y7Cq?WR%LIm^56yxEQyd5i zO#o|#3u&y(Tu`eOx-nL3EpB*7?j(XWfhm37)uDDgvo$1CHd22hf*71MJp^34QMrxW zOfrUS8y*Z{f{`u+5q!0wAXFP8FJfoKt+F_|6x}@oCimNGR#jq)`q*DY%muFqKe$?D zS;O7)TuE@9Pq^R}&+S^aEwXfRhHyVAPb_$sToB?pnb zalzuzUN;LLvnX()q0;=Ki8z5soBQ$HkeglSrEZl)zA(U4Ob2s+Eet-~d`UBiKN~-& zZnJ3sOq(p6pdSmb5A%|=d~7-ob~f3`z=6~m&FIA{%(E5hPHh1R62Q42>ufUdIVd-| ztk<5ow94tD_rU!)vA_Fx(SII!g^;CP_zY<>PY8!AvF_S&w|hKWyhQ?gCj-AqLBb%5HH?lYh6E`LER-_12uZndNyFnM zNKxfMn&Vs*glK? zV&;6fBBoaUvKE544j;qZdI^k)K-=J>aGOR%6+&i9B;;=;<@94Gors}R;Aaq7+)cQ< zGFbzVW~Eq1#%g2V>cqey&GG#<>hZ;b0fi(@Qrk@wBtZe=&o3odxL%>)^5W<1$)>Ub<7172i(JBQJ{(X8 zvd}IURoJi|uAym{%oSlmTc3;%lKQMnzRy1sq`YV>WKrL*P|qzcAu5ta+yv1L)5fCt zdxX)_ZWv=}I)_(1mt484Hk@=4!u&IuTQbUKmFoidvFPYIvc`fGfAGT?ogAA@u5q4N zEC!PrThnPioE|_}sO%cH8BL)i z-}@&J{%2Nff1u%n9-X7AYUb3Xd{!O-ZG%KeE=)`2dO=E_Xol6i&tDJC>|}rYELnx{ zd`C_?yRdh8Ks|#wz_Eko*V^hcPIP~1-Ct}TtEQNYASv`N&)ic6!|q+)o&G|tBH((9 zU(SIbYm2z3*j}G7dJ_$K^$A*UOjn9_Dhlo*44GxK1Cc}7Tgsf$Um z7k-vjdwi>YW^3+db@0J}>~O|W5L_IMXrzytm^ToOD206^OJbsJX{Q=N+EkujD+Cz>x_b`=))d|7@==d7BGi%38afTl7(S2;j5~xRL5_!NV*1a8d!f z8Zc~v%)^zUo9&*9i}S5_DxG5^;nq6KZ-0WHp`Q;d7|JdFUc7EA$IAK@yRwcJ?kSVk zT0?+_M=#}l03Ml7PRu}Pj`oUdgb)l0tK$qgZLh+UFrO8HN%rW5_g7*OO*}qSn8dgr zr98*UZ!f+>c;Z~i{E^s0U zr4PI_pby%&KA7Hr86HA?rlc4T1P^bSKTq|@2ok|r4^ypL_CVc=zWW9W0RosDR@go5 z5fo1Z2Z^Kvqy0k*5gfXp1#|Q;2j~%W69zaE)Vn@>_6ezc-Gvhw}=C6wK;Aw$NY#68*9jDKxLIdmNSx8B9NU7xM?8Mz z#%1iK+K1q8mVdv)%1L|Mz&y}yv(QTejyL`a*{TAz#?3%VJg|5Ca2%mRXrtz4p3TJw zjHE36?pmrqwa_^EOc(jD@3aB)|Hc6n0bkXSADD9>(&}jZ{R{$SyaK>^G=jas?&}jW z$byzCzw4;-Rd<$|4zJ~2<{!C^79f`vAX#qFZa3gB%BbaFT1g$I+}0J$R4zS8e9Xd# zh|_U-Y3CaU?8?R&dzFJj7I3}W zKaf8CmuG(Jo;t|NxUD8v;m@?Zo_^Wz4-4zfW&9y<6{m8to!1tru+C114A|#o8Jl5h z&#rL^x7lxDCY)QhBQc|PvOKb~Asvo#Su!E0&))O5S5~FP^SgtxOQ^S3UgFvCPYYc6 zVR|F3Y#nNk9`1TwSU%7eu3{b;bDx+^A2*2qeFLN*paA|r{f9B?hC<@DxS;?dz+nCl zzkIv~wSrB7M+b2I&-EaK4)_h+VEdzjUu+@6-e=_}UZX?;koJ&n@DeI5d*+xe%QDsa8;85p0vwv)!ZZ?Jpmk4d3_y zv;ktt(E;i7&5!1f+TPXs@$f?a37PTt<9Hr3%c*-$ZJ>uoyJ!7%y+ILBGg$xZ`*q~{ zThOxJuZ23vA8FPX3z%c_9f+fFgcR5Q{R}TaTQwusJlbF#ew{5@={#(Hq-|%~zIF!y ziEx1?MWd%KCa$H%*H^eB3~z<(ZfNW(_X97kpwWthy8L(Hl>2r5eF;dm-4D!@(2&)k zw9;U8coE$0(26mlkZ1;`Cg%QDvN)pS(5HycChHVLT#S=C$nge%`nIrcfDzEIcpr%_PIuJg;=m=zSi*lD#GA&Y)3+ck2@+P}Bk@{h)bW;iY z%p)9W-SR?IDfbi@c=21wc^HC72?PwCx`u?#L9N$VV9dH7w1Cit`Vc&T8XX7|s{kS? zFf=l*T*=nK+t}HT1oh!$XFGV4YKd zE*NJmqCVvutRL2M&a-8fw2YW;xRMMhmu$txh-k)7$t46#&m;v=yHP3Z1pm6pCH z&vnIRPeBLQSa79>`DGNc;xBr!=EDy^-8f0#eA`w@zM3O^_s$-9j?9BbMy!4NX#Cs8 zSZdIY=L0Kv8`j|R71>f3u}fQb)3^ZXVR;xEGxK3H8YXdR4mC=NIVg7*lFHuFe#F_FI=9S(uuB2O6f z<_<65AZdI@S28u!JJh}il9YeSlj+6fc%;RX$7=+L(J#tBxx!{O@Hkk#$z&G_KmBYS zD&#=hJ>If!BK?s`84{stsQlM!AL<{N4zJHdG@ z$y>6%Z^1E&6TUii^CiDcK#L;#_d_bf$2d5!5g$zZ=wY&YQ-d4=Ppz!y=f{(pLC8HF zf_@B%vZA?=BiJQ-Z+6T_>WZJW8bML=5AzE`rW+orr;i+{OW-8TbI;Z-FWlBILzm9? zCA=+f+i2&!tun1;ATJIZq#L738yRgf4idXcybo^ zb<~)_A6IRb*!$qc1X^A*|16&Upu^AtdfFB_e5$XW3IW<^?cp!LqgT?zeFy`2LPLXS zu)ZTN5-nPA@+W4VXzu>Bj`obD6?|~d7U9*h#S#uJ&|bQ6O=y!yTr_RbTxpdSq3jotfc2bnj9dS#Yw!=I ziL8m*faBml`Oee|1M=nDDL|rWtxSeH|3u=$CRJ<*B)z|R2ffL@vX4L(C14w1d#TcD z%fJQ>Ot`?K2M;wp>Ys`Jp6ODB?wOI zXRo64R1KS2)1g^(RF=_Ylk8)QsHr@+XFVx%y(P9AklraI z?XT63{UtU->HIi zgyYJ#>1mBX%>Q)Khn+$ko0nwp(n`m>_Tyu?Sl1f%A6NpJ*dmyBJ+F3ht6i zW7=$jmtJIXSdKL8?GWsz_ct6PHDB{~b_B!smsSi|SzOm~nlIi5)_H=s#_?L#cem%> z86>g?oR2MVufu2YTe;R7rY3##lfNY-p$|O}Gopxm(}yeEH9n|CaX0^n#gF}AD{@pe zoBEyA)TCRm>wH}qbWSo&E)^e~Q6u9vK(U)?8VP`E6bY;E)Lm0-iQ%cWbRAWcR`LL10Cv6dH8;_oX-)7vgTgqUgVTfzSqH&x>_e|_5!?TZqk9_m*UmaJRB|KQ}ccNFFHl- z=0HB2;)e&|{vS?N=fR8#^u2yX52WQC+S4@9<5DXeW#!+aWkslE^P}U~7)vA=#VP6W zp%{18U^Xvb;CQdQxZ3Wrf0AdOY-<1U^1|*#JW!tw9KjMq`*!qnEWy7J z%;wzYoMQzO_?}2nY^!}#uvj0pm7vLRL64)w9CtXJwA0QoYiWi4F;8GHdjRe`tBP*u zxHG|?u6k&ZW~`odNgM)vRwV|zLT=3G7CsScBtxtw|XrS*67&GoD z^gweRz)8wg(%g&&wluh+2I)?%o0Zho!WmcKAJA2?2swsDF{V;YK`&CIC}H>i7$XP* z%NQ($rmm>R{xhCLnHjwn&MXr{qbZLdg7t$2Rb^VhJ?s-TBwKdob z4ajv@Swd;*XlSY3CjFAPC8<6t{wc@nKSo<+RY*xaqaA++bfgbwgPo?`!}q>08fKkC zU+Sce0@AwZBpsci&*#8I(CGX|oEniY`-)o5Gzq$|aAsZRBw~kKjLwQ{dfo8(fuB4M z4IY#$LmvIlz}f#Q(0v;H02cN@H`1DlA2ol2` z`qGB;C=Ll_e}u>t#lvPE@W{8nzudkFx$ty&RWR*t(OYxQ2f!sg<#ur?S4ce8k_l!b}Y~&XS(2j($q-BRHKf%Iw z#N$sg|6UEzV8s;J+|C+VdbwaA=`y=B;13D#zD6ggQhk1~wuG^tIMYQZBz%MZw{-f8 ztW1lYQb!07_>Vejc_joef`j?Zr_hiAaDgXh^kQtPImUh%O4|kaBybvZ8rv+)`%B}S z*f#l{Y!)3SzuI5eoU|$KGL(3&B<3asc^|kmSso?_pWyh~sy$n6Dt3F?l`OAsG{m}G z#Mu4-hxK(Q&)`lPh)SxxW9E;3nuv)#_f>*2IzQVFXgFJ=usMu&sk)#Fi|L0#xJS_kW$d@C?Z?vk?%=Eh!D(hr4J#~+&%ifeN)p&I!z)Vu0 z@o>FF%uXlJd zRZo+}(4ij}ilME=akFW@0bDe|+#WAv89w(_PUMJ~&|3u$0J!>t^|=RuwK4G3ZKlmA zH^eH@+PrM0Cn_*EA=923Cn>pnC|Y3GX48i|>as6nx5Gwo4Vu5$xl(adt~X|9-`P** zrtoPe%P3#BtX<`RX>Gc)3ptF-KWd!wqzX-7vTOW4Y`Ug6owM{ktEF#HB6-$dgg!>D zs(~*)upfWAa=@Mg-(h~F#4-TLVMq57z=34Dq~G%?{R{wIg#QySW&YG_X*dv&Qn?g@ zbySiRB}M@De?r&d#0X#j16#*WDPaaUKp=Q5pY5dJu>cH#$bsx8+tBtC`$U5dea^pb zwAbrsuojFjF|T#P1K($mf4vDLC>-9ANo%>IhMa5??RZE$9vf z$vC7fqlB{YIANztM}&0n8M#Ged;5C6xERs`22tWl&OQ<%cmnPZ6@BP}NihvrG_ci#e0Ut;)^b(^bNT>5VvEL7v?V1H(AHmY+aEM4e~j$ujMH zK{_rOx;SJ{JvJZYF%iCCrPCX}uy2!&$g^vGL{z3?#n0G+i!=bAUaL#e@!-wl>HP_` z68+ek4E=^T5mw_(N5Xd4eeE{(BxoqSmY4_D6$SRT=mcSpj&(*Lk6K*2;%e6Jd}0;G z-9Ug;BJlrInVc|CSOPHsardm2;-fRIryhfnqjO zNAyFcOrpg6ar<`AEWUZn=V^Qw?bvg(N+IC@3;^>Y<;>K0aPrdk>!Oh4c8aHaK@y;p z(zDMc*&eW;xmDFR6%iVT$_9kiCI>iw-iL{95(gV;=`sB1Q|nEfmWu=AospNFOup69h>`ni^_ls&7a`JhVRe1 zLI9Qg2YEn@LBXSK)iOh(k=sFCr3P+vIHA~s>g5dsclvp%p;jo3nOCum`49?+PVp>W z1l+vwI9vie+sLO;*q8|fm`-V4QrtP$O+lxWwB!%P1-ezsV4rbRJjiZ{IJ6tC*?W%M ztRf}BSqtzGQ_I4yq}S`<&p6MxXYbNxIe=5wi>ESFN?2K4*$ZV?F0`(3JlC81)ec($ zqfmSJ7d9y`7F$-cVGlI)p4&zfamAzYn6?KGyp3+%ryk@xDa6#7V{;PQ;MThFuxl$fGtpxi5$IQxn#+j6rb0%u&xcBGe7#vqiYp>;o zZe;;r{nDd3`hc>%QA(9nqM)%N#Eb~JV<)9~=Jq~a$07XkdCrHxA$7%Ee@ykX{cM!3 zeHM{gI;_&c=rNGf6k;r-*6|y>P(16a+sC~{m-pd{J-3I+qEpB9M&joSBrD-c5H=^= z6fkap0Z=Dm=OJ6cVXZJxbo?6o#FLBJFh%8}hEbN5436auPJTUpFnyv4;3mVtwm$idz-bZt61Z%uJN-A=#b^R|$PtG#Dv;O&iW`2T; zvk4ANRjk+dHfBuV7$;_RX^ht}JE6K>z5}wPZN?3{ZSrlFQme+f@T?=4l66-q0Ds`i zA50=A-|GpNJB^~GgnG9clqH%E| zrRF7Hc4nf4oZhfE@$l=nx<9CKj5BwhVWP47IKu4&bwFQKEhHtAyZX{kaWn<%G= zj^|d9tfK$P{|%GRpq>dbaZQZkD91<=#3G$!yvo_2F1jOn+A*X9+{yD^8X9q3&Gc!h zN9Q<{(6T$U_!|Wb0@H3bDKc*F^^j><(m8En39sI$_P6HzE@Y0+(hH)Be#-vz=~7p! zHBSuD54|PFmcbgq-XEopJ~SFGu|f;ls;VC@`nSoc4E)q&FHtOvwIh)CaPw%Yrr~+{ z_`3Sosi#dRx6vUy=?rd7WaTY#HxsY=GHHWyf@G<`ynG#4g6}aztw|4M6V@w9WYbPr z8BjtQA}PnB<=xuq2I;s4_ndd~sm7HdJfakKCq}yMeY0tc)C>TL_90&>xmK%}<^#D2 zXwSJb+X!H_BeIQIKbej^WD_HJ?o%{)Fo`RM_lX#dH*uIzvD{P4_~uQCpT(HW)j0C|J=$yg^!T3%!KPog(bsj} zJe_VNFm3MTmLlpKqiEMGxdGgrQLlv-Y_K09|8_M0TCvT}xgUa; zwOJyJDd)*y^>5`0;72yvl?be56K#OcXB~pUtOZ$nPAH&F33!DI93u8I8>_P<#ytlDPEK*tXd zkP)*K0s#QWf0$QF9~mSnFrk1I!)LlC_ain<{GWIx$lbqMuqtkjFDKSa5^sKrnp>Pi zfCOu$EBkoi0kgU(vhH=WsOLc(#fo)`F1+UA9NnK69ELoIzCRxUa(AX}po@6$Wbklv zOW|Lb$J3Z3o9C|reZEe4dJ-f((1+W9(~?0J_CzP>o+unq9M->mDfXM^HKpDdrIA*s zN#Q#(tdg?{DB6Z+j$UF0Gw6~bD`4mOQX@~^la$D#4O7DS8yI*&?>~lwAtr{iRP^3tiNY{I&2PKNk zBtlW)|CWfW(28Ipr6&>7=$7^-#x)|OmeS|ovd(>Pg?29kHq>dMx8Ib5HNoZz-zJV} ziaSRn@@3HFs$qq+lODPjEP5<2zqKUZt5eA*B$z~ShqMnztiM)1&J>d4cx#K!0}k1e zgA@cj@2I6J{EsOnPiW8y6Wncx$H=b=<&Q9eHHM5Wfrf!I(e`&pIQQyl-4yoCx<(br z5I^#A2Xsw=BYYtYl7sV1>M`Dt78+QT3)=Cu-&1%n2)XX6F@65`z0Ll_G$whuZ7=ke zyFcu(z>LXeo|gu9#2Ym%Fr?vWtoY42ae9fVmPF1l6$Wl$rA=@ur&#rP0Nr!wnXjoZ z2CL9a%a{{`fqo*lR@CG;u-o*!;W{s!Keo8T1d+{vdf8ArE*xY6+_+KbANxr*Hc?*+ zm3c!lEU1j;)Tar3h4N3n(C)93(1rkV#eAzAZJTr)@9-!C(j)|XrXEHrVCVr(1C1>^?GiMxMpzGKGvg=juPEU!@3 z9IBGon6D9iblCVk2l+3~T8iYma| z%)dyuV^YImul&BPHM{q)(r)-ubtlDtZ%-Bi%f}Cr>6*BH)Y!xz3zn?aZGT9OPjc<| zpmg|F$6SM6g=7VO%l3Bc1Gc)zcjAnqN9yKE9l@KqHGTVz5bUkQy^DrHyeOVyJX709 z)!}B(#qSE!xl~P_m>V_2T9AFZr#ENUZREbdq}$ne`@13tGa2~XuEiwv4AKMrA_TR7 z7aH(Vo%Pxu_DI=qgR*C2FbBMk~I0&)iY4;}> zibl{{`9srhfYjiB#A5sEdU&GIH2ao-zv9u(Z%!$q7hs;r^LO(dv!oM>bE5 zR9=fp$*Sp$^m@&lW(=KH+bHdka)VLNkQf6M1Hh^xzL5Um}oZNSydzhZB#dNPFP$NoqRBv`@6 zRkzy5w`<-TVgzH`;rLL+?{E`U?hiP@AL6ipJq!P+jl5UlpT^l~D2azYKP*zJ8G@bp@Z?V2O_W8^^#>`R78C1X8GrU{ed?Z=H_rn?LlTIYQ>=0&jN&8@eM0&CCgevShX*0B7bXZ%A z7vost>)w7)tWqSsPGk5hG{fR!ubhRKUV5LNSLk8aM5Hq9(1Kdg4GJewQ3PxW;v5qC zh!Tp(C}82l0}sOi`->t7XhRxX^gUZ+LsgdX^QZ1MmZoE2c=o+|f!FXro7ud>N z`qgi)CfHTf1(&lV&hvzhJt$~XxOi1IdDXI5JYU$Zv)7kuxK3WBKhLkYOct<(st+lq z(ui>hVt(^j+G|5q0^6OP=K2%Z>B@8N7=ottKhcJj6?sR!z@|J^x}$3zYS5#eesw5j za4hX?a|+sr18T+{0Rm0a-$(ei+g;wzSIf5WJelAgLnJ*6+qnCq$+f@Q&3;m6nC|}- z53c9rri6n|4}g2jxHN(#z1Fm$ZS>yR6ktQnXveiD_%$R|4V2PPPo~kUJ~fbpu0*&1 zR9JRC0ng_&nb*n&9g{fexosCIbZsl#yCqC8Zw;fnrKe<9CnE7-oYv#`-JITkgqKVP zl|fG&A-R@bo>1W3*T(Wf2@^)p3vi`I%#mjr(=i9-{V@CabcaLqTB=Qz?u^B+n=;mX zkE1(h{8r_m2vpur-8CCOHDROF_Z;tk51B@=j+Us~E2 z!||rK2eOBxC6N?Gv`uQkp-w9$|7OigMEW-K@@B>`<95bEA2V9Vp{{3?vx|oYD)B|u zTqP*W2N~Yo$htcQorQGJPX#dY1Mj~=@PY35o!`5IPJnldGs9b8Nj*FfIz?62I$CbB5235J`?hGn+YU+aZ2RFGR zSZ!MJg|oq{zUs$tF}w{3eWZaN0bh(nNfY~EWORN6NqbUnfxyW!1q8uv?_7M1*0Q&~ z8U%;XYo?psSgKZ{qG{YSb_M!r$J}!s@2*iM2TCcIn1(KHLv9ytZ7u>XM@!p>wkEV@ z;3ev=LW)MXxB<-i^Dk5w&DKF4pUp|Lqt^7qJFawW-K^%Z%LT4=>|VyG<07RZZx^|# z-N6;jJQgUIqmC~aOk>-u(^cbMd{EKV`f_GtdME6K70xZrO${8c>gnw38X|9&5R-6z zGnH^%Bj&F4h2JuP)G$`7q!tNKjDJs5fOH9}T)XAROV9LQwJfI93H^m_i$?7)fO_if z?Ubff8z-rSspcYeD(oIOBKfh>d4DWMzmU@IeygPUpiC=dsqmo6qVYqoCGKY5PKxJJ z>UCzW@v(#aib~Ur8P>~B(v3h;nWrVve*5+YE7WVra@jo}Z1nA)MRwGNfpW$4S}mXQfBAix9W`cK>Rc!=F<6==<|krQv|FXhF>kBd|Q7~=!Kvn-4M2P z379CrG;+pyDC$NP4mr$;8b3QC<@xkZ(*eU|RCAe1yhT7)95O+kb#}NU9akm6cI3_! zfZhU$E6(b8;;$^sd*58zY?D<@b+$i>?^7ut8BbDAjk=rj;8qcFz4@KVAAc_x$}+_HKIia=v#>GEViedvVvbdo6*73G1JR;MBbA3_mFH z)EplEr%x()p~Q{P0cgO&h3EA&5=#s10`^=YPmKb8{{GhCkq~5d_Ok)}%>51v>Uz1# z@vtjd$E5Ba1*X7p!&?o~rq33%vg6n1`S`Y*P_x-oAZR~07!8oDyv9s2{inXcbB_`h zg(1Y?Vso{IJgti~%=55-Z5(wc^bs2fHB?-@T<;h>t32j0~URXDF|%=34XQ#OsJI4QlY1-DPS6Ftsa($U) zl|)A$6FFt-GY(u=w^OhphVTG0IF4%+)RLOzG%f{+I_R^5W<5Q1P);12zf8pM%IW;p9@EH@)5o+Cz4x3@goJ{6NinPe3EgSsCf8LI+oC zC30hjhI;Jailcp`99AIh;}|=+Im+zJkAm2AEu4bKGI$L>y)U7R%GD;P2a9ee&I|dZ zrvw-iFeYe!0&G`TQW!~7LdI+%hfOv2D2}v96m3YF{?rMZlGsSOte@2C-XQ0ht5jiv zkqLK$qxb7lXh7vxr@fOl=`CGU{xoqVWiMA3`_?_F#*W3G`^q~t7QtYK| zqYvo8I*Fu6JK-&wjupS@$8`KmqRsEbSoqT+49Gd3a~qCp8pv)cD5SmE@@+C9^VV^7ZhCHfb?$Ilmk=3*5PDAE3iIUwp>82vzt%X z=UG4b%yCGFi;*eJ_y_WD_UWay_JY|Fyblz<7aMs7y5bz;OaDQ4!KUx+R2pW-zm38* z0iCJtQ)<+mYJ4*)JM)VHt1Kfj_84*OcQ#!MB`sf7F+})5?2piW45Vd}{*IYLN!2$O zu@@FylfXA@RMuFNk6xn|$|I8n!Y>IA-Mjp+VmS49m&T%CM<4_{h;9*Jhp91?(*p_#5|ze%v%e!%mki{L-t?F!4u zLOn>)I~VkFP*Sc!7}Lmit*+BDv$cDo5Bl*PHUWA0U)1sP%EaBSNFXHn|N;E#y%pF zoSSBi+oyzQ-#Nl7x&g1fi)6lRV*ZGhkEi|*Rlx}(_onS*`?ww%jHgeRDMX!z-MF@udP|%WOPY*_T-9|K zYjO7~>uK2T^Qw+|*^VVnXTq{K3B0`Bm;2)Pr0bw-{O{4#wb6CdWzc2#_sPN7nAXkO zN?GaOu-E?&SY2dkI^wV;`)(hr);<`R4maENv{K7*;2bjE5|^#4W~EhC(SjWF8%V`f zl2WX{)AxA$*~sS;$LFt9MK`aF22ilN`HBL8P~Nnyop0wQ4YNDA0cjS!AAlf&TlUcOIB}AcAR)~ zy1BVOUT*gzVm^inxjBpiX9j>DpO+nW;igxwc9{?m+*pNobR!8l8`x9Dw0hp3m&CwU zcbg%B)J$oz2!_rV=750l;a@YDM-WL+HQ&rwof;URkpTpSIguMyDlY~)i4eu#5e8Zl zuo^QD%3)<=hy%CvD}8zg!(?!-{(qppZ&P}3;foKAe4OaDUuNl*_EagcN<_QA-ac#o zp{wk*PWQugLZfQPa`h4)R`iIP${i4jWO$=^wNoqb^+@zkwnrA@a3w0-z^4J5?ab@d zLEY)=?54arDrtL`;B}t)u{SNFdPy5$dJ}h9shhf^_)h5)UdYGcRe#}AYkTni^_T)r zE17eEDdtd_0GDnG!NuJJ!dYJUGV4x|2|AlRFDNC@VJ|8&{2r$(B`ynbU>4Zt7SETG zAnf?nX(eePZL@x^8nVczx~+ofv^uX2eWcm#F`=BdapTCQp(h#TiV{F7%HXtSHf4Q- zCl3u6OyAB}t z59`{}+??Ii*WlHEM{%{vbPzaAQUu^_z+F=!f;*3wynmtZ8TP6qp_W=q>a&}VPjhjzSy?E zu(545+TCZ)*?ab$IseyM?~i9@%{%uz_jNV7qrX4(uQiLDbuTzlU`HhSvi`a$hgS!V z3CiZPOmT!BH>W>*Ur(Ezf%n?s&4^5}Ef zn>FQc#TKTV`*BRBrA|%=|GoVP(IiH@Unl8k`xYewLNelWBr| zTXWfKq2)qy6tsfl8=ti%bDTPSL>dsjx?NoCbq`L7@-7AIt{G3S2NIm%Ns&5~ zYpFzxG~{eF{kaEEWHS+K0l1p#Sw4E7$JuUlp2$EN-Vr4YY~(7)RxGv=eaq= zI-czLYudR0QSwx9^X}pEd|#Z?wn?*(8jn{dQB^AOge&iGy{-IvO0uzL?br4Ndq4D( zOvtQG9o!zoyVx5DUV-X4|2#lckrg$t5n>54j+df~wS1GJAyvZK5q%S%q{%4@K^Zr} zvRKoOCuSr67OMrB#QetIrIO5nO9gLt<;pTP!Na@@^#bhH9G5a-%R&6k#w+(G`MF!* zki~t97-jiU20VV|h|R8&K=7$yghp4LA)i8C;X#(C#U*+$;Oek?$OAAsnr5~}>!cw1|T;oqIO7@zE5>B2fej$d-otye)BF=e`M>%1( z65$)IR@3LQGq*pVYwsvJwX?V?zW7zcn_*?B6Q?q7wD9GNk$v2z@okbi7v2_(IC2li zG*ES?*i0T7V$M5@YmWoL6=;yS81yo=Es>!bThap4Fhq%;HKNBZQI9G)LB~|JS<*NM z++bSmqNy3vbW9z_{TX^n2AZL~CEJr^|G(f_i9ieZ+N7^zE0z8K6h;H5NS)es_hmrO zG)sc9(lOsZLdNP{Ae5uB1RrNy@1jfWXO062I-$ij(_$HWsouG6I!i+JKBg@Y$EV_<(QMYjmmCXl7OZG|JQkMwx zdl_Rx4HRW4#D4*c3rBe%{7{*_CfwVHE_Yrw$3OeAGvAk(Zn-b(J=kJu6xi6t>RVbi z*gFH1HM*aj1!k=?s8=t>yXU0oYax3|F!lXUt0{DzE#VDlX&O&A7zmZy#I{iysP!Fr zC^^%aC-P(o`-vW%)K!aGkpB+;eZ~PB(f)iYH&gMIQRxQEoCOGNE|OyH9r%c`lI1_f zMl7kLWQ$N@J(wY`gFbrSe{ip^o~0v0+Mw>D{hPOJ{eDOKF}E`a zmYK^GN9V^=J9^?VB&t$q0V=oi*a=?&3*GGJGzIQs3Hq;)Ee~0x+nUQ;ly;Veoc)ig z=S^J5+Y>aEew zC5+*=g;-Qy@MBF=<#x&`xocGQ)IgeJ-zs=CiB5`RP!D;S!|sT0Qww`a#_500hEzgu zu<53JL$cf;I&8$}$a{Q&Um}A)Cz@J zXGkeAbC~EOzo3^?u>9PUYplx%rmh_{18P_`QkE&DoAv#mpFiFn`94PQyTsnN+b=gi zrq>l+PT{?eq&M&L_sg=+Iqht2{vcqA-`Is`CiQY6M&}hB!Cr`QJVD-@`PW;6UNe%F zah-rJ#(BvzKkYBwxcU2$Ip>@OHsS`fGwr5f5X7yKISe6Mdc`Q4n{bRl!tXY9sLK^S zg3cafDokuQ9-L4Pg59^NjX{O0H?LG{`>#}qu~s3`>{v;0Xd!ARB+}`zgwmnsl{ZcK zCv-`(yc)OnYk4IPQ%v==@=EjAwH(E?OI~B05rT zx@qck|8!nLt=#kEi;2{{Xk6U#Au9U*snzH|wL&%s&sqM+&ncOx~IOfYaulcC@_hqRZ z-zgFT1hO)kA$XhKhO$QPvEKI~Nef{)f<)JM%a@NO9Y>HB^$)y;dGjFs9cDQLgXM+2)PbPgO{cr2#HD=Ah*W@XnUrT0 z`Ku3w4g}J4h}_)^Tk9H|pHLPqji4=&Q%mxkGy7WHn$AsICQ)xW2ANuGu<`y30XmL? zWa86ZFSowAcb&k?1CN(>K4^X++%ru1=~sOSgcdK&N>7XSS9R!l+-G_4<(WIkuB2 zIH{CwRJ_wCZJG1Wu7I9O6HyVq4DW=zB{zoEbB?ZUM?}jyy|L?)m+D_W##@p%2R(M}A`ry}U0=eBmTkh;M z6UX_&7_W7;{BoxC74YVFdw1cb;fIPB^g_RqE4TXV!A+(%7pa?vj1&J29nE#p(~64R z;a1{K;|Fc<3-BEC!e{gH)V!LP^1iuI5fjm%ROrW(hv>)B3Uv3oUI;|WqYJi);jdtXFm5llAI4lL4i*qQF zFCIMzVQh*{YFSplD`-u}KVs!_dBxDb?OD4qWtbRz20Sp@IZ9u=xcI+qjlpZf5R=L< zK}QVq*(jth5BiavL=oH0E7Uzi| z`+C)VC<|4EVT>Sc%mDUewof#D2TfBu*I3+`lpw{`U&oPA$5}%+OW9QD$&;qt>|enq zEzWk&9jICnb_6A+7`znd+iS&mm*|s~L6m-`7|Wl*EKKAScvmN~SM%C_5i7G3Nu~;f z?7-YA5RyVfX~6QmQ-r}(-Z3PGQC7|wev5=eFC49^1NE#AOX?$-7j)7)jae&-+^= zXl2^v757!zX=HYm#8XJ#IXNaOKhGtN);EL}QL5z6_`aR14Akry9sIsAL01GJ`^qpA zjPiq|VOc=9>W~GRh7nh`n~O2W3da!0mtKBf4=J|i#Y+7J7#gw(UUgOR!DhiGj-(c~ zz*2o?vA*s-cpjv*O26NyBvk-O2T?7b11b%MYH1QAKj`#QSi5oPuWbrfskyj_K@Bia z7dXE#qNIW&Pp~^Bw4p!*G1BKV^H2S{5U-TI?;`Tf`T=4FU09kwLdN|4>*Pdk11iM0M-}q zt@H~&uUoa^Xroa)3kmP(Mtz!N8YL+dI8K=W$yIzF^%*r#(5lQE4fM3DBwJ5-l`GSn zHoauMgdxHqnl2cR$S~-YoS~qnilE3^fqgjGt_*Y`pNbxZZ|*0<7aFRzGwVdti}J!Z z(!QyY)H$w=AZ;Rq$AiUGw?j(b0`giW+wJxH7>4AOZV;!uMYWvqf9dYuXC8Xt+i2hD z_@ttbyW^<%N$FvXV!2{qO;bkj&e@(PbzZhBFmrzyx#vmU_nAYRSJHbsXkBO7Vf1AZ zu8i1E_mMEvnxk7vuD5jg!Y--^JI0A!7TBm6Zu3=m-5I@wF^!#IcX;Pd9B_d&<4{&8 zLD2{fywQn!j1l^4-c~!SKA(O}mPNPt3G_oBF%@ar_csyl>=^CR{cN~k#4cfKyCr(f zdG`mTm>6-u?ZI27x7h2c4}{Z2MOL4Co1wB!1mkU3K*6S4@p41Rhw!jFiooIZi>3OH zb=y*H%W<6zI{miovS97?R$$rN?-F6I9=-`&cb0V?6@A#)ds1gq*grlzyV_Sr3fH6P znW`Gtk7=2v<{$_-+|#oDey)FVtff@yiY0c#OmhZa6S zs)D@Yp)!JEMCgSWu}Ok|$mT4x9!tCHZ~XdP>vUFj z2Q5cVdV~Se#;X6$)GHpl^-IN>a-ZRp3c5X)1C75=;KGY!jOcrS>aHJXQO?>FsG}yo z#F$-2g2E5BMaJux12D`RW%&`d=yylUsN+3hdn2}O7mCT2?gMAHQVwrr{+S_Nypg#Q z;701KV8Uf9dY~YS3E|=w5tn3qszTTZBK959FjgLl#X$+ibjp_Akb2G}aT^$rQ%?aE zg%~REg+-vOs*9Ir`l!rQpADQAec5i`Q>U7SL}5;)I1fZN06JQ6ntCam+1yWFI3@xzOq0YYrr44j<{=0iw!%%w}a|-y>k`p z8g-fzlst9<5h>JgYGM@wr3@CySFwkh>elK{0w1`#WExH5H4|?ddSbS^ZaXPdmDK*4 zzUIm%vgT3EKycCGRIMtyxFQ82R*%4Ui&5$0FmVa4z=ON<(~IMczzogdJ?CBf0D7@j(eOu8Bqlyb#(yg`<^h(UZ2|GM2F2qVAqp?Bu?*T1roO8a`jvM&rQq{v0 z#P7^Arug@M(_&MC=bZ~|DqVcpH!z9ml$Q@Vv-F>~D120(dH)3A+om6Sr9pZ*=tPr&vtunVDWI z1ZWCO(Wvem4ZE`BdtFR^EEi(z4F^(2#*{E&BNG^!@059wT){eXV)3Ro0_UC72Z@2B1IQ<51cr{s96p8WqY~6A^VZqY#+s&}(SBXj^f=EE zH)qAy*^S=sYA1X0zV|iu21#8%69C9vw7HE;qn6t44hnp#c%OGhx^^mZc;aq;O60{A zYMsJ2v*a!tyXnebc;IsmXfZh>>6q9P^Xz}#(wE6IAPy2!FxWFo6xv;1Z5#aS4;Va# z$xnFbDk4EiV>mbsb}=B~N#)N(M>ZlRi*Dv<7${79G2l}Pcxbwqm3PW;!Qk2dM$3S! zXg)1#!GZ>Qpd>QAC)71G+AN;Fx?pHCs|z_l9H)6@O<3+$=6}R5t7ja z#EOcs4WY|{iUl?0>T^*tmBf%&VMQ+$*7)4pOJYxZ;EMD3o-^KnUXbsrDqlw9W!n@F z?O{L)z`-((U@^Ob(WPel(Ng^(Vh`Ab2&uU$O>4kf--FA?^lIKr@?K0`PSUdU^;wuH@MmySdc4~EN1lJJhIk%V z^)|d&Ex%5_n6}@tlyFfAfXMhP9$9j|`Nj^{O4p~tDd!M7?s*5wIy0Ifqv4_;nA#Zn z8Z$lLQ{t}QdV9BF$v5$-^MWwSM z=j%&Vs^RFMvDlYtackR1#uye5F3CGefkXmyCS0G-x4cXPP_c~x8VZ%gsmRv$2kYzc z`~26Wz?o~->BBCG;b*_xs?dN{$8ue_6>F66LMV^Hw!H5QqU|I-;mUvM;=BPJ_YKsr zF4OlE_iMP3xp3^8Ma8*KyLVm1`?vS0{OcD_UZE5^zZE1L-j+TYm_269NFz@%iO3vI zPL8?hPO{{gSl^idRu4f{4fTyPyVm>1ZK0KxxU%?I7;=tPw9XWv)T}N06(v{w5tg3s z0`1FLhpE@6E8e$0js6r|fV;elG|E*_&M{T-Q%eL%(kFu8K^ z>kPzW>c|~VJdfx^ibs`))fH*;$lp=e?rc>-Jf~7_qLuIzCrVuji9GV3%3rmHzAd zH6bTjVy5w62c$CGaE&a_3Ol4!yBlreU~gPs8A4zN_c?Pxla0(JacVxseJ$q3NWIC4 zQ=M0UKBbeU_l}k5cMi#5k4l~P^E-~Ts(R4#?Ws-o>)*foy2KeB#NFLY8^|$kK0(2y z4J-RAu+DQdHxk!IpdE{c{f>;94Y7ZAL>?=Xj@0k$JM#5xQAwtVUBF*|RX8KvOJFdq zavXRM6W)TRKg{Ga$hy66zC1FkwfEh248AqLkKk@N>(Cu%Y6Xy8gYj<1ANt_-a|03fOC1mZp$3k7ZBMMe_1rGj)0yVi>r4&UWLK zg=bYMKBguG@*e5_I=Fjs7&^>cc-c5X4+QK{CZ7krZ%84dFS425$txb^<3vbNVCL4MSdtm>;DHLz0ji2n89z^MN!9hD?iAF!TWNtTKuaK?pcp# zC<7SHJ(w}~Nmf5>+|`p2A9CdkTEK*T4(_9m7$no_7~~6yD|&@8F!r9eSQa_R`o?nI zqMm5~XR9*8e;HZFpYG`ggi6Fwbw7eO^-My&4u_s9nE#HpE^@0AwNLbu^vA(E9;s#x ztP5qJ+SMES2~y)UYffrRy$%-s+I{MPQM8%=7#b%(1`^v3&syjvFyuU>8St+-@Y{N^ zNFvK6ZB(6u-mkZT)L_1Tn_oSaGFti9^Xk z?c2&O7E5mX#@(;l$Lo>^bo;g$2c14%p;wC6g;pO_0Xh0=HR|vTkBanxJvm+hSm*7e zI+L@mTZ0CBdSezC2*%%SF11gQw&EJDgT`M7b(_rv1nrh+RGfbwulkdc!)`&y zKpoWm-a5$r8p!Ve268etE`B+8sB94_uZLFzO)!9uL@XyOAi!mn@vFMU{M5gVyNt4J zP@Ft-u6ZXLh^A1w7cRJ!mzi!nz>gdiY4BlQ-lib*TJ;g;Ey(cFB4DjsXl&q5IK7#LcF^Ui{m9l^Sx`7y6eD zvy_NNk@SiG{(tmZb^P#{nZ{>QKB_GBo(>1@6n<+$2Hyqtatu^=amP}5(!Y~$dHL@8 zRM%Tk1@iCb-c0XCZPdS7v(GB+GZjW{H2Jx*&o+N8P_$iiHH8R00wH21DncHbzYZOqc&c*yKoWFGv29oS&vqUN~+|0bf%{@gcDv(cL zI)9Pc{P{V%(xgKWoxJS-YykgElJS@rrFm|BdHqi@u1opaNq=ixWPxUwGN~_=49~9K z@+rCjK_z{xDU)3EvhsyPZgbSfX$9LC<+xcND!xPn_$DG6s6pQr+#j4j{2B(5a?E^AsBHAtT{FWdog6fEzp; zZ>BGNY5EiX)KUS&E`zZr8=izOOfAbG{mG%fwPjAJc&T4c?BkDV^;jMLYix)N9a1-! z038wB=VLsR=Q_Gcg+|lusyhB+3%ek3tY44?SaF^uX~T0omISdh^BFIVcd%crV|uM? z`tf(;D!W4fVBTT7)O1m=p&Zgtm=*VUf#Fm}xa_RP}^@ zQ>Ke+$o*!bkQv)GCgIsMTl|80~V&#e|h-B1FbiV`=gn@?`Y=tFj(-zNr%V z5bR(2!3AR~c?Q%=%$QO7s@_AzsB~|4fyZUa{K%5LGCg$^QI_iR__Xj!O`IO?7C_h; zA^r(|*Q(pM3)A{EI?@z8{AdkoES)wM ze%W8~P)*}1kaLb33H(ZEQYwX2xeXYy=w(i+KE9UXv(ftVvRSLpT&pSJ#L`bOLNpT} zhBE4t`aOFuO+VZmrmb%nlo-xX7fWJ3M#c^4li0Cz&`0XtBgw3D$pt;u%C^LHM5gjl z)R;h+38U4SkH<6BbmpzzS3Wc;d}fCGk4%^&xKH81OWP zS`V|#FEnY(@)$dE!15MhlmO=R*gZTMV;*x5{RNKM1QQJ_cq-hm?y#ZL5g28OrL~Dd z@Wwommzpe$smIy}!#+2uBy=XQv1@g}uFo-p;qlVqM?H%>U>Q|5z5DZ3a7Zcm;5Zf& z%7#eTTN276W0sJONzxwwFd9v>zQ8&wz|3&qOiZcQ=rl$n{_q@;AOSQsPiNxCVY@PO z|F+M6I!VjE5@&t-Z29TS>7I6Ew*pUnnNw0~A70_{N439;eNMHf9&;II^$kNCiHu#+ zQpo7?Oq`dfXwcgEK%B0^3~e%8Uc=L^z=4*d+U#M1U9-dOb#dhJ^U7>~f}7u}su&#c zh;D5UVn=MAwo??#a2Ajl;iPj!^RXCbDFc?t4wmL2vKc^khl|6=DQq(I+s{xHOw8)w z4{MF9S!my&3jjZaCz@SN&u9TaE zY*Pn(|0F9m?_sz=-X-jx#i5l%2e~S6E5wZk+YaVxWFzUM~QRI%ow+DPIV zj^FGQAvY)Q`1;mT*Ab?F!X(0J5ANS=_`+A&m6a^woedj9+UCFb%85pe3aE#GhpRB8 zs%ZbQ&;$Z!Px5tB^~!?4DN0%tWguz{1Lx0}c2YC4%z+p=rN$dAui$EKrR8OH#Bae; zW^^tsaF?0wM}Q`A%M7yK1GVp|EM5QCuGs?%VO@K=!*l&Isz$Q}>McmhFk2W3rn3@I z=7E8ssbGr_-|p?f%!88cvA80cL`*pcZnUk3YExc{jl||;YlfJVs)^2&P&oo2W)*?5 zn}WSb1Amy{*NQ;&kDJiHa4H5Zf)u!rlClOk4$h-7gTR7X=e@#X(fgMzy6L}R2R+27 zFf{(w7W~KbUfle2;v*yO_nZ>7*01@*qvc0P3Q=~SXDTqWm@s8J_Z+~Sp#*X_dUA=) zq`$a+?HSD52;zK#SwJJjbAt-%K!jpzP#29VC|w=5&FMTY``ko2BARfp_Gx-}NsWHL z!A*Q8)ByM?B_Rejm)VCwa6Ps&F1F_p@uEMK~j4cixEk1r&l zlH1Og6=OM&R?W^Do@uXPC6C2H_W1yhmscq5TLYk13Ee*+du`KPe8N`$}rms4UNw6L~4>afY&R35yiO<6T5Y;@eYlhN>!4CXK%9#s>@ z#_Ql{dd2`l^J?l0ZO>EI!ZSx1h6&?azANt;TeH{9c3vC(*c&vS6(UvEZy9>G$55~` z6YIdCV;EtGJCk-6X^M4DxeK!bkv7f(V!5yb#f>Aqt)P&t@K?vfq>sov+_~S{sj7&? z+FgJu_HUgGjDE#V@xDtgQ-u1-;oqBe4$$P={wE;7zxWQi(`;rT zeKaWyRJ&%hQFu@A=Sj7jEb7~OG6F?`h z{l4|Gzb@j$3TD!=9E4|Uy-$vvyk5F4h(~`|I~3b^872pw zkpJgaE4+_%e{yeBeg&rq zz(GLBrOm2fQlwGnL(~0t`T9f{JB=bv7^T@!A36&LfEklpcT4Uu6FF}E#$%D)%GkL+ zdA1Q$55}}WPPrlyXF8QdGlWF?*?4~T;I|IBDP!xn*F3fEds>BhC#ts=@^E#FEVLZm zga$d2CA4?PfB}1EDbqQ!Vaq=SP!L@(%pT1~wF&Cdq7-LD%sEhHHYocKka{L#eOdk0q9X4glt3xbbw^VwzuJe2 zfF>6plbOmq{*vK3x%^P6?Ehro9PmA1`Y9VY(^}qdbs_ilUv5W<9eTZM31qynXrC(e z3CKJ5JmLKDcHuF`=_NKFE4h(WJkXDV7-~po9vjZOLy4R3L4j&`ye87SYB~KG41!jVcaN67X&)B%SVfJ@Z zwDRoll?gPSVxWz}V(S~LY@4A^$+*}7euuGVLeTt}$=8E-7qwzQXZ%I1qPdDIE&u1s zmX;UJ7xsMfw+;xWvXu^^S|(neGz~n9aX&vlB9YclfI2I)<=T(?M`x1{3Z;>2k=<1c z$a%HhVZ+xS?qx`y^DaIZ5mJf56r_zKaZ3w5WhUXWj$;dc?q)WihjXl;<|h!vs!S@T zGEpfE1&==mlwVoftp?=ODT0c>3bSvZaK)kA4kEFc+P&W#Cw;{!PS9-lLPPk8_=N@C zFh9!?72xyYv)&&NB+!~JRI8WEYtPYu)an))GTc7y^@SMpu`IT8?Y+F8N3uEiJb5X3 zJLegvkY5pew0z7ivE!;X<3`HVb2#^z7TY?60jJIgFLM(;Xam zuSf@?6;ZVByI=-EdD*+aLr19>C0l>tbjl~UBq#S()sm}L@JC67!!Xnj(7K%ae7x zfHTrvH}!HF#`{THoyt1$x_tfdi5$Poiz3SejWYSs=uc}ps^qXydT@;v)&SpbRNgeH zCh#KIP`wwYMVOmG^*pQ(pM!*FQhkUldBBNtSt_srrz#6?(NEjMqRJi_Z&N&2D^m8-1`gZ>2Ax!`DZt4O zWr!E!6CZ9QcEkeizL3)=2r?=(U-t?zB-!cwcCw{WUr;=HGge2F>%all7h}r=rdsi& zLu52CW20-?PNXYN3H7}~r0rR|ajeD?r8>r7e(SyO-kv{R5?9NwENG6-L|3ONVh&G+ zk^w|X95`;}Z}f_t+zO7v=u*UQY`{R{j?~Ck8!LHp~(PioB_!CTbYh(rYh zm=$OcLbaEPcGO{TX*hxjIDQri#mn%X2>pyol*FaUZM<+|SO4(ERLz%u-AN0w{JQpx zm{dY?ntq0*C0}@^b<-_x|8}9>k@$k2UZlPH&Jz4?vG_nDd=kb8)G+uYp1}Prsn9)X zH0eoZDMW`-?av&cmb*XD$F2Aqxq@DKOn=vZUPiS=KVd00mAA4g8Zr~}8>%fwiZ06K z>J+&`>DkmZTsX%4yM8t^FICt#6%=OYN@8_N&uN|pkbVa8!FH20N~yD`iPey#c=uV3 zr?YD@j!apOWjb7M3q(91Rp7jjLMFuYsvsEXv2(^Ri9*YicTENVsrivOmd@Qm6-8nd zsvsjhYZPDW|FStE6lmNTs&x5vi7nsLsh#k?7~F@QOU5c5^rg9-@U_?k4-RrOS<5LL zIJVmJ8zRZNcODKjyFT~(^Tt!%A6Az35!F2VZt;h9w4&n+P>>b)g!8{>JPijm$KTUP zt^b=Sn6@2+Mg*98{9385uDc4F7~5D?)MkuOW?j+RFX@}NmZidt%BXu>f~T-jO19Dq zh!e5Mc0dv@L<}MizJSY2GI2g^*lRGTnGs~tvw;D4VM z3;IZFb#=d|oGhT&l~pMF;28fXKX3x64QcOpAIjpY$NU^Uj0wnIiCIe_6`|+*hQ9+f zHw#8r;B2im|0k^Q7tqHY2Qe%*{Zct}s#$jvWRV>$<@Tp1rr}C4ss)4EN#5=cbLB?O z)A7>^2Lb(Q4NatV%uHBtO+jPaZ*$HXTy4<&#Khuabz9YIrGd8Ow_hn-*Im2ST1dKrfod{!pYM71uV+gDFUFR=eEe3O8;eB%)3Z$cOJyY0AN!> zvgL4w@Ftm)8Mfh%(n+LlD$*3no(_?{_Pw-Z<+ytB?vY)#HSDJ(*QaYcPF5Lbf279@ z>#rnP%AJ;v=>f05{JY(@SI!pJcy-24wF#0T_9%P~%?%0zk{>ynra{c};|tGM$rGGL zTEI6tWRRAw_MrlpQK3P)bdWJUcD&E=_Ime0$XmP2s8ZzbF~ zN_F?s8K6?A|5%8YI{St z5ygP5j4oJhXZPC&!rez@&y(;8AMT?m`SvR6LrSQ1Qc%^KwOagNIT0eF`z&9w1HiW| za)*F$G)31?&_4OMn$Tlh;l_l}g{LCqBs+Oir+XT%Gu%T9u)LdZRtvKY8665$oX`WM zIf9#nBh(+NTZF!xnU0i)=P{djfUq1$jLcp5%ios8{D zL?r##V}qa5k-1XjU^F!%HWc_|w5=o7NeD6j4*59(j(r!;-oC%c0rL6>L+E$NisBhF z>&4G^ZFC_R*vc}?hXyiLNdxpH`JMyjtO6p9bWzqcvZd*{1m~)&W7B8c`oMS6(hE`n zI;`FJ&3EIBe0*oPw<_SSp|_bf(%cpyaZG)j5P!gwu`_H68cm}6LQb~--9WqmCb4Hc z*ayPalpO1a(8(m_T_!O|81l7lmF%HYdtKZFi68Skp7sN*d=eu)*}qZgBZLfbnG4kc z2|Hw<`_{1G-#s-k-}Ul^2*@O*QC;q|AMJn&;dkxq(Lg9IMkx!QVRDZZrk&Q2xvy_ovg+fUbLvR{*o0+DIcYyk}gBMcsojJ*+3HoqrzdB zbF=qw4d7A;o>dkt%pqE^50qBHu?>cc87&u}N=Au{+8BFm%Y1aHMxJ)`Kwo{6f`rA> z5T^}61^9pVM4G}#14~igYk%RNR{fc64-%;RbUzWn8gR5}f~1g*ZV4euzYS@s^A)1i z@*9+6HTTAbcjRLGaBOKA+bzaBfoadP^^tW~s%Iez?v|e~7W_B{a0e&qE zE*P^f_(gj?U(HOo$O{@HH;j*eSc ze6WAgMW?cZ->M7vm?&k+FhG-w4_<`LDW3^LdTZC;&Z*Q!5r-bunNeAsg#EJR|k!n5NhY|nkA=XW2Y*g*h6?3l{E{Izt%>|!yIi3?|7WfY0y^Xe8D8AoOts@Oh<8CQpjgxD~8f5VEENn5>k{)sZyXNJlV=oB>)0!TpoAkuD7> zUj$L;7XdU(WCC^qA;&r!0xZNIT>%es(nr&ZWl=)&dB~`L<2eick_k~Ut*pTZ^6DzF zP!taF0m2cO?`Askh+T??=h{U@GZ%s)+bpe`-#v(3ZB#tBwLa?XwBof3Db2yDvSft# zaZZ)|`B+krka)DqM3Ol>QEw{zxU#KcvMGI20l-OL>HF?_8QG<*)Id8akF;h51$HX` zWSn=eUmcEX6>jPoDCcbi->E!0;Mqy%)eQ<&QQMv>(c7-;$;uas@5CruHnF06-FN5M z!NXqw`{a^;usmPG69^uo6JB2*!_agA|dMaoP+#GNu^K_QGY z21v?~ehZh{Td5T33YtzHAFq`jU7k%(*uGM}Efi9w_AG3BM<-SqGAbEpUrrew779(jbHp|rok_3CKOUpCXT&?9bD0p4^63)C=MA&;Th2^2D27V%KeE;X79KQfnv9?d~j##n|K#4~e zbHs;VIUXN+bJG4|O6UMegAr{goKur>%@?B!oYIxjegPtHSvDlGW$eH|^Bzh5+D88b6Itj8~SS;qWP@f#-T;1-!Y&%Lw| z9J4yTv`eir7S8v#6}6$Zp+U5}K*UDwY-Dzoy5(ef_Bop0t3$8Z$UO(L>BZ<7Z1=}=LL0_oaOi}H_UmEjV&&%~s;?8y3PcKwZ{EVvgo2hJJ)D#rEq z11c<~rQy#Z`X{T?RN%Y&*VM6xI$55{%2^$-XlhwW>%9JnA3d?2P*`SAcX3>wP_Fpb zQpheePeA8F+=%&?&Mr)n`)yC?kP68cNlMAP6d-6)1dA22xhS$F$td}Bh+$2cDjriJ5 zsmz+(%(if^(3zkS1f3B$QJPZW9rNR*JUo4Ljoz2y!`o6z&_w^)6SO%TZxZz5{Pn!6 zywhOgYrZAN_ZZUyR|Q;bH_eHzAi!5l)h37c3#TE|XiU0RL-W4!)WW+{f3ZzNvGF;G zzGv~5*ZxcUx>KDLGT8Bz9U<@Id^cj+W1LtRe-2R{O_;bl@dVqc#ff8I>H}V;&XpBH zTe;G26wiOMXOtv3#sktqZNtYn2*s@928Jn^*GN^l@{*|Fu01??0oPx{Kk4S$2UB2#x0&s*VTx$ zLg>@pKcJ2U1MtcyNzSy`;TMey%QmWJ8G|doCPAt20h=(y&rPnx4s-|Tl_M{ z@4utrK$)YVR1ZdwQ^%8nfySZyQIAqjP@;a*OmL8WZwfelsr;?d?DdCA| ztlp{#<=ZbxtdfAyT_76mC32FnhaFSx!6Sx6wW+!T=AP041+?eyj#@S>SW9?0fZE|d_Y-jp`{P$|#=m={ZCv` z#|$;W8|{fGsPSysyUlOzF`CnXNi6SPD47?oC;6uJ!<$~@wZ_J z5fdYH`&HKd?K$I(SD62qFiuO4vQnm@xR}aS+&d~X)7A8PxHbJ&RwH7&hPgRm4Qi{8%C?lH_kTur)!+P z4er|7g-ibae0+RBJD)8d8|$Mf$@fkZQL@}qCZXioL}r9JFS?s&6PxEKl2tcqkmFpu zJ4>Zn3~4s{KY}V(dvozhYwaJj<^A^HvyL~$=!a6hSWk8HjkD!7b&f6F!daC&gT!Ze zR)s)`@(I@Ao4KwP-^X}h!Fj49^Z8~o9N+uR|Ha=uJ~InYD4DOTv(oy4uc$C#t08~F zl-ad1dXwG!ZuZGE!~fl?@Pf=Z?R&4bn{UcrAcZB>YX3yczZnO8j+%HAjTJ;j!9OAg z&H+H&-C<%4PzPi8up-G0XGir3g_Q?UKVMu3OvDvJ~;n>KI+Y1qP3$s*e zF-u#cpmFNY6-LYDKSv5fVZ89-#x&*S$mx5bT4ztw#{*=vq{0Sw8*f6Ho=bC@#@=5G z1RFD1$DbzgR+JMRogS%on*x;$JhJxImQo7#AG3j}ibiNHeJ$SPa=ryL&M%q&E}@kM zd_}OorCQ6*z=4YzAqJZ?nL^Bat4+-WwqHv+Nmi>?|1Avc>frSX84M&D;5mM6S3s&1 zVn=d3F8*9%K+m@Kmy74HwU%%4Cm!)*mL-&6Gniy(oRc>$7rpRJa8i^X`;;d}A)e@~ zSv5C6NUOaPQfy#Z);^YMfHFe4rekX^l8^ZDAB3G#Y%f69?z?N-+_i1HyS8oH{@1o` z+qP}n-Sw{BetnZKZ*op@axN!xF*hqSD{G$T_kdlsgDLbgS6qv=2(!<+?E4%~!%A!V6f(>?3&=`M`gFGl%4T1MyPLaYYAI)}XI77%pkuU2hO~gZ zHi@?(fUcBZ@CB_2&^D3Z|DDtplylUVbL>#E19WEffREx^gf(IQ=%knWbF?@FPt&DZ z_VUQ|{vaFD_Eg}QdBOmfH}WdTFYTz6jS?1;D*o#kVdMGTdf=aP**a^G(A55se1=@O zk6!DhOar4XpD}xo+#+GZo6d3#Wn0v_yG2(@4o$|Zz;I?OcID`K2Pz>a418wsmy|c1 z4sZrFTSU&YnDbBCYk>I*YPRWT(L0_%&+H@G#}b|1tv@x6W76*r6X^)-Wo&|Lc9H}jxpmns z!z81Sc@0|YEPFo?`8YDYrWhN9)W3RXqdqQPs=TnIoYCY5VI?4X zA()_Fc|FcRME7`V4nqrJfy{)fh(VP@1ws-Rv#=?$YC(Kx+5MpUZo0Z(p4a#L-}_(t zLkB;3bMIQp&5CM`k$f=3H`LhZy;GNp`ISply^)t#su!Zlun2cW5rhClsi-E?K&yds z1n*wViufXv2MyLIZo56^pwkT657{?!cF)hIOuSthH`eM@M+UvZ*%l-)oZc^dD%MI1 zRl1vL&$|AL)2J{HT9yAgMQxVf7A$m-^gidV$6M3)4fA#1E5xgqTb4wbH0S1aGFXhL z(~DNB+?{+J6Uw)?s@(xDI)+^9o5;a7lyleex6GxcCz?Dna@qF`3ev8;qZhW(!N zLn`(Ufgeu6G*wPpd^fDRh+@s;SOv_f>&>Vzg=t##L>7O^OuGSWe&ps=)Mgd8^gN8S zCcLNZd#7Q zyF)Gf{>;E;ZBk`SBg&MQL{;!~j7RPkWEOR3=CH5nWN@S{i@`;={-LX=x$GXJaCS;c znjeoH9i_i0f^Y&*6Ke#W4H@{_OxM_nG2s@ov6wDI4X7RxZKj9Sh#p6O@USAFb<*3k z(ve|no|$YGj76r-ulB~?pXW}0CnnLUqHJt`d7^^4Xld(#>Sc z%X5NwON%vwGMasLk_!C>;)I?g(i8W>vq)`uY5-5&@oNPbUBz{hP4=yZ%T9U>xE`{= zZKKIIr?jO??!>g8M(F(s&$k3XKhLzhz(CMD+IOezcGiNE3`#NpSx1F~#o&nN6~_#4 zj4)N@c{9G-O!a&KnBVUr*8w}Gy`Rc6sx@kd%2!oK5fX36N&-VH^Wwl2n1gYnVORz< zh->;{e>(u{xuSpZy8-MRd>pR^_Aise$hKA&@fLS_HzTaN@uAlDgcNUt4tV%vJv;Ai z3iop;$|j8suKgwWi>HxTp!mNJK|bVV)dctPb_4x81DpOWgFAPfbKFf8oHdM%7W&7+ zKsd_7P6%>|gM01~5B+NU(bFa7Xi~>#%$Isd#Bi`8@xvxZre)>xU61Ow!O-y*^>}!H#qvRH3gj&p{*5 zuL4CWz%%H}Ta4x{4ke-srZABqqNYvI0daGGFmUkkel}rgI;fey{$1w!re9>kHd9Fu zV`l^0)%cM3sB_$q^0G8qX8grUmnt{LwX&)YgL~wmjT-8oR>E#^m*Urf^)@1lSzz{~ zLFpDs2`>$znMYMJ_4oH*IcDh@)nVq@BM%qH+-lYk2b`M*WefCLnCS=u3!zQOX4y`w#SgN4Ev|oL3FYG6JEtm4C5-A zGV{mn(OJ`A(m^x$toI-7xY!|8$CLkXGZ>u5!f~tDSoN8j(@_J;|Nv?%UJS%G)(BLM`bLoLR2E_(rM7qjc9NOa?p){Xq`a; zf>YH(UlyB}gHsJ77pv>;Yf)9RzltDdYLJEiJePi-%zL24Tavgq1V-{kEGR&N(X1e< z5;9Tx*=sk3|Mp)V^nEZRI|d$vGv1LKC(V<{HJV8^<5MJ!h^kzb5e*;>mjJ)C)sHCg zt%WLmWYxiVjULA_mnq=!Ao%17`-pA;Ls9`qN~kcx*=`S=29KwOhtF2|5v`%;hx?4b zUY((8bf*$UeF&8tFg#Ws&Y@r|8rpC}Cp9Lv{|+F$D~7%vwm8!h$q<_qDzwRryF={D zkvz+D68xkADtIKvDk*XI^l%-@W2Itr)5Nt-Yk#Ut!#r8*{wtr75;jOPis(xNSXvrJ z!xplUX%dzF%+RRq896?`04tgpXIzL`Y*Jf~Kn$Thbr$y;h^%K=5=Z56#?^CE0w_ih zamvc}6pRp2Ugu(%Raz2OPCqaYk5+Warbao&;?1irsF-F}-#o?zq+N>r%>YB{xG1D# zo+;j{($Ttt#I()RBc-{Ve92q@bVZU7EiKTPU?5}sgaAgMrw4?7HCMvU>+rf}QA3S5 zZ|y2KPS%&M>TskTae8{0bch61WazfQEQm^#nR0!p5Ss9cBY0dx6v~gwQB`Z-i}yAcTP28-omT*x7cWff5aS6D1L&vyx+Jcmt22|6-o zo5#u3p65<$E}}L^g31pw6qbXu_&qST5~;0&s6_8u-4FA(%g>EX2gU=P8%};U(YLHt zqIbQTI*p>LnRp~tv_6pySJROZd5C|3=NcHx%iZd6SS5b9sx*D3jF29j3~Xg_LqZgDkQ#TnLQW(T#q&VU%NjF@ycm~1Z|C)Y-6C- ztfegjzHy>S`x-@FTO1_z1PP>4hc5$Yy^FNbs!9Lzzf>3kVfY??4nPJRLvL*2K#Bri zgNCv3F;u%ZdQ>RX6`FF<4TT+)vZBWW0Hx7 zt`vmc%lx^b>JSKwQ@elVq@3$q|G8O}JND9i3yAeYi1Gvs|3O^k=3@yCqAoD<3;UPD zi7vu5fHztnBvANg@9@am{@;E7`bd3cBfrb{g=+1Q49B?UY?)ND-sbixgPSblHHKW9 zS*|#OSfKMkky3Hdh$QwQ>M7&gjtoYY))Y-ZUL^a&_2TW`=l<>9VSne3qmF$2Ce!nK zjhm`tZ15N0c*EgI5=sf(;9F=xyZr?g5&WQS)x0kLSs4=qv~TZ3K#Z_a_ACw9u&WZG zsb0}Jzs9egU={&l6k?YE-_E~&W(m#r?3`@rv>|S=tOu?McGDAhDPw9DM7LYaCAzCL z0K;E;c!o2A#2#oEo(t6evdmDP>xygO;^F9JwGAXMfr?06-UXQFbneoVx2 zK|CcjI+8iK2E#rKKXFdiEHwtlYGeA`xuR-#Xd}VZUmYRXmIZ=1)TAuJ_@`XMdPX>( z8R-J>K8OIpk54~b1w-~orrGRX&xWsIhm%=l)aY}$OegKI!Cz7bvC(p$i293Miqill+ zol-NUec}HpQ(1Fwc428NuUMe6u;Hkm^+7x=M1#t{B{aC?P*A=dR;e%{{;+qx^JUQS zd-+;z$xQq5M1O@qJ;~;s3jBs`2T_#3)xtNLM7jq7ZHdh8)i5B3AV@VW;iCpb{|W*# z+_D@&1co2oAgAb$W6)IWZe#Xp9EsWarj-C>PJHl6WGc;(TR3rb;?Gi^8642dSAMs6 zUfX3DtjG4pIrTFx_Mel2%z^Nfh*OF({?fvyF~{`1t=hU-?aA?&_q29PSh;NYjOF4DD9U`to^kseN-Tsig-D!ns${S7((GWi0(p;-x0-;^P$7T;fk@J}a4UNtK(K z(7;?)&FLw(LMz$K#18HV;?_n!^C>@Nn2#a6Ufi;Dh}E6cuwc)8PT`-hy|#0HRG?jk z9g#$m`n7~Q3M66rp-$t%d)3k8*4;z#z60AOdqlB5f=G5FvlE8j($|~16a<1yMPl3y zCc}PY*OWJkGfZN9tCIrJywpl&{AiOVdSb({73Tp!dy9P2yhTh!33Kh~m039EUVJvzqT|!_w53R8ROXq|MR0fm=C;7|?=Lsd`KAHBZ4^XXzmFf~ z#g50$he&&h&ufAUFnq}vtzn7BI;F%$vbdr+9hWG`lH$bN2^8Dd_GZ4)4lY)I!NP^< zz2VQfD${Pm-G*K8Z`3>htZH75R*THf(OiG0iG=!`v9_{kja^D{NG> zFBc^Pljbi$hUL4-1)cN_hjGB^v|Y~*Ml?TIv|YZs>B*<`zOhy19mWCG=}nX$ z<(r#L2FL69(PsH620TtD1T=5uYgOPi`Y%Egl}H}Sg-XSW}-u)3|pov zZeM2eGwf0D8YfL12IREwlznwPszSzE>)Q8cMTbPh!e2p&BC!QXL7Hfir^a)&WtC+W z&M7T~E*#!EQM_e9a%jJ)Uidr%fYp`0F*-Ba#bC)P@-v!!1UAj>7}Ex`Pgvb&bAyjx(((+bXrNynu8Onz#!DXR16$lMTZku5xC}s-Aj>G+A+0p>|E4eEQrRLAT+|&l61u~KPMrt2J z^JK7G0yu{_9FzOa2)(d*;B)BDRmi1%K-D}nIr2BBcV8EWtx1z;Z(t%+7%! zAwWO_O;ox10t>bqLqV9;N=_($178S<#>E5Zm3}FS+A@?8Jj zM6`qiH3U5eZtT>xj&2`|$T&B~|2GtKbgO2N0Qx>{>#B~E~n zv=;~V#k(~JEj4a(af)@rOuInVHSiQ}_$BZ1ys>slT#y|zEO7&>=M`bFhZ{qF7e_-U z7zO;*)1QBsmy~P@Vji4@gM*L*oV!H~{v}MHtg(`PPC0Q5l3{TqDol!#imWijo@n<; z`?@EK0PhDuzLes&TN(wrM%l>vf2sX%$73J@QED{gVCb3K<(K&cPY555DqrH!hi z`|~i&jT~W|!;Yh`uDv`$h8yQoOZKaR^^Ccm7cNIo-0H+oGE1Nrt8#yGCOvsC(YvoD zvd9R3S&Iwp#!`fJaI<@Pq(BDlf|(Xms>4EPl>kMR2REz1z|Ztppe znW7ShEeTSH z109QilXQR|Hd>H@fWeoU!C0#(i<{Vda4Bz7ydK>ss3%s7i;4ue!ehRCOhOU$9IW$zPZxa>oYu|Yq< z4o>kafb$=pI*it1P7HYK2XQO-4#ayfySJa{a{yOK763Ew#?2s$STMmn9jMG`1@k17 z=70-W8wyT8T3b!`!Z`2vMXs2AgAA{oKI>)-9nStDmT2tx)gI9Cp#Fv{ZcXb-d*$kd zShev4K(VV_49@IdmI!1`GjHMj+f%`j=iSyn?}_EtN(fCE^r%Xrg0 zRV~fPR)n$RfG>M=2k)fy>U@>b6w~7+TkF4Fh4|!UK*~~|KjjB`ryIn$q`T&&WectDLdA3DFc)#N7lxn4t#8|gs6BsKD3E+i};iU5SabXG4X@ZnjdN)w-!fu#Jr zCMTUOqjD^OmhEAL=guI%G=fg5)7CJjyISCq-5xeftEIk!@qut=(`34|BkQ}s@M^}| zHM1RS?Pb8t5pe0tU004XIG}gE6ihe65pa!<5Z0V;B=oE8tXgO?s%*e?qcD6puZ%u! zc|H%|-T>ih$+fGw@uzf}d)J!3i}B3;dC-%@(WnLjNaBc~SeV1b>+#W#soKr`L+60+ zeVY2vHg=#(yFZNtF{W@X0$v@?1IP=F@R*$YzCM0q8~7e!?}vg|1jSa0Yp6hp&|wc% z8Ta5+OzE3%1ZW;7e9cH*1eTMRR;r_YG(FETk^^py%3cxLnt6vA0C|`*S}gRIyVsU_ zYog|4he_Z`4v7t6WK)>P6(muN%-TYa8&qo;&9%dGQ@)dyyCLpVU!opfRq7KxuI$dU zQcxa>RD+^q$xPuc`*C-S<)8*pFd6oAZ3|E`MmZvi!v}e*V3+&u)OmXDz+xG2WHQ2H z>;O^LHm7%Wqka5zXoJ zG&a=)zt*qx`JL9*vUH4iu|ZJb$>6g>N|JrNk@FoLFxCry`HL1AC8Wh!NVfk@2;nI) z$e0r#Nsaspg+m%MK+6;vXN^Dt@?h#7jQ~XIp3Lrm%VwqZw2iZiCk`9nO*$MX9{@k0 z;7g6GX8MVi-(>zSP^c>KqX>uE4c=Qg4WT2{YQ44XvI-XP`n3XqWjknpu}xB75-SUO zaM{{9%BSwjvtSM}cU^~k@Nw2a6BJhNUp+rJv&X=;jec?z!L6#~scL?&el(Gj(hJ~| zzN737E^iBNZFahhKe#st!Ea)7=9M4r%RQTI;8)SaGkt{-U-QDAv?~tZX-j>6>#idA z`VB~l$Za1=wPlSEjE) zg)zoOK>Y2bpP=u?h>0lUs)R%nsj1Lpr0@Ho>cWm7u{1uIFo+Ot6K?&aQ043LP?_Oi zH%lL%GM>0(8d_6O(2u96d8Dmk*B1Dzj0+BIUw}vMnx&oXfYr|D{Zb^5KAudwh~D@b zP}D{?>n{y96z37MAc$mPfetK-ND(-%`&6shZoz}azjtrIY(7<{Oz8k+{$EqjHOWbtvaG;{=;Re=bJ}#t@6iHzptS;XIL@O8J20N$QE;4$S*>Q4?3w|QcmgImPuw8 z@eG}Ng6rAO-h2>nDJTuk;V=7e1racqzF7mc2;!+Nm!y69+LmCMP>{rX#{@{`c7KSd zvn~3x4f_Mqd~t`T9G#IF$)RNml&+B{i5baV+D8nH-;=#9ROOIMZM5DE#k_8X0DD5L zo^vR3BjOetF*ou{IrzJx&d4SxRN+Mv!uWVg)fVm6Emc~?2ALHGi6HE8RbG60V<$T6n<9tiPD*lGZkpAK+Fr}3~Q{YSw;bbp>my`GB|SH%L*a% zBwbBOjHoF@1LWT#CK)sTwqm)$099eQ20H(!*Y+(k29{+0Nk6-P_8~RJOJ9@9%hkhe z=~6!?3*^%mP-hv5YsF2#dx zZI?5CL0V!1GESWkzq`)A`ruMZvcV7Oni;6Y&+z{mRZOfqBEgkABF?^s&8&mg=M8v6 zQ_AA6dW2rUZ|9U@KXXxv%(zfTi9ab5i-Y z*viE{x)!XHgpoTZ0lwTn-{1GHrr-Bc*;fG{Py2Qs_lu#Kd!L!PwmX2e4*x2*+aX2k zS?xeu%;lI4-r)(`8xa>d67^W-DmN>ug5y4CIQK8;@H=Voe}4n9Teymm0(@Xfi^ ze4;Uz2dpBtlL8y|D8 zv{I8lFqT85i=)F7njz~IF=nUm@xwb&@qyO_&fke=U&m#YW8t(51`7MP+}mms1?1HjgV zu(vG}e2`YnK?_K?z6SWAsbE@lXQ&vjV#SS%Z7E_5#aqufbmOg7+cHh9lM?Zd>fSBh=5+61X+1#RjYdyG~~Bz0wgAhxzhDp(kgw&TK|2c=PZpBS(B1w z+ri4ry=L)!UCj2{=ijythSp^w$Vlwzhw@=?H~B2yh$*c39aII(wb1skP71GX-^j{30-Mvxo)?P~dCs5Sg9VJ}b%qRt5V@Hv_B7 z?nTKF4eD1yudc+V+O}GWU7)}s)Q-ZgAz--}L>xZS`>A0e5aEdW-XB)%RX?fKCdo@@ zDYh^xh{RZ$y&XawCz93E_j2v;?w$8e72gw5vCYP;=(_24tw|2#h7=OjR;sg8sR_N5 zsWo&YzSa2+*-cf<0d>;}&ML$i=Nq>>Tu$d|9>K;MT8fGU`X-c=wb#m1fsa&Y5di37 zqUXylA$)>qKy19)x`BDkvx42@sm4&G{xe_0uo{;+-Y34^r1T0*u7tY1T+x0>akt&3g9V zljK*QXtyKVc8IY~eV9x`2``hm>moeaV93UWSxo%c#D*2Jc=g$IBPpkVUrTI6i_pP&qq-g;mz28eXb=wctR$LTw}5k?XMZQzcdHl82+ zdfXIY`7$jWyPLJ|OB3$n01c}MWfJjH5KH8_r3E~HCa5v!7)e87MGaW_@C@<;;I7OO za)TSy=1mHwA#~=*K5~Su>_@A|;s-Gjqls)_+_F5{^y_)p3RCYGcoIuRB>G#MRX@69BCCL#0(wuo;+2KpZ?tX1Z zQyQ9>V_lblBbOcdqd?xmQ6ky&k;c&3JSlk+&*-OE#z!tYoAD!f%9g=m%xw7n8 zq;3@RBeDydQm|++3hAhOd<`nGxlzjy*@vGTYUQtzJj6Q(-4blD+lo?38{%{ADRjwo zg~v$*Rt84#VA-s&62q^gevk5Scf^bdCUB2hp?D(``^hjOSpb9VM>~#R%(m?s_-190 zjdm-m80~f)o}}}3sp*u?Vg%lHgiJQWwo%Ng(fYJz+ObAFN_z-?2%B3N5@(96^f^6c9lQ2Q7bv$epTJByfOpz3Fck2k z&em164Q_MwB~5Sf6Po0lr)AaTUImu9a85n=FA#g4 zz89q7gG+YD+3n5BTdw5z)Pu%olO|s}$4}5UlPp=1!P&>k@s}1&J|Z;1$pZ>}F|4?0 z&OkMXb@nESO`An$6ZY%BALv$TZYO7Li3%|lUqYrx@_1Pd)K_YL?}we%z%2xF4a$r$ zN$D1DsMe?^_@0uCGs%DCYnlL&n&dD^qDO-BVu>U{uSrNZ(o2VdU(q+CG+I>Vj;a0& zP?4GWT0p<{62=eDr)-m^3x}n~<`HV|b=1XSdB|VyI1c8X{%?u8A9fJT{f{lb7$dbl z5R^1^xDo{Wzla4yDnwMkCL3bUP3>>zu@>=_gvW-a_-tXnoCMtr;BF{X0;W!uaz*9K z=~{Zq^^`8(E6?b>VSHG1+?juwqkrJjeKct~USyT0i_&&t{_N2H29}r-;q3mr-?VcZ zr!8Ye#dM?`dr%$Qlxxg{om@7O0A<)H=+RrYKA&o?xz=%O*N#a6^ov(4Jo4IIemy=; z5}3=P|BHdLf<%HydwmxAnRFJ_{3go&h!m06LWNI=lw<>rRb_Q;*~_}6z=|d|a|ID- zNe_SmgO$tHtOU1^QN^|xzR!Z9y4U93^AE3H`-L0P;7^*)mAl*PCQw|I!=<8RAEMa_ zGC7c!X#>~t%3Wc{a5Y5RWyx6|HJE zlvWPau%i{qHHBBjUDj+E+?d_^J2Ifmcf+j=lcp{FJe=dm2oi)JN-+yPEaY~L*grP` z6%7Tsv?=W1uLO(r0;@2sW1V@EPJxpV+>pS0EL!^VB}9EZz=Gd1{nr?1BYw4+A9;OO z?;p_<_>#vC`Q&DYp`<+;CkTSiD7FvP-dSO8T?(Z`|X9}tjO7UQhFLB;2$v~Zz=QR0fyAn$2tfpi%^nlD#1hcqX$3>96XBnV$R z>MJH#tB*Z+faTN@K68}IhcPl2ki-rRO*pPTMrU7!3bSbb!$=X{?-tOTk(kbEIXA7m zS~?9wMWjB4utgGS6c#878gp?X{*1ie{{I#dreT%Xty$4wm8J~^kqhfX4b9PEdAUX$ z{Qi^J2vZohp)(o4uBlXdKbrozxNLHgF~3d;UPXQlQ0jy4iUG|IHe2uuM-X6p>j5*A z6f!5BzDDr4cWpz|$%UDh+Y`bS)y0&Z@|6)Lc$GNEkO-q3p}6akK-Nu$(G@uy2qej8 zj2h<%gN}VE5B&&3jtvTJn`6iyz4f4SzJE#=;H0@&RWPtQpuwQ4{TCxT7?&)`redqq z#KfNgI1QY$_5?F~vJq!TIgX(CgoG}+pwovKd)6zF_x6Dv=Jyv0U!M&RTas-YdtTWC6IV3}R ztIndAaCC80Pn;zS-P|Rf(WNyfp1X|-YwmO>cF+`aHVrOeYu;gJ>{yy zbDA}tF}vu5t57avAB=f;yA;8gc0St2tg}b(asR$A8SiN;3`=Hc!|_!kaa9)e8~a#=2E%dusL9yyM2ar^liD z@Qql&sjRP45x{dre^6I*AAM36^Ok%C0GZq0(<^O+uG!Ui1@TO?3T$C;vpqj^0P-o6%~Z7WCa1ng{g*_a9V^}pr<7$8WX|Db3X zTw4rNKk7ha|9d+s)PoQJOhySD0iKQGXmQ$igThDrPjmaI};%zlL zQ{g`JrJi%Vu6ds&Wo6Y|z-%=t+fdJjoVK9!1H>nWnX{+g*d}ma*}J7 za)o2|(P!{3OUXo+ux;Pa3PLb=xM5H#Wx#E86p^KRiPE~G;GhVh4n+tvV;#F4;@W|> zN_GyUus;??(ItrzFxRl4h|;#;;l0g5Rv}T(M2&3fy37~}wXue94KBcFc%iR^BaYBj zqJEKrVQ;0@*r9)A?i#5T6FIT;>_(N~#Q{I9)X_hM;KTm_EoOA!SsW>hG3u<#QxSOu zGA%Jnu$0|WA7Z=`1xt=YC?$Q8c?lOFu>%V8!BC{DoN!l!6BXc>rH>5Jh|=o}L(irF z5gerk9Xg~x68uz<3egB+MWBLugod$ArH7pG-l)xn?GS<1EtuKD+C4Sx0A$1;kQ(0z zLL@{)zzjGMZS;G!?LYBF>aZ2mNd+ajGrE(5^)txt(aAZ+FjLFr1AISHTy9(wKu3D6 z$tN{b*Rw5@eH+r9*l}arr#?1~kCfHL=nCwebSOJF}7#JAcFtw=|D5-|hTXLo3W{%Lzw_M{@ zzoFonu6B)IAs7Q4=}1@}$=gwrmj~ist#jy^mOE*Z8&ziryX*dVo4o*F^S>&>fuoU4 zI!V^uX-18d;*8~E2FnBa$kWRgBrHRuMcFjMpkTA+E7h8#Qj(_3nW{v`lKpm?ZgeYc zJxS7~F`$*bgP|AaVzOo~{1dAJgmA3R^OcOGx$J9xCW#&&de2Pyhb-ghsfXc7MzJyX z9>-*oN#~7Lq+>Dw?mK{K+GCrZbb7#R5#qgtl6gdv4G);pbDIp2pUL z)wo2%td+1`nqlj*s%)b2GBhnW;sD-#7M+@lg_4$x+qRiayw_E=2|;hDkDlCRHTX_l z!Xc9$D!9fo8Q2xqb{h?;xK(3tqd{GILo?VX)|4SdPsMJ?T^azgm?VGUG|T8DK5oMA zB1{<35!YSP2x2<23!CF!G>dGZo==O^anIPpYsWI-PcJ?I^ZV}F*xU1AJgqUr3rbUw zlt|_)$gs_Jk#376Iuf)gKoNa>D`Qi4P3s(0d7!PRLv=GZQV4doR3f~jK;&C}BPK6F z{1mLB#4qQ&ehg6AT6lt>S&LlZ$in2bB0P${+|vE+{Pop}aEN4CM6t;&OeActfj00Z z6rUfj(1_n${1n~Md_p#}yo?@cS1FyUh11|Q-?zR@KkaIWAB7?hG0vki6~!(J-*C9C zmUm@^NLe9P;R6P9V6`CT6MY8K7tIS)K)NUiyb3+3?g7wbK4Ij4fHLX~c>h`))dO(% z{;**Er6)PZFsNiu8pAP`Crk5Q{`?w0#EFCSU`eQ2qmwYqFdr5#>l=&+%|T}bmu8J6 z9#rjuksv3KoAu@7Y)2!0M#L+|IH(Z09l%u@Yx?8kq*^rt!>n1DCZF>U%Uo}irH`cV zH)kXdx+fqBENy`dnXwyO)~K18#Y=OSl~mZ-Gvv$2@;(xo7o+i2%h{7fDD)bC6|TlL z(fz|`R`M!tg+iW*#GuTG#!zpvuMp{%qy>c^l-;V&jj8rGy+s&TKH+&1c&sG4VdK-% zGtsnwzL4Q;*C5t6|Py}d_)#^6~#638oVR(|~1&N4q>&0@B(7U4o? zK0fBu9#lG7gbT6EoPx9@6BUwm<25%e`tM0kE%{J?wZ!+A?jYcDT*;(kw28hFT1REz zv~WuF22E5y$7s{`fF*5lDi+VjiN2z|vj;%oF_SxWgjW|11wb6t4Wh(D#Gb+k`z;}! z0$n{ld(x~2D@`vkDoRh1AnFFyKkCx#gQ^<$;?N=ps>Y+p6}+Wt}jM)%R9i$ zYa*wwU+uzdF&*aO($(4+;wJx|@^>XY^2nssX4PaSZQj&0s`2bF5B;vKYq0zJ-_ZNF zxtoED!BEg$w||}nD3{7o`SnKu{&Itu45dB#L54k(5~d8@sf)WyHyN{ww6eSQ3vENN z6N=J%J2jq-Rh^ue+oyCi-v;C#H^_kR?LfelD3ZxqWSz1>l*6Tk+z4SQvWRry3{iU{ z2Y#;R13vm_^U!5s+vst+{sP!s^BP@v2?uoZ^!mH>OO_bX%FuHGB2g6)<;~0PlGm1u z;VY&{>(C{;O6Z!jGz4M|GLMcRrpTTk5Nc6W+L53iD+Dr(v_FOa=Z#xB#WWyhy+gW+ zeXe(2<>1U^<2vT*Y(tMEXY7Bg4CZFCr{G2N%{a{59ENLfJw)_(a-f@B7UA?qEOJCgU8=S6ZiXH{=A-B<1hP%#ZPPO?e+rc zd+QH)y?nR$Nom`~OVf|*-0zo3uUk4Q>L0WdV49iTH}&|&x8uvy`2IZo5>bY@DoAfi=EZ!SQ~3~ z>zkFm0-6GxEO+`|)U@_mid)?uXOG$;II;hcU4cbYwSMMLIUd49g?idKU3aD|+4Ao< zK$>Y~WT1IPLuPP?!(o4}?~4KAf1VG76Bu3@ne7cRFD(6zn#^*s!RkmE-fGF#E^UF` zf35RA*FM{ystEHsngW!QjnDh5LNXAmE;4@&O50l!S(q1tU5* z%{{-;7HHrCAzKSgb@{w07H4f)w%Xc#h0xeZe}i9j=3XRBGCk7AbhpiZzM|sMK^t3k`g{w)^aRgQN46sj|7eUatSWT>X%o zeB6)bjo3?RONny9>rdbK2ffhcN-SF1a;JW1{GSOX=nrvlc1W_U{zL!%$n1z@qR0v;8IxAg5Ia#V#!4&Y zFI)eJJ!$z9*|a`cVo+AgvQ4+^Yk5bnM+?46TN3gO*I>lM(i$rMGQymcCzJCi4oO}# zmo=!B#4f2o7j+PII|LnAW~P_3YwOI~)|&$L+T})e>G0e684|>jr1TuX2Uz?be2evZ zW`^3iW0t6GBBBDs3n@TGBI6htGpLQN4{22UnY@UayQG#rQ8e#;akcJufDdc!|2wO< z-=1%T7|_$sdPg7sT0tkf-W?d)L?=629FX5PK0pj)NI?nDw%0V8p(tDvuersrG{A<~ zBuT;sc(mH+zA@3g=XjH+`}U>MFP@fi-goXsoZJ1(zP|zEhe0-t>Cf-F5wH#FFjB_A zgl)?Mi2Zo^30_pOC9wc%Ho1v&qsjxhxDGhfj5oN{$yvEks7iQQqX((ZyT^aIk^9G| z>~g-~&+oGmq???S6i;J6KTRv*`)TqxqdVr*X~V#gLxHS$wF`-I&~8o>@4(6+2cZBw zbG=rd18RWKc0VKhv}TbVu8#_C@~4xsty9x#S3N5xGbt;2ePl9_7_0LM#yfamWAu!4V#La z=8I03xB1rP=1Y5ucoEU>Pa^9r^Hv8MNkqM(hAu#d%kcH|)*pLLs$Vv!BdF06&TP3I zb*h_|=8bdwZML427$a?Qv372OQ6U!)LKbeZW7KTmRX41TQII7#E5DO8YR`BlvXCX6 zXuFni6$INBmqKM;N8%{z8bWWk9SVnS4SoYZn$3o^XC`n<_bMPVEFmU#-p-zg+ zdzb(W&A<@ZUf_!j^G|Aa%Dx&ChNJdLI@4lnQY+Y*1IdvVXi*E23;yH15Rn79{XZe- zkwOQ2w9u<5QWf>5vXE!a)(+NS3QJNl$iuRA6wTXh90MGjO^`dj6(?qQJ->XSJ}aMk z-LKiF-ktDOa_@NGS_VJPtkze?6>j1I=8gd3yVGuDC9O))0bH{Y%op0~`lJzDLL{SE zT|&lGoQB-!^b2@j_9bV5pK1Si-+V# z=TDH|S{9qvX7VQkU2F#b6DzHu$JEK7aPFcfhTC2`lu9(%RhPyPXtO>9o_MYR3n zkD=qWq&m6OL!owrN22|kjlbaL<_;k00=&B6O0RBK5`Yy2t3*}8c(=x6*)8rJbwKje zA96*yqZvp0*~5R$ji$H!74v;BjWw$*XRw!LGsV`s;<&F`-Ku2`=)X=Ft|V;18$2vPz4qG=RI8lL#I zmwu3KXjVC^^SazW*kwBfYQaS(FJO>&VI>ojr@Yu~Z*KKBwx9Pc7|5js#1FgV+da*E zKaI4Z4|Bn5UQi2Nf{)@?4wX5GPnF`uwPA{O2_En+P~ft4J>F@TKZ3(6)_@;1j z)gAoIH+We5jNe0|zC|{KEVxmf+A^tl1Zrpw%i2-YJ;J&LP^qp+ZOMT5oJP?O!(2@& z#}FJfn)7;93gQMOLWIWp#jG_G87dpIU8}g#8Dg`7)F}ZN%yR8&INGnqKEZ@gjzwzX zRlIWfe9~m!)BHDXE~9nhZ}Yv=NW0(T;Yvc4i94EpZO(&+mt7f%do<}KI1#rsX5 z;9perv)4+rvCbcmTV9x^9Jbv$J|C0+)tD1Hf9rAnR^0N)(n!yF=+oB5!4dzDI@fYF z4xR=MbR-PYO(gpUY=TE^F^_&S1;4+KXxuyLx)5ik#(>w}dk>puivfVQ1sC7ecJ3j=Ccc0CTKi5IVN` zI%Io6fj5Z5mx;@Zsqhx`jMzBXqOK=5^_ECV7kN1wz1!8VkSTcicx_uH1F;6VW6DCW zd7!e{aH6;`zOp5}v!UrC= zK+U0BWbEFfhVh1$qpPRcZcN2HhzUh_dYVu=CKXrPQ*P87uib8LSJ>gY*<&gq14nP; znfwh;AxoBP-)VP%7|bk)x83psjAhfa= zzXmap(U*nNS63ahZGt8F71;l);hRC=syOP|m0#e=`vIZ5%X{BB7ml9AI z+5;-TsneIG4P|tlS{iIAFT?DNhFEo{Baa($Ad)XPS9eHWn7s)WK}Z9tmiW+JfJ%q< zXf2YS=qT_RnOULIJYVoedIzvEJ(WCOaDW+?gfc0OP)=K)76yKVuHD*dMn|U%< z%-H(R@xsb%v3-(B#W4{yi61|_QBAd>X1vgcPCt+Kk}ERBJ==n2@|Dsdr9%0L-^MCO z5*i}BR;+4mVVoa|iVKB^Q*%~Ofc??N#FHVrDetWsMhRSq7dmm^{1e|5rjwc+v^_ZC zc6)HY?TzDe&@42$=TKsWCA4nAg;1xv?=qJ4eY0wxbB&x2I;zO*D?;2egu~e!6*e}4gMhrCrMhAe1D!36 z*nV*Sze@D~7PA4a9`GQb5Xaw-{?E&W)|&mA1d8vICc~q6l}Xe-lLMO+q;OU~vK4V6 z28|L%pMK~Z=RQ+!6yuj~+HZ=nND6KR07)rmKM4;XyT$YbK|)riJ~mH#NV$eY3A)3n z0*a;4Z{Xax%k5i<`_c`>0^)q)frKdUtof~%UxHM_UxPr2McpN?Go3#k3mgYAd+Qq; z@>j?I)MUe2tB>Aq&femTAt5_7+Tkfc$U8nIvbMB9T}L4h9-ky?i$w!MXl3TDc>qgj zS3O1!c#2&h)66I`&9W4xQll74^b&!;P-|FTD}jx^@n!2&V;TC*wy?CHCkqvu&eNJ} z?{~e9?K0WWabYPkHl<=yr+Dh|51yIjn3Gg%A{;i+V`Ch&OuD)B0bDn{vb)ijqWt)E zP_q|xL0!Eo)&cH^U~otaqBbo=g6sQzCdnvZWP#k{+>lJ>M0;W?TX=;TS>n*G-zUjs zegn1eql4>GaF~n$It{Dqv^n&;`=75G>L04U8-ON;t%64GtT(hnnfgGhWG(CF`{itK z{$79rjB^(^lE18g30XMI1MN{?S~Rj*y*@3`WAss;-^=ymPiuQN0r9s%8Bm$?bQE+rDkqt&z#YxgOE&EIZjPkx;j-J6E40(lte= zO1yNb_@6Ow-fVVGSi}Z&Dn*Z6F8axsPQe|osdNVlFxUAU~Zxbsg-Oz%|b;|xcmnD4ejyyAg0cJ0JRZv8P)CVks z7m5{>`dCBjtA-UIo>!lwb$ex);$F&_#THI{)ys7Bi1g{=9fEV>0pPV_ZP{znBzf&9VRKOie}fewdi!WJW*x1X<7(Ivb;Ewe1RTQUva!T<9P!2K1DasdVc zf`$kJ!j#q|_LCrOrda?Q_`fy+0}~gI|DP#!pb7ZqEMoXx)d=~Gil%TM_Q%5<_y7Ls z>b*iGUruFeo8$qBA7C{H6vV$>sE)||;a&QQ0^9mTL_GDAlj~-(oh}D@vr%N!G?;2W zp`TJ+ZbY2z6?pS;$BoBRMU|MKBApxk8*k&cCadb%Fl1V6S?Yz)MkEA7Q}q!_wMND0 zSXQYy=*9^~Z=QjD_bg@2h?W$*7|$=cPrdS*-@A75G{n0tk!W_>Am!ycu8H!CjNp7u zAo7Kg;?8FgqNi2TQyy}_&RW2Fo z{L5RF8KN5yRXqI@s4Qh<1tKe1;qq0SP zQJw6jO#S}xBgh{6ssxzJdq(~nwIcvIz1Y0EmW$ays&CSwTF&=*tjW|s(gI?e+@Tm! zBR@Al5HMa`wgE>ZHxGKYF&yUxH}55Rn}GF_ojE%Ml-Pws9TsO3;&)E`suz{^(0K9_~ZV8+|CW=bP~ygHBQSjs7Y%;rdn5E7QFYEB|>o>_N;n z#|;@8ms-}u%!reWg)_hWoUVh_-z1F(dw3D&ilZI6!F?UiB^qSC4g2!^4NCOw zZ=CXugmN-_G%S-j=`PKfD6#VC-3lM)ePZKy$MFxpScTV>T^~!nu(U?!XM+nlrzP=p zW1uOLWoQ>!&pcWBVKPL3WHCXP317`^b*t#}55LQXSo~EoUrSNRG!7S+(1IO5wiN_U zW?65!+dZee_}40H$TYQaK_#1JOnN5q3U%Qzr}#==H!xfGO-ibIXd^2r%HhXya!RSa z)biI8Egt?C@7xv62ZX>QKci`CkL!R}=pTMZL>WhSeB2JXw^2K?F3! zC8=->2?qiaX80daRN}N>!-7z0xohC)|E(gPqwBE7jpe`fM$h4wer`y`DjtcE!J82V ziG^e6X3z|OuKUX)p{RL8642ri6l?7{O{%d z(=1cqK6l*7XX^_1@%nH{-$qZ>FCam4{`GbR{8as!g}PqsNhy_~Z@9O0G$?3jT5O_Z zj{0d)kYCw&TxQI{WZw4IJL7ayr%m5u_)28e`yB-$NFBp2kz|2W8fxB(ce=RP$BPa) ztj+wKeOU3-MH1x09aP|X{PD14;N9z?l8oGSBWGS#e(;0hP@`h_4+XvDi~}UYt~I;# zkwlFMl?Lov%bbahf_b?feSL~Liz4+SE%WW#X$!7tm#aq5r*7H!xePm=g;FM~oMG~x zd8eDr(0>jZis}oJkKWft~Gf;&4jnAWq_5S>+eQk?}ZFJ^#wz9+NfOvpC>!Y z%9hw4Y~)r{SyJkyzNZ(JBPA$8PK5yj={Bff3nJ(P{vaB#>IAzNBF!2a#pQH|n~z6` zcX!pO+9Q#D=AP> zgb>8stIxAeKb`)txMK@gI@!1bdf4JB+P(dQ_muMvpsQagwPy1YPFaDSD>q$?r_;kG ztH3U1TUx7K+KR8^JWQI*f=5%Hks%ik4i2`;1ob)%2 zlIXH}EOE(W-kxwf#i&lQyQX53ur;9)BTZILQvXF`jxo<#s3JumPHIL0)VNG7hvTF2 z;O*64gXODoIqS>dP`n(deY_FUC$ou# zsC!qL@|rTkb^6poZFYrBIV(0=vcPP6t+xklP7>=+C&tm&_$sdi46d#B1^*?(8{OUf z{O3WF>hId~nbwi+7uoza2?XakZ2h?v(#nKfoPWWm|DYU>#9kcd2Xju*2jk0dZ(Yjh zW7uL|dA&MR%Hntly$pUb_v0qLI@wZ}%ExiQOi0|Z9usIdRFHCTSuMK78?^*#VS0no zK>N7#e#|Hn5i(0F@R5^f373$>p7CN8Gp9ceDEWO7&98I~;)4WIyRD{iX6K_yZNyo7UX4DJURLj(FnBggrIPxJj$IMiexr8R*x7)h87+=DnmS~45_#& z4YTmf)MIOa80IEVX_jBe4JwMA7(=wr+~|zRvEzNGqj{$`Fmuhxk^{7=6ECbROD|(> zGW&Wu+mfA{pB>w(8hrqF1g0pMED5Eo6$BPdl0P!mu)06%7ljKn-a8fWtkiWv0WGXp z&kZ?DYeH6+pINdMSA#5$e0J>OyyJd6r6`90c0Z>`#x#ih?Kq7*yEYw6LdI|$tuJvD zN79XKzypRCXe7uY`DhXcaUx~0p|kB8>4HR20F>(Eq=>ai59?ZzDqMEso&zBbWRYiC zkS2f!@2O?Q4lvF9T;lJtO4t4D;FX|8_ryGo3;)wfk9>5!y>&pf%EaZ^b8t8TzC)vd z08{Tw*oR}G_KQv~eR+!97_|)s*`nqkeYW+!HMs!;=x(+{fYo_rU-liIA<5O2!YRNR z%qJtav{VaJCp(u7!jVYUAMka1+&3_Tid{Z*T2AQ1a0%Hafa!FI|9*!woL>|Lej7Db zS_(B74*@IzhpH(@e_#aUgOucXHztr-6M^4w`@6ZbF-;}-=?{hoZm>weVKR9k1RHlM zDSI@~`t6kMF1TS>TtW6t5+Ry5^>!;y`ORPh?sw1ox~R(U*m%1U`1*Ofv$l!sYDdfIa<}@hT}A9q-KIcmNwR+B;CQrpyat?LoRoDG zX}KlX$g9$_T%Em%i9Vz_mQ%&v_wdJd#`{(v>qJR4WYCLin;{qHXA21Y=1{2jkOZ|< zhzYxgrs7cBwXvP!a#_ zQdP^;f-@(L2&tbZ2q+UmfQSudsXG*8B5oewuijJdtG3PV4|S*3WUL5S zqX88cS+kOwp(;jGf=C{{MpLLZ$-mwL0`&MI9T0-tx3n1RVS^mD(xDhV33vI>|}ieDrM3aOru6IKTzEJAAJU+Xw2flvNbsO=n~PdCvSE8`u)^X-j40 z8@2KaZ11Rv*Yn%GG^ByC0*epeSb6mjwVPW=SiWsBS&n+*REYFiSTCTLq8agh} zHr3i%tMlYvq$oeTc1!EZoBslSK1C0NwU)0mEI+yJuhY$e5D_S1u*+&5MrA)g%`3+Ec?xC@$ zBk_Vg@Di_`=!f%Ct*7}}u-lsB=qjL_YrKn^V=J~pO+oW^$AuE`G|@r-a?n{9dp4x# z4(Wbb!pnuUf%#INH1CVq!33zQ< zvY#>dWCn{P{)GO|!yq9xPw~?CFz5`QX4DN%oFXI$mj-(Xj_`j)Q-VYAQBcs1w8JBC zIqUeRVg%2t!FbW1!nNq!eOcTBcY4$a)a!^8Mg_^-TX6;RF9(A*5DB8N#sHi1Bgw_e zl-)glu}ut$TYVD9g29nZ(SU2G-8X$K9Uj-#k5cLApPj@~-QC%KK*ZnMO7W?Q03dF) z^rA@+H;j{;xr(m0dU>L)b&}eq104Zk7GGj1B`xvSC!~-{i|J}0|Ki9GbyX}_PDdBP zjbnRG0Usb2o&=YYh9~RiGu2-q2Qr)rk)yqeI0wJ4i@d8jE@hy4R2^2oF#_>cbQISX z@bxf=>GHD1kYJ@`c;T&s?#sgsu$1(ame$hJg59!TNK?baDspr1^>M#fbBZUi3lMM% z#>f_L{&;h|X}}TwfeM%TCWs~TuNvE;97jI#M9W}Z{nd7{t>KxhD|}_8#G&w5bV)2I z!s+9tvV6R(+yQvcL5y(PaO^CQ3*e6mHTL;|sd;^K?g0F})8?R!dfi(wr3-7j{fBiN zW0xo3$@UO7{wGSl!>2M-6;WL+(DAA(v_oZGGw9xnt&X`~6vvMrAKM~t6(9TYHEjH{ zEHs=_HNZ*KwacM>_5LuY^o%XdqQQ+EN1Enn(q1eBo(I^d+RAw>%)pVFd@DvW6o8&s zt`^TA|AX3ULJf{y)cs87XzYm#Pu@nd^~C4RYc1f_4=nGtE(hUj={@v9RbXm^Wc{Kv zqyFh?Qb|vpm&bncTxzs7@RK$5q_n^*`ELHURGN!ztXwmJtTq( zQ_j^$9I{Y%t-1B%m(?1u{^MpJ`?aMGy+w3YAxlxm0X%eAMgel=Wo`7(T0zIT_jqkxvnH`?2ZZX@i9B^!&` z!hlEror7JbkfF57p0hZdYEMVlfeL-QInEvfjS1V^7RSrQKI!#H5M@Bnj1Xp!HZ{+P zcbu>cRI#or#GUG0fiKJ;fdaFzm<>zy%5% z?Yv|YM^Bp!s8*sx{D{ez0}CMY@16Na@h_jGXVY#&5*#P_amx_JAOc5~ua;rF(onhT zk0Ax8oY4qKBbt*iUM8ycepo$&m$b-|6BV?^+-ZR5+J~u8fSjTyO+hA-%~5n|4XM+# zJ>Ia+#=y_&EOzHK!oG0)(K;m-Ry25$y45NXgGyM-VdIJSGm4^tbytD|9 zjEgk|DqFEm`7#7*!(mQ&C|`vn(Ckj+)v6=hxz(o zN5Yp+F#wQBA>``2)9%X3r}Za;()byLY=B5=JOX)Ut=KP-6lFT!TOv2~tu!D=kg$Hg zCEs)h)n9RDzr2>*o7W#OUBoq97+$xpf_L>!+4kOOZMkBp?%71jRS4Y0;hT6BpuZ2Q zrc+rZ$i2IGae?HBR}R0!?zq_OxsPyB2=y|jso?>h)KuoR#<1o(M;&CBywC$#tbcU!i5 z`uSI2a&9eEiYQP0-ijwCoh4~^_x>wQcHf|MWm#gZA*i#(~W=%X|63v~kG58ZNjMj^< zCuRFWN98=-j97`61y@38`mMc3H`Botm8$XG&9OUWN}BC!KD5qO@*6?oKRIsW$$jbH z7`zUyx>sq`Y}!GD`7&UlKWiehQt<%GRo%rgqcUP!8lxhR*)U6N1$1?ID1kWa$=8?o z!*EiBwVBLJy#SjY$n3Cg&#u^rFW~~|idkmE`nNvOeDwYLsoTDu+@O9SWXUg`NtOVS z*3oS|3DyiJ3h*2ZBJ*PqW;VDyc>5VrCVNd@R4C!>*jJtH2^uK2c{amQR(Y*mgi)wm z;Jjy&o%-*1go57Z8tTq$bk~Sd7DXa@AhIZ#BtosSYQd7r09Go%?J%i1@!)e^wwBZB zEO5K^jlH)#pXi^_*HiE565F8xjBG*lY3gL+;j{pbu4GKXBe`M@ke< zG8+vKe1MkS?G8xsdx0|@K2RlNh-vegEu^TVYDtrW$mFaGZU`Nc9G)3xrQXn#6tW+u zDte|zE!&LukUy3^o2o8?5=(k0SCobSYxO2ddUK7=8DV3M?TnTru3h`fkHw=KLn!tFLj8f%p(!C&?ME68gANTTr4O6RlRDU7TK#t zVAjzNwmA6IYg<6z82*6r*q9~Jm>QiK9VzH!BPx%0H4E?p%w(-{7-KHns=lKe%li4| z>gS56P6&K?e=W@k&p10Pyor~ua0?TpvsE2u8-g4)uc8)T@F)uDI)1kjMOi&?TIKnb z+axVuEB1TR;!H&4uI1f0ue7H@ueu<*IK>&F68aLWxt2m1x1X$tMuO%L7D}Pid{Jnr z$FZIiwN}?G5A6PNjq`?)Yu1-FW(b5A&CQ=uYys#3_NNYk*__>J_7?P?5|T3?tX<_0 zfbWf?`-sfp0`7Usegp8fU;}?%=kt-30$+jbpk>9!?q((wU2(t@7L)YR3tPh=?Bm95 zGEl4IrKNCJVBa6!;^_;Jv+;g_8&X>Rv7R3AcV_Qk6Hu)%elSO{3a>7ZiO?I;)6VP- zx(Ym5M``}qb2>fDawW4gORh}B;1b%&9=RNufZ-DMaeYcy^qoRk&}3{A+r(Gym!$6O za#58Ph;};F@0RBIQS=v86q&(K=yEtpMZaN2j*m~5@Ecx^+jYCz?1GzL%pie}5&dOr zbfk$1;0;%gNkz{oywkC(Q`G>t5#m2f>HsHr;_PdjUAtzih9zxsnv)})Xu-^yrd1Pe zjo^RLtMJ;Cf{)$BfWP8xv%}_)o9(bgr0uZ7;$e@^$yunOrOq)7!H#l}WFF2Pd^HRgbK;dJ$}|1PxWp7~?Qxhs8r zu$N9OpJ@FJ)IK}2{6T#PecHvops0&@Z6QeJds45f~<)ZH-IF~bWe|u zmC^l0oHq?6X}M?q1LbAH^CV)HrU|REh;bZFU(6M`eD_x0nAsL{!sN>9$mW1G6yD?T z@2G$0W}`A7G(8Xabu$bprB(Qo=@j>)1{8S?{Mb)H!v%=O;Y0hUkZe|pjtD*x4I$fCowYS!Fl9_W;Bm_%{(h0ctXa#or{9=G!dW9S|DBoQ9b) zo^uJXc3%z=N8 z_@o8(n$3M--**M&UUy_jZGLBc!*gSM9<;C&WQ0#*Qke*YY?uNU8!^a?=)GJPgEW*OzLGd`DW&1tJ0Kq=kBLpodSV=YI z&64sFcomyRATTN~wHLZSOCR5JX<`u3?W|tCUU5R?hItJQ)QY#hD$@1dtegI{8SXNN z9<^VcalxFIoBH?EU~OxCr}t3~q+5<2Ubd?K-}AC*xkrpayvgCh)(Y=aB>L3@Xax8Z zQV?I#v3h<`>Sp{NntRD4B&tz3Td0^a6p4^S-dNU2AjOcFV_~HfF0Sr)a-GGf8`4Rf zCz^RKm#8D8+SoClWZ~rLctrsEO+d%Jf5qX5lB;Y9){)VY?m7^9l2|YM1-puxN-1_= z`O-D?sS2+Y>^LAP_;WZee^HNz251y{#%bmZ3z)+^TYPY0PMeh= z@O355X?zP0uI9B3Kxc+dN~%>?G9wdWFWQhE2}jAKkf0sHoR@Lx;fs^-^AvhD#ke2< zO1TPfhIHLhvu3^zqI$NfEjb$5IFPTpS7pR9`q~_oUu5Ui0SM1i_aXPb3h7IoATu;U zyM(wWkf9(G!{j2ee`3VT z^=7dm)}f1y)<|u=)rC&-0oBXY+`F?p0bSS_PeAtvDgBKV8mB6`z&ku3jB|;Qm7H&v0Gf0J{`QjZ}%eqMReePWP((u}o(&R7~2gn4z%>oiUWo zH-dMt^xoyMNs}40o!K{P)|KrWrb>B0YdJn2!nL+dT&=F{ zHC!mt$OVJq`Fpp{S_xDp^e;ed$}$Z+9zLbaaWGAA?NBI5xvD!iy@E1ujK=ITax&y>c0`%ow)%!>hCJETWfQ z(4Rf1YT!7rHpS3N4vki&hiV*QiItoc9py|;C~_v@kE9@|_68~Fk@8aolN;Cte6QBh zQCBAp^r@!m;|EOTq4+Q`3@}eeH?-|(c#_erGexJS8r+Nd!y%5-`e8tiF?j}4V2Md$ z*_V|Kx;O1u*viAw;n+PW2T?6h@Mmd8p2a95tq5{&bvHZt>24omc!jCg=JBn>QC_*R zEONYRMrAO6Qa-7of)+zOS-cS~L5Rs&^*@oIgcB#GWbiPIT>M!BY^wzJB zf7T=hH-|#75A+T^p?3299Hj1?chVk6lbpPUU-(dhJeY3&@1v%aGZR5jnW_m99Ku5C zf!zH#+lz5X)N|4RB#hMQfWDALWEkYWwu-YWfZeyGVWk*Gxb>U>uQJXI4`rkM$Cw z8k}^FrDj0KD1Xx@oO7IO{$<6^rlq2QJh%lK&qR|(mkq&5yXqY;#$}E61_%P1ag| zf~fE0E2+@@b{&SZh0JNM0{gU~yGigOFT?9u-rg^LW>b&H!~VJRf&-|d`QO!-f@BgXx8P(F5*&}aD@T#> zzCdraoALH;6w%d?Z|_kEKVtV9?VAeBr>r)O#V;Nj;Ahy=oNwrxI*GfihO2b4^WkwN zheK`^F;?3H#cJ$j+ZT~wiyX~I#J@qyU9Yyi(M2Mc$D206-MMlcWpx(3P01hYj7m0Y z$UYkuavSY)a2KE(MOFuqc-+3_(;xSYL{z)Z*|{G1BYToudna9z&sTX+f?s=af_~30 zU5ed0K)!)m?Q3JO)QlN#c(lKZHG~Z72h}5U>PwdcjkE&(c|5vE(M}i~EMvj>(aSMl zriM+WtTf=G$x2qys1%ZJ&#C3IwX1({Jp515@qC{iZm*#V89Wbf9C=e|TM z;qP7;FZu%KEh>%f3Vv*uw>EQlQN+$k^?W@~Shy?{xOJBq_XH(@XB`rNVAp1JeJT#4;5BJew5Wy3T7lH|E+& z3Osy?=VqOc@t#vwma^_B`QpxEZ@KR_6CW_RRC#XnR{YrRQ|6HwWUQ<4eDJ{hBHrkL z0Kldk@G4;2!xMvD`5%uBrp-33ufJd40ExU_T%5aeKR#;Q*Dg-C1bv?0U+xrt4ZPcW zzM*rxUlUh!)88)TDSkZcg{@9b3vSw`-rZBgz=vds>>9USl&;75Ftmtf>=sYlI1;&9 z`wMKioo!G5%|Snco}0ZOId z<}m{iw^L0%phahm-zy9<1>z*Fc`wnMHLP&S_9%J&c82W~nk2*RBq{}VH{AE>w8Crl zn`@fkkg(al|D9raKa!UE_$R0^+Vw~_kWSx;cD?BjC7 zE8cfIMS1g^sNB`L!D7{Y=bkx>1DKibi=hc*L8TwAc`iJ;V<|D;6DYAx-s6z4Vn~>9 z%;_9e3ym*Q|FN;Z5wZMg$*eGy>#9oN`s~X`%WLKCZ##_P#_Zh{s^qOXA>j81ZSonl zAr5a3U53Xd1pfMJyJ$86jfx_UUuOE9uS14--nL$^=5oD|<;Wbt4LE!71f0D7l44g% z4zY9KEk}-CU;1jUpv+maa$ed=1+jz-P&us#>INTD-=ikCa>G#A-rH;_B%ST4Cm#yD zK#!PY&?;{v=hgW@nqS0zx*J^`Ji#{QRJq~Hu2K2=cS5rwWj5n*N?p*8A#ANC=}ql9etjZI z_n+~b`?WGn8E6XYI&n1vrRLrdm6aa`>dxNg>ZoC+*nyKNlXMwnigXY~w6t^iJRiHt zV1V`RZon;LQaK~SW`mHziHlx^*2jC&8vg1#2A+PvcEn2A_jlNx8a>uJ zw1>h_MsVYOt{{75DGP0(;+?a`Z$mIcE6#vVB#L~xh+yH)vay6hC$aKijEcxbW{QR> zM20TO-L2PHXZqTd9oPkk?(Lm!fBU=g1e~{vxapAeebw`2KFxcpOzxF?o4*QBp2Tdd z;=jckQ|<~CIJU$sS?9s>9Z^u)EA&A>)xcuuN@iBe!c;}MjM({${ z@5a8WHf@x#D8T%wcnEpe6_}bLnJfCE{7C5zW?csSNP`wH8VI?~;0vQb3)b_J)Anw3 zVPW4SowOS!TUxvFfVl|P~K+o#Djp9~F>s-Qfmo{@3>FBGcp4~t_(m&e7 zo?R2THA`Xj_AGJ3TV7MrE#MpIyBoiA3^v`3!m(R~@_=rK|7K4GH7wlDO%|~HR!&0J znshgQPMIjv(5OV{k|7U@RP9|mvqH`{n|`=`0k5B&V)klZkE%~hy<30%dHY*O;mMs1sju_>bqRV#e*B?(q8Zq6lI$~^eIPP=@d$K)k^cKeL_REx*^T3;UvKiusnf>^kyH-VeHgYGtLk| z#!8^J_y|&3!5_&Nlm^>Ii+?XpKWNo4lq3r|E_Lz@cx9>^TnZ(djBIGrdp@xtskxCHNpZu65MVtws?r$EaMpwl;6bkJJ}(RGB2#C zI<&Xk!k^3vIwyag4A7{2;6$}p9d7<8WQipn_kDQE`gHYKWMR6T=A!Ew{O2If@8HqB zvO848sO&qmzdMj(F}3cs*6RN}xw;+(;sea>T;LsC!rO&yu*tq~6 ziNDrAl%{wcJ8&WZX40~|n4ScMsO84w;V^=bXGmo3VYZ{iv70DGt~q;`HD3q7Qzkj9 zrmhTO^`Z^e%hJx;^eC76xe;0~1WyO;sWGgP(O>~g$WF5EF{mApEm_!>)RVA_$8}W5 ztQs_qDYpzun7^>jaJ^%}N^|-KcjtkiYy=oXc62M2lhn=7K7#$#l&jD|0LY#>qIYPM zDj|HV2(J3tBwsgg*Ftj7A{%eJ0QWws^Qb}>BF%jSw;0soxu)|Yfe_WPZH31N_yqQ{ zEq>o%^teuodz~jx=Q(T9;4JyrnhS1ymdbfM*vb}AidZh2Q&Fp`{vGfikng~z*icDe zZ90HWdEUbVgumhoPq=)ZNLslIMT=|AQxR1_s=+FDPU$`MK;4o6z8et3$=uJkuW7%E zgJAajVZB}n3T4pU6qbih6v(L)jlf)h6*Y8C-4DMtR5W#M`y)^e%~v@L{P)W=J&4>w z(0Wn_STlxi?u5=qdxPw+^kQJ+l>j%hKO_-42irY}ZU-x&_+FQPQ!-$_5-L~}-{QgC zSY|imon|vuQ%Pc0!=qGL7dhrQ=aHNV6)A6pJ|+~B#cN*{wheTFJGbVhZSGaKZBKDz zipW4?6wn7{&WS@?eD8WLw<+plfwwcV)gOS z9@L_F0r`h1_?h7J_${zepLyxeCqn6%L>{QVN;1QGw$VSu8m7^P$1^o1+z`9SB+pFd zB^bg3^Z8qlzOu(9Dcj}B)B}Ox-}?>O)b$AL_+euFwZSpDLw+Rw#7My7l37K!id%Ek zuS~)qZcX@>E`yFmxnR&I($uKQ4}w_ebI|;Gi4u-}_@GHn1sP!Rau#S@{n^EK5b_Ak zZOoKlD74W00cVp0%k`WmGp|96@Iy0E;krUAxmUe~^)p_M%jZ9@e|&Jr z^RGfPx@Sq46PCB-rN^p2N1}h|<#lM?!PLV|11<`tL7l9LJsq&r5xPrQ%-;g%g!fW- zQW;L z27HwJDFV=X-SpCG4u>-tg3$?$65ehlV*QS~s=7#B4Xk5-JIzj?P&!<~6$`XG^N>A>n112y-SRy)7ZMqaQj0_<@TEe2?It$g8%H(qo|9-F zlPTSH)KmqYdbbZ#LUA{0j7#uSUmGcru>EX4*T= zU8o=wAe$-w<|%FYk|0YULQc4`)Qs;)jvs9dw{8HjEy%juPsS};h*VgNdIpPfMFoh_ zKC+8yoa>6$W~n*!;wV+GS3JERvX@O*bxTbJBnd0htDRTbv#gz_n`Es zwY$+^h=%%nVO1#OqXrzCXm2AG4B?>Zsr$XC9 zm(PH>tx->V*ltUoZ+fd};DT+9`7YFef2VjYOm9x)OIlE6j0qu$uZg?lsVC%AaPCzV zspVJYW_U_PTqs&qn| zIZQzPQ{^{ee*h5n=rwLGVfF%=u)x<7&XOayihqRNG6Jl??T-rBGYxR9dvcag*+90k zou%UzTY_$N(^0>6J#VDezoKEMBr&Rt>@u= zB@~XU9hkbz^yH)#AH%|GaH4U_+WX=fiEfeOOKDBZ>Vv})ycW)dKoALtbHt07CAsLp zk|Ah{pkvBEu6xoIB6D;|z}cK%ptZxWvr->fHqxQO>B`o_%Yj3qCz;Z>*fRr*WO%75 zkdrC1bT=fgRZcC&gG--N9l7$qgE>mV7$H!z189bGP( zUH8)5V@CL0YOC{=F}H~nfPGnVqZa=#cL%H=BPP4PC<@}cLB+B73TS(a_xI!}Ge-ISx5?XbMwoQmaa|c;mC%0eCrSY|Qg#tUq#?_- zf(Zhx^!k{9yJWMKRxrullN?IL!I5<4d2+i7l8HX}0M&SRabAP)b0`5X{^aI8%^>JR zuKSz&s1ZI7U!UtKbN|y+zWg}tDYN)|0Rr@lUsRUlVr_cq+a@y+wG#p;--mxFms}puYi;R0A2%sHS zfDx5Bu-T05IE6*-$C;w>6U89-eAPVCwC#IQP$9Cn!L;^;Y4y55Vx@`RAf>(#5yMx$nYCe zshfcCbeK9G8hM~pxS{xd&yN%k2^UVo{`%$89ybV165g5LOo0pqwHdjrO11xkv3HEl zEQt4XgSTVbwvF!Cwrv|7=Z$T>vC(llw(X8>8y)NRoH=u6&Y5-Bx*zvmwZHAE`d8Ic zzX$A)trxulx614u_Tr>Ns|IWZ;I0VfNLNS+`Iw*s>DU{2uy!orV<$<3@V!TCJ_-R& z5IhBPjxSXX{hI~~A|K0P)uHLn0=c zZX=!tU0~cOADXP)Z+zG%2&M9+44O?V6}2-NtjQsXYE2|D8K{OIkiYgtXpIcZgJb&s zRR~9MBHM@Sy16Vc<;4i7{VGA#(`*pF%Zc#Jqc8xbw93o&z{o(7qe2&6HV_4g8C^0L zR$TEBM#2CL#?}mY!WPhQbRaBD400k4Oj){Dc=A6s6pRR(3Pbq)Y_ZD>ncS+R{*Q&Y z@p7p99Jt=>J_=0H63>FUkVH@oB#vW-M-9&m298y}oL;kZB5HFh`W&LK2qHEIrHvUB z7gR3_#(W(5KH`HyT-^k+16P+4oDF4+%fD)Am70eXku30o&UF zT3|&Wp>uy^Iy^|tv1GfXHQro)~Cq<`M5x0ut zpJ0-#VGaTv26~*F60P2P5O5>w{x*OKjL8-KACamX@DH27v zlp3%QvS7u4)V3uyaP|ONvY^>mI!J%(ut(BwvJvA16oz%IYzfmOrZTgk&ZPL8xHqzi z-X)px!P6wGze#+XS7C>8_T^NV-RkkGfRu}8*IR#9qP`%E=!wAI#nX6E|4<}y!r+mA zV=yiH8*F%mZ7+$6KsttqS~dF(Cr}$~Hb5CMTW(mYNU~b^6hfK|&c?hsJ8)Mb+et+S zdKA~J*^wjWu}42dYGTR*5vLdZh;k)8gIbF%F&eYbi@cQiDotA6xB~{>Nz&*NOxy>m zS9zl!Sz7#>Pc{*Cokm-sFD0J%_0Cr2bJn-1({M2TZU*@BOv=>b+a({J_jUL6U%6k& z)IsG0kN^fi^#2Q`{a=x4d4_>|qI}8vx&TK7Ge!BIT)MiPS!(uN<(=hD9F)Tt<^M?9 zmj~;Fy#n1rnpO1UK67EPc0rC;$V_>m0Y%062tJ|AP-$NuamT;(5Wl6&aN-?nKX2C! zYr5!@4jIxIfHEenT~W!EiXPWtY+l|(qH=W}*?zv`{krx^#|`npef#_SQ$=3M#ruH; z=WaK(hTWg~az^7d16r_X`KWeZtO}pwr3q8%0rj7@WLh;!R%98|NnQ+&xoqW&I~?Bo zn@YMJK9Zw#He{qE1)Yoad^yp4-bSZZ7_`E${-c~OK;mKdY6&u|_+vYSmNn#Uzp_N_ z%!8ISyXhh&3=`cTQ-Fu&XyxGHK%a{Fs(}ceKtPp^%3v@ME-6AQEj8i}Q~!We?l%VY zZPP1VsSWId0t8yX|YR+%OQ8WmLrqn`Jw;Ycac+7Y67xktDPt4#At_|=kYT4nt%(LqoDCv)6)K$x@u zH6j>pUrD>bMk>wnb$`TaH^xTbY&aH>7RSy31Wy8#w7|(n&jD>{V@EKW_z+2ZwNb5k z=*5vO8O%Mt^l&oN_#H=`lomMrpwDx3$tSdN0yp%2tmqRC^CiycwqI3L^(K+1HGpn_ z$hicz7@@cC)*M(SW_U$rX~-gDY+iy^FVwI05tUIA<Yd zgL1Vqm`XY$u+WM*61st`LEhzolD-Q8f}tn(tAz-HzO)-z)(~IrkD2p&d|y%l(lS9_ zdKDt~lVvE!t5A1cCU9Qf*BB~f$fdLSt2&QYT;ogYPnkAUj|qz05Yb+_10lVap;;)N z1|;sfWr2|0mKS7sQnM}N@i!a;XHLp+`*XQ73HBRhnolK!6#DCG8vT)eVt!x1gpj*| zX+#V0JvhhIdxb2QQ0++l0e&s(4f@j_#80h{`w^SlG8&>LSi(_AYZ%Q;s^yX?f@qbz zx5-=kUDYhOk)3TmWVnRlsKw9T(gwlZk!$JS@DM*B#bsit0XdZ8>XjHjQI#+bcyWVC+Ho_81NH;cIyV9=CN(y1p^+LC?1^Qs>WMK@dQiDjJS3&OmJ!m)`so z&}H;AsC(fkY~cw!ySY^j?JK=X_a}j{=KYR2hq_Vx9TKENgc#8LtP-c+F~Oqs;{dkW zt_ABnj+EH^#SaY-epOTg`;!sVKBLy1nsMMbk7NXecQgtpPeI@uBNpeVlnD%NT%cgc0C~cN? zF$)Xm>jb^uhv2nepUi;+m*>l;`A@xb-FOgv;eF3Cv-Qnj_oUG-b=cHC)`CziiZF&7 zdln0^Jhw^;%}!>txs{nwB9&@F8A<7 zxiyX~_Efu_R?m1PTbHe_Z77s{V|j|im*qT1xM>o!5n6Fv+%iC11pLIAcxRnP?@=BB zsaQ5!yBcAow>JV2XV5W(JlvOkHsAXom=;Lh%$3L=<_Id(dkFXbeg+kytWr&T)kB4u z^DZQEJ;^yip23}IS&;Z`J0T7;Jdq7%RCrn+%RbZ(4Xc^m47v%fE}YQa5@Cytottd4 z>sNur|EyF}G#V(P-0xh@Tw9M3Wpw=hESi#)teyOYJ^cOVkN%-uWOz&*V(t(EK3nbhwOLJUFJ-pfbH)q4d%c40|z?2quGv) z{-w&E2Z~I$W2PPqXhaqsHgjrirfzl`J-F)DeTg#EbP%vD)9Mj;r%{7P7qanL)yx6Y z4mWKr!+!+fn`{|VC9S^dhuy6|WcjF5xH8O{LcYdHW%ahw&zc(2xI?zzWtP&fn9e^^ z2XZO^eC%EueylA171kUavG6k>y8Zpcqad`=JvEDY_1m($qfcKzVbjZ)=Pu%sR!gyD z?Kd=@V&B^LqlMK*$z1K{8Lre^xPL~j$gn>#h{6ynF6yQ7uMgnbU} z9jjh>Ja=gqt0bmQU8IF}{`#e(oQTlTc`I!`Plo@sq)QSB`8E7cN|Q(k2HJ%MCjuJ( z|4W$H)^}Xz!tk4^MfuC(Xm1kvTFkaCK3lpXs)-;EWrqV5n1_U&fkwgm`|Vs(CGN5{ z&BW4LmBBxX=I$=n$J4V01$k?dD#LwXT;{-K1=6p@l2zJ;?!a>e`1W!40ehjX9!nvv z&9quaeZQ6U=TE>qp($c9D}V>O9-0- z?Dt00N)=CY-DQyqAS!mocoHdZZXqlFnxkP4m$7Z23MFy*ug}Hawx=3xs$w(BF(q|v z%Kh)6>L68>bG}o~tTJnRUGa=%(T?;zITT$-3yZVBhA4+-ReX(@lRb_ts3LE)q}7RU z=v;kO?Ipi2{psP55(7+q@l{lz;O z|JU>5d|r<}QnvbG^qDxL5|u!M3&4%Ha@Pix>DzvadND>QlfC`;X?jtW#F?j+tl3jz z0#Dg}+HB339VwHntf|%UGqEMsH*2Z`x3oA|X+P$v=rvRf^}lPZ{Yr2u)GUpV>ttSB zIW(|T%_XiEz@|tfrDLTf3u=CoS6{_|O9td^?c7g)?|@P2jd+?{*pNj0ppZBJy zF#e>A@^Fu1=Ipkd;Zzm0;IR`plI_Zv*6YVa4Q8A2AB|?Q5FEq;0`;Q18 zR%+Nljvdr~LNXOG8dXQ4)heZV6IQf(Qdz<6h`G*GAoZ(tRK5G{;(bsohA28kb>Q9F zj~;bid{02f%6$Sn2?A~@k1$0Hzu*lk75L(fn>(G275BIGq6tHRoV+es=IO0GWCBih z6^`SK3cM0Ha|60)F6(9W(b$SqDJ-p}$Ca374tLDTru9mTa`E;U1N+Ev=aS4Yo8ls3 zP*oou7gWDR?EnAzg5zVYg+$$-IyUNha=pn01Du-U{;N`k{b%64yF^q6PKB$#1GI_;a z^vo2wK0P$s4mHr&Lvkha>kHsVZw2-a7Cw6jOehSfry!x}52z1#tq4f4hqR}d&G!du zSQ>RmH;iEqZqn$o^s&E{h#N>}#RwRLue*kGe+=c&n`0aQaX!}5zczo~f5k-s0|)qEh{M|S=?*WhNb z>sSbDM4OV#gx4?i|BNGOuB3Af+iv_d^1wy@t9EreMWLg48BGA^)lW1&Z*5i^<$fhp zd9rnm^MDjCRk0nTm!%+k7+Tbk+bsy_@v@}vyU1nGd|Pf?wX;$&Xjw|YXX>J7=+66A z2)n^SXr!3O?UXll+|k3kp7Z(A)rs#_nRSiO$@@`55X+LAo^#zu>w9kDdyo0!wxI8F zeTNTt4D~c5IHId%WBMy62g!m+GrQdMA*)EZDv6_~EH3Wz+y5RD|06dg2V)Hm`d@?@ z85{@|6OtH|pG*f0BC-=ego6cx{Le7)7B3Hjo#5Yu=~H~ed!i|`-D4$zJxKMJ~` zq1%5?L;{_W0w}?;K`3MZd|<^T#irgP)wC1QakS&FoqamlF?1aIrp!kuzgkHlSVCFO zyhoy|9z8klK`gx?zD2lF{t_QzOH1J@&2wIwprvtx+N$h1api;M7)H><=iId|yQSz1 zeqGO3=Z7o<$v(CUF9~?c&Zlij&mDr@^tXlAefK8(vT&-Z0Q!qP&YvNcC9dKEGwy6@?7}JLa8F_z#8lxkFset7bS7z#TnnEXU zi7!rk2)?efNCIOj3~Z%nZMAu_#b!=Yfo)$;6~+p*=HjhpFB(ZgMS4z;2Ycpe$9qZ4 zgSqLV!1IIza$taz`J~%<`%ExZ)CABAe*b)+u5wYEn3AbbGtpJsR-98if@0dR9GlM> zIC1$sZH#4|Qy86n%x08Yyc+OFic%k=A(q$Lp866(&oE2n8?eg!Pp=buiv~@yYh0hrf$DsW@ zJ1xUhZTx3S|Ih5ZJT0on_e7jv>YDdJk5j`)icGmdEg(YYpF=BxH^)IXnaUyx*C_2r z?SuJaW^O~l@NLJdD`Ni+M8Qp9hYxsVBkQ!{?S$|%(zaUlLX`*W4#uiNQc(lq!&F^y z4r=Il9(&*SkuKWJ55YCy-QJ_+6vNi!^8hYyTDhv|u7^XQS}0{CSMe1urz0ZlI`#I= zsi~RXJ#d+w@U{@V$2Rl3)*01K$9=md4BDE=2&UkkETWw7QaeX_70zq1yfgLL8y6*B zv#gk&;5$SnyQqt^SzrP_ffGmAM5X;9zWw3v7;6jXpWNbnaB2_4`b@qb(}r@r?hn8XJI^8k_11Ni=<@xKT}kSRTY8wi<9 z5XRnk@M8nmb4DtzTyLhr##?+M456BRnsHU*e^y>`b#`Ws&gp+2l$(V8 zEk+b`;`SvAyQk;th5Ekm7e05KgI4VBRJ8NM-i%|94`F4c;xP-;&8hRpSq0N}wjRgS z!Q$%b;o;#arC@dGv1JU3_oLz03-GGN37q^%m3NvM&Pm1SMRWh`+5zw|_$_@KsQGRA zKqEWEhNIkK-_u)tB-wml;iR0m0LeyBJ%~rOYg}+utYG^tLU&dsJ4J7< zsW3-=x{OI=L#ok`y4DBksQ)lgSftxQA}~dtL(2?~2JT>%to3lS(C(~|psb>Igb7@| z)b9`mFCA&3UAs=x=knlks;fTmPvPsM&y_V3@M&$Gqguk%ZbR?wYC5z7d24?HAQFppe2*Yq3=~K1o1(9gTx?y ze9WI!%2!>8`zwj#kBT>-$S8nh>x8jlrM;K*l0xErmV=Cj7=rqo|JxRt+Tsj1)ifd) zRisvxJdxh_#SfThvA^We^&68r_WNctc)G{kIbv_6<_?qisTvs{R9lr zPXx&`BQVI*6t;ivTgsG(&{hl-BL2dg*WgUB z+_YQKGh}8`UUwXJ=+Mc{+s@3AG+c9+^GiKvH^ z#tiu=yxAXO#I>LP=P_!AYV#HWh(rgq>j4(O5@OhZ19A=1gxGY1PT%B;Jo>Crl*La= zjFVs-_^r;C3hyAtQNtipltmIf5T?1ptlo4Ql}-6Y#hQ&N=_ahDj$hc)syvKdh8I2Y zPrftpfYTIy`&LH>>%_*wD4oEeHG8669j*$Wf4cMi^%_AM*kKcHr$xcQa@>6Cf>fBp z&{0(iBvy#twoRX5nN$uBTb`Phyv(ZxA4VN}_xK1BciRgy&qZ8ig9tz5TCvxPqi(R6 z<%?a<&F4-CyXxF(h7WDUOOK9G&Pbs~l2gHHRAu4^w~#hs1Md^E8EVO_UCi#xDYzG2 z+^7~It?GR6)tRCS?la;G5XM8edYIVS)tWH|Hk@dk=eU!O>scesd5gAyvuls=K5@B> zQ(&=+{XmnO6%mHb25!u%5XLVZ^|8P!8lL_b8k)@=05=j;ASyCIw7QpDZPfX`qdz7D~bu zE7OemN!EC;(Jgbfv)O{k5=7<23OG!*vim5O-bqU!U>u1J43-R>u8}mtM zk-$_LYGSL47S41(vS4Fu_1)oh129fN%^-XA4*;{(UO~iTpG3bIy=A@Or1E?6c8pDE z_ncYK?EExTe^rZ|mNj@H4cfm$LWShz?Cm0k7evF6TE%2(o76J&a-6U@a4m9R@@{Sr zRzT)y#36zWF$(>o(4qUMfqclEUWnzysaz?a}|F-c!3oP4wQ>8C+8kYc^zl zetxTOgI2qlChL&z-w5^@ou&4W=kh7Ms)zCQ{BR8i%~BplL~R=o&w*p2hkkwWNS5sk+UyI>qoFhoB@zC!ch6 zF}#y|^K|uC{L2G|%V9DLHb41&xGrXKL3#=h;JQ|I{5OrV!6QAZfmn=*zgM62XZ$D= z_8y8);#u~rMCe^mbiUl&i80Gi%7)Q^4AwLRoKNW}QGz6xRDUlJN|Ep(3c4tjLb<$` zrpc;4GSL>Ccj`3Sr%1}JbZzEEX*0omy}~kZ%6!k3W6h*an5;>{i8$h6jf4r-9jYkN zY1>W{w+9NOc;erMb5siotgSG%JjZ=;^+A1bwphU<)hmRhQ96!2l2eiIl_3@-lgpfv zn-{r#6b8T}X{`avav^hh$-LBf5|n>T6x)HoSn3x7OHLxy{XZg^CdM|gG6gP2j5B8d z&-K!j2>b84yO|a`uiB6ud3*fdfoIZG`GlVz8P%do>^1~t6ed#LXuqF!^Q)&D{@H4Z%4~43Fzf#sj_hkTR^9&hH-HrBRrjVWhl0RgjkK!3C0$A@X`%orQ~F1WUmOx zP7+$KP*_ll)ypr1pqgzGpl!8lLD}2fjQ^j8j}8 zR?lp+jlfeAnD4Uh&ipjb3O}XqE6)*}`7ga~#$H>SZJ$qx`|lvH8pS2=jQFKY zY`V4P!^j;%g4T7{BP0t`h=-sbmb0K~_~cB1co^YRUNt?{#d>2ZOv%a6R z2Z7L{l(!^SciCu?IVEbw2j{qcV#C)3p2`-Y)i^b5s~ct8A{OP3#BA;t|Q{5MQ#wEV#8 z&G4!R6-tNTJr&$>DHBqf!n*9gA^4Z?VO+;L^GLlXRdikFsh?iGER-af5ZL{A!C(j) ztdJtQ%$x%*`29|Xu=4aq7j)&PtNk~(`h=GimGG^6v&%!9MT@)+RSiKD=#UhONsE#6 zGBF~ADALt=KCN9zi(YAS$1=;z)(>DFeAp>g=0dLh<=81Q)K!atVhSszu7BQS z_+Ntx&fTxh-5mrfwn1#X04kt=|BY_*di=FrPhH*WLd{?n+bxEd(y)(sFefQ-!)cKD zmcaDs%JHj+=1A1vkXr(n{RDR;2qzPc5G%~#1z4Pj-X>>m5U}C7aSG;g(lB(PA=$y-3CPax429M}omSv_dgzbs!tVY`&!BoHL&Ph|<6L z=nsB`N)tob$(H7u*Q8ADW{hJG!hkO`gAvrsFObU_Rq$qw9dzbDrZo89KJ}rBX`XHmagAuFSbxJ z(xo=XN#Jd<{oICBVaNga^DAvdmJ_e75Pb6V&DT1_hkf-+IC`1VG9h4MW+_IHwz-pN z;ke{k+d!S5kschlZuN!^ynab=-^K|@`6a5a$U(^m%S@-1r;Mv~R75T1jRr?3LZXcZb~ph)bBZASV!{eoL+9tn)?&-{RC6C*^*!dF z2_pSH*aV@miF7QTLP=N*&h3NX);>6c*}aCZt$juT`Ml|fN1>b7>~L3E%DnY(CqRsh zcc}j#a2J4{UAv80zmU;|o2%jB9o-<$-JqHMa8Ixy9ZiZ0k}y`I!kGsTQ4xxa6WS-Q zR*3#*oht)YH?{njK@XH>{p%W`lz4CnE|(4v6GI%6DLaK4$zcv`;l9d+tfRiRhgyfH zJ3W1y5Ihuya26IrQ`XKdn*33XuGq(p-~Z~zbw8L?nz0nTO7YX%VY2Ct0f_T}KbQZ6 zZB@OdJZ*7KFw8Pl&#c19Xd^Tz!Tr&w*JqG8E87ZmDH=mL(-i*|w)l6%1Y%xUdwHez zbp#^Q$quDOU|z=6F;vpYNd{PGU%?(d=c#KtFA8@M={OmwEvq#gLg0?IS_=i zN?~d*-$G?{w{+j~w+AiKBj3>zw$OCPhzk(|&-Wo6>kpqW{K-a7R!O%XVx|UM= z?EM7p9i;wCzUi0gpm}lwyHTELp-_QqFkjK{eZ7F46jevwhLEC_0i5bo)CbUlm!)6v_YbKJ-oVM=Yj~1xv{J7)b48Ah`uL1St59RK=#An z{a`SQxj(ZcQ1KCPp_+2&!6k0ScH;a45WixSkub6lA--o_!n!j5b%W#QPPYy<=(LEm z)b-Yzvdr&a&J7Bc=kE_C;^^R=9w1(UJB;01$k<>LBe+|!q5d=BDlE`J+N`tXfT>05VSuUzq@Eei!VF_EDt{K0GF*MD7h^s=#G%2@QE$qqb$NXE% z&>J!_@a;HhtozOvVT5u-WSMS6D_KwFqN*S+K$w7qWXy?W@B)hZ=fi`W$~9?Z(bA*0 zwAE@OooVrE>L)_wsJ`Z_3oyTzJYQ(QRlXH)?rP5)m3IsQO-|8ES7PQ-(2ik^&JXr* zF&$I;CTsTQ<-V~v_-Z!wtQ`ZJy?J6*V23Z8F|*zf0ep9EGZy#rR!c>{qQsU1FIzZV z(hY*ehAPmrIc>j3*6^A4z*#Lb-&hfn3m26mg4u;KEkvb`@D`>$01CUKp+gS(dgOYa z7jI-m=;V&p7F4(-#g5PXaZOS?O^amUce~lU9E~n>&680kCl`O7z)dlAEEx*O5!;k} zyjT7bh>(PSoY-aGJery^!uW}2p}m$@aCPqDAFlNDfccJGBy_r-{y=~3(B(TGdC}Z3 z0-fvHatr5jbpm6g4O(TbQ6J5(x%I$SD>Suu*F}To=K6Y|kFXS(EI=N*~p9 zb~H1BR;66-Ucu)P6zQ-5KbA2Z13MIJ{(G1QNd`RBk$0+NB4Ojimd5VzwbJXs6~Kq+ zBDGUiEl^(s1#4Va&4bV#DmZ43Li~mCEd8Zxl9wDTfJR%<3M?7Ln}SV?vzfN)6~r2X z;@LC^7W3{~nBynv9^9>OZR;rO*cXM!q+ZoWP-P_OlVI7yK!I6`YJds3RZ!j_lw=EjHg$~4 zI=so4Hd#Noe}f};Z@ta2AXKN1{1PKhNAIS-7BRgXC^K0--%k}-;mC2UO_UCH?%5N3Q)*Wew4AC801Tg+B?-nREt=LM@ z>;$fRR;+S(apr`9hFD;Cessd^@(fF9M?;kE$$(QMIk!Nmaz2g3zdd+5h~r(*a~&N{ z@S||P@{2g31SpbtR530t$&{2g$a(LXKnove|6>WKJtUJ_TxvZ~ZkpcLc>y>F+azC5 zFCI2`GcNdqTq5u!B(4-G4{|EDxNry=9*{zWh9koBlj% z2bN7AN064Ylmc8rf^VRA^n9-QexB<+Su7~YME{oA?(CYFF#N}bT!woP3v^3E|GKU8 zsy5eMxOyMdLPno~n88KMh(p`=oHQp%qSo9$;B8mq$@q797y0*uATQ41`Y~Ma& z>KYg#uz)0I+FtOt^c$^0vEx95V=*5m2bu)<$i!l&!xy2tZ0@jOndrc|6obdG!1t_cvvXujWGCQ;1|!n!m$m{HKBbqTWIS zA|Y|>l)TpNT7J~NIS6zu*yRIiyrGD^!L&6u{5w{$mwgB@t}c-v@Cjp-3^^822412_ z)o_hd@TJf7h*Is|-x!Zl@R7XVFg|e4zwa*_rYR@0Cb;-BJ98OlKiD;#@=ZjRZ)~Es z2t3W;kff6YAS3tiRZaq#9C+!656zr)W2zWwXe+G!l)v+PEbor|eYg4kPeSH;co(CD zJ9%mJz~DdyvV3NUhU~hLzD*kh0Z*NaU%<%n&=Zpzq8H78?N%wR@KKc?R!FoWT^|>) zZ4V2>g7{$D-BT$Np1B{|o4pmHnYqGTwWgJk^~$`$D{DsTfOBU352`H9RsANbHDx)H zwD4c`mHD7KX?t};&gCi7EUxsH8FzKA@;~ylYL5qXUfi6P;%%8fK$sc%sz(-vbhXVh^yp!}S6)0#o=M52O_^*Ou;d1-_G^z3K=m>iCTwi2^5KU!T(JH{Et(tImo_MAli%2fL#l=)dZ<*&!QV-{NjM8z zY<06ajB9H4WTN~hOod&K#Yu#VQof>nPt7LqQ8#BWr77~%(phQ}H5d{Gb&SPa3jUB) zy`PrMTLW+L;X*$_d|@##4ZV!mMQ{t;h#a7Un34e7lh?z{o*Hag&--GvQEt#;GfV0 z&#)qX3o5sdWUJ zw>WtuYNreu-l8+6dj_i`h|D0 zp`|hxdpABdCW)HQQc{uW!{j3=>@{?8@S_GuOO7U%3Ojv$O;Kz%bgqc*`fE{^*-~Iq z`^10eF6w>-tVTcc|;c0OP5t;LG_4v zaqSKE=b6x*DfU(C%}ay2ibZRx?jW|XT&|-F=ta&3Ptx_l#Q8#g()Ia@F5V5 z;)BV2JTddP;H+mHZ^xf8*$g*|r8V-xW1L1@u`ac<(fOD|ezilFVK;)Z&4CF^)p2;W z?ga#QPDs(e!oBU#L}K9EEzrt?!-_j=;`-vM81m6gE17G0J^CYCtZ(bAHJ%Mli&d^% zb#1pcAwTEQyCt{PT!AMiubYK={k1^s=ZLLiq@?cknGuNrfx`DTbeU_9*90a(54{_s z=i0n}Ny*zs&T!Y?L2KrA`V#}&JKn46ic%w=#3Ym_70FeqRD3Fhz3Z&#H zfC~JF8vTDr6%Vz>lGeFUx@I)P~g;A9OnD$PFy$3XpIJ3gIk7G=#RO z)L&OrI8?~|j1%`c;l~aiP54VDzcMEazh!#-DH%wMYTIgU{IUSQ4(A4lD}wAd;ZWkf zvS8Kl86N*3v0O)$F97Evr?Vb#4+3cc*nvpNPVlSlb=mYk5Z_!=8Aa7O)FbTQ*kZt= zD5hYAROVnn%2=VCVyI&izr(p~cVlgD)A+GV)8BsDS!eC0D~4XkwCy<1k|Qko+JaWJ z9vbuM*t4uZxhFrcTUFUK=&NJvr&DaX$l4L|5%&wCYRw;OFGHd=bDFAc6!i4wkG@y9+5W_$GlEg; zf)#IcUCYu03mV%17Nk3};Hpv5N%T7o*?Ef5x#j97M9b1Pg&UtJX3)AefCQ=@f1R|W z0R*lCz$UtDzhtqx9)J3hx~={Bd|mOmAQkKtLl7H`VaR#31LD#F5CIoufq&V&H&p$W zGxM;mc#8bRhV)|7*}LB@HdD7(^j~r|F(oMi`0`O-Txn^!72 z{M5^Bwu;V@9)52XOhM}vYqy)~i_%1`$w7w{F$G{oUi~<+fhfZeNyFUg?l{A+((rG2 zvAZF{8A{oSv$;A9)4&P7Q22_tBIaawf}B5`3rwdn=EPE0{w^yr`4@z1n|wBrdg^A_ z!Dm>te-)eGs`~Ypue!hbF5%D1yE2W86*F~$ouT8bTZ!fkW|Wo0xVhy2VwT=2F5i4? ze!NfXul<>DtcXSw^kc<|(%E*w{vX`m ze|AO?@&FWeOM@;z?|*jovK{rvuz#)naQsUK8=owMaRh+z~>~YKt2#@faJ!;HIY^rG`LkuO#4#!z1gO0to`3ot2mz6 zt9xMJe(dq)&^IkWHy4{ty(o9x!#jXJldYVpXlvxW^1co_3XMK2S?yL?v7`&MpG+!y z91W`}WLddqVlbM>$vAP*-+X;_1$_0W%R53}cO_W<{5!FZ>^5%stVhR=dWbc<&#d-} zG~=0QJf8Kup0YQWUuX4wVov7wXQ$B;UiRVRKTko`EiBl;BFgZ$1Us`tiZ1l}^x@qF z2yT^ANf9dVazLeYD7CLym;Y_yw7offtWl@TrDFJ_WuQfsTGTN|pE$S+6L3;TJVUdQ zf-KJQnJi8g-porUuBwVGvUo{LQZAohEo;MqjbFd7oOW)ytRplWuLwO-skp` z&JM`(G;Bd8RU*>a>-+2-%GDpy5OizZaHP(`LgEm+2{j4}ot8uiuzgcCfu~(0cLRb{+ zTe4|;i{91ePH#9jtRL5y*OnO7Hr;@^BlrRc!O6pgCHSBvB3dICHq(FM_Q zog}1`igf^8$Br|QCJuAd5bcj%HI5!s-5qM^vKvdZnAilC^rq?{MD2&@e=ON@-OxBk z92<`yiVnh(qn6U#0P~Sy3j_v=tr5Q4nsKV@?w{vv8+Lo613lf{c^lo$5FAv;+)jCx zXy)~NJiF|4Qwp)#mL}0;ZR0NO@^yv#Wap7$43;ypPMrj3-30$^{(S$aa12oWa9(18 zqWeDN^+93LI%t`nR1rcX)%t2|)iT#IZRc}X&7QSOFvImk542g&-g0!dJ=0*U-#oTC zQfO(bSS^(9dQA#E)IXW(x_fjyUDYLkkqaqZhc` z>nf~ky$@Mp^WwRvbLg{Wy;pG4(=o5+R=}eX+MQ#DzqM%d&Ce29{mp7kQ5l-wP}x|2 z@<{UmkF?pK{N>un_m2C&jC%@hJI8AZ|MZk2n90U=)S&N90+|2Tu;*tXYT4`M2Uj2Ex=_5IF1aE7MYrc?kl4w z?lpB!W4cLmQtA}&IXhAb?U_2mG($c^fyOawmWP)E35pIHi zF67r!*vT9MA~=gKiyK;P=2k&SRDSD(=Vz4i-a<@e=`r?GK&xc7Gd2B9+lQix!A{$5 z>gk5?Lp~qhX?CoV1VCd9tvpFo7f&2bK%NjmxK}&;vE}hh9CNegpH=RIZ2A{S`;<>u zRQte8B3E6igtltI!K(6aCq#QqqjND$aH;TjaZ7|K+C=s-9D9hBS3Jt~1}Msmv2U#> zoFH6-bqq&JAbX#eJ!T!r9~SM>yX#Pgs&=BJD|3%{gE>p#@tbo?*rhmUEa4;x>*=lt zO6Tc2!jtY+@1HM6&o75u-G0~f&sVffA$Dla@dQWWo2jKGlPVfb>6pvDH5?R62r0V1 z9?Pc+39FG4bV;e3<4!8=oUtvxnnW$HD3N8Y?w&)!fG}{L!s5eaLwK=ju$n*2sTTC-e=SuRyzb6B=+qRQRQn78@ zwrzc}tuGZ;Y}>Xfb}F`6@y);6-S?b*+C4ApX+F%gTAOQ*K1N41LOM(&u3~_{juF0{ z-8)XHO9p{nm{qyq>#MNuoqh9EtffY(Ui4`WYr{1HRb-LgRHH|Pwtkba(8J$kE)|Co@>&L{X`grM)NcsC*gMop81k;rimaDDZM*QRG>|X#Se9I8B zo|Q!CFQ^Lu#vOK-nRz^{?a5!tei>V1wDu`;$`dPf71zq_)7XKe{a=m9;Xl{x@)_8< zax#nQ=n5vNbB|+3oONK)Mkm;E+g4TN$p--@2D{u@nSueIc6i>TON&#L6#GRM8^#Pm z?Q7wN(+cucgeKj@3aPPH&COJCP2s!X8WlTH?OUy8lcAWGEtYyt*=9TO`%ptjE&O>! z+g!g%;cy%H510?2xm+^hVB?edSs%=46-r7HOX{mq)0LPwd;+P?*ex5SK{NYmF>?VS zBULEQQ>V+Gb@|=Mt}Sa|ynTd1+45DHx|0M52f?-p7Z)5J{xAPl(Wo_!^zXteBAI8RwS+JvuY9-^5P#f9b<5JJ@ zQ^xa_CnTLm#G9j!Lx--o(%T!jhA9F54GlKqkVHT32#lslS*H79BnP$@?CRkWESz8Z&slFL;Nac$B7jRNYVnk$)>Y~4aWG6<5F|XT)&o#6Q z7RntTgT~afkZ4jw`5kJ4WFFZejNw%k@-jl;s^Of!d23z8`Q}4Ijly|m4`K*t^!mH{ zbct`O%gTqpp^>$(SmN)0Kbq20a%M_hFd(gp%?eT~>6fg8wr-mFTF$GW4*_J&c!&z+ z+2CtXM>6X%aGvA3PfJr$_g3!3LVhhD&=w4a`qP7a{~_WHcP;3LC-N@P>WSoky!^+L z=MVDxt-1Gy97M_(X*nSzMkymeT=_(TLA+d2NhUHP(i1A!Hk&BCEHN0(xByBls(R@je+wn z!Od3pG4sxR^P0EN1A5%%)F`mUtNZM?ui`J$31|JH_(sFdLq62&9|Ot&&VjEus|Rpu z7dxOgsH@+>%a~Sb-8j9BxCH`n;xcN zESiFdmxbJg#Icgz6%0QU3;sB?ufkthQ6@JOq|u}ti9eR>Es|Si1T0pbsxD>6i&%Ch z9?Vw#Bb<=-`?;jBJMCY9g#kb+R#)SKNUbpcUZrUO&s8Dlmz+>L0(C>#Wi~dKp&ce# zasv-#`xv38D=2}{+BQMH_sZJf@WPJOz?mHteD0ji<|~Aho4l6UxwVS=9yhD!&ge-t zy9lj@mr3*a%%KBrtHHLmyS$h``d9EorP=LIRl^n9(|tXELXH*ySO-?nTViXXL7GDHI`xRWwTtDT0-2OSo&~2=#D69X|wGwHoNU7Xv!=K@A48L zhs=ug`ZaUS((}B)>5cpAlSS1^h3~26uKU^cL_1KyxMuO`Pm`&p`B)G%S>1x579=AVb6ar|sE5qIv@)_V`~5TFpHm?qNuL zLT{$h??0#emFEm?LsA~M)@RuD0TRuh$RAmLXi+0TF8~C~e|0ouha>0WzdIUj7(mhs zZYm(j7&H_x)YP|{k~V*^B<+s0Z)ru-iag}@rKYP;qPd4YEy-yAuim3x`nhMEUE zm8BHU7xj{}$9)maK5fmd>5j(6ou2EgEM`A1uMB}i>n%nR1X4IaukSO!VEdf1wIIgJV~7g}Knk^}E3bo8TJ#rG zYsxEQG-zRoFSLUGv#Pv&H*zsjYwvqe^fX|C7tA7f^w|LNd}-tN(E0vZY&mm>=Xoog z8Bpdp;ht8I&1;x7iG2n{we~A?EXw9@%!a1N%wz7z(qdcnQ(Dl-un*M_p#mACBe8h) z)SPjKF`#~1p9f&E(JSlV{+oHwmT_B0Jsvd53jWF%l{jwjXol84S8+~AaKL0r zek-9xp~jPtpo9$xr~j3KgPx5ijp_zYHD8}T#wvrOmhREL%K&=%nMWeYoT^`5`i^>_5$Eeh|*X@ zGnee*w#~{NDb@C$>7xHalub|s@v8#tPGz;HEkEHW1XO(l z_eco0>0a(SwC8~c5s*v6nBu{v7o^G-N)MsakVmW1j8lT&7=LR* z=;$5qAXMxPpXhb*_}tf~d11)AvLU?Niv%yg%kWR!I0-hPJzkX(WiS%Plw#p$Y#a#& zx&NH+NcP-<^sT^5d=&d2v9o=Td++F9|HczQ-|t>eNwAePVK6)BWKBpUZeFef@qS^w zomAG;@Ad~EcEEY6jyYSUf*XMwv_j5O84-!g_EWgs|MN9lmgpe7R3*Al*6`S*HCh%*u2dTr-oClLzJkNiW;K z*ZLr;aIq_AaeVKJ@*v# zkgsw9ATW5CBBp&~SXgvS^#iabWC+MrMlwgnWh7n}dko=$H*xemLnOok+5F6AxE z^yD+l5H#~PFz3I}e_U|n#Dzk2R$g!(sqg4XRYJ-c8KCI|W{*H=izIy8mE`A{{et?P zbD&E@vAGl+m5ZEhp>8ggMN7lc&-|&*s75mikSfm>zo`PwvlVz(dI)igqOJ%N!N{JF zHMn$R-dVVHYmsv5Fx4Nw$YShMKB3;Ntn|-Gmg2OG3G2``iXTcKiis+h#$JJ4dhGKY zmC=x0-nruFAPm1qeS2QcIBC)@@$l5>bb;rAk7n9={&8UGm(#1!@PpEnY+N&=DHX{A zoK;yP=KC3*te#N(g;cQoW3!5GZ`U+xYpy(FRfPg;I%r`T$pL z5ngUda9`MlQgX-X2Qn5FH=MyYRxgD;Yf>HSE(K@u*B%DB&E#^q%_2e=d{W^dnEcUx zU|3vDJpye#uY6R2$ziQSZt+LX@4(w|h#vr%#ysacYhFT=*4BVzz$x6Oq|5R&b^{N%Ud!yAB2-&G}v$DHZZg>HN z{@Kh57rBpQfR51Dtd;B7hChm+UP%S17uL=83vbP=Iec8Y4hj1vi_UIqo(~-xgm?EI z$d{YzD}0g;5uc_yykGmeolEB0ne6eWC>Sy$k@s}B8=lJS0hI7WR+A2F+QLER9)<1Y zB@sM%;kDNiAKRL1A!SV4>Ro?>TMUVrNNvHk#?qgh9UP_nP1SoDJQTnF z5BcL0UPLqXH_~b$0-~-$Q{q{hxmsA;ng9QZnXeJ(F#%jCqkrFMwYnj!P|tf1Hny&m zje^{WTeN>WLM7x+$H~F*pjirjB&*m>YHu|AfxsV-Mp7bKe&T)5BoEG&9+HVBD5Z*w z-^TGeIiN^YWF$7;P8&WOI;7yMX=t%z)57lKmpcf^Z^vcm2+RtRZRw^Dn$wOfcU9cw z+Y9pZBLZ^YgXk<;j=5?+KF+r|c_JWtFz2}nj7aSTQ_qmQ0$D~e)}MIAoz2y>)PA_A z%W`O?PwB)oZVIzFiQ3*F<9Fd$69Pu&a{vOyf@31XTd9s>3ArjNU(vuaF z23DQ#Gh@s`*97&^ikS{N?G!|>UZq+h&%xA}X@`Gmck(no=Ah?5c5;lak`dZ<6}TKl zfCPA)P1^do^)NbIwOGLBy6$;wVp{J*OWyg0=LSv-;RHqbL+o>+(*Jjya9A@#OX>0M zcYe6ZtZxUA&6EL(Bo(EpY*O!~Iffi7>G`3X#OdO530O2h$EKqv#5E3&wsW?{k386P~v3^u;NL=!uhr^N#4nYliDzWYN+5 zRJ1Bbt_w5_TjT|^nvnJy;zVX=uK}k%5=5H#$Vn2Tfb0=cw>}5rq0B`Qjh<)IOx;e# zA^5KB^gUv(go8L>YmDoO9*X7ug%4M!LZ26k%b8HNL?Eer-L-Q=F*}-)l(G4<#&*X?>d7aGVyE4SxPvnjx zPa7vH!RJI8#m_VVx>AXl4pq9RC!5lZq%TN$B~0MC>S*Y5?7YU+MwVQt_l@qa{}#?Z zKZ`!NPIF_7A%vHhSH~kE(3ad13o`5KNXu;J|C};aLp;vk}cT5)uuuF8^EkJ zI(6js-vEmK^TnS7hFfe>Dk3nhU0SAi;730dy!#$kfMN=6bR~uXy>E#ATo5Jo|NcU}k?6#CqptUY8c9^b+>>d-XEjBJk9^6C1I5DFgn*PE5O7(o_+C zkz{!KF{?TXFluln9E}-q${u3{GI3M*_p(wHIz7fe#4ykgJEu2;H~O*vy6_#PzE~j& zn0SZb%2hnd1k@GkMECreA~)AQ&2s1up;Y$u_aT$>;CV+&DQ%^b#SO>bB|VaUwO)~^XL&}`t}4}jeMT-Ep{fZw)-M}1trE7Vom zWiwsZ)Z}y)9N4hvXD4+3dSf~s)_z790^mJU@yXR%TKF`6QhsW<*|2lrzy`E@a1)Ki zhFy5u9vW-ssZ^L`1J>M2_@0i7MXoHeU)1S2C{0C&wBM8M86QgU4_k7s71kg3-?zW1 zbVK_FX*C1&9Kf307gEtm(jLJA=h$9;)+w|V;v?oBU4=Zyn~K#WC_$^pn!kzafZANg zu?nrnaDq0mS#}ED?ReLFKiTC&4f*y=#q`E8227nIJiWqyy_H$FkMdYwx_uWfC79Hy zvt=7nq!GcIOJoM-;8;5E83SC%v(GlFbt<)H{#ZT*WNRAY_VJB2ARV@O>U}-46>*NX zg9RIIf;s@LuI_*UEtC9-P#jQo0P$L<_ZQ8#yTh<+MvY*Zq8{O*hIm_bw3IAn`7&LB zJsAFyCsA9LMn+wli>jFs9(_|E-r9@2K_g z@|!}fL7K6OSxvad2BS<(I+YKGSu?4Qtb#A5%jv|)DoDq*S7Nla8zr|4Ad#!CON7ifYp3j033iR{VHJ*tnrgIg` zrnKQS?aBC|580sutlUn8nk=iE(uZu&!L0O%(}ho5pMn{us>x&eJ+N-6Uggn{-#^t* zmH4WaX@gzf4ANa)xn-0CcnjTV%FM6=xngE*#oQ}YueU^tOIV1;-sg+>H96%6bT{x{ zD{`2TSXeW=eX;9kT3gMrXI&N7-&pWyIogT-Nr!fL-t^A}sWIX9oC~`5{Am~w2f1Gh^@-X3jAsdA})NHHv9DgP!`aRWr)olXSpF4 z%oX2XO90@05E{9m^18IKig)e>`S0~E7XEuPCn!oQ&SRXJJZhEi2-Agc^oMSZ6ZCbn z+=0UvCNK_H+Q~&R2GfZ27A2IT4=&m5|AX}`fMwb`F`J-AkU0Ems>d`uxIf+MOvJ=p zB?!Qu)#yDUj!~2aq@?LrN~!2eKzFdej44p9l}TZYbWk-857RBF({*-;?W-#y=lxvw znBEF}Q;D6v3ibbC;lZD9KgreG^X{!0@bEdG`10>-mu}hGfptu< z%Dx>p1M=O)*`UJQ(Ea6Tyan-XgQ}8j*t~NK@Hf5>UT^mUQ0UA9Fglff4GoXV6|(4n2T?xq^U!d<*{rgMyOAiG4iZ)M^W z-M55*l`_`tdnmm~-0GJV>(B4t?KBdv+Y{SZh19G@7UNzlx)aTL{Mv=TGRpR8%%i1% z00qhiVGKe8W>+lqfKj@%IsR< zRCNm&^FOcYtzhN;r043n7`er~#ffzFPTfp_R-FjR}qgnw#uB>de2`sJiU`iz! zmc-*k#%u-Bs6yb!y$oKMMbsER0j*d$m^o(QkaAI(C}2kG-IAkFB2l5}qv~k57dkd9 zf%o=+35!FS=DH^CN0jWEZ;wBDDt_p4t$>T`==Y7gr@@o+*XOynaTjG+GhfxEz?Mc& zHreJbf92@2ouzykuGnm5Dv3!NBc?LsXy|Yp%l`hL%0}F{(m(?T7lPWusA(mDFHCct}dT1gfOuZad_JJ12--3A@a5b&GP)22iCjevl!GV`xOtE)PC7 z)2d(0!_0Nl*AK3M&JWU?q0-$?XPE}ahq4aA(q|WDpcRHCQ|(o2nJVpSAA}HvvHqxl z{ylGBBuX3VenC**wn>e$7yazxtSWB|07<)Mf6UIbU$u^Hep>go3C_>Og?_@AyCmIcwFGz+Rs(;fbLhBcv?LU;aMw}m0?vz?~@<>)TfJ!rp zmN#*UJsiSH0VG4PCt)McA|Es?Z3r!0A&uKMrPvr$kZ^u%2<;j}?=3nnJy_bQy;q&W zF|MBh5}T^B7*adm%ys-9F$8ic>gQ)eg9$|$+JE2c8h^oO)ny5s|lkH9_PGW|-(ws$71%^HCj%=t3WZ40*l5P|$=vuauT(=o$p})Q@8%>JR z5MZU_q+2&zXde!n;+7^;Dsp}7n(U_oy~=>@)8pUdQuvn1V8STepQ^c901_~AMvA0O zD@j^05d=D|l|n1;8-`UW&znHVJT-uNVH`egyj&L zO{Dp}H~#)NHzWU2fuRjmoV~ce;r&cJ>arHRsE2g2L51=2`@4}R(V`48kc$ir*H96l z57V-YMB!W-JNnAiH`Dw8#JK$t(|=-S^p&vF5ah$pxT(s!xe!~jkLq1Ntc@?KM=~7^ zQ<|_I?V>gCp=dK%hmFHsp{C7^QQOTowC`I!&^0ZEI1YEZl7f#3?&AsktwCBuz#K!+ z%9ChvdC1OdZ!N^}g49T_dog>5=GJ*wMbvS<#?Kx(x=j_?3pKJ>s$rufpj+e29wBNFvzMO7rGe&igI1IN;hEnJu8SuRZfX?qMin)m zButriVW>i-W~@srHdA|b2e zxn<@aU|{8!%eN&5fDgC?Yl~*M7YUjNI_aH}S)w$q?x2|LM1wN4E~EOqGFNsKT4%9Z z>ue-t z)UMf!N4y<=HRZY-+b3#pGl4M~)Fx>?<{~wbR&N6fIsBOK&ZU)4>mJLfM?Rz2@f$28 zCo~GJ>O!rQj9^f6=^*=knABmC(iF7T)*4t4S*9$_ZY2 zA+|#(oEW|UVsQ2==6osEenl6>=fw&7|FwjHL z1@-1Nqn>FVRb7|BA4K>HsYx`2mJ=sZ<1yWXR7S_5_44ecawv>x6ePcv;&&EGVyj15 zNDbMN?vWBm(GKuLYRKi8fWIM^k+c)VTxGhS*GZxQl#xR23A&ALWv7??xlFi(C{Obj z?;K?XRwjwTw-DJiZ3#?#>mtfFv-@cDc z>o4^X+;L4<-5WI@#OgOtX#QLIw7Y!}5JBum{p|{DJsv2eH7+&xWl)tUMpG+HLs-rn z234JnHGIS-qCH^cl+J1lhBEMb)Xoz-bevL-)I>Wtvwo zTS>g&nNLB(gdx}4!MXO9uV2&w`zghB0Cs&pe5=1H^tTGLwm~{zOXSb8(XWo5{3I?i zQp8;Iyvg-Ywy-Nk89Ui{MieGF%Hz0zVJVp{(}BwFx4)I+z2ml)M75(j{yd&5HJp)e z4^o%?XMYLe+$riIC1DYhT_aLC@P0}rsvGdYBrOb#&ubO7&USH$;I6}4sW`DXsd*Od zv&+zl@f{8sK?M6+rtN`2mfP!*mUcQ*PI36Hh{xa_?{-6z9|r&BU^`pG5R6ZHbb`R6XXw_5Mz5j3iVbQ( zVN;fl*N$$^>~5|ZHga@wY?2jT#kVYu7u&;tqy*ROQ*#RSk%hL0_*Rx_l}XN7#mm;CjhiYyi&)M%&_>lzV7c-DA6CnM-TX*{jX+@U7C<6$|sMDDMMc*K+hcKv8{M4m={Ibcb zerfH{A@EfTz@KNQW0)~ieBRJ2%1Bv89>+ff=w6;rkt*M|jSn%^kr83okA6}0D{$OS zeVS05P4}*aT+TvHe5ep$*yIOLKCJ^k^cyrKW&8)~QBp~Ra91Q=0{LSA1S;XfM)cX+ zSi?jO7Mp-aGLLm_LKI#~DP;V4!t!a%K^$Y#=m-ZBn&3U11pJ7fLd>a+DVrw0X`p(* zN@CjE(2QEyH3n^!FAI;Tk*}nL7$DKaU`Z*CL~NM2T^6JEw$cX3{FAS9h-Yi3TD=J4 zrYkl%%CAPB&*Zn?!5pt-ye9bFmw92~l+D%a7G(gmZT)CwZpW(KuqRXt#7t2Qn`Xb5 zCIpA14)FGv=wY@LdW0!KsI{Eq`>)0rgY;Y9j5G@5HxJm3hG2P z(8BB|J{f7N$jwXdQz7lS;34=LQB0YTS)6LWwU@J+GflF__lIsy2rZ7PWdB(o^q=*x zRpcKPlo?tD*(nmZb`bH(8Hg-2gJnQK%c%Il*^{^Z%NaVn)ILC$!`rQ$$QP44DbEyq z%8k!Qu=f`OD}eorCHGUM0&9v%T{B}tg4&1I?2zK*GFOt%DWov`c_!uGHOZGdWe}#6 zQS}c=DQTH7a8%RQHb!*}UWpUhZPVcIKhTx#WIBgs+~?A!!q<=5A$5H4B`+I*{b3TL zo9c?N^2yPv1X_p9s&cYyA~yuCp8lzqKm?}PMDHbFeaGrh(dmg|hGP_20yo(?n7w}> z(DZjK;*jxm^dd5jrycp92!VgsfYQ13eTu887c5@$*c_aOc@yCP`+LhCf?IPP zL9~-+t+r3JeYt!+3il&OeCxjy>_rG5UGY4)T?o|k z4|w+z^kSMbdHfFcj1`XJWwj7|ca8X!d7c5{E9msg7D~s+26TY{z{=LNJag=D`xWYq zX!2Z+j#U+7dl+o}uD^m%i7r4x1jB;5#zl86JmFlOYT0CitI zM#2|Po4|~q%hgi)Cf7#VH9}%s_msQqFn)7$zH_W#Rfn-C6X@`#wrNZ{6IDweW}aJ5 zhPB^VM<}is1NMDsy_e?*>AH+)gzr zFz>8akF-qqa4=MZxV|e_O-6)1E1)Qa?dw$KW33Ye_|T^XK*JUSdZN?B&YUBd=JA*s zhQmZa4=h~v8OIBAKlX>=Eh5P0tNvg^W+3{Y0l_;m;sj(5JmSbjNrJ?$wLO(5`y- zHICfk7QNs!gDJN74edcgk`0p&-BY_EVPri3xsGFe?&uk?f*_4#A=N-HdSx)0$eZ|1 z1Uv6t?9gRie8m;piL@Xx8H7d%hbqsBQ%JfJCu9`>IIpenUxA21rjqKS7j`g^Ow6Kr z$xIQ#U?ok4l;2jYIP{o7f3D{6_@$tK_7ZOkk$-N3A_t~_|6>J<3f;$xMA~C}wHu#r z+u-xn?PKyf0<@F16mxsMvBtV{@bwG7u4J3tNdBW5q!KdxMpWKQ!-zXjgO6EJKLUR1 zj)9dAQ0K9YU1!MX$OBrHdJkq4*9)Qx-g0lUd{L9356;jUD(fEOs}q@HAK$NsjfOhu zJTXAwaJ zumwwCT>r=6W30Wf5XN5Z?d5LQ*y*cnupNv~JSALm=^=i0wt86=vUz7~23>95@Y;}r zcnG$Xt%s}i;Nd0@(Wv)61fs*?GT`44e)2b&r>&wbF~qVE(!>`pXjGIFyOb65MUJ6_ zj0)~5V>6PWNY02DS0EHg;P=aV%VrBEz{<5)Vt?E84Rom}#u#ASP^yAZxgBNyB#jH_TEi#1-{|P*G^=o&p zn0n?_WpmhsPNx2^QMz@(lSOJP5N{cYn1Jt(fzmcPtFVL{+=Pf8PE_oW8`2jtV1kAb zhCu+YN{YHIi&i{4QIRZVHw?|1`IN(|;5V2eCV3lmSa#K!+b^|h`OrC>3vKaqI8JrF zpl1;TG%w%%9qvpQZbv5s;7}7i)l|k&Ap>ITb7ap{Fqj2#AcrKx73mmrPrcA$_H!HTRCN~Z&_t`X zGJ_Uj6Jd^(uLT7ACOEr^tklO=>(>tZ_062qRD?pK~HC&D!cQSn)1vnP5UiCY&Wv~7xG0*fW2|=7D zyr@hx?$K0KBfC(J`lG72ly83TP`WUflN1~p&P~{9-${8I2C7cfmkA@240DJ{IjSbG zPR*}%gtWz0I&9F50}`>UypE6Fz)1A;3t=OFdqb0fDz_3aOlUIB)PY z?CD2>WU`+3aFt~ARFBvvR*?+o?qDg`y>9tz&SaT2-gA8fVuPf);bL#>AoJuXGbA4( ztv?p^F=Lg}l-UUUl}>frr@3FnJ+YZ0j}UP;JImQh&}Ihk(iG# zwlQB!8EDBU_a!{pKhmt=FXJ|MLN|YJL!s1}37zt%K9LbWp$V zJ`!+p1_o#ob!T4eH8z#F)1`ZOWVSLHR>QP)=A1uP= z>7@zYbg3T&5P4P0Ca7##&8T7#Jggzy;3h+@zgl^&HdQO~jicH07Zi3;{u%hn-|`ih z_f%n}2dG7bWGfk@GAWg9y7q5oSj}o`X1+U`CTg?lQKdesGFpT=H!-M$a;GR$LtpDx zQtyvX07}+I#BCmGr<&SpV~Rj?zyAC*blWFpclIxhxk z++t1u1%yRE?u1;E`l@56u`~_L`B(o_c?!jp=fxE}FO&wu6xV{~|QxC?4UuT^Ax4g@I#bSIhaJ0yjzEt}x_ z82k?&18z;)L1BQt}>FMbkDm*&=$3c?7&u6Am z!_!#6>}^lt4C*0K-7B<8&MvnjzMMCcpgIOVFidi(OF74EP<*n>-GzwYNHoK1pC2Te z7juN3WOXddW{KTgJGp_*S=(nvW~}qDc$gpGdO!Y)Pk;gbt6!zoJhc4fUt7u|C3xLW zox~X@AqPaJcY`jq=7}GMHth_rfh$_Rwx`*ES=bfiP_UGBtevD(S*~H!gh~)`X|X}N ziaQ+j#1dn)KCW^V9PL2~de*zl_{CtKnx7JXlBm<5k8+%QfXJS>ZI_!IesXC)_-UG^ zhd%Y4S{cmLj~Yv8NoSY~gd<_#OjAjS)HqOa(6eBxq_D*O`KvF-&N&a`aw6t2dh`hZ z8x3vDS!EuxB5<0S>K6w1Z54Srh6M6(U%3+_NaxlY>%o)dkKWhDh4l{G6VoNGvbXb; zHN(An36dmQ5Op`#wf1aLSY0Mv#X4;MSl|AOM8IOT%q#_2rGJxYadBUbbKO7i8Ej^V zfUmt+@X{Ea{sRx113r+5WufQYWMBUPF>H*sq@Cj2#Z9pTD(oZJ2(1?rhRyy~omZfh zX7UYuw;<~7oSu>1eZ#MamNQfFg&gz=SHC**|3>8YQVkfA-@YX>2Rma}P*{3Pk;46) zwpScrgIB?`Lf-k@Ad}e9iPi$sU1Odxn+-Fiepe zJ4ez4b0N`T9PV!P?ca|Z<{8FIULSJv?b+XEM4cimzGtpXs?Y;D|2dIQA+S~0LzX-C z%dIN6mcnQKCBB9%vO6X*uZ2aMDj+F@wa^w(RheTpSH_`oM!H0cUCjbHJwI@AxjQ|i z+4|-2=kUgbW>3pON7wD4N!<;jwG6gx<*!pI*VN5UfTOD z5gX?E(uFh%hG>-ierWnDbbRb~AZg|+&3?FGU}R|NjgQOmI?V8sP0lub`o zZv!3Qp`YNKzDBs1Z3o^oV%TOif}7*|5FuixW=_-z{^5Pvf8(s>>XuAU{e2Yvui_wb z&C-{{+osd%XY!%8|G(eEiX7IirEPNaXOEo4``!O1Q4yNspZw6bg3KHq1cVWU0L01I z#ns#_Mc)@6_*e;n_J8Bk9H#3kZZKm6{(ZsBHSFM58kJtBqM^m>ltMSpVoQ9&dT}A( zL*tdvqj`ID)v@|TQ>Sn;hDu68?Zu&b5JesS$EKpfoC8tx{*$S045WVI~5S= zTDI21(M=ADG1bB11#x^1)R%or6 zo4I!^-tZ7c3akly(j@}sp>A~Y!!t#F6?^zMg45+jgvBHiC8A)`0=bM*E1Z&*=(Jg+ zF(u?}_2aX+Yn%G~HM6m}IXnm#BewJ||4rJZCrvk}o7gukRL%G1=Rm~-S{z)BOC+@7 zrG_drb(~(G>TcJi1LP^yc0i`%t~Vg1C>&!_lZyTJgEl?u)1{r{G)Y=z$M;R_+tOB$ zGX$ur96&@TcxUSmd&f)&u+up1#g*Zd#f**dC7aB0x=7N@(bjjp7mN?chLWYk(SK^(no$^4 zfl0rZX%-0h@xFXwDDT#Yz4&N+>Wfg?a?=~aOO3mRq;^qAnPNfd6DJPIKnF-#Y5RV3^mwwt1RsZ4AKvC!lV$xl zw_x8eIEaYu?Y^nZ&2t4-=#&^2LL|tbMKE52%zVC>v#yD#R{*zWgJS?X5Xm zlH{Mz9!#_jrm{G*IS+=2k<&zw3#^Oh#-|LuSSi?8_0Cv+eSEAi-A^Mlr`sr`&5`}G zW_`=p9^NF#mB~l-I`{CjG7o-UUgi}cA|}R8m;{7b%brU}gNO;K(_O5uLpKMeu~371ld&N+@zW9vTBCox8KlK?r`m z&c-q60xO7B=vzMPi$hy68J|wpFW3!8P~O7H+Ub}~Gvhyj&;W0Kh&<}ElgqV7TvlOS zau%8^kidwC0A6;ptyvhZpdijG!!ARW4!(k=o4VZLl7JLp#9jHACP6>i5c*N_APd0%jTyow;fn99H9bR`u8;?+wmgWKr=7Q&xK#xTaN zAiA>95BlzUy7x}s-%% zdzBYBN&(Ja7Fs}|^9}fl2G@rq&fZit_5DW1hcYgU_x#%mp~VmY%zkD27k`>>1{7%m z6LyMmf}aM61)1;>6$c>cGe8yQMl<=}GIK?54!O-n0|H7fpogBCgs)}ZcAuh{#Wy&3 zy%iwYBs>Pk57)bfKYG2--vIolQAX|#a8jMkCBJ15tAEBz4L<*f^BXMwA|b@Lf7tvu zFB`DlWKr$SehY8r17aVS0}MxRoA*~+owDWFW~GB?7zu8;R-aao^gss9^0q&q|L5Vo zf;$-^K?DJbsR!XK(D^<^pfRhApQn zAXsrO1%b-rOd@4+Me*~pwH3g0m{L{oICN^l6SSg8wLtwh2khbjX@wV{%;HG1ciyC^f2KanmsC|MPc|Ej3!_?*)7kPE0S^&(MmRYQe zyuB%^R-S7`qw^BZmfT12ekir4WDVr(sCq}=r`*>zTr9Cff#=0-o&(SY=}WQi&M4me z*`f?3#m7qiq)fK=gsxBvz8^BhZDt-&90U*zE7Tg~Z27E~;LF?n^i(pZ{FgDv5<-U2 z=;hDyD>s`d6iCYnx$-T$$G4Y0pBgpiSlLgUwDX|PD}Q-ggPviGo-_O0-J4&Bmtibv ze6>4pI}8x)B+7$I!Ur4*Z*-s4?ueEPY7E|M!92}a9as#q!isdWGP}bv^TkM1c~XI5 zo6=m~*kJ`fTOJsBXrHaAzftgI$q}+Cm0;vBy@prsM@+p@z z#rfk;DDP<6i40Jh3mVE2ZYYgLvek(l+wigf8J}1EVOJ{=W{bfzFE$UC7ZWDfuyg%w z;_6`5a&8>;a1ixyBjzJU#?O*OlqR8A7suw~M8;2%lq=>%6?G$rw)=}>fK@uwG8tx; z0yWo~jBjDrt0%9OH@sH=s_9zzqKCNgTjR^0;nppl`5Um~fq+sFe0~`OdX97J(X3Z! z+sd>+VLO<;rGRjLL*kKEn2{ifzBO2GGmrRCp%tOo%)7jZtywr(N%mfyzp39qQ^)wT zF1BgVdR=|wL^X~oz;g`?mXoIry^R5rlA^#VJyFL>GI81S&P?~7k;?qa&BJpLftdUn z+9M*1&kAs6tXsWI%?Y*BMh>y1PGRX2s!FQt2)16Bw>wxBku<8-T}5L|y}-YE-T|Fv zfLyG+j=GMViM^?j`S@!TRD699#K8i!weh7&QE)*lo>cw-XI?GdnC?m8K%ssYbmHTp z4mx(FB&;>xg8h`Qk9%$KFQL2*jZYvK6~2wKFBc%`bki}D21P#1Fq0f%%-!FN?S#ctAya4>7es00kZ5({{_p4Qq9e3wo@fGF`?0>lI6G{90AWBd zACOz^>zI+W=}JbrS!c}Hp^XSj6zcbL6D03l?)vaI+y4ek_v`2@vCt6vfMb< z!!P+@#6*(eW4a>WCjemDnMduXQEaW|T23L!en;(L^s>LBr&4NRUAKWOi!~%yU39 zz~}ksy<7X^?Q@;gTGQAT@Np{r#3f>tmpWhPvlysgIcSE!YO!W3pUO-U^>S}TlKr_` zl6P&`z8zZSbb423aeOnK!vdSQN~vu!y-)ZMVf8u6hAwt8#q5`qY;x+JHf@2^_Db#Y z?)K=t8hKvMYPqs7i+V}n`d5tVeGhPsnP&Buhp9lV+Xo}f0kjKbkp41x8+(C6X=szE z_49akKx%W?Q>gh3 z9?I|>2kIifN8aiVT)#If9d^2xey;_{#*wO0Z^JXcbw~k!L%2|x`3q8*^9vT=2OH3a)nXZBuBAZCI^KhY^t=st^WxAL4dR!hh0HPSDG-Q5) zu!J_ybji}*D1$b_+RUM8G!BpmCqEQBGXNUkf)7cg!8Y!MjKC|`1nCSK2hQ{8kNI0m zf1hr7jh!gTw?ptAPw`q%7e|U!lDqk}I5;1jkCl_HXz{6){17pXP|_xR&Vx>gp7wWf z>OPP#Voho1Q7n-(u0MG+>EoA+qb6Ib)bE@3T*SAbyS{JAQe7sBZCya`z*RbiS^b+p z@QJLT**erl(=vY$oOCC3NE2E#Q$0VUyF+@d0)jZ`Q)@#!@SK*rbe7|o;qYRd$<<6G zb@5`Xm>zf%)dJ4&k*o<5*XPPas&i{nB=o>v7k@^gfNQJB6811G_!tq#b+d4H=cFkU z4QtVaS0hrQ_>4%X+zG&M2c(ASUJCsNVW>(vdzlFA;WSQC#*F2rkWnFaPvx!=k2RT! zrku+QyE%a-@K;~a`Hg-iV~6>NY%v`FiJe~#1qgZgsj5&lkDx&}yJqPb#qN-uQuQUm zO>5Bwt7MEANgGCghm{O^rqm^js!R952nGY4q|7RC{YM)#VV(di>3_dIqF0r?pRAcM zR9T@(e@l79*jS@-H(On72+Di!kwgJ|&{$xv;$vVzB>DgyO4x^#)?~U}Cgz6{k)bF~ zh*L&)S*O^pM?fw;aVQINZG2(RII=G4OW8Hdb6+rh>QEz1C{XYNF~UcpM;lKeJoQv5 z_ydL(C%K=5wl)Fa>M^F{n}M7ce`&UDS<|t!KPN~jIuwtFVU`}S0GViG6hC0lDUb91 z9zv4aNaX6M!{JgZN4d1&wnufKjz(IxJ@0mNsz=f-aO`hxhp%9aqU~8i2YfxgV}*dn zM9>+E8%#w*5@+;ilLmc}HI33>4pZ3l^~d|o_p=oCkA47*Mfd8|e()PyfOPluZ}fYy zkhp0+^!rd}5l2fVhx8D&v19mNy#(1Rm~{0p>DqKHNZq~ROVSJ%4U(hRGE)`QMGnl1 z;NIeG{=QhgDLSJ+b+^Xo;54b^w*t_J$6|Q?y`(t${{+{AOnqWD4+;t zp20Z9gf0*_g5#kToI#4YeHqEShW{~w&oz2K_-f}ErOeL??Gk8zwifjqA(n&=9bSp?GJ&0BsTp^j3GGl3JuTt|i>@%L2a z(d5(wN+X^Vhs(HGMi)XdP#}g(&@dpAQ?_V9OKrR=F8IWn)0H*krMuJJ^Ol7J4e*m z`hAOmbKS8YhHl`j%}+s6{7R+ye!s12j0N~|h2#b>+Hps{VM^D|(Jm=@X8=C8wWV{4 znxwC{?CD&UJT$FU1MZj3L|9E1Yh&iHG;>VkLp%(dkJNRFJw(AP71+RcBPU>)`|SBt zB>ftHc4V8}?tswLRExWYgo3IX8?G^_s7*9|o3qc+koGTmWSax~b=Ws=83eyO zXWzT1?DunVQtWJN)1|tFB>{0-KcOiws(5Uz9pVzMKXdMaHSAsc4dR05zwWZhJkUHH zW<8d4Aut}f_uAQz6rKz+P|(kxzDc}GGxvo+<&7*6nbl4vP8o9KWnM)K=zK^*uhTIkhr#=TqMCA za;ZFtO2pg29d>T{L;<9M(NeM;Lhe`otQV0exP?h09#E~nq@`?{FaNdeYq{vCEr(?a z&vEd{v$-3D)!ZoVG^ zj}<)E8=QAgQyWXv!xxpiC1#ieRvvIH!4J9j^Syk}FSpsCngd*cWV(QTA>xCR3Bk!k zW5a7;T2~DwB9GPR1qRJb*jpIq648UQXDuT-gOvOXZIgds=quf)jN~#xD9&nCh$^td z75J1`yAeRJBre@)l&NLeC5>tKWFlv%VDJ$I^iIng$DqHnXN7=aa ziQ<}3U;+Np&#;u6E$W4v;A~MRhJ0|6q1eehC}?9r=vsRC>4(0V@?)L`kgDnSbb_(- z-m_w?4yfkO{4$ANFg>Hlz+|%5I|!5xkf~S_f9>}D4n`1d`gKS25e}Vn>Sm)dSWbCr z!s26ov2YPs&Bu?9=F57ZXIdlwi^-E_@ z`@^Z*#ueTRHSAeHmgpV5C&BKBO_tZOa=(=Ug~*0mK2~&Sl-i!F+RZ@}td&EsVf}j3%61m-l`I$d&D4HgR-od@Yb^PJ z&N_lV1KxHwWbLc7BN^DU3KUuGA!s6tNVuC3^#QPA#__rdT>r5HN9#tQ_B+q#kugSJoZTonISY_M>{<-#=y6r_PKOz@Nv zyYaC?p9N~US}otbZvS?B-nX@VW1@6_nJn);!X!e)O3=?$ai>T+^7YDA>=ZwFW<76@ zaP59DS9~flpBHU7%`6WjqXulOC52!}(|HJu!EImR@g+lEQ4#*#ZA|ue;EyCrPsl_Z zuR@NOYq+Es;oKiuL%pZ#n6UnI#j)d}rlmP+%sO!4$d*1vc6I3bXtilh0BA34)6k@k zcXd^EZ$3>;^{#*tFrB}I$1*py>_hH8UhF+p&D!(U5g6G zF+*3U*-XpMIHMM(n?Nbhp3kDo;B|lp+irI|=3;~qMAZJ2!d*2k-H@A}R`k2k&{YoN z_ZvrBl7dx7?l04x9nM%^IY-V-SI?quaM3{{YCz5Gs46vb`#l7hl74j8Gg{RD`pk9X z*Pnm42BlAO1|_3CUI5$#uVS7ApEf4Ew>33v8=gHOtLr;U4^WB58%+`kV)hgLQ(8?! z4<|HF%>D_>qg^&WIycLufxDerju&6=?J`cDLRKJ~WiP45O7D2zyP?Q}VaWc|w-=HA zu;%z@dd~rUxtHga{3e%M+zQXLcc6k{`|_=bD|{b>ZQ^tcnhdaD%Kn2u?(Y0D(UD2@ zcJx6qRczd$@mbdu9`f2CYQACA9%?CUfB5HvLTL-mYjisw^XR`XxnrFxdrSh}fAi5EFm zE`W@{N$wPS4rE_mb$oSLi*NhYuH}@&_3Z6VnLjYo2DzdwiTSuNQvogEeaR@;6AMp* zI0iiwiGV}Gzaez)=iB#k%Hor6Ak+{z5`XkQzxh@~9wF8T@611=EitSuG;!t`?5Boz zf+4R?dMMVWpXm2XhzOYno2{8W#rATBriF|ep?d?1-eL~r2^FjHSbT}2yz2H>Cc)lb zb1M62scAespaR zWRFcNs=q`Y3CTGbMsYki?P_smT_h;44&+sdo#Y_23w;{UBd9P9ta&=z8d$zWBQqM0 z%7Eb{#=r13LKHaFzlwq*nSrn$Xp7i~A8WBU7RJBgzbSb8Gn$j8Mc-*|k-2LT0ae1- zPIyI!JsMvFdHi~c$JNZV@KV3V2=@wEf;}@`hIhn(34YqZg40S-R*|HMLQK)@M1P4S z4p$y0MlHcrHQ+}15wt+e2eQRLg57&;X#j(sR0z7_M@J!S`3;T;c79mUXQQ0(<(eO9 z^)WX7Ys@&+HKs~bzhG;OWLS)`62Rf{XgYH6OsDcucia9zl)SnSJeAauHcd(lfpVpo zCsO?jI*NYZC;mRd!lvG?PmMsxN#|a^YN_6ptGC8znk}-f*Su<|sEP+l>-|D%ZYTWx%06&!PAasPU-6fbdgrw7){0@R?MMcydTskVxs&Gy@`M!uf zzdfCFbKv4&@8W3XN3`wIjZpwg*c~+6AQUvhnF$xnBOpZ~Q~X9;&$M9vwrJFdP|498 zTC;x~%gY1nJ^u9Cu4Hh{CB!vt#@6`yZ#D%9hMhRXpWTZa$dq0kV6v2O7arLEix${C zz6nYR0{I_2VL9Y@hf~V;&i@tu`Ptz_0bsEr_+Eeg8PG`tZcN@NSxPcOFN*?op6hW5 z-$M0*Az7kys4dj_d_0tBN+fg%ggr>GiEy_IX3PmL3{I&~4?>+$Gkz!)eQOEfb0kX4 zj`YyQvzY?tHo{r-R}twiEs?%<@M1wRY0UN&+0tB(NK!7)JJa$;3?4tM>yCUc2BZZd z4iSI6&tG!q^hIVUWYb0s#KlyVC zdtYGkcI(4{!V=McCk#!T*HO8%QyZ&;oyeb>-VW_!;a%=WZv$G$Lw3J~G$~884i^>6 znaZ&g1@}=_^jnf_tvZr^Zyl`#1GYu(bR`697*l&A`R}v7ii{)~^5|z^#K7YDwB!i( znIs&?7^onn=|=-t&{(0)*eg)r*OJ)=Mg3UXV|h+&O!0UDUM*kV=vU8;vy@et`AKhR z>GV4K3^3hE7nf=Ud{8wV^3Ltj+c)VfPL))98GRR<10){JH@d(W+Es{2060t~YO??{ zWp3vOG$t6`Nx3Rq!HR0kPS)@9ZE&%ycQo__0YLVOlcw2AgnZUDIcinT_n+1q_wiLg z8lh9-2v-o$uA!e)PN{|h0CIA*ID>RK0#M0Ry}(A~d@UnXqe^s*a=nby_5+P*47w@af6n(|N6B`9CAvUEN@)y!B zS<3-vZ{zq=oN_J0*7vH**^QxPN)N{glI z^%*T77G+fMR>S8porK31#@v7++WK(iW8DF{m7 zPLp(dXXI~@8cQTHEop?@hQ?fdwW&QSKfb?}l!WMCBi<2?&Skj1Ky{w;TQH^+y0Tt> zJ-$z0FShH@FO|*rQw3$Xnm=8YtlL&=KRq16&FP3`q2gr&!VgH>@M1*q-ae;ucy+yt zRn>i#$sl&W@VdY5GCD)RKY7H*BdLTsZ@xm9-a~wR4GO81rU9dsxG8@LGq@w`#Lud; zq0p#%gkL1I^>H_S=FhdKb?tXN!`j2b?RjeV3Ek0Q_37-wo&$Ql`M3kU=+H$wW5nCs zD9>P>Jy>S}u6D?upYPWNTYsmASZB=)g2S>*x)t~^`L?F+vP?LqoxL`7Jxe4^oPOP} zyZ4}eQSZKrTYv|EtAg9X3SQHX_A93sU61P`b4S{ggbA)mBVdtC*|Cizh}uQT9mPvz zu0l^zd8c_H&)nymrp7Y`ZNNFpFBq-{()WN|)PL{;Vulfnj_&b~@Oj+Sg3!PGVW$h; zVjgz;8A2!m7`*vfK^60$U;MEpKPi>V6;jH-t_9Dy=x6sjV*~uWUe^kykgbFH|E({G zD+VBix{SA*xfS^K#vlOwPU@gLnG|601_>#ZYXP}Wx*O|Bl722mIYU$K@9U%zu zYl9C0kPAe`svsN$IjamK)kFxxq@S+fE2xWzIU_4ChTHH4VRHFX2PyfqpMNnu8|&xo ziKi#VYjmwyB7D(_=lxYSh%-uynYs>-pHi_ondXH zx%)6JpjIY$2UEcYkXcCTsEZkIyQ zX}83D?j8_`KQ4Znp`=nQe32Spi*o-kN=aZvI_pX|?=%?YzZ_pJ@S_E|1C$R@6Ec9zYj!Gj*LNJ2> zImD-_@hOd+9{DD+fU!PVpyv$4raz=T;!g<=3qNcFeGv|F3`qGjO&t33=jzM z({3=$F|~jXAv~$G7Es8en$p821+0`m154!HGAF9z8<5V>{#ty#6pLHSe}i?}hDPZy z1ayBmXAm$My$xOZQqa-ptO^>%kYM|P4<7q2u&!~Snd3P7hDYD z+Ilez(y}na%3pN9u2S<*PD_gq7V}jQBAv{ZsQ<}gV9Ru;;;2j}D!kNhQ!dr{T{Y%T zuIG7M9uUb2^8{L$a2*EcrP@;p&XD;kUWGQP$pLT=6w9aKHW+_zy(?)ybwOh{*dGhi zXwcr!DGmGuh1*jrO&v-l2O{_laE!!+;c`LXrgdW_EvHbo+*N{%h=c7#D1dRl0Cm<0 zYI3*{pIGOB&Vj68xZQFcE-3s5_TDGmxKSuGD7}Sc)p8%%vJ=q4I&peaMMBzg(K2w{ zD@`(FW$FNhEuYKu;g(Jr~;Bxl9NJ! z4E~EiFE2f+ZC>H844f{ZPa6DsGPbaBob@$(8C+=+%$u}A&VG)PN*kywsdifiA*n}( z(?oAP73_jdL3B71sW`T?GeW`v-!uueV3>zRHsbf%Kf*wLZL(%{Z z%QYGcgrdO)7MVA-HaBYq2sCcM86bJ^_?@Q;a-lHTbOcubt++&2gkNGHF~o*s4}snS z7TVgB$xg)794(pmvXpnc+@IKvd{FsseEnVg%|7-hV(Z^(*2KGM=4zO5j8L|e<0PW% zT)>Q)=3!+n0!4VK;vffw%@AmL zfF38}djRSdnTV*RH#*?X_SX&b_^qP7tPnlY!Od$_nc0^+vfqJV>n5I3A_`)X9%8l| zeB3XIzMFB8O%}vIV!f@UO8Nt>Svlc-VurT5V#s+kp|PrACmMPTy(y55z7;BtUBxYg136t635+x6!5-9?I)xTOk0_ikQm-6(>gXyy_*)B$QS5wb$a4+LR z9tCNiuPDzd)>hPt_&BX0VGtb6lr|eLw#Lyze(}f4}BPcPpNU0h&CL)JG?2Kr>(K`f0!q-8k?u z%x2g40`lCWsOK`-^+|-69QgCy^RS8zFSUMvNMq;q_Q2oA z)#p+2mR@y-ZYaY{G^~&{TjJHmp(j#Sg|k}X(J*IYKTA_?jCf2eY63RcbFOxaJvjM+ z#|DKQV0+9vY85vg_79`l+lm2%iV2ee6e4OMJO`-)`XA|0eS&JO?9F(NCJ@-Hn=JyEXSd$6RW@yNcnOcK(XSh=E|nQmJo}&6R!`&ybAL7 zxGrQ%Gf90-@CWd3-bhwl1FqcNG?d6e`rBa8>cOL9+wcv`}Icnmvv0_`>tpD5RaTgdF z0N31ie^&s18Zxk8z6wy#Ll0aX#zzPWv@r0~R@X>(u*3nVfc~h7uV%RSn<(ttlUlJ3 zFQ<@Au`rdPm=lyieov6NtAnfuf!vIm;5kqTq>gxnqH{w*iQ_!=1wUcsjTjJ3hl3mu z5qZ}29GMw=GN_?`9G&FO=Pm}}J{5!j5+17w@tEMTuJ;}ExtLWnB^&EOk)!pE;RY&- zLuQSnG-yL|;P||s)zKU^N^J^Pj~}sm5lNpyDk>_fK;{2zM*mT9+%`e^wf;-$_0T~e zNmgM>DLzXAN_RIcy2Cx5O`Vg_MP}7Ob1F4NH+&eyvY>HZ!x7<&cF?`PqSR`{yUS&k&bx@fjwXO z9^C?@-@1fGiMEnhY%Zo9`*lWF-10ghFGC>Bn9sa2-;O>LXNG?L%cBUhLhU``L6ZKT zHnpYr{);IrkD&?00-7Y4_zFl&&K=rWTETl6J%knP@st#V@+aMzQ1)^^#_ z%cH2p(pPleXHqbusWKSv%Xi@XC3yb-&#R zX8C!jeS1y6T}b(rbc&w!Xgcg@Z4td~1`oJ2ORXMp<@PT}zFP#zYy;kQ2C46CEV76H zSIxZQ9Fjr9ywcPtx$JQPXftV)W+kVtaqv3N5LhP9iqj3CE)+ zt4p8JP0sw&vBTM2x!kK1*%~faN~YSn-;wG&54+p2EB;(nNqSg|WB<)@@4*Ze38yDd zYtTAF_&Yc<0A9bwo8b`;hy3T#ZDjRp(d?hd@@E@d(O zi1^nI3nD9os&sQ$#rt6MYgbHftp4ya2k^m=y6G>#A5DOqNoCvG^4a#*0O&Dzjz@%R zV4*!~_ovBfRCwKR&dJFMnJ&nSO~Z1_zW(|=Z{D6wx7zV_FoZw^H+yAA>+XdmcL)v5 z`X)tCB837Elcs6HhIjq#0@us_WykU`JavW)6wwJmN}j7$L8pe27Wm2$onywI6l-6J zeIxejv-At*&I+2b&dKNN4lwwu6~*H8U_DU&04NnjLZEQFBR1b@&aU6Nl+x12R-1Z5 zwO+-~VW24$g)e?#z}VU3oNM{Y+288aZdXlF@Y7}Yin;Qabw2(`Vy}@&0jvF)D=2)f zLOkgdzmp&fWL)C`av}<;lxj;SX)QdNequB!B&O^TznB~cWI*k45dd^@2r)Z%M=rh7 zaJa!YzZ3@7s%ea^Hcct-L~lV-Mg=)}_RXS*@E?epB~HXc14j4+6f?bv+qLGQszegk z!_$w+C?wb7jP!7uW3zHY9g6k?=}NReb7I04Qesxzs7NJSh zrG8+!n*gB@LP1eOHuL15FSH1#5yYJ)63XE$Wmfb07rPbQ|=!KPHThrHUg2? z{oi&iu=WkbFeyBgH~`Eu!D!;jHk?&dI-;qHCFZ2^eD#*c+*w5MipRAMOy+nP(Gu|^ z0mjv$g9|uo;S6!-mOB~ktSwM2s*^O%V97s^8Gt{Hs(c`0%R&mC!i(zds2Tj%$_h&K zbFM`i9Z?>hf=YxU20|@_cOY*>Y}ySky6xi|bdNwYm=bmgWg)ndXxGf1jS&DapVZDg z#mI*=Qu8*ZWsl?59gtGSmz{T%Zu=Z0;d*Zoj$45+rTMbMgExoSpSt#>tzaoFVLqRa zP?Oiu)l=l>gNf12k+&HstCKbxl@{sAFQS#kR>hvxtCVE$LDiD($H z>s^(O%gCCo{o>h>Xfy=q$6`zTBMS+Z+tj9xO4+k}T}kq~v6W>e4=X?`au>5Sbynl+ zPb>Q>ey=G1*XC&g@59EM5zVt}puSk&&-#Jm$=Ih}smRR9?scC7`2MW&WYnnEOV-nv zzPXvK^ttb!Wd$$e>1OL)4ZQ+nQ*YwS9e7evxJFI=~?|9|J0hDxt#dE2obhJ(9PwXy;!rH&VMDuUl~O zycscZw6x>tV#8h`fqP7xZdO@t9@`{is?Aj`yp|ozn=h~&-=4p^8et5 z@10Xs>3(hObiZo4{qvRbQEKd{fGS^MhY0G76`kHGrsLScPx^7^mfoWWpz5RuM z>q~TcHv^)7s5a_*9PfbK7SI?Ll7Dqg*&v-Djy_JxL$Zc1WI?Y=JS-u|3_P~YNb+q@mN zcSq6yH227He4g)n3-v9Rfv9B0?h!3xG*T@#8W|fg&L!2r6E*=OwxR%eeVLZX2n!$R zKBMW@K+4kMRNNNF?^6rZGpF00s&^R~T5gNP3I;Xj7h?yTh1-Vos_7V61Fqz~mh69| z%KpZ0bgOVT?y{3u2who3SqnUad}0*j{0erT;N&6JDVRM?&v;!@Se z{9P2)q;bHD8Cgqn7yTP!=Hz!wUp`|?wY-UO!cv`(E}C0-=qiOT*^PJqnNHv~Iwm*kC2Q0J>GxBauC`t`Gz@jR zmmoz;I-$zk&c{xo(1B6>Qr`eG^ru(+FUD$|^}bp(3nNb7Om=ge&POBf{1( z%jW{?gq5_*CfSh`toU_kk9m50Hdg3(4BbY2zdo1oSc<~dYj2hqo<;L1$l$ZaYkTdw z|81D)gYr2n!@=%q9BU&bzyU8XZi1npDi*y^UP@#)mE;#nYvYly{|D~cm0Fu7%qd!~ zs|%pZr5H}T)rN{CwH(~I9E}S-De}HF?J#X*v_WbW(VQr?^PY}&d|^8{|IGHER_ET? z%sDSs1Z;IWe=7xIny+4+VWwzKXRV3=*bGMEI|-pfz@?9V^!l zu})7*_RnOfHRih-gf%YjOdD0D@dBN%O?0;Z3QJP_iStJid~U@ z35RxaYSlh!LI1$4C93)jLO#i2QjP-fgKLr8^1Sy3?J?HEaQ*9<0o#^tx+jS@{2TzD zyYc5<{Lh+%3>s*WRYDDFb_uA(xQfa|$v%cyFhES{#hf zgL~0WPE5p?0SFWtWSz16337A2cEx;l(1f8c40UDPmpM&fk4|gb%_xr&?<@_+0rT10 zx!&VdRxvX=b_QO192QLC=%%xpOn_ugn6w6u55jh|x0J@`q=#m*=W})%J!M+BoT5Hk zH30Q3;8~^u%vEF2NrT<0dM?tvieZ_@9HUh^oc&+fhHE4j8?SKwqsy9S0iZu-?Da?| zjJ$8JEY0FtC#))O8D%l+(%~kE&E1ed26o(Ks!|0e0g+t|Tq%rbKix4U2~a%nmk=nSoTx=PvLt3B3?(6mq#+tt4}0hTth>-8qNo%&T5W98mfkNDw-=vMlSclFBMDZ}j(9$|6Ma5)NmRI+Sm z;@lUtEOF^RZ&{3B*XFs~0O+vR*wBA>+^@5E+STc{a1t=z?*hx}Uf-$qcWWrpCTB3$ zLY1vBUt@A`r{+e-n(uwM)7~AIeu~01&rj9b{$}&3d$$YWz5{jL{_?&cc#(sb*Sg?g z!H(5LIPj=7-`7tsMJoqmd4%dN1!c&)!uEx0ss%`Tz3|1X;q)W z%%8HL(AtKjzKf~5tmo;eyr46gqf~h#u&|ZI1|c+{x)P6b10U#NoVz<(4nDbMj1g#4 zZ|WR|mh6tfkd%=#O#l(uLADAH6KYI}X>O+Bo%^1% z8=yAqm2wrXdtnfGoq)k`>j<|v{ZU&)re-mNxu8v>M(-kiNoK3p@CzLgMJ$Mli&J*; zB|&=j! zX-rX*K$kL%5s&zkSB0VNI=gyjFm+EtD=!;NEcK$w`dtLaIwe?)p$t&y`!*SbR2Fb|wbHc-{qRl#!5)D6|@8-+acvyet(lNoahjs@Js z)}CaqPTxpw04^>0&b?45V8}*eM>>khb3F{^hy@LoQ4t~~`*Ka2NQ{(DIgna0uh9Zd3`;g;UDhvh`G zC>j}J=4MfeVsXGU90sNh9vx9=e{k_#nt8jZ zwSui~1=M!dSvOy|g0yUMc#ZQbQz=II^XcrM#LGcvs*h(m>I{9Ab(-$3zB#&C-!@8t z16a3MtzM(*nr6~<-z>@;m`x&!G(sxFV|)z|Oxc}UhvCg@{!sFcXgEu3rlo!Pdikvak2l`BMRnMKon z;R2Lp_)-$!rhI8Y6d}7FO;}vw%+g340Py&}jgwT8MQ&6nIdM_bE3fTh%8neLE6{08 z67p7a<3tluHkx>{7@2sE7)ajKW2e9rwXrzOXcfVRu(R{PNcqXqG?}gEDTjLxpAB~b zUDRmdo4}AE77Zhm(7$VcO-Eaeuc2JJbh2GUMGY~FhWw|?85V^xf&`*UE<}T309REy zZ+Qi6$^_=qVrQvw=@Rl~bpmEMl-vGi+)=N!@1V{Hv#AV@GHJw;GLIO>+)RWfqUhH? zaplYn){>iT(jMjt_Mi!MeNwAYL16)ZN;{B-N9Z1UXe|)^dG?M&mL+}59kekkyZDwNY zQj6_L<;5^X)eoqEfGzU;lRs7cJo)w~9M4Oy^T&xz2+J@XP|MRAn&X4L(9MSH+pHol z+I&{-_Fb*%n<(RLsC*kgG*-t6EZYg1x$Bf;#+om|-f2$SlDkf%MULZ{08(N^z>EyU zB6f~pvt_*NZEfXx6LQT-P^@C%gcBgi#(qMG(LpnwcW$p3ZPXSNeFj3|V1J<`ul|2 zQ#Ro`Spbk6B1R9Q<(GZ;WXa^L?|?1{Vozr`McHYFy&@35b3 zbUT9o;;kZ0GYui|a*@N^>9fBTM0wwU zO(H-81I70JTKcxC735*1Wfs$2otakLj^1)+p*1P;wK}{8pUleIGrhn#0Z#j^ghGp2 z@`4aC*H0p-xNPFUUb!(i=p^@{6OGyp7oLZqJvCv>hS%{nt_wEkrXUTN2H#J^Nv_Uo z60rq+esGX6ecP+Ncl0cVPq_2Gi6BC5`Sp@=gsbCTVV0P zx4n~jswQN&Myk|(E1&i-rej^H-3|# zExLKAcqqPaPcNl{rIvx(GtBtILaD-jE6&!nU;DsEkI}p;-PBhga zRde9ijxneX@n&SO(+B!lYMf+r`z79Xedx@|GdTo|Tmk_j+z55F36^DXy(otM?500R zh1!^S43SQ|lPM`4tRizQ`(*%STNF8K=GN=b)o>cDAF`L9m?XY@HA*29QuYrq*QDwIX1`^zSjA( z$%<%s)6c&4t<}$bq}CPKoU4Uf2hHZ^3F@0Mc|QiTtP*>d>>>E! zc{cxz2Hf4;%0wZ0nzThIWYpFLrGuT*CA1u=K7bttoY{-Z?j4*C%kYsy%Zmxtb(5)2 z{Zz-zI5&H9p52+1WL-VAJD)riWL~N{F*iY^h;TlE2t$b7gNY?jKI=M5z!F{UJRKzN zM$4ny5;K@imdTNR)@G&GXS#Fold<=7sfgt6LRz|ssl}U}RMlU328jU3@F6JLs^JX- zQ$W-W2aJj`@q7J5kFR%vzGriaX#^q zWqE6{)~y~Jv&d%B?`4C^X2;#T!VLN?D#R_?j*3C8Cm3ytn<+t86ABfVABQKCOW)cw66jhi?*B7W5B_QukqscrTatY!=&_u0oi+Qnm^&Qoc)Moc*|@e!zQgPQ0#4k;3W zQS2W9Fu1952m+zP7;vxe(K7!pM>U)WZ#H&xqnNqBbAJ3fIDzgE6LwMPM1)9^glZ z`+Eb0)VL79uHoCM5npO&sc042qgj?}S({i~av#NbEOe+^G}F#pA>nAK761={MQ%N^ z@4=lFLeqI~D{b_t=kBaS#s$P~ae2ea*4?tWAn&Q>=?D)CDE)~BcP&K~!wh0q(9Vz3 zpM=g51_oTH%sKAiHlXR|42PrK(}Ll>ug8jN#tWhQ98X`P&@$p5i_~RME4q#n zS`QEw^M-4}_^L9xbOgyZDL}%RGfFonbZB-J^95Ye6^9Zb zn&X_KKAj?ugS%|V8NqEbmQ4u%`Xzmw&d?BS;-vDus_t|F>G#)j zGM_2!tH(Hk5&J;c4nWO#xb|#E?PxLMhN4vt(+?VrI?30}h>k4>!aQnYX|HH_!2Tcb zk+<)UI{p>$k#rWN-E2++%(@e50uqazRLPL`;nL;oA8!W_eP>zyzO?I2aot`NLv6NTI*PBD}_Sy-+&g%mD`ZLg8ACZQ{n+I%7+B{s#qxem7J*6HAy5S)V0Ro64Qg_Kc81ea z9-$J)fVuL}!9Y<;yyC|e~gw)JdQd~-9e9MT+Gh|}mV=hBf~3DNmO zM+OqCf!>H00)Xa&(!?5-Xl4utHx0bybxx{Eabe#IL79hpm6cR5aF|iUDWVf=VT8vg ztxw*+hFNW8VZBOKkcgFt*UFQ_sN%U{~*tTukwllG9+xTT-+jb_lZQItwwv#&- z=i!`N|CfH*U0v1Hz46_9t@X+BB~n6)w1boRja&Aod4aT!w;V&vh#?Ny_eO5_R1R^9 zKH^HZYk}nWs=BhtA(*P=*wp=!#Wo=aKP zSiYG8FFJBhlPtJ0Kgj5uiZmfY&?n22|LqIo!=5oUtlg-O@bLu<&sVly7{mqt56j-EO+aMatCTP@+7Vs})d27@hbWhksNl?BTVCM}Mf+9GW zlnU%zT^+G?m1)SW= zo)V%TD9V2%eJ(qIxgjaur|yI0Q^nVdJf$_dj+sBlARo6f_Kk?o-@I&z`+VFk}Zv*PmR^noIVWj zP7`hvZ_iOo<88=wDtKQ?!EI$V)mE@2drufk0a~sH9}II?Zd%{QXI3&+Ydd#DTyDVO zbgn{0t98bR6;nC0%!};OTwU#FzA*KC%}K}s!O8BV#cU42$wrv{H7dbkuz=XI6Bfe~ zPd4VO_y7b{;_i~0OHkQV_od7Gk}wbFwPmFm9Ke0bCIh^CWop*WPE6!5Ds^4{+ePN7 zAIIyq8qE}1R}hpyr$_YoSc>ExFHvZS3LjqS^e4{ERr}(u0$!_y!KfW-^;VJ9$jsOY z@VnU-J|}IZA@aR1%nR(z9l(!Eq-bxaTR?!ZDB#Foa;n27L+kh`dBjq_d~grmI+hOn zY#&@a*HSTrSI(h5OG4Pbe?B%|()Up=53lM>fw81lhjk0+;DA~|{-p7<9>hJbTG7MJ z1U?bo%kO`tzIb;{AcHR?tC6i*=$e>m>CzriECO6pC4qYAiv;*Q_4ry`1J%cgBeT$X?4d zKVj9w8`3o-1l<7B6sgNCVfqm%E1fwh*PCf7Y2DV>`M+TjX`-_U1Nt0ve~Lyrdm$L? zj0!##+9V>*FLf8+8}O4E#dG(nKN-+MTq=5v6fTWpU+GOM7IvyCrb-+boE&R}K}SKr z8mFT4GJU&rkF7ARe)MLi_8rhdqY*5F83HRTC4{@OU^B8Pm`MeQ|JuC{Y|V`dQ1)ZY zez!~fDIYt;yBgUMpbg|m#>BkH5^Saqb$9r2<-C7r$hr8t30U`W2xU}a6+c@H8Uqh@ zG{kY*N0)+_fH%p8gx*mIUvtp5=}q5FN`h(sz-uO3ePo*Lipv(U0vMaqpBi~KXMO~f z*Wm;UBwiEYy6!45JW}r~9^@Mhsk5-9Jte|*)4qEMc~JKe$Z*hE99;X%UZDYv85&!u zO7O=07Nm3U2XqjL?QJZ!F*~s5jU=H0z1f&}wQ{6d*tsq4pSKkGZ1Q%(65YhcpeJvJy>%IP^8u>TJWRUzZZHgqzOXtmpQm~d|7v5a~PJt)c)pX9N}_TyZwzJ)I`=cg^Q4} zk}Y0@0E~xI-xJX@lWsXR2_x4i&W@K4d`9tjdMJgBMOmL05eHj_a-(mF)6f?zNg=Ao zMb;~lzDbHc2@EH$!ZP{<`TnEgPKA`jMSd?mtmD?jVcqH8W5q{;h!^og_NZoIxbCF4 zs-Oas0J=+0p9_+_s*OBBZ(~cC#=x=pxw!Xk05TVR$~0|`O$oI-CAd)+0_>f7ooB7$ zIgUe0zGSGC!{EwbUG%7!2H zv@l_h>3z}9jaBKZ9fet8`wF41bU?sR>fp?2z(Hbqrg+x92FM|1+rQu!(+?L z06k>ECg{{(mBRKD$!a0eg7pm+31cVp8ur!mT7;x=rWuHCKJ-(V$c@57e?F@{R9l~7 zCpNt;JQ$u&#ij;J?s`q{I#~?YBP@VplF9)pZx7cMSst@pyA#*R=k*7#!VA}w>28Vv zcAd8w<7FzL_TSL~=jLFlJLfms(hEhw0Q>9UH|W2UxZyQVF+9SK$F;N?+a1m+tu=Vr z_VPJm`6}gZFj^MjPgLxqb5?@Aq~I1kXfN}oZM;Z<+zf%-{GX?vY6l&gUs5O4klQ)0 zd_13gQY{~d$(R0(^+x@Pop~5D(ciWsYG12XMxu8Q4z&h(2m%kQj%W7pX*1bvfSrs? zK5btC)17y;g%#-09=TZui^Zo<)3P$PhqSCy`}T;LO;OjEiH;&syPe_KF#U`4I+kj~ z$Ue2;Q6BbS!{lyU1ySda_(yh|pQ?azRAH83Fp@}RlVmFy*6?3agr#XCMXjgq=BErB znxZ`=Z}^2_K)bY9ju7VNn!)m=fSV~ct&H)m?B)CppiJqMOlc}9r8JGBIl1G-UwH@; zjg08lQZ+`&e}}0CQDjNETKF8}s79d?m#lEy*j|aaqxhpJVgL>j43BbJuS{D?19in| zOjXPL|!aaYIs;@R?hf#c(QbU*IsfVNIOaC2T` zCJQ%9$L7zgRB+?>n8pc7wKE-Du-dR?v^I+A${ernd=mKZ!+srNTs&dr@ZvE>5%PS_H9Lm;BQ$J9kKQ3gu$Py2C_ zqKPnxbCwQ{Cf{9;Gc3N}L(!WWXSb)8nH%LP0G@IAyzU>FdUCBq z`a~ITN-OmZMOma*;9LQQq}1DoEGw~1#AgQ0?H?~q7w;adh>Pi+khj5ell85mkLAf3 z%T4RK!LP>IZ?`xH!o%aEP2Ma4&(=YY(btPE>$G}@8ehzM$#AvD>v*F)T-0ke9dZIYYV-)chttaPLC~pC&4~3&123F3~vwv%~w6_5hPSyE0 z;|-ILrNg$gwfaE&%rapSXR~ze9BN1cg}J$? z6?X$(jAP33sUePVL=&xv5neBG9K*``Jzh3vT*^bCM*UoFh`9uDYni(U8n%(b$*}$s zhOo>96SrsQ4Syi50&LasV~2OZE?D))QTF4J*E8u4f??HYluNBfTj%7-@zKB#5vWa7 zDWv3q6*6q)tjAA~WXypzF4`v~BF4=j3q}E%3Hh5VL~14GG%Gf=i_Ms~@^1pub?hQ> zju7k(%*y%V5E%7%Jf1uQ0Y(%scdhUW1X5 zl~MWo6zffeI3&RL$GMEa$Jj95R~e${5$?!*4O5%~z>zJd+_$6#7Wj=s= z>yc?H@d1&M#QbJELmlIKwQ`Z*I_H=&E+w4E^5S2%uIdeeAC09P_dBP_4PmBj2-}uM zR3KwcNX}9biFcO9kuc>v0};P+XZSHX?rule8%)IUnuj7wpKQg}*P?~;R?bMcPtAQK zD6&w==aKv!IkK%699deHwHv2sPnQ9v;VL!iSb6cy|I*}fjA_k7BNdE&vpEF2yrc67 z2>`h8#5|=K>G@iG^y6kO-~)^}&p7+`8;x?0x-erS@E{Ts@@K~`ET;_}B3M$lEP9Vw zr!54;gGy%R$VW!DV_SO>-C-@x#$^}nE}1<;LRx1qgphO;u7-9+$ra@xo_v5T-vIkU z(I!iIkwm2g0g~nB8PN^M5_*t~^fQr%;7*^P*CXyGErV4bx!2j_3%%jFX-;0{_0Crh zFh@602?ktArJ$dNg2k8HDEM>^+Ac<)~X@k+|e?7VHJe%*) zbm2L(t&EF^rewq46InEo?8*RQ79*}3;*FNh)Q)mw(Mr&BxYc7cfnzMx5`_97| zZCQ5Iyxe4&B(`#v9V5`Q7PVZEa-!xqI7|$#I(R&NzZm?N$r}X-2ny(b%da<@4^hUU zfq*`g)A~8k$tU#Th0NE zQ=D>$@51TxpHC!`jyE=bJ(1hR(eJXQ(mB9*GGl3?l)DHhr7@6$lj6L}tE#iGvP`r3 zcqAQh?(X*DWPF}I44EhNrrD5#lhOMonF`0Z1dXi%vW{+!mQq>EuNpqfbSG)@u}*z? zCQmZj{b;5Q;q8GO-ss8Fy8b;9Fk#D*hU&xldf~APU#OL!;Ssd1TN0r!RW&}vSM$;Q z$C_=6Msw+@S+){%1IV!4iuzLi$;%w_LR*Dbtz}KMVcnO9E7}u|Ja`McGJyky3s1)i zZ9e!6i)a)&nYV2)svO0SbL`$x_wRR3$f3oRK0wGt5Qo8^Ljx1>9y5FmV5te9FhIHG zpK!J3HAz;*G73o|<47l>!gC52GLG&?GaN+RYF zKfCyMen`$D|7{cX(Md%Be}Q?9u9l#Q*t#Un0$XcS>A0q8ZA+fClv(7#sg4D|DzDY) zscVFqZcfDrEX|UVH7jWku%nUFfWYQv{Irj+{DI4}pnT|$feQ5fO6ffWht7oKVp{iF_xMDwlv`JjPqH|Pnsr=O1_?;L zrsXJ;=@{|fPLyLbAUGxvaLe<*r4KYvf|f2lEFX^B;?ow3MS_HDGDw?RQWQ-3?3#=3deN_hG^s~Lu0?p z%PHcmFjP+Bi&2~*i1?BEl1t)F^Q3o%Zq$b9c`CJxb7x2&Wro~TIxG<57%%s8k}-@W zf}6h6P=TQL0T9Dj&Olx&XuG)!NC%q82zW2RZS^E8i8Pi~gpy4C;rv2p?G6~x`sR-f zI~WC%S_Dwe1SP8?HCanl7RrrLi8vQ)QX*L4)s6!8(Dg9!1F!StVjye^aLp7??V!^X z>a{fXVff;?$Ebn`bd9W__jb~&@{aSY{lntW4CHJBfH3fxjdZ7(bkMmt=<3j9)US|( z`*+(RS+Sj^?Hnxbv_V*Cjp=Qy7e4GjMqDSyYZDy^DiUQ!c|3Ip(7&Ij3yte*jBEu) zgd+v_UY9zs?baYDYmC6qT~xpYML@9E#e{NJuqjGALE5p{t`wm_9_0BchY}E>_j)j) zgN@W}05s=iv||33-N%Nn)&@D{ffCobxIiG*bezxxQ4FjY@GEwq80LIUuB&x<;H6OO z5aRgM{&Z1`{ep;K$&6gKxVk^B;^$>&uDa@kE+;dGZhA9nDp^lmEBzZ)Zmv-B#OgTM z$7DzK#B41T6u-Q^RRl#yaynmrK&`{9_5}Xu0n%Kym#(>;&C+6Yi3io4CsXEtV61@p zv^|YM&+`Y1UH0Z!oZ)ksX^#%uRdn3ASLFwD%WT)p%52F4v8*ZUmLO0OLOfiR6V^sZ zLP=tKk>Gkt>W%&`Am?f#pYYLS`v(MlrGEAgaSqe&s`8)iXr~ZGfK+ ztJR0Oh-Pe_=J67z2RXvoV(60nmQZ0#5vY-UMIrih(}BhmWd!QPP|Gzj%^VA}X1*px zR)g%SnMB+5=sY{_aDpUbCvG3q*kcy{w5<}tZNZHLvrxc8*@$?R1+#{{>w*iX;`w%0 zK0W^Br0+5Ui=w<8T5Bo|c}7$OG9Vb~0?AIU?z8B115vNHf&I4p#7IzF$JWfRQO#JE z>%sPDN*NaJo*;z=lHW&7ZW{BhCWiLclUdn@eF$dxdpc!lLXDdhZ*tDKhyv%yELYGN zf7M{lgvN-+&I1WZEh7ok4(~4aa=m+~u$(wu#xjP;5ZA(p@n9BbUf0-*BVeo3{X5cQbXpZW8qLnp`9cQSqa537b+|J?1tKeIT=LBWLg~0-- zZ4)6X^`BKj_z!-rx7&uHlO)o$kq+AsvhAdVw$VombehA+qM=>}>7JY9T;sCHNpfSd z)}b*%0eLhHj3ym05(`8OHXxf{>q_{f0c-R%J60xVw#A}7Rpa@^m;Yl118B2`qy@4~fA1oo#>TF~(#Li4EDN8gMZWAB ztUmSc7P#?bNVEbHCoKd%Qp>jKE`gEXgAZhYonXs6!QM_QIZwWACw&R(go}3lQBNJh z>vOBB8*_T<<~8r0t^@zgeWnh>lWRb0XYsr4=h9j)fa-4JjV!41>r->n7! z&)XYzB_fGmiOibYjhBG$$#;9{hOY~VbP6BVyEaVM5{D=f09$lgTH1OP>*VW5o%|w; z|IgV4qbDr2cfK6*mlj?mfwnT_X!6DsrBR*+kH_;Ym)Z`ByIyT~<$Z9SX@7bw#;2OX@jH7O$_vce<)j1cP zmVZ|qdbs2+(~E+*CS`fyblkk2je)H~A$i|aQpgg|IK&FpCstql)ZszbJ7rK-ooDj# zNth{VH*KU|!%Qp_IY13-X^dtIy$MnkEnDJUnlXe8#9!S1o9Q{q zEB#l?W*Ba?=qN&C7Za6mARl(Kaf-Oy5nlc*{pt#PHhHJ&yz**tqlc!-wyDwGfu*t^ zklG|-s(m)hHkaBvTQebK&y5KRcd%H(O-F!kpU^@3QM;k|4q9^@Dw$Z9Nt?q_T1OCU zZ@Grc_9(#QLg4$4k5=)_quUMKAD_c6uC8|dKO2??^vSAj7sFVPMu>QU;e@j$qxzmJ z17yH0b>v>bjwjZ?S=%pbA2pCVAU<>_tdyjwDhIS9bEz2x8zG-;!V+=4#kEphorK4; zZ1N(1F=d|o>XQHMkjE+`p!TQp^jE9ba3r2na_%NT@^j)A-v3bM4Iowi_L!WxN~OjD zNly{<=QmIiQ7&U&HYzTpzoE|K0YOi3|-vnqqVN1WLfqP~v$3{Q>qaMhfiWN|dK0)mcr&4{0+-(0cHvLFg~%tHWYKe-G5rKJI&sir!@<_J?M^1d}oI zmzIT*0n5M-E;jK4^3eBI?uUBatskxXA&{5(We3$gv)Iqr4t#uO)+Tkq-|6H&-kIO> zZBD${pG3o0%3zC0ByB_?7KnT>>|_OU=kJmLEtQS>(k9Js`KH-)e472eUh>5&t?RK{ zWe84TrIATFJFbb=vIJJ{vb3pI`pp^@dG~jJ(lF{Ku8h04~vojYYkx@na?wi7&?cb8bN_5kit z!}0h?k|?D_)ycKD>N4w>jD(%~B%3w+RC@54`&7(onWZLa9){kVVE)?HxID;i-#kwJyAk3NuU!{weh*iUgUUjS+BA6P9tmXUWK$QllJK< z{fku(!2d{V!dKUO$N0x`3P(;e>IEfCa`b^gbvH0z@U*j4Q~g&d{}=DDnGIYT6eor+ z4VWF=7QWl@kG1x)^l=TmOUq1}H#;~5po-_`Y1aAti;0Cs%g82Pdz!lgT|%=&sZwpS zd7Fr&D#N>IA|C-2uB>~u8}~5tHZ6W@orbN8SXVGn(7gi=gKGj+L|W-pNo`0AV}5Hk zuuH0t%MkjgV3F6vLSZvO`&SuaG`j1tRI?sZYS-@m>f&T&dF$pj5t_2*Z<{+rz^V)2 zYS7}GA8*qNh2C?xtw6i!i-7o?e#LVJEpeg{0@i9j$}nCwD!3}yJ`}33oYV5!)+;W? z&MZ18BeSurWM|TtIKnu~qO^ys>c&zO9V?GJ^7E>Cv8^iPa^)y+fdxi(SzD3Gb}gp$ zuT2c+h+a!|kPvh!Sv?_FctwW|0BB}F_{-R#ZbdOj$lAxDfpCwXcJ%k5o$!4NS$9k| z6Rok}K6FtVOaL8@q<^L<8!Rj##KG6v`{BX+=cQX)px=IjtkJue=&ebcxGC##!9_=y z6^WV-qU??>PPen&yk< zh(03?)P|fmGKUdG7ycOtMm(*Fp2)Y3*tR>vIBRed+fOk1+1khw$b+{QpZH|%n8P`z zJI&}p+1kVRZ0l?i8tLhgbqXgLEc$~#>wf#_7<1}~7!nAma7u4qL?S`rQ|2 z=i928hdH;|ZqJ3vv=)W2l`jhV{HK9jSNtd;s%KE!o4oH>!c7X+B?t#N_2{6WUZAB; zaV1L?QNtros`ke@vH0d+FcX3F!4<=#$Ldwtn|EwyT6!mksPCMrD8fLiBAQp6BDVSt^UYOQU5*3tmvO2Z&*((U})Ks<;?u;*+i^Fhk_S|Me z#od4$|6JCO&_E;F@i zX$n_+(Q!)3mZQ+A^3U(b+&~XoRJoYM>Q3+MO{In!4hBMs6)Ve64MmKOY$^xypqH491m!R7W|Ql) zbEih}vuFEy^x^0VkRfrsxlz}eJGZ?rlboy!DArZ2N)~6;2@)2T<-wW( z%UUXgC1E41<(m^tD~XB9oRGVHQg7O(Q!9L%hFG;5u?5DKlE1|||4W(q#xP!-IW?Bf ze6S{l$)1?4{)t(!QGKJ22@WPc%7^S;2saQc9gE17n;nX!6Yc{G%J&ySLze*%Kh#wuoaouO)HaD;wwrN!ib>! z`cBjyfvdgNsKscezaguV7Ru#l*(b7vDzFV&Jb(MTs2;ne$BhF$u?r&+`?P??j%XU);%PHmj)SY6DEyw{d@lGZaMA{kW@|79VMgk=Z){9eN%2_D8h&r z@H+djoDQ)E>S^5}iFguoh7opa|3+}LAM>`MZ@175@K*Ugfe$z60=`3l4_8l{9d7vo)wq2|x9MavsG^0v^ z$Tk>9d7s7HO?5@*?RrN4v?+3X7SLEIS3%BL@&TzLVKXOGLH^6L#P$Y_x1l4MD#^e2 z9UnA09Yi?(1t2Z}Nw-a?edg8~tX^4%DcH8>+>n=4CbwiE;5}VkExR$5RpB!o06~WN z9bo|d24BWD%T$o^BaKpJhaNx1mJ|{$@xd49<}`=xMLHUi1qt-2A|+hznw}e$sU*M2rgDv%QJ+3Ge z&0bt=Up9R+Jc!k%v8fQd{I*~=!dUgi43WWm9@fA zUJmXy9CjRoZ`X4LL(rcxo^>IajTsC<<*7Mg*g9KyFi$G!9Ey4ar+(gJCv`_fDh_FR zEpe(C04xhp>5RlDAXuo;n;BrOt~bQ~n}m z3sb@mH)e~qR6v_#FjR_TEW}||D2ko(=R_@tM!+xkQ}AEn4bLc13+p=8~_L1tYHaqLMK5h7z$25e#?t<`RUnV?RcX@{h0u9T`vibDPi z9sZ-P)wl%pC_g?~xt77I7wXBa7ky&H6=8KM&rF_ss30k!@g_pAR|+%V*`Uh(WCA2V{cZotaqh0Rop z6R>aQ?|9x@w5@yzzW1}F+{oLqRJE+U(otQ;qj_W8m32i>3O}h+p~;odC()lt?`5%A7gZYonF7jy`e;#Zi^i^F^kVS(Gk-h zcN1~wwzT2cNuYXSuo;2A#hyE*@;j@d1VGa}FQ4y$34-~PEp+1#=Fa?-cE!_f(#d0S zb)LJ%%yz6jlKxO(^$=yWGJ4CKtD_;2kcXO~Hxpoewak0!+PtOyw;J`CUtAyC=wuiN z*ubd6%QcO&sC}vefS(m6_}{yslU02s5&l1W&JGX|>;EC;rcrOA;-?|{3Sa>K^U2F4 zzm3BdN6YR9ZLpSMmOE+|8nr+}{R@P22YkGI6vgoN@bGYeVjM>UTMC=P7UE0muBi0G zqbJ=a4&}7%?hVC|N2Y}xXU=a1r zPIZ~4m4?>YuA$R>?@hD@G)RU(+*S}&RX}-9oOffD_(Ero(F#!+#Xx%9q zN#OfLaHoqE)uSf2*bB&Xiz@J2@!_DF$75L)d$pyPI=TWBgH$D3F-prmPC(7QNyt7p zZU|XHqHI@ezR?Tw!Z&#%Nl7gYz^alZt)yCm7uQ^|<*6H2h-lSgi7%cpF>8K4l@qQ1 zk04lNsg3b8ZppK#Wi64gFei`Q=5khHo}A+3-1p>)(DPegkXPTv_CrUb6mw=qM@9(o z+phoCH+9)6=zs?U(+XO{D?t#t*PI5IKGcrzw^J>G^X9w*>tzk_;+82Z;G*J>d2=7V}JM<&!sxYN|)JG(&|PwQ(s&dkT{e{tcpFL z)0oRB)Pu*?NRO)l3()OOzjJ%vj+P(NesFr8CLRvlnw>%ow_LIAi zM$4q>Yt>`flSoNnQcF`}2Dkevp-*WJ9v+j8O-I|(j6ykUPF6?$n=#;5yz%gI^vTL8GK15HB4wKj}xn6E~{k z6@rcX9f??q5OBHIW+>ZNf``v27jqa=JwN!qX73a0G>0NIBQ(la%15EA%&18c0Nr*c z6>e0G=p6I}aI#=iGfp`P4O*XsTD{P8Z(S%Y=tZtCt6p5iv*qKXw` zmdPRI+Q-Vq2-2PU%6|@=H{1)|o7s*I&2m%&^PJ@dX28<57SY0!HRHEnPSKB-KeWiQ z`}qcpt~&f6?x67z*TPo!KE1d>l?~Kh@aq(?0ykSs9SD(&vA_b~4q&_~y!5 zncnSkH+xm$L2NL*KkXd*L$^5L`=_R@-JlGRYbZR6SV@T!FUyb2;Bg*tXm;x($%iM^ z8u3R!$xW~H{XPFRghr)=)g!1PAw2NLJU)H{Hz#=;HD zw6jBN-92D*)EMN@NbZjU*!=*FbxyGab4+y+h8$~dn|m2VE)RCI0~=3HiI@C=#i$XW zbw3g&2-E(6TL{Un*V51B_-xUBlj_%Q;l;g|TCN%sx0OFcodyF(@?Vg#(8R9TyN>VQ zCz(vvr4^z^Bh1(3C z%Ii@`{P0}ey7wJDS5MoKq&v@}?PDK6MA2ez=T=I&)=+(C{lFvv+y&WSqk=Q+%2`>^ z2LJkRw0O)d3N&5dA}KniSn3ApOVg@q6X>0-xyxynK9EjLu*}-qQA$_AW2o7ezi@5) zx&-o371$R}O(AMLj}_HZ_k(l}sU_YxIc~m5CCdjn2+ zAJLFxc!%+ZP0a?6lo03^H0UV+YIHX{5l($_{UF;)J<~fe`~B$BO40|iF=Szx{5#b& zFtnQbE`Id-SSY1(3xH&KWpfC|2Gv2xR5=11-e2Va`!mk|8ul_tijsjpYw4wEfjjyq z{>;sEB8*a{2f*?)Lo%8@!lCd7v{gchvWhG+fDGIYpuxhv_p|~JEw&4|DO@${y{VnE z%UQ|jBwTkVdj4~&<1Og%MrREXML@rBS>}elEY9Y%{@7V`N_fta`6tS(!+z5b=Kwk{ z|D|Z6{dBf>I`X}iaf4vDNpHg^VPQA~luP67O!gRtn@?lx%LV*4z!2IwRz*a<5Lq70 zBGKglO4O3o&NpwMGp8HiBN2=#c@bM6vvSiJ}JPL1zU3})aAW{=h#^8np~l^(c&(}Y|H{ik%oy1S?o_*ORH-!!vtE0hfg2x$f?ms!28Zt~vm zkjG(V7+Gi6Vb8(HD5`HzX=IyFpXc83+!svD-5->EdIc4G;`5NgI*I_9CV@+t8I2&D zl08sM+~Uq{u=Z>2bubDE+10@II!Jaq^2-Uw7}>#Y$Ny6h+Z&1*7@I!`qPQZSuzc3! zy_Fkptwp-Gh=&KTYQt)Ko3++f1zfor_%N>qOU?rnb$bF(k7m{lkIoDy&@s#1o}GN^ zPEbO>(A1KQA?}4b%W|Av%C6@Hn}PCz`!`dIPUjW(4R=PHoNbsEXet&StlZasx4r-6 z;JlDEU)}ff{st1@mqBWbKpPv{(Ed&5vIgA2Hpf2o zY&`n4tYHlsxo;O%7LDHC!1)|txM#6(HQ1gk!b52kZSeyE>lST`fI}y1i-2hIR45L z23<)g$*6a1Jx5+^3!~B7lu<++ie#yqrr-wzS@0W4tgS$buX zX(l{B4MYsIa7u=$tjGg19kmg|WApq5-c`3?mAV3$-UL5v03j^+-EkkAziH^K>xF>z zJG0AnBTEK>wM}Qr`qk(CVDv8P#9>rYQqm4TETwd%hF`nhGR^XT-A6m!)U@Sx@%Qx19B;HE_>M|eek1v1f7Zh=`d;~-gd2YKapbL1a|M= ztkDUmRWhKs+go3UAM5@*{HA4JGaLD!x3eNY{)YqN$fA9T1zD9ff*ewfih58ErAw>R zFy0QjpB4Q2!aN=U&M8!RBe$`l1QC*Q2$~g zRaeGrF=gZT?8sXRsFTzu*SaJ0b z7o$dDT+8Z7Ym`t0nk+%?*F5lMKe}k;+tN#O{%(qDX6slOOn)^#SR*j)n?m zdN(gS4o6Zz=%@>b{fmBD$k+ydamCe_8dznhU{p?3-mro_Pn4eq>QrEL7}KBHq2H7C zT=x;S3#)c?2ejyrt#_V-;~wVsE25{f=ab)?*aQ^5c*%P)UHT=xgQD{<8I!#>1v^8Z zE^}XeSKOa^_K4Bl(Bf9EBEQw z(JU9oE)FBd!$?(!u*^v}GrO}2>j+=4L{869mwMX(LK4rx)4yOl$2Lf{#-4XHD?_xD zKFGDuFCr!)%<^4D>3dwydlxeM+++In4~`?%Ll+FSLYTzvfNo3pD~;BrN~gUGfcw{Q2h1uDC zM}5q|la@Cy+(xGEGK;J|vFwjK6)yRpMK77nI-?WG^U$UMUe~~g%5_PT2rafslv|)N zya$J@fWL5;ovMJshpCd_d4C_QAwMUisL=`Ek}HGG0&rOI>**z+f36cNcV`%)yRmzY zw*aPIOokY4B^dgg?Vf@{dLY}?*TVbwq|D>O+cxN>B%{gw#e*4d>poOOk_Bl=RKX0t9N$q_)~IQH&?I zZ;XArdQnz^&dTZaxIw)X-(tOph$Bf1>4fZW@X@7zsCQn#g)87Y0F8*Xa!-Lfw^#^+ zf5!K59&eMFunoq@^0ulF;xA3a4JCspwUL0Yy@EC+GwO~rB^(Kyi@DrXuP%y%;^=R5 zm1Xg>5sMlw4>vDvxD*4}&pl|r+jA56F*T7gA7WSHs~!Xm0YT@@B?M01jjeC z$@^na$Dnb*4TAO$l4+FE5}yZ^I;?0=7y)j4WpYp69I3kYXf~NLSvnSj=~Ukl{F4Ve zym(!&tqkIB4}R=|j^!71x7VKZht?t}+cGu|U&~^EF8TY{kh^hCyyj@^@8v@LI|6CD ze)|_OW^{u$m}yM0$BK6*gm(DDUyeTccBS&^ewFHgR&dDUc6#}JE45C`)L4y&x72u2 zkNx`&9<1lSpc5TVB8@fB8_Hd6ayi(OVs|L5*V$1C%V3nhZ41&}jh}rMtI%Ev+WhGX zr}Q@7*R}EmDcNW78w=nokZo+vYlIcV5oFw74rO$yEy`&|t?$Iv7OlR$+K>v$ zZ|lGrYM!38*tI^>o`U+UCeY|q>Psf5D*f1ZAgCC$VKIfTMvo&aCT%F1TFMMneUY@w zXuU8;lJNE68j^>Vzq*Vm}-m5MQ2`Q3RtL4wje~1Y1oximBFe(TJ3qjQ>j{%c_ zFET#zP}*|4I_MDbSQ$e}({7SnP1?I-kCvCB`)hX&w}YuLr<)t%85>vKM;ZQIpl>sb zxwbZ+@3+;N*r1a(HX@C6CqbS>Txl+5ITw)#_E;?f*(f6})PK$zTfkMT7K|Jys@~vN zRFjObL3CD_YASq_+PX=)=x!6)-~|bwp(bj~A0c~0mlpZHi>-fO_Az@DVK{SG9l6XM zK;_SL&@0N^YzSP9Y$h3PbWuM`U7nk}7)y+h`!`HciueMW+EfslS~;F9xiJ-m5-w<* zoQp+__^Laf@5}}2R^JT`M+w2Dpwuc4b%l1jmL{Of;QmeFEcb@{sB81xHiHuI<;TB( zKeHRMG)#91Qu4$;nj))V5S-EV<#nV|+b{v|DB^{F)?^)(C=hFld?b#K*KAeFFi3m^ zJcIl5JN93E(QA1U#NP_EwK!A^lSIoxFpa5CfR{$Y=2(K*%{L4PM0EYUtbGdXmWhzb zyge}gg3v<00CKxbuvx{tvO^l+?Kz_AK-pG3Aw^5tE4l{?MZ7`(FUlQB8YUDA_)z%mP7rsv0Z&JDb;tWx0qjNt|7HVo~{4JI_~OA??kh=g{UlY$Osq`g6l z>(S$T)?3fm4gdQ>n|Dinj%VZ-g1Skh*d7$^Y{)(p(M|Uw!GZyy1O*cSG|ahMpUIb~ zb!Ue=dUqRu#}r-!^8)E`2<~Bd5GDco81@HL(1&APk0|P<65!R6DHXN9m@mO*tR#YB z-By>K-&ftJ4IP(rFkw@gB3vvP)5YO1w*9&WG?+^9&PaU;5ZSINBB+<7%D*l#$Q@gWvq*|^4ETu@SEvElG0+JmDe$Ngtx~rd*z6I={Ve&%IPDjYvH!NqW3b3>)MS* zmcam`q-BFD@jujur3v=*+{nt0a7{=GG4oa<#zr@}gX6TLE2UMfbB3v=Et|fIT*3Hb zIlT$O0%;E@5XJyG!)q6!;dj6!cMbb_^51UG-p=0M?a4(tZvB7N1&79(&+~eFU$JW^ z2n}mn5bHEXx%=#!UvNm`e{pDvgfC?hUG*VClplRtPYgerO#UyfzA-qEpj|h%ZQI<~ zwr$(yWMkXfY`C#)JK1b(C!1tr`{q0MoVus(pZPIWT|LwDPIvXw56mMUkUj`pEB$&o zZf^9TYV4aRaK6VeZM=`_Ce?i;*OtV?9Uso(-kiIIzxDA9nxp~h#uS5gTWPeV!EvRL zy2dV3zu{1aa6Kb4gEDLD)})zhiCzKsWV#Qx77b4Oy3n0c*WsJL7gc3ltNn=Kt33@C ze$9}2G!KW{gdlzsS__oZo)gu>%lVOQZvsa?&+`QSuN)EF&Ri~5`H#!3y1a*y-Pgkh z>xURCo)ZCti`#&VA1@5=@i#V_?z)eoygLQNBvvlw z)~#Wi>t@yG(BOnE0?QkrKY;k!e#pMf(WpG`}E>U5V~k>U#j_0Ex0OBW$H6>am1{e z-0W`xtLb30iGEi7yMzBVAPA$`B^TL6E$z)SFfc-7uUN_3=Lg2}q;}m%%a%6BLpBT+sj%HDQf--z zT2yVAmeiZ4{HqulC-m#ev!|Yoxspd$Lr7FQS&7eD7)+VA#E80348fJHibh5D;v(d$ z2(e*YQOnYmrX@C19GI|OPhYmMD?P+^TCk@Yz(XT^G)XTZi&&}=Ow+LRVR6P%#WHCY z8UTfoxg>41N~vQL4$fp~~-JYk@D9pZcFjO&5E6 zw!S=`L{Jo69?`NGUjOK#Gtn1dE+k06=Hk;@`G0#@Y$O@0U9ug2Edp~n@O;g6`W^d! zYZlX|qtO!_J@X9l;W|7XSl6Q{9663TF9F}iZ`hW$C-wZ9dJ>%t(87BqX>UHBe?O#Z zAj_q`Ng?b`w-4Lb4UpS#Qski&?N7rR*^yp-sc#l*VB8JexbAC5XE?F-4~yM2>IP`W zk|>@G!YlfAq3N4!UCxfVTFo}WDo~2?Wy$1X-OzY0>SL<^6;sn;z+p{~H>n7#T>_KE zeBn!&ssC`&d&DwU3pP7-+S}BIgV{v9 zSZL^P;hbpDB0*zTv_F5ihlOXPwg9c`le?q^_iX7$p5ivaI>FAlB6%$%r*Hxz`FC#x z&U(0`4BF=1xlDEeflk2|fwYi+$gGw!<|R1%IN4IIyZPAyTPK#nF>J+}3;n~u3*)bUQiJmK2GQSuWXU%33k@^Z#7W9Vmem7%lI zX32J;53+K*)cMKyjCZn0itHFf-slP`Y7n( z!XE>S$A92S9*MLm=`ny=q1}3wP!hP0326A$Hs~_QP_6IqB+_n3-@6f}X3g|cLh#Wf zNnrz!U{OnOtiu~H_wRdTNCiK9?CosnDVZ~ia!sdhA1E2}a zz3&^&rcC)$RyQtdXMK8oPcDQ4dah%B^gI*)uj5(7FGU>7Lxz^w7s*I@$F)|frV zLd*)b9RWI#`W!HG2E&`U1K)w3ZMD+>dl2*~vBBN`)d@EsxuK5cNVV zbO(Og%|EGuC=yT=e=r@mge|g5t3+D&?@imqr}0_fGGr5`!?#;rmCF?9^&RhSn|CJ{ zYZ6O(KI2d2fVAgq5#xaU{en~=+>2GgO^e~;k9>LRPE*y|Z=1QlITubWl@%b~pv>{o z1RxqmG3{k(&;@5@R$_V4+kZL?T9*QHkaEQ^LXp+OkhR~rtr0|VT|_wkh@#LKW3Vdn zjPMU&;XjiX?bT66?|>;Z%oU)9cxWL?^kaWGPCSWvu4! zHlLp@Y3h4u@;HUJU(@q$nOxXMWSWW$UB=h52MP%V6q;j z;t=ytRqiZT#)d2=L#8NEml;7_Oi~MT7@w=j+2PNFo$YgCctOUEAC+3;Uv=1ju|GWo zUmVW-SOk0$_I^4+3=3U?9%DGB+}1P`@){=qA%|1CW51#^ix=uLhxp^`RO?#;czQGQ z9U-_c5TC9C?1WE_HIcvD^$p*xI4Ny5y&Ch-uFWo0*mKA- zXbzqBh`)P2Tu{6_fBA_vacR~%uk{E%Ott9RO;N|6n`qWW@^b z`FC$ZDDmaB+qd|C3eJA2(Oqkn4|Nu+lHV~`9a}0?Ll!Wvh+(#tpxI6*_OORKxMb)RL z_Px%Ex-~a4O_{swn>1<)^L%wIv!uC4luvQYpv;n2q**9ZGHw6xId%&AzPg~7Is>J2 zKOKXFkonDr9)nA&soYN#(L07HB4toT@I~SoV=0aj#Tk~uaWn5)RGey=YJ`A1`LdiV z@z>jh&CZ3q(RIGkmh6=hK81gDq;af~B)>v;@)YO6T7Jr?em48&=xlH z@!6p!_HK&S{~wB*p=|~!@jnx7Yq1&R0@#0rOaDSpxX8}U=Cu)#MKl$6u$_btOP%Fm+)Z8i|-Sh z_=VbJUPV{oyf^qNmo=`G& z>>+EB|D(~iOpfR`mH`22PX){P8HhxlVG$^Z{=b@JY!}jDw%$5GYJdTW(hyp+>9-X1 zDP(#7K&?;e#(tEp3zssJu-@Ye@@)Qja-ZB6%XA3A4tIt8!)n|9bBv8i!JHVGqz!nR zqQd>9(Bqu5^R_Yaxbtvw{}ecyxZNA(8vE4mcbY2|%Xh?S=F+q*4-rNiL?XWBeJLP~ zmEch2gB3W) zEaEr80oju#*4{}S>a9u{Vi&QviWkV7Hbx`eRvKRDQ4;ypabyd2#6o0PL?D2x6Uf%! zGLAzaKF9;|a|6o!7i4f~tIID=jF4gCgxKrT4jKN{s(d2(@f>YHN=ZKdN2b5IDO7Rj zeX`#_ni#5}0Xpe{q){}NSV1CIu~qSJ{e@HgQ(k@X`PpPboWpGkcm3;sDI~0>$r!-) zv*o_zKNG_J@j0GKwvuHhOqL@@0j3{Y285C$L^~l6{_QMrJ_d~QZgi*0+Vkl(b=RZ7 z`iRt8>&LDR-EAYF9#0@|Y#6L8i%W|+Dk6hg6|@zCM*2Hp_>XP9ed!Le*(sJeiQbRh zJ)QchEzNrg4-Nv2XP%0YLmH@2wJ|IPD_*uG6cou)>>f&9-e(?ySMQX7J6?%+&}(aH zn(x8aOj+oue|K;suS4oy(jzl+kgsplY6F(|yl{5suff}aiz$YWhWV#;t>ZatIR;*= zk+Zkh<$X3oyz!8|f?qC?kd|Sdcr-}bvdWQ%#&6#SCTY+((D=QnP&^H}BMGmq#5ydPU4 z2|M;qhILMW88`rwxkTQ!lWs$Yc%GhV;-X5MVZCu)qT9N+N5cC@z5k7s^vViuvh}z# zS?E058mA`YSsPm)P6?679TIV)zo=WA>o**5BSQSsN1x57x~-8P1&lA=9x9sMWSYD% z3K0D1%W$O69wL(8iXr-^Xv%1{VK%<}Ab9A~w6x^_G@@1}JZ^64o{_dPCS5lq!L83G zd%mYa1j!pKy|J-XtP_G@V~0D2Vl=k@436%OCLLDY}FKNMW`Yl1ZcQC z5#o%V;-n<9?8=(j_SL2GqHk~vYQ%C7i0%=2Wb@AL3?V!RsD*f z{}%WfXd6>DDKWP=4k9D;-rYUq4)7D3lKB5xEo)&-SVuP0q@UGJ!F#Tdazr z`XlQP5OhMGzTza~H8X{%x$i0_YK%0XcFpACQP90E7e>WhlzaV{6R*u23Yy8#ow(LnbTp!XZa1Zn4C#iNrcT z%*M9+{4pNQFD>d30|Wk6s{n7lnk~!S@`tU&g|DV(ZZs22ybKy_HB(g_4(^s)?&Xnn zcBeX>^RJaQkLQ)9X1s#yu)6|m@C*P#Ts(o;ekdzEsWdK_bU2s>lutjIbl;oHWWB*t z)b*!+%jWmpV8Yz*PL*6gt+At){xWxav2kS#7dq}kit9ARkQtt%#RDT3rq7cgt78^H zbk+ybvccZ=A@^%CBLahTIMKA`*LPaz1CzI_uT;ThrJx&^o#$$Rz?PzF^QOtcwiKT9 z=jHO?d&SnJZ?O>3h?SAx&j^A=7IOX0cBFNfE*9Cm^O=m<+sB38)z#Gbi_~aut zVU&=3|5ob9%GexrBwz`ntW@uUphHj4IK*?n;zFuRg5ehPb*T(urjqgbY3Gj2V^c!e{alo z`p)+t^S}Ur(&M)WrJhEZu0%h z@w&S{eI*9oPA-KAr=@=g&Gt#ouzSma79WM%LIowUtf(<2Ex^$yrJqi=fUH&7Z&!wC z>?dl>Y7#mz01(Q4nHF>Xf`5cD<*k}I8wWzJA*UuVM$WTR(WW$-!pSJy6Z0iGLg}C# z8p1j-Bm_!D#nOeW`Xy&{xEboTq*X(M(dJ;HiNVV@pvzHQkPQb;^RmFF4c4r~ZHw9! z@W;W7X0#m7cN;giB=CPFon<+`n}R7+IMY@B3VHu02E1kz3RGsyB}fm*e2BW%D0Hg5 zx-+7sHitsC{vq zn`vu~e@T!zd1Lhxbe-A~b=HPJYgYi%nN}?d2H2Nj{B~%Uao7@tOsk;8-74OKY<`6Av}RK-&MYP zNuExr@aI4uX#Mr^I6L&uyO`-{&pA`-d}U(mI#oVtzrsWs{?euf{`0UK#c9QxYqIlM zpdax@)62KFGR0Gc`jmhvjq$f|^V{9>C3WxHae`Ce$1d@(mSxXV%V$|zAZRzuAB(cp znItrubVZJsc&hcu+lbfavE4w(@AR`UEOxQUGrp8vYz3^~cIqQ9;i%-fc34WP>pvwN zI;A6`_O>0>hTDaBRSu9}Z<7W;g1y6OfOHXBC$LgQ?ZkY!SPE3>fF??RF|8x*Aq!~B zzoExQ+w%EBMwm42RKu9_^14Pkp^vakDEAqP;~QP~DK`xTcRDz=Y-{Ddvh*(#I$iXbnt1*# zr570b{SNVGLX695eY8JdP6?tWx-5yv1N_5!K!6NTX~1cx;mJt#gJef2l1Ytz>z8MB zWl@vPSnz{1))1PZm5g_z3yqRJvvjR&YT7c!%TtY_T~Z%QXoXeUMoBWF{UP~)ecEu0 z=gQ8Zu|)$_ZSWvY7^Y%pnjRPya(&*I)Foayg7hsVFeYbjXU#IszOCBptcbLbA!bzUe5t$A|aM?~m1Xt(;U=uc>^zK5Jn1QEm)u=gZgy? ze*HcLnyTN!rnzs+jUGv=jlN}3eA{e>65X!6#F2$~vRA+1hae_C5uxLVM;7 z&W>v81cTxIKqZ!gqPXT~`(+Pp-wAHiGq@Bw(B5Z!9Ol4^1rg<`yVvnAKUI9{*#L9N zc!Dfak$b(Iu_kPsdyXFFCU@aBtDx1sxcSl7K%?-K~?@#Q~a;UJw+SjdI zmX-eRo^yD6E9ZV$z1G4&ygmm?;XEFT$eQ?mIA2UN;!fP1CZ5<>olXF8;q_7qrj43r z+84p`i;3JU9_fb{0Grqs(m9-B(7`_MpScmx8eq6wQ)_sgl7HW;!e;*O(y#l+-`7kd z9Ol~y$Aht-ImSNjHff1T-%*NLCb$W6lMVHP|Aoj!Xz_QO-JW^@Fl)l_(>zbx;V8F? zx{irGD5}TQ#XZQRN_v0o7(9DBKWwM}U^eHM_{OF@s`{u^yJR4eb(Lgt&s4|kd#>&9 zYTUvNLuiX$xU0YF_AdT5=sP59$=IwYsnSGlbmC>s`8Ye(d9kyx#61#W#B;WQPg#MT z0-4-D@iBO*)zb3UJHGJXa(1#NT^+nVo6R{>+PT#KJc*l;qNX5g9HsLct4@4Lc*I+W zh8gg)A_)~{(OhCFO+sry(|hc zegKec5{V%bMAMg~UI!>bN9o`mYxrnwb=N>84%^(gu?UI?xXJDe=Zs)A0Tb2Svi`$k zh6b`zFQAgmQ2F2Qwlw~kV zMbr2nX@#&`h;kwsiX)`NzZvnqGS1|5cAbOrH)TV+997cQMh?EaBZsoHP4>crFb5 zC^Z@{@5$t*@`D&bF~*oJ7$bZ9PC5~x7qvJ?MpYuLOCM^YjWXmd(+;^WlUK#^6yLW} zC3cSs<>4AcOA8$>)=o|m4pPYdBTwQ2ToemhoK7iHB2gCoGRjrZ_9yC3FxFEZp)Awu z_@EV4h(&*PIs5=DgfCYh{$NuWnhCf0ib;jan~at3UvM{V>=wK6p2`(W6lo&OtXd_L zQuV~`f(Vp2I;Ddc%s`egp`s6I{O14gGIbB4hV!n{?8?YaNP{6 zU$9oGHfU7}<#J=C{{#leOOi=&$Hou2F5yFu9NE9JeW3KB$YH{R3i#=(JFA+QW@V)a z_|yJaPbmPp{}e&sKye)@_Cs^*Ap6%gBAS-<4zX{8f0lsPlM{sZ{p4q_?wtB+BQJGc z9J^sNiFrR`GNgk6+DW2z|C!=ZzlDl4BVX3O)w{VcPjr~|y0@!*0TW3YL^G>=#w1of z+o$ZO5GE1~eH1B-#%_U$jNx*a=f0d>;bOJ42nM+O^nyhO?EX&U4K{(n`5K#!NrkhU zji!VxNGY6eW47fyVv&-=h*+tv@->`89dHFB#B@(qyKt)WgyrNo;X(iJ@#OY#M8OTZTZppMNMHSCfxpXOv;?ymi@E3_pX9$Tn`#a_#BuwGWDK9GZ4DqxF+#^xvO2dEfg!YcV0O9qCz8OJ4I#S12* zl!&S_v=pw2zM+KC`N{KgpWBPpvdy;38v0w0 zoQHF$@zt7!5(?c`q!uqG7D@mXYk*aRZ`MQ9W%Kvf4DJObRVfw(P%$4SU9Wa)gZvn( z9S*6Q++qYs)V4tk7rFLhw35F0v|tlGUfw6T7Yt2>@idoNiG(_DJ_Z`P8F{NDr8;S& znA$u`g1VikLZ88TnkrKpH!8Y5B2o&D0wfLQcc;PK2wJFaoH!%L8xB2DG@(10H>RJr)dkG5=tC zPJxH}8qGK zsgawVOtAia1rn5(D`D-AA z4bO<1heCK*D7UKMI^Aa%Cf03olf#HuZL;NuRKY*c5`O5oP67_5SrPnXtXL{MJl4Z< zQ&B#dG>ruvVrgRXQ^KIV(#ip0o$fAZ9n=x6pSv z5x@*c&+K{3RfVF9Ad~u)i%xg=Y`^hkrHHF(R#Xso4~Bm3Twnw4iH<}59i5T&B8BZk zQTaKU<-!gJm%MFI3h=?h_p-6q&mW0j^E;<>U7*D@pE$UhaE^;yme&6jG!JAzRp(}P z*am2oRe)NAw9Qf`B;tTY-3)!ZKwB^7uV=KE<;137DK>k{BpiizO! zbiGd-+k8yu%`{ym5xdw;eFbRx8r#!@*PN(nx6pSHPcdDqKOhQN?^>S{O0+N#C#P>F zHZfdcN=P;L2iqKQAmAb%5v8Y2n4jRHF*UXyV3Oh+!nR*F1|BeuZNU;Jy{D0OcHz=@ zTK>arK|}syN?eDvlxf^mmr5hUdY_Gld1CPmvJ1)_oS|ChQRe9~V+YuP;{zGLL_$A& z#3m<28>^C)%r`;yHL|B*FG&*ySCOc?xeq+4$)J!X0X zxUCmhG5hPJ#6M<#3l(_IRdk4?xRaqdvz@bgL%h2mA>;Z@Xt}5TEamyZeK4?5-*4G! z)_gq{n`q(-W>B-q@da#c*Oxc~18n{DuGocgT`u@*s3)L>JJ%`xu>X4@*H4|3u8q}9 zbv@x3+<<3>faU0z3=M)Z*-I_;4)yl((f8zg)%bK2>73_wn#b^a#4o0Ov71#<(yz~_ zF)B;(JacbgPtA5ELdQ~8Ua=OfB4L%jM8w%zz^kqCpw9Hwx&%tO7Th!v8UI|qQubY5 zu)u6Q_b?lGI;a_0Zzr_zh4X3lm?NL1|1+`D{vIz)m(COh8_hPu|3C%v1SMEp6llFb z7Z5mjxACxFGS?x{fnU3wFZ%Cd!|4Y#RqK7l%V^m}z#`NSLHTdz%-c+_!&MKLo_U~^ zqdkb(jR`Hh;$%SEFgIHMv{11BDJYvHPZgQKpVMi>${)R3@1D$~((5s6zxEk1jN*-* z%_aR5%H4)`Qy)We6XsyVV7mF^JU|--`*HHU7l{PcLjms`m!)3ETuiH<0!U#uWx4gBKf z*kq>&dMTz>gz568|8j>Q;P+JS_|eM23JzpR!Dd|3T2QN(CfRrP+wM>a!25nq_{CM6 zaaP=-JAi_u#Ei`M28iuWNv{d>UOk*opeEIWrQScik|KHVU zo~TL=(yxyFH&F(63?wm-&gj;j!UJXkg5rKnM)WmlqfFEa4d}!8cN%<%GPNx3e63=Dp9Q5 z4NM>qRTd&V-cuP-H~cYcW#PRT&9kGvEl#4g<@KIN`zK%|4@{97pC+NrmD4WRWG9R>5 zyqQVSg7MjVkQ3fsDPO%RH1w5|vV^cGA%Ki1XUd@b=?Bon3DQ2;Gz_=XpLl9BCV#KP zUuK+seGx@su^{Cx5Zp`0gyGpb0j$C;Jaj^{5#>VMW8RJ?XKfjirZe^cgomN|ijZZ( zYb#3j9oVJDmrv0&!>uMO8%l2Mno9f4Dka|Ih=CXkowd&AL+X@`qXZ$RS4g$;&K&K= zn$026PC!t>RjLemy(f&Ss`S2NHNN<5os0NK{GvjpgT>KhIrYig;C4sA1<^}q2r*Kv z&>#ORX$JwPpB<5TQ;qA3rj1nTBbt+=Z050#N`hFX_qMRtQM<93w_4re`#6-bsAfUjKKqaD5VnC|J^ zAt|#~Qws3tWSi_nn_G%+vuk$K9lk1CSh$PM!Ndu2>3HHFKkwoB4bFbcQg2cQkL4!( z<$E?TeK1P({`Z^Oe5l6~N;$gBJpcTQ<;5-R$S2V1Vsb%5CF8TnKYQ}-I=H*q=Pj~X z`cS6nsjd%EawsZW14Vdm6r-RO;h{7m&w7o*`n@J4f-dDj3iHqZqrY<2zkm@H)*d_B2NJw}<=)hhE@5eod zO#n=;iLx(F3dfUBd{`}7ssD9oZ1#p9smwWeZ2Um)Gtv;MRmz`TnB79S`sF7)%g;}T ztsL_F*TvvQqdfRev2(DXfHLGEIzQuHI=mGNTl$MI0s9g<9w+j*J?|vj6(@Je=?!^e zW829T9VMfMHvPnFie%&iEEloX#{g#RyH}t^Zrw)+mxQ+5k29n-6_|{lH4P*_I-$FY zhVv^<*d+cJ$D~%71LYnuF2<+BN|j~|tF$EN$+3)|(K9mb{)ej0>3z9q^W6?cick;S z(E;M|0kf=y-ING(Q(|+~{Wxdb%lmBFlKqTp*X9p*VY7zU*w=I8OPbjhYEATKi!G2n&0_#lS zY;lEOpqDe(D7n#CDwNEcK_3dw0X__xJ_PB?kc2MF)lfa#g>{EuY(sH*rG0lw_$*yW zrV97=SpJA*gH|b^?;Xnzr{Z_6zkg{+^MxD@9=L68lfoVg3jM{Y79t8UCV5x}M87Ga)t_Zql-tO@4@y zW|AgP6Z{5-zIj+Q;=U-aWru*-r>Y(X8D{ow>dREMD=Rmd1;v_;Th?BU(^6s}JAIpa zWt!(^_BFKiK9Q#|b0)uSiYd&qS|xUJG=woH;~G1cR&C!u?I6{$7A3j0_oun*-2A!IkNA2kih0XH1}kT>+gR*>s`G zKQ~hVFl=KyGVxjqHI^^u zb4z)S%@at9Wm*x-V}R=Q!^H;j_NZ#%gP7KOIwBoT^LDw~;{+j*d)av-ug;F8JiWh& zTB_oRLiR36==2QAz&C&!4iBeZ)^s-aM%=r$ZF$XhhFQ($Ve)Z{?iZ<}qoc3lORv!| z$gH(|fj`poP1aChjts+O4wNPwBoV&K2B~FrQM{x~;4 zL|J%Qq3a|O&35$X%}ol4<33*7*}j7j1IqhC-Il~*`lUp`djl{rWHOqNDHO!o>)4_b zH@sT2u(~U*<@nf<573EF1SlZIFjS``ue$U-UERbcsD-MW6#dD?n@U8Dr!9nmJ`;EI z$ht>#^3or|sm-hOgHRi|#cQl?scSw_~ zOVZ#Sz6szx!R6k=PPr$u@^^YJ6?=b3gA888jdXD7TaUcyiW?EciQ);`^4SM7%jGR2 z9M&}n{3(0|uhDAd1Cu|dr6}dMcxCNW*SRNM=<4^&Dto`niZLPYHyKa-Z7ZIolF#_- zB*j0mBbjBEO|YFc^;WaUSA`J^_vagu4m~3Aj7K1d0tbXbQn3h@_9eROW?g>E z2_*;9EQ9F?aHvnfCaO(3K99(*w-jk$8=^r`?P#XuA?e$E=GL(`zrUIy^nd@YbLKH<2(4asZPM zff2GTVR+tKdtgfK&OdWZ^ouUDpODj{HD{9p_UhQek&qe^b~SeV?BnB=_~RJ!1`g}& zaEZe={Nz01A-X@NhBD@u2IC0n(LffJ7SfeDVcc>Yrx_M5zmICc(UX&Vqv)+-VA1DIM2 z9UJDCtB9#c$4j2=slkuSHKqEO>0TpC^CIO6&DkfvchD+6H}3d)MJ}gFnF!nO zG2zufnx@N=6^qN)OH=Go6lBl9IRRRW9=F30>)w`MaeJnI>ipD)je31bMY*BRR=(-g z7qf4knWu53*GO`YxfaNe0rRQg*XC5fPoLU(quPH7pR}+EP1jKZ*;WQ`bvNTmCXhl{ z-`eo=GHtj%F3+HakR|rx_aC3jhS{ES3zHhn-@nmg3sMsGOk^YzdoGE{Xajr<;x{(% zjj`cp607&lm&A(?E6LAvw<+gP19X4F{?_LMy^92i;zh;=T4^sfJhjK`PDYiYI^){hEWPnFD>;i|b!{O;t{BU12_Hc)b|Wm3BhJXBIEs|6 z=E76tm-=uFFL%|oRclz~f`D|e#iiY)-R;}lnTD>(=S9b zgMx{0ltND!vl7NbNxMQCa_wH(+oT+uUy&IsB+mrB*YokqPkP@yrEH~qO|%7r|14+y z@o5}6Q}EmHIB;LS=g%X{=zbi7SDKW( z^<$(UW7g~XW4^3W|6u36b>y|o#_Kk}VdYVzGVbX|V5s1YL9QbhXC+K$1K4<#f`_-2 z#oWH%LYpkS<2MW5NMeB3y;l;EmiwtU{P1meT>hIu!Fg4&ywZ=JY3JA-khc%yarSKJ zK%}WFBqo&rZ&ZpoLZ)Ezie78j!vap)$({)E1>|W4&*y*Dqk(CiEv<+Br%eRb&jt%hCPO0 z1vOWdu{d$cbULp-H_Eu&JB?;olBy%0*)SwQQ0X=-E#J5#s4zmt8_r3j^=$ypD1ozr zuWm$4t959wv!i}wgq%DQL(x}h2R{t6G1`wV_DR}fHzmw>jivjjK>$&x$0oukfHw%U z3xg$L0jL%72 z1l1|v|K73Rys$AcXq$5}9&!5UwRfM<5Yd^3TVN=YP%ydff0~)ju1voy`(BtpzWRY* zpcLh(Cp5$qrO_Q?1qv_HD)uS2FPYuxU#nH4V9k@ZAyn!Klpme&g>3g=`!B3VkZGFx5K zcsd}QUN;x>JmoZq?6`e4(iU+(RA=z{3JASj@u)Xo`#-(uMLj2}a=&d>|Ng@kUFE@G zTcI5)BO$CEQuw#%liMY;yyceGB?sV3Y{}3VyaD8K1Jtv9pSh(CjRI%&6#n|n{3e{m z%DHDR`e!~+gAlP@4i&QA*9iKwg>+HlHgY-Fx;^tJKOp4u3ZEW?>_YimC3z6uMCL+y zgh%_3;dTQDKeRrx_*8L5uQoMu{OZH|5Ts^bHe(Vr)e0}`&!H@cQ#NNeqAq^dR3SG* zqc@N+fS+9q9$nvPEp_p9BZ3%bNZajI;bR#r~PK*stxN$})H!?l*3 zkZc^nQ6nDUmpQP4DvY@`NI&`!U_l%Iu5)UA?Of5Ak8E_()}AqQWsiUlzw}U(g2+Ic zX2X1Dcz9~8);LBdae|GS;=hRpS+Xkn_#0S0Szjaw+?@JGugsrLYkTI9c7SSXEyOy1 zS1=V(I`~*?mCWuKRWBL6!AS0U0lqvU9)(ifF8s>yBznQDHj7KA$KK_CTZTvY@{Pvc zx(HudmPmPp(3hAbJhdOp2UENN12wv7A^dub(e=PAt;;uH{B`E(nc0i9zDNuBSr0(r zrC2-TnMJ6^A~FvLr!V0VLj2aa8we4%}$?J&36{DiYHY+n&R|=u!bjnDS(;d82B@=S`A}v4l!JVz9rjM=mg4-hz zg+0#Pj5g+87y~tWKAZ7tkO|TBQ?X=t68}Ytu#JLayZY<FK4g02FtfdBQPf!V1Rb?~=_;$%n8en~z5Pj4}t zCuO@c(Y{v01&0c~+vFO>M5Nw-JU&7p{Mej#9u}^X0MTMt0rshAm-Bpn!KGSLKzz+- zHka-Cmbo68BQBQQO0`an|Kr9J1!Zp5$6MqAN6DSRs^6T6Uz$8n;&x`P*B_V>`^_+8 zdopJNoYv~J{ZnSb8s4CBOO?41-|si6#d02}#>D5S(8tUE-w5F2{Kw}Dt3`*yjygbt ziG)-O;Lhas3H2W-#pW^J%J}MM4|i_%Ora?z$C4JXT)^9TlgNK0NB;}YrPC9LR`{Yf(Th$QM8u&tlmn|n4|B%>%aJv3S7#nXKZA~1pY;pmj<$CdxYFU5sb`klQ8 zq2%f6NAFtIl-bj%a1G=qPRHutozk`dut9zSZ2B=zQC1%7hL5hb&)9?bL=Ctn<)Z;o zQ6|ej*|xWittP}WlIYHo;Fz6^XtXbxu{yR&SB&@<&KxEJhqJH*XcRD!R686O&D-ll zi2`ur-az6u-4EIgj8gMxg>D((4#}a1|C^hMGk<|q@s*XZ) z_hB zJk#kW@Y)X~EW!&b44m8>;GEIuHHhmd{>8#uV!zB@%KxHUJLuyeh^f$3%&nw|&@q#?STu~~ zV^G%RX-1#NFRjHmAx8ixLy0Vc?*Hcc(KIRV-ZBoay^u>xJvA|K+FOdPZCN(#-`xnveIl3ba%D9#MU`QR|~&RU$i8(j>M0@<##`q zyBo!Qa*6b3c~8qLH*MS@f1F~i%v6ZK=MUtb!yIZ&XDn$4XF=ByzL3FI;aar5N-(=) zD}wB|BCB(=eZ{VleOv3Q$fv}3f_6^2zv?oD6VYsgw+qR8~jfp3=ZQJf> zVoWkgI<{@wwrx&q-|T(&*=L`7>-^EHt81;QRjaG}U2px?`#q1S8IhJzC=tpI^Auo5 zqw}&t!(CZ*u$<+O4fk*={v%Pk+t(3!Av^-$FxUGsp@&Lmg6`^}z1Gc~=N$F{=R=n) z;118F!SRsn*E)5%z58pBtaE!7onKzVSF5by12p@lpE?fpuHU)1vj9{1HOBqOspoe|ucEyL_RZN$)H#9XR4skA*QeVV z-o7INzNT^Vw(vSV-Z@IKh&K}H2X5+dGo4222Kp4=<@FUd_!bn5#~&SEgA|xgNT%f8 z@~iiF)0Yjy^*$mL=WjW24f*@vTiJ~EiRBHjUKYL0-h z2Q8-NDi~JHEJtU9U!nqdBCVj+{E%k0hi;N_6{F&FyGajW_K9JDia!Hv_Y3_BPph*{ zQiD4kl8>^wKXA@a*JHlKl*WBD7X__lNG~=PE|Bn)w_|qel7((Zr1^5g_>(yz;Jn1g z*Z68ewt1r-1kI_~hUt`8z7V%Xj`_8(RX*v~_Lx1HQ}?6>dS4j$|k zE%T99;*uF1Y@k(hqXIRk&NZ6GtQvs~tzH$eojl~~KH)~#89EMOu4)%Qa)c0*`9OYV zOMc>!HKLFZwrxQF`w}Kb?0NIh2?!*dGRf6aY|vuq286M_+=%O|fL zQL=ISL$`*#NQqCfx%IVyP#%fLgBEQ{v~Jnyp5QcH6B%lZr+;5;7tp9Xx`|*_!|B}* zF-Ku7B9}OHgF;}4p_Bv|m;w1ib!RdMQzE|Myo(?)q)Z%cGUP3if7B~MaDfsqHF3~i zZIt)}TSus~33Zb(=aQH7J4$M-EY&CMAz^$3wK0l;9RlA)rwnxNC=$|HKma$CCbU{L zKSeMiPzer>$m-86z=F~90rREBofid3?f0|~MWxSzOC^c^1NI3pX@%APRUDJ>L+ykB zVQBWf7>b$PeJPNRlEqzq4+AT+05z`XBv>|5fh}d}S#~9V(fFXBw?L>KE4&jKO>7C1HUdgPhz80I%3Y65k*{7SSqivhHaiA3i096MSXLQ!QBfMXsYU`Nf=bkY&9aKTsi0^waN*QGK5eN8$!Hi!^1$faG|%afn?$F< z!Y5S(k>|IZ1gr*aXdQb|m>v+6A?af0aBXz)Uha7&Z^BKmb6@M;00Isde@YrjDiWUo zZss>bm1YGT?n*qXfkym;oT=jZ7hC+T%ul<9E1^%5YGorA2-c`x)E+_SF~3AOq*3N) z0i;R00CiYwVF}m)h9ogb*o7e>BjF4Pc9{J%Cc(t~84#di>9-%i@s$~t*81n+82jiV z{rL4J#F^7#YkCDb%AF=eDcUgE*h>lI30=;^_t+qDkj=}DHA`T%uz6u0wVZa2ieWgb zNCXA1Go>uWbtcFoT=*kXy11GrYQDg~)ZyGJ+>fV0RBIC5e7% z^j0mY>w@mE4Tg4(sv(UGS?eLhebNRUn2LOg`I1RtsH0%=LNOIhVGR{TMevRYTo_11 z3Mvv5yR!EAZq5dkC5Pp_Y;bFau4m4KH7M^_LN*w^d0=D-b8v|tNHMY8F=HYTxpJTPs9znhXAc@DpCUjGL4*jIG|pMA zQ%N(L`fj*MRQm7oEI90}Dxw;A1FK;ubEGU4xFhsG=XcYkT~15Imh1sPl&zS;NF$IBl=Wbs$|71dnd`cEbxRWwjGefThakD2yKO|5)9Y1AcYu4 znqP^0q!8u=3|7HH-0=bAN}p!!nNW(yQAIJ(`UeR^Ql(H>bg6@Bd?q~Ty~;Ovs4n0+ z=P!Afm2*5Z!WERll1TxSL+6$y&@z}&M)Ey*gHPcANU6fu%%a}V5xX8qo?nGvNQIQR z5Itu3eiWF;VgZq~Nv!JP=PlA*Xwm|3Jz~&-PK!mu@QUFmgRFFiasvyn_yy4I=z#)Z z3n)!Wx^d~56vAsGfmIwh;yH9m-)qojYe-mPG?91vqtZtUP*Wk$p_hLD{qBmvJW}!& zn8B_A5gkRMmQwAn)#NEZ8J6WFJL}3X<#rw)k~^iU$wgEuE7Vo{F6j?~9;dXidY8R-6PSVCQ_N?NYn=8 zU~GbTMliXeBl!?VE9rV7TNge|p!p<03@fAn3=CA}T^?JWl|CghcAN^zq1KlIIM_2i zI9j1mF}NYki4u_CsVvON6DVEB5Em$2788jFpkhV;F=eKtoK>>WH?%{E3s)QboW=3j zD~T}X{Qk99WjkDj58ZWaK_fPd(i$MtG|Zr)srrTWomFJN&M4q=y82qrQNQ9qq|YOjH@ z1%m^5r&y*8$MRcW36^z6^^fNne|2`4;71p+8sI77EH3SB`6>P90Yrr2rx`^83yS8* z8~u_}&od0}V@6|}gH5>qtmb%4GIu>70g3+8l0{lWnePauSto(8B`-%>O8D}3e};IE zw2;bxFmS>(5BuiWPk`8BMinz06Sna@vL?eCeo~@8J7kcWotg`zW-=QVcKf~0i?PP9 zG#3<_J!GX~@|8dE>u20~CcQ!xUrY&uuIuWVo2g!j90^#bVi6C=6M4wOg|9cDeth$y z$ydP@tmdc4=nxpz;g#KFGNNftsVdLSLpN^wX>pp)6)jT)_bAeBhqtmBz7tNPR}ffB zVb`X~U)irskEEZ5r`g0y?I{^J3h%0S0*1&U-=%DK8$`4j(^LR|hDe zO)H{M4khYIW3UcrX#*IjFR#A<_4_CL--t7^G}gjZzU89ltv)I&VX!}7NLnv`SChjm ziQ8+*znv9O9S0g$Ig)he5`X);opEzHNQf|Es4z5g^cR74Q}KJe-80PnsJrF zlo!c&T{_zZw|@RykM&dqB$DaW9GQrKWIAaLQfG(s2{vS+pl$$EVlP_EC9dyJ?22JF zSe*W_93?5o%un;Qd`p|)jS?*CHKYyAQ|?tv}fhub_;?w zo^4WZ^32j_y)*Ow|wL?OEGq$TwU%%s+nC%elD__Mt-bFZSD}Nz#Vt7cTSq z9HF~DcaHnw!{GbeVKX9XaK8y*{y{UlLDB-jl`xmP8`;=vPHy=!Mji>SU#?}R$(>6d zkk1XnxNdK~g;gO23>^Zi7e3@~fbQnlzhMae?!sl5kzFXnE7v_^W;+R(T)z3l@JRtQ z_h-=^zpY8?*aV;)T~4LA;t%0T2EI}u@O4a&b@X0y2t}~r$Jo5u==eyjOc?WGbBAK_ zul>Zn9WW(Ss1I?|YpD^U$8~s=hGjSk7$56++cD8}rPtq7HlaurHpV=w7ZRGOloK%t zzZR#0s0&Am#DdY@m1Fxk+mg3vO>I9;5=%a3i*ucGeg9Rq`nQ8(G%#4jES1!fg4J48 zAkI1}?Uo1I6P-VC;Yehx5(WuRG?+Vq$X%7)xigrMp8@9QP1c@R$^uf)LVOYp2890^ z$HErK*KGuV`6+a=`i=YygoHi8Wy+L|G>8nY6DNf~n4MUO%YW0dlN5j6y0DS6%)ql! zeLQW@-fOfNS0Uy3-TS413kJ_c4?`51LXIY7;p5X&HPbEH^MLL~>fm7y9@=ksUERUI zO1G0AY>m{cEiEVPNI(MP@sGkmLGdy04H|IuIbRJ>aG_5WQQm2%M7WP;MIKuKM#JE# zjh{H@q4;qv-JGbelq1}kvnr(rw?ekifF=k0RO9PA>0WK4B!HODP%b4oDUVyKLGz?J zo3G>9i%0?J$Gxcpl4M5Y9q>cWE-<17WX3UK9zRmEe%uWnd|G>0j}NKGmKBl~8IPmk zgrx&0D)DY!;%~#g2V?GEoWELvPlR|Fqa+lmcDQuRI3ESY=xFyc6hOS+!Ke41bYk_yUS37%W97vs+#A|`F)~B2M|Td5mqoBZMNK#>b~npRk7F#kXDeB&eccp5x4`> z*qt^lBhFT$dTm2Qx<2aHCj-XDuwx+88~KE}FcnhcM0AY;YiiU18rdAfZ}Q3Gs1Lv+ zb5qOh1k6*YGhQ-dPr{Kk!%Zg$Tc{UR%OCmeri_NC|LQ=Q--`3{V^L$OytO+x3|2Ug?bq!I(jqw~g1sxa+r+X=Gp3d*bX8*V( z2Ug(ywnk5t%u4-yqI zHEVK9BgK317fFM!R|NmEFVD`)fG%@-u0u=yVY`?t&MSFM>L#982FB-o@O)wm)grft ztUn+PMe)8);{SH2X|#kd#16Y-5NwTUTg=Z~pzhQR>&%rHd6*naRZ9R99=XE@5^3-e`j3oX`8RfD3gYwY)P@yuk`v za(?qLHXho3lJ`PS4Z5F0Bg$P5X0aQf_tcf>#jnP|Fh(`8$#OHr8PY)P>A69^gedDq zcQLNl+w17Nj&%g`OeX-Mr)g-!=z1}n4`=}#3SfG7Km*XZw%HaPRvC58{g&1nW)DVU z34@UE^H26|NO2Ro)z;+u$ERPh$6Bv~7QACAJcn%v2DY;~M8=pfE(1rVWX_JeLAKYe1hYXV2RXYfMw0wvb1T#~26s)?Y$gSU7n5I%JZj|Be7kYO8oNFQ5mu49>qFC1X z+y;b;Nk@gO#s+!Um4s<^$uR@KIk((6$_eB*<;c^L`lhNu`{J11f!)8hjQ$aIT^?6} zXOH|UJQquXP9UA&!~fw-%X@$qUR%VBT|O4jz~jy0$DVBNCLsEaFTIS_$V}sQu}L>s z*82g>H)CeKn0OF~Yropg(2L|*x|TilCksR(|1ztyfg(=E(9g`k4>V@N{+b zWpSl*($-ExTMIJjHRNJJ$4fP**5?VZT4^y$$3W?xrzV$8gV`B~RWx@pJd<+SYNqTa z2f2)}vfqt0B7q$|&PR0~rj)AFo?81ADXkTp&^5T&w?lt|)H_eJIsqCH3b8FIr;mgT7<~;r*v}2Kaa|%T8X%xKYieztVD*^Ou_k9h}MIl$!J?{ckkD?kRg9o0Nk2I-*;7=`JNE^$+z?rsG%pA5e^*i`FU-$J> zU$%lrD_|gw%}8b9UWs|RB2!di7h=ajWSB7cMz(ML^J{`ZyN&!*)?*c^K@}U^SLvb< z?m7CC&TJLh2aH+L{f-2R-P;W|zU079dpZ6HWGH%H*p=J``gpcaW@_gR~($!WbHDKjmrMz(GI!iimWFq z*L?PV)vUgzo#36dVcX7ML!^k>pIjo(biU2YO6QZ*-Ma~PuO|-wgUR?^iJVY=WsQDw zvsMs*PA}iwteidpXn?(`gMopik-e#{nX`d`mA(1*N7w(hGXED%OV7;{9t0HPz+>Zeptk`ZVGgY+tlwVe%|kMm5edGdb$AtA`F;O{yNN4#EbHAJOXXxw1{{UoP_ z8i7mvSz*vlYLp;!5J6N$FK*OMaTqkrm~FGzYcb;7x&mObv#MpnQ%r8{$B#LrY-2sXZJ^l9?Zjr10k zbhN$Jdc)5mau@H&zc6sH!m~7hdWH6t`dQxvnN}N>Y<{+j#%=;McC{ZZrx)Ca8H(n$ z%(WQhL&np%WXbW_S>*2*`xhzxBg`Lae?Y~Dq;&M8r1 zb3nF2V9?9dILV=eUFy5YdQX(gk2JdsR5XPR&15*INSoK_=-8z)hDI(xYnSQF13ygo zM0(!}5m^0fqhyf;v0tIPqxod?>JXAxC%Tfu;Cjk@_Po`Zjlq<~!XvCpcod-p-UPuk zmFpfN*Rj6}j?w{DaQwUghplR(&1=`rh1M=Rc9 zwvQW?ZU1VU<%IchP7Yjvh41Q&Q8N1j@mfr;-6oFiu7qm}ggg46mDlvBzy2+}GqQ%Q zv(DfK`Jk>t8<1hbtI{;`t^>Ww-z7r0P!I6NV>yXPPdd2bYvYInG?Fv*GVeJT0U%Jk z&HED{+Ze=wb9eibBj)>E+&O_Ifcuo9x;bDW6N#FTsjbp-d=M3pMR6i*S`wy z-@o)1Tp+15HzlwKAV~N>ZtcLeZb*E9Yxv*IIxmxdhF7F&Ja*1fP1X*HGyUpV6mSQ% z#|hhAXe&@Yh$c)~r4)br7f4=nFOS~Ruwn)O)h&2Zh>t=TME{H6V1@Yw#@3}BE%@R5;4#PV9>8(y;_Pzl48$iZ~np1|0nJ?3klwtnGW=SH2UnHp;bSUo!4 z7W@ocq6jt_`lcZTOCX{#ZWp1dM!?>0KLwa?MMfY; zxTMAu4?7RD%W;57>ucw|rP1GpucR^Q)g*{h0$0t4tj2Yg#5zM*?lUtA8Ohlafxe(# z3bjTr&h(W~Sa(MLdVy&LU-rg~(!)@s(A*e)nA*P?hXuqrrk0>BAQDaS-uc!}Fux!v zvTy&272f<{El-b$g#$Vj-SN%(TIkZv_-2ihvFdQfkZV>*C*}98u(Ij^q9pR^tPgYa z^eH9bBxtB8=`{V17XQT?k&(*4Ue^4>X3K(kUocvumVNreNi&a$J!)|D<9aXgX7YzV zDMq_IgR>PYg3SA%Zs}Sj^*O%=idm#B2?B#5NxVHPBEaw@)84%>1_K1H^{IGS%*5Un z{0>I)E_~!j9sJ1RMvjXB;Fhl=)41w((xfL17TMW@WI-V$sQ%ofC|N3p(&x|A7OyDx zEqHI&jac;`^wd-K`xuEl`$2qOjwstr+Ltur5cuI7=ZW<3^K&8WYg}-foz%BlE?oZ^ z34C`!Mt7Zxw9yv3l}IjV#t9{83Zd;Xk@t%dMg2zKc5euoc^rTRaF&bQm7FvJtvC0R ztltu#TL@MLXmm{^nX^#`#C{~r)lKbmB&x9}X+vt76_+;{H0StY-RSJ6eM#%e{Oj?6 zbt|@)Ec!&yQb~ux3SryU07nuFZg~_ND<65xdsg8H3HMVGMnWoR>NE7I_RQ~+_=1)e@gp}dp8vEM zGY!DqHh2xKFnuA_$o{jsENFT*e<*1sUuL~s870nF=5^04u+0VH=dCl-Spx0t7*4~v z?4Fvy@8IZ=t)FIpb?4Q+m*Q`17fVkU^?A0^kijiLEbSZ~B|5FuulFz0xXQ`tM0CLs zyB(Ql*^}FKndoviYV!tK{^YG#BLUrPK`?R&KUBXZ9ea0hbNl}+neVXX zesC}#AgQ`Qr&@Mu;Ep6J0xHXYcM<=^eQstQg`|M_PaNscGM{}X&|nsl>%YIP%vs1N zFfdSCAl(9_6X4+VpqX?@$DdqG(RhS`Q$#BWG#>+WC|p8B5)`rLrI)OQ=JOc$#zyBK zN@pn}(|P%Rh=cfk$RJbht8F-?dUj>&PZ1y9Gj_2FmOz5RSZ(S*3nNw(m}=VpYM*^5 zJ+ddhSAUP1QX!_u#-cBCB-sTrT5GJ7wvOCSzOT1)ee!Hy)qQ<*|7!1SgS0ZE}cU)u{D}-a8|LmL!w<9oP7Jm+n1^1X`O< zpyqH|t?SZ6s;=RL^JOshaQJvDMlv5g3Rc~O+LgiGitAo93@UFM?3 zAQ|8EC94+R*Oiyc-rK*XlIpVbweGQ1KcP~FD>f#9#rMzgFdDhk(A;z@95^S|@Yj}E z%d5Y1V;H~yn}doV-2+t^z;Fs4U1}YDc1xzB6>EB2ZrMMx>VuQ|t+Rv~l&Q1sHNzou zHKkCoc;u}!`gA=ltGY3c;ayq<5XwJPVp1gT*I;3O`V1<9-soUp!OmlPRj^QC(xaK+ z+{f9V67PQsgd|0e{_gfa`CDI0rtDdUyTwTI{)`i)=Ei2Xn1f-=0JtaeB2+k|7#hEt zlH=nL{6!t`V$tr!N=IF2|Xz(PYr2>Vt(O|Zc5lid|uI@{_fu@gHT|wwW#54wWM>YNK!R(3zn5Efk5L`NIC!rbfHczNp8>_ z_Zi9}93LgdK`3_t&h+n*w}Su!3`epAJpr)SpDOzO#!$rr2wMXP(xJGTTLMo*= zqRJrQ0?`c|BGOi&{jy8_#5$a^Xbt?xsXs-5MyP)sN3BIGqEcMhVpbI4GYnJE5Mdv0 zqRde&&y`?nXI?CRr=*~87lqkyTC(32$LG=<>5kW6p0we;pZNcf0bV>RLD3Ly0R@oCVO#4A^$qEPRVX2#Pr4v-Q_E_f zf!nuMyMGjKS^sR;(v^GtAshiy+3sp0ZR9(#Q00}xB4Xlk7)a|4$At@HMxjW(C zU7Z%F7kEGeY7+$s*Y8i!miF%dBn&8rr2^0p@FPH#VnKRoP&0ajLELi`u#p*_KfHOC z5fBmBJWYoReqqxTixfbMp-ZM5kC92G*WRA2y%MlGd3?}zzK-~e{Vs`00I;vm+07K z8DqfdUjgKBHLd7)41 z{v}8aC82>Gi19%nU~3yO);2JBXb7ft`u z^1I(`r%pcO=Qw#wK6zJ71axc7t9yL3mR+o042Qy=)zeXFErK?1H1N`C(d-7Axu$E&J z?nb~qon!_6c}E-3HXW^jFbqx!4%aTE8bun>xewW+6d6Zh{9;+0RF{ZRH5IQDPKo?% z^Tp7}ylNU|#%yQgNGP5mDj2s!7be7OA{j}<^MK3 zyf_(uPuiRLxq;}+Hp}fml7b@rN4KYB!E;BC00L603=I5BM+r;|6vPDlZ|3;_FD22H ziCgDJ>pIqe5iFoib=6@ypLOy;f@i1^GXIeZ`becnVP>O~%2BTi*~ZxRz0HWNF3MVbUyPYXWNRu5I1UmaDFoz@P4<|K0gMCEQqGi z8q2<%`*%5h*UmG}Sq-0MJ;TdL%w_h@uBEQ_$(`x{_4%>e{_qDgsMHgk2L3wC{+3zcnTkG^er&)dO-DKyVqVT)uJTwzyJ||kG2nSk6uo-zl36s_ zOcDJ{dm@X7V(Hy+#ZI`NP3z_1^>zZGF;s)-_S8qRxG6- zCM8Ra2OAiz*m5@}Gg{D31*w!ReziVT{&K&gB}$Z#;NXBwg8RM>Pi;Cb)jLlIv&TMG z5D>;%u@6=?$Iyx0ZJi*Sm8-Tc*#z44OICZyN&0Wvjq|w6C>Nv`Be(+~^*D!Tg%edk zA!{8P*%2VP*<{TdXrE)l0@YU$bAdN|DW!(##JxIO`Al~(m}M&$nGymUZFgk}0d+$- zpC;ZmB{$tHau#ZTfHqIE5D~3~fj9gJ0w^`6J6uwCqr_pCZZHlYS+tqT?q`rWQh9Ot zf(VJ4*R&+hwt?<{dQJggyNw;sBQ18((qd7bfUsQiXS@G+#BiQj|M5Ld%`J?22V*N8 z#r^Zl!}|z#A2R}d3Mp&K=-=pFvza=zEWN>=F8%qn;J6nks+P4@ftpO!Y#RzuUgJ}@ zrSc>Q#^+&h6Ir$PDE)=NX#H(H#tUp{7}v6PBIXQqDUlHGXazZ-Qn_GrpBs_waV`I( zHB1WsL>nXOW}@#)mMfN!!b#g92(mEH3`$F1&O}1`k@bR`f!i5jPeFFmi3)Er!JE?2 zC=b@$;Y5xdoETkr*_GDbad-M@$h6Jn@pNkasrfOG6^BnLbMA8lRYAP|n@{Q`CSbgt zOZZY`(l#`~Arb~i>B4P|C)7SB3o{4lm{jN*-F4c~AG9)&2lb@;#}irSg6fW;`%94r z!?e4ikAegeK~~X%bi+JkLN-`jUTkCLdV~f9vm5_?;ymaH%o4$c zT{HOLhKB}Vr(@%Dw!dJ;)oJnvGYw4D{H0g|vC{fh@*@Aw&R;5({1ya5W~`3a>w@h5 zS)~1D;}V>dEEKE+W3ZOlH*WXYp1G7=u{vwuUwYH>rqQPw*S%4i7u8W)V6T0RqwePw z%9v9-jGGqLvPq?&Os32lAj&G(>vl;wNNru z+1yhMhC?4n$4;O~oa$=|bj*HJgf`Hjyo! zH7&62qNg%gl4=}Z(G(H7V|J#Fp&i=Kux-kVY&Y-bYXTJ@>l@rcr*B79XF-*cZPu(X z8Bho~_KrUesab1~>u0NkL9^T}oHz<~=tWbVbWU%lZ6&IRn}Pu0{z|~Et#D<4OJMTY zN;Z!k=NWS)=;q_0pg0(HN?6svnqHF} zd6ZVKlJWxmG5}akKlBnuPW6%efRU_6>BK{0c}|>wv5RBB%yO2%(AEWF$E|an%x5rJ z{5I}_lz()HYpD-uVCa>J3v#>=a>EPTHN41*qC!2Dm?t$~WW{c&sxgd@$xB>WvcC=} zj#N+C;gkI)=&apfQei5J;ow75eb`c$hWX9AIDlza<-$xPY6OAh3d=-@fQTb}HHJ2j z({E8PT2zisZ!?um!*tn+PS6M|mJ<*MI`hT-3~eR4zqV(q^kn;;egTKkFW*$|iZJT1 zJFAdrBaxdOdn~Ts-*zDF4;{i#85RK$bNF*W26JB5caxM@B8W@PK%z#1{Z5V;PFzt} z)No+^eVkXX7BQ(lGc@B0+5`(j(#Vfrk?f*TiMMi?c?^x}fAvB;x2#P2$*g)oH^FM# zf5SQQW3{yveusX241eh5ZHGGT8f<<~fML4aMF!XQPl6lDvb z@9=-SVKBFkQXJDOd+k7$hf6=tC2fu{%eO}Ckw?Z+5Xj>rx=h%v%~NkNk{n|#b}RMl z<8h`LWDU}8!Lv}|U%ztWjw8mE8BTD}4&C-EFhsmx!LeM>IuAGTM#)@;#gFw*@3X5P zD0oHdU(+rb$Q4E4A0}gIWvK!dV)7cW()qdV zb&Lu4G;-H_Sx96H%UmifM|^Is1$m!bH{hKWZah|eyp%vL!-Jb3+gi5C@rm-VwUWe9 z9sN!@MwPaH$p4&)tT!Cg(7NH>2%%u9n4O;6&Xd&ad!+?!GS0Wql!1q-vD=$Lg>MZtKRPN=-bb>tvuz0kVL%h?|+fxT@L1DH+Ey zHAjBc(`OdQEDh!p@%NBeLyZ)y>Kb>&%s^Nv60T^dCxta}rWpr(66xz_T+TQNbsGeJ z3iexr+?MhlekGH^RApr{IGWFtw%+Y-$8N(z@+t5SW{_40o~f1qMkwn zrr+{})!w5j2N8h8WUN*O4FYAjPiy%`8N$;93{A>lI~fEE1vh@{H}^3|!CJpjGn$@j zBs%vC)F|{WTptLqIJ0o+K;CY_35F^~6~dLy&t=}$!KTK%1RZ5%wGNaB=81F~gHIWK%ItEk}P^MXngm87IJ^P)}4T!?r16Hc3&~=iCM2 z11<%87#HY!ml=-n1ce@6bzQeenY5XdSGWGxK!=MZn`S$!oTx3@=2CDxvM#e*u;LYhW-NzMpLT0Ooblci<6#WaRXj3c?G8M%tT z6yxYu)g+*i?WUk-{s)27szZ=C+|VQx_*M<$hk~`X0;rnae4pxq{lXTRsPY94*2;H2 zFybnLN(6a?iC?M|=-WTkK5JW1j{IV9EkAxO%YEhvP{;w8G5_*7F&6}xm0~Uv~APeYN4Bdi@{EGTs%pEmTJTxU+9%;Bj zNIzUH3c*3v-L3wv1JM*9mp?x^3f#+`YVG7sG+=m?ADWA(GemRiWx4;OS1y z9DeGU&L(PM|GldC@_8cMHIq3Vy-cV6uYwq@pbi_8RdTlPePQdW@32sob$oY|!|!fk zREn>`*WHPkavz3g;d3MOvRRTxFuZ;g0YpACzOngM3ldDd_)lYyL#=8qBQ(TQEG zU0%#}SPc~QBSKH9VZh;uoid#u6nkG?nO%}yLpEs1ye@?Vthcl0rr%%rbRHsncpvp&ymlTCI-dTJ;lFec%uebhttOPY0@!2G7?8O>xXy9z1XQ0Du$;}Xzz;EiVZO*EYQW2 z)-&-K*Gj(50$d5Hg^87Gh`QVf+Ok!+er!z)mBI7Uv;O3yUq46MA(ydy{R}I=-(18b z4%10Uzs$?xkke^ra4l;l;zZkAeg&3IV*eB4Z6uriWPfl4%X4b^FeaxupU||!Q?pRJ z8frmnbR^|0>SDu-?!WY!Cx34nSKp}|an2`pK=k0U0Q_cnIHqp9w4Tto21$QGpgAPo z6(G0D!i;)zEmDnC(pI-i`4;Ob$A%XS2y85tXM3ro0|B#7Ba<;27*DND-!7J!mg*Fsz!hgnsw|BKYZ zMEK)h1pv}L{@6aWA;wAp3|)|c>OCig0;6pYl|Dr2A02F-QgnnN1?h^=U~FDW#Vvlm zF!PPIyK&ItAVj{(00l1A--DbKM^q)6lEwrRB4PNL!8yfT6D(oG!CFJ-kIQB3&&@T< zRan?9?1TMwuyGU^1kUm-VG%(IHRM5N z;obW59DGis)4hfH1^b27%+v$$1j*Q*iux%LxT=ySjEGSUgZ6`DB(jR89KC4-@JtR{ zpU>t2XLa9~hTX=*)V%udG2|Q`FB#iaQD3saB$A+&ozUYIkcGcD7V z;%%;X1lAspjgx`uU(NaJ%8=7Ut40>sv042XKy@seM9B~|A*1Tkj|T(mxqf_qmBK`n6E=Q}Ey;|_vpA0f&lJ+q z0kOs`3n&B3zSI!thS=v*k>N_dD_#D0+cfx5keY5~5U8Hsfw==FIh)cwJ+!NRYlL-a z*VUN0r`BBoD!v+&w0Y&L0=mIq*EO-h@B>kiOe0FyGY%`pW1kk9DyKr05iWBp!q+H+ zm_AJZ11QRc?{EbFtFFGyd3YFMLmQgAvBv??_VOdJsU5CG&oFCZYw~yBB|dNKXVt;| zzyB#6{my4j=&S3Gzn|PUVgJ8kIFb-9Xy8YXAkP1Md_OCRfZjX`26YJz@gJEEupJ8O z=l`my&7jaw!QlT{PP^A(@Z^9oaQ}NJuzMW?AJEY<$(c;~lMJ%%Nijz#(2mJ2a0?=` zz?74n_K)h``&&XnMcB6doc<$K!d;ewx#XZhGd_}j$((HD;RvyUL;xHEEc%P{{c?6U ze+YRFA{vAf?TItR!O8jA4=U%kWED_`<{1T@$z(@6*_#8e>gwwK1VuDuYCpwB}wx?IqDpQV>b=0bw z{p#}Slw$*1J2^#WV0Q_Mh!~R@pt@utY5=sVsJ^qhs%uINw5qd@+RfNbLIuV?xLFLo zxJ>lM+C~B75u8Egl{vc;s=_jIAK}Q{#C1ucCxM$;ayUt>mw7LVSqj8!TcTGObXNEv zlxgZ-eF)uH#Qvm7Llr#gPWPPJUTvc-xVFg3ZoX`rK}aSSs>eNh+BW_^HPQO0Vt{~N z;M+<$g*#kDuq-onJZZncNy5#&YR$^IlKVf&!?iTi`1Z)ot-Sn_+vDeUG4;1nWA^%p z-bhRzkxn*?5WE3yN^0(DVzzkcTlb)c4N`|Q2-Ar}$)YdM^+ASR*~E2J&c3Ff#Ma5Y%QM!>wQG^=7VB{BV1({17>AwSjd;53A77+)Rahmb8fx@aIDpAnXCUvp3N>+csJHsEYY%k^}BO0*IP*f zFW$G(Cid#nC-Rm}H_n=VxBw_VFkK<fY9b8iVH0ySk@I z@!Tp8`{e66kKg0iFHl~b(Xm5qfZyU5khaT)aa6=kJZRt`du%g9_5f6F+_jN?S?g7) z=@yT1wtkiokDN%7_*Cvh3O(YD|K^tXTkfaAZm|ZY1lSNSf9M&^e8vZvuOrAiioV=Y z^k75(K{H5T)rrrte0r;J*0weNk?T&Iznrf&Q~6?O1))Ko-&fN7Bs45=5XY4>je|5l zO@!2I$jyH_XNF!LGogoa{1ATPPrYzHUwKW)R7$SVt7)Qz;Gp#|^=V?t)o)*WwKRUw z{ttf(Y1`ze5};wvRsSKw!akk+693NwP*T<&NZ9*u)w;OZ{eSj$B%qfMXFy?OC~?65 zZRk!@ruv);Wh>jjs8-6S8ZGP@^OyW(p0Y;s=DqsaR9}FJH;g7uHpRySBp>pzUjlk# zRDHN0(SL{ z(+40Gu3LGm$~~m5`d4kRC}*ZEqvg`Mm4Kl$P}RkQoj~NNdb{f@5WY>wkBR}MsE6eh zofPm3UONe9Uj0+gxS$dnWL%uqMi{C*G9c3h1ZfByCtx*dpF#&y#3d}Awxpq~*4%+# z4k(LlMTg*-X1&wFTKg9~jGU!DX817flXpFmZ%6LMSZ(aQuiXn>2h1-fH3O7p=tb`#9NF3 u~y? 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�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�Ys|`pYHcEOwPO{~%2Z)xOR4=6#TB9B;>)f~`

hpcxH?_T6)>2m1HO?kzQasBE`Awfy6#hk5pNO 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%0DCMmjR|@9AIGbCSw0 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%0A^`%^8;9hXcX1eBo& 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�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

Jbyr~mbubxwC_>4OO8cPk2>) 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%0DBKk?YujRsbl&+S)a|-G4)U{_u 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�fMbVAs?^aDc!cbXASAS@ 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%0A5+sBCzKfO^O*laZ| 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

    hAY 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�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

    TCi+f>8Sa%vPu+zy}E!#-x zU?cW$1k`WkRCaPB!#}R{G*P8fQO>Gts_JzgN zKwV6r>}M~+3Q@L-_fcI5qihmvIY7D}ThoLtlM&wrCB^}CP$4znP+SKbYHvt(?NF(0 zMm9a!vOiA*k9%zV%C_4dDgjXd!P8|lA=wcWMq4l``vgf|Xn1AY?XRjrr^(XDSlT=x z#)fZ*eAJTln~}P)sMacfA@rH7mb!Xq0TeXH#rM^9hwjnPzt1a+Dx8zf1U6|~WQ8@- zIl)#2kp~I%!on-xZeMUk`rd-LfQn8<^dx)FiSA`{F4surm2dYKZbSTXYxU&JAZp#S?Y9D%QI5Ue@a2MrCO7oGe6B~T~s%g`hhmKcA(!^2WbEYZFx%` zY|2@VTOaVsPTarB?G?dk%n8<4X&`u_m8B;^L0fSf#JsW-_ZO9s=z)sPhCR1vSyn2m zh(ML|bo+PTd8==KioqF@Vkom6nQWK_4qroPNY}2@$19I>pXymc^c)(Xu4IQIJQjrx zQ3L4r<41nB5`C3UH2$_vBehg zJJIqqP48U&mB;xPHc$&c9$(SXHr(e#|T_1;L|am_SPRVfQ`mE8FK@A)``S+a&xv^-CZm z*k5h#vFraiGWhf7{Yx$X|37GG!A?&zV7aOdEDsHtuD!`tO5s6}|M7QyY5MG98d#_m zi((?hc1)K+&<)HoY=0i`aA4LCs z0a8h^An;Wlqs)Q*WVwS+ChRDwG(^ho{b~EsdbDF^@J&;PYc}laTU5v#uXZFYeHNNLvL`iPVD>iC%GC z04>@$V?JE$|3bPkOk=XnE`&mYghhmPovLDg$MsU9K6siC)2nMKKM*8*ndRJvb*6{` z)_8dkQb|YW!^@aoNLN-X{|a>ogqUTEump7K3HkW!4rD6o$AOpF+V4jb%Qh+Em4Je3BAWeULNcn^4#vsv6LaHd_)0#&UnAuNL-5o&j9(wK&(%)a)+<&pU zY3_6k+dp7@pz5~paz(OgdpchJL3Cq~+JSg#y$R+lf`ikme2lh2EM(kbUN`0?Rb520@mK5D1_J2?XJpp1f*n>dTar z5u45k=~!fUKs|{@gtF}-T9?+;TA zHO!*%e`&jxojY&j_)5I9dpWy*EV9TO1iW;Q?RaF5B#-_0sXD(iL4b&#a4=l>hyJ5u zs6aNmtH{3OTnw1J^qoh5TUg0wI=f0hx?)Z4d(Yky6H}IJZB49dX6qkmhvLc?i+iVx z>N{LhGLSb2ChX!gd=5tv2{LZw# z=Nq}9eamW)bOBTa3sok6v@aNV1LqCrr~*h=7MHvuoOG6jzx8zQB|16+MvZip*Lbu2R=KO|l;$Z5Plc!vcAKX7@(LPO>NoC^@wK zyh>kwA2)#sLp{>HPopZn^ zSUnWL649@}y;Fbw?7-`G8^Pl2nXUGQHJ1vrf`su_&c;McS7=kvA#~Yr-tY$aT%2UH z~cT}SnjcHP2MuoW!V|K^_2YS!ui*CdjCDgxe6N2?3cQ*R-j5O z^#&i966UCf`lvr4UAals>~P*;cVE5MCFWq4h`*(Vln>3A{>PktyRmoBw~zs#P7u8u zg9leWAX#(SbCKLa>r(0V4ZLakC?99@j`9dP9ZX>BgYLg zPKK9#V<*)fUZQ{e^j}wQcq|o=lAYO#!d+kGBcpO?A!i02G5z-G5-M4}2j*V)$S$DW z8z-N$%)YujyZbb0H9l4L;)R5k8jc2CVH)+ivV>x4P`r zx)vF;?gnO8&obd}@3eyXo*Rs{Y?RCgVE6(FkrSE0f3Z~E&!PCOL442d9OT5NG7BU_ znSM|Rc!J4&MfEQq^Be1Bbhv{uEOkeM8p3lP4`|2!JP7`Ld``+yTl5>!7enOa6 z(yu6g=2|v`3xL+_oY{+gL~MRNo*yboUy$xR0JkONDWJVQ?SZvfRy%VWZ1yytFkQLD zXy#aqT4g{kaQ8N-L5Vse{P;SIA$vi(^S0@E5ARhK60g*as3NoI&y|%v-C4jQt7H4e#V3mFl^F<|_QAmyJK-JFDi<=Aq*D_0)1{ol2de zTIN{LoD!%#*;qYPtr`wP9Es_t&+Ep0X64=P%DwEFqA@$ZsfXpYjTz@*mca|tuU9Y$ zPJM^VjGZlRgTxFuv$t+0_1K|hR2r~hu<}>p ze!l}MuU=Xe^A?!AQ@pcRWa%*>@YRP4#P#b>{zi+X@3m% zDx9ShK)usB@7W)0VYAkm5mG=6YGdLPgo}rmc%O03!&*0P$$80JZO5hX3)QlJMlh-h zMO>tZ{g6EK<@1f;!ily(#I8jim^_0m1iixs4vSCW4v@l)=+e8cf|ZIBl5Q=wV1zAA z*WSaas{Kz)@k(@Ad_Hgb44CfLe>pN5M!vW__1@HoEzk!7{0dFhTlB& z4SQ**E07>h2DE0uI&B>>c!|qZoa0dgi10b2+*zgE1)+^)51r4QQhF1A<$T-3$Et_d z>0fW8J{miAa*Vqf-=iv^aIvIsEL_ot^!|MVQfIsIN_S*TSy!c1N5r~U>Da?<;ak(q zo*iZInmLDKGb=M>knok6TI7wBFV5!u`xVB-X{^vr$=tG7&TcEm9+%*w5e_|W2wuUj2o`C46!1dEmJDzT5IZ1zjZwnu-qwW9ZjRgI(u{ucbd%X(;c*dCB&zC zzdJRpBqFv0KH!w}HZ)V#^;v{1(I52FdzIK5)ML~j>{N)~Qb3e{Pq}k62@w6?tknOl z#BTrke`xF+4elnv*;EAl93m5A2Ds7AbIP~fpnra|5c?4lyJJ|0*d@WaDkES|Qit@; zOea2&GeCN)B=ivx3{-ZDa5v%>z@%X#x?V3S0p|5>a`u5JU4Rr2A~tqTW{2ot{g*7n z)Y95&IUV{xd_a1C<3{p%m0DPBNn25^Y;SWc?X_keHePQ%KzgGY(<7v;BB`~E4;sj| z7&{b#5w!?JKEEww|Acg7=V~_)Ap}s6AgGN!;|{eiS?(?6!?hMLy;Y<7Y)d7>cw!1L z=sa0R5PbKZGyak({11q3*pd`PsunT=gTo)cI;_LS6Cav?Jne7O>JLaaY$<`ehLt&$ zVz}qXu0rseyt?VFoguBiy}>yi5#e858Mae;caJQ=;t-pWd#@RL`t88=f#`;D&)zpe z`(9JJZ`o-g)I(H*{CmR!9uM3*FQ(7YWb>TOu81Z$V=Ue?>6(I%-J$#+5WR7|_PlR= zfDaS&{xv;+xQoG>Yh{~I>25R9BBPEcYOi6v1>aeT^S!Cw5?h;+b^-u>NUDe4rP}wL^n2V z&k>&BJ^02c#SORxE^uNS~M2n7mlBRa$LfgT0kQr+GkPUdav8 zZCiKi(L};ZX|T81Ft$C)bwtlcH#sl)New}~q*XJM19!tQYaTpzgY)c%2Cc;O%jX-* zBx8hs*+b@Zs;-*@o>>%HUn3>$@c#D!>BcI75@~=RN^1jwcT2(^Vi5YP#PYC8c4wLJ z+ukv{)qwxN**LKrKW9iA>h7pc<|RikM09wisb_O0N%+oipWCuRryOPF{QBjc0aecy zKDri_$lGF0UUHW9gUFfB$fm7Nn68{UTXA%MkV^Hz*;$;cZres~+E-8CzN-bMw~}(7 zeUk`@0Mvl3+H!9@=4@5R92p+rXyHKgM(XmjWUA`1v*`kLcb_uLDW_ZoWPWMNSLQFTzX@&y9R$t7LIcVUt!x5 zX?bGrj#s)rf4QNZx+3P67ML~#0J>s?KNuZ6uC^{mQv#wZm&{U^6@-;Jj6)=Uc8GCm zgVe0>Plwh5yr{UcNHGp!TIYr&n4n4cUAsjq_)-1P-}?j6jYWdEjZJKdLTO5HUh3?T z6!FB9pYH{K-ar0lz5yzwT@mzg=%M16e%lwEruI}8L7vSUpwb)pQqLhJwp^!_RG9)) zvd^COTy<{jT{^Q}f|45s)euR4U{3;nV1vWu!JPtvG2~|K?O~yAP$tewX&gkkS%0m~ z3M?G}_hMhoBW3z|Utw{fvsl;hmmS1gCFGP>u@ofGe?CFFafPy+gC2W9uuF5Y!9iaw zmg>PY>!G5N?*kVeY@x#EtAZ)b7B~$#g)D;w&dZo~dK3hgbR1i)aKI^lB%H&tp)hA; zDjuL>`;PaOU%uYhG)R&Wz#$7uP)pbrSl=9=cb%Og&&u+bH)<=t<6+l2c&>G62yAnV zk>SV#zCBe>S*1Yq)0H?X?w+a@XpDRLI5qm@e zpln0l@U6<{r&O$tqiMf?mDuv^v`2zVOq5L=`ZyMw5KGmx;WX`#2M9zze!79Em?i=7 zw`rx;Y@C~I83CntP&Yp^Tp+R=9tr!Uu;Y$12SytpQF=?tgtumL$VmFwwl}iLo{w8; z2&t^d4Lz_MGP{2_us67=n(Fbm&3F2qJ%={-q-d)(&f40M^&M${Bm58Fd`3Or=YIO- z2A!Pj*TICG3D=#LtRU8R!#A_Zx_OK>x4m+IkJG!Y7#rT?^|rgPt#QKix2G z2b%3tVyr_pw26yyI&R>TMLRUmBcdDW3h>cb4HAzkGS>=?WgTsEjgp=(OXfRWG@lLI z_F@i&NZ3*&h}YDAbr(rHaz@%2(G7VEe-skCp4%)1tQ*1&F|Ij%02I>^(2YpzaFJ^- zwqLaF86mBN3i{ScC~UQV1ayOp?BZK8D<)G|RyXuWmdOrr9nR=5LHxC4R}hVyVZv(8 zL@KcUJUIdcV7#b~^V8BhxxddrP4|X#PP4bM2F{sJvE?CuCG%9yIcD>(H++%sHp_ZS zJ#{EIvi>mzDh{f9jYGEmYmKgW#}vJTV@HTJpPcZO5cxBf2%z?%TKTm`SJ)Ad^iX!M zWrObb6@U_KyX~MU*YmEuQ}6oBX~*IlM1_Wwi2Vz53B+6095y)8`Qhz{E8Iw=sIW=p z-1woZa6WKM@(;3a6Jb)Hg?D* zZ~$?C#V@7FvVph)KMLmklx(`zjW?50yzW$TSZy;AzVbp+U{)={LmYZLyb>4hVDbN=ypMILxp}##AAf$MBJevB1JX=sa%@{~BKT$464rBa)aN|EE$#i~ zhCxj$!3-9SeUfakt3nVs6De95=L8D-fV?n?&AWSwC1YQl!mtBqNz)H?R6hrydK?{sCA635!j-r2UOU}aJSyYyA@70#GE zRx$z7l~oFzH%Tn_8p_VXQDk)%S-F>RPN=j`U+qd;IvVLaUK2-|;8O(;Q|JurLEu z*1LRLh5Y5;|Ks2O@@CQNBdW>njSaCY%c}taM@8kDCwR8jUB9ihKTv^xywOU3;t|!W zPg0TE`?A$I^%pVTo6P~rmJT^d|3vlI3#bZwaOxV_>Z;4O#fJ$w5J>yb9p{VA+-PW&uoEL&iC zZss&n4wJ0I+b+I8^s>7J<%JA)Ew3r?g(Y-e>j`#2HmSs&Xni)40`VLUzZK)l#13^b@3ABpWZ~TtiGKA(e>z z6mcx;EauXVSk33p-;QKvPDV;)OrLLW)nLS#b@DBGdbM8+yZXR&Bsr&o96S{{Sx4$F z&B6Ma!mEr--gOVI6Y&8Vun$kSwVeC{OAPy~#Qi|u7Gt1THa-Nm|KCGDW8*G|1 zFrY$v{vCNHtP`u%X~>s73&|uTGJ9z@Z>$I8^}^xp9oE~K)2JqkFIx0@lh$*q4SEOy zdv?ng?vo$5j(kS%qU9NB_(roXN54luRwHZWAiaBVo%oK31feV~lkYax97`A33!kcq zfw10xf$Qr7#ohbctu-?O7W97ePB`7(nX^!)(+IA!yK)1ruSdS)Y@vjqb+8qtvcf~4 zMEaB-J#8uO!F42hb?{Pbdgrre|9LZAA*Nx#by+9$6W7cCPEf)!XGK_-kYioeOE#U3 zgCIh(viwdv64eozExj?u3&&CT?y`5OB#v!t!)z}7Sr0T*!WC8zdzNousNd1ZG+uM=%%_871(S?D3 z$S!OqU_p3~6LHIrtJnE=Sbv;&!tg#!o5KyyH)$}zMql`ee@5!Lvds8^b>fX$b2QHR z3>Mc+eqv{VK;sMqm#db0R_g?{;fx^&*8u51f+DzE@d>9uWg<}MmO^}cdpZG&?ci}i zVdoK71mnWr5x>akg@Jz$>z@-JQ8cxGqLOB6Z0L1S+4ERd_pSN9ebOha6DM)RCY;gM z@D#J+Myj2ZcT?S_K+= zHO}G15+Ugne8Q5NZnYv{ogiDK1Vo4mzTir2kY%YC4tigLxEe1;k-ft@QSj7%CjwUx zWb2Yk*O+oyh#4BJN|`C%5g^`91PG>>+juP~SaOF2248Mt&9TY)_Dz_uPVB9kyp=qB zh)N@=!WU0T0pQw*<6@%g4_Nx=wVXUqk9HB?8rv`Y4}( zL3*%)T$n>hng^&CLI!>)yI=}`R7Yx9ya?c^vcgb{Wtyl)=lTNGS@VuBc;XbQpGnL^ zvZfw~xP`=>Q^^ptDY&|;%UJV)^2|M`kQ}tm;*G=1E3pV7)s*TS87E-Jme)TgDx(He zp?BCmtA?B{6;~R5oizu}Pu&HE_3x3Tavo8jm^p#G&vC4n5kAeR`5V4}>lW49IFX@k zLEuxkHZOcluZXI3wPc|wvd%6r0M;WOp?5@vs2!{-x9E#VRLC9P8|mbw(nagW2dopT zmFEf)1{Q5}FRVk#%6S-}iY&YE2YiS1&xzHFoaoq)cf8lpGCMu#8DJxVLe~qwvJY4% zR;w@HIX^KLw%<|fk7%BM*Qo3=t9NYq?r3dlQm?5*!- zxUwK@dZALa^8q<}B!mT>eCz>1p3UJ$JFR193Z+s3 z3$31`4e9zegyRE!r9GCeV>d{{lNw^Su`PEhZB5q9C)1X|Q&2g*E_*Wi-GyFTTSBUv(U|8mFoTnO)j1Btx$;MwgHE)2c?1MJAD1hHbk zU}cSq8pIqn7jJI7>va6v0b6g63?ILvVk(R0EIV)q@Nem$ap7~SwA#?h4nzq|RGhgf1BqHXepkJLM?BZ{$x6tUTnxP7Djr_t+rMrUo- zxYq90hOkboR)u7BHT81qkTfvD4E-2qQ>(!)MkT+)I-(eH{0ci)Zc~eRA-`sxb(wEf zVz6E8BCHdug+MUGC1jx1)^hYG1k&VV#wPRYj=gn%L^0+b__`^s4$IRmaT$@-@DV#c zXxb@8!aA{9Iz}z5bpvHqdN_5rjL%ab_9eOPM|}HiC+?aN2-+C4ie?&0R9@rcSkfBM zjN`)e@&ne1^s^S?R%jtOoImeCy3FursiU@lU%CUBl5hh58xJmz=Gr z8@rEx_>j5t9p_No?8_V9H-}q_BxyZJAG7oMYzOK{b4HF{YXmv9;GQ5_62cm!7uU>q*B0vyJwtx@LB9 zHjA!e!BY0kfpQg9g~X1#>zgP2egf6-h4!j0fQ&|+W3XA+3|XjgitdirJRPxHNUd4p zvl9b*=4f%7VTBMhA+T{8gL2kfmpj^|otP`M)tQGhta77E8p=qO;rqUyQd*Uj^cExvubtEuwo-Z~w z9dV%ayWuZovMGs=WZRCwrz8Fks(s~uF!lBuX5B02YMTj&A2iwi3?3<9iCMa-qZ>?H z-XpSid^&`$kV3ieHTnVSx&Qk*9vJDfPdJfRr&$u1RHk5be){uyt~zUwomr* zh@s{kz`9uLbMe}!bRXHt>}r?dQX6|awzb&g^2Q>^rVAhmpldbKPF{`z#~7V%|@+I;WquWn08` zWW91NaaD!~oPaTI&+3W32OwX$Z)Mo?>t9E1O;fT&)iZ2P^A0M*&u%_80lml<^8nvr z9l15d=K}qzAY+h(f7B+Y88BdBkZXPI>{4ejJKU>&(N zowbL_M;-`6q-iWv;J+aL^E7TP7zpc3RT4A>RE}!FPnUrNLU*v}W>_%U?ya{|nbC^Q zG#1Um8OEr4Ajo1vHcBObZLMRTzdjwg&DG#n_95W^p~y&xp(P{wJDPA_4Cs7EbwcZR zj-P>OEe%mZ=thZP6^wHX5hup3#`F1%H>O)yD+iL?JvSBYxhGqySF8&RY^SP;>WEjM zAhfR)#5g^)I`1XT*j-@R0i8bfxQ=Lk5TTGBRRhSMFIcCz*krRq_4&)+pO3iUIhs#Hux5y!V!d+0ahJU4hNlS0yE@#=kT6}q#M;sqJ&B|_n&fUm=!i`Q#STCXb(&jEd ze>o9BGggPC=RE`(TG3QAxiP%Q;(6IR#Jr|Me$2}SfI8u`t^vEUX`YNlEzFpiycHpU8%P#<{Y%| zc=8R`iS@#No`?2=JiWcrfs-zpL1t_-fr`DD(DW0R9NJ%D)RYu|wzZH9CHZXly<|6s zsjd6t4cCeFqGn#rM$avarx{Tznft3}Kl=8$=T#2vuNqin$Lh)0S<*H~a-dwSQb%gs z7J=VzooUn`rTfm>zk!^Sa2R>zR>A87OJR4o*g|%HrhZa{Q(A7NNDh=VOL7iNrLpHN zT_&vWM?7LGFHWOim&I0)g_Q1YeP%1j_k8n&SR z`SNzenZl{q$VTs#+CtpjRW|56OLn)*x4*!G>n&Zm+vvj|2teV9g2ICWRK`&F`cSH%h<{=9Fz@e>=jI zn`%i=sS!b-WL+bsR+dB1YUaaMS-d@cIw1}xd0D|^SN7aITTUyP$(Q|ouSI1c-sO_!a7oX z1a6So!B9c^`V5}V-%eZz#ar3>4ZR-8fP#O>92ZC@dA8t2@CPVY$XJg!u@w|Yc&Ja- zCugWNzp9QnIKy|07=+zC`!o1;94X*`+1-tl|*1ErmIw2eC9!B7}Y81BKD8rlz(2PusQZN_OMOUy>+MB6qWx z-Rx#HJ3}wR?y<{;s|s%P*H7^HmMeSVql3iA3)}Z*7Al|z86mzr-+PJFUFhC_QJslX z;P=7;`m(wQfjxaQm*E-v5Q_Q19-gqHo-D0YDOoZJp$J7`C>?bw5$VAmo{8%4m_q)j zUA?rgrkO`KfB442>D)W$uSc5Ov;Q{v$Qkp2=fDPaTCdP~3+>6-I?`(>w-)^pf~;RH zC+jLbmPpi0ZS7Ef`Mv#if+81xuWJpU#bsp>zU)!M0_I*JSUcxkROjn2UytO_3|zY) z*fPU59=M<7$aHTl2oA5cu1nJr}MM9#I=( z3kAQJv@+>P}6R;{y37w ziJfBb7fRmzk~(CwP4?LDN_9d?Z$SO?*ArpPel=XCxduo~4dA9NcN;MCpr|$M^w+=I zk%~1<(9N|8e$bFA&N*03#L4nh0@}%EfI1V2t_p1f5!P5rgh=dCW7R&3VIBAVF}{8} z)8!b}eT7LHC9XMf_pFb9UcgAFAF$nOodGpd0fg8>3_grwWbEjr#bB$rZfCgK8C1Dt zXb32q;FCD47AQooCeYgBOxvLE`1!~clt!vqXEvLj`j>nTfVbbP&|llM3!J?pQ{wzV z)Vs}&1ma*xs`-d=10&V6A1rH!)+&m&85SIKH}4Ce0S8?wO*Pzqf}OdtUw%D7N7tAh zne*hQW+Q~qVY(Pxxr~v+wy4NHtrG%l!NKUPY*>c-ZC&yDmSMB#1vw#m4oI-_%7&0)@= z!{Bm|akC5}Lpm2nHJ;&u3;9^22m3dOgM}Zhkx&F@$K*XkMc%^-tI4IUOUp$mHHfV z4Am%hkb;ow@Y3GD_qqS|-*7YX!>6~3B(|`)<9Mil@-!>eW+sq1f$D?Y^KS5ee}q3^ zy+ty&sQQW_B$5`xWS!PbT1dT$X^rcq5bgujc&87~78QJ~S?p~=A0!_Ou9QKTxWbEQ zy?H(OKm`_f0F`F&r5bUA!~`OAd5?{pq@>t-O@FUlK2UxB`o>$?{xB(y>Bg zEKaF^!?h7rf7IBn)u$6{1w{bElf8#uaSMc#HTvLdGI6apy%;}Gz2n{Xpo%Ag!j%A0 zUEY1y3N&$pLXK^=zkmMu0QJ_p;vN-T8(6pcr>W18bDk<;hNy6FdsN;R^#CjZlVi~! zxQrZKb6_7$6ON6>jcqn))VQ&2r%B^q>|D&ow(Z8YZL_g$e0jgW?`H4Wnc2PB-Pw8g zna}XB!?TvmvX5n-PhCbq5Q$8YOYKl10G5UXkBUG0D|-?3lCAnlyU9PsatO1{BGG6N zvb5(9(cv$d8?a3KkA2_MeW0`0x|l3;qO(Yl0C#c= zi`c4_Q+q3GDiMCV__SNm+XlW+*90$wp459L;Ui3njp?B4Fgs0aa{sFaF%7zPp2JC? z4FlP2E2otWPa#-OD36xU zV}Jl1rzjJU!?T^ceFv)hZ6Ex{N78ym{LcK#J|*|b1=hTaimeIm1uC}HtjW#j*F}X( zzP~#d7D+;XH%$~hyPn?;Fcx$XAErH;gi#2I*+A1se9RYOf9o|mJC*yI0DTKpNV@hbm-rwel?Q{ViTs3NH`APG&k87>-Ft-*b$Dd2InHtf%<}5+z29j)dVs9NoAEH8q0H$Uv)Ybk3{m@z= zp#iz3v^mu{Y4t(671k{?;0(3EenAm|UmSrb@jFPMubb7rAl2sBhu`4s{_X}}Qp7`= zNBfH6qdHsB+%c;(!vnT^I*f4L{jjl+_yXR%1qmt{39I^nVV3+$3iiCkzy0N#RgNE5 zMhn0HG&zR3@;>Ys8{m(Llxk_;Wd>_QJ430G=dRG}$PZOt*5X__0?r?Le_b(L9|iCB z7CD8*J>vRVqE`xs5h(?k)QfSVk>3UeDBuW!8ML3pVT0 zJ_PU7l1|=GVAPn9CiE<_j~sZGN5dJNhQd4QHEipfH>&2RNce@RBUG`@VJI*c49x>n z2|4$EZ7O)V8$&$l0fG(_@Jujes+LzNBK+CRc2($DGw$KXP{pw?m_ZX3U;G1raT0Ra zA(gJW2ENmeM@L}+>5Ez^bgtiwer#EWU#-THrDJRE@m(QQ#t_J%8&FnN)GN5;?P3rIPk14w*2`qO-TG_oj75Ik-*XMr<9`fE7) zmh)_`qa@vB?5`wh_ zjla9c$AZFYtDEW=Lm1xH|*ir>K#S)syki({#|Kc^4f?z$24X*6cuZvw9#^+Nqb zWYv@=FAM?hM$6>oaqr^fhW9M=p4z(*t-_Sx+s(ibP(o2Y%W_}Rk#`#S_TkN6qvI9b zse6Srr#Y%hD#7~ar%a|#GqQ4968;upT?L2h2ESngX_eOG#=A#flj%oe_&pz|;K#=Y zS#mG-8V~1h1-XrLjRB2n5h(nU6Dsgm0osv|wiNv8K+&b@Ib1G#y}}X^0w2Rj1@rBw zbrqNo0KV+aNFcx!?5m7n6?eHNIfn844#k#axR#BY&5V=2PXR`kn6f;ZC5Rg2cIk#N zy|oU77wE(}_6Yrz5bXN`$DVBv(`8!<_4!+mO<{JkW&3csC-}Ws&Lnp7Qs<jEs1N(*RXsQO?>WtjLHXqB{w;)tmui6PDw4vDQUXZ&9e{HqWYU9A%wK0W`YD4J} zrOJ_g^Bp#$s{8=m(~rR9?LV;}XQ&^gxMh(32$bN~htNk(@mPMh6E0pOpCG^GSa%wc z&5NJzlKHu!GgGYql~t=DE`mF}d40l=O8Xz)_PT-lH>|9qF+rsJz&9{`~8JQic_ zpqJqJ_pe6NMaI?QSs7EjzP*~-rU-qr`CIp?$1UT(e)xzDiX$^q(wv9=J+;tG>_p#| zTmzy?wzq;A`aRDxDdD9Skq~+tSII|-9A}?$7 zl>HpW%tg=4_qGF%gC;}mTY$8VYlu@QV(kgf@;datjT95~h3Rn)))<HgxTJ|9#vt zGBzoGRR25N<;GikM|W*h^bXr7;1?x&Lpz^X_4=w*qeCQ00@A3=TQD>GZ0es%+#OL` zuzG5gR&j^plvIOG)(;40zo-(kzwKTi_@6%m(w$(u-Gd`tp%0nJ zLWWF#+A{RbCIvO#v&`xaponj-sB*a-wPJ88q_k?Xz#-y;+Tsp?V%j(!LHtzzLJKBHv^aW6kErPEji zQAz*xgs}Cdyj;>Z<0HTPr?&77H_imG$sxX5_{Ae*RKMbTwC4p%-7dMyn&03LH5v|g zi7f`?!7!-slnnd2ajQ6=7&J~r#kz2`DM2ir)4G7Ewd}mZoNa0J{|!Cs@vGa?0p(o@ zOjMX?EgW5!cKs)TzVD|M_Rw>AC%Y{OsvBhTb~#VEHH_XjdxB zE<;3qj&hrfN9a#z7`5zGj@_g@*DBC$^P}vi*DWQZuF#(%PQ!_5RE+Un8k&%$@Bl3l zETZFDB8}dEn6c^873MGxWDI8M#cGdnsY?u?vodNhJQ;zmE`r+1G6osq!?M- z_SrtWk}ONKgW0=R5LN03Ju?{abeP@XG4XM;NZbR@|2>>)2E}#Y2aL8U{(gnJ>+n{4 zrQ?4x{W8^GhKno|@?^wBV1Y&`8%D`{TO5>6$cSFM-K2gOg35m18YKAV{G{$<`X~Q$ zK{R(I3~$AuI1IAUwkfKp$3+c3qk z)`SGehDtwe&9D4tVgze;5PqwZ&LkACuQbA6G`l7DlF5eaPcKuFUQ{bCK>8R@wi)J>g5ZZ44c*>Q&5^C`nF}+{64U zS-W5Enw-~}LNC-GN=@-M0)x6y0?SOfAz*6zrg0I3_5V?5N=?i%o$5MgDtMWC>8GN_ z%^(}~^)$w{0F^NZi5Hw)dc+sRpm(u_-$a``#By{xWG~Q{Sin8* zWfS$EF{MrwKrHuqEGUWNIhRHk->s(i^+NSO9rK$6hdIAQ0X9t1g76d>eNFIo7bnrv z2>I1W&|V2)QR!2@(or@an`!b&JYC@ZkUCMQy0D6H1@v{tAq3v4JF8}Svu||w690eG zP&Y4?9a9Y^P7Y=Wx`YfMS0E4Yt`>1}Rg+&B%Z!E?`PV#vB-9AQ2gX3sk|VWj&NOIYTBG{&?`ThJk8KBB&F>r5IOA6)t(F@9WewR z3aPlCJY}iO32qu+pc)Dou^e>7T?3^uAvBjgF5wAtNxwsOPN4Pd+HCB(=urQLRuByQ zN%nO?c>m^~dk-rR^aFulKktsGo33&&eV@;+ZHb22w>zp9c6xzMfxp|yPvtfna<`u8 z4&lgrYi28Wws1f5_arLeBD`D4LWN4pd(9)G{=&U~^lu%aB?mdbWTBeKETU`no&pC;!$i#`&|1mP%ltC2kD5$`A=zbByVg-J7X?)E5Li zyw&ncF+CYzAvJI%F_k86Qn@XL^AffJBR@A7ig1|Lb;%@IVa!-`%ADmLlL>+1!|x2L z=C`8q>`F~*AP#Oi8kf=NEJpP4JlK+eF|RO_1ybw?*_Zid)9c_bwk_woWCu>r(;lHZutOXHA@L!j;APkhQKP=Tz<{%#$u0_zr|1>`TR$#gn?+iAdZVpqd_KSI zvq2$tcMl4pZ$EsXm+HT!3C%&{^2d69z+FME!vEcNAz|Zc;Ka2P)WWYcFGFr5yVyJx z=zO&i|FfzUEefvE3MIIcyaRSH6bhx)bzeY^Y9KBp?uln*A9)sss&oZg<&#md5jfBE z{L}$JJNJ}}qM)q}7IiES!3%6hk=x1GZ0x#N@(^`J1{fJ~scm85P2XOAebTXHO9d5K zW);1FIq#acEvBFc?_eAM7}*?49HY|9s*Bp>`;7TabJ;!HSx1L@wNF`|mK5=SurDvv z3ixEO`~n?EIC#LtCOeE|B81dp=|Jn(x48p|rxLWbzEGk3M-_uwu*r;LgLrGycdSfW zq@B>t!W;Pk8OG!o_Md{L)VFg`1(>7IAV!BK;^!+nv^YKOHSdkind>nj7k zqn|l+f4sb~MP%GF{h(J=XJMK80};2dss&0ba5wCmKOD)bj&vPiAgN7Xhb}nX zdumYeRl^CHt+U- z$@}$Hnol2kFiYzEC>MO5zK&X}@(gF}w_=Da1|^)1C0W1?Hnu0`pw}-Lg$%9g4J<8I zhe930MzC++r@lR2Q^h&Hq~EG=Hu25dveCH8f$1|ovSX|{$4;d>=Xf~~cySBSpnn~g z!WtO$KOsyjO}(iGACJHH^^JN4j(%<=->6=iP1d3aE~+aq6T}x^#u#av9#%(c%!65G z{SAy4a^rEBCYlRl4AIqeJ84`jdeSG>>&Obhz#sC`-+F)^<8VOQMt-sr^DgFofSg5?y~el4gH(y=MVG+v9;4hxFm}q()M_wqFOOZ1rocJBjTD9r4uZBKa9y zIs^LRT73R~*j_lJn7%H14tMeqWl+3!gq+D$@++NLXwKr&_LtXL4z_aLCH3`JFc%7Q7p`%bC;6OiK$hdQ%FL+RWikk% zX`bOsr>@D#91B)H*RE!`VxsS|LfEIxhU1V6`&-cd-3C=Q@ux5*hg{)96ymicBrT-nQIoAR?cU!*!c6t`eN{o6RKGRJ7C7psI@apVNm*pUeB-FjkcW`EEu!Ov%x>n191mS z9yWv#VKCI$2HcH@-@ERiqBe|f_!X4N!K5tohOwjpq)hClbd(LQS9xT$P1}P@fzr_f zj5(-((P~kT@^<)iOvl&@%4}ne)pG}mHK?|PwM)i42`HUVIa9?~UK~%()B?bZH$*BY z{8_v5m)eOhZI8J7^<&D=%$aGMYopXKM`x%@rDz*8BmZz|P1j}*X~Q9S!$t1-TiyLn z0-`7YE8Q(7N@{>#wjDecr!ew7?Dqw^U5{M3x)iG+=E`5uW!My%Mm!cgCHAUt{%Ttg z;WlRKGuR8h-l1vyh)xV5JM4UH)qr@%&T|&VxdbT<67dato@-A23ccd75X7qFQd zUG9E(7wh>uv%|i0o|L~u4|_-XuM!@*I){bwNHYnSLNqS5H zjQ}Ox*oT3W6SN7s^!CiRqJr~1I=aQqMqj6q6rz4JSf-S|Dqu~%nt&sBOV20b8*zMu4w zB9fG2dg;84yhVu}#m5!xOr$=&S*$PC0zcPHyS|c!J^al^D#+kcA#Pi21=gw-l4z+> z1Zq$P!d1;FnK9rqZ`743evb&@%m#0)4U;#u{lI}CgD+zb)Z{4NN)-yo*TYNz-n#Ct zQowUwT4}a)zq#2OW(82_wR2D%k(q*XtoHb|3T!uIKqPW`wV+OLIR@<^5$=K$C06S* zx;&@_T$RL6FmVo7NWWb%)5V z;exz=|9(8UndN%bfi{%>tG+`Fc-ZY=;wLVVwXRoX^!(O#n{e=hjoq$OXSBBjU6zEr zUTbK#0w(wQlM9CPu`jgg0do>EuD(ey?&E9`g9$FEtWdLW z6~1a}yV-EuuSD?%XTM!G(DdmItWvy$5UlybkTpxfwEF8V?FNDYXD+uVKxZ1lmZ1Fi zsJC8hK-FY`&x+5~0rlyf{!G6*BLp|r?r4icCBzFF!u){QNl@ z3;WxDC6HB{ZLAc;1>mL30R1v6oK12BRm&FXFlM?15o&YdIAb~clS^;8bGKLvgZlEP zMy7tWFbPt z21Eb4%464-t>14opUbCim0|EuCmEsn9AZw~+xVFp?qpi1I{V42 zhSxD~c4iDIS5w3z?X!zr9v}pfPc@PIuPIOBtSji*0es5AO%IVRDm)bArzHZ`>T3ZE z)!08ksE1;Gmlrosl~M$4Q}yND6r2ZbK_8 zKVC@`@YtqP0j=G4b*#MZNg#C|-`=vP*U%!16T2A3;!5zpduG}7P>)$?vt%FF?&09X z998}NWpSxEl!*?4oQKzVKdg*uB9TjV%mK@?-r*3{dKRtklh+`Yi}pZ_f%eNw0?$Dn z7BaZ&HlDqN%r19HJb`1Ghth?ipMDu*3PE=OuCEJ~$jp}qsWVR$Y6SGb>F~+a;Ks^a z8gF#lUZ+U-s!bX}8E(~qS4gUPTPPFX+e`QpX2PUbsW|<19|Nh$sIBLe>eH^XQNp#_ zphrSRf4j5x6Z!+YS5o$)-DWGIh*o3GJd6PonTkhZYOn@`+)wS#yNBT2T*PmmtlgM^ z-cJNV^D`r+348-_){SAy_>`}uzunI*G~cOG>tJ71SJDu+c!VzF%mO3Lp_67_Hc>8s zekbhWm4Uqlcds9RY&qE5~CqsIjw^A*jc^9Py5t9S-gq3uJs6uLXC;z z+7zdKUaUCLyTMKaLh8CHG4&$K?8(0X8VX1t&+$jHJ1+@w@3*r)#OYK#UH78Uv=oxS zR3QviuIu_AWA5Y;J5U@9`TUlw`3BA7Ol+!5(`kY%Sf3d>-f>(m6mQ=WB&)HB2<0n~ zr4zLn64WpiCJID0 zL&^B7LwuS@1b!QECf@ET;@3aDZe6=}*fA#J*dMsnfIkpWN1JIclgyn!HAZCdJ`0Q| znk4b1Fs9n6R(6M5fa<_TCBHhrwOZ>`jObHhNt28n74iau9)pE!q%yoe={#%~9ydv+?0HY{51p z%dNFRKxjhPET2-|%J5Z9SyVw@3ofjk5(#E3@ujds9nY@DVbhUny!6sgXx8ieQTK#) zGAen!v&OFK&|nMJQis05ijw6Z{TspYaVxXx&q&qFN%NDtq15#Sa(DwxPH+SfDWQXz z8!+J6xi@;4ppgWGv`bM*<(7lHLP~>|nR#U1z?^nu+@c>pez)dkv?~!jNf|(XccDM? z|I_6YOOr7{#m8IW_RI+Ae~_PvW;;XG=s`%=j*HidnU&JoZ8IL2FGC?rb zU+q4l7So%I*m4Ethv3B)Px9Lb6H;%eT z?Hq3}{5#*HfqM>AP?qT+d1N)ue4x&A?vZMYxO}#ar{}d)%DQ-?dfECH@v4=*qrjKD zzJSm7g(+WaU5CPk={h*SID}z>W`36bi!UHbsZD1q5^QiCtza8Jf+BPSKaK)jldJ%5 z*w>#zK+!?FsD&5RuY78){$MtVer&qk2*STA_^1~16Di6if>ce4zjAcc2Q>c?{WOf^ z`9(yAkX#w<(8*-??_DVlGXMk5Ej)0+h^#C)(A}iZz7NXO0A_Dy>BN9!MLd!VPMa{> zd(B(d>%VUa$9%s8Hz^Eg>x)A`y!H?+t}-zM{*ArC%-jCN9Bgju$>`d{dw1CiZf)&t z$}rsSErONd#FkQe*sdkFDE+B}5iiWdoW(k7XuSWbzS9Oiyhfsvk=ID4bMgm!85R+$ zGnW^RzBM~FWAPUcWa@T+q*QqdetjOoy5EE3r1)K4? z{z3Z2&!YQu*_DMJoN70rQ2kRv;T`Enr)fVTbRKao4}13}7?w`qk5`+0>IMeM_^AC5 zwXMYxQp0PPqi9dlht;*+9akVMi4$4{I=&-`6JK?)I1Dr(;#-)Mh+j|5ZmJYX|S^@pjlhogWND{a_bu^Zj$ zc8`JTlgjZ6;y+2^3GT7w8BjO3hFaeD`rUm`XsuDiJk-Tdbr!?WvB5B|-qUvi{O1uU zr3q^%?sfB}2mB~R)kUb6a|7jh=8~G2oY;kZUG5V{l#lyK{N$kwGk4E3!y^M1pk{=k zlRHWQF-5mvDWf2k6_*fyM39!bR z{Ngsnt>1<7joaJCvXQjx{Cd+B*O!D8tB5NNn^(t5r>m~X4s_aqkwd{LfN(y7(1eja zI>kf|PF{FlIQ zr-T+|^&v@!X9ygtm>N320FCDztPeT%e)iwEc_ zVs$~%SZ!@+#j`VOi1CR(%yPMvXwL&Bd*p;VLVJWUwCn^B0V_BYlR{N%T4&>hy|vw)w^SSnTMoJ@0$D9)opYdn*&mq!T|0uPAu zgfhR75DS#Gmjhs{P$+hRw`05xhQOmb-E8ewvj%^m-N+`f~8pc*J^|Cw^6++i3JIbUL_AE zxCd@Ra*D8I66?0Hb!u4==V(Qj*)iLVUuPqv`x`J12spHXeyPco-Z8eP48$hTimOCB z%bT59jv%-_Q#uACwZi!lW^_SaYecY>yVj=AJDVPNn3;sP5H_-aq0)*G{xnHE+tNlM z_7mh>#6f#Hwn@BxeTx#v|F0rOLjD(3e&7ux?^OV@x9ES`nYXqQL-dW`390A$=N}}H zU+k8r)awo?Rz4C^NFB->kAq{HM&hwnIJeQa3UT@;;W{t{_H>W#*QVmDQ!wa-oa zXz`_mz|IZ*EG(^j`FS%0ycsq6-xtn*hx*C<^;Mj)zD}A*lIco^XeG+ZXZ+|veOjs1 zFn4!SPvB%)?(qGdBTL7_+Yu{;62Bh8cnn(<^`vM4%F{UYR`IE^!^nk}t}}>Ty_LuM z_HSPA_t}f@GRPFdaU!Rp&Qa|=qh-4ZYvPDSH`}QpfTaIf!jrT9M!knV7m z`T!1GhV42J^+#qj6JZqgJchE6J346dG7qzD9=>z0cjrK>9g?GZI{SuFi69=q=zsd! z4Joxf zF)|J;%&^gtNBY1Sc zdr21d32~u8tZmX+SopCF^4RZ(r|9V0#g)&u#Y zr21wsN*lhcFW!og?ZP;Did`jUJBQ-+{JBl3(YYGgh?XDME}1q_vX&Q3@U>pTdKUYg zKc}j#(Tp@h74t~2sSmCo!RUftGE)m!;}Z8YXsJ^peNNxe5I6nV1XWTPxKSvL&S@Mj z09xlo#v!A_AJ=lQ$wPV|C+J@3*)uT1sD1*pQG!+4w@31O(X7ZD9^NT z1lCr55-;%0(PP)jWWmKkq90dt2c_X>G0g!wt9@G{9#^R0)#%^m_(JF?L}!5Q%8;VN z7JC91pCd*%e-q?RI|G||djG6SJbA3ons^z(HZ~iWS$dc5bT_F5N^@m2p6v4_3wTX7 z)<&u5FqXQAu^`eoVa?C=u5fpyTiZxSk9lc8rbmz0uZfbab|C^e`$|4{(GV4JjLLvmN$Tx1vlWGWzO;)0kizvOM((<@nJr^cKryHx?C+ujT}Hs?z@@j#)aIu zMlu4mFgy|#g^I-QU$MyUrS@65z?zNdgju37v2>t3pX8gbv>6yZ?Zm0Wj(QM?Z}*;A zU8y)!zC5}iw>E&)>vx70TqPQ})mY)@FGH(5yIy5CFp<>{(2Umbya&5iptt^0v^g1n zhG03hZ|y~Ty9MJ$U101BpJ0ox-v=Z|KK7iXoRqs5Bj?3OKDZa+bJHDU`Evv-4Bq~q5E%fD5R)a4wu3o zFC&vjeX@-rlO^CQVSe)lQ#5h=8JX>&QK0ftvivp;R(=EjmEn&X&SD7U;Ld2x*aCxS zm&D!W+f&GpGr9U*3S}XGsY#Zfk$Jvmc&CZqH<}DRSYpjY(rA%Cz7!sIJs~he8@w~W zw%b-dsu-UhPu>A(qB-}h_gomGwDH*0K`4Q}Fy1Dlo|3%BBslZwbyq=NyoKU~r{WUFjeP!n#6%IXNe8t84MzlzaZe}Ge>wAE-45X3 zX;ZxByl!CPWw=>1loej11t==?vj~_a_=Q?3Z%!vWMSrXGS^6xE}dCRvTgS;3u-uaqOkYV7_Ox{cTOE_>)y-`RDFr z?bYvgcjOh${7D-kstc~CT5?`_lBC>3y55e040V8-O=^#KZ z?zl>{3x5VkP!%T1g;&z`7(*LIS6W;&t1gR=s1Fi3mj5$5Q5FyJj@CKLpvR58vd>mJ z#H>eMpr2J@D}idk9TiO@^ZJCoC^lTxH87@8>+_Ej#1-HIuvTn)W(RbI(sGzB&{NZi zbj_!x<&gjvwJsOxYQyb&NZsrt)~$(p^P9iu?+k$UUH#etoP6qEXa{UeYQ%0BNes-g zBNWyUD33l*V5$0>3T>q88U^2k*0asul#JTeRB#a+d04b)PZrlsq0QeXp(W0%=0)4R zzQ78w=WFzWFA8NH%iwEoeYT0Ueh|?c=BjUzBH2}@jd#rF>i1K0gQ_F=b`|pNij#zt zkprmMqIf)}PSRQLWGqKvWaaFiWtRB78UK*De}pXyceAHfu#l^b2`k~>)QD{7xPQm<0a@e z8|)H}cJGfdFu|h!S*-#B+5qIECS2Iu%nf)6J#XTd#I8>@%Z=90WmX&E#XqWo&q)t^ zbj)Slj%Rf?4Re`^VN_FdSRbfDROoID>$muY3~JdQ66Bl< zs#)C_T?ILcpv*p%SYSfOI3BiB8*^;T0YXcl=O`w<^X?> zt6mf~qlvzX5Ri^z3)<0cKe#PG2q%&DA*$*X4DainBOeK29HXKCZV;?j)h5{(+K@op zl6)Lz@fx~&7p&PNYGWrPtxxDq+)qaeqDQZhKtw~WG1r5yH%qvG>&9AjOJIf0C@gzU zWc=dSy|bvhjJ`_hu^Jb8WHueI5&$gZ9yOk^K>^qoPCnq$QfUud!R(pIxf#m8z6G!z zEZ|4R2=T{w%HB(MdgaUZ&LGZUXjjxm(sO(83inM?3F*0~)GZrj4PiP?LJeR*p5D~Z z6AlLb0gIrueA2l#gr{v2%s&<5?I6_+Er9V2S7DFP%2&!Ope1pJ9vdzSwE;-SsR>^W z*ic{v?%@J(s8fH7=y2Tm5+EXcb@W6%n#8Y(|B8nb4$T)E6J40(&#{}Ad-~7*UUDm@ zed8%S4)b{K^Mnj$_o%*}&=z z_}NbK<~jA#jo;a!Pp`fp&`~J{k9TI*=e45urL7_Qlamy}-{?k&*~vVe|Dp{9KBktt zSR2L1{dquh_6%2Y6Bbk2>~K?x^*5i%mRD4*k^MVln|^eqmCgkfUIgIDBBxz$2Qp-l zg{J*or15OOC)QXM-zuMZ)c|?FU9pSoTL|eEx39hnxv(eXp+Mn;vS2lb2Ec*F^U7SS{Y#w_odsERc|psPi+xA1o#Z*B$}-Q-(D<%=s2|P0`3UTw$B2Hp_@X2==cf;2 z;q!C&^m}5kiW{Yefv;iNa)mU#_0M6GmnWI;A67CtL~40 zCe9V1`U~j19Rez!UWt^%ANr0(j`MzUZWyZ(ohV zYoJay9Ei+pwDF`|XRey&{31#hx=m5JcqI99oAKmw1_4cmOB@M7Znt20Dkva2q0pw1 zWmMwC)O8Z*6t||;p3?B)ce@&azX&B%VULL8vD$hg1ACnMx$AxJ^|+N;SDo43n8g*> zL6IgS9rR(%Vs#?N?QYGS+M(lSuGQSk;aG@31r+5lzy>LyJ(74Y(!9(BGH2OxfgfT( z3gGGV^5>*b4W^j;EX2l+ zw3=F8q~MQOD;nq)N_zY}?i}kP!I|#UoL^0fW2{x7rMr+^EF*|T+JzdO$uP=SI}+bC z1u#}78pDs<1upyjrH3z~42FnemRCc2?V}wg$bL^*2XW=hiA*O8vfGJWDWu$}+B{M= zTw<#+prA5MVWb!S%a}C+Wd%PMRH^Iy!mhG(y{O%%(24aCfMv5=!QwZNm+N@e^b5$v~5zCk?rkA9)6On2B0esffwq;7U*di+r99i+G1-l{z`w=|*C^QW0bYCzj( zLM~g|I(&Yf+fN~=hrr^R(XH?6>x!^@Yb-x9`QBfom4LWnFiHO5D1cu&_TkJg=b zvr!!;mR8j1(XV!OONhmfA+lDp;14KA1FPrK?7ntYVpZJQz7t6GDQ>Q%&G+DYvXwvb zohQ!plvQ4JIzaeLk?_FK*}<=mAmG}$psN@Dr_!GqQO}wO{?BtI6*u`W4(A3N&g9t| zByRsO3gmU1IYn-u<9{*9$w^U5sK<^$qf9>>Awp=6W=J+Ipgn7Kx5s%s-=0aanwdbM zc14dZ9QU^`MYkBo`_29pIqF%h;?$v($oG|>=-CEGuuFk}BNR^*y=N!3SpyQ-`@eF9 zm4=v-Rbw z&x*LdWaH&Aop0}I_K%}iwXX=G^glo#-(Qah$KzO*n8*r#?thPWj z9MdfLl|kDR?db$k%$N6&*aRv=3fV!6$}G|Av_j>HCKI#_W#;QLLhiwiy{bLlElqQA zRUNXA=jdNtlMq~WN*j_AZ8vSWzy)YsYhk&d>h+e(ctI+-f6?W(yOKI|C6!%$TXqS6 zOW&LVtZKbOJ!h{wC)d|!=Rj3FlaPH)y5CX~Mq5pm+jtAfdUw6B5`c?^<3U}jnUuno zs!78Z^ro)3UySwl*EW%sm_W9}mHFjIO`bU^on||QHwp7VXoR-U;4MMt*T41a5$j4& zGO!asoJ%2M_K0qIJof;gvbsT=}f6etZ9Yewe4&3|ovir@;zh{2JyAB%fXsD|< zWUFZ)6mvQo1!ezjlT(g%u4GyMO9QS5?L-$Gm$6snNDjRR_oWpQOr5dE*)sCF+TVT- zJrtO;L)aMVbR--zz#yj~s5EAHa`=>bU%r z7E8_ih09mSTJ11SxnPt#TUKS=9>MMwBl31)dmGR(PTSRsnghlpbt^#*>y;i)yruYN z^Y+`QI1_@5*}(5uE9bQAMJioqT{q(5{fJt;m;^~ksP94-IQvc5D)_{S2eG=N%PuOM z6Q!`ocY_J|Lz&Rwk4bg;nm*=j_VJYr<6fNOTc4X^ zabb>W=s_@-q|T`L;=vVqX8Ua2LBbt^?QiaTFbzj$fdI^w|G5@JVAW1*LusilXWW=~ zc8fiv|AqCOA>01Q^6ExYWF4j^+T6>QFmVJ2ml3*qpo*?Z*W!NQ9)ag{Nl;n}YT|pb z@rUQjObBT(!=E8?4p4lL)+}0FV^d1=W8~5B&oJ`BnFy@We*E%bOEfs$8Cc!wx|%XA z_rY6|M!>U=J@1Ab5$AUcW-Ps=&Lrb}iiU~T-y&*gGc#ez?3l;fOVS-S|95>!50K*l z|Fa!P>H2BFY!PuzYiD5}y>Nn6$J8*mThfhSts8%c8RzRcjhf)IsPfLa$caL7g;dq& z&7knjUHi?+qk;Cc${KB0Dr75A;+o}76AFi$E?}LcWsR=RP;AiV8 zVjYB-><(vtog%+MKXGMaciHJrFV%sKQj83*lk+<|^Vvpe{e^qI$t7%vsw|QS(VIBl z6Nqe|&|@!3m;e4g8sV`>h14pFrvK8TKI~5|eMcX~nDIL6Zy(0S=<`#8PyIms525M& z@&}gb`C49IJ<0dnmQ z{W!x0Fk3E>_;+iSN6(OR$ho)#DB?y{M8K8>6HDPT=feCBugS2C-J0q+?Pa&9sR@wAppV0$&s0N(cRqbVuZXZ1 zRk1}V7z8&}d-#|%$`zYkI8r{^Sb%%8qo+{%H?(-*Y3*|k-#xeHZitVA&+S883Xiw~ zXqPL}f_84(ES5ij4CL1@5qi?4%db0ZzD4c_39CwzNY#meR{IyPjW_+UGWH|zNJ`FM zghQLod%i0MDJFrJWN=&wDrxz2)^pI2vM5Hkh`iWK3v!;lNltAvKDm5n6M)6J`xMF> z)4~g{vfPt-Q_lTjHX&V1 zHZB~emLt@0vz@c-nvS!SWGHy+`V)5V(=chP2=xQ0xT};#yy--1z)L!HmK$XeIL64x za}|s1>S2MMEkcxSlOm@!Ise4x5JZ#;|NM)aN>6sx-!RH~0@J?9NweIakTK=Wqu&g$ zOp6)RPRO-GlAB7C3TPbTJ#NIk8*vh+q zOy)zgtQbkfuysL{s7O98buHc$w?2J`x_im`aH0g>*zA}%u;8YGNQQi0do|_Ilt>F_ z?;wlusa3@@tt{}Vc>dg&Xb|)1-FekyhFOChU*L-;bgQ*A=MrtCyR{}7NQd~7(fS|~ zE51!4t7OzR9i?jR8$hU4Pp(9840%P&VxTGT{eI=%?93+V9u}iN#goi-BL7KWD?-BS z0zv>fKklAJBz=XCECuvU=tv(%2(aGK+XFMNtH7N4=h$2vO;Kdh49k^tIKSXDRjO(K zXfKDHixUbHP)tzCE$Q;+5&jQ*|Y)6Po>U-mLaMuwNe6?*&&g~l+J-= zs+MQTlasK*ZUFrUsw=fN_`ysA$62E9AqxI)W&}Qblz*eOT^G=+u=B}ar!!Fy@E5iL zMed?>v0LL2#lgR}SgeWBT&flPMEtGj|afUduXC87sihOL8{3;#-d8lV7eF6l4tO z3s+9P@v4@F<-iEpCa5T$Br8edo-{o-$4w$Yas;e?2 zj}-F?qxlGD#ne;>XYhQlJz%<$sP+ch31_gZ$A6iDNsF_=nK;R+>{`v=G2KX*2?XC_ zB{gK;GSdNyfM3QxVzTOh=}Mxy1~zcO$~zy1*t1+Ai~}=`MaQm{xRGY~HCDs-b#Mb|u~4%YzWSZc=}OV7c{uO_a@p}8 z7k|@>!qlZr{Ve0)G~ccysztyHSV0}4uPOUir(j5G=Hbv2*glcf% zEX|7W&A;}QQaxe1lD%6ag3&nx)l47;@X# z;$b;)@+#+ypHbb(33IVnF_}=qxP=^#BO^zy`xFqpGpZXoVTj-;h;Y_K=dADuxqtQM zYA@m{IMxBxUvj4auYeD5_u=BEb1xO{U{pvfO&X0rgXS&$xeOhQX5oz5|F3_4vgD)vUQ-k(rksVW;b(onZ1|QhcFZ3a4;Kf zxkH@!_Gk;~PZXQ3I2uGT#~UdG41XBtT)A|SHr%OVgP^XYg;#6YgCIy>G2*-MTkFE@ z@_?5QZ|p>MrP#D_7?mGAXGqQ%EqXr<+Bh25YaB8gZ>!TkrL&?#FaudnqT*(AL4TXTp|h_b zrc+PDymVHfz}h)&FtrW=&v|~)Ml#qNmjE5C{a@pbV`$v3q_h z{e6d8O#$!p0U^glI8trRhkrJdS^Ic=DJ z>7RY|J1YF`3!oHMD{2QA$8 z&8$i#u^btpmYa1nY=0g%et>%Lx^Z?^kOpZ~ws^JBJhuRX%Pp?DjNa9IId1`LW5fen<5nF?Iwcy`(-@a8XZ(MS)v=o+b8v0*OCwCoK^~t_J$auxg37Km$97#R1b^<6%uA}I!2RT@9$ghc z-8d=@`udJpT?EsGcABqda6chI;qgzXo}>}a7m)LOO`-2v?i^uR5=1cj`N6T=JULK+ zx^YxqJ><9(Xx{EiudE`r`KST{Us8k|g)--;E5^T2YvFy| zBsYJ6x^Yy^v$Zk6FA2L(K-9B&{DB0=HP}bD@Z?GM?0*#uYN5A~GNLm)mx3cWBa4@| z>SkBM4^TIbs;Gz3HCJg%X4#ySP?qw4yFettlLZPGEuTTn#s!XVhAGXrw za`OkM8-Gh>JZRmy6xsG0ae2%PS%bA}K0?HwP(7LTer7Nw4KXqP%;$+uRP|-`R-DGX znZ@-3)QzQz7E`Dbe!QgKg7sy#GVp0_D{p!!en)l3SNX(pv{us`t#goJXfckFVEbd! z$>Im7D^_L8N0A;SCh3*s*mEVOyw<>6$|I^9zJF@v#;(mQz^>&|&5iHXbZXv_3bJ z=iWhmd6EoxM%Cb;5+6eSsH@Lcmn#PWCd08?=Lyx<8@Gt~j@V~PvD}0989|km-T5mg zK!5t9U;pif2kjnutGDV63&RJPBC{plp95}RKLP57t;43WgTQG{D+10CNy0Y4iHX#4 zQ)&Di)eW}*_M&{@%YN}L+UP{9W3MZPFx^Zu`vK|-g(;D(fMjZM4JI!>O&vLazHlDJ zDFluuMUQ7wr%=|Rg9WsigXwEX(_sg5UVnX)(D@D2{P5dn2eH=PPX~~w9z0q7gkuk&cy5iVk+xKq&XlGk>j57AByC=>Zdg|A0qzoF27ki2 zN$(|&(#L4iB?QAwo0PwB-GEi+>$0jL*a%2W;R8+tEA4&G?vGObUsrsCNrmWQQuPR8 zP!x^rd{ ztYCjo&Y|WgX`WWjd|-{a_`ukKoqQgUIa77j>P@5WCo)}3p|kZ4Gdj>~l=! zuuhVpZov7mwDq5R%k7(&g8|F_c_2#OeoamwGiLdjps?)vyqp8GaP$ey>K{nNf|ID0}mXem)HLT_QDJ*|^ zGS%WIA`OS42CHd|99FDAHM0W;9IZoKoIzc=_lG~=Ri1}rP$pN#mTL3ZKyBHMsJ`}3 zf8Gdx%R!1ph={PfcYn1T0yOikn8Z*wy=K0nx&g|EJlK&A5hpsOHhzPkVi)l&)$`qXW*zu)E7qcl$~sSel3aCtE-*%>9M=HASu|LckV zO7l$r|NjtzS{yo@gpM;6yn~yDAy;2UV<*hN|L_0fAOH0*$$#^ViKYB0_YxN~)!?L((Do#v~Qaq241}ozx%*bV*a^n!G0MDIg4r1p1o=(0)df<7Em=<`NX7(zb zfz$0wq2`99-r4G7Q(F9v>A}<95mQ`&oQU2O(E|)sJ9y?rECTfY%W)4fi4F*v6jI_M)tBc6^`$q z{=5Ooch5VyA+E$ceSm9f%kl!n^vmVHXKgP~PjZ;gn}3(86ZlLAHJ}L}9UZ?OHK#H` z1P*5Y>57YLAZQD+sj}ZeEW%QCK-uVgY0ogtR%7`bW8wc$ARn=qLnz(7+ zN?RaDdw)PTYzbj4t`VjB>X{iB#c~fdE*I6u4N?1sXncLZ9*>}cx>t|&Y_WwEnBx}a z7<|-0_m1fX^UbnAn6x%wihg0; zVD^&(Atv1ACbjfCrW*?-bAUn3wH6;Ta!oOns$q=Dwt$WzNTfB(W5FtpdUGj17ANlgwL0_L2+JP5$D%(R`~YHyIpZ9Oa$b#r%>bb`uBq; z#Um(J77kyFwG@+@YLB1`S`hy#*k?aj)#p!lHV|P~UiFSCd620&64-)4A!lyr=8E?n z)su^pGq=let+Bjlt4l1+4vx@!!k)t3_qGN7SGZn_c(F@LDT z;<$*pHhnMOG2IBrF1Z-tycN-AL#*HO}RGWM-obZ?qhTfbF zsNtlgJ23ZscQ3gd8NiOW^kKlbsRqki?)&Lf=zMvHZ8Yam_9t|*ZmXM!0I`!A}p7& zvLF#C!1n&S5V2w)dkD}6Gym|UGyU11v{cVq9@i#Ypv2S$vsEB$`fRo* z=)`nmq13xJqBRGn;A+SNA#g<^X^o)6IBihyZ9&PjA=9rtX(6Z^UdljwS2T%# zmZBtP1B(qm*bkRO*7vN%TEB7aYOtfpi$r@h`x-E$Zj>+u`R{3Y>yv6C^M@%;s%5hL5a4?);5zo^!rbXNyZU$1Omb~t_D1(19}hTu!|AxtkdsZVJi_glzZ~;aZreZuricP0Da9tB_gQ;3W8>I&*QbtG#4+fx59&Gn?msn3%4{ zrfsaCkRG!Xc+)7GB%>E95YHQl8nfrA<};|%%*#y0&ubr^l-OfZ#S-g%6esAUTJC7id~$bpq_JY5!NEe-ytBsJxYc=gW@}b zsn1Y-k%P53DXq^O;Lh3Q_zda_pOOSGwIYHt^b{zRM0igGpWr1_e=_tZ)g0%m4P#>s zjznu?3HVA^7dsoMY4KhT9FJq8ZY-2$h%240FQ33QW8*BF?g}%4fNKwb>eC%I9Hyzr zi~5=mAm@bxY&r*RB^TEI639NS|GsgfFTPbBIh8mfym}3ARaN@PRr%I-z;wxXN?EJp zBO_$x)IBwTf}dh8GRXSDOMSZKJi$;D(YSUFLaJgA?Ol8FV|5VYLq;HA-Emc50xr1> zmM|lNv3IWFMCJrPA+cc(OfUu{;M+LqSTby+3Rg3c5{QL9Q zD;ap1#4{rBg&b!V;r$tVW;W?dPBQt+x)EvsfL*Zrg0GSyP@yY-#`KzQvwS)6Jg(Fg z?NC$(d}a#Hv*UW0c~*`|GkALv8pXFNQ#+Z{)h zYUU)HLK=fL;s7ATJ%Jka8lX>)m~JeTs1JM^JV1^j zbu2ih0LPGvc(>|*=vX^=bEvO9rTXyYf1Whp`iazynyPX}8z?Z4cyn4;@bFWKeLT0I zK3;iMV=o5w1zRAXT}!l93wznr37GinCrDSWf|wAf@ZQnHtBu!qmcYtXRS@^RXeXu{ zParKYecE|P*Ev(^;O0)WdAI})+d6@|fvKmF!%VYe=whgUz0#)-L$F}gK#=zb@8cE4 z9&qx&>DEw9MV73>)I1Lv7^M6Cwf@K1KHpfT*Ih=26K~9(j@5_Y5?pEVi?dJ;TX*G+ zHfBX^;pH?1J9HNFHL|V>0f_j#*9?Gk#hMWQy<@ema6EUD)<;dL_ttYcJ+ObAHy~xs z8j_x@Wn+tft0hgt_*VS^LbbnC{Af2UymP*~f?w9fHwH-dwUPr#@UQ2!gN54_Yf9=| zhXSs?OiL{JPzR$DjWzqS84>&)(~Z3gYzf1b{(XkhLJm!W8T&)9_B0;%?gl1Vu%-^( zBA~yEtUQ1alV~Q+?LI`7ClegcnGwwlQ5V5i*bxbTTo^EWNG^e}cy|cEpmaBMCmfTx z+8p#t=N}(>i8j50 z5;&-TPD!-~k^)Q4T0#gM{cx2?Ojq_!ID;1vw@Z&&ii@#@E>Or}6)>w4s2iB@fl%G( zB5b}V8sGz38|;OfIGE{xsb8T_jBIQVT=@{R@Co2@AnB1cJmEyg|9RyFG-n`5=F^;j z0O_ecV4;ky{O6&N5Rh&d`CNsCRa$xs-bGMqbNAbnt6E3sYbO^RmI1*D~UgTs^TMkfTi%d zZgyk!&|n==Ib3Rf{PO#i8w_Ut>GYC&=2YJ9WvK(7vSnbPhamjrN*-X2>@;gK%ZfFB z!b?T{Hq;r43c~MTPQTxXcY|2ip)JEtah$Vvvp2|cigNG;zh4S?2rVJy*X%ebb2!Sna)CXuna(;CegV{##L~gR3$choiVqt_ zIijqa7MHqTr-ix`@G9pg_dH|acuJ{?Dp?e!df2Q<%gImpq&LfMtg8K!y1OFN;RmXVY{vqv&|{S1XUZ!wGe7Pn%nOyjfeJP>!J+hj zX}hu=%WfO^OWG-YO(2q@ZJ^suy00_-{1nd^dA#xqy#V8$F+gZ3RvnSW?X_A+cb=3B zLy^vO=6}hp>C8c3|xfSBUVLAz!&nZf^$EBu86hPnD|SwLsVmK6^ROL=Wbos1d8|TEA$*Es4r?ui!Rk&qWtXAa z(!%fOa(g27m_p1G1?MSAaYI1t8KhRBZdnz9TrRlq z=SN6A%aocbD7s2t@(kXc%iMsCc*VMN!#TwCuz$;KPd zbkdq7&k0^1k#8@p;9i!Hqph^ABwji$e`1Ax7v43;!*-lPe zi;d#O@57xPsa4Kx+52qwL=}SNwyL`eQ0i6FGt$|bySx@r$cF2w`t36U6vi2)4i!FK zrch;4|9(z-pseP(t<`^zn5eKyqmtX)0W>rFh^p3(rMBD1i1QlN@1GHCwa;86)!WlE z0x7xD%9^$Bk@}l)jekcK64dn4`-B}lG%{&!u4>ZsX-7@;^1bXk0u*exy_{G5WG>UE z7njcM)QlsBK;H|{?+^YhqB?@6q^AD7Ad|LNQYXaJvgHKQK$m}ILQoNXabpg5LLq1a z^MRjIw`}C-lMm$Rcz?{lLv)^!e-=v#kx>~lpOyOPO{^Yq*N;m`5rV2VD#>^tEziM7 zz$Mhfn3JHqS}P)cjkrhxaor<@*B1Zw8Fak#D3)PYnL zKa_!0YqYUUNPd5}pdvPp*RsYX=RCZ0a&BF^Y(jNn0neo{*kcM23~s2L3uORRk}Ten zqpZ_i)Ux&WU-M(WyND%^cU?bc z4L-QjTX{NArwX9F=kdHQfZ2f>!u z7c)+eDdI%AmpNHU%Uwcg8_hfiseu8XTrZX$Pf&j$xCuIEUL6HB<&0BYAVVLxeUpq! zt+_`P5!BRzHDNE}bYm@SoArWRnB3lVr;B!ZS&Tn#@{(z;0!#;Bj$$jf+eOvvP0 z-U}(co6X7uH`#u)_tq)BdJi~M3_#*i5#cd~G^OUHL8$yfsP+fBx74%YSY|bjz`V4Rt1#aKq11P zw-p8&C=hc)dqUhL2B+fAQq>8=Eu@&rd@Tk>(2MkyHlpIvM&Tr5d3E5qUA|vKnq_;1 zA|_v*q;j&=41VQl?<*lZs2E@Rv%pfO95(~B$CFn;_{OGENN*=9V)KBJE)f>i$FhG= z_s>yjZK%L)JJ(y<3+f)~XVp|K`^lM6LkY)5w=oBrv-mFI9@V& z%G~#;LMAEivWp1v$~iuzwD^S5*>+0;M9=Ml2{Bf3r%#BezN*i{UgG}=QZ?KN&`JAy zCLHonv3ZFdWXv`n$kIX8Q?_X(mvX3H5aAW_GL+J(#fKCFpQN2JxRsWZHuW*|`MubC z1wF~;%)4}5#B-A2U-6r_g!O-n)-LSs74#&#`ZUSF@!s$o`ZQ*nySwgT*7Ez0)Cel* zl+P(;yImVY@Fi7$^w7R*UrWlZ{5FJhf^2606D^H{3n+Ci9pFdY3Yl7K*j18trs)8aka!kAOyQKobLuLiXCL-+K~_WJvx8=6;m#`L}*H* zMUd=JEPYfTyy+^-aQxrjyT5|!C23jVRc8^z)m_&BM<`{di>cNAe*KI0cL+h~ z?gof+)jFc!fC_s8#5_?sK}`@73OGh9{~J zq~hL=ViQj}b?!Bf0I%8*8I~_4EeI-vBrHB&#WI{tQEgIWckiYxZL;-Cld1<5!V$=4 zC{MQr6dpj$j&qO8=OZU?=Ka2VAu9!8MZyz{gRGa+z0<9u2?B>b_L|7A|eIpHC*c4(4vF4ov zNaamu+D{Qc7KvncLKuoT-_wNGkB?s>oZq*(C5lm>x);uqPyIr0bGrBQzSM3ZsE?4D zyyCUDB>PlQgG_&2dS`Ei(OwYUX; zqtZ_JduQ5!2OM~S754T52tPtLuPwiLyF$H)+jCatgOq>Mwoe1p3rEN1MXXb`agvs2 zO0f6u=4adyv2&GWH?b}t}@SB=klfO_2c)5m?n-hma2#i z&^h-VNxJ)(vbN4%-#-{XSRTO-kb)b8i;e;Tn5#4h2wXmLTQ~o8|RuAvi#SgtV z20DuyQt^K?))hR)Y~9xC{3oOoS7$YZ;^PP*KsB{R=|Gc?CFjiRLI351P~ii)w+xWE zR%ZOlzq)wySDI?$QU(9uc}TmnNJ+?X!+g}qwmNd*lZehNtH~`L$DDP^qne6ygmUug zS&?O)&oIb75Q0}k5Bc8dM$5iyto4v&{F*x<8M}WseZN#pIi!aKwa7a{RsGGVtu>7y zMHkI7=a7pMbxaRw3LU_Ok!MxTi>F_@JrP|2N!D^HHg!-B!B6+EkUl^%Q&GkWrH++? zm>IZ)mul0O#xQg*AS-)p+uqFp_2*6zJ|nbSX0;7@L-*Z_APPK>l79`t(c&^&PP^+q`3UgA z_I>w4Uiq?XPhvMYC;T(mEif$Fo~tb||i&gAkZ6A7T+x z#5$#H0)gOGZnb#_$`<3r(oGta=!JP|$jyJ-Ie`<9XvLjtpbJK6B(U|Vr*pbc1PwV) z(+tda>EYFu8?P(3B;tN*L&n9g_oX2W-G^n!@CSxj*b=T?qD<5#u$0&BK}~}g`T-)f zjRYq&x;qioxxLxAl!S%4Ob&m*JR&L;9*{Fjd&lhK)VL-sH2RY2t`P29R^ zH3L8kWHNhy(Y&R;nEM9?rG;pm-fVySDD!3NT}GV;(Y}4})R;4+fbgjh$it;Od9gls zFm>kE-9qpR>LH+j)yYX!aDmmo? z#))Hf`>g-_A0gk*eMqVRmBy|D!5}`yxa2h~PvT3*<7bEsw54fjx8mcYR?2_6$m&c$ z1uz7bOJC@pArnd=tTy{RNdtH~UUFBRtuwXV&bU;0Bc_m7e?dSv*VMGTIp7flw`B`? zsY|^yt0Jg~B8f(YYO>X3h$oo>I3ERYg3dk+ee-W2Y29B%_Y2mVJMI6se5SZ}l2q-zNeIQq9nvn;@u!c3U*38zGc2-4^in z;Qti^Pu{4`u7mr=3HO;l#fEWZcS}l_;Vkm?`Nw}lo~@3Swi8d*R3Z729`AH=n`|H4 z_Wp~oe91?MEBx-Y_397>nnJ>RPw|S0vytyEbo2A|*9kEYoJ3%782`;~9!C8+POuLxKFGK+{mrCD8_kDAsl z(n@3KzkVHnfT$u|{Q>1tnh@|xchjjOk(|C2V!h5wo5kb5{!7GS9i%+ArF0e)avqg) z@u)h;=b4u$wVz={td_gt`fQdo#vBERP!Hr*oro5Dc`-`)8CHLZc&kl7(W;{UZlyzg zk}=XE{)Bg5T=dn?uxdz^F58)-4)$srNSkc4Hv)!&uItqu{>2e?k5tx{HqDEahT@O6 z1VK>+Bw{bQ^vZZp5j}mDXeom=a7)XF+(6~bVo>tPIr%n+#9|18fNy%GODjk%`lkX-tBQ zaPN&lZ~B4wZkDIGwhc+_suPNQ<+Fb#N`P__;xV$Sq@HNEoFZkgqUL{Nq*fjT=enQeEm89*W-%M zstxVbSUe@F1pND`kpQaf?P1ymTS%#fo_g)z>$f351m&@N1164CbdliUOSK1lENY#w@m|C8OYEf{n+GOP z1-a-TQ%|fx-2?EJF64vFZky+_cViVeq=#_P$n!A|{v_Fbb8=F+ywU)Z$JQ;-00Bo| zwQ>j%2Xc*6_rUk`#7j}va;a778!^t3gtmWdj7;6Bg`erCz$u74PurJEsZwSEGr~xx z*97;~9$Sxa=9+muds!uyxYf8`HZaGkoz4n-v zWZ?}0FJke>#SOUB2euGpXSVu+p=TL2?AkSh4Rh+wWsuu)DKRtF;Bm+fu&rT5hUI@` zE%lHhNbqy+yWYRLJgphaySE$zr;KfAHpF3eUfGJ5QBv!R&sgdjh7DjUAOs~Jq~2m9 z$3@Ybi{PXE_nS|9Hs$KAvngz5N@r6{4NPj|aK4ifZHa*L`XkDiSU zDIIYpKj#GaMLuhlVbT;Q*|4nK25)~86pjIeyhh{<&wVC-k%b|ovNG15bt9kgI9c4)%5svbU=US_p?b+W74sRdnmWu8cQ!4(v{ z31C@3g|Dbw#0cVoC4rAq(2$J-9o}7X2G2~Cw7QXR%oxY+YGFg$Esa= z4S~vMtx8U-318CS)(d=7h^BGA5E)lI8lVcA^3mmXj5B?IqGx2uKUegM%-j}IGqjCs)oFCr^2GD!UiKG z5SL=Jm+f=SvYW!KTLD`bX|rPu2hu2xK9Ed2H})5&?TdTi;32-0SW40{DrZeqq@O39 zeraKS@!CFxFJHpprR_x4FOC*R0Q1vYkS1RSE+3yEhNB7cK8pdKoMV5J1_w;l)Uh+2 z1;w}G5*JXyG2+dH6CXpJ+xFVjRzg%(5SYtk#p7aAl>_-o+iR3&Fzirz)uKtkWb&$4 z8M-%@9=Zx<05`soYjILh1|THxNV-62?AG%1x?CjVvw@Pwh|E2lW0|j!*g}NEL}`G_ z07HQK>9JB}OxO@xoCbeja30^7pu@F;WZAOk4}Cx1zL`t6A*F7z+KFjvNGq^DXaQSd zC*tKn?E%WA`db9tJSD7EXk+%-8k{JYLS2+Ad2Up5d1T5m7l6oM!_!p6yAAsuy&zEz ztgyV0m+kW8Q4)wjVdYfA|8>?ZwNc^c2krg&=IvLHi_QXy$)|s_(Bl?9ATR1A=v?6> zGOPi0KSy-oM2oZ7hr~hkowcjR05S#QDQ7%)1c2m{Suy_N*K=4exbK7?Fon^p@hUbx zXDjFJ{XcNzE^QYq6^TpaAvZq50FBCP44VIp?YT*PavCo#Va(cfB7f-<+1}};kT8JW z4j9;Ta`5`TUFP87zcH6d0ZN3qG~mtQLks)-vYB40faZVu|NP~V#DImb*h>oJP@7D1 z?nHHVDMfFkWdQZ!(yoR~smf%l$s*$(WWi5X&(dT>j_t(Go7nc#DHo{IYBv}Z`tp>#h3miOR4gT+0Emnq(yDb5GIZPMl7(@15CwIFH4kZ;4zUB<$vz@EO; zIFmZ0L2YlD)M>}A##_VF+uMtWJ;jw+>qB)LSxA48&qnsriWKDVd0wRT-(T0~lZD&+yogLrn8l3FQgX=KyCX6=ofA%gXdOM4h$eRI*5 z2^HRZ;S}zsBk~0q9zMb7Gmhn@An@HsywjEyd>t_+@!bIw0XVbNvzCoZ{{SF)6i6H` zebj%QkS=I5gl1Se$DG!aSrc$urWX%PIkR|#HPvY>?W5-bB-)0wg52-YJpSqfig)=j zM(Pg8Dktwc;YNc>?_29_=-lh82d0n?as@=cRd?6|zOq=uk*rPjT--2uK$13kjn?1- z+7w{G0)ZYEWDtY-%;k}9y6jy%RQo73QG+uJkjUlgsO(gZYxP4b>x3CH7XKhm^@1tIn3qx!|c0xWa_*J&b3uU-60@! zU{URGR3N{-FP8_zJfk6KD}>pRnj?R&gTuuB zO&q>Fk<}=DL%e9b0o1owmxr{LN-HTf)83b~h-5vNPVTUzUrGas>fHy|9EZ;en`7a3 zX*ps`kL7YsmuQzBz89x0Jh74H^OWapSoG}a&!OBIoQ z?nBL+nB)C<{pH8>xI@Rf#K3>yp?Orvh|WjB*aeyL)T!b5bLiXgnV&Q(pFacDYSZb6 z&|_ITlxME9Uoc^*e5L{|P|dW`+=4voWfFoFf6EoDu6efgPad$UQ))Vx{BLUr3d@-@ zC#6g3IFNHx&H&G=?0QKK?Z^K7x6f^M0WB>c$E6_l)WR0ckw<^Au7D`dFB~4Q{`%%p z2ct2w!fSR;^(-s3iOixOtN6)v87}x6mxn+>Ya*k7({#bAEtUr0qd1wSA(V@RN_pJ{YxW0hU zdw4Dd9N4+eq=tVW4rkioPle6F2;%z|g^26_Ja9>gd(n~}l1qG)=VY2Al+&XO#s!zY z{P^i%US06Z;U(DFHu5Qx1s^T5_yY{zJ_5_-Gzus^Fj>p_oCK~DM{JX${x(+ZIfb?# z_8*VeT~039L2>*N!eOaBgtIoM7;IVV(vA;M|NZvv@kD>0aR^IoR0a^lL91D^<~*02 z&9;aS!20CVl|N3;VajUM;$50yTc_$Al!&`Iu2=P-5ESvU6A!FvoZPaMZeTU|b_%h@ zo7Vy;k92=VIC&7h6{{`dtK2NT9M~Dtv@3;pRge9{(F1MZ$X0l*efnq}Mz+}eV{MF^ zSpk&CQpJD9>|(8fj4_7Zk!XuX_*U3j)63l!QF-`wqs%n+3poZ0oM2EO^Wg7;LJ<9$ z#sZW}A?7(vu~>j-omH78WACst%Zv~rZ>TTOUF$KW6j5-*ix|^7n^M;)@Wp?w}^iTY+v8K)@|ZIo~6ZdDRHgP5WOSN zHsxdrxkaFVv3V?9;J6jef~dW2WzA;l5_8vd0^-uuiviqsw}pcvtCd>$nosMTg^RS& za6tMBU=<(6=3;T2^LmyQO$$!8mN5zkGbC-uis~&@d;R&zqXYs(VuRV&s(pjl!}Z&! zt&V?^)1+R+2T*w|mNp#4km}C0cbrrzG-X7|I_HSxQkn69_0@$(R{+b!A}jEz9K$l@ zffVF~$uWu_f#tDWC)+MEVO-~!^;jvYpKN2vG`Gt{lwY_!_&rDZt zWxJN0a=qT?{6XfiXh49uIN<10}>?UNz_7fOHx z9MB`2qE_zC;-}l9Q9lhX>_n;X8oiIg`zIYCQEdDoR&75%+uL9E$!GLjW65Funvd!8bpYmS#^TR{6{f4zS`)1#nq z=8V{lRqJHi$W;Qkw@f_|3wM*d_!ocL7mw4a3eVaDQj|6ftml}t6{i%6ZeJgaenES2 zSvC07BfNSt900_1sln_VjVS=}rG5KfXdbJ^z3Uu|g$+%}G{-5Y_t^@vfwuO|-4fb& zr&SxUua1SPG1n^AIqY5$NYhrSU?Crb=CNv;ctf@V=bq_6WXcq09lcl$&8~l32+(i} zJZ?1}&O>I9IyA6`|nJ^-1>u z&1F{cU;vdc5y;zu|LFVh@@jvSxmmsaAzU7277#P{sWaF?!l{|luw&Ro5$Sn1^f6#A zX10XG<8rF0!KzLg3ZjMYpp;t~Hqb1^g4^n?=@f_SqSwMPTZ77Ar{c;1h!n%ChB z6wOBJtK}3HxY=%}Rrn5&BJj!EBgJoME~^%`ENo<3tJl~vGP-}N)UwVouh!+hYG2(l z^U7^n0}ZbJZ#+k0KQn)?d{#EwvDDjb@*ij(tCp#wiKQ!W6wPW{CGqlI=MF<}Q_~;Nd@^+j zNY5*WI&9sgS{kKO@}U(yIJmc(%3ru#T9zXg%y2*vtK!jR4GD6N97QA1`aQ0Hb<5Nz zJGP8&LS{UJy~08f5ggB)L3lp~%_R^>q*8|$Xqd;kQkGuFf9<39{aEj1anzGZHm}QtEOUb2csQrS%{6D8dmMC}vwAO`CWf z&7R^;l}>*n-Pzq+7*p@~{8;yGIV&xh8Fc{jxm_#x6-N9P!_+IM?jkjL@S5A`IE?J2 z`4@D)G-NSM-Jb?(8b}WcnO0<7bWMCH%0(WKF8C9}q2PFW7BI%uE z@kv*bNR`nLf)E{w~R;aRjus0yK<&7n?J$fJ) zCD^}1i%DsFXX+WWlaqICWbl>NI9D)Ft`|oOg!VH8Yd7QBjH=Y22tSih$ zU?G4pSpl#}V`!3GD^P6#f11-<e^31b(mx0)J)+G4D28zU>T~XQZ zZ!txGyp4il#QwH%Z|j78m`?7=7yqgkqxQezia9Zxl#Lcrf31j6OR0zvxown;`g9HK zd)$>Pl4^DVhcX(w_@WWEC!4Z%N&Dzo`BUEo9Vx6lihVIAx%gy98VJ-e~W{A9I(BGshEJ z%;p?^Hsy!dg!MM+IH$}5o{lUsjITYbpK(QOPVSS>PLqr)#?1~YCEzRmPTkn7_d@z{IaJqq_bfY^n0%T9)_@g zI}j`2enC{s?sJ*S_EwEqb?tp|?)W>jkWphW-se?q^$UrmpT=w*I87(U?!MMyu&isj zYROeVS#6rs6$(TKDw@(PvyC7(4HF z<`L3P1zg;fI_g+{dJMkuLjI4sHUz4FXhku5UHpxL%PAao^@q88p6Qhli!s|Pn}Mcj z31#j01iW0EV13b%``PF3Am}fcF;LqI%A0w3o1VDFPut!GBytC4QFp8jC0v*i1`Swa zwvFsChHNrSWxGDu`3x*#fu%g%XRGy|*-brWKYp#_H%_V1#m)E$EQBi+Z^fv8qnJMj zNS3ObYzdu?QEb3zuY?uS)o!y?b*!Jf-@$JRpJtomS6;ilG+Z$mtQ-J{0^*(V1IS5h zyg@I$U+L6~rRraSMJzD)E=4LWc_78FLK8G@o}^P{k8yD%^1x!?D`Buw(j(Y~vw0U> z9&WX|PoKyl_sSjB$ps>E1}TbvcU5rQQpaf1^|L`tX1bma|BmW+aGO_DN7J3u{Qsf!#vq&elZ>_7E>#KwxC&FH;t^@dxK!P@A5w)_5r}=dl1J|zCZ$I85+@+AESjrfG>e4U=VbHOL zttqZ(pw|Q8keJ%)eIK#T+k5GqdMx)KNK5gjYp2TF&kzMSKrZr@$(2)bcie#wknBM! zySp75xeN{ZB@lcp-&ePHFvt&lNOh~0S7mu*c>2< zi{%`G3RzX7YSw+qwB?MfB>dhr6?1EVPuJ=kWLs|;0F>%6;A6msT5Y&)NEcPN5xu3) z=Z&_79F%u=RGeE@orFNrbSZ_dT1fKAw?p42u#kRvH{z=svauzgGY zwhiBZ{{ACE1jBpflY%DBoM@i9L|5jT8aVc{@k&@BViQ{GhvIWh z4<8}IZD97It<;7>t#aI>tF5*-R$9&J+STMyg$VbQA<4yqk*r+U$n8rQfH`*uUUcI* z2rHr>x*D{M4!m&AD%!c2P{G8ep6a|l*!8GF)Iq?T3vlv(BkNrzwR2KO#nF?*&c#U3 z!-~;_a!^dJ2*@npfNdY$daM!{nf2>2;1gDe^cX1Ws+1~zhs=rzb@N*Po?9gEd)E5> zEkYJVb9X)3EK8=ybLf4jY;1#Jxn4DepRhtip%zAmb_MxL2{Ep9RQd*}2RGYS6->nS zJ7RV9wbPk@hooB_tKutGR`dCEE8D9o;1gEJW_0PGVcxs9w`^1MX2(P6q)bC!*o?m; zR##h;M{$evpI z>*DZNSb60vyxY;?@1OjnraK2(=W3tu#1?fO+cH^y8dI?gSbCq{WQEUFcIR||$>yBONxsLhXy|Rv9`;U;g42WVi8e5(I;A@g=>xwZ$lB-u~qko5-3!W|2 zfCI;Ww8#6iB`@f$`-$aXxtvv+#@N$cBP(cR54^o8Elc; zp5BK5p3zX85Eal_&(be>-&8EbNegI@rZuFhgXt?fCjiCH)y0kIVkY?+Rm6R#JNzlT zJ8&-@IB}D|T^KxD#fY`*6e6sUdwwtuu#KUAeg`{r&WuIIJo9PA_?AyU!-`m2-B2Gv z9?t;RpNMNWWLI-(o+Zez_qcvV%%Z>M+w+mFLlJWK3&Vh!?9C-{x&Y}XtdP4-B=`Zu z<#21&Y+?nwKt;{GJK}{k|0`q`kBijF5TuGa++DKgf`UD_wMld{bwFG}o;2CUnFRQM zg`|3ffb!X;p+RYBk-QXFkP~N;q%ObX9keP~V{3uf@;qDd(+hFM_?7|;ViKPoIB7<* zNPDTgi?iFCG!WwY2+66rjU&?WDQct3ca4$2IeMEL3G8Oh@q`s}i*P0oRuM4mDzgH4 zu}krc+}IrfFZlU0Ed6iDF~AaKp{}Zbpxl+L7aCkNbMo`TR|1QO>)?~-tg(5&>_%Em z$8SGb0b18h-pS(%N%pHc^-0w#M$7NevBtU%FHXGr?GeBeR>)nDcYJ0y?H$!!myc3g z!%CTh_8KoNuU|3Ciw5#l%}#vMDqYvee(~r!RH&6VahA`(BI0UD1%i?4&3jpY%;g71 zF1D!_&mh+U(?23id{7BpRLZjHK?=*spRlTXxE=4mxtxxh{_|JFWwBsMo$lT^+PyzK zja4m~CSU{}w|jNdA29?-QWNiTt7}daYwwZOwl)Lh11R3i#}HOXx6N$SXi~-EE_9@W zXS>EAgKr3U(KT;@T1RX{KiwUFZ5OaI5NW@OmDX%Gq*Cb@J8wkw@%|A4x=3?Ac@&qf zM07~_V-0_|HDZ(w9XO-(kw`;%&3qo})F4RvO?$w^@9T$q(dzP5mf?DIqg- z*ZBc{@cF~XZa;R7D&&AIo}E1L?Sblv{Pchpf8&Ejx(zu59A!EB8qZqSjhfL3?EPrhdKdkD%vC zAlrgSudwDlidrXsVeEjE{b3S{_G)ZQQUtuZjmuTz6IV!Zpf}J9NOHq z-!yza!-}97RvW1GMqCRMiQPDB?cSu0I$hiKDEvK$!D9Q_Q1t`mrO9nn@LTSw0)|<> z-W$9JG1x&^RYQ0o)$a!0ll73(SEZAsys)@ph$81MN_nbgM$Jx@uno-pm&{KjE={TS z9zzuA*cfRV#w*Q##VcEyRIdD}*Sb^3}D~2;)YQmiE(VHAGbMB)d*w3{muJ z=|gUHCa#4eWAZG^M1|`@A-Y8sMHKrvwmIvXfaQS7sM1P*rMtQJ%H!6B{lpb>I*;s7 zs7S2>swh}t8}q6dDl%7=dm*kE2(b;Qrd1j}1H_+Aj6gGQ_b(cJ>xqcsWJgh|`BbaD zCrO2pJ8Sqw-l#4?a}O(olu>i*F3_*slHZlJ4rpkOr-5+fb`krpFjj{76JePd zmo06lfdc`5OPs5jOc*VrRJQBk_uj!_Pu8)SSE(6^zvxvGKa7`&jU}_V(5jf`j3m)f z4Hp<1*y8mCP#7_5z2*&uI6$VQ9XDM_v(PvN?4PdURB_C#^yg+@&6UcNM>)(=UTjJ# z_QFI4QL~vq$^4&;+2Xo9du2_?vqkW;7tecO zLHC|(V>Tz3v@oX)Q`nd_yA7LU?zeW{Fm|?)!8&mTk{@$TC0kSu=q>l=!d@@M6$0#$ zO=TnPJCbPX5q5t>LUpRttA9)wKU2TOOX6IX_VDWjV4uWw3!qrNDj$atG=I8bW#&Uw zO9A+QVz!);I~*52a_eM_V`$06_5Ajr7T3ASB?0Hq@*GLWG}~aBF5e|hkymA0d$Hq)n!AtEAnBtil2{#!hX731bxO8%d&V2b z)V$jgODUly8fp*fHi7-0lwBe;U*75MKhMv9Mlhn0xRnC{y}`^_L9#Qal$v;#T(hr# zvpo{3M!dm69JL+u=Xv0bj}vu4_V0CD>9 zEyD9%_s@uTF31jBfo#&kZ=K1ep$CY*h+ipO=I_s+AO8uV*%RrB_r}iSO35_{)aog` zr>=T=tMvX6G*oF%n{M-ly~iMr1uM&cfSQp{Yj5N0iU^t!lHX6QX=lKMnkHk3&&J*< zO9iW{>2;-tJb^o-<^pEsb+Cd0d3pyT+~A9Ot@ZUlJwZimKal(MoL44P#a0!&&RdM# z0jz`cf4!)_?-jD9KrDc$)I141&HU~SKRUQsahdq9llu2>F+nAuQ93gXOjeVB1wICB zlckM~zfdpkr+>cvDL+0!8p2(=5^H)V%wyXGENFh@1$>&uv9Iy_XIL?>%J9=nry(%_ zXiaAmU}RJaa_CKm+B0a#Gd!Rv?7ido-7Uukc3$?<7b+wv@Ms;GLZ0p^pKvUzKepK z?p{l3{IqF!>!NP3i*_+*aP_B<9mqhNrHMCqPUT_7MN?TI)7XpUqV|E95Ld*qV(%Pr zVWN_O*}>=qS>D|VH`BOy?FBt=JHSv%K*W{&0)tNRz+3{}viFx=V~XH^TnT`4Y$S9h zJrfk7so#0}i$yWIFbH5m`y*lldN&3VKrL(;Lqw-*KD%|QZqzJar}fXMLOM>X_aAKo zp6YdC8vUVZ%{*G)_2y{pk7*)a%VVSfU3Os?3_PWQ`jtj($y*@EzHTyjf(qgCT*j2P z1VeRr@oM9Lv|U@0T(^#Y+!DbzmqU=mm10U7-R`n9;nh!OwZDu0fi25&S9ch}g9Bue zVCE{x2H3bxY#^lliGut09Cvv+a)lKxG zC=(gkZ6Els=s?^XWmZPgp{M_aBLrfkEl{b~4=V^2Vj*+*DLQv2_ z-K(|BVDSF$UoQ5sHR3}7OiuxsE{VEs*@CWxN_Ej=W=t-#1KMlOi@sJGoAxPm=iA72 zDz?wdAq0bea>;W!NTI47wP!6@|Jxlb%as?ZZrE3j=s}t z>vC`OD=L@8s$!#d!Dlk}o+u5r@=Imnl4ipqDnzGi)LeD< z@^7MY83zVNken+rOh6h!93`Edfsg@|gT3Fe+8-Y->i;I2qobSlzIb|5B(DhkAmgAD zUS@7zLAl_UFhH6?x{%{L*pUR(r@0du^H}#1)u#tDZKwd;l-;bO2j2@CA1XITjXTDd z68gD+9vTuzW!a49cZ~5=D(7gY!9bBp4Z(-KuRsQrnkI z_Zif&rUCt~SQCcPPTWzeXy!&_>9?f%OFb5U3jbbXmu`9Y8N;MY?c6bLiUOo{3F`Uz z+#XIB)ue}dXk;2+Lnk20Bg`EJ9XRCj_+C-Dkmb}-mMR$X$jJ5}qvA0JSqk2DF7n>5 zusr6{s&ra6zHVDB>*y{4-6u7$Q^3I6zQQXipI0y;t z2FZJ^b5pLmogQ;+97Hpux|E1zyB(0cqH=*ToQdH^ww9fnq;k4)$Gu8uJ6+~h_y4)% z)u~6VfE^D|_fo?yIS!z|jXosva&F3hm|PYrPg!$HTs$f{anRU1+ZohW-TRX4pDu22 zad5((v-b6%@qqoAQp+)nnreGrtRCuOj}UpAWb-*z24veufBblCt@7rb?&==&speDm>tw%BQA zP~<#Q)1oL2D^r#V1P5g6(q@bbXh3mQrQ*Y zNm?0kZ=vzj(uz-8jTgh~?=B$?8!P5sX4Gy7O3?fkpz)yqyxRLMsvqF`AAh+_Rn3mC z7P_$VI}gxHMkVcNh?6w+9+nH3iV}@Tu7D+nb%O5Kr4iMXhvfIq@5j??vBs=9U}ZwD zYSCn#jd~D}=4Zv)-WP>`S6D9X@1?0m*PRl=UiHKyfe>#+q<*+CnV%l6T*Hb2A844z zMhmEzjR(mz14?Jz)KI_u`f!<@IEAK$n)gX*10{r(CO9coQF(Uro{4_ge_X_-4sZJm zo+RT<1o7kS5+2kTSXjDCQ9x9m zPnWRJ0TF;~K$lJkdQPYyTcxz3+UMm+WT{V7TeO{4TH~ekLvgOx2JNOdE1KhNSWlmB zt2NN2&ZnDoB-uIoyZ>N>o zAvI9=9M4)(@Z~de7uu9HB>%q%%40rG!MBi8b@YQ(I_%MXawj{EsP!_l_xR(pR7!gq zRH+nfjY0K)ZBU5{CN|GX3(>`r?y^MH#KAqk|Nf~G= z(J5`=*Ip&J3N(}O#gZ?(v=66j4};~L>i0kl9Sz6Ob!y9d#xi<+-*13pe4?tME#;J| zWqI9#1(b<2_iZ%-`CT?d?bi>3Z3M%bobCx(xKN~e7H!zH}j=nS@E-U2|RBfQAR5C!J zl7**ulAbZj2tAZ>al(8)^wURHq{c)A@Ex?S6FbVn&bCU@gn}{OUp%md|D}r+CXY(N zv{WZ;6!6YXs*I}a){a~>nqN_Q+*B-8ITL4pIf0{w)ld{9?~0$=@j%x!pwo!Hc+N#}^N>NCA0qvpF^nAkPj6g!8E=Cji^Dlz(nf@9prC72^ zjChczjXVTp6o2)38IrU0>+?Szb8<Sg-Q&@X)RN@Y zav4e?XcW!3Te4o#re4M^CXZL|G!Xa(G}Q`PaR}%*)U|Jw!?8txdMasvm#BPdaM@$|BA{*6W8WO zJTn(XJGNbD4FXy*T1m|=ZVCT{<$*tk0S&Jd(U9$>g#;$C!MGBQH`nEW44fv3;MD_cK)&y|R>2>R3}EAb@^7N@$gK@l zlMD4hvz4?sv$JeyEQEmLQbhj=%O|&Jtkh!xQcrZDX)ULjQWz)KImx`%>g0yyCXucHrS5z)y zX_;n{O#4jJ=cKDOFlgRw?zvq=&k>eS)jBcIrJ?a00?FPv_c4kD5DN`*IUM|o%44zO zM)^cxkW5WuUKlK!n+;|OK<5JCf4X7QsdEGRDIkN$S`@O<92)A@(4Ol1Ey$ma;8gG- z{agnC7d{Z-xk=@J9fjV{<>2|J8{DeR5}p>8OB3fCbOQ=zG@#wa*!4Z>`RRwZ8d%QE zz@<_(g*m`~a<*4?>iK3ff{m zLk{($033j|7FE#)FI2rB@O%9D+v74n3MiOYPZKHCkX4F*5)XF9-S^eOtKaYXxu}`W zol7jT1vQG6HvoRJFqV zLp@ZV1s}B1Gbav#6#$oo-}t_GPM1BuG{93&%0azJi^FVu~IZbE=o? zv5(_2emo++K$3%3Zkc3G9`{O{r=E1*mg=cKxvn9LEdVQen$ZD4V#^_zy)@n~*CwdV z;v*(JwF4rI7`YWw!JhYtywTCCR!g_F`sNfBz)C)*J5lm=1&N_F%0Z)6^>R^(|9t-O ziRx5;2~l=M59VO>C}@K%X+Q^B6jr?6Mm-+GkCS#Xc)QVCj5lA(K_kpyv^2AsG0pg}8-sOm)XbP=bKBnp~QH|ai_3KtfwEbkO*YjF6nYv z0zv(8x}Z*Dx2nAj7OECdqtF&*uRtnz3F^~-Mf5eYm=Ah+7U5M!z^e$(AewlA_x<)G zV)7X03luv6wgQ5p@y?J0#77%!MISup{WRv|x69?5I???s)6Sw;(*fYeTCkf{-bB5H zcx6VxRzW4+0lj`>b|M|;f z^Q;TF1I-~g`<#+WZIp^%O@vxf@9P4?GM8JZAPR%?LVWR z`3lQrwGcuNl5GzuG!;#QycsFhgVjreeueeTW3@&LJVB}`U|}{ITI4v8Z=sB!^|HP2 z6_!uRkJ4hFqhrksFxhNUd%T{1!_nyX!0#2-ACJ{KqIvv3ZP&J3*NrQGi5GyE&mjpi zNyUnFv@MN3|8#HpS@a94rfMdVUFjjYfNl_MM2M^qsONPnP1?1ru$SE427SSDiCaQ9 zZ=2Z3w94vgC#GFg5hhx?Zla5`MkQV7JH`fmBXb4~BY}0z#n7+c>r-NX^6>8sb3kPU z;|Se_4a8pvL#>a!;)~-{gD($(Vc^u~)9aZC3)&JpuQyu!uH`Zs>}CnQw<3s62KMG~qx+fTy#G)ta_$AX*1fHH~m-wtu4XX*O(h zW+@r`SS<`od*`zwBB<7Oc}o1T&cnz0Kr=nvnnaFmKZTDg6A}%FLbl6YEgVk1I z%)8NzRwpuG2OA9;tWO~g<#N_J_S=QLr`${597)Oc=-6jQ0vw!wn6mo5+5HpN{y!I7 z5&t-QDpDIrU<+8cI%ZpY9?smjh>9mJm*AjC(D*UUBBCYD*wqTwU^BH^W4~~jFI*ns zVPxU!Z)mVcbK1d*j1G+*`zyD>eZO&e1PH@dm?OtEa2l5AsTDNvgu`ygaJh3PuD`a= z`8sXc#OCE*cY(NnXk=Y97Q`_tH-%4Jzg%#E^@W_MDq2X}@=(>W_U>jp_SS39MyOIhm+m(P32 z#=2V-jqCYe+P1|J0>Y{Csa1(~BNM;gT~I~r;xLV=&sA*824O7&2i^pHet+Nn`>{V? zfBD4vTKOV>w5%$1uWkn+jCmUrhZc3WBGQkaPARA%DCj!vOr3me+$ue#%ZfPnd#sC6 zeDNyhh7geoC9a-QFzjSXBli$WNRS!v3hUDc)vgNSSH?uVI-Ju;!#;yZtW$3-4n*aW z6~RP#O+Q#)69c8;OTK!#jSa!wF0~q>a^Zr|J*AF+wG^Zjq-)g4sz{5wgLlJ0LaBu6>`C`2sOKCjF-RN z?o=9oTQ7izt`P%y8NUbV>J!>u8&ug1*qa+NFa?MU5WzMzr`ez`fCtig=h17ug{^=7 za|x#7*b)338StEHJwx=@U57%`>gpF#15_@-GztDkIWpTusu`J+RUpweBv}Y~-9AP9 zt9&Y_RW??t~&pmJ%fYTvQrG>TEOLLi|7f z`BYBXN00;bPG7c5$fw0wLK7ARCEj+a+QiEtQf+>y}pn0ki~3mchA#hI)Cl`tkCA z_SfGo!J&?n(>M(jv_QUYlgYN%VyT=~Z%hlQT=I0YjYPNu--XJYDaCB6dn!A;FYg_n zsC?d7<%VC{8dU(y=GchtywaDw>czl_sD8Lyj74r7ZRd5YlA(F(DjIF(5_7oB^?IW6 z*ui*0gF;1ahLFICA0WwT%F~4#+~LN5X@JV5>ac9A1fpCyFtXt!<&mZ}Y-lR!nxG%= zFE1|b7>!S!htMMANIm{i%C|)em2W&Ht#rYsRiM%p*t?0wwlwx4VbMI#5^k5Z7?N4yI?BlT1@G*8s9ovvV!V$QmlpQ;dHJA$%=%Cz_s_9)kaBbw}uhG z`st&_${Cff#Y?N57Q78xiX@&{5f7IUXT`ZA64)_dAk=ILb4E49QYM$7s|^Z?fXTvp5M0MFJz`=FCfh;2h24z`A8j|ImiU}n zco{7B1)U3sZQw ze0!1yg(#nYX!p25_0l*`&)qFr+I^Yqr^mGAIK+mGQx3q5*{uQ z;jDm94nG3t3?+_TCera>D`y$;V#5JUKV6DLSQaZZ$AZk7W_!{%q4TMs-OL4n$s_8T+Vs0y<0GU0kbm*(IU^&G#cV&M_jn0@;FmV z4n2YzNJ8USld*FyJ=?DMgY`zHi0U7gqNC1JDB&~IJYRp*jHr&qLZ&GSF7qe2TsrDn z)Xo8u8fUgsQVq0RLVQTO-@m~pE|+^k#LB(%itBJfXqmd>Xxb7oU@AANM_evnqGj6Q zNDvTzn5`f&xui*lo_^-J*l|1A;p{9)rYWy5ZL3*s;8+sEpnLd5XFcAA$7!EgT5M7g z3+Pz_7^Q%(gT9}cZ-y!a<a^&^(Am)#Dyeng+R;qE!QhvfO2^#%Bjz($x#gk zeXI#et2Uwc6Xf&d{_XMRv3uAmJ8FYLlqxiT*@>-7Il5a}>vC85cyozUh~MlIO~Q;b zyLFa_j6D~b=I%F49$aAuUYC}_&dd@rs%v*ur9vtz~pkCQtDWre0XCT4Z`Nc z4SE$z4pT3KPCg#*)5qThKM2rNVGzk_s)J*KC)i)j+U&MePM0-lf`397OYf&uaO2%w zSxyKEi`T-q6ghy($KOS8mevB0!4)B(%KRifax5b>*$t!K_jEcK+SU=KOnTBHHXrxC?ct(RXCAsT-|gg@psXf5v@X12>I1#0xodSn3f0@@G^7n3zo~5h}?Guv>(!6?aqVU6e6DmOnBk02Ew9p} z)QAWV_BZs_6ZXXA^Ry#^*QC5P(D-TZQlq9L3E!yYl&;D8MSNmcK}4l($vDtpRYqsa zl_9{2BGTVpwzCz|XM9H?_3H+L^SsnW6fI+~qF@tX@Rye`@2~&`vX`$oqZ~E8GRg-PDjO* zOm)^JVdHze!usK|iG_1AI2Lz+eszj`&fg3D7{b4u`zHQy*~D`~lA4gV&v@1yo)6M0 z{=y8k-n<;1uw0tL3N3$MNJ+!Cyg3XSJ6WV1_9x%2;yztEog$W}N2utEH8K!oi@GYU zy5mg!qI`aQKFn#{!eIAMl>pH*>xmV@H6W0h(!}8c>cf)DVGrTNVm&miqZW>J9+ueElQj57sdGj2n4ybe~|iML(|=UsyhTgHYD zPFiibx66!i!t&X})vIlZ8~Tg>YrNIbvlCU24ej68{yraLK3wLEpOj^l)~rv21yGtw zCs$JEHKw-j)dhcGnYq9UYcsjj8N$-a0jmqlbX(0C(cxkd{P|cfuRmRI;s0-;!(TO% zk(!1cA*!?4Ko&~p`@{9b_3nae&c)%ENjXFcu;@Y!R)0=En);=26u3B<-RXQG#{d<} z4G_^Gttc{eKd= zf$Z-SL5zRxn+W|R{3I0EI@e-kxj3*8=)pJpYw&($f5Ez*I_}kZA0M7lMV|I z;un|m79kRU3dmR$1c@eXja&Bq&r5;ys0ghPxb*ADkpp4#?BLTeb5p-BPXO2c%ZX7R z5m1}RtL!+=!k-@@)G?us@?~f(VEF~smRhc=F>o9RG7L{E$8T_7Y^K$^@cM7_ND`-0_hMJplJsFOyaEA7}Jau?R?B%u|O-6B3=xukB| zwDAppU68|Aapsu#4ktFWY0+EiCM=IPGy?85a@{G)RBaG%D;wcPR+lLj_ zc6#MB4y{_#X28N(1H++(&c&G%sGiS5d=lhJz{Z#Ohr@Y7C^%oOBMtP~+hvIJ=Yzm} z2t^9dm&u$kJ-XtEv7tWFPkXO^EukQy`slQOfJ~D&GU6Npwz?4Qb%N()vzD)=!(U!P zt%7(BIut(rj;-J;*hr07w^QQIw{868wvS>U52{(0o>2ObR(2VgLneCKmpcCEhZis8 z`~0OPg43kNzVNnV;VILp64s?MO;|34!%Q=KFw+W(nnK%&x1cTIj|m-NFEZ`Jt6;u= zIiwN440)>{I`px60J|BnhS@LHK2KOat0l*vYrzE*ay75~wnCv{V=Hy-Z4;jZ9ema+ z_Vxd?U0ZS-IF7s$pCEXe4FV))9V6MjmMv@M^qVMk{}%Owjt+NQRSswH0c4V3Lb)_O z8PUBqeBh7a_dK1%ZuI^WSjdQZyX4G&MHl<68h1_;3awafAY(%>C;6YPCPGH6koR6v z^I9|yr3}5T0(9xr+17>Rd;$v@G23f0aZMF8;<$A@`N8ix1b$I&T=mm*KSp$%UKjgo zJj91d#Mqi0ya&IpNAoSPes*<;agt9^x2aCanQ8T0j*Xh#PzSSo>HY#>VYfwp<21Lt z!>4YP7pmsH z2|uhYxz|=AFDP^;jY}!*-?(C~WZEh_L#Ba%wdp-z@F%*zn*gb9db`GY552}3wAD|- zy!9AwBB>)S%B!bRE`7B=kp*3UV@>j>u@f9WS3Qs*+84X!fF^1E;=}q6vXC+BUV@^n zS8>-&ZyI%U2za)har9C{^t^cKqXo=we z+56p*yZ@9Tqd_l0A$e?haXR)wzY}Xm7PbC=bDbn-Q0{&D z1*v(rP7scQ)OqX9^bfL_s&d2&L)vV00mlaCKMku+<)kdNe_{Ox-AY>Tr;g>dI&QV7 zAU%HT(1#yuu8Y6n-@sy+zjzH~_IGH5GnG~_tE9P(L-Sg}^8ofI=3xJ%y0e%&rYsP% zHG~v#tnG6SeQ7HH#N_gSLx44F8Mb@Q-DYcT*J)7Y?gDTH7IpKTc4vRMI$Q4C2hB>m zc(byR66o5MU^}po5nJkoL=_57ZIO9*xr69dHzWE>`3kU@HFiq1m5O_Cbi|00EHTo6 zS>;_ohQ0zUWW?C}Yq>v=91$r<>D0j0kT5l;l`jYA?@?!C-q%!rj0@=h$Ov7l*S?UZ z1lgeRrOEvRR*V)Og)94RT!~rpDAWBJp#h4fTQ|3l_qZ!SH;k=ob?Dt9c`-6jQ!?+R z!8Yl32=xFK6T=Wv4NL5JIo4dBkY*>^tLi+Z+_-hz)g;K55@I}3_cRspiWy!LNq`lJ z@+%|u8Zu%B$!9Eo1Lwymb(W*W`3}yBpB@U>&a@>phTuyVB0)#J&_Td;*Kf zk)X`29c?1I6Km?g2mMBKkauOc0Sl^jTD-mFsq|VI+aN(0RfKzdGlN{z>yG^W5_66S zecjvwiu&1U*n^NBTaC1P`R%Qr?#Fvr5f*|%bsm-*8y#dt1P`fH<_5e*U%?flB6(+a zd$#>BH8*0j!`ZMGs&9iEuAt(uJeu)lF#0k}ve}o)oO+~~PQADbJz#~57I+OG*=3jN zO(5&pJacAQeV5!FAtZlE>f0ud0ddxnpLSBgZ+6jJed~K*HC=~vM2v?pGOmRX={uBe z8R=Aq`88xQoOQ4$Wp|<|>dsn2z<`#z$ExvFegxL}2^U$#EvThGrj|epu|L&?__}l< z`3G6ly{^Bg!!E?+K@3eV?jCDPJxG@HC1gPrhzANJA7rKu%Bp|oxYylk5R*<}?RFmg zJ&s$rXK4q`N80Wkiyogr_PP~Ht6m{_K^9aSnR7-enlcq^3}IFf^KJ7e7{qdGJNk(# zqBio;4Rsdeq1kQbQqSampo!de8C3fVutI7h#ouJf!1~%{oH_=`4y$zLk&&ss04ro^ z@mR;bYZkMchZcYCjMQBpRg&e>Fz*vqL~SG(*P4^dMpE3(-^61I7vhB`jNJ7;E2uWI ztVGy(3BtCOB6T;cGOo+8(_jc)Sng#-4UeQqH;>7$9vKZc#I@T37 zBZ!1ps;hst2K83GU^45)_5b5Ntm@YND4j)5B~a*Nv=CfR@=Sf?b7o9rGs)?euicO`0v2H>ioa(l zqiZPx@zR9;6IaX$MZ&g&=t+JC z)_Tnl-D8k<3$I9zH{}>t1aDrUnbNGJe*W9N8BVE2jol6+-2&LJu>Ck5H;sF9uU>4M zGd6&?q_Qq8CA-Yz$IJS@Be<7~Gaht$JDU)^=3b!q;=gzw~k)As%#J1yN{ zt<>gN-cHP$P18+Vf4syPsDTg?b%bRZS^mK8suTG7|#o(j#6dsXHh z)v)x>;b}5Dw8kA)NUsn?s9v#v`tlcRkVAj0rF+ROw>`_PD)YlTYwidQlqfOJy}h7y z+ET-Yta*Cly5o*c7hEwNjY>gQE^Z={%dFjvcKrT~_StKf+e6!rx0n4VVyxV!jJ-a= zkqO!1LT8VZIJL4bKBs^c)cislWNSWk%!SG9Ny_Yx0z+y*c9Hyl*0)~~(S2m37t?>% zbZ)=hXal)g%4lsVM(ru49n$O5#ZB^(lDf*W(LqUvAK@Gsr}26ouK)>uT}X*z1Cmr* zUAB`qWjr~VAz@EbyVR8Iw}`pRG&5+rX<=3`*V}V0Zs2|XqJp3EcR-53G>tp*UV}n( z$4;nM#R7-Sz?9B*X{HHGAp?bFlY4(Z#gJo41|2OT4UubSOsB2uK*bD|s~H0kW?=E_ z0({Puh`s5c<%`aFd4CCURP^%?^M{z`CW_UKF#3U}$NcSHp5LfAriiV_1g?jepeKuJ zO?ip;fwNij)^fQSetG{HVjt?YuwF>qfr5HHO4ho1E7<^5K&rno=~6W1m_iy1Ldws7 zowhf?INj@RNGj;)bi0XjF`j(;6|_HZS?Mwdf111G{MukxJdJwQba6}~{# zu=lhd$QTG^@^&;^L@{WWya!Yviwa9Rf#C@tE%S#Pou}8lLO>;G zWn(A^k4zOSe4aKTQZt0sr00p|0V<@e1pb|aO3Nv?<3$+mZU_D;h+uZ9oL}E#h6+Tk z*3xqxZ2NKil9P5~!SXLqHFr=UFU$-K&rjSZguM42U{&Z-EHWNoTh9+W^!2ZQn6=(( zDx_msEls;gmSVkl?R*6Rq~~!Rs3NT53uK?<;*W{*$>0W{4SrVD@Ow+^xyEu#F++vr zok`tqW))p&Gq1D#V03V{BhQzW!wN|@)0-lvzLwOKG8lVuJbO=urk~G+-vd<4V6C2M zTSOLn==(=?LoH;$lFA6-hkTbGq)BLf&=K zv5}57%6mF1<T6$CX?5oXtH{W_U06(bbK9Lxjzqopnw#@6=o`K zEd#CIHyZ(sNLthtqLeOf!J;oeBS6jEx6WZHPw@4QfC>I)8&YtLlP-NpJ>1}=Q0Nga8q%78Y#bi#VI6>_U}knxDHq*l#;!)P&r1lD=ehLCCA&Ar2oxMLl(F3X=GL_prLRLTx(iSOYj#Zhw1Z7-oA0D70 z*px|iyP8u(L4p;33yHks(aq`8!Unv>sh5!3$j!oiL(YJoV{l4aY}rc|xU_uh+zeDd zLr`(mJP))B0;e9CdHS;^KU_z4E|)`D{6#US5~9*6b1x7)^+&){ZHzs)EzPw*kDfn& z1kE7TIYc+7vY@j3+Li&vAHnDlxtyN?Rm@lsmz`2)Vs1@;TJO7hzdop$gkaIWFjgU? zcw1^-yqD{oe(P7=qR+zvl*HvZ=3C74DH}4NAzp#CK&x9BvyeTy?2diu0Ti^*o7?f_ zz1v}TbN7l`0t+qacu)6>jVA<6%t-YDHeA~=HF3uwEO{Az=%35j`(oz?R6(Jt;S>Cr z32Ass13O25V26ZI$z3m(+&)%8>neK6;}=i@2pkkz{@QNK*e)lGe#A98FJi{Rohy{0ioqhk-&%(gC2ti=1W1<%b&OZe2*vr zr3Cq2%(8j|gVJfGH1ionJgN6XkBCi(pJp!(5PuX={Bb=N|52}DVDGYh zIa<(=dS^SbTOO%W^XCSAu-`9lH{|qY%{T9VjUO>@A{c9X9Dn7x%0MRc&ajLi>enN~ z?xr(8VxB})1v}t}ZUAjZd@!~%lL~LIU${JhdlZ012nojGu1#m142}hD)Am-@+wr1@Hy4g5^3aZLhiS77VOlYd z10v&5`!A{&J^%Xa_3h_5A<1w-z+;_rOa9ifwPZWFov=@*T{_CEMH%)kDsHHBBx6kx zX7ZE@?%Y_bj(#!caa=*BxChaoK&`HSQ@U=jnV#4RDBx)`-&}Cs6{BS#<~&e;!uVCn z+|bcI`8ih2-H@sI(hB2Ue+R)*%hPnz7)0vbqElBWpLRgHq+J{b9tMOOf{VcTwzqaX z+F42=Z~ncP7A0G9F=}^XvDX@cYcf_Aepry5r-~P-6@^@_G`#rnGL4R_h2T1WI?MEz zf|XaDP3lRHmf&FbuF0OOX*U)NLFF&YfPuY&wvo*SMTU_pl(suvK9@c3{t_tWb<60A z(K%(4pBO>>s6TTiufyu#UKd#Z#=;D#aavsyhAiXf)2sT_{cg-V*5-AooO}QI^6fR` zp2Dp*XKUU;F(p7^ad%^y8wsF)Umlsg|Bf0gOB1BQ3mBHWBJ8XiIeMC5J02MqLH*{n zSHDxp!+z6IYHic+3HOj(5-7w}5?QjJ$F0BK{_lT6D#%A61kl=ePFy;OKv|Z7XrKin&B@iIQ)1(j}+f|93-{VdE_&n{+5-1cZ^CZlqNfC_em@}uw!tAZ&EEzX-%f2O z;2hO12ejyO>hm>jMfj=|A2NPY)8i!~y$U`tq$6Q0=`B_NSKXrG-oWtq;m4kA($_frt5fWVb_SJGZFV`dQ!89V2wr#2VB-P2; zmAj3GEKW%~4uV|0^=pv3Dgb>&ra54Vg)h04e`GQ`O7sdI%Po^1+eLa zZ0$X(LVlYwFVz@d@%(Qgc)k`%?B$xEV#iKC9WbXSK}ZvSqFd+!p8pbooL$f#2eBmG zNQ6Ec7r*D%E4BI{kOzQ1#x9@sK{W$GOiA4f4@eCLskLr)jb6W=pCWE{$2kmU5BRs0 zD4ptaaK@UtxX(+a@;h0Kz*|QF7zpgJP%afA3)~vSV;^@{x->9&?233NQ=kPn42y?= zWv%9sM@M3R>`L9}PBZ)@MmWp9mTw|wy9j}LNyheJghjVw`YTyKS(ZbR&@jL1 z>fJT`hVI2acoVx#c5S!$AOEu~!e{VSrquXVmXvk5tl4rc95|4Rex4rvDeoT<7@7yX zbTX3S9nQ+HTk@T)NaSofkec%qT2g8-K(}vMm98{)NBa;-co)MWPFD=5fK7b zR2xOMGGZw{NBZ_^v+U~cm&@JrAA1V|&)C9=BgMhpJ$-2J3oSM zK2N<)q|Zo+*!sNq0Hd}-TV2?TeKLxI&6*(KUR1=t zS{5M%-`6S25GXiP-mP!(!6en-1)!YzIgoa<_Ah1;kg$lYg_9@jPqU3(S|N=Fe36Cr z=ht5E?g}zZvrBW-IjXc(j#s$YY+!7E$mg9dH*()x7PFcl{&}=HUDj)^)rH5#FE|f5 zI0E-DhP@vW$KaZ!Tyo7W2SaI}wPn`g5>1-#2?@tC#x8QvfL?)jHm#Az@-l^WXk=NJ z>zuy=S%hgor(@t;jyjhISiqcmR`=^dEw@*pzam-4vo07A5U{c-`H?WKuOKEPrCug0qPSO&WyUKVB*tRNT>*0dP+=ELH?DvTGk z^T=Png+z;1^r)PECV||t8Pj=9Jp24r`$Qo`mSk*Ft8g1CiGZqk941+bZlzu)j7JVc_~vu4Tt?Z-0c@<-MNFyY#YBnLAf3ToE190AKq>9|`Vyi!rMc ztL)Lct&+`eGNqUckqkmilZ%?oA7OT7n^|0!rMpm}ivUepyaDq&CFIAeyM7NbizsC& zlR2|4UFrBh>Q3E-m%d(AH`rN!Htc+ko8hh%WLMjL z0A2Zvo8leeCTx{*CO9phi>Q?QE6lJWt@>mJFDf}(yMfn&FxHX#xheg_VLQk!KtNbi z6zCmHv23q?Srfk{%?KX%4HjkCfzJldeayv=_vy$<#p~|VSm3$W1NpD0l~i+q)3RK! zOdA#Kt(Rz-EJ?$EE;r@wu`tV)4=b|eQg2*q$*%32X5C1mXZ*LJT z6C^I|>l$G`cf<3MCa*ZLGe+H)@$mmMEu@>ngFSc$*{W&#Jvn~U77$PK+KS7|=wDv5 zh{6-|2`Y*GDmwRF&2@bNgM3bDcV+pfwnZER^{H#ZOB&UGCFBDnv7|cu?nEzAdGDtE zG~fOeVOx?-xxx@SUKd7&go)&CeP!hNixS+sZGT1?*Uv6lDec^K@~N|I*Z9+#PS0YG z*7Rjt#D?2oAYRv$i}!ESg4d2iHn;igi-O5_o(r*Vf$D;e45Fd0<5_fc@q+V|PI+YA zPj5lX+FU<>E6*c>oX*Ym;F@b9=HmkX&pa1ooXa>@pX5DO^>HGdr}ib=bJiODk#R5E zB34xfQ*qsSplwqmEqqW~rfONWUy6*r^IS;nAK;J}@KC`H(}5ofC;~R!DWsL3hTvc3 z{BH@l`7}1r%r&Mz$9V-TPK1xQqQkj93d5dQgUoY(%~|Tm2(^H)_uUqvNXvD#Rfb%8 zgFhzMDEnr@$(0TWkjf#KZcEFC%xRPC*}-u8g3R;L1IKDHzgH_|sE?L1UEOkS{aHAE zMPnqr2*9~imK91;Q&n#o-poiFh%cqj%eam2vPF!26O531g4TSk3P;N6`LrY0uer#>t?@-uPUK7veDf ztY2RjKcw9l`wCB>mF0usUi!9R84JmH>}Gj?%x6&a&qxEeifIAS?)7Z%UOJ2wR}y?) zdwHIGLn`L14S&?0pt7K49ZXGS9;%0UTsjp#X5NUrAOQqxDj{Mr69-pt(aE0(5r1}^#gMOoZF=j^80ifqSfKAku+CMIHxwao$Sco9|NUd z=2U;5Y(wP8*d=_B|5-=%Nvr7`bw@fn9gi~EpK<1$O=sCzWXB8F0Ow`Hl?kzBFS?fQ zd`Pq*jfk$T&&AV!8CeExn?4nm%FOzI6sCk(2OK<@shdxS9!EOtb5%n`;#KrfIC;-u zA_hj7J3Ho!v$( ztw>2}q+wN*Q)yt_qvq|(BW24YeD_XnL-LqnlN|-Cg@O1t_nb$mlG;i1ka~ZA<+dT< z4uo4OY)mIL*=eR-bPQ3yr_#q5AjUeHGCIJgiTBUv!blj3uTE7y_~8ebZAdt-TD&0^ z$ySEcxli&Q`q#6*)>}>Zcf>Y=SD3%3?BWfU#plylGitf|fC})(=P2d(5c39b+-~6i z00NaN_|H0{@SaJ_4D6G7*#t4)L3uO9~ zk)}?5jvhf|9x0Cw==^AL|BN$_CXRxOIC!skBR)&YY{(fON@-C(1BK^|aX`BH4s;wvY z$M2CZ$iN29Xq(A4X>J=Q*p4K?_>L$ok3#c%^b0a@^obupY}=N88qo6T>MgQ~2cOIA z*Y6`>kcGu)?Yh%{whW9X*7n3%cB%TE2@d{&C>Ug+f&(S5%TpbSo!5=!5IfEn8IMW` zzD2^2L)@C=l=yWsx)=c30sh|ehz~3IfiM_Rp9(-7z07F2jCPe7ja2}L@O(qO00Q1sGne;JYj(MZf z)(K>nmmX^}`^pDMVb77uD3YFBpM48`L2oU{A8j?-6OkEoNL)Ik^^>MtbeR7Z_d>wc z^jUE@wUXdM(*@}4Rmhnt_~j2|-VpO}7V=mNapkyHAv=zqeMq6^uV_!+g8ssO5iu`& zJKD%A>B-xFY6F8jyVtUT5YBjhZiDPg)kw&{RM(cA_XM%zqJ(gB^w!?@H{=&_%aUd4 z9A4MZC*Y|!$-t$A9r@}{{vqHO(x&WVzp{%*AHS6nE{78V-2)fUMQZf#xG&<_h4Wm( zU?0QA+%=h+im*!oalN#u{2lg%)ctg^oU>-zMM2ts5L;3sW2BEd>Jw7_0rf=~sIF4k z4OpNpDFW`1aGLw%mjw2c@caSvMc`)gLe^vAk^-}4OIT}o(w`FirsIhR=a-O+v{GvW z-z~avh-*2ird;+C18c+Hdy+eTo-ucPdDXo)c&>t9@J`F8+*e?iM#ymW5!#z?F>X`9 z_E)2Sl(#a2O>!$ZB->w0K|1=Qm@;E7_$o=$l3ZG8d33R5KD2cg(Z%!8bJfppQEeh3 zJtMKE*|LusoOM}gK+JVwA3j^rFCmwEEBmD6y1}95HvHSsPlBl1q#M>UPF0~>Wm3$Dn8 zfI?PIE_8oVqJ6OKs<)RvJhO4DiyX0wKYDA{UKfm8PA{52^^N@a+(w-ZA#X|A=G7JB zC1aRuwgvaK)*f!YFJafmI0im^42!yd&q%`ut^%S@pyKWleUFIjjJw@t@M`3GL#oAD zP2GAO!-riV(KdaW%i`Quy+G4Ft5^p&Rpz>$(TTS}_u(5mi=?E-C9gDp*FMVt zX-tK3Uk|}?%*A`s$v%18XCL&D5lR*fAeG#JLvwn%^+If0Wc3UqFKgJtMoX47)zfMD z#(PGt-+~!!*?Go z>RXU)?1~WoPusQa*mdK|U($ttlBmxSMJjEaIgT-oVPn32io4sM|ggZU%KX5K!AI``W*lNjR=3%DVAbwsa(!zZ&A2c+itfj+N)9uikrBhuNb zxfRF7wKs%|({Mkww33>&s}uJ%Xjj)(_8y-q@M^SMUK{_MtV-3Bv-hDZA~twn1^pr) z4+1l}AA~Vh@JN;ZFiPd0d@-V?B8`Et<-+2;hjMGDuk6&ZfNSWTBMD3GczXq#Wh`MX zeK~klM-d8n$+IuUUI=grGKZksBQFzH}j3yXy4twAMgoXHN6DII4Ji zzWPJdopC{#6od+%txhwS{q2iPCeGY$rxnwOk=%bbE@I_>fHk!Vb4goj?mGAC4Wz8~ z#sDifk%HcSgk6aYTAjfu3f0uOXLAAgUFSZPr+Fe;NnT1F}CJacKgng{PB+1L*D+Wc}t}MlMEockvrkY4H!45 zj;q|nN9>QW4-Vt3qn6SxyjP}q#@^eP z!}fsyg4CgEuatq_yXopZm9bLIOSBj4wcaGhK0rW_`WJ#%<|Z;zTMdC9fZ&WlvlaH) z+V?mh#=g=E@JMIwrLX1qbEmR>j5Kz*T?v!?gaSbZ;xhDg7Qs@^ z0e_-_AQyvxe|EGC&kW$moid9tc>#V+KnT}>AS%7seXfbmm$&RQ1A*u*DTuf3g3x=j zeiE46KAbCgv6ho;)wRoOIFjz_O-EO1xe}S&9?j#J=$TauZu0R_Hm%IsHVdV@`}-r% z!R*qxu93~hEdUpsmM5=rHvZ~;%D;gRVhlV!dDlAVe`8s$agdU0A&sMLnx@CusDFnD z5zCiqs)h2Pl==om+f@#!n%3Pt|bIQiqP=LoVNMY|FK`2`Om zE=QNK)2YQX@!KafQUxYxjgo@!-Y;H^*4vm`n8Y7IwGRfm!mperu7#M(Z@dqLWVw}e z@NTuWf4QV4W}owPQp&O{Uscck1O_3!M+wGd^CB4^pXyKW6(@1`v1nah+8<%}0v~}v zW&toYAAaVVzCI5c3~rpg?oeNx%3$+>Mzp4ptEuhdZClJ>Alq9%t}1*b%HdVeiiNAN zmlcMu)A3%Y3Qw3oF>fBGB&#4f;-WCOv!tWL5OEW>Lqe&?MaB3QJFGbag{*jOg; ze`q&RlQ zN|`etUL)%ORO>PW^fhXCQ#g@u$moYcWIuTFWCa*0+Y&$(Q5H)<2YAHT4 z;dh<~B3}3QIq-D3NgtI#a1T5R0U^uib)H)s8s=HVHC&G83A$QIDyi2s)|7#pf6_0X zmjiVgTgLjeQG3odI+LTn16Tlf-+VyUg?-p_C1mdup^ly+-AZP2_Rbm`Hgf3yJhu4+KO zf0X!!EZ%e#ic+N{K;X5d)K1_Os`vXmGHTtW|#YRKeTL126KK_*srx8xN*E#1xY2~2n= zF?f&JnFZmVVG{H4S>Uzfe-K_Jl)ndNdn$Y#(8#gGK9m+gHE9A;nx~mOO}+n{$BO`S zaK25N%$i*vXtjc66Kh_cpX#}cuQ9eAFlucDq``nsxL_k!N4%(+fQIvx+Iv_to^CD% zBs_84HVIVjzdMkzr@Vsz!@Nz|y zi!FGipuXg`+g0A~12=_;QYD{cntbk2;e0>^n>P)vrL~N!+|CDV3VDw>@VLhgo$8H? zFi{mjVms*{^gF02f8xyT;rG%v*1Ic#N?IiaTczVO2CgQ8e2rSVGM%TEUXL`-H{raw z;s;yX9i;khU!xwd_2qqiE=lqiM8qqAOolVzL|pDBGK4*F;t~+x5umV(XRgK*CZ-C; zPj#nuHNz+F?cax#>1lvXi450aC2s)*z&jbhN@~T^iuk&Z13RHb78@7to~z0)KJb-$KknEL`xK9k&nue$z{;mQJs5UzMLwkDsgvvranM zN>#9Qt0g5NZ$98t#SDP;oFhJ@@DRRI?ePKJtqNHzk}QA8wKlp73p8w}t23NZH%)+wXR{()X_W^2 zFpHP?cqgl=AUtwgTxiRqpubxcu~<6u_7PksgNKaFygLBR0COt{)A{Kh!mJ1nkBvK` z;28NVu|DQj!|xa~{;xm2{J^RR=P(ado)v=2*S*gspqz_)7-3e@Tp3(qG#yIV&jD;hP{ z?`fWg-FfWZ6`SIfbA6sr~rtKM^r;bbK(EyhCn4fA>%S!^PDz`525IZMk%MIZl^Rm`LW~v-=Fm@Vi!4+r9Bf# zonnbg8gzgL@h2aBOvb@14N+s^2|g&mS2$0eL#nwNO)M26Qh6N92eZDveT%q^WBZU` zPjKzyGPY9y=|@^#wq!z2r~YMF2q^=4e>dsH3~a*_m6lvoM-Elcpi!TyZeHgrWX0Od zt{n=OL4R>Ox7ORg^L@&caRt(@qKs62w$){{8EUVWvPs+Jjdx}JU_&-OufBei~ z(x73xdvE_-jkGNIRF~#X^Dz|p5&InS04G=>2BA%*8?NSH01LSPF_$zNPtUu)k)I>H zt7|qa=AK>M$~r*d94=^{=Y-FH6m59l$B?6++V%-oKwyczi(oEpiInZ=@>vO2mW7;s zayfyXvr@|3+i2$Fu8O@z50uC9f4uiI7P4j)Fn_M?T1{Zrb7rbI^%>m5C%)*NWg%;( zhk(Q2CI*$0{Kt!M;_F;a=cI+G7sp!?cjP2=S4p=ESU<>X%_nAsYm$*jhT5fK4G4e?R}?+#fR_N1s>H z%VXc2oA$3iW6s*_y)LO6+vwAd%dUg->?Gu%~5@#@nP%f|(cu&f^M7&m{kE`mie$wge= zurQX+?zZ#$A0b2U>?Bo?w?1T7O5L@WGhzXl!LIA^J>z}Vf^6GBiRF0zW}>oBKaCBP zrM6QCF7K0VU)Nt>^;<|kVy|GD4ZCR$K$4g2*4z%Dhti=Zf7kIcEadgGd*gx0mSo;S zoD!C=HqcF?vk?m}414<)fzozYht|8yv8|b`PE(rF{T;ePCJ%kA?DZF>@ zMF?1kCeGWIeoWW{X4fpKpj<%_(lgq;kxB-5HVU0-Zv%;7)oEfAgd znUg2wMgZPetx=`a`Y2KChQ;`?>U3_{93{CDFueasVl7h{w&!CN$m{UOWO2ZDPv4fO zcmb}EjK*zKahZLD(rEsAQkkL$OC&8UOe=qHZDo>BuuQL{MD_yp}3getl zWfF1EFM>$9M@`@Iz`d%~k?lXav3(b&R|$Vddr= z;O0XImD<^V< zf2eMosU*LbQde<1*VZ=}7IZ4NsA9LT$ttH9WneUHu-#~ZIMFqZxnUuvvNRmXRH(5Q z9Lr1@89YtD#6vi{qJ9__bShmT1AMnrqkURI)c2m$QZ3b)Ux;IFSjed)@+o-Lj1`f? zp;#V0dCRuc#@Ck|go~f+KVLDgzg)KKe`c^x{_@TvO$KMJx^V=qYPTPch^TMrB$*22 z4_Mupv8NI;w-+{RnYXC_@d#1>VT5RGEQcpBUvg!$hvm5JuM5tJCk>+)t?Ks4>_!L81rmcOP*J0`)|V{T$XgV zG5{q8mX(iBd}^RffUd*3T#FX}SQZgl#fM}xU_yUS!t$k=bQY0aC$e{X&1E57>q5$1 z04sLt-g_-;XgMjRB`&`5TEGZte_21^;C=ciFQoC(aYm0%^3L15)a*5vNr?9P5P!9t zfYK!c#wxeMaN`CH0x^HhXA))9OXxPObcd!9BCO<1q!;!o5Fe^Cn2#6H2c zxx%WpLR2L!e@QBeAAIQyoF5TQQwxFKCvnt7eT($DaQ*$FHu+4Y)Vj2kgBIj*aznEELoEb(oiY&6Q_a7nd^!Q^?uH0_omKZYc7!BQxC>P2Ia$>Z zY^&e4FPTW~;s9B;W##HR05x@QL7qi#rs>ar{`0wiN5G*ruxwsc zGsUm46BW|E{d%b3f9&2cyc5*!3%(v7pQ+x2n-hCPBjRtj+J z@;9a7BFAUA)STD$f`L-Gy%_#6EW%@JlB^9xmi9=1XxLbQkst<$Bcoka@L-tzZ%F3! zhw(M>|K@!i?CU5CN#IoMIl0o5ul0|-{dh#cjg#B63^mzoe?D~Kz>9toGT_=6R~^l# zX^&rTA@!fav=R`SHheuf#;86s0I;%Gwkzg_X>UPZOWx(X2bg9`E?&h)@iCQ!bTE+S zUokDnYvSXqz5df1r5ou}zv>)8es@v4YgTvDBJQfN>ksXos|%qbb!On73OFe)+Dg|~ z!|&CMSW7<5e*k0qSs=z~)K-B$z==DvkC=IFEh7xuNJnLCq;dF7(^zc`?bD~v(xO+6 zW{iM{fnN?+;hTr^t_K<7;)Fy~oyRB@)-+gQHM{`7uYxe=16|%Fybh&l#jbum67qCq8R{&2x{Yob7 zAwNEUQUov**afqM_G-X|+Pyy9g-p$-u3gdBAInn6jb~d;cdCxL#z-cd=FBqKdF~bE z|FJB>V?M4Ki1jI0Fui{-A((oruYs4h+oj?^fA;<}r07~H8Nvh5jp_k?v{ZO5JC1nH ztu4;2$}yBk*tOoZRM(EL8n6}8b87Wi&U3C-r-?(GYlL_Y zf6*YD(pKt&JN47s;p64Zy&-5MZ-2WYn|JvUb7z7bKAB3*t4&}AW%d~nQ&%IowzIog zA)=g(kqVVqO>iE8{g4!Aooj=p>9uS8;}N2ayJ3r*l}^Kk@-d|O_z)p~gkI?i0^dW7 z>I*@=Sa-n^ACqenKn3e^-w99%EH= zQK2&0nN@lMWX?X8N)a)h645uj{PF%4aRiefD+4%8Y69?(U3hGh%SxQB?W$Y?t7243 zN?n_Qt-uJ^G#?*p9l!Rh0AAO(tM|8%cqL_tw}VgvRPf^cEtY)td9Ddb`uai&f3rd~ z0Ml7@7qBjPN{0f=3~AV62Z?Z;YbJa|fcTbNf)n(4>)aiY(@T^A1?Q+h%i}5|6k?Rs z%F&_ahD*)-}H~{{Z(E9Zr@DXy^rv6ff3@tj>z-})&)v*8sHz8Ws4ZFX`ShdUt zTap(_@5wf{j|&6eL83k`Lv!8ie-S5;>u@!;$)#&f;*@%GQrg}%wy#4$Ki)(1f?6%L z10+`(ISo0(Tus<^(^l(MY5C(lCRio%2iQ_bv0xjVo{H(L)CHg8>vjBlNUTEOTxr#! zd!;(P?3UH*V3>|y(%g2{Bc_gfvo5hwu-SbY^PWDdEcMwz4{gg0F~F+#e~_LcpIDit z0DY2323Pnk5flTFK2JH_W9yQMV=xD0{|FNLfAt~#@%0wxHWdXz zJ_(+NaI!(v3kaJXf7O}xeOQm16@hz7rBiYrLtKHgSr*D2pELp^S~sf@H7vqeShc!p z%>|B`%RCW95ifMoa~!1q~6BD~bFJI*ZTteDl`s zjn#x{+28OSry*Galf7bBNIe%!LU1stR{c$Qf>~z4-wX$UuZ#_5{fclGxqk7srYw`l zg=38Ks5vtNe}1~+{ij_a4Z%L+-F#@H_cApYV_HOeIv_`Sos9^yLN?cPs$bRFn{RtU z+#1zKV022}sP=+c5flVTdXB>b-`l-0G7h_BMjef9UPTr@KHox|)fS-XoW~HmtO>G? z>R>5k;7Rp57st(t*jZ&uBOiP=c+IwLc0{q}v#d|&f2+R2WAC34&SLiAM&2ou$IR5R z`@!CJv(sHU>3$m!Qo61NRF9L`cmQmzwHLDXNT83%mi>DF{McVH&H|)KiXf4Jlo_mS zagq*a>E2k-`x<_Q00^Fd3Pn}|bKGb2X2A9ROi&>p`CCSO?6(kS?VPQS>H4h2x%NSf zIG{trf7>PYwWSJXMK}worUA|a@n!Q_u0HhEDo~BrGu}tCJ+_26i#lL)-7XBqiK}d5 z7cFj-=bZbhhX=Dlj-m3|RHgw%a7)dSXvw-5VRUu7UY5MQ*^|GizvT^r6R z_@w58)P$c|TJu#;@c*rgaNYERPj8XVyYQi*yNz8tGE{nsbiH8QN1W@%Do(bC&(j*5 ze`YT11<>u;&Zp^xP4{hGgzJo4)x$+KC*|}kIWa;Ub~3QewT18T^=2VXD@anyQT{1u zHbX=?XAJdMU1Gitws*TC+|`aK0$ZP8MR{}@c?jT8IocQ`>4j^jKbOHFJ~IF^oPmBs z7J}~v7e_Lv;JRI~#xFlUghaOvG+Rj!e?dTXT}oyTAAjdvhk0FF^Rb@4e#ZdYl6G<_ zvjT)YK;O=ymHe@bGeFWc?7Cqg6$838Ki`ma$!H)0=d|P%$=X1k?srg#8X*p=+Od!d zpuNQM$+>uGjPfR4Y_Gi4{Q3xS*ls|Pmi%rE`EupzL!`5e*`(B~6z}8fD=q~9e>);8 z^#U#j`+Q`y3rL>Ts<%-0YYOX+PwULH zfg(kau@PF}G>rqb`_te@eZKGuvoBj};^;xn%FU=Wz*QnagZUK`H`2^3n@IU`>9F zjGx_f&*2inGAA84Y3F@_&ox%e+KqfQ_zonZ}4`*Lb7C) z=AF2yje(HS4IXQi8x@5s9<9E99=<)$5U@ zE5T1-Abh;W6lZ}_-}g&9U&fdNX}m@@5XXKh%xXG4Rc6!4by*Zcl@i`idIy{CHv49ZkB#En+U%5CmC)4rB-x?Ld{Z053hsk3Hq zTWcc^Z=!T7YcJQ)i9g?d$BY8UA2-q?@Sy52&N~VAmm1gOmAO~5K0?gOSzI}D_1ys~ z&K!Ns;tJ0|jPu@w4zpt1C7iLlT(QXt;{7g}W<_p7f2bdsu5IYjNQ=Wp?JcYo$l=Y$^QAIQ*{np@`Dgyv7Gjw9^CU#> zBDRcbkuG~7SQ6tpwELJbu#OPB{B>x%>S>Ww{cV23$?`OHl{dQ<$>ab08Ddv!od}H4 zN`o&mIs~_h@K}806T& z++Ow3IC-1wN}it<8Q12v4^QcY9DFGNs$h-0g!cmPsHNlu$_6vXbqtQ%6?F1FV^VaU ztifW{`-j2?s z$z^TJkU50K=F#gj>BpZaU_Dmu2tP+w(zH}^!(TWBdw5dI_rbz{_Fw<{{0K3vg67uR zSbtP;v}|MrtZt<`qdUB=QR&;XhZ69=}*PD+N?^D`lAy|gXDw2cs1UHBc> zQWd_eayo~0-GjSarv>%35IcK>We2A{O&mD`6f(d@W}jOqj?%o1@NU^>lx1`Hi+>iv zQfh0!jp^xS)+9zr*0p}%^Y3w@7A>o{^0qc|lCDHGZMB|G9;4KBpR^6rqE<~#>&@${ zWoyN<^>Z?;^vu~T$8Jp6_wyshva|ry#!>PSMtPbK`4uow#QbC9K1A0SEyy(Pc7{z{ z(gc^$i@6p7F2fD=9uf* z#_BI!+5N3Q^LFA@_F7u6YL3{*kWmc)8sKv>CvC4<-UoM}jdO6enw9I5xSJKSUd`G} z2b6s3YTG5)t7C7Oj=%f0n&0;^q|R=$ZeUp5W%6Fde9C*GnonDMUK#LXR)5HPm5#lG z>k?gaHt-Sxj!j34wbAl@KDlpXNRi4IaPFs1*OQolugToDlj(q}+@CBTyFykB5wY%^ zNqusIn}9pJ5AU%%7LMzxbAnb*n;Fi`%Jdjv*OW zuXvSdmRbD}( z?c=cG#4nqzlI!`t0IWfP0-kgD>{%Rm{E;**c@43YC$@L-3;Y#_DOT^a7UB;aEai68 zUsPwB1rEQh{AN3YP-~iiJA=>G!veROiq^qi*6F>ASE~DCS;(rnlu2rd4+AW2u*(KS zT@jyh?x$YsLVk8MM1OH*Em@1W!hOK3L}oSF!j76xD8B`ze@qKmH>nBkV{J*Rd7kHR z*)2O**r+Z2Bk7*(6mb?t=)Y=!ebda}= z@StL&c}dH8v8n6t5bxnBvC7(y=NfGij7TJeEx z>0!M98=#%nVnv5QF@`CQJ)Q0n{Ot??|56)uxD0=muxsO@N6!$$3gH8)KJ~AAK@ClF z;m0<0`%LW{+Q3f!39(Bv{-oEUY0k0>dmm6Ac8)&Ml(+cgcKu(7VXY03BV_}3G_a9f z!RU$t1?4oyy?@CDI~lWLtBXGn`Us?HQ%}}}pp<7;9-^<}X3&!L^o&4TgjA*fA>DT8%>}7H5O3Vch36(Gh1L|cyK zBy+R>e!O{-h*>e31nASNkEvjv){@zWu_{m8iQZlr7PDk&fZv^D-fV-fRdZe5(T=OZ zTCWp_J%2{UWDu6^+tg-Jh_#n4Pn^#GND!_D2qh5*ivv`1?o z1N_Ee_$7z{Kvp(oY-^DMys&}3$ve`TXB|s=12V$gYzBoh1DSKVtvLWOXg$h8U$0L8qdcjmo4BLsB8yri_Dd-wf<)dk*Bf)g7$tsX$Z8;4*Q zy~wwG{0YgnRG)b*w0xd=NogAR$v(3DjP)1EgAb08Ap^7k3~SzOtk#ki0Srp#9015+ zcZ?0YLR{>yX{((LB($@(j-yu2kW6-6?4o_*GcaTqSmZlB9-fDxJ>l#cBQfoDwrZ8E&2duxp*xEbok)Nw$^;gO!D@ z@(I3TG2>F%o+)sy-8KNMeV*i4gSU%N6uL(vIIxhCvg9>w84hE$-14H+YAQaSTbgGd z-*~W)(nTEcW)1LSKlRzbv8nmgXMe+oi|#2YcVQvjB|Zyy){H&NGiBkr+S;u*P?gO4 z4i(*ph18)|F|&N&;48H$X(2}9uQ+8gaH&^LETmHiNYG>SB4IX7skhUMw*r6=>wW(8 zZII#hA-<4MZ%}jNAD}U1-1@O$S z1oPXEg&ebFr{ZudAeTT++kKnzdS6so4MRFk@xcq*mzvt*KqvNu^ zb7mo?DFE!MtxN@P+iwf}0XYNiJdCv_(ewLS>y@J_M zw&919YafURg7s>J>go$ePDbv06)Ic*{@*_#S}diB>RL4S^nuHjjDIs7cw9sT$@A8n z>301cVOPS>n(`UyRSySv@ytYkW-hrv zt0HI|$Wj8H(D9Ug;;bV?;oH*=Ju{(SB>wlmLIj9R5Hu^SNCc*o#xceY!nKj^md~4) z5?B_}kqK1Bpq7(6?tefzK(St(niGho-IX$)ykgLz9aVr=7shwl$C|ZvTgOG5=O%iU zy^C5kI=aMY`xml(AocKkUS4dnY`@vh-!Y3O8Q@}YZ@SfM-mp&7T$f_>wC)2Fzby;# zWQln+Cj91buAQpRQOPAe@XuW}*0(cg(aPa;N*!DcRJEwBMq@K=h%5%A<&m) zpAnWNfSp0oQ%BTHJJlng#NKq}Gv%%YN>7PF(4yrO0iyCm*H0#wC1312THvj9_?~p|!g{xrCt&6f1#7|ITueTXCsa#d2 zzAOt_v)b~Wt#`8tG@HN#HZH?l-q)JbRfqA}&Y(qOVC^yp@NBd^($12mpZ=!J`-fiD z*#xZ`)zN5La{+_X%W_dJd@x25wsU=-enhamT{^%qH*9)3CWsB3n4^9Sg%&~*T} z%ZNpphU;0`ba(F$+x`xmh8#@un_QNw}r@qjO-N@GkjSAXSgO1Um?I+;GG$KRs7Ta4wJg8BH8 z`3o_vyX3QUz_Wxqkj|Rfbr^bf!z{fqEo|Aq2Eaj;U3e|`WDODYnVWpDZ0p**^DXrk za}ibpPOGU@VBM9*Vk+}cc5Q*&`z=BGE%p~;8deIdGbe8@eag1I54`3HAJ@K+C}6oe#dO6}as##`fzA8c{?ixX^`hwyy_jDdBu1GR_ty~nJ*Dc*! zp{UYbH1yYJm~AUf2C3>eW3$7p;ii_1FIS%oS9jL{jM5id$wlG@=sTs2;Ds39w|`LW z9cG^UpnyMNnrzi8PD<_6L6y(8saY4d)_gvgyj3RrpO{tK&GmeXQS0D;69h0VZ|+H~ zs*{uz4iZP?&v=u*}$ci380Pg9NxJ;R8j_x zD@uB-akb%{G+BEW z!kw_=l4LJ)M=|S`dpl-WD61*2le``t6u2!Bm^K9bvW z;8M_#1aPS@DD!8OX_TBN3=x;QR)2jg+B&zgC^r!Lm${=5+vJg;DJ3g7)=93V$l%Q+ z@FOF=$Ta*8GmYe^bzEDtQ`~tAFF5%`@9>Hkb%Z`o%bz$9)7HHrfnaIn}oE_L`J=D&SHp zJLhXi_{tr{95!`iWTOod_HQ%(OH&^y?0J<{{K*}~ESvQHsP~*TSZEj`sZ5s-Y`X3v zdB1Z#(Kl@3$3k6`>RmiM$5t5vaB@NQ$LTkuXKJb56ATi)vH`9PdZA(8YvZ{>U@+A1Ya@86A za|aTG?Ol%vr_+j!lhe-q2r||&T;bJ`5duxAD;Do zcNBxo4%~ldn7z8JPfvMO^{LFOH|y6{z4yDLzauu3%;z4AT|m4M2(Ym}r7iWwC70)> z;e-HN2P~J=HABXlu2gL4BsdXprCjdMYX99Gg@E&Gt!=F_A)_ZdHPtFh%OD>E`}D|- z2yEI-%1E=VGJnN*r%?%6@|+}y{ZE91Z-EQv6=YqjW%Wi?_TGr>0&f!^?SAdQ{O|54 z0$cAYxsnan_5r3esT%V<)>aq0c9HL&`=1CcUSpT$_M#6k-#msYTUoHQ(Y!C>ste<| zLO9#9B}tAKRI)Yr+UAlXWp}R?yo&)iu8@1S;WNj4%6|s3cVx-EPS3P*_t6{e-b=fG ze)<{GN4^(<(r&LDb7@bcRIQD(5mVQg?K-LO9au!a#({ZbFCRtN%Z1LdYI=G}h)?+Q zwf5S9g$O$gczf3D7cs3UsXb;CF8JSykbZrMe+L%QN8XoAYd+%cEM2OzAsIlTOfo@( zuJhX+SXqd+gA1Ei*wgOCz%___D!qz$Ew=YcKLspAb%-~?m(qkIORX(`Nj}^cvUh59 zo&fd|vtpVuIJVPQpY~l_OXAY-T;cXdX-~M_K5&Ws3PwBRJ`=%#h4`_Aw48duhrLN{dCPHa_>(;f zjQW)Ehxjpp;ireHtxGyQ?yl%@HR`G-`F<*gg;b}nG$#CeK@xD_O$SopIn_8HIJ2SG z7L8#sog)PPmF$$#M^QP=r_R8Ee|5hiO?1oR088E?7-DIvdD`N`Ngw)E2MHWlSbYc; zT*D-Ay++__lt5Ek*)y{%bIjB`D-q(7+PDkB4@++$qq6#}1-qCRA(5MhRm*n0IYe;* z4|)REYe)rM&fxVm`@GOBV{KaRs!ZDEOwXA8+rJ?S9j=~$c%8BpYitv{f9X9o8H;Fg z6{de2#}IjrvsHF3bv9kIwNqsxOd9nCzkhw%c|VUKS`(b>D)oUWvNn3+RZgRI zeX@Q(kRdul_n2fVA2=X|v8gbD=8F8~XS45s>+TzLwq=HOS zIz9MubIv@;YZu>g^?PP@@)uSH;?xHuh-9SAr~tdv}{a-OOsg; zDr?TLGfTjVuU@+<9oTCKuyJ-xth<7{j@|{V$Ph=7aW-#?f4V&@0ocE9Ar~w3elbQM z{Dja%4YW+k?!0R6d*3S09N25jjgLzaYpq-B*sW@+T#Xx?$#7?TqmAGHdJD2KU7%<9 zjTn!@u1}w+ZDdOu@N&DAPXSoaRvPa^V2IvZBrPZ8m{LnyJ!i{l-g4jft^D#5q8nAJ zWzwTlq)(*ee^v&A&`vm9{8hR=kT|waub=n%5wfF5dI#<9vKL6lM=o6v=9fP>3C$aI zd|$X2XvtZu*D1mL$$N{fth^^D?mkfWehU8VY0$#0M4Vu0et&kRN%i?-NYrHe*lAAb#d=BlOhaoVOmEdA<*Bk zy@B1v3`EXI&)Yb%xmlx>45xw2OS^bppE2L}GvpY^8dxOtncMyt;7>VIxY(8ftWWGF z+((e5;e;+m9xU26SZWe5$B6_%K*Dpqrgu1;J47kr`1_^Q&gPTbDo7j8m8H-D7r)-1 zIjnCnf3>QM{4P)0sb>^;37ekbP0-0H*9$b@`urtCkV6}d-4#e^^iAHpFuc*ir`_di z58wmWOUQ~11a){ZkXcR}UhHgFL|r=9A+PefBa6Y+U}7cpc9yH=_>euF4I~%7mwM_? z7(Q@??BzbGOoml?KHySOa1=Z5)z~W=uPT*5fA%fpOoC+WY!zO=5H;C4b$CZ27)Wl* zo;Z^s8;N`zXVT{j=TU5eS8N>8MYa|TUHc^st|H>zthzvbg+pz_usS_eB$q&xthG9? zRa+M1Scl&ei1tFt%d(BS@DbxI;+wf%g<0LPMl6@B#da8dGD)rCgO!GLY^pLstLYsc13y0=9DR>;^! zssIqsPGNs2ypAh%e^?;} zN8*pq>l8~3sn4>J56J#>S*py}r$NB7kP%M@pD7rGWTRXV2zyTm)>P+%fjt2$rf9P3 zIc39t@#xex@<*=^;SQP)+rPp3@^^^e${9c=GHL|E-RxLet;=B3BbDd1iXX6IW}*uM zj~RSb_2bvY=dB?)&cxsmPr!;PfBW_}5l=QY&f-eot7#&Fr$NZh(zRCDVTE{k#6d8c z>}?@)Da|3HAcDii+QKh)STQBva0883pRPc-yR>eug^w>1Ebgug2UsC~3mgXQZ%w$X zJy{vV2Imtl)tlVMwU-eeh7>O&pJ*GLW^UK$uPOOx3fE!T0#b49(#D4&f6p=l+!PB{ z;ZkiRHtJ^!S$FnT?h{FWeG0KH5E&Vh5Nek98(XazzTS0A2@6Trx)i_)S*@;R^yC$# zKJe{;2Da9b`-7fNzV?g*R*09Mx; zC7zZEfe7w-J@BgaQ-%4)92m@K!FWl_72hkQ7$e+XRE>n8mBeL454 zTBc>6@r*R+@V!6l;kiQAt8D`D>$R@LgoLN{whE{Osk*xCGp;KF*GL(E!p8$)dr?06 z7!~7hLV1v0i~QVoh3sPyMRM&U>lg3tb7ER?k(J$&)hk7PIIoa>RL1@xSm%UvcBFIE zr?yu7Z*O_#JX*+le+^+6<}Q^RYZ&S2P!Y%$$FQM4zq?$&`AKAr`7g_jASW z@tWOx{yye`KmQF`CdFB(d)egCC)25@H3Jz$DXj2#d8g*jno5si4^w*!SFA<>HYA*H! zBWJMpm3&HIe_1YYv(G%2O5d;N*Xs|9aSF+`qm#e>vNSz?0v}f=ragUZ?GIG{{$GS& zIHUs3K2qJ9cxTP{5{zCaXifdtFMRzOwpgH1h0?Gorc_%3QJy|StImR4`i?55AG8TrhejEmeK4JA z;4{3-0>H~A0@h0itOYhoL*cg&mrt8!;=&UfJ`8!!F0?kfqE z*7I~SI4?4C?O$Nz=fq{V4i)8`Uj=?2Ek`D=ktLM~)8XZtC zDWX|c=^v-he~xRt{S(r(hwO{mNC-K;i8TY4Kae5W_wldyVR$H!T zxzuxObdgJQSV2Z_>KWL9CoR<_4OgR{8PRd~)aPX+f3)L@F|N7iajjA3fhYL`Isp*U zF)vN;`Qqn&xngjsi@tzf*%+{{I0 zxC1LcQvN%vm?_YE(&6sKG~1n6V%M^D`9fd5dND4*iWxE6PWC~|NK|ElcM-3Hz=%WW zbFEUnf1E{!6|!12?_ChH?I5ETza8aT(*b+tCF`PJ<*?rVjqngKF6zUjeAt!EQ%z|c z7on`jt2=KdKYqVPTtUpV1;3k86ud#$6-0QNSB}_(?O##7MW9;9Zlrqpv-+8oG#sDv9e84%>7zEti0oU3&+=f3aG}<=x3qg{+m=Qv1X2@du0Hb8c6Y zlakduN4r!`{#swZ?|(vYb#Eee83I{3o6FL;3|VILpa~e}081aA2*txPp3; zf8hgmK}k<53IZ)S10Q4hd;A@;P^q?gY$NsRh5J;>+RU@*vlvnFV^H6ItcaZFU~zbC zQ(BWP&(*uyti?)iaw(1f_2VVP(2L({QI}ql>$6FPvp}xV_u)MGMwLS_75~g)LJ9Rf|pq(K2N8*h_fPN#!#AYW z;RG(rMOy_sJ)CoZM=aXMZ-~EM=eOSx{(U3tO+_?DK3L5Vf3R%BN4`%)qT9{G=kfaG z)7Owg38xN1V|}K~UU!59wj6)ynPQ3e19 z|NZOh+t(1${WMh#B!2N;st4Idf8{b8xsb42#EafxMeJkF%fPHOQP1$Sir;txCsK=* zytDHOSRsO{AP=DM{nXrS6sWSiILDxfAv<7T9Ovw z+W()nYwgjqMzVj&*K+w|fUICPgb{?<)qWYd>@q~txsbO5nfdj5s>y}s&)vUVYP+ci zE|%Wr-eTxhLGbre>4s-P%gG!i)HySNlKD??KqNkX3NZ2R#<%m1b9x{bjwHM-3Fnqw}(vF1~S}-S?6h@4}@*m*CidC|We?1PI{&!q1DJ&Jl zuYkX+cB`S@0fgSJYV1uv&I73z^YAWj7iolTBhRg^c(?9S!Mc?81qY@e&xgdx1qbKy zat?|NKMH+jm)`}^5VR2SxrWst&`zjsE**J^it_B1BQ*=n0q4cL!20J*;Pcmh>+ap{ z`ESF6%GcC-XaTfpf7fV@WvSDO_-p9{QS#bz0oLuc2P#o&IEitYADt5<#-qQ^N?Akm^#Axtk;t17<<9QvWZ}*1F0~S^%z@_#yxVO4eke=|9 z&4?lGgTWgtpG|zIZ{2Z0OJ^%=g>)qa%)!YXp{~8dyBnOtf9EzZ;o)Umz0t>?eGz*1{Amy=qPA1Ov~Kw2Xr6Nq6yJ=(pyy|5x@ z7hn}0VSzkv>#{XQOjV0L{gfT6a=hk)zXN;W11!v(z)<^68DR)sHZxp(hIm96Iy}At z7`TMbis7SCmUS0NTx0JWP`kas;#jsw*DCgRU_L7re^aQe);FK5e+Jtmi9GE^QJ@(Q zJ;VX*?VXR;@0Ri~AjUwK&G`f5hUdURwKBKstB7~EmwvWyb6=;_nnjuN4%T}?sI8vt zF;7k=_R`Pzt+m2zO>I(WW4l9z^hV&eR6zi}Rzrr&&HC{**PWBy62`bATbt3y)_}b% zohN_sf6~wV*V;|`jszJrGlXrZ)mm1H=0Ff72V`&51r;<#XtLqAxDW%$*p`YHLms=1 zLw+n!xqt$TwnzSg&Fihe*rl%`eL!iq0DW`>^~;-kpXHK7AQB*|Txk?(*5XjDz350B zq@0$^fcdOgfht=Th8l=sj^Gj@AV><}rgU5}e;BQ4x~J6{n9IV#jeck(@E(`Pf>nh<^$F|x zy#*0jrQ(QT!bO0b9-33Q^vjTk>W5@^Bg5W;a@VwTj2WvKBu&rJhY!tjNF*q_|$;fV_ zq0xH3-o-WL&gB`;g0jR^1=gjjJwZ?AngDM(+jW(Grh3n0x= z*DP^Q%fed_J0~xCd;7wpQ%ohM&dQt2yVwPKVWo4~un*sm$Wi~HBFT}VT1&1RSs zSUtEq6e6shpeR=8F&wh^e_w1LP?LI%mdP9f7Rgd{dn}4&$~Fk{z+@g)DkqOyZ-sT& zvTb-8&kA)PSZbMAsMhLf1Gg8fL|Bsm44Sz?@_;VKK3mL%S7kc2uX*ml+tY}1mSqtT zIwJ9?1AaB>3~^ba|6!?IFpZX>wfd&OJ4Ox_hR%CIJEy+7Tzkaf))lkNGb%|q|;7te36Ja(`105On4 zNlO@t&qC>lJ&jEp9u{i7dhP+rM#eF%7Pru#6sx6ow$8m;73ZO)BS5|K5D^LSc=X;w zNmU_CDZp*c(5R8Ne^ReO{qwoHR2-#6R!_=sOqM~(jE}cQ>l?tl4sD^wTH?|OiE^4& zB_;wvqiMDQQAkrY?gD9l?K*+#XBSjiC*%USXP*M4RqT0sV&@n%S<|5(8BqP^f@)41 zHQ%+ue?u^Dgyt-QaFe8`dAMq~9dv2V)Qz80N)QZ6P|3kwf0b(L+s1*PX8zd@x}XZ! zDyd5s1ZjxX#v~v(_qc1driIt6%68BN6}2FHMNO$KESFVXXo6BzIQw?0Ab9ci&d1t^ zl}GOcS*jt%yafcW2T0T`Del9ZT%hu?c5TZhmGWxEhU2o<9&Hvu8m$MN2hWbRa@j$Z z1ih6M4t>Xwe>1DhP?3@F9W964(%W0vKJg~kAj*}SaIC~pR0%(7k!PzOy7?F^r+|~e zRZ6JBLao|CUBkmB`b5HN6Xd~htr5(b&sOC!%VooBe^!LToLleEsL}k@YIR1)jB(2QfK|Dm z%5YS$scrd%*vhyxahDeON1> z0aT%2eaf&l9aa}6F!WFhPutVO9iN>*kK#TcvfjZsZ_qdu3)hu{Q9r8Fnm`;+pv!P> zf31>2-g$y&ao!EqH1HWXJmTS@oYkz#Wl~oXkWnzw$g%Y}H6}2>SckM~T}}>U6jtSe zN_#IWD5R%3MTs4UA} z3k9&@uHc}9@ZloHXSwqsYsXHYM;U9je``nZ^$`;UA*`vz&?JB|#5Bh|x&@bJggkiS z6sATkOmKxND?rt6#x80(%tKf&Ju-+8@6x1!k9(@7i5RyY73{c(vfBDkm zMQK@TZ`K_08o@-wvh2cwoy2;jL-FH()=OygRd?B<4Bo4$n;afS40_I-|2@8a_}893 z{*r6>`!_Fd_ix_L`{%D-{s)fx^bcE$tUS$QH~4Rc!z`jU1Cp9CgYtQ2^d8>RAD=vN zfYsr6Myon z2HMPNM7!_!d{}u8?tj1g{u>8aWKBLno@`cTv1Tsz&Su@>*jlDuT=jo~<$x+s8EQ$5 zh002yHYm`x<{pJpOc&Qd?@>Mb;aT*sdvKE~_`l%W)_!A>HN_sKZm605fBAaLPp~{t zach;~8Hvb|K64Ea#|>iOtVe|YwHkJYj%%@bQE;0Rh*CGr6RfX2EWQm;%sv$4msSkXy3>Pof>H(h?@z$`9|u^4Bc}k%hml(|5UR;K zl*q0@;??lZ53rnev2-bhb1+T?YSdh!Qc9^1%vf449|iN_#a6>?ch zp2LRDYnF>4;D5m7v5)Xquq{~)>_Mh771c2}L?OKXyr?Mofa}RuF8hcTvt3k)Yru(F zSQ+~Hj6-<#x%ul z__|HlZkZ^TNQK8ZhwDeroLE;Gdv9(rS8Grov*l%i*TAhpe_rQ{htz*V<{^Mun_(_! z9hkdrib)ZID#Z#(i!c8qG7q9kl4l9<^%k#_l_XTjJtixWD;I@JpMX93>MM^k2~V+0 zU3u`#dkICD+kmQViCez7H~I+7#lomP)Re$05W-Guac`@_&ZV_B@^K%(fBekDydv+l zv4a{k(5B9Ve{-#HWB8@Yd~{$ws$W3gQ^SUpI@QLwQ^+&$stAn@+j&Oi;l056fTD99 zGpx-NOV5QYQzh*=j&bqncP_pj5GdK8<~4Q$GT9P#(Pg)$)>ZjW!15pwJHWmx6i49N zmFzUyqdkR52@Lv-%0u%Hd)3Y0e$W{@Wi4Y872DUif7vvk6RK~2eDbx2y-$WH6Da;@ z?HO#a;AUvX%#5EVJ^E6^37svrfCPpJi`ru(VdY7*_camWx_U z6oW+_NVC0KDQj-U=TO=LZQYNz5l&*UWP*h5Em=Y6lq88W6BmgAvHGIsfSn^F$RW?U~ziUe(zi%}NuVg1F!vIIv^e+oT3%vB+)OSQS`gkOZikHe2Te3O1-cjcvftQ0(4eM!Pv3R$&jgM|=PJ z(Gw5;(9?*y%w8FEnQCTmQt2bdP#40_kv}~4hRG<&i4L`ekBr!*V*Os^hn`O>LJh44X0 z91uUpE6OiCcmvi-vq{wuZLa57Jz}M>e{7R;j2EL%KY(&^S1>8-Sgg8dChXaOznWZT zvq_`po2@VY&ts)*JoBD#?gE7~1}NytYgDuNH7|zRd;s;-!!5M5EqiW3ZY7|ABY;20 zZ*jL&go}PyA5nSSH`t_MICq7#ufsa}#|Si4D=QEmsk_VVUuZ%4&SD0YHZ2gXf4nP~ zqAg{)7!UE$(p}!oXOP)iKe>^gKn5mO!u#Pd0hTV2 z4#=#%_nNPG13jYE@HhrrV zb~DBMlHO7Ae6#AKM_j04BiKujnO9mp+FeQvV#C_9(z#Z2`_UtYmY8jT)(-aQYh`H@jh@d+uo9MQ7sZ)0%YH_SC=hmp3 zXOC{5ytmz5M%a_{T3ZFLg5iilRnj|)Fa9#?`_seso2Q4LfB%n$z}aUwj* z+TOZMCULXtDCZ`TH{DM!ZFtLY|PW0{A?Qp>}%-I+Id*-*R(jihMaWO4_`d<45Zm>R;V zhP<^m9+477_-~C3(6M`I*I4D@EEB%6>e=KP+nN8)_WpmY@;F$zhZa+-JQPoFe{QWZgQSRhh5RbUk$8mwy;)2BI4R-%6J9wT&>Mzq;vHPcDXe0BSL{$ zf5d3BA-&eV@hxOV@SwfroUre1es}4!0mt7a`9j>V=4It7r&v~lPs?|Bt1`^6)6v6^Gxtr-zfg`;V3aVWdn2K{<$YI*qVR9ngc zfEiG}&$eiD6B9EJ5$8)vjzcFQZA*Atnci%dz+{E>SS0ZYNCqwu-Mk;SY?9J22+ov)zguiJ$?4L zo(-GlwCSFxm2;>QF;z-v)yltZo^$pek9RKZBy6J>LlGkc0gL9!f>2@Yva;$Ke|VW) zUtNaC1aF{nhG_%&TgaL`897`BmorQ?yIhVvpu^HZ3vhyWjBFZ8gE9y3AURjzp8t5Z z`vea>AuVg`10X(V%%iRqv~c4DukCjPl-}~=kC&e=1pvSrkh8c;G&J9ez<&|;f(V5& z((&lOJU!m|SjHx#hU{&%B#EQPf7wXWM#>~0Yd*#>bJ=gtE~QIEQ>1Y2I<2=$a;*Zt z6;qRaPyFp~O8dcs4;9<>0km4{W=-0vX-~-#Yke-Ajy=UN%Y%6sY#yeI#cL*D!;4^S znKOeT@eWt4`*86V@YfXGS{7(E?aLTT!fQlI@ip!?$Dtro%vcG9gme|B+?Rw2*U z5)L-R^@t2#o?OgAc&OYt0L-@nzBqZ{P6ME&ILRpMv!g9cp1ER z&T&_w<3mXA5I-aqMVJ=_?sSz|c_FAe{nvl60@=-3cT{dl8ak1@m##(53*$OcvO$4>T zv)VRPBO@B#5i|Ku!#q3&;y*Q9)Pa!&s%;-_B~N&(mjF~itG`{|k*|9j?tl2`M_dVtcQFt_3;sy#3?u^LHPg z)eepuaQs^v)%qS0#>BLOm8`w*Tu6B}&BJTUHs`HUYcC<2z;gvCTiZ74C0hAd+kATd z<>|%8YkeZfey5=-l?I-QrQU+cd=Vh*bK5HE>s5EJ&01XSnMMF63mA4|2oG(Luz4dV! za88-l(P~XPlnQ=ss}@k6v6gkdJu<^wuVmSBrLw4IFd!g76VxTP<`XbB}&rqa4D*sak?;j{G#V7mjcqjz6a}0ls_qYyiz? z8oA@Ca8o+)L(K;S7B1lOw91+@Irg_vBfheJ@pw+foM@qZRmhE_M)(m(mYmPUM+LU2a-lwCKwcXP1Um1BqEcN)?D9_ zp!zS%T#njqIAT;1?Wld%YMPN7N3GdZx}NtI{$-lWNq@r^$m&%!%wVbo71^`SP>SgY z(fKX7nC4;GKst)6wOx4kOw$TzX%|^|s6zD|*UYjn9^jkA)C(^AkXlN%ZmVby%QjcY zN>{WFUo7)@2jXPXJvohKIEWRmrHmPJA3$+u0g8)d&o0IH0EnFv6ZNVa$a_r_DQ&xs zxJ1ur?SEpKOJkW<8>R%6N~Q;#k~CXDw~DsOQjWaf)iRg35o?2Gh#tyOlY$@gW)088 znHlfFm8Q95c8Noz!*3*krFA=WKyR&!+NAh(rnw;8B{r6^VNWpK^&ARtTZ{u>7m4aR z%YJnU9K+V>#vHS)JIzK?taBrQxJXF-s*8Oy&3_|u4AQ);_*jrM=P>0a(`7k6G%?HjlWLBZ&!_rWNNZ8MGKEe1^X8 zOK`qxZS%>YVS}+J05tA%=K;2hrp#@NvP9+pcZKl|d zIpOW8x_E9C1X&tY1LDb?y;MBi(IVA}jCJnV{@Xa0cU5WGZqn37-~q1O1KD(DBr@rg zqvx!*&?&?f8|x@b@jO)*zTXs2S6eXd0_b+7X)e!n_B1;6L{)q0c7cqnl}F+fvww{9 zO6oV;Tvi%0paz)yL^R3TSxnP*6aKd$*u?FXwz)(&YxCt@0KStp-N*+t%N7fJV5V0n z>6vLRi2)~zm$aRCUkd8d_XLjPsi{O;cygs_KI|%yN}{}_jaj4OR~x8lhML&+K3;2^ z%XBjM=%O5FwT(y&aB0%lmAK|U=YRQf<1gD>V%tL4AP{3@tBDsBBr9sH_yGjR`I-&B zP7OOYECXOvv&q-teW)9}FKq;pj&pdXFkhWoDPWJRx}}4;u#&Q41m#bmO!EF)+W#gGTSBTz{P8e9B&) zKDfveP|ejaE)oFad@V3$kOVcY#0q?VR`&Yi@y=x%UhG7r2TdTMO0p~u^tHgO@FAb= zdi?h7Pmf6+u=cnsfreI1;4o`9Al^k3ZI<(_Lv#E2(WM`;;O;t-OE6&)LXzIkush!(~UhZ7%vehtJ1AiDvY%3wy)3V8@ z#CzA8*A@HsT>xSe9DD?O1rDpT1}kYJhDUKmF z0K}SH{8>-v`_qHRs0<>#-KK8@ii{&)5|}UW4c^dQ*W@GC|NiUqr)Q7owM*+_&0Yp5 zcrMvnF5;kdQEK}by??%c`|e^_kWk?=D}-77l8b@f)J$m`94z2iGTi)QdHYY=+m5ygRg=RlS*!x=xW-eTTjF>Ro=T;l}avS*(=#_m{cj1-HjqKXxkOHByJB;7f9qV ziG{uf;(aL0G?uNK>S3L4SwH=7+PcuH1c08kXFxIs0e{~JW>jPc9gXLa-hR3Nare`u zfP#=v1F|CkMQ$VP*pzIkZ3Zo&QqD5+FJ6|VlI$BrMm8F$E9Y6d^32&*-n+Wr;fBNNMG@m}6M@sw6}UTbDo1Lw^^a zxx4{+#8Df}Le@@mWShaF);8(VPU~DmeDSgj*_*B2wA2c~arbCrxO1lx8=mg5(dOc_ zA1*#aTH=LsR?_%4ZP&JA*Nt3%iDdEmmdPLw27iJXz@y2lz$%iS?zCFg&GGo_v(`x@ zpBB)2Zx}-X7Ub3u&H^u0YZdDfLBX2q5aKf_qhlA6L2qle1sM!}l2D8_xe5)UekC(d zNJeBep4ziF|M~BK+A^lOI(DOjMGI`U3;U6)HCGCVMy=;raKN=?xmtCUAfg;th98wO zU4N~GPrWkF+qD4J7AX=VTMGtyAdvnDEdmiDGqnkE;!mkHVExyQUDQz9t(?wltiG|k zhvk_f?y4{Dyjlmic0>|AWRUAP=DzAJia4=-+NZNwDttGA(8gPqnk$?WB7W(?-|5oz9{)<3kpjhFR`Qn&`&H9o{ zs|{wNfOx$gRekg04}bpakN@%Z`ODMO23%D9eNM}c&9{;pZAfXQSgNbKgC2cfadrK) z0Tw$U$5|R|leprBkE4SP4qqma>gy-^4%S=U0L<8QCCvb}1Gb#`0x4@bK#Qg4gMTNq zdtm?A01Tv$`SSQ%94v5`AYgvRw?|j=u-Cov9kB7RHX!R+%wWr7SU6#0;x2GHk$15{ zU>^*4dx>nzb~-7l%XrS_>`@s95D7jSKD-V(?0$!B$BqijCWLG&PK$4CvLBv8b!1DN z1MzyW@Flh#*Av!390%E?##;QGOMkT+B=7aS;qRbrx(Tpmy+?L>aE-A;*ISQb zu_nme*E#(ixE+h;m=?LJ6uu?rKrbzwPi<{1iSBiGc#mt#ios!zVr9581XzSV+-_|m zvD59KChi-uF}7UK94GX@704*a(`Pbx!RMd z3!JkHNo21R)O%oCwh}~aFrNb#0KgK5)N%M*X1|!?F8K2?{0;(?mr@*p1I|L#pSgdU zWtIeMdr;#00@&NW0UC$}>}m60@D0p9P25UhYsLr@9NPs$JBEZEX4b%aq)SyzQ8@G} zHgl74lnAx`dJNzNuq|r_y?;|uE7L5oSzex*ZLd^0>fPFS{qf@tnr*;UR>a9_Ew3;o zCqJW;+=iP;V=U`}@gL(43=BKPl{EFSDs=TMd4a^r1ixkS@&L`qmrU%#4ui2WM7Cef z=X%Qq3(X}qj;YfdbiwPI_64vlXDox$Ca8aFF@c+ZsM_!^r zAjOzk)j07#mDNC&X>B1VJVr~R8H;!@&+jF&FFP)P zk1OXo;3siAEfoc|4PI$=p{FigfKP9CAj`~O$RmZoZf3cJg~j5~O{nzf4&EB>k!|sr ztp3DW^@M#LjU^Z%d0Et^V56TH%fZOCcOKui5X57{aL7aRUaV`#~nyyv%dZOeV zxLnGuIF+4Z^v=-E`QC)W-!Z`WXD35gr)Qg z`M=auWidz@Y-@1Zr2%TDNkt z2Iub91>*)}Kg}HmM5VFIrYeqoTLl2CKpaeIEC;=|qd(0pE&&#nwMZ=}BSG53QYN;Q zGDh{YU0}Ds_J6eFq;ZxCBkD{~pK@)Ap_b_zWzt82*Kf81g`oZ|EgT$R%Z?(KRgqI1oe zyMS0;yP})0bz{m(a9ukcf(JnBg>#Nq^6sDp;vU-$V1KFl1Zh4vpbd=e_U;SE4mD*Z z9;IR20o%gaLYgT!7J)kWgzQ5Y+UIiYsXgm8gS#b|0G}BkqiSHsFdY556jvb*h5npJ z-9YbvJ@263mfPwDmpxr`^vZ9-VX?Yid9J{aawxT)7JLUV%KWGM&TC zbQTYWAALjiZhqXtH=tL%thI8g z-jYvZxz>i$HKh(tP?r`tiDIf}cYoP-;h25;vLgWpRA;f6(HBs#S!woDhcsVUEsh7c zglk9CKtK+M*2QKoQAF`6opV{TR@tTI6xf*h<)X0Zv#7rCTo{)Cfby#-yv( zSUIrr9N4FSKJUoE;iTQ#Q=~fbAdPcKV)x3>v2MMcYo+l^ACEi8^>V>k9+N(N1`r`D z217f{RKkUq*YV54^Og{hNq+!$g^#RZLFr1yJ%}{~CY9HEQ0?^+*_I?sNJfh(DRVN|AX6-S_QWx2`+rp z5<$F!i|leZKqY%A?woCW#kOPNB(*UVWFw9QPUK^yQkm7eDq0U}nSZ_mw*#9qsF9hX zL7fN7F<75~Sk+2w^Ugwm(K<*J>h%gyIaE|m1lgZYFyS4f_jznyK1L2qYS`8*anKWxdw z;YiI8Bj_0$8P-&?XMeC;Vvk_H?ws8M*A9!@B8Q3lVQfyxL$<{5d6x@JTt1jJaffS% zL8G-O@J^w2wj|0e1s_@*+D9DupsUm!t{o2n9In+`hX1q(p9yY@L&f)3_KlARtuuee zwMTBcs5nZTyQRZhW1C{!%$4&H7`gL@o%vx;^b=r`mxZ6@oPSun=A_QaQCEq*Y%bvH z&;Q(0Ul-wzTFtboK7iojI<`el$sM*Urh?G6)D`u(5;O{QQyO(>P|Xsgy0{dF?VJbA z55H~7c4Vy4GZ`qYHkAWmJl_HQY|!f$%*7s2#|PIES+C~ZYyj54H%h59z@AM#7sAA~ z#Z|^3Ey#3$VSm^@4hRvA*3E%_%LRwDKEK})WY;-{rKF7=%^^y<3(RrR6lTgA&J8SZ zeGtDToZU6m+(Q_~XV+Cmn1RFG)U9wK-U4JhcCs>*kzE-%#A<$YjwK7z4+s`$<8%JM zCD*`w1u%#LDRWu(doIN z;FoR58OakWa;eYu5`tD)JiwVsB(qOK-vIeIOR6dv_ zc=Z-JL*g2+J&_As0CAZK*)jFur%nhFfl-Tv8Sbah9=FK1fxBoCGCalJr8S53YXS}D z)n`CHhqXt&B|ede^xS&}73*px_Zr7cTB19*7LPlqg$cNRa5(+GPB5@xK3e5iKo9GB zA%7wJaZ`{dPsm*ug^>d1H)HRxT(`dYHHsZ{A-V&$<#?qMm=hk`YEdCNAjDLN*<7Q}sMF_V};`mpJ7Vbw*HdF-_P7xQ7&+4>DkO zFW}m8C!J#JAVC~^6?55?jb$5tS%kAZrxlMox`#!FQ_e>Dt}1gw+H$=>jW1oG+J6@q z_2ZT#N>;<=zE%!cE8y{(SIjx56s_5Xg!;#)O&78);UjeQ;5C9n--GM6wA5f_&2qu! zZ%OXdXgJ>uM!spuIi@xQKbSL*0LgY`!L}4Tat>$kA~iWL3eAS~li(6>XUOOJ<8f1^ zBXhxhVcTS3TZPs=L|bH4L>)RWbbr|aussJ1j;MxpGx8nlhD~JF5eN_nTJ{H{5x*gO z-V=H%vj(s(Gp{wW&n|4mR6tE5vH8vwV0&m7w$DOT7i|_3UpZ)=nIW!OyYd(UU|UQ+ zGqje6oo55oRa#swE`wex`PQfY3b3(*?kwid7j*--KrE|@*4z^Gt<~-??SJGBBUaXu zVm*!OLI4A+)FRHgz(|?Z^JkF9=RJ24j#{0uJ9uDtAI_;{^I800YUPE>%NwvQw{lqk zZx!riV#`D4nA775TeN1-peuVxXgiEQ?L*~c%aZs`gAX*85L&mvUjLU?ZBqvi4yT*Z zh1jZ(P~5Bm!s-RiD;GHTi+|9z6q9#S)hI60n={=A7Omt|W8zrJ3()r50T|bmgIQ@~ zbVzV=e)ZT$h`JmuWKllux&qP^c3(ljih?CN8MTH)Ul8(YS3Ksf8^9WOCRo68Cj}9M zQc58fxO5M$aWE_EcVwF`z+gVCm8uqCDnd)fwrkP?`#ggqcAW zfoZT`Qkx>DW^o5>OX6e!r|{s{4*bw}-@{am z)v|GV# z1Z#)SbKR~X+mb%Kuz%H$c1!A?88oqamgwO^fVYKn6MKWUBil&%oNI;Vp2f4wA`?iJ z6|kq$4~FZ#K(-^>E>B~wMW1Y-07VkuEgMj_2pD$*hi0yo?rV z>oQ}GZAR>>q<>4B`R>z}c1?VS(>Xhzx)$yL#Bfqq;;06id*uRr*|K7iXDkWly!)g* zP8Oog;h@(`@#8|K_0!yv0KRf6sd=k38f~i6k==w_YHLY2kNrHofB*BIeiM?d=CI6Z zSY^$%Y6;A^=0mSLn2COmY)e>53IrQyP-uOEZzM6+RDZF{Nvb^^Ot-&Bw#CHaka-SR zO?70JEcsLuAhNVY!iB8)r_X!DQi7pa41dPzAvXnQOuCK*i2|c`9`k?NQ`c4MgrRqC zE!d5f|ChEe+p)yfk^CiUp(K8eM3L|SUb@TWi|)Ul;3+@M(;U4J@KTv4(H8`Fc|&w0-UfKM??Lg7~1 z=toAp^tGaXN9hlPC4NtO%Z2~_aGH)&AG*}NP`o-&y(cWYPbVxzMl)nys5L+@m(jdO zv*NgLwWG(x;}^R!fQ3av79Fs)65XcNDiE#5SbxGsM;|ilVOL5gffOc(7X=f!Q)4&{ z?@BA=VETN}DEs|q&Xaa(_iT{`<2>pk#e5+|iUwiYFAJ8VHWvbACAvbUYwIhNK6!rf zideu0m;VPqW`?KOHS}`g<)U=HUgZF593Ph*&f|OT`j4!^B_@Q`fzR);R&|eg9eYc> zt$$g0XlVW;ZE}gSth(_7z+r5|FJigkg2p@O_Ry>Hu`DCA0&ZJe&Mb>(@8LAyy)NGw z!`xp2_{Xx8I&`H2+TEoX(Bb^FMwL)nnE?H#f9Gyt*&iv}$rZcSdMIXEXM{_WO>iD1 z=3mr@cGHh(Nn;YCW9CG!>AEpnc-WbQkAFf!s_yc3J%6N_hVR{KbM;PZu6ecX7)a}< zx9R2Cw2W&&(J#Mdvjzl2+$NlcL`_GI;K+S%jry3Dv!g>JC#uB(i`LJO6r6JnKH zf3_`S-9qJj;)VkDL_14h*vRWyv<-r$zd5!HEwDX(x2Eg3>~?o;rFh?`VZrWL4}Y)V z{zw~S0^+M82LwgQO7vZ8U9ApV2QjpNCz-!YOUbiiwVX8?D2GbBtDVL-3SY{{9%^5I zq)jr}s}~$D>T8WkMQ}$O#ZQu71hDUT`(xTaDLWc(>S=Gbdv^pZio|D`2v}`Ot=}Q! zFWYj0)dk)LNrB54i>kE1!|BiuoMT89M3Q2ZgYIjmufO3loAvmEHySb8@eUTgC8Kq}3k% z$Uiy8#XwYq^yoLJL#}D_BZw5Okd5izD~UOetL`xc1;ycSF-y%uTz?^|wtrgTS{^3# z#nY-3ZGdWP_ajzzmC&!zKuShF8*|}D!*U*db*AWK?@`c+u}u}kWiBmCW8TV>Whp7E z$R^ZK?!bkVb^FJ)wSD+TFY?Rn{GXhh6%}7VM)0mMt!(qXN!MNTOg`)Jl%>@7@0@l+ z340I6J~Ew^?S)F9u;PI3$|GV>!J&n63qP*%XNSo*8?!10bBDHXwL?edW7{@9k0?MCp9cE)A|rs7iI z&$yOQ{jZ(deW0Cx{U@b7u=@>Y-HOKe0W6o)9ugD>0jtPMGA#^CIciKmU(RJ?!TKCs z#_nEs7i-ag_7Kf~nU>NK&A>b{uz2s;z?aJ8D1ELS+<4X}pMM71GLG7<1E*aL$L-#F z<5@?GSNb-JodhoTdE2TtMx-9tnAqYq@f+vP| zFBlpU%eV#K+kX!}mZhAsJ#Zm^6^LuGXjs~#dSPO^#~&@r$#D;#8Y0=zZrS3s2e@$W z-VjLvA>S-ZDUoe>hImT^Lf*Kp0p`1GPX@&UczkeXux#g)JQ=QQPXic2pkjkB>vC1A zP$=<^SKD%OqAg}$11=tfg0q3NI|%10&0~TZoXM+kNq@OBVUVa93NbY%0f24>MevKy zWxP1tk99dYQDxazW7=FF{BMH%SCC*l{4^}XBnmuV?8;+Ir7uuTS<5Y>Sqz0cCCOa=meH7zBJB?#@8 z7q*o;of01Hju^~cYYWc;|gj*0??I2ft-cEz zLQ@_7qKxjx+W;iemkAifO5wx>nFoLQ0hCQqc z$LoIjH}{sO?aTp=-G^5RF`iS8t%*%-1ZoV#Q2`(yz}Y`3(>;gH3;60fnx2V}DSxd; zA$G6RwY3NQ1G{npIXJrO_Hlf+IxCRH&^r3ytNrNrxb)}#Gb5oqN^!Cl?>WtVjJ?BK z0GhRPT07sdPuP{CWMQAFOaaR#i`=z%?N&}_#Pnm|UB;goBAlkP1!q#h)r=Ws`?OPH zmZrztzVG}zNnQ*bDat9ACiZdIvVSu`oTRN@_ZbhW<9}MtaE{W>-a7;&ZAjO6imr<( zS~%`*=X(w6&!iWo;pDDzbAlTSdOaXj&HNhX@8@d`MKL# z2o2zO!o|H9mLp*o^i~8Xf8CHuRO|6Vezs|I%Kh&3v6ET;wOG|M5Wu4i`Bp^9(r2iR zmFY2U>(REHQ3Z20iv}UyQ$vhrQlm3tVw#>PwY(T-8OVq0sRM@|H?o59?jDm1&M5e2 z0XF-72Vhu=Iu*mSQ<*emcM6GcC zGPFDlcZO*x`l<@ZW8`B^y1R0>TN}to1(FS6i|;LRAH#Aqwc%!4-(LE?3@T0`EsJwF+i6rhTk#)EIW?teYH9!rsS`s~-R zeh-3iuq(+lC29?<=~RSFc(Do4t)QN_M>6~2b!U=Y&2;oTq@KPdhV}KTw%cfO#P@?X zRZ>V-(+WDiA~^t18_k4@I|-}61rC3Io0SyNW1wPP@ur!1!i$y5M?p8O1si@~C4c=$ z=|Xl_UfRkWyGb2e2!BMgBaU`IG+x3|P9Sd_0|G}Vrr>Ab*LbUd1i*O+Q~eJA|7&Z; zU@IK;qVNedv=T2x^LA)?>0p;>{$kgU|MT;IGXi<^-hhK|_UPBRv?4~fJ?*w@4-?(~ zyOo@ANF7vMv27vfD+rmT!Z6u$;9^pFU`+r0w^`1!{yt*15Pyz8D1gh2ot&ee1HM#M z_0 zaR=^$u69_KBs3E_i^DP&PokKD4L=)loN^hb?a8u?jDLT#WffP@tKR77vVv9Y<5X({ zsN*~E`H@$M4)Fi9-pyZ^E#)<}`8@qxF0>q%V1r@$DF8%O z`|aPeQh)!NmeS{|EBZoa4OOE$mVo#AXdw=DNgs$DYzy(%l>VBg5-8)U0GQ#X4q=Z+ zt}wBc?@;4k(^5{`R-X&(iAc%~abft880Qfa1o)vm@yoUxVOs0Mx5Tsse6=0>Sq4s^ zXmrNCE?dfJbI{AS7LM2MxRyJ@sM-$reXTx}rhosojCowZVe_m5PRFG!b~b@=_(KPy z>hy3y?e`RV9`g-PLp&Hd5t?Q#da;1fq>7vSJxcxkTUs3e*q_^3tsu6eVwQ@-Km6KU zA%9)*Jq-%Oa_RuCJXihbQe6V5-2ykFbmw$E^C1rWmQ@E3+2Fos83KV(j4VD%{231{ z`21-zGaRiO!jbWkbwM~!Uw}bDkP*1fl80gw>`JLm;9`>AYbC~DpFXIXPzB#3BFEov zhNbLf@3LpzU612(Vq=LyrrhTY>D&k04S&;M(EuRh=*_sS<#%>|j&-ZEWVHY%nXqFJ1&JVDJ~) z(oCCYj1cU!yKftJta!s;!2ZBi#sf(EEiJ)a0b!dwIiM>UfkNJWqg0PFZ;p&|I8WE<^6;z{-k;jR?W$+P^}^Nd)!|D+RvPaeSgL3WFzUb z5w0S>JMclr!9$GVrv=OK`K#QrnvftAg`Swt8cIDeZqP!v{K2lQDTp-B^nn}LN8uLw zdgGekt}|*oFFTo(tMwu4BTLox0?ruJo6bvnafre`l%4)gONZiKQkQuazgkY(nV7d7}dk+-{6gr7QIXll{!8y|&WFpdG2~OMetSp}^Ulbb;2@ z)*pcX&zwP6qxdSoI8=gR;-}zpr@>*k!HLj=VgH<@l9)DjzW|MA`0DXU*$EhS%^27C zy-_1ejz>bJr5%Yeb@3(!VRH)WSut5gUvdUXYCN;SR}=z+n`*d+ZYy4ypB>Vw`(Z$J zRvDce;XjO1b`4x_6bJ)JgT-5%mn7?u+HYRKOt*(SL>dkdyjYmQtoBDI1Zf z42!(BZ9afP6iFYJArHCstagnWsy028*baq`JI)qX5`+b(ugv?!d-G?gJKPLla{9oFxZOM)s zIsOu^g~FR1{(l4izy^QrwfQk99iafaRk zL7a;dQyB>0AYpjXIb2J6!!`Z6DJL!!&*%-6Z{if(4y)!#{d-OA#>~ODf3%k^R2GnY zfH-HnxNe*>&Wv{GIL#64=!R$d>uun7ZV3V_OsaQvI)81Ph!rf*cJ$On0B^j6_Ws;$ zer+#XoD-W6PAwLv#Nq2vzKJszpgHS}0SmykoB>}iX95AB`P|B|#h z?@XTsvVWJ??|o0LH=9l=`+3Y*n?zNxaP_71Qf7hbyN~W^2l?=BEEyv?9J5@y3!_aa zWstX=>y3HZ@2~CUZAap79Sbg$W+TH7WaepD1g=mT1XmB|!NE%nS^P0;7jx1*%OoPSpmk{ju9A1}6c_=J+jDxAN@unvc4 z_$(eOrUnoay%DYc*i$3p!>l<}z8iqxRulNEA|r%eCjee=C1b%m{1g~k_6bJcYW1t) zRB3BbtmA~~jU3E$o}EqG3L0T0p{ z5q}d+#pFg`xX)e1-VvsBM)Ss|m#&q-Kp1SRG%Kat7*z4Oui85-^Rrf`365QRnnPrU zXxL0#k9^HJK6jOSTT87~a{~sSZ;&(;_{Khp@G{t>9+35`VD0(X-~_7P2i_ULf9@Tt1TCV}uY$F+&)* zRI>FO?)-C8?XqKa6OQ~?Oi_g)t35-fEBg$<{NA!?TjctL0OmVTUhGrH2K})~$ZQtJ z+R1BgKHB&)pSIA(1si6i^-#O<{mk_UklBHFYjZc!kbh#^66Oglmn_vti1cVCDSx4_ zCEyxm+;Hl@u_-uEh7zm@eP#ZW9 z=NH+$@zMcUd$N!x&c7ShCW~e`8al@q_$aWllzFRT)+Fd-#o;<#tu)8h! zREFL_wyW?Prat&JL={@Nj1HZiH7*|@*PXvnVz+ixeuKQ`wqR9DjcGNgk}!1ozJd*S zu4{v_-oHQn&kjpAJ%`ibj45cg3`o!D41Q^{lj)7p1pxaa`Yq4`i|brxJ%4V3-%L|+ z{IeJMh6KuS2inIDVCoKU(N%LTx>_f2KtTDr*5+9W?QrUWY@V%Ie2AMI(2K5@$xC{0#U z3`?bIugf>w0=|{j>%#Q$^?zkse89t%voyUXK5QRScqlmA!q;NCleht7U*GEVkAZyfHRFE6L||?V%26&s&y_ z-LfVP7!I8UxN}w&Ni9A?y@Yye*>;pmQZ5yrI38=5vI$zLY-R!GHh;0Z*B9aK%g0*J zTiTxmh3l*qH6)W!>KbsJeCz|&)*B_@FW+CrxA!gE8HW#ZEhe)@Xm;pMzNGmWQs{l$ zXoLCuWe0o2Zyudb@0{G|Ac`Zd1Sm)xC9XUDOrP7^1Ln5RTG9$(8u^3Qid)!Qf%dI# zt^X@Pe*MOOE9L+H7k@SEgvH(nOgB*H~Z&krQ|Un5!>?A^*7BlQr}i6nKwBt>Ro|Nhb+h#q(| zzeMDsjVj3;0OiLZLfsEU zJJtwS8x|QbJWG9Avt!x-E0Y?u^hrPLA8Q2W`8WK!_t%f{{`CFZ14S*D2rcpzgjM%o zeBgRupsj?$DX8AsNtQYhuIKjm9s4*!9L`uL$cc|7bU&Hg)?;hVoebI~rnYAzS7#$D zm*W7r8>^HBK7Y#I*i|YP>-_p{f#jmD06W=6T^vF$wI){HFBxif5_~+)*8F^c&Rt^4 z&b!=4&9F;BM4I&=I-pZEM|aZy@h7GS{QmU`*T9EKi>^(t(H&JRs#;>|*4DW#pP%nL z*2zOorIo=g8LO3r|8|yf6GxUd%kQb>PfR=3Y5BQKyMJrS=|y^U<#WoY8Dq)o+z-D# z5|+I_;+dl$;u?NR?66KDMVKeytd9(nbq?wEfwb03NNKWe2E5F57=w^mDY+cbu-#FO z=eKUhQDVwoQj06YwWt)3To%iKuuO39lf=ve&<^r6V6GQzc5%Vu&JDivS*>F&zSW+z zs5)%r1Ahrimx%b54Oo(6>61fjsut(i*pZE?-1(;c*A76OMCYS4C!w;vJcxnIvzqIg zSNnZ_#sO%@rgeqRtzp2of#nMOD>-)7NRZdroiq_Re6H=Fyi8vYYz!oh(R&a~QCV(< z3cJ~^Xn^gw{TB04zEmYLp8!mp6@DvfojG?qXMf=jP0GF|OMazNVpj|1hl8H->ZcQf z;ViCPKzbzg|9ayl(cOjJe%i5bHCb$&q6j}bX~nw}g_X<- zR)3lLxmEhyvP!LEk-WepO%S67o8+i?Wi~hy8|Mt*>-Psjx7Y6NDEt@mF;{^r!NHCd z4i`!o$W8_%AMX|4clbA$ZV0z(96cj-t-uTve5O+# zq^$6?j-T6_GU4^KcpV9*X>kP9#f!j>172$>YK*1)G{j_V@%s>fADYJbz2t z0E&;=Ru^QGsH=Ge2Pqd^hlHBAeHZ5PK2kKF6MGPYMw)SdLXQGEq14yO;d#5oxYAMvOi5V#{Kea}V6#x5QZkh!R!?e7r#OdOq_M;UtdC?0-o)kErxL4+WjG zaI$w}sLu_0GY>5Rw-EM0^2rEwVj5q!sB)ZY8L-R)cvoC6NQ@273ungz636OTU z-(Z7t&Xz2wDg4CdFMm^-z>F@RPYOLw0uq{(D#cS7*Y{9wtqUJfptJ~nzre*vMS}I zLH~hiPb8y9sFKj|p?TkR!kzR5>n*t`zIOgh@cRDrKtkgUOqFfi+43e&HC8Yi3m4)L zj>J7T1#FbHLzFX%(1&GfR_8M8!dNBZ=H+BrFGA43w1xJrELutk=AF)!7uSu+ys+W8 zkC*GTgZ5^V5Pv~@*K{51393#*=wpD~HIobK^!C@cEpO0%Vnvv>HzWKE*b-Q9Nnt|5 zXej5ehHS8~<#~?TRT@WN)-^6*g7u7f+Hkm#C&PCSOj{Uc^#R970=$R>2w|$HIg1P8 z(-`^uIDLG3+F~=CfLtnEFO&iUtqTU7%~-0HrFJsl^M9u*-yzGVMA#;2tB)V2Ji$&m z@fGeRuYCR(Moe2Wt_o1O>_=dRla&d2AhoUK7hA_)<`V2!sD-_gEHs`i59^8Lgpo-P zGn9H#-1`fY?N}+#5j4t*@rt$K2pW*yD3)QlIF$P;uCZgKM#sk``Cc8&XRH})PLfV_ zU@bWNSAW@;J2177k`6vO84Qx@tiBrP9CN~oUgR3v)1Pg}=4DyAEJmPGEX*Ww2`9|E z)FPYKpGz08-yI7TyPFGEn+fc6e^7c+W(PQ7@AZq|G%)R0D88o%RC%zNV^|H=a(D<) zn)tjoPWER*KhVnS?u+Z^23sk%Pi!~jK`LP z^Pry<O3&ez&p znB7CZ2Ot_I?INg;@9Y32LrPt2LLAHDkFciws6h;z27B=w)yAF;gvW~o-q&d%{{{EV z2CB|8HLB#Rp#IpifmUni&Kl=>EQpwq1%Jv|a%B@%(~Av+Vc3FdrQQdR7Cc|G<=D9h zhJFQYC1^f>C*u`--ojsU&75PC%8YC+(^WL}8Uvpb>P2x9P;CKKe9n+Exx1ij-37Yd zQxWh{SXW(_X*FvLsxg8KDQD(Gz!gd{m#efH1}Ba5b54xIz6TVTfh=|Sx3F(TT7P2& zOB@EoyuV9hwP&fE%?K~Nd;{g2-j+5T`?`WZ0$3NPs*Nvu4*TjjKTr{DZx(TqT5gu6 zgG9}cfhRLhe!<$ag#t9Vdae{5Gu766cR4voK&N(f+JS1%9u_!2YgjAa+H@UX!@|X? znyN~=2=?O=?pZ9HCmVAtnXNJFfPY;BrUji2PEaore~4<=f%nb9?{VCmCS1v=NfUEN zGCn?;UVP}~u_HxlY7%vU^NMqW@)7_|K(fDlV2b|{hYe);GBM(hEu1}t+#?7vsFgsI zaww7$R>DMIl7x#Vm_Psi$Bv*wfa)tLG8ut-q7SI&qQUTI(aQx79nWpcOJj#(fTMru zJnT|9U(T;0ynC&~Kc3$|FbwP){fYNXDiLx zBZzuRY|PH?L*jr=VZbh)8xL4v$7)#`3MRUkHtknkzTo&n6eftA5-*itoeUAo_8$PWTP#%4>1az6tsqx{SFSjJqdRq;L+O#4bX`a|70v z)$09VEy-&WCh6+}zhZtRJawMuru2ZdOUNO353v)M3nzb#1OEkU zi`B{wE2hfcZTQ-75_H&Nze;Oz!IKS2b*gr;xNeCVYE-bLq=AFy_; z7E9znN!9lprmpS^wIQ@mh>~E#u3>FCTNDx=Oa{CUs*vjh!J1mNDQ)DFR!skbwdE$3 z?&}nRkt#g~n*)pcD+YN{l55Vxq}{=_W4&VP z0bbDu&d*J3jFLHFpbQQjnL1qjKx;-g3c(eIs@}E{4jrVx8*Jx*}%+i z3Fj0ubqvXS=Q%zo(N;|NzqDQ1Ze7Wd{H3hD>dikeh5=(fpq5O47)^^J)fl$F-Vs+M z+kTi+#DVLfh1TU27^o#PA}bf`xs}bcrJc#LDhZ~2`3x3nsZEjDT&$2j*f>g{YfNuH zk5u_an0M=Qu~Muh;d_5LXhbRM86&w?_D?uZCqSh+eTSsz0vlC1*Cv{4(iVr9rnHIq zJ^yh;u7X#A8-NwB2@&CX)ucnJwhA^;=5^iL>!IxfO|Bz)H<)5s!66bX7EA=R;;>x{ zg6ID^qwAyabbA;o^^KQMhaXlLA)R8^SMT>jplnQ0uyrY!5A=TnIu)lY&_;zd)AjDX z9RigsFp1D{RM&V^B-?Uz%CrP2J+Eo|z2<{%u-QS$1&(bR40cH_lonSWGJO9x|MBtL z{!;3H{ueHlzTRvY!*acH!G~p%B&pK1WgBqA{Id?GuVK^ z_kQ8L-_d^sTUdR{zzl`yyd|VcDg|@KnG$Yxff?6s*W>ug3^4P+~9Ftrf zvvur3oxh{H)3|AWuB3%B;Q2hvfiUFBry}o@lLVHsJ?+08u~=dwcbg46rW%uQXd)PI zV}J@9c+s@^7pm7AuSQ!?Q00jYiNs|O8O%374rzZ5L){3MV>#bJ-OvVmYlQ>ky+HBC z*v&yxS&sO|Bl9`b9l-*qJ1t4}$10Wr#iGvJjIiq>t~ni!V_e#Z`we_KV?<#Qz&l;k zGjkz9s&ewg0 zg|dIdP<3E~<*5qaoJSP7s{H>zb>gVwhYp*C6NDeZ`A;S`wpweL&|VikK;A*!7`VB` zRHADPtMr=u01R=OWMS`WEqr?4V4A+%8X>%Q%+qUO;39-ltuzI7H#2V{EZ*EH9N_vs zZZziH+t9W&t_6`*IUXYn`W(T(8SJKd(eQuf16REljoM2ur9tQ=r@@YM8CI)mVgHT7 zaRy%ic4i|*@jo2t>N<}8%u<+1j~m$q2Gw6oRrtVlW+PKCA+dCH_9)eX@Ky1lq%vA- zu&6s+-|ln|-YXrinjuo%47IYYM8+C1DW^5Yh_}c7PPWN@sRCo>0lry48H({mxq*K% z=fJ5pbLVvc>WGU@USlqn**AQqIDIN9L6N~3+9`rz*29ka0o4hc#gc>0l3S~sbn9TN0<8Yz zcq?Y5?NGfQq3*$#%7$-dECQZ^>6U*6GXY@%`o3GLr6=qHC_;(aTyP#lrdgKGXJjjm zuiI-2>gl%wQP|$;3MalW{Hm)v0r3)pNq|o5K(<5mzx~8odGk4Qk&0>$-cqWN6mW}4 ze4kfyr{7WC=?c5I3(k);+50gUhOj_QIn@v+9;BjQ4FG$fQvAB_H?mW=xFUb^Us$EZ zX?T%5RLa7CGvX2y*%3fpPbXrwYu3#7(Co*8x{r=+$DK?~0Ysv1Q5`z(pja{KN_|8p zp%w80ji3E8)w_7ZQ=cayervkLM*+_Pp00T|{Z78;nbHDR-Z|)}b!Uj& zK4ir55s}(CKQ2MrgR_HV3A>_O*oyln*4vzr(kwLf4^&`SEBTnyj39r^wTR}6nGGMX zp8x1aa7`!)0d4njO7nTN6;`ZZ@z9H7><&C}9f4(5Ah{U89SvSu`{>~AhQGsRUCnF$ zgmtHH^PWD)Flgt1#mSn~gSjsWkoPS?zK)%cCa$+5j{;_JF=cW<0Tv17la+Wz#zkeOTPAItETu;@he= z_E6r2B*7g{h@DwnVAG6LK>k!+gtnLq?l6sHQ1?4jFL&BU?k#*M3hJvR>Ad)UYmd7IsvPdC7w;%*vvVu;6RjNqe6f(gu~uh_HWOJLbq*ltQx>{ zD~!UoQqwA7ng@T&x|}2Y3)dOTFf)9#%o1@>LH=L_lvX_I zngfb@al9dzytE$essqZOuukk@#QtM%Gym~Qx;bG|iWWE*9=3l}yN~{2kl-h*BX6sVDUBhA zoD&RsVsbqwJU|7g=&L!)@2E~3t6&2sXe1XyRC7LR3kt&kxu5aZt;ss{I=)uNI#EKW z%2|gH&V6YRi^8@$TgP+ebzD8^06RtJUZNb`3VY$C|CN6MbEAgp0nspP=RuiQ}?8+7)YJ z0ZGk)Ow`*PQMz|-r|g02h$4h{VJJDWk#QQ2`D?DE<|QVn7lpd-sE#PFqA{qWmH-Vj z2g7bjrU#>8E=Jxt9Dq8rg)7*SlvJg{<5+-(FdTn*RaknzzJluns_J@Sp3Gb`EMKQD zEF&31$1>>Xoy$4&B;YkH7UwdU?28(M4g-Rk!(;Vg-qtP@gobT*@}_?E6*-AW6B zH3)x<7*zDQXub7`>PWIJwk%92hsbDha>Wu88+ztUTOThvWq-oD(Kdf?-N9XCB~#~z z)#;*uL2w>gnN6;S+J2%su~z9e1W-Ddg$)rn`h!lq?J+B<dp+A{T=k$eesFywmOUUCQO0{M-C9L%k2WT0CgrRW8N&+3E2!0QC)fr zpI`8d!aC7ir~$B!6gt8Y=4>I9v@#nZNPu|#!^u| z!{3OOh7WaS-I>vQqf7TOcM%V!0J0AA?m+<|a%L#Lf=akHcaer$6S>?DP*)01JP`!8ZoJ5H7|{ z{lfL*P#V^P8CZ~{X<32OX`(I_8_8nztJdAS<&RToSe~{VLZ`@x5<`(NAX2Aq#SL~s z{sOKep(5kdEAKM%WsC#N$d5Ux+HBOayNW+frD4sItq3@SW5E!tDr6v2Bk_|i^Ztt* z>WI+6<^^qG^oFw}%zSsHR!+(rwT-Y-6lcnYG`iMfugZZ55I6(+(A61}O!jHsVj3qz zy=E7ZL|Cfcx`!EX_`tL1UV!WiD|MpgI4vI_m%BnxfU@fvoH`R_@I`EWVX2OEw`ew( zh88$C6AB;8Lv?>KG$cOvZnFno^@w=p^uDoRzD=RJI6EHeGz3CFI{eSh-Mre7tdu~u zAg~7iB={qb@lTpO6) z+l);LD=6R$IO}!P;Uf3~Hg%8cNO_gZ)miA`BtT0H&O(20t_5+^!HVtT47VCjekI=C zCP&WTXQBdqzgZRI6z4pr6%p(@|W+30tk`OrWLP<4#yd$T3zYaCmhH zVL|O+xhj90OVGIynuD$z|WaVSV=2K z{PvI`p#?Y7g$bV%w&}=3b);6vPa9p#Gqb@Br!#+K&I^f4+0}PfKl}Rj^Moy}5x-wF zv)g}Qi=L5#;#xAj4)$Va;eU>&6C%g86;f-Org5yUF~xxiS@Ou9Zad=ebACG_QWw+J zX7jO>g>Nypl_`;_EZ-q@cBu43-_;J*G7~s^@_oT-EjU15C2$~z)aZ6@=iY$weP|6* z0@r_zHH2xxPd8`Dfs@uTr!3iB!k@243Md{^c5w|stonik<2)ROmDgIOm93)x{mgrS z%E;`11^uuJoQxZOz+443NO19D2*)o}Zzt?RSh;16Yb`XKTs4#N5jc$>;{)ufgpH0?-iPx>MF=q%WHQB z-_GQ@k2Xe`APyY8maP?>`d|iU$f4Z2^EgCx;z=hg&hUdN9X&g?TWf>kKG`LqIoW1H zz8wibuC9%hmJJpjJhWmjIXp6~k)4zM!8-JOIVyP`tA=I~==dVcE>HB?Vc!bw?bLs( z9Ly7Yo5j$RUmPb9!D^s%RI{7--WJ!X2QaqeTA|98c`Hy~tWtHN( zum%8XVkFKl@2*V7;_)wa>v{fhgwB89k2>mf88%gP#RMnROUewJhSqoI3ZPCzvM9Z* zID=S~|C0RaZS2fOm`=uYh?=PkO z=YLU`2@+sUpbv@`xDnj@I;U1Cu;3S&{{Q{gzyIy#9Dpq-c#V<+-_lZ@aJqjWCd&!H zEuHSFJn#YPRtxzprpSQ_a3jrXfY|F2aY#b37y{F*{{Peaj_HQ+*>9dX5KM(~8lfg= z1E?$LD2*(7>lbhD4@|ehom)(7roBo9S7O4KNNOdOVod1GOD@K0{K7O&tkZ;LUaViC z8*u~n5Z}cYdxA_}7p-C*m~MY{pWI?%)5O?ZhMZHwx>TqIrZYiY)wV8b6+bYYSg1lJ zw_^5?i9SJuO}4BISq`W7y_fPG*(u~4BI zJk|^&`A|Zd4JxJKOtmneLN8t#9-wZ~@4bckCv8{TTjy$$$gz4vB&tbVsP^o#HAZiYg8xa(WPR(yPMrS1qeYrMv0<~qFz=yK8Hrm!0 zw};XySL{azf?|)6Ue15`pCkD>?f%!8PRATP710Q!JCP6F=Q;u-ZiTiOrt_*|OHkHS zYceP!qUNXpBjsHLPnt6pAzp>@-+ujchCErK$~=V3joptl8+30$7_CrJWfoucWtI7b z96X+J^teQY!D>;0LjSsqZ&nuqSC=At>-V!5E6{^2sG_yS=p=tEmTfdknibT0)2lQd9+AB!I zo>b@>{){}MMN28zgXTgdrKF0{q6MrIZP=3xT>)D!;8Q&!?;z{+*qR6PGB^3T5E7r} zZ)aQ@T+d;3(+r+si7b<133lv`t>`m{*%lcZpw93+T!ONPlG0{v(NAxUgeNv3Vk$yD zgEKEi>a2gaHS2+*UV7@zamv0YFs25A>_ePUh8}cu{EX?WH!N$03{hIWU2P$r)%(~u z$3Uu~C}iMbsh@X{wyp{x+lcD}izpB2R!(q4Qe#V_6Te*iJ%RfBufP4erOt@W)~$(m z3#lYvLWD>z6e$uhbc@uyWl51|e571F#AzQv2Qh!dmgGUcEjj!A-yN7d_^&w^fqnXl zDU0N4b)w#Z!MnOxQ9tdd=()f_>D1aac}=xsZWy14;Y-7nMXlqfwnGFCaHpssc8Ha% z(<2cRg85X^0K&W)roZpNl+0|ZAVx;;Cu?wtP}QZU*j3FhWr1l&C=jQqP{Qt);*@+y z4Viz%jW+CA#!CPF^vjN6a-L#xrN)qI&mpu-OzN@kk`>rj%V`HBkKlB&DoZC1!I)E> zrJRgKdCGym?`KHoSlg^~aGBONWR@`PnUQtprEWG6*7zC3YJuq=J9q(4=SR=lg7ZN_ zOtEA!bV(7c{A!%~mPlZ>rpe2Q*ko8fNuz(gNhJIj>gJ&9=2LXqv7914poR@bxsV%R znj?U$+wnE^xzKw*ontPrUQVhEQbN;-tE$K^m3z)&9mhaESD1Db_OtnAKm|7lmQ-|1 z>qlxAy`w!9J9yFh8PfmksO$F%QD?=m#$YJst0;4bxuo}Q4^>u}wp2AB(q}=K)DC~; z!hwytP}h*D;)|?9_7DKXm1>~7zC&(bJK+mEp-vg$B%zomil1O-7yE2x%nM;AMDbyUDt2K(4R|C|Gk6P zjb@I^=65Hlat+;`TAN$-pp3FO6#em+-_GzLS|1-HRMj%Gy-7(Tlxwb%8orcxl6(0& z)E7`;N98A`P$#u$4XGg4Yn)+FiBhK*u+U>r`s1hbI+CvALa}ZMrTbRQ&Vzr#bQvIX z)?!`F7g1e5HTmtwU(e`vyDmuuFc-4>2(3@+Ufz)awTv+^r}^O3{pVTyv}3u~VGrpz zL~~6;mUh{kX-i@f>*2b(R5GQvU(R^Qx?WtPcy7r@EOgEY>&Xt28|91?BnMVfPm62E zSVfuEFC39mJcwPVQGhTDsYrhWkyy^(FPlzohr?bh!8)pYUMKb}JaX z6tPpluk7;664RbFh2dZ&p2`k-LhaT$G9##{pPmlP4L+YVoYO~TO+wj28Edmd4BcLW zdwK@qY8=HaG3^+qF1dfsgbg>1ytD|0Fu{l!JFlCq)#6m`pXWR=d_}!8Ip=}F&5A&3 z1lcOpHQ39PeqbE>l$5uCa>%^3ijOry-3-ay(dfO4gp}h!OZCsEA3vY-++)4WbLZA$ zR)^eDs^gNKPu<1t#e7Fr#Q2aWPh>f*3hCmh*)eh>wMc~pN)vl2MyDfT%coOQ>X zIt7paYpo;EXbc4tb00GX6_)Z%95uGX202(D+cIg zS^oCo`unRtKYqOVcz^kJ1F%RMa-k5YTYC+}Y)FFXyhF?`nO;_QPrz<&KWspiGT54D z=oPFFEf}>C{d9lORCN|fOH|+8et)?GmNlH?q?|qSNR|*ss3FD*(p39_;(P|{@!PxG z?|j~XE<=ustG4xJHVyU&I}u0xchZSphi(fpMK%G3L0xG=*bUX7v4acuU_NNCLiWSe z+Z}W2f~y4tlUjqg^IRQyjcHO2WQYH+#3@K@ZLc6-6dyAw*D{=9_(}x_K&m?}$CowtbC8#ReRKKY;p+Bg z$7c43$|WT?Au6FQHMr#Zz>=g$am@?vE+0PL-8_GOe|xoqOZfz~Yxl}scEf7sU3%IEVYAL*w@3hX>0T(>C_#`td^QOhyi>V zLKsoHNnhrVCv@9(MJBc@Ej+@ISTZDzZ-K~T2sQL|aDH=pbN}#oMz_p$R5qjAGBvf~ zi${N^K+1s5Yg(L+BX5qckZnmAJ*5-tbfc@s*N7ZDkDoVtjQjE#$F^=J?XlNdZSA7FV#)opyYvU_;8@b+;V>2+OdbHwdAH@{-9v!xzsuep})TS&)D5i}ym#NlG4S)|hD<))HX6a<6U*bWK{W zVFV=qf!rzuaRuPQtWmifGzaNl{zN+N!HqLT7fH{J{o^o zt4rbFsl-}UEI8Zmi%@{Y>CNL1#vgC!ywis zms3gE%yFb2n3g}GySTf%_}k<4<;}Z?_d5p9Ug?;dX5}PdP_)jS)!7rs66!(o_%Ef< z%O8Fpz#Sx>S}Hwor~$#ahzpuBMSKgtWnHFTgLfLi9kc-7Y1SQcvJ7Ok6s3O-{7TwK zk^?)oCv4wdU0+|m-3rnBR+3gLR5hxQx&b@9%DZ z*m20>Q<}M@%wChV(L=WAE=GUCuTc)J3_Rg_cl)q|4v6D2J;iD!rlJsP*8UJm(yk-N z1N*&au=cR|jDRvm!MDt@jjgZ9=pp-rREwc|9kMMv9y`=I@4)n?MulS32zHk`6099a zFV8YQT)g=+cI*8QR}XJ?N7oIy)2 zTsuRKYn6P^gy#!0{`T?mFFTkMrIT-SLfjB!EFNak1*S}{kn(GA-Rzi3ky5a>L>&T~ z#9$l*;8ODDCA&U01FkJcJ<>Ca-K5sZB}dXao2FqNq;a;qtlxhD*A~`BKCm0?%;8#* zL)9E3tKf&klh+qK4A+)eI}l$Z`nvkJSFEEx7|2BPUW)$#&Xm zJtnd>%SA>XGG{xm<9@y;cK~a4Lw7=mHpC2>c0;x?6apvn&KpYtblQ|VfDsL4bK_2@ zDrWKaP{i)739!}!Q?V}~^iL6nyVBuyz&oM>QAM zjxaB^T4BG%Tri9i94%E{Zp#z4ZD*GVra6PtLI7v%Oc2N1@dX_P8o962ah%`^=xxAXHH9^eZqGC{`PK*f~uzHz%9xM_$?T1 zPNIUWHFFpT#yMZWefYSAIU<89%@UgCR+=3y_=!~In^?clr6e|3+inLHbzZR@^1#o# zx#KqOBf8INbX^%YY};`2>Fv&m^4>`aVBLw=alDo_6LjQ|__Y zotuL71_~mctP$-pn|_A3DTqiC@SriWU5Hn-%Iz(Wnaa|+2+QURNk=>62?Lfrv z(4T*#z9xGK?Xrt=EsHlYk>v-Ioj}Ybt@Y?eCIYSElGD?pWbYHr zs%ripZH7#xEQ83^Mka!pOC9Psfd?mhE6smC=NTYyhTScA)jr)8M4*<%X%n>%fDt;L zLbHoYIWxlX65Jjpf-OnbUrosRpNflBOW>~Lv-NLXGLfr|Or#Prz`$25vMF|^Rlf(D z<5M4DeSzv~D-*$%B=XK)mZfPPUSi<`@N$eH$U4OBWg_bBNn&@Us47I3i_j2etVw?* zBmjRMygfnW)HNq{#M{af(Zo%wICqu?<$z@SDr}pA$N;x2pyOP*Xk$m&EaD3GNfnxI zT?F6CL?ljZ0YC7~RtOA)v{|ti!OuK|mq&ejm`E8(tD<%ZZ5M0|(7H_tC?&46j-n!F@d>M}YXbbNpO{l35! zCZfZ)8hr2s&W8NnQwN&F4KiB&fqC{bSlgHgKJwkSOwjV?Q-q9Lr;l#cGqx2W^XpvRFaO8ewKZ3n z8{2<$BB^z)IxhxH>>9wt*n~W}be&L1fC6(;`S)k7ZExEQu=R~onunRfcw@CC^<}lX zSLsr#CI+g-SZi%e78ly*>No`0DNH`Neh1%Ur)X#pRcY&q-zd#8DS<1L?WQJIVugDaNs%PK9ua>;sR!oR|3r1xRi7ii zAH}l~(I`@hnBiW`A4;KoQCRw;z}bWo6(1cQ{6Gu zTr83-#gL#VuBFyV$PZmM$wWRNo9++rEj`$?MP-k6^dW%Yz0_S}RT|zf1`O=6)_DWH z&&4Xyq~d;=1cQG~w!t#IR;4r&XRmW<2?%i34*f?t5jO>i9mAwu) z-8s?4t#qqSwyMF-q~L-8bOc;;nxxq4v>~;>Ivp5|CwTI*w$; z!mS0Xr%sorN&(kcI_NI~%btm2;YZ<{tYin_K7&EVGyO(cOqlOI}Utn@!nI{aN z?KYG+pfWW#H3h-<0Nsxrd0Bi^c9n9$_Z>3w6VJjsWXT7jt zG^rLvaI~a!irFI~oYy};d$ve#J;_!8DTYp7qO`)nm%b}u!2nF)G%z;54q?up!0yqxZ|p7mFn0#JI|mdZy*0fn|2B8>?MNhNN6mQ*!!tkz|S; zXx0_ya<@Gj1n>e6>qb-t@yZ6Ku$PM@%28bUP=OcA~n?ARo>E4{I z+OzCEJAQp`!Q0kgLn1uAYEo6<5SN)`m+M5srH_1chpkY(ku?$lT#TLL*^^Q8W)6RN zr&W2TY@-W}Ii{YAcA6D-K>M*Jt7D$uG`OclqB+GRHnyl4Uzs~>yVerUxM1!7oJ$)1 zX_08r8TiP8%N8t$`uf6}Cl{L}Qfo}nARW{q(X_V_0Z;Tc^jI_dl1*zi!=-195NV5t zS|nQYhUMYWv{D-hH;r=uTKIDSYM6f~4(Xy6iPlR8mI?@jdM6iM0cvT==T3(8qNlC^ zo?ww=Dwa}lbg-_b*4A|gj)tO!!C1siao@XjqIHfL4ZEUP$BMcZhpB@sABZ^ohQghb zWeVDzggR7beHfx`z$cD1axiO^bI0bTVkgUX%>1~A^W&xLB(t!7KI)!2Vz4ve^d z=%-d05AiuiTr?Lei|bNts_DYfcGl_xBP1UuJ8y|xvITX;J;12 zYFXM>aefw}?HVM&wZjVpsHlH51MN-oI)6H=RkHQGD_$GP7>HI8AKB>haMd<)2+si( zbYWSx(rEa2U&$A!r4O3osz)xcc1`y=ZyS|inQ+k!c1Z*k6r7Y*(G}Zp(y?%qRGJf2 zUM?i!i9YF&Rf^JsVKLUQTG+rTq-Ai^M>wj(GU1e}e7A&`AAF$ctweuoTQ?qx}rTZi>xbO}QPDe+~nJq$p>`cM$H|#ua?o63Bi|5 zv`&IUpC|BdvTp1440TtK+u=M>hrxwmEVmEl7!5GpmD&2Dzd zaK0A@a8djG{@rHamdU4*wusN+&PFUQ1eUzSKn``&yq~jJ-(AY0zb#TNegSeF(-ewOupEIceU1-puILg zPlO$IzNJ=GJus^K+sxd$>sL8VQYQo0qg06+k>BV;YjLJ+n89_qT0l2K;kae^3b6>| zM+9Cp-YMg&*m-y7K1;VwL)ess>qhPs-+b#KlJ&R;8xfu!m?Hd}T-`bkqC_gw6{$L$ zDqy$uY!CqEun2#)HU)l51@xoE=+Z9i!#NuSgC_QpfjG$ZHcj*F^LEPw1R$!-i7s}O zqO@*?T~R9H?-SwL*6iIf0TH_ZbGrmv4S=+xF)IzoBY2ZU&1vcOIlOgREKRpqS%)tk z#-&@;I)ufBa=83-2XE75>&zg>w?|zB!L#l)`7wqI*|UG9yyZFH;JeiVb}2T+Fq|76 zSR^W7xeDt&+VIiEc_+=uVkH(9Vn+bq>OG&}(pZFx_)TnY*0dG6|E_O=$xc zk^}pFeHo@0*He==N}JxpyUgD*2@NMhBi;%{w6Y4(w5uwF%A`1TdvpG8;XQP0<-+H@ z^Tk4cq29sj0DOm-X8vY%mjztu@zmIju`OxT#^HZ3CJ*aFOn^~#Q&_lI#H?}c6k@{S zd(hc;6YzN!!AGt2ymIFuCv;;!Y#K_ zYZBe02L@rB$_-d5Fq7M}gX>%$nQ$bsC0M7Tp&(X@L&O*&X`eSa7Gk^?rx$C+q4qdv zSq6Xgn8d(}Pxd`Yzz4R}Z>=lGGb!4tNAo#nqhS}*NCtl*b6Hp0${kj29cz0_6`d@b zy^U2hq|6+v0$P#z%))(oaFu+TCeQbzqAi4<(Po6MIPGA&$b1IsK0UZfJ|iPG_Ojyo zMTFAua3wlbHHnejywYZ$9$Y0K3}4m)>>hs$;?+@fH`T*l;}0sdIUnwA`fZu!W*q|D znKr#@9BgHthA-&2l?WE6+xKpA=0xAmOA$_5BeWizPQ4@Mb;|G zj!L2xAp<$?UG%L<^?FYCwl{pMl0Jyg)$d7teA>$gHYE6IO% zekVg+`xw~<2)7eEr!;RJcwqcih}Q!7W}yqUl~kIF!kRDFe9WVlxM95V%cYkO4wk_m zoChnE%OIfh5>?`K3YqK1tEIZ3>BG$Es;k&U;ajc1JiBb8=}dYz80W zLP*Xg4ZvwV3xp-8Zl-7ZZmoE3$25O{2w7`uc72+@01&IDO$!@3&-TwEi^Kygs+}{R zR08s7o%yXev^Wm?)_TrabFy^zaDvqhuUIuoV#}BsbOJXrsK(Zs&5t6hR3qdi~*|DJ##FiO5Tf^%eQ#{ zXhu32#XNAYRM!z%L1l7JE-E*Vsvb}yuN2cOV2)yK)FN4e)1!{08~$47Xg08f>^U7* z3Ymb(yK|)^Nx665Nu^&pDV=|KZl?CR`zG4QZYhd~$w# z^vmnBMahmK)o40A3rG^gbd!M6rDW4e$$$3_pNNjF8aA_~a{jWrLl&nr~UDj$gjMSTSw5Id<8xBi1HU z3<+>!gdRnpWbE>^lKX%B_~P>X74-V_+0~Py^Yhasgm^BIdcR0C1~FQ<0j6m9;1nVY zgyP$#8T{q)^yx24xIALbY-1+~ken>55i zvdK{B9y%QO_E2J#gb=X_D?}Cc5w{Kp+YP|X0FX(>&1c))lh7`cv5HraDYY@G<(%o1 z8q?UZCDMU!rH$Nk9xf9zJ0Ti{m3B#6CODP#RtJY@vd^ao{YcDZUZz)awrR*l}w1RNdeFF*p%^y2h$tg~-TR z+UPL==`?^v#mxLB;ILjypjqcra0y_{S#g3O%~xJj>k)seZ=j;t-Otx&FaGxO?ELk~ z5>nefqH)dud8Hcgd2C@R1lt1f&4wYN-wC-)iBv9*q+Em$EilpCHQ$J8>lA;hQF?m$ z=Hl$-3OqY9fNRu4LIX-fFv(`JoN7rjTHZ=>dL!RDDpmzys`Hxpv~F=Pv4@_7ou2A6 z=ZHIc^9X+^TX9O3Nn`w&-bk*U6WT)7tu2~_Rty;4YoD~P7>pzZBooK z%Kd+c$seqF`D#=2^4*e>W8$N_N37=^M}&1_68TDTxc>eqf3W1!vu!gazTaACI{v4^ zu0yG4!}-`TbDS{{rE>??{Oj@2<9<&MXY5I=my5q`r%?EnlQ*%#9F+rWzCJ(O0T%J(g2i)qwUE8DW??O!8I?APB(v%|9`)?y(ECfPMSMgiXux|ZA`2x?6U0# z)_nf-je~>#5TB!oq+)HH z*jc6f5f0s=i@&{oq=NR=tS>-91wJapmWO7S3Bpmtp!d=I57vBf`sDc|ZxIxvcbI>H z7KhJOHKn>6v6QB9)Cbpm^4vUX%|5EaEgb_(!Uje!R#oHq|+HD#J$9;0LV!A#FK*wQWAf z?V?|<_XZbXhA}QmPNjrYOqK>aVPSt5x_3YQHSzDydv5=E#FFgaDJ3O9InNisFq#es z_jJ|aM6#SH~pFq6+lcQXS-&#nOoXRLwvA zZU2r)nLp_FE-0y6(_zqoH{gFii@>_O2;^Zy57O1)1^=J6D{XEvSJwaNmiFbNNgPN` zw#qWhoG&h^C52oG+;20vO_-A_xsl(HBLn4(e96|Tw& zR#32_s=`4c<6&)@vqSp{io4x*R`;Eez~9dnMAz!dk2SG|3~kZf&M$xI+l&^KS@m-D z8RzIVe`gpOq}q6I2^xq^OO;@o)SPhKC-fF7Y<)7Pq|@#2mW_mJg7lX zsGDWy0%j0fajueUWCB?ony@y(jR0kVRyN_O=kBXZo$l{%p_jhhkKSP?K~@Z)p_aH+ zr-VP6j1NY^gQI`eUF)A=)6MNzSbV+p*x(qdtyE#tLgP(VXP89qSiuFU=dI~xlc zLF*$?OP<>l6)7@c6NMP73gW5N?5lI#2Czu3)0_lXPi$2brYuQFE|9@5Z^MU{0k_l@ zhHDZLw_$S5JFdDSb2D5M26pbLFVm~Alx;gWyT9xg^yF;^~!2+l-BcDWgLbNw~-j(wXl7M6UjDFkjOVxbK=btFp-)}({> zrccZs;Cfv9jZ5i#vs$0D?#1-uKX~JE`q}reQa5}(V@TjEQmEc?sE?rnhmArqT_OGP zJ*!#$57W)n?CTQF=O;+{gU;@|mkf46t!IytyxL5;L>@!3-y4tlcKMm&Q?tkkh zV|i=2Z|8rto8>2r?A68o{_+2O8d~b7?_kv)xPv&i*HAc}MjLKuTPoiyK;^d|s=eSp z-~9l3cQBit?4AF4w$UTab3_ND39=VO(S<8UMR?pWWl%ne>l{!QaeulcVpb5Jgu_ta z5ITR208c=$zca{*;=VPbRZ~y>fd00BZN^U8=em*C`y4YgI4HJp%0SXKfd#hQnhMZ( z)g{$EjliVEw|j^$W0~&xo zee3xD_y!h9teMoh@OgJWI51Kla|T-$p>%?YjTHBb)v_a=m*>+dCw5#OO>s2#4>xN#{R}xPxIrN| zj{^y`SRkroKxx@6v%RCZ{43orKg|~#8OY~&maCs&p}C}MV97~QV&x?S#o(hp-tBy| z>%C`xa3r)U&AC`YQa+Fb1&Lk>*5^Wo!G%4!7!9YyI{qPpyn@j+Q5<|B_NLGDGTw(;%-OtC!^RY%gX zYX^Q|5{!J(aCBvZebTV~9f1Mn{^W9Uarm!)jh;}RA>u%Qr4|KB!`~9AMGiw9fN(C6DxE`HqB9r5+?9@^h@NDvax)q}0{xy&f1x4g6ha@En z=PoKPKwCq9ioB60R~vrR408a&QE#6_kgMG;E!qhjoA--DLfI4j{9VhU8Lfl+`D!f8{% zb2awrJ-0)YPeuQqBVL|gjhD?7H5f&IwjMMBey|Pjpqy+TzY%*EuR|S7jxNSyfxSqW z0}A+dlNw(NN+Ju>5F+3@VtKmJ^Yil^gG7+X{0Nb(<}ww!QRQf5FPnNQb^136VR_t2 zr*K*N2*;N=MI>6Bb}NZ5ldaL(cV;#N+-x*fC`FhA0TE;%n%3itE0CGUm8jrV1q6Q5$_>N^00 zF|uIPf}aGG2^h;$otu|%C#Q!e7h54#rE)Hz2~{Mhiwykk9D~u8Up`7_`xtS5dbHgf z;m<3`J;*~A+D52q>l`~vps7uNb%+up{&u(>BG^OC39PdeQ26YX&KgXus%8u*X~*ng z6Hm8;%TjQy1fQvt61<}z8`sT;IUwsgM=-DU&Zm>htq`SXA(Dy$9D0&Y8=rws1 zR^qn}TRiF3KvXLS-L+1r5pZe*ucqbJf2$hITSv?Py?880CX@_&3o|D6B9l`ARvF6=7 ~bMf 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

    T0l9v%9U1qZrm+PEdKY4b3cG{?;%GgLA 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≫7J!gaG5E}m*czVYf(wHW+D>R@Qf46Te`k}A75 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ነ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%0ADUdnNUH*n(DMa1>x%J$B}*|3XE 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∨~R?G>jK{A>7A#ygkw^oa>j)6-p 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%0AywdLyAp%2{KC@L4XqgR1 zP7-d|k!^dm4pzq6+1JM z+Txt>AZIKJA3xva@vif^wiTg&iskqcj!#ppKrdA&aNJsy7~9e2etUU2)$Vj}yBuxQ zVX6`C4t_~6$;kQIqDq{CbsY2OZ#o24!&6{&;xVv#T7&~P?!l>S4X=D{cQGhDOgi;8 zx^yMXhr4+Lc>)DrgdO_Cu6H`qtHS$uJUjfeC_9W+isQmAucsQ`?NOnB?!cPa1z784 zj)m$_);hZiLfJ>7xt68=^!Z$FKW=6ZE}x%qwK|!eb9aq*TnNd+foXLY68nLVfiKU_ zH&h!J^uRG zAOAhrl($zGpHA78FQ2m9mhgt8H8_*b_PGwP&gc%QVBp95sCoASrNfl=Ie--gZw;EZ z1x{cIwP?1S1<&dT&cn){1@`AKr3(&VU1$!1Bze&Ds-!Os@+V<`m)Izy6a$a2z+MKo z9#<$)pexz2Bv`f(;WSq~@>Yt^S`ReIf*XXL(j*7CFi61`THrmt^O756Af^J1#3{Fa za4Ease*QFd%zp?Q;Ny)jnZw#FVx@D+W$;XA8XW(zI1T)8$@o?h|iXe3EXznkz%*pFf~=|02Yt6 zCSCA`t8UpFsdC3_6;ZXW%~7NJe)DDO+VKF_8dHS`)=DFF)m9~6GvpcEVTRHkkf5jK ziuIc)rs{*Mu7oZ_(t*QkL+%Zm3lDiTv}wV;|2%bM^2V5dTPxjhG%U8O394BIlGzc= z*#YR-azAZdkn7EvU5~1a8b-`RM`>#GBEhnilHspTC93GDa4%)!rm@1#9bqNlyHuv)Zl?Myl4PbAv2n zQa$_zl)h(~S1T2-fBM*ZZ*Qka{hNKH5Q1WJ9AXw_FT4|@WBezxvfmK$Wph$Mu{W0EN76~@*dV%v#<8)-2ptss_GT{a z=#4@Fr9$-OBo2gnD>I!XM3Od~ZgkA3&+c!nThHrCfA{IXtXIdIo1aIKO`)sx8Tuo3&ll26hbtV<|~iGBbiqMv7DUMp~E) zO4bg5JEXOf|HwcYPRFby(qY$# z)v0*{ejE{v@Xq;QrJJ{wmzNK&(M$_qXyCyc!l|Z?swu1#%SGwX7`&T6MBvm$ll3(Aie9 z@>$?>@#MqDGmcpd;79buuw{CZ;4$F+J*Pm?gxcp4_rzHS`pMTV#!1aSy`k> ze~Mp5mq+KXhXqI6IfIVtWP)@C_CrsWFerqGk8J_2NA26c+V$t~V(cw11seeMszB33 z1G3MtyHt%GsYHB@+i`t3kpZ3rn>u%@iwAZAbKo&Ds*pyC)rT;)-mN7Y@7C<4h4m7U zvZ_qBD-lH%e)J0Om5r}YkAd1_MJW|Sf9#YcmsMc4mG?k^MT7gMuirPG@qN8jSW&M) z#96aT(b3YV@l>1!F`flMhtRp`vi}Vx5ZJaIfLBM%I)WMNz@!O}Lr|HEoFDfx`1Pa$ zani|@8?bIew60icFZjq)R+aLoGuHuRUn&_EwfFlzdf}tG9#{eCHCT;OwMyz}e`Ev1 zFe*BqEZ=QD0{oqUvjxBwzObwsE^c(v78EX5827o&9Zx@AUp$=SWT4}&Sj;s!uWS#w zha^FpyUnTKi_d{hy*`NGOR^NwA}he35Gx&pl98bsFqs>5t38wYEw-%+beAQc=l`@3F&U;9hP53;QD8BAzx!$=$ z)>!9YBN!}bdH{vhC3}}TBAKiIEj9lFI=9}q4=QV8Qknq@bao9kb8>v^+?m1n2MYXneaT$vnp8QdBhT*KREZ=EjAfd)YI zwHXat-L>MXDHdTx1k)*Cf1GC_r*!L`3-B^$fJ^M#UVY?S)~RAOHw#ubdgS@_pnkns zB!1mlW~ilimUmpb`mTvKeXeoN?5Eo^(xU_n5y>MP#n7mS4Vdq2;+qh5f}L}%uYpso z$0HWB+4O8-wFX8@5a$Mz?Ng{(NrfgQ%CmxT98H=Fp_2ZoddIIG24XFB#{p$Slm< z-o4u_Yclm>6@J=nf6UmI)JrV~p_J+?#Xh_D^Hy&cYC^rv)i%m-R#rG#Wel%ZG*Ws2 zqmBr~vsSN`DYCpywXoD$dDQ|opg;)FfX@hhJxAf2m^FHFvk*%>8#N}m?vUbyR7rco zCKO7DicJdGJd`Y+jQ+OYUM)P?_-a-o;7KP`ELIxFsu|EDe;Bm_@GZYS7&u~fscONW zuidv)@_dfaF+mvR$2C}RimC#tw;7w4yNAug!mHq~R!vI)5eZZaIY!sWH0q7gQ@?dt zhuX}r`e9)c$`_mXf*Dyn0~U#d7)xD<79*Q&I9bb_&E54i8*r~O%Mz3hYkDH5y z>Fj@>4#P)&>AOU$jQtZNAR^huty(gm3)G<*d~t5=-d~t9t;gYS|haO`MzV z<@RE?GCm1~4`?I%Q#MT52+*ZyKx?IrMe4cuw6G7)t25aOt}J_#6dDNvHmSWFoTQV1oeu5%4I^Y|e*=?ae}M&es?p z;XbB(~I5^nCZ{S|B*eqKsrMX_ZL#Y1sq7SF1hye_)*s zz8BS+VTm})A7o{**s#oU&(LtQT^HpW%Vvry3ZNc2+$aH_*g+~Rh@u&F^*G>@$Ngqy zbO^zu%HDuoARh68K~dDFAlUOjay-+E4pK4|1PB^9V@8J+}A+vaJre?M*7bqn1=AVQI{ z$f|Yjj_o&Wse&D0b4;V#8+_i2&Gi=U{PCB~ew}HT(^L*^uyLfX057cT=m~ih$gqxs z#pU*T^UsxpMw(_FrSOA>d)dHl?b!o20RZbT<5*KDo?6wcOLralH46>!e=9(_# zA|GYCseyB%-kQ>ax6Xp8Vt|hjZS(+HA8hhMWKj}1 zVjmGaX@Eg6Hrv3Sf0O{uPp~Z{NU<4gojXqWr`R{W%1}g6m0Dx5*9NLl_=pXgOODPbba=F6W#0~=`(8~| z696l|Qmi)`Fe%NK3gE4CLwLWveY(6`sPO!~c?waO5FO=Pq*YxttxIjeOQ49}M!L%{ z=HFi~)O-HkJb)3X6?NXQrCse>B_8m1Fpd_=Ncres{#PWU{pSAISYg3F+nHxA zwL~RiD6BY{{j%Ux+x_1ZFu){rD=2GV{;41)rIbdn;W+NTA(A|DJ zNhqB)gyNN=&MLy20{B#sVnbMxnv!Wl`SWjwK)vgycMoUn3!#V|1i^cZPANSV+}oz% zEWo0pe?~0d4g=fs>2cAa+1o*=L}!RPW#GbUdP9^*(MKbD3~Ja7_w69A_IHa8dVYuz z%2V>CbgaZw?14P4YjG_raP?7h%5U@E#of)#@?N>$k3s{_@!rH+>$W#mcl-M{<@eNiKaAZ?Jf`N=< za8vEf00>UA++Hqnloyj4o5D8k>=6--`y`1lUg@z{Oh$vuugKm9#bvi%2t|Ibs#pQEC(?d_+V zr{pqE+&6e@r%d7Y*P;t=1HmEp=+7tvXg;f*owQAIG#^ zcoRD}Bw#9l_X@|XHZ@H)R+DH(G#jcrd6{lD4~uTWXNJTR2$z-9Ubcx^*#@7AvN>u* zh*2-xABMEMzCNa-cH%~2Z`3vokVCD5Ewp>w-ms$Ml>PI=Z=7ImlacRysA=D+e;y_n zAlM^JQi*)9{x4>)cE2sVB04$<3g}o0NrTX`(^D|`_BEuUK_|WWZ-dy~;;)M$<V0jtC z;6mwSEHUa(cy&^T!v4~qOh%D2e=}`jtHMKr)X=19N~bj1K{pQ!cFPjpbMwCD;W!lG z@NAY6ldpxXD6GL6N;$Y&#jJL}oYlOVabwWD`sUqf&8w$hF)f;?p(F4)TLMq;*E&H48)^S_+`;8f>+`GE;#X|`I@0CHW+;<|{jPzg~46GI*K zZ-kd$TrWhDZ!H%V|EVgn%d{vpAZ1{&E)VL>sOb_WOr_g1OGljP{W^~R_vbS2#nZo7@AJ7^kQ>k| zW!Om&D^Wp0c(~Uzk1Nb@6JP-Ug6p1X9SNm}*hzrEf07Jfe*tc4+}SAL-e*6-!2XE= zz5@FHdm;kILFDE3diQt=jQr*oO&;2H*#gYzSgHN+cAps^YVBx!F-w&B6HgxBJbqGp{$s8NEPggE9sntYH_o=BjDV z7x?n1q0PZKfBsy2Bl^a?G~Q?xf!l>bY>zT}J_*k;^A*nM`M|;a?cL-4)9s>K?6;rY z$;2CV8-kJ8zNtG3^U6jEAUSFa@NE6lQUd$dI#wJgsVQHB27m9xI&b-+qVu9+aJckr zec_wLH?~74r66#dVl8+lh@WCmGrS=#Wpq7ru>Ennf4#ptzVORw%%AP`BOj+S{1=OG z+Vm5Lv+EiF7dm{bM@m>5!}5(%ohk}jY|JP)sh1Io3Obd%-kP%8-WU019RLNj{ zHWQjQe>t8u-zT1F+vL_lOol3i*uhy8z?BdJVvLP$B-jqyOZV|H+X$OfROJ&sWuqyM z;?u~}Mh2}%=jojH=G{uF^(t=37q+ji?|wbgc5TRA z8eT2fmnZqI3Sc3)wbm}V(WO6ZKP-IyaKyF^eMW>v{oCOFNX#xB4$hC>h;aP&tKgGdSf2Tj6IqL^sAojZs+*%rKw(kQS@V1pKA9})I79CoR5_3EO-@X=>i z6DW$Ay)(BR5)9|9*dAxqrR3ru0KXGGe+8FA_5qR`wgsoF_~w!=*+GSdyp%e}Mc9w; ziZ!g_Q3M{OY7f<=LjpPrRF1m5>>&ED`0+d8^MpZnVp3%}VUueGPvc%p_#Ldu_Vh0> z02{mo7Y*Gt!4Z@RJ1fx&d(y(GE;k|J`HQ`qZ%`UYDh`ThB$p%nTrDaF>Lk~1f6V^^ z14yg^KS5JxSM8FwFaO~Iyn14!qaDYH!uH*6u z9#`RF!_Wv5{mdnlnjzE#YXcJ*i``m_c7Jzsk)=o$GP!xtV0&qz!jgF1;v01= z#pZr&?=P|pg#{@Jv-sh9t4^#5f2>ogF?k#iS>Azh2=^c7?Ip&*?Dif~kUmOabvBbN z=uFqg>L<@Q>9_Cy_3`bSGw-234?y6O z4c6cHUKIp1(K5I?yXPSZ%bTFPn>TN+=hX#9&{%yEr{Qn`D@jK&E*KMoe}FH_K)l^!>Tl#`rcN1|8Q@(lG3TRMwnd3|tA zu&<@$z~62nN49l3**;>I?(nZ;Wf*4J^a%ysbxQZy%BV{Z&wY%ae{lEPhtqBO5xJLc zTC!ub5;B9$lr{92rji6~cWJ}%w?ED|=T0}#JoX}1Ky14&BPQt9Y$PO>q1*tS@9*E8 ziE6w_1Nx=<+OfKWb@d@_Ol5A>7iEK=qQ1c*6ZY!u=`R-#$RVm_(Tj%3O?+a89eY?Q zmip{#HOoc5yS>rVe_8wkF04^wk&zK4v0|@{5!ec4$tu-L_R1L_fv-NayI;;kZ^pJ} z2UnRvwAkQ--AHE2?2m0Wx7OW1{?%^J#KmW3xV^6yX1I~1SywgZGJ_VYOP|ccq&K%? z3VzVMZST+i+$>IQTw>#^Rv9Xn6RVIXhrxK=T=t6$0D2Aof0ogCT{3d0hBdu>>H)01 zxusj;?a3wZI~cmw$y{xhEdw)^idCCV^28-e$KM|JAMf-G+5WKQ9Ha$xU1 zKoKMu)u^twf8gSo>;Kvf6$HXkTSMlWyiEF=;HGJ&#$h` zsSWO*0OO!Sp~3yffp69o`!r+-X@~zuOj;z%VW#GPU;g)rSr&f;X3czoV2&~PJj?Kv zp+hExAt|kD0}%Md>p!2=-0umnhfNaca=5gZR=IGT)KN8Bm}%PA?8I%}Q{Jkv{>Bjyq8SoOqs z_`=U6t$+8{0-a4PBR5hJQ$(iI(&AJ;Jc_Imf3uFjC*>ACU1<}<+6=)GTg)!!$TG^X zlGFKQR#gfJd}>O{(>+}wFXMDQPdha;A4Ut7fQ?XN4eN(Lb7BSOrxTuF(|$A!1||yv z&7_9iom)&H)~!$c>gQ(*UVQi73c-qTwuYDkD5V=X#noZ2<>+Erzp?`O9Dny2H-XAJ ze=9{QmbeDkj9i(@n{5HnUM1jhp?^C4mGcpI8X2=m0GWsuXQ+1QwE`CDl>KkFjMnQ{ zdw>gLqd^(fjhSj;NhA10orUSdbrlW;k7###M8mQzGG_sQ&cm{3VqvJ;)H!-v0b|B? zr$^+iVdx=39%eRw!>oJ4>emK$p|W7;e=wUAT%D=f?0jY@SX-C%VX}KY zB1|%yoH(|BYfh8Ntl!8US(RPb*1$VGVzD-sq?vaultTgP0L&eqxyF?J+ECk_9+5fL zI6Rr*g^4N9?9X5Vw0LL!-WqqGM-)g(p-9Dzr$c)(V*WngQ6I91 zqHQ1`4USm?J6B7`7hjd*d;s2Kr^lhRGqw?w7iJBK0tsGo$Fk3vHX?ECPLJqjmEc$v zUa`AaM>63=W#`%Vx35aF5qPIZG;n^<+7gv5lK2?c`7C65iCFcGPrTD325e;TI|pVd zPRyYfYK3MA&2^Jk{oaniyF6lzf5+?{;dKr^X=Yg>%++@gfV56)vHLtCZ~1)%ZTB-s ztPr2R&}jP!0c=;ToDW9pd5?IS`aHy6KVK8+pg)hl|NRQ|_~#EhH^8%#y*X=3G;zSs zSA~Hx%`qBzE2Cp-yM1#~*O;&1*+w@?Qs-QWu}zC5wUKqj*@(3+UlBjUf7^ZVlXHd+ zv=-DV;zMRgmf8;H0wj6^{zi50)Uz;em#~KfnN+?=Sl%Za}C5l(A>~GZBj;2cp|(N|}qiHF1LPo4LSF zPq7*VXBt8Z3J#NICx&F%&T(ti5AQHLcRL6@=q{UdTHkz$tjY;0f5?Khv9;wh`Dgfj zvu{02$pYRrW}nc>p?cN?g>7$aqOb|ihoF74*Wxo+5e=&v5AoOx)<8U%ud_XF8JZ*f zzS-CAE!e_LEaK6UqqZsd7PIMsdWU>B0avl-N6HajzzTXynH- z18e+!^PeU%Ew>aumF4+Ciy^^Oby~JG-OAL1&AIuoZ}w?|`G?^H7&?w#4DdBfGlRoz zJ+2=@KcVlm_QTepnU_Vj+0IPO>0kglZ|&4?KDXa|;8PrSe_(s_ao-xi(}dQXD5zSL zK3awlO~WyY)MUH)7W?HWo?DAE`1A9XA0PSi_f&uU!_PaCncN%XWpFMuhGMa7Y%v9! zkA3I1cG;1@p1Z;iMF-iD#)GMXE@QpnR>ZM$l*4|@Y0J5s7uoO#4Xf(hgdxx1GdZzd zS7hHc1C~>re_uwVKCrl5*u3qnnk>YM3*E5!ToML~$7E}jtwldCaOM#jr)j7!tXvA> zSV~Mfas`0`^ia1o?K8t?zQ9hkj^3<`!9(>n7W5w7L{l}pFRo>u!G71?-?!6qpT9(B zfL~%``{KZ4AsAuPumw`9%BF_fuKdhEnlH|oXNFBIf5W=biov4MW*xFiL@bn`Ue7dVRO|yX%Bvg6|yg+Ea^RW$5X}!l!x@*3of~ zo^%&Hx%8D9Mm)3-lX}iIhVm^xV4&TrZw&3=xgH@6PQO)a+nL{k#ZuADx zEmHD?5NgF&Xz^4`>%0Y!xe@YtjLX}NZ$s4Re|r-T(`7sR!8Uf(Xts*ewI)1Tvix8wEYn93c!^3C6d8y%^T247O}Pc!w}atks-6eAo1>gFa)e@Z=o_V!7`gOxgYc z_>@bM5m==gmIS_3I#jaPni6E{GHxE!;R0Ka9gmD)r$Ghc$R|b|gReKq-gH@>`HSp( ze>V-#Y-*ZH?iw5%DBQR6jK#@rol!M^-49+{W-TrQu2fxjEFj{2b58o!Hb5@pQgH@_Jd*l;G+F0iPLRYXU2Ir92vcorzg#xJkG`rG#_ z@H1Rk_=XD$C%Uk3uq0|+jnk43Nz!B#f4i$?MWmJDN-{sYiBO1q#BO;9|1 zw6_{9To`t5N~Q804AOpis{&{oq+QS^*$BWH^Nb+|W`l=N1*$WOxV}C^AFgnWe|AA@ zGctS}hJ>kD69dk$?J*^cMBLJ00UC#B7c>lYv2fKbdlwnSZ@n69wOEJNv3@E6G~DIR zqsyXYTal-qe*b%q?x#P0RI*WFl&euz&;tDd6=TNB03C?BY83F}&sS%K+I)!&-3F}5 z`sIB50%XV5J>>WgS61z9SiIrHe=cHQA!lP|(wQT>h{XzJRe3F)g9QcAz7FJKQ`B9^ zmZkfui?EI$_uhc>>+mvq@3y;*qKH54hR#6}$ad!=cAo&~;%Bl|tp;mX9ZCTG*WJ)? z?1!#j@bm@W8moeBetlX`OIwn4y8a*4j0>2JsYfTwYGFyzF^e>5urs z!cn#iZEVNTRKfUKv;nr$u@UrAC-&d&E`py^o!v!a#oiLjz^n%F z&x@@ z8o=n5IV*>^l@>5(URdBrI;L*rw!EnM{Za#Hqe&G3H&3vre}!%PJOr+XTkXTG!=&ym zbqe8DU|5Zdu;xu&sjRBlKqd0EKm^Z0#uBhxyT+A&uq3{dlcBA z02!lQosVF765{d{%FTVhzQ`#MXE9S~)95v@Gz3&!#;;jwnl5QIf)8!{<94>|ON@c_ zba+*roJ`MpGbXa5vIXg#D(kCLmf3+Z*lmhOf@+-LfAZ>wP(RMWM)GjXBlWGPe%ivl zXVAm&gI!OU-YM)v)iHJUTnc^Ky7k&G7l6+`PmoMrY_h*4o4$2y0&Gh&zzeoQg#USo z*(>yW6$n@jMNO)qmC`5wfwD+j5nMMHfVVETHd#hP6=zV?L}?>=1C?n_-3oX3?E>(w z2bT>rf0fPf`(udI7)zS0Sq*u+_2&Qk1>m9HC-^t3sTNi@h+)zaG|4eiZEnEdUEtg$ zmO}TH#XLgu6~0Ik7;wYs>m4lQTd|9Kjn3fpYOkO@(6FOxG+kn2GN4PPZf(7z_1$ZD zJ*yoSac1D;u~m&stbDVOM>vUFW{0--ipF>Ee-eOp&DPnwhDl?t`l(4giy%zj!&da@ zkp%75LA})sA{wV-_h@(lb^(V&wsyvKeXk?_{TVm@PY!_P9Y%IRa|p?1SR>vpCAPYA zZC%v^_y-EI6TbRZQ)6KS?EcO?g-#xBrkhjBx;WEA(9O;1FHBF&kJY9E55V$%_5WGB zf7a$UjwJb)`u+Gwk&uitMLI~Wy}Mr!{j?b;iwsKZxVv9}nFEjlWi*HZxQ?~MrZ`#C z(_NL-U7eK*5803e79|mSOW)sV;SC%>;q_OZl2)hK?Zfd1Bu9LJ=&=;`H(PlF|2K8j zi5LW(F#C{sx-P0P%D^usHTD4OW-o6MfBn4k9$AP-4r(ip2O{O&I;-d7R_ETG2E0Z1 z70xKz3rH3|hAS`z`JXgkBfKX2O0SK#2*4#9Wc~uVw{AM}I;B=6DXd6pXO;a1yhR93 zzV~iH`!q$AY-629&KL-CFD%Es2E0WS1o?~@_5{wCnl!>#WWSh&F-ux8%m5|>f8HVv zn$&bn@OaH@DXmpNfGU)jwXf;0@wo zlttkSw2CxD24qEGgT9Mke9+16fA9VE77=l}IOYQWUqiAAOsH0F4QUGE_qM+Q)tkh` z%$iT3188y7q595JV0;8cS@7ESvBIzT=k&DWgvNfLW?4HpU>~gZ)uj|W2BND1if&~o z!!f2Rf4Ac_cyX&k z5?Zk6zqR9~W*)qO2@Xs+s}@rbovH^^c2KQOO1HX>3E{?s6B*fh z6cBHmG}Sn*9ZRKEa9JTTFjb6u=Hl9f6FJ#r0wy9-@CLu@;CZxQ_q8D5jf2iUx7QZr ziL7kBA}d9Po5$$)7N$FOtjPyOV;`7tIpfBJ6E{cJZprE<;e<_k8crtUNv}Y4xFxW3on6K>lwO940O{S3nQcrsksMAY1d!9|7O(8xfQ(UO z25AbigP5bRuT95O>EUDp)$Ke2vnbX@D&c!clEOMru$6I|ys?14!6HmDdrV-^ z{`2n3n;4P1;Q5Vo$-!M!YB7h3U?GY_N?XS>VlpEA&zl&be=9yi=KUoXowBWqj093^ zBrcZi4)@cS*5Aa4u6k`C?LiA4n+=goT!m}0D8Ul^^260ni?fSay)=J-uU$u5c`O>7l^&F=*p^L#D^Q}OL1F7N z{4Y1lt62qjKftFJI-PC;BSsuxk6y{rtb+H?epKiA41YdPo9PGeNxjG*@|4s(k^>{v zBy}yS6-ZwOf^uu{k7xfhCo~=Z3L73*1=f67{WX|Tf484*&abb2J!DS(@VF_)hmetY zz=P*Txe{l5*OQcjw&2}^K9*0Ii`(!N*)nE+(W4H53y}VmZD?Zr6ezc&Rn=^6GLq zt6cR3GIFG%V^D>)T|()pL#T})1Bi>V4jj}Pe|fHG`3vA;1>V_E;}W4iW$;oYtGytX zZqBPgo$3Vq)AgsH7yml`l|7^w0P^P?OZNX zr`wCg_XRWO$t*M7cO~ZO=ZEfhJ^lIhJ`4DfRw5>mgvgjNphs}NtTyHW!0sWNng(CY zf3G2bfs9N(hU7tn09Zkfnvs?Y-nN>wM<#sGjQMcn(%9b5S9pcY{)Srfa#N4FhU%>u zUx`_MJVFL`8(9Yzc(Pi2>>`Gq40|_Vda~@Pjg|(G|LY$gcZp`sokbHb-8YSg4smyX{yBepeRW?PdNU~nFKs~@Z@Y;is^{)5S2IJs5UV0FF~iP^mrJ%FYf&#xTZvoTaO^f#Ydz0{^g*vOX4nQKv!JCZ#Lp`$dnx z!{Mp(;i&&8D$lDz0vT_-x|M{&OS@K7*z|qIbGFJihzcxR6qAY&!sxE302q@M z4rvdZbsrg*66%$^ZN>^|dtDg?hx9<6XU)nKvQ5R=B zD=@qAMHQa+!9xWkRUvk{Z#3%zyL8UcPkfp(!5YH_hmf3vh!=8pF@uVT(o zj(l1esr8<%Ysh_?57JVFD1yI*Ky@JXDyEu`sY7OSxNNKff3m{!RZEmeyJ9VE&(zsq z>LXT1ORS>}#wgXB)L;a>;ZxbEEvWCE%Z8Zdh_RKTBaIBH1%=0VN+~uFvlii}Vn?*GaF?SV zcJD!k5cY2utBd9BtPTp#$lX#u5h+PZUKNvDDp=ydC+8b0EQiQb@4Vx25xt$%GS~>p zCVLxe~NID%|Ha3QyP&6l#e6* zkB{%>H4FTX$-*7U+FctED2lOIZyE0l29s(VHSK%98W7#XW@jB8?%)Tn&&|3yR`6Nl zGc^P7$dBKi zSx@nVr(>n)e;v3_W4q(%Dl(#2kjHxATp7RL++v<5z*O<=r4KoQc!j81wI=k~tYb=6 z2Dw=MHoI2h2{4rGdN0v+EHMNOkSo28syy?YR{xPk_xE0T!#^I)jV&Hw17*R0L2ge`_rV$3yt-ryGLDd`A`{Tlg&R zePxefz#*RT=n*44%Bk_&b4#$EXKF?&!p=4tz8dsWQM|C)ZmeVd<-l`oR-$xAAS&ct z2t-}rdm7e13T?Fq2ekB@qvHbnHn+l#z+*kN$<#X47|H6pYQ|R(PrPeQqq89V_RKWz z36Bjwe+7QcRby!$dIn|<~-# z*h6HdqC_4vk;8BQ=gZxZ6Q=;n8{eexJqTYsf7o=4Dke$Er7$Qvz;A!9`IxnDy6lcR zvE3<&Ia9Q6x<;^Eyt3KjQn?iMoHXG%3=1kRMBOon8UyN$%-k~&rsfp#*uxRg?IP@l zk%+r5>yj{TQSagsTR)%Ao*zc!`Qae){IFTYib|H!1T<#1yepXLeV28sA1D*LMZMd@$3lALe}XXD~R2(x))(LXy-qtj~SStjKq{-O2`B9kW1rmn-$mgA@v{QhJu75H&%4JUgG)!0!bx`>euae-y!V!&_Kz}FYRJ{pQBnRh#N`DWB= z{rBpx>F8m#`@+oar=Nd4yICD_SLWr@roH->0z65`xoJ=uWZAhkl?Cr?Q}J?Cp)^7M zdUmk0e@XW0vbMY)*Of6snC!=*Ew!!+o_-p-$g&CqXtOAX6YgShaSF1GA=(bkA$2g`CJcIEX`Hth|544)(d_@?q*Kpo&70k0imUIR3D|f30S1l5ArFlxhq* zQkV*u!Xz-UgfLIYQOD&8Q_bVgTb?3$ij4}3NGnt+*2aJcXH5guHEleTep}7TK({d? zZ*7Q@Pp=IZR? z;@D+cdBM@~8keC#^qr(Fycn5==%qIi^ zy=UsK{>?_#^V+1p2zEBJX|^-M$_|Ird@&XTE*1ep#=(w7N>|sjZY^xVDyK1=+ImC) z!PF(Qdl`Ex<fAxFzzy&`m1BN>df?Rgf)sKz zajupJ&6~|5*8C?>Jx4b7WC0nHrZmd)w~Pg%Ld4|cff2cMaO145dNpYPq_TubFNCYq8 z6&t=LnN+C~gb%N2Q&c@=JD>)H{IvMztZBLh%D#*yXM9%+Uf`21uHhR8_*vQesLjGO z#+PRwW;xa^RNZ_n0jO9ZBqy#^p^->6<66?A%1)x5U7p}le_wru4F!qt=fUduaJfAH zba}`Ee|hn&X`?cDSyPE3_GYW@)EfP^;>EVwf!8JRbe}n!jc4iWm6j^{{D5M9{ZuQ?7fPZ^z z$G&#YIvNpUrha;U zdrH2&g8gv+IX#~8?xwTpb&jF*D3ydcIUpG`Nrxh$9+tLko^k*9?T`E4@4w7CoPY8D ze>&C9{eG~KhydfVaMnts_$|h+Uz>7|sotf}qX9V3H$AQze9GOlP1m?Zw{tDuEIur6 zSxt3-hx*$Srx6_WU;O9ec z8B7%EVN|*y%@2VMhq@PoVE1gta#ktXe@+WDD+gk7F(ay{=8(!LL_q0`_P)45PVsEP zykfSU7O*cF>yKrPT4~jIqK0qLvJ8UU;}r|upKgIgs_K-&x8S|t=p*;SksVM60!iI~ z+C5vqw0Utmiv;Zc6rdhR(`7X5ju&gu|IgZ$_O_8E*}s(c@v%gfB(5cr!$bDWe-|Rp zox%3@Hn1}b&%fUnMNy{IOp+xEZnzBrs))*pjCe0I4!FUfK;GdMa%ynsH#H`=YfxN> zJmnaLjvC;nYC*}o2tOIrzJ=9)8N=-wB;gTX5Miy$nNb_f;^<)06az?DFRj6R@idCl zpVT3P6*-t)d77*5YpnS{Z+gD(Y2GX@2lCknOg58)9CSB0uxFL$tA#)({4xv z@Fvz@ji*jYCO7+O!60XmQ!gFGUC_=|9<`!d#6lgP{CUCC@1q#g`?Y2we^Gx)pEUyj zrZE756^)o4IE?$O;Pv8u6oq*wI5NaB#4{c;0(S5!RI**4IT$w!O|VLW`yc(N%h`8= z!Cx$mMh04N4q;4~U;w2ki$G+io4|zxPy73Bd$NzmmAj?veu96T#tHq8$u$t+^%29X za9x3NRd7}T97w7#g7eibe>fpki@uPY(Zz@Fq$bO?MA$(T0{qghWQn~g4b6X5jqDDR z`q<5<Oulu&K{D5~r~c&W+ttwW|C;T4RxejI?|FU1o*6otURIUOUVpHdYzV_3 zYNey{k~a=TNzTZYIY%->l)_3!2n{aWX^lV)m+q7RO-r(2oFsGfq`V`kwI*F@>SdxN zb`wED8TPw(O0(p7DeV@(o_jWz*mg9_W z+-X&9D8&aV){8Jf>JH+fOx(ZCl{-3jPwj26fP|8E?JA8Yk6z57y=*9k1u)kr(L&egL)ZQF%hal+z>tKuRt7Jk_O+Un!6Im;N`GkeH~9D^m$Ug^y{}Ts zT9K$=iHlGTx0RTcWZ=sH1#lUSv$JEhrrp!a?Aup>VKaX-fUNQw{IRc%!H9z1}(YI&gW8WfWxwmD%vmTvhMD0w-F}`_K0)RIXw(0 z18e{@r+*ZfSc1Kz!{n)lmGnQxC5D{T#8Vj!HRY!veMuN_S%OY9GX+dHwW!uX6FBYN zdex7+gg>c>tjRoJd@;8%R%;)RPYBnETIQA z6lwA$OIbg6PfvGG-){dn;IazwF8as{wbg}t7rMe$;a5}}xgHdG?&i<^^K5=UswC*N zCV#-C*>f*>77W2KF)JPQ00zT`c9%3EPqKboY!;)AP*0mlRWdLgsd-?fHk^!7nltBK zSf0!!OprI5;}d6RPIFc3a?OPi@#5% zK8^JBTu}c-=M;lVHU)$nm}(J4g3J4>a3eO(Vl^rQ;G`;w`Y!|_;O=vE$=MjKrXolf zjE}7=*Edxt!*=$!9{BMqz#3vNFVtzD7siUK#b=YN))5<<1~^_&W=}Jz)NecPPJiNb z5VRVeBolyUIhP1fO$}#gAO?03Yg~%FDYIPl_jD&s3v+4@eU83Mb|@wRBKG^Jl!pW4GQt^c%eLV$!eI;}X43E2D>`Gb;;xD3GbJF^6iM z6Tt%turm~bl-YBtgFauNO$A!_)PI|lQT0!@j(TwABzdw5q3^sl)BbCdYxBh z-P6_Yq+f1ki}~(GAn>Y@;fa#Wz4ONM8ZFC3Gr(wSsuN9VT>-pmv=24A^?!D~?B}WT+QL*Ax+7KI_&9`6hxn$It>VM!-p_6v_c$Jb1GnKl^ zbI9@VxmNvp``nY0{Q`9qqe)ak2AM^nc47tg1Dj?l5o|gW2#;2WTn{m@p|RQ*ShU8* z)}UNK`l@J}J*27Kfiu7>xqo@U|EkmEv7daq@#NxFk>Yigf^t?2Wsc;iKoA)-M1m}< z7Zh2*es}k?n*!mhB48If=@1bcY=Iwy?H1v3NK_8wF0IIRIqf$6ZUWA+14EtMg0K%; zJa{Il`Iog`1rZH5bl2hWlL|g`!5??a<>Yh%``EoLr4=zHQK`luQ&aY5+ObnZvLc>cYw-)`DA0& z-i3m|lM(w|QG&{>u76W!@iO*0qP04S`{cN_hPpUu=0empz!bQk4%KH+^gDI7pK@V; z(xwU~jCQj6;JJ0ws|%32F)~vtCWU>~p13nezZoQ3GUBlRb$~WuymksNktr zYxHGbOfwNEkAg9}YvV@N#Iu8*l&L7r9ix2I=!-s@aYFW4IDxFDoTL%7+GG)YX#z=HGA0#uzrEywCKbJa$=xj&%b|1@*{NGd`7F%ItS ziTe~}mJwC3H9$LMF;Nguq}doWWW=7iU>n5F)}KA1c&7!tm+&D|Br%No>uJkWPSlgq zQt#QzT0CrLH-BpZ0%{654+%?5Iy#Uq=#?@niu-f;aL_`E)2(+#D&a*0Iu!}TD^PFr z%oyT3_yuEHH!qwIO0@d_j8g)1A^D`Fb~eG2S_N_yfxtkKtxK)8zof)`u|F8OSp}{@ z?KBvJcFtBytt>SSV365zFo<(hZ#M0RER!3$;~r9en}12^BXZJ-d6a5A2s0p4R7x0C zN`!p}D?$#jv?fW=4e7`cA8#VPs6_!b1I|0ExfCKJ402~+)W)>DJc*o9S>n8VqB`tP z3J;bS=eb7A+%vKhsZU?C*qSZ2Wm z^{)~vMkSmSpefihEs}i@e0t#DRWI!Ef)X3E(D+KpDSwm|sdX}-DyeanOL8}h1zpCB zI!-TxMv$NN|qN7qmZdkdkdDi^$@ z!V3qdeKfN7&!UIAlAB};YTaN$m8l4(=wPzCP{Bq8m8`eY=7&0qZ{temj)W%q190FH zw^R+Zk4}M6s)Z7*e&{50**)~9z1P)4X#c>UGz>Crm2SV1>+43*zI)u@r8xYNqP7NE z@_zyG7*Kp}jLe4H&>G14DiapGJ=yDHj0%ovz@FeTlyHeuMX;Fs5Fvu;T154s?-Qd$JS8XR}D6^=YAv&IH5z<2vW)pm%CgcP6nEv zntUk&s~{UzM(2ZHs|OW7`)F85mM&7MK7Y7kRSZbJ(#bWp*uzzNTv^orvsKXl^O|D* zpRcaM74LWr)=}f?tby?rf&@21NAS=br-9!uzmI7neGtfpK|$IgCWuPoGZUv0JZ2K4 zGS@EV{<-@{F29fITYnJgijq>*T6BR8#|o?%lNO-+2th8Ld&l4ZMbG_=%vz~b9)F>y zT4OZU*}^r}s^J%763wwQ`2ErSvJWz2DWK_iQKtonI-~A};G&GC#TWJ~z3qg|^!HKo zd=3)51~L`A8siYvVLQ22ot2Tv!L+%|5g6|`C$6n?&sNw?oU6ioalb^py77VIN*<1L=__O zLQSG+xH@QCDw>JLdD~vvvRkeDeX-W4d&&fqk2t}kj19sI%_IPQ=cyo==_(ufmU|ucQzeJXlUtSn7@SAC z%mP{V%F7DZq=a;aCOP_6bA`PM6YuHPZ@uZ}w`31c592yq7_{0y-``(_)s7ytuiP{W zjxW>QomR|9>P1Dv8F|&x>VIY4s1zZwtv?zSzR3vD1N@M~C@cjHoe^_p1ZKX~K9)FkcPO|hgG1vh{BH%eE5CAKcsec4&U+PMO$PSWesdtO} z`*EFb-!C`_R;3yxMwdn|Dpj13#sdo_5XeT18l*q3M|E*|Cl;HvSU~3LxlGiSwopw$ z$=p_vWUD@E5c{2u$sg}NFB?(8M5d_YExtGPk~cm8hd6xu%v!nfgY5lH!Lr+oDn)uH z9oR-%MtMypCV%W@s*L4E2B}3LGc6UHUQos)5f%-vR=@>YMoAwr|rr*@>8F;gYii=LsDE zv5lo4GLL9|?w!B&t9c`X>uO|4cSH?TIla3MQx1<9_J3-oc6Yi~;k2nagJ5TuEPygV zmEa9eL2|Zp`hMfO${z`?uucuf?`qJtO5v2|9OM(orsyCWr+p;&Cb2nj?9UWR&4A7& z>T0leDqXS{g!M)QB(VppIVt+;bKF*2+U}~ZwBfC*FAd(##wTkE_P9t{2<0so7D1M` z5}-QjV}Cp@d+<%7tEyy6d2khu9S)DzNCVeBHk(YT5x^nwxm$hvv{YZXHNxS|yiPWH zfIq9XFFtDKbj!0r>VIsXmz%qhN79E^&CJ>ga>b}c^Kd-jgvp*by|bP=`08l2JF;9W$t zP&GrQlQ14^_t=`&@hbFF5@n&8%|_@fgEs`OO>z(~5}gd`_SU@LbhFPHtTz#qEE z;l0V!fr`#Syi8737HpBs5`q_XkxZ^MPIVx2)jxbzrlYpMK+#44ztV&b%6_!m=uoi6 zs&SYFnWGawe!V7kKlY`N!4w+fuAH;jGJm#I*pX?q%7Dn1el@Ns=bK1ji5CV=ee3?8 zv@2VV<4BUfl=txnf*=W799#gDsC{Y6lS3N<)CkZ>`ulY+G`brUvei|P&0#Z?+AFUJ zkIV=UZyk1Sj0LV)D9e|(L8N;`ng7eHlVt|4s0=3zM<26Ch=3L4V^GdfW`g7fewvk+0%ide84+QX<86C$wH#A0nY?v{z#ze*_nIrSR2xW0 z$)n=p>8M=Il;7XlcIk{UK1gLcA_LW!gn$sR!-3o3l@aN|hyVF>F)Mp)gDIN9i42+E z6ET=A@MA^?(fL%9M_qnt_f9{5T7R~0rF7t{HfllPL7dalVA|oad)LN|>Kg(1_Uh!_ z%qAck&<3*QTQk9TSG7f`XTDVIp3X~&XaA}LRR<_3gcVY0e|Oxi!s-# z0~u}3qb|coQ-7=D7ll_3*h57(sc<+=?V@K(Bh(^w7^{Xi9dBD;p1&wxdBE{BCGy%j z#n?eUZ-}qG8<^)c5#RzM`!u8TXfbbn! zcm(mI{=`Hb^=&=4iRmBs&p%&Wuj`*zpAT5C^-oL-mMH(niVcIX+*7qS6p7}BiJ-D^V2ZHUc66Qmi281x#oR%4(xp&Juc-!QgomF{7CRQ-VB)YT@+0a`uQ}Iu ztJ_h>r1QfXCf%-$q0P;xsB30?t)ywfff;3~Wx)X(@CJZfoqwFIW|EZ+s071I+6Wb} zGMf424Y3O%ClCmoM(>0G{djY=7!;fuY+5vDy8s=783Rj+Ir$nQ&gj`>WYoJK|N0HLd@=c1f8d9n&=HSPQb7ku);17(~N`| zE*9gN)oR7Qr(F#$qbIysJtDUQ#L4I`#KgiP?p!vS!6IUys;bdb z=ma>c$>;{K)ackRR$<=;ivU6>98I58Nma#BOG*G%bOsC9tBBj^yBk+y61mGM{KR9p5Qur zSpxOrD}Pu($oM9{y6r{Bzh@R;{eTY2=8J1lOXfxf<-s~YSmBJZgYD?f=m~wcs^bsn zh*-cmvaZ4j+q{Xccm*!$N{|s$e=qv`<753Q^q#DZRnb<+?hs>iSbM7*=3k29N9CW7 z=;Fh72Jb9Oq5JZ>-rYZut~q-rlfT$PB?Bg$wd z#nwg}6_|7L0yl^OCRJd70Sw*XkmiWr=4*J7P0C@a=f&#hmpf)0xHG=*O^mucFfnTL zD}NL12F=Enz!0=48K>Ksnk#cRRE3!x%-sY9PxbTar_0ls?bUZvD14-RemACTX1fKL z*r;R(1_sBB5-YdhbJy<~INV7?SegY`6;4AeETwW*%ZAX($UzJ~fxkbwn67FTV^;(^ z2B#Bq?POz*>PCv0tpXi!qh!|Yz^U}L7=PS)Q<{cNkOj;qV&j70s>TF#_?1ze^#o2_ zhO~>ZO=M>+rfVB*!A?9lUyn}n`K+{&X7Gf4_J1cY-Ul2895GOxyH>Wl%m>*B<8Hfm zSO#H6H|CqwzMS`r_I$pZ>edI%jzo#qAKuyka+U%@8b2yk+&~{)Q~hW$dbgR14u3Wx zUdfc`=!oNu_a=MY5jgz=`pwlZ1KG}l?_tU?_v8BbpyZGBPdswmT$Rf>rltg!3gc75SbE2M|UR->d zmF&K|w1r*o1U#!2Ho+a$1}hwuhOrE8-(YV}u5adwgYAwNK`y;PbhaoAw@3JOCm10b zDjJP}uRnY^eY-lnIaxa9Xey=Tte2*B+~Nofl`_l05yI)6mwv?Ii? z(kffhlvQLAX~^V58HM0mXn28FG%EiFqCG4_IzO-o>2_0qWE;y|gzq^c@I|z(4Yn=F zjV}o?LPT47V!h)Y z%D{PLev>HrwY~(7Tykf5d*f8Z-11>8{;zBe4Vs7t6pFS zTwvXdjG+svdFGDrBUj5VexB)Aql^TAzd2>%;(RHd-5D2CFB&5e76=3iqPnVUx6DOj zj6VjS?Ck37?c5~l4YUCha5^Nu@#C;!s}@^oH=;+AlNu%4ZJ>WTx_ZT|dsPG9^KI*h zt1UcCXH&Xh3x6g;j--Hy{^98A?fkx(y92MrD|oi9!Q?{>)rufOw81p+mO6Uu=fF>H zR&RcpE#J3;oqTjUDwxDrNRR?+pR-PsB+54K!G3>yygEDjWwvt220B!VPNWFisHKM^ z%8`opnlk?&@_S~STBzeQc9^BQZ(m+CQuzP3HtOJ?T7Rt`M!&Xt_-C8<_zRQYK&aZ2 zk*$YR;UzS0288zk33L)y5{6vlLs*EHMAU8SN>?Z4{21KwPJD zb{XVAjxfL8um1b>{%ii$_+z(=u${s265YY7=B~j|g76YcxeVQ;-#wCB2^fH zC3FMsb)T-N)1%#pEqLaeQ*?m;L$P;4O2wf%zvQ^1ev3{`TO*qKeGVOv4bz$diWfzMGzl? zH@2!Q*i3X(13QgRE1r!d$I&^*#5DH1V-{>`JoX@~0;bKnk+Sjx>daD5W15W=K%@Mq z&z+_6G8Exq1Yl1GHx(1;|NgP;NJfn)D`tf2*srE0tY=mD-vt4m-Lsg0M8Larpnt5v z0|ECKm3Q#LQB5&(2{n3(JnuoZa`Bp)YL(Q?UT(~e6D|gLd_)0-g`8#Ino4Z#rLbA& z(rx8!h!3_SvIf~m-Ne{ylzE>;P{J&pVr7^2$22Dt{BzF;rF+!JEb+Di$^)V64MsD<6OR`rkS8wuTcp zak=UYi`^^SBVTq>k3o7JeGVfhRc4#FCs}jmQl^p-nN^vUvjRsj1jgWOS3cSv<>T*p z0UG#b>NbdqShp3ENJbqk3_k#o;2yL&iX%^Oh${jPb}WeQLoE?-Ii+Ai(|@@YJ6yZ# zhgAN(01x3TJI6-E_6Tp7Or)dLCc(O;;zmWN_vQHe?d|uw1%N@p;f5eo0+lLW;V&6Q z&TJo~h7Z@%e9p=JdV+%&M5LO8jg56e#@P(Ah9Igb@34PHaMOuCzC3^Px&ytsU$xbj z)vr^V?@=1%^~w8>CszmMQGfpMbJKA^2po%aq68C7hp)#lQ&ADYOKNT?u=^Aj+5Z8Pc=9X1U{a5e3`cvh-S>`TDg*WzA~zWD(LMV5 z3+8r&eBlFPEv`D=Nb2fs=mlnwPu<|KicdiMKLA_pRizI1dvy7(4}VkTyWf$;a~MH# zroqiyiU3i06?+R7-itPRiX;w>%gltD9az|*N+J$M7Ytu~l#jgT0JCHH;%E&4d--Ob zkp2!R`>0t4sff6-c!l{1Ohuk*nUo$dWrBV^ z;axyabb!r=ZUR~3BxXil;ICT8HvM9z$b(8&NBK# zV}H1zfAp9hdr}1o8dAu}SS&;m0q3=YRsx*gT1!vjI*zlCl^NJijel8+24kP4tCP0E9?bVwOEE1OiRxNb7#`23f~sWEscV>b?BzXscV;5) z4k&C*)>gWfMGP&sP}l^RSLWRUca%r~&`%d{XBKsCKt+S|vamH0o*$0W!F^#l@fQLI zF}kWF=$m=UZO;y=)QJ9LY=%nZOp^~yu=QnA?4>itJbwb{FH3EMj{H~hfzz54RyA6x z$Fi|8tM>LC)AOaE&dKJDfo1T@vP*|l-Ggo-5)7)0lxrSO%-lr24Jb}VH=P&%Fntot zL{4{G8U&j%UZdp2llN2jfd8iZdgYY>-w5v8x8d_0{_Ma9Jp7&0prm0txCo*wq$|~A zi5S-emVe=3&u;w5k8cfM+QS`xqm_s6bF}Aov2(}v^d0Afimisq2}bvvHLS3eTM>>I zus6`F|2({;mVO9)w4fZZ^Nqq7gbT*IA`x91N_VMhNAUOU0YCN1u?x}>cp43RP_SuT z$W1HR!ON0YefXf2zJ2>%(nEVKev36!#nMP{;O{&<&IhvCZ>wsu|h-`eXx zpivU8+F+X&GPML+p%7W5;puzp|$8fxZWgnA+usTLOxzPP~mF*Heu#R=!$>* zmC)ea4(kl#EH&tUuk1jVI-4$7-SqGQ75}*Ub><_^v)$GMyJvTmn{m=*?VUg@s;d^5 z^nbPwcK*}p8We%IrL=jKHM=BKZyFKPE_E?j zzwvyu23fK`>?TB_Cz+PqV*@iz-v>*I*ppL6GOjcj9gR4MQX+MTeh_lXuW ziCESeG2Ylu$O~a}%el&6Q%=-9Ll{kQE*oh>VhlsrN3*pUHa1>3W z%tBUG5a=2ZFd?ciRt%j3q3_zC6Mz2FQJ3n1_c3Q2C6!BLsiuu3fd$m$_s#X{*Z*hj zTD#l0mE>Q-`|(kZltd@Cm=*18?tan1)7NM1C@Up7yZ?TxMzST50*AwKo_46PFaw~w z8r|r+YyYf(u2slRVL@*?_`67EftmPtf|8#f1=CKhm$dn9NFMph*ZE%J% z3X_ZG0&jB20*L)Nt%7!)z0BE6-5KoZMz*h`q&bVCjos37KfwQRB0OGu1N9NwQ)0c; z=KOTrqB@(3)uCU${|diMw(Ny5=~!$9;i9WL_hMj0DKX+IqJUQXkoA3ozW*!TEm5C( z@!U}tL7A&s*cP+m7n--PLw_yZ`8u5OFSq}+_2}@6>}XA0Rs#y zp77c=l+-PSqS*a$bbsaI0q|`ehKum_@7#9!zM~D37k2KjLq$ zZ_Y0l_GR3`x79TxY<3-grHABDkj;8(XEfK&;R~?9TYv0#_6a`-|KsJ`w?CaN zYzn+HfK-dA7NMI@ChEjgL8KV9SGIaLyms?2fbAs6w+>%M7KFN%6|3L4$qie}_L8t8 z{HWpT*9CC4uodYJx|CLnVpw48G$LrX0RxHKKA7#y!ZqF0XXFjggXr7Kw~MbK z?%-ExBG$18LW2rZc02YcEJ6h5jUHW9e)jZY6+AeBPk%m8#8Db9YoDZbh=i0iv5tBe zKZD<1tebr>19*_eLY1tX%w(%gIw2%0OvT~ZzuLUp{B}at^%=el@FC4*M4&nOhWD?X zFpko{I;i1IBp~_%4Q56!D8ujGqn;i#Yz@@%We_w zj_&djXMg!Reg+${QbMT)w43!52;nsha?zCgu3Zl@RD`|S{CN5MiKy_omiIut34vJz zxJ1M{_+^JP4kLASqP{&}YBZj~21Kk{YJ+%LA$o@6bN8Ma46R>!O zs|sQ#I9e=K*}5;X!2P#mFt4TQk^U-if4#okTz_A_+MwYWU~9S$U_B{$Fpt~})90ys zScz(!9b{Uk*}ZswwK;!Pb@u4(aeMO*Htf^39c&dCfvIiCaT{juOCL`CT&X=Z%wZCm z8d{=R*aeT!307%9uAh*X6@ZNf;e1XodJ(JIDxG16T`4hii3qBVD$t$=L8;+IiRQsL z9Dn$vlDbhG8yAX)HH{8!fcZc`j=zCF%xz z^Jy5D=L@&_tD^|u_LS6~)Q1YZBsO}DsThHPDAxh+dm65J6K<~q3t$;zF@8pr;YAPJR8OJuRotHDia&64=*JwuvESw41uvQB~Trk?N@r5 zU!|jh$|H?r!D#LWhVh5(_861+_!ZOnNv^)6-m{89c(_wb)ifIg)tRarICJ7GGk<{3 zAYo-2`*H=r@;>1!xP)gP%urPGqehX0gnN0j=t$!kYQ*Z{^?HC?3jC>LscM>|O5px+ zz&jsMug|W2TI9%|;o=E(k3lKV8%7!~JhM`&1^hn9G$7m$xC^U@o}o&f0g3>I&w>jh zOlZn>nXzX)9(h0?i2CMwO=HpNXn*eG-Jin*EIvCj0gIoU7APVE$u>Pc1jI=lQ)YzB zT4SZ~PRF4GzK5?nHK+YJ0L1z|N0_#XtA^MOo9yaY!!(_t8?=}Eel|Zaw47;ki zULBs?>6}^G*y@NRoc(_D)Ai=VtNPtbnmF90KkkRqIemKMgib#@El#IW>3<2^5#d+X z3C1VoB%Ge=!_qL}`Zcr71M}(2J|}*>^tFB)hxggQvFDhAh+U_qnpBPbY*b(+$K2WR z&Nvny-#@*OP>s&)ap4;mJ7ODC5MQzT10@*da_--4Al5h^oDCFt>&n4$u)mJ3T~%!{ zV{>`C?=}#P{hbV33H#D&7Jsq`!+I)aa+4eBhdx$7zN2*D)%NY#`^(MM%H?0ajJufN zvm=*2esUsG0?~Q{owHp;6RYd&zQv|Cvav+^nAiIRdh}a;L>E!P?>3&FJCPC2<{U-o zwZcKcunt$*{dYl6o_)SFHay5$D7gV%1dRc;=u8{eLH<>5ZvTEv)_?Td+rQdtc67mv z^8X!9DSvU~obrdJrCNCcf`~Ci?4I0t-vqIo$4+Xw$(a&E)>NeBiSBRU8qC5~HjC80 zHqdf5j42>f)``>)R#mJ9kB-gUB*svpXPX#P*+I9Ni15|dVdC}UPLr5bgXkH5fDw3l z6v4ZQRbwoMUX#e}?$`$q3|NS{$QT*^&2Z8K za*~CP^HnVVJo#^73S45rCwEUIXXQwQup5l-65z-tx|`Vm+?~3 zAx5DpOIOH)#^@iPz3CGtGJXE^aa=n%eR||nPCq-jc2FD2dw+wgr9^?H;9^NS^2)yz z^lZ=>+kzlg0(l`$Ts-zCaWbls{@t_`agUpSuIFZt6SBgVDlE!TQC ze#!Xo*msN{ok&Ycx+~d0;-qJ{C{Yafq}2kvDvt{#zipRON}j)ht6D&hbg^Jd)HzGZ zwGhFbq=#D*vw!nDsy{dm+#;fM8Jq&K5!PAKDj9fMs$@_RaCWQmi`xDDr$1gR^g3=z z%kAgeyPKQ()W7q^oIZSvPv6<3D0(PZ1?5B4C2$HXAnO-RZnZqgDBkZD<&@XWjq$#hu%Dp>lve3~d7LcjBm`87GV>(h87Z0+-_BNVoa{_wwqulW{#)lGjF57(wPv8q1=5 z>Ke|~=TS0y_56xPL2%2CELu^qHd{=&)G7)V#(#`%Bd(v|U^L?262NpVbx*RDk}@bT z5kd~d=eFx-SXr!JwhD05yKc@-iq8~zmL`sJ5!*vkeDrbm?agQWeK$Jto*<4o^#1lm zlXa3^s>pl#u4CC^=@?2%>lCe)vVSx5|D?N536aW6yz`46&ps@ZuHL~1J1I#h>)3J} z$bY$}l5Fr`E}@ktMb_8xuP>IWb??Ai6Jx|~VK+0|o72f=4a*#~b3H$$(+BX2B~W(Y zWrooZ)dyQk#6u&>;SewxQe#}=Fg$y&ufy*YypIU65Np(=O_w$FkQ2;SGxn)@{_FUc zSKCF2q}_L)s|leLktzLWEfyZnL@TAm(|@zv{$S~yyIxq9p1OPyYVwa?Pd#EkQH|f5S!~K`QBM$dRkOT5r$72gz%nJd`T734dNXwI(&IgDq~x-Mzhhvl2f_EnsqzF7T}|waKdFwQ^Hi z?P6xu-rLO&Yq?gj9dk|Hovvgl%9Ma1@OV3e`L`LW@`|kX5jpY$O0ILb_HR7$F5U-Xfd9kBVSYd|ezdQS3nSW5{4mu4V7P;hI zZpE(Rvcd&8Ffi~w{nR6IVD?`>R67wiFasx%_C7OFMH^X_wxV0^Q&^%`fVy9dd&HCgLRX0M$LPp@F? z5L%0w4S)IW*R=-EXUfX6)ofQbgLFx+JeIst1#WNVTw{Cj(@K2b5JU1H5CM*pY)(?x zJ{cUKgK5qgybo8uti-QMWj1e+u3M%KLu;^kT~x#vx~RGMYJV;Iq{D1l$#~@nEVojR zFX3NVi{NKA{fCw4Hum5ud`<-8qJmB5kxEchz8AjF>^uDP?b)x}i#0nBt{rI2P@@ci zwpPJ|bK}`v_A==ivh(BA#B2q8V;*qEt8>Ipga#zh0foHJ%o+6>Y6Yc-^u$F#NjmfD4`==Q{J|iN2(F z_}{$AZ8l4KW`nqst|JFKpfes(8Ee?o?|Me%6K};O(hPCDZiqrrA8R=ZS9D(0`2XBHp}J&M5d?aQo(YXGe9` zkC-Fo-K`=yKnm21W$)`=d7iARlWtP5Dl^`O=zdLb(W8f@uf2iMBCxW`r_Lysu{Lb( zJbGAx&SsFJhTv>Wa5=SxR+J7{2a_VAoMRc=i|gMmR_%F~?HjLQ;DhO&s@D{gXo;bI znhoyWet&p(dG%UkyFicqaBgOMbaLi?KW?#jGy#8Rq|71P-fK6ho6MRhHBv}DIXkmA zfFLbrl%B&hHKj_T>jkT=$u!gm+Mb%8*~1r=9rY!PzFY|sEK>B`sD{!*Eu%t&ulOfP z)W2Na?0p)v5iz<(A&O3Q+)}KHC76-w<@V$R&41niY=;jC%$I}9WlV-d=l~v_yAN5L zQSac>GBo?>o{AAz1j2(#C3X=touaGOP2EinufOFfn*H_HvT7#R&dx=caqpbgF!2?B z#ewA<9>8jNQF>Ge-&0}11T`?L^LQO_HKNsiIN^Ijl4jok1e=q>o)eaInyt~Kqn&4O z?tfAa=k}LpXz$MzE*60QA*W^t>5xQ%^rUDybqDPk?`=X=gb2{ z)8XX6@Qgpa{g!8H_MhJ)UaUcQn18QXO@F7^un(hP>++e^w=`9=Z+r}!q#2n?Eloxk z{>r|2m=#3!*Z_w&-&*uu;Bb73-NE9*;Ck14%e@!GZ&u7y)tr*7*?<0IXy=?q9Osy^ zN-fJ6*iz1$nhyKEQ?fOCBcRx>nG&*D(Cr0LG7MmGH5LrvF#TAZuGxc6Ug230NPh)k zCLu)Km14hx*p-g$@Dwc1*X-fT;46EvzzZnJ%BGrQm5mc2DGz!O|Ad6i-T+@Z1&(`>3RLACARLpkz*3<@IShK^p*T9P1)>E zfA6w%UU9?`x>e|y7TyT0L!yB`v$<32HwxsXCex%Ojeq5eF;IQ z?BVbNJRxnfZ-q^(K_jwjs#u4AXV||4;u9+@@<=iC>k?d?x7owz?W~Zp)_+o&o~4IZ z=m~i;z=Zu} zn>Xj-fU)aZ6=1=|nPH2llYf&p`=O7r0dapT*leoM1=ilDc2V9q*$gqb&3H-Z1>>Pf4^ZMh1ZAJ?U7=N-dCSvc&$`z%# zyk&@k`lEa3I~(@?4&Lfb%-^GLi{SofBA$@B=zi zu^Lt(q5*u7zagM!!*kN{OA5}P;y!P)Ryito9ajrnK)>%9e1!9Q0TRnh1>4_fox!)k z#Uy@Ta>}G|{5PKGgnu)f*E1k>z&w+#xi1BAS7CIR%Zwt?N7=sz8mB13%e~j1*LD59 zr|5fr{e$Hmn=|d6*sXC>sPfQo_%fz3t;%ujq!AK~OE$Z5yhZKzb_}qx)j4YLV_CM! z*&-={PklOahLi6b!*Vpx1qYBMoDc`k61I4!Q`OC`I6v}@Cs(L#2T;IyCBl5XuSU3u_YTs^ zQgw;cv$E0UX@6(+XTP3Y6Tck;qoQ0Hi|5Qxv-V;ghZ!`~wNgGiN;`Og>BDL~Oa}1q z5EzN4NS_tm-GxO!2rR(};Q6pOVuO48j(`;# zite>e7{hdOd;WT)rW>55qKbe)kmLy1SXP2tlYOiC@P9T0eUmYClD67tMNwbUAOlHf zfgs4(fJn68INja6iD59Lb6_;l(ZS0e9JcAbX2l#I^8BVrLf(^G@V0BH&k9mZsLs2Kig~ zl!n~c-UHVp2$zb?g=BaIhQez#R4L^w3}3Uk1A%}2^Zs*s$Yn@(g;(%}*92p);Ox1M z!e+*u5k^ac&(Wh5u!BDxoqC}$h2T<3fF`O|a(@VKs92|z#Cm7`>*JS?Wk|E9J#3yT z94w+}L+4jPy2xzxo;plQl6LCD{!&P!;&g1OL2BrlrqJ-RJmlg?3Y9ZWiY%geQU5Kl z5x06Odrb;FMi%K4RzT)a3qu{vni4d<*hjMYZ|eY4_7x`W9;U4{$^?EHEtb>C<@lIF zfqz#|?3NW*K_W8I@Jy0-!d1c{YBdtOjg`iE!4`HoxqUZ1qpR~bjHopGI{&g5AJy1- z`;^W&8pjp4g7Q6}rdnC8WdT3+lnrk+0_dQovtili7q~hZWw1^%+`Ki0Zf0_aJxW<{ zZheD_ceq2F9lyZkq|F^j>_AfCLr4sE(SKDIOx7O1>A}66%@6fDKKk1|w!YiyxUcrO ze(I@jOj6QQqDpxVi;h^r*y^bIowvkz0WzHpJFDFyI?6_5tag)g0#TGAsbqPH0W1kV zu8DX(os9;CuUp6r9#$PMB=85Gop?zlg8jZyWC{inv> z3v3jPw7U==mb4T7PiXu^ zxUof?GmNcUatlV9Q$I9S{9N>klGn}CfgE|v*#Qh~9?MbdpVopE(rG|y)sqUxyynu} z5G%N&0?lc0g*sKDENlU)geK%K=sJAyVJ_Sr7ht3~gtK!Sdtd}dQ{0R>&fh9ZS+(?$ zT4nGo);Rj~=#qU*jnh60kmO1t_{axr*~8+CYF{O(Lca>{Kx4b7h6Pp4I&Z^!5;+Cr z4!c_-EWI*Q34qYAkfu9wn)O@C&m%JMfi}j96mT#!+4w+F`0sg@hSwcOO?CaO-!gt) zr2wsL$GekR3pmU(AwYLCTJ%Xjd^Qle2=%hJw=j%rVkLXx{ zt;OOdG0bQ9ehN<&Y*ipaI93kKj!&AIlVLY;E=rr=|^9Sq9^5*?tY^AZbh zG7X*{9~tute6ileZW~kp<3?IqSXc+ql|UmMG;8bqCV)U&=7;+M%v*#R<|1Ckwc}yU z{(ApKd%ci)r>_#|8zQBBDBgW)*HWf>{8etG@@(OQM&7~8`U})fyw(fO)I3LcY-&C@ zTb=M2r3p9+69>Z6A?w}V$&HU?54e5`Csm1TC5lE5y%-CfPcg~T^&Ueh{ zOdGUmPb-GU(y3|Fl2+r_kd>LSwDul$2KremAx)}YaUv$VR+~Wx2L0V6Zh~s$ARJ0Gxo3SBry;*_3qqWG z1wtC%yj&X#^+jUEDoUGtJ2tHHdEn5GEe`G7SwM>shAsLajOQU;qn{QIIATJTzw-l% z@3c&LB%&yMJ?8JN?k-B={)wZ&1)v`We{Zl4(v-I)ow#2(D{JPw0<)$}wZPX@gtno! zV6@QK`8(W#8Wmv9i!&QV$k8k0oYgzwyT~e~8glUWWt#{{!zIm~j-}b<{i8Ru>M=1X zSTA^Pb^2C%s)m4D^sFQuAc2h^N5Hf3gFRa-nQwofisWE)H$qkb(gggd^ckT+pUJH9 zIt`DOp=g{HxTy*+e8tv4?!Br30lba2)@o?=B$ro5VW(qD0rvfaJY-#(6^7x75d zUfGK%PtrZB+cBrr9Cgpu9p7h`1iaU%W4ogpzAMxHqGXy!XZT4-2BZscP)#?l>?6dr zB=MijgS2IWxL{~;;Ru6B9aqh@Vdc1lGQL$aJ9uJ46b}WBpO|Rf_XZWhB6d0$hku3(kp;4 ze?iu4>mEx`Z^3=s0CPBat@Kno>pbi(MfY|$tG$n?%Tx<*6~rZxI%*dv)3mpE>>kvg zKbi=s4`y+HQzko|q@JQqBsiAM%*;_@eCWU}Qy;F=6X?D36H{t0;s)PpDTQ(;BM}|o z>Bz8=o~o_HV>)QouhVLDjl=9qqh3}}6=EGA)UDmNDOkIV!rG~jcg-Hq2A!joH*{}IZ4C$HPWGH5&EMVW#+ zx&`tgX%F%DFP4Y-Zus1vN3K}x>`EA?@C{lbmey!go`(TwR85ry_EQdnB+v+tof#fM zGH|+d><$fx%of(9Rt(Kz(S~&$M<9sAs;a4meR4MRSD-Lr-j_XuicDMe2qO5*M^z_o z7XeB;YCViYK_E;rBZ3y*C2T#DAzPvL)08>%j@5|;PNc}kJ{EsCtx_GoI8}9TBDtse z+)D62Iu0B4pih5;&g^$D?9S*Jado4fl1cF}c*+r)VT91-zK_%XY~9Qpym#=dW5`l; z1dcgl2%r!plaKf~vS(w(&Oe%`J{MpC)hmKVa=ESTQcc_Q-pLLw$HUpzmIK$=;bvdl#`|E zP&<>Dn3Y>4bw2(=G}7$|6Lws6ux~@d$lgk^DZux~BE*tp>RxYu@IXxbegVll6JN|C zqi*-5(?8SBQ(POsN14`N`pJMcJU%DDsPoMV&s2zplrhTu+}Z z1V9!)ol1!^4xViaXcfbs+Iao*{hm&0?AObITsR?~nBP^qO3<&&zTMA-I1I$VSI0-I zOe3vScblN3&J7~@VB}C@vzkRf>81Uq+YY@YS)vV6uSZGPYrO|Cp`yFXIaaO)Lb^yn+%!vh^jn(ow(!*q8 zU6HPuRul?r#;{3*$xu!}va$uPd60E=71G@~;+ccnv!7<8BQTP;xm2y85?lm{!x5Mq zl741{YiM5S0Z3e(_pBi_$ci6?6}Y#{-yK=)tz44bw@%1^Hz6mig3N{>o2q>Zy0j#4 zPj$S|SPcBmB>*u#%}z3WMsNK?&&4@~A^`mMimlNd>38p2Ola~0f1r2{I%;z_uG?b^ zrZEsB^$VPt3+ytYhJA2%ck^&@5d~W5bbi(@R7-hwA{UPQEj&c#h^C!hDu>5uBYb@a zk))zrcM17&Tfbj_%o=Pib`{sB7{6aVUl+d;b{+_MWIw@rQdKDRUuR%36jab-hBkpF zj*{w>L$_f>{Qts1cB)ABX##PkeYO}90C2|w zIX!cdfLI>{Q9+{zv{*0@UpIVRpfwyMd?2LVnlW{XlzhGFsUA?T)kwyv^bRZl;J9@G5&`2l%+$EG7LZ@yr{bZ`H<>Pe+AMN5dfG5Y02)C!SQ0I%pbl zTbQ*c57H5G?vbVEmWG(En1Z0ljdcn#;pU;_6d?AhItbA z1XQzvXM`Q4I(t?!_&&m&ih7L7%a$^iq9`4=GLJqqwQ?CCjb@ddr2<02Hh&(1!amm@ zB}+E@+PzN_M^&@WfXZEVSq;zG;zmiVEM|xpC)9pH;8y}5>TdGIN0nIbPY3u%8WLZr za3SqBuPOW0>$BT&`L})0qyg~bI`n6Jhar{D`O4;<|6)kE#XBA&*YpzS`mRCECd)o726i{&T@(|YT^(Wiek^&hk9kL9KvDjB7%^Z6fvtvvy z!~GJspnwpc9Bw9G3Jm>%<>E4CYVc<({3HCc*0>q4o8z+j5~C0=5`zF7{gFP-J942O zkzNdt$q1cd3+ft8QG!q)PFyA;NpR5XQa?DyL|hRvMyI6S4h0w)sRMvGs9bSi@mIK* zu=q$=u}N<}(0_VPl2bSfoBBTVN*!r`7y&gZtdq!*1(V!uot2C%Vl7Bim?ESEG%66`uNtU0?2yKMJci!SyZfTP$KfL*@_l1wosJ_xY#$tL1`^Y^V1cm&8HD zI{a=S&7Iy z4mO35>=cDy3bG)2S7jruoUW4CnEIpIeq+S!g!TU>5X&Xl#cY&Nz%3Gd)EARebtNWT zP7&7F(eWi4@ji?9N=ov8Y{MGz9%v_i(u=QpJ0;%)a&N)wWd{BsSm@U93Pu%ceJ9F{ zgl|?)neX8kgBVL|Hoe&w`@Q6z#SSkPRJf&yxT=h(BR5D~=#F~5Bp=8_x>tQLgjDtj z2eCTdc$qx#d~xigcwmEaUu$Q7-*g|H`6b!2y_3D2Y`@76FZuwmJo)nb+9!oBz&DiX zx;ha6w$}0S<8O05ypt05j}3AbP~P-mK5#k_F5giVywMyN=fdEiL_%9uIX>m;oXA*u zi`9@+)OAW9zExbCByfj&rKW1kciG*(Vvm!-dR89KDGFxz^2&As-|wD*FUNPYpjZ+? z;3gizYtT6kd=va?r0C8P<-eszpFez@ceJrU@QYQyEf+V&I=&6NaJf9KW)J zHRdOT;|=s~5hD=KpUMdRQ)MI}mDfclejz0CKa!ZQN&SL7Mkh)Kst%a30e0w|tzB)e ztHir!I~8>qf=&d7Kj?FsgHZ7UAkbEw`q0dxLg+mBaU=zE>h@93qc%&tAa+cR6}83%#sW6oyk)5E;hLYhNybL zL3T`|j8b@U*eV?7x&xw;&Nt{-oHmQ8=0Ue93=BH$?Lde93ui~V7#jYAOEEW8^0=Fc zUJT5upZ5m}B1m=(vwXHpcxbx9=_&WDP(Qxi%Z-M5TIR zSeUt19z={&1H2bo_vRLVwwa%YKy(cu|LyvWjx_QpnT=Xc=(SIrtDI|qrD#}|2-ppG z&e}Gg=CAsB=Ts)v*4C0PMXG7ROsr_|4)>qYCInX_`6#euwKDS&fmrK-ueWHY{&Mzf1pmL~LHe{X8mV+^5 zb;HV41(syos_5?5ooXS4LBFU-jG$VbaDRO1_+70kke*hG{BlYoBb&CAo6UyUTDUT^ zgOi_=y7^v~Raxx}my%DAMB|KTtSdLB8GEgpt(bzjKgt8yCs(p}0{oT!l&Fr#XZNRO zL!l7RL?6)!Gl;mNEP{qpMhjP7)KFTU7vU5&zjBdlaJ|-=aL}oW^Y+(-rzhN6G|J0T4Z0wXiBVSCbsSC{{cZ{Yu9taWjONfvIEz~V^AABncP zW^R_*Oe(vBtsL5(Tg^;~b+}Od^YIkoaOiC(oO1$g*3q}12T?ZgAPZ7rEwR>nkrTr} z^F#}tL&%F;?4c~RL{}mf5$m5C>25>#K5^aXse2Ystg3pUa2LfR;)Ie!BkB9}W2yek zb@elAXOHARA8Pj}dxs(@0AS)9$f<^t8nl%!2niZ^{C^WIXzP)d04N%2-gKm$C-z?0 z_^4#4_@$!+<%L1(d{iAzCz611crGhb%LEgyLj|7$_|6l@)0ehA7ME={I9l~;7jlvN z)jwz~dT#4dC@~(Y*l8>ZeY`wSwMwYVV-;&v8oE{7oK~HdQB6L^5-3ScYRr#!CNP{f zRz?!6`gwY4@_RAl%Gjl5!6NS>TfQ2^Bcl@ zjh`EbJR(>gu$p3ev^>$6svRn-P_>EGcwi}?M^=)aE2R=L=U8MC#m+Fx7+q=RMV7`+ z$JJI|wNDA|CA_V&!?n+~7x2ovtXkkIT1DCdX7N$&EavZs zYW8GB`Q@v!OE}t$ZG0u{B?#660TZ(wjDL*o`*qJP-J_QGwrc#{(ht-0D_Z!a?_>%R z%%P&&Wff+qfi%OG@Lmdv$DD~Ne@aVb*Ue59<-@|(XVBkmRX!0;VmUPgS%@2XBr+~BJLC!jQJ7yp|VzO6P%=~8BX-c0Y@ z^|-9`@R)PkuyS*BlIu*FQ9b>35T~(+%4lI58qUtgZ2ws3L69_D5Yyw;v`=%VMOuHZ zaj$;I!+r4zVf_-@T2TSr&=z^gw&|N|ZJg5sJkZ8GU9ff>ZY`Y?!VtaKA>54Q+KA-& zS|g8#d0XTNBNYB!M#KQlg@D&G%xMe{A{|#!QaIMO9P|XF)C%4*g(>Js)tObezTl@wD?R|F%E%?7AOe zBbWu3e4qt@s(Gp0;lXAmf~hLeo?7Er>Jz{6Shhv39zC`PCT8U;k4WQ11Ue(R;h+ji zO*QwEizBhCivo`=8c3MD!UabWl?V-G11<-`z->Yii;PJhiHn@wbmMStWhjwk(B4?a zd6n=fd#18(soxzDNS&AquajojUKxgKloNRYcl85?7A1?< zaZ+_Is~$&4l@HTI=C5@?y4E)l4Yzal2}vvYWD7MU;pEHM82Yb&gul3OPJ;nxTB;tZ{|M4nc|mng3%T^-P31Z1Zpw-!Y>*w0rl3iQQdP%1UZ??l1<` zZ)iA)4B{<13``J{bzooepX{H~VPFr`)7u)mU2Ez9UM$m~*Q6sJ0OvM&V91e;+S@Ta z!{avs*-Kh~tiZ{3>dg>Ukm}SVGZ=FCuHpm9#Dy8vDz`}0p{$9?6olO7Da;SKrlk_H zgQV#+7L2{o8XJji*{UTDUFdGA2#L^0w&g(CD3-o{!FRtRBJb@m&tuPKS3%CVlrnE6 zbW8|We~n-<{k&sB*uR@BEDs~cp)&GW_4=)+5b%GNKzeST2mmn1BM1QCzd!aPPd=d2niTWpUUhiCBgEcz-manUdgvEWfywW(&?9S(jb>%jW z9FHkf0S9^#b7(hwc*B##r^pJO1%aLNf<2I{p>7p$bAA87+gkUHBh!{>Gs|`NdtfAjC zv#25u$)vWEB&$~p=| zpf1@HCnL`xrHeL}Ho~1{mFaaf$WoY8=v2stQF{Z=Spe=h1k=8(h)oNGk+(_i9@M;C zg^>`v_nBNG-(_eafU`wz)Ql{}MxS*mmoWpoMWQoAtj?VtvQxGz3w_SKN9ghc*$@%9 zkpHpLHT$Oy^I(!G=7|kVTP`u7Y<%m}Gx3~Z0&7`kgyMCn)DYk8?);2Hclh1{F`ut_ zh8=Tn*sj+kEsy*G{-19YvHW``Bmw|X`4a&61|S4D8aca|nHt!Ghz@ZXLgZ$vtLFw>?KL^@_LVCq?heP5ESD?;)}*3p7YWcWNW?^&}U zv)cx0m8}H$*CrTjtDE(dectMnV7|`J#`|^bpw;1&e>-_)MU6)5$9t>S7dIGO@n(;A zhef08#|tS@W$m`Hf0$LrQ*RSwN}~pdDMyliGT!T(lnD5yG8Z4Lqv$A%znNlwIWMfprE zN@1zlA#W=N)XIQ~T||PD4p8o7un!dYcaJ9ZsbTm7tb%ion*0JeU9 z>n)UT6^$h#x>n~iY6Q}`61{0^am}a?1guw*Wt}@8&}%3vo!}o2{))>JU_x>&kWZYe zpbccYOoXK2Ob)A5=WuD>Wl#tToh7gxs@}vCS(Uk`ZfUg*5*3fG7Tzpv2N68Z5~>Bu zoc3Jb(>T=s5UEENu2w>L%sL!^4q2SaRzW6;HjP?tV?3LjIL#=&3Hzeg)t@_TdY4L6 zmuUJO1yMaQkI42>M%`zv&MwbR8Tot>b<~-K^YLvB+f>k=tB-nKU;4O&Jq_5SMIVnk zM}cHC&QW*qd|Q{jmB`|aaCJ&$@GwCWnY}6;otYTC$p0N#?rt5CA6aB#ds#WE5Tat( za{gFmF(ui}r8qGPV+)!wiDRr##@o31TgVUhDn#wBj_2b`l8>8!Chq-<$-2FhUny&= zzp!WN4)JoDTn(kuj1zgG#Yur`mNPALev0KnQyzgf>T<+xhK(T~iV1LXFiow}iV0U- zA|;pFi^8&m@USUm#;g2B(%p+e+iY-s*u9gA&ZNYUi@4ssbfA<_bOGim_@4=!&z~_qv%08THr5S~5?0o@@#y?IKfVUl?v{N;&+xEF zYF02J1h;C}RZc?gsRnJ%r5yPqwE<%TRDu~9ltiVadCh#kD}N=9akn_!*Cj1L)*}_T&J5p&r+vr(GT}3mXg&WeY#l7I8%cZmYCj^LXL47KqbD#k>T*HDuV2P{C7qd)v%t`Qt{Z zTm<1r6pmrAsFol)$;f)eIm8GRPc>%oYx)lioF8$x>&00#Z!8{K&kh^xJX){M#C(Rv zbW)JN?sxwc@`$^HdmO%S$}Zm#Tqn37kbu2ky}_S2sKaeH<#lPO}X!O4#Fk-Sk!4B(RMjfpH*jSy$(vx4B-K)@rcE* zopZw*z(@=p5lyO`yjVHbM?-q+J4a0%B*ef-NuMF$BuI?60PXjt)s6bj0k8e=52nNM z8lyfFD#zfhW<8So6Xrj21-*;F*#k5HAi@Ly2!PP;!N@_U@x!f5hogDDZ zoacx0)2*|94ub|A^A{D8h{qxfj+_o>c6#}1_TZP5K~`9k(;OENJrTtJ`s>YBYX8P- z1TtVlRF4shM2n+h6k%1L5j!wgC~ki4fpD~LBCUp3@UWMad`wgrNVccLZ&CU$ zsNuYds%J&Y2#uG;jOoa*)2YiT&MBh!#AI~{{` zs)|xKR#snEIIQI4dBmIV~eIDqd5EUHWUPP=*gPFd&! zQfVUvPQhO~)xX9q@krn06Y!$o;IS!WrECz@1DB`tRU3(N%Z&fY{hlsOZo&c{6WZuq zkF89NFY}wsr<}q6B(#8%JO4p#vSTbmxOrR0V+w|(LIdlw1F1EUz)H;WO)GUEHQ6kBUNDdK<42p-`a{zt`_i5&Xe|U-BAb!gZ?#4J zYoeWVqJuTSVe=6}rdQQzv|nUO^w#g+0aRA0eU4tu6QjLisA=RAS#v>yPP#@dGfkp2 z+waWo-6s?N`BjW9-8OED% z5G9Yv#;_C(dZUq;d9x@53yO%J?4z^LoouWpIJ*6N399LPC~K>hKBT}YFNU@+1gpYJkkd^nYYd>AQ3f`@@=t-2uyF{)AObme zo=A#Baj&Nbj(s8oE@Pyq1VpR^Tcp&{03~uB|05~3N8*xGekM_?`WSwhTfJT5ULf1! zVSqg|H3z_=rxouX@*fy&aoHGWt)4THneZG(;DsNAM*M>n*0G7UxPsnEAQ+^60t{uh z))CadQ6HfQtE@EAW1AXytyBFmW6-3uI~ZaoRv+xkn0%n*xO^h5GzRyC^qD!Q97pI5 z>%&g>ef!WY-m4d4pt?FsNX_UWWgh@~Gs@^LZ3H?teMF*U*Ao{*1{~*=ZVUUB?6>s+ zkcWp~AjV6W+>r;$aHo{QA1RQ<&-yl89i7g6BwZOY@J0qcQ7GqLo3_A0GarftK1sw+ zIiEu2tNp#3mx(8BJib-tJe$@*LGSicVb8kYU>&{^pwBY+bZ4osC`s z1SVJzdye37zP%3q4i3ab^t99%Z?S|l06Gf%@FG*rS8}gNd%5^@PQdi^P0xNzJs9kz zy>*nR<-bmxy4``~i_aF-$fBGZd`=u1_|uZxeqtW0!;CUMa$3sX2=K+7u5Gn<#}2gX z!TystSp{?ne-ZPzOFeQI5W1sa=?06zr6871Kx{kk>MqujQHW`+q%00~vZF;N1*S*p zy2}?Mg|c*ZNCm46!%p&wm`mLe8ba!4js%P9=Bqfns6goqzY1-<-+Wb!iK9(jU9Y?2 zWkM{Q9lpQ)o3VYKDbQ8&wSQ-Sb~WD#qG$%1AZwnV3tSf2Z_Ya)U#$SIZM5Z^LM<-Q z6lPeX=#W%c29$RwmEa*V&|~-Xf$l@P_>vpg%e6t~oi96inX@)UjF4aws!S8|B?JBI zK?nZI=iiDuxUaJ7st*Sg35rg2E?B$*!xpPG^cJ)7A;J-MB;TtmJ%%~xTz*Z>Y07rZZ z^&gB#X!R{GDyTq|qCk@A$L6FH8rAufg>TRec5w6u`-){JZaK4l9jwxhIza%Sc%^wQ z^Iy20KNkGwb;J@d+-tXBkZzE_R}bNe|ExiZG(-1P`|pV#u=X=y&M_&r2y#DzgEStW zT5`#2`L`5T4){QlHiX&Cz}K3|U*Er$P)ug^ZcHYjzsq#WFSSMbo&7TSIqg7_;roVqP#2UeTlU;|16ZEo_LP;MxiYKy9aYn ztBvECOKuGQ8UN}r^J@)^8j)F-o0O~SN3O4dSdH)D>c3>vZw;5(g9MWw5dWFsAbl86 z&%U}LCNmJ)63iFz1PcNRWTzm6_J8KM9vWz@CSyXnYlQy>7)t^9{^N&7u0v59l7 zKgHAbmVsB0nQb&FBVx>nw*36h_Ya3CcmL=aQlwK3((toPpNCQMJs{GA1f$i>MO-!X z`BR3cI?GCrgLnD)`7?yJZrgGBvQEhlza-LJDK6%Me5KeSD3k0&ULzSl$EZs)*mDo= zvz>eBIpB5n60HPB_nuAY&JTN*k213IyNNsM%7Hz3;c6=~dsCHaTGwxEMIN&ycD~Z= zw6oIizJ-hglS`UN=dqhW1DL8H3)UcI3~%II2#X5y4W41K?}?@L@P+aQv*e+E06gdn z^FwW$TGm>Gy3hra&+kqDdr6Bw#&l&U(LBe5Dz<8(j9zJ1OFjdYW=)ezJY8YsI!mpY|7d zn4Iay&~sOYlh9Uz^e0h>VMuWKJPnkuH)}QDEt(h2YW+AN*=fEMy z$haV7WgPJ)PlP2=nkr-+o^{5(HtHO$4+B|W4+RIXn-}n2U$AFiFeqQJ_)h=cPJc@S zVP!?(dKQ)(U$#FF{kAJObyfyrMgQ?-J+0$p|3261Jqhx#NDhlU_;xVw&r2_3nv*T| zcyle&)g`>H&%i8DZ0UZxs=MNfjj?Tazog)<1lzQX9x?f5dae`hm|iwxF!Qmj^VNnWWoMf#Ng2p`JC#uST3TmHuOH3{`Mfw-Hl9fbUV0coCsq>D&J<%WsV0BDt; zYjv($jLgsz?d~=<_dLOT8nr)$_&rwt&}gYpG0J~bM8uC(_PD_B zRaS(>Yl5wtPMYO@f?!9*W1OaGigB2YggG2pd|v;X?9@j+p75 zpdOQo{dU&_iqj5)B~6e73C~SsVGIycX^Fr6hA_)l?H2HMAOiozmTloE#DMpF`7!JR zU{G2pDb&)YKOOsP&f7Jrbts-!FKrbs7agFnZYr6nh6Ul%Lgnn?mT;{rXa~2hp2mgJ z&Ul++ZRx>7wuH?YfQk}`7s;O~-!0OkAaCI9pT-&o^i}>AcA$-?^X#vIk~&#b7mH+t z$Pg;)BcX-)j0TrHH@8c9vpsk_?8oK0-iG39!&Tn|H|}dn^;6>Vvf==Hb8(<9=}^Kj zPs9$@_m{7oFL%A}=~=XZwjuR=`B3^+Bk>CO<4s6Dhpij5(Ag>;;tp8`nSTXrwBr`c z+l;OFx<3)Jeamz1E7*9&gzmMZ)2a$XAKRdwe#n>ts6 z=iNqPBzMd&Tf%vZsjMWbg}P@>i#XaZq#iL1SGvf+OR|@;uFh5hT6dWz2FxyN{^H_b z9s=Zb^Kb!YmkIe9KJMY)&C+`KRxUR^>AlB;z(>7aR5)=;xQK%1>O2l^2fz2H>zjiE zkKIEONAVTSsECL26N#!pvqFdC^w{{9gNKBq@zb{A=2qQgz+kp<&A{xtvof^J|Q*6L)IJ_i=lb&)kg(ZT@C2(Lu74_d~!itbo8cSTjeNls2L|6itKp2iODb=Ap@C`kz7Z z{bsDUT{s;6R*UV0uu#;>Sg9lL-;_~*fP<{L|2UJ-Q*fny7HNpGJ9YIPn5oO6ENQ=g z>4!w@+zo-C3|<7k&xOG}KMhf3Ep*Z}M<$c1poP~*QDPH%bDlk2Pdk7Xh4j{SJA*kM zOSf92N{cCMu**d{+7Q1djf(va_(TKW$q}aCW2jUYLlb8w&G0Z8H(++C`tWj9*ef&bJMn1JO^;RjglQ&NW^OF|1?R>MmU$02vCd%HN*7hl}dv}w(EnUd@cp1SD zc9oY--8Ne_r}^oij?*xTsu4B%EQuonu;1SaR=~z(5xW6OxS_zvmgf8EFT;0+oaj&+ z>fAKZ_({%mQ9InPGj@TrVhLK)fuF8-7r_541wcP(=@kDrKOU{Qph#qxQQz*z1cwVOI)T@x#U9^Zs?aGkLM5LYJCj zt3upOY|S2sr63B>UvF~LJ?B!!n5;NY`4iBRipRI}lTYSeP*q79WMij2s-`3}-&`X# zBRKG<-HILoeYiTGH)DYtMcn%8v$|8|L;FwEEcTrWg3)5v_36WF938hOA0;y;K>fwh zS5i+OpLXvc4{=_EJXXjalFhDn(Byu=#>pD~&dj6S>udWHx89Jobj#UE7gojscJO3m zf32mn)1w+35MctwFMONjox~?&s7e}%(XL8SIkZln0LgO1 z{Q7Nsb{H(A^>Z!lFyC;tjKg?LEnyX>VTrGRC{;&$vC#aZab1)-mC<9|Z$?EmB@NE! zc|;W`EG<_eDqKiwPIjo4z=P#qKyR)#AlB~b)b_XGfJxV3dTzl!)K{PtZ?m&MXwvG~ z7Z1wL=%~l2_Z1=j2g=!U9 zvx7L0*K!&Wla(~hd^@d;;<21pW9Z|v^5QKpucU*j;xH?>f+pKKO$YpaCpw^Ua>Dv* z#r6`)#(FH`y`g8@Iq$BCb3~Cb!}&-k~b4e54tXr3k|{ z>YbbO!t`69NRmNxnZxX=wj;z_8#H5YNI3so{Q=nlB@s;CSuI^N=xXAxKJ z<)wiC7cM6%1K^?xM>Ce`hg8AOlu^xG4CS#dZCa(zPcENW(_G|=F}2!Q!n=XrU-rY6 za$}mK3{*|jjYyZfhNX%Sr%b`Eh7AQ~^rFh7(F1rPi&g3f1_^WTwa!P+S`_{#{(Z))Y{-l zX7M`&O;#)&HkdcO`WhRTIs-K|l~lB-Sfyjq$)v~g)|~ZgwB&?es-{FqDUty+h7J+~ zr=|=yQv|HbJ|zyEEwY|G0mI((+K`UbB`hrL&ulO*XFgo%Jpzsu=gJw=_ve_SveNID z+eqG6Rk!dGFhlIh3-(8tr&LnzM@(8P7x?;Za^HjZ!J$D2%}Kg|h}3YHa5>C8{v=X~ zk{~BoIkgzN-#>;531%vr(}ID{-y0&|7Z#0HOYPLUsuFRCxB|8ELH(yygc0ucnRT-sHIfVhmdhu}Jq{70& zP|@JcG7Qm5yC8M!syL2Yxtz*9>~#zfbYMIfrux?+C~K#was$xt8PL)2dNu!9$&e2? zdfsRa<=E;e>0?{WxS8xqb-IsN1y@gR1w}K9YbJ~0PUE6N?}mjCep$JQ$)u$U`PZQE zv~y%#e2FJ!!X4)G&B_B)*bmJaDk3Mm=a(DeFp(8hJZmrx!o=9bjLISVIfF{}gmZ%$ z2FK4_NxFX*K*tvxwifU)OsFL*x=DAqecI&G;%DR?sbI>JiO?Ix!GXgTFz&-k89m{p zks?t2Xf9dbSw;D*G5C;=T_?LC<#ac5!qKf5w)w!M${e=YcH{^0gqpx0!?f8(oYys> zGpZ%tHqA2FR-8A2-cy|=3~5OV0im2~86ifLQt+r-;3Vx9+ri7&gC8;)oy+?vMf!_+ z(GzXbwq<@NwZ0jfE1%yuy{WJ?Fqg@UmR_QfUB6)sjGg$B`FvEA8~p99 z^{HWSn9{DRnt}$h;CIoL0H>`_t61q=9F$=z>M;#ECSj2CiVY=_Wng9E@(_)%!N|3S zi~`8%RnjSW)?C~_cOM;QFF&6pJ!pS1rIDke_!WeDk2FvfPfm(}jfByV#{@fVNTZ9i z4Z#*0MVMtI@W{uY=Dc5Oy{wKNWwqPBKk%7?tI&WEzYzn^qkMxNI%jW;7zFeCqVGO5 zHk3vP_@AMQCX+zOfB8i*H5hZjUCP5?RWXWbgWv#=6w-oXze3fTcyrHcQ6_L!SEeLk z&$;;o+-oCmE@b}3LVq5S`oy$79jw$hEp|QH1G?NmOOrS!72;mrzmXXyhUDZV(!z<) z>a?Umw@kpRcGOyRnkc80#n5BYIwY$$(JGZg6z^M)0DTI<#Wc(FDxJn3siKVvL-zC- z6Hk*vU!Fqlfo{CqZO*YWI(?Uj5;4SM`WwXDNobB;bJ>D7UN8E33SC0+RSq42z9y?; zH}8?(rAk+}tij*65b{lLHO!&qbjvJL-11fm>pXz_zKnciLUxnIhHBTwE$b<5y=AUd z(F?IZ_R|TrgRK7;ZiNhg!&!k-Wf59NOE#HF#whjMNg!ZcbXd5Gj_UcDNHxx3Fc%!;)|)bg%8FGox}I#A05y zD~e;c9YHRvxWbRn$hG;ktoI9eWA$>S8P!Yj;%=?b22ZW3%0g6H55~DzQ8x}P-If_( zBe|_$QFh6s9jAAs$H~{!xsMds(F=|Zo}RtOGN`|WM?*L9Ys6B2=OP?$+bl^&J0X?2 zWCTKudm%c|i;kWtkXce;)XDH{qr}5I^{8+CGXIKoutJUCoU`fgJh?Ud~f)KIcyj7FsL4A%W3&!>F7sxPsHKj7&>{3P;dsQ)1XCExv-oubVOFsX8^3?ctG{*HiVk#~lxq$>ILDo4#G?Nho)Z*+NqKFTCK_v(~0{$S=D#s3`<^26PA&fBeyT?pCme+;0&HcDB)`XhnJ`vqzmyxR2f{vF)){0S+IGoW~8m|7Iv;+rGgk8pTB1x%$MRs&d`u=Y38xI%jThrdEGz9qoXi`JyPI&!jwbB28BYB9vCAW7We~Pj1YIDk@lkl% zMVPX5tYv&?Dh&>dwED-2jg|`u0@oZ727}H;SMS{R^YzB0dPsR~`1I}~45*#ONXmSa z8hvY^rO-@D7|5}VQYU1KpJm)uCVZqia(}s}711&XNU|5UA0=rsInNAi@U9#owJ9C1 z!h!hd=hb{e>=+#SeYQzuesuJ0<)*9su8niC-A;sTBhNs@({6RMHGQ!%`1>YFNX)rD~Jds7-oRnE&pz*v@H+4oV(3vX(^5I{QkhzTu6&>FW3~Q zKA1~|lr#{pFW6FMvxWpw>L{Uw!NJ!%Jf=T_a$=bSWuC|N8*u{pV@;`o;QyiP9D_59 z+C&>W=@=c`wr$($*f!qSwr$(Ct&VNmxjl2MzM7h<`FVDo->3Go&)RD#YEZXhO~IJ2 z{CR0YYAR#M{5Y7^oluHxWP(fNfFTZBiyhc3lIvR7 zI|Ja?X91C#qO=m>#hkWWpW6m4kSe$lkq&{2pSn(6nRs@(iZ*9KL%ZFoeBLu5gdN6z zDZ|sMLKh(@W*Ao=#((C4xtAKV&5_5N^r2U8ZUHZ){V}Gm5B5VDQ<#(njRY{Lx-bu7 zMW#i^G#fi3LPzVRF&i`flGP?kFORiIsDsj9}6Qojo^l2z=8CJb+3V^mVTF0 zOvfcln-+kRklCV(6-%RFq{o9>`-`8K6tMVc^58^+=7T$3m@7+Ahv2ux<6fS=Yt1wR)DW}(zigTa7H7C&U(2oz$ z%QK~jfgj{tC>iXEh)x9(LBZO)Lm`2F%O=7xs#KUhb464~d7B1mCIEo*W7;rat7;Wv zNc{NYQ9~sEP5sR~^sbl?ox9&V7h-oF;m81w0@NHx97fpUR01QA&=3chP5N@k@XVkc zE=3s^0IMPdajqol@|kv&j$1UzOVhbQV=~JR>~E5jVnIhR_{%5UgJCQ2zmhFK3x;aZ z>#$(|R2-qDdNK!0w}5tR#$LEGL8o&rTNOMaL}hnbobQ3I5tDjMXwIU0B&{ygh?3kC z_GA2%wG(6Rz9<_x>zxO^f|2EJ6IoBa z?IP?h#=?WJ#@4>CK95+8%ctY9%)dnDpEFxk@0F{-B$9_gbO7l9ijXAEeBs2Qhe$te z(Tt8w>H^$ge8ptY>FDIji+tcXQqo*snM>gTUsN1{zKdV;{5OQ2*rBJ~Gxvy%QcYUP z?$B7sE4It^N0eDt^~U086IvzbC!hGHt$GY8aoj7@M!oWKP7fBb{L8CG^tj|79d~=a z6}6)+)r;O+e>r~3xxB4~CNAo1`+B;c+nC<$Z@o7+)#hmEg^(YN5C1P76M9Oh-}&F} zBn%<7{|SsFl}(W!<9~kA{5nuk0flUc-Ltg{XZuAh)=`k4u7)>+s+?EH2}KFmq(uQNj^9@?p)I9^()se*qm#&@T*B%8EfT?uZ(wc{p zRr=lq_(S8VV(Sn-;RnF;34Gf3hYJ%NwiO zxf0DJZ)ujO@D);d`^qiO2 zyaR6W=86U>fYWOy52Js|=OH2NTC$GJM%I0Ax%Z=yjP&`WfWb^cP+baDnsH68FI zWtHOA{46&tBaG}GX^`^D2P%{R4wU}3^Z<(dehc@*J^cC5X513d*eTRL^vPDNu^V~V zYX#hfPYLv*0u=kbrbFqyIQFEzVZFqLojxVA3HH?=Z2pWWh_#bp*t`c;0jmtBC8UkU z{I@`h%~q!nur< zG0vB|A5I%$3E#W`a5;XG2BYu?UycMNIT|xnlS#VKcB!pxJgXek8G=4gN#2IepO0yv zA`waNh`1_sHqCf~xkYpDFWHx=yno{3McWjd&W2p{x9eZ_*q?E2o2YEl+@1WNcSl<( zuY`cJUn;h$YKOKjpuFW-#rYLh|OyZqOIz1PMtpMt=K0M zHhnhr@Mk02Zjueme8XJ1MXqkdE;G%;^J0K|*6Bg@T+{q?nWOCd^R}&MeZXgZhwc6Z zPg4&D{RZEw8hfX8JXOi*n37S*0kuWNT~Y3YR1J* z_npmw-292V-MGu6mHEwm{p*hgL{W1|IcjddO5#g)xEmIu>Y(|W+mYI9#_>#!RgcqQ zlFQL{X#*x|U}Mh3O_NyYh?&MJy9r=Da^Tt3vqHrS(vF{WYXE^cwaqB?SHkw|xk0Xd zp?Gz75kLiwIrG$@%9h?~%RZw~G6QnsDPSQv>&8_pabOhQRad?9UdVxes#5!JnsW@B z3KTPWy4r8a3R-bwO$khbG$pcPL+oU|PVDad8Kp)fUO-$1%uzVyKM4%}mIZ+RGb^U2 z*ux#J=G!|fWqID4+V^*b^}YY-#+LNpbf|cx=b2n3m;IfW$yrlJePrXnfoeJ@-Viqb z&)fcQRoC|~L9A0tyN5OjoBM_jDu>XIaIa*zK-95>@A2JXIjjAl$VzGezuoS@MX1^)Od6cIFWmxScKmyC$`jFT~ zm)|96SJ-$ajvkjy&OcG*!%t@3raSy$bVIuzt*-iS8i-znwk179!OQ@+A&R3(QQ22d zq`mN8BY>BfZ%&Za-d1roXHa!h3jl-T()rrR_ORVqpNqJx+Rj1r$U`k&BtfV5ZYMQl zjUMY!PKCCE2@?f!C4^;wv8m2-M)}EtXD7sCP1B5O3eM%t4S5emr=`7{n}Wanl^2C) zO%>PjDtGA3Rr)%$h<{?tuY>^ z%r-u1v9__3I`kDCIciL>9^<=|(5=RpYGo}+a8$7j`-fD+sR}@IRVGOWWu+tFD|zc> zzfUzc)8Ov{e2fu=Bd8gqY}@;)_I|M{OMAPhc!j=mp0d~YL++vu#k1FVCB=rrs)7VHlD0Mm3 zzKF10x(d4E3})dR@G#Brr!PZjkI(Vk?9^RQ+Cgg5gR^-c9lm`Nofx_u$J#65Ri;QV z;uVF6X}N_gmam2>=DnooXew)|DTLz~g z4XG?6J#N4aE(9WwcyNv>3OmIL$XHdAb31f=hI(y?#R79)5)@K~;(&*6QtQwN-3}A( zfIp|<`mzA|V}@KZb3qoSyDEPf)j|cI-i>M{kc`QhzW+erw-5W8N-gp&)mf-;aPA$= z3bd|XR~YW0Xl10=>!LAx+l0~0zZ?XHkJlK&A7()1c(^)P(-1*7GJ0<()KE1VbJSU% z$&z^h^bka-!JH6HP$RM?&M7nzl{&C(D~BFzi~7tmwZP`%4BJzs$QE_j1(3tjE1{fV zAY$ym?~t}V8O%R8{+pDdBCq`5afd@%`?#W&0y<~kL}9sfup85hz4GFezj(vYB`go2 z#nS+U5{#@2j}%}6Fs1n{a{A4q5?cX35x3jF5&x>;3etp<=)IdPg1~11HxP{*z)`;t}z6g>o ztf2VH7xNF}k^a~wEnXge+TBUjP2m$C+rNkp()|?Z>TZLInshU z?9QPo#(Bgt#IZQ1rF_H&2{FVWzC*;{T*7ACE}1>>j!x!5=w^N9C)xAjf?~ zIXXbDzEQ0`{b|zu(fp$+cG?xO8Dre@;ru!p`uy=VxYP4#6K(}5ZsGB^&;3i> zqh`+&hJbN@YzB`J+s*fh=h#&DVv2is6q)$oe`4}J8nJd^dv4OZQ%lY?d;AOtK)Fx7 z1SiK%=U!a7;m^~YYJ4&UCx7F*cN;#4b3Nq`itEp&f@P5BD7h^zOWf`&HXCO<+nmep25(*8CSX# zc@&Kx1)-9mF*ski(5eCIEafs29sS~p(66kK)Tv|w>vbCzks|-cz4i)t5Q0Y^?X!%1;%|PG&C>;K zlD6Xmc1k$(nNYX^t#c$oRE=YBlL1Sd&%N~B668%7$-Q^f7g^S zuz|f5?V}ShJ3hY`<=!`Z;!pAt&-|Ow3GRj-Y@Z#e zM^v%i)UGJ=gDz`}F!glS5X=iS!7$iqa7P*860n>Xkh8_Zqig#&)e>e84?YZaSstf5 zW{e#IwQA0*BNaI>V?`>6=*GSM-}tlE?&0t@p57bQ8mxDKsgQrqMr_u+&}?17Yjc?7 ze&~8YC=JfVv?+KJP~p2l5gy4H=#6{n7xcoR4%wSLF%>KG?VBzsdHLtlt8d22&{{s< z2islPT(v|)D`y8UAQR->23rA$iBF!0olon&x-P%DR}M8y28-EH7)4vLX;gFdmoI)t zu0`pe7rX*eTdDsAWve=yWtOXqR7<4HR?oE+M*R+X4#QFHX-V#IsK%<<{J4&`ctTDQ zAQcan|6nk83_oB(3CXaa_5G_Kxg=nsIjUZS4eK~^RbC!dDPBp^m1|ee%JFr*IsMGa zU%B1z_q;WvX&=W=m`JMgxHoW&*s3xg(7~8)I?)4C+63uSE|Of*!M(*eie#9r-A@ty zOH(Mwy!&!N{gi)h{ePYh@O!&@# zp&WH&b)ka7Ag>|}to%v05HoHRq*FgfVcbcF>ap(-^{R*t+7XpRe+(@8KSenW8=euY zQ5rdt@`$|XTYsXUN1^KRZ}Ij7HW4U1rb$5f%9y=$7RwY>MU|Q3HgZ=vMeb~yy(&!) zrL+rr-sy)eVyfQA{Nv_P;AkxNra`^trgydGaGR)u8M!R{bBqTHb-=}3qar?qrJfc$ z8aw{+K16k7W?_?4l5FV>%L9nhBTJBDk3Jk#Mcv7YO6uz+wombi~2g|-=VL`^5l;p8jzZ4=>>A^q%4NWH` zRiiZN^V9px56FVe0*rit34F~~f&&r({G}zbYLdOdL}%;Twt``2%_b=x7>+Enx|_{& z>U*|=Ic$S9EV`uy4^X=f|xidDGpC%3LuNG&{wvU9zgHkDuo{7SkgR?lHPSZ1dbnHL0f}QQ6A74HqJT!0#Jw(yW}z_3^5Y z=AT#_Q5DPOp>A!)9DPM*pmme4U&uBUV zWC7Nus3csM1^-LE(GYJx(93*K^ZeWMaB7t*44Q9|YwYU)-&4fl*ZhbYTiAFQIP|u_ z81g~Tt&Qsv6Ca_b3u7OX|6}%*BVYTynX~u-?&a3r_l|ht6yQgr>(Oj~iF0ziG^%LY zG2&~{QaPQ5Q?}qwp+nT@4Hg*738rzj|1uVkeiy>-9?+*j(0bqzux}mE?rJJvbHG>r zZH(12SEDHySwfH8p>fCkw1qQZFW_OkPPY1eW<=)Cdq>=`llNk3P1N!IKC@SS zHqPtXpH1PnWdOxC0)A`i92&T8rNs`%p7sg%8^P6!YD0Mgipz@px1$N;IyF`7bHpHA z;>8!n^_uhSTL9}AMy1R??Q%3;rK2kbmz5wbhMa^|afu!gLj6dN(@pTwIV*oJ3%3AOWfF zk+6pLW`b*O1kiSN;6bUW1d1SepkP$?7$NipE5mHkAVzSGM9R3oRoF4vau~ zQh&97l<6=OkwlqamLeHYDN7KqDyy%^**CiP=bB9q_KOAzK@r3zBRvoiGG>*KXQ92p zN_!>N4X^9Rk2=C{;2Vj#1z=KtFhLot0Um)=5C9RFpA1wC6iC9jpDvRAFdWngsuS7S zHwuB?iZ@x11c46PzN}nxQ-A<%cMHcYqsqwiR`@|rAbSymD7_5@Rs{(yc6bZXCObcF zmxL=y8+?49&HzV^6s1U#5g}I5{?A5d&+(8A!MAVjz+z}-QMY}=_uq_*r=yZz9_IS@ zzyMogNitht<&C(K+@8)Bf;a>Fz9KNLaX5p(D&1P&PAkb?)ga*Cuyg}ZvfL#0bSXq+ zhsf6LKUI3c^(FZ%^|A`J>-H&JQUfBR^)kyV1)8O{lV59h)YfV6LU=Hu#RdlD@qdzr zb(F>(Y=EPI5-i}%^ZT69lwm~R2VogD!T`^-NJoz>u)DVhbh5AxqgF^l0G|->G*T|w!9o!R|5(FKH5sdyV()5J4 z(H)H?E}q}9DwbC$KsF*)L5h<_sHj!&$iJjffXowuQZiT!?+l+dy-2l~iA#UZL;%gM zospK)>@HA$*9pCvVkKIh;Yp|isIwZ{#?6*p6t+4I(x$UZ&$)gizuHD6znX{XZu4`M zyrd>20*D2V$!a*~2BCxw0d8kbH6+t)B)ZD*l$4M&Y_yh(Rtd4nUXCka91bnamABhsAMFr zR!Un^BWZD&+FkH0SeCZd?wOjo3CWI)3?}RC>+r4LT*7HvPhx2+00Ew&#KbyDOf^-7 zZC#rsMA2w2<%fivu-0eEc|BdT3l&xa`;(+s1Vt~hJqJT3vqF533H3Yq+W?Tc#+?G* zObB&;T}Th4wNFDwV0-%@1>*3eW5qHGWtyn6gDg;rqVnX0wx0{tuBvS#2U%-z9tvz8 z%p;R#EeRV%FXVM=1PqkO$Pl+7qVI`PDC{FfL(pY6s;6POLeG*~S5KN?cc;%Hd|wYPb$Z#K+ea+$+l$53nEd$~{MXydz6X7q zQ)<4n$rU#YFzJj?0teZbY+X&horTR4HDE5-CAg$O6Od-p-C`Xqo=tAVI)Pu2mp~L% z7yh`yrdkN{l>50DUUV5G!R z0pdLM;2K@4IC)(~?iWFOZvR|=N=!^K4H)bjI4bB*gYHg{^(-D`GtP;Sm*rE&GEKqr zivVgZ=h2?%-&O`^CJH2)-LR(h)W;}g%*-$S8vOfZ8kg+2OHvxP*^X=Dc3g|a&7foHxsV^WO=6p$v}9E$&-&nE=+2Zd5WHs_l@74Q zL0M+_uvy##^8Oq z!M*6A0KIfEyU>~fPScPd@pHCScSYhDTTA33zyNxL&|+tsXeRJncwi9y*-pS}+7(+k zeU6jUCJU75r+^@;__eTqW@9?&qC+7nlS7DTkHYQ_TQdZHN%Q0{Vd_|tK5B;uB>&+e zAyQ~rcz+}ma@UWPNa-Lovyny62)k>IY=4{Fi>YyF^{q?%+nysM_i3r1`e;fHFkdGe zSTB*$qTDtONPTrFXFTStUmxf8xTC$YxpwatkLI&-y?`;i?cl_M`EPDet<-bPkV#+C z`Vk=kV`5Sqpx`)~U}FJW-IRB|tR+)}Oh=VrZm zGprmg`${8kk8&rM1iNe$_bYskQ7DIZ#p##NQc5i77k!j1Pb0SF0$l^^_L?QO;1+79 zNTQb|Q4-px*<8Y-%zfbwExtCX@0Wu)!O5ThCFn>cH~JqOx{nbh*8k_wuUhNlcz*!_ z1-hjorT%jy3zYFgr)DehqyHBk_J2_5N4UC)g>82}0Pv&GtwUS4saC^T<`;X__M-Cy zDbmb}E=3_^HcdF3-M6-XF%`dP8^a8woJ&^Iwux0Pk&+5#s9erm-7- z4Yy;+z~eRoi=OtM+gf_SJE}LsIRN4a%tTb~hW~Il6d!-PTJr9*A-}y}>*VR=gsWTM zI*oL@29x0 zY)^&8zMeYLNA5bus(}NsweC8Ads3UHi#f^#Qpo&I(V?#*`!XJTZv%hSEr5dRZ*GX1 z;u1|%t%Wa;1}4@7yH`{GOJr`(kFQ~p>ij1Cgiltn#^dG%x7j1Fv#u*I+r`ni(_a!X z)+^r{Ov%fg_zH1vsX1u51IFsL)~+%BJ9)1pT0D(FypF~m?I??wM&5jvP)q4t>PIE< z{uY|Q6j=1k+ZX%!KK7%&`T+V)wFZ^LX1obs4ET!YkGT08QpVjK>=j`aM`FTCtn6E3ndzJcGr&(;&@OCNy8x) zdQzXTNFr_e;n4#WF@ua!Z;}0W2S%@4e*WTVHp{sZJ$kRXQ96a@a)3!?=u^YX5ftHZ z_v*AFLJ^G$r7UKwLvl*PjY~My<1O>FMeuJ+)Q^%)c8Ht)K2bFlh?|oc4SMj+`qCp4 z_3n5!ifIZ(eqB94*0F=29z=$oS6VZdB?)D23eorM{a?32n(3F>d5D9t`oaS16iPwX zw~otkyu|UOzpQXK|<&B!A`%T&nvY{58n zXgQkIJ5cJOHPIYloYly9ECuE|9A@8Yf?6+#z^6WzG(sm3d~LF4BuCs;8Jc}=66mfW zR^3_IHu$5%Mzt4M&H_=h@)c=YlBgGR^>2Gwel2_8(ghURFM!|a@CCT8UC~Yejx2(2Zh$ z@wBiHL!5=R0fd3oM`(Z!@S$Dz5)8d8Amf9+eiE1j`OWs|bot>7wS}bPo3iHnDrp}|D z)w2U+j@N!36msSR=#ZBvmq@7VVe4du)(A35bE2UIJ11>akz|7zG~!hzH1AU#mJ;B^ z%?kCBZGbo+zj4lio*9%6ZnMwqJCn>6u~JrukEsHM6~9iiOuBbLF-?_ykNC&zmJq&3 zJUL$m*VEvCHovUadSp6GUsEJ2#?ehli{|En>7EIUUkOCpPCX~@Q+E=aM1K$vO_5dc zWvCu}5O|vh|0+Vn7rU%BzE)pp@JM5KTnyfi?*nd6dU1nJ9#`GW__Nqm8D2S1;~C54 zHMJUnnU+1S;VttTk9INpjLwTxyk!0;CCIxxBq$0$Pl$;-WE5GKErvGmq;o$HhJ_ik z?9?H4p$*E3%mjoo-@W1nqxNvWSe|DMq2?cCq7+65nw`wDQ2)(3fLj)7N}u3gkXp1b zc>riKI1yilWi2aOzBzjP$8otjc$K~XZVAUg~wgQmR#yS%vwTFXIMATymRL;+Yzm}a5@Bna z1_++a>0bq#3&Zw-ke+$T7IOfS_kb{p=C&m$!Mr{mA-w0vy z<#`brj%uEUutVdy_oix1yNI4TUr_ijr?UsuO{+-k*H93PjFpj7GdLJP^VTfv+3eFz zs--PvvEhI)1fU}yzER8U=m2l~r6RP-OxHxc>=xff5K!$)PT`t06o}Ha`OKYf=r>lVT*F&8J;S%1l8aCHRs1Moy#xByr)+v zG1i;3yJq3OE*#u*DL@^|lGhhJ3bz}$F)Xo2sMYU~pX#n(`Q{EHasS1EcoVJAjK&SV zxe5j(BENkN2UNff`n3@|c)icLM|9g(>i9jB(23IW;+;xrg&iNZZlxm&6wle~SU zE}fNy+g~dDZJnW?Ul)ot!JbqNjkMzrqh$XIGoVbI3c*3?mlNy6$11in;<% zJ8Bk(v1Jz4h)OwHP-KlDNfIHcu;LnxP;DR>UU*wmU!?_7+5`?U1)$<-n0(3>VOFqj zxiK=-^F7q=Jbr1Ukw#Lv7C@-bvG@NzL&cs!kAk;3#{w}GrEuEsyq^Yz`zwpHrhpW{ zq(iC=-#(oAca5_mO!u(Szk|@w&gM1*a!_SUBB*}%;$V- zCC`&{yXh?t5X&%Yk5(VGY_se5K#;tqQh-$}Xxr{$F@}p4*=8uEVudCa%icpVyQZ=b zol6%uJ_?U^8AhWf*{0A@yD9Blh63!;5DQ^cI$@WJ$){J(HXs%Ib*6@hU1}b_i`%Jh z*Ks&lTNjwOxz3)qToI^X)*8q>!>bJHyWrXnD|bhK_}FY0M_gAq&Z@dXIgjcOE=VLQ zoQA+p?LvY&i3Sqk-4*H_7;7Nd>xLF~O-{n&ay;2|*>;DSPkU zxra`+{)nLO2jJ_~2w^jOPRAX$Ewbq1tv`A!sbIRVZnvMfw!?}jP+bYnj3Fk1^@M~r zRCMJXA||*{<7VTqm}eM>nM=2)(T3U1KT9%Zje=P?L(WhukurQsBz~Zd5|ARe=S#YSnMMM4u_~B?S(=V| zJ+l{*U@q<^3a(M8kivA;4FiY-vC~EWv=<+`cs~$vWcf=&A}7(?7%msSj^tMuNH0hk zUYJ5{r}l>02?petTxhCKI2~~r^cDAsdEz@d6gUn1Am@UTYrj)sD>39Y)s=qGZ>GER zR!4SO1qfqR)?xD&=EBFZs|rWtYwI#EtEua&b~59Fqz0BcrHtG_(-*9d6iB-3`!I-| zYqZVumAPP3&nV_vKrEE7eg?MnI=a;b1qdjj_6($in?hL*$_5kxLO4{A>Y74F z{l-htUssCn{Q1bUp!PE*w`uYly|RoR<@1*?*6W>9wMNnYRQUYNl55o2dC z3l(bJNSTHCurT9syZ_Mrnn(*U)M+%^r)ESz_idWrFgGv^i(Ulj`!wBCTmLwYozNe% zkY!mHVMu?NtRS$kzts^#5&Hp~?vQlIfXMf+Xg5 zJ2%2XMan_ME=CnEBY7>S+vvfKJc=Z7ow95cM zH!YM%m~|eFsiPkDJYn6%5`|+kExcN|BVRj@m()RK?>peFo>y(szCQYWY7dq&K7vJw zFyhkGMqg&fZ%V89x*0ec;!eDVj1HOh8r0b$)EUElh6YHe$!ak4yF8@twsT#gBbD9| zaNh)a3WT=5srg)A()CLLkDq90{*vncM_SZ7PY#z{c>NT2jKo|0^@Fv6+2ISc<*zg= ziDkSe)Wl2Dmn8O}J8)lfcb7oJ#-cu!pLX5i%nqYfV0Y;7hbj zuSl|?V!2bjE~BH%Xi5gDNS#eGuJ8p9J?IB2$B!G8`8=2N$~HX!EtK$0-9nzvxz(GV z><5c3cPpIh=^FJ8teR_>jx7RBiK8S=26}j+pVu>U{NJtUvV4oNKO%(OauoH#=U^!} z?crCN9Cf;wu1551DJsFn|Zh)MHsV?YYOE+(uDtGJ=&%Zr_FMC@6 z;Q!#3Kw$r!H@oZPh4G`%6TJOpf{hUwr_n>6^zu?O&UCn>+WsC1@ZQm(j z3RC@Bbn(2saWRYDwYx2{{9ifQZH;az%tRo1Aj|Zl-knAGxS%%wJc)=T9c3(Kf!fm9 z=j>}fj*qvN9j6-Alu?WOcW^#YdYt4im67qI3yfZX$4^3!{e1v{G~sDMq}w;Xh~Ag) z=US$u)h(6EA$z9(lQns}e`vsre(O-Xo@Z_sBKC+Q=lMY}3X z#%$AN^pV$&z;Ml%pxcmNPUAsh!qJstiwD=VkB~Yltm8@??8muwf3gzqQ@yOp!@NYO zTWmuxr09zvveQ2TWs9e+Vt48HZ;0LquZ5TbDvQ-$->0e|Y7T#Vtg{`8LqbkVen)7r zHwDdDjg5-{?o*LG3N$h(qS!g{d%wI%daZL1P_;CVDQ)?oT(~s^t7OWP!(fDZ1Pf~N z8NWF%f5D7+Rd^^J6jUdJ+3?p;yJXgPc6q3%_OBS-ugup3sGw$rX?5<$)XZj^*s);8n=lxSG>>j+c+Qnw!vi?Knm*`PiI zhxdp*5vM^6cqZ0rkP-YaS->KQJx*>IPQi2lWifRC_lp)WDHy%?UQ*CA7FNWB41MWw z?HrD09$VOdnl~8ps^{Rs@1~TAESxyNb0UQ+h6AETT4hlGEB(qWmxLq#eJRCQ-tf>{ zu`OT%h`}RkQS)6X*Nd8vOpc_%OG`a515K%am{mWkBhMzG#i_v&(B>t@#WI_-ySbKU zkkvl#Y?SLhFKh2PcS@FpU_XC7<}Xj0>HsTtM<9L_fq6MMS9?gauz(_NUJt z2{!T*2bh_1B6oM8@1pIUTFzitu8p!0G+BVASSZ@2+1X|MMXURvVb(x`bNq-HiqZ%eAyVFsBBP9N1C z1eM;~3ND+_d#PfMG9sm|idPoY5tk-mDrAe*cn(EY80&^I;JwpfeLzGR>pbq z2`dp^TFJjr-2Rj13gwh-xEOnjTGTWHdiV!EyF~nL1yRir%LGJm-u%H8T4tQv_y_7simA(=r)RD-+6rl**zci5HHc+}jzhD=B|Jq$ z2p2&J8T>*iH&>9Gldss+Y(yGosHq!$DIOVTa>L`Qn4R?hf%7q^}svNG8VV1Kk z;H>3kfh-QU2x^FtQ>p$3mbV=Eg-`O=Odr(|u3`if5cdlE1(^}($?HD7Vs^O-L7imG zj1u|m*b-Hga90f?TJsi16$Cbb@-PEvM;6!UI^4_|HN?Z~_fLq$U1CnY?AxcYkwj)F zFtQ-xJD>aSp@Su(-^vxNsZ4$Gz1&B})xOk6EUJTauHbH0Otq)MvHed!rN*Jr9)cnbjtqJeN4nygfjvl8WLrX^{s<*3#OPoB0*MnUjMq>k%kZz#pZ|K z={c^`pH{94(>IxZ(=cmnbu@$v!cksC1rwrUslbX_okD{LVQrUlU{y7b>i2Hcuj>;T zRo9ocFdTgJVmlBuu!95(Q!gx{BnlCVMaHPXK(v?#Vc?-7r>tMwA+xKkM4e{ucId`~ z0nHXg8UaIv!3!GQZWDumgfsiOD_6TtO?4O6PpXdB1SB*MJVpO!5cUBc5+*Pf6r=*q z5xVe{up^e<@4K_DkL#P<9iNOnWooP{j2~D5st%X<{QJXk*R*`Fo?g%t*L#2D`k3S< zfdvC~fr{f&Clt_*sur{2^Ky`hTkey=jmQerSXgp;H-~8i+w~IwM6z)A{zRXSg1Cbo zri@J{GgCbG=o6H*sB0y3=W#b-#|?FAC=w}BWB|pk4pJ(Z!E?McW~4bSoHE_nyhk}m z1=Q3_760qF#U)u$o>sU>f;|@WwfNYHjw2q!o|UQG$FwuC)m9dVorV&US=wNgO9rsP zO;7FZE0oGj=h{5LfXJn9wj{R&KAo%YZKN-4Wh!?9YHc#**a6%hj%AN!cW8J)REd(P z2{8z)X2?Hk9riFa@>eelRMCzQfpq;l3rt;FS-hrGT*knVy8uB1jl+E>pS;)G84jL@ zr4+AF<{{nUI$Jxe(^TNxi(jp=0MZc!To=Jo1QOocfXzSn7tsFtS>xY%3fd0aL}S+O zxT|U?6ucW-taVc1j=mYpKB4R0xmoOkOGPGxWWm4zWGZ@^NYJ7xJ&9**mY=|n(FRXj>w||l|{NsAceX}==8>GMaXZVAdm`{m15W}Qp;zcX@O)g(aOmGowCVRXx}?@3)Hnng6Zpin zj~xg>?si@f0W1ngZ+^Qs3Z~7-9-! znG$Sly|RLIiiHC}5d7v}h#3wdD9=86VAs>6ms1kA^;v=;5p5?Wo2!o_%CB$e=>sa| zqZDGr=yR6E6?DAnW*$cS4uFK z;O;V>LM-t}?-T1n4Dfz>{0^=v0>b(Ya-zYd=3;bC1YeOWKZBu?PXp$|6;Yn}vBw=b5=z^x3@ z3g(iJl2suB_CLU?bVfrchDE$In-WM--c!Xo7PQ-4xs8}E!%yq|#{N_r>kZwEIT-*> zUpDAmQ29oXB|_{#$Woqf*7@WGtcyG!EmAy+T!~eb_zR`tre9%{P;K-<7wL_()YS`i z+$dPmA3IAZgnSQ_4}vtP`Gh54;$($Tdr=|2s6f`b!LNW!a-ztp*PST~A%m^AjDoL% zOHd>vm}Z!NZNRV&j-i|raTS8!B0zvI&I4*B2Udg{r1{%j<$?k~ebe4VB0|thloF7j z`beTP*eEkw)#=u(T;-fn(}y~6)>1aISaI1b9>V<);I0Rr0fssgsO_FgR0hge?_BV8 z-SD=`@V7y8)ta$UE>mw+PfSs*>iMn1AjfdZ%4}#SzClLK{0jHg5$||W?+3u~!G>G& z^zjK|>$Ahx(vYxVm_B5);2gpd8&JeC{0lq?Ogmqm`EPP!#Zx5u2$DgnM@$0PARjP} zKtC(&w#89jGg5U^ZZOnde5O2e9a#0w1Zn)0zL)UbG^rYJaio+4MWNDk%WEy~&202$ z?Z#)%e}}=WL(|zzBI>qVDZPN{V*xBp!#rtbCl3;beIhrh44+SyWjJiOzApxG=Olx< zlI6Z5wAk329f0pk@uv;FU`C6T=ike^HCm&^f_COVGnWGK18s|@v@-s`?0&8#Sb?VV z5;!|2W5>aIE2Ifs4`hJ6pmF&r$#My>ibXOM5Hi9&Z86Ko zLJMk0z#v7CTadAOFJ;Jm80FUMdAn0gA<#-elj}uN95zu#jsInD<@)`3)q(=sclul2+d;7olqLipwmidCV<0w$g>j zx74;PEFAL{p!9oyZ$tt=m&f_gdb@O}T)~7uNWVl2{J-BBK2~1e^H`5bitWU$@BNw} z6H$KJ%G2VOl({emkrudb`6@g~ z#-XbfRV*zXYOJb*j^30H(XHjy%NtY9^J%1o){f1U$`2}l80F3l71#EUO4;J~SA2mL z(;yjCgS$zPO$tzA)u+ZPR|*)Ir$2Kfq|ATK#7`34j_VAU8@@KCMw4=V*>WDgN_S*= z(`vZPK99bz*tjq`PC%r;P)~JOA4X1NQgg2<=}V>NjGkidmNXx>(n9t6)A>K6w|mP6 z2og8ZU?nyH>3Z`s-ADMmYk;eW_|D+S(w;sXZwDmAiuBpI;~?TGU0lD8AaKs2Afe;A z8pA=>d-Sx*Qc_6nXf3COX@3%0_uc3f8>`4-VStF&{Rkc*kc&m*u}16V(HiYW8y02z zZok+N6dopEcV5OHJN>+#+=9lC_jp6ksU)#fSp!a`-BX{*gXFSGE|H0&qsyW; z{eN`5V~{36obCOzd)l^b+qUhVwrxy5ZQI?`wlQtnnzn7*dS`dYa;)mx1YNLaTzSsyWTKrd;&Jq0O~Q<(&U;wd zU&C}CyqsYrKG)LY*ttL*{IOG!{%*Nf6~nGVBo*SzSNla><>rxoluV}=GCM9LD;7?32qRZ&{OH?X)S2re{%T{#j z+B4-i92&s-=0{sNMLy}EwxN|i&foW@cGG>JNI={^1CpknAf+^p{8v^YdP8Et(ETh6 zY8Of&_AK>{j}9#l#eq8O9ZRL_+%(3e>?s{0I*}{TvjT@!E>=t=a)mYTM=wlQwlUZf2B5Acw=fONu zHXR=af-29wBuLAd-Sj2YPf(R^7=#n0keLx}8rdSo1kSvE-}=(C_b6CDN-n(GxZhZ= zE>Z&BhYY;G%r%<#4dRwPVDBr}a-Nzhqmvf((?7QI@5Rl_SG%(6pc)t$ zO9whX4we&5)2477?3bSpe{ozMo)&t-qiTbq*bY5ih4?s~l>D~eH>EL4Kp-J&OROQw zRL+G#hoNUP3rKHU?RqZhpxDrTd6;S4oWcU0jYNrKqw359SaTdVVbrZ8C^(uHmT@`C zbP-PZ2xQiA(xp`jZN{;WqBN`!AFldLN-S}I-v|5~B)BFt?6_WW-D@D%d}2FQ@7@mD z^>*=FuB4_5hVk4?XncsquO^^yZTbotV?!Yy!? z)92UD)0*gdxRZBuJK(ZQ$}z1i;59WM5FHx&5tPxCx3jfQIa`g( z49Y&Lt_MQ*ph9Z=@1wuEo=6B~8)jQRXoaz3^MWfycUOz}(y8tQT6GX1;Vc6_Lugh# zC%xQ1xIdOp&!I-HfsfMa1uP>-ipi}mtOiGA_fVa4^Kmw)EUk!3Rvl&6sXOonas$3O z0g*z9IF#H?pWYY8=uigpH80a?P;}WW%)Hkou`5Ks#i>KlXxWZAJPS8aA7501@QjYR z$ZPqU7P~>@@d~d5cE1DjRcv-zJjG?ZCYEjr?nr22exyJ3-EZ+@SCZ3KVA#jeMFH^f z+ig|%-1tw4!$!NMA$6ov?=N7Qq?i%n1*~RwQTGjBdD<^8H^%CTL9g|vr9D#ZOiF0j z-!ZGK^N)&nC>%bG^6`#SzlP1tmI2U&Hn~pS%so&jJ*#)3e+~sUCCbuB#zZJualO^v z@}a?wjBsRXoDM>G#Uc@BcAbWtU#u22YHf&mVTL!9Agf*w!LrpL_3MGf&AtkhmDu+@ z@9S{_D>ax!0ERGi<`=|?Xf`mpjdmtEdg-Zg|75 z2Z8pdz=d4mV@RW);2%bExKx-E+a4H>Y>;z5jyLfG{hUL>%s)u$^gVV)57k4Pwg0m2 z1(FKa{Jsjd&LLLTs2za>X$c@->1(YW9EF`f>r2~_`Gd9M47FP$npGNkmDyxct<=rl3-9@f=$NKmC zgXtz3@54gqyWxkYpIcjUrJSsdW&wCz`AUG@d#K?7!sZq9kf- zsQ=^oYC%t?-U9nixjEdvr4BFcBaNExzi$erQ;&jxw5363QWF8G4Ch?#vjR*1cJ=gn zL=<>?eL^@s{$7Ic{pS8y4*c%na7oZ#OvA_?_#`(}G2k?9!HvcBnHtOdg?3zj@8hKq~!oHw0;{F7V@bgWGs{-WUa<$UUk+_bxtsd&R;kYh8r6``B($566wRL zTn_rp&&8KmY$gqa(70isdBnbX!yQDCv5jG7ly_ z&y)W`#>7nqNNM{!(V15k>%h_rbsB=wTA8luma8Agpfm$5xueQLcIG7SCF<~A(7=xJ z>>PXXhLFHKwk)q3nvB@#HWn{I^$3#TluNM+)%2(unJrUMvEch#AC>jOCulIzS;NcH z6)^0MRs)j8EJn*T-f20Y2NJpNF0${}w4?;y@EVr1S>Q5Q%T)}bV4pu98p$s0evW(1 zXroAU*cJd2CtUz(tVzSw!;2*lW&ThI5mIs|Sf&U$Dgxznfo{V-4Lp$(N@lfka>7y= z)P2e9d=^DmEV9!R$~6+~@g;ixQStsFGL*RCJt$HoA{vvr)t#yzQ;uFasLwg8(PFhM z37%sl++!&wGB1m5DPc9)sV}tDR!P!y*3e5ZH_<>@nbzfW!exn~ur{F}O5(DziIH>=ShH$Qow>wLQt5E??a0ytsWDt(hBwc)2IpJ@%~GuGs~cblq$`eH;Yq=jw+d}LYSt>Th28P zS?<7TYso)Jp0-U~d_lT_F=BbdeW*!eB7fzn!KLwe@>E!(gsWmtV4KNzq||8NSPhUK z-}3@Vj*;Dz?()aYoA%#owiy;81hk3bq>CXeV3G@|WJ{z?gX6nQf#8kBovD347a$ww zLtg|Xjd$>}(sWP|!xq;{1*1J=KPmqHJ|P1#T~~R)q5VwU&{ojog~XUa-`HQGx6W(w=f0aZ4rBWyzTv=c@2) zC{~q5M{AGHnXZWUa{EI+B(5`?Xdg@_EvNz^Cy-f7o8oG&(Z0CBOjn(5n)gRjrW6Yp zC!}8DbWiH$$r#_Uc;>`hryXkr7|7BbH_}L8px2vY4zseS%`qwnv|SNLv&y)X?^=h!wa$Fp_7PxrqYU9 z)9a>nEf0RU$_{n%gztkr!2VRO$4xR&wd6YEUPZs9llYAygZxKNzM3$fd&k}TEbS#) zGL~`4Pjl)@XcW#C|FbUDmzl*{Z;1rex><8m#!mN zjTgo=-yCWY;Q!)9z0lWAv)NhvDW#9zcRskA4Ha_f!@JI1@~d>{C{^t}0Dey_~k<`=SE zpb3`VIu}R5xm^2o2kZfQ7aG7H!Lr_(>nZHKEf)Dc{v(L^98bJ6ax!5LmQvmmULO~p z?}iN-zwIwB9?#@%`;|CMtWKc|LmPfR9t(b-3G`Nbv1S$p;=w`Pei2e0G9FE^fhG|l;*#Jk00boIXfygdMP}_0M1*nbEOW^b+A}*Z4@hVD&5Xau&tJQd8ndbt zZuN9je0lNdcFh5Q-laL`QTqbtl;=x=vS}qyHRZB020nfg7WxDm$}wKo)|E3)$#XBn z&km-3P2@=aW{B17Fr!?608tjo&{`86Y*7b zYVr|5rJ`1m%6d{G--*~rgHmjw67Z(Q=2J@nhjimpo$!nVw9NerdW#04NrwFYrfyEG zyD@e(UdjKWN$wSf+7nVea#{%WS4C2QXb`PmU+t>We@>J=HwbT(WsYU%J@CXU1sB6d z?Ra63u_@7UXS7@HVwC)GR_2q^zd}P3R3O4#nH{Usg&~Y=4B=d3_MGUx8D${%Y>*WT zlt#YN8!3Wbbe-hdU^`FOjGMm>#r9&~7xdv#FwJs=2sa@$Q?Y`T8D6b?(1Vb6Wm1HP zv#2O}5LbTMD6AbBl5hC(_FFv$+giN9=U|U> z2nXbw!w8l!qVe)cC}lqvp~Q9g8$^m{D&mHOO~G*>OM|lYBFF&mBbqP(Dd9W>tPdVU zXmWTgIo~;~$=jr^r>kBM0FtdgAF@Dp6p@ zH~lK$>$;Aw=6anmrM}L9j(K9ITHeeYLw2ecBymZ0GQwEz{e`eJ5h^;RlG`>8Z6c}h z;B{oSk+)5*_%Sd7dx{8{&erkMxgY_Gbe=J^9BxfX4v7oDZDAz|!iCMMXu{J=mX7k! zl)DYoaB}CUli9bj&OnH@tb(qm0;geYXdf)#S((`R1+S4{PT3 zeBs*U2QXZ(F;-Rfdn*r-446tEvqY1R|kl|ekd zy^|2eWV~V#eF)^E@J=%?p(fPFA*8wg=0^E$tct?)4r%{)-TAbFQs4ywg2{(CjD<+W zM3WWi6BZ~dNp)|bfN?BsR2IDY%~rxUBgIy3TN1sT*W1G9oE9?Ae}WB4SkoyMm`fr| z_MG}R2QTB&_DZN3fYly^zBp4A^GTei%h}k32y(SQ?o_3L?P_1~lfV|_bEX$Rfj1+i zT%?7EZ$ikiN|bl2gr7@Tov)4PijJ)8tS;}Kol(R*u~%h0Q!#}7j06bQJ6>}YzpAUA zr_W2g3CwxdQ`EPAns;{^%BRoG?Cbs+fYPW1eipBFT^>4N15dZ~dX@F54}i>dImQ?;8dfm(x_4~3M=yXH`Rw3tpC@7W7;?6I&$<@4B-ip5 zwBeV@gE7Q`0!^RKkGRUA@}0bjVz**Jqa(IOO4TQXxLiVg#_9XHhVq8E123XM6+*x7 z+WHi5!tGp`axn>pk7St%)9fCS$HTuIj@;j_1=Va+b$b0Y`TrGBt<@#j=8#K;T6IM3 zDi*9$^-ZbVSQa4#9m+0u24lEnw0`NTkivA`k-l{a;JgK8JnsRdzNmdEFWMIYmCF8hI4yp@29uKjpvyx?89P(EmXT1xvqJj);YnHV3S4h&Gn%5uk_Aqq2rl_M#iqd z?%y=7kS0MjxVX^cBIp1rrb_LFNpzw^I#o8us}yl%D@nVuf|MyDSXEypRKd`_=8uIy znw<1aAdRvE8{C4d;1-o*;%eO`m!H!MN$Y$3Ud5!OuTcV+;R>q=eNup|ap1pyAL3vY zJT#7Q4oI9|K9?TYH*Jyl0t6=8nu0pfJ&I?qI+iwUUFbHVzJeQ<{wB`~bN~9_N~B9t zrs<0ZsQfqv7?HV#gXMt#&K8gz=PB0&!FRseFSGZ(}zR03|N=Pvq>yd$?7+SG1l8C*C$&TrO@k{mM z8LyYANkYu<^DB#77kO0g+?y9;yyjg(VMvuk*TO&F5J*jz@ z-A_Hny5D`Bk`o4vu7q_892^DGlH7lRBz1@Zj;8PkAh`l>rDato$jcNqR zA7?iv@?8=eHiLGpdGB8JJ8ld}Bom`nF=PrL5kX{JMqH>oVj4R-QU2KI-!OWP6*9hb zKOT5)d&vI$WAV}s4(o9$@}Wt?x;8p(Xv-iW8}Qcr7)}H~r?=lne&ZO;kwm5gR>Wko z8h02-$6Y-}z>2k85NtY|Y@}+_X$P;CRYKvpxg+fenTTh=M#@Io_8wRFN%f@dt_lAD<%uWYTZB8XSpkUjGPCXTlo3hSi2TDnF^Vgq_p;?$~>QXot!=mr=ZiQ@-Y zq@c2~^_@ZdUBUe?>1y}^v0y^a=d2YhHh@tUP;enCJLSl|ntTB3wDmi~vBN)lo=Qfd;IaWsPupl9)J z1nqT4h$8@ufDnmB-wij9oKi_D6{$?Z8tY}{8Iwem=qW=>44Wt|33vc*VgbEAfUF<> zaIwoVb}949u|&V{<00hINk_G!8=w1`r&|{Xf3wDL7=i!_NCDvl01HqeQ8b42@ctM{ z?!D{AgmB)SUe_$-_!l52Ou%4I6@ngzJ;4(mfQT2={{qC3;@_ah6Jj>U=anG=(2(Jy zdBMyZ#ag&S=y!QoF2hLsxx4^1Nq`bRU>aQL*{`x<5(n_-r5e8=37$lsWT^qc|1|xkSec0r?#1x#Vr!sx|4fWb>#K zZW{ppr_g{BsNM{~iQjzsfA)L3srl zAp-b*DEHx>FUDY{NyRA&mPx9f;xKkJ`X`-M|6MU^{XE(;M)6ctyvY zMV;V#e_)Y11w;n#UNL8)E=gld1yXNA3uu#eL3+?H^YBAT$4%haH_%+8L?HAK?)FXO@c@!wRh$? zk2&9u0O`|t;r;9O==P-G1Ts8cDRzi~R0Y^sM!4ma^U4UaNJPYF#~hccqZ!Dftat$A zT`u(kRtv3T+J%bF&T7ok>N_n>o8F4*CtTusn)fPpEA<#3jpFJChZfy5jiwf$A#XF3 z2euxP?*K$!Ln{$@1O${#UHm8tMX&DPSSDjCk~K3$>l{_8H|Z1P?!Cb$;{Wg$uZizWMx%!x|Ug2 z;`^?rjUV|=sNAo$V8u(ye9{ zU@qt3U?Td2Nu4~k!Jf^AO$5$ANiivCm(ExYr_)VFj?1l@@Zsw1tV}Ttqf_R5u;M)P zt&5-kV%f1$yA@Sme|o0?eu`THYeRR+!qlwOtPs9M@6{>D(k#?iKU z;q`eD5av%cg4O94zwh*+N&=5I{~G)e-nm1fW3lC^I7^5V!T-y-M$A?4Ph8#p;SF!* zPlie1h!p7ztpGtmoL*M%`HaQcS@U=xKXdmI6*&aA20o4VgitL5Z1+rR+H(A|ST$wD zQcCp9mYa;_4vIkt2B((3iRLp&fIalo^RuUQp*8bJk?2$g<%F@%iUD5o$fTmOg^<8u;eH5H`O;r;O&ROWeCW!Ji`OUq zo$qJ3n)~Z#b2V}LXy`}d_jOwP{V6z7Lg;5ZD9hT~X!$c47$EXXYL|P(bE@bL2G>fC zNKaMCfcGqciF)o|(ypuKDWa^y{MVC4_VyMc1~D2gTXu=s1Gte{5tz{AAR!LKNRUZ1 z)C3tjZ)W4ya2KjAW3}?eFDgINly>Dv0CHT8dQ!*hvGXK)sDp`FNGOnKU zciOu#vxT%5u!A6)@`C#3lxQH15WrQ19Z9$mV>o0F~?r)FGM|eYn}39hi7L zPC9tC1hSk-QHC`M61wN|0Yi))T~|gXcri!3Izb+uPKaL`^-?|oh>CYuRk*r(m!+RG zoQ58!7~6ch&06-iOe;sR@O^QHaT-JO-##I7&NTBAzp*gQe5@uIVajVT?vTLrDGxLH z9u|Y}Yc$~D&2h=z`|WK(K0cF71bnc1oIYB6fNxE`Y&^tQ*3lh@a5&~AIPRmm`U{n! zd*_)crzIvAU%E@#tB08!X^am0yX?xgAS1K;L16nZ3=TbirHl zp<8_r`dkvRoZHRM&^c?j8>bFT+uKqMv+Y_Lh!7I2L&3R2t;5UF=p7XHAvqQpDbFRcZwat zxS5fdbbI^{iP9>*6W74=ryqm0_HCgkd?^0Noqw>38*T?_5=NKrlKwF( zSFlV`=0SZK8C(ov9$y3gDAeIgA1A!>XaBw&-16>hM}2ufa;DshN2id_tmhUkw=~3E zH07Z9qm+qJd@`VW6AQmZq=qf?BNhC&d8O&Y8pd@96@x^rR0UdKGPk8-fE~vHG_YO_ z8y}+h4=SMHRKCrSDmKwj8*h-VDH)F^06^=do;Ruk3iXp%0`&+@vZtFX^K_Y190KsWd4G z&=EU1Z|1kMK_{n7>_Mkm##m|b0^k9JS`qn7b9zX4K%|C@slWEn?Z6%v7>aGeaGv^* zwkd}Nt*$CKMPk+n^z}eHa=JheBXasV0P-5ov$-a(cQP=G66J`l;k70DqzEAfVdryQaNNjCo+xO^NPGAM;&szu* zvdPIU%0oWh(r0l6<8Za+-1AE?etx?3h*pz^0>s3AAjv#x-!G=|QpTqz=7hG^moxKn=zB zysmJ5sFz?l{>EEk^QGhTKp-PWyk>%mOpaYBW6C^g9aKV&VSpls*i3{@SMF%6n&orY!3&FYbR4qoI~RrVl=lUNv@!&n}?Qk_AR+t}~_t>u5hNE^x`+s4-~Q!9;PEA=;h^d2QvX9=4D$remGw-pvRu=)Aq&O9yk9 zONMvtP1nsxF37d89zq#&n6E4@M&G!dsh_Cc()M6B#L3g4v3gkqbGYxMy9v(^Qv#=X zS0XW*8fL;Ki#lGFB%Uh6m1#FR*Q&UaQ4kk~M*e}lOEsgN8fetxBPU1kqe~OVoaFSe zacJ-KVZ@$4tH!o6ViWdFGU3$VYsnzi2yhNZ%~l$PAr-D*y${HiuP^`^8?Pw(jP~a= zlip4{Umwz_6a{b5wcRAb>`K2T9tg;RNP+h;XePiDEl%e`84XX}ki&%{+ycIEVF{Iw zcGA4QF_Jb>0-Fa_etz*h{)tYf&6(D7z!0v{`v1aFE0R_)@O^|1yX@khpR_(zhtP6>s zIA%*Ts)ia=OGTGzujq%s@iMK3rt8G&ly8kylVK&h?t4F#qm1C}BzL2fdq;*yy-8b! z6GyY-4U=Cl<)_$|oX??nWnr3|WIh=~e+NU?Th8!}4SIhy*+>5n?MouMW6k#4g!c}! zL`n}j0{(+F_pNBXj98n$sz9d88woN(Wz#c{{QIm+B@!`emmuaHs?VMdS>Dj&y5{tV z;@37m<9>M~uHQ7Kk4dn=Y&=>)lNnZfw%cqQz_0dy_E>-lQjuc_E$b`fwDo8(b`O;c ziZTk#GGB{Z2it_B5w@96ai?)V8viq#=U?bIY72WGwKFKN z-6RGO6?iCe>W{1x^O#psA)TQjMJrW-DI$GC%a&O+=<_G>x{%zU1uu>$ludy;q&+6W zggDM6TPs>;<(&4`&FCkH^n6bZxqD%eItC1SA`N_jxgVjLMy@?r2^|jtBQ42ue=*V< zqgSoaLBOAqw~Q%>pA%yIV1lSoPEm9~kD-+oe^AloPzhm$yPs%sOOSg8zjx_Ho7auY zRMam8KDeTdt*uK!%N_Bec=1p`>i<#+BPja~+JDqZ@!(<>@+QRkx5k*Y<)V}OX+>Ka zEEs!n_DU2|tw7 zeLGPjbB||PcDP?6-4B_(mH$u`Wo`vT()R)V=={arcKp@IH2o(Dd9h1^0uG^VPeb$Z z7|VXEaR#3%MdMjp4F)WULN2jPZE$Ia8VgA+TIOKOX^W_Nih{=bJ?{6nPJIgD+}2I4 z@DteX?$(F=UgXM&SzP-Ou4F#b)lalK4enp>%@b*XtPBzcc+fz=p@35}<1BBcVdE>PyaX z2P1hya@tn;Ob-kZz$V&HVEAz6EDcT@_4`E#VVQ-5tbr$fh>CCrXGn=)o2jF|sw@HW zroQC}nbg`mfkCWezwH&8H^%=jqegzaV)fCNn4Dzjdv z#)SPi2h#!disB~c;!(-qCO2V3`3KXwkV3E3&QyJ_ntsA2B>dwGdo^|Rf#8%p!3+Ch zTq}im!f}huFtFO#`iWerIZhaD9bc+#RsdBf?*Y_!#F$Vr@zAEnwQVySfy_4x3j zCE90Aw;HcI=rl)#gAFpNWyy;L_-0KXDDc=fn@>B6qlB zAny4MbxapUPorGOr!&M#*$(fvh3I!A@<#=yA*MGsHs!>cBJlMdL% zri*pzSCTRINyDa;`%oT5iSdOUDn}Tp*;WdNt+Ajt&)_KG3CjODnMi? z5%R{=dmSlZ?)o$&sW?XxRT3F#D_cBUDb<)JH(2%e?eHd+P=gt)5I+*r<6+NlyJ+D`~Njg2Z+yiKkK zt*Ww|OL~!th8H~3skrUJ&PHbk)Ajc^j0piH9A%}2R0pzVbsTVU=7k`LJ-!jYC(>TT zCeq+YB#_8(nAwt)Bke+w=jHn0=ku3{rDsZkLIpC(8<&jb{R8n@zU{aX6~01b7zYH< zDEDnBu&-CQJB}~5RvVM4!<6HxB^+sa4fJGumQJQ31NCr&M4Z^SbiPu}55im!UOu)nEbYplF>dQ8hecU$eW&G>33~iMSDY-|W+}<-Q?I&xh(L zwirYEz`$C2_}uWH?5N09s9tAkS{sSLSipi@G@TR?o88m`_g1tX#IQSoy4u&TaRekZ;M)iPc#fZ zF9Qhf_jN(P3I-75Py=-!XCo}m)WVv>Y;BS3aYz5UajY!uw4p8MF{o!BkUE#=s4bJK z=uh7q6J;N9OC9G_g;w(}y4SFFgRmmY+#3C40HsDtft!*pIpSATc~YBmt{>8t*K-+i z!c=mvWxL7{ZRdxx5)(cN8mJGeGdHB6NZt<#7 zHo>&TA5Wz=#oP0ez9J=aj;B7)Eo#-=vuiIJ&dBYTFOf=nNXA)P)k1lcr7H5a_1Hl* zHC8t&F3(P$yJE|8$AQI^1iJm+kRwMSKUPj`sn^YGR7L!b1^IgpRwp;cUA1MQEqRkc zwH8wu^}1C17LjS|QdxVbp1TdPs<;E=%Q@kZs(_-e%9fd4_k_^V}R zl9~bp{y%JjlbKPb5&v=pwUdOmDbomK1fbHGrvLYJpD9gwhjlKbu4hf8b}|qS4D!`C zXj_jUjwnc}qyh#1Co-jj(IW{GhzR?v&qv;5yH&Rfvdy7pA10~<)wG+hx?1cGkK<^Dyu?xc!5tAGKLK(nUPLfHHKEx(c-&~ z`WoIfVh*#=rC`UNU9HFPS+}?%p*E->+zG}9ayI<6bICJ}_IV1b<=}L9&T;$J^^fa! zYA=tsYrt-H!uIWI`l%Q;h-gZ5$FVx4s&r9NSA|Kq(ed9^ooOZ2xI7%ab{rTxC=g{{ zr>+y^$=D0Lm0_yVUDU9|=2?jT5lk34+cT&qVZsFUWKV%acw9vlP1xLve6(a9baoPV z35AWnYS>wkz4UO8tk5W-bFoBLxJvFBDSzMbdzaLEO9D%{jg957$Z3& zqzPecrQK2}h<8ZtD62wRK^@)Fl$e^B*Y=DKH6BIp z@vxSj^t2NgR~M0sw$T?$>E@!z6!2(LPu$NRTyYKlP@ln&-GuOevbskHhei}z4Cg%v?d>Tra}7)SzmaLa z^doplI!t&>=yLOu2J-O)*d!&(xsT(j$6emp&)mzI6+!&gJf9pl>H z=q(@IeZH1Tvd+KTyv%p3?jj069eGhPf+Wz)@7?;JyF?Ai6vyKQ#o=Xto-*|N=>VnJ z4U1H#=X(|1%=DtWu{MdF05#C--?F2UEntThsA zI`vxr@Ri4FNy4!&W#>@Eb^9~N{SNyp-2WKiLEq$BW-(_=4>Lq!P<2uhTPyv@whUPs zz92qE7?XD;%B|CN7{l(uhoYMg~J_G6Mz z>=z@n=rqYfO!Z%p?}Ub`um%<22&E`y=?GbFWi!>eD6=c)&eMSH(7^_vfSD_{SSw<* zntOvvDclX^9p!hRwB3bS1Gm5{eC6_ru#gcH(p)2{MqM*vIL6HV#S3_CT>)?utLK{R zl%e3VARjWzWxk1{K|P`A#*IhZHdWj!bDCuw?=YcDbXmqTr0|y{`z!be58aII!Dc$T z%|!`wJA7z%qfM`+_MQiwWG(rSK$`z-uD_CEPp5^$Wh(Wf)`3p~p*SCO$S5^@1Jwgc z<`7dj>QU6k&Q?E9PPUtC^%JMIW>v0^kn?gKb$num4#Q}-bNhDgWOe24PtMH`Gi%-- zYxLikvD+W;|I<2{b~8sU^xt-6&UtD|NaX)m=0xWC-PQM?sGp*PC*ntrfuJJ(>>t*L_^J9$C(@_e*fvOzLK{>jJmkMX0;GYORSL_P ziaI2I#C6T%g~QKV!mU+;wkT~HuWLWMI>1B$c?I_~LQ#v?=N2oUvwgy8+xR67CgIkoTq^2OFYSYXUDVu;Es5@mj|Hs?;!r`Xi|D3&e^v6#u zNC1Eogzdk$ppFb+kU&FsBWGtLFGFTSW_Ke;S7$>*R|ZczTXnVnofUeiJKo7Tqv3fa~kMh0*Y^(BST!XdGVJPPgQXEE0Gu zn_bhoVD_4(bw~Fv9MH2ZaybFVPQ~oHZ`JW2mZ*tPKx@fWQ``!;4YM$*&|pg6@QSL4 z^2HM7@-nEY&5~=;{74`Egl23afcba5ZoyhfjwXz8sOj}Ff4?eapA`l&e zGHK3$17A}n3bI7H!VH05Qq^5kr}J1l6}*3IS@*2??^u3jAFd-ZPTB&3F+v+hnS?9eBZHavfNJBi}Uj0fF6d?KIZV6$6}Gcal~gl<~a-3KO_*j zI3bRIkjN$Z99dK9;ML!2TwJe*9(L;IyHg#L;{aTdC`)|z53niM5h_Xo#~;I!;_1R< zfL%43IA?lb2g^;wjLEj5n}*_Gq4oBCJ>99~SauAqc`+*)Z8k;~9%27WWx}SRNxFCJP<^z2 z^zq2{Gu=4^KTM@eFIKM{Yd>Ao+T7+^{)Kn&K>vm}{AiDS{?sv8fW>QI@+s7`*<;cc zu4c$~EIzJ?66qkE2d`Dj1&%x{Cm2-aILxToN$mnr>@>T2{g5RT%o%$CCQa9TYN{=| z{+bwAmO!M%i$s&FbYwDGW?CZw{=uZjalkr%nnjz!M&w#=J9*CW(|zdfpLWT&J2Bw1 zSYantN&T5e{1`;@*0(%|IE#gH1qK-c7BEBPhW?Cq!E~DWXn9%T z!u097PBtc;j>@~N1~!IQIU`jN;8=mrrm6s(Qgfusvs>|Ao~ic>-QXB3Dj@Wx|7?|F zsvs8!h~{Cl&5nYM?$2+@L~La9pL|u}%b1;PRN|QD;@W&S?B|P-hBi zJ{|z8^ck~OUrw>So3%2_OHBxepnV?ydg9z{mj=vR{X>h(NT?jQH2EQ! zrYtuyL@#MH>s6}=s-lg^z2zy&A$NGs)Ucyq_2l6`&)X8IZ!^;0n%Zx(mrn9(gp933 z8E;twX@_;Z?__J-3$)PyhQ|~e6faSz!BDT(sAnB`+v=CxYKwY@ zeA2b2Lqjvg956P?SGS&nd+Rrz#O^x7_M=CpCW04q2yK|sN{2>Ou#U7yxw9|8SD~qt zpPE0g-myOP!ng`gO`z6p#@5ZnFRi4=1ho(Eyk4PD6{sssU3TK#y z(!I82(7N+1E6{Usjbr%Ck2NSt0H?v~VsTt!g;k_|anD4TotiVrrD4p*c>{TqacZ17 z?&)?UV)c4I)U~kL(++mhtSv72cX4zB%whd9Al6fHX@eioqF?w3uBW~K;J^8VVIjE^ zww}UY*UTSs9m`H2;%rw->24OR+eW?uX20&TJME}Aqv7+@-Y4}h@;%X)oli$C?b5(h z8^O&Ho`PzMPxa3E+cw{m8zb2S!OY~^kN)G` z0pR~EJ!xZ`)B^uqiFf@F&{{~gs4e0DQ(rAT@rwC}oxty}7k++*%GF?^ zV9M{;eZ-y>RbWZ3nK+v1r!wfWAme!MLq_fK+S}C!V)3H9n3L&5gI62X#;w<7?9xu` zO+DZ6$H^h4wDX_#!Pj_G1p6^J{bfJ*qbPG8yV%4Q?Rp;HyUOYeuZ0)_5KhipvE=b0nKOc)SZWK#`xUG0Wyn`FgX=8mCq zM^_nRX0J44I?lj7t)I09T2Fw2*0$TR+hD>lFtPNW`-9A~nh%CgC!arbpYq@F(rhFo zumY3H;n1@+Q|0$FY~LxE>)55VZ0}27;NxAIf(D8+zfVr*>+AcVnR@cgbgo?La+Q5R z=?cwn$x}wfqxLz+7DWY)OjC`Ns8?5>>QbZ30Ykod5_G+@WUoGYMR?;>R4a0q1?YpI z>n*&E@4b`BTx>)9u8+eG!jkRoSLEI-IpcdW%A_YN!z?)t;;Nr+E&5+ubyRB@K(4i7 zD%C3VA9|z7v{70WB6T^QreMDVxEw{hVBPg~vW#@un^0Jt%0M zEq4yf@fm>;7&jc4F5h#>W_~PIf(AKOhAK;6t)2qfm52Aoc?`XED}ZxZhU@voDo8tU zn4XU_{fxF!{OP2z;fRS!-6?}HV29fMlb-Ey!^Aahqw)!RV-hW9ZaU4q(Fktj@)h^7 zZ(+km2kzAdkcU?8l)=8$ZF|hu>Q^G5-w-e5h%o6sS$>zCVY-ynrZib@!i#k*t7db3 z4D#4N>hkw6bp%WT<8(nakIY^JBy?0uK%{tx75VVBz?strhqleDY4uSM5Ph3SgxxV7 zCYbH0@2`IZN}n!yg#0ExnxG$_)U}88T&T*({cmr>ck?yH=Vz2%*Njf8)rYFSK-BXpw>_FAE!Xv`GS6kO93*F3_C!4PW zmQGyqJ+P4Q*%PjMg5qIm;4ay{-k-c+ViB(@OQAK|a8QTv$E}aUDd2`|(QyK%7Arh* z*`b^z8lSla7Fn`s@*WiSX^Oc{H$LNE-AJE<569`KS#HK=E=K!ZU&AI$kon|bp{i7n zh&(d0C8r?b$L4Weju}V@_!~P=i3&n-FfU4_oRS zjF_Y;6sqP^bm1KaW_j4H4e2uaU`dqhjVP$IDyMtm zZ1TVlCoUHAN+0zDXbByP3(DP29IqQHv}FwarXq|>0T(igSY}luvH&2*@9U#ARw*Sc z0E@2IQKV@!)!A~f!Q%>s?^xORg8AJ7n#w}DaF`%Drxj*q;^nJJR6 z3(1Lod$?dE>7{IFs-h#Ro?j&?zF62gpVjk)q-1*%o3-m)8U0)t;w<JP?fZgNkms#6T?b!H-&leAhAMK5v!VUtgq!+D-(# zrw+~n;_Q$v6S%Y5lY;uh2KYv&Q1ztFeN+T(6yX3yC=VpTa=$v>!msdIrgB<4_na?F zhs+b&DDj^5Bue8MBr7sI#G_PBA@}>t>}CE1IE!e`js%k%mlVsS4;&gk8KmsQbSb3+ zh2Gr)-8{(aE{b+7F>aX<6{v6~PZ)V8t*ora-zWThf zYHBrlVbB1J`)IyvFYDE(#vJ-%wkvkI(rAc-Do0dnGf;WBm0_^hAeiTcrSFcf`mnPf zsbK|(rdB{GDyBEo^D@+BJr!Y-Sowh2S(NQkRS=&w04MjzkPgj0mInFA*I?7{UBr zes6MJ$&K3keE08GMh~XyQa`TD>AfE-FSlRj#FJIA7y8w!_h?enU7^9HlaR)7sPB9i=%*Lmtbc4NP4cci(c(J_ zg}On|$Q4vbPUswbHBmJA(Rn>Myg4GS?|4<3nE<@c#6M&Wi}EGK zfMmhLz5dqrw3sq#IqQo}S~*#6jf=*I*_60H9=Xv9soH?qD)+-+@H?UD#wSvwxM@6Y zLIH)VgLrW@TJON)VUMaeN}3#>C({>Pe8m@GHQndIeTvZIRshu4Ch7CYT7}bQ#_XUs zINzvUv(f$$1?PW6xd-S4$82AWkMc61Xp4sI!{P|TKI40nM(hP>5XCeFRpNYQK%bnS z_xQcNJ-saC`hDC1?99)Oo7o?l(LR7Nf6dHA`Fut7#!M03gS>Yyy!Ee)&_UFYoeF0GEYgd_O5Suh$pWd=y3cgU-i5%Pf85fV|M z{NaRZDXR-bshIqhOh@2^?%dE=^>tb2Jbe28)c4W3SM@yr8r9fZCBPAbo>;v-bG)bV zNNN2`?UTbYN4Fd?A#|&HV$FWt#*?FuOVLw>yPHw79SE@cGB|PnY5qV7v+Ap*>QItw z<#XRqhyA;8CI+DB00QW|E%Oe~N!?<>FG^F_s;j6E><+n%w>HEwPXaJ2~e@rT|Y^ju_&Nn>^dsErQi*8l}lY z(b_|*|H$b%*k+`0(#~@TOl7VBm-d7^I{w(kt^=*ruh_k7k4M{f7c$f43E)p)D$-%O z+(ENvQZc<{K8wR_5O@j0c-bI-)JRNlliA@imm8?aIJPlEMQ^F$%#AwK7oyW!?W;7j zd%ToadjKCopaI+SXPDal(K@cp;TwV!O-YeiA{g{q(nF*Jd0o6jF;%I1M)Z#&M`D8_ zC-RUlWvmOHa4xgB7(-lRwJh=KXr_n(4GV^vgn5<0q7c4+y@5{nZU!NNnSNf?s&?H( zWObI1`&Y6tqY2fu@b5$K9nzr=Z+FSq7K$h42tYld6+t$>cBOS=g8B;EH1tSdQEa`y zzXBFxQ__TS?{gN<_{TPj&$7?cLtl|V5ujW+VKIHlWZP=eaXU@PCii&LGTHXua-33{ zI+5GuD$;SZd#L%Hmz}qYX4)Tb<@`~;(FgKvf2rT|r`xYNUc5q{8ya0z>6SyL8T{gw z_5q^G!`DQW51$2BdT^Xwk+sHCZ%$701*0UoG(R(6N z?H+YSVTUG<(2d#?S@j7kW`bFo*S1ysK!69<`emhove{Sz@7D8yKGC-Ah^5W5M ztEuwTM0~bdfVEKA*q}5b_D9b=jz4=sSJdi>ZR@JA?4VFTc*KK6%)Gel)Qfgm%G?2LM)Du zS--g+Q~m>Tz&`9yyDkiISs$xr0O94w`E1@eXRmabY23H>M!GV5lIi+%-8&4f3Al4xig0uN*M>Cg`phz+`;mS$bW19+PLs>f>ZRxA zVGrO0u8DR@{#z>|Hh*8SMI6WrtVQQ!5aE zeQ%!`xLPSka5UUP!ds7OB7~Yd*H-4othi@x1E1Dh25#UO?eHE$2ySi;RI~U0J+OEu z*~AQ)&+X==xQ7>L%|Y0}0b~WPP@9aWh{A>=S5e%0Aqj#x@dS)mbaY;9vtAdp^>+*M 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

    p6pV0w($naLJ`$!?P_5q-D)&csl3ZcY1` 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%0Ae^sMU1zG*}PFsY6y1P^fQ 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

    bz z*K-PR&?fjadhG7>(t=ROqgfa0>GTmK@7-TnXFIw(5zTusdot)XnNkpJ`FHIbcs;4` zbaa&4lYQ4b7t(P7P0OY^-ip7`bOk0=T}1p9b<$t^dDYhK$7b#T{X4pYoWs&3L;HtMk(S{%}I?N0&cOr%$&bqO12$SC3T`7)7_2zn-@SuYfPjZ#oGTnv5*m z72dHEKV0MOp?I?bo_`YK{SVOt!J*`dL+_cm*^IKs(#zP(C*Dvp{&gvsZ?SVQL3V6; z<8d}W1-!ra!fTNJ4La$tS<@r9BQ2;Eb9Be7=$?11Bq|AFkh^JP@pIx;=onj*?UY0y z2mubH?Nnp=?3_f*4lwRo2QrkQ)p;j?cWht>BiVg7Xm z#Bv(c26+7>xQmNVmF30huSbXOE|A^{fNO$XnN2v5!#=N|odul0s6iETsaJF^>M1d3{ZC!2kJ z*z5#gkv5f1##Tc&$ke&KzqYYPR@om|*}Y0L&PS&nq2_s!RNgY-YM{E@sw2@YKR;0u zyUOkpeIq4%xjI_zMLf}+_T%|gdC`4^D+(;lOpYY}!#(s>Tw}H#ws8CLOhWISG!E(e zST8cN!OcF%O)yXM3kcAqX$suIXR-yhbZr8@fmRm4{WUBBd zwl+FRc}KdaR}z^OXKN!ra(NX^e*ky7psg#MocQ|hABivm;ePnBD()w+y0E4~f@a#P zZU9GyW6Twdsko?=gTv)V;n4?emEB>%C{jKb@7T4^Mc(?ue+0j6F><9xPp=W3@frXM z=*q&%)|5FBPLhPLVqi?c^V}&%GvPjmWVxic$`%200 zj!_(+)a)Sciu>9h6|T-As4G3(>{sTxH5sm5Epb_a)7D@)GK!9m(@M6-TLUVI zBPAn|urw*33_|s|c9C|=Qf&f&XiXk*5;mz_EW+%kmID4;*jMpEYYu_zegW@`frO5f zO{2!n!%9BpXYDd;3`Xv(@@+R9!l){pXn4JrDm{PHCI`Z*ZNAXST8)hy7<^l?HdQ~C zpfO!+9%=NoLEiq0?P#j@7i-CEqYcW#IZ z44ZKG@AqP_u3n8uUccP`lc98xg1;Q)OtC1?N3u$;q=&hghvGOhuOw$|k*ZlVarwm; zi!Dq}Y}g3qFH);-{c{x?|Et?9T|qTlzAR~U*h25?1-((zG`-jTt6~5$E;p>7U**Y~ z`8Gl1Uu@5tu`JLOAVl@_j?4Jxbd#+Ay}JMiJ}RQ~HLZBQc^n|ITzvdlXe3OWo)e%~ zmV;2PZ%|h+fsxsSt!P4?ACTi+2mI|#kg~ri>HY3`{ZS}Lr7G_5?fs-Z)$k=Fu7pw=!cu*(Fm-geUXH{&X+Ep0Q+#*?8HACxOJzI0MKKEK=A_?NxG zMkmN}G)`Bq`PtHEsK>Hi%WJ0v@+4kP9l|>B_hUxbnB_!OfTIWxZd=7sV*Aen6YoOlb+IAf|u&+Gw(5%k1N(B;u}& z#N=YX*2&guox`5Zh(QC|ah)-GxbL}A`g&UEk;jxNUU#3b{4T#{N?YcjxpP4HQNSRI z6V9?}LKt9EllYOYJhn%(!xMQ)pi1zrIzK){Kw{L>bB*gYqfixLjo$rS^E;cPV6YKf zLiAs@$Hfz1_8NbwIpgQffa9Ca84ro|BEN>x!zZ)r1chr*!Q6Q@wgiSt8qzGMqht!fz^PGo|J1bg`A%QWnkol0<)wx~hF+&aUS$W(P}) zWa`JZ!Cz9DxtX;C$TBKOc!$M~L|k3^mM~@aYI<*F_HnwYdQ5+vNLUad$#|f-Ga92T z-^&Q39l~}Msl*9g0g-}Jf zS1h+`K|+Hv1|d5zf{CnQL|>)4%=aWYj5es}dQZ5X{c0A78R~+K^nKZpOHU`InC_Tb zvRf>K_XG0_Wxj_{A{Tg`G}*e5s49AQ7zq%r^@R3-l$^t?9og;3>O22_u!g2hcs4Xq zXnvk5Y6FY4`BLjH5@6FqyZ<8vfxhuac#%>(`c3Zpz z@c2&{$KR~VCXTvl6%~#)6XSR@9hNeSQubI_VUW(AFLgn!+nD~YHA%&iPGfd?1Bh4j z2R0?5F$KEc-zRN~kQLsrR4c)q4yi>@wTE~Ajdz5ak0mncYkA2~c%V&#;4lD1SAj-H zhCqxtKt`V{UfUyp8huO@%5$x=ZV6JT%hlbR=31S}LRO!N5t3%$RUmXe=%N%W5V=Eg zfLd!7Csn;2nPS)$7@79MZt8w90i!Dr2}rAmvmgonsGRb}nNS7Cj~z92arDSSPx3Oz z`>tZHNT<($XuQhWMqFS0eX)43%Boq|aGj~|I5>bR*ZEJQ;dC*ySj)2W#d=24vp7EF zXxJGMAg@1Jd)?_C<4UAuG`jlXu(NV&mk@9xwftLMiq#d$Fik%t;me-;6SWm<`xO70Z8>W^q?So2D^fW7 z_SSTu*b_q=ch(lu1uOA=xk&ES$ot~0qQvF)p=6&!Fi&Dq_ThB7dE!H_m2b1 zAW)u3tl#7nq0v_IEZb@_aB&#WIy*akd8+uL0GZN z#ZP?$B^(^M-ms*49sYF`zb1mb*S*JbG_REWm!c=m$J)c+Gl4{azem}BI5Z~}{B~ zwc8(MJXIhwZJm{EwY`%@=HJ{TbG(vfFw7}$o5$~$okS87tcDoW_6v*6QC@d7+mxgd zi!xY>~r(ImZtrg%Q4xxfrHp zUleU=_q%~$-Rg|QpU-MGKC6>TLLuW<|I!N$c1`Xz71e8gtUpvYU3_2ZUkV|QV$>!6 z5w|8wR-{E85$GH$`p^aG_w`0tn0!@xJmq{??hks@;t(5o+!C#s1l;!*dT!m5-+*1m z)*oPp4nPm&UiaMT+56>+=~4bKf5}4G^`zgmQ;>ngTJY`a^Iw|#!?@nFkMA>l1L?}5 z5{{|O;djs*)Ac7?kA- zffg-CvJ`o~)Gm3N&kxxQKY(e1-aOu3^uz3&%)%W<3>I1VtgmW%zMM=Mg`ccuoOv2e zl2!JW_EJ+aCi56m4W_v&G!Jqcbbw zsK7r?MwSDf#hTE3JUo^#2`t^&9@HluJ~%4QK#c0Z_&L6@rYdP#&z3)3`CacTm;-vM z{QD;iq_`Q`>h<>D)YFzdNm|fhz}>vJdx1Sjk@tgCbk_$-FR?F~DrTa>E;zvP{Zi@c z*Ry?tRo48z9y7Z}Y%l5uEr*Lflnds+8NK0mXNm6`orlrbn7M4|+~oCr^!YBn6)S2H zJX}_Y%kX?p`XneNcGD~wE#x&pJ!W6n836O)zGx)c>)UJ+%LsX13B>ROEJV9%NAB&m zm-y432b9od2OJ{xf32U zIGt53TdF}tw3+^!5oH^c?n3zQ1DMo}=DF@FG>Q~&UE*Rms&{4< zsiD!;U8QmxSK27?I3r&^LfvT8{dQH~#W}l_Ch-SqI+^%>-k=Fz z2`|7i{mbks#mQ^`XoS?Of`4&DN@I$gR#5j_E$({j$%#50)VKhUk0E{0KQx+y?@O5@ zGo;X2zS#)_?WBH77v|IoYblTP;EmJ*DAy_D=M*t`_BS^XgPpBe)BT;A>=^g8O0Ts2 z*35xi2aM9CU!TcKEQKxb&*qa?=5FSDXpe5f=h`>{Axfq!(3#qsPUA~w!(tsytG|0` z4|JiO=egMnQ3=5N9+?a>9yIZ9M&GYBQ_RfB|=g%AyAlT9MKaj#YkEAnQ{tl_sd z3(5@i#@l1q#bkcXuybT^T2-;%RMJSdp#NSD2l>mv8Jbe2U>AbS@W9 z)%1M}8uWcMCJ)zE1i0lmcpy%2Zh5LBX6_V;rfp90<2KTaldp<6JRtLw93EWxEFhSH>CEF4QcwNp{DE4$SJVa8^#$b zZfq#}ZyV;4M}r%~{RjV+zGQ5ms`TQrOe!BN9KGzHZBn(Oc zEEVZ_z{-6tU9>U!VBaL?0o3WqmQ@>0l551o9)H*b=LAl5f-d=M^37z+0_t>=>b*`B zC<99|g{~u;=RrNGg74O20;$vUoEqUu{IDKju=NOOAi;#Pl)a`f?6v?cpiVa_36d~! zoIbR%lv1a3(;1YrwOKQ5#xW1$@y;heH`qC`m&v8f>WnSk)+`YKiXcGRy!W1;9v7z^ zynmntNAJX$32Y`GtXy)fd9+O;_59wK_gu3BvX-f>f)%u!f}|tYy2d}&GM^3EvnQOs zeRX=lxKf>5X@qIXY|tAtWF(udXlZqm9RyIP*Nb}%pbQ6y2WjdugKu^l%I1con@x%V z)ah5AId}~ZuC@-IbRXFv2vj`otKPQ_)PLzL%5snZ;F@qL33XwQlgBr?fCyr6vjgGz zy$d*BQ-c|A=CGdL+n|gc21%azHY;OolWhi0ryCSD3kra1(SZPk??po@A3l zo!|0mJONWu!L=bG{P*xFW3A#&ij+31>VebgCr=iuB(@gDvpjkt;HH|OqUX$;nSbB~ z)aggBuPMFK*nM%RViCk>T!OU9R}my{(x`>h-wsDAa4|8csf|A7)B?F7^(I1wvZ0^% zgw)&9t1!$(!##Q8QGf%e(Q+p%96n03?>ecs#}{Fc)~3-lv^UBeQn&>#H|rHvzec*= z9rd(R;@(Bht_>J;O7JrZ9vXfL3wXr*n7C4=L>t)D2p^Juw_P$mTHY;BWnoyocc5I1lVB!VXDBY?}k0wX>DQjsI(oJw@iKf=F|J&z<>Fl<{M#g)0o3V9yH-lo;F*}A zI}FQJgMy~fMtqFBm8!efs=N;LH27u%$2w&NcBN*SV|7up8tu-(+<(1PAc{#e!22w%9H22Ql9!$W;S=FToEyR#j4FDQ6D z+M&YL#Aj|rt9!GlS)o&Wp*(ke`CC05D2BP#a>HbG*4~$cniijjW4Bs13!nEdym*~C zaL2{JNpw=OpiVti2NE3d#DKIYDmbN2KCeV#j4=t zIcWx2B$IlDF`0U4?xkQI*UbFc*O315`OD9K_3Ut@Y6DA?;)z*vU2{~U7t_vGNUU9( z)O)0U{p-V#>VL|rT)H&jnIJ<`n}*@7R6X&&O+EYFolARd^s;a+R%Ev7G(C{tY01#;_D8u{Oq){vxq{(Tfjk?S` zq@MlmbU#&VaL+{K+`0G&zR50<%j^d3a-AIhfPd8KF>)PHz)EXUXPKU~R5Q7a@8PIz z`}95g`l~qp$yZI8f5#KgK=?gLZ~BRRxQ% zIe)?#(Y&Fnego>U-$VDt|NjHe)Kw?>xpmcv|EI3{O3VE$y6R35<+$g;lmKc$?OIAe zie>Pae;+A+s;+wZC|&idU#?4#YJ%E^6+^H=q7kTc%gN)wZLG+6_BEzolCJtCqAe(S znlNDyPaDh8YYiZ@T=umn*)$8l5WXids^gh?F=FiKEw@dw<$d zZG6Hho;e(-HC%;DOrUZ2ZMGQ~oz$*vusPP9n)(9j?z_z|fhv>4XE<;2*2yjM)Itof&t!A58y*(W# z&Wo1!#y(T(oUFt@V^G#!DQ%3;-f)`tzbWaOe+B_@$0?6kPSXshcdMc`aY z%4PHRn|Ht2<`SqL(QuWF358o-N#O{WYp+RXQ1{);i~j=L)O6Lh*1FCt>LONYEca9j zEIIm3-ua*BCp{&?VulP zSL-A)R`5p&kvI9~=~1z@oH;w`>ag=A@$8hPv5TmpS^f$Je*!NW(l-} zs}w{X4LO1tl~o%BLz2x(=;Qc){lbT1m0KE>BHXLI_HNAvPSD5(!~-sy{QU9F`Mfg^ zSo!iLco`qJV1H3bQ!UnfB&WIA;PUw9r}Lo-V`?qJ;?`>kblQKBcXi2e<~Z_7BuIe3 zaR3nPR;(;}RFZpkPrsl%@8&#;YDZh8(pO)@-i}i>0(N$)>H0d>5`W20mVbKP=pA0eeEIokf5u5U z6(+m)k=k?Y@Lg91%54Wz~{{s`XL{^)MLx<;Pk5 znaVqK+!w|xfytwV}~k$-Zaq;r{33g$VtkUJoo*AxkHntS)vTTcEt99&xWWNsQw3>GyWC1h3^Q74u| z3-kIm<94KArY>l^L*Oh>MO!a@XaAHvFdXB*LF)F4J%v~VYv=0M!V9K1QEhF}8iP-3 z8Gha`4*FnQsLTTw#1;z%9^x*5$3Wabw^lVO8{DinLrAg`nykL7)D%|%CMT|S&cl1FFF%0j&z?A-k{DSU80yo?sC!^c z*=s9e9_CNqUlN)=r8+ECGuR1IR#HzTY!16W^*q#@kEg$0^!6nM6{EOfb83@tY0MO# zk~T0UXTCgy>WBJnLvlG-dE6E36jnP(BUA#SVY zPsT`&M>I+I$0JUWdQbiN@aNl4!AJ)0qxa^y>%8PntX8zDj7}1#8L+?6dR$)~vwydr zsX#8NnJRtR99Ww4GGg(9Q?>qy*8P?2w6A1RP^tFWldX1pz^=nmP*CTi{?wmn-OlY; z#w2eOpg>87GYp!rO)dSiZNe!|*QYMRq7GhpQ7wuvU{vBVv{F>Vqc+~3KwU4Z%FfJB zEhUXs52~xBy=0;uq05-*24VH$xx7w+`bU2@xE(5Kl~NwW^4e=R7T-6clOhRA+u@bp;~S)x zrI>0vF98gO12oo^&qt}Y>mJ)-R>J$!k9g$IZ;uo=s9BY#)w!SkRu z^(R^%_h;h;Q=*bWVR*qkfHqebuDN)yaI1&+4<9c(w0AjF9J`x0f$W6zON5}D9x zE7*VAKd*1M7lIU+Mx3IcL4Ur95xEs}IW0v(F*!W`zWjjWKa*6!;&qO+e|^(<-HAa| zWF~&zjz$t~oF3m`NkN@Fr$kEhpjoL~MeQ)44;WM#wj41T33L;%tUp zWD?ZVCK8ELT;GeCX4xbqqv)n`!qf>2I5fX+;it{wpWpwveNpwHyMK^qw-e@?JPvC~ zt;HL}Fsz3H-TeBNoqG~{pKb0Y`l-{gwZ?Nt@{+IyoZh_K)BF8UNts%Ep`kj%t*#_= zpo&qgG_I%3V4vRK;@8XWo_jf7Ye*n1ww}&UP@DJIL$C4!1X|CVS0`TIKrf_4=4A0I zJaMdnV<2l8Sj(R2+kXyijooi+VkcX75}Ft*G%UTJg|vi^qo1~f{RVCEtWZh67rEnL zn51HlE*LXtR5}?9_8*`=9uaSE*L$0#hPx~){V}FQ80t~d2-d>xX`~PN%5UF(MZ1+) zc>vY{y8Gk_(P}Mhck-meECsjQYiK%AghhlSw6R0#&pB3sbbwRr(AM~RPL{eHsuZ6UX)t0$oT|?^xBtDqP)lgbbxfJwD>->;^+YXY7LB5- zpJVk6!U`Qqsw&B&u=G7_v`)c&5$GKNu$;=!+o|0^n|}zXPMx_CQPbs6A4No_`#cRQ zJYN2~J*qHWD78X@Gjl;%FZn90&TbGBjDo z8}Gx)c{J^+a-E&FH*g4SrBWuS~|j3`_NK! zoVFKCtRA;B6_Rl-sQ4^ln{(HdO5v4s4jp}*Gk?|NcBV>-!dZ6P;XRZUsf<(#Z8qGA z{R!SVQnxb|R^uVZC zyj))w*@#dFbP%1A@0v@~7{xfB?x&H?1nPE*BH>+IG`vSZYVq1rQjJxM^wFuGPO5#e z+bN3nSVNnnB4jf)W*WYcpW+>C8K>4bUVrB8HST1o!zFOkklc3p*d9>lh<((aUiolT z?ftETuwmWgG`(>b?!D{24xIv^Gxy^mP(R<}@eS@oN1B+?q!^8{+e~yu*QsMzHD7vY zWB&REsh;5yqSQojR?1CCYP)+vcWkxN>BQQnm-qX#IB-GlBr+)Zz0OkALsG0e4u4G@ zdMKziR`(}y*u;(+t(xqsK3VzqN{z+o|7_`D$mQw!+U=z7N(ECT6fr9nyMqb%*gT(# z;S{DvyuJVHBR+1A4lnGiSW2jIZ$820b8tb6Y0dcX82lD&MP7j?Xkz9pX=j>rY@VuW zjy(tJ7^?fpij2yFwF}vN*^vAMnSW?{oIZ-{VOQd(x9eNydHNVs?lh9H5EeC%F?}ocd}eRPzMB=V zW`}hCY`0GfX)~xT@^s59)j79h^In+7GA(o(@_e438N`=kRcWBvN=jN*@_*zrMGnaS zid9$Jnl#avW`6i(>UOev53CX2M%Jtm84Z_uuz1f$Q${vXeYv2x0o< zoubfs-6Ii?k$SlusaA3=vG@pHI0}q5T!|=!=jc)nYaO2Nzn`f~-KJ14;EN%|A|2rD z4qX)K(EB~lAMxYyu5a(Zu74k45M{bx@;ggSC6(B5GFU2i0Znan7_8bO%5NX$J{_9Z zg44>XeOE*Z>sa0;e+51D$=e_xK3j-;o7nsOnWMt@DJN~1H;(?^f7 z4&%kYvHBUeYf)i<6r#JoL^{CQgkwT!FZ zI3dBLalszgdA16)9Fb?~#g-gi(END1z9(aT2}s{pxmu_Xoqx)X`IyuZT@Dx2H>k%# znd)Vaed={dFGbc#MA*a3gf1~vc z#%w}bVTXJUm^A=XZnkEDkeZ>y=_t0}aJ{^~{9nAiUXB==?zm^!=`LzrVnkH-TxzY= zw&_2YKN>b7Scq59oq>JYBj7D=msG+jocgc@dElk_ ztw~ZYB7emkdKrh3>Mb7e?zdl+rZ`vL5zyu)O%QgXe`EB5u5sGSB(d6wFqdP+6U4l5 z$Eik+poV~KDH&MgG;iqsWOc(OU9Ci)zG62h)~=~W84bFerggl%e!R@-ea~Q7M9swsPmjNkm)rFx4dB`KoN1t9BY)XyiF@uoYqUGh9}WiA_xo!gQgE(> zr{#)r0MBRA-s}>1wn*)HxTX@S`!f{^EJ<$@r4lDUt*JogOMY1{Q ztd#H!m&t1iVLo7klfh2Af+tkpV}?OpRKuLg$mg^$Mrcy}s>mVbw7MqY+9}wNeB}1f zx>>2cij?WoTOHI>nC3pz6;<)HAn@@Gl7B!eE>0P$DbM%K7P&g$oat-0K^ce9s_VNC z_O@o(DKO5X1$8VwQhe5(gzFZDd7Cz%tw|nI@ zFt%DrS0ezNJ1?pf7F4fF^)#dZ@%|mEmP^eI$XdaNru`36%6lx-+#XU z#vp8!>M~6?(}1fjsrdiwUG0usM{a!;Lk|$KK1fyp>qYW2PazbGEL-wuq|A(Bt)D*R zjJ2CMYu_@wK(gN1hzhG0P=60_QZF$ZI42mpTSky6f_T_(W+dEZ*m2x8!z_lZn{sOG7UkycH2!9KYb0Y%CoJSXn%xOhdFHr zjVy7HbV(K+T-#WE1+B^z%R*A;pH4RyV6RPJLC|z(5VCou{DRf_t;#DiOlTCne`7hL zQmhSnHEA`ayxBbR_~|Q1ztojdL0&7h*$U8DgL*V>5w$R{U8qhk78)uJNNtOQA^3W< zK~6=Z`kHgkyEy$gK7I`{pntXd;=`Di;f}nlP@9Fm;#ArFJnSm*23lXkMwkF_NezKU z&MHuo@){G&geci&fb%r&POlhBRT?@+5a0bU`^MM0n^nt;gQk{E(jGwlcsf*rOo|Rf zZJAc9)!NE^a<2mu*UhuQuS1PKgs%rs8&S|fg=mo2faIP%1gtho7JmY(uj4eZu;f;x zwO$ns<0!QOF;ML#`OiLHA0Nj3@v3NzNvE+|hBAOBWEN6O%P}mxTRZ!7ywBKEO5Up>4PBShZ= zB?hrH;Mf@35-7R$rGJ|Vtf%t}vSHZ7P_MGyR2RlLmYn>lk^1Xn)31NJ|2XCk$5&)C z&EC+%LI6k2*}{^A4pPGi3TZQY_2WEV$wLqYa1vL_6|9T+TPumCqLF~#1nTjV=;@v+ z`va6bmLOP@K1az?$7~j@%xg2g`K)qxdV-;db>{~j^v&`={_U#|^6vF#s&D+u{q*_GcXPfe`OSxqPp{wVc+?+WzkKcg;@|qKZ~T$J zqIGiTIX~QedVhca?W^?an|QC^|HtB0&*e_ff3dz?uzR<(?mYa}>n|VqPp{wGd$9+# z_18;(z4FZuZ{rp5rM&t(R%*>xEDcmpCtcN)OV4#kbTkdnU*-e9@z3-0c7FTn{zE)| z_;CN-^W*=9-qT+`+MoaQ`uW%2u09*+zt;9kQ~k{)bbs~XMw#wtJYtJ+?v=ndEslwi zvrv^>wj`GL&HbmpE3OnGLT|_2+n?;=&){S-MyeT5hfjihs@SjvGq9;S+Mh|b!?Njb*MI_TUm zaeo{b^HvqQ!*n`(Vns{nA+zSCB%BJVfImq(Mj~nxrPH00lW&;QH#qlDJh8N9oNbmO zkaOBqnWi@K2SbQlsFZcM7EJvD2K_7>f{hjBPe$((+(nOh*>IoNk(jcDWX(PD}!6=Rh-HIz3A;5LR{mXKjU;d5zijwLd#LX zle_aw4}YCrMynp?P>|om>2!0N>@K@1xG{zP>zn|~Le-734U@fO@4JWl({Zw1Sy?7B zn{n#Vyl&=Cg)|y(jdu#1ZoHZ5`hVL+yv=5w)PdkZk zYwo+rLtU9tu(gD3jINVa*Vb@`z{&pOaGbi8?%P}LLtFM+CNM>$cbkx*ZGZcx8?VB= zKHG$u(aoqjIPSJHpbYYNH*!BUH?zI(9!}4v*piml;F@u)M5+5;$1SZWtykMTDtB`_ z9VgCW)s3q3;&IC8h~3RAsgv|P+uU{IpN`M>_F6~c35r3*^NMElC9Bn0%c@&_u+Kn! zce;Zb2DNfdI*Z}+G{eXgsDBkIPC~bepI?AF-J&QN5jHEOS+W(P`76h?dIR-)d!>f4 z^iH=ZhSWMi*RGPHJ)Z^93a(-Csy%9OcY3X1637Fb1~@mLb>MI>Rfj*Y6{+z(qIvV; zE7yhPw#v*zw2BUogb58f9+c`gwglVw&AokhI80TrbcpFy6kV_Ai+?U>0_X!u!7Zgk zhw0Ww?_K+Fbf*nWxr%WrLrY)CMQY^62k-Q`@|zE**YUur&b{O47s;k5x3W|xa8~NR z?6y$4`8kf)t_f0}QQhSGS~TQ0&032;-Btpky*2mo)8pwG-@X*P$0vyMH(G-~P0LNSG6_=2_Kgf;FCd%?IZfs8n$tj#4NC_%*Rab7T)) zu#mg(y@c<>+tc&n#iP2K(Suzcond5JYi6U+q7mLawR^ZbJ)Z(NOj@+s+Z=_O2E}a7 zoH{Gbt(mC~)A8v!s?IH2=Imi_;^lm4qC}xs#R+ROoAU5@I)5V=B56dGc$;oPE!twc zflB7i*vH;Z_b8`Z6LR$n#5T0n-b+ygcivBE-o#Z2G3-D|?YrU4DZ~rjkmbF5D7Fv6vvPyCc0J= zENPC-%HEJdJ{%`BtVnf14XLZ?n2}arjMRZklfARLr+@pO4u`3f?!G!TnOO1yW+~hp zIc~jgdY#b2_|OZESNfh4pwnC-k@+y248h=ulsQwUphyLBm*n^auX>f994`1 zmo+>r-m6XdeEg|Fa!|%h6MKrb-^lR}^^gutTO-+9b^kA-_G`EQ??lvkhJUb#n*YWB zA)=PK{(oac)D|bSOwJvarqD-@ZJ^d}nHlE#5lB5M72iKtzDxY7MzQB_}3edbv! z0M$(7G45i)>+SvD|INRPUr|x}CtE^)2q>Mtv+L+l7{3-K-@mvn6P{I9*6Wb}87Md$ zrD!G0Om0evYM)%Nw7&eO@XF7^h&w2y!%+gQ!+#>7J(}-jb%{D%%q2U|7PfgUTJen1 zjR&%qC>40_Xwq7<=q%bxYTdYuXx!0_D!~_&=8c!dUt5znP4qCs6hK-|YYhLT96CE0 z+I7JHg43-F5?*h0xm77MHoFKyV3I7cwNjm>@djD^g45|+9rQG_l)98W)NsP>tQ(4x zfq#^wkX@&3zX0{I9*&g98r1tt@tjIcWwkVAh-zKU@cJnC3sN^OOL)EZJW>;clt-KX zv|-?Z+DuVdnX7HoExiDB=YhrHNafO2%K}D?n^qY)r{bF)adZ{T>xp(RNZq<_>NQSP z9H=>lapZ6D`S4O?(Tque^Sa{u3r_RK4}UAK*WRL3YHD0Z72og(8k9sCSB2{T?ICsJ z=K+@}Ve6wRQnb=1kAF&8}8es0qeffFV z*P<&W1{-Xyy4zQFzE0P1j68CdNq+;U5EDyJGUKQ>4II1XWS`&Oz-incLn?G-W2nmX zfWF&d=w}o9( zC{u1WX=JnP0UxwzEyy7%<4k=+xcFzJPABC#4iyS1DHdu81xpNVO$oc3*MElk{1==a z9*&QPu{G69tB>wMa8sNaMyp~e18j&Fzd-f=^rZ(nofAmqsFY7@SqSt?Z_+&e6W(2V z?~l)wFLzNYoumkK4}>+^dd;wN=jg242I}+t{=3sph#eboPB6;!csQPCE#^pj4Cpbk zGhrdoam>-1$f$sHCE=84VM;PZ?&kC=-V zb&8et{Z)YVza}~!2G;7J*sB|qHFxsM0~&2qh-d1^WwQifemMR#ro?&^qGml|F~M46 z{1KIC)JPk{+}IkAG>p6HQ-iZS)Y8 zSt6p@W0?h`7DsK@q<;E*I#-aC%s{K#Qq}2^4DdkURYLJ%XUxbKpiburg{y!rC+i4_ zI5|*rk((GH17nFlk7 zG}06;9wGzO%>u<6mwLQD-m6_(wxlDf4(8BkEtim4!#t8~Zg=+a^n)u|?2f1|%S%?2 zbBbG(`zy@~HI>a}ck80!moN=qak+I|#qT&^wyF$g3A6PTGJnULFnyk=sDb=hF$4yK5Q9Sa}q3 zKjqHbiY_aZ>m0ju+&({@o-$xxZK2z*0GU@S(+~u0)DC$%czZzIxOCBV7IoOY zlAz9H)=qY}efm;v_o66@sF#rkNb?8V4Gy@dC3m;k8r_bk(`~jR7N8D zTpcGDk;0)Wx-atvd;aAowEQ`flBFeqhr$_Nj;$@-;A>esT~c<-q+U-Qv_1FeI!KAP zx^1?AZh!8xiTb(?Qt|V@y-qrZM>N2`3Bj@m=f=``G&jYrpnh4T+VN$6d!BY0kKT62 zo_&vn70p*G8tR6-Pq0-HrFL zKkid$6icYUE)%ta7vgQ#!H&Pbe(p7bbX$<8dw&{w!L%!?djqae@3-w_JAaR#OZL6q zA~kmd2<+{I^WzICIrY>WXyWpV!8ZQ`t>=5ByePpj8#PNGd(c|DXcb3n-7{{9dcJ<$ zs+LZ)9Z>r(cat;HjZk?_zV0P8Cu=eCV-q=hL|50v39t%1y_paA zFPvV_OS2d>ag6tOTx9Ao0X zR>|+@JV`BqyUFf-K|SDs^UO3wDuU4d+<(mWUqHRS`FcP0Kh7K~o6caju#72;<|S%w z6M4UW{`=!VHKed2nli?j2ftu07$#$m?BQ{}qF$#5$aY@gI{1*dL+cFPho}LKaeIGZ z|K(?yUflAJGvYj5E3A_;Oex}7LRqD0(e-hLcF;hca5$@vWhiGTbn#5 z-f++oTHdg@qf^mc0obf9`(9oLTlgR>Tp&2y>2wn2Tx&E#gc z8JExZ%Y9T*IG4)`NiwgM1_J-*%g_bF8AY=0Vz*K6u| ziq3Oq%XUT!9FNYvW$6T{$49J%*N5Nx5j{%G#M(d=(|yWhg;9JRGmk0!yhrK>$P6pY zVMPnbj@B$pWbPKc% zwFkvdy}d-U;&cqT%_V&P5LwTC62wB#EJhuA6Hk|HDZx2GX!Yxa!ux5@KrJx?V?)Xr zKwN8VN>iU>1aG~qVtxJydCxr@`tGd=`&e-N-MW;fNkO&}%C}H`jepPASCyo#lu?YK zjzHuy#AyP-6x-SFQ^cQNzy0m&@2`X9sPl-v(#9o`i#7D9hx)lV!>5V(609F!S%q+g z^y4N0csi)~*x`{FCDZKi-h1NA=b`)8-EF|aU0pcyA?Ly{&?My zIVpyL0+MnsQR9b`YCXSz$9-1e+duy5L*_4vq*CErg(frMRzC)@XSxOBnK*ablK$G?Ql@sGvuCr*v+k$-{q<|w zIw0Bx%pH-~jv_A6LfZn5f#4+{|0!P&;@gt|V}Eb%lqS6hdBG#Y&dcr6u=A(axp-`9 zXDWTm9Oi%voVA^npsu)YI~ITX{q^M}8wLA1@w>QF0)Is#^5RWtX#*~|-OrDsWKl|Y zN?5W`hulq*Ld}@Z=(I~J{`2dLX>A)cv_u@|8mO#>;W+?wF!1GK`sH<$Vox7aS`Lwk zG(1=-Mldz#cuB*5d7WTR1kGfqU1r)k?{RE$_j1gbrHC(KdcKbnJe7xVRzx}tQIQID z&Q<)zEq}akar&rV;PoZ7D?sg&$s~pjXD|aJ&Z6YLE4s^NBj+#A7ZFOHtV~}tQ^SzQ z@V<0Tt{A0uJJsr!=dFb24mrLoklrgiMY>zD%>{Cd7W-w(&+85(8pS82f)X_F#s;kG z+#+h+AUj+ZI=`&fClB#3^*!ovi;-K0)Nuz({(s9^BW^u9zpU2>4|()C0NX}r>gEY9 zieeR?0>`bX#+T=fw`gi#0cKuwz$X+HM=1%6-I-f~N1^;$P$w|aFgYC?X@ z;a3cB+n3_*%X&RSha9SP+F_5xPNTjGN{N_#hJTHFoL*m0s?BiLnFn@=6Sl^VelGPR zYJaZFez5}TbysS{(szrMVM8~WRw@R#fU0H1*Uc&g)azA*4Z9!zgLUcaoc`c#9tH*nL_AHA#yC&?(iw|~aE7BKsDprVw@=z$qyZ(oxrm&37i+n@_? z8RzTK{M?;lYgnihK1I>T(sK(&ii=Xq%M#v~=S!VM1V%lfrTAJ{SL=Sj0~|gN@w~+8 zyLIs6P!Ykv0fv2c^mUx!DSZGhf&%b1MEy3`^Cqvw%4g#^Lx@CbX<=du$g*a!|ThjS@5_mDLjWKJ#A;vDTSC3@LzrtwyxMiHL zH)No=MXw;$m}6Nz8VK0johAJC#^;yk8!}?^C>qWp(y3MW=0UicXAV6DnM<5rhiQ#s z;sEP3+k=cDeblmw#!Ys!xC~CO`+wWTniaL+31tVahX(v-0Yw4SJn?Jxdw4-ecT$)&2U*KVPrq zjWY>N*u35z>>^Co>I5{Pl6rKRTq&SlFXkl=k#-z|=}h^uB->+#dat*Ncz<34^?Ef= zmVU1aM|2+}tRAdLB?hNebKKg#|N7hCAIE8&wC3I(3v5G#t}UmEr*axJZq3XKr`Ovu zTo?LOB((_=aqixIH!$rUPH#OZbV6wp+l zjvlEcSGdFEw${Nwl6Qw66dEGZ|-E(S*!-d)Phi5xEW>*j9L{P=sgwlL4H0I?5w&wSV1zJPs2Kug&G>rWt5) z0-rV*BGzObZC%3jyiXPi^%={n-G@W@*ISdL3~A*vN_$G#CTaZ&Oca*4gU^9@VKf>J4*)MR4qX zYe5B?O+GjD?thVbz0OI~VbIzw%rpD!Bc#EW4MZUOvfA=F*Yo#g?0Lh9{nYu{MIAU+L zuEh4OUESyW`%ka$zLmP!&RM6&HEVGoDFEi$^@px^-+$kKdVTjnu_qj}ovY|wV@8+h zqFTQJ^l>|D=^*v(4}X1Gg)6bN(O13H$O%JRpS~rsIO%1T>c7EyePxX~!ouAfrBb8S z;LP6*DRJZTwt4K#`h0y^DISwQ(%OHe_6X}6j#_29inr%&@$(?{`kJD`1xmf_U@UR7 zqvw)SVt*ew68Qgt)azV9MiOKRzF5H!5I)bKiF#%m=)7#uIKw_)-+gRQ%L=<{3_mSo zlRB)~uuT!C%e3%8>h;~%L(VX&-m*!pC9+T~87QrdsTr3I=4aIB>uYLrkpjxo1?<+x znGEiU-NY~t#kxo8^)+R@r}y4)bY3*Hty)qQrhkf(mVVxs*}O9p^>w7U^GQiH8gSgD zXJ#+37}lCu+WE32_#pM|=dZ7Wl~cN*2~mLq$TSVdDb|Qd@-FJ_EA7#TsWEF@p~URGRI)?0w%}{j6vF^`^3RipNqSMusex zY=4c5ptsgmeNTRyQusEXPZB%N?bu5Bv8yAg%^4^eJI+IgDCq}&JDt@{o5^#|C1USdX0V3LzSSUpmfF|`@TA^*0;^Ye$OJqXHF5^|Yn>$?-@ zQk4!fL#|K2_X`h2Ju4=)dIvg9sqN?xr{!h&vB|yWpMUu4p{nhaGo*Ri4nlW;&3|rG z=O1mDx0fA1pC7pp3QMU@yZXziZaqFw7^Z*e^{E)0#Z{;SpxyrqY07z@%@kp8J zv1LDfz@Er*HoI=B_9jECYRaRp)l&Nm0GDVaSb2b#p!g7yjC?s zV1#YVB+k9L%bK_as*-oxiB3leQ-3M7HRDcsv{oW`uRN$tC0^U*H&N=R7Y?V)qD&C< zynxu?sbVWl?9>YGUN=0B)0-VvrADg}$a@W+Bf~XVgI25>OE+(dn8$H?qEp@Dn3H&b z5COcD;p}nRB?inmcKvRiz5>n4pH5Gzq}o>xXn)F-r}ZK-ORk0*ka412VfS=;M#Z(zDvW9@y@r&F(~XB@ z57+Y%@7sh44~J<0D_{xstw`OMHKp82uR#XdsGHp}Pp9|I)-a?wLcx{MG|hF|F-=L= zn_}lp-t=_(H9C0}TCD@tBtbemlC6+cbEzG6*};d?^S&uwLu}q`l?6v+4;F>- zYm|iGx=S`cJf1!tNq-GPs5C8W#@32b1k4by<@ldK+vQPr-ye>X*PerPHmV_4c!C6n z@|-JxOfI|qpiiIf?oU7Z)WX+NtF#uHG(yeU{W`e~1_x=_Me6us;9=0TBJ`DflDb;f zm8>{xh?^?A-2Bt!htq*VZnZ*{8fRS2K{cx+vesrOKG_|*^?&qufBG#R3|+g^i&VXK zt0Tl~9C3=dO{UFC{HNn@6V}$|IjDz0#aSnw99^kZZvmg!ZesK4^aL=w9s@NDcUV+1Mh zwU>fA%Vw3q(|_f3m4{qd$WREPS4sk=qv*O=0F+0K(&El>k6|=5c8USrfQolvVqg-2311}bC=R>4GY$8 zPSRFE6m$V^yV~V4Pfyx8JDaUV^4PKjD|cc{aq#7mD(p5g22g*e-z@m#92iAJ0!oQ< z5)%l*Fl9uX+8taPK%LGtrDmP16h|Cc*IEOs6s|WKR%^Hm)UzIr6D+CHXK?Z&96~QJ zs*E|v!eG_8S%LU;d?l2JoGW4uHP7J`+PF}iS!)Y-oV$w$pFSTiUSv{QlP1>|y%gTZ z1GH6e!%Qt)+yLb+eG=^3YE=sbL)a06QThM@du(b7=!LV5_@*ipdTi5(I;?o>N-0BrA1^7gJSgI@e%>O~*Um?S$5TxH(GI z>NYue(^zX5iq_S9w#f~iAI{(AVUBGAYIcS`n$z0vwMJ2oF|_z*7WnyLZK*gtdtkZG zki&^_l%}rk$gABpa%pSa8b$S9pBOZxMka2%8?K(pcS5_x9%~r;y+QUg2LyK#1b59vxwDkr(x~U>)7g{{34nOCIk{QzPlHe}!KZW%tZmcpPVXOPA@8~x zsBnK&i5O+I*32V5K{w#dio~DC=i@U{!c0||B67osNM12GXf|oRHj}cMH2?W>{GMVH zEQ8jB8Z%wIJU5&<$dnHSZ<~eqpAScADv}~Vij%HGri7eYhe1?YiT7-xWFL-S%Y@L$ z3kE_Vh^1my=(Z}!3bc&7UFi#{(`k7sg(-g`IsxZk1#F(xGnbHoYuNNRAayz^uS%nP zYPBYTw5*6zMDtl-TCmN{%-urj^g^}`9H@Un zHBoNEe2$EDG($`{-8vc}Y^GQ~AHM;c3F?UBF6aR@>vjEpjkcY`be6tZ9rgM7^Z+HO zjSE8ofx5b>GByGO#UP#{n@RK2`_51nBPfQeNiPTCEM-gx0}q=tuwMAH4OCUcCQkeLZ?J z<1hd2?MMC3cb^y1cMs2>-+yoR9`pN;pDyq2yg&I5?_PfF{}Mm-w{PORct?NBHRy_c zynp`j;k&o#?VI&)efwXw-t~0pkC*G;C@&AjLs(iIZ1ncsmyi6HcR!9Fbv*i*zdicx z$(tYU);rb@z@!|XH z_rF8$^2?|3*T1~G{^#q{tAT(1EB~K?f`9BnH$Gf%HP^}^(ZZQ1c>&~zKLbr>!H7CH zUFhHc?LXc>JpbLn4tEcCm%Dy{_v?84>vwNpnatM*|Bqemp8}LyPC=J6kJPHnlp=U* z%D~MBjg4)@3((g;_~;f)E>4w#gd=$b^3jVr)C!(mvTU%X|AFcK$De;*I}N`DRj<%X z>xk%;GWR;PRmh?8Bn{mtz5g9l@1GwIN2|rt?nzf_JQYnN<}!G0Mswa3t%uY7 z&)6_6TGgr0TzT@Gr}WI#b0!y{~pwT{j@VV10;&H;OL;svXVz4kKvn?C3brIu7uXgp>$ z?hTbqJ(Zj`1o0QJykA~>68IKY0I3+R$r)0H)L;o*6F0Ih-WYBd9sC}vS3kV`7Fq>I zZNaH5m_skzfIN3Khu{!K8-wkBLo3eG!?6ldP)XKcABU1wD!6|n(F{nlCEb`R`4y|< znP?m9H7_$%qF|7$0IUUrPXQfmY#jUo)rXIFPnU7JWz94*aYZR21}tm)pmrjxrKFl~ zPqO(Nxc&?TqGc;Vt?FRv)o65OPJx&DY-Ud5H zqen0=1Cn3G*e%_Eevj+~||VlEOGG1aj?}othLpWNrRFmqU3ugU%+&{Jq2${1*fmEHob=9VId6Il!IQS zx|cj&KplU78{z0Shc?SogM)VO5(G3!Mukv0w@dcFB6Yk~S;TL((l}&akWjjE(4?$V zP-SD|-V0WzlY_OT(Zk6?|E+zp5x!|eywX&>z%08abvfRiidlB5mP;`8gheQUP6(9@ zu%_Q^19g6sV%OTZQ4s)<%%)|cP0AA?;kM`f8KQqwZ;2-o&gn*(#S-^xms-!Fy0MJ+ ziq-w;T*^YSRIh235wC@NAzTWzwLb=COLdc*-=EK=9A=nKFsNLL<_>EiHV&g_w9mm@>TG z*7tvc)#+TygreNgIw{4h?wl{2r50wWlWG1UZ9Ux-VM)Ttr zppK7HERDKKNSEtg9b0J@9_!`YXl^VC{fgA_R<#CmlJq958DPZstSTY>vUW(m>3$D? zg0pWx5b;v7f%dE`4?MME?eR)m(@DMospEgGDz8!SJrB;-xh9n^*;`2Fcm=d=>b{S! zeVWA0B%Vpq=4+HhUn^reji8)s;Z;O>+J))0_ln+3A{1Kdz9cO&)l(dNeWesuKUSJ% zyC@y+bXAS(NIf1h>a?0yN-D$Z{kO)Oq5N^Y`f=Vj_1@x5*QlMEh87NpW?94aD+7P( z#@ePApk}{+^^56mx6*`CNulmS?`f&Su|N@OYkpEV;_b%&-$8Y}1Gb=@*MW-GbLnf) zDUMOI_bME$VHd2+nRmy8|q4qvxj;^$Z z;N+23wwTw9i7l-D1Z9hsw0IAqFnWJO7Epr`?ud*5)NFfK#|x*^tIOJ|DjR}UTs`n2 z=*W{>0*~14d!;Q4sGsg0PtQ)(*~0%?N)eX0RPr_3r3#{Ja4p))p<92t*nNNXvtV!E z%e0)8IaG`eYCa^7N<}atd^qA>RJY@6ra}6fOaRoeZ#IS4pW*I!jWP|pS&c$IDco&p)0}b>^gcGrh3$vAW&@ng zJT0R30K!%DO5U=~LbX9|wx+*r%s{_lb^NVND?_D6Ou{(vXx*x>GBckN(F%jT@4|Gx z^R0e9ZbX3(1TnV=PoV*+vjl%+ZL_@0K0f^P{&e0c=D{(?H0%=6Z;g9vG!%eaZnJEj zdsn1h`<$+u)xyYOOewx*1CR!!HPlQA&0OkCdv^^lP`&m^UAH4u&?rS~VlrmNv4-T; zkr2`tiT8?uUZ8sIv$}3VWt1iLu0VM$aOysjtqPYkTMkG32B=>9{M>)rjeW@tW}JAO zsC(&EbD2q043}WuhiXlHIX$v#vhczR@kO9js1{Kkt!SWT8&gmJH(IAhcUzg^C6`?k z2}EZNv15{ZUMq~gA-cc7bw0@|m8>{2H)V(iVQ)QXM5lE$O8Qm zvDE*YylY#o1GkaC1dx9OKzz*>34k?D;3?1*prKjt10yvK$*#;Nz|rQ;=thgpAoyANtD738w2b& z(^*{dx)c?7l-nmidmh{U0Tx;$g!+gU6+LP@@$bvwnEJ_ghFq-dfQqYzV` z%oN;{_otqP>;8Y^Slb8@*%POuELdzLAbYL3_YA&g1MGH+Kdgj$UCCJ23R<<)(@BC&$*I&shuU|juGfi~!*x<-rc&qRnYn7^v2zfc z$+n(gS=TF`nnXQy;a(+(IPx-F!PVL*d4WPr(thCS&lfhaNok)Gw+U;extCY~j;Hvv1(?hp{1ehoh9`NsO~2UY)Q}S?0J9gsyNO_>F21dG{NJLQGI#MA9?!>49+*Oz#@W$(hw6X! zTHb29OoVMtU*>_KWH`->Ev0_O)8C=Gy_N^tdAzLRocOG^lDdz*Vz4)wv(>Y*=Q~vO za;UJyDB)_gi<6hh0-50#6^4B$J^|J3t_}H}M zs6wM~aofHGwQ{PP(QIyaU!E1u8a#jAk-9#rpflCBKhhGg!G#b=pm$Onc8rzXKTFX< zY!B5pnMn}#J53?e!VG(XtUrU)^}LF;Z6C;0<_P1Nxm^+=;b37!IeT~b!0L8lRY%@} zwf7jlSDpfL%gk;JV>7hgHxItZsj&R&^rB z+^Z6LO+JMacIzILMM>pHJtgc9tZvWk#H?!owk}&U7a`JCx%()9LQlmNU5*td6P>f? z`E!A$I4i_iZq9^*S^gpqyYM;AUEkxVI`Mi6`qNSxu6a& z01iB`^u{%6{%)tL`GM8#eI0*~-JL}twxbFa3hkxty{9o}>*J}o`g%LTlAdC@Mbk`C zK5D^C?=T(r@hm>hoS#0xx?K)-)!l>LKnwNWdUO(&S!XJ0EXTEDyMOZ8!(h!-xx_MQ zYYa7CVZFjiT6&Ju^)2hWlCYvWvX@eZ?7{-)Z?IAiBAh;r7_xuOER>CsEucaJ zVqY|C^7neU8Q{g^CBEM8Wi%)cTi+|1`zlpRd+g$X-3;37a7^$wR<~b)ind#-C@JR> zBkc;66ec2f6+gWK-@&@Q$lwi}y!w#27LFMzJ#WK35|JqSbCGp>a%a#~&bsp0*|y-R zR%iw6Eoc+_I&1Uz4c33{`8{buozQ_+k5L7-tu%HI7ALE5He~Yw*7dYucPs?@UYRG= zyawxTy%P7*b_?=TVBH>B6Ng|cv*1jz?9kmim$67FaP?C*`VLmC%hAHN=D?ZkstD}n zJ?pT|BZX4x)Z^!g2U^z;aS>=FTPRhj6IrRmN>P@@UVnXDM}B_?>vrytM^8L2L*+@{ zOXl?aAkT1Iw%~9N({HeD&+x2TUAeB*%m$8A(7CLTIV&bzeFCi8TN-FL{m)S(xhPC( zE90zIj=2zA__R@Nz4+xoY4ib{QH8sSmX~)MU{-zd?u$I7SP9haA>}-Hv=+^`@kvD( zR+g_yQClZGZM}b5Z}(3q`6$>T6%8X#XthnCxfpP?p{LyH%QwHiDATR;tP=@$c3P>I z87gzvl6=eHlq)=-x}8_ex+=z4m8(Yv)9y_(ZPW}}Bzn(abvv!%*435|DQZ2mYu<+$ zS#zZ1QT5aJ`3F|Fv#O=5PAy)15=INj;2N8NYEhKqC!Bu=R=3OMp*AgKJT^S{UVDpV zqSlhJr_5Q;oWbksF_2lED12{HFLU~U-A-gfq-yhiS{8j^b$eXx*5fGAGDT&2lF`fP z-C|pf?pf4l^40y-7+wcM?~dOQ|9EaORPCPLmI9x#wZLzTiyGbJ=6MFDFvl3 zn5c+!+W3F*!0L9=04!EYTPkC_ZBvUFR+DLYP$f7mFFdfiJ-Ii;CY=fr0II3x0aVSu z(xDVP?q+z2+r?mhy|~M66D_g38ay>~a;%xb#T=)q`Q^J^4pegXRfY@XEr`v9Tnfx? zvjK#z<;k8sdn4Yx{dkZ>&0 zQxdwNy8ZgYNuV|Q?w{rAwDpb8W}b(VYdw9L-%#B?DuK=RK3??EXZ}>3N|I-CTBpu> z+|s_Gy1hXZ!)B*h*Rbg;bzr6`PvX9tV`e|D#3WR=*ViS6cCw<_XX!wQc_W5qq(KEd z?q7e{NL?RQ(hKi8ae$yQWSA{5*W?UMMd)WrFm&=g~t1>CLES!CJ4-qCrJ}B?R z{Lm><_xleu+~29Kg;o zUq8W{sfmB&ow)yf!+a)_G6wKC9U@zB8B5J3F z^|$YTy}zPB(Y8Kj>KLART}ziR0B(8n#i_5ypI?5y-TxM^&;~5p^KUU0Al14slazTk z$5X?m7=Om)K*?Sp9;No~Y#t;XOADd-Slv|)lllhgdh)4#jv-z^TaV1?NzYqeg;9TI zZJ_gD4I+?%==Y`7LJPtxgDaCGEZ4(l&p|N1l5_;$OmYT27nr6xny-fZ^{ zfdl3LM;}zmSykcduiF((L+(w`wU31<0;dd$cdk`twX^5HglR8Jx*aNOT?-^+I(srJ z=&dl9Oy@$Y9vaJiKy|;f_+CJq$Y_6vF^G)STCu>vW#$Lq?EHO;+wDS09I1^wcI-+u z1}jPFWOI))x3lZ-Tl{VOyj|27sBd$6F9W2w>RP*3ZxU76rhKPJ-CumMl*g;By!7_I zYjRDJ5Y}cXW*Jjw^6%UC+bxZo*Da4lIQAGses#p?vq8&0_Hqi-?FQKpqa}Ys2TDpF zxQ#nZv5%Sgomca-p_=cvXQ%12M)GP)+619qrdn%DmyRW6opmPsxcQl&@(Oh8g(Yyd|1EK(R*L*?A_}1 z%m2jp+iRR$wF`o<4W}`o8(LwE-Z<~Sb(YLu-|k=YgB`iYo+}zQVzB?y%x8 zq~1Qo>WsbL$5R*kU|4^pL8;9ZMCaUwdxy8)+o$l=gx_G@-jH5)Gi=M8KKm+MK$QkX84pWP zJzU`S8?4(0vQ(%INxlHgxNQh~UV&DdExomFF-_K9v zKCOzlL$m!Bu?A1m7}KSN(jb(pT1DpG5mddA`a`w;Q(lJ69V8J$i*%Oo2!crJIOxH$-6Q%D^-R{y6$u>*U zs}iF%U5%SX$sb?V9)CYvdiM_1?GIkPaF8c4C^lKPAMYYjz&@dZ^wavn{f+7>x{bTQ zWasyN1(r6)fDs)<`IJ?C0+)c*D2T_zw&%0f%4~nthsPlA%%{fcufOKyFcrwuz4H4i z-3frBx4;ZDh}PFQlr+EQCzxh~wf(~D>Y@3|A|U@?@~(Er65F=Eis1*SDUzZjAPx%j zcb{P)QlvAB!+Qg$Ee>$>ltnb{pcjw}aM4cm&hn%OLLEq944igby zpt^s*f=Duu17UtSCoOAiwFZh6nq`i|UXc&~`S8*Ha5+-@%uA*@JI&o+V<}{E`;Bei zZ%lDk7_&d}o6CV(W+{@{^UUkKNN217-s7pGTgAyTb&X4)2Z(mgX%m@}h?d4FX>7X@f}Tb7PuF(= zP7xk!wi)i!KBxTzRdR`8L>yaL?t+EOkqYW2+>~MU=953SNzPFvFxdnBBNbMcBh`O^ z%iQi%Tw2{z&l%Cj+NS+IHS!r!p9A`v`(0l+QK|$*L7=)zo`fd7MKPD+?M&6!^V5fq z@8`pBfGsfWlsij?bWAx|DqDuB6{&V4Q9HDsc)lH`Hbj@Pjbv55+Hj&WT_C03%=7Q8 zc=o-|_5Aes=i9*o3oh&+eGm;C=0ksMI}0@oSb8{xbAEUQjgx=>2macJ`Sp+T(g%6S zP`>{Bci#GI-`pl?`>F3D|MDNdf7U<#@JaYh{%(K%^yVkCH-vAV-+lbyVa*TgPd|M5 zt^Z5@(!c*MALTnn-E)TQ`SItsPd|R2v0?wLfBY}o@7kR&A3y(%^5qGC%7uS6I`;2> z`1X;1_rqI%tNwm@{N<^?JoDY39`-x-FXj8cwMfktGQ?;}TQjQVV$HZ#nhi|-SpGK= z`z}Av#|QiI`={sq`2F+KPoE$E5A?R(!0&(e!{`6~_1Vu0^k3`$Nh$vN4tn9k&Fxpc z12A(6HUtG1N9edG*$z0UV)=jfe=GRr@Axr4JUx7TNHP3h{{Htreg}Ka{Pl_d$9wIc zLe%QeLcLL~l^0Dbno=*gS?PK*&ipf?Q(wEq?n^icVeY~FHs|5C8{Yx2QFG^wTX{Jn z^A)GpetGZ`PRWgWD`g5VPTf)>P}Zas)&hOLe9Q6`r`OKMU&4uLm?(cLvT;EijKv{& zfeo0m9E`dBg425S^9o)9Dh6~L;){9b6EfP*PB?2~H>(`X_xlFaYftgL1k~ptbqKu7 z=k(fIoplKh?j4;DhTMJy>eaiYzXa5*`J!AoDT7B5AWT7LUAdHM*4N7^<8MG+zoN#l zHn<3dM;C0xGrB{w=CprEPr1Qbue}K2C7>WrJl!3B+hRgGvrIr6s|ZeB2YoYNfO@)r z>#glSOi7qBLIsgk9d46`6rWmN&RBf|>h`TC3K@!8$^EywcSKrUy5>K?pa;pSZ$Q~= zFBN`q?~PP{NzXxP^xSQU592O$!H}j0t&m@k`taJlgI*-&SeAeH>LUz_w#q4`7m$Gg z);RF9{)W@-F>3qAGg0TY2Z+s)XCGItWAJ7S_;UHdH=u5hQ60KeY)wb6ty5nN1D5o$ z!Wj>YtiJ(uJ3TPj3DBs-ymM37G?CM#y%K7jFXvvq0`=OH#4m<&+vIZY?-q<+lO0&k zpsp1{RZb7R5AT0(4^fne6e_8J7XWb~T}()#w6Cb<@tODj_7Ihkym%6)Aw6Hm+M`9_ zDhg8!4-CIQ1EtrKsP2$Vd_nHLR5HwECDC+?WSv-&9-QLzczcK%GIgOad5M(4=BpyX z_7$9q<~m+buf5abC7clI?6O_o>c~|z>zY7VRhy6e?kRsx{vVg))SU9!HVt?Gi+4|| z5XRl+SP13imb5Q8{q))mzhA=1wSY0zmNa1I$(IUdl_k@c1=MzU3#>mq-Oe?4sdSZ$ zP0eiEpO$dqR-l^e>Zcq^e|iNq2LD|CWyUQlCAagL7Dph3E$}Cl7w_>*yewb9y z$J?oa(OT9uRWS;1l7Ze>irD}KkailO9-lAADLH>Rg5;u_+>tyf6|2kU=%s4D>=dWl zBYDQ6WC6u$QIC!>18atIH63RCG)JY6w=*c(4WC8D2_08u((ct2D-N1;Fre=XPH%5# zP>!gIE*Z%!Mm6ed%>lmqv1e|`L!6$jkK?7(UB$9Wa&qW}ruCUiD|K;59L&)Eg44U( z6M26EUYhI~Y687_>fus!?r|VtGW%g7Pp`iuUydnxCHXhYnAjl?J<(|#sfKGgT~F`t zztl`jL^~Er{R_bh3igDI1&7VnkCA%qUI#B;{?@X(CBp>D)zsbdwfXg~nojA*r?0lfmS-BPH(uIsqar))}h?YF@l|YpG)DR6_|Og=C=hzz*pv zPPdCZ#At5SR_Xl;WWnhmwWEUFUt9e@*Dn-0WZaR>Z$Sp}I z${{CDpl;uJ-o|dG?g5)6@Q+n`f!@cj1no!4^Jj46!5DP(E`hdynX_azJ;-7>^Olt=28suF*(RxYSnfudGnIG6za6{p+XGIH0M(~?l!#u;_xA-D># zBsG^}ht-;E-hSZq;Z1jKMr)tjJZE2;TQ5054N^SJpm62ld%6j!)Kqz% zZ$Iqh$WMDYPSE=b>^??rKf>IGibGndeX%6FI>qUBuGx1^xc1s}J<*;8lT50CRfY}X zJgh@pemmC`;t^d&)0TgdxDu>6sE(o|h08jas_+>nUk|rm0GpfSLgG$g8#VTrl6;(K zBun6b0I1tTRQ|D|(4Kj{I}*Y${{xK&{jwYnrx4nJo^l)Z5O1r z8lKv0CQ_enzlvH^!FpjwXZJN$o_b3<5>yx?4hiQ*>h|mM-I;&Sl_Ck%z)}l_W0C`6 zoC9edN*I6paDVeK1dJq2DS(qEOj>QUx@U$9Q}{MsUP$@dpKq@p8$0Vcyf>UQcFK5w_g$k{N3Fdb-bihrZa@0OQ?g*tO3^~Lx`wm` zyr%TFFZB+QdcJ?Yk|o*ZDr$A`q&dc>2nr)2 zwO)$9dRU?HaDN_#O71USGIvC`-iB%CRjr^#MLwkF5BG1qF+DX*4Czv#Iw&(2a}^ie z8NYL&ZYP|%Y$%mWSJ|ypI&@Ld8XQ{5;k4oU;pz6&p6vc}VNMZKHt9^1qPA5e`T4eb zKgQ{HVvc{dC#0+A652z}s7Xe1AE?w4rqj#21nPET9)Po!JnWKkYKdeCtB&OAjRwOy z?fT50csWk)eF(&KfZr`cR5Za&o)eYpq!k1QHFA+B;!K^ zTXa4=@&0&yS2`xiEOSXr;n6^>Mv58gHPuUMze5J~c)!0i^r)sb+McEByQ9%DX;s-1 zPS8(nZXfUWO&+5|Kwta1d`6O|e0^btkt=Hw9IBVc`!5c<>%d}Wxug=Rx{B2VX*;{K zV>y2eQIGdKCqvymXWp=6R0{JdNuW|0bDM3&Iwa+f_d5cQB${e~eFV&u!^@~oZ8*@A zOqIi)g~$6Xff=h=a`NQn)Oqam@B*dndRwB)VZq(w{hq)USY$i>K`0b36`ZlXHW8Zm zsRP;L{T8mc3lm4x$VYRN@jxMLB3eV*X}f>W+PWR!wzh@R`y@iZDFfQM93e@#BiKEHtln30T{GkyBU82V}h?rLJ_&)0T9I;9FNZMp6 zgY%`MRIz2^H4npl{*-Xu-+5hNTXKKzu_iHXPxO-fH_tsz-RDtHSJaxf=RQ%lw%d=R z6$Wa#lr(8Rw&O24a>-HS+swsbdwXt~~ za{IoeE9{o_3|0$7Psygw+c#cF;mCdG&^7T|g|rXY{?onqI&J?KRn*f%4hEu8UTZKk{G%S;ySCbU}rroJGj0wstj6P9HwRz=X|Br z-rLF*Hk8Ru+2)7q?>3V;MLrVt3{1*wZ9t!M^iXb9k3-b;&5TeSu)%+JOdP3Q1~5X; zkcGag=PQqa`YnX0A{5w6G~B#*T#{j2>e%kLXF$E3pKjlJ_}}DROO7D6ZoCr3ue8h} z$OW?S&X7pT&&b$gOt<6Y_Mtk-Uf${f_Dp{PyC9NP6jhwvgwG<>GwpLWc@Y!as?^@` z+BoW;z(Awq3-p1wzMOwFc=xk+khfNv3hI6-V1CQjaq3tCuh}kQ?o!FyP^YnEgDCLq z(qZejUw?l+@-}rFw7AE#O6F4f#W@>8Nx#+UHbuQ}GtwZ{A)x4iSXkwzy-0iERzGiY z$qs(|{-3Y217#|LDPqT`l)QNWw~@1_Eo|$O9TZT1Jr0yjrR9IE1yO+`ji`QU6Q1cY z3cI{kc;B~%`^t5!?-z|RNZiu2(a7{72XT3ze$Uq}Au8k=eNEp(rS51wffDWOi7fD~ zzfa-xdd+J%9c2wE_B5fpVDzmUS=w&bzPAO`>!}=VlF*t8`}7TL)(Km-$cuiKmbt8X zzkh%IkzQ)$Bf@|4c9`pMDH5jbv=GxBa2a{ue>^{$(RJi#fCWnv90M?mf!gs*Jd24h zX?X$ldgMWUd3A1QWo%2Ds#&b6v>zPg_|hox`;X_JGZGT@-RP|QTsVb}y#b;`HVnJ< zLHgt4AFqdA$-6~cyKdP8{TwM?!cqbT293+mE1+Hvy;gs`Kr7NxI5vCxny;&0>!3T?<04m^a({XZ5$gLby!C8cGYeH^?KE_ZCq(vR-mpmG?lat8Eg71 z;&~6$>s7Bog_#y3pq88a(ik|xOYf0-r`sI$=lk;+vczeSo!3EoB9Mx%k~GU!$gS6V z0rh&-JEo+46)~^0-nLMSF_3zIgRj|d>A|1hUax<8rR_`rijb4qnb)K}{A{cO7(sZM zqkiP;zMDkh*q8Ne0;8hOs_ONj1Z()*mlq3#)9W`d9!->Gaby?7HoDq*QDr1`vi7AW z{_*|w8<<#U?b+B=1T(r%g-YWS_IcSTd^@~ZIK56cyLui!?n>sM6JXM8O>7J*^xEGz zP_KW}O-0j@cr3PfEFEh@_UN>6iqh>m@E_k_AKqkIXB#oDaLdN4Ew5@P8GT6Nt<}Mg z_cu{cQ;&^E=zAp~tzayEZbAwjE}Kz5-rq!lr>%+2WdSZ~AoYc;W7U@oS+}(O$LH%h z540z`b_dgD*t^g%O>EG*kG!2a`0@F?8B2ea3(d!7II4vANp`~BWY~n3W&s)3? z>W~s}(vr;8TA{Vi<|Q+&(swxuTtK~E@noxXcjnS{vD100Q`)Y`Yjv(Jr!zjD-s;2F1B)o<)`;n`PABkXXUqFxtyFj&r;s>4q4rTCz=FBiZf<)w^oIr*RKb!t#aNo_?*y|eP= zj2+C=X^~QSD`i|>C=^hybAx?K9Iov|y}mz7@}0N*AV^#X>K3TKURT2<={&WKBA6?z zKCGIDTC%v37xr84vG+MSIC_69j#6|~f30+oSrrh%&QiV0F4X6IooaSI2HZY#2Ig@r zr!ifqXu6)adY75}^ZAOGy^ZCo;~Im4O+3ElTX8stwM%O7`Tlw;NT}L2dbB!GbFvbh z4pixw2SgU|K)kdHc@@x!)e%e`#$jP!`j{Y)X|ZGw7#tHQ8OdLDo2cR%A8z0$ek zd9{!LDRSA@{M@h4t|*>|X6UVgY-H;^@(d)J7CrAdFQ4Xp{_%Py=Qii*%aLFgv?AeJ znP~!XR?4Eww&v%L=c$3Mv9#s#p*^T&!?|rjDDPvfbxSorUSA|cWM{gr&s~g3TAUr= z^+mC>VhC|^WgQ_s(j*ZZ1X+1HRlMbC0LI;)8HSr=O@O7`sy)#u0SeN8=+JZhrLHYRyX z7!V@8MPK{YSmg7+UcXP!e#U>78m_XAaWm2)t z=(Ay)Ln864y1r~0{54;1)+wnpP9l~*MK#+fk;mL{2Q0mOLG{;seRRcnt@^Zxz-nQ( zGqAqo>>&i{m&3n>)9V^fCJ1OdZZ)lEN>oa(;2Sey=D2k}`mbM}-}%x!=d#(tVQh&o zhMudmOi@l^yQF`b1=Q=*z{U=8Sp^vFB2AerDI1zsFiN|flm3ri|7edR6(P(ab&@u~ z6qX&{#~}<9F!C}<9i;Gaq-;+LO&6%2%AON@D!?vUKI&NA$(NsgF2r9?Q&~Kd<`i&H zCu?h2PN0>|`b7U5NWGq?S|3HmrxS$wE>@s8Piu2#uoizAy+$fuzexv))`5-(#K7>P zpo_T^&cW=McYWY5q@IsHsZz&VrrSEJto!jTCtr#>vd-E)Qm;p!R~k3pyJcFJqU6R6 zOupWvBVH~;Eu?;bKBJTR@nJa*Z8B(|)g3#gtR!1lbm1PU*UwbO9O@ZlqGy5EoUU0_ z4_iz0%NKuoh1AEl*L^dZ4aPVo+iOJ7L69(~5V8dBgG_0Q}l z3^}D230-QJ+q}MzdOi9EumKvT>dY1xh~nPMHZ-)jA?(Y!{hEc<_oFUqfeV6dC`O_f$UvN zm0;A*8ZXSa&gkpc=btV#f#T`9Gpy}Nxq2KA&SDP>d|qxw{X**XGi9UoJ%T9oJY-l% z2eaa$>TQk7NzOv*^ZEVFyk<$5vvk*NR31kvO=E)dSiLv6jXwYOeC;cM_SRPa3iM6E zX?B0|6C7LDska=xka|5&MPs2TULcZ|&r{L*TD|EWXKZSS@Y12P zLt9YMc-u!Wq+ZWcQ6KOKq4RTs$tgTha;Yqv*9tk(UuOx?fMql+wt!>y-lruK7k{dwKzA~fnK$(f_}M$Q}-cAgps`M6~Xh1Bb3s%NhNMD9~?)|UsAP;S#% zf`hNKq&pU4wE}(1!d4ZTz{3(BV@y_MN6t>*9@(xt5Ka~kCfd}jeJ@z1S3m(py zqKn$4AMO`auj?7%2DFPp6)9*t<+MB_qs!TNiSxFXS4h3CXFzuEYvY(%eICR5WVV&-?ZK@GtM1DxSxoIWQph7NceE%@8WLt8BmS zC;alhtzyhNP~v7S0%m=lC2)VvJt?gj_2)fOuU9|UcD$)8QBe?=m??gKo*XqfE-rRw zCGpeGzyAJwH}C8sXF^I}Gp^bHKqiju4E`bnm?b=W{0*FzkC{Q2#9 zsD}3;GmDUeME#&7odrcOfd{T}JHhzl`}40MC&8=~?s`a73BG^9h7bkXj1Hv&?~(c^ zNaM>SxPCt(l0}0uhxcP37bTN#eSR9e|&#l zA$NAzd#CIeE_J>FVF7pOKBxX2q+XA{UYaG<*Myb_vmv|L$i4$J>W_P*UXQ+p!}e4b ztxAWovE}M(Otycs#bMo^sgL#iOnTNgN)3xEW=HB;&~@7)9nY4&+g?H;^?LN3-2>)S zLa(^h9-}uN-~nq*vH`c9yh7^r=nEY6T`fjcp9*sqDb6{HH^A<4ozXx3T(6(0j&3-c zcAINMr>Qn%uzQix@OCSa3#r%7RJw|vcYTgx^E}&5Q=NY+w@c`yLF`Y*>icy*#Wspg zHH_oxnFFR*)@nh@cCJcqZ$>}gzil5&F}OeyRp(8n2u-=O1JZ%w2ct}Tqg8?`mQG! z)g{ldS_@Nfj^kJoXwAXgbl+Yk|36xD2hbV z6>U$K(0Vw1BF2y^!j1b}Wn(F)YPXY;q1~s|auKZ4Ct^&wvUdDZX^FAMW$cQUa8*Q| zZPPWsqILR2EV-4Scx;gL7PZ33n0Usbm?vyD$a+ER>GakGLMh{zgHwg!K3Z9Q$W@BV zTYhA%ar1Eb5_GkL+k!@<0ILo1exa$rPY#7 z=MnG~vKVFAHuD``z&f4cr4}^y>Z$bPr4^|0n4xH|*>_XjU%)zDX$4Fg!XZAeXx0oV z_+4B%Vz#RUc&m}h^gI(2qN z>O|IEcr%~o2UuTDmkyz*(khhQKxfGu8ml%Op(mP?<=q39KfwBWdI6{K&)~VJ=bXYS zh7!%bx=dBcW4|8s3s`?W9V}C?SjFcmnVm{117RgBqdW1X-F*4=^nEeTeN;%;2#af} zMH4j+HDRMR+O1*u0@mp|tJi;+Z8o@>hV@x-Em<8TxL2Ni>^AMZfu*0n91hl?d@H^a z*2V>c>al{YdYP@wG3Cl$et>oQawsBPEUjw)2<$7IJfB()d`nhBZy{?Frs*J#h9m7v2Z*s*R{$-p#vV1i$^ER?( z=2>A{p$f4=uHqnLTnT?^-P`FEepk^|Vq61EfLAeAGqNu5%dV2ghvz_KG(%?^<85>e=c3~33R$f~fbP92 zvSKflZ=JSv2AVvFWW_eimM$L6QIF^q9NRZ`dIOfUl4DLX8=6pH+36^6t7+Ev?#7?D z{)n!_fL2?>ya~_%(BNa9#2tUi87tyf}rm=FI{ zmOP9+TGl$!YpQKX+|k5SMU*3X>^YRgplNDcJIV>ALI7D@lR46EmE?6$8%zeZZAa)6 zdBn%pdy}hu?IU#`YRN8}S2PpL4x%rLegD%FZ+A-Hu5dP6NmlLwR=LXYdmtdVrZn^i z@%UNZbQ(|Vd!*Jx`aby2HOdf2g9^g~iq5P;$VCJXM>>lBA~$yFxG%^xd*W)!ary%z zQ0^^pFP z%{-F)&RBsS`;X;-_Y-=D^#CQN?gAP2mxkh&>6kn}Nh?srVqT)LLO{)%CRfCs9!c{&u{BL!dUX%v9um-CH2?M48LLe31CZslIIyIrzTczRUbPt%8}3kbi$?P0 z7sg>3-KS5|4IA~;`Zo%CL5DxKFCV$`aHLfBq>L!e-26Tu?UlMTIo^9ptc5&147uEY zrre8@_+v=9b0$S`>hiWx1bAM*st>i@Bn?5yeEkK_yW4jL;sYFaD|f2h;Gn+e!^_d@ zAwYyw^>!gnBIxvupc{fIF`#=HIYB4eF1`jlJzrdh>(wv#8^4(!YpYIfA77s`Y{j8o zQ^^{9%i8Q8T9|w;iOb!$NjG(RbV&UpI4lB+3jB^E>`B7OjP{)735S{d2g<) zG}FiSl1tDdF@WgTHIpkLDq2anzwzimI`F1zxk!Hkad?m~y4fex~jzX;>@Aa&TUQVSU6Q~E>5n2wS zNf4F#Fe6EB7PqK?ImV*8xsfe|Qg0KrU8h2_g|GfsBcM|ZYmV9Xylf}Fj*TQfGDkO3 z+M3a&sf{S1NAD>5!}X9;ZRmajPQ{PU_s54yMF^g^J`z{+a7^c|W?+vUHO(#%%n5#( zcNgTDUn`_&p$_G%QiV|1-ZZg^jdst$h_{BMvsxHf)R@@}!M1$Dv*hBt9(j^F?hfcN z=W#;kh(&8iwWr~T-?N3BTs4BFsU@ByPLC*%MSBmSY(~Em0VIO2R4NBxxO3FPrIIas z#Lg{T^yLW~GvCBU_HMU^B{jvWeRMax^?6r(rLuF4Upj-RUE`-8{_~^SS8v1Ys=l4j zAk%N1&iGC(QXp~lT?{@?A%t4gz271B>PWR#AFUQAHd`p=Mh?qOL%x>tIla%!aQOEF zU%d#y1$n%(ZbTwpcx{FjFnxFv(=Pp)FN{W7Jk>v`^x+|c|R=+(qC!YZ!+JT0@$1M#>F}rSWB%l0#-*nfmhO=1V##uyco~W|uhLoGoJ8 zvrUmn^zB744#R%jNu#jTKDmPRe26WtI0u{Y zVzcZIsmfZ?BV16YfZ!v~D(+Z1HL77U-=gd}e$IhjGmycaIVniRU$v65KRRx6& zJN%EF>3AGn-Vn4(ssTFxDk0ZHW2ML|v~SHsX78AIoNQ43KcXCnllouYQ7}X&YaHmA5yKEvo&9j#AdtI zQ6+qIANtgu;3Vb;U4oehBiqM!ue zzmMN_``eF+*IiXVY-_}aSIIL|I-s0q#6^uO2=p?_^8(e=ROku-6Gac!2P84acF|J~t?_U-Nj?SLV z2Uvb^>Kd*hlaVwq_l4p(Y``c0Pa=l<*TM&kR9JlwshLpP4^EJGy5`8?_2dRM4-=WP z9i4_{c}5!c)-iRZG+51R3esdXbC6SLIFv>$ElDV6Q7uWV;I1Mu;VICuZ_%!~#4m%6 zq<*yyQ(!59?-4ea?f8HnP=&B-t{3F!Ul0~~~}lz3Ga^8z6I>DG(PzxPW2{IW1pYG2ejwycEKS?H+dM^5562j)6e41-3S zvMs!m+Db9-;LTJ2*N*jE^eA+wh8&ZM{rvPSuwE}yd3s=LXy z1ld0)^>N9p=>rBt@F@r#RXuoG)uxLu4Lqym_))oCkb2YC-$0H}B%#&ndLQug`WP0I zw#ZtVr{P;IdUX}t>nJ{%@gx3;{in;iscJC69)eD+zAqLL$tOWsc;Z&2Dtz$UD-eLV z_9o6@1446>>YA-HGhEgsCeK%axg$q~CSj4)KA89E&j@Afu+IN&mx<$#_Y8!agFdd6 zzE%6d9Wea_)t}Ly&PLDh>?kQ)2Li=laaxMbJna6^MmTwxBSi3gMxHuGG(>>Tan-D# zE-Oy&S-d*~^@IjCJl2HvBdT@gz^L0c^A$IRrq~|Him2#Ub>G-tF9kIUX7o{e zLuGM}48W(;`9&L6ov0r6*8rS)QL5EJj?V4USmjjTl#wTYp8xu-9_Ac<>SA-2rvtw~ampd#5(S zN!9W=zkdH(lm8ZFo*E-XLQt?x6lDlgov810wtDl}=J|5_>`C>9AHUT#5w<|a4p9mN z=n-E_JDHADZT^1;F(Uw5o5Y;JZfzZI^&` z?x&~gG_1;81{$(tuwmR6M9HuO34n6tL{(+(*ocobmKNNvT~WjYDVjH9JxVzAGS*`R zo9vf$DG)oJLJG!lJU~rV(qO|St8VAt>}7u0<#{d+j(crQ_DDDEHq>Z`CKlBW?a=j3 zX!q>i`NR)=3Vtjrq)GFtzK;^CI!|3MDdPvDAN%7o7eJc6-;BBQCeyVUnmoT3JqR`ZkHnn# zZ$%grDS5eul}#Q_9k;>jK^-bOnFV8RnT4!)pguuMOhpJW_Hi4M0Td1(Ac!q;s?SE2 z{zb9EGiLkBJ9Q^e4E=uX&3{bPdxwo2eHhp7=yGB_V>DKH9w`Oh<-l*z7&nYB)$3!izGcR4p+7H~IyA8<)Y+6e7qui=64@>#H^ z5gpEQyn{EsYWghdS69r7YUnVA5IX$rtkgdj>3RGY1@zQoawK3$G{X`EO3k2*_(}){ zbe_ZL=a={WERp%T&-$kOkDW)jOsRW4`@Rca%fp6*>%*#SopVnWR4Ixh_Zk~&4oOzU z6HTF}=|#N+8{fh?UuTQr}|N55{Y(*K_0pt0g2g*3)srRlF<&$yjP`gU8D|2N?GqcpRZ-X5yXCV}bb zSS_q)^-kiypz%XYZ6ekxec(W&0qFAk}$QtPdSc{YJzEt;_-^NLl$~MguC%Y zWb`;`5~+)xiztdCh@y$=s0lp;HQqlxt;U4>JeDklaoo1*%o;~xdvFCz0@g7@n7}5g z!TVSFiZ?P=2-50%(>xrK2yt8;#UTHjIiU$jH8QkpGXvyXh44hWbv}=vsoJ}j=Ai`U zj9+%6*t2b(0{q7LE4q3ETM%i<>xJ;I)5P7D-1M>BJT&d)Ec&DoK{-L|G?2$&i1YP< zY8tK&(%(reqSOkST|FTDh@|xX4*FZl7=|hhr|RLT^P&P5k`oNLYv(?VrhqRQ(>|>T z=|7}}i`wEQHVp&&FOEbDe4wXOkQCkY(jX%^I1$?pQf;G8vfezsyRg89Kq%kw}>)?hX7N=6{BV;+26q?j0$_ zvLuV`{1!iz772cH0e5~!>n1igGshoY*^?sPhgWB{R`gZpenB%$yFPgcyCZTJK8Z7Xyq%_yJg8w_DNx8RvH&7z{Wg9Z|`PZ(&@~3#7 z!O-@T&R&LsIa6Q=QBDkyp7BCmHrwF_=Z-ZuPHJE3QC_#@NV%+=NNA2pm@<{{via74 zVY71`H@E{0t5?UG?@+aP70lqq#b$~xwH7PY9c8&F@2Fo^p76_R?UXN8(E^`}>79pv zIyt4tF9;N_uW_i?_MFVxKG15I8ymAQsm!PPHyjV9xj;2hz_i~GFAqdR(5D zf}26_&YSO|w3Zdf8%~P;tjLGLAj4;e>$mQzwlL?cr?nV z@_3HGS_Sh*K44w#`Sb+^+>lKt-Tq#)`LX;;avb2R{r30#NvNyS6b{0*XwHzT@fmK( z63skY`J;CLR`BG4B-aE9+bIP8^G_BXrtf<^3Lh7XpB^~Q38g@p%8L`ov#oWerQWoJ zl&C9PmBW%wNYB&zook9eW3(Y<*#pZ%P;5~cXtfO1EQEQUQ-zf7P$;9ydQg! ztXYAMbKv3iwWVdVBqhPOdX)ix(&FV~zRp?kZs;+_PvG@&Xj|@UlQmTGxF}PtcE5QHGAt0fBf{Q|T~Ij#d-NaK*o@;0 z9xL9Tn^yZwwn1T+h4k50%0==X76 zN8HV%olFiT9IXVM1vaylZLOB1oUX_mE0?Sb@UcG~yA}4OgS+s}g2h5wvWp^?T!EyA zwsit4Kq3}T@Mbrc}X2g+zuH*pLy2VKLQHD2o7?P&pq^{6s!HIh~S!*s79#-<1yx9RC#% z$nm-fvfL-rw<*_ZN1xryzv$Iy2YkdIy)q#jXEm+;mP%Kvg+Cl(A3Y?zIiWal?8L5V zAM;%0PxN${$+NrqcbpQ7Ob?^Se|5ie%pa~Z_8rwTaWxRMW?5?NA^t~Hq00ta+-7wh zbsLoKd_6jmxheGnG8=<@#U3qf%;MB(RfzcIr_4^W+9#6N2*qCF77AQ|(=G}Sa zw5vvYk=$M+gR3C3&HI7t`k`DM@QS(86RxqbMUrVF{{lw?sa|~75sQR}WKD2(Z+aw^ zkR%JAQhz*QEZqgJi=qO$StLl+Y}r;yD90YZ2IG(a-EAL34(eI2amIg!scb8nMU-DB zJAH_Yc94C$gkr%18WJ+0XGZG;D#vt%tTyWrUfl{;Lkm#*l7^>23IyRL?$#71SZM$9 zyhlG{@iqPLO~y-paz=H1ejsUxwGg;CtwWoCshO;%ggQ4KU?fWukQ{tZx1tjE*Eg#% zrkYf|I|%xc_9)7oNdFY6cMh4>x`^-2s#>cZkWGQEpp_tNV;X#8$nFqj3CF2W-Ra@z zK~BkQfY{^FyBNuz;|Pfe>a*4(>J?+U-JW6@+sBhoGq>>>?q0a+z9%a%sw=k)xBhKd z^@P*)>L&&~8mQKzh~45ZAC>p`Cv0MrMBJ&;bieu;)6Eh`{=FS+a9mdRZ;)kE;Jev* z(zY-Kpnfj)KtJfWo~-{@4Gze2j$S)TJ44(Kc!7SDhgw?ZX5vV79-*wjJGep zYOA|VW4TUzfoz(@&=-olDivW(RwDW1Ao54k7_QY=<>Y-KzjgiKy z=WEJILNVOhPjhxVg4Hy*Em3-<*AbtdLLj@)yJU&IL3%eoVGROxgeRN!?jm2hb$e|0 zwLG1 zciE1EHhH=yqBIOheOl7bU0V2Wet`_LkMaky4d15(b@sZ4+nZKf+%2A1zDs;yUyGFa zfV%?;2vZlBV5BJ}mlq$JSjhdwJAw9Xgg30?Q-h=A>Pmaj?NJ+){8c^{0Yl(z22@oq zK8a8;}(O zl?P-@a6%XJYlgX?2X}B`;kV?)+j}54fj2x%-3ej9|4a6{vGfJp;v{Rik#{kmN0Bec*eUpefY zp#R9i2Md{RtIufjouK&&q&YrmJY2a7YfR9EQqpKr6!%eOEgXi={`L=8;b7XENvP9U zkmRo@g`P;C$hDvBd&|ikyJt3LF4u-EQbDuT;VWTZtiMN>Yt8$Ed(>}rBPFs`@R%ov zvHxXL|M0NQ{BCYa*7yAniAh&na(3*joKQl_?4M|~MLI>yY-w>TAO`l|8h}}Y`5DD+ zS-6m{br(4uxg`A41a}$SVo-VgaC*4(T;BsyvTj@&Z)KcZp!5t;aJj^rmok?Gg{pY( z@-V(wX32Y~U|xa(lI`!FDi@dJtL=VhPJ1iiypBloIgaLcwG*PTK%2mKr<|(hA?dli z3_SHB{skp84YEmcK%)f1zGgjjJvKLLQ{%|q^*d8CB?C0Xz;G0`#K||4U&KNc5eww) zFVm@8;(F^LiS2HN$G?s%#vSHwVi8eonEA>Pg*c^79DcWlev19~1AD==UJE3ySD%9M z%iK&S%9lXqz3qFA0h#6~e2R&1dx(N67O$tQZMB{`_oo_eAOz{o1E@V3Ig90RLMuB= zR*V)X^aQW(q zX*A>Cfl{FlgysyAfIcOL&xDFLJA6Nj^X>*^C0EV?7>)1TT)t+-$!4M4F5ku+rBbd- zqCDSqU&O7AQFf;|xa{niu-`(~J8t4$FK>T!uyl3S#HkxM#Y9GS$gF{*9QULupO7=SmC|ZvmtZFLpVEX#J`LI&0o9lE_UHM$z_?k~? z?C(*26^`YX^G%eG#Xc6v^5@n!wDz3ASHR{&K*w9alfOrk%b81#^Zo4}|Dk;85jaCW~4DZoY7ggvipCT5#!n_?%>=2p&N2UW{*i*c;-75r1 zx6|uRzl!h-Dxpm(f$l3N$tTS=$K4}|NL~u2(xR^UpqF`!<_@%l+R@a0Vl~CKn>uM5 zY)C|NRNxzhTsJ~{CHM#`g@kFtSW{VirkH8*^HypUTA^o36EHCd%(kYtC1NfLE4Gk} z&5zP0_CqD0Yc%1Qy&nKFREA3N9UZ0vpZmV*(N~%%$coL@R&w7cXQ|kzIwIK0Swb=v zunc!T&LVSm8LZjj-Y8;8tY)eG{a)7OXk>lHRQWySrzTY|zt`&7t!LK9cLLkd3J!v) zUgJr;KYXUH+TPQ+YE2+3_f2dM}c=73Z16F4Vfo^N*e2oQp?v84iJ9i64NuR$B0Xz6_~R42~+sHbjZusUkMlyIvhkfGNt3A!6GQeCIx zSNfz~xV!W|Q^$p0H^%jfLfbZCvhSL;3@ z?_l{mKiM4^P!p6>*(2q_1T1t)EK=a}3wgIlqxrLzYMT@7mXFA9P^>}EbrjQb1Mlai zg0TM1;N)ri3Bm8@-WF%X{wP=4rxz9b%`njCo{8 z&|-KhzVlRpy2rCCZ7Nh4PC&_#oGs|oXa8`I4&-g_Dd)DHSh&)zk^Q5xnpN)8=2;4n zRDmO+gD|7wuSMroH4>R~hk64%hi3ZrhQ{~p;cZMtISa3|-VV1A_c!v2@6`JrkR#l| z`#LreX)vKQ28!h$&;8=^*3Ce|tpmM!&*z7-b1~H7 z`WYb5QJ-WP{wNV3tg=?513P<2pe>tA4uphd6t@{Dn~x`h(MyG`9IYiW3o#Jw6`0VA zm8yK@I zBfsBtys0fEH=LY#OUEZ6UxiIwnlHc2rj;PhZ$}X{#Nlyef$i7}V2SPCad7r)0p8w@ z^gvgjaL}Yy9pP3JiWH0G&twI?KYBtOJ`&X@r4cpxV-cTKJ!VkIOqT zLL(e%t3enOXC*w}^A3okbo52Wtf-HbdO(Z9GKm2K4eOWvq%O9Bfo|m1z_7&$d6EUP zsu6?}8(iE&LeVNuwo_9C!wkTBwybq_%B$ z^Q4ETA1u>A4H8sIg34PPQuH|O z6dif>Sz&{7x;^q$-VL^gJoSU#R(r(ikp zb&nu3IqPyxwHf|)^R8_cZ##I@@xRi>7U_kGa~O;IcD#2RK4M48Y!HnX4lEb*wlBDw zujl4Jv8A$5sJY>D9rTKmW6#@L=!Z5~VDA*bzQyvEVUQx_i@E4&z)*CSh8%jHd-TE3 zw#Tj*$Ucf zu8_u=SaV~yg$&ZI!FX#(Q!6&EWOkRu+~?tT?s?X~X8TsMu61=kU|ZDtl%v`tx+lf) zf%oN-7%?Z&=H|8ukA7R&2G+RXQBum+mfl|-{5PVd3mG;ORM+n`zXjX#O|1+Z-l(l9 zC{w@h>&>JELOEG(?Mj6g`(Ce`Df(SEbxaTooh@3N>dsap1Wg1sKI zkY$d62|CedigFR7{$=a*4z9UZQmvt((m9s=FRo*A@$k~?T+w4{3mskT?fpIz;qpnJ zJ~1SJb3mKScvBD2C%!s*=wyoIz}!c?fp9Y9FOdiUNIGFAOO3^Ox^^c`%fLnZOsj9) z0eXSG3a#+8qf}m@1G&DHI>aeYWq(g@WRE(BukzM<6=o05F3g}Kd{ucWyjlFyQ=1gX zuCf%wK*y?wjT3x`RBOb2vW2I0bU*E3+xlB;>iEzJh&h& z^@Cy$?I$6{5A*57ilY|s{njIc+p0qxTT~f4OCfn4lRt%}&IO^qePcK`NIhwD+o>L7 zfO&V{^JPz${s-cUz(;0>qtsa)ATUJNa&uZmC90|?z5o0x zRAiWpWQz91bFTb;%2n|)OUM7Uty95gcX?&r3V(E`Ox%4Fc8`Wd`U^$Vg;=#qzA?Y9 zrhr06M$uL|NUD-pDGJIwX}rANetZN1WXGMVZ>(a#j*}m-- zDQ7Q6qn`JWXhz{~2hn1zzwr)x@`=3I7UD$a0&n0ldRu9`E@Hw`& zjGdKyzXO2WA?kmVpap+{IRHhbOJP-a)Y4c-1BHxWzr9~{vTumrX-EYH1!DJ?BQLNu zG0P>Bu(eA^C1d00$4NcK`wLttP&;q2hAEq_+IzHfHl}ZiQ|1qL&HoUJ{%+RJvVfh#BiT$fWLdE-f7dvCHQC~@LI<+ejGVyE3@ES) z#)KYJ>$qeFXjHj>`(XE)bK38~-D1KAJ`PhVGk=a`qv)B8nZx{x$r58#oG*u#!`6xfktbv&7-J&E&fVQO&iHr1N{f^FL=BC`N39A9J;42Myy2Au5@^+Y`gT|< zlU^7tazvig)L|iY;HyVaJ6WmtzYl!t747Wif`3)i{M$0V&&?R#4y_Em3`QD*7yi!w zXpCgD^Jt1yPm7xWxvw^`vMZ;~E^#W=h`!cq49fl>eORRX0 z+EDE7 zPBTa=P;qjSBKasD_m^Ni@f!tZd#z}&*Xx?zixPWj zD|Zr%#A38sjkAfg8jfe`f6KCqdj-W!;@Ke<0A}64@>2D-yad5 zH&d1a9HU`fnsy1OUrDrFqA+rjz?E-Q8ch&1_r?;7G$~kI|WBhto$Vww@@f|#d zcGD^%a;I?@>oAoggC2$4xAe@y4vmd}ay(izP@AMXpR**k1Yky!IBBJOkXs2#?5?K7 zXjusOvbVxl&kWa|JxtC=HrEuK{o9)sv2>*Y{eFu~G}*8};l~#OFbXZ71g*XPAhaNO zsIMzupiA|uFj$CDzWHP>;Qk$9KbS8m!l_{L(AaL-i{gV@d8la|T3Dg;2sBP4P|H~? zZ0D^4izkKqCCo(pZH;{E=+f2*9-Us+eDlS*{iS`}boy~-R?z2XDNflCL=9nxq8Mii zF#l0$6w|~3s~ghgbgvqd+I9S*Ui4Swwv33NY)cxE0F_ADZCxho>75ZKKFU{pYpC3A z>n&#`4x2&HBKl}a4A$kYUtyxR20gPL-7fkv$*8E?^6fk**3ZYHt^V=Ucy%zn7ZhU) zg3}e~!2?>%l$57~y57W`KijL0ej-W+8tRpDrUVzvKwc_X2$Sf_RdGzg1S@fiPO6ii zRJ+t{zNUP&s?QR>JWmc1(Maztnb_osH~auo&v>@o75`Vo-+{Ye9YYJB=w~-Zq`vh< z7r)N8uYr@_jlu;CMe^6#ZKrPaup-7bExG+)6C%Y@>U0zDKYi>bFRh~6q&kgs0us^Q zBmNyGq6s_L*D+ZbN@j<4f42}!WUpZ`YX=;5eq|Mq5t`flHzT7(O+Wdq+e5{0MJ>)K z>Koyfd(PB3;-Ak^>L`064|xd{b3%Nk?%qTF@qS!4EBT2SNv#*QU}}E8kkT;k<0AP@ z>9FTt2hGw0#HuT|q`Yq=G)2NdPRh`iwTPG5R$mY3oU+&=YZVt>0{$|m{9cN>EwSy$ z2`9w!xH5bHi+oy*Bu$vA`5tYQ;vOhHYq>gw^~I}DV^cdsnQx_x>E{A>DF{zay?=Lh z-_HiJQf-?Ij%VD&ft=QGTB-C|qE+rFhSPD1l$yqA*?(DN=$r7Dr3E%}%JtKb=z)VF zcna>4^;kR}d7C5hvbn)>iv$fG4`fU)VYc!={~7Op)0wHHb8%*@Lk|Duhe zle}yIrZH}Igt1;7NcfQR(Mf4s+s8in`oAIOt0PWNC&kXt5t7Q)K-#*(IrlNKJIKMQ zT7HVscAv5CUWF}rSc0KFDLGLe;DzVzkrF1lkE)nb+GFP_R=*p=bWeN$>0UbuEecv^I73Bp59D8y?BAa zzSbpG)$ffsN!ZFbbZ4Dh;Btv#-NdxGelC#24wT3(!OJIwevyF++51eZYd}^KrZ;2E zPc&lV*E~j#cWjlI5b%#T8=oeQn$r+L_EraIjdOh~vXO^|M{qDD83AdL?hUPwp4tj4U zs>C?dJIiV+LoVkya`7;4c(13gOk6+Q%ugCMUt?$bz#RWnO{OD+D{ZJjp^+ShPl{TXRD*qZ3DO_4%08J3}a-oyF+f|HRwjY@b*XMCF&I7_`#as(aVfQF@*LS#M7QexBV#nr#B9YLt?ctGSd z>2UlG{}dGDy(WybuSfe0`w2Cg5w*jZDp??HHlDF?|Nee2P91xx8Q!eitaFiA&xIZ* zT$8Yo1)%bBXXXK1nZ!zqN*3TzYn4{-&Vo;4SSjyIq!dnRa>zH`S$5jfSu>lZxHw=a zZRHvtg3XDxNWU<4CgXLfR9$}3i{q|TiBk@Z2PVVevO{N^3auDyGUg3-1&NevSB~H{ z$~0;1Lfq&^)W@2*90j$g*|xIQmd-|!e0&^C0q|qI#>}05lrcI6!Oi67O$(<8ke055{2_5(c+_`a*sfC~Q;^pZ{AXKhwN?UB#V~U~g=rQkCesp_^cYA>Ar%A2cbtayodKn4y zvTDFYb+PuG#ah7$7oq9CV7Zo=sOrcypsOaK?S<2mnC~w64?-X&ZD|rGPiN@%zb}ut zP(QqCb%YP}=tbk3P{3!8d1KG3iHQlkKE6C^Zd)<3@lM&enA>Xuh6CDWdtaijA!+|v z)Uk0s@I%It56pau8TyxVi}r>mb4qBEvAP*?j;y6vGORBu4>Oa>%CxBMyz){D!MV^G zlbNN?qJ&10cj0;9Ag}fM>t58*w}+R>bC(5OMns;P0$R*neRl)`>OT5A5=6#DCjtWWdikv^~c%A;|4KGp~ z38!L!3goZ$P<57PoVlvcgg<`J8FJZVqnBQ*lKMiFJn2i_)+ zm6;^U1-vg?=~pmIp*>ZjrOKR|4~p=c)lN>d%>Du~c8MzklDwVTQ&xu|x@dr;k!6B5 zEhp|fr1<85klr@mWgW$su0^qH2-BZb4^l(29Xe~p81c`BPjZNg+5?TlZD>EUKh9@3 zPsn9go&mC+d|FsTT*h*R&H`n^X66VdNhSIM*#idJWEGt)0~8 zq_@KA9k`k0;7nBt9@EsaKK-)V$Ql{fe#(;nm!#b2Y_@nLtZd|SciJz^-t~;Iz>)u0 zXOL^bM?Xh3u68?2M^P(~hZ-ZD`-1NHmJ176=>{(D*2d1eQx?{SGe7&*b-xZO0_T~S zs%^JL)zrX!Zg)`PdG~|T>B{qV(Bt!|ciH-vm)pbDA(yqqM>C0l>+9T?+^gzWi0%Wc zse0Zy_vb*r`mDQ|Fln2b zoU=$8v@MsL+_*s2-ykbPszCGZHV~%~5=WjkU zD^b}&r#?qLqD)5+`~A11)X@YS0HPpY)Ff2P^5IFV4z4QEWeZZ4X_`=$Mxz}l-~d;< zqwaL7H=vkG!tEt0@@YIhiF0~AaT^qevmDK z?v{cngKu|KD_shUXmtKKGoM3nm9nS|k;q1_nzL3RvJ;Q515smOUSMAiSfwb6XPBwt zFy{ICYt`HzXGA43!kwG>9HI2MVD^gZr{`%N?{9m2;v7dRqaT+a#^302-aOmy^1VuI z>*=n?E{u88t-ph;DV#=1H&*0U&jLqdDpYR_n%wo1zcO2&*UxFkW6(TWYc42unSApv zBq*l)%7&66(|K}9M|}#x0PHy2j{MFuQzKn`%R1%IHAy}%*@PI-QvG%ZKk#cb`%|8T z?9BHjvP5roD&+H*-^^=b=A1PJ*R#NV66$qW@^8d2-l(h?cXP+shugBurr^p3i@#p;%Cf1DZ5}eJYUXBIB#4q%YneFIS4Wkm< z$IX(m%bJ{KUgeV>AMgc+T;sX{yz-T~;I#L^K*&;t*f*?2p2WaTe#%sp%KyE>dRMz~ zAJ{?Jh*w%0huK6hLAMKOkc=ObISvYy8~0j%7^325j@tbb-iQ^^Y7Y5*@j>hs0er0O zwhDhi?TZ`HGO;1G6Hhr)&XfDJ1}SS%RI1dpJ(U`3ul0*J08mI^_S`soPN4qoZ*|3C zG^DX>VY{3TZXR~1xemtg3x4f5>wLJJIi0W}XL+>eiRd-*XN;1wGqO|TF7^5&gj>3j ztr|MW4(k>r1SbGr`H$R-umNv4{0R|y+#mWHXd1RZbig3Tl@)|MqR|~OmaJsCNQfDo z2MR}3KksA%HF9%anprm@ncDx3q@blM32m!S)RGZtDPmkS!i~Z@Hdi;Y@`v6BfuyDX z1GYd(zw7xF_YhutYl@?d8GtYW(;q{;H$P44+)&+aRdcA7WC}q%l7l90)CAW`(qNO? z>*cmDG5va*id^Gdl4A~N9?3k52nQhyTQCpROagVgMJeVduYVnwAPGV#c@wN%@@M3! zn2&+Fog`=hwa!)M9{tcq+7xj(=q}+t8OHn)rEYhe9?6lelz^!8(c)z&fW0*E0m1?zL@v+QPJ=RomLa#!}XBt%uQkBXzq? zwdtkdn7kUd;(rs_X!oQNLDB|?1Yteio~6&tR;$#a^qvYYWgZTg+G%zuV;ycI{Lv>Q zz6ujrEmpX#B06hLr^B*R8t;_qQr2Oz#^>vCYAJ&aS#&fVV8XLT1MJ;xSen{lE%MVJ zprHT%w&YD+CBsmo%IJ`yxbD1RLbUvM&0baNzf^mJi*54hFprTYIAo2AUbGl_Dd+g-lU*li*T;ST}JG!6?a8SyHYbg zR4@tD?G{B#ypg~v9zOCGPfPOFMnr03K40~&Hz_N$*2r%t?Ml!!=1x;oojPZl*&*Hh z`~}!l!ha(r=|Qgzd`=vVBGMI|XX}86NF_tKeV?T?Ne#@kaa5{1rpInbHMzUP@Y6bm z$LsTh$1EegF6B$Yv^*B56>n?sZl8WIXZn|LemhPKyr-=Z>}r_NZLIvn1q&)yJ{X<+ z5~FShs#jb-iX^`jZqzFB2u`|g8M*Y7A3XYZmw)5r9G!b#3YPD>6R4vuO_anUPLmW9 zr`tn0Bf{PQhTSs)=4_+@UAZKF)DHUS{tVRnx3_!VNUc)pq>SjhExIo0l~T%(YV}zT zJ0ZM(dVhUtJ{1SbWv)jI!K&1C@aS{S0v3mj5Z*sM+zu4%IWw!w-8!PR8M_UMN#(GG z$$t+H_czyv+c)matjC@>%BA|++X%H{YY^heugYOA=fm|l)!8(iu1{o4V`3%U9hupa zulqV^S^5i3w?}e^Kuh(jNv9@tPq$+$xe`V`FrId5`EdW%0V7!w1F$;gbDu!&l=mgi z#Fcj*vZ#&J?OO+E%Da%bnPViS(q%&$rGI_3p7Qvx9_`@^u&J`pv97XDUSKytm(t7F zZQZbh;h{}Ed;vCPKAJ#XG(xb?w(5wDUQlu>Y=?0wkQ&>0+2{J^rqJM2ka`t+-VJ_D<9vPe}Z^@`G+|Y9M^BH}u-8Q(K z%!>X6r`us#0d;rQ0tSp(kbq3)95o-SA0Ft*yUSrxDat#^yojinhq{I^+HA_`hv#{6 z`;dyAGQH1S7+Ync(TE#>ju@@g+E1rE}liwUDe$tcOQ=@^Cv&$pdz7 zT{m97z`XA~>56ODHFl*_xBJd7$B74P$`+oxVgW)je#czW$23Pi?ROv#x8u~wo5xIO zD(x2e_&kegCvcXwH#JY~>3?>=8#ElJ&2DQC6z`74JK-n8RyRByB_IzUF2^abGA~NT z82FX|}NP0>a8fpR3{g^(zUzg)VXd`s?vZ|&W zh8{GhsScKaVTbv@-@mA~pXj7<&dY5B0q`5{y zsHiMp9fze<`qTYLL4SsDRAb=u!V(O{M!I3_^n=w-=M35Xhf_tTC5>v;x)vb;Z;;S+ zSTpkbr+w{yx*sVr4rq->m#Q-NFhbd2)tXTGsY$)Le$UQOLK?D%P=iuSQqJU6#Hsg& z_Cs!-INiSN)fK~>c8^kMW6y<=-mC&kX;n^3sS>DpIZ&j1gnyL@dv?H{RlJgW?s}N+ z!Wp~{>lFOs?b`>mRo;l&i8L3zkfc<>tBhDFl25mR^H=_GIZ%MGTaKv;xkwrl?Q%07 zwmabR=^6T`$1eaX;$Vx;DP?$XA(Y)Cs$1fwJ>~Ja^WBb9u56iPP=N-hWK~y`YcA#;UdkCG}ir8@f^EVe!kmPam$Ire0FxIT@iPZOYKJTjG#QZTIZja}^(Ne4q1;l-q z$vV!Uw5DB}4u=chvlmGSVhy1`k-i{NPbC&^;FBgBrJ!$wv<{-h*b`p?VN!p2$u=Udc#qVy%X_=xH zHv|DM&6?WCkmb;t?E0X?IIg$n-?J06T;5`qsI7QOdH~qR?quF;oSs&_y}ijnB7-S} z^Xq0flSmDr#LcuJw>}O@d2-F$9S>Jw+lRw-uXe35P@N5*F(f{13;e;aU-5r@Oj-qVwi3tK1_orgzyAMOXr)k+2=Scp+p z?Gttua22k56z@FD`T0pc-VT2hPo;f|H<`ySjYap-+~Gqh~g!lx;F@E zEv7AxcPcd-?~%@SSd0GQr*-@G3Kvd2+*eU@k5Q}d6JtpNRTqrY^o$ME?YreOg1w3a ziuDe#?=(jRC=x1%g4jRbexm2dnvuM8TEml42_X*lVhp`#JKWezoNj+NDBmT+TCBAt zMa?Z&yVSxsW`$bykeC1Mev6vW`yMWD1U44+YK4rahZN^jG3P+tZcI=&?lv`gZKgt1jf*!CRheBwCIAmS+L+j1zuDeTO_+bY8ZJf5muzKjQfN>p zaM@UIoJc)*_m|yKY4N#I4QS=y0~H8qB?DF)4=l5taOr>9ef;4{GSEr6o8(%6yL$rE zw&-O$c);=9_{;uI9V$te!MSBEAq{kd=W-g>ecCvh(Q=7ucdM!xz8oPmLFrj(o!QGl zs3T+;Qx2-n<<)<;_f=jm3upusXmfQ>AA`bwF@{wQJzSyXZ>jDMDy;+jG23Mh+X|ro zBaNahtt@oRa=2RJ_M{@9u{JzlaYV|PNmMMecqmU9ic>L1Hd}{3 zOw-ZxLwd14sYW3Uphx85fG$`$UZc+lZ6@cVo5%Wodr%_}3~yec!>VJ`f*Qx$G_;~t zJD4z~7yEycLertEP$~M#lUmgQEsUyF8{p+=LneK*KdB5r1SX@`A{J4xmfTqgyGpqC z;}sOQCuQ0TdH8Z$LcK%8c{pT*UKmYUJE}V0>`y8pmdXOsbDI**9AzB|9i`Da(ZEMT zzOVNmeWj&_p$1$=i^wI!lvDwSPzmw%=$Q|F^KO5CQZ=IDFsRT4X~@df7f-PEXQokT ztizQQ_b1gTV!jCV7$SB_v#S;k8Jd%6CO%PBYI{@-gdlfMZI+Z;k~VE%fwj6f^k|aV zWnHQ5S>?R)UlVm4)<>mGh{IQx7|7O-mQ=Lcu#gv$YMm&m$a(aXuT=}h2e2Ux#dNeUVSo1< zNMZcxKlpPG^Yf2#(}TRe(6{!(Pki*}-h6-acJy`Wj>j+mdL$bTT2OAy?gI}p89w9zM0?X{LZHT{nFpB-1+nC^^x^|x%&?cHR*rM zT%k&+F_B(JvK}_b0Mb_1=pWhPop_@6ug52MFW#=#-@U!~`ttQh0N?-c?fm`k?p=QS zaP`tg|CQ*+*7~!f=%$D3Ge!>$h`}VlNl{h9`+!0!oCe$+#=Uy-G9!GJzx?Xr`+rzU z`Sr!?_pke#*MFPe{r;0Xux#hUgPb?`$}mDBghc0VGz)}}Kagm4jn<>hX$du24Z}HnT23%V=}pK( zUKvd2H>;_SXgzrF+2*vUm!TqnQ>3L@ON7e>dnFdip)StR+I=LF3UkU;27!NSwp^w( zNGYj|to7z)g=@5SABod@uPbdh*SN)cUb_#ujm~vlx_Q0oBU(=%Yz`}jpXaH_Y+SXd zajQ(0r=-<+?v&el`rzs2w1zcS&pqZuEbB0`NUD_LmO$0*=8US3XubTy=CEW|s(E0E zIS^+bnzcK&GFPi7oi}g8e}I4W*^}qH`*<$l*&R7E=}PCAI8nMzK*%{AIDT}E*6u#O z#IP%pp>xQH7V5NtCW@KShg&&N6Xyf1&mVocIV>;D0-0c3pDx@chc;!I2+cX2nGipJ z{Ota#&2f=?T!Z4OJl6?arU<<;siW6&%E>=^@c7~8v~oCkDJhc%DHDGiMBQW^y-Dk& z#2Ib6XyN9#pl6ILGc_v!)H|9PN=HP#7mWDT24Q*>$Wpp@{gt&}yM#%@P-D%B2Eknb>qqv1NwK|=l zar_W^_2wPuk7+&G9G1s*?BTJvSgNbWY;UXUQ9?x&KO^KHZy!-lZo$e23y#$|qyRD^ z77l%CdP>MYdH$!}C&U(ar~;Oj>@xd5>O9*z-jpQN?>NHnE_mg0Mxd3BR) z#xUBfh(<-vMASiR_mLPfv}^APR^2ADq&?MKwD%n9w4FQoZ zy%$0*tiIAqtI~g&sORak7rU#i0nkHV^+9OnWG$DB+*@k^Eai;adirelb-)a(bF!y8 znFz+}cMECKT1HL62butWfc1R)aoCo1c^!qYPm5`=S~xQ6p;>Eat(%YNT!Xdygjgc7 zDFZXridyCzBxFLqw#8yrJd^(L{EO|w9@LD~VidM)MT&p7OwKVrxr$_Krv_rs+TFN# zdI{}7c^0o7106wVFE)vRXz7eLefDB=Rv>-0**yVJWy$I@cWDzXWNJB3%J8G*hiA{9 z{qf=Uz+6)cnH4%hGL4jTt4)enR?DrO5vNb?fBEwH!-uLvCjA)CndKPn)%R8Ks@c7 zXHB_fB0aPG5VUspTLow|tzDr@X(hEz@eO~RS25*@XOw)6|~<@W1aR!uyGSFhpR%gTS) zYAah;VpKx&awbrGbpNw|-<($0Br`Qn*@?(0rNl^Bw8QWt^*68AHprXfvV`WrYeG)p zsB-g|7jr1C>N4@vCdMjmusg2mtC*BeMI&mNi8^QOkVLR>Iiu%Sb%Wh;0VWz9Ap%Bg zjIDTIE^#2;;L`3J1!Xz1_ccO zGAh8@>(3EElI3-l|5RO;mw(uu7KnSFASTp!0#gR_-b$0gNx;?Sxw z3nH6xCQQ|BDSSN8X6Jf|gWYktt5*)G6@IEk6a>Z)QDRJxPNN>E`g-kX)b@Y0I*DaV zjSwPUOiH=qS{p>{!xUlmsq;S1UhEEwi&|+p1ed@JeXlH|;gb0l!u~+-tLvLTyW^U{ ztJM-pRfCaq;4#B@vEvj3IJh8F-&5{#`??N-F++vQTh_~y=g{Gcy^k44p=_h#0 zDTN-Tl(QCNS_ksRT7Ql}@=Un+_`&Dn?Zt1rA@a>DsZ=|g_jF{!syVdcP$ zGv@X9!J}IMESIihRkImn0?@dmByCuDd#F6mxUWyQ-_%fR&>1Y=b;DdDas4CnZA1y}Qf4uuq1Bc+_P3Jo5%nc{H5mv>keRFaFj-G4u`+~x zqXH^tYL6^Ge+!6p85)Bx=E6o1FNP{52*p|yS4W6`W>@3Yi~E1iZvnC5kc*cT!pj^1 zhILzYHVQ%3gr{c5hp%pftVd`{B0O*v)PT7P+)&JsITS1#ojNh~@YTy(K+J~~OHCUx zm69U%DKl5kA;Qdto>}%KD=KT{~9Q zZUr0G@b4PfOeHX)9iRWMX#K`pKHNx)(;V&@QLq-7t1MTDs>~4LUAY|AR#&us<6DY1 z(i&c883cc;v{c5{LspEmijcH~Guz?widVG8=CmZ0?m2vaqE+cSsX5K*=;WCFtZjX> zIju&eu@bEQoVBg85GrA0nVo01dU);hiq^Z$Y1O7BUU(wtvKE-*b?x1z7Md_`;bIkA5=Xc0K_pq7%Q@LvYu>oo+0Q9a%U z>5A6wb7E`WlBAZA(X6x@rZ%BYmgIoPPo-bc(#>gc59LtfD(BVjPQ6&}V8}3Y++$eBe+b@&>81ttka;4_BRmDY85 zH!*)`ee>-PyL$5NlBvnOGMbt(63~vPs#yJ!Pmn_~?x|-Sz zgDA8Y4b{A|37zUQn` z-#$O?_7kmtK91HL09B>dTGELa#a3g<^HALauTt^bfBy61akQ*Eh|Rg%wzhq2whF2> znpfH4&p(bjv8Dcc-GZ!2uWLdebwfXIhbzc*kKJ>^r^jo4qV@Wr=%@9!L7klHza4+T zMN3&n`@y;3ibAMAe<+4TVz;wY#F*mv9dI1?5yvy8bQxS9&qr4WJDVSxq#o{|t$ROj zJNc}UzayyX`g)J6c`H5bt0=t{=oHmGLAgkM1Z*G+H=|1*&Kh0n|3`@B%hve`x~y0*R#>8Qf1##jK1PY`($Q} zZp0!9>q;*kyk1X7I$goJp>?U^K4um{rRk!$r4seFdOd$QR=pZj+S>auVpLo*a`+(B zRtdVUdR^-O=JUD#cRQkB+61;o(ffvo)FvvgR%%;Wt^~IFpO2%(B^99wH>!V9#hXh( z?mpMfAM7=+nm6j-UhhYYq7T7U@Pk3aD#);{vzod1{aJi^1=qLN3%$ptXk(4z5I$RL zv#THbYsh7@-w}y#ua|k5eVDb@DPXS>Kh|w1M}nH@=N%+74aBKX$og z#n-Z8uB#9E^!A#+;d(u~a+80|O=MB&N8Aj&_-UKcM~p#t3j5ph3i~Yh;VNIGW1|~& zDQR7TXhd|O&%aju8?M)rF`N0^t@|heRFw2w#yU!oiz@sGH-ixeuGf=MCG9xI?&1yv zV7z8AuF;EN>|+~#3D^4y8+nZM997_}W;HF`&<1xpmN%cbxA_-ducv?GwmKW@W920c z-sbKaXT-}VLw;e*T(5uEuJdxgLJH-$6nlxqDq*?mq(rtBSKYya>)+u~=l?IdmKHgM zh$3Dp16bITB9o3u(C1zI4_qJL{`vY0uPJwFRo{E;BB>TTagB3Dgu3+eJ0T8S-!xv2 zE)+m79&dppC4f>BV0j&wyNcMjc{CO82iH6|v1r{;5ovQ(EvSF5&CCYH@^5&=LF@J4 zTD-F_N}{fURpCeMElbb&NOJdT%HFT^Xbq-%&fSLi5SY>0Is-VgXW-S7Jp1;##4dIv z=N)YE(>fK4nHJR|7)8LsQritlEwoA`XE7Ikju|GsR7#%hHN|wY<5(&flJI z-E2@`n?<^c&}Yhoy<2IbMeJR#(E9TG>tGG&z$JBPh`N8bsNVz5egA30OuM_)`2ILp zC8rIjYCXF1Sd#_Pj@|B>W76mS)DKv{{qZXc=NLr!IDrvzh52)ntw{$u~g z>uk$bKrF*Ku(uf{gS`K|>My;G{pQ_uq4hf1>L`S2rFC>RYS~o55{pdGG4;AK^7{Jm z`|H6qQw4v{n2qbt`*P|<1BSe)hO1Axsi65`ZXuT6{xheC1 ze*N+~lSg8uF($GXnLu%xV`H2v{u0)B!{k5yc;5Xj6=bm18MvvdiYN@;z8H$(Q@?3K z6k4xmqF_lLsFdT}ok8nwe*D!1v6EcY`EUAs?{t5R7AL-NA8L`qRRRPE<0ue|r`)|QbG#YKHD4?`Q$ptaUL?Pj<2PqbdI zTRmCEB8n}rcq;DIskxb*1(oxr1yN|dJ`EwZq&NeJjqp*~SX?!WqKfqF`T3=kKhb*K zhcSOE1&c(uBL3I|-sTk9IDpo&`S}I0h1S>Shfp~Su7lPxDxS&=!jkB{a~Q-;B7S{- z0(C*9p(?>Ltiy3OF(hN3F^4JLu&uApkDt;{S-6;b9f+x{=iyIlx+))I+_bk!Qa=us z<3@=35+;BbiDz7^wPL1mY+G&=_4oISR$qTR!I00+hrPBG%~D8qkCi2`Z;1T&_p6pE zZwdw!wW3zDbo3s&V`Gxhl{we<_sbS6L+Nek=^R7 z)6bmlk8L%MSYMwySmdV2e|-Jl_C>q|ma?z2B+w_Hl{Ri8t7t_N9keS?@4))&b?<-J zlGJPIx$#*XQI(!31t7cN*#UHOCVqT<-6b!wq2`<&Lb5HzMtwjlX)Qkd&S*FPdj4r= z0p(L2X2W7x8DmrqdJZ^K^D%BNd=6Z%ABv+5+^jLTZI?6NMtD}&EEjd%H)&D!Ro~QH54TlnwFm?A3h^Y%w`8X-v+`Yd3-fmUCF=$g* zgxT8J{j*?|V9c=_-MoFZ*KGs|PVWH_Tj!vJl+=l%eoa4D*Ed+Hzs}>&CD`7foqh~7 z&lIsOAYFHo$<5u^LF@J4YOH@Hqq_rU78@Odv@FiN$2N!h0vpaV=o%^x+s?91}#(?88xSn4Eu@R*4=>n!Y4J*cQ z9u!Ef0F$e=2KM|8h-PFFo!YiIOLHmq-ec^&npun+Vru^U;8w*?@zQ_hzN6zAakCRt zY_iz!&gQz%dOfxVhVyZ<>CLgey~GwpWYw~<=hbvgKF{Mjoh6jQV+ptHfD&vZS_dL2 z-(2_P^F%(-_gQmS47H9#_DaYBPG_L9^pM@?!~7+fJnjigXiqx3+}x{F9Sfid4V7=M zd-7MH@&IT|x?zo(ZLfbd7Z;;Q(g8(PZ^)_Zm)D&GQ5GCu{xx#5t1=2(iNzR+jp3%s zAGBT%E|MS4@@K$ipL^Jy6NY%7s}9HAZhGe17Xg%4a6PXROW{bz9)>iwk2ZgMQTsMD=8!e$#@oQ3 z*NOFE!x2Ap_(R1M^qIqBRiSS(Z|+_FeVsU%J9^IqjSh`Qi0w@+`ffSo${gu^ok-mZ zpGY4hbUcSw)DIM@czMa6o4$Ph0)%TSWX5@Oz9LQsHB0mKF$=!I)NcA)`71CkoCw8H ziN}=T!UdY1+3$Z6MLOG+Gk^X9l#7pHAa51yJqF@DS&7(jdV`U-;q^S{f|)cZu;?f| z&I&gMPmfs#B`>>~YyRzzzh1xEFTU_&E7Bg`FnfK|d4s#H-qY=-7xCAJzV7S>W)eR7 zD8f}VK4DXssuO9p#aE^4W4}Irc+7U^45B>cwWbKQ7~*rZdA~D2iEKA8gu8Qxn(b+ z$qROmGbw+#E8qmL)b+>njhnIXyyK)I5-7b{1FZCO%u+)0ZkNc1Kks96UL_W72QE54 zJBqH1=n$>vJo|L-(0V-)nH++$NY-k~UZm6~7^@-52vh zx(uz?nY@=Agp?ws)U_y=t(81FOwSoEH^S#vAo4Pqx3toQG|<>kwoug9NX@b9Dy+Q2EOukJ7~QgTy^dd7DcTenU^YT;$pB9_TE$NW*p+< z&)0tsMV!rp=K`Chrne1S$B)a`7G9Ss@z1}WAE}H4k>Rb#Y0BB`Ggl+}@g7|#T{&nJ zTCZnf9}NN;_=Y934IX2V8#3fR>uT=cdi?>*gf*AiN}U57R&U${kAL8tMO|;u%8&Z{ z<8b8?^h|;U(vD+NO4WMBWgen_!y*3s`saV^sd(m3WpjpeQg5f%WwKlthY02+TCcyY zp1UM;f%Rj)21-#oY?Oh4vr`{eXnp&~>#=20>bY0?$=a2ASVThPI4Fgdvc7ssR%pE* zTYK!*y9y}`pO96^U?wV^B_na=J^WjIdA-WV#4}c-bZ+zen&+Xgjut5GI7HmoaQ%O- zuTMfK^RZ_U;5faA4Pz|N$=b#=UpF1DKfb;`2+>E-+4T^WhPv|XX(KeCiO{Q{U6IrM z?fLF0z$_xaq8$$iDM8KVx}^l81;@N8TOZ%-`|GzptM3z23!qPL)Y^~;cZD$Ge&u?4 z;ClVqM~!x;hRba*G73~mZZ082)7F1gxB1&I5M4w2+{gI`z5N)U=befw0a_)WuMF{i zf#~Yatk9D4IC4>fLa%&m6nT6QZqCK;&yPar*#Ni4wLDiP!rNRl}FK zED0u$qFEMO_Bcotm%nlj{1Sivd>yRL=cRD|uxK8od~{U)NoJ0|0_tu6)mn__v9e9c(5P)}zR>85 z1QvkM8qGylO8T#Vyw0=!hrFv@j_by;uj0xBtU-_f$*RfJzKM(Y;H-bvk?oa~OtMeE zfb1kwyEBnE^JjJYho$a&)vfjs0G>nQL$E_df*x_+Mx#*Bad(;FHkN&6S^sf$qD5nq z#I+f`6ufBAQdRD}S6~-${s^thPc7({hdONufI<4D&u~Upg>9|KNp8*K^@kShJ**QB zUJ6BmOOP7}gjF|E8Hazib#)fsTnbvmt!)!l^(J-tUb|a^J?VtSKR#U@tXK@$=TPS5 z)jO@RVo{`t$Qkxe^r7B=dAvAURa`lQ4j^U3Z;Z7Gt>9TKf=6gQ-asR~xQ|mu$eg)5 zfY6qSW5+UST(_NU#XmmW09@9>A;-`W*ihy{blg3-7f`l@I2wQD^Yn0ixEx9LHi|_t zzl539nd#q(gnZPN^6}}zAniCY{F9FdqlBP7INsHYP3(1Yksf~_v`9iPX)3c zY*|uT-?Oz|ZT7IQ#%*mWqZk>Q@X`GDP~v^H3^XkBL;f&tjo$%Kr8 zac^RwP>hvBR2P4!wHO$eu(4yju5MsfbOhT{GlQTMq77IK!!^-2@loE$(}!hOkN9Sb zr@-tAj39G@ZIs1@ht_tKAsBc){&@9*AIvdPZMM}*nAb!O;51&NTgo2mXin$T4Xlu* zFIdZE%dR84#+p>#+Ja8Z4t%zWa|*46i+GardUL+(+sb~x5XDox1B*kor-A_A?e zm$PJp2wXM0UTbkH0DVi#s_Q)+j#@b1|Mck8wL3a`F(`e z{ngO|Uu>OW4O9sK6K@ItSYaR_1Zwt|Uo_XTs z3)4&U5ys>_C$LcbSZPx>j|p@1y-tp1zkGhUe6#D;Yt7&ewQ{V9yJ=tD<2el*v`z$e z!u8jS!&Q(XSYcl%6N)xwx4L(qb!EQuSzoSYSDynhNh}*owPFszQ`@GnEp*MAYdXqU z`s;tg-P6_KDwfszNVxcCgQZ4`SFZ`nq^T!|Mr4MrVNj}>z z|KO#6bn}PLy7JPy9dG{qcc0}y-~Y^k^xdZ)fBx_n)ejXveE#zE{?68;eSH7*Z~t%c zr~mF!<$H z`+L6^e=y&_UHa|HyN`GIlKi`T_jjyyuPL4bNmi(D>w~gl0b6fMs``Ig)xV2R^mM1+ zfA{HgK7RQ8=`YWZ{|3OPU%vRC|MdR(+wWJOZS>!%|8HykLsxp~!>x|B%~i%=*$sbM z)ri?ry7<~N&!b=MO7!8=kAHWd%H5~Cr@QsT-GBSTpTBGXQ)o^UUZ2srx^2~MQg#XLY*c!P=T3vG5;vVN z_$bWVTQ7ip5iKGO*K1P9H3zTwY+8(#LEp@LXj|>#Xz|Wm5!%5XYMFfw0}FpC?H=Tq zMNgPnp!L($16Q7_qSNADhx9;*!`6DJ!?94dzJ5RJD_mEPTuLRlXz98-2oOonX>KEe zKQy=c`mN<>xE?NVUe&eM86h3_rqaNA**Ko5@ei1S&W}D(ax{c}xu%v+LQVEW>p}xN0j6OW> zr^~|yGaD1{T32T-5yq-_Ma-h?Y~O#fRHjE>oxDyDFI?GN&}QEl|2WX&Y`~HGVJ90E z3D?#4b^0bKI;uhIH5PwH!p4gmk0Aa5-s_8He~n)k$ICPuZNQFTRdG8_^9c59&jFzV z4w56D&FjqetO^ui=1LBJNwI9?Z2y_(FYs(ja9X{oBu_fB87gg4&P5)wVGq z7%kY~6zo655}X*=H^AO_de_S?DHNI!W|)}Ng}6K`gWBAk)vAAr8f}CT!LHF zAQvIFvB07_F(tXm2or;oqwXwfyoFHK7GNfvwAMCvWpDv>HZQ}2>mRL_OB>uoFk5+M z1fhufq&WtJU@Cv5x|rqQVmw+g!_K~#&Ou$9m5`O#)$6pi%Ms65k2ev|Caf~1%TQDtJ$|+sLg;~DY}(t|Nz&tu z#50uE=Bj<}EKn<6W*&`%&WxLb4r=(m+S#qdGa6O4DRzIa+iLjgm<<3)+d!R1{A}H? zhZ_iJYdP`^{@-@-VK{syneFI#tb|7=B;OFbdO+hGeZ#CcSD%xeLP!C3p2USJzP=jy zcgQa9n5B0OV%tXb)+=bQlG4CpRWOAkQu~{kT^_W#cJ_h^$+>Z6!2^%6H9Os#k{!%K z`=&PEdKZ74m(`{VYDfW*29A6B$ksy<|J_^GE+4DSH{VC+{zM^*hct#$A$yyUojxa_g z`#{zb6ir9Kc(xhzcmwgwvTs^7L8`%MX{=Qjjv{}x2bQrE9IMUi$Fo|H#ltJhE+keQ zjd!Iaw4nwLH-a8-B%ZkkUd6<_H3{ZFgK88D!Gsjl_MpGc?`rcF;@K!;Kr*trcdN_A zfY;>4SW32@J|?x74`?I>#F0WL18o)VJU>()ld_(N&0j(g|oQ;RaU4=2i zOIv@$G_P24kjy^;+2tMc`H(y-NBVOf`@#iU1G(UA-JH%9`YlAW&TXc1T9wfosVp@@ zDU)ChKg-g1W@m4_rRK}>d}K@RQ0ZfDS;1|kdC)YB<$x(z$T>TE>rFLZv0^I5Phhdk z`_xf`XRzw7&ZFW%thWvji5%Gr+nS?&C8C=Rbki!r0pt(aXYKcOvG-%$aaoG@58V`wiSV}w<2A0CK)oV!%fCp zFftDvK1RijIw<*9xTl)XR8ZOn;}gFkb_+)4W9eSr$1Jet7NOPaiX~K(anRAmkJ$|X zwq%8h>^UG;90+PAv*fSOfg*o!bXXo_>;?eqEt?oj+HBb{mgepe^JRnS9x6x4Kc9cP z0l=CplM;%Ev}>@i5SbJXnPV`SS=xW;LbVkPjSX_? zYlK_QQ3WH0b%tH0z}`8C@&K_P?yr6>F4f~Y580an9P9`ISdfh&HX5FEa=u?bU%k^V zQVShf0ZSE+3l<^?nB#xh@PS9lDA2lktFoM79ZY{|-LWiEPW-O6dMu7wJit3^f_in^ zqME~3#+abU!633cdLg0@&q=U{XkFd5IvEHXY$!D%7r19>mtZd_J)Rt(rT1@q4(!VZ zlEPvW_7dM7kIZV^hCRG_X?(Ij5n%mzakMg1z(!fkGXqh&W|edPjO%Nk+RKWt z)mf7_ZVtEp_1B*@OOM8~VR4k5=LA z4>EPPFsRuL*h+upT6l(?wQ^!yf!5Xe)&kuTqqw6?Y}luaOg67$R?W=1Gqf&mTrg-U zg{U5l8iprg7}l6;2AiODw9l1rUER98HLQqhaL|akElf&CM$_&sPdU!gO|EWSIlo{m zsBVr@plTb0agQ`p&BtL2-K*PHg;_f~w!lnub*)U9J6C_qYm)pkw630vS(^xgXyHm_ z*?={IaPdT}G{a#xjL{BfOh}l+v_DLFf!gcxJ6%mT&;%xL? z`*i3*SX)rm3ho2OVb#^g%SSH{kgQRKO2O*0+tci=(6)ut$quWB?yqiMtX%@J!Ibku zMw>Q^iVvNHu1AeM60WOTSLnp55$JJn;WC4zV!VH1$gHKz1xLqaS)p)s^V)$^qup|7 zRGaRdbyd&I8}tcBn}g4IUERK@XD8S0ELGihZ(FrziLGqThFFJqHMlxpW8m&PY|0RV zc@_U3@~$q)&fKxzn89uSy-bw!Q+v|9R;-L`|<48}6 z1TEv?!ZAu?-3hYOh$Sk}it0y0)f>P*fBpXDakP3-`Zg+N#atfc ziMvk5-H1Kfih1LX2d&qKpWR#ZHEd1D`V)VVRQy`IVFj8D%j0kvt|F|xs8;q# zI;YRdz+r9K0(qM~e)-Gu=2iTm6Kc{1T0NrstbDS~F@4?bJOBK3Jzs}zx_})OI-K>8 zKSiSY#(hXWuPe>rU)SrokaBP~R?)L|Vv=?4v#d*mY4&jwx(co5n;g=#vPWRxqF;Y? zB$^)8wk;vB7hY*K9JpS$uJXB}ssJW*YS7!E@$Nf$7Lh=>8>xR@pjl+LGp2b7*m#&0xIMejKL&s%l7}46CdUZ+ftYUiIxI#wX>;t1^Y#71k z<{2Rpju@BvZ2tXq>uPPAtllif-UxrbA!4ZG04-+UFRknO23n>-g(&dkp(k81#+Z6E zCg-|c#^HZ?-MV0I*4+(T*Je`5wu|jv28Tm}FBjyz-#iD18q~1e?UMHA`;BLxM5e(g!qq9pnEQXHbde{( zvUYhkKHqOd>^YGEJI+djMr_3s&f1jJ$yd`71=s7&I4ZTy(= zRQi6uJ)1ao^ERw4O!8U3DjOnequE$|8SLM0&jw+TadU?SD>`oL2|Ff{lI%-4#4pbu zjv6z8%9yYdOhTftsg+04nk|2>R+an=U(YvZIkS^h`WT^y)}OT-!8XHZQp4Nhk>Pa< zTZf^hHdNScH6Mjwn~erH;Axk_k$;5#|G9jPUipw&ucT;8(bYzK3?P$!H}Um%#9p_t zIh}WEqDoP*BC6YU_>o&)9ppCS{_;PM!&Q0p-aXE!M7JH1+X^kFp~-)4xAmMa-(Saz zU3akx#G~WEt7*mj-I@huIqH@A`RA|e`3$o1MjsOz>Bgd7&QWon1t2$VnRjQuZR`nte~}ll|uR|*m|9eG>;vi%4 zl`OW(t?lSFK}>cwQR&>IPg++K$j3m(d*}249xo8;CZH?mn3jRDh zONyh$M(h(u+f-~qGl%Q)t0Kkcub;1vn<%`5?{Fsv8og4ypz@GRVa%=VQj*aIUcTy(L`{LrU#Af=!OF0v zk<0M8>CBGT@8y4$xyw&4HIiR9F6NDEl;eRzo2V=eR~?pC@ju46Yt()|Pf`Vi3A8ey zb+*s$dZ}YYGDXZSms2L6@7KKC)JHUw%?J>&GALRH>ATRoE2(}yU-RPFjkc1np$!LV zuP+G3E9Q!EHw*pw{M5v5nXN)S4`UZeJWVvswsi5RH1dB|tm<`dJo=68G|f_u@^Kpq zq#kB_wA1al#p`uGar`q%)HgSVeaxsbSxUe6aK7JD&<&4$J0Ap_6eAV=P5p%`|ByN&euiEw%6cdtb9Z;_3ke1`xHN^FI#G9aJI(rREXjfm3j}bDR)B? ze*n&Edsd=N5`aQS^SCFpmg>HWS@>m><9*I5B8`7-`sgkImq2L0LlMv#SYP{S>;bGB z0kp6ApRd>Llg4hnxcq{S8`~)EYFUvU2#Bs?eWCTbFZ#wY!-NN5D#_X@)YQht=}dR| z(AOUY+3&Aw2`N^D&$j$r7Zrkfx)B?CfNZ;(0{8=fRh}pDbGkRDVz91d1=U)!u zU;gFW`ue(mn2^>{hzXVd3>THX7E;S{MBiQ7y2tBvttxS$kiuvAtT2X%_3f34qKteM z?hCMw*Ov-4jSz^~E^Rvu)p})&ZcsFA-umOm_t(wKJbUy$>sjY=&nB~>;O0~2iFMP~ z{{HdX*La*G zdNpOTe!Om7W0yNFooZ4nq6mE}%-WWfkqB2qCWY4PwzZIpGj6`_V$;*nj(r9Vfv)D`3a;0!YYd4x2@{gL6O-&Q>zo{ueeDrf zRh<2QD9{#e5g!9~UagQTxL&V$VX=r_@e8|cs{|W7@N6Tmuy2HS zHNt|+UpFu9%`2teeXp)KTU!zY&>S0#-maE~9=u++FK%|YX&e=RovIt=h_RJbVA;N# z?v2kMkHbZ>j>g{jxqL|^S%dpHbA>XP@TTQ|`1zZ?&LrT-2^C&vBih-d4TaJX=!gjj zcN)iq*6X25X6k6drqE^u`W8#~SYEMS2Kbdy=x_FV;DYeoaC%UI)ahKzPNaS$3)k7` zc!$>OjsNCZ6k;^rv3%9DSU7-l;%+eg=7P4pUwmdt@+ekc$f#fWYJiF1PRaNyMp({4CK!S&9RpuDLyd-I_vFFwH zfAe3SuiemTz}obVl(MW<)+h`Z#k^R5QLl{aGoLS{3NDa}Rcl5XPIc6ljhy{3F}f*6 zoXAy(Jq{QRNG+z?uy~j7(lsE~nAqDUoi{VR2e9(U*8xlP-Jwz-L?>-)cZIQZvbB2e zl|vR_?+5${-MNm|<(|#7>qMj3qd4pqzLM@efW1D3X&j`}RI!bES>kdmWg%y30+U@tlvZ!&RXximT31mNZ(u5{BCdF(~?_ zaZ~SFU*4C;Inu^!%VbdxB3i_ftw-XK*v6ZJ*SC*v_VMFSj{|06)+drTZW%cD8DW|h zxN_I`ZW8TppMUxT0Ok>4!35NQp)s|cZpXf?I9Oj-6XWJzU*{6dxfwA;Z*hniWo3|Q zoyRWcgqy-d5wF*S{oERM1_{l{in5lC2~c1ksb=GbN)%eJ$9k6?(1Vtftbx|Y+F;>Y zCniJQ%;2o|rw3CGG6d_0N?39H>^`uC=j0sihIg&^X9q?32tUVk9XOVM7+2yw4Yi-i zCB13N7Fw@2&LYbNVMzt6!7>6*f$(e+8Xd4*-824pJ^>0DY2MEH*A7>0S%;+PYNJt$ zD=GVr=lMKTjPElxx@}B9>c#?vofUa#ZQuCe$McsNd6-tzLL%|vTrNsy{lCdJ#JyTLT0f_u1Q62sO&lyVW}dV3t<>Rlf zQ;04W6Sff^mCIs(U!&<7swPAm`_QZUrk(1zZ&KtDq z<&T49Gp+9lvtgSsU^0(>?yK)Q6#a58++SaIQ=y5OU9k9qrp>Y`>|<8wA9G#amUJw~wKSd#tVJhG)|_MzdZ)Nva6JxI2DM5QhdOKHqj<2yeUFJ2=KE^b z=eHj#USF>P%d`c`Ua_(h+6pEs$awD#ax=_Tczyo%dhAjx8)G`X{i$OQn{#Q0B-;Zk z;NRet@5ipwukILa%x*cF(O%ni3tQ%*J9m74{)YNK@~CW4*0pCe7FDpdDRZX8mF_`- z_2K8RwR;#d0fOBt7?F-7)(f4(IWe zZN0xNqOjp9D{09XeI+!=v+one09{x0n;+kwpXciAoSTb`qUc5$Zsx5({`p7wzdp#HzuHIq?H|1LpMCQr;OEi5?E1(5{a-)qzy9ra;s2=r z;r}J?T9)KGa_g@s^Z^zgiF`zi9d?Ahn1wg~0Y)YgAlqs-seWjr`FbOZCMnN2+?C-~ zXKl!;TerHZPXow<_sehZ-mAW2diUvn^Yc%4vp>zBfBN#b|A+X~|M){ZigzFi!jC`b zr~8+W5ApQJAJ&KM|Fre4r|16oeEE^fLa!_KFxT^%(vLrV{nmf_>7#ud_BhSIUHW$A zhoA4(Th`y@$NxoISHGTVZ`qWzbR22z8Ar;g*J6K{1^FSq(es`D@e zkN*JR^Y5SSpZ@gI<-hM&FEaYiQvX(3|4&tV?aOt<;v8;X?U+KvK)AQ6%*jX$ui5SJ zAAkP$fBV-z|I53Fm$#mhconRk!Y>}dFC~~#m?lUXFEr*bNhQrI5?)`yx_kfp_{Is- zt7ygXpL}ufmRrMyDUSUDdA3!5h0Aiq#Dec=*)OM~MV(>h;Fe9@cu0UHB%E+Iv#eLN zR(wP2-kwfJE4e^wNvDF8sw)7Rv5YWh+$WSPV(j10dN^OUGIjSlEsp|g^--z0*Qtr( zJ=EliRO&ah?3eq~(Q>P5IROmo78JB&m)>pmvG&Vf)8zCGtv=`JXw7PW0^#I^+O0Xc z87gB~t+imj*;UK!zT2&d`HjavUpHK!3_0_3$Q5w%00>nKm!^>CYr34i!gW8HPDjgD ziat+Ru@@d8Y|a(Jm=&*3rCkxB`ij=e{j8^>RS2nt$qDWt8PPcv%_JhL@V4oOD&9Yx z&rYidjZuP=$)`Gt`8)5Rn*L|M3Yut9tw6^bH z9nT+@uQS@rWpWSR(6!C7Mk%JX-=SVpxb{c>a5`Aro94I!tA!#~UW4vja%~g)xMmc_ zH?ZD(GVoQfSl1Ss)Vx+`HiI*StQD%}qhTFHO9*y4E7IHLEa2E=7`b&YpND#vD}ZbgXb#aEHM` z;4M`h)OF2~r?|L(>Tb7~*5OzohYRhgE42YN6mhB)Em9D?ao!0q`~9c>2J(Razeo+w z-ot2N8wS~04dl{P&^9I{+M!y0_uJ!N4~I+Ef(um#yyAkgTdb zluwBmlnbzbtOC*j8);WRAFRv;eeG0MpJ}EXbfV4fp_H_QYa<;0;oZ~o@!5+dQCL&X zoJfdMo)U+o)5y*SJGq_(*ZG;miCKe^S`(wO*0338qM1zV0JM#e&BE*aT;lZ7c!Zh4 zc)qrr2St@3Wu;#X$m7> zJ2B_!nqR)7NyH(%?C^nfPYg5H;kjWtyOsHr(n}ae6pdm3<5fzYswU z%IvVx{7pf_x308fwQit1H;zL}L(En`L2DgKSs^Y7CZ9)~k2_Uv=a+s9;~F0bQIU?f9akAPplkL5C4KNcFPPRRjc^wZvBpR{5V5 zZ+8#B9*$UHO(xxvcN!TxF{x9ky+~gZYPJwNAFfsF1}GCL{GOVvP{W*Z$!Vg4Z|LKb z{r1*}0KOiKpcVuRA$WYr)6;Ol5vL-5wqjN5Mo{o`*PqAl&vrWbN_D+Fr~-O03P~Le zQvpu3jId*Sh+)2eI=y_pU{6?s)m!P_XBP0@bz;$mnt6kOeL?Kw@rbQu!PeL{$1Q1k z@ouFA-KP|1K;MZ>TvXCdkEv3&X;!lfYXQSz#xu3rYhC-HcB)Bk1F+I36d z5CzMaQU1@yfyj<2Vd_5W3?C|FM#yaGVA^ZR&y7 z%lUY%(fi<*OS2|Qw)O#PNrTrapPV-u8JB#W-zBR|v#s=Y6%7tiOr|5}wf`KQuUS0y zNBKG*FALM<>a*uH4Tw6*h3=QIV>+^IFp4E#^QGUPuaogrvxp$I0Bpp6^DZ(WuF$HG z8&}Nh{9DY9{`bp&Ex-l2XfC0T2@E^6_+V(r-D?A#TZK&vuG5>V7)t^PI>tFT zf0(i%L#xTEI&4?%>HI^7_TA~7d-lcBPnM#dXC9t#8Lf(FYa;j_alM%PIbTj!$u!1b zCoH2R>l*UaY-SHCHj`@Gm;$g6dpW=TSSB*L@{rUZbx5sd6bYc2ZGu&Aa8`k7G=E&TH)9chOXhMBbZn1f=yu^0i8?Y4O+1vy9sJh zbk-hJ69kXSQQ=!n#WT6+o zdpy6{T{KlFGl#{0ZxkZtg|L|s=2Vl)j&pRu>vWy0ImhwHlC=aEt7(wA#nTZQ$zvz9 zf5GecgQwhq>%$$YS@kLLIM`TUKMsdw)w1jIWj7_X_jGcWF zFSh`fi;07|dk@|7kzCctJ^b!4Y_bsw`x-txe+Wfbscy}G>zdp_$tab~xh=E?P}2Ly|9FJmpNx{ zK7p(fkDcm&{I7`7;fRf)-g7RgbEQ?;8V+RX1x3R2(@y2#SH$>m#MU+!6Df&Gw$UIV zDc6(>Xb&8B=)}rI9)CPa4~QhRGOpz&R^hV3L>pjGSK7eqQhB&QyM?NA2Vg55f>YFv z(Bh2rTC3n%6JB@Lp!vKzy=f*`*BVkNy2fcsGY#~AvQo|QD>&_pJ6T})eSd#?eZY_~ zU8>R>2MH^JIn3JZPo;+2*K8#!d)-fprVwr4qJ1!`k1-s|zrtEHxJ=X&V0bM%2*zc#5xa zI$pI}2CB`H5<2zNgOzp97|s#Pj)Z-|>lTEpg}KkllDIV?L7LzaHmq>2ZQw?M>zCaM z$FB<*+-weyr_%(XK;f1~5q4r4J1b$n0(J|3Vzx&97WeSKHJB_VAV~r(w=9e#I}09f zL(KXbl-Y|wh}jy=YE;(vS{YeEOWV-Pmm3nZic`_dabiv`3%eEA&lI#wt#5=A*Xoly zGdmnG({L*r80vsgDioVpa2U9UiuRpBn*R;hEr?l2RUDitgE`BZTwZ8ShIj{KDq9nO zHE%=Aa_C~O;Q>%)hEa{gWNGd)h3C$HjDZVWw;*C19Dllmh(XPY;0kM>lbfql->gNv z5w*-fAydR^Z8lHU8m)M&rj;Ght<};uBWGdaL&7+b+nNC%PI=s3JFdJO*-lr@%lYME zI>KI+xGhZBtlmZ&aaMYreYsCNJB!vftdEDI)ulEL(uHfVvb8uRYo*bRINlO}=jNVh zosL%E<+T1CBQ7)HSmQqw+BC#8H)1`jeDi!=BrBb`=MtnMj6F$ESoa>TQJv0PZAVX^ zZ@_jzh9DK8hdren+Ax?n3<#e}jG|rL>X>wt~k{x(V$~BMSTp;aCr1tZd zJe4d3dRON4B6dklTUohEHP)SfPWc7aEr=K7JnP6Q&>A$PjA4>&jx{hI9CnI0&tLSE z!`vfh2(Pi3CmqPvM;TnX2-zlBw;*1=G*Kqb3Se<>g_d(ehGc{1PK?6OU-rc6Ew8!e zBk)NjZYkk*H^TB3M4&#iJErk#Q6(o%J z1xnPlXDpMT)2KV*;vBTvINyk*Vgkge;s!NEA9sYts2f_-o%{gwjoypyQdAxhJ^CfJQggy1O&ZvxkjR!-R|LZvu7$I_c7cMv@UAL3rG5+;c5dm2=^pnYa4# zcoVcjNGupc@31zD5u3-O!gC14dugM<^*=v;KE3WFt*L6^LZX@^;>!;2RSZ?)pv_31@g3pzhakcc^D zUFozr(lkq05pq1(=*YSHczQ#Q1I=bOF^np*?4`=>&DpzzmoIInoABD@{FNUP)Pahu zF}2!itqLQ5Tzp!3-R>LZ#)a1D2hpu(Z;cJ8LT|%lG>PCS-N$TO(uS`9t+1*w6Hc2P z#DUX@6min%S~-Fw?o8WWd#qTnT%+*0Y>YeAA($S}bUH(hX@u3w(CiP>Pu zo?N8xw9cL_Yzvy|P6zaY>vTt-mN>u^O-iUrLFp%ddDz$}EXq55myfUFFk&;6$?cS6{h^<}DXfL(VhY#pRFn2( zPpZg&txdA<_B)R2&hH=k!{g~!^P;sv;X%+^E`8vH_zN^ioWv;`)7oyQ%UX>R8BZP= zn-69mo)eBry=xHtUUrt;UfsmIxH_G6%@oPv#0FA>K-Ad>&bQS@Bk@Q%rvnA8Ug?g6K^Q!r;4vD$ZTffjc zpQ9R9ORmg4%nZm!)6%Iz^WdzNHmgwRB$l$dNh7o#4FCCf#Sgx< z)16m1s4U$$Rj!phH*s#$tCbq=f2YL%1lQ@_E9IUP7}lkYR-wX+_$L26I`c% zAI4e=q_LK?jxB+@8L1v^DOC(whQW9&7hdhT+h9wc2(nu}`LT zI9jVE6{q>6s$O(vEV|Ua;yjiCeIsF91MKIoE^pza5KGrikz-?I)_qXxz^l&hJG+No z&${=uZEmUuv&X(1eu{jk+G?!4VL{w1%eIRC;PVY9;IH z`Eayq(2iMkrHaz@F zt`7&RSDm=j;96UAivblj7$ciOQ?rdL=lk*Lbf1MYkjcWRk?+{*YPR@9#Ku0W4BV*m z-#;854S5U#&br1s2l-rtp#(*>lw08)`N0L&=~p&+q?Fl7g1R#{%Q|rF9Gb}NE*pvB z{loDdJ|XACU}0Tx@G2lGE0^GZrMdT1Haz?S>vYqq)N{BlRg{1ytjknjNoh|8NIOOA z`-js#eE9Y0HFGVDdB$hs99GEEh2llDQT7R}jyJ3&U0GBDtK`}MbuM*TXNv46-27%^ z(&1=LDjBQc3W^1g!md1Ef)b%JT>Orx`1#qPGgr;ZSc-#5LdTX$;pQoS9>_+4?1%B` zc+(0xrF9xXp;aVX-YNxX+B6765Y#QSPB$%~QHF3liPTJd2^fz&R-PEaac3y~%E!&| zBb{8>5Y1Y`vZ@*JmC38M$Q228T9U5LAFU34g@E8e*nzCYmrpTS{gkOjg1B)XAMg5f zMKg$08X}RdwZwnK+(?#xn3A~TY-59#KAvw`HcNq}mX}M1_>+Y#2QlSBT!OG}fpxlN z^d@RK^h8{N+;U^7*+hDOJej9%l*1m+*Y_+` zfNMebKnHlF-qNf_KKsnLGqtjO)@zVo^uBbiGgngSm-Q;lku=Gb}FnLoU*-^mO+q=8l)1{^IQo9~;_(mGFwbD#|>7=GIIqzL>eY`qd zKel0buNvMfRUVXo=19&mu||CK)daCop}s#oFixjAbuOvJGR4EpMsH5t%DVFE8(KDj z)#<`N9g0z(VNA-kRYrYJB51eQj~{R1!?$nN58MB4>s9v;{qEt%Z&`nQX556m<&v1*zWcv-{kwM` z$44D^KIUJa`s*`qzP(y6S-+RJKVz&^dzw(a^K7H{NvNL4;@nPbnSXk9_+||)UfDNq zZ*JG)yW5+8KRrGE0>FpAd^djoyLV6je17)HM*or8Pp$PAPtv6~*Vih7ln8u<{H#-? zE=AKKf)jLJc02$1hkyRS^6wwghnvUipL5bzH&+i={rc*MargUg-lSzapP%>*pSfQJ zYq+YxWW9v{8f|t02}dO@^690VaXBaa4C}|+?|=J$4(eBdm5|m$E|D}hp_p$EP5fEXdSQg4}E=8TjSvN8s1UwEU#MX)4KNu|oV zi9zRo*6ZS-6$*e?{b|PZG zIo)ePE0!T^nbav6Hbqz)qjW9uY<0)9ZeRF+2=L`_$TUo-ftiku6bVs<8CKT2*?7kK zqc6zA@nAVLp>mIPA5zvt5PTAR)ZpHbNP43>R-;S<0Y!D=P9Ue?}McUV(TJO#?y z7&0d??|>ED;dEM>MSC7RBK2WyXy#RGu=;_?QJ%5$=&NveI$E4Xq=|uyL^2c9xl}uU zVPxe(Tf8(5;^}DNC~*X_v$6(Y30o&Q=dT2(QbCxunX@wKhG zhPhD>0I}9*%;JAW%dftFJl(j$t(W*3&@Nzt;q^OBw59Y@8}Uv)eRXp>ji0lydY^$( z9bOT9DDudy2IUgm@moGl2difCC3jSR!f{bRo#zJ{;X5G^(HlJKegF54c``cn9v~s7N_?#Fi>q9hF6b(3h%x!kkietn1_L_xW(N zN=hA*mRj5(1yt3!luR&$BW2vWI=%7J(F&@djSZ`lx}-Exr;?;~9yJF`-75E-4p!1y ztQRzv0dj3jaPF(bFm=^65WV_)3LkB8II zN*I|Uc^Tp11E)Nk=Tm{Y7eIN2{@53{^4G`Pmeug@64{{$l-7FfG?&{d2^Ev?gv6WM z<86zlHi5OHG!7!>%AgqO4>(1PY|of5|H8KV&-U=1gjNo^fE-yN1u4auX;R7qmyy}5 zywi!a(0buofR}HYL2T`R-Aur9mN77h*2p*{SG1t0n{d5=VT)hqxzfb3bg2ubKCE`l z67-?h#>o_RJeS^mdpKCBq_8Fdkl7rPiX`c|MS@*=?^_h&Zk%pen3gJYcfi5 z)_9$9tztX%u>kAz7D`w-PIFrG(po7z*sMhnyk?AyXs358(0bv2^K_T{k%p{$hz2EYEmbuS`u z5&;$&RmwmZiuXadL-f=?{lv)v3cO-jCAS z!p1v|@c07<)SPIiqOUingXN`VYmpGnRw>fw>@6iNtq{$I>9Rug7hs)E;9GApdudC^ zM<9jA!oGI&a1gKVx@B0W-#R!W59&oIPbr2Yr))Dg>7W#U(CySM^uexACk``-VVt*K zg1iT*%4@4@a8a<5A=j3-b2ZuR$xa|b4r%QGA(+`ZLn)If%q!2W!OcJX+u>OCHdnC~mtGrE z>8;V~u3<-iUppjssKdXUj+JGFj8elviIyzT;|pr?+I(U}%MGml^`HLZkB6fbREsBf z84WX3E>N`w(~3+QIXUgLh`j&ffBpC2XmuPySZ7(nB50XYR_{$I2*v1Ia~JX z(<({+-eOwuEx#7i%9Z~Z5(*n&tg#Qq#JOYh*P;h1?js_gQjI)PyFdK8-f+kl(-j z;qr@Ujj7dWdL2a}zNT2u1#Ap4ihnms(C=TqZox&g+9;A(d147}K(mi3Emv1)9k5*1 zDE$I|trssJauF@*srpQ&Ig%T}fg?#nr!X*`xonX3_b*;Q3Uih(dtFZ)a1k4x)m)+ttVA9X{wYrE*jpye2J)wXi)%VW{Jl# zr8T0t1`(%5lpGms*S21G0qnAu=c09(rx~7qzNfq-X@aOp^PIEKjr-*H2S{pNhD(x4 zVC4lP5LRxMdq!Tpw-G3JiuUghkX*S4S1lrLiU`y-Ck~TR_sF~>K2F)WP=0@ap3g(9VitH2_XkMST!d@gxT8mo{iKV{Q|G`8jq)s=BySzY7cV1! zauKa~oGM1Ttr_C)#yw$#$Oh~YAaRSKzIYvxi)iHm9aF8q1!bffUzh+Fa;+&nV=LCz zwsrbZ9RJJS746)4a7i3P?-O`8M5}b`GYFbEmxYOv^WfPO5fu5QtN8ZrGtYq@ zzW=OEC{ERfavm+tu+`DKy;kXZe?yh$$hF;p+v=^7mC1D`0aG2#MuU#8I2(PqU`fVv zT7xAl6=6_H>y|{U z15c5cLf5;G1wS|4R8d2Jhx}n!)GFu=mNzQcMPHdn{P6a3!H-}8?9HYzTKHX zk@vDi+na1&3R`bK82rq*EOt&T6MOY4EXlxj-6rY$C~dvO=ihxY`1##hL%Zy`x{0#i z8GA(#N5E=D{3QbM_EUDx8BwMz_QJg+<$`EU^IQe(jc(A|OBLsTcb^S@rt)=-r1Guz zupwpCyq1-jg`x9!tswaB!@Vw7MtEy%6BkNr+2f50kwl6W@Q_^*P29FX}PO z+HQnsQy>Fbl6mOr{>l#65AQ$1`5d+?gDI(^=lQC%YpIfgCv*n){!+>2-DfzT!&cH! zkNjQion)is7hB1HkJgYrioQhS-+hSlxi0T}Z&ajq25DX@c`2dM9eczaFVXn-pW=L0 zJp~KTffTWul*;_>5GB*Gd5!uKT<<@|dGNsB2F@g;by@Et@mtL5gsp2Qf9Wdz{~YK4 z#W_yw@Xwy(MA82;$5~4M=ge`IvSKi;DTH;FWNWFGj7%zjp^o|Ab>%-c$N3p~{^jTW zlfV4kvHf2!)ziOnU>BU*c2pZda&uMc%u`G&7d)7||5xOHIU41>W0La`&}km2X-ey8 zyS-*l6s**U)Vj>xo`-zC13KQ_6XX%6?R85vAjX=j1@zt*)wDAqlQ}Yb=P;CVBL9Bi^zq%x3Xe#MR9@R(hVlyT7eZPvf+-ev0--~s z-hE{H5hvO=k8#i-T?15r09WHiPSxx%l-vD4&5TQb(rIsXWwkykq>R~H*?N!_eJ&XP z0o2=X`+Ee+Fx*E&-8B~Q3DrY+ty+|{#bJ!H&-3~tWrgzBR4yGcQbG5%%5EfO7b^X^ zto{S3pVpf@yFW*%W_kNY(;_W`h88H>B5XErw}Xk_Kau)&J5oJxW$FtZMV4vVP03;T zzgH7~(SsEjKag7gemPJ{muLoQS&#<{DseHdD^FHWEzO4n!9IVv94FkXNMqY&W)#QL zCheuuZcBiD@UvCL51c-&%Yhn_M`(l^)Y@$UR^MATTatFkD0L|I?DH>|;{?U?OpVpG zOe`t#=6-KifMLAMo|`)Umh~;*qX*TCs0PJ<52$T`lM&WS1ElB zca81eZbd@TsT4@1e0-!nT~DNn);>|tC<;@OsKOEgD~Jd3fwT6XS?~7Chd%d?@{(Mf zw*|S)QG0Kl29TZ1!2JN~*V_v%FxRlUY73bY>nc*)?$XQHUY61EiTddc-t_(ovJ|cb=I+a@Qx43={{ZUC{lz=L?fQ%{Q@dowW8St*sbtzLT25@fejxSkTRxu4 z2aq50;G)So3$dA7adBCtm*C?g^~>#lcQ5l^Ew)NC*Tf8nchll%3Rd0WlyZLg_71%) z|5)uVLlaGnh00OOl$oJw#_(EjHadLUvoCMI?Dv@=;IM7n2yN|7{tzE)NX0#5DiuyI z-}N|k1yIFRyX~1j(^j2LEahJEPB?7SczXlm=QfSKfE-6M%~<}u&6@MGwno5z)bj$u z*LPpx@d%VRTC2g{#b;`(bHWvMyYm_+fT#4}{#d?Otp_-Xz5@$QS-CM`Hf!^;$%t7&33ppeMnqk7!mY~D*3TpU5&imrvjTHeN_ z>O>@VND$)w5~ncp>^-$wFIY1yCI2+8NHFp*#i7=FdxMr|sRy-x`{YuRI3craC$r|d zXwUMsb;u8X{&M?yS_Z7-QiG-?LIQ2?qzB*?UCUvARN{1dH%pCWC5RPm?238Qwl}QP zh~DypLrwhg{%IIuQfeX1I>3^dYzpTLvWEEsJHY=I3PDfNa= zZOTD?R{04L``*f+4=Mq?U0dwynYNOGO0~}E3>C;NpQwq{>m{5U@Dlf z=asoXuHE(NZV-x=sS>m130fJzIe#ITww?5jeXiV3IrWSgMhcYHvfzuc$0=MkyF@*lzIg z`uUeqwjUO@z`cviR|**wALjXa3cb_#bbUiqk^-h+9X*NEGD(KsMQpd^^Jsi}o<9Hj z=H7JAMe3uTqX(D!?|hZuR05l5f_- z?$(cAZ-1WJUfc?bbNZ6iRj^brFs>D&9C$1m7Ir|WxLQH^MVrx-55Hfj%MWl6F=Qq&yg zyu|5$+wHAm%DbqNIt3T{DrWgD@>+n0jCxvM`Q*2&;jw#HthPqJAQWL+yL*u#yqN0Y z)Y&Kh`OCN4d&d%!VY^LCL{}e^EzePOse7;yPt#sP_3N8klOMDrvQn=-@7_Sq1JZ|{Tre4=_8lq7S;-c^IUdAibnz~I{4>NqU1Bu?XUprGPdYa8!*A8I|x zIQFjCG>oGkMyUkq-`?Co^qC>dHXUjtDeqtn7gvSK;JUjH~)oLOIlXiPPP3H)XKbU98|lWsPdP23@wLGpx%^?e_1FrEhUw|Ck*=q#@-4^-VR zov>UB+k_N>lw95WsfM|K5mH@=P_^BE!O|zp!3CgWP=L?U4~*Eq<8=M-{_bs^1I(?B z?q0W#V=ztEwwN%GMSfpp)!dU{Qh*t$p z>IorG^NSPvh;3nY2-N3aZ;w)c8KNXARh>GqK&Cp{)BJ-VkW&2}0`<$M+k;e6%wiTp zO98QwsjfKKl4Xm!(BUJ@Z@>I@J5aFdXt*6dqm&YJ8&wrcnqVkO{q*WxuZeA1YCSDW zklRvh+fF@$mBrHOr)z6|yME0|Q_w=Q+5it3=lx56YjD=G_dj^T zlVXOYAYrSP7f>?;9%{X>cE9asqg7V#2s0(HmOdy+dP-z!&R9=X@%;*BPQg9S!B#?> zYTIrdMH*?0q*RC8;Oq5IpCe;YvZp?ajFLBP_y2IHBF}Bcbofa8_468tW_Fu#7+w8^5pe~z6N;3^>v)KVKOw|d;`nmAqG>$EiC zN1&Ce`)y$+W>KKP>4@ytZ@1%Q>$}5z@=a+yGSjKg1=S29KZ(OSaN=}(gqo|*I%}&q zwOZM39YE2HlYIuC?$x?~J!yiH0SXq6?QY$vfQV(TqdESQyldN$!^W|{68Hnwl1Pyv zFd6Kh7$PNRI_XP)(A`dY_Uo6bj+4c1CM9EDwqyhym#g|xK21`G;^i<(-W(V@U$KK~ z2G&$to0DnC@EQcPI=4;+eX~^c`S|T)%~k~WrPu+H+?lyi2DNOXM&R1Kiu$!5Uw-Ko zY%KY%JZm-wt5#;XoZ#%nzDYLU>>sB$+5tgMToJ|1eUfp1U9G{j*+`am_t~8B}E*T(5dlQ@pTzFB?gW1LP6&|1|cJ6OHv=1#CGR@r;01~hjih3;PO9>+W# zECnM38jdvxl(4OMsM$8#67~6~ayU>KyfKbA?F#2UJP!__B*^&)_{L^U&+hL| z?@WZ`)*_03o3Fm$ygpLLs==?iM{M7gUpn3O`WoxdUb%BTx3sNwXn-Ukve%@fIv?PGDcKI=yI|)KbpsvjR!UYZ%6QB*>`(SAwsC z>U0+zX^y6?t>8qSn+!?Ri}IL4y4wQuj@9Wdh_$mBQcK;;%50Q!RSd^uDM8l10;^vS zhbl9FGEU;p#^%BIV#mu4 z^+;OS>gv|uBEm~zwt219hc&@X%K2ias|!f)(jpYWOe2oJl^FZPs&nL8BFyifdWQq$ zRjg-Nok2=eyje|Cowd6ZX}i;DcE0j|5K2%@gqaPoTMj~A7-0#glH2Ip^xzwi9x7(J z#p9g37F(=*twpf4Nk2?&v)Lt1z0;jn#zbbU7Q}CemUKu!g^{1 zDKFC;D+XGq12a)rRIRp~7C(J|K0QdWh6N3Cc3*0jt*)KjFe*D)EpwMheb&?O&5e8N zGzyG1B~s$TNrQya7@i1s_XOVeTNo+&*FW&D-ppUWm1}S0?opq{KmWy-{?&{3PuAB{ z-+6rV?>{{0k00L%KgBQi^V_E%%sxT+^z`%V$Gg#A#!nyLf9?Mfzx5A)-^HW&id@Q) zXR)XI&kv9B*AL&VANKX%ZGF|tYkz)y|Capz%zPZ{@0iPnk6+&P-#$Lf2c6H6)&2g| z@6UYq)7|=#^?Uj7Cx+^cDq1l4NDhtS`wp2pQubi>wf`SUkniFhz24dPA0D69=^8dEhzx1MOZ>}@6&IGHU4pt#^w56gK=R8FS z;*EjW2Pn^<9zXx-0{pwjyVtvZfA?SW`S0I-02HWa5zw1U7(t$ zNL#{yfCwGE#SsU{R5o2SfVy!}!t0*bi`O*dW=m+QD|3d946Aq=cn>t@$$R2QK1#&=0wKl9Q^qei}43YMgODezV+wGPQB z8$-tLFx`6l%0_(B)+((#gW#NF$?16aLMftn-C2eE1*aRYPhCIpeNlWneQfqBP>QWL zZlYqTD3pPa!WAdY9-#|&UGK)H(5^e4C{myW>YxH`P>!Sp(8##8-Rwp0k9WLo**STh zy^98yN;-JWH=1{Ae=fU@cYnO&CFvz0FEQEaQ_W`Q!YFFfdE{Mg@OV0h>X2&@Egi?? z0z)E31$ID7&I&i?`hUae#(R9O+tWqTO9lfb7!Bf8A`3pgM2tt>yfz4&PIo+xpCmTg z5+0J#10R|>HBYUe<&A;jcc7kce5?6YoE!>r(4|yY-9fO4e{qsIBY6R`jS}7kCwsW@ zRW?^~iY&$FlC_-R)(b?8s%tigrB>E@eMsR8PN&}hSMVvt*u~K~M~uoNlVM_sux^`F z^Y$Bjt^(D9c;if|ng&U*Fsv-2OaYvjX+!bkcc4x;DO;r$4|q7-t@X7XpVU_U*yC$A z7L#3&8h5AHe-wP^TFa@_R@d|l0u}zJHFzcrXdAm(zTkAa>vhWNxP}=WYUA9=NG4An zg(To3Dfc10P-w0Qdeci;8A2*0m&eH zwTM%DINkc*n(JP-R%BFQDVcMtwNsHu_%s|aBGkrwf5LAt6+9d$;0jpa(sVG9ON{sz>I?`_-Y%0R*H7fD%z`1E0A1mP?dDQNj7)w~}!u2Ovcnmk?%wh2oe zbtw^2Nx{u$ha%*4L%HfVoKEMNt&|br$sl>rmXoF)iSX2F5Mc^7Z#D17tt$y!1!@o* zg-PX^eUcamH3JRl3vfVJd&H%xuL ze?LE>7m_d@EHlCSfL=$%zS7h!=40zt3$Wy*>~K+;JOhb0KMnJEWpNV&Hh6ieU#{0gj& zcRz&2$m`-D74$huhLs*uS$bALUt?Dff2Z435QPD9Q5zzWHce+$%$-skguby~>kC$= z_mc&Y8W1F%C8u~Qn=vM;+BprueFuE~27*;9xP;X$l9}qf*0b>F9jd!@=Z#Gxe_(Zd zu!`4>s+7?+%kVUFo+|@fz^(a@ZLCgrKrE8trzPSw$PirA!~X_c66cZXW~6$Ye>X09 zdA&B1tS?0h?NVuE6wQ#kjm~i{rnFgeczim&#_nEBpsJKyb660EB>^DSQy#m=rYYER6mZ)_sF;B@N>s@HGvYGg1i50ah*d=_6r#&Hbt zNa(w5uTRg%kANngisBR`bIo|nf0UN&fF3Wcr&s#g#8TH#M-k|GZPIYp zUZs^jjb-x^;pgMyxRMTSla=B#)e)%$gEFt9=AL=8XXCk_&Y!rt7J|;)t>n?u7^0lr zt17|nkb2;By5q@ZH==@AoO7s6Yv8q7sGCb`8)|6pK+T84ajJDKY->uge{QB~u?7@w z2W>=Z+|p+EUEp+jb8v&kgR@x?!c`fqVOqk?l1&-9dE`C6o<53}r(ss@t$Jj8ZLkdL zB?9{L#F{q^>Sey39-#)bby*&dWp(6dhDc?Y8&WP2+BfeEUjB5w+etX}s%y*bTE4mR z;TkM+?U|<0Oq*;7dws#_e{@m~3QKWN$EA22)O<`9UVT9Zb;xFf3ZRa^*<1zVmUQMq zt=aI#odypoRor*y`CpD70-Y$$%cza4K#sglQX8#{LE%cfdjJEc<2^5pK8vpl7NU#= z9LuT{*F1w%;pQz=0Cl?O&DqmTQ#q9-A=|;4tc$wg+LGwzxa`aGf9YqQ8b#XNZdP6r{9xP@bT&;)ds0)2WgF`M1U8h)bi$TyO-C~M?I{pwnRv2r9Ujxa5lR2}ijvvY$fEo3=)Fj?NkSSnEch zdMyFfbdtzp9D+#+?D^i?C$-ZP;vwobE>#%FYXzqWXA92*@v5|!zPzoCiKin~tWL_1 zhhcLnsdVI~e<|_Wu8e6fBYs;8q>kS_9jI8L%$P<&Rtr|uyG%?(m^$y>vRt4#eQja| z)X|t3LBkcBC9gCBr0Hrh_HKgT)()xD6TXq#V2*fhaq0mn0(DQ;SsVs#7Gd5#{djsK z3nC!oUZ}JgOu*wOTB#? zTM)cvcJ4aBYAKQ>S)0wlm{v~n6&`s0(5y>oID=9JIF(0V3tqz$SEG4LjrXpn-oAetiqc@;C9g8 zmQ!#l1HX>;^#&2vMs3WHzi)5TZjEg&Sy9S)WPJ^7*>y7QN?4b!GG>SxaCaN4F85y% ze_3BcUv^-ZWLXik%CaRh8P|gCB}g?1{OM+R|GpyXv(;$AOx=?`Bzu>tvja?VU1#+i zKYb02MP|i=Ol*N@tEETr)$_%PT=LP=ka}IWuMvWnrpT%twf6amNR&i_r2#wozsm5(`Q>q~%=juBI>a+gv zS?+#kQ%I0~=v2i*1y<{n`N{-JtS+agp|6?oZjRKR|Ajnv=M|LH&aJl|G^aOdT@I(G zy&v%Xh&RWo6jSBpRR$5cP%@}8k_2UD+SGhg;wA|G$ zPEV~~@2+WNK*(bTNMb|ER>LY1hnL4#le zaetyb{C##UyGDVMpfe}!RIi!0hI9=$wHc1D zzz&@%k1!+~gL_N8rx{&M!`H4zJM0gM`wuaklyNi02q{C!LPv~33{nE!Pg`u`hx;d~ zmcp+uimLf(3*M*bU3&NEJ=W>ahWO$BSxRH&pAM5NO0BvEX=NoaPcFrWf6fvg-af_6 zfwD<}tH9K?rWIooPFh};%#JfoTSV>;lnfsT3jy7B+0ZD6d&tGiU#p(B`^DR*yWe7U zXuCMQN->!EvNlCVORFSS>5xjvtKa>$ zp-czcF_bUD*_HmE=GASjin)%DO1cdxQ8N=x1R2#pnD=fdi{|$fX&HVCPdG zUwZQ8ldk>HH<5q&Z@&E`fB5dFUcb*D?vFox|2x(13w{6T^V@eHY`xkazkC0&|4aVV zzx^gZ%CA7Gd(eh{e|q`xhmZN`x8Lk<_Ur$){Z+4T>&x5wUs>ND@sGAYZv(#l?!Vsk zzkc_F{~-RwJpTO9pC9?=k017z?4QfGed}SlL?Be$?&m(U|EK=5V_ixPO>PO z)L`^DjVF=2uREs1N^wt%(d0>?Rc#QCO*K>P9UMZv<8<*esONb+h21E~b2Th`wlPA! zR=I;nX7q!ap9fBQ_jrpyuJjZDaZ^&dKtClT?xnW@91<6n4;OzH-(}xSlx_=0#o{->L zg=o*`t#xr5%VZ{IEikKTR1OC*Ur|XAr9M(a#4uU{D+!sXTD{c<}@B zr#O|?e;jS%+|%jJXM~oPpFKv)`AKK?1E!6$vg{oJ82Ah;B@s;vFGa!`vl0XEow)OmE6)G|LKVvsn^qZ`gHNxpwHvU zec7Pl%SS`e-l|L83Qt$-eyD@>^TkIEe;k}YQD!57hM>s@Wa*wB6Kb&Xp>}wWpr3!f zIZj2W$V^U9u(TN%u6@^R(vV)c9-fbz-<@a1w3NJ7%IG8vtr={WABB~{R8Q>l-*LM8 zx>H(a6-S6ctbLz{Gl}M4>e%(9dFmafyRW+j&X@|X<7NiP4Av`Ym)rxX^Wk~Hf8~43 z4$hwl)q$6-q~qJ2(~2%PPCZ=aJY08v_3<9h&oiz0s#C^L4c|5yBqK~Zdg!o&e&LPN zhpYEhKR;I)u#ykN<^{>Xar?C`t2#+@Mb1P1^x@;(^Y}6vsfDfVPHM4536l;=`lQw4 zq}2Bvr@QCzkqc}QR@@_p2)**yf1}nrZI>F?!~FDz+v_{f*=4k-YZr_c*|l}K{!+le z97#71aeBRb9&b%l^NALjsKO$1dY_VsDVY>x);h!K#qNH8S8R8gC#_tQla)iAP>Q-@ zaHqh-^YItE`*}ewGSVhoH&Sz(D7WD#4hAV+`XSGJvAgegZ0H1L4P|HWe@?t6F>}e! zs;}d9cl-Tr8zZt%!AVxSjh4ub>Qkb@h{JQ0m)qy@9?({-nX4?QNFS;6a2FiRWC)Ij z>+bSqD+lM}v+bGcLnLa;Ev|$YjqM4w>+25l_{UFo=T9t(j68xS%Rc+{T!2LllZ~%- z;s>>H`gHrcp1Q|Yg(*vteUXdA^%!p2n~yF@!j}Q!E>zi$ zqlNXbuk7{qbr_t|7rceytobCSHJsyS7Eno5DZ)?QyQnp<7rBxc2_+;_r1LD+VlKWe{nl%FH_Z|PwGjere#{! z2~AG?j2<|>-CYLFNsJWHP=(P+@8O*17{O#`dQZqmH;Xwt|Cy6gw&>~U< z+r)mj?%vkjf8#0DZ*r(yV7bkav{n-#8oU5hIK|#6PIr$dPtsIc22ls`kX(2T1&9T9 zoqavLm%6-r=7GOTEZ{xFWe@a}2rjU&i5bsaiiiB^?e*^KPJ3-i0e#P4bS*kduNhnH zg)nLQAx=NtoN4jj4o(_2X|pf8G83iSqN*bL5$t%Gkx4$)H9z zmQrZSDNaA%J)S^0l8}2{1yZ+kAS+1{wk`4=d~;aG`ls9b^(^Qqfz?Dh0IlVY{V{XV zpfx=0d;NdE+Q0Yo|E6DU8}py-SKG$;AAYsHm4A+3Z7Uh1?Qu%w#Zw73S#3p%MIo;I z&-SY=f4|DF_Su_TnAvxC@Bp>aNAhbc&|v6VlG#~LcKHEcm0|5uNY!iEWzkrBPo`9$ zTZPdmQ+a`DCkF)^(#t#6K94;t0SX$C%M*l5-RjzY|5lWaI;9>!UEQ+wDNv1|;Vv)O zQ###xieQLYJH;r3QOcM@pe}D(`xK~d zvlEmU8AIlc_k~?PhtX#AHc!aYJ5U!_El+`(yLnUgHSpN(A(N$IwT!VDG2moU^*c~k zx2=7?>y_=jDk-KF?7th+_9q3wIhyxrkC1N@_sf8S50Nt2?qj1xgwatkzjAb5!PW-Z#NX z5DFr<^Ih-imaNZ{c}>3Q%`zoLa&xKHh)@LvauU(wWPWu|*5}MzCzmp@tYLdHbrc3h zY@iCYt&^IS2T)gU-gus)yo}}D16H%9f9?g^3KwaLL_4(;R((ygbZ8^-@s)Fmth6TIc9@WwF1&!`e>#H3zB`AN*_=3KzzdU0iHW7a%h!!mGeeNibJWG% z#hwBcV$}_%VMV2eFq2V%Mw>pVf1D@ttK0WH1WBU%&#S8470=34<{DiA=_eIiUst>RwI7XFm zQaHAOy1et~^JG3^j#0Sb?y)8xNV8xWJzrbrJgM|~2kP!ik5=H?&78Joe^^9`#(QoF zaO&cEG&12GsJkz{KHDtPYpOk7HZVf4v~CVbHfJh4 z^uR#M4^Ab_<=sc09|bpeY`S=wB|`@oP*d|ETAj{E?#LUc%iE7W2MP%+cIV=PnmG!q zFeBNBm`O!X5AH7SKl+?Ue`)Kf^tvSVB&xNIB~HoMcbA?Y^#{EJb@ybhYjjV3sk72p zAYEqD-c(^iYU2}QgALT>9Y~*_ndd57I$O*sQfFO8(fN!Ci^l%1zvaHJ$#*~Cp%{%rHlO!wE_)7@u4@Ej1Ae^h#jQGSM6PM!JF zw;+88)L@aKX-x{zmW--8*{4S@$sGI?sHg8i`q-JL9?s2f&@Lkm^i|SD^)|;^g0-AF z^QUh@`j|&C6VG($XlYK?OXH~6C}anBP0pMiRU>y?^dK5wUz=|hqY{1W=afCa zt2pQ}P}lEz4cM*f)LH}pM`^CP^wOQrg%GDey}Lee=Y97hAJIiIM4(m>?4G>23B`6Tahyt+ zr*8uMIA)FwN=oAz#EiYMM^et@1vc}kcIu;^z6shgkaXva?rck^<28!Uyy^&2b`tC{P`4L0Dn#nvi7vCYWCd+`>wB=^7@9zx z63!1l{dhT0TzhM;17fRSb+xqy&Q;oKq{%stfx4Y=e^OJ%#pY=~QO!~gkCq!>D@6vy zF^~G`_P|~1LC9%Asq1L2Jxh1h!A5I%D{$`2Zx7s6FiMWVA!9|4s_MMUJ^;sl%hZ_MYh6jACXj^HDbxCCYU0yRo_I_+qhT){D*@54{l+PZJ@t(9l6mZ- zuCH8he{@`xVy>19Q+lcCt$cz?bF<@w{10z$=TT!ZLmhoXm7Z$%M4IW|EyfaaJ|>*k z=b4wv5@pwVdTS+!sVI)>$v%bZ@!`UUx3|-Sl)`IpvMG1*I*_~19)0qTEAY{j*v~-S zP7n6Ti2^BCB(LnAzYoO`Y+hC^CBlQo@K8f*hDA;#i#uAAJEHxoA45HesVlwqpX8!Sd z!l|R9dEP4NydCz8T@Z{&rf&PB{S>HYpW$^-G_=Q4m84SGDnr|cFpG23LtG~7)JHx2 ze-N+7K#7ec1$)IIFpOQ&7(BG0C>1`9M?L*?ssqBQ7Jyz;5hFFCi4$dX4e5>JG?DD% z%k4`Kw3F`MED>u&rve?6I(bpar=J6Ld*6eC3)-F)K)@|zq*+bWkzRf^)#Kvpryu0? z7^q>Eq={FrE!oth>EzK@E4H{DAE`h6eUN8&Fo_tvRd*&%_BlybBV&l2&vFdZ?Ykb2vfAdC3mbH|AY3s=QMC!}_yF|Nx;@XF zu`sP&*toEilzg;L(}$w&R{7=JN8KK{6Lyi*DzSSuKQb>F0Sp&W|eAdL)~2%1>>3pit|`ky?2v*3&BWryuBb z&=v_xV$yThtGy4euDz}mR@(?a8nF8rsM{l)1jeol_wjJ-{s#h0vFyOGQ`*`gP%rcL z<0>kW>aHX`e>Ev?4Tq<<;@7@_e|W0(UgqsuPmGcflm)4VC3Z||7xAM+^Sat`VdK*e ziF@qKLwEhlTtKLbYYoOm`6BeO)K8l#KmC-r$6=OMp|+J59So)yLn17rYMm<8%PsCAK88gTN;Sjn*qQt75l$Lb6?2tUR;p1;jAqFev^MCioQmR?Pq$mt zE)bekv?y?=QWsfj;n)=ZG5RiU1Y0`DSc+mzht*Fr?w)>*>|?E0Q`mWnC^awuW#JAY=kg63opOj z?xQ?)iqI$pV26Xt=H$fYr7Xgj$2{t{+v!2w?d^hlH_Z3UW!DHyTg?rylFn0S{`BLn zA7|V(P9s{)VWs~re_>+P*l5?nv^q{D%&+tIrDtVoI`hT2TTCv+)~d-a99pyVGiToS zu+-agI7brkmHu1Ola~O13Di>|_q40g`6y=IUz;l5PNcM9ucIO^&3z7Fu}r4{q|gc4 zQ9vq@TEAYOoS5#rCXleh8}ScsAf+s|)*dG|i=e*4XSv#CJx0{=aAy?6EG;lIliEL8>+de3 zM;~sV_bM0jU3#ACe*#iTaZ-~_1_hlgBiTLcetG-PN)g_?fAjKYzJ2qT_3@A2e*@cY z{(j;A@p}8WAhqVbQk&8{3oS`{nHykNA22|V=67sJ=d+&?KLje7cR-LdDg%9wOCS?6KFovGQt0DO@7?fKhFG^!(A;=POeFhxsd1x39ld40jqn zf3*EbGIeDfb3k!fk&Nmbs@v5}SvJ(L6~-zq!q5|{l1i}To;be(sV6_(dx#WjGV&g) z&OWunB%Z@urzE3-bu_{13sO&>g76Tj*)V#a2~^F+=dhAV?ST~`Ov}$n`up46RAF9) zA`&Lx-kTM#Q3jFbm+1c|2=_Zc-M;s=e?nxfVwcu%hYx%vQnr`|tul{k!u#t9RU1`n z+LWn!*RdcMAA;5io3xjcmKuLW>UN_lmT%Q%PtVDXZ&LcK#7k|p^jgSY1J&)GYKrX^ zuee)8aH1n2qP$z^YcyELo8PA=Z~gNSs4=^cjy*6n%x75GqFjh-O(^KtrarxWfARrM zkK-;CP0`B$gQAEjnAKTpO+({lC$&~zkn-E1N?#te5^@>Fp($j#wT@-&Q8D@R7^){v z1A6Sy`_R&imI61%Hnfe&rGr~*3(i;H$J+2a6}6_6o5Xyh7fqg%BdTbRY0Ha&Gy z3DoV((==CJNuI7mkc43$)L_a!F~dE4{TQj+!&6D6LKekJstE&?p;VX#)gcM#(S)=w zKwWQAlp47-nGIUfbOqThmSGpom<&AK`qXasQl3nJoriWR4zY`|cV|Eze+|5sV~(J9 z``Xi0B%M@2Y`cojJ$WZ`FQwGN>CjJsTK|1HP}Wl9A%Ks7g1OnjE(|3u5H0QOluPN4 z>vEv-G3;E5c`LJft?^m{Qd^HY(yoqydV=KFe=mrKy@Y7%X;wNRN@#9_uxtKHb~nP{4`iDS8s^OG%GE`-lq#vi428BqB z^*9YSfx6wKcuEN?kTSS>sfv5_EUQf$)<->7F(3bQIZz~XuRcVdsb#Q}i|)DDtAi}1 zV_p2|_DIXpw3{Y8e@5BuOQSdPQRYbWw74Bp&g+k@daDI@5_)T@FmKuZk+Ur9J^cq(HHPT=J9%vk??`_da}PCR*8ahWk=t%g9QMZVV8QM;ti zK;3RpM1y8u6I0xI-k_FFJO$rQ?cC$#4uP`!qnxtm$W@wde?2tV^96gX4mK=Y^T$^p zb^BRNg*llA_Fk>n%CEh8K+HL{a+TB7XZH)f-0)1a)!j^rTR~e3Q`dlb*YJ5t5jIk{ z8`aqL#?aB%pqkW^C6TjqU0jCdZg>jS+uQd(mARG(R#D#DU9|)Zi{|5N52!x|>h`eI zE>A1&v#q33e;hK}fT~H^(?#Wmc4TgKF;=dVB+r{Z`cb-Pi8 z)!JJ{trA6W=^U!v`zTF1x6_lWgzEOH$I^Up6qG~@qEaon-!;iEP%xePS1iBVs~($7 zaD}ufkb;AE&y7}rrL3_J+K-X?^X)*5g0+OmC^pwrbU~YgbTA1VrwQA;+u2mHPPS`7 za}8=6f4wp>+`%D3ta`|ZfZw`!8u_%2Njhmn;f_KadRlUvNZn4Sq8dou>A^)fms{-wJ*{gNXc%xzrxK~#m)}wk z#Wbj4&NO;Vo{Y&ld;cHuu6DQ1+(zF@kPFzMe<+C(fwtH?8HgWh+)+ty2%DNLHp-*0J3JiIdbD*QfeMOo ze|@$=Y4462E{w%H7AwNeX-boVrMG$-o(hlpa-fhiS*0jIqhxxWb4Ps>>RbD;)9{q} z?N%zMyY20j+Qvq`jxjylz78|wENuNTP}f_jqOyoGt>DfxULV;lg8+MlPM(@`d$`>@ z&Ka_Ca1f`#brtIte z2OkbI31>LR24)I*dDkkKi$sGq*lBI2{d_-E6r^cTZv9ZJnp>TAUL7MSmG9%$EB|zR z3M<$F7uCK(s1W)NUvE{@#bXw+dCEHjsN3D+l2a!&jJPio0&Ky}v5vMK49juHe{mpn zd(35G_`<=&E$1NwmzrL35xWly)86a1Aa%P?wT7>qp}dCx^zf2LaC4qxBNV8ogesxB zJ>~*STk*<$ui)gNc+jNmEv=LtEd5xjzWbF|Z`<@irH-&t&P{;(XmS3z&}t*T(CL`P zMCx{-qHWz_jf@Us;mpzCZkT&Se}g?7m*ai^+ri!@pA@9Lv1xa8Hp4!R zx+GG!3sszbK|c)*jKy0UpwoR#ZtUSgpVlQje7rqC6`F=M9GUvMY1}0qxy>DK(_yuq zW*i4MFhm+sb?#nQfA1LQ;bwxc z@pP(sf4aUZp%Ml@QfD}RtP;$#55>?r35|3+_4@*-+dFCnsDweczQT(cn}%7*P*rsw zeH^D7{&ao+V{IF3DAZ0QHAt29St^aNTTQi}7P;1@HpRKoqHzco z&m2>E$~qtI_P&2qLL7Znf1p}dJgyVfv*~~HTE}yk1E|{r30#`jompfG`?P{Z6gex3lv-Mp4<7NheZ(rV`}S3TBCrA3HLScKyg)mEnO>nD3m#Y*n#?Px2h+ zqU(77)uY`$LTMJy9qdeLut;EKbV_^8;kmu+(^(Ra*KglZi(_x~e`Yg0VpZsl;pSzQ zUA9dB2B2=Y=Z(TC211Y5MwiYjeZCP2*himy+EV*?{hFd2vk^~C;?T>U?eO=Ytx~5p z(R#eoB7nMGq#Sv0mx*j{LR5!xr>qdFYm{^4yWWwBmk3m~7G1rX*v4d6K@ghMbzBJh zc>n%^E`(&>uul;4e>oZZ)}nKuL4{*0^>46$pv?G5P3vUZY20P-s$$6L0a`gN-uUU$ zUv5tymqxj6KqxoJI5(Jkvy08w;}74Dw!)eD*PLb~w$-1W?ykB!tq1+AUVfi4qOQY>KeNDs^k8MV>$X<#v_; zv(H{^U~Ai(4#JHr>~SChw|x%O?fEO~NFcS4Z3tg)2k|U2T_DaxR6ccPKKdUo2WpJh zZBF8wR20pKe}YA=wzq@A|l0ny`E67F6oA`|;EDW2+Tay`=G0?K4N4_Oe$|hAKSwDU%AIZs(kHG#hnx z>NS&nJ0K!P8{x#1GVrutCXl+_JMIWI7d{%6X)-n>e^c<@bBFJqbXvHPNZl?}Wo5^I z;ij2msMf|7%-7}^1;;nosq2fY3z|dlaw|sS8rPurCVQ<>N*kvk&nLg#q>s?EOdM~u z&FU@em1`=bmSOvNf<@XCRdURVi?$7!BH^k9);k{6}+GZ zG#fj#O<~pvySH$0PHTalKHPrlp|cI}m3$z~_~^KLu+7TsJ#!G}K;0gf>e{^Lwz;J_ zdul`Yd$>qtR>HMT!{<*QZV$KA@P$iI%}TA$f8G|9tW_*EM+K36gEfD=UZzMg{kaCS z4hu@pD;t~P+yX*ccDhuiD$N=DFwXBOxbKYA|L!D0_Zcp)Lv2f6* zf8K`*Q=E3#X&WnwEDhN@1?us3axP2ERSjU5J`3gy01a*Q=Ft0bn&Ij3dUC!CE!Hx^ z8J>ZcaE>M+&0f(}+p+3B-cHU#(Msr94~>J_7LuA5RoF&Ftej5ne7c`VO-?S}`oIx> zUXaZ#fG}6(vRRKe*FRmq*up9<=0!xie~+aV3RdyKSjpY=m>*of6T0anD!ME8DJ@Ps z2(~#JXSI|uABTeQHiyyGJ9wW!oUZSVx50?XFqx9UQmVL&n&7OhIAn33LhNFDErReF)?M<{fdCQ4se+Ob1 zW2`!>>><-jmu{y(eZHQWzb@W+9iz{^Ddao*mMqoC%(|bZtUmwrbURYv`J#sMEwbDK ztK zIiAVv>^Mhf#M4|%Aa%VPQw*&&f8Kj0C76qZ=FG)&!K-RH-YE0=`k9@TS1W4=->kc{ zXq6SJ*R`R>`;W&}2T-?*6qj6_?IYL}a@%IT6cKFDG6o~3MF@e^_1d=rlwRuGY5|b# zB_)o*Z~}8`?x16+UT!aJ$$I=a{eiaYk`uY0FrdFgG_F5>9zll6% zgsJ)H?P3jSX&-IJ=k7_&(RX$;;Bg?~`TBBdnb;xA6J_WCC@`kv zTD3WWc^;FgXTQBa21X6`gaEme59i3M?yXZ}Rh*~J@w4Ba3|$2Re~`Ydv($iz*+U5z z^%nX_$175vUv7^IV-4S>1P^Bx11v}gO`Fk@j#W=dX8?6OL8ya^xR%}Gh#z5_baUWW zoWerQaoW8eNZn2lpvI-#2i7Kwf@l5f=#3cnQaTS0Vt&Zj|`g$f;7W`f5p} zoEPb7UD@-O+pRgctcp-(Dbvb`Q_z*Y_tjC!<(P7Qk=v2#m6U=@r2(ftNrqFLf|`*9 z+3Oob>h^PQjxIq9X2pi#{LMP7#baq9ZlrvC?tPKl{TMgMf3chs5vUa3XcCqx*UF57 z0ogYob-Vg8V~)Htf~me#XUUaBvuSp;_v6OUgz9$vD^s#IN=Nfm>y86(!baDrt#+%& zEa8jXo@(Ghqm5~~Agn`kD=-{JSyCwI`e{Bikh-0D)**dP*Dy|_Q*-2EGCSr3Pl+S& z9I5N6=Zurie;XK;?JADjiAvli%~H?~kqYvl7>aI!4wtUjR!PhVJgfMd4}SWjuf%evl5^<_Q#_`)k5vZ0g_H>UJZg z+5x6ir%pOyfHrGIb0;(z%+qk^i(GG{VDGvm@WNq;e+s(l-r(9mwY7Ol5nit6Qc^}r zPD7g@9E>xg>8-jbi71|S(Y{q!Rb|ba93=AR= zjDQ@SfW~~CTfOI6TaJ%CTelmjFydo&Ue?%JUtoPy2d7-i4k*XEXL37IxnP`|luWe0 zj_Tx5e~BvZExBa%So!RBbH1rJAA63bvzvNISTk&E)>isH?)86pzCCl?CIxv~B6SU_ zD=;hGm3L(p?{-Y3o^Oxfb{C1r0i8nP*=ue+yi=9k(;Qe7)XADPzIVy54fq#+Y&9 zWv^(quk$$Gw)1lRM!rlGk4=>O*GDh~RBU0SIQ+j#yBr7azTQp`W;nvOt%NI6MLN#x z>;nw1*ur-CX*Trb>+McVsLJ5t{uy24wG&5+;C+b+3Ji3RZi>9Uw*!w9;_xqiRR2b&^@Q7<}k(qcLX!&}5?d#^SQiays?p~Gq zkW4E`ptr&aJl;dQp1%W;`q%&AZ+)2GfBqJl9&>&FPCq?< z`RQXkeg7{1vv2=ydDrvH`uy_Cx5Qtr_{R{oQepJ>Km5<9{@o8h`A_1X&G+9ffBo&s zyFWkVE%|$S|4$@!63&oTHAnbm)nQ$fykdwgqkk;%co(1OJ4mVd`-T6<+V+0}bj7JgVXZ~Ro?){bN?Bo; zCNUQsZ_m6-K)?46?6*-0*4>w_R>NDt4uuV;*EPK~De$%z{0mBdy&R@qOAppfS?41w z2!Xe0>NO|<(xSJ+PrtzQ^qqGtyonP`!0|e*6j7;+&hgo&)VXb#9u)fge~Q!XYDWNC zTMeThwn+o7R%WvxQr2~c$8w01-7Zh!;rQl8P%OKaFx^yjgUJlVo28wdihB+} zxzuoci&W?~;-=v=bhaw{ZT~lMTGzugS}FT=E*SO>5zM#*B($Cf1Ih^vhTc!|81Cz(Fii$l(D*2D5v7KRebFw2h$FIh3R&2 zT9N|*0eVL2!YGC9uEcTD%}yo$J;Ld`?>l>&6x9D_@9KB^%5m!}iKHk|Pg95#i6+ft z0w=Sx=+l?7^G~r`TotoG@lzTgj(vTDI0qzk4#kgryl0rl9`c%ef57|h<|xDzLl0Ky z{DkRtbBf|2qjsX^$TRlx)Ff1UQodF`$cn$?^y>3{o?%Lzn>NLaspB#%NvUeEsN|;z z?MwhCOt+g8FN{>cILBI+G>VIpfn>zOR_j3*)q52GdOLRt1YC7uUA;2Qfwh`*p$5hr z_4yy}nRZny&z)u)r&k~4`izom+R!MRe@t6U?z#pI z9c`^~us`4frQ40ktZ6hYRU~Qw^Ii7Kn^2K!N|qy-{(ikR%>h!~dW)X$6x5ml+!%Hv zdenmwm7g%(Zce*m4l@#2zStH!?)HS@qe*HRsAq!3ZcjQnf0b!%TChO4@3*yAteo6Q zQr;b+bh|O3m|?@AWtqmHwbnG$0jp?6_vh_P8>SyGKF;7Ef>Q+yPbyH-juy$n-4%p& zjDAux{(;i%#?+&Lbm^G>1|h2zXmfTez`T^s*yRtq-I|~eAJuV}T=Y_HfeO(wi7S)64AseUl>O*ax&8d}Elm`%1Pn@FmMYAMD zFbu^rdYLfYZcZ&?E$t2WL>i01t%>s>3>?x9HhjKkf976&f7bzZLbo!ya(bY8K3*y{ zRyTK>?HH!p%_+n9L=fnKRwk|CySGIQ%BTVLtcK_N+wJDmk}Iu}feD9U9&x)@N(}^S z3$BOaH(|QnoTQXqSNDB`07)#(gmw>g5_A-pXQ{cjx7!c9faRVtF3&4p!8L713jFh^3f=fw%{I9;C+M=h(w9x__if`u8HT=Q|_ zHLdo;==AFQJfH7=GYsio2B2e*0I=fVZrB$ie|J4Q>+H+z*3_2G8bfp@F9`Hy5M`%% zMU?AdxvG7;-I`WNhM@yO5|FvbY@N8|D3m9u#gnS-6oyq+};pdMyeNK zTUx~A@QQrhu2=T#2Ix~;awnQlnpLvibS6J=KG>kUQTq1Bt1pg!CgQxpXK~O@hHFi4 ze<7S<%8a7bv*5IGx}7?;GNx?mog_S&K|Yt*NzFnBXNdtD5QB;jTCu+D7a zp;A)=S1w5NEIYTu(;t@urArBi*40}{e`!aSlzd9QtR5N^>frVu@8o zbC#;jrtO|YPl|Ai)9sFzuoPcdU{6jVSg~wp?I>1y;qb$5=}%w(<8qu*^J2v$f0?v+ zPfZ!`J6$FxW{4Heu3G;1`U@Z>)_d6l$2;)eV;1=rsP5f?i=)t4o^IoGdyHyRd})(b zi%VJ-h8L1OL9BT4g)?^WVN$n4wIX)>ZZny=by?Q>s4|sTQ?7h=mGIjiw`c2GgqhDu zyCFDvffUGRh<&9=^*EEm>(k#Ze}_o}&2{VvAp}iekw%Ht+H5KG{ETcSOn<)k_{V2* zU^7)+Nq#wE)i!aztfkvZ($EiP`EH=}yT8B~tiQ%KCxHT#R;wmYXp6*a1tndavFhvw zPv87@dyq#DV++jL7?ZstsF!J~vr~7YR8o1#MZIo(Qxp_%Of8fA73k8GD z;<)~}-|<3g?0jA9J=LfgmR4V@q7hM%a@LBV*N?>7mvxQYlMc8@&-k617*ij=H=Q4> ze|?AP{)XUYvU4hRtd47@4ViP_^Bi0|>M2gwS7J1eG#X}^)M0zx8huq53dzSDU1NBi zO%qPj*hypCYHX{qZQIs~nxwI9+c~k5#j3NXa1;Ew(w4K}R`$4N)#5k%E*awh;RcHur%jxD&~#&=pj79K z@?+ee^>j?(j=+Rg4tWWtrv>;9{-~;D7F98?syWtuRpo<0h)h_VTg)cdvwHE6-f80< z?X4H_&nF9jr$pZ>_j_T)g3GUikm?uIOrp7n0hc*yUb?eqG@v=`p*4qsO>o=aOP_S{ z*O{4egR>Uu<~R#Z7edQanEunnBe8(fwLS-n^0dQ02d-0t#z@k8=$sS@xV|Jar6GUK-W&|GIClGv%uX*CIQR*~eq2ow()s z)Yp)j2#S0)1OSV38>$+#o%t8orR%FdJe@}w<2aJD8az%iOL>w`2&tM3rXo0}a(fGGy;iN(HZ=BdV7F?#_-8j;R!8l9OBo(A+=QJHV|df1d!=iMI-rAc&z2)) zQ(wG0(q|QGMJlFO{=514YI>nG)0rdK(c9gncVAFWc@B3gk>Ba&Aj+4MiGW_HPnNlGW49*!P%3QZ0Xl{6>>Z(^Cgh4kko z>y5|dGP^?0uorJ-@w5|fx{Py6VbEMIBxi@60}~o{6-p~^(vFy*@QE4OX+`PaR{>Mx zlJM6Y#J$8X_U<+ZCfLlSk9X-Is}#PoKIpE^;{tw2tJYzo`5~7VdQofCgu#}{NVj$2 z7F+@4%ezJ`{J72IzvH0cG(<5ePlYp&T>X{thL%Vm4y<&m{9Drn4UamHG#bpj?7FDLM zZ7+R_R+Ff#a%}&8{i#>OYqeXsA8dqXhXhz#cGs&+;yAfxJpEcu{!-Zf6x7v_7r!>> ztnqd5eRen-6aL#{uJ>|llo&})cJYFNSsl9Y9bsPj%c%XrKu=@qQ{!wb*T1z5hVO)w zQp>a)_Q&}SZz3NuyP8+Y(#<2C9UWkBzODglM3Leb!YMsYTHQ1{oe#&o@FB~M?+f6g zI+pstin3DpRvMORo;~=f?g=w5!Rd?JKF#E-txr{xs*F zAZT@P*4lAs1S1s)W=B)izd1;XI|mS+1Th8Q%Gl?cs1zee1W*KXoamz{89&G;ZEyIX zASt!;bNrI~vkq769f?j&-@d&1^HRQ{_rcfT`rG_PJ?y6BPf{Qc8B7TrCC%o8d{;AT z+Ib6>0vmrpk`%TXeMOgK@0R3J=ylOn`W#U%#uc=53$){fpIf*YEq@BV>JmWzn=ZRH z?%J&I)2Ut0w6xj9o!pyLae~GAR@CtvbV^!fSWbOO?b*;7Y_6ZZ0tI!urjCN!aHBeH z0u;Ns0;!v|Y|H#NB0i`9>)D;o)EGBSrQSOR+fUt<#vyGjG0{PdqkRH%9!d5dt;IiZ*XxvYss&J6 z$&w)BRaJ(SbZ^i2r(R7N1vVMNABS4qug-z5Ma8Amo0ra-ezD37Cq`+z8YUHsQpa^{ z3&Dps$Z7UZZKuU-)?%0l*o(8(9QJ0-=D%{~4cES#>32pyq$5<-YeNIDXhPF~=v)L< z9=ou@k_*a!Z}!~M@nx2>KJ9zfUY*Un{BR-=g&QNAKb=R9td|>t|lCk6eiW{ z8FWVIjt#)BYX?6fXIj^?fH5hhs_tm2f_0(J@R9M+;K@NLj-U%wd^Rz)>PD-Q1AKVa z@WQWAq?iKFg8SXZ`rO)FPYBnAZ*THh3o2iXu5Lp>J#^@pfhdrAL`f$3+be3RPNLVi8FbUZt*LZSm$v=VP06a^CK%IT*{Dl(ac8T?1Lq!)cwzo7ZltCk-( zNO9!lM{5(Dz1phfZd4aBG3{a}k1K4#iD8Y1_~Zcgv}JGzQ>&sA56R+AgYIpA zp-(9WwICUZH7o~J9w3>$i8wn9PvQ%tfv$*b$< zH`!HIH7qx!5kn*wSLoW8K+%|*{KJpG`@pmS~{Y-QuZ5op5E?6;C7NQGXLmN|J0k>v-}2lr-r zx#@I%4&pKI=FkNszvHTSFljPfa{66;tRlp1vTiv6Lj)Dlp%?auw30W%dxq7Am#m(F z^2a@%qBU2Qjfy%aqY!m*6J1X0zSH^q?QGAGmnWW6#v7Hz5~Ig@^aIa1I%(I%X9SA| z{$EZV1JO})X5{cIytX!4`j7n=A{ZhV)BR5lJw4BJv%wMuR~wlgRy6yrQ@?(V$aGhm zWJRR|&t`F~oGU(!)$hsK;%+oy?d}Df~z<(YI1>? zn?PbfQL|`7Ev6XO8m~{yBvSMEPSJs1LSSJhQA6moJlh0b5xgc#CBPz32Yfvk;cqM6 z*t4lo8Clcy)0M!}Z5N>knDT5Lt**LDbVrbToG z2#ZZEG}So_aot}P?#rx02j(Z;&Eg?{yYs_ zoUDH*al35ZHP&0ormF3u82(w7i&(W`KZ~NvTR<5}KGG=;cTj^d7gfwLouT*`wyp$+ zLwaJ?r<=r!nY#W=AgpxGtVU;cK$HGHoJd%1@vo!alRTK5=h86Q&b~ zbj?5vi*xKUTo>zd#c>wvdb;@i5werb5(xqCJR z7dlI@4u%l0k+-Zf+x?T(=q#eh)^c3(jtgNK^$mya)j=7X!|L3Z!V6H2y>u1S(|^}Hk5zg( zP!Il|gd%R;CO%~qY+8P!k?F=ycUmvu4kMhS_3tX3&WcVjtoVACMX(E?s~b4DLB&bD zhWnK^hxMfAqcpTN#Z|oZHOHn2m_xI(Q`7~L;#|bFYj^y_c`UTA4LNyS*2~Rbhgf>N zuNz5ii=$nov0(5l!6#@RJb8T53u#Y8Df)&AIa#HqI|pey)n=9Jc7BTN?t^B)Ov+i$ zF);SAC?+2V-q_$YL}jrF{G>{uSN@N){Bf8aMLo))i$ zAUoc4zvQa{&ebpj3X*A z?O?@hQA9lTD{zx&8;R?H)#HuVJkplwvir-jYEjfVwya^>x_v1X)nJCI!f(g1f*Y}k zsoHbfWJKAohdiq|hb$&UGDs=dU2~;ZTl_C@Bj5J|fja9mMo7jnL@BUGw~J`D*13~> z<)5BDL2FBqTBa9VCJ5@oS=t-(GeNIBtPOR!2L7FTTY-(@lw*tli)BSGRcBo@)cy(n zN69NXQ0rVEGt^39S1oAGm7uVZ?xyq1LT?~a0Cge5uMl6JziD=#>1;7|%k+h{M>&>>rnSz?1>5@s|@ z<)+J#GyAlOzWREs{bE{vUZNNMs<-hyEBdPcizWSGvh*yUnP*D}!-sGzOzEDvl_1jW<>A@GHWp!vGb}NB*4K3zyTmVd zV3Mo|qqZ_x0%jWeHc&A}7Dk3#y6~mA^^iR5H+ILyTfeT+ErY1(TwR$B&b2e>-2G(X zx=9}<69qT<2d(9IFGX4>iz)*(IfRvTy{pCBd4>U}qoscdNilTs;U-0v&i+0(Kn8>9 zU^_v1))imUDKAT^WePOmOfQB$!c_h{%#R@JlwRiE4p>ZVdE^t5hG>|sb5!daxz_gn zK^W;GOjkY3bH!PdBQ)?XPy#0Yt-QkslU>~6cz0^Z1sZ;K4-N!@xK&H^b?02>%GRX& zV-g4`UVv)eC%YjnpByDh<>(Q5IQOw7+V&R}+ii?N)o1XFc1oZ~h zOm395S8r~?C$X`r{>xl-$?}azBd`bT;XF|YIna0j)wM#sN~UwMuT#5Hh52$o>S6U+4}vgL__6)xWW_~WdgUr-v-zKs7cI=IW!FE1%QnX}wq%B2 z_i3-4VZWyy5;q^&A&nCGzq4$r6I-k8{oF^~xYvZkPg{-C?gHjVK0%gx%yzS2y&E+E z3jMZdVx&7Kmordx{#OT>|8zmAyDaMDWrV-78SHx{D7rnfrgAp{ha`&Mm(xfBaazfy zd4dII?X7RrF5D-Ia^A&1oFXy?c+8TEZvsyJCYr67JoJ7Xr%Ca@odyrTgZb$UpcymC z>#kvqtlbb%S4=h#wGh68t7e$_-&p}R^~EeCrWprWf{7H*AmVe0YX(U6i*qqc_CJQF zmn-*3eLU8bZ`_y(n8S=(ZqMFD@{i>Gk`bWJY~?_ zoWc;fsn%N!uhZD8NXfkrS@3~a)7d@sS2E!-#XFSF6yUT!wBtTUZLiCy0p;I^8T7X6 zEjOXU#mSYZl(*B-yE$&J-k=_53%qp&x%vEcPK6s_XRu~t(V($R=2#MmdgygI&#i0c zH%aaqB-xET#FX`v-e(Tf7J0(%IzZ89a!i4>QY`;TI%pj$=tWdXueg1q;bklINT;5A z$y9kIT>Ro3p^AYv46&Q4zRm)uY{b{70ww=;xa^L?cU2Ev96U8Rn6o;A3R({Bi|o%GE1t;Vzg5+(d6|oY(+Jl9iC?$GSz_ zd{h}Ck?Tub@LF<`-E$agF>s+uI8j1V&scrbEXL!TSw_7WvrObAW+=wvr+>Ybrk=$b zGW?@9Y=lu82V$qWtxuemU2+aBK3Fho3X`cM;B(z-&H2ntmLXeE3HqVPR{487OWqA{ zs!?KxR1kxXCit4PJ3RqpG;nsc^BhgRr=@4pc@q+LXDe;27DZ;TZ&M$o@D(F{{uO}! z(??cKtOvqBU8+@WT>gKFx`ek0H3@KN{Q6GkK@oIF7LR(Lh1bt)5K^PeSL)D_xH#X^ z2fBOz&gD6|f6C{<>`~2{npc3-pJUS%L#Od=@xrUCbr8#aF#~Ys;_9|Dg(4VbHu+ZH z?&bBgol1s5f-zgzfqluZ+K?#qT1f?#G*miCczb)ll^vT8em2u4OA-t3fHb8zsOmtiw#;nKSiiCH-WnT7{#sy^pj$NvbgoNG{%n@&zxC}PEn&2uCX>MCqN z+*f%jP!Ii#SOIWwAo^X_{AZl8<1oq@E4Mja=3T&avS|;_N677MqJgyaK|eG2S1nq) zwc;PXZ8)Uj7O}+(v$Tt>*kZ&e-DodrE+3P-Zcny={=yB7~Ui76DgLyY%SuM|H9i8vs8jLdd4iXucf0FrXtV{TdVrbk|Z*t zh%b1m61xrly<$C5O^jis9~)iSYr=d6Yf-(ItCc!w&v@}D)xxp-)sKCKSUpOpiY842o`Kp#Y)*Ult`&CiqRsmLG^B$=ks6zx z1lrykzV|ScU!hRC=gpV5`c{vevHdx((YE=1qY&2#^Tqm(D>)!=;i9TynXvWRT0Z}y zuDPalJSh+Ph9nnlM(Ff$9xK36s3^ldN;(D%ToEwFLOr>USbFuiu2AXv2uCLnJUJx7 zXF|o+w>8G~P{8cvJUu-u)U5ArG>!x*d}h@!BY7ptA(0|jjlTZW(!p#Oq9jv9hKD%I zi;;2jaF0x_cArGPGQAw8THXgU(siv#V1#F=DF5Ueo9jdw8}Gf^QfbN=QTUgxi129e z2?jvPW9#mqB08Iu5E5{@nRrFVWeA%WX}c35J&}i0%P&H^D&$&6wGVnRBZ(2gZqFNJ zQ#*FT6f))nwr&W7sdg#r?%}TxDjP$PQ>ncC(`L`6-1Qs^mv1KzP5q-{z0g`quOThK z*}|ZEz~MT>F2Bv$u9Kwt>*KMkKnbea)f6CtHitu1KcP%oQT4mTOSI0^gS^VN5ycjq$+5s)DIJ$$o(&kGcz~fhV^Cp+h6Ww}ljo+cX zFlLUla9W4qL3G+DvCky+L1SyQBt+=vT;%FjZ#^}^z)4(9jQXIu@SNL^B_To>_K!{u zD^9r#zw{@5R!}%k&JxDEf)T==c^lwMScF_hz@B^Zf_E}wgIwxOr?>r+u&S!5bAnjC zW5@$ShR9E6QJrTXGiK*OgT%=FWGAB0Qh2@vqOzi0d(w`hPj(x8>7gY*Oc&`kPM#UE zsXkRoeHB$@+`6wpzOMnRt*hHGLbrHQEg}pUSncNpoqL?6KI0I0nn`7#=?}PeY^3R` zb7Djdoz1L`Tn5+jjn2Rk&X9;rW*hlzZK*L*xYh zl$B_4Qy*te!Nhw+=|XvpQgO8f@P2w(eM%DGkRpRoD=Y!A(GPB`QKqHjT_iA}l^Xgz z-@Ib=HJm}M$athmox1%qzXFsyHK85T;6#5NJTL_nx`l@j?zYJV1)7FB2a8MZJ<^##@q84E4$m&VQk4kuI~3 ztssWXltFf5E!9FDb+ccfGbFFJb{J7x?t$60=KeWqW-Cea7cw~78-U-75muku4MPbE z@Z?K=YW`Vs9BJV?^`FzI#cRL4xdj54h&~<(_lO}~9B`_zH}axwV}iS71~0VtXWY%eIf+;L-jmytT+MoW8!I;q>xt2|_AJNR6`j zscjs-6(&fkY02PT#r^gk{?XDL=$>fR?%Y^#k+AXM*0LY~Kn#M0a0CH>*BNKFnR?MB z86ufX=>AF?FOGHQBtZqi;0q7L#!`f(KxmaIC#TaaXXUFftzVul-9I=MX;<2;6?w`t zAXKWxL6{)2vfIUZj2qiuoSjI~KpahEG5bt%s4mCpK7~6%{PKK4I9!r1Jry4`YbIm} z(*N<}wf9drKs_kR9yz6*U*8M{3PLn>4z&6xf=SN*?L&&9N2S>z_OT=%n`jdu~M-FyG34L3gBDBrNG zX!Qf2AZfF;3XJ;?=D!QV%-+)n&yEV=vGN5}nJX5r29LU^GSIpq^sp>QH+*G|(%>@E8xjq9>K$A!76AOx+={#7 z^SNPN3Xuhp+VcK#w-Qycr#@{nwNhTX+~5s>Oc26+TpC-e`tt*vvUS*I)>8keuLXM| zTjegh0&*#g)^Tawfv+rAzwUJw=-lBvT zP#mLwyi#AgM+PZ~LZsQDwCOUZ2j2ivJ0dl?T8U_YgdLXd3`r{uPIZgn9HuO$7CahI zj8*6PSimkqP$p!>emqq&*yb0e_5r4rmzCbQ+;sT8M47zQ{BV(hYZ(|MDdgshVR`P! zO4X82T*wvKJHpY9n8X8wreQ3TZ=uyA)5JaM-<8WK2y`T1%cw!I;H<`1Brt&F(H^eP zu%RVo)pTD-*x~&Spj;#_CgWdYYuIY=LL4LuJ4y9arwBzGh z>UdfiLB<>VPg%HxS>!ms564yGiY1O`Q>_?>Be_W^?4YQD4cBJ>cES!*zGD?|@O$BC zUQLyo`Za6B9$^g)EH&PzpMpfutwW!>j)xzE$f+T^m`f*ts$W;mNkTVGi2vppsq%IG zM*X1vdr5_QeA$EJK0`COc*Gy`iS59}6P!aeKL(2MSC}U@(o>T?q(Vhn5P*Yy;P56g zGnPi+k8ymJHB}6gC#>KYPBTD1vk zKby%tJh}9>ey>?#ZN@nlie_agNGMXJbMO%41dri9j83d;Pya&Fx=QWi1 z8<5*!mWNd(-%^>(o3p!CsTvBw7jk;5(G~P~@t9%p`R!e8fC7NhqKfBYFlQkuli@`# zeggy9GE~o`nQgCeDoyY@H#Z+{A#EE}iBL_#%lNXOSG6=!J&>PK{IhiFg!E^UVbT~y zF*D70mpu^%Q&~45lA72^B?_C1XEi-KYD{42s-#Jqqd;p&w4W)e8nE}Q;|)Lm*Vsf=YwCz zomm)+VMFVR{Mj{h3vKK*WZ?TEgsvpQK-y~X=vgbDtr5W8{7pyhEOjAlLwTr8s*>Xr z>bHB%HScw?56@FA*d|cwq+bDyH&fq2H8}B;?7GkP4LJ#;3{we<#<2Pvi>)>R&8{iv zhHqUcTOPG)@mmIEGIRC6oEm%jQ_I3eyHtHaA_WvuB%pRcQQm&*;GcF%iYR!KYtX|- z?#=Yt2pa$`qBoL=&|=9UDVs_htyAyC`M~(a(R?CcAfK~}hZ2&Zb~6usL`(fa2IavH z#0>a)qN-suHA;>lUif``K@^WXXQky?yp zF<2O5s;3$HGfB=wFl5W=TqI~*#eQpE-h;zVg+PE>`AqUs+VZ&yS1@_-KZNyPVSCfO z`JP1eljXg(C0gI}!Yx^DGt?V_52Jds~l$FgLgeOOvHQ=Wb=ynG-z zWzzvVqRK13dHmAC#FhE2U!HoU2`F`$rdXk0VfJyC|AQS^i89V(4E7%L;Ng!2!V7AJ zt6Il3S#C(q?~bS&=pB3v-q+y&;L5M5)GAIf%+UVMRJz4@vC02%b)#0As6f{>u=d^{ z{#=l~Mh*!+c)9C>Ri0Y<>G^uYT+Llvo+JWjth3b81B9@aQA0XVcj&RzdejcvbVsdR zq74`9?bBdQAf(%lB?MXBEa;V85>2O~6%=dr*Izar!9<3|hTC{k5e2&fHwmtT7Ee&~ z?s3Os_kwolH`fxbD{LI)@KD*WE&~j{q)TnQ%*-^Ft<+{;5n2|lCi5}NGPJjvD{2A5 zblQJuD{&xP7B>{>;&k-^FLv&ir1U<9LpdZR>|s?d#Qh-jsDLT%E?Qs5 z!wLk68&tq4CrM@dopFn7lpO0(@PGEW+yOj2tZlz&3{}0&z};2tXT+lU&L_`mHpb6B z22RwQHD6^z!4YnBOr~83q{;Mw_)CBqwQS@hGdRsWDk;MJ3F>-WCa>y$%FQ>ItC6{} zswd)}lcCZkC%T+0zhs&XGJ*~+Lf4&q-j{|6#3MAFS}2NBRgjKCW^e-?WaL5=ct8F@ zss~y;!k9P%Pt!A@u`s4l--qrzVB5dII3Vda=c4{;>dgo%bGg`C?(Up;oFoCZ`Lq1b zxx=a%ffP*(enm-aWoqJvxP?U*!UFz+3JT_vF#3bqLMG&mEmdV{>2fLR8!IU|d|O4K z(|K8D6!F6o+7)tm7^upg&*mLw_(n>lx$*~^c5Z6qdERbvD#bOt^r)l98x+Uz<#%_i zePh8X9*rlc8Lz=ab@FG{`O z{Q2U^u7&QyZGE55{i z`dPAsU#s}_^J#~|J8HhEN(8x?J0wA>zGYPSbNQ1Pq$<@6#{CVMgQriA-{}QqPrFxm zVkm7s5G`&goV#*5I^F@@A29v(J3~GuL%Y2xOxk6M*7^eucysQBxdO!lf$a#G^KCJg z*6&u-qfKS066qDT$jn#MSG`4_4@~b}oOf>y2Wxn3ZOhPaZ#|wTSNxuD%&+bDeS2YF z_cy{{XY-u2xqI_|ACE6gCcab8FFQ8}^U)6$Z?_<>2T=C9$rs?6#D0j5*djdIoNuFh zYjb!rmS~CT?K2ms|L{JStMC6A|8hikx3%LM7VTCv~*D#_SU0o|Ah=@ z@cGI0^&F;<3IOHghg7%c4(Wd7Y{fvr8)4BuL}g>|Z^&1PXp| zi|~K?eocpIZ)|LLZrrbD0wziYKkrEx23{`uzxE)X9E`Nt-+@x>9@h4dcB-K{(wC6d zZQa{lMz5C&ziUa0e<+WQ5G1Jmyqe-Svpb(Nw3n^$5d~Opblpwds1<=YM=f({sw>J9 zAY^_u0%0DC?2B~bl)~?>uhnlJT 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 D{$Z4_BPDz|x``?>#5ssQ`Pa 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

    m-GkW?}vnkXiVuaY!On%3`l`S zg|`bjHxOMSsQu`kM!zkYg7;c7)w+D#8~Y#w|Gq+*QNZ-k{DK7=;_M|G#W1!JD>;yG zD4qpF0dWkMIw!yH!N5*#M*cigU9}9ybVP%|)jf#(c1N|!CZ;=;O1rHBNn-*B#HdzT zsL&i*ISY!${&aNG%T2te?&e#`w`(ny5o^kE8~o-Cl5Y(f#1m`R0kJA?L5^+^9TAZr zKXe0f7A7|QDR zSS1g^)ybV~w`~kiB$zBcZ(D5!Y_=ks(lHSvE)+7QG%ua|!l|rWyt1e?3wG%v>w@^@ zG{mHCXc@bQrLwWtqC5PM*@M&C2cEW!(ug`=WW7-_)ER`fR9}Y8yD6kf7gS6L!Z!*z zrRn7M9$zY+dd!{JXru~XO;YQ7)t%6avcBG%O((MX1pguwVG2z24r`4AffSZmTw9Gx zw}d*SWl~<%4ec|H{~19i2s3jl_->T($pxsPqh*b#{2aBPt=fy`b8~;q(2h`D7_XQ1k-@wfn|k zJ_kS1&bp0*7wSc+7YN54Prp}p3IHE|$Qseq^)`Qu2*4PIKr48{=(wRwyVC77mncPVg{?nNvk>+qnRy&uq%u!UzsWn{jx)7X@(O3&a50tB*@F zhJQlP0uH_u|-0A$ZFyV{BLczF9Z;YOt6@)Id3qX8&;PTIO4!K!jpuolRTS5*ijyI* zWz1!=$xyE&gZz*09(I@Y?~f0=pBV;Go<^!zzxR+Wj2{#y=8ptNO0}OR>Ylbw=Rq`b zOuw1@h{^_PkdZX9@1LBWnRD~5q0dN6FVkz+pMx#t9gyNtvil8roBeC>Lyv!T+oNnt z@Xu(I-Z2i7kH8=Yoz6jc%F3{FRv(_G@Ou{Bv`Ym?A0b0{Ah!_izICrESa2hLfmjfu z{qa^6+NB%1EQzzgykkUQbwNN}hV$JF2v>iFIZp;wU_3`2NQ5VIrn)xk5Xuh8yW~9C ztF|tEK3SXN*GmlyGE-OcCxyYw+0fL$<6!37iD6!C$%fE=tIhWFR07= zEZ_i2OGwE{aP`+t3dgkYG)y>nXoC-Rj>ScyjXlH0_%J|n6rs_&*Y6|b2|nxW!12hy&v88TnXWnfx@O6*IRN1L z5BVe8Uk)uz?a~(UY?D1|3PV9;!{qrZLZi*VI$C_62sX999qfiSX@z{TBd%U>6qVnd zuEP-bq0pjrryCfeL_l=r?@%FrgU5sFh#Xv>e+fb|*i&Q1fF~>xqsj5^4_tu&;|8~v zx5J!BgT(Y4zUaS*wxM5{9uRE4n}h*SZ~|a1A2N48%>D?!TRzad^beY-!8DnyzEz+4 zK{3gUzb()KJ1aqYmA7vV7cvwbo0p6Ge>>ef9tTd<2AV+R4D`qy%&F{-oE|A*|?S7+CQLH=LD zSo&ffE;|Phka=i`v;t>r^0aGxcGUlXcxVIm?_dT&X;KF4tF{>2APKFRMwRO4&gNP8 z_W|c|zBs0);ip}TFD$*60O%;L2ip^;i0|2s+OnCYADs(xvAA(w??PEt@v`Vk_$h)IHxR@jK9e znz`|;iS?MAPC6_?FJG7JPcHxH+Kxl=`*-r^g6T^O-h{Mc1@_}(0qx}J;k6|rzLH)* zpKOX*Kx1EuOqYI#iZD;lVmN@QP>x6UkC?KNO_%l4m2UPEFU}In#ze{_Y{umfyD4w) zo1iIFT2Ph=ZZAtMCjqA!kKTzntFc`?;S$-VV(RUY+$g=BmIdG!8M9-F)Y4Yd>W$bb zK+Vz?jo2OG%xSR8+o{MRS>)0bjoC3^VJzi?2O3oro6~HK*&RSL)3%KNF(#8{;jVU} zC!M%P?K12XErrr#SS^nO(Dn(*Vo*k1h(skgSL0a)O=Qn)83isMnYhwz{Q@#LWG5V} z3OCnj5;xVcD1OqL<^{8>mxLdWZ&T|zoBEAINU6tNg~1-UWIdGxVO&QiA|r2j6g0jU zl@xC=PvwANjNk7~v`1o-2*8ZBV==HdZ%THnO{B6YsjzyZ9gorolYxaWkUAkibUJuW zSnHVL@AItpC>GjzNNdaS68??$!NMeMUkTB+-g5DQ0zpsszUMN5KDOuR?WuVfK^y{k zBx?a_?e_o=h2Us0Wz-xA2P4XFf}Y{HCoh*9pE(JCMV_^d_c@css(^udDzsWlMLoW= z1QrieeM*PxBbD!8qi8;eGB+Qr^(VOjgZ$u8^0+IoxWS1FqzbURvyQNa_G7=S&IEj$ zM~Sl3S&@CW0|T?7-+FV^4LK%zfH7ZJw%fdWC3}9H!{MME?xNE;Ebq;(<5X zBnyZxL7<_s5K$_gqo;G}Bo&Td`y3tY$XMYe4yuaErsP^W#mR1o_L5E}Rl5uS4$9%a zLAZKnu?uZ~ZDR}net%8&w zybTGT0$5vFW5Mbr8EdLaBez&xnS?Wa$RIB+(1Kr<W6x^zShg{MP2?*WJx+MT&A_8F%-DRL@VV zOqLc8BE;OYHAhcpRoB*z#QitN>RJ8D$Z=cBpBQgQrBr_It?_RE-uvDXe$8@C1di$# z5GiYjh=k`p_oISSiL8P5kG?7B)V^8k>`MjX>lZ@HWY=57dT#q=-eKz%JGP6UvoPPJ zPI-Pqo3Li`QMKXdHz;?sZ(|UwBfqHavO+1I4ckWh(!J2uG4(p+eY4((pP#Ot4vq$2 zQem&HnJGO_Y+CC^vh+v9bfgnpE+cxe0aTCY2t3}r@&bK+rF$>7sMtE+N7G0ywPJI(cG-Oz}wi?T;j%GH>=Gj5ncD)!UAj=b8 zj@CTJG+;Oi2eA46YciCq@Oh$T4C@|&0DyJ4y;|1EYYBBCUlwO4OQy;Wf?a!WXLZ_i5gBZhAQu8FNPd;jR>W&b$ zH21qYb582Zjh+%+=zb%077#M2<;y*d3wP%46~;(j?QK`5GcXDi8}du(noU)It8iaW zInqykE`CQ=`n+mV@)E=cO86!v#F?reMu|Z_sK5JHWepXq zzEE1O1;6r-?~#Ac%UQu-kMItP4JgCI8bYD#h*yOKecy^2u6WXQ`tsd;dc1# zN)3eAtj+hjQr9{wl_caES>!SNr`k6fsR1vLb3G%xfNz|MA`rnbTtmvzImY2ehtF3ZbG(ALs?eo@E=j!^F_w)Iu>MhojKb3FZoH!L@4(rFehXWqeqIja;(Wy4? zsP5*$RcxalsGhq&6h;abg%;0^v@|til;v)_YB8>sHTcP&sok(HA-7cjCWO*$gkb)- zeZMb$`u_5hyby+L(B}Qq!6>#^uq8!U{D&3zMztR8CiE{d~Zp*xm0YCTu}WVok&f_w5WHy-L}@38UP0mpJYmU$w1 z`T)vdl~9uOdsd_2gw|-*x_HAKZ%gM%H-;gn=biqyt=-|}AJs3l&o5g!i9TG}UPXQbmpnNPB!0D6q<4YiKA>T0?FmJ$x6JemsAj-*zq& zaj*}mf4)|;I<@?K%uDf4F@!@PDR*6SJg03(8o-r8xJ#awTz{F3|dO)xd!T&*90 zR;8J*R&Zv8b>YlUS%Jc@S5(_=22x7b5@~{V`Pt|JQ$7nJf==JIo-PDRiolwp@(SUs zi^Wc~e7N!E1Hn+5lBF#O`T0hDXe6ee39qR-StMQ5%?(3$F9XasLbXIg667)w(Ayvd z`4NLFrJEA2#py{aOWYuAC%zsZ`ZD=^)nhTRq#RK@>R@t}ItUA3O?Zg!aC9=sKeh~p zXj>(LHqmPF=+|%HdJHq1#8q&3tZV}^zyLrqBRE2 z@kkzVw`Q~%xIWSYqeOH}QY)CLpdy3%lJD?URoaV1(ZkEhhm7*(U56|yqc#@On#umB+8?R$3=AS0KIfj@f<8tZnsUwMh4el z$CoD6u0siFqBZN-7c+&cLcvC5dQUSJ7%XM)N67d7?*7v760C9keSEwZ)`6b;&&R1hYy^7bdC9MdgS#qACI{-^`b?;?!3NajWE?C^ z{PzLh%xbWPnxn-@+ys4ky4uqG^|15-n1UZ=rQ3A{zE=|@mu#HDRtr`+DZ3u3b18kO z*e)b0;LyT(8rYM-L_hP`#+Iroa{#@SPb}N7SLrfpm6V1!uE^T21#U9yp8wF zhP`C!jy9w@K&kt1(KLdWK(1%BsZ|vNB!Yq;*qW^an{O?cZP{CG=qXO|MWlWJoEdfU z(I@T7!6+5gAQs>=Ezhz3LTK^wI&*AQxBtH6>&Yz2?{cthF%zIc6asFK!~N%=`>G&| z$~6&6eQ5iIiNWFw#UUOu8nG3Y74(p=U zcq>6Urk%}DOT4!Hxa%Ng)p%(^i%MEKiT!XF$;;7rW)&DHp7}f9(zIp((|X99F6`Ey zapz#hGg~RWODqAMhLODjiE}#@b9$mE$DAvimg|NcZN45Z_`OMg$ifrHYbI@4IUDoX z`#dvE+&qUbK~OnYU`ml(!!5Z-R;l+D0(pQ1??Cm7U{XRavILm1;sszq_(k`* zrIf8o&O2+V#<@MV+tB0aO-2S}c-aqJPD8LUIwT-Ts18OM|8jhRRB)#VNx-|!8)9}@ zfGRaw{w^Jgiwa#<4SZ!pHc1FDr zWR&1YzH8HqwEnT~ zZ5CQAshvvWO}4Jot-&TW8ReYoJaye^E06lTnco{UX$5CHv|kepx^_ALV=w);?L|)> z)0d)4Rsn#@u0BjA*=Rl?`cHBsDaItcXK?=WGJUq1ZNbr??>AjZC{VupIm9X)I#Jh( zw&GWz&o@*NEOA5Ho{DFw%F9@uoRaV_8=U@U3QCxUnIAZl7er zn~BO@8uti1Raw(YQ%zZ_)-ilbO{5YPje_YY?hAOiVxs5$)$ZU1b}3&Mnelcxu48mv z>{4lh5dp_)!l)sLB(*C#OUFVq%;*Sr*xip;#&gB&XeeWXh=u7~pB)(xTvl>xz%{0f zVgOB!`^V2yG6%oArs|0X%c;sm-V@DlD|@84(Z*JA%n`;aQqfPC@hvd3kN~I1)~!v8 z2^&E7_4ac=&skwOH3gY4R;iCfzbfv9YSx-ce$Mn3Us00+8X}Q?PZoZHgizFyGoyEg zD*IDYyK(=ctT%#7Bdqa86AB1-D#sA7(=snkcC!d)GK*KS*bS1CK$e|K)q_SW+X77b5x3*=?69~$u)LiC9ntM8BzhRpdg`kc+- z#2bZi$c9MT{Nx|14wa3$T;vJ$jSd=w#1p!KgqxL>3HLEi#$X{`u zJ@B^G$@?t2rx-{fg=pLsy7kl=#r%EnM{<1CMSRti6 zpe>on&!!91<(XzgE%~Fs9lE~RlRx5j!349ItJ?fyHHau|zKV4*)6VTN9e4BC9IM_6 zx#aAV*27lYZmu(SeveQG_6;y{OpwIJkY(@5hJc9h^x;o^uTW2`=L=ePIqcHT#;OZ4 zvYg6!QJhd8r^>QG%UJ&XyU1<+rEKqCO={KNDRz*#f2ZK^Q}uy!_3x|`64HDFM8#35C;oJA1ib>ej4%afbe{kQWY#?>p9M#|#@c6L8MhYUDldr8SXtq@IW zorpukGg1FxX)M_v@+j-4Ud~iP*hVTmxQq~n*FLoieKhL8!(R907<$;VW=)&KNZnqS zxsC608|a8>>LoL~??PY+X%??U!=t5bV1s9G=+?y9l0>$K34mF;!(5S5F4i|IQRbER;fr+V1 z3bh(=XE@L{Q%5#V61Zb*stglTk0d$tu(T9cH2pOzPa+du4hC?%pkoMopNDuW-x#YQ z#;Mz-u5Kzdj0*0W)`U=H)TFcI;^zzLtFmG2F*MM?HpIrCkp!oCBirY1{M}eLF0>?u5Jc#tk|@?)DIRIWeA)}i2cVTWo*6?97t%rUP#5crM8imeuSM0t zJy8cmv*)D{-Xt5uE3m}fM-=<19I%H)`Cfb(4rhjy&49-S3+->gGV}=UE4XFB3xQJf z$>l7EarL1_A5yxpj?K}_m&#FZZyH2dBG12Lzm+F2=wn8SCEYOU@ZfK z`un6}Dg*d?7I*Cz`LZJP{&!vq6?z6^#{=>#-I|FJTislaG}gnDK0}}QS@*KN7&-KG zL;7((_NWaCtT*Txj`M_hztyiVj~b`7Ww9yS?c@h%7o$&`U>3$fJs06}iSMN6d3C5m>#7TL7F1$a+;?1DXMnH<^sDhRoG zf3%L62uu6iT?;wyS!a1EmunkM9rxtHIyLdCYuRP)>2hr@`jMAD+!aQgWQ!kv!GoC& z1_M+e@7|-#pRgu*Pn#x|&X%BI=c#N;?VPGA>GQJRlB%4|n|N+zHF_aSBT1Se;=hP0 zlI6x2>IJ5B7ixLaH8;yjlL~86r%0eFVZ<76v(;f;(_XyV4?hH9lmuJ;fy7F;BqTwt z;Ev9eb|Rf%{CK~+&+2*a{K38O?FTJ&I4Mvf1!>bOB^yt@0oPaDQ<4Qjk?ZBDr!%QO z7-EI}N*CgVh{aX?0_{;?2X}42%b3i1)rif|>LE`Kft^*;&s!K&qwTURTQb-Y(}HkZN?Ik51g)GAYV1_ua)z ztK4+&4&MEnYOf*Ln+`jHFJ`d1c95N~@7HQAGl!_R2x?OD!F0K>uW?*GnknZ~y2zB5 zS-aYl6I5pk{W0AEow9N)aYX~Ra364Oe9ifCKIyl)zP4_=g!tp{17n9M2*Sf~hxqN6 z6@_1f#NIsHl$P-GB7X<#tB=?4Z>)iab&KhxqxrU+kb7I}U>h!>D|3g9&4Cd^6@myt zM-BEpDf*>Vbjt5ZL*RpW=Bm{xDMZF`3FeVn^3kPZ4pQ~^DNMKN-_u2@4VHlVpGF+_ zFfp&o?a=zcJ=Eg&3c){W^grIm^S(N}xmu2lR`nn@k)L{Wb6+aF^n1MUNi+ekkEhM; zJ#GVgAwY=CyNP@1BTkZUGsW99fjSZWyu5co1?<~|<*2Sy$#ya5XC}oT7*lVTn-^nT zM=$sFf0HYu>jF6LyV~EX{Qq& zE;TMgJZO@*^B{Ni&mX#$HJ`0badV^rF~udvu?{tRf9jf}X$K(@9~ZcuQBU1E8yvOk zd)HH|olnl?#5XZ+(0`504&cwcg9^Fe-1IjZVWI>eG=*ltp&Mhc_o4#Hi%`zzIjm2& zzw&oBFG=a_;khhyW40(Q1(fPGhnJe*Ip=<-|FkcNg6x(AFD9s=jR9 z)!))?yw3LTCB2h_JA;H>Jx`fW`KfcCNPGE6by3yKI3%|N68QP2EdA$|eMH~Y!Q%I+ z=ECDokqZk7ta0Xs6-6W9wi*rIl3b>+0opfOgD!|mLWjm=7jy3_Dn%nkjyqocvITLj zvg1)zjd1Sbg@Emh1sp(Gb;+;rO_5TNp}M^Y88J!{$e?(tCT`NDQYwXQEJ31-`x6*A z1)-r-0v)u~&Svr~$P4Tj3r3Yeo4KHE*=-y2OipJ7xjcX5g+BsvT~CMH@=<07+c{YF zsi1ckPI}Ae0x@NJu&L;JlJ|;%nLLbsnan#m75;*b%05o0Wn_d!AYJZ@ zyLcHtd0i{rc2R+}P&S)ie6p`F7vuVvR=gopg0*p3XKA+}ty$*a>^j57lUEBgg1AvM zdcOw;O@6sNS?<;-jW)99%$UTTj#Nk1rz&SDqgM+ktMrBaNe`r?7NcqQ!6|iar->6L zbG+L^=u7k$DVEPOz)PXFA%S1JA}r0ysi@d8Rk@gTH`QA z)G$?+x1hSo&#M{S$1vFB#rvfK&i97lyk&L`KIh~u-9a?Q7-aRA?&ju8b8);dEPqSR z=PkV>MEM%Pbl6dBbx`_#&W??gEs8PHWCzz9zaQ{1X!ScA;-K*ApvP{X@eE}Lm)Ap2 zmTBs^OPH$O<1)1X+!dCicES@n`I}}fE-%X-$R4b$mjKM-j>C{<9}nWhRWnZ>;6x1W z#II9vjLoDcPd4Yz?;k5T(YGgY%NntVN)#3$E7%U;%z&iz!+2|CpS!-eVmk0Bh^~*{ zdv0=VT|#OkBHsX)WoT=C*F`-&>BVK#oBMvEV=5NNH| z{3@zm16C|*ZNkr}nvt>!4>d^Tt%LYE2`2|I&^BtQj7ZyBmOCNbp|RU@z{qn!p&hU~ zx9Fwr!RtcB92VKeOxR7#(r?bk2Q6i;7#4JWa@+CA9+6(%^ z_=g2AW*Mm*`j|y%(n>syyVa$}_|u32INdlt9b2~Pf0;Mmke40~KB}<^-u!UimzTOk z$T=@wyAA7~Wp~#cFBT_nNrPC{#Ww*#sE2yJ+5>51YWE~f)H9~V)%nO*`~58`pgK&Vt>S?&$R(JW z+!+%?N2+$t#_;DYWedi_*$&^c$G}CKsRmj+cG9xuK=i+Eo+g2h70b-oeN3PfDj0ca zOB|3m4-jCT#+vfeLCd;;Z>t`rlwMP&SADHi&L$h>Ad4=TqmybN2&sNl?6c+UP^pK! z(4cJ#OFGe-kK6v)oS}XFB)$;RatL9OZj z{{3oksoTw37yk{<<+hjydK9R`N-EHjZLA!`V~}1!S%EReQJqTLIw67RbU`|0MGf=p z`e8ft`yWy_H@|8#l_Uv3>_bBB;!p3VCdw_=BhMj-5lTK-wi{LKpww*9j>Jj$P9oxXmGDRkx+Y_T z$gbz)n(n;bC1t|-h9K5x_mFSGM!yyt7p;8vgD2iF7bl~?M9Qav@aHp)COBrY`VO zmsh9%Xmp8fLURnL;a%gwQ{?NP&QGbXv{^pde;RM)b$BQ)w{GzISF5f=|9F$il}c&+ zN?(Uja?^UJ96&7Q$M;Swe8VGQGLUb2?nVDx3FhH0303BC+sWFkFW+o)g^9?OSB_XQ zdpY9*eqgdcR{#;Wu(~4PQF?pQeCd7iB8dtkIiAXXs+nC&QZ|jlau!Qk)Mz-cCF!iu z6rAabRDaAcQ`n?&$%imX-`ReR{;Hgw6Rf&#ND?jzo0$aCI|TK^AM(h8c6@tLgyivH zri)lpEI;ctc@eToH2ckDP6-O;G|q|-164DVMO3RXC;@iU`Z?m9pR_Cax5Z?O6)T7( z%Lf)c>2;~(avOU0&x-RA{*+>&w5kbkFLP{0!j8|Fl@^DSr89YE)y77E0hhb#+_ij= zK%+XhB@xt}uB=VSvmaWy1s)_1!^m(1BCHv0sVPhkp5vAG-yBl?ljgs;wM+dwUnp?% zeSX|zzQDJ<9)=AHI8RKlckJ!v(aI*Nr~)BmDTVH?ZA7ZAbF>Pwn;R)&BcUw-Yc4Mm zc)e^xR}>BHwVZ_2g%%^?mJ>@^TF~@Zo%4*SCQC_9ry&yQrSteGS-aUvdSVmfjKi-N z`1Ji8z`#t^S27e84>?p-X=ZY?(HsK7Ck*gnjJnJc^R) z_;0Bc-b>tQKW1GE3=FdkzXDvr-E$!q{x<$SdcIBrX!_hY-sF3GVgGFx9`k{%ieN`H zP`Zz)a2mMlew}}cc*A0Qqc%yK-@7~)i{eWby@CZUYJBeVbMa4&!;f2ZmZ+%@X&Pmh z14f$myOtFV^T{j29@*IN_Q4v-(-RK0&$lVtHb>m{M8Vs^ZO-^TfB0Tv!eIY}am(!R z@b|>_hw&m!SMGaMHJJai`bmD4g^&2gj$u8Tt{5qp%}(WvN{>Z$4XM2rB4AsV1SWnG`Eudm)Z*c{jX?Zr=ApJ7jlq)) z55I^wHs?`^Lb|esrp?eWgM7j-z|utpe$b?N*;0xu-qB5O*Ia6l3~|JYYVsLvA~+#= zq{*HrAg=Xm>~;+5-DNs~&J?C!w6ZXpxb#TUPHai=_R-%`U&py!o()~k=Ek6~5x|VJ z{Z+do(+S<&J1fQ<{_aU&ls-(_c;qM&=tI(pR9oF|ac;pQf+jYWtB>{bc~%bkIqx}^jB4CS zwT`UtPsq=v-;kp=S`c)|7N+%D6+qpo&Z--RoHe!hx;9DGshk~}oo0)QW46LrH0BF= z@&Jp7lu3-DQ*5dRtt#Fw3-q6Jgj5xHBMtF*L4>*KPYywSA7yxaa*%tpm;Bvfxx@3| zB(nv%WP^?V?ZJ!5b9MaQRYkNnAHfzor5+vhD=*x-oC5(?xCvr?=Frg6+6dI5YR>dD83OZHF#HevMfM7E++0qVtc0<*Ng@&J&ub~d-|yR0BCM_-z;NNy z*n6(->hpzP(#u6A4}2pEeoa?dx|a;+A0j2gue`3N%a{YMyT9rg_faIUi3Fo`g1SzE ze+hbF40@r5pULVV1Tk#?jY1PyG9CAPUdg>B)(V)*a8dqDB4h!Ws;6Z!UV;6hIAYFinV*{l1B> zwRWG19|m;(;~`^>i4;|EujxhwGrO%XXfXiG$Hpu3=q>b4(gvYQzZt?8r&*EXY2 zQdl`Wh-XGw>+mj+u+6-&3})@&gf-a0n{FeCAGNxO%K&TKwD`?RA$BWtbba#)fqfav zB|-Dtjt?pFU65q^&EI4E&Jx2yT5U2TEvWK6gIAe~Ib~UIt-zT=b|LtZi)D$x6T=Ob zpsaKlG_i~48siQ_Qq7nM|3$I4H8)b*7M~ zDDobVRyhZaD1FNmt!1*->C}?dWg~EbDj=&vaXM*s1{#lX7Xfl=dmJX&O*>P_QzltW zJGlfPACYWK&Ic`I3B_1rsVKDi|9Z804tGGk?i}8LDeN-Ne}MYUae!pE>r5d}fn>Go zC}*OVf=of@C8kguWmiI$)}YUCgXBJ+VT7E5E;T$}Uyef~yGv&Zc}gRzOQ&d4AET#4 zNvKMqKx3RlU8k!)>oCt@$TibQ*ZX(;I3A)d!DDNA92(g@I#b9~8d*I$-n%41RuDus zRu(BF+6)=9e+gv$JPAV9Ok=#zTiAt&G&l~Bf9$rMDdZ`TthODn9%K&5mKZR( z`sOPUqm(Vp9jO9uKprw!o&m@fb|D}^4Fja)H|$8!1IcRGfx0?P4zt(bgVF_2OCYD( z@knLzn=_!z@XUE8t!BA7s~HDKeyfh`tvZs`sspHJofewoGZ$Q@9 z_bfOre+J_?DDqo%WN+1xtX7@qP^GLxY9*SaDK?4CanT!6OEJgzqiD5({OT*ot*uGTRHo|_Hy{GIK*&R1P^|jj_hqZlGUc;g^Zb$6QyV}IiqxtDKt%z zf3UnUIlaH<@C57^GzIL(as^0!n~v;lI+E3~f=k`mQ=k|lS=On*bNA_kN$!gZIR(Vl?LbOU0k46ZgrGOZM@dn-;tylS`e)KbB z4tNN>1eV9fhrv?uTXs}$*^#`K9iMcNf3jq6gZC22dQ?F>;XFkZ-#m2ZqH;+nM`M!T zwWE61j$(D~#Fk$Ntc`@3Tp(1&q##ptxk#PgG6Ap)!|W!l)UvNdCbBk4@sJsldFKfomt++pLS;$BadMhNkZ3}9tTK%`;O}Ee>;k| zFjjU}gd&ph!UZXuMr?bo;A9aF-V(M><4Gm!OoQYUd9iV_wmuG-{8k>-TX__#m8YnZ zlT4I+2(C~`p@jN3g}P9n{I>ggh`^pqV2Zj(B7xfSI5hJ6cvSD>QLH{5lUf-pAw((= zk`xNGvc@IQb(D1RZQ^!gVpYh|Dz&Wo)Rt`n>G3#O#Q3}eG6eA^5 zKJcjN-R6s!9P zg0j&HWsD5%^oq|UZNS>qwAakcGrIpA_)lOza?42h@tT=N+%1LE5+c{*RG_rLFK$9F zZYo|YQ1k%8rCb66qHCF%>z`wYN*k2(*z;Zt$d5Ny^){F_$M->(z~sL5aY*5p9HEyS zfmL!WxfM$e)(GR2R}c)Ef9%Oy-wuJud2(C5f|N_%`QjnqGK5@?lZ_Gh^*`wKKj78> zpkM}xiUO1@!KWf+4j{bnHkx?^`4`i1oW`>P@(^yoc(cDCKol z(o=|pgjqwe6cuFetXd}~`|JO?zWFl;pB{JwGe==Z|$h;+MZ89iS z{Y%nGW0oaqh;>*gGgTXX`DnsitbWcq_5CO^PMvxS{CXAidKIwhRRW6?O35T0Mf5R~ z*FsAdqONNZH&2qJ7o)*nJbvD~@f{vR)s45nuOdOOA_1$4lu(C&s-!xvlHQZ6YY=C^ zKmwhTo+oe7iveLTf95`G9rq58k?Ocx;1@)o7es(n5DCU%LZyqbl!ZrIqR3cv)q($nH1sE=fmasEDft2=1s?)&2Ly zp_J>)Ra`qr2CL!<{Ku7{Kdua{$CbTu+4z#AC@~kZ3bRWpf4V@W1kfv8r1O_nowus$ zqkXK)fvTz^zqXFOwhpWZha+Z{(Uzn_&dRwE9DsA^Y$gJ=(xp0gsna>DoIV*o2C8z3 z{CYa}dOEV|=`EFT9W9iwI%KJ`$Osv{@-syd4NdOG%c zI_E?8h-;A-{%>y@rmg z8ahR(t-)qfEUt|rbxmG>B^v>BQ7c`WpQTFf>;-Z=NCqpAi~J%w_98m6is%w`5V8`X za}tuWglI~xU$xnK2P+*y&X9R;=A3&SBZH;fLw+?Ke|t3@S=ICyd`m}bvzI7x_9Cm8 z!4_jkxL{Yh2;t8dJ8!Po$Ak=&Di-ESV_hvThfYWS-iD5 z=B>){e`Jm|PEiizm(sD9(vek47b3cLTD~qm>dJ$XClg!|D*O7Sq*v-V;jZmAXH~by zaEyZnzk-gvf{v^TdMWKxp`a4TL9#lcDRsJ)Q+9RERaS}yd!e;iORV)atdT0LX@2=! z_wqTi%IBs|rwC&qU8DdJ>k{2(=c9>HY4B@3e=Eg3a?Dx~w0D<`G zf5a5jJQast#R&8E?#u-&pD;4e2CwFq(RDAQYgQS(rDm2wc%wY&iU?8BTDzo^(2(+q z8DZ84XD%rDgpq+%Ld`Fu>t06JtTK8H7bz=aZ4Sbg`n!awa9ze|aHeuRubXQzdrjsp z@c4ALHIUmx^NZ=a7t=NG(e#!*m{LSVf5vO2y(}_^fF`(@Ag?qV={c${&RuY^!(_CA zi<)0j*S(~!StWH@qOl$efvtZgZ=(xBQQHI-BE*%>xXw`paY0B%V}xH-*S)H)SygpV zx-LZ8p%ApesnU`<5J-x#2piXGg6FSFIB!A1KF`Te1qn63wyt|^U9)QIrgD)IfBFPb zka1R-mfFAafeJ*Sm7Y%LuM#+Kfxr%su?hqletF&W^15b~*U3tg36(4mP#4g;E=pW9 z!Gj}MYmP2xnFsUj^#5kdlMQqe_H@ucc>Yo)mx zxNCLIS*Ghz9_w++bQykO-Son`e_<8YrPWD$N*+|n)_Wu@fhrmyYRF-&XzaEZH`_BL zBJBe&l&<&T4#uH|UurkK)NWX%b^wd2UM#^939uGQ)WsE}BqTjkJ?7Wg;OYAa_JwtfAi4N2VNvm z(8(Q)Lk+(KZ+Z#duuAaS=t>FXq>!Z30ldoDyD2TBaJbU(<-S-w|DNy^bg^yW+WI)8 z@T>5qSK$q-3QuIbFcIt8-WHP+w(O-zSfK=hEGu=+hwbI=hj&!(gt?5u`>@N@Qn+t_ z9A5b4c+<=AhElLaEoWlpap?1M^LiRSKAZbA zb!%paU#2&`OmA3adY|hOKRRuSwJAwmyv@aENiHiH%1Voo+@)~Ed`#;;)j@7?&{55(dK&Jeun=s%7A0}l}Xzxla^I`f6;`=ij+f6F}Wf! zyOy5|u~S09X4VHYlTo8R7EK7*tu?L3dCKW*!yum88F zeWse*wDFf8`yy^jvcLmR<|)6y+J* zKEBcCU`tHcwzdbQ*75K2yMCYFvHDuGB4HsBc}yt^%C7S3U5?l)`nffpA!;n$XDWXI zxex!Oqc=X6-lr|Tmf(j-&!G52H~k!vBNNH@?GH+`=eHU9-e%}|RXYpWQYjQg00+tx zOGvgYc+qILf5!cx#@0UXUI22tx?{M0;dh(wcX^7lYk&IpufF^9#g|`v{pH2iU;OQx z|NicojCc3(TD)73XOR8qQ#=RiV=1klr}`Q9dVE1ITzx~^@rD4=Mj=W{vVisopmix2 zbaPMGc=8brZ{%m6KRocmt$*sq>!lyM@xyEJW4QVye|HvS5>Cietgt$XTxXi8xNJP%r2zr^~y(vRodz%ENd1zVeH2zxw){FaP??&a%Ii*Y=iElxK98k3Y$C z`pfdne@W2GyUS>c2#UZ@R{kK1AuoWu6{M9-{v+Mx;X|Cazx=sd3p!?r5^^$a$zB|Z z*peq>4t3UV#fQ53$8QKvhk0{-_0!aA-jmvQottvAt>3=9+nj#dj^hu$DMwxo_c%)b z>je8w?-cU1|7G3jtz9o+R#wJnt*Q0xl(-)04?pXqkTD`h^!oI}g} z%iRH~do^Ttvk4FUjiO*W!M?RRg*=6Y^=xGp7L74f;|3p%Qw0oK0#~7td94<+yB{vg zj`9UJFkRf4pb48}tM}v#!-`}-PBw)+VMVga5OowGh!{Z%soLSn=uHYOH)S1Mv|Xva zf9%JwJV_ji~7q|I?lWJ}}l!Y%+zAy0W>wJ&2aEn65GG*YFc zU0oZPqLF-vV9Y!V;VCEm$8o9Oe&US@+wDbtr0p%^W9CD#=OE{Fh4cOPW`A3MHsxZn z=E(1Zq~HT7r9l^8qVQ2ATYqk3wK5s$e*-JF|NQRazrOqSxJdq0cz659%}3fe==-%5 zm!y?-8CYi(*4Nl6J15WyM;N1S39diX$`{{$`^Dc5?fl!OKEBO_{Y^QJlX+90Bc;07 z+aASyx}tYp#hsDjpWv&0g0FaeMm8k!M6#gD z-qpTIKp?Qic_5?bInO(5XLNXLf6vn!J&HYWcXaF~8pThhFVE{4KHeexmHwB#EAMUN zSn~hBPcge#1h(O$@570Ak;Bd!n>c|FynR?Kh(0C46v=Q%J9_)&w|Zts&PYRPWVIOD zG>k;zXjoI-)Aj4>IzwS5*{N`GL%Daq!B#W%S3ZmxtYvgMe;6-ilsF=y zge5j89*B;n=V6O*Hv15oC9~K(>GJ}+>~6}6WE<@ACj1zVHQ`QBWsHNh91XlUiH98xrUmQY2qC22Ho12iI~P4+@A3<=CIMgoAb#6ic% z<$eMo_o-IY3U;IV=G7`Lkp2rTDA`XDje2n5+_3-s{a8>WzgwGj-P$y3u_4%&sY#lY z#LQw)q=Z6TX~8^~R(W)g*3?=^rfD?~2`aiV5UeSGK{!yS{3ax5e=wjd?mfcASuoSG zHf!EL8WGK2ucac{7SXJcC($EjNR&Y{&%8p;P_82N)FFYK-%pO=J~#U5@)XwpkeWyd z8Kwh8dqZ`YRQF&~(TaGR-Y#8XhtyZ`b|Cc9$`}H{kzhhW%d^633@2U2Fbb&munR)} z;@ztso85M{*kz{7e`E^1;{iM^er_o*(?`ow&|pqlkkuG2(j5z!Evi10IAX-SYn4F1J6kG*DB2M0A&7XBifBNVtGBn*S_8_3?Q3@nOF7M5d90a zp0D`V#lKdp@i%5ZE5Gdk-?88k%kO<=UGFo?>U~b{-Xo`Ce?-m^A~AM?!*NO~AGMP1 zAkS3OgbsNTr6KthPYwZ3el!!enwVv19R=b2thQ&tM@M!Jh#w0aWiL~&x_#kQ-k#S)GRa`& zaH1Vm+5tcrCAgD@#TeBgR;f$Ya(BUZu&_z|~*MU}~{{RbVagtj^JX%!uEhL*qACH*icW`vu!mG?} z;dMxLotPC^NTiUD)WdIHdZDq`2bwK7UoB2xvFDbQHraiP%J$jEBbPv-GZ=rGJx0WH z&e480m7Ca>K%sZl!U}$r`r&4@G4+uC0uFNhrkZ+~MK#Q0kc#dubydN$ zheaX`e}$`~I58*X0BODS_+bLu@UWwvV8hlGwFK9U4=W^icB{%**97ylC+t(>dbamw zO%*CnXN#pUxmW-oOiEY{`P7Om@nXt!c+wY>w6x5H(rLb@jru~ zjLRhqJN-zP{=J?6Q~SG{l3FQ~DaJA^i+epBk4ljA#prAl;J;B~IXW3QcY-8et0hKZ zsjH%5=^P0cdRT^O`SpMKucO~yym<4xnVtJVVp4+H7rWk+ozJ0yn^40ghKHr3O zmE*JdB$O$|w%%asAd7!(cuefouXt7`)y0Hj&9Y8@msTNw@1AUlrB9b9;K>Cs_?)uQ zWPX>a?7B>4Ruimoj3XW}LxOwBP~aB%K%$~iamV*lwC$#m7-@5y*5k|^kkO^Q554^7 zPU!h|GbkT}&^&*t;th@^!Azs%JqRd$ICM_nPiup7S(_K6+cYRO#2N;j5BHJrLqT$ zZ~{74QxT<@n{l-(t*;)DG-VGpsYte^DQl>SN0B>W})D;=ydSd{}c{xKpzz9wfneSgb%-6s$QI4-mdSCT?E$ z9OibUPLqFOO$mpQ6UH#gP{dwP4|;TDh;bHOUjSJ%q9HaO81t=cJniYaGII<5m#xhD zW^PF2Tmak)59fIvSTvq1(44UJ+Iio160P6n^~Kfe*Zo)7rCv8{sE8{-)XhQyT&>RO zO-UKhPX1Vh`^}sMK+|-(ZG^kJ)*Pm*zf}j}ziod%CrZs}xO1&u6WvRHyKv#+_j-n~ zVft}#X3h&6idXM``K5Ja-|^)qI~g84fO@grdIWV#qiVwU!8NS7Y)m&+yzw-(W-32{ z{U@Cz1sATd){JW#&E?g(u69%wpizfwEH+!QIpBSq=c{F5S23nNwmX`SV^AAl%dHo6azcO1it+Msj*Z~6g6iy{%N5BsRA-IJ)Fx8K z1EJC*M5*IUAZKYR24oC5NaJ4>4t8SZLyYDZPD>Ay;Mcds z47Aqz_p~aORet0e#U``z2(c@BJ&1~A8@uv$p9x+V6S%M@I)y;lB#1?f6-uEJ=0Jbr z@MhC6igQp#vKn7oRQF+geKDEATmlrp6XA@N?5xvu_3FfK@`A%(0W*NHBChXlTi)vZy6QQmqf9in@4 zYP@;#y!Zf;l=jyn3P9B~zwS)Cx-$aJs+UlwGZueTN(@jtKbx(}><+*Sln=XPd+mDP zuzbP&{&zUYmgVXUwA)it7br{0;qtVyH^NsJq4nLiDY9C6&AtEDBe{nxfBE&lZauK{ zF=tbGOfj|GMf0~wz9FKV9*WXxI zf6H4>k{Cq|)xlUU6)}-m$3x%>6gml#){{} zz?z}YO2uUPRZP}ZF)1?ScOcj=nA;FyISO(-Qf&(80B41p|+1WI#6ZW!$z(s%B zdofhb7L8r9>@iGUutz@aR9$V7fSRnfW7))cejS&0bzGiR$EAWY>|Kb_8;XUZ9z}vu zxTx~fvHirF^aed(Oqt~hMdc0i0Zyn!z|k}?Po~w#X>4 zZJPU#)UCI1<5aAkUffHcQ&K)i>Z5CYFHwq0eNKl}Z4%9|bGUtYd? zUjI2|oKBa|Q2oiBEw>liMCS=!{%pv${{Y{pt_~3CW@ukS!*_&+7n_K&G@*Y(g2r|* za!nnA_KLWgkG|~a`3MxK(K-AKb#}C+5^EE=CWI*_2@;Vaj~TTN0dd>&QrgRKz1`f^ zXzTTyAwuud9>0;OyW?Q!x~paQPFLPgR$x~0@NqY%Z&UpEXfl4E+$j~vE&|M52`{nU zK^xUP4e#+`h8{JsMh*L)Q3`)T<-|(!dp_S!5<(XYZ_WR;h}nB+ew#*HZI9`7HM}g^ z{S5DN3fA~^>%ljLc|d8d>sQr;_cDeS%-(t!@Lp28f_<{ThUOfvAT1%Fw~d1i#+_Cw z{J!2q#&@s`e}2jvxM?;|xpFR)?YyDSHd{wzFUwnzY@N|$)>5O+Db0V4Q=rHbq=?s% zTgM~l`2iL#-;bB@D!rxCCt`EogYA*cgV5zOeALwTVw_wz?FNj9#*HWAWwL+xU{@!p zK=08Q9c6yEfb6;jWLCETQ8J{`)lv9B5n}L*=F~G`eGmv8VxoH0^>(=&RBEVF$f}!D z-o(;;cvw`#QhkT&^0R+vCS@4fYqx&t&8-e=2U;R98o@r44!c}?A2B5a3x%zdj4_RI z#0Yr+E#7z7Z4YON83G1;D>Fpji)qu}OykujuxgG!?FhC#NL6Zldf3>mQqsn~&BLF< zdUKPN@BFzclM%xrOkGn)u6&r>j%Ip(G&WY1-vgq$9uSq)1LA+UU|MiYT(F8piGzbZ zUB-Zo4AJZ-jN#M3XaE+~8~)nZ`i(i8fBQb1Kdf?)J_MHl%3j8&l=*!Fcp8dMH8Xc( z8LftP6>Pw;vt{O1YiK=%I~>WI86JX}_8=fLz4qH8rn!KbN27$P{JtgC^)0Eaz9o!= zlP*RQDV3=fJN18r1Q(T!%n>{!HY5GIN7yTGql4YQ3dqVYTF=UFV}5g4HF{jUjKwr0 zD}-6V24mpE$8^)!Z_+~DBESL7KQ5N1<8srow>X>mRClH zq%&1_tD(H<)lhDLTt}kJ=$!RwCROhC< z?H`XU<#%Z4u0um-b!cD$8?_Y(1tbMeZPb*-ntK*$(B2Kn%iZ&~yk3U)4S-d{1N4|9L=dxUh?Bc!u>gs7w12ag%y(F?__ z^%xoBO$xw^)Eyq?)EeQaK1>eH_Gt3Pl8{tixe{Xfo^W&P#PUv);@T*%8P)!+5}$!g z(#o%yRVHha8=0&==B#bUqECC0(1;M&i@1%-3E?@?8ey*wRwm~+&;;hoI-P3d&C;w7 z@$-L&#YIVd_QTuJ?{8lZ5!m_dPx15W_+B05E53Fd<_C*vX0b5mgK@38doX{pegFFP_x~7zZ4DE*L${i@0r+-l5ML2) z7sAz3RrUJA5>D`*svtEWoAXK`rjQDtRCC+M;d%jlMY-K5m)jm%lWe10R(q(@7zKt+V0Z|uR*&7`o~P`1Sv5o$40P)+492=2UcPNZ zK(B8=UvY02?xlH~gg>ixydE3a(uq^4$2^uXm8Q`?c^x@nob@B$dO3Urzun-MyAM`P zvJHM&`(PoP%8hW3B=*8ZZxI$&q>flTC3+6&Z2s4PU%DOcxsmr7ZXF7JFRG@)KRtiZ zn7fyY^U-YK$5S)8-r#+a#oN276X$;e@UUl)U*T|2A9TS2(;;{g8JuvLP&!DPLR$r3 zl$ZU0xLG8(&TGETYtUMLcjY(O-uq<&bMBDCnq(W8vs(FCP)uV_yfVm9u5?vu20KcF zO26&{n0o{#t-D4wtK^1R;uI1NnBV2-<}Qc^@`2HvHMb@MLmtPy zQ1LlK`rfK@gr3O12s1g_s6xK$r;26E^m5pl{y3e)oUl+j?C*9P}V$IH$rYsfZ%NS^~?EM<=*rS}N6F+3>~a z-K&?sy;?tKwixs%9zx(;QY4VEl)(%KO(=>~dPRkfJ0A7?)w^FWr1WoJ)d6pjEO*Ro zO|rE`vb;Tf9h_CXvdkM32%KXaAzomo4C5ZBQg8=%cBu<#HWtX`Y@mPp?b?{Oe!6!X z-gayBX^M)b()fw(wA;>75AC{>QXQ=FKmS`i`{rc%Z5_$-;Pa9vE_2J1;2lG#5LvTa zsI!b%0ey$j=FNW)107py#+74CB8({49ORobC#c*@3dtvQa$R{)kteXQh9r_C<4>8s zQColBy!+|x=;!Z$e{;2-dF88q zlU4qL`snZd(z&aNd*0{p+e?NQhfJMb_s>BRr#A_RsaNk^{j$9&Kcttiu-gAmCvW9! zSDf?SpDsl{l`g~-?wixi`Df~U-VFL~@J=qbXLo;#eg2h{IMREP*Y-)%BX50@zFqS^ zT2JJ?&mhyaClZr$sm4_q)m#5nmN=6C!ZR*6SKFBm=?gs2onP@sb3cD=E8W(ues*Sh zcP;pv6@JbWgQOjwe6?Z?o{pjXWiOI~q*;&~)YPx?n z)37Z&;oyR8Mx+jMTzYKTrP_&e_-u)a$z*>Iv6F1Ydj)q`-x>0IML#dEw*4<(;0vbj z?RLzbFdp(7YlC+lz4(B+=hzz+$E-(CIMnXMbmlT5M`!IP(s3W4{p~dV3IAS&@3g|@ z1b3JH*Ri=cz202(e)_G`nUbGf_20A0MuLF%%?<@Qup4Np(6lX;i=JLTRbdSQRj zvu}!A?UovW_ht=adh!YX8E@WP;@w+KN@CQu7r#z9$dfbOA^0v;d3i4Q;peYKuYEn+ zPMJ-*(#N8&-`;%d<*P@VmyiDAc=Jk^ZKrqFZ*M#H&pS+zXWQM%$@KUWmTzPXt^2nf z_lSA-NV;AXMlb8v{+`aam;VF@cXfZVdwK8GqsM=~hjz=ZRlmsV*Wdi*Z2QaEJ)J<; zKcE@Z&DHf!0NC}X?|uBI3qcz(zHjCAumA9=m7K3PNSL_(5w`btZs^N}@uwdS3Y3aEr_q^|Q4$8Z?p6&^6-$mFt@IG3~ z+!N!zyFm8E_|d+KJ@L7cO|8{r@L{h<-coK29cV)pQ{6{}o%h9u_zUY?e}@8rc?~7bCmaTua?K=s0y}DMu4aE-hA_i|lNIu>`G#w-yAt&D-sl$hR{} z35%1rbR{#8p8uB{xHBw&pn$=i7)=MCNhSMk*gHLu5;IwA5%sEPUL5Jxz!*C?Ldl54 zh%A#i*9>kre8X#AP6~GzWn!DEyQIZQ|>05fXrOfdko z87qyorblLy|2?bG&BHg_Ra15&ld<4`c8m!21#8I#mXniT?lXA`kM3LeO#(? zU#A#5`C4KV>ylxy(7C>s;T?IYRTc-l+ad-tJ>s6FCFbM1EwZq$A=d(bXu_yX*PHnkVRQcz*c}*oRL^vwhS2MZ(zWeX?MfSl)w!Kq=R)U4&knEg)b=j3ZqAA=UhpE%jm^Mz% zc*?o$P|S@O)fOhWV7L|xX3RDh>jsZhb23ZW-*l1TB-eKf0W)2Tb2&qH6sS#d5-0>G zF^6oWf)nPYGw>GW^)bhJC|fC>oa#;s(dp_)#Xy&&0G-?lFCFh&lxGTaW>@ZeE9V@L zvjg0|_ZQE91UIwm*ula0E>c79%?Ov~q{5y9)I66pX5qUUg^SFkjV8mkU~8tv9DQ~z zx)iz$$%w`)0PQo?CJ0t4(Tt(Ypdcc98aYsc<+NPW8q;qoO!9hmmLJ4m6vJ@aF&ABX z@X5PgTLk$Eu`f*n-yobXl^mh7yw+d@Ku5!YC5Xge(j&V;evK~FtjtEwH!M(e&UN_0 z;$R~-p+{p(reG%4Mgy#RDOr67bCIRg;xy((&fZ!?XENSHHd)86y3*DFIkXPjZ9TSG zC>z3w?b*P0cSJphcnwP$OwDmxoCCQd63k+PV)ZB#6NtO90ay5#ExTPiYM&d5iLL zc2=y_+PZBBg~NcG<1fUUND$PehnANvpDD}>p#^k2_#p&2lYgtL)mC(1kFAVS3`~6F zHTv;Ft`>x9!$g%`FC7k?APfh%7=R8~yJ>4!%=|4?R+6rFCr)kzPo|E@V`w+R6LnsL zjLn~V`yPgv1Mbe@fW7y88HD8^0HR6ukqz0(x(ZGq=DbF>X{ri4tLJJrITpRlu(XmI zc_*QUXrTgay_Z70Gg|@em!7>d83Nfkm$|(&Gy=Ukm+!qZCIRJ_7QQnc2mAQw@uTma zmpi^QAOVk;T)s0Se~SnD_n`*F`YfU(uyCRehV}I?m$g|9xBecTpBdd5DTHn-C4(i zX4OQiHR0QD4;3pqB|kd^R|{K z4I)dI1Z`VyCcQX*b)Y5?)U{7t<+cQTadZeCy%k{~j+fNeXu|hLFE>9ve06mH@u3`S zaMcbULR7xj;A3;vQ!l!4l$*0{jaEE*xjB0J?CIu*2ZtI9&aR{9?Wld&3>W1jXZYC+ z-^%sQK7wVfe|Y%p#lIfCcyOqpu)a5&eCxGqDI9PR*C{(P?4uuUtwz8srW<+>GZLYv z+@zH@0-+V5_n3wiPALya?Ufqw{iE-`KP2xkUV7#>Vu%hrR@3$z96W3&iA!1~UZWW= zzkl@b)$xPP;l?9oV~2CLCtsYG5EBQM&^3vfh*lv`f7*~IM~@#L(!e!)Bp^;UbiM0i z1lxEdj>U4Ryjn93%VtLqy-18xXh}?F6&8g>Hzts#@m6ZZk4Ge@4qSK_21r91=@hqaDwl9zQvLa!AX_7BNF?Dy>-EU{HN+x`IkE4$zXt2lu8{ zEK+z3C{0pt5OGn^w@&wAHN1(s%WiSz^NKd-HBjr@f8v_p3NZ#M#ZW`~PyF7Wh$v@nAZve;N&%vcRuopL>c7ImI=Mmh~!BX3L;M+4~ShqHaR-Aw$s7^d#QklLA zQ_$NEo`Uh*KYnp2v#xnC3_F48U@#~If9~C7Ed&vaG3$8QAD%uxdhh`LX+gC34cbFP zPni;!zbV0hQ8OAXrj`MJOVH2D+wuH5LI3pV$)Ori8hTtxZnc?4R$9@DI=zlY#`m$p zoO*sp_@K$u)6k1oL7J)!71K+vaHB}2-l^KU1pe{Ay*gwYEIg1aAqi#=C2|~Xe;-3@ zA{LK@B_KHK>At1=w11|{g&Q6qU4sppRUk7oOOi9B zRIs82qIl_c0>$@sOf_!j;Y-B2$Gu0!FvEE}gin$p@O2P=i?=GBTy6+o{`GYG=5qcC zVUbi#LZ@Xtp2R&gJ>F`vaVEgBf0piwRgf1aS3jT1)yd2=HU<>dXfDqdX`wcj8cnoH zXr<<|bpPRmaCUhXX^41`3p_~o$hj!Z;}5u=_i?zT`}qKFS=kfGHn9X}ho=ySj}hZt zS|Y7X=H1e=CyH;XTRm&b*Pg}i_s8~ejp}_NVpzFA0K#rDsIi4Ks&Cx6f9PT6r5pMb z;?Hxdq){rNYoQK3u4k$y^rBXqt1gkri_e}ZwyoCb`0tt9hRNjyHk57+25BvZ81AmuF4nGKwtahXF@IZlFqmlU^dJ|Li&at) zNJoo^Ty0*#YNs2{7x=wee@jP?IZuWY?AIC_vIaR$@Huq_+no?DbACh1l-e%65*7HB zPJ{5y!4V3$+0sJ_??BG>fUN{b(MVknzu7c$Gq!?jr7$|g#R{Qq0yy8tG-qOVJ#`~~ zClOp8nZRaMJFgKwb^w<+8mrr)xK$4|NlA-2gl4T!#RLEeTYJO+rZNe+)V2v*{9}bvz72^wOQf??BG3-{wOs8ixgr5F?$u7U*lfn4sky z>e8c_HvmuOR>gqSjFiK0HPkRbUrR}xgQQS%b&D$x-@#{Hnc0Ol?> z4B2kLBPiA7$Nb*`ToU$D*Ny`)-H_R>aXz}7O7{^SyR@~!-Z{-IFBkC#J!s%?^oT8# z6I@M0dK#Hgcrt~2OfF`j54v}e^5=p@n+&Kt`b@U{v4|*ZyWe9i~-cutS(R0C8>>^ z1REJ|J?3)YX!B=?R{>%JU0TYO%#wmT#{gahoal@%+R+fNBE)5`hCHH{F>C9Ig1J^z zE@~W0Iz^e^UY=er-j@fV??~FnGD;&hY0)`~4R;o?~7Z7IkH*V@f zP@Pyo2LQhNwlbLqxkUp?&f_svJOCYR$#5|a3L$xoIdF9IP=&o-_`JsPsO(tV<=kkw z2!Bf1FRN!e@Q$ya%*~qpe_a}pf{YqaVs%-2)RxVvp>dY^tWfy>}oOWnk)}lUo{9W{yH9sQkWpMq9kVf7?rAny7Qsq@q3} zCFYVQ@qsfNyS;t_&l{JuPNv_9jBL}zbQ=h~P^(!o0Arf_vfUoy^|N6UjbO^|%3VN5 znzq$A@-)ALY9}5aV!M3MFk7x^ff5hOT3RWqGv(P)?Gi}xffV!c>BGm3=SMW^Oojat zc)==entL^3Jj9V_e>#9!uM;OMI{+->1R@u71woJtpO)oD6$gsQ4rS5?i~=S{D|IbC z5LX%7HfS!h*gO>7MY6=wWK1kPyhO3af})$V5D%d0bz+QWgC>pc{U$B0YDd_ygeaF3 z%UOLg`@o*qAV{De(I<``DitK9h>c{`G6$LIM8|Fq4@_4Ff6zIA0&)YeZ^43_8)4Uu zDci!=h;Qrgyr$tsF_k({Kw54bGyNW(PEXMN!1ThW{(^t@{C$6rYw60pYs#bBtTZLC z&lQGB5(o7I>+tnO|FF+rufA)?%*y8WG1U7MP!UTO)S4Rw*nx+6xe3w4;*x+>hzg9% z>}ms8hX4iye;&6jt@sFSqyNx~mQsN7i1EuzGsOkEnUEAM*ohgH%ZMNV)_JGBfsUh& zwW!g$1~(>1vQF#}SND9q?M!k31-KVL9697d52<+fELdgb7Jv*6#Q1h|JMPOO`>m(Y zIQdcVJyypcHjx{)ee_&c!mQ&EWupI3GUcS%%eDy$o zQ2`dneoooj$VeoTqmQHjIfr#(y8Hg|$y^2ZdV6j(P$BI!23K!`WJ<_?*t((Og&)`> zuIG8xOPmCBBbzviX~=vf^YRIKVi8I0Ku6^M2^H@8$xtaesOe~eeNqy8<&_j$20-nc zPXxH-f1422oXy0htIA1>ZkSL<8bf`k=fv#WPUAJYDGOHsf(n3N@K&u8rvR+*FvUI) z-PN8e_GzCpwkd<$T$Qso{&fHi3SqzOhqlpfT|$LBx3pAiYB3wNprA&9O66_uW)BW4 z?sm1)%1FY%rQV|U&ccu^<8d~*9-=S@(%wdse|5yg3(IbD2WP9OX;q}wSP`=dA4qtY zlS#%K)HqCmJW1$rscuyi4&>$}C$PZv)@n&{s5?NG)yW+KdyvO8(E@adCk8;bx~kDe ztWC0IziaQe32a4Ib(o9{cp}g3G*rRLymu8!qwebMN+9DSH)NJEJ0EDj?DSH7CO;6N ze`YmJ2u{^fatEMEN#;5f-PKcq#uZT5jSI~yzn^#4$)k34@R<(ex{VI%5@a-_VGiz~ zq#zh8i2)NZ@Jih_wRi-#(L7C*r2*Pi;1mP3a6xZt*b!j2t@IO{_GJg&afu}+&WTZH zYny&xRdbpJ``N4>Ku>RXyo%uQ?um~ z1jCiaDfsnP_y3sP^G)QL$^ra@0CxahLXnV>K+>|cH~~|d6hP4t7Si6f56IKz6=8E3 zH&?A9aI?k&)R(=jQJT-^gahmEIuoL^dAsJqk3>;UZ%w5+=wTMZ&hWqSr1Ki&G5 z*V{j?UNdARS1Zpba1U0yMgtO^emSyln~{9J>HV_%C?kiE0t^IjpX}cA>;r!*flJ!h z?$>|5T?V2xp@M4xCQ;X@BV3eCVkYxOr+cTI^JTdz!n(jv8+CFLm4j?8@)5oP=uo zeBg-e9b)XDa@_pOmh(Zc;&0wG!NW|(ufiLlN1I-jc%Lr~d>(OJ1Uqac`oHclifz=8 z$|r54YbECL7)+N?!af9+!c03#HDAWBb9^>OwYwN*=KI=y^@r+h_vAFm;mUaZTBhDm zBQ+Ez-kIhA7L>0C5*C>RSTE`j7F!SZzc+uq5~Sq=`}~fx z?{4Ooug&}U&++od=MLq(_vzTg`!&++)p)`Cl60|D_+_nfZ}t$;13v$?69JhnDg*hj}ouOXwFN0jCa| zm(^9c<1s9bKZGc;Ma6r4INpzmz~z3e(=eH;CzB{$e87$F?Ic8**D4!)_=?#EVD5Sr zSA^~n%}YpK|Lgi@XivB6^w5SpOj#=PQv2s{#-pPAwc}1pOS_N8v^3av5A3^@-R<=b zh~f?>#t=8gq2J{w`U;rqjxQv0>=Uy5F2X3SfKEO&uCg2)E{|{5w5P$|r-$8K&D@t_ zQEm~#87;O^|HE7kd8{#ctWfB|Q>}F@URF8j%#er5tR7nW{&;V?JPM;Nz1dNeY7{lk z-8?3i-nfNnx;Vf|*VtHSpgt*libBu`AjlHR)hS5ZALe4MX8as2s+zm9vPMt83u`uC z%UB<>6Tm%g73JfrAm zZX6LN@Vyc2i`ml~Zi}yoyQDfFd$WD7QPFo&s%}mBcW0~LKgV@pC6cK$=VGc2=wFT5 z>j%w8wymD3!Y4;9JoWFjVYz+6bzx5HS$}H(Z8m0(FKn?l3Z06_{y4SLQW81=#yfl0 zp-xfudLCAE9Jz|=K>ClRChhC6GEXl{T)FxPX6R@n`@G|hh?E#`_tZnrC(a1G2`RY4 zA!YhFHwCp^OMAXM$-)?*t%Q{fXyQ|=5}A2ynsL`WquECs#1El@1VJSh_Z6Zt0JB5- z#Ur7x7tn>xV6E~eggd_P)hT*NyHi$FOu`2vzUgz45Gq6zNe5>XD3}f`QUDU;7Bq1G z?*Sy@7&#b9H(oqy@pz6E_Xbze*NxiS@=!cvKTo(Drabm;Yyy)BED=2%0H_G$^*W@` zowhoaj7HG$`0(gfsDD4KDvA`1C^{ffzCJlUpSTbo2qi9&075QB=sM*1O>mciNq|*dANNUxZI9__#jlV|&N^9A|&@tZr_co%ByDon^!I$q{~3NC;CGO9A~(AP_uZ z_+NN7_)nBDpnS4EE&-m;>iHCExg{3J)XMyHQe*^Kk}JNV=JA1U)YJ@F%R!mqqsm1V z&hdt9q~D+i!;!y|6BZa10Pm4EA=Bk=@9v97wd)yd>^!`bo{(1UQYBTBX{8xQQ?!h| zjW8!8YCNI01{a8=(`P|ScnA=83xBh4dl&;)#Xk5M+&+MLBD=f8zKIe{XvL%(*5t`z zRFWsD_xZ|45tf3*N1c4QIM?eE?p^w&SZlRyiQhvvb^bghtURi103`QZkLP?e+Owi* zX4+g8PKz7Qm+kN>MRf~416?|6F9@AHT~`zhhOsJmke+Sg-@-0DvS&pPW-|q3b8!+v zyaTW5+_+6;hc7(wqC&`T1T&GZMcWsyw&^G7doRW=w*yREzk&YK$yiFLANqj=1f-D$ z1eCnL$jJEXe~(r}XqW)9{h6~XbEsBYi*V%Vup4u(`U^8kh6TRJ= zv@m~Bk@8}diCNb7_z9quM?NU-y=_O6$5-*LtA-chCeR+8?oM$&`L>klpyt(NX?Qx{ z-?zUmJKa^OlWdSS-8lSYuSw=z0bJi#R5I6Bw0a7=)ua(It`Vwl^E(c$8Q$3Nwzjss z8+QovuY<9_1wy_buK{0{ErFKLU0DbIAg~l(U;9RHXs&P(sW3HN-^b>5~PzUQDc;@oRn z%HitG&iZ4(7WK~VIr~!7chlmx2dF-KCU048Tj{YIbE?eNu`DGkZia2vhfl{xVHxT8 z*?Ytxt!clgv8_b~seVUzja$hX($&$G4?RP2Jw_K6%NkoU58L*}i|=+e9G*`j4Oj%A zH_vhZ=t+Zh%1URug}B3Y{IKIG;4)y@?oz+Y^J-|)@_2Z~Qg+Qp{ zE)EQAwpaQwhbEj@EZ`SEJ*K6k&OYyeNyo*a5MG}S4y>!q&Ch{JT2wX4c%X>&_7(2g z5wI^WQY_2Yl;zl(&Hj!oZVJbjiB3pK)fjx-4es>TR?cq(RvrGJ7POiH-o-nlr59c$ z-VL2L9;WiRucE;(<&8J8)EP0#c1Mb#Nu6N(Je?+Exo@9NE#6QB{F{gNTUpP{(-|1 z2TE%>EbcO2^>wSz-_|(E$(xXX8uGmeBDILSyf0F&&>LyOC9>i#pRlpZ(v+mSLs$Hr z#AlkF){zA84kJ9G12eN!zsk^<*u|16d3;k#ECF_OH&#w zDLdb@pptx}(N&6!80O@5Ve5(1t(ox|9HwE-7Vh+?E!DdRcf5ksj&)ts(}rEV#0*_) zPeekbf9q~K@;^^3Cp0cxvabC!k)}n72+1;*V+`1Esq;E z?J+xwJWXS~{?kfpNDG_>a5BBxe65;dV;&d&f*^s6T_BZIB*66tj?1gPU~dW{7YRO( zv19FDe>^J7sz|@ZMHSsI8J_S87SRN;&TprcKMBFhCY)_bsTRxM4)U%40?)XFadT8R zLd`;37;y?u#Cp&-$QcrrRU=T4I4{WQ`-TU9#MJzgzjipi2(ozwkcUT}pPuaLyCiM< zvb#U!wkDodU(~s-!rRi*KHPsc+aiigC&1iEpZ45)De0L02Ur+^mO*JIFCat7#V^~T z?{Um2rDFo-HZWR-bJ!TW${$2M4}1=lZ2#%}uI*d?j0T!EpC5fyyk_3!(!GCADEoR! zOgqypEfp**dRMXlh%*>ixfBQN^GgAZ{zk#e}l1xfHiv~Y2`oGb5Z#DG~EPRq_f5JNeptw=yZVf z+7>x``Pg+vxAQpzkIOTTxH2rW@@n6ke^CuSL)%K;5n|*6M2WV~;^x(Oc%u%su@~7+ zGc8(2xXW()?DLOHhYI2p9PP$}dbp)!3WYL39vA`^p1{hO1J4E;s|^$3rS7u4t#P-; z!+Sr;cW>XUvnOK?{ktB4QtQ7CvvJ0F&lSId@TGv|dFXnTdNl}ig}y$W zIDBM0?msgDJxdYtUBI_swUa7mV6&T)cT6yj3mjeMfGxmK#J%9@vA0Aw^pr>0U*9mY zm)`V&M*MK3{`lfzA%$+ghw0rs)mhsy&xCgxhiyPrWQ1TVn)euYO$qrMJ73QoR z>Wu^jU8mpc%A^Umqh9w4E2@*e-&HpFTP%3zk$i`=gu+B4*ut7 zjT4YvU9=aHR~#bUhwN*lkXM?H3&nfUG_3-FNNjALxBwQYObQT-*$hM1)WY59{wJL2 z2U`88alq$rsK(`?|EDI+3mdE1_eM_0#tAbTtoR%sdd!5v7!%rfQlFb3GMLQyo&?aFHk^ z86&aR*jX%54Tpm7$U3$OvWR5*Ek+73wh6X~WZf-ByuTbt-WC+RAeQL>BTa4%gu*qEm1f|{-Rw~Ija=Ql@=%jVKjPtZz+yW2Tyr?0s zhO@~lTZ}k=s$^g4xNIriH1luPR+j)-8rVmr!pYFvjMxC2(JtIg7v_%J%f|c4?~5F^ z3HUJ`N1_}rSpJt0_s}_aOmdN1OsWws>4WE5l9Po+KF%ov&8MRc?!?DRPM5lGlu#}y zzY(A0etk0;w+4_*HbY`?aevc|BR2w%J4|WmEv6Ccr{$0EtxbMvTax3(`>Jn!Lw7bS zDo-4iBo4p{qPG)`84|{>3>JvSO;1?Pt}&_+(|+Fykc~<*c?8^^ z8bJXP4)^r>Z!OrZX;2vSkkApmDLm|tYF5QIw&Bt#Z{5u0K0i0aNh4I!6Jo^b zFd`Q>=bqoPgH`Snt)I%8=;SuYnnu;R5j9Uq-f6=sovJUYqpeA81AP@WTF?WV=hO=G zShk?VQTpLkwQ~=FT8u+bqj4MfUC`5#8?hVB1`Gx214V#{fR8G3!EyoYSV9+N0%^dp z@|{|yUhDW$8kQtbwf@3`g~~rf$Y|Q zoVr6Mg-fGweiIqrdN5oaRF#lY#lset`EY1r*hfn6GK0J=pr%YX8v5xw++?1EpXH*~ z85-zOf_S`}Oohp70b_^=P$kJY@*lbZPX^Lll$A|~D*?{=Q|ci?e2#Fj3Oci5B=BJ> zReVky?M2Hn%{c|%r4x``4p1fqUsRw-!wL2<7hDd})1Vd(>=;#OtLxa-K18;h?`*3E z^cQH#1Y?z1-^t;|XCfZ z$UQLl8KnQ^W_a`gS11MFFDPefw;|cMsJY37p3kCu3HW%J&#;gywVvdy0zq(Ay7v`1 z&DD&wt=%8NuKZM*<}8Yz$)E}N?S@p|XR6;lNQ;E8@bn4-E z%*{iM?KTFhv<10fnf*#f{5O;vgtd{pPw67aVa2N!ZDR`)Eg(%LMxf#=XeE+^+l!cJ zCLKke6fza39KqlCNj8Kr$t{8I8jWoG=gDCpR2H!u&=ZmgoW9Iz12uRe!9e{UVFEoJ zOCbz?8C+Eo2zJu)+Tp0kQjC3xnm;y#n4qk!&s`B(`gN!{ZbGSLxq!626`m~BfBJTOdtCBzoSiiN#8V9m-?n?iVp;TRB#`Wr(ZTYOIK0fb<& z&hlgtE@QwBn9c$oeF-@d%n*@4mSYSDtMi1z>ebRb+DZ0%E=Q@)Mrb_E!2^T9fxk8u zR)9#Gd7~)LC2ELTmA+nakmzr2Z7~pHE1e41Ec3)QNEBkMU;gfK$#{H0pZ{P=uLG(& zU@vn%#<7R(yGXmKzl5*BkSOQd@-8|lL(T$e)G#&BrRfQ>^2?Od$X7(sUqqBVZ=Q%r zt^s<7k71Yin(Mw4ltF@O5kiwDC9q1K4-d*%8jPA6lX__}K$8$ly2u?R&p1%GWz!kI zkJM8;cZGTZK)Y#Q58l&f=7FcRE51eDbD15fU7}VYp(k|! z{jN$ci}=GO?8kz2w7QUrZn6maohR29-#Cd)EnN|i5g1((5q7<0)=b^0>nDd2!OzZw zmVs&N2Pu5*NBAraJ)JjU*+M}>ERMD;1pY@Qz=v**As6R`QEo(@wh!1d*x z0m;Qz4Vd7}`pfB7xqBUSZmP+uO|zt{vBf6C`LTQ4=k58VtrxhZOR3aGsGxuxFY{AU zWiM-_plNq)Mi9Di-(_1Z7U5hc+9-WXf!MG)y%;K5;KUU%2$8%&7FFgZQ=)=&vy!|Z zaUoQz;?dTEN9HRAm#6*x`*ia%z$uAa?ZSy491do>>F>x;0HMb?w!DbO9NW4t%rAxV z9aHsUtInBe&=~fCnzs4dWQJI5a7(r2ovu3Ge_+%}74ZgrM%`dp2zT-0{JhC>VG7Y_ zWmI5Ekb=09KS!EOcbQ%h*Jd4uRF3oysRDvSe`5EMlllW8G|P+2+EP){)~Q7a&-NF*(TlW>}4 z4dr4hGCT-hOu-FT3)RoeBY5AWlJZU4?#%#_?*iNDIt?1Zam_s1XHfcB=1# z$s!>ky#Hz!W<6L7dZ*q8831mhioamfUbXM|n(T>kW2OnAqJ4M%!Fk*RE7gq*JCGT} zy>xo)RBd~|oSv;CFMofNz+)UBn*K;nS!Ck;Hsgj98`46F|Hl1x*cgw~gL3Tw`H+rb z6lsvD?db8L6A<0b2F%O?Bul7*m3zSqd&)boqwl?XNP|j-oCl%hqjjWDF592+c)ikR z&JF`zGH^~ILm-Ai#877Xbd?s-$G1qZfxF9o<)BD}|U9%ht$3$-lm8f}sot?K#G z1*_9`%_m@CSqD3h%SL5B?dN!Htq<`3%o<;cBOa&yglQ{s@-06l9>CDn+S=H`P?ycj z&W^^-+DcjJ|7?5x-%(wuHg2=dfw*~031;0vW}u#@3uT4Y^8Dm7U&M#U=L#aMzjxbZ#wyo-QX?xz*g5bYt!@8AQOHuzfO{#C_eHcOa z2XgU}Bq=SFa_#rosf560s_X}K{>Dq@Z+RIctE5vRGI!gR_Z8vj!=@A6pW5Ae+p$;= zWn4OJ4l}AQzIWI}=5-w>X$FvN^{oXk`~q)!%N zN>tVvRp3_9NQ8y}vA9vI@Gkv`vca-d?XACrDv?X6t9!nK+-h{ig(WAWtV2RuuL55y z$g9Y72~GNPq-=o6psOv-Dg#QaYUI@(XQY|o1C>Ot=OL{4j7I;0*P%n>hKI8(iO1{p z;fd;PH^DOv93Tr-R7d5U~Z}V z6csj|m~6up>f>sxjNAfE1iZ+yQte3BTS~dwK~=bL@I}BxEjhp_F4zCTG}q39jep1lP##>4o3Z6Thc7eoy!Po}T+1lOF);kk~dN&qXMD8;L#0=zuc)pBFq? zvUpc;nl2u~yE4_~8_^6$2o#5>a9egWutG4MMw``Y(ZgyBzJ18(d=f%E& zt33o=E!+*=Ln>J{_7glV>;e2N{3M}>Q7Q?f_^nOqzQITlBObT}VTSCf+?t-Yg_>%X zu$_TrSwd#gP2w-Q;-}l3IO##Nj~nu@>rLM6t!}_GM$z3}*~}U-u_?LMqxdKccaUN4 z^n<*LAq_gWAJ_Jzao)*1)Jdz%Z1=R0+ncuWrRIj5H$o&3$e};k>;a-dtiDG9Z_XT@ zTxW$Q&*$(%+K-6=|GsW7q)0IFq1FiXCGnJt{-jj%x*=&&&3KO`f5lh!xg#lEu|JGr7L5sn z1XJU3I>7JdhKt=Jj-&M5@lY&W(}3=Q#f-}OGHEk~=+DL-cE83gs;{7`;+cWD%l#!x z1~63F(DHsc{?RTn;d#`zQs#}1gH-XL9EN09bz=vc7I^n=wI-d2osa>b%#9CM%-1~z}APs)KGmF!rJJV&mtVU zDbR$w-Lge|Had8F=+l&3=mO@?;j+tx0Aig~d(^GzlUKu!**@1alv&k}o~@KNs8SNW<(Y|B#5@Ty|O1b>=e~G(#$7gkUu8eM7T!W(f-;eX6&-u4mFI(O$ zgY|h-JSw6v$T*cHnlbW zAJ)H+Cv>c%x${+cJFj(WEyltt0COExx7xOakIkh-T+M!4jFoyW)fr}9zR#gD{y2GsMpJ{b(hyi*4abCeE$vAd_3IJ$w7O5%PJ z5U1dp8WG=GM|MQNvfzx1c7fI*gq|WH)`NzgA|e{~)crNmi(?$TjfBRfHVve-3-^BX zEg*LqA6D4m#62GDcL@vG?Cp064T+?oNUJD>?_eSjFj6@WJy!B11?Ykx=qA0=bCul* zy6I7FI*Si0Y;j_n1_{Q(@0J8w@ATAP?S$q??M0^?_zIml%?bENFL(+dg;aZAsG(@@ z-%{P;#NLAlw1Wj+0SRz|1(M;T=O!VEtE1p%0Eq`Y;@eMsCIcUcCAEW&x#W2Rr6>o{ zgsDe(i5_)~)X>D~12{)&;Ny1VF_Q`AB`j%?XCp15zZ2<}5GlH!=#3%n#|p6s?gVXJ zv(CvF&P6|dk7RHpKfxdIq;yEqy~3w-2-0~QY$TKot=QpI93Kk@EN-P$~UfLjZOXIIOW09oo@W?N9lkviZg0U=-ASj z6@!YMx^D3%N_++@axno(`OiTwF*Xs&u*Z^ayb{7~SsAbz`gyJ~xtpW0#5=Zg$F0+E zXFlketedb#1z4Qr%xBK8lN33G&%a~K510%NIcx-V;WfJNf8sH)Y`CYEs`pr)m|T#y zSw2HC4s3JXSz5E^aXiNF_W9GYtEb+g%>Gkx`BcMoor7Ve4Bf1bdwyJL0WDzHkS)-) zR#m_DT3dMDBoOfUiKTg!QK?&)^uDKD_Q{aF*uLe-2ynXu{>Ry6(vSc4JDj@sQ4*Vu z#zLsO!+te2a(qf}Lr{gw**#~xH{}{)@H`W}-$GC^RV$0uKKl}Ggf>#{QvNQ9G*1dF zwSdlVCng?u7;35{=ph(RuV0;vRC9eIsd(I;azmg6YqM?j(qhHqDts#^O-zrxInX1a zz+{#I4ZuVw5XntUM7$$iyqoIe1|Sewc|3d-?AJzIy1%6%D|KbR*P?wM zH7R)wViXHXd}L&Xg!!W2mkNtq`KO10;v`Es0^G!)0v(l@tUm%03TD&`dP*}iNF$ez zPH7g_`-Mr|WVVHM)mt~9t%ED13@Y`3k4cU&Gbx^p+#QKy4lGcyOXUw>7V!6reyvG% z8Gy<1GA>js-fme<5d*8>mef$cab5r_}$3hHmgQGp?vG8!>juU}`In+;}8l1Xz|45ong zQi0pljz?s{z~*$q%cPiX<*2|AHYu}c5Rymvlfxo3{6GXb^n^%d$R%~M%V)99*T3$g zf+xG~e+wm;A%4oLMdw5I9?4+01ME|QkU=M;QwW}v8h8Bt{Y7H2eHwE4DFGdgolzg>e0iUyLRh%~IgEGQu~Fh$dnfKz2ZJ^KZd zQ&eURkeM%N{)2vy8zC<4uatrgh5ZJFBmotVw6dyaR%+XjroR=Sjg^4?3p`S*;7=Oy zDK_cF0#D0QnYBPPKX-peq#zqUU8z)`B(BuVn!cVefA-q%?`NR0{$5KM$n@(Uta;zA z-ec*41O+s6mo}ol$TB&NfE2|M`FS|H#^0Xj|H9HrIXn_yp}B zOm?1_Pwb}KWPq-!Amuh0z09J~{Jo)1I9W=9T{WM7KcALsG9<0Vfu^?et<)^2Yhd3f zKs~MvPA|~;IPZT|zjoEqk~yxwGzHvfah>l{O^-W0xxBBQj+S44)NdUsXZ&+x$=-dc zU;S9^*7@2O{*lw)Q%`wldAhVd?mDz}-d>%Z8CW{r$MAl+eT8`N=yq%-3iKRJ|9T&O z#mO4JE~@v)kHq3m+D@Aky~U=bH5fX-`*e?1ZA8Oz_wk_z@KR3mY9&R*WCGTGkH6Sc zqLRN)9(6XtQ3|#itZZ-AUkAF|TUJg!Su$_I)3WRZP3@nayuBjUvD&wN+AG|vuOin0 z>Xbak9<(gHtzOjZnTPey;Iy8m8_hqiyH&6KLwBRqb$`+Wn%gt_*7&ar>R5|zKn!bV zm#Smdm+O7NVnY4t#b?OqIv|5oLgolfHGLk5cHB0-d-xoF`$rh`1Wvm}vp3j&PU&UM zLfaw)85xV!oZPxYMZ)!Nq3L>~HNIWWoB8STPJK1A-9Z|+Ej>L}_lZS+<-fLrV9L7h zbq{{^Y;kW`SiK=u?Uj#~p6%6!5c!6ba!3cb%gipR?yl&@{t`W>1^l|6uicw{|Fi@( z`??1;`|YisM`-sqNHodhI} znsOY$kg8?}uY2$>~yU+L9tw#F)nG@~oL#IB{mZ zb766NJWs6^QQ`IN2;j z$s0O3&zbo77C2pR{Tm5(_ag3O3E#j76riEQ;m1(KcMNk%0ED4@Q(%_+rruS7hZbqo z`KOr?Y7kHRn_oWPW)64byS|&f!*bmyEuj%^Uw7co2I_R4weIgvgGbJ*nHNqhoo(`m z$;-akAN8(}$KWdNSA45$d(D5E$-Nz29zXBK9vmD-^?7K{{w3IM>3DZHK6-L_#&p{5 zy$(K)CvOpN0~}?(o$t0gFE6()vO7;N&NS+_I-56<|D3lEUAHBoDiV=kxzl(46#GAq z$tM2k2$xD4BV^8|$(ow$_;?jtEQX%8S<$IRYP^hEq8kzlV>a>>bYD3+d|iFNmw6e-#c5=&HLeO_n=IDl&m7`0~l@Se)g^2S~JM{T7T{&{eI8>R+UmI z(7Q%q{BZ89XtrD$pX7{rZ$TdVd4pl?o4N-WVU;1Q)cV{Kf4@C>Uo!u2#WVwlS1945 z=LmLEKteXTv$IJ>)HrW;>06z?41ev=-E?BR%k`RJ)!HDsLf}piy?Wd%6%_v+FR>K` z2EG^W3lEFOdiDJ5mKy_ROcx|}w)(8gHK*GEN)}Ua@#L;0#I19}$_M1uHmDg3L0V!5 zA_;jYsxuRISp;Z9@5pri9ii`&t8DQ8?7>R`0N`||tcMrjo!R#<670Nlye}k{uH0Z2 zh>Z513#t-U6(^}^KnPPKCmZ;Y{~(%aLIhcU%#Kn|P9P8+4fEOdm)nEK0x!DMo2Tby z@OXilm=Gyn9UCRG*m;CJiP0cSJAsyGz^6=qP(c6-JEp3%0!;brdSc3WY6{pWOAGuP zfH!8yGhp;Q|5i3Lc$|Fz+q%X~-cO)GeMpH(p3W@KJlGPz_Llo@2PFe8wE&$dBO?c& zR4zv`M0gB)<|yz8snu?)bNQ@`=ZZ;w96)5K6bqFp7Y^1=1Id*(s4kU_wH>3A275#ZlvK{6_S-m_wa)wu|##tZx09+gBTg|@PT4X6`$C-~>f z-O)%OE@ngA5S+h1Di3&QTUXKiF~k9 zj#>t;)PpmxL&Em$-}|Rb5Oe~})~wQM|E3SMa5Z(XXa}%ka{B>yw?(D>7SV`E1A&qp zr2}VV5m=zdpj#OswUOsM!NY|Ih*on(rBK3G&Pgfp=N(ukh4F-$jhfhM<)gI=U$}XB zG;o%zEm?CXOkCifDy3|Lni#{-&Fb+x(6AྫQK0iU^JKtE0InlCDMccUCWEL5 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
    q^b-$kl0rJor#`6#c2(S2doE+>h1J2X8y(&qmWa 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ν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 diff --git a/pydoc_injections.txt b/pydoc_injections.txt deleted file mode 100644 index e5cc533..0000000 --- a/pydoc_injections.txt +++ /dev/null @@ -1,73630 +0,0 @@ -ida_auto.auto_apply_tail(): - - auto_apply_tail(tail_ea, parent_ea) - - - Plan to apply the tail_ea chunk to the parent - - @param tail_ea: linear address of start of tail (C++: ea_t) - @param parent_ea: linear address within parent. If BADADDR, - automatically try to find parent via xrefs. (C++: - ea_t) - - -ida_auto.auto_apply_type(): - - auto_apply_type(caller, callee) - - - Plan to apply the callee's type to the calling point. - - - @param caller (C++: ea_t) - @param callee (C++: ea_t) - - -ida_auto.auto_cancel(): - - auto_cancel(ea1, ea2) - - - Remove an address range (ea1..ea2) from queues 'AU_CODE' , 'AU_PROC' , - 'AU_USED' . To remove an address range from other queues use - 'auto_unmark()' function. 'ea1' may be higher than 'ea2', the kernel - will swap them in this case. 'ea2' doesn't belong to the range. - - @param ea1 (C++: ea_t) - @param ea2 (C++: ea_t) - - -class ida_auto.auto_display_t(): - - Proxy of C++ auto_display_t class - - -ida_auto.auto_display_t.ea: - auto_display_t_ea_get(self) -> ea_t - -ida_auto.auto_display_t.state: - auto_display_t_state_get(self) -> idastate_t - -ida_auto.auto_display_t.type: - auto_display_t_type_get(self) -> atype_t - -ida_auto.auto_get(): - - auto_get(type, lowEA, highEA) -> ea_t - - - Retrieve an address from queues regarding their priority. Returns - 'BADADDR' if no addresses not lower than 'lowEA' and less than - 'highEA' are found in the queues. Otherwise *type will have queue - type. - - @param type (C++: atype_t *) - @param lowEA (C++: ea_t) - @param highEA (C++: ea_t) - - -ida_auto.auto_is_ok(): - - auto_is_ok() -> bool - - - Are all queues empty? (i.e. has autoanalysis finished?). - - -ida_auto.auto_make_code(): - - auto_make_code(ea) - - - Plan to make code. - - - @param ea (C++: ea_t) - - -ida_auto.auto_make_proc(): - - auto_make_proc(ea) - - - Plan to make code&function. - - - @param ea (C++: ea_t) - - -ida_auto.auto_mark(): - - auto_mark(ea, type) - - - Put single address into a queue. Queues keep addresses sorted. - - - @param ea (C++: ea_t) - @param type (C++: atype_t) - - -ida_auto.auto_mark_range(): - - auto_mark_range(start, end, type) - - - Put range of addresses into a queue. 'start' may be higher than 'end', - the kernel will swap them in this case. 'end' doesn't belong to the - range. - - @param start (C++: ea_t) - @param end (C++: ea_t) - @param type (C++: atype_t) - - -ida_auto.auto_recreate_insn(): - - auto_recreate_insn(ea) -> int - - - Try to create instruction - - @param ea: linear address of callee (C++: ea_t) - @return: the length of the instruction or 0 - - -ida_auto.auto_unmark(): - - auto_unmark(start, end, type) - - - Remove range of addresses from a queue. 'start' may be higher than - 'end', the kernel will swap them in this case. 'end' doesn't belong to - the range. - - @param start (C++: ea_t) - @param end (C++: ea_t) - @param type (C++: atype_t) - - -ida_auto.auto_wait(): - - auto_wait() -> bool - - - Process everything in the queues and return true. - - @return: false if the user clicked cancel. (the wait box must be - displayed by the caller if desired) - - -ida_auto.auto_wait_range(): - - auto_wait_range(ea1, ea2) -> ssize_t - - - Process everything in the specified range and return true. - - @param ea1 (C++: ea_t) - @param ea2 (C++: ea_t) - @return: number of autoanalysis steps made. -1 if the user clicked - cancel. (the wait box must be displayed by the caller if - desired) - - -ida_auto.enable_auto(): - - enable_auto(enable) -> bool - - - Temporarily enable/disable autoanalyzer. Not user-facing, but rather - because IDA sometimes need to turn AA on/off regardless of - inf.s_genflags:INFFL_AUTO - - @param enable (C++: bool) - @return: old state - - -ida_auto.get_auto_display(): - - get_auto_display(auto_display) - - - Get structure which holds the autoanalysis indicator contents. - - - @param auto_display (C++: auto_display_t *) - - -ida_auto.get_auto_state(): - - get_auto_state() -> atype_t - - - Get current state of autoanalyzer. If auto_state == 'AU_NONE' , IDA is - currently not running the analysis (it could be temporarily - interrupted to perform the user's requests, for example). - - -ida_auto.is_auto_enabled(): - - is_auto_enabled() -> bool - - - Get autoanalyzer state. - - -ida_auto.may_create_stkvars(): - - may_create_stkvars() -> bool - - - Is it allowed to create stack variables automatically?. This function - should be used by IDP modules before creating stack vars. - - -ida_auto.may_trace_sp(): - - may_trace_sp() -> bool - - - Is it allowed to trace stack pointer automatically?. This function - should be used by IDP modules before tracing sp. - - -ida_auto.peek_auto_queue(): - - peek_auto_queue(low_ea, type) -> ea_t - - - Peek into a queue 'type' for an address not lower than 'low_ea'. Do - not remove address from the queue. - - @param low_ea (C++: ea_t) - @param type (C++: atype_t) - @return: the address or BADADDR - - -ida_auto.plan_and_wait(): - - plan_and_wait(ea1, ea2, final_pass=True) -> int - - - Analyze the specified range. Try to create instructions where - possible. Make the final pass over the specified range if specified. - This function doesn't return until the range is analyzed. - - @param ea1 (C++: ea_t) - @param ea2 (C++: ea_t) - @param final_pass (C++: bool) - - -ida_auto.plan_ea(): - - plan_ea(ea) - - - Plan to perform reanalysis. - - - @param ea (C++: ea_t) - - -ida_auto.plan_range(): - - plan_range(sEA, eEA) - - - Plan to perform reanalysis. - - - @param sEA (C++: ea_t) - @param eEA (C++: ea_t) - - -ida_auto.reanalyze_callers(): - - reanalyze_callers(ea, noret) - - - Plan to reanalyze callers of the specified address. This function will - add to 'AU_USED' queue all instructions that call (not jump to) the - specified address. - - @param ea: linear address of callee (C++: ea_t) - @param noret: !=0: the callee doesn't return, mark to undefine - subsequent instructions in the caller. 0: do nothing. - (C++: bool) - - -ida_auto.revert_ida_decisions(): - - revert_ida_decisions(ea1, ea2) - - - Delete all analysis info that IDA generated for for the given range. - - - @param ea1 (C++: ea_t) - @param ea2 (C++: ea_t) - - -ida_auto.set_auto_state(): - - set_auto_state(new_state) -> atype_t - - - Set current state of autoanalyzer. - - @param new_state: new state of autoanalyzer (C++: atype_t) - @return: previous state - - -ida_auto.set_ida_state(): - - set_ida_state(st) -> idastate_t - - - Change IDA status indicator value - - @param st: - new indicator status (C++: idastate_t) - @return: old indicator status - - -ida_auto.show_addr(): - - show_addr(ea) - - - Show an address on the autoanalysis indicator. The address is - displayed in the form " @:12345678". - - @param ea: - linear address to display (C++: ea_t) - - -ida_auto.show_auto(): - - show_auto(ea, type=AU_NONE) - - - Change autoanalysis indicator value. - - @param ea: linear address being analyzed (C++: ea_t) - @param type: autoanalysis type (see Autoanalysis queues ) (C++: - atype_t) - - -ida_bytes.add_byte(): - - add_byte(ea, value) - - - Add a value to one byte of the program. This function works for wide - byte processors too. - - @param ea: linear address (C++: ea_t) - @param value: byte value (C++: uint32) - - -ida_bytes.add_dword(): - - add_dword(ea, value) - - - Add a value to one dword of the program. This function works for wide - byte processors too. This function takes into account order of bytes - specified in \inf{is_be()}this function works incorrectly if - \ph{nbits} > 16 - - @param ea: linear address (C++: ea_t) - @param value: byte value (C++: uint64) - - -ida_bytes.add_hidden_range(): - - add_hidden_range(ea1, ea2, description, header, footer, color) -> bool - - - Mark a range of addresses as hidden. The range will be created in the - invisible state with the default color - - @param ea1: linear address of start of the address range (C++: ea_t) - @param ea2: linear address of end of the address range (C++: ea_t) - @param description: range parameters (C++: const char *) - @param header: range parameters (C++: const char *) - @param footer: range parameters (C++: const char *) - @param color (C++: bgcolor_t) - @return: success - - -ida_bytes.add_mapping(): - - add_mapping(_from, to, size) -> bool - - - IDA supports memory mapping. References to the addresses from the - mapped range use data and meta-data from the mapping range.You should - set flag PR2_MAPPING in ph.flag2 to use memory mapping Add memory - mapping range. - - @param _from: start of the mapped range (nonexistent address) (C++: - ea_t) - @param to: start of the mapping range (existent address) (C++: ea_t) - @param size: size of the range (C++: asize_t) - @return: success - - -ida_bytes.add_qword(): - - add_qword(ea, value) - - - Add a value to one qword of the program. This function does not work - for wide byte processors. This function takes into account order of - bytes specified in \inf{is_be()} - - @param ea: linear address (C++: ea_t) - @param value: byte value (C++: uint64) - - -ida_bytes.add_word(): - - add_word(ea, value) - - - Add a value to one word of the program. This function works for wide - byte processors too. This function takes into account order of bytes - specified in \inf{is_be()} - - @param ea: linear address (C++: ea_t) - @param value: byte value (C++: uint64) - - -ida_bytes.align_flag(): - - align_flag() -> flags_t - - - Get a flags_t representing an alignment directive. - - -ida_bytes.append_cmt(): - - append_cmt(ea, str, rptble) -> bool - - - Append to an indented comment. Creates a new comment if none exists. - Appends a newline character and the specified string otherwise. - - @param ea: linear address (C++: ea_t) - @param str: comment string to append (C++: const char *) - @param rptble: append to repeatable comment? (C++: bool) - @return: success - - -ida_bytes.attach_custom_data_format(): - - attach_custom_data_format(dtid, dfid) -> bool - - - Attach the data format to the data type. - - @param dtid: data type id that can use the data format. 0 means all - standard data types. Such data formats can be applied to - any data item or instruction operands. For instruction - operands, the data_format_t::value_size check is not - performed by the kernel. (C++: int) - @param dfid: data format id (C++: int) - - -ida_bytes.bin_flag(): - - bin_flag() -> flags_t - - - Get number flag of the base, regardless of current processor - better - to use 'num_flag()' - - -ida_bytes.bin_search(): - - bin_search(start_ea, end_ea, image, mask, step, flags) -> ea_t - - -ida_bytes.byte_flag(): - - byte_flag() -> flags_t - - - Get a flags_t representing a byte. - - -ida_bytes.bytesize(): - - bytesize(ea) -> int - - - Get number of bytes required to store a byte at the given address. - - - @param ea (C++: ea_t) - - -ida_bytes.calc_def_align(): - - calc_def_align(ea, mina, maxa) -> int - - - Calculate default alignment. - - - @param ea (C++: ea_t) - @param mina (C++: int) - @param maxa (C++: int) - - -ida_bytes.calc_dflags(): - - calc_dflags(f, force) -> flags_t - - -ida_bytes.calc_max_align(): - - calc_max_align(endea) -> int - - - Returns: 0..32. - - - @param endea (C++: ea_t) - - -ida_bytes.calc_max_item_end(): - - calc_max_item_end(ea, how=15) -> ea_t - - - Calculate maximal reasonable end address of a new item. This function - will limit the item with the current segment bounds. - - @param ea: linear address (C++: ea_t) - @param how: when to stop the search. A combination of Item end search - flags (C++: int) - @return: end of new item. If it is not possible to create an item, it - will return 'ea'. - - -ida_bytes.calc_min_align(): - - calc_min_align(length) -> int - - - Returns: 1..32. - - - @param length (C++: asize_t) - - -ida_bytes.can_define_item(): - - can_define_item(ea, length, flags) -> bool - - - Can define item (instruction/data) of the specified 'length', starting - at 'ea'?if there is an item starting at 'ea', this function ignores - itthis function converts to unexplored all encountered data items with - fixup information. Should be fixed in the future.a new item would - cross segment boundariesa new item would overlap with existing items - (except items specified by 'flags') - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param flags: if not 0, then the kernel will ignore the data types - specified by the flags and destroy them. For example: - 1000 dw 5 1002 db 5 ; undef - 1003 db 5 ; undef 1004 dw 5 - 1006 dd 5 can_define_item(1000, 6, 0) - - false because of dw at 1004 can_define_item(1000, - 6, word_flag()) - true, word at 1004 is destroyed (C++: - flags_t) - @return: 1-yes, 0-no - - -ida_bytes.change_storage_type(): - - change_storage_type(start_ea, end_ea, stt) -> error_t - - - Change flag storage type for address range. - - @param start_ea: should be lower than end_ea. (C++: ea_t) - @param end_ea: does not belong to the range. (C++: ea_t) - @param stt: storage_type_t (C++: storage_type_t) - @return: error code - - -ida_bytes.char_flag(): - - char_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.chunk_size(): - - chunk_size(ea) -> asize_t - - - Get size of the contiguous address block containing 'ea'. - - @param ea (C++: ea_t) - @return: 0 if 'ea' doesn't belong to the program. - - -ida_bytes.chunk_start(): - - chunk_start(ea) -> ea_t - - - Get start of the contiguous address block containing 'ea'. - - @param ea (C++: ea_t) - @return: BADADDR if 'ea' doesn't belong to the program. - - -ida_bytes.clr_lzero(): - - clr_lzero(ea, n) -> bool - - - Clear lzero bit. - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.clr_op_type(): - - clr_op_type(ea, n) -> bool - - - Remove operand representation information. (set operand representation - to be 'undefined') - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: success - - -ida_bytes.code_flag(): - - code_flag() -> flags_t - - - 'FF_CODE' - - -ida_bytes.create_16bit_data(): - - create_16bit_data(ea, length) -> bool - - - Convert to 16-bit quantity (take byte size into account) - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - - -ida_bytes.create_32bit_data(): - - create_32bit_data(ea, length) -> bool - - - Convert to 32-bit quantity (take byte size into account) - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - - -ida_bytes.create_align(): - - create_align(ea, length, alignment) -> bool - - - Alignment: 0 or 2..32. If it is 0, is will be calculated. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param alignment (C++: int) - - -ida_bytes.create_byte(): - - create_byte(ea, length, force=False) -> bool - - - Convert to byte. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_custdata(): - - create_custdata(ea, length, dtid, fid, force=False) -> bool - - - Convert to custom data type. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param dtid (C++: int) - @param fid (C++: int) - @param force (C++: bool) - - -ida_bytes.create_data(): - - create_data(ea, dataflag, size, tid) -> bool - - - Convert to data (byte, word, dword, etc). This function may be used to - create arrays. - - @param ea: linear address (C++: ea_t) - @param dataflag: type of data. Value of function byte_flag() , - word_flag() , etc. (C++: flags_t) - @param size: size of array in bytes. should be divisible by the size - of one item of the specified type. for variable sized - items it can be specified as 0, and the kernel will try - to calculate the size. (C++: asize_t) - @param tid: type id. If the specified type is a structure, then tid is - structure id. Otherwise should be BADNODE . (C++: tid_t) - @return: success - - -ida_bytes.create_double(): - - create_double(ea, length, force=False) -> bool - - - Convert to double. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_dword(): - - create_dword(ea, length, force=False) -> bool - - - Convert to dword. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_float(): - - create_float(ea, length, force=False) -> bool - - - Convert to float. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_oword(): - - create_oword(ea, length, force=False) -> bool - - - Convert to octaword/xmm word. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_packed_real(): - - create_packed_real(ea, length, force=False) -> bool - - - Convert to packed decimal real. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_qword(): - - create_qword(ea, length, force=False) -> bool - - - Convert to quadword. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_strlit(): - - create_strlit(start, len, strtype) -> bool - - - Convert to string literal and give a meaningful name. 'start' may be - higher than 'end', the kernel will swap them in this case - - @param start: starting address (C++: ea_t) - @param len: length of the string in bytes. if 0, then - get_max_strlit_length() will be used to determine the - length (C++: size_t) - @param strtype: string type. one of String type codes (C++: int32) - @return: success - - -ida_bytes.create_struct(): - - create_struct(ea, length, tid, force=False) -> bool - - - Convert to struct. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param tid (C++: tid_t) - @param force (C++: bool) - - -ida_bytes.create_tbyte(): - - create_tbyte(ea, length, force=False) -> bool - - - Convert to tbyte. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_word(): - - create_word(ea, length, force=False) -> bool - - - Convert to word. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_yword(): - - create_yword(ea, length, force=False) -> bool - - - Convert to ymm word. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_zword(): - - create_zword(ea, length, force=False) -> bool - - - Convert to zmm word. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.cust_flag(): - - cust_flag() -> flags_t - - - Get a flags_t representing custom type data. - - -ida_bytes.custfmt_flag(): - - custfmt_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -class ida_bytes.data_format_t(): - - Proxy of C++ data_format_t class - - -ida_bytes.data_format_t.hotkey: - data_format_t_hotkey_get(self) -> char const * - -ida_bytes.data_format_t.id: - - __get_id(self) -> int - - -ida_bytes.data_format_t.is_present_in_menus(): - - is_present_in_menus(self) -> bool - - -ida_bytes.data_format_t.menu_name: - data_format_t_menu_name_get(self) -> char const * - -ida_bytes.data_format_t.name: - data_format_t_name_get(self) -> char const * - -ida_bytes.data_format_t.props: - data_format_t_props_get(self) -> int - -ida_bytes.data_format_t.text_width: - data_format_t_text_width_get(self) -> int32 - -ida_bytes.data_format_t.value_size: - data_format_t_value_size_get(self) -> asize_t - -class ida_bytes.data_type_t(): - - Proxy of C++ data_type_t class - - -ida_bytes.data_type_t.asm_keyword: - data_type_t_asm_keyword_get(self) -> char const * - -ida_bytes.data_type_t.hotkey: - data_type_t_hotkey_get(self) -> char const * - -ida_bytes.data_type_t.id: - - __get_id(self) -> int - - -ida_bytes.data_type_t.is_present_in_menus(): - - is_present_in_menus(self) -> bool - - -ida_bytes.data_type_t.menu_name: - data_type_t_menu_name_get(self) -> char const * - -ida_bytes.data_type_t.name: - data_type_t_name_get(self) -> char const * - -ida_bytes.data_type_t.props: - data_type_t_props_get(self) -> int - -ida_bytes.data_type_t.value_size: - data_type_t_value_size_get(self) -> asize_t - -ida_bytes.dec_flag(): - - dec_flag() -> flags_t - - - Get number flag of the base, regardless of current processor - better - to use 'num_flag()' - - -ida_bytes.del_hidden_range(): - - del_hidden_range(ea) -> bool - - - Delete hidden range. - - @param ea: any address in the hidden range (C++: ea_t) - @return: success - - -ida_bytes.del_items(): - - del_items(ea, flags=0, nbytes=1, may_destroy=None) -> bool - - - Convert item (instruction/data) to unexplored bytes. The whole item - (including the head and tail bytes) will be destroyed. It is allowed - to pass any address in the item to this function - - @param ea: any address within the first item to delete (C++: ea_t) - @param flags: combination of Unexplored byte conversion flags (C++: - int) - @param nbytes: number of bytes in the range to be undefined (C++: - asize_t) - @param may_destroy: optional routine invoked before deleting a head - item. If callback returns false then item has not - to be deleted and operation fails (C++: - may_destroy_cb_t *) - @return: true on sucessful operation, otherwise false - - -ida_bytes.del_mapping(): - - del_mapping(ea) - - - Delete memory mapping range. - - @param ea: any address in the mapped range (C++: ea_t) - - -ida_bytes.del_value(): - - del_value(ea) - - - Delete byte value from flags. The corresponding byte becomes - uninitialized. - - @param ea (C++: ea_t) - - -ida_bytes.detach_custom_data_format(): - - detach_custom_data_format(dtid, dfid) -> bool - - - Detach the data format from the data type. Unregistering a custom data - type detaches all attached data formats, no need to detach them - explicitly. You still need unregister them. Unregistering a custom - data format detaches it from all attached data types. - - @param dtid: data type id to detach data format from (C++: int) - @param dfid: data format id to detach (C++: int) - - -ida_bytes.disable_flags(): - - disable_flags(start_ea, end_ea) -> error_t - - - Deallocate flags for address range. Exit with an error message if not - enough disk space (this may occur too). - - @param start_ea: should be lower than end_ea. (C++: ea_t) - @param end_ea: does not belong to the range. (C++: ea_t) - @return: 0 if ok, otherwise return error code - - -ida_bytes.double_flag(): - - double_flag() -> flags_t - - - Get a flags_t representing a double. - - -ida_bytes.dword_flag(): - - dword_flag() -> flags_t - - - Get a flags_t representing a double word. - - -ida_bytes.enable_flags(): - - enable_flags(start_ea, end_ea, stt) -> error_t - - - Allocate flags for address range. This function does not change the - storage type of existing ranges. Exit with an error message if not - enough disk space. - - @param start_ea: should be lower than end_ea. (C++: ea_t) - @param end_ea: does not belong to the range. (C++: ea_t) - @param stt: storage_type_t (C++: storage_type_t) - @return: 0 if ok, otherwise an error code - - -ida_bytes.enum_flag(): - - enum_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.equal_bytes(): - - equal_bytes(ea, image, mask, len, sense_case) -> bool - - - Compare 'len' bytes of the program starting from 'ea' with 'image'. - - @param ea: linear address (C++: ea_t) - @param image: bytes to compare with (C++: const uchar *) - @param mask: array of 1/0 bytes, it's length is 'len'. 1 means to - perform the comparison of the corresponding byte. 0 means - not to perform. if mask == NULL, then all bytes of - 'image' will be compared. if mask == SKIP_FF_MASK then - 0xFF bytes will be skipped (C++: const uchar *) - @param len: length of block to compare in bytes. (C++: size_t) - @param sense_case: case-sensitive comparison? (C++: bool) - - -ida_bytes.f_has_cmt(): - - f_has_cmt(f, arg2) -> bool - - -ida_bytes.f_has_dummy_name(): - - f_has_dummy_name(f, arg2) -> bool - - - Does the current byte have dummy (auto-generated, with special prefix) - name? - - - @param f (C++: flags_t) - - -ida_bytes.f_has_extra_cmts(): - - f_has_extra_cmts(f, arg2) -> bool - - -ida_bytes.f_has_name(): - - f_has_name(f, arg2) -> bool - - - Does the current byte have non-trivial (non-dummy) name? - - - @param f (C++: flags_t) - - -ida_bytes.f_has_user_name(): - - f_has_user_name(F, arg2) -> bool - - - Does the current byte have user-specified name? - - - @param F (C++: flags_t) - - -ida_bytes.f_has_xref(): - - f_has_xref(f, arg2) -> bool - - - Does the current byte have cross-references to it? - - - @param f (C++: flags_t) - - -ida_bytes.f_is_align(): - - f_is_align(F, arg2) -> bool - - - See 'is_align()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_byte(): - - f_is_byte(F, arg2) -> bool - - - See 'is_byte()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_code(): - - f_is_code(F, arg2) -> bool - - - Does flag denote start of an instruction? - - - @param F (C++: flags_t) - - -ida_bytes.f_is_custom(): - - f_is_custom(F, arg2) -> bool - - - See 'is_custom()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_data(): - - f_is_data(F, arg2) -> bool - - - Does flag denote start of data? - - - @param F (C++: flags_t) - - -ida_bytes.f_is_double(): - - f_is_double(F, arg2) -> bool - - - See 'is_double()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_dword(): - - f_is_dword(F, arg2) -> bool - - - See 'is_dword()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_float(): - - f_is_float(F, arg2) -> bool - - - See 'is_float()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_head(): - - f_is_head(F, arg2) -> bool - - - Does flag denote start of instruction OR data? - - - @param F (C++: flags_t) - - -ida_bytes.f_is_not_tail(): - - f_is_not_tail(F, arg2) -> bool - - - Does flag denote tail byte? - - - @param F (C++: flags_t) - - -ida_bytes.f_is_oword(): - - f_is_oword(F, arg2) -> bool - - - See 'is_oword()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_pack_real(): - - f_is_pack_real(F, arg2) -> bool - - - See 'is_pack_real()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_qword(): - - f_is_qword(F, arg2) -> bool - - - See 'is_qword()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_strlit(): - - f_is_strlit(F, arg2) -> bool - - - See 'is_strlit()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_struct(): - - f_is_struct(F, arg2) -> bool - - - See 'is_struct()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_tail(): - - f_is_tail(F, arg2) -> bool - - - Does flag denote tail byte? - - - @param F (C++: flags_t) - - -ida_bytes.f_is_tbyte(): - - f_is_tbyte(F, arg2) -> bool - - - See 'is_tbyte()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_word(): - - f_is_word(F, arg2) -> bool - - - See 'is_word()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_yword(): - - f_is_yword(F, arg2) -> bool - - - See 'is_yword()' - - - @param F (C++: flags_t) - - -ida_bytes.find_byte(): - - find_byte(sEA, size, value, bin_search_flags) -> ea_t - - - Find forward a byte with the specified value (only 8-bit value from - the database). example: ea=4 size=3 will inspect addresses 4, 5, and 6 - - @param sEA: linear address (C++: ea_t) - @param size: number of bytes to inspect (C++: asize_t) - @param value: value to find (C++: uchar) - @param bin_search_flags: combination of Search flags (C++: int) - @return: address of byte or BADADDR - - -ida_bytes.find_byter(): - - find_byter(sEA, size, value, bin_search_flags) -> ea_t - - - Find reverse a byte with the specified value (only 8-bit value from - the database). example: ea=4 size=3 will inspect addresses 6, 5, and 4 - - @param sEA: the lower address of the search range (C++: ea_t) - @param size: number of bytes to inspect (C++: asize_t) - @param value: value to find (C++: uchar) - @param bin_search_flags: combination of Search flags (C++: int) - @return: address of byte or BADADDR - - -ida_bytes.find_custom_data_format(): - - find_custom_data_format(name) -> int - - - Get id of a custom data format. - - @param name: name of the custom data format (C++: const char *) - @return: id or -1 - - -ida_bytes.find_custom_data_type(): - - find_custom_data_type(name) -> int - - - Get id of a custom data type. - - @param name: name of the custom data type (C++: const char *) - @return: id or -1 - - -ida_bytes.float_flag(): - - float_flag() -> flags_t - - - Get a flags_t representing a float. - - -ida_bytes.flt_flag(): - - flt_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.free_chunk(): - - free_chunk(bottom, size, step) -> ea_t - - - Search for a hole in the addressing space of the program. - - @param bottom: address to start searching (C++: ea_t) - @param size: size of desired block (C++: asize_t) - @param step: bit mask for the start of hole (0xF would align hole to a - paragraph). if 'step' is negative, the bottom address - with be aligned. otherwise the kernel will try to use it - as is and align it only when the hole is too small. (C++: - int32) - @return: start of the hole or BADADDR - - -ida_bytes.get_16bit(): - - get_16bit(ea) -> uint32 - - - Get 16bits of the program at 'ea'. - - @param ea (C++: ea_t) - @return: 1 byte (getFullByte()) if the current processor has 16-bit - byte, otherwise return get_word() - - -ida_bytes.get_32bit(): - - get_32bit(ea) -> uint32 - - - Get not more than 32bits of the program at 'ea'. - - @param ea (C++: ea_t) - @return: 32 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) - return get_dword(ea); if ( nbits <= 16) return - get_wide_word(ea); return get_wide_byte(ea); - - -ida_bytes.get_64bit(): - - get_64bit(ea) -> uint64 - - - Get not more than 64bits of the program at 'ea'. - - @param ea (C++: ea_t) - @return: 64 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) - return get_qword(ea); if ( nbits <= 16) return - get_wide_dword(ea); return get_wide_byte(ea); - - -ida_bytes.get_8bit(): - - get_8bit(ea, v, nbit) -> PyObject * - - -ida_bytes.get_byte(): - - get_byte(ea) -> uchar - - - Get one byte (8-bit) of the program at 'ea'. This function works only - for 8bit byte processors. - - @param ea (C++: ea_t) - - -ida_bytes.get_bytes(): - - get_bytes(ea, size, gmb_flags=0x01) -> PyObject * - - - Get the specified number of bytes of the program. - @param ea: program address - @param size: number of bytes to return - @return: the bytes (as a str), or None in case of failure - - -ida_bytes.get_bytes_and_mask(): - - get_bytes_and_mask(ea, size, gmb_flags=0x01) -> PyObject * - - - Get the specified number of bytes of the program, and a bitmask - specifying what bytes are defined and what bytes are not. - @param ea: program address - @param size: number of bytes to return - @return: a tuple (bytes, mask), or None in case of failure. - Both 'bytes' and 'mask' are 'str' instances. - - -ida_bytes.get_cmt(): - - get_cmt(ea, rptble) -> ssize_t - - - Get an indented comment. - - @param ea: linear address. may point to tail byte, the function will - find start of the item (C++: ea_t) - @param rptble: get repeatable comment? (C++: bool) - @return: size of comment or -1 - - -ida_bytes.get_custom_data_format(): - - get_custom_data_format(dfid) -> data_format_t - - - Get definition of a registered custom data format. - - @param dfid: data format id (C++: int) - @return: data format definition or NULL - - -ida_bytes.get_custom_data_formats(): - - get_custom_data_formats(out, dtid) -> int - - - Get list of attached custom data formats for the specified data type. - - @param out: buffer for the output. may be NULL (C++: intvec_t *) - @param dtid: data type id (C++: int) - @return: number of returned custom data formats. if error, returns -1 - - -ida_bytes.get_custom_data_type(): - - get_custom_data_type(dtid) -> data_type_t - - - Get definition of a registered custom data type. - - @param dtid: data type id (C++: int) - @return: data type definition or NULL - - -ida_bytes.get_custom_data_types(): - - get_custom_data_types(out, min_size=0, max_size=BADADDR) -> int - - - Get list of registered custom data type ids. - - @param out: buffer for the output. may be NULL (C++: intvec_t *) - @param min_size: minimum value size (C++: asize_t) - @param max_size: maximum value size (C++: asize_t) - @return: number of custom data types with the specified size limits - - -ida_bytes.get_data_elsize(): - - get_data_elsize(ea, F, ti=None) -> asize_t - - - Get size of data type specified in flags 'F'. - - @param ea: linear address of the item (C++: ea_t) - @param F: flags (C++: flags_t) - @param ti: additional information about the data type. For example, if - the current item is a structure instance, then ti->tid is - structure id. Otherwise is ignored (may be NULL). If - specified as NULL, will be automatically retrieved from the - database (C++: const opinfo_t *) - @return: byte : 1 word : 2 etc... - - -ida_bytes.get_data_value(): - - get_data_value(v, ea, size) -> bool - - - Get the value at of the item at 'ea'. This function works with - entities up to sizeof(ea_t) (bytes, word, etc) - - @param v: pointer to the result. may be NULL (C++: uval_t *) - @param ea: linear address (C++: ea_t) - @param size: size of data to read. If 0, then the item type at 'ea' - will be used (C++: asize_t) - @return: success - - -ida_bytes.get_db_byte(): - - get_db_byte(ea) -> uchar - - - Get one byte (8-bit) of the program at 'ea' from the database. Works - even if the debugger is active. See also 'get_dbg_byte()' to read the - process memory directly. This function works only for 8bit byte - processors. - - @param ea (C++: ea_t) - - -ida_bytes.get_default_radix(): - - get_default_radix() -> int - - - Get default base of number for the current processor. - - @return: 2, 8, 10, 16 - - -ida_bytes.get_dword(): - - get_dword(ea) -> uint32 - - - Get one dword (32-bit) of the program at 'ea'. This function takes - into account order of bytes specified in \inf{is_be()} This function - works only for 8bit byte processors. - - @param ea (C++: ea_t) - - -ida_bytes.get_enum_id(): - - get_enum_id(ea, n) -> enum_t - - - Get enum id of 'enum' operand. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: id of enum or BADNODE - - -ida_bytes.get_first_hidden_range(): - - get_first_hidden_range() -> hidden_range_t - - - Get pointer to the first hidden range. - - @return: ptr to hidden range or NULL - - -ida_bytes.get_flags(): - - get_flags(ea) -> flags_t - - - get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote - debugging because the kernel needs to read the process memory. - - @param ea (C++: ea_t) - - -ida_bytes.get_flags_by_size(): - - get_flags_by_size(size) -> flags_t - - - Get flags from size (in bytes). Supported sizes: 1, 2, 4, 8, 16, 32. - For other sizes returns 0 - - @param size (C++: size_t) - - -ida_bytes.get_flags_ex(): - - get_flags_ex(ea, how) -> flags_t - - - Get flags for the specified address, extended form. - - - @param ea (C++: ea_t) - @param how (C++: int) - - -ida_bytes.get_forced_operand(): - - get_forced_operand(ea, n) -> ssize_t - - - Get forced operand. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, 2) (C++: int) - @return: size of forced operand or -1 - - -ida_bytes.get_full_data_elsize(): - - get_full_data_elsize(ea, F, ti=None) -> asize_t - - - Get full size of data type specified in flags 'F'. takes into account - processors with wide bytes e.g. returns 2 for a byte element with - 16-bit bytes - - @param ea (C++: ea_t) - @param F (C++: flags_t) - @param ti (C++: const opinfo_t *) - - -ida_bytes.get_full_flags(): - - get_full_flags(ea) -> flags_t - - - Get flags value for address 'ea'. - - @param ea (C++: ea_t) - @return: 0 if address is not present in the program - - -ida_bytes.get_hidden_range(): - - get_hidden_range(ea) -> hidden_range_t - - - Get pointer to hidden range structure, in: linear address. - - @param ea: any address in the hidden range (C++: ea_t) - - -ida_bytes.get_hidden_range_num(): - - get_hidden_range_num(ea) -> int - - - Get number of a hidden range. - - @param ea: any address in the hidden range (C++: ea_t) - @return: number of hidden range (0.. get_hidden_range_qty() -1) - - -ida_bytes.get_hidden_range_qty(): - - get_hidden_range_qty() -> int - - - Get number of hidden ranges. - - -ida_bytes.get_item_end(): - - get_item_end(ea) -> ea_t - - - Get the end address of the item at 'ea'. The returned address doesn't - belong to the current item. Unexplored bytes are counted as 1 byte - entities. - - @param ea (C++: ea_t) - - -ida_bytes.get_item_flag(): - - get_item_flag(_from, n, ea, appzero) -> flags_t - - - Get flag of the item at 'ea' even if it is a tail byte of some array - or structure. This function is used to get flags of structure members - or array elements. - - @param _from: linear address of the instruction which refers to 'ea' - (C++: ea_t) - @param n: number of operand which refers to 'ea' (C++: int) - @param ea: the referenced address (C++: ea_t) - @param appzero: append a struct field name if the field offset is - zero? meaningful only if the name refers to a - structure. (C++: bool) - @return: flags or 0 (if failed) - - -ida_bytes.get_item_head(): - - get_item_head(ea) -> ea_t - - - Get the start address of the item at 'ea'. If there is no current - item, then 'ea' will be returned (see definition at the end of - 'bytes.hpp' source) - - @param ea (C++: ea_t) - - -ida_bytes.get_item_size(): - - 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. - - @param ea (C++: ea_t) - - -ida_bytes.get_last_hidden_range(): - - get_last_hidden_range() -> hidden_range_t - - - Get pointer to the last hidden range. - - @return: ptr to hidden range or NULL - - -ida_bytes.get_manual_insn(): - - get_manual_insn(ea) -> ssize_t - - - Retrieve the user-specified string for the manual instruction. - - @param ea: linear address of the instruction or data item (C++: ea_t) - @return: size of manual instruction or -1 - - -ida_bytes.get_mapping(): - - get_mapping(n) -> bool - - - Get memory mapping range by its number. - - @param n: number of mapping range (0.. get_mappings_qty() -1) (C++: - size_t) - @return: false if the specified range doesn't exist, otherwise returns - from , to , size - - -ida_bytes.get_mappings_qty(): - - get_mappings_qty() -> size_t - - - Get number of mappings. - - -ida_bytes.get_max_strlit_length(): - - get_max_strlit_length(ea, strtype, options=0) -> size_t - - - Determine maximum length of string literal. - - @param ea: starting address (C++: ea_t) - @param strtype: string type. one of String type codes (C++: int32) - @param options: combination of string literal length options (C++: - int) - @return: length of the string in octets (octet==8bit) - - -ida_bytes.get_next_hidden_range(): - - get_next_hidden_range(ea) -> hidden_range_t - - - Get pointer to next hidden range. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to hidden range or NULL if next hidden range doesn't - exist - - -ida_bytes.get_octet(): - - get_octet(ea, v, nbit) -> PyObject * - - - Get 8 bits of the program at 'ea'. The main usage of this function is - to iterate range of bytes. Here is an example: - - uint64 v; - int nbit = 0; - for ( ... ) { - uchar byte = get_octet(&ea, &v, &nbit); - ... - } - - 'ea' is incremented each time when a new byte is read. In the above - example, it will be incremented in the first loop iteration. - - @param ea (C++: ea_t *) - @param v (C++: uint64 *) - @param nbit (C++: int *) - - -ida_bytes.get_opinfo(): - - get_opinfo(buf, ea, n, flags) -> opinfo_t - - - Get additional information about an operand representation. - - @param buf: buffer to receive the result. may not be NULL (C++: - opinfo_t *) - @param ea: linear address of item (C++: ea_t) - @param n: number of operand, 0 or 1 (C++: int) - @param flags: flags of the item (C++: flags_t) - @return: NULL if no additional representation information - - -ida_bytes.get_optype_flags0(): - - get_optype_flags0(F) -> flags_t - - - Get flags for first operand. - - - @param F (C++: flags_t) - - -ida_bytes.get_optype_flags1(): - - get_optype_flags1(F) -> flags_t - - - Get flags for second operand. - - - @param F (C++: flags_t) - - -ida_bytes.get_original_byte(): - - get_original_byte(ea) -> uint64 - - - Get original byte value (that was before patching). This function - works for wide byte processors too. - - @param ea (C++: ea_t) - - -ida_bytes.get_original_dword(): - - get_original_dword(ea) -> uint64 - - - Get original dword (that was before patching) This function works for - wide byte processors too. This function takes into account order of - bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - - -ida_bytes.get_original_qword(): - - get_original_qword(ea) -> uint64 - - - Get original qword value (that was before patching) This function - DOESN'T work for wide byte processors too. This function takes into - account order of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - - -ida_bytes.get_original_word(): - - get_original_word(ea) -> uint64 - - - Get original word value (that was before patching). This function - works for wide byte processors too. This function takes into account - order of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - - -ida_bytes.get_predef_insn_cmt(): - - get_predef_insn_cmt(ins) -> ssize_t - - - Get predefined comment. - - @param ins: current instruction information (C++: const insn_t &) - @return: size of comment or -1 - - -ida_bytes.get_prev_hidden_range(): - - get_prev_hidden_range(ea) -> hidden_range_t - - - Get pointer to previous hidden range. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to hidden range or NULL if previous hidden range doesn't - exist - - -ida_bytes.get_qword(): - - get_qword(ea) -> uint64 - - - Get one qword (64-bit) of the program at 'ea'. This function takes - into account order of bytes specified in \inf{is_be()} This function - works only for 8bit byte processors. - - @param ea (C++: ea_t) - - -ida_bytes.get_radix(): - - get_radix(F, n) -> int - - - Get radix of the operand, in: flags. If the operand is not a number, - returns 'get_default_radix()' - - @param F: flags (C++: flags_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: 2, 8, 10, 16 - - -ida_bytes.get_strlit_contents(): - - get_strlit_contents(ea, py_len, type, flags=0) -> PyObject * - - - Get bytes contents at location, possibly converted. - It works even if the string has not been created in the database yet. - - Note that this will always return a simple string of bytes - (i.e., a 'str' instance), and not a string of unicode characters. - - If you want auto-conversion to unicode strings (that is: real strings), - you should probably be using the idautils.Strings class. - - @param ea: linear address of the string - @param len: length of the string in bytes (including terminating 0) - @param type: type of the string. Represents both the character encoding, - and the 'type' of string at the given location. - @param flags: combination of STRCONV_..., to perform output conversion. - @return: a bytes-filled str object. - - -ida_bytes.get_stroff_path(): - - get_stroff_path(path, delta, ea, n) -> int - - - Get struct path of operand. - - @param path: buffer for structure path (strpath). see nalt.hpp for - more info. (C++: tid_t *) - @param delta: struct offset delta (C++: adiff_t *) - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: length of strpath - - -ida_bytes.get_wide_byte(): - - get_wide_byte(ea) -> uint64 - - - Get one wide byte of the program at 'ea'. Some processors may access - more than 8bit quantity at an address. These processors have 32-bit - byte organization from the IDA's point of view. - - @param ea (C++: ea_t) - - -ida_bytes.get_wide_dword(): - - get_wide_dword(ea) -> uint64 - - - Get two wide words (4 'bytes') of the program at 'ea'. Some processors - may access more than 8bit quantity at an address. These processors - have 32-bit byte organization from the IDA's point of view. This - function takes into account order of bytes specified in - \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 - - @param ea (C++: ea_t) - - -ida_bytes.get_wide_word(): - - get_wide_word(ea) -> uint64 - - - Get one wide word (2 'byte') of the program at 'ea'. Some processors - may access more than 8bit quantity at an address. These processors - have 32-bit byte organization from the IDA's point of view. This - function takes into account order of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - - -ida_bytes.get_word(): - - get_word(ea) -> ushort - - - Get one word (16-bit) of the program at 'ea'. This function takes into - account order of bytes specified in \inf{is_be()} This function works - only for 8bit byte processors. - - @param ea (C++: ea_t) - - -ida_bytes.get_zero_ranges(): - - get_zero_ranges(zranges, range) -> bool - - - Return set of ranges with zero initialized bytes. The returned set - includes only big zero initialized ranges (at least >1KB). Some zero - initialized byte ranges may be not included. Only zero bytes that use - the sparse storage method (STT_MM) are reported. - - @param zranges: pointer to the return value. cannot be NULL (C++: - rangeset_t *) - @param range: the range of addresses to verify. can be NULL - means - all ranges (C++: const range_t *) - @return: true if the result is a non-empty set - - -ida_bytes.getn_hidden_range(): - - getn_hidden_range(n) -> hidden_range_t - - - Get pointer to hidden range structure, in: number of hidden range. - - @param n: number of hidden range, is in range 0.. - get_hidden_range_qty() -1 (C++: int) - - -ida_bytes.has_any_name(): - - has_any_name(F) -> bool - - - Does the current byte have any name? - - - @param F (C++: flags_t) - - -ida_bytes.has_auto_name(): - - has_auto_name(F) -> bool - - - Does the current byte have auto-generated (no special prefix) name? - - - @param F (C++: flags_t) - - -ida_bytes.has_cmt(): - - has_cmt(F) -> bool - - - Does the current byte have an indented comment? - - - @param F (C++: flags_t) - - -ida_bytes.has_dummy_name(): - - has_dummy_name(F) -> bool - - - Does the current byte have dummy (auto-generated, with special prefix) - name? - - - @param F (C++: flags_t) - - -ida_bytes.has_extra_cmts(): - - has_extra_cmts(F) -> bool - - - Does the current byte have additional anterior or posterior lines? - - - @param F (C++: flags_t) - - -ida_bytes.has_immd(): - - has_immd(F) -> bool - - - Has immediate value? - - - @param F (C++: flags_t) - - -ida_bytes.has_name(): - - has_name(F) -> bool - - - Does the current byte have non-trivial (non-dummy) name? - - - @param F (C++: flags_t) - - -ida_bytes.has_user_name(): - - has_user_name(F) -> bool - - - Does the current byte have user-specified name? - - - @param F (C++: flags_t) - - -ida_bytes.has_value(): - - has_value(F) -> bool - - - Do flags contain byte value? - - - @param F (C++: flags_t) - - -ida_bytes.has_xref(): - - has_xref(F) -> bool - - - Does the current byte have cross-references to it? - - - @param F (C++: flags_t) - - -ida_bytes.hex_flag(): - - hex_flag() -> flags_t - - - Get number flag of the base, regardless of current processor - better - to use 'num_flag()' - - -class ida_bytes.hidden_range_t(): - - Proxy of C++ hidden_range_t class - - -ida_bytes.hidden_range_t._print(): - - _print(self) -> size_t - - -ida_bytes.hidden_range_t.clear(): - - clear(self) - - -ida_bytes.hidden_range_t.color: - hidden_range_t_color_get(self) -> bgcolor_t - -ida_bytes.hidden_range_t.compare(): - - compare(self, r) -> int - - -ida_bytes.hidden_range_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_bytes.hidden_range_t.description: - hidden_range_t_description_get(self) -> char * - -ida_bytes.hidden_range_t.empty(): - - empty(self) -> bool - - -ida_bytes.hidden_range_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_bytes.hidden_range_t.extend(): - - extend(self, ea) - - -ida_bytes.hidden_range_t.footer: - hidden_range_t_footer_get(self) -> char * - -ida_bytes.hidden_range_t.header: - hidden_range_t_header_get(self) -> char * - -ida_bytes.hidden_range_t.intersect(): - - intersect(self, r) - - -ida_bytes.hidden_range_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_bytes.hidden_range_t.size(): - - size(self) -> asize_t - - -ida_bytes.hidden_range_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_bytes.hidden_range_t.visible: - hidden_range_t_visible_get(self) -> bool - -ida_bytes.is_align(): - - is_align(F) -> bool - - - 'FF_ALIGN' - - - @param F (C++: flags_t) - - -ida_bytes.is_attached_custom_data_format(): - - is_attached_custom_data_format(dtid, dfid) -> bool - - -ida_bytes.is_bnot(): - - is_bnot(ea, F, n) -> bool - - - Should we negate the operand?. sh{a_bnot} should be defined in the - idp module in order to work with this function - - @param ea (C++: ea_t) - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_byte(): - - is_byte(F) -> bool - - - 'FF_BYTE' - - - @param F (C++: flags_t) - - -ida_bytes.is_char(): - - is_char(F, n) -> bool - - - is character constant? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_char0(): - - is_char0(F) -> bool - - - Is the first operand character constant? (example: push 'a') - - - @param F (C++: flags_t) - - -ida_bytes.is_char1(): - - is_char1(F) -> bool - - - Is the second operand character constant? (example: mov al, 'a') - - - @param F (C++: flags_t) - - -ida_bytes.is_code(): - - is_code(F) -> bool - - - Does flag denote start of an instruction? - - - @param F (C++: flags_t) - - -ida_bytes.is_custfmt(): - - is_custfmt(F, n) -> bool - - - is custom data format? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_custfmt0(): - - is_custfmt0(F) -> bool - - - Does the first operand use a custom data representation? - - - @param F (C++: flags_t) - - -ida_bytes.is_custfmt1(): - - is_custfmt1(F) -> bool - - - Does the second operand use a custom data representation? - - - @param F (C++: flags_t) - - -ida_bytes.is_custom(): - - is_custom(F) -> bool - - - 'FF_CUSTOM' - - - @param F (C++: flags_t) - - -ida_bytes.is_data(): - - is_data(F) -> bool - - - Does flag denote start of data? - - - @param F (C++: flags_t) - - -ida_bytes.is_defarg(): - - is_defarg(F, n) -> bool - - - is defined? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_defarg0(): - - is_defarg0(F) -> bool - - - Is the first operand defined? Initially operand has no defined - representation. - - - @param F (C++: flags_t) - - -ida_bytes.is_defarg1(): - - is_defarg1(F) -> bool - - - Is the second operand defined? Initially operand has no defined - representation. - - - @param F (C++: flags_t) - - -ida_bytes.is_double(): - - is_double(F) -> bool - - - 'FF_DOUBLE' - - - @param F (C++: flags_t) - - -ida_bytes.is_dword(): - - is_dword(F) -> bool - - - 'FF_DWORD' - - - @param F (C++: flags_t) - - -ida_bytes.is_enum(): - - is_enum(F, n) -> bool - - - is enum? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_enum0(): - - is_enum0(F) -> bool - - - Is the first operand a symbolic constant (enum member)? - - - @param F (C++: flags_t) - - -ida_bytes.is_enum1(): - - is_enum1(F) -> bool - - - Is the second operand a symbolic constant (enum member)? - - - @param F (C++: flags_t) - - -ida_bytes.is_float(): - - is_float(F) -> bool - - - 'FF_FLOAT' - - - @param F (C++: flags_t) - - -ida_bytes.is_float0(): - - is_float0(F) -> bool - - - Is the first operand a floating point number? - - - @param F (C++: flags_t) - - -ida_bytes.is_float1(): - - is_float1(F) -> bool - - - Is the second operand a floating point number? - - - @param F (C++: flags_t) - - -ida_bytes.is_flow(): - - is_flow(F) -> bool - - - Does the previous instruction exist and pass execution flow to the - current byte? - - - @param F (C++: flags_t) - - -ida_bytes.is_fltnum(): - - is_fltnum(F, n) -> bool - - - is floating point number? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_forced_operand(): - - is_forced_operand(ea, n) -> bool - - - Is operand manually defined?. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, 2) (C++: int) - - -ida_bytes.is_func(): - - is_func(F) -> bool - - - Is function start? - - - @param F (C++: flags_t) - - -ida_bytes.is_head(): - - is_head(F) -> bool - - - Does flag denote start of instruction OR data? - - - @param F (C++: flags_t) - - -ida_bytes.is_invsign(): - - is_invsign(ea, F, n) -> bool - - - Should sign of n-th operand inverted during output?. allowed values of - n: 0-first operand, 1-other operands - - @param ea (C++: ea_t) - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_loaded(): - - is_loaded(ea) -> bool - - - Does the specified address have a byte value (is initialized?) - - - @param ea (C++: ea_t) - - -ida_bytes.is_lzero(): - - is_lzero(ea, n) -> bool - - - Display leading zeroes in operands. The global switch for the leading - zeroes is in \inf{s_genflags} The leading zeroes doesn't work if the - octal numbers start with 0 Display leading zeroes? (takes into account - \inf{s_genflags}) - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.is_manual(): - - is_manual(F, n) -> bool - - - is forced operand? (use 'is_forced_operand()' ) - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_manual_insn(): - - is_manual_insn(ea) -> bool - - - Is the instruction overridden? - - @param ea: linear address of the instruction or data item (C++: ea_t) - - -ida_bytes.is_mapped(): - - is_mapped(ea) -> bool - - - Is the specified address 'ea' present in the program? - - - @param ea (C++: ea_t) - - -ida_bytes.is_not_tail(): - - is_not_tail(F) -> bool - - - Does flag denote tail byte? - - - @param F (C++: flags_t) - - -ida_bytes.is_numop(): - - is_numop(F, n) -> bool - - - is number (bin, oct, dec, hex)? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_numop0(): - - is_numop0(F) -> bool - - - Is the first operand a number (i.e. binary, octal, decimal or hex?) - - - @param F (C++: flags_t) - - -ida_bytes.is_numop1(): - - is_numop1(F) -> bool - - - Is the second operand a number (i.e. binary, octal, decimal or hex?) - - - @param F (C++: flags_t) - - -ida_bytes.is_off(): - - is_off(F, n) -> bool - - - is offset? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_off0(): - - is_off0(F) -> bool - - - Is the first operand offset? (example: push offset xxx) - - - @param F (C++: flags_t) - - -ida_bytes.is_off1(): - - is_off1(F) -> bool - - - Is the second operand offset? (example: mov ax, offset xxx) - - - @param F (C++: flags_t) - - -ida_bytes.is_oword(): - - is_oword(F) -> bool - - - 'FF_OWORD' - - - @param F (C++: flags_t) - - -ida_bytes.is_pack_real(): - - is_pack_real(F) -> bool - - - 'FF_PACKREAL' - - - @param F (C++: flags_t) - - -ida_bytes.is_qword(): - - is_qword(F) -> bool - - - 'FF_QWORD' - - - @param F (C++: flags_t) - - -ida_bytes.is_same_data_type(): - - is_same_data_type(F1, F2) -> bool - - - Do the given flags specify the same data type? - - - @param F1 (C++: flags_t) - @param F2 (C++: flags_t) - - -ida_bytes.is_seg(): - - is_seg(F, n) -> bool - - - is segment? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_seg0(): - - is_seg0(F) -> bool - - - Is the first operand segment selector? (example: push seg seg001) - - - @param F (C++: flags_t) - - -ida_bytes.is_seg1(): - - is_seg1(F) -> bool - - - Is the second operand segment selector? (example: mov dx, seg dseg) - - - @param F (C++: flags_t) - - -ida_bytes.is_stkvar(): - - is_stkvar(F, n) -> bool - - - is stack variable? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_stkvar0(): - - is_stkvar0(F) -> bool - - - Is the first operand a stack variable? - - - @param F (C++: flags_t) - - -ida_bytes.is_stkvar1(): - - is_stkvar1(F) -> bool - - - Is the second operand a stack variable? - - - @param F (C++: flags_t) - - -ida_bytes.is_strlit(): - - is_strlit(F) -> bool - - - 'FF_STRLIT' - - - @param F (C++: flags_t) - - -ida_bytes.is_stroff(): - - is_stroff(F, n) -> bool - - - is struct offset? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_stroff0(): - - is_stroff0(F) -> bool - - - Is the first operand an offset within a struct? - - - @param F (C++: flags_t) - - -ida_bytes.is_stroff1(): - - is_stroff1(F) -> bool - - - Is the second operand an offset within a struct? - - - @param F (C++: flags_t) - - -ida_bytes.is_struct(): - - is_struct(F) -> bool - - - 'FF_STRUCT' - - - @param F (C++: flags_t) - - -ida_bytes.is_suspop(): - - is_suspop(ea, F, n) -> bool - - - is suspicious operand? - - - @param ea (C++: ea_t) - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_tail(): - - is_tail(F) -> bool - - - Does flag denote tail byte? - - - @param F (C++: flags_t) - - -ida_bytes.is_tbyte(): - - is_tbyte(F) -> bool - - - 'FF_TBYTE' - - - @param F (C++: flags_t) - - -ida_bytes.is_unknown(): - - is_unknown(F) -> bool - - - Does flag denote unexplored byte? - - - @param F (C++: flags_t) - - -ida_bytes.is_varsize_item(): - - is_varsize_item(ea, F, ti=None, itemsize=None) -> int - - - Is the item at 'ea' variable size?. - - @param ea: linear address of the item (C++: ea_t) - @param F: flags (C++: flags_t) - @param ti: additional information about the data type. For example, if - the current item is a structure instance, then ti->tid is - structure id. Otherwise is ignored (may be NULL). If - specified as NULL, will be automatically retrieved from the - database (C++: const opinfo_t *) - @param itemsize: if not NULL and the item is varsize, itemsize will - contain the calculated item size (for struct types, - the minimal size is returned) (C++: asize_t *) - - -ida_bytes.is_word(): - - is_word(F) -> bool - - - 'FF_WORD' - - - @param F (C++: flags_t) - - -ida_bytes.is_yword(): - - is_yword(F) -> bool - - - 'FF_YWORD' - - - @param F (C++: flags_t) - - -ida_bytes.is_zword(): - - is_zword(F) -> bool - - - 'FF_ZWORD' - - - @param F (C++: flags_t) - - -ida_bytes.leading_zero_important(): - - leading_zero_important(ea, n) -> bool - - - Check if leading zeroes are important. - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.nbits(): - - nbits(ea) -> int - - - Get number of bits in a byte at the given address. - - @param ea (C++: ea_t) - @return: \ph{dnbits()} if the address doesn't belong to a segment, - otherwise the result depends on the segment type - - -ida_bytes.next_addr(): - - next_addr(ea) -> ea_t - - - Get next address in the program (i.e. next address which has flags). - - @param ea (C++: ea_t) - @return: BADADDR if no such address exist. - - -ida_bytes.next_chunk(): - - next_chunk(ea) -> ea_t - - - Get the first address of next contiguous chunk in the program. - - @param ea (C++: ea_t) - @return: BADADDR if next chunk doesn't exist. - - -ida_bytes.next_head(): - - next_head(ea, maxea) -> ea_t - - - Get start of next defined item. - - @param ea: begin search at this address (C++: ea_t) - @param maxea: not included in the search range (C++: ea_t) - @return: BADADDR if none exists. - - -ida_bytes.next_inited(): - - next_inited(ea, maxea) -> ea_t - - - Find the next initialized address. - - - @param ea (C++: ea_t) - @param maxea (C++: ea_t) - - -ida_bytes.next_not_tail(): - - next_not_tail(ea) -> ea_t - - - Get address of next non-tail byte. - - @param ea (C++: ea_t) - @return: BADADDR if none exists. - - -ida_bytes.next_that(): - - next_that(ea, maxea, callable) -> ea_t - - - Find next address with a flag satisfying the function 'testf'. - Start searching from address 'ea'+1 and inspect bytes up to 'maxea'. - maxea is not included in the search range. - - @param callable: a Python callable with the following prototype: - callable(flags). Return True to stop enumeration. - @return: the found address or BADADDR. - - -ida_bytes.next_unknown(): - - next_unknown(ea, maxea) -> ea_t - - - Similar to 'next_that()' , but will find the next address that is - unexplored. - - - @param ea (C++: ea_t) - @param maxea (C++: ea_t) - - -ida_bytes.num_flag(): - - num_flag() -> flags_t - - - Get number of default base (bin, oct, dec, hex) - - -ida_bytes.oct_flag(): - - oct_flag() -> flags_t - - - Get number flag of the base, regardless of current processor - better - to use 'num_flag()' - - -ida_bytes.off_flag(): - - off_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.op_adds_xrefs(): - - op_adds_xrefs(F, n) -> bool - - - Should processor module create xrefs from the operand?. Currently - 'offset' and 'structure offset' operands create xrefs - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.op_bin(): - - op_bin(ea, n) -> bool - - - set op type to 'bin_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_chr(): - - op_chr(ea, n) -> bool - - - set op type to 'char_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_custfmt(): - - op_custfmt(ea, n, fid) -> bool - - - Set custom data format for operand (fid-custom data format id) - - - @param ea (C++: ea_t) - @param n (C++: int) - @param fid (C++: int) - - -ida_bytes.op_dec(): - - op_dec(ea, n) -> bool - - - set op type to 'dec_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_enum(): - - op_enum(ea, n, id, serial) -> bool - - - Set operand representation to be 'enum_t'. If applied to unexplored - bytes, converts them to 16/32bit word data - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @param id: id of enum (C++: enum_t) - @param serial: the serial number of the constant in the enumeration, - usually 0. the serial numbers are used if the - enumeration contains several constants with the same - value (C++: uchar) - @return: success - - -ida_bytes.op_flt(): - - op_flt(ea, n) -> bool - - - set op type to 'flt_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_hex(): - - op_hex(ea, n) -> bool - - - set op type to 'hex_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_num(): - - op_num(ea, n) -> bool - - - set op type to 'num_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_oct(): - - op_oct(ea, n) -> bool - - - set op type to 'oct_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_seg(): - - op_seg(ea, n) -> bool - - - Set operand representation to be 'segment'. If applied to unexplored - bytes, converts them to 16/32bit word data - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: success - - -ida_bytes.op_stkvar(): - - op_stkvar(ea, n) -> bool - - - Set operand representation to be 'stack variable'. Should be applied - to an instruction within a function. Should be applied after creating - a stack var using 'insn_t::create_stkvar()' . - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: success - - -ida_bytes.op_stroff(): - - op_stroff(insn, n, path, path_len, delta) -> bool - - - Set operand representation to be 'struct offset'. If applied to - unexplored bytes, converts them to 16/32bit word data - - @param insn: the instruction (C++: const insn_t &) - @param n: number of operand (0, 1, -1) (C++: int) - @param path: structure path (strpath). see nalt.hpp for more info. - (C++: const tid_t *) - @param path_len: length of the structure path (C++: int) - @param delta: struct offset delta. usually 0. denotes the difference - between the structure base and the pointer into the - structure. (C++: adiff_t) - @return: success - - Example: - Python> - Python> ins = ida_ua.insn_t() - Python> if ida_ua.decode_insn(ins, some_address): - Python> path_len = 1 - Python> path = ida_pro.tid_array(path_len) - Python> path[0] = ida_struct.get_struc_id("my_stucture_t") - Python> ida_bytes.op_stroff(ins, 0, path.cast(), path_len, 0) - Python> - - -ida_bytes.oword_flag(): - - oword_flag() -> flags_t - - - Get a flags_t representing a octaword. - - -ida_bytes.packreal_flag(): - - packreal_flag() -> flags_t - - - Get a flags_t representing a packed decimal real. - - -ida_bytes.patch_byte(): - - patch_byte(ea, x) -> bool - - - Patch a byte of the program. The original value of the byte is saved - and can be obtained by 'get_original_byte()' . This function works for - wide byte processors too. - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -ida_bytes.patch_bytes(): - - patch_bytes(ea, buf) - - - Patch the specified number of bytes of the program. Original values of - bytes are saved and are available with get_original...() functions. - See also 'put_bytes()' . - - @param ea: linear address (C++: ea_t) - @param buf: buffer with new values of bytes (C++: const void *) - - -ida_bytes.patch_dword(): - - patch_dword(ea, x) -> bool - - - Patch a dword of the program. The original value of the dword is saved - and can be obtained by 'get_original_dword()' . This function DOESN'T - work for wide byte processors. This function takes into account order - of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -ida_bytes.patch_qword(): - - patch_qword(ea, x) -> bool - - - Patch a qword of the program. The original value of the qword is saved - and can be obtained by 'get_original_qword()' . This function DOESN'T - work for wide byte processors. This function takes into account order - of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -ida_bytes.patch_word(): - - patch_word(ea, x) -> bool - - - Patch a word of the program. The original value of the word is saved - and can be obtained by 'get_original_word()' . This function works for - wide byte processors too. This function takes into account order of - bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -ida_bytes.prev_addr(): - - prev_addr(ea) -> ea_t - - - Get previous address in the program. - - @param ea (C++: ea_t) - @return: BADADDR if no such address exist. - - -ida_bytes.prev_chunk(): - - prev_chunk(ea) -> ea_t - - - Get the last address of previous contiguous chunk in the program. - - @param ea (C++: ea_t) - @return: BADADDR if previous chunk doesn't exist. - - -ida_bytes.prev_head(): - - prev_head(ea, minea) -> ea_t - - - Get start of previous defined item. - - @param ea: begin search at this address (C++: ea_t) - @param minea: included in the search range (C++: ea_t) - @return: BADADDR if none exists. - - -ida_bytes.prev_inited(): - - prev_inited(ea, minea) -> ea_t - - - Find the previous initialized address. - - - @param ea (C++: ea_t) - @param minea (C++: ea_t) - - -ida_bytes.prev_not_tail(): - - prev_not_tail(ea) -> ea_t - - - Get address of previous non-tail byte. - - @param ea (C++: ea_t) - @return: BADADDR if none exists. - - -ida_bytes.prev_that(): - - prev_that(ea, minea, callable) -> ea_t - - - Find previous address with a flag satisfying the function 'testf'.do - not pass 'is_unknown()' to this function to find unexplored bytes It - will fail under the debugger. To find unexplored bytes, use - 'prev_unknown()' . - - @param ea: start searching from this address - 1. (C++: ea_t) - @param minea: included in the search range. (C++: ea_t) - @return: the found address or BADADDR . - - -ida_bytes.prev_unknown(): - - prev_unknown(ea, minea) -> ea_t - - - Similar to 'prev_that()' , but will find the previous address that is - unexplored. - - - @param ea (C++: ea_t) - @param minea (C++: ea_t) - - -ida_bytes.print_strlit_type(): - - print_strlit_type(strtype, flags=0) -> PyObject * - - - Get string type information: the string type name (possibly decorated - with hotkey markers), and the tooltip. - - @param strtype: the string type (C++: int32) - @param flags: or'ed PSTF_* constants (C++: int) - @return: length of generated text - - -ida_bytes.put_byte(): - - put_byte(ea, x) -> bool - - - Set value of one byte of the program. This function modifies the - database. If the debugger is active then the debugged process memory - is patched too.The original value of the byte is completely lost and - can't be recovered by the 'get_original_byte()' function. See also - 'put_dbg_byte()' to write to the process memory directly when the - debugger is active. This function can handle wide byte processors. - - @param ea: linear address (C++: ea_t) - @param x: byte value (C++: uint64) - @return: true if the database has been modified - - -ida_bytes.put_bytes(): - - put_bytes(ea, buf) - - - Modify the specified number of bytes of the program. This function - does not save the original values of bytes. See also 'patch_bytes()' . - - @param ea: linear address (C++: ea_t) - @param buf: buffer with new values of bytes (C++: const void *) - - -ida_bytes.put_dword(): - - put_dword(ea, x) - - - Set value of one dword of the program. This function takes into - account order of bytes specified in \inf{is_be()} This function works - for wide byte processors too.the original value of the dword is - completely lost and can't be recovered by the 'get_original_dword()' - function. - - @param ea: linear address (C++: ea_t) - @param x: dword value (C++: uint64) - - -ida_bytes.put_qword(): - - put_qword(ea, x) - - - Set value of one qword (8 bytes) of the program. This function takes - into account order of bytes specified in \inf{is_be()} This function - DOESN'T works for wide byte processors. - - @param ea: linear address (C++: ea_t) - @param x: qword value (C++: uint64) - - -ida_bytes.put_word(): - - put_word(ea, x) - - - Set value of one word of the program. This function takes into account - order of bytes specified in \inf{is_be()} This function works for wide - byte processors too.The original value of the word is completely lost - and can't be recovered by the 'get_original_word()' function. ea - - linear address x - word value - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -ida_bytes.qword_flag(): - - qword_flag() -> flags_t - - - Get a flags_t representing a quad word. - - -ida_bytes.register_custom_data_format(): - - register_custom_data_format(py_df) -> int - - - Registers a custom data format with a given data type. - @param df: an instance of data_format_t - @return: - < 0 if failed to register - > 0 data format id - - -ida_bytes.register_custom_data_type(): - - register_custom_data_type(py_dt) -> int - - - Registers a custom data type. - @param dt: an instance of the data_type_t class - @return: - < 0 if failed to register - > 0 data type id - - -ida_bytes.register_data_types_and_formats(): - - Registers multiple data types and formats at once. - To register one type/format at a time use register_custom_data_type/register_custom_data_format - - It employs a special table of types and formats described below: - - The 'formats' is a list of tuples. If a tuple has one element then it is the format to be registered with dtid=0 - If the tuple has more than one element, then tuple[0] is the data type and tuple[1:] are the data formats. For example: - many_formats = [ - (pascal_data_type(), pascal_data_format()), - (simplevm_data_type(), simplevm_data_format()), - (makedword_data_format(),), - (simplevm_data_format(),) - ] - The first two tuples describe data types and their associated formats. - The last two tuples describe two data formats to be used with built-in data types. - The data format may be attached to several data types. The id of the - data format is stored in the first data_format_t object. For example: - assert many_formats[1][1] != -1 - assert many_formats[2][0] != -1 - assert many_formats[3][0] == -1 - - -ida_bytes.revert_byte(): - - revert_byte(ea) -> bool - - - Revert patched byte - - @param ea (C++: ea_t) - - -ida_bytes.seg_flag(): - - seg_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.set_cmt(): - - set_cmt(ea, comm, rptble) -> bool - - - Set an indented comment. - - @param ea: linear address (C++: ea_t) - @param comm: comment string NULL: do nothing (return 0) "" : - delete comment (C++: const char *) - @param rptble: is repeatable? (C++: bool) - @return: success - - -ida_bytes.set_forced_operand(): - - set_forced_operand(ea, n, op) -> bool - - - Set forced operand. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, 2) (C++: int) - @param op: text of operand NULL: do nothing (return 0) "" : delete - forced operand (C++: const char *) - @return: success - - -ida_bytes.set_immd(): - - set_immd(ea) -> bool - - - Set 'has immediate operand' flag. Returns true if the 'FF_IMMD' bit - was not set and now is set - - @param ea (C++: ea_t) - - -ida_bytes.set_lzero(): - - set_lzero(ea, n) -> bool - - - Set toggle lzero bit. - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.set_manual_insn(): - - set_manual_insn(ea, manual_insn) - - - Set manual instruction string. - - @param ea: linear address of the instruction or data item (C++: ea_t) - @param manual_insn: "" - delete manual string. NULL - do nothing (C++: - const char *) - - -ida_bytes.set_op_type(): - - set_op_type(ea, type, n) -> bool - - - (internal function) change representation of operand(s). - - @param ea: linear address (C++: ea_t) - @param type: new flag value (should be obtained from char_flag() , - num_flag() and similar functions) (C++: flags_t) - @param n: number of operand (0, 1, -1) (C++: int) - - -ida_bytes.set_opinfo(): - - set_opinfo(ea, n, flag, ti, suppress_events=False) -> bool - - - Set additional information about an operand representation. This - function is a low level one. Only the kernel should use it. - - @param ea: linear address of the item (C++: ea_t) - @param n: number of operand, 0 or 1 (C++: int) - @param flag: flags of the item (C++: flags_t) - @param ti: additional representation information (C++: const opinfo_t - *) - @param suppress_events: do not generate changing_op_type and - op_type_changed events (C++: bool) - @return: success - - -ida_bytes.stkvar_flag(): - - stkvar_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.strlit_flag(): - - strlit_flag() -> flags_t - - - Get a flags_t representing a string literal. - - -ida_bytes.stroff_flag(): - - stroff_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.stru_flag(): - - stru_flag() -> flags_t - - - Get a flags_t representing a struct. - - -ida_bytes.tbyte_flag(): - - tbyte_flag() -> flags_t - - - Get a flags_t representing a tbyte. - - -ida_bytes.toggle_bnot(): - - toggle_bnot(ea, n) -> bool - - - Toggle binary negation of operand. also see 'is_bnot()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.toggle_lzero(): - - toggle_lzero(ea, n) -> bool - - -ida_bytes.toggle_sign(): - - toggle_sign(ea, n) -> bool - - - Toggle sign of n-th operand. allowed values of n: 0-first operand, - 1-other operands - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.unregister_custom_data_format(): - - unregister_custom_data_format(dfid) -> bool - - - Unregisters a custom data format - @param dfid: data format id - @return: Boolean - - -ida_bytes.unregister_custom_data_type(): - - unregister_custom_data_type(dtid) -> bool - - - Unregisters a custom data type. - @param dtid: the data type id - @return: Boolean - - -ida_bytes.unregister_data_types_and_formats(): - - As opposed to register_data_types_and_formats(), this function - unregisters multiple data types and formats at once. - - -ida_bytes.update_hidden_range(): - - update_hidden_range(ha) -> bool - - - Update hidden range information in the database. You cannot use this - function to change the range boundaries - - @param ha: range to update (C++: const hidden_range_t *) - @return: success - - -ida_bytes.use_mapping(): - - use_mapping(ea) -> ea_t - - - Translate address according to current mappings. - - @param ea: address to translate (C++: ea_t) - @return: translated address - - -ida_bytes.visit_patched_bytes(): - - visit_patched_bytes(ea1, ea2, py_callable) -> int - - - Enumerates patched bytes in the given range and invokes a callable - @param ea1: start address - @param ea2: end address - @param callable: a Python callable with the following prototype: - callable(ea, fpos, org_val, patch_val). - If the callable returns non-zero then that value will be - returned to the caller and the enumeration will be - interrupted. - @return: Zero if the enumeration was successful or the return - value of the callback if enumeration was interrupted. - - -ida_bytes.word_flag(): - - word_flag() -> flags_t - - - Get a flags_t representing a word. - - -ida_bytes.yword_flag(): - - yword_flag() -> flags_t - - - Get a flags_t representing a ymm word. - - -ida_bytes.zword_flag(): - - zword_flag() -> flags_t - - - Get a flags_t representing a zmm word. - - - -=== ida_bytes EPYDOC INJECTIONS === -ida_bytes.ALOPT_IGNCLT -""" -if set, don't stop at codepoints that are not part of the current -'culture'; accept all those that are graphical (this is typically used -used by user-initiated actions creating string literals.) -""" - -ida_bytes.ALOPT_IGNHEADS -""" -don't stop if another data item is encountered. only the byte values -will be used to determine the string length. if not set, a defined -data item or instruction will truncate the string -""" - -ida_bytes.ALOPT_IGNPRINT -""" -if set, don't stop at non-printable codepoints, but only at the -terminating character (or not unicode-mapped character (e.g., 0x8f in -CP1252)) -""" - -ida_bytes.ALOPT_MAX4K -""" -accumulated length - -if string length is more than 4K, return the -""" - -ida_bytes.BIN_SEARCH_BACKWARD -""" -search backward for bytes -""" - -ida_bytes.BIN_SEARCH_CASE -""" -case sensitive -""" - -ida_bytes.BIN_SEARCH_FORWARD -""" -search forward for bytes -""" - -ida_bytes.BIN_SEARCH_INITED -""" -find_byte, find_byter: any initilized value -""" - -ida_bytes.BIN_SEARCH_NOBREAK -""" -don't check for Ctrl-Break -""" - -ida_bytes.BIN_SEARCH_NOCASE -""" -case insensitive -""" - -ida_bytes.BIN_SEARCH_NOSHOW -""" -don't show search progress or update screen -""" - -ida_bytes.DELIT_DELNAMES -""" -delete any names at the specified address range (except for the -starting address). this bit is valid if nbytes > 1 -""" - -ida_bytes.DELIT_EXPAND -""" -propagate undefined items; for example if removing an instruction -removes all references to the next instruction, then plan to convert -to unexplored the next instruction too. -""" - -ida_bytes.DELIT_KEEPFUNC -""" -Just delete xrefs, ops e.t.c. - -do not undefine the function start. -""" - -ida_bytes.DELIT_NOCMT -""" -reject to delete if a comment is in address range (except for the -starting address). this bit is valid if nbytes > 1 -""" - -ida_bytes.DELIT_NOTRUNC -""" -even if 'AF_TRFUNC' is set - -don't truncate the current function -""" - -ida_bytes.DELIT_NOUNAME -""" -reject to delete if a user name is in address range (except for the -starting address). this bit is valid if nbytes > 1 -""" - -ida_bytes.DELIT_SIMPLE -""" -simply undefine the specified item(s) -""" - -ida_bytes.DTP_NODUP -""" -do not use dup construct -""" - -ida_bytes.DT_TYPE -""" -Mask for DATA typing. -""" - -ida_bytes.FF_0CHAR -""" -Char ('x')? -""" - -ida_bytes.FF_0CUST -""" -Custom representation? -""" - -ida_bytes.FF_0ENUM -""" -Enumeration? -""" - -ida_bytes.FF_0FLT -""" -Floating point number? -""" - -ida_bytes.FF_0FOP -""" -Forced operand? -""" - -ida_bytes.FF_0NUMB -""" -Binary number? -""" - -ida_bytes.FF_0NUMD -""" -Decimal number? -""" - -ida_bytes.FF_0NUMH -""" -Hexadecimal number? -""" - -ida_bytes.FF_0NUMO -""" -Octal number? -""" - -ida_bytes.FF_0OFF -""" -Offset? -""" - -ida_bytes.FF_0SEG -""" -Segment? -""" - -ida_bytes.FF_0STK -""" -Stack variable? -""" - -ida_bytes.FF_0STRO -""" -Struct offset? -""" - -ida_bytes.FF_0VOID -""" -Void (unknown)? -""" - -ida_bytes.FF_1CHAR -""" -Char ('x')? -""" - -ida_bytes.FF_1CUST -""" -Custom representation? -""" - -ida_bytes.FF_1ENUM -""" -Enumeration? -""" - -ida_bytes.FF_1FLT -""" -Floating point number? -""" - -ida_bytes.FF_1FOP -""" -Forced operand? -""" - -ida_bytes.FF_1NUMB -""" -Binary number? -""" - -ida_bytes.FF_1NUMD -""" -Decimal number? -""" - -ida_bytes.FF_1NUMH -""" -Hexadecimal number? -""" - -ida_bytes.FF_1NUMO -""" -Octal number? -""" - -ida_bytes.FF_1OFF -""" -Offset? -""" - -ida_bytes.FF_1SEG -""" -Segment? -""" - -ida_bytes.FF_1STK -""" -Stack variable? -""" - -ida_bytes.FF_1STRO -""" -Struct offset? -""" - -ida_bytes.FF_1VOID -""" -Void (unknown)? -""" - -ida_bytes.FF_ALIGN -""" -alignment directive -""" - -ida_bytes.FF_BNOT -""" -Bitwise negation of operands. -""" - -ida_bytes.FF_BYTE -""" -byte -""" - -ida_bytes.FF_CODE -""" -Code ? -""" - -ida_bytes.FF_COMM -""" -Has comment ? -""" - -ida_bytes.FF_CUSTOM -""" -custom data type -""" - -ida_bytes.FF_DATA -""" -Data ? -""" - -ida_bytes.FF_DOUBLE -""" -double -""" - -ida_bytes.FF_DWORD -""" -double word -""" - -ida_bytes.FF_FLOAT -""" -float -""" - -ida_bytes.FF_FLOW -""" -Exec flow from prev instruction. -""" - -ida_bytes.FF_FUNC -""" -function start? -""" - -ida_bytes.FF_IMMD -""" -Has Immediate value ? -""" - -ida_bytes.FF_IVL -""" -Byte has value ? -""" - -ida_bytes.FF_JUMP -""" -Has jump table or switch_info? -""" - -ida_bytes.FF_LABL -""" -Has dummy name? -""" - -ida_bytes.FF_LINE -""" -Has next or prev lines ? -""" - -ida_bytes.FF_NAME -""" -Has name ? -""" - -ida_bytes.FF_OWORD -""" -octaword/xmm word (16 bytes/128 bits) -""" - -ida_bytes.FF_PACKREAL -""" -packed decimal real -""" - -ida_bytes.FF_QWORD -""" -quadro word -""" - -ida_bytes.FF_REF -""" -has references -""" - -ida_bytes.FF_SIGN -""" -Inverted sign of operands. -""" - -ida_bytes.FF_STRLIT -""" -string literal -""" - -ida_bytes.FF_STRUCT -""" -struct variable -""" - -ida_bytes.FF_TAIL -""" -Tail ? -""" - -ida_bytes.FF_TBYTE -""" -tbyte -""" - -ida_bytes.FF_UNK -""" -Unknown ? -""" - -ida_bytes.FF_UNUSED -""" -unused bit (was used for variable bytes) -""" - -ida_bytes.FF_WORD -""" -word -""" - -ida_bytes.FF_YWORD -""" -ymm word (32 bytes/256 bits) -""" - -ida_bytes.FF_ZWORD -""" -zmm word (64 bytes/512 bits) -""" - -ida_bytes.GFE_VALUE -""" -get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote -debugging because the kernel needs to read the process memory. -""" - -ida_bytes.GMB_READALL -""" -if this bit is not set, fail at first uninited byte - -try to read all bytes -""" - -ida_bytes.GMB_WAITBOX -""" -show wait box (may return -1 in this case) -""" - -ida_bytes.ITEM_END_FIXUP -""" -stop at the first fixup -""" - -ida_bytes.ITEM_END_INITED -""" -stop when initialization changes i.e.if is_loaded(ea): stop if -uninitialized byte is encounteredif !is_loaded(ea): stop if -initialized byte is encountered -""" - -ida_bytes.ITEM_END_NAME -""" -stop at the first named location -""" - -ida_bytes.ITEM_END_XREF -""" -stop at the first referenced location -""" - -ida_bytes.MS_0TYPE -""" -Mask for 1st arg typing. -""" - -ida_bytes.MS_1TYPE -""" -Mask for the type of other operands. -""" - -ida_bytes.MS_CLS -""" -Mask for typing. -""" - -ida_bytes.MS_CODE -""" -Mask for code bits. -""" - -ida_bytes.MS_COMM -""" -Mask of common bits. -""" - -ida_bytes.MS_VAL -""" -Mask for byte value. -""" - -ida_bytes.OPND_ALL -""" -all operands -""" - -ida_bytes.OPND_MASK -""" -mask for operand number -""" - -ida_bytes.OPND_OUTER -""" -used only in set, get, del_offset() functions - -outer offset base (combined with operand number). -""" - -ida_bytes.PSTF_ENC -""" -if encoding is specified, append it -""" - -ida_bytes.PSTF_HOTKEY -""" -have hotkey markers part of the name -""" - -ida_bytes.PSTF_TBRIEF -""" -use brief name (e.g., in the 'Strings window') -""" - -ida_bytes.PSTF_TINLIN -""" -use 'inline' name (e.g., in the structures comments) -""" - -ida_bytes.PSTF_TMASK -""" -type mask -""" - -ida_bytes.PSTF_TNORM -""" -use normal name -""" - -ida_bytes.STRCONV_ESCAPE -""" -convert non-printable characters to C escapes (, \\xNN, \\uNNNN) -""" - -ida_bytes.STRCONV_INCLLEN -""" -for Pascal-style strings, include the prefixing length byte(s) as -C-escaped sequence -""" - -ida_bytes.STRCONV_REPLCHAR -""" -convert non-printable characters to the Unicode replacement character -(U+FFFD) -""" -=== ida_bytes EPYDOC INJECTIONS END === -class ida_dbg.DBG_Hooks(): - - Proxy of C++ DBG_Hooks class - - -ida_dbg.DBG_Hooks.dbg_bpt(): - - dbg_bpt(self, tid, bptea) -> int - - -ida_dbg.DBG_Hooks.dbg_bpt_changed(): - - dbg_bpt_changed(self, bptev_code, bpt) - - -ida_dbg.DBG_Hooks.dbg_exception(): - - dbg_exception(self, pid, tid, ea, exc_code, exc_can_cont, exc_ea, exc_info) -> int - - -ida_dbg.DBG_Hooks.dbg_finished_loading_bpts(): - - dbg_finished_loading_bpts(self) - - -ida_dbg.DBG_Hooks.dbg_information(): - - dbg_information(self, pid, tid, ea, info) - - -ida_dbg.DBG_Hooks.dbg_library_load(): - - dbg_library_load(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - -ida_dbg.DBG_Hooks.dbg_library_unload(): - - dbg_library_unload(self, pid, tid, ea, info) - - -ida_dbg.DBG_Hooks.dbg_process_attach(): - - dbg_process_attach(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - -ida_dbg.DBG_Hooks.dbg_process_detach(): - - dbg_process_detach(self, pid, tid, ea) - - -ida_dbg.DBG_Hooks.dbg_process_exit(): - - dbg_process_exit(self, pid, tid, ea, exit_code) - - -ida_dbg.DBG_Hooks.dbg_process_start(): - - dbg_process_start(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - -ida_dbg.DBG_Hooks.dbg_request_error(): - - dbg_request_error(self, failed_command, failed_dbg_notification) - - -ida_dbg.DBG_Hooks.dbg_run_to(): - - dbg_run_to(self, pid, tid, ea) - - -ida_dbg.DBG_Hooks.dbg_started_loading_bpts(): - - dbg_started_loading_bpts(self) - - -ida_dbg.DBG_Hooks.dbg_step_into(): - - dbg_step_into(self) - - -ida_dbg.DBG_Hooks.dbg_step_over(): - - dbg_step_over(self) - - -ida_dbg.DBG_Hooks.dbg_step_until_ret(): - - dbg_step_until_ret(self) - - -ida_dbg.DBG_Hooks.dbg_suspend_process(): - - dbg_suspend_process(self) - - -ida_dbg.DBG_Hooks.dbg_thread_exit(): - - dbg_thread_exit(self, pid, tid, ea, exit_code) - - -ida_dbg.DBG_Hooks.dbg_thread_start(): - - dbg_thread_start(self, pid, tid, ea) - - -ida_dbg.DBG_Hooks.dbg_trace(): - - dbg_trace(self, tid, ip) -> int - - -ida_dbg.DBG_Hooks.hook(): - - hook(self) -> bool - - -ida_dbg.DBG_Hooks.unhook(): - - unhook(self) -> bool - - -ida_dbg.add_bpt(): - - add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool - add_bpt(bpt) -> bool - - - Add a new breakpoint in the debugged process. \sq{Type, Synchronous - function - available as request, Notification, none (synchronous - function)}Only one breakpoint can exist at a given address. - - @param ea: any address in the process memory space. Depending on the - architecture, hardware breakpoints always be setup at - random address. For example, on x86, hardware breakpoints - should be aligned depending on their size. Moreover, on the - x86 architecture, it is impossible to setup more than 4 - hardware breakpoints. (C++: ea_t) - @param size: size of the breakpoint (irrelevant for software - breakpoints): As for the address, hardware breakpoints - can't always be setup with random size. (C++: asize_t) - @param type: type of the breakpoint ( BPT_SOFT for software - breakpoint) special case BPT_DEFAULT ( BPT_SOFT | - BPT_EXEC ): try to add instruction breakpoint of the - appropriate type as follows: software bpt if supported, - hwbpt otherwise (C++: bpttype_t) - - -ida_dbg.add_path_mapping(): - - add_path_mapping(src, dst) - - -ida_dbg.add_virt_module(): - - add_virt_module(mod) -> bool - - -ida_dbg.attach_process(): - - attach_process(pid=pid_t(-1), event_id=-1) -> int - - - Attach the debugger to a running process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_attach' - }This function shouldn't be called as a request if 'NO_PROCESS' is - used. - - @param pid: PID of the process to attach to. If NO_PROCESS , a dialog - box will interactively ask the user for the process to - attach to. (C++: pid_t) - @param event_id (C++: int) - - -class ida_dbg.bpt_location_t(): - - Proxy of C++ bpt_location_t class - - -ida_dbg.bpt_location_t.compare(): - - compare(self, r) -> int - - -ida_dbg.bpt_location_t.ea(): - - ea(self) -> ea_t - - -ida_dbg.bpt_location_t.index: - bpt_location_t_index_get(self) -> int - -ida_dbg.bpt_location_t.info: - bpt_location_t_info_get(self) -> ea_t - -ida_dbg.bpt_location_t.is_empty_path(): - - is_empty_path(self) -> bool - - -ida_dbg.bpt_location_t.lineno(): - - lineno(self) -> int - - -ida_dbg.bpt_location_t.loctype: - bpt_location_t_loctype_get(self) -> bpt_loctype_t - -ida_dbg.bpt_location_t.offset(): - - offset(self) -> uval_t - - -ida_dbg.bpt_location_t.path(): - - path(self) -> char const * - - -ida_dbg.bpt_location_t.set_abs_bpt(): - - set_abs_bpt(self, a) - - -ida_dbg.bpt_location_t.set_rel_bpt(): - - set_rel_bpt(self, mod, _offset) - - -ida_dbg.bpt_location_t.set_src_bpt(): - - set_src_bpt(self, fn, _lineno) - - -ida_dbg.bpt_location_t.set_sym_bpt(): - - set_sym_bpt(self, _symbol, _offset=0) - - -ida_dbg.bpt_location_t.symbol(): - - symbol(self) -> char const * - - -ida_dbg.bpt_location_t.type(): - - type(self) -> bpt_loctype_t - - -class ida_dbg.bpt_t(): - - Proxy of C++ bpt_t class - - -ida_dbg.bpt_t.badbpt(): - - badbpt(self) -> bool - - -ida_dbg.bpt_t.cb: - bpt_t_cb_get(self) -> size_t - -ida_dbg.bpt_t.cndidx: - bpt_t_cndidx_get(self) -> int - -ida_dbg.bpt_t.condition: - bpt_t_condition_get(self) -> PyObject * - -ida_dbg.bpt_t.ea: - bpt_t_ea_get(self) -> ea_t - -ida_dbg.bpt_t.elang: - bpt_t_elang_get(self) -> PyObject * - -ida_dbg.bpt_t.enabled(): - - enabled(self) -> bool - - -ida_dbg.bpt_t.flags: - bpt_t_flags_get(self) -> uint32 - -ida_dbg.bpt_t.get_cnd_elang_idx(): - - get_cnd_elang_idx(self) -> size_t - - -ida_dbg.bpt_t.get_size(): - - get_size(self) -> int - - -ida_dbg.bpt_t.is_absbpt(): - - is_absbpt(self) -> bool - - -ida_dbg.bpt_t.is_active(): - - is_active(self) -> bool - - -ida_dbg.bpt_t.is_compiled(): - - is_compiled(self) -> bool - - -ida_dbg.bpt_t.is_hwbpt(): - - is_hwbpt(self) -> bool - - -ida_dbg.bpt_t.is_inactive(): - - is_inactive(self) -> bool - - -ida_dbg.bpt_t.is_low_level(): - - is_low_level(self) -> bool - - -ida_dbg.bpt_t.is_page_bpt(): - - is_page_bpt(self) -> bool - - -ida_dbg.bpt_t.is_partially_active(): - - is_partially_active(self) -> bool - - -ida_dbg.bpt_t.is_relbpt(): - - is_relbpt(self) -> bool - - -ida_dbg.bpt_t.is_srcbpt(): - - is_srcbpt(self) -> bool - - -ida_dbg.bpt_t.is_symbpt(): - - is_symbpt(self) -> bool - - -ida_dbg.bpt_t.is_tracemodebpt(): - - is_tracemodebpt(self) -> bool - - -ida_dbg.bpt_t.is_traceoffbpt(): - - is_traceoffbpt(self) -> bool - - -ida_dbg.bpt_t.is_traceonbpt(): - - is_traceonbpt(self) -> bool - - -ida_dbg.bpt_t.listbpt(): - - listbpt(self) -> bool - - -ida_dbg.bpt_t.loc: - bpt_t_loc_get(self) -> bpt_location_t - -ida_dbg.bpt_t.pass_count: - bpt_t_pass_count_get(self) -> int - -ida_dbg.bpt_t.pid: - bpt_t_pid_get(self) -> pid_t - -ida_dbg.bpt_t.props: - bpt_t_props_get(self) -> uint32 - -ida_dbg.bpt_t.set_abs_bpt(): - - set_abs_bpt(self, a) - - -ida_dbg.bpt_t.set_rel_bpt(): - - set_rel_bpt(self, mod, o) - - -ida_dbg.bpt_t.set_src_bpt(): - - set_src_bpt(self, fn, lineno) - - -ida_dbg.bpt_t.set_sym_bpt(): - - set_sym_bpt(self, sym, o) - - -ida_dbg.bpt_t.set_trace_action(): - - set_trace_action(self, enable, trace_types) -> bool - - -ida_dbg.bpt_t.size: - bpt_t_size_get(self) -> int - -ida_dbg.bpt_t.tid: - bpt_t_tid_get(self) -> thid_t - -ida_dbg.bpt_t.type: - bpt_t_type_get(self) -> bpttype_t - -class ida_dbg.bpt_vec_t(): - - Proxy of C++ qvector<(bpt_t)> class - - -ida_dbg.bpt_vec_t.at(): - - at(self, _idx) -> bpt_t - - -ida_dbg.bpt_vec_t.begin(): - - begin(self) -> bpt_t - begin(self) -> bpt_t - - -ida_dbg.bpt_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_dbg.bpt_vec_t.clear(): - - clear(self) - - -ida_dbg.bpt_vec_t.empty(): - - empty(self) -> bool - - -ida_dbg.bpt_vec_t.end(): - - end(self) -> bpt_t - end(self) -> bpt_t - - -ida_dbg.bpt_vec_t.erase(): - - erase(self, it) -> bpt_t - erase(self, first, last) -> bpt_t - - -ida_dbg.bpt_vec_t.extract(): - - extract(self) -> bpt_t - - -ida_dbg.bpt_vec_t.grow(): - - grow(self, x=bpt_t()) - - -ida_dbg.bpt_vec_t.inject(): - - inject(self, s, len) - - -ida_dbg.bpt_vec_t.insert(): - - insert(self, it, x) -> bpt_t - - -ida_dbg.bpt_vec_t.pop_back(): - - pop_back(self) - - -ida_dbg.bpt_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> bpt_t - - -ida_dbg.bpt_vec_t.qclear(): - - qclear(self) - - -ida_dbg.bpt_vec_t.reserve(): - - reserve(self, cnt) - - -ida_dbg.bpt_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_dbg.bpt_vec_t.size(): - - size(self) -> size_t - - -ida_dbg.bpt_vec_t.swap(): - - swap(self, r) - - -ida_dbg.bpt_vec_t.truncate(): - - truncate(self) - - -ida_dbg.bring_debugger_to_front(): - - bring_debugger_to_front() - - -ida_dbg.check_bpt(): - - check_bpt(ea) -> int - - - Check the breakpoint at the specified address. - - @param ea (C++: ea_t) - @return: one of Breakpoint status codes - - -ida_dbg.choose_trace_file(): - - choose_trace_file() -> bool - - - Show the choose trace dialog. - - -ida_dbg.clear_requests_queue(): - - clear_requests_queue() - - - Clear the queue of waiting requests. \sq{Type, Synchronous function, - Notification, none (synchronous function)}If a request is currently - running, this one isn't stopped. - - -ida_dbg.clear_trace(): - - clear_trace() - - - Clear all events in the trace buffer. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - -ida_dbg.collect_stack_trace(): - - collect_stack_trace(tid, trace) -> bool - - -ida_dbg.continue_process(): - - continue_process() -> bool - - - Continue the execution of the process in the debugger. \sq{Type, - Synchronous function - available as Request, Notification, none - (synchronous function)}The 'continue_process()' function can be called - from a notification handler to force the continuation of the process. - In this case the request queue will not be examined, IDA will simply - resume execution. Usually it makes sense to call - 'request_continue_process()' followed by 'run_requests()' , so that - IDA will first start a queued request (if any) and then resume the - application. - - -ida_dbg.create_source_viewer(): - - create_source_viewer(out_ccv, parent, custview, sf, lines, lnnum, colnum, flags) -> source_view_t * - - - Create a source code view. - - - @param out_ccv (C++: TWidget **) - @param parent (C++: TWidget *) - @param custview (C++: TWidget *) - @param sf (C++: source_file_ptr) - @param lines (C++: strvec_t *) - @param lnnum (C++: int) - @param colnum (C++: int) - @param flags (C++: int) - - -ida_dbg.dbg_add_bpt_tev(): - - dbg_add_bpt_tev(tid, ea, bp) -> bool - - - Add a new breakpoint trace element to the current trace. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param tid (C++: thid_t) - @param ea (C++: ea_t) - @param bp (C++: ea_t) - @return: false if the operation failed, true otherwise - - -ida_dbg.dbg_add_call_tev(): - - dbg_add_call_tev(tid, caller, callee) - - - Add a new call trace element to the current trace. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param tid (C++: thid_t) - @param caller (C++: ea_t) - @param callee (C++: ea_t) - - -ida_dbg.dbg_add_debug_event(): - - dbg_add_debug_event(event) - - - Add a new debug event to the current trace. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param event (C++: debug_event_t *) - - -ida_dbg.dbg_add_insn_tev(): - - dbg_add_insn_tev(tid, ea, save=SAVE_DIFF) -> bool - - - Add a new instruction trace element to the current trace. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param tid (C++: thid_t) - @param ea (C++: ea_t) - @param save (C++: save_reg_values_t) - @return: false if the operation failed, true otherwise - - -ida_dbg.dbg_add_many_tevs(): - - dbg_add_many_tevs(new_tevs) -> bool - - - Add many new trace elements to the current trace. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param new_tevs (C++: tevinforeg_vec_t *) - @return: false if the operation failed for any tev_info_t object - - -ida_dbg.dbg_add_ret_tev(): - - dbg_add_ret_tev(tid, ret_insn, return_to) - - - Add a new return trace element to the current trace. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param tid (C++: thid_t) - @param ret_insn (C++: ea_t) - @param return_to (C++: ea_t) - - -ida_dbg.dbg_add_tev(): - - dbg_add_tev(type, tid, address) - - - Add a new trace element to the current trace. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param type (C++: tev_type_t) - @param tid (C++: thid_t) - @param address (C++: ea_t) - - -ida_dbg.dbg_add_thread(): - - dbg_add_thread(tid) - - - Add a thread to the current trace. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param tid (C++: thid_t) - - -ida_dbg.dbg_bin_search(): - - dbg_bin_search(start_ea, end_ea, data, srch_flags) -> drc_t - - -ida_dbg.dbg_can_query(): - - dbg_can_query() -> bool - - - This function can be used to check if the debugger can be queried: - - debugger is loaded - - process is suspended - - process is not suspended but can take requests. In this case some requests like - memory read/write, bpt management succeed and register querying will fail. - Check if idaapi.get_process_state() < 0 to tell if the process is suspended - @return: Boolean - - -ida_dbg.dbg_del_thread(): - - dbg_del_thread(tid) - - - Delete a thread from the current trace. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param tid (C++: thid_t) - - -ida_dbg.dbg_is_loaded(): - - dbg_is_loaded() -> bool - - - Checks if a debugger is loaded - @return: Boolean - - -ida_dbg.define_exception(): - - define_exception(code, name, desc, flags) -> char const * - - - Convenience function: define new exception code. - - @param code: exception code (cannot be 0) (C++: uint) - @param name: exception name (cannot be empty or NULL) (C++: const char - *) - @param desc: exception description (maybe NULL) (C++: const char *) - @param flags: combination of Exception info flags (C++: int) - @return: failure message or NULL. You must call store_exceptions() - if this function succeeds - - -ida_dbg.del_bpt(): - - del_bpt(ea) -> bool - del_bpt(bptloc) -> bool - - - Delete an existing breakpoint in the debugged process. \sq{Type, - Synchronous function - available as request, Notification, none - (synchronous function)} - - @param ea: any address in the breakpoint range (C++: ea_t) - - -ida_dbg.del_bptgrp(): - - del_bptgrp(name) -> bool - - -ida_dbg.del_virt_module(): - - del_virt_module(base) -> bool - - -ida_dbg.detach_process(): - - detach_process() -> bool - - - Detach the debugger from the debugged process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_detach' } - - -ida_dbg.diff_trace_file(): - - diff_trace_file(nonnul_filename) -> bool - - - Show difference between the current trace and the one from 'filename'. - - -ida_dbg.disable_bblk_trace(): - - disable_bblk_trace() -> bool - - -ida_dbg.disable_bpt(): - - disable_bpt(ea) -> bool - disable_bpt(bptloc) -> bool - - -ida_dbg.disable_func_trace(): - - disable_func_trace() -> bool - - -ida_dbg.disable_insn_trace(): - - disable_insn_trace() -> bool - - -ida_dbg.disable_step_trace(): - - disable_step_trace() -> bool - - -ida_dbg.edit_manual_regions(): - - edit_manual_regions() - - -ida_dbg.enable_bblk_trace(): - - enable_bblk_trace(enable=True) -> bool - - -ida_dbg.enable_bpt(): - - enable_bpt(ea, enable=True) -> bool - enable_bpt(bptloc, enable=True) -> bool - - -ida_dbg.enable_func_trace(): - - enable_func_trace(enable=True) -> bool - - -ida_dbg.enable_insn_trace(): - - enable_insn_trace(enable=True) -> bool - - -ida_dbg.enable_manual_regions(): - - enable_manual_regions(enable) - - -ida_dbg.enable_step_trace(): - - enable_step_trace(enable=True) -> bool - - -class ida_dbg.eval_ctx_t(): - - Proxy of C++ eval_ctx_t class - - -ida_dbg.eval_ctx_t.ea: - eval_ctx_t_ea_get(self) -> ea_t - -ida_dbg.exist_bpt(): - - exist_bpt(ea) -> bool - - - Does a breakpoint exist at the given location? - - - @param ea (C++: ea_t) - - -ida_dbg.exit_process(): - - exit_process() -> bool - - - Terminate the debugging of the current process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_exit' } - - -ida_dbg.find_bpt(): - - find_bpt(bptloc, bpt) -> bool - - - Find a breakpoint by location. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param bptloc: Breakpoint location (C++: const bpt_location_t &) - @param bpt: bpt is filled if the breakpoint was found (C++: bpt_t *) - - -ida_dbg.get_bblk_trace_options(): - - get_bblk_trace_options() -> int - - - Get current basic block tracing options. Also see 'BT_LOG_INSTS' - \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - -ida_dbg.get_bpt(): - - get_bpt(ea, bpt) -> bool - - - Get the characteristics of a breakpoint. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param ea: any address in the breakpoint range (C++: ea_t) - @param bpt: if not NULL, is filled with the characteristics. (C++: - bpt_t *) - @return: false if no breakpoint exists - - -ida_dbg.get_bpt_group(): - - get_bpt_group(bptloc) -> bool - - -ida_dbg.get_bpt_qty(): - - get_bpt_qty() -> int - - - Get number of breakpoints. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - -ida_dbg.get_bpt_tev_ea(): - - get_bpt_tev_ea(n) -> ea_t - - - Get the address associated to a read, read/write or execution trace - event. \sq{Type, Synchronous function, Notification, none (synchronous - function)}Usually, a breakpoint is associated with a read, read/write - or execution trace event. However, the returned address could be any - address in the range of this breakpoint. If the breakpoint was deleted - after the trace event, the address no longer corresponds to a valid - breakpoint. - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a read, read/write or execution trace event. - - -ida_dbg.get_bptloc_string(): - - get_bptloc_string(i) -> char const * - - - Helper function for 'bpt_location_t' . - - - @param i (C++: int) - - -ida_dbg.get_call_tev_callee(): - - get_call_tev_callee(n) -> ea_t - - - Get the called function from a function call trace event. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a function call event. - - -ida_dbg.get_current_source_file(): - - get_current_source_file(path) -> bool - - -ida_dbg.get_current_source_line(): - - get_current_source_line() -> int - - -ida_dbg.get_current_thread(): - - get_current_thread() -> thid_t - - - Get current thread ID. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - -ida_dbg.get_dbg_byte(): - - get_dbg_byte(x, ea) -> bool - - - Get one byte of the debugged process memory. - - @param x: pointer to byte value (C++: uint32 *) - @param ea: linear address (C++: ea_t) - @return: true success - - -ida_dbg.get_dbg_memory_info(): - - get_dbg_memory_info(ranges) -> int - - -ida_dbg.get_dbg_reg_info(): - - get_dbg_reg_info(regname, ri) -> bool - - - Get register information \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param regname (C++: const char *) - @param ri (C++: register_info_t *) - - -ida_dbg.get_debug_event(): - - get_debug_event() -> debug_event_t - - - Get the current debugger event. - - -ida_dbg.get_debugger_event_cond(): - - get_debugger_event_cond() -> char const * - - -ida_dbg.get_first_module(): - - get_first_module(modinfo) -> bool - - -ida_dbg.get_func_trace_options(): - - get_func_trace_options() -> int - - - Get current function tracing options. Also see 'FT_LOG_RET' \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - -ida_dbg.get_global_var(): - - get_global_var(prov, ea, name, out) -> bool - - -ida_dbg.get_grp_bpts(): - - get_grp_bpts(bpts, grp_name) -> ssize_t - - -ida_dbg.get_insn_tev_reg_mem(): - - get_insn_tev_reg_mem(n, memmap) -> bool - - - Read the memory pointed by register values from an instruction trace - event. \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param memmap: result (C++: memreg_infos_t *) - @return: false if not an instruction event or no memory is available - - -ida_dbg.get_insn_tev_reg_result(): - - get_insn_tev_reg_result(n, regname, regval) -> bool - - - Read the resulting register value from an instruction trace event. - \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param regname: name of desired register (C++: const char *) - @param regval: result (C++: regval_t *) - @return: false if not an instruction trace event or register wasn't - modified. - - -ida_dbg.get_insn_tev_reg_val(): - - get_insn_tev_reg_val(n, regname, regval) -> bool - - - Read a register value from an instruction trace event. \sq{Type, - Synchronous function, Notification, none (synchronous function)}This - is the value of the register before the execution of the instruction. - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param regname: name of desired register (C++: const char *) - @param regval: result (C++: regval_t *) - @return: false if not an instruction event. - - -ida_dbg.get_insn_trace_options(): - - get_insn_trace_options() -> int - - - Get current instruction tracing options. Also see 'IT_LOG_SAME_IP' - \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - -ida_dbg.get_ip_val(): - - get_ip_val() -> bool - - - Get value of the IP (program counter) register for the current thread. - Requires a suspended debugger. - - -ida_dbg.get_local_var(): - - get_local_var(prov, ea, name, out) -> bool - - -ida_dbg.get_local_vars(): - - get_local_vars(prov, ea, out) -> bool - - -ida_dbg.get_manual_regions(): - - get_manual_regions(ranges) - get_manual_regions() -> PyObject * - - - Returns the manual memory regions - @return: list(start_ea, end_ea, name, sclass, sbase, bitness, perm) - - -ida_dbg.get_module_info(): - - get_module_info(ea, modinfo) -> bool - - -ida_dbg.get_next_module(): - - get_next_module(modinfo) -> bool - - -ida_dbg.get_process_options(): - - get_process_options(path, args, sdir, host, _pass, port) - - - Get process options. Any of the arguments may be NULL - - @param path (C++: qstring *) - @param args (C++: qstring *) - @param sdir (C++: qstring *) - @param host (C++: qstring *) - @param port (C++: int *) - - -ida_dbg.get_process_state(): - - get_process_state() -> int - - - Return the state of the currently debugged process. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @return: one of Debugged process states - - -ida_dbg.get_processes(): - - get_processes(proclist) -> ssize_t - - - Take a snapshot of running processes and return their description. - \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - @param proclist (C++: procinfo_vec_t *) - @return: number of processes or -1 on error - - -ida_dbg.get_reg_val(): - - get_reg_val(regname, regval) -> bool - get_reg_val(regname, ival) -> bool - get_reg_val(regname) -> PyObject * - - - Read a register value from the current thread. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param regname (C++: const char *) - @param regval (C++: regval_t *) - - -ida_dbg.get_reg_vals(): - - get_reg_vals(tid, clsmask, values) -> int - - -ida_dbg.get_ret_tev_return(): - - get_ret_tev_return(n) -> ea_t - - - Get the return address from a function return trace event. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a function return event. - - -ida_dbg.get_running_notification(): - - get_running_notification() -> dbg_notification_t - - - Get the notification associated (if any) with the current running - request. \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @return: dbg_null if no running request - - -ida_dbg.get_running_request(): - - get_running_request() -> ui_notification_t - - - Get the current running request. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @return: ui_null if no running request - - -ida_dbg.get_sp_val(): - - get_sp_val() -> bool - - - Get value of the SP register for the current thread. Requires a - suspended debugger. - - -ida_dbg.get_srcinfo_provider(): - - get_srcinfo_provider(name) -> srcinfo_provider_t * - - -ida_dbg.get_step_trace_options(): - - get_step_trace_options() -> int - - - Get current step tracing options. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @return: Step trace options - - -ida_dbg.get_tev_ea(): - - get_tev_ea(n) -> ea_t - - -ida_dbg.get_tev_event(): - - get_tev_event(n, d) -> bool - - - Get the corresponding debug event, if any, for the specified tev - object. \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param d: result (C++: debug_event_t *) - @return: false if the tev_t object doesn't have any associated debug - event, true otherwise, with the debug event in "d". - - -ida_dbg.get_tev_info(): - - get_tev_info(n, tev_info) -> bool - - - Get main information about a trace event. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param tev_info: result (C++: tev_info_t *) - @return: success - - -ida_dbg.get_tev_memory_info(): - - get_tev_memory_info(n, mi) -> bool - - - Get the memory layout, if any, for the specified tev object. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param mi: result (C++: meminfo_vec_t *) - @return: false if the tev_t object is not of type tev_mem , true - otherwise, with the new memory layout in "mi". - - -ida_dbg.get_tev_qty(): - - get_tev_qty() -> int - - - Get number of trace events available in trace buffer. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - -ida_dbg.get_tev_tid(): - - get_tev_tid(n) -> int - - -ida_dbg.get_tev_type(): - - get_tev_type(n) -> int - - -ida_dbg.get_thread_qty(): - - get_thread_qty() -> int - - - Get number of threads. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - -ida_dbg.get_trace_base_address(): - - get_trace_base_address() -> ea_t - - - Get the base address of the current trace. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @return: the base address of the currently loaded trace - - -ida_dbg.get_trace_file_desc(): - - get_trace_file_desc(filename) -> bool - - - Get the file header of the specified trace file. - - - @param filename (C++: const char *) - - -ida_dbg.get_trace_platform(): - - get_trace_platform() -> char const * - - - Get platform name of current trace. - - -ida_dbg.getn_bpt(): - - getn_bpt(n, bpt) -> bool - - - Get the characteristics of a breakpoint. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param n: number of breakpoint, is in range 0.. get_bpt_qty() -1 (C++: - int) - @param bpt: filled with the characteristics. (C++: bpt_t *) - @return: false if no breakpoint exists - - -ida_dbg.getn_thread(): - - getn_thread(n) -> thid_t - - - Get the ID of a thread. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: - int) - @return: NO_THREAD if the thread doesn't exist. - - -ida_dbg.getn_thread_name(): - - getn_thread_name(n) -> char const * - - - Get the NAME of a thread \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 - for the current thread (C++: int) - @return: thread name or NULL if the thread doesn't exist. - - -ida_dbg.graph_trace(): - - graph_trace() -> bool - - - Show the trace callgraph. - - -ida_dbg.handle_debug_event(): - - handle_debug_event(ev, rqflags) -> int - - -ida_dbg.hide_all_bpts(): - - hide_all_bpts() -> int - - -ida_dbg.internal_get_sreg_base(): - - internal_get_sreg_base(tid, sreg_value) -> ea_t - - - Get the sreg base, for the given thread. - - @return: The sreg base, or BADADDR on failure. - - -ida_dbg.internal_ioctl(): - - internal_ioctl(fn, buf, poutbuf, poutsize) -> int - - -ida_dbg.invalidate_dbg_state(): - - invalidate_dbg_state(dbginv) -> int - - - Invalidate cached debugger information. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param dbginv: Debugged process invalidation options (C++: int) - @return: current debugger state (one of Debugged process states ) - - -ida_dbg.invalidate_dbgmem_config(): - - invalidate_dbgmem_config() - - - Invalidate the debugged process memory configuration. Call this - function if the debugged process might have changed its memory layout - (allocated more memory, for example) - - -ida_dbg.invalidate_dbgmem_contents(): - - invalidate_dbgmem_contents(ea, size) - - - Invalidate the debugged process memory contents. Call this function - each time the process has been stopped or the process memory is - modified. If ea == 'BADADDR' , then the whole memory contents will be - invalidated - - @param ea (C++: ea_t) - @param size (C++: asize_t) - - -ida_dbg.is_bblk_trace_enabled(): - - is_bblk_trace_enabled() -> bool - - -ida_dbg.is_debugger_busy(): - - is_debugger_busy() -> bool - - - Is the debugger busy?. Some debuggers do not accept any commands while - the debugged application is running. For such a debugger, it is unsafe - to do anything with the database (even simple queries like get_byte - may lead to undesired consequences). Returns: true if the debugged - application is running under such a debugger - - -ida_dbg.is_debugger_memory(): - - is_debugger_memory(ea) -> bool - - - Is the address mapped to debugger memory? - - - @param ea (C++: ea_t) - - -ida_dbg.is_debugger_on(): - - is_debugger_on() -> bool - - - Is the debugger currently running? - - -ida_dbg.is_func_trace_enabled(): - - is_func_trace_enabled() -> bool - - - Get current state of functions tracing. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - -ida_dbg.is_insn_trace_enabled(): - - is_insn_trace_enabled() -> bool - - - Get current state of instructions tracing. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - -ida_dbg.is_reg_custom(): - - is_reg_custom(regname) -> bool - - - Does a register contain a value of a custom data type? \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param regname (C++: const char *) - - -ida_dbg.is_reg_float(): - - is_reg_float(regname) -> bool - - - Does a register contain a floating point value? \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param regname (C++: const char *) - - -ida_dbg.is_reg_integer(): - - is_reg_integer(regname) -> bool - - - Does a register contain an integer value? \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param regname (C++: const char *) - - -ida_dbg.is_request_running(): - - is_request_running() -> bool - - - Is a request currently running? - - -ida_dbg.is_step_trace_enabled(): - - is_step_trace_enabled() -> bool - - - Get current state of step tracing. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - -ida_dbg.is_valid_trace_file(): - - is_valid_trace_file(filename) -> bool - - - Is the specified file a valid trace file for the current database? - - - @param filename (C++: const char *) - - -ida_dbg.list_bptgrps(): - - list_bptgrps(bptgrps) -> size_t - list_bptgrps() -> PyObject * - - -ida_dbg.load_debugger(): - - load_debugger(dbgname, use_remote) -> bool - - -ida_dbg.load_trace_file(): - - load_trace_file(filename) -> bool - - - Load a recorded trace file in the trace window. If the call succeeds - and 'buf' is not null, the description of the trace stored in the - binary trace file will be returned in 'buf' - - @param filename (C++: const char *) - - -class ida_dbg.memreg_info_t(): - - Proxy of C++ memreg_info_t class - - -ida_dbg.memreg_info_t.bytes: - - get_bytes(self) -> PyObject * - - -ida_dbg.memreg_info_t.ea: - memreg_info_t_ea_get(self) -> ea_t - -ida_dbg.memreg_info_t.get_bytes(): - - get_bytes(self) -> PyObject * - - -class ida_dbg.memreg_infos_t(): - - Proxy of C++ qvector<(memreg_info_t)> class - - -ida_dbg.memreg_infos_t.at(): - - at(self, _idx) -> memreg_info_t - - -ida_dbg.memreg_infos_t.begin(): - - begin(self) -> memreg_info_t - begin(self) -> memreg_info_t - - -ida_dbg.memreg_infos_t.capacity(): - - capacity(self) -> size_t - - -ida_dbg.memreg_infos_t.clear(): - - clear(self) - - -ida_dbg.memreg_infos_t.empty(): - - empty(self) -> bool - - -ida_dbg.memreg_infos_t.end(): - - end(self) -> memreg_info_t - end(self) -> memreg_info_t - - -ida_dbg.memreg_infos_t.erase(): - - erase(self, it) -> memreg_info_t - erase(self, first, last) -> memreg_info_t - - -ida_dbg.memreg_infos_t.extract(): - - extract(self) -> memreg_info_t - - -ida_dbg.memreg_infos_t.grow(): - - grow(self, x=memreg_info_t()) - - -ida_dbg.memreg_infos_t.inject(): - - inject(self, s, len) - - -ida_dbg.memreg_infos_t.insert(): - - insert(self, it, x) -> memreg_info_t - - -ida_dbg.memreg_infos_t.pop_back(): - - pop_back(self) - - -ida_dbg.memreg_infos_t.push_back(): - - push_back(self, x) - push_back(self) -> memreg_info_t - - -ida_dbg.memreg_infos_t.qclear(): - - qclear(self) - - -ida_dbg.memreg_infos_t.reserve(): - - reserve(self, cnt) - - -ida_dbg.memreg_infos_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_dbg.memreg_infos_t.size(): - - size(self) -> size_t - - -ida_dbg.memreg_infos_t.swap(): - - swap(self, r) - - -ida_dbg.memreg_infos_t.truncate(): - - truncate(self) - - -ida_dbg.move_bpt_to_grp(): - - move_bpt_to_grp(bpt, grp_name) - - - Sets new group for the breakpoint - - -ida_dbg.put_dbg_byte(): - - put_dbg_byte(ea, x) -> bool - - - Change one byte of the debugged process memory. - - @param ea: linear address (C++: ea_t) - @param x: byte value (C++: uint32) - @return: true if the process memory has been modified - - -ida_dbg.read_dbg_memory(): - - read_dbg_memory(ea, buffer, size) -> ssize_t - - -ida_dbg.refresh_debugger_memory(): - - refresh_debugger_memory() -> PyObject * - - - Refreshes the debugger memory - @return: Nothing - - -ida_dbg.rename_bptgrp(): - - rename_bptgrp(old_name, new_name) -> bool - - -ida_dbg.request_add_bpt(): - - request_add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool - request_add_bpt(bpt) -> bool - - - Post an 'add_bpt(ea_t, asize_t, bpttype_t)' request. - - - @param ea (C++: ea_t) - @param size (C++: asize_t) - @param type (C++: bpttype_t) - - -ida_dbg.request_attach_process(): - - request_attach_process(pid, event_id) -> int - - - Post an 'attach_process()' request. - - - @param pid (C++: pid_t) - @param event_id (C++: int) - - -ida_dbg.request_clear_trace(): - - request_clear_trace() - - - Post a 'clear_trace()' request. - - -ida_dbg.request_continue_process(): - - request_continue_process() -> bool - - - Post a 'continue_process()' request.This requires an explicit call to - 'run_requests()' - - -ida_dbg.request_del_bpt(): - - request_del_bpt(ea) -> bool - request_del_bpt(bptloc) -> bool - - - Post a 'del_bpt(ea_t)' request. - - - @param ea (C++: ea_t) - - -ida_dbg.request_detach_process(): - - request_detach_process() -> bool - - - Post a 'detach_process()' request. - - -ida_dbg.request_disable_bblk_trace(): - - request_disable_bblk_trace() -> bool - - -ida_dbg.request_disable_bpt(): - - request_disable_bpt(ea) -> bool - request_disable_bpt(bptloc) -> bool - - -ida_dbg.request_disable_func_trace(): - - request_disable_func_trace() -> bool - - -ida_dbg.request_disable_insn_trace(): - - request_disable_insn_trace() -> bool - - -ida_dbg.request_disable_step_trace(): - - request_disable_step_trace() -> bool - - -ida_dbg.request_enable_bblk_trace(): - - request_enable_bblk_trace(enable=True) -> bool - - -ida_dbg.request_enable_bpt(): - - request_enable_bpt(ea, enable=True) -> bool - request_enable_bpt(bptloc, enable=True) -> bool - - -ida_dbg.request_enable_func_trace(): - - request_enable_func_trace(enable=True) -> bool - - -ida_dbg.request_enable_insn_trace(): - - request_enable_insn_trace(enable=True) -> bool - - -ida_dbg.request_enable_step_trace(): - - request_enable_step_trace(enable=True) -> bool - - -ida_dbg.request_exit_process(): - - request_exit_process() -> bool - - - Post an 'exit_process()' request. - - -ida_dbg.request_resume_thread(): - - request_resume_thread(tid) -> int - - - Post a 'resume_thread()' request. - - - @param tid (C++: thid_t) - - -ida_dbg.request_run_to(): - - request_run_to(ea, pid=pid_t(-1), tid=0) -> bool - - - Post a 'run_to()' request. - - - @param ea (C++: ea_t) - @param pid (C++: pid_t) - @param tid (C++: thid_t) - - -ida_dbg.request_select_thread(): - - request_select_thread(tid) -> bool - - - Post a 'select_thread()' request. - - - @param tid (C++: thid_t) - - -ida_dbg.request_set_bblk_trace_options(): - - request_set_bblk_trace_options(options) - - - Post a 'set_bblk_trace_options()' request. - - - @param options (C++: int) - - -ida_dbg.request_set_func_trace_options(): - - request_set_func_trace_options(options) - - - Post a 'set_func_trace_options()' request. - - - @param options (C++: int) - - -ida_dbg.request_set_insn_trace_options(): - - request_set_insn_trace_options(options) - - - Post a 'set_insn_trace_options()' request. - - - @param options (C++: int) - - -ida_dbg.request_set_reg_val(): - - request_set_reg_val(regname, o) -> PyObject * - - - Post a 'set_reg_val()' request. - - - @param regname (C++: const char *) - - -ida_dbg.request_set_resume_mode(): - - request_set_resume_mode(tid, mode) -> bool - - - Post a 'set_resume_mode()' request. - - - @param tid (C++: thid_t) - @param mode (C++: resume_mode_t) - - -ida_dbg.request_set_step_trace_options(): - - request_set_step_trace_options(options) - - - Post a 'set_step_trace_options()' request. - - - @param options (C++: int) - - -ida_dbg.request_start_process(): - - request_start_process(path=None, args=None, sdir=None) -> int - - - Post a 'start_process()' request. - - - @param path (C++: const char *) - @param args (C++: const char *) - @param sdir (C++: const char *) - - -ida_dbg.request_step_into(): - - request_step_into() -> bool - - - Post a 'step_into()' request. - - -ida_dbg.request_step_over(): - - request_step_over() -> bool - - - Post a 'step_over()' request. - - -ida_dbg.request_step_until_ret(): - - request_step_until_ret() -> bool - - - Post a 'step_until_ret()' request. - - -ida_dbg.request_suspend_process(): - - request_suspend_process() -> bool - - - Post a 'suspend_process()' request. - - -ida_dbg.request_suspend_thread(): - - request_suspend_thread(tid) -> int - - - Post a 'suspend_thread()' request. - - - @param tid (C++: thid_t) - - -ida_dbg.resume_thread(): - - resume_thread(tid) -> int - - - Resume thread. \sq{Type, Synchronous function - available as request, - Notification, none (synchronous function)} - - @param tid: thread id (C++: thid_t) - - -ida_dbg.retrieve_exceptions(): - - retrieve_exceptions() -> excvec_t - - - Retrieve the exception information. You may freely modify the returned - vector and add/edit/delete exceptions You must call - 'store_exceptions()' after any modifications Note: exceptions with - code zero, multiple exception codes or names are prohibited - - -ida_dbg.run_requests(): - - run_requests() -> bool - - - Execute requests until all requests are processed or an asynchronous - function is called. \sq{Type, Synchronous function, Notification, none - (synchronous function)}If called from a notification handler, the - execution of requests will be postponed to the end of the execution of - all notification handlers. - - @return: false if not all requests could be processed (indicates an - asynchronous function was started) - - -ida_dbg.run_to(): - - run_to(ea, pid=pid_t(-1), tid=0) -> bool - - - Execute the process until the given address is reached. If no process - is active, a new process is started. Technically, the debugger sets up - a temporary breakpoint at the given address, and continues (or starts) - the execution of the whole process. So, all threads continue their - execution! \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_run_to' } - - @param ea: target address (C++: ea_t) - @param pid: not used yet. please do not specify this parameter. (C++: - pid_t) - @param tid: not used yet. please do not specify this parameter. (C++: - thid_t) - - -ida_dbg.save_trace_file(): - - save_trace_file(filename, description) -> bool - - - Save the current trace in the specified file. - - - @param filename (C++: const char *) - @param description (C++: const char *) - - -ida_dbg.select_thread(): - - select_thread(tid) -> bool - - - Select the given thread as the current debugged thread. All thread - related execution functions will work on this thread. The process must - be suspended to select a new thread. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param tid: ID of the thread to select (C++: thid_t) - @return: false if the thread doesn't exist. - - -ida_dbg.send_dbg_command(): - - Send a direct command to the debugger backend, and - retrieve the result as a string. - - Note: any double-quotes in 'command' must be backslash-escaped. - Note: this only works with some debugger backends: Bochs, WinDbg, GDB. - - Returns: (True, ) on success, or (False, ) on failure - - -ida_dbg.set_bblk_trace_options(): - - set_bblk_trace_options(options) - - - Modify basic block tracing options (see 'BT_LOG_INSTS' ) - - - @param options (C++: int) - - -ida_dbg.set_bpt_group(): - - set_bpt_group(bpt, grp_name) - - -ida_dbg.set_bptloc_group(): - - set_bptloc_group(bptloc, grp_name) -> bool - - -ida_dbg.set_bptloc_string(): - - set_bptloc_string(s) -> int - - - Helper function for 'bpt_location_t' . - - - @param s (C++: const char *) - - -ida_dbg.set_debugger_event_cond(): - - set_debugger_event_cond(nonnul_cond) - - -ida_dbg.set_debugger_options(): - - set_debugger_options(options) -> uint - - - Set debugger options. Replaces debugger options with the specification - combination 'Debugger options' - - @param options (C++: uint) - @return: the old debugger options - - -ida_dbg.set_func_trace_options(): - - set_func_trace_options(options) - - - Modify function tracing options. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param options (C++: int) - - -ida_dbg.set_highlight_trace_options(): - - set_highlight_trace_options(hilight, color, diff) - - - Set highlight trace parameters. - - - @param hilight (C++: bool) - @param color (C++: bgcolor_t) - @param diff (C++: bgcolor_t) - - -ida_dbg.set_insn_trace_options(): - - set_insn_trace_options(options) - - - Modify instruction tracing options. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param options (C++: int) - - -ida_dbg.set_manual_regions(): - - set_manual_regions(ranges) - - -ida_dbg.set_process_options(): - - set_process_options(path, args, sdir, host, _pass, port) - - - Set process options. Any of the arguments may be NULL, which means 'do - not modify' - - @param path (C++: const char *) - @param args (C++: const char *) - @param sdir (C++: const char *) - @param host (C++: const char *) - @param port (C++: int) - - -ida_dbg.set_process_state(): - - set_process_state(newstate, p_thid, dbginv) -> int - - - Set new state for the debugged process. Notifies the IDA kernel about - the change of the debugged process state. For example, a debugger - module could call this function when it knows that the process is - suspended for a short period of time. Some IDA API calls can be made - only when the process is suspended. The process state is usually - restored before returning control to the caller. You must know that it - is ok to change the process state, doing it at arbitrary moments may - crash the application or IDA. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param newstate: new process state (one of Debugged process states ) - if DSTATE_NOTASK is passed then the state is not - changed (C++: int) - @param p_thid: ptr to new thread id. may be NULL or pointer to - NO_THREAD . the pointed variable will contain the old - thread id upon return (C++: thid_t *) - @param dbginv: Debugged process invalidation options (C++: int) - @return: old debugger state (one of Debugged process states ) - - -ida_dbg.set_reg_val(): - - set_reg_val(regname, o) -> PyObject - set_reg_val(tid, regidx, o) -> PyObject * - - - Write a register value to the current thread. \sq{Type, Synchronous - function - available as Request, Notification, none (synchronous - function)} - - @param regname (C++: const char *) - - -ida_dbg.set_remote_debugger(): - - set_remote_debugger(host, _pass, port=-1) - - - Set remote debugging options. Should be used before starting the - debugger. - - @param host: If empty, IDA will use local debugger. If NULL, the host - will not be set. (C++: const char *) - @param port: If -1, the default port number will be used (C++: int) - - -ida_dbg.set_resume_mode(): - - set_resume_mode(tid, mode) -> bool - - - How to resume the application. Set resume mode but do not resume - process. - - @param tid (C++: thid_t) - @param mode (C++: resume_mode_t) - - -ida_dbg.set_step_trace_options(): - - set_step_trace_options(options) - - - Modify step tracing options. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param options (C++: int) - - -ida_dbg.set_trace_base_address(): - - set_trace_base_address(ea) - - - Set the base address of the current trace. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param ea (C++: ea_t) - - -ida_dbg.set_trace_file_desc(): - - set_trace_file_desc(filename, description) -> bool - - - Change the description of the specified trace file. - - - @param filename (C++: const char *) - @param description (C++: const char *) - - -ida_dbg.set_trace_platform(): - - set_trace_platform(platform) - - - Set platform name of current trace. - - - @param platform (C++: const char *) - - -ida_dbg.set_trace_size(): - - set_trace_size(size) -> bool - - - Specify the new size of the circular buffer. \sq{Type, Synchronous - function, Notification, none (synchronous function)}If you specify 0, - all available memory can be quickly used !!! - - @param size: if 0, buffer isn't circular and events are never removed. - If the new size is smaller than the existing number of - trace events, a corresponding number of trace events are - removed. (C++: int) - - -ida_dbg.srcdbg_request_step_into(): - - srcdbg_request_step_into() -> bool - - -ida_dbg.srcdbg_request_step_over(): - - srcdbg_request_step_over() -> bool - - -ida_dbg.srcdbg_request_step_until_ret(): - - srcdbg_request_step_until_ret() -> bool - - -ida_dbg.srcdbg_step_into(): - - srcdbg_step_into() -> bool - - -ida_dbg.srcdbg_step_over(): - - srcdbg_step_over() -> bool - - -ida_dbg.srcdbg_step_until_ret(): - - srcdbg_step_until_ret() -> bool - - -ida_dbg.start_process(): - - start_process(path=None, args=None, sdir=None) -> int - - - Start a process in the debugger. \sq{Type, Asynchronous function - - available as Request, Notification, 'dbg_process_start' }You can also - use the 'run_to()' function to easily start the execution of a process - until a given address is reached.For all parameters, a NULL value - indicates the debugger will take the value from the defined Process - Options. - - @param path: path to the executable to start (C++: const char *) - @param args: arguments to pass to process (C++: const char *) - @param sdir: starting directory for the process (C++: const char *) - - -ida_dbg.step_into(): - - step_into() -> bool - - - Execute one instruction in the current thread. Other threads are kept - suspended. \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_step_into' } - - -ida_dbg.step_over(): - - step_over() -> bool - - - Execute one instruction in the current thread, but without entering - into functions. Others threads keep suspended. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_step_over' } - - -ida_dbg.step_until_ret(): - - step_until_ret() -> bool - - - Execute instructions in the current thread until a function return - instruction is executed (aka "step out"). Other threads are kept - suspended. \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_step_until_ret' } - - -ida_dbg.store_exceptions(): - - store_exceptions() -> bool - - - Update the exception information stored in the debugger module by - invoking its dbg->set_exception_info callback - - -ida_dbg.suspend_process(): - - suspend_process() -> bool - - - Suspend the process in the debugger. \sq{ Type,Synchronous function - (if in a notification handler)Asynchronous function (everywhere - else)available as Request, Notification,none (if in a notification - handler) 'dbg_suspend_process' (everywhere else) }The - 'suspend_process()' function can be called from a notification handler - to force the stopping of the process. In this case, no notification - will be generated. When you suspend a process, the running command is - always aborted. - - -ida_dbg.suspend_thread(): - - suspend_thread(tid) -> int - - - Suspend thread. Suspending a thread may deadlock the whole application - if the suspended was owning some synchronization objects. \sq{Type, - Synchronous function - available as request, Notification, none - (synchronous function)} - - @param tid: thread id (C++: thid_t) - - -class ida_dbg.tev_info_reg_t(): - - Proxy of C++ tev_info_reg_t class - - -ida_dbg.tev_info_reg_t.info: - tev_info_reg_t_info_get(self) -> tev_info_t - -ida_dbg.tev_info_reg_t.registers: - tev_info_reg_t_registers_get(self) -> tev_reg_values_t - -class ida_dbg.tev_info_t(): - - Proxy of C++ tev_info_t class - - -ida_dbg.tev_info_t.ea: - tev_info_t_ea_get(self) -> ea_t - -ida_dbg.tev_info_t.tid: - tev_info_t_tid_get(self) -> thid_t - -ida_dbg.tev_info_t.type: - tev_info_t_type_get(self) -> tev_type_t - -class ida_dbg.tev_reg_value_t(): - - Proxy of C++ tev_reg_value_t class - - -ida_dbg.tev_reg_value_t.reg_idx: - tev_reg_value_t_reg_idx_get(self) -> int - -ida_dbg.tev_reg_value_t.value: - tev_reg_value_t_value_get(self) -> regval_t - -class ida_dbg.tev_reg_values_t(): - - Proxy of C++ qvector<(tev_reg_value_t)> class - - -ida_dbg.tev_reg_values_t.at(): - - at(self, _idx) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.begin(): - - begin(self) -> tev_reg_value_t - begin(self) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.capacity(): - - capacity(self) -> size_t - - -ida_dbg.tev_reg_values_t.clear(): - - clear(self) - - -ida_dbg.tev_reg_values_t.empty(): - - empty(self) -> bool - - -ida_dbg.tev_reg_values_t.end(): - - end(self) -> tev_reg_value_t - end(self) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.erase(): - - erase(self, it) -> tev_reg_value_t - erase(self, first, last) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.extract(): - - extract(self) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.grow(): - - grow(self, x=tev_reg_value_t()) - - -ida_dbg.tev_reg_values_t.inject(): - - inject(self, s, len) - - -ida_dbg.tev_reg_values_t.insert(): - - insert(self, it, x) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.pop_back(): - - pop_back(self) - - -ida_dbg.tev_reg_values_t.push_back(): - - push_back(self, x) - push_back(self) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.qclear(): - - qclear(self) - - -ida_dbg.tev_reg_values_t.reserve(): - - reserve(self, cnt) - - -ida_dbg.tev_reg_values_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_dbg.tev_reg_values_t.size(): - - size(self) -> size_t - - -ida_dbg.tev_reg_values_t.swap(): - - swap(self, r) - - -ida_dbg.tev_reg_values_t.truncate(): - - truncate(self) - - -class ida_dbg.tevinforeg_vec_t(): - - Proxy of C++ qvector<(tev_info_reg_t)> class - - -ida_dbg.tevinforeg_vec_t.at(): - - at(self, _idx) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.begin(): - - begin(self) -> tev_info_reg_t - begin(self) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_dbg.tevinforeg_vec_t.clear(): - - clear(self) - - -ida_dbg.tevinforeg_vec_t.empty(): - - empty(self) -> bool - - -ida_dbg.tevinforeg_vec_t.end(): - - end(self) -> tev_info_reg_t - end(self) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.erase(): - - erase(self, it) -> tev_info_reg_t - erase(self, first, last) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.extract(): - - extract(self) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.grow(): - - grow(self, x=tev_info_reg_t()) - - -ida_dbg.tevinforeg_vec_t.inject(): - - inject(self, s, len) - - -ida_dbg.tevinforeg_vec_t.insert(): - - insert(self, it, x) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.pop_back(): - - pop_back(self) - - -ida_dbg.tevinforeg_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.qclear(): - - qclear(self) - - -ida_dbg.tevinforeg_vec_t.reserve(): - - reserve(self, cnt) - - -ida_dbg.tevinforeg_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_dbg.tevinforeg_vec_t.size(): - - size(self) -> size_t - - -ida_dbg.tevinforeg_vec_t.swap(): - - swap(self, r) - - -ida_dbg.tevinforeg_vec_t.truncate(): - - truncate(self) - - -ida_dbg.update_bpt(): - - update_bpt(bpt) -> bool - - - Update modifiable characteristics of an existing breakpoint. To update - the breakpoint location, use 'change_bptlocs()' \sq{Type, Synchronous - function, Notification, none (synchronous function)}Only the following - fields can be modified: 'bpt_t::cndbody' 'bpt_t::pass_count' - 'bpt_t::flags' 'bpt_t::size' 'bpt_t::type' Changing some properties - will require removing and then re-adding the breakpoint to the process - memory (or the debugger backend), which can lead to race conditions - (i.e., breakpoint(s) can be missed) in case the process is not - suspended. Here are a list of scenarios that will require the - breakpoint to be removed & then re-added: 'bpt_t::size' is modified - 'bpt_t::type' is modified 'bpt_t::flags' 's BPT_ENABLED is modified - 'bpt_t::flags' 's BPT_LOWCND is changed 'bpt_t::flags' 's BPT_LOWCND - remains set, but cndbody changed - - @param bpt (C++: const bpt_t *) - - -ida_dbg.wait_for_next_event(): - - wait_for_next_event(wfne, timeout) -> dbg_event_code_t - - - Wait for the next event.This function (optionally) resumes the process - execution, and waits for a debugger event until a possible timeout - occurs. - - @param wfne: combination of Wait for debugger event flags constants - (C++: int) - @param timeout: number of seconds to wait, -1-infinity (C++: int) - @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= - 0) - - -ida_dbg.write_dbg_memory(): - - write_dbg_memory(ea, py_buf, size=size_t(-1)) -> ssize_t - - - -=== ida_dbg EPYDOC INJECTIONS === -ida_dbg.BKPT_ACTIVE -""" -active? -""" - -ida_dbg.BKPT_BADBPT -""" -failed to write the bpt to the process memory (at least one location) -""" - -ida_dbg.BKPT_CNDREADY -""" -condition has been compiled -""" - -ida_dbg.BKPT_FAKEPEND -""" -bpt of the same type is active at the same address(es) - -fake pending bpt: it is inactive but another -""" - -ida_dbg.BKPT_LISTBPT -""" -include in bpt list (user-defined bpt) -""" - -ida_dbg.BKPT_PAGE -""" -only after writing the bpt to the process. - -written to the process as a page bpt. is available -""" - -ida_dbg.BKPT_PARTIAL -""" -partially active? (some locations were not written yet) -""" - -ida_dbg.BKPT_TRACE -""" -trace bpt; should not be deleted when the process gets suspended -""" - -ida_dbg.BPTCK_ACT -""" -breakpoint is active (written to the process) -""" - -ida_dbg.BPTCK_NO -""" -breakpoint is disabled -""" - -ida_dbg.BPTCK_NONE -""" -breakpoint does not exist -""" - -ida_dbg.BPTCK_YES -""" -breakpoint is enabled -""" - -ida_dbg.BPTEV_ADDED -""" -Breakpoint has been added. -""" - -ida_dbg.BPTEV_CHANGED -""" -Breakpoint has been modified. -""" - -ida_dbg.BPTEV_REMOVED -""" -Breakpoint has been removed. -""" - -ida_dbg.BPT_BRK -""" -suspend execution upon hit -""" - -ida_dbg.BPT_ELANG_SHIFT -""" -index of the extlang (scripting language) of the condition -""" - -ida_dbg.BPT_ENABLED -""" -enabled? -""" - -ida_dbg.BPT_LOWCND -""" -condition is calculated at low level (on the server side) -""" - -ida_dbg.BPT_TRACE -""" -add trace information upon hit -""" - -ida_dbg.BPT_TRACEON -""" -enable tracing when the breakpoint is reached -""" - -ida_dbg.BPT_TRACE_BBLK -""" -basic block tracing -""" - -ida_dbg.BPT_TRACE_FUNC -""" -function tracing -""" - -ida_dbg.BPT_TRACE_INSN -""" -instruction tracing -""" - -ida_dbg.BPT_TRACE_TYPES -""" -trace insns, functions, and basic blocks. if any of 'BPT_TRACE_TYPES' -bits are set but 'BPT_TRACEON' is clear, then turn off tracing for the -specified trace types -""" - -ida_dbg.BPT_UPDMEM -""" -refresh the memory layout and contents before evaluating bpt condition -""" - -ida_dbg.BT_LOG_INSTS -""" -log all instructions in the current basic block -""" - -ida_dbg.DBGINV_ALL -""" -invalidate everything -""" - -ida_dbg.DBGINV_MEMCFG -""" -invalidate cached process segmentation -""" - -ida_dbg.DBGINV_MEMORY -""" -invalidate cached memory contents -""" - -ida_dbg.DBGINV_NONE -""" -invalidate nothing -""" - -ida_dbg.DBGINV_REDRAW -""" -refresh the screen -""" - -ida_dbg.DBGINV_REGS -""" -invalidate cached register values -""" - -ida_dbg.DOPT_BPT_MSGS -""" -log breakpoints -""" - -ida_dbg.DOPT_END_BPT -""" -evaluate event condition on process end -""" - -ida_dbg.DOPT_ENTRY_BPT -""" -break on program entry point -""" - -ida_dbg.DOPT_EXCDLG -""" -exception dialogs: -""" - -ida_dbg.DOPT_INFO_BPT -""" -break on debugging information -""" - -ida_dbg.DOPT_INFO_MSGS -""" -log debugging info events -""" - -ida_dbg.DOPT_LIB_BPT -""" -break on library load/unload -""" - -ida_dbg.DOPT_LIB_MSGS -""" -log library loads/unloads -""" - -ida_dbg.DOPT_LOAD_DINFO -""" -automatically load debug files (pdb) -""" - -ida_dbg.DOPT_REAL_MEMORY -""" -do not hide breakpoint instructions -""" - -ida_dbg.DOPT_REDO_STACK -""" -reconstruct the stack -""" - -ida_dbg.DOPT_SEGM_MSGS -""" -log debugger segments modifications -""" - -ida_dbg.DOPT_START_BPT -""" -break on process start -""" - -ida_dbg.DOPT_TEMP_HWBPT -""" -when possible use hardware bpts for temp bpts -""" - -ida_dbg.DOPT_THREAD_BPT -""" -break on thread start/exit -""" - -ida_dbg.DOPT_THREAD_MSGS -""" -log thread starts/exits -""" - -ida_dbg.DSTATE_NOTASK -""" -no process is currently debugged -""" - -ida_dbg.DSTATE_RUN -""" -process is running -""" - -ida_dbg.DSTATE_SUSP -""" -process is suspended and will not continue -""" - -ida_dbg.EXCDLG_ALWAYS -""" -always display -""" - -ida_dbg.EXCDLG_NEVER -""" -never display exception dialogs -""" - -ida_dbg.EXCDLG_UNKNOWN -""" -display for unknown exceptions -""" - -ida_dbg.FT_LOG_RET -""" -function tracing will log returning instructions -""" - -ida_dbg.IT_LOG_SAME_IP -""" -instruction tracing will log instructions whose IP doesn't change -""" - -ida_dbg.ST_ALREADY_LOGGED -""" -step tracing will be disabled when IP is already logged -""" - -ida_dbg.ST_DIFFERENTIAL -""" -tracing: log only new instructions -""" - -ida_dbg.ST_OPTIONS_MASK -""" -mask of available options, to ensure compatibility with newer IDA -versions -""" - -ida_dbg.ST_OVER_DEBUG_SEG -""" -step tracing will be disabled when IP is in a debugger segment -""" - -ida_dbg.ST_OVER_LIB_FUNC -""" -step tracing will be disabled when IP is in a library function -""" - -ida_dbg.ST_SKIP_LOOPS -""" -step tracing will try to skip loops already recorded -""" - -ida_dbg.WFNE_ANY -""" -return the first event (even if it doesn't suspend the process) -""" - -ida_dbg.WFNE_CONT -""" -continue from the suspended state -""" - -ida_dbg.WFNE_NOWAIT -""" -(to be used with 'WFNE_CONT' ) - -do not wait for any event, immediately return 'DEC_TIMEOUT' -""" - -ida_dbg.WFNE_SILENT -""" -1: be slient, 0:display modal boxes if necessary -""" - -ida_dbg.WFNE_SUSP -""" -wait until the process gets suspended -""" - -ida_dbg.WFNE_USEC -""" -(minimum non-zero timeout is 40000us) - -timeout is specified in microseconds -""" -=== ida_dbg EPYDOC INJECTIONS END === -ida_diskio.close_linput(): - - close_linput(li) - - - Close loader input. - - - @param li (C++: linput_t *) - - -ida_diskio.create_bytearray_linput(): - - create_bytearray_linput(s) -> linput_t * - - - Trivial memory linput. - - -ida_diskio.create_generic_linput(): - - create_generic_linput(gl) -> linput_t * - - - Create a generic linput - - @param gl: linput description. this object will be destroyed by - close_linput() using "delete gl;" (C++: generic_linput_t - *) - - -ida_diskio.create_memory_linput(): - - create_memory_linput(start, size) -> linput_t * - - - Create a linput for process memory. This linput will use - read_dbg_memory() to read data. - - @param start: starting address of the input (C++: ea_t) - @param size: size of the memory area to represent as linput if - unknown, may be passed as 0 (C++: asize_t) - - -ida_diskio.eclose(): - - eclose(fp) - - -ida_diskio.enumerate_files(): - - enumerate_files(path, fname, callback) -> PyObject * - - - Enumerate files in the specified directory while the callback returns 0. - @param path: directory to enumerate files in - @param fname: mask of file names to enumerate - @param callback: a callable object that takes the filename as - its first argument and it returns 0 to continue - enumeration or non-zero to stop enumeration. - @return: - None in case of script errors - tuple(code, fname) : If the callback returns non-zero - - -ida_diskio.fopenA(): - - fopenA(file) -> FILE * - - - Open a file for append in text mode, deny none. - - @param file (C++: const char *) - @return: NULL if failure - - -ida_diskio.fopenM(): - - fopenM(file) -> FILE * - - - Open a file for read/write in binary mode, deny write. - - @param file (C++: const char *) - @return: NULL if failure - - -ida_diskio.fopenRB(): - - fopenRB(file) -> FILE * - - - Open a file for read in binary mode, deny none. - - @param file (C++: const char *) - @return: NULL if failure - - -ida_diskio.fopenRT(): - - fopenRT(file) -> FILE * - - - Open a file for read in text mode, deny none. - - @param file (C++: const char *) - @return: NULL if failure - - -ida_diskio.fopenWB(): - - fopenWB(file) -> FILE * - - - Open a new file for write in binary mode, deny read/write. If a file - exists, it will be removed. - - @param file (C++: const char *) - @return: NULL if failure - - -ida_diskio.fopenWT(): - - fopenWT(file) -> FILE * - - - Open a new file for write in text mode, deny write. If a file exists, - it will be removed. - - @param file (C++: const char *) - @return: NULL if failure - - -class ida_diskio.generic_linput_t(): - - Proxy of C++ generic_linput_t class - - -ida_diskio.generic_linput_t.blocksize: - generic_linput_t_blocksize_get(self) -> uint32 - -ida_diskio.generic_linput_t.filesize: - generic_linput_t_filesize_get(self) -> uint64 - -ida_diskio.generic_linput_t.read(): - - read(self, off, buffer, nbytes) -> ssize_t - - -ida_diskio.get_ida_subdirs(): - - get_ida_subdirs(subdir, flags=0) -> int - - - Get list of directories in which to find a specific IDA resource (see - 'IDA subdirectories' ). The order of the resulting list is as follows: - - - [$IDAUSR/subdir (0..N entries)] - - $IDADIR/subdir - - @param subdir: name of the resource to list (C++: const char *) - @param flags: Subdirectory modification flags bits (C++: int) - @return: number of directories appended to 'dirs' - - -ida_diskio.get_linput_type(): - - get_linput_type(li) -> linput_type_t - - - Get linput type. - - - @param li (C++: linput_t *) - - -ida_diskio.get_special_folder(): - - get_special_folder(csidl) -> bool - - - Get a folder location by CSIDL (see 'Common CSIDLs' ). Path should be - of at least MAX_PATH size - - @param csidl (C++: int) - - -ida_diskio.get_user_idadir(): - - get_user_idadir() -> char const * - - - Get user ida related directory. - - - if $IDAUSR is defined: - - the first element in $IDAUSR - - else - - default user directory ($HOME/.idapro or %APPDATA%Hex-Rays/IDA Pro) - - -ida_diskio.getsysfile(): - - getsysfile(filename, subdir) -> char * - - - Search for IDA system file. This function searches for a file in:each - directory specified by IDAUSR%ida directory [+ subdir] and returns the - first match. - - @param filename (C++: const char *) - @param subdir (C++: const char *) - @return: NULL if not found, otherwise a pointer to full file name. - - -ida_diskio.idadir(): - - idadir(subdir) -> char const * - - - Get IDA directory (if subdir==NULL) or the specified subdirectory (see - 'IDA subdirectories' ) - - @param subdir (C++: const char *) - - -ida_diskio.open_linput(): - - open_linput(file, remote) -> linput_t * - - - Open loader input. - - - @param file (C++: const char *) - @param remote (C++: bool) - - -ida_diskio.qlgetz(): - - qlgetz(li, fpos) -> char * - - - Read a zero-terminated string from the input. If fpos == -1 then no - seek will be performed. - - @param li (C++: linput_t *) - @param fpos (C++: int64) - - - -=== ida_diskio EPYDOC INJECTIONS === -ida_diskio.IDA_SUBDIR_IDADIR_FIRST -""" -$IDADIR/subdir will be first, not last -""" - -ida_diskio.IDA_SUBDIR_IDP -""" -append the processor name as a subdirectory -""" - -ida_diskio.IDA_SUBDIR_ONLY_EXISTING -""" -only existing directories will be present -""" -=== ida_diskio EPYDOC INJECTIONS END === -ida_entry.add_entry(): - - add_entry(ord, ea, name, makecode, flags=0x0) -> bool - - - Add an entry point to the list of entry points. - - @param ord: ordinal number if ordinal number is equal to 'ea' then - ordinal is not used (C++: uval_t) - @param ea: linear address (C++: ea_t) - @param name: name of entry point. If the specified location already - has a name, the old name will be appended to the regular - comment. If name == NULL, then the old name will be - retained. (C++: const char *) - @param makecode: should the kernel convert bytes at the entry point to - instruction(s) (C++: bool) - @param flags: See AEF_* (C++: int) - @return: success (currently always true) - - -ida_entry.get_entry(): - - get_entry(ord) -> ea_t - - - Get entry point address by its ordinal - - @param ord: ordinal number of entry point (C++: uval_t) - @return: address or BADADDR - - -ida_entry.get_entry_forwarder(): - - get_entry_forwarder(ord) -> ssize_t - - - Get forwarder name for the entry point by its ordinal. - - @param ord: ordinal number of entry point (C++: uval_t) - @return: size of entry forwarder name or -1 - - -ida_entry.get_entry_name(): - - get_entry_name(ord) -> ssize_t - - - Get name of the entry point by its ordinal. - - @param ord: ordinal number of entry point (C++: uval_t) - @return: size of entry name or -1 - - -ida_entry.get_entry_ordinal(): - - get_entry_ordinal(idx) -> uval_t - - - Get ordinal number of an entry point. - - @param idx: internal number of entry point. Should be in the range 0.. - get_entry_qty() -1 (C++: size_t) - @return: ordinal number or 0. - - -ida_entry.get_entry_qty(): - - get_entry_qty() -> size_t - - - Get number of entry points. - - -ida_entry.rename_entry(): - - rename_entry(ord, name, flags=0x0) -> bool - - - Rename entry point. - - @param ord: ordinal number of the entry point (C++: uval_t) - @param name: name of entry point. If the specified location already - has a name, the old name will be appended to a repeatable - comment. (C++: const char *) - @param flags: See AEF_* (C++: int) - @return: success - - -ida_entry.set_entry_forwarder(): - - set_entry_forwarder(ord, name, flags=0x0) -> bool - - - Set forwarder name for ordinal. - - @param ord: ordinal number of the entry point (C++: uval_t) - @param name: forwarder name for entry point. (C++: const char *) - @param flags: See AEF_* (C++: int) - @return: success - - - -=== ida_entry EPYDOC INJECTIONS === -ida_entry.AEF_IDBENC -""" -the name is given in the IDB encoding; non-ASCII bytes will be decoded -accordingly Specifying AEF_IDBENC also implies AEF_NODUMMY -""" - -ida_entry.AEF_NODUMMY -""" -it begins with a dummy suffix. See also AEF_IDBENC - -automatically prepend the name with '_' if -""" - -ida_entry.AEF_UTF8 -""" -the name is given in UTF-8 (default) -""" -=== ida_entry EPYDOC INJECTIONS END === -ida_enum.add_enum(): - - add_enum(idx, name, flag) -> enum_t - - - Add new enum type.if idx== 'BADADDR' then add as the last idxif - name==NULL then generate a unique name "enum_%d" - - @param idx (C++: size_t) - @param name (C++: const char *) - @param flag (C++: flags_t) - - -ida_enum.add_enum_member(): - - add_enum_member(id, name, value, bmask=(bmask_t(-1))) -> int - - - Add member to enum type. - - @param id (C++: enum_t) - @param name (C++: const char *) - @param value (C++: uval_t) - @param bmask (C++: bmask_t) - @return: 0 if ok, otherwise one of Add enum member result codes - - -ida_enum.del_enum(): - - del_enum(id) - - - Delete an enum type. - - - @param id (C++: enum_t) - - -ida_enum.del_enum_member(): - - del_enum_member(id, value, serial, bmask) -> bool - - - Delete member of enum type. - - - @param id (C++: enum_t) - @param value (C++: uval_t) - @param serial (C++: uchar) - @param bmask (C++: bmask_t) - - -class ida_enum.enum_member_visitor_t(): - - Proxy of C++ enum_member_visitor_t class - - -ida_enum.enum_member_visitor_t.visit_enum_member(): - - visit_enum_member(self, cid, value) -> int - - -ida_enum.for_all_enum_members(): - - for_all_enum_members(id, cv) -> int - - - Visit all members of a given enum. - - - @param id (C++: enum_t) - @param cv (C++: enum_member_visitor_t &) - - -ida_enum.get_bmask_cmt(): - - get_bmask_cmt(id, bmask, repeatable) -> ssize_t - - -ida_enum.get_bmask_name(): - - get_bmask_name(id, bmask) -> ssize_t - - -ida_enum.get_enum(): - - get_enum(name) -> enum_t - - - Get enum by name. - - - @param name (C++: const char *) - - -ida_enum.get_enum_cmt(): - - get_enum_cmt(id, repeatable) -> ssize_t - - - Get enum comment. - - - @param id (C++: enum_t) - @param repeatable (C++: bool) - - -ida_enum.get_enum_flag(): - - get_enum_flag(id) -> flags_t - - - Get flags determining the representation of the enum. (currently they - define the numeric base: octal, decimal, hex, bin) and signness. - - @param id (C++: enum_t) - - -ida_enum.get_enum_idx(): - - get_enum_idx(id) -> uval_t - - - Get serial number of enum. The serial number determines the place of - the enum in the enum window. - - @param id (C++: enum_t) - - -ida_enum.get_enum_member(): - - get_enum_member(id, value, serial, mask) -> const_t - - - Find an enum member by enum, value and bitmaskif serial -1, return a - member with any serial - - @param id (C++: enum_t) - @param value (C++: uval_t) - @param serial (C++: int) - @param mask (C++: bmask_t) - - -ida_enum.get_enum_member_bmask(): - - get_enum_member_bmask(id) -> bmask_t - - - Get bitmask of an enum member. - - - @param id (C++: const_t) - - -ida_enum.get_enum_member_by_name(): - - get_enum_member_by_name(name) -> const_t - - - Get a reference to an enum member by its name. - - - @param name (C++: const char *) - - -ida_enum.get_enum_member_cmt(): - - get_enum_member_cmt(id, repeatable) -> ssize_t - - - Get enum member's comment. - - - @param id (C++: const_t) - @param repeatable (C++: bool) - - -ida_enum.get_enum_member_enum(): - - get_enum_member_enum(id) -> enum_t - - - Get the parent enum of an enum member. - - - @param id (C++: const_t) - - -ida_enum.get_enum_member_name(): - - get_enum_member_name(id) -> ssize_t - - - Get name of an enum member by const_t. - - - @param id (C++: const_t) - - -ida_enum.get_enum_member_serial(): - - get_enum_member_serial(cid) -> uchar - - - Get serial number of an enum member. - - - @param cid (C++: const_t) - - -ida_enum.get_enum_member_value(): - - get_enum_member_value(id) -> uval_t - - - Get value of an enum member. - - - @param id (C++: const_t) - - -ida_enum.get_enum_name(): - - get_enum_name(id) -> ssize_t - - - Get name of enum. - - - @param id (C++: enum_t) - - -ida_enum.get_enum_qty(): - - get_enum_qty() -> size_t - - - Get number of declared 'enum_t' types. - - -ida_enum.get_enum_size(): - - get_enum_size(id) -> size_t - - - Get the number of the members of the enum. - - - @param id (C++: enum_t) - - -ida_enum.get_enum_type_ordinal(): - - get_enum_type_ordinal(id) -> int32 - - - Get corresponding type ordinal number. - - - @param id (C++: enum_t) - - -ida_enum.get_enum_width(): - - get_enum_width(id) -> size_t - - - Get the width of a enum element allowed values: 0 - (unspecified),1,2,4,8,16,32,64 - - @param id (C++: enum_t) - - -ida_enum.get_first_bmask(): - - get_first_bmask(id) -> bmask_t - - - Get first bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @return: the smallest bitmask for enum, or DEFMASK - - -ida_enum.get_first_enum_member(): - - get_first_enum_member(id, bmask=(bmask_t(-1))) -> uval_t - - -ida_enum.get_first_serial_enum_member(): - - get_first_serial_enum_member(id, value, bmask) -> const_t - - -ida_enum.get_last_bmask(): - - get_last_bmask(id) -> bmask_t - - - Get last bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @return: the biggest bitmask for enum, or DEFMASK - - -ida_enum.get_last_enum_member(): - - get_last_enum_member(id, bmask=(bmask_t(-1))) -> uval_t - - -ida_enum.get_last_serial_enum_member(): - - get_last_serial_enum_member(id, value, bmask) -> const_t - - -ida_enum.get_next_bmask(): - - get_next_bmask(id, bmask) -> bmask_t - - - Get next bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @param bmask (C++: bmask_t) - @return: value of a bitmask with value higher than the specified - value, or DEFMASK - - -ida_enum.get_next_enum_member(): - - get_next_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t - - -ida_enum.get_next_serial_enum_member(): - - get_next_serial_enum_member(in_out_serial, first_cid) -> const_t - - -ida_enum.get_prev_bmask(): - - get_prev_bmask(id, bmask) -> bmask_t - - - Get prev bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @param bmask (C++: bmask_t) - @return: value of a bitmask with value lower than the specified value, - or DEFMASK - - -ida_enum.get_prev_enum_member(): - - get_prev_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t - - -ida_enum.get_prev_serial_enum_member(): - - get_prev_serial_enum_member(in_out_serial, first_cid) -> const_t - - -ida_enum.getn_enum(): - - getn_enum(n) -> enum_t - - - Get enum by its ordinal number (0..n). - - - @param n (C++: size_t) - - -ida_enum.is_bf(): - - is_bf(id) -> bool - - - Is enum a bitfield? (otherwise - plain enum, no bitmasks except for - 'DEFMASK' are allowed) - - @param id (C++: enum_t) - - -ida_enum.is_enum_fromtil(): - - is_enum_fromtil(id) -> bool - - - Does enum come from type library? - - - @param id (C++: enum_t) - - -ida_enum.is_enum_hidden(): - - is_enum_hidden(id) -> bool - - - Is enum collapsed? - - - @param id (C++: enum_t) - - -ida_enum.is_ghost_enum(): - - is_ghost_enum(id) -> bool - - - Is a ghost copy of a local type? - - - @param id (C++: enum_t) - - -ida_enum.is_one_bit_mask(): - - is_one_bit_mask(mask) -> bool - - - Is bitmask one bit? - - - @param mask (C++: bmask_t) - - -ida_enum.set_bmask_cmt(): - - set_bmask_cmt(id, bmask, cmt, repeatable) -> bool - - -ida_enum.set_bmask_name(): - - set_bmask_name(id, bmask, name) -> bool - - -ida_enum.set_enum_bf(): - - set_enum_bf(id, bf) -> bool - - - Set 'bitfield' bit of enum (i.e. convert it to a bitfield) - - - @param id (C++: enum_t) - @param bf (C++: bool) - - -ida_enum.set_enum_cmt(): - - set_enum_cmt(id, cmt, repeatable) -> bool - - - Set comment for enum type. - - - @param id (C++: enum_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -ida_enum.set_enum_flag(): - - set_enum_flag(id, flag) -> bool - - - Set data representation flags. - - - @param id (C++: enum_t) - @param flag (C++: flags_t) - - -ida_enum.set_enum_fromtil(): - - set_enum_fromtil(id, fromtil) -> bool - - - Specify that enum comes from a type library. - - - @param id (C++: enum_t) - @param fromtil (C++: bool) - - -ida_enum.set_enum_ghost(): - - set_enum_ghost(id, ghost) -> bool - - - Specify that enum is a ghost copy of a local type. - - - @param id (C++: enum_t) - @param ghost (C++: bool) - - -ida_enum.set_enum_hidden(): - - set_enum_hidden(id, hidden) -> bool - - - Collapse enum. - - - @param id (C++: enum_t) - @param hidden (C++: bool) - - -ida_enum.set_enum_idx(): - - set_enum_idx(id, idx) -> bool - - - Set serial number of enum. Also see 'get_enum_idx()' . - - @param id (C++: enum_t) - @param idx (C++: size_t) - - -ida_enum.set_enum_member_cmt(): - - set_enum_member_cmt(id, cmt, repeatable) -> bool - - - Set comment for enum member. - - - @param id (C++: const_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -ida_enum.set_enum_member_name(): - - set_enum_member_name(id, name) -> bool - - - Set name of enum member. - - - @param id (C++: const_t) - @param name (C++: const char *) - - -ida_enum.set_enum_name(): - - set_enum_name(id, name) -> bool - - - Set name of enum type. - - - @param id (C++: enum_t) - @param name (C++: const char *) - - -ida_enum.set_enum_type_ordinal(): - - set_enum_type_ordinal(id, ord) - - - Set corresponding type ordinal number. - - - @param id (C++: enum_t) - @param ord (C++: int32) - - -ida_enum.set_enum_width(): - - set_enum_width(id, width) -> bool - - - See comment for 'get_enum_width()' - - - @param id (C++: enum_t) - @param width (C++: int) - - - -=== ida_enum EPYDOC INJECTIONS === -ida_enum.DEFMASK -""" -default bitmask -""" - -ida_enum.ENUM_MEMBER_ERROR_ENUM -""" -bad enum id -""" - -ida_enum.ENUM_MEMBER_ERROR_ILLV -""" -bad bmask and value combination (~bmask & value != 0) -""" - -ida_enum.ENUM_MEMBER_ERROR_MASK -""" -bad bmask -""" - -ida_enum.ENUM_MEMBER_ERROR_NAME -""" -already have member with this name (bad name) -""" - -ida_enum.ENUM_MEMBER_ERROR_VALUE -""" -already have 256 members with this value -""" -=== ida_enum EPYDOC INJECTIONS END === -ida_expr.add_idc_class(): - - add_idc_class(name, super=None) -> idc_class_t * - - - Create a new IDC class. - - @param name: name of the new class (C++: const char *) - @param super: the base class for the new class. if the new class is - not based on any other class, pass NULL (C++: const - idc_class_t *) - @return: pointer to the created class. If such a class already exists, - a pointer to it will be returned. Pointers to other existing - classes may be invalidated by this call. - - -ida_expr.add_idc_func(): - - Extends the IDC language by exposing a new IDC function that is backed up by a Python function - - @param name: IDC function name to expose - @param fp: Python callable that will receive the arguments and return a tuple. - @param args: Arguments. A tuple of idaapi.VT_XXX constants - @param flags: IDC function flags. A combination of EXTFUN_XXX constants - - @return: Boolean - - - Add an IDC function. This function does not modify the predefined - kernel functions. Example: - - static error_t idaapi myfunc5(idc_value_t *argv, idc_value_t *res) - { - msg("myfunc is called with arg0=%a and arg1=%s - ", argv[0].num, argv[1].str); - res->num = 5; // let's return 5 - return eOk; - } - static const char myfunc5_args[] = { VT_LONG, VT_STR, 0 }; - static const ext_idcfunc_t myfunc_desc = { "MyFunc5", myfunc5, myfunc5_args, NULL, 0, EXTFUN_BASE }; - - // after this: - add_idc_func(myfunc_desc); - - // there is a new IDC function which can be called like this: - MyFunc5(0x123, "test"); - - If the function already exists, it will be replaced by the new - function - - @return: success - - -ida_expr.add_idc_gvar(): - - add_idc_gvar(name) -> idc_value_t - - - Add global IDC variable. - - @param name: name of the global variable (C++: const char *) - @return: pointer to the created variable or existing variable. NB: the - returned pointer is valid until a new global var is added. - - -ida_expr.compile_idc_file(): - - compile_idc_file(nonnul_line) -> bool - - -ida_expr.compile_idc_snippet(): - - compile_idc_snippet(func, text, resolver=None, only_safe_funcs=False) -> bool - - - Compile text with IDC statements. - - @param func: name of the function to create out of the snippet (C++: - const char *) - @param text: text to compile (C++: const char *) - @param resolver: callback object to get values of undefined variables - This object will be called if IDC function contains - references to undefined variables. May be NULL. (C++: - idc_resolver_t *) - @param only_safe_funcs: if true, any calls to functions without - EXTFUN_SAFE flag will lead to a compilation - error. (C++: bool) - - -ida_expr.compile_idc_text(): - - compile_idc_text(nonnul_line) -> bool - - -ida_expr.copy_idcv(): - - copy_idcv(dst, src) -> error_t - - - Copy 'src' to 'dst'. For idc objects only a reference is copied. - - @param dst (C++: idc_value_t *) - @param src (C++: const idc_value_t &) - - -ida_expr.create_idcv_ref(): - - create_idcv_ref(ref, v) -> bool - - - Create a variable reference. Currently only references to global - variables can be created. - - @param ref: ptr to the result (C++: idc_value_t *) - @param v: variable to reference (C++: const idc_value_t *) - @return: success - - -ida_expr.deep_copy_idcv(): - - deep_copy_idcv(dst, src) -> error_t - - - Deep copy an IDC object. This function performs deep copy of idc - objects. If 'src' is not an object, 'copy_idcv()' will be called - - @param dst (C++: idc_value_t *) - @param src (C++: const idc_value_t &) - - -ida_expr.del_idc_func(): - - Unregisters the specified IDC function - - @param name: IDC function name to unregister - - @return: Boolean - - - Delete an IDC function - - -ida_expr.del_idcv_attr(): - - del_idcv_attr(obj, attr) -> error_t - - - Delete an object attribute. - - @param obj: variable that holds an object reference (C++: idc_value_t - *) - @param attr: attribute name (C++: const char *) - @return: error code, eOk on success - - -ida_expr.deref_idcv(): - - deref_idcv(v, vref_flags) -> idc_value_t - - - Dereference a 'VT_REF' variable. - - @param v: variable to dereference (C++: idc_value_t *) - @param vref_flags: Dereference IDC variable flags (C++: int) - @return: pointer to the dereference result or NULL. If returns NULL, - qerrno is set to eExecBadRef "Illegal variable reference" - - -ida_expr.eval_expr(): - - eval_expr(rv, where, line) -> bool - - - Compile and calculate an expression. - - @param rv: pointer to the result (C++: idc_value_t *) - @param where: the current linear address in the addressing space of - the program being disassembled. If will be used to - resolve names of local variables etc. if not applicable, - then should be BADADDR . (C++: ea_t) - @param line: the expression to evaluate (C++: const char *) - - -ida_expr.eval_idc_expr(): - - eval_idc_expr(rv, where, line) -> bool - - - Same as 'eval_expr()' , but will always use the IDC interpreter - regardless of the currently installed extlang. - - @param rv (C++: idc_value_t *) - @param where (C++: ea_t) - - -ida_expr.exec_idc_script(): - - exec_idc_script(result, path, func, args, argsnum) -> bool - - - Compile and execute IDC function(s) from file. - - @param result: ptr to idc_value_t to hold result of the function. If - execution fails, this variable will contain the - exception information. You may pass NULL if you are not - interested in the returned value. (C++: idc_value_t *) - @param path: text file containing text of IDC functions (C++: const - char *) - @param func: function name to execute (C++: const char *) - @param args: array of parameters (C++: const idc_value_t) - @param argsnum: number of parameters to pass to 'fname' This number - should be equal to number of parameters the function - expects. (C++: size_t) - - -ida_expr.exec_system_script(): - - exec_system_script(file, complain_if_no_file=True) -> bool - - - Compile and execute "main" function from system file. - - @param file: file name with IDC function(s). The file will be searched - in the idc subdir of ida (C++: const char *) - @param complain_if_no_file: 1: display warning if the file is not - found 0: don't complain if file doesn't - exist (C++: bool) - - -ida_expr.find_idc_class(): - - find_idc_class(name) -> idc_class_t * - - - Find an existing IDC class by its name. - - @param name: name of the class (C++: const char *) - @return: pointer to the class or NULL. The returned pointer is valid - until a new call to add_idc_class() - - -ida_expr.find_idc_func(): - - find_idc_func(prefix, n=0) -> bool - - -ida_expr.find_idc_gvar(): - - find_idc_gvar(name) -> idc_value_t - - - Find an existing global IDC variable by its name. - - @param name: name of the global variable (C++: const char *) - @return: pointer to the variable or NULL. NB: the returned pointer is - valid until a new global var is added. FIXME: it is difficult - to use this function in a thread safe manner - - -ida_expr.first_idcv_attr(): - - first_idcv_attr(obj) -> char const * - - -ida_expr.free_idcv(): - - free_idcv(v) - - - Free storage used by 'VT_STR' / 'VT_OBJ' IDC variables. After this - call the variable has a numeric value 0 - - @param v (C++: idc_value_t *) - - -ida_expr.get_idc_filename(): - - get_idc_filename(file) -> char * - - - Get full name of IDC file name. Search for file in list of include - directories, IDCPATH directory and the current directory. - - @param file: file name without full path (C++: const char *) - @return: NULL is file not found. otherwise returns pointer to buf - - -ida_expr.get_idcv_attr(): - - get_idcv_attr(res, obj, attr, may_use_getattr=False) -> error_t - - - Get an object attribute. - - @param res: buffer for the attribute value (C++: idc_value_t *) - @param obj: variable that holds an object reference. if obj is NULL it - searches global variables, then user functions (C++: const - idc_value_t *) - @param attr: attribute name (C++: const char *) - @param may_use_getattr: may call getattr functions to calculate the - attribute if it does not exist (C++: bool) - @return: error code, eOk on success - - -ida_expr.get_idcv_class_name(): - - get_idcv_class_name(obj) -> error_t - - - Retrieves the IDC object class name. - - @param obj: class instance variable (C++: const idc_value_t *) - @return: error code, eOk on success - - -ida_expr.get_idcv_slice(): - - get_idcv_slice(res, v, i1, i2, flags=0) -> error_t - - - Get slice. - - @param res: output variable that will contain the slice (C++: - idc_value_t *) - @param v: input variable (string or object) (C++: const idc_value_t - *) - @param i1: slice start index (C++: uval_t) - @param i2: slice end index (excluded) (C++: uval_t) - @param flags: IDC variable slice flags or 0 (C++: int) - @return: eOk if success - - -class ida_expr.highlighter_cbs_t(): - - Proxy of C++ highlighter_cbs_t class - - -ida_expr.highlighter_cbs_t.cur_block_state(): - - cur_block_state(self) -> int32 - - -ida_expr.highlighter_cbs_t.prev_block_state(): - - prev_block_state(self) -> int32 - - -ida_expr.highlighter_cbs_t.set_block_state(): - - set_block_state(self, arg0) - - -ida_expr.highlighter_cbs_t.set_style(): - - set_style(self, arg0, arg1, arg2) - - -class ida_expr.idc_global_t(): - - Proxy of C++ idc_global_t class - - -ida_expr.idc_global_t.name: - idc_global_t_name_get(self) -> qstring * - -ida_expr.idc_global_t.value: - idc_global_t_value_get(self) -> idc_value_t - -class ida_expr.idc_value_t(): - - Proxy of C++ idc_value_t class - - -ida_expr.idc_value_t.c_str(): - - c_str(self) -> char const * - - -ida_expr.idc_value_t.clear(): - - clear(self) - - -ida_expr.idc_value_t.create_empty_string(): - - create_empty_string(self) - - -ida_expr.idc_value_t.e: - idc_value_t_e_get(self) -> ushort [6] - -ida_expr.idc_value_t.funcidx: - idc_value_t_funcidx_get(self) -> int - -ida_expr.idc_value_t.i64: - idc_value_t_i64_get(self) -> int64 - -ida_expr.idc_value_t.is_convertible(): - - is_convertible(self) -> bool - - -ida_expr.idc_value_t.is_integral(): - - is_integral(self) -> bool - - -ida_expr.idc_value_t.is_zero(): - - is_zero(self) -> bool - - -ida_expr.idc_value_t.num: - idc_value_t_num_get(self) -> sval_t - -ida_expr.idc_value_t.obj: - idc_value_t_obj_get(self) -> idc_object_t * - -ida_expr.idc_value_t.pvoid: - idc_value_t_pvoid_get(self) -> void * - -ida_expr.idc_value_t.qstr(): - - qstr(self) -> qstring - qstr(self) -> qstring const & - - -ida_expr.idc_value_t.reserve: - idc_value_t_reserve_get(self) -> uchar [sizeof(qstring)] - -ida_expr.idc_value_t.set_float(): - - set_float(self, f) - - -ida_expr.idc_value_t.set_int64(): - - set_int64(self, v) - - -ida_expr.idc_value_t.set_long(): - - set_long(self, v) - - -ida_expr.idc_value_t.set_pvoid(): - - set_pvoid(self, p) - - -ida_expr.idc_value_t.set_string(): - - set_string(self, _str, len) - set_string(self, _str) - - -ida_expr.idc_value_t.swap(): - - swap(self, v) - - -ida_expr.idc_value_t.u_str(): - - u_str(self) -> uchar const * - - -ida_expr.idc_value_t.vtype: - idc_value_t_vtype_get(self) -> char - -class ida_expr.idc_values_t(): - - Proxy of C++ qvector<(idc_value_t)> class - - -ida_expr.idc_values_t.at(): - - at(self, _idx) -> idc_value_t - - -ida_expr.idc_values_t.begin(): - - begin(self) -> idc_value_t - begin(self) -> idc_value_t - - -ida_expr.idc_values_t.capacity(): - - capacity(self) -> size_t - - -ida_expr.idc_values_t.clear(): - - clear(self) - - -ida_expr.idc_values_t.empty(): - - empty(self) -> bool - - -ida_expr.idc_values_t.end(): - - end(self) -> idc_value_t - end(self) -> idc_value_t - - -ida_expr.idc_values_t.erase(): - - erase(self, it) -> idc_value_t - erase(self, first, last) -> idc_value_t - - -ida_expr.idc_values_t.extract(): - - extract(self) -> idc_value_t - - -ida_expr.idc_values_t.grow(): - - grow(self, x=idc_value_t()) - - -ida_expr.idc_values_t.inject(): - - inject(self, s, len) - - -ida_expr.idc_values_t.insert(): - - insert(self, it, x) -> idc_value_t - - -ida_expr.idc_values_t.pop_back(): - - pop_back(self) - - -ida_expr.idc_values_t.push_back(): - - push_back(self, x) - push_back(self) -> idc_value_t - - -ida_expr.idc_values_t.qclear(): - - qclear(self) - - -ida_expr.idc_values_t.reserve(): - - reserve(self, cnt) - - -ida_expr.idc_values_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_expr.idc_values_t.size(): - - size(self) -> size_t - - -ida_expr.idc_values_t.swap(): - - swap(self, r) - - -ida_expr.idc_values_t.truncate(): - - truncate(self) - - -ida_expr.idcv_float(): - - idcv_float(v) -> error_t - - - Convert IDC variable to a floating point. - - - @param v (C++: idc_value_t *) - - -ida_expr.idcv_int64(): - - idcv_int64(v) -> error_t - - - Convert IDC variable to a 64bit number. - - @param v (C++: idc_value_t *) - @return: v = 0 if impossible to convert to int64 - - -ida_expr.idcv_long(): - - idcv_long(v) -> error_t - - - Convert IDC variable to a long (32/64bit) number. - - @param v (C++: idc_value_t *) - @return: v = 0 if impossible to convert to long - - -ida_expr.idcv_num(): - - idcv_num(v) -> error_t - - - Convert IDC variable to a long number. - - @param v (C++: idc_value_t *) - @return: v = 0 if IDC variable = "false" string v = 1 if IDC - variable = "true" string v = number if IDC variable is - number or string containing a number eTypeConflict if IDC - variable = empty string - - -ida_expr.idcv_object(): - - idcv_object(v, icls=None) -> error_t - - - Create an IDC object. The original value of 'v' is discarded (freed). - - @param v: variable to hold the object. any previous value will be - cleaned (C++: idc_value_t *) - @param icls: ptr to the desired class. NULL means "object" class this - ptr must be returned by add_idc_class() or - find_idc_class() (C++: const idc_class_t *) - @return: always eOk - - -ida_expr.idcv_string(): - - idcv_string(v) -> error_t - - - Convert IDC variable to a text string. - - - @param v (C++: idc_value_t *) - - -ida_expr.last_idcv_attr(): - - last_idcv_attr(obj) -> char const * - - -ida_expr.move_idcv(): - - move_idcv(dst, src) -> error_t - - - Move 'src' to 'dst'. This function is more effective than copy_idcv - since it never copies big amounts of data. - - @param dst (C++: idc_value_t *) - @param src (C++: idc_value_t *) - - -ida_expr.next_idcv_attr(): - - next_idcv_attr(obj, attr) -> char const * - - -ida_expr.prev_idcv_attr(): - - prev_idcv_attr(obj, attr) -> char const * - - -ida_expr.print_idcv(): - - print_idcv(v, name=None, indent=0) -> bool - - - Get text representation of 'idc_value_t' . - - - @param v (C++: const idc_value_t &) - @param name (C++: const char *) - @param indent (C++: int) - - -ida_expr.py_add_idc_func(): - - py_add_idc_func(name, fp_ptr, args, defvals, flags) -> bool - - -ida_expr.py_get_call_idc_func(): - - py_get_call_idc_func() -> size_t - - -ida_expr.pyw_convert_defvals(): - - pyw_convert_defvals(out, py_seq) -> bool - - -ida_expr.pyw_register_idc_func(): - - pyw_register_idc_func(name, args, py_fp) -> size_t - - -ida_expr.pyw_unregister_idc_func(): - - pyw_unregister_idc_func(ctxptr) -> bool - - -ida_expr.set_header_path(): - - set_header_path(path, add) -> bool - - - Set or append a header path. IDA looks for the include files in the - appended header paths, then in the ida executable directory. - - @param path: list of directories to add (separated by ';') may be - NULL, in this case nothing is added (C++: const char *) - @param add: true: append. false: remove old paths. (C++: bool) - - -ida_expr.set_idcv_attr(): - - set_idcv_attr(obj, attr, value, may_use_setattr=False) -> error_t - - - Set an object attribute. - - @param obj: variable that holds an object reference. if obj is NULL - then it tries to modify a global variable with the - attribute name (C++: idc_value_t *) - @param attr: attribute name (C++: const char *) - @param value: new attribute value (C++: const idc_value_t &) - @param may_use_setattr: may call setattr functions for the class (C++: - bool) - @return: error code, eOk on success - - -ida_expr.set_idcv_slice(): - - set_idcv_slice(v, i1, i2, _in, flags=0) -> error_t - - - Set slice. - - @param v: variable to modify (string or object) (C++: idc_value_t *) - @param i1: slice start index (C++: uval_t) - @param i2: slice end index (excluded) (C++: uval_t) - @param flags: IDC variable slice flags or 0 (C++: int) - @return: eOk on success - - -ida_expr.swap_idcvs(): - - swap_idcvs(v1, v2) - - - Swap 2 variables. - - - @param v1 (C++: idc_value_t *) - @param v2 (C++: idc_value_t *) - - -ida_expr.throw_idc_exception(): - - throw_idc_exception(r, desc) -> error_t - - - Create an idc execution exception object. This helper function can be - used to return an exception from C++ code to IDC. In other words this - function can be called from 'idc_func_t()' callbacks. Sample usage: if - ( !ok ) return throw_idc_exception(r, "detailed error msg"); - - @param r: object to hold the exception object (C++: idc_value_t *) - @param desc: exception description (C++: const char *) - @return: eExecThrow - - - -=== ida_expr EPYDOC INJECTIONS === -ida_expr.CPL_DEL_MACROS -""" -delete macros at the end of compilation -""" - -ida_expr.CPL_ONLY_SAFE -""" -allow calls of only thread-safe functions -""" - -ida_expr.CPL_USE_LABELS -""" -allow program labels in the script -""" - -ida_expr.IDC_LANG_EXT -""" -IDC script extension. -""" - -ida_expr.VARSLICE_SINGLE -""" -return single index (i2 is ignored) -""" - -ida_expr.VREF_COPY -""" -copy the result to the input var (v) -""" - -ida_expr.VREF_LOOP -""" -dereference until we get a non 'VT_REF' -""" - -ida_expr.VREF_ONCE -""" -dereference only once, do not loop -""" - -ida_expr.VT_FLOAT -""" -Floating point (see 'idc_value_t::e' ) -""" - -ida_expr.VT_FUNC -""" -Function (see 'idc_value_t::funcidx' ) -""" - -ida_expr.VT_INT64 -""" -i64 -""" - -ida_expr.VT_LONG -""" -Integer (see 'idc_value_t::num' ) -""" - -ida_expr.VT_OBJ -""" -Object (see idc_value_t::obj) -""" - -ida_expr.VT_PVOID -""" -void * -""" - -ida_expr.VT_REF -""" -Reference. -""" - -ida_expr.VT_STR -""" -String (see qstr() and similar functions) -""" - -ida_expr.VT_WILD -""" -Function with arbitrary number of arguments. The actual number of -arguments will be passed in 'idc_value_t::num' . This value should not -be used for 'idc_value_t' . -""" - -ida_expr.eExecThrow -""" -See return value of 'idc_func_t' . -""" -=== ida_expr EPYDOC INJECTIONS END === -ida_fixup.calc_fixup_size(): - - calc_fixup_size(type) -> int - - - Calculate size of fixup in bytes (the number of bytes the fixup - patches) - - @param type (C++: fixup_type_t) - - -ida_fixup.contains_fixups(): - - contains_fixups(ea, size) -> bool - - - Does the specified address range contain any fixup information? - - - @param ea (C++: ea_t) - @param size (C++: asize_t) - - -ida_fixup.del_fixup(): - - del_fixup(source) - - - Delete fixup information. - - - @param source (C++: ea_t) - - -ida_fixup.exists_fixup(): - - exists_fixup(source) -> bool - - - Check that a fixup exists at the given address. - - - @param source (C++: ea_t) - - -ida_fixup.find_custom_fixup(): - - find_custom_fixup(name) -> fixup_type_t - - - Get id of a custom fixup handler. - - @param name: name of the custom fixup handler (C++: const char *) - @return: id with FIXUP_CUSTOM bit set or 0 - - -class ida_fixup.fixup_data_t(): - - Proxy of C++ fixup_data_t class - - -ida_fixup.fixup_data_t.calc_size(): - - calc_size(self) -> int - - -ida_fixup.fixup_data_t.clr_extdef(): - - clr_extdef(self) - - -ida_fixup.fixup_data_t.clr_unused(): - - clr_unused(self) - - -ida_fixup.fixup_data_t.displacement: - fixup_data_t_displacement_get(self) -> adiff_t - -ida_fixup.fixup_data_t.get(): - - get(self, source) -> bool - - -ida_fixup.fixup_data_t.get_base(): - - get_base(self) -> ea_t - - -ida_fixup.fixup_data_t.get_desc(): - - get_desc(self, source) -> char const * - - -ida_fixup.fixup_data_t.get_flags(): - - get_flags(self) -> uint32 - - -ida_fixup.fixup_data_t.get_handler(): - - get_handler(self) -> fixup_handler_t const * - - -ida_fixup.fixup_data_t.get_type(): - - get_type(self) -> fixup_type_t - - -ida_fixup.fixup_data_t.get_value(): - - get_value(self, ea) -> uval_t - - -ida_fixup.fixup_data_t.has_base(): - - has_base(self) -> bool - - -ida_fixup.fixup_data_t.is_custom(): - - is_custom(self) -> bool - - -ida_fixup.fixup_data_t.is_extdef(): - - is_extdef(self) -> bool - - -ida_fixup.fixup_data_t.is_unused(): - - is_unused(self) -> bool - - -ida_fixup.fixup_data_t.off: - fixup_data_t_off_get(self) -> ea_t - -ida_fixup.fixup_data_t.patch_value(): - - patch_value(self, ea) -> bool - - -ida_fixup.fixup_data_t.sel: - fixup_data_t_sel_get(self) -> sel_t - -ida_fixup.fixup_data_t.set(): - - set(self, source) - - -ida_fixup.fixup_data_t.set_base(): - - set_base(self, new_base) - - -ida_fixup.fixup_data_t.set_extdef(): - - set_extdef(self) - - -ida_fixup.fixup_data_t.set_sel(): - - set_sel(self, seg) - - -ida_fixup.fixup_data_t.set_target_sel(): - - set_target_sel(self) - - -ida_fixup.fixup_data_t.set_type(): - - set_type(self, type_) - - -ida_fixup.fixup_data_t.set_type_and_flags(): - - set_type_and_flags(self, type_, flags_=0) - - -ida_fixup.fixup_data_t.set_unused(): - - set_unused(self) - - -ida_fixup.fixup_data_t.was_created(): - - was_created(self) -> bool - - -class ida_fixup.fixup_info_t(): - - Proxy of C++ fixup_info_t class - - -ida_fixup.fixup_info_t.ea: - fixup_info_t_ea_get(self) -> ea_t - -ida_fixup.fixup_info_t.fd: - fixup_info_t_fd_get(self) -> fixup_data_t - -ida_fixup.gen_fix_fixups(): - - gen_fix_fixups(_from, to, size) - - - Relocate the bytes with fixup information once more (generic - function). This function may be called from 'loader_t::move_segm()' if - it suits the goal. If 'loader_t::move_segm' is not defined then this - function will be called automatically when moving segments or rebasing - the entire program. Special parameter values (from = BADADDR, size = - 0, to = delta) are used when the function is called from - rebase_program(delta). - - @param _from (C++: ea_t) - @param to (C++: ea_t) - @param size (C++: asize_t) - - -ida_fixup.get_first_fixup_ea(): - - get_first_fixup_ea() -> ea_t - - - Get the first address with fixup information - - @return: the first address with fixup information, or BADADDR - - -ida_fixup.get_fixup(): - - get_fixup(fd, source) -> bool - - - Get fixup information. - - - @param fd (C++: fixup_data_t *) - @param source (C++: ea_t) - - -ida_fixup.get_fixup_desc(): - - get_fixup_desc(source, fd) -> char const * - - - Get FIXUP description comment. - - - @param source (C++: ea_t) - @param fd (C++: const fixup_data_t &) - - -ida_fixup.get_fixup_handler(): - - get_fixup_handler(type) -> fixup_handler_t const * - - - Get handler of standard or custom fixup. - - - @param type (C++: fixup_type_t) - - -ida_fixup.get_fixup_value(): - - get_fixup_value(ea, type) -> uval_t - - - Get the operand value. This function get fixup bytes from data or an - instruction at `ea' and convert them to the operand value (maybe - partially). It is opposite in meaning to the 'patch_fixup_value()' . - For example, FIXUP_HI8 read a byte at 'patch_fixup_value()' `ea' and - shifts it left by 8 bits, or AArch64's custom fixup BRANCH26 get low - 26 bits of the insn at `ea' and shifts it left by 2 bits. This - function is mainly used to get a relocation addend. - 'fixup_handler_t::size' - - @param ea: address to get fixup bytes from, the size of the fixup - bytes depends on the fixup type. (C++: ea_t) - @param type (C++: fixup_type_t) - - -ida_fixup.get_fixups(): - - get_fixups(out, ea, size) -> bool - - -ida_fixup.get_next_fixup_ea(): - - get_next_fixup_ea(ea) -> ea_t - - - Find next address with fixup information - - @param ea: current address (C++: ea_t) - @return: the next address with fixup information, or BADADDR - - -ida_fixup.get_prev_fixup_ea(): - - get_prev_fixup_ea(ea) -> ea_t - - - Find previous address with fixup information - - @param ea: current address (C++: ea_t) - @return: the previous address with fixup information, or BADADDR - - -ida_fixup.is_fixup_custom(): - - is_fixup_custom(type) -> bool - - - Is fixup processed by processor module? - - - @param type (C++: fixup_type_t) - - -ida_fixup.patch_fixup_value(): - - patch_fixup_value(ea, fd) -> bool - - - Patch the fixup bytes. This function updates data or an instruction at - `ea' to the fixup bytes. For example, FIXUP_HI8 updates a byte at `ea' - to the high byte of `fd->off' , or AArch64's custom fixup BRANCH26 - updates low 26 bits of the insn at `ea' to the value of `fd->off' - shifted right by 2. 'fixup_handler_t::size' - - @param ea: address where data are changed, the size of the changed - data depends on the fixup type. (C++: ea_t) - @param fd (C++: const fixup_data_t &) - - -ida_fixup.set_fixup(): - - set_fixup(source, fd) - - - Set fixup information. You should fill 'fixup_data_t' and call this - function and the kernel will remember information in the database. - - @param source: the fixup source address, i.e. the address modified by - the fixup (C++: ea_t) - @param fd: fixup data (C++: const fixup_data_t &) - - - -=== ida_fixup EPYDOC INJECTIONS === -ida_fixup.FIXUPF_CREATED -""" -fixup was not present in the input file -""" - -ida_fixup.FIXUPF_EXTDEF -""" -target is a location (otherwise - segment). Use this bit if the target -is a symbol rather than an offset from the beginning of a segment. -""" - -ida_fixup.FIXUPF_LOADER_MASK -""" -additional flags. The bits from this mask are not stored in the -database and can be used by the loader at its discretion. -""" - -ida_fixup.FIXUPF_REL -""" -fixup is relative to the linear address `base' . Otherwise fixup is -relative to the start of the segment with `sel' selector. -""" - -ida_fixup.FIXUPF_UNUSED -""" -fixup is ignored by IDAdisallows the kernel to convert operandsthis -fixup is not used during output -""" -=== ida_fixup EPYDOC INJECTIONS END === -class ida_fpro.qfile_t(): - - Proxy of C++ qfile_t class - - - A helper class to work with FILE related functions. - - -ida_fpro.qfile_t.close(): - - close(self) - - -ida_fpro.qfile_t.filename(): - - filename(self) -> PyObject * - - -ida_fpro.qfile_t.flush(): - - flush(self) -> int - - - Reads a single character from the file. Returns None if EOF or the read character - - -ida_fpro.qfile_t.from_cobject(): - - from_cobject(pycobject) -> qfile_t - - -ida_fpro.qfile_t.from_fp(): - - from_fp(fp) -> qfile_t - - -ida_fpro.qfile_t.get_char(): - - get_char(self) -> PyObject * - - -ida_fpro.qfile_t.get_fp(): - - get_fp(self) -> FILE * - - -ida_fpro.qfile_t.gets(): - - gets(self, size) -> PyObject * - - - Reads a line from the input file. Returns the read line or None - - -ida_fpro.qfile_t.open(): - - open(self, filename, mode) -> bool - - - Opens a file - @param filename: the file name - @param mode: The mode string, ala fopen() style - @return: Boolean - - -ida_fpro.qfile_t.opened(): - - opened(self) -> bool - - - Checks if the file is opened or not - - -ida_fpro.qfile_t.put_char(): - - put_char(self, chr) -> int - - - Writes a single character to the file - - -ida_fpro.qfile_t.puts(): - - puts(self, str) -> int - - -ida_fpro.qfile_t.read(): - - read(self, size) -> PyObject * - - - Reads from the file. Returns the buffer or None - - -ida_fpro.qfile_t.readbytes(): - - readbytes(self, size, big_endian) -> PyObject * - - - Similar to read() but it respect the endianness - - -ida_fpro.qfile_t.seek(): - - seek(self, offset, whence=SEEK_SET) -> int - - - Set input source position - @return: the new position (not 0 as fseek!) - - -ida_fpro.qfile_t.size(): - - size(self) -> int64 - - -ida_fpro.qfile_t.tell(): - - tell(self) -> int64 - - - Returns the current position - - -ida_fpro.qfile_t.tmpfile(): - - tmpfile() -> qfile_t - - - A static method to construct an instance using a temporary file - - -ida_fpro.qfile_t.write(): - - write(self, py_buf) -> int - - - Writes to the file. Returns 0 or the number of bytes written - - -ida_fpro.qfile_t.writebytes(): - - writebytes(self, py_buf, big_endian) -> int - - - Similar to write() but it respect the endianness - - -ida_fpro.qfile_t_from_cobject(): - - qfile_t_from_cobject(pycobject) -> qfile_t - - -ida_fpro.qfile_t_from_fp(): - - qfile_t_from_fp(fp) -> qfile_t - - -ida_fpro.qfile_t_tmpfile(): - - qfile_t_tmpfile() -> qfile_t - - -ida_frame.add_auto_stkpnt(): - - add_auto_stkpnt(pfn, ea, delta) -> bool - - - Add automatic SP register change point. - - @param pfn: pointer to function. may be NULL. (C++: func_t *) - @param ea: linear address where SP changes. usually this is the end of - the instruction which modifies the stack pointer - (\cmd{ea}+\cmd{size}) (C++: ea_t) - @param delta: difference between old and new values of SP (C++: - sval_t) - @return: success - - -ida_frame.add_frame(): - - add_frame(pfn, frsize, frregs, argsize) -> bool - - - Add function frame. - - @param pfn: pointer to function structure (C++: func_t *) - @param frsize: size of function local variables (C++: sval_t) - @param frregs: size of saved registers (C++: ushort) - @param argsize: size of function arguments range which will be purged - upon return. this parameter is used for __stdcall and - __pascal calling conventions. for other calling - conventions please pass 0. (C++: asize_t) - - -ida_frame.add_regvar(): - - add_regvar(pfn, ea1, ea2, canon, user, cmt) -> int - - - Define a register variable. - - @param pfn: function in which the definition will be created (C++: - func_t *) - @param ea1: range of addresses within the function where the - definition will be used (C++: ea_t) - @param ea2: range of addresses within the function where the - definition will be used (C++: ea_t) - @param canon: name of a general register (C++: const char *) - @param user: user-defined name for the register (C++: const char *) - @param cmt: comment for the definition (C++: const char *) - @return: Register variable error codes - - -ida_frame.add_user_stkpnt(): - - add_user_stkpnt(ea, delta) -> bool - - - Add user-defined SP register change point. - - @param ea: linear address where SP changes (C++: ea_t) - @param delta: difference between old and new values of SP (C++: - sval_t) - @return: success - - -ida_frame.build_stkvar_name(): - - build_stkvar_name(pfn, v) -> ssize_t - - - Build automatic stack variable name. - - @param pfn: pointer to function (can't be NULL!) (C++: const func_t - *) - @param v: value of variable offset (C++: sval_t) - @return: length of stack variable name or -1 - - -ida_frame.build_stkvar_xrefs(): - - build_stkvar_xrefs(out, pfn, mptr) - - - Fill 'out' with a list of all the xrefs made from function 'pfn', to - the argument or variable 'mptr' in 'pfn's stack frame. - - @param out: the list of xrefs to fill. (C++: xreflist_t *) - @param pfn: the function to scan. (C++: func_t *) - @param mptr: the argument/variable in pfn's stack frame. (C++: const - member_t *) - - -ida_frame.calc_stkvar_struc_offset(): - - calc_stkvar_struc_offset(pfn, insn, n) -> ea_t - - - Calculate offset of stack variable in the frame structure. - - @param pfn: pointer to function (can't be NULL!) (C++: func_t *) - @param insn: the instruction (C++: const insn_t &) - @param n: number of operand: (0.. UA_MAXOP -1) -1 if error, return - BADADDR (C++: int) - @return: BADADDR if some error (issue a warning if stack frame is - bad) - - -ida_frame.define_stkvar(): - - define_stkvar(pfn, name, off, flags, ti, nbytes) -> bool - - - Define/redefine a stack variable. - - @param pfn: pointer to function (C++: func_t *) - @param name: variable name, NULL means autogenerate a name (C++: const - char *) - @param off: offset of the stack variable in the frame. negative values - denote local variables, positive - function arguments. - (C++: sval_t) - @param flags: variable type flags ( byte_flag() for a byte variable, - for example) (C++: flags_t) - @param ti: additional type information (like offsets, structs, etc) - (C++: const opinfo_t *) - @param nbytes: number of bytes occupied by the variable (C++: asize_t) - @return: success - - -ida_frame.del_frame(): - - del_frame(pfn) -> bool - - - Delete a function frame. - - @param pfn: pointer to function structure (C++: func_t *) - @return: success - - -ida_frame.del_regvar(): - - del_regvar(pfn, ea1, ea2, canon) -> int - - - Delete a register variable definition. - - @param pfn: function in question (C++: func_t *) - @param ea1: range of addresses within the function where the - definition holds (C++: ea_t) - @param ea2: range of addresses within the function where the - definition holds (C++: ea_t) - @param canon: name of a general register (C++: const char *) - @return: Register variable error codes - - -ida_frame.del_stkpnt(): - - del_stkpnt(pfn, ea) -> bool - - - Delete SP register change point. - - @param pfn: pointer to function. may be NULL. (C++: func_t *) - @param ea: linear address (C++: ea_t) - @return: success - - -ida_frame.delete_unreferenced_stkvars(): - - delete_unreferenced_stkvars(pfn) -> int - - -ida_frame.delete_wrong_stkvar_ops(): - - delete_wrong_stkvar_ops(pfn) -> int - - -ida_frame.find_regvar(): - - find_regvar(pfn, ea1, ea2, canon, user) -> regvar_t - find_regvar(pfn, ea, canon) -> regvar_t - - - Find a register variable definition (powerful version). One of 'canon' - and 'user' should be NULL. If both 'canon' and 'user' are NULL it - returns the first regvar definition in the range. - - @param pfn: function in question (C++: func_t *) - @param ea1: range of addresses to search. ea1==BADADDR means the - entire function (C++: ea_t) - @param ea2: range of addresses to search. ea1==BADADDR means the - entire function (C++: ea_t) - @param canon: name of a general register (C++: const char *) - @param user: user-defined name for the register (C++: const char *) - @return: NULL-not found, otherwise ptr to regvar_t - - -ida_frame.frame_off_args(): - - frame_off_args(pfn) -> ea_t - - - Get starting address of arguments section. - - - @param pfn (C++: const func_t *) - - -ida_frame.frame_off_lvars(): - - frame_off_lvars(pfn) -> ea_t - - - Get start address of local variables section. - - - @param pfn (C++: const func_t *) - - -ida_frame.frame_off_retaddr(): - - frame_off_retaddr(pfn) -> ea_t - - - Get starting address of return address section. - - - @param pfn (C++: const func_t *) - - -ida_frame.frame_off_savregs(): - - frame_off_savregs(pfn) -> ea_t - - - Get starting address of saved registers section. - - - @param pfn (C++: const func_t *) - - -ida_frame.get_effective_spd(): - - get_effective_spd(pfn, ea) -> sval_t - - - Get effective difference between the initial and current values of - ESP. This function returns the sp-diff used by the instruction. The - difference between 'get_spd()' and 'get_effective_spd()' is present - only for instructions like "pop [esp+N]": they modify sp and use the - modified value. - - @param pfn: pointer to function. may be NULL. (C++: func_t *) - @param ea: linear address (C++: ea_t) - @return: 0 or the difference, usually a negative number - - -ida_frame.get_frame(): - - get_frame(pfn) -> struc_t - get_frame(ea) -> struc_t * - - - Get pointer to function frame. - - @param pfn: pointer to function structure (C++: const func_t *) - - -ida_frame.get_frame_part(): - - get_frame_part(range, pfn, part) - - - Get offsets of the frame part in the frame. - - @param range: pointer to the output buffer with the frame part - start/end(exclusive) offsets, can't be NULL (C++: - range_t *) - @param pfn: pointer to function structure, can't be NULL (C++: const - func_t *) - @param part: frame part (C++: frame_part_t) - - -ida_frame.get_frame_retsize(): - - get_frame_retsize(pfn) -> int - - - Get size of function return address. - - @param pfn: pointer to function structure, can't be NULL (C++: const - func_t *) - - -ida_frame.get_frame_size(): - - get_frame_size(pfn) -> asize_t - - - Get full size of a function frame. This function takes into account - size of local variables + size of saved registers + size of return - address + number of purged bytes. The purged bytes correspond to the - arguments of the functions with __stdcall and __fastcall calling - conventions. - - @param pfn: pointer to function structure, may be NULL (C++: const - func_t *) - @return: size of frame in bytes or zero - - -ida_frame.get_func_by_frame(): - - get_func_by_frame(frame_id) -> ea_t - - - Get function by its frame id.this function works only with databases - created by IDA > 5.6 - - @param frame_id: id of the function frame (C++: tid_t) - @return: start address of the function or BADADDR - - -ida_frame.get_min_spd_ea(): - - get_min_spd_ea(pfn) -> ea_t - - -ida_frame.get_sp_delta(): - - get_sp_delta(pfn, ea) -> sval_t - - - Get modification of SP made at the specified location - - @param pfn: pointer to function. may be NULL. (C++: func_t *) - @param ea: linear address (C++: ea_t) - @return: 0 if the specified location doesn't contain a SP change - point. otherwise return delta of SP modification. - - -ida_frame.get_spd(): - - get_spd(pfn, ea) -> sval_t - - - Get difference between the initial and current values of ESP. - - @param pfn: pointer to function. may be NULL. (C++: func_t *) - @param ea: linear address of an instruction (C++: ea_t) - @return: 0 or the difference, usually a negative number. returns the - sp-diff before executing the instruction. - - -ida_frame.get_stkvar(): - - get_stkvar(insn, op, v) -> PyObject * - - - Get pointer to stack variable - @param op: reference to instruction operand - @param v: immediate value in the operand (usually op.addr) - @return: - - None on failure - - tuple(member_t, actval) - where actval: actual value used to fetch stack variable - - -ida_frame.has_regvar(): - - has_regvar(pfn, ea) -> bool - - - Is there a register variable definition? - - @param pfn: function in question (C++: func_t *) - @param ea: current address (C++: ea_t) - - -ida_frame.is_funcarg_off(): - - is_funcarg_off(pfn, frameoff) -> bool - - - Does the given offset lie within the arguments section? - - - @param pfn (C++: const func_t *) - @param frameoff (C++: uval_t) - - -class ida_frame.llabel_t(): - - Proxy of C++ llabel_t class - - -ida_frame.llabel_t.ea: - llabel_t_ea_get(self) -> ea_t - -ida_frame.llabel_t.name: - llabel_t_name_get(self) -> char * - -ida_frame.lvar_off(): - - lvar_off(pfn, frameoff) -> sval_t - - - Does the given offset lie within the local variables section? - - - @param pfn (C++: const func_t *) - @param frameoff (C++: uval_t) - - -ida_frame.recalc_spd(): - - recalc_spd(cur_ea) -> bool - - - Recalculate SP delta for an instruction that stops execution. The next - instruction is not reached from the current instruction. We need to - recalculate SP for the next instruction.This function will create a - new automatic SP register change point if necessary. It should be - called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the - current instruction doesn't pass the execution flow to the next - instruction. - - @param cur_ea: linear address of the current instruction (C++: ea_t) - - -class ida_frame.regvar_t(): - - Proxy of C++ regvar_t class - - -ida_frame.regvar_t._print(): - - _print(self) -> size_t - - -ida_frame.regvar_t.canon: - regvar_t_canon_get(self) -> char * - -ida_frame.regvar_t.clear(): - - clear(self) - - -ida_frame.regvar_t.cmt: - regvar_t_cmt_get(self) -> char * - -ida_frame.regvar_t.compare(): - - compare(self, r) -> int - - -ida_frame.regvar_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_frame.regvar_t.empty(): - - empty(self) -> bool - - -ida_frame.regvar_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_frame.regvar_t.extend(): - - extend(self, ea) - - -ida_frame.regvar_t.intersect(): - - intersect(self, r) - - -ida_frame.regvar_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_frame.regvar_t.size(): - - size(self) -> asize_t - - -ida_frame.regvar_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_frame.regvar_t.user: - regvar_t_user_get(self) -> char * - -ida_frame.rename_regvar(): - - rename_regvar(pfn, v, user) -> int - - - Rename a register variable. - - @param pfn: function in question (C++: func_t *) - @param v: variable to rename (C++: regvar_t *) - @param user: new user-defined name for the register (C++: const char - *) - @return: Register variable error codes - - -ida_frame.set_frame_size(): - - set_frame_size(pfn, frsize, frregs, argsize) -> bool - - - Set size of function frame. Note: The returned size may not include - all stack arguments. It does so only for __stdcall and __fastcall - calling conventions. To get the entire frame size for all cases use - get_struc_size(get_frame(pfn)). - - @param pfn: pointer to function structure (C++: func_t *) - @param frsize: size of function local variables (C++: asize_t) - @param frregs: size of saved registers (C++: ushort) - @param argsize: size of function arguments that will be purged from - the stack upon return (C++: asize_t) - @return: success - - -ida_frame.set_purged(): - - set_purged(ea, nbytes, override_old_value) -> bool - - - Set the number of purged bytes for a function or data item (funcptr). - This function will update the database and plan to reanalyze items - referencing the specified address. It works only for processors with - 'PR_PURGING' bit in 16 and 32 bit modes. - - @param ea: address of the function of item (C++: ea_t) - @param nbytes: number of purged bytes (C++: int) - @param override_old_value: may overwrite old information about purged - bytes (C++: bool) - @return: success - - -ida_frame.set_regvar_cmt(): - - set_regvar_cmt(pfn, v, cmt) -> int - - - Set comment for a register variable. - - @param pfn: function in question (C++: func_t *) - @param v: variable to rename (C++: regvar_t *) - @param cmt: new comment (C++: const char *) - @return: Register variable error codes - - -ida_frame.soff_to_fpoff(): - - soff_to_fpoff(pfn, soff) -> sval_t - - - Convert struct offsets into fp-relative offsets. This function - converts the offsets inside the 'struc_t' object into the frame - pointer offsets (for example, EBP-relative). - - @param pfn (C++: func_t *) - @param soff (C++: uval_t) - - -class ida_frame.stkpnt_t(): - - Proxy of C++ stkpnt_t class - - -ida_frame.stkpnt_t.compare(): - - compare(self, r) -> int - - -ida_frame.stkpnt_t.ea: - stkpnt_t_ea_get(self) -> ea_t - -ida_frame.stkpnt_t.spd: - stkpnt_t_spd_get(self) -> sval_t - -class ida_frame.stkpnts_t(): - - Proxy of C++ stkpnts_t class - - -ida_frame.stkpnts_t.compare(): - - compare(self, r) -> int - - -ida_frame.update_fpd(): - - update_fpd(pfn, fpd) -> bool - - - Update frame pointer delta. - - @param pfn: pointer to function structure (C++: func_t *) - @param fpd: new fpd value. cannot be bigger than the local variable - range size. (C++: asize_t) - @return: success - - -class ida_frame.xreflist_entry_t(): - - Proxy of C++ xreflist_entry_t class - - -ida_frame.xreflist_entry_t.ea: - xreflist_entry_t_ea_get(self) -> ea_t - -ida_frame.xreflist_entry_t.opnum: - xreflist_entry_t_opnum_get(self) -> uchar - -ida_frame.xreflist_entry_t.type: - xreflist_entry_t_type_get(self) -> uchar - -class ida_frame.xreflist_t(): - - Proxy of C++ qvector<(xreflist_entry_t)> class - - -ida_frame.xreflist_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_frame.xreflist_t.at(): - - at(self, _idx) -> xreflist_entry_t - - -ida_frame.xreflist_t.begin(): - - begin(self) -> xreflist_entry_t - begin(self) -> xreflist_entry_t - - -ida_frame.xreflist_t.capacity(): - - capacity(self) -> size_t - - -ida_frame.xreflist_t.clear(): - - clear(self) - - -ida_frame.xreflist_t.empty(): - - empty(self) -> bool - - -ida_frame.xreflist_t.end(): - - end(self) -> xreflist_entry_t - end(self) -> xreflist_entry_t - - -ida_frame.xreflist_t.erase(): - - erase(self, it) -> xreflist_entry_t - erase(self, first, last) -> xreflist_entry_t - - -ida_frame.xreflist_t.extract(): - - extract(self) -> xreflist_entry_t - - -ida_frame.xreflist_t.find(): - - find(self, x) -> xreflist_entry_t - find(self, x) -> xreflist_entry_t - - -ida_frame.xreflist_t.grow(): - - grow(self, x=xreflist_entry_t()) - - -ida_frame.xreflist_t.has(): - - has(self, x) -> bool - - -ida_frame.xreflist_t.inject(): - - inject(self, s, len) - - -ida_frame.xreflist_t.insert(): - - insert(self, it, x) -> xreflist_entry_t - - -ida_frame.xreflist_t.pop_back(): - - pop_back(self) - - -ida_frame.xreflist_t.push_back(): - - push_back(self, x) - push_back(self) -> xreflist_entry_t - - -ida_frame.xreflist_t.qclear(): - - qclear(self) - - -ida_frame.xreflist_t.reserve(): - - reserve(self, cnt) - - -ida_frame.xreflist_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_frame.xreflist_t.size(): - - size(self) -> size_t - - -ida_frame.xreflist_t.swap(): - - swap(self, r) - - -ida_frame.xreflist_t.truncate(): - - truncate(self) - - - -=== ida_frame EPYDOC INJECTIONS === -ida_frame.REGVAR_ERROR_ARG -""" -function arguments are bad -""" - -ida_frame.REGVAR_ERROR_NAME -""" -the provided name(s) can't be accepted -""" - -ida_frame.REGVAR_ERROR_OK -""" -all ok -""" - -ida_frame.REGVAR_ERROR_RANGE -""" -the definition range is bad -""" - -ida_frame.STKVAR_VALID_SIZE -""" -x.dtyp contains correct variable type (for insns like 'lea' this bit -must be off) in general, dr_O references do not allow to determine the -variable size -""" -=== ida_frame EPYDOC INJECTIONS END === -ida_funcs.add_func(): - - add_func(ea1, ea2=BADADDR) -> bool - - - Add a new function. If the function end address is 'BADADDR' , then - IDA will try to determine the function bounds by calling - find_func_bounds(..., 'FIND_FUNC_DEFINE' ). - - @param ea1: start address (C++: ea_t) - @param ea2: end address (C++: ea_t) - @return: success - - -ida_funcs.add_func_ex(): - - add_func_ex(pfn) -> bool - - - Add a new function. If the fn->end_ea is 'BADADDR' , then IDA will try - to determine the function bounds by calling find_func_bounds(..., - 'FIND_FUNC_DEFINE' ). - - @param pfn: ptr to filled function structure (C++: func_t *) - @return: success - - -ida_funcs.add_regarg(): - - add_regarg(pfn, reg, tif, name) - - -ida_funcs.append_func_tail(): - - append_func_tail(pfn, ea1, ea2) -> bool - - - Append a new tail chunk to the function definition. If the tail - already exists, then it will simply be added to the function tail list - Otherwise a new tail will be created and its owner will be set to be - our function If a new tail cannot be created, then this function will - fail. - - @param pfn (C++: func_t *) - @param ea1: start of the tail. If a tail already exists at the - specified address it must start at 'ea1' (C++: ea_t) - @param ea2: end of the tail. If a tail already exists at the specified - address it must end at 'ea2'. If specified as BADADDR, IDA - will determine the end address itself. (C++: ea_t) - - -ida_funcs.apply_idasgn_to(): - - apply_idasgn_to(signame, ea, is_startup) -> int - - - Apply a signature file to the specified address. - - @param signame: short name of signature file (the file name without - path) (C++: const char *) - @param ea: address to apply the signature (C++: ea_t) - @param is_startup: if set, then the signature is treated as a startup - one for startup signature ida doesn't rename the - first function of the applied module. (C++: bool) - @return: Library function codes - - -ida_funcs.apply_startup_sig(): - - apply_startup_sig(ea, startup) -> bool - - - Apply a startup signature file to the specified address. - - @param ea: address to apply the signature to; usually \inf{start_ea} - (C++: ea_t) - @param startup: the name of the signature file without path and - extension (C++: const char *) - @return: true if successfully applied the signature - - -ida_funcs.calc_func_size(): - - calc_func_size(pfn) -> asize_t - - - Calculate function size. This function takes into account all - fragments of the function. - - @param pfn: ptr to function structure (C++: func_t *) - - -ida_funcs.calc_idasgn_state(): - - calc_idasgn_state(n) -> int - - - Get state of a signature in the list of planned signatures - - @param n: number of signature in the list (0.. get_idasgn_qty() -1) - (C++: int) - @return: state of signature or IDASGN_BADARG - - -ida_funcs.calc_thunk_func_target(): - - calc_thunk_func_target(pfn) -> ea_t - - - Calculate target of a thunk function. - - @param pfn: pointer to function (may not be NULL) (C++: func_t *) - @return: the target function or BADADDR - - -ida_funcs.del_func(): - - del_func(ea) -> bool - - - Delete a function. - - @param ea: any address in the function entry chunk (C++: ea_t) - @return: success - - -ida_funcs.del_idasgn(): - - del_idasgn(n) -> int - - - Remove signature from the list of planned signatures. - - @param n: number of signature in the list (0.. get_idasgn_qty() -1) - (C++: int) - @return: IDASGN_OK , IDASGN_BADARG , IDASGN_APPLIED - - -ida_funcs.f_any(): - - f_any(arg1, arg2) -> bool - - - Helper function to accept any address. - - -ida_funcs.find_func_bounds(): - - find_func_bounds(nfn, flags) -> int - - - Determine the boundaries of a new function. This function tries to - find the start and end addresses of a new function. It calls the - module with \ph{func_bounds} in order to fine tune the function - boundaries. - - @param nfn: structure to fill with information \ nfn->start_ea points - to the start address of the new function. (C++: func_t *) - @param flags: Find function bounds flags (C++: int) - @return: Find function bounds result codes - - -ida_funcs.func_contains(): - - func_contains(pfn, ea) -> bool - - - Does the given function contain the given address? - - - @param pfn (C++: func_t *) - @param ea (C++: ea_t) - - -ida_funcs.func_does_return(): - - func_does_return(callee) -> bool - - - Does the function return?. To calculate the answer, 'FUNC_NORET' flag - and is_noret() are consulted The latter is required for imported - functions in the .idata section. Since in .idata we have only function - pointers but not functions, we have to introduce a special flag for - them. - - @param callee (C++: ea_t) - - -ida_funcs.func_item_iterator_decode_preceding_insn(): - - func_item_iterator_decode_preceding_insn(fii, visited, p_farref, out) -> bool - - -ida_funcs.func_item_iterator_decode_prev_insn(): - - func_item_iterator_decode_prev_insn(fii, out) -> bool - - -ida_funcs.func_item_iterator_next(): - - func_item_iterator_next(fii, testf, ud) -> bool - - -ida_funcs.func_item_iterator_prev(): - - func_item_iterator_prev(fii, testf, ud) -> bool - - -class ida_funcs.func_item_iterator_t(): - - Proxy of C++ func_item_iterator_t class - - -ida_funcs.func_item_iterator_t.chunk(): - - chunk(self) -> range_t - - -ida_funcs.func_item_iterator_t.current(): - - current(self) -> ea_t - - -ida_funcs.func_item_iterator_t.decode_preceding_insn(): - - decode_preceding_insn(self, visited, p_farref, out) -> bool - - -ida_funcs.func_item_iterator_t.decode_prev_insn(): - - decode_prev_insn(self, out) -> bool - - -ida_funcs.func_item_iterator_t.first(): - - first(self) -> bool - - -ida_funcs.func_item_iterator_t.last(): - - last(self) -> bool - - -ida_funcs.func_item_iterator_t.next(): - - next(self, func, ud) -> bool - - -ida_funcs.func_item_iterator_t.next_addr(): - - next_addr(self) -> bool - - -ida_funcs.func_item_iterator_t.next_code(): - - next_code(self) -> bool - - -ida_funcs.func_item_iterator_t.next_data(): - - next_data(self) -> bool - - -ida_funcs.func_item_iterator_t.next_head(): - - next_head(self) -> bool - - -ida_funcs.func_item_iterator_t.next_not_tail(): - - next_not_tail(self) -> bool - - -ida_funcs.func_item_iterator_t.prev(): - - prev(self, func, ud) -> bool - - -ida_funcs.func_item_iterator_t.prev_addr(): - - prev_addr(self) -> bool - - -ida_funcs.func_item_iterator_t.prev_code(): - - prev_code(self) -> bool - - -ida_funcs.func_item_iterator_t.prev_data(): - - prev_data(self) -> bool - - -ida_funcs.func_item_iterator_t.prev_head(): - - prev_head(self) -> bool - - -ida_funcs.func_item_iterator_t.prev_not_tail(): - - prev_not_tail(self) -> bool - - -ida_funcs.func_item_iterator_t.set(): - - set(self, pfn, _ea=BADADDR) -> bool - - -ida_funcs.func_item_iterator_t.set_range(): - - set_range(self, ea1, ea2) -> bool - - -ida_funcs.func_parent_iterator_set(): - - func_parent_iterator_set(fpi, pfn) -> bool - - -class ida_funcs.func_parent_iterator_t(): - - Proxy of C++ func_parent_iterator_t class - - -ida_funcs.func_parent_iterator_t.first(): - - first(self) -> bool - - -ida_funcs.func_parent_iterator_t.last(): - - last(self) -> bool - - -ida_funcs.func_parent_iterator_t.next(): - - next(self) -> bool - - -ida_funcs.func_parent_iterator_t.parent(): - - parent(self) -> ea_t - - -ida_funcs.func_parent_iterator_t.prev(): - - prev(self) -> bool - - -ida_funcs.func_parent_iterator_t.reset_fnt(): - - reset_fnt(self, _fnt) - - -ida_funcs.func_parent_iterator_t.set(): - - set(self, _fnt) -> bool - - -class ida_funcs.func_t(): - - Proxy of C++ func_t class - - -ida_funcs.func_t._print(): - - _print(self) -> size_t - - -ida_funcs.func_t.analyzed_sp(): - - analyzed_sp(self) -> bool - - -ida_funcs.func_t.argsize: - func_t_argsize_get(self) -> asize_t - -ida_funcs.func_t.clear(): - - clear(self) - - -ida_funcs.func_t.color: - func_t_color_get(self) -> bgcolor_t - -ida_funcs.func_t.compare(): - - compare(self, r) -> int - - -ida_funcs.func_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_funcs.func_t.does_return(): - - does_return(self) -> bool - - -ida_funcs.func_t.empty(): - - empty(self) -> bool - - -ida_funcs.func_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_funcs.func_t.extend(): - - extend(self, ea) - - -ida_funcs.func_t.flags: - func_t_flags_get(self) -> uint64 - -ida_funcs.func_t.fpd: - func_t_fpd_get(self) -> asize_t - -ida_funcs.func_t.frame: - func_t_frame_get(self) -> uval_t - -ida_funcs.func_t.frregs: - func_t_frregs_get(self) -> ushort - -ida_funcs.func_t.frsize: - func_t_frsize_get(self) -> asize_t - -ida_funcs.func_t.intersect(): - - intersect(self, r) - - -ida_funcs.func_t.is_far(): - - is_far(self) -> bool - - -ida_funcs.func_t.llabelqty: - func_t_llabelqty_get(self) -> int - -ida_funcs.func_t.llabels: - func_t_llabels_get(self) -> llabel_t * - -ida_funcs.func_t.need_prolog_analysis(): - - need_prolog_analysis(self) -> bool - - -ida_funcs.func_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_funcs.func_t.owner: - func_t_owner_get(self) -> ea_t - -ida_funcs.func_t.pntqty: - func_t_pntqty_get(self) -> uint32 - -ida_funcs.func_t.points: - - __get_points__(self) -> stkpnt_array - - -ida_funcs.func_t.referers: - func_t_referers_get(self) -> ea_t * - -ida_funcs.func_t.refqty: - func_t_refqty_get(self) -> int - -ida_funcs.func_t.regargqty: - func_t_regargqty_get(self) -> int - -ida_funcs.func_t.regargs: - func_t_regargs_get(self) -> regarg_t - -ida_funcs.func_t.regvarqty: - func_t_regvarqty_get(self) -> int - -ida_funcs.func_t.regvars: - - __get_regvars__(self) -> regvar_array - - -ida_funcs.func_t.size(): - - size(self) -> asize_t - - -ida_funcs.func_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_funcs.func_t.tailqty: - func_t_tailqty_get(self) -> int - -ida_funcs.func_t.tails: - - __get_tails__(self) -> range_array - - -ida_funcs.func_t__from_ptrval__(): - - func_t__from_ptrval__(ptrval) -> func_t - - -ida_funcs.func_tail_iterator_set(): - - func_tail_iterator_set(fti, pfn, ea) -> bool - - -ida_funcs.func_tail_iterator_set_ea(): - - func_tail_iterator_set_ea(fti, ea) -> bool - - -class ida_funcs.func_tail_iterator_t(): - - Proxy of C++ func_tail_iterator_t class - - -ida_funcs.func_tail_iterator_t.chunk(): - - chunk(self) -> range_t - - -ida_funcs.func_tail_iterator_t.first(): - - first(self) -> bool - - -ida_funcs.func_tail_iterator_t.last(): - - last(self) -> bool - - -ida_funcs.func_tail_iterator_t.main(): - - main(self) -> bool - - -ida_funcs.func_tail_iterator_t.next(): - - next(self) -> bool - - -ida_funcs.func_tail_iterator_t.prev(): - - prev(self) -> bool - - -ida_funcs.func_tail_iterator_t.set(): - - set(self, _pfn, ea=BADADDR) -> bool - - -ida_funcs.func_tail_iterator_t.set_ea(): - - set_ea(self, ea) -> bool - - -ida_funcs.func_tail_iterator_t.set_range(): - - set_range(self, ea1, ea2) -> bool - - -ida_funcs.get_current_idasgn(): - - get_current_idasgn() -> int - - - Get number of the the current signature. - - @return: 0..n-1 - - -ida_funcs.get_fchunk(): - - get_fchunk(ea) -> func_t - - - Get pointer to function chunk structure by address. - - @param ea: any address in a function chunk (C++: ea_t) - @return: ptr to a function chunk or NULL. This function may return a - function entry as well as a function tail. - - -ida_funcs.get_fchunk_num(): - - get_fchunk_num(ea) -> int - - - Get ordinal number of a function chunk in the global list of function - chunks. - - @param ea: any address in the function chunk (C++: ea_t) - @return: number of function chunk (0.. get_fchunk_qty() -1). -1 means - 'no function chunk at the specified address'. - - -ida_funcs.get_fchunk_qty(): - - get_fchunk_qty() -> size_t - - - Get total number of function chunks in the program. - - -ida_funcs.get_fchunk_referer(): - - get_fchunk_referer(ea, idx) -> ea_t - - -ida_funcs.get_func(): - - get_func(ea) -> func_t - - - Get pointer to function structure by address. - - @param ea: any address in a function (C++: ea_t) - @return: ptr to a function or NULL. This function returns a function - entry chunk. - - -ida_funcs.get_func_bitness(): - - get_func_bitness(pfn) -> int - - - Get function bitness (which is equal to the function segment bitness). - pfn==NULL => returns 0 - - @param pfn (C++: const func_t *) - - -ida_funcs.get_func_bits(): - - get_func_bits(pfn) -> int - - - Get number of bits in the function addressing. - - - @param pfn (C++: const func_t *) - - -ida_funcs.get_func_bytes(): - - get_func_bytes(pfn) -> int - - - Get number of bytes in the function addressing. - - - @param pfn (C++: const func_t *) - - -ida_funcs.get_func_chunknum(): - - get_func_chunknum(pfn, ea) -> int - - - Get the containing tail chunk of 'ea'. - - @param pfn (C++: func_t *) - @param ea (C++: ea_t) - - -ida_funcs.get_func_cmt(): - - get_func_cmt(pfn, repeatable) -> ssize_t - - - Get function comment. - - @param pfn: ptr to function structure (C++: const func_t *) - @param repeatable: get repeatable comment? (C++: bool) - @return: size of comment or -1 In fact this function works with - function chunks too. - - -ida_funcs.get_func_name(): - - get_func_name(ea) -> ssize_t - - - Get function name. - - @param ea: any address in the function (C++: ea_t) - @return: length of the function name - - -ida_funcs.get_func_num(): - - get_func_num(ea) -> int - - - Get ordinal number of a function. - - @param ea: any address in the function (C++: ea_t) - @return: number of function (0.. get_func_qty() -1). -1 means 'no - function at the specified address'. - - -ida_funcs.get_func_qty(): - - get_func_qty() -> size_t - - - Get total number of functions in the program. - - -ida_funcs.get_func_ranges(): - - get_func_ranges(ranges, pfn) -> ea_t - - - Get function ranges. - - @param ranges: buffer to receive the range info (C++: rangeset_t *) - @param pfn: ptr to function structure (C++: func_t *) - @return: end address of the last function range (BADADDR-error) - - -ida_funcs.get_idasgn_desc(): - - get_idasgn_desc(n) -> PyObject * - - - Get information about a signature in the list. - It returns: (name of signature, names of optional libraries) - - See also: get_idasgn_desc_with_matches - - @param n: number of signature in the list (0..get_idasgn_qty()-1) - @return: None on failure or tuple(signame, optlibs) - - -ida_funcs.get_idasgn_desc_with_matches(): - - get_idasgn_desc_with_matches(n) -> PyObject * - - - Get information about a signature in the list. - It returns: (name of signature, names of optional libraries, number of matches) - - @param n: number of signature in the list (0..get_idasgn_qty()-1) - @return: None on failure or tuple(signame, optlibs, nmatches) - - -ida_funcs.get_idasgn_qty(): - - get_idasgn_qty() -> int - - - Get number of signatures in the list of planned and applied - signatures. - - @return: 0..n - - -ida_funcs.get_idasgn_title(): - - get_idasgn_title(name) -> ssize_t - - - Get full description of the signature by its short name. - - @param name: short name of a signature (C++: const char *) - @return: size of signature description or -1 - - -ida_funcs.get_next_fchunk(): - - get_next_fchunk(ea) -> func_t - - - Get pointer to the next function chunk in the global list. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to function chunk or NULL if next function chunk doesn't - exist - - -ida_funcs.get_next_func(): - - get_next_func(ea) -> func_t - - - Get pointer to the next function. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to function or NULL if next function doesn't exist - - -ida_funcs.get_next_func_addr(): - - get_next_func_addr(pfn, ea) -> ea_t - - -ida_funcs.get_prev_fchunk(): - - get_prev_fchunk(ea) -> func_t - - - Get pointer to the previous function chunk in the global list. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to function chunk or NULL if previous function chunk - doesn't exist - - -ida_funcs.get_prev_func(): - - get_prev_func(ea) -> func_t - - - Get pointer to the previous function. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to function or NULL if previous function doesn't exist - - -ida_funcs.get_prev_func_addr(): - - get_prev_func_addr(pfn, ea) -> ea_t - - -ida_funcs.getn_fchunk(): - - getn_fchunk(n) -> func_t - - - Get pointer to function chunk structure by number. - - @param n: number of function chunk, is in range 0.. get_fchunk_qty() - -1 (C++: int) - @return: ptr to a function chunk or NULL. This function may return a - function entry as well as a function tail. - - -ida_funcs.getn_func(): - - getn_func(n) -> func_t - - - Get pointer to function structure by number. - - @param n: number of function, is in range 0.. get_func_qty() -1 (C++: - size_t) - @return: ptr to a function or NULL. This function returns a function - entry chunk. - - -ida_funcs.is_finally_visible_func(): - - is_finally_visible_func(pfn) -> bool - - - Is the function visible (event after considering 'SCF_SHHID_FUNC' )? - - - @param pfn (C++: func_t *) - - -ida_funcs.is_func_entry(): - - is_func_entry(pfn) -> bool - - - Does function describe a function entry chunk? - - - @param pfn (C++: const func_t *) - - -ida_funcs.is_func_locked(): - - is_func_locked(pfn) -> bool - - - Is the function pointer locked? - - - @param pfn (C++: const func_t *) - - -ida_funcs.is_func_tail(): - - is_func_tail(pfn) -> bool - - - Does function describe a function tail chunk? - - - @param pfn (C++: const func_t *) - - -ida_funcs.is_same_func(): - - is_same_func(ea1, ea2) -> bool - - - Do two addresses belong to the same function? - - - @param ea1 (C++: ea_t) - @param ea2 (C++: ea_t) - - -ida_funcs.is_visible_func(): - - is_visible_func(pfn) -> bool - - - Is the function visible (not hidden)? - - - @param pfn (C++: func_t *) - - -class ida_funcs.lock_func(): - - Proxy of C++ lock_func class - - -ida_funcs.lock_func_range(): - - lock_func_range(pfn, lock) - - - Lock function pointer Locked pointers are guaranteed to remain valid - until they are unlocked. Ranges with locked pointers cannot be deleted - or moved. - - @param pfn (C++: const func_t *) - @param lock (C++: bool) - - -ida_funcs.plan_to_apply_idasgn(): - - plan_to_apply_idasgn(fname) -> int - - - Add a signature file to the list of planned signature files. - - @param fname: file name. should not contain directory part. (C++: - const char *) - @return: 0 if failed, otherwise number of planned (and applied) - signatures - - -class ida_funcs.range_array(): - - Proxy of C++ dynamic_wrapped_array_t<(range_t)> class - - -ida_funcs.range_array.count: - range_array_count_get(self) -> size_t - -ida_funcs.range_array.data: - range_array_data_get(self) -> range_t - -ida_funcs.read_regargs(): - - read_regargs(pfn) - - -ida_funcs.reanalyze_function(): - - reanalyze_function(pfn, ea1=0, ea2=BADADDR, analyze_parents=False) - - - Reanalyze a function. This function plans to analyzes all chunks of - the given function. Optional parameters (ea1, ea2) may be used to - narrow the analyzed range. - - @param pfn: pointer to a function (C++: func_t *) - @param ea1: start of the range to analyze (C++: ea_t) - @param ea2: end of range to analyze (C++: ea_t) - @param analyze_parents: meaningful only if pfn points to a function - tail. if true, all tail parents will be - reanalyzed. if false, only the given tail will - be reanalyzed. (C++: bool) - - -ida_funcs.reanalyze_noret_flag(): - - reanalyze_noret_flag(ea) -> bool - - - Plan to reanalyze noret flag. This function does not remove FUNC_NORET - if it is already present. It just plans to reanalysis. - - @param ea (C++: ea_t) - - -class ida_funcs.regarg_t(): - - Proxy of C++ regarg_t class - - -ida_funcs.regarg_t.name: - regarg_t_name_get(self) -> char * - -ida_funcs.regarg_t.reg: - regarg_t_reg_get(self) -> int - -ida_funcs.regarg_t.type: - regarg_t_type_get(self) -> type_t * - -class ida_funcs.regvar_array(): - - Proxy of C++ dynamic_wrapped_array_t<(regvar_t)> class - - -ida_funcs.regvar_array.count: - regvar_array_count_get(self) -> size_t - -ida_funcs.regvar_array.data: - regvar_array_data_get(self) -> regvar_t * - -ida_funcs.remove_func_tail(): - - remove_func_tail(pfn, tail_ea) -> bool - - - Remove a function tail. If the tail belongs only to one function, it - will be completely removed. Otherwise if the function was the tail - owner, the first function using this tail becomes the owner of the - tail. - - @param pfn (C++: func_t *) - @param tail_ea (C++: ea_t) - - -ida_funcs.set_func_cmt(): - - set_func_cmt(pfn, cmt, repeatable) -> bool - - - Set function comment. This function works with function chunks too. - - @param pfn: ptr to function structure (C++: const func_t *) - @param cmt: comment string, may be multiline (with ' '). Use empty - str ("") to delete comment (C++: const char *) - @param repeatable: set repeatable comment? (C++: bool) - - -ida_funcs.set_func_end(): - - set_func_end(ea, newend) -> bool - - - Move function chunk end address. - - @param ea: any address in the function (C++: ea_t) - @param newend: new end address of the function (C++: ea_t) - @return: success - - -ida_funcs.set_func_name_if_jumpfunc(): - - set_func_name_if_jumpfunc(pfn, oldname) -> int - - - Give a meaningful name to function if it consists of only 'jump' - instruction. - - @param pfn: pointer to function (may be NULL) (C++: func_t *) - @param oldname: old name of function. if old name was in "j_..." form, - then we may discard it and set a new name. if oldname - is not known, you may pass NULL. (C++: const char *) - @return: success - - -ida_funcs.set_func_start(): - - set_func_start(ea, newstart) -> int - - - Move function chunk start address. - - @param ea: any address in the function (C++: ea_t) - @param newstart: new end address of the function (C++: ea_t) - @return: Function move result codes - - -ida_funcs.set_noret_insn(): - - set_noret_insn(insn_ea, noret) -> bool - - - Signal a non-returning instruction. This function can be used by the - processor module to tell the kernel about non-returning instructions - (like call exit). The kernel will perform the global function analysis - and find out if the function returns at all. This analysis will be - done at the first call to 'func_does_return()' - - @param insn_ea (C++: ea_t) - @param noret (C++: bool) - @return: true if the instruction 'noret' flag has been changed - - -ida_funcs.set_tail_owner(): - - set_tail_owner(fnt, func_start) -> bool - - - Set a function as the possessing function of a function tail. The - function should already refer to the tail (after append_func_tail). - - @param fnt (C++: func_t *) - @param func_start (C++: ea_t) - - -ida_funcs.set_visible_func(): - - set_visible_func(pfn, visible) - - - Set visibility of function. - - - @param pfn (C++: func_t *) - @param visible (C++: bool) - - -class ida_funcs.stkpnt_array(): - - Proxy of C++ dynamic_wrapped_array_t<(stkpnt_t)> class - - -ida_funcs.stkpnt_array.count: - stkpnt_array_count_get(self) -> size_t - -ida_funcs.stkpnt_array.data: - stkpnt_array_data_get(self) -> stkpnt_t * - -ida_funcs.try_to_add_libfunc(): - - try_to_add_libfunc(ea) -> int - - - Apply the currently loaded signature file to the specified address. If - a library function is found, then create a function and name it - accordingly. - - @param ea: any address in the program (C++: ea_t) - @return: Library function codes - - -ida_funcs.update_func(): - - update_func(pfn) -> bool - - - Update information about a function in the database ( 'func_t' ). You - must not change the function start and end addresses using this - function. Use 'set_func_start()' and 'set_func_end()' for it. - - @param pfn: ptr to function structure (C++: func_t *) - @return: success - - - -=== ida_funcs EPYDOC INJECTIONS === -ida_funcs.FIND_FUNC_DEFINE -""" -create instruction if undefined byte is encountered -""" - -ida_funcs.FIND_FUNC_EXIST -""" -its bounds are returned in 'nfn'. - -function exists already. -""" - -ida_funcs.FIND_FUNC_IGNOREFN -""" -ignore existing function boundaries. by default the function returns -function boundaries if ea belongs to a function. -""" - -ida_funcs.FIND_FUNC_KEEPBD -""" -just create instructions inside the boundaries. - -do not modify incoming function boundaries, -""" - -ida_funcs.FIND_FUNC_NORMAL -""" -stop processing if undefined byte is encountered -""" - -ida_funcs.FIND_FUNC_OK -""" -ok, 'nfn' is ready for 'add_func()' -""" - -ida_funcs.FIND_FUNC_UNDEF -""" -nfn->end_ea will have the address of the unexplored byte. - -function has instructions that pass execution flow to unexplored -bytes. -""" - -ida_funcs.FUNC_BOTTOMBP -""" -BP points to the bottom of the stack frame. -""" - -ida_funcs.FUNC_FAR -""" -Far function. -""" - -ida_funcs.FUNC_FRAME -""" -Function uses frame pointer (BP) -""" - -ida_funcs.FUNC_FUZZY_SP -""" -for example: and esp, 0FFFFFFF0h - -Function changes SP in untraceable way, -""" - -ida_funcs.FUNC_HIDDEN -""" -A hidden function chunk. -""" - -ida_funcs.FUNC_LIB -""" -Library function. -""" - -ida_funcs.FUNC_LUMINA -""" -Function info is provided by Lumina. -""" - -ida_funcs.FUNC_NORET -""" -Function doesn't return. -""" - -ida_funcs.FUNC_NORET_PENDING -""" -This flag is verified upon 'func_does_return()' - -Function 'non-return' analysis must be performed. -""" - -ida_funcs.FUNC_PROLOG_OK -""" -by last SP-analysis - -Prolog analysis has be performed -""" - -ida_funcs.FUNC_PURGED_OK -""" -'argsize' field has been validated. If this bit is clear and 'argsize' -is 0, then we do not known the real number of bytes removed from the -stack. This bit is handled by the processor module. -""" - -ida_funcs.FUNC_SP_READY -""" -SP-analysis has been performed. If this flag is on, the stack change -points should not be not modified anymore. Currently this analysis is -performed only for PC -""" - -ida_funcs.FUNC_STATICDEF -""" -Static function. -""" - -ida_funcs.FUNC_TAIL -""" -This is a function tail. Other bits must be clear (except -'FUNC_HIDDEN' ). -""" - -ida_funcs.FUNC_THUNK -""" -Thunk (jump) function. -""" - -ida_funcs.FUNC_USERFAR -""" -of the function - -User has specified far-ness -""" - -ida_funcs.IDASGN_APPLIED -""" -signature is already applied -""" - -ida_funcs.IDASGN_BADARG -""" -bad number of signature -""" - -ida_funcs.IDASGN_CURRENT -""" -signature is currently being applied -""" - -ida_funcs.IDASGN_OK -""" -ok -""" - -ida_funcs.IDASGN_PLANNED -""" -signature is planned to be applied -""" - -ida_funcs.LIBFUNC_DELAY -""" -no decision because of lack of information -""" - -ida_funcs.LIBFUNC_FOUND -""" -ok, library function is found -""" - -ida_funcs.LIBFUNC_NONE -""" -no, this is not a library function -""" - -ida_funcs.MOVE_FUNC_BADSTART -""" -bad new start address -""" - -ida_funcs.MOVE_FUNC_NOCODE -""" -no instruction at 'newstart' -""" - -ida_funcs.MOVE_FUNC_NOFUNC -""" -no function at 'ea' -""" - -ida_funcs.MOVE_FUNC_OK -""" -ok -""" - -ida_funcs.MOVE_FUNC_REFUSED -""" -a plugin refused the action -""" -=== ida_funcs EPYDOC INJECTIONS END === -class ida_gdl.BasicBlock(): - - Basic block class. It is returned by the Flowchart class - - -ida_gdl.BasicBlock.preds(): - - Iterates the predecessors list - - -ida_gdl.BasicBlock.succs(): - - Iterates the successors list - - -class ida_gdl.FlowChart(): - - Flowchart class used to determine basic blocks. - Check ex_gdl_qflow_chart.py for sample usage. - - -ida_gdl.FlowChart.refresh(): - - Refreshes the flow chart - - -ida_gdl.display_gdl(): - - display_gdl(fname) -> int - - - Display GDL file by calling wingraph32. The exact name of the grapher - is taken from the configuration file and set up by - 'setup_graph_subsystem()' . - - @param fname (C++: const char *) - @return: error code from os, 0 if ok - - -ida_gdl.gen_complex_call_chart(): - - gen_complex_call_chart(filename, wait, title, ea1, ea2, flags, recursion_depth=-1) -> bool - - - Build and display a complex xref graph. - - @param filename: output file name. the file extension is not used. - maybe NULL. (C++: const char *) - @param wait: message to display during graph building (C++: const char - *) - @param title: graph title (C++: const char *) - @param ea1: address range (C++: ea_t) - @param ea2: address range (C++: ea_t) - @param flags: combination of Call chart building flags and Flow - graph building flags . if none of CHART_GEN_DOT , - CHART_GEN_GDL , CHART_WINGRAPH is specified, the - function will return false. (C++: int) - @param recursion_depth: optional limit of recursion (C++: int32) - @return: success. if fails, a warning message is displayed on the - screen - - -ida_gdl.gen_flow_graph(): - - gen_flow_graph(filename, title, pfn, ea1, ea2, gflags) -> bool - - - Build and display a flow graph. - - @param filename: output file name. the file extension is not used. - maybe NULL. (C++: const char *) - @param title: graph title (C++: const char *) - @param pfn: function to graph (C++: func_t *) - @param ea1: if pfn == NULL, then the address range (C++: ea_t) - @param ea2: if pfn == NULL, then the address range (C++: ea_t) - @param gflags: combination of Flow graph building flags . if none of - CHART_GEN_DOT , CHART_GEN_GDL , CHART_WINGRAPH is - specified, the function will return false (C++: int) - @return: success. if fails, a warning message is displayed on the - screen - - -ida_gdl.gen_gdl(): - - gen_gdl(g, fname) - - - Create GDL file for graph. - - - @param g (C++: const gdl_graph_t *) - @param fname (C++: const char *) - - -ida_gdl.gen_simple_call_chart(): - - gen_simple_call_chart(filename, wait, title, gflags) -> bool - - - Build and display a simple function call graph. - - @param filename: output file name. the file extension is not used. - maybe NULL. (C++: const char *) - @param wait: message to display during graph building (C++: const char - *) - @param title: graph title (C++: const char *) - @param gflags: combination of CHART_NOLIBFUNCS and Flow graph - building flags . if none of CHART_GEN_DOT , - CHART_GEN_GDL , CHART_WINGRAPH is specified, the - function will return false. (C++: int) - @return: success. if fails, a warning message is displayed on the - screen - - -ida_gdl.is_noret_block(): - - is_noret_block(btype) -> bool - - - Does this block never return? - - - @param btype (C++: fc_block_type_t) - - -ida_gdl.is_ret_block(): - - is_ret_block(btype) -> bool - - - Does this block return? - - - @param btype (C++: fc_block_type_t) - - -class ida_gdl.node_iterator(): - - Proxy of C++ node_iterator class - - -class ida_gdl.qbasic_block_t(): - - Proxy of C++ qbasic_block_t class - - -ida_gdl.qbasic_block_t._print(): - - _print(self) -> size_t - - -ida_gdl.qbasic_block_t.clear(): - - clear(self) - - -ida_gdl.qbasic_block_t.compare(): - - compare(self, r) -> int - - -ida_gdl.qbasic_block_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_gdl.qbasic_block_t.empty(): - - empty(self) -> bool - - -ida_gdl.qbasic_block_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_gdl.qbasic_block_t.extend(): - - extend(self, ea) - - -ida_gdl.qbasic_block_t.intersect(): - - intersect(self, r) - - -ida_gdl.qbasic_block_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_gdl.qbasic_block_t.size(): - - size(self) -> asize_t - - -ida_gdl.qbasic_block_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -class ida_gdl.qflow_chart_t(): - - Proxy of C++ qflow_chart_t class - - -ida_gdl.qflow_chart_t.append_to_flowchart(): - - append_to_flowchart(self, ea1, ea2) - - -ida_gdl.qflow_chart_t.bounds: - qflow_chart_t_bounds_get(self) -> range_t - -ida_gdl.qflow_chart_t.calc_block_type(): - - calc_block_type(self, blknum) -> fc_block_type_t - - -ida_gdl.qflow_chart_t.create(): - - create(self, _title, _pfn, _ea1, _ea2, _flags) - create(self, _title, ranges, _flags) - - -ida_gdl.qflow_chart_t.flags: - qflow_chart_t_flags_get(self) -> int - -ida_gdl.qflow_chart_t.get_node_label(): - - get_node_label(self, arg2, arg3, arg4) -> char * - - -ida_gdl.qflow_chart_t.is_noret_block(): - - is_noret_block(self, blknum) -> bool - - -ida_gdl.qflow_chart_t.is_ret_block(): - - is_ret_block(self, blknum) -> bool - - -ida_gdl.qflow_chart_t.npred(): - - npred(self, node) -> int - - -ida_gdl.qflow_chart_t.nproper: - qflow_chart_t_nproper_get(self) -> int - -ida_gdl.qflow_chart_t.nsucc(): - - nsucc(self, node) -> int - - -ida_gdl.qflow_chart_t.pfn: - qflow_chart_t_pfn_get(self) -> func_t * - -ida_gdl.qflow_chart_t.pred(): - - pred(self, node, i) -> int - - -ida_gdl.qflow_chart_t.print_names(): - - print_names(self) -> bool - - -ida_gdl.qflow_chart_t.print_node_attributes(): - - print_node_attributes(self, arg2, arg3) - - -ida_gdl.qflow_chart_t.refresh(): - - refresh(self) - - -ida_gdl.qflow_chart_t.size(): - - size(self) -> int - - -ida_gdl.qflow_chart_t.succ(): - - succ(self, node, i) -> int - - -ida_gdl.qflow_chart_t.title: - qflow_chart_t_title_get(self) -> qstring * - - -=== ida_gdl EPYDOC INJECTIONS === -ida_gdl.CHART_FOLLOW_DIRECTION -""" -analyze references to added blocks only in the direction of the -reference who discovered the current block -""" - -ida_gdl.CHART_GEN_DOT -""" -generate .dot file (file extension is forced to .dot) -""" - -ida_gdl.CHART_GEN_GDL -""" -generate .gdl file (file extension is forced to .gdl) -""" - -ida_gdl.CHART_IGNORE_LIB_FROM -""" -ignore references from library functions -""" - -ida_gdl.CHART_IGNORE_LIB_TO -""" -ignore references to library functions -""" - -ida_gdl.CHART_NOLIBFUNCS -""" -don't include library functions in the graph -""" - -ida_gdl.CHART_PRINT_DOTS -""" -print dots if xrefs exist outside of the range recursion depth -""" - -ida_gdl.CHART_PRINT_NAMES -""" -print labels for each block? -""" - -ida_gdl.CHART_RECURSIVE -""" -analyze added blocks -""" - -ida_gdl.CHART_REFERENCED -""" -references from the addresses in the list -""" - -ida_gdl.CHART_REFERENCING -""" -references to the addresses in the list -""" - -ida_gdl.CHART_WINGRAPH -""" -call grapher to display the graph -""" - -ida_gdl.FC_APPND -""" -multirange flowchart (set by append_to_flowchart) -""" - -ida_gdl.FC_CHKBREAK -""" -build_qflow_chart() may be aborted by user -""" - -ida_gdl.FC_NOEXT -""" -do not compute external blocks. Use this to prevent jumps leaving the -function from appearing in the flow chart. Unless specified, the -targets of those outgoing jumps will be present in the flow chart -under the form of one-instruction blocks -""" - -ida_gdl.FC_PREDS -""" -compute predecessor lists -""" - -ida_gdl.FC_PRINT -""" -print names (used only by display_flow_chart()) -""" -=== ida_gdl EPYDOC INJECTIONS END === -ida_graph.GraphViewer.AddEdge(): - - Creates an edge between two given node ids - - -ida_graph.GraphViewer.AddNode(): - - Creates a node associated with the given object and returns the node id - - -ida_graph.GraphViewer.Clear(): - - Clears all the nodes and edges - - -ida_graph.GraphViewer.Close(): - - Closes the graph. - It is possible to call Show() again (which will recreate the graph) - - -ida_graph.GraphViewer.Count(): - - Returns the node count - - -ida_graph.GraphViewer.CreateGroups(): - - Send a request to modify the graph by creating a - (set of) group(s), and perform an animation. - - Each object in the 'groups_infos' list must be of the format: - { - "nodes" : [, , , ...] # The list of nodes to group - "text" : # The synthetic text for that group - } - - @param groups_infos: A list of objects that describe those groups. - @return: A [, , ...] list of group nodes, or None (failure). - - -ida_graph.GraphViewer.DelNodesInfos(): - - Delete the properties for the given node(s). - - @param nodes: A list of node IDs - - -ida_graph.GraphViewer.DeleteGroups(): - - Send a request to delete the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param new_current: A node to focus on after the groups have been deleted - @return: True on success, False otherwise. - - -ida_graph.GraphViewer.GetNodeInfo(): - - Get the properties for the given node. - - @param node: The index of the node. - @return: A tuple (bg_color, frame_color, ea, text), or None. - - -ida_graph.GraphViewer.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_graph.GraphViewer.OnRefresh(): - - Event called when the graph is refreshed or first created. - From this event you are supposed to create nodes and edges. - This callback is mandatory. - - @note: ***It is important to clear previous nodes before adding nodes.*** - @return: Returning True tells the graph viewer to use the items. Otherwise old items will be used. - - -ida_graph.GraphViewer.Refresh(): - - Refreshes the view. This causes the OnRefresh() to be called - - -ida_graph.GraphViewer.Select(): - - Selects a node on the graph - - -ida_graph.GraphViewer.SetCurrentRendererType(): - - Set the current view's renderer. - - @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. - - -ida_graph.GraphViewer.SetGroupsVisibility(): - - Send a request to expand/collapse the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param expand: True to expand the group, False otherwise. - @param new_current: A node to focus on after the groups have been expanded/collapsed. - @return: True on success, False otherwise. - - -ida_graph.GraphViewer.SetNodeInfo(): - - Set the properties for the given node. - - Example usage (set second nodes's bg color to red): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff0000 - inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) - - @param node_index: The node index. - @param node_info: An idaapi.node_info_t instance. - @param flags: An OR'ed value of NIF_* values. - - -ida_graph.GraphViewer.SetNodesInfos(): - - Set the properties for the given nodes. - - Example usage (set first three nodes's bg color to purple): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff00ff - inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) - - @param values: A dictionary of 'int -> node_info_t' objects. - - -ida_graph.GraphViewer.Show(): - - Shows an existing graph or creates a new one - - @return: Boolean - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.create_desktop_widget(): - - create_desktop_widget(self, title, cfg) -> PyObject * - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.current_widget_changed(): - - current_widget_changed(self, widget, prev_widget) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.database_inited(): - - database_inited(self, is_new_database, idc_script) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.debugger_menu_change(): - - debugger_menu_change(self, enable) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.finish_populating_widget_popup(): - - finish_populating_widget_popup(self, widget, popup_handle, ctx=None) - - - The UI is about to be done populating the TWidget's popup menu. - Now is a good time to call idaapi.attach_action_to_popup() - - @param widget: The widget - @param popup: The popup menu. - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.get_chooser_item_attrs(): - - get_chooser_item_attrs(self, chooser, n, attrs) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.get_custom_viewer_hint(): - - get_custom_viewer_hint(self, viewer, place) -> PyObject * - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.get_ea_hint(): - - get_ea_hint(self, ea) -> PyObject * - - - The UI wants to display a simple hint for an address in the navigation band - - @param ea: The address - @return: String with the hint or None - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.get_item_hint(): - - get_item_hint(self, ea, max_lines) -> PyObject * - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.get_widget_config(): - - get_widget_config(self, widget, cfg) -> PyObject * - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.hook(): - - hook(self) -> bool - - - Creates an UI hook - - @return: Boolean true on success - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.idcstart(): - - idcstart(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.idcstop(): - - idcstop(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.plugin_loaded(): - - plugin_loaded(self, plugin_info) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.plugin_unloading(): - - plugin_unloading(self, plugin_info) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.postprocess_action(): - - postprocess_action(self) - - - An ida ui action has been handled - - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.preprocess_action(): - - preprocess_action(self, name) - - - IDA ui is about to handle a user action - - @param name: ui action name - (these names can be looked up in ida[tg]ui.cfg) - @return: 0-ok, nonzero - a plugin has handled the action - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.range(): - - range(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.ready_to_run(): - - ready_to_run(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.resume(): - - resume(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.saved(): - - saved(self) - - - The kernel has saved the database. - - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.saving(): - - saving(self) - - - The kernel is saving the database. - - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.screen_ea_changed(): - - screen_ea_changed(self, ea, prev_ea) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.set_widget_config(): - - set_widget_config(self, widget, cfg) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.suspend(): - - suspend(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.term(): - - term(self) - - - IDA is terminated and the database is already closed. - The UI may close its windows in this callback. - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.unhook(): - - unhook(self) -> bool - - - Removes the UI hook - @return: Boolean true on success - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.updated_actions(): - - updated_actions(self) - - - The UI is done updating actions. - - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.updating_actions(): - - updating_actions(self, ctx) - - - The UI is about to batch-update some actions. - - @param ctx: The action_update_ctx_t instance - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.widget_closing(): - - widget_closing(self, widget) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.widget_invisible(): - - widget_invisible(self, widget) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.widget_visible(): - - widget_visible(self, widget) - - -ida_graph.GraphViewer.hook(): - - hook(self) -> bool - - -ida_graph.GraphViewer.unhook(): - - unhook(self) -> bool - - -ida_graph.GraphViewer.view_created(): - - view_created(self, view) - - -class ida_graph.TPointDouble(): - - Proxy of C++ TPointDouble class - - -ida_graph.TPointDouble.add(): - - add(self, r) - - -ida_graph.TPointDouble.negate(): - - negate(self) - - -ida_graph.TPointDouble.sub(): - - sub(self, r) - - -ida_graph.TPointDouble.x: - TPointDouble_x_get(self) -> double - -ida_graph.TPointDouble.y: - TPointDouble_y_get(self) -> double - -ida_graph.calc_dist(): - - calc_dist(p, q) -> double - - - Calculate distance between p and q. - - - @param p (C++: point_t) - @param q (C++: point_t) - - -ida_graph.clr_node_info(): - - clr_node_info(gid, node, flags) - - - Clear node info for the given node. - - @param gid: id of desired graph (C++: graph_id_t) - @param node: node number (C++: int) - @param flags: combination of Node info flags , identifying which - fields of node_info_t will be cleared (C++: uint32) - - -ida_graph.create_disasm_graph(): - - create_disasm_graph(ea) -> mutable_graph_t - create_disasm_graph(ranges) -> mutable_graph_t - - - Create a graph for the function that contains 'ea'. - - - @param ea (C++: ea_t) - - -ida_graph.create_graph_viewer(): - - create_graph_viewer(title, id, callback, ud, title_height, parent=None) -> graph_viewer_t * - - - Create a custom graph viewer. - - @param title: the widget title (C++: const char *) - @param id: graph id (C++: uval_t) - @param callback: callback to handle graph notifications ( - graph_notification_t ) (C++: hook_cb_t *) - @param ud: user data passed to callback (C++: void *) - @param title_height: node title height (C++: int) - @param parent (C++: TWidget *) - @return: new viewer - - -ida_graph.create_mutable_graph(): - - create_mutable_graph(id) -> mutable_graph_t - - - Create a new empty graph with given id. - - - @param id (C++: uval_t) - - -ida_graph.create_user_graph_place(): - - create_user_graph_place(node, lnnum) -> user_graph_place_t - - - Get a copy of a 'user_graph_place_t' (returns a pointer to static - storage) - - - @param node (C++: int) - @param lnnum (C++: int) - - -ida_graph.del_node_info(): - - del_node_info(gid, node) - - - Delete the 'node_info_t' for the given node. - - - @param gid (C++: graph_id_t) - @param node (C++: int) - - -ida_graph.delete_mutable_graph(): - - delete_mutable_graph(g) - - - Delete graph object.use this only if you are dealing with - 'mutable_graph_t' instances that have not been used together with a - 'graph_viewer_t' . If you have called 'set_viewer_graph()' with your - graph, the graph's lifecycle will be managed by the viewer, and you - shouldn't interfere with it - - @param g (C++: mutable_graph_t *) - - -class ida_graph.edge_info_t(): - - Proxy of C++ edge_info_t class - - -ida_graph.edge_info_t.color: - edge_info_t_color_get(self) -> bgcolor_t - -ida_graph.edge_info_t.dstoff: - edge_info_t_dstoff_get(self) -> int - -ida_graph.edge_info_t.layout: - edge_info_t_layout_get(self) -> pointseq_t - -ida_graph.edge_info_t.reverse_layout(): - - reverse_layout(self) - - -ida_graph.edge_info_t.srcoff: - edge_info_t_srcoff_get(self) -> int - -ida_graph.edge_info_t.width: - edge_info_t_width_get(self) -> int - -class ida_graph.edge_infos_wrapper_t(): - - Proxy of C++ edge_infos_wrapper_t class - - -ida_graph.edge_infos_wrapper_t.clear(): - - clear(self) - - -ida_graph.edge_infos_wrapper_t.ptr: - edge_infos_wrapper_t_ptr_get(self) -> edge_infos_t * - -class ida_graph.edge_layout_point_t(): - - Proxy of C++ edge_layout_point_t class - - -ida_graph.edge_layout_point_t.compare(): - - compare(self, r) -> int - - -ida_graph.edge_layout_point_t.e: - edge_layout_point_t_e_get(self) -> edge_t - -ida_graph.edge_layout_point_t.pidx: - edge_layout_point_t_pidx_get(self) -> int - -class ida_graph.edge_segment_t(): - - Proxy of C++ edge_segment_t class - - -ida_graph.edge_segment_t.e: - edge_segment_t_e_get(self) -> edge_t - -ida_graph.edge_segment_t.length(): - - length(self) -> size_t - - -ida_graph.edge_segment_t.nseg: - edge_segment_t_nseg_get(self) -> int - -ida_graph.edge_segment_t.toright(): - - toright(self) -> bool - - -ida_graph.edge_segment_t.x0: - edge_segment_t_x0_get(self) -> int - -ida_graph.edge_segment_t.x1: - edge_segment_t_x1_get(self) -> int - -class ida_graph.edge_t(): - - Proxy of C++ edge_t class - - -ida_graph.edge_t.dst: - edge_t_dst_get(self) -> int - -ida_graph.edge_t.src: - edge_t_src_get(self) -> int - -ida_graph.get_graph_viewer(): - - get_graph_viewer(parent) -> graph_viewer_t * - - - Get custom graph viewer for given form. - - - @param parent (C++: TWidget *) - - -ida_graph.get_node_info(): - - get_node_info(out, gid, node) -> bool - - - Get node info. - - @param out: result (C++: node_info_t *) - @param gid: id of desired graph (C++: graph_id_t) - @param node: node number (C++: int) - @return: success - - -ida_graph.get_viewer_graph(): - - get_viewer_graph(gv) -> mutable_graph_t - - - Get graph object for given custom graph viewer. - - - @param gv (C++: graph_viewer_t *) - - -class ida_graph.graph_item_t(): - - Proxy of C++ graph_item_t class - - -ida_graph.graph_item_t.b: - graph_item_t_b_get(self) -> int - -ida_graph.graph_item_t.e: - graph_item_t_e_get(self) -> edge_t - -ida_graph.graph_item_t.elp: - graph_item_t_elp_get(self) -> edge_layout_point_t - -ida_graph.graph_item_t.is_edge(): - - is_edge(self) -> bool - - -ida_graph.graph_item_t.is_node(): - - is_node(self) -> bool - - -ida_graph.graph_item_t.n: - graph_item_t_n_get(self) -> int - -ida_graph.graph_item_t.p: - graph_item_t_p_get(self) -> point_t - -ida_graph.graph_item_t.type: - graph_item_t_type_get(self) -> graph_item_type_t - -class ida_graph.graph_node_visitor_t(): - - Proxy of C++ graph_node_visitor_t class - - -ida_graph.graph_node_visitor_t.is_forbidden_edge(): - - is_forbidden_edge(self, arg0, arg1) -> bool - - -ida_graph.graph_node_visitor_t.is_visited(): - - is_visited(self, n) -> bool - - -ida_graph.graph_node_visitor_t.reinit(): - - reinit(self) - - -ida_graph.graph_node_visitor_t.set_visited(): - - set_visited(self, n) - - -ida_graph.graph_node_visitor_t.visit_node(): - - visit_node(self, arg0) -> int - - -class ida_graph.graph_path_visitor_t(): - - Proxy of C++ graph_path_visitor_t class - - -ida_graph.graph_path_visitor_t.path: - graph_path_visitor_t_path_get(self) -> intvec_t * - -ida_graph.graph_path_visitor_t.prune: - graph_path_visitor_t_prune_get(self) -> bool - -ida_graph.graph_path_visitor_t.walk_backward(): - - walk_backward(self, arg0) -> int - - -ida_graph.graph_path_visitor_t.walk_forward(): - - walk_forward(self, arg0) -> int - - -class ida_graph.graph_visitor_t(): - - Proxy of C++ graph_visitor_t class - - -ida_graph.graph_visitor_t.visit_edge(): - - visit_edge(self, arg2, arg3) -> int - - -ida_graph.graph_visitor_t.visit_node(): - - visit_node(self, arg2, arg3) -> int - - -class ida_graph.group_crinfo_t(): - - Proxy of C++ group_crinfo_t class - - -ida_graph.group_crinfo_t.nodes: - group_crinfo_t_nodes_get(self) -> intvec_t * - -ida_graph.group_crinfo_t.text: - group_crinfo_t_text_get(self) -> qstring * - -class ida_graph.interval_t(): - - Proxy of C++ interval_t class - - -ida_graph.interval_t.contains(): - - contains(self, x) -> bool - - -ida_graph.interval_t.empty(): - - empty(self) -> bool - - -ida_graph.interval_t.intersect(): - - intersect(self, r) - - -ida_graph.interval_t.length(): - - length(self) -> int - - -ida_graph.interval_t.make_union(): - - make_union(self, r) - - -ida_graph.interval_t.move_by(): - - move_by(self, shift) - - -ida_graph.interval_t.x0: - interval_t_x0_get(self) -> int - -ida_graph.interval_t.x1: - interval_t_x1_get(self) -> int - -class ida_graph.mutable_graph_t(): - - Proxy of C++ mutable_graph_t class - - -ida_graph.mutable_graph_t.belongs: - mutable_graph_t_belongs_get(self) -> intvec_t * - -ida_graph.mutable_graph_t.calc_group_ea(): - - calc_group_ea(self, arg0) -> ea_t - - -ida_graph.mutable_graph_t.change_group_visibility(): - - change_group_visibility(self, group, expand) -> bool - - -ida_graph.mutable_graph_t.clear(): - - clear(self) - - -ida_graph.mutable_graph_t.create_digraph_layout(): - - create_digraph_layout(self) -> bool - - -ida_graph.mutable_graph_t.create_group(): - - create_group(self, nodes) -> int - - -ida_graph.mutable_graph_t.del_custom_layout(): - - del_custom_layout(self) - - -ida_graph.mutable_graph_t.delete_group(): - - delete_group(self, group) -> bool - - -ida_graph.mutable_graph_t.edges: - mutable_graph_t_edges_get(self) -> edge_infos_wrapper_t - -ida_graph.mutable_graph_t.empty(): - - empty(self) -> bool - - -ida_graph.mutable_graph_t.exists(): - - exists(self, node) -> bool - - -ida_graph.mutable_graph_t.get_custom_layout(): - - get_custom_layout(self) -> bool - - -ida_graph.mutable_graph_t.get_edge(): - - get_edge(self, e) -> edge_info_t - - -ida_graph.mutable_graph_t.get_first_subgraph_node(): - - get_first_subgraph_node(self, group) -> int - - -ida_graph.mutable_graph_t.get_graph_groups(): - - get_graph_groups(self) -> bool - - -ida_graph.mutable_graph_t.get_next_subgraph_node(): - - get_next_subgraph_node(self, group, current) -> int - - -ida_graph.mutable_graph_t.get_node_group(): - - get_node_group(self, node) -> int - - -ida_graph.mutable_graph_t.get_node_representative(): - - get_node_representative(self, node) -> int - - -ida_graph.mutable_graph_t.gid: - mutable_graph_t_gid_get(self) -> uval_t - -ida_graph.mutable_graph_t.is_collapsed_node(): - - is_collapsed_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_deleted_node(): - - is_deleted_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_displayable_node(): - - is_displayable_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_dot_node(): - - is_dot_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_group_node(): - - is_group_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_simple_node(): - - is_simple_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_subgraph_node(): - - is_subgraph_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_uncollapsed_node(): - - is_uncollapsed_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_user_graph(): - - is_user_graph(self) -> bool - - -ida_graph.mutable_graph_t.is_visible_node(): - - is_visible_node(self, node) -> bool - - -ida_graph.mutable_graph_t.node_flags: - mutable_graph_t_node_flags_get(self) -> bytevec_t * - -ida_graph.mutable_graph_t.node_qty(): - - node_qty(self) -> int - - -ida_graph.mutable_graph_t.nodes: - mutable_graph_t_nodes_get(self) -> node_layout_t - -ida_graph.mutable_graph_t.npred(): - - npred(self, b) -> int - - -ida_graph.mutable_graph_t.nrect(): - - nrect(self, n) -> rect_t - nrect(self, n) -> rect_t - - -ida_graph.mutable_graph_t.nsucc(): - - nsucc(self, b) -> int - - -ida_graph.mutable_graph_t.org_preds: - mutable_graph_t_org_preds_get(self) -> array_of_intvec_t - -ida_graph.mutable_graph_t.org_succs: - mutable_graph_t_org_succs_get(self) -> array_of_intvec_t - -ida_graph.mutable_graph_t.pred(): - - pred(self, b, i) -> int - - -ida_graph.mutable_graph_t.preds: - mutable_graph_t_preds_get(self) -> array_of_intvec_t - -ida_graph.mutable_graph_t.predset(): - - predset(self, b) -> intvec_t const & - - -ida_graph.mutable_graph_t.reset(): - - reset(self) - - -ida_graph.mutable_graph_t.set_custom_layout(): - - set_custom_layout(self) - - -ida_graph.mutable_graph_t.set_deleted_node(): - - set_deleted_node(self, node) - - -ida_graph.mutable_graph_t.set_edge(): - - set_edge(self, e, ei) -> bool - - -ida_graph.mutable_graph_t.set_graph_groups(): - - set_graph_groups(self) - - -ida_graph.mutable_graph_t.set_node_group(): - - set_node_group(self, node, group) - - -ida_graph.mutable_graph_t.size(): - - size(self) -> int - - -ida_graph.mutable_graph_t.succ(): - - succ(self, b, i) -> int - - -ida_graph.mutable_graph_t.succs: - mutable_graph_t_succs_get(self) -> array_of_intvec_t - -ida_graph.mutable_graph_t.succset(): - - succset(self, b) -> intvec_t const & - - -class ida_graph.node_info_t(): - - Proxy of C++ node_info_t class - - -ida_graph.node_info_t.bg_color: - node_info_t_bg_color_get(self) -> bgcolor_t - -ida_graph.node_info_t.ea: - node_info_t_ea_get(self) -> ea_t - -ida_graph.node_info_t.flags: - node_info_t_flags_get(self) -> uint32 - -ida_graph.node_info_t.frame_color: - node_info_t_frame_color_get(self) -> bgcolor_t - -ida_graph.node_info_t.get_flags_for_valid(): - - get_flags_for_valid(self) -> uint32 - - -ida_graph.node_info_t.text: - node_info_t_text_get(self) -> qstring * - -ida_graph.node_info_t.valid_bg_color(): - - valid_bg_color(self) -> bool - - -ida_graph.node_info_t.valid_ea(): - - valid_ea(self) -> bool - - -ida_graph.node_info_t.valid_flags(): - - valid_flags(self) -> bool - - -ida_graph.node_info_t.valid_frame_color(): - - valid_frame_color(self) -> bool - - -ida_graph.node_info_t.valid_text(): - - valid_text(self) -> bool - - -class ida_graph.node_layout_t(): - - Proxy of C++ qvector<(rect_t)> class - - -ida_graph.node_layout_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_graph.node_layout_t.at(): - - at(self, _idx) -> rect_t - - -ida_graph.node_layout_t.begin(): - - begin(self) -> rect_t - begin(self) -> rect_t - - -ida_graph.node_layout_t.capacity(): - - capacity(self) -> size_t - - -ida_graph.node_layout_t.clear(): - - clear(self) - - -ida_graph.node_layout_t.empty(): - - empty(self) -> bool - - -ida_graph.node_layout_t.end(): - - end(self) -> rect_t - end(self) -> rect_t - - -ida_graph.node_layout_t.erase(): - - erase(self, it) -> rect_t - erase(self, first, last) -> rect_t - - -ida_graph.node_layout_t.extract(): - - extract(self) -> rect_t - - -ida_graph.node_layout_t.find(): - - find(self, x) -> rect_t - find(self, x) -> rect_t - - -ida_graph.node_layout_t.grow(): - - grow(self, x=rect_t()) - - -ida_graph.node_layout_t.has(): - - has(self, x) -> bool - - -ida_graph.node_layout_t.inject(): - - inject(self, s, len) - - -ida_graph.node_layout_t.insert(): - - insert(self, it, x) -> rect_t - - -ida_graph.node_layout_t.pop_back(): - - pop_back(self) - - -ida_graph.node_layout_t.push_back(): - - push_back(self, x) - push_back(self) -> rect_t - - -ida_graph.node_layout_t.qclear(): - - qclear(self) - - -ida_graph.node_layout_t.reserve(): - - reserve(self, cnt) - - -ida_graph.node_layout_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_graph.node_layout_t.size(): - - size(self) -> size_t - - -ida_graph.node_layout_t.swap(): - - swap(self, r) - - -ida_graph.node_layout_t.truncate(): - - truncate(self) - - -class ida_graph.node_ordering_t(): - - Proxy of C++ node_ordering_t class - - -ida_graph.node_ordering_t.clear(): - - clear(self) - - -ida_graph.node_ordering_t.node(): - - node(self, _order) -> int - - -ida_graph.node_ordering_t.resize(): - - resize(self, n) - - -ida_graph.node_ordering_t.set(): - - set(self, _node, num) - - -ida_graph.node_ordering_t.size(): - - size(self) -> size_t - - -class ida_graph.point_t(): - - Proxy of C++ point_t class - - -ida_graph.point_t.add(): - - add(self, r) -> point_t - - -ida_graph.point_t.negate(): - - negate(self) - - -ida_graph.point_t.sub(): - - sub(self, r) -> point_t - - -ida_graph.point_t.x: - point_t_x_get(self) -> int - -ida_graph.point_t.y: - point_t_y_get(self) -> int - -class ida_graph.pointseq_t(): - - Proxy of C++ pointseq_t class - - -ida_graph.pointseq_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_graph.pointseq_t.at(): - - at(self, _idx) -> point_t - - -ida_graph.pointseq_t.begin(): - - begin(self) -> point_t - begin(self) -> point_t - - -ida_graph.pointseq_t.capacity(): - - capacity(self) -> size_t - - -ida_graph.pointseq_t.clear(): - - clear(self) - - -ida_graph.pointseq_t.empty(): - - empty(self) -> bool - - -ida_graph.pointseq_t.end(): - - end(self) -> point_t - end(self) -> point_t - - -ida_graph.pointseq_t.erase(): - - erase(self, it) -> point_t - erase(self, first, last) -> point_t - - -ida_graph.pointseq_t.extract(): - - extract(self) -> point_t - - -ida_graph.pointseq_t.find(): - - find(self, x) -> point_t - find(self, x) -> point_t - - -ida_graph.pointseq_t.grow(): - - grow(self, x=point_t()) - - -ida_graph.pointseq_t.has(): - - has(self, x) -> bool - - -ida_graph.pointseq_t.inject(): - - inject(self, s, len) - - -ida_graph.pointseq_t.insert(): - - insert(self, it, x) -> point_t - - -ida_graph.pointseq_t.pop_back(): - - pop_back(self) - - -ida_graph.pointseq_t.push_back(): - - push_back(self, x) - push_back(self) -> point_t - - -ida_graph.pointseq_t.qclear(): - - qclear(self) - - -ida_graph.pointseq_t.reserve(): - - reserve(self, cnt) - - -ida_graph.pointseq_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_graph.pointseq_t.size(): - - size(self) -> size_t - - -ida_graph.pointseq_t.swap(): - - swap(self, r) - - -ida_graph.pointseq_t.truncate(): - - truncate(self) - - -class ida_graph.pointvec_t(): - - Proxy of C++ qvector<(point_t)> class - - -ida_graph.pointvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_graph.pointvec_t.at(): - - at(self, _idx) -> point_t - - -ida_graph.pointvec_t.begin(): - - begin(self) -> point_t - begin(self) -> point_t - - -ida_graph.pointvec_t.capacity(): - - capacity(self) -> size_t - - -ida_graph.pointvec_t.clear(): - - clear(self) - - -ida_graph.pointvec_t.empty(): - - empty(self) -> bool - - -ida_graph.pointvec_t.end(): - - end(self) -> point_t - end(self) -> point_t - - -ida_graph.pointvec_t.erase(): - - erase(self, it) -> point_t - erase(self, first, last) -> point_t - - -ida_graph.pointvec_t.extract(): - - extract(self) -> point_t - - -ida_graph.pointvec_t.find(): - - find(self, x) -> point_t - find(self, x) -> point_t - - -ida_graph.pointvec_t.grow(): - - grow(self, x=point_t()) - - -ida_graph.pointvec_t.has(): - - has(self, x) -> bool - - -ida_graph.pointvec_t.inject(): - - inject(self, s, len) - - -ida_graph.pointvec_t.insert(): - - insert(self, it, x) -> point_t - - -ida_graph.pointvec_t.pop_back(): - - pop_back(self) - - -ida_graph.pointvec_t.push_back(): - - push_back(self, x) - push_back(self) -> point_t - - -ida_graph.pointvec_t.qclear(): - - qclear(self) - - -ida_graph.pointvec_t.reserve(): - - reserve(self, cnt) - - -ida_graph.pointvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_graph.pointvec_t.size(): - - size(self) -> size_t - - -ida_graph.pointvec_t.swap(): - - swap(self, r) - - -ida_graph.pointvec_t.truncate(): - - truncate(self) - - -ida_graph.pyg_close(): - - pyg_close(self) - - -ida_graph.pyg_select_node(): - - pyg_select_node(self, nid) - - -ida_graph.pyg_show(): - - pyg_show(self) -> bool - - -class ida_graph.rect_t(): - - Proxy of C++ rect_t class - - -ida_graph.rect_t.area(): - - area(self) -> int - - -ida_graph.rect_t.bottom: - rect_t_bottom_get(self) -> int - -ida_graph.rect_t.bottomright(): - - bottomright(self) -> point_t - - -ida_graph.rect_t.center(): - - center(self) -> point_t - - -ida_graph.rect_t.contains(): - - contains(self, p) -> bool - - -ida_graph.rect_t.empty(): - - empty(self) -> bool - - -ida_graph.rect_t.grow(): - - grow(self, delta) - - -ida_graph.rect_t.height(): - - height(self) -> int - - -ida_graph.rect_t.intersect(): - - intersect(self, r) - - -ida_graph.rect_t.is_intersection_empty(): - - is_intersection_empty(self, r) -> bool - - -ida_graph.rect_t.left: - rect_t_left_get(self) -> int - -ida_graph.rect_t.make_union(): - - make_union(self, r) - - -ida_graph.rect_t.move_by(): - - move_by(self, p) - - -ida_graph.rect_t.move_to(): - - move_to(self, p) - - -ida_graph.rect_t.right: - rect_t_right_get(self) -> int - -ida_graph.rect_t.top: - rect_t_top_get(self) -> int - -ida_graph.rect_t.topleft(): - - topleft(self) -> point_t - - -ida_graph.rect_t.width(): - - width(self) -> int - - -ida_graph.refresh_viewer(): - - refresh_viewer(gv) - - - Redraw the graph in the given view. - - - @param gv (C++: graph_viewer_t *) - - -class ida_graph.row_info_t(): - - Proxy of C++ row_info_t class - - -ida_graph.row_info_t.bottom: - row_info_t_bottom_get(self) -> int - -ida_graph.row_info_t.height(): - - height(self) -> int - - -ida_graph.row_info_t.nodes: - row_info_t_nodes_get(self) -> intvec_t * - -ida_graph.row_info_t.top: - row_info_t_top_get(self) -> int - -class ida_graph.screen_graph_selection_base_t(): - - Proxy of C++ qvector<(selection_item_t)> class - - -ida_graph.screen_graph_selection_base_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_graph.screen_graph_selection_base_t.at(): - - at(self, _idx) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.begin(): - - begin(self) -> selection_item_t - begin(self) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.capacity(): - - capacity(self) -> size_t - - -ida_graph.screen_graph_selection_base_t.clear(): - - clear(self) - - -ida_graph.screen_graph_selection_base_t.empty(): - - empty(self) -> bool - - -ida_graph.screen_graph_selection_base_t.end(): - - end(self) -> selection_item_t - end(self) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.erase(): - - erase(self, it) -> selection_item_t - erase(self, first, last) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.extract(): - - extract(self) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.find(): - - find(self, x) -> selection_item_t - find(self, x) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.grow(): - - grow(self, x=selection_item_t()) - - -ida_graph.screen_graph_selection_base_t.has(): - - has(self, x) -> bool - - -ida_graph.screen_graph_selection_base_t.inject(): - - inject(self, s, len) - - -ida_graph.screen_graph_selection_base_t.insert(): - - insert(self, it, x) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.pop_back(): - - pop_back(self) - - -ida_graph.screen_graph_selection_base_t.push_back(): - - push_back(self, x) - push_back(self) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.qclear(): - - qclear(self) - - -ida_graph.screen_graph_selection_base_t.reserve(): - - reserve(self, cnt) - - -ida_graph.screen_graph_selection_base_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_graph.screen_graph_selection_base_t.size(): - - size(self) -> size_t - - -ida_graph.screen_graph_selection_base_t.swap(): - - swap(self, r) - - -ida_graph.screen_graph_selection_base_t.truncate(): - - truncate(self) - - -class ida_graph.screen_graph_selection_t(): - - Proxy of C++ screen_graph_selection_t class - - -ida_graph.screen_graph_selection_t.add(): - - add(self, s) - - -ida_graph.screen_graph_selection_t.add_node(): - - add_node(self, node) - - -ida_graph.screen_graph_selection_t.add_point(): - - add_point(self, e, idx) - - -ida_graph.screen_graph_selection_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_graph.screen_graph_selection_t.at(): - - at(self, _idx) -> selection_item_t - - -ida_graph.screen_graph_selection_t.begin(): - - begin(self) -> selection_item_t - begin(self) -> selection_item_t - - -ida_graph.screen_graph_selection_t.capacity(): - - capacity(self) -> size_t - - -ida_graph.screen_graph_selection_t.clear(): - - clear(self) - - -ida_graph.screen_graph_selection_t.del_node(): - - del_node(self, node) - - -ida_graph.screen_graph_selection_t.del_point(): - - del_point(self, e, idx) - - -ida_graph.screen_graph_selection_t.empty(): - - empty(self) -> bool - - -ida_graph.screen_graph_selection_t.end(): - - end(self) -> selection_item_t - end(self) -> selection_item_t - - -ida_graph.screen_graph_selection_t.erase(): - - erase(self, it) -> selection_item_t - erase(self, first, last) -> selection_item_t - - -ida_graph.screen_graph_selection_t.extract(): - - extract(self) -> selection_item_t - - -ida_graph.screen_graph_selection_t.find(): - - find(self, x) -> selection_item_t - find(self, x) -> selection_item_t - - -ida_graph.screen_graph_selection_t.grow(): - - grow(self, x=selection_item_t()) - - -ida_graph.screen_graph_selection_t.has(): - - has(self, item) -> bool - - -ida_graph.screen_graph_selection_t.inject(): - - inject(self, s, len) - - -ida_graph.screen_graph_selection_t.insert(): - - insert(self, it, x) -> selection_item_t - - -ida_graph.screen_graph_selection_t.items_count(): - - items_count(self, look_for_nodes) -> size_t - - -ida_graph.screen_graph_selection_t.nodes_count(): - - nodes_count(self) -> size_t - - -ida_graph.screen_graph_selection_t.points_count(): - - points_count(self) -> size_t - - -ida_graph.screen_graph_selection_t.pop_back(): - - pop_back(self) - - -ida_graph.screen_graph_selection_t.push_back(): - - push_back(self, x) - push_back(self) -> selection_item_t - - -ida_graph.screen_graph_selection_t.qclear(): - - qclear(self) - - -ida_graph.screen_graph_selection_t.reserve(): - - reserve(self, cnt) - - -ida_graph.screen_graph_selection_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_graph.screen_graph_selection_t.size(): - - size(self) -> size_t - - -ida_graph.screen_graph_selection_t.sub(): - - sub(self, s) - - -ida_graph.screen_graph_selection_t.swap(): - - swap(self, r) - - -ida_graph.screen_graph_selection_t.truncate(): - - truncate(self) - - -class ida_graph.selection_item_t(): - - Proxy of C++ selection_item_t class - - -ida_graph.selection_item_t.compare(): - - compare(self, r) -> int - - -ida_graph.selection_item_t.elp: - selection_item_t_elp_get(self) -> edge_layout_point_t - -ida_graph.selection_item_t.is_node: - selection_item_t_is_node_get(self) -> bool - -ida_graph.selection_item_t.node: - selection_item_t_node_get(self) -> int - -ida_graph.set_node_info(): - - set_node_info(gid, node, ni, flags) - - - Set node info. - - @param gid: id of desired graph (C++: graph_id_t) - @param node: node number (C++: int) - @param ni: node info to use (C++: const node_info_t &) - @param flags: combination of Node info flags , identifying which - fields of 'ni' will be used (C++: uint32) - - -ida_graph.set_viewer_graph(): - - set_viewer_graph(gv, g) - - - Set the underlying graph object for the given viewer. - - - @param gv (C++: graph_viewer_t *) - @param g (C++: mutable_graph_t *) - - -class ida_graph.user_graph_place_t(): - - Proxy of C++ user_graph_place_t class - - -ida_graph.user_graph_place_t.node: - user_graph_place_t_node_get(self) -> int - -ida_graph.viewer_attach_menu_item(): - - viewer_attach_menu_item(g, name) -> bool - - - Attach a previously-registered action to the view's context menu. See - 'kernwin.hpp' for how to register actions. - - @param g (C++: graph_viewer_t *) - @param name: action name (C++: const char *) - @return: success - - -ida_graph.viewer_center_on(): - - viewer_center_on(gv, node) - - - Center the graph view on the given node. - - - @param gv (C++: graph_viewer_t *) - @param node (C++: int) - - -ida_graph.viewer_create_groups(): - - viewer_create_groups(gv, out_group_nodes, gi) -> bool - - - This will perform an operation similar to what happens when a user - manually selects a set of nodes, right-clicks and selects "Create - group". This is a wrapper around mutable_graph_t::create_group that - will, in essence:clone the current graphfor each 'group_crinfo_t' , - attempt creating group in that new graphif all were successful, - animate to that new graph.this accepts parameters that allow creating - of multiple groups at once; which means only one graph animation will - be triggered. - - @param gv (C++: graph_viewer_t *) - @param out_group_nodes (C++: intvec_t *) - @param gi (C++: const groups_crinfos_t &) - - -ida_graph.viewer_del_node_info(): - - viewer_del_node_info(gv, n) - - - Delete node info for node in given viewer (see 'del_node_info()' ) - - - @param gv (C++: graph_viewer_t *) - @param n (C++: int) - - -ida_graph.viewer_delete_groups(): - - viewer_delete_groups(gv, groups, new_current=-1) -> bool - - - Wrapper around mutable_graph_t::delete_group. This function will:clone - the current graphattempt deleting the groups in that new graphif - successful, animate to that new graph. - - @param gv (C++: graph_viewer_t *) - @param groups (C++: const intvec_t &) - @param new_current (C++: int) - - -ida_graph.viewer_fit_window(): - - viewer_fit_window(gv) - - - Fit graph viewer to its parent form. - - - @param gv (C++: graph_viewer_t *) - - -ida_graph.viewer_get_curnode(): - - viewer_get_curnode(gv) -> int - - - Get number of currently selected node (-1 if none) - - - @param gv (C++: graph_viewer_t *) - - -ida_graph.viewer_get_gli(): - - viewer_get_gli(out, gv, flags=0) -> bool - - - Get location info for given graph view If flags contains - GLICTL_CENTER, then the gli that will be retrieved, will be the one at - the center of the view. Otherwise it will be the top-left. - - @param out (C++: graph_location_info_t *) - @param gv (C++: graph_viewer_t *) - @param flags (C++: uint32) - - -ida_graph.viewer_get_node_info(): - - viewer_get_node_info(gv, out, n) -> bool - - - Get node info for node in given viewer (see 'get_node_info()' ) - - - @param gv (C++: graph_viewer_t *) - @param out (C++: node_info_t *) - @param n (C++: int) - - -ida_graph.viewer_get_selection(): - - viewer_get_selection(gv, sgs) -> bool - - - Get currently selected items for graph viewer. - - - @param gv (C++: graph_viewer_t *) - @param sgs (C++: screen_graph_selection_t *) - - -ida_graph.viewer_set_gli(): - - viewer_set_gli(gv, gli, flags=0) - - - Set location info for given graph view If flags contains - GLICTL_CENTER, then the gli will be set to be the center of the view. - Otherwise it will be the top-left. - - @param gv (C++: graph_viewer_t *) - @param gli (C++: const graph_location_info_t *) - @param flags (C++: uint32) - - -ida_graph.viewer_set_groups_visibility(): - - viewer_set_groups_visibility(gv, groups, expand, new_current=-1) -> bool - - - Wrapper around mutable_graph_t::change_visibility. This function - will:clone the current graphattempt changing visibility of the groups - in that new graphif successful, animate to that new graph. - - @param gv (C++: graph_viewer_t *) - @param groups (C++: const intvec_t &) - @param expand (C++: bool) - @param new_current (C++: int) - - -ida_graph.viewer_set_node_info(): - - viewer_set_node_info(gv, n, ni, flags) - - - Set node info for node in given viewer (see 'set_node_info()' ) - - - @param gv (C++: graph_viewer_t *) - @param n (C++: int) - @param ni (C++: const node_info_t &) - @param flags (C++: uint32) - - -ida_graph.viewer_set_titlebar_height(): - - viewer_set_titlebar_height(gv, height) -> int - - - Set height of node title bars ( 'grcode_set_titlebar_height' ) - - - @param gv (C++: graph_viewer_t *) - @param height (C++: int) - - - -=== ida_graph EPYDOC INJECTIONS === -ida_graph.GLICTL_CENTER -""" -the gli should be set/get as center -""" - -ida_graph.MTG_DOT_NODE -""" -is dot node? -""" - -ida_graph.MTG_GROUP_NODE -""" -is group node? -""" - -ida_graph.MTG_NON_DISPLAYABLE_NODE -""" -for disassembly graphs - non-displayable nodes have a visible area -that is too large to generate disassembly lines for without IDA -slowing down significantly (see MAX_VISIBLE_NODE_AREA) -""" - -ida_graph.NIF_BG_COLOR -""" - 'node_info_t::bg_color' -""" - -ida_graph.NIF_EA -""" - 'node_info_t::ea' -""" - -ida_graph.NIF_FLAGS -""" - 'node_info_t::flags' -""" - -ida_graph.NIF_FRAME_COLOR -""" - 'node_info_t::frame_color' -""" - -ida_graph.NIF_TEXT -""" - 'node_info_t::text' -""" -=== ida_graph EPYDOC INJECTIONS END === -class ida_hexrays.DecompilationFailure(): - - Raised on a decompilation error. - - The associated hexrays_failure_t object is stored in the - 'info' member of this exception. - - -class ida_hexrays.Hexrays_Hooks(): - - Proxy of C++ Hexrays_Hooks class - - -ida_hexrays.Hexrays_Hooks.close_pseudocode(): - - close_pseudocode(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.cmt_changed(): - - cmt_changed(self, cfunc, loc, cmt) -> int - - -ida_hexrays.Hexrays_Hooks.combine(): - - combine(self, blk, insn) -> int - - -ida_hexrays.Hexrays_Hooks.create_hint(): - - create_hint(self, vu) -> PyObject * - - -ida_hexrays.Hexrays_Hooks.curpos(): - - curpos(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.double_click(): - - double_click(self, vu, shift_state) -> int - - -ida_hexrays.Hexrays_Hooks.flowchart(): - - flowchart(self, fc) -> int - - -ida_hexrays.Hexrays_Hooks.func_printed(): - - func_printed(self, cfunc) -> int - - -ida_hexrays.Hexrays_Hooks.glbopt(): - - glbopt(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.hook(): - - hook(self) -> bool - - -ida_hexrays.Hexrays_Hooks.interr(): - - interr(self, errcode) -> int - - -ida_hexrays.Hexrays_Hooks.keyboard(): - - keyboard(self, vu, key_code, shift_state) -> int - - -ida_hexrays.Hexrays_Hooks.locopt(): - - locopt(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.lvar_cmt_changed(): - - lvar_cmt_changed(self, vu, v, cmt) -> int - - -ida_hexrays.Hexrays_Hooks.lvar_mapping_changed(): - - lvar_mapping_changed(self, vu, frm, to) -> int - - -ida_hexrays.Hexrays_Hooks.lvar_name_changed(): - - lvar_name_changed(self, vu, v, name, is_user_name) -> int - - -ida_hexrays.Hexrays_Hooks.lvar_type_changed(): - - lvar_type_changed(self, vu, v, tinfo) -> int - - -ida_hexrays.Hexrays_Hooks.maturity(): - - maturity(self, cfunc, new_maturity) -> int - - -ida_hexrays.Hexrays_Hooks.microcode(): - - microcode(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.open_pseudocode(): - - open_pseudocode(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.populating_popup(): - - populating_popup(self, widget, popup_handle, vu) -> int - - -ida_hexrays.Hexrays_Hooks.prealloc(): - - prealloc(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.preoptimized(): - - preoptimized(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.print_func(): - - print_func(self, cfunc, vp) -> int - - -ida_hexrays.Hexrays_Hooks.prolog(): - - prolog(self, mba, fc, reachable_blocks) -> int - - -ida_hexrays.Hexrays_Hooks.refresh_pseudocode(): - - refresh_pseudocode(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.resolve_stkaddrs(): - - resolve_stkaddrs(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.right_click(): - - right_click(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.stkpnts(): - - stkpnts(self, mba, _sps) -> int - - -ida_hexrays.Hexrays_Hooks.structural(): - - structural(self, ct) -> int - - -ida_hexrays.Hexrays_Hooks.switch_pseudocode(): - - switch_pseudocode(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.text_ready(): - - text_ready(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.unhook(): - - unhook(self) -> bool - - -ida_hexrays.accepts_small_udts(): - - accepts_small_udts(op) -> bool - - - Is the operator allowed on small structure or union? - - - @param op (C++: ctype_t) - - -ida_hexrays.accepts_udts(): - - accepts_udts(op) -> bool - - -ida_hexrays.arglocs_overlap(): - - arglocs_overlap(loc1, w1, loc2, w2) -> bool - - - Do two arglocs overlap? - - - @param loc1 (C++: const vdloc_t &) - @param w1 (C++: size_t) - @param loc2 (C++: const vdloc_t &) - @param w2 (C++: size_t) - - -class ida_hexrays.array_of_bitsets(): - - Proxy of C++ qvector<(bitset_t)> class - - -ida_hexrays.array_of_bitsets.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.array_of_bitsets.at(): - - at(self, _idx) -> bitset_t - - -ida_hexrays.array_of_bitsets.begin(): - - begin(self) -> bitset_t - begin(self) -> bitset_t - - -ida_hexrays.array_of_bitsets.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.array_of_bitsets.clear(): - - clear(self) - - -ida_hexrays.array_of_bitsets.empty(): - - empty(self) -> bool - - -ida_hexrays.array_of_bitsets.end(): - - end(self) -> bitset_t - end(self) -> bitset_t - - -ida_hexrays.array_of_bitsets.erase(): - - erase(self, it) -> bitset_t - erase(self, first, last) -> bitset_t - - -ida_hexrays.array_of_bitsets.extract(): - - extract(self) -> bitset_t - - -ida_hexrays.array_of_bitsets.find(): - - find(self, x) -> bitset_t - find(self, x) -> bitset_t - - -ida_hexrays.array_of_bitsets.grow(): - - grow(self, x=bitset_t()) - - -ida_hexrays.array_of_bitsets.has(): - - has(self, x) -> bool - - -ida_hexrays.array_of_bitsets.inject(): - - inject(self, s, len) - - -ida_hexrays.array_of_bitsets.insert(): - - insert(self, it, x) -> bitset_t - - -ida_hexrays.array_of_bitsets.pop_back(): - - pop_back(self) - - -ida_hexrays.array_of_bitsets.push_back(): - - push_back(self, x) - push_back(self) -> bitset_t - - -ida_hexrays.array_of_bitsets.qclear(): - - qclear(self) - - -ida_hexrays.array_of_bitsets.reserve(): - - reserve(self, cnt) - - -ida_hexrays.array_of_bitsets.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.array_of_bitsets.size(): - - size(self) -> size_t - - -ida_hexrays.array_of_bitsets.swap(): - - swap(self, r) - - -ida_hexrays.array_of_bitsets.truncate(): - - truncate(self) - - -class ida_hexrays.array_of_ivlsets(): - - Proxy of C++ qvector<(ivlset_t)> class - - -ida_hexrays.array_of_ivlsets.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.array_of_ivlsets.at(): - - at(self, _idx) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.begin(): - - begin(self) -> ivlset_t - begin(self) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.array_of_ivlsets.clear(): - - clear(self) - - -ida_hexrays.array_of_ivlsets.empty(): - - empty(self) -> bool - - -ida_hexrays.array_of_ivlsets.end(): - - end(self) -> ivlset_t - end(self) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.erase(): - - erase(self, it) -> ivlset_t - erase(self, first, last) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.extract(): - - extract(self) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.find(): - - find(self, x) -> ivlset_t - find(self, x) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.grow(): - - grow(self, x=ivlset_t()) - - -ida_hexrays.array_of_ivlsets.has(): - - has(self, x) -> bool - - -ida_hexrays.array_of_ivlsets.inject(): - - inject(self, s, len) - - -ida_hexrays.array_of_ivlsets.insert(): - - insert(self, it, x) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.pop_back(): - - pop_back(self) - - -ida_hexrays.array_of_ivlsets.push_back(): - - push_back(self, x) - push_back(self) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.qclear(): - - qclear(self) - - -ida_hexrays.array_of_ivlsets.reserve(): - - reserve(self, cnt) - - -ida_hexrays.array_of_ivlsets.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.array_of_ivlsets.size(): - - size(self) -> size_t - - -ida_hexrays.array_of_ivlsets.swap(): - - swap(self, r) - - -ida_hexrays.array_of_ivlsets.truncate(): - - truncate(self) - - -ida_hexrays.asgop(): - - asgop(cop) -> ctype_t - - - Convert plain operator into assignment operator. For example, cot_add - returns cot_asgadd. - - - @param cop (C++: ctype_t) - - -ida_hexrays.asgop_revert(): - - asgop_revert(cop) -> ctype_t - - - Convert assignment operator into plain operator. For example, - cot_asgadd returns cot_add - - @param cop (C++: ctype_t) - @return: cot_empty is the input operator is not an assignment - operator. - - -class ida_hexrays.bit_bound_t(): - - Proxy of C++ bit_bound_t class - - -ida_hexrays.bit_bound_t.nbits: - bit_bound_t_nbits_get(self) -> int16 - -ida_hexrays.bit_bound_t.sbits: - bit_bound_t_sbits_get(self) -> int16 - -class ida_hexrays.bitset_t(): - - Proxy of C++ bitset_t class - - -ida_hexrays.bitset_t.add(): - - add(self, bit) -> bool - add(self, bit, width) -> bool - add(self, ml) -> bool - - -ida_hexrays.bitset_t.back(): - - back(self) -> int - - -ida_hexrays.bitset_t.begin(): - - begin(self) -> bitset_t::iterator - - -ida_hexrays.bitset_t.clear(): - - clear(self) - - -ida_hexrays.bitset_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.bitset_t.copy(): - - copy(self, m) -> bitset_t - - -ida_hexrays.bitset_t.count(): - - count(self) -> int - count(self, bit) -> int - - -ida_hexrays.bitset_t.cut_at(): - - cut_at(self, maxbit) -> bool - - -ida_hexrays.bitset_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.bitset_t.empty(): - - empty(self) -> bool - - -ida_hexrays.bitset_t.end(): - - end(self) -> bitset_t::iterator - - -ida_hexrays.bitset_t.fill_with_ones(): - - fill_with_ones(self, maxbit) - - -ida_hexrays.bitset_t.front(): - - front(self) -> int - - -ida_hexrays.bitset_t.has(): - - has(self, bit) -> bool - - -ida_hexrays.bitset_t.has_all(): - - has_all(self, bit, width) -> bool - - -ida_hexrays.bitset_t.has_any(): - - has_any(self, bit, width) -> bool - - -ida_hexrays.bitset_t.has_common(): - - has_common(self, ml) -> bool - - -ida_hexrays.bitset_t.inc(): - - inc(self, p, n=1) - - -ida_hexrays.bitset_t.includes(): - - includes(self, ml) -> bool - - -ida_hexrays.bitset_t.intersect(): - - intersect(self, ml) -> bool - - -ida_hexrays.bitset_t.is_subset_of(): - - is_subset_of(self, ml) -> bool - - -ida_hexrays.bitset_t.itat(): - - itat(self, n) -> bitset_t::iterator - - -ida_hexrays.bitset_t.itv(): - - itv(self, it) -> int - - -ida_hexrays.bitset_t.last(): - - last(self) -> int - - -ida_hexrays.bitset_t.shift_down(): - - shift_down(self, shift) - - -ida_hexrays.bitset_t.sub(): - - sub(self, bit) -> bool - sub(self, bit, width) -> bool - sub(self, ml) -> bool - - -ida_hexrays.bitset_t.swap(): - - swap(self, r) - - -ida_hexrays.block_chains_begin(): - - block_chains_begin(set) -> block_chains_iterator_t - - - Get iterator pointing to the beginning of 'block_chains_t' . - - - @param set (C++: const block_chains_t *) - - -ida_hexrays.block_chains_clear(): - - block_chains_clear(set) - - - Clear 'block_chains_t' . - - - @param set (C++: block_chains_t *) - - -ida_hexrays.block_chains_end(): - - block_chains_end(set) -> block_chains_iterator_t - - - Get iterator pointing to the end of 'block_chains_t' . - - - @param set (C++: const block_chains_t *) - - -ida_hexrays.block_chains_erase(): - - block_chains_erase(set, p) - - - Erase current element from 'block_chains_t' . - - - @param set (C++: block_chains_t *) - @param p (C++: block_chains_iterator_t) - - -ida_hexrays.block_chains_find(): - - block_chains_find(set, val) -> block_chains_iterator_t - - - Find the specified key in set 'block_chains_t' . - - - @param set (C++: const block_chains_t *) - @param val (C++: const chain_t &) - - -ida_hexrays.block_chains_free(): - - block_chains_free(set) - - - Delete 'block_chains_t' instance. - - - @param set (C++: block_chains_t *) - - -ida_hexrays.block_chains_get(): - - block_chains_get(p) -> chain_t - - - Get reference to the current set value. - - - @param p (C++: block_chains_iterator_t) - - -ida_hexrays.block_chains_insert(): - - block_chains_insert(set, val) -> block_chains_iterator_t - - - Insert new ( 'chain_t' ) into set 'block_chains_t' . - - - @param set (C++: block_chains_t *) - @param val (C++: const chain_t &) - - -class ida_hexrays.block_chains_iterator_t(): - - Proxy of C++ block_chains_iterator_t class - - -ida_hexrays.block_chains_iterator_t.x: - block_chains_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.block_chains_new(): - - block_chains_new() -> block_chains_t - - - Create a new 'block_chains_t' instance. - - -ida_hexrays.block_chains_next(): - - block_chains_next(p) -> block_chains_iterator_t - - - Move to the next element. - - - @param p (C++: block_chains_iterator_t) - - -ida_hexrays.block_chains_prev(): - - block_chains_prev(p) -> block_chains_iterator_t - - - Move to the previous element. - - - @param p (C++: block_chains_iterator_t) - - -ida_hexrays.block_chains_size(): - - block_chains_size(set) -> size_t - - - Get size of 'block_chains_t' . - - - @param set (C++: block_chains_t *) - - -class ida_hexrays.block_chains_t(): - - Proxy of C++ block_chains_t class - - -ida_hexrays.block_chains_t._print(): - - _print(self) - - -ida_hexrays.block_chains_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.block_chains_t.get_chain(): - - get_chain(self, k, width=1) -> chain_t - get_chain(self, k, width=1) -> chain_t - get_chain(self, ch) -> chain_t - get_chain(self, ch) -> chain_t - - -ida_hexrays.block_chains_t.get_reg_chain(): - - get_reg_chain(self, reg, width=1) -> chain_t - get_reg_chain(self, reg, width=1) -> chain_t - - -ida_hexrays.block_chains_t.get_stk_chain(): - - get_stk_chain(self, off, width=1) -> chain_t - get_stk_chain(self, off, width=1) -> chain_t - - -class ida_hexrays.block_chains_vec_t(): - - Proxy of C++ qvector<(block_chains_t)> class - - -ida_hexrays.block_chains_vec_t.at(): - - at(self, _idx) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.begin(): - - begin(self) -> block_chains_t - begin(self) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.block_chains_vec_t.clear(): - - clear(self) - - -ida_hexrays.block_chains_vec_t.empty(): - - empty(self) -> bool - - -ida_hexrays.block_chains_vec_t.end(): - - end(self) -> block_chains_t - end(self) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.erase(): - - erase(self, it) -> block_chains_t - erase(self, first, last) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.extract(): - - extract(self) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.grow(): - - grow(self, x=block_chains_t()) - - -ida_hexrays.block_chains_vec_t.inject(): - - inject(self, s, len) - - -ida_hexrays.block_chains_vec_t.insert(): - - insert(self, it, x) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.pop_back(): - - pop_back(self) - - -ida_hexrays.block_chains_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.qclear(): - - qclear(self) - - -ida_hexrays.block_chains_vec_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.block_chains_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.block_chains_vec_t.size(): - - size(self) -> size_t - - -ida_hexrays.block_chains_vec_t.swap(): - - swap(self, r) - - -ida_hexrays.block_chains_vec_t.truncate(): - - truncate(self) - - -ida_hexrays.boundaries_begin(): - - boundaries_begin(map) -> boundaries_iterator_t - - - Get iterator pointing to the beginning of boundaries_t. - - - @param map (C++: const boundaries_t *) - - -ida_hexrays.boundaries_clear(): - - boundaries_clear(map) - - - Clear boundaries_t. - - - @param map (C++: boundaries_t *) - - -ida_hexrays.boundaries_end(): - - boundaries_end(map) -> boundaries_iterator_t - - - Get iterator pointing to the end of boundaries_t. - - - @param map (C++: const boundaries_t *) - - -ida_hexrays.boundaries_erase(): - - boundaries_erase(map, p) - - - Erase current element from boundaries_t. - - - @param map (C++: boundaries_t *) - @param p (C++: boundaries_iterator_t) - - -ida_hexrays.boundaries_find(): - - boundaries_find(map, key) -> boundaries_iterator_t - - - Find the specified key in boundaries_t. - - - @param map (C++: const boundaries_t *) - @param key (C++: const cinsn_t *&) - - -ida_hexrays.boundaries_first(): - - boundaries_first(p) -> cinsn_t - - - Get reference to the current map key. - - - @param p (C++: boundaries_iterator_t) - - -ida_hexrays.boundaries_free(): - - boundaries_free(map) - - - Delete boundaries_t instance. - - - @param map (C++: boundaries_t *) - - -ida_hexrays.boundaries_insert(): - - boundaries_insert(map, key, val) -> boundaries_iterator_t - - - Insert new ( 'cinsn_t' *, 'rangeset_t' ) pair into boundaries_t. - - - @param map (C++: boundaries_t *) - @param key (C++: const cinsn_t *&) - @param val (C++: const rangeset_t &) - - -class ida_hexrays.boundaries_iterator_t(): - - Proxy of C++ boundaries_iterator_t class - - -ida_hexrays.boundaries_iterator_t.x: - boundaries_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.boundaries_new(): - - boundaries_new() -> boundaries_t - - - Create a new boundaries_t instance. - - -ida_hexrays.boundaries_next(): - - boundaries_next(p) -> boundaries_iterator_t - - - Move to the next element. - - - @param p (C++: boundaries_iterator_t) - - -ida_hexrays.boundaries_prev(): - - boundaries_prev(p) -> boundaries_iterator_t - - - Move to the previous element. - - - @param p (C++: boundaries_iterator_t) - - -ida_hexrays.boundaries_second(): - - boundaries_second(p) -> rangeset_t - - - Get reference to the current map value. - - - @param p (C++: boundaries_iterator_t) - - -ida_hexrays.boundaries_size(): - - boundaries_size(map) -> size_t - - - Get size of boundaries_t. - - - @param map (C++: boundaries_t *) - - -class ida_hexrays.boundaries_t(): - - Proxy of C++ std::map<(p.cinsn_t,rangeset_t)> class - - -ida_hexrays.boundaries_t.at(): - - at(self, _Keyval) -> rangeset_t - - -class ida_hexrays.boundaries_t.keytype(): - - Proxy of C++ cinsn_t class - - -ida_hexrays.boundaries_t.keytype._print(): - - _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) - - -ida_hexrays.boundaries_t.keytype.assign(): - - assign(self, r) -> cinsn_t - - -ida_hexrays.boundaries_t.keytype.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.boundaries_t.keytype.cleanup(): - - cleanup(self) - - -ida_hexrays.boundaries_t.keytype.collect_free_breaks(): - - collect_free_breaks(self, breaks) -> bool - - -ida_hexrays.boundaries_t.keytype.collect_free_continues(): - - collect_free_continues(self, continues) -> bool - - -ida_hexrays.boundaries_t.keytype.compare(): - - compare(self, r) -> int - - -ida_hexrays.boundaries_t.keytype.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.boundaries_t.keytype.contains_free_break(): - - contains_free_break(self) -> bool - - -ida_hexrays.boundaries_t.keytype.contains_free_continue(): - - contains_free_continue(self) -> bool - - -ida_hexrays.boundaries_t.keytype.contains_insn(): - - contains_insn(self, type, times=1) -> bool - - -ida_hexrays.boundaries_t.keytype.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.boundaries_t.keytype.create_if(): - - create_if(self, cnd) -> cif_t - - -ida_hexrays.boundaries_t.keytype.details: - - return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. - - -ida_hexrays.boundaries_t.keytype.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.boundaries_t.keytype.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.boundaries_t.keytype.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.boundaries_t.keytype.index: - citem_t_index_get(self) -> int - -ida_hexrays.boundaries_t.keytype.insn_is_epilog(): - - insn_is_epilog(insn) -> bool - - -ida_hexrays.boundaries_t.keytype.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.boundaries_t.keytype.is_ordinary_flow(): - - is_ordinary_flow(self) -> bool - - -ida_hexrays.boundaries_t.keytype.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.boundaries_t.keytype.new_insn(): - - new_insn(self, insn_ea) -> cinsn_t - - -ida_hexrays.boundaries_t.keytype.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.boundaries_t.keytype.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.boundaries_t.keytype.print1(): - - print1(self, func) - - -ida_hexrays.boundaries_t.keytype.swap(): - - swap(self, r) - - -ida_hexrays.boundaries_t.keytype.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.boundaries_t.keytype.zero(): - - zero(self) - - -ida_hexrays.boundaries_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.boundaries_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.boundaries_t.setdefault(): - - Sets the value associated with the provided key. - - -class ida_hexrays.boundaries_t.valuetype(): - - Proxy of C++ rangeset_t class - - -ida_hexrays.boundaries_t.valuetype._print(): - - _print(self) -> size_t - - -ida_hexrays.boundaries_t.valuetype.add(): - - add(self, range) -> bool - add(self, start, _end) -> bool - add(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_hexrays.boundaries_t.valuetype.cached_range(): - - cached_range(self) -> range_t - - -ida_hexrays.boundaries_t.valuetype.clear(): - - clear(self) - - -ida_hexrays.boundaries_t.valuetype.contains(): - - contains(self, ea) -> bool - contains(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.empty(): - - empty(self) -> bool - - -ida_hexrays.boundaries_t.valuetype.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_hexrays.boundaries_t.valuetype.find_range(): - - find_range(self, ea) -> range_t - - -ida_hexrays.boundaries_t.valuetype.getrange(): - - getrange(self, idx) -> range_t - - -ida_hexrays.boundaries_t.valuetype.has_common(): - - has_common(self, range) -> bool - has_common(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.includes(): - - includes(self, range) -> bool - - -ida_hexrays.boundaries_t.valuetype.intersect(): - - intersect(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.is_equal(): - - is_equal(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.is_subset_of(): - - is_subset_of(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.lastrange(): - - lastrange(self) -> range_t - - -ida_hexrays.boundaries_t.valuetype.next_addr(): - - next_addr(self, ea) -> ea_t - - -ida_hexrays.boundaries_t.valuetype.next_range(): - - next_range(self, ea) -> ea_t - - -ida_hexrays.boundaries_t.valuetype.nranges(): - - nranges(self) -> size_t - - -ida_hexrays.boundaries_t.valuetype.prev_addr(): - - prev_addr(self, ea) -> ea_t - - -ida_hexrays.boundaries_t.valuetype.prev_range(): - - prev_range(self, ea) -> ea_t - - -ida_hexrays.boundaries_t.valuetype.sub(): - - sub(self, range) -> bool - sub(self, ea) -> bool - sub(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.swap(): - - swap(self, r) - - -class ida_hexrays.carg_t(): - - Proxy of C++ carg_t class - - -ida_hexrays.carg_t.assign(): - - assign(self, r) -> cexpr_t - - -ida_hexrays.carg_t.calc_type(): - - calc_type(self, recursive) - - -ida_hexrays.carg_t.cexpr: - citem_t_cexpr_get(self) -> cexpr_t - -ida_hexrays.carg_t.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.carg_t.cleanup(): - - cleanup(self) - - -ida_hexrays.carg_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.carg_t.consume_cexpr(): - - consume_cexpr(self, e) - - -ida_hexrays.carg_t.contains_comma(): - - contains_comma(self, times=1) -> bool - - -ida_hexrays.carg_t.contains_comma_or_insn_or_label(): - - contains_comma_or_insn_or_label(self, maxcommas=1) -> bool - - -ida_hexrays.carg_t.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.carg_t.contains_insn(): - - contains_insn(self, times=1) -> bool - - -ida_hexrays.carg_t.contains_insn_or_label(): - - contains_insn_or_label(self) -> bool - - -ida_hexrays.carg_t.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.carg_t.contains_operator(): - - contains_operator(self, needed_op, times=1) -> bool - - -ida_hexrays.carg_t.cpadone(): - - cpadone(self) -> bool - - -ida_hexrays.carg_t.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.carg_t.equal_effect(): - - equal_effect(self, r) -> bool - - -ida_hexrays.carg_t.exflags: - cexpr_t_exflags_get(self) -> uint32 - -ida_hexrays.carg_t.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.carg_t.find_num_op(): - - find_num_op(self) -> cexpr_t - find_num_op(self) -> cexpr_t - - -ida_hexrays.carg_t.find_op(): - - find_op(self, _op) -> cexpr_t - find_op(self, _op) -> cexpr_t - - -ida_hexrays.carg_t.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.carg_t.formal_type: - carg_t_formal_type_get(self) -> tinfo_t - -ida_hexrays.carg_t.get_1num_op(): - - get_1num_op(self, o1, o2) -> bool - - -ida_hexrays.carg_t.get_const_value(): - - get_const_value(self) -> bool - - -ida_hexrays.carg_t.get_high_nbit_bound(): - - get_high_nbit_bound(self) -> bit_bound_t - - -ida_hexrays.carg_t.get_low_nbit_bound(): - - get_low_nbit_bound(self) -> int - - -ida_hexrays.carg_t.get_ptr_or_array(): - - get_ptr_or_array(self) -> cexpr_t - - -ida_hexrays.carg_t.get_type_sign(): - - get_type_sign(self) -> type_sign_t - - -ida_hexrays.carg_t.get_v(): - - get_v(self) -> var_ref_t - - -ida_hexrays.carg_t.has_side_effects(): - - has_side_effects(self) -> bool - - -ida_hexrays.carg_t.index: - citem_t_index_get(self) -> int - -ida_hexrays.carg_t.is_call_arg_of(): - - is_call_arg_of(self, parent) -> bool - - -ida_hexrays.carg_t.is_call_object_of(): - - is_call_object_of(self, parent) -> bool - - -ida_hexrays.carg_t.is_child_of(): - - is_child_of(self, parent) -> bool - - -ida_hexrays.carg_t.is_const_value(): - - is_const_value(self, _v) -> bool - - -ida_hexrays.carg_t.is_cstr(): - - is_cstr(self) -> bool - - -ida_hexrays.carg_t.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.carg_t.is_fpop(): - - is_fpop(self) -> bool - - -ida_hexrays.carg_t.is_jumpout(): - - is_jumpout(self) -> bool - - -ida_hexrays.carg_t.is_negative_const(): - - is_negative_const(self) -> bool - - -ida_hexrays.carg_t.is_nice_cond(): - - is_nice_cond(self) -> bool - - -ida_hexrays.carg_t.is_nice_expr(): - - is_nice_expr(self) -> bool - - -ida_hexrays.carg_t.is_non_negative_const(): - - is_non_negative_const(self) -> bool - - -ida_hexrays.carg_t.is_non_zero_const(): - - is_non_zero_const(self) -> bool - - -ida_hexrays.carg_t.is_odd_lvalue(): - - is_odd_lvalue(self) -> bool - - -ida_hexrays.carg_t.is_type_signed(): - - is_type_signed(self) -> bool - - -ida_hexrays.carg_t.is_type_unsigned(): - - is_type_unsigned(self) -> bool - - -ida_hexrays.carg_t.is_undef_val(): - - is_undef_val(self) -> bool - - -ida_hexrays.carg_t.is_vararg: - carg_t_is_vararg_get(self) -> bool - -ida_hexrays.carg_t.is_vftable(): - - is_vftable(self) -> bool - - -ida_hexrays.carg_t.is_zero_const(): - - is_zero_const(self) -> bool - - -ida_hexrays.carg_t.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.carg_t.maybe_ptr(): - - maybe_ptr(self) -> bool - - -ida_hexrays.carg_t.numval(): - - numval(self) -> uint64 - - -ida_hexrays.carg_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.carg_t.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.carg_t.operands: - - return a dictionary with the operands of a cexpr_t. - - -ida_hexrays.carg_t.print1(): - - print1(self, func) - - -ida_hexrays.carg_t.put_number(): - - put_number(self, func, value, nbytes, sign=no_sign) - - -ida_hexrays.carg_t.requires_lvalue(): - - requires_lvalue(self, child) -> bool - - -ida_hexrays.carg_t.set_cpadone(): - - set_cpadone(self) - - -ida_hexrays.carg_t.set_v(): - - set_v(self, v) - - -ida_hexrays.carg_t.set_vftable(): - - set_vftable(self) - - -ida_hexrays.carg_t.swap(): - - swap(self, r) - - -ida_hexrays.carg_t.theother(): - - theother(self, what) -> cexpr_t - theother(self, what) -> cexpr_t - - -ida_hexrays.carg_t.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.carg_t.type: - cexpr_t_type_get(self) -> tinfo_t - -class ida_hexrays.carglist_t(): - - Proxy of C++ carglist_t class - - -ida_hexrays.carglist_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.carglist_t.append(): - - push_back(self, x) - push_back(self) -> carg_t - - -ida_hexrays.carglist_t.at(): - - __getitem__(self, i) -> carg_t - - -ida_hexrays.carglist_t.begin(): - - begin(self) -> carg_t - begin(self) -> carg_t - - -ida_hexrays.carglist_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.carglist_t.clear(): - - clear(self) - - -ida_hexrays.carglist_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.carglist_t.empty(): - - empty(self) -> bool - - -ida_hexrays.carglist_t.end(): - - end(self) -> carg_t - end(self) -> carg_t - - -ida_hexrays.carglist_t.erase(): - - erase(self, it) -> carg_t - erase(self, first, last) -> carg_t - - -ida_hexrays.carglist_t.extract(): - - extract(self) -> carg_t - - -ida_hexrays.carglist_t.find(): - - find(self, x) -> carg_t - find(self, x) -> carg_t - - -ida_hexrays.carglist_t.flags: - carglist_t_flags_get(self) -> int - -ida_hexrays.carglist_t.functype: - carglist_t_functype_get(self) -> tinfo_t - -ida_hexrays.carglist_t.grow(): - - grow(self, x=carg_t()) - - -ida_hexrays.carglist_t.has(): - - has(self, x) -> bool - - -ida_hexrays.carglist_t.inject(): - - inject(self, s, len) - - -ida_hexrays.carglist_t.insert(): - - insert(self, it, x) -> carg_t - - -ida_hexrays.carglist_t.pop_back(): - - pop_back(self) - - -ida_hexrays.carglist_t.push_back(): - - push_back(self, x) - push_back(self) -> carg_t - - -ida_hexrays.carglist_t.qclear(): - - qclear(self) - - -ida_hexrays.carglist_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.carglist_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.carglist_t.size(): - - size(self) -> size_t - - -ida_hexrays.carglist_t.swap(): - - swap(self, r) - - -ida_hexrays.carglist_t.truncate(): - - truncate(self) - - -class ida_hexrays.casm_t(): - - Proxy of C++ casm_t class - - -ida_hexrays.casm_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.casm_t.append(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_hexrays.casm_t.at(): - - __getitem__(self, i) -> unsigned-ea-like-numeric-type & - - -ida_hexrays.casm_t.begin(): - - begin(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - begin(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_hexrays.casm_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.casm_t.clear(): - - clear(self) - - -ida_hexrays.casm_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.casm_t.empty(): - - empty(self) -> bool - - -ida_hexrays.casm_t.end(): - - end(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - end(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_hexrays.casm_t.erase(): - - erase(self, it) -> qvector< unsigned-ea-like-numeric-type >::iterator - erase(self, first, last) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.casm_t.extract(): - - extract(self) -> unsigned-ea-like-numeric-type * - - -ida_hexrays.casm_t.find(): - - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_hexrays.casm_t.has(): - - has(self, x) -> bool - - -ida_hexrays.casm_t.inject(): - - inject(self, s, len) - - -ida_hexrays.casm_t.insert(): - - insert(self, it, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.casm_t.one_insn(): - - one_insn(self) -> bool - - -ida_hexrays.casm_t.pop_back(): - - pop_back(self) - - -ida_hexrays.casm_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_hexrays.casm_t.qclear(): - - qclear(self) - - -ida_hexrays.casm_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.casm_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.casm_t.size(): - - size(self) -> size_t - - -ida_hexrays.casm_t.swap(): - - swap(self, r) - - -ida_hexrays.casm_t.truncate(): - - truncate(self) - - -class ida_hexrays.cblock_t(): - - Proxy of C++ cblock_t class - - -ida_hexrays.cblock_t.back(): - - back(self) -> cinsn_t - back(self) -> cinsn_t - - -ida_hexrays.cblock_t.begin(): - - begin(self) -> qlist_cinsn_t_iterator - - -ida_hexrays.cblock_t.clear(): - - clear(self) - - -ida_hexrays.cblock_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cblock_t.empty(): - - empty(self) -> bool - - -ida_hexrays.cblock_t.end(): - - end(self) -> qlist_cinsn_t_iterator - - -ida_hexrays.cblock_t.erase(): - - erase(self, p) -> qlist< cinsn_t >::iterator - erase(self, p1, p2) - erase(self, p) - - -ida_hexrays.cblock_t.front(): - - front(self) -> cinsn_t - front(self) -> cinsn_t - - -ida_hexrays.cblock_t.pop_back(): - - pop_back(self) - - -ida_hexrays.cblock_t.pop_front(): - - pop_front(self) - - -ida_hexrays.cblock_t.push_back(): - - push_back(self, x) - push_back(self) -> cinsn_t - - -ida_hexrays.cblock_t.push_front(): - - push_front(self, x) - - -ida_hexrays.cblock_t.rbegin(): - - rbegin(self) -> qlist< cinsn_t >::reverse_iterator - rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator - - -ida_hexrays.cblock_t.rend(): - - rend(self) -> qlist< cinsn_t >::reverse_iterator - rend(self) -> qlist< cinsn_t >::const_reverse_iterator - - -ida_hexrays.cblock_t.size(): - - size(self) -> size_t - - -ida_hexrays.cblock_t.swap(): - - swap(self, x) - - -class ida_hexrays.ccase_t(): - - Proxy of C++ ccase_t class - - -ida_hexrays.ccase_t._print(): - - _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) - - -ida_hexrays.ccase_t.assign(): - - assign(self, r) -> cinsn_t - - -ida_hexrays.ccase_t.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.ccase_t.cleanup(): - - cleanup(self) - - -ida_hexrays.ccase_t.collect_free_breaks(): - - collect_free_breaks(self, breaks) -> bool - - -ida_hexrays.ccase_t.collect_free_continues(): - - collect_free_continues(self, continues) -> bool - - -ida_hexrays.ccase_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.ccase_t.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.ccase_t.contains_free_break(): - - contains_free_break(self) -> bool - - -ida_hexrays.ccase_t.contains_free_continue(): - - contains_free_continue(self) -> bool - - -ida_hexrays.ccase_t.contains_insn(): - - contains_insn(self, type, times=1) -> bool - - -ida_hexrays.ccase_t.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.ccase_t.create_if(): - - create_if(self, cnd) -> cif_t - - -ida_hexrays.ccase_t.details: - - return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. - - -ida_hexrays.ccase_t.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.ccase_t.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.ccase_t.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.ccase_t.index: - citem_t_index_get(self) -> int - -ida_hexrays.ccase_t.insn_is_epilog(): - - insn_is_epilog(insn) -> bool - - -ida_hexrays.ccase_t.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.ccase_t.is_ordinary_flow(): - - is_ordinary_flow(self) -> bool - - -ida_hexrays.ccase_t.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.ccase_t.new_insn(): - - new_insn(self, insn_ea) -> cinsn_t - - -ida_hexrays.ccase_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.ccase_t.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.ccase_t.print1(): - - print1(self, func) - - -ida_hexrays.ccase_t.size(): - - size(self) -> size_t - - -ida_hexrays.ccase_t.swap(): - - swap(self, r) - - -ida_hexrays.ccase_t.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.ccase_t.value(): - - value(self, i) -> uint64 const & - - -ida_hexrays.ccase_t.values: - ccase_t_values_get(self) -> ulonglongvec_t - -ida_hexrays.ccase_t.zero(): - - zero(self) - - -class ida_hexrays.ccases_t(): - - Proxy of C++ ccases_t class - - -ida_hexrays.ccases_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.ccases_t.append(): - - push_back(self, x) - push_back(self) -> ccase_t - - -ida_hexrays.ccases_t.at(): - - __getitem__(self, i) -> ccase_t - - -ida_hexrays.ccases_t.begin(): - - begin(self) -> ccase_t - begin(self) -> ccase_t - - -ida_hexrays.ccases_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.ccases_t.clear(): - - clear(self) - - -ida_hexrays.ccases_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.ccases_t.empty(): - - empty(self) -> bool - - -ida_hexrays.ccases_t.end(): - - end(self) -> ccase_t - end(self) -> ccase_t - - -ida_hexrays.ccases_t.erase(): - - erase(self, it) -> ccase_t - erase(self, first, last) -> ccase_t - - -ida_hexrays.ccases_t.extract(): - - extract(self) -> ccase_t - - -ida_hexrays.ccases_t.find(): - - find(self, x) -> ccase_t - find(self, x) -> ccase_t - - -ida_hexrays.ccases_t.grow(): - - grow(self, x=ccase_t()) - - -ida_hexrays.ccases_t.has(): - - has(self, x) -> bool - - -ida_hexrays.ccases_t.inject(): - - inject(self, s, len) - - -ida_hexrays.ccases_t.insert(): - - insert(self, it, x) -> ccase_t - - -ida_hexrays.ccases_t.pop_back(): - - pop_back(self) - - -ida_hexrays.ccases_t.push_back(): - - push_back(self, x) - push_back(self) -> ccase_t - - -ida_hexrays.ccases_t.qclear(): - - qclear(self) - - -ida_hexrays.ccases_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.ccases_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.ccases_t.size(): - - size(self) -> size_t - - -ida_hexrays.ccases_t.swap(): - - swap(self, r) - - -ida_hexrays.ccases_t.truncate(): - - truncate(self) - - -class ida_hexrays.cdo_t(): - - Proxy of C++ cdo_t class - - -ida_hexrays.cdo_t.assign(): - - assign(self, r) -> cloop_t - - -ida_hexrays.cdo_t.body: - cloop_t_body_get(self) -> cinsn_t - -ida_hexrays.cdo_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cdo_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cdo_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -class ida_hexrays.ceinsn_t(): - - Proxy of C++ ceinsn_t class - - -ida_hexrays.ceinsn_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.cexpr_operands(): - - return a dictionary with the operands of a cexpr_t. - - -class ida_hexrays.cexpr_t(): - - Proxy of C++ cexpr_t class - - -ida_hexrays.cexpr_t.assign(): - - assign(self, r) -> cexpr_t - - -ida_hexrays.cexpr_t.calc_type(): - - calc_type(self, recursive) - - -ida_hexrays.cexpr_t.cexpr: - citem_t_cexpr_get(self) -> cexpr_t - -ida_hexrays.cexpr_t.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.cexpr_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cexpr_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cexpr_t.contains_comma(): - - contains_comma(self, times=1) -> bool - - -ida_hexrays.cexpr_t.contains_comma_or_insn_or_label(): - - contains_comma_or_insn_or_label(self, maxcommas=1) -> bool - - -ida_hexrays.cexpr_t.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.cexpr_t.contains_insn(): - - contains_insn(self, times=1) -> bool - - -ida_hexrays.cexpr_t.contains_insn_or_label(): - - contains_insn_or_label(self) -> bool - - -ida_hexrays.cexpr_t.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.cexpr_t.contains_operator(): - - contains_operator(self, needed_op, times=1) -> bool - - -ida_hexrays.cexpr_t.cpadone(): - - cpadone(self) -> bool - - -ida_hexrays.cexpr_t.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.cexpr_t.equal_effect(): - - equal_effect(self, r) -> bool - - -ida_hexrays.cexpr_t.exflags: - cexpr_t_exflags_get(self) -> uint32 - -ida_hexrays.cexpr_t.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.cexpr_t.find_num_op(): - - find_num_op(self) -> cexpr_t - find_num_op(self) -> cexpr_t - - -ida_hexrays.cexpr_t.find_op(): - - find_op(self, _op) -> cexpr_t - find_op(self, _op) -> cexpr_t - - -ida_hexrays.cexpr_t.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.cexpr_t.get_1num_op(): - - get_1num_op(self, o1, o2) -> bool - - -ida_hexrays.cexpr_t.get_const_value(): - - get_const_value(self) -> bool - - -ida_hexrays.cexpr_t.get_high_nbit_bound(): - - get_high_nbit_bound(self) -> bit_bound_t - - -ida_hexrays.cexpr_t.get_low_nbit_bound(): - - get_low_nbit_bound(self) -> int - - -ida_hexrays.cexpr_t.get_ptr_or_array(): - - get_ptr_or_array(self) -> cexpr_t - - -ida_hexrays.cexpr_t.get_type_sign(): - - get_type_sign(self) -> type_sign_t - - -ida_hexrays.cexpr_t.get_v(): - - get_v(self) -> var_ref_t - - -ida_hexrays.cexpr_t.has_side_effects(): - - has_side_effects(self) -> bool - - -ida_hexrays.cexpr_t.index: - citem_t_index_get(self) -> int - -ida_hexrays.cexpr_t.is_call_arg_of(): - - is_call_arg_of(self, parent) -> bool - - -ida_hexrays.cexpr_t.is_call_object_of(): - - is_call_object_of(self, parent) -> bool - - -ida_hexrays.cexpr_t.is_child_of(): - - is_child_of(self, parent) -> bool - - -ida_hexrays.cexpr_t.is_const_value(): - - is_const_value(self, _v) -> bool - - -ida_hexrays.cexpr_t.is_cstr(): - - is_cstr(self) -> bool - - -ida_hexrays.cexpr_t.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.cexpr_t.is_fpop(): - - is_fpop(self) -> bool - - -ida_hexrays.cexpr_t.is_jumpout(): - - is_jumpout(self) -> bool - - -ida_hexrays.cexpr_t.is_negative_const(): - - is_negative_const(self) -> bool - - -ida_hexrays.cexpr_t.is_nice_cond(): - - is_nice_cond(self) -> bool - - -ida_hexrays.cexpr_t.is_nice_expr(): - - is_nice_expr(self) -> bool - - -ida_hexrays.cexpr_t.is_non_negative_const(): - - is_non_negative_const(self) -> bool - - -ida_hexrays.cexpr_t.is_non_zero_const(): - - is_non_zero_const(self) -> bool - - -ida_hexrays.cexpr_t.is_odd_lvalue(): - - is_odd_lvalue(self) -> bool - - -ida_hexrays.cexpr_t.is_type_signed(): - - is_type_signed(self) -> bool - - -ida_hexrays.cexpr_t.is_type_unsigned(): - - is_type_unsigned(self) -> bool - - -ida_hexrays.cexpr_t.is_undef_val(): - - is_undef_val(self) -> bool - - -ida_hexrays.cexpr_t.is_vftable(): - - is_vftable(self) -> bool - - -ida_hexrays.cexpr_t.is_zero_const(): - - is_zero_const(self) -> bool - - -ida_hexrays.cexpr_t.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.cexpr_t.maybe_ptr(): - - maybe_ptr(self) -> bool - - -ida_hexrays.cexpr_t.numval(): - - numval(self) -> uint64 - - -ida_hexrays.cexpr_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.cexpr_t.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.cexpr_t.operands: - - return a dictionary with the operands of a cexpr_t. - - -ida_hexrays.cexpr_t.print1(): - - print1(self, func) - - -ida_hexrays.cexpr_t.put_number(): - - put_number(self, func, value, nbytes, sign=no_sign) - - -ida_hexrays.cexpr_t.requires_lvalue(): - - requires_lvalue(self, child) -> bool - - -ida_hexrays.cexpr_t.set_cpadone(): - - set_cpadone(self) - - -ida_hexrays.cexpr_t.set_v(): - - set_v(self, v) - - -ida_hexrays.cexpr_t.set_vftable(): - - set_vftable(self) - - -ida_hexrays.cexpr_t.swap(): - - swap(self, r) - - -ida_hexrays.cexpr_t.theother(): - - theother(self, what) -> cexpr_t - theother(self, what) -> cexpr_t - - -ida_hexrays.cexpr_t.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.cexpr_t.type: - cexpr_t_type_get(self) -> tinfo_t - -class ida_hexrays.cfor_t(): - - Proxy of C++ cfor_t class - - -ida_hexrays.cfor_t.assign(): - - assign(self, r) -> cloop_t - - -ida_hexrays.cfor_t.body: - cloop_t_body_get(self) -> cinsn_t - -ida_hexrays.cfor_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cfor_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cfor_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.cfor_t.init: - cfor_t_init_get(self) -> cexpr_t - -ida_hexrays.cfor_t.step: - cfor_t_step_get(self) -> cexpr_t - -class ida_hexrays.cfunc_parentee_t(): - - Proxy of C++ cfunc_parentee_t class - - -ida_hexrays.cfunc_parentee_t.apply_to(): - - apply_to(self, item, parent) -> int - - -ida_hexrays.cfunc_parentee_t.apply_to_exprs(): - - apply_to_exprs(self, item, parent) -> int - - -ida_hexrays.cfunc_parentee_t.calc_rvalue_type(): - - calc_rvalue_type(self, target, e) -> bool - - -ida_hexrays.cfunc_parentee_t.clr_prune(): - - clr_prune(self) - - -ida_hexrays.cfunc_parentee_t.clr_restart(): - - clr_restart(self) - - -ida_hexrays.cfunc_parentee_t.cv_flags: - ctree_visitor_t_cv_flags_get(self) -> int - -ida_hexrays.cfunc_parentee_t.func: - cfunc_parentee_t_func_get(self) -> cfunc_t - -ida_hexrays.cfunc_parentee_t.is_postorder(): - - is_postorder(self) -> bool - - -ida_hexrays.cfunc_parentee_t.leave_expr(): - - leave_expr(self, arg0) -> int - - -ida_hexrays.cfunc_parentee_t.leave_insn(): - - leave_insn(self, arg0) -> int - - -ida_hexrays.cfunc_parentee_t.maintain_parents(): - - maintain_parents(self) -> bool - - -ida_hexrays.cfunc_parentee_t.must_prune(): - - must_prune(self) -> bool - - -ida_hexrays.cfunc_parentee_t.must_restart(): - - must_restart(self) -> bool - - -ida_hexrays.cfunc_parentee_t.only_insns(): - - only_insns(self) -> bool - - -ida_hexrays.cfunc_parentee_t.parent_expr(): - - parent_expr(self) -> cexpr_t - - -ida_hexrays.cfunc_parentee_t.parent_insn(): - - parent_insn(self) -> cinsn_t - - -ida_hexrays.cfunc_parentee_t.parents: - ctree_visitor_t_parents_get(self) -> ctree_items_t - -ida_hexrays.cfunc_parentee_t.prune_now(): - - prune_now(self) - - -ida_hexrays.cfunc_parentee_t.recalc_parent_types(): - - recalc_parent_types(self) -> bool - - -ida_hexrays.cfunc_parentee_t.set_restart(): - - set_restart(self) - - -ida_hexrays.cfunc_parentee_t.visit_expr(): - - visit_expr(self, arg0) -> int - - -ida_hexrays.cfunc_parentee_t.visit_insn(): - - visit_insn(self, arg0) -> int - - -class ida_hexrays.cfunc_t(): - - Proxy of C++ cfunc_t class - - -ida_hexrays.cfunc_t.argidx: - cfunc_t_argidx_get(self) -> intvec_t - -ida_hexrays.cfunc_t.body: - cfunc_t_body_get(self) -> cinsn_t - -ida_hexrays.cfunc_t.boundaries: - - get_boundaries(self) -> boundaries_t - - -ida_hexrays.cfunc_t.build_c_tree(): - - build_c_tree(self) - - -ida_hexrays.cfunc_t.del_orphan_cmts(): - - del_orphan_cmts(self) -> int - - -ida_hexrays.cfunc_t.eamap: - - get_eamap(self) -> eamap_t - - -ida_hexrays.cfunc_t.entry_ea: - cfunc_t_entry_ea_get(self) -> ea_t - -ida_hexrays.cfunc_t.find_item_coords(): - - find_item_coords(self, item, px, py) -> bool - find_item_coords(self, item) -> PyObject * - - -ida_hexrays.cfunc_t.find_label(): - - find_label(self, label) -> citem_t - - -ida_hexrays.cfunc_t.gather_derefs(): - - gather_derefs(self, ci, udm=None) -> bool - - -ida_hexrays.cfunc_t.get_boundaries(): - - get_boundaries(self) -> boundaries_t - - -ida_hexrays.cfunc_t.get_eamap(): - - get_eamap(self) -> eamap_t - - -ida_hexrays.cfunc_t.get_func_type(): - - get_func_type(self, type) -> bool - - -ida_hexrays.cfunc_t.get_line_item(): - - get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool - - -ida_hexrays.cfunc_t.get_lvars(): - - get_lvars(self) -> lvars_t - - -ida_hexrays.cfunc_t.get_pseudocode(): - - get_pseudocode(self) -> strvec_t - - -ida_hexrays.cfunc_t.get_stkoff_delta(): - - get_stkoff_delta(self) -> sval_t - - -ida_hexrays.cfunc_t.get_user_cmt(): - - get_user_cmt(self, loc, rt) -> char const * - - -ida_hexrays.cfunc_t.get_user_iflags(): - - get_user_iflags(self, loc) -> int32 - - -ida_hexrays.cfunc_t.get_user_union_selection(): - - get_user_union_selection(self, ea, path) -> bool - - -ida_hexrays.cfunc_t.get_warnings(): - - get_warnings(self) -> hexwarns_t - - -ida_hexrays.cfunc_t.has_orphan_cmts(): - - has_orphan_cmts(self) -> bool - - -ida_hexrays.cfunc_t.hdrlines: - cfunc_t_hdrlines_get(self) -> int - -ida_hexrays.cfunc_t.lvars: - - get_lvars(self) -> lvars_t - - -ida_hexrays.cfunc_t.maturity: - cfunc_t_maturity_get(self) -> ctree_maturity_t - -ida_hexrays.cfunc_t.mba: - cfunc_t_mba_get(self) -> mbl_array_t - -ida_hexrays.cfunc_t.numforms: - cfunc_t_numforms_get(self) -> user_numforms_t - -ida_hexrays.cfunc_t.print_dcl(): - - print_dcl(self) - - -ida_hexrays.cfunc_t.print_func(): - - print_func(self, vp) - - -ida_hexrays.cfunc_t.pseudocode: - - get_pseudocode(self) -> strvec_t - - -ida_hexrays.cfunc_t.refcnt: - cfunc_t_refcnt_get(self) -> int - -ida_hexrays.cfunc_t.refresh_func_ctext(): - - refresh_func_ctext(self) - - -ida_hexrays.cfunc_t.release(): - - release(self) - - -ida_hexrays.cfunc_t.remove_unused_labels(): - - remove_unused_labels(self) - - -ida_hexrays.cfunc_t.save_user_cmts(): - - save_user_cmts(self) - - -ida_hexrays.cfunc_t.save_user_iflags(): - - save_user_iflags(self) - - -ida_hexrays.cfunc_t.save_user_labels(): - - save_user_labels(self) - - -ida_hexrays.cfunc_t.save_user_numforms(): - - save_user_numforms(self) - - -ida_hexrays.cfunc_t.save_user_unions(): - - save_user_unions(self) - - -ida_hexrays.cfunc_t.set_user_cmt(): - - set_user_cmt(self, loc, cmt) - - -ida_hexrays.cfunc_t.set_user_iflags(): - - set_user_iflags(self, loc, iflags) - - -ida_hexrays.cfunc_t.set_user_union_selection(): - - set_user_union_selection(self, ea, path) - - -ida_hexrays.cfunc_t.statebits: - cfunc_t_statebits_get(self) -> int - -ida_hexrays.cfunc_t.treeitems: - cfunc_t_treeitems_get(self) -> ctree_items_t - -ida_hexrays.cfunc_t.type: - - Get the function's return type tinfo_t object. - - -ida_hexrays.cfunc_t.user_cmts: - cfunc_t_user_cmts_get(self) -> user_cmts_t - -ida_hexrays.cfunc_t.user_iflags: - cfunc_t_user_iflags_get(self) -> user_iflags_t - -ida_hexrays.cfunc_t.user_labels: - cfunc_t_user_labels_get(self) -> user_labels_t - -ida_hexrays.cfunc_t.user_unions: - cfunc_t_user_unions_get(self) -> user_unions_t - -ida_hexrays.cfunc_t.verify(): - - verify(self, aul, even_without_debugger) - - -ida_hexrays.cfunc_t.warnings: - - get_warnings(self) -> hexwarns_t - - -ida_hexrays.cfunc_type(): - - Get the function's return type tinfo_t object. - - -class ida_hexrays.cfuncptr_t(): - - Proxy of C++ qrefcnt_t<(cfunc_t)> class - - -ida_hexrays.cfuncptr_t.argidx: - cfuncptr_t_argidx_get(self) -> intvec_t - -ida_hexrays.cfuncptr_t.body: - cfuncptr_t_body_get(self) -> cinsn_t - -ida_hexrays.cfuncptr_t.build_c_tree(): - - build_c_tree(self) - - -ida_hexrays.cfuncptr_t.del_orphan_cmts(): - - del_orphan_cmts(self) -> int - - -ida_hexrays.cfuncptr_t.entry_ea: - cfuncptr_t_entry_ea_get(self) -> ea_t - -ida_hexrays.cfuncptr_t.find_item_coords(): - - find_item_coords(self, item, px, py) -> bool - find_item_coords(self, item) -> PyObject * - - -ida_hexrays.cfuncptr_t.find_label(): - - find_label(self, label) -> citem_t - - -ida_hexrays.cfuncptr_t.gather_derefs(): - - gather_derefs(self, ci, udm=None) -> bool - - -ida_hexrays.cfuncptr_t.get_boundaries(): - - get_boundaries(self) -> boundaries_t - - -ida_hexrays.cfuncptr_t.get_eamap(): - - get_eamap(self) -> eamap_t - - -ida_hexrays.cfuncptr_t.get_func_type(): - - get_func_type(self, type) -> bool - - -ida_hexrays.cfuncptr_t.get_line_item(): - - get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool - - -ida_hexrays.cfuncptr_t.get_lvars(): - - get_lvars(self) -> lvars_t - - -ida_hexrays.cfuncptr_t.get_pseudocode(): - - get_pseudocode(self) -> strvec_t - - -ida_hexrays.cfuncptr_t.get_stkoff_delta(): - - get_stkoff_delta(self) -> sval_t - - -ida_hexrays.cfuncptr_t.get_user_cmt(): - - get_user_cmt(self, loc, rt) -> char const * - - -ida_hexrays.cfuncptr_t.get_user_iflags(): - - get_user_iflags(self, loc) -> int32 - - -ida_hexrays.cfuncptr_t.get_user_union_selection(): - - get_user_union_selection(self, ea, path) -> bool - - -ida_hexrays.cfuncptr_t.get_warnings(): - - get_warnings(self) -> hexwarns_t - - -ida_hexrays.cfuncptr_t.has_orphan_cmts(): - - has_orphan_cmts(self) -> bool - - -ida_hexrays.cfuncptr_t.hdrlines: - cfuncptr_t_hdrlines_get(self) -> int - -ida_hexrays.cfuncptr_t.maturity: - cfuncptr_t_maturity_get(self) -> ctree_maturity_t - -ida_hexrays.cfuncptr_t.mba: - cfuncptr_t_mba_get(self) -> mbl_array_t - -ida_hexrays.cfuncptr_t.numforms: - cfuncptr_t_numforms_get(self) -> user_numforms_t - -ida_hexrays.cfuncptr_t.print_dcl(): - - print_dcl(self) - - -ida_hexrays.cfuncptr_t.print_func(): - - print_func(self, vp) - - -ida_hexrays.cfuncptr_t.refcnt: - cfuncptr_t_refcnt_get(self) -> int - -ida_hexrays.cfuncptr_t.refresh_func_ctext(): - - refresh_func_ctext(self) - - -ida_hexrays.cfuncptr_t.release(): - - release(self) - - -ida_hexrays.cfuncptr_t.remove_unused_labels(): - - remove_unused_labels(self) - - -ida_hexrays.cfuncptr_t.reset(): - - reset(self) - - -ida_hexrays.cfuncptr_t.save_user_cmts(): - - save_user_cmts(self) - - -ida_hexrays.cfuncptr_t.save_user_iflags(): - - save_user_iflags(self) - - -ida_hexrays.cfuncptr_t.save_user_labels(): - - save_user_labels(self) - - -ida_hexrays.cfuncptr_t.save_user_numforms(): - - save_user_numforms(self) - - -ida_hexrays.cfuncptr_t.save_user_unions(): - - save_user_unions(self) - - -ida_hexrays.cfuncptr_t.set_user_cmt(): - - set_user_cmt(self, loc, cmt) - - -ida_hexrays.cfuncptr_t.set_user_iflags(): - - set_user_iflags(self, loc, iflags) - - -ida_hexrays.cfuncptr_t.set_user_union_selection(): - - set_user_union_selection(self, ea, path) - - -ida_hexrays.cfuncptr_t.statebits: - cfuncptr_t_statebits_get(self) -> int - -ida_hexrays.cfuncptr_t.treeitems: - cfuncptr_t_treeitems_get(self) -> ctree_items_t - -ida_hexrays.cfuncptr_t.user_cmts: - cfuncptr_t_user_cmts_get(self) -> user_cmts_t - -ida_hexrays.cfuncptr_t.user_iflags: - cfuncptr_t_user_iflags_get(self) -> user_iflags_t - -ida_hexrays.cfuncptr_t.user_labels: - cfuncptr_t_user_labels_get(self) -> user_labels_t - -ida_hexrays.cfuncptr_t.user_unions: - cfuncptr_t_user_unions_get(self) -> user_unions_t - -ida_hexrays.cfuncptr_t.verify(): - - verify(self, aul, even_without_debugger) - - -class ida_hexrays.cgoto_t(): - - Proxy of C++ cgoto_t class - - -ida_hexrays.cgoto_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cgoto_t.label_num: - cgoto_t_label_num_get(self) -> int - -class ida_hexrays.chain_keeper_t(): - - Proxy of C++ chain_keeper_t class - - -ida_hexrays.chain_keeper_t.back(): - - back(self) -> block_chains_t - - -ida_hexrays.chain_keeper_t.for_all_chains(): - - for_all_chains(self, cv, gca) -> int - - -ida_hexrays.chain_keeper_t.front(): - - front(self) -> block_chains_t - - -class ida_hexrays.chain_t(): - - Proxy of C++ chain_t class - - -ida_hexrays.chain_t._print(): - - _print(self) - - -ida_hexrays.chain_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.chain_t.append(): - - push_back(self, x) - push_back(self) -> int & - - -ida_hexrays.chain_t.append_list(): - - append_list(self, list) - - -ida_hexrays.chain_t.at(): - - __getitem__(self, i) -> int const & - - -ida_hexrays.chain_t.begin(): - - begin(self) -> qvector< int >::iterator - begin(self) -> qvector< int >::const_iterator - - -ida_hexrays.chain_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.chain_t.clear(): - - clear(self) - - -ida_hexrays.chain_t.clear_varnum(): - - clear_varnum(self) - - -ida_hexrays.chain_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.chain_t.empty(): - - empty(self) -> bool - - -ida_hexrays.chain_t.end(): - - end(self) -> qvector< int >::iterator - end(self) -> qvector< int >::const_iterator - - -ida_hexrays.chain_t.endoff(): - - endoff(self) -> voff_t - - -ida_hexrays.chain_t.erase(): - - erase(self, it) -> qvector< int >::iterator - erase(self, first, last) -> qvector< int >::iterator - - -ida_hexrays.chain_t.extract(): - - extract(self) -> int * - - -ida_hexrays.chain_t.find(): - - find(self, x) -> qvector< int >::iterator - find(self, x) -> qvector< int >::const_iterator - - -ida_hexrays.chain_t.flags: - chain_t_flags_get(self) -> uchar - -ida_hexrays.chain_t.get_reg(): - - get_reg(self) -> mreg_t - - -ida_hexrays.chain_t.get_stkoff(): - - get_stkoff(self) -> sval_t - - -ida_hexrays.chain_t.has(): - - has(self, x) -> bool - - -ida_hexrays.chain_t.includes(): - - includes(self, r) -> bool - - -ida_hexrays.chain_t.inject(): - - inject(self, s, len) - - -ida_hexrays.chain_t.insert(): - - insert(self, it, x) -> qvector< int >::iterator - - -ida_hexrays.chain_t.is_fake(): - - is_fake(self) -> bool - - -ida_hexrays.chain_t.is_inited(): - - is_inited(self) -> bool - - -ida_hexrays.chain_t.is_overlapped(): - - is_overlapped(self) -> bool - - -ida_hexrays.chain_t.is_passreg(): - - is_passreg(self) -> bool - - -ida_hexrays.chain_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.chain_t.is_replaced(): - - is_replaced(self) -> bool - - -ida_hexrays.chain_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_hexrays.chain_t.is_term(): - - is_term(self) -> bool - - -ida_hexrays.chain_t.key(): - - key(self) -> voff_t - - -ida_hexrays.chain_t.overlap(): - - overlap(self, r) -> bool - - -ida_hexrays.chain_t.pop_back(): - - pop_back(self) - - -ida_hexrays.chain_t.push_back(): - - push_back(self, x) - push_back(self) -> int & - - -ida_hexrays.chain_t.qclear(): - - qclear(self) - - -ida_hexrays.chain_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.chain_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.chain_t.set_inited(): - - set_inited(self, b) - - -ida_hexrays.chain_t.set_overlapped(): - - set_overlapped(self, b) - - -ida_hexrays.chain_t.set_replaced(): - - set_replaced(self, b) - - -ida_hexrays.chain_t.set_term(): - - set_term(self, b) - - -ida_hexrays.chain_t.set_value(): - - set_value(self, r) - - -ida_hexrays.chain_t.size(): - - size(self) -> size_t - - -ida_hexrays.chain_t.swap(): - - swap(self, r) - - -ida_hexrays.chain_t.truncate(): - - truncate(self) - - -ida_hexrays.chain_t.varnum: - chain_t_varnum_get(self) -> int - -ida_hexrays.chain_t.width: - chain_t_width_get(self) -> int - -class ida_hexrays.chain_visitor_t(): - - Proxy of C++ chain_visitor_t class - - -ida_hexrays.chain_visitor_t.parent: - chain_visitor_t_parent_get(self) -> block_chains_t - -ida_hexrays.chain_visitor_t.visit_chain(): - - visit_chain(self, nblock, ch) -> int - - -ida_hexrays.checkout_hexrays_license(): - - checkout_hexrays_license(silent) -> bool - - - Check out a floating decompiler license. This function will display a - dialog box if the license is not available. For non-floating licenses - this function is effectively no-op. It is not necessary to call this - function before decompiling. If the license was not checked out, the - decompiler will automatically do it. This function can be used to - check out a license in advance and ensure that a license is available. - - @param silent: silently fail if the license can not be checked out. - (C++: bool) - @return: false if failed - - -class ida_hexrays.cif_t(): - - Proxy of C++ cif_t class - - -ida_hexrays.cif_t.assign(): - - assign(self, r) -> cif_t - - -ida_hexrays.cif_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cif_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cif_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.cif_t.ielse: - cif_t_ielse_get(self) -> cinsn_t - -ida_hexrays.cif_t.ithen: - cif_t_ithen_get(self) -> cinsn_t - -ida_hexrays.cinsn_details(): - - return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. - - -class ida_hexrays.cinsn_t(): - - Proxy of C++ cinsn_t class - - -ida_hexrays.cinsn_t._print(): - - _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) - - -ida_hexrays.cinsn_t.assign(): - - assign(self, r) -> cinsn_t - - -ida_hexrays.cinsn_t.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.cinsn_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cinsn_t.collect_free_breaks(): - - collect_free_breaks(self, breaks) -> bool - - -ida_hexrays.cinsn_t.collect_free_continues(): - - collect_free_continues(self, continues) -> bool - - -ida_hexrays.cinsn_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cinsn_t.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.cinsn_t.contains_free_break(): - - contains_free_break(self) -> bool - - -ida_hexrays.cinsn_t.contains_free_continue(): - - contains_free_continue(self) -> bool - - -ida_hexrays.cinsn_t.contains_insn(): - - contains_insn(self, type, times=1) -> bool - - -ida_hexrays.cinsn_t.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.cinsn_t.create_if(): - - create_if(self, cnd) -> cif_t - - -ida_hexrays.cinsn_t.details: - - return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. - - -ida_hexrays.cinsn_t.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.cinsn_t.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.cinsn_t.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.cinsn_t.index: - citem_t_index_get(self) -> int - -ida_hexrays.cinsn_t.insn_is_epilog(): - - insn_is_epilog(insn) -> bool - - -ida_hexrays.cinsn_t.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.cinsn_t.is_ordinary_flow(): - - is_ordinary_flow(self) -> bool - - -ida_hexrays.cinsn_t.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.cinsn_t.new_insn(): - - new_insn(self, insn_ea) -> cinsn_t - - -ida_hexrays.cinsn_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.cinsn_t.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.cinsn_t.print1(): - - print1(self, func) - - -ida_hexrays.cinsn_t.swap(): - - swap(self, r) - - -ida_hexrays.cinsn_t.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.cinsn_t.zero(): - - zero(self) - - -ida_hexrays.cinsn_t_insn_is_epilog(): - - cinsn_t_insn_is_epilog(insn) -> bool - - -class ida_hexrays.cinsnptrvec_t(): - - Proxy of C++ qvector<(p.cinsn_t)> class - - -ida_hexrays.cinsnptrvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.cinsnptrvec_t.append(): - - push_back(self, x) - push_back(self) -> cinsn_t *& - - -ida_hexrays.cinsnptrvec_t.at(): - - __getitem__(self, i) -> cinsn_t - - -ida_hexrays.cinsnptrvec_t.begin(): - - begin(self) -> qvector< cinsn_t * >::iterator - begin(self) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.cinsnptrvec_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.cinsnptrvec_t.clear(): - - clear(self) - - -ida_hexrays.cinsnptrvec_t.empty(): - - empty(self) -> bool - - -ida_hexrays.cinsnptrvec_t.end(): - - end(self) -> qvector< cinsn_t * >::iterator - end(self) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.cinsnptrvec_t.erase(): - - erase(self, it) -> qvector< cinsn_t * >::iterator - erase(self, first, last) -> qvector< cinsn_t * >::iterator - - -ida_hexrays.cinsnptrvec_t.extract(): - - extract(self) -> cinsn_t ** - - -ida_hexrays.cinsnptrvec_t.find(): - - find(self, x) -> qvector< cinsn_t * >::iterator - find(self, x) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.cinsnptrvec_t.has(): - - has(self, x) -> bool - - -ida_hexrays.cinsnptrvec_t.inject(): - - inject(self, s, len) - - -ida_hexrays.cinsnptrvec_t.insert(): - - insert(self, it, x) -> qvector< cinsn_t * >::iterator - - -ida_hexrays.cinsnptrvec_t.pop_back(): - - pop_back(self) - - -ida_hexrays.cinsnptrvec_t.push_back(): - - push_back(self, x) - push_back(self) -> cinsn_t *& - - -ida_hexrays.cinsnptrvec_t.qclear(): - - qclear(self) - - -ida_hexrays.cinsnptrvec_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.cinsnptrvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.cinsnptrvec_t.size(): - - size(self) -> size_t - - -ida_hexrays.cinsnptrvec_t.swap(): - - swap(self, r) - - -ida_hexrays.cinsnptrvec_t.truncate(): - - truncate(self) - - -class ida_hexrays.citem_cmt_t(): - - Proxy of C++ citem_cmt_t class - - -ida_hexrays.citem_cmt_t.c_str(): - - c_str(self) -> char const * - - -ida_hexrays.citem_cmt_t.used: - citem_cmt_t_used_get(self) -> bool - -class ida_hexrays.citem_locator_t(): - - Proxy of C++ citem_locator_t class - - -ida_hexrays.citem_locator_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.citem_locator_t.ea: - citem_locator_t_ea_get(self) -> ea_t - -ida_hexrays.citem_locator_t.op: - citem_locator_t_op_get(self) -> ctype_t - -class ida_hexrays.citem_t(): - - Proxy of C++ citem_t class - - -ida_hexrays.citem_t.cexpr: - citem_t_cexpr_get(self) -> cexpr_t - -ida_hexrays.citem_t.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.citem_t.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.citem_t.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.citem_t.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.citem_t.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.citem_t.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.citem_t.index: - citem_t_index_get(self) -> int - -ida_hexrays.citem_t.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.citem_t.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.citem_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.citem_t.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.citem_t.print1(): - - print1(self, func) - - -ida_hexrays.citem_t.swap(): - - swap(self, r) - - -ida_hexrays.citem_t.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.citem_to_specific_type(): - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.clear_cached_cfuncs(): - - clear_cached_cfuncs() - - - Flush all cached decompilation results. - - -class ida_hexrays.cloop_t(): - - Proxy of C++ cloop_t class - - -ida_hexrays.cloop_t.assign(): - - assign(self, r) -> cloop_t - - -ida_hexrays.cloop_t.body: - cloop_t_body_get(self) -> cinsn_t - -ida_hexrays.cloop_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cloop_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.close_pseudocode(): - - close_pseudocode(f) -> bool - - - Close pseudocode window. - - @param f: pointer to window (C++: TWidget *) - @return: false if failed - - -class ida_hexrays.cnumber_t(): - - Proxy of C++ cnumber_t class - - -ida_hexrays.cnumber_t._print(): - - _print(self, type, parent=None, nice_stroff=None) - - -ida_hexrays.cnumber_t.assign(): - - assign(self, v, nbytes, sign) - - -ida_hexrays.cnumber_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cnumber_t.nf: - cnumber_t_nf_get(self) -> number_format_t - -ida_hexrays.cnumber_t.value(): - - value(self, type) -> uint64 - - -class ida_hexrays.codegen_t(): - - Proxy of C++ codegen_t class - - -ida_hexrays.codegen_t.analyze_prolog(): - - analyze_prolog(self, fc, reachable) -> merror_t - - -ida_hexrays.codegen_t.emit(): - - emit(self, code, width, l, r, d, offsize) -> minsn_t - emit(self, code, l, r, d) -> minsn_t - - -ida_hexrays.codegen_t.emit_micro_mvm(): - - emit_micro_mvm(self, code, dtype, l, r, d, offsize) -> minsn_t - - -ida_hexrays.codegen_t.gen_micro(): - - gen_micro(self) -> merror_t - - -ida_hexrays.codegen_t.ignore_micro: - codegen_t_ignore_micro_get(self) -> char - -ida_hexrays.codegen_t.insn: - codegen_t_insn_get(self) -> insn_t * - -ida_hexrays.codegen_t.load_operand(): - - load_operand(self, opnum) -> mreg_t - - -ida_hexrays.codegen_t.mb: - codegen_t_mb_get(self) -> mblock_t - -ida_hexrays.codegen_t.mba: - codegen_t_mba_get(self) -> mbl_array_t - -ida_hexrays.convert_to_user_call(): - - convert_to_user_call(udc, cdg) -> merror_t - - - try to generate user-defined call for an instruction - - @param udc (C++: const udcall_t &) - @param cdg (C++: codegen_t &) - @return: Microcode error codes code: MERR_OK - user-defined call - generated else - error (MERR_INSN == inacceptable udc.tif) - - -ida_hexrays.create_field_name(): - - create_field_name(type, offset=BADADDR) -> qstring - - -ida_hexrays.create_typedef(): - - create_typedef(name) -> tinfo_t - create_typedef(n) -> tinfo_t - - - Create a reference to a named type. - - @param name: type name (C++: const char *) - @return: type which refers to the specified name. For example, if name - is "DWORD", the type info which refers to "DWORD" is created. - - -class ida_hexrays.creturn_t(): - - Proxy of C++ creturn_t class - - -ida_hexrays.creturn_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.creturn_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -class ida_hexrays.cswitch_t(): - - Proxy of C++ cswitch_t class - - -ida_hexrays.cswitch_t.cases: - cswitch_t_cases_get(self) -> ccases_t - -ida_hexrays.cswitch_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cswitch_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.cswitch_t.mvnf: - cswitch_t_mvnf_get(self) -> cnumber_t - -class ida_hexrays.ctext_position_t(): - - Proxy of C++ ctext_position_t class - - -ida_hexrays.ctext_position_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.ctext_position_t.in_ctree(): - - in_ctree(self, hdrlines) -> bool - - -ida_hexrays.ctext_position_t.lnnum: - ctext_position_t_lnnum_get(self) -> int - -ida_hexrays.ctext_position_t.x: - ctext_position_t_x_get(self) -> int - -ida_hexrays.ctext_position_t.y: - ctext_position_t_y_get(self) -> int - -class ida_hexrays.ctree_anchor_t(): - - Proxy of C++ ctree_anchor_t class - - -ida_hexrays.ctree_anchor_t.get_index(): - - get_index(self) -> int - - -ida_hexrays.ctree_anchor_t.get_itp(): - - get_itp(self) -> item_preciser_t - - -ida_hexrays.ctree_anchor_t.is_blkcmt_anchor(): - - is_blkcmt_anchor(self) -> bool - - -ida_hexrays.ctree_anchor_t.is_citem_anchor(): - - is_citem_anchor(self) -> bool - - -ida_hexrays.ctree_anchor_t.is_itp_anchor(): - - is_itp_anchor(self) -> bool - - -ida_hexrays.ctree_anchor_t.is_lvar_anchor(): - - is_lvar_anchor(self) -> bool - - -ida_hexrays.ctree_anchor_t.is_valid_anchor(): - - is_valid_anchor(self) -> bool - - -ida_hexrays.ctree_anchor_t.value: - ctree_anchor_t_value_get(self) -> uval_t - -class ida_hexrays.ctree_item_t(): - - Proxy of C++ ctree_item_t class - - -ida_hexrays.ctree_item_t.citype: - ctree_item_t_citype_get(self) -> cursor_item_type_t - -ida_hexrays.ctree_item_t.get_ea(): - - get_ea(self) -> ea_t - - -ida_hexrays.ctree_item_t.get_label_num(): - - get_label_num(self, gln_flags) -> int - - -ida_hexrays.ctree_item_t.get_lvar(): - - get_lvar(self) -> lvar_t - - -ida_hexrays.ctree_item_t.get_memptr(): - - get_memptr(self, p_sptr=None) -> member_t * - - -ida_hexrays.ctree_item_t.is_citem(): - - is_citem(self) -> bool - - -ida_hexrays.ctree_item_t.loc: - ctree_item_t_loc_get(self) -> treeloc_t - -class ida_hexrays.ctree_items_t(): - - Proxy of C++ qvector<(p.citem_t)> class - - -ida_hexrays.ctree_items_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.ctree_items_t.append(): - - push_back(self, x) - push_back(self) -> citem_t *& - - -ida_hexrays.ctree_items_t.at(): - - __getitem__(self, i) -> citem_t - - -ida_hexrays.ctree_items_t.begin(): - - begin(self) -> qvector< citem_t * >::iterator - begin(self) -> qvector< citem_t * >::const_iterator - - -ida_hexrays.ctree_items_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.ctree_items_t.clear(): - - clear(self) - - -ida_hexrays.ctree_items_t.empty(): - - empty(self) -> bool - - -ida_hexrays.ctree_items_t.end(): - - end(self) -> qvector< citem_t * >::iterator - end(self) -> qvector< citem_t * >::const_iterator - - -ida_hexrays.ctree_items_t.erase(): - - erase(self, it) -> qvector< citem_t * >::iterator - erase(self, first, last) -> qvector< citem_t * >::iterator - - -ida_hexrays.ctree_items_t.extract(): - - extract(self) -> citem_t ** - - -ida_hexrays.ctree_items_t.find(): - - find(self, x) -> qvector< citem_t * >::iterator - find(self, x) -> qvector< citem_t * >::const_iterator - - -ida_hexrays.ctree_items_t.has(): - - has(self, x) -> bool - - -ida_hexrays.ctree_items_t.inject(): - - inject(self, s, len) - - -ida_hexrays.ctree_items_t.insert(): - - insert(self, it, x) -> qvector< citem_t * >::iterator - - -ida_hexrays.ctree_items_t.pop_back(): - - pop_back(self) - - -ida_hexrays.ctree_items_t.push_back(): - - push_back(self, x) - push_back(self) -> citem_t *& - - -ida_hexrays.ctree_items_t.qclear(): - - qclear(self) - - -ida_hexrays.ctree_items_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.ctree_items_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.ctree_items_t.size(): - - size(self) -> size_t - - -ida_hexrays.ctree_items_t.swap(): - - swap(self, r) - - -ida_hexrays.ctree_items_t.truncate(): - - truncate(self) - - -class ida_hexrays.ctree_parentee_t(): - - Proxy of C++ ctree_parentee_t class - - -ida_hexrays.ctree_parentee_t.apply_to(): - - apply_to(self, item, parent) -> int - - -ida_hexrays.ctree_parentee_t.apply_to_exprs(): - - apply_to_exprs(self, item, parent) -> int - - -ida_hexrays.ctree_parentee_t.clr_prune(): - - clr_prune(self) - - -ida_hexrays.ctree_parentee_t.clr_restart(): - - clr_restart(self) - - -ida_hexrays.ctree_parentee_t.cv_flags: - ctree_visitor_t_cv_flags_get(self) -> int - -ida_hexrays.ctree_parentee_t.is_postorder(): - - is_postorder(self) -> bool - - -ida_hexrays.ctree_parentee_t.leave_expr(): - - leave_expr(self, arg0) -> int - - -ida_hexrays.ctree_parentee_t.leave_insn(): - - leave_insn(self, arg0) -> int - - -ida_hexrays.ctree_parentee_t.maintain_parents(): - - maintain_parents(self) -> bool - - -ida_hexrays.ctree_parentee_t.must_prune(): - - must_prune(self) -> bool - - -ida_hexrays.ctree_parentee_t.must_restart(): - - must_restart(self) -> bool - - -ida_hexrays.ctree_parentee_t.only_insns(): - - only_insns(self) -> bool - - -ida_hexrays.ctree_parentee_t.parent_expr(): - - parent_expr(self) -> cexpr_t - - -ida_hexrays.ctree_parentee_t.parent_insn(): - - parent_insn(self) -> cinsn_t - - -ida_hexrays.ctree_parentee_t.parents: - ctree_visitor_t_parents_get(self) -> ctree_items_t - -ida_hexrays.ctree_parentee_t.prune_now(): - - prune_now(self) - - -ida_hexrays.ctree_parentee_t.recalc_parent_types(): - - recalc_parent_types(self) -> bool - - -ida_hexrays.ctree_parentee_t.set_restart(): - - set_restart(self) - - -ida_hexrays.ctree_parentee_t.visit_expr(): - - visit_expr(self, arg0) -> int - - -ida_hexrays.ctree_parentee_t.visit_insn(): - - visit_insn(self, arg0) -> int - - -class ida_hexrays.ctree_visitor_t(): - - Proxy of C++ ctree_visitor_t class - - -ida_hexrays.ctree_visitor_t.apply_to(): - - apply_to(self, item, parent) -> int - - -ida_hexrays.ctree_visitor_t.apply_to_exprs(): - - apply_to_exprs(self, item, parent) -> int - - -ida_hexrays.ctree_visitor_t.clr_prune(): - - clr_prune(self) - - -ida_hexrays.ctree_visitor_t.clr_restart(): - - clr_restart(self) - - -ida_hexrays.ctree_visitor_t.cv_flags: - ctree_visitor_t_cv_flags_get(self) -> int - -ida_hexrays.ctree_visitor_t.is_postorder(): - - is_postorder(self) -> bool - - -ida_hexrays.ctree_visitor_t.leave_expr(): - - leave_expr(self, arg0) -> int - - -ida_hexrays.ctree_visitor_t.leave_insn(): - - leave_insn(self, arg0) -> int - - -ida_hexrays.ctree_visitor_t.maintain_parents(): - - maintain_parents(self) -> bool - - -ida_hexrays.ctree_visitor_t.must_prune(): - - must_prune(self) -> bool - - -ida_hexrays.ctree_visitor_t.must_restart(): - - must_restart(self) -> bool - - -ida_hexrays.ctree_visitor_t.only_insns(): - - only_insns(self) -> bool - - -ida_hexrays.ctree_visitor_t.parent_expr(): - - parent_expr(self) -> cexpr_t - - -ida_hexrays.ctree_visitor_t.parent_insn(): - - parent_insn(self) -> cinsn_t - - -ida_hexrays.ctree_visitor_t.parents: - ctree_visitor_t_parents_get(self) -> ctree_items_t - -ida_hexrays.ctree_visitor_t.prune_now(): - - prune_now(self) - - -ida_hexrays.ctree_visitor_t.set_restart(): - - set_restart(self) - - -ida_hexrays.ctree_visitor_t.visit_expr(): - - visit_expr(self, arg0) -> int - - -ida_hexrays.ctree_visitor_t.visit_insn(): - - visit_insn(self, arg0) -> int - - -class ida_hexrays.cwhile_t(): - - Proxy of C++ cwhile_t class - - -ida_hexrays.cwhile_t.assign(): - - assign(self, r) -> cloop_t - - -ida_hexrays.cwhile_t.body: - cloop_t_body_get(self) -> cinsn_t - -ida_hexrays.cwhile_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cwhile_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cwhile_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.debug_hexrays_ctree(): - - debug_hexrays_ctree(msg) - - -ida_hexrays.decompile_func(): - - decompile_func(pfn, hf, flags=0) -> cfuncptr_t - - - Decompile a function. Multiple decompilations of the same function - return the same object. - - @param pfn: pointer to function to decompile (C++: func_t *) - @param hf: extended error information (if failed) (C++: - hexrays_failure_t *) - @param flags: bitwise combination of decompile() flags ... bits (C++: - int) - @return: pointer to the decompilation result (a reference counted - pointer). NULL if failed. - - -ida_hexrays.decompile_many(): - - decompile_many(outfile, funcaddrs, flags) -> bool - - - Batch decompilation. Decompile all or the specified functions - - @param outfile: name of the output file (C++: const char *) - @param funcaddrs: list of functions to decompile. If NULL or empty, - then decompile all nonlib functions (C++: eavec_t - *) - @param flags: Batch decompilation bits (C++: int) - @return: true if no internal error occurred and the user has not - cancelled decompilation - - -ida_hexrays.dstr(): - - dstr(tif) -> char const * - - - Print the specified type info. This function can be used from a - debugger by typing "tif->dstr()" - - @param tif (C++: const tinfo_t *) - - -ida_hexrays.dummy_ptrtype(): - - dummy_ptrtype(ptrsize, isfp) -> tinfo_t - - - Generate a dummy pointer type - - @param ptrsize: size of pointed object (C++: int) - @param isfp: is floating point object? (C++: bool) - - -ida_hexrays.eamap_begin(): - - eamap_begin(map) -> eamap_iterator_t - - - Get iterator pointing to the beginning of eamap_t. - - - @param map (C++: const eamap_t *) - - -ida_hexrays.eamap_clear(): - - eamap_clear(map) - - - Clear eamap_t. - - - @param map (C++: eamap_t *) - - -ida_hexrays.eamap_end(): - - eamap_end(map) -> eamap_iterator_t - - - Get iterator pointing to the end of eamap_t. - - - @param map (C++: const eamap_t *) - - -ida_hexrays.eamap_erase(): - - eamap_erase(map, p) - - - Erase current element from eamap_t. - - - @param map (C++: eamap_t *) - @param p (C++: eamap_iterator_t) - - -ida_hexrays.eamap_find(): - - eamap_find(map, key) -> eamap_iterator_t - - - Find the specified key in eamap_t. - - - @param map (C++: const eamap_t *) - @param key (C++: const ea_t &) - - -ida_hexrays.eamap_first(): - - eamap_first(p) -> ea_t const & - - - Get reference to the current map key. - - - @param p (C++: eamap_iterator_t) - - -ida_hexrays.eamap_free(): - - eamap_free(map) - - - Delete eamap_t instance. - - - @param map (C++: eamap_t *) - - -ida_hexrays.eamap_insert(): - - eamap_insert(map, key, val) -> eamap_iterator_t - - - Insert new (ea_t, cinsnptrvec_t) pair into eamap_t. - - - @param map (C++: eamap_t *) - @param key (C++: const ea_t &) - @param val (C++: const cinsnptrvec_t &) - - -class ida_hexrays.eamap_iterator_t(): - - Proxy of C++ eamap_iterator_t class - - -ida_hexrays.eamap_iterator_t.x: - eamap_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.eamap_new(): - - eamap_new() -> eamap_t - - - Create a new eamap_t instance. - - -ida_hexrays.eamap_next(): - - eamap_next(p) -> eamap_iterator_t - - - Move to the next element. - - - @param p (C++: eamap_iterator_t) - - -ida_hexrays.eamap_prev(): - - eamap_prev(p) -> eamap_iterator_t - - - Move to the previous element. - - - @param p (C++: eamap_iterator_t) - - -ida_hexrays.eamap_second(): - - eamap_second(p) -> cinsnptrvec_t - - - Get reference to the current map value. - - - @param p (C++: eamap_iterator_t) - - -ida_hexrays.eamap_size(): - - eamap_size(map) -> size_t - - - Get size of eamap_t. - - - @param map (C++: eamap_t *) - - -class ida_hexrays.eamap_t(): - - Proxy of C++ std::map<(ea_t,cinsnptrvec_t)> class - - -ida_hexrays.eamap_t.at(): - - at(self, _Keyval) -> cinsnptrvec_t - - -ida_hexrays.eamap_t.keytype.bit_length(): - long.bit_length() -> int or long - - Number of bits necessary to represent self in binary. - >>> bin(37L) - '0b100101' - >>> (37L).bit_length() - 6 - -ida_hexrays.eamap_t.keytype.conjugate(): - Returns self, the complex conjugate of any long. - -ida_hexrays.eamap_t.keytype.denominator: - the denominator of a rational number in lowest terms - -ida_hexrays.eamap_t.keytype.imag: - the imaginary part of a complex number - -ida_hexrays.eamap_t.keytype.numerator: - the numerator of a rational number in lowest terms - -ida_hexrays.eamap_t.keytype.real: - the real part of a complex number - -ida_hexrays.eamap_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.eamap_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.eamap_t.setdefault(): - - Sets the value associated with the provided key. - - -class ida_hexrays.eamap_t.valuetype(): - - Proxy of C++ qvector<(p.cinsn_t)> class - - -ida_hexrays.eamap_t.valuetype.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.eamap_t.valuetype.append(): - - push_back(self, x) - push_back(self) -> cinsn_t *& - - -ida_hexrays.eamap_t.valuetype.at(): - - __getitem__(self, i) -> cinsn_t - - -ida_hexrays.eamap_t.valuetype.begin(): - - begin(self) -> qvector< cinsn_t * >::iterator - begin(self) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.eamap_t.valuetype.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.eamap_t.valuetype.clear(): - - clear(self) - - -ida_hexrays.eamap_t.valuetype.empty(): - - empty(self) -> bool - - -ida_hexrays.eamap_t.valuetype.end(): - - end(self) -> qvector< cinsn_t * >::iterator - end(self) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.eamap_t.valuetype.erase(): - - erase(self, it) -> qvector< cinsn_t * >::iterator - erase(self, first, last) -> qvector< cinsn_t * >::iterator - - -ida_hexrays.eamap_t.valuetype.extract(): - - extract(self) -> cinsn_t ** - - -ida_hexrays.eamap_t.valuetype.find(): - - find(self, x) -> qvector< cinsn_t * >::iterator - find(self, x) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.eamap_t.valuetype.has(): - - has(self, x) -> bool - - -ida_hexrays.eamap_t.valuetype.inject(): - - inject(self, s, len) - - -ida_hexrays.eamap_t.valuetype.insert(): - - insert(self, it, x) -> qvector< cinsn_t * >::iterator - - -ida_hexrays.eamap_t.valuetype.pop_back(): - - pop_back(self) - - -ida_hexrays.eamap_t.valuetype.push_back(): - - push_back(self, x) - push_back(self) -> cinsn_t *& - - -ida_hexrays.eamap_t.valuetype.qclear(): - - qclear(self) - - -ida_hexrays.eamap_t.valuetype.reserve(): - - reserve(self, cnt) - - -ida_hexrays.eamap_t.valuetype.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.eamap_t.valuetype.size(): - - size(self) -> size_t - - -ida_hexrays.eamap_t.valuetype.swap(): - - swap(self, r) - - -ida_hexrays.eamap_t.valuetype.truncate(): - - truncate(self) - - -class ida_hexrays.fnum_array(): - - Proxy of C++ wrapped_array_t<(uint16,6)> class - - -ida_hexrays.fnum_array.data: - fnum_array_data_get(self) -> unsigned short (&)[6] - -class ida_hexrays.fnumber_t(): - - Proxy of C++ fnumber_t class - - -ida_hexrays.fnumber_t._print(): - - _print(self) - - -ida_hexrays.fnumber_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.fnumber_t.dereference_const_uint16(): - - dereference_const_uint16(self) -> uint16 const * - - -ida_hexrays.fnumber_t.dereference_uint16(): - - dereference_uint16(self) -> uint16 * - - -ida_hexrays.fnumber_t.fnum: - - __get_fnum(self) -> fnum_array - - -ida_hexrays.fnumber_t.nbytes: - fnumber_t_nbytes_get(self) -> int - -class ida_hexrays.gco_info_t(): - - Proxy of C++ gco_info_t class - - -ida_hexrays.gco_info_t.append_to_list(): - - append_to_list(self, list, mba) -> bool - - -ida_hexrays.gco_info_t.flags: - gco_info_t_flags_get(self) -> int - -ida_hexrays.gco_info_t.is_def(): - - is_def(self) -> bool - - -ida_hexrays.gco_info_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.gco_info_t.is_use(): - - is_use(self) -> bool - - -ida_hexrays.gco_info_t.name: - gco_info_t_name_get(self) -> qstring * - -ida_hexrays.gco_info_t.size: - gco_info_t_size_get(self) -> int - -ida_hexrays.gen_microcode(): - - gen_microcode(mbr, hf, retlist=None, flags=0, reqmat=MMAT_GLBOPT3) -> mbl_array_t - - - Generate microcode of an arbitrary code snippet - - @param mbr: snippet ranges (C++: const mba_ranges_t &) - @param hf: extended error information (if failed) (C++: - hexrays_failure_t *) - @param retlist: list of registers the snippet returns (C++: const - mlist_t *) - @param flags: bitwise combination of decompile() flags ... bits (C++: - int) - @param reqmat: required microcode maturity (C++: mba_maturity_t) - @return: pointer to the microcode, NULL if failed. - - -ida_hexrays.get_ctype_name(): - - get_ctype_name(op) -> char const * - - -ida_hexrays.get_current_operand(): - - get_current_operand(out) -> bool - - - Get the instruction operand under the cursor. This function determines - the operand that is under the cursor in the active disassembly - listing. If the operand refers to a register or stack variable, it - return true. - - @param out (C++: gco_info_t *) - - -ida_hexrays.get_float_type(): - - get_float_type(width) -> tinfo_t - - - Get a type of a floating point value with the specified width - - @param width: width of the desired type (C++: int) - @return: type info object - - -ida_hexrays.get_hexrays_version(): - - get_hexrays_version() -> char const * - - - Get decompiler version. The returned string is of the form - ... - - @return: pointer to version string. For example: "2.0.0.140605" - - -ida_hexrays.get_int_type_by_width_and_sign(): - - get_int_type_by_width_and_sign(srcwidth, sign) -> tinfo_t - - - Create a type info by width and sign. Returns a simple type (examples: - int, short) with the given width and sign. - - @param srcwidth: size of the type in bytes (C++: int) - @param sign: sign of the type (C++: type_sign_t) - - -ida_hexrays.get_member_type(): - - get_member_type(mptr, type) -> bool - - - Get type of a structure field. This function performs validity checks - of the field type. Wrong types are rejected. - - @param mptr: structure field (C++: const member_t *) - @param type: pointer to the variable where the type is returned. This - parameter can be NULL. (C++: tinfo_t *) - @return: false if failed - - -ida_hexrays.get_merror_desc(): - - get_merror_desc(code, mba) -> ea_t - - - Get textual description of an error code - - @param code: Microcode error codes (C++: merror_t) - @param mba: the microcode array (C++: mbl_array_t *) - @return: the error address - - -ida_hexrays.get_mreg_name(): - - get_mreg_name(bit, width, ud=None) -> int - - -ida_hexrays.get_op_signness(): - - get_op_signness(op) -> type_sign_t - - - Get operator sign. Meaningful for sign-dependent operators, like - cot_sdiv. - - - @param op (C++: ctype_t) - - -ida_hexrays.get_signed_mcode(): - - get_signed_mcode(code) -> mcode_t - - -ida_hexrays.get_temp_regs(): - - get_temp_regs() -> mlist_t - - - Get list of temporary registers. Tempregs are temporary registers that - are used during code generation. They do not map to regular processor - registers. They are used only to store temporary values during - execution of one instruction. Tempregs may not be used to pass a value - from one block to another. In other words, at the end of a block all - tempregs must be dead. - - -ida_hexrays.get_type(): - - get_type(id, tif, guess) -> bool - - - Get a global type. Global types are types of addressable objects and - struct/union/enum types - - @param id: address or id of the object (C++: uval_t) - @param tif: buffer for the answer (C++: tinfo_t *) - @param guess: what kind of types to consider (C++: type_source_t) - @return: success - - -ida_hexrays.get_unk_type(): - - get_unk_type(size) -> tinfo_t - - - Create a partial type info by width. Returns a partially defined type - (examples: _DWORD, _BYTE) with the given width. - - @param size: size of the type in bytes (C++: int) - - -ida_hexrays.get_unsigned_mcode(): - - get_unsigned_mcode(code) -> mcode_t - - -ida_hexrays.get_widget_vdui(): - - get_widget_vdui(f) -> vdui_t - - - Get the 'vdui_t' instance associated to the TWidget - - @param f: pointer to window (C++: TWidget *) - @return: a vdui_t *, or NULL - - -ida_hexrays.getb_reginsn(): - - getb_reginsn(ins) -> minsn_t - - - Skip assertions backward. - - - @param ins (C++: const minsn_t *) - - -ida_hexrays.getf_reginsn(): - - getf_reginsn(ins) -> minsn_t - - - Skip assertions forward. - - - @param ins (C++: const minsn_t *) - - -class ida_hexrays.graph_chains_t(): - - Proxy of C++ graph_chains_t class - - -ida_hexrays.graph_chains_t.acquire(): - - acquire(self) - - -ida_hexrays.graph_chains_t.at(): - - at(self, _idx) -> block_chains_t - - -ida_hexrays.graph_chains_t.begin(): - - begin(self) -> block_chains_t - begin(self) -> block_chains_t - - -ida_hexrays.graph_chains_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.graph_chains_t.clear(): - - clear(self) - - -ida_hexrays.graph_chains_t.empty(): - - empty(self) -> bool - - -ida_hexrays.graph_chains_t.end(): - - end(self) -> block_chains_t - end(self) -> block_chains_t - - -ida_hexrays.graph_chains_t.erase(): - - erase(self, it) -> block_chains_t - erase(self, first, last) -> block_chains_t - - -ida_hexrays.graph_chains_t.extract(): - - extract(self) -> block_chains_t - - -ida_hexrays.graph_chains_t.for_all_chains(): - - for_all_chains(self, cv, gca_flags) -> int - - -ida_hexrays.graph_chains_t.grow(): - - grow(self, x=block_chains_t()) - - -ida_hexrays.graph_chains_t.inject(): - - inject(self, s, len) - - -ida_hexrays.graph_chains_t.insert(): - - insert(self, it, x) -> block_chains_t - - -ida_hexrays.graph_chains_t.is_locked(): - - is_locked(self) -> bool - - -ida_hexrays.graph_chains_t.pop_back(): - - pop_back(self) - - -ida_hexrays.graph_chains_t.push_back(): - - push_back(self, x) - push_back(self) -> block_chains_t - - -ida_hexrays.graph_chains_t.qclear(): - - qclear(self) - - -ida_hexrays.graph_chains_t.release(): - - release(self) - - -ida_hexrays.graph_chains_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.graph_chains_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.graph_chains_t.size(): - - size(self) -> size_t - - -ida_hexrays.graph_chains_t.swap(): - - swap(self, r) - - -ida_hexrays.graph_chains_t.truncate(): - - truncate(self) - - -ida_hexrays.has_cached_cfunc(): - - has_cached_cfunc(ea) -> bool - - - Do we have a cached decompilation result for 'ea'? - - - @param ea (C++: ea_t) - - -ida_hexrays.hexrays_alloc(): - - hexrays_alloc(size) -> void * - - -class ida_hexrays.hexrays_failure_t(): - - Proxy of C++ hexrays_failure_t class - - -ida_hexrays.hexrays_failure_t.code: - hexrays_failure_t_code_get(self) -> merror_t - -ida_hexrays.hexrays_failure_t.desc(): - - desc(self) -> qstring - - -ida_hexrays.hexrays_failure_t.errea: - hexrays_failure_t_errea_get(self) -> ea_t - -ida_hexrays.hexrays_failure_t.str: - hexrays_failure_t_str_get(self) -> qstring * - -ida_hexrays.hexrays_free(): - - hexrays_free(ptr) - - -class ida_hexrays.hexwarn_t(): - - Proxy of C++ hexwarn_t class - - -ida_hexrays.hexwarn_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.hexwarn_t.ea: - hexwarn_t_ea_get(self) -> ea_t - -ida_hexrays.hexwarn_t.id: - hexwarn_t_id_get(self) -> warnid_t - -ida_hexrays.hexwarn_t.text: - hexwarn_t_text_get(self) -> qstring * - -class ida_hexrays.hexwarns_t(): - - Proxy of C++ qvector<(hexwarn_t)> class - - -ida_hexrays.hexwarns_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.hexwarns_t.append(): - - push_back(self, x) - push_back(self) -> hexwarn_t - - -ida_hexrays.hexwarns_t.at(): - - __getitem__(self, i) -> hexwarn_t - - -ida_hexrays.hexwarns_t.begin(): - - begin(self) -> hexwarn_t - begin(self) -> hexwarn_t - - -ida_hexrays.hexwarns_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.hexwarns_t.clear(): - - clear(self) - - -ida_hexrays.hexwarns_t.empty(): - - empty(self) -> bool - - -ida_hexrays.hexwarns_t.end(): - - end(self) -> hexwarn_t - end(self) -> hexwarn_t - - -ida_hexrays.hexwarns_t.erase(): - - erase(self, it) -> hexwarn_t - erase(self, first, last) -> hexwarn_t - - -ida_hexrays.hexwarns_t.extract(): - - extract(self) -> hexwarn_t - - -ida_hexrays.hexwarns_t.find(): - - find(self, x) -> hexwarn_t - find(self, x) -> hexwarn_t - - -ida_hexrays.hexwarns_t.grow(): - - grow(self, x=hexwarn_t()) - - -ida_hexrays.hexwarns_t.has(): - - has(self, x) -> bool - - -ida_hexrays.hexwarns_t.inject(): - - inject(self, s, len) - - -ida_hexrays.hexwarns_t.insert(): - - insert(self, it, x) -> hexwarn_t - - -ida_hexrays.hexwarns_t.pop_back(): - - pop_back(self) - - -ida_hexrays.hexwarns_t.push_back(): - - push_back(self, x) - push_back(self) -> hexwarn_t - - -ida_hexrays.hexwarns_t.qclear(): - - qclear(self) - - -ida_hexrays.hexwarns_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.hexwarns_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.hexwarns_t.size(): - - size(self) -> size_t - - -ida_hexrays.hexwarns_t.swap(): - - swap(self, r) - - -ida_hexrays.hexwarns_t.truncate(): - - truncate(self) - - -class ida_hexrays.history_item_t(): - - Proxy of C++ history_item_t class - - -ida_hexrays.history_item_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.history_item_t.ea: - history_item_t_ea_get(self) -> ea_t - -ida_hexrays.history_item_t.end: - history_item_t_end_get(self) -> ea_t - -ida_hexrays.history_item_t.in_ctree(): - - in_ctree(self, hdrlines) -> bool - - -ida_hexrays.history_item_t.lnnum: - ctext_position_t_lnnum_get(self) -> int - -ida_hexrays.history_item_t.x: - ctext_position_t_x_get(self) -> int - -ida_hexrays.history_item_t.y: - ctext_position_t_y_get(self) -> int - -class ida_hexrays.history_t(): - - Proxy of C++ qstack<(history_item_t)> class - - -ida_hexrays.history_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.history_t.append(): - - push_back(self, x) - push_back(self) -> history_item_t - - -ida_hexrays.history_t.at(): - - __getitem__(self, i) -> history_item_t - - -ida_hexrays.history_t.begin(): - - begin(self) -> history_item_t - begin(self) -> history_item_t - - -ida_hexrays.history_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.history_t.clear(): - - clear(self) - - -ida_hexrays.history_t.empty(): - - empty(self) -> bool - - -ida_hexrays.history_t.end(): - - end(self) -> history_item_t - end(self) -> history_item_t - - -ida_hexrays.history_t.erase(): - - erase(self, it) -> history_item_t - erase(self, first, last) -> history_item_t - - -ida_hexrays.history_t.extract(): - - extract(self) -> history_item_t - - -ida_hexrays.history_t.find(): - - find(self, x) -> history_item_t - find(self, x) -> history_item_t - - -ida_hexrays.history_t.grow(): - - grow(self, x=history_item_t()) - - -ida_hexrays.history_t.has(): - - has(self, x) -> bool - - -ida_hexrays.history_t.inject(): - - inject(self, s, len) - - -ida_hexrays.history_t.insert(): - - insert(self, it, x) -> history_item_t - - -ida_hexrays.history_t.pop(): - - pop(self) -> history_item_t - - -ida_hexrays.history_t.pop_back(): - - pop_back(self) - - -ida_hexrays.history_t.push(): - - push(self, v) - - -ida_hexrays.history_t.push_back(): - - push_back(self, x) - push_back(self) -> history_item_t - - -ida_hexrays.history_t.qclear(): - - qclear(self) - - -ida_hexrays.history_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.history_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.history_t.size(): - - size(self) -> size_t - - -ida_hexrays.history_t.swap(): - - swap(self, r) - - -ida_hexrays.history_t.top(): - - top(self) -> history_item_t - top(self) -> history_item_t - - -ida_hexrays.history_t.truncate(): - - truncate(self) - - -ida_hexrays.init_hexrays_plugin(): - - init_hexrays_plugin(flags=0) -> bool - - - Initialize your plugin for hex-rays decompiler. This function must be - called before calling any other decompiler function. It initializes - the pointer to the dispatcher. - - @param flags: reserved, must be 0 (C++: int) - @return: true if the decompiler exists and the dispatcher pointer is - ready to use. - - -ida_hexrays.install_hexrays_callback(): - Deprecated. Please use Hexrays_Hooks instead - -ida_hexrays.install_microcode_filter(): - - install_microcode_filter(filter, install=True) - - - register/unregister non-standard microcode generator - - @param filter: - microcode generator object (C++: microcode_filter_t - *) - @param install: - TRUE - register the object, FALSE - unregister (C++: - bool) - - -ida_hexrays.is_additive(): - - is_additive(op) -> bool - - - Is additive operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_allowed_on_small_struni(): - - accepts_small_udts(op) -> bool - - - Is the operator allowed on small structure or union? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_assignment(): - - is_assignment(op) -> bool - - - Is assignment operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_binary(): - - is_binary(op) -> bool - - - Is binary operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_bitop(): - - is_bitop(op) -> bool - - - Is bit related operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_bool_type(): - - is_bool_type(type) -> bool - - - Is a boolean type? - - @param type (C++: const tinfo_t &) - @return: true if the type is a boolean type - - -ida_hexrays.is_break_consumer(): - - is_break_consumer(op) -> bool - - - Does a break statement influence the specified statement code? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_commutative(): - - is_commutative(op) -> bool - - - Is commutative operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_inplace_def(): - - is_inplace_def(type) -> bool - - - Is struct/union/enum definition (not declaration)? - - - @param type (C++: const tinfo_t &) - - -ida_hexrays.is_kreg(): - - is_kreg(r) -> bool - - - Is a kernel register? - - - @param r (C++: mreg_t) - - -ida_hexrays.is_logical(): - - is_logical(op) -> bool - - - Is logical operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_loop(): - - is_loop(op) -> bool - - - Is loop statement code? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_lvalue(): - - is_lvalue(op) -> bool - - - Is Lvalue operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_may_access(): - - is_may_access(maymust) -> bool - - -ida_hexrays.is_mcode_addsub(): - - is_mcode_addsub(mcode) -> bool - - -ida_hexrays.is_mcode_call(): - - is_mcode_call(mcode) -> bool - - -ida_hexrays.is_mcode_commutative(): - - is_mcode_commutative(mcode) -> bool - - -ida_hexrays.is_mcode_convertible_to_jmp(): - - is_mcode_convertible_to_jmp(mcode) -> bool - - -ida_hexrays.is_mcode_convertible_to_set(): - - is_mcode_convertible_to_set(mcode) -> bool - - -ida_hexrays.is_mcode_divmod(): - - is_mcode_divmod(op) -> bool - - -ida_hexrays.is_mcode_fpu(): - - is_mcode_fpu(mcode) -> bool - - -ida_hexrays.is_mcode_j1(): - - is_mcode_j1(mcode) -> bool - - -ida_hexrays.is_mcode_jcond(): - - is_mcode_jcond(mcode) -> bool - - -ida_hexrays.is_mcode_propagatable(): - - is_mcode_propagatable(mcode) -> bool - - - May opcode be propagated? Such opcodes can be used in sub-instructions - (nested instructions) There is a handful of non-propagatable opcodes, - like jumps, ret, nop, etc All other regular opcodes are propagatable - and may appear in a nested instruction. - - @param mcode (C++: mcode_t) - - -ida_hexrays.is_mcode_set(): - - is_mcode_set(mcode) -> bool - - -ida_hexrays.is_mcode_set1(): - - is_mcode_set1(mcode) -> bool - - -ida_hexrays.is_mcode_shift(): - - is_mcode_shift(mcode) -> bool - - -ida_hexrays.is_mcode_xdsu(): - - is_mcode_xdsu(mcode) -> bool - - -ida_hexrays.is_multiplicative(): - - is_multiplicative(op) -> bool - - - Is multiplicative operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_nonbool_type(): - - is_nonbool_type(type) -> bool - - - Is definitely a non-boolean type? - - @param type (C++: const tinfo_t &) - @return: true if the type is a non-boolean type (non bool and well - defined) - - -ida_hexrays.is_paf(): - - is_paf(t) -> bool - - - Is a pointer, array, or function type? - - - @param t (C++: type_t) - - -ida_hexrays.is_prepost(): - - is_prepost(op) -> bool - - - Is pre/post increment/decrement operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_ptr_or_array(): - - is_ptr_or_array(t) -> bool - - - Is a pointer or array type? - - - @param t (C++: type_t) - - -ida_hexrays.is_relational(): - - is_relational(op) -> bool - - - Is comparison operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_signed_mcode(): - - is_signed_mcode(code) -> bool - - -ida_hexrays.is_small_struni(): - - is_small_udt(tif) -> bool - - - Is a small structure or union? - - @param tif (C++: const tinfo_t &) - @return: true if the type is a small UDT (user defined type). Small - UDTs fit into a register (or pair or registers) as a rule. - - -ida_hexrays.is_small_udt(): - - is_small_udt(tif) -> bool - - - Is a small structure or union? - - @param tif (C++: const tinfo_t &) - @return: true if the type is a small UDT (user defined type). Small - UDTs fit into a register (or pair or registers) as a rule. - - -ida_hexrays.is_type_correct(): - - is_type_correct(ptr) -> bool - - - Verify a type string. - - @param ptr (C++: const type_t *) - @return: true if type string is correct - - -ida_hexrays.is_unary(): - - is_unary(op) -> bool - - - Is unary operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_unsigned_mcode(): - - is_unsigned_mcode(code) -> bool - - -class ida_hexrays.ivl_t(): - - Proxy of C++ ivl_t class - - -ida_hexrays.ivl_t.clear(): - - clear(self) - - -ida_hexrays.ivl_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.ivl_t.contains(): - - contains(self, off2) -> bool - - -ida_hexrays.ivl_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.ivl_t.empty(): - - empty(self) -> bool - - -ida_hexrays.ivl_t.end(): - - end(self) -> unsigned-ea-like-numeric-type - - -ida_hexrays.ivl_t.extend_to_cover(): - - extend_to_cover(self, r) -> bool - - -ida_hexrays.ivl_t.includes(): - - includes(self, ivl) -> bool - - -ida_hexrays.ivl_t.intersect(): - - intersect(self, r) - - -ida_hexrays.ivl_t.last(): - - last(self) -> unsigned-ea-like-numeric-type - - -ida_hexrays.ivl_t.off: - uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.ivl_t.overlap(): - - overlap(self, ivl) -> bool - - -ida_hexrays.ivl_t.size: - uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.ivl_t.valid(): - - valid(self) -> bool - - -class ida_hexrays.ivl_with_name_t(): - - Proxy of C++ ivl_with_name_t class - - -ida_hexrays.ivl_with_name_t.ivl: - ivl_with_name_t_ivl_get(self) -> ivl_t - -ida_hexrays.ivl_with_name_t.part: - ivl_with_name_t_part_get(self) -> char const * - -ida_hexrays.ivl_with_name_t.whole: - ivl_with_name_t_whole_get(self) -> char const * - -class ida_hexrays.ivlset_t(): - - Proxy of C++ ivlset_t class - - -ida_hexrays.ivlset_t._print(): - - _print(self) - - -ida_hexrays.ivlset_t.add(): - - add(self, ivl) -> bool - add(self, ea, size) -> bool - add(self, ivs) -> bool - - -ida_hexrays.ivlset_t.addmasked(): - - addmasked(self, ivs, mask) -> bool - - -ida_hexrays.ivlset_t.all_values(): - - all_values(self) -> bool - - -ida_hexrays.ivlset_t.begin(): - - begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator - begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.ivlset_t.clear(): - - clear(self) - - -ida_hexrays.ivlset_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.ivlset_t.contains(): - - contains(self, off) -> bool - - -ida_hexrays.ivlset_t.count(): - - count(self) -> asize_t - - -ida_hexrays.ivlset_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.ivlset_t.empty(): - - empty(self) -> bool - - -ida_hexrays.ivlset_t.end(): - - end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator - end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.ivlset_t.getivl(): - - getivl(self, idx) -> ivl_t - - -ida_hexrays.ivlset_t.has_common(): - - has_common(self, ivl, strict=False) -> bool - has_common(self, ivs) -> bool - - -ida_hexrays.ivlset_t.includes(): - - includes(self, ivs) -> bool - - -ida_hexrays.ivlset_t.intersect(): - - intersect(self, ivs) -> bool - - -ida_hexrays.ivlset_t.lastivl(): - - lastivl(self) -> ivl_t - - -ida_hexrays.ivlset_t.nivls(): - - nivls(self) -> size_t - - -ida_hexrays.ivlset_t.qclear(): - - qclear(self) - - -ida_hexrays.ivlset_t.set_all_values(): - - set_all_values(self) - - -ida_hexrays.ivlset_t.single_value(): - - single_value(self, v) -> bool - - -ida_hexrays.ivlset_t.sub(): - - sub(self, ivl) -> bool - sub(self, ea, size) -> bool - sub(self, ivs) -> bool - - -ida_hexrays.ivlset_t.swap(): - - swap(self, r) - - -ida_hexrays.jcnd2set(): - - jcnd2set(code) -> mcode_t - - -ida_hexrays.lexcompare(): - - lexcompare(a, b) -> int - - -class ida_hexrays.lvar_locator_t(): - - Proxy of C++ lvar_locator_t class - - -ida_hexrays.lvar_locator_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.lvar_locator_t.defea: - lvar_locator_t_defea_get(self) -> ea_t - -ida_hexrays.lvar_locator_t.get_reg1(): - - get_reg1(self) -> mreg_t - - -ida_hexrays.lvar_locator_t.get_reg2(): - - get_reg2(self) -> mreg_t - - -ida_hexrays.lvar_locator_t.get_scattered(): - - get_scattered(self) -> scattered_aloc_t - get_scattered(self) -> scattered_aloc_t - - -ida_hexrays.lvar_locator_t.get_stkoff(): - - get_stkoff(self) -> sval_t - - -ida_hexrays.lvar_locator_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_hexrays.lvar_locator_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_hexrays.lvar_locator_t.is_reg_var(): - - is_reg_var(self) -> bool - - -ida_hexrays.lvar_locator_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.lvar_locator_t.is_stk_var(): - - is_stk_var(self) -> bool - - -ida_hexrays.lvar_locator_t.location: - lvar_locator_t_location_get(self) -> vdloc_t - -ida_hexrays.lvar_mapping_begin(): - - lvar_mapping_begin(map) -> lvar_mapping_iterator_t - - - Get iterator pointing to the beginning of lvar_mapping_t. - - - @param map (C++: const lvar_mapping_t *) - - -ida_hexrays.lvar_mapping_clear(): - - lvar_mapping_clear(map) - - - Clear lvar_mapping_t. - - - @param map (C++: lvar_mapping_t *) - - -ida_hexrays.lvar_mapping_end(): - - lvar_mapping_end(map) -> lvar_mapping_iterator_t - - - Get iterator pointing to the end of lvar_mapping_t. - - - @param map (C++: const lvar_mapping_t *) - - -ida_hexrays.lvar_mapping_erase(): - - lvar_mapping_erase(map, p) - - - Erase current element from lvar_mapping_t. - - - @param map (C++: lvar_mapping_t *) - @param p (C++: lvar_mapping_iterator_t) - - -ida_hexrays.lvar_mapping_find(): - - lvar_mapping_find(map, key) -> lvar_mapping_iterator_t - - - Find the specified key in lvar_mapping_t. - - - @param map (C++: const lvar_mapping_t *) - @param key (C++: const lvar_locator_t &) - - -ida_hexrays.lvar_mapping_first(): - - lvar_mapping_first(p) -> lvar_locator_t - - - Get reference to the current map key. - - - @param p (C++: lvar_mapping_iterator_t) - - -ida_hexrays.lvar_mapping_free(): - - lvar_mapping_free(map) - - - Delete lvar_mapping_t instance. - - - @param map (C++: lvar_mapping_t *) - - -ida_hexrays.lvar_mapping_insert(): - - lvar_mapping_insert(map, key, val) -> lvar_mapping_iterator_t - - - Insert new ( 'lvar_locator_t' , 'lvar_locator_t' ) pair into - lvar_mapping_t. - - - @param map (C++: lvar_mapping_t *) - @param key (C++: const lvar_locator_t &) - @param val (C++: const lvar_locator_t &) - - -class ida_hexrays.lvar_mapping_iterator_t(): - - Proxy of C++ lvar_mapping_iterator_t class - - -ida_hexrays.lvar_mapping_iterator_t.x: - lvar_mapping_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.lvar_mapping_new(): - - lvar_mapping_new() -> lvar_mapping_t - - - Create a new lvar_mapping_t instance. - - -ida_hexrays.lvar_mapping_next(): - - lvar_mapping_next(p) -> lvar_mapping_iterator_t - - - Move to the next element. - - - @param p (C++: lvar_mapping_iterator_t) - - -ida_hexrays.lvar_mapping_prev(): - - lvar_mapping_prev(p) -> lvar_mapping_iterator_t - - - Move to the previous element. - - - @param p (C++: lvar_mapping_iterator_t) - - -ida_hexrays.lvar_mapping_second(): - - lvar_mapping_second(p) -> lvar_locator_t - - - Get reference to the current map value. - - - @param p (C++: lvar_mapping_iterator_t) - - -ida_hexrays.lvar_mapping_size(): - - lvar_mapping_size(map) -> size_t - - - Get size of lvar_mapping_t. - - - @param map (C++: lvar_mapping_t *) - - -class ida_hexrays.lvar_mapping_t(): - - Proxy of C++ std::map<(lvar_locator_t,lvar_locator_t)> class - - -ida_hexrays.lvar_mapping_t.at(): - - at(self, _Keyval) -> lvar_locator_t - - -ida_hexrays.lvar_mapping_t.size(): - - size(self) -> size_t - - -class ida_hexrays.lvar_ref_t(): - - Proxy of C++ lvar_ref_t class - - -ida_hexrays.lvar_ref_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.lvar_ref_t.idx: - lvar_ref_t_idx_get(self) -> int - -ida_hexrays.lvar_ref_t.mba: - lvar_ref_t_mba_get(self) -> mbl_array_t - -ida_hexrays.lvar_ref_t.off: - lvar_ref_t_off_get(self) -> sval_t - -ida_hexrays.lvar_ref_t.swap(): - - swap(self, r) - - -ida_hexrays.lvar_ref_t.var(): - - var(self) -> lvar_t - - -class ida_hexrays.lvar_saved_info_t(): - - Proxy of C++ lvar_saved_info_t class - - -ida_hexrays.lvar_saved_info_t.clear_keep(): - - clear_keep(self) - - -ida_hexrays.lvar_saved_info_t.clr_forced_lvar(): - - clr_forced_lvar(self) - - -ida_hexrays.lvar_saved_info_t.clr_noptr_lvar(): - - clr_noptr_lvar(self) - - -ida_hexrays.lvar_saved_info_t.cmt: - lvar_saved_info_t_cmt_get(self) -> qstring * - -ida_hexrays.lvar_saved_info_t.flags: - lvar_saved_info_t_flags_get(self) -> int - -ida_hexrays.lvar_saved_info_t.has_info(): - - has_info(self) -> bool - - -ida_hexrays.lvar_saved_info_t.is_forced_lvar(): - - is_forced_lvar(self) -> bool - - -ida_hexrays.lvar_saved_info_t.is_kept(): - - is_kept(self) -> bool - - -ida_hexrays.lvar_saved_info_t.is_noptr_lvar(): - - is_noptr_lvar(self) -> bool - - -ida_hexrays.lvar_saved_info_t.ll: - lvar_saved_info_t_ll_get(self) -> lvar_locator_t - -ida_hexrays.lvar_saved_info_t.name: - lvar_saved_info_t_name_get(self) -> qstring * - -ida_hexrays.lvar_saved_info_t.set_forced_lvar(): - - set_forced_lvar(self) - - -ida_hexrays.lvar_saved_info_t.set_keep(): - - set_keep(self) - - -ida_hexrays.lvar_saved_info_t.set_noptr_lvar(): - - set_noptr_lvar(self) - - -ida_hexrays.lvar_saved_info_t.size: - lvar_saved_info_t_size_get(self) -> ssize_t - -ida_hexrays.lvar_saved_info_t.type: - lvar_saved_info_t_type_get(self) -> tinfo_t - -class ida_hexrays.lvar_saved_infos_t(): - - Proxy of C++ qvector<(lvar_saved_info_t)> class - - -ida_hexrays.lvar_saved_infos_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.lvar_saved_infos_t.append(): - - push_back(self, x) - push_back(self) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.at(): - - __getitem__(self, i) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.begin(): - - begin(self) -> lvar_saved_info_t - begin(self) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.lvar_saved_infos_t.clear(): - - clear(self) - - -ida_hexrays.lvar_saved_infos_t.empty(): - - empty(self) -> bool - - -ida_hexrays.lvar_saved_infos_t.end(): - - end(self) -> lvar_saved_info_t - end(self) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.erase(): - - erase(self, it) -> lvar_saved_info_t - erase(self, first, last) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.extract(): - - extract(self) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.find(): - - find(self, x) -> lvar_saved_info_t - find(self, x) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.grow(): - - grow(self, x=lvar_saved_info_t()) - - -ida_hexrays.lvar_saved_infos_t.has(): - - has(self, x) -> bool - - -ida_hexrays.lvar_saved_infos_t.inject(): - - inject(self, s, len) - - -ida_hexrays.lvar_saved_infos_t.insert(): - - insert(self, it, x) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.pop_back(): - - pop_back(self) - - -ida_hexrays.lvar_saved_infos_t.push_back(): - - push_back(self, x) - push_back(self) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.qclear(): - - qclear(self) - - -ida_hexrays.lvar_saved_infos_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.lvar_saved_infos_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.lvar_saved_infos_t.size(): - - size(self) -> size_t - - -ida_hexrays.lvar_saved_infos_t.swap(): - - swap(self, r) - - -ida_hexrays.lvar_saved_infos_t.truncate(): - - truncate(self) - - -class ida_hexrays.lvar_t(): - - Proxy of C++ lvar_t class - - -ida_hexrays.lvar_t.accepts_type(): - - accepts_type(self, t, may_change_thisarg=False) -> bool - - -ida_hexrays.lvar_t.append_list(): - - append_list(self, lst, pad_if_scattered=False) - - -ida_hexrays.lvar_t.clear_used(): - - clear_used(self) - - -ida_hexrays.lvar_t.clr_arg_var(): - - clr_arg_var(self) - - -ida_hexrays.lvar_t.clr_dummy_arg(): - - clr_dummy_arg(self) - - -ida_hexrays.lvar_t.clr_fake_var(): - - clr_fake_var(self) - - -ida_hexrays.lvar_t.clr_floating_var(): - - clr_floating_var(self) - - -ida_hexrays.lvar_t.clr_forced_var(): - - clr_forced_var(self) - - -ida_hexrays.lvar_t.clr_mapdst_var(): - - clr_mapdst_var(self) - - -ida_hexrays.lvar_t.clr_mreg_done(): - - clr_mreg_done(self) - - -ida_hexrays.lvar_t.clr_noptr_var(): - - clr_noptr_var(self) - - -ida_hexrays.lvar_t.clr_notarg(): - - clr_notarg(self) - - -ida_hexrays.lvar_t.clr_overlapped_var(): - - clr_overlapped_var(self) - - -ida_hexrays.lvar_t.clr_spoiled_var(): - - clr_spoiled_var(self) - - -ida_hexrays.lvar_t.clr_thisarg(): - - clr_thisarg(self) - - -ida_hexrays.lvar_t.clr_unknown_width(): - - clr_unknown_width(self) - - -ida_hexrays.lvar_t.clr_user_info(): - - clr_user_info(self) - - -ida_hexrays.lvar_t.clr_user_name(): - - clr_user_name(self) - - -ida_hexrays.lvar_t.clr_user_type(): - - clr_user_type(self) - - -ida_hexrays.lvar_t.cmt: - lvar_t_cmt_get(self) -> qstring * - -ida_hexrays.lvar_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.lvar_t.defblk: - lvar_t_defblk_get(self) -> int - -ida_hexrays.lvar_t.defea: - lvar_locator_t_defea_get(self) -> ea_t - -ida_hexrays.lvar_t.divisor: - lvar_t_divisor_get(self) -> uint64 - -ida_hexrays.lvar_t.get_reg1(): - - get_reg1(self) -> mreg_t - - -ida_hexrays.lvar_t.get_reg2(): - - get_reg2(self) -> mreg_t - - -ida_hexrays.lvar_t.get_scattered(): - - get_scattered(self) -> scattered_aloc_t - get_scattered(self) -> scattered_aloc_t - - -ida_hexrays.lvar_t.get_stkoff(): - - get_stkoff(self) -> sval_t - - -ida_hexrays.lvar_t.has_common(): - - has_common(self, v) -> bool - - -ida_hexrays.lvar_t.has_common_bit(): - - has_common_bit(self, loc, width2) -> bool - - -ida_hexrays.lvar_t.has_nice_name: - - has_nice_name(self) -> bool - - -ida_hexrays.lvar_t.has_regname(): - - has_regname(self) -> bool - - -ida_hexrays.lvar_t.has_user_info: - - has_user_info(self) -> bool - - -ida_hexrays.lvar_t.has_user_name: - - has_user_name(self) -> bool - - -ida_hexrays.lvar_t.has_user_type: - - has_user_type(self) -> bool - - -ida_hexrays.lvar_t.is_aliasable(): - - is_aliasable(self, mba) -> bool - - -ida_hexrays.lvar_t.is_arg_var: - - is_arg_var(self) -> bool - - -ida_hexrays.lvar_t.is_dummy_arg(): - - is_dummy_arg(self) -> bool - - -ida_hexrays.lvar_t.is_fake_var: - - is_fake_var(self) -> bool - - -ida_hexrays.lvar_t.is_floating_var: - - is_floating_var(self) -> bool - - -ida_hexrays.lvar_t.is_forced_var(): - - is_forced_var(self) -> bool - - -ida_hexrays.lvar_t.is_mapdst_var: - - is_mapdst_var(self) -> bool - - -ida_hexrays.lvar_t.is_noptr_var(): - - is_noptr_var(self) -> bool - - -ida_hexrays.lvar_t.is_notarg(): - - is_notarg(self) -> bool - - -ida_hexrays.lvar_t.is_overlapped_var: - - is_overlapped_var(self) -> bool - - -ida_hexrays.lvar_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_hexrays.lvar_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_hexrays.lvar_t.is_reg_var(): - - is_reg_var(self) -> bool - - -ida_hexrays.lvar_t.is_result_var: - - is_result_var(self) -> bool - - -ida_hexrays.lvar_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.lvar_t.is_spoiled_var: - - is_spoiled_var(self) -> bool - - -ida_hexrays.lvar_t.is_stk_var(): - - is_stk_var(self) -> bool - - -ida_hexrays.lvar_t.is_thisarg(): - - is_thisarg(self) -> bool - - -ida_hexrays.lvar_t.is_unknown_width: - - is_unknown_width(self) -> bool - - -ida_hexrays.lvar_t.location: - lvar_locator_t_location_get(self) -> vdloc_t - -ida_hexrays.lvar_t.mreg_done: - - mreg_done(self) -> bool - - -ida_hexrays.lvar_t.name: - lvar_t_name_get(self) -> qstring * - -ida_hexrays.lvar_t.set_arg_var(): - - set_arg_var(self) - - -ida_hexrays.lvar_t.set_dummy_arg(): - - set_dummy_arg(self) - - -ida_hexrays.lvar_t.set_fake_var(): - - set_fake_var(self) - - -ida_hexrays.lvar_t.set_final_lvar_type(): - - set_final_lvar_type(self, t) - - -ida_hexrays.lvar_t.set_floating_var(): - - set_floating_var(self) - - -ida_hexrays.lvar_t.set_forced_var(): - - set_forced_var(self) - - -ida_hexrays.lvar_t.set_lvar_type(): - - set_lvar_type(self, t, may_fail=False) -> bool - - -ida_hexrays.lvar_t.set_mapdst_var(): - - set_mapdst_var(self) - - -ida_hexrays.lvar_t.set_mreg_done(): - - set_mreg_done(self) - - -ida_hexrays.lvar_t.set_non_typed(): - - set_non_typed(self) - - -ida_hexrays.lvar_t.set_noptr_var(): - - set_noptr_var(self) - - -ida_hexrays.lvar_t.set_notarg(): - - set_notarg(self) - - -ida_hexrays.lvar_t.set_overlapped_var(): - - set_overlapped_var(self) - - -ida_hexrays.lvar_t.set_spoiled_var(): - - set_spoiled_var(self) - - -ida_hexrays.lvar_t.set_thisarg(): - - set_thisarg(self) - - -ida_hexrays.lvar_t.set_typed(): - - set_typed(self) - - -ida_hexrays.lvar_t.set_unknown_width(): - - set_unknown_width(self) - - -ida_hexrays.lvar_t.set_used(): - - set_used(self) - - -ida_hexrays.lvar_t.set_user_name(): - - set_user_name(self) - - -ida_hexrays.lvar_t.set_user_type(): - - set_user_type(self) - - -ida_hexrays.lvar_t.set_width(): - - set_width(self, w, svw_flags=0) -> bool - - -ida_hexrays.lvar_t.tif: - lvar_t_tif_get(self) -> tinfo_t - -ida_hexrays.lvar_t.type(): - - type(self) -> tinfo_t - type(self) -> tinfo_t - - -ida_hexrays.lvar_t.typed: - - typed(self) -> bool - - -ida_hexrays.lvar_t.used: - - used(self) -> bool - - -ida_hexrays.lvar_t.width: - lvar_t_width_get(self) -> int - -class ida_hexrays.lvar_uservec_t(): - - Proxy of C++ lvar_uservec_t class - - -ida_hexrays.lvar_uservec_t.clear(): - - clear(self) - - -ida_hexrays.lvar_uservec_t.find_info(): - - find_info(self, vloc) -> lvar_saved_info_t - - -ida_hexrays.lvar_uservec_t.keep_info(): - - keep_info(self, v) - - -ida_hexrays.lvar_uservec_t.lmaps: - lvar_uservec_t_lmaps_get(self) -> lvar_mapping_t - -ida_hexrays.lvar_uservec_t.lvvec: - lvar_uservec_t_lvvec_get(self) -> lvar_saved_infos_t - -ida_hexrays.lvar_uservec_t.stkoff_delta: - lvar_uservec_t_stkoff_delta_get(self) -> uval_t - -ida_hexrays.lvar_uservec_t.swap(): - - swap(self, r) - - -ida_hexrays.lvar_uservec_t.ulv_flags: - lvar_uservec_t_ulv_flags_get(self) -> int - -class ida_hexrays.lvars_t(): - - Proxy of C++ lvars_t class - - -ida_hexrays.lvars_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.lvars_t.append(): - - push_back(self, x) - push_back(self) -> lvar_t - - -ida_hexrays.lvars_t.at(): - - __getitem__(self, i) -> lvar_t - - -ida_hexrays.lvars_t.begin(): - - begin(self) -> lvar_t - begin(self) -> lvar_t - - -ida_hexrays.lvars_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.lvars_t.clear(): - - clear(self) - - -ida_hexrays.lvars_t.empty(): - - empty(self) -> bool - - -ida_hexrays.lvars_t.end(): - - end(self) -> lvar_t - end(self) -> lvar_t - - -ida_hexrays.lvars_t.erase(): - - erase(self, it) -> lvar_t - erase(self, first, last) -> lvar_t - - -ida_hexrays.lvars_t.extract(): - - extract(self) -> lvar_t - - -ida_hexrays.lvars_t.find(): - - find(self, ll) -> lvar_t - - -ida_hexrays.lvars_t.find_input_lvar(): - - find_input_lvar(self, argloc, _size) -> int - - -ida_hexrays.lvars_t.find_lvar(): - - find_lvar(self, location, width, defblk=-1) -> int - - -ida_hexrays.lvars_t.find_stkvar(): - - find_stkvar(self, spoff, width) -> int - - -ida_hexrays.lvars_t.grow(): - - grow(self, x=lvar_t()) - - -ida_hexrays.lvars_t.has(): - - has(self, x) -> bool - - -ida_hexrays.lvars_t.inject(): - - inject(self, s, len) - - -ida_hexrays.lvars_t.insert(): - - insert(self, it, x) -> lvar_t - - -ida_hexrays.lvars_t.pop_back(): - - pop_back(self) - - -ida_hexrays.lvars_t.push_back(): - - push_back(self, x) - push_back(self) -> lvar_t - - -ida_hexrays.lvars_t.qclear(): - - qclear(self) - - -ida_hexrays.lvars_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.lvars_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.lvars_t.size(): - - size(self) -> size_t - - -ida_hexrays.lvars_t.swap(): - - swap(self, r) - - -ida_hexrays.lvars_t.truncate(): - - truncate(self) - - -ida_hexrays.make_pointer(): - - make_pointer(type) -> tinfo_t - - - Create a pointer type. This function performs the following - conversion: "type" -> "type*" - - @param type: object type. (C++: const tinfo_t &) - @return: "type*". for example, if 'char' is passed as the argument, - - -ida_hexrays.mark_cfunc_dirty(): - - mark_cfunc_dirty(ea, close_views=False) -> bool - - - Flush the cached decompilation results. Erases a cache entry for the - specified function. - - @param ea: function to erase from the cache (C++: ea_t) - @param close_views: close pseudocode windows that show the function - (C++: bool) - @return: if a cache entry existed. - - -class ida_hexrays.mba_range_iterator_t(): - - Proxy of C++ mba_range_iterator_t class - - -ida_hexrays.mba_range_iterator_t.chunk(): - - chunk(self) -> range_t - - -ida_hexrays.mba_range_iterator_t.fii: - mba_range_iterator_t_fii_get(self) -> func_tail_iterator_t - -ida_hexrays.mba_range_iterator_t.is_snippet(): - - is_snippet(self) -> bool - - -ida_hexrays.mba_range_iterator_t.next(): - - next(self) -> bool - - -ida_hexrays.mba_range_iterator_t.rii: - mba_range_iterator_t_rii_get(self) -> range_chunk_iterator_t * - -ida_hexrays.mba_range_iterator_t.set(): - - set(self, mbr) -> bool - - -class ida_hexrays.mba_ranges_t(): - - Proxy of C++ mba_ranges_t class - - -ida_hexrays.mba_ranges_t.clear(): - - clear(self) - - -ida_hexrays.mba_ranges_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mba_ranges_t.is_fragmented(): - - is_fragmented(self) -> bool - - -ida_hexrays.mba_ranges_t.is_snippet(): - - is_snippet(self) -> bool - - -ida_hexrays.mba_ranges_t.pfn: - mba_ranges_t_pfn_get(self) -> func_t * - -ida_hexrays.mba_ranges_t.ranges: - mba_ranges_t_ranges_get(self) -> rangevec_t - -ida_hexrays.mba_ranges_t.start(): - - start(self) -> ea_t - - -class ida_hexrays.mbl_array_t(): - - Proxy of C++ mbl_array_t class - - -ida_hexrays.mbl_array_t._print(): - - _print(self, vp) - - -ida_hexrays.mbl_array_t.aliased_args: - mbl_array_t_aliased_args_get(self) -> ivl_t - -ida_hexrays.mbl_array_t.aliased_memory: - mbl_array_t_aliased_memory_get(self) -> ivlset_t - -ida_hexrays.mbl_array_t.aliased_vars: - mbl_array_t_aliased_vars_get(self) -> ivl_t - -ida_hexrays.mbl_array_t.alloc_lvars(): - - alloc_lvars(self) - - -ida_hexrays.mbl_array_t.analyze_calls(): - - analyze_calls(self, acflags) -> int - - -ida_hexrays.mbl_array_t.arg(): - - arg(self, n) -> lvar_t - arg(self, n) -> lvar_t - - -ida_hexrays.mbl_array_t.argbase(): - - argbase(self) -> sval_t - - -ida_hexrays.mbl_array_t.argidx: - mbl_array_t_argidx_get(self) -> intvec_t - -ida_hexrays.mbl_array_t.argidx_ok(): - - argidx_ok(self) -> bool - - -ida_hexrays.mbl_array_t.bad_call_sp_detected(): - - bad_call_sp_detected(self) -> bool - - -ida_hexrays.mbl_array_t.blocks: - mbl_array_t_blocks_get(self) -> mblock_t - -ida_hexrays.mbl_array_t.build_graph(): - - build_graph(self) -> merror_t - - -ida_hexrays.mbl_array_t.calc_shins_flags(): - - calc_shins_flags(self) -> int - - -ida_hexrays.mbl_array_t.callinfo_built(): - - callinfo_built(self) -> bool - - -ida_hexrays.mbl_array_t.cc: - mbl_array_t_cc_get(self) -> cm_t - -ida_hexrays.mbl_array_t.chain_varnums_ok(): - - chain_varnums_ok(self) -> bool - - -ida_hexrays.mbl_array_t.clr_cdtr(): - - clr_cdtr(self) - - -ida_hexrays.mbl_array_t.clr_mba_flags(): - - clr_mba_flags(self, f) - - -ida_hexrays.mbl_array_t.clr_mba_flags2(): - - clr_mba_flags2(self, f) - - -ida_hexrays.mbl_array_t.combine_blocks(): - - combine_blocks(self) -> bool - - -ida_hexrays.mbl_array_t.common_stkvars_stkargs(): - - common_stkvars_stkargs(self) -> bool - - -ida_hexrays.mbl_array_t.consumed_argregs: - mbl_array_t_consumed_argregs_get(self) -> rlist_t - -ida_hexrays.mbl_array_t.copy_block(): - - copy_block(self, blk, new_serial, cpblk_flags=3) -> mblock_t - - -ida_hexrays.mbl_array_t.deleted_pairs(): - - deleted_pairs(self) -> bool - - -ida_hexrays.mbl_array_t.deserialize(): - - deserialize(bytes, nbytes) -> mbl_array_t - - -ida_hexrays.mbl_array_t.display_numaddrs(): - - display_numaddrs(self) -> bool - - -ida_hexrays.mbl_array_t.display_valnums(): - - display_valnums(self) -> bool - - -ida_hexrays.mbl_array_t.dump(): - - dump(self) - - -ida_hexrays.mbl_array_t.dump_mba(): - - dump_mba(self, _verify, title) - - -ida_hexrays.mbl_array_t.entry_ea: - mbl_array_t_entry_ea_get(self) -> ea_t - -ida_hexrays.mbl_array_t.error_ea: - mbl_array_t_error_ea_get(self) -> ea_t - -ida_hexrays.mbl_array_t.error_strarg: - mbl_array_t_error_strarg_get(self) -> qstring * - -ida_hexrays.mbl_array_t.final_type: - mbl_array_t_final_type_get(self) -> bool - -ida_hexrays.mbl_array_t.find_mop(): - - find_mop(self, ctx, ea, is_dest, list) -> mop_t - - -ida_hexrays.mbl_array_t.first_epilog_ea: - mbl_array_t_first_epilog_ea_get(self) -> ea_t - -ida_hexrays.mbl_array_t.for_all_insns(): - - for_all_insns(self, mv) -> int - - -ida_hexrays.mbl_array_t.for_all_ops(): - - for_all_ops(self, mv) -> int - - -ida_hexrays.mbl_array_t.for_all_topinsns(): - - for_all_topinsns(self, mv) -> int - - -ida_hexrays.mbl_array_t.fpd: - mbl_array_t_fpd_get(self) -> sval_t - -ida_hexrays.mbl_array_t.frregs: - mbl_array_t_frregs_get(self) -> sval_t - -ida_hexrays.mbl_array_t.frsize: - mbl_array_t_frsize_get(self) -> sval_t - -ida_hexrays.mbl_array_t.fti_flags: - mbl_array_t_fti_flags_get(self) -> int - -ida_hexrays.mbl_array_t.fullsize: - mbl_array_t_fullsize_get(self) -> sval_t - -ida_hexrays.mbl_array_t.generated_asserts(): - - generated_asserts(self) -> bool - - -ida_hexrays.mbl_array_t.get_args_region(): - - get_args_region(self) -> ivl_t - - -ida_hexrays.mbl_array_t.get_curfunc(): - - get_curfunc(self) -> func_t * - - -ida_hexrays.mbl_array_t.get_graph(): - - get_graph(self) -> mbl_graph_t - - -ida_hexrays.mbl_array_t.get_ida_argloc(): - - get_ida_argloc(self, v) -> argloc_t - - -ida_hexrays.mbl_array_t.get_lvars_region(): - - get_lvars_region(self) -> ivl_t - - -ida_hexrays.mbl_array_t.get_mba_flags(): - - get_mba_flags(self) -> int - - -ida_hexrays.mbl_array_t.get_mba_flags2(): - - get_mba_flags2(self) -> int - - -ida_hexrays.mbl_array_t.get_mblock(): - - get_mblock(self, n) -> mblock_t - get_mblock(self, n) -> mblock_t - - -ida_hexrays.mbl_array_t.get_shadow_region(): - - get_shadow_region(self) -> ivl_t - - -ida_hexrays.mbl_array_t.get_stack_region(): - - get_stack_region(self) -> ivl_t - - -ida_hexrays.mbl_array_t.get_std_region(): - - get_std_region(self, idx) -> ivl_t - - -ida_hexrays.mbl_array_t.gotoff_stkvars: - mbl_array_t_gotoff_stkvars_get(self) -> ivlset_t - -ida_hexrays.mbl_array_t.graph_insns(): - - graph_insns(self) -> bool - - -ida_hexrays.mbl_array_t.has_bad_sp(): - - has_bad_sp(self) -> bool - - -ida_hexrays.mbl_array_t.has_over_chains(): - - has_over_chains(self) -> bool - - -ida_hexrays.mbl_array_t.has_overvars(): - - has_overvars(self) -> bool - - -ida_hexrays.mbl_array_t.has_passregs(): - - has_passregs(self) -> bool - - -ida_hexrays.mbl_array_t.idaloc2vd(): - - idaloc2vd(self, loc, width) -> vdloc_t - - -ida_hexrays.mbl_array_t.idb_node: - mbl_array_t_idb_node_get(self) -> netnode - -ida_hexrays.mbl_array_t.idb_spoiled: - mbl_array_t_idb_spoiled_get(self) -> reginfovec_t - -ida_hexrays.mbl_array_t.idb_type: - mbl_array_t_idb_type_get(self) -> tinfo_t - -ida_hexrays.mbl_array_t.inargoff: - mbl_array_t_inargoff_get(self) -> sval_t - -ida_hexrays.mbl_array_t.insert_block(): - - insert_block(self, bblk) -> mblock_t - - -ida_hexrays.mbl_array_t.is_cdtr(): - - is_cdtr(self) -> bool - - -ida_hexrays.mbl_array_t.is_ctr(): - - is_ctr(self) -> bool - - -ida_hexrays.mbl_array_t.is_dtr(): - - is_dtr(self) -> bool - - -ida_hexrays.mbl_array_t.is_pattern(): - - is_pattern(self) -> bool - - -ida_hexrays.mbl_array_t.is_snippet(): - - is_snippet(self) -> bool - - -ida_hexrays.mbl_array_t.is_stkarg(): - - is_stkarg(self, v) -> bool - - -ida_hexrays.mbl_array_t.is_thunk(): - - is_thunk(self) -> bool - - -ida_hexrays.mbl_array_t.label: - mbl_array_t_label_get(self) -> qstring * - -ida_hexrays.mbl_array_t.last_prolog_ea: - mbl_array_t_last_prolog_ea_get(self) -> ea_t - -ida_hexrays.mbl_array_t.loaded_gdl(): - - loaded_gdl(self) -> bool - - -ida_hexrays.mbl_array_t.lvar_names_ok(): - - lvar_names_ok(self) -> bool - - -ida_hexrays.mbl_array_t.lvars_allocated(): - - lvars_allocated(self) -> bool - - -ida_hexrays.mbl_array_t.lvars_renamed(): - - lvars_renamed(self) -> bool - - -ida_hexrays.mbl_array_t.mark_chains_dirty(): - - mark_chains_dirty(self) - - -ida_hexrays.mbl_array_t.maturity: - mbl_array_t_maturity_get(self) -> mba_maturity_t - -ida_hexrays.mbl_array_t.may_refine_rettype(): - - may_refine_rettype(self) -> bool - - -ida_hexrays.mbl_array_t.mbr: - mbl_array_t_mbr_get(self) -> mba_ranges_t - -ida_hexrays.mbl_array_t.minargref: - mbl_array_t_minargref_get(self) -> sval_t - -ida_hexrays.mbl_array_t.minstkref: - mbl_array_t_minstkref_get(self) -> sval_t - -ida_hexrays.mbl_array_t.minstkref_ea: - mbl_array_t_minstkref_ea_get(self) -> ea_t - -ida_hexrays.mbl_array_t.natural: - mbl_array_t_natural_get(self) -> mblock_t ** - -ida_hexrays.mbl_array_t.nodel_memory: - mbl_array_t_nodel_memory_get(self) -> mlist_t - -ida_hexrays.mbl_array_t.notes: - mbl_array_t_notes_get(self) -> hexwarns_t - -ida_hexrays.mbl_array_t.npurged: - mbl_array_t_npurged_get(self) -> int - -ida_hexrays.mbl_array_t.occurred_warns: - mbl_array_t_occurred_warns_get(self) -> uchar [32] - -ida_hexrays.mbl_array_t.optimize_global(): - - optimize_global(self) -> merror_t - - -ida_hexrays.mbl_array_t.optimize_local(): - - optimize_local(self, locopt_bits) -> int - - -ida_hexrays.mbl_array_t.optimized(): - - optimized(self) -> bool - - -ida_hexrays.mbl_array_t.pfn_flags: - mbl_array_t_pfn_flags_get(self) -> int - -ida_hexrays.mbl_array_t.precise_defeas(): - - precise_defeas(self) -> bool - - -ida_hexrays.mbl_array_t.propagated_asserts(): - - propagated_asserts(self) -> bool - - -ida_hexrays.mbl_array_t.qty: - mbl_array_t_qty_get(self) -> int - -ida_hexrays.mbl_array_t.really_alloc(): - - really_alloc(self) -> bool - - -ida_hexrays.mbl_array_t.regargs_is_not_aligned(): - - regargs_is_not_aligned(self) -> bool - - -ida_hexrays.mbl_array_t.remove_block(): - - remove_block(self, blk) -> bool - - -ida_hexrays.mbl_array_t.remove_empty_blocks(): - - remove_empty_blocks(self) -> bool - - -ida_hexrays.mbl_array_t.reqmat: - mbl_array_t_reqmat_get(self) -> mba_maturity_t - -ida_hexrays.mbl_array_t.restricted_memory: - mbl_array_t_restricted_memory_get(self) -> ivlset_t - -ida_hexrays.mbl_array_t.retsize: - mbl_array_t_retsize_get(self) -> int - -ida_hexrays.mbl_array_t.returns_fpval(): - - returns_fpval(self) -> bool - - -ida_hexrays.mbl_array_t.retvaridx: - mbl_array_t_retvaridx_get(self) -> int - -ida_hexrays.mbl_array_t.rtype_refined(): - - rtype_refined(self) -> bool - - -ida_hexrays.mbl_array_t.saverest_done(): - - saverest_done(self) -> bool - - -ida_hexrays.mbl_array_t.serialize(): - - serialize(self) - - -ida_hexrays.mbl_array_t.set_mba_flags(): - - set_mba_flags(self, f) - - -ida_hexrays.mbl_array_t.set_mba_flags2(): - - set_mba_flags2(self, f) - - -ida_hexrays.mbl_array_t.shadow_args: - mbl_array_t_shadow_args_get(self) -> int - -ida_hexrays.mbl_array_t.short_display(): - - short_display(self) -> bool - - -ida_hexrays.mbl_array_t.should_beautify(): - - should_beautify(self) -> bool - - -ida_hexrays.mbl_array_t.show_reduction(): - - show_reduction(self) -> bool - - -ida_hexrays.mbl_array_t.spd_adjust: - mbl_array_t_spd_adjust_get(self) -> sval_t - -ida_hexrays.mbl_array_t.spoiled_list: - mbl_array_t_spoiled_list_get(self) -> mlist_t - -ida_hexrays.mbl_array_t.stacksize: - mbl_array_t_stacksize_get(self) -> sval_t - -ida_hexrays.mbl_array_t.std_ivls: - mbl_array_t_std_ivls_get(self) -> ivl_with_name_t - -ida_hexrays.mbl_array_t.stkoff_ida2vd(): - - stkoff_ida2vd(self, off) -> sval_t - - -ida_hexrays.mbl_array_t.stkoff_vd2ida(): - - stkoff_vd2ida(self, off) -> sval_t - - -ida_hexrays.mbl_array_t.term(): - - term(self) - - -ida_hexrays.mbl_array_t.tmpstk_size: - mbl_array_t_tmpstk_size_get(self) -> sval_t - -ida_hexrays.mbl_array_t.use_frame(): - - use_frame(self) -> bool - - -ida_hexrays.mbl_array_t.use_wingraph32(): - - use_wingraph32(self) -> bool - - -ida_hexrays.mbl_array_t.valranges_done(): - - valranges_done(self) -> bool - - -ida_hexrays.mbl_array_t.vars: - mbl_array_t_vars_get(self) -> lvars_t - -ida_hexrays.mbl_array_t.vd2idaloc(): - - vd2idaloc(self, loc, width, spd) -> argloc_t - vd2idaloc(self, loc, width) -> argloc_t - - -ida_hexrays.mbl_array_t.verify(): - - verify(self, always) - - -ida_hexrays.mbl_array_t.write_to_const_detected(): - - write_to_const_detected(self) -> bool - - -ida_hexrays.mbl_array_t_deserialize(): - - mbl_array_t_deserialize(bytes, nbytes) -> mbl_array_t - - -class ida_hexrays.mbl_graph_t(): - - Proxy of C++ mbl_graph_t class - - -ida_hexrays.mbl_graph_t.colored_gdl_edges: - simple_graph_t_colored_gdl_edges_get(self) -> bool - -ida_hexrays.mbl_graph_t.get_chain_stamp(): - - get_chain_stamp(self) -> int - - -ida_hexrays.mbl_graph_t.get_du(): - - get_du(self, gctype) -> graph_chains_t - - -ida_hexrays.mbl_graph_t.get_mblock(): - - get_mblock(self, n) -> mblock_t - - -ida_hexrays.mbl_graph_t.get_ud(): - - get_ud(self, gctype) -> graph_chains_t - - -ida_hexrays.mbl_graph_t.is_du_chain_dirty(): - - is_du_chain_dirty(self, gctype) -> bool - - -ida_hexrays.mbl_graph_t.is_redefined_globally(): - - is_redefined_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool - - -ida_hexrays.mbl_graph_t.is_ud_chain_dirty(): - - is_ud_chain_dirty(self, gctype) -> bool - - -ida_hexrays.mbl_graph_t.is_used_globally(): - - is_used_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool - - -ida_hexrays.mbl_graph_t.title: - simple_graph_t_title_get(self) -> qstring * - -class ida_hexrays.mblock_t(): - - Proxy of C++ mblock_t class - - -ida_hexrays.mblock_t._print(): - - _print(self, vp) - - -ida_hexrays.mblock_t.append_def_list(): - - append_def_list(self, list, op, maymust) - - -ida_hexrays.mblock_t.append_use_list(): - - append_use_list(self, list, op, maymust, mask=bitrange_t(0, USHRT_MAX)) - - -ida_hexrays.mblock_t.build_def_list(): - - build_def_list(self, ins, maymust) -> mlist_t - - -ida_hexrays.mblock_t.build_lists(): - - build_lists(self, kill_deads) -> int - - -ida_hexrays.mblock_t.build_use_list(): - - build_use_list(self, ins, maymust) -> mlist_t - - -ida_hexrays.mblock_t.dead_at_start: - mblock_t_dead_at_start_get(self) -> mlist_t - -ida_hexrays.mblock_t.dnu: - mblock_t_dnu_get(self) -> mlist_t - -ida_hexrays.mblock_t.dump(): - - dump(self) - - -ida_hexrays.mblock_t.dump_block(): - - dump_block(self, title) - - -ida_hexrays.mblock_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mblock_t.end: - mblock_t_end_get(self) -> ea_t - -ida_hexrays.mblock_t.find_access(): - - find_access(self, op, parent, mend, fdflags) -> minsn_t - - -ida_hexrays.mblock_t.find_def(): - - find_def(self, op, p_i1, i2, fdflags) -> minsn_t - - -ida_hexrays.mblock_t.find_first_use(): - - find_first_use(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t - - -ida_hexrays.mblock_t.find_redefinition(): - - find_redefinition(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t - - -ida_hexrays.mblock_t.find_use(): - - find_use(self, op, p_i1, i2, fdflags) -> minsn_t - - -ida_hexrays.mblock_t.flags: - mblock_t_flags_get(self) -> uint32 - -ida_hexrays.mblock_t.for_all_insns(): - - for_all_insns(self, mv) -> int - - -ida_hexrays.mblock_t.for_all_ops(): - - for_all_ops(self, mv) -> int - - -ida_hexrays.mblock_t.for_all_uses(): - - for_all_uses(self, list, i1, i2, mmv) -> int - - -ida_hexrays.mblock_t.get_reginsn_qty(): - - get_reginsn_qty(self) -> size_t - - -ida_hexrays.mblock_t.get_valranges(): - - get_valranges(self, res, vivl, vrflags) -> bool - get_valranges(self, res, vivl, m, vrflags) -> bool - - -ida_hexrays.mblock_t.head: - mblock_t_head_get(self) -> minsn_t - -ida_hexrays.mblock_t.insert_into_block(): - - insert_into_block(self, nm, om) -> minsn_t - - -ida_hexrays.mblock_t.is_branch(): - - is_branch(self) -> bool - - -ida_hexrays.mblock_t.is_call_block(): - - is_call_block(self) -> bool - - -ida_hexrays.mblock_t.is_nway(): - - is_nway(self) -> bool - - -ida_hexrays.mblock_t.is_redefined(): - - is_redefined(self, list, i1, i2, maymust=MAY_ACCESS) -> bool - - -ida_hexrays.mblock_t.is_rhs_redefined(): - - is_rhs_redefined(self, ins, i1, i2) -> bool - - -ida_hexrays.mblock_t.is_simple_goto_block(): - - is_simple_goto_block(self) -> bool - - -ida_hexrays.mblock_t.is_simple_jcnd_block(): - - is_simple_jcnd_block(self) -> bool - - -ida_hexrays.mblock_t.is_unknown_call(): - - is_unknown_call(self) -> bool - - -ida_hexrays.mblock_t.is_used(): - - is_used(self, list, i1, i2, maymust=MAY_ACCESS) -> bool - - -ida_hexrays.mblock_t.lists_dirty(): - - lists_dirty(self) -> bool - - -ida_hexrays.mblock_t.lists_ready(): - - lists_ready(self) -> bool - - -ida_hexrays.mblock_t.make_lists_ready(): - - make_lists_ready(self) -> int - - -ida_hexrays.mblock_t.make_nop(): - - make_nop(self, m) - - -ida_hexrays.mblock_t.mark_lists_dirty(): - - mark_lists_dirty(self) - - -ida_hexrays.mblock_t.maxbsp: - mblock_t_maxbsp_get(self) -> sval_t - -ida_hexrays.mblock_t.maybdef: - mblock_t_maybdef_get(self) -> mlist_t - -ida_hexrays.mblock_t.maybuse: - mblock_t_maybuse_get(self) -> mlist_t - -ida_hexrays.mblock_t.mba: - mblock_t_mba_get(self) -> mbl_array_t - -ida_hexrays.mblock_t.minbargref: - mblock_t_minbargref_get(self) -> sval_t - -ida_hexrays.mblock_t.minbstkref: - mblock_t_minbstkref_get(self) -> sval_t - -ida_hexrays.mblock_t.mustbdef: - mblock_t_mustbdef_get(self) -> mlist_t - -ida_hexrays.mblock_t.mustbuse: - mblock_t_mustbuse_get(self) -> mlist_t - -ida_hexrays.mblock_t.needs_propagation(): - - needs_propagation(self) -> bool - - -ida_hexrays.mblock_t.nextb: - mblock_t_nextb_get(self) -> mblock_t - -ida_hexrays.mblock_t.npred(): - - npred(self) -> int - - -ida_hexrays.mblock_t.nsucc(): - - nsucc(self) -> int - - -ida_hexrays.mblock_t.optimize_block(): - - optimize_block(self) -> int - - -ida_hexrays.mblock_t.optimize_insn(): - - optimize_insn(self, m, optflags=0x0002|0x0004) -> int - - -ida_hexrays.mblock_t.optimize_useless_jump(): - - optimize_useless_jump(self) -> int - - -ida_hexrays.mblock_t.pred(): - - pred(self, n) -> int - - -ida_hexrays.mblock_t.preds(): - - Iterates the list of predecessor blocks - - -ida_hexrays.mblock_t.predset: - mblock_t_predset_get(self) -> intvec_t - -ida_hexrays.mblock_t.prevb: - mblock_t_prevb_get(self) -> mblock_t - -ida_hexrays.mblock_t.remove_from_block(): - - remove_from_block(self, m) -> minsn_t - - -ida_hexrays.mblock_t.request_demote64(): - - request_demote64(self) - - -ida_hexrays.mblock_t.request_propagation(): - - request_propagation(self) - - -ida_hexrays.mblock_t.serial: - mblock_t_serial_get(self) -> int - -ida_hexrays.mblock_t.start: - mblock_t_start_get(self) -> ea_t - -ida_hexrays.mblock_t.succ(): - - succ(self, n) -> int - - -ida_hexrays.mblock_t.succs(): - - Iterates the list of successor blocks - - -ida_hexrays.mblock_t.succset: - mblock_t_succset_get(self) -> intvec_t - -ida_hexrays.mblock_t.tail: - mblock_t_tail_get(self) -> minsn_t - -ida_hexrays.mblock_t.type: - mblock_t_type_get(self) -> mblock_type_t - -class ida_hexrays.mcallarg_t(): - - Proxy of C++ mcallarg_t class - - -ida_hexrays.mcallarg_t._print(): - - _print(self, shins_flags=0x04|0x02) - - -ida_hexrays.mcallarg_t.apply_ld_mcode(): - - apply_ld_mcode(self, mcode, ea, newsize) - - -ida_hexrays.mcallarg_t.apply_xds(): - - apply_xds(self, ea, newsize) - - -ida_hexrays.mcallarg_t.apply_xdu(): - - apply_xdu(self, ea, newsize) - - -ida_hexrays.mcallarg_t.argloc: - mcallarg_t_argloc_get(self) -> argloc_t - -ida_hexrays.mcallarg_t.assign(): - - assign(self, rop) -> mop_t - - -ida_hexrays.mcallarg_t.change_size(): - - change_size(self, nsize, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mcallarg_t.copy_mop(): - - copy_mop(self, op) - - -ida_hexrays.mcallarg_t.create_from_insn(): - - create_from_insn(self, m) - - -ida_hexrays.mcallarg_t.create_from_ivlset(): - - create_from_ivlset(self, mba, ivs, fullsize) -> bool - - -ida_hexrays.mcallarg_t.create_from_mlist(): - - create_from_mlist(self, mba, lst, fullsize) -> bool - - -ida_hexrays.mcallarg_t.create_from_scattered_vdloc(): - - create_from_scattered_vdloc(self, mba, name, type, loc) - - -ida_hexrays.mcallarg_t.create_from_vdloc(): - - create_from_vdloc(self, mba, loc, _size) - - -ida_hexrays.mcallarg_t.double_size(): - - double_size(self, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mcallarg_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mcallarg_t.ea: - mcallarg_t_ea_get(self) -> ea_t - -ida_hexrays.mcallarg_t.equal_mops(): - - equal_mops(self, rop, eqflags) -> bool - - -ida_hexrays.mcallarg_t.erase(): - - erase(self) - - -ida_hexrays.mcallarg_t.erase_but_keep_size(): - - erase_but_keep_size(self) - - -ida_hexrays.mcallarg_t.for_all_ops(): - - for_all_ops(self, mv, type=None, is_target=False) -> int - - -ida_hexrays.mcallarg_t.for_all_scattered_submops(): - - for_all_scattered_submops(self, sv) -> int - - -ida_hexrays.mcallarg_t.get_insn(): - - get_insn(self, code) -> minsn_t - get_insn(self, code) -> minsn_t - - -ida_hexrays.mcallarg_t.get_stkoff(): - - get_stkoff(self, p_off) -> bool - - -ida_hexrays.mcallarg_t.get_stkvar(): - - get_stkvar(self, p_off) -> member_t * - - -ida_hexrays.mcallarg_t.has_side_effects(): - - has_side_effects(self, include_ldx_and_divs=False) -> bool - - -ida_hexrays.mcallarg_t.is01(): - - is01(self) -> bool - - -ida_hexrays.mcallarg_t.is_bit_reg(): - - is_bit_reg(self, reg) -> bool - is_bit_reg(self) -> bool - - -ida_hexrays.mcallarg_t.is_cc(): - - is_cc(self) -> bool - - -ida_hexrays.mcallarg_t.is_ccflags(): - - is_ccflags(self) -> bool - - -ida_hexrays.mcallarg_t.is_constant(): - - is_constant(self, is_signed=True) -> bool - - -ida_hexrays.mcallarg_t.is_equal_to(): - - is_equal_to(self, n, is_signed=True) -> bool - - -ida_hexrays.mcallarg_t.is_extended_from(): - - is_extended_from(self, nbytes, is_signed) -> bool - - -ida_hexrays.mcallarg_t.is_glbaddr(): - - is_glbaddr(self) -> bool - is_glbaddr(self, ea) -> bool - - -ida_hexrays.mcallarg_t.is_impptr_done(): - - is_impptr_done(self) -> bool - - -ida_hexrays.mcallarg_t.is_insn(): - - is_insn(self) -> bool - is_insn(self, code) -> bool - - -ida_hexrays.mcallarg_t.is_kreg(): - - is_kreg(self) -> bool - - -ida_hexrays.mcallarg_t.is_mob(): - - is_mob(self, serial) -> bool - - -ida_hexrays.mcallarg_t.is_negative_constant(): - - is_negative_constant(self) -> bool - - -ida_hexrays.mcallarg_t.is_one(): - - is_one(self) -> bool - - -ida_hexrays.mcallarg_t.is_positive_constant(): - - is_positive_constant(self) -> bool - - -ida_hexrays.mcallarg_t.is_reg(): - - is_reg(self) -> bool - is_reg(self, _r) -> bool - is_reg(self, _r, _size) -> bool - - -ida_hexrays.mcallarg_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.mcallarg_t.is_sign_extended_from(): - - is_sign_extended_from(self, nbytes) -> bool - - -ida_hexrays.mcallarg_t.is_stkaddr(): - - is_stkaddr(self) -> bool - - -ida_hexrays.mcallarg_t.is_udt(): - - is_udt(self) -> bool - - -ida_hexrays.mcallarg_t.is_undef_val(): - - is_undef_val(self) -> bool - - -ida_hexrays.mcallarg_t.is_zero(): - - is_zero(self) -> bool - - -ida_hexrays.mcallarg_t.is_zero_extended_from(): - - is_zero_extended_from(self, nbytes) -> bool - - -ida_hexrays.mcallarg_t.lexcompare(): - - lexcompare(self, rop) -> int - - -ida_hexrays.mcallarg_t.make_blkref(): - - make_blkref(self, blknum) - - -ida_hexrays.mcallarg_t.make_first_half(): - - make_first_half(self, width) -> bool - - -ida_hexrays.mcallarg_t.make_fpnum(): - - make_fpnum(self, bytes, _size) -> bool - - -ida_hexrays.mcallarg_t.make_gvar(): - - make_gvar(self, ea) - - -ida_hexrays.mcallarg_t.make_helper(): - - make_helper(self, name) - - -ida_hexrays.mcallarg_t.make_high_half(): - - make_high_half(self, width) -> bool - - -ida_hexrays.mcallarg_t.make_insn(): - - make_insn(self, ins) - - -ida_hexrays.mcallarg_t.make_int(): - - make_int(self, val, val_ea, opno=0) - - -ida_hexrays.mcallarg_t.make_low_half(): - - make_low_half(self, width) -> bool - - -ida_hexrays.mcallarg_t.make_number(): - - make_number(self, _value, _size, _ea=BADADDR, opnum=0) - - -ida_hexrays.mcallarg_t.make_reg(): - - make_reg(self, reg) - make_reg(self, reg, _size) - - -ida_hexrays.mcallarg_t.make_reg_pair(): - - make_reg_pair(self, loreg, hireg, halfsize) - - -ida_hexrays.mcallarg_t.make_second_half(): - - make_second_half(self, width) -> bool - - -ida_hexrays.mcallarg_t.make_uint(): - - make_uint(self, val, val_ea, opno=0) - - -ida_hexrays.mcallarg_t.may_use_aliased_memory(): - - may_use_aliased_memory(self) -> bool - - -ida_hexrays.mcallarg_t.name: - mcallarg_t_name_get(self) -> qstring * - -ida_hexrays.mcallarg_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.mcallarg_t.oprops: - mop_t_oprops_get(self) -> uint8 - -ida_hexrays.mcallarg_t.preserve_side_effects(): - - preserve_side_effects(self, blk, top, moved_calls=None) -> bool - - -ida_hexrays.mcallarg_t.probably_floating(): - - probably_floating(self) -> bool - - -ida_hexrays.mcallarg_t.set_impptr_done(): - - set_impptr_done(self) - - -ida_hexrays.mcallarg_t.set_regarg(): - - set_regarg(self, mr, sz, tif) - set_regarg(self, mr, tif) - set_regarg(self, mr, dt, sign=type_unsigned) - - -ida_hexrays.mcallarg_t.set_udt(): - - set_udt(self) - - -ida_hexrays.mcallarg_t.set_undef_val(): - - set_undef_val(self) - - -ida_hexrays.mcallarg_t.shift_mop(): - - shift_mop(self, offset) -> bool - - -ida_hexrays.mcallarg_t.signed_value(): - - signed_value(self) -> int64 - - -ida_hexrays.mcallarg_t.size: - mop_t_size_get(self) -> int - -ida_hexrays.mcallarg_t.swap(): - - swap(self, rop) - - -ida_hexrays.mcallarg_t.t: - - _get_t(self) -> mopt_t - - -ida_hexrays.mcallarg_t.type: - mcallarg_t_type_get(self) -> tinfo_t - -ida_hexrays.mcallarg_t.unsigned_value(): - - unsigned_value(self) -> uint64 - - -ida_hexrays.mcallarg_t.valnum: - mop_t_valnum_get(self) -> uint16 - -ida_hexrays.mcallarg_t.value(): - - value(self, is_signed) -> uint64 - - -ida_hexrays.mcallarg_t.zero(): - - zero(self) - - -class ida_hexrays.mcallargs_t(): - - Proxy of C++ qvector<(mcallarg_t)> class - - -ida_hexrays.mcallargs_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.mcallargs_t.at(): - - at(self, _idx) -> mcallarg_t - - -ida_hexrays.mcallargs_t.begin(): - - begin(self) -> mcallarg_t - begin(self) -> mcallarg_t - - -ida_hexrays.mcallargs_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.mcallargs_t.clear(): - - clear(self) - - -ida_hexrays.mcallargs_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mcallargs_t.end(): - - end(self) -> mcallarg_t - end(self) -> mcallarg_t - - -ida_hexrays.mcallargs_t.erase(): - - erase(self, it) -> mcallarg_t - erase(self, first, last) -> mcallarg_t - - -ida_hexrays.mcallargs_t.extract(): - - extract(self) -> mcallarg_t - - -ida_hexrays.mcallargs_t.find(): - - find(self, x) -> mcallarg_t - find(self, x) -> mcallarg_t - - -ida_hexrays.mcallargs_t.grow(): - - grow(self, x=mcallarg_t()) - - -ida_hexrays.mcallargs_t.has(): - - has(self, x) -> bool - - -ida_hexrays.mcallargs_t.inject(): - - inject(self, s, len) - - -ida_hexrays.mcallargs_t.insert(): - - insert(self, it, x) -> mcallarg_t - - -ida_hexrays.mcallargs_t.pop_back(): - - pop_back(self) - - -ida_hexrays.mcallargs_t.push_back(): - - push_back(self, x) - push_back(self) -> mcallarg_t - - -ida_hexrays.mcallargs_t.qclear(): - - qclear(self) - - -ida_hexrays.mcallargs_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.mcallargs_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.mcallargs_t.size(): - - size(self) -> size_t - - -ida_hexrays.mcallargs_t.swap(): - - swap(self, r) - - -ida_hexrays.mcallargs_t.truncate(): - - truncate(self) - - -class ida_hexrays.mcallinfo_t(): - - Proxy of C++ mcallinfo_t class - - -ida_hexrays.mcallinfo_t._print(): - - _print(self, size=-1, shins_flags=0x04|0x02) - - -ida_hexrays.mcallinfo_t.args: - mcallinfo_t_args_get(self) -> mcallargs_t - -ida_hexrays.mcallinfo_t.call_spd: - mcallinfo_t_call_spd_get(self) -> int - -ida_hexrays.mcallinfo_t.callee: - mcallinfo_t_callee_get(self) -> ea_t - -ida_hexrays.mcallinfo_t.cc: - mcallinfo_t_cc_get(self) -> cm_t - -ida_hexrays.mcallinfo_t.dead_regs: - mcallinfo_t_dead_regs_get(self) -> mlist_t - -ida_hexrays.mcallinfo_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mcallinfo_t.flags: - mcallinfo_t_flags_get(self) -> int - -ida_hexrays.mcallinfo_t.get_type(): - - get_type(self) -> tinfo_t - - -ida_hexrays.mcallinfo_t.is_vararg(): - - is_vararg(self) -> bool - - -ida_hexrays.mcallinfo_t.lexcompare(): - - lexcompare(self, f) -> int - - -ida_hexrays.mcallinfo_t.pass_regs: - mcallinfo_t_pass_regs_get(self) -> mlist_t - -ida_hexrays.mcallinfo_t.retregs: - mcallinfo_t_retregs_get(self) -> mopvec_t - -ida_hexrays.mcallinfo_t.return_argloc: - mcallinfo_t_return_argloc_get(self) -> argloc_t - -ida_hexrays.mcallinfo_t.return_regs: - mcallinfo_t_return_regs_get(self) -> mlist_t - -ida_hexrays.mcallinfo_t.return_type: - mcallinfo_t_return_type_get(self) -> tinfo_t - -ida_hexrays.mcallinfo_t.role: - mcallinfo_t_role_get(self) -> funcrole_t - -ida_hexrays.mcallinfo_t.set_type(): - - set_type(self, type) -> bool - - -ida_hexrays.mcallinfo_t.solid_args: - mcallinfo_t_solid_args_get(self) -> int - -ida_hexrays.mcallinfo_t.spoiled: - mcallinfo_t_spoiled_get(self) -> mlist_t - -ida_hexrays.mcallinfo_t.stkargs_top: - mcallinfo_t_stkargs_top_get(self) -> int - -ida_hexrays.mcallinfo_t.visible_memory: - mcallinfo_t_visible_memory_get(self) -> ivlset_t - -class ida_hexrays.mcases_t(): - - Proxy of C++ mcases_t class - - -ida_hexrays.mcases_t._print(): - - _print(self) - - -ida_hexrays.mcases_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.mcases_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mcases_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mcases_t.resize(): - - resize(self, s) - - -ida_hexrays.mcases_t.size(): - - size(self) -> size_t - - -ida_hexrays.mcases_t.swap(): - - swap(self, r) - - -ida_hexrays.mcases_t.targets: - mcases_t_targets_get(self) -> intvec_t - -ida_hexrays.mcases_t.values: - mcases_t_values_get(self) -> casevec_t - -ida_hexrays.mcode_modifies_d(): - - mcode_modifies_d(mcode) -> bool - - -class ida_hexrays.microcode_filter_t(): - - Proxy of C++ microcode_filter_t class - - -ida_hexrays.microcode_filter_t.apply(): - - apply(self, cdg) -> merror_t - - -ida_hexrays.microcode_filter_t.match(): - - match(self, cdg) -> bool - - -class ida_hexrays.minsn_t(): - - Proxy of C++ minsn_t class - - -ida_hexrays.minsn_t._print(): - - _print(self, shins_flags=0x04|0x02) - - -ida_hexrays.minsn_t.clr_assert(): - - clr_assert(self) - - -ida_hexrays.minsn_t.clr_combinable(): - - clr_combinable(self) - - -ida_hexrays.minsn_t.clr_combined(): - - clr_combined(self) - - -ida_hexrays.minsn_t.clr_fpinsn(): - - clr_fpinsn(self) - - -ida_hexrays.minsn_t.clr_ignlowsrc(): - - clr_ignlowsrc(self) - - -ida_hexrays.minsn_t.clr_multimov(): - - clr_multimov(self) - - -ida_hexrays.minsn_t.clr_noret_icall(): - - clr_noret_icall(self) - - -ida_hexrays.minsn_t.clr_propagatable(): - - clr_propagatable(self) - - -ida_hexrays.minsn_t.clr_tailcall(): - - clr_tailcall(self) - - -ida_hexrays.minsn_t.contains_call(): - - contains_call(self, with_helpers=False) -> bool - - -ida_hexrays.minsn_t.contains_opcode(): - - contains_opcode(self, mcode) -> bool - - -ida_hexrays.minsn_t.d: - minsn_t_d_get(self) -> mop_t - -ida_hexrays.minsn_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.minsn_t.ea: - minsn_t_ea_get(self) -> ea_t - -ida_hexrays.minsn_t.equal_insns(): - - equal_insns(self, m, eqflags) -> bool - - -ida_hexrays.minsn_t.find_call(): - - find_call(self, with_helpers=False) -> minsn_t - - -ida_hexrays.minsn_t.find_ins_op(): - - find_ins_op(self, other, op=m_nop) -> minsn_t - - -ida_hexrays.minsn_t.find_num_op(): - - find_num_op(self, other) -> mop_t - - -ida_hexrays.minsn_t.find_opcode(): - - find_opcode(self, mcode) -> minsn_t - find_opcode(self, mcode) -> minsn_t - - -ida_hexrays.minsn_t.for_all_insns(): - - for_all_insns(self, mv) -> int - - -ida_hexrays.minsn_t.for_all_ops(): - - for_all_ops(self, mv) -> int - - -ida_hexrays.minsn_t.get_role(): - - get_role(self) -> funcrole_t - - -ida_hexrays.minsn_t.get_split_size(): - - get_split_size(self) -> int - - -ida_hexrays.minsn_t.has_side_effects(): - - has_side_effects(self, include_ldx_and_divs=False) -> bool - - -ida_hexrays.minsn_t.iprops: - minsn_t_iprops_get(self) -> int - -ida_hexrays.minsn_t.is_after(): - - is_after(self, m) -> bool - - -ida_hexrays.minsn_t.is_alloca(): - - is_alloca(self) -> bool - - -ida_hexrays.minsn_t.is_assert(): - - is_assert(self) -> bool - - -ida_hexrays.minsn_t.is_between(): - - is_between(self, m1, m2) -> bool - - -ida_hexrays.minsn_t.is_bswap(): - - is_bswap(self) -> bool - - -ida_hexrays.minsn_t.is_cleaning_pop(): - - is_cleaning_pop(self) -> bool - - -ida_hexrays.minsn_t.is_combinable(): - - is_combinable(self) -> bool - - -ida_hexrays.minsn_t.is_combined(): - - is_combined(self) -> bool - - -ida_hexrays.minsn_t.is_extstx(): - - is_extstx(self) -> bool - - -ida_hexrays.minsn_t.is_farcall(): - - is_farcall(self) -> bool - - -ida_hexrays.minsn_t.is_fpinsn(): - - is_fpinsn(self) -> bool - - -ida_hexrays.minsn_t.is_helper(): - - is_helper(self, name) -> bool - - -ida_hexrays.minsn_t.is_ignlowsrc(): - - is_ignlowsrc(self) -> bool - - -ida_hexrays.minsn_t.is_inverted_jx(): - - is_inverted_jx(self) -> bool - - -ida_hexrays.minsn_t.is_like_move(): - - is_like_move(self) -> bool - - -ida_hexrays.minsn_t.is_memcpy(): - - is_memcpy(self) -> bool - - -ida_hexrays.minsn_t.is_memset(): - - is_memset(self) -> bool - - -ida_hexrays.minsn_t.is_mov(): - - is_mov(self) -> bool - - -ida_hexrays.minsn_t.is_multimov(): - - is_multimov(self) -> bool - - -ida_hexrays.minsn_t.is_noret_call(): - - is_noret_call(self, ignore_noret_icall=False) -> bool - - -ida_hexrays.minsn_t.is_optional(): - - is_optional(self) -> bool - - -ida_hexrays.minsn_t.is_persistent(): - - is_persistent(self) -> bool - - -ida_hexrays.minsn_t.is_propagatable(): - - is_propagatable(self) -> bool - - -ida_hexrays.minsn_t.is_readflags(): - - is_readflags(self) -> bool - - -ida_hexrays.minsn_t.is_tailcall(): - - is_tailcall(self) -> bool - - -ida_hexrays.minsn_t.is_unknown_call(): - - is_unknown_call(self) -> bool - - -ida_hexrays.minsn_t.is_wild_match(): - - is_wild_match(self) -> bool - - -ida_hexrays.minsn_t.l: - minsn_t_l_get(self) -> mop_t - -ida_hexrays.minsn_t.lexcompare(): - - lexcompare(self, ri) -> int - - -ida_hexrays.minsn_t.may_use_aliased_memory(): - - may_use_aliased_memory(self) -> bool - - -ida_hexrays.minsn_t.modifes_d(): - - modifes_d(self) -> bool - - -ida_hexrays.minsn_t.modifies_pair_mop(): - - modifies_pair_mop(self) -> bool - - -ida_hexrays.minsn_t.next: - minsn_t_next_get(self) -> minsn_t - -ida_hexrays.minsn_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.minsn_t.opcode: - minsn_t_opcode_get(self) -> mcode_t - -ida_hexrays.minsn_t.optimize_solo(): - - optimize_solo(self, optflags=0) -> int - - -ida_hexrays.minsn_t.optimize_subtree(): - - optimize_subtree(self, blk, top, parent, converted_call, optflags=0x0002) -> int - - -ida_hexrays.minsn_t.prev: - minsn_t_prev_get(self) -> minsn_t - -ida_hexrays.minsn_t.r: - minsn_t_r_get(self) -> mop_t - -ida_hexrays.minsn_t.set_assert(): - - set_assert(self) - - -ida_hexrays.minsn_t.set_cleaning_pop(): - - set_cleaning_pop(self) - - -ida_hexrays.minsn_t.set_combinable(): - - set_combinable(self) - - -ida_hexrays.minsn_t.set_extstx(): - - set_extstx(self) - - -ida_hexrays.minsn_t.set_farcall(): - - set_farcall(self) - - -ida_hexrays.minsn_t.set_fpinsn(): - - set_fpinsn(self) - - -ida_hexrays.minsn_t.set_ignlowsrc(): - - set_ignlowsrc(self) - - -ida_hexrays.minsn_t.set_inverted_jx(): - - set_inverted_jx(self) - - -ida_hexrays.minsn_t.set_multimov(): - - set_multimov(self) - - -ida_hexrays.minsn_t.set_noret_icall(): - - set_noret_icall(self) - - -ida_hexrays.minsn_t.set_optional(): - - set_optional(self) - - -ida_hexrays.minsn_t.set_persistent(): - - set_persistent(self) - - -ida_hexrays.minsn_t.set_split_size(): - - set_split_size(self, s) - - -ida_hexrays.minsn_t.set_tailcall(): - - set_tailcall(self) - - -ida_hexrays.minsn_t.set_wild_match(): - - set_wild_match(self) - - -ida_hexrays.minsn_t.setaddr(): - - setaddr(self, new_ea) - - -ida_hexrays.minsn_t.swap(): - - swap(self, m) - - -ida_hexrays.minsn_t.was_noret_icall(): - - was_noret_icall(self) -> bool - - -ida_hexrays.minsn_t.was_split(): - - was_split(self) -> bool - - -class ida_hexrays.minsn_visitor_t(): - - Proxy of C++ minsn_visitor_t class - - -ida_hexrays.minsn_visitor_t.blk: - op_parent_info_t_blk_get(self) -> mblock_t - -ida_hexrays.minsn_visitor_t.curins: - op_parent_info_t_curins_get(self) -> minsn_t - -ida_hexrays.minsn_visitor_t.mba: - op_parent_info_t_mba_get(self) -> mbl_array_t - -ida_hexrays.minsn_visitor_t.topins: - op_parent_info_t_topins_get(self) -> minsn_t - -ida_hexrays.minsn_visitor_t.visit_minsn(): - - visit_minsn(self) -> int - - -class ida_hexrays.mlist_mop_visitor_t(): - - Proxy of C++ mlist_mop_visitor_t class - - -ida_hexrays.mlist_mop_visitor_t.changed: - mlist_mop_visitor_t_changed_get(self) -> bool - -ida_hexrays.mlist_mop_visitor_t.curins: - mlist_mop_visitor_t_curins_get(self) -> minsn_t - -ida_hexrays.mlist_mop_visitor_t.list: - mlist_mop_visitor_t_list_get(self) -> mlist_t - -ida_hexrays.mlist_mop_visitor_t.topins: - mlist_mop_visitor_t_topins_get(self) -> minsn_t - -ida_hexrays.mlist_mop_visitor_t.visit_mop(): - - visit_mop(self, op) -> int - - -class ida_hexrays.mlist_t(): - - Proxy of C++ mlist_t class - - -ida_hexrays.mlist_t._print(): - - _print(self) - - -ida_hexrays.mlist_t.add(): - - add(self, r, size) -> bool - add(self, r) -> bool - add(self, ivl) -> bool - add(self, lst) -> bool - - -ida_hexrays.mlist_t.addmem(): - - addmem(self, ea, size) -> bool - - -ida_hexrays.mlist_t.clear(): - - clear(self) - - -ida_hexrays.mlist_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.mlist_t.count(): - - count(self) -> asize_t - - -ida_hexrays.mlist_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mlist_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mlist_t.has(): - - has(self, r) -> bool - - -ida_hexrays.mlist_t.has_all(): - - has_all(self, r, size) -> bool - - -ida_hexrays.mlist_t.has_any(): - - has_any(self, r, size) -> bool - - -ida_hexrays.mlist_t.has_common(): - - has_common(self, lst) -> bool - - -ida_hexrays.mlist_t.has_memory(): - - has_memory(self) -> bool - - -ida_hexrays.mlist_t.includes(): - - includes(self, lst) -> bool - - -ida_hexrays.mlist_t.intersect(): - - intersect(self, lst) -> bool - - -ida_hexrays.mlist_t.is_subset_of(): - - is_subset_of(self, lst) -> bool - - -ida_hexrays.mlist_t.mem: - mlist_t_mem_get(self) -> ivlset_t - -ida_hexrays.mlist_t.reg: - mlist_t_reg_get(self) -> rlist_t - -ida_hexrays.mlist_t.sub(): - - sub(self, r, size) -> bool - sub(self, ivl) -> bool - sub(self, lst) -> bool - - -ida_hexrays.mlist_t.swap(): - - swap(self, r) - - -class ida_hexrays.mnumber_t(): - - Proxy of C++ mnumber_t class - - -ida_hexrays.mnumber_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.mnumber_t.ea: - operand_locator_t_ea_get(self) -> ea_t - -ida_hexrays.mnumber_t.opnum: - operand_locator_t_opnum_get(self) -> int - -ida_hexrays.mnumber_t.org_value: - mnumber_t_org_value_get(self) -> uint64 - -ida_hexrays.mnumber_t.update_value(): - - update_value(self, val64) - - -ida_hexrays.mnumber_t.value: - mnumber_t_value_get(self) -> uint64 - -ida_hexrays.modify_user_lvars(): - - modify_user_lvars(entry_ea, mlv) -> bool - - - Modify saved local variable settings. - - @param entry_ea: function start address (C++: ea_t) - @param mlv: local variable modifier (C++: user_lvar_modifier_t &) - @return: true if modified variables - - -class ida_hexrays.mop_addr_t(): - - Proxy of C++ mop_addr_t class - - -ida_hexrays.mop_addr_t._print(): - - _print(self, shins_flags=0x04|0x02) - - -ida_hexrays.mop_addr_t.apply_ld_mcode(): - - apply_ld_mcode(self, mcode, ea, newsize) - - -ida_hexrays.mop_addr_t.apply_xds(): - - apply_xds(self, ea, newsize) - - -ida_hexrays.mop_addr_t.apply_xdu(): - - apply_xdu(self, ea, newsize) - - -ida_hexrays.mop_addr_t.assign(): - - assign(self, rop) -> mop_t - - -ida_hexrays.mop_addr_t.change_size(): - - change_size(self, nsize, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mop_addr_t.create_from_insn(): - - create_from_insn(self, m) - - -ida_hexrays.mop_addr_t.create_from_ivlset(): - - create_from_ivlset(self, mba, ivs, fullsize) -> bool - - -ida_hexrays.mop_addr_t.create_from_mlist(): - - create_from_mlist(self, mba, lst, fullsize) -> bool - - -ida_hexrays.mop_addr_t.create_from_scattered_vdloc(): - - create_from_scattered_vdloc(self, mba, name, type, loc) - - -ida_hexrays.mop_addr_t.create_from_vdloc(): - - create_from_vdloc(self, mba, loc, _size) - - -ida_hexrays.mop_addr_t.double_size(): - - double_size(self, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mop_addr_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mop_addr_t.equal_mops(): - - equal_mops(self, rop, eqflags) -> bool - - -ida_hexrays.mop_addr_t.erase(): - - erase(self) - - -ida_hexrays.mop_addr_t.erase_but_keep_size(): - - erase_but_keep_size(self) - - -ida_hexrays.mop_addr_t.for_all_ops(): - - for_all_ops(self, mv, type=None, is_target=False) -> int - - -ida_hexrays.mop_addr_t.for_all_scattered_submops(): - - for_all_scattered_submops(self, sv) -> int - - -ida_hexrays.mop_addr_t.get_insn(): - - get_insn(self, code) -> minsn_t - get_insn(self, code) -> minsn_t - - -ida_hexrays.mop_addr_t.get_stkoff(): - - get_stkoff(self, p_off) -> bool - - -ida_hexrays.mop_addr_t.get_stkvar(): - - get_stkvar(self, p_off) -> member_t * - - -ida_hexrays.mop_addr_t.has_side_effects(): - - has_side_effects(self, include_ldx_and_divs=False) -> bool - - -ida_hexrays.mop_addr_t.insize: - mop_addr_t_insize_get(self) -> int - -ida_hexrays.mop_addr_t.is01(): - - is01(self) -> bool - - -ida_hexrays.mop_addr_t.is_bit_reg(): - - is_bit_reg(self, reg) -> bool - is_bit_reg(self) -> bool - - -ida_hexrays.mop_addr_t.is_cc(): - - is_cc(self) -> bool - - -ida_hexrays.mop_addr_t.is_ccflags(): - - is_ccflags(self) -> bool - - -ida_hexrays.mop_addr_t.is_constant(): - - is_constant(self, is_signed=True) -> bool - - -ida_hexrays.mop_addr_t.is_equal_to(): - - is_equal_to(self, n, is_signed=True) -> bool - - -ida_hexrays.mop_addr_t.is_extended_from(): - - is_extended_from(self, nbytes, is_signed) -> bool - - -ida_hexrays.mop_addr_t.is_glbaddr(): - - is_glbaddr(self) -> bool - is_glbaddr(self, ea) -> bool - - -ida_hexrays.mop_addr_t.is_impptr_done(): - - is_impptr_done(self) -> bool - - -ida_hexrays.mop_addr_t.is_insn(): - - is_insn(self) -> bool - is_insn(self, code) -> bool - - -ida_hexrays.mop_addr_t.is_kreg(): - - is_kreg(self) -> bool - - -ida_hexrays.mop_addr_t.is_mob(): - - is_mob(self, serial) -> bool - - -ida_hexrays.mop_addr_t.is_negative_constant(): - - is_negative_constant(self) -> bool - - -ida_hexrays.mop_addr_t.is_one(): - - is_one(self) -> bool - - -ida_hexrays.mop_addr_t.is_positive_constant(): - - is_positive_constant(self) -> bool - - -ida_hexrays.mop_addr_t.is_reg(): - - is_reg(self) -> bool - is_reg(self, _r) -> bool - is_reg(self, _r, _size) -> bool - - -ida_hexrays.mop_addr_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.mop_addr_t.is_sign_extended_from(): - - is_sign_extended_from(self, nbytes) -> bool - - -ida_hexrays.mop_addr_t.is_stkaddr(): - - is_stkaddr(self) -> bool - - -ida_hexrays.mop_addr_t.is_udt(): - - is_udt(self) -> bool - - -ida_hexrays.mop_addr_t.is_undef_val(): - - is_undef_val(self) -> bool - - -ida_hexrays.mop_addr_t.is_zero(): - - is_zero(self) -> bool - - -ida_hexrays.mop_addr_t.is_zero_extended_from(): - - is_zero_extended_from(self, nbytes) -> bool - - -ida_hexrays.mop_addr_t.lexcompare(): - - lexcompare(self, ra) -> int - - -ida_hexrays.mop_addr_t.make_blkref(): - - make_blkref(self, blknum) - - -ida_hexrays.mop_addr_t.make_first_half(): - - make_first_half(self, width) -> bool - - -ida_hexrays.mop_addr_t.make_fpnum(): - - make_fpnum(self, bytes, _size) -> bool - - -ida_hexrays.mop_addr_t.make_gvar(): - - make_gvar(self, ea) - - -ida_hexrays.mop_addr_t.make_helper(): - - make_helper(self, name) - - -ida_hexrays.mop_addr_t.make_high_half(): - - make_high_half(self, width) -> bool - - -ida_hexrays.mop_addr_t.make_insn(): - - make_insn(self, ins) - - -ida_hexrays.mop_addr_t.make_low_half(): - - make_low_half(self, width) -> bool - - -ida_hexrays.mop_addr_t.make_number(): - - make_number(self, _value, _size, _ea=BADADDR, opnum=0) - - -ida_hexrays.mop_addr_t.make_reg(): - - make_reg(self, reg) - make_reg(self, reg, _size) - - -ida_hexrays.mop_addr_t.make_reg_pair(): - - make_reg_pair(self, loreg, hireg, halfsize) - - -ida_hexrays.mop_addr_t.make_second_half(): - - make_second_half(self, width) -> bool - - -ida_hexrays.mop_addr_t.may_use_aliased_memory(): - - may_use_aliased_memory(self) -> bool - - -ida_hexrays.mop_addr_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.mop_addr_t.oprops: - mop_t_oprops_get(self) -> uint8 - -ida_hexrays.mop_addr_t.outsize: - mop_addr_t_outsize_get(self) -> int - -ida_hexrays.mop_addr_t.preserve_side_effects(): - - preserve_side_effects(self, blk, top, moved_calls=None) -> bool - - -ida_hexrays.mop_addr_t.probably_floating(): - - probably_floating(self) -> bool - - -ida_hexrays.mop_addr_t.set_impptr_done(): - - set_impptr_done(self) - - -ida_hexrays.mop_addr_t.set_udt(): - - set_udt(self) - - -ida_hexrays.mop_addr_t.set_undef_val(): - - set_undef_val(self) - - -ida_hexrays.mop_addr_t.shift_mop(): - - shift_mop(self, offset) -> bool - - -ida_hexrays.mop_addr_t.signed_value(): - - signed_value(self) -> int64 - - -ida_hexrays.mop_addr_t.size: - mop_t_size_get(self) -> int - -ida_hexrays.mop_addr_t.swap(): - - swap(self, rop) - - -ida_hexrays.mop_addr_t.t: - - _get_t(self) -> mopt_t - - -ida_hexrays.mop_addr_t.unsigned_value(): - - unsigned_value(self) -> uint64 - - -ida_hexrays.mop_addr_t.valnum: - mop_t_valnum_get(self) -> uint16 - -ida_hexrays.mop_addr_t.value(): - - value(self, is_signed) -> uint64 - - -ida_hexrays.mop_addr_t.zero(): - - zero(self) - - -class ida_hexrays.mop_pair_t(): - - Proxy of C++ mop_pair_t class - - -ida_hexrays.mop_pair_t.hop: - mop_pair_t_hop_get(self) -> mop_t - -ida_hexrays.mop_pair_t.lop: - mop_pair_t_lop_get(self) -> mop_t - -class ida_hexrays.mop_t(): - - Proxy of C++ mop_t class - - -ida_hexrays.mop_t._print(): - - _print(self, shins_flags=0x04|0x02) - - -ida_hexrays.mop_t.apply_ld_mcode(): - - apply_ld_mcode(self, mcode, ea, newsize) - - -ida_hexrays.mop_t.apply_xds(): - - apply_xds(self, ea, newsize) - - -ida_hexrays.mop_t.apply_xdu(): - - apply_xdu(self, ea, newsize) - - -ida_hexrays.mop_t.assign(): - - assign(self, rop) -> mop_t - - -ida_hexrays.mop_t.change_size(): - - change_size(self, nsize, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mop_t.create_from_insn(): - - create_from_insn(self, m) - - -ida_hexrays.mop_t.create_from_ivlset(): - - create_from_ivlset(self, mba, ivs, fullsize) -> bool - - -ida_hexrays.mop_t.create_from_mlist(): - - create_from_mlist(self, mba, lst, fullsize) -> bool - - -ida_hexrays.mop_t.create_from_scattered_vdloc(): - - create_from_scattered_vdloc(self, mba, name, type, loc) - - -ida_hexrays.mop_t.create_from_vdloc(): - - create_from_vdloc(self, mba, loc, _size) - - -ida_hexrays.mop_t.double_size(): - - double_size(self, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mop_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mop_t.equal_mops(): - - equal_mops(self, rop, eqflags) -> bool - - -ida_hexrays.mop_t.erase(): - - erase(self) - - -ida_hexrays.mop_t.erase_but_keep_size(): - - erase_but_keep_size(self) - - -ida_hexrays.mop_t.for_all_ops(): - - for_all_ops(self, mv, type=None, is_target=False) -> int - - -ida_hexrays.mop_t.for_all_scattered_submops(): - - for_all_scattered_submops(self, sv) -> int - - -ida_hexrays.mop_t.get_insn(): - - get_insn(self, code) -> minsn_t - get_insn(self, code) -> minsn_t - - -ida_hexrays.mop_t.get_stkoff(): - - get_stkoff(self, p_off) -> bool - - -ida_hexrays.mop_t.get_stkvar(): - - get_stkvar(self, p_off) -> member_t * - - -ida_hexrays.mop_t.has_side_effects(): - - has_side_effects(self, include_ldx_and_divs=False) -> bool - - -ida_hexrays.mop_t.is01(): - - is01(self) -> bool - - -ida_hexrays.mop_t.is_bit_reg(): - - is_bit_reg(self, reg) -> bool - is_bit_reg(self) -> bool - - -ida_hexrays.mop_t.is_cc(): - - is_cc(self) -> bool - - -ida_hexrays.mop_t.is_ccflags(): - - is_ccflags(self) -> bool - - -ida_hexrays.mop_t.is_constant(): - - is_constant(self, is_signed=True) -> bool - - -ida_hexrays.mop_t.is_equal_to(): - - is_equal_to(self, n, is_signed=True) -> bool - - -ida_hexrays.mop_t.is_extended_from(): - - is_extended_from(self, nbytes, is_signed) -> bool - - -ida_hexrays.mop_t.is_glbaddr(): - - is_glbaddr(self) -> bool - is_glbaddr(self, ea) -> bool - - -ida_hexrays.mop_t.is_impptr_done(): - - is_impptr_done(self) -> bool - - -ida_hexrays.mop_t.is_insn(): - - is_insn(self) -> bool - is_insn(self, code) -> bool - - -ida_hexrays.mop_t.is_kreg(): - - is_kreg(self) -> bool - - -ida_hexrays.mop_t.is_mob(): - - is_mob(self, serial) -> bool - - -ida_hexrays.mop_t.is_negative_constant(): - - is_negative_constant(self) -> bool - - -ida_hexrays.mop_t.is_one(): - - is_one(self) -> bool - - -ida_hexrays.mop_t.is_positive_constant(): - - is_positive_constant(self) -> bool - - -ida_hexrays.mop_t.is_reg(): - - is_reg(self) -> bool - is_reg(self, _r) -> bool - is_reg(self, _r, _size) -> bool - - -ida_hexrays.mop_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.mop_t.is_sign_extended_from(): - - is_sign_extended_from(self, nbytes) -> bool - - -ida_hexrays.mop_t.is_stkaddr(): - - is_stkaddr(self) -> bool - - -ida_hexrays.mop_t.is_udt(): - - is_udt(self) -> bool - - -ida_hexrays.mop_t.is_undef_val(): - - is_undef_val(self) -> bool - - -ida_hexrays.mop_t.is_zero(): - - is_zero(self) -> bool - - -ida_hexrays.mop_t.is_zero_extended_from(): - - is_zero_extended_from(self, nbytes) -> bool - - -ida_hexrays.mop_t.lexcompare(): - - lexcompare(self, rop) -> int - - -ida_hexrays.mop_t.make_blkref(): - - make_blkref(self, blknum) - - -ida_hexrays.mop_t.make_first_half(): - - make_first_half(self, width) -> bool - - -ida_hexrays.mop_t.make_fpnum(): - - make_fpnum(self, bytes, _size) -> bool - - -ida_hexrays.mop_t.make_gvar(): - - make_gvar(self, ea) - - -ida_hexrays.mop_t.make_helper(): - - make_helper(self, name) - - -ida_hexrays.mop_t.make_high_half(): - - make_high_half(self, width) -> bool - - -ida_hexrays.mop_t.make_insn(): - - make_insn(self, ins) - - -ida_hexrays.mop_t.make_low_half(): - - make_low_half(self, width) -> bool - - -ida_hexrays.mop_t.make_number(): - - make_number(self, _value, _size, _ea=BADADDR, opnum=0) - - -ida_hexrays.mop_t.make_reg(): - - make_reg(self, reg) - make_reg(self, reg, _size) - - -ida_hexrays.mop_t.make_reg_pair(): - - make_reg_pair(self, loreg, hireg, halfsize) - - -ida_hexrays.mop_t.make_second_half(): - - make_second_half(self, width) -> bool - - -ida_hexrays.mop_t.may_use_aliased_memory(): - - may_use_aliased_memory(self) -> bool - - -ida_hexrays.mop_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.mop_t.oprops: - mop_t_oprops_get(self) -> uint8 - -ida_hexrays.mop_t.preserve_side_effects(): - - preserve_side_effects(self, blk, top, moved_calls=None) -> bool - - -ida_hexrays.mop_t.probably_floating(): - - probably_floating(self) -> bool - - -ida_hexrays.mop_t.set_impptr_done(): - - set_impptr_done(self) - - -ida_hexrays.mop_t.set_udt(): - - set_udt(self) - - -ida_hexrays.mop_t.set_undef_val(): - - set_undef_val(self) - - -ida_hexrays.mop_t.shift_mop(): - - shift_mop(self, offset) -> bool - - -ida_hexrays.mop_t.signed_value(): - - signed_value(self) -> int64 - - -ida_hexrays.mop_t.size: - mop_t_size_get(self) -> int - -ida_hexrays.mop_t.swap(): - - swap(self, rop) - - -ida_hexrays.mop_t.t: - - _get_t(self) -> mopt_t - - -ida_hexrays.mop_t.unsigned_value(): - - unsigned_value(self) -> uint64 - - -ida_hexrays.mop_t.valnum: - mop_t_valnum_get(self) -> uint16 - -ida_hexrays.mop_t.value(): - - value(self, is_signed) -> uint64 - - -ida_hexrays.mop_t.zero(): - - zero(self) - - -class ida_hexrays.mop_visitor_t(): - - Proxy of C++ mop_visitor_t class - - -ida_hexrays.mop_visitor_t.blk: - op_parent_info_t_blk_get(self) -> mblock_t - -ida_hexrays.mop_visitor_t.curins: - op_parent_info_t_curins_get(self) -> minsn_t - -ida_hexrays.mop_visitor_t.mba: - op_parent_info_t_mba_get(self) -> mbl_array_t - -ida_hexrays.mop_visitor_t.prune: - mop_visitor_t_prune_get(self) -> bool - -ida_hexrays.mop_visitor_t.topins: - op_parent_info_t_topins_get(self) -> minsn_t - -ida_hexrays.mop_visitor_t.visit_mop(): - - visit_mop(self, op, type, is_target) -> int - - -class ida_hexrays.mopvec_t(): - - Proxy of C++ qvector<(mop_t)> class - - -ida_hexrays.mopvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.mopvec_t.at(): - - at(self, _idx) -> mop_t - - -ida_hexrays.mopvec_t.begin(): - - begin(self) -> mop_t - begin(self) -> mop_t - - -ida_hexrays.mopvec_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.mopvec_t.clear(): - - clear(self) - - -ida_hexrays.mopvec_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mopvec_t.end(): - - end(self) -> mop_t - end(self) -> mop_t - - -ida_hexrays.mopvec_t.erase(): - - erase(self, it) -> mop_t - erase(self, first, last) -> mop_t - - -ida_hexrays.mopvec_t.extract(): - - extract(self) -> mop_t - - -ida_hexrays.mopvec_t.find(): - - find(self, x) -> mop_t - find(self, x) -> mop_t - - -ida_hexrays.mopvec_t.grow(): - - grow(self, x=mop_t()) - - -ida_hexrays.mopvec_t.has(): - - has(self, x) -> bool - - -ida_hexrays.mopvec_t.inject(): - - inject(self, s, len) - - -ida_hexrays.mopvec_t.insert(): - - insert(self, it, x) -> mop_t - - -ida_hexrays.mopvec_t.pop_back(): - - pop_back(self) - - -ida_hexrays.mopvec_t.push_back(): - - push_back(self, x) - push_back(self) -> mop_t - - -ida_hexrays.mopvec_t.qclear(): - - qclear(self) - - -ida_hexrays.mopvec_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.mopvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.mopvec_t.size(): - - size(self) -> size_t - - -ida_hexrays.mopvec_t.swap(): - - swap(self, r) - - -ida_hexrays.mopvec_t.truncate(): - - truncate(self) - - -ida_hexrays.mreg2reg(): - - mreg2reg(reg, width) -> int - - - Map a microregister to processor register. - - @param reg: microregister number (C++: mreg_t) - @param width: size of microregister in bytes (C++: int) - @return: processor register id or -1 - - -ida_hexrays.must_mcode_close_block(): - - must_mcode_close_block(mcode, including_calls) -> bool - - - Must an instruction with the given opcode be the last one in a block? - Such opcodes are called closing opcodes. - - @param mcode: instruction opcode (C++: mcode_t) - @param including_calls: should m_call/m_icall be considered as the - closing opcodes? If this function returns - true, the opcode cannot appear in the middle - of a block. Calls are a special case because - before MMAT_CALLS they are closing opcodes. - Afteer MMAT_CALLS that are not considered as - closing opcodes. (C++: bool) - - -ida_hexrays.negate_mcode_relation(): - - negate_mcode_relation(code) -> mcode_t - - -ida_hexrays.negated_relation(): - - negated_relation(op) -> ctype_t - - - Negate a comparison operator. For example, cot_sge becomes cot_slt. - - - @param op (C++: ctype_t) - - -class ida_hexrays.number_format_t(): - - Proxy of C++ number_format_t class - - -ida_hexrays.number_format_t.flags: - number_format_t_flags_get(self) -> flags_t - -ida_hexrays.number_format_t.get_radix(): - - get_radix(self) -> int - - -ida_hexrays.number_format_t.is_char(): - - is_char(self) -> bool - - -ida_hexrays.number_format_t.is_dec(): - - is_dec(self) -> bool - - -ida_hexrays.number_format_t.is_enum(): - - is_enum(self) -> bool - - -ida_hexrays.number_format_t.is_fixed(): - - is_fixed(self) -> bool - - -ida_hexrays.number_format_t.is_hex(): - - is_hex(self) -> bool - - -ida_hexrays.number_format_t.is_numop(): - - is_numop(self) -> bool - - -ida_hexrays.number_format_t.is_oct(): - - is_oct(self) -> bool - - -ida_hexrays.number_format_t.is_stroff(): - - is_stroff(self) -> bool - - -ida_hexrays.number_format_t.needs_to_be_inverted(): - - needs_to_be_inverted(self) -> bool - - -ida_hexrays.number_format_t.opnum: - number_format_t_opnum_get(self) -> char - -ida_hexrays.number_format_t.org_nbytes: - number_format_t_org_nbytes_get(self) -> char - -ida_hexrays.number_format_t.props: - number_format_t_props_get(self) -> char - -ida_hexrays.number_format_t.serial: - number_format_t_serial_get(self) -> uchar - -ida_hexrays.number_format_t.type_name: - number_format_t_type_name_get(self) -> qstring * - -class ida_hexrays.op_parent_info_t(): - - Proxy of C++ op_parent_info_t class - - -ida_hexrays.op_parent_info_t.blk: - op_parent_info_t_blk_get(self) -> mblock_t - -ida_hexrays.op_parent_info_t.curins: - op_parent_info_t_curins_get(self) -> minsn_t - -ida_hexrays.op_parent_info_t.mba: - op_parent_info_t_mba_get(self) -> mbl_array_t - -ida_hexrays.op_parent_info_t.topins: - op_parent_info_t_topins_get(self) -> minsn_t - -ida_hexrays.op_uses_x(): - - op_uses_x(op) -> bool - - - Does operator use the 'x' field of 'cexpr_t' ? - - - @param op (C++: ctype_t) - - -ida_hexrays.op_uses_y(): - - op_uses_y(op) -> bool - - - Does operator use the 'y' field of 'cexpr_t' ? - - - @param op (C++: ctype_t) - - -ida_hexrays.op_uses_z(): - - op_uses_z(op) -> bool - - - Does operator use the 'z' field of 'cexpr_t' ? - - - @param op (C++: ctype_t) - - -ida_hexrays.open_pseudocode(): - - open_pseudocode(ea, new_window) -> vdui_t - - - Open pseudocode window. The specified function is decompiled and the - pseudocode window is opened. - - @param ea: function to decompile (C++: ea_t) - @param new_window: 0:reuse existing window; 1:open new window; -1: - reuse existing window if the current view is - pseudocode (C++: int) - @return: false if failed - - -class ida_hexrays.operand_locator_t(): - - Proxy of C++ operand_locator_t class - - -ida_hexrays.operand_locator_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.operand_locator_t.ea: - operand_locator_t_ea_get(self) -> ea_t - -ida_hexrays.operand_locator_t.opnum: - operand_locator_t_opnum_get(self) -> int - -class ida_hexrays.operator_info_t(): - - Proxy of C++ operator_info_t class - - -ida_hexrays.operator_info_t.fixtype: - operator_info_t_fixtype_get(self) -> uchar - -ida_hexrays.operator_info_t.flags: - operator_info_t_flags_get(self) -> uchar - -ida_hexrays.operator_info_t.precedence: - operator_info_t_precedence_get(self) -> uchar - -ida_hexrays.operator_info_t.text: - operator_info_t_text_get(self) -> char const * - -ida_hexrays.operator_info_t.valency: - operator_info_t_valency_get(self) -> uchar - -class ida_hexrays.optblock_t(): - - Proxy of C++ optblock_t class - - -ida_hexrays.optblock_t.func(): - - func(self, blk) -> int - - -ida_hexrays.optblock_t.install(): - - install(self) - - -ida_hexrays.optblock_t.remove(): - - remove(self) -> bool - - -class ida_hexrays.optinsn_t(): - - Proxy of C++ optinsn_t class - - -ida_hexrays.optinsn_t.func(): - - func(self, blk, ins) -> int - - -ida_hexrays.optinsn_t.install(): - - install(self) - - -ida_hexrays.optinsn_t.remove(): - - remove(self) -> bool - - -ida_hexrays.parse_user_call(): - - parse_user_call(udc, decl, silent) -> bool - - - Convert function type declaration into internal structure - - @param udc: - pointer to output structure (C++: udcall_t *) - @param decl: - function type declaration (C++: const char *) - @param silent: - if TRUE: do not show warning in case of incorrect - type (C++: bool) - @return: success - - -ida_hexrays.partial_type_num(): - - partial_type_num(type) -> int - - - Calculate number of partial subtypes. - - @param type (C++: const tinfo_t &) - @return: number of partial subtypes. The bigger is this number, the - uglier is the type. - - -ida_hexrays.print_vdloc(): - - print_vdloc(loc, nbytes) - - - Print vdloc. Since vdloc does not always carry the size info, we pass - it as NBYTES.. - - @param loc (C++: const vdloc_t &) - @param nbytes (C++: int) - - -class ida_hexrays.qlist_cinsn_t(): - - Proxy of C++ qlist<(cinsn_t)> class - - -ida_hexrays.qlist_cinsn_t.back(): - - back(self) -> cinsn_t - back(self) -> cinsn_t - - -ida_hexrays.qlist_cinsn_t.begin(): - - begin(self) -> qlist_cinsn_t_iterator - - -ida_hexrays.qlist_cinsn_t.clear(): - - clear(self) - - -ida_hexrays.qlist_cinsn_t.empty(): - - empty(self) -> bool - - -ida_hexrays.qlist_cinsn_t.end(): - - end(self) -> qlist_cinsn_t_iterator - - -ida_hexrays.qlist_cinsn_t.erase(): - - erase(self, p) -> qlist< cinsn_t >::iterator - erase(self, p1, p2) - erase(self, p) - - -ida_hexrays.qlist_cinsn_t.front(): - - front(self) -> cinsn_t - front(self) -> cinsn_t - - -ida_hexrays.qlist_cinsn_t.insert(): - - insert(self, p, x) -> qlist< cinsn_t >::iterator - insert(self, p) -> qlist< cinsn_t >::iterator - insert(self, p, x) -> qlist_cinsn_t_iterator - - -ida_hexrays.qlist_cinsn_t.pop_back(): - - pop_back(self) - - -ida_hexrays.qlist_cinsn_t.pop_front(): - - pop_front(self) - - -ida_hexrays.qlist_cinsn_t.push_back(): - - push_back(self, x) - push_back(self) -> cinsn_t - - -ida_hexrays.qlist_cinsn_t.push_front(): - - push_front(self, x) - - -ida_hexrays.qlist_cinsn_t.rbegin(): - - rbegin(self) -> qlist< cinsn_t >::reverse_iterator - rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator - - -ida_hexrays.qlist_cinsn_t.rend(): - - rend(self) -> qlist< cinsn_t >::reverse_iterator - rend(self) -> qlist< cinsn_t >::const_reverse_iterator - - -ida_hexrays.qlist_cinsn_t.size(): - - size(self) -> size_t - - -ida_hexrays.qlist_cinsn_t.swap(): - - swap(self, x) - - -class ida_hexrays.qlist_cinsn_t_iterator(): - - Proxy of C++ qlist_cinsn_t_iterator class - - -ida_hexrays.qlist_cinsn_t_iterator.cur: - qlist_cinsn_t_iterator_cur_get(self) -> cinsn_t - -ida_hexrays.qlist_cinsn_t_iterator.next(): - - next(self) - - -class ida_hexrays.qstring_printer_t(): - - Proxy of C++ qstring_printer_t class - - -ida_hexrays.qstring_printer_t._print(): - - _print(self, indent, format) -> int - - -ida_hexrays.qstring_printer_t.func: - vc_printer_t_func_get(self) -> cfunc_t - -ida_hexrays.qstring_printer_t.get_s(): - - get_s(self) -> qstring - - -ida_hexrays.qstring_printer_t.hdrlines: - vd_printer_t_hdrlines_get(self) -> int - -ida_hexrays.qstring_printer_t.lastchar: - vc_printer_t_lastchar_get(self) -> char - -ida_hexrays.qstring_printer_t.oneliner(): - - oneliner(self) -> bool - - -ida_hexrays.qstring_printer_t.tmpbuf: - vd_printer_t_tmpbuf_get(self) -> qstring * - -ida_hexrays.qstring_printer_t.with_tags: - qstring_printer_t_with_tags_get(self) -> bool - -ida_hexrays.qswap(): - - qswap(a, b) - - -class ida_hexrays.qvector_carg_t(): - - Proxy of C++ qvector<(carg_t)> class - - -ida_hexrays.qvector_carg_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.qvector_carg_t.append(): - - push_back(self, x) - push_back(self) -> carg_t - - -ida_hexrays.qvector_carg_t.at(): - - __getitem__(self, i) -> carg_t - - -ida_hexrays.qvector_carg_t.begin(): - - begin(self) -> carg_t - begin(self) -> carg_t - - -ida_hexrays.qvector_carg_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.qvector_carg_t.clear(): - - clear(self) - - -ida_hexrays.qvector_carg_t.empty(): - - empty(self) -> bool - - -ida_hexrays.qvector_carg_t.end(): - - end(self) -> carg_t - end(self) -> carg_t - - -ida_hexrays.qvector_carg_t.erase(): - - erase(self, it) -> carg_t - erase(self, first, last) -> carg_t - - -ida_hexrays.qvector_carg_t.extract(): - - extract(self) -> carg_t - - -ida_hexrays.qvector_carg_t.find(): - - find(self, x) -> carg_t - find(self, x) -> carg_t - - -ida_hexrays.qvector_carg_t.grow(): - - grow(self, x=carg_t()) - - -ida_hexrays.qvector_carg_t.has(): - - has(self, x) -> bool - - -ida_hexrays.qvector_carg_t.inject(): - - inject(self, s, len) - - -ida_hexrays.qvector_carg_t.insert(): - - insert(self, it, x) -> carg_t - - -ida_hexrays.qvector_carg_t.pop_back(): - - pop_back(self) - - -ida_hexrays.qvector_carg_t.push_back(): - - push_back(self, x) - push_back(self) -> carg_t - - -ida_hexrays.qvector_carg_t.qclear(): - - qclear(self) - - -ida_hexrays.qvector_carg_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.qvector_carg_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.qvector_carg_t.size(): - - size(self) -> size_t - - -ida_hexrays.qvector_carg_t.swap(): - - swap(self, r) - - -ida_hexrays.qvector_carg_t.truncate(): - - truncate(self) - - -class ida_hexrays.qvector_ccase_t(): - - Proxy of C++ qvector<(ccase_t)> class - - -ida_hexrays.qvector_ccase_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.qvector_ccase_t.append(): - - push_back(self, x) - push_back(self) -> ccase_t - - -ida_hexrays.qvector_ccase_t.at(): - - __getitem__(self, i) -> ccase_t - - -ida_hexrays.qvector_ccase_t.begin(): - - begin(self) -> ccase_t - begin(self) -> ccase_t - - -ida_hexrays.qvector_ccase_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.qvector_ccase_t.clear(): - - clear(self) - - -ida_hexrays.qvector_ccase_t.empty(): - - empty(self) -> bool - - -ida_hexrays.qvector_ccase_t.end(): - - end(self) -> ccase_t - end(self) -> ccase_t - - -ida_hexrays.qvector_ccase_t.erase(): - - erase(self, it) -> ccase_t - erase(self, first, last) -> ccase_t - - -ida_hexrays.qvector_ccase_t.extract(): - - extract(self) -> ccase_t - - -ida_hexrays.qvector_ccase_t.find(): - - find(self, x) -> ccase_t - find(self, x) -> ccase_t - - -ida_hexrays.qvector_ccase_t.grow(): - - grow(self, x=ccase_t()) - - -ida_hexrays.qvector_ccase_t.has(): - - has(self, x) -> bool - - -ida_hexrays.qvector_ccase_t.inject(): - - inject(self, s, len) - - -ida_hexrays.qvector_ccase_t.insert(): - - insert(self, it, x) -> ccase_t - - -ida_hexrays.qvector_ccase_t.pop_back(): - - pop_back(self) - - -ida_hexrays.qvector_ccase_t.push_back(): - - push_back(self, x) - push_back(self) -> ccase_t - - -ida_hexrays.qvector_ccase_t.qclear(): - - qclear(self) - - -ida_hexrays.qvector_ccase_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.qvector_ccase_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.qvector_ccase_t.size(): - - size(self) -> size_t - - -ida_hexrays.qvector_ccase_t.swap(): - - swap(self, r) - - -ida_hexrays.qvector_ccase_t.truncate(): - - truncate(self) - - -class ida_hexrays.qvector_history_t(): - - Proxy of C++ qvector<(history_item_t)> class - - -ida_hexrays.qvector_history_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.qvector_history_t.at(): - - at(self, _idx) -> history_item_t - - -ida_hexrays.qvector_history_t.begin(): - - begin(self) -> history_item_t - begin(self) -> history_item_t - - -ida_hexrays.qvector_history_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.qvector_history_t.clear(): - - clear(self) - - -ida_hexrays.qvector_history_t.empty(): - - empty(self) -> bool - - -ida_hexrays.qvector_history_t.end(): - - end(self) -> history_item_t - end(self) -> history_item_t - - -ida_hexrays.qvector_history_t.erase(): - - erase(self, it) -> history_item_t - erase(self, first, last) -> history_item_t - - -ida_hexrays.qvector_history_t.extract(): - - extract(self) -> history_item_t - - -ida_hexrays.qvector_history_t.find(): - - find(self, x) -> history_item_t - find(self, x) -> history_item_t - - -ida_hexrays.qvector_history_t.grow(): - - grow(self, x=history_item_t()) - - -ida_hexrays.qvector_history_t.has(): - - has(self, x) -> bool - - -ida_hexrays.qvector_history_t.inject(): - - inject(self, s, len) - - -ida_hexrays.qvector_history_t.insert(): - - insert(self, it, x) -> history_item_t - - -ida_hexrays.qvector_history_t.pop_back(): - - pop_back(self) - - -ida_hexrays.qvector_history_t.push_back(): - - push_back(self, x) - push_back(self) -> history_item_t - - -ida_hexrays.qvector_history_t.qclear(): - - qclear(self) - - -ida_hexrays.qvector_history_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.qvector_history_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.qvector_history_t.size(): - - size(self) -> size_t - - -ida_hexrays.qvector_history_t.swap(): - - swap(self, r) - - -ida_hexrays.qvector_history_t.truncate(): - - truncate(self) - - -class ida_hexrays.qvector_lvar_t(): - - Proxy of C++ qvector<(lvar_t)> class - - -ida_hexrays.qvector_lvar_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.qvector_lvar_t.append(): - - push_back(self, x) - push_back(self) -> lvar_t - - -ida_hexrays.qvector_lvar_t.at(): - - __getitem__(self, i) -> lvar_t - - -ida_hexrays.qvector_lvar_t.begin(): - - begin(self) -> lvar_t - begin(self) -> lvar_t - - -ida_hexrays.qvector_lvar_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.qvector_lvar_t.clear(): - - clear(self) - - -ida_hexrays.qvector_lvar_t.empty(): - - empty(self) -> bool - - -ida_hexrays.qvector_lvar_t.end(): - - end(self) -> lvar_t - end(self) -> lvar_t - - -ida_hexrays.qvector_lvar_t.erase(): - - erase(self, it) -> lvar_t - erase(self, first, last) -> lvar_t - - -ida_hexrays.qvector_lvar_t.extract(): - - extract(self) -> lvar_t - - -ida_hexrays.qvector_lvar_t.find(): - - find(self, x) -> lvar_t - find(self, x) -> lvar_t - - -ida_hexrays.qvector_lvar_t.grow(): - - grow(self, x=lvar_t()) - - -ida_hexrays.qvector_lvar_t.has(): - - has(self, x) -> bool - - -ida_hexrays.qvector_lvar_t.inject(): - - inject(self, s, len) - - -ida_hexrays.qvector_lvar_t.insert(): - - insert(self, it, x) -> lvar_t - - -ida_hexrays.qvector_lvar_t.pop_back(): - - pop_back(self) - - -ida_hexrays.qvector_lvar_t.push_back(): - - push_back(self, x) - push_back(self) -> lvar_t - - -ida_hexrays.qvector_lvar_t.qclear(): - - qclear(self) - - -ida_hexrays.qvector_lvar_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.qvector_lvar_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.qvector_lvar_t.size(): - - size(self) -> size_t - - -ida_hexrays.qvector_lvar_t.swap(): - - swap(self, r) - - -ida_hexrays.qvector_lvar_t.truncate(): - - truncate(self) - - -ida_hexrays.reg2mreg(): - - reg2mreg(reg) -> mreg_t - - - Map a processor register to microregister. - - @param reg: processor register number (C++: int) - @return: microregister register id or mr_none - - -ida_hexrays.remitem(): - - remitem(e) - - -ida_hexrays.remove_hexrays_callback(): - Deprecated. Please use Hexrays_Hooks instead - -ida_hexrays.restore_user_cmts(): - - restore_user_cmts(func_ea) -> user_cmts_t - - - Restore user defined comments from the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @return: collection of user defined comments. The returned object must - be deleted by the caller using delete_user_cmts() - - -ida_hexrays.restore_user_defined_calls(): - - restore_user_defined_calls(udcalls, func_ea) -> bool - - - Restore user defined function calls from the database. - - @param udcalls: ptr to output buffer (C++: udcall_map_t *) - @param func_ea: entry address of the function (C++: ea_t) - @return: success - - -ida_hexrays.restore_user_iflags(): - - restore_user_iflags(func_ea) -> user_iflags_t - - - Restore user defined citem iflags from the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @return: collection of user defined iflags. The returned object must - be deleted by the caller using delete_user_iflags() - - -ida_hexrays.restore_user_labels(): - - restore_user_labels(func_ea) -> user_labels_t - - - Restore user defined labels from the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @return: collection of user defined labels. The returned object must - be deleted by the caller using delete_user_labels() - - -ida_hexrays.restore_user_lvar_settings(): - - restore_user_lvar_settings(lvinf, func_ea) -> bool - - - Restore user defined local variable settings in the database. - - @param lvinf: ptr to output buffer (C++: lvar_uservec_t *) - @param func_ea: entry address of the function (C++: ea_t) - @return: success - - -ida_hexrays.restore_user_numforms(): - - restore_user_numforms(func_ea) -> user_numforms_t - - - Restore user defined number formats from the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @return: collection of user defined number formats. The returned - object must be deleted by the caller using - delete_user_numforms() - - -ida_hexrays.restore_user_unions(): - - restore_user_unions(func_ea) -> user_unions_t - - - Restore user defined union field selections from the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @return: collection of union field selections The returned object must - be deleted by the caller using delete_user_unions() - - -class ida_hexrays.rlist_t(): - - Proxy of C++ rlist_t class - - -ida_hexrays.rlist_t.add(): - - add(self, bit) -> bool - add(self, bit, width) -> bool - add(self, ml) -> bool - - -ida_hexrays.rlist_t.back(): - - back(self) -> int - - -ida_hexrays.rlist_t.begin(): - - begin(self) -> bitset_t::iterator - - -ida_hexrays.rlist_t.clear(): - - clear(self) - - -ida_hexrays.rlist_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.rlist_t.copy(): - - copy(self, m) -> bitset_t - - -ida_hexrays.rlist_t.count(): - - count(self) -> int - count(self, bit) -> int - - -ida_hexrays.rlist_t.cut_at(): - - cut_at(self, maxbit) -> bool - - -ida_hexrays.rlist_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.rlist_t.empty(): - - empty(self) -> bool - - -ida_hexrays.rlist_t.end(): - - end(self) -> bitset_t::iterator - - -ida_hexrays.rlist_t.fill_with_ones(): - - fill_with_ones(self, maxbit) - - -ida_hexrays.rlist_t.front(): - - front(self) -> int - - -ida_hexrays.rlist_t.has(): - - has(self, bit) -> bool - - -ida_hexrays.rlist_t.has_all(): - - has_all(self, bit, width) -> bool - - -ida_hexrays.rlist_t.has_any(): - - has_any(self, bit, width) -> bool - - -ida_hexrays.rlist_t.has_common(): - - has_common(self, ml) -> bool - - -ida_hexrays.rlist_t.inc(): - - inc(self, p, n=1) - - -ida_hexrays.rlist_t.includes(): - - includes(self, ml) -> bool - - -ida_hexrays.rlist_t.intersect(): - - intersect(self, ml) -> bool - - -ida_hexrays.rlist_t.is_subset_of(): - - is_subset_of(self, ml) -> bool - - -ida_hexrays.rlist_t.itat(): - - itat(self, n) -> bitset_t::iterator - - -ida_hexrays.rlist_t.itv(): - - itv(self, it) -> int - - -ida_hexrays.rlist_t.last(): - - last(self) -> int - - -ida_hexrays.rlist_t.shift_down(): - - shift_down(self, shift) - - -ida_hexrays.rlist_t.sub(): - - sub(self, bit) -> bool - sub(self, bit, width) -> bool - sub(self, ml) -> bool - - -ida_hexrays.rlist_t.swap(): - - swap(self, r) - - -ida_hexrays.save_user_cmts(): - - save_user_cmts(func_ea, user_cmts) - - - Save user defined comments into the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @param user_cmts: collection of user defined comments (C++: const - user_cmts_t *) - - -ida_hexrays.save_user_defined_calls(): - - save_user_defined_calls(func_ea, udcalls) - - - Save user defined local function calls into the database. - - @param func_ea: entry address of the function (C++: ea_t) - @param udcalls: user-specified info about user defined function calls - (C++: const udcall_map_t &) - - -ida_hexrays.save_user_iflags(): - - save_user_iflags(func_ea, iflags) - - - Save user defined citem iflags into the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @param iflags: collection of user defined citem iflags (C++: const - user_iflags_t *) - - -ida_hexrays.save_user_labels(): - - save_user_labels(func_ea, user_labels) - - - Save user defined labels into the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @param user_labels: collection of user defined labels (C++: const - user_labels_t *) - - -ida_hexrays.save_user_lvar_settings(): - - save_user_lvar_settings(func_ea, lvinf) - - - Save user defined local variable settings into the database. - - @param func_ea: entry address of the function (C++: ea_t) - @param lvinf: user-specified info about local variables (C++: const - lvar_uservec_t &) - - -ida_hexrays.save_user_numforms(): - - save_user_numforms(func_ea, numforms) - - - Save user defined number formats into the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @param numforms: collection of user defined comments (C++: const - user_numforms_t *) - - -ida_hexrays.save_user_unions(): - - save_user_unions(func_ea, unions) - - - Save user defined union field selections into the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @param unions: collection of union field selections (C++: const - user_unions_t *) - - -class ida_hexrays.scif_t(): - - Proxy of C++ scif_t class - - -ida_hexrays.scif_t.advance(): - - advance(self, delta) -> bool - - -ida_hexrays.scif_t.atype(): - - atype(self) -> argloc_type_t - - -ida_hexrays.scif_t.calc_offset(): - - calc_offset(self) -> sval_t - - -ida_hexrays.scif_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.scif_t.consume_rrel(): - - consume_rrel(self, p) - - -ida_hexrays.scif_t.consume_scattered(): - - consume_scattered(self, p) - - -ida_hexrays.scif_t.get_biggest(): - - get_biggest(self) -> argloc_t::biggest_t - - -ida_hexrays.scif_t.get_custom(): - - get_custom(self) -> void * - - -ida_hexrays.scif_t.get_ea(): - - get_ea(self) -> ea_t - - -ida_hexrays.scif_t.get_reginfo(): - - get_reginfo(self) -> uint32 - - -ida_hexrays.scif_t.get_rrel(): - - get_rrel(self) -> rrel_t - get_rrel(self) -> rrel_t - - -ida_hexrays.scif_t.has_reg(): - - has_reg(self) -> bool - - -ida_hexrays.scif_t.has_stkoff(): - - has_stkoff(self) -> bool - - -ida_hexrays.scif_t.is_aliasable(): - - is_aliasable(self, mb, size) -> bool - - -ida_hexrays.scif_t.is_badloc(): - - is_badloc(self) -> bool - - -ida_hexrays.scif_t.is_custom(): - - is_custom(self) -> bool - - -ida_hexrays.scif_t.is_ea(): - - is_ea(self) -> bool - - -ida_hexrays.scif_t.is_fragmented(): - - is_fragmented(self) -> bool - - -ida_hexrays.scif_t.is_mixed_scattered(): - - is_mixed_scattered(self) -> bool - - -ida_hexrays.scif_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.scif_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_hexrays.scif_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_hexrays.scif_t.is_rrel(): - - is_rrel(self) -> bool - - -ida_hexrays.scif_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.scif_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_hexrays.scif_t.mba: - scif_t_mba_get(self) -> mbl_array_t - -ida_hexrays.scif_t.name: - scif_t_name_get(self) -> qstring * - -ida_hexrays.scif_t.reg1(): - - reg1(self) -> int - - -ida_hexrays.scif_t.reg2(): - - reg2(self) -> int - - -ida_hexrays.scif_t.regoff(): - - regoff(self) -> int - - -ida_hexrays.scif_t.scattered(): - - scattered(self) -> scattered_aloc_t - scattered(self) -> scattered_aloc_t - - -ida_hexrays.scif_t.set_badloc(): - - set_badloc(self) - - -ida_hexrays.scif_t.set_ea(): - - set_ea(self, _ea) - - -ida_hexrays.scif_t.set_reg1(): - - set_reg1(self, r1) - - -ida_hexrays.scif_t.set_reg2(): - - set_reg2(self, _reg1, _reg2) - - -ida_hexrays.scif_t.set_stkoff(): - - set_stkoff(self, off) - - -ida_hexrays.scif_t.stkoff(): - - stkoff(self) -> sval_t - - -ida_hexrays.scif_t.swap(): - - swap(self, r) - - -ida_hexrays.scif_t.type: - scif_t_type_get(self) -> tinfo_t - -class ida_hexrays.scif_visitor_t(): - - Proxy of C++ scif_visitor_t class - - -ida_hexrays.scif_visitor_t.visit_scif_mop(): - - visit_scif_mop(self, r, off) -> int - - -ida_hexrays.select_udt_by_offset(): - - select_udt_by_offset(udts, ops, applicator) -> int - - - Select UDT - - @param udts: list of UDT tinfo_t for the selection, if NULL or empty - then UDTs from the "Local types" will be used (C++: const - qvector < tinfo_t > *) - @param ops: operands (C++: const ui_stroff_ops_t &) - @param applicator (C++: ui_stroff_applicator_t &) - - -ida_hexrays.send_database(): - - send_database(err, silent) - - - Send the database to Hex-Rays. This function sends the current - database to the Hex-Rays server. The database is sent in the - compressed form over an encrypted (SSL) connection. - - @param err: failure description object. Empty hexrays_failure_t - object can be used if error information is not available. - (C++: const hexrays_failure_t &) - @param silent: if false, a dialog box will be displayed before sending - the database. (C++: bool) - - -ida_hexrays.set2jcnd(): - - set2jcnd(code) -> mcode_t - - -ida_hexrays.set_type(): - - set_type(id, tif, source, force=False) -> bool - - - Set a global type. - - @param id: address or id of the object (C++: uval_t) - @param tif: new type info (C++: const tinfo_t &) - @param source: where the type comes from (C++: type_source_t) - @param force: true means to set the type as is, false means to merge - the new type with the possibly existing old type info. - (C++: bool) - @return: success - - -class ida_hexrays.simple_graph_t(): - - Proxy of C++ simple_graph_t class - - -ida_hexrays.simple_graph_t.colored_gdl_edges: - simple_graph_t_colored_gdl_edges_get(self) -> bool - -ida_hexrays.simple_graph_t.title: - simple_graph_t_title_get(self) -> qstring * - -class ida_hexrays.stkvar_ref_t(): - - Proxy of C++ stkvar_ref_t class - - -ida_hexrays.stkvar_ref_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.stkvar_ref_t.get_stkvar(): - - get_stkvar(self, p_off=None) -> member_t * - - -ida_hexrays.stkvar_ref_t.mba: - stkvar_ref_t_mba_get(self) -> mbl_array_t - -ida_hexrays.stkvar_ref_t.off: - stkvar_ref_t_off_get(self) -> sval_t - -ida_hexrays.stkvar_ref_t.swap(): - - swap(self, r) - - -ida_hexrays.swap_mcode_relation(): - - swap_mcode_relation(code) -> mcode_t - - -ida_hexrays.swapped_relation(): - - swapped_relation(op) -> ctype_t - - - Swap a comparison operator. For example, cot_sge becomes cot_sle. - - - @param op (C++: ctype_t) - - -ida_hexrays.term_hexrays_plugin(): - - term_hexrays_plugin() - - - Stop working with hex-rays decompiler. - - -class ida_hexrays.treeloc_t(): - - Proxy of C++ treeloc_t class - - -ida_hexrays.treeloc_t.ea: - treeloc_t_ea_get(self) -> ea_t - -ida_hexrays.treeloc_t.itp: - treeloc_t_itp_get(self) -> item_preciser_t - -class ida_hexrays.udc_filter_t(): - - Proxy of C++ udc_filter_t class - - -ida_hexrays.udc_filter_t.apply(): - - apply(self, cdg) -> merror_t - - -ida_hexrays.udc_filter_t.init(): - - init(self, decl) -> bool - - -ida_hexrays.udc_filter_t.match(): - - match(self, cdg) -> bool - - -ida_hexrays.udcall_map_begin(): - - udcall_map_begin(map) -> udcall_map_iterator_t - - - Get iterator pointing to the beginning of udcall_map_t. - - - @param map (C++: const udcall_map_t *) - - -ida_hexrays.udcall_map_clear(): - - udcall_map_clear(map) - - - Clear udcall_map_t. - - - @param map (C++: udcall_map_t *) - - -ida_hexrays.udcall_map_end(): - - udcall_map_end(map) -> udcall_map_iterator_t - - - Get iterator pointing to the end of udcall_map_t. - - - @param map (C++: const udcall_map_t *) - - -ida_hexrays.udcall_map_erase(): - - udcall_map_erase(map, p) - - - Erase current element from udcall_map_t. - - - @param map (C++: udcall_map_t *) - @param p (C++: udcall_map_iterator_t) - - -ida_hexrays.udcall_map_find(): - - udcall_map_find(map, key) -> udcall_map_iterator_t - - - Find the specified key in udcall_map_t. - - - @param map (C++: const udcall_map_t *) - @param key (C++: const ea_t &) - - -ida_hexrays.udcall_map_first(): - - udcall_map_first(p) -> ea_t const & - - - Get reference to the current map key. - - - @param p (C++: udcall_map_iterator_t) - - -ida_hexrays.udcall_map_free(): - - udcall_map_free(map) - - - Delete udcall_map_t instance. - - - @param map (C++: udcall_map_t *) - - -ida_hexrays.udcall_map_insert(): - - udcall_map_insert(map, key, val) -> udcall_map_iterator_t - - - Insert new (ea_t, 'udcall_t' ) pair into udcall_map_t. - - - @param map (C++: udcall_map_t *) - @param key (C++: const ea_t &) - @param val (C++: const udcall_t &) - - -class ida_hexrays.udcall_map_iterator_t(): - - Proxy of C++ udcall_map_iterator_t class - - -ida_hexrays.udcall_map_iterator_t.x: - udcall_map_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.udcall_map_new(): - - udcall_map_new() -> udcall_map_t * - - - Create a new udcall_map_t instance. - - -ida_hexrays.udcall_map_next(): - - udcall_map_next(p) -> udcall_map_iterator_t - - - Move to the next element. - - - @param p (C++: udcall_map_iterator_t) - - -ida_hexrays.udcall_map_prev(): - - udcall_map_prev(p) -> udcall_map_iterator_t - - - Move to the previous element. - - - @param p (C++: udcall_map_iterator_t) - - -ida_hexrays.udcall_map_second(): - - udcall_map_second(p) -> udcall_t - - - Get reference to the current map value. - - - @param p (C++: udcall_map_iterator_t) - - -ida_hexrays.udcall_map_size(): - - udcall_map_size(map) -> size_t - - - Get size of udcall_map_t. - - - @param map (C++: udcall_map_t *) - - -class ida_hexrays.udcall_t(): - - Proxy of C++ udcall_t class - - -ida_hexrays.udcall_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.udcall_t.name: - udcall_t_name_get(self) -> qstring * - -ida_hexrays.udcall_t.tif: - udcall_t_tif_get(self) -> tinfo_t - -class ida_hexrays.ui_stroff_applicator_t(): - - Proxy of C++ ui_stroff_applicator_t class - - -ida_hexrays.ui_stroff_applicator_t.apply(): - - apply(self, opnum, path) -> bool - - -class ida_hexrays.ui_stroff_op_t(): - - Proxy of C++ ui_stroff_op_t class - - -ida_hexrays.ui_stroff_op_t.offset: - ui_stroff_op_t_offset_get(self) -> uval_t - -ida_hexrays.ui_stroff_op_t.text: - ui_stroff_op_t_text_get(self) -> qstring * - -class ida_hexrays.ui_stroff_ops_t(): - - Proxy of C++ qvector<(ui_stroff_op_t)> class - - -ida_hexrays.ui_stroff_ops_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.ui_stroff_ops_t.append(): - - push_back(self, x) - push_back(self) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.at(): - - __getitem__(self, i) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.begin(): - - begin(self) -> ui_stroff_op_t - begin(self) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.ui_stroff_ops_t.clear(): - - clear(self) - - -ida_hexrays.ui_stroff_ops_t.empty(): - - empty(self) -> bool - - -ida_hexrays.ui_stroff_ops_t.end(): - - end(self) -> ui_stroff_op_t - end(self) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.erase(): - - erase(self, it) -> ui_stroff_op_t - erase(self, first, last) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.extract(): - - extract(self) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.find(): - - find(self, x) -> ui_stroff_op_t - find(self, x) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.grow(): - - grow(self, x=ui_stroff_op_t()) - - -ida_hexrays.ui_stroff_ops_t.has(): - - has(self, x) -> bool - - -ida_hexrays.ui_stroff_ops_t.inject(): - - inject(self, s, len) - - -ida_hexrays.ui_stroff_ops_t.insert(): - - insert(self, it, x) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.pop_back(): - - pop_back(self) - - -ida_hexrays.ui_stroff_ops_t.push_back(): - - push_back(self, x) - push_back(self) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.qclear(): - - qclear(self) - - -ida_hexrays.ui_stroff_ops_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.ui_stroff_ops_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.ui_stroff_ops_t.size(): - - size(self) -> size_t - - -ida_hexrays.ui_stroff_ops_t.swap(): - - swap(self, r) - - -ida_hexrays.ui_stroff_ops_t.truncate(): - - truncate(self) - - -ida_hexrays.user_cmts_begin(): - - user_cmts_begin(map) -> user_cmts_iterator_t - - - Get iterator pointing to the beginning of user_cmts_t. - - - @param map (C++: const user_cmts_t *) - - -ida_hexrays.user_cmts_clear(): - - user_cmts_clear(map) - - - Clear user_cmts_t. - - - @param map (C++: user_cmts_t *) - - -ida_hexrays.user_cmts_end(): - - user_cmts_end(map) -> user_cmts_iterator_t - - - Get iterator pointing to the end of user_cmts_t. - - - @param map (C++: const user_cmts_t *) - - -ida_hexrays.user_cmts_erase(): - - user_cmts_erase(map, p) - - - Erase current element from user_cmts_t. - - - @param map (C++: user_cmts_t *) - @param p (C++: user_cmts_iterator_t) - - -ida_hexrays.user_cmts_find(): - - user_cmts_find(map, key) -> user_cmts_iterator_t - - - Find the specified key in user_cmts_t. - - - @param map (C++: const user_cmts_t *) - @param key (C++: const treeloc_t &) - - -ida_hexrays.user_cmts_first(): - - user_cmts_first(p) -> treeloc_t - - - Get reference to the current map key. - - - @param p (C++: user_cmts_iterator_t) - - -ida_hexrays.user_cmts_free(): - - user_cmts_free(map) - - - Delete user_cmts_t instance. - - - @param map (C++: user_cmts_t *) - - -ida_hexrays.user_cmts_insert(): - - user_cmts_insert(map, key, val) -> user_cmts_iterator_t - - - Insert new ( 'treeloc_t' , 'citem_cmt_t' ) pair into user_cmts_t. - - - @param map (C++: user_cmts_t *) - @param key (C++: const treeloc_t &) - @param val (C++: const citem_cmt_t &) - - -class ida_hexrays.user_cmts_iterator_t(): - - Proxy of C++ user_cmts_iterator_t class - - -ida_hexrays.user_cmts_iterator_t.x: - user_cmts_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.user_cmts_new(): - - user_cmts_new() -> user_cmts_t - - - Create a new user_cmts_t instance. - - -ida_hexrays.user_cmts_next(): - - user_cmts_next(p) -> user_cmts_iterator_t - - - Move to the next element. - - - @param p (C++: user_cmts_iterator_t) - - -ida_hexrays.user_cmts_prev(): - - user_cmts_prev(p) -> user_cmts_iterator_t - - - Move to the previous element. - - - @param p (C++: user_cmts_iterator_t) - - -ida_hexrays.user_cmts_second(): - - user_cmts_second(p) -> citem_cmt_t - - - Get reference to the current map value. - - - @param p (C++: user_cmts_iterator_t) - - -ida_hexrays.user_cmts_size(): - - user_cmts_size(map) -> size_t - - - Get size of user_cmts_t. - - - @param map (C++: user_cmts_t *) - - -class ida_hexrays.user_cmts_t(): - - Proxy of C++ std::map<(treeloc_t,citem_cmt_t)> class - - -ida_hexrays.user_cmts_t.at(): - - at(self, _Keyval) -> citem_cmt_t - - -class ida_hexrays.user_cmts_t.keytype(): - - Proxy of C++ treeloc_t class - - -ida_hexrays.user_cmts_t.keytype.ea: - treeloc_t_ea_get(self) -> ea_t - -ida_hexrays.user_cmts_t.keytype.itp: - treeloc_t_itp_get(self) -> item_preciser_t - -ida_hexrays.user_cmts_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_cmts_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_cmts_t.setdefault(): - - Sets the value associated with the provided key. - - -class ida_hexrays.user_cmts_t.valuetype(): - - Proxy of C++ citem_cmt_t class - - -ida_hexrays.user_cmts_t.valuetype.c_str(): - - c_str(self) -> char const * - - -ida_hexrays.user_cmts_t.valuetype.used: - citem_cmt_t_used_get(self) -> bool - -ida_hexrays.user_iflags_begin(): - - user_iflags_begin(map) -> user_iflags_iterator_t - - - Get iterator pointing to the beginning of user_iflags_t. - - - @param map (C++: const user_iflags_t *) - - -ida_hexrays.user_iflags_clear(): - - user_iflags_clear(map) - - - Clear user_iflags_t. - - - @param map (C++: user_iflags_t *) - - -ida_hexrays.user_iflags_end(): - - user_iflags_end(map) -> user_iflags_iterator_t - - - Get iterator pointing to the end of user_iflags_t. - - - @param map (C++: const user_iflags_t *) - - -ida_hexrays.user_iflags_erase(): - - user_iflags_erase(map, p) - - - Erase current element from user_iflags_t. - - - @param map (C++: user_iflags_t *) - @param p (C++: user_iflags_iterator_t) - - -ida_hexrays.user_iflags_find(): - - user_iflags_find(map, key) -> user_iflags_iterator_t - - - Find the specified key in user_iflags_t. - - - @param map (C++: const user_iflags_t *) - @param key (C++: const citem_locator_t &) - - -ida_hexrays.user_iflags_first(): - - user_iflags_first(p) -> citem_locator_t - - - Get reference to the current map key. - - - @param p (C++: user_iflags_iterator_t) - - -ida_hexrays.user_iflags_free(): - - user_iflags_free(map) - - - Delete user_iflags_t instance. - - - @param map (C++: user_iflags_t *) - - -ida_hexrays.user_iflags_insert(): - - user_iflags_insert(map, key, val) -> user_iflags_iterator_t - - - Insert new ( 'citem_locator_t' , int32) pair into user_iflags_t. - - - @param map (C++: user_iflags_t *) - @param key (C++: const citem_locator_t &) - @param val (C++: const int32 &) - - -class ida_hexrays.user_iflags_iterator_t(): - - Proxy of C++ user_iflags_iterator_t class - - -ida_hexrays.user_iflags_iterator_t.x: - user_iflags_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.user_iflags_new(): - - user_iflags_new() -> user_iflags_t - - - Create a new user_iflags_t instance. - - -ida_hexrays.user_iflags_next(): - - user_iflags_next(p) -> user_iflags_iterator_t - - - Move to the next element. - - - @param p (C++: user_iflags_iterator_t) - - -ida_hexrays.user_iflags_prev(): - - user_iflags_prev(p) -> user_iflags_iterator_t - - - Move to the previous element. - - - @param p (C++: user_iflags_iterator_t) - - -ida_hexrays.user_iflags_second(): - - user_iflags_second(p) -> int32 const & - - - Get reference to the current map value. - - - @param p (C++: user_iflags_iterator_t) - - -ida_hexrays.user_iflags_size(): - - user_iflags_size(map) -> size_t - - - Get size of user_iflags_t. - - - @param map (C++: user_iflags_t *) - - -class ida_hexrays.user_iflags_t(): - - Proxy of C++ std::map<(citem_locator_t,int32)> class - - -ida_hexrays.user_iflags_t.at(): - - at(self, _Keyval) -> int & - - -class ida_hexrays.user_iflags_t.keytype(): - - Proxy of C++ citem_locator_t class - - -ida_hexrays.user_iflags_t.keytype.compare(): - - compare(self, r) -> int - - -ida_hexrays.user_iflags_t.keytype.ea: - citem_locator_t_ea_get(self) -> ea_t - -ida_hexrays.user_iflags_t.keytype.op: - citem_locator_t_op_get(self) -> ctype_t - -ida_hexrays.user_iflags_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_iflags_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_iflags_t.setdefault(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_iflags_t.valuetype.bit_length(): - int.bit_length() -> int - - Number of bits necessary to represent self in binary. - >>> bin(37) - '0b100101' - >>> (37).bit_length() - 6 - -ida_hexrays.user_iflags_t.valuetype.conjugate(): - Returns self, the complex conjugate of any int. - -ida_hexrays.user_iflags_t.valuetype.denominator: - the denominator of a rational number in lowest terms - -ida_hexrays.user_iflags_t.valuetype.imag: - the imaginary part of a complex number - -ida_hexrays.user_iflags_t.valuetype.numerator: - the numerator of a rational number in lowest terms - -ida_hexrays.user_iflags_t.valuetype.real: - the real part of a complex number - -ida_hexrays.user_labels_begin(): - - user_labels_begin(map) -> user_labels_iterator_t - - - Get iterator pointing to the beginning of user_labels_t. - - - @param map (C++: const user_labels_t *) - - -ida_hexrays.user_labels_clear(): - - user_labels_clear(map) - - - Clear user_labels_t. - - - @param map (C++: user_labels_t *) - - -ida_hexrays.user_labels_end(): - - user_labels_end(map) -> user_labels_iterator_t - - - Get iterator pointing to the end of user_labels_t. - - - @param map (C++: const user_labels_t *) - - -ida_hexrays.user_labels_erase(): - - user_labels_erase(map, p) - - - Erase current element from user_labels_t. - - - @param map (C++: user_labels_t *) - @param p (C++: user_labels_iterator_t) - - -ida_hexrays.user_labels_find(): - - user_labels_find(map, key) -> user_labels_iterator_t - - - Find the specified key in user_labels_t. - - - @param map (C++: const user_labels_t *) - @param key (C++: const int &) - - -ida_hexrays.user_labels_first(): - - user_labels_first(p) -> int const & - - - Get reference to the current map key. - - - @param p (C++: user_labels_iterator_t) - - -ida_hexrays.user_labels_free(): - - user_labels_free(map) - - - Delete user_labels_t instance. - - - @param map (C++: user_labels_t *) - - -ida_hexrays.user_labels_insert(): - - user_labels_insert(map, key, val) -> user_labels_iterator_t - - - Insert new (int, qstring) pair into user_labels_t. - - - @param map (C++: user_labels_t *) - @param key (C++: const int &) - @param val (C++: const qstring &) - - -class ida_hexrays.user_labels_iterator_t(): - - Proxy of C++ user_labels_iterator_t class - - -ida_hexrays.user_labels_iterator_t.x: - user_labels_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.user_labels_new(): - - user_labels_new() -> user_labels_t - - - Create a new user_labels_t instance. - - -ida_hexrays.user_labels_next(): - - user_labels_next(p) -> user_labels_iterator_t - - - Move to the next element. - - - @param p (C++: user_labels_iterator_t) - - -ida_hexrays.user_labels_prev(): - - user_labels_prev(p) -> user_labels_iterator_t - - - Move to the previous element. - - - @param p (C++: user_labels_iterator_t) - - -ida_hexrays.user_labels_second(): - - user_labels_second(p) -> qstring & - - - Get reference to the current map value. - - - @param p (C++: user_labels_iterator_t) - - -ida_hexrays.user_labels_size(): - - user_labels_size(map) -> size_t - - - Get size of user_labels_t. - - - @param map (C++: user_labels_t *) - - -class ida_hexrays.user_labels_t(): - - Proxy of C++ std::map<(int,qstring)> class - - -ida_hexrays.user_labels_t.at(): - - at(self, _Keyval) -> _qstring< char > & - - -ida_hexrays.user_labels_t.size(): - - size(self) -> size_t - - -class ida_hexrays.user_lvar_modifier_t(): - - Proxy of C++ user_lvar_modifier_t class - - -ida_hexrays.user_lvar_modifier_t.modify_lvars(): - - modify_lvars(self, lvinf) -> bool - - -ida_hexrays.user_numforms_begin(): - - user_numforms_begin(map) -> user_numforms_iterator_t - - - Get iterator pointing to the beginning of user_numforms_t. - - - @param map (C++: const user_numforms_t *) - - -ida_hexrays.user_numforms_clear(): - - user_numforms_clear(map) - - - Clear user_numforms_t. - - - @param map (C++: user_numforms_t *) - - -ida_hexrays.user_numforms_end(): - - user_numforms_end(map) -> user_numforms_iterator_t - - - Get iterator pointing to the end of user_numforms_t. - - - @param map (C++: const user_numforms_t *) - - -ida_hexrays.user_numforms_erase(): - - user_numforms_erase(map, p) - - - Erase current element from user_numforms_t. - - - @param map (C++: user_numforms_t *) - @param p (C++: user_numforms_iterator_t) - - -ida_hexrays.user_numforms_find(): - - user_numforms_find(map, key) -> user_numforms_iterator_t - - - Find the specified key in user_numforms_t. - - - @param map (C++: const user_numforms_t *) - @param key (C++: const operand_locator_t &) - - -ida_hexrays.user_numforms_first(): - - user_numforms_first(p) -> operand_locator_t - - - Get reference to the current map key. - - - @param p (C++: user_numforms_iterator_t) - - -ida_hexrays.user_numforms_free(): - - user_numforms_free(map) - - - Delete user_numforms_t instance. - - - @param map (C++: user_numforms_t *) - - -ida_hexrays.user_numforms_insert(): - - user_numforms_insert(map, key, val) -> user_numforms_iterator_t - - - Insert new ( 'operand_locator_t' , 'number_format_t' ) pair into - user_numforms_t. - - - @param map (C++: user_numforms_t *) - @param key (C++: const operand_locator_t &) - @param val (C++: const number_format_t &) - - -class ida_hexrays.user_numforms_iterator_t(): - - Proxy of C++ user_numforms_iterator_t class - - -ida_hexrays.user_numforms_iterator_t.x: - user_numforms_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.user_numforms_new(): - - user_numforms_new() -> user_numforms_t - - - Create a new user_numforms_t instance. - - -ida_hexrays.user_numforms_next(): - - user_numforms_next(p) -> user_numforms_iterator_t - - - Move to the next element. - - - @param p (C++: user_numforms_iterator_t) - - -ida_hexrays.user_numforms_prev(): - - user_numforms_prev(p) -> user_numforms_iterator_t - - - Move to the previous element. - - - @param p (C++: user_numforms_iterator_t) - - -ida_hexrays.user_numforms_second(): - - user_numforms_second(p) -> number_format_t - - - Get reference to the current map value. - - - @param p (C++: user_numforms_iterator_t) - - -ida_hexrays.user_numforms_size(): - - user_numforms_size(map) -> size_t - - - Get size of user_numforms_t. - - - @param map (C++: user_numforms_t *) - - -class ida_hexrays.user_numforms_t(): - - Proxy of C++ std::map<(operand_locator_t,number_format_t)> class - - -ida_hexrays.user_numforms_t.at(): - - at(self, _Keyval) -> number_format_t - - -class ida_hexrays.user_numforms_t.keytype(): - - Proxy of C++ operand_locator_t class - - -ida_hexrays.user_numforms_t.keytype.compare(): - - compare(self, r) -> int - - -ida_hexrays.user_numforms_t.keytype.ea: - operand_locator_t_ea_get(self) -> ea_t - -ida_hexrays.user_numforms_t.keytype.opnum: - operand_locator_t_opnum_get(self) -> int - -ida_hexrays.user_numforms_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_numforms_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_numforms_t.setdefault(): - - Sets the value associated with the provided key. - - -class ida_hexrays.user_numforms_t.valuetype(): - - Proxy of C++ number_format_t class - - -ida_hexrays.user_numforms_t.valuetype.flags: - number_format_t_flags_get(self) -> flags_t - -ida_hexrays.user_numforms_t.valuetype.get_radix(): - - get_radix(self) -> int - - -ida_hexrays.user_numforms_t.valuetype.is_char(): - - is_char(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_dec(): - - is_dec(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_enum(): - - is_enum(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_fixed(): - - is_fixed(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_hex(): - - is_hex(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_numop(): - - is_numop(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_oct(): - - is_oct(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_stroff(): - - is_stroff(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.needs_to_be_inverted(): - - needs_to_be_inverted(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.opnum: - number_format_t_opnum_get(self) -> char - -ida_hexrays.user_numforms_t.valuetype.org_nbytes: - number_format_t_org_nbytes_get(self) -> char - -ida_hexrays.user_numforms_t.valuetype.props: - number_format_t_props_get(self) -> char - -ida_hexrays.user_numforms_t.valuetype.serial: - number_format_t_serial_get(self) -> uchar - -ida_hexrays.user_numforms_t.valuetype.type_name: - number_format_t_type_name_get(self) -> qstring * - -ida_hexrays.user_unions_begin(): - - user_unions_begin(map) -> user_unions_iterator_t - - - Get iterator pointing to the beginning of user_unions_t. - - - @param map (C++: const user_unions_t *) - - -ida_hexrays.user_unions_clear(): - - user_unions_clear(map) - - - Clear user_unions_t. - - - @param map (C++: user_unions_t *) - - -ida_hexrays.user_unions_end(): - - user_unions_end(map) -> user_unions_iterator_t - - - Get iterator pointing to the end of user_unions_t. - - - @param map (C++: const user_unions_t *) - - -ida_hexrays.user_unions_erase(): - - user_unions_erase(map, p) - - - Erase current element from user_unions_t. - - - @param map (C++: user_unions_t *) - @param p (C++: user_unions_iterator_t) - - -ida_hexrays.user_unions_find(): - - user_unions_find(map, key) -> user_unions_iterator_t - - - Find the specified key in user_unions_t. - - - @param map (C++: const user_unions_t *) - @param key (C++: const ea_t &) - - -ida_hexrays.user_unions_first(): - - user_unions_first(p) -> ea_t const & - - - Get reference to the current map key. - - - @param p (C++: user_unions_iterator_t) - - -ida_hexrays.user_unions_free(): - - user_unions_free(map) - - - Delete user_unions_t instance. - - - @param map (C++: user_unions_t *) - - -ida_hexrays.user_unions_insert(): - - user_unions_insert(map, key, val) -> user_unions_iterator_t - - - Insert new (ea_t, intvec_t) pair into user_unions_t. - - - @param map (C++: user_unions_t *) - @param key (C++: const ea_t &) - @param val (C++: const intvec_t &) - - -class ida_hexrays.user_unions_iterator_t(): - - Proxy of C++ user_unions_iterator_t class - - -ida_hexrays.user_unions_iterator_t.x: - user_unions_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.user_unions_new(): - - user_unions_new() -> user_unions_t - - - Create a new user_unions_t instance. - - -ida_hexrays.user_unions_next(): - - user_unions_next(p) -> user_unions_iterator_t - - - Move to the next element. - - - @param p (C++: user_unions_iterator_t) - - -ida_hexrays.user_unions_prev(): - - user_unions_prev(p) -> user_unions_iterator_t - - - Move to the previous element. - - - @param p (C++: user_unions_iterator_t) - - -ida_hexrays.user_unions_second(): - - user_unions_second(p) -> intvec_t - - - Get reference to the current map value. - - - @param p (C++: user_unions_iterator_t) - - -ida_hexrays.user_unions_size(): - - user_unions_size(map) -> size_t - - - Get size of user_unions_t. - - - @param map (C++: user_unions_t *) - - -class ida_hexrays.user_unions_t(): - - Proxy of C++ std::map<(ea_t,intvec_t)> class - - -ida_hexrays.user_unions_t.at(): - - at(self, _Keyval) -> intvec_t - - -ida_hexrays.user_unions_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_unions_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_unions_t.setdefault(): - - Sets the value associated with the provided key. - - -class ida_hexrays.user_unions_t.valuetype(): - - Proxy of C++ qvector<(int)> class - - -ida_hexrays.user_unions_t.valuetype.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.user_unions_t.valuetype.append(): - - push_back(self, x) - push_back(self) -> int & - - -ida_hexrays.user_unions_t.valuetype.at(): - - __getitem__(self, i) -> int const & - - -ida_hexrays.user_unions_t.valuetype.begin(): - - begin(self) -> qvector< int >::iterator - begin(self) -> qvector< int >::const_iterator - - -ida_hexrays.user_unions_t.valuetype.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.user_unions_t.valuetype.clear(): - - clear(self) - - -ida_hexrays.user_unions_t.valuetype.empty(): - - empty(self) -> bool - - -ida_hexrays.user_unions_t.valuetype.end(): - - end(self) -> qvector< int >::iterator - end(self) -> qvector< int >::const_iterator - - -ida_hexrays.user_unions_t.valuetype.erase(): - - erase(self, it) -> qvector< int >::iterator - erase(self, first, last) -> qvector< int >::iterator - - -ida_hexrays.user_unions_t.valuetype.extract(): - - extract(self) -> int * - - -ida_hexrays.user_unions_t.valuetype.find(): - - find(self, x) -> qvector< int >::iterator - find(self, x) -> qvector< int >::const_iterator - - -ida_hexrays.user_unions_t.valuetype.has(): - - has(self, x) -> bool - - -ida_hexrays.user_unions_t.valuetype.inject(): - - inject(self, s, len) - - -ida_hexrays.user_unions_t.valuetype.insert(): - - insert(self, it, x) -> qvector< int >::iterator - - -ida_hexrays.user_unions_t.valuetype.pop_back(): - - pop_back(self) - - -ida_hexrays.user_unions_t.valuetype.push_back(): - - push_back(self, x) - push_back(self) -> int & - - -ida_hexrays.user_unions_t.valuetype.qclear(): - - qclear(self) - - -ida_hexrays.user_unions_t.valuetype.reserve(): - - reserve(self, cnt) - - -ida_hexrays.user_unions_t.valuetype.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.user_unions_t.valuetype.size(): - - size(self) -> size_t - - -ida_hexrays.user_unions_t.valuetype.swap(): - - swap(self, r) - - -ida_hexrays.user_unions_t.valuetype.truncate(): - - truncate(self) - - -class ida_hexrays.uval_ivl_ivlset_t(): - - Proxy of C++ ivlset_tpl<(ivl_t,uval_t)> class - - -ida_hexrays.uval_ivl_ivlset_t.all_values(): - - all_values(self) -> bool - - -ida_hexrays.uval_ivl_ivlset_t.begin(): - - begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator - begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.uval_ivl_ivlset_t.clear(): - - clear(self) - - -ida_hexrays.uval_ivl_ivlset_t.empty(): - - empty(self) -> bool - - -ida_hexrays.uval_ivl_ivlset_t.end(): - - end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator - end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.uval_ivl_ivlset_t.getivl(): - - getivl(self, idx) -> ivl_t - - -ida_hexrays.uval_ivl_ivlset_t.lastivl(): - - lastivl(self) -> ivl_t - - -ida_hexrays.uval_ivl_ivlset_t.nivls(): - - nivls(self) -> size_t - - -ida_hexrays.uval_ivl_ivlset_t.qclear(): - - qclear(self) - - -ida_hexrays.uval_ivl_ivlset_t.set_all_values(): - - set_all_values(self) - - -ida_hexrays.uval_ivl_ivlset_t.single_value(): - - single_value(self, v) -> bool - - -ida_hexrays.uval_ivl_ivlset_t.swap(): - - swap(self, r) - - -class ida_hexrays.uval_ivl_t(): - - Proxy of C++ ivl_tpl<(uval_t)> class - - -ida_hexrays.uval_ivl_t.end(): - - end(self) -> unsigned-ea-like-numeric-type - - -ida_hexrays.uval_ivl_t.last(): - - last(self) -> unsigned-ea-like-numeric-type - - -ida_hexrays.uval_ivl_t.off: - uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.uval_ivl_t.size: - uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.uval_ivl_t.valid(): - - valid(self) -> bool - - -class ida_hexrays.valrng_t(): - - Proxy of C++ valrng_t class - - -ida_hexrays.valrng_t._print(): - - _print(self) - - -ida_hexrays.valrng_t.all_values(): - - all_values(self) -> bool - - -ida_hexrays.valrng_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.valrng_t.cvt_to_cmp(): - - cvt_to_cmp(self, strict) -> bool - - -ida_hexrays.valrng_t.cvt_to_single_value(): - - cvt_to_single_value(self) -> bool - - -ida_hexrays.valrng_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.valrng_t.empty(): - - empty(self) -> bool - - -ida_hexrays.valrng_t.get_size(): - - get_size(self) -> int - - -ida_hexrays.valrng_t.has(): - - has(self, v) -> bool - - -ida_hexrays.valrng_t.intersect_with(): - - intersect_with(self, r) -> bool - - -ida_hexrays.valrng_t.inverse(): - - inverse(self) - - -ida_hexrays.valrng_t.is_unknown(): - - is_unknown(self) -> bool - - -ida_hexrays.valrng_t.max_svalue(): - - max_svalue(self, size_) -> uvlr_t - max_svalue(self) -> uvlr_t - - -ida_hexrays.valrng_t.max_value(): - - max_value(self, size_) -> uvlr_t - max_value(self) -> uvlr_t - - -ida_hexrays.valrng_t.min_svalue(): - - min_svalue(self, size_) -> uvlr_t - min_svalue(self) -> uvlr_t - - -ida_hexrays.valrng_t.reduce_size(): - - reduce_size(self, new_size) -> bool - - -ida_hexrays.valrng_t.set_all(): - - set_all(self) - - -ida_hexrays.valrng_t.set_cmp(): - - set_cmp(self, cmp, _value) - - -ida_hexrays.valrng_t.set_eq(): - - set_eq(self, v) - - -ida_hexrays.valrng_t.set_none(): - - set_none(self) - - -ida_hexrays.valrng_t.set_unk(): - - set_unk(self) - - -ida_hexrays.valrng_t.swap(): - - swap(self, r) - - -ida_hexrays.valrng_t.unite_with(): - - unite_with(self, r) -> bool - - -class ida_hexrays.var_ref_t(): - - Proxy of C++ var_ref_t class - - -ida_hexrays.var_ref_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.var_ref_t.idx: - var_ref_t_idx_get(self) -> int - -ida_hexrays.var_ref_t.mba: - var_ref_t_mba_get(self) -> mbl_array_t - -class ida_hexrays.vc_printer_t(): - - Proxy of C++ vc_printer_t class - - -ida_hexrays.vc_printer_t._print(): - - _print(self, indent, format) -> int - - -ida_hexrays.vc_printer_t.func: - vc_printer_t_func_get(self) -> cfunc_t - -ida_hexrays.vc_printer_t.hdrlines: - vd_printer_t_hdrlines_get(self) -> int - -ida_hexrays.vc_printer_t.lastchar: - vc_printer_t_lastchar_get(self) -> char - -ida_hexrays.vc_printer_t.oneliner(): - - oneliner(self) -> bool - - -ida_hexrays.vc_printer_t.tmpbuf: - vd_printer_t_tmpbuf_get(self) -> qstring * - -class ida_hexrays.vd_failure_t(): - - Proxy of C++ vd_failure_t class - - -ida_hexrays.vd_failure_t.desc(): - - desc(self) -> qstring - - -ida_hexrays.vd_failure_t.hf: - vd_failure_t_hf_get(self) -> hexrays_failure_t - -class ida_hexrays.vd_interr_t(): - - Proxy of C++ vd_interr_t class - - -ida_hexrays.vd_interr_t.desc(): - - desc(self) -> qstring - - -ida_hexrays.vd_interr_t.hf: - vd_failure_t_hf_get(self) -> hexrays_failure_t - -class ida_hexrays.vd_printer_t(): - - Proxy of C++ vd_printer_t class - - -ida_hexrays.vd_printer_t._print(): - - _print(self, indent, format) -> int - - -ida_hexrays.vd_printer_t.hdrlines: - vd_printer_t_hdrlines_get(self) -> int - -ida_hexrays.vd_printer_t.tmpbuf: - vd_printer_t_tmpbuf_get(self) -> qstring * - -class ida_hexrays.vdloc_t(): - - Proxy of C++ vdloc_t class - - -ida_hexrays.vdloc_t.advance(): - - advance(self, delta) -> bool - - -ida_hexrays.vdloc_t.atype(): - - atype(self) -> argloc_type_t - - -ida_hexrays.vdloc_t.calc_offset(): - - calc_offset(self) -> sval_t - - -ida_hexrays.vdloc_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.vdloc_t.consume_rrel(): - - consume_rrel(self, p) - - -ida_hexrays.vdloc_t.consume_scattered(): - - consume_scattered(self, p) - - -ida_hexrays.vdloc_t.get_biggest(): - - get_biggest(self) -> argloc_t::biggest_t - - -ida_hexrays.vdloc_t.get_custom(): - - get_custom(self) -> void * - - -ida_hexrays.vdloc_t.get_ea(): - - get_ea(self) -> ea_t - - -ida_hexrays.vdloc_t.get_reginfo(): - - get_reginfo(self) -> uint32 - - -ida_hexrays.vdloc_t.get_rrel(): - - get_rrel(self) -> rrel_t - get_rrel(self) -> rrel_t - - -ida_hexrays.vdloc_t.has_reg(): - - has_reg(self) -> bool - - -ida_hexrays.vdloc_t.has_stkoff(): - - has_stkoff(self) -> bool - - -ida_hexrays.vdloc_t.is_aliasable(): - - is_aliasable(self, mb, size) -> bool - - -ida_hexrays.vdloc_t.is_badloc(): - - is_badloc(self) -> bool - - -ida_hexrays.vdloc_t.is_custom(): - - is_custom(self) -> bool - - -ida_hexrays.vdloc_t.is_ea(): - - is_ea(self) -> bool - - -ida_hexrays.vdloc_t.is_fragmented(): - - is_fragmented(self) -> bool - - -ida_hexrays.vdloc_t.is_mixed_scattered(): - - is_mixed_scattered(self) -> bool - - -ida_hexrays.vdloc_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.vdloc_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_hexrays.vdloc_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_hexrays.vdloc_t.is_rrel(): - - is_rrel(self) -> bool - - -ida_hexrays.vdloc_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.vdloc_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_hexrays.vdloc_t.reg1(): - - reg1(self) -> int - - -ida_hexrays.vdloc_t.reg2(): - - reg2(self) -> int - - -ida_hexrays.vdloc_t.regoff(): - - regoff(self) -> int - - -ida_hexrays.vdloc_t.scattered(): - - scattered(self) -> scattered_aloc_t - scattered(self) -> scattered_aloc_t - - -ida_hexrays.vdloc_t.set_badloc(): - - set_badloc(self) - - -ida_hexrays.vdloc_t.set_ea(): - - set_ea(self, _ea) - - -ida_hexrays.vdloc_t.set_reg1(): - - set_reg1(self, r1) - - -ida_hexrays.vdloc_t.set_reg2(): - - set_reg2(self, _reg1, _reg2) - - -ida_hexrays.vdloc_t.set_stkoff(): - - set_stkoff(self, off) - - -ida_hexrays.vdloc_t.stkoff(): - - stkoff(self) -> sval_t - - -ida_hexrays.vdloc_t.swap(): - - swap(self, r) - - -class ida_hexrays.vdui_t(): - - Proxy of C++ vdui_t class - - -ida_hexrays.vdui_t.calc_cmt_type(): - - calc_cmt_type(self, lnnum, cmttype) -> cmt_type_t - - -ida_hexrays.vdui_t.cfunc: - vdui_t_cfunc_get(self) -> cfuncptr_t - -ida_hexrays.vdui_t.clear(): - - clear(self) - - -ida_hexrays.vdui_t.collapse_item(): - - collapse_item(self, hide) -> bool - - -ida_hexrays.vdui_t.collapse_lvars(): - - collapse_lvars(self, hide) -> bool - - -ida_hexrays.vdui_t.cpos: - vdui_t_cpos_get(self) -> ctext_position_t - -ida_hexrays.vdui_t.ct: - vdui_t_ct_get(self) -> TWidget * - -ida_hexrays.vdui_t.ctree_to_disasm(): - - ctree_to_disasm(self) -> bool - - -ida_hexrays.vdui_t.del_orphan_cmts(): - - del_orphan_cmts(self) -> bool - - -ida_hexrays.vdui_t.edit_cmt(): - - edit_cmt(self, loc) -> bool - - -ida_hexrays.vdui_t.edit_func_cmt(): - - edit_func_cmt(self) -> bool - - -ida_hexrays.vdui_t.flags: - vdui_t_flags_get(self) -> int - -ida_hexrays.vdui_t.get_current_item(): - - get_current_item(self, idv) -> bool - - -ida_hexrays.vdui_t.get_current_label(): - - get_current_label(self) -> int - - -ida_hexrays.vdui_t.get_number(): - - get_number(self) -> cnumber_t - - -ida_hexrays.vdui_t.head: - vdui_t_head_get(self) -> ctree_item_t - -ida_hexrays.vdui_t.in_ctree(): - - in_ctree(self) -> bool - - -ida_hexrays.vdui_t.invert_bits(): - - invert_bits(self) -> bool - - -ida_hexrays.vdui_t.invert_sign(): - - invert_sign(self) -> bool - - -ida_hexrays.vdui_t.item: - vdui_t_item_get(self) -> ctree_item_t - -ida_hexrays.vdui_t.jump_enter(): - - jump_enter(self, idv, omflags) -> bool - - -ida_hexrays.vdui_t.last_code: - vdui_t_last_code_get(self) -> merror_t - -ida_hexrays.vdui_t.locked(): - - locked(self) -> bool - - -ida_hexrays.vdui_t.map_lvar(): - - map_lvar(self, frm, to) -> bool - - -ida_hexrays.vdui_t.mba: - vdui_t_mba_get(self) -> mbl_array_t - -ida_hexrays.vdui_t.refresh_cpos(): - - refresh_cpos(self, idv) -> bool - - -ida_hexrays.vdui_t.refresh_ctext(): - - refresh_ctext(self, activate=True) - - -ida_hexrays.vdui_t.refresh_view(): - - refresh_view(self, redo_mba) - - -ida_hexrays.vdui_t.rename_global(): - - rename_global(self, ea) -> bool - - -ida_hexrays.vdui_t.rename_label(): - - rename_label(self, label) -> bool - - -ida_hexrays.vdui_t.rename_lvar(): - - rename_lvar(self, v, name, is_user_name) -> bool - - -ida_hexrays.vdui_t.rename_strmem(): - - rename_strmem(self, sptr, mptr) -> bool - - -ida_hexrays.vdui_t.set_global_type(): - - set_global_type(self, ea) -> bool - - -ida_hexrays.vdui_t.set_locked(): - - set_locked(self, v) -> bool - - -ida_hexrays.vdui_t.set_lvar_cmt(): - - set_lvar_cmt(self, v, cmt) -> bool - - -ida_hexrays.vdui_t.set_lvar_type(): - - set_lvar_type(self, v, type) -> bool - - -ida_hexrays.vdui_t.set_noptr_lvar(): - - set_noptr_lvar(self, v) -> bool - - -ida_hexrays.vdui_t.set_num_enum(): - - set_num_enum(self) -> bool - - -ida_hexrays.vdui_t.set_num_radix(): - - set_num_radix(self, base) -> bool - - -ida_hexrays.vdui_t.set_num_stroff(): - - set_num_stroff(self) -> bool - - -ida_hexrays.vdui_t.set_strmem_type(): - - set_strmem_type(self, sptr, mptr) -> bool - - -ida_hexrays.vdui_t.set_valid(): - - set_valid(self, v) - - -ida_hexrays.vdui_t.set_visible(): - - set_visible(self, v) - - -ida_hexrays.vdui_t.split_item(): - - split_item(self, split) -> bool - - -ida_hexrays.vdui_t.switch_to(): - - switch_to(self, f, activate) - - -ida_hexrays.vdui_t.tail: - vdui_t_tail_get(self) -> ctree_item_t - -ida_hexrays.vdui_t.toplevel: - vdui_t_toplevel_get(self) -> TWidget * - -ida_hexrays.vdui_t.ui_edit_lvar_cmt(): - - ui_edit_lvar_cmt(self, v) -> bool - - -ida_hexrays.vdui_t.ui_map_lvar(): - - ui_map_lvar(self, v) -> bool - - -ida_hexrays.vdui_t.ui_rename_lvar(): - - ui_rename_lvar(self, v) -> bool - - -ida_hexrays.vdui_t.ui_set_call_type(): - - ui_set_call_type(self, e) -> bool - - -ida_hexrays.vdui_t.ui_set_lvar_type(): - - ui_set_lvar_type(self, v) -> bool - - -ida_hexrays.vdui_t.ui_unmap_lvar(): - - ui_unmap_lvar(self, v) -> bool - - -ida_hexrays.vdui_t.valid(): - - valid(self) -> bool - - -ida_hexrays.vdui_t.view_idx: - vdui_t_view_idx_get(self) -> int - -ida_hexrays.vdui_t.visible(): - - visible(self) -> bool - - -class ida_hexrays.vivl_t(): - - Proxy of C++ vivl_t class - - -ida_hexrays.vivl_t._print(): - - _print(self) - - -ida_hexrays.vivl_t.add(): - - add(self, width) -> voff_t - - -ida_hexrays.vivl_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.vivl_t.contains(): - - contains(self, voff2) -> bool - - -ida_hexrays.vivl_t.defined(): - - defined(self) -> bool - - -ida_hexrays.vivl_t.diff(): - - diff(self, r) -> sval_t - - -ida_hexrays.vivl_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.vivl_t.extend_to_cover(): - - extend_to_cover(self, r) -> bool - - -ida_hexrays.vivl_t.get_reg(): - - get_reg(self) -> mreg_t - - -ida_hexrays.vivl_t.get_stkoff(): - - get_stkoff(self) -> sval_t - - -ida_hexrays.vivl_t.inc(): - - inc(self, delta) - - -ida_hexrays.vivl_t.includes(): - - includes(self, r) -> bool - - -ida_hexrays.vivl_t.intersect(): - - intersect(self, r) -> uval_t - - -ida_hexrays.vivl_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.vivl_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_hexrays.vivl_t.off: - voff_t_off_get(self) -> sval_t - -ida_hexrays.vivl_t.overlap(): - - overlap(self, r) -> bool - - -ida_hexrays.vivl_t.set(): - - set(self, _type, _off, _size=0) - set(self, voff, _size) - - -ida_hexrays.vivl_t.set_reg(): - - set_reg(self, mreg, sz=0) - - -ida_hexrays.vivl_t.set_stkoff(): - - set_stkoff(self, stkoff, sz=0) - - -ida_hexrays.vivl_t.size: - vivl_t_size_get(self) -> int - -ida_hexrays.vivl_t.type: - voff_t_type_get(self) -> mopt_t - -ida_hexrays.vivl_t.undef(): - - undef(self) - - -class ida_hexrays.voff_t(): - - Proxy of C++ voff_t class - - -ida_hexrays.voff_t.add(): - - add(self, width) -> voff_t - - -ida_hexrays.voff_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.voff_t.defined(): - - defined(self) -> bool - - -ida_hexrays.voff_t.diff(): - - diff(self, r) -> sval_t - - -ida_hexrays.voff_t.get_reg(): - - get_reg(self) -> mreg_t - - -ida_hexrays.voff_t.get_stkoff(): - - get_stkoff(self) -> sval_t - - -ida_hexrays.voff_t.inc(): - - inc(self, delta) - - -ida_hexrays.voff_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.voff_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_hexrays.voff_t.off: - voff_t_off_get(self) -> sval_t - -ida_hexrays.voff_t.set(): - - set(self, _type, _off) - - -ida_hexrays.voff_t.set_reg(): - - set_reg(self, mreg) - - -ida_hexrays.voff_t.set_stkoff(): - - set_stkoff(self, stkoff) - - -ida_hexrays.voff_t.type: - voff_t_type_get(self) -> mopt_t - -ida_hexrays.voff_t.undef(): - - undef(self) - - - -=== ida_hexrays EPYDOC INJECTIONS === -ida_hexrays.ACFL_BLKOPT -""" -perform interblock transformations -""" - -ida_hexrays.ACFL_GLBDEL -""" -perform dead code eliminition -""" - -ida_hexrays.ACFL_GLBPROP -""" -perform global propagation -""" - -ida_hexrays.ACFL_GUESS -""" -may guess calling conventions -""" - -ida_hexrays.ACFL_LOCOPT -""" -perform local propagation (requires ACFL_BLKOPT) -""" - -ida_hexrays.ANCHOR_BLKCMT -""" -block comment (for ctree items) -""" - -ida_hexrays.ANCHOR_CITEM -""" -c-tree item -""" - -ida_hexrays.ANCHOR_ITP -""" -item type preciser -""" - -ida_hexrays.ANCHOR_LVAR -""" -declaration of local variable -""" - -ida_hexrays.CFL_FINAL -""" -call type is final, should not be changed -""" - -ida_hexrays.CFL_HELPER -""" -created from a decompiler helper function -""" - -ida_hexrays.CFS_BOUNDS -""" -'eamap' and 'boundaries' are ready -""" - -ida_hexrays.CFS_LVARS_HIDDEN -""" -local variable definitions are collapsed -""" - -ida_hexrays.CFS_TEXT -""" -'sv' is ready (and hdrlines) -""" - -ida_hexrays.CHF_FAKE -""" -fake chain created by widen_chains() -""" - -ida_hexrays.CHF_INITED -""" -is chain initialized? (valid only after lvar allocation) -""" - -ida_hexrays.CHF_OVER -""" -overlapped chain -""" - -ida_hexrays.CHF_PASSTHRU -""" -pass-thru chain, must use the input variable to the block -""" - -ida_hexrays.CHF_REPLACED -""" -chain operands have been replaced? -""" - -ida_hexrays.CHF_TERM -""" -terminating chain; the variable does not survive across the block -""" - -ida_hexrays.CIT_COLLAPSED -""" -display element in collapsed form -""" - -ida_hexrays.CPBLK_FAST -""" -do not update minbstkref and minbargref -""" - -ida_hexrays.CPBLK_MINREF -""" -update minbstkref and minbargref -""" - -ida_hexrays.CPBLK_OPTJMP -""" -if it becomes useless - -del the jump insn at the end of the block -""" - -ida_hexrays.CV_FAST -""" -do not maintain parent information -""" - -ida_hexrays.CV_INSNS -""" -visit only statements, prune all expressions do not use before the -final ctree maturity because expressions may contain statements at -intermediate stages (see cot_insn). Otherwise you risk missing -statements embedded into expressions. -""" - -ida_hexrays.CV_PARENTS -""" -maintain parent information -""" - -ida_hexrays.CV_POST -""" -call the leave...() functions -""" - -ida_hexrays.CV_PRUNE -""" -this bit is set by visit...() to prune the walk -""" - -ida_hexrays.CV_RESTART -""" -restart enumeration at the top expr (apply_to_exprs) -""" - -ida_hexrays.DECOMP_NO_CACHE -""" -do not use decompilation cache -""" - -ida_hexrays.DECOMP_NO_FRAME -""" -do not use function frame info (only snippet mode) -""" - -ida_hexrays.DECOMP_NO_WAIT -""" -do not display waitbox -""" - -ida_hexrays.DECOMP_WARNINGS -""" -display warnings in the output window -""" - -ida_hexrays.EQ_CMPDEST -""" -compare instruction destinations -""" - -ida_hexrays.EQ_IGNCODE -""" -ignore instruction opcodes -""" - -ida_hexrays.EQ_IGNSIZE -""" -ignore operand sizes -""" - -ida_hexrays.EQ_OPTINSN -""" -optimize mop_d operands -""" - -ida_hexrays.EXFL_ALL -""" -all currently defined bits -""" - -ida_hexrays.EXFL_ALONE -""" -standalone helper -""" - -ida_hexrays.EXFL_CPADONE -""" -pointer arithmetic correction done -""" - -ida_hexrays.EXFL_CSTR -""" -string literal -""" - -ida_hexrays.EXFL_FPOP -""" -floating point operation -""" - -ida_hexrays.EXFL_JUMPOUT -""" -jump out-of-function -""" - -ida_hexrays.EXFL_LVALUE -""" -expression is lvalue even if it doesn't look like it -""" - -ida_hexrays.EXFL_PARTIAL -""" -type of the expression is considered partial -""" - -ida_hexrays.EXFL_UNDEF -""" -expression uses undefined value -""" - -ida_hexrays.EXFL_VFTABLE -""" -is ptr to vftable (used for cot_memptr, cot_memref) -""" - -ida_hexrays.FCI_DEAD -""" -some return registers were determined dead -""" - -ida_hexrays.FCI_FINAL -""" -call type is final, should not be changed -""" - -ida_hexrays.FCI_HASCALL -""" -A function is an synthetic helper combined from several instructions -and at least one of them was a call to a real functions -""" - -ida_hexrays.FCI_HASFMT -""" -printf- or scanf-style format string - -A variadic function with recognized -""" - -ida_hexrays.FCI_NORET -""" -call does not return -""" - -ida_hexrays.FCI_NOSIDE -""" -call does not have side effects -""" - -ida_hexrays.FCI_PROP -""" -call has been propagated -""" - -ida_hexrays.FCI_PURE -""" -pure function -""" - -ida_hexrays.FCI_SPLOK -""" -spoiled/visible_memory lists have been optimized. for some functions -we can reduce them as soon as information about the arguments becomes -available. in order not to try optimize them again we use this bit. -""" - -ida_hexrays.FD_BACKWARD -""" -search direction -""" - -ida_hexrays.FD_DEF -""" -look for definition -""" - -ida_hexrays.FD_DIRTY -""" -by function calls and indirect memory access - -ignore possible implicit definitions -""" - -ida_hexrays.FD_FORWARD -""" -search direction -""" - -ida_hexrays.FD_USE -""" -look for use -""" - -ida_hexrays.GCA_ALLOC -""" -enumerate only allocated chains -""" - -ida_hexrays.GCA_EMPTY -""" -include empty chains -""" - -ida_hexrays.GCA_NALLOC -""" -enumerate only non-allocated chains -""" - -ida_hexrays.GCA_OFIRST -""" -consider only chains of the first block -""" - -ida_hexrays.GCA_OLAST -""" -consider only chains of the last block -""" - -ida_hexrays.GCA_SPEC -""" -include chains for special registers -""" - -ida_hexrays.GCO_DEF -""" -is destination operand? -""" - -ida_hexrays.GCO_REG -""" -is register? otherwise a stack variable -""" - -ida_hexrays.GCO_STK -""" -a stack variable -""" - -ida_hexrays.GCO_USE -""" -is source operand? -""" - -ida_hexrays.GLN_ALL -""" -get both -""" - -ida_hexrays.GLN_CURRENT -""" -get label of the current item -""" - -ida_hexrays.GLN_GOTO_TARGET -""" -get goto target -""" - -ida_hexrays.IPROP_ASSERT -""" -assertion: usually mov #val, op. assertions are used to help the -optimizer. assertions are ignored when generating ctree -""" - -ida_hexrays.IPROP_CLNPOP -""" -(e.g. "pop ecx" is often used for that) - -the purpose of the instruction is to clean stack -""" - -ida_hexrays.IPROP_COMBINED -""" -insn has been modified because of a partial reference -""" - -ida_hexrays.IPROP_DONT_COMB -""" -may not combine this instruction with others -""" - -ida_hexrays.IPROP_DONT_PROP -""" -may not propagate -""" - -ida_hexrays.IPROP_EXTSTX -""" -this is m_ext propagated into m_stx -""" - -ida_hexrays.IPROP_FARCALL -""" -call of a far function using push cs/call sequence -""" - -ida_hexrays.IPROP_FPINSN -""" -floating point insn -""" - -ida_hexrays.IPROP_IGNLOWSRC -""" -low part of the instruction source operand has been created -artificially (this bit is used only for 'and x, 80...') -""" - -ida_hexrays.IPROP_INV_JX -""" -inverted conditional jump -""" - -ida_hexrays.IPROP_MULTI_MOV -""" -(example: STM on ARM may transfer multiple registers) - -the minsn was generated as part of insn that moves multiple -registersbits that can be set by plugins: -""" - -ida_hexrays.IPROP_OPTIONAL -""" -optional instruction -""" - -ida_hexrays.IPROP_PERSIST -""" -persistent insn; they are not destroyed -""" - -ida_hexrays.IPROP_SPLIT -""" -the instruction has been split: -""" - -ida_hexrays.IPROP_SPLIT1 -""" -into 1 byte -""" - -ida_hexrays.IPROP_SPLIT2 -""" -into 2 bytes -""" - -ida_hexrays.IPROP_SPLIT4 -""" -into 4 bytes -""" - -ida_hexrays.IPROP_SPLIT8 -""" -into 8 bytes -""" - -ida_hexrays.IPROP_TAILCALL -""" -tail call -""" - -ida_hexrays.IPROP_WAS_NORET -""" -was noret icall -""" - -ida_hexrays.IPROP_WILDMATCH -""" -match multiple insns -""" - -ida_hexrays.LOCOPT_ALL -""" -is not set, only dirty blocks will be optimized - -redo optimization for all blocks. if this bit -""" - -ida_hexrays.LOCOPT_REFINE -""" -refine return type, ok to fail -""" - -ida_hexrays.LOCOPT_REFINE2 -""" -refine return type, try harder -""" - -ida_hexrays.LVINF_FORCE -""" -force allocation of a new variable. forces the decompiler to create a -new variable at ll.defea -""" - -ida_hexrays.LVINF_KEEP -""" -preserve saved user settings regardless of vars for example, if a var -loses all its user-defined attributes or even gets destroyed, keep its -'lvar_saved_info_t' . this is used for ephemeral variables that get -destroyed by macro recognition. -""" - -ida_hexrays.LVINF_NOPTR -""" -variable type should not be a pointer -""" - -ida_hexrays.MBA_ASRPROP -""" -assertion have been propagated -""" - -ida_hexrays.MBA_ASRTOK -""" -assertions have been generated -""" - -ida_hexrays.MBA_CALLS -""" -callinfo has been built -""" - -ida_hexrays.MBA_CHVARS -""" -can verify chain varnums -""" - -ida_hexrays.MBA_CMBBLK -""" -request to combine blocks -""" - -ida_hexrays.MBA_CMNSTK -""" -stkvars+stkargs should be considered as one area -""" - -ida_hexrays.MBA_COLGDL -""" -display graph after each reduction -""" - -ida_hexrays.MBA_DELPAIRS -""" -pairs have been deleted once -""" - -ida_hexrays.MBA_GLBOPT -""" -microcode has been optimized globally -""" - -ida_hexrays.MBA_INSGDL -""" -display instruction in graphs -""" - -ida_hexrays.MBA_LOADED -""" -loaded gdl, no instructions (debugging) -""" - -ida_hexrays.MBA_LVARS0 -""" -lvar pre-allocation has been performed -""" - -ida_hexrays.MBA_LVARS1 -""" -lvar real allocation has been performed -""" - -ida_hexrays.MBA_NICE -""" -apply transformations to c code -""" - -ida_hexrays.MBA_NOFUNC -""" -function is not present, addresses might be wrong -""" - -ida_hexrays.MBA_NUMADDR -""" -display definition addresses for numbers -""" - -ida_hexrays.MBA_OVERVAR -""" -an overlapped variable has been detected -""" - -ida_hexrays.MBA_PASSREGS -""" -has 'mcallinfo_t::pass_regs' -""" - -ida_hexrays.MBA_PATTERN -""" -microcode pattern, callinfo is present -""" - -ida_hexrays.MBA_PRCDEFS -""" -use precise defeas for chain-allocated lvars -""" - -ida_hexrays.MBA_PREOPT -""" -preoptimization stage complete -""" - -ida_hexrays.MBA_REFINE -""" -may refine return value size -""" - -ida_hexrays.MBA_RETFP -""" -function returns floating point value -""" - -ida_hexrays.MBA_RETREF -""" -return type has been refined -""" - -ida_hexrays.MBA_SAVRST -""" -save-restore analysis has been performed -""" - -ida_hexrays.MBA_SHORT -""" -use short display -""" - -ida_hexrays.MBA_SPLINFO -""" -(final_type ? idb_spoiled : spoiled_regs) is valid -""" - -ida_hexrays.MBA_THUNK -""" -thunk function -""" - -ida_hexrays.MBA_VALNUM -""" -display value numbers -""" - -ida_hexrays.MBA_WINGR32 -""" -use wingraph32 -""" - -ida_hexrays.MBL_BACKPROP -""" -performed backprop_cc -""" - -ida_hexrays.MBL_CALL -""" -call information has been built -""" - -ida_hexrays.MBL_COMB -""" -needs "combine" pass -""" - -ida_hexrays.MBL_DEAD -""" -needs "eliminate deads" pass -""" - -ida_hexrays.MBL_DMT64 -""" -needs "demote 64bits" -""" - -ida_hexrays.MBL_DSLOT -""" -block for delay slot -""" - -ida_hexrays.MBL_FAKE -""" -fake block (after a tail call) -""" - -ida_hexrays.MBL_GOTO -""" -this block is a goto target -""" - -ida_hexrays.MBL_INCONST -""" -inconsistent lists: we are building them -""" - -ida_hexrays.MBL_LIST -""" -use/def lists are ready (not dirty) -""" - -ida_hexrays.MBL_NONFAKE -""" -regular block -""" - -ida_hexrays.MBL_NORET -""" -dead end block: doesn't return execution control -""" - -ida_hexrays.MBL_PRIV -""" -the specified are accepted (used in patterns) - -private block - no instructions except -""" - -ida_hexrays.MBL_PROP -""" -needs 'propagation' pass -""" - -ida_hexrays.MBL_PUSH -""" -needs "convert push/pop instructions" -""" - -ida_hexrays.MBL_TCAL -""" -aritifical call block for tail calls -""" - -ida_hexrays.MBL_VALRANGES -""" -should optimize using value ranges -""" - -ida_hexrays.NALT_VD -""" -this index is not used by ida -""" - -ida_hexrays.NF_BINVDONE -""" -temporary internal bit: inverting bits is done -""" - -ida_hexrays.NF_BITNOT -""" -The user asked to invert bits of the constant. -""" - -ida_hexrays.NF_FIXED -""" -number format has been defined by the user -""" - -ida_hexrays.NF_NEGATE -""" -The user asked to negate the constant. -""" - -ida_hexrays.NF_NEGDONE -""" -temporary internal bit: negation has been performed -""" - -ida_hexrays.NF_STROFF -""" -internal bit: used as stroff, valid iff 'is_stroff()' -""" - -ida_hexrays.OPROP_CCFLAGS -""" -condition codes register value -""" - -ida_hexrays.OPROP_FLOAT -""" -possibly floating value -""" - -ida_hexrays.OPROP_IMPDONE -""" -imported operand (a pointer) has been dereferenced -""" - -ida_hexrays.OPROP_UDEFVAL -""" -uses undefined value -""" - -ida_hexrays.OPROP_UDT -""" -a struct or union -""" - -ida_hexrays.OPTI_ADDREXPRS -""" -optimize all address expressions (&x+N; &x-&y) -""" - -ida_hexrays.OPTI_COMBINSNS -""" -may combine insns (only for optimize_insn) -""" - -ida_hexrays.OPTI_MINSTKREF -""" -may update minstkref -""" - -ida_hexrays.OPTI_NO_LDXOPT -""" -do not optimize low/high(ldx) -""" - -ida_hexrays.SHINS_LDXEA -""" -display address of ldx expressions (not used) -""" - -ida_hexrays.SHINS_NUMADDR -""" -display definition addresses for numbers -""" - -ida_hexrays.SHINS_SHORT -""" -do not display use-def chains and other attrs -""" - -ida_hexrays.SHINS_VALNUM -""" -display value numbers -""" - -ida_hexrays.ULV_PRECISE_DEFEA -""" -Use precise defea's for lvar locations. -""" - -ida_hexrays.VDRUN_APPEND -""" -Create a new file or append to existing file. -""" - -ida_hexrays.VDRUN_CMDLINE -""" -called from ida's command line -""" - -ida_hexrays.VDRUN_LUMINA -""" -use lumina server -""" - -ida_hexrays.VDRUN_MAYSTOP -""" -the user can cancel decompilation -""" - -ida_hexrays.VDRUN_NEWFILE -""" -Create a new file or overwrite existing file. -""" - -ida_hexrays.VDRUN_ONLYNEW -""" -Fail if output file already exists. -""" - -ida_hexrays.VDRUN_SENDIDB -""" -Send problematic databases to hex-rays.com. -""" - -ida_hexrays.VDRUN_SILENT -""" -Silent decompilation. -""" - -ida_hexrays.VDRUN_STATS -""" -print statistics into vd_stats.txt -""" - -ida_hexrays.VDUI_LOCKED -""" -is locked? -""" - -ida_hexrays.VDUI_VALID -""" -is valid? -""" - -ida_hexrays.VDUI_VISIBLE -""" -is visible? -""" - -ida_hexrays.VR_AT_END -""" -get value ranges after the instruction or at the block end, just after -the last instruction (if M is NULL) -""" - -ida_hexrays.VR_AT_START -""" -at the block start (if M is NULL) - -get value ranges before the instruction or -""" - -ida_hexrays.VR_EXACT -""" -valrng size will be >= vivl.size - -find exact match. if not set, the returned -""" -=== ida_hexrays EPYDOC INJECTIONS END === -ida_ida.calc_default_idaplace_flags(): - - calc_default_idaplace_flags() -> int - - - Get default disassembly line options. - - -class ida_ida.compiler_info_t(): - - Proxy of C++ compiler_info_t class - - -ida_ida.compiler_info_t.cm: - compiler_info_t_cm_get(self) -> cm_t - -ida_ida.compiler_info_t.defalign: - compiler_info_t_defalign_get(self) -> uchar - -ida_ida.compiler_info_t.id: - compiler_info_t_id_get(self) -> comp_t - -ida_ida.compiler_info_t.size_b: - compiler_info_t_size_b_get(self) -> uchar - -ida_ida.compiler_info_t.size_e: - compiler_info_t_size_e_get(self) -> uchar - -ida_ida.compiler_info_t.size_i: - compiler_info_t_size_i_get(self) -> uchar - -ida_ida.compiler_info_t.size_l: - compiler_info_t_size_l_get(self) -> uchar - -ida_ida.compiler_info_t.size_ldbl: - compiler_info_t_size_ldbl_get(self) -> uchar - -ida_ida.compiler_info_t.size_ll: - compiler_info_t_size_ll_get(self) -> uchar - -ida_ida.compiler_info_t.size_s: - compiler_info_t_size_s_get(self) -> uchar - -class ida_ida.idainfo(): - - Proxy of C++ idainfo class - - -ida_ida.idainfo.abibits: - idainfo_abibits_get(self) -> uint32 - -ida_ida.idainfo.abiname: - - get_abiname(self) -> qstring - - -ida_ida.idainfo.af: - idainfo_af_get(self) -> uint32 - -ida_ida.idainfo.af2: - idainfo_af2_get(self) -> uint32 - -ida_ida.idainfo.appcall_options: - idainfo_appcall_options_get(self) -> uint32 - -ida_ida.idainfo.apptype: - idainfo_apptype_get(self) -> ushort - -ida_ida.idainfo.asmtype: - idainfo_asmtype_get(self) -> uchar - -ida_ida.idainfo.baseaddr: - idainfo_baseaddr_get(self) -> uval_t - -ida_ida.idainfo.bin_prefix_size: - idainfo_bin_prefix_size_get(self) -> short - -ida_ida.idainfo.cc: - idainfo_cc_get(self) -> compiler_info_t - -ida_ida.idainfo.comment: - idainfo_comment_get(self) -> uchar - -ida_ida.idainfo.database_change_count: - idainfo_database_change_count_get(self) -> uint32 - -ida_ida.idainfo.datatypes: - idainfo_datatypes_get(self) -> uval_t - -ida_ida.idainfo.demnames: - idainfo_demnames_get(self) -> uchar - -ida_ida.idainfo.filetype: - idainfo_filetype_get(self) -> ushort - -ida_ida.idainfo.get_abiname(): - - get_abiname(self) -> qstring - - -ida_ida.idainfo.get_maxEA(): - - get_maxEA(self) -> ea_t - - -ida_ida.idainfo.get_minEA(): - - get_minEA(self) -> ea_t - - -ida_ida.idainfo.get_procName(): - - get_procName(self) -> qstring - - -ida_ida.idainfo.highoff: - idainfo_highoff_get(self) -> ea_t - -ida_ida.idainfo.indent: - idainfo_indent_get(self) -> uchar - -ida_ida.idainfo.lenxref: - idainfo_lenxref_get(self) -> ushort - -ida_ida.idainfo.lflags: - idainfo_lflags_get(self) -> uint32 - -ida_ida.idainfo.listnames: - idainfo_listnames_get(self) -> uchar - -ida_ida.idainfo.long_demnames: - idainfo_long_demnames_get(self) -> uint32 - -ida_ida.idainfo.lowoff: - idainfo_lowoff_get(self) -> ea_t - -ida_ida.idainfo.main: - idainfo_main_get(self) -> ea_t - -ida_ida.idainfo.margin: - idainfo_margin_get(self) -> ushort - -ida_ida.idainfo.maxEA: - - get_maxEA(self) -> ea_t - - -ida_ida.idainfo.max_autoname_len: - idainfo_max_autoname_len_get(self) -> ushort - -ida_ida.idainfo.max_ea: - idainfo_max_ea_get(self) -> ea_t - -ida_ida.idainfo.maxref: - idainfo_maxref_get(self) -> uval_t - -ida_ida.idainfo.minEA: - - get_minEA(self) -> ea_t - - -ida_ida.idainfo.min_ea: - idainfo_min_ea_get(self) -> ea_t - -ida_ida.idainfo.nametype: - idainfo_nametype_get(self) -> char - -ida_ida.idainfo.omax_ea: - idainfo_omax_ea_get(self) -> ea_t - -ida_ida.idainfo.omin_ea: - idainfo_omin_ea_get(self) -> ea_t - -ida_ida.idainfo.ostype: - idainfo_ostype_get(self) -> ushort - -ida_ida.idainfo.outflags: - idainfo_outflags_get(self) -> uint32 - -ida_ida.idainfo.procName: - - get_procName(self) -> qstring - - -ida_ida.idainfo.procname: - idainfo_procname_get(self) -> char [16] - -ida_ida.idainfo.refcmtnum: - idainfo_refcmtnum_get(self) -> uchar - -ida_ida.idainfo.s_cmtflg: - idainfo_s_cmtflg_get(self) -> uchar - -ida_ida.idainfo.s_genflags: - idainfo_s_genflags_get(self) -> ushort - -ida_ida.idainfo.s_limiter: - idainfo_s_limiter_get(self) -> uchar - -ida_ida.idainfo.s_prefflag: - idainfo_s_prefflag_get(self) -> uchar - -ida_ida.idainfo.s_xrefflag: - idainfo_s_xrefflag_get(self) -> uchar - -ida_ida.idainfo.set_maxEA(): - - set_maxEA(self, ea) - - -ida_ida.idainfo.set_minEA(): - - set_minEA(self, ea) - - -ida_ida.idainfo.short_demnames: - idainfo_short_demnames_get(self) -> uint32 - -ida_ida.idainfo.specsegs: - idainfo_specsegs_get(self) -> uchar - -ida_ida.idainfo.start_cs: - idainfo_start_cs_get(self) -> sel_t - -ida_ida.idainfo.start_ea: - idainfo_start_ea_get(self) -> ea_t - -ida_ida.idainfo.start_ip: - idainfo_start_ip_get(self) -> ea_t - -ida_ida.idainfo.start_sp: - idainfo_start_sp_get(self) -> ea_t - -ida_ida.idainfo.start_ss: - idainfo_start_ss_get(self) -> sel_t - -ida_ida.idainfo.strlit_break: - idainfo_strlit_break_get(self) -> uchar - -ida_ida.idainfo.strlit_flags: - idainfo_strlit_flags_get(self) -> uchar - -ida_ida.idainfo.strlit_pref: - idainfo_strlit_pref_get(self) -> char [16] - -ida_ida.idainfo.strlit_sernum: - idainfo_strlit_sernum_get(self) -> uval_t - -ida_ida.idainfo.strlit_zeroes: - idainfo_strlit_zeroes_get(self) -> char - -ida_ida.idainfo.strtype: - idainfo_strtype_get(self) -> int32 - -ida_ida.idainfo.tag: - idainfo_tag_get(self) -> char [3] - -ida_ida.idainfo.type_xrefnum: - idainfo_type_xrefnum_get(self) -> uchar - -ida_ida.idainfo.version: - idainfo_version_get(self) -> ushort - -ida_ida.idainfo.xrefnum: - idainfo_xrefnum_get(self) -> uchar - -ida_ida.idainfo_big_arg_align(): - - inf_big_arg_align() -> bool - - -ida_ida.idainfo_gen_lzero(): - - inf_gen_lzero() -> bool - - -ida_ida.idainfo_gen_null(): - - inf_gen_null() -> bool - - -ida_ida.idainfo_gen_tryblks(): - - inf_gen_tryblks() -> bool - - -ida_ida.idainfo_get_demname_form(): - - inf_get_demname_form() -> uchar - - - Get 'DEMNAM_MASK' bits of #demnames. - - -ida_ida.idainfo_get_pack_mode(): - - inf_get_pack_mode() -> int - - -ida_ida.idainfo_is_32bit(): - - inf_is_32bit() -> bool - - -ida_ida.idainfo_is_64bit(): - - inf_is_64bit() -> bool - - -ida_ida.idainfo_is_auto_enabled(): - - inf_is_auto_enabled() -> bool - - -ida_ida.idainfo_is_be(): - - inf_is_be() -> bool - - -ida_ida.idainfo_is_dll(): - - inf_is_dll() -> bool - - -ida_ida.idainfo_is_flat_off32(): - - inf_is_flat_off32() -> bool - - -ida_ida.idainfo_is_graph_view(): - - inf_is_graph_view() -> bool - - -ida_ida.idainfo_is_hard_float(): - - inf_is_hard_float() -> bool - - -ida_ida.idainfo_is_kernel_mode(): - - inf_is_kernel_mode() -> bool - - -ida_ida.idainfo_is_mem_aligned4(): - - inf_is_mem_aligned4() -> bool - - -ida_ida.idainfo_is_snapshot(): - - inf_is_snapshot() -> bool - - -ida_ida.idainfo_is_wide_high_byte_first(): - - inf_is_wide_high_byte_first() -> bool - - -ida_ida.idainfo_like_binary(): - - inf_like_binary() -> bool - - -ida_ida.idainfo_line_pref_with_seg(): - - inf_line_pref_with_seg() -> bool - - -ida_ida.idainfo_loading_idc(): - - inf_loading_idc() -> bool - - -ida_ida.idainfo_map_stkargs(): - - inf_map_stkargs() -> bool - - -ida_ida.idainfo_pack_stkargs(): - - inf_pack_stkargs() -> bool - - -ida_ida.idainfo_readonly_idb(): - - inf_readonly_idb() -> bool - - -ida_ida.idainfo_set_64bit(): - - inf_set_64bit(_v=True) -> bool - - -ida_ida.idainfo_set_auto_enabled(): - - inf_set_auto_enabled(_v=True) -> bool - - -ida_ida.idainfo_set_be(): - - inf_set_be(_v=True) -> bool - - -ida_ida.idainfo_set_gen_lzero(): - - inf_set_gen_lzero(_v=True) -> bool - - -ida_ida.idainfo_set_gen_null(): - - inf_set_gen_null(_v=True) -> bool - - -ida_ida.idainfo_set_gen_tryblks(): - - inf_set_gen_tryblks(_v=True) -> bool - - -ida_ida.idainfo_set_graph_view(): - - inf_set_graph_view(_v=True) -> bool - - -ida_ida.idainfo_set_line_pref_with_seg(): - - inf_set_line_pref_with_seg(_v=True) -> bool - - -ida_ida.idainfo_set_pack_mode(): - - inf_set_pack_mode(pack_mode) -> int - - -ida_ida.idainfo_set_show_auto(): - - inf_set_show_auto(_v=True) -> bool - - -ida_ida.idainfo_set_show_line_pref(): - - inf_set_show_line_pref(_v=True) -> bool - - -ida_ida.idainfo_set_show_void(): - - inf_set_show_void(_v=True) -> bool - - -ida_ida.idainfo_set_wide_high_byte_first(): - - inf_set_wide_high_byte_first(_v=True) -> bool - - -ida_ida.idainfo_show_auto(): - - inf_show_auto() -> bool - - -ida_ida.idainfo_show_line_pref(): - - inf_show_line_pref() -> bool - - -ida_ida.idainfo_show_void(): - - inf_show_void() -> bool - - -ida_ida.idainfo_stack_ldbl(): - - inf_stack_ldbl() -> bool - - -ida_ida.idainfo_stack_varargs(): - - inf_stack_varargs() -> bool - - -ida_ida.idainfo_use_allasm(): - - inf_use_allasm() -> bool - - -ida_ida.idainfo_use_gcc_layout(): - - inf_use_gcc_layout() -> bool - - -ida_ida.inf_abi_set_by_user(): - - inf_abi_set_by_user() -> bool - - -ida_ida.inf_allow_non_matched_ops(): - - inf_allow_non_matched_ops() -> bool - - -ida_ida.inf_allow_sigmulti(): - - inf_allow_sigmulti() -> bool - - -ida_ida.inf_append_sigcmt(): - - inf_append_sigcmt() -> bool - - -ida_ida.inf_big_arg_align(): - - inf_big_arg_align() -> bool - - -ida_ida.inf_check_manual_ops(): - - inf_check_manual_ops() -> bool - - -ida_ida.inf_check_unicode_strlits(): - - inf_check_unicode_strlits() -> bool - - -ida_ida.inf_coagulate_code(): - - inf_coagulate_code() -> bool - - -ida_ida.inf_coagulate_data(): - - inf_coagulate_data() -> bool - - -ida_ida.inf_compress_idb(): - - inf_compress_idb() -> bool - - -ida_ida.inf_create_all_xrefs(): - - inf_create_all_xrefs() -> bool - - -ida_ida.inf_create_func_from_call(): - - inf_create_func_from_call() -> bool - - -ida_ida.inf_create_func_from_ptr(): - - inf_create_func_from_ptr() -> bool - - -ida_ida.inf_create_func_tails(): - - inf_create_func_tails() -> bool - - -ida_ida.inf_create_jump_tables(): - - inf_create_jump_tables() -> bool - - -ida_ida.inf_create_off_on_dref(): - - inf_create_off_on_dref() -> bool - - -ida_ida.inf_create_off_using_fixup(): - - inf_create_off_using_fixup() -> bool - - -ida_ida.inf_create_strlit_on_xref(): - - inf_create_strlit_on_xref() -> bool - - -ida_ida.inf_data_offset(): - - inf_data_offset() -> bool - - -ida_ida.inf_dbg_no_store_path(): - - inf_dbg_no_store_path() -> bool - - -ida_ida.inf_decode_fpp(): - - inf_decode_fpp() -> bool - - -ida_ida.inf_del_no_xref_insns(): - - inf_del_no_xref_insns() -> bool - - -ida_ida.inf_final_pass(): - - inf_final_pass() -> bool - - -ida_ida.inf_full_sp_ana(): - - inf_full_sp_ana() -> bool - - -ida_ida.inf_gen_assume(): - - inf_gen_assume() -> bool - - -ida_ida.inf_gen_lzero(): - - inf_gen_lzero() -> bool - - -ida_ida.inf_gen_null(): - - inf_gen_null() -> bool - - -ida_ida.inf_gen_org(): - - inf_gen_org() -> bool - - -ida_ida.inf_gen_tryblks(): - - inf_gen_tryblks() -> bool - - -ida_ida.inf_get_abibits(): - - inf_get_abibits() -> uint32 - - -ida_ida.inf_get_af(): - - inf_get_af() -> uint32 - - -ida_ida.inf_get_af2(): - - inf_get_af2() -> uint32 - - -ida_ida.inf_get_af2_low(): - - inf_get_af2_low() -> ushort - - - Get/set low 16bit half of inf.af2. - - -ida_ida.inf_get_af_high(): - - inf_get_af_high() -> ushort - - -ida_ida.inf_get_af_low(): - - inf_get_af_low() -> ushort - - - Get/set low/high 16bit halves of inf.af. - - -ida_ida.inf_get_appcall_options(): - - inf_get_appcall_options() -> uint32 - - -ida_ida.inf_get_apptype(): - - inf_get_apptype() -> ushort - - -ida_ida.inf_get_asmtype(): - - inf_get_asmtype() -> uchar - - -ida_ida.inf_get_baseaddr(): - - inf_get_baseaddr() -> uval_t - - -ida_ida.inf_get_bin_prefix_size(): - - inf_get_bin_prefix_size() -> short - - -ida_ida.inf_get_cc(): - - inf_get_cc(out) -> bool - - -ida_ida.inf_get_cc_cm(): - - inf_get_cc_cm() -> cm_t - - -ida_ida.inf_get_cc_defalign(): - - inf_get_cc_defalign() -> uchar - - -ida_ida.inf_get_cc_id(): - - inf_get_cc_id() -> comp_t - - -ida_ida.inf_get_cc_size_b(): - - inf_get_cc_size_b() -> uchar - - -ida_ida.inf_get_cc_size_e(): - - inf_get_cc_size_e() -> uchar - - -ida_ida.inf_get_cc_size_i(): - - inf_get_cc_size_i() -> uchar - - -ida_ida.inf_get_cc_size_l(): - - inf_get_cc_size_l() -> uchar - - -ida_ida.inf_get_cc_size_ldbl(): - - inf_get_cc_size_ldbl() -> uchar - - -ida_ida.inf_get_cc_size_ll(): - - inf_get_cc_size_ll() -> uchar - - -ida_ida.inf_get_cc_size_s(): - - inf_get_cc_size_s() -> uchar - - -ida_ida.inf_get_cmtflg(): - - inf_get_cmtflg() -> uchar - - -ida_ida.inf_get_comment(): - - inf_get_comment() -> uchar - - -ida_ida.inf_get_database_change_count(): - - inf_get_database_change_count() -> uint32 - - -ida_ida.inf_get_datatypes(): - - inf_get_datatypes() -> uval_t - - -ida_ida.inf_get_demname_form(): - - inf_get_demname_form() -> uchar - - - Get 'DEMNAM_MASK' bits of #demnames. - - -ida_ida.inf_get_demnames(): - - inf_get_demnames() -> uchar - - -ida_ida.inf_get_filetype(): - - inf_get_filetype() -> filetype_t - - -ida_ida.inf_get_genflags(): - - inf_get_genflags() -> ushort - - -ida_ida.inf_get_highoff(): - - inf_get_highoff() -> ea_t - - -ida_ida.inf_get_indent(): - - inf_get_indent() -> uchar - - -ida_ida.inf_get_lenxref(): - - inf_get_lenxref() -> ushort - - -ida_ida.inf_get_lflags(): - - inf_get_lflags() -> uint32 - - -ida_ida.inf_get_limiter(): - - inf_get_limiter() -> uchar - - -ida_ida.inf_get_listnames(): - - inf_get_listnames() -> uchar - - -ida_ida.inf_get_long_demnames(): - - inf_get_long_demnames() -> uint32 - - -ida_ida.inf_get_lowoff(): - - inf_get_lowoff() -> ea_t - - -ida_ida.inf_get_main(): - - inf_get_main() -> ea_t - - -ida_ida.inf_get_margin(): - - inf_get_margin() -> ushort - - -ida_ida.inf_get_max_autoname_len(): - - inf_get_max_autoname_len() -> ushort - - -ida_ida.inf_get_max_ea(): - - inf_get_max_ea() -> ea_t - - -ida_ida.inf_get_maxref(): - - inf_get_maxref() -> uval_t - - -ida_ida.inf_get_min_ea(): - - inf_get_min_ea() -> ea_t - - -ida_ida.inf_get_nametype(): - - inf_get_nametype() -> char - - -ida_ida.inf_get_netdelta(): - - inf_get_netdelta() -> sval_t - - -ida_ida.inf_get_omax_ea(): - - inf_get_omax_ea() -> ea_t - - -ida_ida.inf_get_omin_ea(): - - inf_get_omin_ea() -> ea_t - - -ida_ida.inf_get_ostype(): - - inf_get_ostype() -> ushort - - -ida_ida.inf_get_outflags(): - - inf_get_outflags() -> uint32 - - -ida_ida.inf_get_pack_mode(): - - inf_get_pack_mode() -> int - - -ida_ida.inf_get_prefflag(): - - inf_get_prefflag() -> uchar - - -ida_ida.inf_get_privrange(): - - inf_get_privrange(out) -> bool - inf_get_privrange() -> range_t - - -ida_ida.inf_get_privrange_end_ea(): - - inf_get_privrange_end_ea() -> ea_t - - -ida_ida.inf_get_privrange_start_ea(): - - inf_get_privrange_start_ea() -> ea_t - - -ida_ida.inf_get_procname(): - - inf_get_procname() -> bool - - -ida_ida.inf_get_refcmtnum(): - - inf_get_refcmtnum() -> uchar - - -ida_ida.inf_get_short_demnames(): - - inf_get_short_demnames() -> uint32 - - -ida_ida.inf_get_specsegs(): - - inf_get_specsegs() -> uchar - - -ida_ida.inf_get_start_cs(): - - inf_get_start_cs() -> sel_t - - -ida_ida.inf_get_start_ea(): - - inf_get_start_ea() -> ea_t - - -ida_ida.inf_get_start_ip(): - - inf_get_start_ip() -> ea_t - - -ida_ida.inf_get_start_sp(): - - inf_get_start_sp() -> ea_t - - -ida_ida.inf_get_start_ss(): - - inf_get_start_ss() -> sel_t - - -ida_ida.inf_get_strlit_break(): - - inf_get_strlit_break() -> uchar - - -ida_ida.inf_get_strlit_flags(): - - inf_get_strlit_flags() -> uchar - - -ida_ida.inf_get_strlit_pref(): - - inf_get_strlit_pref() -> bool - - -ida_ida.inf_get_strlit_sernum(): - - inf_get_strlit_sernum() -> uval_t - - -ida_ida.inf_get_strlit_zeroes(): - - inf_get_strlit_zeroes() -> char - - -ida_ida.inf_get_strtype(): - - inf_get_strtype() -> int32 - - -ida_ida.inf_get_type_xrefnum(): - - inf_get_type_xrefnum() -> uchar - - -ida_ida.inf_get_version(): - - inf_get_version() -> ushort - - -ida_ida.inf_get_xrefflag(): - - inf_get_xrefflag() -> uchar - - -ida_ida.inf_get_xrefnum(): - - inf_get_xrefnum() -> uchar - - -ida_ida.inf_guess_func_type(): - - inf_guess_func_type() -> bool - - -ida_ida.inf_handle_eh(): - - inf_handle_eh() -> bool - - -ida_ida.inf_handle_rtti(): - - inf_handle_rtti() -> bool - - -ida_ida.inf_hide_comments(): - - inf_hide_comments() -> bool - - -ida_ida.inf_hide_libfuncs(): - - inf_hide_libfuncs() -> bool - - -ida_ida.inf_inc_database_change_count(): - - inf_inc_database_change_count(cnt=1) - - -ida_ida.inf_is_32bit(): - - inf_is_32bit() -> bool - - -ida_ida.inf_is_64bit(): - - inf_is_64bit() -> bool - - -ida_ida.inf_is_auto_enabled(): - - inf_is_auto_enabled() -> bool - - -ida_ida.inf_is_be(): - - inf_is_be() -> bool - - -ida_ida.inf_is_dll(): - - inf_is_dll() -> bool - - -ida_ida.inf_is_flat_off32(): - - inf_is_flat_off32() -> bool - - -ida_ida.inf_is_graph_view(): - - inf_is_graph_view() -> bool - - -ida_ida.inf_is_hard_float(): - - inf_is_hard_float() -> bool - - -ida_ida.inf_is_kernel_mode(): - - inf_is_kernel_mode() -> bool - - -ida_ida.inf_is_limiter_empty(): - - inf_is_limiter_empty() -> bool - - -ida_ida.inf_is_limiter_thick(): - - inf_is_limiter_thick() -> bool - - -ida_ida.inf_is_limiter_thin(): - - inf_is_limiter_thin() -> bool - - -ida_ida.inf_is_mem_aligned4(): - - inf_is_mem_aligned4() -> bool - - -ida_ida.inf_is_snapshot(): - - inf_is_snapshot() -> bool - - -ida_ida.inf_is_wide_high_byte_first(): - - inf_is_wide_high_byte_first() -> bool - - -ida_ida.inf_like_binary(): - - inf_like_binary() -> bool - - -ida_ida.inf_line_pref_with_seg(): - - inf_line_pref_with_seg() -> bool - - -ida_ida.inf_loading_idc(): - - inf_loading_idc() -> bool - - -ida_ida.inf_macros_enabled(): - - inf_macros_enabled() -> bool - - -ida_ida.inf_map_stkargs(): - - inf_map_stkargs() -> bool - - -ida_ida.inf_mark_code(): - - inf_mark_code() -> bool - - -ida_ida.inf_no_store_user_info(): - - inf_no_store_user_info() -> bool - - -ida_ida.inf_noflow_to_data(): - - inf_noflow_to_data() -> bool - - -ida_ida.inf_noret_ana(): - - inf_noret_ana() -> bool - - -ida_ida.inf_op_offset(): - - inf_op_offset() -> bool - - -ida_ida.inf_pack_idb(): - - inf_pack_idb() -> bool - - -ida_ida.inf_pack_stkargs(): - - inf_pack_stkargs() -> bool - - -ida_ida.inf_postinc_strlit_sernum(): - - inf_postinc_strlit_sernum(cnt=1) -> uval_t - - -ida_ida.inf_prefix_show_funcoff(): - - inf_prefix_show_funcoff() -> bool - - -ida_ida.inf_prefix_show_segaddr(): - - inf_prefix_show_segaddr() -> bool - - -ida_ida.inf_prefix_show_stack(): - - inf_prefix_show_stack() -> bool - - -ida_ida.inf_propagate_regargs(): - - inf_propagate_regargs() -> bool - - -ida_ida.inf_propagate_stkargs(): - - inf_propagate_stkargs() -> bool - - -ida_ida.inf_readonly_idb(): - - inf_readonly_idb() -> bool - - -ida_ida.inf_rename_jumpfunc(): - - inf_rename_jumpfunc() -> bool - - -ida_ida.inf_rename_nullsub(): - - inf_rename_nullsub() -> bool - - -ida_ida.inf_set_32bit(): - - inf_set_32bit(_v=True) -> bool - - -ida_ida.inf_set_64bit(): - - inf_set_64bit(_v=True) -> bool - - -ida_ida.inf_set_abi_set_by_user(): - - inf_set_abi_set_by_user(_v=True) -> bool - - -ida_ida.inf_set_abibits(): - - inf_set_abibits(_v) -> bool - - -ida_ida.inf_set_af(): - - inf_set_af(_v) -> bool - - -ida_ida.inf_set_af2(): - - inf_set_af2(_v) -> bool - - -ida_ida.inf_set_af2_low(): - - inf_set_af2_low(saf) - - -ida_ida.inf_set_af_high(): - - inf_set_af_high(saf2) - - -ida_ida.inf_set_af_low(): - - inf_set_af_low(saf) - - -ida_ida.inf_set_allow_non_matched_ops(): - - inf_set_allow_non_matched_ops(_v=True) -> bool - - -ida_ida.inf_set_allow_sigmulti(): - - inf_set_allow_sigmulti(_v=True) -> bool - - -ida_ida.inf_set_appcall_options(): - - inf_set_appcall_options(_v) -> bool - - -ida_ida.inf_set_append_sigcmt(): - - inf_set_append_sigcmt(_v=True) -> bool - - -ida_ida.inf_set_apptype(): - - inf_set_apptype(_v) -> bool - - -ida_ida.inf_set_asmtype(): - - inf_set_asmtype(_v) -> bool - - -ida_ida.inf_set_auto_enabled(): - - inf_set_auto_enabled(_v=True) -> bool - - -ida_ida.inf_set_baseaddr(): - - inf_set_baseaddr(_v) -> bool - - -ida_ida.inf_set_be(): - - inf_set_be(_v=True) -> bool - - -ida_ida.inf_set_big_arg_align(): - - inf_set_big_arg_align(_v=True) -> bool - - -ida_ida.inf_set_bin_prefix_size(): - - inf_set_bin_prefix_size(_v) -> bool - - -ida_ida.inf_set_cc(): - - inf_set_cc(_v) -> bool - - -ida_ida.inf_set_cc_cm(): - - inf_set_cc_cm(_v) -> bool - - -ida_ida.inf_set_cc_defalign(): - - inf_set_cc_defalign(_v) -> bool - - -ida_ida.inf_set_cc_id(): - - inf_set_cc_id(_v) -> bool - - -ida_ida.inf_set_cc_size_b(): - - inf_set_cc_size_b(_v) -> bool - - -ida_ida.inf_set_cc_size_e(): - - inf_set_cc_size_e(_v) -> bool - - -ida_ida.inf_set_cc_size_i(): - - inf_set_cc_size_i(_v) -> bool - - -ida_ida.inf_set_cc_size_l(): - - inf_set_cc_size_l(_v) -> bool - - -ida_ida.inf_set_cc_size_ldbl(): - - inf_set_cc_size_ldbl(_v) -> bool - - -ida_ida.inf_set_cc_size_ll(): - - inf_set_cc_size_ll(_v) -> bool - - -ida_ida.inf_set_cc_size_s(): - - inf_set_cc_size_s(_v) -> bool - - -ida_ida.inf_set_check_manual_ops(): - - inf_set_check_manual_ops(_v=True) -> bool - - -ida_ida.inf_set_check_unicode_strlits(): - - inf_set_check_unicode_strlits(_v=True) -> bool - - -ida_ida.inf_set_cmtflg(): - - inf_set_cmtflg(_v) -> bool - - -ida_ida.inf_set_coagulate_code(): - - inf_set_coagulate_code(_v=True) -> bool - - -ida_ida.inf_set_coagulate_data(): - - inf_set_coagulate_data(_v=True) -> bool - - -ida_ida.inf_set_comment(): - - inf_set_comment(_v) -> bool - - -ida_ida.inf_set_compress_idb(): - - inf_set_compress_idb(_v=True) -> bool - - -ida_ida.inf_set_create_all_xrefs(): - - inf_set_create_all_xrefs(_v=True) -> bool - - -ida_ida.inf_set_create_func_from_call(): - - inf_set_create_func_from_call(_v=True) -> bool - - -ida_ida.inf_set_create_func_from_ptr(): - - inf_set_create_func_from_ptr(_v=True) -> bool - - -ida_ida.inf_set_create_func_tails(): - - inf_set_create_func_tails(_v=True) -> bool - - -ida_ida.inf_set_create_jump_tables(): - - inf_set_create_jump_tables(_v=True) -> bool - - -ida_ida.inf_set_create_off_on_dref(): - - inf_set_create_off_on_dref(_v=True) -> bool - - -ida_ida.inf_set_create_off_using_fixup(): - - inf_set_create_off_using_fixup(_v=True) -> bool - - -ida_ida.inf_set_create_strlit_on_xref(): - - inf_set_create_strlit_on_xref(_v=True) -> bool - - -ida_ida.inf_set_data_offset(): - - inf_set_data_offset(_v=True) -> bool - - -ida_ida.inf_set_database_change_count(): - - inf_set_database_change_count(_v) -> bool - - -ida_ida.inf_set_datatypes(): - - inf_set_datatypes(_v) -> bool - - -ida_ida.inf_set_dbg_no_store_path(): - - inf_set_dbg_no_store_path(_v=True) -> bool - - -ida_ida.inf_set_decode_fpp(): - - inf_set_decode_fpp(_v=True) -> bool - - -ida_ida.inf_set_del_no_xref_insns(): - - inf_set_del_no_xref_insns(_v=True) -> bool - - -ida_ida.inf_set_demnames(): - - inf_set_demnames(_v) -> bool - - -ida_ida.inf_set_dll(): - - inf_set_dll(_v=True) -> bool - - -ida_ida.inf_set_filetype(): - - inf_set_filetype(_v) -> bool - - -ida_ida.inf_set_final_pass(): - - inf_set_final_pass(_v=True) -> bool - - -ida_ida.inf_set_flat_off32(): - - inf_set_flat_off32(_v=True) -> bool - - -ida_ida.inf_set_full_sp_ana(): - - inf_set_full_sp_ana(_v=True) -> bool - - -ida_ida.inf_set_gen_assume(): - - inf_set_gen_assume(_v=True) -> bool - - -ida_ida.inf_set_gen_lzero(): - - inf_set_gen_lzero(_v=True) -> bool - - -ida_ida.inf_set_gen_null(): - - inf_set_gen_null(_v=True) -> bool - - -ida_ida.inf_set_gen_org(): - - inf_set_gen_org(_v=True) -> bool - - -ida_ida.inf_set_gen_tryblks(): - - inf_set_gen_tryblks(_v=True) -> bool - - -ida_ida.inf_set_genflags(): - - inf_set_genflags(_v) -> bool - - -ida_ida.inf_set_graph_view(): - - inf_set_graph_view(_v=True) -> bool - - -ida_ida.inf_set_guess_func_type(): - - inf_set_guess_func_type(_v=True) -> bool - - -ida_ida.inf_set_handle_eh(): - - inf_set_handle_eh(_v=True) -> bool - - -ida_ida.inf_set_handle_rtti(): - - inf_set_handle_rtti(_v=True) -> bool - - -ida_ida.inf_set_hard_float(): - - inf_set_hard_float(_v=True) -> bool - - -ida_ida.inf_set_hide_comments(): - - inf_set_hide_comments(_v=True) -> bool - - -ida_ida.inf_set_hide_libfuncs(): - - inf_set_hide_libfuncs(_v=True) -> bool - - -ida_ida.inf_set_highoff(): - - inf_set_highoff(_v) -> bool - - -ida_ida.inf_set_indent(): - - inf_set_indent(_v) -> bool - - -ida_ida.inf_set_kernel_mode(): - - inf_set_kernel_mode(_v=True) -> bool - - -ida_ida.inf_set_lenxref(): - - inf_set_lenxref(_v) -> bool - - -ida_ida.inf_set_lflags(): - - inf_set_lflags(_v) -> bool - - -ida_ida.inf_set_limiter(): - - inf_set_limiter(_v) -> bool - - -ida_ida.inf_set_limiter_empty(): - - inf_set_limiter_empty(_v=True) -> bool - - -ida_ida.inf_set_limiter_thick(): - - inf_set_limiter_thick(_v=True) -> bool - - -ida_ida.inf_set_limiter_thin(): - - inf_set_limiter_thin(_v=True) -> bool - - -ida_ida.inf_set_line_pref_with_seg(): - - inf_set_line_pref_with_seg(_v=True) -> bool - - -ida_ida.inf_set_listnames(): - - inf_set_listnames(_v) -> bool - - -ida_ida.inf_set_loading_idc(): - - inf_set_loading_idc(_v=True) -> bool - - -ida_ida.inf_set_long_demnames(): - - inf_set_long_demnames(_v) -> bool - - -ida_ida.inf_set_lowoff(): - - inf_set_lowoff(_v) -> bool - - -ida_ida.inf_set_macros_enabled(): - - inf_set_macros_enabled(_v=True) -> bool - - -ida_ida.inf_set_main(): - - inf_set_main(_v) -> bool - - -ida_ida.inf_set_map_stkargs(): - - inf_set_map_stkargs(_v=True) -> bool - - -ida_ida.inf_set_margin(): - - inf_set_margin(_v) -> bool - - -ida_ida.inf_set_mark_code(): - - inf_set_mark_code(_v=True) -> bool - - -ida_ida.inf_set_max_autoname_len(): - - inf_set_max_autoname_len(_v) -> bool - - -ida_ida.inf_set_max_ea(): - - inf_set_max_ea(_v) -> bool - - -ida_ida.inf_set_maxref(): - - inf_set_maxref(_v) -> bool - - -ida_ida.inf_set_mem_aligned4(): - - inf_set_mem_aligned4(_v=True) -> bool - - -ida_ida.inf_set_min_ea(): - - inf_set_min_ea(_v) -> bool - - -ida_ida.inf_set_nametype(): - - inf_set_nametype(_v) -> bool - - -ida_ida.inf_set_netdelta(): - - inf_set_netdelta(_v) -> bool - - -ida_ida.inf_set_no_store_user_info(): - - inf_set_no_store_user_info(_v=True) -> bool - - -ida_ida.inf_set_noflow_to_data(): - - inf_set_noflow_to_data(_v=True) -> bool - - -ida_ida.inf_set_noret_ana(): - - inf_set_noret_ana(_v=True) -> bool - - -ida_ida.inf_set_omax_ea(): - - inf_set_omax_ea(_v) -> bool - - -ida_ida.inf_set_omin_ea(): - - inf_set_omin_ea(_v) -> bool - - -ida_ida.inf_set_op_offset(): - - inf_set_op_offset(_v=True) -> bool - - -ida_ida.inf_set_ostype(): - - inf_set_ostype(_v) -> bool - - -ida_ida.inf_set_outflags(): - - inf_set_outflags(_v) -> bool - - -ida_ida.inf_set_pack_idb(): - - inf_set_pack_idb(_v=True) -> bool - - -ida_ida.inf_set_pack_mode(): - - inf_set_pack_mode(pack_mode) -> int - - -ida_ida.inf_set_pack_stkargs(): - - inf_set_pack_stkargs(_v=True) -> bool - - -ida_ida.inf_set_prefflag(): - - inf_set_prefflag(_v) -> bool - - -ida_ida.inf_set_prefix_show_funcoff(): - - inf_set_prefix_show_funcoff(_v=True) -> bool - - -ida_ida.inf_set_prefix_show_segaddr(): - - inf_set_prefix_show_segaddr(_v=True) -> bool - - -ida_ida.inf_set_prefix_show_stack(): - - inf_set_prefix_show_stack(_v=True) -> bool - - -ida_ida.inf_set_privrange(): - - inf_set_privrange(_v) -> bool - - -ida_ida.inf_set_privrange_end_ea(): - - inf_set_privrange_end_ea(_v) -> bool - - -ida_ida.inf_set_privrange_start_ea(): - - inf_set_privrange_start_ea(_v) -> bool - - -ida_ida.inf_set_procname(): - - inf_set_procname(_v, len=size_t(-1)) -> bool - - -ida_ida.inf_set_propagate_regargs(): - - inf_set_propagate_regargs(_v=True) -> bool - - -ida_ida.inf_set_propagate_stkargs(): - - inf_set_propagate_stkargs(_v=True) -> bool - - -ida_ida.inf_set_readonly_idb(): - - inf_set_readonly_idb(_v=True) -> bool - - -ida_ida.inf_set_refcmtnum(): - - inf_set_refcmtnum(_v) -> bool - - -ida_ida.inf_set_rename_jumpfunc(): - - inf_set_rename_jumpfunc(_v=True) -> bool - - -ida_ida.inf_set_rename_nullsub(): - - inf_set_rename_nullsub(_v=True) -> bool - - -ida_ida.inf_set_short_demnames(): - - inf_set_short_demnames(_v) -> bool - - -ida_ida.inf_set_should_create_stkvars(): - - inf_set_should_create_stkvars(_v=True) -> bool - - -ida_ida.inf_set_should_trace_sp(): - - inf_set_should_trace_sp(_v=True) -> bool - - -ida_ida.inf_set_show_all_comments(): - - inf_set_show_all_comments(_v=True) -> bool - - -ida_ida.inf_set_show_auto(): - - inf_set_show_auto(_v=True) -> bool - - -ida_ida.inf_set_show_hidden_funcs(): - - inf_set_show_hidden_funcs(_v=True) -> bool - - -ida_ida.inf_set_show_hidden_insns(): - - inf_set_show_hidden_insns(_v=True) -> bool - - -ida_ida.inf_set_show_hidden_segms(): - - inf_set_show_hidden_segms(_v=True) -> bool - - -ida_ida.inf_set_show_line_pref(): - - inf_set_show_line_pref(_v=True) -> bool - - -ida_ida.inf_set_show_repeatables(): - - inf_set_show_repeatables(_v=True) -> bool - - -ida_ida.inf_set_show_src_linnum(): - - inf_set_show_src_linnum(_v=True) -> bool - - -ida_ida.inf_set_show_void(): - - inf_set_show_void(_v=True) -> bool - - -ida_ida.inf_set_show_xref_fncoff(): - - inf_set_show_xref_fncoff(_v=True) -> bool - - -ida_ida.inf_set_show_xref_seg(): - - inf_set_show_xref_seg(_v=True) -> bool - - -ida_ida.inf_set_show_xref_tmarks(): - - inf_set_show_xref_tmarks(_v=True) -> bool - - -ida_ida.inf_set_show_xref_val(): - - inf_set_show_xref_val(_v=True) -> bool - - -ida_ida.inf_set_snapshot(): - - inf_set_snapshot(_v=True) -> bool - - -ida_ida.inf_set_specsegs(): - - inf_set_specsegs(_v) -> bool - - -ida_ida.inf_set_stack_ldbl(): - - inf_set_stack_ldbl(_v=True) -> bool - - -ida_ida.inf_set_stack_varargs(): - - inf_set_stack_varargs(_v=True) -> bool - - -ida_ida.inf_set_start_cs(): - - inf_set_start_cs(_v) -> bool - - -ida_ida.inf_set_start_ea(): - - inf_set_start_ea(_v) -> bool - - -ida_ida.inf_set_start_ip(): - - inf_set_start_ip(_v) -> bool - - -ida_ida.inf_set_start_sp(): - - inf_set_start_sp(_v) -> bool - - -ida_ida.inf_set_start_ss(): - - inf_set_start_ss(_v) -> bool - - -ida_ida.inf_set_strlit_autocmt(): - - inf_set_strlit_autocmt(_v=True) -> bool - - -ida_ida.inf_set_strlit_break(): - - inf_set_strlit_break(_v) -> bool - - -ida_ida.inf_set_strlit_flags(): - - inf_set_strlit_flags(_v) -> bool - - -ida_ida.inf_set_strlit_name_bit(): - - inf_set_strlit_name_bit(_v=True) -> bool - - -ida_ida.inf_set_strlit_names(): - - inf_set_strlit_names(_v=True) -> bool - - -ida_ida.inf_set_strlit_pref(): - - inf_set_strlit_pref(_v, len=size_t(-1)) -> bool - - -ida_ida.inf_set_strlit_savecase(): - - inf_set_strlit_savecase(_v=True) -> bool - - -ida_ida.inf_set_strlit_serial_names(): - - inf_set_strlit_serial_names(_v=True) -> bool - - -ida_ida.inf_set_strlit_sernum(): - - inf_set_strlit_sernum(_v) -> bool - - -ida_ida.inf_set_strlit_zeroes(): - - inf_set_strlit_zeroes(_v) -> bool - - -ida_ida.inf_set_strtype(): - - inf_set_strtype(_v) -> bool - - -ida_ida.inf_set_test_mode(): - - inf_set_test_mode(_v=True) -> bool - - -ida_ida.inf_set_trace_flow(): - - inf_set_trace_flow(_v=True) -> bool - - -ida_ida.inf_set_truncate_on_del(): - - inf_set_truncate_on_del(_v=True) -> bool - - -ida_ida.inf_set_type_xrefnum(): - - inf_set_type_xrefnum(_v) -> bool - - -ida_ida.inf_set_unicode_strlits(): - - inf_set_unicode_strlits(_v=True) -> bool - - -ida_ida.inf_set_use_allasm(): - - inf_set_use_allasm(_v=True) -> bool - - -ida_ida.inf_set_use_flirt(): - - inf_set_use_flirt(_v=True) -> bool - - -ida_ida.inf_set_use_gcc_layout(): - - inf_set_use_gcc_layout(_v=True) -> bool - - -ida_ida.inf_set_version(): - - inf_set_version(_v) -> bool - - -ida_ida.inf_set_wide_high_byte_first(): - - inf_set_wide_high_byte_first(_v=True) -> bool - - -ida_ida.inf_set_xrefflag(): - - inf_set_xrefflag(_v) -> bool - - -ida_ida.inf_set_xrefnum(): - - inf_set_xrefnum(_v) -> bool - - -ida_ida.inf_should_create_stkvars(): - - inf_should_create_stkvars() -> bool - - -ida_ida.inf_should_trace_sp(): - - inf_should_trace_sp() -> bool - - -ida_ida.inf_show_all_comments(): - - inf_show_all_comments() -> bool - - -ida_ida.inf_show_auto(): - - inf_show_auto() -> bool - - -ida_ida.inf_show_hidden_funcs(): - - inf_show_hidden_funcs() -> bool - - -ida_ida.inf_show_hidden_insns(): - - inf_show_hidden_insns() -> bool - - -ida_ida.inf_show_hidden_segms(): - - inf_show_hidden_segms() -> bool - - -ida_ida.inf_show_line_pref(): - - inf_show_line_pref() -> bool - - -ida_ida.inf_show_repeatables(): - - inf_show_repeatables() -> bool - - -ida_ida.inf_show_src_linnum(): - - inf_show_src_linnum() -> bool - - -ida_ida.inf_show_void(): - - inf_show_void() -> bool - - -ida_ida.inf_show_xref_fncoff(): - - inf_show_xref_fncoff() -> bool - - -ida_ida.inf_show_xref_seg(): - - inf_show_xref_seg() -> bool - - -ida_ida.inf_show_xref_tmarks(): - - inf_show_xref_tmarks() -> bool - - -ida_ida.inf_show_xref_val(): - - inf_show_xref_val() -> bool - - -ida_ida.inf_stack_ldbl(): - - inf_stack_ldbl() -> bool - - -ida_ida.inf_stack_varargs(): - - inf_stack_varargs() -> bool - - -ida_ida.inf_strlit_autocmt(): - - inf_strlit_autocmt() -> bool - - -ida_ida.inf_strlit_name_bit(): - - inf_strlit_name_bit() -> bool - - -ida_ida.inf_strlit_names(): - - inf_strlit_names() -> bool - - -ida_ida.inf_strlit_savecase(): - - inf_strlit_savecase() -> bool - - -ida_ida.inf_strlit_serial_names(): - - inf_strlit_serial_names() -> bool - - -ida_ida.inf_test_mode(): - - inf_test_mode() -> bool - - -ida_ida.inf_trace_flow(): - - inf_trace_flow() -> bool - - -ida_ida.inf_truncate_on_del(): - - inf_truncate_on_del() -> bool - - -ida_ida.inf_unicode_strlits(): - - inf_unicode_strlits() -> bool - - -ida_ida.inf_use_allasm(): - - inf_use_allasm() -> bool - - -ida_ida.inf_use_flirt(): - - inf_use_flirt() -> bool - - -ida_ida.inf_use_gcc_layout(): - - inf_use_gcc_layout() -> bool - - -ida_ida.is_filetype_like_binary(): - - is_filetype_like_binary(ft) -> bool - - - Is unstructured input file? - - - @param ft (C++: filetype_t) - - -ida_ida.macros_enabled(): - - inf_macros_enabled() -> bool - - -ida_ida.should_create_stkvars(): - - inf_should_create_stkvars() -> bool - - -ida_ida.should_trace_sp(): - - inf_should_trace_sp() -> bool - - -ida_ida.show_all_comments(): - - inf_show_all_comments() -> bool - - -ida_ida.show_repeatables(): - - inf_show_repeatables() -> bool - - -ida_ida.to_ea(): - - to_ea(reg_cs, reg_ip) -> ea_t - - - Convert (seg,off) value to a linear address. - - - @param reg_cs (C++: sel_t) - @param reg_ip (C++: ea_t) - - - -=== ida_ida EPYDOC INJECTIONS === -ida_ida.ABI_8ALIGN4 -""" -4 byte alignment for 8byte scalars (__int64/double) inside structures? -""" - -ida_ida.ABI_BIGARG_ALIGN -""" -(e.g. __int64 argument should be 8byte aligned on some 32bit -platforms) - -use natural type alignment for argument if the alignment exceeds -native word size -""" - -ida_ida.ABI_GCC_LAYOUT -""" -use gcc layout for udts (used for mingw) -""" - -ida_ida.ABI_HARD_FLOAT -""" -use the floating-point register set -""" - -ida_ida.ABI_MAP_STKARGS -""" -register arguments are mapped to stack area (and consume stack slots) -""" - -ida_ida.ABI_PACK_STKARGS -""" -do not align stack arguments to stack slots -""" - -ida_ida.ABI_SET_BY_USER -""" -compiler/abi were set by user flag and require SETCOMP_BY_USER flag to -be changed -""" - -ida_ida.ABI_STACK_LDBL -""" -long double arguments are passed on stack -""" - -ida_ida.ABI_STACK_VARARGS -""" -varargs are always passed on stack (even when there are free -registers) -""" - -ida_ida.AF2_DOEH -""" -Handle EH information. -""" - -ida_ida.AF2_DORTTI -""" -Handle RTTI information. -""" - -ida_ida.AF2_MACRO -""" -Try to combine several instructions into a macro instruction -""" - -ida_ida.AF_ANORET -""" -Perform 'no-return' analysis. -""" - -ida_ida.AF_CHKUNI -""" -Check for unicode strings. -""" - -ida_ida.AF_CODE -""" -Trace execution flow. -""" - -ida_ida.AF_DATOFF -""" -Automatically convert data to offsets. -""" - -ida_ida.AF_DOCODE -""" -Coagulate code segs at the final pass. -""" - -ida_ida.AF_DODATA -""" -Coagulate data segs at the final pass. -""" - -ida_ida.AF_DREFOFF -""" -Create offset if data xref to seg32 exists. -""" - -ida_ida.AF_FINAL -""" -Final pass of analysis. -""" - -ida_ida.AF_FIXUP -""" -Create offsets and segments using fixup info. -""" - -ida_ida.AF_FLIRT -""" -Use flirt signatures. -""" - -ida_ida.AF_FTAIL -""" -Create function tails. -""" - -ida_ida.AF_HFLIRT -""" -Automatically hide library functions. -""" - -ida_ida.AF_IMMOFF -""" -Convert 32bit instruction operand to offset. -""" - -ida_ida.AF_JFUNC -""" -Rename jump functions as j_... -""" - -ida_ida.AF_JUMPTBL -""" -Locate and create jump tables. -""" - -ida_ida.AF_LVAR -""" -Create stack variables. -""" - -ida_ida.AF_MARKCODE -""" -Mark typical code sequences as code. -""" - -ida_ida.AF_MEMFUNC -""" -Try to guess member function types. -""" - -ida_ida.AF_NULLSUB -""" -Rename empty functions as nullsub_... -""" - -ida_ida.AF_PROC -""" -Create functions if call is present. -""" - -ida_ida.AF_PROCPTR -""" -Create function if data xref data->code32 exists. -""" - -ida_ida.AF_PURDAT -""" -Control flow to data segment is ignored. -""" - -ida_ida.AF_REGARG -""" -Propagate register argument information. -""" - -ida_ida.AF_SIGCMT -""" -Append a signature name comment for recognized anonymous library -functions. -""" - -ida_ida.AF_SIGMLT -""" -Allow recognition of several copies of the same function. -""" - -ida_ida.AF_STKARG -""" -Propagate stack argument information. -""" - -ida_ida.AF_STRLIT -""" -Create string literal if data xref exists. -""" - -ida_ida.AF_TRACE -""" -Trace stack pointer. -""" - -ida_ida.AF_TRFUNC -""" -Truncate functions upon code deletion. -""" - -ida_ida.AF_UNK -""" -Delete instructions with no xrefs. -""" - -ida_ida.AF_USED -""" -Analyze and create all xrefs. -""" - -ida_ida.AF_VERSP -""" -Perform full SP-analysis. (\\ph{verify_sp}) -""" - -ida_ida.DEMNAM_CMNT -""" -display demangled names as comments -""" - -ida_ida.DEMNAM_FIRST -""" -override type info -""" - -ida_ida.DEMNAM_GCC3 -""" -assume gcc3 names (valid for gnu compiler) -""" - -ida_ida.DEMNAM_MASK -""" -mask for name form -""" - -ida_ida.DEMNAM_NAME -""" -display demangled names as regular names -""" - -ida_ida.DEMNAM_NONE -""" -don't display demangled names -""" - -ida_ida.IDAINFO_TAG_SIZE -""" -The database parameters. This structure is kept in the ida database. -It contains the essential parameters for the current program -""" - -ida_ida.IDB_COMPRESSED -""" -compress & pack database components -""" - -ida_ida.IDB_PACKED -""" -pack database components into .idb -""" - -ida_ida.IDB_UNPACKED -""" -leave database components unpacked -""" - -ida_ida.INFFL_ALLASM -""" -the target assembler - -may use constructs not supported by -""" - -ida_ida.INFFL_AUTO -""" -Autoanalysis is enabled? -""" - -ida_ida.INFFL_CHKOPS -""" -check manual operands? (unused) -""" - -ida_ida.INFFL_GRAPH_VIEW -""" -currently using graph options (\\dto{graph}) -""" - -ida_ida.INFFL_LOADIDC -""" -loading an idc file that contains database info -""" - -ida_ida.INFFL_NMOPS -""" -allow non-matched operands? (unused) -""" - -ida_ida.INFFL_NOUSER -""" -do not store user info in the database -""" - -ida_ida.INFFL_READONLY -""" -(internal) temporary interdiction to modify the database -""" - -ida_ida.LFLG_64BIT -""" -64-bit program? -""" - -ida_ida.LFLG_COMPRESS -""" -compress the database? -""" - -ida_ida.LFLG_DBG_NOPATH -""" -do not store input full path in debugger process options -""" - -ida_ida.LFLG_FLAT_OFF32 -""" -treat 'REF_OFF32' as 32-bit offset for 16bit segments (otherwise try -SEG16:OFF16) -""" - -ida_ida.LFLG_IS_DLL -""" -Is dynamic library? -""" - -ida_ida.LFLG_KERNMODE -""" -is kernel mode binary? -""" - -ida_ida.LFLG_MSF -""" -Byte order: is MSB first? -""" - -ida_ida.LFLG_PACK -""" -pack the database? -""" - -ida_ida.LFLG_PC_FLAT -""" -32-bit program? -""" - -ida_ida.LFLG_PC_FPP -""" -decode floating point processor instructions? -""" - -ida_ida.LFLG_SNAPSHOT -""" -memory snapshot was taken? -""" - -ida_ida.LFLG_WIDE_HBF -""" -(wide bytes: \\ph{dnbits} > 8) - -Bit order of wide bytes: high byte first? -""" - -ida_ida.LMT_EMPTY -""" -empty lines at the end of basic blocks -""" - -ida_ida.LMT_THICK -""" -thick borders -""" - -ida_ida.LMT_THIN -""" -thin borders -""" - -ida_ida.LN_AUTO -""" -include autogenerated names -""" - -ida_ida.LN_NORMAL -""" -include normal names -""" - -ida_ida.LN_PUBLIC -""" -include public names -""" - -ida_ida.LN_WEAK -""" -include weak names -""" - -ida_ida.OFLG_GEN_ASSUME -""" -Generate 'assume' directives? -""" - -ida_ida.OFLG_GEN_NULL -""" -Generate empty lines? -""" - -ida_ida.OFLG_GEN_ORG -""" -Generate 'org' directives? -""" - -ida_ida.OFLG_GEN_TRYBLKS -""" -Generate try/catch directives? -""" - -ida_ida.OFLG_LZERO -""" -generate leading zeroes in numbers -""" - -ida_ida.OFLG_PREF_SEG -""" -line prefixes with segment name? -""" - -ida_ida.OFLG_SHOW_AUTO -""" -Display autoanalysis indicator? -""" - -ida_ida.OFLG_SHOW_PREF -""" -Show line prefixes? -""" - -ida_ida.OFLG_SHOW_VOID -""" -Display void marks? -""" - -ida_ida.PREF_FNCOFF -""" -show function offsets? -""" - -ida_ida.PREF_SEGADR -""" -show segment addresses? -""" - -ida_ida.PREF_STACK -""" -show stack pointer? -""" - -ida_ida.SCF_ALLCMT -""" -comment all lines? -""" - -ida_ida.SCF_LINNUM -""" -show source line numbers -""" - -ida_ida.SCF_NOCMT -""" -no comments at all -""" - -ida_ida.SCF_RPTCMT -""" -show repeatable comments? -""" - -ida_ida.SCF_SHHID_FUNC -""" -show hidden functions -""" - -ida_ida.SCF_SHHID_ITEM -""" -show hidden instructions -""" - -ida_ida.SCF_SHHID_SEGM -""" -show hidden segments -""" - -ida_ida.SCF_TESTMODE -""" -testida.idc is running -""" - -ida_ida.STRF_AUTO -""" -names have 'autogenerated' bit? -""" - -ida_ida.STRF_COMMENT -""" -generate auto comment for string references? -""" - -ida_ida.STRF_GEN -""" -generate names? -""" - -ida_ida.STRF_SAVECASE -""" -preserve case of strings for identifiers -""" - -ida_ida.STRF_SERIAL -""" -generate serial names? -""" - -ida_ida.STRF_UNICODE -""" -unicode strings are present? -""" - -ida_ida.SW_SEGXRF -""" -show segments in xrefs? -""" - -ida_ida.SW_XRFFNC -""" -show function offsets? -""" - -ida_ida.SW_XRFMRK -""" -show xref type marks? -""" - -ida_ida.SW_XRFVAL -""" -show xref values? (otherwise-"...") -""" - -ida_ida.UA_MAXOP -""" -max number of operands allowed for an instruction -""" -=== ida_ida EPYDOC INJECTIONS END === -ida_idaapi.CustomIDAMemo.CreateGroups(): - - Send a request to modify the graph by creating a - (set of) group(s), and perform an animation. - - Each object in the 'groups_infos' list must be of the format: - { - "nodes" : [, , , ...] # The list of nodes to group - "text" : # The synthetic text for that group - } - - @param groups_infos: A list of objects that describe those groups. - @return: A [, , ...] list of group nodes, or None (failure). - - -ida_idaapi.CustomIDAMemo.DelNodesInfos(): - - Delete the properties for the given node(s). - - @param nodes: A list of node IDs - - -ida_idaapi.CustomIDAMemo.DeleteGroups(): - - Send a request to delete the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param new_current: A node to focus on after the groups have been deleted - @return: True on success, False otherwise. - - -ida_idaapi.CustomIDAMemo.GetNodeInfo(): - - Get the properties for the given node. - - @param node: The index of the node. - @return: A tuple (bg_color, frame_color, ea, text), or None. - - -ida_idaapi.CustomIDAMemo.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_idaapi.CustomIDAMemo.Refresh(): - - Refreshes the view. This causes the OnRefresh() to be called - - -ida_idaapi.CustomIDAMemo.SetCurrentRendererType(): - - Set the current view's renderer. - - @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. - - -ida_idaapi.CustomIDAMemo.SetGroupsVisibility(): - - Send a request to expand/collapse the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param expand: True to expand the group, False otherwise. - @param new_current: A node to focus on after the groups have been expanded/collapsed. - @return: True on success, False otherwise. - - -ida_idaapi.CustomIDAMemo.SetNodeInfo(): - - Set the properties for the given node. - - Example usage (set second nodes's bg color to red): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff0000 - inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) - - @param node_index: The node index. - @param node_info: An idaapi.node_info_t instance. - @param flags: An OR'ed value of NIF_* values. - - -ida_idaapi.CustomIDAMemo.SetNodesInfos(): - - Set the properties for the given nodes. - - Example usage (set first three nodes's bg color to purple): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff00ff - inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) - - @param values: A dictionary of 'int -> node_info_t' objects. - - -ida_idaapi.CustomIDAMemo.hook(): - - hook(self) -> bool - - -ida_idaapi.CustomIDAMemo.unhook(): - - unhook(self) -> bool - - -ida_idaapi.CustomIDAMemo.view_created(): - - view_created(self, view) - - -ida_idaapi.IDAPython_Completion(): - - Internal utility class for auto-completion support - - -ida_idaapi.IDAPython_ExecScript(): - - Run the specified script. - It also addresses http://code.google.com/p/idapython/issues/detail?id=42 - - This function is used by the low-level plugin code. - - -ida_idaapi.IDAPython_ExecSystem(): - - Executes a command with popen(). - - -ida_idaapi.IDAPython_FormatExc(): - - This function is used to format an exception given the - values returned by a PyErr_Fetch() - - -ida_idaapi.IDAPython_LoadProcMod(): - - Load processor module. - - -ida_idaapi.IDAPython_UnLoadProcMod(): - - Unload processor module. - - -class ida_idaapi.PyIdc_cvt_int64__(): - - Helper class for explicitly representing VT_INT64 values - - -class ida_idaapi.PyIdc_cvt_refclass__(): - - Helper class for representing references to immutable objects - - -ida_idaapi.PyIdc_cvt_refclass__.cstr(): - - Returns the string as a C string (up to the zero termination) - - -ida_idaapi.as_cstr(): - - Returns a C str from the passed value. The passed value can be of type refclass (returned by a call to buffer() or byref()) - It scans for the first and returns the string value up to that point. - - -ida_idaapi.as_int32(): - - Returns a number as a signed int32 number - - -ida_idaapi.as_signed(): - - Returns a number as signed. The number of bits are specified by the user. - The MSB holds the sign. - - -ida_idaapi.as_uint32(): - - Returns a number as an unsigned int32 number - - -ida_idaapi.as_unicode(): - - Convenience function to convert a string into appropriate unicode format - - -ida_idaapi.copy_bits(): - - Copy bits from a value - @param v: the value - @param s: starting bit (0-based) - @param e: ending bit - - -ida_idaapi.disable_script_timeout(): - - disable_script_timeout() - - - Disables the script timeout and hides the script wait box. - Calling L{set_script_timeout} will not have any effects until the script is compiled and executed again - - @return: None - - -ida_idaapi.enable_extlang_python(): - - enable_extlang_python(enable) - - - Enables or disables Python extlang. - When enabled, all expressions will be evaluated by Python. - @param enable: Set to True to enable, False otherwise - - -ida_idaapi.enable_python_cli(): - - enable_python_cli(enable) - - -ida_idaapi.format_basestring(): - - format_basestring(_in) -> PyObject * - - -ida_idaapi.get_inf_structure(): - - get_inf_structure() -> idainfo - - - Returns the global variable 'inf' (an instance of idainfo structure, see ida.hpp) - - -class ida_idaapi.loader_input_t(): - - Proxy of C++ loader_input_t class - - - A helper class to work with linput_t related functions. - This class is also used by file loaders scripts. - - -ida_idaapi.loader_input_t.close(): - - close(self) - - -ida_idaapi.loader_input_t.file2base(): - - file2base(self, pos, ea1, ea2, patchable) -> int - - - Load portion of file into the database - This function will include (ea1..ea2) into the addressing space of the - program (make it enabled) - @param li: pointer ot input source - @param pos: position in the file - @param (ea1..ea2): range of destination linear addresses - @param patchable: should the kernel remember correspondance of - file offsets to linear addresses. - @return: 1-ok,0-read error, a warning is displayed - - -ida_idaapi.loader_input_t.filename(): - - filename(self) -> PyObject * - - -ida_idaapi.loader_input_t.from_cobject(): - - from_cobject(pycobject) -> loader_input_t - - -ida_idaapi.loader_input_t.from_fp(): - - from_fp(fp) -> loader_input_t - - - A static method to construct an instance from a FILE* - - -ida_idaapi.loader_input_t.from_linput(): - - from_linput(linput) -> loader_input_t - - -ida_idaapi.loader_input_t.get_char(): - - get_char(self) -> PyObject * - - - Reads a single character from the file. Returns None if EOF or the read character - - -ida_idaapi.loader_input_t.get_linput(): - - get_linput(self) -> linput_t * - - -ida_idaapi.loader_input_t.gets(): - - gets(self, len) -> PyObject * - - - Reads a line from the input file. Returns the read line or None - - -ida_idaapi.loader_input_t.getz(): - - getz(self, sz, fpos=-1) -> PyObject * - - - Returns a zero terminated string at the given position - @param sz: maximum size of the string - @param fpos: if != -1 then seek will be performed before reading - @return: The string or None on failure. - - -ida_idaapi.loader_input_t.open(): - - open(self, filename, remote=False) -> bool - - - Opens a file (or a remote file) - @return: Boolean - - -ida_idaapi.loader_input_t.open_memory(): - - open_memory(self, start, size=0) -> bool - - - Create a linput for process memory (By internally calling idaapi.create_memory_linput()) - This linput will use dbg->read_memory() to read data - @param start: starting address of the input - @param size: size of the memory range to represent as linput - if unknown, may be passed as 0 - - -ida_idaapi.loader_input_t.opened(): - - opened(self) -> bool - - - Checks if the file is opened or not - - -ida_idaapi.loader_input_t.read(): - - read(self, size) -> PyObject * - - - Reads from the file. Returns the buffer or None - - -ida_idaapi.loader_input_t.readbytes(): - - readbytes(self, size, big_endian) -> PyObject * - - - Similar to read() but it respect the endianness - - -ida_idaapi.loader_input_t.seek(): - - seek(self, pos, whence=SEEK_SET) -> int64 - - - Set input source position - @return: the new position (not 0 as fseek!) - - -ida_idaapi.loader_input_t.set_linput(): - - set_linput(self, linput) - - - Links the current loader_input_t instance to a linput_t instance - - -ida_idaapi.loader_input_t.size(): - - size(self) -> int64 - - -ida_idaapi.loader_input_t.tell(): - - tell(self) -> int64 - - - Returns the current position - - -ida_idaapi.loader_input_t_from_cobject(): - - loader_input_t_from_cobject(pycobject) -> loader_input_t - - -ida_idaapi.loader_input_t_from_fp(): - - loader_input_t_from_fp(fp) -> loader_input_t - - -ida_idaapi.loader_input_t_from_linput(): - - loader_input_t_from_linput(linput) -> loader_input_t - - -ida_idaapi.notify_when(): - - Register a callback that will be called when an event happens. - @param when: one of NW_XXXX constants - @param callback: This callback prototype varies depending on the 'when' parameter: - The general callback format: - def notify_when_callback(nw_code) - In the case of NW_OPENIDB: - def notify_when_callback(nw_code, is_old_database) - @return: Boolean - - -class ida_idaapi.object_t(): - - Helper class used to initialize empty objects - - -ida_idaapi.parse_command_line3(): - - parse_command_line3(cmdline) -> PyObject * - - -class ida_idaapi.plugin_t(): - - Base class for all scripted plugins. - - -class ida_idaapi.py_clinked_object_t(): - - This is a utility and base class for C linked objects - - -ida_idaapi.py_clinked_object_t._free(): - - Explicitly delete the link (only if not static) - - -ida_idaapi.py_clinked_object_t.assign(): - - Overwrite me. - This method allows you to assign an instance contents to anothers - @return: Boolean - - -ida_idaapi.py_clinked_object_t.copy(): - - Returns a new copy of this class - - -ida_idaapi.pycim_get_tcustom_control(): - - pycim_get_widget(self) -> TWidget * - - -ida_idaapi.pycim_get_tform(): - - pycim_get_widget(self) -> TWidget * - - -ida_idaapi.pycim_get_widget(): - - pycim_get_widget(self) -> TWidget * - - -ida_idaapi.pycim_view_close(): - - pycim_view_close(self) - - -ida_idaapi.pygc_create_groups(): - - pygc_create_groups(self, groups_infos) -> PyObject * - - -ida_idaapi.pygc_del_nodes_infos(): - - pygc_del_nodes_infos(self, py_nodes) - - -ida_idaapi.pygc_delete_groups(): - - pygc_delete_groups(self, groups, new_current) -> PyObject * - - -ida_idaapi.pygc_get_current_renderer_type(): - - pygc_get_current_renderer_type(self) -> PyObject * - - -ida_idaapi.pygc_get_node_info(): - - pygc_get_node_info(self, py_node_idx) -> PyObject * - - -ida_idaapi.pygc_refresh(): - - pygc_refresh(self) - - -ida_idaapi.pygc_set_current_renderer_type(): - - pygc_set_current_renderer_type(self, py_rt) - - -ida_idaapi.pygc_set_groups_visibility(): - - pygc_set_groups_visibility(self, groups, expand, new_current) -> PyObject * - - -ida_idaapi.pygc_set_node_info(): - - pygc_set_node_info(self, py_node_idx, py_node_info, py_flags) - - -ida_idaapi.pygc_set_nodes_infos(): - - pygc_set_nodes_infos(self, values) - - -class ida_idaapi.pyidc_cvt_helper__(): - - This is a special helper object that helps detect which kind - of object is this python object wrapping and how to convert it - back and from IDC. - This object is characterized by its special attribute and its value - - -class ida_idaapi.pyidc_opaque_object_t(): - - This is the base class for all Python<->IDC opaque objects - - -ida_idaapi.require(): - - Load, or reload a module. - - When under heavy development, a user's tool might consist of multiple - modules. If those are imported using the standard 'import' mechanism, - there is no guarantee that the Python implementation will re-read - and re-evaluate the module's Python code. In fact, it usually doesn't. - What should be done instead is 'reload()'-ing that module. - - This is a simple helper function that will do just that: In case the - module doesn't exist, it 'import's it, and if it does exist, - 'reload()'s it. - - The importing module (i.e., the module calling require()) will have - the loaded module bound to its globals(), under the name 'modulename'. - (If require() is called from the command line, the importing module - will be '__main__'.) - - For more information, see: . - - -ida_idaapi.set_script_timeout(): - - set_script_timeout(timeout) -> int - - - Changes the script timeout value. The script wait box dialog will be hidden and shown again when the timeout elapses. - See also L{disable_script_timeout}. - - @param timeout: This value is in seconds. - If this value is set to zero then the script will never timeout. - @return: Returns the old timeout value - - -ida_idaapi.struct_unpack(): - - Unpack a buffer given its length and offset using struct.unpack_from(). - This function will know how to unpack the given buffer by using the lookup table '__struct_unpack_table' - If the buffer is of unknown length then None is returned. Otherwise the unpacked value is returned. - - -ida_idc.get_mark_comment(): - - get_mark_comment(slot) -> PyObject * - - -ida_idc.get_marked_pos(): - - get_marked_pos(slot) -> ea_t - - -ida_idc.mark_position(): - - mark_position(ea, lnnum, x, y, slot, comment) - - -ida_idd.Appcall__.array(): - - Defines an array type. Later you need to pack() / unpack() - - -ida_idd.Appcall__.buffer(): - - Creates a string buffer. The returned value (r) will be a byref object. - Use r.value to get the contents and r.size to get the buffer's size - - -ida_idd.Appcall__.byref(): - - Method to create references to immutable objects - Currently we support references to int/strings - Objects need not be passed by reference (this will be done automatically) - - -ida_idd.Appcall__.cleanup_appcall(): - - Equivalent to IDC's CleanupAppcall() - - -ida_idd.Appcall__.get_appcall_options(): - - Return the global Appcall options - - -ida_idd.Appcall__.int64(): - - Whenever a 64bit number is needed use this method to construct an object - - -ida_idd.Appcall__.obj(): - - Returns an empty object or objects with attributes as passed via its keywords arguments - - -ida_idd.Appcall__.proto(): - - Allows you to instantiate an appcall (callable object) with the desired prototype - @param name_or_ea: The name of the function (will be resolved with LocByName()) - @param proto_or_tinfo: function prototype as a string or type of the function as tinfo_t object - @return: - - On failure it raises an exception if the prototype could not be parsed - or the address is not resolvable - - Returns a callbable Appcall instance with the given prototypes and flags - - -ida_idd.Appcall__.set_appcall_options(): - - Method to change the Appcall options globally (not per Appcall) - - -ida_idd.Appcall__.typedobj(): - - Returns an appcall object for a type (can be given as tinfo_t object or - as a string declaration) - One can then use retrieve() member method - @param ea: Optional parameter that later can be used to retrieve the type - @return: Appcall object or raises ValueError exception - - -ida_idd.Appcall__.valueof(): - - Returns the numeric value of a given name string. - If the name could not be resolved then the default value will be returned - - -class ida_idd.Appcall_array__(): - - This class is used with Appcall.array() method - - -ida_idd.Appcall_array__.pack(): - - Packs a list or tuple into a byref buffer - - -ida_idd.Appcall_array__.try_to_convert_to_list(): - - Is this object a list? We check for the existance of attribute zero and attribute self.size-1 - - -ida_idd.Appcall_array__.unpack(): - - Unpacks an array back into a list or an object - - -class ida_idd.Appcall_callable__(): - - Helper class to issue appcalls using a natural syntax: - appcall.FunctionNameInTheDatabase(arguments, ....) - or - appcall["Function@8"](arguments, ...) - or - f8 = appcall["Function@8"] - f8(arg1, arg2, ...) - or - o = appcall.obj() - i = byref(5) - appcall.funcname(arg1, i, "hello", o) - - -ida_idd.Appcall_callable__.retrieve(): - - Unpacks a typed object from the database if an ea is given or from a string if a string was passed - @param src: the address of the object or a string - @return: Returns a tuple of boolean and object or error number (Bool, Error | Object). - - -ida_idd.Appcall_callable__.store(): - - Packs an object into a given ea if provided or into a string if no address was passed. - @param obj: The object to pack - @param dest_ea: If packing to idb this will be the store location - @param base_ea: If packing to a buffer, this will be the base that will be used to relocate the pointers - - @return: - - If packing to a string then a Tuple(Boolean, packed_string or error code) - - If packing to the database then a return code is returned (0 is success) - - -class ida_idd.Appcall_consts__(): - - Helper class used by Appcall.Consts attribute - It is used to retrieve constants via attribute access - - -ida_idd.appcall(): - - appcall(func_ea, tid, py_type, py_fields, arg_list) -> PyObject * - - -class ida_idd.bptaddr_t(): - - Proxy of C++ bptaddr_t class - - -ida_idd.bptaddr_t.hea: - bptaddr_t_hea_get(self) -> ea_t - -ida_idd.bptaddr_t.kea: - bptaddr_t_kea_get(self) -> ea_t - -class ida_idd.call_stack_info_t(): - - Proxy of C++ call_stack_info_t class - - -ida_idd.call_stack_info_t.callea: - call_stack_info_t_callea_get(self) -> ea_t - -ida_idd.call_stack_info_t.fp: - call_stack_info_t_fp_get(self) -> ea_t - -ida_idd.call_stack_info_t.funcea: - call_stack_info_t_funcea_get(self) -> ea_t - -ida_idd.call_stack_info_t.funcok: - call_stack_info_t_funcok_get(self) -> bool - -class ida_idd.call_stack_t(): - - Proxy of C++ qvector<(call_stack_info_t)> class - - -ida_idd.call_stack_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_idd.call_stack_t.at(): - - at(self, _idx) -> call_stack_info_t - - -ida_idd.call_stack_t.begin(): - - begin(self) -> call_stack_info_t - begin(self) -> call_stack_info_t - - -ida_idd.call_stack_t.capacity(): - - capacity(self) -> size_t - - -ida_idd.call_stack_t.clear(): - - clear(self) - - -ida_idd.call_stack_t.empty(): - - empty(self) -> bool - - -ida_idd.call_stack_t.end(): - - end(self) -> call_stack_info_t - end(self) -> call_stack_info_t - - -ida_idd.call_stack_t.erase(): - - erase(self, it) -> call_stack_info_t - erase(self, first, last) -> call_stack_info_t - - -ida_idd.call_stack_t.extract(): - - extract(self) -> call_stack_info_t - - -ida_idd.call_stack_t.find(): - - find(self, x) -> call_stack_info_t - find(self, x) -> call_stack_info_t - - -ida_idd.call_stack_t.grow(): - - grow(self, x=call_stack_info_t()) - - -ida_idd.call_stack_t.has(): - - has(self, x) -> bool - - -ida_idd.call_stack_t.inject(): - - inject(self, s, len) - - -ida_idd.call_stack_t.insert(): - - insert(self, it, x) -> call_stack_info_t - - -ida_idd.call_stack_t.pop_back(): - - pop_back(self) - - -ida_idd.call_stack_t.push_back(): - - push_back(self, x) - push_back(self) -> call_stack_info_t - - -ida_idd.call_stack_t.qclear(): - - qclear(self) - - -ida_idd.call_stack_t.reserve(): - - reserve(self, cnt) - - -ida_idd.call_stack_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_idd.call_stack_t.size(): - - size(self) -> size_t - - -ida_idd.call_stack_t.swap(): - - swap(self, r) - - -ida_idd.call_stack_t.truncate(): - - truncate(self) - - -ida_idd.can_exc_continue(): - - can_exc_continue(ev) -> bool - - -ida_idd.cleanup_appcall(): - - cleanup_appcall(tid) -> error_t - - - Cleanup after manual appcall. - - @param tid: thread to use. NO_THREAD means to use the current thread - The application state is restored as it was before calling - the last appcall(). Nested appcalls are supported. (C++: - thid_t) - @return: eOk if successful, otherwise an error code - - -ida_idd.dbg_appcall(): - - dbg_appcall(retval, func_ea, tid, ptif, argv, argnum) -> error_t - - - Call a function from the debugged application. - - @param retval (C++: idc_value_t *) - @param func_ea: address to call (C++: ea_t) - @param tid: thread to use. NO_THREAD means to use the current thread - (C++: thid_t) - @param ptif: pointer to type of the function to call (C++: const - tinfo_t *) - @param argv: array of arguments (C++: idc_value_t *) - @param argnum: number of actual arguments (C++: size_t) - @return: eOk if successful, otherwise an error code - - -ida_idd.dbg_can_query(): - dbg_can_query() -> bool - -ida_idd.dbg_get_memory_info(): - - dbg_get_memory_info() -> PyObject * - - - This function returns the memory configuration of a debugged process. - @return: - None if no debugger is active - tuple(start_ea, end_ea, name, sclass, sbase, bitness, perm) - - -ida_idd.dbg_get_name(): - - dbg_get_name() -> PyObject * - - - This function returns the current debugger's name. - @return: Debugger name or None if no debugger is active - - -ida_idd.dbg_get_registers(): - - dbg_get_registers() -> PyObject * - - - This function returns the register definition from the currently loaded debugger. - Basically, it returns an array of structure similar to to idd.hpp / register_info_t - @return: - None if no debugger is loaded - tuple(name, flags, class, dtype, bit_strings, default_bit_strings_mask) - The bit_strings can be a tuple of strings or None (if the register does not have bit_strings) - - -ida_idd.dbg_get_thread_sreg_base(): - - dbg_get_thread_sreg_base(py_tid, py_sreg_value) -> PyObject * - - - Returns the segment register base value - @param tid: thread id - @param sreg_value: segment register (selector) value - @return: - - The base as an 'ea' - - Or None on failure - - -ida_idd.dbg_read_memory(): - - dbg_read_memory(py_ea, py_sz) -> PyObject * - - - Reads from the debugee's memory at the specified ea - @return: - - The read buffer (as a string) - - Or None on failure - - -ida_idd.dbg_write_memory(): - - dbg_write_memory(py_ea, py_buf) -> PyObject * - - - Writes a buffer to the debugee's memory - @return: Boolean - - -class ida_idd.debapp_attrs_t(): - - Proxy of C++ debapp_attrs_t class - - -ida_idd.debapp_attrs_t.addrsize: - debapp_attrs_t_addrsize_get(self) -> int - -ida_idd.debapp_attrs_t.cbsize: - debapp_attrs_t_cbsize_get(self) -> int32 - -ida_idd.debapp_attrs_t.is_be: - debapp_attrs_t_is_be_get(self) -> int - -ida_idd.debapp_attrs_t.platform: - debapp_attrs_t_platform_get(self) -> qstring * - -class ida_idd.debug_event_t(): - - Proxy of C++ debug_event_t class - - -ida_idd.debug_event_t.bpt(): - - bpt(self) -> bptaddr_t - bpt(self) -> bptaddr_t - - -ida_idd.debug_event_t.bpt_ea(): - - bpt_ea(self) -> ea_t - - -ida_idd.debug_event_t.clear(): - - clear(self) - - -ida_idd.debug_event_t.clear_all(): - - clear_all(self) - - -ida_idd.debug_event_t.copy(): - - copy(self, r) -> debug_event_t - - -ida_idd.debug_event_t.ea: - debug_event_t_ea_get(self) -> ea_t - -ida_idd.debug_event_t.eid(): - - eid(self) -> event_id_t - - -ida_idd.debug_event_t.exc(): - - exc(self) -> excinfo_t - exc(self) -> excinfo_t - - -ida_idd.debug_event_t.exit_code(): - - exit_code(self) -> int const & - - -ida_idd.debug_event_t.handled: - debug_event_t_handled_get(self) -> bool - -ida_idd.debug_event_t.info(): - - info(self) -> qstring - info(self) -> qstring const & - - -ida_idd.debug_event_t.modinfo(): - - modinfo(self) -> modinfo_t - modinfo(self) -> modinfo_t - - -ida_idd.debug_event_t.pid: - debug_event_t_pid_get(self) -> pid_t - -ida_idd.debug_event_t.set_bpt(): - - set_bpt(self) -> bptaddr_t - - -ida_idd.debug_event_t.set_eid(): - - set_eid(self, id) - - -ida_idd.debug_event_t.set_exception(): - - set_exception(self) -> excinfo_t - - -ida_idd.debug_event_t.set_exit_code(): - - set_exit_code(self, id, code) - - -ida_idd.debug_event_t.set_info(): - - set_info(self, id) -> qstring & - - -ida_idd.debug_event_t.set_modinfo(): - - set_modinfo(self, id) -> modinfo_t - - -ida_idd.debug_event_t.tid: - debug_event_t_tid_get(self) -> thid_t - -class ida_idd.exception_info_t(): - - Proxy of C++ exception_info_t class - - -ida_idd.exception_info_t.break_on(): - - break_on(self) -> bool - - -ida_idd.exception_info_t.code: - exception_info_t_code_get(self) -> uint - -ida_idd.exception_info_t.desc: - exception_info_t_desc_get(self) -> qstring * - -ida_idd.exception_info_t.flags: - exception_info_t_flags_get(self) -> uint32 - -ida_idd.exception_info_t.handle(): - - handle(self) -> bool - - -ida_idd.exception_info_t.name: - exception_info_t_name_get(self) -> qstring * - -class ida_idd.excinfo_t(): - - Proxy of C++ excinfo_t class - - -ida_idd.excinfo_t.can_cont: - excinfo_t_can_cont_get(self) -> bool - -ida_idd.excinfo_t.code: - excinfo_t_code_get(self) -> uint32 - -ida_idd.excinfo_t.ea: - excinfo_t_ea_get(self) -> ea_t - -ida_idd.excinfo_t.info: - excinfo_t_info_get(self) -> qstring * - -class ida_idd.excvec_t(): - - Proxy of C++ qvector<(exception_info_t)> class - - -ida_idd.excvec_t.at(): - - at(self, _idx) -> exception_info_t - - -ida_idd.excvec_t.begin(): - - begin(self) -> exception_info_t - begin(self) -> exception_info_t - - -ida_idd.excvec_t.capacity(): - - capacity(self) -> size_t - - -ida_idd.excvec_t.clear(): - - clear(self) - - -ida_idd.excvec_t.empty(): - - empty(self) -> bool - - -ida_idd.excvec_t.end(): - - end(self) -> exception_info_t - end(self) -> exception_info_t - - -ida_idd.excvec_t.erase(): - - erase(self, it) -> exception_info_t - erase(self, first, last) -> exception_info_t - - -ida_idd.excvec_t.extract(): - - extract(self) -> exception_info_t - - -ida_idd.excvec_t.grow(): - - grow(self, x=exception_info_t()) - - -ida_idd.excvec_t.inject(): - - inject(self, s, len) - - -ida_idd.excvec_t.insert(): - - insert(self, it, x) -> exception_info_t - - -ida_idd.excvec_t.pop_back(): - - pop_back(self) - - -ida_idd.excvec_t.push_back(): - - push_back(self, x) - push_back(self) -> exception_info_t - - -ida_idd.excvec_t.qclear(): - - qclear(self) - - -ida_idd.excvec_t.reserve(): - - reserve(self, cnt) - - -ida_idd.excvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_idd.excvec_t.size(): - - size(self) -> size_t - - -ida_idd.excvec_t.swap(): - - swap(self, r) - - -ida_idd.excvec_t.truncate(): - - truncate(self) - - -ida_idd.get_event_bpt_hea(): - - get_event_bpt_hea(ev) -> ea_t - - -ida_idd.get_event_exc_code(): - - get_event_exc_code(ev) -> uint - - -ida_idd.get_event_exc_ea(): - - get_event_exc_ea(ev) -> ea_t - - -ida_idd.get_event_exc_info(): - - get_event_exc_info(ev) -> char - - -ida_idd.get_event_info(): - - get_event_info(ev) -> char - - -ida_idd.get_event_module_base(): - - get_event_module_base(ev) -> ea_t - - -ida_idd.get_event_module_name(): - - get_event_module_name(ev) -> char - - -ida_idd.get_event_module_size(): - - get_event_module_size(ev) -> asize_t - - -class ida_idd.meminfo_vec_t(): - - Proxy of C++ qvector<(memory_info_t)> class - - -ida_idd.meminfo_vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_idd.meminfo_vec_t.at(): - - at(self, _idx) -> memory_info_t - - -ida_idd.meminfo_vec_t.begin(): - - begin(self) -> memory_info_t - begin(self) -> memory_info_t - - -ida_idd.meminfo_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_idd.meminfo_vec_t.clear(): - - clear(self) - - -ida_idd.meminfo_vec_t.empty(): - - empty(self) -> bool - - -ida_idd.meminfo_vec_t.end(): - - end(self) -> memory_info_t - end(self) -> memory_info_t - - -ida_idd.meminfo_vec_t.erase(): - - erase(self, it) -> memory_info_t - erase(self, first, last) -> memory_info_t - - -ida_idd.meminfo_vec_t.extract(): - - extract(self) -> memory_info_t - - -ida_idd.meminfo_vec_t.find(): - - find(self, x) -> memory_info_t - find(self, x) -> memory_info_t - - -ida_idd.meminfo_vec_t.grow(): - - grow(self, x=memory_info_t()) - - -ida_idd.meminfo_vec_t.has(): - - has(self, x) -> bool - - -ida_idd.meminfo_vec_t.inject(): - - inject(self, s, len) - - -ida_idd.meminfo_vec_t.insert(): - - insert(self, it, x) -> memory_info_t - - -ida_idd.meminfo_vec_t.pop_back(): - - pop_back(self) - - -ida_idd.meminfo_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> memory_info_t - - -ida_idd.meminfo_vec_t.qclear(): - - qclear(self) - - -ida_idd.meminfo_vec_t.reserve(): - - reserve(self, cnt) - - -ida_idd.meminfo_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_idd.meminfo_vec_t.size(): - - size(self) -> size_t - - -ida_idd.meminfo_vec_t.swap(): - - swap(self, r) - - -ida_idd.meminfo_vec_t.truncate(): - - truncate(self) - - -class ida_idd.memory_info_t(): - - Proxy of C++ memory_info_t class - - -ida_idd.memory_info_t._print(): - - _print(self) -> size_t - - -ida_idd.memory_info_t.bitness: - memory_info_t_bitness_get(self) -> uchar - -ida_idd.memory_info_t.clear(): - - clear(self) - - -ida_idd.memory_info_t.compare(): - - compare(self, r) -> int - - -ida_idd.memory_info_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_idd.memory_info_t.empty(): - - empty(self) -> bool - - -ida_idd.memory_info_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_idd.memory_info_t.extend(): - - extend(self, ea) - - -ida_idd.memory_info_t.intersect(): - - intersect(self, r) - - -ida_idd.memory_info_t.name: - memory_info_t_name_get(self) -> qstring * - -ida_idd.memory_info_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_idd.memory_info_t.perm: - memory_info_t_perm_get(self) -> uchar - -ida_idd.memory_info_t.sbase: - memory_info_t_sbase_get(self) -> ea_t - -ida_idd.memory_info_t.sclass: - memory_info_t_sclass_get(self) -> qstring * - -ida_idd.memory_info_t.size(): - - size(self) -> asize_t - - -ida_idd.memory_info_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -class ida_idd.modinfo_t(): - - Proxy of C++ modinfo_t class - - -ida_idd.modinfo_t.base: - modinfo_t_base_get(self) -> ea_t - -ida_idd.modinfo_t.name: - modinfo_t_name_get(self) -> qstring * - -ida_idd.modinfo_t.rebase_to: - modinfo_t_rebase_to_get(self) -> ea_t - -ida_idd.modinfo_t.size: - modinfo_t_size_get(self) -> asize_t - -class ida_idd.process_info_t(): - - Proxy of C++ process_info_t class - - -ida_idd.process_info_t.name: - process_info_t_name_get(self) -> qstring * - -ida_idd.process_info_t.pid: - process_info_t_pid_get(self) -> pid_t - -class ida_idd.procinfo_vec_t(): - - Proxy of C++ qvector<(process_info_t)> class - - -ida_idd.procinfo_vec_t.at(): - - at(self, _idx) -> process_info_t - - -ida_idd.procinfo_vec_t.begin(): - - begin(self) -> process_info_t - begin(self) -> process_info_t - - -ida_idd.procinfo_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_idd.procinfo_vec_t.clear(): - - clear(self) - - -ida_idd.procinfo_vec_t.empty(): - - empty(self) -> bool - - -ida_idd.procinfo_vec_t.end(): - - end(self) -> process_info_t - end(self) -> process_info_t - - -ida_idd.procinfo_vec_t.erase(): - - erase(self, it) -> process_info_t - erase(self, first, last) -> process_info_t - - -ida_idd.procinfo_vec_t.extract(): - - extract(self) -> process_info_t - - -ida_idd.procinfo_vec_t.grow(): - - grow(self, x=process_info_t()) - - -ida_idd.procinfo_vec_t.inject(): - - inject(self, s, len) - - -ida_idd.procinfo_vec_t.insert(): - - insert(self, it, x) -> process_info_t - - -ida_idd.procinfo_vec_t.pop_back(): - - pop_back(self) - - -ida_idd.procinfo_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> process_info_t - - -ida_idd.procinfo_vec_t.qclear(): - - qclear(self) - - -ida_idd.procinfo_vec_t.reserve(): - - reserve(self, cnt) - - -ida_idd.procinfo_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_idd.procinfo_vec_t.size(): - - size(self) -> size_t - - -ida_idd.procinfo_vec_t.swap(): - - swap(self, r) - - -ida_idd.procinfo_vec_t.truncate(): - - truncate(self) - - -class ida_idd.register_info_t(): - - Proxy of C++ register_info_t class - - -ida_idd.register_info_t.bit_strings: - register_info_t_bit_strings_get(self) -> char const *const * - -ida_idd.register_info_t.default_bit_strings_mask: - register_info_t_default_bit_strings_mask_get(self) -> uval_t - -ida_idd.register_info_t.dtype: - register_info_t_dtype_get(self) -> op_dtype_t - -ida_idd.register_info_t.flags: - register_info_t_flags_get(self) -> uint32 - -ida_idd.register_info_t.name: - register_info_t_name_get(self) -> char const * - -ida_idd.register_info_t.register_class: - register_info_t_register_class_get(self) -> register_class_t - -class ida_idd.regval_t(): - - Proxy of C++ regval_t class - - -ida_idd.regval_t.bytes(): - - bytes(self) -> bytevec_t - bytes(self) -> bytevec_t const & - - -ida_idd.regval_t.clear(): - - clear(self) - - -ida_idd.regval_t.fval: - regval_t_fval_get(self) -> uint16 [6] - -ida_idd.regval_t.get_data(): - - get_data(self) - get_data(self) -> void const * - - -ida_idd.regval_t.get_data_size(): - - get_data_size(self) -> size_t - - -ida_idd.regval_t.ival: - regval_t_ival_get(self) -> uint64 - -ida_idd.regval_t.rvtype: - regval_t_rvtype_get(self) -> int32 - -ida_idd.regval_t.set_bytes(): - - set_bytes(self, data, size) - set_bytes(self, v) - set_bytes(self) -> bytevec_t & - - -ida_idd.regval_t.set_float(): - - set_float(self, x) - - -ida_idd.regval_t.set_int(): - - set_int(self, x) - - -ida_idd.regval_t.set_unavailable(): - - set_unavailable(self) - - -ida_idd.regval_t.swap(): - - swap(self, r) - - -class ida_idd.scattered_segm_t(): - - Proxy of C++ scattered_segm_t class - - -ida_idd.scattered_segm_t._print(): - - _print(self) -> size_t - - -ida_idd.scattered_segm_t.clear(): - - clear(self) - - -ida_idd.scattered_segm_t.compare(): - - compare(self, r) -> int - - -ida_idd.scattered_segm_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_idd.scattered_segm_t.empty(): - - empty(self) -> bool - - -ida_idd.scattered_segm_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_idd.scattered_segm_t.extend(): - - extend(self, ea) - - -ida_idd.scattered_segm_t.intersect(): - - intersect(self, r) - - -ida_idd.scattered_segm_t.name: - scattered_segm_t_name_get(self) -> qstring * - -ida_idd.scattered_segm_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_idd.scattered_segm_t.size(): - - size(self) -> asize_t - - -ida_idd.scattered_segm_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_idd.set_debug_event_code(): - - set_debug_event_code(ev, id) - - -class ida_idd.thread_name_t(): - - Proxy of C++ thread_name_t class - - -ida_idd.thread_name_t.name: - thread_name_t_name_get(self) -> qstring * - -ida_idd.thread_name_t.tid: - thread_name_t_tid_get(self) -> thid_t - - -=== ida_idd EPYDOC INJECTIONS === -ida_idd.EXC_BREAK -""" -break on the exception -""" - -ida_idd.EXC_HANDLE -""" -should be handled by the debugger? -""" - -ida_idd.EXC_MSG -""" -instead of a warning, log the exception to the output window -""" - -ida_idd.EXC_SILENT -""" -do not warn or log to the output window -""" - -ida_idd.IDD_INTERFACE_VERSION -""" -The IDD interface version number. -""" - -ida_idd.NO_PROCESS -""" -No process. -""" - -ida_idd.NO_THREAD -""" -No thread. in 'PROCESS_STARTED' this value can be used to specify that -the main thread has not been created. It will be initialized later by -a 'THREAD_STARTED' event. -""" - -ida_idd.REGISTER_ADDRESS -""" -may contain an address -""" - -ida_idd.REGISTER_CS -""" -code segment -""" - -ida_idd.REGISTER_CUSTFMT -""" -register should be displayed using a custom data format. the format -name is in bit_strings[0] the corresponding 'regval_t' will use -'bytevec_t' -""" - -ida_idd.REGISTER_FP -""" -frame pointer -""" - -ida_idd.REGISTER_IP -""" -instruction pointer -""" - -ida_idd.REGISTER_NOLF -""" -allowing the next register to be displayed to its right (on the same -line) - -displays this register without returning to the next line -""" - -ida_idd.REGISTER_READONLY -""" -the user can't modify the current value of this register -""" - -ida_idd.REGISTER_SP -""" -stack pointer -""" - -ida_idd.REGISTER_SS -""" -stack segment -""" - -ida_idd.RVT_FLOAT -""" -floating point -""" - -ida_idd.RVT_INT -""" -integer -""" - -ida_idd.RVT_UNAVAILABLE -""" -other values mean custom data type - -unavailable -""" -=== ida_idd EPYDOC INJECTIONS END === -ida_idp.AssembleLine(): - - AssembleLine(ea, cs, ip, use32, nonnul_line) -> PyObject * - - - Assemble an instruction to a string (display a warning if an error is found) - - @param ea: linear address of instruction - @param cs: cs of instruction - @param ip: ip of instruction - @param use32: is 32bit segment - @param line: line to assemble - @return: - - None on failure - - or a string containing the assembled instruction - - -class ida_idp.IDB_Hooks(): - - Proxy of C++ IDB_Hooks class - - -ida_idp.IDB_Hooks.allsegs_moved(): - - allsegs_moved(self, info) - - -ida_idp.IDB_Hooks.auto_empty(): - - auto_empty(self) - - -ida_idp.IDB_Hooks.auto_empty_finally(): - - auto_empty_finally(self) - - -ida_idp.IDB_Hooks.bookmark_changed(): - - bookmark_changed(self, index, pos, desc) - - -ida_idp.IDB_Hooks.byte_patched(): - - byte_patched(self, ea, old_value) - - -ida_idp.IDB_Hooks.callee_addr_changed(): - - callee_addr_changed(self, ea, callee) - - -ida_idp.IDB_Hooks.changing_cmt(): - - changing_cmt(self, ea, repeatable_cmt, newcmt) - - -ida_idp.IDB_Hooks.changing_enum_bf(): - - changing_enum_bf(self, id, new_bf) - - -ida_idp.IDB_Hooks.changing_enum_cmt(): - - changing_enum_cmt(self, id, repeatable, newcmt) - - -ida_idp.IDB_Hooks.changing_op_ti(): - - changing_op_ti(self, ea, n, new_type, new_fnames) - - -ida_idp.IDB_Hooks.changing_op_type(): - - changing_op_type(self, ea, n, opinfo) - - -ida_idp.IDB_Hooks.changing_range_cmt(): - - changing_range_cmt(self, kind, a, cmt, repeatable) - - -ida_idp.IDB_Hooks.changing_segm_class(): - - changing_segm_class(self, s) - - -ida_idp.IDB_Hooks.changing_segm_end(): - - changing_segm_end(self, s, new_end, segmod_flags) - - -ida_idp.IDB_Hooks.changing_segm_name(): - - changing_segm_name(self, s, oldname) - - -ida_idp.IDB_Hooks.changing_segm_start(): - - changing_segm_start(self, s, new_start, segmod_flags) - - -ida_idp.IDB_Hooks.changing_struc_align(): - - changing_struc_align(self, sptr) - - -ida_idp.IDB_Hooks.changing_struc_cmt(): - - changing_struc_cmt(self, struc_id, repeatable, newcmt) - - -ida_idp.IDB_Hooks.changing_struc_member(): - - changing_struc_member(self, sptr, mptr, flag, ti, nbytes) - - -ida_idp.IDB_Hooks.changing_ti(): - - changing_ti(self, ea, new_type, new_fnames) - - -ida_idp.IDB_Hooks.closebase(): - - closebase(self) - - -ida_idp.IDB_Hooks.cmt_changed(): - - cmt_changed(self, ea, repeatable_cmt) - - -ida_idp.IDB_Hooks.compiler_changed(): - - compiler_changed(self) - - -ida_idp.IDB_Hooks.deleting_enum(): - - deleting_enum(self, id) - - -ida_idp.IDB_Hooks.deleting_enum_member(): - - deleting_enum_member(self, id, cid) - - -ida_idp.IDB_Hooks.deleting_func(): - - deleting_func(self, pfn) - - -ida_idp.IDB_Hooks.deleting_func_tail(): - - deleting_func_tail(self, pfn, tail) - - -ida_idp.IDB_Hooks.deleting_segm(): - - deleting_segm(self, start_ea) - - -ida_idp.IDB_Hooks.deleting_struc(): - - deleting_struc(self, sptr) - - -ida_idp.IDB_Hooks.deleting_struc_member(): - - deleting_struc_member(self, sptr, mptr) - - -ida_idp.IDB_Hooks.deleting_tryblks(): - - deleting_tryblks(self, range) - - -ida_idp.IDB_Hooks.destroyed_items(): - - destroyed_items(self, ea1, ea2, will_disable_range) - - -ida_idp.IDB_Hooks.determined_main(): - - determined_main(self, main) - - -ida_idp.IDB_Hooks.enum_bf_changed(): - - enum_bf_changed(self, id) - - -ida_idp.IDB_Hooks.enum_cmt_changed(): - - enum_cmt_changed(self, id, repeatable) - - -ida_idp.IDB_Hooks.enum_created(): - - enum_created(self, id) - - -ida_idp.IDB_Hooks.enum_deleted(): - - enum_deleted(self, id) - - -ida_idp.IDB_Hooks.enum_member_created(): - - enum_member_created(self, id, cid) - - -ida_idp.IDB_Hooks.enum_member_deleted(): - - enum_member_deleted(self, id, cid) - - -ida_idp.IDB_Hooks.enum_renamed(): - - enum_renamed(self, id) - - -ida_idp.IDB_Hooks.expanding_struc(): - - expanding_struc(self, sptr, offset, delta) - - -ida_idp.IDB_Hooks.extlang_changed(): - - extlang_changed(self, kind, el, idx) - - -ida_idp.IDB_Hooks.extra_cmt_changed(): - - extra_cmt_changed(self, ea, line_idx, cmt) - - -ida_idp.IDB_Hooks.flow_chart_created(): - - flow_chart_created(self, fc) - - -ida_idp.IDB_Hooks.frame_deleted(): - - frame_deleted(self, pfn) - - -ida_idp.IDB_Hooks.func_added(): - - func_added(self, pfn) - - -ida_idp.IDB_Hooks.func_noret_changed(): - - func_noret_changed(self, pfn) - - -ida_idp.IDB_Hooks.func_tail_appended(): - - func_tail_appended(self, pfn, tail) - - -ida_idp.IDB_Hooks.func_tail_deleted(): - - func_tail_deleted(self, pfn, tail_ea) - - -ida_idp.IDB_Hooks.func_updated(): - - func_updated(self, pfn) - - -ida_idp.IDB_Hooks.hook(): - - hook(self) -> bool - - -ida_idp.IDB_Hooks.idasgn_loaded(): - - idasgn_loaded(self, short_sig_name) - - -ida_idp.IDB_Hooks.item_color_changed(): - - item_color_changed(self, ea, color) - - -ida_idp.IDB_Hooks.kernel_config_loaded(): - - kernel_config_loaded(self) - - -ida_idp.IDB_Hooks.loader_finished(): - - loader_finished(self, li, neflags, filetypename) - - -ida_idp.IDB_Hooks.local_types_changed(): - - local_types_changed(self) - - -ida_idp.IDB_Hooks.make_code(): - - make_code(self, insn) - - -ida_idp.IDB_Hooks.make_data(): - - make_data(self, ea, flags, tid, len) - - -ida_idp.IDB_Hooks.op_ti_changed(): - - op_ti_changed(self, ea, n, type, fnames) - - -ida_idp.IDB_Hooks.op_type_changed(): - - op_type_changed(self, ea, n) - - -ida_idp.IDB_Hooks.range_cmt_changed(): - - range_cmt_changed(self, kind, a, cmt, repeatable) - - -ida_idp.IDB_Hooks.renamed(): - - renamed(self, ea, new_name, local_name) - - -ida_idp.IDB_Hooks.renaming_enum(): - - renaming_enum(self, id, is_enum, newname) - - -ida_idp.IDB_Hooks.renaming_struc(): - - renaming_struc(self, id, oldname, newname) - - -ida_idp.IDB_Hooks.renaming_struc_member(): - - renaming_struc_member(self, sptr, mptr, newname) - - -ida_idp.IDB_Hooks.savebase(): - - savebase(self) - - -ida_idp.IDB_Hooks.segm_added(): - - segm_added(self, s) - - -ida_idp.IDB_Hooks.segm_attrs_updated(): - - segm_attrs_updated(self, s) - - -ida_idp.IDB_Hooks.segm_class_changed(): - - segm_class_changed(self, s, sclass) - - -ida_idp.IDB_Hooks.segm_deleted(): - - segm_deleted(self, start_ea, end_ea) - - -ida_idp.IDB_Hooks.segm_end_changed(): - - segm_end_changed(self, s, oldend) - - -ida_idp.IDB_Hooks.segm_moved(): - - segm_moved(self, _from, to, size, changed_netmap) - - -ida_idp.IDB_Hooks.segm_name_changed(): - - segm_name_changed(self, s, name) - - -ida_idp.IDB_Hooks.segm_start_changed(): - - segm_start_changed(self, s, oldstart) - - -ida_idp.IDB_Hooks.set_func_end(): - - set_func_end(self, pfn, new_end) - - -ida_idp.IDB_Hooks.set_func_start(): - - set_func_start(self, pfn, new_start) - - -ida_idp.IDB_Hooks.sgr_changed(): - - sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) - - -ida_idp.IDB_Hooks.sgr_deleted(): - - sgr_deleted(self, start_ea, end_ea, regnum) - - -ida_idp.IDB_Hooks.stkpnts_changed(): - - stkpnts_changed(self, pfn) - - -ida_idp.IDB_Hooks.struc_align_changed(): - - struc_align_changed(self, sptr) - - -ida_idp.IDB_Hooks.struc_cmt_changed(): - - struc_cmt_changed(self, struc_id, repeatable_cmt) - - -ida_idp.IDB_Hooks.struc_created(): - - struc_created(self, struc_id) - - -ida_idp.IDB_Hooks.struc_deleted(): - - struc_deleted(self, struc_id) - - -ida_idp.IDB_Hooks.struc_expanded(): - - struc_expanded(self, sptr) - - -ida_idp.IDB_Hooks.struc_member_changed(): - - struc_member_changed(self, sptr, mptr) - - -ida_idp.IDB_Hooks.struc_member_created(): - - struc_member_created(self, sptr, mptr) - - -ida_idp.IDB_Hooks.struc_member_deleted(): - - struc_member_deleted(self, sptr, member_id, offset) - - -ida_idp.IDB_Hooks.struc_member_renamed(): - - struc_member_renamed(self, sptr, mptr) - - -ida_idp.IDB_Hooks.struc_renamed(): - - struc_renamed(self, sptr) - - -ida_idp.IDB_Hooks.tail_owner_changed(): - - tail_owner_changed(self, tail, owner_func, old_owner) - - -ida_idp.IDB_Hooks.thunk_func_created(): - - thunk_func_created(self, pfn) - - -ida_idp.IDB_Hooks.ti_changed(): - - ti_changed(self, ea, type, fnames) - - -ida_idp.IDB_Hooks.tryblks_updated(): - - tryblks_updated(self, tbv) - - -ida_idp.IDB_Hooks.unhook(): - - unhook(self) -> bool - - -ida_idp.IDB_Hooks.updating_tryblks(): - - updating_tryblks(self, tbv) - - -ida_idp.IDB_Hooks.upgraded(): - - upgraded(self, _from) - - -class ida_idp.IDP_Hooks(): - - Proxy of C++ IDP_Hooks class - - -ida_idp.IDP_Hooks.ev_add_cref(): - - ev_add_cref(self, _from, to, type) -> int - - -ida_idp.IDP_Hooks.ev_add_dref(): - - ev_add_dref(self, _from, to, type) -> int - - -ida_idp.IDP_Hooks.ev_adjust_argloc(): - - ev_adjust_argloc(self, argloc, optional_type, size) -> int - - -ida_idp.IDP_Hooks.ev_adjust_libfunc_ea(): - - ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int - - -ida_idp.IDP_Hooks.ev_adjust_refinfo(): - - ev_adjust_refinfo(self, ri, ea, n, fd) -> int - - -ida_idp.IDP_Hooks.ev_ana_insn(): - - ev_ana_insn(self, out) -> bool - - - Analyzes and decodes an instruction at insn.ea - - insn.itype must be set >= idaapi.CUSTOM_CMD_ITYPE - - insn.size must be set to the instruction length - - @return: Boolean - - False if the instruction is not recognized - - True if the instruction was decoded. 'insn' should be filled in that case. - - -ida_idp.IDP_Hooks.ev_analyze_prolog(): - - ev_analyze_prolog(self, ea) -> int - - -ida_idp.IDP_Hooks.ev_arg_addrs_ready(): - - ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int - - -ida_idp.IDP_Hooks.ev_assemble(): - - ev_assemble(self, ea, cs, ip, use32, line) -> PyObject * - - - Assembles an instruction - - @param ea: linear address of instruction - @param cs: cs of instruction - @param ip: ip of instruction - @param use32: is 32bit segment? - @param line: line to assemble - - @return: - None to let the underlying processor module assemble the line - - or a string containing the assembled buffer - - -ida_idp.IDP_Hooks.ev_auto_queue_empty(): - - ev_auto_queue_empty(self, type) - - -ida_idp.IDP_Hooks.ev_calc_arglocs(): - - ev_calc_arglocs(self, fti) -> int - - -ida_idp.IDP_Hooks.ev_calc_cdecl_purged_bytes(): - - ev_calc_cdecl_purged_bytes(self, ea) -> int - - -ida_idp.IDP_Hooks.ev_calc_next_eas(): - - ev_calc_next_eas(self, res, insn, over) -> int - - -ida_idp.IDP_Hooks.ev_calc_purged_bytes(): - - ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int - - -ida_idp.IDP_Hooks.ev_calc_retloc(): - - ev_calc_retloc(self, retloc, rettype, cc) -> int - - -ida_idp.IDP_Hooks.ev_calc_spdelta(): - - ev_calc_spdelta(self, spdelta, insn) -> int - - -ida_idp.IDP_Hooks.ev_calc_step_over(): - - ev_calc_step_over(self, target, ip) -> int - - -ida_idp.IDP_Hooks.ev_calc_switch_cases(): - - ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int - - -ida_idp.IDP_Hooks.ev_calc_varglocs(): - - ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int - - -ida_idp.IDP_Hooks.ev_calcrel(): - - ev_calcrel(self) -> int - - -ida_idp.IDP_Hooks.ev_can_have_type(): - - ev_can_have_type(self, op) -> int - - -ida_idp.IDP_Hooks.ev_clean_tbit(): - - ev_clean_tbit(self, ea, getreg, regvalues) -> int - - -ida_idp.IDP_Hooks.ev_cmp_operands(): - - ev_cmp_operands(self, op1, op2) -> int - - -ida_idp.IDP_Hooks.ev_coagulate(): - - ev_coagulate(self, start_ea) -> int - - -ida_idp.IDP_Hooks.ev_coagulate_dref(): - - ev_coagulate_dref(self, _from, to, may_define, code_ea) -> int - - -ida_idp.IDP_Hooks.ev_create_flat_group(): - - ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int - - -ida_idp.IDP_Hooks.ev_create_func_frame(): - - ev_create_func_frame(self, pfn) -> int - - -ida_idp.IDP_Hooks.ev_create_switch_xrefs(): - - ev_create_switch_xrefs(self, jumpea, si) -> int - - -ida_idp.IDP_Hooks.ev_creating_segm(): - - ev_creating_segm(self, seg) -> int - - -ida_idp.IDP_Hooks.ev_decorate_name(): - - ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * - - -ida_idp.IDP_Hooks.ev_del_cref(): - - ev_del_cref(self, _from, to, expand) -> int - - -ida_idp.IDP_Hooks.ev_del_dref(): - - ev_del_dref(self, _from, to) -> int - - -ida_idp.IDP_Hooks.ev_delay_slot_insn(): - - ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * - - -ida_idp.IDP_Hooks.ev_demangle_name(): - - ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * - - -ida_idp.IDP_Hooks.ev_emu_insn(): - - ev_emu_insn(self, insn) -> bool - - - Emulate instruction, create cross-references, plan to analyze - subsequent instructions, modify flags etc. Upon entrance to this function - all information about the instruction is in 'insn' structure. - - @return: Boolean (whether this instruction has been emulated or not) - - -ida_idp.IDP_Hooks.ev_endbinary(): - - ev_endbinary(self, ok) -> int - - -ida_idp.IDP_Hooks.ev_ending_undo(): - - ev_ending_undo(self, action_name, is_undo) -> int - - -ida_idp.IDP_Hooks.ev_equal_reglocs(): - - ev_equal_reglocs(self, a1, a2) -> int - - -ida_idp.IDP_Hooks.ev_extract_address(): - - ev_extract_address(self, out_ea, screen_ea, string, position) -> int - - -ida_idp.IDP_Hooks.ev_find_op_value(): - - ev_find_op_value(self, pinsn, opn) -> PyObject * - - -ida_idp.IDP_Hooks.ev_find_reg_value(): - - ev_find_reg_value(self, pinsn, reg) -> PyObject * - - -ida_idp.IDP_Hooks.ev_func_bounds(): - - ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea) - - -ida_idp.IDP_Hooks.ev_gen_asm_or_lst(): - - ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) - - -ida_idp.IDP_Hooks.ev_gen_map_file(): - - ev_gen_map_file(self, nlines, fp) -> int - - -ida_idp.IDP_Hooks.ev_gen_regvar_def(): - - ev_gen_regvar_def(self, outctx, v) -> int - - -ida_idp.IDP_Hooks.ev_gen_src_file_lnnum(): - - ev_gen_src_file_lnnum(self, outctx, file, lnnum) -> int - - -ida_idp.IDP_Hooks.ev_gen_stkvar_def(): - - ev_gen_stkvar_def(self, outctx, mptr, v) -> int - - -ida_idp.IDP_Hooks.ev_get_abi_info(): - - ev_get_abi_info(self, abi_names, abi_opts, comp) -> int - - -ida_idp.IDP_Hooks.ev_get_autocmt(): - - ev_get_autocmt(self, insn) -> PyObject * - - -ida_idp.IDP_Hooks.ev_get_bg_color(): - - ev_get_bg_color(self, ea) -> int or None - - -ida_idp.IDP_Hooks.ev_get_cc_regs(): - - ev_get_cc_regs(self, regs, cc) -> int - - -ida_idp.IDP_Hooks.ev_get_dbr_opnum(): - - ev_get_dbr_opnum(self, opnum, insn) -> int - - -ida_idp.IDP_Hooks.ev_get_default_enum_size(): - - ev_get_default_enum_size(self, cm) -> int - - -ida_idp.IDP_Hooks.ev_get_frame_retsize(): - - ev_get_frame_retsize(self, frsize, pfn) -> int - - -ida_idp.IDP_Hooks.ev_get_macro_insn_head(): - - ev_get_macro_insn_head(self, head, ip) -> int - - -ida_idp.IDP_Hooks.ev_get_operand_string(): - - ev_get_operand_string(self, insn, opnum) -> PyObject * - - -ida_idp.IDP_Hooks.ev_get_reg_info(): - - ev_get_reg_info(self, main_regname, bitrange, regname) -> int - - -ida_idp.IDP_Hooks.ev_get_reg_name(): - - ev_get_reg_name(self, reg, width, reghi) -> PyObject * - - -ida_idp.IDP_Hooks.ev_get_simd_types(): - - ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int - - -ida_idp.IDP_Hooks.ev_get_stkarg_offset(): - - ev_get_stkarg_offset(self) -> int - - -ida_idp.IDP_Hooks.ev_get_stkvar_scale_factor(): - - ev_get_stkvar_scale_factor(self) -> int - - -ida_idp.IDP_Hooks.ev_getreg(): - - ev_getreg(self, regval, regnum) -> int - - -ida_idp.IDP_Hooks.ev_init(): - - ev_init(self, idp_modname) -> int - - -ida_idp.IDP_Hooks.ev_insn_reads_tbit(): - - ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int - - -ida_idp.IDP_Hooks.ev_is_align_insn(): - - ev_is_align_insn(self, ea) -> int - - -ida_idp.IDP_Hooks.ev_is_alloca_probe(): - - ev_is_alloca_probe(self, ea) -> int - - -ida_idp.IDP_Hooks.ev_is_basic_block_end(): - - ev_is_basic_block_end(self, insn, call_insn_stops_block) -> int - - -ida_idp.IDP_Hooks.ev_is_call_insn(): - - ev_is_call_insn(self, insn) -> int - - - Is the instruction a "call"? - - @param insn: instruction - @return: 0-unknown, 1-yes, -1-no - - -ida_idp.IDP_Hooks.ev_is_cond_insn(): - - ev_is_cond_insn(self, insn) -> int - - -ida_idp.IDP_Hooks.ev_is_far_jump(): - - ev_is_far_jump(self, icode) -> int - - -ida_idp.IDP_Hooks.ev_is_indirect_jump(): - - ev_is_indirect_jump(self, insn) -> int - - -ida_idp.IDP_Hooks.ev_is_insn_table_jump(): - - ev_is_insn_table_jump(self, insn) -> int - - -ida_idp.IDP_Hooks.ev_is_jump_func(): - - ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int - - -ida_idp.IDP_Hooks.ev_is_ret_insn(): - - ev_is_ret_insn(self, insn, strict) -> int - - - Is the instruction a "return"? - - @param insn: instruction - @param strict: - True: report only ret instructions - False: include instructions like "leave" which begins the function epilog - @return: 0-unknown, 1-yes, -1-no - - -ida_idp.IDP_Hooks.ev_is_sane_insn(): - - ev_is_sane_insn(self, insn, no_crefs) -> int - - - is the instruction sane for the current file type? - @param insn: the instruction - @param no_crefs: - - 1: the instruction has no code refs to it. - ida just tries to convert unexplored bytes - to an instruction (but there is no other - reason to convert them into an instruction) - - 0: the instruction is created because - of some coderef, user request or another - weighty reason. - @return: >=0-ok, <0-no, the instruction isn't likely to appear in the program - - -ida_idp.IDP_Hooks.ev_is_sp_based(): - - ev_is_sp_based(self, mode, insn, op) -> int - - -ida_idp.IDP_Hooks.ev_is_switch(): - - ev_is_switch(self, si, insn) -> int - - -ida_idp.IDP_Hooks.ev_last_cb_before_loader(): - - ev_last_cb_before_loader(self) -> int - - -ida_idp.IDP_Hooks.ev_loader(): - - ev_loader(self) -> int - - -ida_idp.IDP_Hooks.ev_lower_func_type(): - - ev_lower_func_type(self, argnums, fti) -> int - - -ida_idp.IDP_Hooks.ev_max_ptr_size(): - - ev_max_ptr_size(self) -> int - - -ida_idp.IDP_Hooks.ev_may_be_func(): - - ev_may_be_func(self, insn, state) -> int - - - Can a function start here? - @param insn: the instruction - @param state: autoanalysis phase - 0: creating functions - 1: creating chunks - - @return: integer (probability 0..100) - - -ida_idp.IDP_Hooks.ev_may_show_sreg(): - - ev_may_show_sreg(self, current_ea) -> int - - -ida_idp.IDP_Hooks.ev_moving_segm(): - - ev_moving_segm(self, seg, to, flags) -> int - - -ida_idp.IDP_Hooks.ev_newasm(): - - ev_newasm(self, asmnum) -> int - - -ida_idp.IDP_Hooks.ev_newbinary(): - - ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes) -> int - - -ida_idp.IDP_Hooks.ev_newfile(): - - ev_newfile(self, fname) -> int - - -ida_idp.IDP_Hooks.ev_newprc(): - - ev_newprc(self, pnum, keep_cfg) -> int - - -ida_idp.IDP_Hooks.ev_next_exec_insn(): - - ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int - - -ida_idp.IDP_Hooks.ev_oldfile(): - - ev_oldfile(self, fname) -> int - - -ida_idp.IDP_Hooks.ev_out_assumes(): - - ev_out_assumes(self, outctx) -> int - - -ida_idp.IDP_Hooks.ev_out_data(): - - ev_out_data(self, outctx, analyze_only) -> int - - -ida_idp.IDP_Hooks.ev_out_footer(): - - ev_out_footer(self, outctx) - - -ida_idp.IDP_Hooks.ev_out_header(): - - ev_out_header(self, outctx) - - -ida_idp.IDP_Hooks.ev_out_insn(): - - ev_out_insn(self, outctx) -> bool - - - Outputs the instruction defined in 'ctx.insn' - - @return: Boolean (whether this instruction can be outputted or not) - - -ida_idp.IDP_Hooks.ev_out_label(): - - ev_out_label(self, outctx, colored_name) -> int - - -ida_idp.IDP_Hooks.ev_out_mnem(): - - ev_out_mnem(self, outctx) -> int - - -ida_idp.IDP_Hooks.ev_out_operand(): - - ev_out_operand(self, outctx, op) -> bool - - - Notification to generate operand text. - If False was returned, then the standard operand output function will be called. - - this notification may use out_...() functions to form the operand text - - @return: Boolean (whether the operand has been outputted or not) - - -ida_idp.IDP_Hooks.ev_out_segend(): - - ev_out_segend(self, outctx, seg) -> int - - -ida_idp.IDP_Hooks.ev_out_segstart(): - - ev_out_segstart(self, outctx, seg) -> int - - -ida_idp.IDP_Hooks.ev_out_special_item(): - - ev_out_special_item(self, outctx, segtype) -> int - - -ida_idp.IDP_Hooks.ev_realcvt(): - - ev_realcvt(self, m, e, swt) -> int - - -ida_idp.IDP_Hooks.ev_rename(): - - ev_rename(self, ea, new_name) -> int - - - The kernel is going to rename a byte. - - @param ea: Address - @param new_name: The new name - - @return: - - If returns value <0, then the kernel should - not rename it. See also the 'renamed' event - - -ida_idp.IDP_Hooks.ev_replaying_undo(): - - ev_replaying_undo(self, action_name, vec, is_undo) -> int - - -ida_idp.IDP_Hooks.ev_set_idp_options(): - - ev_set_idp_options(self, keyword, value_type, value, errbuf, idb_loaded) -> int - - -ida_idp.IDP_Hooks.ev_set_proc_options(): - - ev_set_proc_options(self, options, confidence) -> int - - -ida_idp.IDP_Hooks.ev_setup_til(): - - ev_setup_til(self) - - -ida_idp.IDP_Hooks.ev_shadow_args_size(): - - ev_shadow_args_size(self, shadow_args_size, pfn) -> int - - -ida_idp.IDP_Hooks.ev_str2reg(): - - ev_str2reg(self, regname) -> int - - -ida_idp.IDP_Hooks.ev_term(): - - ev_term(self) -> int - - -ida_idp.IDP_Hooks.ev_treat_hindering_item(): - - ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> int - - -ida_idp.IDP_Hooks.ev_undefine(): - - ev_undefine(self, ea) -> int - - - An item in the database (insn or data) is being deleted - @param ea: Address - @return: - - 1 - do not delete srranges at the item end - - 0 - srranges can be deleted - - -ida_idp.IDP_Hooks.ev_use_arg_types(): - - ev_use_arg_types(self, ea, fti, rargs) -> int - - -ida_idp.IDP_Hooks.ev_use_regarg_type(): - - ev_use_regarg_type(self, ea, rargs) -> PyObject * - - -ida_idp.IDP_Hooks.ev_use_stkarg_type(): - - ev_use_stkarg_type(self, ea, arg) -> int - - -ida_idp.IDP_Hooks.ev_validate_flirt_func(): - - ev_validate_flirt_func(self, start_ea, funcname) -> int - - -ida_idp.IDP_Hooks.ev_verify_noreturn(): - - ev_verify_noreturn(self, pfn) -> int - - -ida_idp.IDP_Hooks.ev_verify_sp(): - - ev_verify_sp(self, pfn) -> int - - -ida_idp.IDP_Hooks.hook(): - - hook(self) -> bool - - - Creates an IDP hook - - @return: Boolean true on success - - -ida_idp.IDP_Hooks.unhook(): - - unhook(self) -> bool - - - Removes the IDP hook - @return: Boolean true on success - - -class ida_idp.asm_t(): - - Proxy of C++ asm_t class - - -ida_idp.asm_t.a_align: - asm_t_a_align_get(self) -> char const * - -ida_idp.asm_t.a_ascii: - asm_t_a_ascii_get(self) -> char const * - -ida_idp.asm_t.a_band: - asm_t_a_band_get(self) -> char const * - -ida_idp.asm_t.a_bnot: - asm_t_a_bnot_get(self) -> char const * - -ida_idp.asm_t.a_bor: - asm_t_a_bor_get(self) -> char const * - -ida_idp.asm_t.a_bss: - asm_t_a_bss_get(self) -> char const * - -ida_idp.asm_t.a_byte: - asm_t_a_byte_get(self) -> char const * - -ida_idp.asm_t.a_comdef: - asm_t_a_comdef_get(self) -> char const * - -ida_idp.asm_t.a_curip: - asm_t_a_curip_get(self) -> char const * - -ida_idp.asm_t.a_double: - asm_t_a_double_get(self) -> char const * - -ida_idp.asm_t.a_dups: - asm_t_a_dups_get(self) -> char const * - -ida_idp.asm_t.a_dword: - asm_t_a_dword_get(self) -> char const * - -ida_idp.asm_t.a_equ: - asm_t_a_equ_get(self) -> char const * - -ida_idp.asm_t.a_extrn: - asm_t_a_extrn_get(self) -> char const * - -ida_idp.asm_t.a_float: - asm_t_a_float_get(self) -> char const * - -ida_idp.asm_t.a_include_fmt: - asm_t_a_include_fmt_get(self) -> char const * - -ida_idp.asm_t.a_mod: - asm_t_a_mod_get(self) -> char const * - -ida_idp.asm_t.a_oword: - asm_t_a_oword_get(self) -> char const * - -ida_idp.asm_t.a_packreal: - asm_t_a_packreal_get(self) -> char const * - -ida_idp.asm_t.a_public: - asm_t_a_public_get(self) -> char const * - -ida_idp.asm_t.a_qword: - asm_t_a_qword_get(self) -> char const * - -ida_idp.asm_t.a_rva: - asm_t_a_rva_get(self) -> char const * - -ida_idp.asm_t.a_seg: - asm_t_a_seg_get(self) -> char const * - -ida_idp.asm_t.a_shl: - asm_t_a_shl_get(self) -> char const * - -ida_idp.asm_t.a_shr: - asm_t_a_shr_get(self) -> char const * - -ida_idp.asm_t.a_sizeof_fmt: - asm_t_a_sizeof_fmt_get(self) -> char const * - -ida_idp.asm_t.a_tbyte: - asm_t_a_tbyte_get(self) -> char const * - -ida_idp.asm_t.a_vstruc_fmt: - asm_t_a_vstruc_fmt_get(self) -> char const * - -ida_idp.asm_t.a_weak: - asm_t_a_weak_get(self) -> char const * - -ida_idp.asm_t.a_word: - asm_t_a_word_get(self) -> char const * - -ida_idp.asm_t.a_xor: - asm_t_a_xor_get(self) -> char const * - -ida_idp.asm_t.a_yword: - asm_t_a_yword_get(self) -> char const * - -ida_idp.asm_t.accsep: - asm_t_accsep_get(self) -> char - -ida_idp.asm_t.ascsep: - asm_t_ascsep_get(self) -> char - -ida_idp.asm_t.cmnt: - asm_t_cmnt_get(self) -> char const * - -ida_idp.asm_t.cmnt2: - asm_t_cmnt2_get(self) -> char const * - -ida_idp.asm_t.end: - asm_t_end_get(self) -> char const * - -ida_idp.asm_t.esccodes: - asm_t_esccodes_get(self) -> char const * - -ida_idp.asm_t.flag: - asm_t_flag_get(self) -> uint32 - -ida_idp.asm_t.flag2: - asm_t_flag2_get(self) -> uint32 - -ida_idp.asm_t.header: - asm_t_header_get(self) -> char const *const * - -ida_idp.asm_t.help: - asm_t_help_get(self) -> help_t - -ida_idp.asm_t.high16: - asm_t_high16_get(self) -> char const * - -ida_idp.asm_t.high8: - asm_t_high8_get(self) -> char const * - -ida_idp.asm_t.lbrace: - asm_t_lbrace_get(self) -> char - -ida_idp.asm_t.low16: - asm_t_low16_get(self) -> char const * - -ida_idp.asm_t.low8: - asm_t_low8_get(self) -> char const * - -ida_idp.asm_t.name: - asm_t_name_get(self) -> char const * - -ida_idp.asm_t.origin: - asm_t_origin_get(self) -> char const * - -ida_idp.asm_t.rbrace: - asm_t_rbrace_get(self) -> char - -ida_idp.asm_t.uflag: - asm_t_uflag_get(self) -> uint16 - -ida_idp.assemble(): - - assemble(ea, cs, ip, use32, line) -> bool - - - Assemble an instruction into the database (display a warning if an error is found) - @param ea: linear address of instruction - @param cs: cs of instruction - @param ip: ip of instruction - @param use32: is 32bit segment? - @param line: line to assemble - - @return: Boolean. True on success. - - -ida_idp.cfg_get_cc_header_path(): - - cfg_get_cc_header_path(compid) -> char const * - - -ida_idp.cfg_get_cc_parm(): - - cfg_get_cc_parm(compid, name) -> char const * - - -ida_idp.cfg_get_cc_predefined_macros(): - - cfg_get_cc_predefined_macros(compid) -> char const * - - -ida_idp.delay_slot_insn(): - - delay_slot_insn(ea, bexec, fexec) -> bool - - - Helper function to get the delay slot instruction. - - - @param ea (C++: ea_t *) - @param bexec (C++: bool *) - @param fexec (C++: bool *) - - -ida_idp.gen_idb_event(): - - gen_idb_event(code) - - - the kernel will use this function to generate idb_events - - - @param code (C++: idb_event::event_code_t) - - -ida_idp.get_idb_notifier_addr(): - - get_idb_notifier_addr(arg1) -> PyObject * - - -ida_idp.get_idb_notifier_ud_addr(): - - get_idb_notifier_ud_addr(hooks) -> PyObject * - - -ida_idp.get_idp_name(): - - get_idp_name() -> char * - - - Get name of the current processor module. The name is derived from the - file name. For example, for IBM PC the module is named "pc.w32" - (windows version), then the module name is "PC" (uppercase). If no - processor module is loaded, this function will return NULL - - -ida_idp.get_idp_notifier_addr(): - - get_idp_notifier_addr(arg1) -> PyObject * - - -ida_idp.get_idp_notifier_ud_addr(): - - get_idp_notifier_ud_addr(hooks) -> PyObject * - - -ida_idp.get_reg_info(): - - get_reg_info(regname, bitrange) -> char const * - - - Get register information - useful for registers like al, ah, dil, etc. - - @param regname (C++: const char *) - @param bitrange (C++: bitrange_t *) - @return: NULL no such register - - -ida_idp.get_reg_name(): - - get_reg_name(reg, width, reghi=-1) -> ssize_t - - - Get text representation of a register. For most processors this - function will just return \ph{reg_names}[reg]. If the processor module - has implemented processor_t::get_reg_name, it will be used instead - - @param reg: internal register number as defined in the processor - module (C++: int) - @param width: register width in bytes (C++: size_t) - @param reghi: if specified, then this function will return the - register pair (C++: int) - @return: length of register name in bytes or -1 if failure - - -ida_idp.has_cf_chg(): - - has_cf_chg(feature, opnum) -> bool - - - Does an instruction with the specified feature modify the i-th - operand? - - - @param feature (C++: uint32) - @param opnum (C++: uint) - - -ida_idp.has_cf_use(): - - has_cf_use(feature, opnum) -> bool - - - Does an instruction with the specified feature use a value of the i-th - operand? - - - @param feature (C++: uint32) - @param opnum (C++: uint) - - -ida_idp.has_insn_feature(): - - has_insn_feature(icode, bit) -> bool - - - Does the specified instruction have the specified feature? - - - @param icode (C++: int) - @param bit (C++: uint32) - - -ida_idp.is_align_insn(): - - is_align_insn(ea) -> int - - - If the instruction at 'ea' looks like an alignment instruction, return - its length in bytes. Otherwise return 0. - - @param ea (C++: ea_t) - - -ida_idp.is_basic_block_end(): - - is_basic_block_end(insn, call_insn_stops_block) -> bool - - - Is the instruction the end of a basic block? - - - @param insn (C++: const insn_t &) - @param call_insn_stops_block (C++: bool) - - -ida_idp.is_call_insn(): - - is_call_insn(insn) -> bool - - - Is the instruction a "call"? - - - @param insn (C++: const insn_t &) - - -ida_idp.is_indirect_jump_insn(): - - is_indirect_jump_insn(insn) -> bool - - - Is the instruction an indirect jump? - - - @param insn (C++: const insn_t &) - - -ida_idp.is_ret_insn(): - - is_ret_insn(insn, strict=True) -> bool - - - Is the instruction a "return"? - - - @param insn (C++: const insn_t &) - @param strict (C++: bool) - - -ida_idp.parse_reg_name(): - - parse_reg_name(ri, regname) -> bool - - - Get register info by name. - - @param ri: result (C++: reg_info_t *) - @param regname: name of register (C++: const char *) - @return: success - - -ida_idp.ph_calcrel(): - - ph_calcrel(ea) - - -ida_idp.ph_find_op_value(): - - ph_find_op_value(insn, op) -> ssize_t - - -ida_idp.ph_find_reg_value(): - - ph_find_reg_value(insn, reg) -> ssize_t - - -ida_idp.ph_get_cnbits(): - - ph_get_cnbits() -> size_t - - - Returns the 'ph.cnbits' - - -ida_idp.ph_get_dnbits(): - - ph_get_dnbits() -> size_t - - - Returns the 'ph.dnbits' - - -ida_idp.ph_get_flag(): - - ph_get_flag() -> size_t - - - Returns the 'ph.flag' - - -ida_idp.ph_get_icode_return(): - - ph_get_icode_return() -> size_t - - - Returns the 'ph.icode_return' - - -ida_idp.ph_get_id(): - - ph_get_id() -> size_t - - - Returns the 'ph.id' field - - -ida_idp.ph_get_instruc(): - - ph_get_instruc() -> PyObject * - - - Returns a list of tuples (instruction_name, instruction_feature) containing the - instructions list as defined in he processor module - - -ida_idp.ph_get_instruc_end(): - - ph_get_instruc_end() -> size_t - - - Returns the 'ph.instruc_end' - - -ida_idp.ph_get_instruc_start(): - - ph_get_instruc_start() -> size_t - - - Returns the 'ph.instruc_start' - - -ida_idp.ph_get_operand_info(): - - ph_get_operand_info(ea, n) -> PyObject * - - - Returns the operand information given an ea and operand number. - - @param ea: address - @param n: operand number - - @return: Returns an idd_opinfo_t as a tuple: (modified, ea, reg_ival, regidx, value_size). - Please refer to idd_opinfo_t structure in the SDK. - - -ida_idp.ph_get_reg_code_sreg(): - - ph_get_reg_code_sreg() -> size_t - - - Returns the 'ph.reg_code_sreg' - - -ida_idp.ph_get_reg_data_sreg(): - - ph_get_reg_data_sreg() -> size_t - - - Returns the 'ph.reg_data_sreg' - - -ida_idp.ph_get_reg_first_sreg(): - - ph_get_reg_first_sreg() -> size_t - - - Returns the 'ph.reg_first_sreg' - - -ida_idp.ph_get_reg_last_sreg(): - - ph_get_reg_last_sreg() -> size_t - - - Returns the 'ph.reg_last_sreg' - - -ida_idp.ph_get_regnames(): - - ph_get_regnames() -> PyObject * - - - Returns the list of register names as defined in the processor module - - -ida_idp.ph_get_segreg_size(): - - ph_get_segreg_size() -> size_t - - - Returns the 'ph.segreg_size' - - -ida_idp.ph_get_tbyte_size(): - - ph_get_tbyte_size() -> size_t - - - Returns the 'ph.tbyte_size' field as defined in he processor module - - -ida_idp.ph_get_version(): - - ph_get_version() -> size_t - - - Returns the 'ph.version' - - -ida_idp.processor_t.ev_add_cref(): - - ev_add_cref(self, _from, to, type) -> int - - -ida_idp.processor_t.ev_add_dref(): - - ev_add_dref(self, _from, to, type) -> int - - -ida_idp.processor_t.ev_adjust_argloc(): - - ev_adjust_argloc(self, argloc, optional_type, size) -> int - - -ida_idp.processor_t.ev_adjust_libfunc_ea(): - - ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int - - -ida_idp.processor_t.ev_adjust_refinfo(): - - ev_adjust_refinfo(self, ri, ea, n, fd) -> int - - -ida_idp.processor_t.ev_analyze_prolog(): - - ev_analyze_prolog(self, ea) -> int - - -ida_idp.processor_t.ev_arg_addrs_ready(): - - ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int - - -ida_idp.processor_t.ev_calc_arglocs(): - - ev_calc_arglocs(self, fti) -> int - - -ida_idp.processor_t.ev_calc_cdecl_purged_bytes(): - - ev_calc_cdecl_purged_bytes(self, ea) -> int - - -ida_idp.processor_t.ev_calc_next_eas(): - - ev_calc_next_eas(self, res, insn, over) -> int - - -ida_idp.processor_t.ev_calc_purged_bytes(): - - ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int - - -ida_idp.processor_t.ev_calc_retloc(): - - ev_calc_retloc(self, retloc, rettype, cc) -> int - - -ida_idp.processor_t.ev_calc_spdelta(): - - ev_calc_spdelta(self, spdelta, insn) -> int - - -ida_idp.processor_t.ev_calc_switch_cases(): - - ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int - - -ida_idp.processor_t.ev_calc_varglocs(): - - ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int - - -ida_idp.processor_t.ev_calcrel(): - - ev_calcrel(self) -> int - - -ida_idp.processor_t.ev_clean_tbit(): - - ev_clean_tbit(self, ea, getreg, regvalues) -> int - - -ida_idp.processor_t.ev_create_flat_group(): - - ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int - - -ida_idp.processor_t.ev_decorate_name(): - - ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * - - -ida_idp.processor_t.ev_del_cref(): - - ev_del_cref(self, _from, to, expand) -> int - - -ida_idp.processor_t.ev_del_dref(): - - ev_del_dref(self, _from, to) -> int - - -ida_idp.processor_t.ev_delay_slot_insn(): - - ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * - - -ida_idp.processor_t.ev_demangle_name(): - - ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * - - -ida_idp.processor_t.ev_ending_undo(): - - ev_ending_undo(self, action_name, is_undo) -> int - - -ida_idp.processor_t.ev_equal_reglocs(): - - ev_equal_reglocs(self, a1, a2) -> int - - -ida_idp.processor_t.ev_extract_address(): - - ev_extract_address(self, out_ea, screen_ea, string, position) -> int - - -ida_idp.processor_t.ev_find_op_value(): - - ev_find_op_value(self, pinsn, opn) -> PyObject * - - -ida_idp.processor_t.ev_find_reg_value(): - - ev_find_reg_value(self, pinsn, reg) -> PyObject * - - -ida_idp.processor_t.ev_gen_asm_or_lst(): - - ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) - - -ida_idp.processor_t.ev_gen_stkvar_def(): - - ev_gen_stkvar_def(self, outctx, mptr, v) -> int - - -ida_idp.processor_t.ev_get_abi_info(): - - ev_get_abi_info(self, abi_names, abi_opts, comp) -> int - - -ida_idp.processor_t.ev_get_bg_color(): - - ev_get_bg_color(self, ea) -> int or None - - -ida_idp.processor_t.ev_get_cc_regs(): - - ev_get_cc_regs(self, regs, cc) -> int - - -ida_idp.processor_t.ev_get_dbr_opnum(): - - ev_get_dbr_opnum(self, opnum, insn) -> int - - -ida_idp.processor_t.ev_get_default_enum_size(): - - ev_get_default_enum_size(self, cm) -> int - - -ida_idp.processor_t.ev_get_macro_insn_head(): - - ev_get_macro_insn_head(self, head, ip) -> int - - -ida_idp.processor_t.ev_get_reg_info(): - - ev_get_reg_info(self, main_regname, bitrange, regname) -> int - - -ida_idp.processor_t.ev_get_reg_name(): - - ev_get_reg_name(self, reg, width, reghi) -> PyObject * - - -ida_idp.processor_t.ev_get_simd_types(): - - ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int - - -ida_idp.processor_t.ev_get_stkarg_offset(): - - ev_get_stkarg_offset(self) -> int - - -ida_idp.processor_t.ev_get_stkvar_scale_factor(): - - ev_get_stkvar_scale_factor(self) -> int - - -ida_idp.processor_t.ev_getreg(): - - ev_getreg(self, regval, regnum) -> int - - -ida_idp.processor_t.ev_init(): - - ev_init(self, idp_modname) -> int - - -ida_idp.processor_t.ev_insn_reads_tbit(): - - ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int - - -ida_idp.processor_t.ev_is_cond_insn(): - - ev_is_cond_insn(self, insn) -> int - - -ida_idp.processor_t.ev_is_jump_func(): - - ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int - - -ida_idp.processor_t.ev_last_cb_before_loader(): - - ev_last_cb_before_loader(self) -> int - - -ida_idp.processor_t.ev_loader(): - - ev_loader(self) -> int - - -ida_idp.processor_t.ev_lower_func_type(): - - ev_lower_func_type(self, argnums, fti) -> int - - -ida_idp.processor_t.ev_max_ptr_size(): - - ev_max_ptr_size(self) -> int - - -ida_idp.processor_t.ev_newasm(): - - ev_newasm(self, asmnum) -> int - - -ida_idp.processor_t.ev_next_exec_insn(): - - ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int - - -ida_idp.processor_t.ev_realcvt(): - - ev_realcvt(self, m, e, swt) -> int - - -ida_idp.processor_t.ev_replaying_undo(): - - ev_replaying_undo(self, action_name, vec, is_undo) -> int - - -ida_idp.processor_t.ev_setup_til(): - - ev_setup_til(self) - - -ida_idp.processor_t.ev_shadow_args_size(): - - ev_shadow_args_size(self, shadow_args_size, pfn) -> int - - -ida_idp.processor_t.ev_term(): - - ev_term(self) -> int - - -ida_idp.processor_t.ev_use_arg_types(): - - ev_use_arg_types(self, ea, fti, rargs) -> int - - -ida_idp.processor_t.ev_use_regarg_type(): - - ev_use_regarg_type(self, ea, rargs) -> PyObject * - - -ida_idp.processor_t.ev_use_stkarg_type(): - - ev_use_stkarg_type(self, ea, arg) -> int - - -ida_idp.processor_t.get_auxpref(): - - This function returns insn.auxpref value - - -ida_idp.processor_t.get_idpdesc(): - - This function must be present and should return the list of - short processor names similar to the one in ph.psnames. - This method can be overridden to return to the kernel a different IDP description. - - -ida_idp.processor_t.get_uFlag(): - - Use this utility function to retrieve the 'uFlag' global variable - - -ida_idp.processor_t.hook(): - - hook(self) -> bool - - - Creates an IDP hook - - @return: Boolean true on success - - -ida_idp.processor_t.unhook(): - - unhook(self) -> bool - - - Removes the IDP hook - @return: Boolean true on success - - -class ida_idp.reg_info_t(): - - Proxy of C++ reg_info_t class - - -ida_idp.reg_info_t.compare(): - - compare(self, r) -> int - - -ida_idp.reg_info_t.reg: - reg_info_t_reg_get(self) -> int - -ida_idp.reg_info_t.size: - reg_info_t_size_get(self) -> int - -ida_idp.set_processor_type(): - - set_processor_type(procname, level) -> bool - - - Set target processor type. Once a processor module is loaded, it - cannot be replaced until we close the idb. - - @param procname: name of processor type (one of names present in - \ph{psnames}) (C++: const char *) - @param level: SETPROC_ (C++: setproc_level_t) - @return: success - - -ida_idp.set_target_assembler(): - - set_target_assembler(asmnum) -> bool - - - Set target assembler. - - @param asmnum: number of assembler in the current processor module - (C++: int) - @return: success - - -ida_idp.sizeof_ldbl(): - - sizeof_ldbl() -> size_t - - - Get size of long double. - - -ida_idp.str2reg(): - - str2reg(p) -> int - - - Get any reg number (-1 on error) - - - @param p (C++: const char *) - - - -=== ida_idp EPYDOC INJECTIONS === -ida_idp.AS2_BRACE -""" -Use braces for all expressions. -""" - -ida_idp.AS2_BYTE1CHAR -""" -Meaningful only for wide byte processors. - -One symbol per processor byte -""" - -ida_idp.AS2_COLONSUF -""" -addresses may have ":xx" suffix this suffix must be ignored when -extracting the address under the cursor -""" - -ida_idp.AS2_IDEALDSCR -""" -Description of struc/union is in the 'reverse' form (keyword before -name) the same as in borland tasm ideal -""" - -ida_idp.AS2_STRINV -""" -(For processors with bytes bigger than 8 bits) - -Invert meaning of \\inf{wide_high_byte_first} for text strings -""" - -ida_idp.AS2_TERSESTR -""" -NAME is supported. - -'terse' structure initialization form -""" - -ida_idp.AS2_YWORD -""" -a_yword field is present and valid -""" - -ida_idp.ASB_BINF0 -""" -010101b -""" - -ida_idp.ASB_BINF1 -""" -^B010101 -""" - -ida_idp.ASB_BINF2 -""" -%010101 -""" - -ida_idp.ASB_BINF3 -""" -0b1010101 -""" - -ida_idp.ASB_BINF4 -""" -b'1010101 -""" - -ida_idp.ASB_BINF5 -""" -b'1010101' -""" - -ida_idp.ASD_DECF0 -""" -34 -""" - -ida_idp.ASD_DECF1 -""" -#34 -""" - -ida_idp.ASD_DECF3 -""" -.34 -""" - -ida_idp.ASH_HEXF0 -""" -34h -""" - -ida_idp.ASH_HEXF1 -""" -h'34 -""" - -ida_idp.ASH_HEXF2 -""" -34 -""" - -ida_idp.ASH_HEXF3 -""" -0x34 -""" - -ida_idp.ASH_HEXF4 -""" -$34 -""" - -ida_idp.ASH_HEXF5 -""" -<^R > (radix) -""" - -ida_idp.ASO_OCTF0 -""" -123o -""" - -ida_idp.ASO_OCTF1 -""" -0123 -""" - -ida_idp.ASO_OCTF2 -""" -123 -""" - -ida_idp.ASO_OCTF3 -""" -@123 -""" - -ida_idp.ASO_OCTF4 -""" -o'123 -""" - -ida_idp.ASO_OCTF5 -""" -123q -""" - -ida_idp.ASO_OCTF6 -""" -~123 -""" - -ida_idp.ASO_OCTF7 -""" -q'123 -""" - -ida_idp.AS_1TEXT -""" -1 text per line, no bytes -""" - -ida_idp.AS_2CHRE -""" -double char constants are: "xy -""" - -ida_idp.AS_ALIGN2 -""" -(.align 5 means to align at 32byte boundary) - -.align directive expects an exponent rather than a power of 2 -""" - -ida_idp.AS_ASCIIC -""" -(\\n,\\x01 and similar) - -ascii directive accepts C-like escape sequences -""" - -ida_idp.AS_ASCIIZ -""" -ascii directive inserts implicit zero byte at the end -""" - -ida_idp.AS_BINFM -""" -mask - binary number format -""" - -ida_idp.AS_COLON -""" -create colons after data names ? -""" - -ida_idp.AS_DECFM -""" -mask - decimal number format -""" - -ida_idp.AS_HEXFM -""" -mask - hex number format -""" - -ida_idp.AS_LALIGN -""" -Labels at "align" keyword are supported. -""" - -ida_idp.AS_N2CHR -""" -can't have 2 byte char consts -""" - -ida_idp.AS_NCHRE -""" -char constants are: 'x -""" - -ida_idp.AS_NCMAS -""" -no commas in ascii directives -""" - -ida_idp.AS_NHIAS -""" -no characters with high bit -""" - -ida_idp.AS_NOCODECLN -""" -don't create colons after code names -""" - -ida_idp.AS_NOSPACE -""" -No spaces in expressions. -""" - -ida_idp.AS_NOXRF -""" -Disable xrefs during the output file generation. -""" - -ida_idp.AS_OCTFM -""" -mask - octal number format -""" - -ida_idp.AS_OFFST -""" -offsets are 'offset xxx' ? -""" - -ida_idp.AS_ONEDUP -""" -One array definition per line. -""" - -ida_idp.AS_RELSUP -""" -Checkarg: 'and','or','xor' operations with addresses are possible. -""" - -ida_idp.AS_UDATA -""" -can use '?' in data directives -""" - -ida_idp.AS_UNEQU -""" -replace undefined data items with EQU (for ANTA's A80) -""" - -ida_idp.AS_XTRNTYPE -""" -Assembler understands type of extern symbols as ":type" suffix. -""" - -ida_idp.CF_CALL -""" -CALL instruction (should make a procedure here) -""" - -ida_idp.CF_CHG1 -""" -The instruction modifies the first operand. -""" - -ida_idp.CF_CHG2 -""" -The instruction modifies the second operand. -""" - -ida_idp.CF_CHG3 -""" -The instruction modifies the third operand. -""" - -ida_idp.CF_CHG4 -""" -The instruction modifies 4 operand. -""" - -ida_idp.CF_CHG5 -""" -The instruction modifies 5 operand. -""" - -ida_idp.CF_CHG6 -""" -The instruction modifies 6 operand. -""" - -ida_idp.CF_HLL -""" -language function. - -Instruction may be present in a high level -""" - -ida_idp.CF_JUMP -""" -jump or call (thus needs additional analysis) - -The instruction passes execution using indirect -""" - -ida_idp.CF_SHFT -""" -Bit-shift instruction (shl,shr...) -""" - -ida_idp.CF_STOP -""" -next instruction - -Instruction doesn't pass execution to the -""" - -ida_idp.CF_USE1 -""" -The instruction uses value of the first operand. -""" - -ida_idp.CF_USE2 -""" -The instruction uses value of the second operand. -""" - -ida_idp.CF_USE3 -""" -The instruction uses value of the third operand. -""" - -ida_idp.CF_USE4 -""" -The instruction uses value of the 4 operand. -""" - -ida_idp.CF_USE5 -""" -The instruction uses value of the 5 operand. -""" - -ida_idp.CF_USE6 -""" -The instruction uses value of the 6 operand. -""" - -ida_idp.CUSTOM_INSN_ITYPE -""" -Custom instruction codes defined by processor extension plugins must -be greater than or equal to this -""" - -ida_idp.IDP_INTERFACE_VERSION -""" -The interface version number.see also 'IDA_SDK_VERSION' from 'pro.h' -""" - -ida_idp.OP_FP_BASED -""" -operand is FP based -""" - -ida_idp.OP_SP_ADD -""" -operand value is added to the pointer -""" - -ida_idp.OP_SP_BASED -""" -operand is SP based -""" - -ida_idp.OP_SP_SUB -""" -operand value is subtracted from the pointer -""" - -ida_idp.PLFM_386 -""" -Intel 80x86. -""" - -ida_idp.PLFM_6502 -""" -6502 -""" - -ida_idp.PLFM_65C816 -""" -65802/65816 -""" - -ida_idp.PLFM_6800 -""" -Motorola 68xx. -""" - -ida_idp.PLFM_68K -""" -Motorola 680x0. -""" - -ida_idp.PLFM_80196 -""" -Intel 80196. -""" - -ida_idp.PLFM_8051 -""" -8051 -""" - -ida_idp.PLFM_AD2106X -""" -Analog Devices ADSP 2106X. -""" - -ida_idp.PLFM_AD218X -""" -Analog Devices ADSP 218X. -""" - -ida_idp.PLFM_ALPHA -""" -DEC Alpha. -""" - -ida_idp.PLFM_ARC -""" -Argonaut RISC Core. -""" - -ida_idp.PLFM_ARM -""" -Advanced RISC Machines. -""" - -ida_idp.PLFM_AVR -""" -Atmel 8-bit RISC processor(s) -""" - -ida_idp.PLFM_C166 -""" -Siemens C166 family. -""" - -ida_idp.PLFM_C39 -""" -Rockwell C39. -""" - -ida_idp.PLFM_CR16 -""" -NSC CR16. -""" - -ida_idp.PLFM_DALVIK -""" -Android Dalvik Virtual Machine. -""" - -ida_idp.PLFM_DSP56K -""" -Motorola DSP5600x. -""" - -ida_idp.PLFM_DSP96K -""" -Motorola DSP96000. -""" - -ida_idp.PLFM_EBC -""" -EFI Bytecode. -""" - -ida_idp.PLFM_F2MC -""" -Fujistu F2MC-16. -""" - -ida_idp.PLFM_FR -""" -Fujitsu FR Family. -""" - -ida_idp.PLFM_H8 -""" -Hitachi H8/300, H8/2000. -""" - -ida_idp.PLFM_H8500 -""" -Hitachi H8/500. -""" - -ida_idp.PLFM_HPPA -""" -Hewlett-Packard PA-RISC. -""" - -ida_idp.PLFM_I860 -""" -Intel 860. -""" - -ida_idp.PLFM_I960 -""" -Intel 960. -""" - -ida_idp.PLFM_IA64 -""" -Intel Itanium IA64. -""" - -ida_idp.PLFM_JAVA -""" -Java. -""" - -ida_idp.PLFM_KR1878 -""" -Angstrem KR1878. -""" - -ida_idp.PLFM_M16C -""" -Renesas M16C. -""" - -ida_idp.PLFM_M32R -""" -Mitsubishi 32bit RISC. -""" - -ida_idp.PLFM_M740 -""" -Mitsubishi 8bit. -""" - -ida_idp.PLFM_M7700 -""" -Mitsubishi 16bit. -""" - -ida_idp.PLFM_M7900 -""" -Mitsubishi 7900. -""" - -ida_idp.PLFM_MC6812 -""" -Motorola 68HC12. -""" - -ida_idp.PLFM_MC6816 -""" -Motorola 68HC16. -""" - -ida_idp.PLFM_MIPS -""" -MIPS. -""" - -ida_idp.PLFM_MN102L00 -""" -Panasonic MN10200. -""" - -ida_idp.PLFM_MSP430 -""" -Texas Instruments MSP430. -""" - -ida_idp.PLFM_NEC_78K0 -""" -NEC 78K0. -""" - -ida_idp.PLFM_NEC_78K0S -""" -NEC 78K0S. -""" - -ida_idp.PLFM_NEC_V850X -""" -NEC V850 and V850ES/E1/E2. -""" - -ida_idp.PLFM_NET -""" -Microsoft Visual Studio.Net. -""" - -ida_idp.PLFM_OAKDSP -""" -Atmel OAK DSP. -""" - -ida_idp.PLFM_PDP -""" -PDP11. -""" - -ida_idp.PLFM_PIC -""" -Microchip's PIC. -""" - -ida_idp.PLFM_PIC16 -""" -Microchip's 16-bit PIC. -""" - -ida_idp.PLFM_PPC -""" -PowerPC. -""" - -ida_idp.PLFM_SCR_ADPT -""" -Processor module adapter for processor modules written in scripting -languages. -""" - -ida_idp.PLFM_SH -""" -Renesas (formerly Hitachi) SuperH. -""" - -ida_idp.PLFM_SPARC -""" -SPARC. -""" - -ida_idp.PLFM_SPC700 -""" -Sony SPC700. -""" - -ida_idp.PLFM_SPU -""" -Cell Broadband Engine Synergistic Processor Unit. -""" - -ida_idp.PLFM_ST20 -""" -SGS-Thomson ST20. -""" - -ida_idp.PLFM_ST7 -""" -SGS-Thomson ST7. -""" - -ida_idp.PLFM_ST9 -""" -ST9+. -""" - -ida_idp.PLFM_TLCS900 -""" -Toshiba TLCS-900. -""" - -ida_idp.PLFM_TMS -""" -Texas Instruments TMS320C5x. -""" - -ida_idp.PLFM_TMS320C1X -""" -Texas Instruments TMS320C1x. -""" - -ida_idp.PLFM_TMS320C28 -""" -Texas Instruments TMS320C28x. -""" - -ida_idp.PLFM_TMS320C3 -""" -Texas Instruments TMS320C3. -""" - -ida_idp.PLFM_TMS320C54 -""" -Texas Instruments TMS320C54xx. -""" - -ida_idp.PLFM_TMS320C55 -""" -Texas Instruments TMS320C55xx. -""" - -ida_idp.PLFM_TMSC6 -""" -Texas Instruments TMS320C6x. -""" - -ida_idp.PLFM_TRICORE -""" -Tasking Tricore. -""" - -ida_idp.PLFM_TRIMEDIA -""" -Trimedia. -""" - -ida_idp.PLFM_UNSP -""" -SunPlus unSP. -""" - -ida_idp.PLFM_Z8 -""" -Z8. -""" - -ida_idp.PLFM_Z80 -""" -8085, Z80 -""" - -ida_idp.PRN_BIN -""" -binary -""" - -ida_idp.PRN_DEC -""" -decimal -""" - -ida_idp.PRN_HEX -""" -hex -""" - -ida_idp.PRN_OCT -""" -octal -""" - -ida_idp.PR_ADJSEGS -""" -IDA may adjust segments' starting/ending addresses. -""" - -ida_idp.PR_ALIGN -""" -All data items should be aligned properly. -""" - -ida_idp.PR_ALIGN_INSN -""" -allow ida to create alignment instructions arbitrarily. Since these -instructions might lead to other wrong instructions and spoil the -listing, IDA does not create them by default anymore -""" - -ida_idp.PR_ASSEMBLE -""" -Module has a built-in assembler and will react to ev_assemble. -""" - -ida_idp.PR_BINMEM -""" -the processor module provides correct segmentation for binary files -(i.e. it creates additional segments) The kernel will not ask the user -to specify the RAM/ROM sizes -""" - -ida_idp.PR_CHK_XREF -""" -don't allow near xrefs between segments with different bases -""" - -ida_idp.PR_CNDINSNS -""" -has conditional instructions -""" - -ida_idp.PR_DEFNUM -""" -mask - default number representation -""" - -ida_idp.PR_DEFSEG32 -""" -segments are 32-bit by default -""" - -ida_idp.PR_DEFSEG64 -""" -segments are 64-bit by default -""" - -ida_idp.PR_DELAYED -""" -has delayed jumps and calls if this flag is set, -\\ph{is_basic_block_end}, \\ph{has_delay_slot} should be implemented -""" - -ida_idp.PR_NOCHANGE -""" -(display only) - -The user can't change segments and code/data attributes -""" - -ida_idp.PR_NO_SEGMOVE -""" -(i.e. the user can't move segments) - -the processor module doesn't support 'move_segm()' -""" - -ida_idp.PR_PURGING -""" -there are calling conventions which may purge bytes from the stack -""" - -ida_idp.PR_RNAMESOK -""" -allow user register names for location names -""" - -ida_idp.PR_SCALE_STKVARS -""" -use \\ph{get_stkvar_scale} callback -""" - -ida_idp.PR_SEGS -""" -has segment registers? -""" - -ida_idp.PR_SEGTRANS -""" -the processor module supports the segment translation feature (meaning -it calculates the code addresses using the 'map_code_ea()' function) -""" - -ida_idp.PR_SGROTHER -""" -the segment registers don't contain the segment selectors. -""" - -ida_idp.PR_STACK_UP -""" -the stack grows up -""" - -ida_idp.PR_TYPEINFO -""" -ALL OF THEM SHOULD BE IMPLEMENTED! - -the processor module supports type information callbacks -""" - -ida_idp.PR_USE32 -""" -supports 32-bit addressing? -""" - -ida_idp.PR_USE64 -""" -supports 64-bit addressing? -""" - -ida_idp.PR_USE_ARG_TYPES -""" -use \\ph{use_arg_types} callback -""" - -ida_idp.PR_USE_TBYTE -""" - 'BTMT_SPECFLT' means _TBYTE type -""" - -ida_idp.PR_WORD_INS -""" -instruction codes are grouped 2bytes in binary line prefix -""" - -ida_idp.REG_SPOIL -""" -processor_t::use_regarg_type uses this bit in the return value to -indicate that the register value has been spoiled -""" -=== ida_idp EPYDOC INJECTIONS END === -class ida_kernwin.Choose(): - - Chooser wrapper class. - - Some constants are defined in this class. - Please refer to kernwin.hpp for more information. - - -ida_kernwin.Choose.Activate(): - - Activates a visible chooser - - -ida_kernwin.Choose.Close(): - - Closes the chooser - - -ida_kernwin.Choose.Embedded(): - - Creates an embedded chooser (as opposed to Show()) - @return: Returns 0 on success or NO_ATTR - - -ida_kernwin.Choose.GetEmbSelection(): - - Deprecated. For embedded choosers, the selection is - available through 'Form.EmbeddedChooserControl.selection' - - -ida_kernwin.Choose.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_kernwin.Choose.Refresh(): - - Causes the refresh callback to trigger - - -ida_kernwin.Choose.Show(): - - Activates or creates a chooser window - @param modal: Display as modal dialog - @return: For all choosers it will return NO_ATTR if some mandatory - attribute is missing. The mandatory attributes are: flags, - title, cols, OnGetSize(), OnGetLine(); - For modal choosers it will return the selected item index (0-based), - or NO_SELECTION if no selection, - or EMPTY_CHOOSER if the OnRefresh() callback returns EMPTY_CHOOSER; - For non-modal choosers it will return 0 - or ALREADY_EXISTS if the chooser was already open and is active now; - - -ida_kernwin.Choose.UI_Hooks_Trampoline.create_desktop_widget(): - - create_desktop_widget(self, title, cfg) -> PyObject * - - -ida_kernwin.Choose.UI_Hooks_Trampoline.current_widget_changed(): - - current_widget_changed(self, widget, prev_widget) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.database_inited(): - - database_inited(self, is_new_database, idc_script) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.debugger_menu_change(): - - debugger_menu_change(self, enable) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.finish_populating_widget_popup(): - - finish_populating_widget_popup(self, widget, popup_handle, ctx=None) - - - The UI is about to be done populating the TWidget's popup menu. - Now is a good time to call idaapi.attach_action_to_popup() - - @param widget: The widget - @param popup: The popup menu. - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.get_chooser_item_attrs(): - - get_chooser_item_attrs(self, chooser, n, attrs) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.get_custom_viewer_hint(): - - get_custom_viewer_hint(self, viewer, place) -> PyObject * - - -ida_kernwin.Choose.UI_Hooks_Trampoline.get_ea_hint(): - - get_ea_hint(self, ea) -> PyObject * - - - The UI wants to display a simple hint for an address in the navigation band - - @param ea: The address - @return: String with the hint or None - - -ida_kernwin.Choose.UI_Hooks_Trampoline.get_item_hint(): - - get_item_hint(self, ea, max_lines) -> PyObject * - - -ida_kernwin.Choose.UI_Hooks_Trampoline.get_widget_config(): - - get_widget_config(self, widget, cfg) -> PyObject * - - -ida_kernwin.Choose.UI_Hooks_Trampoline.hook(): - - hook(self) -> bool - - - Creates an UI hook - - @return: Boolean true on success - - -ida_kernwin.Choose.UI_Hooks_Trampoline.idcstart(): - - idcstart(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.idcstop(): - - idcstop(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.plugin_loaded(): - - plugin_loaded(self, plugin_info) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.plugin_unloading(): - - plugin_unloading(self, plugin_info) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.postprocess_action(): - - postprocess_action(self) - - - An ida ui action has been handled - - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.preprocess_action(): - - preprocess_action(self, name) - - - IDA ui is about to handle a user action - - @param name: ui action name - (these names can be looked up in ida[tg]ui.cfg) - @return: 0-ok, nonzero - a plugin has handled the action - - -ida_kernwin.Choose.UI_Hooks_Trampoline.range(): - - range(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.ready_to_run(): - - ready_to_run(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.resume(): - - resume(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.saved(): - - saved(self) - - - The kernel has saved the database. - - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.saving(): - - saving(self) - - - The kernel is saving the database. - - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.screen_ea_changed(): - - screen_ea_changed(self, ea, prev_ea) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.set_widget_config(): - - set_widget_config(self, widget, cfg) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.suspend(): - - suspend(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.term(): - - term(self) - - - IDA is terminated and the database is already closed. - The UI may close its windows in this callback. - - -ida_kernwin.Choose.UI_Hooks_Trampoline.unhook(): - - unhook(self) -> bool - - - Removes the UI hook - @return: Boolean true on success - - -ida_kernwin.Choose.UI_Hooks_Trampoline.updated_actions(): - - updated_actions(self) - - - The UI is done updating actions. - - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.updating_actions(): - - updating_actions(self, ctx) - - - The UI is about to batch-update some actions. - - @param ctx: The action_update_ctx_t instance - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.widget_closing(): - - widget_closing(self, widget) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.widget_invisible(): - - widget_invisible(self, widget) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.widget_visible(): - - widget_visible(self, widget) - - -ida_kernwin.Choose.adjust_last_item(): - - Helper for OnDeleteLine() and OnRefresh() callbacks. - They can be finished by the following line: - return [Choose.ALL_CHANGED] + self.adjust_last_item(n) - @param: line number of the remaining select item - @return: list of selected lines numbers (one element or empty) - - -ida_kernwin.CustomIDAMemo.CreateGroups(): - - Send a request to modify the graph by creating a - (set of) group(s), and perform an animation. - - Each object in the 'groups_infos' list must be of the format: - { - "nodes" : [, , , ...] # The list of nodes to group - "text" : # The synthetic text for that group - } - - @param groups_infos: A list of objects that describe those groups. - @return: A [, , ...] list of group nodes, or None (failure). - - -ida_kernwin.CustomIDAMemo.DelNodesInfos(): - - Delete the properties for the given node(s). - - @param nodes: A list of node IDs - - -ida_kernwin.CustomIDAMemo.DeleteGroups(): - - Send a request to delete the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param new_current: A node to focus on after the groups have been deleted - @return: True on success, False otherwise. - - -ida_kernwin.CustomIDAMemo.GetNodeInfo(): - - Get the properties for the given node. - - @param node: The index of the node. - @return: A tuple (bg_color, frame_color, ea, text), or None. - - -ida_kernwin.CustomIDAMemo.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_kernwin.CustomIDAMemo.Refresh(): - - Refreshes the view. This causes the OnRefresh() to be called - - -ida_kernwin.CustomIDAMemo.SetCurrentRendererType(): - - Set the current view's renderer. - - @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. - - -ida_kernwin.CustomIDAMemo.SetGroupsVisibility(): - - Send a request to expand/collapse the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param expand: True to expand the group, False otherwise. - @param new_current: A node to focus on after the groups have been expanded/collapsed. - @return: True on success, False otherwise. - - -ida_kernwin.CustomIDAMemo.SetNodeInfo(): - - Set the properties for the given node. - - Example usage (set second nodes's bg color to red): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff0000 - inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) - - @param node_index: The node index. - @param node_info: An idaapi.node_info_t instance. - @param flags: An OR'ed value of NIF_* values. - - -ida_kernwin.CustomIDAMemo.SetNodesInfos(): - - Set the properties for the given nodes. - - Example usage (set first three nodes's bg color to purple): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff00ff - inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) - - @param values: A dictionary of 'int -> node_info_t' objects. - - -ida_kernwin.CustomIDAMemo.hook(): - - hook(self) -> bool - - -ida_kernwin.CustomIDAMemo.unhook(): - - unhook(self) -> bool - - -ida_kernwin.CustomIDAMemo.view_created(): - - view_created(self, view) - - -ida_kernwin.Form.Add(): - - Low level function. Prefer AddControls() to this function. - This function adds one control to the form. - - @param name: Control name - @param ctrl: Control object - @param mkattr: Create control name / control object as a form attribute - - -ida_kernwin.Form.AddControls(): - - Adds controls from a dictionary. - The dictionary key is the control name and the value is a Form.Control object - @param controls: The control dictionary - - -class ida_kernwin.Form.ButtonInput(): - - Button control. - A handler along with a 'code' (numeric value) can be associated with the button. - This way one handler can handle many buttons based on the button code (or in other terms id or tag) - - -ida_kernwin.Form.ButtonInput.free(): - - Free the control - - -ida_kernwin.Form.ButtonInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.ChkGroupControl(): - - Checkbox group control class. - It holds a set of checkbox controls - - -ida_kernwin.Form.ChkGroupControl.free(): - - Free the control - - -ida_kernwin.Form.ChkGroupControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.ChkGroupControl.is_input_field(): - - Return True if this field acts as an input - - -class ida_kernwin.Form.ChkGroupItemControl(): - - Checkbox group item control - - -ida_kernwin.Form.ChkGroupItemControl.free(): - - Free the control - - -ida_kernwin.Form.ChkGroupItemControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.Close(): - - Close the form - @param close_normally: - 1: form is closed normally as if the user pressed Enter - 0: form is closed abnormally as if the user pressed Esc - @return: None - - -class ida_kernwin.Form.ColorInput(): - - Color button input control - - -ida_kernwin.Form.ColorInput.free(): - - Free the control - - -ida_kernwin.Form.ColorInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.Compile(): - - Compiles a form and returns the form object (self) and the argument list. - The form object will contain object names corresponding to the form elements - - @return: It will raise an exception on failure. Otherwise the return value is ignored - - -ida_kernwin.Form.CompileEx(): - - Low level function. - Compiles (parses the form syntax and adds the control) the form string and - returns the argument list to be passed the argument list to ask_form(). - - The form controls are wrapped inside curly braces: {ControlName}. - - A special operator can be used to return the index of a given control by its name: {id:ControlName}. - This is useful when you use the STARTITEM form keyword to set the initially focused control. - (note that, technically, the index is not the same as the ID; that's because STARTITEM - uses raw, 0-based indexes rather than control IDs to determine the focused widget.) - - @param form: Compiles the form and returns the arguments needed to be passed to ask_form() - - -ida_kernwin.Form.Compiled(): - - Checks if the form has already been compiled - - @return: Boolean - - -ida_kernwin.Form.Control.free(): - - Free the control - - -ida_kernwin.Form.Control.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.Control.get_tag(): - - Control tag character. One of Form.FT_XXXX. - The form class will expand the {} notation and replace them with the tags - - -ida_kernwin.Form.Control.is_input_field(): - - Return True if this field acts as an input - - -ida_kernwin.Form.ControlToFieldTypeIdAndSize(): - - Converts a control object to a tuple containing the field id - and the associated buffer size - - -class ida_kernwin.Form.DirInput(): - - Directory browsing control - - -ida_kernwin.Form.DirInput.free(): - - Free the control - - -ida_kernwin.Form.DirInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.DropdownListControl(): - - Dropdown control - This control allows manipulating a dropdown control - - -ida_kernwin.Form.DropdownListControl._free(): - - Explicitly delete the link (only if not static) - - -ida_kernwin.Form.DropdownListControl.add(): - - Add a string to the vector - - -ida_kernwin.Form.DropdownListControl.addressof(): - - Returns the address (as number) of the qstring at the given index - - -ida_kernwin.Form.DropdownListControl.assign(): - - Copies the contents of 'other' to 'self' - - -ida_kernwin.Form.DropdownListControl.clear(): - - Clears all strings from the vector. - @param qclear: Just reset the size but do not actually free the memory - - -ida_kernwin.Form.DropdownListControl.copy(): - - Returns a new copy of this class - - -ida_kernwin.Form.DropdownListControl.from_list(): - - Populates the vector from a Python string list - - -ida_kernwin.Form.DropdownListControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.DropdownListControl.insert(): - - Insert a string into the vector - - -ida_kernwin.Form.DropdownListControl.remove(): - - Removes a string from the vector - - -ida_kernwin.Form.DropdownListControl.set_items(): - - Sets the dropdown list items - - -class ida_kernwin.Form.EmbeddedChooserControl(): - - Embedded chooser control. - This control links to a Chooser2 control created with the 'embedded=True' - - -ida_kernwin.Form.EmbeddedChooserControl.free(): - - Frees the embedded chooser data - - -ida_kernwin.Form.EmbeddedChooserControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.EnableField(): - - Enable or disable an input field - @return: False - no such control - - -ida_kernwin.Form.Execute(): - - Displays a modal dialog containing the compiled form. - @return: 1 - ok ; 0 - cancel - - -class ida_kernwin.Form.FileInput(): - - File Open/Save input control - - -ida_kernwin.Form.FileInput.free(): - - Free the control - - -ida_kernwin.Form.FileInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.FindControlById(): - - Finds a control instance given its id - - -class ida_kernwin.Form.FormChangeCb(): - - Form change handler. - This can be thought of like a dialog procedure. - Everytime a form action occurs, this handler will be called along with the control id. - The programmer can then call various form actions accordingly: - - EnableField - - ShowField - - MoveField - - GetFieldValue - - etc... - - Special control IDs: -1 (The form is initialized) and -2 (Ok has been clicked) - - - -ida_kernwin.Form.FormChangeCb.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.FormChangeCb.is_input_field(): - - Return True if this field acts as an input - - -ida_kernwin.Form.Free(): - - Frees all resources associated with a compiled form. - Make sure you call this function when you finish using the form. - - -ida_kernwin.Form.GetControlValue(): - - Returns the control's value depending on its type - @param ctrl: Form control instance - @return: - - color button, radio controls: integer - - file/dir input, string input and string label: string - - embedded chooser control (0-based indices of selected items): integer list - - for multilinetext control: textctrl_info_t - - dropdown list controls: string (when editable) or index (when readonly) - - None: on failure - - -ida_kernwin.Form.GetFocusedField(): - - Get currently focused input field. - @return: None if no field is selected otherwise the control ID - - -class ida_kernwin.Form.GroupControl(): - - Base class for group controls - - -ida_kernwin.Form.GroupControl.free(): - - Free the control - - -ida_kernwin.Form.GroupControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.GroupControl.is_input_field(): - - Return True if this field acts as an input - - -class ida_kernwin.Form.GroupItemControl(): - - Base class for group control items - - -ida_kernwin.Form.GroupItemControl.free(): - - Free the control - - -ida_kernwin.Form.GroupItemControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.InputControl(): - - Generic form input control. - It could be numeric control, string control, directory/file browsing, etc... - - -ida_kernwin.Form.InputControl.free(): - - Free the control - - -ida_kernwin.Form.InputControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.LabelControl(): - - Base class for static label control - - -ida_kernwin.Form.LabelControl.free(): - - Free the control - - -ida_kernwin.Form.LabelControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.LabelControl.is_input_field(): - - Return True if this field acts as an input - - -ida_kernwin.Form.MoveField(): - - Move/resize an input field - - @return: False - no such fiel - - -class ida_kernwin.Form.MultiLineTextControl(): - - Multi line text control. - This class inherits from textctrl_info_t. Thus the attributes are also inherited - This control allows manipulating a multilinetext control - - -ida_kernwin.Form.MultiLineTextControl._free(): - - Explicitly delete the link (only if not static) - - -ida_kernwin.Form.MultiLineTextControl.assign(): - - Copies the contents of 'other' to 'self' - - -ida_kernwin.Form.MultiLineTextControl.copy(): - - Returns a new copy of this class - - -ida_kernwin.Form.MultiLineTextControl.flags: - - Returns the flags value - - -ida_kernwin.Form.MultiLineTextControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.MultiLineTextControl.tabsize: - - Returns the tabsize value - - -ida_kernwin.Form.MultiLineTextControl.text: - - Sets the text value - - -ida_kernwin.Form.MultiLineTextControl.value: - - Sets the text value - - -class ida_kernwin.Form.NumericArgument(): - - Argument representing various integer arguments (ushort, uint32, uint64, etc...) - @param tp: One of Form.FT_XXX - - -class ida_kernwin.Form.NumericInput(): - - A composite class serving as a base numeric input control class - - -ida_kernwin.Form.NumericInput.free(): - - Free the control - - -ida_kernwin.Form.NumericInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.NumericLabel(): - - Numeric label control - - -ida_kernwin.Form.NumericLabel.free(): - - Free the control - - -ida_kernwin.Form.NumericLabel.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.NumericLabel.is_input_field(): - - Return True if this field acts as an input - - -ida_kernwin.Form.Open(): - - Opens a widget containing the compiled form. - - -class ida_kernwin.Form.RadGroupControl(): - - Radiobox group control class. - It holds a set of radiobox controls - - -ida_kernwin.Form.RadGroupControl.free(): - - Free the control - - -ida_kernwin.Form.RadGroupControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.RadGroupControl.is_input_field(): - - Return True if this field acts as an input - - -class ida_kernwin.Form.RadGroupItemControl(): - - Radiobox group item control - - -ida_kernwin.Form.RadGroupItemControl.free(): - - Free the control - - -ida_kernwin.Form.RadGroupItemControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.RefreshField(): - - Refresh a field - @return: False - no such control - - -ida_kernwin.Form.SetControlValue(): - - Set the control's value depending on its type - @param ctrl: Form control instance - @param value: - - embedded chooser: a 0-base indices list to select embedded chooser items - - multilinetext: a textctrl_info_t - - dropdown list: an integer designating the selection index if readonly - a string designating the edit control value if not readonly - @return: Boolean true on success - - -ida_kernwin.Form.SetFocusedField(): - - Set currently focused input field - @return: False - no such control - - -ida_kernwin.Form.ShowField(): - - Show or hide an input field - @return: False - no such control - - -class ida_kernwin.Form.StringArgument(): - - Argument representing a character buffer - - -class ida_kernwin.Form.StringInput(): - - Base string input control class. - This class also constructs a StringArgument - - -ida_kernwin.Form.StringInput.free(): - - Free the control - - -ida_kernwin.Form.StringInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.StringLabel(): - - String label control - - -ida_kernwin.Form.StringLabel.free(): - - Free the control - - -ida_kernwin.Form.StringLabel.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.StringLabel.is_input_field(): - - Return True if this field acts as an input - - -ida_kernwin.Form.fieldtype_to_ctype(): - - Factory method returning a ctype class corresponding to the field type string - - -class ida_kernwin.IDAViewWrapper(): - - Deprecated. Use View_Hooks instead. - - Because the lifecycle of an IDAView is not trivial to track (e.g., a user - might close, then re-open the same disassembly view), this wrapper doesn't - bring anything superior to the View_Hooks: quite the contrary, as the - latter is much more generic (and better maps IDA's internal model.) - - -ida_kernwin.IDAViewWrapper.CreateGroups(): - - Send a request to modify the graph by creating a - (set of) group(s), and perform an animation. - - Each object in the 'groups_infos' list must be of the format: - { - "nodes" : [, , , ...] # The list of nodes to group - "text" : # The synthetic text for that group - } - - @param groups_infos: A list of objects that describe those groups. - @return: A [, , ...] list of group nodes, or None (failure). - - -ida_kernwin.IDAViewWrapper.DelNodesInfos(): - - Delete the properties for the given node(s). - - @param nodes: A list of node IDs - - -ida_kernwin.IDAViewWrapper.DeleteGroups(): - - Send a request to delete the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param new_current: A node to focus on after the groups have been deleted - @return: True on success, False otherwise. - - -ida_kernwin.IDAViewWrapper.GetNodeInfo(): - - Get the properties for the given node. - - @param node: The index of the node. - @return: A tuple (bg_color, frame_color, ea, text), or None. - - -ida_kernwin.IDAViewWrapper.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_kernwin.IDAViewWrapper.Refresh(): - - Refreshes the view. This causes the OnRefresh() to be called - - -ida_kernwin.IDAViewWrapper.SetCurrentRendererType(): - - Set the current view's renderer. - - @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. - - -ida_kernwin.IDAViewWrapper.SetGroupsVisibility(): - - Send a request to expand/collapse the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param expand: True to expand the group, False otherwise. - @param new_current: A node to focus on after the groups have been expanded/collapsed. - @return: True on success, False otherwise. - - -ida_kernwin.IDAViewWrapper.SetNodeInfo(): - - Set the properties for the given node. - - Example usage (set second nodes's bg color to red): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff0000 - inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) - - @param node_index: The node index. - @param node_info: An idaapi.node_info_t instance. - @param flags: An OR'ed value of NIF_* values. - - -ida_kernwin.IDAViewWrapper.SetNodesInfos(): - - Set the properties for the given nodes. - - Example usage (set first three nodes's bg color to purple): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff00ff - inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) - - @param values: A dictionary of 'int -> node_info_t' objects. - - -ida_kernwin.IDAViewWrapper.hook(): - - hook(self) -> bool - - -ida_kernwin.IDAViewWrapper.unhook(): - - unhook(self) -> bool - - -ida_kernwin.IDAViewWrapper.view_created(): - - view_created(self, view) - - -class ida_kernwin.PluginForm(): - - PluginForm class. - - This form can be used to host additional controls. Please check the PyQt example. - - -ida_kernwin.PluginForm.Close(): - - Closes the form. - - @param options: Close options (WCLS_SAVE, WCLS_NO_CONTEXT, ...) - - @return: None - - -ida_kernwin.PluginForm.FormToPyQtWidget(): - - 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 - - -ida_kernwin.PluginForm.FormToPySideWidget(): - - 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 - - -ida_kernwin.PluginForm.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_kernwin.PluginForm.OnClose(): - - Called when the plugin form is closed - - @return: None - - -ida_kernwin.PluginForm.OnCreate(): - - This event is called when the plugin form is created. - The programmer should populate the form when this event is triggered. - - @return: None - - -ida_kernwin.PluginForm.QtWidgetToTWidget(): - - 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 - - -ida_kernwin.PluginForm.Show(): - - Creates the form if not was not created or brings to front if it was already created - - @param caption: The form caption - @param options: One of PluginForm.WOPN_ constants - - -ida_kernwin.PluginForm.TWidgetToPyQtWidget(): - - 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 - - -ida_kernwin.PluginForm.TWidgetToPySideWidget(): - - 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 - - -ida_kernwin.TWidget__from_ptrval__(): - - TWidget__from_ptrval__(ptrval) -> TWidget * - - -class ida_kernwin.UI_Hooks(): - - Proxy of C++ UI_Hooks class - - -ida_kernwin.UI_Hooks.create_desktop_widget(): - - create_desktop_widget(self, title, cfg) -> PyObject * - - -ida_kernwin.UI_Hooks.current_widget_changed(): - - current_widget_changed(self, widget, prev_widget) - - -ida_kernwin.UI_Hooks.database_inited(): - - database_inited(self, is_new_database, idc_script) - - -ida_kernwin.UI_Hooks.debugger_menu_change(): - - debugger_menu_change(self, enable) - - -ida_kernwin.UI_Hooks.finish_populating_widget_popup(): - - finish_populating_widget_popup(self, widget, popup_handle, ctx=None) - - - The UI is about to be done populating the TWidget's popup menu. - Now is a good time to call idaapi.attach_action_to_popup() - - @param widget: The widget - @param popup: The popup menu. - @return: Ignored - - -ida_kernwin.UI_Hooks.get_chooser_item_attrs(): - - get_chooser_item_attrs(self, chooser, n, attrs) - - -ida_kernwin.UI_Hooks.get_custom_viewer_hint(): - - get_custom_viewer_hint(self, viewer, place) -> PyObject * - - -ida_kernwin.UI_Hooks.get_ea_hint(): - - get_ea_hint(self, ea) -> PyObject * - - - The UI wants to display a simple hint for an address in the navigation band - - @param ea: The address - @return: String with the hint or None - - -ida_kernwin.UI_Hooks.get_item_hint(): - - get_item_hint(self, ea, max_lines) -> PyObject * - - -ida_kernwin.UI_Hooks.get_widget_config(): - - get_widget_config(self, widget, cfg) -> PyObject * - - -ida_kernwin.UI_Hooks.hook(): - - hook(self) -> bool - - - Creates an UI hook - - @return: Boolean true on success - - -ida_kernwin.UI_Hooks.idcstart(): - - idcstart(self) - - -ida_kernwin.UI_Hooks.idcstop(): - - idcstop(self) - - -ida_kernwin.UI_Hooks.plugin_loaded(): - - plugin_loaded(self, plugin_info) - - -ida_kernwin.UI_Hooks.plugin_unloading(): - - plugin_unloading(self, plugin_info) - - -ida_kernwin.UI_Hooks.populating_widget_popup(): - - populating_widget_popup(self, widget, popup_handle, ctx=None) - - - The UI is populating the TWidget's popup menu. - Now is a good time to call idaapi.attach_action_to_popup() - - @param widget: The widget - @param popup: The popup menu. - @return: Ignored - - -ida_kernwin.UI_Hooks.postprocess_action(): - - postprocess_action(self) - - - An ida ui action has been handled - - @return: Ignored - - -ida_kernwin.UI_Hooks.preprocess_action(): - - preprocess_action(self, name) - - - IDA ui is about to handle a user action - - @param name: ui action name - (these names can be looked up in ida[tg]ui.cfg) - @return: 0-ok, nonzero - a plugin has handled the action - - -ida_kernwin.UI_Hooks.range(): - - range(self) - - -ida_kernwin.UI_Hooks.ready_to_run(): - - ready_to_run(self) - - -ida_kernwin.UI_Hooks.resume(): - - resume(self) - - -ida_kernwin.UI_Hooks.saved(): - - saved(self) - - - The kernel has saved the database. - - @return: Ignored - - -ida_kernwin.UI_Hooks.saving(): - - saving(self) - - - The kernel is saving the database. - - @return: Ignored - - -ida_kernwin.UI_Hooks.screen_ea_changed(): - - screen_ea_changed(self, ea, prev_ea) - - -ida_kernwin.UI_Hooks.set_widget_config(): - - set_widget_config(self, widget, cfg) - - -ida_kernwin.UI_Hooks.suspend(): - - suspend(self) - - -ida_kernwin.UI_Hooks.term(): - - term(self) - - - IDA is terminated and the database is already closed. - The UI may close its windows in this callback. - - -ida_kernwin.UI_Hooks.unhook(): - - unhook(self) -> bool - - - Removes the UI hook - @return: Boolean true on success - - -ida_kernwin.UI_Hooks.updated_actions(): - - updated_actions(self) - - - The UI is done updating actions. - - @return: Ignored - - -ida_kernwin.UI_Hooks.updating_actions(): - - updating_actions(self, ctx) - - - The UI is about to batch-update some actions. - - @param ctx: The action_update_ctx_t instance - @return: Ignored - - -ida_kernwin.UI_Hooks.widget_closing(): - - widget_closing(self, widget) - - -ida_kernwin.UI_Hooks.widget_invisible(): - - widget_invisible(self, widget) - - -ida_kernwin.UI_Hooks.widget_visible(): - - widget_visible(self, widget) - - -class ida_kernwin.View_Hooks(): - - Proxy of C++ View_Hooks class - - -ida_kernwin.View_Hooks.hook(): - - hook(self) -> bool - - -ida_kernwin.View_Hooks.unhook(): - - unhook(self) -> bool - - -ida_kernwin.View_Hooks.view_activated(): - - view_activated(self, view) - - -ida_kernwin.View_Hooks.view_click(): - - view_click(self, view, event) - - -ida_kernwin.View_Hooks.view_close(): - - view_close(self, view) - - -ida_kernwin.View_Hooks.view_created(): - - view_created(self, view) - - -ida_kernwin.View_Hooks.view_curpos(): - - view_curpos(self, view) - - -ida_kernwin.View_Hooks.view_dblclick(): - - view_dblclick(self, view, event) - - -ida_kernwin.View_Hooks.view_deactivated(): - - view_deactivated(self, view) - - -ida_kernwin.View_Hooks.view_keydown(): - - view_keydown(self, view, key, state) - - -ida_kernwin.View_Hooks.view_loc_changed(): - - view_loc_changed(self, view, now, was) - - -ida_kernwin.View_Hooks.view_mouse_moved(): - - view_mouse_moved(self, view, event) - - -ida_kernwin.View_Hooks.view_mouse_over(): - - view_mouse_over(self, view, event) - - -ida_kernwin.View_Hooks.view_switched(): - - view_switched(self, view, rt) - - -class ida_kernwin.action_ctx_base_t(): - - Proxy of C++ action_ctx_base_t class - - -ida_kernwin.action_ctx_base_t.action: - action_ctx_base_t_action_get(self) -> char const * - -ida_kernwin.action_ctx_base_t.chooser_selection: - action_ctx_base_t_chooser_selection_get(self) -> sizevec_t * - -ida_kernwin.action_ctx_base_t.cur_ea: - action_ctx_base_t_cur_ea_get(self) -> ea_t - -ida_kernwin.action_ctx_base_t.cur_enum: - action_ctx_base_t_cur_enum_get(self) -> enum_t - -ida_kernwin.action_ctx_base_t.cur_extracted_ea: - action_ctx_base_t_cur_value_get(self) -> uval_t - -ida_kernwin.action_ctx_base_t.cur_fchunk: - action_ctx_base_t_cur_fchunk_get(self) -> func_t * - -ida_kernwin.action_ctx_base_t.cur_flags: - action_ctx_base_t_cur_flags_get(self) -> uint32 - -ida_kernwin.action_ctx_base_t.cur_func: - action_ctx_base_t_cur_func_get(self) -> func_t * - -ida_kernwin.action_ctx_base_t.cur_seg: - action_ctx_base_t_cur_seg_get(self) -> segment_t * - -ida_kernwin.action_ctx_base_t.cur_strmem: - action_ctx_base_t_cur_strmem_get(self) -> member_t * - -ida_kernwin.action_ctx_base_t.cur_struc: - action_ctx_base_t_cur_struc_get(self) -> struc_t * - -ida_kernwin.action_ctx_base_t.cur_value: - action_ctx_base_t_cur_value_get(self) -> uval_t - -ida_kernwin.action_ctx_base_t.focus: - action_ctx_base_t_focus_get(self) -> TWidget * - -ida_kernwin.action_ctx_base_t.form: - - _get_form(self) -> TWidget * - - -ida_kernwin.action_ctx_base_t.form_title: - - _get_form_title(self) -> qstring - - -ida_kernwin.action_ctx_base_t.form_type: - - _get_form_type(self) -> twidget_type_t - - -ida_kernwin.action_ctx_base_t.has_flag(): - - has_flag(self, flag) -> bool - - -ida_kernwin.action_ctx_base_t.regname: - action_ctx_base_t_regname_get(self) -> char const * - -ida_kernwin.action_ctx_base_t.reserved: - action_ctx_base_t_reserved_get(self) -> void * - -ida_kernwin.action_ctx_base_t.reset(): - - reset(self) - - -ida_kernwin.action_ctx_base_t.widget: - action_ctx_base_t_widget_get(self) -> TWidget * - -ida_kernwin.action_ctx_base_t.widget_title: - action_ctx_base_t_widget_title_get(self) -> qstring * - -ida_kernwin.action_ctx_base_t.widget_type: - action_ctx_base_t_widget_type_get(self) -> twidget_type_t - -class ida_kernwin.action_desc_t(): - - Proxy of C++ action_desc_t class - - -ida_kernwin.action_desc_t.cb: - action_desc_t_cb_get(self) -> int - -ida_kernwin.action_desc_t.flags: - action_desc_t_flags_get(self) -> int - -ida_kernwin.action_desc_t.icon: - action_desc_t_icon_get(self) -> int - -ida_kernwin.action_desc_t.label: - action_desc_t_label_get(self) -> char const * - -ida_kernwin.action_desc_t.name: - action_desc_t_name_get(self) -> char const * - -ida_kernwin.action_desc_t.owner: - action_desc_t_owner_get(self) -> plugin_t const * - -ida_kernwin.action_desc_t.shortcut: - action_desc_t_shortcut_get(self) -> char const * - -ida_kernwin.action_desc_t.tooltip: - action_desc_t_tooltip_get(self) -> char const * - -ida_kernwin.activate_widget(): - - activate_widget(widget, take_focus) - - - Activate widget (only gui version) ( 'ui_activate_widget' ). - - @param widget: existing widget to display (C++: TWidget *) - @param take_focus: give focus to given widget (C++: bool) - - -ida_kernwin.add_hotkey(): - - add_hotkey(hotkey, pyfunc) -> PyObject * - - - Associates a function call with a hotkey. - Callable pyfunc will be called each time the hotkey is pressed - - @param hotkey: The hotkey - @param pyfunc: Callable - - @return: Context object on success or None on failure. - - -ida_kernwin.add_idc_hotkey(): - - add_idc_hotkey(hotkey, idcfunc) -> int - - - Add hotkey for IDC function ( 'ui_add_idckey' ). - - @param hotkey: hotkey name (C++: const char *) - @param idcfunc: IDC function name (C++: const char *) - @return: IDC hotkey error codes - - -ida_kernwin.add_spaces(): - - add_spaces(s, len) -> PyObject * - - - Add space characters to the colored string so that its length will be - at least 'len' characters. Don't trim the string if it is longer than - 'len'. - - @param len: the desired length of the string (C++: ssize_t) - @return: pointer to the end of input string - - -ida_kernwin.addon_count(): - - addon_count() -> int - - - Get number of installed addons. - - -class ida_kernwin.addon_info_t(): - - Proxy of C++ addon_info_t class - - -ida_kernwin.addon_info_t.cb: - addon_info_t_cb_get(self) -> size_t - -ida_kernwin.addon_info_t.custom_data: - addon_info_t_custom_data_get(self) -> void const * - -ida_kernwin.addon_info_t.custom_size: - addon_info_t_custom_size_get(self) -> size_t - -ida_kernwin.addon_info_t.freeform: - addon_info_t_freeform_get(self) -> char const * - -ida_kernwin.addon_info_t.id: - addon_info_t_id_get(self) -> char const * - -ida_kernwin.addon_info_t.name: - addon_info_t_name_get(self) -> char const * - -ida_kernwin.addon_info_t.producer: - addon_info_t_producer_get(self) -> char const * - -ida_kernwin.addon_info_t.url: - addon_info_t_url_get(self) -> char const * - -ida_kernwin.addon_info_t.version: - addon_info_t_version_get(self) -> char const * - -ida_kernwin.analyzer_options(): - - analyzer_options() - - - Allow the user to set analyzer options. (show a dialog box) ( - 'ui_analyzer_options' ) - - -ida_kernwin.ask_buttons(): - - ask_buttons(Yes, No, Cancel, deflt, format) -> int - - - Display a dialog box and get choice from maximum three possibilities ( - 'ui_ask_buttons' ).for all buttons:use "" or NULL to take the default - name for the button.use 'format' to hide the cancel button - - @param Yes: text for the first button (C++: const char *) - @param No: text for the second button (C++: const char *) - @param Cancel: text for the third button (C++: const char *) - @param deflt: default choice: one of Button IDs (C++: int) - @param format: printf-style format string for question. It may have - some prefixes, see below. (C++: const char *) - @return: one of Button IDs specifying the selected button (Esc key - returns Cancel/3rd button value) - - -ida_kernwin.ask_file(): - - ask_file(for_saving, defval, format) -> char * - - -ida_kernwin.ask_for_feedback(): - - ask_for_feedback(format) - - - Show a message box asking to send the input file tosupport@hex- - rays.com. - - @param format: the reason why the input file is bad (C++: const char - *) - - -ida_kernwin.ask_str(): - - ask_str(defval, hist, prompt) -> PyObject * - - - Asks for a long text - - @param hist: history id - @param defval: The default value - @param prompt: The prompt value - @return: None or the entered string - - -ida_kernwin.ask_text(): - - ask_text(max_size, defval, prompt) -> PyObject * - - - Asks for a long text - - @param max_size: Maximum text length, 0 for unlimited - @param defval: The default value - @param prompt: The prompt value - @return: None or the entered string - - -ida_kernwin.ask_yn(): - - ask_yn(deflt, format) -> int - - - Display a dialog box and get choice from "Yes", "No", "Cancel". - - @param deflt: default choice: one of Button IDs (C++: int) - @param format: The question in printf() style format (C++: const char - *) - @return: the selected button (one of Button IDs ). Esc key returns - ASKBTN_CANCEL . - - -ida_kernwin.attach_action_to_menu(): - - attach_action_to_menu(menupath, name, flags) -> bool - - - Attach a previously-registered action to the menu ( - 'ui_attach_action_to_menu' ).You should not change top level menu, or - the Edit,Plugins submenus If you want to modify the debugger menu, do - it at the ui_debugger_menu_change event (ida might destroy your menu - item if you do it elsewhere). - - @param menupath: path to the menu item after or before which the - insertion will take place. Example: - Debug/StartProcess Whitespace, punctuation are - ignored. It is allowed to specify only the prefix - of the menu item. Comparison is case insensitive. - menupath may start with the following prefixes: [S] - - modify the main menu of the structure window [E] - - modify the main menu of the enum window (C++: const - char *) - @param name: the action name (C++: const char *) - @param flags: a combination of Set menu flags , to determine menu - item position (C++: int) - @return: success - - -ida_kernwin.attach_action_to_popup(): - - attach_action_to_popup(widget, popup_handle, name, popuppath=None, flags=0) -> bool - - - Insert a previously-registered action into the widget's popup menu ( - 'ui_attach_action_to_popup' ). This function has two "modes": 'single- - shot', and 'permanent'. - - @param widget: target widget (C++: TWidget *) - @param popup_handle: target popup menu if non-NULL, the action is - added to this popup menu invocation (i.e., - 'single-shot') if NULL, the action is added to - a list of actions that should always be present - in context menus for this widget (i.e., - 'permanent'.) (C++: TPopupMenu *) - @param name: action name (C++: const char *) - @param popuppath: can be NULL (C++: const char *) - @param flags: a combination of SETMENU_ flags (see Set menu flags ) - (C++: int) - @return: success - - -ida_kernwin.attach_action_to_toolbar(): - - attach_action_to_toolbar(toolbar_name, name) -> bool - - - Attach an action to an existing toolbar ( - 'ui_attach_action_to_toolbar' ). - - @param toolbar_name: the name of the toolbar (C++: const char *) - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.attach_dynamic_action_to_popup(): - - attach_dynamic_action_to_popup(widget, popup_handle, desc, popuppath=None, flags=0) -> bool - - - Create & insert an action into the widget's popup menu ( - 'ui_attach_dynamic_action_to_popup' ). 'action_desc_t::handler' for - 'desc' must be instantiated using 'new', as it will be 'delete'd when - the action is unregistered. - - @param widget: target widget (C++: TWidget *) - @param popup_handle: target popup (C++: TPopupMenu *) - @param desc: created with DYNACTION_DESC_LITERAL (C++: const - action_desc_t &) - @param popuppath: can be NULL (C++: const char *) - @param flags: a combination of SETMENU_ constants (see Set menu flags - ) (C++: int) - @return: success - - -ida_kernwin.banner(): - - banner(wait) -> bool - - - Show a banner dialog box ( 'ui_banner' ). - - @param wait: time to wait before closing (C++: int) - - -ida_kernwin.beep(): - - beep(beep_type=beep_default) - - - Issue a beeping sound ( 'ui_beep' ). - - @param beep_type: beep_t (C++: beep_t) - - -ida_kernwin.call_nav_colorizer(): - - call_nav_colorizer(dict, ea, nbytes) -> uint32 - - - To be used with the IDA-provided colorizer, that is - returned as result of the first call to set_nav_colorizer(). - - -ida_kernwin.cancel_exec_request(): - - cancel_exec_request(req_id) -> bool - - - Try to cancel an asynchronous exec request ( 'ui_cancel_exec_request' - ). - - @param req_id: request id (C++: int) - - -ida_kernwin.choose_activate(): - - choose_activate(self) - - -ida_kernwin.choose_choose(): - - choose_choose(self) -> int - - -ida_kernwin.choose_close(): - - choose_close(self) - - -ida_kernwin.choose_create_embedded_chobj(): - - choose_create_embedded_chobj(self) -> uint64 - - -ida_kernwin.choose_entry(): - - choose_entry(title) -> ea_t - - - Choose an entry point ( 'ui_choose' , 'chtype_entry' ). - - @param title: chooser title (C++: const char *) - @return: ea of selected entry point, BADADDR if none selected - - -ida_kernwin.choose_enum(): - - choose_enum(title, default_id) -> enum_t - - - Choose an enum ( 'ui_choose' , 'chtype_enum' ). - - @param title: chooser title (C++: const char *) - @param default_id: id of enum to select by default (C++: enum_t) - @return: enum id of selected enum, BADNODE if none selected - - -ida_kernwin.choose_enum_by_value(): - - choose_enum_by_value(title, default_id, value, nbytes) -> enum_t - - - Choose an enum, restricted by value & size ( 'ui_choose' , - 'chtype_enum_by_value_and_size' ). If the given value cannot be found - initially, this function will ask if the user would like to import a - standard enum. - - @param title: chooser title (C++: const char *) - @param default_id: id of enum to select by default (C++: enum_t) - @param value: value to search for (C++: uval_t) - @param nbytes: size of value (C++: int) - @return: enum id of selected (or imported) enum, BADNODE if none was - found - - -ida_kernwin.choose_find(): - - choose_find(title) -> PyObject * - - -ida_kernwin.choose_func(): - - choose_func(title, default_ea) -> func_t * - - - Choose a function ( 'ui_choose' , 'chtype_func' ). - - @param title: chooser title (C++: const char *) - @param default_ea: ea of function to select by default (C++: ea_t) - @return: pointer to function that was selected, NULL if none selected - - -ida_kernwin.choose_get_widget(): - - choose_get_widget(self) -> TWidget * - - -ida_kernwin.choose_idasgn(): - - choose_idasgn() -> PyObject * - - - Opens the signature chooser - - @return: None or the selected signature name - - -ida_kernwin.choose_name(): - - choose_name(title) -> ea_t - - - Choose a name ( 'ui_choose' , 'chtype_name' ). - - @param title: chooser title (C++: const char *) - @return: ea of selected name, BADADDR if none selected - - -ida_kernwin.choose_refresh(): - - choose_refresh(self) - - -ida_kernwin.choose_segm(): - - choose_segm(title, default_ea) -> segment_t * - - - Choose a segment ( 'ui_choose' , 'chtype_segm' ). - - @param title: chooser title (C++: const char *) - @param default_ea: ea of segment to select by default (C++: ea_t) - @return: pointer to segment that was selected, NULL if none selected - - -ida_kernwin.choose_srcp(): - - choose_srcp(title) -> sreg_range_t * - - - Choose a segment register change point ( 'ui_choose' , 'chtype_srcp' - ). - - @param title: chooser title (C++: const char *) - @return: pointer to segment register range of selected change point, - NULL if none selected - - -ida_kernwin.choose_stkvar_xref(): - - choose_stkvar_xref(pfn, mptr) -> ea_t - - - Choose an xref to a stack variable ( 'ui_choose' , 'chtype_name' ). - - @param pfn: function (C++: func_t *) - @param mptr: variable (C++: member_t *) - @return: ea of the selected xref, BADADDR if none selected - - -ida_kernwin.choose_struc(): - - choose_struc(title) -> struc_t * - - - Choose a structure ( 'ui_choose' , 'chtype_segm' ). - - @param title: chooser title; (C++: const char *) - @return: pointer to structure that was selected, NULL if none selected - - -ida_kernwin.choose_til(): - - choose_til() -> bool - - - Choose a type library ( 'ui_choose' , 'chtype_idatil' ). - - -ida_kernwin.choose_xref(): - - choose_xref(to) -> ea_t - - - Choose an xref to an address ( 'ui_choose' , 'chtype_xref' ). - - @param to: referenced address (C++: ea_t) - @return: ea of selected xref, BADADDR if none selected - - -class ida_kernwin.chooser_item_attrs_t(): - - Proxy of C++ chooser_item_attrs_t class - - -ida_kernwin.chooser_item_attrs_t.color: - chooser_item_attrs_t_color_get(self) -> bgcolor_t - -ida_kernwin.chooser_item_attrs_t.flags: - chooser_item_attrs_t_flags_get(self) -> int - -ida_kernwin.chooser_item_attrs_t.reset(): - - reset(self) - - -ida_kernwin.clear_refresh_request(): - - clear_refresh_request(mask) - - -class ida_kernwin.cli_t(): - - cli_t wrapper class. - - This class allows you to implement your own command line interface handlers. - - -ida_kernwin.cli_t.register(): - - Registers the CLI. - - @param flags: Feature bits. No bits are defined yet, must be 0 - @param sname: Short name (displayed on the button) - @param lname: Long name (displayed in the menu) - @param hint: Hint for the input line - - @return Boolean: True-Success, False-Failed - - -ida_kernwin.cli_t.unregister(): - - Unregisters the CLI (if it was registered) - - -ida_kernwin.close_chooser(): - - close_chooser(title) -> bool - - - Close a non-modal chooser ( 'ui_close_chooser' ). - - @param title: window title of chooser to close (C++: const char *) - @return: success - - -ida_kernwin.close_widget(): - - close_widget(widget, options) - - - Close widget ( 'ui_close_widget' , only gui version). - - @param widget: pointer to the widget to close (C++: TWidget *) - @param options: Form close flags (C++: int) - - -ida_kernwin.clr_cancelled(): - - clr_cancelled() - - - Clear "Cancelled" flag ( 'ui_clr_cancelled' ) - - -ida_kernwin.create_code_viewer(): - - create_code_viewer(custview, flags=0, parent=None) -> TWidget * - - - Create a code viewer ( 'ui_create_code_viewer' ). A code viewer - contains on the left side a widget representing the line numbers, and - on the right side, the child widget passed as parameter. It will - inherit its title from the child widget. - - @param custview: the custom view to be added (C++: TWidget *) - @param flags: Code viewer flags (C++: int) - @param parent: widget to contain the new code viewer (C++: TWidget *) - - -ida_kernwin.create_empty_widget(): - - create_empty_widget(title, icon=-1) -> TWidget * - - - Create an empty widget, serving as a container for custom user widgets - - @param title (C++: const char *) - @param icon (C++: int) - - -ida_kernwin.create_menu(): - - create_menu(name, label, menupath=None) -> bool - - - Create a menu with the given name, label and optional position, either - in the menubar, or as a submenu. If 'menupath' is non-NULL, it - provides information about where the menu should be positioned. First, - IDA will try and resolve the corresponding menu by its name. If such - an existing menu is found and is present in the menubar, then the new - menu will be inserted in the menubar before it. Otherwise, IDA will - try to resolve 'menupath' as it would for 'attach_action_to_menu()' - and, if found, add the new menu like so: - - // The new 'My menu' submenu will appear in the 'Comments' submenu - // before the 'Enter comment..." command - create_menu("(...)", "My menu", "Edit/Comments/Enter comment..."); - - or - - // The new 'My menu' submenu will appear at the end of the - // 'Comments' submenu. - create_menu("(...)", "My menu", "Edit/Comments/"); - - If the above fails, the new menu will be appended to the menubar. - - @param name: name of menu (must be unique) (C++: const char *) - @param label: label of menu (C++: const char *) - @param menupath: where should the menu be inserted (C++: const char *) - @return: success - - -ida_kernwin.create_toolbar(): - - create_toolbar(name, label, before=None, flags=0) -> bool - - - Create a toolbar with the given name, label and optional position - - @param name: name of toolbar (must be unique) (C++: const char *) - @param label: label of toolbar (C++: const char *) - @param before: if non-NULL, the toolbar before which the new toolbar - will be inserted (C++: const char *) - @param flags: a combination of create toolbar flags , to determine - toolbar position (C++: int) - @return: success - - -ida_kernwin.custom_viewer_jump(): - - custom_viewer_jump(v, loc, flags) -> bool - - - Append 'loc' to the viewer's history, and cause the viewer to display - it. - - @param v: (TWidget *) (C++: TWidget *) - @param loc: (const lochist_entry_t &) (C++: const lochist_entry_t - &) - @param flags: (uint32) or'ed combination of CVNF_* values (C++: - uint32) - @return: success - - -ida_kernwin.del_hotkey(): - - del_hotkey(pyctx) -> bool - - - Deletes a previously registered function hotkey - - @param ctx: Hotkey context previously returned by add_hotkey() - - @return: Boolean. - - -ida_kernwin.del_idc_hotkey(): - - del_idc_hotkey(hotkey) -> bool - - - Delete IDC function hotkey ( 'ui_del_idckey' ). - - @param hotkey: hotkey name (C++: const char *) - - -ida_kernwin.delete_menu(): - - delete_menu(name) -> bool - - - Delete an existing menu - - @param name: name of menu (C++: const char *) - @return: success - - -ida_kernwin.delete_toolbar(): - - delete_toolbar(name) -> bool - - - Delete an existing toolbar - - @param name: name of toolbar (C++: const char *) - @return: success - - -ida_kernwin.detach_action_from_menu(): - - detach_action_from_menu(menupath, name) -> bool - - - Detach an action from the menu ( 'ui_detach_action_from_menu' ). - - @param menupath: path to the menu item (C++: const char *) - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.detach_action_from_popup(): - - detach_action_from_popup(widget, name) -> bool - - - Remove a previously-registered action, from the list of 'permanent' - context menu actions for this widget ( 'ui_detach_action_from_popup' - ). This only makes sense if the action has been added to 'widget's - list of permanent popup actions by calling attach_action_to_popup in - 'permanent' mode. - - @param widget: target widget (C++: TWidget *) - @param name: action name (C++: const char *) - - -ida_kernwin.detach_action_from_toolbar(): - - detach_action_from_toolbar(toolbar_name, name) -> bool - - - Detach an action from the toolbar ( 'ui_detach_action_from_toolbar' ). - - @param toolbar_name: the name of the toolbar (C++: const char *) - @param name: the action name (C++: const char *) - @return: success - - -class ida_kernwin.disasm_line_t(): - - Proxy of C++ disasm_line_t class - - -ida_kernwin.disasm_line_t.at: - disasm_line_t_at_get(self) -> place_t - -ida_kernwin.disasm_line_t.bg_color: - disasm_line_t_bg_color_get(self) -> bgcolor_t - -ida_kernwin.disasm_line_t.is_default: - disasm_line_t_is_default_get(self) -> bool - -ida_kernwin.disasm_line_t.line: - disasm_line_t_line_get(self) -> qstring * - -ida_kernwin.disasm_line_t.prefix_color: - disasm_line_t_prefix_color_get(self) -> color_t - -class ida_kernwin.disasm_text_t(): - - Proxy of C++ qvector<(disasm_line_t)> class - - -ida_kernwin.disasm_text_t.at(): - - at(self, _idx) -> disasm_line_t - - -ida_kernwin.disasm_text_t.begin(): - - begin(self) -> disasm_line_t - begin(self) -> disasm_line_t - - -ida_kernwin.disasm_text_t.capacity(): - - capacity(self) -> size_t - - -ida_kernwin.disasm_text_t.clear(): - - clear(self) - - -ida_kernwin.disasm_text_t.empty(): - - empty(self) -> bool - - -ida_kernwin.disasm_text_t.end(): - - end(self) -> disasm_line_t - end(self) -> disasm_line_t - - -ida_kernwin.disasm_text_t.erase(): - - erase(self, it) -> disasm_line_t - erase(self, first, last) -> disasm_line_t - - -ida_kernwin.disasm_text_t.extract(): - - extract(self) -> disasm_line_t - - -ida_kernwin.disasm_text_t.grow(): - - grow(self, x=disasm_line_t()) - - -ida_kernwin.disasm_text_t.inject(): - - inject(self, s, len) - - -ida_kernwin.disasm_text_t.insert(): - - insert(self, it, x) -> disasm_line_t - - -ida_kernwin.disasm_text_t.pop_back(): - - pop_back(self) - - -ida_kernwin.disasm_text_t.push_back(): - - push_back(self, x) - push_back(self) -> disasm_line_t - - -ida_kernwin.disasm_text_t.qclear(): - - qclear(self) - - -ida_kernwin.disasm_text_t.reserve(): - - reserve(self, cnt) - - -ida_kernwin.disasm_text_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_kernwin.disasm_text_t.size(): - - size(self) -> size_t - - -ida_kernwin.disasm_text_t.swap(): - - swap(self, r) - - -ida_kernwin.disasm_text_t.truncate(): - - truncate(self) - - -ida_kernwin.display_copyright_warning(): - - display_copyright_warning() -> bool - - - Display copyright warning ( 'ui_copywarn' ). - - @return: yes/no - - -ida_kernwin.display_widget(): - - display_widget(widget, options, dest_ctrl=None) - - - Display a widget, dock it if not done before - - @param widget: widget to display (C++: TWidget *) - @param options: Widget open flags (C++: uint32) - @param dest_ctrl: where to dock: if NULL or invalid then use the - active docker if there is not create a new tab - relative to current active tab (C++: const char *) - - -ida_kernwin.ea2str(): - - ea2str(ea) -> size_t - - - Convert linear address to UTF-8 string. - - - @param ea (C++: ea_t) - - -ida_kernwin.ea_viewer_history_push_and_jump(): - - ea_viewer_history_push_and_jump(v, ea, x, y, lnnum) -> bool - - - Push current location in the history and jump to the given location ( - 'ui_ea_viewer_history_push_and_jump' ). This will jump in the given ea - viewer and also in other synchronized views. - - @param v: ea viewer (C++: TWidget *) - @param ea: jump destination (C++: ea_t) - @param x: coords on screen (C++: int) - @param y: coords on screen (C++: int) - @param lnnum: desired line number of given address (C++: int) - - -ida_kernwin.enable_chooser_item_attrs(): - - enable_chooser_item_attrs(chooser_caption, enable) -> bool - - - Enable item-specific attributes for chooser items ( - 'ui_enable_chooser_item_attrs' ). For example: color list items - differently depending on a criterium.If enabled, the chooser will - generate ui_get_chooser_item_attrsevents that can be intercepted by a - plugin to modify the item attributes.This event is generated only in - the GUI version of IDA.Specifying 'CH_ATTRS' bit at the chooser - creation time has the same effect. - - @param chooser_caption (C++: const char *) - @param enable (C++: bool) - @return: success - - -class ida_kernwin.enumplace_t(): - - Proxy of C++ enumplace_t class - - -ida_kernwin.enumplace_t._print(): - - _print(self, out_buf, ud) - - -ida_kernwin.enumplace_t.adjust(): - - adjust(self, ud) - - -ida_kernwin.enumplace_t.as_enumplace_t(): - - as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.enumplace_t.as_idaplace_t(): - - as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.enumplace_t.as_simpleline_place_t(): - - as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.enumplace_t.as_structplace_t(): - - as_structplace_t(p) -> structplace_t - - -ida_kernwin.enumplace_t.beginning(): - - beginning(self, ud) -> bool - - -ida_kernwin.enumplace_t.bmask: - enumplace_t_bmask_get(self) -> bmask_t - -ida_kernwin.enumplace_t.clone(): - - clone(self) -> place_t - - -ida_kernwin.enumplace_t.compare(): - - compare(self, t2) -> int - - -ida_kernwin.enumplace_t.copyfrom(): - - copyfrom(self, _from) - - -ida_kernwin.enumplace_t.ending(): - - ending(self, ud) -> bool - - -ida_kernwin.enumplace_t.enter(): - - enter(self, arg2) -> place_t - - -ida_kernwin.enumplace_t.generate(): - - generate(self, ud, maxsize) -> PyObject * - - -ida_kernwin.enumplace_t.id(): - - id(self) -> int - - -ida_kernwin.enumplace_t.idx: - enumplace_t_idx_get(self) -> size_t - -ida_kernwin.enumplace_t.leave(): - - leave(self, arg2) - - -ida_kernwin.enumplace_t.lnnum: - place_t_lnnum_get(self) -> int - -ida_kernwin.enumplace_t.makeplace(): - - makeplace(self, ud, x, lnnum) -> place_t - - -ida_kernwin.enumplace_t.name(): - - name(self) -> char const * - - -ida_kernwin.enumplace_t.next(): - - next(self, ud) -> bool - - -ida_kernwin.enumplace_t.prev(): - - prev(self, ud) -> bool - - -ida_kernwin.enumplace_t.rebase(): - - rebase(self, arg2) -> bool - - -ida_kernwin.enumplace_t.serial: - enumplace_t_serial_get(self) -> uchar - -ida_kernwin.enumplace_t.toea(): - - toea(self) -> ea_t - - -ida_kernwin.enumplace_t.touval(): - - touval(self, ud) -> uval_t - - -ida_kernwin.enumplace_t.value: - enumplace_t_value_get(self) -> uval_t - -ida_kernwin.error(): - - error(format) - - - Display a fatal message in a message box and quit IDA - - @param format: message to print - - -ida_kernwin.execute_sync(): - - execute_sync(py_callable, reqf) -> int - - - Executes a function in the context of the main thread. - If the current thread not the main thread, then the call is queued and - executed afterwards. - - @param callable: A python callable object, must return an integer value - @param reqf: one of MFF_ flags - @return: -1 or the return value of the callable - - -ida_kernwin.execute_ui_requests(): - - execute_ui_requests(py_list) -> bool - - - Inserts a list of callables into the UI message processing queue. - When the UI is ready it will call one callable. - A callable can request to be called more than once if it returns True. - - @param callable_list: A list of python callable objects. - @note: A callable should return True if it wants to be called more than once. - @return: Boolean. False if the list contains a non callabale item - - -ida_kernwin.find_widget(): - - find_widget(caption) -> TWidget * - - - Find widget with the specified caption (only gui version) ( - 'ui_find_widget' ). NB: this callback works only with the tabbed - widgets! - - @param caption: title of tab, or window title if widget is not tabbed - (C++: const char *) - @return: pointer to the TWidget, NULL if none is found - - -ida_kernwin.formchgcbfa_close(): - - formchgcbfa_close(p_fa, close_normally) - - -ida_kernwin.formchgcbfa_enable_field(): - - formchgcbfa_enable_field(p_fa, fid, enable) -> bool - - -ida_kernwin.formchgcbfa_get_field_value(): - - formchgcbfa_get_field_value(p_fa, fid, ft, sz) -> PyObject * - - -ida_kernwin.formchgcbfa_get_focused_field(): - - formchgcbfa_get_focused_field(p_fa) -> int - - -ida_kernwin.formchgcbfa_move_field(): - - formchgcbfa_move_field(p_fa, fid, x, y, w, h) -> bool - - -ida_kernwin.formchgcbfa_refresh_field(): - - formchgcbfa_refresh_field(p_fa, fid) - - -ida_kernwin.formchgcbfa_set_field_value(): - - formchgcbfa_set_field_value(p_fa, fid, ft, py_val) -> bool - - -ida_kernwin.formchgcbfa_set_focused_field(): - - formchgcbfa_set_focused_field(p_fa, fid) -> bool - - -ida_kernwin.formchgcbfa_show_field(): - - formchgcbfa_show_field(p_fa, fid, show) -> bool - - -ida_kernwin.free_custom_icon(): - - free_custom_icon(icon_id) - - - Frees an icon loaded with load_custom_icon() - - -ida_kernwin.gen_disasm_text(): - - gen_disasm_text(text, ea1, ea2, truncate_lines) - - - Generate disassembly text for a range. - - @param text: result (C++: text_t &) - @param ea1: start address (C++: ea_t) - @param ea2: end address (C++: ea_t) - @param truncate_lines: (on idainfo::margin ) (C++: bool) - - -ida_kernwin.get_action_checkable(): - - get_action_checkable(name) -> bool - - - Get an action's checkability ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_checked(): - - get_action_checked(name) -> bool - - - Get an action's checked state ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_icon(): - - get_action_icon(name) -> bool - - - Get an action's icon ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_label(): - - get_action_label(name) -> bool - - - Get an action's label ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_shortcut(): - - get_action_shortcut(name) -> bool - - - Get an action's shortcut ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_state(): - - get_action_state(name) -> bool - - - Get an action's state ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_tooltip(): - - get_action_tooltip(name) -> bool - - - Get an action's tooltip ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_visibility(): - - get_action_visibility(name) -> bool - - - Get an action's visibility ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_active_modal_widget(): - - get_active_modal_widget() -> TWidget * - - - Get the current, active modal TWidget instance. Note that in this - context, the "wait dialog" is not considered: this function will - return NULL even if it is currently shown. - - @return: TWidget * the active modal widget, or NULL - - -ida_kernwin.get_addon_info(): - - get_addon_info(id, info) -> bool - - - Get info about a registered addon with a given product code. info->cb - must be valid! NB: all pointers are invalidated by next call to - register_addon or get_addon_info - - @param id (C++: const char *) - @param info (C++: addon_info_t *) - @return: false if not found - - -ida_kernwin.get_addon_info_idx(): - - get_addon_info_idx(index, info) -> bool - - - Get info about a registered addon with specific index. info->cb must - be valid! NB: all pointers are invalidated by next call to - register_addon or get_addon_info - - @param index (C++: int) - @param info (C++: addon_info_t *) - @return: false if index is out of range - - -ida_kernwin.get_chooser_data(): - - get_chooser_data(chooser_caption, n) -> PyObject * - - - Get the text corresponding to the index N in the chooser data. Use -1 - to get the header. - - @param chooser_caption (C++: const char *) - @param n (C++: int) - - -ida_kernwin.get_chooser_obj(): - - get_chooser_obj(chooser_caption) -> void * - - - Get the underlying object of the specified chooser ( - 'ui_get_chooser_obj' ).This is object is chooser-specific. - - @param chooser_caption (C++: const char *) - @return: the object that was used to create the chooser - - -ida_kernwin.get_curline(): - - get_curline() -> char const * - - - Get current line from the disassemble window ( 'ui_get_curline' ). - - @return: cptr current line with the color codes (use tag_remove() to - remove the color codes) - - -ida_kernwin.get_current_viewer(): - - get_current_viewer() -> TWidget * - - - Get current ida viewer (idaview or custom viewer) ( - 'ui_get_current_viewer' ) - - -ida_kernwin.get_current_widget(): - - get_current_widget() -> TWidget * - - - Get a pointer to the current widget ( 'ui_get_current_widget' ). - - -ida_kernwin.get_cursor(): - - get_cursor() -> bool - - - Get the cursor position on the screen ( 'ui_get_cursor' ).coordinates - are 0-based - - -ida_kernwin.get_custom_viewer_curline(): - - get_custom_viewer_curline(custom_viewer, mouse) -> char const * - - - Get current line of custom viewer ( 'ui_get_custom_viewer_curline' ). - The returned line contains color codes - - @param custom_viewer: view (C++: TWidget *) - @param mouse: mouse position (otherwise cursor position) (C++: bool) - @return: pointer to contents of current line - - -ida_kernwin.get_custom_viewer_place(): - - get_custom_viewer_place(custom_viewer, mouse) -> place_t - - - Get current place in a custom viewer ( 'ui_get_curplace' ). - - @param custom_viewer: view (C++: TWidget *) - @param mouse: mouse position (otherwise cursor position) (C++: bool) - - -ida_kernwin.get_ea_viewer_history_info(): - - get_ea_viewer_history_info(nback, nfwd, v) -> bool - - - Get information about what's in the history ( - 'ui_ea_viewer_history_info' ). - - @param nback: number of available back steps (C++: int *) - @param nfwd: number of available forward steps (C++: int *) - @param v: ea viewer (C++: TWidget *) - - -ida_kernwin.get_hexdump_ea(): - - get_hexdump_ea(hexdump_num) -> ea_t - - - Get the current address in a hex view. - - @param hexdump_num: number of hexview window (C++: int) - - -ida_kernwin.get_highlight(): - - get_highlight(v) -> PyObject * - - - Returns the currently highlighted identifier and flags - - @return: a tuple (text, flags), or None if nothing - is highlighted or in case of error. - - -ida_kernwin.get_kernel_version(): - - get_kernel_version() -> ssize_t - - - Get IDA kernel version (in a string like "5.1"). - - -ida_kernwin.get_key_code(): - - get_key_code(keyname) -> ushort - - - Get keyboard key code by its name ( 'ui_get_key_code' ) - - - @param keyname (C++: const char *) - - -ida_kernwin.get_navband_ea(): - - get_navband_ea(pixel) -> ea_t - - - Translate the pixel position on the navigation band, into an address. - - - @param pixel (C++: int) - - -ida_kernwin.get_navband_pixel(): - - get_navband_pixel(ea) -> int - - - Maps an address, onto a pixel coordinate within the navband - - @param ea: The address to map - @return: a list [pixel, is_vertical] - - -ida_kernwin.get_opnum(): - - get_opnum() -> int - - - Get current operand number, -1 means no operand ( 'ui_get_opnum' ) - - -ida_kernwin.get_output_curline(): - - get_output_curline(mouse) -> bool - - - Get current line of output window ( 'ui_get_output_curline' ). - - @param mouse: current for mouse pointer? (C++: bool) - @return: false if output contains no text - - -ida_kernwin.get_output_cursor(): - - get_output_cursor() -> bool - - - Get coordinates of the output window's cursor ( 'ui_get_output_cursor' - ).coordinates are 0-basedthis function will succeed even if the output - window is not visible - - -ida_kernwin.get_output_selected_text(): - - get_output_selected_text() -> bool - - - Returns selected text from output window ( - 'ui_get_output_selected_text' ). - - @return: true if there is a selection - - -ida_kernwin.get_place_class(): - - get_place_class(out_flags, out_sdk_version, id) -> place_t - - - Get information about a previously-registered 'place_t' class. See - also 'register_place_class()' . - - @param out_flags: output flags (can be NULL) (C++: int *) - @param out_sdk_version: sdk version the place was created with (can be - NULL) (C++: int *) - @param id: place class ID (C++: int) - @return: the place_t template, or NULL if not found - - -ida_kernwin.get_place_class_id(): - - get_place_class_id(name) -> int - - - Get the place class ID for the place that has been registered as - 'name'. - - @param name: the class name (C++: const char *) - @return: the place class ID, or -1 if not found - - -ida_kernwin.get_place_class_template(): - - get_place_class_template(id) -> place_t - - - See 'get_place_class()' - - - @param id (C++: int) - - -ida_kernwin.get_registered_actions(): - - get_registered_actions() -> PyObject * - - - Get a list of all currently-registered actions - - -ida_kernwin.get_screen_ea(): - - get_screen_ea() -> ea_t - - - Get the address at the screen cursor ( 'ui_screenea' ) - - -ida_kernwin.get_tab_size(): - - get_tab_size(path) -> int - - - Get the size of a tab in spaces ( 'ui_get_tab_size' ). - - @param path: the path of the source view for which the tab size is - requested. if NULL, the default size is returned. (C++: - const char *) - - -ida_kernwin.get_user_strlist_options(): - - get_user_strlist_options(out) - - -ida_kernwin.get_view_renderer_type(): - - get_view_renderer_type(v) -> tcc_renderer_type_t - - - Get the type of renderer currently in use in the given view ( - 'ui_get_renderer_type' ) - - - @param v (C++: TWidget *) - - -ida_kernwin.get_viewer_place_type(): - - get_viewer_place_type(viewer) -> tcc_place_type_t - - - Get the type of 'place_t' instances a viewer uses & creates ( - 'ui_get_viewer_place_type' ). - - - @param viewer (C++: TWidget *) - - -ida_kernwin.get_viewer_user_data(): - - get_viewer_user_data(viewer) -> void * - - - Get the user data from a custom viewer ( 'ui_get_viewer_user_data' ) - - - @param viewer (C++: TWidget *) - - -ida_kernwin.get_widget_title(): - - get_widget_title(widget) -> bool - - - Get the TWidget's title ( 'ui_get_widget_title' ). - - - @param widget (C++: TWidget *) - - -ida_kernwin.get_widget_type(): - - get_widget_type(widget) -> twidget_type_t - - - Get the type of the TWidget * ( 'ui_get_widget_type' ). - - - @param widget (C++: TWidget *) - - -ida_kernwin.get_window_id(): - - get_window_id(name=None) -> void * - - - Get the system-specific window ID (GUI version only) - - @param name (C++: const char *) - @return: the low-level window ID - - -ida_kernwin.hide_wait_box(): - - hide_wait_box() - - - Hide the "Please wait dialog box". - - -class ida_kernwin.idaplace_t(): - - Proxy of C++ idaplace_t class - - -ida_kernwin.idaplace_t._print(): - - _print(self, out_buf, ud) - - -ida_kernwin.idaplace_t.adjust(): - - adjust(self, ud) - - -ida_kernwin.idaplace_t.as_enumplace_t(): - - as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.idaplace_t.as_idaplace_t(): - - as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.idaplace_t.as_simpleline_place_t(): - - as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.idaplace_t.as_structplace_t(): - - as_structplace_t(p) -> structplace_t - - -ida_kernwin.idaplace_t.beginning(): - - beginning(self, ud) -> bool - - -ida_kernwin.idaplace_t.clone(): - - clone(self) -> place_t - - -ida_kernwin.idaplace_t.compare(): - - compare(self, t2) -> int - - -ida_kernwin.idaplace_t.copyfrom(): - - copyfrom(self, _from) - - -ida_kernwin.idaplace_t.ea: - idaplace_t_ea_get(self) -> ea_t - -ida_kernwin.idaplace_t.ending(): - - ending(self, ud) -> bool - - -ida_kernwin.idaplace_t.enter(): - - enter(self, arg2) -> place_t - - -ida_kernwin.idaplace_t.generate(): - - generate(self, ud, maxsize) -> PyObject * - - -ida_kernwin.idaplace_t.id(): - - id(self) -> int - - -ida_kernwin.idaplace_t.leave(): - - leave(self, arg2) - - -ida_kernwin.idaplace_t.lnnum: - place_t_lnnum_get(self) -> int - -ida_kernwin.idaplace_t.makeplace(): - - makeplace(self, ud, x, lnnum) -> place_t - - -ida_kernwin.idaplace_t.name(): - - name(self) -> char const * - - -ida_kernwin.idaplace_t.next(): - - next(self, ud) -> bool - - -ida_kernwin.idaplace_t.prev(): - - prev(self, ud) -> bool - - -ida_kernwin.idaplace_t.rebase(): - - rebase(self, arg2) -> bool - - -ida_kernwin.idaplace_t.toea(): - - toea(self) -> ea_t - - -ida_kernwin.idaplace_t.touval(): - - touval(self, ud) -> uval_t - - -ida_kernwin.info(): - - info(format) - - -ida_kernwin.install_command_interpreter(): - - install_command_interpreter(py_obj) -> int - - - Install command line interpreter ( 'ui_install_cli' ) - - -ida_kernwin.internal_register_place_class(): - - internal_register_place_class(tmplate, flags, owner, sdk_version) -> int - - -ida_kernwin.is_action_enabled(): - - is_action_enabled(s) -> bool - - - Check if the given action state is one of AST_ENABLE*. - - - @param s (C++: action_state_t) - - -ida_kernwin.is_chooser_widget(): - - is_chooser_widget(t) -> bool - - - Does the given widget type specify a chooser widget? - - - @param t (C++: twidget_type_t) - - -ida_kernwin.is_idaq(): - - is_idaq() -> bool - - - Returns True or False depending if IDAPython is hosted by IDAQ - - -ida_kernwin.is_msg_inited(): - - is_msg_inited() -> bool - - - Can we use msg() functions? - - -ida_kernwin.is_place_class_ea_capable(): - - is_place_class_ea_capable(id) -> bool - - - See 'get_place_class()' - - - @param id (C++: int) - - -ida_kernwin.is_refresh_requested(): - - is_refresh_requested(mask) -> bool - - - Get a refresh request state - - @param mask: Window refresh flags (C++: uint64) - @return: the state (set or cleared) - - -class ida_kernwin.jobj_wrapper_t(): - - Proxy of C++ jobj_wrapper_t class - - -ida_kernwin.jobj_wrapper_t.get_dict(): - - get_dict(self) -> PyObject * - - -ida_kernwin.jumpto(): - - jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool - jumpto(custom_viewer, place, x, y) -> bool - - - Jump to the specified address ( 'ui_jumpto' ). - - @param ea: destination (C++: ea_t) - @param opnum: -1: don't change x coord (C++: int) - @param uijmp_flags: Jump flags (C++: int) - @return: success - - -ida_kernwin.load_custom_icon(): - - Loads a custom icon and returns an identifier that can be used with other APIs - - If file_name is passed then the other two arguments are ignored. - - @param file_name: The icon file name - @param data: The icon data - @param format: The icon data format - - @return: Icon id or 0 on failure. - Use free_custom_icon() to free it - - - Load an icon from a file ( 'ui_load_custom_icon_file' ). Also see - 'load_custom_icon(const void *, unsigned int, const char *)' - - @return: icon id - - -ida_kernwin.load_dbg_dbginfo(): - - load_dbg_dbginfo(path, li=None, base=BADADDR, verbose=False) -> bool - - - Load debugging information from a file. - - @param path: path to file (C++: const char *) - @param li: loader input. if NULL, check DBG_NAME_KEY (C++: linput_t *) - @param base: loading address (C++: ea_t) - @param verbose: dump status to message window (C++: bool) - - -ida_kernwin.lookup_key_code(): - - lookup_key_code(key, shift, is_qt) -> ushort - - - Get shortcut code previously created by 'ui_get_key_code' . - - @param key: key constant (C++: int) - @param shift: modifiers (C++: int) - @param is_qt: are we using gui version? (C++: bool) - - -ida_kernwin.msg(): - - msg(o) -> PyObject * - - - Display an UTF-8 string in the message window - - The result of the stringification of the arguments - will be treated as an UTF-8 string. - - @param message: message to print (formatting is done in Python) - - This function can be used to debug IDAPython scripts - - -ida_kernwin.msg_clear(): - - msg_clear() - - - Clear the "Output window". - - -ida_kernwin.msg_get_lines(): - - msg_get_lines(count=-1) -> PyObject * - - - Retrieve the last 'count' lines from the output window, in reverse - order (from most recent, to least recent) - - @param count: The number of lines to retrieve. -1 means: all (C++: - int) - - -ida_kernwin.msg_save(): - - msg_save(path) -> bool - - - Save the "Output window" contents into a file - - @param path: The path of the file to save the contents into. An empty - path means that the user will be prompted for the - destination and, if the file already exists, the user - will be asked to confirm before overriding its contents. - Upon return, 'path' will contain the path that the user - chose. (C++: qstring &) - @return: success - - -ida_kernwin.nomem(): - - nomem(format) - - -ida_kernwin.open_bpts_window(): - - open_bpts_window(ea) -> TWidget * - - - Open the breakpoints window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_calls_window(): - - open_calls_window(ea) -> TWidget * - - - Open the function calls window ( 'ui_open_builtin' ). - - @param ea (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_disasm_window(): - - open_disasm_window(window_title, ranges=None) -> TWidget * - - - Open a disassembly view ( 'ui_open_builtin' ). - - @param window_title: title of view to open (C++: const char *) - @param ranges: if != NULL, then display a flow chart with the - specified ranges (C++: const rangevec_t *) - @return: pointer to resulting window - - -ida_kernwin.open_enums_window(): - - open_enums_window(const_id=BADADDR) -> TWidget * - - - Open the enums window ( 'ui_open_builtin' ). - - @param const_id: index of entry to select by default (C++: tid_t) - @return: pointer to resulting window - - -ida_kernwin.open_exports_window(): - - open_exports_window(ea) -> TWidget * - - - Open the exports window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_frame_window(): - - open_frame_window(pfn, offset) -> TWidget * - - - Open the frame window for the given function ( 'ui_open_builtin' ). - - @param pfn: function to analyze (C++: func_t *) - @param offset: offset where the cursor is placed (C++: uval_t) - @return: pointer to resulting window if 'pfn' is a valid function and - the window was displayed, NULL otherwise - - -ida_kernwin.open_funcs_window(): - - open_funcs_window(ea) -> TWidget * - - - Open the functions window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_hexdump_window(): - - open_hexdump_window(window_title) -> TWidget * - - - Open a hexdump view ( 'ui_open_builtin' ). - - @param window_title: title of view to open (C++: const char *) - @return: pointer to resulting window - - -ida_kernwin.open_imports_window(): - - open_imports_window(ea) -> TWidget * - - - Open the exports window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_loctypes_window(): - - open_loctypes_window(ordinal) -> TWidget * - - - Open the local types window ( 'ui_open_builtin' ). - - @param ordinal: ordinal of type to select by default (C++: int) - @return: pointer to resulting window - - -ida_kernwin.open_modules_window(): - - open_modules_window() -> TWidget * - - - Open the modules window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_names_window(): - - open_names_window(ea) -> TWidget * - - - Open the names window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_navband_window(): - - open_navband_window(ea, zoom) -> TWidget * - - - Open the navigation band window ( 'ui_open_builtin' ). - - @param ea: sets the address of the navband arrow (C++: ea_t) - @param zoom: sets the navband zoom level (C++: int) - @return: pointer to resulting window - - -ida_kernwin.open_notepad_window(): - - open_notepad_window() -> TWidget * - - - Open the notepad window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_problems_window(): - - open_problems_window(ea) -> TWidget * - - - Open the problems window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_segments_window(): - - open_segments_window(ea) -> TWidget * - - - Open the segments window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_segregs_window(): - - open_segregs_window(ea) -> TWidget * - - - Open the segment registers window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_selectors_window(): - - open_selectors_window() -> TWidget * - - - Open the selectors window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_signatures_window(): - - open_signatures_window() -> TWidget * - - - Open the signatures window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_stack_window(): - - open_stack_window() -> TWidget * - - - Open the call stack window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_strings_window(): - - open_strings_window(ea, selstart=BADADDR, selend=BADADDR) -> TWidget * - - - Open the strings window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @param selstart: only display strings that occur within this range - (C++: ea_t) - @param selend: only display strings that occur within this range (C++: - ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_structs_window(): - - open_structs_window(id=BADADDR, offset=0) -> TWidget * - - - Open the structs window ( 'ui_open_builtin' ). - - @param id: index of entry to select by default (C++: tid_t) - @param offset: offset where the cursor is placed (C++: uval_t) - @return: pointer to resulting window - - -ida_kernwin.open_threads_window(): - - open_threads_window() -> TWidget * - - - Open the threads window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_tils_window(): - - open_tils_window() -> TWidget * - - - Open the type libraries window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_trace_window(): - - open_trace_window() -> TWidget * - - - Open the trace window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_url(): - - open_url(url) - - - Open the given url ( 'ui_open_url' ) - - - @param url (C++: const char *) - - -ida_kernwin.open_xrefs_window(): - - open_xrefs_window(ea) -> TWidget * - - - Open the cross references window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -class ida_kernwin.place_t(): - - Proxy of C++ place_t class - - -ida_kernwin.place_t._print(): - - _print(self, out_buf, ud) - - -ida_kernwin.place_t.adjust(): - - adjust(self, ud) - - -ida_kernwin.place_t.as_enumplace_t(): - - as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.place_t.as_idaplace_t(): - - as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.place_t.as_simpleline_place_t(): - - as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.place_t.as_structplace_t(): - - as_structplace_t(p) -> structplace_t - - -ida_kernwin.place_t.beginning(): - - beginning(self, ud) -> bool - - -ida_kernwin.place_t.clone(): - - clone(self) -> place_t - - -ida_kernwin.place_t.compare(): - - compare(self, t2) -> int - - -ida_kernwin.place_t.copyfrom(): - - copyfrom(self, _from) - - -ida_kernwin.place_t.ending(): - - ending(self, ud) -> bool - - -ida_kernwin.place_t.enter(): - - enter(self, arg2) -> place_t - - -ida_kernwin.place_t.generate(): - - generate(self, ud, maxsize) -> PyObject * - - -ida_kernwin.place_t.id(): - - id(self) -> int - - -ida_kernwin.place_t.leave(): - - leave(self, arg2) - - -ida_kernwin.place_t.lnnum: - place_t_lnnum_get(self) -> int - -ida_kernwin.place_t.makeplace(): - - makeplace(self, ud, x, lnnum) -> place_t - - -ida_kernwin.place_t.name(): - - name(self) -> char const * - - -ida_kernwin.place_t.next(): - - next(self, ud) -> bool - - -ida_kernwin.place_t.prev(): - - prev(self, ud) -> bool - - -ida_kernwin.place_t.rebase(): - - rebase(self, arg2) -> bool - - -ida_kernwin.place_t.toea(): - - toea(self) -> ea_t - - -ida_kernwin.place_t.touval(): - - touval(self, ud) -> uval_t - - -ida_kernwin.place_t_as_enumplace_t(): - - place_t_as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.place_t_as_idaplace_t(): - - place_t_as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.place_t_as_simpleline_place_t(): - - place_t_as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.place_t_as_structplace_t(): - - place_t_as_structplace_t(p) -> structplace_t - - -ida_kernwin.plgform_close(): - - plgform_close(py_link, options) - - -ida_kernwin.plgform_get_widget(): - - plgform_get_widget(py_link) -> TWidget * - - -ida_kernwin.plgform_new(): - - plgform_new() -> PyObject * - - -ida_kernwin.plgform_show(): - - plgform_show(py_link, py_obj, caption, options=WOPN_DP_TAB|WOPN_RESTORE) -> bool - - -ida_kernwin.process_ui_action(): - - process_ui_action(name, flags=0) -> bool - - - Invokes an IDA UI action by name - - @param name: action name - @return: Boolean - - -ida_kernwin.py_get_ask_form(): - - py_get_ask_form() -> size_t - - -ida_kernwin.py_get_open_form(): - - py_get_open_form() -> size_t - - -ida_kernwin.py_load_custom_icon_data(): - - py_load_custom_icon_data(data, format) -> int - - -ida_kernwin.py_load_custom_icon_fn(): - - py_load_custom_icon_fn(filename) -> int - - -ida_kernwin.py_register_compiled_form(): - - py_register_compiled_form(py_form) - - -ida_kernwin.py_ss_restore_callback(): - - py_ss_restore_callback(err_msg, userdata) - - -ida_kernwin.py_unregister_compiled_form(): - - py_unregister_compiled_form(py_form) - - -ida_kernwin.pyidag_bind(): - - pyidag_bind(self) -> bool - - -ida_kernwin.pyidag_unbind(): - - pyidag_unbind(self) -> bool - - -ida_kernwin.pyscv_add_line(): - - pyscv_add_line(py_this, py_sl) -> bool - - -ida_kernwin.pyscv_clear_lines(): - - pyscv_clear_lines(py_this) -> PyObject * - - -ida_kernwin.pyscv_close(): - - pyscv_close(py_this) - - -ida_kernwin.pyscv_count(): - - pyscv_count(py_this) -> size_t - - -ida_kernwin.pyscv_del_line(): - - pyscv_del_line(py_this, nline) -> bool - - -ida_kernwin.pyscv_edit_line(): - - pyscv_edit_line(py_this, nline, py_sl) -> bool - - -ida_kernwin.pyscv_get_current_line(): - - pyscv_get_current_line(py_this, mouse, notags) -> PyObject * - - -ida_kernwin.pyscv_get_current_word(): - - pyscv_get_current_word(py_this, mouse) -> PyObject * - - -ida_kernwin.pyscv_get_line(): - - pyscv_get_line(py_this, nline) -> PyObject * - - -ida_kernwin.pyscv_get_pos(): - - pyscv_get_pos(py_this, mouse) -> PyObject * - - -ida_kernwin.pyscv_get_selection(): - - pyscv_get_selection(py_this) -> PyObject * - - -ida_kernwin.pyscv_get_widget(): - - pyscv_get_widget(py_this) -> TWidget * - - -ida_kernwin.pyscv_init(): - - pyscv_init(py_link, title) -> PyObject * - - -ida_kernwin.pyscv_insert_line(): - - pyscv_insert_line(py_this, nline, py_sl) -> bool - - -ida_kernwin.pyscv_is_focused(): - - pyscv_is_focused(py_this) -> bool - - -ida_kernwin.pyscv_jumpto(): - - pyscv_jumpto(py_this, ln, x, y) -> bool - - -ida_kernwin.pyscv_patch_line(): - - pyscv_patch_line(py_this, nline, offs, value) -> bool - - -ida_kernwin.pyscv_refresh(): - - pyscv_refresh(py_this) -> bool - - -ida_kernwin.pyscv_show(): - - pyscv_show(py_this) -> bool - - -ida_kernwin.qcleanline(): - - qcleanline(cmt_char='', flags=((1 << 0)|(1 << 1))|(1 << 2)) -> ssize_t - - - Performs some cleanup operations to a line. - - @param cmt_char: character that denotes the start of a comment: the - entire text is removed if the line begins with this - character (ignoring leading spaces) all text after - (and including) this character is removed if flag - CLNL_FINDCMT is set (C++: char) - @param flags: a combination of line cleanup flags . defaults to - CLNL_TRIM (C++: uint32) - @return: length of line - - -ida_kernwin.read_range_selection(): - - read_range_selection(v) -> bool - - - Get the address range for the selected range boundaries, this is the - convenient function for 'read_selection()' - - @param v: view, NULL means the last active window containing addresses - (C++: TWidget *) - - -ida_kernwin.read_selection(): - - read_selection(v, p1, p2) -> bool - - - Read the user selection, and store its information in p0 (from) and p1 (to). - - This can be used as follows: - - - >>> p0 = idaapi.twinpos_t() - p1 = idaapi.twinpos_t() - view = idaapi.get_current_viewer() - idaapi.read_selection(view, p0, p1) - - - At that point, p0 and p1 hold information for the selection. - But, the 'at' property of p0 and p1 is not properly typed. - To specialize it, call #place() on it, passing it the view - they were retrieved from. Like so: - - - >>> place0 = p0.place(view) - place1 = p1.place(view) - - - This will effectively "cast" the place into a specialized type, - holding proper information, depending on the view type (e.g., - disassembly, structures, enums, ...) - - @param view: The view to retrieve the selection for. - @param p0: Storage for the "from" part of the selection. - @param p1: Storage for the "to" part of the selection. - @return: a bool value indicating success. - - -ida_kernwin.refresh_chooser(): - - refresh_chooser(title) -> bool - - - Mark a non-modal custom chooser for a refresh ( 'ui_refresh_chooser' - ). - - @param title: title of chooser (C++: const char *) - @return: success - - -ida_kernwin.refresh_choosers(): - - refresh_choosers() - - -ida_kernwin.refresh_idaview(): - - refresh_idaview() - - - Refresh marked windows ( 'ui_refreshmarked' ) - - -ida_kernwin.refresh_idaview_anyway(): - - refresh_idaview_anyway() - - - Refresh all disassembly views ( 'ui_refresh' ), forces an immediate - refresh. Please consider 'request_refresh()' instead - - -ida_kernwin.refresh_navband(): - - refresh_navband(force) - - - Refresh navigation band if changed ( 'ui_refresh_navband' ). - - @param force: refresh regardless (C++: bool) - - -ida_kernwin.register_action(): - - register_action(desc) -> bool - - - Create a new action ( 'ui_register_action' ). After an action has been - created, it is possible to attach it to menu items ( - 'attach_action_to_menu()' ), or to popup menus ( - 'attach_action_to_popup()' ).Because the actions will need to call the - handler's activate() and update() methods at any time, you shouldn't - build your action handler on the stack.Please see the SDK's "ht_view" - plugin for an example how to register actions. - - @param desc: action to register (C++: const action_desc_t &) - @return: success - - -ida_kernwin.register_addon(): - - register_addon(info) -> int - - - Register an add-on. Show its info in the About box. For plugins, - should be called from init() function (repeated calls with the same - product code overwrite previous entries) returns: index of the add-on - in the list, or -1 on error - - @param info (C++: const addon_info_t *) - - -ida_kernwin.register_and_attach_to_menu(): - - register_and_attach_to_menu(menupath, name, label, shortcut, flags, handler, owner) -> bool - - - Helper.You are not encouraged to use this, as it mixes flags for both - 'register_action()' , and 'attach_action_to_menu()' .The only reason - for its existence is to make it simpler to port existing plugins to - the new actions API. - - @param menupath (C++: const char *) - @param name (C++: const char *) - @param label (C++: const char *) - @param shortcut (C++: const char *) - @param flags (C++: int) - @param handler (C++: action_handler_t *) - @param owner (C++: const plugin_t *) - - -ida_kernwin.register_timer(): - - register_timer(interval, py_callback) -> PyObject * - - - Register a timer - - @param interval: Interval in milliseconds - @param callback: A Python callable that takes no parameters and returns an integer. - The callback may return: - -1 : to unregister the timer - >= 0 : the new or same timer interval - @return: None or a timer object - - -ida_kernwin.remove_command_interpreter(): - - remove_command_interpreter(cli_idx) - - - Remove command line interpreter ( 'ui_install_cli' ) - - -class ida_kernwin.renderer_pos_info_t(): - - Proxy of C++ renderer_pos_info_t class - - -ida_kernwin.renderer_pos_info_t.cx: - renderer_pos_info_t_cx_get(self) -> short - -ida_kernwin.renderer_pos_info_t.cy: - renderer_pos_info_t_cy_get(self) -> short - -ida_kernwin.renderer_pos_info_t.node: - renderer_pos_info_t_node_get(self) -> int - -ida_kernwin.renderer_pos_info_t.sx: - renderer_pos_info_t_sx_get(self) -> short - -ida_kernwin.repaint_custom_viewer(): - - repaint_custom_viewer(custom_viewer) - - - Repaint the given widget immediately ( 'ui_repaint_qwidget' ) - - - @param custom_viewer (C++: TWidget *) - - -ida_kernwin.replace_wait_box(): - - replace_wait_box(format) - - - Replace the label of "Please wait dialog box". - - - @param format (C++: const char *) - - -ida_kernwin.request_refresh(): - - request_refresh(mask, cnd=True) - - - Request a refresh of a builtin window. - - @param mask: Window refresh flags (C++: uint64) - @param cnd: set if true or clear flag otherwise (C++: bool) - - -ida_kernwin.restore_database_snapshot(): - - restore_database_snapshot(ss, pyfunc_or_none, pytuple_or_none) -> PyObject * - - - Restore a database snapshot. Note: This call is asynchronous. When it - is completed, the callback will be triggered. - - @param ss: snapshot instance (see build_snapshot_tree() ) (C++: const - snapshot_t *) - @return: false if restoration could not be started (snapshot file was - not found). If the returned value is True then check if - the operation succeeded from the callback. - - -ida_kernwin.set_cancelled(): - - set_cancelled() - - - Set "Cancelled" flag ( 'ui_set_cancelled' ) - - -ida_kernwin.set_code_viewer_handler(): - - set_code_viewer_handler(code_viewer, handler_id, handler_or_data) -> void * - - - Set a handler for a code viewer event ( 'ui_set_custom_viewer_handler' - ). - - @param code_viewer: the code viewer (C++: TWidget *) - @param handler_id: one of CDVH_ in custom_viewer_handler_id_t (C++: - custom_viewer_handler_id_t) - @param handler_or_data: can be a handler or data. see examples in - Functions: custom viewer handlers (C++: void - *) - @return: old value of the handler or data - - -ida_kernwin.set_code_viewer_is_source(): - - set_code_viewer_is_source(code_viewer) -> bool - - - Specify that the given code viewer is used to display source code ( - 'ui_set_custom_viewer_handler' ). - - - @param code_viewer (C++: TWidget *) - - -ida_kernwin.set_code_viewer_line_handlers(): - - set_code_viewer_line_handlers(code_viewer, click_handler, popup_handler, dblclick_handler, drawicon_handler, linenum_handler) - - - Set handlers for code viewer line events. Any of these handlers may be - NULL - - @param code_viewer (C++: TWidget *) - @param click_handler (C++: code_viewer_lines_click_t *) - @param popup_handler (C++: code_viewer_lines_click_t *) - @param dblclick_handler (C++: code_viewer_lines_click_t *) - @param drawicon_handler (C++: code_viewer_lines_icon_t *) - @param linenum_handler (C++: code_viewer_lines_linenum_t *) - - -ida_kernwin.set_code_viewer_lines_alignment(): - - set_code_viewer_lines_alignment(code_viewer, align) -> bool - - - Set alignment for lines in a code viewer ( - 'ui_set_custom_viewer_handler' ). - - - @param code_viewer (C++: TWidget *) - @param align (C++: int) - - -ida_kernwin.set_code_viewer_lines_icon_margin(): - - set_code_viewer_lines_icon_margin(code_viewer, margin) -> bool - - - Set space allowed for icons in the margin of a code viewer ( - 'ui_set_custom_viewer_handler' ). - - - @param code_viewer (C++: TWidget *) - @param margin (C++: int) - - -ida_kernwin.set_code_viewer_lines_radix(): - - set_code_viewer_lines_radix(code_viewer, radix) -> bool - - - Set radix for values displayed in a code viewer ( - 'ui_set_custom_viewer_handler' ). - - - @param code_viewer (C++: TWidget *) - @param radix (C++: int) - - -ida_kernwin.set_code_viewer_user_data(): - - set_code_viewer_user_data(code_viewer, ud) -> bool - - - Set the user data on a code viewer ( 'ui_set_custom_viewer_handler' ). - - - @param code_viewer (C++: TWidget *) - @param ud (C++: void *) - - -ida_kernwin.set_custom_viewer_qt_aware(): - - set_custom_viewer_qt_aware(custom_viewer) -> bool - - - Allow the given viewer to interpret Qt events ( - 'ui_set_custom_viewer_handler' ) - - - @param custom_viewer (C++: TWidget *) - - -ida_kernwin.set_dock_pos(): - - set_dock_pos(src_ctrl, dest_ctrl, orient, left=0, top=0, right=0, bottom=0) -> bool - - - Sets the dock orientation of a window relatively to another window. - - @param src: Source docking control - @param dest: Destination docking control - @param orient: One of DOR_XXXX constants - @param left, top, right, bottom: These parameter if DOR_FLOATING is used, or if you want to specify the width of docked windows - @return: Boolean - - Example: - set_dock_pos('Structures', 'Enums', DOR_RIGHT) <- docks the Structures window to the right of Enums window - - -ida_kernwin.set_highlight(): - - set_highlight(viewer, str, flags) -> bool - - - Set the highlighted identifier in the viewer ( 'ui_set_highlight' ). - - @param viewer: the viewer (C++: TWidget *) - @param str: the text to match, or NULL to remove current (C++: const - char *) - @param flags: combination of HIF_... bits (see set_highlightr flags ) - (C++: int) - @return: false if an error occurred - - -ida_kernwin.set_nav_colorizer(): - - set_nav_colorizer(new_py_colorizer) -> PyObject * - - - Set a new colorizer for the navigation band. - - The 'callback' is a function of 2 arguments: - - ea (the EA to colorize for) - - nbytes (the number of bytes at that EA) - and must return a 'long' value. - - The previous colorizer is returned, allowing - the new 'callback' to use 'call_nav_colorizer' - with it. - - Note that the previous colorizer is returned - only the first time set_nav_colorizer() is called: - due to the way the colorizers API is defined in C, - it is impossible to chain more than 2 colorizers - in IDAPython: the original, IDA-provided colorizer, - and a user-provided one. - - Example: colorizer inverting the color provided by the IDA colorizer: - def my_colorizer(ea, nbytes): - global ida_colorizer - orig = idaapi.call_nav_colorizer(ida_colorizer, ea, nbytes) - return long(~orig) - - ida_colorizer = idaapi.set_nav_colorizer(my_colorizer) - - -ida_kernwin.set_view_renderer_type(): - - set_view_renderer_type(v, rt) - - - Set the type of renderer to use in a view ( 'ui_set_renderer_type' ) - - - @param v (C++: TWidget *) - @param rt (C++: tcc_renderer_type_t) - - -ida_kernwin.show_wait_box(): - - show_wait_box(format) - - - Display a dialog box with "Please wait...". If the text message starts - with "HIDECANCEL - ", the cancel buttonwon't be displayed in the dialog - box and you don't need to checkfor cancellations with - 'user_cancelled()' . Plugins must call 'hide_wait_box()' to close the - dialog box, otherwise the user interface will be disabled.Note that, - if the wait dialog is already visible, 'show_wait_box()' will1) push - the currently-displayed text on a stack2) display the new textThen, - when 'hide_wait_box()' is called, if that stack isn't empty its - toplabel will be popped and restored in the wait dialog.This implies - that a plugin should call 'hide_wait_box()' exactly as manytimes as it - called 'show_wait_box()' , or the wait dialog might remainvisible and - block the UI.Also, in case the plugin knows the wait dialog is - currently displayed,alternatively it can call 'replace_wait_box()' , - to replace the text of thedialog without pushing the currently- - displayed text on the stack. - - @param format (C++: const char *) - - -class ida_kernwin.simplecustviewer_t(): - - The base class for implementing simple custom viewers - - -ida_kernwin.simplecustviewer_t.AddLine(): - - Adds a colored line to the view - @return: Boolean - - -ida_kernwin.simplecustviewer_t.ClearLines(): - - Clears all the lines - - -ida_kernwin.simplecustviewer_t.Close(): - - Destroys the view. - One has to call Create() afterwards. - Show() can be called and it will call Create() internally. - @return: Boolean - - -ida_kernwin.simplecustviewer_t.Count(): - - Returns the number of lines in the view - - -ida_kernwin.simplecustviewer_t.Create(): - - Creates the custom view. This should be the first method called after instantiation - - @param title: The title of the view - @return: Boolean whether it succeeds or fails. It may fail if a window with the same title is already open. - In this case better close existing windows - - -ida_kernwin.simplecustviewer_t.DelLine(): - - Deletes an existing line - @return: Boolean - - -ida_kernwin.simplecustviewer_t.EditLine(): - - Edits an existing line. - @return: Boolean - - -ida_kernwin.simplecustviewer_t.GetCurrentLine(): - - Returns the current line. - @param mouse: Current line at mouse pos - @param notags: If True then tag_remove() will be called before returning the line - @return: Returns the current line (colored or uncolored) or None on failure - - -ida_kernwin.simplecustviewer_t.GetCurrentWord(): - - Returns the current word - @param mouse: Use mouse position or cursor position - @return: None if failed or a String containing the current word at mouse or cursor - - -ida_kernwin.simplecustviewer_t.GetLine(): - - Returns a line - @param lineno: The line number - @return: - Returns a tuple (colored_line, fgcolor, bgcolor) or None - - -ida_kernwin.simplecustviewer_t.GetLineNo(): - - Calls GetPos() and returns the current line number or -1 on failure - - -ida_kernwin.simplecustviewer_t.GetPos(): - - Returns the current cursor or mouse position. - @param mouse: return mouse position - @return: Returns a tuple (lineno, x, y) - - -ida_kernwin.simplecustviewer_t.GetSelection(): - - Returns the selected range or None - @return: - - tuple(x1, y1, x2, y2) - - None if no selection - - -ida_kernwin.simplecustviewer_t.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_kernwin.simplecustviewer_t.InsertLine(): - - Inserts a line in the given position - @return: Boolean - - -ida_kernwin.simplecustviewer_t.IsFocused(): - - Returns True if the current view is the focused view - - -ida_kernwin.simplecustviewer_t.OnPopup(): - - Context menu popup is about to be shown. Create items dynamically if you wish - @return: Boolean. True if you handled the event - - -ida_kernwin.simplecustviewer_t.PatchLine(): - - Patches an existing line character at the given offset. This is a low level function. You must know what you're doing - - -ida_kernwin.simplecustviewer_t.RefreshCurrent(): - - Refreshes the current line only - - -ida_kernwin.simplecustviewer_t.Show(): - - Shows an already created view. It the view was close, then it will call Create() for you - @return: Boolean - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.create_desktop_widget(): - - create_desktop_widget(self, title, cfg) -> PyObject * - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.current_widget_changed(): - - current_widget_changed(self, widget, prev_widget) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.database_inited(): - - database_inited(self, is_new_database, idc_script) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.debugger_menu_change(): - - debugger_menu_change(self, enable) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.finish_populating_widget_popup(): - - finish_populating_widget_popup(self, widget, popup_handle, ctx=None) - - - The UI is about to be done populating the TWidget's popup menu. - Now is a good time to call idaapi.attach_action_to_popup() - - @param widget: The widget - @param popup: The popup menu. - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.get_chooser_item_attrs(): - - get_chooser_item_attrs(self, chooser, n, attrs) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.get_custom_viewer_hint(): - - get_custom_viewer_hint(self, viewer, place) -> PyObject * - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.get_ea_hint(): - - get_ea_hint(self, ea) -> PyObject * - - - The UI wants to display a simple hint for an address in the navigation band - - @param ea: The address - @return: String with the hint or None - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.get_item_hint(): - - get_item_hint(self, ea, max_lines) -> PyObject * - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.get_widget_config(): - - get_widget_config(self, widget, cfg) -> PyObject * - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.hook(): - - hook(self) -> bool - - - Creates an UI hook - - @return: Boolean true on success - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.idcstart(): - - idcstart(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.idcstop(): - - idcstop(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.plugin_loaded(): - - plugin_loaded(self, plugin_info) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.plugin_unloading(): - - plugin_unloading(self, plugin_info) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.postprocess_action(): - - postprocess_action(self) - - - An ida ui action has been handled - - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.preprocess_action(): - - preprocess_action(self, name) - - - IDA ui is about to handle a user action - - @param name: ui action name - (these names can be looked up in ida[tg]ui.cfg) - @return: 0-ok, nonzero - a plugin has handled the action - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.range(): - - range(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.ready_to_run(): - - ready_to_run(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.resume(): - - resume(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.saved(): - - saved(self) - - - The kernel has saved the database. - - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.saving(): - - saving(self) - - - The kernel is saving the database. - - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.screen_ea_changed(): - - screen_ea_changed(self, ea, prev_ea) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.set_widget_config(): - - set_widget_config(self, widget, cfg) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.suspend(): - - suspend(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.term(): - - term(self) - - - IDA is terminated and the database is already closed. - The UI may close its windows in this callback. - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.unhook(): - - unhook(self) -> bool - - - Removes the UI hook - @return: Boolean true on success - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.updated_actions(): - - updated_actions(self) - - - The UI is done updating actions. - - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.updating_actions(): - - updating_actions(self, ctx) - - - The UI is about to batch-update some actions. - - @param ctx: The action_update_ctx_t instance - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.widget_closing(): - - widget_closing(self, widget) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.widget_invisible(): - - widget_invisible(self, widget) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.widget_visible(): - - widget_visible(self, widget) - - -class ida_kernwin.simpleline_place_t(): - - Proxy of C++ simpleline_place_t class - - -ida_kernwin.simpleline_place_t._print(): - - _print(self, out_buf, ud) - - -ida_kernwin.simpleline_place_t.adjust(): - - adjust(self, ud) - - -ida_kernwin.simpleline_place_t.as_enumplace_t(): - - as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.simpleline_place_t.as_idaplace_t(): - - as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.simpleline_place_t.as_simpleline_place_t(): - - as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.simpleline_place_t.as_structplace_t(): - - as_structplace_t(p) -> structplace_t - - -ida_kernwin.simpleline_place_t.beginning(): - - beginning(self, ud) -> bool - - -ida_kernwin.simpleline_place_t.clone(): - - clone(self) -> place_t - - -ida_kernwin.simpleline_place_t.compare(): - - compare(self, t2) -> int - - -ida_kernwin.simpleline_place_t.copyfrom(): - - copyfrom(self, _from) - - -ida_kernwin.simpleline_place_t.ending(): - - ending(self, ud) -> bool - - -ida_kernwin.simpleline_place_t.enter(): - - enter(self, arg2) -> place_t - - -ida_kernwin.simpleline_place_t.generate(): - - generate(self, ud, maxsize) -> PyObject * - - -ida_kernwin.simpleline_place_t.id(): - - id(self) -> int - - -ida_kernwin.simpleline_place_t.leave(): - - leave(self, arg2) - - -ida_kernwin.simpleline_place_t.lnnum: - place_t_lnnum_get(self) -> int - -ida_kernwin.simpleline_place_t.makeplace(): - - makeplace(self, ud, x, lnnum) -> place_t - - -ida_kernwin.simpleline_place_t.n: - simpleline_place_t_n_get(self) -> uint32 - -ida_kernwin.simpleline_place_t.name(): - - name(self) -> char const * - - -ida_kernwin.simpleline_place_t.next(): - - next(self, ud) -> bool - - -ida_kernwin.simpleline_place_t.prev(): - - prev(self, ud) -> bool - - -ida_kernwin.simpleline_place_t.rebase(): - - rebase(self, arg2) -> bool - - -ida_kernwin.simpleline_place_t.toea(): - - toea(self) -> ea_t - - -ida_kernwin.simpleline_place_t.touval(): - - touval(self, ud) -> uval_t - - -class ida_kernwin.simpleline_t(): - - Proxy of C++ simpleline_t class - - -ida_kernwin.simpleline_t.bgcolor: - simpleline_t_bgcolor_get(self) -> bgcolor_t - -ida_kernwin.simpleline_t.color: - simpleline_t_color_get(self) -> color_t - -ida_kernwin.simpleline_t.line: - simpleline_t_line_get(self) -> qstring * - -ida_kernwin.str2ea(): - - str2ea(str, screenEA=BADADDR) -> ea_t - - - Converts a string express to EA. The expression evaluator may be called as well. - - @return: BADADDR or address value - - -ida_kernwin.str2user(): - - str2user(str) -> PyObject * - - - Insert C-style escape characters to string - - @return: new string with escape characters inserted - - -ida_kernwin.strarray(): - - strarray(array, array_size, code) -> char const * - - - Find a line with the specified code in the 'strarray_t' array. If the - last element of the array has code==0 then it is considered as the - default entry.If no default entry exists and the code is not found, - 'strarray()' returns "". - - @param array (C++: const strarray_t *) - @param array_size (C++: size_t) - @param code (C++: int) - - -class ida_kernwin.strarray_t(): - - Proxy of C++ strarray_t class - - -ida_kernwin.strarray_t.code: - strarray_t_code_get(self) -> int - -ida_kernwin.strarray_t.text: - strarray_t_text_get(self) -> char const * - -class ida_kernwin.structplace_t(): - - Proxy of C++ structplace_t class - - -ida_kernwin.structplace_t._print(): - - _print(self, out_buf, ud) - - -ida_kernwin.structplace_t.adjust(): - - adjust(self, ud) - - -ida_kernwin.structplace_t.as_enumplace_t(): - - as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.structplace_t.as_idaplace_t(): - - as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.structplace_t.as_simpleline_place_t(): - - as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.structplace_t.as_structplace_t(): - - as_structplace_t(p) -> structplace_t - - -ida_kernwin.structplace_t.beginning(): - - beginning(self, ud) -> bool - - -ida_kernwin.structplace_t.clone(): - - clone(self) -> place_t - - -ida_kernwin.structplace_t.compare(): - - compare(self, t2) -> int - - -ida_kernwin.structplace_t.copyfrom(): - - copyfrom(self, _from) - - -ida_kernwin.structplace_t.ending(): - - ending(self, ud) -> bool - - -ida_kernwin.structplace_t.enter(): - - enter(self, arg2) -> place_t - - -ida_kernwin.structplace_t.generate(): - - generate(self, ud, maxsize) -> PyObject * - - -ida_kernwin.structplace_t.id(): - - id(self) -> int - - -ida_kernwin.structplace_t.idx: - structplace_t_idx_get(self) -> uval_t - -ida_kernwin.structplace_t.leave(): - - leave(self, arg2) - - -ida_kernwin.structplace_t.lnnum: - place_t_lnnum_get(self) -> int - -ida_kernwin.structplace_t.makeplace(): - - makeplace(self, ud, x, lnnum) -> place_t - - -ida_kernwin.structplace_t.name(): - - name(self) -> char const * - - -ida_kernwin.structplace_t.next(): - - next(self, ud) -> bool - - -ida_kernwin.structplace_t.offset: - structplace_t_offset_get(self) -> uval_t - -ida_kernwin.structplace_t.prev(): - - prev(self, ud) -> bool - - -ida_kernwin.structplace_t.rebase(): - - rebase(self, arg2) -> bool - - -ida_kernwin.structplace_t.toea(): - - toea(self) -> ea_t - - -ida_kernwin.structplace_t.touval(): - - touval(self, ud) -> uval_t - - -class ida_kernwin.sync_source_t(): - - Proxy of C++ sync_source_t class - - -ida_kernwin.sync_source_t.get_register(): - - get_register(self) -> char const * - - -ida_kernwin.sync_source_t.get_widget(): - - get_widget(self) -> TWidget const * - - -ida_kernwin.sync_source_t.is_register(): - - is_register(self) -> bool - - -ida_kernwin.sync_source_t.is_widget(): - - is_widget(self) -> bool - - -ida_kernwin.sync_sources(): - - sync_sources(what, with, sync) -> bool - - - [Un]synchronize sources - - @param what (C++: const sync_source_t &) - @param with (C++: const sync_source_t &) - @param sync (C++: bool) - @return: success - - -ida_kernwin.take_database_snapshot(): - - take_database_snapshot(ss) -> PyObject * - - - Take a database snapshot ( 'ui_take_database_snapshot' ). - - @param ss: in/out parameter. in: description, flags out: filename, - id (C++: snapshot_t *) - @return: success - - -class ida_kernwin.textctrl_info_t(): - - Class representing textctrl_info_t - - -ida_kernwin.textctrl_info_t._free(): - - Explicitly delete the link (only if not static) - - -ida_kernwin.textctrl_info_t.assign(): - - Copies the contents of 'other' to 'self' - - -ida_kernwin.textctrl_info_t.copy(): - - Returns a new copy of this class - - -ida_kernwin.textctrl_info_t.flags: - - Returns the flags value - - -ida_kernwin.textctrl_info_t.tabsize: - - Returns the tabsize value - - -ida_kernwin.textctrl_info_t.text: - - Sets the text value - - -ida_kernwin.textctrl_info_t.value: - - Sets the text value - - -ida_kernwin.textctrl_info_t_assign(): - - textctrl_info_t_assign(self, other) -> bool - - -ida_kernwin.textctrl_info_t_create(): - - textctrl_info_t_create() -> PyObject * - - -ida_kernwin.textctrl_info_t_destroy(): - - textctrl_info_t_destroy(py_obj) -> bool - - -ida_kernwin.textctrl_info_t_get_clink(): - - textctrl_info_t_get_clink(self) -> textctrl_info_t * - - -ida_kernwin.textctrl_info_t_get_clink_ptr(): - - textctrl_info_t_get_clink_ptr(self) -> PyObject * - - -ida_kernwin.textctrl_info_t_get_flags(): - - textctrl_info_t_get_flags(self) -> unsigned int - - -ida_kernwin.textctrl_info_t_get_tabsize(): - - textctrl_info_t_get_tabsize(self) -> unsigned int - - -ida_kernwin.textctrl_info_t_get_text(): - - textctrl_info_t_get_text(self) -> char const * - - -ida_kernwin.textctrl_info_t_set_flags(): - - textctrl_info_t_set_flags(self, flags) -> bool - - -ida_kernwin.textctrl_info_t_set_tabsize(): - - textctrl_info_t_set_tabsize(self, tabsize) -> bool - - -ida_kernwin.textctrl_info_t_set_text(): - - textctrl_info_t_set_text(self, s) -> bool - - -class ida_kernwin.twinpos_t(): - - Proxy of C++ twinpos_t class - - -ida_kernwin.twinpos_t.at: - twinpos_t_at_get(self) -> place_t - -ida_kernwin.twinpos_t.x: - twinpos_t_x_get(self) -> int - -ida_kernwin.ui_load_new_file(): - - ui_load_new_file(temp_file, filename, pli, neflags, ploaders) -> bool - - - Display a load file dialog and load file ( 'ui_load_file' ). - - @param temp_file: name of the file with the extracted archive member. - (C++: qstring *) - @param filename: the name of input file as is, library or archive name - (C++: qstring *) - @param pli: loader input source, may be changed to point to temp_file - (C++: linput_t **) - @param neflags: combination of NEF_... bits (see Load file flags ) - (C++: ushort) - @param ploaders: list of loaders which accept file, may be changed for - loaders of temp_file (C++: load_info_t **) - - -class ida_kernwin.ui_requests_t(): - - Proxy of C++ ui_requests_t class - - -ida_kernwin.ui_run_debugger(): - - ui_run_debugger(dbgopts, exename, argc, argv) -> bool - - - Load a debugger plugin and run the specified program ( 'ui_run_dbg' ). - - @param dbgopts: value of the -r command line switch (C++: const char - *) - @param exename: name of the file to run (C++: const char *) - @param argc: number of arguments for the executable (C++: int) - @param argv: argument vector (C++: const char *const *) - @return: success - - -ida_kernwin.unmark_selection(): - - unmark_selection() - - - Unmark selection ( 'ui_unmarksel' ) - - -ida_kernwin.unregister_action(): - - unregister_action(name) -> bool - - - Delete a previously-registered action ( 'ui_unregister_action' ). - - @param name: name of action (C++: const char *) - @return: success - - -ida_kernwin.unregister_timer(): - - unregister_timer(py_timerctx) -> PyObject * - - - Unregister a timer - - @param timer_obj: a timer object previously returned by a register_timer() - @return: Boolean - @note: After the timer has been deleted, the timer_obj will become invalid. - - -ida_kernwin.update_action_checkable(): - - update_action_checkable(name, checkable) -> bool - - - Update an action's checkability ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param checkable: new checkability (C++: bool) - @return: success - - -ida_kernwin.update_action_checked(): - - update_action_checked(name, checked) -> bool - - - Update an action's checked state ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param checked: new checked state (C++: bool) - @return: success - - -ida_kernwin.update_action_icon(): - - update_action_icon(name, icon) -> bool - - - Update an action's icon ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param icon: new icon id (C++: int) - @return: success - - -ida_kernwin.update_action_label(): - - update_action_label(name, label) -> bool - - - Update an action's label ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param label: new label (C++: const char *) - @return: success - - -ida_kernwin.update_action_shortcut(): - - update_action_shortcut(name, shortcut) -> bool - - - Update an action's shortcut ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param shortcut: new shortcut (C++: const char *) - @return: success - - -ida_kernwin.update_action_state(): - - update_action_state(name, state) -> bool - - - Update an action's state ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param state: new state (C++: action_state_t) - @return: success - - -ida_kernwin.update_action_tooltip(): - - update_action_tooltip(name, tooltip) -> bool - - - Update an action's tooltip ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param tooltip: new tooltip (C++: const char *) - @return: success - - -ida_kernwin.update_action_visibility(): - - update_action_visibility(name, visible) -> bool - - - Update an action's visibility ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param visible: new visibility (C++: bool) - @return: success - - -ida_kernwin.user_cancelled(): - - user_cancelled() -> bool - - - Test the ctrl-break flag ( 'ui_test_cancelled' ). - - -class ida_kernwin.view_mouse_event_location_t(): - - Proxy of C++ view_mouse_event_location_t class - - -ida_kernwin.view_mouse_event_location_t.ea: - view_mouse_event_location_t_ea_get(self) -> ea_t - -ida_kernwin.view_mouse_event_location_t.item: - view_mouse_event_location_t_item_get(self) -> selection_item_t const * - -class ida_kernwin.view_mouse_event_t(): - - Proxy of C++ view_mouse_event_t class - - -ida_kernwin.view_mouse_event_t.button: - view_mouse_event_t_button_get(self) -> vme_button_t - -ida_kernwin.view_mouse_event_t.location: - view_mouse_event_t_location_get(self) -> view_mouse_event_location_t - -ida_kernwin.view_mouse_event_t.renderer_pos: - view_mouse_event_t_renderer_pos_get(self) -> renderer_pos_info_t - -ida_kernwin.view_mouse_event_t.rtype: - view_mouse_event_t_rtype_get(self) -> tcc_renderer_type_t - -ida_kernwin.view_mouse_event_t.state: - view_mouse_event_t_state_get(self) -> view_event_state_t - -ida_kernwin.view_mouse_event_t.x: - view_mouse_event_t_x_get(self) -> uint32 - -ida_kernwin.view_mouse_event_t.y: - view_mouse_event_t_y_get(self) -> uint32 - -ida_kernwin.warning(): - - warning(format) - - - Display a message in a message box - - @param message: message to print (formatting is done in Python) - - This function can be used to debug IDAPython scripts - The user will be able to hide messages if they appear twice in a row on - the screen - - - -=== ida_kernwin EPYDOC INJECTIONS === -ida_kernwin.ACF_HAS_SELECTION -""" -there is currently a valid selection -""" - -ida_kernwin.ACF_XTRN_EA -""" -cur_ea is in 'externs' segment -""" - -ida_kernwin.ADF_NO_UNDO -""" -useful for actions that do not modify the database. - -the action does not create an undo point. -""" - -ida_kernwin.ADF_OWN_HANDLER -""" -handler is owned by the action; it'll be destroyed when the action is -unregistered. You shouldn't have to use this. -""" - -ida_kernwin.AHF_VERSION -""" -action handler version (used by 'action_handler_t::flags' ) -""" - -ida_kernwin.AHF_VERSION_MASK -""" -mask for 'action_handler_t::flags' -""" - -ida_kernwin.ASKBTN_BTN1 -""" -First (Yes) button. -""" - -ida_kernwin.ASKBTN_BTN2 -""" -Second (No) button. -""" - -ida_kernwin.ASKBTN_BTN3 -""" -Third (Cancel) button. -""" - -ida_kernwin.ASKBTN_CANCEL -""" -Cancel button. -""" - -ida_kernwin.ASKBTN_NO -""" -No button. -""" - -ida_kernwin.ASKBTN_YES -""" -Yes button. -""" - -ida_kernwin.BWN_ADDRWATCH -""" -the 'Watch List' window -""" - -ida_kernwin.BWN_BPTS -""" -breakpoints -""" - -ida_kernwin.BWN_CALLS -""" -function calls -""" - -ida_kernwin.BWN_CALLS_CALLEES -""" -function calls, callees -""" - -ida_kernwin.BWN_CALLS_CALLERS -""" -function calls, callers -""" - -ida_kernwin.BWN_CALL_STACK -""" -call stack -""" - -ida_kernwin.BWN_CHOOSER -""" -a non-builtin chooser -""" - -ida_kernwin.BWN_CLI -""" -the command-line, in the output window -""" - -ida_kernwin.BWN_CMDPALCSR -""" -the command palette chooser (Qt version only) -""" - -ida_kernwin.BWN_CMDPALWIN -""" -the command palette window (Qt version only) -""" - -ida_kernwin.BWN_CPUREGS -""" -one of the 'General registers', 'FPU register', ... debugger windows -""" - -ida_kernwin.BWN_CUSTVIEW -""" -custom viewers -""" - -ida_kernwin.BWN_CV_LINE_INFOS -""" -custom viewers' lineinfo widget -""" - -ida_kernwin.BWN_DISASM -""" -disassembly views -""" - -ida_kernwin.BWN_DISASMS -""" -Alias. Some BWN_* were confusing, and thus have been renamed. This is -to ensure bw-compat. -""" - -ida_kernwin.BWN_DISASM_ARROWS -""" -disassembly arrows widget -""" - -ida_kernwin.BWN_DUMP -""" -hex dumps -""" - -ida_kernwin.BWN_DUMPS -""" -Alias. Some BWN_* were confusing, and thus have been renamed. This is -to ensure bw-compat. -""" - -ida_kernwin.BWN_ENUMS -""" -enumerations -""" - -ida_kernwin.BWN_EXPORTS -""" -exports -""" - -ida_kernwin.BWN_FRAME -""" -function frame -""" - -ida_kernwin.BWN_FUNCS -""" -functions -""" - -ida_kernwin.BWN_IMPORTS -""" -imports -""" - -ida_kernwin.BWN_LOCALS -""" -the 'locals' debugger window -""" - -ida_kernwin.BWN_LOCTYPS -""" -local types -""" - -ida_kernwin.BWN_MDVIEWCSR -""" -lumina metadata view chooser -""" - -ida_kernwin.BWN_MODULES -""" -modules -""" - -ida_kernwin.BWN_NAMES -""" -names -""" - -ida_kernwin.BWN_NAVBAND -""" -navigation band -""" - -ida_kernwin.BWN_NOTEPAD -""" -notepad -""" - -ida_kernwin.BWN_OUTPUT -""" -the text area, in the output window -""" - -ida_kernwin.BWN_PROBS -""" -problems -""" - -ida_kernwin.BWN_PSEUDOCODE -""" -hexrays decompiler views -""" - -ida_kernwin.BWN_SEARCH -""" -search results -""" - -ida_kernwin.BWN_SEARCHS -""" -Alias. Some BWN_* were confusing, and thus have been renamed. This is -to ensure bw-compat. -""" - -ida_kernwin.BWN_SEGREGS -""" -segment registers -""" - -ida_kernwin.BWN_SEGS -""" -segments -""" - -ida_kernwin.BWN_SELS -""" -selectors -""" - -ida_kernwin.BWN_SHORTCUTCSR -""" -the shortcuts chooser (Qt version only) -""" - -ida_kernwin.BWN_SHORTCUTWIN -""" -the shortcuts window (Qt version only) -""" - -ida_kernwin.BWN_SIGNS -""" -signatures -""" - -ida_kernwin.BWN_SNIPPETS -""" -the 'Execute script' window -""" - -ida_kernwin.BWN_SO_OFFSETS -""" -the 'Structure offsets' dialog's offset panel -""" - -ida_kernwin.BWN_SO_STRUCTS -""" -the 'Structure offsets' dialog's 'Structures and Unions' panel -""" - -ida_kernwin.BWN_SRCPTHMAP_CSR -""" -"Source paths..."'s path mappings chooser -""" - -ida_kernwin.BWN_SRCPTHUND_CSR -""" -"Source paths..."'s undesired paths chooser -""" - -ida_kernwin.BWN_STACK -""" -Alias. Some BWN_* were confusing, and thus have been renamed. This is -to ensure bw-compat. -""" - -ida_kernwin.BWN_STKVIEW -""" -the 'Stack view' debugger window -""" - -ida_kernwin.BWN_STRINGS -""" -strings -""" - -ida_kernwin.BWN_STRUCTS -""" -structures -""" - -ida_kernwin.BWN_THREADS -""" -threads -""" - -ida_kernwin.BWN_TILS -""" -type libraries -""" - -ida_kernwin.BWN_TRACE -""" -trace view -""" - -ida_kernwin.BWN_UNDOHIST -""" -Undo history. -""" - -ida_kernwin.BWN_UNKNOWN -""" -unknown window -""" - -ida_kernwin.BWN_WATCH -""" -the 'watches' debugger window -""" - -ida_kernwin.BWN_XREFS -""" -xrefs -""" - -ida_kernwin.CHCOL_DEC -""" -decimal number -""" - -ida_kernwin.CHCOL_DEFHIDDEN -""" -column should be hidden by default -""" - -ida_kernwin.CHCOL_EA -""" -address -""" - -ida_kernwin.CHCOL_FNAME -""" -function name -""" - -ida_kernwin.CHCOL_FORMAT -""" -column format mask -""" - -ida_kernwin.CHCOL_HEX -""" -hexadecimal number -""" - -ida_kernwin.CHCOL_PATH -""" -file path -""" - -ida_kernwin.CHCOL_PLAIN -""" -plain string -""" - -ida_kernwin.CHITEM_BOLD -""" -display the item in bold -""" - -ida_kernwin.CHITEM_GRAY -""" -gray out the item -""" - -ida_kernwin.CHITEM_ITALIC -""" -display the item in italic -""" - -ida_kernwin.CHITEM_STRIKE -""" -strikeout the item -""" - -ida_kernwin.CHITEM_UNDER -""" -underline the item -""" - -ida_kernwin.CHOOSER_MENU_EDIT -""" -Values of the 'menu_index' parameter. - -Obsolete. Please don't use -""" - -ida_kernwin.CHOOSER_MENU_JUMP -""" -Obsolete. Please don't use. -""" - -ida_kernwin.CHOOSER_MENU_SEARCH -""" -Obsolete. Please don't use. -""" - -ida_kernwin.CHOOSER_MULTI_SELECTION -""" -enable for multiple selections. A callback of type -'chooser_multi_cb_t' will be called for all selected items. -""" - -ida_kernwin.CHOOSER_NO_SELECTION -""" -Flags. - -enable even if there's no selected item. 'n' will be NO_SELECTION for -a callback. -""" - -ida_kernwin.CHOOSER_POPUP_MENU -""" -Add command to the popup menu. -""" - -ida_kernwin.CH_ATTRS -""" -generate ui_get_chooser_item_attrs (gui only) -""" - -ida_kernwin.CH_BUILTIN_MASK -""" -Mask for builtin chooser numbers. Plugins should not use them. -""" - -ida_kernwin.CH_CAN_DEL -""" -allow to delete existing item(s) -""" - -ida_kernwin.CH_CAN_EDIT -""" -allow to edit existing item(s) -""" - -ida_kernwin.CH_CAN_INS -""" -allow to insert new items -""" - -ida_kernwin.CH_CAN_REFRESH -""" -allow to refresh chooser -""" - -ida_kernwin.CH_FORCE_DEFAULT -""" -if a non-modal chooser was already open, change selection to the -default one -""" - -ida_kernwin.CH_KEEP -""" -The chooser instance's lifecycle is not tied to the lifecycle of the -widget showing its contents. Closing the widget will not destroy the -chooser structure. This allows for, e.g., static global chooser -instances that don't need to be allocated on the heap. Also stack- -allocated chooser instances must set this bit. -""" - -ida_kernwin.CH_MODAL -""" -Modal chooser. -""" - -ida_kernwin.CH_MULTI -""" -Obsolete. - -The chooser will allow multi-selection (only for GUI choosers). This -bit is set when using the 'chooser_multi_t' structure. -""" - -ida_kernwin.CH_NOBTNS -""" -do not display ok/cancel/help/search buttons. Meaningful only for gui -modal windows because non-modal windows do not have any buttons -anyway. Text mode does not have them neither. -""" - -ida_kernwin.CH_NOIDB -""" -use the chooser before opening the database -""" - -ida_kernwin.CH_NO_STATUS_BAR -""" -don't show a status bar -""" - -ida_kernwin.CH_QFLT -""" -open with quick filter enabled and focused -""" - -ida_kernwin.CH_QFTYP_DEFAULT -""" -set quick filtering type to the possible existing default for this -chooser -""" - -ida_kernwin.CH_QFTYP_FUZZY -""" -fuzzy search quick filter type -""" - -ida_kernwin.CH_QFTYP_NORMAL -""" -normal (i.e., lexicographical) quick filter type -""" - -ida_kernwin.CH_QFTYP_REGEX -""" -regex quick filter type -""" - -ida_kernwin.CH_QFTYP_WHOLE_WORDS -""" -whole words quick filter type -""" - -ida_kernwin.CH_RESTORE -""" -restore floating position if present (equivalent of WOPN_RESTORE) (GUI -version only) -""" - -ida_kernwin.CLNL_FINDCMT -""" -Search for the comment symbol everywhere in the line, not only at the -beginning. -""" - -ida_kernwin.CLNL_LTRIM -""" -Remove leading space characters. -""" - -ida_kernwin.CLNL_RTRIM -""" -Remove trailing space characters. -""" - -ida_kernwin.CREATETB_ADV -""" -toolbar is for 'advanced mode' only -""" - -ida_kernwin.DP_BEFORE -""" -used with 'DP_INSIDE' . - -place src_form before dst_form in the tab bar instead of after -""" - -ida_kernwin.DP_BOTTOM -""" -Dock src_form below dest_form. -""" - -ida_kernwin.DP_FLOATING -""" -Make src_form floating. -""" - -ida_kernwin.DP_INSIDE -""" -Create a new tab bar with both src_form and dest_form. -""" - -ida_kernwin.DP_LEFT -""" -Dock src_form to the left of dest_form. -""" - -ida_kernwin.DP_RIGHT -""" -Dock src_form to the right of dest_form. -""" - -ida_kernwin.DP_TAB -""" -Place src_form into a tab next to dest_form, if dest_form is in a tab -bar (otherwise the same as 'DP_INSIDE' ) -""" - -ida_kernwin.DP_TOP -""" -Dock src_form above dest_form. -""" - -ida_kernwin.HIF_IDENTIFIER -""" -text is an identifier (i.e., when searching for the current highlight, -SEARCH_IDENT will be used) -""" - -ida_kernwin.HIF_LOCKED -""" -locked; clicking/moving the cursor around doesn't change the highlight -""" - -ida_kernwin.HIF_REGISTER -""" -text represents a register (aliases/subregisters will be highlit as -well) -""" - -ida_kernwin.HIST_CMD -""" -commands -""" - -ida_kernwin.HIST_CMT -""" -comments -""" - -ida_kernwin.HIST_DIR -""" -directory names (text version only) -""" - -ida_kernwin.HIST_FILE -""" -file names -""" - -ida_kernwin.HIST_IDENT -""" -names -""" - -ida_kernwin.HIST_SEG -""" -segment names -""" - -ida_kernwin.HIST_SRCH -""" -search substrings -""" - -ida_kernwin.HIST_TYPE -""" -type declarations -""" - -ida_kernwin.IWID_ADDRWATCH -""" -address watches (47) -""" - -ida_kernwin.IWID_ALL -""" -mask -""" - -ida_kernwin.IWID_BPTS -""" -breakpoints (13) -""" - -ida_kernwin.IWID_CALLS -""" -function calls (11) -""" - -ida_kernwin.IWID_CALLS_CALLEES -""" -funcalls, callees (50) -""" - -ida_kernwin.IWID_CALLS_CALLERS -""" -funcalls, callers (49) -""" - -ida_kernwin.IWID_CALL_STACK -""" -call stack (17) -""" - -ida_kernwin.IWID_CHOOSER -""" -chooser (37) -""" - -ida_kernwin.IWID_CLI -""" -input line (33) -""" - -ida_kernwin.IWID_CMDPALCSR -""" -command palette (43) -""" - -ida_kernwin.IWID_CMDPALWIN -""" -command palette (44) -""" - -ida_kernwin.IWID_CPUREGS -""" -registers (40) -""" - -ida_kernwin.IWID_CUSTVIEW -""" -custom viewers (46) -""" - -ida_kernwin.IWID_CV_LINE_INFOS -""" -lineinfo widget (53) -""" - -ida_kernwin.IWID_DISASM -""" -disassembly views (29) -""" - -ida_kernwin.IWID_DISASM_ARROWS -""" -arrows widget (52) -""" - -ida_kernwin.IWID_DUMP -""" -hex dumps (30) -""" - -ida_kernwin.IWID_ENUMS -""" -enumerations (27) -""" - -ida_kernwin.IWID_EXPORTS -""" -exports (0) -""" - -ida_kernwin.IWID_FRAME -""" -function frame (25) -""" - -ida_kernwin.IWID_FUNCS -""" -functions (3) -""" - -ida_kernwin.IWID_IMPORTS -""" -imports (1) -""" - -ida_kernwin.IWID_LOCALS -""" -locals (35) -""" - -ida_kernwin.IWID_LOCTYPS -""" -local types (10) -""" - -ida_kernwin.IWID_MDVIEWCSR -""" -lumina md view (51) -""" - -ida_kernwin.IWID_MODULES -""" -modules (15) -""" - -ida_kernwin.IWID_NAMES -""" -names (2) -""" - -ida_kernwin.IWID_NAVBAND -""" -navigation band (26) -""" - -ida_kernwin.IWID_NOTEPAD -""" -notepad (31) -""" - -ida_kernwin.IWID_OUTPUT -""" -output (32) -""" - -ida_kernwin.IWID_PROBS -""" -problems (12) -""" - -ida_kernwin.IWID_PSEUDOCODE -""" -decompiler (48) -""" - -ida_kernwin.IWID_SEARCH -""" -search results (19) -""" - -ida_kernwin.IWID_SEGREGS -""" -segment registers (6) -""" - -ida_kernwin.IWID_SEGS -""" -segments (5) -""" - -ida_kernwin.IWID_SELS -""" -selectors (7) -""" - -ida_kernwin.IWID_SHORTCUTCSR -""" -shortcuts chooser (38) -""" - -ida_kernwin.IWID_SHORTCUTWIN -""" -shortcuts window (39) -""" - -ida_kernwin.IWID_SIGNS -""" -signatures (8) -""" - -ida_kernwin.IWID_SNIPPETS -""" -snippets (45) -""" - -ida_kernwin.IWID_SO_OFFSETS -""" -stroff (42) -""" - -ida_kernwin.IWID_SO_STRUCTS -""" -stroff (41) -""" - -ida_kernwin.IWID_SRCPTHMAP_CSR -""" -mappings chooser (54) -""" - -ida_kernwin.IWID_SRCPTHUND_CSR -""" -undesired chooser (55) -""" - -ida_kernwin.IWID_STACK -""" -Alias. Some IWID_* were confusing, and thus have been renamed. This is -to ensure bw-compat. -""" - -ida_kernwin.IWID_STKVIEW -""" -stack view (36) -""" - -ida_kernwin.IWID_STRINGS -""" -strings (4) -""" - -ida_kernwin.IWID_STRUCTS -""" -structures (28) -""" - -ida_kernwin.IWID_THREADS -""" -threads (14) -""" - -ida_kernwin.IWID_TILS -""" -type libraries (9) -""" - -ida_kernwin.IWID_TRACE -""" -trace view (16) -""" - -ida_kernwin.IWID_UNDOHIST -""" -Undo history (56) -""" - -ida_kernwin.IWID_WATCH -""" -watches (34) -""" - -ida_kernwin.IWID_XREFS -""" -xrefs (18) -""" - -ida_kernwin.MFF_FAST -""" -Execute code as soon as possible. this mode is ok for calling ui -related functions that do not query the database. -""" - -ida_kernwin.MFF_NOWAIT -""" -Do not wait for the request to be executed. the caller should ensure -that the request is not destroyed until the execution completes. if -not, the request will be ignored. 'execute_sync()' returns the request -id in this case. it can be used in 'cancel_exec_request()' . This flag -can be used to delay the code execution until the next UI loop run -even from the main thread. -""" - -ida_kernwin.MFF_READ -""" -Execute code only when ida is idle and it is safe to query the -database. this mode is recommended only for code that does not modify -the database. (nb: ida may be in the middle of executing another user -request, for example it may be waiting for him to enter values into a -modal dialog box) -""" - -ida_kernwin.MFF_WRITE -""" -Execute code only when ida is idle and it is safe to modify the -database. in particular, this flag will suspend execution if there is -a modal dialog box on the screen this mode can be used to call any ida -api function 'MFF_WRITE' implies 'MFF_READ' -""" - -ida_kernwin.SETMENU_APP -""" -add menu item after the specified path -""" - -ida_kernwin.SETMENU_FIRST -""" -add item to the beginning of menu -""" - -ida_kernwin.SETMENU_INS -""" -add menu item before the specified path (default) -""" - -ida_kernwin.UIJMP_ACTIVATE -""" -activate the new window -""" - -ida_kernwin.UIJMP_DONTPUSH -""" -in the navigation history - -do not remember the current address -""" - -ida_kernwin.UIJMP_IDAVIEW -""" -jump in idaview (by default any eaview is good) -""" - -ida_kernwin.VES_SHIFT -""" -state & 1 => Shift is pressedstate & 2 => Alt is pressedstate & 4 => -Ctrl is pressedstate & 8 => Mouse left button is pressedstate & 16 => -Mouse right button is pressedstate & 32 => Mouse middle button is -pressedstate & 128 => Meta is pressed (OSX only) -""" -=== ida_kernwin EPYDOC INJECTIONS END === -ida_lines.COLSTR(): - - Utility function to create a colored line - @param str: The string - @param tag: Color tag constant. One of SCOLOR_XXXX - - -ida_lines.add_extra_cmt(): - - add_extra_cmt(ea, isprev, format) -> bool - - - Add anterior/posterior comment line(s). - - @param ea: linear address (C++: ea_t) - @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) - @param format: printf() style format string. may contain - to denote - new lines. The resulting string should not contain - comment characters (;), the kernel will add them - automatically. (C++: const char *) - @return: true if success - - -ida_lines.add_extra_line(): - - add_extra_line(ea, isprev, format) -> bool - - - Add anterior/posterior non-comment line(s). - - @param ea: linear address (C++: ea_t) - @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) - @param format: printf() style format string. may contain - to denote - new lines. (C++: const char *) - @return: true if success - - -ida_lines.add_pgm_cmt(): - - add_pgm_cmt(format) -> bool - - - Add anterior comment line(s) at the start of program. - - @param format: printf() style format string. may contain - to denote - new lines. The resulting string should not contain - comment characters (;), the kernel will add them - automatically. (C++: const char *) - @return: true if success - - -ida_lines.add_sourcefile(): - - add_sourcefile(ea1, ea2, filename) -> bool - - - Mark a range of address as belonging to a source file. An address - range may belong only to one source file. A source file may be - represented by several address ranges. - - @param ea1: linear address of start of the address range (C++: ea_t) - @param ea2: linear address of end of the address range (excluded) - (C++: ea_t) - @param filename: name of source file. (C++: const char *) - @return: success - - -class ida_lines.bgcolors_t(): - - Proxy of C++ bgcolors_t class - - -ida_lines.bgcolors_t.epilog_color: - bgcolors_t_epilog_color_get(self) -> bgcolor_t - -ida_lines.bgcolors_t.prolog_color: - bgcolors_t_prolog_color_get(self) -> bgcolor_t - -ida_lines.bgcolors_t.switch_color: - bgcolors_t_switch_color_get(self) -> bgcolor_t - -ida_lines.calc_bg_color(): - - calc_bg_color(ea) -> bgcolor_t - - - Get background color for line at 'ea' - - @param ea (C++: ea_t) - @return: RGB color - - -ida_lines.calc_prefix_color(): - - calc_prefix_color(ea) -> color_t - - - Get prefix color for line at 'ea' - - @param ea (C++: ea_t) - @return: Line prefix colors - - -ida_lines.create_encoding_helper(): - - create_encoding_helper(encidx=-1, nr=nr_once) -> encoder_t * - - -ida_lines.del_extra_cmt(): - - del_extra_cmt(ea, what) - - -ida_lines.del_sourcefile(): - - del_sourcefile(ea) -> bool - - - Delete information about the source file. - - @param ea: linear address (C++: ea_t) - @return: success - - -ida_lines.delete_extra_cmts(): - - delete_extra_cmts(ea, what) - - -ida_lines.generate_disasm_line(): - - generate_disasm_line(ea, flags=0) -> bool - - -ida_lines.generate_disassembly(): - - generate_disassembly(ea, max_lines, as_stack, notags) -> PyObject * - - - Generate disassembly lines (many lines) and put them into a buffer - - @param ea: address to generate disassembly for - @param max_lines: how many lines max to generate - @param as_stack: Display undefined items as 2/4/8 bytes - @return: - - None on failure - - tuple(most_important_line_number, tuple(lines)) : Returns a tuple containing - the most important line number and a tuple of generated lines - - -ida_lines.get_extra_cmt(): - - get_extra_cmt(ea, what) -> ssize_t - - -ida_lines.get_first_free_extra_cmtidx(): - - get_first_free_extra_cmtidx(ea, start) -> int - - -ida_lines.get_sourcefile(): - - get_sourcefile(ea, bounds=None) -> char const * - - - Get name of source file occupying the given address. - - @param ea: linear address (C++: ea_t) - @param bounds: pointer to the output buffer with the address range for - the current file. May be NULL. (C++: range_t *) - @return: NULL if source file information is not found, otherwise - returns pointer to file name - - -ida_lines.requires_color_esc(): - - Checks if the given character requires escaping - @param c: character (string of one char) - @return: Boolean - - - Is the given char a color escape character? - - -ida_lines.set_user_defined_prefix(): - - set_user_defined_prefix(width, pycb) -> PyObject * - - - User-defined line-prefixes are displayed just after the autogenerated - line prefixes. In order to use them, the plugin should call the - following function to specify its width and contents. - @param width: the width of the user-defined prefix - @param callback: a get_user_defined_prefix callback to get the contents of the prefix. - Its arguments: - ea - linear address - lnnum - line number - indent - indent of the line contents (-1 means the default instruction) - indent and is used for instruction itself. see explanations for printf_line() - line - the line to be generated. the line usually contains color tags this argument - can be examined to decide whether to generated the prefix - It returns a buffer of size < bufsize - - In order to remove the callback before unloading the plugin, specify the width = 0 or the callback = None - - -ida_lines.tag_addr(): - - tag_addr(ea) -> PyObject * - - - Insert an address mark into a string. - - @param ea: address to include (C++: ea_t) - - -ida_lines.tag_advance(): - - tag_advance(line, cnt) -> int - - - Move pointer to a 'line' to 'cnt' positions right. Take into account - escape sequences. - - @param line: pointer to string (C++: const char *) - @param cnt: number of positions to move right (C++: int) - @return: moved pointer - - -ida_lines.tag_remove(): - - tag_remove(nonnul_instr) -> PyObject * - - - Remove color escape sequences from a string - @param colstr: the colored string with embedded tags - @return: a new string w/o the tags - - -ida_lines.tag_skipcode(): - - tag_skipcode(line) -> int - - - Skip one color code. This function should be used if you are - interested in color codes and want to analyze all of them. Otherwise - 'tag_skipcodes()' function is better since it will skip all colors at - once. This function will skip the current color code if there is one. - If the current symbol is not a color code, it will return the input. - - @param line (C++: const char *) - @return: moved pointer - - -ida_lines.tag_skipcodes(): - - tag_skipcodes(line) -> int - - - Move the pointer past all color codes. - - @param line: can't be NULL (C++: const char *) - @return: moved pointer, can't be NULL - - -ida_lines.tag_strlen(): - - tag_strlen(line) -> ssize_t - - - Calculate length of a colored string This function computes the length - in unicode codepoints of a line - - @param line (C++: const char *) - @return: the number of codepoints in the line, or -1 on error - - -ida_lines.update_extra_cmt(): - - update_extra_cmt(ea, what, str) - - - -=== ida_lines EPYDOC INJECTIONS === -ida_lines.COLOR_ADDR_SIZE -""" -Size of a tagged address (see 'COLOR_ADDR' ) -""" - -ida_lines.COLOR_BG_MAX -""" -Max color number. -""" - -ida_lines.COLOR_CODE -""" -Single instruction. -""" - -ida_lines.COLOR_CURITEM -""" -Current item. -""" - -ida_lines.COLOR_CURLINE -""" -Current line. -""" - -ida_lines.COLOR_DATA -""" -Data bytes. -""" - -ida_lines.COLOR_DEFAULT -""" -Default. -""" - -ida_lines.COLOR_ESC -""" -Escape character (Quote next character). This is needed to output '\\1' -and '\\2' characters. -""" - -ida_lines.COLOR_EXTERN -""" -External name definition segment. -""" - -ida_lines.COLOR_HIDLINE -""" -Hidden line. -""" - -ida_lines.COLOR_INV -""" -Escape character (Inverse foreground and background colors). This -escape character has no corresponding 'COLOR_OFF' . Its action -continues until the next 'COLOR_INV' or end of line. -""" - -ida_lines.COLOR_LIBFUNC -""" -Library function. -""" - -ida_lines.COLOR_LUMFUNC -""" -Lumina function. -""" - -ida_lines.COLOR_OFF -""" -Followed by a color code ( 'color_t' ). - -Escape character (OFF). -""" - -ida_lines.COLOR_ON -""" -Followed by a color code ( 'color_t' ). - -Escape character (ON). -""" - -ida_lines.COLOR_REGFUNC -""" -Regular function. -""" - -ida_lines.COLOR_SELECTED -""" -Selected. -""" - -ida_lines.COLOR_UNKNOWN -""" -Unexplored byte. -""" - -ida_lines.SCOLOR_ADDR -""" -Hidden address mark. -""" - -ida_lines.SCOLOR_ALTOP -""" -Alternative operand. -""" - -ida_lines.SCOLOR_ASMDIR -""" -Assembler directive. -""" - -ida_lines.SCOLOR_AUTOCMT -""" -Automatic comment. -""" - -ida_lines.SCOLOR_BINPREF -""" -Binary line prefix bytes. -""" - -ida_lines.SCOLOR_CHAR -""" -Char constant in instruction. -""" - -ida_lines.SCOLOR_CNAME -""" -Regular code name. -""" - -ida_lines.SCOLOR_CODNAME -""" -Dummy code name. -""" - -ida_lines.SCOLOR_COLLAPSED -""" -Collapsed line. -""" - -ida_lines.SCOLOR_CREF -""" -Code reference. -""" - -ida_lines.SCOLOR_CREFTAIL -""" -Code reference to tail byte. -""" - -ida_lines.SCOLOR_DATNAME -""" -Dummy Data Name. -""" - -ida_lines.SCOLOR_DCHAR -""" -Char constant in data directive. -""" - -ida_lines.SCOLOR_DEFAULT -""" -Default. -""" - -ida_lines.SCOLOR_DEMNAME -""" -Demangled Name. -""" - -ida_lines.SCOLOR_DNAME -""" -Regular Data Name. -""" - -ida_lines.SCOLOR_DNUM -""" -Numeric constant in data directive. -""" - -ida_lines.SCOLOR_DREF -""" -Data reference. -""" - -ida_lines.SCOLOR_DREFTAIL -""" -Data reference to tail byte. -""" - -ida_lines.SCOLOR_DSTR -""" -String constant in data directive. -""" - -ida_lines.SCOLOR_ERROR -""" -Error or problem. -""" - -ida_lines.SCOLOR_ESC -""" -Escape character (Quote next character) -""" - -ida_lines.SCOLOR_EXTRA -""" -Extra line. -""" - -ida_lines.SCOLOR_HIDNAME -""" -Hidden name. -""" - -ida_lines.SCOLOR_IMPNAME -""" -Imported name. -""" - -ida_lines.SCOLOR_INSN -""" -Instruction. -""" - -ida_lines.SCOLOR_INV -""" -Escape character (Inverse colors) -""" - -ida_lines.SCOLOR_KEYWORD -""" -Keywords. -""" - -ida_lines.SCOLOR_LIBNAME -""" -Library function name. -""" - -ida_lines.SCOLOR_LOCNAME -""" -Local variable name. -""" - -ida_lines.SCOLOR_MACRO -""" -Macro. -""" - -ida_lines.SCOLOR_NUMBER -""" -Numeric constant in instruction. -""" - -ida_lines.SCOLOR_OFF -""" -Escape character (OFF) -""" - -ida_lines.SCOLOR_ON -""" -Escape character (ON) -""" - -ida_lines.SCOLOR_PREFIX -""" -Line prefix. -""" - -ida_lines.SCOLOR_REG -""" -Register name. -""" - -ida_lines.SCOLOR_REGCMT -""" -Regular comment. -""" - -ida_lines.SCOLOR_RPTCMT -""" -Repeatable comment (defined not here) -""" - -ida_lines.SCOLOR_SEGNAME -""" -Segment name. -""" - -ida_lines.SCOLOR_STRING -""" -String constant in instruction. -""" - -ida_lines.SCOLOR_SYMBOL -""" -Punctuation. -""" - -ida_lines.SCOLOR_UNAME -""" -Regular unknown name. -""" - -ida_lines.SCOLOR_UNKNAME -""" -Dummy unknown name. -""" - -ida_lines.SCOLOR_VOIDOP -""" -Void operand. -""" -=== ida_lines EPYDOC INJECTIONS END === -ida_loader.base2file(): - - base2file(fp, pos, ea1, ea2) -> int - - - Unload database to a binary file. This function works for wide byte - processors too. - - @param fp: pointer to file (C++: FILE *) - @param pos: position in the file (C++: qoff64_t) - @param ea1: range of source linear addresses (C++: ea_t) - @param ea2: range of source linear addresses (C++: ea_t) - @return: 1-ok(always), write error leads to immediate exit - - -ida_loader.build_snapshot_tree(): - - build_snapshot_tree(root) -> bool - - - Build the snapshot tree. - - @param root: snapshot root that will contain the snapshot tree - elements. (C++: snapshot_t *) - @return: success - - -ida_loader.clr_database_flag(): - - clr_database_flag(dbfl) - - -ida_loader.extract_module_from_archive(): - - extract_module_from_archive(fname, is_remote=False) -> PyObject * - - - Extract a module for an archive file. Parse an archive file, show the - list of modules to the user, allow him to select a module, extract the - selected module to a file (if the extract module is an archive, repeat - the process). This function can handle ZIP, AR, AIXAR, OMFLIB files. - The temporary file will be automatically deleted by IDA at the end. - - @param is_remote: is the input file remote? (C++: bool) - - -ida_loader.file2base(): - - file2base(li, pos, ea1, ea2, patchable) -> int - - - Load portion of file into the database. This function will include - (ea1..ea2) into the addressing space of the program (make it enabled) - - @param li: pointer of input source (C++: linput_t *) - @param pos: position in the file (C++: qoff64_t) - @param ea1: range of destination linear addresses (C++: ea_t) - @param ea2: range of destination linear addresses (C++: ea_t) - @param patchable: should the kernel remember correspondence of file - offsets to linear addresses. (C++: int) - - -ida_loader.find_plugin(): - - find_plugin(name, load_if_needed=False) -> plugin_t * - - - Find a user-defined plugin and optionally load it. - - @param name: short plugin name without path and extension, or absolute - path to the file name (C++: const char *) - @param load_if_needed: if the plugin is not present in the memory, try - to load it (C++: bool) - @return: pointer to plugin description block - - -ida_loader.flush_buffers(): - - flush_buffers() -> int - - - Flush buffers to the disk. - - -ida_loader.gen_exe_file(): - - gen_exe_file(fp) -> int - - - Generate an exe file (unload the database in binary form). - - @param fp (C++: FILE *) - @return: fp the output file handle. if fp == NULL then return: 1: - can generate an executable file 0: can't generate an - executable file - - -ida_loader.gen_file(): - - gen_file(otype, fp, ea1, ea2, flags) -> int - - - Generate an output file. 'OFILE_EXE' : - - @param otype: type of output file. (C++: ofile_type_t) - @param fp: the output file handle (C++: FILE *) - @param ea1: start address. For some file types this argument is - ignored (C++: ea_t) - @param ea2: end address. For some file types this argument is ignored - as usual in ida, the end address of the range is not - included (C++: ea_t) - @param flags: Generate file flags (C++: int) - @return: number of the generated lines. -1 if an error occurred - - -ida_loader.get_basic_file_type(): - - get_basic_file_type(li) -> filetype_t - - - Get the input file type. This function can recognize libraries and zip - files. - - @param li (C++: linput_t *) - - -ida_loader.get_elf_debug_file_directory(): - - get_elf_debug_file_directory() -> char const * - - - Get the value of the ELF_DEBUG_FILE_DIRECTORY configuration directive. - - -ida_loader.get_file_type_name(): - - get_file_type_name() -> size_t - - - Get name of the current file type. The current file type is kept in - \inf{filetype}. - - @return: size of answer, this function always succeeds - - -ida_loader.get_fileregion_ea(): - - get_fileregion_ea(offset) -> ea_t - - - Get linear address which corresponds to the specified input file - offset. If can't be found, return 'BADADDR' - - @param offset (C++: qoff64_t) - - -ida_loader.get_fileregion_offset(): - - get_fileregion_offset(ea) -> qoff64_t - - - Get offset in the input file which corresponds to the given ea. If the - specified ea can't be mapped into the input file offset, return -1. - - @param ea (C++: ea_t) - - -ida_loader.get_path(): - - get_path(pt) -> char const * - - - Get the file path - - @param pt: file path type Types of the file pathes (C++: path_type_t) - @return: file path, never returns NULL - - -ida_loader.get_plugin_options(): - - get_plugin_options(plugin) -> char const * - - - Get plugin options from the command line. If the user has specified - the options in the -Oplugin_name:options format, them this function - will return the 'options' part of it The 'plugin' parameter should - denote the plugin name Returns NULL if there we no options specified - - @param plugin (C++: const char *) - - -class ida_loader.idp_desc_t(): - - Proxy of C++ idp_desc_t class - - -ida_loader.idp_desc_t.checked: - idp_desc_t_checked_get(self) -> bool - -ida_loader.idp_desc_t.family: - idp_desc_t_family_get(self) -> qstring * - -ida_loader.idp_desc_t.is_script: - idp_desc_t_is_script_get(self) -> bool - -ida_loader.idp_desc_t.mtime: - idp_desc_t_mtime_get(self) -> time_t - -ida_loader.idp_desc_t.names: - idp_desc_t_names_get(self) -> idp_names_t * - -ida_loader.idp_desc_t.path: - idp_desc_t_path_get(self) -> qstring * - -class ida_loader.idp_name_t(): - - Proxy of C++ idp_name_t class - - -ida_loader.idp_name_t.hidden: - idp_name_t_hidden_get(self) -> bool - -ida_loader.idp_name_t.lname: - idp_name_t_lname_get(self) -> qstring * - -ida_loader.idp_name_t.sname: - idp_name_t_sname_get(self) -> qstring * - -ida_loader.is_database_flag(): - - is_database_flag(dbfl) -> bool - - - Get the current database flag - - @param dbfl: flag Database flags (C++: uint32) - @return: the state of the flag (set or cleared) - - -ida_loader.is_trusted_idb(): - - is_trusted_idb() -> bool - - - Is the database considered as trusted? - - -ida_loader.load_and_run_plugin(): - - load_and_run_plugin(name, arg) -> bool - - - Load & run a plugin. - - - @param name (C++: const char *) - @param arg (C++: size_t) - - -ida_loader.load_binary_file(): - - load_binary_file(filename, li, _neflags, fileoff, basepara, binoff, nbytes) -> bool - - - Load a binary file into the database. This function usually is called - from ui. - - @param filename: the name of input file as is (if the input file is - from library, then this is the name from the library) - (C++: const char *) - @param li: loader input source (C++: linput_t *) - @param _neflags: Load file flags . For the first file, the flag - NEF_FIRST must be set. (C++: ushort) - @param fileoff: Offset in the input file (C++: qoff64_t) - @param basepara: Load address in paragraphs (C++: ea_t) - @param binoff: Load offset (load_address=(basepara<<4)+binoff) (C++: - ea_t) - @param nbytes: Number of bytes to load from the file. 0: up to the - end of the file (C++: uint64) - - -ida_loader.load_ids_module(): - - load_ids_module(fname) -> int - - - Load and apply IDS file. This function loads the specified IDS file - and applies it to the database. If the program imports functions from - a module with the same name as the name of the ids file being loaded, - then only functions from this module will be affected. Otherwise (i.e. - when the program does not import a module with this name) any function - in the program may be affected. - - @param fname: name of file to apply (C++: char *) - - -ida_loader.load_plugin(): - - load_plugin(name) -> PyObject * - - - Loads a plugin - @return: - - None if plugin could not be loaded - - An opaque object representing the loaded plugin - - -class ida_loader.loader_t(): - - Proxy of C++ loader_t class - - -ida_loader.loader_t.flags: - loader_t_flags_get(self) -> uint32 - -ida_loader.loader_t.version: - loader_t_version_get(self) -> uint32 - -ida_loader.mem2base(): - - mem2base(py_mem, ea, fpos=-1) -> int - - - Load database from the memory. - @param mem: the buffer - @param ea: start linear addresses - @param fpos: position in the input file the data is taken from. - if == -1, then no file position correspond to the data. - @return: - - Returns zero if the passed buffer was not a string - - Otherwise 1 is returned - - -class ida_loader.plugin_info_t(): - - Proxy of C++ plugin_info_t class - - -ida_loader.plugin_info_t.arg: - plugin_info_t_arg_get(self) -> size_t - -ida_loader.plugin_info_t.comment: - plugin_info_t_comment_get(self) -> char * - -ida_loader.plugin_info_t.dllmem: - plugin_info_t_dllmem_get(self) -> idadll_t * - -ida_loader.plugin_info_t.entry: - plugin_info_t_entry_get(self) -> plugin_t * - -ida_loader.plugin_info_t.flags: - plugin_info_t_flags_get(self) -> int - -ida_loader.plugin_info_t.hotkey: - plugin_info_t_hotkey_get(self) -> ushort - -ida_loader.plugin_info_t.name: - plugin_info_t_name_get(self) -> char * - -ida_loader.plugin_info_t.next: - plugin_info_t_next_get(self) -> plugin_info_t - -ida_loader.plugin_info_t.org_hotkey: - plugin_info_t_org_hotkey_get(self) -> ushort - -ida_loader.plugin_info_t.org_name: - plugin_info_t_org_name_get(self) -> char * - -ida_loader.plugin_info_t.path: - plugin_info_t_path_get(self) -> char * - -ida_loader.process_archive(): - - process_archive(temp_file, li, module_name, neflags, defmember, loader) -> int - - - Calls 'loader_t::process_archive()' For parameters and return value - description look at 'loader_t::process_archive()' . Additional - parameter: - - @param temp_file (C++: qstring *) - @param li (C++: linput_t *) - @param module_name (C++: qstring *) - @param neflags (C++: ushort *) - @param defmember (C++: const char *) - @param loader: pointer to load_info_t structure. (C++: const - load_info_t *) - - -class ida_loader.qvector_snapshotvec_t(): - - Proxy of C++ qvector<(p.snapshot_t)> class - - -ida_loader.qvector_snapshotvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_loader.qvector_snapshotvec_t.at(): - - at(self, n) -> snapshot_t - - -ida_loader.qvector_snapshotvec_t.begin(): - - begin(self) -> qvector< snapshot_t * >::iterator - begin(self) -> qvector< snapshot_t * >::const_iterator - - -ida_loader.qvector_snapshotvec_t.capacity(): - - capacity(self) -> size_t - - -ida_loader.qvector_snapshotvec_t.clear(): - - clear(self) - - -ida_loader.qvector_snapshotvec_t.empty(): - - empty(self) -> bool - - -ida_loader.qvector_snapshotvec_t.end(): - - end(self) -> qvector< snapshot_t * >::iterator - end(self) -> qvector< snapshot_t * >::const_iterator - - -ida_loader.qvector_snapshotvec_t.erase(): - - erase(self, it) -> qvector< snapshot_t * >::iterator - erase(self, first, last) -> qvector< snapshot_t * >::iterator - - -ida_loader.qvector_snapshotvec_t.extract(): - - extract(self) -> snapshot_t ** - - -ida_loader.qvector_snapshotvec_t.find(): - - find(self, x) -> qvector< snapshot_t * >::iterator - find(self, x) -> qvector< snapshot_t * >::const_iterator - - -ida_loader.qvector_snapshotvec_t.has(): - - has(self, x) -> bool - - -ida_loader.qvector_snapshotvec_t.inject(): - - inject(self, s, len) - - -ida_loader.qvector_snapshotvec_t.insert(): - - insert(self, it, x) -> qvector< snapshot_t * >::iterator - - -ida_loader.qvector_snapshotvec_t.pop_back(): - - pop_back(self) - - -ida_loader.qvector_snapshotvec_t.push_back(): - - push_back(self, x) - push_back(self) -> snapshot_t *& - - -ida_loader.qvector_snapshotvec_t.qclear(): - - qclear(self) - - -ida_loader.qvector_snapshotvec_t.reserve(): - - reserve(self, cnt) - - -ida_loader.qvector_snapshotvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_loader.qvector_snapshotvec_t.size(): - - size(self) -> size_t - - -ida_loader.qvector_snapshotvec_t.swap(): - - swap(self, r) - - -ida_loader.qvector_snapshotvec_t.truncate(): - - truncate(self) - - -ida_loader.reload_file(): - - reload_file(file, is_remote) -> int - - - Reload the input file. This function reloads the byte values from the - input file. It doesn't modify the segmentation, names, comments, etc. - - @param file: name of the input file. if file == NULL then returns: - 1: can reload the input file 0: can't reload the input - file (C++: const char *) - @param is_remote: is the file located on a remote computer with the - debugger server? (C++: bool) - - -ida_loader.run_plugin(): - - run_plugin(plg, arg) -> bool - - - Runs a plugin - @param plg: A plugin object (returned by load_plugin()) - @return: Boolean - - -ida_loader.save_database(): - - save_database(outfile, flags, root=None, attr=None) -> bool - - - Save current database using a new file name.when both root and attr - are not NULL then the snapshot attributes will be updated, otherwise - the snapshot attributes will be inherited from the current database. - - @param outfile: output database file name (C++: const char *) - @param flags: Database flags (C++: uint32) - @param root: optional: snapshot tree root. (C++: const snapshot_t *) - @param attr: optional: snapshot attributes (C++: const snapshot_t *) - @return: success - - -ida_loader.set_database_flag(): - - set_database_flag(dbfl, cnd=True) - - - Set or clear database flag - - @param dbfl: flag Database flags (C++: uint32) - @param cnd: set if true or clear flag otherwise (C++: bool) - - -ida_loader.set_path(): - - set_path(pt, path) - - - Set the file path - - @param pt: file path type Types of the file pathes (C++: path_type_t) - @param path: new file path, use NULL or empty string to clear the file - path (C++: const char *) - - -class ida_loader.snapshot_t(): - - Proxy of C++ snapshot_t class - - -ida_loader.snapshot_t.children: - snapshot_t_children_get(self) -> qvector_snapshotvec_t - -ida_loader.snapshot_t.clear(): - - clear(self) - - -ida_loader.snapshot_t.desc: - snapshot_t_desc_get(self) -> char [128] - -ida_loader.snapshot_t.filename: - snapshot_t_filename_get(self) -> char [QMAXPATH] - -ida_loader.snapshot_t.flags: - snapshot_t_flags_get(self) -> uint16 - -ida_loader.snapshot_t.id: - snapshot_t_id_get(self) -> qtime64_t - - -=== ida_loader EPYDOC INJECTIONS === -ida_loader.ACCEPT_ARCHIVE -""" -Specify that a file format is served by archive loader See -'loader_t::accept_file' -""" - -ida_loader.ACCEPT_CONTINUE -""" -Specify that the function must be called another time See -'loader_t::accept_file' -""" - -ida_loader.ACCEPT_FIRST -""" -Specify that a file format should be place first in "load file" dialog -box. See 'loader_t::accept_file' -""" - -ida_loader.DBFL_BAK -""" -create backup file (if !DBFL_KILL) -""" - -ida_loader.DBFL_COMP -""" -collect garbage -""" - -ida_loader.DBFL_KILL -""" -delete unpacked database -""" - -ida_loader.DBFL_TEMP -""" -temporary database -""" - -ida_loader.FILEREG_NOTPATCHABLE -""" -form in the file. - -the data is kept in some encoded -""" - -ida_loader.FILEREG_PATCHABLE -""" -means that the input file may be patched (i.e. no compression, no -iterated data, etc) -""" - -ida_loader.GENFLG_ASMINC -""" - 'OFILE_ASM' , 'OFILE_LST' : gen information only about types -""" - -ida_loader.GENFLG_ASMTYPE -""" - 'OFILE_ASM' , 'OFILE_LST' : gen information about types too -""" - -ida_loader.GENFLG_GENHTML -""" - 'OFILE_ASM' , 'OFILE_LST' : generate html ( 'ui_genfile_callback' -will be used) -""" - -ida_loader.GENFLG_IDCTYPE -""" - 'OFILE_IDC' : gen only information about types -""" - -ida_loader.GENFLG_MAPDMNG -""" - 'OFILE_MAP' : demangle names -""" - -ida_loader.GENFLG_MAPLOC -""" - 'OFILE_MAP' : include local names -""" - -ida_loader.GENFLG_MAPNAME -""" - 'OFILE_MAP' : include dummy names -""" - -ida_loader.GENFLG_MAPSEG -""" - 'OFILE_MAP' : generate map of segments -""" - -ida_loader.LDRF_RELOAD -""" -loader recognizes 'NEF_RELOAD' flag -""" - -ida_loader.LDRF_REQ_PROC -""" -Requires a processor to be set. if this bit is not set, load_file() -must call set_processor_type(..., SETPROC_LOADER) -""" - -ida_loader.MAX_DATABASE_DESCRIPTION -""" -Maximum database snapshot description length. -""" - -ida_loader.NEF_CODE -""" -load as a code segment - -for 'load_binary_file()' : -""" - -ida_loader.NEF_FILL -""" -Fill segment gaps. -""" - -ida_loader.NEF_FIRST -""" -into the database. - -This is the first file loaded -""" - -ida_loader.NEF_FLAT -""" -Autocreate FLAT group (PE) -""" - -ida_loader.NEF_IMPS -""" -Create import segment. -""" - -ida_loader.NEF_LALL -""" -Load all segments without questions. -""" - -ida_loader.NEF_LOPT -""" -Display additional loader options dialog. -""" - -ida_loader.NEF_MAN -""" -Manual load. -""" - -ida_loader.NEF_MINI -""" -Create mini database (do not copy segment bytes from the input file; -use only the file header metadata) -""" - -ida_loader.NEF_NAME -""" -Rename entries. -""" - -ida_loader.NEF_RELOAD -""" -reload the file at the same place: - don't create segmentsdon't create -fixup infodon't import segmentsetc load only the bytes into the base. -a loader should have 'LDRF_RELOAD' bit set -""" - -ida_loader.NEF_RSCS -""" -Load resources. -""" - -ida_loader.NEF_SEGS -""" -Create segments. -""" - -ida_loader.PLUGIN_DLL -""" -Pattern to find plugin files. -""" - -ida_loader.SSF_AUTOMATIC -""" -automatic snapshot -""" - -ida_loader.SSUF_DESC -""" -Update the description. -""" - -ida_loader.SSUF_FLAGS -""" -Update the flags. -""" - -ida_loader.SSUF_PATH -""" -Update the path. -""" -=== ida_loader EPYDOC INJECTIONS END === -ida_lumina.apply_metadata(): - - apply_metadata(ea, fi, flags=0x0) - - -ida_lumina.backup_metadata(): - - backup_metadata(ea) -> bool - - -ida_lumina.calc_func_metadata(): - - calc_func_metadata(out_fi, pfn, append_metadata=None) -> asize_t - - -ida_lumina.create_simple_diff_handler(): - - create_simple_diff_handler() -> simple_diff_handler_t - - -ida_lumina.create_simple_idb_diff_handler(): - - create_simple_idb_diff_handler(pfn) -> simple_idb_diff_handler_t - - -ida_lumina.diff_metadata(): - - diff_metadata(handler, left, right, flags=0) -> bool - - -ida_lumina.ea_to_ea64(): - - ea_to_ea64(ea) -> ea64_t - - -class ida_lumina.extra_cmt_t(): - - Proxy of C++ extra_cmt_t class - - -ida_lumina.extra_cmt_t.fchunk_nr: - insn_site_t_fchunk_nr_get(self) -> uint32 - -ida_lumina.extra_cmt_t.fchunk_off: - insn_site_t_fchunk_off_get(self) -> uint32 - -ida_lumina.extra_cmt_t.next: - extra_cmt_t_next_get(self) -> qstring * - -ida_lumina.extra_cmt_t.prev: - extra_cmt_t_prev_get(self) -> qstring * - -ida_lumina.extra_cmt_t.toea(): - - toea(self, pfn) -> ea_t - - -class ida_lumina.extra_cmts_t(): - - Proxy of C++ qvector<(extra_cmt_t)> class - - -ida_lumina.extra_cmts_t.at(): - - at(self, _idx) -> extra_cmt_t - - -ida_lumina.extra_cmts_t.begin(): - - begin(self) -> extra_cmt_t - begin(self) -> extra_cmt_t - - -ida_lumina.extra_cmts_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.extra_cmts_t.clear(): - - clear(self) - - -ida_lumina.extra_cmts_t.empty(): - - empty(self) -> bool - - -ida_lumina.extra_cmts_t.end(): - - end(self) -> extra_cmt_t - end(self) -> extra_cmt_t - - -ida_lumina.extra_cmts_t.erase(): - - erase(self, it) -> extra_cmt_t - erase(self, first, last) -> extra_cmt_t - - -ida_lumina.extra_cmts_t.extract(): - - extract(self) -> extra_cmt_t - - -ida_lumina.extra_cmts_t.grow(): - - grow(self, x=extra_cmt_t()) - - -ida_lumina.extra_cmts_t.inject(): - - inject(self, s, len) - - -ida_lumina.extra_cmts_t.insert(): - - insert(self, it, x) -> extra_cmt_t - - -ida_lumina.extra_cmts_t.pop_back(): - - pop_back(self) - - -ida_lumina.extra_cmts_t.push_back(): - - push_back(self, x) - push_back(self) -> extra_cmt_t - - -ida_lumina.extra_cmts_t.qclear(): - - qclear(self) - - -ida_lumina.extra_cmts_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.extra_cmts_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.extra_cmts_t.size(): - - size(self) -> size_t - - -ida_lumina.extra_cmts_t.swap(): - - swap(self, r) - - -ida_lumina.extra_cmts_t.truncate(): - - truncate(self) - - -ida_lumina.extract_extra_cmts_from_metadata(): - - extract_extra_cmts_from_metadata(out, ptr) - - -ida_lumina.extract_frame_desc_from_metadata(): - - extract_frame_desc_from_metadata(out, ptr) - - -ida_lumina.extract_insn_cmts_from_metadata(): - - extract_insn_cmts_from_metadata(out, ptr) - - -ida_lumina.extract_insn_opreprs_from_metadata(): - - extract_insn_opreprs_from_metadata(out, ptr) - - -ida_lumina.extract_type_from_metadata(): - - extract_type_from_metadata(out, _in) -> bool - - -ida_lumina.extract_user_stkpnts_from_metadata(): - - extract_user_stkpnts_from_metadata(out, ptr) - - -class ida_lumina.frame_desc_t(): - - Proxy of C++ frame_desc_t class - - -ida_lumina.frame_desc_t.argsize: - frame_desc_t_argsize_get(self) -> asize_t - -ida_lumina.frame_desc_t.frregs: - frame_desc_t_frregs_get(self) -> ushort - -ida_lumina.frame_desc_t.frsize: - frame_desc_t_frsize_get(self) -> sval_t - -ida_lumina.frame_desc_t.members: - frame_desc_t_members_get(self) -> frame_mems_t - -class ida_lumina.frame_mem_t(): - - Proxy of C++ frame_mem_t class - - -ida_lumina.frame_mem_t.cmt: - frame_mem_t_cmt_get(self) -> qstring * - -ida_lumina.frame_mem_t.info: - frame_mem_t_info_get(self) -> oprepr_t - -ida_lumina.frame_mem_t.name: - frame_mem_t_name_get(self) -> qstring * - -ida_lumina.frame_mem_t.nbytes: - frame_mem_t_nbytes_get(self) -> asize_t - -ida_lumina.frame_mem_t.offset: - frame_mem_t_offset_get(self) -> ea64_t - -ida_lumina.frame_mem_t.rptcmt: - frame_mem_t_rptcmt_get(self) -> qstring * - -ida_lumina.frame_mem_t.type: - frame_mem_t_type_get(self) -> serialized_tinfo - -class ida_lumina.frame_mems_t(): - - Proxy of C++ qvector<(frame_mem_t)> class - - -ida_lumina.frame_mems_t.at(): - - at(self, _idx) -> frame_mem_t - - -ida_lumina.frame_mems_t.begin(): - - begin(self) -> frame_mem_t - begin(self) -> frame_mem_t - - -ida_lumina.frame_mems_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.frame_mems_t.clear(): - - clear(self) - - -ida_lumina.frame_mems_t.empty(): - - empty(self) -> bool - - -ida_lumina.frame_mems_t.end(): - - end(self) -> frame_mem_t - end(self) -> frame_mem_t - - -ida_lumina.frame_mems_t.erase(): - - erase(self, it) -> frame_mem_t - erase(self, first, last) -> frame_mem_t - - -ida_lumina.frame_mems_t.extract(): - - extract(self) -> frame_mem_t - - -ida_lumina.frame_mems_t.grow(): - - grow(self, x=frame_mem_t()) - - -ida_lumina.frame_mems_t.inject(): - - inject(self, s, len) - - -ida_lumina.frame_mems_t.insert(): - - insert(self, it, x) -> frame_mem_t - - -ida_lumina.frame_mems_t.pop_back(): - - pop_back(self) - - -ida_lumina.frame_mems_t.push_back(): - - push_back(self, x) - push_back(self) -> frame_mem_t - - -ida_lumina.frame_mems_t.qclear(): - - qclear(self) - - -ida_lumina.frame_mems_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.frame_mems_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.frame_mems_t.size(): - - size(self) -> size_t - - -ida_lumina.frame_mems_t.swap(): - - swap(self, r) - - -ida_lumina.frame_mems_t.truncate(): - - truncate(self) - - -class ida_lumina.func_info_and_frequency_t(): - - Proxy of C++ func_info_and_frequency_t class - - -ida_lumina.func_info_and_frequency_t.frequency: - func_info_and_frequency_t_frequency_get(self) -> uint32 - -ida_lumina.func_info_and_frequency_t.metadata: - func_info_t_metadata_get(self) -> metadata_t * - -ida_lumina.func_info_and_frequency_t.name: - func_info_t_name_get(self) -> qstring * - -ida_lumina.func_info_and_frequency_t.size: - func_info_t_size_get(self) -> uint32 - -class ida_lumina.func_info_and_frequency_vec_t(): - - Proxy of C++ qvector<(func_info_and_frequency_t)> class - - -ida_lumina.func_info_and_frequency_vec_t.at(): - - at(self, _idx) -> func_info_and_frequency_t - - -ida_lumina.func_info_and_frequency_vec_t.begin(): - - begin(self) -> func_info_and_frequency_t - begin(self) -> func_info_and_frequency_t - - -ida_lumina.func_info_and_frequency_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.func_info_and_frequency_vec_t.clear(): - - clear(self) - - -ida_lumina.func_info_and_frequency_vec_t.empty(): - - empty(self) -> bool - - -ida_lumina.func_info_and_frequency_vec_t.end(): - - end(self) -> func_info_and_frequency_t - end(self) -> func_info_and_frequency_t - - -ida_lumina.func_info_and_frequency_vec_t.erase(): - - erase(self, it) -> func_info_and_frequency_t - erase(self, first, last) -> func_info_and_frequency_t - - -ida_lumina.func_info_and_frequency_vec_t.extract(): - - extract(self) -> func_info_and_frequency_t - - -ida_lumina.func_info_and_frequency_vec_t.grow(): - - grow(self, x=func_info_and_frequency_t()) - - -ida_lumina.func_info_and_frequency_vec_t.inject(): - - inject(self, s, len) - - -ida_lumina.func_info_and_frequency_vec_t.insert(): - - insert(self, it, x) -> func_info_and_frequency_t - - -ida_lumina.func_info_and_frequency_vec_t.pop_back(): - - pop_back(self) - - -ida_lumina.func_info_and_frequency_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> func_info_and_frequency_t - - -ida_lumina.func_info_and_frequency_vec_t.qclear(): - - qclear(self) - - -ida_lumina.func_info_and_frequency_vec_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.func_info_and_frequency_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.func_info_and_frequency_vec_t.size(): - - size(self) -> size_t - - -ida_lumina.func_info_and_frequency_vec_t.swap(): - - swap(self, r) - - -ida_lumina.func_info_and_frequency_vec_t.truncate(): - - truncate(self) - - -class ida_lumina.func_info_and_pattern_t(): - - Proxy of C++ func_info_and_pattern_t class - - -ida_lumina.func_info_and_pattern_t.metadata: - func_info_t_metadata_get(self) -> metadata_t * - -ida_lumina.func_info_and_pattern_t.name: - func_info_t_name_get(self) -> qstring * - -ida_lumina.func_info_and_pattern_t.pattern_id: - func_info_and_pattern_t_pattern_id_get(self) -> pattern_id_t - -ida_lumina.func_info_and_pattern_t.size: - func_info_t_size_get(self) -> uint32 - -class ida_lumina.func_info_and_pattern_vec_t(): - - Proxy of C++ qvector<(func_info_and_pattern_t)> class - - -ida_lumina.func_info_and_pattern_vec_t.at(): - - at(self, _idx) -> func_info_and_pattern_t - - -ida_lumina.func_info_and_pattern_vec_t.begin(): - - begin(self) -> func_info_and_pattern_t - begin(self) -> func_info_and_pattern_t - - -ida_lumina.func_info_and_pattern_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.func_info_and_pattern_vec_t.clear(): - - clear(self) - - -ida_lumina.func_info_and_pattern_vec_t.empty(): - - empty(self) -> bool - - -ida_lumina.func_info_and_pattern_vec_t.end(): - - end(self) -> func_info_and_pattern_t - end(self) -> func_info_and_pattern_t - - -ida_lumina.func_info_and_pattern_vec_t.erase(): - - erase(self, it) -> func_info_and_pattern_t - erase(self, first, last) -> func_info_and_pattern_t - - -ida_lumina.func_info_and_pattern_vec_t.extract(): - - extract(self) -> func_info_and_pattern_t - - -ida_lumina.func_info_and_pattern_vec_t.grow(): - - grow(self, x=func_info_and_pattern_t()) - - -ida_lumina.func_info_and_pattern_vec_t.inject(): - - inject(self, s, len) - - -ida_lumina.func_info_and_pattern_vec_t.insert(): - - insert(self, it, x) -> func_info_and_pattern_t - - -ida_lumina.func_info_and_pattern_vec_t.pop_back(): - - pop_back(self) - - -ida_lumina.func_info_and_pattern_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> func_info_and_pattern_t - - -ida_lumina.func_info_and_pattern_vec_t.qclear(): - - qclear(self) - - -ida_lumina.func_info_and_pattern_vec_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.func_info_and_pattern_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.func_info_and_pattern_vec_t.size(): - - size(self) -> size_t - - -ida_lumina.func_info_and_pattern_vec_t.swap(): - - swap(self, r) - - -ida_lumina.func_info_and_pattern_vec_t.truncate(): - - truncate(self) - - -class ida_lumina.func_info_base_t(): - - Proxy of C++ func_info_base_t class - - -ida_lumina.func_info_base_t.metadata: - func_info_base_t_metadata_get(self) -> metadata_t * - -ida_lumina.func_info_base_t.name: - func_info_base_t_name_get(self) -> qstring * - -class ida_lumina.func_info_pattern_and_frequency_t(): - - Proxy of C++ func_info_pattern_and_frequency_t class - - -ida_lumina.func_info_pattern_and_frequency_t.frequency: - func_info_pattern_and_frequency_t_frequency_get(self) -> uint32 - -ida_lumina.func_info_pattern_and_frequency_t.metadata: - func_info_t_metadata_get(self) -> metadata_t * - -ida_lumina.func_info_pattern_and_frequency_t.name: - func_info_t_name_get(self) -> qstring * - -ida_lumina.func_info_pattern_and_frequency_t.pattern_id: - func_info_and_pattern_t_pattern_id_get(self) -> pattern_id_t - -ida_lumina.func_info_pattern_and_frequency_t.size: - func_info_t_size_get(self) -> uint32 - -class ida_lumina.func_info_pattern_and_frequency_vec_t(): - - Proxy of C++ qvector<(func_info_pattern_and_frequency_t)> class - - -ida_lumina.func_info_pattern_and_frequency_vec_t.at(): - - at(self, _idx) -> func_info_pattern_and_frequency_t - - -ida_lumina.func_info_pattern_and_frequency_vec_t.begin(): - - begin(self) -> func_info_pattern_and_frequency_t - begin(self) -> func_info_pattern_and_frequency_t - - -ida_lumina.func_info_pattern_and_frequency_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.func_info_pattern_and_frequency_vec_t.clear(): - - clear(self) - - -ida_lumina.func_info_pattern_and_frequency_vec_t.empty(): - - empty(self) -> bool - - -ida_lumina.func_info_pattern_and_frequency_vec_t.end(): - - end(self) -> func_info_pattern_and_frequency_t - end(self) -> func_info_pattern_and_frequency_t - - -ida_lumina.func_info_pattern_and_frequency_vec_t.erase(): - - erase(self, it) -> func_info_pattern_and_frequency_t - erase(self, first, last) -> func_info_pattern_and_frequency_t - - -ida_lumina.func_info_pattern_and_frequency_vec_t.extract(): - - extract(self) -> func_info_pattern_and_frequency_t - - -ida_lumina.func_info_pattern_and_frequency_vec_t.grow(): - - grow(self, x=func_info_pattern_and_frequency_t()) - - -ida_lumina.func_info_pattern_and_frequency_vec_t.inject(): - - inject(self, s, len) - - -ida_lumina.func_info_pattern_and_frequency_vec_t.insert(): - - insert(self, it, x) -> func_info_pattern_and_frequency_t - - -ida_lumina.func_info_pattern_and_frequency_vec_t.pop_back(): - - pop_back(self) - - -ida_lumina.func_info_pattern_and_frequency_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> func_info_pattern_and_frequency_t - - -ida_lumina.func_info_pattern_and_frequency_vec_t.qclear(): - - qclear(self) - - -ida_lumina.func_info_pattern_and_frequency_vec_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.func_info_pattern_and_frequency_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.func_info_pattern_and_frequency_vec_t.size(): - - size(self) -> size_t - - -ida_lumina.func_info_pattern_and_frequency_vec_t.swap(): - - swap(self, r) - - -ida_lumina.func_info_pattern_and_frequency_vec_t.truncate(): - - truncate(self) - - -class ida_lumina.func_info_t(): - - Proxy of C++ func_info_t class - - -ida_lumina.func_info_t.metadata: - func_info_t_metadata_get(self) -> metadata_t * - -ida_lumina.func_info_t.name: - func_info_t_name_get(self) -> qstring * - -ida_lumina.func_info_t.size: - func_info_t_size_get(self) -> uint32 - -class ida_lumina.func_info_vec_t(): - - Proxy of C++ qvector<(func_info_t)> class - - -ida_lumina.func_info_vec_t.at(): - - at(self, _idx) -> func_info_t - - -ida_lumina.func_info_vec_t.begin(): - - begin(self) -> func_info_t - begin(self) -> func_info_t - - -ida_lumina.func_info_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.func_info_vec_t.clear(): - - clear(self) - - -ida_lumina.func_info_vec_t.empty(): - - empty(self) -> bool - - -ida_lumina.func_info_vec_t.end(): - - end(self) -> func_info_t - end(self) -> func_info_t - - -ida_lumina.func_info_vec_t.erase(): - - erase(self, it) -> func_info_t - erase(self, first, last) -> func_info_t - - -ida_lumina.func_info_vec_t.extract(): - - extract(self) -> func_info_t - - -ida_lumina.func_info_vec_t.grow(): - - grow(self, x=func_info_t()) - - -ida_lumina.func_info_vec_t.inject(): - - inject(self, s, len) - - -ida_lumina.func_info_vec_t.insert(): - - insert(self, it, x) -> func_info_t - - -ida_lumina.func_info_vec_t.pop_back(): - - pop_back(self) - - -ida_lumina.func_info_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> func_info_t - - -ida_lumina.func_info_vec_t.qclear(): - - qclear(self) - - -ida_lumina.func_info_vec_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.func_info_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.func_info_vec_t.size(): - - size(self) -> size_t - - -ida_lumina.func_info_vec_t.swap(): - - swap(self, r) - - -ida_lumina.func_info_vec_t.truncate(): - - truncate(self) - - -class ida_lumina.func_md_diff_handler_t(): - - Proxy of C++ func_md_diff_handler_t class - - -ida_lumina.func_md_diff_handler_t.on_comment_changed(): - - on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) - - -ida_lumina.func_md_diff_handler_t.on_extra_comment_changed(): - - on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) - - -ida_lumina.func_md_diff_handler_t.on_frame_member_changed(): - - on_frame_member_changed(self, offset, l, r) - - -ida_lumina.func_md_diff_handler_t.on_function_comment_changed(): - - on_function_comment_changed(self, l, r, rep) - - -ida_lumina.func_md_diff_handler_t.on_insn_ops_repr_changed(): - - on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) - - -ida_lumina.func_md_diff_handler_t.on_name_changed(): - - on_name_changed(self, l, r) - - -ida_lumina.func_md_diff_handler_t.on_proto_changed(): - - on_proto_changed(self, l, r) - - -ida_lumina.func_md_diff_handler_t.on_score_changed(): - - on_score_changed(self, l, r) - - -ida_lumina.func_md_diff_handler_t.on_user_stkpnt_changed(): - - on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) - - -ida_lumina.get_lumina_rpc_packet_t_index_from_base(): - - get_lumina_rpc_packet_t_index_from_base(code) -> uchar - - -ida_lumina.get_server_connection(): - - get_server_connection() -> lumina_client_t - - -ida_lumina.has_backup_metadata(): - - has_backup_metadata(ea) -> bool - - -class ida_lumina.history_entries_helper_t(): - - Proxy of C++ history_entries_helper_t class - - -ida_lumina.history_entries_helper_t.next_entry(): - - next_entry(self, _from) -> change_desc_base_t const & - - -ida_lumina.history_entries_helper_t.next_entry_index(): - - next_entry_index(self, out_index, _from) -> bool - - -ida_lumina.history_entries_helper_t.res: - history_entries_helper_t_res_get(self) -> pkt_show_entries_result_t const & - -class ida_lumina.input_file_t(): - - Proxy of C++ input_file_t class - - -ida_lumina.input_file_t.md5: - input_file_t_md5_get(self) -> md5_t * - -ida_lumina.input_file_t.path: - input_file_t_path_get(self) -> qstring * - -class ida_lumina.insn_cmt_t(): - - Proxy of C++ insn_cmt_t class - - -ida_lumina.insn_cmt_t.cmt: - insn_cmt_t_cmt_get(self) -> qstring * - -ida_lumina.insn_cmt_t.fchunk_nr: - insn_site_t_fchunk_nr_get(self) -> uint32 - -ida_lumina.insn_cmt_t.fchunk_off: - insn_site_t_fchunk_off_get(self) -> uint32 - -ida_lumina.insn_cmt_t.toea(): - - toea(self, pfn) -> ea_t - - -class ida_lumina.insn_cmts_t(): - - Proxy of C++ qvector<(insn_cmt_t)> class - - -ida_lumina.insn_cmts_t.at(): - - at(self, _idx) -> insn_cmt_t - - -ida_lumina.insn_cmts_t.begin(): - - begin(self) -> insn_cmt_t - begin(self) -> insn_cmt_t - - -ida_lumina.insn_cmts_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.insn_cmts_t.clear(): - - clear(self) - - -ida_lumina.insn_cmts_t.empty(): - - empty(self) -> bool - - -ida_lumina.insn_cmts_t.end(): - - end(self) -> insn_cmt_t - end(self) -> insn_cmt_t - - -ida_lumina.insn_cmts_t.erase(): - - erase(self, it) -> insn_cmt_t - erase(self, first, last) -> insn_cmt_t - - -ida_lumina.insn_cmts_t.extract(): - - extract(self) -> insn_cmt_t - - -ida_lumina.insn_cmts_t.grow(): - - grow(self, x=insn_cmt_t()) - - -ida_lumina.insn_cmts_t.inject(): - - inject(self, s, len) - - -ida_lumina.insn_cmts_t.insert(): - - insert(self, it, x) -> insn_cmt_t - - -ida_lumina.insn_cmts_t.pop_back(): - - pop_back(self) - - -ida_lumina.insn_cmts_t.push_back(): - - push_back(self, x) - push_back(self) -> insn_cmt_t - - -ida_lumina.insn_cmts_t.qclear(): - - qclear(self) - - -ida_lumina.insn_cmts_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.insn_cmts_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.insn_cmts_t.size(): - - size(self) -> size_t - - -ida_lumina.insn_cmts_t.swap(): - - swap(self, r) - - -ida_lumina.insn_cmts_t.truncate(): - - truncate(self) - - -class ida_lumina.insn_ops_repr_t(): - - Proxy of C++ insn_ops_repr_t class - - -ida_lumina.insn_ops_repr_t.fchunk_nr: - insn_site_t_fchunk_nr_get(self) -> uint32 - -ida_lumina.insn_ops_repr_t.fchunk_off: - insn_site_t_fchunk_off_get(self) -> uint32 - -ida_lumina.insn_ops_repr_t.flags: - insn_ops_repr_t_flags_get(self) -> flags_t - -ida_lumina.insn_ops_repr_t.op0: - insn_ops_repr_t_op0_get(self) -> opinfo_t - -ida_lumina.insn_ops_repr_t.op1: - insn_ops_repr_t_op1_get(self) -> opinfo_t - -ida_lumina.insn_ops_repr_t.toea(): - - toea(self, pfn) -> ea_t - - -class ida_lumina.insn_ops_reprs_t(): - - Proxy of C++ qvector<(insn_ops_repr_t)> class - - -ida_lumina.insn_ops_reprs_t.at(): - - at(self, _idx) -> insn_ops_repr_t - - -ida_lumina.insn_ops_reprs_t.begin(): - - begin(self) -> insn_ops_repr_t - begin(self) -> insn_ops_repr_t - - -ida_lumina.insn_ops_reprs_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.insn_ops_reprs_t.clear(): - - clear(self) - - -ida_lumina.insn_ops_reprs_t.empty(): - - empty(self) -> bool - - -ida_lumina.insn_ops_reprs_t.end(): - - end(self) -> insn_ops_repr_t - end(self) -> insn_ops_repr_t - - -ida_lumina.insn_ops_reprs_t.erase(): - - erase(self, it) -> insn_ops_repr_t - erase(self, first, last) -> insn_ops_repr_t - - -ida_lumina.insn_ops_reprs_t.extract(): - - extract(self) -> insn_ops_repr_t - - -ida_lumina.insn_ops_reprs_t.grow(): - - grow(self, x=insn_ops_repr_t()) - - -ida_lumina.insn_ops_reprs_t.inject(): - - inject(self, s, len) - - -ida_lumina.insn_ops_reprs_t.insert(): - - insert(self, it, x) -> insn_ops_repr_t - - -ida_lumina.insn_ops_reprs_t.pop_back(): - - pop_back(self) - - -ida_lumina.insn_ops_reprs_t.push_back(): - - push_back(self, x) - push_back(self) -> insn_ops_repr_t - - -ida_lumina.insn_ops_reprs_t.qclear(): - - qclear(self) - - -ida_lumina.insn_ops_reprs_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.insn_ops_reprs_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.insn_ops_reprs_t.size(): - - size(self) -> size_t - - -ida_lumina.insn_ops_reprs_t.swap(): - - swap(self, r) - - -ida_lumina.insn_ops_reprs_t.truncate(): - - truncate(self) - - -class ida_lumina.insn_site_t(): - - Proxy of C++ insn_site_t class - - -ida_lumina.insn_site_t.fchunk_nr: - insn_site_t_fchunk_nr_get(self) -> uint32 - -ida_lumina.insn_site_t.fchunk_off: - insn_site_t_fchunk_off_get(self) -> uint32 - -ida_lumina.insn_site_t.toea(): - - toea(self, pfn) -> ea_t - - -class ida_lumina.lumina_client_t(): - - Proxy of C++ lumina_client_t class - - -ida_lumina.lumina_client_t.get_pop(): - - get_pop(self, nresults=10) -> pkt_get_pop_result_t - - -ida_lumina.lumina_client_t.pull_md(): - - pull_md(self, pattern_ids, pull_md_flags=0) -> pkt_pull_md_result_t - pull_md(self, funcs, pull_md_flags=0) -> pkt_pull_md_result_t - - -ida_lumina.lumina_client_t.push_md(): - - push_md(self, result, contents, eas, flags=0) -> bool - push_md(self, result, opts, append_metadata=None, flags=0) -> bool - - -ida_lumina.lumina_client_t.set_pattern_id_md5(): - - set_pattern_id_md5(self, out, md5) - - -class ida_lumina.lumina_op_res_vec_t(): - - Proxy of C++ qvector<(lumina_op_res_t)> class - - -ida_lumina.lumina_op_res_vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_lumina.lumina_op_res_vec_t.at(): - - at(self, _idx) -> lumina_op_res_t const & - - -ida_lumina.lumina_op_res_vec_t.begin(): - - begin(self) -> qvector< lumina_op_res_t >::iterator - begin(self) -> qvector< lumina_op_res_t >::const_iterator - - -ida_lumina.lumina_op_res_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.lumina_op_res_vec_t.clear(): - - clear(self) - - -ida_lumina.lumina_op_res_vec_t.empty(): - - empty(self) -> bool - - -ida_lumina.lumina_op_res_vec_t.end(): - - end(self) -> qvector< lumina_op_res_t >::iterator - end(self) -> qvector< lumina_op_res_t >::const_iterator - - -ida_lumina.lumina_op_res_vec_t.erase(): - - erase(self, it) -> qvector< lumina_op_res_t >::iterator - erase(self, first, last) -> qvector< lumina_op_res_t >::iterator - - -ida_lumina.lumina_op_res_vec_t.extract(): - - extract(self) -> lumina_op_res_t * - - -ida_lumina.lumina_op_res_vec_t.find(): - - find(self, x) -> qvector< lumina_op_res_t >::iterator - find(self, x) -> qvector< lumina_op_res_t >::const_iterator - - -ida_lumina.lumina_op_res_vec_t.grow(): - - grow(self, x=lumina_op_res_t()) - - -ida_lumina.lumina_op_res_vec_t.has(): - - has(self, x) -> bool - - -ida_lumina.lumina_op_res_vec_t.inject(): - - inject(self, s, len) - - -ida_lumina.lumina_op_res_vec_t.insert(): - - insert(self, it, x) -> qvector< lumina_op_res_t >::iterator - - -ida_lumina.lumina_op_res_vec_t.pop_back(): - - pop_back(self) - - -ida_lumina.lumina_op_res_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> lumina_op_res_t & - - -ida_lumina.lumina_op_res_vec_t.qclear(): - - qclear(self) - - -ida_lumina.lumina_op_res_vec_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.lumina_op_res_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.lumina_op_res_vec_t.size(): - - size(self) -> size_t - - -ida_lumina.lumina_op_res_vec_t.swap(): - - swap(self, r) - - -ida_lumina.lumina_op_res_vec_t.truncate(): - - truncate(self) - - -class ida_lumina.md_type_parts_t(): - - Proxy of C++ md_type_parts_t class - - -ida_lumina.md_type_parts_t.fields: - md_type_parts_t_fields_get(self) -> qtype * - -ida_lumina.md_type_parts_t.type: - md_type_parts_t_type_get(self) -> qtype * - -ida_lumina.md_type_parts_t.userti: - md_type_parts_t_userti_get(self) -> bool - -class ida_lumina.metadata_iterator_t(): - - Proxy of C++ metadata_iterator_t class - - -ida_lumina.metadata_iterator_t.data: - metadata_iterator_t_data_get(self) -> uchar const * - -ida_lumina.metadata_iterator_t.data_end(): - - data_end(self) -> uchar const * - - -ida_lumina.metadata_iterator_t.key: - metadata_iterator_t_key_get(self) -> mdkey_t - -ida_lumina.metadata_iterator_t.next(): - - next(self) -> bool - - -ida_lumina.metadata_iterator_t.size: - metadata_iterator_t_size_get(self) -> size_t - -ida_lumina.new_packet(): - - new_packet(code, ptr=None, len=0, version=-1) -> rpc_packet_data_t * - - -class ida_lumina.oprepr_t(): - - Proxy of C++ oprepr_t class - - -ida_lumina.oprepr_t.flags: - oprepr_t_flags_get(self) -> flags_t - -ida_lumina.oprepr_t.opinfo: - oprepr_t_opinfo_get(self) -> opinfo_t - -class ida_lumina.pattern_id_t(): - - Proxy of C++ pattern_id_t class - - -ida_lumina.pattern_id_t.data: - pattern_id_t_data_get(self) -> bytevec_t * - -ida_lumina.pattern_id_t.type: - pattern_id_t_type_get(self) -> pattern_type_t - -class ida_lumina.pkt_clean_db_t(): - - Proxy of C++ pkt_clean_db_t class - - -class ida_lumina.pkt_debugctl_t(): - - Proxy of C++ pkt_debugctl_t class - - -ida_lumina.pkt_debugctl_t.args: - pkt_debugctl_t_args_get(self) -> qstrvec_t * - -class ida_lumina.pkt_dump_md_result_t(): - - Proxy of C++ pkt_dump_md_result_t class - - -ida_lumina.pkt_dump_md_result_t.contents: - pkt_dump_md_result_t_contents_get(self) -> func_info_pattern_and_frequency_vec_t - -class ida_lumina.pkt_dump_md_t(): - - Proxy of C++ pkt_dump_md_t class - - -ida_lumina.pkt_dump_md_t.sort: - pkt_dump_md_t_sort_get(self) -> dump_md_sort_type_t - -class ida_lumina.pkt_get_pop_result_t(): - - Proxy of C++ pkt_get_pop_result_t class - - -ida_lumina.pkt_get_pop_result_t.results: - pkt_get_pop_result_t_results_get(self) -> pop_fun_vec_t * - -class ida_lumina.pkt_get_pop_t(): - - Proxy of C++ pkt_get_pop_t class - - -ida_lumina.pkt_get_pop_t.nresults: - pkt_get_pop_t_nresults_get(self) -> uint32 - -class ida_lumina.pkt_helo_t(): - - Proxy of C++ pkt_helo_t class - - -ida_lumina.pkt_helo_t.client_version: - pkt_helo_t_client_version_get(self) -> int - -ida_lumina.pkt_helo_t.key: - pkt_helo_t_key_get(self) -> bytevec_t * - -ida_lumina.pkt_helo_t.license_id: - pkt_helo_t_license_id_get(self) -> uchar [6] - -ida_lumina.pkt_helo_t.record_conv: - pkt_helo_t_record_conv_get(self) -> bool - -class ida_lumina.pkt_pull_md_result_t(): - - Proxy of C++ pkt_pull_md_result_t class - - -ida_lumina.pkt_pull_md_result_t.codes: - pkt_pull_md_result_t_codes_get(self) -> lumina_op_res_vec_t - -ida_lumina.pkt_pull_md_result_t.results: - pkt_pull_md_result_t_results_get(self) -> func_info_and_frequency_vec_t - -class ida_lumina.pkt_pull_md_t(): - - Proxy of C++ pkt_pull_md_t class - - -ida_lumina.pkt_pull_md_t.flags: - pkt_pull_md_t_flags_get(self) -> uint32 - -ida_lumina.pkt_pull_md_t.keys: - pkt_pull_md_t_keys_get(self) -> mdkey_vec_t * - -ida_lumina.pkt_pull_md_t.pattern_ids: - pkt_pull_md_t_pattern_ids_get(self) -> pattern_ids_t * - -class ida_lumina.pkt_push_md_result_t(): - - Proxy of C++ pkt_push_md_result_t class - - -ida_lumina.pkt_push_md_result_t.codes: - pkt_push_md_result_t_codes_get(self) -> lumina_op_res_vec_t - -class ida_lumina.pkt_push_md_t(): - - Proxy of C++ pkt_push_md_t class - - -ida_lumina.pkt_push_md_t.contents: - pkt_push_md_t_contents_get(self) -> func_info_and_pattern_vec_t - -ida_lumina.pkt_push_md_t.ea64s: - pkt_push_md_t_ea64s_get(self) -> ea64vec_t * - -ida_lumina.pkt_push_md_t.flags: - pkt_push_md_t_flags_get(self) -> uint32 - -ida_lumina.pkt_push_md_t.hostname: - pkt_push_md_t_hostname_get(self) -> qstring * - -ida_lumina.pkt_push_md_t.idb: - pkt_push_md_t_idb_get(self) -> qstring * - -ida_lumina.pkt_push_md_t.input: - pkt_push_md_t_input_get(self) -> input_file_t - -class ida_lumina.pkt_rpc_fail_t(): - - Proxy of C++ pkt_rpc_fail_t class - - -ida_lumina.pkt_rpc_fail_t.error: - pkt_rpc_fail_t_error_get(self) -> qstring * - -ida_lumina.pkt_rpc_fail_t.result: - pkt_rpc_fail_t_result_get(self) -> int - -class ida_lumina.pkt_rpc_notify_t(): - - Proxy of C++ pkt_rpc_notify_t class - - -ida_lumina.pkt_rpc_notify_t.text: - pkt_rpc_notify_t_text_get(self) -> qstring * - -ida_lumina.pkt_rpc_notify_t.type: - pkt_rpc_notify_t_type_get(self) -> rpc_notification_type_t - -class ida_lumina.pkt_rpc_ok_t(): - - Proxy of C++ pkt_rpc_ok_t class - - -class ida_lumina.pop_fun_t(): - - Proxy of C++ pop_fun_t class - - -ida_lumina.pop_fun_t.ea64: - pop_fun_t_ea64_get(self) -> ea64_t - -ida_lumina.pop_fun_t.frequency: - func_info_pattern_and_frequency_t_frequency_get(self) -> uint32 - -ida_lumina.pop_fun_t.hostname: - pop_fun_t_hostname_get(self) -> qstring * - -ida_lumina.pop_fun_t.input: - pop_fun_t_input_get(self) -> input_file_t - -ida_lumina.pop_fun_t.metadata: - func_info_t_metadata_get(self) -> metadata_t * - -ida_lumina.pop_fun_t.name: - func_info_t_name_get(self) -> qstring * - -ida_lumina.pop_fun_t.pattern_id: - func_info_and_pattern_t_pattern_id_get(self) -> pattern_id_t - -ida_lumina.pop_fun_t.size: - func_info_t_size_get(self) -> uint32 - -class ida_lumina.push_md_opts_t(): - - Proxy of C++ push_md_opts_t class - - -ida_lumina.push_md_opts_t.eas: - push_md_opts_t_eas_get(self) -> eavec_t * - -ida_lumina.push_md_opts_t.min_func_size: - push_md_opts_t_min_func_size_get(self) -> size_t - -class ida_lumina.push_md_result_t(): - - Proxy of C++ push_md_result_t class - - -ida_lumina.push_md_result_t.codes: - push_md_result_t_codes_get(self) -> lumina_op_res_vec_t - -ida_lumina.push_md_result_t.contents: - push_md_result_t_contents_get(self) -> func_info_and_pattern_vec_t - -ida_lumina.push_md_result_t.eas: - push_md_result_t_eas_get(self) -> eavec_t * - -ida_lumina.revert_metadata(): - - revert_metadata(ea) -> bool - - -ida_lumina.score_metadata(): - - score_metadata(fi) -> uint32 - - -class ida_lumina.serialized_tinfo(): - - Proxy of C++ serialized_tinfo class - - -ida_lumina.serialized_tinfo.fields: - serialized_tinfo_fields_get(self) -> qtype * - -ida_lumina.serialized_tinfo.type: - serialized_tinfo_type_get(self) -> qtype * - -class ida_lumina.simple_diff_handler_t(): - - Proxy of C++ simple_diff_handler_t class - - -ida_lumina.simple_diff_handler_t.indent: - simple_diff_handler_t_indent_get(self) -> uint32 - -ida_lumina.simple_diff_handler_t.lines: - simple_diff_handler_t_lines_get(self) -> qstrvec_t * - -ida_lumina.simple_diff_handler_t.on_comment_changed(): - - on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) - - -ida_lumina.simple_diff_handler_t.on_extra_comment_changed(): - - on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) - - -ida_lumina.simple_diff_handler_t.on_frame_member_changed(): - - on_frame_member_changed(self, offset, l, r) - - -ida_lumina.simple_diff_handler_t.on_function_comment_changed(): - - on_function_comment_changed(self, l, r, rep) - - -ida_lumina.simple_diff_handler_t.on_insn_ops_repr_changed(): - - on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) - - -ida_lumina.simple_diff_handler_t.on_name_changed(): - - on_name_changed(self, l, r) - - -ida_lumina.simple_diff_handler_t.on_proto_changed(): - - on_proto_changed(self, l, r) - - -ida_lumina.simple_diff_handler_t.on_score_changed(): - - on_score_changed(self, l, r) - - -ida_lumina.simple_diff_handler_t.on_user_stkpnt_changed(): - - on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) - - -class ida_lumina.simple_idb_diff_handler_t(): - - Proxy of C++ simple_idb_diff_handler_t class - - -ida_lumina.simple_idb_diff_handler_t.header_generated: - simple_idb_diff_handler_t_header_generated_get(self) -> bool - -ida_lumina.simple_idb_diff_handler_t.indent: - simple_diff_handler_t_indent_get(self) -> uint32 - -ida_lumina.simple_idb_diff_handler_t.lines: - simple_diff_handler_t_lines_get(self) -> qstrvec_t * - -ida_lumina.simple_idb_diff_handler_t.on_comment_changed(): - - on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) - - -ida_lumina.simple_idb_diff_handler_t.on_extra_comment_changed(): - - on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) - - -ida_lumina.simple_idb_diff_handler_t.on_frame_member_changed(): - - on_frame_member_changed(self, offset, l, r) - - -ida_lumina.simple_idb_diff_handler_t.on_function_comment_changed(): - - on_function_comment_changed(self, l, r, rep) - - -ida_lumina.simple_idb_diff_handler_t.on_insn_ops_repr_changed(): - - on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) - - -ida_lumina.simple_idb_diff_handler_t.on_name_changed(): - - on_name_changed(self, l, r) - - -ida_lumina.simple_idb_diff_handler_t.on_proto_changed(): - - on_proto_changed(self, l, r) - - -ida_lumina.simple_idb_diff_handler_t.on_score_changed(): - - on_score_changed(self, l, r) - - -ida_lumina.simple_idb_diff_handler_t.on_user_stkpnt_changed(): - - on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) - - -ida_lumina.simple_idb_diff_handler_t.pfn: - simple_idb_diff_handler_t_pfn_get(self) -> func_t const * - -class ida_lumina.skipped_func_t(): - - Proxy of C++ skipped_func_t class - - -ida_lumina.skipped_func_t.count: - skipped_func_t_count_get(self) -> uint32 - -ida_lumina.skipped_func_t.pattern_id: - skipped_func_t_pattern_id_get(self) -> pattern_id_t - -class ida_lumina.skipped_funcs_t(): - - Proxy of C++ qvector<(skipped_func_t)> class - - -ida_lumina.skipped_funcs_t.at(): - - at(self, _idx) -> skipped_func_t - - -ida_lumina.skipped_funcs_t.begin(): - - begin(self) -> skipped_func_t - begin(self) -> skipped_func_t - - -ida_lumina.skipped_funcs_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.skipped_funcs_t.clear(): - - clear(self) - - -ida_lumina.skipped_funcs_t.empty(): - - empty(self) -> bool - - -ida_lumina.skipped_funcs_t.end(): - - end(self) -> skipped_func_t - end(self) -> skipped_func_t - - -ida_lumina.skipped_funcs_t.erase(): - - erase(self, it) -> skipped_func_t - erase(self, first, last) -> skipped_func_t - - -ida_lumina.skipped_funcs_t.extract(): - - extract(self) -> skipped_func_t - - -ida_lumina.skipped_funcs_t.grow(): - - grow(self, x=skipped_func_t()) - - -ida_lumina.skipped_funcs_t.inject(): - - inject(self, s, len) - - -ida_lumina.skipped_funcs_t.insert(): - - insert(self, it, x) -> skipped_func_t - - -ida_lumina.skipped_funcs_t.pop_back(): - - pop_back(self) - - -ida_lumina.skipped_funcs_t.push_back(): - - push_back(self, x) - push_back(self) -> skipped_func_t - - -ida_lumina.skipped_funcs_t.qclear(): - - qclear(self) - - -ida_lumina.skipped_funcs_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.skipped_funcs_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.skipped_funcs_t.size(): - - size(self) -> size_t - - -ida_lumina.skipped_funcs_t.swap(): - - swap(self, r) - - -ida_lumina.skipped_funcs_t.truncate(): - - truncate(self) - - -ida_lumina.split_metadata(): - - split_metadata(md) -> PyObject * - - -class ida_lumina.user_identification_t(): - - Proxy of C++ user_identification_t class - - -ida_lumina.user_identification_t.email: - user_identification_t_email_get(self) -> qstring * - -ida_lumina.user_identification_t.license_id: - user_identification_t_license_id_get(self) -> qstring * - -ida_lumina.user_identification_t.user_name: - user_identification_t_user_name_get(self) -> qstring * - -class ida_lumina.user_stkpnt_t(): - - Proxy of C++ user_stkpnt_t class - - -ida_lumina.user_stkpnt_t.delta: - user_stkpnt_t_delta_get(self) -> int64 - -ida_lumina.user_stkpnt_t.fchunk_nr: - insn_site_t_fchunk_nr_get(self) -> uint32 - -ida_lumina.user_stkpnt_t.fchunk_off: - insn_site_t_fchunk_off_get(self) -> uint32 - -ida_lumina.user_stkpnt_t.toea(): - - toea(self, pfn) -> ea_t - - -class ida_lumina.user_stkpnts_t(): - - Proxy of C++ qvector<(user_stkpnt_t)> class - - -ida_lumina.user_stkpnts_t.at(): - - at(self, _idx) -> user_stkpnt_t - - -ida_lumina.user_stkpnts_t.begin(): - - begin(self) -> user_stkpnt_t - begin(self) -> user_stkpnt_t - - -ida_lumina.user_stkpnts_t.capacity(): - - capacity(self) -> size_t - - -ida_lumina.user_stkpnts_t.clear(): - - clear(self) - - -ida_lumina.user_stkpnts_t.empty(): - - empty(self) -> bool - - -ida_lumina.user_stkpnts_t.end(): - - end(self) -> user_stkpnt_t - end(self) -> user_stkpnt_t - - -ida_lumina.user_stkpnts_t.erase(): - - erase(self, it) -> user_stkpnt_t - erase(self, first, last) -> user_stkpnt_t - - -ida_lumina.user_stkpnts_t.extract(): - - extract(self) -> user_stkpnt_t - - -ida_lumina.user_stkpnts_t.grow(): - - grow(self, x=user_stkpnt_t()) - - -ida_lumina.user_stkpnts_t.inject(): - - inject(self, s, len) - - -ida_lumina.user_stkpnts_t.insert(): - - insert(self, it, x) -> user_stkpnt_t - - -ida_lumina.user_stkpnts_t.pop_back(): - - pop_back(self) - - -ida_lumina.user_stkpnts_t.push_back(): - - push_back(self, x) - push_back(self) -> user_stkpnt_t - - -ida_lumina.user_stkpnts_t.qclear(): - - qclear(self) - - -ida_lumina.user_stkpnts_t.reserve(): - - reserve(self, cnt) - - -ida_lumina.user_stkpnts_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_lumina.user_stkpnts_t.size(): - - size(self) -> size_t - - -ida_lumina.user_stkpnts_t.swap(): - - swap(self, r) - - -ida_lumina.user_stkpnts_t.truncate(): - - truncate(self) - - - -=== ida_lumina EPYDOC INJECTIONS === -ida_lumina.AMDF_FORCE -""" -apply kvps regardless of what's currently in the IDB, possibly -removing some attributes currently present (e.g., name, or prototype -could be lost) -""" - -ida_lumina.AMDF_UPGRADE -""" -"quality" than what's currently in the IDB - -apply kvps that seem to be of higher -""" - -ida_lumina.PMF_PUSH_MODE_MASK -""" -Conflict resolution mode. -""" -=== ida_lumina EPYDOC INJECTIONS END === -class ida_moves.bookmarks_t(): - - Proxy of C++ bookmarks_t class - - -ida_moves.bookmarks_t.erase(): - - erase(e, index, ud) -> bool - - -ida_moves.bookmarks_t.find_index(): - - find_index(e, ud) -> uint32 - - -ida_moves.bookmarks_t.get(): - - get(out_entry, out_desc, index, ud) -> bool - - -ida_moves.bookmarks_t.get_desc(): - - get_desc(e, index, ud) -> bool - - -ida_moves.bookmarks_t.mark(): - - mark(e, index, title, desc, ud) -> uint32 - - -ida_moves.bookmarks_t.size(): - - size(e, ud) -> uint32 - - -ida_moves.bookmarks_t_erase(): - - bookmarks_t_erase(e, index, ud) -> bool - - -ida_moves.bookmarks_t_find_index(): - - bookmarks_t_find_index(e, ud) -> uint32 - - -ida_moves.bookmarks_t_get(): - - bookmarks_t_get(out_entry, out_desc, index, ud) -> bool - - -ida_moves.bookmarks_t_get_desc(): - - bookmarks_t_get_desc(e, index, ud) -> bool - - -ida_moves.bookmarks_t_mark(): - - bookmarks_t_mark(e, index, title, desc, ud) -> uint32 - - -ida_moves.bookmarks_t_size(): - - bookmarks_t_size(e, ud) -> uint32 - - -class ida_moves.graph_location_info_t(): - - Proxy of C++ graph_location_info_t class - - -ida_moves.graph_location_info_t.orgx: - graph_location_info_t_orgx_get(self) -> double - -ida_moves.graph_location_info_t.orgy: - graph_location_info_t_orgy_get(self) -> double - -ida_moves.graph_location_info_t.zoom: - graph_location_info_t_zoom_get(self) -> double - -class ida_moves.lochist_entry_t(): - - Proxy of C++ lochist_entry_t class - - -ida_moves.lochist_entry_t.acquire_place(): - - acquire_place(self, p) - - -ida_moves.lochist_entry_t.is_valid(): - - is_valid(self) -> bool - - -ida_moves.lochist_entry_t.place(): - - place(self) -> place_t - place(self) -> place_t - - -ida_moves.lochist_entry_t.plce: - lochist_entry_t_plce_get(self) -> place_t - -ida_moves.lochist_entry_t.renderer_info(): - - renderer_info(self) -> renderer_info_t - renderer_info(self) -> renderer_info_t - - -ida_moves.lochist_entry_t.rinfo: - lochist_entry_t_rinfo_get(self) -> renderer_info_t - -ida_moves.lochist_entry_t.set_place(): - - set_place(self, p) - - -class ida_moves.lochist_t(): - - Proxy of C++ lochist_t class - - -ida_moves.lochist_t.back(): - - back(self, cnt, try_to_unhide) -> bool - - -ida_moves.lochist_t.clear(): - - clear(self) - - -ida_moves.lochist_t.current_index(): - - current_index(self) -> uint32 - - -ida_moves.lochist_t.fwd(): - - fwd(self, cnt, try_to_unhide) -> bool - - -ida_moves.lochist_t.get(): - - get(self, out, index) -> bool - - -ida_moves.lochist_t.get_current(): - - get_current(self) -> lochist_entry_t - - -ida_moves.lochist_t.get_place_id(): - - get_place_id(self) -> int - - -ida_moves.lochist_t.get_template_place(): - - get_template_place(self) -> place_t - - -ida_moves.lochist_t.init(): - - init(self, stream_name, _defpos, _ud, _flags) -> bool - - -ida_moves.lochist_t.is_history_enabled(): - - is_history_enabled(self) -> bool - - -ida_moves.lochist_t.jump(): - - jump(self, try_to_unhide, e) - - -ida_moves.lochist_t.netcode(): - - netcode(self) -> nodeidx_t - - -ida_moves.lochist_t.save(): - - save(self) - - -ida_moves.lochist_t.seek(): - - seek(self, index, try_to_unhide) -> bool - - -ida_moves.lochist_t.set(): - - set(self, index, e) - - -ida_moves.lochist_t.set_current(): - - set_current(self, e) - - -ida_moves.lochist_t.size(): - - size(self) -> uint32 - - -class ida_moves.renderer_info_pos_t(): - - Proxy of C++ renderer_info_pos_t class - - -ida_moves.renderer_info_pos_t.cx: - renderer_info_pos_t_cx_get(self) -> short - -ida_moves.renderer_info_pos_t.cy: - renderer_info_pos_t_cy_get(self) -> short - -ida_moves.renderer_info_pos_t.node: - renderer_info_pos_t_node_get(self) -> int - -class ida_moves.renderer_info_t(): - - Proxy of C++ renderer_info_t class - - -ida_moves.renderer_info_t.clear(): - - clear(self) - - -ida_moves.renderer_info_t.gli: - renderer_info_t_gli_get(self) -> graph_location_info_t - -ida_moves.renderer_info_t.pos: - renderer_info_t_pos_get(self) -> renderer_info_pos_t - -ida_moves.renderer_info_t.rtype: - renderer_info_t_rtype_get(self) -> tcc_renderer_type_t - -class ida_moves.segm_move_info_t(): - - Proxy of C++ segm_move_info_t class - - -ida_moves.segm_move_info_t.size: - segm_move_info_t_size_get(self) -> size_t - -ida_moves.segm_move_info_t.to: - segm_move_info_t_to_get(self) -> ea_t - -class ida_moves.segm_move_info_vec_t(): - - Proxy of C++ qvector<(segm_move_info_t)> class - - -ida_moves.segm_move_info_vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_moves.segm_move_info_vec_t.at(): - - at(self, _idx) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.begin(): - - begin(self) -> segm_move_info_t - begin(self) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_moves.segm_move_info_vec_t.clear(): - - clear(self) - - -ida_moves.segm_move_info_vec_t.empty(): - - empty(self) -> bool - - -ida_moves.segm_move_info_vec_t.end(): - - end(self) -> segm_move_info_t - end(self) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.erase(): - - erase(self, it) -> segm_move_info_t - erase(self, first, last) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.extract(): - - extract(self) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.find(): - - find(self, x) -> segm_move_info_t - find(self, x) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.grow(): - - grow(self, x=segm_move_info_t()) - - -ida_moves.segm_move_info_vec_t.has(): - - has(self, x) -> bool - - -ida_moves.segm_move_info_vec_t.inject(): - - inject(self, s, len) - - -ida_moves.segm_move_info_vec_t.insert(): - - insert(self, it, x) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.pop_back(): - - pop_back(self) - - -ida_moves.segm_move_info_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.qclear(): - - qclear(self) - - -ida_moves.segm_move_info_vec_t.reserve(): - - reserve(self, cnt) - - -ida_moves.segm_move_info_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_moves.segm_move_info_vec_t.size(): - - size(self) -> size_t - - -ida_moves.segm_move_info_vec_t.swap(): - - swap(self, r) - - -ida_moves.segm_move_info_vec_t.truncate(): - - truncate(self) - - -class ida_moves.segm_move_infos_t(): - - Proxy of C++ segm_move_infos_t class - - -ida_moves.segm_move_infos_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_moves.segm_move_infos_t.at(): - - at(self, _idx) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.begin(): - - begin(self) -> segm_move_info_t - begin(self) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.capacity(): - - capacity(self) -> size_t - - -ida_moves.segm_move_infos_t.clear(): - - clear(self) - - -ida_moves.segm_move_infos_t.empty(): - - empty(self) -> bool - - -ida_moves.segm_move_infos_t.end(): - - end(self) -> segm_move_info_t - end(self) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.erase(): - - erase(self, it) -> segm_move_info_t - erase(self, first, last) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.extract(): - - extract(self) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.find(): - - find(self, ea) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.grow(): - - grow(self, x=segm_move_info_t()) - - -ida_moves.segm_move_infos_t.has(): - - has(self, x) -> bool - - -ida_moves.segm_move_infos_t.inject(): - - inject(self, s, len) - - -ida_moves.segm_move_infos_t.insert(): - - insert(self, it, x) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.pop_back(): - - pop_back(self) - - -ida_moves.segm_move_infos_t.push_back(): - - push_back(self, x) - push_back(self) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.qclear(): - - qclear(self) - - -ida_moves.segm_move_infos_t.reserve(): - - reserve(self, cnt) - - -ida_moves.segm_move_infos_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_moves.segm_move_infos_t.size(): - - size(self) -> size_t - - -ida_moves.segm_move_infos_t.swap(): - - swap(self, r) - - -ida_moves.segm_move_infos_t.truncate(): - - truncate(self) - - -ida_nalt.add_encoding(): - - add_encoding(encoding) -> int - - - Add a new encoding (e.g. "UTF-8"). - - @param encoding (C++: const char *) - @return: its index (1-based) if it's already in the list, return its - index - - -class ida_nalt.array_parameters_t(): - - Proxy of C++ array_parameters_t class - - -ida_nalt.array_parameters_t.alignment: - array_parameters_t_alignment_get(self) -> int32 - -ida_nalt.array_parameters_t.flags: - array_parameters_t_flags_get(self) -> int32 - -ida_nalt.array_parameters_t.lineitems: - array_parameters_t_lineitems_get(self) -> int32 - -ida_nalt.clr__bnot0(): - - clr__bnot0(ea) - - -ida_nalt.clr__bnot1(): - - clr__bnot1(ea) - - -ida_nalt.clr__invsign0(): - - clr__invsign0(ea) - - -ida_nalt.clr__invsign1(): - - clr__invsign1(ea) - - -ida_nalt.clr_abits(): - - clr_abits(ea, bits) - - -ida_nalt.clr_align_flow(): - - clr_align_flow(ea) - - -ida_nalt.clr_colored_item(): - - clr_colored_item(ea) - - -ida_nalt.clr_fixed_spd(): - - clr_fixed_spd(ea) - - -ida_nalt.clr_has_lname(): - - clr_has_lname(ea) - - -ida_nalt.clr_has_ti(): - - clr_has_ti(ea) - - -ida_nalt.clr_has_ti0(): - - clr_has_ti0(ea) - - -ida_nalt.clr_has_ti1(): - - clr_has_ti1(ea) - - -ida_nalt.clr_libitem(): - - clr_libitem(ea) - - -ida_nalt.clr_lzero0(): - - clr_lzero0(ea) - - -ida_nalt.clr_lzero1(): - - clr_lzero1(ea) - - -ida_nalt.clr_noret(): - - clr_noret(ea) - - -ida_nalt.clr_notcode(): - - clr_notcode(ea) - - - Clear not-code mark. - - - @param ea (C++: ea_t) - - -ida_nalt.clr_notproc(): - - clr_notproc(ea) - - -ida_nalt.clr_retfp(): - - clr_retfp(ea) - - -ida_nalt.clr_terse_struc(): - - clr_terse_struc(ea) - - -ida_nalt.clr_tilcmt(): - - clr_tilcmt(ea) - - -ida_nalt.clr_usemodsp(): - - clr_usemodsp(ea) - - -ida_nalt.clr_usersp(): - - clr_usersp(ea) - - -ida_nalt.clr_userti(): - - clr_userti(ea) - - -ida_nalt.clr_zstroff(): - - clr_zstroff(ea) - - -class ida_nalt.custom_data_type_ids_fids_array(): - - Proxy of C++ wrapped_array_t<(int16,8)> class - - -ida_nalt.custom_data_type_ids_fids_array.data: - custom_data_type_ids_fids_array_data_get(self) -> short (&)[8] - -class ida_nalt.custom_data_type_ids_t(): - - Proxy of C++ custom_data_type_ids_t class - - -ida_nalt.custom_data_type_ids_t.dtid: - custom_data_type_ids_t_dtid_get(self) -> int16 - -ida_nalt.custom_data_type_ids_t.fids: - - __getFids(self) -> custom_data_type_ids_fids_array - - -ida_nalt.dbg_get_input_path(): - - dbg_get_input_path() -> ssize_t - - - Get debugger input file name/path (see 'LFLG_DBG_NOPATH' ) - - -ida_nalt.del_absbase(): - - del_absbase(ea) - - -ida_nalt.del_aflags(): - - del_aflags(ea) - - -ida_nalt.del_alignment(): - - del_alignment(ea) - - -ida_nalt.del_array_parameters(): - - del_array_parameters(ea) - - -ida_nalt.del_custom_data_type_ids(): - - del_custom_data_type_ids(ea) - - -ida_nalt.del_encoding(): - - del_encoding(idx) -> bool - - - Delete an encoding (1-based) - - - @param idx (C++: int) - - -ida_nalt.del_ind_purged(): - - del_ind_purged(ea) - - -ida_nalt.del_item_color(): - - del_item_color(ea) -> bool - - -ida_nalt.del_op_tinfo(): - - del_op_tinfo(ea, n) - - -ida_nalt.del_refinfo(): - - del_refinfo(ea, n) -> bool - - -ida_nalt.del_source_linnum(): - - del_source_linnum(ea) - - -ida_nalt.del_str_type(): - - del_str_type(ea) - - -ida_nalt.del_switch_info(): - - del_switch_info(ea) - - -ida_nalt.del_switch_parent(): - - del_switch_parent(ea) - - -ida_nalt.del_tinfo(): - - del_tinfo(ea) - - -ida_nalt.delete_imports(): - - delete_imports() - - - Delete all imported modules information. - - -ida_nalt.ea2node(): - - ea2node(ea) -> nodeidx_t - - - Get netnode for the specified address. - - - @param ea (C++: ea_t) - - -ida_nalt.encoding_from_strtype(): - - encoding_from_strtype(strtype) -> char const * - - - Get encoding name for this strtype. - - - @param strtype (C++: int32) - - -class ida_nalt.enum_const_t(): - - Proxy of C++ enum_const_t class - - -ida_nalt.enum_const_t.serial: - enum_const_t_serial_get(self) -> uchar - -ida_nalt.enum_const_t.tid: - enum_const_t_tid_get(self) -> tid_t - -ida_nalt.enum_import_names(): - - enum_import_names(mod_index, py_cb) -> int - - - Enumerate imports from a specific module. - Please refer to ex_imports.py example. - - @param mod_index: The module index - @param callback: A callable object that will be invoked with an ea, name (could be None) and ordinal. - @return: 1-finished ok, -1 on error, otherwise callback return value (<=0) - - -ida_nalt.find_custom_refinfo(): - - find_custom_refinfo(name) -> int - - - Get id of a custom refinfo type. - - - @param name (C++: const char *) - - -ida_nalt.get_absbase(): - - get_absbase(ea) -> ea_t - - -ida_nalt.get_aflags(): - - get_aflags(ea) -> uint32 - - -ida_nalt.get_alignment(): - - get_alignment(ea) -> uint32 - - -ida_nalt.get_archive_path(): - - get_archive_path() -> ssize_t - - - Get archive file path from which input file was extracted. - - -ida_nalt.get_array_parameters(): - - get_array_parameters(out, ea) -> ssize_t - - -ida_nalt.get_asm_inc_file(): - - get_asm_inc_file() -> ssize_t - - - Get name of the include file. - - -ida_nalt.get_custom_data_type_ids(): - - get_custom_data_type_ids(cdis, ea) -> int - - -ida_nalt.get_custom_refinfo(): - - get_custom_refinfo(crid) -> custom_refinfo_handler_t const * - - - Get definition of a registered custom refinfo type. - - - @param crid (C++: int) - - -ida_nalt.get_default_encoding_idx(): - - get_default_encoding_idx(bpu) -> int - - - Get default encoding index for a specific string type. - - @param bpu: the amount of bytes per unit (e.g., 1 for ASCII, CP1252, - UTF-8..., 2 for UTF-16, 4 for UTF-32) 0 means no specific - encoding is set - byte values are displayed without - conversion. (C++: int) - - -ida_nalt.get_encoding_bpu(): - - get_encoding_bpu(idx) -> int - - - Get the amount of bytes per unit (e.g., 2 for UTF-16, 4 for UTF-32) - for the encoding with the given index. - - @param idx: the encoding index (C++: int) - @return: the number of bytes per units (1/2/4); -1 means error - - -ida_nalt.get_encoding_name(): - - get_encoding_name(idx) -> char const * - - - Get encoding name for specific index (1-based). - - @param idx (C++: int) - @return: NULL if idx is out of bounds - - -ida_nalt.get_encoding_qty(): - - get_encoding_qty() -> int - - - Get total number of encodings (counted from 0) - - -ida_nalt.get_gotea(): - - get_gotea() -> ea_t - - -ida_nalt.get_ids_modnode(): - - get_ids_modnode() -> netnode - - - Get ids modnode. - - -ida_nalt.get_imagebase(): - - get_imagebase() -> ea_t - - - Get image base address. - - -ida_nalt.get_import_module_name(): - - get_import_module_name(mod_index) -> PyObject * - - - Returns the name of an imported module given its index - @return: None or the module name - - -ida_nalt.get_import_module_qty(): - - get_import_module_qty() -> uint - - - Get number of import modules. - - -ida_nalt.get_ind_purged(): - - get_ind_purged(ea) -> ea_t - - -ida_nalt.get_input_file_path(): - - get_input_file_path() -> ssize_t - - - Get full path of the input file. - - -ida_nalt.get_item_color(): - - get_item_color(ea) -> bgcolor_t - - -ida_nalt.get_op_tinfo(): - - get_op_tinfo(tif, ea, n) -> bool - - -ida_nalt.get_outfile_encoding_idx(): - - get_outfile_encoding_idx() -> int - - - Get the index of the encoding used when producing files 0 means no - that the IDB's default 1 byte-per-unit encoding is used - - -ida_nalt.get_refinfo(): - - get_refinfo(ri, ea, n) -> bool - - -ida_nalt.get_reftype_by_size(): - - get_reftype_by_size(size) -> reftype_t - - - Get REF_... constant from size Supported sizes: 1,2,4,8,16 For other - sizes returns reftype_t(-1) - - @param size (C++: size_t) - - -ida_nalt.get_root_filename(): - - get_root_filename() -> ssize_t - - - Get file name only of the input file. - - -ida_nalt.get_source_linnum(): - - get_source_linnum(ea) -> uval_t - - -ida_nalt.get_str_encoding_idx(): - - get_str_encoding_idx(strtype) -> uchar - - - Get index of the string encoding for this string. - - - @param strtype (C++: int32) - - -ida_nalt.get_str_term1(): - - get_str_term1(strtype) -> char - - -ida_nalt.get_str_term2(): - - get_str_term2(strtype) -> char - - -ida_nalt.get_str_type(): - - get_str_type(ea) -> uint32 - - -ida_nalt.get_str_type_code(): - - get_str_type_code(strtype) -> uchar - - -ida_nalt.get_strtype_bpu(): - - get_strtype_bpu(strtype) -> int - - -ida_nalt.get_switch_parent(): - - get_switch_parent(ea) -> ea_t - - -ida_nalt.get_tinfo(): - - get_tinfo(tif, ea) -> bool - - -ida_nalt.getnode(): - - getnode(ea) -> netnode - - -ida_nalt.has_lname(): - - has_lname(ea) -> bool - - -ida_nalt.has_ti(): - - has_ti(ea) -> bool - - -ida_nalt.has_ti0(): - - has_ti0(ea) -> bool - - -ida_nalt.has_ti1(): - - has_ti1(ea) -> bool - - -ida_nalt.hide_border(): - - hide_border(ea) - - -ida_nalt.hide_item(): - - hide_item(ea) - - -ida_nalt.is__bnot0(): - - is__bnot0(ea) -> bool - - -ida_nalt.is__bnot1(): - - is__bnot1(ea) -> bool - - -ida_nalt.is__invsign0(): - - is__invsign0(ea) -> bool - - -ida_nalt.is__invsign1(): - - is__invsign1(ea) -> bool - - -ida_nalt.is_align_flow(): - - is_align_flow(ea) -> bool - - -ida_nalt.is_colored_item(): - - is_colored_item(ea) -> bool - - -ida_nalt.is_finally_visible_item(): - - is_finally_visible_item(ea) -> bool - - - Is instruction visible? - - - @param ea (C++: ea_t) - - -ida_nalt.is_fixed_spd(): - - is_fixed_spd(ea) -> bool - - -ida_nalt.is_hidden_border(): - - is_hidden_border(ea) -> bool - - -ida_nalt.is_hidden_item(): - - is_hidden_item(ea) -> bool - - -ida_nalt.is_libitem(): - - is_libitem(ea) -> bool - - -ida_nalt.is_lzero0(): - - is_lzero0(ea) -> bool - - -ida_nalt.is_lzero1(): - - is_lzero1(ea) -> bool - - -ida_nalt.is_noret(): - - is_noret(ea) -> bool - - -ida_nalt.is_notcode(): - - is_notcode(ea) -> bool - - - Is the address marked as not-code? - - - @param ea (C++: ea_t) - - -ida_nalt.is_notproc(): - - is_notproc(ea) -> bool - - -ida_nalt.is_pascal(): - - is_pascal(strtype) -> bool - - -ida_nalt.is_reftype_target_optional(): - - is_reftype_target_optional(type) -> bool - - - Can the target be calculated using operand value? - - - @param type (C++: reftype_t) - - -ida_nalt.is_retfp(): - - is_retfp(ea) -> bool - - -ida_nalt.is_terse_struc(): - - is_terse_struc(ea) -> bool - - -ida_nalt.is_tilcmt(): - - is_tilcmt(ea) -> bool - - -ida_nalt.is_usersp(): - - is_usersp(ea) -> bool - - -ida_nalt.is_userti(): - - is_userti(ea) -> bool - - -ida_nalt.is_visible_item(): - - is_visible_item(ea) -> bool - - - Test visibility of item at given ea. - - - @param ea (C++: ea_t) - - -ida_nalt.is_zstroff(): - - is_zstroff(ea) -> bool - - -ida_nalt.node2ea(): - - node2ea(ndx) -> ea_t - - -class ida_nalt.opinfo_t(): - - Proxy of C++ opinfo_t class - - -ida_nalt.opinfo_t.cd: - opinfo_t_cd_get(self) -> custom_data_type_ids_t - -ida_nalt.opinfo_t.ec: - opinfo_t_ec_get(self) -> enum_const_t - -ida_nalt.opinfo_t.path: - opinfo_t_path_get(self) -> strpath_t - -ida_nalt.opinfo_t.ri: - opinfo_t_ri_get(self) -> refinfo_t - -ida_nalt.opinfo_t.strtype: - opinfo_t_strtype_get(self) -> int32 - -ida_nalt.opinfo_t.tid: - opinfo_t_tid_get(self) -> tid_t - -class ida_nalt.printop_t(): - - Proxy of C++ printop_t class - - -ida_nalt.printop_t.flags: - printop_t_flags_get(self) -> flags_t - -ida_nalt.printop_t.get_ti(): - - get_ti(self) -> opinfo_t - - -ida_nalt.printop_t.is_ti_valid: - printop_t_is_ti_valid_get(self) -> bool - -ida_nalt.printop_t.suspop: - printop_t_suspop_get(self) -> int - -ida_nalt.printop_t.ti: - printop_t_ti_get(self) -> opinfo_t - -class ida_nalt.refinfo_t(): - - Proxy of C++ refinfo_t class - - -ida_nalt.refinfo_t.base: - refinfo_t_base_get(self) -> ea_t - -ida_nalt.refinfo_t.flags: - refinfo_t_flags_get(self) -> uint32 - -ida_nalt.refinfo_t.init(): - - init(self, reft_and_flags, _base=0, _target=BADADDR, _tdelta=0) - - -ida_nalt.refinfo_t.is_custom(): - - is_custom(self) -> bool - - -ida_nalt.refinfo_t.is_pastend(): - - is_pastend(self) -> bool - - -ida_nalt.refinfo_t.is_rvaoff(): - - is_rvaoff(self) -> bool - - -ida_nalt.refinfo_t.is_signed(): - - is_signed(self) -> bool - - -ida_nalt.refinfo_t.is_subtract(): - - is_subtract(self) -> bool - - -ida_nalt.refinfo_t.is_target_optional(): - - is_target_optional(self) -> bool - - -ida_nalt.refinfo_t.no_base_xref(): - - no_base_xref(self) -> bool - - -ida_nalt.refinfo_t.set_type(): - - set_type(self, t) - - -ida_nalt.refinfo_t.target: - refinfo_t_target_get(self) -> ea_t - -ida_nalt.refinfo_t.tdelta: - refinfo_t_tdelta_get(self) -> adiff_t - -ida_nalt.refinfo_t.type(): - - type(self) -> reftype_t - - -ida_nalt.rename_encoding(): - - rename_encoding(idx, encoding) -> bool - - - Change name for an encoding (1-based) - - - @param idx (C++: int) - @param encoding (C++: const char *) - - -ida_nalt.retrieve_input_file_crc32(): - - retrieve_input_file_crc32() -> uint32 - - - Get input file crc32 stored in the database. it can be used to check - that the input file has not been changed. - - -ida_nalt.retrieve_input_file_md5(): - - retrieve_input_file_md5() -> bool - - - Get input file md5. - - -ida_nalt.retrieve_input_file_sha256(): - - retrieve_input_file_sha256() -> bool - - - Get input file sha256. - - -ida_nalt.retrieve_input_file_size(): - - retrieve_input_file_size() -> uint32 - - - Get size of input file in bytes. - - -ida_nalt.set__bnot0(): - - set__bnot0(ea) - - -ida_nalt.set__bnot1(): - - set__bnot1(ea) - - -ida_nalt.set__invsign0(): - - set__invsign0(ea) - - -ida_nalt.set__invsign1(): - - set__invsign1(ea) - - -ida_nalt.set_abits(): - - set_abits(ea, bits) - - -ida_nalt.set_absbase(): - - set_absbase(ea, x) - - -ida_nalt.set_aflags(): - - set_aflags(ea, flags) - - -ida_nalt.set_align_flow(): - - set_align_flow(ea) - - -ida_nalt.set_alignment(): - - set_alignment(ea, x) - - -ida_nalt.set_archive_path(): - - set_archive_path(file) -> bool - - - Set archive file path from which input file was extracted. - - - @param file (C++: const char *) - - -ida_nalt.set_array_parameters(): - - set_array_parameters(ea, _in) - - -ida_nalt.set_asm_inc_file(): - - set_asm_inc_file(file) -> bool - - - Set name of the include file. - - - @param file (C++: const char *) - - -ida_nalt.set_colored_item(): - - set_colored_item(ea) - - -ida_nalt.set_custom_data_type_ids(): - - set_custom_data_type_ids(ea, cdis) - - -ida_nalt.set_default_encoding_idx(): - - set_default_encoding_idx(bpu, idx) -> bool - - - set default encoding for a string type - - @param bpu: the amount of bytes per unit (C++: int) - @param idx: the encoding index idx can be 0 to disable encoding - conversion (C++: int) - - -ida_nalt.set_fixed_spd(): - - set_fixed_spd(ea) - - -ida_nalt.set_gotea(): - - set_gotea(gotea) - - -ida_nalt.set_has_lname(): - - set_has_lname(ea) - - -ida_nalt.set_has_ti(): - - set_has_ti(ea) - - -ida_nalt.set_has_ti0(): - - set_has_ti0(ea) - - -ida_nalt.set_has_ti1(): - - set_has_ti1(ea) - - -ida_nalt.set_ids_modnode(): - - set_ids_modnode(id) - - - Set ids modnode. - - - @param id (C++: netnode) - - -ida_nalt.set_imagebase(): - - set_imagebase(base) - - - Set image base address. - - - @param base (C++: ea_t) - - -ida_nalt.set_item_color(): - - set_item_color(ea, color) - - -ida_nalt.set_libitem(): - - set_libitem(ea) - - -ida_nalt.set_lzero0(): - - set_lzero0(ea) - - -ida_nalt.set_lzero1(): - - set_lzero1(ea) - - -ida_nalt.set_noret(): - - set_noret(ea) - - -ida_nalt.set_notcode(): - - set_notcode(ea) - - - Mark address so that it cannot be converted to instruction. - - - @param ea (C++: ea_t) - - -ida_nalt.set_notproc(): - - set_notproc(ea) - - -ida_nalt.set_op_tinfo(): - - set_op_tinfo(ea, n, tif) -> bool - - -ida_nalt.set_outfile_encoding_idx(): - - set_outfile_encoding_idx(idx) -> bool - - - set encoding to be used when producing files - - @param idx: the encoding index idx can be 0 to use the IDB's default 1 - -byte-per-unit encoding (C++: int) - - -ida_nalt.set_refinfo(): - - set_refinfo(ea, n, type, target=BADADDR, base=0, tdelta=0) -> bool - - -ida_nalt.set_refinfo_ex(): - - set_refinfo_ex(ea, n, ri) -> bool - - -ida_nalt.set_retfp(): - - set_retfp(ea) - - -ida_nalt.set_root_filename(): - - set_root_filename(file) - - - Set full path of the input file. - - - @param file (C++: const char *) - - -ida_nalt.set_source_linnum(): - - set_source_linnum(ea, lnnum) - - -ida_nalt.set_str_type(): - - set_str_type(ea, x) - - -ida_nalt.set_switch_info(): - - set_switch_info(ea, _in) - - -ida_nalt.set_switch_parent(): - - set_switch_parent(ea, x) - - -ida_nalt.set_terse_struc(): - - set_terse_struc(ea) - - -ida_nalt.set_tilcmt(): - - set_tilcmt(ea) - - -ida_nalt.set_tinfo(): - - set_tinfo(ea, tif) -> bool - - -ida_nalt.set_usemodsp(): - - set_usemodsp(ea) - - -ida_nalt.set_usersp(): - - set_usersp(ea) - - -ida_nalt.set_userti(): - - set_userti(ea) - - -ida_nalt.set_visible_item(): - - set_visible_item(ea, visible) - - - Change visibility of item at given ea. - - - @param ea (C++: ea_t) - @param visible (C++: bool) - - -ida_nalt.set_zstroff(): - - set_zstroff(ea) - - -class ida_nalt.strpath_ids_array(): - - Proxy of C++ wrapped_array_t<(tid_t,32)> class - - -class ida_nalt.strpath_t(): - - Proxy of C++ strpath_t class - - -ida_nalt.strpath_t.delta: - strpath_t_delta_get(self) -> adiff_t - -ida_nalt.strpath_t.ids: - - __getIds(self) -> strpath_ids_array - - -ida_nalt.strpath_t.len: - strpath_t_len_get(self) -> int - -class ida_nalt.switch_info_t(): - - Proxy of C++ switch_info_t class - - -ida_nalt.switch_info_t.assign(): - - assign(self, other) - - -ida_nalt.switch_info_t.clear(): - - clear(self) - - -ida_nalt.switch_info_t.custom: - switch_info_t_custom_get(self) -> uval_t - -ida_nalt.switch_info_t.defjump: - switch_info_t_defjump_get(self) -> ea_t - -ida_nalt.switch_info_t.elbase: - switch_info_t_elbase_get(self) -> ea_t - -ida_nalt.switch_info_t.expr_ea: - switch_info_t_expr_ea_get(self) -> ea_t - -ida_nalt.switch_info_t.flags: - switch_info_t_flags_get(self) -> uint32 - -ida_nalt.switch_info_t.get_jrange_vrange(): - - get_jrange_vrange(self, jrange=None, vrange=None) -> bool - - -ida_nalt.switch_info_t.get_jtable_element_size(): - - get_jtable_element_size(self) -> int - - -ida_nalt.switch_info_t.get_jtable_size(): - - get_jtable_size(self) -> int - - -ida_nalt.switch_info_t.get_lowcase(): - - get_lowcase(self) -> sval_t - - -ida_nalt.switch_info_t.get_shift(): - - get_shift(self) -> int - - -ida_nalt.switch_info_t.get_version(): - - get_version(self) -> int - - -ida_nalt.switch_info_t.get_vtable_element_size(): - - get_vtable_element_size(self) -> int - - -ida_nalt.switch_info_t.has_default(): - - has_default(self) -> bool - - -ida_nalt.switch_info_t.has_elbase(): - - has_elbase(self) -> bool - - -ida_nalt.switch_info_t.ind_lowcase: - switch_info_t_ind_lowcase_get(self) -> sval_t - -ida_nalt.switch_info_t.is_custom(): - - is_custom(self) -> bool - - -ida_nalt.switch_info_t.is_indirect(): - - is_indirect(self) -> bool - - -ida_nalt.switch_info_t.is_nolowcase(): - - is_nolowcase(self) -> bool - - -ida_nalt.switch_info_t.is_sparse(): - - is_sparse(self) -> bool - - -ida_nalt.switch_info_t.is_subtract(): - - is_subtract(self) -> bool - - -ida_nalt.switch_info_t.jcases: - switch_info_t_jcases_get(self) -> int - -ida_nalt.switch_info_t.jumps: - switch_info_t_jumps_get(self) -> ea_t - -ida_nalt.switch_info_t.lowcase: - - _get_values_lowcase(self) -> ea_t - - -ida_nalt.switch_info_t.marks: - switch_info_t_marks_get(self) -> eavec_t * - -ida_nalt.switch_info_t.ncases: - switch_info_t_ncases_get(self) -> ushort - -ida_nalt.switch_info_t.regdtype: - switch_info_t_regdtype_get(self) -> op_dtype_t - -ida_nalt.switch_info_t.regnum: - switch_info_t_regnum_get(self) -> int - -ida_nalt.switch_info_t.set_expr(): - - set_expr(self, r, dt) - - -ida_nalt.switch_info_t.set_jtable_element_size(): - - set_jtable_element_size(self, size) - - -ida_nalt.switch_info_t.set_jtable_size(): - - set_jtable_size(self, size) - - -ida_nalt.switch_info_t.set_shift(): - - set_shift(self, shift) - - -ida_nalt.switch_info_t.set_vtable_element_size(): - - set_vtable_element_size(self, size) - - -ida_nalt.switch_info_t.startea: - switch_info_t_startea_get(self) -> ea_t - -ida_nalt.switch_info_t.use_std_table(): - - use_std_table(self) -> bool - - -ida_nalt.switch_info_t.values: - - _get_values_lowcase(self) -> ea_t - - -ida_nalt.switch_info_t__from_ptrval__(): - - switch_info_t__from_ptrval__(ptrval) -> switch_info_t - - -ida_nalt.unhide_border(): - - unhide_border(ea) - - -ida_nalt.unhide_item(): - - unhide_item(ea) - - -ida_nalt.uses_modsp(): - - uses_modsp(ea) -> bool - - -ida_nalt.validate_idb_names(): - - validate_idb_names(do_repair) -> int - - - -=== ida_nalt EPYDOC INJECTIONS === -ida_nalt.AFL_ALIGNFLOW -""" -the previous insn was created for alignment purposes only -""" - -ida_nalt.AFL_BNOT0 -""" -the 1st operand is bitwise negated -""" - -ida_nalt.AFL_BNOT1 -""" -the 2nd operand is bitwise negated -""" - -ida_nalt.AFL_COLORED -""" -has user defined instruction color? -""" - -ida_nalt.AFL_FIXEDSPD -""" -should not be modified by modules - -sp delta value is fixed by analysis. -""" - -ida_nalt.AFL_HIDDEN -""" -the item is hidden completely -""" - -ida_nalt.AFL_LIB -""" -item from the standard library. low level flag, is used to set -'FUNC_LIB' of 'func_t' -""" - -ida_nalt.AFL_LINNUM -""" -has line number info -""" - -ida_nalt.AFL_LNAME -""" -has local name too ( 'FF_NAME' should be set) -""" - -ida_nalt.AFL_LZERO0 -""" -toggle leading zeroes for the 1st operand -""" - -ida_nalt.AFL_LZERO1 -""" -toggle leading zeroes for the 2nd operand -""" - -ida_nalt.AFL_MANUAL -""" -the instruction/data is specified by the user -""" - -ida_nalt.AFL_NOBRD -""" -the code/data border is hidden -""" - -ida_nalt.AFL_NORET -""" -for imported function pointers: doesn't return. this flag can also be -used for any instruction which halts or finishes the program execution -""" - -ida_nalt.AFL_NOTCODE -""" -autoanalysis should not create code here -""" - -ida_nalt.AFL_NOTPROC -""" -autoanalysis should not create proc here -""" - -ida_nalt.AFL_PUBNAM -""" -name is public (inter-file linkage) -""" - -ida_nalt.AFL_RETFP -""" -function returns a floating point value -""" - -ida_nalt.AFL_SIGN0 -""" -code: toggle sign of the 1st operand -""" - -ida_nalt.AFL_SIGN1 -""" -code: toggle sign of the 2nd operand -""" - -ida_nalt.AFL_TERSESTR -""" -terse structure variable display? -""" - -ida_nalt.AFL_TI -""" -has typeinfo? ( 'NSUP_TYPEINFO' ) -""" - -ida_nalt.AFL_TI0 -""" -has typeinfo for operand 0? ( 'NSUP_OPTYPES' ) -""" - -ida_nalt.AFL_TI1 -""" -has typeinfo for operand 1? ( 'NSUP_OPTYPES' +1) -""" - -ida_nalt.AFL_TILCMT -""" -has type comment? (such a comment may be changed by IDA) -""" - -ida_nalt.AFL_USEMODSP -""" -example: pop [rsp+N] - -insn modifes SP and uses the modified value -""" - -ida_nalt.AFL_USERSP -""" -user-defined SP value -""" - -ida_nalt.AFL_USERTI -""" -(comes from the user or type library) - -the type information is definitive. -""" - -ida_nalt.AFL_WEAKNAM -""" -name is weak -""" - -ida_nalt.AFL_ZSTROFF -""" -display struct field name at 0 offset when displaying an offset. -example: \\v{offset somestruct.field_0} if this flag is clear, then -\\v{offset somestruct} -""" - -ida_nalt.AP_ALLOWDUPS -""" -use 'dup' construct -""" - -ida_nalt.AP_ARRAY -""" -create as array (this flag is not stored in database) -""" - -ida_nalt.AP_IDXBASEMASK -""" -mask for number base of the indexes -""" - -ida_nalt.AP_IDXBIN -""" -display indexes in binary -""" - -ida_nalt.AP_IDXDEC -""" -display indexes in decimal -""" - -ida_nalt.AP_IDXHEX -""" -display indexes in hex -""" - -ida_nalt.AP_IDXOCT -""" -display indexes in octal -""" - -ida_nalt.AP_INDEX -""" -display array element indexes as comments -""" - -ida_nalt.AP_SIGNED -""" -treats numbers as signed -""" - -ida_nalt.MAXSTRUCPATH -""" -maximal inclusion depth of unions -""" - -ida_nalt.NALT_ABSBASE -""" -absolute segment location -""" - -ida_nalt.NALT_AFLAGS -""" -additional flags for an item -""" - -ida_nalt.NALT_ALIGN -""" -(should by equal to power of 2) - -alignment value if the item is 'FF_ALIGN' -""" - -ida_nalt.NALT_COLOR -""" -instruction/data background color -""" - -ida_nalt.NALT_CREF_FROM -""" -code xref from, idx: source address -""" - -ida_nalt.NALT_CREF_TO -""" -code xref to, idx: target address -""" - -ida_nalt.NALT_DREF_FROM -""" -data xref from, idx: source address -""" - -ida_nalt.NALT_DREF_TO -""" -data xref to, idx: target address -""" - -ida_nalt.NALT_ENUM0 -""" -enum id for the first operand -""" - -ida_nalt.NALT_ENUM1 -""" -enum id for the second operand -""" - -ida_nalt.NALT_GR_LAYX -""" -group layout ptrs, hash: md5 of 'belongs' -""" - -ida_nalt.NALT_LINNUM -""" -source line number -""" - -ida_nalt.NALT_PURGE -""" -number of bytes purged from the stack when a function is called -indirectly -""" - -ida_nalt.NALT_STRTYPE -""" -type of string item -""" - -ida_nalt.NALT_STRUCT -""" -struct id -""" - -ida_nalt.NALT_SWITCH -""" -switch idiom address (used at jump targets) -""" - -ida_nalt.NSUP_ARGEAS -""" -instructions that initialize call arguments -""" - -ida_nalt.NSUP_ARRAY -""" -array parameters -""" - -ida_nalt.NSUP_CMT -""" -regular comment -""" - -ida_nalt.NSUP_CUSTDT -""" -custom data type id -""" - -ida_nalt.NSUP_FOP1 -""" -forced operand 1 -""" - -ida_nalt.NSUP_FOP2 -""" -forced operand 2 -""" - -ida_nalt.NSUP_FOP3 -""" -forced operand 3 -""" - -ida_nalt.NSUP_FOP4 -""" -forced operand 4 -""" - -ida_nalt.NSUP_FOP5 -""" -forced operand 5 -""" - -ida_nalt.NSUP_FOP6 -""" -forced operand 6 -""" - -ida_nalt.NSUP_FOP7 -""" -forced operand 7 -""" - -ida_nalt.NSUP_FOP8 -""" -forced operand 8 -""" - -ida_nalt.NSUP_FTAILS -""" -function tails or tail referers values NSUP_FTAILS..NSUP_FTAILS+0x1000 -are reserved -""" - -ida_nalt.NSUP_GROUP -""" -graph group information values NSUP_GROUP..NSUP_GROUP+0x1000 are -reserved -""" - -ida_nalt.NSUP_GROUPS -""" -SEG_GRP: pack_dd encoded list of selectors. -""" - -ida_nalt.NSUP_GR_INFO -""" -group node info: color, ea, text -""" - -ida_nalt.NSUP_GR_LAYT -""" -group layouts, idx: layout pointer -""" - -ida_nalt.NSUP_JINFO -""" -jump table info -""" - -ida_nalt.NSUP_LLABEL -""" -local labels. values NSUP_LLABEL..NSUP_LLABEL+0x1000 are reserved -""" - -ida_nalt.NSUP_MANUAL -""" -manual instruction. values NSUP_MANUAL..NSUP_MANUAL+0x1000 are -reserved -""" - -ida_nalt.NSUP_OMFGRP -""" -OMF: group of segments (not used anymore) -""" - -ida_nalt.NSUP_OPTYPES -""" -operand type information. values NSUP_OPTYPES..NSUP_OPTYPES+0x100000 -are reserved -""" - -ida_nalt.NSUP_OREF0 -""" -outer complex reference information for operand 1 -""" - -ida_nalt.NSUP_OREF1 -""" -outer complex reference information for operand 2 -""" - -ida_nalt.NSUP_OREF2 -""" -outer complex reference information for operand 3 -""" - -ida_nalt.NSUP_OREF3 -""" -outer complex reference information for operand 4 -""" - -ida_nalt.NSUP_OREF4 -""" -outer complex reference information for operand 5 -""" - -ida_nalt.NSUP_OREF5 -""" -outer complex reference information for operand 6 -""" - -ida_nalt.NSUP_OREF6 -""" -outer complex reference information for operand 7 -""" - -ida_nalt.NSUP_OREF7 -""" -outer complex reference information for operand 8 -""" - -ida_nalt.NSUP_ORIGFMD -""" -function metadata before lumina information was applied values -NSUP_ORIGFMD..NSUP_ORIGFMD+0x1000 are reserved -""" - -ida_nalt.NSUP_POINTS -""" -SP change points blob (see funcs.cpp). values -NSUP_POINTS..NSUP_POINTS+0x1000 are reserved -""" - -ida_nalt.NSUP_REF0 -""" -complex reference information for operand 1 -""" - -ida_nalt.NSUP_REF1 -""" -complex reference information for operand 2 -""" - -ida_nalt.NSUP_REF2 -""" -complex reference information for operand 3 -""" - -ida_nalt.NSUP_REF3 -""" -complex reference information for operand 4 -""" - -ida_nalt.NSUP_REF4 -""" -complex reference information for operand 5 -""" - -ida_nalt.NSUP_REF5 -""" -complex reference information for operand 6 -""" - -ida_nalt.NSUP_REF6 -""" -complex reference information for operand 7 -""" - -ida_nalt.NSUP_REF7 -""" -complex reference information for operand 8 -""" - -ida_nalt.NSUP_REGARG -""" -register argument type/name descriptions values -NSUP_REGARG..NSUP_REGARG+0x1000 are reserved -""" - -ida_nalt.NSUP_REGVAR -""" -register variables. values NSUP_REGVAR..NSUP_REGVAR+0x1000 are -reserved -""" - -ida_nalt.NSUP_REPCMT -""" -repeatable comment -""" - -ida_nalt.NSUP_SEGTRANS -""" -segment translations -""" - -ida_nalt.NSUP_STROFF0 -""" -stroff: struct path for the first operand -""" - -ida_nalt.NSUP_STROFF1 -""" -stroff: struct path for the second operand -""" - -ida_nalt.NSUP_SWITCH -""" -switch information -""" - -ida_nalt.NSUP_TYPEINFO -""" -type information. values NSUP_TYPEINFO..NSUP_TYPEINFO+0x1000 are -reserved -""" - -ida_nalt.NSUP_XREFPOS -""" -saved xref address and type in the xrefs window -""" - -ida_nalt.PATCH_TAG -""" -Patch netnode tag. -""" - -ida_nalt.REFINFO_CUSTOM -""" -a custom reference the kernel will call \\ph{notify}(ph.custom_offset, -.... that can change all arguments used for calculations. This flag is -useful for custom fixups -""" - -ida_nalt.REFINFO_NOBASE -""" -don't create the base xref implies that the base can be any value nb: -base xrefs are created only if the offset base points to the middle of -a segment -""" - -ida_nalt.REFINFO_PASTEND -""" -reference past an item it may point to an nonexistent address do not -destroy alignment dirs -""" - -ida_nalt.REFINFO_RVAOFF -""" -based reference (rva) 'refinfo_t::base' will be forced to -'get_imagebase()' such a reference is displayed with the \\ash{a_rva} -keyword -""" - -ida_nalt.REFINFO_SIGNEDOP -""" -the operand value is sign-extended (only supported for -REF_OFF8/16/32/64) -""" - -ida_nalt.REFINFO_SUBTRACT -""" -the reference value is subtracted from the base value instead of (as -usual) being added to it -""" - -ida_nalt.REFINFO_TYPE -""" -reference type -""" - -ida_nalt.RIDX_ABINAME -""" -ABI name (processor specific) -""" - -ida_nalt.RIDX_ARCHIVE_PATH -""" -archive file path -""" - -ida_nalt.RIDX_C_MACROS -""" -C predefined macros. -""" - -ida_nalt.RIDX_DBG_BINPATHS -""" -unused (20 indexes) -""" - -ida_nalt.RIDX_DUALOP_GRAPH -""" -Graph text representation options. -""" - -ida_nalt.RIDX_DUALOP_TEXT -""" -Text text representation options. -""" - -ida_nalt.RIDX_FILE_FORMAT_NAME -""" -file format name for loader modules -""" - -ida_nalt.RIDX_GROUPS -""" -segment group information (see init_groups()) -""" - -ida_nalt.RIDX_H_PATH -""" -C header path. -""" - -ida_nalt.RIDX_IDA_VERSION -""" -version of ida which created the database -""" - -ida_nalt.RIDX_INCLUDE -""" -assembler include file name -""" - -ida_nalt.RIDX_MD5 -""" -MD5 of the input file. -""" - -ida_nalt.RIDX_NOTEPAD -""" -notepad blob, occupies 1000 indexes (1MB of text) -""" - -ida_nalt.RIDX_PROBLEMS -""" -problem lists -""" - -ida_nalt.RIDX_SELECTED_EXTLANG -""" -last selected extlang name (from the execute script box) -""" - -ida_nalt.RIDX_SELECTORS -""" -2..63 are for selector_t blob (see init_selectors()) -""" - -ida_nalt.RIDX_SHA256 -""" -SHA256 of the input file. -""" - -ida_nalt.RIDX_SMALL_IDC -""" -Instant IDC statements, blob. -""" - -ida_nalt.RIDX_SMALL_IDC_OLD -""" -Instant IDC statements (obsolete) -""" - -ida_nalt.RIDX_SRCDBG_PATHS -""" -source debug paths, occupies 20 indexes -""" - -ida_nalt.RIDX_SRCDBG_UNDESIRED -""" -user-closed source files, occupies 20 indexes -""" - -ida_nalt.RIDX_STR_ENCODINGS -""" -a list of encodings for the program strings -""" - -ida_nalt.STRENC_DEFAULT -""" -use default encoding for this type (see 'get_default_encoding_idx()' ) -""" - -ida_nalt.STRENC_NONE -""" -force no-conversion encoding -""" - -ida_nalt.STRTYPE_C -""" -Zero-terminated 16bit chars. -""" - -ida_nalt.STRTYPE_C_16 -""" -Zero-terminated 32bit chars. -""" - -ida_nalt.STRTYPE_C_32 -""" -Pascal-style, one-byte length prefix. -""" - -ida_nalt.STRTYPE_LEN2 -""" -Pascal-style, 16bit chars, two-byte length prefix. -""" - -ida_nalt.STRTYPE_LEN2_16 -""" -Pascal-style, four-byte length prefix. -""" - -ida_nalt.STRTYPE_LEN4 -""" -Pascal-style, 16bit chars, four-byte length prefix. -""" - -ida_nalt.STRTYPE_PASCAL -""" -Pascal-style, 16bit chars, one-byte length prefix. -""" - -ida_nalt.STRTYPE_PASCAL_16 -""" -Pascal-style, two-byte length prefix. -""" - -ida_nalt.STRTYPE_TERMCHR -""" -C-style string. - -< Character-terminated string. The termination characters are kept in -the next bytes of string type. -""" - -ida_nalt.SWI_CUSTOM -""" -custom jump table. \\ph{create_switch_xrefs} will be called to create -code xrefs for the table. Custom jump table must be created by the -module (see also 'SWI_STDTBL' ) -""" - -ida_nalt.SWI_DEFRET -""" -return in the default case (defjump==BADADDR) -""" - -ida_nalt.SWI_DEF_IN_TBL -""" -default case is an entry in the jump table. This flag is applicable in -2 cases:The sparse indirect switch (i.e. a switch with a values table) -=""> ==+ 1. The default case entry is the last one -in the table (or the first one in the case of an inversed jump -table).The switch with insns in the jump table. The default case entry -is before the first entry of the table. See also the -find_defjump_from_table() helper function. -""" - -ida_nalt.SWI_ELBASE -""" -segment will be used) - -elbase is present (otherwise the base of the switch -""" - -ida_nalt.SWI_HXNOLOWCASE -""" -lowcase value should not be used by the decompiler (internal flag) -""" - -ida_nalt.SWI_INDIRECT -""" -(for sparse switches) - -value table elements are used as indexes into the jump table -""" - -ida_nalt.SWI_J32 -""" -32-bit jump offsets -""" - -ida_nalt.SWI_JMPINSN -""" -jump table entries are insns. For such entries SHIFT has a different -meaning. It denotes the number of insns in the entry. For example, 0 - -the entry contains the jump to the case, 1 - the entry contains one -insn like a 'mov' and jump to the end of case, and so on. -""" - -ida_nalt.SWI_JMP_INV -""" -for first entry in values table) - -jumptable is inversed. (last entry is -""" - -ida_nalt.SWI_JSIZE -""" -jump offset expansion bit -""" - -ida_nalt.SWI_RESERVED -""" -was: SWI_DEFAULT -""" - -ida_nalt.SWI_SELFREL -""" -jump address is relative to the element not to ELBASE -""" - -ida_nalt.SWI_SEPARATE -""" -create an array of individual elements (otherwise separate items) -""" - -ida_nalt.SWI_SHIFT_MASK -""" -use formula (element< flags_t - - - Append names of struct fields to a name if the name is a struct name. - - @param disp: displacement from the name (C++: adiff_t *) - @param n: number of operand n which the name appears (C++: int) - @param path: 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 (if any). (C++: const tid_t - *) - @param flags: the input flags. they will be returned if the struct - cannot be found. (C++: flags_t) - @param delta: delta to add to displacement (C++: adiff_t) - @param appzero: should append a struct field name if the displacement - is zero? (C++: bool) - @return: flags of the innermost struct member or the input flags - - -ida_name.calc_gtn_flags(): - - Calculate flags for get_ea_name() function - - @param fromaddr: the referring address. May be BADADDR. - @param ea: linear address - - @return: flags - - -ida_name.cleanup_name(): - - cleanup_name(ea, name, flags=0) -> bool - - -ida_name.del_debug_names(): - - del_debug_names(ea1, ea2) - - -ida_name.del_global_name(): - - del_global_name(ea) -> bool - - -ida_name.del_local_name(): - - del_local_name(ea) -> bool - - -ida_name.demangle_name(): - - demangle_name(name, disable_mask, demreq=DQT_FULL) -> int32 - - - Demangle a name. - - @param name: name to demangle (C++: const char *) - @param disable_mask: bits to inhibit parts of demangled name (see - MNG_). by the M_COMPILER bits a specific compiler - can be selected (see MT_). (C++: uint32) - @param demreq (C++: demreq_type_t) - @return: ME_... or MT__ bitmasks from demangle.hpp - - -class ida_name.ea_name_t(): - - Proxy of C++ ea_name_t class - - -ida_name.ea_name_t.ea: - ea_name_t_ea_get(self) -> ea_t - -ida_name.ea_name_t.name: - ea_name_t_name_get(self) -> qstring * - -class ida_name.ea_name_vec_t(): - - Proxy of C++ qvector<(ea_name_t)> class - - -ida_name.ea_name_vec_t.at(): - - at(self, _idx) -> ea_name_t - - -ida_name.ea_name_vec_t.begin(): - - begin(self) -> ea_name_t - begin(self) -> ea_name_t - - -ida_name.ea_name_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_name.ea_name_vec_t.clear(): - - clear(self) - - -ida_name.ea_name_vec_t.empty(): - - empty(self) -> bool - - -ida_name.ea_name_vec_t.end(): - - end(self) -> ea_name_t - end(self) -> ea_name_t - - -ida_name.ea_name_vec_t.erase(): - - erase(self, it) -> ea_name_t - erase(self, first, last) -> ea_name_t - - -ida_name.ea_name_vec_t.extract(): - - extract(self) -> ea_name_t - - -ida_name.ea_name_vec_t.grow(): - - grow(self, x=ea_name_t()) - - -ida_name.ea_name_vec_t.inject(): - - inject(self, s, len) - - -ida_name.ea_name_vec_t.insert(): - - insert(self, it, x) -> ea_name_t - - -ida_name.ea_name_vec_t.pop_back(): - - pop_back(self) - - -ida_name.ea_name_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> ea_name_t - - -ida_name.ea_name_vec_t.qclear(): - - qclear(self) - - -ida_name.ea_name_vec_t.reserve(): - - reserve(self, cnt) - - -ida_name.ea_name_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_name.ea_name_vec_t.size(): - - size(self) -> size_t - - -ida_name.ea_name_vec_t.swap(): - - swap(self, r) - - -ida_name.ea_name_vec_t.truncate(): - - truncate(self) - - -ida_name.extract_name(): - - extract_name(line, x) -> ssize_t - - - Extract a name or address from the specified string. - - @param line: input string (C++: const char *) - @param x: x coordinate of cursor (C++: int) - @return: -1 if cannot extract. otherwise length of the name - - -ida_name.force_name(): - - force_name(ea, name, flags=0) -> bool - - -ida_name.get_colored_demangled_name(): - - get_colored_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring - - -ida_name.get_colored_long_name(): - - get_colored_long_name(ea, gtn_flags=0) -> qstring - - -ida_name.get_colored_name(): - - get_colored_name(ea) -> qstring - - -ida_name.get_colored_short_name(): - - get_colored_short_name(ea, gtn_flags=0) -> qstring - - -ida_name.get_debug_name(): - - get_debug_name(ea_ptr, how) -> ssize_t - - -ida_name.get_debug_name_ea(): - - get_debug_name_ea(name) -> ea_t - - -ida_name.get_debug_names(): - - get_debug_names(names, ea1, ea2) - get_debug_names(ea1, ea2, return_list=False) -> PyObject * - - -ida_name.get_demangled_name(): - - get_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring - - -ida_name.get_ea_name(): - - get_ea_name(ea, gtn_flags=0) -> qstring - - - Get name at the specified address. - - @param ea: linear address (C++: ea_t) - @param gtn_flags: how exactly the name should be retrieved. - combination of bits for get_ea_name() function. - There is a convenience bits (C++: int) - @return: success - - -ida_name.get_long_name(): - - get_long_name(ea, gtn_flags=0) -> qstring - - -ida_name.get_name(): - - get_name(ea) -> qstring - - -ida_name.get_name_base_ea(): - - get_name_base_ea(_from, to) -> ea_t - - - Get address of the name used in the expression for the address - - @param _from: address of the operand which references to the address - (C++: ea_t) - @param to: the referenced address (C++: ea_t) - @return: address of the name used to represent the operand - - -ida_name.get_name_color(): - - get_name_color(_from, ea) -> color_t - - - Calculate flags for 'get_ea_name()' function. - - Get name color. - - @param _from: linear address where the name is used. if not - applicable, then should be BADADDR . The kernel returns - a local name color if the reference is within a - function, i.e. 'from' and 'ea' belong to the same - function. (C++: ea_t) - @param ea: linear address (C++: ea_t) - - -ida_name.get_name_ea(): - - get_name_ea(_from, name) -> ea_t - - - Get address of the name. Dummy names (like byte_xxxx where xxxx are - hex digits) are parsed by this function to obtain the address. The - database is not consulted for them. This function works only with - regular names. - - @param _from: linear address where the name is used. if not - applicable, then should be BADADDR . (C++: ea_t) - @param name: any name in the program or NULL (C++: const char *) - @return: address of the name or BADADDR - - -ida_name.get_name_expr(): - - get_name_expr(_from, n, ea, off, flags=0x0001) -> ssize_t - - - Convert address to name expression (name with a displacement). This - function takes into account fixup information and returns a colored - name expression (in the form +/- ). It also knows about - structure members and arrays. If the specified address doesn't have a - name, a dummy name is generated. - - @param _from: 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 the - operand in the instruction. (C++: ea_t) - @param n: number of referencing operand. for data items specify 0 - (C++: int) - @param ea: address to convert to name expression (C++: ea_t) - @param off: the value of name expression. this parameter is used only - to check that the name expression will have the wanted - value. 'off' may be equal to BADADDR but this is - discouraged because it prohibits checks. (C++: uval_t) - @param flags: Name expression flags (C++: int) - @return: < 0 if address is not valid, no segment or other failure. - otherwise the length of the name expression in characters. - - -ida_name.get_name_value(): - - get_name_value(_from, name) -> int - - - Get value of the name. This function knows about: regular names, - enums, special segments, etc. - - @param _from: linear address where the name is used if not applicable, - then should be BADADDR (C++: ea_t) - @param name: any name in the program or NULL (C++: const char *) - @return: Name value result codes - - -ida_name.get_nice_colored_name(): - - get_nice_colored_name(ea, flags=0) -> ssize_t - - - Get a nice colored name at the specified address. Ex:segment:sub+offse - tsegment:sub:local_labelsegment:labelsegment:addresssegment:address+of - fset - - @param ea (C++: ea_t) - @param flags (C++: int) - @return: the length of the generated name in bytes. - - -ida_name.get_nlist_ea(): - - get_nlist_ea(idx) -> ea_t - - - Get address from the list at 'idx'. - - - @param idx (C++: size_t) - - -ida_name.get_nlist_idx(): - - get_nlist_idx(ea) -> size_t - - - Get index of the name in the listreturns the closest match. may return - idx >= size. - - @param ea (C++: ea_t) - - -ida_name.get_nlist_name(): - - get_nlist_name(idx) -> char const * - - - Get name using idx. - - - @param idx (C++: size_t) - - -ida_name.get_nlist_size(): - - get_nlist_size() -> size_t - - - Get number of names in the list. - - -ida_name.get_short_name(): - - get_short_name(ea, gtn_flags=0) -> qstring - - -ida_name.get_visible_name(): - - get_visible_name(ea, gtn_flags=0) -> qstring - - -ida_name.hide_name(): - - hide_name(ea) - - - Remove name from the list of names - - @param ea: address of the name (C++: ea_t) - - -ida_name.is_ident(): - - is_ident(name) -> bool - - - Is a valid name? (including ::MangleChars) - - - @param name (C++: const char *) - - -ida_name.is_ident_cp(): - - is_ident_cp(cp) -> bool - - - Can a character appear in a name? (present in ::NameChars or - ::MangleChars) - - - @param cp (C++: wchar32_t) - - -ida_name.is_in_nlist(): - - is_in_nlist(ea) -> bool - - - Is name included into names list? - - - @param ea (C++: ea_t) - - -ida_name.is_name_defined_locally(): - - is_name_defined_locally(pfn, name, ignore_name_def, ea1=BADADDR, ea2=BADADDR) -> bool - - - Is the name defined locally in the specified function? - - @param pfn: pointer to function (C++: func_t *) - @param name: name to check (C++: const char *) - @param ignore_name_def: which names to ignore when checking (C++: - ignore_name_def_t) - @param ea1: the starting address of the range inside the function - (optional) (C++: ea_t) - @param ea2: the ending address of the range inside the function - (optional) (C++: ea_t) - @return: true if the name has been defined - - -ida_name.is_public_name(): - - is_public_name(ea) -> bool - - -ida_name.is_strlit_cp(): - - is_strlit_cp(cp, specific_ranges=None) -> bool - - - Can a character appear in a string literal (present in ::StrlitChars) - If 'specific_ranges' are specified, those will be used instead of the - ones corresponding to the current culture (only if ::StrlitChars is - configured to use the current culture) - - @param cp (C++: wchar32_t) - @param specific_ranges (C++: const rangeset_crefvec_t *) - - -ida_name.is_uname(): - - is_uname(name) -> bool - - - Is valid user-specified name? (valid name & !dummy prefix). - - @param name: name to test. may be NULL. (C++: const char *) - - -ida_name.is_valid_cp(): - - is_valid_cp(cp, kind, data=None) -> bool - - - Is the given codepoint acceptable in the given context? - - - @param cp (C++: wchar32_t) - @param kind (C++: nametype_t) - @param data (C++: void *) - - -ida_name.is_valid_typename(): - - is_valid_typename(name) -> bool - - - Is valid type name? - - @param name: name to test. may be NULL. (C++: const char *) - - -ida_name.is_visible_cp(): - - is_visible_cp(cp) -> bool - - - Can a character be displayed in a name? (present in ::NameChars) - - - @param cp (C++: wchar32_t) - - -ida_name.is_weak_name(): - - is_weak_name(ea) -> bool - - -ida_name.make_name_auto(): - - make_name_auto(ea) -> bool - - -ida_name.make_name_non_public(): - - make_name_non_public(ea) - - -ida_name.make_name_non_weak(): - - make_name_non_weak(ea) - - -ida_name.make_name_public(): - - make_name_public(ea) - - -ida_name.make_name_user(): - - make_name_user(ea) -> bool - - -ida_name.make_name_weak(): - - make_name_weak(ea) - - -ida_name.rebuild_nlist(): - - rebuild_nlist() - - - Rebuild names list. - - -ida_name.reorder_dummy_names(): - - reorder_dummy_names() - - - Renumber dummy names. - - -ida_name.set_cp_validity(): - - set_cp_validity(kind, cp, endcp=wchar32_t(-1), valid=True) - - - Mark the given codepoint (or range) as acceptable or unacceptable in - the given context If 'endcp' is not BADCP, it is considered to be the - end of the range: [cp, endcp), and is not included in the range - - @param kind (C++: ucdr_kind_t) - @param cp (C++: wchar32_t) - @param endcp (C++: wchar32_t) - @param valid (C++: bool) - - -ida_name.set_debug_name(): - - set_debug_name(ea, name) -> bool - - -ida_name.set_dummy_name(): - - set_dummy_name(_from, ea) -> bool - - - Give an autogenerated (dummy) name. Autogenerated names have special - prefixes (loc_...). - - @param _from: linear address of the operand which references to the - address (C++: ea_t) - @param ea: linear address (C++: ea_t) - - -ida_name.set_name(): - - set_name(ea, name, flags=0) -> bool - - - Set or delete name of an item at the specified address. An item can be - anything: instruction, function, data byte, word, string, structure, - etc... Include name into the list of names. - - @param ea: linear address. do nothing if ea is not valid (return 0). - tail bytes can't have names. (C++: ea_t) - @param name: new name. NULL: do nothing (return 0). "" : delete - name. otherwise this is a new name. (C++: const char *) - @param flags: Set name flags . If a bit is not specified, then the - corresponding action is not performed and the name will - retain the same bits as before calling this function. - For new names, default is: non-public, non-weak, non- - auto. (C++: int) - - -ida_name.show_name(): - - show_name(ea) - - - Insert name to the list of names. - - - @param ea (C++: ea_t) - - -ida_name.validate_name(): - - validate_name(name, type, flags=0) -> PyObject * - - - Validate a name. This function replaces all invalid characters in the - name with SUBSTCHAR. However, it will return false if name is valid - but not allowed to be an identifier (is a register name). - - @param name: ptr to name. the name will be modified (C++: qstring *) - @param type: the type of name we want to validate (C++: nametype_t) - @param flags: see SN_* . Only SN_IDBENC is currently considered (C++: - int) - @return: success - - - -=== ida_name EPYDOC INJECTIONS === -ida_name.FUNC_IMPORT_PREFIX -""" -Name prefix used by IDA for the imported functions. -""" - -ida_name.GETN_APPZERO -""" -append a struct field name if the field offset is zero? - -meaningful only if the name refers to a structure. -""" - -ida_name.GETN_NODUMMY -""" -do not create a new dummy name but pretend it exists -""" - -ida_name.GETN_NOFIXUP -""" -ignore the fixup information when producing the name -""" - -ida_name.GNCN_NOCOLOR -""" -generate an uncolored name -""" - -ida_name.GNCN_NODBGNM -""" -don't use debug names -""" - -ida_name.GNCN_NOFUNC -""" -don't generate funcname+... expressions -""" - -ida_name.GNCN_NOLABEL -""" -don't generate labels -""" - -ida_name.GNCN_NOSEG -""" -ignore the segment prefix when producing the name -""" - -ida_name.GNCN_PREFDBG -""" -if using debug names, prefer debug names over function names -""" - -ida_name.GNCN_REQFUNC -""" -return 0 if the address does not belong to a function -""" - -ida_name.GNCN_REQNAME -""" -return 0 if the address can only be represented as a hex number -""" - -ida_name.GNCN_SEGNUM -""" -segment part is displayed as a hex number -""" - -ida_name.GNCN_SEG_FUNC -""" -generate both segment and function names (default is to omit segment -name if a function name is present) -""" - -ida_name.GN_COLORED -""" -return colored name -""" - -ida_name.GN_DEMANGLED -""" -return demangled name -""" - -ida_name.GN_ISRET -""" -for dummy names: use retloc -""" - -ida_name.GN_LOCAL -""" -try to get local name first; if failed, get global -""" - -ida_name.GN_LONG -""" -use long form of demangled name -""" - -ida_name.GN_NOT_DUMMY -""" -do not return a dummy name -""" - -ida_name.GN_NOT_ISRET -""" -for dummy names: do not use retloc -""" - -ida_name.GN_SHORT -""" -use short form of demangled name -""" - -ida_name.GN_STRICT -""" -fail if cannot demangle -""" - -ida_name.GN_VISIBLE -""" -replace forbidden characters by SUBSTCHAR -""" - -ida_name.MAXNAMELEN -""" -Maximum length of a name in IDA (with the trailing zero) -""" - -ida_name.NT_ABS -""" -name is absolute symbol ( 'SEG_ABSSYM' ) -""" - -ida_name.NT_BMASK -""" -name is a bit group mask name -""" - -ida_name.NT_BYTE -""" -name is byte name (regular name) -""" - -ida_name.NT_ENUM -""" -name is symbolic constant -""" - -ida_name.NT_LOCAL -""" -name is local label -""" - -ida_name.NT_NONE -""" -name doesn't exist or has no value -""" - -ida_name.NT_REGVAR -""" -name is a renamed register (*value is idx into pfn->regvars) -""" - -ida_name.NT_SEG -""" -name is segment or segment register name -""" - -ida_name.NT_STKVAR -""" -name is stack variable name -""" - -ida_name.NT_STROFF -""" -name is structure member -""" - -ida_name.SN_AUTO -""" -if set, make name autogenerated -""" - -ida_name.SN_DELTAIL -""" -delete the hindering item - -if name cannot be set because of a tail byte, -""" - -ida_name.SN_FORCE -""" -if the specified name is already present in the database, try -variations with a numerical suffix like "_123" -""" - -ida_name.SN_IDBENC -""" -the name is given in the IDB encoding; non-ASCII bytes will be decoded -accordingly. Specifying SN_IDBENC also implies SN_NODUMMY -""" - -ida_name.SN_LOCAL -""" -create local name. a function should exist. local names can't be -public or weak. also they are not included into the list of names they -can't have dummy prefixes. -""" - -ida_name.SN_NOCHECK -""" -Don't fail if the name contains invalid characters. If this bit is -clear, all invalid chars (those !is_ident_cp()) will be replaced by -SUBSTCHAR List of valid characters is defined in ida.cfg -""" - -ida_name.SN_NODUMMY -""" -automatically prepend the name with '_' if it begins with a dummy -suffix such as 'sub_'. See also SN_IDBENC -""" - -ida_name.SN_NOLIST -""" -if set, exclude name from the list. if not set, then include the name -into the list (however, if other bits are set, the name might be -immediately excluded from the list). -""" - -ida_name.SN_NON_AUTO -""" -if set, make name non-autogenerated -""" - -ida_name.SN_NON_PUBLIC -""" -if set, make name non-public -""" - -ida_name.SN_NON_WEAK -""" -if set, make name non-weak -""" - -ida_name.SN_NOWARN -""" -don't display a warning if failed -""" - -ida_name.SN_PUBLIC -""" -if set, make name public -""" - -ida_name.SN_WEAK -""" -if set, make name weak -""" -=== ida_name EPYDOC INJECTIONS END === -ida_netnode.exist(): - - exist(n) -> bool - - -class ida_netnode.netnode(): - - Proxy of C++ netnode class - - -ida_netnode.netnode.altdel(): - - altdel(self, alt, tag=atag) -> bool - altdel(self) -> bool - - -ida_netnode.netnode.altdel_all(): - - altdel_all(self, tag) -> bool - - -ida_netnode.netnode.altdel_ea(): - - altdel_ea(self, ea, tag=atag) -> bool - - -ida_netnode.netnode.altdel_idx8(): - - altdel_idx8(self, alt, tag) -> bool - - -ida_netnode.netnode.altfirst(): - - altfirst(self, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altfirst_idx8(): - - altfirst_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.altlast(): - - altlast(self, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altlast_idx8(): - - altlast_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.altnext(): - - altnext(self, cur, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altnext_idx8(): - - altnext_idx8(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.altprev(): - - altprev(self, cur, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altprev_idx8(): - - altprev_idx8(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.altset(): - - altset(self, alt, value, tag=atag) -> bool - - -ida_netnode.netnode.altset_ea(): - - altset_ea(self, ea, value, tag=atag) -> bool - - -ida_netnode.netnode.altset_idx8(): - - altset_idx8(self, alt, val, tag) -> bool - - -ida_netnode.netnode.altshift(): - - altshift(self, _from, to, size, tag=atag) -> size_t - - -ida_netnode.netnode.altval(): - - altval(self, alt, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altval_ea(): - - altval_ea(self, ea, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altval_idx8(): - - altval_idx8(self, alt, tag) -> nodeidx_t - - -ida_netnode.netnode.blobsize(): - - blobsize(self, _start, tag) -> size_t - - -ida_netnode.netnode.blobsize_ea(): - - blobsize_ea(self, ea, tag) -> size_t - - -ida_netnode.netnode.chardel(): - - chardel(self, alt, tag) -> bool - - -ida_netnode.netnode.chardel_ea(): - - chardel_ea(self, ea, tag) -> bool - - -ida_netnode.netnode.chardel_idx8(): - - chardel_idx8(self, alt, tag) -> bool - - -ida_netnode.netnode.charfirst(): - - charfirst(self, tag) -> nodeidx_t - - -ida_netnode.netnode.charfirst_idx8(): - - charfirst_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.charlast(): - - charlast(self, tag) -> nodeidx_t - - -ida_netnode.netnode.charlast_idx8(): - - charlast_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.charnext(): - - charnext(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.charnext_idx8(): - - charnext_idx8(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.charprev(): - - charprev(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.charprev_idx8(): - - charprev_idx8(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.charset(): - - charset(self, alt, val, tag) -> bool - - -ida_netnode.netnode.charset_ea(): - - charset_ea(self, ea, val, tag) -> bool - - -ida_netnode.netnode.charset_idx8(): - - charset_idx8(self, alt, val, tag) -> bool - - -ida_netnode.netnode.charshift(): - - charshift(self, _from, to, size, tag) -> size_t - - -ida_netnode.netnode.charval(): - - charval(self, alt, tag) -> uchar - - -ida_netnode.netnode.charval_ea(): - - charval_ea(self, ea, tag) -> uchar - - -ida_netnode.netnode.charval_idx8(): - - charval_idx8(self, alt, tag) -> uchar - - -ida_netnode.netnode.copyto(): - - copyto(self, target, count=1) -> size_t - - -ida_netnode.netnode.create(): - - create(self, _name, namlen=0) -> bool - create(self) -> bool - - -ida_netnode.netnode.delblob(): - - delblob(self, _start, tag) -> int - - -ida_netnode.netnode.delblob_ea(): - - delblob_ea(self, ea, tag) -> int - - -ida_netnode.netnode.delvalue(): - - delvalue(self) -> bool - - -ida_netnode.netnode.eadel(): - - eadel(self, ea, tag) -> bool - - -ida_netnode.netnode.eadel_idx8(): - - eadel_idx8(self, idx, tag) -> bool - - -ida_netnode.netnode.eaget(): - - eaget(self, ea, tag) -> ea_t - - -ida_netnode.netnode.eaget_idx(): - - eaget_idx(self, idx, tag) -> ea_t - - -ida_netnode.netnode.eaget_idx8(): - - eaget_idx8(self, idx, tag) -> ea_t - - -ida_netnode.netnode.easet(): - - easet(self, ea, addr, tag) -> bool - - -ida_netnode.netnode.easet_idx(): - - easet_idx(self, idx, addr, tag) -> bool - - -ida_netnode.netnode.easet_idx8(): - - easet_idx8(self, idx, addr, tag) -> bool - - -ida_netnode.netnode.end(): - - end(self) -> bool - - -ida_netnode.netnode.get_name(): - - get_name(self) -> ssize_t - - -ida_netnode.netnode.getblob(): - - getblob(self, start, tag) -> PyObject * - - -ida_netnode.netnode.getblob_ea(): - - getblob_ea(self, ea, tag) -> PyObject * - - -ida_netnode.netnode.getclob(): - - getclob(self, start, tag) -> PyObject * - - -ida_netnode.netnode.hashdel(): - - hashdel(self, idx, tag=htag) -> bool - - -ida_netnode.netnode.hashdel_all(): - - hashdel_all(self, tag=htag) -> bool - - -ida_netnode.netnode.hashfirst(): - - hashfirst(self, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashlast(): - - hashlast(self, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashnext(): - - hashnext(self, idx, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashprev(): - - hashprev(self, idx, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashset(): - - hashset(self, idx, value, tag=htag) -> bool - - -ida_netnode.netnode.hashset_buf(): - - hashset_buf(self, idx, py_str, tag=htag) -> bool - - -ida_netnode.netnode.hashset_idx(): - - hashset_idx(self, idx, value, tag=htag) -> bool - - -ida_netnode.netnode.hashstr(): - - hashstr(self, idx, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashstr_buf(): - - hashstr_buf(self, idx, tag=htag) -> PyObject * - - -ida_netnode.netnode.hashval(): - - hashval(self, idx, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashval_long(): - - hashval_long(self, idx, tag=htag) -> nodeidx_t - - -ida_netnode.netnode.index(): - - index(self) -> nodeidx_t - - -ida_netnode.netnode.kill(): - - kill(self) - - -ida_netnode.netnode.long_value(): - - long_value(self) -> nodeidx_t - - -ida_netnode.netnode.lower_bound(): - - lower_bound(self, cur, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.lower_bound_ea(): - - lower_bound_ea(self, ea, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.lower_bound_idx8(): - - lower_bound_idx8(self, alt, tag) -> nodeidx_t - - -ida_netnode.netnode.moveto(): - - moveto(self, target, count=1) -> size_t - - -ida_netnode.netnode.next(): - - next(self) -> bool - - -ida_netnode.netnode.prev(): - - prev(self) -> bool - - -ida_netnode.netnode.rename(): - - rename(self, newname, namlen=0) -> bool - - -ida_netnode.netnode.set(): - - set(self, value) -> bool - - -ida_netnode.netnode.set_long(): - - set_long(self, x) -> bool - - -ida_netnode.netnode.setblob(): - - setblob(self, buf, _start, tag) -> bool - - -ida_netnode.netnode.setblob_ea(): - - setblob_ea(self, buf, ea, tag) -> bool - - -ida_netnode.netnode.start(): - - start(self) -> bool - - -ida_netnode.netnode.supdel(): - - supdel(self, alt, tag=stag) -> bool - supdel(self) -> bool - - -ida_netnode.netnode.supdel_all(): - - supdel_all(self, tag) -> bool - - -ida_netnode.netnode.supdel_ea(): - - supdel_ea(self, ea, tag=stag) -> bool - - -ida_netnode.netnode.supdel_idx8(): - - supdel_idx8(self, alt, tag) -> bool - - -ida_netnode.netnode.supdel_range(): - - supdel_range(self, idx1, idx2, tag) -> int - - -ida_netnode.netnode.supdel_range_idx8(): - - supdel_range_idx8(self, idx1, idx2, tag) -> int - - -ida_netnode.netnode.supfirst(): - - supfirst(self, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.supfirst_idx8(): - - supfirst_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.suplast(): - - suplast(self, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.suplast_idx8(): - - suplast_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.supnext(): - - supnext(self, cur, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.supnext_idx8(): - - supnext_idx8(self, alt, tag) -> nodeidx_t - - -ida_netnode.netnode.supprev(): - - supprev(self, cur, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.supprev_idx8(): - - supprev_idx8(self, alt, tag) -> nodeidx_t - - -ida_netnode.netnode.supset(): - - supset(self, alt, value, tag=stag) -> bool - - -ida_netnode.netnode.supset_ea(): - - supset_ea(self, ea, value, tag=stag) -> bool - - -ida_netnode.netnode.supset_idx8(): - - supset_idx8(self, alt, value, tag) -> bool - - -ida_netnode.netnode.supshift(): - - supshift(self, _from, to, size, tag=stag) -> size_t - - -ida_netnode.netnode.supstr(): - - supstr(self, alt, tag=stag) -> ssize_t - - -ida_netnode.netnode.supstr_ea(): - - supstr_ea(self, ea, tag=stag) -> ssize_t - - -ida_netnode.netnode.supstr_idx8(): - - supstr_idx8(self, alt, tag) -> ssize_t - - -ida_netnode.netnode.supval(): - - supval(self, alt, tag=stag) -> ssize_t - - -ida_netnode.netnode.supval_ea(): - - supval_ea(self, ea, tag=stag) -> ssize_t - - -ida_netnode.netnode.supval_idx8(): - - supval_idx8(self, alt, tag) -> ssize_t - - -ida_netnode.netnode.valobj(): - - valobj(self) -> ssize_t - - -ida_netnode.netnode.valstr(): - - valstr(self) -> ssize_t - - -ida_netnode.netnode.value_exists(): - - value_exists(self) -> bool - - - -=== ida_netnode EPYDOC INJECTIONS === -ida_netnode.BADNODE -""" -A number to represent a bad netnode reference. -""" -=== ida_netnode EPYDOC INJECTIONS END === -ida_offset.add_refinfo_dref(): - - add_refinfo_dref(insn, _from, ri, opval, type, opoff) -> ea_t - - - Add xrefs for a reference from the given instruction (\insn_t{ea}). - This function creates a cross references to the target and the base. - 'insn_t::add_off_drefs()' calls this function to create xrefs for - 'offset' operand. - - @param insn: the referencing instruction (C++: const insn_t &) - @param _from: the referencing instruction/data address (C++: ea_t) - @param ri: reference info block from the database (C++: const - refinfo_t &) - @param opval: operand value (usually op_t::value or op_t::addr ) - (C++: adiff_t) - @param type: type of xref (C++: dref_t) - @param opoff: offset of the operand from the start of instruction - (C++: int) - @return: the target address of the reference - - -ida_offset.calc_basevalue(): - - calc_basevalue(target, base) -> ea_t - - - Calculate the value of the reference base. - - - @param target (C++: ea_t) - @param base (C++: ea_t) - - -ida_offset.calc_offset_base(): - - calc_offset_base(ea, n) -> ea_t - - - Try to calculate the offset base This function takes into account the - fixup information, current ds and cs values. - - @param ea: the referencing instruction/data address (C++: ea_t) - @param n: operand number 0: first operand 1: other operand (C++: - int) - @return: output base address or BADADDR - - -ida_offset.calc_probable_base_by_value(): - - calc_probable_base_by_value(ea, off) -> ea_t - - - Try to calculate the offset base. 2 bases are checked: current ds and - cs. If fails, return 'BADADDR' - - @param ea (C++: ea_t) - @param off (C++: uval_t) - - -ida_offset.calc_reference_data(): - - calc_reference_data(target, base, _from, ri, opval) -> bool - - - Calculate the target and base addresses of an offset expression. The - calculated target and base addresses are returned in the locations - pointed by 'base' and 'target'. In case 'ri.base' is 'BADADDR' , the - function calculates the offset base address from the referencing - instruction/data address. The target address is copied from ri.target. - If ri.target is 'BADADDR' then the target is calculated using the base - address and 'opval'. This function also checks if 'opval' matches the - full value of the reference and takes in account the memory-mapping. - - @param target: output target address (C++: ea_t *) - @param base: output base address (C++: ea_t *) - @param _from: the referencing instruction/data address (C++: ea_t) - @param ri: reference info block from the database (C++: const - refinfo_t &) - @param opval: operand value (usually op_t::value or op_t::addr ) - (C++: adiff_t) - @return: success - - -ida_offset.calc_target(): - - calc_target(_from, opval, ri) -> ea_t - calc_target(_from, ea, n, opval) -> ea_t - - - Calculates the target, using the provided 'refinfo_t' . - - - @param _from (C++: ea_t) - @param opval (C++: adiff_t) - @param ri (C++: const refinfo_t &) - - -ida_offset.can_be_off32(): - - can_be_off32(ea) -> ea_t - - - Does the specified address contain a valid OFF32 value?. For symbols - in special segments the displacement is not taken into account. If - yes, then the target address of OFF32 will be returned. If not, then - 'BADADDR' is returned. - - @param ea (C++: ea_t) - - -ida_offset.get_default_reftype(): - - get_default_reftype(ea) -> reftype_t - - - Get default reference type depending on the segment. - - @param ea (C++: ea_t) - @return: one of REF_OFF8 , REF_OFF16 , REF_OFF32 - - -ida_offset.get_offbase(): - - get_offbase(ea, n) -> ea_t - - - Get offset base value - - @param ea: linear address (C++: ea_t) - @param n: number of operand (C++: int) - @return: offset base or BADADDR - - -ida_offset.get_offset_expr(): - - get_offset_expr(ea, n, ri, _from, offset, getn_flags=0) -> int - - - See 'get_offset_expression()' - - - @param ea (C++: ea_t) - @param n (C++: int) - @param ri (C++: const refinfo_t &) - @param _from (C++: ea_t) - @param offset (C++: adiff_t) - @param getn_flags (C++: int) - - -ida_offset.get_offset_expression(): - - get_offset_expression(ea, n, _from, offset, getn_flags=0) -> int - - - Get offset expression (in the form "offset name+displ"). This function - uses offset translation function (\ph{translate}) if your IDP module - has such a function. Translation function is used to map linear - addresses in the program (only for offsets).Example: suppose we have - instruction at linear address 0x00011000: {mov ax, [bx+7422h]} and - at ds:7422h: {array dw ...} We want to represent the second operand - with an offset expression, so then we call: { - get_offset_expresion(0x001100, 1, 0x001102, 0x7422, buf); | | | | | | - | | | +output buffer | | | +value of offset expression | | +address - offset value in the instruction | +the second operand +address of - instruction } and the function will return a colored string: {offset - array} - - @param ea: start of instruction or data with the offset expression - (C++: ea_t) - @param n: number of operand (may be ORed with OPND_OUTER ) 0: first - operand 1: second operand (C++: int) - @param _from: 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. (C++: ea_t) - @param offset: value of operand or its part. The function will return - text representation of this value as offset expression. - (C++: adiff_t) - @param getn_flags: combination of: GETN_APPZERO : meaningful only if - the name refers to a structure. appends the struct - field name if the field offset is zero - GETN_NODUMMY : do not generate dummy names for the - expression but pretend they already exist (useful - to verify that the offset expression can be - represented) (C++: int) - - -ida_offset.op_offset(): - - op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int - - - See 'op_offset_ex()' - - - @param ea (C++: ea_t) - @param n (C++: int) - @param type (C++: reftype_t) - @param target (C++: ea_t) - @param base (C++: ea_t) - @param tdelta (C++: adiff_t) - - -ida_offset.op_offset_ex(): - - op_offset_ex(ea, n, ri) -> int - - - Convert operand to a reference. To delete an offset, use - 'clr_op_type()' function. - - @param ea: linear address. if 'ea' has unexplored bytes, try to - convert them to no segment: fail 16bit segment: to - 16bit word data 32bit segment: to dword (C++: ea_t) - @param n: number of operand (may be ORed with OPND_OUTER ) 0: first - 1: second 2: third OPND_MASK : all operands (C++: int) - @param ri: reference information (C++: const refinfo_t *) - @return: success - - -ida_offset.op_plain_offset(): - - op_plain_offset(ea, n, base) -> bool - - - Convert operand to a reference with the default reference type. - - - @param ea (C++: ea_t) - @param n (C++: int) - @param base (C++: ea_t) - - -class ida_pro.boolvec_t(): - - Proxy of C++ qvector<(bool)> class - - -ida_pro.boolvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.boolvec_t.append(): - - push_back(self, x) - push_back(self) -> bool & - - -ida_pro.boolvec_t.at(): - - __getitem__(self, i) -> bool const & - - -ida_pro.boolvec_t.begin(): - - begin(self) -> qvector< bool >::iterator - begin(self) -> qvector< bool >::const_iterator - - -ida_pro.boolvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.boolvec_t.clear(): - - clear(self) - - -ida_pro.boolvec_t.empty(): - - empty(self) -> bool - - -ida_pro.boolvec_t.end(): - - end(self) -> qvector< bool >::iterator - end(self) -> qvector< bool >::const_iterator - - -ida_pro.boolvec_t.erase(): - - erase(self, it) -> qvector< bool >::iterator - erase(self, first, last) -> qvector< bool >::iterator - - -ida_pro.boolvec_t.extract(): - - extract(self) -> bool * - - -ida_pro.boolvec_t.find(): - - find(self, x) -> qvector< bool >::iterator - find(self, x) -> qvector< bool >::const_iterator - - -ida_pro.boolvec_t.grow(): - - grow(self, x=bool()) - - -ida_pro.boolvec_t.has(): - - has(self, x) -> bool - - -ida_pro.boolvec_t.inject(): - - inject(self, s, len) - - -ida_pro.boolvec_t.insert(): - - insert(self, it, x) -> qvector< bool >::iterator - - -ida_pro.boolvec_t.pop_back(): - - pop_back(self) - - -ida_pro.boolvec_t.push_back(): - - push_back(self, x) - push_back(self) -> bool & - - -ida_pro.boolvec_t.qclear(): - - qclear(self) - - -ida_pro.boolvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.boolvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.boolvec_t.size(): - - size(self) -> size_t - - -ida_pro.boolvec_t.swap(): - - swap(self, r) - - -ida_pro.boolvec_t.truncate(): - - truncate(self) - - -class ida_pro.channel_redir_t(): - - Proxy of C++ channel_redir_t class - - -ida_pro.channel_redir_t.fd: - channel_redir_t_fd_get(self) -> int - -ida_pro.channel_redir_t.file: - channel_redir_t_file_get(self) -> qstring * - -ida_pro.channel_redir_t.flags: - channel_redir_t_flags_get(self) -> int - -ida_pro.channel_redir_t.is_append(): - - is_append(self) -> bool - - -ida_pro.channel_redir_t.is_input(): - - is_input(self) -> bool - - -ida_pro.channel_redir_t.is_output(): - - is_output(self) -> bool - - -ida_pro.channel_redir_t.is_quoted(): - - is_quoted(self) -> bool - - -ida_pro.channel_redir_t.length: - channel_redir_t_length_get(self) -> int - -ida_pro.channel_redir_t.start: - channel_redir_t_start_get(self) -> int - -ida_pro.check_process_exit(): - - check_process_exit(handle, exit_code, msecs=-1) -> int - - - Check whether process has terminated or not. - - @param handle: process handle to wait for (C++: void *) - @param exit_code: pointer to the buffer for the exit code (C++: int *) - - -ida_pro.clear_bits(): - - clear_bits(bitmap, low, high) - - - Clear bits between [low, high) in 'bitmap'. - - - @param bitmap (C++: uchar *) - @param low (C++: size_t) - @param high (C++: size_t) - - -class ida_pro.ea_array(): - - Proxy of C++ ea_array class - - -ida_pro.ea_array.cast(): - - cast(self) -> ea_t * - - -ida_pro.ea_array.frompointer(): - - frompointer(t) -> ea_array - - -ida_pro.ea_array_frompointer(): - - ea_array_frompointer(t) -> ea_array - - -class ida_pro.ea_pointer(): - - Proxy of C++ ea_pointer class - - -ida_pro.ea_pointer.assign(): - - assign(self, value) - - -ida_pro.ea_pointer.cast(): - - cast(self) -> ea_t * - - -ida_pro.ea_pointer.frompointer(): - - frompointer(t) -> ea_pointer - - -ida_pro.ea_pointer.value(): - - value(self) -> ea_t - - -ida_pro.ea_pointer_frompointer(): - - ea_pointer_frompointer(t) -> ea_pointer - - -class ida_pro.eavec_t(): - - Proxy of C++ qvector<(unsigned-ea-like-numeric-type)> class - - -ida_pro.eavec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.eavec_t.append(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_pro.eavec_t.at(): - - __getitem__(self, i) -> unsigned-ea-like-numeric-type & - - -ida_pro.eavec_t.begin(): - - begin(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - begin(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.eavec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.eavec_t.clear(): - - clear(self) - - -ida_pro.eavec_t.empty(): - - empty(self) -> bool - - -ida_pro.eavec_t.end(): - - end(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - end(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.eavec_t.erase(): - - erase(self, it) -> qvector< unsigned-ea-like-numeric-type >::iterator - erase(self, first, last) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_pro.eavec_t.extract(): - - extract(self) -> unsigned-ea-like-numeric-type * - - -ida_pro.eavec_t.find(): - - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.eavec_t.has(): - - has(self, x) -> bool - - -ida_pro.eavec_t.inject(): - - inject(self, s, len) - - -ida_pro.eavec_t.insert(): - - insert(self, it, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_pro.eavec_t.pop_back(): - - pop_back(self) - - -ida_pro.eavec_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_pro.eavec_t.qclear(): - - qclear(self) - - -ida_pro.eavec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.eavec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.eavec_t.size(): - - size(self) -> size_t - - -ida_pro.eavec_t.swap(): - - swap(self, r) - - -ida_pro.eavec_t.truncate(): - - truncate(self) - - -ida_pro.extend_sign(): - - extend_sign(v, nbytes, sign_extend) -> uint64 - - - Sign-, or zero-extend the value 'v' to occupy 64 bits. The value 'v' - is considered to be of size 'nbytes'. - - @param v (C++: uint64) - @param nbytes (C++: int) - @param sign_extend (C++: bool) - - -class ida_pro.instant_dbgopts_t(): - - Proxy of C++ instant_dbgopts_t class - - -ida_pro.instant_dbgopts_t.attach: - instant_dbgopts_t_attach_get(self) -> bool - -ida_pro.instant_dbgopts_t.debmod: - instant_dbgopts_t_debmod_get(self) -> qstring * - -ida_pro.instant_dbgopts_t.env: - instant_dbgopts_t_env_get(self) -> qstring * - -ida_pro.instant_dbgopts_t.event_id: - instant_dbgopts_t_event_id_get(self) -> int - -ida_pro.instant_dbgopts_t.host: - instant_dbgopts_t_host_get(self) -> qstring * - -ida_pro.instant_dbgopts_t.pid: - instant_dbgopts_t_pid_get(self) -> int - -ida_pro.instant_dbgopts_t.port: - instant_dbgopts_t_port_get(self) -> int - -class ida_pro.int64vec_t(): - - Proxy of C++ qvector<(long long)> class - - -ida_pro.int64vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.int64vec_t.append(): - - push_back(self, x) - push_back(self) -> long long & - - -ida_pro.int64vec_t.at(): - - __getitem__(self, i) -> long long const & - - -ida_pro.int64vec_t.begin(): - - begin(self) -> qvector< long long >::iterator - begin(self) -> qvector< long long >::const_iterator - - -ida_pro.int64vec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.int64vec_t.clear(): - - clear(self) - - -ida_pro.int64vec_t.empty(): - - empty(self) -> bool - - -ida_pro.int64vec_t.end(): - - end(self) -> qvector< long long >::iterator - end(self) -> qvector< long long >::const_iterator - - -ida_pro.int64vec_t.erase(): - - erase(self, it) -> qvector< long long >::iterator - erase(self, first, last) -> qvector< long long >::iterator - - -ida_pro.int64vec_t.extract(): - - extract(self) -> long long * - - -ida_pro.int64vec_t.find(): - - find(self, x) -> qvector< long long >::iterator - find(self, x) -> qvector< long long >::const_iterator - - -ida_pro.int64vec_t.has(): - - has(self, x) -> bool - - -ida_pro.int64vec_t.inject(): - - inject(self, s, len) - - -ida_pro.int64vec_t.insert(): - - insert(self, it, x) -> qvector< long long >::iterator - - -ida_pro.int64vec_t.pop_back(): - - pop_back(self) - - -ida_pro.int64vec_t.push_back(): - - push_back(self, x) - push_back(self) -> long long & - - -ida_pro.int64vec_t.qclear(): - - qclear(self) - - -ida_pro.int64vec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.int64vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.int64vec_t.size(): - - size(self) -> size_t - - -ida_pro.int64vec_t.swap(): - - swap(self, r) - - -ida_pro.int64vec_t.truncate(): - - truncate(self) - - -class ida_pro.int_pointer(): - - Proxy of C++ int_pointer class - - -ida_pro.int_pointer.assign(): - - assign(self, value) - - -ida_pro.int_pointer.cast(): - - cast(self) -> int * - - -ida_pro.int_pointer.frompointer(): - - frompointer(t) -> int_pointer - - -ida_pro.int_pointer.value(): - - value(self) -> int - - -ida_pro.int_pointer_frompointer(): - - int_pointer_frompointer(t) -> int_pointer - - -class ida_pro.intvec_t(): - - Proxy of C++ qvector<(int)> class - - -ida_pro.intvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.intvec_t.append(): - - push_back(self, x) - push_back(self) -> int & - - -ida_pro.intvec_t.at(): - - __getitem__(self, i) -> int const & - - -ida_pro.intvec_t.begin(): - - begin(self) -> qvector< int >::iterator - begin(self) -> qvector< int >::const_iterator - - -ida_pro.intvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.intvec_t.clear(): - - clear(self) - - -ida_pro.intvec_t.empty(): - - empty(self) -> bool - - -ida_pro.intvec_t.end(): - - end(self) -> qvector< int >::iterator - end(self) -> qvector< int >::const_iterator - - -ida_pro.intvec_t.erase(): - - erase(self, it) -> qvector< int >::iterator - erase(self, first, last) -> qvector< int >::iterator - - -ida_pro.intvec_t.extract(): - - extract(self) -> int * - - -ida_pro.intvec_t.find(): - - find(self, x) -> qvector< int >::iterator - find(self, x) -> qvector< int >::const_iterator - - -ida_pro.intvec_t.has(): - - has(self, x) -> bool - - -ida_pro.intvec_t.inject(): - - inject(self, s, len) - - -ida_pro.intvec_t.insert(): - - insert(self, it, x) -> qvector< int >::iterator - - -ida_pro.intvec_t.pop_back(): - - pop_back(self) - - -ida_pro.intvec_t.push_back(): - - push_back(self, x) - push_back(self) -> int & - - -ida_pro.intvec_t.qclear(): - - qclear(self) - - -ida_pro.intvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.intvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.intvec_t.size(): - - size(self) -> size_t - - -ida_pro.intvec_t.swap(): - - swap(self, r) - - -ida_pro.intvec_t.truncate(): - - truncate(self) - - -ida_pro.is_control_tty(): - - is_control_tty(fd) -> enum tty_control_t - - - Check if the current process is the owner of the TTY specified by 'fd' - (typically an opened descriptor to /dev/tty). - - @param fd (C++: int) - - -ida_pro.is_main_thread(): - - is_main_thread() -> bool - - - Are we running in the main thread? - - -ida_pro.log2ceil(): - - log2ceil(d64) -> int - - - calculate ceil(log2(d64)) or floor(log2(d64)), it returns 0 if d64 == - 0 - - @param d64 (C++: uint64) - - -ida_pro.log2floor(): - - log2floor(d64) -> int - - -class ida_pro.longlongvec_t(): - - Proxy of C++ qvector<(long long)> class - - -ida_pro.longlongvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.longlongvec_t.append(): - - push_back(self, x) - push_back(self) -> long long & - - -ida_pro.longlongvec_t.at(): - - __getitem__(self, i) -> long long const & - - -ida_pro.longlongvec_t.begin(): - - begin(self) -> qvector< long long >::iterator - begin(self) -> qvector< long long >::const_iterator - - -ida_pro.longlongvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.longlongvec_t.clear(): - - clear(self) - - -ida_pro.longlongvec_t.empty(): - - empty(self) -> bool - - -ida_pro.longlongvec_t.end(): - - end(self) -> qvector< long long >::iterator - end(self) -> qvector< long long >::const_iterator - - -ida_pro.longlongvec_t.erase(): - - erase(self, it) -> qvector< long long >::iterator - erase(self, first, last) -> qvector< long long >::iterator - - -ida_pro.longlongvec_t.extract(): - - extract(self) -> long long * - - -ida_pro.longlongvec_t.find(): - - find(self, x) -> qvector< long long >::iterator - find(self, x) -> qvector< long long >::const_iterator - - -ida_pro.longlongvec_t.has(): - - has(self, x) -> bool - - -ida_pro.longlongvec_t.inject(): - - inject(self, s, len) - - -ida_pro.longlongvec_t.insert(): - - insert(self, it, x) -> qvector< long long >::iterator - - -ida_pro.longlongvec_t.pop_back(): - - pop_back(self) - - -ida_pro.longlongvec_t.push_back(): - - push_back(self, x) - push_back(self) -> long long & - - -ida_pro.longlongvec_t.qclear(): - - qclear(self) - - -ida_pro.longlongvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.longlongvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.longlongvec_t.size(): - - size(self) -> size_t - - -ida_pro.longlongvec_t.swap(): - - swap(self, r) - - -ida_pro.longlongvec_t.truncate(): - - truncate(self) - - -ida_pro.parse_dbgopts(): - - parse_dbgopts(ido, r_switch) -> bool - - - Parse the -r command line switch (for instant debugging). r_switch - points to the value of the -r switch. Example: win32@localhost+ - - @param ido (C++: struct instant_dbgopts_t *) - @param r_switch (C++: const char *) - @return: true-ok, false-parse error - - -ida_pro.qatoll(): - - qatoll(nptr) -> int64 - - -ida_pro.qcontrol_tty(): - - qcontrol_tty() - - - Make the current terminal the controlling terminal of the calling - process.The current terminal is supposed to be /dev/tty - - -ida_pro.qdetach_tty(): - - qdetach_tty() - - - If the current terminal is the controlling terminal of the calling - process, give up this controlling terminal.The current terminal is - supposed to be /dev/tty - - -ida_pro.qexit(): - - qexit(code) - - - Call qatexit functions, shut down UI and kernel, and exit. - - @param code: exit code (C++: int) - - -class ida_pro.qmutex_locker_t(): - - Proxy of C++ qmutex_locker_t class - - -class ida_pro.qrefcnt_obj_t(): - - Proxy of C++ qrefcnt_obj_t class - - -ida_pro.qrefcnt_obj_t.refcnt: - qrefcnt_obj_t_refcnt_get(self) -> int - -ida_pro.qrefcnt_obj_t.release(): - - release(self) - - -ida_pro.qstrvec_t_add(): - - qstrvec_t_add(self, s) -> bool - - -ida_pro.qstrvec_t_addressof(): - - qstrvec_t_addressof(self, idx) -> PyObject * - - -ida_pro.qstrvec_t_assign(): - - qstrvec_t_assign(self, other) -> bool - - -ida_pro.qstrvec_t_clear(): - - qstrvec_t_clear(self, qclear) -> bool - - -ida_pro.qstrvec_t_create(): - - qstrvec_t_create() -> PyObject * - - -ida_pro.qstrvec_t_destroy(): - - qstrvec_t_destroy(py_obj) -> bool - - -ida_pro.qstrvec_t_from_list(): - - qstrvec_t_from_list(self, py_list) -> bool - - -ida_pro.qstrvec_t_get(): - - qstrvec_t_get(self, idx) -> PyObject * - - -ida_pro.qstrvec_t_get_clink(): - - qstrvec_t_get_clink(self) -> qstrvec_t * - - -ida_pro.qstrvec_t_get_clink_ptr(): - - qstrvec_t_get_clink_ptr(self) -> PyObject * - - -ida_pro.qstrvec_t_insert(): - - qstrvec_t_insert(self, idx, s) -> bool - - -ida_pro.qstrvec_t_remove(): - - qstrvec_t_remove(self, idx) -> bool - - -ida_pro.qstrvec_t_set(): - - qstrvec_t_set(self, idx, s) -> bool - - -ida_pro.qstrvec_t_size(): - - qstrvec_t_size(self) -> size_t - - -ida_pro.quote_cmdline_arg(): - - quote_cmdline_arg(arg) -> bool - - - Quote a command line argument if it contains escape characters. For - example, *.c will be converted into "*.c" because * may be - inadvertently expanded by the shell - - @param arg (C++: qstring *) - @return: true: modified 'arg' - - -ida_pro.qvector_reserve(): - - qvector_reserve(vec, old, cnt, elsize) -> void * - - - Change capacity of given qvector. - - @param vec: a pointer to a qvector (C++: void *) - @param old: a pointer to the qvector's array (C++: void *) - @param cnt: number of elements to reserve (C++: size_t) - @param elsize: size of each element (C++: size_t) - @return: a pointer to the newly allocated array - - -ida_pro.readbytes(): - - readbytes(h, res, size, mf) -> int - - - Read at most 4 bytes from file. - - @param h: file handle (C++: int) - @param res: value read from file (C++: uint32 *) - @param size: size of value in bytes (1,2,4) (C++: int) - @param mf: is MSB first? (C++: bool) - @return: 0 on success, nonzero otherwise - - -ida_pro.reloc_value(): - - reloc_value(value, size, delta, mf) - - -ida_pro.relocate_relobj(): - - relocate_relobj(_relobj, ea, mf) -> bool - - -class ida_pro.sel_array(): - - Proxy of C++ sel_array class - - -ida_pro.sel_array.cast(): - - cast(self) -> sel_t * - - -ida_pro.sel_array.frompointer(): - - frompointer(t) -> sel_array - - -ida_pro.sel_array_frompointer(): - - sel_array_frompointer(t) -> sel_array - - -class ida_pro.sel_pointer(): - - Proxy of C++ sel_pointer class - - -ida_pro.sel_pointer.assign(): - - assign(self, value) - - -ida_pro.sel_pointer.cast(): - - cast(self) -> sel_t * - - -ida_pro.sel_pointer.frompointer(): - - frompointer(t) -> sel_pointer - - -ida_pro.sel_pointer.value(): - - value(self) -> sel_t - - -ida_pro.sel_pointer_frompointer(): - - sel_pointer_frompointer(t) -> sel_pointer - - -ida_pro.set_bits(): - - set_bits(bitmap, low, high) - - - Set bits between [low, high) in 'bitmap'. - - - @param bitmap (C++: uchar *) - @param low (C++: size_t) - @param high (C++: size_t) - - -class ida_pro.sizevec_t(): - - Proxy of C++ qvector<(size_t)> class - - -ida_pro.sizevec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.sizevec_t.at(): - - at(self, _idx) -> size_t const & - - -ida_pro.sizevec_t.begin(): - - begin(self) -> qvector< size_t >::iterator - begin(self) -> qvector< size_t >::const_iterator - - -ida_pro.sizevec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.sizevec_t.clear(): - - clear(self) - - -ida_pro.sizevec_t.empty(): - - empty(self) -> bool - - -ida_pro.sizevec_t.end(): - - end(self) -> qvector< size_t >::iterator - end(self) -> qvector< size_t >::const_iterator - - -ida_pro.sizevec_t.erase(): - - erase(self, it) -> qvector< size_t >::iterator - erase(self, first, last) -> qvector< size_t >::iterator - - -ida_pro.sizevec_t.extract(): - - extract(self) -> size_t * - - -ida_pro.sizevec_t.find(): - - find(self, x) -> qvector< size_t >::iterator - find(self, x) -> qvector< size_t >::const_iterator - - -ida_pro.sizevec_t.grow(): - - grow(self, x=size_t()) - - -ida_pro.sizevec_t.has(): - - has(self, x) -> bool - - -ida_pro.sizevec_t.inject(): - - inject(self, s, len) - - -ida_pro.sizevec_t.insert(): - - insert(self, it, x) -> qvector< size_t >::iterator - - -ida_pro.sizevec_t.pop_back(): - - pop_back(self) - - -ida_pro.sizevec_t.push_back(): - - push_back(self, x) - push_back(self) -> size_t & - - -ida_pro.sizevec_t.qclear(): - - qclear(self) - - -ida_pro.sizevec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.sizevec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.sizevec_t.size(): - - size(self) -> size_t - - -ida_pro.sizevec_t.swap(): - - swap(self, r) - - -ida_pro.sizevec_t.truncate(): - - truncate(self) - - -ida_pro.str2user(): - - str2user(str) -> PyObject * - - - Insert C-style escape characters to string - - @return: new string with escape characters inserted - - -class ida_pro.strvec_t(): - - Proxy of C++ qvector<(simpleline_t)> class - - -ida_pro.strvec_t.append(): - - push_back(self, x) - push_back(self) -> simpleline_t & - - -ida_pro.strvec_t.at(): - - __getitem__(self, i) -> simpleline_t const & - - -ida_pro.strvec_t.begin(): - - begin(self) -> qvector< simpleline_t >::iterator - begin(self) -> qvector< simpleline_t >::const_iterator - - -ida_pro.strvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.strvec_t.clear(): - - clear(self) - - -ida_pro.strvec_t.empty(): - - empty(self) -> bool - - -ida_pro.strvec_t.end(): - - end(self) -> qvector< simpleline_t >::iterator - end(self) -> qvector< simpleline_t >::const_iterator - - -ida_pro.strvec_t.erase(): - - erase(self, it) -> qvector< simpleline_t >::iterator - erase(self, first, last) -> qvector< simpleline_t >::iterator - - -ida_pro.strvec_t.extract(): - - extract(self) -> simpleline_t * - - -ida_pro.strvec_t.grow(): - - grow(self, x=simpleline_t()) - - -ida_pro.strvec_t.inject(): - - inject(self, s, len) - - -ida_pro.strvec_t.insert(): - - insert(self, it, x) -> qvector< simpleline_t >::iterator - - -ida_pro.strvec_t.pop_back(): - - pop_back(self) - - -ida_pro.strvec_t.push_back(): - - push_back(self, x) - push_back(self) -> simpleline_t & - - -ida_pro.strvec_t.qclear(): - - qclear(self) - - -ida_pro.strvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.strvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.strvec_t.size(): - - size(self) -> size_t - - -ida_pro.strvec_t.swap(): - - swap(self, r) - - -ida_pro.strvec_t.truncate(): - - truncate(self) - - -class ida_pro.sval_pointer(): - - Proxy of C++ sval_pointer class - - -ida_pro.sval_pointer.assign(): - - assign(self, value) - - -ida_pro.sval_pointer.cast(): - - cast(self) -> sval_t * - - -ida_pro.sval_pointer.frompointer(): - - frompointer(t) -> sval_pointer - - -ida_pro.sval_pointer.value(): - - value(self) -> sval_t - - -ida_pro.sval_pointer_frompointer(): - - sval_pointer_frompointer(t) -> sval_pointer - - -class ida_pro.svalvec_t(): - - Proxy of C++ qvector<(signed-ea-like-numeric-type)> class - - -ida_pro.svalvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.svalvec_t.append(): - - push_back(self, x) - push_back(self) -> signed-ea-like-numeric-type & - - -ida_pro.svalvec_t.at(): - - __getitem__(self, i) -> signed-ea-like-numeric-type & - - -ida_pro.svalvec_t.begin(): - - begin(self) -> qvector< signed-ea-like-numeric-type >::iterator - begin(self) -> qvector< signed-ea-like-numeric-type >::const_iterator - - -ida_pro.svalvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.svalvec_t.clear(): - - clear(self) - - -ida_pro.svalvec_t.empty(): - - empty(self) -> bool - - -ida_pro.svalvec_t.end(): - - end(self) -> qvector< signed-ea-like-numeric-type >::iterator - end(self) -> qvector< signed-ea-like-numeric-type >::const_iterator - - -ida_pro.svalvec_t.erase(): - - erase(self, it) -> qvector< signed-ea-like-numeric-type >::iterator - erase(self, first, last) -> qvector< signed-ea-like-numeric-type >::iterator - - -ida_pro.svalvec_t.extract(): - - extract(self) -> signed-ea-like-numeric-type * - - -ida_pro.svalvec_t.find(): - - find(self, x) -> qvector< signed-ea-like-numeric-type >::iterator - find(self, x) -> qvector< signed-ea-like-numeric-type >::const_iterator - - -ida_pro.svalvec_t.has(): - - has(self, x) -> bool - - -ida_pro.svalvec_t.inject(): - - inject(self, s, len) - - -ida_pro.svalvec_t.insert(): - - insert(self, it, x) -> qvector< signed-ea-like-numeric-type >::iterator - - -ida_pro.svalvec_t.pop_back(): - - pop_back(self) - - -ida_pro.svalvec_t.push_back(): - - push_back(self, x) - push_back(self) -> signed-ea-like-numeric-type & - - -ida_pro.svalvec_t.qclear(): - - qclear(self) - - -ida_pro.svalvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.svalvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.svalvec_t.size(): - - size(self) -> size_t - - -ida_pro.svalvec_t.swap(): - - swap(self, r) - - -ida_pro.svalvec_t.truncate(): - - truncate(self) - - -class ida_pro.tid_array(): - - Proxy of C++ tid_array class - - -ida_pro.tid_array.cast(): - - cast(self) -> tid_t * - - -ida_pro.tid_array.frompointer(): - - frompointer(t) -> tid_array - - -ida_pro.tid_array_frompointer(): - - tid_array_frompointer(t) -> tid_array - - -class ida_pro.uchar_array(): - - Proxy of C++ uchar_array class - - -ida_pro.uchar_array.cast(): - - cast(self) -> uchar * - - -ida_pro.uchar_array.frompointer(): - - frompointer(t) -> uchar_array - - -ida_pro.uchar_array_frompointer(): - - uchar_array_frompointer(t) -> uchar_array - - -class ida_pro.uint64vec_t(): - - Proxy of C++ qvector<(unsigned long long)> class - - -ida_pro.uint64vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.uint64vec_t.append(): - - push_back(self, x) - push_back(self) -> unsigned long long & - - -ida_pro.uint64vec_t.at(): - - __getitem__(self, i) -> unsigned long long const & - - -ida_pro.uint64vec_t.begin(): - - begin(self) -> qvector< unsigned long long >::iterator - begin(self) -> qvector< unsigned long long >::const_iterator - - -ida_pro.uint64vec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.uint64vec_t.clear(): - - clear(self) - - -ida_pro.uint64vec_t.empty(): - - empty(self) -> bool - - -ida_pro.uint64vec_t.end(): - - end(self) -> qvector< unsigned long long >::iterator - end(self) -> qvector< unsigned long long >::const_iterator - - -ida_pro.uint64vec_t.erase(): - - erase(self, it) -> qvector< unsigned long long >::iterator - erase(self, first, last) -> qvector< unsigned long long >::iterator - - -ida_pro.uint64vec_t.extract(): - - extract(self) -> unsigned long long * - - -ida_pro.uint64vec_t.find(): - - find(self, x) -> qvector< unsigned long long >::iterator - find(self, x) -> qvector< unsigned long long >::const_iterator - - -ida_pro.uint64vec_t.has(): - - has(self, x) -> bool - - -ida_pro.uint64vec_t.inject(): - - inject(self, s, len) - - -ida_pro.uint64vec_t.insert(): - - insert(self, it, x) -> qvector< unsigned long long >::iterator - - -ida_pro.uint64vec_t.pop_back(): - - pop_back(self) - - -ida_pro.uint64vec_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned long long & - - -ida_pro.uint64vec_t.qclear(): - - qclear(self) - - -ida_pro.uint64vec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.uint64vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.uint64vec_t.size(): - - size(self) -> size_t - - -ida_pro.uint64vec_t.swap(): - - swap(self, r) - - -ida_pro.uint64vec_t.truncate(): - - truncate(self) - - -class ida_pro.uintvec_t(): - - Proxy of C++ qvector<(unsigned int)> class - - -ida_pro.uintvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.uintvec_t.append(): - - push_back(self, x) - push_back(self) -> unsigned int & - - -ida_pro.uintvec_t.at(): - - __getitem__(self, i) -> unsigned int const & - - -ida_pro.uintvec_t.begin(): - - begin(self) -> qvector< unsigned int >::iterator - begin(self) -> qvector< unsigned int >::const_iterator - - -ida_pro.uintvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.uintvec_t.clear(): - - clear(self) - - -ida_pro.uintvec_t.empty(): - - empty(self) -> bool - - -ida_pro.uintvec_t.end(): - - end(self) -> qvector< unsigned int >::iterator - end(self) -> qvector< unsigned int >::const_iterator - - -ida_pro.uintvec_t.erase(): - - erase(self, it) -> qvector< unsigned int >::iterator - erase(self, first, last) -> qvector< unsigned int >::iterator - - -ida_pro.uintvec_t.extract(): - - extract(self) -> unsigned int * - - -ida_pro.uintvec_t.find(): - - find(self, x) -> qvector< unsigned int >::iterator - find(self, x) -> qvector< unsigned int >::const_iterator - - -ida_pro.uintvec_t.has(): - - has(self, x) -> bool - - -ida_pro.uintvec_t.inject(): - - inject(self, s, len) - - -ida_pro.uintvec_t.insert(): - - insert(self, it, x) -> qvector< unsigned int >::iterator - - -ida_pro.uintvec_t.pop_back(): - - pop_back(self) - - -ida_pro.uintvec_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned int & - - -ida_pro.uintvec_t.qclear(): - - qclear(self) - - -ida_pro.uintvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.uintvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.uintvec_t.size(): - - size(self) -> size_t - - -ida_pro.uintvec_t.swap(): - - swap(self, r) - - -ida_pro.uintvec_t.truncate(): - - truncate(self) - - -class ida_pro.ulonglongvec_t(): - - Proxy of C++ qvector<(unsigned long long)> class - - -ida_pro.ulonglongvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.ulonglongvec_t.append(): - - push_back(self, x) - push_back(self) -> unsigned long long & - - -ida_pro.ulonglongvec_t.at(): - - __getitem__(self, i) -> unsigned long long const & - - -ida_pro.ulonglongvec_t.begin(): - - begin(self) -> qvector< unsigned long long >::iterator - begin(self) -> qvector< unsigned long long >::const_iterator - - -ida_pro.ulonglongvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.ulonglongvec_t.clear(): - - clear(self) - - -ida_pro.ulonglongvec_t.empty(): - - empty(self) -> bool - - -ida_pro.ulonglongvec_t.end(): - - end(self) -> qvector< unsigned long long >::iterator - end(self) -> qvector< unsigned long long >::const_iterator - - -ida_pro.ulonglongvec_t.erase(): - - erase(self, it) -> qvector< unsigned long long >::iterator - erase(self, first, last) -> qvector< unsigned long long >::iterator - - -ida_pro.ulonglongvec_t.extract(): - - extract(self) -> unsigned long long * - - -ida_pro.ulonglongvec_t.find(): - - find(self, x) -> qvector< unsigned long long >::iterator - find(self, x) -> qvector< unsigned long long >::const_iterator - - -ida_pro.ulonglongvec_t.has(): - - has(self, x) -> bool - - -ida_pro.ulonglongvec_t.inject(): - - inject(self, s, len) - - -ida_pro.ulonglongvec_t.insert(): - - insert(self, it, x) -> qvector< unsigned long long >::iterator - - -ida_pro.ulonglongvec_t.pop_back(): - - pop_back(self) - - -ida_pro.ulonglongvec_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned long long & - - -ida_pro.ulonglongvec_t.qclear(): - - qclear(self) - - -ida_pro.ulonglongvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.ulonglongvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.ulonglongvec_t.size(): - - size(self) -> size_t - - -ida_pro.ulonglongvec_t.swap(): - - swap(self, r) - - -ida_pro.ulonglongvec_t.truncate(): - - truncate(self) - - -class ida_pro.uval_array(): - - Proxy of C++ uval_array class - - -ida_pro.uval_array.cast(): - - cast(self) -> uval_t * - - -ida_pro.uval_array.frompointer(): - - frompointer(t) -> uval_array - - -ida_pro.uval_array_frompointer(): - - uval_array_frompointer(t) -> uval_array - - -class ida_pro.uvalvec_t(): - - Proxy of C++ qvector<(unsigned-ea-like-numeric-type)> class - - -ida_pro.uvalvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.uvalvec_t.append(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_pro.uvalvec_t.at(): - - __getitem__(self, i) -> unsigned-ea-like-numeric-type & - - -ida_pro.uvalvec_t.begin(): - - begin(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - begin(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.uvalvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.uvalvec_t.clear(): - - clear(self) - - -ida_pro.uvalvec_t.empty(): - - empty(self) -> bool - - -ida_pro.uvalvec_t.end(): - - end(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - end(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.uvalvec_t.erase(): - - erase(self, it) -> qvector< unsigned-ea-like-numeric-type >::iterator - erase(self, first, last) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_pro.uvalvec_t.extract(): - - extract(self) -> unsigned-ea-like-numeric-type * - - -ida_pro.uvalvec_t.find(): - - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.uvalvec_t.has(): - - has(self, x) -> bool - - -ida_pro.uvalvec_t.inject(): - - inject(self, s, len) - - -ida_pro.uvalvec_t.insert(): - - insert(self, it, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_pro.uvalvec_t.pop_back(): - - pop_back(self) - - -ida_pro.uvalvec_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_pro.uvalvec_t.qclear(): - - qclear(self) - - -ida_pro.uvalvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.uvalvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.uvalvec_t.size(): - - size(self) -> size_t - - -ida_pro.uvalvec_t.swap(): - - swap(self, r) - - -ida_pro.uvalvec_t.truncate(): - - truncate(self) - - -ida_pro.writebytes(): - - writebytes(h, l, size, mf) -> int - - - Write at most 4 bytes to file. - - @param h: file handle (C++: int) - @param l: value to write (C++: uint32) - @param size: size of value in bytes (1,2,4) (C++: int) - @param mf: is MSB first? (C++: bool) - @return: 0 on success, nonzero otherwise - - - -=== ida_pro EPYDOC INJECTIONS === -ida_pro.CP_UTF16 -""" -UTF-16 codepage. -""" - -ida_pro.IDA_SDK_VERSION -""" -IDA SDK v7.3. -""" - -ida_pro.IDBDEC_ESCAPE -""" -convert non-printable characters to C escapes (, \\xNN, \\uNNNN) -""" - -ida_pro.IOREDIR_APPEND -""" -append, do not overwrite the output file -""" - -ida_pro.IOREDIR_INPUT -""" -input redirection -""" - -ida_pro.IOREDIR_OUTPUT -""" -output redirection -""" - -ida_pro.IOREDIR_QUOTED -""" -the file name was quoted -""" - -ida_pro.MAXSTR -""" -maximum string size -""" - -ida_pro.SUBSTCHAR -""" -default char, used if a char cannot be represented in a codepage -""" - -ida_pro.__MF__ -""" -byte sex of our platform (Most significant byte First). 0: little -endian (Intel 80x86). 1: big endian (PowerPC). -""" -=== ida_pro EPYDOC INJECTIONS END === -ida_problems.forget_problem(): - - forget_problem(type, ea) -> bool - - - Remove an address from a problem list - - @param type: problem list type (C++: problist_id_t) - @param ea: linear address (C++: ea_t) - @return: success - - -ida_problems.get_problem(): - - get_problem(type, lowea) -> ea_t - - - Get an address from the specified problem list. The address is not - removed from the list. - - @param type: problem list type (C++: problist_id_t) - @param lowea: the returned address will be higher or equal than the - specified address (C++: ea_t) - @return: linear address or BADADDR - - -ida_problems.get_problem_desc(): - - get_problem_desc(t, ea) -> ssize_t - - - Get the human-friendly description of the problem, if one was provided - to remember_problem. - - @param t: problem list type. (C++: problist_id_t) - @param ea: linear address. (C++: ea_t) - @return: the message length or -1 if none - - -ida_problems.get_problem_name(): - - get_problem_name(type, longname=True) -> char const * - - - Get problem list description. - - - @param type (C++: problist_id_t) - @param longname (C++: bool) - - -ida_problems.is_problem_present(): - - is_problem_present(t, ea) -> bool - - - Check if the specified address is present in the problem list. - - - @param t (C++: problist_id_t) - @param ea (C++: ea_t) - - -ida_problems.remember_problem(): - - remember_problem(type, ea, msg=None) - - - Insert an address to a list of problems. Display a message saying - about the problem (except of 'PR_ATTN' , 'PR_FINAL' ) 'PR_JUMP' is - temporarily ignored. - - @param type: problem list type (C++: problist_id_t) - @param ea: linear address (C++: ea_t) - @param msg: a user-friendly message to be displayed instead of the - default more generic one associated with the type of - problem. Defaults to NULL. (C++: const char *) - - -ida_problems.was_ida_decision(): - - was_ida_decision(ea) -> bool - - -class ida_range.array_of_rangesets(): - - Proxy of C++ qvector<(rangeset_t)> class - - -ida_range.array_of_rangesets.add_unique(): - - add_unique(self, x) -> bool - - -ida_range.array_of_rangesets.at(): - - at(self, _idx) -> rangeset_t - - -ida_range.array_of_rangesets.begin(): - - begin(self) -> rangeset_t - begin(self) -> rangeset_t - - -ida_range.array_of_rangesets.capacity(): - - capacity(self) -> size_t - - -ida_range.array_of_rangesets.clear(): - - clear(self) - - -ida_range.array_of_rangesets.empty(): - - empty(self) -> bool - - -ida_range.array_of_rangesets.end(): - - end(self) -> rangeset_t - end(self) -> rangeset_t - - -ida_range.array_of_rangesets.erase(): - - erase(self, it) -> rangeset_t - erase(self, first, last) -> rangeset_t - - -ida_range.array_of_rangesets.extract(): - - extract(self) -> rangeset_t - - -ida_range.array_of_rangesets.find(): - - find(self, x) -> rangeset_t - find(self, x) -> rangeset_t - - -ida_range.array_of_rangesets.grow(): - - grow(self, x=rangeset_t()) - - -ida_range.array_of_rangesets.has(): - - has(self, x) -> bool - - -ida_range.array_of_rangesets.inject(): - - inject(self, s, len) - - -ida_range.array_of_rangesets.insert(): - - insert(self, it, x) -> rangeset_t - - -ida_range.array_of_rangesets.pop_back(): - - pop_back(self) - - -ida_range.array_of_rangesets.push_back(): - - push_back(self, x) - push_back(self) -> rangeset_t - - -ida_range.array_of_rangesets.qclear(): - - qclear(self) - - -ida_range.array_of_rangesets.reserve(): - - reserve(self, cnt) - - -ida_range.array_of_rangesets.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_range.array_of_rangesets.size(): - - size(self) -> size_t - - -ida_range.array_of_rangesets.swap(): - - swap(self, r) - - -ida_range.array_of_rangesets.truncate(): - - truncate(self) - - -class ida_range.range_t(): - - Proxy of C++ range_t class - - -ida_range.range_t._print(): - - _print(self) -> size_t - - -ida_range.range_t.clear(): - - clear(self) - - -ida_range.range_t.compare(): - - compare(self, r) -> int - - -ida_range.range_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_range.range_t.empty(): - - empty(self) -> bool - - -ida_range.range_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_range.range_t.extend(): - - extend(self, ea) - - -ida_range.range_t.intersect(): - - intersect(self, r) - - -ida_range.range_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_range.range_t.size(): - - size(self) -> asize_t - - -ida_range.range_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_range.range_t_print(): - - range_t_print(cb) -> size_t - - - Helper function. Should not be called directly! - - -class ida_range.rangeset_t(): - - Proxy of C++ rangeset_t class - - -ida_range.rangeset_t._print(): - - _print(self) -> size_t - - -ida_range.rangeset_t.add(): - - add(self, range) -> bool - add(self, start, _end) -> bool - add(self, aset) -> bool - - -ida_range.rangeset_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_range.rangeset_t.cached_range(): - - cached_range(self) -> range_t - - -ida_range.rangeset_t.clear(): - - clear(self) - - -ida_range.rangeset_t.contains(): - - contains(self, ea) -> bool - contains(self, aset) -> bool - - -ida_range.rangeset_t.empty(): - - empty(self) -> bool - - -ida_range.rangeset_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_range.rangeset_t.find_range(): - - find_range(self, ea) -> range_t - - -ida_range.rangeset_t.getrange(): - - getrange(self, idx) -> range_t - - -ida_range.rangeset_t.has_common(): - - has_common(self, range) -> bool - has_common(self, aset) -> bool - - -ida_range.rangeset_t.includes(): - - includes(self, range) -> bool - - -ida_range.rangeset_t.intersect(): - - intersect(self, aset) -> bool - - -ida_range.rangeset_t.is_equal(): - - is_equal(self, aset) -> bool - - -ida_range.rangeset_t.is_subset_of(): - - is_subset_of(self, aset) -> bool - - -ida_range.rangeset_t.lastrange(): - - lastrange(self) -> range_t - - -ida_range.rangeset_t.next_addr(): - - next_addr(self, ea) -> ea_t - - -ida_range.rangeset_t.next_range(): - - next_range(self, ea) -> ea_t - - -ida_range.rangeset_t.nranges(): - - nranges(self) -> size_t - - -ida_range.rangeset_t.prev_addr(): - - prev_addr(self, ea) -> ea_t - - -ida_range.rangeset_t.prev_range(): - - prev_range(self, ea) -> ea_t - - -ida_range.rangeset_t.sub(): - - sub(self, range) -> bool - sub(self, ea) -> bool - sub(self, aset) -> bool - - -ida_range.rangeset_t.swap(): - - swap(self, r) - - -class ida_range.rangevec_base_t(): - - Proxy of C++ qvector<(range_t)> class - - -ida_range.rangevec_base_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_range.rangevec_base_t.at(): - - at(self, _idx) -> range_t - - -ida_range.rangevec_base_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_range.rangevec_base_t.capacity(): - - capacity(self) -> size_t - - -ida_range.rangevec_base_t.clear(): - - clear(self) - - -ida_range.rangevec_base_t.empty(): - - empty(self) -> bool - - -ida_range.rangevec_base_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_range.rangevec_base_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_range.rangevec_base_t.extract(): - - extract(self) -> range_t - - -ida_range.rangevec_base_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_range.rangevec_base_t.grow(): - - grow(self, x=range_t()) - - -ida_range.rangevec_base_t.has(): - - has(self, x) -> bool - - -ida_range.rangevec_base_t.inject(): - - inject(self, s, len) - - -ida_range.rangevec_base_t.insert(): - - insert(self, it, x) -> range_t - - -ida_range.rangevec_base_t.pop_back(): - - pop_back(self) - - -ida_range.rangevec_base_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_range.rangevec_base_t.qclear(): - - qclear(self) - - -ida_range.rangevec_base_t.reserve(): - - reserve(self, cnt) - - -ida_range.rangevec_base_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_range.rangevec_base_t.size(): - - size(self) -> size_t - - -ida_range.rangevec_base_t.swap(): - - swap(self, r) - - -ida_range.rangevec_base_t.truncate(): - - truncate(self) - - -class ida_range.rangevec_t(): - - Proxy of C++ rangevec_t class - - -ida_range.rangevec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_range.rangevec_t.at(): - - at(self, _idx) -> range_t - - -ida_range.rangevec_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_range.rangevec_t.capacity(): - - capacity(self) -> size_t - - -ida_range.rangevec_t.clear(): - - clear(self) - - -ida_range.rangevec_t.empty(): - - empty(self) -> bool - - -ida_range.rangevec_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_range.rangevec_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_range.rangevec_t.extract(): - - extract(self) -> range_t - - -ida_range.rangevec_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_range.rangevec_t.grow(): - - grow(self, x=range_t()) - - -ida_range.rangevec_t.has(): - - has(self, x) -> bool - - -ida_range.rangevec_t.inject(): - - inject(self, s, len) - - -ida_range.rangevec_t.insert(): - - insert(self, it, x) -> range_t - - -ida_range.rangevec_t.pop_back(): - - pop_back(self) - - -ida_range.rangevec_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_range.rangevec_t.qclear(): - - qclear(self) - - -ida_range.rangevec_t.reserve(): - - reserve(self, cnt) - - -ida_range.rangevec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_range.rangevec_t.size(): - - size(self) -> size_t - - -ida_range.rangevec_t.swap(): - - swap(self, r) - - -ida_range.rangevec_t.truncate(): - - truncate(self) - - -ida_registry.reg_data_type(): - - reg_data_type(name, subkey=None) -> regval_type_t - - - Get data type of a given value. - - @param name: value name (C++: const char *) - @param subkey: key name (C++: const char *) - @return: false if the [key+]value doesn't exist - - -ida_registry.reg_delete(): - - reg_delete(name, subkey=None) -> bool - - - Delete a value from the registry. - - @param name: value name (C++: const char *) - @param subkey: parent key (C++: const char *) - @return: success - - -ida_registry.reg_delete_subkey(): - - reg_delete_subkey(name) -> bool - - - Delete a key from the registry. - - - @param name (C++: const char *) - - -ida_registry.reg_delete_tree(): - - reg_delete_tree(name) -> bool - - - Delete a subtree from the registry. - - - @param name (C++: const char *) - - -ida_registry.reg_exists(): - - reg_exists(name, subkey=None) -> bool - - - Is there already a value with the given name? - - @param name: value name (C++: const char *) - @param subkey: parent key (C++: const char *) - - -ida_registry.reg_flush(): - - reg_flush() - - -ida_registry.reg_load(): - - reg_load() - - -ida_registry.reg_read_binary(): - - reg_read_binary(name, subkey=None) -> PyObject * - - - Read binary data from the registry. - - @param name: value name (C++: const char *) - @param subkey: key name (C++: const char *) - @return: false if 'data' is not large enough to hold all data present. - in this case 'data' is left untouched. - - -ida_registry.reg_read_bool(): - - reg_read_bool(name, defval, subkey=None) -> bool - - - Read boolean value from the registry. - - @param name: value name (C++: const char *) - @param defval: default value (C++: bool) - @param subkey: key name (C++: const char *) - @return: boolean read from registry, or 'defval' if the read failed - - -ida_registry.reg_read_int(): - - reg_read_int(name, defval, subkey=None) -> int - - - Read integer value from the registry. - - @param name: value name (C++: const char *) - @param defval: default value (C++: int) - @param subkey: key name (C++: const char *) - @return: the value read from the registry, or 'defval' if the read - failed - - -ida_registry.reg_read_string(): - - reg_read_string(name, subkey=None, _def=None) -> PyObject * - - - Read a string from the registry. - - @param name: value name (C++: const char *) - @param subkey: key name (C++: const char *) - @return: success - - -ida_registry.reg_read_strlist(): - - reg_read_strlist(subkey) - - - Retrieve all string values associated with the given key. Also see - 'reg_update_strlist()' . - - @param subkey (C++: const char *) - - -ida_registry.reg_subkey_exists(): - - reg_subkey_exists(name) -> bool - - - Is there already a key with the given name? - - - @param name (C++: const char *) - - -ida_registry.reg_subkey_subkeys(): - - reg_subkey_subkeys(name) -> PyObject * - - - Get all subkey names of given key. - - - @param name (C++: const char *) - - -ida_registry.reg_subkey_values(): - - reg_subkey_values(name) -> PyObject * - - - Get all value names under given key. - - - @param name (C++: const char *) - - -ida_registry.reg_update_filestrlist(): - - reg_update_filestrlist(subkey, add, maxrecs, rem=None) - - - Update registry with a file list. Case sensitivity will vary depending - on the target OS.'add' and 'rem' must be UTF-8, just like for regular - string operations. - - @param subkey (C++: const char *) - @param add (C++: const char *) - @param maxrecs (C++: size_t) - @param rem (C++: const char *) - - -ida_registry.reg_update_strlist(): - - reg_update_strlist(subkey, add, maxrecs, rem=None, ignorecase=False) - - - Update list of strings associated with given key. - - @param subkey: key name (C++: const char *) - @param add: string to be added to list, can be NULL (C++: const char - *) - @param maxrecs: limit list to this size (C++: size_t) - @param rem: string to be removed from list, can be NULL (C++: const - char *) - @param ignorecase: ignore case for 'add' and 'rem' (C++: bool) - - -ida_registry.reg_write_binary(): - - reg_write_binary(name, py_bytes, subkey=None) - - - Write binary data to the registry. - - @param name: value name (C++: const char *) - @param subkey: key name (C++: const char *) - - -ida_registry.reg_write_bool(): - - reg_write_bool(name, value, subkey=None) - - - Write boolean value to the registry. - - @param name: value name (C++: const char *) - @param value: boolean to write (nonzero = true) (C++: int) - @param subkey: key name (C++: const char *) - - -ida_registry.reg_write_int(): - - reg_write_int(name, value, subkey=None) - - - Write integer value to the registry. - - @param name: value name (C++: const char *) - @param value: value to write (C++: int) - @param subkey: key name (C++: const char *) - - -ida_registry.reg_write_string(): - - reg_write_string(name, utf8, subkey=None) - - - Write a string to the registry. - - @param name: value name (C++: const char *) - @param utf8: utf8-encoded string (C++: const char *) - @param subkey: key name (C++: const char *) - - - -=== ida_registry EPYDOC INJECTIONS === -ida_registry.ROOT_KEY_NAME -""" -Key used to store IDA settings in registry (Windows version).this name -is automatically prepended to all key names passed to functions in -this file. -""" -=== ida_registry EPYDOC INJECTIONS END === -ida_search.find_binary(): - - find_binary(arg1, arg2, arg3, arg4, arg5) -> ea_t - - -ida_search.find_code(): - - find_code(ea, sflag) -> ea_t - - - Find next code address. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_data(): - - find_data(ea, sflag) -> ea_t - - - Find next data address. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_defined(): - - find_defined(ea, sflag) -> ea_t - - - Find next ea that is the start of an instruction or data. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_error(): - - find_error(ea, sflag) -> ea_t - - - Find next error or problem. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_imm(): - - find_imm(newEA, sflag, srchValue) -> ea_t - - - Find next immediate operand with the given value. - - - @param newEA (C++: ea_t) - @param sflag (C++: int) - @param srchValue (C++: uval_t) - - -ida_search.find_not_func(): - - find_not_func(ea, sflag) -> ea_t - - - Find next code address that does not belong to a function. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_notype(): - - find_notype(ea, sflag) -> ea_t - - - Find next operand without any type info. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_suspop(): - - find_suspop(ea, sflag) -> ea_t - - - Find next suspicious operand. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_text(): - - find_text(start_ea, y, x, ustr, sflag) -> ea_t - - - See 'search()' - - - @param start_ea (C++: ea_t) - @param y (C++: int) - @param x (C++: int) - @param ustr (C++: const char *) - @param sflag (C++: int) - - -ida_search.find_unknown(): - - find_unknown(ea, sflag) -> ea_t - - - Find next unexplored address. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.search_down(): - - search_down(sflag) -> bool - - - Is the 'SEARCH_DOWN' bit set? - - - @param sflag (C++: int) - - - -=== ida_search EPYDOC INJECTIONS === -ida_search.SEARCH_BRK -""" -return 'BADADDR' if Ctrl-Break wass pressed during search -""" - -ida_search.SEARCH_CASE -""" -case-sensitive search (case-insensitive otherwise) -""" - -ida_search.SEARCH_DOWN -""" -search towards higher addresses -""" - -ida_search.SEARCH_IDENT -""" -search for an identifier (text search). it means that the characters -before and after the match cannot be is_visible_char(). -""" - -ida_search.SEARCH_NEXT -""" -for other find_.. functions it is implicitly set - -useful only for 'search()' and find_binary(). -""" - -ida_search.SEARCH_NOBRK -""" -don't test for ctrl-break to interrupt the search -""" - -ida_search.SEARCH_NOSHOW -""" -don't display the search progress/refresh screen -""" - -ida_search.SEARCH_REGEX -""" -regular expressions in search string (only supported for txt search) -""" - -ida_search.SEARCH_UP -""" -search towards lower addresses -""" -=== ida_search EPYDOC INJECTIONS END === -ida_segment.add_segm(): - - add_segm(para, start, end, name, sclass, flags=0) -> bool - - - Add a new segment, second form. Segment alignment is set to - 'saRelByte' . Segment combination is "public" or "stack" (if segment - class is "STACK"). Addressing mode of segment is taken as default - (16bit or 32bit). Default segment registers are set to 'BADSEL' . If a - segment already exists at the specified range of addresses, this - segment will be truncated. Instructions and data in the old segment - will be deleted if the new segment has another addressing mode or - another segment base address. - - @param para: segment base paragraph. if paragraph can't fit in 16bit, - then a new selector is allocated and mapped to the - paragraph. (C++: ea_t) - @param start: start address of the segment. if start== BADADDR then - start <- to_ea(para,0). (C++: ea_t) - @param end: end address of the segment. end address should be higher - than start address. For emulate empty segments, use - SEG_NULL segment type. If the end address is lower than - start address, then fail. If end== BADADDR , then a - segment up to the next segment will be created (if the - next segment doesn't exist, then 1 byte segment will be - created). If 'end' is too high and the new segment would - overlap the next segment, 'end' is adjusted properly. - (C++: ea_t) - @param name: name of new segment. may be NULL (C++: const char *) - @param sclass: class of the segment. may be NULL. type of the new - segment is modified if class is one of predefined - names: "CODE" -> SEG_CODE "DATA" -> SEG_DATA - "CONST" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> - SEG_BSS "XTRN" -> SEG_XTRN "COMM" -> SEG_COMM - "ABS" -> SEG_ABSSYM (C++: const char *) - @param flags (C++: int) - - -ida_segment.add_segm_ex(): - - add_segm_ex(s, name, sclass, flags) -> bool - - - Add a new segment. If a segment already exists at the specified range - of addresses, this segment will be truncated. Instructions and data in - the old segment will be deleted if the new segment has another - addressing mode or another segment base address. - - @param s: pointer to filled segment structure. segment selector should - have proper mapping (see set_selector() ). if - s.start_ea== BADADDR then s.start_ea <- get_segm_base(&s) - if s.end_ea== BADADDR , then a segment up to the next - segment will be created (if the next segment doesn't exist, - then 1 byte segment will be created). if the s.end_ea < - s.start_ea, then fail. if s.end_ea is too high and the new - segment would overlap the next segment, s.end_ea is adjusted - properly. (C++: segment_t *) - @param name: name of new segment. may be NULL. if specified, the - segment is immediately renamed (C++: const char *) - @param sclass: class of the segment. may be NULL. if specified, the - segment class is immediately changed (C++: const char - *) - @param flags: Add segment flags (C++: int) - - -ida_segment.add_segment_translation(): - - add_segment_translation(segstart, mappedseg) -> bool - - - Add segment translation. - - @param segstart: start address of the segment to add translation to - (C++: ea_t) - @param mappedseg: start address of the overlayed segment (C++: ea_t) - - -ida_segment.allocate_selector(): - - allocate_selector(segbase) -> sel_t - - - Allocate a selector for a segment unconditionally. You must call this - function before calling 'add_segm_ex()' . 'add_segm()' calls this - function itself, so you don't need to allocate a selector. This - function will allocate a new free selector and setup its mapping using - 'find_free_selector()' and 'set_selector()' functions. - - @param segbase: a new segment base paragraph (C++: ea_t) - @return: the allocated selector number - - -ida_segment.change_segment_status(): - - change_segment_status(s, is_deb_segm) -> int - - - Convert a debugger segment to a regular segment and vice versa. When - converting debug->regular, the memory contents will be copied to the - database. - - @param s: segment to modify (C++: segment_t *) - @param is_deb_segm: new status of the segment (C++: bool) - @return: Change segment status result codes - - -ida_segment.del_segm(): - - del_segm(ea, flags) -> bool - - - Delete a segment. - - @param ea: any address belonging to the segment (C++: ea_t) - @param flags: Segment modification flags (C++: int) - - -ida_segment.del_segment_translations(): - - del_segment_translations(segstart) - - - Delete the translation list - - @param segstart: start address of the segment to delete translation - list (C++: ea_t) - - -ida_segment.del_selector(): - - del_selector(selector) - - - Delete mapping of a selector. Be wary of deleting selectors that are - being used in the program, this can make a mess in the segments. - - @param selector: number of selector to remove from the translation - table (C++: sel_t) - - -ida_segment.find_free_selector(): - - find_free_selector() -> sel_t - - - Find first unused selector. - - @return: a number >= 1 - - -ida_segment.find_selector(): - - find_selector(base) -> sel_t - - - Find a selector that has mapping to the specified paragraph. - - @param base: paragraph to search in the translation table (C++: ea_t) - @return: selector value or base - - -ida_segment.get_defsr(): - - get_defsr(s, reg) -> sel_t - - -ida_segment.get_first_seg(): - - get_first_seg() -> segment_t - - - Get pointer to the first segment. - - -ida_segment.get_group_selector(): - - get_group_selector(grpsel) -> sel_t - - - Get common selector for a group of segments. - - @param grpsel: selector of group segment (C++: sel_t) - @return: common selector of the group or 'grpsel' if no such group is - found - - -ida_segment.get_last_seg(): - - get_last_seg() -> segment_t - - - Get pointer to the last segment. - - -ida_segment.get_next_seg(): - - get_next_seg(ea) -> segment_t - - - Get pointer to the next segment. - - - @param ea (C++: ea_t) - - -ida_segment.get_prev_seg(): - - get_prev_seg(ea) -> segment_t - - - Get pointer to the previous segment. - - - @param ea (C++: ea_t) - - -ida_segment.get_segm_base(): - - get_segm_base(s) -> ea_t - - - Get segment base linear address. Segment base linear address is used - to calculate virtual addresses. The virtual address of the first byte - of the segment will be (start address of segment - segment base linear - address) - - @param s: pointer to segment (C++: const segment_t *) - @return: 0 if s == NULL, otherwise segment base linear address - - -ida_segment.get_segm_by_name(): - - get_segm_by_name(name) -> segment_t - - - Get pointer to segment by its name. If there are several segments with - the same name, returns the first of them. - - @param name: segment name. may be NULL. (C++: const char *) - @return: NULL or pointer to segment structure - - -ida_segment.get_segm_by_sel(): - - get_segm_by_sel(selector) -> segment_t - - - Get pointer to segment structure. This function finds a segment by its - selector. If there are several segments with the same selectors, the - last one will be returned. - - @param selector: a segment with the specified selector will be - returned (C++: sel_t) - @return: pointer to segment or NULL - - -ida_segment.get_segm_class(): - - get_segm_class(s) -> ssize_t - - - Get segment class. Segment class is arbitrary text (max 8 characters). - - @param s: pointer to segment (C++: const segment_t *) - @return: size of segment class (-1 if s==NULL or bufsize<=0) - - -ida_segment.get_segm_name(): - - get_segm_name(s, flags=0) -> ssize_t - - - Get true segment name by pointer to segment. - - @param s: pointer to segment (C++: const segment_t *) - @param flags: 0-return name as is; 1-substitute bad symbols with _ 1 - corresponds to GN_VISIBLE (C++: int) - @return: size of segment name (-1 if s==NULL) - - -ida_segment.get_segm_num(): - - get_segm_num(ea) -> int - - - Get number of segment by address. - - @param ea: linear address belonging to the segment (C++: ea_t) - @return: -1 if no segment occupies the specified address. otherwise - returns number of the specified segment (0.. get_segm_qty() - -1) - - -ida_segment.get_segm_para(): - - get_segm_para(s) -> ea_t - - - Get segment base paragraph. Segment base paragraph may be converted to - segment base linear address using 'to_ea()' function. In fact, - to_ea(get_segm_para(s), 0) == get_segm_base(s). - - @param s: pointer to segment (C++: const segment_t *) - @return: 0 if s == NULL, the segment base paragraph - - -ida_segment.get_segm_qty(): - - get_segm_qty() -> int - - - Get number of segments. - - -ida_segment.get_segment_alignment(): - - get_segment_alignment(align) -> char const * - - - Get text representation of segment alignment code. - - @param align (C++: uchar) - @return: text digestable by IBM PC assembler. - - -ida_segment.get_segment_cmt(): - - get_segment_cmt(s, repeatable) -> ssize_t - - - Get segment comment. - - @param s: pointer to segment structure (C++: const segment_t *) - @param repeatable: 0: get regular comment. 1: get repeatable comment. - (C++: bool) - @return: size of comment or -1 - - -ida_segment.get_segment_combination(): - - get_segment_combination(comb) -> char const * - - - Get text representation of segment combination code. - - @param comb (C++: uchar) - @return: text digestable by IBM PC assembler. - - -ida_segment.get_segment_translations(): - - get_segment_translations(transmap, segstart) -> ssize_t - - - Get segment translation list. - - @param transmap: vector of segment start addresses for the translation - list (C++: eavec_t *) - @param segstart: start address of the segment to get information about - (C++: ea_t) - @return: -1 if no translation list or bad segstart. otherwise returns - size of translation list. - - -ida_segment.get_selector_qty(): - - get_selector_qty() -> int - - - Get number of defined selectors. - - -ida_segment.get_visible_segm_name(): - - get_visible_segm_name(s) -> ssize_t - - - Get segment name by pointer to segment. - - @param s: pointer to segment (C++: const segment_t *) - @return: size of segment name (-1 if s==NULL) - - -ida_segment.getn_selector(): - - getn_selector(n) -> bool - - - Get description of selector (0.. 'get_selector_qty()' -1) - - - @param n (C++: int) - - -ida_segment.getnseg(): - - getnseg(n) -> segment_t - - - Get pointer to segment by its number.Obsoleted because it can slow - down the debugger (it has to refresh the whole memory segmentation to - calculate the correct answer) - - @param n: segment number in the range (0.. get_segm_qty() -1) (C++: - int) - @return: NULL or pointer to segment structure - - -ida_segment.getseg(): - - getseg(ea) -> segment_t - - - Get pointer to segment by linear address. - - @param ea: linear address belonging to the segment (C++: ea_t) - @return: NULL or pointer to segment structure - - -ida_segment.is_finally_visible_segm(): - - is_finally_visible_segm(s) -> bool - - - See 'SFL_HIDDEN' , 'SCF_SHHID_SEGM' . - - - @param s (C++: segment_t *) - - -ida_segment.is_miniidb(): - - is_miniidb() -> bool - - - Is the database a miniidb created by the debugger?. - - @return: true if the database contains no segments or only debugger - segments - - -ida_segment.is_segm_locked(): - - is_segm_locked(segm) -> bool - - - Is a segment pointer locked? - - - @param segm (C++: const segment_t *) - - -ida_segment.is_spec_ea(): - - is_spec_ea(ea) -> bool - - - Does the address belong to a segment with a special type?. ( - 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , 'SEG_COMM' ) - - @param ea: linear address (C++: ea_t) - - -ida_segment.is_spec_segm(): - - is_spec_segm(seg_type) -> bool - - - Has segment a special type?. ( 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , - 'SEG_COMM' ) - - @param seg_type (C++: uchar) - - -ida_segment.is_visible_segm(): - - is_visible_segm(s) -> bool - - - See 'SFL_HIDDEN' . - - - @param s (C++: segment_t *) - - -ida_segment.lock_segm(): - - lock_segm(segm, lock) - - - Lock segment pointer Locked pointers are guaranteed to remain valid - until they are unlocked. Ranges with locked pointers cannot be deleted - or moved. - - @param segm (C++: const segment_t *) - @param lock (C++: bool) - - -class ida_segment.lock_segment(): - - Proxy of C++ lock_segment class - - -ida_segment.move_segm(): - - 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. - - @param s: segment to move (C++: segment_t *) - @param to: new segment start address (C++: ea_t) - @param flags: Move segment flags (C++: int) - @return: Move segment result codes - - -ida_segment.move_segm_start(): - - move_segm_start(ea, newstart, mode) -> bool - - - Move segment start. The main difference between this function and - 'set_segm_start()' is that this function may expand the previous - segment while 'set_segm_start()' never does it. So, this function - allows to change bounds of two segments simultaneously. If the - previous segment and the specified segment have the same addressing - mode and segment base, then instructions and data are not destroyed - - they simply move from one segment to another. Otherwise all - instructions/data which migrate from one segment to another are - destroyed.this function never disables addresses. - - @param ea: any address belonging to the segment (C++: ea_t) - @param newstart: new start address of the segment note that segment - start address should be higher than segment base - linear address. (C++: ea_t) - @param mode: policy for destroying defined items 0: if it is - necessary to destroy defined items, display a dialog box - and ask confirmation 1: if it is necessary to destroy - defined items, just destroy them without asking the user - -1: if it is necessary to destroy defined items, don't - destroy them (i.e. function will fail) -2: don't - destroy defined items (function will succeed) (C++: int) - - -ida_segment.rebase_program(): - - rebase_program(delta, flags) -> int - - - Rebase the whole program by 'delta' bytes. - - @param delta: number of bytes to move the program (C++: adiff_t) - @param flags: Move segment flags it is recommended to use - MSF_FIXONCE so that the loader takes care of global - variables it stored in the database (C++: int) - @return: Move segment result codes - - -ida_segment.segm_adjust_diff(): - - segm_adjust_diff(s, delta) -> adiff_t - - - Truncate and sign extend a delta depending on the segment. - - - @param s (C++: const segment_t *) - @param delta (C++: adiff_t) - - -ida_segment.segm_adjust_ea(): - - segm_adjust_ea(s, ea) -> ea_t - - - Truncate an address depending on the segment. - - - @param s (C++: const segment_t *) - @param ea (C++: ea_t) - - -class ida_segment.segment_t(): - - Proxy of C++ segment_t class - - -ida_segment.segment_t._print(): - - _print(self) -> size_t - - -ida_segment.segment_t.abits(): - - abits(self) -> int - - -ida_segment.segment_t.abytes(): - - abytes(self) -> int - - -ida_segment.segment_t.align: - segment_t_align_get(self) -> uchar - -ida_segment.segment_t.bitness: - segment_t_bitness_get(self) -> uchar - -ida_segment.segment_t.clear(): - - clear(self) - - -ida_segment.segment_t.clr_comorg(): - - clr_comorg(self) - - -ida_segment.segment_t.clr_ob_ok(): - - clr_ob_ok(self) - - -ida_segment.segment_t.color: - segment_t_color_get(self) -> bgcolor_t - -ida_segment.segment_t.comb: - segment_t_comb_get(self) -> uchar - -ida_segment.segment_t.comorg(): - - comorg(self) -> bool - - -ida_segment.segment_t.compare(): - - compare(self, r) -> int - - -ida_segment.segment_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_segment.segment_t.defsr: - segment_t_defsr_get(self) -> sel_t [16] - -ida_segment.segment_t.empty(): - - empty(self) -> bool - - -ida_segment.segment_t.end_ea: - segment_t_end_ea_get(self) -> ea_t - -ida_segment.segment_t.extend(): - - extend(self, ea) - - -ida_segment.segment_t.flags: - segment_t_flags_get(self) -> ushort - -ida_segment.segment_t.intersect(): - - intersect(self, r) - - -ida_segment.segment_t.is_header_segm(): - - is_header_segm(self) -> bool - - -ida_segment.segment_t.is_hidden_segtype(): - - is_hidden_segtype(self) -> bool - - -ida_segment.segment_t.is_loader_segm(): - - is_loader_segm(self) -> bool - - -ida_segment.segment_t.is_visible_segm(): - - is_visible_segm(self) -> bool - - -ida_segment.segment_t.name: - segment_t_name_get(self) -> uval_t - -ida_segment.segment_t.ob_ok(): - - ob_ok(self) -> bool - - -ida_segment.segment_t.orgbase: - segment_t_orgbase_get(self) -> uval_t - -ida_segment.segment_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_segment.segment_t.perm: - segment_t_perm_get(self) -> uchar - -ida_segment.segment_t.sclass: - segment_t_sclass_get(self) -> uval_t - -ida_segment.segment_t.sel: - segment_t_sel_get(self) -> sel_t - -ida_segment.segment_t.set_comorg(): - - set_comorg(self) - - -ida_segment.segment_t.set_debugger_segm(): - - set_debugger_segm(self, debseg) - - -ida_segment.segment_t.set_header_segm(): - - set_header_segm(self, on) - - -ida_segment.segment_t.set_hidden_segtype(): - - set_hidden_segtype(self, hide) - - -ida_segment.segment_t.set_loader_segm(): - - set_loader_segm(self, ldrseg) - - -ida_segment.segment_t.set_ob_ok(): - - set_ob_ok(self) - - -ida_segment.segment_t.set_visible_segm(): - - set_visible_segm(self, visible) - - -ida_segment.segment_t.size(): - - size(self) -> asize_t - - -ida_segment.segment_t.start_ea: - segment_t_start_ea_get(self) -> ea_t - -ida_segment.segment_t.type: - segment_t_type_get(self) -> uchar - -ida_segment.segment_t.update(): - - update(self) -> bool - - -ida_segment.segment_t.use32(): - - use32(self) -> bool - - -ida_segment.segment_t.use64(): - - use64(self) -> bool - - -ida_segment.segtype(): - - segtype(ea) -> uchar - - - Get segment type. - - @param ea: any linear address within the segment (C++: ea_t) - @return: Segment types , SEG_UNDF if no segment found at 'ea' - - -ida_segment.sel2ea(): - - sel2ea(selector) -> ea_t - - - Get mapping of a selector as a linear address. - - @param selector: number of selector to translate to linear address - (C++: sel_t) - @return: linear address the specified selector is mapped to. if there - is no mapping, returns to_ea(selector,0); - - -ida_segment.sel2para(): - - sel2para(selector) -> ea_t - - - Get mapping of a selector. - - @param selector: number of selector to translate (C++: sel_t) - @return: paragraph the specified selector is mapped to. if there is no - mapping, returns 'selector'. - - -ida_segment.set_defsr(): - - set_defsr(s, reg, value) - - -ida_segment.set_group_selector(): - - set_group_selector(grp, sel) -> int - - - Initialize groups. The kernel calls this function at the start of - work.Create a new group of segments (used OMF files). - - @param grp: selector of group segment (segment type is SEG_GRP ) You - should create an 'empty' (1 byte) group segment It won't - contain anything and will be used to redirect references - to the group of segments to the common selector. (C++: - sel_t) - @param sel: common selector of all segments belonging to the segment - You should create all segments within the group with the - same selector value. (C++: sel_t) - @return: 1 ok - - -ida_segment.set_segm_addressing(): - - set_segm_addressing(s, bitness) -> bool - - - Change segment addressing mode (16, 32, 64 bits). You must use this - function to change segment addressing, never change the 'bitness' - field directly. This function will delete all instructions, comments - and names in the segment - - @param s: pointer to segment (C++: segment_t *) - @param bitness: new addressing mode of segment 2: 64bit segment 1: - 32bit segment 0: 16bit segment (C++: size_t) - @return: success - - -ida_segment.set_segm_base(): - - set_segm_base(s, newbase) -> bool - - - Internal function. - - - @param s (C++: segment_t *) - @param newbase (C++: ea_t) - - -ida_segment.set_segm_class(): - - set_segm_class(s, sclass, flags=0) -> int - - - Set segment class. - - @param s: pointer to segment (may be NULL) (C++: segment_t *) - @param sclass: segment class (may be NULL). If segment type is - SEG_NORM and segment class is one of predefined names, - then segment type is changed to: "CODE" -> SEG_CODE - "DATA" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> - SEG_BSS if "UNK" then segment type is reset to - SEG_NORM . (C++: const char *) - @param flags (C++: int) - - -ida_segment.set_segm_end(): - - set_segm_end(ea, newend, flags) -> bool - - - Set segment end address. The next segment is shrinked to allow - expansion of the specified segment. The kernel might even delete the - next segment if necessary. The kernel will ask the user for a - permission to destroy instructions or data going out of segment scope - if such instructions exist. - - @param ea: any address belonging to the segment (C++: ea_t) - @param newend: new end address of the segment (C++: ea_t) - @param flags: Segment modification flags (C++: int) - - -ida_segment.set_segm_name(): - - set_segm_name(s, name, flags=0) -> int - - - Rename segment. The new name is validated (see validate_name). A - segment always has a name. If you hadn't specified a name, the kernel - will assign it "seg###" name where ### is segment number. - - @param s: pointer to segment (may be NULL) (C++: segment_t *) - @param name: new segment name (C++: const char *) - @param flags: ADDSEG_IDBENC or 0 (C++: int) - - -ida_segment.set_segm_start(): - - set_segm_start(ea, newstart, flags) -> bool - - - Set segment start address. The previous segment is trimmed to allow - expansion of the specified segment. The kernel might even delete the - previous segment if necessary. The kernel will ask the user for a - permission to destroy instructions or data going out of segment scope - if such instructions exist. - - @param ea: any address belonging to the segment (C++: ea_t) - @param newstart: new start address of the segment note that segment - start address should be higher than segment base - linear address. (C++: ea_t) - @param flags: Segment modification flags (C++: int) - - -ida_segment.set_segment_cmt(): - - set_segment_cmt(s, cmt, repeatable) - - - Set segment comment. - - @param s: pointer to segment structure (C++: const segment_t *) - @param cmt: comment string, may be multiline (with ' '). maximal size - is 4096 bytes. Use empty str ("") to delete comment (C++: - const char *) - @param repeatable: 0: set regular comment. 1: set repeatable comment. - (C++: bool) - - -ida_segment.set_segment_translations(): - - set_segment_translations(segstart, transmap) -> bool - - - Set new translation list. - - @param segstart: start address of the segment to add translation to - (C++: ea_t) - @param transmap: vector of segment start addresses for the translation - list. If transmap is empty, the translation list is - deleted. (C++: const eavec_t &) - - -ida_segment.set_selector(): - - set_selector(selector, paragraph) -> int - - - Set mapping of selector to a paragraph. You should call this - functionbeforecreating a segment which uses the selector, otherwise - the creation of the segment will fail. - - @param selector: number of selector to map if selector == BADSEL , - then return 0 (fail) if the selector has had a - mapping, old mapping is destroyed if the selector - number is equal to paragraph value, then the mapping - is destroyed because we don't need to keep trivial - mappings. (C++: sel_t) - @param paragraph: paragraph to map selector (C++: ea_t) - - -ida_segment.set_visible_segm(): - - set_visible_segm(s, visible) - - - See 'SFL_HIDDEN' . - - - @param s (C++: segment_t *) - @param visible (C++: bool) - - -ida_segment.setup_selector(): - - setup_selector(segbase) -> sel_t - - - Allocate a selector for a segment if necessary. You must call this - function before calling 'add_segm_ex()' . 'add_segm()' calls this - function itself, so you don't need to allocate a selector. This - function will allocate a selector if 'segbase' requires more than 16 - bits and the current processor is IBM PC. Otherwise it will return the - segbase value. - - @param segbase: a new segment base paragraph (C++: ea_t) - @return: the allocated selector number - - -ida_segment.std_out_segm_footer(): - - std_out_segm_footer(ctx, seg) - - - Generate segment footer line as a comment line. This function may be - used in IDP modules to generate segment footer if the target assembler - doesn't have 'ends' directive. - - @param ctx (C++: struct outctx_t &) - @param seg (C++: segment_t *) - - -ida_segment.take_memory_snapshot(): - - take_memory_snapshot(only_loader_segs) -> bool - - - Take a memory snapshot of the running process. - - @param only_loader_segs: only is_loader_segm() segments will be - affected (C++: bool) - @return: success - - -ida_segment.update_segm(): - - update_segm(s) -> bool - - - -=== ida_segment EPYDOC INJECTIONS === -ida_segment.ADDSEG_FILLGAP -""" -fill gap between new segment and previous one. i.e. if such a gap -exists, and this gap is less than 64K, then fill the gap by extending -the previous segment and adding .align directive to it. This way we -avoid gaps between segments. too many gaps lead to a virtual array -failure. it cannot hold more than ~1000 gaps. -""" - -ida_segment.ADDSEG_IDBENC -""" -non-ASCII bytes will be decoded accordingly - -'name' and 'sclass' are given in the IDB encoding; -""" - -ida_segment.ADDSEG_NOAA -""" -do not mark new segment for auto-analysis -""" - -ida_segment.ADDSEG_NOSREG -""" -(undefine all default segment registers) - -set all default segment register values to 'BADSEL' -""" - -ida_segment.ADDSEG_NOTRUNC -""" -destroy/truncate old segments instead. - -don't truncate the new segment at the beginning of the next segment if -they overlap. -""" - -ida_segment.ADDSEG_OR_DIE -""" - 'qexit()' if can't add a segment -""" - -ida_segment.ADDSEG_QUIET -""" -silent mode, no "Adding segment..." in the messages window -""" - -ida_segment.ADDSEG_SPARSE -""" -use sparse storage method for the new segment -""" - -ida_segment.CSS_BREAK -""" -memory reading process stopped by user -""" - -ida_segment.CSS_NODBG -""" -debugger is not running -""" - -ida_segment.CSS_NOMEM -""" -is too big) - -not enough memory (might be because the segment -""" - -ida_segment.CSS_NORANGE -""" -could not find corresponding memory range -""" - -ida_segment.CSS_OK -""" -ok -""" - -ida_segment.MAX_GROUPS -""" -max number of segment groups -""" - -ida_segment.MAX_SEGM_TRANSLATIONS -""" -max number of segment translations -""" - -ida_segment.MOVE_SEGM_CHUNK -""" -Too many chunks are defined, can't move. -""" - -ida_segment.MOVE_SEGM_DEBUG -""" -Debugger segments cannot be moved. -""" - -ida_segment.MOVE_SEGM_IDP -""" -IDP module forbids moving the segment. -""" - -ida_segment.MOVE_SEGM_LOADER -""" -The segment has been moved but the loader complained. -""" - -ida_segment.MOVE_SEGM_ODD -""" -Cannot move segments by an odd number of bytes. -""" - -ida_segment.MOVE_SEGM_OK -""" -all ok -""" - -ida_segment.MOVE_SEGM_ORPHAN -""" -Orphan bytes hinder segment movement. -""" - -ida_segment.MOVE_SEGM_PARAM -""" -The specified segment does not exist. -""" - -ida_segment.MOVE_SEGM_ROOM -""" -Not enough free room at the target address. -""" - -ida_segment.MSF_FIXONCE -""" -valid for 'rebase_program()' . see 'loader_t::move_segm' . - -call loader only once with the special calling method. -""" - -ida_segment.MSF_LDKEEP -""" -keep the loader in the memory (optimization) -""" - -ida_segment.MSF_NETNODES -""" -valid for 'rebase_program()' - -move netnodes instead of changing inf.netdelta (this is slower) -""" - -ida_segment.MSF_NOFIX -""" -don't call the loader to fix relocations -""" - -ida_segment.MSF_PRIORITY -""" -valid for 'move_segm()' - -loader segments will overwrite any existing debugger segments when -moved. -""" - -ida_segment.MSF_SILENT -""" -don't display a "please wait" box on the screen -""" - -ida_segment.SEGMOD_KEEP -""" -keep information (code & data, etc) -""" - -ida_segment.SEGMOD_KEEP0 -""" -flag for internal use, don't set -""" - -ida_segment.SEGMOD_KEEPSEL -""" -do not try to delete unused selector -""" - -ida_segment.SEGMOD_KILL -""" -disable addresses if segment gets shrinked or deleted -""" - -ida_segment.SEGMOD_NOMOVE -""" -(for 'set_segm_start()' ) - -don't move info from the start of segment to the new start address -""" - -ida_segment.SEGMOD_SILENT -""" -be silent -""" - -ida_segment.SEGMOD_SPARSE -""" -(for 'set_segm_start()' , 'set_segm_end()' ) - -use sparse storage if extending the segment -""" - -ida_segment.SEGPERM_EXEC -""" -Execute. -""" - -ida_segment.SEGPERM_READ -""" -Read. -""" - -ida_segment.SEGPERM_WRITE -""" -Write. -""" - -ida_segment.SEG_ABSSYM -""" -segment with definitions of absolute symbols -""" - -ida_segment.SEG_BSS -""" -uninitialized segment -""" - -ida_segment.SEG_CODE -""" -code segment -""" - -ida_segment.SEG_COMM -""" -segment with communal definitions -""" - -ida_segment.SEG_DATA -""" -data segment -""" - -ida_segment.SEG_GRP -""" -group of segments -""" - -ida_segment.SEG_IMEM -""" -internal processor memory & sfr (8051) -""" - -ida_segment.SEG_IMP -""" -java: implementation segment -""" - -ida_segment.SEG_NORM -""" -unknown type, no assumptions -""" - -ida_segment.SEG_NULL -""" -zero-length segment -""" - -ida_segment.SEG_UNDF -""" -undefined segment type (not used) -""" - -ida_segment.SEG_XTRN -""" -no instructions are allowed - -segment with 'extern' definitions. -""" - -ida_segment.SFL_COMORG -""" -IDP dependent field (IBM PC: if set, ORG directive is not commented -out) -""" - -ida_segment.SFL_DEBUG -""" -Is the segment created for the debugger?. Such segments are temporary -and do not have permanent flags. -""" - -ida_segment.SFL_HEADER -""" -Header segment (do not create offsets to it in the disassembly) -""" - -ida_segment.SFL_HIDDEN -""" -Is the segment hidden? -""" - -ida_segment.SFL_HIDETYPE -""" -Hide segment type (do not print it in the listing) -""" - -ida_segment.SFL_LOADER -""" -Is the segment created by the loader? -""" - -ida_segment.SFL_OBOK -""" -Orgbase is present? (IDP dependent field) -""" - -ida_segment.SREG_NUM -""" -Maximum number of segment registers is 16 (see 'segregs.hpp' ) -""" - -ida_segment.saAbs -""" -Absolute segment. -""" - -ida_segment.saGroup -""" -Segment group. -""" - -ida_segment.saRel1024Bytes -""" -1024 bytes -""" - -ida_segment.saRel128Bytes -""" -128 bytes -""" - -ida_segment.saRel2048Bytes -""" -2048 bytes -""" - -ida_segment.saRel32Bytes -""" -32 bytes -""" - -ida_segment.saRel4K -""" -alignment. It is not supported by LINK. - -This value is used by the PharLap OMF for page (4K) -""" - -ida_segment.saRel512Bytes -""" -512 bytes -""" - -ida_segment.saRel64Bytes -""" -64 bytes -""" - -ida_segment.saRelByte -""" -Relocatable, byte aligned. -""" - -ida_segment.saRelDble -""" -boundary. - -Relocatable, aligned on a double word (4-byte) -""" - -ida_segment.saRelPage -""" -Relocatable, aligned on 256-byte boundary. -""" - -ida_segment.saRelPara -""" -Relocatable, paragraph (16-byte) aligned. -""" - -ida_segment.saRelQword -""" -8 bytes -""" - -ida_segment.saRelWord -""" -Relocatable, word (2-byte) aligned. -""" - -ida_segment.scCommon -""" -Common. Combine by overlay using maximum size. -""" - -ida_segment.scGroup -""" -Segment group. -""" - -ida_segment.scPriv -""" -segment. - -Private. Do not combine with any other program -""" - -ida_segment.scPub -""" -the alignment requirement. - -Public. Combine by appending at an offset that meets -""" - -ida_segment.scPub2 -""" -As defined by Microsoft, same as C=2 (public). -""" - -ida_segment.scPub3 -""" -As defined by Microsoft, same as C=2 (public). -""" - -ida_segment.scStack -""" -byte alignment. - -Stack. Combine as for C=2. This combine type forces -""" -=== ida_segment EPYDOC INJECTIONS END === -ida_segregs.copy_sreg_ranges(): - - copy_sreg_ranges(dst_rg, src_rg, map_selector=False) - - - Duplicate segment register ranges. - - @param dst_rg: number of destination segment register (C++: int) - @param src_rg: copy ranges from (C++: int) - @param map_selector: map selectors to linear addresses using sel2ea() - (C++: bool) - - -ida_segregs.del_sreg_range(): - - del_sreg_range(ea, rg) -> bool - - - Delete segment register range started at ea. When a segment register - range is deleted, the previous range is extended to cover the empty - space. The segment register range at the beginning of a segment cannot - be deleted. - - @param ea: start_ea of the deleted range (C++: ea_t) - @param rg: the segment register number (C++: int) - @return: success - - -ida_segregs.get_prev_sreg_range(): - - get_prev_sreg_range(out, ea, rg) -> bool - - - Get segment register range previous to one with address.more efficient - then get_sreg_range(reg, ea-1) - - @param out: segment register range (C++: sreg_range_t *) - @param ea: any linear address in the program (C++: ea_t) - @param rg: the segment register number (C++: int) - @return: success - - -ida_segregs.get_sreg(): - - get_sreg(ea, rg) -> sel_t - - - Get value of a segment register. This function uses segment register - range and default segment register values stored in the segment - structure. - - @param ea: linear address in the program (C++: ea_t) - @param rg: number of the segment register (C++: int) - @return: value of the segment register, BADSEL if value is unknown. - - -ida_segregs.get_sreg_range(): - - get_sreg_range(out, ea, rg) -> bool - - - Get segment register range by linear address. - - @param out: segment register range (C++: sreg_range_t *) - @param ea: any linear address in the program (C++: ea_t) - @param rg: the segment register number (C++: int) - @return: success - - -ida_segregs.get_sreg_range_num(): - - get_sreg_range_num(ea, rg) -> int - - - Get number of segment register range by address. - - @param ea: any address in the range (C++: ea_t) - @param rg: the segment register number (C++: int) - @return: -1 if no range occupies the specified address. otherwise - returns number of the specified range - (0..get_srranges_qty()-1) - - -ida_segregs.get_sreg_ranges_qty(): - - get_sreg_ranges_qty(rg) -> size_t - - - Get number of segment register ranges. - - @param rg: the segment register number (C++: int) - - -ida_segregs.getn_sreg_range(): - - getn_sreg_range(out, rg, n) -> bool - - - Get segment register range by its number. - - @param out: segment register range (C++: sreg_range_t *) - @param rg: the segment register number (C++: int) - @param n: number of range (0..qty()-1) (C++: int) - @return: success - - -ida_segregs.set_default_dataseg(): - - set_default_dataseg(ds_sel) - - - Set default value of DS register for all segments. - - - @param ds_sel (C++: sel_t) - - -ida_segregs.set_default_sreg_value(): - - set_default_sreg_value(sg, rg, value) -> bool - - - Set default value of a segment register for a segment. - - @param sg: pointer to segment structure if NULL, then set the register - for all segments (C++: segment_t *) - @param rg: number of segment register (C++: int) - @param value: its default value. this value will be used by - get_sreg() if value of the register is unknown at the - specified address. (C++: sel_t) - @return: success - - -ida_segregs.set_sreg_at_next_code(): - - set_sreg_at_next_code(ea1, ea2, rg, value) - - - Set the segment register value at the next instruction. This function - is designed to be called from 'idb_event::sgr_changed' handler in - order to contain the effect of changing a segment register value only - until the next instruction.It is useful, for example, in the ARM - module: the modification of the T register does not affect existing - instructions later in the code. - - @param ea1: address to start to search for an instruction (C++: ea_t) - @param ea2: the maximal address (C++: ea_t) - @param rg: the segment register number (C++: int) - @param value: the segment register value (C++: sel_t) - - -ida_segregs.split_sreg_range(): - - split_sreg_range(ea, rg, v, tag, silent=False) -> bool - - - Create a new segment register range. This function is used when the - IDP emulator detects that a segment register changes its value. - - @param ea: linear address where the segment register will have a new - value. if ea== BADADDR , nothing to do. (C++: ea_t) - @param rg: the number of the segment register (C++: int) - @param v: the new value of the segment register. If the value is - unknown, you should specify BADSEL . (C++: sel_t) - @param tag: the register info tag. see Segment register range tags - (C++: uchar) - @param silent: if false, display a warning() in the case of failure - (C++: bool) - @return: success - - -class ida_segregs.sreg_range_t(): - - Proxy of C++ sreg_range_t class - - -ida_segregs.sreg_range_t._print(): - - _print(self) -> size_t - - -ida_segregs.sreg_range_t.clear(): - - clear(self) - - -ida_segregs.sreg_range_t.compare(): - - compare(self, r) -> int - - -ida_segregs.sreg_range_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_segregs.sreg_range_t.empty(): - - empty(self) -> bool - - -ida_segregs.sreg_range_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_segregs.sreg_range_t.extend(): - - extend(self, ea) - - -ida_segregs.sreg_range_t.intersect(): - - intersect(self, r) - - -ida_segregs.sreg_range_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_segregs.sreg_range_t.size(): - - size(self) -> asize_t - - -ida_segregs.sreg_range_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_segregs.sreg_range_t.tag: - sreg_range_t_tag_get(self) -> uchar - -ida_segregs.sreg_range_t.val: - sreg_range_t_val_get(self) -> sel_t - - -=== ida_segregs EPYDOC INJECTIONS === -ida_segregs.SR_auto -""" -the value is determined by IDA -""" - -ida_segregs.SR_autostart -""" -used as 'SR_auto' for segment starting address -""" - -ida_segregs.SR_inherit -""" -the value is inherited from the previous range -""" - -ida_segregs.SR_user -""" -the value is specified by the user -""" -=== ida_segregs EPYDOC INJECTIONS END === -ida_strlist.build_strlist(): - - build_strlist() - - - Build the string list. You should initialize options before this call - using the restore_config() or setup_strings_window() methods. - - -ida_strlist.clear_strlist(): - - clear_strlist() - - - Clear the string list. - - -ida_strlist.get_strlist_item(): - - get_strlist_item(si, n) -> bool - - - Get nth element of the string list (n=0.. 'get_strlist_qty()' -1) - - - @param si (C++: string_info_t *) - @param n (C++: size_t) - - -ida_strlist.get_strlist_options(): - - get_strlist_options() -> strwinsetup_t - - - Get access to the static string list options. - - -ida_strlist.get_strlist_qty(): - - get_strlist_qty() -> size_t - - - Get number of elements in the string list. - - -class ida_strlist.string_info_t(): - - Proxy of C++ string_info_t class - - -ida_strlist.string_info_t.ea: - string_info_t_ea_get(self) -> ea_t - -ida_strlist.string_info_t.length: - string_info_t_length_get(self) -> int - -ida_strlist.string_info_t.type: - string_info_t_type_get(self) -> int - -class ida_strlist.strwinsetup_t(): - - Proxy of C++ strwinsetup_t class - - -ida_strlist.strwinsetup_t.display_only_existing_strings: - strwinsetup_t_display_only_existing_strings_get(self) -> uchar - -ida_strlist.strwinsetup_t.ignore_heads: - strwinsetup_t_ignore_heads_get(self) -> uchar - -ida_strlist.strwinsetup_t.is_initialized(): - - is_initialized(self) -> bool - - -ida_strlist.strwinsetup_t.minlen: - strwinsetup_t_minlen_get(self) -> sval_t - -ida_strlist.strwinsetup_t.only_7bit: - strwinsetup_t_only_7bit_get(self) -> uchar - -ida_strlist.strwinsetup_t.strtypes: - - _get_strtypes(self) -> PyObject * - - -ida_struct.add_struc(): - - add_struc(idx, name, is_union=False) -> tid_t - - - Create a structure type. if idx== 'BADADDR' then add as the last idx. - if name==NULL then a name will be generated "struct_%d". - - @param idx (C++: uval_t) - @param name (C++: const char *) - @param is_union (C++: bool) - - -ida_struct.add_struc_member(): - - add_struc_member(sptr, fieldname, offset, flag, mt, nbytes) -> struc_error_t - - - Add member to existing structure. - - @param sptr: structure to modify (C++: struc_t *) - @param fieldname: if NULL, then "anonymous_#" name will be generated - (C++: const char *) - @param offset: BADADDR means add to the end of structure (C++: ea_t) - @param flag: type + representation bits (C++: flags_t) - @param mt: additional info about member type. must be present for - structs, offsets, enums, strings, struct offsets. (C++: - const opinfo_t *) - @param nbytes: if == 0 then the structure will be a varstruct. in this - case the member should be the last member in the - structure (C++: asize_t) - - -ida_struct.del_member_tinfo(): - - del_member_tinfo(sptr, mptr) -> bool - - - Delete tinfo for given member. - - - @param sptr (C++: struc_t *) - @param mptr (C++: member_t *) - - -ida_struct.del_struc(): - - del_struc(sptr) -> bool - - - Delete a structure type. - - - @param sptr (C++: struc_t *) - - -ida_struct.del_struc_member(): - - del_struc_member(sptr, offset) -> bool - - - Delete member at given offset. - - - @param sptr (C++: struc_t *) - @param offset (C++: ea_t) - - -ida_struct.del_struc_members(): - - del_struc_members(sptr, off1, off2) -> int - - - Delete members which occupy range of offsets (off1..off2). - - @param sptr (C++: struc_t *) - @param off1 (C++: ea_t) - @param off2 (C++: ea_t) - @return: number of deleted members or -1 on error - - -ida_struct.expand_struc(): - - expand_struc(sptr, offset, delta, recalc=True) -> bool - - - Expand/Shrink structure type. - - - @param sptr (C++: struc_t *) - @param offset (C++: ea_t) - @param delta (C++: adiff_t) - @param recalc (C++: bool) - - -ida_struct.get_best_fit_member(): - - get_best_fit_member(sptr, offset) -> member_t - - - Get member that is most likely referenced by the specified offset. - Useful for offsets > sizeof(struct). - - @param sptr (C++: const struc_t *) - @param offset (C++: asize_t) - - -ida_struct.get_first_struc_idx(): - - get_first_struc_idx() -> uval_t - - - Get index of first structure. - - @return: BADADDR if no known structures, 0 otherwise - - -ida_struct.get_last_struc_idx(): - - get_last_struc_idx() -> uval_t - - - Get index of last structure. - - @return: BADADDR if no known structures, get_struc_qty() -1 - otherwise - - -ida_struct.get_max_offset(): - - get_max_offset(sptr) -> ea_t - - - For unions: returns number of members, for structs: returns size of - structure. - - - @param sptr (C++: struc_t *) - - -ida_struct.get_member(): - - get_member(sptr, offset) -> member_t - - - Get member at given offset. - - - @param sptr (C++: const struc_t *) - @param offset (C++: asize_t) - - -ida_struct.get_member_by_fullname(): - - get_member_by_fullname(fullname) -> member_t - - - Get a member by its fully qualified name, "struct.field". - - - @param fullname (C++: const char *) - - -ida_struct.get_member_by_id(): - - get_member_by_id(mid) -> member_t - - - Check if the specified member id points to a struct member. - - - @param mid (C++: tid_t) - - -ida_struct.get_member_by_name(): - - get_member_by_name(sptr, membername) -> member_t - - - Get a member by its name, like "field44". - - - @param sptr (C++: const struc_t *) - @param membername (C++: const char *) - - -ida_struct.get_member_cmt(): - - get_member_cmt(mid, repeatable) -> ssize_t - - - Get comment of structure member. - - - @param mid (C++: tid_t) - @param repeatable (C++: bool) - - -ida_struct.get_member_fullname(): - - get_member_fullname(mid) -> ssize_t - - - Get a member's fully qualified name, "struct.field". - - - @param mid (C++: tid_t) - - -ida_struct.get_member_id(): - - get_member_id(sptr, offset) -> tid_t - - - Get member id at given offset. - - - @param sptr (C++: const struc_t *) - @param offset (C++: asize_t) - - -ida_struct.get_member_name(): - - get_member_name(mid) -> ssize_t - - - Get name of structure member. - - - @param mid (C++: tid_t) - - -ida_struct.get_member_size(): - - get_member_size(nonnul_mptr) -> asize_t - - - Get size of structure member. May return 0 for the last member of - varstruct. For union members, returns 'member_t::eoff' . - - -ida_struct.get_member_struc(): - - get_member_struc(fullname) -> struc_t - - - Get containing structure of member by its full name "struct.field". - - - @param fullname (C++: const char *) - - -ida_struct.get_member_tinfo(): - - get_member_tinfo(tif, mptr) -> bool - - - Get tinfo for given member. - - - @param tif (C++: tinfo_t *) - @param mptr (C++: const member_t *) - - -ida_struct.get_next_member_idx(): - - get_next_member_idx(sptr, off) -> ssize_t - - - Get the next member idx, if it does not exist, return -1. - - - @param sptr (C++: const struc_t *) - @param off (C++: asize_t) - - -ida_struct.get_next_struc_idx(): - - get_next_struc_idx(idx) -> uval_t - - - Get next struct index. - - @param idx (C++: uval_t) - @return: BADADDR if resulting index is out of bounds, otherwise idx++ - - -ida_struct.get_or_guess_member_tinfo(): - - get_or_guess_member_tinfo(tif, mptr) -> bool - - - Try to get tinfo for given member - if failed, generate a tinfo using - information about the member id from the disassembly - - @param tif (C++: tinfo_t *) - @param mptr (C++: const member_t *) - - -ida_struct.get_prev_member_idx(): - - get_prev_member_idx(sptr, off) -> ssize_t - - - Get the prev member idx, if it does not exist, return -1. - - - @param sptr (C++: const struc_t *) - @param off (C++: asize_t) - - -ida_struct.get_prev_struc_idx(): - - get_prev_struc_idx(idx) -> uval_t - - - Get previous struct index. - - @param idx (C++: uval_t) - @return: BADADDR if resulting index is negative, otherwise idx - 1 - - -ida_struct.get_sptr(): - - get_sptr(mptr) -> struc_t - - - Get child struct if member is a struct. - - - @param mptr (C++: const member_t *) - - -ida_struct.get_struc(): - - get_struc(id) -> struc_t - - - Get pointer to struct type info. - - - @param id (C++: tid_t) - - -ida_struct.get_struc_by_idx(): - - get_struc_by_idx(idx) -> tid_t - - - Get struct id by struct number. - - - @param idx (C++: uval_t) - - -ida_struct.get_struc_cmt(): - - get_struc_cmt(id, repeatable) -> ssize_t - - - Get struct comment. - - - @param id (C++: tid_t) - @param repeatable (C++: bool) - - -ida_struct.get_struc_first_offset(): - - get_struc_first_offset(sptr) -> ea_t - - - Get offset of first member. - - @param sptr (C++: const struc_t *) - @return: BADADDR if memqty == 0 - - -ida_struct.get_struc_id(): - - get_struc_id(name) -> tid_t - - - Get struct id by name. - - - @param name (C++: const char *) - - -ida_struct.get_struc_idx(): - - get_struc_idx(id) -> uval_t - - - Get internal number of the structure. - - - @param id (C++: tid_t) - - -ida_struct.get_struc_last_offset(): - - get_struc_last_offset(sptr) -> ea_t - - - Get offset of last member. - - @param sptr (C++: const struc_t *) - @return: BADADDR if memqty == 0 - - -ida_struct.get_struc_name(): - - get_struc_name(id) -> ssize_t - - - Get struct name by id. - - - @param id (C++: tid_t) - - -ida_struct.get_struc_next_offset(): - - get_struc_next_offset(sptr, offset) -> ea_t - - - Get offset of member with smallest offset larger than 'offset'. - - @param sptr (C++: const struc_t *) - @param offset (C++: ea_t) - @return: BADADDR if no next offset - - -ida_struct.get_struc_prev_offset(): - - get_struc_prev_offset(sptr, offset) -> ea_t - - - Get offset of member with largest offset less than 'offset'. - - @param sptr (C++: const struc_t *) - @param offset (C++: ea_t) - @return: BADADDR if no prev offset - - -ida_struct.get_struc_qty(): - - get_struc_qty() -> size_t - - - Get number of known structures. - - -ida_struct.get_struc_size(): - - get_struc_size(sptr) -> asize_t - get_struc_size(id) -> asize_t - - - Get struct size (also see 'get_struc_size(tid_t)' ) - - - @param sptr (C++: const struc_t *) - - -ida_struct.is_anonymous_member_name(): - - is_anonymous_member_name(name) -> bool - - - Is member name prefixed with "anonymous"? - - - @param name (C++: const char *) - - -ida_struct.is_dummy_member_name(): - - is_dummy_member_name(name) -> bool - - - Is member name an auto-generated name? - - - @param name (C++: const char *) - - -ida_struct.is_member_id(): - - is_member_id(mid) -> bool - - - Is a member id? - - - @param mid (C++: tid_t) - - -ida_struct.is_special_member(): - - is_special_member(id) -> bool - - - Is a special member with the name beginning with ' '? - - - @param id (C++: tid_t) - - -ida_struct.is_union(): - - is_union(id) -> bool - - - Is a union? - - - @param id (C++: tid_t) - - -ida_struct.is_varmember(): - - is_varmember(mptr) -> bool - - - Is variable size member? - - - @param mptr (C++: const member_t *) - - -ida_struct.is_varstr(): - - is_varstr(id) -> bool - - - Is variable size structure? - - - @param id (C++: tid_t) - - -class ida_struct.member_t(): - - Proxy of C++ member_t class - - -ida_struct.member_t.by_til(): - - by_til(self) -> bool - - -ida_struct.member_t.eoff: - member_t_eoff_get(self) -> ea_t - -ida_struct.member_t.flag: - member_t_flag_get(self) -> flags_t - -ida_struct.member_t.get_soff(): - - get_soff(self) -> ea_t - - -ida_struct.member_t.has_ti(): - - has_ti(self) -> bool - - -ida_struct.member_t.has_union(): - - has_union(self) -> bool - - -ida_struct.member_t.id: - member_t_id_get(self) -> tid_t - -ida_struct.member_t.is_baseclass(): - - is_baseclass(self) -> bool - - -ida_struct.member_t.is_destructor(): - - is_destructor(self) -> bool - - -ida_struct.member_t.is_dupname(): - - is_dupname(self) -> bool - - -ida_struct.member_t.props: - member_t_props_get(self) -> uint32 - -ida_struct.member_t.soff: - member_t_soff_get(self) -> ea_t - -ida_struct.member_t.unimem(): - - unimem(self) -> bool - - -ida_struct.retrieve_member_info(): - - retrieve_member_info(buf, mptr) -> opinfo_t - - - Get operand type info for member. - - - @param buf (C++: opinfo_t *) - @param mptr (C++: const member_t *) - - -ida_struct.save_struc(): - - save_struc(sptr, may_update_ltypes=True) - - - Update struct information in the database (internal function) - - - @param sptr (C++: struc_t *) - @param may_update_ltypes (C++: bool) - - -ida_struct.set_member_cmt(): - - set_member_cmt(mptr, cmt, repeatable) -> bool - - - Set member comment. - - - @param mptr (C++: member_t *) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -ida_struct.set_member_name(): - - set_member_name(sptr, offset, name) -> bool - - - Set name of member at given offset. - - - @param sptr (C++: struc_t *) - @param offset (C++: ea_t) - @param name (C++: const char *) - - -ida_struct.set_member_tinfo(): - - set_member_tinfo(sptr, mptr, memoff, tif, flags) -> smt_code_t - - - Set tinfo for given member. - - @param sptr: containing struct (C++: struc_t *) - @param mptr: target member (C++: member_t *) - @param memoff: offset within member (C++: uval_t) - @param tif: type info (C++: const tinfo_t &) - @param flags: Set member tinfo flags (C++: int) - - -ida_struct.set_member_type(): - - set_member_type(sptr, offset, flag, mt, nbytes) -> bool - - - Set type of member at given offset (also see 'add_struc_member()' ) - - - @param sptr (C++: struc_t *) - @param offset (C++: ea_t) - @param flag (C++: flags_t) - @param mt (C++: const opinfo_t *) - @param nbytes (C++: asize_t) - - -ida_struct.set_struc_align(): - - set_struc_align(sptr, shift) -> bool - - - Set structure alignment ( 'SF_ALIGN' ) - - - @param sptr (C++: struc_t *) - @param shift (C++: int) - - -ida_struct.set_struc_cmt(): - - set_struc_cmt(id, cmt, repeatable) -> bool - - - Set structure comment. - - - @param id (C++: tid_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -ida_struct.set_struc_hidden(): - - set_struc_hidden(sptr, is_hidden) - - - Hide/unhide a struct type. - - - @param sptr (C++: struc_t *) - @param is_hidden (C++: bool) - - -ida_struct.set_struc_idx(): - - set_struc_idx(sptr, idx) -> bool - - - Set internal number of struct. Also see 'get_struc_idx()' , - 'get_struc_by_idx()' . - - @param sptr (C++: const struc_t *) - @param idx (C++: uval_t) - - -ida_struct.set_struc_listed(): - - set_struc_listed(sptr, is_listed) - - - Add/remove a struct type from the struct list. - - - @param sptr (C++: struc_t *) - @param is_listed (C++: bool) - - -ida_struct.set_struc_name(): - - set_struc_name(id, name) -> bool - - - Set structure name. - - - @param id (C++: tid_t) - @param name (C++: const char *) - - -ida_struct.stroff_as_size(): - - stroff_as_size(plen, sptr, value) -> bool - - - Should display a structure offset expression as the structure size? - - - @param plen (C++: int) - @param sptr (C++: const struc_t *) - @param value (C++: asize_t) - - -class ida_struct.struc_t(): - - Proxy of C++ struc_t class - - -ida_struct.struc_t.age: - struc_t_age_get(self) -> ushort - -ida_struct.struc_t.from_til(): - - from_til(self) -> bool - - -ida_struct.struc_t.get_alignment(): - - get_alignment(self) -> int - - -ida_struct.struc_t.get_member(): - - get_member(self, index) -> member_t - - -ida_struct.struc_t.has_union(): - - has_union(self) -> bool - - -ida_struct.struc_t.id: - struc_t_id_get(self) -> tid_t - -ida_struct.struc_t.is_choosable(): - - is_choosable(self) -> bool - - -ida_struct.struc_t.is_frame(): - - is_frame(self) -> bool - - -ida_struct.struc_t.is_ghost(): - - is_ghost(self) -> bool - - -ida_struct.struc_t.is_hidden(): - - is_hidden(self) -> bool - - -ida_struct.struc_t.is_union(): - - is_union(self) -> bool - - -ida_struct.struc_t.is_varstr(): - - is_varstr(self) -> bool - - -ida_struct.struc_t.members: - struc_t_members_get(self) -> member_t - -ida_struct.struc_t.memqty: - struc_t_memqty_get(self) -> uint32 - -ida_struct.struc_t.ordinal: - struc_t_ordinal_get(self) -> int32 - -ida_struct.struc_t.props: - struc_t_props_get(self) -> uint32 - -ida_struct.struc_t.set_alignment(): - - set_alignment(self, shift) - - -ida_struct.struc_t.set_ghost(): - - set_ghost(self, _is_ghost) - - -class ida_struct.struct_field_visitor_t(): - - Proxy of C++ struct_field_visitor_t class - - -ida_struct.struct_field_visitor_t.visit_field(): - - visit_field(self, sptr, mptr) -> int - - -ida_struct.visit_stroff_fields(): - - visit_stroff_fields(sfv, path, disp, appzero) -> flags_t - - - Visit structure fields in a stroff expression or in a reference to a - struct data variable. This function can be used to enumerate all - components of an expression like 'a.b.c'. - - @param sfv: visitor object (C++: struct_field_visitor_t &) - @param path: struct path (path[0] contains the initial struct id) - (C++: const tid_t *) - @param disp: offset into structure (C++: adiff_t *) - @param appzero: should visit field at offset zero? (C++: bool) - - - -=== ida_struct EPYDOC INJECTIONS === -ida_struct.MF_BASECLASS -""" -a special member representing base class -""" - -ida_struct.MF_BYTIL -""" -the member was created due to the type system -""" - -ida_struct.MF_DTOR -""" -a special member representing destructor -""" - -ida_struct.MF_DUPNAME -""" -duplicate name resolved with _N suffix (N==soff) -""" - -ida_struct.MF_HASTI -""" -has type information? -""" - -ida_struct.MF_HASUNI -""" -has members of type "union"? -""" - -ida_struct.MF_OK -""" -is the member ok? (always yes) -""" - -ida_struct.MF_UNIMEM -""" -is a member of a union? -""" - -ida_struct.SET_MEMTI_BYTIL -""" -new type was created by the type subsystem -""" - -ida_struct.SET_MEMTI_COMPATIBLE -""" -new type must be compatible with the old -""" - -ida_struct.SET_MEMTI_FUNCARG -""" -mptr is function argument (cannot create arrays) -""" - -ida_struct.SET_MEMTI_MAY_DESTROY -""" -may destroy other members -""" - -ida_struct.SET_MEMTI_USERTI -""" -user-specified type -""" - -ida_struct.SF_ALIGN -""" -alignment (shift amount: 0..31) -""" - -ida_struct.SF_FRAME -""" -the structure is a function frame -""" - -ida_struct.SF_GHOST -""" -ghost copy of a local type -""" - -ida_struct.SF_HASUNI -""" -has members of type "union"? -""" - -ida_struct.SF_HIDDEN -""" -the structure is collapsed -""" - -ida_struct.SF_NOLIST -""" -don't include in the chooser list -""" - -ida_struct.SF_TYPLIB -""" -the structure comes from type library -""" - -ida_struct.SF_UNION -""" -varunions are prohibited! - -is a union? -""" - -ida_struct.SF_VAR -""" -is variable size structure (varstruct)? a variable size structure is -one with the zero size last member. if the last member is a varstruct, -then the current structure is a varstruct too. -""" - -ida_struct.STRUC_SEPARATOR -""" -structname.fieldname -""" -=== ida_struct EPYDOC INJECTIONS END === -ida_tryblks.add_tryblk(): - - add_tryblk(tb) -> int - - - Add one try block information. - - @param tb: try block to add. (C++: const tryblk_t &) - @return: error code; 0 means good - - -class ida_tryblks.catch_t(): - - Proxy of C++ catch_t class - - -ida_tryblks.catch_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.catch_t.at(): - - at(self, _idx) -> range_t - - -ida_tryblks.catch_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_tryblks.catch_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.catch_t.clear(): - - clear(self) - - -ida_tryblks.catch_t.disp: - try_handler_t_disp_get(self) -> sval_t - -ida_tryblks.catch_t.empty(): - - empty(self) -> bool - - -ida_tryblks.catch_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_tryblks.catch_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_tryblks.catch_t.extract(): - - extract(self) -> range_t - - -ida_tryblks.catch_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_tryblks.catch_t.fpreg: - try_handler_t_fpreg_get(self) -> int - -ida_tryblks.catch_t.grow(): - - grow(self, x=range_t()) - - -ida_tryblks.catch_t.has(): - - has(self, x) -> bool - - -ida_tryblks.catch_t.inject(): - - inject(self, s, len) - - -ida_tryblks.catch_t.insert(): - - insert(self, it, x) -> range_t - - -ida_tryblks.catch_t.obj: - catch_t_obj_get(self) -> sval_t - -ida_tryblks.catch_t.pop_back(): - - pop_back(self) - - -ida_tryblks.catch_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_tryblks.catch_t.qclear(): - - qclear(self) - - -ida_tryblks.catch_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.catch_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.catch_t.size(): - - size(self) -> size_t - - -ida_tryblks.catch_t.swap(): - - swap(self, r) - - -ida_tryblks.catch_t.truncate(): - - truncate(self) - - -ida_tryblks.catch_t.type_id: - catch_t_type_id_get(self) -> sval_t - -class ida_tryblks.catchvec_t(): - - Proxy of C++ qvector<(catch_t)> class - - -ida_tryblks.catchvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.catchvec_t.at(): - - at(self, _idx) -> catch_t - - -ida_tryblks.catchvec_t.begin(): - - begin(self) -> catch_t - begin(self) -> catch_t - - -ida_tryblks.catchvec_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.catchvec_t.clear(): - - clear(self) - - -ida_tryblks.catchvec_t.empty(): - - empty(self) -> bool - - -ida_tryblks.catchvec_t.end(): - - end(self) -> catch_t - end(self) -> catch_t - - -ida_tryblks.catchvec_t.erase(): - - erase(self, it) -> catch_t - erase(self, first, last) -> catch_t - - -ida_tryblks.catchvec_t.extract(): - - extract(self) -> catch_t - - -ida_tryblks.catchvec_t.find(): - - find(self, x) -> catch_t - find(self, x) -> catch_t - - -ida_tryblks.catchvec_t.grow(): - - grow(self, x=catch_t()) - - -ida_tryblks.catchvec_t.has(): - - has(self, x) -> bool - - -ida_tryblks.catchvec_t.inject(): - - inject(self, s, len) - - -ida_tryblks.catchvec_t.insert(): - - insert(self, it, x) -> catch_t - - -ida_tryblks.catchvec_t.pop_back(): - - pop_back(self) - - -ida_tryblks.catchvec_t.push_back(): - - push_back(self, x) - push_back(self) -> catch_t - - -ida_tryblks.catchvec_t.qclear(): - - qclear(self) - - -ida_tryblks.catchvec_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.catchvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.catchvec_t.size(): - - size(self) -> size_t - - -ida_tryblks.catchvec_t.swap(): - - swap(self, r) - - -ida_tryblks.catchvec_t.truncate(): - - truncate(self) - - -ida_tryblks.del_tryblks(): - - del_tryblks(range) - - - Delete try block information in the specified range. - - @param range: the range to be cleared (C++: const range_t &) - - -ida_tryblks.find_syseh(): - - find_syseh(ea) -> ea_t - - - Find the start address of the system eh region including the argument. - - @param ea: search address (C++: ea_t) - @return: start address of surrounding tryblk, otherwise BADADDR - - -ida_tryblks.get_tryblks(): - - get_tryblks(tbv, range) -> size_t - - - Retrieve try block information from the specified address range. Try - blocks are sorted by starting address and their nest levels - calculated. - - @param tbv: output buffer; may be NULL (C++: tryblks_t *) - @param range: address range to change (C++: const range_t &) - @return: number of found try blocks - - -class ida_tryblks.seh_t(): - - Proxy of C++ seh_t class - - -ida_tryblks.seh_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.seh_t.at(): - - at(self, _idx) -> range_t - - -ida_tryblks.seh_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_tryblks.seh_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.seh_t.clear(): - - clear(self) - - -ida_tryblks.seh_t.disp: - try_handler_t_disp_get(self) -> sval_t - -ida_tryblks.seh_t.empty(): - - empty(self) -> bool - - -ida_tryblks.seh_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_tryblks.seh_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_tryblks.seh_t.extract(): - - extract(self) -> range_t - - -ida_tryblks.seh_t.filter: - seh_t_filter_get(self) -> rangevec_t - -ida_tryblks.seh_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_tryblks.seh_t.fpreg: - try_handler_t_fpreg_get(self) -> int - -ida_tryblks.seh_t.grow(): - - grow(self, x=range_t()) - - -ida_tryblks.seh_t.has(): - - has(self, x) -> bool - - -ida_tryblks.seh_t.inject(): - - inject(self, s, len) - - -ida_tryblks.seh_t.insert(): - - insert(self, it, x) -> range_t - - -ida_tryblks.seh_t.pop_back(): - - pop_back(self) - - -ida_tryblks.seh_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_tryblks.seh_t.qclear(): - - qclear(self) - - -ida_tryblks.seh_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.seh_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.seh_t.seh_code: - seh_t_seh_code_get(self) -> ea_t - -ida_tryblks.seh_t.size(): - - size(self) -> size_t - - -ida_tryblks.seh_t.swap(): - - swap(self, r) - - -ida_tryblks.seh_t.truncate(): - - truncate(self) - - -class ida_tryblks.try_handler_t(): - - Proxy of C++ try_handler_t class - - -ida_tryblks.try_handler_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.try_handler_t.at(): - - at(self, _idx) -> range_t - - -ida_tryblks.try_handler_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_tryblks.try_handler_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.try_handler_t.clear(): - - clear(self) - - -ida_tryblks.try_handler_t.disp: - try_handler_t_disp_get(self) -> sval_t - -ida_tryblks.try_handler_t.empty(): - - empty(self) -> bool - - -ida_tryblks.try_handler_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_tryblks.try_handler_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_tryblks.try_handler_t.extract(): - - extract(self) -> range_t - - -ida_tryblks.try_handler_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_tryblks.try_handler_t.fpreg: - try_handler_t_fpreg_get(self) -> int - -ida_tryblks.try_handler_t.grow(): - - grow(self, x=range_t()) - - -ida_tryblks.try_handler_t.has(): - - has(self, x) -> bool - - -ida_tryblks.try_handler_t.inject(): - - inject(self, s, len) - - -ida_tryblks.try_handler_t.insert(): - - insert(self, it, x) -> range_t - - -ida_tryblks.try_handler_t.pop_back(): - - pop_back(self) - - -ida_tryblks.try_handler_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_tryblks.try_handler_t.qclear(): - - qclear(self) - - -ida_tryblks.try_handler_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.try_handler_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.try_handler_t.size(): - - size(self) -> size_t - - -ida_tryblks.try_handler_t.swap(): - - swap(self, r) - - -ida_tryblks.try_handler_t.truncate(): - - truncate(self) - - -class ida_tryblks.tryblk_t(): - - Proxy of C++ tryblk_t class - - -ida_tryblks.tryblk_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.tryblk_t.at(): - - at(self, _idx) -> range_t - - -ida_tryblks.tryblk_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_tryblks.tryblk_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.tryblk_t.clear(): - - clear(self) - - -ida_tryblks.tryblk_t.cpp(): - - cpp(self) -> catchvec_t - - -ida_tryblks.tryblk_t.empty(): - - empty(self) -> bool - - -ida_tryblks.tryblk_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_tryblks.tryblk_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_tryblks.tryblk_t.extract(): - - extract(self) -> range_t - - -ida_tryblks.tryblk_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_tryblks.tryblk_t.get_kind(): - - get_kind(self) -> uchar - - -ida_tryblks.tryblk_t.grow(): - - grow(self, x=range_t()) - - -ida_tryblks.tryblk_t.has(): - - has(self, x) -> bool - - -ida_tryblks.tryblk_t.inject(): - - inject(self, s, len) - - -ida_tryblks.tryblk_t.insert(): - - insert(self, it, x) -> range_t - - -ida_tryblks.tryblk_t.is_cpp(): - - is_cpp(self) -> bool - - -ida_tryblks.tryblk_t.is_seh(): - - is_seh(self) -> bool - - -ida_tryblks.tryblk_t.level: - tryblk_t_level_get(self) -> uchar - -ida_tryblks.tryblk_t.pop_back(): - - pop_back(self) - - -ida_tryblks.tryblk_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_tryblks.tryblk_t.qclear(): - - qclear(self) - - -ida_tryblks.tryblk_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.tryblk_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.tryblk_t.seh(): - - seh(self) -> seh_t - - -ida_tryblks.tryblk_t.set_cpp(): - - set_cpp(self) -> catchvec_t - - -ida_tryblks.tryblk_t.set_seh(): - - set_seh(self) -> seh_t - - -ida_tryblks.tryblk_t.size(): - - size(self) -> size_t - - -ida_tryblks.tryblk_t.swap(): - - swap(self, r) - - -ida_tryblks.tryblk_t.truncate(): - - truncate(self) - - -class ida_tryblks.tryblks_t(): - - Proxy of C++ qvector<(tryblk_t)> class - - -ida_tryblks.tryblks_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.tryblks_t.at(): - - at(self, _idx) -> tryblk_t - - -ida_tryblks.tryblks_t.begin(): - - begin(self) -> tryblk_t - begin(self) -> tryblk_t - - -ida_tryblks.tryblks_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.tryblks_t.clear(): - - clear(self) - - -ida_tryblks.tryblks_t.empty(): - - empty(self) -> bool - - -ida_tryblks.tryblks_t.end(): - - end(self) -> tryblk_t - end(self) -> tryblk_t - - -ida_tryblks.tryblks_t.erase(): - - erase(self, it) -> tryblk_t - erase(self, first, last) -> tryblk_t - - -ida_tryblks.tryblks_t.extract(): - - extract(self) -> tryblk_t - - -ida_tryblks.tryblks_t.find(): - - find(self, x) -> tryblk_t - find(self, x) -> tryblk_t - - -ida_tryblks.tryblks_t.grow(): - - grow(self, x=tryblk_t()) - - -ida_tryblks.tryblks_t.has(): - - has(self, x) -> bool - - -ida_tryblks.tryblks_t.inject(): - - inject(self, s, len) - - -ida_tryblks.tryblks_t.insert(): - - insert(self, it, x) -> tryblk_t - - -ida_tryblks.tryblks_t.pop_back(): - - pop_back(self) - - -ida_tryblks.tryblks_t.push_back(): - - push_back(self, x) - push_back(self) -> tryblk_t - - -ida_tryblks.tryblks_t.qclear(): - - qclear(self) - - -ida_tryblks.tryblks_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.tryblks_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.tryblks_t.size(): - - size(self) -> size_t - - -ida_tryblks.tryblks_t.swap(): - - swap(self, r) - - -ida_tryblks.tryblks_t.truncate(): - - truncate(self) - - - -=== ida_tryblks EPYDOC INJECTIONS === -ida_tryblks.TBERR_EMPTY -""" -empty try block -""" - -ida_tryblks.TBERR_END -""" -bad end address -""" - -ida_tryblks.TBERR_INTERSECT -""" -range would intersect inner tryblk -""" - -ida_tryblks.TBERR_KIND -""" -illegal try block kind -""" - -ida_tryblks.TBERR_NO_CATCHES -""" -no catch blocks at all -""" - -ida_tryblks.TBERR_OK -""" -ok -""" - -ida_tryblks.TBERR_ORDER -""" -bad address order -""" - -ida_tryblks.TBERR_START -""" -bad start address -""" -=== ida_tryblks EPYDOC INJECTIONS END === -ida_typeinf.add_til(): - - add_til(name, flags) -> int - - - Load a til file. - - @param name: til name (C++: const char *) - @param flags: combination of Load TIL flags (C++: int) - @return: one of Load TIL result codes - - -ida_typeinf.alloc_type_ordinal(): - - alloc_type_ordinal(ti) -> uint32 - - - \call2{alloc_type_ordinals,ti,1} - - - @param ti (C++: til_t *) - - -ida_typeinf.alloc_type_ordinals(): - - alloc_type_ordinals(ti, qty) -> uint32 - - - Allocate a range of ordinal numbers for new types. - - @param ti: type library (C++: til_t *) - @param qty: number of ordinals to allocate (C++: int) - @return: the first ordinal. 0 means failure. - - -class ida_typeinf.aloc_visitor_t(): - - Proxy of C++ aloc_visitor_t class - - -ida_typeinf.aloc_visitor_t.visit_location(): - - visit_location(self, v, off, size) -> int - - -ida_typeinf.append_abi_opts(): - - append_abi_opts(abi_opts, user_level=False) -> bool - - - Add/remove/check ABI option General form of full abi name: abiname- - opt1-opt2-... or -opt1-opt2-... - - @param abi_opts: - ABI options to add/remove in form opt1-opt2-... - (C++: const char *) - @param user_level: - initiated by user if TRUE (==SETCOMP_BY_USER) - (C++: bool) - @return: success - - -ida_typeinf.append_argloc(): - - append_argloc(out, vloc) -> bool - - - Serialize argument location. - - - @param out (C++: qtype *) - @param vloc (C++: const argloc_t &) - - -ida_typeinf.append_tinfo_covered(): - - append_tinfo_covered(out, typid, offset) -> bool - - -ida_typeinf.apply_callee_tinfo(): - - apply_callee_tinfo(caller, tif) -> bool - - - Apply the type of the called function to the calling instruction. This - function will append parameter comments and rename the local variables - of the calling function. It also stores information about the - instructions that initialize call arguments in the database. Use - 'get_arg_addrs()' to retrieve it if necessary. Alternatively it is - possible to hook to processor_t::arg_addrs_ready event. - - @param caller: linear address of the calling instruction. must belong - to a function. (C++: ea_t) - @param tif: type info (C++: const tinfo_t &) - @return: success - - -ida_typeinf.apply_cdecl(): - - apply_cdecl(til, ea, decl, flags=0) -> bool - - - Apply the specified type to the address. This function parses the - declaration and calls 'apply_tinfo()' - - @param til: type library (C++: til_t *) - @param ea: linear address (C++: ea_t) - @param decl: type declaration in C form (C++: const char *) - @param flags: flags to pass to apply_tinfo ( TINFO_DEFINITE is always - passed) (C++: int) - @return: success - - -ida_typeinf.apply_named_type(): - - apply_named_type(ea, name) -> bool - - - Apply the specified named type to the address. - - @param ea: linear address (C++: ea_t) - @param name: the type name, e.g. "FILE" (C++: const char *) - @return: success - - -ida_typeinf.apply_once_tinfo_and_name(): - - apply_once_tinfo_and_name(dea, tif, name) -> bool - - - Apply the specified type and name to the address. This function checks - if the address already has a type. If the old typedoes not exist or - the new type is 'better' than the old type, then thenew type will be - applied. A type is considered better if it has moreinformation (e.g. - 'BTMT_STRUCT' is better than 'BT_INT' ).The same logic is with the - name: if the address already have a meaningfulname, it will be - preserved. Only if the old name does not exist or itis a dummy name - like byte_123, it will be replaced by the new name. - - @param dea: linear address (C++: ea_t) - @param tif: type string in the internal format (C++: const tinfo_t - &) - @param name: new name for the address (C++: const char *) - @return: success - - -ida_typeinf.apply_tinfo(): - - apply_tinfo(ea, tif, flags) -> bool - - - Apply the specified type to the specified address. This function sets - the type and tries to convert the item at the specified address to - conform the type. - - @param ea: linear address (C++: ea_t) - @param tif: type string in internal format (C++: const tinfo_t &) - @param flags: combination of Apply tinfo flags (C++: uint32) - @return: success - - -ida_typeinf.apply_tinfo_to_stkarg(): - - apply_tinfo_to_stkarg(insn, x, v, tif, name) -> bool - - - Helper function for the processor modules. to be called from - \ph{use_stkarg_type} - - @param insn (C++: const insn_t &) - @param x (C++: const op_t &) - @param v (C++: uval_t) - @param tif (C++: const tinfo_t &) - @param name (C++: const char *) - - -ida_typeinf.apply_type(): - - apply_type(ti, py_type, py_fields, ea, flags) -> bool - - - Apply the specified type to the address - @param ti: Type info library. 'None' can be used. - @param py_type: type string - @param py_fields: fields string (may be empty or None) - @param ea: the address of the object - @param flags: combination of TINFO_... constants or 0 - @return: Boolean - - -class ida_typeinf.argloc_t(): - - Proxy of C++ argloc_t class - - -ida_typeinf.argloc_t.advance(): - - advance(self, delta) -> bool - - -ida_typeinf.argloc_t.atype(): - - atype(self) -> argloc_type_t - - -ida_typeinf.argloc_t.calc_offset(): - - calc_offset(self) -> sval_t - - -ida_typeinf.argloc_t.compare(): - - compare(self, r) -> int - - -ida_typeinf.argloc_t.consume_rrel(): - - consume_rrel(self, p) - - -ida_typeinf.argloc_t.consume_scattered(): - - consume_scattered(self, p) - - -ida_typeinf.argloc_t.get_biggest(): - - get_biggest(self) -> argloc_t::biggest_t - - -ida_typeinf.argloc_t.get_custom(): - - get_custom(self) -> void * - - -ida_typeinf.argloc_t.get_ea(): - - get_ea(self) -> ea_t - - -ida_typeinf.argloc_t.get_reginfo(): - - get_reginfo(self) -> uint32 - - -ida_typeinf.argloc_t.get_rrel(): - - get_rrel(self) -> rrel_t - get_rrel(self) -> rrel_t - - -ida_typeinf.argloc_t.has_reg(): - - has_reg(self) -> bool - - -ida_typeinf.argloc_t.has_stkoff(): - - has_stkoff(self) -> bool - - -ida_typeinf.argloc_t.is_badloc(): - - is_badloc(self) -> bool - - -ida_typeinf.argloc_t.is_custom(): - - is_custom(self) -> bool - - -ida_typeinf.argloc_t.is_ea(): - - is_ea(self) -> bool - - -ida_typeinf.argloc_t.is_fragmented(): - - is_fragmented(self) -> bool - - -ida_typeinf.argloc_t.is_mixed_scattered(): - - is_mixed_scattered(self) -> bool - - -ida_typeinf.argloc_t.is_reg(): - - is_reg(self) -> bool - - -ida_typeinf.argloc_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_typeinf.argloc_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_typeinf.argloc_t.is_rrel(): - - is_rrel(self) -> bool - - -ida_typeinf.argloc_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_typeinf.argloc_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_typeinf.argloc_t.reg1(): - - reg1(self) -> int - - -ida_typeinf.argloc_t.reg2(): - - reg2(self) -> int - - -ida_typeinf.argloc_t.regoff(): - - regoff(self) -> int - - -ida_typeinf.argloc_t.scattered(): - - scattered(self) -> scattered_aloc_t - scattered(self) -> scattered_aloc_t - - -ida_typeinf.argloc_t.set_badloc(): - - set_badloc(self) - - -ida_typeinf.argloc_t.set_ea(): - - set_ea(self, _ea) - - -ida_typeinf.argloc_t.set_reg1(): - - set_reg1(self, reg, off=0) - - -ida_typeinf.argloc_t.set_reg2(): - - set_reg2(self, _reg1, _reg2) - - -ida_typeinf.argloc_t.set_stkoff(): - - set_stkoff(self, off) - - -ida_typeinf.argloc_t.stkoff(): - - stkoff(self) -> sval_t - - -ida_typeinf.argloc_t.swap(): - - swap(self, r) - - -class ida_typeinf.argpart_t(): - - Proxy of C++ argpart_t class - - -ida_typeinf.argpart_t.advance(): - - advance(self, delta) -> bool - - -ida_typeinf.argpart_t.atype(): - - atype(self) -> argloc_type_t - - -ida_typeinf.argpart_t.bad_offset(): - - bad_offset(self) -> bool - - -ida_typeinf.argpart_t.bad_size(): - - bad_size(self) -> bool - - -ida_typeinf.argpart_t.calc_offset(): - - calc_offset(self) -> sval_t - - -ida_typeinf.argpart_t.compare(): - - compare(self, r) -> int - - -ida_typeinf.argpart_t.consume_rrel(): - - consume_rrel(self, p) - - -ida_typeinf.argpart_t.consume_scattered(): - - consume_scattered(self, p) - - -ida_typeinf.argpart_t.get_biggest(): - - get_biggest(self) -> argloc_t::biggest_t - - -ida_typeinf.argpart_t.get_custom(): - - get_custom(self) -> void * - - -ida_typeinf.argpart_t.get_ea(): - - get_ea(self) -> ea_t - - -ida_typeinf.argpart_t.get_reginfo(): - - get_reginfo(self) -> uint32 - - -ida_typeinf.argpart_t.get_rrel(): - - get_rrel(self) -> rrel_t - get_rrel(self) -> rrel_t - - -ida_typeinf.argpart_t.has_reg(): - - has_reg(self) -> bool - - -ida_typeinf.argpart_t.has_stkoff(): - - has_stkoff(self) -> bool - - -ida_typeinf.argpart_t.is_badloc(): - - is_badloc(self) -> bool - - -ida_typeinf.argpart_t.is_custom(): - - is_custom(self) -> bool - - -ida_typeinf.argpart_t.is_ea(): - - is_ea(self) -> bool - - -ida_typeinf.argpart_t.is_fragmented(): - - is_fragmented(self) -> bool - - -ida_typeinf.argpart_t.is_mixed_scattered(): - - is_mixed_scattered(self) -> bool - - -ida_typeinf.argpart_t.is_reg(): - - is_reg(self) -> bool - - -ida_typeinf.argpart_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_typeinf.argpart_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_typeinf.argpart_t.is_rrel(): - - is_rrel(self) -> bool - - -ida_typeinf.argpart_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_typeinf.argpart_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_typeinf.argpart_t.off: - argpart_t_off_get(self) -> ushort - -ida_typeinf.argpart_t.reg1(): - - reg1(self) -> int - - -ida_typeinf.argpart_t.reg2(): - - reg2(self) -> int - - -ida_typeinf.argpart_t.regoff(): - - regoff(self) -> int - - -ida_typeinf.argpart_t.scattered(): - - scattered(self) -> scattered_aloc_t - scattered(self) -> scattered_aloc_t - - -ida_typeinf.argpart_t.set_badloc(): - - set_badloc(self) - - -ida_typeinf.argpart_t.set_ea(): - - set_ea(self, _ea) - - -ida_typeinf.argpart_t.set_reg1(): - - set_reg1(self, reg, off=0) - - -ida_typeinf.argpart_t.set_reg2(): - - set_reg2(self, _reg1, _reg2) - - -ida_typeinf.argpart_t.set_stkoff(): - - set_stkoff(self, off) - - -ida_typeinf.argpart_t.size: - argpart_t_size_get(self) -> ushort - -ida_typeinf.argpart_t.stkoff(): - - stkoff(self) -> sval_t - - -ida_typeinf.argpart_t.swap(): - - swap(self, r) - - -class ida_typeinf.argpartvec_t(): - - Proxy of C++ qvector<(argpart_t)> class - - -ida_typeinf.argpartvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.argpartvec_t.at(): - - at(self, _idx) -> argpart_t - - -ida_typeinf.argpartvec_t.begin(): - - begin(self) -> argpart_t - begin(self) -> argpart_t - - -ida_typeinf.argpartvec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.argpartvec_t.clear(): - - clear(self) - - -ida_typeinf.argpartvec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.argpartvec_t.end(): - - end(self) -> argpart_t - end(self) -> argpart_t - - -ida_typeinf.argpartvec_t.erase(): - - erase(self, it) -> argpart_t - erase(self, first, last) -> argpart_t - - -ida_typeinf.argpartvec_t.extract(): - - extract(self) -> argpart_t - - -ida_typeinf.argpartvec_t.find(): - - find(self, x) -> argpart_t - find(self, x) -> argpart_t - - -ida_typeinf.argpartvec_t.grow(): - - grow(self, x=argpart_t()) - - -ida_typeinf.argpartvec_t.has(): - - has(self, x) -> bool - - -ida_typeinf.argpartvec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.argpartvec_t.insert(): - - insert(self, it, x) -> argpart_t - - -ida_typeinf.argpartvec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.argpartvec_t.push_back(): - - push_back(self, x) - push_back(self) -> argpart_t - - -ida_typeinf.argpartvec_t.qclear(): - - qclear(self) - - -ida_typeinf.argpartvec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.argpartvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.argpartvec_t.size(): - - size(self) -> size_t - - -ida_typeinf.argpartvec_t.swap(): - - swap(self, r) - - -ida_typeinf.argpartvec_t.truncate(): - - truncate(self) - - -class ida_typeinf.array_type_data_t(): - - Proxy of C++ array_type_data_t class - - -ida_typeinf.array_type_data_t.base: - array_type_data_t_base_get(self) -> uint32 - -ida_typeinf.array_type_data_t.elem_type: - array_type_data_t_elem_type_get(self) -> tinfo_t - -ida_typeinf.array_type_data_t.nelems: - array_type_data_t_nelems_get(self) -> uint32 - -ida_typeinf.array_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.begin_type_updating(): - - begin_type_updating(utp) - - - Mark the beginning of a large update operation on the types. Can be - used with 'add_enum_member()' , add_struc_member, etc... Also see - 'end_type_updating()' - - @param utp (C++: update_type_t) - - -class ida_typeinf.bitfield_type_data_t(): - - Proxy of C++ bitfield_type_data_t class - - -ida_typeinf.bitfield_type_data_t.compare(): - - compare(self, r) -> int - - -ida_typeinf.bitfield_type_data_t.is_unsigned: - bitfield_type_data_t_is_unsigned_get(self) -> bool - -ida_typeinf.bitfield_type_data_t.nbytes: - bitfield_type_data_t_nbytes_get(self) -> uchar - -ida_typeinf.bitfield_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.bitfield_type_data_t.width: - bitfield_type_data_t_width_get(self) -> uchar - -ida_typeinf.calc_c_cpp_name(): - - calc_c_cpp_name(name, type, ccn_flags) -> ssize_t - - - Get C or C++ form of the name. - - @param name: original (mangled or decorated) name (C++: const char *) - @param type: name type if known, otherwise NULL (C++: const tinfo_t - *) - @param ccn_flags: one of C/C++ naming flags (C++: int) - - -ida_typeinf.calc_number_of_children(): - - calc_number_of_children(loc, tif, dont_deref_ptr=False) -> int - - - Calculate max number of lines of a formatted c data, when expanded ( - 'PTV_EXPAND' ). - - @param loc: location of the data ( ALOC_STATIC or ALOC_CUSTOM ) - (C++: const argloc_t &) - @param tif: type info (C++: const tinfo_t &) - @param dont_deref_ptr: consider 'ea' as the ptr value (C++: bool) - - -ida_typeinf.calc_tinfo_gaps(): - - calc_tinfo_gaps(out, typid) -> bool - - -ida_typeinf.calc_type_size(): - - calc_type_size(ti, tp) -> PyObject * - - - Returns the size of a type - @param ti: Type info. 'None' can be passed. - @param tp: type string - @return: - - None on failure - - The size of the type - - -class ida_typeinf.callregs_t(): - - Proxy of C++ callregs_t class - - -ida_typeinf.callregs_t.fpregs: - callregs_t_fpregs_get(self) -> intvec_t * - -ida_typeinf.callregs_t.gpregs: - callregs_t_gpregs_get(self) -> intvec_t * - -ida_typeinf.callregs_t.init_regs(): - - init_regs(self, cc) - - -ida_typeinf.callregs_t.nregs: - callregs_t_nregs_get(self) -> int - -ida_typeinf.callregs_t.policy: - callregs_t_policy_get(self) -> argreg_policy_t - -ida_typeinf.callregs_t.regcount(): - - regcount(cc) -> int - - -ida_typeinf.callregs_t.reginds(): - - reginds(self, gp_ind, fp_ind, r) -> bool - - -ida_typeinf.callregs_t.reset(): - - reset(self) - - -ida_typeinf.callregs_t.set(): - - set(self, _policy, gprs, fprs) - - -ida_typeinf.callregs_t_regcount(): - - callregs_t_regcount(cc) -> int - - -ida_typeinf.choose_local_tinfo(): - - choose_local_tinfo(ti, title, func=None, def_ord=0, ud=None) -> uint32 - - - Choose a type from the local type library. - - @param ti: pointer to til (C++: const til_t *) - @param title: title of listbox to display (C++: const char *) - @param func: predicate to select types to display (maybe NULL) (C++: - local_tinfo_predicate_t *) - @param def_ord: ordinal to position cursor before choose (C++: uint32) - @param ud: user data (C++: void *) - @return: == 0 means nothing is chosen, otherwise an ordinal number - - -ida_typeinf.choose_named_type(): - - choose_named_type(out_sym, root_til, title, ntf_flags, predicate=None) -> bool - - - Choose a type from a type library. - - @param out_sym: pointer to be filled with the chosen type (C++: - til_symbol_t *) - @param root_til: pointer to starting til (the function will inspect - the base tils if allowed by flags) (C++: const til_t - *) - @param title: title of listbox to display (C++: const char *) - @param ntf_flags: combination of Flags for named types (C++: int) - @param predicate: predicate to select types to display (maybe NULL) - (C++: predicate_t *) - @return: false if nothing is chosen, otherwise true - - -ida_typeinf.clear_tinfo_t(): - - clear_tinfo_t(_this) - - -ida_typeinf.compact_til(): - - compact_til(ti) -> bool - - - Collect garbage in til. Must be called before storing the til. - - @param ti (C++: til_t *) - @return: true if any memory was freed - - -ida_typeinf.compare_tinfo(): - - compare_tinfo(t1, t2, tcflags) -> bool - - -class ida_typeinf.const_aloc_visitor_t(): - - Proxy of C++ const_aloc_visitor_t class - - -ida_typeinf.const_aloc_visitor_t.visit_location(): - - visit_location(self, v, off, size) -> int - - -ida_typeinf.convert_pt_flags_to_hti(): - - convert_pt_flags_to_hti(pt_flags) -> int - - - Convert 'Type parsing flags' to 'Type formatting flags' . Type parsing - flags lesser than 0x10 don't have stable meaning and will be ignored - (more on these flags can be seen in idc.idc) - - @param pt_flags (C++: int) - - -ida_typeinf.copy_named_type(): - - copy_named_type(dsttil, srctil, name) -> uint32 - - - Copy a named type from one til to another. This function will copy the - specified type and all dependent types from the source type library to - the destination library. - - @param dsttil: Destination til. It must have orginal types enabled - (C++: til_t *) - @param srctil: Source til. (C++: const til_t *) - @param name: name of the type to copy (C++: const char *) - @return: ordinal number of the copied type. 0 means error - - -ida_typeinf.copy_tinfo_t(): - - copy_tinfo_t(_this, r) - - -ida_typeinf.create_numbered_type_name(): - - create_numbered_type_name(ord) -> ssize_t - - - Create anonymous name for numbered type. This name can be used to - reference a numbered type by its ordinal Ordinal names have the - following format: '#' + set_de(ord) Returns: -1 if error, otherwise - the name length - - @param ord (C++: int32) - - -ida_typeinf.create_tinfo(): - - create_tinfo(_this, bt, bt2, ptr) -> bool - - -ida_typeinf.default_compiler(): - - default_compiler() -> comp_t - - - Get compiler specified by armem{inf,idainfo,cc}. - - -ida_typeinf.del_named_type(): - - del_named_type(ti, name, ntf_flags) -> bool - - - Delete information about a symbol. - - @param ti: type library (C++: til_t *) - @param name: name of symbol (C++: const char *) - @param ntf_flags: combination of Flags for named types (C++: int) - @return: success - - -ida_typeinf.del_numbered_type(): - - del_numbered_type(ti, ordinal) -> bool - - - Delete a numbered type. - - - @param ti (C++: til_t *) - @param ordinal (C++: uint32) - - -ida_typeinf.del_til(): - - del_til(name) -> bool - - - Unload a til file. - - - @param name (C++: const char *) - - -ida_typeinf.del_tinfo_attr(): - - del_tinfo_attr(tif, key, make_copy) -> bool - - -ida_typeinf.deref_ptr(): - - deref_ptr(ptr_ea, tif, closure_obj=None) -> bool - - - Dereference a pointer. - - @param ptr_ea: in/out parameter in: address of the pointer out: - the pointed address (C++: ea_t *) - @param tif: type of the pointer (C++: const tinfo_t &) - @param closure_obj: closure object (not used yet) (C++: ea_t *) - @return: success - - -ida_typeinf.deserialize_tinfo(): - - deserialize_tinfo(tif, til, ptype, pfields, pfldcmts) -> bool - - -ida_typeinf.dstr_tinfo(): - - dstr_tinfo(tif) -> char const * - - -ida_typeinf.dump_func_type_data(): - - dump_func_type_data(fti, praloc_bits) -> bool - - - Use 'func_type_data_t::dump()' - - - @param fti (C++: const func_type_data_t &) - @param praloc_bits (C++: int) - - -ida_typeinf.end_type_updating(): - - end_type_updating(utp) - - - Mark the end of a large update operation on the types (see - 'begin_type_updating()' ) - - - @param utp (C++: update_type_t) - - -class ida_typeinf.enum_member_t(): - - Proxy of C++ enum_member_t class - - -ida_typeinf.enum_member_t.cmt: - enum_member_t_cmt_get(self) -> qstring * - -ida_typeinf.enum_member_t.name: - enum_member_t_name_get(self) -> qstring * - -ida_typeinf.enum_member_t.swap(): - - swap(self, r) - - -ida_typeinf.enum_member_t.value: - enum_member_t_value_get(self) -> uint64 - -class ida_typeinf.enum_member_vec_t(): - - Proxy of C++ qvector<(enum_member_t)> class - - -ida_typeinf.enum_member_vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.enum_member_vec_t.at(): - - at(self, _idx) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.begin(): - - begin(self) -> enum_member_t - begin(self) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.enum_member_vec_t.clear(): - - clear(self) - - -ida_typeinf.enum_member_vec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.enum_member_vec_t.end(): - - end(self) -> enum_member_t - end(self) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.erase(): - - erase(self, it) -> enum_member_t - erase(self, first, last) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.extract(): - - extract(self) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.find(): - - find(self, x) -> enum_member_t - find(self, x) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.grow(): - - grow(self, x=enum_member_t()) - - -ida_typeinf.enum_member_vec_t.has(): - - has(self, x) -> bool - - -ida_typeinf.enum_member_vec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.enum_member_vec_t.insert(): - - insert(self, it, x) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.enum_member_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.qclear(): - - qclear(self) - - -ida_typeinf.enum_member_vec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.enum_member_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.enum_member_vec_t.size(): - - size(self) -> size_t - - -ida_typeinf.enum_member_vec_t.swap(): - - swap(self, r) - - -ida_typeinf.enum_member_vec_t.truncate(): - - truncate(self) - - -class ida_typeinf.enum_type_data_t(): - - Proxy of C++ enum_type_data_t class - - -ida_typeinf.enum_type_data_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.enum_type_data_t.at(): - - at(self, _idx) -> enum_member_t - - -ida_typeinf.enum_type_data_t.begin(): - - begin(self) -> enum_member_t - begin(self) -> enum_member_t - - -ida_typeinf.enum_type_data_t.bte: - enum_type_data_t_bte_get(self) -> bte_t - -ida_typeinf.enum_type_data_t.calc_mask(): - - calc_mask(self) -> uint64 - - -ida_typeinf.enum_type_data_t.calc_nbytes(): - - calc_nbytes(self) -> int - - -ida_typeinf.enum_type_data_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.enum_type_data_t.clear(): - - clear(self) - - -ida_typeinf.enum_type_data_t.empty(): - - empty(self) -> bool - - -ida_typeinf.enum_type_data_t.end(): - - end(self) -> enum_member_t - end(self) -> enum_member_t - - -ida_typeinf.enum_type_data_t.erase(): - - erase(self, it) -> enum_member_t - erase(self, first, last) -> enum_member_t - - -ida_typeinf.enum_type_data_t.extract(): - - extract(self) -> enum_member_t - - -ida_typeinf.enum_type_data_t.find(): - - find(self, x) -> enum_member_t - find(self, x) -> enum_member_t - - -ida_typeinf.enum_type_data_t.group_sizes: - enum_type_data_t_group_sizes_get(self) -> intvec_t * - -ida_typeinf.enum_type_data_t.grow(): - - grow(self, x=enum_member_t()) - - -ida_typeinf.enum_type_data_t.has(): - - has(self, x) -> bool - - -ida_typeinf.enum_type_data_t.inject(): - - inject(self, s, len) - - -ida_typeinf.enum_type_data_t.insert(): - - insert(self, it, x) -> enum_member_t - - -ida_typeinf.enum_type_data_t.is_64bit(): - - is_64bit(self) -> bool - - -ida_typeinf.enum_type_data_t.is_char(): - - is_char(self) -> bool - - -ida_typeinf.enum_type_data_t.is_hex(): - - is_hex(self) -> bool - - -ida_typeinf.enum_type_data_t.is_sdec(): - - is_sdec(self) -> bool - - -ida_typeinf.enum_type_data_t.is_udec(): - - is_udec(self) -> bool - - -ida_typeinf.enum_type_data_t.pop_back(): - - pop_back(self) - - -ida_typeinf.enum_type_data_t.push_back(): - - push_back(self, x) - push_back(self) -> enum_member_t - - -ida_typeinf.enum_type_data_t.qclear(): - - qclear(self) - - -ida_typeinf.enum_type_data_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.enum_type_data_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.enum_type_data_t.size(): - - size(self) -> size_t - - -ida_typeinf.enum_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.enum_type_data_t.taenum_bits: - enum_type_data_t_taenum_bits_get(self) -> uint32 - -ida_typeinf.enum_type_data_t.truncate(): - - truncate(self) - - -ida_typeinf.extract_argloc(): - - extract_argloc(vloc, ptype, is_retval) -> bool - - - Deserialize argument location. - - - @param vloc (C++: argloc_t *) - @param ptype (C++: const type_t **) - @param is_retval (C++: bool) - - -ida_typeinf.find_tinfo_udt_member(): - - find_tinfo_udt_member(udm, typid, strmem_flags) -> int - - -ida_typeinf.first_named_type(): - - first_named_type(ti, ntf_flags) -> char const * - - - Enumerate types. Returns mangled names. Never returns anonymous types. - To include it, enumerate types by ordinals. - - @param ti (C++: const til_t *) - @param ntf_flags (C++: int) - - -ida_typeinf.for_all_arglocs(): - - for_all_arglocs(vv, vloc, size, off=0) -> int - - - Compress larger argloc types and initiate the aloc visitor. - - - @param vv (C++: aloc_visitor_t &) - @param vloc (C++: argloc_t &) - @param size (C++: int) - @param off (C++: int) - - -ida_typeinf.for_all_const_arglocs(): - - for_all_const_arglocs(vv, vloc, size, off=0) -> int - - - See 'for_all_arglocs()' - - - @param vv (C++: const_aloc_visitor_t &) - @param vloc (C++: const argloc_t &) - @param size (C++: int) - @param off (C++: int) - - -ida_typeinf.free_til(): - - free_til(ti) - - - Free memory allocated by til. - - - @param ti (C++: til_t *) - - -ida_typeinf.func_has_stkframe_hole(): - - func_has_stkframe_hole(ea, fti) -> bool - - - Looks for a hole at the beginning of the stack arguments. Will make - use of the IDB's 'func_t' function at that place (if present) to help - determine the presence of such a hole. - - @param ea (C++: ea_t) - @param fti (C++: const func_type_data_t &) - - -class ida_typeinf.func_type_data_t(): - - Proxy of C++ func_type_data_t class - - -ida_typeinf.func_type_data_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.func_type_data_t.at(): - - at(self, _idx) -> funcarg_t - - -ida_typeinf.func_type_data_t.begin(): - - begin(self) -> funcarg_t - begin(self) -> funcarg_t - - -ida_typeinf.func_type_data_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.func_type_data_t.cc: - func_type_data_t_cc_get(self) -> cm_t - -ida_typeinf.func_type_data_t.clear(): - - clear(self) - - -ida_typeinf.func_type_data_t.dump(): - - dump(self, praloc_bits=0x02) -> bool - - -ida_typeinf.func_type_data_t.empty(): - - empty(self) -> bool - - -ida_typeinf.func_type_data_t.end(): - - end(self) -> funcarg_t - end(self) -> funcarg_t - - -ida_typeinf.func_type_data_t.erase(): - - erase(self, it) -> funcarg_t - erase(self, first, last) -> funcarg_t - - -ida_typeinf.func_type_data_t.extract(): - - extract(self) -> funcarg_t - - -ida_typeinf.func_type_data_t.find(): - - find(self, x) -> funcarg_t - find(self, x) -> funcarg_t - - -ida_typeinf.func_type_data_t.flags: - func_type_data_t_flags_get(self) -> int - -ida_typeinf.func_type_data_t.get_call_method(): - - get_call_method(self) -> int - - -ida_typeinf.func_type_data_t.grow(): - - grow(self, x=funcarg_t()) - - -ida_typeinf.func_type_data_t.guess_cc(): - - guess_cc(self, purged, cc_flags) -> cm_t - - -ida_typeinf.func_type_data_t.has(): - - has(self, x) -> bool - - -ida_typeinf.func_type_data_t.inject(): - - inject(self, s, len) - - -ida_typeinf.func_type_data_t.insert(): - - insert(self, it, x) -> funcarg_t - - -ida_typeinf.func_type_data_t.is_high(): - - is_high(self) -> bool - - -ida_typeinf.func_type_data_t.is_noret(): - - is_noret(self) -> bool - - -ida_typeinf.func_type_data_t.is_pure(): - - is_pure(self) -> bool - - -ida_typeinf.func_type_data_t.is_vararg_cc(): - - is_vararg_cc(self) -> bool - - -ida_typeinf.func_type_data_t.pop_back(): - - pop_back(self) - - -ida_typeinf.func_type_data_t.push_back(): - - push_back(self, x) - push_back(self) -> funcarg_t - - -ida_typeinf.func_type_data_t.qclear(): - - qclear(self) - - -ida_typeinf.func_type_data_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.func_type_data_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.func_type_data_t.retloc: - func_type_data_t_retloc_get(self) -> argloc_t - -ida_typeinf.func_type_data_t.rettype: - func_type_data_t_rettype_get(self) -> tinfo_t - -ida_typeinf.func_type_data_t.size(): - - size(self) -> size_t - - -ida_typeinf.func_type_data_t.spoiled: - func_type_data_t_spoiled_get(self) -> reginfovec_t - -ida_typeinf.func_type_data_t.stkargs: - func_type_data_t_stkargs_get(self) -> uval_t - -ida_typeinf.func_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.func_type_data_t.truncate(): - - truncate(self) - - -class ida_typeinf.funcarg_t(): - - Proxy of C++ funcarg_t class - - -ida_typeinf.funcarg_t.argloc: - funcarg_t_argloc_get(self) -> argloc_t - -ida_typeinf.funcarg_t.cmt: - funcarg_t_cmt_get(self) -> qstring * - -ida_typeinf.funcarg_t.flags: - funcarg_t_flags_get(self) -> uint32 - -ida_typeinf.funcarg_t.name: - funcarg_t_name_get(self) -> qstring * - -ida_typeinf.funcarg_t.type: - funcarg_t_type_get(self) -> tinfo_t - -class ida_typeinf.funcargvec_t(): - - Proxy of C++ qvector<(funcarg_t)> class - - -ida_typeinf.funcargvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.funcargvec_t.at(): - - at(self, _idx) -> funcarg_t - - -ida_typeinf.funcargvec_t.begin(): - - begin(self) -> funcarg_t - begin(self) -> funcarg_t - - -ida_typeinf.funcargvec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.funcargvec_t.clear(): - - clear(self) - - -ida_typeinf.funcargvec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.funcargvec_t.end(): - - end(self) -> funcarg_t - end(self) -> funcarg_t - - -ida_typeinf.funcargvec_t.erase(): - - erase(self, it) -> funcarg_t - erase(self, first, last) -> funcarg_t - - -ida_typeinf.funcargvec_t.extract(): - - extract(self) -> funcarg_t - - -ida_typeinf.funcargvec_t.find(): - - find(self, x) -> funcarg_t - find(self, x) -> funcarg_t - - -ida_typeinf.funcargvec_t.grow(): - - grow(self, x=funcarg_t()) - - -ida_typeinf.funcargvec_t.has(): - - has(self, x) -> bool - - -ida_typeinf.funcargvec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.funcargvec_t.insert(): - - insert(self, it, x) -> funcarg_t - - -ida_typeinf.funcargvec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.funcargvec_t.push_back(): - - push_back(self, x) - push_back(self) -> funcarg_t - - -ida_typeinf.funcargvec_t.qclear(): - - qclear(self) - - -ida_typeinf.funcargvec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.funcargvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.funcargvec_t.size(): - - size(self) -> size_t - - -ida_typeinf.funcargvec_t.swap(): - - swap(self, r) - - -ida_typeinf.funcargvec_t.truncate(): - - truncate(self) - - -ida_typeinf.gcc_layout(): - - gcc_layout() -> bool - - - Should use the struct/union layout as done by gcc? - - -ida_typeinf.gen_decorate_name(): - - gen_decorate_name(name, mangle, cc, type) -> bool - - - Generic function for 'decorate_name()' (may be used in IDP modules) - - - @param name (C++: const char *) - @param mangle (C++: bool) - @param cc (C++: cm_t) - @param type (C++: const tinfo_t *) - - -ida_typeinf.gen_use_arg_tinfos(): - - gen_use_arg_tinfos(caller, fti, rargs, set_optype, is_stkarg_load, has_delay_slot) - - - The main function using these callbacks: - - - @param caller (C++: ea_t) - @param fti (C++: func_type_data_t *) - @param rargs (C++: funcargvec_t *) - @param set_optype (C++: set_op_tinfo_t *) - @param is_stkarg_load (C++: is_stkarg_load_t *) - @param has_delay_slot (C++: has_delay_slot_t *) - - -ida_typeinf.get_abi_name(): - - get_abi_name() -> ssize_t - - - Get ABI name. - - @return: length of the name (>=0) - - -ida_typeinf.get_alias_target(): - - get_alias_target(ti, ordinal) -> uint32 - - - Find the final alias destination. If the ordinal has not been aliased, - return the specified ordinal itself If failed, returns 0. - - @param ti (C++: const til_t *) - @param ordinal (C++: uint32) - - -ida_typeinf.get_arg_addrs(): - - get_arg_addrs(caller) -> PyObject * - - - Retrieve addresses of argument initialization instructions - - @param caller: the address of the call instruction - @return: list of instruction addresses - - -ida_typeinf.get_base_type(): - - get_base_type(t) -> type_t - - - Get get basic type bits ( 'TYPE_BASE_MASK' ) - - - @param t (C++: type_t) - - -ida_typeinf.get_c_header_path(): - - get_c_header_path() -> ssize_t - - - Get the include directory path of the target compiler. - - -ida_typeinf.get_c_macros(): - - get_c_macros() -> ssize_t - - - Get predefined macros for the target compiler. - - -ida_typeinf.get_comp(): - - get_comp(comp) -> comp_t - - - Get compiler bits. - - - @param comp (C++: comp_t) - - -ida_typeinf.get_compiler_abbr(): - - get_compiler_abbr(id) -> char const * - - - Get abbreviated compiler name. - - - @param id (C++: comp_t) - - -ida_typeinf.get_compiler_name(): - - get_compiler_name(id) -> char const * - - - Get full compiler name. - - - @param id (C++: comp_t) - - -ida_typeinf.get_compilers(): - - get_compilers(ids, names, abbrs) - - - Get names of all built-in compilers. - - - @param ids (C++: compvec_t *) - @param names (C++: qstrvec_t *) - @param abbrs (C++: qstrvec_t *) - - -ida_typeinf.get_enum_member_expr(): - - get_enum_member_expr(tif, serial, value) -> bool - - - Return a C expression that can be used to represent an enum member. If - the value does not correspond to any single enum member, this function - tries to find a bitwise combination of enum members that correspond to - it. If more than half of value bits do not match any enum members, it - fails. - - @param tif: enumeration type (C++: const tinfo_t &) - @param serial: which enumeration member to use (0 means the first with - the given value) (C++: int) - @param value: value to search in the enumeration type. only 32-bit - number can be handled yet (C++: uint64) - @return: success - - -ida_typeinf.get_full_type(): - - get_full_type(t) -> type_t - - - Get basic type bits + type flags ( 'TYPE_FULL_MASK' ) - - - @param t (C++: type_t) - - -ida_typeinf.get_idainfo_by_type(): - - get_idainfo_by_type(tif) -> bool - - - Extract information from a 'tinfo_t' . - - @param tif: the type to inspect (C++: const tinfo_t &) - - -ida_typeinf.get_idati(): - - get_idati() -> til_t - - - Pointer to the local type library - this til is private for each IDB - file Function that accepts til_t* uses local type library instead of - NULL. - - -ida_typeinf.get_named_type(): - - get_named_type(til, name, ntf_flags) -> PyObject * - - - Get a type data by its name. - @param til: the type library - @param name: the type name - @param ntf_flags: a combination of NTF_* constants - @return: - None on failure - tuple(code, type_str, fields_str, cmt, field_cmts, sclass, value) on success - - -ida_typeinf.get_named_type64(): - - get_named_type64(til, name, ntf_flags) -> PyObject * - - - See 'get_named_type()' above.If the value in the 'ti' library is - 32-bit, it will be sign-extended before being stored in the 'value' - pointer. - - @param name (C++: const char *) - @param ntf_flags (C++: int) - - -ida_typeinf.get_numbered_type(): - - get_numbered_type(til, ordinal) -> PyObject * - - - Retrieve a type by its ordinal number. - - - @param ordinal (C++: uint32) - - -ida_typeinf.get_numbered_type_name(): - - get_numbered_type_name(ti, ordinal) -> char const * - - - Get type name (if exists) by its ordinal. If the type is anonymous, - returns "". If failed, returns NULL - - @param ti (C++: const til_t *) - @param ordinal (C++: uint32) - - -ida_typeinf.get_ordinal_from_idb_type(): - - get_ordinal_from_idb_type(name, type) -> int - - - Get ordinal number of an idb type (struct/enum). The 'type' parameter - is used only to determine the kind of the type (struct or enum) Use - this function to find out the correspondence between idb types and til - types - - @param name (C++: const char *) - @param type (C++: const type_t *) - - -ida_typeinf.get_ordinal_qty(): - - get_ordinal_qty(ti) -> uint32 - - - Get number of allocated ordinals. - - @param ti (C++: const til_t *) - @return: uint32(-1) if failed - - -ida_typeinf.get_scalar_bt(): - - get_scalar_bt(size) -> type_t - - -ida_typeinf.get_stock_tinfo(): - - get_stock_tinfo(tif, id) -> bool - - -ida_typeinf.get_tinfo_attr(): - - get_tinfo_attr(typid, key, bv, all_attrs) -> bool - - -ida_typeinf.get_tinfo_attrs(): - - get_tinfo_attrs(typid, tav, include_ref_attrs) -> bool - - -ida_typeinf.get_tinfo_details(): - - get_tinfo_details(typid, bt2, buf) -> bool - - -ida_typeinf.get_tinfo_pdata(): - - get_tinfo_pdata(outptr, typid, what) -> size_t - - -ida_typeinf.get_tinfo_property(): - - get_tinfo_property(typid, gta_prop) -> size_t - - -ida_typeinf.get_tinfo_size(): - - get_tinfo_size(p_effalign, typid, gts_code) -> size_t - - -ida_typeinf.get_type_flags(): - - get_type_flags(t) -> type_t - - - Get type flags ( 'TYPE_FLAGS_MASK' ) - - - @param t (C++: type_t) - - -ida_typeinf.get_type_ordinal(): - - get_type_ordinal(ti, name) -> int32 - - - Get type ordinal by its name. - - - @param ti (C++: const til_t *) - @param name (C++: const char *) - - -ida_typeinf.guess_func_cc(): - - guess_func_cc(fti, npurged, cc_flags) -> cm_t - - - Use 'func_type_data_t::guess_cc()' - - - @param fti (C++: const func_type_data_t &) - @param npurged (C++: int) - @param cc_flags (C++: int) - - -ida_typeinf.guess_tinfo(): - - guess_tinfo(tif, id) -> int - - - Generate a type information about the id from the disassembly. id can - be a structure/union/enum id or an address. - - @param tif (C++: tinfo_t *) - @param id (C++: tid_t) - @return: one of Guess tinfo codes - - -class ida_typeinf.ida_lowertype_helper_t(): - - Proxy of C++ ida_lowertype_helper_t class - - -ida_typeinf.ida_lowertype_helper_t.func_has_stkframe_hole(): - - func_has_stkframe_hole(self, candidate, candidate_data) -> bool - - -ida_typeinf.ida_lowertype_helper_t.get_func_purged_bytes(): - - get_func_purged_bytes(self, candidate, arg3) -> int - - -ida_typeinf.idc_get_local_type(): - - idc_get_local_type(ordinal, flags, buf, maxsize) -> int - - -ida_typeinf.idc_get_local_type_name(): - - idc_get_local_type_name(ordinal) -> char - - -ida_typeinf.idc_get_local_type_raw(): - - idc_get_local_type_raw(ordinal) -> PyObject * - - -ida_typeinf.idc_get_type(): - - idc_get_type(ea) -> char * - - -ida_typeinf.idc_get_type_raw(): - - idc_get_type_raw(ea) -> PyObject * - - -ida_typeinf.idc_guess_type(): - - idc_guess_type(ea) -> char * - - -ida_typeinf.idc_parse_decl(): - - idc_parse_decl(ti, decl, flags) -> PyObject * - - -ida_typeinf.idc_parse_types(): - - idc_parse_types(input, flags) -> int - - -ida_typeinf.idc_print_type(): - - idc_print_type(py_type, py_fields, name, flags) -> PyObject * - - -ida_typeinf.idc_set_local_type(): - - idc_set_local_type(ordinal, dcl, flags) -> int - - -ida_typeinf.import_type(): - - import_type(til, idx, name, flags=0) -> tid_t - - - Copy a named type from til to idb. - - @param til: type library (C++: const til_t *) - @param idx: the position of the new type in the list of types - (structures or enums). -1 means at the end of the list - (C++: int) - @param name: the type name (C++: const char *) - @param flags: combination of Import type flags (C++: int) - @return: BADNODE on error - - -ida_typeinf.is_autosync(): - - is_autosync(name, type) -> bool - is_autosync(name, tif) -> bool - - - Is the specified idb type automatically synchronized? - - - @param name (C++: const char *) - @param type (C++: const type_t *) - - -ida_typeinf.is_code_far(): - - is_code_far(cm) -> bool - - - Does the given model specify far code?. - - - @param cm (C++: cm_t) - - -ida_typeinf.is_comp_unsure(): - - is_comp_unsure(comp) -> comp_t - - - See 'COMP_UNSURE' . - - - @param comp (C++: comp_t) - - -ida_typeinf.is_data_far(): - - is_data_far(cm) -> bool - - - Does the given model specify far data?. - - - @param cm (C++: cm_t) - - -ida_typeinf.is_gcc(): - - is_gcc() -> bool - - - Is the target compiler 'COMP_GNU' ? - - -ida_typeinf.is_gcc32(): - - is_gcc32() -> bool - - - Is the target compiler 32 bit gcc? - - -ida_typeinf.is_gcc64(): - - is_gcc64() -> bool - - - Is the target compiler 64 bit gcc? - - -ida_typeinf.is_ordinal_name(): - - is_ordinal_name(name, ord=None) -> bool - - - Check if the name is an ordinal name. Ordinal names have the following - format: '#' + set_de(ord) - - @param name (C++: const char *) - @param ord (C++: uint32 *) - - -ida_typeinf.is_purging_cc(): - - is_purging_cc(cm) -> bool - - - Does the calling convention clean the stack arguments upon - return?.this function is valid only for x86 code - - @param cm (C++: cm_t) - - -ida_typeinf.is_restype_enum(): - - is_restype_enum(til, type) -> bool - - -ida_typeinf.is_restype_struct(): - - is_restype_struct(til, type) -> bool - - -ida_typeinf.is_restype_struni(): - - is_restype_struni(til, type) -> bool - - -ida_typeinf.is_restype_void(): - - is_restype_void(til, type) -> bool - - -ida_typeinf.is_sdacl_byte(): - - is_sdacl_byte(t) -> bool - - - Identify an sdacl byte. The first sdacl byte has the following format: - 11xx000x. The sdacl bytes are appended to udt fields. They indicate - the start of type attributes (as the tah-bytes do). The sdacl bytes - are used in the udt headers instead of the tah-byte. This is done for - compatibility with old databases, they were already using sdacl bytes - in udt headers and as udt field postfixes. (see "sdacl-typeattrs" in - the type bit definitions) - - @param t (C++: type_t) - - -ida_typeinf.is_tah_byte(): - - is_tah_byte(t) -> bool - - - The TAH byte (type attribute header byte) denotes the start of type - attributes. (see "tah-typeattrs" in the type bit definitions) - - @param t (C++: type_t) - - -ida_typeinf.is_type_arithmetic(): - - is_type_arithmetic(t) -> bool - - - Is the type an arithmetic type? (floating or integral) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_array(): - - is_type_array(t) -> bool - - - See 'BT_ARRAY' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_bitfld(): - - is_type_bitfld(t) -> bool - - - See 'BT_BITFIELD' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_bool(): - - is_type_bool(t) -> bool - - - See 'BTF_BOOL' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_char(): - - is_type_char(t) -> bool - - - Does the type specify a char value? (signed or unsigned, see 'Basic - type: integer' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_complex(): - - is_type_complex(t) -> bool - - - See 'BT_COMPLEX' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_const(): - - is_type_const(t) -> bool - - - See 'BTM_CONST' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_double(): - - is_type_double(t) -> bool - - - See 'BTF_DOUBLE' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_enum(): - - is_type_enum(t) -> bool - - - See 'BTF_ENUM' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_ext_arithmetic(): - - is_type_ext_arithmetic(t) -> bool - - - Is the type an extended arithmetic type? (arithmetic or enum) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_ext_integral(): - - is_type_ext_integral(t) -> bool - - - Is the type an extended integral type? (integral or enum) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_float(): - - is_type_float(t) -> bool - - - See 'BTF_FLOAT' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_floating(): - - is_type_floating(t) -> bool - - - Is the type a floating point type? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_func(): - - is_type_func(t) -> bool - - - See 'BT_FUNC' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_int(): - - is_type_int(bt) -> bool - - - Does the type_t specify one of the basic types in 'Basic type: - integer' ? - - - @param bt (C++: type_t) - - -ida_typeinf.is_type_int128(): - - is_type_int128(t) -> bool - - - Does the type specify a 128-bit value? (signed or unsigned, see 'Basic - type: integer' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_int16(): - - is_type_int16(t) -> bool - - - Does the type specify a 16-bit value? (signed or unsigned, see 'Basic - type: integer' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_int32(): - - is_type_int32(t) -> bool - - - Does the type specify a 32-bit value? (signed or unsigned, see 'Basic - type: integer' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_int64(): - - is_type_int64(t) -> bool - - - Does the type specify a 64-bit value? (signed or unsigned, see 'Basic - type: integer' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_integral(): - - is_type_integral(t) -> bool - - - Is the type an integral type (char/short/int/long/bool)? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_ldouble(): - - is_type_ldouble(t) -> bool - - - See 'BTF_LDOUBLE' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_paf(): - - is_type_paf(t) -> bool - - - Is the type a pointer, array, or function type? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_partial(): - - is_type_partial(t) -> bool - - - Identifies an unknown or void type with a known size (see 'Basic type: - unknown & void' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_ptr(): - - is_type_ptr(t) -> bool - - - See 'BT_PTR' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_ptr_or_array(): - - is_type_ptr_or_array(t) -> bool - - - Is the type a pointer or array type? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_struct(): - - is_type_struct(t) -> bool - - - See 'BTF_STRUCT' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_struni(): - - is_type_struni(t) -> bool - - - Is the type a struct or union? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_sue(): - - is_type_sue(t) -> bool - - - Is the type a struct/union/enum? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_tbyte(): - - is_type_tbyte(t) -> bool - - - See 'BTF_FLOAT' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_typedef(): - - is_type_typedef(t) -> bool - - - See 'BTF_TYPEDEF' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uchar(): - - is_type_uchar(t) -> bool - - - See 'BTF_UCHAR' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uint(): - - is_type_uint(t) -> bool - - - See 'BTF_UINT' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uint128(): - - is_type_uint128(t) -> bool - - - See 'BTF_UINT128' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uint16(): - - is_type_uint16(t) -> bool - - - See 'BTF_UINT16' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uint32(): - - is_type_uint32(t) -> bool - - - See 'BTF_UINT32' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uint64(): - - is_type_uint64(t) -> bool - - - See 'BTF_UINT64' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_union(): - - is_type_union(t) -> bool - - - See 'BTF_UNION' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_unknown(): - - is_type_unknown(t) -> bool - - - See 'BT_UNKNOWN' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_void(): - - is_type_void(t) -> bool - - - See 'BTF_VOID' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_volatile(): - - is_type_volatile(t) -> bool - - - See 'BTM_VOLATILE' . - - - @param t (C++: type_t) - - -ida_typeinf.is_typeid_last(): - - is_typeid_last(t) -> bool - - - Is the type_t the last byte of type declaration? (there are no - additional bytes after a basic type, see '_BT_LAST_BASIC' ) - - @param t (C++: type_t) - - -ida_typeinf.is_user_cc(): - - is_user_cc(cm) -> bool - - - Does the calling convention specify argument locations explicitly? - - - @param cm (C++: cm_t) - - -ida_typeinf.is_vararg_cc(): - - is_vararg_cc(cm) -> bool - - - Does the calling convention use ellipsis? - - - @param cm (C++: cm_t) - - -ida_typeinf.lexcompare_tinfo(): - - lexcompare_tinfo(t1, t2, arg3) -> int - - -ida_typeinf.load_til(): - - load_til(name, tildir) -> til_t - - - Load til from a file. Failure to load base tils are reported into - 'errbuf'. They do not prevent loading of the main til. - - @param name: filename of the til. If it's an absolute path, tildir is - ignored. NB: the file extension is forced to .til (C++: - const char *) - @param tildir: directory where to load the til from. NULL means - default til subdirectories. (C++: const char *) - @return: pointer to resulting til, NULL if failed and error message is - in errbuf - - -ida_typeinf.load_til_header(): - - load_til_header(tildir, name) -> til_t - - - Get human-readable til description. - - - @param tildir (C++: const char *) - @param name (C++: const char *) - - -ida_typeinf.lower_type(): - - lower_type(til, tif, name=None, _helper=None) -> int - - - Lower type. Inspect the type and lower all function subtypes using - lower_func_type().We call the prototypes usually encountered in source - files "high level"They may have implicit arguments, array arguments, - big structure retvals, etcWe introduce explicit arguments (i.e. 'this' - pointer) and call the result"low level prototype". See 'FTI_HIGH' .In - order to improve heuristics for recognition of big structure - retvals,it is recommended to pass a helper that will be used to make - decisions.That helper will be used only for lowering 'tif', and not - for the childrentypes walked through by recursion. - - @param til (C++: til_t *) - @param tif (C++: tinfo_t *) - @param name (C++: const char *) - @param _helper (C++: lowertype_helper_t *) - - -class ida_typeinf.lowertype_helper_t(): - - Proxy of C++ lowertype_helper_t class - - -ida_typeinf.lowertype_helper_t.func_has_stkframe_hole(): - - func_has_stkframe_hole(self, candidate, candidate_data) -> bool - - -ida_typeinf.lowertype_helper_t.get_func_purged_bytes(): - - get_func_purged_bytes(self, candidate, candidate_data) -> int - - -ida_typeinf.new_til(): - - new_til(name, desc) -> til_t - - - Initialize a til. - - - @param name (C++: const char *) - @param desc (C++: const char *) - - -ida_typeinf.next_named_type(): - - next_named_type(ti, name, ntf_flags) -> char const * - - - Enumerate types. Returns mangled names. Never returns anonymous types. - To include it, enumerate types by ordinals. - - @param ti (C++: const til_t *) - @param name (C++: const char *) - @param ntf_flags (C++: int) - - -ida_typeinf.optimize_argloc(): - - optimize_argloc(vloc, size, gaps) -> bool - - - Verify and optimize scattered argloc into simple form. All new arglocs - must be processed by this function. - - @param vloc (C++: argloc_t *) - @param size (C++: int) - @param gaps (C++: const rangeset_t *) - - -ida_typeinf.pack_idcobj_to_bv(): - - pack_idcobj_to_bv(obj, tif, bytes, objoff, pio_flags=0) -> error_t - - - Write a typed idc object to the byte vector. Byte vector may be non- - empty, this function will append data to it - - @param obj (C++: const idc_value_t *) - @param tif (C++: const tinfo_t &) - @param bytes (C++: relobj_t *) - @param objoff (C++: void *) - @param pio_flags (C++: int) - - -ida_typeinf.pack_idcobj_to_idb(): - - pack_idcobj_to_idb(obj, tif, ea, pio_flags=0) -> error_t - - - Write a typed idc object to the database. - - - @param obj (C++: const idc_value_t *) - @param tif (C++: const tinfo_t &) - @param ea (C++: ea_t) - @param pio_flags (C++: int) - - -ida_typeinf.pack_object_to_bv(): - - pack_object_to_bv(py_obj, ti, py_type, py_fields, base_ea, pio_flags=0) -> PyObject * - - - Packs a typed object to a string - @param ti: Type info. 'None' can be passed. - @param tp: type string - @param fields: fields string (may be empty or None) - @param base_ea: base ea used to relocate the pointers in the packed object - @param pio_flags: flags used while unpacking - @return: - tuple(0, err_code) on failure - tuple(1, packed_buf) on success - - -ida_typeinf.pack_object_to_idb(): - - pack_object_to_idb(py_obj, ti, py_type, py_fields, ea, pio_flags=0) -> PyObject * - - - Write a typed object to the database. - Raises an exception if wrong parameters were passed or conversion fails - Returns the error_t returned by idaapi.pack_object_to_idb - @param ti: Type info. 'None' can be passed. - @param tp: type string - @param fields: fields string (may be empty or None) - @param ea: ea to be used while packing - @param pio_flags: flags used while unpacking - - -ida_typeinf.parse_decl(): - - parse_decl(tif, til, decl, flags) -> bool - - - Parse ONE declaration. If the input string contains more than one - declaration, the first complete type declaration ( 'PT_TYP' ) or the - last variable declaration ( 'PT_VAR' ) will be used.name & tif may be - empty after the call! - - @param tif: type info (C++: tinfo_t *) - @param til: type library to use. may be NULL (C++: til_t *) - @param decl: C declaration to parse (C++: const char *) - @param flags: combination of Type parsing flags bits (C++: int) - - -ida_typeinf.parse_decls(): - - parse_decls(til, input, printer, hti_flags) -> int - - - Parse many declarations and store them in a til. If there are any - errors, they will be printed using 'printer'. This function uses - default include path and predefined macros from the database settings. - It always uses the 'HTI_DCL' bit. - - @param til: type library to store the result (C++: til_t *) - @param input: input string or file name (see hti_flags) (C++: const - char *) - @param printer: function to output error messages (use msg or NULL or - your own callback) (C++: printer_t *) - @param hti_flags: combination of Type formatting flags (C++: int) - @return: number of errors, 0 means ok. - - -class ida_typeinf.predicate_t(): - - Proxy of C++ predicate_t class - - -ida_typeinf.predicate_t.should_display(): - - should_display(self, til, name, type, fields) -> bool - - -ida_typeinf.print_argloc(): - - print_argloc(vloc, size=0, vflags=0) -> size_t - - - Convert an argloc to human readable form. - - - @param vloc (C++: const argloc_t &) - @param size (C++: int) - @param vflags (C++: int) - - -ida_typeinf.print_decls(): - - print_decls(printer, til, py_ordinals, flags) -> int - - - Print types (and possibly their dependencies) in a format suitable for - use in a header file. This is the reverse 'parse_decls()' . - - @param printer: a handler for printing text (C++: text_sink_t &) - @param til: the type library holding the ordinals (C++: til_t *) - @param flags: flags for the algorithm. A combination of PDF_* - constants (C++: uint32) - - -ida_typeinf.print_tinfo(): - - print_tinfo(prefix, indent, cmtindent, flags, tif, name, cmt) -> bool - - -ida_typeinf.print_type(): - - print_type(ea, prtype_flags) -> bool - - - Get type declaration for the specified address. - - @param ea: address (C++: ea_t) - @param prtype_flags: combination of Type printing flags (C++: int) - @return: success - - -class ida_typeinf.ptr_type_data_t(): - - Proxy of C++ ptr_type_data_t class - - -ida_typeinf.ptr_type_data_t.based_ptr_size: - ptr_type_data_t_based_ptr_size_get(self) -> uchar - -ida_typeinf.ptr_type_data_t.closure: - ptr_type_data_t_closure_get(self) -> tinfo_t - -ida_typeinf.ptr_type_data_t.delta: - ptr_type_data_t_delta_get(self) -> int32 - -ida_typeinf.ptr_type_data_t.is_code_ptr(): - - is_code_ptr(self) -> bool - - -ida_typeinf.ptr_type_data_t.is_shifted(): - - is_shifted(self) -> bool - - -ida_typeinf.ptr_type_data_t.obj_type: - ptr_type_data_t_obj_type_get(self) -> tinfo_t - -ida_typeinf.ptr_type_data_t.parent: - ptr_type_data_t_parent_get(self) -> tinfo_t - -ida_typeinf.ptr_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.ptr_type_data_t.taptr_bits: - ptr_type_data_t_taptr_bits_get(self) -> uchar - -ida_typeinf.read_tinfo_bitfield_value(): - - read_tinfo_bitfield_value(typid, v, bitoff) -> uint64 - - -class ida_typeinf.reginfovec_t(): - - Proxy of C++ qvector<(reg_info_t)> class - - -ida_typeinf.reginfovec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.reginfovec_t.append(): - - push_back(self, x) - push_back(self) -> reg_info_t - - -ida_typeinf.reginfovec_t.at(): - - __getitem__(self, i) -> reg_info_t - - -ida_typeinf.reginfovec_t.begin(): - - begin(self) -> reg_info_t - begin(self) -> reg_info_t - - -ida_typeinf.reginfovec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.reginfovec_t.clear(): - - clear(self) - - -ida_typeinf.reginfovec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.reginfovec_t.end(): - - end(self) -> reg_info_t - end(self) -> reg_info_t - - -ida_typeinf.reginfovec_t.erase(): - - erase(self, it) -> reg_info_t - erase(self, first, last) -> reg_info_t - - -ida_typeinf.reginfovec_t.extract(): - - extract(self) -> reg_info_t - - -ida_typeinf.reginfovec_t.find(): - - find(self, x) -> reg_info_t - find(self, x) -> reg_info_t - - -ida_typeinf.reginfovec_t.grow(): - - grow(self, x=reg_info_t()) - - -ida_typeinf.reginfovec_t.has(): - - has(self, x) -> bool - - -ida_typeinf.reginfovec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.reginfovec_t.insert(): - - insert(self, it, x) -> reg_info_t - - -ida_typeinf.reginfovec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.reginfovec_t.push_back(): - - push_back(self, x) - push_back(self) -> reg_info_t - - -ida_typeinf.reginfovec_t.qclear(): - - qclear(self) - - -ida_typeinf.reginfovec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.reginfovec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.reginfovec_t.size(): - - size(self) -> size_t - - -ida_typeinf.reginfovec_t.swap(): - - swap(self, r) - - -ida_typeinf.reginfovec_t.truncate(): - - truncate(self) - - -class ida_typeinf.regobj_t(): - - Proxy of C++ regobj_t class - - -ida_typeinf.regobj_t.regidx: - regobj_t_regidx_get(self) -> int - -ida_typeinf.regobj_t.relocate: - regobj_t_relocate_get(self) -> int - -ida_typeinf.regobj_t.size(): - - size(self) -> size_t - - -ida_typeinf.regobj_t.value: - regobj_t_value_get(self) -> bytevec_t * - -class ida_typeinf.regobjs_t(): - - Proxy of C++ regobjs_t class - - -ida_typeinf.regobjs_t.at(): - - at(self, _idx) -> regobj_t - - -ida_typeinf.regobjs_t.begin(): - - begin(self) -> regobj_t - begin(self) -> regobj_t - - -ida_typeinf.regobjs_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.regobjs_t.clear(): - - clear(self) - - -ida_typeinf.regobjs_t.empty(): - - empty(self) -> bool - - -ida_typeinf.regobjs_t.end(): - - end(self) -> regobj_t - end(self) -> regobj_t - - -ida_typeinf.regobjs_t.erase(): - - erase(self, it) -> regobj_t - erase(self, first, last) -> regobj_t - - -ida_typeinf.regobjs_t.extract(): - - extract(self) -> regobj_t - - -ida_typeinf.regobjs_t.grow(): - - grow(self, x=regobj_t()) - - -ida_typeinf.regobjs_t.inject(): - - inject(self, s, len) - - -ida_typeinf.regobjs_t.insert(): - - insert(self, it, x) -> regobj_t - - -ida_typeinf.regobjs_t.pop_back(): - - pop_back(self) - - -ida_typeinf.regobjs_t.push_back(): - - push_back(self, x) - push_back(self) -> regobj_t - - -ida_typeinf.regobjs_t.qclear(): - - qclear(self) - - -ida_typeinf.regobjs_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.regobjs_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.regobjs_t.size(): - - size(self) -> size_t - - -ida_typeinf.regobjs_t.swap(): - - swap(self, r) - - -ida_typeinf.regobjs_t.truncate(): - - truncate(self) - - -class ida_typeinf.regobjvec_t(): - - Proxy of C++ qvector<(regobj_t)> class - - -ida_typeinf.regobjvec_t.at(): - - at(self, _idx) -> regobj_t - - -ida_typeinf.regobjvec_t.begin(): - - begin(self) -> regobj_t - begin(self) -> regobj_t - - -ida_typeinf.regobjvec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.regobjvec_t.clear(): - - clear(self) - - -ida_typeinf.regobjvec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.regobjvec_t.end(): - - end(self) -> regobj_t - end(self) -> regobj_t - - -ida_typeinf.regobjvec_t.erase(): - - erase(self, it) -> regobj_t - erase(self, first, last) -> regobj_t - - -ida_typeinf.regobjvec_t.extract(): - - extract(self) -> regobj_t - - -ida_typeinf.regobjvec_t.grow(): - - grow(self, x=regobj_t()) - - -ida_typeinf.regobjvec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.regobjvec_t.insert(): - - insert(self, it, x) -> regobj_t - - -ida_typeinf.regobjvec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.regobjvec_t.push_back(): - - push_back(self, x) - push_back(self) -> regobj_t - - -ida_typeinf.regobjvec_t.qclear(): - - qclear(self) - - -ida_typeinf.regobjvec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.regobjvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.regobjvec_t.size(): - - size(self) -> size_t - - -ida_typeinf.regobjvec_t.swap(): - - swap(self, r) - - -ida_typeinf.regobjvec_t.truncate(): - - truncate(self) - - -ida_typeinf.remove_abi_opts(): - - remove_abi_opts(abi_opts, user_level=False) -> bool - - -ida_typeinf.remove_pointer(): - - remove_pointer(tif) -> tinfo_t - - - 'BT_PTR' : If the current type is a pointer, return the pointed - object. If the current type is not a pointer, return the current type. - See also get_ptrarr_object() and get_pointed_object() - - @param tif (C++: const tinfo_t &) - - -ida_typeinf.remove_tinfo_pointer(): - - remove_tinfo_pointer(tif, name, til) -> PyObject * - - - Remove pointer of a type. (i.e. convert "char *" into "char"). - Optionally remove the "lp" (or similar) prefix of the input name. If - the input type is not a pointer, then fail. - - @param tif (C++: tinfo_t *) - @param til (C++: const til_t *) - - -ida_typeinf.replace_ordinal_typerefs(): - - replace_ordinal_typerefs(til, tif) -> int - - - Replace references to ordinal types by name references. This function - 'unties' the type from the current local type library and makes it - easier to export it. - - @param til: type library to use. may be NULL. (C++: til_t *) - @param tif: type to modify (in/out) (C++: tinfo_t *) - - -ida_typeinf.resolve_typedef(): - - resolve_typedef(til, type) -> type_t const * - - -class ida_typeinf.rrel_t(): - - Proxy of C++ rrel_t class - - -ida_typeinf.rrel_t.off: - rrel_t_off_get(self) -> sval_t - -ida_typeinf.rrel_t.reg: - rrel_t_reg_get(self) -> int - -ida_typeinf.save_tinfo(): - - save_tinfo(tif, til, ord, name, ntf_flags) -> tinfo_code_t - - -class ida_typeinf.scattered_aloc_t(): - - Proxy of C++ scattered_aloc_t class - - -ida_typeinf.scattered_aloc_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.scattered_aloc_t.at(): - - at(self, _idx) -> argpart_t - - -ida_typeinf.scattered_aloc_t.begin(): - - begin(self) -> argpart_t - begin(self) -> argpart_t - - -ida_typeinf.scattered_aloc_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.scattered_aloc_t.clear(): - - clear(self) - - -ida_typeinf.scattered_aloc_t.empty(): - - empty(self) -> bool - - -ida_typeinf.scattered_aloc_t.end(): - - end(self) -> argpart_t - end(self) -> argpart_t - - -ida_typeinf.scattered_aloc_t.erase(): - - erase(self, it) -> argpart_t - erase(self, first, last) -> argpart_t - - -ida_typeinf.scattered_aloc_t.extract(): - - extract(self) -> argpart_t - - -ida_typeinf.scattered_aloc_t.find(): - - find(self, x) -> argpart_t - find(self, x) -> argpart_t - - -ida_typeinf.scattered_aloc_t.grow(): - - grow(self, x=argpart_t()) - - -ida_typeinf.scattered_aloc_t.has(): - - has(self, x) -> bool - - -ida_typeinf.scattered_aloc_t.inject(): - - inject(self, s, len) - - -ida_typeinf.scattered_aloc_t.insert(): - - insert(self, it, x) -> argpart_t - - -ida_typeinf.scattered_aloc_t.pop_back(): - - pop_back(self) - - -ida_typeinf.scattered_aloc_t.push_back(): - - push_back(self, x) - push_back(self) -> argpart_t - - -ida_typeinf.scattered_aloc_t.qclear(): - - qclear(self) - - -ida_typeinf.scattered_aloc_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.scattered_aloc_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.scattered_aloc_t.size(): - - size(self) -> size_t - - -ida_typeinf.scattered_aloc_t.swap(): - - swap(self, r) - - -ida_typeinf.scattered_aloc_t.truncate(): - - truncate(self) - - -ida_typeinf.score_tinfo(): - - score_tinfo(tif) -> uint32 - - -ida_typeinf.serialize_tinfo(): - - serialize_tinfo(type, fields, fldcmts, tif, sudt_flags) -> bool - - -ida_typeinf.set_abi_name(): - - set_abi_name(abiname, user_level=False) -> bool - - - Set abi name (see 'Compiler IDs' ) - - - @param abiname (C++: const char *) - @param user_level (C++: bool) - - -ida_typeinf.set_c_header_path(): - - set_c_header_path(incdir) - - - Set include directory path the target compiler. - - - @param incdir (C++: const char *) - - -ida_typeinf.set_c_macros(): - - set_c_macros(macros) - - - Set predefined macros for the target compiler. - - - @param macros (C++: const char *) - - -ida_typeinf.set_compiler(): - - set_compiler(cc, flags, abiname=None) -> bool - - - Change current compiler. - - @param cc: compiler to switch to (C++: const compiler_info_t &) - @param flags: Set compiler flags (C++: int) - @param abiname: ABI name (C++: const char *) - @return: success - - -ida_typeinf.set_compiler_id(): - - set_compiler_id(id, abiname=None) -> bool - - - Set the compiler id (see 'Compiler IDs' ) - - - @param id (C++: comp_t) - @param abiname (C++: const char *) - - -ida_typeinf.set_compiler_string(): - - set_compiler_string(compstr, user_level) -> bool - - -ida_typeinf.set_numbered_type(): - - set_numbered_type(ti, ordinal, ntf_flags, name, type, fields=None, cmt=None, fldcmts=None, sclass=None) -> tinfo_code_t - - - Store a type in the til. 'name' may be NULL for anonymous types. The - specified ordinal must be free (no other type is using it). For - ntf_flags, only 'NTF_REPLACE' is consulted. - - @param ti (C++: til_t *) - @param ordinal (C++: uint32) - @param ntf_flags (C++: int) - @param name (C++: const char *) - @param type (C++: const type_t *) - @param fields (C++: const p_list *) - @param cmt (C++: const char *) - @param fldcmts (C++: const p_list *) - @param sclass (C++: const sclass_t *) - - -ida_typeinf.set_tinfo_attr(): - - set_tinfo_attr(tif, ta, may_overwrite) -> bool - - -ida_typeinf.set_tinfo_attrs(): - - set_tinfo_attrs(tif, ta) -> bool - - -ida_typeinf.set_tinfo_property(): - - set_tinfo_property(tif, sta_prop, x) -> size_t - - -ida_typeinf.set_type_alias(): - - set_type_alias(ti, src_ordinal, dst_ordinal) -> bool - - - Create a type alias. Redirects all references to source type to the - destination type. This is equivalent to instantaneous replacement all - reference to srctype by dsttype. - - @param ti (C++: til_t *) - @param src_ordinal (C++: uint32) - @param dst_ordinal (C++: uint32) - - -class ida_typeinf.simd_info_t(): - - Proxy of C++ simd_info_t class - - -ida_typeinf.simd_info_t.match_pattern(): - - match_pattern(self, pattern) -> bool - - -ida_typeinf.simd_info_t.memtype: - simd_info_t_memtype_get(self) -> type_t - -ida_typeinf.simd_info_t.name: - simd_info_t_name_get(self) -> char const * - -ida_typeinf.simd_info_t.size: - simd_info_t_size_get(self) -> uint16 - -ida_typeinf.simd_info_t.tif: - simd_info_t_tif_get(self) -> tinfo_t - -ida_typeinf.store_til(): - - store_til(ti, tildir, name) -> bool - - - Store til to a file. If the til contains garbage, it will be collected - before storing the til. Your plugin should call 'compact_til()' before - calling 'store_til()' . - - @param ti: type library to store (C++: til_t *) - @param tildir: directory where to store the til. NULL means current - directory. (C++: const char *) - @param name: filename of the til. If it's an absolute path, tildir is - ignored. NB: the file extension is forced to .til (C++: - const char *) - @return: success - - -class ida_typeinf.text_sink_t(): - - Proxy of C++ text_sink_t class - - -ida_typeinf.text_sink_t._print(): - - _print(self, str) -> int - - -class ida_typeinf.til_symbol_t(): - - Proxy of C++ til_symbol_t class - - -ida_typeinf.til_symbol_t.name: - til_symbol_t_name_get(self) -> char const * - -ida_typeinf.til_symbol_t.til: - til_symbol_t_til_get(self) -> til_t - -class ida_typeinf.til_t(): - - Proxy of C++ til_t class - - -ida_typeinf.til_t.base(): - - base(self, n) -> til_t - - -ida_typeinf.til_t.cc: - til_t_cc_get(self) -> compiler_info_t - -ida_typeinf.til_t.desc: - til_t_desc_get(self) -> char * - -ida_typeinf.til_t.flags: - til_t_flags_get(self) -> uint32 - -ida_typeinf.til_t.is_dirty(): - - is_dirty(self) -> bool - - -ida_typeinf.til_t.name: - til_t_name_get(self) -> char * - -ida_typeinf.til_t.nbases: - til_t_nbases_get(self) -> int - -ida_typeinf.til_t.nrefs: - til_t_nrefs_get(self) -> int - -ida_typeinf.til_t.nstreams: - til_t_nstreams_get(self) -> int - -ida_typeinf.til_t.set_dirty(): - - set_dirty(self) - - -ida_typeinf.til_t.streams: - til_t_streams_get(self) -> til_stream_t ** - -class ida_typeinf.tinfo_t(): - - Proxy of C++ tinfo_t class - - -ida_typeinf.tinfo_t._print(): - - _print(self, name=None, prtype_flags=0x0000, indent=0, cmtindent=0, prefix=None, cmt=None) -> bool - - -ida_typeinf.tinfo_t.append_covered(): - - append_covered(self, out, offset=0) -> bool - - -ida_typeinf.tinfo_t.calc_gaps(): - - calc_gaps(self, out) -> bool - - -ida_typeinf.tinfo_t.calc_purged_bytes(): - - calc_purged_bytes(self) -> int - - -ida_typeinf.tinfo_t.calc_score(): - - calc_score(self) -> uint32 - - -ida_typeinf.tinfo_t.calc_udt_aligns(): - - calc_udt_aligns(self, sudt_flags=0x0004) -> bool - - -ida_typeinf.tinfo_t.change_sign(): - - change_sign(self, sign) -> bool - - -ida_typeinf.tinfo_t.clear(): - - clear(self) - - -ida_typeinf.tinfo_t.clr_const(): - - clr_const(self) - - -ida_typeinf.tinfo_t.clr_const_volatile(): - - clr_const_volatile(self) - - -ida_typeinf.tinfo_t.clr_volatile(): - - clr_volatile(self) - - -ida_typeinf.tinfo_t.compare(): - - compare(self, r) -> int - - -ida_typeinf.tinfo_t.compare_with(): - - compare_with(self, r, tcflags=0) -> bool - - -ida_typeinf.tinfo_t.convert_array_to_ptr(): - - convert_array_to_ptr(self) -> bool - - -ida_typeinf.tinfo_t.copy(): - - copy(self) -> tinfo_t - - -ida_typeinf.tinfo_t.create_array(): - - create_array(self, p, decl_type=BT_ARRAY) -> bool - create_array(self, tif, nelems=0, base=0, decl_type=BT_ARRAY) -> bool - - -ida_typeinf.tinfo_t.create_bitfield(): - - create_bitfield(self, p, decl_type=BT_BITFIELD) -> bool - create_bitfield(self, nbytes, width, is_unsigned=False, decl_type=BT_BITFIELD) -> bool - - -ida_typeinf.tinfo_t.create_enum(): - - create_enum(self, p, decl_type=BTF_ENUM) -> bool - - -ida_typeinf.tinfo_t.create_forward_decl(): - - create_forward_decl(self, til, decl_type, name, ntf_flags=0) -> tinfo_code_t - - -ida_typeinf.tinfo_t.create_func(): - - create_func(self, p, decl_type=BT_FUNC) -> bool - - -ida_typeinf.tinfo_t.create_ptr(): - - create_ptr(self, p, decl_type=BT_PTR) -> bool - create_ptr(self, tif, bps=0, decl_type=BT_PTR) -> bool - - -ida_typeinf.tinfo_t.create_simple_type(): - - create_simple_type(self, decl_type) -> bool - - -ida_typeinf.tinfo_t.create_typedef(): - - create_typedef(self, p, decl_type=BTF_TYPEDEF, try_ordinal=True) -> bool - create_typedef(self, til, name, decl_type=BTF_TYPEDEF, try_ordinal=True) - create_typedef(self, til, ord, decl_type=BTF_TYPEDEF) - - -ida_typeinf.tinfo_t.create_udt(): - - create_udt(self, p, decl_type) -> bool - - -ida_typeinf.tinfo_t.del_attr(): - - del_attr(self, key, make_copy=True) -> bool - - -ida_typeinf.tinfo_t.del_attrs(): - - del_attrs(self) - - -ida_typeinf.tinfo_t.deserialize(): - - deserialize(self, til, ptype, pfields=None, pfldcmts=None) -> bool - deserialize(self, til, type, fields, cmts=None) -> bool - - -ida_typeinf.tinfo_t.dstr(): - - dstr(self) -> char const * - - -ida_typeinf.tinfo_t.empty(): - - empty(self) -> bool - - -ida_typeinf.tinfo_t.equals_to(): - - equals_to(self, r) -> bool - - -ida_typeinf.tinfo_t.find_udt_member(): - - find_udt_member(self, udm, strmem_flags) -> int - - -ida_typeinf.tinfo_t.get_array_details(): - - get_array_details(self, ai) -> bool - - -ida_typeinf.tinfo_t.get_array_element(): - - get_array_element(self) -> tinfo_t - - -ida_typeinf.tinfo_t.get_array_nelems(): - - get_array_nelems(self) -> int - - -ida_typeinf.tinfo_t.get_attr(): - - get_attr(self, key, all_attrs=True) -> PyObject * - - -ida_typeinf.tinfo_t.get_attrs(): - - get_attrs(self, tav, all_attrs=False) -> bool - - -ida_typeinf.tinfo_t.get_bitfield_details(): - - get_bitfield_details(self, bi) -> bool - - -ida_typeinf.tinfo_t.get_declalign(): - - get_declalign(self) -> uchar - - -ida_typeinf.tinfo_t.get_decltype(): - - get_decltype(self) -> type_t - - -ida_typeinf.tinfo_t.get_enum_base_type(): - - get_enum_base_type(self) -> type_t - - -ida_typeinf.tinfo_t.get_enum_details(): - - get_enum_details(self, ei) -> bool - - -ida_typeinf.tinfo_t.get_final_ordinal(): - - get_final_ordinal(self) -> uint32 - - -ida_typeinf.tinfo_t.get_final_type_name(): - - get_final_type_name(self) -> bool - - -ida_typeinf.tinfo_t.get_func_details(): - - get_func_details(self, fi, gtd=GTD_CALC_ARGLOCS) -> bool - - -ida_typeinf.tinfo_t.get_modifiers(): - - get_modifiers(self) -> type_t - - -ida_typeinf.tinfo_t.get_named_type(): - - get_named_type(self, til, name, decl_type=BTF_TYPEDEF, resolve=True, try_ordinal=True) -> bool - - -ida_typeinf.tinfo_t.get_nargs(): - - get_nargs(self) -> int - - -ida_typeinf.tinfo_t.get_next_type_name(): - - get_next_type_name(self) -> bool - - -ida_typeinf.tinfo_t.get_nth_arg(): - - get_nth_arg(self, n) -> tinfo_t - - -ida_typeinf.tinfo_t.get_numbered_type(): - - get_numbered_type(self, til, ordinal, decl_type=BTF_TYPEDEF, resolve=True) -> bool - - -ida_typeinf.tinfo_t.get_onemember_type(): - - get_onemember_type(self) -> tinfo_t - - -ida_typeinf.tinfo_t.get_ordinal(): - - get_ordinal(self) -> uint32 - - -ida_typeinf.tinfo_t.get_pointed_object(): - - get_pointed_object(self) -> tinfo_t - - -ida_typeinf.tinfo_t.get_ptr_details(): - - get_ptr_details(self, pi) -> bool - - -ida_typeinf.tinfo_t.get_ptrarr_object(): - - get_ptrarr_object(self) -> tinfo_t - - -ida_typeinf.tinfo_t.get_ptrarr_objsize(): - - get_ptrarr_objsize(self) -> int - - -ida_typeinf.tinfo_t.get_realtype(): - - get_realtype(self, full=False) -> type_t - - -ida_typeinf.tinfo_t.get_rettype(): - - get_rettype(self) -> tinfo_t - - -ida_typeinf.tinfo_t.get_sign(): - - get_sign(self) -> type_sign_t - - -ida_typeinf.tinfo_t.get_size(): - - get_size(self, p_effalign=None, gts_code=0) -> size_t - - -ida_typeinf.tinfo_t.get_stock(): - - get_stock(id) -> tinfo_t - - -ida_typeinf.tinfo_t.get_til(): - - get_til(self) -> til_t - - -ida_typeinf.tinfo_t.get_type_name(): - - get_type_name(self) -> bool - - -ida_typeinf.tinfo_t.get_udt_details(): - - get_udt_details(self, udt, gtd=GTD_CALC_LAYOUT) -> bool - - -ida_typeinf.tinfo_t.get_udt_nmembers(): - - get_udt_nmembers(self) -> int - - -ida_typeinf.tinfo_t.get_unpadded_size(): - - get_unpadded_size(self) -> size_t - - -ida_typeinf.tinfo_t.has_details(): - - has_details(self) -> bool - - -ida_typeinf.tinfo_t.has_vftable(): - - has_vftable(self) -> bool - - -ida_typeinf.tinfo_t.is_anonymous_udt(): - - is_anonymous_udt(self) -> bool - - -ida_typeinf.tinfo_t.is_arithmetic(): - - is_arithmetic(self) -> bool - - -ida_typeinf.tinfo_t.is_array(): - - is_array(self) -> bool - - -ida_typeinf.tinfo_t.is_bitfield(): - - is_bitfield(self) -> bool - - -ida_typeinf.tinfo_t.is_bool(): - - is_bool(self) -> bool - - -ida_typeinf.tinfo_t.is_castable_to(): - - is_castable_to(self, target) -> bool - - -ida_typeinf.tinfo_t.is_char(): - - is_char(self) -> bool - - -ida_typeinf.tinfo_t.is_complex(): - - is_complex(self) -> bool - - -ida_typeinf.tinfo_t.is_const(): - - is_const(self) -> bool - - -ida_typeinf.tinfo_t.is_correct(): - - is_correct(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_array(): - - is_decl_array(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_bitfield(): - - is_decl_bitfield(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_bool(): - - is_decl_bool(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_char(): - - is_decl_char(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_complex(): - - is_decl_complex(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_const(): - - is_decl_const(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_double(): - - is_decl_double(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_enum(): - - is_decl_enum(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_float(): - - is_decl_float(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_floating(): - - is_decl_floating(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_func(): - - is_decl_func(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_int(): - - is_decl_int(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_int128(): - - is_decl_int128(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_int16(): - - is_decl_int16(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_int32(): - - is_decl_int32(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_int64(): - - is_decl_int64(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_last(): - - is_decl_last(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_ldouble(): - - is_decl_ldouble(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_paf(): - - is_decl_paf(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_partial(): - - is_decl_partial(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_ptr(): - - is_decl_ptr(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_struct(): - - is_decl_struct(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_sue(): - - is_decl_sue(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_tbyte(): - - is_decl_tbyte(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_typedef(): - - is_decl_typedef(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uchar(): - - is_decl_uchar(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_udt(): - - is_decl_udt(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uint(): - - is_decl_uint(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uint128(): - - is_decl_uint128(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uint16(): - - is_decl_uint16(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uint32(): - - is_decl_uint32(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uint64(): - - is_decl_uint64(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_union(): - - is_decl_union(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_unknown(): - - is_decl_unknown(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_void(): - - is_decl_void(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_volatile(): - - is_decl_volatile(self) -> bool - - -ida_typeinf.tinfo_t.is_double(): - - is_double(self) -> bool - - -ida_typeinf.tinfo_t.is_empty_udt(): - - is_empty_udt(self) -> bool - - -ida_typeinf.tinfo_t.is_enum(): - - is_enum(self) -> bool - - -ida_typeinf.tinfo_t.is_ext_arithmetic(): - - is_ext_arithmetic(self) -> bool - - -ida_typeinf.tinfo_t.is_ext_integral(): - - is_ext_integral(self) -> bool - - -ida_typeinf.tinfo_t.is_float(): - - is_float(self) -> bool - - -ida_typeinf.tinfo_t.is_floating(): - - is_floating(self) -> bool - - -ida_typeinf.tinfo_t.is_forward_decl(): - - is_forward_decl(self) -> bool - - -ida_typeinf.tinfo_t.is_from_subtil(): - - is_from_subtil(self) -> bool - - -ida_typeinf.tinfo_t.is_func(): - - is_func(self) -> bool - - -ida_typeinf.tinfo_t.is_funcptr(): - - is_funcptr(self) -> bool - - -ida_typeinf.tinfo_t.is_high_func(): - - is_high_func(self) -> bool - - -ida_typeinf.tinfo_t.is_int(): - - is_int(self) -> bool - - -ida_typeinf.tinfo_t.is_int128(): - - is_int128(self) -> bool - - -ida_typeinf.tinfo_t.is_int16(): - - is_int16(self) -> bool - - -ida_typeinf.tinfo_t.is_int32(): - - is_int32(self) -> bool - - -ida_typeinf.tinfo_t.is_int64(): - - is_int64(self) -> bool - - -ida_typeinf.tinfo_t.is_integral(): - - is_integral(self) -> bool - - -ida_typeinf.tinfo_t.is_ldouble(): - - is_ldouble(self) -> bool - - -ida_typeinf.tinfo_t.is_manually_castable_to(): - - is_manually_castable_to(self, target) -> bool - - -ida_typeinf.tinfo_t.is_one_fpval(): - - is_one_fpval(self) -> bool - - -ida_typeinf.tinfo_t.is_paf(): - - is_paf(self) -> bool - - -ida_typeinf.tinfo_t.is_partial(): - - is_partial(self) -> bool - - -ida_typeinf.tinfo_t.is_ptr(): - - is_ptr(self) -> bool - - -ida_typeinf.tinfo_t.is_ptr_or_array(): - - is_ptr_or_array(self) -> bool - - -ida_typeinf.tinfo_t.is_purging_cc(): - - is_purging_cc(self) -> bool - - -ida_typeinf.tinfo_t.is_pvoid(): - - is_pvoid(self) -> bool - - -ida_typeinf.tinfo_t.is_scalar(): - - is_scalar(self) -> bool - - -ida_typeinf.tinfo_t.is_shifted_ptr(): - - is_shifted_ptr(self) -> bool - - -ida_typeinf.tinfo_t.is_signed(): - - is_signed(self) -> bool - - -ida_typeinf.tinfo_t.is_small_udt(): - - is_small_udt(self) -> bool - - -ida_typeinf.tinfo_t.is_sse_type(): - - is_sse_type(self) -> bool - - -ida_typeinf.tinfo_t.is_struct(): - - is_struct(self) -> bool - - -ida_typeinf.tinfo_t.is_sue(): - - is_sue(self) -> bool - - -ida_typeinf.tinfo_t.is_tbyte(): - - is_tbyte(self) -> bool - - -ida_typeinf.tinfo_t.is_typeref(): - - is_typeref(self) -> bool - - -ida_typeinf.tinfo_t.is_uchar(): - - is_uchar(self) -> bool - - -ida_typeinf.tinfo_t.is_udt(): - - is_udt(self) -> bool - - -ida_typeinf.tinfo_t.is_uint(): - - is_uint(self) -> bool - - -ida_typeinf.tinfo_t.is_uint128(): - - is_uint128(self) -> bool - - -ida_typeinf.tinfo_t.is_uint16(): - - is_uint16(self) -> bool - - -ida_typeinf.tinfo_t.is_uint32(): - - is_uint32(self) -> bool - - -ida_typeinf.tinfo_t.is_uint64(): - - is_uint64(self) -> bool - - -ida_typeinf.tinfo_t.is_union(): - - is_union(self) -> bool - - -ida_typeinf.tinfo_t.is_unknown(): - - is_unknown(self) -> bool - - -ida_typeinf.tinfo_t.is_unsigned(): - - is_unsigned(self) -> bool - - -ida_typeinf.tinfo_t.is_user_cc(): - - is_user_cc(self) -> bool - - -ida_typeinf.tinfo_t.is_vararg_cc(): - - is_vararg_cc(self) -> bool - - -ida_typeinf.tinfo_t.is_varstruct(): - - is_varstruct(self) -> bool - - -ida_typeinf.tinfo_t.is_vftable(): - - is_vftable(self) -> bool - - -ida_typeinf.tinfo_t.is_void(): - - is_void(self) -> bool - - -ida_typeinf.tinfo_t.is_volatile(): - - is_volatile(self) -> bool - - -ida_typeinf.tinfo_t.is_well_defined(): - - is_well_defined(self) -> bool - - -ida_typeinf.tinfo_t.present(): - - present(self) -> bool - - -ida_typeinf.tinfo_t.read_bitfield_value(): - - read_bitfield_value(self, v, bitoff) -> uint64 - - -ida_typeinf.tinfo_t.remove_ptr_or_array(): - - remove_ptr_or_array(self) -> bool - - -ida_typeinf.tinfo_t.requires_qualifier(): - - requires_qualifier(self, name, offset) -> bool - - -ida_typeinf.tinfo_t.serialize(): - - serialize(self, sudt_flags=SUDT_FAST|SUDT_TRUNC) -> PyObject * - - -ida_typeinf.tinfo_t.set_attr(): - - set_attr(self, ta, may_overwrite=True) -> bool - - -ida_typeinf.tinfo_t.set_attrs(): - - set_attrs(self, tav) -> bool - - -ida_typeinf.tinfo_t.set_const(): - - set_const(self) - - -ida_typeinf.tinfo_t.set_declalign(): - - set_declalign(self, declalign) -> bool - - -ida_typeinf.tinfo_t.set_modifiers(): - - set_modifiers(self, mod) - - -ida_typeinf.tinfo_t.set_named_type(): - - set_named_type(self, til, name, ntf_flags=0) -> tinfo_code_t - - -ida_typeinf.tinfo_t.set_numbered_type(): - - set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t - - -ida_typeinf.tinfo_t.set_symbol_type(): - - set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t - - -ida_typeinf.tinfo_t.set_volatile(): - - set_volatile(self) - - -ida_typeinf.tinfo_t.swap(): - - swap(self, r) - - -ida_typeinf.tinfo_t.write_bitfield_value(): - - write_bitfield_value(self, dst, v, bitoff) -> uint64 - - -ida_typeinf.tinfo_t_get_stock(): - - tinfo_t_get_stock(id) -> tinfo_t - - -class ida_typeinf.tinfo_visitor_t(): - - Proxy of C++ tinfo_visitor_t class - - -ida_typeinf.tinfo_visitor_t.apply_to(): - - apply_to(self, tif, out=None, name=None, cmt=None) -> int - - -ida_typeinf.tinfo_visitor_t.prune_now(): - - prune_now(self) - - -ida_typeinf.tinfo_visitor_t.state: - tinfo_visitor_t_state_get(self) -> int - -ida_typeinf.tinfo_visitor_t.visit_type(): - - visit_type(self, out, tif, name, cmt) -> int - - -class ida_typeinf.type_attr_t(): - - Proxy of C++ type_attr_t class - - -ida_typeinf.type_attr_t.key: - type_attr_t_key_get(self) -> qstring * - -ida_typeinf.type_attr_t.value: - type_attr_t_value_get(self) -> bytevec_t * - -class ida_typeinf.type_attrs_t(): - - Proxy of C++ qvector<(type_attr_t)> class - - -ida_typeinf.type_attrs_t.at(): - - at(self, _idx) -> type_attr_t - - -ida_typeinf.type_attrs_t.begin(): - - begin(self) -> type_attr_t - begin(self) -> type_attr_t - - -ida_typeinf.type_attrs_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.type_attrs_t.clear(): - - clear(self) - - -ida_typeinf.type_attrs_t.empty(): - - empty(self) -> bool - - -ida_typeinf.type_attrs_t.end(): - - end(self) -> type_attr_t - end(self) -> type_attr_t - - -ida_typeinf.type_attrs_t.erase(): - - erase(self, it) -> type_attr_t - erase(self, first, last) -> type_attr_t - - -ida_typeinf.type_attrs_t.extract(): - - extract(self) -> type_attr_t - - -ida_typeinf.type_attrs_t.grow(): - - grow(self, x=type_attr_t()) - - -ida_typeinf.type_attrs_t.inject(): - - inject(self, s, len) - - -ida_typeinf.type_attrs_t.insert(): - - insert(self, it, x) -> type_attr_t - - -ida_typeinf.type_attrs_t.pop_back(): - - pop_back(self) - - -ida_typeinf.type_attrs_t.push_back(): - - push_back(self, x) - push_back(self) -> type_attr_t - - -ida_typeinf.type_attrs_t.qclear(): - - qclear(self) - - -ida_typeinf.type_attrs_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.type_attrs_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.type_attrs_t.size(): - - size(self) -> size_t - - -ida_typeinf.type_attrs_t.swap(): - - swap(self, r) - - -ida_typeinf.type_attrs_t.truncate(): - - truncate(self) - - -class ida_typeinf.type_mods_t(): - - Proxy of C++ type_mods_t class - - -ida_typeinf.type_mods_t.clear(): - - clear(self) - - -ida_typeinf.type_mods_t.cmt: - type_mods_t_cmt_get(self) -> qstring * - -ida_typeinf.type_mods_t.flags: - type_mods_t_flags_get(self) -> int - -ida_typeinf.type_mods_t.has_cmt(): - - has_cmt(self) -> bool - - -ida_typeinf.type_mods_t.has_info(): - - has_info(self) -> bool - - -ida_typeinf.type_mods_t.has_name(): - - has_name(self) -> bool - - -ida_typeinf.type_mods_t.has_type(): - - has_type(self) -> bool - - -ida_typeinf.type_mods_t.name: - type_mods_t_name_get(self) -> qstring * - -ida_typeinf.type_mods_t.set_new_cmt(): - - set_new_cmt(self, c) - - -ida_typeinf.type_mods_t.set_new_name(): - - set_new_name(self, n) - - -ida_typeinf.type_mods_t.set_new_type(): - - set_new_type(self, t) - - -ida_typeinf.type_mods_t.type: - type_mods_t_type_get(self) -> tinfo_t - -class ida_typeinf.typedef_type_data_t(): - - Proxy of C++ typedef_type_data_t class - - -ida_typeinf.typedef_type_data_t.is_ordref: - typedef_type_data_t_is_ordref_get(self) -> bool - -ida_typeinf.typedef_type_data_t.resolve: - typedef_type_data_t_resolve_get(self) -> bool - -ida_typeinf.typedef_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.typedef_type_data_t.til: - typedef_type_data_t_til_get(self) -> til_t - -class ida_typeinf.udt_member_t(): - - Proxy of C++ udt_member_t class - - -ida_typeinf.udt_member_t.begin(): - - begin(self) -> uint64 - - -ida_typeinf.udt_member_t.clr_baseclass(): - - clr_baseclass(self) - - -ida_typeinf.udt_member_t.clr_unaligned(): - - clr_unaligned(self) - - -ida_typeinf.udt_member_t.clr_vftable(): - - clr_vftable(self) - - -ida_typeinf.udt_member_t.clr_virtbase(): - - clr_virtbase(self) - - -ida_typeinf.udt_member_t.cmt: - udt_member_t_cmt_get(self) -> qstring * - -ida_typeinf.udt_member_t.effalign: - udt_member_t_effalign_get(self) -> int - -ida_typeinf.udt_member_t.end(): - - end(self) -> uint64 - - -ida_typeinf.udt_member_t.fda: - udt_member_t_fda_get(self) -> uchar - -ida_typeinf.udt_member_t.is_anonymous_udm(): - - is_anonymous_udm(self) -> bool - - -ida_typeinf.udt_member_t.is_baseclass(): - - is_baseclass(self) -> bool - - -ida_typeinf.udt_member_t.is_bitfield(): - - is_bitfield(self) -> bool - - -ida_typeinf.udt_member_t.is_unaligned(): - - is_unaligned(self) -> bool - - -ida_typeinf.udt_member_t.is_vftable(): - - is_vftable(self) -> bool - - -ida_typeinf.udt_member_t.is_virtbase(): - - is_virtbase(self) -> bool - - -ida_typeinf.udt_member_t.is_zero_bitfield(): - - is_zero_bitfield(self) -> bool - - -ida_typeinf.udt_member_t.name: - udt_member_t_name_get(self) -> qstring * - -ida_typeinf.udt_member_t.offset: - udt_member_t_offset_get(self) -> uint64 - -ida_typeinf.udt_member_t.set_baseclass(): - - set_baseclass(self) - - -ida_typeinf.udt_member_t.set_unaligned(): - - set_unaligned(self) - - -ida_typeinf.udt_member_t.set_vftable(): - - set_vftable(self) - - -ida_typeinf.udt_member_t.set_virtbase(): - - set_virtbase(self) - - -ida_typeinf.udt_member_t.size: - udt_member_t_size_get(self) -> uint64 - -ida_typeinf.udt_member_t.swap(): - - swap(self, r) - - -ida_typeinf.udt_member_t.tafld_bits: - udt_member_t_tafld_bits_get(self) -> uint32 - -ida_typeinf.udt_member_t.type: - udt_member_t_type_get(self) -> tinfo_t - -class ida_typeinf.udt_type_data_t(): - - Proxy of C++ udt_type_data_t class - - -ida_typeinf.udt_type_data_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.udt_type_data_t.at(): - - at(self, _idx) -> udt_member_t - - -ida_typeinf.udt_type_data_t.begin(): - - begin(self) -> udt_member_t - begin(self) -> udt_member_t - - -ida_typeinf.udt_type_data_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.udt_type_data_t.clear(): - - clear(self) - - -ida_typeinf.udt_type_data_t.effalign: - udt_type_data_t_effalign_get(self) -> uint32 - -ida_typeinf.udt_type_data_t.empty(): - - empty(self) -> bool - - -ida_typeinf.udt_type_data_t.end(): - - end(self) -> udt_member_t - end(self) -> udt_member_t - - -ida_typeinf.udt_type_data_t.erase(): - - erase(self, it) -> udt_member_t - erase(self, first, last) -> udt_member_t - - -ida_typeinf.udt_type_data_t.extract(): - - extract(self) -> udt_member_t - - -ida_typeinf.udt_type_data_t.find(): - - find(self, x) -> udt_member_t - find(self, x) -> udt_member_t - - -ida_typeinf.udt_type_data_t.grow(): - - grow(self, x=udt_member_t()) - - -ida_typeinf.udt_type_data_t.has(): - - has(self, x) -> bool - - -ida_typeinf.udt_type_data_t.inject(): - - inject(self, s, len) - - -ida_typeinf.udt_type_data_t.insert(): - - insert(self, it, x) -> udt_member_t - - -ida_typeinf.udt_type_data_t.is_cppobj(): - - is_cppobj(self) -> bool - - -ida_typeinf.udt_type_data_t.is_last_baseclass(): - - is_last_baseclass(self, idx) -> bool - - -ida_typeinf.udt_type_data_t.is_msstruct(): - - is_msstruct(self) -> bool - - -ida_typeinf.udt_type_data_t.is_unaligned(): - - is_unaligned(self) -> bool - - -ida_typeinf.udt_type_data_t.is_union: - udt_type_data_t_is_union_get(self) -> bool - -ida_typeinf.udt_type_data_t.is_vftable(): - - is_vftable(self) -> bool - - -ida_typeinf.udt_type_data_t.pack: - udt_type_data_t_pack_get(self) -> uchar - -ida_typeinf.udt_type_data_t.pop_back(): - - pop_back(self) - - -ida_typeinf.udt_type_data_t.push_back(): - - push_back(self, x) - push_back(self) -> udt_member_t - - -ida_typeinf.udt_type_data_t.qclear(): - - qclear(self) - - -ida_typeinf.udt_type_data_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.udt_type_data_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.udt_type_data_t.sda: - udt_type_data_t_sda_get(self) -> uchar - -ida_typeinf.udt_type_data_t.size(): - - size(self) -> size_t - - -ida_typeinf.udt_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.udt_type_data_t.taudt_bits: - udt_type_data_t_taudt_bits_get(self) -> uint32 - -ida_typeinf.udt_type_data_t.total_size: - udt_type_data_t_total_size_get(self) -> size_t - -ida_typeinf.udt_type_data_t.truncate(): - - truncate(self) - - -ida_typeinf.udt_type_data_t.unpadded_size: - udt_type_data_t_unpadded_size_get(self) -> size_t - -class ida_typeinf.udtmembervec_t(): - - Proxy of C++ qvector<(udt_member_t)> class - - -ida_typeinf.udtmembervec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.udtmembervec_t.at(): - - at(self, _idx) -> udt_member_t - - -ida_typeinf.udtmembervec_t.begin(): - - begin(self) -> udt_member_t - begin(self) -> udt_member_t - - -ida_typeinf.udtmembervec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.udtmembervec_t.clear(): - - clear(self) - - -ida_typeinf.udtmembervec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.udtmembervec_t.end(): - - end(self) -> udt_member_t - end(self) -> udt_member_t - - -ida_typeinf.udtmembervec_t.erase(): - - erase(self, it) -> udt_member_t - erase(self, first, last) -> udt_member_t - - -ida_typeinf.udtmembervec_t.extract(): - - extract(self) -> udt_member_t - - -ida_typeinf.udtmembervec_t.find(): - - find(self, x) -> udt_member_t - find(self, x) -> udt_member_t - - -ida_typeinf.udtmembervec_t.grow(): - - grow(self, x=udt_member_t()) - - -ida_typeinf.udtmembervec_t.has(): - - has(self, x) -> bool - - -ida_typeinf.udtmembervec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.udtmembervec_t.insert(): - - insert(self, it, x) -> udt_member_t - - -ida_typeinf.udtmembervec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.udtmembervec_t.push_back(): - - push_back(self, x) - push_back(self) -> udt_member_t - - -ida_typeinf.udtmembervec_t.qclear(): - - qclear(self) - - -ida_typeinf.udtmembervec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.udtmembervec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.udtmembervec_t.size(): - - size(self) -> size_t - - -ida_typeinf.udtmembervec_t.swap(): - - swap(self, r) - - -ida_typeinf.udtmembervec_t.truncate(): - - truncate(self) - - -ida_typeinf.unpack_idcobj_from_bv(): - - unpack_idcobj_from_bv(obj, tif, bytes, pio_flags=0) -> error_t - - - Read a typed idc object from the byte vector. - - - @param obj (C++: idc_value_t *) - @param tif (C++: const tinfo_t &) - @param bytes (C++: const bytevec_t &) - @param pio_flags (C++: int) - - -ida_typeinf.unpack_idcobj_from_idb(): - - unpack_idcobj_from_idb(obj, tif, ea, off0, pio_flags=0) -> error_t - - - Collection of register objects. - - Read a typed idc object from the database - - @param obj (C++: idc_value_t *) - @param tif (C++: const tinfo_t &) - @param ea (C++: ea_t) - @param off0 (C++: const bytevec_t *) - @param pio_flags (C++: int) - - -ida_typeinf.unpack_object_from_bv(): - - unpack_object_from_bv(ti, py_type, py_fields, py_bytes, pio_flags=0) -> PyObject * - - - Unpacks a buffer into an object. - Returns the error_t returned by idaapi.pack_object_to_idb - @param ti: Type info. 'None' can be passed. - @param tp: type string - @param fields: fields string (may be empty or None) - @param bytes: the bytes to unpack - @param pio_flags: flags used while unpacking - @return: - - tuple(0, err) on failure - - tuple(1, obj) on success - - -ida_typeinf.unpack_object_from_idb(): - - unpack_object_from_idb(ti, py_type, py_fields, ea, pio_flags=0) -> PyObject * - - -class ida_typeinf.valstr_t(): - - Proxy of C++ valstr_t class - - -ida_typeinf.valstr_t.info: - valstr_t_info_get(self) -> valinfo_t * - -ida_typeinf.valstr_t.length: - valstr_t_length_get(self) -> size_t - -ida_typeinf.valstr_t.members: - valstr_t_members_get(self) -> valstrs_t - -ida_typeinf.valstr_t.oneline: - valstr_t_oneline_get(self) -> qstring * - -ida_typeinf.valstr_t.props: - valstr_t_props_get(self) -> int - -class ida_typeinf.valstrs_t(): - - Proxy of C++ valstrs_t class - - -ida_typeinf.valstrs_t.at(): - - at(self, _idx) -> valstr_t - - -ida_typeinf.valstrs_t.begin(): - - begin(self) -> valstr_t - begin(self) -> valstr_t - - -ida_typeinf.valstrs_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.valstrs_t.clear(): - - clear(self) - - -ida_typeinf.valstrs_t.empty(): - - empty(self) -> bool - - -ida_typeinf.valstrs_t.end(): - - end(self) -> valstr_t - end(self) -> valstr_t - - -ida_typeinf.valstrs_t.erase(): - - erase(self, it) -> valstr_t - erase(self, first, last) -> valstr_t - - -ida_typeinf.valstrs_t.extract(): - - extract(self) -> valstr_t - - -ida_typeinf.valstrs_t.grow(): - - grow(self, x=valstr_t()) - - -ida_typeinf.valstrs_t.inject(): - - inject(self, s, len) - - -ida_typeinf.valstrs_t.insert(): - - insert(self, it, x) -> valstr_t - - -ida_typeinf.valstrs_t.pop_back(): - - pop_back(self) - - -ida_typeinf.valstrs_t.push_back(): - - push_back(self, x) - push_back(self) -> valstr_t - - -ida_typeinf.valstrs_t.qclear(): - - qclear(self) - - -ida_typeinf.valstrs_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.valstrs_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.valstrs_t.size(): - - size(self) -> size_t - - -ida_typeinf.valstrs_t.swap(): - - swap(self, r) - - -ida_typeinf.valstrs_t.truncate(): - - truncate(self) - - -class ida_typeinf.valstrvec_t(): - - Proxy of C++ qvector<(valstr_t)> class - - -ida_typeinf.valstrvec_t.at(): - - at(self, _idx) -> valstr_t - - -ida_typeinf.valstrvec_t.begin(): - - begin(self) -> valstr_t - begin(self) -> valstr_t - - -ida_typeinf.valstrvec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.valstrvec_t.clear(): - - clear(self) - - -ida_typeinf.valstrvec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.valstrvec_t.end(): - - end(self) -> valstr_t - end(self) -> valstr_t - - -ida_typeinf.valstrvec_t.erase(): - - erase(self, it) -> valstr_t - erase(self, first, last) -> valstr_t - - -ida_typeinf.valstrvec_t.extract(): - - extract(self) -> valstr_t - - -ida_typeinf.valstrvec_t.grow(): - - grow(self, x=valstr_t()) - - -ida_typeinf.valstrvec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.valstrvec_t.insert(): - - insert(self, it, x) -> valstr_t - - -ida_typeinf.valstrvec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.valstrvec_t.push_back(): - - push_back(self, x) - push_back(self) -> valstr_t - - -ida_typeinf.valstrvec_t.qclear(): - - qclear(self) - - -ida_typeinf.valstrvec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.valstrvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.valstrvec_t.size(): - - size(self) -> size_t - - -ida_typeinf.valstrvec_t.swap(): - - swap(self, r) - - -ida_typeinf.valstrvec_t.truncate(): - - truncate(self) - - -ida_typeinf.verify_argloc(): - - verify_argloc(vloc, size, gaps) -> int - - - Verify 'argloc_t' . - - @param vloc (C++: const argloc_t &) - @param size: total size of the variable (C++: int) - @param gaps: if not NULL, specifies gaps in structure definition. - these gaps should not map to any argloc, but everything - else must be covered (C++: const rangeset_t *) - @return: 0 if ok, otherwise an interr code. - - -ida_typeinf.verify_tinfo(): - - verify_tinfo(typid) -> int - - -ida_typeinf.visit_subtypes(): - - visit_subtypes(visitor, out, tif, name, cmt) -> int - - -ida_typeinf.write_tinfo_bitfield_value(): - - write_tinfo_bitfield_value(typid, dst, v, bitoff) -> uint64 - - - -=== ida_typeinf EPYDOC INJECTIONS === -ida_typeinf.ADDTIL_ABORTED -""" -til was not loaded (incompatible til rejected by user) -""" - -ida_typeinf.ADDTIL_COMP -""" -ok, but til is not compatible with the current compiler -""" - -ida_typeinf.ADDTIL_DEFAULT -""" -default behavior -""" - -ida_typeinf.ADDTIL_FAILED -""" -something bad, the warning is displayed -""" - -ida_typeinf.ADDTIL_INCOMP -""" -load incompatible tils -""" - -ida_typeinf.ADDTIL_OK -""" -ok, til is loaded -""" - -ida_typeinf.ADDTIL_SILENT -""" -do not ask any questions -""" - -ida_typeinf.CC_ALLOW_ARGPERM -""" -disregard argument order? -""" - -ida_typeinf.CC_ALLOW_REGHOLES -""" -allow holes in register argument list? -""" - -ida_typeinf.CC_CDECL_OK -""" -can use __cdecl calling convention? -""" - -ida_typeinf.CC_HAS_ELLIPSIS -""" -function has a variable list of arguments? -""" - -ida_typeinf.FAH_BYTE -""" -function argument attribute header byte -""" - -ida_typeinf.FAI_ARRAY -""" -was initially an array see "__org_typedef" or "__org_arrdim" type -attributes to determine the original type -""" - -ida_typeinf.FAI_HIDDEN -""" -hidden argument -""" - -ida_typeinf.FAI_RETPTR -""" -pointer to return value. implies hidden -""" - -ida_typeinf.FAI_STRUCT -""" -was initially a structure -""" - -ida_typeinf.FTI_ALL -""" -all defined bits -""" - -ida_typeinf.FTI_ARGLOCS -""" -(stkargs and retloc too) - -info about argument locations has been calculated -""" - -ida_typeinf.FTI_CALLTYPE -""" -mask for FTI_*CALL -""" - -ida_typeinf.FTI_DEFCALL -""" -default call -""" - -ida_typeinf.FTI_FARCALL -""" -far call -""" - -ida_typeinf.FTI_HIGH -""" -high level prototype (with possibly hidden args) -""" - -ida_typeinf.FTI_INTCALL -""" -interrupt call -""" - -ida_typeinf.FTI_NEARCALL -""" -near call -""" - -ida_typeinf.FTI_NORET -""" -noreturn -""" - -ida_typeinf.FTI_PURE -""" -__pure -""" - -ida_typeinf.FTI_SPOILED -""" -information about spoiled registers is present -""" - -ida_typeinf.FTI_STATIC -""" -static -""" - -ida_typeinf.FTI_VIRTUAL -""" -virtual -""" - -ida_typeinf.GUESS_FUNC_FAILED -""" -couldn't guess the function type -""" - -ida_typeinf.GUESS_FUNC_OK -""" -ok, some non-trivial information is gathered -""" - -ida_typeinf.GUESS_FUNC_TRIVIAL -""" -the function type doesn't have interesting info -""" - -ida_typeinf.HTI_CPP -""" -C++ mode (not implemented) -""" - -ida_typeinf.HTI_DCL -""" -don't complain about redeclarations -""" - -ida_typeinf.HTI_EXT -""" -debug: print external representation of types -""" - -ida_typeinf.HTI_FIL -""" -otherwise "input" contains a C declaration - -"input" is file name, -""" - -ida_typeinf.HTI_HIGH -""" -(with hidden args, etc) - -assume high level prototypes -""" - -ida_typeinf.HTI_INT -""" -debug: print internal representation of types -""" - -ida_typeinf.HTI_LEX -""" -debug: print tokens -""" - -ida_typeinf.HTI_LOWER -""" -lower the function prototypes -""" - -ida_typeinf.HTI_MAC -""" -define macros from the base tils -""" - -ida_typeinf.HTI_NDC -""" -don't decorate names -""" - -ida_typeinf.HTI_NER -""" -ignore all errors but display them -""" - -ida_typeinf.HTI_NWR -""" -no warning messages -""" - -ida_typeinf.HTI_PAK -""" -explicit structure pack value (#pragma pack) -""" - -ida_typeinf.HTI_PAK1 -""" -#pragma pack(1) -""" - -ida_typeinf.HTI_PAK16 -""" -#pragma pack(16) -""" - -ida_typeinf.HTI_PAK2 -""" -#pragma pack(2) -""" - -ida_typeinf.HTI_PAK4 -""" -#pragma pack(4) -""" - -ida_typeinf.HTI_PAK8 -""" -#pragma pack(8) -""" - -ida_typeinf.HTI_PAKDEF -""" -default pack value -""" - -ida_typeinf.HTI_PAK_SHIFT -""" -shift for 'HTI_PAK' . This field should be used if you want to -remember an explicit pack value for each structure/union type. See -'HTI_PAK' ... definitions -""" - -ida_typeinf.HTI_RAWARGS -""" -leave argument names unchanged (do not remove underscores) -""" - -ida_typeinf.HTI_TST -""" -test mode: discard the result -""" - -ida_typeinf.HTI_UNP -""" -debug: check the result by unpacking it -""" - -ida_typeinf.IMPTYPE_LOCAL -""" -the type is local, the struct/enum won't be marked as til type. there -is no need to specify this bit if til==idati, the kernel will set it -automatically -""" - -ida_typeinf.IMPTYPE_OVERRIDE -""" -override existing type -""" - -ida_typeinf.IMPTYPE_VERBOSE -""" -more verbose output (dialog boxes may appear) -""" - -ida_typeinf.MAX_FUNC_ARGS -""" -max number of function arguments -""" - -ida_typeinf.NTF_64BIT -""" -value is 64bit -""" - -ida_typeinf.NTF_CHKSYNC -""" -(set_numbered_type, set_named_type) - -check that synchronization to IDB passed OK -""" - -ida_typeinf.NTF_FIXNAME -""" -(set_named_type, set_numbered_type only) - -force-validate the name of the type when setting -""" - -ida_typeinf.NTF_IDBENC -""" -the name is given in the IDB encoding; non-ASCII bytes will be decoded -accordingly (set_named_type, set_numbered_type only) -""" - -ida_typeinf.NTF_NOBASE -""" -don't inspect base tils (for get_named_type) -""" - -ida_typeinf.NTF_NOCUR -""" -don't inspect current til file (for get_named_type) -""" - -ida_typeinf.NTF_REPLACE -""" -replace original type (for set_named_type) -""" - -ida_typeinf.NTF_SYMM -""" -only one of 'NTF_TYPE' and 'NTF_SYMU' , 'NTF_SYMM' can be used - -symbol, name is mangled ('_func') -""" - -ida_typeinf.NTF_SYMU -""" -symbol, name is unmangled ('func') -""" - -ida_typeinf.NTF_TYPE -""" -type name -""" - -ida_typeinf.NTF_UMANGLED -""" -name is unmangled (don't use this flag) -""" - -ida_typeinf.PCN_CHR -""" -character -""" - -ida_typeinf.PCN_DEC -""" -decimal -""" - -ida_typeinf.PCN_DECSEXT -""" -automatically extend sign of signed decimal numbers -""" - -ida_typeinf.PCN_HEX -""" -hexadecimal -""" - -ida_typeinf.PCN_LZHEX -""" -print leading zeroes for hexdecimal number -""" - -ida_typeinf.PCN_NEGSIGN -""" -print negated value (-N) for negative numbers -""" - -ida_typeinf.PCN_OCT -""" -octal -""" - -ida_typeinf.PCN_RADIX -""" -number base to use -""" - -ida_typeinf.PCN_UNSIGNED -""" -add 'u' suffix -""" - -ida_typeinf.PDF_DEF_BASE -""" -Include base types: __int8, __int16, etc.. -""" - -ida_typeinf.PDF_DEF_FWD -""" -Allow forward declarations. -""" - -ida_typeinf.PDF_HEADER_CMT -""" -Prepend output with a descriptive comment. -""" - -ida_typeinf.PDF_INCL_DEPS -""" -Include all type dependencies. -""" - -ida_typeinf.PIO_IGNORE_PTRS -""" -do not follow pointers -""" - -ida_typeinf.PIO_NOATTR_FAIL -""" -missing attributes are not ok -""" - -ida_typeinf.PRALOC_STKOFF -""" -print stack offsets -""" - -ida_typeinf.PRALOC_VERIFY -""" -interr if illegal argloc -""" - -ida_typeinf.PRTYPE_1LINE -""" -print to one line -""" - -ida_typeinf.PRTYPE_CPP -""" -use c++ name (only for 'print_type()' ) -""" - -ida_typeinf.PRTYPE_DEF -""" - 'tinfo_t' : print definition, if available -""" - -ida_typeinf.PRTYPE_MULTI -""" -print to many lines -""" - -ida_typeinf.PRTYPE_NOARGS -""" - 'tinfo_t' : do not print function argument names -""" - -ida_typeinf.PRTYPE_NOARRS -""" - 'tinfo_t' : print arguments with 'FAI_ARRAY' as pointers -""" - -ida_typeinf.PRTYPE_NORES -""" - 'tinfo_t' : never resolve types (meaningful with PRTYPE_DEF) -""" - -ida_typeinf.PRTYPE_PRAGMA -""" -print pragmas for alignment -""" - -ida_typeinf.PRTYPE_RESTORE -""" - 'tinfo_t' : print restored types for 'FAI_ARRAY' and 'FAI_STRUCT' -""" - -ida_typeinf.PRTYPE_SEMI -""" -append ; to the end -""" - -ida_typeinf.PRTYPE_TYPE -""" -print type declaration (not variable declaration) -""" - -ida_typeinf.PT_HIGH -""" -(with hidden args, etc) - -assume high level prototypes -""" - -ida_typeinf.PT_LOWER -""" -lower the function prototypes -""" - -ida_typeinf.PT_NDC -""" -don't decorate names -""" - -ida_typeinf.PT_PACKMASK -""" -mask for pack alignment values -""" - -ida_typeinf.PT_RAWARGS -""" -leave argument names unchanged (do not remove underscores) -""" - -ida_typeinf.PT_REPLACE -""" -replace the old type (used in idc) -""" - -ida_typeinf.PT_SIL -""" -silent, no messages -""" - -ida_typeinf.PT_TYP -""" -return declared type information -""" - -ida_typeinf.PT_VAR -""" -return declared object information -""" - -ida_typeinf.RESERVED_BYTE -""" -multifunctional purpose -""" - -ida_typeinf.SETCOMP_BY_USER -""" -invoked by user, cannot be replaced by module/loader -""" - -ida_typeinf.SETCOMP_ONLY_ABI -""" -ignore cc field complete, use only abiname -""" - -ida_typeinf.SETCOMP_ONLY_ID -""" -cc has only 'id' field the rest will be set to defaults corresponding -to the program bitness -""" - -ida_typeinf.SETCOMP_OVERRIDE -""" -may override old compiler info -""" - -ida_typeinf.STRMEM_ANON -""" -can be combined with 'STRMEM_NAME' : look inside anonymous members -too. -""" - -ida_typeinf.STRMEM_AUTO -""" -get member by offset if struct, or get member by index if union - nb: -union: index is stored in the udm->offset field!nb: struct: offset is -in bytes (not in bits)! -""" - -ida_typeinf.STRMEM_CASTABLE_TO -""" -can be combined with 'STRMEM_TYPE' : member type must be castable to -the specified type -""" - -ida_typeinf.STRMEM_INDEX -""" -get member by number- in: udm->offset - is a member number -""" - -ida_typeinf.STRMEM_MAXS -""" -get biggest member by size. -""" - -ida_typeinf.STRMEM_MINS -""" -get smallest member by size. -""" - -ida_typeinf.STRMEM_NAME -""" -get member by name- in: udm->name - the desired member name. -""" - -ida_typeinf.STRMEM_OFFSET -""" -get member by offset- in: udm->offset - is a member offset in bits -""" - -ida_typeinf.STRMEM_SIZE -""" -get member by size.- in: udm->size - the desired member size. -""" - -ida_typeinf.STRMEM_SKIP_EMPTY -""" -can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' skip empty -members (i.e. having zero size) only last empty member can be returned -""" - -ida_typeinf.STRMEM_TYPE -""" -get member by type. - in: udm->type - the desired member type. member -types are compared with tinfo_t::equals_to() -""" - -ida_typeinf.STRMEM_VFTABLE -""" -can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' get vftable -instead of the base class -""" - -ida_typeinf.SUDT_ALIGN -""" -to match the offsets and size info - -recalculate field alignments, struct packing, etc -""" - -ida_typeinf.SUDT_CONST -""" -only for serialize_udt: make type const -""" - -ida_typeinf.SUDT_FAST -""" -serialize without verifying offsets and alignments -""" - -ida_typeinf.SUDT_GAPS -""" -allow to fill gaps with additional members (_BYTE[]) -""" - -ida_typeinf.SUDT_SORT -""" -fields are not sorted by offset, sort them first -""" - -ida_typeinf.SUDT_TRUNC -""" -serialize: truncate useless strings from fields, fldcmts -""" - -ida_typeinf.SUDT_UNEX -""" -references to nonexistent member types are acceptable in this case it -is better to set the corresponding 'udt_member_t::fda' field to the -type alignment. if this field is not set, ida will try to guess the -alignment. -""" - -ida_typeinf.SUDT_VOLATILE -""" -only for serialize_udt: make type volatile -""" - -ida_typeinf.TAENUM_64BIT -""" -enum: store 64-bit values -""" - -ida_typeinf.TAENUM_SIGNED -""" -enum: signed -""" - -ida_typeinf.TAENUM_UNSIGNED -""" -enum: unsigned -""" - -ida_typeinf.TAFLD_BASECLASS -""" -field: do not include but inherit from the current field -""" - -ida_typeinf.TAFLD_UNALIGNED -""" -field: unaligned field -""" - -ida_typeinf.TAFLD_VFTABLE -""" -field: ptr to virtual function table -""" - -ida_typeinf.TAFLD_VIRTBASE -""" -field: virtual base (not supported yet) -""" - -ida_typeinf.TAH_ALL -""" -all defined bits -""" - -ida_typeinf.TAH_BYTE -""" -type attribute header byte -""" - -ida_typeinf.TAH_HASATTRS -""" -has extended attributes -""" - -ida_typeinf.TAPTR_PTR32 -""" -ptr: __ptr32 -""" - -ida_typeinf.TAPTR_PTR64 -""" -ptr: __ptr64 -""" - -ida_typeinf.TAPTR_RESTRICT -""" -ptr: __restrict -""" - -ida_typeinf.TAPTR_SHIFTED -""" -ptr: __shifted(parent_struct, delta) -""" - -ida_typeinf.TAUDT_CPPOBJ -""" -struct: a c++ object, not simple pod type -""" - -ida_typeinf.TAUDT_MSSTRUCT -""" -struct: gcc msstruct attribute -""" - -ida_typeinf.TAUDT_UNALIGNED -""" -struct: unaligned struct -""" - -ida_typeinf.TAUDT_VFTABLE -""" -struct: is virtual function table -""" - -ida_typeinf.TA_FORMAT -""" -info about the 'format' argument 3 times pack_dd: 'format_functype_t' -, argument number of 'format', argument number of '...' -""" - -ida_typeinf.TA_ORG_ARRDIM -""" -the original array dimension (pack_dd) -""" - -ida_typeinf.TA_ORG_TYPEDEF -""" -the original typedef name (simple string) -""" - -ida_typeinf.TCMP_ANYBASE -""" -accept any base class when casting -""" - -ida_typeinf.TCMP_AUTOCAST -""" -can t1 be cast into t2 automatically? -""" - -ida_typeinf.TCMP_CALL -""" -can t1 be called with t2 type? -""" - -ida_typeinf.TCMP_DECL -""" -compare declarations without resolving them -""" - -ida_typeinf.TCMP_DELPTR -""" -remove pointer from types before comparing -""" - -ida_typeinf.TCMP_EQUAL -""" -are types equal? -""" - -ida_typeinf.TCMP_IGNMODS -""" -ignore const/volatile modifiers -""" - -ida_typeinf.TCMP_MANCAST -""" -can t1 be cast into t2 manually? -""" - -ida_typeinf.TCMP_SKIPTHIS -""" -skip the first function argument in comparison -""" - -ida_typeinf.TIL_ADD_ALREADY -""" -the base til was already added -""" - -ida_typeinf.TIL_ADD_FAILED -""" -see errbuf -""" - -ida_typeinf.TIL_ADD_OK -""" -some tils were added -""" - -ida_typeinf.TIL_ALI -""" -type aliases are present (this bit is used only on the disk) -""" - -ida_typeinf.TIL_ESI -""" -extended sizeof info (short, long, longlong) -""" - -ida_typeinf.TIL_MAC -""" -til has macro table -""" - -ida_typeinf.TIL_MOD -""" -til has been modified, should be saved -""" - -ida_typeinf.TIL_ORD -""" -type ordinal numbers are present -""" - -ida_typeinf.TIL_SLD -""" -sizeof(long double) -""" - -ida_typeinf.TIL_STM -""" -til has extra streams -""" - -ida_typeinf.TIL_UNI -""" -universal til for any compiler -""" - -ida_typeinf.TIL_ZIP -""" -pack buckets using zip -""" - -ida_typeinf.TINFO_DEFINITE -""" -this is a definite type -""" - -ida_typeinf.TINFO_DELAYFUNC -""" -if type is a function and no function exists at ea, schedule its -creation and argument renaming to auto-analysis otherwise try to -create it immediately -""" - -ida_typeinf.TINFO_GUESSED -""" -this is a guessed type -""" - -ida_typeinf.TINFO_STRICT -""" -never convert given type to another one before applying -""" - -ida_typeinf.TVIS_CMT -""" -new comment is present -""" - -ida_typeinf.TVIS_NAME -""" -new name is present -""" - -ida_typeinf.TVIS_TYPE -""" -new type info is present -""" - -ida_typeinf.TVST_DEF -""" -visit type definition (meaningful for typerefs) -""" - -ida_typeinf.TVST_PRUNE -""" -don't visit children of current type -""" - -ida_typeinf.VALSTR_OPEN -""" -printed opening curly brace '{' -""" -=== ida_typeinf EPYDOC INJECTIONS END === -ida_ua.calc_dataseg(): - - calc_dataseg(insn, n=-1, rgnum=-1) -> ea_t - - - Get data segment for the instruction operand. 'opnum' and 'rgnum' are - meaningful only if the processor has segment registers. - - @param insn (C++: const insn_t &) - @param n (C++: int) - @param rgnum (C++: int) - - -ida_ua.can_decode(): - - can_decode(ea) -> bool - - - Can the bytes at address 'ea' be decoded as instruction? - - @param ea: linear address (C++: ea_t) - @return: whether or not the contents at that address could be a valid - instruction - - -ida_ua.construct_macro(): - - construct_macro(insn, enable, build_macro) -> bool - - - See ua.hpp's construct_macro(). - - -ida_ua.create_insn(): - - create_insn(ea, out=None) -> int - - - Create an instruction at the specified address. This function checks - if an instruction is present at the specified address and will try to - create one if there is none. It will fail if there is a data item or - other items hindering the creation of the new instruction. This - function will also fill the 'out' structure. - - @param ea: linear address (C++: ea_t) - @param out: the resulting instruction (C++: insn_t *) - @return: the length of the instruction or 0 - - -ida_ua.create_outctx(): - - create_outctx(ea, F=0, suspop=0) -> outctx_base_t - - - Create a new output context. To delete it, just use "delete pctx" - - @param ea (C++: ea_t) - @param F (C++: flags_t) - @param suspop (C++: int) - - -ida_ua.decode_insn(): - - decode_insn(out, ea) -> int - - - Analyze the specified address and fill 'out'. This function does not - modify the database. It just tries to interpret the specified address - as an instruction and fills the 'out' structure. - - @param out: the resulting instruction (C++: insn_t *) - @param ea: linear address (C++: ea_t) - @return: the length of the (possible) instruction or 0 - - -ida_ua.decode_preceding_insn(): - - decode_preceding_insn(out, ea) -> PyObject * - - - Decodes the preceding instruction. Please check ua.hpp / decode_preceding_insn() - @param ea: current ea - @param out: instruction storage - @return: tuple(preceeding_ea or BADADDR, farref = Boolean) - - -ida_ua.decode_prev_insn(): - - decode_prev_insn(out, ea) -> ea_t - - - Decode previous instruction if it exists, fill 'out'. - - @param out: the resulting instruction (C++: insn_t *) - @param ea: the address to decode the previous instruction from (C++: - ea_t) - @return: the previous instruction address ( BADADDR -no such insn) - - -ida_ua.get_dtype_by_size(): - - get_dtype_by_size(size) -> int - - - Get 'op_t::dtype' from size. - - - @param size (C++: asize_t) - - -ida_ua.get_dtype_flag(): - - get_dtype_flag(dtype) -> flags_t - - - Get flags for 'op_t::dtype' field. - - - @param dtype (C++: op_dtype_t) - - -ida_ua.get_dtype_size(): - - get_dtype_size(dtype) -> size_t - - - Get size of opt_::dtype field. - - - @param dtype (C++: op_dtype_t) - - -ida_ua.get_immvals(): - - get_immvals(ea, n, F=0) -> PyObject * - - - Get immediate values at the specified address. This function decodes - instruction at the specified address or inspects the data item. It - finds immediate values and copies them to 'out'. This function will - store the original value of the operands in 'out', unless the last - bits of 'F' are "...0 11111111", in which case the transformed values - (as needed for printing) will be stored instead. - - @param ea: address to analyze (C++: ea_t) - @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands - (C++: int) - @param F: flags for the specified address (C++: flags_t) - @return: number of immediate values (0..2* UA_MAXOP ) - - -ida_ua.get_lookback(): - - get_lookback() -> int - - - Number of instructions to look back. This variable is not used by the - kernel. Its value may be specified in ida.cfg: LOOKBACK = . - IDP may use it as you like it. (TMS module uses it) - - -ida_ua.get_printable_immvals(): - - get_printable_immvals(ea, n, F=0) -> PyObject * - - - Get immediate ready-to-print values at the specified address - - @param ea: address to analyze (C++: ea_t) - @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands - (C++: int) - @param F: flags for the specified address (C++: flags_t) - @return: number of immediate values (0..2* UA_MAXOP ) - - -ida_ua.guess_table_address(): - - guess_table_address(insn) -> ea_t - - - Guess the jump table address (ibm pc specific) - - - @param insn (C++: const insn_t &) - - -ida_ua.guess_table_size(): - - guess_table_size(insn, jump_table) -> asize_t - - - Guess the jump table size. - - - @param insn (C++: const insn_t &) - @param jump_table (C++: ea_t) - - -ida_ua.insn_add_cref(): - - insn_add_cref(insn, to, opoff, type) - - -ida_ua.insn_add_dref(): - - insn_add_dref(insn, to, opoff, type) - - -ida_ua.insn_add_off_drefs(): - - insn_add_off_drefs(insn, x, type, outf) -> ea_t - - -ida_ua.insn_create_stkvar(): - - insn_create_stkvar(insn, x, v, flags) -> bool - - -class ida_ua.insn_t(): - - Proxy of C++ insn_t class - - -ida_ua.insn_t.add_cref(): - - add_cref(self, to, opoff, type) - - -ida_ua.insn_t.add_dref(): - - add_dref(self, to, opoff, type) - - -ida_ua.insn_t.add_off_drefs(): - - add_off_drefs(self, x, type, outf) -> ea_t - - -ida_ua.insn_t.assign(): - - assign(self, other) - - -ida_ua.insn_t.auxpref: - - __get_auxpref__(self) -> uint16 - - -ida_ua.insn_t.create_op_data(): - - create_op_data(self, ea_, opoff, dtype) -> bool - create_op_data(self, ea_, op) -> bool - - -ida_ua.insn_t.create_stkvar(): - - create_stkvar(self, x, v, flags_) -> bool - - -ida_ua.insn_t.cs: - insn_t_cs_get(self) -> ea_t - -ida_ua.insn_t.ea: - insn_t_ea_get(self) -> ea_t - -ida_ua.insn_t.flags: - insn_t_flags_get(self) -> int16 - -ida_ua.insn_t.get_canon_feature(): - - get_canon_feature(self) -> uint32 - - -ida_ua.insn_t.get_canon_mnem(): - - get_canon_mnem(self) -> char const * - - -ida_ua.insn_t.get_next_byte(): - - get_next_byte(self) -> uint8 - - -ida_ua.insn_t.get_next_dword(): - - get_next_dword(self) -> uint32 - - -ida_ua.insn_t.get_next_qword(): - - get_next_qword(self) -> uint64 - - -ida_ua.insn_t.get_next_word(): - - get_next_word(self) -> uint16 - - -ida_ua.insn_t.insnpref: - insn_t_insnpref_get(self) -> char - -ida_ua.insn_t.ip: - insn_t_ip_get(self) -> ea_t - -ida_ua.insn_t.is_64bit(): - - is_64bit(self) -> bool - - -ida_ua.insn_t.is_canon_insn(): - - is_canon_insn(self) -> bool - - -ida_ua.insn_t.is_macro(): - - is_macro(self) -> bool - - -ida_ua.insn_t.itype: - insn_t_itype_get(self) -> uint16 - -ida_ua.insn_t.ops: - - __get_ops__(self) -> operands_array - - -ida_ua.insn_t.segpref: - insn_t_segpref_get(self) -> char - -ida_ua.insn_t.size: - insn_t_size_get(self) -> uint16 - -ida_ua.insn_t__from_ptrval__(): - - insn_t__from_ptrval__(ptrval) -> insn_t - - -ida_ua.map_code_ea(): - - map_code_ea(insn, addr, opnum) -> ea_t - map_code_ea(insn, op) -> ea_t - - - Map a code address. This function takes into account the segment - translations. - - @param insn: the current instruction (C++: const insn_t &) - @param addr: the referenced address to map (C++: ea_t) - @param opnum: operand number (C++: int) - - -ida_ua.map_data_ea(): - - map_data_ea(insn, addr, opnum=-1) -> ea_t - map_data_ea(insn, op) -> ea_t - - - Map a data address. - - @param insn: the current instruction (C++: const insn_t &) - @param addr: the referenced address to map (C++: ea_t) - @param opnum: operand number (C++: int) - - -ida_ua.map_ea(): - - map_ea(insn, op, iscode) -> ea_t - map_ea(insn, addr, opnum, iscode) -> ea_t - - -class ida_ua.op_t(): - - Proxy of C++ op_t class - - -ida_ua.op_t.addr: - - __get_addr__(self) -> ea_t - - -ida_ua.op_t.assign(): - - assign(self, other) - - -ida_ua.op_t.clr_shown(): - - clr_shown(self) - - -ida_ua.op_t.dtype: - op_t_dtype_get(self) -> op_dtype_t - -ida_ua.op_t.flags: - op_t_flags_get(self) -> uchar - -ida_ua.op_t.has_reg(): - - Checks if the operand accesses the given processor register - - -ida_ua.op_t.is_imm(): - - is_imm(self, v) -> bool - - -ida_ua.op_t.is_reg(): - - is_reg(self, r) -> bool - - -ida_ua.op_t.n: - op_t_n_get(self) -> uchar - -ida_ua.op_t.offb: - op_t_offb_get(self) -> char - -ida_ua.op_t.offo: - op_t_offo_get(self) -> char - -ida_ua.op_t.phrase: - - __get_reg_phrase__(self) -> uint16 - - -ida_ua.op_t.reg: - - __get_reg_phrase__(self) -> uint16 - - -ida_ua.op_t.set_shown(): - - set_shown(self) - - -ida_ua.op_t.shown(): - - shown(self) -> bool - - -ida_ua.op_t.specflag1: - op_t_specflag1_get(self) -> char - -ida_ua.op_t.specflag2: - op_t_specflag2_get(self) -> char - -ida_ua.op_t.specflag3: - op_t_specflag3_get(self) -> char - -ida_ua.op_t.specflag4: - op_t_specflag4_get(self) -> char - -ida_ua.op_t.specval: - - __get_specval__(self) -> ea_t - - -ida_ua.op_t.type: - op_t_type_get(self) -> optype_t - -ida_ua.op_t.value: - - __get_value__(self) -> ea_t - - -ida_ua.op_t__from_ptrval__(): - - op_t__from_ptrval__(ptrval) -> op_t - - -class ida_ua.operands_array(): - - Proxy of C++ wrapped_array_t<(op_t,8)> class - - -ida_ua.operands_array.data: - operands_array_data_get(self) -> op_t (&)[8] - -class ida_ua.outctx_base_t(): - - Proxy of C++ outctx_base_t class - - -ida_ua.outctx_base_t.close_comment(): - - close_comment(self) - - -ida_ua.outctx_base_t.clr_gen_label(): - - clr_gen_label(self) - - -ida_ua.outctx_base_t.default_lnnum: - outctx_base_t_default_lnnum_get(self) -> int - -ida_ua.outctx_base_t.display_voids(): - - display_voids(self) -> bool - - -ida_ua.outctx_base_t.flush_buf(): - - flush_buf(self, buf, indent=-1) -> bool - - -ida_ua.outctx_base_t.flush_outbuf(): - - flush_outbuf(self, indent=-1) -> bool - - -ida_ua.outctx_base_t.forbid_annotations(): - - forbid_annotations(self) -> int - - -ida_ua.outctx_base_t.force_code(): - - force_code(self) -> bool - - -ida_ua.outctx_base_t.gen_block_cmt(): - - gen_block_cmt(self, cmt, color) -> bool - - -ida_ua.outctx_base_t.gen_border_line(): - - gen_border_line(self, solid=False) -> bool - - -ida_ua.outctx_base_t.gen_cmt_line(): - - gen_cmt_line(self, format) -> bool - - -ida_ua.outctx_base_t.gen_collapsed_line(): - - gen_collapsed_line(self, format) -> bool - - -ida_ua.outctx_base_t.gen_empty_line(): - - gen_empty_line(self) -> bool - - -ida_ua.outctx_base_t.gen_empty_line_without_annotations(): - - gen_empty_line_without_annotations(self) - - -ida_ua.outctx_base_t.gen_printf(): - - gen_printf(self, indent, format) -> bool - - -ida_ua.outctx_base_t.gen_xref_lines(): - - gen_xref_lines(self) -> bool - - -ida_ua.outctx_base_t.get_stkvar(): - - get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * - - -ida_ua.outctx_base_t.init_lines_array(): - - init_lines_array(self, answers, maxsize) - - -ida_ua.outctx_base_t.insn_ea: - outctx_base_t_insn_ea_get(self) -> ea_t - -ida_ua.outctx_base_t.multiline(): - - multiline(self) -> bool - - -ida_ua.outctx_base_t.only_main_line(): - - only_main_line(self) -> bool - - -ida_ua.outctx_base_t.out_addr_tag(): - - out_addr_tag(self, ea) - - -ida_ua.outctx_base_t.out_btoa(): - - out_btoa(self, Word, radix=0) - - -ida_ua.outctx_base_t.out_char(): - - out_char(self, c) - - -ida_ua.outctx_base_t.out_chars(): - - out_chars(self, c, n) - - -ida_ua.outctx_base_t.out_colored_register_line(): - - out_colored_register_line(self, str) - - -ida_ua.outctx_base_t.out_keyword(): - - out_keyword(self, str) - - -ida_ua.outctx_base_t.out_line(): - - out_line(self, str, color=0) - - -ida_ua.outctx_base_t.out_long(): - - out_long(self, v, radix) - - -ida_ua.outctx_base_t.out_name_expr(): - - out_name_expr(self, x, ea, off=BADADDR) -> bool - - -ida_ua.outctx_base_t.out_printf(): - - out_printf(self, format) - - -ida_ua.outctx_base_t.out_register(): - - out_register(self, str) - - -ida_ua.outctx_base_t.out_spaces(): - - out_spaces(self, len) - - -ida_ua.outctx_base_t.out_symbol(): - - out_symbol(self, c) - - -ida_ua.outctx_base_t.out_tagoff(): - - out_tagoff(self, tag) - - -ida_ua.outctx_base_t.out_tagon(): - - out_tagon(self, tag) - - -ida_ua.outctx_base_t.out_value(): - - out_value(self, x, outf=0) -> flags_t - - -ida_ua.outctx_base_t.outbuf: - outctx_base_t_outbuf_get(self) -> qstring * - -ida_ua.outctx_base_t.print_label_now(): - - print_label_now(self) -> bool - - -ida_ua.outctx_base_t.restore_ctxflags(): - - restore_ctxflags(self, saved_flags) - - -ida_ua.outctx_base_t.retrieve_cmt(): - - retrieve_cmt(self) -> ssize_t - - -ida_ua.outctx_base_t.retrieve_name(): - - retrieve_name(self, arg2, arg3) -> ssize_t - - -ida_ua.outctx_base_t.set_comment_addr(): - - set_comment_addr(self, ea) - - -ida_ua.outctx_base_t.set_dlbind_opnd(): - - set_dlbind_opnd(self) - - -ida_ua.outctx_base_t.set_gen_cmt(): - - set_gen_cmt(self, on=True) - - -ida_ua.outctx_base_t.set_gen_demangled_label(): - - set_gen_demangled_label(self) - - -ida_ua.outctx_base_t.set_gen_label(): - - set_gen_label(self) - - -ida_ua.outctx_base_t.set_gen_xrefs(): - - set_gen_xrefs(self, on=True) - - -ida_ua.outctx_base_t.setup_outctx(): - - setup_outctx(self, prefix, makeline_flags) - - -ida_ua.outctx_base_t.stack_view(): - - stack_view(self) -> bool - - -ida_ua.outctx_base_t.term_outctx(): - - term_outctx(self, prefix=None) -> int - - -ida_ua.outctx_base_t__from_ptrval__(): - - outctx_base_t__from_ptrval__(ptrval) -> outctx_base_t - - -class ida_ua.outctx_t(): - - Proxy of C++ outctx_t class - - -ida_ua.outctx_t.bin_ea: - outctx_t_bin_ea_get(self) -> ea_t - -ida_ua.outctx_t.bin_state: - outctx_t_bin_state_get(self) -> char - -ida_ua.outctx_t.bin_width: - outctx_t_bin_width_get(self) -> int - -ida_ua.outctx_t.close_comment(): - - close_comment(self) - - -ida_ua.outctx_t.clr_gen_label(): - - clr_gen_label(self) - - -ida_ua.outctx_t.curlabel: - outctx_t_curlabel_get(self) -> qstring * - -ida_ua.outctx_t.default_lnnum: - outctx_base_t_default_lnnum_get(self) -> int - -ida_ua.outctx_t.display_voids(): - - display_voids(self) -> bool - - -ida_ua.outctx_t.flush_buf(): - - flush_buf(self, buf, indent=-1) -> bool - - -ida_ua.outctx_t.flush_outbuf(): - - flush_outbuf(self, indent=-1) -> bool - - -ida_ua.outctx_t.forbid_annotations(): - - forbid_annotations(self) -> int - - -ida_ua.outctx_t.force_code(): - - force_code(self) -> bool - - -ida_ua.outctx_t.gen_block_cmt(): - - gen_block_cmt(self, cmt, color) -> bool - - -ida_ua.outctx_t.gen_border_line(): - - gen_border_line(self, solid=False) -> bool - - -ida_ua.outctx_t.gen_cmt_line(): - - gen_cmt_line(self, format) -> bool - - -ida_ua.outctx_t.gen_collapsed_line(): - - gen_collapsed_line(self, format) -> bool - - -ida_ua.outctx_t.gen_empty_line(): - - gen_empty_line(self) -> bool - - -ida_ua.outctx_t.gen_empty_line_without_annotations(): - - gen_empty_line_without_annotations(self) - - -ida_ua.outctx_t.gen_func_footer(): - - gen_func_footer(self, pfn) - - -ida_ua.outctx_t.gen_func_header(): - - gen_func_header(self, pfn) - - -ida_ua.outctx_t.gen_header(): - - gen_header(self, flags=((1 << 0)|(1 << 1)), proc_name=None, proc_flavour=None) - - -ida_ua.outctx_t.gen_header_extra(): - - gen_header_extra(self) - - -ida_ua.outctx_t.gen_printf(): - - gen_printf(self, indent, format) -> bool - - -ida_ua.outctx_t.gen_xref_lines(): - - gen_xref_lines(self) -> bool - - -ida_ua.outctx_t.get_stkvar(): - - get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * - - -ida_ua.outctx_t.gl_bpsize: - outctx_t_gl_bpsize_get(self) -> int - -ida_ua.outctx_t.init_lines_array(): - - init_lines_array(self, answers, maxsize) - - -ida_ua.outctx_t.insn: - outctx_t_insn_get(self) -> insn_t - -ida_ua.outctx_t.insn_ea: - outctx_base_t_insn_ea_get(self) -> ea_t - -ida_ua.outctx_t.multiline(): - - multiline(self) -> bool - - -ida_ua.outctx_t.only_main_line(): - - only_main_line(self) -> bool - - -ida_ua.outctx_t.out_addr_tag(): - - out_addr_tag(self, ea) - - -ida_ua.outctx_t.out_btoa(): - - out_btoa(self, Word, radix=0) - - -ida_ua.outctx_t.out_char(): - - out_char(self, c) - - -ida_ua.outctx_t.out_chars(): - - out_chars(self, c, n) - - -ida_ua.outctx_t.out_colored_register_line(): - - out_colored_register_line(self, str) - - -ida_ua.outctx_t.out_custom_mnem(): - - out_custom_mnem(self, mnem, width=8, postfix=None) - - -ida_ua.outctx_t.out_data(): - - out_data(self, analyze_only) - - -ida_ua.outctx_t.out_immchar_cmts(): - - out_immchar_cmts(self) - - -ida_ua.outctx_t.out_keyword(): - - out_keyword(self, str) - - -ida_ua.outctx_t.out_line(): - - out_line(self, str, color=0) - - -ida_ua.outctx_t.out_long(): - - out_long(self, v, radix) - - -ida_ua.outctx_t.out_mnem(): - - out_mnem(self, width=8, postfix=None) - - -ida_ua.outctx_t.out_mnemonic(): - - out_mnemonic(self) - - -ida_ua.outctx_t.out_name_expr(): - - out_name_expr(self, x, ea, off=BADADDR) -> bool - - -ida_ua.outctx_t.out_one_operand(): - - out_one_operand(self, n) -> bool - - -ida_ua.outctx_t.out_printf(): - - out_printf(self, format) - - -ida_ua.outctx_t.out_register(): - - out_register(self, str) - - -ida_ua.outctx_t.out_spaces(): - - out_spaces(self, len) - - -ida_ua.outctx_t.out_specea(): - - out_specea(self, segtype) -> bool - - -ida_ua.outctx_t.out_symbol(): - - out_symbol(self, c) - - -ida_ua.outctx_t.out_tagoff(): - - out_tagoff(self, tag) - - -ida_ua.outctx_t.out_tagon(): - - out_tagon(self, tag) - - -ida_ua.outctx_t.out_value(): - - out_value(self, x, outf=0) -> flags_t - - -ida_ua.outctx_t.outbuf: - outctx_base_t_outbuf_get(self) -> qstring * - -ida_ua.outctx_t.print_label_now(): - - print_label_now(self) -> bool - - -ida_ua.outctx_t.restore_ctxflags(): - - restore_ctxflags(self, saved_flags) - - -ida_ua.outctx_t.retrieve_cmt(): - - retrieve_cmt(self) -> ssize_t - - -ida_ua.outctx_t.retrieve_name(): - - retrieve_name(self, arg2, arg3) -> ssize_t - - -ida_ua.outctx_t.set_bin_state(): - - set_bin_state(self, value) - - -ida_ua.outctx_t.set_comment_addr(): - - set_comment_addr(self, ea) - - -ida_ua.outctx_t.set_dlbind_opnd(): - - set_dlbind_opnd(self) - - -ida_ua.outctx_t.set_gen_cmt(): - - set_gen_cmt(self, on=True) - - -ida_ua.outctx_t.set_gen_demangled_label(): - - set_gen_demangled_label(self) - - -ida_ua.outctx_t.set_gen_label(): - - set_gen_label(self) - - -ida_ua.outctx_t.set_gen_xrefs(): - - set_gen_xrefs(self, on=True) - - -ida_ua.outctx_t.setup_outctx(): - - setup_outctx(self, prefix, flags) - - -ida_ua.outctx_t.stack_view(): - - stack_view(self) -> bool - - -ida_ua.outctx_t.term_outctx(): - - term_outctx(self, prefix=None) -> int - - -ida_ua.outctx_t.wif: - outctx_t_wif_get(self) -> printop_t - -ida_ua.outctx_t__from_ptrval__(): - - outctx_t__from_ptrval__(ptrval) -> outctx_t - - -ida_ua.print_insn_mnem(): - - print_insn_mnem(ea) -> bool - - - Print instruction mnemonics. - - @param ea: linear address of the instruction (C++: ea_t) - @return: success - - -ida_ua.print_operand(): - - print_operand(ea, n, getn_flags=0, newtype=None) -> bool - - - Generate text representation for operand #n. This function will - generate the text representation of the specified operand (includes - color codes.) - - @param ea: the item address (instruction or data) (C++: ea_t) - @param n: operand number (0,1,2...). meaningful only for instructions - (C++: int) - @param getn_flags (C++: int) - @param newtype: if specified, print the operand using the specified - type (C++: struct printop_t *) - @return: success - - -ida_ua.ua_mnem(): - - print_insn_mnem(ea) -> bool - - - Print instruction mnemonics. - - @param ea: linear address of the instruction (C++: ea_t) - @return: success - - - -=== ida_ua EPYDOC INJECTIONS === -ida_ua.FCBF_CONT -""" -don't stop on decoding, or any other kind of error -""" - -ida_ua.FCBF_DELIM -""" -add the 'ash'-specified delimiters around the generated data. Note: if -those are not defined and the INFFL_ALLASM is not set, -'format_charlit()' will return an error -""" - -ida_ua.FCBF_ERR_REPL -""" -of a hex representation of the problematic byte - -in case of an error, use a CP_REPLCHAR instead -""" - -ida_ua.FCBF_FF_LIT -""" -in case of codepoints == 0xFF, use it as-is (i.e., LATIN SMALL LETTER -Y WITH DIAERESIS) If both this, and FCBF_REPL are specified, this will -take precedence -""" - -ida_ua.INSN_64BIT -""" -belongs to 64bit segment? -""" - -ida_ua.INSN_MACRO -""" -macro instruction -""" - -ida_ua.INSN_MODMAC -""" -may modify the database to make room for the macro insn -""" - -ida_ua.OF_NO_BASE_DISP -""" -base displacement doesn't exist. meaningful only for 'o_displ' type. -if set, base displacement ( 'op_t::addr' ) doesn't exist. -""" - -ida_ua.OF_NUMBER -""" -the operand can be converted to a number only -""" - -ida_ua.OF_OUTER_DISP -""" -outer displacement exists. meaningful only for 'o_displ' type. if set, -outer displacement ( 'op_t::value' ) exists. -""" - -ida_ua.OF_SHOW -""" -should the operand be displayed? -""" - -ida_ua.OOFS_IFSIGN -""" -output sign if needed -""" - -ida_ua.OOFS_NEEDSIGN -""" -always out sign (+-) -""" - -ida_ua.OOFS_NOSIGN -""" -don't output sign, forbid the user to change the sign -""" - -ida_ua.OOFW_16 -""" -16 bit width -""" - -ida_ua.OOFW_24 -""" -24 bit width -""" - -ida_ua.OOFW_32 -""" -32 bit width -""" - -ida_ua.OOFW_64 -""" -64 bit width -""" - -ida_ua.OOFW_8 -""" -8 bit width -""" - -ida_ua.OOFW_IMM -""" -take from x.dtype -""" - -ida_ua.OOF_ADDR -""" -output x.addr, otherwise x.value -""" - -ida_ua.OOF_ANYSERIAL -""" -if enum: select first available serial -""" - -ida_ua.OOF_NOBNOT -""" -prohibit use of binary not -""" - -ida_ua.OOF_NUMBER -""" -always as a number -""" - -ida_ua.OOF_OUTER -""" -output outer operand -""" - -ida_ua.OOF_SIGNED -""" -output as signed if < 0 -""" - -ida_ua.OOF_SIGNMASK -""" -sign symbol (+/-) output -""" - -ida_ua.OOF_SPACES -""" -currently works only for floating point numbers - -do not suppress leading spaces -""" - -ida_ua.OOF_WIDTHMASK -""" -width of value in bits -""" - -ida_ua.OOF_ZSTROFF -""" -meaningful only if is_stroff(uFlag) append a struct field name if the -field offset is zero? if 'AFL_ZSTROFF' is set, then this flag is -ignored. -""" - -ida_ua.PACK_FORM_DEF -""" -(! 'o_reg' + 'dt_packreal' ) - -packed factor defined. -""" - -ida_ua.dt_bitfild -""" -bit field (mc680x0) -""" - -ida_ua.dt_byte -""" -8 bit -""" - -ida_ua.dt_byte16 -""" -128 bit -""" - -ida_ua.dt_byte32 -""" -256 bit -""" - -ida_ua.dt_byte64 -""" -512 bit -""" - -ida_ua.dt_code -""" -ptr to code (not used?) -""" - -ida_ua.dt_double -""" -8 byte -""" - -ida_ua.dt_dword -""" -32 bit -""" - -ida_ua.dt_float -""" -4 byte -""" - -ida_ua.dt_fword -""" -48 bit -""" - -ida_ua.dt_ldbl -""" -long double (which may be different from tbyte) -""" - -ida_ua.dt_packreal -""" -packed real format for mc68040 -""" - -ida_ua.dt_qword -""" -64 bit -""" - -ida_ua.dt_string -""" -pointer to asciiz string -""" - -ida_ua.dt_tbyte -""" -variable size (\\ph{tbyte_size}) -""" - -ida_ua.dt_unicode -""" -pointer to unicode string -""" - -ida_ua.dt_void -""" -none -""" - -ida_ua.dt_word -""" -16 bit -""" -=== ida_ua EPYDOC INJECTIONS END === -ida_xref.add_cref(): - - add_cref(frm, to, type) -> bool - - - Create a code cross-reference. - - @param to: linear address of referenced instruction (C++: ea_t) - @param type: cross-reference type (C++: cref_t) - @return: success - - -ida_xref.add_dref(): - - add_dref(frm, to, type) -> bool - - - Create a data cross-reference. - - @param to: linear address of referenced data (C++: ea_t) - @param type: cross-reference type (C++: dref_t) - @return: success (may fail if user-defined xref exists from->to) - - -ida_xref.calc_switch_cases(): - - calc_switch_cases(ea, si) -> cases_and_targets_t - - - Get information about a switch's cases. - - The returned information can be used as follows: - - for idx in xrange(len(results.cases)): - cur_case = results.cases[idx] - for cidx in xrange(len(cur_case)): - print "case: %d" % cur_case[cidx] - print " goto 0x%x" % results.targets[idx] - - @param ea: address of the 'indirect jump' instruction - @param si: switch information - - @return: a structure with 2 members: 'cases', and 'targets'. - - -class ida_xref.cases_and_targets_t(): - - Proxy of C++ cases_and_targets_t class - - -ida_xref.cases_and_targets_t.cases: - cases_and_targets_t_cases_get(self) -> casevec_t - -ida_xref.cases_and_targets_t.targets: - cases_and_targets_t_targets_get(self) -> eavec_t * - -class ida_xref.casevec_t(): - - Proxy of C++ qvector<(qvector<(sval_t)>)> class - - -ida_xref.casevec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_xref.casevec_t.append(): - - push_back(self, x) - push_back(self) -> qvector< signed-ea-like-numeric-type > & - - -ida_xref.casevec_t.at(): - - __getitem__(self, i) -> qvector< signed-ea-like-numeric-type > const & - - -ida_xref.casevec_t.begin(): - - begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator - - -ida_xref.casevec_t.capacity(): - - capacity(self) -> size_t - - -ida_xref.casevec_t.clear(): - - clear(self) - - -ida_xref.casevec_t.empty(): - - empty(self) -> bool - - -ida_xref.casevec_t.end(): - - end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator - - -ida_xref.casevec_t.erase(): - - erase(self, it) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - erase(self, first, last) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - -ida_xref.casevec_t.extract(): - - extract(self) -> qvector< signed-ea-like-numeric-type > * - - -ida_xref.casevec_t.find(): - - find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator - - -ida_xref.casevec_t.grow(): - - grow(self, x=qvector< signed-ea-like-numeric-type >()) - - -ida_xref.casevec_t.has(): - - has(self, x) -> bool - - -ida_xref.casevec_t.inject(): - - inject(self, s, len) - - -ida_xref.casevec_t.insert(): - - insert(self, it, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - -ida_xref.casevec_t.pop_back(): - - pop_back(self) - - -ida_xref.casevec_t.push_back(): - - push_back(self, x) - push_back(self) -> qvector< signed-ea-like-numeric-type > & - - -ida_xref.casevec_t.qclear(): - - qclear(self) - - -ida_xref.casevec_t.reserve(): - - reserve(self, cnt) - - -ida_xref.casevec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_xref.casevec_t.size(): - - size(self) -> size_t - - -ida_xref.casevec_t.swap(): - - swap(self, r) - - -ida_xref.casevec_t.truncate(): - - truncate(self) - - -ida_xref.create_switch_table(): - - create_switch_table(ea, si) -> bool - - - Create switch table from the switch information - - @param ea: address of the 'indirect jump' instruction - @param si: switch information - - @return: Boolean - - -ida_xref.create_switch_xrefs(): - - create_switch_xrefs(ea, si) -> bool - - - This function creates xrefs from the indirect jump. - - Usually there is no need to call this function directly because the kernel - will call it for switch tables - - Note: Custom switch information are not supported yet. - - @param ea: address of the 'indirect jump' instruction - @param si: switch information - - @return: Boolean - - -ida_xref.del_cref(): - - del_cref(frm, to, expand) -> int - - - Delete a code cross-reference. - - @param to: linear address of referenced instruction (C++: ea_t) - @param expand: policy to delete the referenced instruction 1: plan - to delete the referenced instruction if it has no more - references. 0: don't delete the referenced - instruction even if no more cross-references point to - it (C++: bool) - - -ida_xref.del_dref(): - - del_dref(frm, to) - - - Delete a data cross-reference. - - @param to: linear address of referenced data (C++: ea_t) - - -ida_xref.delete_switch_table(): - - delete_switch_table(jump_ea, si) - - -ida_xref.get_first_cref_from(): - - get_first_cref_from(frm) -> ea_t - - - Get first instruction referenced from the specified instruction. If - the specified instruction passes execution to the next instruction - then the next instruction is returned. Otherwise the lowest referenced - address is returned (remember that xrefs are kept sorted!). - - @return: first referenced address. The lastXR variable contains type - of the reference. If the specified instruction doesn't - reference to other instructions then returns BADADDR . - - -ida_xref.get_first_cref_to(): - - get_first_cref_to(to) -> ea_t - - - Get first instruction referencing to the specified instruction. If the - specified instruction may be executed immediately after its previous - instruction then the previous instruction is returned. Otherwise the - lowest referencing address is returned. (remember that xrefs are kept - sorted!). - - @param to: linear address of referenced instruction (C++: ea_t) - @return: linear address of the first referencing instruction or - BADADDR . The lastXR variable contains type of the - reference. - - -ida_xref.get_first_dref_from(): - - get_first_dref_from(frm) -> ea_t - - - Get first data referenced from the specified address. - - @return: linear address of first (lowest) data referenced from the - specified address. The lastXR variable contains type of the - reference. Return BADADDR if the specified instruction/data - doesn't reference to anything. - - -ida_xref.get_first_dref_to(): - - get_first_dref_to(to) -> ea_t - - - Get address of instruction/data referencing to the specified data. - - @param to: linear address of referencing instruction or data (C++: - ea_t) - @return: BADADDR if nobody refers to the specified data. The lastXR - variable contains type of the reference. - - -ida_xref.get_first_fcref_from(): - - get_first_fcref_from(frm) -> ea_t - - -ida_xref.get_first_fcref_to(): - - get_first_fcref_to(to) -> ea_t - - -ida_xref.get_next_cref_from(): - - get_next_cref_from(frm, current) -> ea_t - - - Get next instruction referenced from the specified instruction. - - @param current: linear address of current referenced instruction This - value is returned by get_first_cref_from() or - previous call to get_next_cref_from() functions. - (C++: ea_t) - @return: next referenced address or BADADDR . The lastXR variable - contains type of the reference. - - -ida_xref.get_next_cref_to(): - - get_next_cref_to(to, current) -> ea_t - - - Get next instruction referencing to the specified instruction. - - @param to: linear address of referenced instruction (C++: ea_t) - @param current: linear address of current referenced instruction This - value is returned by get_first_cref_to() or previous - call to get_next_cref_to() functions. (C++: ea_t) - @return: linear address of the next referencing instruction or - BADADDR . The lastXR variable contains type of the - reference. - - -ida_xref.get_next_dref_from(): - - get_next_dref_from(frm, current) -> ea_t - - - Get next data referenced from the specified address. - - @param current: linear address of current referenced data. This value - is returned by get_first_dref_from() or previous - call to get_next_dref_from() functions. (C++: ea_t) - @return: linear address of next data or BADADDR . The lastXR - variable contains type of the reference - - -ida_xref.get_next_dref_to(): - - get_next_dref_to(to, current) -> ea_t - - - Get address of instruction/data referencing to the specified data - - @param to: linear address of referencing instruction or data (C++: - ea_t) - @param current: current linear address. This value is returned by - get_first_dref_to() or previous call to - get_next_dref_to() functions. (C++: ea_t) - @return: BADADDR if nobody refers to the specified data. The lastXR - variable contains type of the reference. - - -ida_xref.get_next_fcref_from(): - - get_next_fcref_from(frm, current) -> ea_t - - -ida_xref.get_next_fcref_to(): - - get_next_fcref_to(to, current) -> ea_t - - -ida_xref.has_external_refs(): - - has_external_refs(pfn, ea) -> bool - - - Has a location external to the function references? - - - @param pfn (C++: func_t *) - @param ea (C++: ea_t) - - -class ida_xref.xrefblk_t(): - - Proxy of C++ xrefblk_t class - - -ida_xref.xrefblk_t.first_from(): - - first_from(self, _from, flags) -> bool - - -ida_xref.xrefblk_t.first_to(): - - first_to(self, _to, flags) -> bool - - -ida_xref.xrefblk_t.frm: - xrefblk_t_frm_get(self) -> ea_t - -ida_xref.xrefblk_t.iscode: - xrefblk_t_iscode_get(self) -> uchar - -ida_xref.xrefblk_t.next_from(): - - next_from(self) -> bool - next_from(self, _from, _to, flags) -> bool - - -ida_xref.xrefblk_t.next_to(): - - next_to(self) -> bool - next_to(self, _from, _to, flags) -> bool - - -ida_xref.xrefblk_t.to: - xrefblk_t_to_get(self) -> ea_t - -ida_xref.xrefblk_t.type: - xrefblk_t_type_get(self) -> uchar - -ida_xref.xrefblk_t.user: - xrefblk_t_user_get(self) -> uchar - -ida_xref.xrefchar(): - - xrefchar(xrtype) -> char - - - Get character describing the xref type. - - @param xrtype: combination of Cross-Reference type flags and a - cref_t of dref_t value (C++: char) - - - -=== ida_xref EPYDOC INJECTIONS === -ida_xref.XREF_ALL -""" -return all references -""" - -ida_xref.XREF_BASE -""" -Reference to the base part of an offset. -""" - -ida_xref.XREF_DATA -""" -return data references only -""" - -ida_xref.XREF_FAR -""" -don't return ordinary flow xrefs -""" - -ida_xref.XREF_MASK -""" -Mask to get xref type. -""" - -ida_xref.XREF_PASTEND -""" -Reference is past item. This bit may be passed to 'add_dref()' -functions but it won't be saved in the database. It will prevent the -destruction of eventual alignment directives. -""" - -ida_xref.XREF_TAIL -""" -Reference to tail byte in extrn symbols. -""" - -ida_xref.XREF_USER -""" -User specified xref. This xref will not be deleted by IDA. This bit -should be combined with the existing xref types ( 'cref_t' & 'dref_t' -) Cannot be used for fl_F xrefs -""" -=== ida_xref EPYDOC INJECTIONS END === -idc.AutoMark(): - - Plan to analyze an address - - -class idc.DeprecatedIDCError(): - - Exception for deprecated function calls - - -idc.EVAL_FAILURE(): - - Check the result of eval_idc() for evaluation failures - - @param code: result of eval_idc() - - @return: True if there was an evaluation error - - -idc.GetCommentEx(): - - get_cmt(ea, rptble) -> ssize_t - - - Get an indented comment. - - @param ea: linear address. may point to tail byte, the function will - find start of the item (C++: ea_t) - @param rptble: get repeatable comment? (C++: bool) - @return: size of comment or -1 - - -idc.GetDisasm(): - - Get disassembly line - - @param ea: linear address of instruction - - @return: "" - could not decode instruction at the specified location - - @note: this function may not return exactly the same mnemonics - as you see on the screen. - - -idc.GetDouble(): - - Get value of a floating point number (8 bytes) - This function assumes number stored using IEEE format - and in the same endianness as integers. - - @param ea: linear address - - @return: double - - -idc.GetFloat(): - - Get value of a floating point number (4 bytes) - This function assumes number stored using IEEE format - and in the same endianness as integers. - - @param ea: linear address - - @return: float - - -idc.GetLocalType(): - - Retrieve a local type declaration - @param flags: any of PRTYPE_* constants - @return: local type as a C declaration or "" - - -idc.LoadFile(): - - Load file into IDA database - - @param filepath: path to input file - @param pos: position in the file - @param ea: linear address to load - @param size: number of bytes to load - - @return: 0 - error, 1 - ok - - -idc.MakeVar(): - - Mark the location as "variable" - - @param ea: address to mark - - @return: None - - @note: All that IDA does is to mark the location as "variable". - Nothing else, no additional analysis is performed. - This function may disappear in the future. - - -idc.SaveFile(): - - Save from IDA database to file - - @param filepath: path to output file - @param pos: position in the file - @param ea: linear address to save from - @param size: number of bytes to save - - @return: 0 - error, 1 - ok - - -idc.SetType(): - - Set type of function/variable - - @param ea: the address of the object - @param newtype: the type string in C declaration form. - Must contain the closing ';' - if specified as an empty string, then the - item associated with 'ea' will be deleted. - - @return: 1-ok, 0-failed. - - -idc.SizeOf(): - - Returns the size of the type. It is equivalent to IDC's sizeof(). - Use name, tp, fld = idc.parse_decl() ; SizeOf(tp) to retrieve the size - @return: -1 if typestring is not valid otherwise the size of the type - - -idc.add_auto_stkpnt(): - - Add automatical SP register change point - @param func_ea: function start - @param ea: linear address where SP changes - usually this is the end of the instruction which - modifies the stack pointer (insn.ea+insn.size) - @param delta: difference between old and new values of SP - @return: 1-ok, 0-failed - - -idc.add_bpt(): - - Add a new breakpoint - - @param ea: any address in the process memory space: - @param size: size of the breakpoint (irrelevant for software breakpoints): - @param bpttype: type of the breakpoint (one of BPT_... constants) - - @return: success - - @note: Only one breakpoint can exist at a given address. - - -idc.add_cref(): - - add_cref(frm, to, type) -> bool - - - Create a code cross-reference. - - @param to: linear address of referenced instruction (C++: ea_t) - @param type: cross-reference type (C++: cref_t) - @return: success - - -idc.add_default_til(): - - Load a type library - - @param name: name of type library. - @return: 1-ok, 0-failed. - - -idc.add_dref(): - - add_dref(frm, to, type) -> bool - - - Create a data cross-reference. - - @param to: linear address of referenced data (C++: ea_t) - @param type: cross-reference type (C++: dref_t) - @return: success (may fail if user-defined xref exists from->to) - - -idc.add_entry(): - - add_entry(ord, ea, name, makecode, flags=0x0) -> bool - - - Add an entry point to the list of entry points. - - @param ord: ordinal number if ordinal number is equal to 'ea' then - ordinal is not used (C++: uval_t) - @param ea: linear address (C++: ea_t) - @param name: name of entry point. If the specified location already - has a name, the old name will be appended to the regular - comment. If name == NULL, then the old name will be - retained. (C++: const char *) - @param makecode: should the kernel convert bytes at the entry point to - instruction(s) (C++: bool) - @param flags: See AEF_* (C++: int) - @return: success (currently always true) - - -idc.add_enum(): - - Add a new enum type - - @param idx: serial number of the new enum. - If another enum with the same serial number - exists, then all enums with serial - numbers >= the specified idx get their - serial numbers incremented (in other words, - the new enum is put in the middle of the list of enums). - - If idx >= get_enum_qty() or idx == idaapi.BADNODE - then the new enum is created at the end of - the list of enums. - - @param name: name of the enum. - @param flag: flags for representation of numeric constants - in the definition of enum. - - @return: id of new enum or BADADDR - - -idc.add_enum_member(): - - Add a member of enum - a symbolic constant - - @param enum_id: id of enum - @param name: name of symbolic constant. Must be unique in the program. - @param value: value of symbolic constant. - @param bmask: bitmask of the constant - ordinary enums accept only ida_enum.DEFMASK as a bitmask - all bits set in value should be set in bmask too - - @return: 0-ok, otherwise error code (one of ENUM_MEMBER_ERROR_*) - - -idc.add_func(): - - Create a function - - @param start: function bounds - @param end: function bounds - - If the function end address is BADADDR, then - IDA will try to determine the function bounds - automatically. IDA will define all necessary - instructions to determine the function bounds. - - @return: !=0 - ok - - @note: an instruction should be present at the start address - - -idc.add_hidden_range(): - - add_hidden_range(ea1, ea2, description, header, footer, color) -> bool - - - Mark a range of addresses as hidden. The range will be created in the - invisible state with the default color - - @param ea1: linear address of start of the address range (C++: ea_t) - @param ea2: linear address of end of the address range (C++: ea_t) - @param description: range parameters (C++: const char *) - @param header: range parameters (C++: const char *) - @param footer: range parameters (C++: const char *) - @param color (C++: bgcolor_t) - @return: success - - -idc.add_idc_hotkey(): - - add_idc_hotkey(hotkey, idcfunc) -> int - - - Add hotkey for IDC function ( 'ui_add_idckey' ). - - @param hotkey: hotkey name (C++: const char *) - @param idcfunc: IDC function name (C++: const char *) - @return: IDC hotkey error codes - - -idc.add_segm_ex(): - - Create a new segment - - @param startea: linear address of the start of the segment - @param endea: linear address of the end of the segment - this address will not belong to the segment - 'endea' should be higher than 'startea' - @param base: base paragraph or selector of the segment. - a paragraph is 16byte memory chunk. - If a selector value is specified, the selector should be - already defined. - @param use32: 0: 16bit segment, 1: 32bit segment, 2: 64bit segment - @param align: segment alignment. see below for alignment values - @param comb: segment combination. see below for combination values. - @param flags: combination of ADDSEG_... bits - - @return: 0-failed, 1-ok - - -idc.add_sourcefile(): - - add_sourcefile(ea1, ea2, filename) -> bool - - - Mark a range of address as belonging to a source file. An address - range may belong only to one source file. A source file may be - represented by several address ranges. - - @param ea1: linear address of start of the address range (C++: ea_t) - @param ea2: linear address of end of the address range (excluded) - (C++: ea_t) - @param filename: name of source file. (C++: const char *) - @return: success - - -idc.add_struc(): - - Define a new structure type - - @param index: index of new structure type - If another structure has the specified index, - then index of that structure and all other - structures will be incremented, freeing the specifed - index. If index is == -1, then the biggest index - number will be used. - See get_first_struc_idx() for the explanation of - structure indices and IDs. - @param name: name of the new structure type. - @param is_union: 0: structure - 1: union - - @return: -1 if can't define structure type because of - bad structure name: the name is ill-formed or is - already used in the program. - otherwise returns ID of the new structure type - - -idc.add_struc_member(): - - Add structure member - - @param sid: structure type ID - @param name: name of the new member - @param offset: offset of the new member - -1 means to add at the end of the structure - @param flag: type of the new member. Should be one of - FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA - @param typeid: if is_struct(flag) then typeid specifies the structure id for the member - if is_off0(flag) then typeid specifies the offset base. - if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). - if is_stroff(flag) then typeid specifies the structure id - if is_enum(flag) then typeid specifies the enum id - if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) - Otherwise typeid should be -1. - @param nbytes: number of bytes in the new member - - @param target: target address of the offset expr. You may specify it as - -1, ida will calculate it itself - @param tdelta: offset target delta. usually 0 - @param reftype: see REF_... definitions - - @note: The remaining arguments are allowed only if is_off0(flag) and you want - to specify a complex offset expression - - @return: 0 - ok, otherwise error code (one of STRUC_ERROR_*) - - - -idc.add_user_stkpnt(): - - add_user_stkpnt(ea, delta) -> bool - - - Add user-defined SP register change point. - - @param ea: linear address where SP changes (C++: ea_t) - @param delta: difference between old and new values of SP (C++: - sval_t) - @return: success - - -idc.append_func_tail(): - - Append a function chunk to the function - - @param funcea: any address in the function - @param ea1: start of function tail - @param ea2: end of function tail - @return: 0 if failed, 1 if success - - @note: If a chunk exists at the specified addresses, it must have exactly - the specified boundaries - - -idc.apply_type(): - - Apply the specified type to the address - - @param ea: the address of the object - @param py_type: typeinfo tuple (type, fields) as get_tinfo() returns - or tuple (name, type, fields) as parse_decl() returns - or None - if specified as None, then the - item associated with 'ea' will be deleted. - @param flags: combination of TINFO_... constants or 0 - @return: Boolean - - -idc.ask_yn(): - - ask_yn(deflt, format) -> int - - - Display a dialog box and get choice from "Yes", "No", "Cancel". - - @param deflt: default choice: one of Button IDs (C++: int) - @param format: The question in printf() style format (C++: const char - *) - @return: the selected button (one of Button IDs ). Esc key returns - ASKBTN_CANCEL . - - -idc.atoa(): - - Convert address value to a string - Return address in the form 'seg000:1234' - (the same as in line prefixes) - - @param ea: address to format - - -idc.attach_process(): - - attach_process(pid=pid_t(-1), event_id=-1) -> int - - - Attach the debugger to a running process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_attach' - }This function shouldn't be called as a request if 'NO_PROCESS' is - used. - - @param pid: PID of the process to attach to. If NO_PROCESS , a dialog - box will interactively ask the user for the process to - attach to. (C++: pid_t) - @param event_id (C++: int) - - -idc.auto_mark_range(): - - auto_mark_range(start, end, type) - - - Put range of addresses into a queue. 'start' may be higher than 'end', - the kernel will swap them in this case. 'end' doesn't belong to the - range. - - @param start (C++: ea_t) - @param end (C++: ea_t) - @param type (C++: atype_t) - - -idc.auto_unmark(): - - auto_unmark(start, end, type) - - - Remove range of addresses from a queue. 'start' may be higher than - 'end', the kernel will swap them in this case. 'end' doesn't belong to - the range. - - @param start (C++: ea_t) - @param end (C++: ea_t) - @param type (C++: atype_t) - - -idc.auto_wait(): - - auto_wait() -> bool - - - Process everything in the queues and return true. - - @return: false if the user clicked cancel. (the wait box must be - displayed by the caller if desired) - - -idc.batch(): - - Enable/disable batch mode of operation - - @param batch: batch mode - 0 - ida will display dialog boxes and wait for the user input - 1 - ida will not display dialog boxes, warnings, etc. - - @return: old balue of batch flag - - -idc.byte_value(): - - Get byte value from flags - Get value of byte provided that the byte is initialized. - This macro works ok only for 8-bit byte machines. - - -idc.calc_gtn_flags(): - - Calculate flags for get_ea_name() function - - @param fromaddr: the referring address. May be BADADDR. - @param ea: linear address - - @return: flags - - -idc.call_system(): - - Execute an OS command. - - @param command: command line to execute - - @return: error code from OS - - @note: - IDA will wait for the started program to finish. - In order to start the command in parallel, use OS methods. - For example, you may start another program in parallel using - "start" command. - - -idc.can_exc_continue(): - - Can it continue after EXCEPTION event? - - @return: boolean - - -idc.check_bpt(): - - check_bpt(ea) -> int - - - Check the breakpoint at the specified address. - - @param ea (C++: ea_t) - @return: one of Breakpoint status codes - - -idc.choose_func(): - - Ask the user to select a function - - Arguments: - - @param title: title of the dialog box - - @return: -1 - user refused to select a function - otherwise returns the selected function start address - - -idc.clear_trace(): - - Clear the current trace buffer - - -idc.create_align(): - - create_align(ea, length, alignment) -> bool - - - Alignment: 0 or 2..32. If it is 0, is will be calculated. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param alignment (C++: int) - - -idc.create_array(): - - Create array. - - @param name: The array name. - - @return: -1 in case of failure, a valid array_id otherwise. - - -idc.create_byte(): - - Convert the current item to a byte - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_custom_data(): - - create_custdata(ea, length, dtid, fid, force=False) -> bool - - - Convert to custom data type. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param dtid (C++: int) - @param fid (C++: int) - @param force (C++: bool) - - -idc.create_data(): - - create_data(ea, dataflag, size, tid) -> bool - - - Convert to data (byte, word, dword, etc). This function may be used to - create arrays. - - @param ea: linear address (C++: ea_t) - @param dataflag: type of data. Value of function byte_flag() , - word_flag() , etc. (C++: flags_t) - @param size: size of array in bytes. should be divisible by the size - of one item of the specified type. for variable sized - items it can be specified as 0, and the kernel will try - to calculate the size. (C++: asize_t) - @param tid: type id. If the specified type is a structure, then tid is - structure id. Otherwise should be BADNODE . (C++: tid_t) - @return: success - - -idc.create_double(): - - Convert the current item to a double floating point (8 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_dword(): - - Convert the current item to a double word (4 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_float(): - - Convert the current item to a floating point (4 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_insn(): - - create_insn(ea, out=None) -> int - - - Create an instruction at the specified address. This function checks - if an instruction is present at the specified address and will try to - create one if there is none. It will fail if there is a data item or - other items hindering the creation of the new instruction. This - function will also fill the 'out' structure. - - @param ea: linear address (C++: ea_t) - @param out: the resulting instruction (C++: insn_t *) - @return: the length of the instruction or 0 - - -idc.create_oword(): - - Convert the current item to an octa word (16 bytes/128 bits) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_pack_real(): - - Convert the current item to a packed real (10 or 12 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_qword(): - - Convert the current item to a quadro word (8 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_strlit(): - - Create a string. - - This function creates a string (the string type is determined by the - value of get_inf_attr(INF_STRTYPE)) - - @param ea: linear address - @param endea: ending address of the string (excluded) - if endea == BADADDR, then length of string will be calculated - by the kernel - - @return: 1-ok, 0-failure - - @note: The type of an existing string is returned by get_str_type() - - -idc.create_struct(): - - Convert the current item to a structure instance - - @param ea: linear address - @param size: structure size in bytes. -1 means that the size - will be calculated automatically - @param strname: name of a structure type - - @return: 1-ok, 0-failure - - -idc.create_tbyte(): - - Convert the current item to a tbyte (10 or 12 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_word(): - - Convert the current item to a word (2 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_yword(): - - Convert the current item to a ymm word (32 bytes/256 bits) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.define_exception(): - - define_exception(code, name, desc, flags) -> char const * - - - Convenience function: define new exception code. - - @param code: exception code (cannot be 0) (C++: uint) - @param name: exception name (cannot be empty or NULL) (C++: const char - *) - @param desc: exception description (maybe NULL) (C++: const char *) - @param flags: combination of Exception info flags (C++: int) - @return: failure message or NULL. You must call store_exceptions() - if this function succeeds - - -idc.define_local_var(): - - Create a local variable - - @param start: start of address range for the local variable - @param end: end of address range for the local variable - @param location: the variable location in the "[bp+xx]" form where xx is - a number. The location can also be specified as a - register name. - @param name: name of the local variable - - @return: 1-ok, 0-failure - - @note: For the stack variables the end address is ignored. - If there is no function at 'start' then this function. - will fail. - - -idc.del_array_element(): - - Delete an array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - @param idx: Index of an element. - - @return: 1 in case of success, 0 otherwise. - - -idc.del_bpt(): - - Delete breakpoint - - @param ea: any address in the process memory space: - - @return: success - - -idc.del_cref(): - - del_cref(frm, to, expand) -> int - - - Delete a code cross-reference. - - @param to: linear address of referenced instruction (C++: ea_t) - @param expand: policy to delete the referenced instruction 1: plan - to delete the referenced instruction if it has no more - references. 0: don't delete the referenced - instruction even if no more cross-references point to - it (C++: bool) - - -idc.del_dref(): - - del_dref(frm, to) - - - Delete a data cross-reference. - - @param to: linear address of referenced data (C++: ea_t) - - -idc.del_enum(): - - del_enum(id) - - - Delete an enum type. - - - @param id (C++: enum_t) - - -idc.del_enum_member(): - - Delete a member of enum - a symbolic constant - - @param enum_id: id of enum - @param value: value of symbolic constant. - @param serial: serial number of the constant in the - enumeration. See op_enum() for for details. - @param bmask: bitmask of the constant ordinary enums accept - only ida_enum.DEFMASK as a bitmask - - @return: 1-ok, 0-failed - - -idc.del_extra_cmt(): - - del_extra_cmt(ea, what) - - -idc.del_fixup(): - - del_fixup(source) - - - Delete fixup information. - - - @param source (C++: ea_t) - - -idc.del_func(): - - del_func(ea) -> bool - - - Delete a function. - - @param ea: any address in the function entry chunk (C++: ea_t) - @return: success - - -idc.del_hash_string(): - - Delete a hash element. - - @param hash_id: The hash ID. - @param key: Key of an element - - @return: 1 upon success, 0 otherwise. - - -idc.del_hidden_range(): - - del_hidden_range(ea) -> bool - - - Delete hidden range. - - @param ea: any address in the hidden range (C++: ea_t) - @return: success - - -idc.del_idc_hotkey(): - - del_idc_hotkey(hotkey) -> bool - - - Delete IDC function hotkey ( 'ui_del_idckey' ). - - @param hotkey: hotkey name (C++: const char *) - - -idc.del_items(): - - Convert the current item to an explored item - - @param ea: linear address - @param flags: combination of DELIT_* constants - @param size: size of the range to undefine - - @return: None - - -idc.del_segm(): - - Delete a segment - - @param ea: any address in the segment - @param flags: combination of SEGMOD_* flags - - @return: boolean success - - -idc.del_selector(): - - del_selector(selector) - - - Delete mapping of a selector. Be wary of deleting selectors that are - being used in the program, this can make a mess in the segments. - - @param selector: number of selector to remove from the translation - table (C++: sel_t) - - -idc.del_source_linnum(): - - del_source_linnum(ea) - - -idc.del_sourcefile(): - - del_sourcefile(ea) -> bool - - - Delete information about the source file. - - @param ea: linear address (C++: ea_t) - @return: success - - -idc.del_stkpnt(): - - Delete SP register change point - - @param func_ea: function start - @param ea: linear address - @return: 1-ok, 0-failed - - -idc.del_struc(): - - Delete a structure type - - @param sid: structure type ID - - @return: 0 if bad structure type ID is passed - 1 otherwise the structure type is deleted. All data - and other structure types referencing to the - deleted structure type will be displayed as array - of bytes. - - -idc.del_struc_member(): - - Delete structure member - - @param sid: structure type ID - @param member_offset: offset of the member - - @return: != 0 - ok. - - @note: IDA allows 'holes' between members of a - structure. It treats these 'holes' - as unnamed arrays of bytes. - - -idc.delete_all_segments(): - - Delete all segments, instructions, comments, i.e. everything - except values of bytes. - - -idc.delete_array(): - - Delete array, by its ID. - - @param array_id: The ID of the array to delete. - - -idc.demangle_name(): - - demangle_name a name - - @param name: name to demangle - @param disable_mask: a mask that tells how to demangle the name - it is a good idea to get this mask using - get_inf_attr(INF_SHORT_DN) or get_inf_attr(INF_LONG_DN) - - @return: a demangled name - If the input name cannot be demangled, returns None - - -idc.detach_process(): - - detach_process() -> bool - - - Detach the debugger from the debugged process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_detach' } - - -idc.diff_trace_file(): - - diff_trace_file(nonnul_filename) -> bool - - - Show difference between the current trace and the one from 'filename'. - - -idc.enable_bpt(): - - enable_bpt(ea, enable=True) -> bool - enable_bpt(bptloc, enable=True) -> bool - - -idc.enable_tracing(): - - Enable step tracing - - @param trace_level: what kind of trace to modify - @param enable: 0: turn off, 1: turn on - - @return: success - - -idc.error(): - - error(format) - - - Display a fatal message in a message box and quit IDA - - @param format: message to print - - -idc.eval_idc(): - - Evaluate an IDC expression - - @param expr: an expression - - @return: the expression value. If there are problems, the returned value will be "IDC_FAILURE: xxx" - where xxx is the error description - - @note: Python implementation evaluates IDC only, while IDC can call other registered languages - - -idc.exit_process(): - - exit_process() -> bool - - - Terminate the debugging of the current process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_exit' } - - -idc.expand_struc(): - - Expand or shrink a structure type - @param id: structure type ID - @param offset: offset in the structure - @param delta: how many bytes to add or remove - @param recalc: recalculate the locations where the structure - type is used - @return: != 0 - ok - - -idc.find_func_end(): - - Determine a new function boundaries - - @param ea: starting address of a new function - - @return: if a function already exists, then return its end address. - If a function end cannot be determined, the return BADADDR - otherwise return the end address of the new function - - -idc.find_selector(): - - Find a selector which has the specifed value - - @param val: value to search for - - @return: the selector number if found, - otherwise the input value (val & 0xFFFF) - - @note: selector values are always in paragraphs - - -idc.first_func_chunk(): - - Get the first function chunk of the specified function - - @param funcea: any address in the function - - @return: the function entry point or BADADDR - - @note: This function returns the first (main) chunk of the specified function - - -idc.force_bl_call(): - - Force BL instruction to be a call - - @param ea: address of the BL instruction - - @return: 1-ok, 0-failed - - -idc.force_bl_jump(): - - Some ARM compilers in Thumb mode use BL (branch-and-link) - instead of B (branch) for long jumps, since BL has more range. - By default, IDA tries to determine if BL is a jump or a call. - You can override IDA's decision using commands in Edit/Other menu - (Force BL call/Force BL jump) or the following two functions. - - Force BL instruction to be a jump - - @param ea: address of the BL instruction - - @return: 1-ok, 0-failed - - -idc.func_contains(): - - Does the given function contain the given address? - - @param func_ea: any address belonging to the function - @param ea: linear address - - @return: success - - -idc.gen_file(): - - Generate an output file - - @param filetype: type of output file. One of OFILE_... symbols. See below. - @param path: the output file path (will be overwritten!) - @param ea1: start address. For some file types this argument is ignored - @param ea2: end address. For some file types this argument is ignored - @param flags: bit combination of GENFLG_... - - @returns: number of the generated lines. - -1 if an error occurred - OFILE_EXE: 0-can't generate exe file, 1-ok - - -idc.gen_flow_graph(): - - Generate a flow chart GDL file - - @param outfile: output file name. GDL extension will be used - @param title: graph title - @param ea1: beginning of the range to flow chart - @param ea2: end of the range to flow chart. - @param flags: combination of CHART_... constants - - @note: If ea2 == BADADDR then ea1 is treated as an address within a function. - That function will be flow charted. - - -idc.gen_simple_call_chart(): - - Generate a function call graph GDL file - - @param outfile: output file name. GDL extension will be used - @param title: graph title - @param flags: combination of CHART_GEN_GDL, CHART_WINGRAPH, CHART_NOLIBFUNCS - - -idc.generate_disasm_line(): - - Get disassembly line - - @param ea: linear address of instruction - - @param flags: combination of the GENDSM_ flags, or 0 - - @return: "" - could not decode instruction at the specified location - - @note: this function may not return exactly the same mnemonics - as you see on the screen. - - -idc.get_array_element(): - - Get value of array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - @param idx: Index of an element. - - @return: Value of the specified array element. Note that - this function may return char or long result. Unexistent - array elements give zero as a result. - - -idc.get_array_id(): - - Get array array_id, by name. - - @param name: The array name. - - @return: -1 in case of failure (i.e., no array with that - name exists), a valid array_id otherwise. - - -idc.get_bmask_cmt(): - - Get bitmask comment (only for bitfields) - - @param enum_id: id of enum - @param bmask: bitmask of the constant - @param repeatable: type of comment, 0-regular, 1-repeatable - - @return: comment attached to bitmask or None - - -idc.get_bmask_name(): - - Get bitmask name (only for bitfields) - - @param enum_id: id of enum - @param bmask: bitmask of the constant - - @return: name of bitmask or None - - -idc.get_bookmark(): - - get_marked_pos(slot) -> ea_t - - -idc.get_bookmark_desc(): - - get_mark_comment(slot) -> PyObject * - - -idc.get_bpt_attr(): - - Get the characteristics of a breakpoint - - @param ea: any address in the breakpoint range - @param bptattr: the desired attribute code, one of BPTATTR_... constants - - @return: the desired attribute value or -1 - - -idc.get_bpt_ea(): - - Get breakpoint address - - @param n: number of breakpoint, is in range 0..get_bpt_qty()-1 - - @return: address of the breakpoint or BADADDR - - -idc.get_bpt_qty(): - - Get number of breakpoints. - - @return: number of breakpoints - - -idc.get_bpt_tev_ea(): - - get_bpt_tev_ea(n) -> ea_t - - - Get the address associated to a read, read/write or execution trace - event. \sq{Type, Synchronous function, Notification, none (synchronous - function)}Usually, a breakpoint is associated with a read, read/write - or execution trace event. However, the returned address could be any - address in the range of this breakpoint. If the breakpoint was deleted - after the trace event, the address no longer corresponds to a valid - breakpoint. - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a read, read/write or execution trace event. - - -idc.get_bytes(): - - Return the specified number of bytes of the program - - @param ea: linear address - - @param size: size of buffer in normal 8-bit bytes - - @param use_dbg: if True, use debugger memory, otherwise just the database - - @return: None on failure - otherwise a string containing the read bytes - - -idc.get_call_tev_callee(): - - get_call_tev_callee(n) -> ea_t - - - Get the called function from a function call trace event. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a function call event. - - -idc.get_cmt(): - - get_cmt(ea, rptble) -> ssize_t - - - Get an indented comment. - - @param ea: linear address. may point to tail byte, the function will - find start of the item (C++: ea_t) - @param rptble: get repeatable comment? (C++: bool) - @return: size of comment or -1 - - -idc.get_color(): - - Get item color - - @param ea: address of the item - @param what: type of the item (one of CIC_* constants) - - @return: color code in RGB (hex 0xBBGGRR) - - -idc.get_curline(): - - Get the disassembly line at the cursor - - @return: string - - -idc.get_current_thread(): - - get_current_thread() -> thid_t - - - Get current thread ID. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - -idc.get_db_byte(): - - get_db_byte(ea) -> uchar - - - Get one byte (8-bit) of the program at 'ea' from the database. Works - even if the debugger is active. See also 'get_dbg_byte()' to read the - process memory directly. This function works only for 8bit byte - processors. - - @param ea (C++: ea_t) - - -idc.get_debugger_event_cond(): - - get_debugger_event_cond() -> char const * - - -idc.get_entry(): - - get_entry(ord) -> ea_t - - - Get entry point address by its ordinal - - @param ord: ordinal number of entry point (C++: uval_t) - @return: address or BADADDR - - -idc.get_entry_name(): - - get_entry_name(ord) -> ssize_t - - - Get name of the entry point by its ordinal. - - @param ord: ordinal number of entry point (C++: uval_t) - @return: size of entry name or -1 - - -idc.get_entry_ordinal(): - - get_entry_ordinal(idx) -> uval_t - - - Get ordinal number of an entry point. - - @param idx: internal number of entry point. Should be in the range 0.. - get_entry_qty() -1 (C++: size_t) - @return: ordinal number or 0. - - -idc.get_entry_qty(): - - get_entry_qty() -> size_t - - - Get number of entry points. - - -idc.get_enum(): - - get_enum(name) -> enum_t - - - Get enum by name. - - - @param name (C++: const char *) - - -idc.get_enum_cmt(): - - get_enum_cmt(id, repeatable) -> ssize_t - - - Get enum comment. - - - @param id (C++: enum_t) - @param repeatable (C++: bool) - - -idc.get_enum_flag(): - - get_enum_flag(id) -> flags_t - - - Get flags determining the representation of the enum. (currently they - define the numeric base: octal, decimal, hex, bin) and signness. - - @param id (C++: enum_t) - - -idc.get_enum_idx(): - - get_enum_idx(id) -> uval_t - - - Get serial number of enum. The serial number determines the place of - the enum in the enum window. - - @param id (C++: enum_t) - - -idc.get_enum_member(): - - Get id of constant - - @param enum_id: id of enum - @param value: value of constant - @param serial: serial number of the constant in the - enumeration. See op_enum() for details. - @param bmask: bitmask of the constant - ordinary enums accept only ida_enum.DEFMASK as a bitmask - - @return: id of constant or -1 if error - - -idc.get_enum_member_bmask(): - - get_enum_member_bmask(id) -> bmask_t - - - Get bitmask of an enum member. - - - @param id (C++: const_t) - - -idc.get_enum_member_by_name(): - - get_enum_member_by_name(name) -> const_t - - - Get a reference to an enum member by its name. - - - @param name (C++: const char *) - - -idc.get_enum_member_cmt(): - - Get comment of a constant - - @param const_id: id of const - @param repeatable: 0:get regular comment, 1:get repeatable comment - - @return: comment string - - -idc.get_enum_member_enum(): - - get_enum_member_enum(id) -> enum_t - - - Get the parent enum of an enum member. - - - @param id (C++: const_t) - - -idc.get_enum_member_name(): - - Get name of a constant - - @param const_id: id of const - - Returns: name of constant - - -idc.get_enum_member_value(): - - get_enum_member_value(id) -> uval_t - - - Get value of an enum member. - - - @param id (C++: const_t) - - -idc.get_enum_name(): - - get_enum_name(id) -> ssize_t - - - Get name of enum. - - - @param id (C++: enum_t) - - -idc.get_enum_qty(): - - get_enum_qty() -> size_t - - - Get number of declared 'enum_t' types. - - -idc.get_enum_size(): - - get_enum_size(id) -> size_t - - - Get the number of the members of the enum. - - - @param id (C++: enum_t) - - -idc.get_enum_width(): - - get_enum_width(id) -> size_t - - - Get the width of a enum element allowed values: 0 - (unspecified),1,2,4,8,16,32,64 - - @param id (C++: enum_t) - - -idc.get_event_bpt_hea(): - - Get hardware address for BREAKPOINT event - - @return: hardware address - - -idc.get_event_ea(): - - Get ea for debug event - - @return: ea - - -idc.get_event_exc_code(): - - Get exception code for EXCEPTION event - - @return: exception code - - -idc.get_event_exc_ea(): - - Get address for EXCEPTION event - - @return: adress of exception - - -idc.get_event_exc_info(): - - Get info for EXCEPTION event - - @return: info string - - -idc.get_event_exit_code(): - - Get exit code for debug event - - @return: exit code for PROCESS_EXITED, THREAD_EXITED events - - -idc.get_event_id(): - - Get ID of debug event - - @return: event ID - - -idc.get_event_info(): - - Get debug event info - - @return: event info: for THREAD_STARTED (thread name) - for LIB_UNLOADED (unloaded library name) - for INFORMATION (message to display) - - -idc.get_event_module_base(): - - Get module base for debug event - - @return: module base - - -idc.get_event_module_name(): - - Get module name for debug event - - @return: module name - - -idc.get_event_module_size(): - - Get module size for debug event - - @return: module size - - -idc.get_event_pid(): - - Get process ID for debug event - - @return: process ID - - -idc.get_event_tid(): - - Get type ID for debug event - - @return: type ID - - -idc.get_extra_cmt(): - - get_extra_cmt(ea, what) -> ssize_t - - -idc.get_fchunk_attr(): - - Get a function chunk attribute - - @param ea: any address in the chunk - @param attr: one of: FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER, FUNCATTR_REFQTY - - @return: desired attribute or -1 - - -idc.get_fchunk_referer(): - - Get a function chunk referer - - @param ea: any address in the chunk - @param idx: referer index (0..get_fchunk_attr(FUNCATTR_REFQTY)) - - @return: referer address or BADADDR - - -idc.get_first_bmask(): - - get_first_bmask(id) -> bmask_t - - - Get first bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @return: the smallest bitmask for enum, or DEFMASK - - -idc.get_first_cref_from(): - - get_first_cref_from(frm) -> ea_t - - - Get first instruction referenced from the specified instruction. If - the specified instruction passes execution to the next instruction - then the next instruction is returned. Otherwise the lowest referenced - address is returned (remember that xrefs are kept sorted!). - - @return: first referenced address. The lastXR variable contains type - of the reference. If the specified instruction doesn't - reference to other instructions then returns BADADDR . - - -idc.get_first_cref_to(): - - get_first_cref_to(to) -> ea_t - - - Get first instruction referencing to the specified instruction. If the - specified instruction may be executed immediately after its previous - instruction then the previous instruction is returned. Otherwise the - lowest referencing address is returned. (remember that xrefs are kept - sorted!). - - @param to: linear address of referenced instruction (C++: ea_t) - @return: linear address of the first referencing instruction or - BADADDR . The lastXR variable contains type of the - reference. - - -idc.get_first_dref_from(): - - get_first_dref_from(frm) -> ea_t - - - Get first data referenced from the specified address. - - @return: linear address of first (lowest) data referenced from the - specified address. The lastXR variable contains type of the - reference. Return BADADDR if the specified instruction/data - doesn't reference to anything. - - -idc.get_first_dref_to(): - - get_first_dref_to(to) -> ea_t - - - Get address of instruction/data referencing to the specified data. - - @param to: linear address of referencing instruction or data (C++: - ea_t) - @return: BADADDR if nobody refers to the specified data. The lastXR - variable contains type of the reference. - - -idc.get_first_enum_member(): - - Get first constant in the enum - - @param enum_id: id of enum - @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) - - @return: value of constant or idaapi.BADNODE no constants are defined - All constants are sorted by their values as unsigned longs. - - -idc.get_first_fcref_from(): - - get_first_fcref_from(frm) -> ea_t - - -idc.get_first_fcref_to(): - - get_first_fcref_to(to) -> ea_t - - -idc.get_first_hash_key(): - - Get the first key in the hash. - - @param hash_id: The hash ID. - - @return: the key, 0 otherwise. - - -idc.get_first_index(): - - Get index of the first existing array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - - @return: -1 if the array is empty, otherwise index of first array - element of given type. - - -idc.get_first_member(): - - Get offset of the first member of a structure - - @param sid: structure type ID - - @return: -1 if bad structure type ID is passed, - ida_idaapi.BADADDR if structure has no members, - otherwise returns offset of the first member. - - @note: IDA allows 'holes' between members of a - structure. It treats these 'holes' - as unnamed arrays of bytes. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_first_module(): - - Enumerate process modules - - @return: first module's base address or None on failure - - -idc.get_first_seg(): - - Get first segment - - @return: address of the start of the first segment - BADADDR - no segments are defined - - -idc.get_first_struc_idx(): - - get_first_struc_idx() -> uval_t - - - Get index of first structure. - - @return: BADADDR if no known structures, 0 otherwise - - -idc.get_fixup_target_dis(): - - Get fixup target displacement - - @param ea: address to get information about - - @return: 0 - no fixup at the specified address - otherwise returns fixup target displacement - - -idc.get_fixup_target_flags(): - - Get fixup target flags - - @param ea: address to get information about - - @return: 0 - no fixup at the specified address - otherwise returns fixup target flags - - -idc.get_fixup_target_off(): - - Get fixup target offset - - @param ea: address to get information about - - @return: BADADDR - no fixup at the specified address - otherwise returns fixup target offset - - -idc.get_fixup_target_sel(): - - Get fixup target selector - - @param ea: address to get information about - - @return: BADSEL - no fixup at the specified address - otherwise returns fixup target selector - - -idc.get_fixup_target_type(): - - Get fixup target type - - @param ea: address to get information about - - @return: 0 - no fixup at the specified address - otherwise returns fixup type - - -idc.get_forced_operand(): - - get_forced_operand(ea, n) -> ssize_t - - - Get forced operand. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, 2) (C++: int) - @return: size of forced operand or -1 - - -idc.get_frame_args_size(): - - Get size of arguments in function frame which are purged upon return - - @param ea: any address belonging to the function - - @return: Size of function arguments in bytes. - If the function doesn't have a frame, return 0 - If the function does't exist, return -1 - - -idc.get_frame_id(): - - Get ID of function frame structure - - @param ea: any address belonging to the function - - @return: ID of function frame or None In order to access stack variables - you need to use structure member manipulaion functions with the - obtained ID. - - -idc.get_frame_lvar_size(): - - Get size of local variables in function frame - - @param ea: any address belonging to the function - - @return: Size of local variables in bytes. - If the function doesn't have a frame, return 0 - If the function does't exist, return None - - -idc.get_frame_regs_size(): - - Get size of saved registers in function frame - - @param ea: any address belonging to the function - - @return: Size of saved registers in bytes. - If the function doesn't have a frame, return 0 - This value is used as offset for BP (if FUNC_FRAME is set) - If the function does't exist, return None - - -idc.get_frame_size(): - - Get full size of function frame - - @param ea: any address belonging to the function - @returns: Size of function frame in bytes. - This function takes into account size of local - variables + size of saved registers + size of - return address + size of function arguments - If the function doesn't have a frame, return size of - function return address in the stack. - If the function does't exist, return 0 - - -idc.get_full_flags(): - - get_full_flags(ea) -> flags_t - - - Get flags value for address 'ea'. - - @param ea (C++: ea_t) - @return: 0 if address is not present in the program - - -idc.get_func_attr(): - - Get a function attribute - - @param ea: any address belonging to the function - @param attr: one of FUNCATTR_... constants - - @return: BADADDR - error otherwise returns the attribute value - - -idc.get_func_cmt(): - - Retrieve function comment - - @param ea: any address belonging to the function - @param repeatable: 1: get repeatable comment - 0: get regular comment - - @return: function comment string - - -idc.get_func_flags(): - - Retrieve function flags - - @param ea: any address belonging to the function - - @return: -1 - function doesn't exist otherwise returns the flags - - -idc.get_func_name(): - - Retrieve function name - - @param ea: any address belonging to the function - - @return: null string - function doesn't exist - otherwise returns function name - - -idc.get_func_off_str(): - - Convert address to 'funcname+offset' string - - @param ea: address to convert - - @return: if the address belongs to a function then return a string - formed as 'name+offset' where 'name' is a function name - 'offset' is offset within the function else return null string - - -idc.get_hash_long(): - - Gets the long value of a hash element. - - @param hash_id: The hash ID. - @param key: Key of an element. - - @return: the 32bit or 64bit value of the element, or 0 if no such - element. - - -idc.get_hash_string(): - - Gets the string value of a hash element. - - @param hash_id: The hash ID. - @param key: Key of an element. - - @return: the string value of the element, or None if no such - element. - - -idc.get_idb_path(): - - Get IDB full path - - This function returns full path of the current IDB database - - -idc.get_inf_attr(): - - - -idc.get_input_file_path(): - - get_input_file_path() -> ssize_t - - - Get full path of the input file. - - -idc.get_item_end(): - - get_item_end(ea) -> ea_t - - - Get the end address of the item at 'ea'. The returned address doesn't - belong to the current item. Unexplored bytes are counted as 1 byte - entities. - - @param ea (C++: ea_t) - - -idc.get_item_head(): - - get_item_head(ea) -> ea_t - - - Get the start address of the item at 'ea'. If there is no current - item, then 'ea' will be returned (see definition at the end of - 'bytes.hpp' source) - - @param ea (C++: ea_t) - - -idc.get_item_size(): - - Get size of instruction or data item in bytes - - @param ea: linear address - - @return: 1..n - - -idc.get_last_bmask(): - - get_last_bmask(id) -> bmask_t - - - Get last bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @return: the biggest bitmask for enum, or DEFMASK - - -idc.get_last_enum_member(): - - Get last constant in the enum - - @param enum_id: id of enum - @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) - - @return: value of constant or idaapi.BADNODE no constants are defined - All constants are sorted by their values - as unsigned longs. - - -idc.get_last_hash_key(): - - Get the last key in the hash. - - @param hash_id: The hash ID. - - @return: the key, 0 otherwise. - - -idc.get_last_index(): - - Get index of last existing array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - - @return: -1 if the array is empty, otherwise index of first array - element of given type. - - -idc.get_last_member(): - - Get offset of the last member of a structure - - @param sid: structure type ID - - @return: -1 if bad structure type ID is passed, - ida_idaapi.BADADDR if structure has no members, - otherwise returns offset of the last member. - - @note: IDA allows 'holes' between members of a - structure. It treats these 'holes' - as unnamed arrays of bytes. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_last_struc_idx(): - - get_last_struc_idx() -> uval_t - - - Get index of last structure. - - @return: BADADDR if no known structures, get_struc_qty() -1 - otherwise - - -idc.get_local_tinfo(): - - Get local type information as 'typeinfo' object - - @param ordinal: slot number (1...NumberOfLocalTypes) - @return: None on failure, or (type, fields) tuple. - - -idc.get_manual_insn(): - - get_manual_insn(ea) -> ssize_t - - - Retrieve the user-specified string for the manual instruction. - - @param ea: linear address of the instruction or data item (C++: ea_t) - @return: size of manual instruction or -1 - - -idc.get_member_cmt(): - - Get comment of a member - - @param sid: structure type ID - @param member_offset: member offset. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - @param repeatable: 1: get repeatable comment - 0: get regular comment - - @return: None if bad structure type ID is passed - or no such member in the structure - otherwise returns comment of the specified member. - - -idc.get_member_flag(): - - Get type of a member - - @param sid: structure type ID - @param member_offset: member offset. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - - @return: -1 if bad structure type ID is passed - or no such member in the structure - otherwise returns type of the member, see bit - definitions above. If the member type is a structure - then function GetMemberStrid() should be used to - get the structure type id. - - -idc.get_member_id(): - - @param sid: structure type ID - @param member_offset:. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - - @return: -1 if bad structure type ID is passed or there is - no member at the specified offset. - otherwise returns the member id. - - -idc.get_member_name(): - - Get name of a member of a structure - - @param sid: structure type ID - @param member_offset: member offset. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - - @return: None if bad structure type ID is passed - or no such member in the structure - otherwise returns name of the specified member. - - -idc.get_member_offset(): - - Get offset of a member of a structure by the member name - - @param sid: structure type ID - @param member_name: name of structure member - - @return: -1 if bad structure type ID is passed - or no such member in the structure - otherwise returns offset of the specified member. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_member_qty(): - - Get number of members of a structure - - @param sid: structure type ID - - @return: -1 if bad structure type ID is passed otherwise - returns number of members. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_member_size(): - - Get size of a member - - @param sid: structure type ID - @param member_offset: member offset. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - - @return: None if bad structure type ID is passed, - or no such member in the structure - otherwise returns size of the specified - member in bytes. - - -idc.get_member_strid(): - - Get structure id of a member - - @param sid: structure type ID - @param member_offset: member offset. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - @return: -1 if bad structure type ID is passed - or no such member in the structure - otherwise returns structure id of the member. - If the current member is not a structure, returns -1. - - -idc.get_min_spd_ea(): - - Return the address with the minimal spd (stack pointer delta) - If there are no SP change points, then return BADADDR. - - @param func_ea: function start - @return: BADDADDR - no such function - - -idc.get_module_name(): - - Get process module name - - @param base: the base address of the module - - @return: required info or None - - -idc.get_module_size(): - - Get process module size - - @param base: the base address of the module - - @return: required info or -1 - - -idc.get_name(): - - Get name at the specified address - - @param ea: linear address - @param gtn_flags: how exactly the name should be retrieved. - combination of GN_ bits - - @return: "" - byte has no name - - -idc.get_name_ea(): - - get_name_ea(_from, name) -> ea_t - - - Get address of the name. Dummy names (like byte_xxxx where xxxx are - hex digits) are parsed by this function to obtain the address. The - database is not consulted for them. This function works only with - regular names. - - @param _from: linear address where the name is used. if not - applicable, then should be BADADDR . (C++: ea_t) - @param name: any name in the program or NULL (C++: const char *) - @return: address of the name or BADADDR - - -idc.get_name_ea_simple(): - - Get linear address of a name - - @param name: name of program byte - - @return: address of the name - BADADDR - No such name - - -idc.get_next_bmask(): - - get_next_bmask(id, bmask) -> bmask_t - - - Get next bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @param bmask (C++: bmask_t) - @return: value of a bitmask with value higher than the specified - value, or DEFMASK - - -idc.get_next_cref_from(): - - get_next_cref_from(frm, current) -> ea_t - - - Get next instruction referenced from the specified instruction. - - @param current: linear address of current referenced instruction This - value is returned by get_first_cref_from() or - previous call to get_next_cref_from() functions. - (C++: ea_t) - @return: next referenced address or BADADDR . The lastXR variable - contains type of the reference. - - -idc.get_next_cref_to(): - - get_next_cref_to(to, current) -> ea_t - - - Get next instruction referencing to the specified instruction. - - @param to: linear address of referenced instruction (C++: ea_t) - @param current: linear address of current referenced instruction This - value is returned by get_first_cref_to() or previous - call to get_next_cref_to() functions. (C++: ea_t) - @return: linear address of the next referencing instruction or - BADADDR . The lastXR variable contains type of the - reference. - - -idc.get_next_dref_from(): - - get_next_dref_from(frm, current) -> ea_t - - - Get next data referenced from the specified address. - - @param current: linear address of current referenced data. This value - is returned by get_first_dref_from() or previous - call to get_next_dref_from() functions. (C++: ea_t) - @return: linear address of next data or BADADDR . The lastXR - variable contains type of the reference - - -idc.get_next_dref_to(): - - get_next_dref_to(to, current) -> ea_t - - - Get address of instruction/data referencing to the specified data - - @param to: linear address of referencing instruction or data (C++: - ea_t) - @param current: current linear address. This value is returned by - get_first_dref_to() or previous call to - get_next_dref_to() functions. (C++: ea_t) - @return: BADADDR if nobody refers to the specified data. The lastXR - variable contains type of the reference. - - -idc.get_next_enum_member(): - - Get next constant in the enum - - @param enum_id: id of enum - @param bmask: bitmask of the constant ordinary enums accept only ida_enum.DEFMASK as a bitmask - @param value: value of the current constant - - @return: value of a constant with value higher than the specified - value. idaapi.BADNODE no such constants exist. - All constants are sorted by their values as unsigned longs. - - -idc.get_next_fchunk(): - - Get next function chunk - - @param ea: any address - - @return: the starting address of the next function chunk or BADADDR - - @note: This function enumerates all chunks of all functions in the database - - -idc.get_next_fcref_from(): - - get_next_fcref_from(frm, current) -> ea_t - - -idc.get_next_fcref_to(): - - get_next_fcref_to(to, current) -> ea_t - - -idc.get_next_fixup_ea(): - - get_next_fixup_ea(ea) -> ea_t - - - Find next address with fixup information - - @param ea: current address (C++: ea_t) - @return: the next address with fixup information, or BADADDR - - -idc.get_next_func(): - - Find next function - - @param ea: any address belonging to the function - - @return: BADADDR - no more functions - otherwise returns the next function start address - - -idc.get_next_hash_key(): - - Get the next key in the hash. - - @param hash_id: The hash ID. - @param key: The current key. - - @return: the next key, 0 otherwise - - -idc.get_next_index(): - - Get index of the next existing array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - @param idx: Index of the current element. - - @return: -1 if no more elements, otherwise returns index of the - next array element of given type. - - -idc.get_next_module(): - - Enumerate process modules - - @param base: previous module's base address - - @return: next module's base address or None on failure - - -idc.get_next_offset(): - - Get next offset in a structure - - @param sid: structure type ID - @param offset: current offset - - @return: -1 if bad structure type ID is passed, - ida_idaapi.BADADDR if no (more) offsets in the structure, - otherwise returns next offset in a structure. - - @note: IDA allows 'holes' between members of a - structure. It treats these 'holes' - as unnamed arrays of bytes. - This function returns a member offset or a hole offset. - It will return size of the structure if input - 'offset' belongs to the last member of the structure. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_next_seg(): - - Get next segment - - @param ea: linear address - - @return: start of the next segment - BADADDR - no next segment - - -idc.get_next_struc_idx(): - - get_next_struc_idx(idx) -> uval_t - - - Get next struct index. - - @param idx (C++: uval_t) - @return: BADADDR if resulting index is out of bounds, otherwise idx++ - - -idc.get_numbered_type_name(): - - Retrieve a local type name - - @param ordinal: slot number (1...NumberOfLocalTypes) - - returns: local type name or None - - -idc.get_operand_type(): - - Get type of instruction operand - - @param ea: linear address of instruction - @param n: number of operand: - 0 - the first operand - 1 - the second operand - - @return: any of o_* constants or -1 on error - - -idc.get_operand_value(): - - Get number used in the operand - - This function returns an immediate number used in the operand - - @param ea: linear address of instruction - @param n: the operand number - - @return: value - operand is an immediate value => immediate value - operand has a displacement => displacement - operand is a direct memory ref => memory address - operand is a register => register number - operand is a register phrase => phrase number - otherwise => -1 - - -idc.get_ordinal_qty(): - - Get number of local types + 1 - - @return: value >= 1. 1 means that there are no local types. - - -idc.get_original_byte(): - - get_original_byte(ea) -> uint64 - - - Get original byte value (that was before patching). This function - works for wide byte processors too. - - @param ea (C++: ea_t) - - -idc.get_prev_bmask(): - - get_prev_bmask(id, bmask) -> bmask_t - - - Get prev bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @param bmask (C++: bmask_t) - @return: value of a bitmask with value lower than the specified value, - or DEFMASK - - -idc.get_prev_enum_member(): - - Get prev constant in the enum - - @param enum_id: id of enum - @param bmask : bitmask of the constant - ordinary enums accept only ida_enum.DEFMASK as a bitmask - @param value: value of the current constant - - @return: value of a constant with value lower than the specified - value. idaapi.BADNODE no such constants exist. - All constants are sorted by their values as unsigned longs. - - -idc.get_prev_fchunk(): - - Get previous function chunk - - @param ea: any address - - @return: the starting address of the function chunk or BADADDR - - @note: This function enumerates all chunks of all functions in the database - - -idc.get_prev_fixup_ea(): - - get_prev_fixup_ea(ea) -> ea_t - - - Find previous address with fixup information - - @param ea: current address (C++: ea_t) - @return: the previous address with fixup information, or BADADDR - - -idc.get_prev_func(): - - Find previous function - - @param ea: any address belonging to the function - - @return: BADADDR - no more functions - otherwise returns the previous function start address - - -idc.get_prev_hash_key(): - - Get the previous key in the hash. - - @param hash_id: The hash ID. - @param key: The current key. - - @return: the previous key, 0 otherwise - - -idc.get_prev_index(): - - Get index of the previous existing array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - @param idx: Index of the current element. - - @return: -1 if no more elements, otherwise returns index of the - previous array element of given type. - - -idc.get_prev_offset(): - - Get previous offset in a structure - - @param sid: structure type ID - @param offset: current offset - - @return: -1 if bad structure type ID is passed, - ida_idaapi.BADADDR if no (more) offsets in the structure, - otherwise returns previous offset in a structure. - - @note: IDA allows 'holes' between members of a - structure. It treats these 'holes' - as unnamed arrays of bytes. - This function returns a member offset or a hole offset. - It will return size of the structure if input - 'offset' is bigger than the structure size. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_prev_struc_idx(): - - get_prev_struc_idx(idx) -> uval_t - - - Get previous struct index. - - @param idx (C++: uval_t) - @return: BADADDR if resulting index is negative, otherwise idx - 1 - - -idc.get_process_state(): - - get_process_state() -> int - - - Return the state of the currently debugged process. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @return: one of Debugged process states - - -idc.get_processes(): - - get_processes(proclist) -> ssize_t - - - Take a snapshot of running processes and return their description. - \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - @param proclist (C++: procinfo_vec_t *) - @return: number of processes or -1 on error - - -idc.get_qword(): - - get_qword(ea) -> uint64 - - - Get one qword (64-bit) of the program at 'ea'. This function takes - into account order of bytes specified in \inf{is_be()} This function - works only for 8bit byte processors. - - @param ea (C++: ea_t) - - -idc.get_reg_value(): - - Get register value - - @param name: the register name - - @note: The debugger should be running. otherwise the function fails - the register name should be valid. - It is not necessary to use this function to get register values - because a register name in the script will do too. - - @return: register value (integer or floating point) - - -idc.get_ret_tev_return(): - - get_ret_tev_return(n) -> ea_t - - - Get the return address from a function return trace event. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a function return event. - - -idc.get_root_filename(): - - get_root_filename() -> ssize_t - - - Get file name only of the input file. - - -idc.get_screen_ea(): - - get_screen_ea() -> ea_t - - - Get the address at the screen cursor ( 'ui_screenea' ) - - -idc.get_segm_attr(): - - Get segment attribute - - @param segea: any address within segment - @param attr: one of SEGATTR_... constants - - -idc.get_segm_by_sel(): - - Get segment by segment base - - @param base: segment base paragraph or selector - - @return: linear address of the start of the segment or BADADDR - if no such segment - - -idc.get_segm_end(): - - Get end address of a segment - - @param ea: any address in the segment - - @return: end of segment (an address past end of the segment) - BADADDR - the specified address doesn't belong to any segment - - -idc.get_segm_name(): - - Get name of a segment - - @param ea: any address in the segment - - @return: "" - no segment at the specified address - - -idc.get_segm_start(): - - Get start address of a segment - - @param ea: any address in the segment - - @return: start of segment - BADADDR - the specified address doesn't belong to any segment - - -idc.get_source_linnum(): - - get_source_linnum(ea) -> uval_t - - -idc.get_sourcefile(): - - get_sourcefile(ea, bounds=None) -> char const * - - - Get name of source file occupying the given address. - - @param ea: linear address (C++: ea_t) - @param bounds: pointer to the output buffer with the address range for - the current file. May be NULL. (C++: range_t *) - @return: NULL if source file information is not found, otherwise - returns pointer to file name - - -idc.get_sp_delta(): - - Get modification of SP made by the instruction - - @param ea: end address of the instruction - i.e.the last address of the instruction+1 - - @return: Get modification of SP made at the specified location - If the specified location doesn't contain a SP change point, return 0 - Otherwise return delta of SP modification - - -idc.get_spd(): - - Get current delta for the stack pointer - - @param ea: end address of the instruction - i.e.the last address of the instruction+1 - - @return: The difference between the original SP upon - entering the function and SP for the specified address - - -idc.get_sreg(): - - Get value of segment register at the specified address - - @param ea: linear address - @param reg: name of segment register - - @return: the value of the segment register or -1 on error - - @note: The segment registers in 32bit program usually contain selectors, - so to get paragraph pointed to by the segment register you need to - call sel2para() function. - - -idc.get_step_trace_options(): - - get_step_trace_options() -> int - - - Get current step tracing options. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @return: Step trace options - - -idc.get_str_type(): - - Get string type - - @param ea: linear address - - @return: One of STRTYPE_... constants - - -idc.get_strlit_contents(): - - Get string contents - @param ea: linear address - @param length: string length. -1 means to calculate the max string length - @param strtype: the string type (one of STRTYPE_... constants) - - @return: string contents or empty string - - -idc.get_struc_by_idx(): - - get_struc_by_idx(idx) -> tid_t - - - Get struct id by struct number. - - - @param idx (C++: uval_t) - - -idc.get_struc_cmt(): - - get_struc_cmt(id, repeatable) -> ssize_t - - - Get struct comment. - - - @param id (C++: tid_t) - @param repeatable (C++: bool) - - -idc.get_struc_id(): - - get_struc_id(name) -> tid_t - - - Get struct id by name. - - - @param name (C++: const char *) - - -idc.get_struc_idx(): - - get_struc_idx(id) -> uval_t - - - Get internal number of the structure. - - - @param id (C++: tid_t) - - -idc.get_struc_name(): - - get_struc_name(id) -> ssize_t - - - Get struct name by id. - - - @param id (C++: tid_t) - - -idc.get_struc_qty(): - - get_struc_qty() -> size_t - - - Get number of known structures. - - -idc.get_struc_size(): - - get_struc_size(sptr) -> asize_t - get_struc_size(id) -> asize_t - - - Get struct size (also see 'get_struc_size(tid_t)' ) - - - @param sptr (C++: const struc_t *) - - -idc.get_tev_ea(): - - get_tev_ea(n) -> ea_t - - -idc.get_tev_qty(): - - get_tev_qty() -> int - - - Get number of trace events available in trace buffer. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - -idc.get_tev_tid(): - - get_tev_tid(n) -> int - - -idc.get_tev_type(): - - get_tev_type(n) -> int - - -idc.get_thread_qty(): - - get_thread_qty() -> int - - - Get number of threads. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - -idc.get_tinfo(): - - Get type information of function/variable as 'typeinfo' object - - @param ea: the address of the object - @return: None on failure, or (type, fields) tuple. - - -idc.get_trace_file_desc(): - - get_trace_file_desc(filename) -> bool - - - Get the file header of the specified trace file. - - - @param filename (C++: const char *) - - -idc.get_type(): - - Get type of function/variable - - @param ea: the address of the object - - @return: type string or None if failed - - -idc.get_wide_byte(): - - get_wide_byte(ea) -> uint64 - - - Get one wide byte of the program at 'ea'. Some processors may access - more than 8bit quantity at an address. These processors have 32-bit - byte organization from the IDA's point of view. - - @param ea (C++: ea_t) - - -idc.get_wide_dword(): - - get_wide_dword(ea) -> uint64 - - - Get two wide words (4 'bytes') of the program at 'ea'. Some processors - may access more than 8bit quantity at an address. These processors - have 32-bit byte organization from the IDA's point of view. This - function takes into account order of bytes specified in - \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 - - @param ea (C++: ea_t) - - -idc.get_wide_word(): - - get_wide_word(ea) -> uint64 - - - Get one wide word (2 'byte') of the program at 'ea'. Some processors - may access more than 8bit quantity at an address. These processors - have 32-bit byte organization from the IDA's point of view. This - function takes into account order of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - - -idc.get_xref_type(): - - Return type of the last xref obtained by - [RD]first/next[B0] functions. - - @return: constants fl_* or dr_* - - -idc.getn_enum(): - - getn_enum(n) -> enum_t - - - Get enum by its ordinal number (0..n). - - - @param n (C++: size_t) - - -idc.getn_thread(): - - getn_thread(n) -> thid_t - - - Get the ID of a thread. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: - int) - @return: NO_THREAD if the thread doesn't exist. - - -idc.getn_thread_name(): - - getn_thread_name(n) -> char const * - - - Get the NAME of a thread \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 - for the current thread (C++: int) - @return: thread name or NULL if the thread doesn't exist. - - -idc.guess_type(): - - Guess type of function/variable - - @param ea: the address of the object, can be the structure member id too - - @return: type string or None if failed - - -idc.idadir(): - - Get IDA directory - - This function returns the directory where IDA.EXE resides - - -idc.import_type(): - - Copy information from type library to database - Copy structure, union, or enum definition from the type library - to the IDA database. - - @param idx: the position of the new type in the list of - types (structures or enums) -1 means at the end of the list - @param type_name: name of type to copy - - @return: BADNODE-failed, otherwise the type id (structure id or enum id) - - -idc.is_bf(): - - is_bf(id) -> bool - - - Is enum a bitfield? (otherwise - plain enum, no bitmasks except for - 'DEFMASK' are allowed) - - @param id (C++: enum_t) - - -idc.is_event_handled(): - - Is the debug event handled? - - @return: boolean - - -idc.is_loaded(): - Is the byte initialized? - -idc.is_union(): - - Is a structure a union? - - @param sid: structure type ID - - @return: 1: yes, this is a union id - 0: no - - @note: Unions are a special kind of structures - - -idc.is_valid_trace_file(): - - is_valid_trace_file(filename) -> bool - - - Is the specified file a valid trace file for the current database? - - - @param filename (C++: const char *) - - -idc.jumpto(): - - jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool - jumpto(custom_viewer, place, x, y) -> bool - - - Jump to the specified address ( 'ui_jumpto' ). - - @param ea: destination (C++: ea_t) - @param opnum: -1: don't change x coord (C++: int) - @param uijmp_flags: Jump flags (C++: int) - @return: success - - -idc.load_and_run_plugin(): - - load_and_run_plugin(name, arg) -> bool - - - Load & run a plugin. - - - @param name (C++: const char *) - @param arg (C++: size_t) - - -idc.load_debugger(): - - load_debugger(dbgname, use_remote) -> bool - - -idc.load_trace_file(): - - load_trace_file(filename) -> bool - - - Load a recorded trace file in the trace window. If the call succeeds - and 'buf' is not null, the description of the trace stored in the - binary trace file will be returned in 'buf' - - @param filename (C++: const char *) - - -idc.make_array(): - - Create an array. - - @param ea: linear address - @param nitems: size of array in items - - @note: This function will create an array of the items with the same type as - the type of the item at 'ea'. If the byte at 'ea' is undefined, then - this function will create an array of bytes. - - -idc.move_segm(): - - 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 - - @param ea: any address within the segment to move - @param to: new segment start address - @param flags: combination MFS_... constants - - @returns: MOVE_SEGM_... error code - - -idc.msg(): - - msg(o) -> PyObject * - - - Display an UTF-8 string in the message window - - The result of the stringification of the arguments - will be treated as an UTF-8 string. - - @param message: message to print (formatting is done in Python) - - This function can be used to debug IDAPython scripts - - -idc.next_addr(): - - next_addr(ea) -> ea_t - - - Get next address in the program (i.e. next address which has flags). - - @param ea (C++: ea_t) - @return: BADADDR if no such address exist. - - -idc.next_func_chunk(): - - Get the next function chunk of the specified function - - @param funcea: any address in the function - @param tailea: any address in the current chunk - - @return: the starting address of the next function chunk or BADADDR - - @note: This function returns the next chunk of the specified function - - -idc.next_head(): - - Get next defined item (instruction or data) in the program - - @param ea: linear address to start search from - @param maxea: the search will stop at the address - maxea is not included in the search range - - @return: BADADDR - no (more) defined items - - -idc.next_not_tail(): - - next_not_tail(ea) -> ea_t - - - Get address of next non-tail byte. - - @param ea (C++: ea_t) - @return: BADADDR if none exists. - - -idc.op_bin(): - - op_bin(ea, n) -> bool - - - set op type to 'bin_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_chr(): - - op_chr(ea, n) -> bool - - - set op type to 'char_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_dec(): - - op_dec(ea, n) -> bool - - - set op type to 'dec_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_enum(): - - op_enum(ea, n, id, serial) -> bool - - - Set operand representation to be 'enum_t'. If applied to unexplored - bytes, converts them to 16/32bit word data - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @param id: id of enum (C++: enum_t) - @param serial: the serial number of the constant in the enumeration, - usually 0. the serial numbers are used if the - enumeration contains several constants with the same - value (C++: uchar) - @return: success - - -idc.op_flt(): - - op_flt(ea, n) -> bool - - - set op type to 'flt_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_hex(): - - op_hex(ea, n) -> bool - - - set op type to 'hex_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_man(): - - set_forced_operand(ea, n, op) -> bool - - - Set forced operand. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, 2) (C++: int) - @param op: text of operand NULL: do nothing (return 0) "" : delete - forced operand (C++: const char *) - @return: success - - -idc.op_num(): - - op_num(ea, n) -> bool - - - set op type to 'num_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_oct(): - - op_oct(ea, n) -> bool - - - set op type to 'oct_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_offset(): - - op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int - - - See 'op_offset_ex()' - - - @param ea (C++: ea_t) - @param n (C++: int) - @param type (C++: reftype_t) - @param target (C++: ea_t) - @param base (C++: ea_t) - @param tdelta (C++: adiff_t) - - -idc.op_offset_high16(): - - Convert operand to a high offset - High offset is the upper 16bits of an offset. - This type is used by TMS320C6 processors (and probably by other - RISC processors too) - - @param ea: linear address - @param n: number of operand - - 0 - the first operand - - 1 - the second, third and all other operands - - -1 - all operands - @param target: the full value (all 32bits) of the offset - - -idc.op_plain_offset(): - - Convert operand to an offset - (for the explanations of 'ea' and 'n' please see op_bin()) - - Example: - ======== - - seg000:2000 dw 1234h - - and there is a segment at paragraph 0x1000 and there is a data item - within the segment at 0x1234: - - seg000:1234 MyString db 'Hello, world!',0 - - Then you need to specify a linear address of the segment base to - create a proper offset: - - op_plain_offset(["seg000",0x2000],0,0x10000); - - and you will have: - - seg000:2000 dw offset MyString - - Motorola 680x0 processor have a concept of "outer offsets". - If you want to create an outer offset, you need to combine number - of the operand with the following bit: - - Please note that the outer offsets are meaningful only for - Motorola 680x0. - - @param ea: linear address - @param n: number of operand - - 0 - the first operand - - 1 - the second, third and all other operands - - -1 - all operands - @param base: base of the offset as a linear address - If base == BADADDR then the current operand becomes non-offset - - -idc.op_seg(): - - op_seg(ea, n) -> bool - - - Set operand representation to be 'segment'. If applied to unexplored - bytes, converts them to 16/32bit word data - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: success - - -idc.op_stkvar(): - - op_stkvar(ea, n) -> bool - - - Set operand representation to be 'stack variable'. Should be applied - to an instruction within a function. Should be applied after creating - a stack var using 'insn_t::create_stkvar()' . - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: success - - -idc.op_stroff(): - - Convert operand to an offset in a structure - - @param ea: linear address - @param n: number of operand - - 0 - the first operand - - 1 - the second, third and all other operands - - -1 - all operands - @param strid: id of a structure type - @param delta: struct offset delta. usually 0. denotes the difference - between the structure base and the pointer into the structure. - - - -idc.parse_decl(): - - Parse type declaration - - @param inputtype: file name or C declarations (depending on the flags) - @param flags: combination of PT_... constants or 0 - - @return: None on failure or (name, type, fields) tuple - - -idc.parse_decls(): - - Parse type declarations - - @param inputtype: file name or C declarations (depending on the flags) - @param flags: combination of PT_... constants or 0 - - @return: number of parsing errors (0 no errors) - - -idc.patch_byte(): - - patch_byte(ea, x) -> bool - - - Patch a byte of the program. The original value of the byte is saved - and can be obtained by 'get_original_byte()' . This function works for - wide byte processors too. - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -idc.patch_dbg_byte(): - - put_dbg_byte(ea, x) -> bool - - - Change one byte of the debugged process memory. - - @param ea: linear address (C++: ea_t) - @param x: byte value (C++: uint32) - @return: true if the process memory has been modified - - -idc.patch_dword(): - - patch_dword(ea, x) -> bool - - - Patch a dword of the program. The original value of the dword is saved - and can be obtained by 'get_original_dword()' . This function DOESN'T - work for wide byte processors. This function takes into account order - of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -idc.patch_qword(): - - patch_qword(ea, x) -> bool - - - Patch a qword of the program. The original value of the qword is saved - and can be obtained by 'get_original_qword()' . This function DOESN'T - work for wide byte processors. This function takes into account order - of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -idc.patch_word(): - - patch_word(ea, x) -> bool - - - Patch a word of the program. The original value of the word is saved - and can be obtained by 'get_original_word()' . This function works for - wide byte processors too. This function takes into account order of - bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -idc.plan_and_wait(): - - Perform full analysis of the range - - @param sEA: starting linear address - @param eEA: ending linear address (excluded) - @param final_pass: make the final pass over the specified range - - @return: 1-ok, 0-Ctrl-Break was pressed. - - -idc.plan_to_apply_idasgn(): - - plan_to_apply_idasgn(fname) -> int - - - Add a signature file to the list of planned signature files. - - @param fname: file name. should not contain directory part. (C++: - const char *) - @return: 0 if failed, otherwise number of planned (and applied) - signatures - - -idc.prev_addr(): - - prev_addr(ea) -> ea_t - - - Get previous address in the program. - - @param ea (C++: ea_t) - @return: BADADDR if no such address exist. - - -idc.prev_head(): - - Get previous defined item (instruction or data) in the program - - @param ea: linear address to start search from - @param minea: the search will stop at the address - minea is included in the search range - - @return: BADADDR - no (more) defined items - - -idc.prev_not_tail(): - - prev_not_tail(ea) -> ea_t - - - Get address of previous non-tail byte. - - @param ea (C++: ea_t) - @return: BADADDR if none exists. - - -idc.print_decls(): - - Print types in a format suitable for use in a header file - - @param ordinals: comma-separated list of type ordinals - @param flags: combination of PDF_... constants or 0 - - @return: string containing the type definitions - - -idc.print_insn_mnem(): - - Get instruction mnemonics - - @param ea: linear address of instruction - - @return: "" - no instruction at the specified location - - @note: this function may not return exactly the same mnemonics - as you see on the screen. - - -idc.print_operand(): - - Get operand of an instruction or data - - @param ea: linear address of the item - @param n: number of operand: - 0 - the first operand - 1 - the second operand - - @return: the current text representation of operand or "" - - -idc.process_config_line(): - - Parse one or more ida.cfg config directives - @param directive: directives to process, for example: PACK_DATABASE=2 - - @note: If the directives are erroneous, a fatal error will be generated. - The settings are permanent: effective for the current session and the next ones - - -idc.process_ui_action(): - - Invokes an IDA UI action by name - - @param name: Command name - @param flags: Reserved. Must be zero - @return: Boolean - - -idc.put_bookmark(): - - mark_position(ea, lnnum, x, y, slot, comment) - - -idc.qexit(): - - qexit(code) - - - Call qatexit functions, shut down UI and kernel, and exit. - - @param code: exit code (C++: int) - - -idc.qsleep(): - - qsleep the specified number of milliseconds - This function suspends IDA for the specified amount of time - - @param milliseconds: time to sleep - - -idc.read_dbg_byte(): - - Get value of program byte using the debugger memory - - @param ea: linear address - @return: The value or None on failure. - - -idc.read_dbg_dword(): - - Get value of program double-word using the debugger memory - - @param ea: linear address - @return: The value or None on failure. - - -idc.read_dbg_memory(): - - dbg_read_memory(py_ea, py_sz) -> PyObject * - - - Reads from the debugee's memory at the specified ea - @return: - - The read buffer (as a string) - - Or None on failure - - -idc.read_dbg_qword(): - - Get value of program quadro-word using the debugger memory - - @param ea: linear address - @return: The value or None on failure. - - -idc.read_dbg_word(): - - Get value of program word using the debugger memory - - @param ea: linear address - @return: The value or None on failure. - - -idc.read_selection_end(): - - Get end address of the selected range - - @return: BADADDR - the user has not selected an range - - -idc.read_selection_start(): - - Get start address of the selected range - returns BADADDR - the user has not selected an range - - -idc.rebase_program(): - - rebase_program(delta, flags) -> int - - - Rebase the whole program by 'delta' bytes. - - @param delta: number of bytes to move the program (C++: adiff_t) - @param flags: Move segment flags it is recommended to use - MSF_FIXONCE so that the loader takes care of global - variables it stored in the database (C++: int) - @return: Move segment result codes - - -idc.recalc_spd(): - - recalc_spd(cur_ea) -> bool - - - Recalculate SP delta for an instruction that stops execution. The next - instruction is not reached from the current instruction. We need to - recalculate SP for the next instruction.This function will create a - new automatic SP register change point if necessary. It should be - called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the - current instruction doesn't pass the execution flow to the next - instruction. - - @param cur_ea: linear address of the current instruction (C++: ea_t) - - -idc.refresh_debugger_memory(): - - refresh_debugger_memory() -> PyObject * - - - Refreshes the debugger memory - @return: Nothing - - -idc.refresh_idaview_anyway(): - - refresh_idaview_anyway() - - - Refresh all disassembly views ( 'ui_refresh' ), forces an immediate - refresh. Please consider 'request_refresh()' instead - - -idc.refresh_lists(): - - refresh_choosers() - - -idc.remove_fchunk(): - - Remove a function chunk from the function - - @param funcea: any address in the function - @param tailea: any address in the function chunk to remove - - @return: 0 if failed, 1 if success - - -idc.rename_array(): - - Rename array, by its ID. - - @param id: The ID of the array to rename. - @param newname: The new name of the array. - - @return: 1 in case of success, 0 otherwise - - -idc.rename_entry(): - - rename_entry(ord, name, flags=0x0) -> bool - - - Rename entry point. - - @param ord: ordinal number of the entry point (C++: uval_t) - @param name: name of entry point. If the specified location already - has a name, the old name will be appended to a repeatable - comment. (C++: const char *) - @param flags: See AEF_* (C++: int) - @return: success - - -idc.resume_thread(): - - resume_thread(tid) -> int - - - Resume thread. \sq{Type, Synchronous function - available as request, - Notification, none (synchronous function)} - - @param tid: thread id (C++: thid_t) - - -idc.retrieve_input_file_md5(): - - retrieve_input_file_md5() -> bool - - - Get input file md5. - - -idc.rotate_left(): - - Rotate a value to the left (or right) - - @param value: value to rotate - @param count: number of times to rotate. negative counter means - rotate to the right - @param nbits: number of bits to rotate - @param offset: offset of the first bit to rotate - - @return: the value with the specified field rotated - all other bits are not modified - - -idc.run_to(): - - run_to(ea, pid=pid_t(-1), tid=0) -> bool - - - Execute the process until the given address is reached. If no process - is active, a new process is started. Technically, the debugger sets up - a temporary breakpoint at the given address, and continues (or starts) - the execution of the whole process. So, all threads continue their - execution! \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_run_to' } - - @param ea: target address (C++: ea_t) - @param pid: not used yet. please do not specify this parameter. (C++: - pid_t) - @param tid: not used yet. please do not specify this parameter. (C++: - thid_t) - - -idc.save_database(): - - Save current database to the specified idb file - - @param idbname: name of the idb file. if empty, the current idb - file will be used. - @param flags: combination of ida_loader.DBFL_... bits or 0 - - -idc.save_trace_file(): - - save_trace_file(filename, description) -> bool - - - Save the current trace in the specified file. - - - @param filename (C++: const char *) - @param description (C++: const char *) - - -idc.sel2para(): - - Get a selector value - - @param sel: the selector number - - @return: selector value if found - otherwise the input value (sel) - - @note: selector values are always in paragraphs - - -idc.select_thread(): - - select_thread(tid) -> bool - - - Select the given thread as the current debugged thread. All thread - related execution functions will work on this thread. The process must - be suspended to select a new thread. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param tid: ID of the thread to select (C++: thid_t) - @return: false if the thread doesn't exist. - - -idc.selector_by_name(): - - Get segment selector by name - - @param segname: name of segment - - @return: segment selector or BADADDR - - -idc.send_dbg_command(): - Sends a command to the debugger module and returns the output string. - An exception will be raised if the debugger is not running or the current debugger does not export - the 'send_dbg_command' IDC command. - - -idc.set_array_long(): - - Sets the long value of an array element. - - @param array_id: The array ID. - @param idx: Index of an element. - @param value: 32bit or 64bit value to store in the array - - @return: 1 in case of success, 0 otherwise - - -idc.set_array_params(): - - Set array representation format - - @param ea: linear address - @param flags: combination of AP_... constants or 0 - @param litems: number of items per line. 0 means auto - @param align: element alignment - - -1: do not align - - 0: automatic alignment - - other values: element width - - @return: 1-ok, 0-failure - - -idc.set_array_string(): - - Sets the string value of an array element. - - @param array_id: The array ID. - @param idx: Index of an element. - @param value: String value to store in the array - - @return: 1 in case of success, 0 otherwise - - -idc.set_bmask_cmt(): - - Set bitmask comment (only for bitfields) - - @param enum_id: id of enum - @param bmask: bitmask of the constant - @param cmt: comment - repeatable - type of comment, 0-regular, 1-repeatable - - @return: 1-ok, 0-failed - - -idc.set_bmask_name(): - - Set bitmask name (only for bitfields) - - @param enum_id: id of enum - @param bmask: bitmask of the constant - @param name: name of bitmask - - @return: 1-ok, 0-failed - - -idc.set_bpt_attr(): - - modifiable characteristics of a breakpoint - - @param address: any address in the breakpoint range - @param bptattr: the attribute code, one of BPTATTR_* constants - BPTATTR_CND is not allowed, see set_bpt_cond() - @param value: the attibute value - - @return: success - - -idc.set_bpt_cond(): - - Set breakpoint condition - - @param ea: any address in the breakpoint range - @param cnd: breakpoint condition - @param is_lowcnd: 0 - regular condition, 1 - low level condition - - @return: success - - -idc.set_cmt(): - - set_cmt(ea, comm, rptble) -> bool - - - Set an indented comment. - - @param ea: linear address (C++: ea_t) - @param comm: comment string NULL: do nothing (return 0) "" : - delete comment (C++: const char *) - @param rptble: is repeatable? (C++: bool) - @return: success - - -idc.set_color(): - - Set item color - - @param ea: address of the item - @param what: type of the item (one of CIC_* constants) - @param color: new color code in RGB (hex 0xBBGGRR) - - @return: success (True or False) - - -idc.set_debugger_event_cond(): - - set_debugger_event_cond(nonnul_cond) - - -idc.set_debugger_options(): - - set_debugger_options(options) -> uint - - - Set debugger options. Replaces debugger options with the specification - combination 'Debugger options' - - @param options (C++: uint) - @return: the old debugger options - - -idc.set_default_sreg_value(): - - Set default segment register value for a segment - - @param ea: any address in the segment - if no segment is present at the specified address - then all segments will be affected - @param reg: name of segment register - @param value: default value of the segment register. -1-undefined. - - -idc.set_enum_bf(): - - set_enum_bf(id, bf) -> bool - - - Set 'bitfield' bit of enum (i.e. convert it to a bitfield) - - - @param id (C++: enum_t) - @param bf (C++: bool) - - -idc.set_enum_cmt(): - - set_enum_cmt(id, cmt, repeatable) -> bool - - - Set comment for enum type. - - - @param id (C++: enum_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -idc.set_enum_flag(): - - set_enum_flag(id, flag) -> bool - - - Set data representation flags. - - - @param id (C++: enum_t) - @param flag (C++: flags_t) - - -idc.set_enum_idx(): - - set_enum_idx(id, idx) -> bool - - - Set serial number of enum. Also see 'get_enum_idx()' . - - @param id (C++: enum_t) - @param idx (C++: size_t) - - -idc.set_enum_member_cmt(): - - set_enum_member_cmt(id, cmt, repeatable) -> bool - - - Set comment for enum member. - - - @param id (C++: const_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -idc.set_enum_member_name(): - - set_enum_member_name(id, name) -> bool - - - Set name of enum member. - - - @param id (C++: const_t) - @param name (C++: const char *) - - -idc.set_enum_name(): - - set_enum_name(id, name) -> bool - - - Set name of enum type. - - - @param id (C++: enum_t) - @param name (C++: const char *) - - -idc.set_enum_width(): - - set_enum_width(id, width) -> bool - - - See comment for 'get_enum_width()' - - - @param id (C++: enum_t) - @param width (C++: int) - - -idc.set_fchunk_attr(): - - Set a function chunk attribute - - @param ea: any address in the chunk - @param attr: only FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER - @param value: desired value - - @return: 0 if failed, 1 if success - - -idc.set_fixup(): - - Set fixup information - - @param ea: address to set fixup information about - @param fixuptype: fixup type. see get_fixup_target_type() - for possible fixup types. - @param fixupflags: fixup flags. see get_fixup_target_flags() - for possible fixup types. - @param targetsel: target selector - @param targetoff: target offset - @param displ: displacement - - @return: none - - -idc.set_frame_size(): - - Make function frame - - @param ea: any address belonging to the function - @param lvsize: size of function local variables - @param frregs: size of saved registers - @param argsize: size of function arguments - - @return: ID of function frame or -1 - If the function did not have a frame, the frame - will be created. Otherwise the frame will be modified - - -idc.set_func_attr(): - - Set a function attribute - - @param ea: any address belonging to the function - @param attr: one of FUNCATTR_... constants - @param value: new value of the attribute - - @return: 1-ok, 0-failed - - -idc.set_func_cmt(): - - Set function comment - - @param ea: any address belonging to the function - @param cmt: a function comment line - @param repeatable: 1: get repeatable comment - 0: get regular comment - - -idc.set_func_end(): - - set_func_end(ea, newend) -> bool - - - Move function chunk end address. - - @param ea: any address in the function (C++: ea_t) - @param newend: new end address of the function (C++: ea_t) - @return: success - - -idc.set_func_flags(): - - Change function flags - - @param ea: any address belonging to the function - @param flags: see get_func_flags() for explanations - - @return: !=0 - ok - - -idc.set_hash_long(): - - Sets the long value of a hash element. - - @param hash_id: The hash ID. - @param key: Key of an element. - @param value: 32bit or 64bit value to store in the hash - - @return: 1 in case of success, 0 otherwise - - -idc.set_hash_string(): - - Sets the string value of a hash element. - - @param hash_id: The hash ID. - @param key: Key of an element. - @param value: string value to store in the hash - - @return: 1 in case of success, 0 otherwise - - -idc.set_ida_state(): - - set_ida_state(st) -> idastate_t - - - Change IDA status indicator value - - @param st: - new indicator status (C++: idastate_t) - @return: old indicator status - - -idc.set_local_type(): - - Parse one type declaration and store it in the specified slot - - @param ordinal: slot number (1...NumberOfLocalTypes) - -1 means allocate new slot or reuse the slot - of the existing named type - @param input: C declaration. Empty input empties the slot - @param flags: combination of PT_... constants or 0 - - @return: slot number or 0 if error - - -idc.set_manual_insn(): - - set_manual_insn(ea, manual_insn) - - - Set manual instruction string. - - @param ea: linear address of the instruction or data item (C++: ea_t) - @param manual_insn: "" - delete manual string. NULL - do nothing (C++: - const char *) - - -idc.set_member_cmt(): - - Change structure member comment - - @param sid: structure type ID - @param member_offset: offset of the member - @param comment: new comment of the structure member - @param repeatable: 1: change repeatable comment - 0: change regular comment - - @return: != 0 - ok - - -idc.set_member_name(): - - Change structure member name - - @param sid: structure type ID - @param member_offset: offset of the member - @param name: new name of the member - - @return: != 0 - ok. - - -idc.set_member_type(): - - Change structure member type - - @param sid: structure type ID - @param member_offset: offset of the member - @param flag: new type of the member. Should be one of - FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA - @param typeid: if is_struct(flag) then typeid specifies the structure id for the member - if is_off0(flag) then typeid specifies the offset base. - if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). - if is_stroff(flag) then typeid specifies the structure id - if is_enum(flag) then typeid specifies the enum id - if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) - Otherwise typeid should be -1. - @param nitems: number of items in the member - - @param target: target address of the offset expr. You may specify it as - -1, ida will calculate it itself - @param tdelta: offset target delta. usually 0 - @param reftype: see REF_... definitions - - @note: The remaining arguments are allowed only if is_off0(flag) and you want - to specify a complex offset expression - - @return: !=0 - ok. - - -idc.set_name(): - - Rename an address - - @param ea: linear address - @param name: new name of address. If name == "", then delete old name - @param flags: combination of SN_... constants - - @return: 1-ok, 0-failure - - -idc.set_processor_type(): - - set_processor_type(procname, level) -> bool - - - Set target processor type. Once a processor module is loaded, it - cannot be replaced until we close the idb. - - @param procname: name of processor type (one of names present in - \ph{psnames}) (C++: const char *) - @param level: SETPROC_ (C++: setproc_level_t) - @return: success - - -idc.set_reg_value(): - - Set register value - - @param name: the register name - @param value: new register value - - @note: The debugger should be running - It is not necessary to use this function to set register values. - A register name in the left side of an assignment will do too. - - -idc.set_remote_debugger(): - - set_remote_debugger(host, _pass, port=-1) - - - Set remote debugging options. Should be used before starting the - debugger. - - @param host: If empty, IDA will use local debugger. If NULL, the host - will not be set. (C++: const char *) - @param port: If -1, the default port number will be used (C++: int) - - -idc.set_root_filename(): - - set_root_filename(file) - - - Set full path of the input file. - - - @param file (C++: const char *) - - -idc.set_segm_addressing(): - - Change segment addressing - - @param ea: any address in the segment - @param bitness: 0: 16bit, 1: 32bit, 2: 64bit - - @return: success (boolean) - - -idc.set_segm_alignment(): - - Change alignment of the segment - - @param ea: any address in the segment - @param alignment: new alignment of the segment (one of the sa... constants) - - @return: success (boolean) - - -idc.set_segm_attr(): - - Set segment attribute - - @param segea: any address within segment - @param attr: one of SEGATTR_... constants - - @note: Please note that not all segment attributes are modifiable. - Also some of them should be modified using special functions - like set_segm_addressing, etc. - - -idc.set_segm_class(): - - Change class of the segment - - @param ea: any address in the segment - @param segclass: new class of the segment - - @return: success (boolean) - - -idc.set_segm_combination(): - - Change combination of the segment - - @param segea: any address in the segment - @param comb: new combination of the segment (one of the sc... constants) - - @return: success (boolean) - - -idc.set_segm_name(): - - Change name of the segment - - @param ea: any address in the segment - @param name: new name of the segment - - @return: success (boolean) - - -idc.set_segm_type(): - - Set segment type - - @param segea: any address within segment - @param segtype: new segment type: - - @return: !=0 - ok - - -idc.set_segment_bounds(): - - Change segment boundaries - - @param ea: any address in the segment - @param startea: new start address of the segment - @param endea: new end address of the segment - @param flags: combination of SEGMOD_... flags - - @return: boolean success - - -idc.set_selector(): - - set_selector(selector, paragraph) -> int - - - Set mapping of selector to a paragraph. You should call this - functionbeforecreating a segment which uses the selector, otherwise - the creation of the segment will fail. - - @param selector: number of selector to map if selector == BADSEL , - then return 0 (fail) if the selector has had a - mapping, old mapping is destroyed if the selector - number is equal to paragraph value, then the mapping - is destroyed because we don't need to keep trivial - mappings. (C++: sel_t) - @param paragraph: paragraph to map selector (C++: ea_t) - - -idc.set_source_linnum(): - - set_source_linnum(ea, lnnum) - - -idc.set_step_trace_options(): - - set_step_trace_options(options) - - - Modify step tracing options. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param options (C++: int) - - -idc.set_storage_type(): - - change_storage_type(start_ea, end_ea, stt) -> error_t - - - Change flag storage type for address range. - - @param start_ea: should be lower than end_ea. (C++: ea_t) - @param end_ea: does not belong to the range. (C++: ea_t) - @param stt: storage_type_t (C++: storage_type_t) - @return: error code - - -idc.set_struc_cmt(): - - set_struc_cmt(id, cmt, repeatable) -> bool - - - Set structure comment. - - - @param id (C++: tid_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -idc.set_struc_idx(): - - Change structure index - - @param sid: structure type ID - @param index: new index of the structure - - @return: != 0 - ok - - @note: See get_first_struc_idx() for the explanation of - structure indices and IDs. - - -idc.set_struc_name(): - - set_struc_name(id, name) -> bool - - - Set structure name. - - - @param id (C++: tid_t) - @param name (C++: const char *) - - -idc.set_tail_owner(): - - Change the function chunk owner - - @param tailea: any address in the function chunk - @param funcea: the starting address of the new owner - - @return: False if failed, True if success - - @note: The new owner must already have the chunk appended before the call - - -idc.set_target_assembler(): - - set_target_assembler(asmnum) -> bool - - - Set target assembler. - - @param asmnum: number of assembler in the current processor module - (C++: int) - @return: success - - -idc.set_trace_file_desc(): - - set_trace_file_desc(filename, description) -> bool - - - Change the description of the specified trace file. - - - @param filename (C++: const char *) - @param description (C++: const char *) - - -idc.split_sreg_range(): - - Set value of a segment register. - - @param ea: linear address - @param reg: name of a register, like "cs", "ds", "es", etc. - @param value: new value of the segment register. - @param tag: of SR_... constants - - @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. - - -idc.start_process(): - - start_process(path=None, args=None, sdir=None) -> int - - - Start a process in the debugger. \sq{Type, Asynchronous function - - available as Request, Notification, 'dbg_process_start' }You can also - use the 'run_to()' function to easily start the execution of a process - until a given address is reached.For all parameters, a NULL value - indicates the debugger will take the value from the defined Process - Options. - - @param path: path to the executable to start (C++: const char *) - @param args: arguments to pass to process (C++: const char *) - @param sdir: starting directory for the process (C++: const char *) - - -idc.step_into(): - - step_into() -> bool - - - Execute one instruction in the current thread. Other threads are kept - suspended. \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_step_into' } - - -idc.step_over(): - - step_over() -> bool - - - Execute one instruction in the current thread, but without entering - into functions. Others threads keep suspended. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_step_over' } - - -idc.step_until_ret(): - - step_until_ret() -> bool - - - Execute instructions in the current thread until a function return - instruction is executed (aka "step out"). Other threads are kept - suspended. \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_step_until_ret' } - - -idc.suspend_process(): - - suspend_process() -> bool - - - Suspend the process in the debugger. \sq{ Type,Synchronous function - (if in a notification handler)Asynchronous function (everywhere - else)available as Request, Notification,none (if in a notification - handler) 'dbg_suspend_process' (everywhere else) }The - 'suspend_process()' function can be called from a notification handler - to force the stopping of the process. In this case, no notification - will be generated. When you suspend a process, the running command is - always aborted. - - -idc.suspend_thread(): - - suspend_thread(tid) -> int - - - Suspend thread. Suspending a thread may deadlock the whole application - if the suspended was owning some synchronization objects. \sq{Type, - Synchronous function - available as request, Notification, none - (synchronous function)} - - @param tid: thread id (C++: thid_t) - - -idc.take_memory_snapshot(): - - take_memory_snapshot(only_loader_segs) -> bool - - - Take a memory snapshot of the running process. - - @param only_loader_segs: only is_loader_segm() segments will be - affected (C++: bool) - @return: success - - -idc.to_ea(): - - Return value of expression: ((seg<<4) + off) - - -idc.toggle_bnot(): - - Toggle the bitwise not operator for the operand - - @param ea: linear address - @param n: number of operand - - 0 - the first operand - - 1 - the second, third and all other operands - - -1 - all operands - - -idc.toggle_sign(): - - toggle_sign(ea, n) -> bool - - - Toggle sign of n-th operand. allowed values of n: 0-first operand, - 1-other operands - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.update_extra_cmt(): - - update_extra_cmt(ea, what, str) - - -idc.update_hidden_range(): - - Set hidden range state - - @param ea: any address belonging to the hidden range - @param visible: new state of the range - - @return: != 0 - ok - - -idc.validate_idb_names(): - - check consistency of IDB name records - @param do_repair: try to repair netnode header it TRUE - @return: number of inconsistent name records - - -idc.wait_for_next_event(): - - wait_for_next_event(wfne, timeout) -> dbg_event_code_t - - - Wait for the next event.This function (optionally) resumes the process - execution, and waits for a debugger event until a possible timeout - occurs. - - @param wfne: combination of Wait for debugger event flags constants - (C++: int) - @param timeout: number of seconds to wait, -1-infinity (C++: int) - @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= - 0) - - -idc.warning(): - - warning(format) - - - Display a message in a message box - - @param message: message to print (formatting is done in Python) - - This function can be used to debug IDAPython scripts - The user will be able to hide messages if they appear twice in a row on - the screen - - -idc.write_dbg_memory(): - - Write to debugger memory. - - @param ea: linear address - @param data: string to write - @return: number of written bytes (-1 - network/debugger error) - - Thread-safe function (may be called only from the main thread and debthread) - - diff --git a/pydoc_injections2.txt b/pydoc_injections2.txt new file mode 100644 index 0000000..70434a5 --- /dev/null +++ b/pydoc_injections2.txt @@ -0,0 +1,82127 @@ +Help on function auto_apply_tail in module ida_auto: + +auto_apply_tail(*args) + auto_apply_tail(tail_ea, parent_ea) + + + Plan to apply the tail_ea chunk to the parent + + @param tail_ea: linear address of start of tail (C++: ea_t) + @param parent_ea: linear address within parent. If BADADDR, + automatically try to find parent via xrefs. (C++: + ea_t) + +Help on function auto_apply_type in module ida_auto: + +auto_apply_type(*args) + auto_apply_type(caller, callee) + + + Plan to apply the callee's type to the calling point. + + + @param caller (C++: ea_t) + @param callee (C++: ea_t) + +Help on function auto_cancel in module ida_auto: + +auto_cancel(*args) + auto_cancel(ea1, ea2) + + + Remove an address range (ea1..ea2) from queues 'AU_CODE' , 'AU_PROC' , + 'AU_USED' . To remove an address range from other queues use + 'auto_unmark()' function. 'ea1' may be higher than 'ea2', the kernel + will swap them in this case. 'ea2' doesn't belong to the range. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on class auto_display_t in module ida_auto: + +class auto_display_t(__builtin__.object) + | Proxy of C++ auto_display_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> auto_display_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | auto_display_t_ea_get(self) -> ea_t + | + | state + | auto_display_t_state_get(self) -> idastate_t + | + | thisown + | The membership flag + | + | type + | auto_display_t_type_get(self) -> atype_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_auto_display_t(self) + +Help on function auto_get in module ida_auto: + +auto_get(*args) + auto_get(type, lowEA, highEA) -> ea_t + + + Retrieve an address from queues regarding their priority. Returns + 'BADADDR' if no addresses not lower than 'lowEA' and less than + 'highEA' are found in the queues. Otherwise *type will have queue + type. + + @param type (C++: atype_t *) + @param lowEA (C++: ea_t) + @param highEA (C++: ea_t) + +Help on function auto_is_ok in module ida_auto: + +auto_is_ok(*args) + auto_is_ok() -> bool + + + Are all queues empty? (i.e. has autoanalysis finished?). + +Help on function auto_make_code in module ida_auto: + +auto_make_code(*args) + auto_make_code(ea) + + + Plan to make code. + + + @param ea (C++: ea_t) + +Help on function auto_make_proc in module ida_auto: + +auto_make_proc(*args) + auto_make_proc(ea) + + + Plan to make code&function. + + + @param ea (C++: ea_t) + +Help on function auto_mark in module ida_auto: + +auto_mark(*args) + auto_mark(ea, type) + + + Put single address into a queue. Queues keep addresses sorted. + + + @param ea (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_mark_range in module ida_auto: + +auto_mark_range(*args) + auto_mark_range(start, end, type) + + + Put range of addresses into a queue. 'start' may be higher than 'end', + the kernel will swap them in this case. 'end' doesn't belong to the + range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_recreate_insn in module ida_auto: + +auto_recreate_insn(*args) + auto_recreate_insn(ea) -> int + + + Try to create instruction + + @param ea: linear address of callee (C++: ea_t) + @return: the length of the instruction or 0 + +Help on function auto_unmark in module ida_auto: + +auto_unmark(*args) + auto_unmark(start, end, type) + + + Remove range of addresses from a queue. 'start' may be higher than + 'end', the kernel will swap them in this case. 'end' doesn't belong to + the range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_wait in module ida_auto: + +auto_wait(*args) + auto_wait() -> bool + + + Process everything in the queues and return true. + + @return: false if the user clicked cancel. (the wait box must be + displayed by the caller if desired) + +Help on function auto_wait_range in module ida_auto: + +auto_wait_range(*args) + auto_wait_range(ea1, ea2) -> ssize_t + + + Process everything in the specified range and return true. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + @return: number of autoanalysis steps made. -1 if the user clicked + cancel. (the wait box must be displayed by the caller if + desired) + +Help on function enable_auto in module ida_auto: + +enable_auto(*args) + enable_auto(enable) -> bool + + + Temporarily enable/disable autoanalyzer. Not user-facing, but rather + because IDA sometimes need to turn AA on/off regardless of + inf.s_genflags:INFFL_AUTO + + @param enable (C++: bool) + @return: old state + +Help on function get_auto_display in module ida_auto: + +get_auto_display(*args) + get_auto_display(auto_display) + + + Get structure which holds the autoanalysis indicator contents. + + + @param auto_display (C++: auto_display_t *) + +Help on function get_auto_state in module ida_auto: + +get_auto_state(*args) + get_auto_state() -> atype_t + + + Get current state of autoanalyzer. If auto_state == 'AU_NONE' , IDA is + currently not running the analysis (it could be temporarily + interrupted to perform the user's requests, for example). + +Help on function is_auto_enabled in module ida_auto: + +is_auto_enabled(*args) + is_auto_enabled() -> bool + + + Get autoanalyzer state. + +Help on function may_create_stkvars in module ida_auto: + +may_create_stkvars(*args) + may_create_stkvars() -> bool + + + Is it allowed to create stack variables automatically?. This function + should be used by IDP modules before creating stack vars. + +Help on function may_trace_sp in module ida_auto: + +may_trace_sp(*args) + may_trace_sp() -> bool + + + Is it allowed to trace stack pointer automatically?. This function + should be used by IDP modules before tracing sp. + +Help on function peek_auto_queue in module ida_auto: + +peek_auto_queue(*args) + peek_auto_queue(low_ea, type) -> ea_t + + + Peek into a queue 'type' for an address not lower than 'low_ea'. Do + not remove address from the queue. + + @param low_ea (C++: ea_t) + @param type (C++: atype_t) + @return: the address or BADADDR + +Help on function plan_and_wait in module ida_auto: + +plan_and_wait(*args) + plan_and_wait(ea1, ea2, final_pass=True) -> int + + + Analyze the specified range. Try to create instructions where + possible. Make the final pass over the specified range if specified. + This function doesn't return until the range is analyzed. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + @param final_pass (C++: bool) + +Help on function plan_ea in module ida_auto: + +plan_ea(*args) + plan_ea(ea) + + + Plan to perform reanalysis. + + + @param ea (C++: ea_t) + +Help on function plan_range in module ida_auto: + +plan_range(*args) + plan_range(sEA, eEA) + + + Plan to perform reanalysis. + + + @param sEA (C++: ea_t) + @param eEA (C++: ea_t) + +Help on function reanalyze_callers in module ida_auto: + +reanalyze_callers(*args) + reanalyze_callers(ea, noret) + + + Plan to reanalyze callers of the specified address. This function will + add to 'AU_USED' queue all instructions that call (not jump to) the + specified address. + + @param ea: linear address of callee (C++: ea_t) + @param noret: !=0: the callee doesn't return, mark to undefine + subsequent instructions in the caller. 0: do nothing. + (C++: bool) + +Help on function revert_ida_decisions in module ida_auto: + +revert_ida_decisions(*args) + revert_ida_decisions(ea1, ea2) + + + Delete all analysis info that IDA generated for for the given range. + + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on function set_auto_state in module ida_auto: + +set_auto_state(*args) + set_auto_state(new_state) -> atype_t + + + Set current state of autoanalyzer. + + @param new_state: new state of autoanalyzer (C++: atype_t) + @return: previous state + +Help on function set_ida_state in module ida_auto: + +set_ida_state(*args) + set_ida_state(st) -> idastate_t + + + Change IDA status indicator value + + @param st: - new indicator status (C++: idastate_t) + @return: old indicator status + +Help on function show_addr in module ida_auto: + +show_addr(*args) + show_addr(ea) + + + Show an address on the autoanalysis indicator. The address is + displayed in the form " @:12345678". + + @param ea: - linear address to display (C++: ea_t) + +Help on function show_auto in module ida_auto: + +show_auto(*args) + show_auto(ea, type=AU_NONE) + + + Change autoanalysis indicator value. + + @param ea: linear address being analyzed (C++: ea_t) + @param type: autoanalysis type (see Autoanalysis queues ) (C++: + atype_t) + +Help on function __walk_types_and_formats in module ida_bytes: + +__walk_types_and_formats(formats, type_action, format_action, installing) + # ----------------------------------------------------------------------- + +Help on function add_byte in module ida_bytes: + +add_byte(*args) + add_byte(ea, value) + + + Add a value to one byte of the program. This function works for wide + byte processors too. + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint32) + +Help on function add_dword in module ida_bytes: + +add_dword(*args) + add_dword(ea, value) + + + Add a value to one dword of the program. This function works for wide + byte processors too. This function takes into account order of bytes + specified in \inf{is_be()}this function works incorrectly if + \ph{nbits} > 16 + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function add_hidden_range in module ida_bytes: + +add_hidden_range(*args) + add_hidden_range(ea1, ea2, description, header, footer, color) -> bool + + + Mark a range of addresses as hidden. The range will be created in the + invisible state with the default color + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (C++: ea_t) + @param description: range parameters (C++: const char *) + @param header: range parameters (C++: const char *) + @param footer: range parameters (C++: const char *) + @param color (C++: bgcolor_t) + @return: success + +Help on function add_mapping in module ida_bytes: + +add_mapping(*args) + add_mapping(_from, to, size) -> bool + + + IDA supports memory mapping. References to the addresses from the + mapped range use data and meta-data from the mapping range.You should + set flag PR2_MAPPING in ph.flag2 to use memory mapping Add memory + mapping range. + + @param _from: start of the mapped range (nonexistent address) (C++: + ea_t) + @param to: start of the mapping range (existent address) (C++: ea_t) + @param size: size of the range (C++: asize_t) + @return: success + +Help on function add_qword in module ida_bytes: + +add_qword(*args) + add_qword(ea, value) + + + Add a value to one qword of the program. This function does not work + for wide byte processors. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function add_word in module ida_bytes: + +add_word(*args) + add_word(ea, value) + + + Add a value to one word of the program. This function works for wide + byte processors too. This function takes into account order of bytes + specified in \inf{is_be()} + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function align_flag in module ida_bytes: + +align_flag(*args) + align_flag() -> flags_t + + + Get a flags_t representing an alignment directive. + +Help on function append_cmt in module ida_bytes: + +append_cmt(*args) + append_cmt(ea, str, rptble) -> bool + + + Append to an indented comment. Creates a new comment if none exists. + Appends a newline character and the specified string otherwise. + + @param ea: linear address (C++: ea_t) + @param str: comment string to append (C++: const char *) + @param rptble: append to repeatable comment? (C++: bool) + @return: success + +Help on function attach_custom_data_format in module ida_bytes: + +attach_custom_data_format(*args) + attach_custom_data_format(dtid, dfid) -> bool + + + Attach the data format to the data type. + + @param dtid: data type id that can use the data format. 0 means all + standard data types. Such data formats can be applied to + any data item or instruction operands. For instruction + operands, the data_format_t::value_size check is not + performed by the kernel. (C++: int) + @param dfid: data format id (C++: int) + +Help on function bin_flag in module ida_bytes: + +bin_flag(*args) + bin_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function bin_search in module ida_bytes: + +bin_search(*args) + bin_search(start_ea, end_ea, image, imask, step, flags) -> ea_t + +Help on function byte_flag in module ida_bytes: + +byte_flag(*args) + byte_flag() -> flags_t + + + Get a flags_t representing a byte. + +Help on function bytesize in module ida_bytes: + +bytesize(*args) + bytesize(ea) -> int + + + Get number of bytes required to store a byte at the given address. + + + @param ea (C++: ea_t) + +Help on function calc_def_align in module ida_bytes: + +calc_def_align(*args) + calc_def_align(ea, mina, maxa) -> int + + + Calculate default alignment. + + + @param ea (C++: ea_t) + @param mina (C++: int) + @param maxa (C++: int) + +Help on function calc_dflags in module ida_bytes: + +calc_dflags(*args) + calc_dflags(f, force) -> flags_t + +Help on function calc_max_align in module ida_bytes: + +calc_max_align(*args) + calc_max_align(endea) -> int + + + Returns: 0..32. + + + @param endea (C++: ea_t) + +Help on function calc_max_item_end in module ida_bytes: + +calc_max_item_end(*args) + calc_max_item_end(ea, how=15) -> ea_t + + + Calculate maximal reasonable end address of a new item. This function + will limit the item with the current segment bounds. + + @param ea: linear address (C++: ea_t) + @param how: when to stop the search. A combination of Item end search + flags (C++: int) + @return: end of new item. If it is not possible to create an item, it + will return 'ea'. + +Help on function calc_min_align in module ida_bytes: + +calc_min_align(*args) + calc_min_align(length) -> int + + + Returns: 1..32. + + + @param length (C++: asize_t) + +Help on function can_define_item in module ida_bytes: + +can_define_item(*args) + can_define_item(ea, length, flags) -> bool + + + Can define item (instruction/data) of the specified 'length', starting + at 'ea'?if there is an item starting at 'ea', this function ignores + itthis function converts to unexplored all encountered data items with + fixup information. Should be fixed in the future.a new item would + cross segment boundariesa new item would overlap with existing items + (except items specified by 'flags') + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param flags: if not 0, then the kernel will ignore the data types + specified by the flags and destroy them. For example: + 1000 dw 5 1002 db 5 ; undef + 1003 db 5 ; undef 1004 dw 5 + 1006 dd 5 can_define_item(1000, 6, 0) + - false because of dw at 1004 can_define_item(1000, + 6, word_flag()) - true, word at 1004 is destroyed (C++: + flags_t) + @return: 1-yes, 0-no + +Help on function change_storage_type in module ida_bytes: + +change_storage_type(*args) + change_storage_type(start_ea, end_ea, stt) -> error_t + + + Change flag storage type for address range. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: error code + +Help on function char_flag in module ida_bytes: + +char_flag(*args) + char_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function chunk_size in module ida_bytes: + +chunk_size(*args) + chunk_size(ea) -> asize_t + + + Get size of the contiguous address block containing 'ea'. + + @param ea (C++: ea_t) + @return: 0 if 'ea' doesn't belong to the program. + +Help on function chunk_start in module ida_bytes: + +chunk_start(*args) + chunk_start(ea) -> ea_t + + + Get start of the contiguous address block containing 'ea'. + + @param ea (C++: ea_t) + @return: BADADDR if 'ea' doesn't belong to the program. + +Help on function clr_lzero in module ida_bytes: + +clr_lzero(*args) + clr_lzero(ea, n) -> bool + + + Clear lzero bit. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function clr_op_type in module ida_bytes: + +clr_op_type(*args) + clr_op_type(ea, n) -> bool + + + Remove operand representation information. (set operand representation + to be 'undefined') + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function code_flag in module ida_bytes: + +code_flag(*args) + code_flag() -> flags_t + + + 'FF_CODE' + +Help on function create_16bit_data in module ida_bytes: + +create_16bit_data(*args) + create_16bit_data(ea, length) -> bool + + + Convert to 16-bit quantity (take byte size into account) + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + +Help on function create_32bit_data in module ida_bytes: + +create_32bit_data(*args) + create_32bit_data(ea, length) -> bool + + + Convert to 32-bit quantity (take byte size into account) + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + +Help on function create_align in module ida_bytes: + +create_align(*args) + create_align(ea, length, alignment) -> bool + + + Alignment: 0 or 2..32. If it is 0, is will be calculated. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param alignment (C++: int) + +Help on function create_byte in module ida_bytes: + +create_byte(*args) + create_byte(ea, length, force=False) -> bool + + + Convert to byte. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_custdata in module ida_bytes: + +create_custdata(*args) + create_custdata(ea, length, dtid, fid, force=False) -> bool + + + Convert to custom data type. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param dtid (C++: int) + @param fid (C++: int) + @param force (C++: bool) + +Help on function create_data in module ida_bytes: + +create_data(*args) + create_data(ea, dataflag, size, tid) -> bool + + + Convert to data (byte, word, dword, etc). This function may be used to + create arrays. + + @param ea: linear address (C++: ea_t) + @param dataflag: type of data. Value of function byte_flag() , + word_flag() , etc. (C++: flags_t) + @param size: size of array in bytes. should be divisible by the size + of one item of the specified type. for variable sized + items it can be specified as 0, and the kernel will try + to calculate the size. (C++: asize_t) + @param tid: type id. If the specified type is a structure, then tid is + structure id. Otherwise should be BADNODE . (C++: tid_t) + @return: success + +Help on function create_double in module ida_bytes: + +create_double(*args) + create_double(ea, length, force=False) -> bool + + + Convert to double. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_dword in module ida_bytes: + +create_dword(*args) + create_dword(ea, length, force=False) -> bool + + + Convert to dword. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_float in module ida_bytes: + +create_float(*args) + create_float(ea, length, force=False) -> bool + + + Convert to float. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_oword in module ida_bytes: + +create_oword(*args) + create_oword(ea, length, force=False) -> bool + + + Convert to octaword/xmm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_packed_real in module ida_bytes: + +create_packed_real(*args) + create_packed_real(ea, length, force=False) -> bool + + + Convert to packed decimal real. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_qword in module ida_bytes: + +create_qword(*args) + create_qword(ea, length, force=False) -> bool + + + Convert to quadword. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_strlit in module ida_bytes: + +create_strlit(*args) + create_strlit(start, len, strtype) -> bool + + + Convert to string literal and give a meaningful name. 'start' may be + higher than 'end', the kernel will swap them in this case + + @param start: starting address (C++: ea_t) + @param len: length of the string in bytes. if 0, then + get_max_strlit_length() will be used to determine the + length (C++: size_t) + @param strtype: string type. one of String type codes (C++: int32) + @return: success + +Help on function create_struct in module ida_bytes: + +create_struct(*args) + create_struct(ea, length, tid, force=False) -> bool + + + Convert to struct. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param tid (C++: tid_t) + @param force (C++: bool) + +Help on function create_tbyte in module ida_bytes: + +create_tbyte(*args) + create_tbyte(ea, length, force=False) -> bool + + + Convert to tbyte. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_word in module ida_bytes: + +create_word(*args) + create_word(ea, length, force=False) -> bool + + + Convert to word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_yword in module ida_bytes: + +create_yword(*args) + create_yword(ea, length, force=False) -> bool + + + Convert to ymm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_zword in module ida_bytes: + +create_zword(*args) + create_zword(ea, length, force=False) -> bool + + + Convert to zmm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function cust_flag in module ida_bytes: + +cust_flag(*args) + cust_flag() -> flags_t + + + Get a flags_t representing custom type data. + +Help on function custfmt_flag in module ida_bytes: + +custfmt_flag(*args) + custfmt_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on class data_format_t in module ida_bytes: + +class data_format_t(__builtin__.object) + | Proxy of C++ data_format_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | + | __real__init__ = __init__(self, *args) + | __init__(self, _self, name, value_size=0, menu_name=None, props=0, hotkey=None, text_width=0) -> data_format_t + | + | __repr__ = _swig_repr(self) + | + | _data_format_t__get_id = __get_id(self, *args) + | __get_id(self) -> int + | + | is_present_in_menus(self, *args) + | is_present_in_menus(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hotkey + | data_format_t_hotkey_get(self) -> char const * + | + | id + | __get_id(self) -> int + | + | menu_name + | data_format_t_menu_name_get(self) -> char const * + | + | name + | data_format_t_name_get(self) -> char const * + | + | props + | data_format_t_props_get(self) -> int + | + | text_width + | data_format_t_text_width_get(self) -> int32 + | + | thisown + | The membership flag + | + | value_size + | data_format_t_value_size_get(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_data_format_t(self) + +Help on class data_type_t in module ida_bytes: + +class data_type_t(__builtin__.object) + | Proxy of C++ data_type_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | + | __real__init__ = __init__(self, *args) + | __init__(self, _self, name, value_size=0, menu_name=None, hotkey=None, asm_keyword=None, props=0) -> data_type_t + | + | __repr__ = _swig_repr(self) + | + | _data_type_t__get_id = __get_id(self, *args) + | __get_id(self) -> int + | + | is_present_in_menus(self, *args) + | is_present_in_menus(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | asm_keyword + | data_type_t_asm_keyword_get(self) -> char const * + | + | hotkey + | data_type_t_hotkey_get(self) -> char const * + | + | id + | __get_id(self) -> int + | + | menu_name + | data_type_t_menu_name_get(self) -> char const * + | + | name + | data_type_t_name_get(self) -> char const * + | + | props + | data_type_t_props_get(self) -> int + | + | thisown + | The membership flag + | + | value_size + | data_type_t_value_size_get(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_data_type_t(self) + +Help on function dec_flag in module ida_bytes: + +dec_flag(*args) + dec_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function del_hidden_range in module ida_bytes: + +del_hidden_range(*args) + del_hidden_range(ea) -> bool + + + Delete hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: success + +Help on function del_items in module ida_bytes: + +del_items(*args) + del_items(ea, flags=0, nbytes=1, may_destroy=None) -> bool + + + Convert item (instruction/data) to unexplored bytes. The whole item + (including the head and tail bytes) will be destroyed. It is allowed + to pass any address in the item to this function + + @param ea: any address within the first item to delete (C++: ea_t) + @param flags: combination of Unexplored byte conversion flags (C++: + int) + @param nbytes: number of bytes in the range to be undefined (C++: + asize_t) + @param may_destroy: optional routine invoked before deleting a head + item. If callback returns false then item has not + to be deleted and operation fails (C++: + may_destroy_cb_t *) + @return: true on sucessful operation, otherwise false + +Help on function del_mapping in module ida_bytes: + +del_mapping(*args) + del_mapping(ea) + + + Delete memory mapping range. + + @param ea: any address in the mapped range (C++: ea_t) + +Help on function del_value in module ida_bytes: + +del_value(*args) + del_value(ea) + + + Delete byte value from flags. The corresponding byte becomes + uninitialized. + + @param ea (C++: ea_t) + +Help on function detach_custom_data_format in module ida_bytes: + +detach_custom_data_format(*args) + detach_custom_data_format(dtid, dfid) -> bool + + + Detach the data format from the data type. Unregistering a custom data + type detaches all attached data formats, no need to detach them + explicitly. You still need unregister them. Unregistering a custom + data format detaches it from all attached data types. + + @param dtid: data type id to detach data format from (C++: int) + @param dfid: data format id to detach (C++: int) + +Help on function disable_flags in module ida_bytes: + +disable_flags(*args) + disable_flags(start_ea, end_ea) -> error_t + + + Deallocate flags for address range. Exit with an error message if not + enough disk space (this may occur too). + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @return: 0 if ok, otherwise return error code + +Help on function double_flag in module ida_bytes: + +double_flag(*args) + double_flag() -> flags_t + + + Get a flags_t representing a double. + +Help on function dword_flag in module ida_bytes: + +dword_flag(*args) + dword_flag() -> flags_t + + + Get a flags_t representing a double word. + +Help on function enable_flags in module ida_bytes: + +enable_flags(*args) + enable_flags(start_ea, end_ea, stt) -> error_t + + + Allocate flags for address range. This function does not change the + storage type of existing ranges. Exit with an error message if not + enough disk space. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: 0 if ok, otherwise an error code + +Help on function enum_flag in module ida_bytes: + +enum_flag(*args) + enum_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function equal_bytes in module ida_bytes: + +equal_bytes(*args) + equal_bytes(ea, image, mask, len, sense_case) -> bool + + + Compare 'len' bytes of the program starting from 'ea' with 'image'. + + @param ea: linear address (C++: ea_t) + @param image: bytes to compare with (C++: const uchar *) + @param mask: array of 1/0 bytes, it's length is 'len'. 1 means to + perform the comparison of the corresponding byte. 0 means + not to perform. if mask == NULL, then all bytes of + 'image' will be compared. if mask == SKIP_FF_MASK then + 0xFF bytes will be skipped (C++: const uchar *) + @param len: length of block to compare in bytes. (C++: size_t) + @param sense_case: case-sensitive comparison? (C++: bool) + +Help on function f_has_cmt in module ida_bytes: + +f_has_cmt(*args) + f_has_cmt(f, arg2) -> bool + +Help on function f_has_dummy_name in module ida_bytes: + +f_has_dummy_name(*args) + f_has_dummy_name(f, arg2) -> bool + + + Does the current byte have dummy (auto-generated, with special prefix) + name? + + + @param f (C++: flags_t) + +Help on function f_has_extra_cmts in module ida_bytes: + +f_has_extra_cmts(*args) + f_has_extra_cmts(f, arg2) -> bool + +Help on function f_has_name in module ida_bytes: + +f_has_name(*args) + f_has_name(f, arg2) -> bool + + + Does the current byte have non-trivial (non-dummy) name? + + + @param f (C++: flags_t) + +Help on function f_has_user_name in module ida_bytes: + +f_has_user_name(*args) + f_has_user_name(F, arg2) -> bool + + + Does the current byte have user-specified name? + + + @param F (C++: flags_t) + +Help on function f_has_xref in module ida_bytes: + +f_has_xref(*args) + f_has_xref(f, arg2) -> bool + + + Does the current byte have cross-references to it? + + + @param f (C++: flags_t) + +Help on function f_is_align in module ida_bytes: + +f_is_align(*args) + f_is_align(F, arg2) -> bool + + + See 'is_align()' + + + @param F (C++: flags_t) + +Help on function f_is_byte in module ida_bytes: + +f_is_byte(*args) + f_is_byte(F, arg2) -> bool + + + See 'is_byte()' + + + @param F (C++: flags_t) + +Help on function f_is_code in module ida_bytes: + +f_is_code(*args) + f_is_code(F, arg2) -> bool + + + Does flag denote start of an instruction? + + + @param F (C++: flags_t) + +Help on function f_is_custom in module ida_bytes: + +f_is_custom(*args) + f_is_custom(F, arg2) -> bool + + + See 'is_custom()' + + + @param F (C++: flags_t) + +Help on function f_is_data in module ida_bytes: + +f_is_data(*args) + f_is_data(F, arg2) -> bool + + + Does flag denote start of data? + + + @param F (C++: flags_t) + +Help on function f_is_double in module ida_bytes: + +f_is_double(*args) + f_is_double(F, arg2) -> bool + + + See 'is_double()' + + + @param F (C++: flags_t) + +Help on function f_is_dword in module ida_bytes: + +f_is_dword(*args) + f_is_dword(F, arg2) -> bool + + + See 'is_dword()' + + + @param F (C++: flags_t) + +Help on function f_is_float in module ida_bytes: + +f_is_float(*args) + f_is_float(F, arg2) -> bool + + + See 'is_float()' + + + @param F (C++: flags_t) + +Help on function f_is_head in module ida_bytes: + +f_is_head(*args) + f_is_head(F, arg2) -> bool + + + Does flag denote start of instruction OR data? + + + @param F (C++: flags_t) + +Help on function f_is_not_tail in module ida_bytes: + +f_is_not_tail(*args) + f_is_not_tail(F, arg2) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function f_is_oword in module ida_bytes: + +f_is_oword(*args) + f_is_oword(F, arg2) -> bool + + + See 'is_oword()' + + + @param F (C++: flags_t) + +Help on function f_is_pack_real in module ida_bytes: + +f_is_pack_real(*args) + f_is_pack_real(F, arg2) -> bool + + + See 'is_pack_real()' + + + @param F (C++: flags_t) + +Help on function f_is_qword in module ida_bytes: + +f_is_qword(*args) + f_is_qword(F, arg2) -> bool + + + See 'is_qword()' + + + @param F (C++: flags_t) + +Help on function f_is_strlit in module ida_bytes: + +f_is_strlit(*args) + f_is_strlit(F, arg2) -> bool + + + See 'is_strlit()' + + + @param F (C++: flags_t) + +Help on function f_is_struct in module ida_bytes: + +f_is_struct(*args) + f_is_struct(F, arg2) -> bool + + + See 'is_struct()' + + + @param F (C++: flags_t) + +Help on function f_is_tail in module ida_bytes: + +f_is_tail(*args) + f_is_tail(F, arg2) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function f_is_tbyte in module ida_bytes: + +f_is_tbyte(*args) + f_is_tbyte(F, arg2) -> bool + + + See 'is_tbyte()' + + + @param F (C++: flags_t) + +Help on function f_is_word in module ida_bytes: + +f_is_word(*args) + f_is_word(F, arg2) -> bool + + + See 'is_word()' + + + @param F (C++: flags_t) + +Help on function f_is_yword in module ida_bytes: + +f_is_yword(*args) + f_is_yword(F, arg2) -> bool + + + See 'is_yword()' + + + @param F (C++: flags_t) + +Help on function find_byte in module ida_bytes: + +find_byte(*args) + find_byte(sEA, size, value, bin_search_flags) -> ea_t + + + Find forward a byte with the specified value (only 8-bit value from + the database). example: ea=4 size=3 will inspect addresses 4, 5, and 6 + + @param sEA: linear address (C++: ea_t) + @param size: number of bytes to inspect (C++: asize_t) + @param value: value to find (C++: uchar) + @param bin_search_flags: combination of Search flags (C++: int) + @return: address of byte or BADADDR + +Help on function find_byter in module ida_bytes: + +find_byter(*args) + find_byter(sEA, size, value, bin_search_flags) -> ea_t + + + Find reverse a byte with the specified value (only 8-bit value from + the database). example: ea=4 size=3 will inspect addresses 6, 5, and 4 + + @param sEA: the lower address of the search range (C++: ea_t) + @param size: number of bytes to inspect (C++: asize_t) + @param value: value to find (C++: uchar) + @param bin_search_flags: combination of Search flags (C++: int) + @return: address of byte or BADADDR + +Help on function find_custom_data_format in module ida_bytes: + +find_custom_data_format(*args) + find_custom_data_format(name) -> int + + + Get id of a custom data format. + + @param name: name of the custom data format (C++: const char *) + @return: id or -1 + +Help on function find_custom_data_type in module ida_bytes: + +find_custom_data_type(*args) + find_custom_data_type(name) -> int + + + Get id of a custom data type. + + @param name: name of the custom data type (C++: const char *) + @return: id or -1 + +Help on function float_flag in module ida_bytes: + +float_flag(*args) + float_flag() -> flags_t + + + Get a flags_t representing a float. + +Help on function flt_flag in module ida_bytes: + +flt_flag(*args) + flt_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function free_chunk in module ida_bytes: + +free_chunk(*args) + free_chunk(bottom, size, step) -> ea_t + + + Search for a hole in the addressing space of the program. + + @param bottom: address to start searching (C++: ea_t) + @param size: size of desired block (C++: asize_t) + @param step: bit mask for the start of hole (0xF would align hole to a + paragraph). if 'step' is negative, the bottom address + with be aligned. otherwise the kernel will try to use it + as is and align it only when the hole is too small. (C++: + int32) + @return: start of the hole or BADADDR + +Help on function get_16bit in module ida_bytes: + +get_16bit(*args) + get_16bit(ea) -> uint32 + + + Get 16bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 1 byte (getFullByte()) if the current processor has 16-bit + byte, otherwise return get_word() + +Help on function get_32bit in module ida_bytes: + +get_32bit(*args) + get_32bit(ea) -> uint32 + + + Get not more than 32bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 32 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) + return get_dword(ea); if ( nbits <= 16) return + get_wide_word(ea); return get_wide_byte(ea); + +Help on function get_64bit in module ida_bytes: + +get_64bit(*args) + get_64bit(ea) -> uint64 + + + Get not more than 64bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 64 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) + return get_qword(ea); if ( nbits <= 16) return + get_wide_dword(ea); return get_wide_byte(ea); + +Help on function get_8bit in module ida_bytes: + +get_8bit(*args) + get_8bit(ea, v, nbit) -> PyObject * + +Help on function get_byte in module ida_bytes: + +get_byte(*args) + get_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea'. This function works only + for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_bytes in module ida_bytes: + +get_bytes(*args) + get_bytes(ea, size, gmb_flags=0x01) -> PyObject * + + + Get the specified number of bytes of the program. + @param ea: program address + @param size: number of bytes to return + @return: the bytes (as a str), or None in case of failure + +Help on function get_bytes_and_mask in module ida_bytes: + +get_bytes_and_mask(*args) + get_bytes_and_mask(ea, size, gmb_flags=0x01) -> PyObject * + + + Get the specified number of bytes of the program, and a bitmask + specifying what bytes are defined and what bytes are not. + @param ea: program address + @param size: number of bytes to return + @return: a tuple (bytes, mask), or None in case of failure. + Both 'bytes' and 'mask' are 'str' instances. + +Help on function get_cmt in module ida_bytes: + +get_cmt(*args) + get_cmt(ea, rptble) -> str + + + Get an indented comment. + + @param ea: linear address. may point to tail byte, the function will + find start of the item (C++: ea_t) + @param rptble: get repeatable comment? (C++: bool) + @return: size of comment or -1 + +Help on function get_custom_data_format in module ida_bytes: + +get_custom_data_format(*args) + get_custom_data_format(dfid) -> data_format_t + + + Get definition of a registered custom data format. + + @param dfid: data format id (C++: int) + @return: data format definition or NULL + +Help on function get_custom_data_formats in module ida_bytes: + +get_custom_data_formats(*args) + get_custom_data_formats(out, dtid) -> int + + + Get list of attached custom data formats for the specified data type. + + @param out: buffer for the output. may be NULL (C++: intvec_t *) + @param dtid: data type id (C++: int) + @return: number of returned custom data formats. if error, returns -1 + +Help on function get_custom_data_type in module ida_bytes: + +get_custom_data_type(*args) + get_custom_data_type(dtid) -> data_type_t + + + Get definition of a registered custom data type. + + @param dtid: data type id (C++: int) + @return: data type definition or NULL + +Help on function get_custom_data_types in module ida_bytes: + +get_custom_data_types(*args) + get_custom_data_types(out, min_size=0, max_size=BADADDR) -> int + + + Get list of registered custom data type ids. + + @param out: buffer for the output. may be NULL (C++: intvec_t *) + @param min_size: minimum value size (C++: asize_t) + @param max_size: maximum value size (C++: asize_t) + @return: number of custom data types with the specified size limits + +Help on function get_data_elsize in module ida_bytes: + +get_data_elsize(*args) + get_data_elsize(ea, F, ti=None) -> asize_t + + + Get size of data type specified in flags 'F'. + + @param ea: linear address of the item (C++: ea_t) + @param F: flags (C++: flags_t) + @param ti: additional information about the data type. For example, if + the current item is a structure instance, then ti->tid is + structure id. Otherwise is ignored (may be NULL). If + specified as NULL, will be automatically retrieved from the + database (C++: const opinfo_t *) + @return: byte : 1 word : 2 etc... + +Help on function get_data_value in module ida_bytes: + +get_data_value(*args) + get_data_value(v, ea, size) -> bool + + + Get the value at of the item at 'ea'. This function works with + entities up to sizeof(ea_t) (bytes, word, etc) + + @param v: pointer to the result. may be NULL (C++: uval_t *) + @param ea: linear address (C++: ea_t) + @param size: size of data to read. If 0, then the item type at 'ea' + will be used (C++: asize_t) + @return: success + +Help on function get_db_byte in module ida_bytes: + +get_db_byte(*args) + get_db_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea' from the database. Works + even if the debugger is active. See also 'get_dbg_byte()' to read the + process memory directly. This function works only for 8bit byte + processors. + + @param ea (C++: ea_t) + +Help on function get_default_radix in module ida_bytes: + +get_default_radix(*args) + get_default_radix() -> int + + + Get default base of number for the current processor. + + @return: 2, 8, 10, 16 + +Help on function get_dword in module ida_bytes: + +get_dword(*args) + get_dword(ea) -> uint32 + + + Get one dword (32-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_enum_id in module ida_bytes: + +get_enum_id(*args) + get_enum_id(ea, n) -> enum_t + + + Get enum id of 'enum' operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: id of enum or BADNODE + +Help on function get_first_hidden_range in module ida_bytes: + +get_first_hidden_range(*args) + get_first_hidden_range() -> hidden_range_t + + + Get pointer to the first hidden range. + + @return: ptr to hidden range or NULL + +Help on function get_flags in module ida_bytes: + +get_flags(*args) + get_flags(ea) -> flags_t + + + get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote + debugging because the kernel needs to read the process memory. + + @param ea (C++: ea_t) + +Help on function get_flags_by_size in module ida_bytes: + +get_flags_by_size(*args) + get_flags_by_size(size) -> flags_t + + + Get flags from size (in bytes). Supported sizes: 1, 2, 4, 8, 16, 32. + For other sizes returns 0 + + @param size (C++: size_t) + +Help on function get_flags_ex in module ida_bytes: + +get_flags_ex(*args) + get_flags_ex(ea, how) -> flags_t + + + Get flags for the specified address, extended form. + + + @param ea (C++: ea_t) + @param how (C++: int) + +Help on function get_forced_operand in module ida_bytes: + +get_forced_operand(*args) + get_forced_operand(ea, n) -> str + + + Get forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @return: size of forced operand or -1 + +Help on function get_full_data_elsize in module ida_bytes: + +get_full_data_elsize(*args) + get_full_data_elsize(ea, F, ti=None) -> asize_t + + + Get full size of data type specified in flags 'F'. takes into account + processors with wide bytes e.g. returns 2 for a byte element with + 16-bit bytes + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param ti (C++: const opinfo_t *) + +Help on function get_full_flags in module ida_bytes: + +get_full_flags(*args) + get_full_flags(ea) -> flags_t + + + Get flags value for address 'ea'. + + @param ea (C++: ea_t) + @return: 0 if address is not present in the program + +Help on function get_hidden_range in module ida_bytes: + +get_hidden_range(*args) + get_hidden_range(ea) -> hidden_range_t + + + Get pointer to hidden range structure, in: linear address. + + @param ea: any address in the hidden range (C++: ea_t) + +Help on function get_hidden_range_num in module ida_bytes: + +get_hidden_range_num(*args) + get_hidden_range_num(ea) -> int + + + Get number of a hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: number of hidden range (0.. get_hidden_range_qty() -1) + +Help on function get_hidden_range_qty in module ida_bytes: + +get_hidden_range_qty(*args) + get_hidden_range_qty() -> int + + + Get number of hidden ranges. + +Help on function get_item_end in module ida_bytes: + +get_item_end(*args) + get_item_end(ea) -> ea_t + + + Get the end address of the item at 'ea'. The returned address doesn't + belong to the current item. Unexplored bytes are counted as 1 byte + entities. + + @param ea (C++: ea_t) + +Help on function get_item_flag in module ida_bytes: + +get_item_flag(*args) + get_item_flag(_from, n, ea, appzero) -> flags_t + + + Get flag of the item at 'ea' even if it is a tail byte of some array + or structure. This function is used to get flags of structure members + or array elements. + + @param _from: linear address of the instruction which refers to 'ea' + (C++: ea_t) + @param n: number of operand which refers to 'ea' (C++: int) + @param ea: the referenced address (C++: ea_t) + @param appzero: append a struct field name if the field offset is + zero? meaningful only if the name refers to a + structure. (C++: bool) + @return: flags or 0 (if failed) + +Help on function get_item_head in module ida_bytes: + +get_item_head(*args) + get_item_head(ea) -> ea_t + + + Get the start address of the item at 'ea'. If there is no current + item, then 'ea' will be returned (see definition at the end of + 'bytes.hpp' source) + + @param ea (C++: ea_t) + +Help on function get_item_size in module ida_bytes: + +get_item_size(*args) + 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. + + @param ea (C++: ea_t) + +Help on function get_last_hidden_range in module ida_bytes: + +get_last_hidden_range(*args) + get_last_hidden_range() -> hidden_range_t + + + Get pointer to the last hidden range. + + @return: ptr to hidden range or NULL + +Help on function get_manual_insn in module ida_bytes: + +get_manual_insn(*args) + get_manual_insn(ea) -> str + + + Retrieve the user-specified string for the manual instruction. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @return: size of manual instruction or -1 + +Help on function get_mapping in module ida_bytes: + +get_mapping(*args) + get_mapping(n) -> bool + + + Get memory mapping range by its number. + + @param n: number of mapping range (0.. get_mappings_qty() -1) (C++: + size_t) + @return: false if the specified range doesn't exist, otherwise returns + from , to , size + +Help on function get_mappings_qty in module ida_bytes: + +get_mappings_qty(*args) + get_mappings_qty() -> size_t + + + Get number of mappings. + +Help on function get_max_strlit_length in module ida_bytes: + +get_max_strlit_length(*args) + get_max_strlit_length(ea, strtype, options=0) -> size_t + + + Determine maximum length of string literal. + + @param ea: starting address (C++: ea_t) + @param strtype: string type. one of String type codes (C++: int32) + @param options: combination of string literal length options (C++: + int) + @return: length of the string in octets (octet==8bit) + +Help on function get_next_hidden_range in module ida_bytes: + +get_next_hidden_range(*args) + get_next_hidden_range(ea) -> hidden_range_t + + + Get pointer to next hidden range. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to hidden range or NULL if next hidden range doesn't + exist + +Help on function get_octet in module ida_bytes: + +get_octet(*args) + get_octet(ea, v, nbit) -> PyObject * + + + Get 8 bits of the program at 'ea'. The main usage of this function is + to iterate range of bytes. Here is an example: + + uint64 v; + int nbit = 0; + for ( ... ) { + uchar byte = get_octet(&ea, &v, &nbit); + ... + } + + 'ea' is incremented each time when a new byte is read. In the above + example, it will be incremented in the first loop iteration. + + @param ea (C++: ea_t *) + @param v (C++: uint64 *) + @param nbit (C++: int *) + +Help on function get_opinfo in module ida_bytes: + +get_opinfo(*args) + get_opinfo(buf, ea, n, flags) -> opinfo_t + + + Get additional information about an operand representation. + + @param buf: buffer to receive the result. may not be NULL (C++: + opinfo_t *) + @param ea: linear address of item (C++: ea_t) + @param n: number of operand, 0 or 1 (C++: int) + @param flags: flags of the item (C++: flags_t) + @return: NULL if no additional representation information + +Help on function get_optype_flags0 in module ida_bytes: + +get_optype_flags0(*args) + get_optype_flags0(F) -> flags_t + + + Get flags for first operand. + + + @param F (C++: flags_t) + +Help on function get_optype_flags1 in module ida_bytes: + +get_optype_flags1(*args) + get_optype_flags1(F) -> flags_t + + + Get flags for second operand. + + + @param F (C++: flags_t) + +Help on function get_original_byte in module ida_bytes: + +get_original_byte(*args) + get_original_byte(ea) -> uint64 + + + Get original byte value (that was before patching). This function + works for wide byte processors too. + + @param ea (C++: ea_t) + +Help on function get_original_dword in module ida_bytes: + +get_original_dword(*args) + get_original_dword(ea) -> uint64 + + + Get original dword (that was before patching) This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_original_qword in module ida_bytes: + +get_original_qword(*args) + get_original_qword(ea) -> uint64 + + + Get original qword value (that was before patching) This function + DOESN'T work for wide byte processors too. This function takes into + account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_original_word in module ida_bytes: + +get_original_word(*args) + get_original_word(ea) -> uint64 + + + Get original word value (that was before patching). This function + works for wide byte processors too. This function takes into account + order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_predef_insn_cmt in module ida_bytes: + +get_predef_insn_cmt(*args) + get_predef_insn_cmt(ins) -> str + + + Get predefined comment. + + @param ins: current instruction information (C++: const insn_t &) + @return: size of comment or -1 + +Help on function get_prev_hidden_range in module ida_bytes: + +get_prev_hidden_range(*args) + get_prev_hidden_range(ea) -> hidden_range_t + + + Get pointer to previous hidden range. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to hidden range or NULL if previous hidden range doesn't + exist + +Help on function get_qword in module ida_bytes: + +get_qword(*args) + get_qword(ea) -> uint64 + + + Get one qword (64-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_radix in module ida_bytes: + +get_radix(*args) + get_radix(F, n) -> int + + + Get radix of the operand, in: flags. If the operand is not a number, + returns 'get_default_radix()' + + @param F: flags (C++: flags_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: 2, 8, 10, 16 + +Help on function get_strlit_contents in module ida_bytes: + +get_strlit_contents(*args) + get_strlit_contents(ea, py_len, type, flags=0) -> PyObject * + + + Get bytes contents at location, possibly converted. + It works even if the string has not been created in the database yet. + + Note that this will always return a simple string of bytes + (i.e., a 'str' instance), and not a string of unicode characters. + + If you want auto-conversion to unicode strings (that is: real strings), + you should probably be using the idautils.Strings class. + + @param ea: linear address of the string + @param len: length of the string in bytes (including terminating 0) + @param type: type of the string. Represents both the character encoding, + and the 'type' of string at the given location. + @param flags: combination of STRCONV_..., to perform output conversion. + @return: a bytes-filled str object. + +Help on function get_stroff_path in module ida_bytes: + +get_stroff_path(*args) + get_stroff_path(path, delta, ea, n) -> int + + + Get struct path of operand. + + @param path: buffer for structure path (strpath). see nalt.hpp for + more info. (C++: tid_t *) + @param delta: struct offset delta (C++: adiff_t *) + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: length of strpath + +Help on function get_wide_byte in module ida_bytes: + +get_wide_byte(*args) + get_wide_byte(ea) -> uint64 + + + Get one wide byte of the program at 'ea'. Some processors may access + more than 8bit quantity at an address. These processors have 32-bit + byte organization from the IDA's point of view. + + @param ea (C++: ea_t) + +Help on function get_wide_dword in module ida_bytes: + +get_wide_dword(*args) + get_wide_dword(ea) -> uint64 + + + Get two wide words (4 'bytes') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in + \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 + + @param ea (C++: ea_t) + +Help on function get_wide_word in module ida_bytes: + +get_wide_word(*args) + get_wide_word(ea) -> uint64 + + + Get one wide word (2 'byte') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_word in module ida_bytes: + +get_word(*args) + get_word(ea) -> ushort + + + Get one word (16-bit) of the program at 'ea'. This function takes into + account order of bytes specified in \inf{is_be()} This function works + only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_zero_ranges in module ida_bytes: + +get_zero_ranges(*args) + get_zero_ranges(zranges, range) -> bool + + + Return set of ranges with zero initialized bytes. The returned set + includes only big zero initialized ranges (at least >1KB). Some zero + initialized byte ranges may be not included. Only zero bytes that use + the sparse storage method (STT_MM) are reported. + + @param zranges: pointer to the return value. cannot be NULL (C++: + rangeset_t *) + @param range: the range of addresses to verify. can be NULL - means + all ranges (C++: const range_t *) + @return: true if the result is a non-empty set + +Help on function getn_hidden_range in module ida_bytes: + +getn_hidden_range(*args) + getn_hidden_range(n) -> hidden_range_t + + + Get pointer to hidden range structure, in: number of hidden range. + + @param n: number of hidden range, is in range 0.. + get_hidden_range_qty() -1 (C++: int) + +Help on function has_any_name in module ida_bytes: + +has_any_name(*args) + has_any_name(F) -> bool + + + Does the current byte have any name? + + + @param F (C++: flags_t) + +Help on function has_auto_name in module ida_bytes: + +has_auto_name(*args) + has_auto_name(F) -> bool + + + Does the current byte have auto-generated (no special prefix) name? + + + @param F (C++: flags_t) + +Help on function has_cmt in module ida_bytes: + +has_cmt(*args) + has_cmt(F) -> bool + + + Does the current byte have an indented comment? + + + @param F (C++: flags_t) + +Help on function has_dummy_name in module ida_bytes: + +has_dummy_name(*args) + has_dummy_name(F) -> bool + + + Does the current byte have dummy (auto-generated, with special prefix) + name? + + + @param F (C++: flags_t) + +Help on function has_extra_cmts in module ida_bytes: + +has_extra_cmts(*args) + has_extra_cmts(F) -> bool + + + Does the current byte have additional anterior or posterior lines? + + + @param F (C++: flags_t) + +Help on function has_immd in module ida_bytes: + +has_immd(*args) + has_immd(F) -> bool + + + Has immediate value? + + + @param F (C++: flags_t) + +Help on function has_name in module ida_bytes: + +has_name(*args) + has_name(F) -> bool + + + Does the current byte have non-trivial (non-dummy) name? + + + @param F (C++: flags_t) + +Help on function has_user_name in module ida_bytes: + +has_user_name(*args) + has_user_name(F) -> bool + + + Does the current byte have user-specified name? + + + @param F (C++: flags_t) + +Help on function has_value in module ida_bytes: + +has_value(*args) + has_value(F) -> bool + + + Do flags contain byte value? + + + @param F (C++: flags_t) + +Help on function has_xref in module ida_bytes: + +has_xref(*args) + has_xref(F) -> bool + + + Does the current byte have cross-references to it? + + + @param F (C++: flags_t) + +Help on function hex_flag in module ida_bytes: + +hex_flag(*args) + hex_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on class hidden_range_t in module ida_bytes: + +class hidden_range_t(ida_range.range_t) + | Proxy of C++ hidden_range_t class. + | + | Method resolution order: + | hidden_range_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> hidden_range_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | color + | hidden_range_t_color_get(self) -> bgcolor_t + | + | description + | hidden_range_t_description_get(self) -> char * + | + | footer + | hidden_range_t_footer_get(self) -> char * + | + | header + | hidden_range_t_header_get(self) -> char * + | + | thisown + | The membership flag + | + | visible + | hidden_range_t_visible_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_hidden_range_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on function is_align in module ida_bytes: + +is_align(*args) + is_align(F) -> bool + + + 'FF_ALIGN' + + + @param F (C++: flags_t) + +Help on function is_attached_custom_data_format in module ida_bytes: + +is_attached_custom_data_format(*args) + is_attached_custom_data_format(dtid, dfid) -> bool + +Help on function is_bnot in module ida_bytes: + +is_bnot(*args) + is_bnot(ea, F, n) -> bool + + + Should we negate the operand?. \ash{a_bnot} should be defined in the + idp module in order to work with this function + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_byte in module ida_bytes: + +is_byte(*args) + is_byte(F) -> bool + + + 'FF_BYTE' + + + @param F (C++: flags_t) + +Help on function is_char in module ida_bytes: + +is_char(*args) + is_char(F, n) -> bool + + + is character constant? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_char0 in module ida_bytes: + +is_char0(*args) + is_char0(F) -> bool + + + Is the first operand character constant? (example: push 'a') + + + @param F (C++: flags_t) + +Help on function is_char1 in module ida_bytes: + +is_char1(*args) + is_char1(F) -> bool + + + Is the second operand character constant? (example: mov al, 'a') + + + @param F (C++: flags_t) + +Help on function is_code in module ida_bytes: + +is_code(*args) + is_code(F) -> bool + + + Does flag denote start of an instruction? + + + @param F (C++: flags_t) + +Help on function is_custfmt in module ida_bytes: + +is_custfmt(*args) + is_custfmt(F, n) -> bool + + + is custom data format? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_custfmt0 in module ida_bytes: + +is_custfmt0(*args) + is_custfmt0(F) -> bool + + + Does the first operand use a custom data representation? + + + @param F (C++: flags_t) + +Help on function is_custfmt1 in module ida_bytes: + +is_custfmt1(*args) + is_custfmt1(F) -> bool + + + Does the second operand use a custom data representation? + + + @param F (C++: flags_t) + +Help on function is_custom in module ida_bytes: + +is_custom(*args) + is_custom(F) -> bool + + + 'FF_CUSTOM' + + + @param F (C++: flags_t) + +Help on function is_data in module ida_bytes: + +is_data(*args) + is_data(F) -> bool + + + Does flag denote start of data? + + + @param F (C++: flags_t) + +Help on function is_defarg in module ida_bytes: + +is_defarg(*args) + is_defarg(F, n) -> bool + + + is defined? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_defarg0 in module ida_bytes: + +is_defarg0(*args) + is_defarg0(F) -> bool + + + Is the first operand defined? Initially operand has no defined + representation. + + + @param F (C++: flags_t) + +Help on function is_defarg1 in module ida_bytes: + +is_defarg1(*args) + is_defarg1(F) -> bool + + + Is the second operand defined? Initially operand has no defined + representation. + + + @param F (C++: flags_t) + +Help on function is_double in module ida_bytes: + +is_double(*args) + is_double(F) -> bool + + + 'FF_DOUBLE' + + + @param F (C++: flags_t) + +Help on function is_dword in module ida_bytes: + +is_dword(*args) + is_dword(F) -> bool + + + 'FF_DWORD' + + + @param F (C++: flags_t) + +Help on function is_enum in module ida_bytes: + +is_enum(*args) + is_enum(F, n) -> bool + + + is enum? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_enum0 in module ida_bytes: + +is_enum0(*args) + is_enum0(F) -> bool + + + Is the first operand a symbolic constant (enum member)? + + + @param F (C++: flags_t) + +Help on function is_enum1 in module ida_bytes: + +is_enum1(*args) + is_enum1(F) -> bool + + + Is the second operand a symbolic constant (enum member)? + + + @param F (C++: flags_t) + +Help on function is_float in module ida_bytes: + +is_float(*args) + is_float(F) -> bool + + + 'FF_FLOAT' + + + @param F (C++: flags_t) + +Help on function is_float0 in module ida_bytes: + +is_float0(*args) + is_float0(F) -> bool + + + Is the first operand a floating point number? + + + @param F (C++: flags_t) + +Help on function is_float1 in module ida_bytes: + +is_float1(*args) + is_float1(F) -> bool + + + Is the second operand a floating point number? + + + @param F (C++: flags_t) + +Help on function is_flow in module ida_bytes: + +is_flow(*args) + is_flow(F) -> bool + + + Does the previous instruction exist and pass execution flow to the + current byte? + + + @param F (C++: flags_t) + +Help on function is_fltnum in module ida_bytes: + +is_fltnum(*args) + is_fltnum(F, n) -> bool + + + is floating point number? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_forced_operand in module ida_bytes: + +is_forced_operand(*args) + is_forced_operand(ea, n) -> bool + + + Is operand manually defined?. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + +Help on function is_func in module ida_bytes: + +is_func(*args) + is_func(F) -> bool + + + Is function start? + + + @param F (C++: flags_t) + +Help on function is_head in module ida_bytes: + +is_head(*args) + is_head(F) -> bool + + + Does flag denote start of instruction OR data? + + + @param F (C++: flags_t) + +Help on function is_invsign in module ida_bytes: + +is_invsign(*args) + is_invsign(ea, F, n) -> bool + + + Should sign of n-th operand inverted during output?. allowed values of + n: 0-first operand, 1-other operands + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_loaded in module ida_bytes: + +is_loaded(*args) + is_loaded(ea) -> bool + + + Does the specified address have a byte value (is initialized?) + + + @param ea (C++: ea_t) + +Help on function is_lzero in module ida_bytes: + +is_lzero(*args) + is_lzero(ea, n) -> bool + + + Display leading zeroes in operands. The global switch for the leading + zeroes is in \inf{s_genflags} The leading zeroes doesn't work if the + octal numbers start with 0 Display leading zeroes? (takes into account + \inf{s_genflags}) + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function is_manual in module ida_bytes: + +is_manual(*args) + is_manual(F, n) -> bool + + + is forced operand? (use 'is_forced_operand()' ) + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_manual_insn in module ida_bytes: + +is_manual_insn(*args) + is_manual_insn(ea) -> bool + + + Is the instruction overridden? + + @param ea: linear address of the instruction or data item (C++: ea_t) + +Help on function is_mapped in module ida_bytes: + +is_mapped(*args) + is_mapped(ea) -> bool + + + Is the specified address 'ea' present in the program? + + + @param ea (C++: ea_t) + +Help on function is_not_tail in module ida_bytes: + +is_not_tail(*args) + is_not_tail(F) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function is_numop in module ida_bytes: + +is_numop(*args) + is_numop(F, n) -> bool + + + is number (bin, oct, dec, hex)? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_numop0 in module ida_bytes: + +is_numop0(*args) + is_numop0(F) -> bool + + + Is the first operand a number (i.e. binary, octal, decimal or hex?) + + + @param F (C++: flags_t) + +Help on function is_numop1 in module ida_bytes: + +is_numop1(*args) + is_numop1(F) -> bool + + + Is the second operand a number (i.e. binary, octal, decimal or hex?) + + + @param F (C++: flags_t) + +Help on function is_off in module ida_bytes: + +is_off(*args) + is_off(F, n) -> bool + + + is offset? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_off0 in module ida_bytes: + +is_off0(*args) + is_off0(F) -> bool + + + Is the first operand offset? (example: push offset xxx) + + + @param F (C++: flags_t) + +Help on function is_off1 in module ida_bytes: + +is_off1(*args) + is_off1(F) -> bool + + + Is the second operand offset? (example: mov ax, offset xxx) + + + @param F (C++: flags_t) + +Help on function is_oword in module ida_bytes: + +is_oword(*args) + is_oword(F) -> bool + + + 'FF_OWORD' + + + @param F (C++: flags_t) + +Help on function is_pack_real in module ida_bytes: + +is_pack_real(*args) + is_pack_real(F) -> bool + + + 'FF_PACKREAL' + + + @param F (C++: flags_t) + +Help on function is_qword in module ida_bytes: + +is_qword(*args) + is_qword(F) -> bool + + + 'FF_QWORD' + + + @param F (C++: flags_t) + +Help on function is_same_data_type in module ida_bytes: + +is_same_data_type(*args) + is_same_data_type(F1, F2) -> bool + + + Do the given flags specify the same data type? + + + @param F1 (C++: flags_t) + @param F2 (C++: flags_t) + +Help on function is_seg in module ida_bytes: + +is_seg(*args) + is_seg(F, n) -> bool + + + is segment? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_seg0 in module ida_bytes: + +is_seg0(*args) + is_seg0(F) -> bool + + + Is the first operand segment selector? (example: push seg seg001) + + + @param F (C++: flags_t) + +Help on function is_seg1 in module ida_bytes: + +is_seg1(*args) + is_seg1(F) -> bool + + + Is the second operand segment selector? (example: mov dx, seg dseg) + + + @param F (C++: flags_t) + +Help on function is_stkvar in module ida_bytes: + +is_stkvar(*args) + is_stkvar(F, n) -> bool + + + is stack variable? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_stkvar0 in module ida_bytes: + +is_stkvar0(*args) + is_stkvar0(F) -> bool + + + Is the first operand a stack variable? + + + @param F (C++: flags_t) + +Help on function is_stkvar1 in module ida_bytes: + +is_stkvar1(*args) + is_stkvar1(F) -> bool + + + Is the second operand a stack variable? + + + @param F (C++: flags_t) + +Help on function is_strlit in module ida_bytes: + +is_strlit(*args) + is_strlit(F) -> bool + + + 'FF_STRLIT' + + + @param F (C++: flags_t) + +Help on function is_stroff in module ida_bytes: + +is_stroff(*args) + is_stroff(F, n) -> bool + + + is struct offset? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_stroff0 in module ida_bytes: + +is_stroff0(*args) + is_stroff0(F) -> bool + + + Is the first operand an offset within a struct? + + + @param F (C++: flags_t) + +Help on function is_stroff1 in module ida_bytes: + +is_stroff1(*args) + is_stroff1(F) -> bool + + + Is the second operand an offset within a struct? + + + @param F (C++: flags_t) + +Help on function is_struct in module ida_bytes: + +is_struct(*args) + is_struct(F) -> bool + + + 'FF_STRUCT' + + + @param F (C++: flags_t) + +Help on function is_suspop in module ida_bytes: + +is_suspop(*args) + is_suspop(ea, F, n) -> bool + + + is suspicious operand? + + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_tail in module ida_bytes: + +is_tail(*args) + is_tail(F) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function is_tbyte in module ida_bytes: + +is_tbyte(*args) + is_tbyte(F) -> bool + + + 'FF_TBYTE' + + + @param F (C++: flags_t) + +Help on function is_unknown in module ida_bytes: + +is_unknown(*args) + is_unknown(F) -> bool + + + Does flag denote unexplored byte? + + + @param F (C++: flags_t) + +Help on function is_varsize_item in module ida_bytes: + +is_varsize_item(*args) + is_varsize_item(ea, F, ti=None, itemsize=None) -> int + + + Is the item at 'ea' variable size?. + + @param ea: linear address of the item (C++: ea_t) + @param F: flags (C++: flags_t) + @param ti: additional information about the data type. For example, if + the current item is a structure instance, then ti->tid is + structure id. Otherwise is ignored (may be NULL). If + specified as NULL, will be automatically retrieved from the + database (C++: const opinfo_t *) + @param itemsize: if not NULL and the item is varsize, itemsize will + contain the calculated item size (for struct types, + the minimal size is returned) (C++: asize_t *) + +Help on function is_word in module ida_bytes: + +is_word(*args) + is_word(F) -> bool + + + 'FF_WORD' + + + @param F (C++: flags_t) + +Help on function is_yword in module ida_bytes: + +is_yword(*args) + is_yword(F) -> bool + + + 'FF_YWORD' + + + @param F (C++: flags_t) + +Help on function is_zword in module ida_bytes: + +is_zword(*args) + is_zword(F) -> bool + + + 'FF_ZWORD' + + + @param F (C++: flags_t) + +Help on function leading_zero_important in module ida_bytes: + +leading_zero_important(*args) + leading_zero_important(ea, n) -> bool + + + Check if leading zeroes are important. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function nbits in module ida_bytes: + +nbits(*args) + nbits(ea) -> int + + + Get number of bits in a byte at the given address. + + @param ea (C++: ea_t) + @return: \ph{dnbits()} if the address doesn't belong to a segment, + otherwise the result depends on the segment type + +Help on function next_addr in module ida_bytes: + +next_addr(*args) + next_addr(ea) -> ea_t + + + Get next address in the program (i.e. next address which has flags). + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function next_chunk in module ida_bytes: + +next_chunk(*args) + next_chunk(ea) -> ea_t + + + Get the first address of next contiguous chunk in the program. + + @param ea (C++: ea_t) + @return: BADADDR if next chunk doesn't exist. + +Help on function next_head in module ida_bytes: + +next_head(*args) + next_head(ea, maxea) -> ea_t + + + Get start of next defined item. + + @param ea: begin search at this address (C++: ea_t) + @param maxea: not included in the search range (C++: ea_t) + @return: BADADDR if none exists. + +Help on function next_inited in module ida_bytes: + +next_inited(*args) + next_inited(ea, maxea) -> ea_t + + + Find the next initialized address. + + + @param ea (C++: ea_t) + @param maxea (C++: ea_t) + +Help on function next_not_tail in module ida_bytes: + +next_not_tail(*args) + next_not_tail(ea) -> ea_t + + + Get address of next non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function next_that in module ida_bytes: + +next_that(*args) + next_that(ea, maxea, callable) -> ea_t + + + Find next address with a flag satisfying the function 'testf'. + Start searching from address 'ea'+1 and inspect bytes up to 'maxea'. + maxea is not included in the search range. + + @param callable: a Python callable with the following prototype: + callable(flags). Return True to stop enumeration. + @return: the found address or BADADDR. + +Help on function next_unknown in module ida_bytes: + +next_unknown(*args) + next_unknown(ea, maxea) -> ea_t + + + Similar to 'next_that()' , but will find the next address that is + unexplored. + + + @param ea (C++: ea_t) + @param maxea (C++: ea_t) + +Help on function num_flag in module ida_bytes: + +num_flag(*args) + num_flag() -> flags_t + + + Get number of default base (bin, oct, dec, hex) + +Help on function oct_flag in module ida_bytes: + +oct_flag(*args) + oct_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function off_flag in module ida_bytes: + +off_flag(*args) + off_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function op_adds_xrefs in module ida_bytes: + +op_adds_xrefs(*args) + op_adds_xrefs(F, n) -> bool + + + Should processor module create xrefs from the operand?. Currently + 'offset' and 'structure offset' operands create xrefs + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function op_bin in module ida_bytes: + +op_bin(*args) + op_bin(ea, n) -> bool + + + set op type to 'bin_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_chr in module ida_bytes: + +op_chr(*args) + op_chr(ea, n) -> bool + + + set op type to 'char_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_custfmt in module ida_bytes: + +op_custfmt(*args) + op_custfmt(ea, n, fid) -> bool + + + Set custom data format for operand (fid-custom data format id) + + + @param ea (C++: ea_t) + @param n (C++: int) + @param fid (C++: int) + +Help on function op_dec in module ida_bytes: + +op_dec(*args) + op_dec(ea, n) -> bool + + + set op type to 'dec_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_enum in module ida_bytes: + +op_enum(*args) + op_enum(ea, n, id, serial) -> bool + + + Set operand representation to be 'enum_t'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @param id: id of enum (C++: enum_t) + @param serial: the serial number of the constant in the enumeration, + usually 0. the serial numbers are used if the + enumeration contains several constants with the same + value (C++: uchar) + @return: success + +Help on function op_flt in module ida_bytes: + +op_flt(*args) + op_flt(ea, n) -> bool + + + set op type to 'flt_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_hex in module ida_bytes: + +op_hex(*args) + op_hex(ea, n) -> bool + + + set op type to 'hex_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_num in module ida_bytes: + +op_num(*args) + op_num(ea, n) -> bool + + + set op type to 'num_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_oct in module ida_bytes: + +op_oct(*args) + op_oct(ea, n) -> bool + + + set op type to 'oct_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_seg in module ida_bytes: + +op_seg(*args) + op_seg(ea, n) -> bool + + + Set operand representation to be 'segment'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stkvar in module ida_bytes: + +op_stkvar(*args) + op_stkvar(ea, n) -> bool + + + Set operand representation to be 'stack variable'. Should be applied + to an instruction within a function. Should be applied after creating + a stack var using 'insn_t::create_stkvar()' . + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stroff in module ida_bytes: + +op_stroff(*args) + op_stroff(insn, n, path, path_len, delta) -> bool + + + Set operand representation to be 'struct offset'. If applied to + unexplored bytes, converts them to 16/32bit word data + + @param insn: the instruction (C++: const insn_t &) + @param n: number of operand (0, 1, -1) (C++: int) + @param path: structure path (strpath). see nalt.hpp for more info. + (C++: const tid_t *) + @param path_len: length of the structure path (C++: int) + @param delta: struct offset delta. usually 0. denotes the difference + between the structure base and the pointer into the + structure. (C++: adiff_t) + @return: success + + Example: + Python> + Python> ins = ida_ua.insn_t() + Python> if ida_ua.decode_insn(ins, some_address): + Python> path_len = 1 + Python> path = ida_pro.tid_array(path_len) + Python> path[0] = ida_struct.get_struc_id("my_stucture_t") + Python> ida_bytes.op_stroff(ins, 0, path.cast(), path_len, 0) + Python> + +Help on function oword_flag in module ida_bytes: + +oword_flag(*args) + oword_flag() -> flags_t + + + Get a flags_t representing a octaword. + +Help on function packreal_flag in module ida_bytes: + +packreal_flag(*args) + packreal_flag() -> flags_t + + + Get a flags_t representing a packed decimal real. + +Help on function patch_byte in module ida_bytes: + +patch_byte(*args) + patch_byte(ea, x) -> bool + + + Patch a byte of the program. The original value of the byte is saved + and can be obtained by 'get_original_byte()' . This function works for + wide byte processors too. + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_bytes in module ida_bytes: + +patch_bytes(*args) + patch_bytes(ea, buf) + + + Patch the specified number of bytes of the program. Original values of + bytes are saved and are available with get_original...() functions. + See also 'put_bytes()' . + + @param ea: linear address (C++: ea_t) + @param buf: buffer with new values of bytes (C++: const void *) + +Help on function patch_dword in module ida_bytes: + +patch_dword(*args) + patch_dword(ea, x) -> bool + + + Patch a dword of the program. The original value of the dword is saved + and can be obtained by 'get_original_dword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_qword in module ida_bytes: + +patch_qword(*args) + patch_qword(ea, x) -> bool + + + Patch a qword of the program. The original value of the qword is saved + and can be obtained by 'get_original_qword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_word in module ida_bytes: + +patch_word(*args) + patch_word(ea, x) -> bool + + + Patch a word of the program. The original value of the word is saved + and can be obtained by 'get_original_word()' . This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function prev_addr in module ida_bytes: + +prev_addr(*args) + prev_addr(ea) -> ea_t + + + Get previous address in the program. + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function prev_chunk in module ida_bytes: + +prev_chunk(*args) + prev_chunk(ea) -> ea_t + + + Get the last address of previous contiguous chunk in the program. + + @param ea (C++: ea_t) + @return: BADADDR if previous chunk doesn't exist. + +Help on function prev_head in module ida_bytes: + +prev_head(*args) + prev_head(ea, minea) -> ea_t + + + Get start of previous defined item. + + @param ea: begin search at this address (C++: ea_t) + @param minea: included in the search range (C++: ea_t) + @return: BADADDR if none exists. + +Help on function prev_inited in module ida_bytes: + +prev_inited(*args) + prev_inited(ea, minea) -> ea_t + + + Find the previous initialized address. + + + @param ea (C++: ea_t) + @param minea (C++: ea_t) + +Help on function prev_not_tail in module ida_bytes: + +prev_not_tail(*args) + prev_not_tail(ea) -> ea_t + + + Get address of previous non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function prev_that in module ida_bytes: + +prev_that(*args) + prev_that(ea, minea, callable) -> ea_t + + + Find previous address with a flag satisfying the function 'testf'.do + not pass 'is_unknown()' to this function to find unexplored bytes It + will fail under the debugger. To find unexplored bytes, use + 'prev_unknown()' . + + @param ea: start searching from this address - 1. (C++: ea_t) + @param minea: included in the search range. (C++: ea_t) + @return: the found address or BADADDR . + +Help on function prev_unknown in module ida_bytes: + +prev_unknown(*args) + prev_unknown(ea, minea) -> ea_t + + + Similar to 'prev_that()' , but will find the previous address that is + unexplored. + + + @param ea (C++: ea_t) + @param minea (C++: ea_t) + +Help on function print_strlit_type in module ida_bytes: + +print_strlit_type(*args) + print_strlit_type(strtype, flags=0) -> PyObject * + + + Get string type information: the string type name (possibly decorated + with hotkey markers), and the tooltip. + + @param strtype: the string type (C++: int32) + @param flags: or'ed PSTF_* constants (C++: int) + @return: length of generated text + +Help on function put_byte in module ida_bytes: + +put_byte(*args) + put_byte(ea, x) -> bool + + + Set value of one byte of the program. This function modifies the + database. If the debugger is active then the debugged process memory + is patched too.The original value of the byte is completely lost and + can't be recovered by the 'get_original_byte()' function. See also + 'put_dbg_byte()' to write to the process memory directly when the + debugger is active. This function can handle wide byte processors. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint64) + @return: true if the database has been modified + +Help on function put_bytes in module ida_bytes: + +put_bytes(*args) + put_bytes(ea, buf) + + + Modify the specified number of bytes of the program. This function + does not save the original values of bytes. See also 'patch_bytes()' . + + @param ea: linear address (C++: ea_t) + @param buf: buffer with new values of bytes (C++: const void *) + +Help on function put_dword in module ida_bytes: + +put_dword(*args) + put_dword(ea, x) + + + Set value of one dword of the program. This function takes into + account order of bytes specified in \inf{is_be()} This function works + for wide byte processors too.the original value of the dword is + completely lost and can't be recovered by the 'get_original_dword()' + function. + + @param ea: linear address (C++: ea_t) + @param x: dword value (C++: uint64) + +Help on function put_qword in module ida_bytes: + +put_qword(*args) + put_qword(ea, x) + + + Set value of one qword (8 bytes) of the program. This function takes + into account order of bytes specified in \inf{is_be()} This function + DOESN'T works for wide byte processors. + + @param ea: linear address (C++: ea_t) + @param x: qword value (C++: uint64) + +Help on function put_word in module ida_bytes: + +put_word(*args) + put_word(ea, x) + + + Set value of one word of the program. This function takes into account + order of bytes specified in \inf{is_be()} This function works for wide + byte processors too.The original value of the word is completely lost + and can't be recovered by the 'get_original_word()' function. ea - + linear address x - word value + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function qword_flag in module ida_bytes: + +qword_flag(*args) + qword_flag() -> flags_t + + + Get a flags_t representing a quad word. + +Help on function register_custom_data_format in module ida_bytes: + +register_custom_data_format(*args) + register_custom_data_format(py_df) -> int + + + Registers a custom data format with a given data type. + @param df: an instance of data_format_t + @return: + < 0 if failed to register + > 0 data format id + +Help on function register_custom_data_type in module ida_bytes: + +register_custom_data_type(*args) + register_custom_data_type(py_dt) -> int + + + Registers a custom data type. + @param dt: an instance of the data_type_t class + @return: + < 0 if failed to register + > 0 data type id + +Help on function register_data_types_and_formats in module ida_bytes: + +register_data_types_and_formats(formats) + Registers multiple data types and formats at once. + To register one type/format at a time use register_custom_data_type/register_custom_data_format + + It employs a special table of types and formats described below: + + The 'formats' is a list of tuples. If a tuple has one element then it is the format to be registered with dtid=0 + If the tuple has more than one element, then tuple[0] is the data type and tuple[1:] are the data formats. For example: + many_formats = [ + (pascal_data_type(), pascal_data_format()), + (simplevm_data_type(), simplevm_data_format()), + (makedword_data_format(),), + (simplevm_data_format(),) + ] + The first two tuples describe data types and their associated formats. + The last two tuples describe two data formats to be used with built-in data types. + The data format may be attached to several data types. The id of the + data format is stored in the first data_format_t object. For example: + assert many_formats[1][1] != -1 + assert many_formats[2][0] != -1 + assert many_formats[3][0] == -1 + +Help on function revert_byte in module ida_bytes: + +revert_byte(*args) + revert_byte(ea) -> bool + + + Revert patched byte + + @param ea (C++: ea_t) + +Help on function seg_flag in module ida_bytes: + +seg_flag(*args) + seg_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function set_cmt in module ida_bytes: + +set_cmt(*args) + set_cmt(ea, comm, rptble) -> bool + + + Set an indented comment. + + @param ea: linear address (C++: ea_t) + @param comm: comment string NULL: do nothing (return 0) "" : + delete comment (C++: const char *) + @param rptble: is repeatable? (C++: bool) + @return: success + +Help on function set_forced_operand in module ida_bytes: + +set_forced_operand(*args) + set_forced_operand(ea, n, op) -> bool + + + Set forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @param op: text of operand NULL: do nothing (return 0) "" : delete + forced operand (C++: const char *) + @return: success + +Help on function set_immd in module ida_bytes: + +set_immd(*args) + set_immd(ea) -> bool + + + Set 'has immediate operand' flag. Returns true if the 'FF_IMMD' bit + was not set and now is set + + @param ea (C++: ea_t) + +Help on function set_lzero in module ida_bytes: + +set_lzero(*args) + set_lzero(ea, n) -> bool + + + Set toggle lzero bit. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function set_manual_insn in module ida_bytes: + +set_manual_insn(*args) + set_manual_insn(ea, manual_insn) + + + Set manual instruction string. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @param manual_insn: "" - delete manual string. NULL - do nothing (C++: + const char *) + +Help on function set_op_type in module ida_bytes: + +set_op_type(*args) + set_op_type(ea, type, n) -> bool + + + (internal function) change representation of operand(s). + + @param ea: linear address (C++: ea_t) + @param type: new flag value (should be obtained from char_flag() , + num_flag() and similar functions) (C++: flags_t) + @param n: number of operand (0, 1, -1) (C++: int) + +Help on function set_opinfo in module ida_bytes: + +set_opinfo(*args) + set_opinfo(ea, n, flag, ti, suppress_events=False) -> bool + + + Set additional information about an operand representation. This + function is a low level one. Only the kernel should use it. + + @param ea: linear address of the item (C++: ea_t) + @param n: number of operand, 0 or 1 (C++: int) + @param flag: flags of the item (C++: flags_t) + @param ti: additional representation information (C++: const opinfo_t + *) + @param suppress_events: do not generate changing_op_type and + op_type_changed events (C++: bool) + @return: success + +Help on function stkvar_flag in module ida_bytes: + +stkvar_flag(*args) + stkvar_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function strlit_flag in module ida_bytes: + +strlit_flag(*args) + strlit_flag() -> flags_t + + + Get a flags_t representing a string literal. + +Help on function stroff_flag in module ida_bytes: + +stroff_flag(*args) + stroff_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function stru_flag in module ida_bytes: + +stru_flag(*args) + stru_flag() -> flags_t + + + Get a flags_t representing a struct. + +Help on function tbyte_flag in module ida_bytes: + +tbyte_flag(*args) + tbyte_flag() -> flags_t + + + Get a flags_t representing a tbyte. + +Help on function toggle_bnot in module ida_bytes: + +toggle_bnot(*args) + toggle_bnot(ea, n) -> bool + + + Toggle binary negation of operand. also see 'is_bnot()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function toggle_lzero in module ida_bytes: + +toggle_lzero(*args) + toggle_lzero(ea, n) -> bool + +Help on function toggle_sign in module ida_bytes: + +toggle_sign(*args) + toggle_sign(ea, n) -> bool + + + Toggle sign of n-th operand. allowed values of n: 0-first operand, + 1-other operands + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function unregister_custom_data_format in module ida_bytes: + +unregister_custom_data_format(*args) + unregister_custom_data_format(dfid) -> bool + + + Unregisters a custom data format + @param dfid: data format id + @return: Boolean + +Help on function unregister_custom_data_type in module ida_bytes: + +unregister_custom_data_type(*args) + unregister_custom_data_type(dtid) -> bool + + + Unregisters a custom data type. + @param dtid: the data type id + @return: Boolean + +Help on function unregister_data_types_and_formats in module ida_bytes: + +unregister_data_types_and_formats(formats) + As opposed to register_data_types_and_formats(), this function + unregisters multiple data types and formats at once. + +Help on function update_hidden_range in module ida_bytes: + +update_hidden_range(*args) + update_hidden_range(ha) -> bool + + + Update hidden range information in the database. You cannot use this + function to change the range boundaries + + @param ha: range to update (C++: const hidden_range_t *) + @return: success + +Help on function use_mapping in module ida_bytes: + +use_mapping(*args) + use_mapping(ea) -> ea_t + + + Translate address according to current mappings. + + @param ea: address to translate (C++: ea_t) + @return: translated address + +Help on function visit_patched_bytes in module ida_bytes: + +visit_patched_bytes(*args) + visit_patched_bytes(ea1, ea2, py_callable) -> int + + + Enumerates patched bytes in the given range and invokes a callable + @param ea1: start address + @param ea2: end address + @param callable: a Python callable with the following prototype: + callable(ea, fpos, org_val, patch_val). + If the callable returns non-zero then that value will be + returned to the caller and the enumeration will be + interrupted. + @return: Zero if the enumeration was successful or the return + value of the callback if enumeration was interrupted. + +Help on function word_flag in module ida_bytes: + +word_flag(*args) + word_flag() -> flags_t + + + Get a flags_t representing a word. + +Help on function yword_flag in module ida_bytes: + +yword_flag(*args) + yword_flag() -> flags_t + + + Get a flags_t representing a ymm word. + +Help on function zword_flag in module ida_bytes: + +zword_flag(*args) + zword_flag() -> flags_t + + + Get a flags_t representing a zmm word. + +=== ida_bytes EPYDOC INJECTIONS === +ida_bytes.ALOPT_IGNCLT +""" +if set, don't stop at codepoints that are not part of the current +'culture'; accept all those that are graphical (this is typically used +used by user-initiated actions creating string literals.) +""" + +ida_bytes.ALOPT_IGNHEADS +""" +don't stop if another data item is encountered. only the byte values +will be used to determine the string length. if not set, a defined +data item or instruction will truncate the string +""" + +ida_bytes.ALOPT_IGNPRINT +""" +if set, don't stop at non-printable codepoints, but only at the +terminating character (or not unicode-mapped character (e.g., 0x8f in +CP1252)) +""" + +ida_bytes.ALOPT_MAX4K +""" +accumulated length + +if string length is more than 4K, return the +""" + +ida_bytes.BIN_SEARCH_BACKWARD +""" +search backward for bytes +""" + +ida_bytes.BIN_SEARCH_CASE +""" +case sensitive +""" + +ida_bytes.BIN_SEARCH_FORWARD +""" +search forward for bytes +""" + +ida_bytes.BIN_SEARCH_INITED +""" +find_byte, find_byter: any initilized value +""" + +ida_bytes.BIN_SEARCH_NOBREAK +""" +don't check for Ctrl-Break +""" + +ida_bytes.BIN_SEARCH_NOCASE +""" +case insensitive +""" + +ida_bytes.BIN_SEARCH_NOSHOW +""" +don't show search progress or update screen +""" + +ida_bytes.DELIT_DELNAMES +""" +delete any names at the specified address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_EXPAND +""" +propagate undefined items; for example if removing an instruction +removes all references to the next instruction, then plan to convert +to unexplored the next instruction too. +""" + +ida_bytes.DELIT_KEEPFUNC +""" +Just delete xrefs, ops e.t.c. + +do not undefine the function start. +""" + +ida_bytes.DELIT_NOCMT +""" +reject to delete if a comment is in address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_NOTRUNC +""" +even if 'AF_TRFUNC' is set + +don't truncate the current function +""" + +ida_bytes.DELIT_NOUNAME +""" +reject to delete if a user name is in address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_SIMPLE +""" +simply undefine the specified item(s) +""" + +ida_bytes.DTP_NODUP +""" +do not use dup construct +""" + +ida_bytes.DT_TYPE +""" +Mask for DATA typing. +""" + +ida_bytes.FF_0CHAR +""" +Char ('x')? +""" + +ida_bytes.FF_0CUST +""" +Custom representation? +""" + +ida_bytes.FF_0ENUM +""" +Enumeration? +""" + +ida_bytes.FF_0FLT +""" +Floating point number? +""" + +ida_bytes.FF_0FOP +""" +Forced operand? +""" + +ida_bytes.FF_0NUMB +""" +Binary number? +""" + +ida_bytes.FF_0NUMD +""" +Decimal number? +""" + +ida_bytes.FF_0NUMH +""" +Hexadecimal number? +""" + +ida_bytes.FF_0NUMO +""" +Octal number? +""" + +ida_bytes.FF_0OFF +""" +Offset? +""" + +ida_bytes.FF_0SEG +""" +Segment? +""" + +ida_bytes.FF_0STK +""" +Stack variable? +""" + +ida_bytes.FF_0STRO +""" +Struct offset? +""" + +ida_bytes.FF_0VOID +""" +Void (unknown)? +""" + +ida_bytes.FF_1CHAR +""" +Char ('x')? +""" + +ida_bytes.FF_1CUST +""" +Custom representation? +""" + +ida_bytes.FF_1ENUM +""" +Enumeration? +""" + +ida_bytes.FF_1FLT +""" +Floating point number? +""" + +ida_bytes.FF_1FOP +""" +Forced operand? +""" + +ida_bytes.FF_1NUMB +""" +Binary number? +""" + +ida_bytes.FF_1NUMD +""" +Decimal number? +""" + +ida_bytes.FF_1NUMH +""" +Hexadecimal number? +""" + +ida_bytes.FF_1NUMO +""" +Octal number? +""" + +ida_bytes.FF_1OFF +""" +Offset? +""" + +ida_bytes.FF_1SEG +""" +Segment? +""" + +ida_bytes.FF_1STK +""" +Stack variable? +""" + +ida_bytes.FF_1STRO +""" +Struct offset? +""" + +ida_bytes.FF_1VOID +""" +Void (unknown)? +""" + +ida_bytes.FF_ALIGN +""" +alignment directive +""" + +ida_bytes.FF_BNOT +""" +Bitwise negation of operands. +""" + +ida_bytes.FF_BYTE +""" +byte +""" + +ida_bytes.FF_CODE +""" +Code ? +""" + +ida_bytes.FF_COMM +""" +Has comment ? +""" + +ida_bytes.FF_CUSTOM +""" +custom data type +""" + +ida_bytes.FF_DATA +""" +Data ? +""" + +ida_bytes.FF_DOUBLE +""" +double +""" + +ida_bytes.FF_DWORD +""" +double word +""" + +ida_bytes.FF_FLOAT +""" +float +""" + +ida_bytes.FF_FLOW +""" +Exec flow from prev instruction. +""" + +ida_bytes.FF_FUNC +""" +function start? +""" + +ida_bytes.FF_IMMD +""" +Has Immediate value ? +""" + +ida_bytes.FF_IVL +""" +Byte has value ? +""" + +ida_bytes.FF_JUMP +""" +Has jump table or switch_info? +""" + +ida_bytes.FF_LABL +""" +Has dummy name? +""" + +ida_bytes.FF_LINE +""" +Has next or prev lines ? +""" + +ida_bytes.FF_NAME +""" +Has name ? +""" + +ida_bytes.FF_OWORD +""" +octaword/xmm word (16 bytes/128 bits) +""" + +ida_bytes.FF_PACKREAL +""" +packed decimal real +""" + +ida_bytes.FF_QWORD +""" +quadro word +""" + +ida_bytes.FF_REF +""" +has references +""" + +ida_bytes.FF_SIGN +""" +Inverted sign of operands. +""" + +ida_bytes.FF_STRLIT +""" +string literal +""" + +ida_bytes.FF_STRUCT +""" +struct variable +""" + +ida_bytes.FF_TAIL +""" +Tail ? +""" + +ida_bytes.FF_TBYTE +""" +tbyte +""" + +ida_bytes.FF_UNK +""" +Unknown ? +""" + +ida_bytes.FF_UNUSED +""" +unused bit (was used for variable bytes) +""" + +ida_bytes.FF_WORD +""" +word +""" + +ida_bytes.FF_YWORD +""" +ymm word (32 bytes/256 bits) +""" + +ida_bytes.FF_ZWORD +""" +zmm word (64 bytes/512 bits) +""" + +ida_bytes.GFE_VALUE +""" +get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote +debugging because the kernel needs to read the process memory. +""" + +ida_bytes.GMB_READALL +""" +if this bit is not set, fail at first uninited byte + +try to read all bytes +""" + +ida_bytes.GMB_WAITBOX +""" +show wait box (may return -1 in this case) +""" + +ida_bytes.ITEM_END_FIXUP +""" +stop at the first fixup +""" + +ida_bytes.ITEM_END_INITED +""" +stop when initialization changes i.e.if is_loaded(ea): stop if +uninitialized byte is encounteredif !is_loaded(ea): stop if +initialized byte is encountered +""" + +ida_bytes.ITEM_END_NAME +""" +stop at the first named location +""" + +ida_bytes.ITEM_END_XREF +""" +stop at the first referenced location +""" + +ida_bytes.MS_0TYPE +""" +Mask for 1st arg typing. +""" + +ida_bytes.MS_1TYPE +""" +Mask for the type of other operands. +""" + +ida_bytes.MS_CLS +""" +Mask for typing. +""" + +ida_bytes.MS_CODE +""" +Mask for code bits. +""" + +ida_bytes.MS_COMM +""" +Mask of common bits. +""" + +ida_bytes.MS_VAL +""" +Mask for byte value. +""" + +ida_bytes.OPND_ALL +""" +all operands +""" + +ida_bytes.OPND_MASK +""" +mask for operand number +""" + +ida_bytes.OPND_OUTER +""" +used only in set, get, del_offset() functions + +outer offset base (combined with operand number). +""" + +ida_bytes.PSTF_ENC +""" +if encoding is specified, append it +""" + +ida_bytes.PSTF_HOTKEY +""" +have hotkey markers part of the name +""" + +ida_bytes.PSTF_TBRIEF +""" +use brief name (e.g., in the 'Strings window') +""" + +ida_bytes.PSTF_TINLIN +""" +use 'inline' name (e.g., in the structures comments) +""" + +ida_bytes.PSTF_TMASK +""" +type mask +""" + +ida_bytes.PSTF_TNORM +""" +use normal name +""" + +ida_bytes.STRCONV_ESCAPE +""" +convert non-printable characters to C escapes (, \\xNN, \\uNNNN) +""" + +ida_bytes.STRCONV_INCLLEN +""" +for Pascal-style strings, include the prefixing length byte(s) as +C-escaped sequence +""" + +ida_bytes.STRCONV_REPLCHAR +""" +convert non-printable characters to the Unicode replacement character +(U+FFFD) +""" +=== ida_bytes EPYDOC INJECTIONS END === +Help on class DBG_Hooks in module ida_dbg: + +class DBG_Hooks(__builtin__.object) + | Proxy of C++ DBG_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> DBG_Hooks + | + | __repr__ = _swig_repr(self) + | + | dbg_bpt(self, *args) + | dbg_bpt(self, tid, bptea) -> int + | + | dbg_bpt_changed(self, *args) + | dbg_bpt_changed(self, bptev_code, bpt) + | + | dbg_exception(self, *args) + | dbg_exception(self, pid, tid, ea, exc_code, exc_can_cont, exc_ea, exc_info) -> int + | + | dbg_finished_loading_bpts(self, *args) + | dbg_finished_loading_bpts(self) + | + | dbg_information(self, *args) + | dbg_information(self, pid, tid, ea, info) + | + | dbg_library_load(self, *args) + | dbg_library_load(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_library_unload(self, *args) + | dbg_library_unload(self, pid, tid, ea, info) + | + | dbg_process_attach(self, *args) + | dbg_process_attach(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_process_detach(self, *args) + | dbg_process_detach(self, pid, tid, ea) + | + | dbg_process_exit(self, *args) + | dbg_process_exit(self, pid, tid, ea, exit_code) + | + | dbg_process_start(self, *args) + | dbg_process_start(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_request_error(self, *args) + | dbg_request_error(self, failed_command, failed_dbg_notification) + | + | dbg_run_to(self, *args) + | dbg_run_to(self, pid, tid, ea) + | + | dbg_started_loading_bpts(self, *args) + | dbg_started_loading_bpts(self) + | + | dbg_step_into(self, *args) + | dbg_step_into(self) + | + | dbg_step_over(self, *args) + | dbg_step_over(self) + | + | dbg_step_until_ret(self, *args) + | dbg_step_until_ret(self) + | + | dbg_suspend_process(self, *args) + | dbg_suspend_process(self) + | + | dbg_thread_exit(self, *args) + | dbg_thread_exit(self, pid, tid, ea, exit_code) + | + | dbg_thread_start(self, *args) + | dbg_thread_start(self, pid, tid, ea) + | + | dbg_trace(self, *args) + | dbg_trace(self, tid, ip) -> int + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_DBG_Hooks(self) + +Help on function add_bpt in module ida_dbg: + +add_bpt(*args) + add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + add_bpt(bpt) -> bool + + + Add a new breakpoint in the debugged process. \sq{Type, Synchronous + function - available as request, Notification, none (synchronous + function)}Only one breakpoint can exist at a given address. + + @param ea: any address in the process memory space. Depending on the + architecture, hardware breakpoints always be setup at + random address. For example, on x86, hardware breakpoints + should be aligned depending on their size. Moreover, on the + x86 architecture, it is impossible to setup more than 4 + hardware breakpoints. (C++: ea_t) + @param size: size of the breakpoint (irrelevant for software + breakpoints): As for the address, hardware breakpoints + can't always be setup with random size. (C++: asize_t) + @param type: type of the breakpoint ( BPT_SOFT for software + breakpoint) special case BPT_DEFAULT ( BPT_SOFT | + BPT_EXEC ): try to add instruction breakpoint of the + appropriate type as follows: software bpt if supported, + hwbpt otherwise (C++: bpttype_t) + +Help on function add_path_mapping in module ida_dbg: + +add_path_mapping(*args) + add_path_mapping(src, dst) + +Help on function add_virt_module in module ida_dbg: + +add_virt_module(*args) + add_virt_module(mod) -> bool + +Help on function attach_process in module ida_dbg: + +attach_process(*args) + attach_process(pid=pid_t(-1), event_id=-1) -> int + + + Attach the debugger to a running process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_attach' + }This function shouldn't be called as a request if 'NO_PROCESS' is + used. + + @param pid: PID of the process to attach to. If NO_PROCESS , a dialog + box will interactively ask the user for the process to + attach to. (C++: pid_t) + @param event_id (C++: int) + +Help on class bpt_location_t in module ida_dbg: + +class bpt_location_t(__builtin__.object) + | Proxy of C++ bpt_location_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> bpt_location_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ea(self, *args) + | ea(self) -> ea_t + | + | is_empty_path(self, *args) + | is_empty_path(self) -> bool + | + | lineno(self, *args) + | lineno(self) -> int + | + | offset(self, *args) + | offset(self) -> uval_t + | + | path(self, *args) + | path(self) -> char const * + | + | set_abs_bpt(self, *args) + | set_abs_bpt(self, a) + | + | set_rel_bpt(self, *args) + | set_rel_bpt(self, mod, _offset) + | + | set_src_bpt(self, *args) + | set_src_bpt(self, fn, _lineno) + | + | set_sym_bpt(self, *args) + | set_sym_bpt(self, _symbol, _offset=0) + | + | symbol(self, *args) + | symbol(self) -> char const * + | + | type(self, *args) + | type(self) -> bpt_loctype_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | index + | bpt_location_t_index_get(self) -> int + | + | info + | bpt_location_t_info_get(self) -> ea_t + | + | loctype + | bpt_location_t_loctype_get(self) -> bpt_loctype_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bpt_location_t(self) + +Help on class bpt_t in module ida_dbg: + +class bpt_t(__builtin__.object) + | Proxy of C++ bpt_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bpt_t + | + | __repr__ = _swig_repr(self) + | + | badbpt(self, *args) + | badbpt(self) -> bool + | + | enabled(self, *args) + | enabled(self) -> bool + | + | get_cnd_elang_idx(self, *args) + | get_cnd_elang_idx(self) -> size_t + | + | get_size(self, *args) + | get_size(self) -> int + | + | is_absbpt(self, *args) + | is_absbpt(self) -> bool + | + | is_active(self, *args) + | is_active(self) -> bool + | + | is_compiled(self, *args) + | is_compiled(self) -> bool + | + | is_hwbpt(self, *args) + | is_hwbpt(self) -> bool + | + | is_inactive(self, *args) + | is_inactive(self) -> bool + | + | is_low_level(self, *args) + | is_low_level(self) -> bool + | + | is_page_bpt(self, *args) + | is_page_bpt(self) -> bool + | + | is_partially_active(self, *args) + | is_partially_active(self) -> bool + | + | is_relbpt(self, *args) + | is_relbpt(self) -> bool + | + | is_srcbpt(self, *args) + | is_srcbpt(self) -> bool + | + | is_symbpt(self, *args) + | is_symbpt(self) -> bool + | + | is_tracemodebpt(self, *args) + | is_tracemodebpt(self) -> bool + | + | is_traceoffbpt(self, *args) + | is_traceoffbpt(self) -> bool + | + | is_traceonbpt(self, *args) + | is_traceonbpt(self) -> bool + | + | listbpt(self, *args) + | listbpt(self) -> bool + | + | set_abs_bpt(self, *args) + | set_abs_bpt(self, a) + | + | set_rel_bpt(self, *args) + | set_rel_bpt(self, mod, o) + | + | set_src_bpt(self, *args) + | set_src_bpt(self, fn, lineno) + | + | set_sym_bpt(self, *args) + | set_sym_bpt(self, sym, o) + | + | set_trace_action(self, *args) + | set_trace_action(self, enable, trace_types) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | bpt_t_cb_get(self) -> size_t + | + | cndidx + | bpt_t_cndidx_get(self) -> int + | + | condition + | bpt_t_condition_get(self) -> PyObject * + | + | ea + | bpt_t_ea_get(self) -> ea_t + | + | elang + | bpt_t_elang_get(self) -> PyObject * + | + | flags + | bpt_t_flags_get(self) -> uint32 + | + | loc + | bpt_t_loc_get(self) -> bpt_location_t + | + | pass_count + | bpt_t_pass_count_get(self) -> int + | + | pid + | bpt_t_pid_get(self) -> pid_t + | + | props + | bpt_t_props_get(self) -> uint32 + | + | size + | bpt_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | tid + | bpt_t_tid_get(self) -> thid_t + | + | type + | bpt_t_type_get(self) -> bpttype_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bpt_t(self) + +Help on class bpt_vec_t in module ida_dbg: + +class bpt_vec_t(__builtin__.object) + | Proxy of C++ qvector< bpt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> bpt_t + | + | __init__(self, *args) + | __init__(self) -> bpt_vec_t + | __init__(self, x) -> bpt_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> bpt_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> bpt_t + | begin(self) -> bpt_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> bpt_t + | end(self) -> bpt_t + | + | erase(self, *args) + | erase(self, it) -> bpt_t + | erase(self, first, last) -> bpt_t + | + | extract(self, *args) + | extract(self) -> bpt_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=bpt_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> bpt_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> bpt_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bpt_vec_t(self) + +Help on function bring_debugger_to_front in module ida_dbg: + +bring_debugger_to_front(*args) + bring_debugger_to_front() + +Help on function check_bpt in module ida_dbg: + +check_bpt(*args) + check_bpt(ea) -> int + + + Check the breakpoint at the specified address. + + @param ea (C++: ea_t) + @return: one of Breakpoint status codes + +Help on function choose_trace_file in module ida_dbg: + +choose_trace_file(*args) + choose_trace_file() -> str + + + Show the choose trace dialog. + +Help on function clear_requests_queue in module ida_dbg: + +clear_requests_queue(*args) + clear_requests_queue() + + + Clear the queue of waiting requests. \sq{Type, Synchronous function, + Notification, none (synchronous function)}If a request is currently + running, this one isn't stopped. + +Help on function clear_trace in module ida_dbg: + +clear_trace(*args) + clear_trace() + + + Clear all events in the trace buffer. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + +Help on function collect_stack_trace in module ida_dbg: + +collect_stack_trace(*args) + collect_stack_trace(tid, trace) -> bool + +Help on function continue_process in module ida_dbg: + +continue_process(*args) + continue_process() -> bool + + + Continue the execution of the process in the debugger. \sq{Type, + Synchronous function - available as Request, Notification, none + (synchronous function)}The 'continue_process()' function can be called + from a notification handler to force the continuation of the process. + In this case the request queue will not be examined, IDA will simply + resume execution. Usually it makes sense to call + 'request_continue_process()' followed by 'run_requests()' , so that + IDA will first start a queued request (if any) and then resume the + application. + +Help on function create_source_viewer in module ida_dbg: + +create_source_viewer(*args) + create_source_viewer(out_ccv, parent, custview, sf, lines, lnnum, colnum, flags) -> source_view_t * + + + Create a source code view. + + + @param out_ccv (C++: TWidget **) + @param parent (C++: TWidget *) + @param custview (C++: TWidget *) + @param sf (C++: source_file_ptr) + @param lines (C++: strvec_t *) + @param lnnum (C++: int) + @param colnum (C++: int) + @param flags (C++: int) + +Help on function dbg_add_bpt_tev in module ida_dbg: + +dbg_add_bpt_tev(*args) + dbg_add_bpt_tev(tid, ea, bp) -> bool + + + Add a new breakpoint trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ea (C++: ea_t) + @param bp (C++: ea_t) + @return: false if the operation failed, true otherwise + +Help on function dbg_add_call_tev in module ida_dbg: + +dbg_add_call_tev(*args) + dbg_add_call_tev(tid, caller, callee) + + + Add a new call trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param caller (C++: ea_t) + @param callee (C++: ea_t) + +Help on function dbg_add_debug_event in module ida_dbg: + +dbg_add_debug_event(*args) + dbg_add_debug_event(event) + + + Add a new debug event to the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param event (C++: debug_event_t *) + +Help on function dbg_add_insn_tev in module ida_dbg: + +dbg_add_insn_tev(*args) + dbg_add_insn_tev(tid, ea, save=SAVE_DIFF) -> bool + + + Add a new instruction trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ea (C++: ea_t) + @param save (C++: save_reg_values_t) + @return: false if the operation failed, true otherwise + +Help on function dbg_add_many_tevs in module ida_dbg: + +dbg_add_many_tevs(*args) + dbg_add_many_tevs(new_tevs) -> bool + + + Add many new trace elements to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param new_tevs (C++: tevinforeg_vec_t *) + @return: false if the operation failed for any tev_info_t object + +Help on function dbg_add_ret_tev in module ida_dbg: + +dbg_add_ret_tev(*args) + dbg_add_ret_tev(tid, ret_insn, return_to) + + + Add a new return trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ret_insn (C++: ea_t) + @param return_to (C++: ea_t) + +Help on function dbg_add_tev in module ida_dbg: + +dbg_add_tev(*args) + dbg_add_tev(type, tid, address) + + + Add a new trace element to the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param type (C++: tev_type_t) + @param tid (C++: thid_t) + @param address (C++: ea_t) + +Help on function dbg_add_thread in module ida_dbg: + +dbg_add_thread(*args) + dbg_add_thread(tid) + + + Add a thread to the current trace. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @param tid (C++: thid_t) + +Help on function dbg_bin_search in module ida_dbg: + +dbg_bin_search(*args) + dbg_bin_search(start_ea, end_ea, data, srch_flags) -> str + +Help on function dbg_can_query in module ida_dbg: + +dbg_can_query(*args) + dbg_can_query() -> bool + + + This function can be used to check if the debugger can be queried: + - debugger is loaded + - process is suspended + - process is not suspended but can take requests. In this case some requests like + memory read/write, bpt management succeed and register querying will fail. + Check if idaapi.get_process_state() < 0 to tell if the process is suspended + @return: Boolean + +Help on function dbg_del_thread in module ida_dbg: + +dbg_del_thread(*args) + dbg_del_thread(tid) + + + Delete a thread from the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + +Help on function dbg_is_loaded in module ida_dbg: + +dbg_is_loaded(*args) + dbg_is_loaded() -> bool + + + Checks if a debugger is loaded + @return: Boolean + +Help on function define_exception in module ida_dbg: + +define_exception(*args) + define_exception(code, name, desc, flags) -> char const * + + + Convenience function: define new exception code. + + @param code: exception code (cannot be 0) (C++: uint) + @param name: exception name (cannot be empty or NULL) (C++: const char + *) + @param desc: exception description (maybe NULL) (C++: const char *) + @param flags: combination of Exception info flags (C++: int) + @return: failure message or NULL. You must call store_exceptions() + if this function succeeds + +Help on function del_bpt in module ida_dbg: + +del_bpt(*args) + del_bpt(ea) -> bool + del_bpt(bptloc) -> bool + + + Delete an existing breakpoint in the debugged process. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + +Help on function del_bptgrp in module ida_dbg: + +del_bptgrp(*args) + del_bptgrp(name) -> bool + +Help on function del_virt_module in module ida_dbg: + +del_virt_module(*args) + del_virt_module(base) -> bool + +Help on function detach_process in module ida_dbg: + +detach_process(*args) + detach_process() -> bool + + + Detach the debugger from the debugged process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_detach' } + +Help on function diff_trace_file in module ida_dbg: + +diff_trace_file(*args) + diff_trace_file(nonnul_filename) -> bool + + + Show difference between the current trace and the one from 'filename'. + +Help on function disable_bblk_trace in module ida_dbg: + +disable_bblk_trace(*args) + disable_bblk_trace() -> bool + +Help on function disable_bpt in module ida_dbg: + +disable_bpt(*args) + disable_bpt(ea) -> bool + disable_bpt(bptloc) -> bool + +Help on function disable_func_trace in module ida_dbg: + +disable_func_trace(*args) + disable_func_trace() -> bool + +Help on function disable_insn_trace in module ida_dbg: + +disable_insn_trace(*args) + disable_insn_trace() -> bool + +Help on function disable_step_trace in module ida_dbg: + +disable_step_trace(*args) + disable_step_trace() -> bool + +Help on function edit_manual_regions in module ida_dbg: + +edit_manual_regions(*args) + edit_manual_regions() + +Help on function enable_bblk_trace in module ida_dbg: + +enable_bblk_trace(*args) + enable_bblk_trace(enable=True) -> bool + +Help on function enable_bpt in module ida_dbg: + +enable_bpt(*args) + enable_bpt(ea, enable=True) -> bool + enable_bpt(bptloc, enable=True) -> bool + +Help on function enable_func_trace in module ida_dbg: + +enable_func_trace(*args) + enable_func_trace(enable=True) -> bool + +Help on function enable_insn_trace in module ida_dbg: + +enable_insn_trace(*args) + enable_insn_trace(enable=True) -> bool + +Help on function enable_manual_regions in module ida_dbg: + +enable_manual_regions(*args) + enable_manual_regions(enable) + +Help on function enable_step_trace in module ida_dbg: + +enable_step_trace(*args) + enable_step_trace(enable=True) -> bool + +Help on class eval_ctx_t in module ida_dbg: + +class eval_ctx_t(__builtin__.object) + | Proxy of C++ eval_ctx_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea) -> eval_ctx_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | eval_ctx_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_eval_ctx_t(self) + +Help on function exist_bpt in module ida_dbg: + +exist_bpt(*args) + exist_bpt(ea) -> bool + + + Does a breakpoint exist at the given location? + + + @param ea (C++: ea_t) + +Help on function exit_process in module ida_dbg: + +exit_process(*args) + exit_process() -> bool + + + Terminate the debugging of the current process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_exit' } + +Help on function find_bpt in module ida_dbg: + +find_bpt(*args) + find_bpt(bptloc, bpt) -> bool + + + Find a breakpoint by location. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param bptloc: Breakpoint location (C++: const bpt_location_t &) + @param bpt: bpt is filled if the breakpoint was found (C++: bpt_t *) + +Help on function get_bblk_trace_options in module ida_dbg: + +get_bblk_trace_options(*args) + get_bblk_trace_options() -> int + + + Get current basic block tracing options. Also see 'BT_LOG_INSTS' + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + +Help on function get_bpt in module ida_dbg: + +get_bpt(*args) + get_bpt(ea, bpt) -> bool + + + Get the characteristics of a breakpoint. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + @param bpt: if not NULL, is filled with the characteristics. (C++: + bpt_t *) + @return: false if no breakpoint exists + +Help on function get_bpt_group in module ida_dbg: + +get_bpt_group(*args) + get_bpt_group(bptloc) -> str + +Help on function get_bpt_qty in module ida_dbg: + +get_bpt_qty(*args) + get_bpt_qty() -> int + + + Get number of breakpoints. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function get_bpt_tev_ea in module ida_dbg: + +get_bpt_tev_ea(*args) + get_bpt_tev_ea(n) -> ea_t + + + Get the address associated to a read, read/write or execution trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)}Usually, a breakpoint is associated with a read, read/write + or execution trace event. However, the returned address could be any + address in the range of this breakpoint. If the breakpoint was deleted + after the trace event, the address no longer corresponds to a valid + breakpoint. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a read, read/write or execution trace event. + +Help on function get_bptloc_string in module ida_dbg: + +get_bptloc_string(*args) + get_bptloc_string(i) -> char const * + + + Helper function for 'bpt_location_t' . + + + @param i (C++: int) + +Help on function get_call_tev_callee in module ida_dbg: + +get_call_tev_callee(*args) + get_call_tev_callee(n) -> ea_t + + + Get the called function from a function call trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function call event. + +Help on function get_current_source_file in module ida_dbg: + +get_current_source_file(*args) + get_current_source_file(path) -> bool + +Help on function get_current_source_line in module ida_dbg: + +get_current_source_line(*args) + get_current_source_line() -> int + +Help on function get_current_thread in module ida_dbg: + +get_current_thread(*args) + get_current_thread() -> thid_t + + + Get current thread ID. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_dbg_byte in module ida_dbg: + +get_dbg_byte(*args) + get_dbg_byte(x, ea) -> bool + + + Get one byte of the debugged process memory. + + @param x: pointer to byte value (C++: uint32 *) + @param ea: linear address (C++: ea_t) + @return: true success + +Help on function get_dbg_memory_info in module ida_dbg: + +get_dbg_memory_info(*args) + get_dbg_memory_info(ranges) -> int + +Help on function get_dbg_reg_info in module ida_dbg: + +get_dbg_reg_info(*args) + get_dbg_reg_info(regname, ri) -> bool + + + Get register information \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param regname (C++: const char *) + @param ri (C++: register_info_t *) + +Help on function get_debug_event in module ida_dbg: + +get_debug_event(*args) + get_debug_event() -> debug_event_t + + + Get the current debugger event. + +Help on function get_debugger_event_cond in module ida_dbg: + +get_debugger_event_cond(*args) + get_debugger_event_cond() -> char const * + +Help on function get_first_module in module ida_dbg: + +get_first_module(*args) + get_first_module(modinfo) -> bool + +Help on function get_func_trace_options in module ida_dbg: + +get_func_trace_options(*args) + get_func_trace_options() -> int + + + Get current function tracing options. Also see 'FT_LOG_RET' \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_global_var in module ida_dbg: + +get_global_var(*args) + get_global_var(prov, ea, name, out) -> bool + +Help on function get_grp_bpts in module ida_dbg: + +get_grp_bpts(*args) + get_grp_bpts(bpts, grp_name) -> ssize_t + +Help on function get_insn_tev_reg_mem in module ida_dbg: + +get_insn_tev_reg_mem(*args) + get_insn_tev_reg_mem(n, memmap) -> bool + + + Read the memory pointed by register values from an instruction trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param memmap: result (C++: memreg_infos_t *) + @return: false if not an instruction event or no memory is available + +Help on function get_insn_tev_reg_result in module ida_dbg: + +get_insn_tev_reg_result(*args) + get_insn_tev_reg_result(n, regname, regval) -> bool + + + Read the resulting register value from an instruction trace event. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param regname: name of desired register (C++: const char *) + @param regval: result (C++: regval_t *) + @return: false if not an instruction trace event or register wasn't + modified. + +Help on function get_insn_tev_reg_val in module ida_dbg: + +get_insn_tev_reg_val(*args) + get_insn_tev_reg_val(n, regname, regval) -> bool + + + Read a register value from an instruction trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)}This + is the value of the register before the execution of the instruction. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param regname: name of desired register (C++: const char *) + @param regval: result (C++: regval_t *) + @return: false if not an instruction event. + +Help on function get_insn_trace_options in module ida_dbg: + +get_insn_trace_options(*args) + get_insn_trace_options() -> int + + + Get current instruction tracing options. Also see 'IT_LOG_SAME_IP' + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + +Help on function get_ip_val in module ida_dbg: + +get_ip_val(*args) + get_ip_val() -> bool + + + Get value of the IP (program counter) register for the current thread. + Requires a suspended debugger. + +Help on function get_local_var in module ida_dbg: + +get_local_var(*args) + get_local_var(prov, ea, name, out) -> bool + +Help on function get_local_vars in module ida_dbg: + +get_local_vars(*args) + get_local_vars(prov, ea, out) -> bool + +Help on function get_manual_regions in module ida_dbg: + +get_manual_regions(*args) + get_manual_regions(ranges) + get_manual_regions() -> PyObject * + + + Returns the manual memory regions + @return: list(start_ea, end_ea, name, sclass, sbase, bitness, perm) + +Help on function get_module_info in module ida_dbg: + +get_module_info(*args) + get_module_info(ea, modinfo) -> bool + +Help on function get_next_module in module ida_dbg: + +get_next_module(*args) + get_next_module(modinfo) -> bool + +Help on function get_process_options in module ida_dbg: + +get_process_options(*args) + get_process_options(path, args, sdir, host, _pass, port) + + + Get process options. Any of the arguments may be NULL + + @param path (C++: qstring *) + @param args (C++: qstring *) + @param sdir (C++: qstring *) + @param host (C++: qstring *) + @param port (C++: int *) + +Help on function get_process_state in module ida_dbg: + +get_process_state(*args) + get_process_state() -> int + + + Return the state of the currently debugged process. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @return: one of Debugged process states + +Help on function get_processes in module ida_dbg: + +get_processes(*args) + get_processes(proclist) -> ssize_t + + + Take a snapshot of running processes and return their description. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param proclist (C++: procinfo_vec_t *) + @return: number of processes or -1 on error + +Help on function get_reg_val in module ida_dbg: + +get_reg_val(*args) + get_reg_val(regname, regval) -> bool + get_reg_val(regname, ival) -> bool + get_reg_val(regname) -> PyObject * + + + Read a register value from the current thread. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + @param regval (C++: regval_t *) + +Help on function get_reg_vals in module ida_dbg: + +get_reg_vals(*args) + get_reg_vals(tid, clsmask, values) -> int + +Help on function get_ret_tev_return in module ida_dbg: + +get_ret_tev_return(*args) + get_ret_tev_return(n) -> ea_t + + + Get the return address from a function return trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function return event. + +Help on function get_running_notification in module ida_dbg: + +get_running_notification(*args) + get_running_notification() -> dbg_notification_t + + + Get the notification associated (if any) with the current running + request. \sq{Type, Synchronous function, Notification, none + (synchronous function)} + + @return: dbg_null if no running request + +Help on function get_running_request in module ida_dbg: + +get_running_request(*args) + get_running_request() -> ui_notification_t + + + Get the current running request. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: ui_null if no running request + +Help on function get_sp_val in module ida_dbg: + +get_sp_val(*args) + get_sp_val() -> bool + + + Get value of the SP register for the current thread. Requires a + suspended debugger. + +Help on function get_srcinfo_provider in module ida_dbg: + +get_srcinfo_provider(*args) + get_srcinfo_provider(name) -> srcinfo_provider_t * + +Help on function get_step_trace_options in module ida_dbg: + +get_step_trace_options(*args) + get_step_trace_options() -> int + + + Get current step tracing options. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: Step trace options + +Help on function get_tev_ea in module ida_dbg: + +get_tev_ea(*args) + get_tev_ea(n) -> ea_t + +Help on function get_tev_event in module ida_dbg: + +get_tev_event(*args) + get_tev_event(n, d) -> bool + + + Get the corresponding debug event, if any, for the specified tev + object. \sq{Type, Synchronous function, Notification, none + (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param d: result (C++: debug_event_t *) + @return: false if the tev_t object doesn't have any associated debug + event, true otherwise, with the debug event in "d". + +Help on function get_tev_info in module ida_dbg: + +get_tev_info(*args) + get_tev_info(n, tev_info) -> bool + + + Get main information about a trace event. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param tev_info: result (C++: tev_info_t *) + @return: success + +Help on function get_tev_memory_info in module ida_dbg: + +get_tev_memory_info(*args) + get_tev_memory_info(n, mi) -> bool + + + Get the memory layout, if any, for the specified tev object. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param mi: result (C++: meminfo_vec_t *) + @return: false if the tev_t object is not of type tev_mem , true + otherwise, with the new memory layout in "mi". + +Help on function get_tev_qty in module ida_dbg: + +get_tev_qty(*args) + get_tev_qty() -> int + + + Get number of trace events available in trace buffer. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_tev_reg_mem in module ida_dbg: + +get_tev_reg_mem(tev, idx) + +Help on function get_tev_reg_mem_ea in module ida_dbg: + +get_tev_reg_mem_ea(tev, idx) + +Help on function get_tev_reg_mem_qty in module ida_dbg: + +get_tev_reg_mem_qty(tev) + +Help on function get_tev_reg_val in module ida_dbg: + +get_tev_reg_val(tev, reg) + +Help on function get_tev_tid in module ida_dbg: + +get_tev_tid(*args) + get_tev_tid(n) -> int + +Help on function get_tev_type in module ida_dbg: + +get_tev_type(*args) + get_tev_type(n) -> int + +Help on function get_thread_qty in module ida_dbg: + +get_thread_qty(*args) + get_thread_qty() -> int + + + Get number of threads. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_trace_base_address in module ida_dbg: + +get_trace_base_address(*args) + get_trace_base_address() -> ea_t + + + Get the base address of the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @return: the base address of the currently loaded trace + +Help on function get_trace_file_desc in module ida_dbg: + +get_trace_file_desc(*args) + get_trace_file_desc(filename) -> str + + + Get the file header of the specified trace file. + + + @param filename (C++: const char *) + +Help on function get_trace_platform in module ida_dbg: + +get_trace_platform(*args) + get_trace_platform() -> char const * + + + Get platform name of current trace. + +Help on function getn_bpt in module ida_dbg: + +getn_bpt(*args) + getn_bpt(n, bpt) -> bool + + + Get the characteristics of a breakpoint. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param n: number of breakpoint, is in range 0.. get_bpt_qty() -1 (C++: + int) + @param bpt: filled with the characteristics. (C++: bpt_t *) + @return: false if no breakpoint exists + +Help on function getn_thread in module ida_dbg: + +getn_thread(*args) + getn_thread(n) -> thid_t + + + Get the ID of a thread. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: + int) + @return: NO_THREAD if the thread doesn't exist. + +Help on function getn_thread_name in module ida_dbg: + +getn_thread_name(*args) + getn_thread_name(n) -> char const * + + + Get the NAME of a thread \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 + for the current thread (C++: int) + @return: thread name or NULL if the thread doesn't exist. + +Help on function graph_trace in module ida_dbg: + +graph_trace(*args) + graph_trace() -> bool + + + Show the trace callgraph. + +Help on function handle_debug_event in module ida_dbg: + +handle_debug_event(*args) + handle_debug_event(ev, rqflags) -> int + +Help on function hide_all_bpts in module ida_dbg: + +hide_all_bpts(*args) + hide_all_bpts() -> int + +Help on function internal_get_sreg_base in module ida_dbg: + +internal_get_sreg_base(*args) + internal_get_sreg_base(tid, sreg_value) -> ea_t + + + Get the sreg base, for the given thread. + + @return: The sreg base, or BADADDR on failure. + +Help on function internal_ioctl in module ida_dbg: + +internal_ioctl(*args) + internal_ioctl(fn, buf, poutbuf, poutsize) -> int + +Help on function invalidate_dbg_state in module ida_dbg: + +invalidate_dbg_state(*args) + invalidate_dbg_state(dbginv) -> int + + + Invalidate cached debugger information. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param dbginv: Debugged process invalidation options (C++: int) + @return: current debugger state (one of Debugged process states ) + +Help on function invalidate_dbgmem_config in module ida_dbg: + +invalidate_dbgmem_config(*args) + invalidate_dbgmem_config() + + + Invalidate the debugged process memory configuration. Call this + function if the debugged process might have changed its memory layout + (allocated more memory, for example) + +Help on function invalidate_dbgmem_contents in module ida_dbg: + +invalidate_dbgmem_contents(*args) + invalidate_dbgmem_contents(ea, size) + + + Invalidate the debugged process memory contents. Call this function + each time the process has been stopped or the process memory is + modified. If ea == 'BADADDR' , then the whole memory contents will be + invalidated + + @param ea (C++: ea_t) + @param size (C++: asize_t) + +Help on function is_bblk_trace_enabled in module ida_dbg: + +is_bblk_trace_enabled(*args) + is_bblk_trace_enabled() -> bool + +Help on function is_debugger_busy in module ida_dbg: + +is_debugger_busy(*args) + is_debugger_busy() -> bool + + + Is the debugger busy?. Some debuggers do not accept any commands while + the debugged application is running. For such a debugger, it is unsafe + to do anything with the database (even simple queries like get_byte + may lead to undesired consequences). Returns: true if the debugged + application is running under such a debugger + +Help on function is_debugger_memory in module ida_dbg: + +is_debugger_memory(*args) + is_debugger_memory(ea) -> bool + + + Is the address mapped to debugger memory? + + + @param ea (C++: ea_t) + +Help on function is_debugger_on in module ida_dbg: + +is_debugger_on(*args) + is_debugger_on() -> bool + + + Is the debugger currently running? + +Help on function is_func_trace_enabled in module ida_dbg: + +is_func_trace_enabled(*args) + is_func_trace_enabled() -> bool + + + Get current state of functions tracing. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + +Help on function is_insn_trace_enabled in module ida_dbg: + +is_insn_trace_enabled(*args) + is_insn_trace_enabled() -> bool + + + Get current state of instructions tracing. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + +Help on function is_reg_custom in module ida_dbg: + +is_reg_custom(*args) + is_reg_custom(regname) -> bool + + + Does a register contain a value of a custom data type? \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_reg_float in module ida_dbg: + +is_reg_float(*args) + is_reg_float(regname) -> bool + + + Does a register contain a floating point value? \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_reg_integer in module ida_dbg: + +is_reg_integer(*args) + is_reg_integer(regname) -> bool + + + Does a register contain an integer value? \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_request_running in module ida_dbg: + +is_request_running(*args) + is_request_running() -> bool + + + Is a request currently running? + +Help on function is_step_trace_enabled in module ida_dbg: + +is_step_trace_enabled(*args) + is_step_trace_enabled() -> bool + + + Get current state of step tracing. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function is_valid_trace_file in module ida_dbg: + +is_valid_trace_file(*args) + is_valid_trace_file(filename) -> bool + + + Is the specified file a valid trace file for the current database? + + + @param filename (C++: const char *) + +Help on function list_bptgrps in module ida_dbg: + +list_bptgrps(*args) + list_bptgrps(bptgrps) -> size_t + list_bptgrps() -> PyObject * + +Help on function load_debugger in module ida_dbg: + +load_debugger(*args) + load_debugger(dbgname, use_remote) -> bool + +Help on function load_trace_file in module ida_dbg: + +load_trace_file(*args) + load_trace_file(filename) -> str + + + Load a recorded trace file in the trace window. If the call succeeds + and 'buf' is not null, the description of the trace stored in the + binary trace file will be returned in 'buf' + + @param filename (C++: const char *) + +Help on class memreg_info_t in module ida_dbg: + +class memreg_info_t(__builtin__.object) + | Proxy of C++ memreg_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> memreg_info_t + | + | __repr__ = _swig_repr(self) + | + | get_bytes(self, *args) + | get_bytes(self) -> PyObject * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bytes + | get_bytes(self) -> PyObject * + | + | ea + | memreg_info_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_memreg_info_t(self) + +Help on class memreg_infos_t in module ida_dbg: + +class memreg_infos_t(__builtin__.object) + | Proxy of C++ qvector< memreg_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> memreg_info_t + | + | __init__(self, *args) + | __init__(self) -> memreg_infos_t + | __init__(self, x) -> memreg_infos_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> memreg_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> memreg_info_t + | begin(self) -> memreg_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> memreg_info_t + | end(self) -> memreg_info_t + | + | erase(self, *args) + | erase(self, it) -> memreg_info_t + | erase(self, first, last) -> memreg_info_t + | + | extract(self, *args) + | extract(self) -> memreg_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=memreg_info_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> memreg_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> memreg_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_memreg_infos_t(self) + +Help on function move_bpt_to_grp in module ida_dbg: + +move_bpt_to_grp(*args) + move_bpt_to_grp(bpt, grp_name) + + + Sets new group for the breakpoint + +Help on function put_dbg_byte in module ida_dbg: + +put_dbg_byte(*args) + put_dbg_byte(ea, x) -> bool + + + Change one byte of the debugged process memory. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint32) + @return: true if the process memory has been modified + +Help on function read_dbg_memory in module ida_dbg: + +read_dbg_memory(*args) + read_dbg_memory(ea, buffer, size) -> ssize_t + +Help on function refresh_debugger_memory in module ida_dbg: + +refresh_debugger_memory(*args) + refresh_debugger_memory() -> PyObject * + + + Refreshes the debugger memory + @return: Nothing + +Help on function rename_bptgrp in module ida_dbg: + +rename_bptgrp(*args) + rename_bptgrp(old_name, new_name) -> bool + +Help on function request_add_bpt in module ida_dbg: + +request_add_bpt(*args) + request_add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + request_add_bpt(bpt) -> bool + + + Post an 'add_bpt(ea_t, asize_t, bpttype_t)' request. + + + @param ea (C++: ea_t) + @param size (C++: asize_t) + @param type (C++: bpttype_t) + +Help on function request_attach_process in module ida_dbg: + +request_attach_process(*args) + request_attach_process(pid, event_id) -> int + + + Post an 'attach_process()' request. + + + @param pid (C++: pid_t) + @param event_id (C++: int) + +Help on function request_clear_trace in module ida_dbg: + +request_clear_trace(*args) + request_clear_trace() + + + Post a 'clear_trace()' request. + +Help on function request_continue_process in module ida_dbg: + +request_continue_process(*args) + request_continue_process() -> bool + + + Post a 'continue_process()' request.This requires an explicit call to + 'run_requests()' + +Help on function request_del_bpt in module ida_dbg: + +request_del_bpt(*args) + request_del_bpt(ea) -> bool + request_del_bpt(bptloc) -> bool + + + Post a 'del_bpt(ea_t)' request. + + + @param ea (C++: ea_t) + +Help on function request_detach_process in module ida_dbg: + +request_detach_process(*args) + request_detach_process() -> bool + + + Post a 'detach_process()' request. + +Help on function request_disable_bblk_trace in module ida_dbg: + +request_disable_bblk_trace(*args) + request_disable_bblk_trace() -> bool + +Help on function request_disable_bpt in module ida_dbg: + +request_disable_bpt(*args) + request_disable_bpt(ea) -> bool + request_disable_bpt(bptloc) -> bool + +Help on function request_disable_func_trace in module ida_dbg: + +request_disable_func_trace(*args) + request_disable_func_trace() -> bool + +Help on function request_disable_insn_trace in module ida_dbg: + +request_disable_insn_trace(*args) + request_disable_insn_trace() -> bool + +Help on function request_disable_step_trace in module ida_dbg: + +request_disable_step_trace(*args) + request_disable_step_trace() -> bool + +Help on function request_enable_bblk_trace in module ida_dbg: + +request_enable_bblk_trace(*args) + request_enable_bblk_trace(enable=True) -> bool + +Help on function request_enable_bpt in module ida_dbg: + +request_enable_bpt(*args) + request_enable_bpt(ea, enable=True) -> bool + request_enable_bpt(bptloc, enable=True) -> bool + +Help on function request_enable_func_trace in module ida_dbg: + +request_enable_func_trace(*args) + request_enable_func_trace(enable=True) -> bool + +Help on function request_enable_insn_trace in module ida_dbg: + +request_enable_insn_trace(*args) + request_enable_insn_trace(enable=True) -> bool + +Help on function request_enable_step_trace in module ida_dbg: + +request_enable_step_trace(*args) + request_enable_step_trace(enable=True) -> bool + +Help on function request_exit_process in module ida_dbg: + +request_exit_process(*args) + request_exit_process() -> bool + + + Post an 'exit_process()' request. + +Help on function request_resume_thread in module ida_dbg: + +request_resume_thread(*args) + request_resume_thread(tid) -> int + + + Post a 'resume_thread()' request. + + + @param tid (C++: thid_t) + +Help on function request_run_to in module ida_dbg: + +request_run_to(*args) + request_run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Post a 'run_to()' request. + + + @param ea (C++: ea_t) + @param pid (C++: pid_t) + @param tid (C++: thid_t) + +Help on function request_select_thread in module ida_dbg: + +request_select_thread(*args) + request_select_thread(tid) -> bool + + + Post a 'select_thread()' request. + + + @param tid (C++: thid_t) + +Help on function request_set_bblk_trace_options in module ida_dbg: + +request_set_bblk_trace_options(*args) + request_set_bblk_trace_options(options) + + + Post a 'set_bblk_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_func_trace_options in module ida_dbg: + +request_set_func_trace_options(*args) + request_set_func_trace_options(options) + + + Post a 'set_func_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_insn_trace_options in module ida_dbg: + +request_set_insn_trace_options(*args) + request_set_insn_trace_options(options) + + + Post a 'set_insn_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_reg_val in module ida_dbg: + +request_set_reg_val(*args) + request_set_reg_val(regname, o) -> PyObject * + + + Post a 'set_reg_val()' request. + + + @param regname (C++: const char *) + +Help on function request_set_resume_mode in module ida_dbg: + +request_set_resume_mode(*args) + request_set_resume_mode(tid, mode) -> bool + + + Post a 'set_resume_mode()' request. + + + @param tid (C++: thid_t) + @param mode (C++: resume_mode_t) + +Help on function request_set_step_trace_options in module ida_dbg: + +request_set_step_trace_options(*args) + request_set_step_trace_options(options) + + + Post a 'set_step_trace_options()' request. + + + @param options (C++: int) + +Help on function request_start_process in module ida_dbg: + +request_start_process(*args) + request_start_process(path=None, args=None, sdir=None) -> int + + + Post a 'start_process()' request. + + + @param path (C++: const char *) + @param args (C++: const char *) + @param sdir (C++: const char *) + +Help on function request_step_into in module ida_dbg: + +request_step_into(*args) + request_step_into() -> bool + + + Post a 'step_into()' request. + +Help on function request_step_over in module ida_dbg: + +request_step_over(*args) + request_step_over() -> bool + + + Post a 'step_over()' request. + +Help on function request_step_until_ret in module ida_dbg: + +request_step_until_ret(*args) + request_step_until_ret() -> bool + + + Post a 'step_until_ret()' request. + +Help on function request_suspend_process in module ida_dbg: + +request_suspend_process(*args) + request_suspend_process() -> bool + + + Post a 'suspend_process()' request. + +Help on function request_suspend_thread in module ida_dbg: + +request_suspend_thread(*args) + request_suspend_thread(tid) -> int + + + Post a 'suspend_thread()' request. + + + @param tid (C++: thid_t) + +Help on function resume_thread in module ida_dbg: + +resume_thread(*args) + resume_thread(tid) -> int + + + Resume thread. \sq{Type, Synchronous function - available as request, + Notification, none (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function retrieve_exceptions in module ida_dbg: + +retrieve_exceptions(*args) + retrieve_exceptions() -> excvec_t + + + Retrieve the exception information. You may freely modify the returned + vector and add/edit/delete exceptions You must call + 'store_exceptions()' after any modifications Note: exceptions with + code zero, multiple exception codes or names are prohibited + +Help on function run_requests in module ida_dbg: + +run_requests(*args) + run_requests() -> bool + + + Execute requests until all requests are processed or an asynchronous + function is called. \sq{Type, Synchronous function, Notification, none + (synchronous function)}If called from a notification handler, the + execution of requests will be postponed to the end of the execution of + all notification handlers. + + @return: false if not all requests could be processed (indicates an + asynchronous function was started) + +Help on function run_to in module ida_dbg: + +run_to(*args) + run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Execute the process until the given address is reached. If no process + is active, a new process is started. Technically, the debugger sets up + a temporary breakpoint at the given address, and continues (or starts) + the execution of the whole process. So, all threads continue their + execution! \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_run_to' } + + @param ea: target address (C++: ea_t) + @param pid: not used yet. please do not specify this parameter. (C++: + pid_t) + @param tid: not used yet. please do not specify this parameter. (C++: + thid_t) + +Help on function save_trace_file in module ida_dbg: + +save_trace_file(*args) + save_trace_file(filename, description) -> bool + + + Save the current trace in the specified file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function select_thread in module ida_dbg: + +select_thread(*args) + select_thread(tid) -> bool + + + Select the given thread as the current debugged thread. All thread + related execution functions will work on this thread. The process must + be suspended to select a new thread. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param tid: ID of the thread to select (C++: thid_t) + @return: false if the thread doesn't exist. + +Help on function send_dbg_command in module ida_dbg: + +send_dbg_command(command) + Send a direct command to the debugger backend, and + retrieve the result as a string. + + Note: any double-quotes in 'command' must be backslash-escaped. + Note: this only works with some debugger backends: Bochs, WinDbg, GDB. + + Returns: (True, ) on success, or (False, ) on failure + +Help on function set_bblk_trace_options in module ida_dbg: + +set_bblk_trace_options(*args) + set_bblk_trace_options(options) + + + Modify basic block tracing options (see 'BT_LOG_INSTS' ) + + + @param options (C++: int) + +Help on function set_bpt_group in module ida_dbg: + +set_bpt_group(*args) + set_bpt_group(bpt, grp_name) + +Help on function set_bptloc_group in module ida_dbg: + +set_bptloc_group(*args) + set_bptloc_group(bptloc, grp_name) -> bool + +Help on function set_bptloc_string in module ida_dbg: + +set_bptloc_string(*args) + set_bptloc_string(s) -> int + + + Helper function for 'bpt_location_t' . + + + @param s (C++: const char *) + +Help on function set_debugger_event_cond in module ida_dbg: + +set_debugger_event_cond(*args) + set_debugger_event_cond(nonnul_cond) + +Help on function set_debugger_options in module ida_dbg: + +set_debugger_options(*args) + set_debugger_options(options) -> uint + + + Set debugger options. Replaces debugger options with the specification + combination 'Debugger options' + + @param options (C++: uint) + @return: the old debugger options + +Help on function set_func_trace_options in module ida_dbg: + +set_func_trace_options(*args) + set_func_trace_options(options) + + + Modify function tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_highlight_trace_options in module ida_dbg: + +set_highlight_trace_options(*args) + set_highlight_trace_options(hilight, color, diff) + + + Set highlight trace parameters. + + + @param hilight (C++: bool) + @param color (C++: bgcolor_t) + @param diff (C++: bgcolor_t) + +Help on function set_insn_trace_options in module ida_dbg: + +set_insn_trace_options(*args) + set_insn_trace_options(options) + + + Modify instruction tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_manual_regions in module ida_dbg: + +set_manual_regions(*args) + set_manual_regions(ranges) + +Help on function set_process_options in module ida_dbg: + +set_process_options(*args) + set_process_options(path, args, sdir, host, _pass, port) + + + Set process options. Any of the arguments may be NULL, which means 'do + not modify' + + @param path (C++: const char *) + @param args (C++: const char *) + @param sdir (C++: const char *) + @param host (C++: const char *) + @param port (C++: int) + +Help on function set_process_state in module ida_dbg: + +set_process_state(*args) + set_process_state(newstate, p_thid, dbginv) -> int + + + Set new state for the debugged process. Notifies the IDA kernel about + the change of the debugged process state. For example, a debugger + module could call this function when it knows that the process is + suspended for a short period of time. Some IDA API calls can be made + only when the process is suspended. The process state is usually + restored before returning control to the caller. You must know that it + is ok to change the process state, doing it at arbitrary moments may + crash the application or IDA. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @param newstate: new process state (one of Debugged process states ) + if DSTATE_NOTASK is passed then the state is not + changed (C++: int) + @param p_thid: ptr to new thread id. may be NULL or pointer to + NO_THREAD . the pointed variable will contain the old + thread id upon return (C++: thid_t *) + @param dbginv: Debugged process invalidation options (C++: int) + @return: old debugger state (one of Debugged process states ) + +Help on function set_reg_val in module ida_dbg: + +set_reg_val(*args) + set_reg_val(regname, o) -> PyObject + set_reg_val(tid, regidx, o) -> PyObject * + + + Write a register value to the current thread. \sq{Type, Synchronous + function - available as Request, Notification, none (synchronous + function)} + + @param regname (C++: const char *) + +Help on function set_remote_debugger in module ida_dbg: + +set_remote_debugger(*args) + set_remote_debugger(host, _pass, port=-1) + + + Set remote debugging options. Should be used before starting the + debugger. + + @param host: If empty, IDA will use local debugger. If NULL, the host + will not be set. (C++: const char *) + @param port: If -1, the default port number will be used (C++: int) + +Help on function set_resume_mode in module ida_dbg: + +set_resume_mode(*args) + set_resume_mode(tid, mode) -> bool + + + How to resume the application. Set resume mode but do not resume + process. + + @param tid (C++: thid_t) + @param mode (C++: resume_mode_t) + +Help on function set_step_trace_options in module ida_dbg: + +set_step_trace_options(*args) + set_step_trace_options(options) + + + Modify step tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_trace_base_address in module ida_dbg: + +set_trace_base_address(*args) + set_trace_base_address(ea) + + + Set the base address of the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param ea (C++: ea_t) + +Help on function set_trace_file_desc in module ida_dbg: + +set_trace_file_desc(*args) + set_trace_file_desc(filename, description) -> bool + + + Change the description of the specified trace file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function set_trace_platform in module ida_dbg: + +set_trace_platform(*args) + set_trace_platform(platform) + + + Set platform name of current trace. + + + @param platform (C++: const char *) + +Help on function set_trace_size in module ida_dbg: + +set_trace_size(*args) + set_trace_size(size) -> bool + + + Specify the new size of the circular buffer. \sq{Type, Synchronous + function, Notification, none (synchronous function)}If you specify 0, + all available memory can be quickly used !!! + + @param size: if 0, buffer isn't circular and events are never removed. + If the new size is smaller than the existing number of + trace events, a corresponding number of trace events are + removed. (C++: int) + +Help on function srcdbg_request_step_into in module ida_dbg: + +srcdbg_request_step_into(*args) + srcdbg_request_step_into() -> bool + +Help on function srcdbg_request_step_over in module ida_dbg: + +srcdbg_request_step_over(*args) + srcdbg_request_step_over() -> bool + +Help on function srcdbg_request_step_until_ret in module ida_dbg: + +srcdbg_request_step_until_ret(*args) + srcdbg_request_step_until_ret() -> bool + +Help on function srcdbg_step_into in module ida_dbg: + +srcdbg_step_into(*args) + srcdbg_step_into() -> bool + +Help on function srcdbg_step_over in module ida_dbg: + +srcdbg_step_over(*args) + srcdbg_step_over() -> bool + +Help on function srcdbg_step_until_ret in module ida_dbg: + +srcdbg_step_until_ret(*args) + srcdbg_step_until_ret() -> bool + +Help on function start_process in module ida_dbg: + +start_process(*args) + start_process(path=None, args=None, sdir=None) -> int + + + Start a process in the debugger. \sq{Type, Asynchronous function - + available as Request, Notification, 'dbg_process_start' }You can also + use the 'run_to()' function to easily start the execution of a process + until a given address is reached.For all parameters, a NULL value + indicates the debugger will take the value from the defined Process + Options. + + @param path: path to the executable to start (C++: const char *) + @param args: arguments to pass to process (C++: const char *) + @param sdir: starting directory for the process (C++: const char *) + +Help on function step_into in module ida_dbg: + +step_into(*args) + step_into() -> bool + + + Execute one instruction in the current thread. Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_into' } + +Help on function step_over in module ida_dbg: + +step_over(*args) + step_over() -> bool + + + Execute one instruction in the current thread, but without entering + into functions. Others threads keep suspended. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_step_over' } + +Help on function step_until_ret in module ida_dbg: + +step_until_ret(*args) + step_until_ret() -> bool + + + Execute instructions in the current thread until a function return + instruction is executed (aka "step out"). Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_until_ret' } + +Help on function store_exceptions in module ida_dbg: + +store_exceptions(*args) + store_exceptions() -> bool + + + Update the exception information stored in the debugger module by + invoking its dbg->set_exception_info callback + +Help on function suspend_process in module ida_dbg: + +suspend_process(*args) + suspend_process() -> bool + + + Suspend the process in the debugger. \sq{ Type,Synchronous function + (if in a notification handler)Asynchronous function (everywhere + else)available as Request, Notification,none (if in a notification + handler) 'dbg_suspend_process' (everywhere else) }The + 'suspend_process()' function can be called from a notification handler + to force the stopping of the process. In this case, no notification + will be generated. When you suspend a process, the running command is + always aborted. + +Help on function suspend_thread in module ida_dbg: + +suspend_thread(*args) + suspend_thread(tid) -> int + + + Suspend thread. Suspending a thread may deadlock the whole application + if the suspended was owning some synchronization objects. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on class tev_info_reg_t in module ida_dbg: + +class tev_info_reg_t(__builtin__.object) + | Proxy of C++ tev_info_reg_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tev_info_reg_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | info + | tev_info_reg_t_info_get(self) -> tev_info_t + | + | registers + | tev_info_reg_t_registers_get(self) -> tev_reg_values_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tev_info_reg_t(self) + +Help on class tev_info_t in module ida_dbg: + +class tev_info_t(__builtin__.object) + | Proxy of C++ tev_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tev_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | tev_info_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | tid + | tev_info_t_tid_get(self) -> thid_t + | + | type + | tev_info_t_type_get(self) -> tev_type_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tev_info_t(self) + +Help on class tev_reg_value_t in module ida_dbg: + +class tev_reg_value_t(__builtin__.object) + | Proxy of C++ tev_reg_value_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _reg_idx=-1, _value=uint64(-1)) -> tev_reg_value_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | reg_idx + | tev_reg_value_t_reg_idx_get(self) -> int + | + | thisown + | The membership flag + | + | value + | tev_reg_value_t_value_get(self) -> regval_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tev_reg_value_t(self) + +Help on class tev_reg_values_t in module ida_dbg: + +class tev_reg_values_t(__builtin__.object) + | Proxy of C++ qvector< tev_reg_value_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> tev_reg_value_t + | + | __init__(self, *args) + | __init__(self) -> tev_reg_values_t + | __init__(self, x) -> tev_reg_values_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> tev_reg_value_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> tev_reg_value_t + | begin(self) -> tev_reg_value_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> tev_reg_value_t + | end(self) -> tev_reg_value_t + | + | erase(self, *args) + | erase(self, it) -> tev_reg_value_t + | erase(self, first, last) -> tev_reg_value_t + | + | extract(self, *args) + | extract(self) -> tev_reg_value_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=tev_reg_value_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> tev_reg_value_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> tev_reg_value_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tev_reg_values_t(self) + +Help on class tevinforeg_vec_t in module ida_dbg: + +class tevinforeg_vec_t(__builtin__.object) + | Proxy of C++ qvector< tev_info_reg_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> tev_info_reg_t + | + | __init__(self, *args) + | __init__(self) -> tevinforeg_vec_t + | __init__(self, x) -> tevinforeg_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> tev_info_reg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> tev_info_reg_t + | begin(self) -> tev_info_reg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> tev_info_reg_t + | end(self) -> tev_info_reg_t + | + | erase(self, *args) + | erase(self, it) -> tev_info_reg_t + | erase(self, first, last) -> tev_info_reg_t + | + | extract(self, *args) + | extract(self) -> tev_info_reg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=tev_info_reg_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> tev_info_reg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> tev_info_reg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tevinforeg_vec_t(self) + +Help on function update_bpt in module ida_dbg: + +update_bpt(*args) + update_bpt(bpt) -> bool + + + Update modifiable characteristics of an existing breakpoint. To update + the breakpoint location, use 'change_bptlocs()' \sq{Type, Synchronous + function, Notification, none (synchronous function)}Only the following + fields can be modified: 'bpt_t::cndbody' 'bpt_t::pass_count' + 'bpt_t::flags' 'bpt_t::size' 'bpt_t::type' Changing some properties + will require removing and then re-adding the breakpoint to the process + memory (or the debugger backend), which can lead to race conditions + (i.e., breakpoint(s) can be missed) in case the process is not + suspended. Here are a list of scenarios that will require the + breakpoint to be removed & then re-added: 'bpt_t::size' is modified + 'bpt_t::type' is modified 'bpt_t::flags' 's BPT_ENABLED is modified + 'bpt_t::flags' 's BPT_LOWCND is changed 'bpt_t::flags' 's BPT_LOWCND + remains set, but cndbody changed + + @param bpt (C++: const bpt_t *) + +Help on function wait_for_next_event in module ida_dbg: + +wait_for_next_event(*args) + wait_for_next_event(wfne, timeout) -> dbg_event_code_t + + + Wait for the next event.This function (optionally) resumes the process + execution, and waits for a debugger event until a possible timeout + occurs. + + @param wfne: combination of Wait for debugger event flags constants + (C++: int) + @param timeout: number of seconds to wait, -1-infinity (C++: int) + @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= + 0) + +Help on function write_dbg_memory in module ida_dbg: + +write_dbg_memory(*args) + write_dbg_memory(ea, py_buf, size=size_t(-1)) -> ssize_t + +=== ida_dbg EPYDOC INJECTIONS === +ida_dbg.BKPT_ACTIVE +""" +active? +""" + +ida_dbg.BKPT_BADBPT +""" +failed to write the bpt to the process memory (at least one location) +""" + +ida_dbg.BKPT_CNDREADY +""" +condition has been compiled +""" + +ida_dbg.BKPT_FAKEPEND +""" +bpt of the same type is active at the same address(es) + +fake pending bpt: it is inactive but another +""" + +ida_dbg.BKPT_LISTBPT +""" +include in bpt list (user-defined bpt) +""" + +ida_dbg.BKPT_PAGE +""" +only after writing the bpt to the process. + +written to the process as a page bpt. is available +""" + +ida_dbg.BKPT_PARTIAL +""" +partially active? (some locations were not written yet) +""" + +ida_dbg.BKPT_TRACE +""" +trace bpt; should not be deleted when the process gets suspended +""" + +ida_dbg.BPTCK_ACT +""" +breakpoint is active (written to the process) +""" + +ida_dbg.BPTCK_NO +""" +breakpoint is disabled +""" + +ida_dbg.BPTCK_NONE +""" +breakpoint does not exist +""" + +ida_dbg.BPTCK_YES +""" +breakpoint is enabled +""" + +ida_dbg.BPTEV_ADDED +""" +Breakpoint has been added. +""" + +ida_dbg.BPTEV_CHANGED +""" +Breakpoint has been modified. +""" + +ida_dbg.BPTEV_REMOVED +""" +Breakpoint has been removed. +""" + +ida_dbg.BPT_BRK +""" +suspend execution upon hit +""" + +ida_dbg.BPT_ELANG_SHIFT +""" +index of the extlang (scripting language) of the condition +""" + +ida_dbg.BPT_ENABLED +""" +enabled? +""" + +ida_dbg.BPT_LOWCND +""" +condition is calculated at low level (on the server side) +""" + +ida_dbg.BPT_TRACE +""" +add trace information upon hit +""" + +ida_dbg.BPT_TRACEON +""" +enable tracing when the breakpoint is reached +""" + +ida_dbg.BPT_TRACE_BBLK +""" +basic block tracing +""" + +ida_dbg.BPT_TRACE_FUNC +""" +function tracing +""" + +ida_dbg.BPT_TRACE_INSN +""" +instruction tracing +""" + +ida_dbg.BPT_TRACE_TYPES +""" +trace insns, functions, and basic blocks. if any of 'BPT_TRACE_TYPES' +bits are set but 'BPT_TRACEON' is clear, then turn off tracing for the +specified trace types +""" + +ida_dbg.BPT_UPDMEM +""" +refresh the memory layout and contents before evaluating bpt condition +""" + +ida_dbg.BT_LOG_INSTS +""" +log all instructions in the current basic block +""" + +ida_dbg.DBGINV_ALL +""" +invalidate everything +""" + +ida_dbg.DBGINV_MEMCFG +""" +invalidate cached process segmentation +""" + +ida_dbg.DBGINV_MEMORY +""" +invalidate cached memory contents +""" + +ida_dbg.DBGINV_NONE +""" +invalidate nothing +""" + +ida_dbg.DBGINV_REDRAW +""" +refresh the screen +""" + +ida_dbg.DBGINV_REGS +""" +invalidate cached register values +""" + +ida_dbg.DOPT_BPT_MSGS +""" +log breakpoints +""" + +ida_dbg.DOPT_END_BPT +""" +evaluate event condition on process end +""" + +ida_dbg.DOPT_ENTRY_BPT +""" +break on program entry point +""" + +ida_dbg.DOPT_EXCDLG +""" +exception dialogs: +""" + +ida_dbg.DOPT_INFO_BPT +""" +break on debugging information +""" + +ida_dbg.DOPT_INFO_MSGS +""" +log debugging info events +""" + +ida_dbg.DOPT_LIB_BPT +""" +break on library load/unload +""" + +ida_dbg.DOPT_LIB_MSGS +""" +log library loads/unloads +""" + +ida_dbg.DOPT_LOAD_DINFO +""" +automatically load debug files (pdb) +""" + +ida_dbg.DOPT_REAL_MEMORY +""" +do not hide breakpoint instructions +""" + +ida_dbg.DOPT_REDO_STACK +""" +reconstruct the stack +""" + +ida_dbg.DOPT_SEGM_MSGS +""" +log debugger segments modifications +""" + +ida_dbg.DOPT_START_BPT +""" +break on process start +""" + +ida_dbg.DOPT_TEMP_HWBPT +""" +when possible use hardware bpts for temp bpts +""" + +ida_dbg.DOPT_THREAD_BPT +""" +break on thread start/exit +""" + +ida_dbg.DOPT_THREAD_MSGS +""" +log thread starts/exits +""" + +ida_dbg.DSTATE_NOTASK +""" +no process is currently debugged +""" + +ida_dbg.DSTATE_RUN +""" +process is running +""" + +ida_dbg.DSTATE_SUSP +""" +process is suspended and will not continue +""" + +ida_dbg.EXCDLG_ALWAYS +""" +always display +""" + +ida_dbg.EXCDLG_NEVER +""" +never display exception dialogs +""" + +ida_dbg.EXCDLG_UNKNOWN +""" +display for unknown exceptions +""" + +ida_dbg.FT_LOG_RET +""" +function tracing will log returning instructions +""" + +ida_dbg.IT_LOG_SAME_IP +""" +instruction tracing will log instructions whose IP doesn't change +""" + +ida_dbg.ST_ALREADY_LOGGED +""" +step tracing will be disabled when IP is already logged +""" + +ida_dbg.ST_DIFFERENTIAL +""" +tracing: log only new instructions +""" + +ida_dbg.ST_OPTIONS_MASK +""" +mask of available options, to ensure compatibility with newer IDA +versions +""" + +ida_dbg.ST_OVER_DEBUG_SEG +""" +step tracing will be disabled when IP is in a debugger segment +""" + +ida_dbg.ST_OVER_LIB_FUNC +""" +step tracing will be disabled when IP is in a library function +""" + +ida_dbg.ST_SKIP_LOOPS +""" +step tracing will try to skip loops already recorded +""" + +ida_dbg.WFNE_ANY +""" +return the first event (even if it doesn't suspend the process) +""" + +ida_dbg.WFNE_CONT +""" +continue from the suspended state +""" + +ida_dbg.WFNE_NOWAIT +""" +(to be used with 'WFNE_CONT' ) + +do not wait for any event, immediately return 'DEC_TIMEOUT' +""" + +ida_dbg.WFNE_SILENT +""" +1: be slient, 0:display modal boxes if necessary +""" + +ida_dbg.WFNE_SUSP +""" +wait until the process gets suspended +""" + +ida_dbg.WFNE_USEC +""" +(minimum non-zero timeout is 40000us) + +timeout is specified in microseconds +""" +=== ida_dbg EPYDOC INJECTIONS END === +Help on function close_linput in module ida_diskio: + +close_linput(*args) + close_linput(li) + + + Close loader input. + + + @param li (C++: linput_t *) + +Help on function create_bytearray_linput in module ida_diskio: + +create_bytearray_linput(*args) + create_bytearray_linput(s) -> linput_t * + + + Trivial memory linput. + +Help on function create_generic_linput in module ida_diskio: + +create_generic_linput(*args) + create_generic_linput(gl) -> linput_t * + + + Create a generic linput + + @param gl: linput description. this object will be destroyed by + close_linput() using "delete gl;" (C++: generic_linput_t + *) + +Help on function create_memory_linput in module ida_diskio: + +create_memory_linput(*args) + create_memory_linput(start, size) -> linput_t * + + + Create a linput for process memory. This linput will use + read_dbg_memory() to read data. + + @param start: starting address of the input (C++: ea_t) + @param size: size of the memory area to represent as linput if + unknown, may be passed as 0 (C++: asize_t) + +Help on function eclose in module ida_diskio: + +eclose(*args) + eclose(fp) + +Help on function enumerate_files in module ida_diskio: + +enumerate_files(*args) + enumerate_files(path, fname, callback) -> PyObject * + + + Enumerate files in the specified directory while the callback returns 0. + @param path: directory to enumerate files in + @param fname: mask of file names to enumerate + @param callback: a callable object that takes the filename as + its first argument and it returns 0 to continue + enumeration or non-zero to stop enumeration. + @return: + None in case of script errors + tuple(code, fname) : If the callback returns non-zero + +Help on function fopenA in module ida_diskio: + +fopenA(*args) + fopenA(file) -> FILE * + + + Open a file for append in text mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenM in module ida_diskio: + +fopenM(*args) + fopenM(file) -> FILE * + + + Open a file for read/write in binary mode, deny write. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenRB in module ida_diskio: + +fopenRB(*args) + fopenRB(file) -> FILE * + + + Open a file for read in binary mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenRT in module ida_diskio: + +fopenRT(*args) + fopenRT(file) -> FILE * + + + Open a file for read in text mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenWB in module ida_diskio: + +fopenWB(*args) + fopenWB(file) -> FILE * + + + Open a new file for write in binary mode, deny read/write. If a file + exists, it will be removed. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenWT in module ida_diskio: + +fopenWT(*args) + fopenWT(file) -> FILE * + + + Open a new file for write in text mode, deny write. If a file exists, + it will be removed. + + @param file (C++: const char *) + @return: NULL if failure + +Help on class generic_linput_t in module ida_diskio: + +class generic_linput_t(__builtin__.object) + | Proxy of C++ generic_linput_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | read(self, *args) + | read(self, off, buffer, nbytes) -> ssize_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blocksize + | generic_linput_t_blocksize_get(self) -> uint32 + | + | filesize + | generic_linput_t_filesize_get(self) -> uint64 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_generic_linput_t(self) + +Help on function get_ida_subdirs in module ida_diskio: + +get_ida_subdirs(*args) + get_ida_subdirs(subdir, flags=0) -> int + + + Get list of directories in which to find a specific IDA resource (see + 'IDA subdirectories' ). The order of the resulting list is as follows: + + - [$IDAUSR/subdir (0..N entries)] + - $IDADIR/subdir + + @param subdir: name of the resource to list (C++: const char *) + @param flags: Subdirectory modification flags bits (C++: int) + @return: number of directories appended to 'dirs' + +Help on function get_linput_type in module ida_diskio: + +get_linput_type(*args) + get_linput_type(li) -> linput_type_t + + + Get linput type. + + + @param li (C++: linput_t *) + +Help on function get_special_folder in module ida_diskio: + +get_special_folder(*args) + get_special_folder(csidl) -> str + + + Get a folder location by CSIDL (see 'Common CSIDLs' ). Path should be + of at least MAX_PATH size + + @param csidl (C++: int) + +Help on function get_user_idadir in module ida_diskio: + +get_user_idadir(*args) + get_user_idadir() -> char const * + + + Get user ida related directory. + + - if $IDAUSR is defined: + - the first element in $IDAUSR + - else + - default user directory ($HOME/.idapro or %APPDATA%Hex-Rays/IDA Pro) + +Help on function getsysfile in module ida_diskio: + +getsysfile(*args) + getsysfile(filename, subdir) -> str + + + Search for IDA system file. This function searches for a file in:each + directory specified by IDAUSR%ida directory [+ subdir] and returns the + first match. + + @param filename (C++: const char *) + @param subdir (C++: const char *) + @return: NULL if not found, otherwise a pointer to full file name. + +Help on function idadir in module ida_diskio: + +idadir(*args) + idadir(subdir) -> char const * + + + Get IDA directory (if subdir==NULL) or the specified subdirectory (see + 'IDA subdirectories' ) + + @param subdir (C++: const char *) + +Help on function open_linput in module ida_diskio: + +open_linput(*args) + open_linput(file, remote) -> linput_t * + + + Open loader input. + + + @param file (C++: const char *) + @param remote (C++: bool) + +Help on function qlgetz in module ida_diskio: + +qlgetz(*args) + qlgetz(li, fpos) -> str + + + Read a zero-terminated string from the input. If fpos == -1 then no + seek will be performed. + + @param li (C++: linput_t *) + @param fpos (C++: int64) + +=== ida_diskio EPYDOC INJECTIONS === +ida_diskio.IDA_SUBDIR_IDADIR_FIRST +""" +$IDADIR/subdir will be first, not last +""" + +ida_diskio.IDA_SUBDIR_IDP +""" +append the processor name as a subdirectory +""" + +ida_diskio.IDA_SUBDIR_ONLY_EXISTING +""" +only existing directories will be present +""" +=== ida_diskio EPYDOC INJECTIONS END === +Help on function add_entry in module ida_entry: + +add_entry(*args) + add_entry(ord, ea, name, makecode, flags=0) -> bool + + + Add an entry point to the list of entry points. + + @param ord: ordinal number if ordinal number is equal to 'ea' then + ordinal is not used (C++: uval_t) + @param ea: linear address (C++: ea_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to the regular + comment. If name == NULL, then the old name will be + retained. (C++: const char *) + @param makecode: should the kernel convert bytes at the entry point to + instruction(s) (C++: bool) + @param flags: See AEF_* (C++: int) + @return: success (currently always true) + +Help on function get_entry in module ida_entry: + +get_entry(*args) + get_entry(ord) -> ea_t + + + Get entry point address by its ordinal + + @param ord: ordinal number of entry point (C++: uval_t) + @return: address or BADADDR + +Help on function get_entry_forwarder in module ida_entry: + +get_entry_forwarder(*args) + get_entry_forwarder(ord) -> str + + + Get forwarder name for the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry forwarder name or -1 + +Help on function get_entry_name in module ida_entry: + +get_entry_name(*args) + get_entry_name(ord) -> str + + + Get name of the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry name or -1 + +Help on function get_entry_ordinal in module ida_entry: + +get_entry_ordinal(*args) + get_entry_ordinal(idx) -> uval_t + + + Get ordinal number of an entry point. + + @param idx: internal number of entry point. Should be in the range 0.. + get_entry_qty() -1 (C++: size_t) + @return: ordinal number or 0. + +Help on function get_entry_qty in module ida_entry: + +get_entry_qty(*args) + get_entry_qty() -> size_t + + + Get number of entry points. + +Help on function rename_entry in module ida_entry: + +rename_entry(*args) + rename_entry(ord, name, flags=0) -> bool + + + Rename entry point. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to a repeatable + comment. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +Help on function set_entry_forwarder in module ida_entry: + +set_entry_forwarder(*args) + set_entry_forwarder(ord, name, flags=0) -> bool + + + Set forwarder name for ordinal. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: forwarder name for entry point. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +=== ida_entry EPYDOC INJECTIONS === +ida_entry.AEF_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly Specifying AEF_IDBENC also implies AEF_NODUMMY +""" + +ida_entry.AEF_NODUMMY +""" +it begins with a dummy suffix. See also AEF_IDBENC + +automatically prepend the name with '_' if +""" + +ida_entry.AEF_UTF8 +""" +the name is given in UTF-8 (default) +""" +=== ida_entry EPYDOC INJECTIONS END === +Help on function add_enum in module ida_enum: + +add_enum(*args) + add_enum(idx, name, flag) -> enum_t + + + Add new enum type.if idx== 'BADADDR' then add as the last idxif + name==NULL then generate a unique name "enum_%d" + + @param idx (C++: size_t) + @param name (C++: const char *) + @param flag (C++: flags_t) + +Help on function add_enum_member in module ida_enum: + +add_enum_member(*args) + add_enum_member(id, name, value, bmask=(bmask_t(-1))) -> int + + + Add member to enum type. + + @param id (C++: enum_t) + @param name (C++: const char *) + @param value (C++: uval_t) + @param bmask (C++: bmask_t) + @return: 0 if ok, otherwise one of Add enum member result codes + +Help on function del_enum in module ida_enum: + +del_enum(*args) + del_enum(id) + + + Delete an enum type. + + + @param id (C++: enum_t) + +Help on function del_enum_member in module ida_enum: + +del_enum_member(*args) + del_enum_member(id, value, serial, bmask) -> bool + + + Delete member of enum type. + + + @param id (C++: enum_t) + @param value (C++: uval_t) + @param serial (C++: uchar) + @param bmask (C++: bmask_t) + +Help on class enum_member_visitor_t in module ida_enum: + +class enum_member_visitor_t(__builtin__.object) + | Proxy of C++ enum_member_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> enum_member_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_enum_member(self, *args) + | visit_enum_member(self, cid, value) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enum_member_visitor_t(self) + +Help on function for_all_enum_members in module ida_enum: + +for_all_enum_members(*args) + for_all_enum_members(id, cv) -> int + + + Visit all members of a given enum. + + + @param id (C++: enum_t) + @param cv (C++: enum_member_visitor_t &) + +Help on function get_bmask_cmt in module ida_enum: + +get_bmask_cmt(*args) + get_bmask_cmt(id, bmask, repeatable) -> str + +Help on function get_bmask_name in module ida_enum: + +get_bmask_name(*args) + get_bmask_name(id, bmask) -> str + +Help on function get_enum in module ida_enum: + +get_enum(*args) + get_enum(name) -> enum_t + + + Get enum by name. + + + @param name (C++: const char *) + +Help on function get_enum_cmt in module ida_enum: + +get_enum_cmt(*args) + get_enum_cmt(id, repeatable) -> str + + + Get enum comment. + + + @param id (C++: enum_t) + @param repeatable (C++: bool) + +Help on function get_enum_flag in module ida_enum: + +get_enum_flag(*args) + get_enum_flag(id) -> flags_t + + + Get flags determining the representation of the enum. (currently they + define the numeric base: octal, decimal, hex, bin) and signness. + + @param id (C++: enum_t) + +Help on function get_enum_idx in module ida_enum: + +get_enum_idx(*args) + get_enum_idx(id) -> uval_t + + + Get serial number of enum. The serial number determines the place of + the enum in the enum window. + + @param id (C++: enum_t) + +Help on function get_enum_member in module ida_enum: + +get_enum_member(*args) + get_enum_member(id, value, serial, mask) -> const_t + + + Find an enum member by enum, value and bitmaskif serial -1, return a + member with any serial + + @param id (C++: enum_t) + @param value (C++: uval_t) + @param serial (C++: int) + @param mask (C++: bmask_t) + +Help on function get_enum_member_bmask in module ida_enum: + +get_enum_member_bmask(*args) + get_enum_member_bmask(id) -> bmask_t + + + Get bitmask of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_by_name in module ida_enum: + +get_enum_member_by_name(*args) + get_enum_member_by_name(name) -> const_t + + + Get a reference to an enum member by its name. + + + @param name (C++: const char *) + +Help on function get_enum_member_cmt in module ida_enum: + +get_enum_member_cmt(*args) + get_enum_member_cmt(id, repeatable) -> str + + + Get enum member's comment. + + + @param id (C++: const_t) + @param repeatable (C++: bool) + +Help on function get_enum_member_enum in module ida_enum: + +get_enum_member_enum(*args) + get_enum_member_enum(id) -> enum_t + + + Get the parent enum of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_name in module ida_enum: + +get_enum_member_name(*args) + get_enum_member_name(id) -> str + + + Get name of an enum member by const_t. + + + @param id (C++: const_t) + +Help on function get_enum_member_serial in module ida_enum: + +get_enum_member_serial(*args) + get_enum_member_serial(cid) -> uchar + + + Get serial number of an enum member. + + + @param cid (C++: const_t) + +Help on function get_enum_member_value in module ida_enum: + +get_enum_member_value(*args) + get_enum_member_value(id) -> uval_t + + + Get value of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_name in module ida_enum: + +get_enum_name(*args) + get_enum_name(id) -> str + + + Get name of enum. + + + @param id (C++: enum_t) + +Help on function get_enum_name2 in module ida_enum: + +get_enum_name2(*args) + get_enum_name2(id, flags=0) -> str + + + Get name of enum + + @param id: enum id (C++: enum_t) + @param flags: Enum name flags (C++: int) + +Help on function get_enum_qty in module ida_enum: + +get_enum_qty(*args) + get_enum_qty() -> size_t + + + Get number of declared 'enum_t' types. + +Help on function get_enum_size in module ida_enum: + +get_enum_size(*args) + get_enum_size(id) -> size_t + + + Get the number of the members of the enum. + + + @param id (C++: enum_t) + +Help on function get_enum_type_ordinal in module ida_enum: + +get_enum_type_ordinal(*args) + get_enum_type_ordinal(id) -> int32 + + + Get corresponding type ordinal number. + + + @param id (C++: enum_t) + +Help on function get_enum_width in module ida_enum: + +get_enum_width(*args) + get_enum_width(id) -> size_t + + + Get the width of a enum element allowed values: 0 + (unspecified),1,2,4,8,16,32,64 + + @param id (C++: enum_t) + +Help on function get_first_bmask in module ida_enum: + +get_first_bmask(*args) + get_first_bmask(id) -> bmask_t + + + Get first bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the smallest bitmask for enum, or DEFMASK + +Help on function get_first_enum_member in module ida_enum: + +get_first_enum_member(*args) + get_first_enum_member(id, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_first_serial_enum_member in module ida_enum: + +get_first_serial_enum_member(*args) + get_first_serial_enum_member(id, value, bmask) -> const_t + +Help on function get_last_bmask in module ida_enum: + +get_last_bmask(*args) + get_last_bmask(id) -> bmask_t + + + Get last bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the biggest bitmask for enum, or DEFMASK + +Help on function get_last_enum_member in module ida_enum: + +get_last_enum_member(*args) + get_last_enum_member(id, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_last_serial_enum_member in module ida_enum: + +get_last_serial_enum_member(*args) + get_last_serial_enum_member(id, value, bmask) -> const_t + +Help on function get_next_bmask in module ida_enum: + +get_next_bmask(*args) + get_next_bmask(id, bmask) -> bmask_t + + + Get next bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value higher than the specified + value, or DEFMASK + +Help on function get_next_enum_member in module ida_enum: + +get_next_enum_member(*args) + get_next_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_next_serial_enum_member in module ida_enum: + +get_next_serial_enum_member(*args) + get_next_serial_enum_member(in_out_serial, first_cid) -> const_t + +Help on function get_prev_bmask in module ida_enum: + +get_prev_bmask(*args) + get_prev_bmask(id, bmask) -> bmask_t + + + Get prev bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value lower than the specified value, + or DEFMASK + +Help on function get_prev_enum_member in module ida_enum: + +get_prev_enum_member(*args) + get_prev_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_prev_serial_enum_member in module ida_enum: + +get_prev_serial_enum_member(*args) + get_prev_serial_enum_member(in_out_serial, first_cid) -> const_t + +Help on function getn_enum in module ida_enum: + +getn_enum(*args) + getn_enum(n) -> enum_t + + + Get enum by its ordinal number (0..n). + + + @param n (C++: size_t) + +Help on function is_bf in module ida_enum: + +is_bf(*args) + is_bf(id) -> bool + + + Is enum a bitfield? (otherwise - plain enum, no bitmasks except for + 'DEFMASK' are allowed) + + @param id (C++: enum_t) + +Help on function is_enum_fromtil in module ida_enum: + +is_enum_fromtil(*args) + is_enum_fromtil(id) -> bool + + + Does enum come from type library? + + + @param id (C++: enum_t) + +Help on function is_enum_hidden in module ida_enum: + +is_enum_hidden(*args) + is_enum_hidden(id) -> bool + + + Is enum collapsed? + + + @param id (C++: enum_t) + +Help on function is_ghost_enum in module ida_enum: + +is_ghost_enum(*args) + is_ghost_enum(id) -> bool + + + Is a ghost copy of a local type? + + + @param id (C++: enum_t) + +Help on function is_one_bit_mask in module ida_enum: + +is_one_bit_mask(*args) + is_one_bit_mask(mask) -> bool + + + Is bitmask one bit? + + + @param mask (C++: bmask_t) + +Help on function set_bmask_cmt in module ida_enum: + +set_bmask_cmt(*args) + set_bmask_cmt(id, bmask, cmt, repeatable) -> bool + +Help on function set_bmask_name in module ida_enum: + +set_bmask_name(*args) + set_bmask_name(id, bmask, name) -> bool + +Help on function set_enum_bf in module ida_enum: + +set_enum_bf(*args) + set_enum_bf(id, bf) -> bool + + + Set 'bitfield' bit of enum (i.e. convert it to a bitfield) + + + @param id (C++: enum_t) + @param bf (C++: bool) + +Help on function set_enum_cmt in module ida_enum: + +set_enum_cmt(*args) + set_enum_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum type. + + + @param id (C++: enum_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_flag in module ida_enum: + +set_enum_flag(*args) + set_enum_flag(id, flag) -> bool + + + Set data representation flags. + + + @param id (C++: enum_t) + @param flag (C++: flags_t) + +Help on function set_enum_fromtil in module ida_enum: + +set_enum_fromtil(*args) + set_enum_fromtil(id, fromtil) -> bool + + + Specify that enum comes from a type library. + + + @param id (C++: enum_t) + @param fromtil (C++: bool) + +Help on function set_enum_ghost in module ida_enum: + +set_enum_ghost(*args) + set_enum_ghost(id, ghost) -> bool + + + Specify that enum is a ghost copy of a local type. + + + @param id (C++: enum_t) + @param ghost (C++: bool) + +Help on function set_enum_hidden in module ida_enum: + +set_enum_hidden(*args) + set_enum_hidden(id, hidden) -> bool + + + Collapse enum. + + + @param id (C++: enum_t) + @param hidden (C++: bool) + +Help on function set_enum_idx in module ida_enum: + +set_enum_idx(*args) + set_enum_idx(id, idx) -> bool + + + Set serial number of enum. Also see 'get_enum_idx()' . + + @param id (C++: enum_t) + @param idx (C++: size_t) + +Help on function set_enum_member_cmt in module ida_enum: + +set_enum_member_cmt(*args) + set_enum_member_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum member. + + + @param id (C++: const_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_member_name in module ida_enum: + +set_enum_member_name(*args) + set_enum_member_name(id, name) -> bool + + + Set name of enum member. + + + @param id (C++: const_t) + @param name (C++: const char *) + +Help on function set_enum_name in module ida_enum: + +set_enum_name(*args) + set_enum_name(id, name) -> bool + + + Set name of enum type. + + + @param id (C++: enum_t) + @param name (C++: const char *) + +Help on function set_enum_type_ordinal in module ida_enum: + +set_enum_type_ordinal(*args) + set_enum_type_ordinal(id, ord) + + + Set corresponding type ordinal number. + + + @param id (C++: enum_t) + @param ord (C++: int32) + +Help on function set_enum_width in module ida_enum: + +set_enum_width(*args) + set_enum_width(id, width) -> bool + + + See comment for 'get_enum_width()' + + + @param id (C++: enum_t) + @param width (C++: int) + +=== ida_enum EPYDOC INJECTIONS === +ida_enum.DEFMASK +""" +default bitmask +""" + +ida_enum.ENFL_REGEX +""" +apply regular expressions to beautify the name +""" + +ida_enum.ENUM_MEMBER_ERROR_ENUM +""" +bad enum id +""" + +ida_enum.ENUM_MEMBER_ERROR_ILLV +""" +bad bmask and value combination (~bmask & value != 0) +""" + +ida_enum.ENUM_MEMBER_ERROR_MASK +""" +bad bmask +""" + +ida_enum.ENUM_MEMBER_ERROR_NAME +""" +already have member with this name (bad name) +""" + +ida_enum.ENUM_MEMBER_ERROR_VALUE +""" +already have 256 members with this value +""" +=== ida_enum EPYDOC INJECTIONS END === +Help on class _IdcFunction in module ida_expr: + +class _IdcFunction(__builtin__.object) + | Internal class that calls pyw_call_idc_func() with a context + | + | Methods defined here: + | + | __call__(self, args, res) + | + | __init__(self, ctxptr) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fp_ptr + +Help on function add_idc_class in module ida_expr: + +add_idc_class(*args) + add_idc_class(name, super=None) -> idc_class_t * + + + Create a new IDC class. + + @param name: name of the new class (C++: const char *) + @param super: the base class for the new class. if the new class is + not based on any other class, pass NULL (C++: const + idc_class_t *) + @return: pointer to the created class. If such a class already exists, + a pointer to it will be returned. Pointers to other existing + classes may be invalidated by this call. + +Help on function add_idc_func in module ida_expr: + +add_idc_func(name, fp, args, defvals=None, flags=0) + Extends the IDC language by exposing a new IDC function that is backed up by a Python function + + @param name: IDC function name to expose + @param fp: Python callable that will receive the arguments and return a tuple. + @param args: Arguments. A tuple of idaapi.VT_XXX constants + @param flags: IDC function flags. A combination of EXTFUN_XXX constants + + @return: Boolean + + + Add an IDC function. This function does not modify the predefined + kernel functions. Example: + + static error_t idaapi myfunc5(idc_value_t *argv, idc_value_t *res) + { + msg("myfunc is called with arg0=%a and arg1=%s + ", argv[0].num, argv[1].str); + res->num = 5; // let's return 5 + return eOk; + } + static const char myfunc5_args[] = { VT_LONG, VT_STR, 0 }; + static const ext_idcfunc_t myfunc_desc = { "MyFunc5", myfunc5, myfunc5_args, NULL, 0, EXTFUN_BASE }; + + // after this: + add_idc_func(myfunc_desc); + + // there is a new IDC function which can be called like this: + MyFunc5(0x123, "test"); + + If the function already exists, it will be replaced by the new + function + + @return: success + +Help on function add_idc_gvar in module ida_expr: + +add_idc_gvar(*args) + add_idc_gvar(name) -> idc_value_t + + + Add global IDC variable. + + @param name: name of the global variable (C++: const char *) + @return: pointer to the created variable or existing variable. NB: the + returned pointer is valid until a new global var is added. + +Help on function compile_idc_file in module ida_expr: + +compile_idc_file(*args) + compile_idc_file(nonnul_line) -> str + +Help on function compile_idc_snippet in module ida_expr: + +compile_idc_snippet(*args) + compile_idc_snippet(func, text, resolver=None, only_safe_funcs=False) -> str + + + Compile text with IDC statements. + + @param func: name of the function to create out of the snippet (C++: + const char *) + @param text: text to compile (C++: const char *) + @param resolver: callback object to get values of undefined variables + This object will be called if IDC function contains + references to undefined variables. May be NULL. (C++: + idc_resolver_t *) + @param only_safe_funcs: if true, any calls to functions without + EXTFUN_SAFE flag will lead to a compilation + error. (C++: bool) + +Help on function compile_idc_text in module ida_expr: + +compile_idc_text(*args) + compile_idc_text(nonnul_line) -> str + +Help on function copy_idcv in module ida_expr: + +copy_idcv(*args) + copy_idcv(dst, src) -> error_t + + + Copy 'src' to 'dst'. For idc objects only a reference is copied. + + @param dst (C++: idc_value_t *) + @param src (C++: const idc_value_t &) + +Help on function create_idcv_ref in module ida_expr: + +create_idcv_ref(*args) + create_idcv_ref(ref, v) -> bool + + + Create a variable reference. Currently only references to global + variables can be created. + + @param ref: ptr to the result (C++: idc_value_t *) + @param v: variable to reference (C++: const idc_value_t *) + @return: success + +Help on function deep_copy_idcv in module ida_expr: + +deep_copy_idcv(*args) + deep_copy_idcv(dst, src) -> error_t + + + Deep copy an IDC object. This function performs deep copy of idc + objects. If 'src' is not an object, 'copy_idcv()' will be called + + @param dst (C++: idc_value_t *) + @param src (C++: const idc_value_t &) + +Help on function del_idc_func in module ida_expr: + +del_idc_func(name) + Unregisters the specified IDC function + + @param name: IDC function name to unregister + + @return: Boolean + + + Delete an IDC function + +Help on function del_idcv_attr in module ida_expr: + +del_idcv_attr(*args) + del_idcv_attr(obj, attr) -> error_t + + + Delete an object attribute. + + @param obj: variable that holds an object reference (C++: idc_value_t + *) + @param attr: attribute name (C++: const char *) + @return: error code, eOk on success + +Help on function deref_idcv in module ida_expr: + +deref_idcv(*args) + deref_idcv(v, vref_flags) -> idc_value_t + + + Dereference a 'VT_REF' variable. + + @param v: variable to dereference (C++: idc_value_t *) + @param vref_flags: Dereference IDC variable flags (C++: int) + @return: pointer to the dereference result or NULL. If returns NULL, + qerrno is set to eExecBadRef "Illegal variable reference" + +Help on function eval_expr in module ida_expr: + +eval_expr(*args) + eval_expr(rv, where, line) -> str + + + Compile and calculate an expression. + + @param rv: pointer to the result (C++: idc_value_t *) + @param where: the current linear address in the addressing space of + the program being disassembled. If will be used to + resolve names of local variables etc. if not applicable, + then should be BADADDR . (C++: ea_t) + @param line: the expression to evaluate (C++: const char *) + +Help on function eval_idc_expr in module ida_expr: + +eval_idc_expr(*args) + eval_idc_expr(rv, where, line) -> str + + + Same as 'eval_expr()' , but will always use the IDC interpreter + regardless of the currently installed extlang. + + @param rv (C++: idc_value_t *) + @param where (C++: ea_t) + +Help on function exec_idc_script in module ida_expr: + +exec_idc_script(*args) + exec_idc_script(result, path, func, args, argsnum) -> str + + + Compile and execute IDC function(s) from file. + + @param result: ptr to idc_value_t to hold result of the function. If + execution fails, this variable will contain the + exception information. You may pass NULL if you are not + interested in the returned value. (C++: idc_value_t *) + @param path: text file containing text of IDC functions (C++: const + char *) + @param func: function name to execute (C++: const char *) + @param args: array of parameters (C++: const idc_value_t) + @param argsnum: number of parameters to pass to 'fname' This number + should be equal to number of parameters the function + expects. (C++: size_t) + +Help on function exec_system_script in module ida_expr: + +exec_system_script(*args) + exec_system_script(file, complain_if_no_file=True) -> bool + + + Compile and execute "main" function from system file. + + @param file: file name with IDC function(s). The file will be searched + in the idc subdir of ida (C++: const char *) + @param complain_if_no_file: 1: display warning if the file is not + found 0: don't complain if file doesn't + exist (C++: bool) + +Help on function find_idc_class in module ida_expr: + +find_idc_class(*args) + find_idc_class(name) -> idc_class_t * + + + Find an existing IDC class by its name. + + @param name: name of the class (C++: const char *) + @return: pointer to the class or NULL. The returned pointer is valid + until a new call to add_idc_class() + +Help on function find_idc_func in module ida_expr: + +find_idc_func(*args) + find_idc_func(prefix, n=0) -> str + +Help on function find_idc_gvar in module ida_expr: + +find_idc_gvar(*args) + find_idc_gvar(name) -> idc_value_t + + + Find an existing global IDC variable by its name. + + @param name: name of the global variable (C++: const char *) + @return: pointer to the variable or NULL. NB: the returned pointer is + valid until a new global var is added. FIXME: it is difficult + to use this function in a thread safe manner + +Help on function first_idcv_attr in module ida_expr: + +first_idcv_attr(*args) + first_idcv_attr(obj) -> char const * + +Help on function free_idcv in module ida_expr: + +free_idcv(*args) + free_idcv(v) + + + Free storage used by 'VT_STR' / 'VT_OBJ' IDC variables. After this + call the variable has a numeric value 0 + + @param v (C++: idc_value_t *) + +Help on function get_idc_filename in module ida_expr: + +get_idc_filename(*args) + get_idc_filename(file) -> str + + + Get full name of IDC file name. Search for file in list of include + directories, IDCPATH directory and the current directory. + + @param file: file name without full path (C++: const char *) + @return: NULL is file not found. otherwise returns pointer to buf + +Help on function get_idcv_attr in module ida_expr: + +get_idcv_attr(*args) + get_idcv_attr(res, obj, attr, may_use_getattr=False) -> error_t + + + Get an object attribute. + + @param res: buffer for the attribute value (C++: idc_value_t *) + @param obj: variable that holds an object reference. if obj is NULL it + searches global variables, then user functions (C++: const + idc_value_t *) + @param attr: attribute name (C++: const char *) + @param may_use_getattr: may call getattr functions to calculate the + attribute if it does not exist (C++: bool) + @return: error code, eOk on success + +Help on function get_idcv_class_name in module ida_expr: + +get_idcv_class_name(*args) + get_idcv_class_name(obj) -> str + + + Retrieves the IDC object class name. + + @param obj: class instance variable (C++: const idc_value_t *) + @return: error code, eOk on success + +Help on function get_idcv_slice in module ida_expr: + +get_idcv_slice(*args) + get_idcv_slice(res, v, i1, i2, flags=0) -> error_t + + + Get slice. + + @param res: output variable that will contain the slice (C++: + idc_value_t *) + @param v: input variable (string or object) (C++: const idc_value_t + *) + @param i1: slice start index (C++: uval_t) + @param i2: slice end index (excluded) (C++: uval_t) + @param flags: IDC variable slice flags or 0 (C++: int) + @return: eOk if success + +Help on class highlighter_cbs_t in module ida_expr: + +class highlighter_cbs_t(__builtin__.object) + | Proxy of C++ highlighter_cbs_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> highlighter_cbs_t + | + | __repr__ = _swig_repr(self) + | + | cur_block_state(self, *args) + | cur_block_state(self) -> int32 + | + | prev_block_state(self, *args) + | prev_block_state(self) -> int32 + | + | set_block_state(self, *args) + | set_block_state(self, arg0) + | + | set_style(self, *args) + | set_style(self, arg0, arg1, arg2) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_highlighter_cbs_t(self) + +Help on class idc_global_t in module ida_expr: + +class idc_global_t(__builtin__.object) + | Proxy of C++ idc_global_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idc_global_t + | __init__(self, n) -> idc_global_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | idc_global_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | idc_global_t_value_get(self) -> idc_value_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idc_global_t(self) + +Help on class idc_value_t in module ida_expr: + +class idc_value_t(__builtin__.object) + | Proxy of C++ idc_value_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=0) -> idc_value_t + | __init__(self, r) -> idc_value_t + | __init__(self, _str) -> idc_value_t + | + | __repr__ = _swig_repr(self) + | + | _create_empty_string(self, *args) + | _create_empty_string(self) + | + | _idc_value_t__get_e = __get_e(self, *args) + | __get_e(self) -> wrapped_array_t< ushort,6 > + | + | c_str(self, *args) + | c_str(self) -> char const * + | + | clear(self, *args) + | clear(self) + | + | create_empty_string(self, *args) + | create_empty_string(self) + | + | is_convertible(self, *args) + | is_convertible(self) -> bool + | + | is_integral(self, *args) + | is_integral(self) -> bool + | + | is_zero(self, *args) + | is_zero(self) -> bool + | + | qstr(self, *args) + | qstr(self) -> qstring + | qstr(self) -> qstring const & + | + | set_float(self, *args) + | set_float(self, f) + | + | set_int64(self, *args) + | set_int64(self, v) + | + | set_long(self, *args) + | set_long(self, v) + | + | set_pvoid(self, *args) + | set_pvoid(self, p) + | + | set_string(self, *args) + | set_string(self, _str, len) + | set_string(self, _str) + | + | swap(self, *args) + | swap(self, v) + | + | u_str(self, *args) + | u_str(self) -> uchar const * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | __get_e(self) -> wrapped_array_t< ushort,6 > + | + | funcidx + | idc_value_t_funcidx_get(self) -> int + | + | i64 + | idc_value_t_i64_get(self) -> int64 + | + | num + | idc_value_t_num_get(self) -> sval_t + | + | obj + | idc_value_t_obj_get(self) -> idc_object_t * + | + | pvoid + | idc_value_t_pvoid_get(self) -> void * + | + | reserve + | idc_value_t_reserve_get(self) -> uchar [sizeof(qstring)] + | + | str + | + | thisown + | The membership flag + | + | vtype + | idc_value_t_vtype_get(self) -> char + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idc_value_t(self) + +Help on class idc_values_t in module ida_expr: + +class idc_values_t(__builtin__.object) + | Proxy of C++ qvector< idc_value_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> idc_value_t + | + | __init__(self, *args) + | __init__(self) -> idc_values_t + | __init__(self, x) -> idc_values_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> idc_value_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> idc_value_t + | begin(self) -> idc_value_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> idc_value_t + | end(self) -> idc_value_t + | + | erase(self, *args) + | erase(self, it) -> idc_value_t + | erase(self, first, last) -> idc_value_t + | + | extract(self, *args) + | extract(self) -> idc_value_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=idc_value_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> idc_value_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> idc_value_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idc_values_t(self) + +Help on function idcv_float in module ida_expr: + +idcv_float(*args) + idcv_float(v) -> error_t + + + Convert IDC variable to a floating point. + + + @param v (C++: idc_value_t *) + +Help on function idcv_int64 in module ida_expr: + +idcv_int64(*args) + idcv_int64(v) -> error_t + + + Convert IDC variable to a 64bit number. + + @param v (C++: idc_value_t *) + @return: v = 0 if impossible to convert to int64 + +Help on function idcv_long in module ida_expr: + +idcv_long(*args) + idcv_long(v) -> error_t + + + Convert IDC variable to a long (32/64bit) number. + + @param v (C++: idc_value_t *) + @return: v = 0 if impossible to convert to long + +Help on function idcv_num in module ida_expr: + +idcv_num(*args) + idcv_num(v) -> error_t + + + Convert IDC variable to a long number. + + @param v (C++: idc_value_t *) + @return: v = 0 if IDC variable = "false" string v = 1 if IDC + variable = "true" string v = number if IDC variable is + number or string containing a number eTypeConflict if IDC + variable = empty string + +Help on function idcv_object in module ida_expr: + +idcv_object(*args) + idcv_object(v, icls=None) -> error_t + + + Create an IDC object. The original value of 'v' is discarded (freed). + + @param v: variable to hold the object. any previous value will be + cleaned (C++: idc_value_t *) + @param icls: ptr to the desired class. NULL means "object" class this + ptr must be returned by add_idc_class() or + find_idc_class() (C++: const idc_class_t *) + @return: always eOk + +Help on function idcv_string in module ida_expr: + +idcv_string(*args) + idcv_string(v) -> error_t + + + Convert IDC variable to a text string. + + + @param v (C++: idc_value_t *) + +Help on function last_idcv_attr in module ida_expr: + +last_idcv_attr(*args) + last_idcv_attr(obj) -> char const * + +Help on function move_idcv in module ida_expr: + +move_idcv(*args) + move_idcv(dst, src) -> error_t + + + Move 'src' to 'dst'. This function is more effective than copy_idcv + since it never copies big amounts of data. + + @param dst (C++: idc_value_t *) + @param src (C++: idc_value_t *) + +Help on function next_idcv_attr in module ida_expr: + +next_idcv_attr(*args) + next_idcv_attr(obj, attr) -> char const * + +Help on function prev_idcv_attr in module ida_expr: + +prev_idcv_attr(*args) + prev_idcv_attr(obj, attr) -> char const * + +Help on function print_idcv in module ida_expr: + +print_idcv(*args) + print_idcv(v, name=None, indent=0) -> str + + + Get text representation of 'idc_value_t' . + + + @param v (C++: const idc_value_t &) + @param name (C++: const char *) + @param indent (C++: int) + +Help on function py_add_idc_func in module ida_expr: + +py_add_idc_func(*args) + py_add_idc_func(name, fp_ptr, args, defvals, flags) -> bool + +Help on function py_get_call_idc_func in module ida_expr: + +py_get_call_idc_func(*args) + py_get_call_idc_func() -> size_t + +Help on function pyw_convert_defvals in module ida_expr: + +pyw_convert_defvals(*args) + pyw_convert_defvals(out, py_seq) -> bool + +Help on function pyw_register_idc_func in module ida_expr: + +pyw_register_idc_func(*args) + pyw_register_idc_func(name, args, py_fp) -> size_t + +Help on function pyw_unregister_idc_func in module ida_expr: + +pyw_unregister_idc_func(*args) + pyw_unregister_idc_func(ctxptr) -> bool + +Help on function set_header_path in module ida_expr: + +set_header_path(*args) + set_header_path(path, add) -> bool + + + Set or append a header path. IDA looks for the include files in the + appended header paths, then in the ida executable directory. + + @param path: list of directories to add (separated by ';') may be + NULL, in this case nothing is added (C++: const char *) + @param add: true: append. false: remove old paths. (C++: bool) + +Help on function set_idcv_attr in module ida_expr: + +set_idcv_attr(*args) + set_idcv_attr(obj, attr, value, may_use_setattr=False) -> error_t + + + Set an object attribute. + + @param obj: variable that holds an object reference. if obj is NULL + then it tries to modify a global variable with the + attribute name (C++: idc_value_t *) + @param attr: attribute name (C++: const char *) + @param value: new attribute value (C++: const idc_value_t &) + @param may_use_setattr: may call setattr functions for the class (C++: + bool) + @return: error code, eOk on success + +Help on function set_idcv_slice in module ida_expr: + +set_idcv_slice(*args) + set_idcv_slice(v, i1, i2, _in, flags=0) -> error_t + + + Set slice. + + @param v: variable to modify (string or object) (C++: idc_value_t *) + @param i1: slice start index (C++: uval_t) + @param i2: slice end index (excluded) (C++: uval_t) + @param flags: IDC variable slice flags or 0 (C++: int) + @return: eOk on success + +Help on function swap_idcvs in module ida_expr: + +swap_idcvs(*args) + swap_idcvs(v1, v2) + + + Swap 2 variables. + + + @param v1 (C++: idc_value_t *) + @param v2 (C++: idc_value_t *) + +Help on function throw_idc_exception in module ida_expr: + +throw_idc_exception(*args) + throw_idc_exception(r, desc) -> error_t + + + Create an idc execution exception object. This helper function can be + used to return an exception from C++ code to IDC. In other words this + function can be called from 'idc_func_t()' callbacks. Sample usage: if + ( !ok ) return throw_idc_exception(r, "detailed error msg"); + + @param r: object to hold the exception object (C++: idc_value_t *) + @param desc: exception description (C++: const char *) + @return: eExecThrow + +=== ida_expr EPYDOC INJECTIONS === +ida_expr.CPL_DEL_MACROS +""" +delete macros at the end of compilation +""" + +ida_expr.CPL_ONLY_SAFE +""" +allow calls of only thread-safe functions +""" + +ida_expr.CPL_USE_LABELS +""" +allow program labels in the script +""" + +ida_expr.IDC_LANG_EXT +""" +IDC script extension. +""" + +ida_expr.VARSLICE_SINGLE +""" +return single index (i2 is ignored) +""" + +ida_expr.VREF_COPY +""" +copy the result to the input var (v) +""" + +ida_expr.VREF_LOOP +""" +dereference until we get a non 'VT_REF' +""" + +ida_expr.VREF_ONCE +""" +dereference only once, do not loop +""" + +ida_expr.VT_FLOAT +""" +Floating point (see 'idc_value_t::e' ) +""" + +ida_expr.VT_FUNC +""" +Function (see 'idc_value_t::funcidx' ) +""" + +ida_expr.VT_INT64 +""" +i64 +""" + +ida_expr.VT_LONG +""" +Integer (see 'idc_value_t::num' ) +""" + +ida_expr.VT_OBJ +""" +Object (see idc_value_t::obj) +""" + +ida_expr.VT_PVOID +""" +void * +""" + +ida_expr.VT_REF +""" +Reference. +""" + +ida_expr.VT_STR +""" +String (see qstr() and similar functions) +""" + +ida_expr.VT_WILD +""" +Function with arbitrary number of arguments. The actual number of +arguments will be passed in 'idc_value_t::num' . This value should not +be used for 'idc_value_t' . +""" + +ida_expr.eExecThrow +""" +See return value of 'idc_func_t' . +""" +=== ida_expr EPYDOC INJECTIONS END === +Help on function calc_fixup_size in module ida_fixup: + +calc_fixup_size(*args) + calc_fixup_size(type) -> int + + + Calculate size of fixup in bytes (the number of bytes the fixup + patches) + + @param type (C++: fixup_type_t) + +Help on function contains_fixups in module ida_fixup: + +contains_fixups(*args) + contains_fixups(ea, size) -> bool + + + Does the specified address range contain any fixup information? + + + @param ea (C++: ea_t) + @param size (C++: asize_t) + +Help on function del_fixup in module ida_fixup: + +del_fixup(*args) + del_fixup(source) + + + Delete fixup information. + + + @param source (C++: ea_t) + +Help on function exists_fixup in module ida_fixup: + +exists_fixup(*args) + exists_fixup(source) -> bool + + + Check that a fixup exists at the given address. + + + @param source (C++: ea_t) + +Help on function find_custom_fixup in module ida_fixup: + +find_custom_fixup(*args) + find_custom_fixup(name) -> fixup_type_t + + + Get id of a custom fixup handler. + + @param name: name of the custom fixup handler (C++: const char *) + @return: id with FIXUP_CUSTOM bit set or 0 + +Help on class fixup_data_t in module ida_fixup: + +class fixup_data_t(__builtin__.object) + | Proxy of C++ fixup_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> fixup_data_t + | __init__(self, type_, flags_=0) -> fixup_data_t + | + | __repr__ = _swig_repr(self) + | + | calc_size(self, *args) + | calc_size(self) -> int + | + | clr_extdef(self, *args) + | clr_extdef(self) + | + | clr_unused(self, *args) + | clr_unused(self) + | + | get(self, *args) + | get(self, source) -> bool + | + | get_base(self, *args) + | get_base(self) -> ea_t + | + | get_desc(self, *args) + | get_desc(self, source) -> char const * + | + | get_flags(self, *args) + | get_flags(self) -> uint32 + | + | get_handler(self, *args) + | get_handler(self) -> fixup_handler_t const * + | + | get_type(self, *args) + | get_type(self) -> fixup_type_t + | + | get_value(self, *args) + | get_value(self, ea) -> uval_t + | + | has_base(self, *args) + | has_base(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_extdef(self, *args) + | is_extdef(self) -> bool + | + | is_unused(self, *args) + | is_unused(self) -> bool + | + | patch_value(self, *args) + | patch_value(self, ea) -> bool + | + | set(self, *args) + | set(self, source) + | + | set_base(self, *args) + | set_base(self, new_base) + | + | set_extdef(self, *args) + | set_extdef(self) + | + | set_sel(self, *args) + | set_sel(self, seg) + | + | set_target_sel(self, *args) + | set_target_sel(self) + | + | set_type(self, *args) + | set_type(self, type_) + | + | set_type_and_flags(self, *args) + | set_type_and_flags(self, type_, flags_=0) + | + | set_unused(self, *args) + | set_unused(self) + | + | was_created(self, *args) + | was_created(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | displacement + | fixup_data_t_displacement_get(self) -> adiff_t + | + | off + | fixup_data_t_off_get(self) -> ea_t + | + | sel + | fixup_data_t_sel_get(self) -> sel_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_fixup_data_t(self) + +Help on class fixup_info_t in module ida_fixup: + +class fixup_info_t(__builtin__.object) + | Proxy of C++ fixup_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> fixup_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | fixup_info_t_ea_get(self) -> ea_t + | + | fd + | fixup_info_t_fd_get(self) -> fixup_data_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_fixup_info_t(self) + +Help on function gen_fix_fixups in module ida_fixup: + +gen_fix_fixups(*args) + gen_fix_fixups(_from, to, size) + + + Relocate the bytes with fixup information once more (generic + function). This function may be called from 'loader_t::move_segm()' if + it suits the goal. If 'loader_t::move_segm' is not defined then this + function will be called automatically when moving segments or rebasing + the entire program. Special parameter values (from = BADADDR, size = + 0, to = delta) are used when the function is called from + rebase_program(delta). + + @param _from (C++: ea_t) + @param to (C++: ea_t) + @param size (C++: asize_t) + +Help on function get_first_fixup_ea in module ida_fixup: + +get_first_fixup_ea(*args) + get_first_fixup_ea() -> ea_t + + + Get the first address with fixup information + + @return: the first address with fixup information, or BADADDR + +Help on function get_fixup in module ida_fixup: + +get_fixup(*args) + get_fixup(fd, source) -> bool + + + Get fixup information. + + + @param fd (C++: fixup_data_t *) + @param source (C++: ea_t) + +Help on function get_fixup_desc in module ida_fixup: + +get_fixup_desc(*args) + get_fixup_desc(source, fd) -> str + + + Get FIXUP description comment. + + + @param source (C++: ea_t) + @param fd (C++: const fixup_data_t &) + +Help on function get_fixup_handler in module ida_fixup: + +get_fixup_handler(*args) + get_fixup_handler(type) -> fixup_handler_t const * + + + Get handler of standard or custom fixup. + + + @param type (C++: fixup_type_t) + +Help on function get_fixup_value in module ida_fixup: + +get_fixup_value(*args) + get_fixup_value(ea, type) -> uval_t + + + Get the operand value. This function get fixup bytes from data or an + instruction at `ea' and convert them to the operand value (maybe + partially). It is opposite in meaning to the 'patch_fixup_value()' . + For example, FIXUP_HI8 read a byte at 'patch_fixup_value()' `ea' and + shifts it left by 8 bits, or AArch64's custom fixup BRANCH26 get low + 26 bits of the insn at `ea' and shifts it left by 2 bits. This + function is mainly used to get a relocation addend. + 'fixup_handler_t::size' + + @param ea: address to get fixup bytes from, the size of the fixup + bytes depends on the fixup type. (C++: ea_t) + @param type (C++: fixup_type_t) + +Help on function get_fixups in module ida_fixup: + +get_fixups(*args) + get_fixups(out, ea, size) -> bool + +Help on function get_next_fixup_ea in module ida_fixup: + +get_next_fixup_ea(*args) + get_next_fixup_ea(ea) -> ea_t + + + Find next address with fixup information + + @param ea: current address (C++: ea_t) + @return: the next address with fixup information, or BADADDR + +Help on function get_prev_fixup_ea in module ida_fixup: + +get_prev_fixup_ea(*args) + get_prev_fixup_ea(ea) -> ea_t + + + Find previous address with fixup information + + @param ea: current address (C++: ea_t) + @return: the previous address with fixup information, or BADADDR + +Help on function is_fixup_custom in module ida_fixup: + +is_fixup_custom(*args) + is_fixup_custom(type) -> bool + + + Is fixup processed by processor module? + + + @param type (C++: fixup_type_t) + +Help on function patch_fixup_value in module ida_fixup: + +patch_fixup_value(*args) + patch_fixup_value(ea, fd) -> bool + + + Patch the fixup bytes. This function updates data or an instruction at + `ea' to the fixup bytes. For example, FIXUP_HI8 updates a byte at `ea' + to the high byte of `fd->off' , or AArch64's custom fixup BRANCH26 + updates low 26 bits of the insn at `ea' to the value of `fd->off' + shifted right by 2. 'fixup_handler_t::size' + + @param ea: address where data are changed, the size of the changed + data depends on the fixup type. (C++: ea_t) + @param fd (C++: const fixup_data_t &) + +Help on function set_fixup in module ida_fixup: + +set_fixup(*args) + set_fixup(source, fd) + + + Set fixup information. You should fill 'fixup_data_t' and call this + function and the kernel will remember information in the database. + + @param source: the fixup source address, i.e. the address modified by + the fixup (C++: ea_t) + @param fd: fixup data (C++: const fixup_data_t &) + +=== ida_fixup EPYDOC INJECTIONS === +ida_fixup.FIXUPF_CREATED +""" +fixup was not present in the input file +""" + +ida_fixup.FIXUPF_EXTDEF +""" +target is a location (otherwise - segment). Use this bit if the target +is a symbol rather than an offset from the beginning of a segment. +""" + +ida_fixup.FIXUPF_LOADER_MASK +""" +additional flags. The bits from this mask are not stored in the +database and can be used by the loader at its discretion. +""" + +ida_fixup.FIXUPF_REL +""" +fixup is relative to the linear address `base' . Otherwise fixup is +relative to the start of the segment with `sel' selector. +""" + +ida_fixup.FIXUPF_UNUSED +""" +fixup is ignored by IDAdisallows the kernel to convert operandsthis +fixup is not used during output +""" +=== ida_fixup EPYDOC INJECTIONS END === +Help on class qfile_t in module ida_fpro: + +class qfile_t(__builtin__.object) + | Proxy of C++ qfile_t class. + | + | + | A helper class to work with FILE related functions. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, rhs) -> qfile_t + | __init__(self, pycapsule=None) -> qfile_t + | + | + | Closes the file + | + | __repr__ = _swig_repr(self) + | + | close(self, *args) + | close(self) + | + | filename(self, *args) + | filename(self) -> PyObject * + | + | flush(self, *args) + | flush(self) -> int + | + | + | Reads a single byte from the file. Returns None if EOF or the read byte + | + | get_char(self, *args) + | get_char(self) -> PyObject * + | + | get_fp(self, *args) + | get_fp(self) -> FILE * + | + | gets(self, *args) + | gets(self, size) -> PyObject * + | + | + | Reads a line from the input file. Returns the read line or None + | + | open(self, *args) + | open(self, filename, mode) -> bool + | + | + | Opens a file + | + | @param filename: the file name + | @param mode: The mode string, ala fopen() style + | @return: Boolean + | + | opened(self, *args) + | opened(self) -> bool + | + | + | Checks if the file is opened or not + | + | put_char(self, *args) + | put_char(self, chr) -> int + | + | puts(self, *args) + | puts(self, str) -> int + | + | read(self, *args) + | read(self, size) -> PyObject * + | + | + | Reads from the file. Returns the buffer or None + | + | readbytes(self, *args) + | readbytes(self, size, big_endian) -> PyObject * + | + | + | Similar to read() but it respect the endianness + | + | seek(self, *args) + | seek(self, offset, whence=SEEK_SET) -> int + | + | + | Set input source position + | @return: the new position (not 0 as fseek!) + | + | size(self, *args) + | size(self) -> int64 + | + | tell(self, *args) + | tell(self) -> int64 + | + | + | Returns the current position + | + | write(self, *args) + | write(self, py_buf) -> int + | + | + | Writes to the file. Returns 0 or the number of bytes written + | + | writebytes(self, *args) + | writebytes(self, py_buf, big_endian) -> int + | + | + | Similar to write() but it respect the endianness + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | from_capsule(*args) + | from_capsule(pycapsule) -> qfile_t + | + | from_fp(*args) + | from_fp(fp) -> qfile_t + | + | tmpfile(*args) + | tmpfile() -> qfile_t + | + | + | A static method to construct an instance using a temporary file + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __idc_cvt_id__ + | qfile_t___idc_cvt_id___get(self) -> int + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qfile_t(self) + +Help on function qfile_t_from_capsule in module ida_fpro: + +qfile_t_from_capsule(*args) + qfile_t_from_capsule(pycapsule) -> qfile_t + +Help on function qfile_t_from_fp in module ida_fpro: + +qfile_t_from_fp(*args) + qfile_t_from_fp(fp) -> qfile_t + +Help on function qfile_t_tmpfile in module ida_fpro: + +qfile_t_tmpfile(*args) + qfile_t_tmpfile() -> qfile_t + +Help on function add_auto_stkpnt in module ida_frame: + +add_auto_stkpnt(*args) + add_auto_stkpnt(pfn, ea, delta) -> bool + + + Add automatic SP register change point. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address where SP changes. usually this is the end of + the instruction which modifies the stack pointer + (\cmd{ea}+\cmd{size}) (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function add_frame in module ida_frame: + +add_frame(*args) + add_frame(pfn, frsize, frregs, argsize) -> bool + + + Add function frame. + + @param pfn: pointer to function structure (C++: func_t *) + @param frsize: size of function local variables (C++: sval_t) + @param frregs: size of saved registers (C++: ushort) + @param argsize: size of function arguments range which will be purged + upon return. this parameter is used for __stdcall and + __pascal calling conventions. for other calling + conventions please pass 0. (C++: asize_t) + +Help on function add_regvar in module ida_frame: + +add_regvar(*args) + add_regvar(pfn, ea1, ea2, canon, user, cmt) -> int + + + Define a register variable. + + @param pfn: function in which the definition will be created (C++: + func_t *) + @param ea1: range of addresses within the function where the + definition will be used (C++: ea_t) + @param ea2: range of addresses within the function where the + definition will be used (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @param user: user-defined name for the register (C++: const char *) + @param cmt: comment for the definition (C++: const char *) + @return: Register variable error codes + +Help on function add_user_stkpnt in module ida_frame: + +add_user_stkpnt(*args) + add_user_stkpnt(ea, delta) -> bool + + + Add user-defined SP register change point. + + @param ea: linear address where SP changes (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function build_stkvar_name in module ida_frame: + +build_stkvar_name(*args) + build_stkvar_name(pfn, v) -> str + + + Build automatic stack variable name. + + @param pfn: pointer to function (can't be NULL!) (C++: const func_t + *) + @param v: value of variable offset (C++: sval_t) + @return: length of stack variable name or -1 + +Help on function build_stkvar_xrefs in module ida_frame: + +build_stkvar_xrefs(*args) + build_stkvar_xrefs(out, pfn, mptr) + + + Fill 'out' with a list of all the xrefs made from function 'pfn', to + the argument or variable 'mptr' in 'pfn's stack frame. + + @param out: the list of xrefs to fill. (C++: xreflist_t *) + @param pfn: the function to scan. (C++: func_t *) + @param mptr: the argument/variable in pfn's stack frame. (C++: const + member_t *) + +Help on function calc_stkvar_struc_offset in module ida_frame: + +calc_stkvar_struc_offset(*args) + calc_stkvar_struc_offset(pfn, insn, n) -> ea_t + + + Calculate offset of stack variable in the frame structure. + + @param pfn: pointer to function (can't be NULL!) (C++: func_t *) + @param insn: the instruction (C++: const insn_t &) + @param n: number of operand: (0.. UA_MAXOP -1) -1 if error, return + BADADDR (C++: int) + @return: BADADDR if some error (issue a warning if stack frame is + bad) + +Help on function define_stkvar in module ida_frame: + +define_stkvar(*args) + define_stkvar(pfn, name, off, flags, ti, nbytes) -> bool + + + Define/redefine a stack variable. + + @param pfn: pointer to function (C++: func_t *) + @param name: variable name, NULL means autogenerate a name (C++: const + char *) + @param off: offset of the stack variable in the frame. negative values + denote local variables, positive - function arguments. + (C++: sval_t) + @param flags: variable type flags ( byte_flag() for a byte variable, + for example) (C++: flags_t) + @param ti: additional type information (like offsets, structs, etc) + (C++: const opinfo_t *) + @param nbytes: number of bytes occupied by the variable (C++: asize_t) + @return: success + +Help on function del_frame in module ida_frame: + +del_frame(*args) + del_frame(pfn) -> bool + + + Delete a function frame. + + @param pfn: pointer to function structure (C++: func_t *) + @return: success + +Help on function del_regvar in module ida_frame: + +del_regvar(*args) + del_regvar(pfn, ea1, ea2, canon) -> int + + + Delete a register variable definition. + + @param pfn: function in question (C++: func_t *) + @param ea1: range of addresses within the function where the + definition holds (C++: ea_t) + @param ea2: range of addresses within the function where the + definition holds (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @return: Register variable error codes + +Help on function del_stkpnt in module ida_frame: + +del_stkpnt(*args) + del_stkpnt(pfn, ea) -> bool + + + Delete SP register change point. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: success + +Help on function delete_unreferenced_stkvars in module ida_frame: + +delete_unreferenced_stkvars(*args) + delete_unreferenced_stkvars(pfn) -> int + +Help on function delete_wrong_stkvar_ops in module ida_frame: + +delete_wrong_stkvar_ops(*args) + delete_wrong_stkvar_ops(pfn) -> int + +Help on function find_regvar in module ida_frame: + +find_regvar(*args) + find_regvar(pfn, ea1, ea2, canon, user) -> regvar_t + find_regvar(pfn, ea, canon) -> regvar_t + + + Find a register variable definition (powerful version). One of 'canon' + and 'user' should be NULL. If both 'canon' and 'user' are NULL it + returns the first regvar definition in the range. + + @param pfn: function in question (C++: func_t *) + @param ea1: range of addresses to search. ea1==BADADDR means the + entire function (C++: ea_t) + @param ea2: range of addresses to search. ea1==BADADDR means the + entire function (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @param user: user-defined name for the register (C++: const char *) + @return: NULL-not found, otherwise ptr to regvar_t + +Help on function frame_off_args in module ida_frame: + +frame_off_args(*args) + frame_off_args(pfn) -> ea_t + + + Get starting address of arguments section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_lvars in module ida_frame: + +frame_off_lvars(*args) + frame_off_lvars(pfn) -> ea_t + + + Get start address of local variables section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_retaddr in module ida_frame: + +frame_off_retaddr(*args) + frame_off_retaddr(pfn) -> ea_t + + + Get starting address of return address section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_savregs in module ida_frame: + +frame_off_savregs(*args) + frame_off_savregs(pfn) -> ea_t + + + Get starting address of saved registers section. + + + @param pfn (C++: const func_t *) + +Help on function get_effective_spd in module ida_frame: + +get_effective_spd(*args) + get_effective_spd(pfn, ea) -> sval_t + + + Get effective difference between the initial and current values of + ESP. This function returns the sp-diff used by the instruction. The + difference between 'get_spd()' and 'get_effective_spd()' is present + only for instructions like "pop [esp+N]": they modify sp and use the + modified value. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: 0 or the difference, usually a negative number + +Help on function get_frame in module ida_frame: + +get_frame(*args) + get_frame(pfn) -> struc_t + get_frame(ea) -> struc_t * + + + Get pointer to function frame. + + @param pfn: pointer to function structure (C++: const func_t *) + +Help on function get_frame_part in module ida_frame: + +get_frame_part(*args) + get_frame_part(range, pfn, part) + + + Get offsets of the frame part in the frame. + + @param range: pointer to the output buffer with the frame part + start/end(exclusive) offsets, can't be NULL (C++: + range_t *) + @param pfn: pointer to function structure, can't be NULL (C++: const + func_t *) + @param part: frame part (C++: frame_part_t) + +Help on function get_frame_retsize in module ida_frame: + +get_frame_retsize(*args) + get_frame_retsize(pfn) -> int + + + Get size of function return address. + + @param pfn: pointer to function structure, can't be NULL (C++: const + func_t *) + +Help on function get_frame_size in module ida_frame: + +get_frame_size(*args) + get_frame_size(pfn) -> asize_t + + + Get full size of a function frame. This function takes into account + size of local variables + size of saved registers + size of return + address + number of purged bytes. The purged bytes correspond to the + arguments of the functions with __stdcall and __fastcall calling + conventions. + + @param pfn: pointer to function structure, may be NULL (C++: const + func_t *) + @return: size of frame in bytes or zero + +Help on function get_func_by_frame in module ida_frame: + +get_func_by_frame(*args) + get_func_by_frame(frame_id) -> ea_t + + + Get function by its frame id.this function works only with databases + created by IDA > 5.6 + + @param frame_id: id of the function frame (C++: tid_t) + @return: start address of the function or BADADDR + +Help on function get_min_spd_ea in module ida_frame: + +get_min_spd_ea(*args) + get_min_spd_ea(pfn) -> ea_t + +Help on function get_sp_delta in module ida_frame: + +get_sp_delta(*args) + get_sp_delta(pfn, ea) -> sval_t + + + Get modification of SP made at the specified location + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: 0 if the specified location doesn't contain a SP change + point. otherwise return delta of SP modification. + +Help on function get_spd in module ida_frame: + +get_spd(*args) + get_spd(pfn, ea) -> sval_t + + + Get difference between the initial and current values of ESP. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address of an instruction (C++: ea_t) + @return: 0 or the difference, usually a negative number. returns the + sp-diff before executing the instruction. + +Help on function get_stkvar in module ida_frame: + +get_stkvar(*args) + get_stkvar(insn, op, v) -> PyObject * + + + Get pointer to stack variable + @param op: reference to instruction operand + @param v: immediate value in the operand (usually op.addr) + @return: + - None on failure + - tuple(member_t, actval) + where actval: actual value used to fetch stack variable + +Help on function has_regvar in module ida_frame: + +has_regvar(*args) + has_regvar(pfn, ea) -> bool + + + Is there a register variable definition? + + @param pfn: function in question (C++: func_t *) + @param ea: current address (C++: ea_t) + +Help on function is_funcarg_off in module ida_frame: + +is_funcarg_off(*args) + is_funcarg_off(pfn, frameoff) -> bool + + + Does the given offset lie within the arguments section? + + + @param pfn (C++: const func_t *) + @param frameoff (C++: uval_t) + +Help on class llabel_t in module ida_frame: + +class llabel_t(__builtin__.object) + | Proxy of C++ llabel_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> llabel_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | llabel_t_ea_get(self) -> ea_t + | + | name + | llabel_t_name_get(self) -> char * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_llabel_t(self) + +Help on function lvar_off in module ida_frame: + +lvar_off(*args) + lvar_off(pfn, frameoff) -> sval_t + + + Does the given offset lie within the local variables section? + + + @param pfn (C++: const func_t *) + @param frameoff (C++: uval_t) + +Help on function recalc_spd in module ida_frame: + +recalc_spd(*args) + recalc_spd(cur_ea) -> bool + + + Recalculate SP delta for an instruction that stops execution. The next + instruction is not reached from the current instruction. We need to + recalculate SP for the next instruction.This function will create a + new automatic SP register change point if necessary. It should be + called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the + current instruction doesn't pass the execution flow to the next + instruction. + + @param cur_ea: linear address of the current instruction (C++: ea_t) + +Help on class regvar_t in module ida_frame: + +class regvar_t(ida_range.range_t) + | Proxy of C++ regvar_t class. + | + | Method resolution order: + | regvar_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regvar_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | canon + | regvar_t_canon_get(self) -> char * + | + | cmt + | regvar_t_cmt_get(self) -> char * + | + | thisown + | The membership flag + | + | user + | regvar_t_user_get(self) -> char * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regvar_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on function rename_regvar in module ida_frame: + +rename_regvar(*args) + rename_regvar(pfn, v, user) -> int + + + Rename a register variable. + + @param pfn: function in question (C++: func_t *) + @param v: variable to rename (C++: regvar_t *) + @param user: new user-defined name for the register (C++: const char + *) + @return: Register variable error codes + +Help on function set_frame_size in module ida_frame: + +set_frame_size(*args) + set_frame_size(pfn, frsize, frregs, argsize) -> bool + + + Set size of function frame. Note: The returned size may not include + all stack arguments. It does so only for __stdcall and __fastcall + calling conventions. To get the entire frame size for all cases use + get_struc_size(get_frame(pfn)). + + @param pfn: pointer to function structure (C++: func_t *) + @param frsize: size of function local variables (C++: asize_t) + @param frregs: size of saved registers (C++: ushort) + @param argsize: size of function arguments that will be purged from + the stack upon return (C++: asize_t) + @return: success + +Help on function set_purged in module ida_frame: + +set_purged(*args) + set_purged(ea, nbytes, override_old_value) -> bool + + + Set the number of purged bytes for a function or data item (funcptr). + This function will update the database and plan to reanalyze items + referencing the specified address. It works only for processors with + 'PR_PURGING' bit in 16 and 32 bit modes. + + @param ea: address of the function of item (C++: ea_t) + @param nbytes: number of purged bytes (C++: int) + @param override_old_value: may overwrite old information about purged + bytes (C++: bool) + @return: success + +Help on function set_regvar_cmt in module ida_frame: + +set_regvar_cmt(*args) + set_regvar_cmt(pfn, v, cmt) -> int + + + Set comment for a register variable. + + @param pfn: function in question (C++: func_t *) + @param v: variable to rename (C++: regvar_t *) + @param cmt: new comment (C++: const char *) + @return: Register variable error codes + +Help on function soff_to_fpoff in module ida_frame: + +soff_to_fpoff(*args) + soff_to_fpoff(pfn, soff) -> sval_t + + + Convert struct offsets into fp-relative offsets. This function + converts the offsets inside the 'struc_t' object into the frame + pointer offsets (for example, EBP-relative). + + @param pfn (C++: func_t *) + @param soff (C++: uval_t) + +Help on class stkpnt_t in module ida_frame: + +class stkpnt_t(__builtin__.object) + | Proxy of C++ stkpnt_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> stkpnt_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | stkpnt_t_ea_get(self) -> ea_t + | + | spd + | stkpnt_t_spd_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_stkpnt_t(self) + +Help on class stkpnts_t in module ida_frame: + +class stkpnts_t(__builtin__.object) + | Proxy of C++ stkpnts_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> stkpnts_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_stkpnts_t(self) + +Help on function update_fpd in module ida_frame: + +update_fpd(*args) + update_fpd(pfn, fpd) -> bool + + + Update frame pointer delta. + + @param pfn: pointer to function structure (C++: func_t *) + @param fpd: new fpd value. cannot be bigger than the local variable + range size. (C++: asize_t) + @return: success + +Help on class xreflist_entry_t in module ida_frame: + +class xreflist_entry_t(__builtin__.object) + | Proxy of C++ xreflist_entry_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> xreflist_entry_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | xreflist_entry_t_ea_get(self) -> ea_t + | + | opnum + | xreflist_entry_t_opnum_get(self) -> uchar + | + | thisown + | The membership flag + | + | type + | xreflist_entry_t_type_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_xreflist_entry_t(self) + +Help on class xreflist_t in module ida_frame: + +class xreflist_t(__builtin__.object) + | Proxy of C++ qvector< xreflist_entry_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> xreflist_entry_t + | + | __init__(self, *args) + | __init__(self) -> xreflist_t + | __init__(self, x) -> xreflist_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> xreflist_entry_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> xreflist_entry_t + | begin(self) -> xreflist_entry_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> xreflist_entry_t + | end(self) -> xreflist_entry_t + | + | erase(self, *args) + | erase(self, it) -> xreflist_entry_t + | erase(self, first, last) -> xreflist_entry_t + | + | extract(self, *args) + | extract(self) -> xreflist_entry_t + | + | find(self, *args) + | find(self, x) -> xreflist_entry_t + | find(self, x) -> xreflist_entry_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=xreflist_entry_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> xreflist_entry_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> xreflist_entry_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_xreflist_t(self) + +=== ida_frame EPYDOC INJECTIONS === +ida_frame.REGVAR_ERROR_ARG +""" +function arguments are bad +""" + +ida_frame.REGVAR_ERROR_NAME +""" +the provided name(s) can't be accepted +""" + +ida_frame.REGVAR_ERROR_OK +""" +all ok +""" + +ida_frame.REGVAR_ERROR_RANGE +""" +the definition range is bad +""" + +ida_frame.STKVAR_VALID_SIZE +""" +x.dtyp contains correct variable type (for insns like 'lea' this bit +must be off) in general, dr_O references do not allow to determine the +variable size +""" +=== ida_frame EPYDOC INJECTIONS END === +Help on function add_func in module ida_funcs: + +add_func(*args) + add_func(ea1, ea2=BADADDR) -> bool + + + Add a new function. If the function end address is 'BADADDR' , then + IDA will try to determine the function bounds by calling + find_func_bounds(..., 'FIND_FUNC_DEFINE' ). + + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @return: success + +Help on function add_func_ex in module ida_funcs: + +add_func_ex(*args) + add_func_ex(pfn) -> bool + + + Add a new function. If the fn->end_ea is 'BADADDR' , then IDA will try + to determine the function bounds by calling find_func_bounds(..., + 'FIND_FUNC_DEFINE' ). + + @param pfn: ptr to filled function structure (C++: func_t *) + @return: success + +Help on function add_regarg in module ida_funcs: + +add_regarg(*args) + add_regarg(pfn, reg, tif, name) + +Help on function append_func_tail in module ida_funcs: + +append_func_tail(*args) + append_func_tail(pfn, ea1, ea2) -> bool + + + Append a new tail chunk to the function definition. If the tail + already exists, then it will simply be added to the function tail list + Otherwise a new tail will be created and its owner will be set to be + our function If a new tail cannot be created, then this function will + fail. + + @param pfn (C++: func_t *) + @param ea1: start of the tail. If a tail already exists at the + specified address it must start at 'ea1' (C++: ea_t) + @param ea2: end of the tail. If a tail already exists at the specified + address it must end at 'ea2'. If specified as BADADDR, IDA + will determine the end address itself. (C++: ea_t) + +Help on function apply_idasgn_to in module ida_funcs: + +apply_idasgn_to(*args) + apply_idasgn_to(signame, ea, is_startup) -> int + + + Apply a signature file to the specified address. + + @param signame: short name of signature file (the file name without + path) (C++: const char *) + @param ea: address to apply the signature (C++: ea_t) + @param is_startup: if set, then the signature is treated as a startup + one for startup signature ida doesn't rename the + first function of the applied module. (C++: bool) + @return: Library function codes + +Help on function apply_startup_sig in module ida_funcs: + +apply_startup_sig(*args) + apply_startup_sig(ea, startup) -> bool + + + Apply a startup signature file to the specified address. + + @param ea: address to apply the signature to; usually \inf{start_ea} + (C++: ea_t) + @param startup: the name of the signature file without path and + extension (C++: const char *) + @return: true if successfully applied the signature + +Help on function calc_func_size in module ida_funcs: + +calc_func_size(*args) + calc_func_size(pfn) -> asize_t + + + Calculate function size. This function takes into account all + fragments of the function. + + @param pfn: ptr to function structure (C++: func_t *) + +Help on function calc_idasgn_state in module ida_funcs: + +calc_idasgn_state(*args) + calc_idasgn_state(n) -> int + + + Get state of a signature in the list of planned signatures + + @param n: number of signature in the list (0.. get_idasgn_qty() -1) + (C++: int) + @return: state of signature or IDASGN_BADARG + +Help on function calc_thunk_func_target in module ida_funcs: + +calc_thunk_func_target(*args) + calc_thunk_func_target(pfn) -> ea_t + + + Calculate target of a thunk function. + + @param pfn: pointer to function (may not be NULL) (C++: func_t *) + @return: the target function or BADADDR + +Help on function del_func in module ida_funcs: + +del_func(*args) + del_func(ea) -> bool + + + Delete a function. + + @param ea: any address in the function entry chunk (C++: ea_t) + @return: success + +Help on function del_idasgn in module ida_funcs: + +del_idasgn(*args) + del_idasgn(n) -> int + + + Remove signature from the list of planned signatures. + + @param n: number of signature in the list (0.. get_idasgn_qty() -1) + (C++: int) + @return: IDASGN_OK , IDASGN_BADARG , IDASGN_APPLIED + +Help on function f_any in module ida_funcs: + +f_any(*args) + f_any(arg1, arg2) -> bool + + + Helper function to accept any address. + +Help on function find_func_bounds in module ida_funcs: + +find_func_bounds(*args) + find_func_bounds(nfn, flags) -> int + + + Determine the boundaries of a new function. This function tries to + find the start and end addresses of a new function. It calls the + module with \ph{func_bounds} in order to fine tune the function + boundaries. + + @param nfn: structure to fill with information \ nfn->start_ea points + to the start address of the new function. (C++: func_t *) + @param flags: Find function bounds flags (C++: int) + @return: Find function bounds result codes + +Help on function func_contains in module ida_funcs: + +func_contains(*args) + func_contains(pfn, ea) -> bool + + + Does the given function contain the given address? + + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on function func_does_return in module ida_funcs: + +func_does_return(*args) + func_does_return(callee) -> bool + + + Does the function return?. To calculate the answer, 'FUNC_NORET' flag + and is_noret() are consulted The latter is required for imported + functions in the .idata section. Since in .idata we have only function + pointers but not functions, we have to introduce a special flag for + them. + + @param callee (C++: ea_t) + +Help on function func_item_iterator_decode_preceding_insn in module ida_funcs: + +func_item_iterator_decode_preceding_insn(*args) + func_item_iterator_decode_preceding_insn(fii, visited, p_farref, out) -> bool + +Help on function func_item_iterator_decode_prev_insn in module ida_funcs: + +func_item_iterator_decode_prev_insn(*args) + func_item_iterator_decode_prev_insn(fii, out) -> bool + +Help on function func_item_iterator_next in module ida_funcs: + +func_item_iterator_next(*args) + func_item_iterator_next(fii, testf, ud) -> bool + +Help on function func_item_iterator_prev in module ida_funcs: + +func_item_iterator_prev(*args) + func_item_iterator_prev(fii, testf, ud) -> bool + +Help on class func_item_iterator_t in module ida_funcs: + +class func_item_iterator_t(__builtin__.object) + | Proxy of C++ func_item_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_item_iterator_t + | __init__(self, pfn, _ea=BADADDR) -> func_item_iterator_t + | + | __next__(self, *args) + | __next__(self, func, ud) -> bool + | + | __repr__ = _swig_repr(self) + | + | chunk(self, *args) + | chunk(self) -> range_t + | + | current(self, *args) + | current(self) -> ea_t + | + | decode_preceding_insn(self, *args) + | decode_preceding_insn(self, visited, p_farref, out) -> bool + | + | decode_prev_insn(self, *args) + | decode_prev_insn(self, out) -> bool + | + | first(self, *args) + | first(self) -> bool + | + | last(self, *args) + | last(self) -> bool + | + | next = __next__(self, *args) + | + | next_addr(self, *args) + | next_addr(self) -> bool + | + | next_code(self, *args) + | next_code(self) -> bool + | + | next_data(self, *args) + | next_data(self) -> bool + | + | next_head(self, *args) + | next_head(self) -> bool + | + | next_not_tail(self, *args) + | next_not_tail(self) -> bool + | + | prev(self, *args) + | prev(self, func, ud) -> bool + | + | prev_addr(self, *args) + | prev_addr(self) -> bool + | + | prev_code(self, *args) + | prev_code(self) -> bool + | + | prev_data(self, *args) + | prev_data(self) -> bool + | + | prev_head(self, *args) + | prev_head(self) -> bool + | + | prev_not_tail(self, *args) + | prev_not_tail(self) -> bool + | + | set(self, *args) + | set(self, pfn, _ea=BADADDR) -> bool + | + | set_range(self, *args) + | set_range(self, ea1, ea2) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_item_iterator_t(self) + +Help on function func_parent_iterator_set in module ida_funcs: + +func_parent_iterator_set(*args) + func_parent_iterator_set(fpi, pfn) -> bool + +Help on class func_parent_iterator_t in module ida_funcs: + +class func_parent_iterator_t(__builtin__.object) + | Proxy of C++ func_parent_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_parent_iterator_t + | __init__(self, _fnt) -> func_parent_iterator_t + | + | __next__(self, *args) + | __next__(self) -> bool + | + | __repr__ = _swig_repr(self) + | + | first(self, *args) + | first(self) -> bool + | + | last(self, *args) + | last(self) -> bool + | + | next = __next__(self, *args) + | + | parent(self, *args) + | parent(self) -> ea_t + | + | prev(self, *args) + | prev(self) -> bool + | + | reset_fnt(self, *args) + | reset_fnt(self, _fnt) + | + | set(self, *args) + | set(self, _fnt) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_parent_iterator_t(self) + +Help on class func_t in module ida_funcs: + +class func_t(ida_range.range_t) + | Proxy of C++ func_t class. + | + | Method resolution order: + | func_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __get_points__(self, *args) + | __get_points__(self) -> stkpnt_array + | + | __get_regvars__(self, *args) + | __get_regvars__(self) -> regvar_array + | + | __get_tails__(self, *args) + | __get_tails__(self) -> range_array + | + | __init__(self, *args) + | __init__(self, start=0, end=0, f=0) -> func_t + | + | __repr__ = _swig_repr(self) + | + | analyzed_sp(self, *args) + | analyzed_sp(self) -> bool + | + | does_return(self, *args) + | does_return(self) -> bool + | + | is_far(self, *args) + | is_far(self) -> bool + | + | need_prolog_analysis(self, *args) + | need_prolog_analysis(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | argsize + | func_t_argsize_get(self) -> asize_t + | + | color + | func_t_color_get(self) -> bgcolor_t + | + | flags + | func_t_flags_get(self) -> uint64 + | + | fpd + | func_t_fpd_get(self) -> asize_t + | + | frame + | func_t_frame_get(self) -> uval_t + | + | frregs + | func_t_frregs_get(self) -> ushort + | + | frsize + | func_t_frsize_get(self) -> asize_t + | + | llabelqty + | func_t_llabelqty_get(self) -> int + | + | llabels + | func_t_llabels_get(self) -> llabel_t * + | + | owner + | func_t_owner_get(self) -> ea_t + | + | pntqty + | func_t_pntqty_get(self) -> uint32 + | + | points + | __get_points__(self) -> stkpnt_array + | + | referers + | func_t_referers_get(self) -> ea_t * + | + | refqty + | func_t_refqty_get(self) -> int + | + | regargqty + | func_t_regargqty_get(self) -> int + | + | regargs + | func_t_regargs_get(self) -> regarg_t + | + | regvarqty + | func_t_regvarqty_get(self) -> int + | + | regvars + | __get_regvars__(self) -> regvar_array + | + | tailqty + | func_t_tailqty_get(self) -> int + | + | tails + | __get_tails__(self) -> range_array + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on function func_t__from_ptrval__ in module ida_funcs: + +func_t__from_ptrval__(*args) + func_t__from_ptrval__(ptrval) -> func_t + +Help on function func_tail_iterator_set in module ida_funcs: + +func_tail_iterator_set(*args) + func_tail_iterator_set(fti, pfn, ea) -> bool + +Help on function func_tail_iterator_set_ea in module ida_funcs: + +func_tail_iterator_set_ea(*args) + func_tail_iterator_set_ea(fti, ea) -> bool + +Help on class func_tail_iterator_t in module ida_funcs: + +class func_tail_iterator_t(__builtin__.object) + | Proxy of C++ func_tail_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_tail_iterator_t + | __init__(self, _pfn, ea=BADADDR) -> func_tail_iterator_t + | + | __next__(self, *args) + | __next__(self) -> bool + | + | __repr__ = _swig_repr(self) + | + | chunk(self, *args) + | chunk(self) -> range_t + | + | first(self, *args) + | first(self) -> bool + | + | last(self, *args) + | last(self) -> bool + | + | main(self, *args) + | main(self) -> bool + | + | next = __next__(self, *args) + | + | prev(self, *args) + | prev(self) -> bool + | + | set(self, *args) + | set(self, _pfn, ea=BADADDR) -> bool + | + | set_ea(self, *args) + | set_ea(self, ea) -> bool + | + | set_range(self, *args) + | set_range(self, ea1, ea2) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_tail_iterator_t(self) + +Help on function get_current_idasgn in module ida_funcs: + +get_current_idasgn(*args) + get_current_idasgn() -> int + + + Get number of the the current signature. + + @return: 0..n-1 + +Help on function get_fchunk in module ida_funcs: + +get_fchunk(*args) + get_fchunk(ea) -> func_t + + + Get pointer to function chunk structure by address. + + @param ea: any address in a function chunk (C++: ea_t) + @return: ptr to a function chunk or NULL. This function may return a + function entry as well as a function tail. + +Help on function get_fchunk_num in module ida_funcs: + +get_fchunk_num(*args) + get_fchunk_num(ea) -> int + + + Get ordinal number of a function chunk in the global list of function + chunks. + + @param ea: any address in the function chunk (C++: ea_t) + @return: number of function chunk (0.. get_fchunk_qty() -1). -1 means + 'no function chunk at the specified address'. + +Help on function get_fchunk_qty in module ida_funcs: + +get_fchunk_qty(*args) + get_fchunk_qty() -> size_t + + + Get total number of function chunks in the program. + +Help on function get_fchunk_referer in module ida_funcs: + +get_fchunk_referer(*args) + get_fchunk_referer(ea, idx) -> ea_t + +Help on function get_func in module ida_funcs: + +get_func(*args) + get_func(ea) -> func_t + + + Get pointer to function structure by address. + + @param ea: any address in a function (C++: ea_t) + @return: ptr to a function or NULL. This function returns a function + entry chunk. + +Help on function get_func_bitness in module ida_funcs: + +get_func_bitness(*args) + get_func_bitness(pfn) -> int + + + Get function bitness (which is equal to the function segment bitness). + pfn==NULL => returns 0 + + @param pfn (C++: const func_t *) + +Help on function get_func_bits in module ida_funcs: + +get_func_bits(*args) + get_func_bits(pfn) -> int + + + Get number of bits in the function addressing. + + + @param pfn (C++: const func_t *) + +Help on function get_func_bytes in module ida_funcs: + +get_func_bytes(*args) + get_func_bytes(pfn) -> int + + + Get number of bytes in the function addressing. + + + @param pfn (C++: const func_t *) + +Help on function get_func_chunknum in module ida_funcs: + +get_func_chunknum(*args) + get_func_chunknum(pfn, ea) -> int + + + Get the containing tail chunk of 'ea'. + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on function get_func_cmt in module ida_funcs: + +get_func_cmt(*args) + get_func_cmt(pfn, repeatable) -> str + + + Get function comment. + + @param pfn: ptr to function structure (C++: const func_t *) + @param repeatable: get repeatable comment? (C++: bool) + @return: size of comment or -1 In fact this function works with + function chunks too. + +Help on function get_func_name in module ida_funcs: + +get_func_name(*args) + get_func_name(ea) -> str + + + Get function name. + + @param ea: any address in the function (C++: ea_t) + @return: length of the function name + +Help on function get_func_num in module ida_funcs: + +get_func_num(*args) + get_func_num(ea) -> int + + + Get ordinal number of a function. + + @param ea: any address in the function (C++: ea_t) + @return: number of function (0.. get_func_qty() -1). -1 means 'no + function at the specified address'. + +Help on function get_func_qty in module ida_funcs: + +get_func_qty(*args) + get_func_qty() -> size_t + + + Get total number of functions in the program. + +Help on function get_func_ranges in module ida_funcs: + +get_func_ranges(*args) + get_func_ranges(ranges, pfn) -> ea_t + + + Get function ranges. + + @param ranges: buffer to receive the range info (C++: rangeset_t *) + @param pfn: ptr to function structure (C++: func_t *) + @return: end address of the last function range (BADADDR-error) + +Help on function get_idasgn_desc in module ida_funcs: + +get_idasgn_desc(*args) + get_idasgn_desc(n) -> PyObject * + + + Get information about a signature in the list. + It returns: (name of signature, names of optional libraries) + + See also: get_idasgn_desc_with_matches + + @param n: number of signature in the list (0..get_idasgn_qty()-1) + @return: None on failure or tuple(signame, optlibs) + +Help on function get_idasgn_desc_with_matches in module ida_funcs: + +get_idasgn_desc_with_matches(*args) + get_idasgn_desc_with_matches(n) -> PyObject * + + + Get information about a signature in the list. + It returns: (name of signature, names of optional libraries, number of matches) + + @param n: number of signature in the list (0..get_idasgn_qty()-1) + @return: None on failure or tuple(signame, optlibs, nmatches) + +Help on function get_idasgn_qty in module ida_funcs: + +get_idasgn_qty(*args) + get_idasgn_qty() -> int + + + Get number of signatures in the list of planned and applied + signatures. + + @return: 0..n + +Help on function get_idasgn_title in module ida_funcs: + +get_idasgn_title(*args) + get_idasgn_title(name) -> str + + + Get full description of the signature by its short name. + + @param name: short name of a signature (C++: const char *) + @return: size of signature description or -1 + +Help on function get_next_fchunk in module ida_funcs: + +get_next_fchunk(*args) + get_next_fchunk(ea) -> func_t + + + Get pointer to the next function chunk in the global list. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function chunk or NULL if next function chunk doesn't + exist + +Help on function get_next_func in module ida_funcs: + +get_next_func(*args) + get_next_func(ea) -> func_t + + + Get pointer to the next function. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function or NULL if next function doesn't exist + +Help on function get_next_func_addr in module ida_funcs: + +get_next_func_addr(*args) + get_next_func_addr(pfn, ea) -> ea_t + +Help on function get_prev_fchunk in module ida_funcs: + +get_prev_fchunk(*args) + get_prev_fchunk(ea) -> func_t + + + Get pointer to the previous function chunk in the global list. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function chunk or NULL if previous function chunk + doesn't exist + +Help on function get_prev_func in module ida_funcs: + +get_prev_func(*args) + get_prev_func(ea) -> func_t + + + Get pointer to the previous function. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function or NULL if previous function doesn't exist + +Help on function get_prev_func_addr in module ida_funcs: + +get_prev_func_addr(*args) + get_prev_func_addr(pfn, ea) -> ea_t + +Help on function getn_fchunk in module ida_funcs: + +getn_fchunk(*args) + getn_fchunk(n) -> func_t + + + Get pointer to function chunk structure by number. + + @param n: number of function chunk, is in range 0.. get_fchunk_qty() + -1 (C++: int) + @return: ptr to a function chunk or NULL. This function may return a + function entry as well as a function tail. + +Help on function getn_func in module ida_funcs: + +getn_func(*args) + getn_func(n) -> func_t + + + Get pointer to function structure by number. + + @param n: number of function, is in range 0.. get_func_qty() -1 (C++: + size_t) + @return: ptr to a function or NULL. This function returns a function + entry chunk. + +Help on function is_finally_visible_func in module ida_funcs: + +is_finally_visible_func(*args) + is_finally_visible_func(pfn) -> bool + + + Is the function visible (event after considering 'SCF_SHHID_FUNC' )? + + + @param pfn (C++: func_t *) + +Help on function is_func_entry in module ida_funcs: + +is_func_entry(*args) + is_func_entry(pfn) -> bool + + + Does function describe a function entry chunk? + + + @param pfn (C++: const func_t *) + +Help on function is_func_locked in module ida_funcs: + +is_func_locked(*args) + is_func_locked(pfn) -> bool + + + Is the function pointer locked? + + + @param pfn (C++: const func_t *) + +Help on function is_func_tail in module ida_funcs: + +is_func_tail(*args) + is_func_tail(pfn) -> bool + + + Does function describe a function tail chunk? + + + @param pfn (C++: const func_t *) + +Help on function is_same_func in module ida_funcs: + +is_same_func(*args) + is_same_func(ea1, ea2) -> bool + + + Do two addresses belong to the same function? + + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on function is_visible_func in module ida_funcs: + +is_visible_func(*args) + is_visible_func(pfn) -> bool + + + Is the function visible (not hidden)? + + + @param pfn (C++: func_t *) + +Help on class lock_func in module ida_funcs: + +class lock_func(__builtin__.object) + | Proxy of C++ lock_func class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _pfn) -> lock_func + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lock_func(self) + +Help on function lock_func_range in module ida_funcs: + +lock_func_range(*args) + lock_func_range(pfn, lock) + + + Lock function pointer Locked pointers are guaranteed to remain valid + until they are unlocked. Ranges with locked pointers cannot be deleted + or moved. + + @param pfn (C++: const func_t *) + @param lock (C++: bool) + +Help on function plan_to_apply_idasgn in module ida_funcs: + +plan_to_apply_idasgn(*args) + plan_to_apply_idasgn(fname) -> int + + + Add a signature file to the list of planned signature files. + + @param fname: file name. should not contain directory part. (C++: + const char *) + @return: 0 if failed, otherwise number of planned (and applied) + signatures + +Help on class range_array in module ida_funcs: + +class range_array(__builtin__.object) + | Proxy of C++ dynamic_wrapped_array_t< range_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __init__(self, *args) + | __init__(self, _data, _count) -> range_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | range_array_count_get(self) -> size_t + | + | data + | range_array_data_get(self) -> range_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_range_array(self) + +Help on function read_regargs in module ida_funcs: + +read_regargs(*args) + read_regargs(pfn) + +Help on function reanalyze_function in module ida_funcs: + +reanalyze_function(*args) + reanalyze_function(pfn, ea1=0, ea2=BADADDR, analyze_parents=False) + + + Reanalyze a function. This function plans to analyzes all chunks of + the given function. Optional parameters (ea1, ea2) may be used to + narrow the analyzed range. + + @param pfn: pointer to a function (C++: func_t *) + @param ea1: start of the range to analyze (C++: ea_t) + @param ea2: end of range to analyze (C++: ea_t) + @param analyze_parents: meaningful only if pfn points to a function + tail. if true, all tail parents will be + reanalyzed. if false, only the given tail will + be reanalyzed. (C++: bool) + +Help on function reanalyze_noret_flag in module ida_funcs: + +reanalyze_noret_flag(*args) + reanalyze_noret_flag(ea) -> bool + + + Plan to reanalyze noret flag. This function does not remove FUNC_NORET + if it is already present. It just plans to reanalysis. + + @param ea (C++: ea_t) + +Help on class regarg_t in module ida_funcs: + +class regarg_t(__builtin__.object) + | Proxy of C++ regarg_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regarg_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | regarg_t_name_get(self) -> char * + | + | reg + | regarg_t_reg_get(self) -> int + | + | thisown + | The membership flag + | + | type + | regarg_t_type_get(self) -> type_t * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regarg_t(self) + +Help on class regvar_array in module ida_funcs: + +class regvar_array(__builtin__.object) + | Proxy of C++ dynamic_wrapped_array_t< regvar_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> regvar_t const & + | + | __init__(self, *args) + | __init__(self, _data, _count) -> regvar_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | regvar_array_count_get(self) -> size_t + | + | data + | regvar_array_data_get(self) -> regvar_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regvar_array(self) + +Help on function remove_func_tail in module ida_funcs: + +remove_func_tail(*args) + remove_func_tail(pfn, tail_ea) -> bool + + + Remove a function tail. If the tail belongs only to one function, it + will be completely removed. Otherwise if the function was the tail + owner, the first function using this tail becomes the owner of the + tail. + + @param pfn (C++: func_t *) + @param tail_ea (C++: ea_t) + +Help on function set_func_cmt in module ida_funcs: + +set_func_cmt(*args) + set_func_cmt(pfn, cmt, repeatable) -> bool + + + Set function comment. This function works with function chunks too. + + @param pfn: ptr to function structure (C++: const func_t *) + @param cmt: comment string, may be multiline (with ' '). Use empty + str ("") to delete comment (C++: const char *) + @param repeatable: set repeatable comment? (C++: bool) + +Help on function set_func_end in module ida_funcs: + +set_func_end(*args) + set_func_end(ea, newend) -> bool + + + Move function chunk end address. + + @param ea: any address in the function (C++: ea_t) + @param newend: new end address of the function (C++: ea_t) + @return: success + +Help on function set_func_name_if_jumpfunc in module ida_funcs: + +set_func_name_if_jumpfunc(*args) + set_func_name_if_jumpfunc(pfn, oldname) -> int + + + Give a meaningful name to function if it consists of only 'jump' + instruction. + + @param pfn: pointer to function (may be NULL) (C++: func_t *) + @param oldname: old name of function. if old name was in "j_..." form, + then we may discard it and set a new name. if oldname + is not known, you may pass NULL. (C++: const char *) + @return: success + +Help on function set_func_start in module ida_funcs: + +set_func_start(*args) + set_func_start(ea, newstart) -> int + + + Move function chunk start address. + + @param ea: any address in the function (C++: ea_t) + @param newstart: new end address of the function (C++: ea_t) + @return: Function move result codes + +Help on function set_noret_insn in module ida_funcs: + +set_noret_insn(*args) + set_noret_insn(insn_ea, noret) -> bool + + + Signal a non-returning instruction. This function can be used by the + processor module to tell the kernel about non-returning instructions + (like call exit). The kernel will perform the global function analysis + and find out if the function returns at all. This analysis will be + done at the first call to 'func_does_return()' + + @param insn_ea (C++: ea_t) + @param noret (C++: bool) + @return: true if the instruction 'noret' flag has been changed + +Help on function set_tail_owner in module ida_funcs: + +set_tail_owner(*args) + set_tail_owner(fnt, func_start) -> bool + + + Set a function as the possessing function of a function tail. The + function should already refer to the tail (after append_func_tail). + + @param fnt (C++: func_t *) + @param func_start (C++: ea_t) + +Help on function set_visible_func in module ida_funcs: + +set_visible_func(*args) + set_visible_func(pfn, visible) + + + Set visibility of function. + + + @param pfn (C++: func_t *) + @param visible (C++: bool) + +Help on class stkpnt_array in module ida_funcs: + +class stkpnt_array(__builtin__.object) + | Proxy of C++ dynamic_wrapped_array_t< stkpnt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> stkpnt_t const & + | + | __init__(self, *args) + | __init__(self, _data, _count) -> stkpnt_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | stkpnt_array_count_get(self) -> size_t + | + | data + | stkpnt_array_data_get(self) -> stkpnt_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_stkpnt_array(self) + +Help on function try_to_add_libfunc in module ida_funcs: + +try_to_add_libfunc(*args) + try_to_add_libfunc(ea) -> int + + + Apply the currently loaded signature file to the specified address. If + a library function is found, then create a function and name it + accordingly. + + @param ea: any address in the program (C++: ea_t) + @return: Library function codes + +Help on function update_func in module ida_funcs: + +update_func(*args) + update_func(pfn) -> bool + + + Update information about a function in the database ( 'func_t' ). You + must not change the function start and end addresses using this + function. Use 'set_func_start()' and 'set_func_end()' for it. + + @param pfn: ptr to function structure (C++: func_t *) + @return: success + +=== ida_funcs EPYDOC INJECTIONS === +ida_funcs.FIND_FUNC_DEFINE +""" +create instruction if undefined byte is encountered +""" + +ida_funcs.FIND_FUNC_EXIST +""" +its bounds are returned in 'nfn'. + +function exists already. +""" + +ida_funcs.FIND_FUNC_IGNOREFN +""" +ignore existing function boundaries. by default the function returns +function boundaries if ea belongs to a function. +""" + +ida_funcs.FIND_FUNC_KEEPBD +""" +just create instructions inside the boundaries. + +do not modify incoming function boundaries, +""" + +ida_funcs.FIND_FUNC_NORMAL +""" +stop processing if undefined byte is encountered +""" + +ida_funcs.FIND_FUNC_OK +""" +ok, 'nfn' is ready for 'add_func()' +""" + +ida_funcs.FIND_FUNC_UNDEF +""" +nfn->end_ea will have the address of the unexplored byte. + +function has instructions that pass execution flow to unexplored +bytes. +""" + +ida_funcs.FUNC_BOTTOMBP +""" +BP points to the bottom of the stack frame. +""" + +ida_funcs.FUNC_FAR +""" +Far function. +""" + +ida_funcs.FUNC_FRAME +""" +Function uses frame pointer (BP) +""" + +ida_funcs.FUNC_FUZZY_SP +""" +for example: and esp, 0FFFFFFF0h + +Function changes SP in untraceable way, +""" + +ida_funcs.FUNC_HIDDEN +""" +A hidden function chunk. +""" + +ida_funcs.FUNC_LIB +""" +Library function. +""" + +ida_funcs.FUNC_LUMINA +""" +Function info is provided by Lumina. +""" + +ida_funcs.FUNC_NORET +""" +Function doesn't return. +""" + +ida_funcs.FUNC_NORET_PENDING +""" +This flag is verified upon 'func_does_return()' + +Function 'non-return' analysis must be performed. +""" + +ida_funcs.FUNC_PROLOG_OK +""" +by last SP-analysis + +Prolog analysis has be performed +""" + +ida_funcs.FUNC_PURGED_OK +""" +'argsize' field has been validated. If this bit is clear and 'argsize' +is 0, then we do not known the real number of bytes removed from the +stack. This bit is handled by the processor module. +""" + +ida_funcs.FUNC_SP_READY +""" +SP-analysis has been performed. If this flag is on, the stack change +points should not be not modified anymore. Currently this analysis is +performed only for PC +""" + +ida_funcs.FUNC_STATICDEF +""" +Static function. +""" + +ida_funcs.FUNC_TAIL +""" +This is a function tail. Other bits must be clear (except +'FUNC_HIDDEN' ). +""" + +ida_funcs.FUNC_THUNK +""" +Thunk (jump) function. +""" + +ida_funcs.FUNC_USERFAR +""" +of the function + +User has specified far-ness +""" + +ida_funcs.IDASGN_APPLIED +""" +signature is already applied +""" + +ida_funcs.IDASGN_BADARG +""" +bad number of signature +""" + +ida_funcs.IDASGN_CURRENT +""" +signature is currently being applied +""" + +ida_funcs.IDASGN_OK +""" +ok +""" + +ida_funcs.IDASGN_PLANNED +""" +signature is planned to be applied +""" + +ida_funcs.LIBFUNC_DELAY +""" +no decision because of lack of information +""" + +ida_funcs.LIBFUNC_FOUND +""" +ok, library function is found +""" + +ida_funcs.LIBFUNC_NONE +""" +no, this is not a library function +""" + +ida_funcs.MOVE_FUNC_BADSTART +""" +bad new start address +""" + +ida_funcs.MOVE_FUNC_NOCODE +""" +no instruction at 'newstart' +""" + +ida_funcs.MOVE_FUNC_NOFUNC +""" +no function at 'ea' +""" + +ida_funcs.MOVE_FUNC_OK +""" +ok +""" + +ida_funcs.MOVE_FUNC_REFUSED +""" +a plugin refused the action +""" +=== ida_funcs EPYDOC INJECTIONS END === +Help on class BasicBlock in module ida_gdl: + +class BasicBlock(__builtin__.object) + | Basic block class. It is returned by the Flowchart class + | + | Methods defined here: + | + | __init__(self, id, bb, fc) + | + | preds(self) + | Iterates the predecessors list + | + | succs(self) + | Iterates the successors list + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | startEA + +Help on class FlowChart in module ida_gdl: + +class FlowChart(__builtin__.object) + | Flowchart class used to determine basic blocks. + | Check ex_gdl_qflow_chart.py for sample usage. + | + | Methods defined here: + | + | __getitem__(self, index) + | Returns a basic block + | + | @return: BasicBlock + | + | __init__(self, f=None, bounds=None, flags=0) + | Constructor + | @param f: A func_t type, use get_func(ea) to get a reference + | @param bounds: A tuple of the form (start, end). Used if "f" is None + | @param flags: one of the FC_xxxx flags. One interesting flag is FC_PREDS + | + | __iter__(self) + | + | _getitem(self, index) + | + | refresh(self) + | Refreshes the flow chart + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | size + +Help on function display_gdl in module ida_gdl: + +display_gdl(*args) + display_gdl(fname) -> int + + + Display GDL file by calling wingraph32. The exact name of the grapher + is taken from the configuration file and set up by + 'setup_graph_subsystem()' . + + @param fname (C++: const char *) + @return: error code from os, 0 if ok + +Help on function gen_complex_call_chart in module ida_gdl: + +gen_complex_call_chart(*args) + gen_complex_call_chart(filename, wait, title, ea1, ea2, flags, recursion_depth=-1) -> bool + + + Build and display a complex xref graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param wait: message to display during graph building (C++: const char + *) + @param title: graph title (C++: const char *) + @param ea1: address range (C++: ea_t) + @param ea2: address range (C++: ea_t) + @param flags: combination of Call chart building flags and Flow + graph building flags . if none of CHART_GEN_DOT , + CHART_GEN_GDL , CHART_WINGRAPH is specified, the + function will return false. (C++: int) + @param recursion_depth: optional limit of recursion (C++: int32) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function gen_flow_graph in module ida_gdl: + +gen_flow_graph(*args) + gen_flow_graph(filename, title, pfn, ea1, ea2, gflags) -> bool + + + Build and display a flow graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param title: graph title (C++: const char *) + @param pfn: function to graph (C++: func_t *) + @param ea1: if pfn == NULL, then the address range (C++: ea_t) + @param ea2: if pfn == NULL, then the address range (C++: ea_t) + @param gflags: combination of Flow graph building flags . if none of + CHART_GEN_DOT , CHART_GEN_GDL , CHART_WINGRAPH is + specified, the function will return false (C++: int) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function gen_gdl in module ida_gdl: + +gen_gdl(*args) + gen_gdl(g, fname) + + + Create GDL file for graph. + + + @param g (C++: const gdl_graph_t *) + @param fname (C++: const char *) + +Help on function gen_simple_call_chart in module ida_gdl: + +gen_simple_call_chart(*args) + gen_simple_call_chart(filename, wait, title, gflags) -> bool + + + Build and display a simple function call graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param wait: message to display during graph building (C++: const char + *) + @param title: graph title (C++: const char *) + @param gflags: combination of CHART_NOLIBFUNCS and Flow graph + building flags . if none of CHART_GEN_DOT , + CHART_GEN_GDL , CHART_WINGRAPH is specified, the + function will return false. (C++: int) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function is_noret_block in module ida_gdl: + +is_noret_block(*args) + is_noret_block(btype) -> bool + + + Does this block never return? + + + @param btype (C++: fc_block_type_t) + +Help on function is_ret_block in module ida_gdl: + +is_ret_block(*args) + is_ret_block(btype) -> bool + + + Does this block return? + + + @param btype (C++: fc_block_type_t) + +Help on class node_iterator in module ida_gdl: + +class node_iterator(__builtin__.object) + | Proxy of C++ node_iterator class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, n) -> bool + | + | __init__(self, *args) + | __init__(self, _g, n) -> node_iterator + | + | __ne__(self, *args) + | __ne__(self, n) -> bool + | + | __ref__(self, *args) + | __ref__(self) -> int + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_node_iterator(self) + +Help on class qbasic_block_t in module ida_gdl: + +class qbasic_block_t(ida_range.range_t) + | Proxy of C++ qbasic_block_t class. + | + | Method resolution order: + | qbasic_block_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> qbasic_block_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qbasic_block_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on class qflow_chart_t in module ida_gdl: + +class qflow_chart_t(__builtin__.object) + | Proxy of C++ qflow_chart_t class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, n) -> qbasic_block_t + | + | __init__(self, *args) + | __init__(self) -> qflow_chart_t + | __init__(self, _title, _pfn, _ea1, _ea2, _flags) -> qflow_chart_t + | + | __repr__ = _swig_repr(self) + | + | append_to_flowchart(self, *args) + | append_to_flowchart(self, ea1, ea2) + | + | calc_block_type(self, *args) + | calc_block_type(self, blknum) -> fc_block_type_t + | + | create(self, *args) + | create(self, _title, _pfn, _ea1, _ea2, _flags) + | create(self, _title, ranges, _flags) + | + | get_node_label(self, *args) + | get_node_label(self, arg2, arg3, arg4) -> char * + | + | is_noret_block(self, *args) + | is_noret_block(self, blknum) -> bool + | + | is_ret_block(self, *args) + | is_ret_block(self, blknum) -> bool + | + | npred(self, *args) + | npred(self, node) -> int + | + | nsucc(self, *args) + | nsucc(self, node) -> int + | + | pred(self, *args) + | pred(self, node, i) -> int + | + | print_names(self, *args) + | print_names(self) -> bool + | + | print_node_attributes(self, *args) + | print_node_attributes(self, arg2, arg3) + | + | refresh(self, *args) + | refresh(self) + | + | size(self, *args) + | size(self) -> int + | + | succ(self, *args) + | succ(self, node, i) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bounds + | qflow_chart_t_bounds_get(self) -> range_t + | + | flags + | qflow_chart_t_flags_get(self) -> int + | + | nproper + | qflow_chart_t_nproper_get(self) -> int + | + | pfn + | qflow_chart_t_pfn_get(self) -> func_t * + | + | thisown + | The membership flag + | + | title + | qflow_chart_t_title_get(self) -> qstring * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qflow_chart_t(self) + +=== ida_gdl EPYDOC INJECTIONS === +ida_gdl.CHART_FOLLOW_DIRECTION +""" +analyze references to added blocks only in the direction of the +reference who discovered the current block +""" + +ida_gdl.CHART_GEN_DOT +""" +generate .dot file (file extension is forced to .dot) +""" + +ida_gdl.CHART_GEN_GDL +""" +generate .gdl file (file extension is forced to .gdl) +""" + +ida_gdl.CHART_IGNORE_LIB_FROM +""" +ignore references from library functions +""" + +ida_gdl.CHART_IGNORE_LIB_TO +""" +ignore references to library functions +""" + +ida_gdl.CHART_NOLIBFUNCS +""" +don't include library functions in the graph +""" + +ida_gdl.CHART_PRINT_DOTS +""" +print dots if xrefs exist outside of the range recursion depth +""" + +ida_gdl.CHART_PRINT_NAMES +""" +print labels for each block? +""" + +ida_gdl.CHART_RECURSIVE +""" +analyze added blocks +""" + +ida_gdl.CHART_REFERENCED +""" +references from the addresses in the list +""" + +ida_gdl.CHART_REFERENCING +""" +references to the addresses in the list +""" + +ida_gdl.CHART_WINGRAPH +""" +call grapher to display the graph +""" + +ida_gdl.FC_APPND +""" +multirange flowchart (set by append_to_flowchart) +""" + +ida_gdl.FC_CHKBREAK +""" +build_qflow_chart() may be aborted by user +""" + +ida_gdl.FC_NOEXT +""" +do not compute external blocks. Use this to prevent jumps leaving the +function from appearing in the flow chart. Unless specified, the +targets of those outgoing jumps will be present in the flow chart +under the form of one-instruction blocks +""" + +ida_gdl.FC_PREDS +""" +compute predecessor lists +""" + +ida_gdl.FC_PRINT +""" +print names (used only by display_flow_chart()) +""" +=== ida_gdl EPYDOC INJECTIONS END === +Help on class GraphViewer in module ida_graph: + +class GraphViewer(ida_kernwin.CustomIDAMemo) + | Method resolution order: + | GraphViewer + | ida_kernwin.CustomIDAMemo + | ida_kernwin.View_Hooks + | __builtin__.object + | + | Methods defined here: + | + | AddCommand(self, title, shortcut) + | + | AddEdge(self, src_node, dest_node) + | Creates an edge between two given node ids + | + | AddNode(self, obj) + | Creates a node associated with the given object and returns the node id + | + | Clear(self) + | Clears all the nodes and edges + | + | Close(self) + | Closes the graph. + | It is possible to call Show() again (which will recreate the graph) + | + | Count(self) + | Returns the node count + | + | OnCommand(self, cmd_id) + | + | OnPopup(self, widget, popup_handle) + | + | OnRefresh(self) + | Event called when the graph is refreshed or first created. + | From this event you are supposed to create nodes and edges. + | This callback is mandatory. + | + | @note: ***It is important to clear previous nodes before adding nodes.*** + | @return: Returning True tells the graph viewer to use the items. Otherwise old items will be used. + | + | Select(self, node_id) + | Selects a node on the graph + | + | Show(self) + | Shows an existing graph or creates a new one + | + | @return: Boolean + | + | __getitem__(self, idx) + | Returns a reference to the object associated with this node id + | + | __init__(self, title, close_open=False) + | Constructs the GraphView object. + | Please do not remove or rename the private fields + | + | @param title: The title of the graph window + | @param close_open: Should it attempt to close an existing graph (with same title) before creating this graph? + | + | __iter__(self) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | UI_Hooks_Trampoline = + | + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_kernwin.CustomIDAMemo: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | + | view_click(self, view, ve) + | + | view_close(self, view, *args) + | + | view_curpos(self, view, *args) + | + | view_dblclick(self, view, ve) + | + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | + | view_mouse_over(self, view, ve) + | + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods inherited from ida_kernwin.CustomIDAMemo: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_kernwin.View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | view_created(self, *args) + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_kernwin.View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_kernwin.View_Hooks: + | + | __swig_destroy__ = + | delete_View_Hooks(self) + +Help on class TPointDouble in module ida_graph: + +class TPointDouble(__builtin__.object) + | Proxy of C++ TPointDouble class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> TPointDouble + | __init__(self, a, b) -> TPointDouble + | __init__(self, r) -> TPointDouble + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | add(self, *args) + | add(self, r) + | + | negate(self, *args) + | negate(self) + | + | sub(self, *args) + | sub(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | x + | TPointDouble_x_get(self) -> double + | + | y + | TPointDouble_y_get(self) -> double + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_TPointDouble(self) + +Help on function calc_dist in module ida_graph: + +calc_dist(*args) + calc_dist(p, q) -> double + + + Calculate distance between p and q. + + + @param p (C++: point_t) + @param q (C++: point_t) + +Help on function clr_node_info in module ida_graph: + +clr_node_info(*args) + clr_node_info(gid, node, flags) + + + Clear node info for the given node. + + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @param flags: combination of Node info flags , identifying which + fields of node_info_t will be cleared (C++: uint32) + +Help on function create_disasm_graph in module ida_graph: + +create_disasm_graph(*args) + create_disasm_graph(ea) -> mutable_graph_t + create_disasm_graph(ranges) -> mutable_graph_t + + + Create a graph for the function that contains 'ea'. + + + @param ea (C++: ea_t) + +Help on function create_graph_viewer in module ida_graph: + +create_graph_viewer(*args) + create_graph_viewer(title, id, callback, ud, title_height, parent=None) -> graph_viewer_t * + + + Create a custom graph viewer. + + @param title: the widget title (C++: const char *) + @param id: graph id (C++: uval_t) + @param callback: callback to handle graph notifications ( + graph_notification_t ) (C++: hook_cb_t *) + @param ud: user data passed to callback (C++: void *) + @param title_height: node title height (C++: int) + @param parent (C++: TWidget *) + @return: new viewer + +Help on function create_mutable_graph in module ida_graph: + +create_mutable_graph(*args) + create_mutable_graph(id) -> mutable_graph_t + + + Create a new empty graph with given id. + + + @param id (C++: uval_t) + +Help on function create_user_graph_place in module ida_graph: + +create_user_graph_place(*args) + create_user_graph_place(node, lnnum) -> user_graph_place_t + + + Get a copy of a 'user_graph_place_t' (returns a pointer to static + storage) + + + @param node (C++: int) + @param lnnum (C++: int) + +Help on function del_node_info in module ida_graph: + +del_node_info(*args) + del_node_info(gid, node) + + + Delete the 'node_info_t' for the given node. + + + @param gid (C++: graph_id_t) + @param node (C++: int) + +Help on function delete_mutable_graph in module ida_graph: + +delete_mutable_graph(*args) + delete_mutable_graph(g) + + + Delete graph object.use this only if you are dealing with + 'mutable_graph_t' instances that have not been used together with a + 'graph_viewer_t' . If you have called 'set_viewer_graph()' with your + graph, the graph's lifecycle will be managed by the viewer, and you + shouldn't interfere with it + + @param g (C++: mutable_graph_t *) + +Help on class edge_info_t in module ida_graph: + +class edge_info_t(__builtin__.object) + | Proxy of C++ edge_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> edge_info_t + | + | __repr__ = _swig_repr(self) + | + | reverse_layout(self, *args) + | reverse_layout(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | color + | edge_info_t_color_get(self) -> bgcolor_t + | + | dstoff + | edge_info_t_dstoff_get(self) -> int + | + | layout + | edge_info_t_layout_get(self) -> pointseq_t + | + | srcoff + | edge_info_t_srcoff_get(self) -> int + | + | thisown + | The membership flag + | + | width + | edge_info_t_width_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_edge_info_t(self) + +Help on class edge_infos_wrapper_t in module ida_graph: + +class edge_infos_wrapper_t(__builtin__.object) + | Proxy of C++ edge_infos_wrapper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ptr + | edge_infos_wrapper_t_ptr_get(self) -> edge_infos_t * + | + | thisown + | The membership flag + +Help on class edge_layout_point_t in module ida_graph: + +class edge_layout_point_t(__builtin__.object) + | Proxy of C++ edge_layout_point_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> edge_layout_point_t + | __init__(self, r) -> edge_layout_point_t + | __init__(self, _e, _pidx) -> edge_layout_point_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | edge_layout_point_t_e_get(self) -> edge_t + | + | pidx + | edge_layout_point_t_pidx_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_edge_layout_point_t(self) + +Help on class edge_segment_t in module ida_graph: + +class edge_segment_t(__builtin__.object) + | Proxy of C++ edge_segment_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> edge_segment_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | length(self, *args) + | length(self) -> size_t + | + | toright(self, *args) + | toright(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | edge_segment_t_e_get(self) -> edge_t + | + | nseg + | edge_segment_t_nseg_get(self) -> int + | + | thisown + | The membership flag + | + | x0 + | edge_segment_t_x0_get(self) -> int + | + | x1 + | edge_segment_t_x1_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_edge_segment_t(self) + +Help on class edge_t in module ida_graph: + +class edge_t(__builtin__.object) + | Proxy of C++ edge_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, y) -> bool + | + | __init__(self, *args) + | __init__(self) -> edge_t + | __init__(self, x, y) -> edge_t + | + | __lt__(self, *args) + | __lt__(self, y) -> bool + | + | __ne__(self, *args) + | __ne__(self, y) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dst + | edge_t_dst_get(self) -> int + | + | src + | edge_t_src_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_edge_t(self) + +Help on function get_graph_viewer in module ida_graph: + +get_graph_viewer(*args) + get_graph_viewer(parent) -> graph_viewer_t * + + + Get custom graph viewer for given form. + + + @param parent (C++: TWidget *) + +Help on function get_node_info in module ida_graph: + +get_node_info(*args) + get_node_info(out, gid, node) -> bool + + + Get node info. + + @param out: result (C++: node_info_t *) + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @return: success + +Help on function get_viewer_graph in module ida_graph: + +get_viewer_graph(*args) + get_viewer_graph(gv) -> mutable_graph_t + + + Get graph object for given custom graph viewer. + + + @param gv (C++: graph_viewer_t *) + +Help on class graph_item_t in module ida_graph: + +class graph_item_t(__builtin__.object) + | Proxy of C++ graph_item_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> graph_item_t + | + | __repr__ = _swig_repr(self) + | + | is_edge(self, *args) + | is_edge(self) -> bool + | + | is_node(self, *args) + | is_node(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | b + | graph_item_t_b_get(self) -> int + | + | e + | graph_item_t_e_get(self) -> edge_t + | + | elp + | graph_item_t_elp_get(self) -> edge_layout_point_t + | + | n + | graph_item_t_n_get(self) -> int + | + | p + | graph_item_t_p_get(self) -> point_t + | + | thisown + | The membership flag + | + | type + | graph_item_t_type_get(self) -> graph_item_type_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_item_t(self) + +Help on class graph_node_visitor_t in module ida_graph: + +class graph_node_visitor_t(__builtin__.object) + | Proxy of C++ graph_node_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_node_visitor_t + | + | __repr__ = _swig_repr(self) + | + | is_forbidden_edge(self, *args) + | is_forbidden_edge(self, arg0, arg1) -> bool + | + | is_visited(self, *args) + | is_visited(self, n) -> bool + | + | reinit(self, *args) + | reinit(self) + | + | set_visited(self, *args) + | set_visited(self, n) + | + | visit_node(self, *args) + | visit_node(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_node_visitor_t(self) + +Help on class graph_path_visitor_t in module ida_graph: + +class graph_path_visitor_t(__builtin__.object) + | Proxy of C++ graph_path_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_path_visitor_t + | + | __repr__ = _swig_repr(self) + | + | walk_backward(self, *args) + | walk_backward(self, arg0) -> int + | + | walk_forward(self, *args) + | walk_forward(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | path + | graph_path_visitor_t_path_get(self) -> intvec_t * + | + | prune + | graph_path_visitor_t_prune_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_path_visitor_t(self) + +Help on class graph_visitor_t in module ida_graph: + +class graph_visitor_t(__builtin__.object) + | Proxy of C++ graph_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_edge(self, *args) + | visit_edge(self, arg2, arg3) -> int + | + | visit_node(self, *args) + | visit_node(self, arg2, arg3) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_visitor_t(self) + +Help on class group_crinfo_t in module ida_graph: + +class group_crinfo_t(__builtin__.object) + | Proxy of C++ group_crinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> group_crinfo_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | nodes + | group_crinfo_t_nodes_get(self) -> intvec_t * + | + | text + | group_crinfo_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_group_crinfo_t(self) + +Help on class interval_t in module ida_graph: + +class interval_t(__builtin__.object) + | Proxy of C++ interval_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> interval_t + | __init__(self, y0, y1) -> interval_t + | __init__(self, s) -> interval_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | contains(self, *args) + | contains(self, x) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | intersect(self, *args) + | intersect(self, r) + | + | length(self, *args) + | length(self) -> int + | + | make_union(self, *args) + | make_union(self, r) + | + | move_by(self, *args) + | move_by(self, shift) + | + | ---------------------------------------------------------------------- + | 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 + | + | x0 + | interval_t_x0_get(self) -> int + | + | x1 + | interval_t_x1_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_interval_t(self) + +Help on class mutable_graph_t in module ida_graph: + +class mutable_graph_t(__builtin__.object) + | Proxy of C++ mutable_graph_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | calc_group_ea(self, *args) + | calc_group_ea(self, arg0) -> ea_t + | + | change_group_visibility(self, *args) + | change_group_visibility(self, group, expand) -> bool + | + | clear(self, *args) + | clear(self) + | + | create_digraph_layout(self, *args) + | create_digraph_layout(self) -> bool + | + | create_group(self, *args) + | create_group(self, nodes) -> int + | + | del_custom_layout(self, *args) + | del_custom_layout(self) + | + | delete_group(self, *args) + | delete_group(self, group) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | exists(self, *args) + | exists(self, node) -> bool + | + | get_custom_layout(self, *args) + | get_custom_layout(self) -> bool + | + | get_edge(self, *args) + | get_edge(self, e) -> edge_info_t + | + | get_first_subgraph_node(self, *args) + | get_first_subgraph_node(self, group) -> int + | + | get_graph_groups(self, *args) + | get_graph_groups(self) -> bool + | + | get_next_subgraph_node(self, *args) + | get_next_subgraph_node(self, group, current) -> int + | + | get_node_group(self, *args) + | get_node_group(self, node) -> int + | + | get_node_representative(self, *args) + | get_node_representative(self, node) -> int + | + | is_collapsed_node(self, *args) + | is_collapsed_node(self, node) -> bool + | + | is_deleted_node(self, *args) + | is_deleted_node(self, node) -> bool + | + | is_displayable_node(self, *args) + | is_displayable_node(self, node) -> bool + | + | is_dot_node(self, *args) + | is_dot_node(self, node) -> bool + | + | is_group_node(self, *args) + | is_group_node(self, node) -> bool + | + | is_simple_node(self, *args) + | is_simple_node(self, node) -> bool + | + | is_subgraph_node(self, *args) + | is_subgraph_node(self, node) -> bool + | + | is_uncollapsed_node(self, *args) + | is_uncollapsed_node(self, node) -> bool + | + | is_user_graph(self, *args) + | is_user_graph(self) -> bool + | + | is_visible_node(self, *args) + | is_visible_node(self, node) -> bool + | + | node_qty(self, *args) + | node_qty(self) -> int + | + | npred(self, *args) + | npred(self, b) -> int + | + | nrect(self, *args) + | nrect(self, n) -> rect_t + | nrect(self, n) -> rect_t + | + | nsucc(self, *args) + | nsucc(self, b) -> int + | + | pred(self, *args) + | pred(self, b, i) -> int + | + | predset(self, *args) + | predset(self, b) -> intvec_t const & + | + | reset(self, *args) + | reset(self) + | + | set_custom_layout(self, *args) + | set_custom_layout(self) + | + | set_deleted_node(self, *args) + | set_deleted_node(self, node) + | + | set_edge(self, *args) + | set_edge(self, e, ei) -> bool + | + | set_graph_groups(self, *args) + | set_graph_groups(self) + | + | set_node_group(self, *args) + | set_node_group(self, node, group) + | + | size(self, *args) + | size(self) -> int + | + | succ(self, *args) + | succ(self, b, i) -> int + | + | succset(self, *args) + | succset(self, b) -> intvec_t const & + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | belongs + | mutable_graph_t_belongs_get(self) -> intvec_t * + | + | edges + | mutable_graph_t_edges_get(self) -> edge_infos_wrapper_t + | + | gid + | mutable_graph_t_gid_get(self) -> uval_t + | + | node_flags + | mutable_graph_t_node_flags_get(self) -> bytevec_t * + | + | nodes + | mutable_graph_t_nodes_get(self) -> node_layout_t + | + | org_preds + | mutable_graph_t_org_preds_get(self) -> array_of_intvec_t + | + | org_succs + | mutable_graph_t_org_succs_get(self) -> array_of_intvec_t + | + | preds + | mutable_graph_t_preds_get(self) -> array_of_intvec_t + | + | succs + | mutable_graph_t_succs_get(self) -> array_of_intvec_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mutable_graph_t(self) + +Help on class node_info_t in module ida_graph: + +class node_info_t(__builtin__.object) + | Proxy of C++ node_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> node_info_t + | + | __repr__ = _swig_repr(self) + | + | get_flags_for_valid(self, *args) + | get_flags_for_valid(self) -> uint32 + | + | valid_bg_color(self, *args) + | valid_bg_color(self) -> bool + | + | valid_ea(self, *args) + | valid_ea(self) -> bool + | + | valid_flags(self, *args) + | valid_flags(self) -> bool + | + | valid_frame_color(self, *args) + | valid_frame_color(self) -> bool + | + | valid_text(self, *args) + | valid_text(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bg_color + | node_info_t_bg_color_get(self) -> bgcolor_t + | + | ea + | node_info_t_ea_get(self) -> ea_t + | + | flags + | node_info_t_flags_get(self) -> uint32 + | + | frame_color + | node_info_t_frame_color_get(self) -> bgcolor_t + | + | text + | node_info_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_node_info_t(self) + +Help on class node_layout_t in module ida_graph: + +class node_layout_t(__builtin__.object) + | Proxy of C++ qvector< rect_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> rect_t + | + | __init__(self, *args) + | __init__(self) -> node_layout_t + | __init__(self, x) -> node_layout_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> rect_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> rect_t + | begin(self) -> rect_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> rect_t + | end(self) -> rect_t + | + | erase(self, *args) + | erase(self, it) -> rect_t + | erase(self, first, last) -> rect_t + | + | extract(self, *args) + | extract(self) -> rect_t + | + | find(self, *args) + | find(self, x) -> rect_t + | find(self, x) -> rect_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=rect_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> rect_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> rect_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_node_layout_t(self) + +Help on class node_ordering_t in module ida_graph: + +class node_ordering_t(__builtin__.object) + | Proxy of C++ node_ordering_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> node_ordering_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | node(self, *args) + | node(self, _order) -> int + | + | resize(self, *args) + | resize(self, n) + | + | set(self, *args) + | set(self, _node, num) + | + | size(self, *args) + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_node_ordering_t(self) + +Help on class point_t in module ida_graph: + +class point_t(__builtin__.object) + | Proxy of C++ point_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> point_t + | __init__(self, _x, _y) -> point_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | add(self, *args) + | add(self, r) -> point_t + | + | negate(self, *args) + | negate(self) + | + | sub(self, *args) + | sub(self, r) -> point_t + | + | ---------------------------------------------------------------------- + | 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 + | + | x + | point_t_x_get(self) -> int + | + | y + | point_t_y_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_point_t(self) + +Help on class pointseq_t in module ida_graph: + +class pointseq_t(pointvec_t) + | Proxy of C++ pointseq_t class. + | + | Method resolution order: + | pointseq_t + | pointvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pointseq_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pointseq_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from pointvec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> point_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> point_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> point_t + | begin(self) -> point_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> point_t + | end(self) -> point_t + | + | erase(self, *args) + | erase(self, it) -> point_t + | erase(self, first, last) -> point_t + | + | extract(self, *args) + | extract(self) -> point_t + | + | find(self, *args) + | find(self, x) -> point_t + | find(self, x) -> point_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=point_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> point_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> point_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from pointvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class pointvec_t in module ida_graph: + +class pointvec_t(__builtin__.object) + | Proxy of C++ qvector< point_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> point_t + | + | __init__(self, *args) + | __init__(self) -> pointvec_t + | __init__(self, x) -> pointvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> point_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> point_t + | begin(self) -> point_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> point_t + | end(self) -> point_t + | + | erase(self, *args) + | erase(self, it) -> point_t + | erase(self, first, last) -> point_t + | + | extract(self, *args) + | extract(self) -> point_t + | + | find(self, *args) + | find(self, x) -> point_t + | find(self, x) -> point_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=point_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> point_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> point_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pointvec_t(self) + +Help on function pyg_close in module ida_graph: + +pyg_close(*args) + pyg_close(_self) + +Help on function pyg_select_node in module ida_graph: + +pyg_select_node(*args) + pyg_select_node(_self, nid) + +Help on function pyg_show in module ida_graph: + +pyg_show(*args) + pyg_show(_self) -> bool + +Help on class rect_t in module ida_graph: + +class rect_t(__builtin__.object) + | Proxy of C++ rect_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> rect_t + | __init__(self, l, t, r, b) -> rect_t + | __init__(self, p0, p1) -> rect_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | area(self, *args) + | area(self) -> int + | + | bottomright(self, *args) + | bottomright(self) -> point_t + | + | center(self, *args) + | center(self) -> point_t + | + | contains(self, *args) + | contains(self, p) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | grow(self, *args) + | grow(self, delta) + | + | height(self, *args) + | height(self) -> int + | + | intersect(self, *args) + | intersect(self, r) + | + | is_intersection_empty(self, *args) + | is_intersection_empty(self, r) -> bool + | + | make_union(self, *args) + | make_union(self, r) + | + | move_by(self, *args) + | move_by(self, p) + | + | move_to(self, *args) + | move_to(self, p) + | + | topleft(self, *args) + | topleft(self) -> point_t + | + | width(self, *args) + | width(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bottom + | rect_t_bottom_get(self) -> int + | + | left + | rect_t_left_get(self) -> int + | + | right + | rect_t_right_get(self) -> int + | + | thisown + | The membership flag + | + | top + | rect_t_top_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rect_t(self) + +Help on function refresh_viewer in module ida_graph: + +refresh_viewer(*args) + refresh_viewer(gv) + + + Redraw the graph in the given view. + + + @param gv (C++: graph_viewer_t *) + +Help on class row_info_t in module ida_graph: + +class row_info_t(__builtin__.object) + | Proxy of C++ row_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> row_info_t + | + | __repr__ = _swig_repr(self) + | + | height(self, *args) + | height(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bottom + | row_info_t_bottom_get(self) -> int + | + | nodes + | row_info_t_nodes_get(self) -> intvec_t * + | + | thisown + | The membership flag + | + | top + | row_info_t_top_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_row_info_t(self) + +Help on class screen_graph_selection_base_t in module ida_graph: + +class screen_graph_selection_base_t(__builtin__.object) + | Proxy of C++ qvector< selection_item_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> selection_item_t + | + | __init__(self, *args) + | __init__(self) -> screen_graph_selection_base_t + | __init__(self, x) -> screen_graph_selection_base_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> selection_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> selection_item_t + | begin(self) -> selection_item_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> selection_item_t + | end(self) -> selection_item_t + | + | erase(self, *args) + | erase(self, it) -> selection_item_t + | erase(self, first, last) -> selection_item_t + | + | extract(self, *args) + | extract(self) -> selection_item_t + | + | find(self, *args) + | find(self, x) -> selection_item_t + | find(self, x) -> selection_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=selection_item_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> selection_item_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> selection_item_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = screen_graph_selection_t + | + | __repr__ = _swig_repr(self) + | + | add(self, *args) + | add(self, s) + | + | add_node(self, *args) + | add_node(self, node) + | + | add_point(self, *args) + | add_point(self, e, idx) + | + | del_node(self, *args) + | del_node(self, node) + | + | del_point(self, *args) + | del_point(self, e, idx) + | + | has(self, *args) + | has(self, item) -> bool + | + | items_count(self, *args) + | items_count(self, look_for_nodes) -> size_t + | + | nodes_count(self, *args) + | nodes_count(self) -> size_t + | + | points_count(self, *args) + | points_count(self) -> size_t + | + | sub(self, *args) + | sub(self, s) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_screen_graph_selection_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from screen_graph_selection_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> selection_item_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> selection_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> selection_item_t + | begin(self) -> selection_item_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> selection_item_t + | end(self) -> selection_item_t + | + | erase(self, *args) + | erase(self, it) -> selection_item_t + | erase(self, first, last) -> selection_item_t + | + | extract(self, *args) + | extract(self) -> selection_item_t + | + | find(self, *args) + | find(self, x) -> selection_item_t + | find(self, x) -> selection_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=selection_item_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> selection_item_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> selection_item_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from screen_graph_selection_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class selection_item_t in module ida_graph: + +class selection_item_t(__builtin__.object) + | Proxy of C++ selection_item_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> selection_item_t + | __init__(self, n) -> selection_item_t + | __init__(self, _elp) -> selection_item_t + | __init__(self, e, idx) -> selection_item_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | elp + | selection_item_t_elp_get(self) -> edge_layout_point_t + | + | is_node + | selection_item_t_is_node_get(self) -> bool + | + | node + | selection_item_t_node_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_selection_item_t(self) + +Help on function set_node_info in module ida_graph: + +set_node_info(*args) + set_node_info(gid, node, ni, flags) + + + Set node info. + + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @param ni: node info to use (C++: const node_info_t &) + @param flags: combination of Node info flags , identifying which + fields of 'ni' will be used (C++: uint32) + +Help on function set_viewer_graph in module ida_graph: + +set_viewer_graph(*args) + set_viewer_graph(gv, g) + + + Set the underlying graph object for the given viewer. + + + @param gv (C++: graph_viewer_t *) + @param g (C++: mutable_graph_t *) + +Help on class user_graph_place_t in module ida_graph: + +class user_graph_place_t(__builtin__.object) + | Proxy of C++ user_graph_place_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | node + | user_graph_place_t_node_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_graph_place_t(self) + +Help on function viewer_attach_menu_item in module ida_graph: + +viewer_attach_menu_item(*args) + viewer_attach_menu_item(g, name) -> bool + + + Attach a previously-registered action to the view's context menu. See + 'kernwin.hpp' for how to register actions. + + @param g (C++: graph_viewer_t *) + @param name: action name (C++: const char *) + @return: success + +Help on function viewer_center_on in module ida_graph: + +viewer_center_on(*args) + viewer_center_on(gv, node) + + + Center the graph view on the given node. + + + @param gv (C++: graph_viewer_t *) + @param node (C++: int) + +Help on function viewer_create_groups in module ida_graph: + +viewer_create_groups(*args) + viewer_create_groups(gv, out_group_nodes, gi) -> bool + + + This will perform an operation similar to what happens when a user + manually selects a set of nodes, right-clicks and selects "Create + group". This is a wrapper around mutable_graph_t::create_group that + will, in essence:clone the current graphfor each 'group_crinfo_t' , + attempt creating group in that new graphif all were successful, + animate to that new graph.this accepts parameters that allow creating + of multiple groups at once; which means only one graph animation will + be triggered. + + @param gv (C++: graph_viewer_t *) + @param out_group_nodes (C++: intvec_t *) + @param gi (C++: const groups_crinfos_t &) + +Help on function viewer_del_node_info in module ida_graph: + +viewer_del_node_info(*args) + viewer_del_node_info(gv, n) + + + Delete node info for node in given viewer (see 'del_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param n (C++: int) + +Help on function viewer_delete_groups in module ida_graph: + +viewer_delete_groups(*args) + viewer_delete_groups(gv, groups, new_current=-1) -> bool + + + Wrapper around mutable_graph_t::delete_group. This function will:clone + the current graphattempt deleting the groups in that new graphif + successful, animate to that new graph. + + @param gv (C++: graph_viewer_t *) + @param groups (C++: const intvec_t &) + @param new_current (C++: int) + +Help on function viewer_fit_window in module ida_graph: + +viewer_fit_window(*args) + viewer_fit_window(gv) + + + Fit graph viewer to its parent form. + + + @param gv (C++: graph_viewer_t *) + +Help on function viewer_get_curnode in module ida_graph: + +viewer_get_curnode(*args) + viewer_get_curnode(gv) -> int + + + Get number of currently selected node (-1 if none) + + + @param gv (C++: graph_viewer_t *) + +Help on function viewer_get_gli in module ida_graph: + +viewer_get_gli(*args) + viewer_get_gli(out, gv, flags=0) -> bool + + + Get location info for given graph view If flags contains + GLICTL_CENTER, then the gli that will be retrieved, will be the one at + the center of the view. Otherwise it will be the top-left. + + @param out (C++: graph_location_info_t *) + @param gv (C++: graph_viewer_t *) + @param flags (C++: uint32) + +Help on function viewer_get_node_info in module ida_graph: + +viewer_get_node_info(*args) + viewer_get_node_info(gv, out, n) -> bool + + + Get node info for node in given viewer (see 'get_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param out (C++: node_info_t *) + @param n (C++: int) + +Help on function viewer_get_selection in module ida_graph: + +viewer_get_selection(*args) + viewer_get_selection(gv, sgs) -> bool + + + Get currently selected items for graph viewer. + + + @param gv (C++: graph_viewer_t *) + @param sgs (C++: screen_graph_selection_t *) + +Help on function viewer_set_gli in module ida_graph: + +viewer_set_gli(*args) + viewer_set_gli(gv, gli, flags=0) + + + Set location info for given graph view If flags contains + GLICTL_CENTER, then the gli will be set to be the center of the view. + Otherwise it will be the top-left. + + @param gv (C++: graph_viewer_t *) + @param gli (C++: const graph_location_info_t *) + @param flags (C++: uint32) + +Help on function viewer_set_groups_visibility in module ida_graph: + +viewer_set_groups_visibility(*args) + viewer_set_groups_visibility(gv, groups, expand, new_current=-1) -> bool + + + Wrapper around mutable_graph_t::change_visibility. This function + will:clone the current graphattempt changing visibility of the groups + in that new graphif successful, animate to that new graph. + + @param gv (C++: graph_viewer_t *) + @param groups (C++: const intvec_t &) + @param expand (C++: bool) + @param new_current (C++: int) + +Help on function viewer_set_node_info in module ida_graph: + +viewer_set_node_info(*args) + viewer_set_node_info(gv, n, ni, flags) + + + Set node info for node in given viewer (see 'set_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param n (C++: int) + @param ni (C++: const node_info_t &) + @param flags (C++: uint32) + +Help on function viewer_set_titlebar_height in module ida_graph: + +viewer_set_titlebar_height(*args) + viewer_set_titlebar_height(gv, height) -> int + + + Set height of node title bars ( 'grcode_set_titlebar_height' ) + + + @param gv (C++: graph_viewer_t *) + @param height (C++: int) + +=== ida_graph EPYDOC INJECTIONS === +ida_graph.GLICTL_CENTER +""" +the gli should be set/get as center +""" + +ida_graph.MTG_DOT_NODE +""" +is dot node? +""" + +ida_graph.MTG_GROUP_NODE +""" +is group node? +""" + +ida_graph.MTG_NON_DISPLAYABLE_NODE +""" +for disassembly graphs - non-displayable nodes have a visible area +that is too large to generate disassembly lines for without IDA +slowing down significantly (see MAX_VISIBLE_NODE_AREA) +""" + +ida_graph.NIF_BG_COLOR +""" + 'node_info_t::bg_color' +""" + +ida_graph.NIF_EA +""" + 'node_info_t::ea' +""" + +ida_graph.NIF_FLAGS +""" + 'node_info_t::flags' +""" + +ida_graph.NIF_FRAME_COLOR +""" + 'node_info_t::frame_color' +""" + +ida_graph.NIF_TEXT +""" + 'node_info_t::text' +""" +=== ida_graph EPYDOC INJECTIONS END === +Help on class DecompilationFailure in module ida_hexrays: + +class DecompilationFailure(exceptions.Exception) + | Raised on a decompilation error. + | + | The associated hexrays_failure_t object is stored in the + | 'info' member of this exception. + | + | Method resolution order: + | DecompilationFailure + | exceptions.Exception + | exceptions.BaseException + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, info) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from exceptions.Exception: + | + | __new__ = + | T.__new__(S, ...) -> a new object with type S, a subtype of T + | + | ---------------------------------------------------------------------- + | Methods inherited from exceptions.BaseException: + | + | __delattr__(...) + | x.__delattr__('name') <==> del x.name + | + | __getattribute__(...) + | x.__getattribute__('name') <==> x.name + | + | __getitem__(...) + | x.__getitem__(y) <==> x[y] + | + | __getslice__(...) + | x.__getslice__(i, j) <==> x[i:j] + | + | Use of negative indices is not supported. + | + | __reduce__(...) + | + | __repr__(...) + | x.__repr__() <==> repr(x) + | + | __setattr__(...) + | x.__setattr__('name', value) <==> x.name = value + | + | __setstate__(...) + | + | __str__(...) + | x.__str__() <==> str(x) + | + | __unicode__(...) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from exceptions.BaseException: + | + | __dict__ + | + | args + | + | message + +Help on class Hexrays_Hooks in module ida_hexrays: + +class Hexrays_Hooks(__builtin__.object) + | Proxy of C++ Hexrays_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> Hexrays_Hooks + | + | __repr__ = _swig_repr(self) + | + | close_pseudocode(self, *args) + | close_pseudocode(self, vu) -> int + | + | cmt_changed(self, *args) + | cmt_changed(self, cfunc, loc, cmt) -> int + | + | combine(self, *args) + | combine(self, blk, insn) -> int + | + | create_hint(self, *args) + | create_hint(self, vu) -> PyObject * + | + | curpos(self, *args) + | curpos(self, vu) -> int + | + | double_click(self, *args) + | double_click(self, vu, shift_state) -> int + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | flowchart(self, *args) + | flowchart(self, fc) -> int + | + | func_printed(self, *args) + | func_printed(self, cfunc) -> int + | + | glbopt(self, *args) + | glbopt(self, mba) -> int + | + | hook(self, *args) + | hook(self) -> bool + | + | interr(self, *args) + | interr(self, errcode) -> int + | + | keyboard(self, *args) + | keyboard(self, vu, key_code, shift_state) -> int + | + | locopt(self, *args) + | locopt(self, mba) -> int + | + | lvar_cmt_changed(self, *args) + | lvar_cmt_changed(self, vu, v, cmt) -> int + | + | lvar_mapping_changed(self, *args) + | lvar_mapping_changed(self, vu, frm, to) -> int + | + | lvar_name_changed(self, *args) + | lvar_name_changed(self, vu, v, name, is_user_name) -> int + | + | lvar_type_changed(self, *args) + | lvar_type_changed(self, vu, v, tinfo) -> int + | + | maturity(self, *args) + | maturity(self, cfunc, new_maturity) -> int + | + | microcode(self, *args) + | microcode(self, mba) -> int + | + | open_pseudocode(self, *args) + | open_pseudocode(self, vu) -> int + | + | populating_popup(self, *args) + | populating_popup(self, widget, popup_handle, vu) -> int + | + | prealloc(self, *args) + | prealloc(self, mba) -> int + | + | preoptimized(self, *args) + | preoptimized(self, mba) -> int + | + | print_func(self, *args) + | print_func(self, cfunc, vp) -> int + | + | prolog(self, *args) + | prolog(self, mba, fc, reachable_blocks, decomp_flags) -> int + | + | refresh_pseudocode(self, *args) + | refresh_pseudocode(self, vu) -> int + | + | resolve_stkaddrs(self, *args) + | resolve_stkaddrs(self, mba) -> int + | + | right_click(self, *args) + | right_click(self, vu) -> int + | + | stkpnts(self, *args) + | stkpnts(self, mba, _sps) -> int + | + | structural(self, *args) + | structural(self, ct) -> int + | + | switch_pseudocode(self, *args) + | switch_pseudocode(self, vu) -> int + | + | text_ready(self, *args) + | text_ready(self, vu) -> int + | + | unhook(self, *args) + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_Hexrays_Hooks(self) + +Help on class __cbhooks_t in module ida_hexrays: + +class __cbhooks_t(Hexrays_Hooks) + | Method resolution order: + | __cbhooks_t + | Hexrays_Hooks + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, callback) + | + | close_pseudocode(self, *args) + | + | create_hint(self, *args) + | + | curpos(self, *args) + | + | double_click(self, *args) + | + | func_printed(self, *args) + | + | interr(self, *args) + | + | keyboard(self, *args) + | + | maturity(self, *args) + | + | open_pseudocode(self, *args) + | + | populating_popup(self, *args) + | + | print_func(self, *args) + | + | refresh_pseudocode(self, *args) + | + | right_click(self, *args) + | + | switch_pseudocode(self, *args) + | + | text_ready(self, *args) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | instances = [] + | + | ---------------------------------------------------------------------- + | Methods inherited from Hexrays_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | cmt_changed(self, *args) + | cmt_changed(self, cfunc, loc, cmt) -> int + | + | combine(self, *args) + | combine(self, blk, insn) -> int + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | flowchart(self, *args) + | flowchart(self, fc) -> int + | + | glbopt(self, *args) + | glbopt(self, mba) -> int + | + | hook(self, *args) + | hook(self) -> bool + | + | locopt(self, *args) + | locopt(self, mba) -> int + | + | lvar_cmt_changed(self, *args) + | lvar_cmt_changed(self, vu, v, cmt) -> int + | + | lvar_mapping_changed(self, *args) + | lvar_mapping_changed(self, vu, frm, to) -> int + | + | lvar_name_changed(self, *args) + | lvar_name_changed(self, vu, v, name, is_user_name) -> int + | + | lvar_type_changed(self, *args) + | lvar_type_changed(self, vu, v, tinfo) -> int + | + | microcode(self, *args) + | microcode(self, mba) -> int + | + | prealloc(self, *args) + | prealloc(self, mba) -> int + | + | preoptimized(self, *args) + | preoptimized(self, mba) -> int + | + | prolog(self, *args) + | prolog(self, mba, fc, reachable_blocks, decomp_flags) -> int + | + | resolve_stkaddrs(self, *args) + | resolve_stkaddrs(self, mba) -> int + | + | stkpnts(self, *args) + | stkpnts(self, mba, _sps) -> int + | + | structural(self, *args) + | structural(self, ct) -> int + | + | unhook(self, *args) + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from Hexrays_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from Hexrays_Hooks: + | + | __swig_destroy__ = + | delete_Hexrays_Hooks(self) + +Help on function _call_with_transferrable_ownership in module ida_hexrays: + +_call_with_transferrable_ownership(fun, *args) + # Object ownership + +Help on function _kludge_use_TPopupMenu in module ida_hexrays: + +_kludge_use_TPopupMenu(*args) + _kludge_use_TPopupMenu(m) + +Help on function _ll_call_helper in module ida_hexrays: + +_ll_call_helper(*args) + _ll_call_helper(rettype, args, format) -> cexpr_t + +Help on function _ll_create_helper in module ida_hexrays: + +_ll_create_helper(*args) + _ll_create_helper(standalone, type, format) -> cexpr_t + +Help on function _ll_dereference in module ida_hexrays: + +_ll_dereference(*args) + _ll_dereference(e, ptrsize, is_flt=False) -> cexpr_t + +Help on function _ll_lnot in module ida_hexrays: + +_ll_lnot(*args) + _ll_lnot(e) -> cexpr_t + +Help on function _ll_make_num in module ida_hexrays: + +_ll_make_num(*args) + _ll_make_num(n, func=None, ea=BADADDR, opnum=0, sign=no_sign, size=0) -> cexpr_t + +Help on function _ll_make_ref in module ida_hexrays: + +_ll_make_ref(*args) + _ll_make_ref(e) -> cexpr_t + +Help on function _ll_new_block in module ida_hexrays: + +_ll_new_block(*args) + _ll_new_block() -> cinsn_t + +Help on function _map_as_dict in module ida_hexrays: + +_map_as_dict(maptype, name, keytype, valuetype) + # dictify all dict-like types + +Help on function accepts_small_udts in module ida_hexrays: + +accepts_small_udts(*args) + accepts_small_udts(op) -> bool + + + Is the operator allowed on small structure or union? + + + @param op (C++: ctype_t) + +Help on function accepts_udts in module ida_hexrays: + +accepts_udts(*args) + accepts_udts(op) -> bool + +Help on function arglocs_overlap in module ida_hexrays: + +arglocs_overlap(*args) + arglocs_overlap(loc1, w1, loc2, w2) -> bool + + + Do two arglocs overlap? + + + @param loc1 (C++: const vdloc_t &) + @param w1 (C++: size_t) + @param loc2 (C++: const vdloc_t &) + @param w2 (C++: size_t) + +Help on class array_of_bitsets in module ida_hexrays: + +class array_of_bitsets(__builtin__.object) + | Proxy of C++ qvector< bitset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> bitset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_bitsets + | __init__(self, x) -> array_of_bitsets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> bitset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> bitset_t + | begin(self) -> bitset_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> bitset_t + | end(self) -> bitset_t + | + | erase(self, *args) + | erase(self, it) -> bitset_t + | erase(self, first, last) -> bitset_t + | + | extract(self, *args) + | extract(self) -> bitset_t + | + | find(self, *args) + | find(self, x) -> bitset_t + | find(self, x) -> bitset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=bitset_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> bitset_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> bitset_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_array_of_bitsets(self) + +Help on class array_of_ivlsets in module ida_hexrays: + +class array_of_ivlsets(__builtin__.object) + | Proxy of C++ qvector< ivlset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> ivlset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_ivlsets + | __init__(self, x) -> array_of_ivlsets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> ivlset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> ivlset_t + | begin(self) -> ivlset_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ivlset_t + | end(self) -> ivlset_t + | + | erase(self, *args) + | erase(self, it) -> ivlset_t + | erase(self, first, last) -> ivlset_t + | + | extract(self, *args) + | extract(self) -> ivlset_t + | + | find(self, *args) + | find(self, x) -> ivlset_t + | find(self, x) -> ivlset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=ivlset_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> ivlset_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ivlset_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_array_of_ivlsets(self) + +Help on function asgop in module ida_hexrays: + +asgop(*args) + asgop(cop) -> ctype_t + + + Convert plain operator into assignment operator. For example, cot_add + returns cot_asgadd. + + + @param cop (C++: ctype_t) + +Help on function asgop_revert in module ida_hexrays: + +asgop_revert(*args) + asgop_revert(cop) -> ctype_t + + + Convert assignment operator into plain operator. For example, + cot_asgadd returns cot_add + + @param cop (C++: ctype_t) + @return: cot_empty is the input operator is not an assignment + operator. + +Help on class bit_bound_t in module ida_hexrays: + +class bit_bound_t(__builtin__.object) + | Proxy of C++ bit_bound_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=0, s=0) -> bit_bound_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | nbits + | bit_bound_t_nbits_get(self) -> int16 + | + | sbits + | bit_bound_t_sbits_get(self) -> int16 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bit_bound_t(self) + +Help on class bitset_t in module ida_hexrays: + +class bitset_t(__builtin__.object) + | Proxy of C++ bitset_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> bitset_t + | __init__(self, m) -> bitset_t + | + | __iter__(self) + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __len__ = count(self, *args) + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | add(self, *args) + | add(self, bit) -> bool + | add(self, bit, width) -> bool + | add(self, ml) -> bool + | + | back(self, *args) + | back(self) -> int + | + | begin(self, *args) + | begin(self) -> bitset_t::iterator + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | copy(self, *args) + | copy(self, m) -> bitset_t + | + | count(self, *args) + | count(self) -> int + | count(self, bit) -> int + | + | cut_at(self, *args) + | cut_at(self, maxbit) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> bitset_t::iterator + | + | fill_with_ones(self, *args) + | fill_with_ones(self, maxbit) + | + | front(self, *args) + | front(self) -> int + | + | has(self, *args) + | has(self, bit) -> bool + | + | has_all(self, *args) + | has_all(self, bit, width) -> bool + | + | has_any(self, *args) + | has_any(self, bit, width) -> bool + | + | has_common(self, *args) + | has_common(self, ml) -> bool + | + | inc(self, *args) + | inc(self, p, n=1) + | + | includes(self, *args) + | includes(self, ml) -> bool + | + | intersect(self, *args) + | intersect(self, ml) -> bool + | + | is_subset_of(self, *args) + | is_subset_of(self, ml) -> bool + | + | itat(self, *args) + | itat(self, n) -> bitset_t::iterator + | + | itv(self, *args) + | itv(self, it) -> int + | + | last(self, *args) + | last(self) -> int + | + | shift_down(self, *args) + | shift_down(self, shift) + | + | sub(self, *args) + | sub(self, bit) -> bool + | sub(self, bit, width) -> bool + | sub(self, ml) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bitset_t(self) + +Help on function block_chains_begin in module ida_hexrays: + +block_chains_begin(*args) + block_chains_begin(set) -> block_chains_iterator_t + + + Get iterator pointing to the beginning of 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + +Help on function block_chains_clear in module ida_hexrays: + +block_chains_clear(*args) + block_chains_clear(set) + + + Clear 'block_chains_t' . + + + @param set (C++: block_chains_t *) + +Help on function block_chains_end in module ida_hexrays: + +block_chains_end(*args) + block_chains_end(set) -> block_chains_iterator_t + + + Get iterator pointing to the end of 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + +Help on function block_chains_erase in module ida_hexrays: + +block_chains_erase(*args) + block_chains_erase(set, p) + + + Erase current element from 'block_chains_t' . + + + @param set (C++: block_chains_t *) + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_find in module ida_hexrays: + +block_chains_find(*args) + block_chains_find(set, val) -> block_chains_iterator_t + + + Find the specified key in set 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + @param val (C++: const chain_t &) + +Help on function block_chains_free in module ida_hexrays: + +block_chains_free(*args) + block_chains_free(set) + + + Delete 'block_chains_t' instance. + + + @param set (C++: block_chains_t *) + +Help on function block_chains_get in module ida_hexrays: + +block_chains_get(*args) + block_chains_get(p) -> chain_t + + + Get reference to the current set value. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_insert in module ida_hexrays: + +block_chains_insert(*args) + block_chains_insert(set, val) -> block_chains_iterator_t + + + Insert new ( 'chain_t' ) into set 'block_chains_t' . + + + @param set (C++: block_chains_t *) + @param val (C++: const chain_t &) + +Help on class block_chains_iterator_t in module ida_hexrays: + +class block_chains_iterator_t(__builtin__.object) + | Proxy of C++ block_chains_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> block_chains_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | block_chains_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_block_chains_iterator_t(self) + +Help on function block_chains_new in module ida_hexrays: + +block_chains_new(*args) + block_chains_new() -> block_chains_t + + + Create a new 'block_chains_t' instance. + +Help on function block_chains_next in module ida_hexrays: + +block_chains_next(*args) + block_chains_next(p) -> block_chains_iterator_t + + + Move to the next element. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_prev in module ida_hexrays: + +block_chains_prev(*args) + block_chains_prev(p) -> block_chains_iterator_t + + + Move to the previous element. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_size in module ida_hexrays: + +block_chains_size(*args) + block_chains_size(set) -> size_t + + + Get size of 'block_chains_t' . + + + @param set (C++: block_chains_t *) + +Help on class block_chains_t in module ida_hexrays: + +class block_chains_t(__builtin__.object) + | Proxy of C++ block_chains_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> block_chains_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | get_chain(self, *args) + | get_chain(self, k, width=1) -> chain_t + | get_chain(self, k, width=1) -> chain_t + | get_chain(self, ch) -> chain_t + | get_chain(self, ch) -> chain_t + | + | get_reg_chain(self, *args) + | get_reg_chain(self, reg, width=1) -> chain_t + | get_reg_chain(self, reg, width=1) -> chain_t + | + | get_stk_chain(self, *args) + | get_stk_chain(self, off, width=1) -> chain_t + | get_stk_chain(self, off, width=1) -> chain_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_block_chains_t(self) + +Help on class block_chains_vec_t in module ida_hexrays: + +class block_chains_vec_t(__builtin__.object) + | Proxy of C++ qvector< block_chains_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> block_chains_t + | + | __init__(self, *args) + | __init__(self) -> block_chains_vec_t + | __init__(self, x) -> block_chains_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> block_chains_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> block_chains_t + | begin(self) -> block_chains_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> block_chains_t + | end(self) -> block_chains_t + | + | erase(self, *args) + | erase(self, it) -> block_chains_t + | erase(self, first, last) -> block_chains_t + | + | extract(self, *args) + | extract(self) -> block_chains_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=block_chains_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> block_chains_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> block_chains_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_block_chains_vec_t(self) + +Help on function boundaries_begin in module ida_hexrays: + +boundaries_begin(*args) + boundaries_begin(map) -> boundaries_iterator_t + + + Get iterator pointing to the beginning of boundaries_t. + + + @param map (C++: const boundaries_t *) + +Help on function boundaries_clear in module ida_hexrays: + +boundaries_clear(*args) + boundaries_clear(map) + + + Clear boundaries_t. + + + @param map (C++: boundaries_t *) + +Help on function boundaries_end in module ida_hexrays: + +boundaries_end(*args) + boundaries_end(map) -> boundaries_iterator_t + + + Get iterator pointing to the end of boundaries_t. + + + @param map (C++: const boundaries_t *) + +Help on function boundaries_erase in module ida_hexrays: + +boundaries_erase(*args) + boundaries_erase(map, p) + + + Erase current element from boundaries_t. + + + @param map (C++: boundaries_t *) + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_find in module ida_hexrays: + +boundaries_find(*args) + boundaries_find(map, key) -> boundaries_iterator_t + + + Find the specified key in boundaries_t. + + + @param map (C++: const boundaries_t *) + @param key (C++: const cinsn_t *&) + +Help on function boundaries_first in module ida_hexrays: + +boundaries_first(*args) + boundaries_first(p) -> cinsn_t + + + Get reference to the current map key. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_free in module ida_hexrays: + +boundaries_free(*args) + boundaries_free(map) + + + Delete boundaries_t instance. + + + @param map (C++: boundaries_t *) + +Help on function boundaries_insert in module ida_hexrays: + +boundaries_insert(*args) + boundaries_insert(map, key, val) -> boundaries_iterator_t + + + Insert new ( 'cinsn_t' *, 'rangeset_t' ) pair into boundaries_t. + + + @param map (C++: boundaries_t *) + @param key (C++: const cinsn_t *&) + @param val (C++: const rangeset_t &) + +Help on class boundaries_iterator_t in module ida_hexrays: + +class boundaries_iterator_t(__builtin__.object) + | Proxy of C++ boundaries_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> boundaries_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | boundaries_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_boundaries_iterator_t(self) + +Help on function boundaries_new in module ida_hexrays: + +boundaries_new(*args) + boundaries_new() -> boundaries_t + + + Create a new boundaries_t instance. + +Help on function boundaries_next in module ida_hexrays: + +boundaries_next(*args) + boundaries_next(p) -> boundaries_iterator_t + + + Move to the next element. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_prev in module ida_hexrays: + +boundaries_prev(*args) + boundaries_prev(p) -> boundaries_iterator_t + + + Move to the previous element. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_second in module ida_hexrays: + +boundaries_second(*args) + boundaries_second(p) -> rangeset_t + + + Get reference to the current map value. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_size in module ida_hexrays: + +boundaries_size(*args) + boundaries_size(map) -> size_t + + + Get size of boundaries_t. + + + @param map (C++: boundaries_t *) + +Help on class boundaries_t in module ida_hexrays: + +class boundaries_t(__builtin__.object) + | Proxy of C++ std::map< cinsn_t *,rangeset_t > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> boundaries_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> rangeset_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | boundaries_begin(map) -> boundaries_iterator_t + | + | __clear = + | boundaries_clear(map) + | + | __end = + | boundaries_end(map) -> boundaries_iterator_t + | + | __erase = + | boundaries_erase(map, p) + | + | __find = + | boundaries_find(map, key) -> boundaries_iterator_t + | + | __first = + | boundaries_first(p) -> cinsn_t + | + | __insert = + | boundaries_insert(map, key, val) -> boundaries_iterator_t + | + | __next = + | boundaries_next(p) -> boundaries_iterator_t + | + | __second = + | boundaries_second(p) -> rangeset_t + | + | __size = + | boundaries_size(map) -> size_t + | + | __swig_destroy__ = + | delete_boundaries_t(self) + | + | keytype = + | Proxy of C++ cinsn_t class. + | + | valuetype = + | Proxy of C++ rangeset_t class. + +Help on function call_helper in module ida_hexrays: + +call_helper(rettype, args, *rest) + +Help on class carg_t in module ida_hexrays: + +class carg_t(cexpr_t) + | Proxy of C++ carg_t class. + | + | Method resolution order: + | carg_t + | cexpr_t + | citem_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> carg_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | consume_cexpr(self, *args) + | consume_cexpr(self, e) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | formal_type + | carg_t_formal_type_get(self) -> tinfo_t + | + | is_vararg + | carg_t_is_vararg_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_carg_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from cexpr_t: + | + | _deregister(self, *args) + | _deregister(self) + | + | _get_a(self, *args) + | _get_a(self) -> carglist_t + | + | _get_fpc(self, *args) + | _get_fpc(self) -> fnumber_t + | + | _get_helper(self, *args) + | _get_helper(self) -> char * + | + | _get_insn(self, *args) + | _get_insn(self) -> cinsn_t + | + | _get_m(self, *args) + | _get_m(self) -> int + | + | _get_n(self, *args) + | _get_n(self) -> cnumber_t + | + | _get_obj_ea(self, *args) + | _get_obj_ea(self) -> ea_t + | + | _get_ptrsize(self, *args) + | _get_ptrsize(self) -> int + | + | _get_refwidth(self, *args) + | _get_refwidth(self) -> int + | + | _get_string(self, *args) + | _get_string(self) -> char * + | + | _get_x(self, *args) + | _get_x(self) -> cexpr_t + | + | _get_y(self, *args) + | _get_y(self) -> cexpr_t + | + | _get_z(self, *args) + | _get_z(self) -> cexpr_t + | + | _register(self, *args) + | _register(self) + | + | _replace_by(self, *args) + | _replace_by(self, r) + | + | _set_a(self, *args) + | _set_a(self, _v) + | + | _set_fpc(self, *args) + | _set_fpc(self, _v) + | + | _set_helper(self, *args) + | _set_helper(self, _v) + | + | _set_insn(self, *args) + | _set_insn(self, _v) + | + | _set_m(self, *args) + | _set_m(self, _v) + | + | _set_n(self, *args) + | _set_n(self, _v) + | + | _set_obj_ea(self, *args) + | _set_obj_ea(self, _v) + | + | _set_ptrsize(self, *args) + | _set_ptrsize(self, _v) + | + | _set_refwidth(self, *args) + | _set_refwidth(self, _v) + | + | _set_string(self, *args) + | _set_string(self, _v) + | + | _set_x(self, *args) + | _set_x(self, _v) + | + | _set_y(self, *args) + | _set_y(self, _v) + | + | _set_z(self, *args) + | _set_z(self, _v) + | + | assign(self, *args) + | assign(self, r) -> cexpr_t + | + | calc_type(self, *args) + | calc_type(self, recursive) + | + | cleanup(self, *args) + | cleanup(self) + | + | contains_comma(self, *args) + | contains_comma(self, times=1) -> bool + | + | contains_comma_or_insn_or_label(self, *args) + | contains_comma_or_insn_or_label(self, maxcommas=1) -> bool + | + | contains_insn(self, *args) + | contains_insn(self, times=1) -> bool + | + | contains_insn_or_label(self, *args) + | contains_insn_or_label(self) -> bool + | + | contains_operator(self, *args) + | contains_operator(self, needed_op, times=1) -> bool + | + | cpadone(self, *args) + | cpadone(self) -> bool + | + | equal_effect(self, *args) + | equal_effect(self, r) -> bool + | + | find_num_op(self, *args) + | find_num_op(self) -> cexpr_t + | find_num_op(self) -> cexpr_t + | + | find_op(self, *args) + | find_op(self, _op) -> cexpr_t + | find_op(self, _op) -> cexpr_t + | + | get_1num_op(self, *args) + | get_1num_op(self, o1, o2) -> bool + | + | get_const_value(self, *args) + | get_const_value(self) -> bool + | + | get_high_nbit_bound(self, *args) + | get_high_nbit_bound(self) -> bit_bound_t + | + | get_low_nbit_bound(self, *args) + | get_low_nbit_bound(self) -> int + | + | get_ptr_or_array(self, *args) + | get_ptr_or_array(self) -> cexpr_t + | + | get_type_sign(self, *args) + | get_type_sign(self) -> type_sign_t + | + | get_v(self, *args) + | get_v(self) -> var_ref_t + | + | has_side_effects(self, *args) + | has_side_effects(self) -> bool + | + | is_call_arg_of(self, *args) + | is_call_arg_of(self, parent) -> bool + | + | is_call_object_of(self, *args) + | is_call_object_of(self, parent) -> bool + | + | is_child_of(self, *args) + | is_child_of(self, parent) -> bool + | + | is_const_value(self, *args) + | is_const_value(self, _v) -> bool + | + | is_cstr(self, *args) + | is_cstr(self) -> bool + | + | is_fpop(self, *args) + | is_fpop(self) -> bool + | + | is_jumpout(self, *args) + | is_jumpout(self) -> bool + | + | is_negative_const(self, *args) + | is_negative_const(self) -> bool + | + | is_nice_cond(self, *args) + | is_nice_cond(self) -> bool + | + | is_nice_expr(self, *args) + | is_nice_expr(self) -> bool + | + | is_non_negative_const(self, *args) + | is_non_negative_const(self) -> bool + | + | is_non_zero_const(self, *args) + | is_non_zero_const(self) -> bool + | + | is_odd_lvalue(self, *args) + | is_odd_lvalue(self) -> bool + | + | is_type_signed(self, *args) + | is_type_signed(self) -> bool + | + | is_type_unsigned(self, *args) + | is_type_unsigned(self) -> bool + | + | is_undef_val(self, *args) + | is_undef_val(self) -> bool + | + | is_vftable(self, *args) + | is_vftable(self) -> bool + | + | is_zero_const(self, *args) + | is_zero_const(self) -> bool + | + | maybe_ptr(self, *args) + | maybe_ptr(self) -> bool + | + | numval(self, *args) + | numval(self) -> uint64 + | + | print1(self, *args) + | print1(self, func) + | + | put_number(self, *args) + | put_number(self, func, value, nbytes, sign=no_sign) + | + | requires_lvalue(self, *args) + | requires_lvalue(self, child) -> bool + | + | set_cpadone(self, *args) + | set_cpadone(self) + | + | set_v(self, *args) + | set_v(self, v) + | + | set_vftable(self, *args) + | set_vftable(self) + | + | swap(self, *args) + | swap(self, r) + | + | theother(self, *args) + | theother(self, what) -> cexpr_t + | theother(self, what) -> cexpr_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cexpr_t: + | + | a + | + | exflags + | cexpr_t_exflags_get(self) -> uint32 + | + | fpc + | + | helper + | + | insn + | + | m + | + | n + | + | obj_ea + | + | operands + | return a dictionary with the operands of a cexpr_t. + | + | opname + | + | ptrsize + | + | refwidth + | + | string + | + | type + | cexpr_t_type_get(self) -> tinfo_t + | + | v + | + | x + | + | y + | + | z + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from cexpr_t: + | + | op_to_typename = {0: 'empty', 1: 'comma', 2: 'asg', 3: 'asgbor', 4: 'a... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) + | _set_op(self, v) + | + | contains_expr(self, *args) + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class carglist_t in module ida_hexrays: + +class carglist_t(qvector_carg_t) + | Proxy of C++ carglist_t class. + | + | Method resolution order: + | carglist_t + | qvector_carg_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> carglist_t + | __init__(self, ftype, fl=0) -> carglist_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | carglist_t_flags_get(self) -> int + | + | functype + | carglist_t_functype_get(self) -> tinfo_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_carglist_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_carg_t: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> carg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> carg_t + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> carg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> carg_t + | begin(self) -> carg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> carg_t + | end(self) -> carg_t + | + | erase(self, *args) + | erase(self, it) -> carg_t + | erase(self, first, last) -> carg_t + | + | extract(self, *args) + | extract(self) -> carg_t + | + | find(self, *args) + | find(self, x) -> carg_t + | find(self, x) -> carg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=carg_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> carg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> carg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_carg_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class casm_t in module ida_hexrays: + +class casm_t(ida_pro.eavec_t)↗ + | Proxy of C++ casm_t class. + | + | Method resolution order: + | casm_t + | ida_pro.eavec_t↗ + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, ea) -> casm_t + | __init__(self, r) -> casm_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | one_insn(self, *args) + | one_insn(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_casm_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_pro.eavec_t:↗ + | + | __getitem__(self, *args) + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> unsigned-ea-like-numeric-type &↗ + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | begin(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | end(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | erase(self, *args) + | erase(self, it) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | erase(self, first, last) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | + | extract(self, *args) + | extract(self) -> unsigned-ea-like-numeric-type *↗ + | + | find(self, *args) + | find(self, x) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | find(self, x) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> unsigned-ea-like-numeric-type &↗ + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_pro.eavec_t:↗ + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function cblock_at in module ida_hexrays: + +cblock_at(self, index) + # cblock.at(int) -> returns the item at the given index index + +Help on function cblock_find in module ida_hexrays: + +cblock_find(self, item) + # cblock.find(cinsn_t) -> returns the iterator positioned at the given item + +Help on function cblock_index in module ida_hexrays: + +cblock_index(self, item) + # cblock.index(cinsn_t) -> returns the index of the given item + +Help on function cblock_insert in module ida_hexrays: + +cblock_insert(self, index, item) + # cblock.insert(index, cinsn_t) + +Help on function cblock_iter in module ida_hexrays: + +cblock_iter(self) + +Help on function cblock_remove in module ida_hexrays: + +cblock_remove(self, item) + # cblock.remove(cinsn_t) + +Help on class cblock_t in module ida_hexrays: + +class cblock_t(qlist_cinsn_t) + | Proxy of C++ cblock_t class. + | + | Method resolution order: + | cblock_t + | qlist_cinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cblock_t + | + | __iter__ = cblock_iter(self) + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _deregister(self, *args) + | _deregister(self) + | + | at = cblock_at(self, index) + | # cblock.at(int) -> returns the item at the given index index + | + | compare(self, *args) + | compare(self, r) -> int + | + | find = cblock_find(self, item) + | # cblock.find(cinsn_t) -> returns the iterator positioned at the given item + | + | index = cblock_index(self, item) + | # cblock.index(cinsn_t) -> returns the index of the given item + | + | insert = cblock_insert(self, index, item) + | # cblock.insert(index, cinsn_t) + | + | remove = cblock_remove(self, item) + | # cblock.remove(cinsn_t) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cblock_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from qlist_cinsn_t: + | + | back(self, *args) + | back(self) -> cinsn_t + | back(self) -> cinsn_t + | + | begin(self, *args) + | begin(self) -> qlist_cinsn_t_iterator + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qlist_cinsn_t_iterator + | + | erase(self, *args) + | erase(self, p) -> qlist< cinsn_t >::iterator + | erase(self, p1, p2) + | erase(self, p) + | + | front(self, *args) + | front(self) -> cinsn_t + | front(self) -> cinsn_t + | + | pop_back(self, *args) + | pop_back(self) + | + | pop_front(self, *args) + | pop_front(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> cinsn_t + | + | push_front(self, *args) + | push_front(self, x) + | + | rbegin(self, *args) + | rbegin(self) -> qlist< cinsn_t >::reverse_iterator + | rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | rend(self, *args) + | rend(self) -> qlist< cinsn_t >::reverse_iterator + | rend(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, x) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qlist_cinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class ccase_t in module ida_hexrays: + +class ccase_t(cinsn_t) + | Proxy of C++ ccase_t class. + | + | Method resolution order: + | ccase_t + | cinsn_t + | citem_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ccase_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | size(self, *args) + | size(self) -> size_t + | + | value(self, *args) + | value(self, i) -> uint64 const & + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | values + | ccase_t_values_get(self) -> ulonglongvec_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ccase_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from cinsn_t: + | + | _deregister(self, *args) + | _deregister(self) + | + | _get_casm(self, *args) + | _get_casm(self) -> casm_t + | + | _get_cblock(self, *args) + | _get_cblock(self) -> cblock_t + | + | _get_cdo(self, *args) + | _get_cdo(self) -> cdo_t + | + | _get_cexpr(self, *args) + | _get_cexpr(self) -> cexpr_t + | + | _get_cfor(self, *args) + | _get_cfor(self) -> cfor_t + | + | _get_cgoto(self, *args) + | _get_cgoto(self) -> cgoto_t + | + | _get_cif(self, *args) + | _get_cif(self) -> cif_t + | + | _get_creturn(self, *args) + | _get_creturn(self) -> creturn_t + | + | _get_cswitch(self, *args) + | _get_cswitch(self) -> cswitch_t + | + | _get_cwhile(self, *args) + | _get_cwhile(self) -> cwhile_t + | + | _print(self, *args) + | _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) + | + | _register(self, *args) + | _register(self) + | + | _replace_by(self, *args) + | _replace_by(self, r) + | + | _set_casm(self, *args) + | _set_casm(self, _v) + | + | _set_cblock(self, *args) + | _set_cblock(self, _v) + | + | _set_cdo(self, *args) + | _set_cdo(self, _v) + | + | _set_cexpr(self, *args) + | _set_cexpr(self, _v) + | + | _set_cfor(self, *args) + | _set_cfor(self, _v) + | + | _set_cgoto(self, *args) + | _set_cgoto(self, _v) + | + | _set_cif(self, *args) + | _set_cif(self, _v) + | + | _set_creturn(self, *args) + | _set_creturn(self, _v) + | + | _set_cswitch(self, *args) + | _set_cswitch(self, _v) + | + | _set_cwhile(self, *args) + | _set_cwhile(self, _v) + | + | assign(self, *args) + | assign(self, r) -> cinsn_t + | + | cleanup(self, *args) + | cleanup(self) + | + | collect_free_breaks(self, *args) + | collect_free_breaks(self, breaks) -> bool + | + | collect_free_continues(self, *args) + | collect_free_continues(self, continues) -> bool + | + | contains_free_break(self, *args) + | contains_free_break(self) -> bool + | + | contains_free_continue(self, *args) + | contains_free_continue(self) -> bool + | + | contains_insn(self, *args) + | contains_insn(self, type, times=1) -> bool + | + | create_if(self, *args) + | create_if(self, cnd) -> cif_t + | + | is_epilog(self) + | + | is_ordinary_flow(self, *args) + | is_ordinary_flow(self) -> bool + | + | new_insn(self, *args) + | new_insn(self, insn_ea) -> cinsn_t + | + | print1(self, *args) + | print1(self, func) + | + | swap(self, *args) + | swap(self, r) + | + | zero(self, *args) + | zero(self) + | + | ---------------------------------------------------------------------- + | Static methods inherited from cinsn_t: + | + | insn_is_epilog(*args) + | insn_is_epilog(insn) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cinsn_t: + | + | casm + | + | cblock + | + | cdo + | + | cexpr + | + | cfor + | + | cgoto + | + | cif + | + | creturn + | + | cswitch + | + | cwhile + | + | details + | return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + | + | opname + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from cinsn_t: + | + | op_to_typename = {70: 'empty', 71: 'block', 72: 'expr', 73: 'if', 74: ... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) + | _set_op(self, v) + | + | contains_expr(self, *args) + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class ccases_t in module ida_hexrays: + +class ccases_t(qvector_ccase_t) + | Proxy of C++ ccases_t class. + | + | Method resolution order: + | ccases_t + | qvector_ccase_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ccases_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ccases_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_ccase_t: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> ccase_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ccase_t + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> ccase_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> ccase_t + | begin(self) -> ccase_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ccase_t + | end(self) -> ccase_t + | + | erase(self, *args) + | erase(self, it) -> ccase_t + | erase(self, first, last) -> ccase_t + | + | extract(self, *args) + | extract(self) -> ccase_t + | + | find(self, *args) + | find(self, x) -> ccase_t + | find(self, x) -> ccase_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=ccase_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> ccase_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ccase_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_ccase_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class cdg_insn_iterator_t in module ida_hexrays: + +class cdg_insn_iterator_t(__builtin__.object) + | Proxy of C++ cdg_insn_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cdg_insn_iterator_t + | __init__(self, r) -> cdg_insn_iterator_t + | + | __repr__ = _swig_repr(self) + | + | dslot_with_xrefs(self, *args) + | dslot_with_xrefs(self) -> bool + | + | has_dslot(self, *args) + | has_dslot(self) -> bool + | + | next(self, *args) + | next(self, ins) -> merror_t + | + | ok(self, *args) + | ok(self) -> bool + | + | start(self, *args) + | start(self, rng) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dslot + | cdg_insn_iterator_t_dslot_get(self) -> ea_t + | + | dslot_insn + | cdg_insn_iterator_t_dslot_insn_get(self) -> insn_t * + | + | ea + | cdg_insn_iterator_t_ea_get(self) -> ea_t + | + | end + | cdg_insn_iterator_t_end_get(self) -> ea_t + | + | is_likely_dslot + | cdg_insn_iterator_t_is_likely_dslot_get(self) -> bool + | + | is_separate_dslot + | cdg_insn_iterator_t_is_separate_dslot_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cdg_insn_iterator_t(self) + +Help on class cdo_t in module ida_hexrays: + +class cdo_t(cloop_t) + | Proxy of C++ cdo_t class. + | + | Method resolution order: + | cdo_t + | cloop_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cdo_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cdo_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class ceinsn_t in module ida_hexrays: + +class ceinsn_t(__builtin__.object) + | Proxy of C++ ceinsn_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ceinsn_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ceinsn_t(self) + +Help on function cexpr_operands in module ida_hexrays: + +cexpr_operands(self) + return a dictionary with the operands of a cexpr_t. + +Help on class cexpr_t in module ida_hexrays: + +class cexpr_t(citem_t) + | Proxy of C++ cexpr_t class. + | + | Method resolution order: + | cexpr_t + | citem_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cexpr_t + | __init__(self, cop, _x) -> cexpr_t + | __init__(self, cop, _x, _y) -> cexpr_t + | __init__(self, cop, _x, _y, _z) -> cexpr_t + | __init__(self, r) -> cexpr_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _deregister(self, *args) + | _deregister(self) + | + | _get_a(self, *args) + | _get_a(self) -> carglist_t + | + | _get_fpc(self, *args) + | _get_fpc(self) -> fnumber_t + | + | _get_helper(self, *args) + | _get_helper(self) -> char * + | + | _get_insn(self, *args) + | _get_insn(self) -> cinsn_t + | + | _get_m(self, *args) + | _get_m(self) -> int + | + | _get_n(self, *args) + | _get_n(self) -> cnumber_t + | + | _get_obj_ea(self, *args) + | _get_obj_ea(self) -> ea_t + | + | _get_ptrsize(self, *args) + | _get_ptrsize(self) -> int + | + | _get_refwidth(self, *args) + | _get_refwidth(self) -> int + | + | _get_string(self, *args) + | _get_string(self) -> char * + | + | _get_x(self, *args) + | _get_x(self) -> cexpr_t + | + | _get_y(self, *args) + | _get_y(self) -> cexpr_t + | + | _get_z(self, *args) + | _get_z(self) -> cexpr_t + | + | _register(self, *args) + | _register(self) + | + | _replace_by(self, *args) + | _replace_by(self, r) + | + | _set_a(self, *args) + | _set_a(self, _v) + | + | _set_fpc(self, *args) + | _set_fpc(self, _v) + | + | _set_helper(self, *args) + | _set_helper(self, _v) + | + | _set_insn(self, *args) + | _set_insn(self, _v) + | + | _set_m(self, *args) + | _set_m(self, _v) + | + | _set_n(self, *args) + | _set_n(self, _v) + | + | _set_obj_ea(self, *args) + | _set_obj_ea(self, _v) + | + | _set_ptrsize(self, *args) + | _set_ptrsize(self, _v) + | + | _set_refwidth(self, *args) + | _set_refwidth(self, _v) + | + | _set_string(self, *args) + | _set_string(self, _v) + | + | _set_x(self, *args) + | _set_x(self, _v) + | + | _set_y(self, *args) + | _set_y(self, _v) + | + | _set_z(self, *args) + | _set_z(self, _v) + | + | assign(self, *args) + | assign(self, r) -> cexpr_t + | + | calc_type(self, *args) + | calc_type(self, recursive) + | + | cleanup(self, *args) + | cleanup(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains_comma(self, *args) + | contains_comma(self, times=1) -> bool + | + | contains_comma_or_insn_or_label(self, *args) + | contains_comma_or_insn_or_label(self, maxcommas=1) -> bool + | + | contains_insn(self, *args) + | contains_insn(self, times=1) -> bool + | + | contains_insn_or_label(self, *args) + | contains_insn_or_label(self) -> bool + | + | contains_operator(self, *args) + | contains_operator(self, needed_op, times=1) -> bool + | + | cpadone(self, *args) + | cpadone(self) -> bool + | + | equal_effect(self, *args) + | equal_effect(self, r) -> bool + | + | find_num_op(self, *args) + | find_num_op(self) -> cexpr_t + | find_num_op(self) -> cexpr_t + | + | find_op(self, *args) + | find_op(self, _op) -> cexpr_t + | find_op(self, _op) -> cexpr_t + | + | get_1num_op(self, *args) + | get_1num_op(self, o1, o2) -> bool + | + | get_const_value(self, *args) + | get_const_value(self) -> bool + | + | get_high_nbit_bound(self, *args) + | get_high_nbit_bound(self) -> bit_bound_t + | + | get_low_nbit_bound(self, *args) + | get_low_nbit_bound(self) -> int + | + | get_ptr_or_array(self, *args) + | get_ptr_or_array(self) -> cexpr_t + | + | get_type_sign(self, *args) + | get_type_sign(self) -> type_sign_t + | + | get_v(self, *args) + | get_v(self) -> var_ref_t + | + | has_side_effects(self, *args) + | has_side_effects(self) -> bool + | + | is_call_arg_of(self, *args) + | is_call_arg_of(self, parent) -> bool + | + | is_call_object_of(self, *args) + | is_call_object_of(self, parent) -> bool + | + | is_child_of(self, *args) + | is_child_of(self, parent) -> bool + | + | is_const_value(self, *args) + | is_const_value(self, _v) -> bool + | + | is_cstr(self, *args) + | is_cstr(self) -> bool + | + | is_fpop(self, *args) + | is_fpop(self) -> bool + | + | is_jumpout(self, *args) + | is_jumpout(self) -> bool + | + | is_negative_const(self, *args) + | is_negative_const(self) -> bool + | + | is_nice_cond(self, *args) + | is_nice_cond(self) -> bool + | + | is_nice_expr(self, *args) + | is_nice_expr(self) -> bool + | + | is_non_negative_const(self, *args) + | is_non_negative_const(self) -> bool + | + | is_non_zero_const(self, *args) + | is_non_zero_const(self) -> bool + | + | is_odd_lvalue(self, *args) + | is_odd_lvalue(self) -> bool + | + | is_type_signed(self, *args) + | is_type_signed(self) -> bool + | + | is_type_unsigned(self, *args) + | is_type_unsigned(self) -> bool + | + | is_undef_val(self, *args) + | is_undef_val(self) -> bool + | + | is_vftable(self, *args) + | is_vftable(self) -> bool + | + | is_zero_const(self, *args) + | is_zero_const(self) -> bool + | + | maybe_ptr(self, *args) + | maybe_ptr(self) -> bool + | + | numval(self, *args) + | numval(self) -> uint64 + | + | print1(self, *args) + | print1(self, func) + | + | put_number(self, *args) + | put_number(self, func, value, nbytes, sign=no_sign) + | + | requires_lvalue(self, *args) + | requires_lvalue(self, child) -> bool + | + | set_cpadone(self, *args) + | set_cpadone(self) + | + | set_v(self, *args) + | set_v(self, v) + | + | set_vftable(self, *args) + | set_vftable(self) + | + | swap(self, *args) + | swap(self, r) + | + | theother(self, *args) + | theother(self, what) -> cexpr_t + | theother(self, what) -> cexpr_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | a + | + | exflags + | cexpr_t_exflags_get(self) -> uint32 + | + | fpc + | + | helper + | + | insn + | + | m + | + | n + | + | obj_ea + | + | operands + | return a dictionary with the operands of a cexpr_t. + | + | opname + | + | ptrsize + | + | refwidth + | + | string + | + | thisown + | The membership flag + | + | type + | cexpr_t_type_get(self) -> tinfo_t + | + | v + | + | x + | + | y + | + | z + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cexpr_t(self) + | + | op_to_typename = {0: 'empty', 1: 'comma', 2: 'asg', 3: 'asgbor', 4: 'a... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) + | _set_op(self, v) + | + | contains_expr(self, *args) + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class cfor_t in module ida_hexrays: + +class cfor_t(cloop_t) + | Proxy of C++ cfor_t class. + | + | Method resolution order: + | cfor_t + | cloop_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cfor_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | init + | cfor_t_init_get(self) -> cexpr_t + | + | step + | cfor_t_step_get(self) -> cexpr_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cfor_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class cfunc_parentee_t in module ida_hexrays: + +class cfunc_parentee_t(ctree_parentee_t) + | Proxy of C++ cfunc_parentee_t class. + | + | Method resolution order: + | cfunc_parentee_t + | ctree_parentee_t + | ctree_visitor_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, f, post=False) -> cfunc_parentee_t + | + | __repr__ = _swig_repr(self) + | + | calc_rvalue_type(self, *args) + | calc_rvalue_type(self, target, e) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | func + | cfunc_parentee_t_func_get(self) -> cfunc_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cfunc_parentee_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_parentee_t: + | + | recalc_parent_types(self, *args) + | recalc_parent_types(self) -> bool + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_visitor_t: + | + | apply_to(self, *args) + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) + | clr_prune(self) + | + | clr_restart(self, *args) + | clr_restart(self) + | + | is_postorder(self, *args) + | is_postorder(self) -> bool + | + | leave_expr(self, *args) + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) + | maintain_parents(self) -> bool + | + | must_prune(self, *args) + | must_prune(self) -> bool + | + | must_restart(self, *args) + | must_restart(self) -> bool + | + | only_insns(self, *args) + | only_insns(self) -> bool + | + | parent_expr(self, *args) + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) + | prune_now(self) + | + | set_restart(self, *args) + | set_restart(self) + | + | visit_expr(self, *args) + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctree_visitor_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + +Help on class cfunc_t in module ida_hexrays: + +class cfunc_t(__builtin__.object) + | Proxy of C++ cfunc_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) + | __str__(self) -> qstring + | + | build_c_tree(self, *args) + | build_c_tree(self) + | + | del_orphan_cmts(self, *args) + | del_orphan_cmts(self) -> int + | + | find_item_coords(self, *args) + | find_item_coords(self, item, px, py) -> bool + | find_item_coords(self, item) -> PyObject * + | + | find_label(self, *args) + | find_label(self, label) -> citem_t + | + | gather_derefs(self, *args) + | gather_derefs(self, ci, udm=None) -> bool + | + | get_boundaries(self, *args) + | get_boundaries(self) -> boundaries_t + | + | get_eamap(self, *args) + | get_eamap(self) -> eamap_t + | + | get_func_type(self, *args) + | get_func_type(self, type) -> bool + | + | get_line_item(self, *args) + | get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool + | + | get_lvars(self, *args) + | get_lvars(self) -> lvars_t + | + | get_pseudocode(self, *args) + | get_pseudocode(self) -> strvec_t + | + | get_stkoff_delta(self, *args) + | get_stkoff_delta(self) -> sval_t + | + | get_user_cmt(self, *args) + | get_user_cmt(self, loc, rt) -> char const * + | + | get_user_iflags(self, *args) + | get_user_iflags(self, loc) -> int32 + | + | get_user_union_selection(self, *args) + | get_user_union_selection(self, ea, path) -> bool + | + | get_warnings(self, *args) + | get_warnings(self) -> hexwarns_t + | + | has_orphan_cmts(self, *args) + | has_orphan_cmts(self) -> bool + | + | print_dcl(self, *args) + | print_dcl(self) + | + | print_func(self, *args) + | print_func(self, vp) + | + | refresh_func_ctext(self, *args) + | refresh_func_ctext(self) + | + | release(self, *args) + | release(self) + | + | remove_unused_labels(self, *args) + | remove_unused_labels(self) + | + | save_user_cmts(self, *args) + | save_user_cmts(self) + | + | save_user_iflags(self, *args) + | save_user_iflags(self) + | + | save_user_labels(self, *args) + | save_user_labels(self) + | + | save_user_numforms(self, *args) + | save_user_numforms(self) + | + | save_user_unions(self, *args) + | save_user_unions(self) + | + | set_user_cmt(self, *args) + | set_user_cmt(self, loc, cmt) + | + | set_user_iflags(self, *args) + | set_user_iflags(self, loc, iflags) + | + | set_user_union_selection(self, *args) + | set_user_union_selection(self, ea, path) + | + | verify(self, *args) + | verify(self, aul, even_without_debugger) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argidx + | cfunc_t_argidx_get(self) -> intvec_t + | + | arguments + | + | body + | cfunc_t_body_get(self) -> cinsn_t + | + | boundaries + | get_boundaries(self) -> boundaries_t + | + | eamap + | get_eamap(self) -> eamap_t + | + | entry_ea + | cfunc_t_entry_ea_get(self) -> ea_t + | + | hdrlines + | cfunc_t_hdrlines_get(self) -> int + | + | lvars + | get_lvars(self) -> lvars_t + | + | maturity + | cfunc_t_maturity_get(self) -> ctree_maturity_t + | + | mba + | cfunc_t_mba_get(self) -> mbl_array_t + | + | numforms + | cfunc_t_numforms_get(self) -> user_numforms_t + | + | pseudocode + | get_pseudocode(self) -> strvec_t + | + | refcnt + | cfunc_t_refcnt_get(self) -> int + | + | statebits + | cfunc_t_statebits_get(self) -> int + | + | thisown + | The membership flag + | + | treeitems + | cfunc_t_treeitems_get(self) -> ctree_items_t + | + | type + | Get the function's return type tinfo_t object. + | + | user_cmts + | cfunc_t_user_cmts_get(self) -> user_cmts_t + | + | user_iflags + | cfunc_t_user_iflags_get(self) -> user_iflags_t + | + | user_labels + | cfunc_t_user_labels_get(self) -> user_labels_t + | + | user_unions + | cfunc_t_user_unions_get(self) -> user_unions_t + | + | warnings + | get_warnings(self) -> hexwarns_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cfunc_t(self) + +Help on function cfunc_type in module ida_hexrays: + +cfunc_type(self) + Get the function's return type tinfo_t object. + +Help on class cfuncptr_t in module ida_hexrays: + +class cfuncptr_t(__builtin__.object) + | Proxy of C++ qrefcnt_t< cfunc_t > class. + | + | Methods defined here: + | + | __deref__(self, *args) + | __deref__(self) -> cfunc_t + | + | __eq__ lambda self, other + | + | __init__(self, *args) + | __init__(self, p) -> cfuncptr_t + | __init__(self, r) -> cfuncptr_t + | + | __ptrval__(self, *args) + | __ptrval__(self) -> size_t + | + | __ref__(self, *args) + | __ref__(self) -> cfunc_t + | + | __repr__ = _swig_repr(self) + | + | __str__ lambda self + | + | build_c_tree(self, *args) + | build_c_tree(self) + | + | del_orphan_cmts(self, *args) + | del_orphan_cmts(self) -> int + | + | find_item_coords(self, *args) + | find_item_coords(self, item, px, py) -> bool + | find_item_coords(self, item) -> PyObject * + | + | find_label(self, *args) + | find_label(self, label) -> citem_t + | + | gather_derefs(self, *args) + | gather_derefs(self, ci, udm=None) -> bool + | + | get_boundaries(self, *args) + | get_boundaries(self) -> boundaries_t + | + | get_eamap(self, *args) + | get_eamap(self) -> eamap_t + | + | get_func_type(self, *args) + | get_func_type(self, type) -> bool + | + | get_line_item(self, *args) + | get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool + | + | get_lvars(self, *args) + | get_lvars(self) -> lvars_t + | + | get_pseudocode(self, *args) + | get_pseudocode(self) -> strvec_t + | + | get_stkoff_delta(self, *args) + | get_stkoff_delta(self) -> sval_t + | + | get_user_cmt(self, *args) + | get_user_cmt(self, loc, rt) -> char const * + | + | get_user_iflags(self, *args) + | get_user_iflags(self, loc) -> int32 + | + | get_user_union_selection(self, *args) + | get_user_union_selection(self, ea, path) -> bool + | + | get_warnings(self, *args) + | get_warnings(self) -> hexwarns_t + | + | has_orphan_cmts(self, *args) + | has_orphan_cmts(self) -> bool + | + | print_dcl(self, *args) + | print_dcl(self) + | + | print_func(self, *args) + | print_func(self, vp) + | + | refresh_func_ctext(self, *args) + | refresh_func_ctext(self) + | + | release(self, *args) + | release(self) + | + | remove_unused_labels(self, *args) + | remove_unused_labels(self) + | + | reset(self, *args) + | reset(self) + | + | save_user_cmts(self, *args) + | save_user_cmts(self) + | + | save_user_iflags(self, *args) + | save_user_iflags(self) + | + | save_user_labels(self, *args) + | save_user_labels(self) + | + | save_user_numforms(self, *args) + | save_user_numforms(self) + | + | save_user_unions(self, *args) + | save_user_unions(self) + | + | set_user_cmt(self, *args) + | set_user_cmt(self, loc, cmt) + | + | set_user_iflags(self, *args) + | set_user_iflags(self, loc, iflags) + | + | set_user_union_selection(self, *args) + | set_user_union_selection(self, ea, path) + | + | verify(self, *args) + | verify(self, aul, even_without_debugger) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argidx + | cfuncptr_t_argidx_get(self) -> intvec_t + | + | arguments + | + | body + | cfuncptr_t_body_get(self) -> cinsn_t + | + | boundaries + | + | eamap + | + | entry_ea + | cfuncptr_t_entry_ea_get(self) -> ea_t + | + | hdrlines + | cfuncptr_t_hdrlines_get(self) -> int + | + | lvars + | + | maturity + | cfuncptr_t_maturity_get(self) -> ctree_maturity_t + | + | mba + | cfuncptr_t_mba_get(self) -> mbl_array_t + | + | numforms + | cfuncptr_t_numforms_get(self) -> user_numforms_t + | + | pseudocode + | + | refcnt + | cfuncptr_t_refcnt_get(self) -> int + | + | statebits + | cfuncptr_t_statebits_get(self) -> int + | + | thisown + | The membership flag + | + | treeitems + | cfuncptr_t_treeitems_get(self) -> ctree_items_t + | + | type + | + | user_cmts + | cfuncptr_t_user_cmts_get(self) -> user_cmts_t + | + | user_iflags + | cfuncptr_t_user_iflags_get(self) -> user_iflags_t + | + | user_labels + | cfuncptr_t_user_labels_get(self) -> user_labels_t + | + | user_unions + | cfuncptr_t_user_unions_get(self) -> user_unions_t + | + | warnings + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cfuncptr_t(self) + +Help on class cgoto_t in module ida_hexrays: + +class cgoto_t(__builtin__.object) + | Proxy of C++ cgoto_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cgoto_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | label_num + | cgoto_t_label_num_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cgoto_t(self) + +Help on class chain_keeper_t in module ida_hexrays: + +class chain_keeper_t(__builtin__.object) + | Proxy of C++ chain_keeper_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _gc) -> chain_keeper_t + | + | __repr__ = _swig_repr(self) + | + | back(self, *args) + | back(self) -> block_chains_t + | + | for_all_chains(self, *args) + | for_all_chains(self, cv, gca) -> int + | + | front(self, *args) + | front(self) -> block_chains_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_chain_keeper_t(self) + +Help on class chain_t in module ida_hexrays: + +class chain_t(ida_pro.intvec_t) + | Proxy of C++ chain_t class. + | + | Method resolution order: + | chain_t + | ida_pro.intvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> chain_t + | __init__(self, t, off, w=1, v=-1) -> chain_t + | __init__(self, _k, w=1) -> chain_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | append_list(self, *args) + | append_list(self, list) + | + | clear_varnum(self, *args) + | clear_varnum(self) + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | endoff(self, *args) + | endoff(self) -> voff_t + | + | get_reg(self, *args) + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) + | get_stkoff(self) -> sval_t + | + | includes(self, *args) + | includes(self, r) -> bool + | + | is_fake(self, *args) + | is_fake(self) -> bool + | + | is_inited(self, *args) + | is_inited(self) -> bool + | + | is_overlapped(self, *args) + | is_overlapped(self) -> bool + | + | is_passreg(self, *args) + | is_passreg(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_replaced(self, *args) + | is_replaced(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | is_term(self, *args) + | is_term(self) -> bool + | + | key(self, *args) + | key(self) -> voff_t + | + | overlap(self, *args) + | overlap(self, r) -> bool + | + | set_inited(self, *args) + | set_inited(self, b) + | + | set_overlapped(self, *args) + | set_overlapped(self, b) + | + | set_replaced(self, *args) + | set_replaced(self, b) + | + | set_term(self, *args) + | set_term(self, b) + | + | set_value(self, *args) + | set_value(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | chain_t_flags_get(self) -> uchar + | + | thisown + | The membership flag + | + | varnum + | chain_t_varnum_get(self) -> int + | + | width + | chain_t_width_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_chain_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_pro.intvec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> int const & + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> int & + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> int const & + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< int >::iterator + | begin(self) -> qvector< int >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< int >::iterator + | end(self) -> qvector< int >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< int >::iterator + | erase(self, first, last) -> qvector< int >::iterator + | + | extract(self, *args) + | extract(self) -> int * + | + | find(self, *args) + | find(self, x) -> qvector< int >::iterator + | find(self, x) -> qvector< int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< int >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> int & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_pro.intvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class chain_visitor_t in module ida_hexrays: + +class chain_visitor_t(__builtin__.object) + | Proxy of C++ chain_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> chain_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_chain(self, *args) + | visit_chain(self, nblock, ch) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | parent + | chain_visitor_t_parent_get(self) -> block_chains_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_chain_visitor_t(self) + +Help on function checkout_hexrays_license in module ida_hexrays: + +checkout_hexrays_license(*args) + checkout_hexrays_license(silent) -> bool + + + Check out a floating decompiler license. This function will display a + dialog box if the license is not available. For non-floating licenses + this function is effectively no-op. It is not necessary to call this + function before decompiling. If the license was not checked out, the + decompiler will automatically do it. This function can be used to + check out a license in advance and ensure that a license is available. + + @param silent: silently fail if the license can not be checked out. + (C++: bool) + @return: false if failed + +Help on class cif_t in module ida_hexrays: + +class cif_t(ceinsn_t) + | Proxy of C++ cif_t class. + | + | Method resolution order: + | cif_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cif_t + | __init__(self, r) -> cif_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, r) -> cif_t + | + | cleanup(self, *args) + | cleanup(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ielse + | cif_t_ielse_get(self) -> cinsn_t + | + | ithen + | cif_t_ithen_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cif_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function cinsn_details in module ida_hexrays: + +cinsn_details(self) + return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + +Help on class cinsn_t in module ida_hexrays: + +class cinsn_t(citem_t) + | Proxy of C++ cinsn_t class. + | + | Method resolution order: + | cinsn_t + | citem_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cinsn_t + | __init__(self, r) -> cinsn_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _deregister(self, *args) + | _deregister(self) + | + | _get_casm(self, *args) + | _get_casm(self) -> casm_t + | + | _get_cblock(self, *args) + | _get_cblock(self) -> cblock_t + | + | _get_cdo(self, *args) + | _get_cdo(self) -> cdo_t + | + | _get_cexpr(self, *args) + | _get_cexpr(self) -> cexpr_t + | + | _get_cfor(self, *args) + | _get_cfor(self) -> cfor_t + | + | _get_cgoto(self, *args) + | _get_cgoto(self) -> cgoto_t + | + | _get_cif(self, *args) + | _get_cif(self) -> cif_t + | + | _get_creturn(self, *args) + | _get_creturn(self) -> creturn_t + | + | _get_cswitch(self, *args) + | _get_cswitch(self) -> cswitch_t + | + | _get_cwhile(self, *args) + | _get_cwhile(self) -> cwhile_t + | + | _print(self, *args) + | _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) + | + | _register(self, *args) + | _register(self) + | + | _replace_by(self, *args) + | _replace_by(self, r) + | + | _set_casm(self, *args) + | _set_casm(self, _v) + | + | _set_cblock(self, *args) + | _set_cblock(self, _v) + | + | _set_cdo(self, *args) + | _set_cdo(self, _v) + | + | _set_cexpr(self, *args) + | _set_cexpr(self, _v) + | + | _set_cfor(self, *args) + | _set_cfor(self, _v) + | + | _set_cgoto(self, *args) + | _set_cgoto(self, _v) + | + | _set_cif(self, *args) + | _set_cif(self, _v) + | + | _set_creturn(self, *args) + | _set_creturn(self, _v) + | + | _set_cswitch(self, *args) + | _set_cswitch(self, _v) + | + | _set_cwhile(self, *args) + | _set_cwhile(self, _v) + | + | assign(self, *args) + | assign(self, r) -> cinsn_t + | + | cleanup(self, *args) + | cleanup(self) + | + | collect_free_breaks(self, *args) + | collect_free_breaks(self, breaks) -> bool + | + | collect_free_continues(self, *args) + | collect_free_continues(self, continues) -> bool + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains_free_break(self, *args) + | contains_free_break(self) -> bool + | + | contains_free_continue(self, *args) + | contains_free_continue(self) -> bool + | + | contains_insn(self, *args) + | contains_insn(self, type, times=1) -> bool + | + | create_if(self, *args) + | create_if(self, cnd) -> cif_t + | + | is_epilog(self) + | + | is_ordinary_flow(self, *args) + | is_ordinary_flow(self) -> bool + | + | new_insn(self, *args) + | new_insn(self, insn_ea) -> cinsn_t + | + | print1(self, *args) + | print1(self, func) + | + | swap(self, *args) + | swap(self, r) + | + | zero(self, *args) + | zero(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | insn_is_epilog(*args) + | insn_is_epilog(insn) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | casm + | + | cblock + | + | cdo + | + | cexpr + | + | cfor + | + | cgoto + | + | cif + | + | creturn + | + | cswitch + | + | cwhile + | + | details + | return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + | + | opname + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cinsn_t(self) + | + | op_to_typename = {70: 'empty', 71: 'block', 72: 'expr', 73: 'if', 74: ... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) + | _set_op(self, v) + | + | contains_expr(self, *args) + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on function cinsn_t_insn_is_epilog in module ida_hexrays: + +cinsn_t_insn_is_epilog(*args) + cinsn_t_insn_is_epilog(insn) -> bool + +Help on class cinsnptrvec_t in module ida_hexrays: + +class cinsnptrvec_t(__builtin__.object) + | Proxy of C++ qvector< cinsn_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> cinsn_t + | + | __init__(self, *args) + | __init__(self) -> cinsnptrvec_t + | __init__(self, x) -> cinsnptrvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< cinsn_t * >::iterator + | begin(self) -> qvector< cinsn_t * >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< cinsn_t * >::iterator + | end(self) -> qvector< cinsn_t * >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< cinsn_t * >::iterator + | erase(self, first, last) -> qvector< cinsn_t * >::iterator + | + | extract(self, *args) + | extract(self) -> cinsn_t ** + | + | find(self, *args) + | find(self, x) -> qvector< cinsn_t * >::iterator + | find(self, x) -> qvector< cinsn_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< cinsn_t * >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> cinsn_t *& + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cinsnptrvec_t(self) + +Help on class citem_cmt_t in module ida_hexrays: + +class citem_cmt_t(__builtin__.object) + | Proxy of C++ citem_cmt_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> citem_cmt_t + | __init__(self, s) -> citem_cmt_t + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) + | __str__(self) -> char const * + | + | c_str(self, *args) + | c_str(self) -> char const * + | + | ---------------------------------------------------------------------- + | 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 + | + | used + | citem_cmt_t_used_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_citem_cmt_t(self) + +Help on class citem_locator_t in module ida_hexrays: + +class citem_locator_t(__builtin__.object) + | Proxy of C++ citem_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _ea, _op) -> citem_locator_t + | __init__(self, i) -> citem_locator_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | citem_locator_t_ea_get(self) -> ea_t + | + | op + | citem_locator_t_op_get(self) -> ctype_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_citem_locator_t(self) + +Help on class citem_t in module ida_hexrays: + +class citem_t(__builtin__.object) + | Proxy of C++ citem_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> citem_t + | __init__(self, o) -> citem_t + | + | __repr__ = _swig_repr(self) + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) + | _set_op(self, v) + | + | contains_expr(self, *args) + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) + | is_expr(self) -> bool + | + | print1(self, *args) + | print1(self, func) + | + | replace_by(self, o) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | thisown + | The membership flag + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_citem_t(self) + +Help on function citem_to_specific_type in module ida_hexrays: + +citem_to_specific_type(self) + cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on function clear_cached_cfuncs in module ida_hexrays: + +clear_cached_cfuncs(*args) + clear_cached_cfuncs() + + + Flush all cached decompilation results. + +Help on class cloop_t in module ida_hexrays: + +class cloop_t(ceinsn_t) + | Proxy of C++ cloop_t class. + | + | Method resolution order: + | cloop_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cloop_t + | __init__(self, b) -> cloop_t + | __init__(self, r) -> cloop_t + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cloop_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function close_pseudocode in module ida_hexrays: + +close_pseudocode(*args) + close_pseudocode(f) -> bool + + + Close pseudocode window. + + @param f: pointer to window (C++: TWidget *) + @return: false if failed + +Help on class cnumber_t in module ida_hexrays: + +class cnumber_t(__builtin__.object) + | Proxy of C++ cnumber_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _opnum=0) -> cnumber_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, type, parent=None, nice_stroff=None) + | + | assign(self, *args) + | assign(self, v, nbytes, sign) + | + | compare(self, *args) + | compare(self, r) -> int + | + | value(self, *args) + | value(self, type) -> uint64 + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _value + | cnumber_t__value_get(self) -> uint64 + | + | nf + | cnumber_t_nf_get(self) -> number_format_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cnumber_t(self) + +Help on class codegen_t in module ida_hexrays: + +class codegen_t(__builtin__.object) + | Proxy of C++ codegen_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, m) -> codegen_t + | + | __repr__ = _swig_repr(self) + | + | analyze_prolog(self, *args) + | analyze_prolog(self, fc, reachable) -> merror_t + | + | emit(self, *args) + | emit(self, code, width, l, r, d, offsize) -> minsn_t + | emit(self, code, l, r, d) -> minsn_t + | + | emit_micro_mvm(self, *args) + | emit_micro_mvm(self, code, dtype, l, r, d, offsize) -> minsn_t + | + | gen_micro(self, *args) + | gen_micro(self) -> merror_t + | + | load_operand(self, *args) + | load_operand(self, opnum) -> mreg_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ignore_micro + | codegen_t_ignore_micro_get(self) -> char + | + | ii + | codegen_t_ii_get(self) -> cdg_insn_iterator_t + | + | insn + | codegen_t_insn_get(self) -> insn_t * + | + | mb + | codegen_t_mb_get(self) -> mblock_t + | + | mba + | codegen_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_codegen_t(self) + +Help on function convert_to_user_call in module ida_hexrays: + +convert_to_user_call(*args) + convert_to_user_call(udc, cdg) -> merror_t + + + try to generate user-defined call for an instruction + + @param udc (C++: const udcall_t &) + @param cdg (C++: codegen_t &) + @return: Microcode error codes code: MERR_OK - user-defined call + generated else - error (MERR_INSN == inacceptable udc.tif) + +Help on function create_field_name in module ida_hexrays: + +create_field_name(*args) + create_field_name(type, offset=BADADDR) -> qstring + +Help on function create_helper in module ida_hexrays: + +create_helper(*args) + +Help on function create_typedef in module ida_hexrays: + +create_typedef(*args) + create_typedef(name) -> tinfo_t + create_typedef(n) -> tinfo_t + + + Create a reference to a named type. + + @param name: type name (C++: const char *) + @return: type which refers to the specified name. For example, if name + is "DWORD", the type info which refers to "DWORD" is created. + +Help on class creturn_t in module ida_hexrays: + +class creturn_t(ceinsn_t) + | Proxy of C++ creturn_t class. + | + | Method resolution order: + | creturn_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> creturn_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_creturn_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class cswitch_t in module ida_hexrays: + +class cswitch_t(ceinsn_t) + | Proxy of C++ cswitch_t class. + | + | Method resolution order: + | cswitch_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cswitch_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cases + | cswitch_t_cases_get(self) -> ccases_t + | + | mvnf + | cswitch_t_mvnf_get(self) -> cnumber_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cswitch_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class ctext_position_t in module ida_hexrays: + +class ctext_position_t(__builtin__.object) + | Proxy of C++ ctext_position_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _lnnum=-1, _x=0, _y=0) -> ctext_position_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | in_ctree(self, *args) + | in_ctree(self, hdrlines) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | ctext_position_t_lnnum_get(self) -> int + | + | thisown + | The membership flag + | + | x + | ctext_position_t_x_get(self) -> int + | + | y + | ctext_position_t_y_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctext_position_t(self) + +Help on class ctree_anchor_t in module ida_hexrays: + +class ctree_anchor_t(__builtin__.object) + | Proxy of C++ ctree_anchor_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ctree_anchor_t + | + | __repr__ = _swig_repr(self) + | + | get_index(self, *args) + | get_index(self) -> int + | + | get_itp(self, *args) + | get_itp(self) -> item_preciser_t + | + | is_blkcmt_anchor(self, *args) + | is_blkcmt_anchor(self) -> bool + | + | is_citem_anchor(self, *args) + | is_citem_anchor(self) -> bool + | + | is_itp_anchor(self, *args) + | is_itp_anchor(self) -> bool + | + | is_lvar_anchor(self, *args) + | is_lvar_anchor(self) -> bool + | + | is_valid_anchor(self, *args) + | is_valid_anchor(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | value + | ctree_anchor_t_value_get(self) -> uval_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctree_anchor_t(self) + +Help on class ctree_item_t in module ida_hexrays: + +class ctree_item_t(__builtin__.object) + | Proxy of C++ ctree_item_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ctree_item_t + | + | __repr__ = _swig_repr(self) + | + | _get_e(self, *args) + | _get_e(self) -> cexpr_t + | + | _get_f(self, *args) + | _get_f(self) -> cfunc_t + | + | _get_i(self, *args) + | _get_i(self) -> cinsn_t + | + | _get_it(self, *args) + | _get_it(self) -> citem_t + | + | _get_l(self, *args) + | _get_l(self) -> lvar_t + | + | get_ea(self, *args) + | get_ea(self) -> ea_t + | + | get_label_num(self, *args) + | get_label_num(self, gln_flags) -> int + | + | get_lvar(self, *args) + | get_lvar(self) -> lvar_t + | + | get_memptr(self, *args) + | get_memptr(self, p_sptr=None) -> member_t * + | + | is_citem(self, *args) + | is_citem(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | citype + | ctree_item_t_citype_get(self) -> cursor_item_type_t + | + | e + | + | f + | + | i + | + | it + | + | l + | + | loc + | ctree_item_t_loc_get(self) -> treeloc_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctree_item_t(self) + +Help on class ctree_items_t in module ida_hexrays: + +class ctree_items_t(__builtin__.object) + | Proxy of C++ qvector< citem_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> citem_t + | + | __init__(self, *args) + | __init__(self) -> ctree_items_t + | __init__(self, x) -> ctree_items_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< citem_t * >::iterator + | begin(self) -> qvector< citem_t * >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< citem_t * >::iterator + | end(self) -> qvector< citem_t * >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< citem_t * >::iterator + | erase(self, first, last) -> qvector< citem_t * >::iterator + | + | extract(self, *args) + | extract(self) -> citem_t ** + | + | find(self, *args) + | find(self, x) -> qvector< citem_t * >::iterator + | find(self, x) -> qvector< citem_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< citem_t * >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> citem_t *& + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctree_items_t(self) + +Help on class ctree_parentee_t in module ida_hexrays: + +class ctree_parentee_t(ctree_visitor_t) + | Proxy of C++ ctree_parentee_t class. + | + | Method resolution order: + | ctree_parentee_t + | ctree_visitor_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, post=False) -> ctree_parentee_t + | + | __repr__ = _swig_repr(self) + | + | recalc_parent_types(self, *args) + | recalc_parent_types(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctree_parentee_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_visitor_t: + | + | apply_to(self, *args) + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) + | clr_prune(self) + | + | clr_restart(self, *args) + | clr_restart(self) + | + | is_postorder(self, *args) + | is_postorder(self) -> bool + | + | leave_expr(self, *args) + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) + | maintain_parents(self) -> bool + | + | must_prune(self, *args) + | must_prune(self) -> bool + | + | must_restart(self, *args) + | must_restart(self) -> bool + | + | only_insns(self, *args) + | only_insns(self) -> bool + | + | parent_expr(self, *args) + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) + | prune_now(self) + | + | set_restart(self, *args) + | set_restart(self) + | + | visit_expr(self, *args) + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctree_visitor_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + +Help on class ctree_visitor_t in module ida_hexrays: + +class ctree_visitor_t(__builtin__.object) + | Proxy of C++ ctree_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags) -> ctree_visitor_t + | + | __repr__ = _swig_repr(self) + | + | apply_to(self, *args) + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) + | clr_prune(self) + | + | clr_restart(self, *args) + | clr_restart(self) + | + | is_postorder(self, *args) + | is_postorder(self) -> bool + | + | leave_expr(self, *args) + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) + | maintain_parents(self) -> bool + | + | must_prune(self, *args) + | must_prune(self) -> bool + | + | must_restart(self, *args) + | must_restart(self) -> bool + | + | only_insns(self, *args) + | only_insns(self) -> bool + | + | parent_expr(self, *args) + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) + | prune_now(self) + | + | set_restart(self, *args) + | set_restart(self) + | + | visit_expr(self, *args) + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctree_visitor_t(self) + +Help on class cwhile_t in module ida_hexrays: + +class cwhile_t(cloop_t) + | Proxy of C++ cwhile_t class. + | + | Method resolution order: + | cwhile_t + | cloop_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cwhile_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cwhile_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function debug_hexrays_ctree in module ida_hexrays: + +debug_hexrays_ctree(*args) + debug_hexrays_ctree(msg) + +Help on function decompile in module ida_hexrays: + +decompile(ea, hf=None, flags=0) + # --------------------------------------------------------------------- + +Help on function decompile_func in module ida_hexrays: + +decompile_func(*args) + decompile_func(pfn, hf, flags=0) -> cfuncptr_t + + + Decompile a function. Multiple decompilations of the same function + return the same object. + + @param pfn: pointer to function to decompile (C++: func_t *) + @param hf: extended error information (if failed) (C++: + hexrays_failure_t *) + @param flags: bitwise combination of decompile() flags ... bits (C++: + int) + @return: pointer to the decompilation result (a reference counted + pointer). NULL if failed. + +Help on function decompile_many in module ida_hexrays: + +decompile_many(*args) + decompile_many(outfile, funcaddrs, flags) -> bool + + + Batch decompilation. Decompile all or the specified functions + + @param outfile: name of the output file (C++: const char *) + @param funcaddrs: list of functions to decompile. If NULL or empty, + then decompile all nonlib functions (C++: const + eavec_t *) + @param flags: Batch decompilation bits (C++: int) + @return: true if no internal error occurred and the user has not + cancelled decompilation + +Help on function dereference in module ida_hexrays: + +dereference(e, ptrsize, is_float=False) + +Help on function dstr in module ida_hexrays: + +dstr(*args) + dstr(tif) -> char const * + + + Print the specified type info. This function can be used from a + debugger by typing "tif->dstr()" + + @param tif (C++: const tinfo_t *) + +Help on function dummy_ptrtype in module ida_hexrays: + +dummy_ptrtype(*args) + dummy_ptrtype(ptrsize, isfp) -> tinfo_t + + + Generate a dummy pointer type + + @param ptrsize: size of pointed object (C++: int) + @param isfp: is floating point object? (C++: bool) + +Help on function eamap_begin in module ida_hexrays: + +eamap_begin(*args) + eamap_begin(map) -> eamap_iterator_t + + + Get iterator pointing to the beginning of eamap_t. + + + @param map (C++: const eamap_t *) + +Help on function eamap_clear in module ida_hexrays: + +eamap_clear(*args) + eamap_clear(map) + + + Clear eamap_t. + + + @param map (C++: eamap_t *) + +Help on function eamap_end in module ida_hexrays: + +eamap_end(*args) + eamap_end(map) -> eamap_iterator_t + + + Get iterator pointing to the end of eamap_t. + + + @param map (C++: const eamap_t *) + +Help on function eamap_erase in module ida_hexrays: + +eamap_erase(*args) + eamap_erase(map, p) + + + Erase current element from eamap_t. + + + @param map (C++: eamap_t *) + @param p (C++: eamap_iterator_t) + +Help on function eamap_find in module ida_hexrays: + +eamap_find(*args) + eamap_find(map, key) -> eamap_iterator_t + + + Find the specified key in eamap_t. + + + @param map (C++: const eamap_t *) + @param key (C++: const ea_t &) + +Help on function eamap_first in module ida_hexrays: + +eamap_first(*args) + eamap_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_free in module ida_hexrays: + +eamap_free(*args) + eamap_free(map) + + + Delete eamap_t instance. + + + @param map (C++: eamap_t *) + +Help on function eamap_insert in module ida_hexrays: + +eamap_insert(*args) + eamap_insert(map, key, val) -> eamap_iterator_t + + + Insert new (ea_t, cinsnptrvec_t) pair into eamap_t. + + + @param map (C++: eamap_t *) + @param key (C++: const ea_t &) + @param val (C++: const cinsnptrvec_t &) + +Help on class eamap_iterator_t in module ida_hexrays: + +class eamap_iterator_t(__builtin__.object) + | Proxy of C++ eamap_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> eamap_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | eamap_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_eamap_iterator_t(self) + +Help on function eamap_new in module ida_hexrays: + +eamap_new(*args) + eamap_new() -> eamap_t + + + Create a new eamap_t instance. + +Help on function eamap_next in module ida_hexrays: + +eamap_next(*args) + eamap_next(p) -> eamap_iterator_t + + + Move to the next element. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_prev in module ida_hexrays: + +eamap_prev(*args) + eamap_prev(p) -> eamap_iterator_t + + + Move to the previous element. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_second in module ida_hexrays: + +eamap_second(*args) + eamap_second(p) -> cinsnptrvec_t + + + Get reference to the current map value. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_size in module ida_hexrays: + +eamap_size(*args) + eamap_size(map) -> size_t + + + Get size of eamap_t. + + + @param map (C++: eamap_t *) + +Help on class eamap_t in module ida_hexrays: + +class eamap_t(__builtin__.object) + | Proxy of C++ std::map< ea_t,cinsnptrvec_t > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> eamap_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> cinsnptrvec_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | eamap_begin(map) -> eamap_iterator_t + | + | __clear = + | eamap_clear(map) + | + | __end = + | eamap_end(map) -> eamap_iterator_t + | + | __erase = + | eamap_erase(map, p) + | + | __find = + | eamap_find(map, key) -> eamap_iterator_t + | + | __first = + | eamap_first(p) -> ea_t const & + | + | __insert = + | eamap_insert(map, key, val) -> eamap_iterator_t + | + | __next = + | eamap_next(p) -> eamap_iterator_t + | + | __second = + | eamap_second(p) -> cinsnptrvec_t + | + | __size = + | eamap_size(map) -> size_t + | + | __swig_destroy__ = + | delete_eamap_t(self) + | + | keytype = + | long(x=0) -> long + | long(x, base=10) -> long + | + | Convert a number or string to a long integer, or return 0L if no arguments + | are given. If x is floating point, the conversion truncates towards zero. + | + | If x is not a number or if base is given, then x must be a string or + | Unicode object representing an integer literal in the given base. The + | literal can be preceded by '+' or '-' and be surrounded by whitespace. + | The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to + | interpret the base from the string as an integer literal. + | >>> int('0b100', base=0) + | 4L + | + | valuetype = + | Proxy of C++ qvector< cinsn_t * > class. + +Help on class fnum_array in module ida_hexrays: + +class fnum_array(__builtin__.object) + | Proxy of C++ wrapped_array_t< uint16,6 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> unsigned short const & + | + | __init__(self, *args) + | __init__(self, data) -> fnum_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | fnum_array_data_get(self) -> unsigned short (&)[6] + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_fnum_array(self) + +Help on class fnumber_t in module ida_hexrays: + +class fnumber_t(__builtin__.object) + | Proxy of C++ fnumber_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> fnumber_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _fnumber_t__get_fnum = __get_fnum(self, *args) + | __get_fnum(self) -> fnum_array + | + | _print(self, *args) + | _print(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | dereference_const_uint16(self, *args) + | dereference_const_uint16(self) -> uint16 const * + | + | dereference_uint16(self, *args) + | dereference_uint16(self) -> uint16 * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fnum + | __get_fnum(self) -> fnum_array + | + | nbytes + | fnumber_t_nbytes_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_fnumber_t(self) + +Help on class gco_info_t in module ida_hexrays: + +class gco_info_t(__builtin__.object) + | Proxy of C++ gco_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> gco_info_t + | + | __repr__ = _swig_repr(self) + | + | append_to_list(self, *args) + | append_to_list(self, list, mba) -> bool + | + | is_def(self, *args) + | is_def(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_use(self, *args) + | is_use(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | gco_info_t_flags_get(self) -> int + | + | name + | gco_info_t_name_get(self) -> qstring * + | + | size + | gco_info_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_gco_info_t(self) + +Help on function gen_microcode in module ida_hexrays: + +gen_microcode(*args) + gen_microcode(mbr, hf, retlist=None, flags=0, reqmat=MMAT_GLBOPT3) -> mbl_array_t + + + Generate microcode of an arbitrary code snippet + + @param mbr: snippet ranges (C++: const mba_ranges_t &) + @param hf: extended error information (if failed) (C++: + hexrays_failure_t *) + @param retlist: list of registers the snippet returns (C++: const + mlist_t *) + @param flags: bitwise combination of decompile() flags ... bits (C++: + int) + @param reqmat: required microcode maturity (C++: mba_maturity_t) + @return: pointer to the microcode, NULL if failed. + +Help on function get_ctype_name in module ida_hexrays: + +get_ctype_name(*args) + get_ctype_name(op) -> char const * + +Help on function get_current_operand in module ida_hexrays: + +get_current_operand(*args) + get_current_operand(out) -> bool + + + Get the instruction operand under the cursor. This function determines + the operand that is under the cursor in the active disassembly + listing. If the operand refers to a register or stack variable, it + return true. + + @param out (C++: gco_info_t *) + +Help on function get_float_type in module ida_hexrays: + +get_float_type(*args) + get_float_type(width) -> tinfo_t + + + Get a type of a floating point value with the specified width + + @param width: width of the desired type (C++: int) + @return: type info object + +Help on function get_hexrays_version in module ida_hexrays: + +get_hexrays_version(*args) + get_hexrays_version() -> char const * + + + Get decompiler version. The returned string is of the form + ... + + @return: pointer to version string. For example: "2.0.0.140605" + +Help on function get_int_type_by_width_and_sign in module ida_hexrays: + +get_int_type_by_width_and_sign(*args) + get_int_type_by_width_and_sign(srcwidth, sign) -> tinfo_t + + + Create a type info by width and sign. Returns a simple type (examples: + int, short) with the given width and sign. + + @param srcwidth: size of the type in bytes (C++: int) + @param sign: sign of the type (C++: type_sign_t) + +Help on function get_member_type in module ida_hexrays: + +get_member_type(*args) + get_member_type(mptr, type) -> bool + + + Get type of a structure field. This function performs validity checks + of the field type. Wrong types are rejected. + + @param mptr: structure field (C++: const member_t *) + @param type: pointer to the variable where the type is returned. This + parameter can be NULL. (C++: tinfo_t *) + @return: false if failed + +Help on function get_merror_desc in module ida_hexrays: + +get_merror_desc(*args) + get_merror_desc(code, mba) -> str + + + Get textual description of an error code + + @param code: Microcode error codes (C++: merror_t) + @param mba: the microcode array (C++: mbl_array_t *) + @return: the error address + +Help on function get_mreg_name in module ida_hexrays: + +get_mreg_name(*args) + get_mreg_name(reg, width, ud=None) -> str + + + Get the microregister name + + @param reg (C++: mreg_t) + @param width: size of microregister in bytes. may be bigger than the + real register size. (C++: int) + @param ud: reserved, must be nullptr (C++: void *) + @return: width of the printed register. this value may be less than + the WIDTH argument. + +Help on function get_op_signness in module ida_hexrays: + +get_op_signness(*args) + get_op_signness(op) -> type_sign_t + + + Get operator sign. Meaningful for sign-dependent operators, like + cot_sdiv. + + + @param op (C++: ctype_t) + +Help on function get_signed_mcode in module ida_hexrays: + +get_signed_mcode(*args) + get_signed_mcode(code) -> mcode_t + +Help on function get_temp_regs in module ida_hexrays: + +get_temp_regs(*args) + get_temp_regs() -> mlist_t + + + Get list of temporary registers. Tempregs are temporary registers that + are used during code generation. They do not map to regular processor + registers. They are used only to store temporary values during + execution of one instruction. Tempregs may not be used to pass a value + from one block to another. In other words, at the end of a block all + tempregs must be dead. + +Help on function get_type in module ida_hexrays: + +get_type(*args) + get_type(id, tif, guess) -> bool + + + Get a global type. Global types are types of addressable objects and + struct/union/enum types + + @param id: address or id of the object (C++: uval_t) + @param tif: buffer for the answer (C++: tinfo_t *) + @param guess: what kind of types to consider (C++: type_source_t) + @return: success + +Help on function get_unk_type in module ida_hexrays: + +get_unk_type(*args) + get_unk_type(size) -> tinfo_t + + + Create a partial type info by width. Returns a partially defined type + (examples: _DWORD, _BYTE) with the given width. + + @param size: size of the type in bytes (C++: int) + +Help on function get_unsigned_mcode in module ida_hexrays: + +get_unsigned_mcode(*args) + get_unsigned_mcode(code) -> mcode_t + +Help on function get_widget_vdui in module ida_hexrays: + +get_widget_vdui(*args) + get_widget_vdui(f) -> vdui_t + + + Get the 'vdui_t' instance associated to the TWidget + + @param f: pointer to window (C++: TWidget *) + @return: a vdui_t *, or NULL + +Help on function getb_reginsn in module ida_hexrays: + +getb_reginsn(*args) + getb_reginsn(ins) -> minsn_t + + + Skip assertions backward. + + + @param ins (C++: const minsn_t *) + +Help on function getf_reginsn in module ida_hexrays: + +getf_reginsn(*args) + getf_reginsn(ins) -> minsn_t + + + Skip assertions forward. + + + @param ins (C++: const minsn_t *) + +Help on class graph_chains_t in module ida_hexrays: + +class graph_chains_t(block_chains_vec_t) + | Proxy of C++ graph_chains_t class. + | + | Method resolution order: + | graph_chains_t + | block_chains_vec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> graph_chains_t + | + | __repr__ = _swig_repr(self) + | + | acquire(self, *args) + | acquire(self) + | + | for_all_chains(self, *args) + | for_all_chains(self, cv, gca_flags) -> int + | + | is_locked(self, *args) + | is_locked(self) -> bool + | + | release(self, *args) + | release(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_chains_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from block_chains_vec_t: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> block_chains_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> block_chains_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> block_chains_t + | begin(self) -> block_chains_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> block_chains_t + | end(self) -> block_chains_t + | + | erase(self, *args) + | erase(self, it) -> block_chains_t + | erase(self, first, last) -> block_chains_t + | + | extract(self, *args) + | extract(self) -> block_chains_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=block_chains_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> block_chains_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> block_chains_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from block_chains_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function has_cached_cfunc in module ida_hexrays: + +has_cached_cfunc(*args) + has_cached_cfunc(ea) -> bool + + + Do we have a cached decompilation result for 'ea'? + + + @param ea (C++: ea_t) + +Help on function hexrays_alloc in module ida_hexrays: + +hexrays_alloc(*args) + hexrays_alloc(size) -> void * + +Help on class hexrays_failure_t in module ida_hexrays: + +class hexrays_failure_t(__builtin__.object) + | Proxy of C++ hexrays_failure_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> hexrays_failure_t + | __init__(self, c, ea, buf=None) -> hexrays_failure_t + | __init__(self, c, ea, buf) -> hexrays_failure_t + | + | __repr__ = _swig_repr(self) + | + | __str__ lambda self + | + | desc(self, *args) + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | hexrays_failure_t_code_get(self) -> merror_t + | + | errea + | hexrays_failure_t_errea_get(self) -> ea_t + | + | str + | hexrays_failure_t_str_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_hexrays_failure_t(self) + +Help on function hexrays_free in module ida_hexrays: + +hexrays_free(*args) + hexrays_free(ptr) + +Help on class hexwarn_t in module ida_hexrays: + +class hexwarn_t(__builtin__.object) + | Proxy of C++ hexwarn_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> hexwarn_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | hexwarn_t_ea_get(self) -> ea_t + | + | id + | hexwarn_t_id_get(self) -> warnid_t + | + | text + | hexwarn_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_hexwarn_t(self) + +Help on class hexwarns_t in module ida_hexrays: + +class hexwarns_t(__builtin__.object) + | Proxy of C++ qvector< hexwarn_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> hexwarn_t + | + | __init__(self, *args) + | __init__(self) -> hexwarns_t + | __init__(self, x) -> hexwarns_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> hexwarn_t + | begin(self) -> hexwarn_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> hexwarn_t + | end(self) -> hexwarn_t + | + | erase(self, *args) + | erase(self, it) -> hexwarn_t + | erase(self, first, last) -> hexwarn_t + | + | extract(self, *args) + | extract(self) -> hexwarn_t + | + | find(self, *args) + | find(self, x) -> hexwarn_t + | find(self, x) -> hexwarn_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=hexwarn_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> hexwarn_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> hexwarn_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_hexwarns_t(self) + +Help on class history_item_t in module ida_hexrays: + +class history_item_t(ctext_position_t) + | Proxy of C++ history_item_t class. + | + | Method resolution order: + | history_item_t + | ctext_position_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea=BADADDR, _lnnum=-1, _x=0, _y=0) -> history_item_t + | __init__(self, _ea, p) -> history_item_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ea + | history_item_t_ea_get(self) -> ea_t + | + | end + | history_item_t_end_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_history_item_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ctext_position_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | compare(self, *args) + | compare(self, r) -> int + | + | in_ctree(self, *args) + | in_ctree(self, hdrlines) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctext_position_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | ctext_position_t_lnnum_get(self) -> int + | + | x + | ctext_position_t_x_get(self) -> int + | + | y + | ctext_position_t_y_get(self) -> int + +Help on class history_t in module ida_hexrays: + +class history_t(qvector_history_t) + | Proxy of C++ qstack< history_item_t > class. + | + | Method resolution order: + | history_t + | qvector_history_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> history_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> history_item_t + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> history_item_t + | + | pop(self, *args) + | pop(self) -> history_item_t + | + | push(self, *args) + | push(self, v) + | + | top(self, *args) + | top(self) -> history_item_t + | top(self) -> history_item_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_history_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_history_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> history_item_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> history_item_t + | begin(self) -> history_item_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> history_item_t + | end(self) -> history_item_t + | + | erase(self, *args) + | erase(self, it) -> history_item_t + | erase(self, first, last) -> history_item_t + | + | extract(self, *args) + | extract(self) -> history_item_t + | + | find(self, *args) + | find(self, x) -> history_item_t + | find(self, x) -> history_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=history_item_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> history_item_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> history_item_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_history_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function init_hexrays_plugin in module ida_hexrays: + +init_hexrays_plugin(*args) + init_hexrays_plugin(flags=0) -> bool + + + Initialize your plugin for hex-rays decompiler. This function must be + called before calling any other decompiler function. It initializes + the pointer to the dispatcher. + + @param flags: reserved, must be 0 (C++: int) + @return: true if the decompiler exists and the dispatcher pointer is + ready to use. + +Help on function install_hexrays_callback in module ida_hexrays: + +install_hexrays_callback(callback) + Deprecated. Please use Hexrays_Hooks instead + +Help on function install_microcode_filter in module ida_hexrays: + +install_microcode_filter(*args) + install_microcode_filter(filter, install=True) + + + register/unregister non-standard microcode generator + + @param filter: - microcode generator object (C++: microcode_filter_t + *) + @param install: - TRUE - register the object, FALSE - unregister (C++: + bool) + +Help on function is_additive in module ida_hexrays: + +is_additive(*args) + is_additive(op) -> bool + + + Is additive operator? + + + @param op (C++: ctype_t) + +Help on function is_assignment in module ida_hexrays: + +is_assignment(*args) + is_assignment(op) -> bool + + + Is assignment operator? + + + @param op (C++: ctype_t) + +Help on function is_binary in module ida_hexrays: + +is_binary(*args) + is_binary(op) -> bool + + + Is binary operator? + + + @param op (C++: ctype_t) + +Help on function is_bitop in module ida_hexrays: + +is_bitop(*args) + is_bitop(op) -> bool + + + Is bit related operator? + + + @param op (C++: ctype_t) + +Help on function is_bool_type in module ida_hexrays: + +is_bool_type(*args) + is_bool_type(type) -> bool + + + Is a boolean type? + + @param type (C++: const tinfo_t &) + @return: true if the type is a boolean type + +Help on function is_break_consumer in module ida_hexrays: + +is_break_consumer(*args) + is_break_consumer(op) -> bool + + + Does a break statement influence the specified statement code? + + + @param op (C++: ctype_t) + +Help on function is_commutative in module ida_hexrays: + +is_commutative(*args) + is_commutative(op) -> bool + + + Is commutative operator? + + + @param op (C++: ctype_t) + +Help on function is_inplace_def in module ida_hexrays: + +is_inplace_def(*args) + is_inplace_def(type) -> bool + + + Is struct/union/enum definition (not declaration)? + + + @param type (C++: const tinfo_t &) + +Help on function is_kreg in module ida_hexrays: + +is_kreg(*args) + is_kreg(r) -> bool + + + Is a kernel register? + + + @param r (C++: mreg_t) + +Help on function is_logical in module ida_hexrays: + +is_logical(*args) + is_logical(op) -> bool + + + Is logical operator? + + + @param op (C++: ctype_t) + +Help on function is_loop in module ida_hexrays: + +is_loop(*args) + is_loop(op) -> bool + + + Is loop statement code? + + + @param op (C++: ctype_t) + +Help on function is_lvalue in module ida_hexrays: + +is_lvalue(*args) + is_lvalue(op) -> bool + + + Is Lvalue operator? + + + @param op (C++: ctype_t) + +Help on function is_may_access in module ida_hexrays: + +is_may_access(*args) + is_may_access(maymust) -> bool + +Help on function is_mcode_addsub in module ida_hexrays: + +is_mcode_addsub(*args) + is_mcode_addsub(mcode) -> bool + +Help on function is_mcode_call in module ida_hexrays: + +is_mcode_call(*args) + is_mcode_call(mcode) -> bool + +Help on function is_mcode_commutative in module ida_hexrays: + +is_mcode_commutative(*args) + is_mcode_commutative(mcode) -> bool + +Help on function is_mcode_convertible_to_jmp in module ida_hexrays: + +is_mcode_convertible_to_jmp(*args) + is_mcode_convertible_to_jmp(mcode) -> bool + +Help on function is_mcode_convertible_to_set in module ida_hexrays: + +is_mcode_convertible_to_set(*args) + is_mcode_convertible_to_set(mcode) -> bool + +Help on function is_mcode_divmod in module ida_hexrays: + +is_mcode_divmod(*args) + is_mcode_divmod(op) -> bool + +Help on function is_mcode_fpu in module ida_hexrays: + +is_mcode_fpu(*args) + is_mcode_fpu(mcode) -> bool + +Help on function is_mcode_j1 in module ida_hexrays: + +is_mcode_j1(*args) + is_mcode_j1(mcode) -> bool + +Help on function is_mcode_jcond in module ida_hexrays: + +is_mcode_jcond(*args) + is_mcode_jcond(mcode) -> bool + +Help on function is_mcode_propagatable in module ida_hexrays: + +is_mcode_propagatable(*args) + is_mcode_propagatable(mcode) -> bool + + + May opcode be propagated? Such opcodes can be used in sub-instructions + (nested instructions) There is a handful of non-propagatable opcodes, + like jumps, ret, nop, etc All other regular opcodes are propagatable + and may appear in a nested instruction. + + @param mcode (C++: mcode_t) + +Help on function is_mcode_set in module ida_hexrays: + +is_mcode_set(*args) + is_mcode_set(mcode) -> bool + +Help on function is_mcode_set1 in module ida_hexrays: + +is_mcode_set1(*args) + is_mcode_set1(mcode) -> bool + +Help on function is_mcode_shift in module ida_hexrays: + +is_mcode_shift(*args) + is_mcode_shift(mcode) -> bool + +Help on function is_mcode_xdsu in module ida_hexrays: + +is_mcode_xdsu(*args) + is_mcode_xdsu(mcode) -> bool + +Help on function is_multiplicative in module ida_hexrays: + +is_multiplicative(*args) + is_multiplicative(op) -> bool + + + Is multiplicative operator? + + + @param op (C++: ctype_t) + +Help on function is_nonbool_type in module ida_hexrays: + +is_nonbool_type(*args) + is_nonbool_type(type) -> bool + + + Is definitely a non-boolean type? + + @param type (C++: const tinfo_t &) + @return: true if the type is a non-boolean type (non bool and well + defined) + +Help on function is_paf in module ida_hexrays: + +is_paf(*args) + is_paf(t) -> bool + + + Is a pointer, array, or function type? + + + @param t (C++: type_t) + +Help on function is_prepost in module ida_hexrays: + +is_prepost(*args) + is_prepost(op) -> bool + + + Is pre/post increment/decrement operator? + + + @param op (C++: ctype_t) + +Help on function is_ptr_or_array in module ida_hexrays: + +is_ptr_or_array(*args) + is_ptr_or_array(t) -> bool + + + Is a pointer or array type? + + + @param t (C++: type_t) + +Help on function is_relational in module ida_hexrays: + +is_relational(*args) + is_relational(op) -> bool + + + Is comparison operator? + + + @param op (C++: ctype_t) + +Help on function is_signed_mcode in module ida_hexrays: + +is_signed_mcode(*args) + is_signed_mcode(code) -> bool + +Help on function is_small_udt in module ida_hexrays: + +is_small_udt(*args) + is_small_udt(tif) -> bool + + + Is a small structure or union? + + @param tif (C++: const tinfo_t &) + @return: true if the type is a small UDT (user defined type). Small + UDTs fit into a register (or pair or registers) as a rule. + +Help on function is_type_correct in module ida_hexrays: + +is_type_correct(*args) + is_type_correct(ptr) -> bool + + + Verify a type string. + + @param ptr (C++: const type_t *) + @return: true if type string is correct + +Help on function is_unary in module ida_hexrays: + +is_unary(*args) + is_unary(op) -> bool + + + Is unary operator? + + + @param op (C++: ctype_t) + +Help on function is_unsigned_mcode in module ida_hexrays: + +is_unsigned_mcode(*args) + is_unsigned_mcode(code) -> bool + +Help on class ivl_t in module ida_hexrays: + +class ivl_t(uval_ivl_t) + | Proxy of C++ ivl_t class. + | + | Method resolution order: + | ivl_t + | uval_ivl_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _off, _size) -> ivl_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, off2) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | extend_to_cover(self, *args) + | extend_to_cover(self, r) -> bool + | + | includes(self, *args) + | includes(self, ivl) -> bool + | + | intersect(self, *args) + | intersect(self, r) + | + | overlap(self, *args) + | overlap(self, ivl) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ivl_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from uval_ivl_t: + | + | end(self, *args) + | end(self) -> unsigned-ea-like-numeric-type↗ + | + | last(self, *args) + | last(self) -> unsigned-ea-like-numeric-type↗ + | + | valid(self, *args) + | valid(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from uval_ivl_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type↗ + | + | size + | uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type↗ + +Help on class ivl_with_name_t in module ida_hexrays: + +class ivl_with_name_t(__builtin__.object) + | Proxy of C++ ivl_with_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ivl_with_name_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ivl + | ivl_with_name_t_ivl_get(self) -> ivl_t + | + | part + | ivl_with_name_t_part_get(self) -> char const * + | + | thisown + | The membership flag + | + | whole + | ivl_with_name_t_whole_get(self) -> char const * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ivl_with_name_t(self) + +Help on class ivlset_t in module ida_hexrays: + +class ivlset_t(uval_ivl_ivlset_t) + | Proxy of C++ ivlset_t class. + | + | Method resolution order: + | ivlset_t + | uval_ivl_ivlset_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ivlset_t + | __init__(self, ivl) -> ivlset_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | add(self, *args) + | add(self, ivl) -> bool + | add(self, ea, size) -> bool + | add(self, ivs) -> bool + | + | addmasked(self, *args) + | addmasked(self, ivs, mask) -> bool + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, off) -> bool + | + | count(self, *args) + | count(self) -> asize_t + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | has_common(self, *args) + | has_common(self, ivl, strict=False) -> bool + | has_common(self, ivs) -> bool + | + | includes(self, *args) + | includes(self, ivs) -> bool + | + | intersect(self, *args) + | intersect(self, ivs) -> bool + | + | sub(self, *args) + | sub(self, ivl) -> bool + | sub(self, ea, size) -> bool + | sub(self, ivs) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ivlset_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from uval_ivl_ivlset_t: + | + | all_values(self, *args) + | all_values(self) -> bool + | + | begin(self, *args) + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | getivl(self, *args) + | getivl(self, idx) -> ivl_t + | + | lastivl(self, *args) + | lastivl(self) -> ivl_t + | + | nivls(self, *args) + | nivls(self) -> size_t + | + | qclear(self, *args) + | qclear(self) + | + | set_all_values(self, *args) + | set_all_values(self) + | + | single_value(self, *args) + | single_value(self, v) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from uval_ivl_ivlset_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function jcnd2set in module ida_hexrays: + +jcnd2set(*args) + jcnd2set(code) -> mcode_t + +Help on function lexcompare in module ida_hexrays: + +lexcompare(*args) + lexcompare(a, b) -> int + +Help on function lnot in module ida_hexrays: + +lnot(e) + +Help on class lvar_locator_t in module ida_hexrays: + +class lvar_locator_t(__builtin__.object) + | Proxy of C++ lvar_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_locator_t + | __init__(self, loc, ea) -> lvar_locator_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | get_reg1(self, *args) + | get_reg1(self) -> mreg_t + | + | get_reg2(self, *args) + | get_reg2(self) -> mreg_t + | + | get_scattered(self, *args) + | get_scattered(self) -> scattered_aloc_t + | get_scattered(self) -> scattered_aloc_t + | + | get_stkoff(self, *args) + | get_stkoff(self) -> sval_t + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_reg_var(self, *args) + | is_reg_var(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stk_var(self, *args) + | is_stk_var(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | defea + | lvar_locator_t_defea_get(self) -> ea_t + | + | location + | lvar_locator_t_location_get(self) -> vdloc_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_locator_t(self) + +Help on function lvar_mapping_begin in module ida_hexrays: + +lvar_mapping_begin(*args) + lvar_mapping_begin(map) -> lvar_mapping_iterator_t + + + Get iterator pointing to the beginning of lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + +Help on function lvar_mapping_clear in module ida_hexrays: + +lvar_mapping_clear(*args) + lvar_mapping_clear(map) + + + Clear lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + +Help on function lvar_mapping_end in module ida_hexrays: + +lvar_mapping_end(*args) + lvar_mapping_end(map) -> lvar_mapping_iterator_t + + + Get iterator pointing to the end of lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + +Help on function lvar_mapping_erase in module ida_hexrays: + +lvar_mapping_erase(*args) + lvar_mapping_erase(map, p) + + + Erase current element from lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_find in module ida_hexrays: + +lvar_mapping_find(*args) + lvar_mapping_find(map, key) -> lvar_mapping_iterator_t + + + Find the specified key in lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + @param key (C++: const lvar_locator_t &) + +Help on function lvar_mapping_first in module ida_hexrays: + +lvar_mapping_first(*args) + lvar_mapping_first(p) -> lvar_locator_t + + + Get reference to the current map key. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_free in module ida_hexrays: + +lvar_mapping_free(*args) + lvar_mapping_free(map) + + + Delete lvar_mapping_t instance. + + + @param map (C++: lvar_mapping_t *) + +Help on function lvar_mapping_insert in module ida_hexrays: + +lvar_mapping_insert(*args) + lvar_mapping_insert(map, key, val) -> lvar_mapping_iterator_t + + + Insert new ( 'lvar_locator_t' , 'lvar_locator_t' ) pair into + lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + @param key (C++: const lvar_locator_t &) + @param val (C++: const lvar_locator_t &) + +Help on class lvar_mapping_iterator_t in module ida_hexrays: + +class lvar_mapping_iterator_t(__builtin__.object) + | Proxy of C++ lvar_mapping_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_mapping_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | lvar_mapping_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_mapping_iterator_t(self) + +Help on function lvar_mapping_new in module ida_hexrays: + +lvar_mapping_new(*args) + lvar_mapping_new() -> lvar_mapping_t + + + Create a new lvar_mapping_t instance. + +Help on function lvar_mapping_next in module ida_hexrays: + +lvar_mapping_next(*args) + lvar_mapping_next(p) -> lvar_mapping_iterator_t + + + Move to the next element. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_prev in module ida_hexrays: + +lvar_mapping_prev(*args) + lvar_mapping_prev(p) -> lvar_mapping_iterator_t + + + Move to the previous element. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_second in module ida_hexrays: + +lvar_mapping_second(*args) + lvar_mapping_second(p) -> lvar_locator_t + + + Get reference to the current map value. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_size in module ida_hexrays: + +lvar_mapping_size(*args) + lvar_mapping_size(map) -> size_t + + + Get size of lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + +Help on class lvar_mapping_t in module ida_hexrays: + +class lvar_mapping_t(__builtin__.object) + | Proxy of C++ std::map< lvar_locator_t,lvar_locator_t > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvar_mapping_t + | + | __repr__ = _swig_repr(self) + | + | at(self, *args) + | at(self, _Keyval) -> lvar_locator_t + | + | size(self, *args) + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_mapping_t(self) + +Help on class lvar_ref_t in module ida_hexrays: + +class lvar_ref_t(__builtin__.object) + | Proxy of C++ lvar_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, m, i, o=0) -> lvar_ref_t + | __init__(self, r) -> lvar_ref_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | swap(self, *args) + | swap(self, r) + | + | var(self, *args) + | var(self) -> lvar_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | idx + | lvar_ref_t_idx_get(self) -> int + | + | mba + | lvar_ref_t_mba_get(self) -> mbl_array_t + | + | off + | lvar_ref_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_ref_t(self) + +Help on class lvar_saved_info_t in module ida_hexrays: + +class lvar_saved_info_t(__builtin__.object) + | Proxy of C++ lvar_saved_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_saved_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | clear_keep(self, *args) + | clear_keep(self) + | + | clr_forced_lvar(self, *args) + | clr_forced_lvar(self) + | + | clr_nomap_lvar(self, *args) + | clr_nomap_lvar(self) + | + | clr_noptr_lvar(self, *args) + | clr_noptr_lvar(self) + | + | has_info(self, *args) + | has_info(self) -> bool + | + | is_forced_lvar(self, *args) + | is_forced_lvar(self) -> bool + | + | is_kept(self, *args) + | is_kept(self) -> bool + | + | is_nomap_lvar(self, *args) + | is_nomap_lvar(self) -> bool + | + | is_noptr_lvar(self, *args) + | is_noptr_lvar(self) -> bool + | + | set_forced_lvar(self, *args) + | set_forced_lvar(self) + | + | set_keep(self, *args) + | set_keep(self) + | + | set_nomap_lvar(self, *args) + | set_nomap_lvar(self) + | + | set_noptr_lvar(self, *args) + | set_noptr_lvar(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | lvar_saved_info_t_cmt_get(self) -> qstring * + | + | flags + | lvar_saved_info_t_flags_get(self) -> int + | + | ll + | lvar_saved_info_t_ll_get(self) -> lvar_locator_t + | + | name + | lvar_saved_info_t_name_get(self) -> qstring * + | + | size + | lvar_saved_info_t_size_get(self) -> ssize_t + | + | thisown + | The membership flag + | + | type + | lvar_saved_info_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_saved_info_t(self) + +Help on class lvar_saved_infos_t in module ida_hexrays: + +class lvar_saved_infos_t(__builtin__.object) + | Proxy of C++ qvector< lvar_saved_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> lvar_saved_info_t + | + | __init__(self, *args) + | __init__(self) -> lvar_saved_infos_t + | __init__(self, x) -> lvar_saved_infos_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> lvar_saved_info_t + | begin(self) -> lvar_saved_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> lvar_saved_info_t + | end(self) -> lvar_saved_info_t + | + | erase(self, *args) + | erase(self, it) -> lvar_saved_info_t + | erase(self, first, last) -> lvar_saved_info_t + | + | extract(self, *args) + | extract(self) -> lvar_saved_info_t + | + | find(self, *args) + | find(self, x) -> lvar_saved_info_t + | find(self, x) -> lvar_saved_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=lvar_saved_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> lvar_saved_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> lvar_saved_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_saved_infos_t(self) + +Help on class lvar_t in module ida_hexrays: + +class lvar_t(lvar_locator_t) + | Proxy of C++ lvar_t class. + | + | Method resolution order: + | lvar_t + | lvar_locator_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | accepts_type(self, *args) + | accepts_type(self, t, may_change_thisarg=False) -> bool + | + | append_list(self, *args) + | append_list(self, lst, pad_if_scattered=False) + | + | clear_used(self, *args) + | clear_used(self) + | + | clr_arg_var(self, *args) + | clr_arg_var(self) + | + | clr_automapped(self, *args) + | clr_automapped(self) + | + | clr_dummy_arg(self, *args) + | clr_dummy_arg(self) + | + | clr_fake_var(self, *args) + | clr_fake_var(self) + | + | clr_floating_var(self, *args) + | clr_floating_var(self) + | + | clr_forced_var(self, *args) + | clr_forced_var(self) + | + | clr_mapdst_var(self, *args) + | clr_mapdst_var(self) + | + | clr_mreg_done(self, *args) + | clr_mreg_done(self) + | + | clr_noptr_var(self, *args) + | clr_noptr_var(self) + | + | clr_notarg(self, *args) + | clr_notarg(self) + | + | clr_overlapped_var(self, *args) + | clr_overlapped_var(self) + | + | clr_spoiled_var(self, *args) + | clr_spoiled_var(self) + | + | clr_thisarg(self, *args) + | clr_thisarg(self) + | + | clr_unknown_width(self, *args) + | clr_unknown_width(self) + | + | clr_user_info(self, *args) + | clr_user_info(self) + | + | clr_user_name(self, *args) + | clr_user_name(self) + | + | clr_user_type(self, *args) + | clr_user_type(self) + | + | has_common(self, *args) + | has_common(self, v) -> bool + | + | has_common_bit(self, *args) + | has_common_bit(self, loc, width2) -> bool + | + | has_regname(self, *args) + | has_regname(self) -> bool + | + | is_aliasable(self, *args) + | is_aliasable(self, mba) -> bool + | + | is_automapped(self, *args) + | is_automapped(self) -> bool + | + | is_dummy_arg(self, *args) + | is_dummy_arg(self) -> bool + | + | is_forced_var(self, *args) + | is_forced_var(self) -> bool + | + | is_noptr_var(self, *args) + | is_noptr_var(self) -> bool + | + | is_notarg(self, *args) + | is_notarg(self) -> bool + | + | is_thisarg(self, *args) + | is_thisarg(self) -> bool + | + | set_arg_var(self, *args) + | set_arg_var(self) + | + | set_automapped(self, *args) + | set_automapped(self) + | + | set_dummy_arg(self, *args) + | set_dummy_arg(self) + | + | set_fake_var(self, *args) + | set_fake_var(self) + | + | set_final_lvar_type(self, *args) + | set_final_lvar_type(self, t) + | + | set_floating_var(self, *args) + | set_floating_var(self) + | + | set_forced_var(self, *args) + | set_forced_var(self) + | + | set_lvar_type(self, *args) + | set_lvar_type(self, t, may_fail=False) -> bool + | + | set_mapdst_var(self, *args) + | set_mapdst_var(self) + | + | set_mreg_done(self, *args) + | set_mreg_done(self) + | + | set_non_typed(self, *args) + | set_non_typed(self) + | + | set_noptr_var(self, *args) + | set_noptr_var(self) + | + | set_notarg(self, *args) + | set_notarg(self) + | + | set_overlapped_var(self, *args) + | set_overlapped_var(self) + | + | set_spoiled_var(self, *args) + | set_spoiled_var(self) + | + | set_thisarg(self, *args) + | set_thisarg(self) + | + | set_typed(self, *args) + | set_typed(self) + | + | set_unknown_width(self, *args) + | set_unknown_width(self) + | + | set_used(self, *args) + | set_used(self) + | + | set_user_name(self, *args) + | set_user_name(self) + | + | set_user_type(self, *args) + | set_user_type(self) + | + | set_width(self, *args) + | set_width(self, w, svw_flags=0) -> bool + | + | type(self, *args) + | type(self) -> tinfo_t + | type(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cmt + | lvar_t_cmt_get(self) -> qstring * + | + | defblk + | lvar_t_defblk_get(self) -> int + | + | divisor + | lvar_t_divisor_get(self) -> uint64 + | + | has_nice_name + | has_nice_name(self) -> bool + | + | has_user_info + | has_user_info(self) -> bool + | + | has_user_name + | has_user_name(self) -> bool + | + | has_user_type + | has_user_type(self) -> bool + | + | is_arg_var + | is_arg_var(self) -> bool + | + | is_fake_var + | is_fake_var(self) -> bool + | + | is_floating_var + | is_floating_var(self) -> bool + | + | is_mapdst_var + | is_mapdst_var(self) -> bool + | + | is_overlapped_var + | is_overlapped_var(self) -> bool + | + | is_result_var + | is_result_var(self) -> bool + | + | is_spoiled_var + | is_spoiled_var(self) -> bool + | + | is_unknown_width + | is_unknown_width(self) -> bool + | + | mreg_done + | mreg_done(self) -> bool + | + | name + | lvar_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tif + | lvar_t_tif_get(self) -> tinfo_t + | + | typed + | typed(self) -> bool + | + | used + | used(self) -> bool + | + | width + | lvar_t_width_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from lvar_locator_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | compare(self, *args) + | compare(self, r) -> int + | + | get_reg1(self, *args) + | get_reg1(self) -> mreg_t + | + | get_reg2(self, *args) + | get_reg2(self) -> mreg_t + | + | get_scattered(self, *args) + | get_scattered(self) -> scattered_aloc_t + | get_scattered(self) -> scattered_aloc_t + | + | get_stkoff(self, *args) + | get_stkoff(self) -> sval_t + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_reg_var(self, *args) + | is_reg_var(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stk_var(self, *args) + | is_stk_var(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from lvar_locator_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | defea + | lvar_locator_t_defea_get(self) -> ea_t + | + | location + | lvar_locator_t_location_get(self) -> vdloc_t + +Help on class lvar_uservec_t in module ida_hexrays: + +class lvar_uservec_t(__builtin__.object) + | Proxy of C++ lvar_uservec_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvar_uservec_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | find_info(self, *args) + | find_info(self, vloc) -> lvar_saved_info_t + | + | keep_info(self, *args) + | keep_info(self, v) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lmaps + | lvar_uservec_t_lmaps_get(self) -> lvar_mapping_t + | + | lvvec + | lvar_uservec_t_lvvec_get(self) -> lvar_saved_infos_t + | + | stkoff_delta + | lvar_uservec_t_stkoff_delta_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ulv_flags + | lvar_uservec_t_ulv_flags_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_uservec_t(self) + +Help on class lvars_t in module ida_hexrays: + +class lvars_t(qvector_lvar_t) + | Proxy of C++ lvars_t class. + | + | Method resolution order: + | lvars_t + | qvector_lvar_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvars_t + | + | __repr__ = _swig_repr(self) + | + | find(self, *args) + | find(self, ll) -> lvar_t + | + | find_input_lvar(self, *args) + | find_input_lvar(self, argloc, _size) -> int + | + | find_lvar(self, *args) + | find_lvar(self, location, width, defblk=-1) -> int + | + | find_stkvar(self, *args) + | find_stkvar(self, spoff, width) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvars_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_lvar_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> lvar_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> lvar_t + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> lvar_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> lvar_t + | begin(self) -> lvar_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> lvar_t + | end(self) -> lvar_t + | + | erase(self, *args) + | erase(self, it) -> lvar_t + | erase(self, first, last) -> lvar_t + | + | extract(self, *args) + | extract(self) -> lvar_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=lvar_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> lvar_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> lvar_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_lvar_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function make_num in module ida_hexrays: + +make_num(*args) + +Help on function make_pointer in module ida_hexrays: + +make_pointer(*args) + make_pointer(type) -> tinfo_t + + + Create a pointer type. This function performs the following + conversion: "type" -> "type*" + + @param type: object type. (C++: const tinfo_t &) + @return: "type*". for example, if 'char' is passed as the argument, + +Help on function make_ref in module ida_hexrays: + +make_ref(e) + +Help on function mark_cfunc_dirty in module ida_hexrays: + +mark_cfunc_dirty(*args) + mark_cfunc_dirty(ea, close_views=False) -> bool + + + Flush the cached decompilation results. Erases a cache entry for the + specified function. + + @param ea: function to erase from the cache (C++: ea_t) + @param close_views: close pseudocode windows that show the function + (C++: bool) + @return: if a cache entry existed. + +Help on class mba_range_iterator_t in module ida_hexrays: + +class mba_range_iterator_t(__builtin__.object) + | Proxy of C++ mba_range_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mba_range_iterator_t + | + | __repr__ = _swig_repr(self) + | + | chunk(self, *args) + | chunk(self) -> range_t + | + | is_snippet(self, *args) + | is_snippet(self) -> bool + | + | next(self, *args) + | next(self) -> bool + | + | set(self, *args) + | set(self, mbr) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fii + | mba_range_iterator_t_fii_get(self) -> func_tail_iterator_t + | + | rii + | mba_range_iterator_t_rii_get(self) -> range_chunk_iterator_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mba_range_iterator_t(self) + +Help on class mba_ranges_t in module ida_hexrays: + +class mba_ranges_t(__builtin__.object) + | Proxy of C++ mba_ranges_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _pfn=None) -> mba_ranges_t + | __init__(self, r) -> mba_ranges_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | is_fragmented(self, *args) + | is_fragmented(self) -> bool + | + | is_snippet(self, *args) + | is_snippet(self) -> bool + | + | start(self, *args) + | start(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | pfn + | mba_ranges_t_pfn_get(self) -> func_t * + | + | ranges + | mba_ranges_t_ranges_get(self) -> rangevec_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mba_ranges_t(self) + +Help on class mbl_array_t in module ida_hexrays: + +class mbl_array_t(__builtin__.object) + | Proxy of C++ mbl_array_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | _deregister(self, *args) + | _deregister(self) + | + | _print(self, *args) + | _print(self, vp) + | + | _register(self, *args) + | _register(self) + | + | alloc_lvars(self, *args) + | alloc_lvars(self) + | + | analyze_calls(self, *args) + | analyze_calls(self, acflags) -> int + | + | arg(self, *args) + | arg(self, n) -> lvar_t + | arg(self, n) -> lvar_t + | + | argbase(self, *args) + | argbase(self) -> sval_t + | + | argidx_ok(self, *args) + | argidx_ok(self) -> bool + | + | bad_call_sp_detected(self, *args) + | bad_call_sp_detected(self) -> bool + | + | build_graph(self, *args) + | build_graph(self) -> merror_t + | + | calc_shins_flags(self, *args) + | calc_shins_flags(self) -> int + | + | callinfo_built(self, *args) + | callinfo_built(self) -> bool + | + | chain_varnums_ok(self, *args) + | chain_varnums_ok(self) -> bool + | + | clr_cdtr(self, *args) + | clr_cdtr(self) + | + | clr_mba_flags(self, *args) + | clr_mba_flags(self, f) + | + | clr_mba_flags2(self, *args) + | clr_mba_flags2(self, f) + | + | combine_blocks(self, *args) + | combine_blocks(self) -> bool + | + | common_stkvars_stkargs(self, *args) + | common_stkvars_stkargs(self) -> bool + | + | copy_block(self, *args) + | copy_block(self, blk, new_serial, cpblk_flags=3) -> mblock_t + | + | deleted_pairs(self, *args) + | deleted_pairs(self) -> bool + | + | display_numaddrs(self, *args) + | display_numaddrs(self) -> bool + | + | display_valnums(self, *args) + | display_valnums(self) -> bool + | + | dump(self, *args) + | dump(self) + | + | dump_mba(self, *args) + | dump_mba(self, _verify, title) + | + | find_mop(self, *args) + | find_mop(self, ctx, ea, is_dest, list) -> mop_t + | + | for_all_insns(self, *args) + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) + | for_all_ops(self, mv) -> int + | + | for_all_topinsns(self, *args) + | for_all_topinsns(self, mv) -> int + | + | generated_asserts(self, *args) + | generated_asserts(self) -> bool + | + | get_args_region(self, *args) + | get_args_region(self) -> ivl_t + | + | get_curfunc(self, *args) + | get_curfunc(self) -> func_t * + | + | get_graph(self, *args) + | get_graph(self) -> mbl_graph_t + | + | get_ida_argloc(self, *args) + | get_ida_argloc(self, v) -> argloc_t + | + | get_lvars_region(self, *args) + | get_lvars_region(self) -> ivl_t + | + | get_mba_flags(self, *args) + | get_mba_flags(self) -> int + | + | get_mba_flags2(self, *args) + | get_mba_flags2(self) -> int + | + | get_mblock(self, *args) + | get_mblock(self, n) -> mblock_t + | get_mblock(self, n) -> mblock_t + | + | get_shadow_region(self, *args) + | get_shadow_region(self) -> ivl_t + | + | get_stack_region(self, *args) + | get_stack_region(self) -> ivl_t + | + | get_std_region(self, *args) + | get_std_region(self, idx) -> ivl_t + | + | graph_insns(self, *args) + | graph_insns(self) -> bool + | + | has_bad_sp(self, *args) + | has_bad_sp(self) -> bool + | + | has_over_chains(self, *args) + | has_over_chains(self) -> bool + | + | has_passregs(self, *args) + | has_passregs(self) -> bool + | + | idaloc2vd(self, *args) + | idaloc2vd(self, loc, width) -> vdloc_t + | + | insert_block(self, *args) + | insert_block(self, bblk) -> mblock_t + | + | is_cdtr(self, *args) + | is_cdtr(self) -> bool + | + | is_ctr(self, *args) + | is_ctr(self) -> bool + | + | is_dtr(self, *args) + | is_dtr(self) -> bool + | + | is_pattern(self, *args) + | is_pattern(self) -> bool + | + | is_snippet(self, *args) + | is_snippet(self) -> bool + | + | is_stkarg(self, *args) + | is_stkarg(self, v) -> bool + | + | is_thunk(self, *args) + | is_thunk(self) -> bool + | + | loaded_gdl(self, *args) + | loaded_gdl(self) -> bool + | + | lvar_names_ok(self, *args) + | lvar_names_ok(self) -> bool + | + | lvars_allocated(self, *args) + | lvars_allocated(self) -> bool + | + | lvars_renamed(self, *args) + | lvars_renamed(self) -> bool + | + | mark_chains_dirty(self, *args) + | mark_chains_dirty(self) + | + | may_refine_rettype(self, *args) + | may_refine_rettype(self) -> bool + | + | optimize_global(self, *args) + | optimize_global(self) -> merror_t + | + | optimize_local(self, *args) + | optimize_local(self, locopt_bits) -> int + | + | optimized(self, *args) + | optimized(self) -> bool + | + | precise_defeas(self, *args) + | precise_defeas(self) -> bool + | + | propagated_asserts(self, *args) + | propagated_asserts(self) -> bool + | + | really_alloc(self, *args) + | really_alloc(self) -> bool + | + | regargs_is_not_aligned(self, *args) + | regargs_is_not_aligned(self) -> bool + | + | remove_block(self, *args) + | remove_block(self, blk) -> bool + | + | remove_empty_blocks(self, *args) + | remove_empty_blocks(self) -> bool + | + | returns_fpval(self, *args) + | returns_fpval(self) -> bool + | + | rtype_refined(self, *args) + | rtype_refined(self) -> bool + | + | saverest_done(self, *args) + | saverest_done(self) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | set_mba_flags(self, *args) + | set_mba_flags(self, f) + | + | set_mba_flags2(self, *args) + | set_mba_flags2(self, f) + | + | short_display(self, *args) + | short_display(self) -> bool + | + | should_beautify(self, *args) + | should_beautify(self) -> bool + | + | show_reduction(self, *args) + | show_reduction(self) -> bool + | + | stkoff_ida2vd(self, *args) + | stkoff_ida2vd(self, off) -> sval_t + | + | stkoff_vd2ida(self, *args) + | stkoff_vd2ida(self, off) -> sval_t + | + | term(self, *args) + | term(self) + | + | use_frame(self, *args) + | use_frame(self) -> bool + | + | use_wingraph32(self, *args) + | use_wingraph32(self) -> bool + | + | valranges_done(self, *args) + | valranges_done(self) -> bool + | + | vd2idaloc(self, *args) + | vd2idaloc(self, loc, width, spd) -> argloc_t + | vd2idaloc(self, loc, width) -> argloc_t + | + | verify(self, *args) + | verify(self, always) + | + | write_to_const_detected(self, *args) + | write_to_const_detected(self) -> bool + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | deserialize(*args) + | deserialize(bytes) -> mbl_array_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | aliased_args + | mbl_array_t_aliased_args_get(self) -> ivl_t + | + | aliased_memory + | mbl_array_t_aliased_memory_get(self) -> ivlset_t + | + | aliased_vars + | mbl_array_t_aliased_vars_get(self) -> ivl_t + | + | argidx + | mbl_array_t_argidx_get(self) -> intvec_t + | + | blocks + | mbl_array_t_blocks_get(self) -> mblock_t + | + | cc + | mbl_array_t_cc_get(self) -> cm_t + | + | consumed_argregs + | mbl_array_t_consumed_argregs_get(self) -> rlist_t + | + | entry_ea + | mbl_array_t_entry_ea_get(self) -> ea_t + | + | error_ea + | mbl_array_t_error_ea_get(self) -> ea_t + | + | error_strarg + | mbl_array_t_error_strarg_get(self) -> qstring * + | + | final_type + | mbl_array_t_final_type_get(self) -> bool + | + | first_epilog_ea + | mbl_array_t_first_epilog_ea_get(self) -> ea_t + | + | fpd + | mbl_array_t_fpd_get(self) -> sval_t + | + | frregs + | mbl_array_t_frregs_get(self) -> sval_t + | + | frsize + | mbl_array_t_frsize_get(self) -> sval_t + | + | fti_flags + | mbl_array_t_fti_flags_get(self) -> int + | + | fullsize + | mbl_array_t_fullsize_get(self) -> sval_t + | + | gotoff_stkvars + | mbl_array_t_gotoff_stkvars_get(self) -> ivlset_t + | + | idb_node + | mbl_array_t_idb_node_get(self) -> netnode + | + | idb_spoiled + | mbl_array_t_idb_spoiled_get(self) -> reginfovec_t + | + | idb_type + | mbl_array_t_idb_type_get(self) -> tinfo_t + | + | inargoff + | mbl_array_t_inargoff_get(self) -> sval_t + | + | label + | mbl_array_t_label_get(self) -> qstring * + | + | last_prolog_ea + | mbl_array_t_last_prolog_ea_get(self) -> ea_t + | + | maturity + | mbl_array_t_maturity_get(self) -> mba_maturity_t + | + | mbr + | mbl_array_t_mbr_get(self) -> mba_ranges_t + | + | minargref + | mbl_array_t_minargref_get(self) -> sval_t + | + | minstkref + | mbl_array_t_minstkref_get(self) -> sval_t + | + | minstkref_ea + | mbl_array_t_minstkref_ea_get(self) -> ea_t + | + | natural + | mbl_array_t_natural_get(self) -> mblock_t ** + | + | nodel_memory + | mbl_array_t_nodel_memory_get(self) -> mlist_t + | + | notes + | mbl_array_t_notes_get(self) -> hexwarns_t + | + | npurged + | mbl_array_t_npurged_get(self) -> int + | + | occurred_warns + | mbl_array_t_occurred_warns_get(self) -> uchar [32] + | + | pfn_flags + | mbl_array_t_pfn_flags_get(self) -> int + | + | qty + | mbl_array_t_qty_get(self) -> int + | + | reqmat + | mbl_array_t_reqmat_get(self) -> mba_maturity_t + | + | restricted_memory + | mbl_array_t_restricted_memory_get(self) -> ivlset_t + | + | retsize + | mbl_array_t_retsize_get(self) -> int + | + | retvaridx + | mbl_array_t_retvaridx_get(self) -> int + | + | shadow_args + | mbl_array_t_shadow_args_get(self) -> int + | + | spd_adjust + | mbl_array_t_spd_adjust_get(self) -> sval_t + | + | spoiled_list + | mbl_array_t_spoiled_list_get(self) -> mlist_t + | + | stacksize + | mbl_array_t_stacksize_get(self) -> sval_t + | + | std_ivls + | mbl_array_t_std_ivls_get(self) -> ivl_with_name_t + | + | thisown + | The membership flag + | + | tmpstk_size + | mbl_array_t_tmpstk_size_get(self) -> sval_t + | + | vars + | mbl_array_t_vars_get(self) -> lvars_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mbl_array_t(self) + +Help on function mbl_array_t_deserialize in module ida_hexrays: + +mbl_array_t_deserialize(*args) + mbl_array_t_deserialize(bytes) -> mbl_array_t + +Help on class mbl_graph_t in module ida_hexrays: + +class mbl_graph_t(simple_graph_t) + | Proxy of C++ mbl_graph_t class. + | + | Method resolution order: + | mbl_graph_t + | simple_graph_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | get_chain_stamp(self, *args) + | get_chain_stamp(self) -> int + | + | get_du(self, *args) + | get_du(self, gctype) -> graph_chains_t + | + | get_mblock(self, *args) + | get_mblock(self, n) -> mblock_t + | + | get_ud(self, *args) + | get_ud(self, gctype) -> graph_chains_t + | + | is_du_chain_dirty(self, *args) + | is_du_chain_dirty(self, gctype) -> bool + | + | is_redefined_globally(self, *args) + | is_redefined_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool + | + | is_ud_chain_dirty(self, *args) + | is_ud_chain_dirty(self, gctype) -> bool + | + | is_used_globally(self, *args) + | is_used_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from simple_graph_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | colored_gdl_edges + | simple_graph_t_colored_gdl_edges_get(self) -> bool + | + | title + | simple_graph_t_title_get(self) -> qstring * + +Help on class mblock_t in module ida_hexrays: + +class mblock_t(__builtin__.object) + | Proxy of C++ mblock_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, vp) + | + | append_def_list(self, *args) + | append_def_list(self, list, op, maymust) + | + | append_use_list(self, *args) + | append_use_list(self, list, op, maymust, mask=bitrange_t(0, USHRT_MAX)) + | + | build_def_list(self, *args) + | build_def_list(self, ins, maymust) -> mlist_t + | + | build_lists(self, *args) + | build_lists(self, kill_deads) -> int + | + | build_use_list(self, *args) + | build_use_list(self, ins, maymust) -> mlist_t + | + | dump(self, *args) + | dump(self) + | + | dump_block(self, *args) + | dump_block(self, title) + | + | empty(self, *args) + | empty(self) -> bool + | + | find_access(self, *args) + | find_access(self, op, parent, mend, fdflags) -> minsn_t + | + | find_def(self, *args) + | find_def(self, op, p_i1, i2, fdflags) -> minsn_t + | + | find_first_use(self, *args) + | find_first_use(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t + | + | find_redefinition(self, *args) + | find_redefinition(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t + | + | find_use(self, *args) + | find_use(self, op, p_i1, i2, fdflags) -> minsn_t + | + | for_all_insns(self, *args) + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) + | for_all_ops(self, mv) -> int + | + | for_all_uses(self, *args) + | for_all_uses(self, list, i1, i2, mmv) -> int + | + | get_reginsn_qty(self, *args) + | get_reginsn_qty(self) -> size_t + | + | get_valranges(self, *args) + | get_valranges(self, res, vivl, vrflags) -> bool + | get_valranges(self, res, vivl, m, vrflags) -> bool + | + | insert_into_block(self, *args) + | insert_into_block(self, nm, om) -> minsn_t + | + | is_branch(self, *args) + | is_branch(self) -> bool + | + | is_call_block(self, *args) + | is_call_block(self) -> bool + | + | is_nway(self, *args) + | is_nway(self) -> bool + | + | is_redefined(self, *args) + | is_redefined(self, list, i1, i2, maymust=MAY_ACCESS) -> bool + | + | is_rhs_redefined(self, *args) + | is_rhs_redefined(self, ins, i1, i2) -> bool + | + | is_simple_goto_block(self, *args) + | is_simple_goto_block(self) -> bool + | + | is_simple_jcnd_block(self, *args) + | is_simple_jcnd_block(self) -> bool + | + | is_unknown_call(self, *args) + | is_unknown_call(self) -> bool + | + | is_used(self, *args) + | is_used(self, list, i1, i2, maymust=MAY_ACCESS) -> bool + | + | lists_dirty(self, *args) + | lists_dirty(self) -> bool + | + | lists_ready(self, *args) + | lists_ready(self) -> bool + | + | make_lists_ready(self, *args) + | make_lists_ready(self) -> int + | + | make_nop(self, *args) + | make_nop(self, m) + | + | mark_lists_dirty(self, *args) + | mark_lists_dirty(self) + | + | needs_propagation(self, *args) + | needs_propagation(self) -> bool + | + | npred(self, *args) + | npred(self) -> int + | + | nsucc(self, *args) + | nsucc(self) -> int + | + | optimize_block(self, *args) + | optimize_block(self) -> int + | + | optimize_insn(self, *args) + | optimize_insn(self, m, optflags=0x0002|0x0004) -> int + | + | optimize_useless_jump(self, *args) + | optimize_useless_jump(self) -> int + | + | pred(self, *args) + | pred(self, n) -> int + | + | preds(self) + | Iterates the list of predecessor blocks + | + | remove_from_block(self, *args) + | remove_from_block(self, m) -> minsn_t + | + | request_demote64(self, *args) + | request_demote64(self) + | + | request_propagation(self, *args) + | request_propagation(self) + | + | succ(self, *args) + | succ(self, n) -> int + | + | succs(self) + | Iterates the list of successor blocks + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dead_at_start + | mblock_t_dead_at_start_get(self) -> mlist_t + | + | dnu + | mblock_t_dnu_get(self) -> mlist_t + | + | end + | mblock_t_end_get(self) -> ea_t + | + | flags + | mblock_t_flags_get(self) -> uint32 + | + | head + | mblock_t_head_get(self) -> minsn_t + | + | maxbsp + | mblock_t_maxbsp_get(self) -> sval_t + | + | maybdef + | mblock_t_maybdef_get(self) -> mlist_t + | + | maybuse + | mblock_t_maybuse_get(self) -> mlist_t + | + | mba + | mblock_t_mba_get(self) -> mbl_array_t + | + | minbargref + | mblock_t_minbargref_get(self) -> sval_t + | + | minbstkref + | mblock_t_minbstkref_get(self) -> sval_t + | + | mustbdef + | mblock_t_mustbdef_get(self) -> mlist_t + | + | mustbuse + | mblock_t_mustbuse_get(self) -> mlist_t + | + | nextb + | mblock_t_nextb_get(self) -> mblock_t + | + | predset + | mblock_t_predset_get(self) -> intvec_t + | + | prevb + | mblock_t_prevb_get(self) -> mblock_t + | + | serial + | mblock_t_serial_get(self) -> int + | + | start + | mblock_t_start_get(self) -> ea_t + | + | succset + | mblock_t_succset_get(self) -> intvec_t + | + | tail + | mblock_t_tail_get(self) -> minsn_t + | + | thisown + | The membership flag + | + | type + | mblock_t_type_get(self) -> mblock_type_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mblock_t(self) + +Help on class mcallarg_t in module ida_hexrays: + +class mcallarg_t(mop_t) + | Proxy of C++ mcallarg_t class. + | + | Method resolution order: + | mcallarg_t + | mop_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mcallarg_t + | __init__(self, rarg) -> mcallarg_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, shins_flags=0x04|0x02) + | + | copy_mop(self, *args) + | copy_mop(self, op) + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | make_int(self, *args) + | make_int(self, val, val_ea, opno=0) + | + | make_uint(self, *args) + | make_uint(self, val, val_ea, opno=0) + | + | set_regarg(self, *args) + | set_regarg(self, mr, sz, tif) + | set_regarg(self, mr, tif) + | set_regarg(self, mr, dt, sign=type_unsigned) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | argloc + | mcallarg_t_argloc_get(self) -> argloc_t + | + | ea + | mcallarg_t_ea_get(self) -> ea_t + | + | name + | mcallarg_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | mcallarg_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mcallarg_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from mop_t: + | + | __eq__(self, *args) + | __eq__(self, rop) -> bool + | + | __lt__(self, *args) + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) + | __ne__(self, rop) -> bool + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) + | _get_b(self) -> int + | + | _get_c(self, *args) + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) + | _get_helper(self) -> char const * + | + | _get_l(self, *args) + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) + | _make_gvar(self, ea) + | + | _make_insn(self, *args) + | _make_insn(self, ins) + | + | _make_lvar(self, *args) + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) + | _make_pair(self, _pair) + | + | _make_reg(self, *args) + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _register(self, *args) + | _register(self) + | + | _set_a(self, *args) + | _set_a(self, _v) + | + | _set_b(self, *args) + | _set_b(self, _v) + | + | _set_c(self, *args) + | _set_c(self, _v) + | + | _set_cstr(self, *args) + | _set_cstr(self, _v) + | + | _set_d(self, *args) + | _set_d(self, _v) + | + | _set_f(self, *args) + | _set_f(self, _v) + | + | _set_fpc(self, *args) + | _set_fpc(self, _v) + | + | _set_g(self, *args) + | _set_g(self, _v) + | + | _set_helper(self, *args) + | _set_helper(self, _v) + | + | _set_l(self, *args) + | _set_l(self, _v) + | + | _set_nnn(self, *args) + | _set_nnn(self, _v) + | + | _set_pair(self, *args) + | _set_pair(self, _v) + | + | _set_r(self, *args) + | _set_r(self, _v) + | + | _set_s(self, *args) + | _set_s(self, _v) + | + | _set_scif(self, *args) + | _set_scif(self, _v) + | + | _set_t(self, *args) + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) + | assign(self, rop) -> mop_t + | + | change_size(self, *args) + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | equal_mops(self, *args) + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) + | erase(self) + | + | erase_but_keep_size(self, *args) + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) + | is01(self) -> bool + | + | is_arglist(self, *args) + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) + | is_cc(self) -> bool + | + | is_ccflags(self, *args) + | is_ccflags(self) -> bool + | + | is_constant(self, *args) + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) + | is_kreg(self) -> bool + | + | is_mob(self, *args) + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) + | is_negative_constant(self) -> bool + | + | is_one(self, *args) + | is_one(self) -> bool + | + | is_positive_constant(self, *args) + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) + | is_udt(self) -> bool + | + | is_undef_val(self, *args) + | is_undef_val(self) -> bool + | + | is_zero(self, *args) + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) + | is_zero_extended_from(self, nbytes) -> bool + | + | lexcompare(self, *args) + | lexcompare(self, rop) -> int + | + | make_blkref(self, *args) + | make_blkref(self, blknum) + | + | make_first_half(self, *args) + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) + | make_gvar(self, ea) + | + | make_helper(self, *args) + | make_helper(self, name) + | + | make_high_half(self, *args) + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) + | make_insn(self, ins) + | + | make_low_half(self, *args) + | make_low_half(self, width) -> bool + | + | make_number(self, *args) + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) + | set_impptr_done(self) + | + | set_udt(self, *args) + | set_udt(self) + | + | set_undef_val(self, *args) + | set_undef_val(self) + | + | shift_mop(self, *args) + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) + | signed_value(self) -> int64 + | + | swap(self, *args) + | swap(self, rop) + | + | unsigned_value(self, *args) + | unsigned_value(self) -> uint64 + | + | value(self, *args) + | value(self, is_signed) -> uint64 + | + | zero(self, *args) + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from mop_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | valnum + | mop_t_valnum_get(self) -> uint16 + +Help on class mcallargs_t in module ida_hexrays: + +class mcallargs_t(__builtin__.object) + | Proxy of C++ qvector< mcallarg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> mcallarg_t + | + | __init__(self, *args) + | __init__(self) -> mcallargs_t + | __init__(self, x) -> mcallargs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> mcallarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> mcallarg_t + | begin(self) -> mcallarg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> mcallarg_t + | end(self) -> mcallarg_t + | + | erase(self, *args) + | erase(self, it) -> mcallarg_t + | erase(self, first, last) -> mcallarg_t + | + | extract(self, *args) + | extract(self) -> mcallarg_t + | + | find(self, *args) + | find(self, x) -> mcallarg_t + | find(self, x) -> mcallarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=mcallarg_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> mcallarg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> mcallarg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mcallargs_t(self) + +Help on class mcallinfo_t in module ida_hexrays: + +class mcallinfo_t(__builtin__.object) + | Proxy of C++ mcallinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _callee=BADADDR, _sargs=0) -> mcallinfo_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, size=-1, shins_flags=0x04|0x02) + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | get_type(self, *args) + | get_type(self) -> tinfo_t + | + | is_vararg(self, *args) + | is_vararg(self) -> bool + | + | lexcompare(self, *args) + | lexcompare(self, f) -> int + | + | set_type(self, *args) + | set_type(self, type) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | args + | mcallinfo_t_args_get(self) -> mcallargs_t + | + | call_spd + | mcallinfo_t_call_spd_get(self) -> int + | + | callee + | mcallinfo_t_callee_get(self) -> ea_t + | + | cc + | mcallinfo_t_cc_get(self) -> cm_t + | + | dead_regs + | mcallinfo_t_dead_regs_get(self) -> mlist_t + | + | flags + | mcallinfo_t_flags_get(self) -> int + | + | fti_attrs + | mcallinfo_t_fti_attrs_get(self) -> type_attrs_t + | + | pass_regs + | mcallinfo_t_pass_regs_get(self) -> mlist_t + | + | retregs + | mcallinfo_t_retregs_get(self) -> mopvec_t + | + | return_argloc + | mcallinfo_t_return_argloc_get(self) -> argloc_t + | + | return_regs + | mcallinfo_t_return_regs_get(self) -> mlist_t + | + | return_type + | mcallinfo_t_return_type_get(self) -> tinfo_t + | + | role + | mcallinfo_t_role_get(self) -> funcrole_t + | + | solid_args + | mcallinfo_t_solid_args_get(self) -> int + | + | spoiled + | mcallinfo_t_spoiled_get(self) -> mlist_t + | + | stkargs_top + | mcallinfo_t_stkargs_top_get(self) -> int + | + | thisown + | The membership flag + | + | visible_memory + | mcallinfo_t_visible_memory_get(self) -> ivlset_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mcallinfo_t(self) + +Help on class mcases_t in module ida_hexrays: + +class mcases_t(__builtin__.object) + | Proxy of C++ mcases_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> mcases_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | resize(self, *args) + | resize(self, s) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | targets + | mcases_t_targets_get(self) -> intvec_t + | + | thisown + | The membership flag + | + | values + | mcases_t_values_get(self) -> casevec_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mcases_t(self) + +Help on function mcode_modifies_d in module ida_hexrays: + +mcode_modifies_d(*args) + mcode_modifies_d(mcode) -> bool + +Help on class microcode_filter_t in module ida_hexrays: + +class microcode_filter_t(__builtin__.object) + | Proxy of C++ microcode_filter_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> microcode_filter_t + | + | __repr__ = _swig_repr(self) + | + | apply(self, *args) + | apply(self, cdg) -> merror_t + | + | match(self, *args) + | match(self, cdg) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_microcode_filter_t(self) + +Help on class minsn_t in module ida_hexrays: + +class minsn_t(__builtin__.object) + | Proxy of C++ minsn_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea) -> minsn_t + | __init__(self, m) -> minsn_t + | + | __lt__(self, *args) + | __lt__(self, ri) -> bool + | + | __repr__ = _swig_repr(self) + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _make_nop(self, *args) + | _make_nop(self) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _minsn_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _minsn_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) + | _register(self) + | + | clr_assert(self, *args) + | clr_assert(self) + | + | clr_combinable(self, *args) + | clr_combinable(self) + | + | clr_combined(self, *args) + | clr_combined(self) + | + | clr_fpinsn(self, *args) + | clr_fpinsn(self) + | + | clr_ignlowsrc(self, *args) + | clr_ignlowsrc(self) + | + | clr_multimov(self, *args) + | clr_multimov(self) + | + | clr_noret_icall(self, *args) + | clr_noret_icall(self) + | + | clr_propagatable(self, *args) + | clr_propagatable(self) + | + | clr_tailcall(self, *args) + | clr_tailcall(self) + | + | contains_call(self, *args) + | contains_call(self, with_helpers=False) -> bool + | + | contains_opcode(self, *args) + | contains_opcode(self, mcode) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | equal_insns(self, *args) + | equal_insns(self, m, eqflags) -> bool + | + | find_call(self, *args) + | find_call(self, with_helpers=False) -> minsn_t + | + | find_ins_op(self, *args) + | find_ins_op(self, op=m_nop) -> minsn_t + | + | find_num_op(self, *args) + | find_num_op(self) -> mop_t + | + | find_opcode(self, *args) + | find_opcode(self, mcode) -> minsn_t + | find_opcode(self, mcode) -> minsn_t + | + | for_all_insns(self, *args) + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) + | for_all_ops(self, mv) -> int + | + | get_role(self, *args) + | get_role(self) -> funcrole_t + | + | get_split_size(self, *args) + | get_split_size(self) -> int + | + | has_side_effects(self, *args) + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is_after(self, *args) + | is_after(self, m) -> bool + | + | is_alloca(self, *args) + | is_alloca(self) -> bool + | + | is_assert(self, *args) + | is_assert(self) -> bool + | + | is_between(self, *args) + | is_between(self, m1, m2) -> bool + | + | is_bswap(self, *args) + | is_bswap(self) -> bool + | + | is_cleaning_pop(self, *args) + | is_cleaning_pop(self) -> bool + | + | is_combinable(self, *args) + | is_combinable(self) -> bool + | + | is_combined(self, *args) + | is_combined(self) -> bool + | + | is_extstx(self, *args) + | is_extstx(self) -> bool + | + | is_farcall(self, *args) + | is_farcall(self) -> bool + | + | is_fpinsn(self, *args) + | is_fpinsn(self) -> bool + | + | is_helper(self, *args) + | is_helper(self, name) -> bool + | + | is_ignlowsrc(self, *args) + | is_ignlowsrc(self) -> bool + | + | is_inverted_jx(self, *args) + | is_inverted_jx(self) -> bool + | + | is_like_move(self, *args) + | is_like_move(self) -> bool + | + | is_mbarrier(self, *args) + | is_mbarrier(self) -> bool + | + | is_memcpy(self, *args) + | is_memcpy(self) -> bool + | + | is_memset(self, *args) + | is_memset(self) -> bool + | + | is_mov(self, *args) + | is_mov(self) -> bool + | + | is_multimov(self, *args) + | is_multimov(self) -> bool + | + | is_noret_call(self, *args) + | is_noret_call(self, ignore_noret_icall=False) -> bool + | + | is_optional(self, *args) + | is_optional(self) -> bool + | + | is_persistent(self, *args) + | is_persistent(self) -> bool + | + | is_propagatable(self, *args) + | is_propagatable(self) -> bool + | + | is_readflags(self, *args) + | is_readflags(self) -> bool + | + | is_tailcall(self, *args) + | is_tailcall(self) -> bool + | + | is_unknown_call(self, *args) + | is_unknown_call(self) -> bool + | + | is_wild_match(self, *args) + | is_wild_match(self) -> bool + | + | lexcompare(self, *args) + | lexcompare(self, ri) -> int + | + | may_use_aliased_memory(self, *args) + | may_use_aliased_memory(self) -> bool + | + | modifes_d(self, *args) + | modifes_d(self) -> bool + | + | modifies_pair_mop(self, *args) + | modifies_pair_mop(self) -> bool + | + | optimize_solo(self, *args) + | optimize_solo(self, optflags=0) -> int + | + | optimize_subtree(self, *args) + | optimize_subtree(self, blk, top, parent, converted_call, optflags=0x0002) -> int + | + | replace_by(self, o) + | + | set_assert(self, *args) + | set_assert(self) + | + | set_cleaning_pop(self, *args) + | set_cleaning_pop(self) + | + | set_combinable(self, *args) + | set_combinable(self) + | + | set_extstx(self, *args) + | set_extstx(self) + | + | set_farcall(self, *args) + | set_farcall(self) + | + | set_fpinsn(self, *args) + | set_fpinsn(self) + | + | set_ignlowsrc(self, *args) + | set_ignlowsrc(self) + | + | set_inverted_jx(self, *args) + | set_inverted_jx(self) + | + | set_mbarrier(self, *args) + | set_mbarrier(self) + | + | set_multimov(self, *args) + | set_multimov(self) + | + | set_noret_icall(self, *args) + | set_noret_icall(self) + | + | set_optional(self, *args) + | set_optional(self) + | + | set_persistent(self, *args) + | set_persistent(self) + | + | set_split_size(self, *args) + | set_split_size(self, s) + | + | set_tailcall(self, *args) + | set_tailcall(self) + | + | set_wild_match(self, *args) + | set_wild_match(self) + | + | setaddr(self, *args) + | setaddr(self, new_ea) + | + | swap(self, *args) + | swap(self, m) + | + | was_noret_icall(self, *args) + | was_noret_icall(self) -> bool + | + | was_split(self, *args) + | was_split(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | d + | minsn_t_d_get(self) -> mop_t + | + | ea + | minsn_t_ea_get(self) -> ea_t + | + | iprops + | minsn_t_iprops_get(self) -> int + | + | l + | minsn_t_l_get(self) -> mop_t + | + | meminfo + | + | next + | minsn_t_next_get(self) -> minsn_t + | + | obj_id + | _obj_id(self) -> PyObject * + | + | opcode + | minsn_t_opcode_get(self) -> mcode_t + | + | prev + | minsn_t_prev_get(self) -> minsn_t + | + | r + | minsn_t_r_get(self) -> mop_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_minsn_t(self) + +Help on class minsn_visitor_t in module ida_hexrays: + +class minsn_visitor_t(op_parent_info_t) + | Proxy of C++ minsn_visitor_t class. + | + | Method resolution order: + | minsn_visitor_t + | op_parent_info_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> minsn_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_minsn(self, *args) + | visit_minsn(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_minsn_visitor_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from op_parent_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + +Help on class mlist_mop_visitor_t in module ida_hexrays: + +class mlist_mop_visitor_t(__builtin__.object) + | Proxy of C++ mlist_mop_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> mlist_mop_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_mop(self, *args) + | visit_mop(self, op) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | changed + | mlist_mop_visitor_t_changed_get(self) -> bool + | + | curins + | mlist_mop_visitor_t_curins_get(self) -> minsn_t + | + | list + | mlist_mop_visitor_t_list_get(self) -> mlist_t + | + | thisown + | The membership flag + | + | topins + | mlist_mop_visitor_t_topins_get(self) -> minsn_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mlist_mop_visitor_t(self) + +Help on class mlist_t in module ida_hexrays: + +class mlist_t(__builtin__.object) + | Proxy of C++ mlist_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> mlist_t + | __init__(self, ivl) -> mlist_t + | __init__(self, r, size) -> mlist_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | add(self, *args) + | add(self, r, size) -> bool + | add(self, r) -> bool + | add(self, ivl) -> bool + | add(self, lst) -> bool + | + | addmem(self, *args) + | addmem(self, ea, size) -> bool + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | count(self, *args) + | count(self) -> asize_t + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | has(self, *args) + | has(self, r) -> bool + | + | has_all(self, *args) + | has_all(self, r, size) -> bool + | + | has_any(self, *args) + | has_any(self, r, size) -> bool + | + | has_common(self, *args) + | has_common(self, lst) -> bool + | + | has_memory(self, *args) + | has_memory(self) -> bool + | + | includes(self, *args) + | includes(self, lst) -> bool + | + | intersect(self, *args) + | intersect(self, lst) -> bool + | + | is_subset_of(self, *args) + | is_subset_of(self, lst) -> bool + | + | sub(self, *args) + | sub(self, r, size) -> bool + | sub(self, ivl) -> bool + | sub(self, lst) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | mem + | mlist_t_mem_get(self) -> ivlset_t + | + | reg + | mlist_t_reg_get(self) -> rlist_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mlist_t(self) + +Help on class mnumber_t in module ida_hexrays: + +class mnumber_t(operand_locator_t) + | Proxy of C++ mnumber_t class. + | + | Method resolution order: + | mnumber_t + | operand_locator_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, v, _ea=BADADDR, n=0) -> mnumber_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | update_value(self, *args) + | update_value(self, val64) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | org_value + | mnumber_t_org_value_get(self) -> uint64 + | + | thisown + | The membership flag + | + | value + | mnumber_t_value_get(self) -> uint64 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mnumber_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from operand_locator_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | operand_locator_t_ea_get(self) -> ea_t + | + | opnum + | operand_locator_t_opnum_get(self) -> int + +Help on function modify_user_lvar_info in module ida_hexrays: + +modify_user_lvar_info(*args) + modify_user_lvar_info(func_ea, mli_flags, info) -> bool + + + Modify saved local variable settings. + + @param func_ea (C++: ea_t) + @param mli_flags: bits that specify which attrs defined by INFO are to + be set (C++: uint) + @param info: local variable info attrs (C++: const lvar_saved_info_t + &) + @return: true if modified, false if invalid MLI_FLAGS passed + +Help on function modify_user_lvars in module ida_hexrays: + +modify_user_lvars(*args) + modify_user_lvars(entry_ea, mlv) -> bool + + + Modify saved local variable settings. + + @param entry_ea: function start address (C++: ea_t) + @param mlv: local variable modifier (C++: user_lvar_modifier_t &) + @return: true if modified variables + +Help on class mop_addr_t in module ida_hexrays: + +class mop_addr_t(mop_t) + | Proxy of C++ mop_addr_t class. + | + | Method resolution order: + | mop_addr_t + | mop_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mop_addr_t + | __init__(self, ra) -> mop_addr_t + | __init__(self, ra, isz, osz) -> mop_addr_t + | + | __repr__ = _swig_repr(self) + | + | lexcompare(self, *args) + | lexcompare(self, ra) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | insize + | mop_addr_t_insize_get(self) -> int + | + | outsize + | mop_addr_t_outsize_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mop_addr_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from mop_t: + | + | __eq__(self, *args) + | __eq__(self, rop) -> bool + | + | __lt__(self, *args) + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) + | __ne__(self, rop) -> bool + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) + | _get_b(self) -> int + | + | _get_c(self, *args) + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) + | _get_helper(self) -> char const * + | + | _get_l(self, *args) + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) + | _make_gvar(self, ea) + | + | _make_insn(self, *args) + | _make_insn(self, ins) + | + | _make_lvar(self, *args) + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) + | _make_pair(self, _pair) + | + | _make_reg(self, *args) + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) + | _register(self) + | + | _set_a(self, *args) + | _set_a(self, _v) + | + | _set_b(self, *args) + | _set_b(self, _v) + | + | _set_c(self, *args) + | _set_c(self, _v) + | + | _set_cstr(self, *args) + | _set_cstr(self, _v) + | + | _set_d(self, *args) + | _set_d(self, _v) + | + | _set_f(self, *args) + | _set_f(self, _v) + | + | _set_fpc(self, *args) + | _set_fpc(self, _v) + | + | _set_g(self, *args) + | _set_g(self, _v) + | + | _set_helper(self, *args) + | _set_helper(self, _v) + | + | _set_l(self, *args) + | _set_l(self, _v) + | + | _set_nnn(self, *args) + | _set_nnn(self, _v) + | + | _set_pair(self, *args) + | _set_pair(self, _v) + | + | _set_r(self, *args) + | _set_r(self, _v) + | + | _set_s(self, *args) + | _set_s(self, _v) + | + | _set_scif(self, *args) + | _set_scif(self, _v) + | + | _set_t(self, *args) + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) + | assign(self, rop) -> mop_t + | + | change_size(self, *args) + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | equal_mops(self, *args) + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) + | erase(self) + | + | erase_but_keep_size(self, *args) + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) + | is01(self) -> bool + | + | is_arglist(self, *args) + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) + | is_cc(self) -> bool + | + | is_ccflags(self, *args) + | is_ccflags(self) -> bool + | + | is_constant(self, *args) + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) + | is_kreg(self) -> bool + | + | is_mob(self, *args) + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) + | is_negative_constant(self) -> bool + | + | is_one(self, *args) + | is_one(self) -> bool + | + | is_positive_constant(self, *args) + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) + | is_udt(self) -> bool + | + | is_undef_val(self, *args) + | is_undef_val(self) -> bool + | + | is_zero(self, *args) + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) + | is_zero_extended_from(self, nbytes) -> bool + | + | make_blkref(self, *args) + | make_blkref(self, blknum) + | + | make_first_half(self, *args) + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) + | make_gvar(self, ea) + | + | make_helper(self, *args) + | make_helper(self, name) + | + | make_high_half(self, *args) + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) + | make_insn(self, ins) + | + | make_low_half(self, *args) + | make_low_half(self, width) -> bool + | + | make_number(self, *args) + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) + | set_impptr_done(self) + | + | set_udt(self, *args) + | set_udt(self) + | + | set_undef_val(self, *args) + | set_undef_val(self) + | + | shift_mop(self, *args) + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) + | signed_value(self) -> int64 + | + | swap(self, *args) + | swap(self, rop) + | + | unsigned_value(self, *args) + | unsigned_value(self) -> uint64 + | + | value(self, *args) + | value(self, is_signed) -> uint64 + | + | zero(self, *args) + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from mop_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | valnum + | mop_t_valnum_get(self) -> uint16 + +Help on class mop_pair_t in module ida_hexrays: + +class mop_pair_t(__builtin__.object) + | Proxy of C++ mop_pair_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mop_pair_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hop + | mop_pair_t_hop_get(self) -> mop_t + | + | lop + | mop_pair_t_lop_get(self) -> mop_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mop_pair_t(self) + +Help on class mop_t in module ida_hexrays: + +class mop_t(__builtin__.object) + | Proxy of C++ mop_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, rop) -> bool + | + | __init__(self, *args) + | __init__(self) -> mop_t + | __init__(self, rop) -> mop_t + | __init__(self, _r, _s) -> mop_t + | + | __lt__(self, *args) + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) + | __ne__(self, rop) -> bool + | + | __repr__ = _swig_repr(self) + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) + | _get_b(self) -> int + | + | _get_c(self, *args) + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) + | _get_helper(self) -> char const * + | + | _get_l(self, *args) + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) + | _make_gvar(self, ea) + | + | _make_insn(self, *args) + | _make_insn(self, ins) + | + | _make_lvar(self, *args) + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) + | _make_pair(self, _pair) + | + | _make_reg(self, *args) + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) + | _register(self) + | + | _set_a(self, *args) + | _set_a(self, _v) + | + | _set_b(self, *args) + | _set_b(self, _v) + | + | _set_c(self, *args) + | _set_c(self, _v) + | + | _set_cstr(self, *args) + | _set_cstr(self, _v) + | + | _set_d(self, *args) + | _set_d(self, _v) + | + | _set_f(self, *args) + | _set_f(self, _v) + | + | _set_fpc(self, *args) + | _set_fpc(self, _v) + | + | _set_g(self, *args) + | _set_g(self, _v) + | + | _set_helper(self, *args) + | _set_helper(self, _v) + | + | _set_l(self, *args) + | _set_l(self, _v) + | + | _set_nnn(self, *args) + | _set_nnn(self, _v) + | + | _set_pair(self, *args) + | _set_pair(self, _v) + | + | _set_r(self, *args) + | _set_r(self, _v) + | + | _set_s(self, *args) + | _set_s(self, _v) + | + | _set_scif(self, *args) + | _set_scif(self, _v) + | + | _set_t(self, *args) + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) + | assign(self, rop) -> mop_t + | + | change_size(self, *args) + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | equal_mops(self, *args) + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) + | erase(self) + | + | erase_but_keep_size(self, *args) + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) + | is01(self) -> bool + | + | is_arglist(self, *args) + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) + | is_cc(self) -> bool + | + | is_ccflags(self, *args) + | is_ccflags(self) -> bool + | + | is_constant(self, *args) + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) + | is_kreg(self) -> bool + | + | is_mob(self, *args) + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) + | is_negative_constant(self) -> bool + | + | is_one(self, *args) + | is_one(self) -> bool + | + | is_positive_constant(self, *args) + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) + | is_udt(self) -> bool + | + | is_undef_val(self, *args) + | is_undef_val(self) -> bool + | + | is_zero(self, *args) + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) + | is_zero_extended_from(self, nbytes) -> bool + | + | lexcompare(self, *args) + | lexcompare(self, rop) -> int + | + | make_blkref(self, *args) + | make_blkref(self, blknum) + | + | make_first_half(self, *args) + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) + | make_gvar(self, ea) + | + | make_helper(self, *args) + | make_helper(self, name) + | + | make_high_half(self, *args) + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) + | make_insn(self, ins) + | + | make_low_half(self, *args) + | make_low_half(self, width) -> bool + | + | make_number(self, *args) + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) + | set_impptr_done(self) + | + | set_udt(self, *args) + | set_udt(self) + | + | set_undef_val(self, *args) + | set_undef_val(self) + | + | shift_mop(self, *args) + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) + | signed_value(self) -> int64 + | + | swap(self, *args) + | swap(self, rop) + | + | unsigned_value(self, *args) + | unsigned_value(self) -> uint64 + | + | value(self, *args) + | value(self, is_signed) -> uint64 + | + | zero(self, *args) + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | thisown + | The membership flag + | + | valnum + | mop_t_valnum_get(self) -> uint16 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mop_t(self) + +Help on class mop_visitor_t in module ida_hexrays: + +class mop_visitor_t(op_parent_info_t) + | Proxy of C++ mop_visitor_t class. + | + | Method resolution order: + | mop_visitor_t + | op_parent_info_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> mop_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_mop(self, *args) + | visit_mop(self, op, type, is_target) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | prune + | mop_visitor_t_prune_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mop_visitor_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from op_parent_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + +Help on class mopvec_t in module ida_hexrays: + +class mopvec_t(__builtin__.object) + | Proxy of C++ qvector< mop_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> mop_t + | + | __init__(self, *args) + | __init__(self) -> mopvec_t + | __init__(self, x) -> mopvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> mop_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> mop_t + | begin(self) -> mop_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> mop_t + | end(self) -> mop_t + | + | erase(self, *args) + | erase(self, it) -> mop_t + | erase(self, first, last) -> mop_t + | + | extract(self, *args) + | extract(self) -> mop_t + | + | find(self, *args) + | find(self, x) -> mop_t + | find(self, x) -> mop_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=mop_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> mop_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> mop_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mopvec_t(self) + +Help on function mreg2reg in module ida_hexrays: + +mreg2reg(*args) + mreg2reg(reg, width) -> int + + + Map a microregister to a processor register. + + @param reg: microregister number (C++: mreg_t) + @param width: size of microregister in bytes (C++: int) + @return: processor register id or -1 + +Help on function must_mcode_close_block in module ida_hexrays: + +must_mcode_close_block(*args) + must_mcode_close_block(mcode, including_calls) -> bool + + + Must an instruction with the given opcode be the last one in a block? + Such opcodes are called closing opcodes. + + @param mcode: instruction opcode (C++: mcode_t) + @param including_calls: should m_call/m_icall be considered as the + closing opcodes? If this function returns + true, the opcode cannot appear in the middle + of a block. Calls are a special case because + before MMAT_CALLS they are closing opcodes. + Afteer MMAT_CALLS that are not considered as + closing opcodes. (C++: bool) + +Help on function negate_mcode_relation in module ida_hexrays: + +negate_mcode_relation(*args) + negate_mcode_relation(code) -> mcode_t + +Help on function negated_relation in module ida_hexrays: + +negated_relation(*args) + negated_relation(op) -> ctype_t + + + Negate a comparison operator. For example, cot_sge becomes cot_slt. + + + @param op (C++: ctype_t) + +Help on function new_block in module ida_hexrays: + +new_block() + +Help on class number_format_t in module ida_hexrays: + +class number_format_t(__builtin__.object) + | Proxy of C++ number_format_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _opnum=0) -> number_format_t + | + | __repr__ = _swig_repr(self) + | + | get_radix(self, *args) + | get_radix(self) -> int + | + | is_char(self, *args) + | is_char(self) -> bool + | + | is_dec(self, *args) + | is_dec(self) -> bool + | + | is_enum(self, *args) + | is_enum(self) -> bool + | + | is_fixed(self, *args) + | is_fixed(self) -> bool + | + | is_hex(self, *args) + | is_hex(self) -> bool + | + | is_numop(self, *args) + | is_numop(self) -> bool + | + | is_oct(self, *args) + | is_oct(self) -> bool + | + | is_stroff(self, *args) + | is_stroff(self) -> bool + | + | needs_to_be_inverted(self, *args) + | needs_to_be_inverted(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | number_format_t_flags_get(self) -> flags_t + | + | opnum + | number_format_t_opnum_get(self) -> char + | + | org_nbytes + | number_format_t_org_nbytes_get(self) -> char + | + | props + | number_format_t_props_get(self) -> char + | + | serial + | number_format_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | type_name + | number_format_t_type_name_get(self) -> qstring * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_number_format_t(self) + +Help on class op_parent_info_t in module ida_hexrays: + +class op_parent_info_t(__builtin__.object) + | Proxy of C++ op_parent_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> op_parent_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_op_parent_info_t(self) + +Help on function op_uses_x in module ida_hexrays: + +op_uses_x(*args) + op_uses_x(op) -> bool + + + Does operator use the 'x' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function op_uses_y in module ida_hexrays: + +op_uses_y(*args) + op_uses_y(op) -> bool + + + Does operator use the 'y' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function op_uses_z in module ida_hexrays: + +op_uses_z(*args) + op_uses_z(op) -> bool + + + Does operator use the 'z' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function open_pseudocode in module ida_hexrays: + +open_pseudocode(*args) + open_pseudocode(ea, new_window) -> vdui_t + + + Open pseudocode window. The specified function is decompiled and the + pseudocode window is opened. + + @param ea: function to decompile (C++: ea_t) + @param new_window: 0:reuse existing window; 1:open new window; -1: + reuse existing window if the current view is + pseudocode (C++: int) + @return: false if failed + +Help on class operand_locator_t in module ida_hexrays: + +class operand_locator_t(__builtin__.object) + | Proxy of C++ operand_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _ea, _opnum) -> operand_locator_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | operand_locator_t_ea_get(self) -> ea_t + | + | opnum + | operand_locator_t_opnum_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_operand_locator_t(self) + +Help on class operator_info_t in module ida_hexrays: + +class operator_info_t(__builtin__.object) + | Proxy of C++ operator_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> operator_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fixtype + | operator_info_t_fixtype_get(self) -> uchar + | + | flags + | operator_info_t_flags_get(self) -> uchar + | + | precedence + | operator_info_t_precedence_get(self) -> uchar + | + | text + | operator_info_t_text_get(self) -> char const * + | + | thisown + | The membership flag + | + | valency + | operator_info_t_valency_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_operator_info_t(self) + +Help on class optblock_t in module ida_hexrays: + +class optblock_t(__builtin__.object) + | Proxy of C++ optblock_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> optblock_t + | + | __repr__ = _swig_repr(self) + | + | func(self, *args) + | func(self, blk) -> int + | + | install(self, *args) + | install(self) + | + | remove(self, *args) + | remove(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_optblock_t(self) + +Help on class optinsn_t in module ida_hexrays: + +class optinsn_t(__builtin__.object) + | Proxy of C++ optinsn_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> optinsn_t + | + | __repr__ = _swig_repr(self) + | + | func(self, *args) + | func(self, blk, ins) -> int + | + | install(self, *args) + | install(self) + | + | remove(self, *args) + | remove(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_optinsn_t(self) + +Help on function parse_user_call in module ida_hexrays: + +parse_user_call(*args) + parse_user_call(udc, decl, silent) -> bool + + + Convert function type declaration into internal structure + + @param udc: - pointer to output structure (C++: udcall_t *) + @param decl: - function type declaration (C++: const char *) + @param silent: - if TRUE: do not show warning in case of incorrect + type (C++: bool) + @return: success + +Help on function partial_type_num in module ida_hexrays: + +partial_type_num(*args) + partial_type_num(type) -> int + + + Calculate number of partial subtypes. + + @param type (C++: const tinfo_t &) + @return: number of partial subtypes. The bigger is this number, the + uglier is the type. + +Help on function print_vdloc in module ida_hexrays: + +print_vdloc(*args) + print_vdloc(loc, nbytes) + + + Print vdloc. Since vdloc does not always carry the size info, we pass + it as NBYTES.. + + @param loc (C++: const vdloc_t &) + @param nbytes (C++: int) + +Help on function property_op_to_typename in module ida_hexrays: + +property_op_to_typename(self) + +Help on class qlist_cinsn_t in module ida_hexrays: + +class qlist_cinsn_t(__builtin__.object) + | Proxy of C++ qlist< cinsn_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> qlist_cinsn_t + | __init__(self, x) -> qlist_cinsn_t + | + | __ne__(self, *args) + | __ne__(self, x) -> bool + | + | __repr__ = _swig_repr(self) + | + | back(self, *args) + | back(self) -> cinsn_t + | back(self) -> cinsn_t + | + | begin(self, *args) + | begin(self) -> qlist_cinsn_t_iterator + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qlist_cinsn_t_iterator + | + | erase(self, *args) + | erase(self, p) -> qlist< cinsn_t >::iterator + | erase(self, p1, p2) + | erase(self, p) + | + | front(self, *args) + | front(self) -> cinsn_t + | front(self) -> cinsn_t + | + | insert(self, *args) + | insert(self, p, x) -> qlist< cinsn_t >::iterator + | insert(self, p) -> qlist< cinsn_t >::iterator + | insert(self, p, x) -> qlist_cinsn_t_iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | pop_front(self, *args) + | pop_front(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> cinsn_t + | + | push_front(self, *args) + | push_front(self, x) + | + | rbegin(self, *args) + | rbegin(self) -> qlist< cinsn_t >::reverse_iterator + | rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | rend(self, *args) + | rend(self) -> qlist< cinsn_t >::reverse_iterator + | rend(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, x) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qlist_cinsn_t(self) + +Help on class qlist_cinsn_t_iterator in module ida_hexrays: + +class qlist_cinsn_t_iterator(__builtin__.object) + | Proxy of C++ qlist_cinsn_t_iterator class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> qlist_cinsn_t_iterator + | + | __ne__(self, *args) + | __ne__(self, x) -> bool + | + | __next__(self, *args) + | __next__(self) + | + | __repr__ = _swig_repr(self) + | + | next = __next__(self, *args) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cur + | qlist_cinsn_t_iterator_cur_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qlist_cinsn_t_iterator(self) + +Help on class qstring_printer_t in module ida_hexrays: + +class qstring_printer_t(vc_printer_t) + | Proxy of C++ qstring_printer_t class. + | + | Method resolution order: + | qstring_printer_t + | vc_printer_t + | vd_printer_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, f, tags) -> qstring_printer_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, indent, format) -> int + | + | get_s(self, *args) + | get_s(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | s + | + | thisown + | The membership flag + | + | with_tags + | qstring_printer_t_with_tags_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Methods inherited from vc_printer_t: + | + | __disown__(self) + | + | oneliner(self, *args) + | oneliner(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vc_printer_t: + | + | func + | vc_printer_t_func_get(self) -> cfunc_t + | + | lastchar + | vc_printer_t_lastchar_get(self) -> char + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from vc_printer_t: + | + | __swig_destroy__ = + | delete_vc_printer_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_printer_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + +Help on function qswap in module ida_hexrays: + +qswap(*args) + qswap(a, b) + +Help on class qvector_carg_t in module ida_hexrays: + +class qvector_carg_t(__builtin__.object) + | Proxy of C++ qvector< carg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> carg_t + | + | __init__(self, *args) + | __init__(self) -> qvector_carg_t + | __init__(self, x) -> qvector_carg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> carg_t + | begin(self) -> carg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> carg_t + | end(self) -> carg_t + | + | erase(self, *args) + | erase(self, it) -> carg_t + | erase(self, first, last) -> carg_t + | + | extract(self, *args) + | extract(self) -> carg_t + | + | find(self, *args) + | find(self, x) -> carg_t + | find(self, x) -> carg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=carg_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> carg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> carg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qvector_carg_t(self) + +Help on class qvector_ccase_t in module ida_hexrays: + +class qvector_ccase_t(__builtin__.object) + | Proxy of C++ qvector< ccase_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> ccase_t + | + | __init__(self, *args) + | __init__(self) -> qvector_ccase_t + | __init__(self, x) -> qvector_ccase_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> ccase_t + | begin(self) -> ccase_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ccase_t + | end(self) -> ccase_t + | + | erase(self, *args) + | erase(self, it) -> ccase_t + | erase(self, first, last) -> ccase_t + | + | extract(self, *args) + | extract(self) -> ccase_t + | + | find(self, *args) + | find(self, x) -> ccase_t + | find(self, x) -> ccase_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=ccase_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> ccase_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ccase_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qvector_ccase_t(self) + +Help on class qvector_history_t in module ida_hexrays: + +class qvector_history_t(__builtin__.object) + | Proxy of C++ qvector< history_item_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> history_item_t + | + | __init__(self, *args) + | __init__(self) -> qvector_history_t + | __init__(self, x) -> qvector_history_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> history_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> history_item_t + | begin(self) -> history_item_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> history_item_t + | end(self) -> history_item_t + | + | erase(self, *args) + | erase(self, it) -> history_item_t + | erase(self, first, last) -> history_item_t + | + | extract(self, *args) + | extract(self) -> history_item_t + | + | find(self, *args) + | find(self, x) -> history_item_t + | find(self, x) -> history_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=history_item_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> history_item_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> history_item_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qvector_history_t(self) + +Help on class qvector_lvar_t in module ida_hexrays: + +class qvector_lvar_t(__builtin__.object) + | Proxy of C++ qvector< lvar_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> lvar_t + | + | __init__(self, *args) + | __init__(self) -> qvector_lvar_t + | __init__(self, x) -> qvector_lvar_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> lvar_t + | begin(self) -> lvar_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> lvar_t + | end(self) -> lvar_t + | + | erase(self, *args) + | erase(self, it) -> lvar_t + | erase(self, first, last) -> lvar_t + | + | extract(self, *args) + | extract(self) -> lvar_t + | + | find(self, *args) + | find(self, x) -> lvar_t + | find(self, x) -> lvar_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=lvar_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> lvar_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> lvar_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qvector_lvar_t(self) + +Help on function reg2mreg in module ida_hexrays: + +reg2mreg(*args) + reg2mreg(reg) -> mreg_t + + + Map a processor register to a microregister. + + @param reg: processor register number (C++: int) + @return: microregister register id or mr_none + +Help on function remitem in module ida_hexrays: + +remitem(*args) + remitem(e) + +Help on function remove_hexrays_callback in module ida_hexrays: + +remove_hexrays_callback(callback) + Deprecated. Please use Hexrays_Hooks instead + +Help on function restore_user_cmts in module ida_hexrays: + +restore_user_cmts(*args) + restore_user_cmts(func_ea) -> user_cmts_t + + + Restore user defined comments from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined comments. The returned object must + be deleted by the caller using delete_user_cmts() + +Help on function restore_user_defined_calls in module ida_hexrays: + +restore_user_defined_calls(*args) + restore_user_defined_calls(udcalls, func_ea) -> bool + + + Restore user defined function calls from the database. + + @param udcalls: ptr to output buffer (C++: udcall_map_t *) + @param func_ea: entry address of the function (C++: ea_t) + @return: success + +Help on function restore_user_iflags in module ida_hexrays: + +restore_user_iflags(*args) + restore_user_iflags(func_ea) -> user_iflags_t + + + Restore user defined citem iflags from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined iflags. The returned object must + be deleted by the caller using delete_user_iflags() + +Help on function restore_user_labels in module ida_hexrays: + +restore_user_labels(*args) + restore_user_labels(func_ea) -> user_labels_t + + + Restore user defined labels from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined labels. The returned object must + be deleted by the caller using delete_user_labels() + +Help on function restore_user_lvar_settings in module ida_hexrays: + +restore_user_lvar_settings(*args) + restore_user_lvar_settings(lvinf, func_ea) -> bool + + + Restore user defined local variable settings in the database. + + @param lvinf: ptr to output buffer (C++: lvar_uservec_t *) + @param func_ea: entry address of the function (C++: ea_t) + @return: success + +Help on function restore_user_numforms in module ida_hexrays: + +restore_user_numforms(*args) + restore_user_numforms(func_ea) -> user_numforms_t + + + Restore user defined number formats from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined number formats. The returned + object must be deleted by the caller using + delete_user_numforms() + +Help on function restore_user_unions in module ida_hexrays: + +restore_user_unions(*args) + restore_user_unions(func_ea) -> user_unions_t + + + Restore user defined union field selections from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of union field selections The returned object must + be deleted by the caller using delete_user_unions() + +Help on class rlist_t in module ida_hexrays: + +class rlist_t(bitset_t) + | Proxy of C++ rlist_t class. + | + | Method resolution order: + | rlist_t + | bitset_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rlist_t + | __init__(self, m) -> rlist_t + | __init__(self, reg, width) -> rlist_t + | + | __repr__ = _swig_repr(self) + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rlist_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from bitset_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __iter__(self) + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __len__ = count(self, *args) + | count(self) -> int + | count(self, bit) -> int + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | add(self, *args) + | add(self, bit) -> bool + | add(self, bit, width) -> bool + | add(self, ml) -> bool + | + | back(self, *args) + | back(self) -> int + | + | begin(self, *args) + | begin(self) -> bitset_t::iterator + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | copy(self, *args) + | copy(self, m) -> bitset_t + | + | count(self, *args) + | count(self) -> int + | count(self, bit) -> int + | + | cut_at(self, *args) + | cut_at(self, maxbit) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> bitset_t::iterator + | + | fill_with_ones(self, *args) + | fill_with_ones(self, maxbit) + | + | front(self, *args) + | front(self) -> int + | + | has(self, *args) + | has(self, bit) -> bool + | + | has_all(self, *args) + | has_all(self, bit, width) -> bool + | + | has_any(self, *args) + | has_any(self, bit, width) -> bool + | + | has_common(self, *args) + | has_common(self, ml) -> bool + | + | inc(self, *args) + | inc(self, p, n=1) + | + | includes(self, *args) + | includes(self, ml) -> bool + | + | intersect(self, *args) + | intersect(self, ml) -> bool + | + | is_subset_of(self, *args) + | is_subset_of(self, ml) -> bool + | + | itat(self, *args) + | itat(self, n) -> bitset_t::iterator + | + | itv(self, *args) + | itv(self, it) -> int + | + | last(self, *args) + | last(self) -> int + | + | shift_down(self, *args) + | shift_down(self, shift) + | + | sub(self, *args) + | sub(self, bit) -> bool + | sub(self, bit, width) -> bool + | sub(self, ml) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from bitset_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function save_user_cmts in module ida_hexrays: + +save_user_cmts(*args) + save_user_cmts(func_ea, user_cmts) + + + Save user defined comments into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param user_cmts: collection of user defined comments (C++: const + user_cmts_t *) + +Help on function save_user_defined_calls in module ida_hexrays: + +save_user_defined_calls(*args) + save_user_defined_calls(func_ea, udcalls) + + + Save user defined local function calls into the database. + + @param func_ea: entry address of the function (C++: ea_t) + @param udcalls: user-specified info about user defined function calls + (C++: const udcall_map_t &) + +Help on function save_user_iflags in module ida_hexrays: + +save_user_iflags(*args) + save_user_iflags(func_ea, iflags) + + + Save user defined citem iflags into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param iflags: collection of user defined citem iflags (C++: const + user_iflags_t *) + +Help on function save_user_labels in module ida_hexrays: + +save_user_labels(*args) + save_user_labels(func_ea, user_labels) + + + Save user defined labels into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param user_labels: collection of user defined labels (C++: const + user_labels_t *) + +Help on function save_user_lvar_settings in module ida_hexrays: + +save_user_lvar_settings(*args) + save_user_lvar_settings(func_ea, lvinf) + + + Save user defined local variable settings into the database. + + @param func_ea: entry address of the function (C++: ea_t) + @param lvinf: user-specified info about local variables (C++: const + lvar_uservec_t &) + +Help on function save_user_numforms in module ida_hexrays: + +save_user_numforms(*args) + save_user_numforms(func_ea, numforms) + + + Save user defined number formats into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param numforms: collection of user defined comments (C++: const + user_numforms_t *) + +Help on function save_user_unions in module ida_hexrays: + +save_user_unions(*args) + save_user_unions(func_ea, unions) + + + Save user defined union field selections into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param unions: collection of union field selections (C++: const + user_unions_t *) + +Help on class scif_t in module ida_hexrays: + +class scif_t(vdloc_t) + | Proxy of C++ scif_t class. + | + | Method resolution order: + | scif_t + | vdloc_t + | ida_typeinf.argloc_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _mba, n, tif) -> scif_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | mba + | scif_t_mba_get(self) -> mbl_array_t + | + | name + | scif_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | scif_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_scif_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from vdloc_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _set_reg1(self, *args) + | _set_reg1(self, r1) + | + | compare(self, *args) + | compare(self, r) -> int + | + | is_aliasable(self, *args) + | is_aliasable(self, mb, size) -> bool + | + | reg1(self, *args) + | reg1(self) -> int + | + | set_reg1(self, *args) + | set_reg1(self, r1) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_typeinf.argloc_t: + | + | _consume_rrel(self, *args) + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) + | _set_badloc(self) + | + | _set_biggest(self, *args) + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) + | _set_ea(self, _ea) + | + | _set_reg2(self, *args) + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) + | _set_stkoff(self, off) + | + | advance(self, *args) + | advance(self, delta) -> bool + | + | atype(self, *args) + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) + | calc_offset(self) -> sval_t + | + | consume_rrel(self, *args) + | consume_rrel(self, p) + | + | consume_scattered(self, *args) + | consume_scattered(self, p) + | + | get_biggest(self, *args) + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) + | get_custom(self) -> void * + | + | get_ea(self, *args) + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) + | has_reg(self) -> bool + | + | has_stkoff(self, *args) + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) + | is_badloc(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_ea(self, *args) + | is_ea(self) -> bool + | + | is_fragmented(self, *args) + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_rrel(self, *args) + | is_rrel(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) + | justify_stkoff_right(self, size, _slotsize) + | + | reg2(self, *args) + | reg2(self) -> int + | + | regoff(self, *args) + | regoff(self) -> int + | + | scattered(self, *args) + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) + | set_badloc(self) + | + | set_ea(self, *args) + | set_ea(self, _ea) + | + | set_reg2(self, *args) + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) + | set_stkoff(self, off) + | + | stkoff(self, *args) + | stkoff(self) -> sval_t + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_typeinf.argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class scif_visitor_t in module ida_hexrays: + +class scif_visitor_t(__builtin__.object) + | Proxy of C++ scif_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> scif_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_scif_mop(self, *args) + | visit_scif_mop(self, r, off) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_scif_visitor_t(self) + +Help on function select_udt_by_offset in module ida_hexrays: + +select_udt_by_offset(*args) + select_udt_by_offset(udts, ops, applicator) -> int + + + Select UDT + + @param udts: list of UDT tinfo_t for the selection, if NULL or empty + then UDTs from the "Local types" will be used (C++: const + qvector < tinfo_t > *) + @param ops: operands (C++: const ui_stroff_ops_t &) + @param applicator (C++: ui_stroff_applicator_t &) + +Help on function send_database in module ida_hexrays: + +send_database(*args) + send_database(err, silent) + + + Send the database to Hex-Rays. This function sends the current + database to the Hex-Rays server. The database is sent in the + compressed form over an encrypted (SSL) connection. + + @param err: failure description object. Empty hexrays_failure_t + object can be used if error information is not available. + (C++: const hexrays_failure_t &) + @param silent: if false, a dialog box will be displayed before sending + the database. (C++: bool) + +Help on function set2jcnd in module ida_hexrays: + +set2jcnd(*args) + set2jcnd(code) -> mcode_t + +Help on function set_type in module ida_hexrays: + +set_type(*args) + set_type(id, tif, source, force=False) -> bool + + + Set a global type. + + @param id: address or id of the object (C++: uval_t) + @param tif: new type info (C++: const tinfo_t &) + @param source: where the type comes from (C++: type_source_t) + @param force: true means to set the type as is, false means to merge + the new type with the possibly existing old type info. + (C++: bool) + @return: success + +Help on class simple_graph_t in module ida_hexrays: + +class simple_graph_t(__builtin__.object) + | Proxy of C++ simple_graph_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | colored_gdl_edges + | simple_graph_t_colored_gdl_edges_get(self) -> bool + | + | thisown + | The membership flag + | + | title + | simple_graph_t_title_get(self) -> qstring * + +Help on class stkvar_ref_t in module ida_hexrays: + +class stkvar_ref_t(__builtin__.object) + | Proxy of C++ stkvar_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, m, o) -> stkvar_ref_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | get_stkvar(self, *args) + | get_stkvar(self, p_off=None) -> member_t * + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | mba + | stkvar_ref_t_mba_get(self) -> mbl_array_t + | + | off + | stkvar_ref_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_stkvar_ref_t(self) + +Help on function swap_mcode_relation in module ida_hexrays: + +swap_mcode_relation(*args) + swap_mcode_relation(code) -> mcode_t + +Help on function swapped_relation in module ida_hexrays: + +swapped_relation(*args) + swapped_relation(op) -> ctype_t + + + Swap a comparison operator. For example, cot_sge becomes cot_sle. + + + @param op (C++: ctype_t) + +Help on function term_hexrays_plugin in module ida_hexrays: + +term_hexrays_plugin(*args) + term_hexrays_plugin() + + + Stop working with hex-rays decompiler. + +Help on class treeloc_t in module ida_hexrays: + +class treeloc_t(__builtin__.object) + | Proxy of C++ treeloc_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> treeloc_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | treeloc_t_ea_get(self) -> ea_t + | + | itp + | treeloc_t_itp_get(self) -> item_preciser_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_treeloc_t(self) + +Help on class udc_filter_t in module ida_hexrays: + +class udc_filter_t(microcode_filter_t) + | Proxy of C++ udc_filter_t class. + | + | Method resolution order: + | udc_filter_t + | microcode_filter_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> udc_filter_t + | + | __repr__ = _swig_repr(self) + | + | apply(self, *args) + | apply(self, cdg) -> merror_t + | + | init(self, *args) + | init(self, decl) -> bool + | + | match(self, *args) + | match(self, cdg) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udc_filter_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from microcode_filter_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function udcall_map_begin in module ida_hexrays: + +udcall_map_begin(*args) + udcall_map_begin(map) -> udcall_map_iterator_t + + + Get iterator pointing to the beginning of udcall_map_t. + + + @param map (C++: const udcall_map_t *) + +Help on function udcall_map_clear in module ida_hexrays: + +udcall_map_clear(*args) + udcall_map_clear(map) + + + Clear udcall_map_t. + + + @param map (C++: udcall_map_t *) + +Help on function udcall_map_end in module ida_hexrays: + +udcall_map_end(*args) + udcall_map_end(map) -> udcall_map_iterator_t + + + Get iterator pointing to the end of udcall_map_t. + + + @param map (C++: const udcall_map_t *) + +Help on function udcall_map_erase in module ida_hexrays: + +udcall_map_erase(*args) + udcall_map_erase(map, p) + + + Erase current element from udcall_map_t. + + + @param map (C++: udcall_map_t *) + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_find in module ida_hexrays: + +udcall_map_find(*args) + udcall_map_find(map, key) -> udcall_map_iterator_t + + + Find the specified key in udcall_map_t. + + + @param map (C++: const udcall_map_t *) + @param key (C++: const ea_t &) + +Help on function udcall_map_first in module ida_hexrays: + +udcall_map_first(*args) + udcall_map_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_free in module ida_hexrays: + +udcall_map_free(*args) + udcall_map_free(map) + + + Delete udcall_map_t instance. + + + @param map (C++: udcall_map_t *) + +Help on function udcall_map_insert in module ida_hexrays: + +udcall_map_insert(*args) + udcall_map_insert(map, key, val) -> udcall_map_iterator_t + + + Insert new (ea_t, 'udcall_t' ) pair into udcall_map_t. + + + @param map (C++: udcall_map_t *) + @param key (C++: const ea_t &) + @param val (C++: const udcall_t &) + +Help on class udcall_map_iterator_t in module ida_hexrays: + +class udcall_map_iterator_t(__builtin__.object) + | Proxy of C++ udcall_map_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> udcall_map_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | udcall_map_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udcall_map_iterator_t(self) + +Help on function udcall_map_new in module ida_hexrays: + +udcall_map_new(*args) + udcall_map_new() -> udcall_map_t * + + + Create a new udcall_map_t instance. + +Help on function udcall_map_next in module ida_hexrays: + +udcall_map_next(*args) + udcall_map_next(p) -> udcall_map_iterator_t + + + Move to the next element. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_prev in module ida_hexrays: + +udcall_map_prev(*args) + udcall_map_prev(p) -> udcall_map_iterator_t + + + Move to the previous element. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_second in module ida_hexrays: + +udcall_map_second(*args) + udcall_map_second(p) -> udcall_t + + + Get reference to the current map value. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_size in module ida_hexrays: + +udcall_map_size(*args) + udcall_map_size(map) -> size_t + + + Get size of udcall_map_t. + + + @param map (C++: udcall_map_t *) + +Help on class udcall_t in module ida_hexrays: + +class udcall_t(__builtin__.object) + | Proxy of C++ udcall_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> udcall_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | udcall_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tif + | udcall_t_tif_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udcall_t(self) + +Help on class ui_stroff_applicator_t in module ida_hexrays: + +class ui_stroff_applicator_t(__builtin__.object) + | Proxy of C++ ui_stroff_applicator_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_applicator_t + | + | __repr__ = _swig_repr(self) + | + | apply(self, *args) + | apply(self, opnum, path) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ui_stroff_applicator_t(self) + +Help on class ui_stroff_op_t in module ida_hexrays: + +class ui_stroff_op_t(__builtin__.object) + | Proxy of C++ ui_stroff_op_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_op_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | offset + | ui_stroff_op_t_offset_get(self) -> uval_t + | + | text + | ui_stroff_op_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ui_stroff_op_t(self) + +Help on class ui_stroff_ops_t in module ida_hexrays: + +class ui_stroff_ops_t(__builtin__.object) + | Proxy of C++ qvector< ui_stroff_op_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> ui_stroff_op_t + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_ops_t + | __init__(self, x) -> ui_stroff_ops_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> ui_stroff_op_t + | begin(self) -> ui_stroff_op_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ui_stroff_op_t + | end(self) -> ui_stroff_op_t + | + | erase(self, *args) + | erase(self, it) -> ui_stroff_op_t + | erase(self, first, last) -> ui_stroff_op_t + | + | extract(self, *args) + | extract(self) -> ui_stroff_op_t + | + | find(self, *args) + | find(self, x) -> ui_stroff_op_t + | find(self, x) -> ui_stroff_op_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=ui_stroff_op_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> ui_stroff_op_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ui_stroff_op_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ui_stroff_ops_t(self) + +Help on function user_cmts_begin in module ida_hexrays: + +user_cmts_begin(*args) + user_cmts_begin(map) -> user_cmts_iterator_t + + + Get iterator pointing to the beginning of user_cmts_t. + + + @param map (C++: const user_cmts_t *) + +Help on function user_cmts_clear in module ida_hexrays: + +user_cmts_clear(*args) + user_cmts_clear(map) + + + Clear user_cmts_t. + + + @param map (C++: user_cmts_t *) + +Help on function user_cmts_end in module ida_hexrays: + +user_cmts_end(*args) + user_cmts_end(map) -> user_cmts_iterator_t + + + Get iterator pointing to the end of user_cmts_t. + + + @param map (C++: const user_cmts_t *) + +Help on function user_cmts_erase in module ida_hexrays: + +user_cmts_erase(*args) + user_cmts_erase(map, p) + + + Erase current element from user_cmts_t. + + + @param map (C++: user_cmts_t *) + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_find in module ida_hexrays: + +user_cmts_find(*args) + user_cmts_find(map, key) -> user_cmts_iterator_t + + + Find the specified key in user_cmts_t. + + + @param map (C++: const user_cmts_t *) + @param key (C++: const treeloc_t &) + +Help on function user_cmts_first in module ida_hexrays: + +user_cmts_first(*args) + user_cmts_first(p) -> treeloc_t + + + Get reference to the current map key. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_free in module ida_hexrays: + +user_cmts_free(*args) + user_cmts_free(map) + + + Delete user_cmts_t instance. + + + @param map (C++: user_cmts_t *) + +Help on function user_cmts_insert in module ida_hexrays: + +user_cmts_insert(*args) + user_cmts_insert(map, key, val) -> user_cmts_iterator_t + + + Insert new ( 'treeloc_t' , 'citem_cmt_t' ) pair into user_cmts_t. + + + @param map (C++: user_cmts_t *) + @param key (C++: const treeloc_t &) + @param val (C++: const citem_cmt_t &) + +Help on class user_cmts_iterator_t in module ida_hexrays: + +class user_cmts_iterator_t(__builtin__.object) + | Proxy of C++ user_cmts_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_cmts_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | user_cmts_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_cmts_iterator_t(self) + +Help on function user_cmts_new in module ida_hexrays: + +user_cmts_new(*args) + user_cmts_new() -> user_cmts_t + + + Create a new user_cmts_t instance. + +Help on function user_cmts_next in module ida_hexrays: + +user_cmts_next(*args) + user_cmts_next(p) -> user_cmts_iterator_t + + + Move to the next element. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_prev in module ida_hexrays: + +user_cmts_prev(*args) + user_cmts_prev(p) -> user_cmts_iterator_t + + + Move to the previous element. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_second in module ida_hexrays: + +user_cmts_second(*args) + user_cmts_second(p) -> citem_cmt_t + + + Get reference to the current map value. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_size in module ida_hexrays: + +user_cmts_size(*args) + user_cmts_size(map) -> size_t + + + Get size of user_cmts_t. + + + @param map (C++: user_cmts_t *) + +Help on class user_cmts_t in module ida_hexrays: + +class user_cmts_t(__builtin__.object) + | Proxy of C++ std::map< treeloc_t,citem_cmt_t > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_cmts_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> citem_cmt_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | user_cmts_begin(map) -> user_cmts_iterator_t + | + | __clear = + | user_cmts_clear(map) + | + | __end = + | user_cmts_end(map) -> user_cmts_iterator_t + | + | __erase = + | user_cmts_erase(map, p) + | + | __find = + | user_cmts_find(map, key) -> user_cmts_iterator_t + | + | __first = + | user_cmts_first(p) -> treeloc_t + | + | __insert = + | user_cmts_insert(map, key, val) -> user_cmts_iterator_t + | + | __next = + | user_cmts_next(p) -> user_cmts_iterator_t + | + | __second = + | user_cmts_second(p) -> citem_cmt_t + | + | __size = + | user_cmts_size(map) -> size_t + | + | __swig_destroy__ = + | delete_user_cmts_t(self) + | + | keytype = + | Proxy of C++ treeloc_t class. + | + | valuetype = + | Proxy of C++ citem_cmt_t class. + +Help on function user_iflags_begin in module ida_hexrays: + +user_iflags_begin(*args) + user_iflags_begin(map) -> user_iflags_iterator_t + + + Get iterator pointing to the beginning of user_iflags_t. + + + @param map (C++: const user_iflags_t *) + +Help on function user_iflags_clear in module ida_hexrays: + +user_iflags_clear(*args) + user_iflags_clear(map) + + + Clear user_iflags_t. + + + @param map (C++: user_iflags_t *) + +Help on function user_iflags_end in module ida_hexrays: + +user_iflags_end(*args) + user_iflags_end(map) -> user_iflags_iterator_t + + + Get iterator pointing to the end of user_iflags_t. + + + @param map (C++: const user_iflags_t *) + +Help on function user_iflags_erase in module ida_hexrays: + +user_iflags_erase(*args) + user_iflags_erase(map, p) + + + Erase current element from user_iflags_t. + + + @param map (C++: user_iflags_t *) + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_find in module ida_hexrays: + +user_iflags_find(*args) + user_iflags_find(map, key) -> user_iflags_iterator_t + + + Find the specified key in user_iflags_t. + + + @param map (C++: const user_iflags_t *) + @param key (C++: const citem_locator_t &) + +Help on function user_iflags_first in module ida_hexrays: + +user_iflags_first(*args) + user_iflags_first(p) -> citem_locator_t + + + Get reference to the current map key. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_free in module ida_hexrays: + +user_iflags_free(*args) + user_iflags_free(map) + + + Delete user_iflags_t instance. + + + @param map (C++: user_iflags_t *) + +Help on function user_iflags_insert in module ida_hexrays: + +user_iflags_insert(*args) + user_iflags_insert(map, key, val) -> user_iflags_iterator_t + + + Insert new ( 'citem_locator_t' , int32) pair into user_iflags_t. + + + @param map (C++: user_iflags_t *) + @param key (C++: const citem_locator_t &) + @param val (C++: const int32 &) + +Help on class user_iflags_iterator_t in module ida_hexrays: + +class user_iflags_iterator_t(__builtin__.object) + | Proxy of C++ user_iflags_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_iflags_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | user_iflags_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_iflags_iterator_t(self) + +Help on function user_iflags_new in module ida_hexrays: + +user_iflags_new(*args) + user_iflags_new() -> user_iflags_t + + + Create a new user_iflags_t instance. + +Help on function user_iflags_next in module ida_hexrays: + +user_iflags_next(*args) + user_iflags_next(p) -> user_iflags_iterator_t + + + Move to the next element. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_prev in module ida_hexrays: + +user_iflags_prev(*args) + user_iflags_prev(p) -> user_iflags_iterator_t + + + Move to the previous element. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_second in module ida_hexrays: + +user_iflags_second(*args) + user_iflags_second(p) -> int32 const & + + + Get reference to the current map value. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_size in module ida_hexrays: + +user_iflags_size(*args) + user_iflags_size(map) -> size_t + + + Get size of user_iflags_t. + + + @param map (C++: user_iflags_t *) + +Help on class user_iflags_t in module ida_hexrays: + +class user_iflags_t(__builtin__.object) + | Proxy of C++ std::map< citem_locator_t,int32 > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_iflags_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> int & + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | user_iflags_begin(map) -> user_iflags_iterator_t + | + | __clear = + | user_iflags_clear(map) + | + | __end = + | user_iflags_end(map) -> user_iflags_iterator_t + | + | __erase = + | user_iflags_erase(map, p) + | + | __find = + | user_iflags_find(map, key) -> user_iflags_iterator_t + | + | __first = + | user_iflags_first(p) -> citem_locator_t + | + | __insert = + | user_iflags_insert(map, key, val) -> user_iflags_iterator_t + | + | __next = + | user_iflags_next(p) -> user_iflags_iterator_t + | + | __second = + | user_iflags_second(p) -> int32 const & + | + | __size = + | user_iflags_size(map) -> size_t + | + | __swig_destroy__ = + | delete_user_iflags_t(self) + | + | keytype = + | Proxy of C++ citem_locator_t class. + | + | valuetype = + | int(x=0) -> int or long + | int(x, base=10) -> int or long + | + | Convert a number or string to an integer, or return 0 if no arguments + | are given. If x is floating point, the conversion truncates towards zero. + | If x is outside the integer range, the function returns a long instead. + | + | If x is not a number or if base is given, then x must be a string or + | Unicode object representing an integer literal in the given base. The + | literal can be preceded by '+' or '-' and be surrounded by whitespace. + | The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to + | interpret the base from the string as an integer literal. + | >>> int('0b100', base=0) + | 4 + +Help on function user_labels_begin in module ida_hexrays: + +user_labels_begin(*args) + user_labels_begin(map) -> user_labels_iterator_t + + + Get iterator pointing to the beginning of user_labels_t. + + + @param map (C++: const user_labels_t *) + +Help on function user_labels_clear in module ida_hexrays: + +user_labels_clear(*args) + user_labels_clear(map) + + + Clear user_labels_t. + + + @param map (C++: user_labels_t *) + +Help on function user_labels_end in module ida_hexrays: + +user_labels_end(*args) + user_labels_end(map) -> user_labels_iterator_t + + + Get iterator pointing to the end of user_labels_t. + + + @param map (C++: const user_labels_t *) + +Help on function user_labels_erase in module ida_hexrays: + +user_labels_erase(*args) + user_labels_erase(map, p) + + + Erase current element from user_labels_t. + + + @param map (C++: user_labels_t *) + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_find in module ida_hexrays: + +user_labels_find(*args) + user_labels_find(map, key) -> user_labels_iterator_t + + + Find the specified key in user_labels_t. + + + @param map (C++: const user_labels_t *) + @param key (C++: const int &) + +Help on function user_labels_first in module ida_hexrays: + +user_labels_first(*args) + user_labels_first(p) -> int const & + + + Get reference to the current map key. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_free in module ida_hexrays: + +user_labels_free(*args) + user_labels_free(map) + + + Delete user_labels_t instance. + + + @param map (C++: user_labels_t *) + +Help on function user_labels_insert in module ida_hexrays: + +user_labels_insert(*args) + user_labels_insert(map, key, val) -> user_labels_iterator_t + + + Insert new (int, qstring) pair into user_labels_t. + + + @param map (C++: user_labels_t *) + @param key (C++: const int &) + @param val (C++: const qstring &) + +Help on class user_labels_iterator_t in module ida_hexrays: + +class user_labels_iterator_t(__builtin__.object) + | Proxy of C++ user_labels_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_labels_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | user_labels_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_labels_iterator_t(self) + +Help on function user_labels_new in module ida_hexrays: + +user_labels_new(*args) + user_labels_new() -> user_labels_t + + + Create a new user_labels_t instance. + +Help on function user_labels_next in module ida_hexrays: + +user_labels_next(*args) + user_labels_next(p) -> user_labels_iterator_t + + + Move to the next element. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_prev in module ida_hexrays: + +user_labels_prev(*args) + user_labels_prev(p) -> user_labels_iterator_t + + + Move to the previous element. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_second in module ida_hexrays: + +user_labels_second(*args) + user_labels_second(p) -> qstring & + + + Get reference to the current map value. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_size in module ida_hexrays: + +user_labels_size(*args) + user_labels_size(map) -> size_t + + + Get size of user_labels_t. + + + @param map (C++: user_labels_t *) + +Help on class user_labels_t in module ida_hexrays: + +class user_labels_t(__builtin__.object) + | Proxy of C++ std::map< int,qstring > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> user_labels_t + | + | __repr__ = _swig_repr(self) + | + | at(self, *args) + | at(self, _Keyval) -> _qstring< char > & + | + | size(self, *args) + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_labels_t(self) + +Help on class user_lvar_modifier_t in module ida_hexrays: + +class user_lvar_modifier_t(__builtin__.object) + | Proxy of C++ user_lvar_modifier_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> user_lvar_modifier_t + | + | __repr__ = _swig_repr(self) + | + | modify_lvars(self, *args) + | modify_lvars(self, lvinf) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_lvar_modifier_t(self) + +Help on function user_numforms_begin in module ida_hexrays: + +user_numforms_begin(*args) + user_numforms_begin(map) -> user_numforms_iterator_t + + + Get iterator pointing to the beginning of user_numforms_t. + + + @param map (C++: const user_numforms_t *) + +Help on function user_numforms_clear in module ida_hexrays: + +user_numforms_clear(*args) + user_numforms_clear(map) + + + Clear user_numforms_t. + + + @param map (C++: user_numforms_t *) + +Help on function user_numforms_end in module ida_hexrays: + +user_numforms_end(*args) + user_numforms_end(map) -> user_numforms_iterator_t + + + Get iterator pointing to the end of user_numforms_t. + + + @param map (C++: const user_numforms_t *) + +Help on function user_numforms_erase in module ida_hexrays: + +user_numforms_erase(*args) + user_numforms_erase(map, p) + + + Erase current element from user_numforms_t. + + + @param map (C++: user_numforms_t *) + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_find in module ida_hexrays: + +user_numforms_find(*args) + user_numforms_find(map, key) -> user_numforms_iterator_t + + + Find the specified key in user_numforms_t. + + + @param map (C++: const user_numforms_t *) + @param key (C++: const operand_locator_t &) + +Help on function user_numforms_first in module ida_hexrays: + +user_numforms_first(*args) + user_numforms_first(p) -> operand_locator_t + + + Get reference to the current map key. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_free in module ida_hexrays: + +user_numforms_free(*args) + user_numforms_free(map) + + + Delete user_numforms_t instance. + + + @param map (C++: user_numforms_t *) + +Help on function user_numforms_insert in module ida_hexrays: + +user_numforms_insert(*args) + user_numforms_insert(map, key, val) -> user_numforms_iterator_t + + + Insert new ( 'operand_locator_t' , 'number_format_t' ) pair into + user_numforms_t. + + + @param map (C++: user_numforms_t *) + @param key (C++: const operand_locator_t &) + @param val (C++: const number_format_t &) + +Help on class user_numforms_iterator_t in module ida_hexrays: + +class user_numforms_iterator_t(__builtin__.object) + | Proxy of C++ user_numforms_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_numforms_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | user_numforms_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_numforms_iterator_t(self) + +Help on function user_numforms_new in module ida_hexrays: + +user_numforms_new(*args) + user_numforms_new() -> user_numforms_t + + + Create a new user_numforms_t instance. + +Help on function user_numforms_next in module ida_hexrays: + +user_numforms_next(*args) + user_numforms_next(p) -> user_numforms_iterator_t + + + Move to the next element. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_prev in module ida_hexrays: + +user_numforms_prev(*args) + user_numforms_prev(p) -> user_numforms_iterator_t + + + Move to the previous element. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_second in module ida_hexrays: + +user_numforms_second(*args) + user_numforms_second(p) -> number_format_t + + + Get reference to the current map value. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_size in module ida_hexrays: + +user_numforms_size(*args) + user_numforms_size(map) -> size_t + + + Get size of user_numforms_t. + + + @param map (C++: user_numforms_t *) + +Help on class user_numforms_t in module ida_hexrays: + +class user_numforms_t(__builtin__.object) + | Proxy of C++ std::map< operand_locator_t,number_format_t > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_numforms_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> number_format_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | user_numforms_begin(map) -> user_numforms_iterator_t + | + | __clear = + | user_numforms_clear(map) + | + | __end = + | user_numforms_end(map) -> user_numforms_iterator_t + | + | __erase = + | user_numforms_erase(map, p) + | + | __find = + | user_numforms_find(map, key) -> user_numforms_iterator_t + | + | __first = + | user_numforms_first(p) -> operand_locator_t + | + | __insert = + | user_numforms_insert(map, key, val) -> user_numforms_iterator_t + | + | __next = + | user_numforms_next(p) -> user_numforms_iterator_t + | + | __second = + | user_numforms_second(p) -> number_format_t + | + | __size = + | user_numforms_size(map) -> size_t + | + | __swig_destroy__ = + | delete_user_numforms_t(self) + | + | keytype = + | Proxy of C++ operand_locator_t class. + | + | valuetype = + | Proxy of C++ number_format_t class. + +Help on function user_unions_begin in module ida_hexrays: + +user_unions_begin(*args) + user_unions_begin(map) -> user_unions_iterator_t + + + Get iterator pointing to the beginning of user_unions_t. + + + @param map (C++: const user_unions_t *) + +Help on function user_unions_clear in module ida_hexrays: + +user_unions_clear(*args) + user_unions_clear(map) + + + Clear user_unions_t. + + + @param map (C++: user_unions_t *) + +Help on function user_unions_end in module ida_hexrays: + +user_unions_end(*args) + user_unions_end(map) -> user_unions_iterator_t + + + Get iterator pointing to the end of user_unions_t. + + + @param map (C++: const user_unions_t *) + +Help on function user_unions_erase in module ida_hexrays: + +user_unions_erase(*args) + user_unions_erase(map, p) + + + Erase current element from user_unions_t. + + + @param map (C++: user_unions_t *) + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_find in module ida_hexrays: + +user_unions_find(*args) + user_unions_find(map, key) -> user_unions_iterator_t + + + Find the specified key in user_unions_t. + + + @param map (C++: const user_unions_t *) + @param key (C++: const ea_t &) + +Help on function user_unions_first in module ida_hexrays: + +user_unions_first(*args) + user_unions_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_free in module ida_hexrays: + +user_unions_free(*args) + user_unions_free(map) + + + Delete user_unions_t instance. + + + @param map (C++: user_unions_t *) + +Help on function user_unions_insert in module ida_hexrays: + +user_unions_insert(*args) + user_unions_insert(map, key, val) -> user_unions_iterator_t + + + Insert new (ea_t, intvec_t) pair into user_unions_t. + + + @param map (C++: user_unions_t *) + @param key (C++: const ea_t &) + @param val (C++: const intvec_t &) + +Help on class user_unions_iterator_t in module ida_hexrays: + +class user_unions_iterator_t(__builtin__.object) + | Proxy of C++ user_unions_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_unions_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | user_unions_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_unions_iterator_t(self) + +Help on function user_unions_new in module ida_hexrays: + +user_unions_new(*args) + user_unions_new() -> user_unions_t + + + Create a new user_unions_t instance. + +Help on function user_unions_next in module ida_hexrays: + +user_unions_next(*args) + user_unions_next(p) -> user_unions_iterator_t + + + Move to the next element. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_prev in module ida_hexrays: + +user_unions_prev(*args) + user_unions_prev(p) -> user_unions_iterator_t + + + Move to the previous element. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_second in module ida_hexrays: + +user_unions_second(*args) + user_unions_second(p) -> intvec_t + + + Get reference to the current map value. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_size in module ida_hexrays: + +user_unions_size(*args) + user_unions_size(map) -> size_t + + + Get size of user_unions_t. + + + @param map (C++: user_unions_t *) + +Help on class user_unions_t in module ida_hexrays: + +class user_unions_t(__builtin__.object) + | Proxy of C++ std::map< ea_t,intvec_t > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_unions_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> intvec_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | user_unions_begin(map) -> user_unions_iterator_t + | + | __clear = + | user_unions_clear(map) + | + | __end = + | user_unions_end(map) -> user_unions_iterator_t + | + | __erase = + | user_unions_erase(map, p) + | + | __find = + | user_unions_find(map, key) -> user_unions_iterator_t + | + | __first = + | user_unions_first(p) -> ea_t const & + | + | __insert = + | user_unions_insert(map, key, val) -> user_unions_iterator_t + | + | __next = + | user_unions_next(p) -> user_unions_iterator_t + | + | __second = + | user_unions_second(p) -> intvec_t + | + | __size = + | user_unions_size(map) -> size_t + | + | __swig_destroy__ = + | delete_user_unions_t(self) + | + | keytype = (, ) + | + | valuetype = + | Proxy of C++ qvector< int > class. + +Help on class uval_ivl_ivlset_t in module ida_hexrays: + +class uval_ivl_ivlset_t(__builtin__.object) + | Proxy of C++ ivlset_tpl< ivl_t,uval_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, v) -> bool + | + | __init__(self, *args) + | __init__(self) -> uval_ivl_ivlset_t + | __init__(self, ivl) -> uval_ivl_ivlset_t + | + | __ne__(self, *args) + | __ne__(self, v) -> bool + | + | __repr__ = _swig_repr(self) + | + | all_values(self, *args) + | all_values(self) -> bool + | + | begin(self, *args) + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | getivl(self, *args) + | getivl(self, idx) -> ivl_t + | + | lastivl(self, *args) + | lastivl(self) -> ivl_t + | + | nivls(self, *args) + | nivls(self) -> size_t + | + | qclear(self, *args) + | qclear(self) + | + | set_all_values(self, *args) + | set_all_values(self) + | + | single_value(self, *args) + | single_value(self, v) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_uval_ivl_ivlset_t(self) + +Help on class uval_ivl_t in module ida_hexrays: + +class uval_ivl_t(__builtin__.object) + | Proxy of C++ ivl_tpl< uval_t > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _off, _size) -> uval_ivl_t + | + | __repr__ = _swig_repr(self) + | + | end(self, *args) + | end(self) -> unsigned-ea-like-numeric-type↗ + | + | last(self, *args) + | last(self) -> unsigned-ea-like-numeric-type↗ + | + | valid(self, *args) + | valid(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type↗ + | + | size + | uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type↗ + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_uval_ivl_t(self) + +Help on class valrng_t in module ida_hexrays: + +class valrng_t(__builtin__.object) + | Proxy of C++ valrng_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, size_=MAX_VLR_SIZE) -> valrng_t + | __init__(self, r) -> valrng_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _deregister(self, *args) + | _deregister(self) + | + | _print(self, *args) + | _print(self) + | + | _register(self, *args) + | _register(self) + | + | all_values(self, *args) + | all_values(self) -> bool + | + | compare(self, *args) + | compare(self, r) -> int + | + | cvt_to_cmp(self, *args) + | cvt_to_cmp(self, strict) -> bool + | + | cvt_to_single_value(self, *args) + | cvt_to_single_value(self) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | get_size(self, *args) + | get_size(self) -> int + | + | has(self, *args) + | has(self, v) -> bool + | + | intersect_with(self, *args) + | intersect_with(self, r) -> bool + | + | inverse(self, *args) + | inverse(self) + | + | is_unknown(self, *args) + | is_unknown(self) -> bool + | + | max_svalue(self, *args) + | max_svalue(self, size_) -> uvlr_t + | max_svalue(self) -> uvlr_t + | + | max_value(self, *args) + | max_value(self, size_) -> uvlr_t + | max_value(self) -> uvlr_t + | + | min_svalue(self, *args) + | min_svalue(self, size_) -> uvlr_t + | min_svalue(self) -> uvlr_t + | + | reduce_size(self, *args) + | reduce_size(self, new_size) -> bool + | + | set_all(self, *args) + | set_all(self) + | + | set_cmp(self, *args) + | set_cmp(self, cmp, _value) + | + | set_eq(self, *args) + | set_eq(self, v) + | + | set_none(self, *args) + | set_none(self) + | + | set_unk(self, *args) + | set_unk(self) + | + | swap(self, *args) + | swap(self, r) + | + | unite_with(self, *args) + | unite_with(self, r) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_valrng_t(self) + +Help on class var_ref_t in module ida_hexrays: + +class var_ref_t(__builtin__.object) + | Proxy of C++ var_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> var_ref_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | idx + | var_ref_t_idx_get(self) -> int + | + | mba + | var_ref_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_var_ref_t(self) + +Help on class vc_printer_t in module ida_hexrays: + +class vc_printer_t(vd_printer_t) + | Proxy of C++ vc_printer_t class. + | + | Method resolution order: + | vc_printer_t + | vd_printer_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, f) -> vc_printer_t + | + | __repr__ = _swig_repr(self) + | + | oneliner(self, *args) + | oneliner(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | func + | vc_printer_t_func_get(self) -> cfunc_t + | + | lastchar + | vc_printer_t_lastchar_get(self) -> char + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vc_printer_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from vd_printer_t: + | + | _print(self, *args) + | _print(self, indent, format) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_printer_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + +Help on class vd_failure_t in module ida_hexrays: + +class vd_failure_t(__builtin__.object) + | Proxy of C++ vd_failure_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> vd_failure_t + | __init__(self, code, ea, buf=None) -> vd_failure_t + | __init__(self, code, ea, buf) -> vd_failure_t + | __init__(self, _hf) -> vd_failure_t + | + | __repr__ = _swig_repr(self) + | + | desc(self, *args) + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hf + | vd_failure_t_hf_get(self) -> hexrays_failure_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vd_failure_t(self) + +Help on class vd_interr_t in module ida_hexrays: + +class vd_interr_t(vd_failure_t) + | Proxy of C++ vd_interr_t class. + | + | Method resolution order: + | vd_interr_t + | vd_failure_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, ea, buf) -> vd_interr_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vd_interr_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from vd_failure_t: + | + | desc(self, *args) + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_failure_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hf + | vd_failure_t_hf_get(self) -> hexrays_failure_t + +Help on class vd_printer_t in module ida_hexrays: + +class vd_printer_t(__builtin__.object) + | Proxy of C++ vd_printer_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> vd_printer_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, indent, format) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | thisown + | The membership flag + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vd_printer_t(self) + +Help on class vdloc_t in module ida_hexrays: + +class vdloc_t(ida_typeinf.argloc_t) + | Proxy of C++ vdloc_t class. + | + | Method resolution order: + | vdloc_t + | ida_typeinf.argloc_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> vdloc_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _set_reg1(self, *args) + | _set_reg1(self, r1) + | + | compare(self, *args) + | compare(self, r) -> int + | + | is_aliasable(self, *args) + | is_aliasable(self, mb, size) -> bool + | + | reg1(self, *args) + | reg1(self) -> int + | + | set_reg1(self, *args) + | set_reg1(self, r1) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vdloc_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_typeinf.argloc_t: + | + | _consume_rrel(self, *args) + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) + | _set_badloc(self) + | + | _set_biggest(self, *args) + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) + | _set_ea(self, _ea) + | + | _set_reg2(self, *args) + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) + | _set_stkoff(self, off) + | + | advance(self, *args) + | advance(self, delta) -> bool + | + | atype(self, *args) + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) + | calc_offset(self) -> sval_t + | + | consume_rrel(self, *args) + | consume_rrel(self, p) + | + | consume_scattered(self, *args) + | consume_scattered(self, p) + | + | get_biggest(self, *args) + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) + | get_custom(self) -> void * + | + | get_ea(self, *args) + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) + | has_reg(self) -> bool + | + | has_stkoff(self, *args) + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) + | is_badloc(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_ea(self, *args) + | is_ea(self) -> bool + | + | is_fragmented(self, *args) + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_rrel(self, *args) + | is_rrel(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) + | justify_stkoff_right(self, size, _slotsize) + | + | reg2(self, *args) + | reg2(self) -> int + | + | regoff(self, *args) + | regoff(self) -> int + | + | scattered(self, *args) + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) + | set_badloc(self) + | + | set_ea(self, *args) + | set_ea(self, _ea) + | + | set_reg2(self, *args) + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) + | set_stkoff(self, off) + | + | stkoff(self, *args) + | stkoff(self) -> sval_t + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_typeinf.argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class vdui_t in module ida_hexrays: + +class vdui_t(__builtin__.object) + | Proxy of C++ vdui_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | calc_cmt_type(self, *args) + | calc_cmt_type(self, lnnum, cmttype) -> cmt_type_t + | + | clear(self, *args) + | clear(self) + | + | collapse_item(self, *args) + | collapse_item(self, hide) -> bool + | + | collapse_lvars(self, *args) + | collapse_lvars(self, hide) -> bool + | + | ctree_to_disasm(self, *args) + | ctree_to_disasm(self) -> bool + | + | del_orphan_cmts(self, *args) + | del_orphan_cmts(self) -> bool + | + | edit_cmt(self, *args) + | edit_cmt(self, loc) -> bool + | + | edit_func_cmt(self, *args) + | edit_func_cmt(self) -> bool + | + | get_current_item(self, *args) + | get_current_item(self, idv) -> bool + | + | get_current_label(self, *args) + | get_current_label(self) -> int + | + | get_number(self, *args) + | get_number(self) -> cnumber_t + | + | in_ctree(self, *args) + | in_ctree(self) -> bool + | + | invert_bits(self, *args) + | invert_bits(self) -> bool + | + | invert_sign(self, *args) + | invert_sign(self) -> bool + | + | jump_enter(self, *args) + | jump_enter(self, idv, omflags) -> bool + | + | locked(self, *args) + | locked(self) -> bool + | + | map_lvar(self, *args) + | map_lvar(self, frm, to) -> bool + | + | refresh_cpos(self, *args) + | refresh_cpos(self, idv) -> bool + | + | refresh_ctext(self, *args) + | refresh_ctext(self, activate=True) + | + | refresh_view(self, *args) + | refresh_view(self, redo_mba) + | + | rename_global(self, *args) + | rename_global(self, ea) -> bool + | + | rename_label(self, *args) + | rename_label(self, label) -> bool + | + | rename_lvar(self, *args) + | rename_lvar(self, v, name, is_user_name) -> bool + | + | rename_strmem(self, *args) + | rename_strmem(self, sptr, mptr) -> bool + | + | set_global_type(self, *args) + | set_global_type(self, ea) -> bool + | + | set_locked(self, *args) + | set_locked(self, v) -> bool + | + | set_lvar_cmt(self, *args) + | set_lvar_cmt(self, v, cmt) -> bool + | + | set_lvar_type(self, *args) + | set_lvar_type(self, v, type) -> bool + | + | set_noptr_lvar(self, *args) + | set_noptr_lvar(self, v) -> bool + | + | set_num_enum(self, *args) + | set_num_enum(self) -> bool + | + | set_num_radix(self, *args) + | set_num_radix(self, base) -> bool + | + | set_num_stroff(self, *args) + | set_num_stroff(self) -> bool + | + | set_strmem_type(self, *args) + | set_strmem_type(self, sptr, mptr) -> bool + | + | set_valid(self, *args) + | set_valid(self, v) + | + | set_visible(self, *args) + | set_visible(self, v) + | + | split_item(self, *args) + | split_item(self, split) -> bool + | + | switch_to(self, *args) + | switch_to(self, f, activate) + | + | ui_edit_lvar_cmt(self, *args) + | ui_edit_lvar_cmt(self, v) -> bool + | + | ui_map_lvar(self, *args) + | ui_map_lvar(self, v) -> bool + | + | ui_rename_lvar(self, *args) + | ui_rename_lvar(self, v) -> bool + | + | ui_set_call_type(self, *args) + | ui_set_call_type(self, e) -> bool + | + | ui_set_lvar_type(self, *args) + | ui_set_lvar_type(self, v) -> bool + | + | ui_unmap_lvar(self, *args) + | ui_unmap_lvar(self, v) -> bool + | + | valid(self, *args) + | valid(self) -> bool + | + | visible(self, *args) + | visible(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cfunc + | vdui_t_cfunc_get(self) -> cfuncptr_t + | + | cpos + | vdui_t_cpos_get(self) -> ctext_position_t + | + | ct + | vdui_t_ct_get(self) -> TWidget * + | + | flags + | vdui_t_flags_get(self) -> int + | + | head + | vdui_t_head_get(self) -> ctree_item_t + | + | item + | vdui_t_item_get(self) -> ctree_item_t + | + | last_code + | vdui_t_last_code_get(self) -> merror_t + | + | mba + | vdui_t_mba_get(self) -> mbl_array_t + | + | tail + | vdui_t_tail_get(self) -> ctree_item_t + | + | thisown + | The membership flag + | + | toplevel + | vdui_t_toplevel_get(self) -> TWidget * + | + | view_idx + | vdui_t_view_idx_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vdui_t(self) + +Help on class vivl_t in module ida_hexrays: + +class vivl_t(voff_t) + | Proxy of C++ vivl_t class. + | + | Method resolution order: + | vivl_t + | voff_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | __eq__(self, mop) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _type=mop_z, _off=-1, _size=0) -> vivl_t + | __init__(self, ch) -> vivl_t + | __init__(self, op) -> vivl_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, voff2) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | extend_to_cover(self, *args) + | extend_to_cover(self, r) -> bool + | + | includes(self, *args) + | includes(self, r) -> bool + | + | intersect(self, *args) + | intersect(self, r) -> uval_t + | + | overlap(self, *args) + | overlap(self, r) -> bool + | + | set(self, *args) + | set(self, _type, _off, _size=0) + | set(self, voff, _size) + | + | set_reg(self, *args) + | set_reg(self, mreg, sz=0) + | + | set_stkoff(self, *args) + | set_stkoff(self, stkoff, sz=0) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | size + | vivl_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vivl_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from voff_t: + | + | add(self, *args) + | add(self, width) -> voff_t + | + | defined(self, *args) + | defined(self) -> bool + | + | diff(self, *args) + | diff(self, r) -> sval_t + | + | get_reg(self, *args) + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) + | get_stkoff(self) -> sval_t + | + | inc(self, *args) + | inc(self, delta) + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | undef(self, *args) + | undef(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from voff_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | voff_t_off_get(self) -> sval_t + | + | type + | voff_t_type_get(self) -> mopt_t + +Help on class voff_t in module ida_hexrays: + +class voff_t(__builtin__.object) + | Proxy of C++ voff_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> voff_t + | __init__(self, _type, _off) -> voff_t + | __init__(self, op) -> voff_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | add(self, *args) + | add(self, width) -> voff_t + | + | compare(self, *args) + | compare(self, r) -> int + | + | defined(self, *args) + | defined(self) -> bool + | + | diff(self, *args) + | diff(self, r) -> sval_t + | + | get_reg(self, *args) + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) + | get_stkoff(self) -> sval_t + | + | inc(self, *args) + | inc(self, delta) + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | set(self, *args) + | set(self, _type, _off) + | + | set_reg(self, *args) + | set_reg(self, mreg) + | + | set_stkoff(self, *args) + | set_stkoff(self, stkoff) + | + | undef(self, *args) + | undef(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | voff_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | type + | voff_t_type_get(self) -> mopt_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_voff_t(self) + +=== ida_hexrays EPYDOC INJECTIONS === +ida_hexrays.ACFL_BLKOPT +""" +perform interblock transformations +""" + +ida_hexrays.ACFL_GLBDEL +""" +perform dead code eliminition +""" + +ida_hexrays.ACFL_GLBPROP +""" +perform global propagation +""" + +ida_hexrays.ACFL_GUESS +""" +may guess calling conventions +""" + +ida_hexrays.ACFL_LOCOPT +""" +perform local propagation (requires ACFL_BLKOPT) +""" + +ida_hexrays.ANCHOR_BLKCMT +""" +block comment (for ctree items) +""" + +ida_hexrays.ANCHOR_CITEM +""" +c-tree item +""" + +ida_hexrays.ANCHOR_ITP +""" +item type preciser +""" + +ida_hexrays.ANCHOR_LVAR +""" +declaration of local variable +""" + +ida_hexrays.CFL_FINAL +""" +call type is final, should not be changed +""" + +ida_hexrays.CFL_HELPER +""" +created from a decompiler helper function +""" + +ida_hexrays.CFS_BOUNDS +""" +'eamap' and 'boundaries' are ready +""" + +ida_hexrays.CFS_LVARS_HIDDEN +""" +local variable definitions are collapsed +""" + +ida_hexrays.CFS_TEXT +""" +'sv' is ready (and hdrlines) +""" + +ida_hexrays.CHF_FAKE +""" +fake chain created by widen_chains() +""" + +ida_hexrays.CHF_INITED +""" +is chain initialized? (valid only after lvar allocation) +""" + +ida_hexrays.CHF_OVER +""" +overlapped chain +""" + +ida_hexrays.CHF_PASSTHRU +""" +pass-thru chain, must use the input variable to the block +""" + +ida_hexrays.CHF_REPLACED +""" +chain operands have been replaced? +""" + +ida_hexrays.CHF_TERM +""" +terminating chain; the variable does not survive across the block +""" + +ida_hexrays.CIT_COLLAPSED +""" +display element in collapsed form +""" + +ida_hexrays.CPBLK_FAST +""" +do not update minbstkref and minbargref +""" + +ida_hexrays.CPBLK_MINREF +""" +update minbstkref and minbargref +""" + +ida_hexrays.CPBLK_OPTJMP +""" +if it becomes useless + +del the jump insn at the end of the block +""" + +ida_hexrays.CV_FAST +""" +do not maintain parent information +""" + +ida_hexrays.CV_INSNS +""" +visit only statements, prune all expressions do not use before the +final ctree maturity because expressions may contain statements at +intermediate stages (see cot_insn). Otherwise you risk missing +statements embedded into expressions. +""" + +ida_hexrays.CV_PARENTS +""" +maintain parent information +""" + +ida_hexrays.CV_POST +""" +call the leave...() functions +""" + +ida_hexrays.CV_PRUNE +""" +this bit is set by visit...() to prune the walk +""" + +ida_hexrays.CV_RESTART +""" +restart enumeration at the top expr (apply_to_exprs) +""" + +ida_hexrays.DECOMP_ALL_BLKS +""" +generate microcode for unreachable blocks +""" + +ida_hexrays.DECOMP_NO_CACHE +""" +do not use decompilation cache +""" + +ida_hexrays.DECOMP_NO_FRAME +""" +do not use function frame info (only snippet mode) +""" + +ida_hexrays.DECOMP_NO_WAIT +""" +do not display waitbox +""" + +ida_hexrays.DECOMP_WARNINGS +""" +display warnings in the output window +""" + +ida_hexrays.EQ_CMPDEST +""" +compare instruction destinations +""" + +ida_hexrays.EQ_IGNCODE +""" +ignore instruction opcodes +""" + +ida_hexrays.EQ_IGNSIZE +""" +ignore operand sizes +""" + +ida_hexrays.EQ_OPTINSN +""" +optimize mop_d operands +""" + +ida_hexrays.EXFL_ALL +""" +all currently defined bits +""" + +ida_hexrays.EXFL_ALONE +""" +standalone helper +""" + +ida_hexrays.EXFL_CPADONE +""" +pointer arithmetic correction done +""" + +ida_hexrays.EXFL_CSTR +""" +string literal +""" + +ida_hexrays.EXFL_FPOP +""" +floating point operation +""" + +ida_hexrays.EXFL_JUMPOUT +""" +jump out-of-function +""" + +ida_hexrays.EXFL_LVALUE +""" +expression is lvalue even if it doesn't look like it +""" + +ida_hexrays.EXFL_PARTIAL +""" +type of the expression is considered partial +""" + +ida_hexrays.EXFL_UNDEF +""" +expression uses undefined value +""" + +ida_hexrays.EXFL_VFTABLE +""" +is ptr to vftable (used for cot_memptr, cot_memref) +""" + +ida_hexrays.FCI_DEAD +""" +some return registers were determined dead +""" + +ida_hexrays.FCI_FINAL +""" +call type is final, should not be changed +""" + +ida_hexrays.FCI_HASCALL +""" +A function is an synthetic helper combined from several instructions +and at least one of them was a call to a real functions +""" + +ida_hexrays.FCI_HASFMT +""" +printf- or scanf-style format string + +A variadic function with recognized +""" + +ida_hexrays.FCI_NORET +""" +call does not return +""" + +ida_hexrays.FCI_NOSIDE +""" +call does not have side effects +""" + +ida_hexrays.FCI_PROP +""" +call has been propagated +""" + +ida_hexrays.FCI_PURE +""" +pure function +""" + +ida_hexrays.FCI_SPLOK +""" +spoiled/visible_memory lists have been optimized. for some functions +we can reduce them as soon as information about the arguments becomes +available. in order not to try optimize them again we use this bit. +""" + +ida_hexrays.FD_BACKWARD +""" +search direction +""" + +ida_hexrays.FD_DEF +""" +look for definition +""" + +ida_hexrays.FD_DIRTY +""" +by function calls and indirect memory access + +ignore possible implicit definitions +""" + +ida_hexrays.FD_FORWARD +""" +search direction +""" + +ida_hexrays.FD_USE +""" +look for use +""" + +ida_hexrays.GCA_ALLOC +""" +enumerate only allocated chains +""" + +ida_hexrays.GCA_EMPTY +""" +include empty chains +""" + +ida_hexrays.GCA_NALLOC +""" +enumerate only non-allocated chains +""" + +ida_hexrays.GCA_OFIRST +""" +consider only chains of the first block +""" + +ida_hexrays.GCA_OLAST +""" +consider only chains of the last block +""" + +ida_hexrays.GCA_SPEC +""" +include chains for special registers +""" + +ida_hexrays.GCO_DEF +""" +is destination operand? +""" + +ida_hexrays.GCO_REG +""" +is register? otherwise a stack variable +""" + +ida_hexrays.GCO_STK +""" +a stack variable +""" + +ida_hexrays.GCO_USE +""" +is source operand? +""" + +ida_hexrays.GLN_ALL +""" +get both +""" + +ida_hexrays.GLN_CURRENT +""" +get label of the current item +""" + +ida_hexrays.GLN_GOTO_TARGET +""" +get goto target +""" + +ida_hexrays.IPROP_ASSERT +""" +assertion: usually mov #val, op. assertions are used to help the +optimizer. assertions are ignored when generating ctree +""" + +ida_hexrays.IPROP_CLNPOP +""" +(e.g. "pop ecx" is often used for that) + +the purpose of the instruction is to clean stack +""" + +ida_hexrays.IPROP_COMBINED +""" +insn has been modified because of a partial reference +""" + +ida_hexrays.IPROP_DONT_COMB +""" +may not combine this instruction with others +""" + +ida_hexrays.IPROP_DONT_PROP +""" +may not propagate +""" + +ida_hexrays.IPROP_EXTSTX +""" +this is m_ext propagated into m_stx +""" + +ida_hexrays.IPROP_FARCALL +""" +call of a far function using push cs/call sequence +""" + +ida_hexrays.IPROP_FPINSN +""" +floating point insn +""" + +ida_hexrays.IPROP_IGNLOWSRC +""" +low part of the instruction source operand has been created +artificially (this bit is used only for 'and x, 80...') +""" + +ida_hexrays.IPROP_INV_JX +""" +inverted conditional jump +""" + +ida_hexrays.IPROP_MBARRIER +""" +(instructions accessing memory may not be reordered past it) + +this instruction acts as a memory barrier +""" + +ida_hexrays.IPROP_MULTI_MOV +""" +(example: STM on ARM may transfer multiple registers) + +the minsn was generated as part of insn that moves multiple +registersbits that can be set by plugins: +""" + +ida_hexrays.IPROP_OPTIONAL +""" +optional instruction +""" + +ida_hexrays.IPROP_PERSIST +""" +persistent insn; they are not destroyed +""" + +ida_hexrays.IPROP_SPLIT +""" +the instruction has been split: +""" + +ida_hexrays.IPROP_SPLIT1 +""" +into 1 byte +""" + +ida_hexrays.IPROP_SPLIT2 +""" +into 2 bytes +""" + +ida_hexrays.IPROP_SPLIT4 +""" +into 4 bytes +""" + +ida_hexrays.IPROP_SPLIT8 +""" +into 8 bytes +""" + +ida_hexrays.IPROP_TAILCALL +""" +tail call +""" + +ida_hexrays.IPROP_WAS_NORET +""" +was noret icall +""" + +ida_hexrays.IPROP_WILDMATCH +""" +match multiple insns +""" + +ida_hexrays.LOCOPT_ALL +""" +is not set, only dirty blocks will be optimized + +redo optimization for all blocks. if this bit +""" + +ida_hexrays.LOCOPT_REFINE +""" +refine return type, ok to fail +""" + +ida_hexrays.LOCOPT_REFINE2 +""" +refine return type, try harder +""" + +ida_hexrays.LVINF_FORCE +""" +force allocation of a new variable. forces the decompiler to create a +new variable at ll.defea +""" + +ida_hexrays.LVINF_KEEP +""" +preserve saved user settings regardless of vars for example, if a var +loses all its user-defined attributes or even gets destroyed, keep its +'lvar_saved_info_t' . this is used for ephemeral variables that get +destroyed by macro recognition. +""" + +ida_hexrays.LVINF_NOMAP +""" +forbid automatic mapping of the variable +""" + +ida_hexrays.LVINF_NOPTR +""" +variable type should not be a pointer +""" + +ida_hexrays.MBA_ASRPROP +""" +assertion have been propagated +""" + +ida_hexrays.MBA_ASRTOK +""" +assertions have been generated +""" + +ida_hexrays.MBA_CALLS +""" +callinfo has been built +""" + +ida_hexrays.MBA_CHVARS +""" +can verify chain varnums +""" + +ida_hexrays.MBA_CMBBLK +""" +request to combine blocks +""" + +ida_hexrays.MBA_CMNSTK +""" +stkvars+stkargs should be considered as one area +""" + +ida_hexrays.MBA_COLGDL +""" +display graph after each reduction +""" + +ida_hexrays.MBA_DELPAIRS +""" +pairs have been deleted once +""" + +ida_hexrays.MBA_GLBOPT +""" +microcode has been optimized globally +""" + +ida_hexrays.MBA_INSGDL +""" +display instruction in graphs +""" + +ida_hexrays.MBA_LOADED +""" +loaded gdl, no instructions (debugging) +""" + +ida_hexrays.MBA_LVARS0 +""" +lvar pre-allocation has been performed +""" + +ida_hexrays.MBA_LVARS1 +""" +lvar real allocation has been performed +""" + +ida_hexrays.MBA_NICE +""" +apply transformations to c code +""" + +ida_hexrays.MBA_NOFUNC +""" +function is not present, addresses might be wrong +""" + +ida_hexrays.MBA_NUMADDR +""" +display definition addresses for numbers +""" + +ida_hexrays.MBA_PASSREGS +""" +has 'mcallinfo_t::pass_regs' +""" + +ida_hexrays.MBA_PATTERN +""" +microcode pattern, callinfo is present +""" + +ida_hexrays.MBA_PRCDEFS +""" +use precise defeas for chain-allocated lvars +""" + +ida_hexrays.MBA_PREOPT +""" +preoptimization stage complete +""" + +ida_hexrays.MBA_REFINE +""" +may refine return value size +""" + +ida_hexrays.MBA_RETFP +""" +function returns floating point value +""" + +ida_hexrays.MBA_RETREF +""" +return type has been refined +""" + +ida_hexrays.MBA_SAVRST +""" +save-restore analysis has been performed +""" + +ida_hexrays.MBA_SHORT +""" +use short display +""" + +ida_hexrays.MBA_SPLINFO +""" +(final_type ? idb_spoiled : spoiled_regs) is valid +""" + +ida_hexrays.MBA_THUNK +""" +thunk function +""" + +ida_hexrays.MBA_VALNUM +""" +display value numbers +""" + +ida_hexrays.MBA_WINGR32 +""" +use wingraph32 +""" + +ida_hexrays.MBL_BACKPROP +""" +performed backprop_cc +""" + +ida_hexrays.MBL_CALL +""" +call information has been built +""" + +ida_hexrays.MBL_COMB +""" +needs "combine" pass +""" + +ida_hexrays.MBL_DEAD +""" +needs "eliminate deads" pass +""" + +ida_hexrays.MBL_DMT64 +""" +needs "demote 64bits" +""" + +ida_hexrays.MBL_DSLOT +""" +block for delay slot +""" + +ida_hexrays.MBL_FAKE +""" +fake block (after a tail call) +""" + +ida_hexrays.MBL_GOTO +""" +this block is a goto target +""" + +ida_hexrays.MBL_INCONST +""" +inconsistent lists: we are building them +""" + +ida_hexrays.MBL_LIST +""" +use/def lists are ready (not dirty) +""" + +ida_hexrays.MBL_NONFAKE +""" +regular block +""" + +ida_hexrays.MBL_NORET +""" +dead end block: doesn't return execution control +""" + +ida_hexrays.MBL_PRIV +""" +the specified are accepted (used in patterns) + +private block - no instructions except +""" + +ida_hexrays.MBL_PROP +""" +needs 'propagation' pass +""" + +ida_hexrays.MBL_PUSH +""" +needs "convert push/pop instructions" +""" + +ida_hexrays.MBL_TCAL +""" +aritifical call block for tail calls +""" + +ida_hexrays.MBL_VALRANGES +""" +should optimize using value ranges +""" + +ida_hexrays.MLI_CLR_FLAGS +""" +clear LVINF_... bits +""" + +ida_hexrays.MLI_CMT +""" +apply lvar comment +""" + +ida_hexrays.MLI_NAME +""" +apply lvar name +""" + +ida_hexrays.MLI_SET_FLAGS +""" +set LVINF_... bits +""" + +ida_hexrays.MLI_TYPE +""" +apply lvar type +""" + +ida_hexrays.NALT_VD +""" +this index is not used by ida +""" + +ida_hexrays.NF_BINVDONE +""" +temporary internal bit: inverting bits is done +""" + +ida_hexrays.NF_BITNOT +""" +The user asked to invert bits of the constant. +""" + +ida_hexrays.NF_FIXED +""" +number format has been defined by the user +""" + +ida_hexrays.NF_NEGATE +""" +The user asked to negate the constant. +""" + +ida_hexrays.NF_NEGDONE +""" +temporary internal bit: negation has been performed +""" + +ida_hexrays.NF_STROFF +""" +internal bit: used as stroff, valid iff 'is_stroff()' +""" + +ida_hexrays.OPROP_CCFLAGS +""" +condition codes register value +""" + +ida_hexrays.OPROP_FLOAT +""" +possibly floating value +""" + +ida_hexrays.OPROP_IMPDONE +""" +imported operand (a pointer) has been dereferenced +""" + +ida_hexrays.OPROP_UDEFVAL +""" +uses undefined value +""" + +ida_hexrays.OPROP_UDT +""" +a struct or union +""" + +ida_hexrays.OPTI_ADDREXPRS +""" +optimize all address expressions (&x+N; &x-&y) +""" + +ida_hexrays.OPTI_COMBINSNS +""" +may combine insns (only for optimize_insn) +""" + +ida_hexrays.OPTI_MINSTKREF +""" +may update minstkref +""" + +ida_hexrays.OPTI_NO_LDXOPT +""" +do not optimize low/high(ldx) +""" + +ida_hexrays.SHINS_LDXEA +""" +display address of ldx expressions (not used) +""" + +ida_hexrays.SHINS_NUMADDR +""" +display definition addresses for numbers +""" + +ida_hexrays.SHINS_SHORT +""" +do not display use-def chains and other attrs +""" + +ida_hexrays.SHINS_VALNUM +""" +display value numbers +""" + +ida_hexrays.ULV_PRECISE_DEFEA +""" +Use precise defea's for lvar locations. +""" + +ida_hexrays.VDRUN_APPEND +""" +Create a new file or append to existing file. +""" + +ida_hexrays.VDRUN_CMDLINE +""" +Called from ida's command line. +""" + +ida_hexrays.VDRUN_LUMINA +""" +Use lumina server. +""" + +ida_hexrays.VDRUN_MAYSTOP +""" +The user can cancel decompilation. +""" + +ida_hexrays.VDRUN_NEWFILE +""" +Create a new file or overwrite existing file. +""" + +ida_hexrays.VDRUN_ONLYNEW +""" +Fail if output file already exists. +""" + +ida_hexrays.VDRUN_SENDIDB +""" +Send problematic databases to hex-rays.com. +""" + +ida_hexrays.VDRUN_SILENT +""" +Silent decompilation. +""" + +ida_hexrays.VDRUN_STATS +""" +Print statistics into vd_stats.txt. +""" + +ida_hexrays.VDUI_LOCKED +""" +is locked? +""" + +ida_hexrays.VDUI_VALID +""" +is valid? +""" + +ida_hexrays.VDUI_VISIBLE +""" +is visible? +""" + +ida_hexrays.VR_AT_END +""" +get value ranges after the instruction or at the block end, just after +the last instruction (if M is NULL) +""" + +ida_hexrays.VR_AT_START +""" +at the block start (if M is NULL) + +get value ranges before the instruction or +""" + +ida_hexrays.VR_EXACT +""" +valrng size will be >= vivl.size + +find exact match. if not set, the returned +""" +=== ida_hexrays EPYDOC INJECTIONS END === +Help on function __make_idainfo_accessors in module ida_ida: + +__make_idainfo_accessors(attr, getter_name=None, setter_name=None) + +Help on function __make_idainfo_bound in module ida_ida: + +__make_idainfo_bound(func, attr) + # + +Help on function __make_idainfo_getter in module ida_ida: + +__make_idainfo_getter(name) + +Help on function calc_default_idaplace_flags in module ida_ida: + +calc_default_idaplace_flags(*args) + calc_default_idaplace_flags() -> int + + + Get default disassembly line options. + +Help on class compiler_info_t in module ida_ida: + +class compiler_info_t(__builtin__.object) + | Proxy of C++ compiler_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> compiler_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cm + | compiler_info_t_cm_get(self) -> cm_t + | + | defalign + | compiler_info_t_defalign_get(self) -> uchar + | + | id + | compiler_info_t_id_get(self) -> comp_t + | + | size_b + | compiler_info_t_size_b_get(self) -> uchar + | + | size_e + | compiler_info_t_size_e_get(self) -> uchar + | + | size_i + | compiler_info_t_size_i_get(self) -> uchar + | + | size_l + | compiler_info_t_size_l_get(self) -> uchar + | + | size_ldbl + | compiler_info_t_size_ldbl_get(self) -> uchar + | + | size_ll + | compiler_info_t_size_ll_get(self) -> uchar + | + | size_s + | compiler_info_t_size_s_get(self) -> uchar + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_compiler_info_t(self) + +Help on class idainfo in module ida_ida: + +class idainfo(__builtin__.object) + | Proxy of C++ idainfo class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | big_arg_align = __func(self, *args) + | + | gen_lzero = __func(self, *args) + | + | gen_null = __func(self, *args) + | + | gen_tryblks = __func(self, *args) + | + | get_abiname(self, *args) + | get_abiname(self) -> qstring + | + | get_demname_form = __func(self, *args) + | + | get_maxEA(self, *args) + | get_maxEA(self) -> ea_t + | + | get_minEA(self, *args) + | get_minEA(self) -> ea_t + | + | get_pack_mode = __func(self, *args) + | + | get_procName(self, *args) + | get_procName(self) -> qstring + | + | is_32bit = __func(self, *args) + | + | is_64bit = __func(self, *args) + | + | is_auto_enabled = __func(self, *args) + | + | is_be = __func(self, *args) + | + | is_dll = __func(self, *args) + | + | is_flat_off32 = __func(self, *args) + | + | is_graph_view = __func(self, *args) + | + | is_hard_float = __func(self, *args) + | + | is_kernel_mode = __func(self, *args) + | + | is_mem_aligned4 = __func(self, *args) + | + | is_snapshot = __func(self, *args) + | + | is_wide_high_byte_first = __func(self, *args) + | + | like_binary = __func(self, *args) + | + | line_pref_with_seg = __func(self, *args) + | + | loading_idc = __func(self, *args) + | + | map_stkargs = __func(self, *args) + | + | pack_stkargs = __func(self, *args) + | + | readonly_idb = __func(self, *args) + | + | set_64bit = __func(self, *args) + | + | set_auto_enabled = __func(self, *args) + | + | set_be = __func(self, *args) + | + | set_gen_lzero = __func(self, *args) + | + | set_gen_null = __func(self, *args) + | + | set_gen_tryblks = __func(self, *args) + | + | set_graph_view = __func(self, *args) + | + | set_line_pref_with_seg = __func(self, *args) + | + | set_maxEA(self, *args) + | set_maxEA(self, ea) + | + | set_minEA(self, *args) + | set_minEA(self, ea) + | + | set_pack_mode = __func(self, *args) + | + | set_show_auto = __func(self, *args) + | + | set_show_line_pref = __func(self, *args) + | + | set_show_void = __func(self, *args) + | + | set_wide_high_byte_first = __func(self, *args) + | + | show_auto = __func(self, *args) + | + | show_line_pref = __func(self, *args) + | + | show_void = __func(self, *args) + | + | stack_ldbl = __func(self, *args) + | + | stack_varargs = __func(self, *args) + | + | use_allasm = __func(self, *args) + | + | use_gcc_layout = __func(self, *args) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | abibits + | idainfo_abibits_get(self) -> uint32 + | + | abiname + | get_abiname(self) -> qstring + | + | af + | idainfo_af_get(self) -> uint32 + | + | af2 + | idainfo_af2_get(self) -> uint32 + | + | appcall_options + | idainfo_appcall_options_get(self) -> uint32 + | + | apptype + | idainfo_apptype_get(self) -> ushort + | + | asmtype + | idainfo_asmtype_get(self) -> uchar + | + | baseaddr + | idainfo_baseaddr_get(self) -> uval_t + | + | bin_prefix_size + | idainfo_bin_prefix_size_get(self) -> short + | + | cc + | idainfo_cc_get(self) -> compiler_info_t + | + | comment + | idainfo_comment_get(self) -> uchar + | + | database_change_count + | idainfo_database_change_count_get(self) -> uint32 + | + | datatypes + | idainfo_datatypes_get(self) -> uval_t + | + | demnames + | idainfo_demnames_get(self) -> uchar + | + | filetype + | idainfo_filetype_get(self) -> ushort + | + | highoff + | idainfo_highoff_get(self) -> ea_t + | + | indent + | idainfo_indent_get(self) -> uchar + | + | lenxref + | idainfo_lenxref_get(self) -> ushort + | + | lflags + | idainfo_lflags_get(self) -> uint32 + | + | listnames + | idainfo_listnames_get(self) -> uchar + | + | long_demnames + | idainfo_long_demnames_get(self) -> uint32 + | + | lowoff + | idainfo_lowoff_get(self) -> ea_t + | + | main + | idainfo_main_get(self) -> ea_t + | + | margin + | idainfo_margin_get(self) -> ushort + | + | maxEA + | get_maxEA(self) -> ea_t + | + | max_autoname_len + | idainfo_max_autoname_len_get(self) -> ushort + | + | max_ea + | idainfo_max_ea_get(self) -> ea_t + | + | maxref + | idainfo_maxref_get(self) -> uval_t + | + | minEA + | get_minEA(self) -> ea_t + | + | min_ea + | idainfo_min_ea_get(self) -> ea_t + | + | nametype + | idainfo_nametype_get(self) -> char + | + | omax_ea + | idainfo_omax_ea_get(self) -> ea_t + | + | omin_ea + | idainfo_omin_ea_get(self) -> ea_t + | + | ostype + | idainfo_ostype_get(self) -> ushort + | + | outflags + | idainfo_outflags_get(self) -> uint32 + | + | procName + | get_procName(self) -> qstring + | + | procname + | idainfo_procname_get(self) -> char [16] + | + | refcmtnum + | idainfo_refcmtnum_get(self) -> uchar + | + | s_cmtflg + | idainfo_s_cmtflg_get(self) -> uchar + | + | s_genflags + | idainfo_s_genflags_get(self) -> ushort + | + | s_limiter + | idainfo_s_limiter_get(self) -> uchar + | + | s_prefflag + | idainfo_s_prefflag_get(self) -> uchar + | + | s_xrefflag + | idainfo_s_xrefflag_get(self) -> uchar + | + | short_demnames + | idainfo_short_demnames_get(self) -> uint32 + | + | specsegs + | idainfo_specsegs_get(self) -> uchar + | + | start_cs + | idainfo_start_cs_get(self) -> sel_t + | + | start_ea + | idainfo_start_ea_get(self) -> ea_t + | + | start_ip + | idainfo_start_ip_get(self) -> ea_t + | + | start_sp + | idainfo_start_sp_get(self) -> ea_t + | + | start_ss + | idainfo_start_ss_get(self) -> sel_t + | + | strlit_break + | idainfo_strlit_break_get(self) -> uchar + | + | strlit_flags + | idainfo_strlit_flags_get(self) -> uchar + | + | strlit_pref + | idainfo_strlit_pref_get(self) -> char [16] + | + | strlit_sernum + | idainfo_strlit_sernum_get(self) -> uval_t + | + | strlit_zeroes + | idainfo_strlit_zeroes_get(self) -> char + | + | strtype + | idainfo_strtype_get(self) -> int32 + | + | tag + | idainfo_tag_get(self) -> char [3] + | + | thisown + | The membership flag + | + | type_xrefnum + | idainfo_type_xrefnum_get(self) -> uchar + | + | version + | idainfo_version_get(self) -> ushort + | + | xrefnum + | idainfo_xrefnum_get(self) -> uchar + +Help on function inf_big_arg_align in module ida_ida: + +inf_big_arg_align(*args) + inf_big_arg_align() -> bool + +Help on function inf_gen_lzero in module ida_ida: + +inf_gen_lzero(*args) + inf_gen_lzero() -> bool + +Help on function inf_gen_null in module ida_ida: + +inf_gen_null(*args) + inf_gen_null() -> bool + +Help on function inf_gen_tryblks in module ida_ida: + +inf_gen_tryblks(*args) + inf_gen_tryblks() -> bool + +Help on function inf_get_demname_form in module ida_ida: + +inf_get_demname_form(*args) + inf_get_demname_form() -> uchar + + + Get 'DEMNAM_MASK' bits of #demnames. + +Help on function inf_get_pack_mode in module ida_ida: + +inf_get_pack_mode(*args) + inf_get_pack_mode() -> int + +Help on function inf_is_32bit in module ida_ida: + +inf_is_32bit(*args) + inf_is_32bit() -> bool + +Help on function inf_is_64bit in module ida_ida: + +inf_is_64bit(*args) + inf_is_64bit() -> bool + +Help on function inf_is_auto_enabled in module ida_ida: + +inf_is_auto_enabled(*args) + inf_is_auto_enabled() -> bool + +Help on function inf_is_be in module ida_ida: + +inf_is_be(*args) + inf_is_be() -> bool + +Help on function inf_is_dll in module ida_ida: + +inf_is_dll(*args) + inf_is_dll() -> bool + +Help on function inf_is_flat_off32 in module ida_ida: + +inf_is_flat_off32(*args) + inf_is_flat_off32() -> bool + +Help on function inf_is_graph_view in module ida_ida: + +inf_is_graph_view(*args) + inf_is_graph_view() -> bool + +Help on function inf_is_hard_float in module ida_ida: + +inf_is_hard_float(*args) + inf_is_hard_float() -> bool + +Help on function inf_is_kernel_mode in module ida_ida: + +inf_is_kernel_mode(*args) + inf_is_kernel_mode() -> bool + +Help on function inf_is_mem_aligned4 in module ida_ida: + +inf_is_mem_aligned4(*args) + inf_is_mem_aligned4() -> bool + +Help on function inf_is_snapshot in module ida_ida: + +inf_is_snapshot(*args) + inf_is_snapshot() -> bool + +Help on function inf_is_wide_high_byte_first in module ida_ida: + +inf_is_wide_high_byte_first(*args) + inf_is_wide_high_byte_first() -> bool + +Help on function inf_like_binary in module ida_ida: + +inf_like_binary(*args) + inf_like_binary() -> bool + +Help on function inf_line_pref_with_seg in module ida_ida: + +inf_line_pref_with_seg(*args) + inf_line_pref_with_seg() -> bool + +Help on function inf_loading_idc in module ida_ida: + +inf_loading_idc(*args) + inf_loading_idc() -> bool + +Help on function inf_map_stkargs in module ida_ida: + +inf_map_stkargs(*args) + inf_map_stkargs() -> bool + +Help on function inf_pack_stkargs in module ida_ida: + +inf_pack_stkargs(*args) + inf_pack_stkargs() -> bool + +Help on function inf_readonly_idb in module ida_ida: + +inf_readonly_idb(*args) + inf_readonly_idb() -> bool + +Help on function inf_set_64bit in module ida_ida: + +inf_set_64bit(*args) + inf_set_64bit(_v=True) -> bool + +Help on function inf_set_auto_enabled in module ida_ida: + +inf_set_auto_enabled(*args) + inf_set_auto_enabled(_v=True) -> bool + +Help on function inf_set_be in module ida_ida: + +inf_set_be(*args) + inf_set_be(_v=True) -> bool + +Help on function inf_set_gen_lzero in module ida_ida: + +inf_set_gen_lzero(*args) + inf_set_gen_lzero(_v=True) -> bool + +Help on function inf_set_gen_null in module ida_ida: + +inf_set_gen_null(*args) + inf_set_gen_null(_v=True) -> bool + +Help on function inf_set_gen_tryblks in module ida_ida: + +inf_set_gen_tryblks(*args) + inf_set_gen_tryblks(_v=True) -> bool + +Help on function inf_set_graph_view in module ida_ida: + +inf_set_graph_view(*args) + inf_set_graph_view(_v=True) -> bool + +Help on function inf_set_line_pref_with_seg in module ida_ida: + +inf_set_line_pref_with_seg(*args) + inf_set_line_pref_with_seg(_v=True) -> bool + +Help on function inf_set_pack_mode in module ida_ida: + +inf_set_pack_mode(*args) + inf_set_pack_mode(pack_mode) -> int + +Help on function inf_set_show_auto in module ida_ida: + +inf_set_show_auto(*args) + inf_set_show_auto(_v=True) -> bool + +Help on function inf_set_show_line_pref in module ida_ida: + +inf_set_show_line_pref(*args) + inf_set_show_line_pref(_v=True) -> bool + +Help on function inf_set_show_void in module ida_ida: + +inf_set_show_void(*args) + inf_set_show_void(_v=True) -> bool + +Help on function in module ida_ida: + + lambda *args + +Help on function inf_set_wide_high_byte_first in module ida_ida: + +inf_set_wide_high_byte_first(*args) + inf_set_wide_high_byte_first(_v=True) -> bool + +Help on function inf_show_auto in module ida_ida: + +inf_show_auto(*args) + inf_show_auto() -> bool + +Help on function inf_show_line_pref in module ida_ida: + +inf_show_line_pref(*args) + inf_show_line_pref() -> bool + +Help on function inf_show_void in module ida_ida: + +inf_show_void(*args) + inf_show_void() -> bool + +Help on function inf_stack_ldbl in module ida_ida: + +inf_stack_ldbl(*args) + inf_stack_ldbl() -> bool + +Help on function inf_stack_varargs in module ida_ida: + +inf_stack_varargs(*args) + inf_stack_varargs() -> bool + +Help on function inf_use_allasm in module ida_ida: + +inf_use_allasm(*args) + inf_use_allasm() -> bool + +Help on function inf_use_gcc_layout in module ida_ida: + +inf_use_gcc_layout(*args) + inf_use_gcc_layout() -> bool + +Help on function inf_abi_set_by_user in module ida_ida: + +inf_abi_set_by_user(*args) + inf_abi_set_by_user() -> bool + +Help on function inf_allow_non_matched_ops in module ida_ida: + +inf_allow_non_matched_ops(*args) + inf_allow_non_matched_ops() -> bool + +Help on function inf_allow_sigmulti in module ida_ida: + +inf_allow_sigmulti(*args) + inf_allow_sigmulti() -> bool + +Help on function inf_append_sigcmt in module ida_ida: + +inf_append_sigcmt(*args) + inf_append_sigcmt() -> bool + +Help on function inf_check_manual_ops in module ida_ida: + +inf_check_manual_ops(*args) + inf_check_manual_ops() -> bool + +Help on function inf_check_unicode_strlits in module ida_ida: + +inf_check_unicode_strlits(*args) + inf_check_unicode_strlits() -> bool + +Help on function inf_coagulate_code in module ida_ida: + +inf_coagulate_code(*args) + inf_coagulate_code() -> bool + +Help on function inf_coagulate_data in module ida_ida: + +inf_coagulate_data(*args) + inf_coagulate_data() -> bool + +Help on function inf_compress_idb in module ida_ida: + +inf_compress_idb(*args) + inf_compress_idb() -> bool + +Help on function inf_create_all_xrefs in module ida_ida: + +inf_create_all_xrefs(*args) + inf_create_all_xrefs() -> bool + +Help on function inf_create_func_from_call in module ida_ida: + +inf_create_func_from_call(*args) + inf_create_func_from_call() -> bool + +Help on function inf_create_func_from_ptr in module ida_ida: + +inf_create_func_from_ptr(*args) + inf_create_func_from_ptr() -> bool + +Help on function inf_create_func_tails in module ida_ida: + +inf_create_func_tails(*args) + inf_create_func_tails() -> bool + +Help on function inf_create_jump_tables in module ida_ida: + +inf_create_jump_tables(*args) + inf_create_jump_tables() -> bool + +Help on function inf_create_off_on_dref in module ida_ida: + +inf_create_off_on_dref(*args) + inf_create_off_on_dref() -> bool + +Help on function inf_create_off_using_fixup in module ida_ida: + +inf_create_off_using_fixup(*args) + inf_create_off_using_fixup() -> bool + +Help on function inf_create_strlit_on_xref in module ida_ida: + +inf_create_strlit_on_xref(*args) + inf_create_strlit_on_xref() -> bool + +Help on function inf_data_offset in module ida_ida: + +inf_data_offset(*args) + inf_data_offset() -> bool + +Help on function inf_dbg_no_store_path in module ida_ida: + +inf_dbg_no_store_path(*args) + inf_dbg_no_store_path() -> bool + +Help on function inf_decode_fpp in module ida_ida: + +inf_decode_fpp(*args) + inf_decode_fpp() -> bool + +Help on function inf_del_no_xref_insns in module ida_ida: + +inf_del_no_xref_insns(*args) + inf_del_no_xref_insns() -> bool + +Help on function inf_final_pass in module ida_ida: + +inf_final_pass(*args) + inf_final_pass() -> bool + +Help on function inf_full_sp_ana in module ida_ida: + +inf_full_sp_ana(*args) + inf_full_sp_ana() -> bool + +Help on function inf_gen_assume in module ida_ida: + +inf_gen_assume(*args) + inf_gen_assume() -> bool + +Help on function inf_gen_org in module ida_ida: + +inf_gen_org(*args) + inf_gen_org() -> bool + +Help on function inf_get_abibits in module ida_ida: + +inf_get_abibits(*args) + inf_get_abibits() -> uint32 + +Help on function inf_get_af in module ida_ida: + +inf_get_af(*args) + inf_get_af() -> uint32 + +Help on function inf_get_af2 in module ida_ida: + +inf_get_af2(*args) + inf_get_af2() -> uint32 + +Help on function inf_get_af2_low in module ida_ida: + +inf_get_af2_low(*args) + inf_get_af2_low() -> ushort + + + Get/set low 16bit half of inf.af2. + +Help on function inf_get_af_high in module ida_ida: + +inf_get_af_high(*args) + inf_get_af_high() -> ushort + +Help on function inf_get_af_low in module ida_ida: + +inf_get_af_low(*args) + inf_get_af_low() -> ushort + + + Get/set low/high 16bit halves of inf.af. + +Help on function inf_get_appcall_options in module ida_ida: + +inf_get_appcall_options(*args) + inf_get_appcall_options() -> uint32 + +Help on function inf_get_apptype in module ida_ida: + +inf_get_apptype(*args) + inf_get_apptype() -> ushort + +Help on function inf_get_asmtype in module ida_ida: + +inf_get_asmtype(*args) + inf_get_asmtype() -> uchar + +Help on function inf_get_baseaddr in module ida_ida: + +inf_get_baseaddr(*args) + inf_get_baseaddr() -> uval_t + +Help on function inf_get_bin_prefix_size in module ida_ida: + +inf_get_bin_prefix_size(*args) + inf_get_bin_prefix_size() -> short + +Help on function inf_get_cc in module ida_ida: + +inf_get_cc(*args) + inf_get_cc(out) -> bool + +Help on function inf_get_cc_cm in module ida_ida: + +inf_get_cc_cm(*args) + inf_get_cc_cm() -> cm_t + +Help on function inf_get_cc_defalign in module ida_ida: + +inf_get_cc_defalign(*args) + inf_get_cc_defalign() -> uchar + +Help on function inf_get_cc_id in module ida_ida: + +inf_get_cc_id(*args) + inf_get_cc_id() -> comp_t + +Help on function inf_get_cc_size_b in module ida_ida: + +inf_get_cc_size_b(*args) + inf_get_cc_size_b() -> uchar + +Help on function inf_get_cc_size_e in module ida_ida: + +inf_get_cc_size_e(*args) + inf_get_cc_size_e() -> uchar + +Help on function inf_get_cc_size_i in module ida_ida: + +inf_get_cc_size_i(*args) + inf_get_cc_size_i() -> uchar + +Help on function inf_get_cc_size_l in module ida_ida: + +inf_get_cc_size_l(*args) + inf_get_cc_size_l() -> uchar + +Help on function inf_get_cc_size_ldbl in module ida_ida: + +inf_get_cc_size_ldbl(*args) + inf_get_cc_size_ldbl() -> uchar + +Help on function inf_get_cc_size_ll in module ida_ida: + +inf_get_cc_size_ll(*args) + inf_get_cc_size_ll() -> uchar + +Help on function inf_get_cc_size_s in module ida_ida: + +inf_get_cc_size_s(*args) + inf_get_cc_size_s() -> uchar + +Help on function inf_get_cmtflg in module ida_ida: + +inf_get_cmtflg(*args) + inf_get_cmtflg() -> uchar + +Help on function inf_get_comment in module ida_ida: + +inf_get_comment(*args) + inf_get_comment() -> uchar + +Help on function inf_get_database_change_count in module ida_ida: + +inf_get_database_change_count(*args) + inf_get_database_change_count() -> uint32 + +Help on function inf_get_datatypes in module ida_ida: + +inf_get_datatypes(*args) + inf_get_datatypes() -> uval_t + +Help on function inf_get_demnames in module ida_ida: + +inf_get_demnames(*args) + inf_get_demnames() -> uchar + +Help on function inf_get_filetype in module ida_ida: + +inf_get_filetype(*args) + inf_get_filetype() -> filetype_t + +Help on function inf_get_genflags in module ida_ida: + +inf_get_genflags(*args) + inf_get_genflags() -> ushort + +Help on function inf_get_highoff in module ida_ida: + +inf_get_highoff(*args) + inf_get_highoff() -> ea_t + +Help on function inf_get_indent in module ida_ida: + +inf_get_indent(*args) + inf_get_indent() -> uchar + +Help on function inf_get_lenxref in module ida_ida: + +inf_get_lenxref(*args) + inf_get_lenxref() -> ushort + +Help on function inf_get_lflags in module ida_ida: + +inf_get_lflags(*args) + inf_get_lflags() -> uint32 + +Help on function inf_get_limiter in module ida_ida: + +inf_get_limiter(*args) + inf_get_limiter() -> uchar + +Help on function inf_get_listnames in module ida_ida: + +inf_get_listnames(*args) + inf_get_listnames() -> uchar + +Help on function inf_get_long_demnames in module ida_ida: + +inf_get_long_demnames(*args) + inf_get_long_demnames() -> uint32 + +Help on function inf_get_lowoff in module ida_ida: + +inf_get_lowoff(*args) + inf_get_lowoff() -> ea_t + +Help on function inf_get_main in module ida_ida: + +inf_get_main(*args) + inf_get_main() -> ea_t + +Help on function inf_get_margin in module ida_ida: + +inf_get_margin(*args) + inf_get_margin() -> ushort + +Help on function inf_get_max_autoname_len in module ida_ida: + +inf_get_max_autoname_len(*args) + inf_get_max_autoname_len() -> ushort + +Help on function inf_get_max_ea in module ida_ida: + +inf_get_max_ea(*args) + inf_get_max_ea() -> ea_t + +Help on function inf_get_maxref in module ida_ida: + +inf_get_maxref(*args) + inf_get_maxref() -> uval_t + +Help on function inf_get_min_ea in module ida_ida: + +inf_get_min_ea(*args) + inf_get_min_ea() -> ea_t + +Help on function inf_get_nametype in module ida_ida: + +inf_get_nametype(*args) + inf_get_nametype() -> char + +Help on function inf_get_netdelta in module ida_ida: + +inf_get_netdelta(*args) + inf_get_netdelta() -> sval_t + +Help on function inf_get_omax_ea in module ida_ida: + +inf_get_omax_ea(*args) + inf_get_omax_ea() -> ea_t + +Help on function inf_get_omin_ea in module ida_ida: + +inf_get_omin_ea(*args) + inf_get_omin_ea() -> ea_t + +Help on function inf_get_ostype in module ida_ida: + +inf_get_ostype(*args) + inf_get_ostype() -> ushort + +Help on function inf_get_outflags in module ida_ida: + +inf_get_outflags(*args) + inf_get_outflags() -> uint32 + +Help on function inf_get_prefflag in module ida_ida: + +inf_get_prefflag(*args) + inf_get_prefflag() -> uchar + +Help on function inf_get_privrange in module ida_ida: + +inf_get_privrange(*args) + inf_get_privrange(out) -> bool + inf_get_privrange() -> range_t + +Help on function inf_get_privrange_end_ea in module ida_ida: + +inf_get_privrange_end_ea(*args) + inf_get_privrange_end_ea() -> ea_t + +Help on function inf_get_privrange_start_ea in module ida_ida: + +inf_get_privrange_start_ea(*args) + inf_get_privrange_start_ea() -> ea_t + +Help on function inf_get_procname in module ida_ida: + +inf_get_procname(*args) + inf_get_procname() -> str + +Help on function inf_get_refcmtnum in module ida_ida: + +inf_get_refcmtnum(*args) + inf_get_refcmtnum() -> uchar + +Help on function inf_get_short_demnames in module ida_ida: + +inf_get_short_demnames(*args) + inf_get_short_demnames() -> uint32 + +Help on function inf_get_specsegs in module ida_ida: + +inf_get_specsegs(*args) + inf_get_specsegs() -> uchar + +Help on function inf_get_start_cs in module ida_ida: + +inf_get_start_cs(*args) + inf_get_start_cs() -> sel_t + +Help on function inf_get_start_ea in module ida_ida: + +inf_get_start_ea(*args) + inf_get_start_ea() -> ea_t + +Help on function inf_get_start_ip in module ida_ida: + +inf_get_start_ip(*args) + inf_get_start_ip() -> ea_t + +Help on function inf_get_start_sp in module ida_ida: + +inf_get_start_sp(*args) + inf_get_start_sp() -> ea_t + +Help on function inf_get_start_ss in module ida_ida: + +inf_get_start_ss(*args) + inf_get_start_ss() -> sel_t + +Help on function inf_get_strlit_break in module ida_ida: + +inf_get_strlit_break(*args) + inf_get_strlit_break() -> uchar + +Help on function inf_get_strlit_flags in module ida_ida: + +inf_get_strlit_flags(*args) + inf_get_strlit_flags() -> uchar + +Help on function inf_get_strlit_pref in module ida_ida: + +inf_get_strlit_pref(*args) + inf_get_strlit_pref() -> str + +Help on function inf_get_strlit_sernum in module ida_ida: + +inf_get_strlit_sernum(*args) + inf_get_strlit_sernum() -> uval_t + +Help on function inf_get_strlit_zeroes in module ida_ida: + +inf_get_strlit_zeroes(*args) + inf_get_strlit_zeroes() -> char + +Help on function inf_get_strtype in module ida_ida: + +inf_get_strtype(*args) + inf_get_strtype() -> int32 + +Help on function inf_get_type_xrefnum in module ida_ida: + +inf_get_type_xrefnum(*args) + inf_get_type_xrefnum() -> uchar + +Help on function inf_get_version in module ida_ida: + +inf_get_version(*args) + inf_get_version() -> ushort + +Help on function inf_get_xrefflag in module ida_ida: + +inf_get_xrefflag(*args) + inf_get_xrefflag() -> uchar + +Help on function inf_get_xrefnum in module ida_ida: + +inf_get_xrefnum(*args) + inf_get_xrefnum() -> uchar + +Help on function inf_guess_func_type in module ida_ida: + +inf_guess_func_type(*args) + inf_guess_func_type() -> bool + +Help on function inf_handle_eh in module ida_ida: + +inf_handle_eh(*args) + inf_handle_eh() -> bool + +Help on function inf_handle_rtti in module ida_ida: + +inf_handle_rtti(*args) + inf_handle_rtti() -> bool + +Help on function inf_hide_comments in module ida_ida: + +inf_hide_comments(*args) + inf_hide_comments() -> bool + +Help on function inf_hide_libfuncs in module ida_ida: + +inf_hide_libfuncs(*args) + inf_hide_libfuncs() -> bool + +Help on function inf_huge_arg_align in module ida_ida: + +inf_huge_arg_align(*args) + inf_huge_arg_align() -> bool + +Help on function inf_inc_database_change_count in module ida_ida: + +inf_inc_database_change_count(*args) + inf_inc_database_change_count(cnt=1) + +Help on function inf_is_limiter_empty in module ida_ida: + +inf_is_limiter_empty(*args) + inf_is_limiter_empty() -> bool + +Help on function inf_is_limiter_thick in module ida_ida: + +inf_is_limiter_thick(*args) + inf_is_limiter_thick() -> bool + +Help on function inf_is_limiter_thin in module ida_ida: + +inf_is_limiter_thin(*args) + inf_is_limiter_thin() -> bool + +Help on function inf_macros_enabled in module ida_ida: + +inf_macros_enabled(*args) + inf_macros_enabled() -> bool + +Help on function inf_mark_code in module ida_ida: + +inf_mark_code(*args) + inf_mark_code() -> bool + +Help on function inf_no_store_user_info in module ida_ida: + +inf_no_store_user_info(*args) + inf_no_store_user_info() -> bool + +Help on function inf_noflow_to_data in module ida_ida: + +inf_noflow_to_data(*args) + inf_noflow_to_data() -> bool + +Help on function inf_noret_ana in module ida_ida: + +inf_noret_ana(*args) + inf_noret_ana() -> bool + +Help on function inf_op_offset in module ida_ida: + +inf_op_offset(*args) + inf_op_offset() -> bool + +Help on function inf_pack_idb in module ida_ida: + +inf_pack_idb(*args) + inf_pack_idb() -> bool + +Help on function inf_postinc_strlit_sernum in module ida_ida: + +inf_postinc_strlit_sernum(*args) + inf_postinc_strlit_sernum(cnt=1) -> uval_t + +Help on function inf_prefix_show_funcoff in module ida_ida: + +inf_prefix_show_funcoff(*args) + inf_prefix_show_funcoff() -> bool + +Help on function inf_prefix_show_segaddr in module ida_ida: + +inf_prefix_show_segaddr(*args) + inf_prefix_show_segaddr() -> bool + +Help on function inf_prefix_show_stack in module ida_ida: + +inf_prefix_show_stack(*args) + inf_prefix_show_stack() -> bool + +Help on function inf_prefix_truncate_opcode_bytes in module ida_ida: + +inf_prefix_truncate_opcode_bytes(*args) + inf_prefix_truncate_opcode_bytes() -> bool + +Help on function inf_propagate_regargs in module ida_ida: + +inf_propagate_regargs(*args) + inf_propagate_regargs() -> bool + +Help on function inf_propagate_stkargs in module ida_ida: + +inf_propagate_stkargs(*args) + inf_propagate_stkargs() -> bool + +Help on function inf_rename_jumpfunc in module ida_ida: + +inf_rename_jumpfunc(*args) + inf_rename_jumpfunc() -> bool + +Help on function inf_rename_nullsub in module ida_ida: + +inf_rename_nullsub(*args) + inf_rename_nullsub() -> bool + +Help on function inf_set_32bit in module ida_ida: + +inf_set_32bit(*args) + inf_set_32bit(_v=True) -> bool + +Help on function inf_set_abi_set_by_user in module ida_ida: + +inf_set_abi_set_by_user(*args) + inf_set_abi_set_by_user(_v=True) -> bool + +Help on function inf_set_abibits in module ida_ida: + +inf_set_abibits(*args) + inf_set_abibits(_v) -> bool + +Help on function inf_set_af in module ida_ida: + +inf_set_af(*args) + inf_set_af(_v) -> bool + +Help on function inf_set_af2 in module ida_ida: + +inf_set_af2(*args) + inf_set_af2(_v) -> bool + +Help on function inf_set_af2_low in module ida_ida: + +inf_set_af2_low(*args) + inf_set_af2_low(saf) + +Help on function inf_set_af_high in module ida_ida: + +inf_set_af_high(*args) + inf_set_af_high(saf2) + +Help on function inf_set_af_low in module ida_ida: + +inf_set_af_low(*args) + inf_set_af_low(saf) + +Help on function inf_set_allow_non_matched_ops in module ida_ida: + +inf_set_allow_non_matched_ops(*args) + inf_set_allow_non_matched_ops(_v=True) -> bool + +Help on function inf_set_allow_sigmulti in module ida_ida: + +inf_set_allow_sigmulti(*args) + inf_set_allow_sigmulti(_v=True) -> bool + +Help on function inf_set_appcall_options in module ida_ida: + +inf_set_appcall_options(*args) + inf_set_appcall_options(_v) -> bool + +Help on function inf_set_append_sigcmt in module ida_ida: + +inf_set_append_sigcmt(*args) + inf_set_append_sigcmt(_v=True) -> bool + +Help on function inf_set_apptype in module ida_ida: + +inf_set_apptype(*args) + inf_set_apptype(_v) -> bool + +Help on function inf_set_asmtype in module ida_ida: + +inf_set_asmtype(*args) + inf_set_asmtype(_v) -> bool + +Help on function inf_set_baseaddr in module ida_ida: + +inf_set_baseaddr(*args) + inf_set_baseaddr(_v) -> bool + +Help on function inf_set_big_arg_align in module ida_ida: + +inf_set_big_arg_align(*args) + inf_set_big_arg_align(_v=True) -> bool + +Help on function inf_set_bin_prefix_size in module ida_ida: + +inf_set_bin_prefix_size(*args) + inf_set_bin_prefix_size(_v) -> bool + +Help on function inf_set_cc in module ida_ida: + +inf_set_cc(*args) + inf_set_cc(_v) -> bool + +Help on function inf_set_cc_cm in module ida_ida: + +inf_set_cc_cm(*args) + inf_set_cc_cm(_v) -> bool + +Help on function inf_set_cc_defalign in module ida_ida: + +inf_set_cc_defalign(*args) + inf_set_cc_defalign(_v) -> bool + +Help on function inf_set_cc_id in module ida_ida: + +inf_set_cc_id(*args) + inf_set_cc_id(_v) -> bool + +Help on function inf_set_cc_size_b in module ida_ida: + +inf_set_cc_size_b(*args) + inf_set_cc_size_b(_v) -> bool + +Help on function inf_set_cc_size_e in module ida_ida: + +inf_set_cc_size_e(*args) + inf_set_cc_size_e(_v) -> bool + +Help on function inf_set_cc_size_i in module ida_ida: + +inf_set_cc_size_i(*args) + inf_set_cc_size_i(_v) -> bool + +Help on function inf_set_cc_size_l in module ida_ida: + +inf_set_cc_size_l(*args) + inf_set_cc_size_l(_v) -> bool + +Help on function inf_set_cc_size_ldbl in module ida_ida: + +inf_set_cc_size_ldbl(*args) + inf_set_cc_size_ldbl(_v) -> bool + +Help on function inf_set_cc_size_ll in module ida_ida: + +inf_set_cc_size_ll(*args) + inf_set_cc_size_ll(_v) -> bool + +Help on function inf_set_cc_size_s in module ida_ida: + +inf_set_cc_size_s(*args) + inf_set_cc_size_s(_v) -> bool + +Help on function inf_set_check_manual_ops in module ida_ida: + +inf_set_check_manual_ops(*args) + inf_set_check_manual_ops(_v=True) -> bool + +Help on function inf_set_check_unicode_strlits in module ida_ida: + +inf_set_check_unicode_strlits(*args) + inf_set_check_unicode_strlits(_v=True) -> bool + +Help on function inf_set_cmtflg in module ida_ida: + +inf_set_cmtflg(*args) + inf_set_cmtflg(_v) -> bool + +Help on function inf_set_coagulate_code in module ida_ida: + +inf_set_coagulate_code(*args) + inf_set_coagulate_code(_v=True) -> bool + +Help on function inf_set_coagulate_data in module ida_ida: + +inf_set_coagulate_data(*args) + inf_set_coagulate_data(_v=True) -> bool + +Help on function inf_set_comment in module ida_ida: + +inf_set_comment(*args) + inf_set_comment(_v) -> bool + +Help on function inf_set_compress_idb in module ida_ida: + +inf_set_compress_idb(*args) + inf_set_compress_idb(_v=True) -> bool + +Help on function inf_set_create_all_xrefs in module ida_ida: + +inf_set_create_all_xrefs(*args) + inf_set_create_all_xrefs(_v=True) -> bool + +Help on function inf_set_create_func_from_call in module ida_ida: + +inf_set_create_func_from_call(*args) + inf_set_create_func_from_call(_v=True) -> bool + +Help on function inf_set_create_func_from_ptr in module ida_ida: + +inf_set_create_func_from_ptr(*args) + inf_set_create_func_from_ptr(_v=True) -> bool + +Help on function inf_set_create_func_tails in module ida_ida: + +inf_set_create_func_tails(*args) + inf_set_create_func_tails(_v=True) -> bool + +Help on function inf_set_create_jump_tables in module ida_ida: + +inf_set_create_jump_tables(*args) + inf_set_create_jump_tables(_v=True) -> bool + +Help on function inf_set_create_off_on_dref in module ida_ida: + +inf_set_create_off_on_dref(*args) + inf_set_create_off_on_dref(_v=True) -> bool + +Help on function inf_set_create_off_using_fixup in module ida_ida: + +inf_set_create_off_using_fixup(*args) + inf_set_create_off_using_fixup(_v=True) -> bool + +Help on function inf_set_create_strlit_on_xref in module ida_ida: + +inf_set_create_strlit_on_xref(*args) + inf_set_create_strlit_on_xref(_v=True) -> bool + +Help on function inf_set_data_offset in module ida_ida: + +inf_set_data_offset(*args) + inf_set_data_offset(_v=True) -> bool + +Help on function inf_set_database_change_count in module ida_ida: + +inf_set_database_change_count(*args) + inf_set_database_change_count(_v) -> bool + +Help on function inf_set_datatypes in module ida_ida: + +inf_set_datatypes(*args) + inf_set_datatypes(_v) -> bool + +Help on function inf_set_dbg_no_store_path in module ida_ida: + +inf_set_dbg_no_store_path(*args) + inf_set_dbg_no_store_path(_v=True) -> bool + +Help on function inf_set_decode_fpp in module ida_ida: + +inf_set_decode_fpp(*args) + inf_set_decode_fpp(_v=True) -> bool + +Help on function inf_set_del_no_xref_insns in module ida_ida: + +inf_set_del_no_xref_insns(*args) + inf_set_del_no_xref_insns(_v=True) -> bool + +Help on function inf_set_demnames in module ida_ida: + +inf_set_demnames(*args) + inf_set_demnames(_v) -> bool + +Help on function inf_set_dll in module ida_ida: + +inf_set_dll(*args) + inf_set_dll(_v=True) -> bool + +Help on function inf_set_filetype in module ida_ida: + +inf_set_filetype(*args) + inf_set_filetype(_v) -> bool + +Help on function inf_set_final_pass in module ida_ida: + +inf_set_final_pass(*args) + inf_set_final_pass(_v=True) -> bool + +Help on function inf_set_flat_off32 in module ida_ida: + +inf_set_flat_off32(*args) + inf_set_flat_off32(_v=True) -> bool + +Help on function inf_set_full_sp_ana in module ida_ida: + +inf_set_full_sp_ana(*args) + inf_set_full_sp_ana(_v=True) -> bool + +Help on function inf_set_gen_assume in module ida_ida: + +inf_set_gen_assume(*args) + inf_set_gen_assume(_v=True) -> bool + +Help on function inf_set_gen_org in module ida_ida: + +inf_set_gen_org(*args) + inf_set_gen_org(_v=True) -> bool + +Help on function inf_set_genflags in module ida_ida: + +inf_set_genflags(*args) + inf_set_genflags(_v) -> bool + +Help on function inf_set_guess_func_type in module ida_ida: + +inf_set_guess_func_type(*args) + inf_set_guess_func_type(_v=True) -> bool + +Help on function inf_set_handle_eh in module ida_ida: + +inf_set_handle_eh(*args) + inf_set_handle_eh(_v=True) -> bool + +Help on function inf_set_handle_rtti in module ida_ida: + +inf_set_handle_rtti(*args) + inf_set_handle_rtti(_v=True) -> bool + +Help on function inf_set_hard_float in module ida_ida: + +inf_set_hard_float(*args) + inf_set_hard_float(_v=True) -> bool + +Help on function inf_set_hide_comments in module ida_ida: + +inf_set_hide_comments(*args) + inf_set_hide_comments(_v=True) -> bool + +Help on function inf_set_hide_libfuncs in module ida_ida: + +inf_set_hide_libfuncs(*args) + inf_set_hide_libfuncs(_v=True) -> bool + +Help on function inf_set_highoff in module ida_ida: + +inf_set_highoff(*args) + inf_set_highoff(_v) -> bool + +Help on function inf_set_huge_arg_align in module ida_ida: + +inf_set_huge_arg_align(*args) + inf_set_huge_arg_align(_v=True) -> bool + +Help on function inf_set_indent in module ida_ida: + +inf_set_indent(*args) + inf_set_indent(_v) -> bool + +Help on function inf_set_kernel_mode in module ida_ida: + +inf_set_kernel_mode(*args) + inf_set_kernel_mode(_v=True) -> bool + +Help on function inf_set_lenxref in module ida_ida: + +inf_set_lenxref(*args) + inf_set_lenxref(_v) -> bool + +Help on function inf_set_lflags in module ida_ida: + +inf_set_lflags(*args) + inf_set_lflags(_v) -> bool + +Help on function inf_set_limiter in module ida_ida: + +inf_set_limiter(*args) + inf_set_limiter(_v) -> bool + +Help on function inf_set_limiter_empty in module ida_ida: + +inf_set_limiter_empty(*args) + inf_set_limiter_empty(_v=True) -> bool + +Help on function inf_set_limiter_thick in module ida_ida: + +inf_set_limiter_thick(*args) + inf_set_limiter_thick(_v=True) -> bool + +Help on function inf_set_limiter_thin in module ida_ida: + +inf_set_limiter_thin(*args) + inf_set_limiter_thin(_v=True) -> bool + +Help on function inf_set_listnames in module ida_ida: + +inf_set_listnames(*args) + inf_set_listnames(_v) -> bool + +Help on function inf_set_loading_idc in module ida_ida: + +inf_set_loading_idc(*args) + inf_set_loading_idc(_v=True) -> bool + +Help on function inf_set_long_demnames in module ida_ida: + +inf_set_long_demnames(*args) + inf_set_long_demnames(_v) -> bool + +Help on function inf_set_lowoff in module ida_ida: + +inf_set_lowoff(*args) + inf_set_lowoff(_v) -> bool + +Help on function inf_set_macros_enabled in module ida_ida: + +inf_set_macros_enabled(*args) + inf_set_macros_enabled(_v=True) -> bool + +Help on function inf_set_main in module ida_ida: + +inf_set_main(*args) + inf_set_main(_v) -> bool + +Help on function inf_set_map_stkargs in module ida_ida: + +inf_set_map_stkargs(*args) + inf_set_map_stkargs(_v=True) -> bool + +Help on function inf_set_margin in module ida_ida: + +inf_set_margin(*args) + inf_set_margin(_v) -> bool + +Help on function inf_set_mark_code in module ida_ida: + +inf_set_mark_code(*args) + inf_set_mark_code(_v=True) -> bool + +Help on function inf_set_max_autoname_len in module ida_ida: + +inf_set_max_autoname_len(*args) + inf_set_max_autoname_len(_v) -> bool + +Help on function inf_set_max_ea in module ida_ida: + +inf_set_max_ea(*args) + inf_set_max_ea(_v) -> bool + +Help on function inf_set_maxref in module ida_ida: + +inf_set_maxref(*args) + inf_set_maxref(_v) -> bool + +Help on function inf_set_mem_aligned4 in module ida_ida: + +inf_set_mem_aligned4(*args) + inf_set_mem_aligned4(_v=True) -> bool + +Help on function inf_set_min_ea in module ida_ida: + +inf_set_min_ea(*args) + inf_set_min_ea(_v) -> bool + +Help on function inf_set_nametype in module ida_ida: + +inf_set_nametype(*args) + inf_set_nametype(_v) -> bool + +Help on function inf_set_netdelta in module ida_ida: + +inf_set_netdelta(*args) + inf_set_netdelta(_v) -> bool + +Help on function inf_set_no_store_user_info in module ida_ida: + +inf_set_no_store_user_info(*args) + inf_set_no_store_user_info(_v=True) -> bool + +Help on function inf_set_noflow_to_data in module ida_ida: + +inf_set_noflow_to_data(*args) + inf_set_noflow_to_data(_v=True) -> bool + +Help on function inf_set_noret_ana in module ida_ida: + +inf_set_noret_ana(*args) + inf_set_noret_ana(_v=True) -> bool + +Help on function inf_set_omax_ea in module ida_ida: + +inf_set_omax_ea(*args) + inf_set_omax_ea(_v) -> bool + +Help on function inf_set_omin_ea in module ida_ida: + +inf_set_omin_ea(*args) + inf_set_omin_ea(_v) -> bool + +Help on function inf_set_op_offset in module ida_ida: + +inf_set_op_offset(*args) + inf_set_op_offset(_v=True) -> bool + +Help on function inf_set_ostype in module ida_ida: + +inf_set_ostype(*args) + inf_set_ostype(_v) -> bool + +Help on function inf_set_outflags in module ida_ida: + +inf_set_outflags(*args) + inf_set_outflags(_v) -> bool + +Help on function inf_set_pack_idb in module ida_ida: + +inf_set_pack_idb(*args) + inf_set_pack_idb(_v=True) -> bool + +Help on function inf_set_pack_stkargs in module ida_ida: + +inf_set_pack_stkargs(*args) + inf_set_pack_stkargs(_v=True) -> bool + +Help on function inf_set_prefflag in module ida_ida: + +inf_set_prefflag(*args) + inf_set_prefflag(_v) -> bool + +Help on function inf_set_prefix_show_funcoff in module ida_ida: + +inf_set_prefix_show_funcoff(*args) + inf_set_prefix_show_funcoff(_v=True) -> bool + +Help on function inf_set_prefix_show_segaddr in module ida_ida: + +inf_set_prefix_show_segaddr(*args) + inf_set_prefix_show_segaddr(_v=True) -> bool + +Help on function inf_set_prefix_show_stack in module ida_ida: + +inf_set_prefix_show_stack(*args) + inf_set_prefix_show_stack(_v=True) -> bool + +Help on function inf_set_prefix_truncate_opcode_bytes in module ida_ida: + +inf_set_prefix_truncate_opcode_bytes(*args) + inf_set_prefix_truncate_opcode_bytes(_v=True) -> bool + +Help on function inf_set_privrange in module ida_ida: + +inf_set_privrange(*args) + inf_set_privrange(_v) -> bool + +Help on function inf_set_privrange_end_ea in module ida_ida: + +inf_set_privrange_end_ea(*args) + inf_set_privrange_end_ea(_v) -> bool + +Help on function inf_set_privrange_start_ea in module ida_ida: + +inf_set_privrange_start_ea(*args) + inf_set_privrange_start_ea(_v) -> bool + +Help on function inf_set_procname in module ida_ida: + +inf_set_procname(*args) + inf_set_procname(_v, len=size_t(-1)) -> bool + +Help on function inf_set_propagate_regargs in module ida_ida: + +inf_set_propagate_regargs(*args) + inf_set_propagate_regargs(_v=True) -> bool + +Help on function inf_set_propagate_stkargs in module ida_ida: + +inf_set_propagate_stkargs(*args) + inf_set_propagate_stkargs(_v=True) -> bool + +Help on function inf_set_readonly_idb in module ida_ida: + +inf_set_readonly_idb(*args) + inf_set_readonly_idb(_v=True) -> bool + +Help on function inf_set_refcmtnum in module ida_ida: + +inf_set_refcmtnum(*args) + inf_set_refcmtnum(_v) -> bool + +Help on function inf_set_rename_jumpfunc in module ida_ida: + +inf_set_rename_jumpfunc(*args) + inf_set_rename_jumpfunc(_v=True) -> bool + +Help on function inf_set_rename_nullsub in module ida_ida: + +inf_set_rename_nullsub(*args) + inf_set_rename_nullsub(_v=True) -> bool + +Help on function inf_set_short_demnames in module ida_ida: + +inf_set_short_demnames(*args) + inf_set_short_demnames(_v) -> bool + +Help on function inf_set_should_create_stkvars in module ida_ida: + +inf_set_should_create_stkvars(*args) + inf_set_should_create_stkvars(_v=True) -> bool + +Help on function inf_set_should_trace_sp in module ida_ida: + +inf_set_should_trace_sp(*args) + inf_set_should_trace_sp(_v=True) -> bool + +Help on function inf_set_show_all_comments in module ida_ida: + +inf_set_show_all_comments(*args) + inf_set_show_all_comments(_v=True) -> bool + +Help on function inf_set_show_hidden_funcs in module ida_ida: + +inf_set_show_hidden_funcs(*args) + inf_set_show_hidden_funcs(_v=True) -> bool + +Help on function inf_set_show_hidden_insns in module ida_ida: + +inf_set_show_hidden_insns(*args) + inf_set_show_hidden_insns(_v=True) -> bool + +Help on function inf_set_show_hidden_segms in module ida_ida: + +inf_set_show_hidden_segms(*args) + inf_set_show_hidden_segms(_v=True) -> bool + +Help on function inf_set_show_repeatables in module ida_ida: + +inf_set_show_repeatables(*args) + inf_set_show_repeatables(_v=True) -> bool + +Help on function inf_set_show_src_linnum in module ida_ida: + +inf_set_show_src_linnum(*args) + inf_set_show_src_linnum(_v=True) -> bool + +Help on function inf_set_show_xref_fncoff in module ida_ida: + +inf_set_show_xref_fncoff(*args) + inf_set_show_xref_fncoff(_v=True) -> bool + +Help on function inf_set_show_xref_seg in module ida_ida: + +inf_set_show_xref_seg(*args) + inf_set_show_xref_seg(_v=True) -> bool + +Help on function inf_set_show_xref_tmarks in module ida_ida: + +inf_set_show_xref_tmarks(*args) + inf_set_show_xref_tmarks(_v=True) -> bool + +Help on function inf_set_show_xref_val in module ida_ida: + +inf_set_show_xref_val(*args) + inf_set_show_xref_val(_v=True) -> bool + +Help on function inf_set_snapshot in module ida_ida: + +inf_set_snapshot(*args) + inf_set_snapshot(_v=True) -> bool + +Help on function inf_set_specsegs in module ida_ida: + +inf_set_specsegs(*args) + inf_set_specsegs(_v) -> bool + +Help on function inf_set_stack_ldbl in module ida_ida: + +inf_set_stack_ldbl(*args) + inf_set_stack_ldbl(_v=True) -> bool + +Help on function inf_set_stack_varargs in module ida_ida: + +inf_set_stack_varargs(*args) + inf_set_stack_varargs(_v=True) -> bool + +Help on function inf_set_start_cs in module ida_ida: + +inf_set_start_cs(*args) + inf_set_start_cs(_v) -> bool + +Help on function inf_set_start_ea in module ida_ida: + +inf_set_start_ea(*args) + inf_set_start_ea(_v) -> bool + +Help on function inf_set_start_ip in module ida_ida: + +inf_set_start_ip(*args) + inf_set_start_ip(_v) -> bool + +Help on function inf_set_start_sp in module ida_ida: + +inf_set_start_sp(*args) + inf_set_start_sp(_v) -> bool + +Help on function inf_set_start_ss in module ida_ida: + +inf_set_start_ss(*args) + inf_set_start_ss(_v) -> bool + +Help on function inf_set_strlit_autocmt in module ida_ida: + +inf_set_strlit_autocmt(*args) + inf_set_strlit_autocmt(_v=True) -> bool + +Help on function inf_set_strlit_break in module ida_ida: + +inf_set_strlit_break(*args) + inf_set_strlit_break(_v) -> bool + +Help on function inf_set_strlit_flags in module ida_ida: + +inf_set_strlit_flags(*args) + inf_set_strlit_flags(_v) -> bool + +Help on function inf_set_strlit_name_bit in module ida_ida: + +inf_set_strlit_name_bit(*args) + inf_set_strlit_name_bit(_v=True) -> bool + +Help on function inf_set_strlit_names in module ida_ida: + +inf_set_strlit_names(*args) + inf_set_strlit_names(_v=True) -> bool + +Help on function inf_set_strlit_pref in module ida_ida: + +inf_set_strlit_pref(*args) + inf_set_strlit_pref(_v, len=size_t(-1)) -> bool + +Help on function inf_set_strlit_savecase in module ida_ida: + +inf_set_strlit_savecase(*args) + inf_set_strlit_savecase(_v=True) -> bool + +Help on function inf_set_strlit_serial_names in module ida_ida: + +inf_set_strlit_serial_names(*args) + inf_set_strlit_serial_names(_v=True) -> bool + +Help on function inf_set_strlit_sernum in module ida_ida: + +inf_set_strlit_sernum(*args) + inf_set_strlit_sernum(_v) -> bool + +Help on function inf_set_strlit_zeroes in module ida_ida: + +inf_set_strlit_zeroes(*args) + inf_set_strlit_zeroes(_v) -> bool + +Help on function inf_set_strtype in module ida_ida: + +inf_set_strtype(*args) + inf_set_strtype(_v) -> bool + +Help on function inf_set_test_mode in module ida_ida: + +inf_set_test_mode(*args) + inf_set_test_mode(_v=True) -> bool + +Help on function inf_set_trace_flow in module ida_ida: + +inf_set_trace_flow(*args) + inf_set_trace_flow(_v=True) -> bool + +Help on function inf_set_truncate_on_del in module ida_ida: + +inf_set_truncate_on_del(*args) + inf_set_truncate_on_del(_v=True) -> bool + +Help on function inf_set_type_xrefnum in module ida_ida: + +inf_set_type_xrefnum(*args) + inf_set_type_xrefnum(_v) -> bool + +Help on function inf_set_unicode_strlits in module ida_ida: + +inf_set_unicode_strlits(*args) + inf_set_unicode_strlits(_v=True) -> bool + +Help on function inf_set_use_allasm in module ida_ida: + +inf_set_use_allasm(*args) + inf_set_use_allasm(_v=True) -> bool + +Help on function inf_set_use_flirt in module ida_ida: + +inf_set_use_flirt(*args) + inf_set_use_flirt(_v=True) -> bool + +Help on function inf_set_use_gcc_layout in module ida_ida: + +inf_set_use_gcc_layout(*args) + inf_set_use_gcc_layout(_v=True) -> bool + +Help on function inf_set_version in module ida_ida: + +inf_set_version(*args) + inf_set_version(_v) -> bool + +Help on function inf_set_xrefflag in module ida_ida: + +inf_set_xrefflag(*args) + inf_set_xrefflag(_v) -> bool + +Help on function inf_set_xrefnum in module ida_ida: + +inf_set_xrefnum(*args) + inf_set_xrefnum(_v) -> bool + +Help on function inf_should_create_stkvars in module ida_ida: + +inf_should_create_stkvars(*args) + inf_should_create_stkvars() -> bool + +Help on function inf_should_trace_sp in module ida_ida: + +inf_should_trace_sp(*args) + inf_should_trace_sp() -> bool + +Help on function inf_show_all_comments in module ida_ida: + +inf_show_all_comments(*args) + inf_show_all_comments() -> bool + +Help on function inf_show_hidden_funcs in module ida_ida: + +inf_show_hidden_funcs(*args) + inf_show_hidden_funcs() -> bool + +Help on function inf_show_hidden_insns in module ida_ida: + +inf_show_hidden_insns(*args) + inf_show_hidden_insns() -> bool + +Help on function inf_show_hidden_segms in module ida_ida: + +inf_show_hidden_segms(*args) + inf_show_hidden_segms() -> bool + +Help on function inf_show_repeatables in module ida_ida: + +inf_show_repeatables(*args) + inf_show_repeatables() -> bool + +Help on function inf_show_src_linnum in module ida_ida: + +inf_show_src_linnum(*args) + inf_show_src_linnum() -> bool + +Help on function inf_show_xref_fncoff in module ida_ida: + +inf_show_xref_fncoff(*args) + inf_show_xref_fncoff() -> bool + +Help on function inf_show_xref_seg in module ida_ida: + +inf_show_xref_seg(*args) + inf_show_xref_seg() -> bool + +Help on function inf_show_xref_tmarks in module ida_ida: + +inf_show_xref_tmarks(*args) + inf_show_xref_tmarks() -> bool + +Help on function inf_show_xref_val in module ida_ida: + +inf_show_xref_val(*args) + inf_show_xref_val() -> bool + +Help on function inf_strlit_autocmt in module ida_ida: + +inf_strlit_autocmt(*args) + inf_strlit_autocmt() -> bool + +Help on function inf_strlit_name_bit in module ida_ida: + +inf_strlit_name_bit(*args) + inf_strlit_name_bit() -> bool + +Help on function inf_strlit_names in module ida_ida: + +inf_strlit_names(*args) + inf_strlit_names() -> bool + +Help on function inf_strlit_savecase in module ida_ida: + +inf_strlit_savecase(*args) + inf_strlit_savecase() -> bool + +Help on function inf_strlit_serial_names in module ida_ida: + +inf_strlit_serial_names(*args) + inf_strlit_serial_names() -> bool + +Help on function inf_test_mode in module ida_ida: + +inf_test_mode(*args) + inf_test_mode() -> bool + +Help on function inf_trace_flow in module ida_ida: + +inf_trace_flow(*args) + inf_trace_flow() -> bool + +Help on function inf_truncate_on_del in module ida_ida: + +inf_truncate_on_del(*args) + inf_truncate_on_del() -> bool + +Help on function inf_unicode_strlits in module ida_ida: + +inf_unicode_strlits(*args) + inf_unicode_strlits() -> bool + +Help on function inf_use_flirt in module ida_ida: + +inf_use_flirt(*args) + inf_use_flirt() -> bool + +Help on function is_filetype_like_binary in module ida_ida: + +is_filetype_like_binary(*args) + is_filetype_like_binary(ft) -> bool + + + Is unstructured input file? + + + @param ft (C++: filetype_t) + +Help on function in module ida_ida: + + lambda *args + +Help on function to_ea in module ida_ida: + +to_ea(*args) + to_ea(reg_cs, reg_ip) -> ea_t + + + Convert (sel,off) value to a linear address. + + + @param reg_cs (C++: sel_t) + @param reg_ip (C++: uval_t) + +=== ida_ida EPYDOC INJECTIONS === +ida_ida.ABI_8ALIGN4 +""" +4 byte alignment for 8byte scalars (__int64/double) inside structures? +""" + +ida_ida.ABI_BIGARG_ALIGN +""" +(e.g. __int64 argument should be 8byte aligned on some 32bit +platforms) + +use natural type alignment for argument if the alignment exceeds +native word size +""" + +ida_ida.ABI_GCC_LAYOUT +""" +use gcc layout for udts (used for mingw) +""" + +ida_ida.ABI_HARD_FLOAT +""" +use the floating-point register set +""" + +ida_ida.ABI_HUGEARG_ALIGN +""" +use natural type alignment for an argument even if its alignment +exceeds double native word size (the default is to use double word +max). e.g. if this bit is set, __int128 has 16-byte alignment +""" + +ida_ida.ABI_MAP_STKARGS +""" +register arguments are mapped to stack area (and consume stack slots) +""" + +ida_ida.ABI_PACK_STKARGS +""" +do not align stack arguments to stack slots +""" + +ida_ida.ABI_SET_BY_USER +""" +compiler/abi were set by user flag and require SETCOMP_BY_USER flag to +be changed +""" + +ida_ida.ABI_STACK_LDBL +""" +long double arguments are passed on stack +""" + +ida_ida.ABI_STACK_VARARGS +""" +varargs are always passed on stack (even when there are free +registers) +""" + +ida_ida.AF2_DOEH +""" +Handle EH information. +""" + +ida_ida.AF2_DORTTI +""" +Handle RTTI information. +""" + +ida_ida.AF2_MACRO +""" +Try to combine several instructions into a macro instruction +""" + +ida_ida.AF_ANORET +""" +Perform 'no-return' analysis. +""" + +ida_ida.AF_CHKUNI +""" +Check for unicode strings. +""" + +ida_ida.AF_CODE +""" +Trace execution flow. +""" + +ida_ida.AF_DATOFF +""" +Automatically convert data to offsets. +""" + +ida_ida.AF_DOCODE +""" +Coagulate code segs at the final pass. +""" + +ida_ida.AF_DODATA +""" +Coagulate data segs at the final pass. +""" + +ida_ida.AF_DREFOFF +""" +Create offset if data xref to seg32 exists. +""" + +ida_ida.AF_FINAL +""" +Final pass of analysis. +""" + +ida_ida.AF_FIXUP +""" +Create offsets and segments using fixup info. +""" + +ida_ida.AF_FLIRT +""" +Use flirt signatures. +""" + +ida_ida.AF_FTAIL +""" +Create function tails. +""" + +ida_ida.AF_HFLIRT +""" +Automatically hide library functions. +""" + +ida_ida.AF_IMMOFF +""" +Convert 32bit instruction operand to offset. +""" + +ida_ida.AF_JFUNC +""" +Rename jump functions as j_... +""" + +ida_ida.AF_JUMPTBL +""" +Locate and create jump tables. +""" + +ida_ida.AF_LVAR +""" +Create stack variables. +""" + +ida_ida.AF_MARKCODE +""" +Mark typical code sequences as code. +""" + +ida_ida.AF_MEMFUNC +""" +Try to guess member function types. +""" + +ida_ida.AF_NULLSUB +""" +Rename empty functions as nullsub_... +""" + +ida_ida.AF_PROC +""" +Create functions if call is present. +""" + +ida_ida.AF_PROCPTR +""" +Create function if data xref data->code32 exists. +""" + +ida_ida.AF_PURDAT +""" +Control flow to data segment is ignored. +""" + +ida_ida.AF_REGARG +""" +Propagate register argument information. +""" + +ida_ida.AF_SIGCMT +""" +Append a signature name comment for recognized anonymous library +functions. +""" + +ida_ida.AF_SIGMLT +""" +Allow recognition of several copies of the same function. +""" + +ida_ida.AF_STKARG +""" +Propagate stack argument information. +""" + +ida_ida.AF_STRLIT +""" +Create string literal if data xref exists. +""" + +ida_ida.AF_TRACE +""" +Trace stack pointer. +""" + +ida_ida.AF_TRFUNC +""" +Truncate functions upon code deletion. +""" + +ida_ida.AF_UNK +""" +Delete instructions with no xrefs. +""" + +ida_ida.AF_USED +""" +Analyze and create all xrefs. +""" + +ida_ida.AF_VERSP +""" +Perform full SP-analysis. (\\ph{verify_sp}) +""" + +ida_ida.DEMNAM_CMNT +""" +display demangled names as comments +""" + +ida_ida.DEMNAM_FIRST +""" +override type info +""" + +ida_ida.DEMNAM_GCC3 +""" +assume gcc3 names (valid for gnu compiler) +""" + +ida_ida.DEMNAM_MASK +""" +mask for name form +""" + +ida_ida.DEMNAM_NAME +""" +display demangled names as regular names +""" + +ida_ida.DEMNAM_NONE +""" +don't display demangled names +""" + +ida_ida.IDAINFO_TAG_SIZE +""" +The database parameters. This structure is kept in the ida database. +It contains the essential parameters for the current program +""" + +ida_ida.IDB_COMPRESSED +""" +compress & pack database components +""" + +ida_ida.IDB_PACKED +""" +pack database components into .idb +""" + +ida_ida.IDB_UNPACKED +""" +leave database components unpacked +""" + +ida_ida.INFFL_ALLASM +""" +the target assembler + +may use constructs not supported by +""" + +ida_ida.INFFL_AUTO +""" +Autoanalysis is enabled? +""" + +ida_ida.INFFL_CHKOPS +""" +check manual operands? (unused) +""" + +ida_ida.INFFL_GRAPH_VIEW +""" +currently using graph options (\\dto{graph}) +""" + +ida_ida.INFFL_LOADIDC +""" +loading an idc file that contains database info +""" + +ida_ida.INFFL_NMOPS +""" +allow non-matched operands? (unused) +""" + +ida_ida.INFFL_NOUSER +""" +do not store user info in the database +""" + +ida_ida.INFFL_READONLY +""" +(internal) temporary interdiction to modify the database +""" + +ida_ida.LFLG_64BIT +""" +64-bit program? +""" + +ida_ida.LFLG_COMPRESS +""" +compress the database? +""" + +ida_ida.LFLG_DBG_NOPATH +""" +do not store input full path in debugger process options +""" + +ida_ida.LFLG_FLAT_OFF32 +""" +treat 'REF_OFF32' as 32-bit offset for 16bit segments (otherwise try +SEG16:OFF16) +""" + +ida_ida.LFLG_IS_DLL +""" +Is dynamic library? +""" + +ida_ida.LFLG_KERNMODE +""" +is kernel mode binary? +""" + +ida_ida.LFLG_MSF +""" +Byte order: is MSB first? +""" + +ida_ida.LFLG_PACK +""" +pack the database? +""" + +ida_ida.LFLG_PC_FLAT +""" +32-bit program? +""" + +ida_ida.LFLG_PC_FPP +""" +decode floating point processor instructions? +""" + +ida_ida.LFLG_SNAPSHOT +""" +memory snapshot was taken? +""" + +ida_ida.LFLG_WIDE_HBF +""" +(wide bytes: \\ph{dnbits} > 8) + +Bit order of wide bytes: high byte first? +""" + +ida_ida.LMT_EMPTY +""" +empty lines at the end of basic blocks +""" + +ida_ida.LMT_THICK +""" +thick borders +""" + +ida_ida.LMT_THIN +""" +thin borders +""" + +ida_ida.LN_AUTO +""" +include autogenerated names +""" + +ida_ida.LN_NORMAL +""" +include normal names +""" + +ida_ida.LN_PUBLIC +""" +include public names +""" + +ida_ida.LN_WEAK +""" +include weak names +""" + +ida_ida.OFLG_GEN_ASSUME +""" +Generate 'assume' directives? +""" + +ida_ida.OFLG_GEN_NULL +""" +Generate empty lines? +""" + +ida_ida.OFLG_GEN_ORG +""" +Generate 'org' directives? +""" + +ida_ida.OFLG_GEN_TRYBLKS +""" +Generate try/catch directives? +""" + +ida_ida.OFLG_LZERO +""" +generate leading zeroes in numbers +""" + +ida_ida.OFLG_PREF_SEG +""" +line prefixes with segment name? +""" + +ida_ida.OFLG_SHOW_AUTO +""" +Display autoanalysis indicator? +""" + +ida_ida.OFLG_SHOW_PREF +""" +Show line prefixes? +""" + +ida_ida.OFLG_SHOW_VOID +""" +Display void marks? +""" + +ida_ida.PREF_FNCOFF +""" +show function offsets? +""" + +ida_ida.PREF_PFXTRUNC +""" +truncate instruction bytes if they would need more than 1 line +""" + +ida_ida.PREF_SEGADR +""" +show segment addresses? +""" + +ida_ida.PREF_STACK +""" +show stack pointer? +""" + +ida_ida.SCF_ALLCMT +""" +comment all lines? +""" + +ida_ida.SCF_LINNUM +""" +show source line numbers +""" + +ida_ida.SCF_NOCMT +""" +no comments at all +""" + +ida_ida.SCF_RPTCMT +""" +show repeatable comments? +""" + +ida_ida.SCF_SHHID_FUNC +""" +show hidden functions +""" + +ida_ida.SCF_SHHID_ITEM +""" +show hidden instructions +""" + +ida_ida.SCF_SHHID_SEGM +""" +show hidden segments +""" + +ida_ida.SCF_TESTMODE +""" +testida.idc is running +""" + +ida_ida.STRF_AUTO +""" +names have 'autogenerated' bit? +""" + +ida_ida.STRF_COMMENT +""" +generate auto comment for string references? +""" + +ida_ida.STRF_GEN +""" +generate names? +""" + +ida_ida.STRF_SAVECASE +""" +preserve case of strings for identifiers +""" + +ida_ida.STRF_SERIAL +""" +generate serial names? +""" + +ida_ida.STRF_UNICODE +""" +unicode strings are present? +""" + +ida_ida.SW_SEGXRF +""" +show segments in xrefs? +""" + +ida_ida.SW_XRFFNC +""" +show function offsets? +""" + +ida_ida.SW_XRFMRK +""" +show xref type marks? +""" + +ida_ida.SW_XRFVAL +""" +show xref values? (otherwise-"...") +""" + +ida_ida.UA_MAXOP +""" +max number of operands allowed for an instruction +""" +=== ida_ida EPYDOC INJECTIONS END === +Help on class CustomIDAMemo in module ida_kernwin: + +class CustomIDAMemo(View_Hooks) + | # + | # ----------------------------------------------------------------------- + | # CustomIDAMemo + | # ----------------------------------------------------------------------- + | + | Method resolution order: + | CustomIDAMemo + | View_Hooks + | __builtin__.object + | + | Methods defined here: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | __init__(self) + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | + | view_click(self, view, ve) + | + | view_close(self, view, *args) + | + | view_curpos(self, view, *args) + | + | view_dblclick(self, view, ve) + | + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | + | view_mouse_over(self, view, ve) + | + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | view_created(self, *args) + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from View_Hooks: + | + | __swig_destroy__ = + | delete_View_Hooks(self) + +Help on __IDAPython_Completion_Util in module ida_idaapi object: + +class __IDAPython_Completion_Util(__builtin__.object) + | Internal utility class for auto-completion support + | + | Methods defined here: + | + | __call__(self, line, x) + | + | __init__(self) + | + | debug(self, *args) + | + | dir_namespace(self, m, prefix) + | + | get_candidates(self, qname, line, match_syntax_char) + | + | maybe_extend_syntactically(self, ns, name, line, syntax_char) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | QNAME_PAT = <_sre.SRE_Pattern object> + +Help on function IDAPython_ExecScript in module ida_idaapi: + +IDAPython_ExecScript(script, g, print_error=True) + Run the specified script. + It also addresses http://code.google.com/p/idapython/issues/detail?id=42 + + This function is used by the low-level plugin code. + +Help on function IDAPython_ExecSystem in module ida_idaapi: + +IDAPython_ExecSystem(cmd) + Executes a command with popen(). + +Help on function IDAPython_FormatExc in module ida_idaapi: + +IDAPython_FormatExc(etype, value=None, tb=None, limit=None) + This function is used to format an exception given the + values returned by a PyErr_Fetch() + +Help on function IDAPython_LoadProcMod in module ida_idaapi: + +IDAPython_LoadProcMod(script, g, print_error=True) + Load processor module. + +Help on function IDAPython_UnLoadProcMod in module ida_idaapi: + +IDAPython_UnLoadProcMod(script, g, print_error=True) + Unload processor module. + +Help on class IDAPython_displayhook in module ida_idaapi: + +class IDAPython_displayhook + | # ------------------------------------------------------------ + | + | Methods defined here: + | + | __init__(self) + | + | _print_hex(self, x) + | + | displayhook(self, item) + | + | format_item(self, num_printer, storage, item) + | + | format_seq(self, num_printer, storage, item, opn, cls) + +Help on class PyIdc_cvt_int64__ in module ida_idaapi: + +class PyIdc_cvt_int64__(pyidc_cvt_helper__) + | Helper class for explicitly representing VT_INT64 values + | + | Method resolution order: + | PyIdc_cvt_int64__ + | pyidc_cvt_helper__ + | __builtin__.object + | + | Methods defined here: + | + | _PyIdc_cvt_int64____op = __op(self, op_n, other, rev=False) + | + | __add__(self, other) + | + | __div__(self, other) + | + | __init__(self, v) + | + | __mul__(self, other) + | + | __radd__(self, other) + | + | __rdiv__(self, other) + | + | __rmul__(self, other) + | + | __rsub__(self, other) + | + | __sub__(self, other) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _PyIdc_cvt_int64____op_table = {0: >, 1: + +Help on function __install_excepthook in module ida_idaapi: + +__install_excepthook() + # Since version 5.5, PyQt5 doesn't simply print the PyQt exceptions by default + # anymore: https://github.com/baoboa/pyqt5/commit/1e1d8a3ba677ef3e47b916b8a5b9c281d0f8e4b5#diff-848704a82f6a6e3a13112145ce32ac69L63 + # The default behavior now is that qFatal() is called, causing the application + # to abort(). + # We do not want that to happen in IDA, and simply having a sys.excepthook + # that is different from sys.__excepthook__ is enough for PyQt5 to return + # to the previous behavior + +Help on function _bounded_getitem_iterator in module ida_idaapi: + +_bounded_getitem_iterator(self) + Helper function, to be set as __iter__ method for qvector-, or array-based classes. + +Help on function _listify_types in module ida_idaapi: + +_listify_types(*classes) + +Help on function _qvector_back in module ida_idaapi: + +_qvector_back(self) + # ----------------------------------------------------------------------- + +Help on function _qvector_front in module ida_idaapi: + +_qvector_front(self) + # ----------------------------------------------------------------------- + +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) + Convenience function to convert a string into appropriate unicode format + +Help on function as_cstr in module ida_idaapi: + +as_cstr(val) + Returns a C str from the passed value. The passed value can be of type refclass (returned by a call to buffer() or byref()) + It scans for the first and returns the string value up to that point. + +Help on function as_int32 in module ida_idaapi: + +as_int32(v) + Returns a number as a signed int32 number + +Help on function as_signed in module ida_idaapi: + +as_signed(v, nbits=32) + Returns a number as signed. The number of bits are specified by the user. + The MSB holds the sign. + +Help on function as_uint32 in module ida_idaapi: + +as_uint32(v) + Returns a number as an unsigned int32 number + +Help on function copy_bits in module ida_idaapi: + +copy_bits(v, s, e=-1) + Copy bits from a value + @param v: the value + @param s: starting bit (0-based) + @param e: ending bit + +Help on function disable_script_timeout in module ida_idaapi: + +disable_script_timeout(*args) + disable_script_timeout() + + + Disables the script timeout and hides the script wait box. + Calling L{set_script_timeout} will not have any effects until the script is compiled and executed again + + @return: None + +Help on function enable_extlang_python in module ida_idaapi: + +enable_extlang_python(*args) + enable_extlang_python(enable) + + + Enables or disables Python extlang. + When enabled, all expressions will be evaluated by Python. + @param enable: Set to True to enable, False otherwise + +Help on function enable_python_cli in module ida_idaapi: + +enable_python_cli(*args) + enable_python_cli(enable) + +Help on function format_basestring in module ida_idaapi: + +format_basestring(*args) + format_basestring(_in) -> PyObject * + +Help on function get_inf_structure in module ida_idaapi: + +get_inf_structure(*args) + get_inf_structure() -> idainfo + + + Returns the global variable 'inf' (an instance of idainfo structure, see ida.hpp) + +Help on class loader_input_t in module ida_idaapi: + +class loader_input_t(__builtin__.object) + | Proxy of C++ loader_input_t class. + | + | + | A helper class to work with linput_t related functions. + | This class is also used by file loaders scripts. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, pycapsule=None) -> loader_input_t + | + | + | Closes the file + | + | __repr__ = _swig_repr(self) + | + | close(self, *args) + | close(self) + | + | file2base(self, *args) + | file2base(self, pos, ea1, ea2, patchable) -> int + | + | + | Load portion of file into the database + | This function will include (ea1..ea2) into the addressing space of the + | program (make it enabled) + | @param li: pointer ot input source + | @param pos: position in the file + | @param (ea1..ea2): range of destination linear addresses + | @param patchable: should the kernel remember correspondance of + | file offsets to linear addresses. + | @return: 1-ok,0-read error, a warning is displayed + | + | filename(self, *args) + | filename(self) -> PyObject * + | + | get_char(self, *args) + | get_char(self) -> PyObject * + | + | get_linput(self, *args) + | get_linput(self) -> linput_t * + | + | gets(self, *args) + | gets(self, len) -> PyObject * + | + | + | Reads a line from the input file. Returns the read line or None + | + | getz(self, *args) + | getz(self, sz, fpos=-1) -> PyObject * + | + | + | Returns a zero terminated string at the given position + | @param sz: maximum size of the string + | @param fpos: if != -1 then seek will be performed before reading + | @return: The string or None on failure. + | + | open(self, *args) + | open(self, filename, remote=False) -> bool + | + | + | Opens a file (or a remote file) + | @return: Boolean + | + | open_memory(self, *args) + | open_memory(self, start, size=0) -> bool + | + | + | Create a linput for process memory (By internally calling idaapi.create_memory_linput()) + | This linput will use dbg->read_memory() to read data + | @param start: starting address of the input + | @param size: size of the memory range to represent as linput + | if unknown, may be passed as 0 + | + | opened(self, *args) + | opened(self) -> bool + | + | + | Checks if the file is opened or not + | + | read(self, *args) + | read(self, size) -> PyObject * + | + | + | Reads from the file. Returns the buffer or None + | + | readbytes(self, *args) + | readbytes(self, size, big_endian) -> PyObject * + | + | + | Similar to read() but it respect the endianness + | + | seek(self, *args) + | seek(self, pos, whence=SEEK_SET) -> int64 + | + | + | Set input source position + | @return: the new position (not 0 as fseek!) + | + | set_linput(self, *args) + | set_linput(self, linput) + | + | + | Links the current loader_input_t instance to a linput_t instance + | + | size(self, *args) + | size(self) -> int64 + | + | tell(self, *args) + | tell(self) -> int64 + | + | + | Returns the current position + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | from_capsule(*args) + | from_capsule(pycapsule) -> loader_input_t + | + | from_fp(*args) + | from_fp(fp) -> loader_input_t + | + | + | A static method to construct an instance from a FILE* + | + | from_linput(*args) + | from_linput(linput) -> loader_input_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __idc_cvt_id__ + | loader_input_t___idc_cvt_id___get(self) -> int + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_loader_input_t(self) + +Help on function loader_input_t_from_capsule in module ida_idaapi: + +loader_input_t_from_capsule(*args) + loader_input_t_from_capsule(pycapsule) -> loader_input_t + +Help on function loader_input_t_from_fp in module ida_idaapi: + +loader_input_t_from_fp(*args) + loader_input_t_from_fp(fp) -> loader_input_t + +Help on function loader_input_t_from_linput in module ida_idaapi: + +loader_input_t_from_linput(*args) + loader_input_t_from_linput(linput) -> loader_input_t + +Help on function notify_when in module ida_idaapi: + +notify_when(when, callback) + Register a callback that will be called when an event happens. + @param when: one of NW_XXXX constants + @param callback: This callback prototype varies depending on the 'when' parameter: + The general callback format: + def notify_when_callback(nw_code) + In the case of NW_OPENIDB: + def notify_when_callback(nw_code, is_old_database) + @return: Boolean + +Help on class object_t in module ida_idaapi: + +class object_t(__builtin__.object) + | Helper class used to initialize empty objects + | + | Methods defined here: + | + | __getitem__(self, idx) + | Allow access to object attributes by index (like dictionaries) + | + | __init__(self, **kwds) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function parse_command_line3 in module ida_idaapi: + +parse_command_line3(*args) + parse_command_line3(cmdline) -> PyObject * + +Help on class plugin_t in module ida_idaapi: + +class plugin_t(pyidc_opaque_object_t) + | Base class for all scripted plugins. + | + | Method resolution order: + | plugin_t + | pyidc_opaque_object_t + | __builtin__.object + | + | Data descriptors inherited from pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on class py_clinked_object_t in module ida_idaapi: + +class py_clinked_object_t(pyidc_opaque_object_t) + | This is a utility and base class for C linked objects + | + | Method resolution order: + | py_clinked_object_t + | pyidc_opaque_object_t + | __builtin__.object + | + | Methods defined here: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | __init__(self, lnk=None) + | + | _create_clink(self) + | Overwrite me. + | Creates a new clink + | @return: PyCapsule representing the C link + | + | _del_clink(self, lnk) + | Overwrite me. + | This method deletes the link + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | _get_clink_ptr(self) + | Overwrite me. + | Returns the C link pointer as a 64bit number + | + | assign(self, other) + | Overwrite me. + | This method allows you to assign an instance contents to anothers + | @return: Boolean + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function pycim_get_widget in module ida_idaapi: + +pycim_get_widget(*args) + pycim_get_widget(_self) -> TWidget * + +Help on function pycim_view_close in module ida_idaapi: + +pycim_view_close(*args) + pycim_view_close(_self) + +Help on function pygc_create_groups in module ida_idaapi: + +pygc_create_groups(*args) + pygc_create_groups(_self, groups_infos) -> PyObject * + +Help on function pygc_delete_groups in module ida_idaapi: + +pygc_delete_groups(*args) + pygc_delete_groups(_self, groups, new_current) -> PyObject * + +Help on function pygc_refresh in module ida_idaapi: + +pygc_refresh(*args) + pygc_refresh(_self) + +Help on function pygc_set_groups_visibility in module ida_idaapi: + +pygc_set_groups_visibility(*args) + pygc_set_groups_visibility(_self, groups, expand, new_current) -> PyObject * + +Help on class pyidc_cvt_helper__ in module ida_idaapi: + +class pyidc_cvt_helper__(__builtin__.object) + | This is a special helper object that helps detect which kind + | of object is this python object wrapping and how to convert it + | back and from IDC. + | This object is characterized by its special attribute and its value + | + | Methods defined here: + | + | __init__(self, cvt_id, value) + | + | _pyidc_cvt_helper____get_value = __get_value(self) + | + | _pyidc_cvt_helper____set_value = __set_value(self, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | value + +Help on class pyidc_opaque_object_t in module ida_idaapi: + +class pyidc_opaque_object_t(__builtin__.object) + | This is the base class for all Python<->IDC opaque objects + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __idc_cvt_id__ = 2 + +Help on function replfun in module ida_idaapi: + +replfun(func) + +Help on function require in module ida_idaapi: + +require(modulename, package=None) + Load, or reload a module. + + When under heavy development, a user's tool might consist of multiple + modules. If those are imported using the standard 'import' mechanism, + there is no guarantee that the Python implementation will re-read + and re-evaluate the module's Python code. In fact, it usually doesn't. + What should be done instead is 'reload()'-ing that module. + + This is a simple helper function that will do just that: In case the + module doesn't exist, it 'import's it, and if it does exist, + 'reload()'s it. + + The importing module (i.e., the module calling require()) will have + the loaded module bound to its globals(), under the name 'modulename'. + (If require() is called from the command line, the importing module + will be '__main__'.) + + For more information, see: . + +Help on function set_script_timeout in module ida_idaapi: + +set_script_timeout(*args) + set_script_timeout(timeout) -> int + + + Changes the script timeout value. The script wait box dialog will be hidden and shown again when the timeout elapses. + See also L{disable_script_timeout}. + + @param timeout: This value is in seconds. + If this value is set to zero then the script will never timeout. + @return: Returns the old timeout value + +Help on function struct_unpack in module ida_idaapi: + +struct_unpack(buffer, signed=False, offs=0) + Unpack a buffer given its length and offset using struct.unpack_from(). + This function will know how to unpack the given buffer by using the lookup table '__struct_unpack_table' + If the buffer is of unknown length then None is returned. Otherwise the unpacked value is returned. + +Help on function get_mark_comment in module ida_idc: + +get_mark_comment(*args) + get_mark_comment(slot) -> PyObject * + +Help on function get_marked_pos in module ida_idc: + +get_marked_pos(*args) + get_marked_pos(slot) -> ea_t + +Help on function mark_position in module ida_idc: + +mark_position(*args) + mark_position(ea, lnnum, x, y, slot, comment) + +Help on Appcall__ in module ida_idd object: + +class Appcall__(__builtin__.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | _Appcall____get_consts = __get_consts(self) + | + | __getattr__(self, name_or_ea) + | Allows you to call functions as if they were member functions (by returning a callable object) + | + | __getitem__(self, idx) + | Use self[func_name] syntax if the function name contains invalid characters for an attribute name + | See __getattr___ + | + | __init__(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | UTF16(s) + | + | _Appcall____name_or_ea = __name_or_ea(name_or_ea) + | Function that accepts a name or an ea and checks if the address is enabled. + | If a name is passed then idaapi.get_name_ea() is applied to retrieve the name + | @return: + | - Returns the resolved EA or + | - Raises an exception if the address is not enabled + | + | _Appcall____typedecl_or_tinfo = __typedecl_or_tinfo(typedecl_or_tinfo, flags=None) + | Function that accepts a tinfo_t object or type declaration as a string + | If a type declaration is passed then ida_typeinf.parse_decl() is applied to prepare tinfo_t object + | @return: + | - Returns the tinfo_t object + | - Raises an exception if the declaration cannot be parsed + | + | array(type_name) + | Defines an array type. Later you need to pack() / unpack() + | + | buffer(str=None, size=0, fill='\x00') + | Creates a string buffer. The returned value (r) will be a byref object. + | Use r.value to get the contents and r.size to get the buffer's size + | + | byref(val) + | Method to create references to immutable objects + | Currently we support references to int/strings + | Objects need not be passed by reference (this will be done automatically) + | + | cleanup_appcall(tid=0) + | Equivalent to IDC's CleanupAppcall() + | + | cstr(val) + | + | get_appcall_options() + | Return the global Appcall options + | + | int64(v) + | Whenever a 64bit number is needed use this method to construct an object + | + | obj(**kwds) + | Returns an empty object or objects with attributes as passed via its keywords arguments + | + | proto(name_or_ea, proto_or_tinfo, flags=None) + | Allows you to instantiate an appcall (callable object) with the desired prototype + | @param name_or_ea: The name of the function (will be resolved with LocByName()) + | @param proto_or_tinfo: function prototype as a string or type of the function as tinfo_t object + | @return: + | - On failure it raises an exception if the prototype could not be parsed + | or the address is not resolvable + | - Returns a callbable Appcall instance with the given prototypes and flags + | + | set_appcall_options(opt) + | Method to change the Appcall options globally (not per Appcall) + | + | typedobj(typedecl_or_tinfo, ea=None) + | Returns an appcall object for a type (can be given as tinfo_t object or + | as a string declaration) + | One can then use retrieve() member method + | @param ea: Optional parameter that later can be used to retrieve the type + | @return: Appcall object or raises ValueError exception + | + | unicode = UTF16(s) + | + | valueof(name, default=0) + | Returns the numeric value of a given name string. + | If the name could not be resolved then the default value will be returned + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Consts + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | APPCALL_DEBEV = 2 + | + | APPCALL_MANUAL = 1 + | + | APPCALL_TIMEOUT = 4 + | + | __name__ = 'Appcall__' + +Help on class Appcall__ in module ida_idd: + +class Appcall__(__builtin__.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | _Appcall____get_consts = __get_consts(self) + | + | __getattr__(self, name_or_ea) + | Allows you to call functions as if they were member functions (by returning a callable object) + | + | __getitem__(self, idx) + | Use self[func_name] syntax if the function name contains invalid characters for an attribute name + | See __getattr___ + | + | __init__(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | UTF16(s) + | + | _Appcall____name_or_ea = __name_or_ea(name_or_ea) + | Function that accepts a name or an ea and checks if the address is enabled. + | If a name is passed then idaapi.get_name_ea() is applied to retrieve the name + | @return: + | - Returns the resolved EA or + | - Raises an exception if the address is not enabled + | + | _Appcall____typedecl_or_tinfo = __typedecl_or_tinfo(typedecl_or_tinfo, flags=None) + | Function that accepts a tinfo_t object or type declaration as a string + | If a type declaration is passed then ida_typeinf.parse_decl() is applied to prepare tinfo_t object + | @return: + | - Returns the tinfo_t object + | - Raises an exception if the declaration cannot be parsed + | + | array(type_name) + | Defines an array type. Later you need to pack() / unpack() + | + | buffer(str=None, size=0, fill='\x00') + | Creates a string buffer. The returned value (r) will be a byref object. + | Use r.value to get the contents and r.size to get the buffer's size + | + | byref(val) + | Method to create references to immutable objects + | Currently we support references to int/strings + | Objects need not be passed by reference (this will be done automatically) + | + | cleanup_appcall(tid=0) + | Equivalent to IDC's CleanupAppcall() + | + | cstr(val) + | + | get_appcall_options() + | Return the global Appcall options + | + | int64(v) + | Whenever a 64bit number is needed use this method to construct an object + | + | obj(**kwds) + | Returns an empty object or objects with attributes as passed via its keywords arguments + | + | proto(name_or_ea, proto_or_tinfo, flags=None) + | Allows you to instantiate an appcall (callable object) with the desired prototype + | @param name_or_ea: The name of the function (will be resolved with LocByName()) + | @param proto_or_tinfo: function prototype as a string or type of the function as tinfo_t object + | @return: + | - On failure it raises an exception if the prototype could not be parsed + | or the address is not resolvable + | - Returns a callbable Appcall instance with the given prototypes and flags + | + | set_appcall_options(opt) + | Method to change the Appcall options globally (not per Appcall) + | + | typedobj(typedecl_or_tinfo, ea=None) + | Returns an appcall object for a type (can be given as tinfo_t object or + | as a string declaration) + | One can then use retrieve() member method + | @param ea: Optional parameter that later can be used to retrieve the type + | @return: Appcall object or raises ValueError exception + | + | unicode = UTF16(s) + | + | valueof(name, default=0) + | Returns the numeric value of a given name string. + | If the name could not be resolved then the default value will be returned + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Consts + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | APPCALL_DEBEV = 2 + | + | APPCALL_MANUAL = 1 + | + | APPCALL_TIMEOUT = 4 + | + | __name__ = 'Appcall__' + +Help on class Appcall_array__ in module ida_idd: + +class Appcall_array__(__builtin__.object) + | This class is used with Appcall.array() method + | + | Methods defined here: + | + | __init__(self, tp) + | + | pack(self, L) + | Packs a list or tuple into a byref buffer + | + | try_to_convert_to_list(self, obj) + | Is this object a list? We check for the existance of attribute zero and attribute self.size-1 + | + | unpack(self, buf, as_list=True) + | Unpacks an array back into a list or an object + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class Appcall_callable__ in module ida_idd: + +class Appcall_callable__(__builtin__.object) + | Helper class to issue appcalls using a natural syntax: + | appcall.FunctionNameInTheDatabase(arguments, ....) + | or + | appcall["Function@8"](arguments, ...) + | or + | f8 = appcall["Function@8"] + | f8(arg1, arg2, ...) + | or + | o = appcall.obj() + | i = byref(5) + | appcall.funcname(arg1, i, "hello", o) + | + | Methods defined here: + | + | _Appcall_callable____get_ea = __get_ea(self) + | + | _Appcall_callable____get_fields = __get_fields(self) + | + | _Appcall_callable____get_options = __get_options(self) + | + | _Appcall_callable____get_size = __get_size(self) + | + | _Appcall_callable____get_tif = __get_tif(self) + | + | _Appcall_callable____get_timeout = __get_timeout(self) + | + | _Appcall_callable____get_type = __get_type(self) + | + | _Appcall_callable____set_ea = __set_ea(self, val) + | + | _Appcall_callable____set_options = __set_options(self, v) + | + | _Appcall_callable____set_timeout = __set_timeout(self, v) + | + | __call__(self, *args) + | Make object callable. We redirect execution to idaapi.appcall() + | + | __init__(self, ea, tinfo_or_typestr=None, fields=None) + | Initializes an appcall with a given function ea + | + | retrieve(self, src=None, flags=0) + | Unpacks a typed object from the database if an ea is given or from a string if a string was passed + | @param src: the address of the object or a string + | @return: Returns a tuple of boolean and object or error number (Bool, Error | Object). + | + | store(self, obj, dest_ea=None, base_ea=0, flags=0) + | Packs an object into a given ea if provided or into a string if no address was passed. + | @param obj: The object to pack + | @param dest_ea: If packing to idb this will be the store location + | @param base_ea: If packing to a buffer, this will be the base that will be used to relocate the pointers + | + | @return: + | - If packing to a string then a Tuple(Boolean, packed_string or error code) + | - If packing to the database then a return code is returned (0 is success) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | + | fields + | + | options + | + | size + | + | tif + | + | timeout + | + | type + +Help on class Appcall_consts__ in module ida_idd: + +class Appcall_consts__(__builtin__.object) + | Helper class used by Appcall.Consts attribute + | It is used to retrieve constants via attribute access + | + | Methods defined here: + | + | __getattr__(self, attr) + | + | __init__(self, default=None) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function appcall in module ida_idd: + +appcall(*args) + appcall(func_ea, tid, _type_or_none, _fields, arg_list) -> PyObject * + +Help on class bptaddr_t in module ida_idd: + +class bptaddr_t(__builtin__.object) + | Proxy of C++ bptaddr_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bptaddr_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hea + | bptaddr_t_hea_get(self) -> ea_t + | + | kea + | bptaddr_t_kea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bptaddr_t(self) + +Help on class call_stack_info_t in module ida_idd: + +class call_stack_info_t(__builtin__.object) + | Proxy of C++ call_stack_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> call_stack_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | callea + | call_stack_info_t_callea_get(self) -> ea_t + | + | fp + | call_stack_info_t_fp_get(self) -> ea_t + | + | funcea + | call_stack_info_t_funcea_get(self) -> ea_t + | + | funcok + | call_stack_info_t_funcok_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_call_stack_info_t(self) + +Help on class call_stack_t in module ida_idd: + +class call_stack_t(__builtin__.object) + | Proxy of C++ qvector< call_stack_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> call_stack_info_t + | + | __init__(self, *args) + | __init__(self) -> call_stack_t + | __init__(self, x) -> call_stack_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> call_stack_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> call_stack_info_t + | begin(self) -> call_stack_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> call_stack_info_t + | end(self) -> call_stack_info_t + | + | erase(self, *args) + | erase(self, it) -> call_stack_info_t + | erase(self, first, last) -> call_stack_info_t + | + | extract(self, *args) + | extract(self) -> call_stack_info_t + | + | find(self, *args) + | find(self, x) -> call_stack_info_t + | find(self, x) -> call_stack_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=call_stack_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> call_stack_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> call_stack_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_call_stack_t(self) + +Help on function can_exc_continue in module ida_idd: + +can_exc_continue(*args) + can_exc_continue(ev) -> bool + +Help on function cleanup_appcall in module ida_idd: + +cleanup_appcall(*args) + cleanup_appcall(tid) -> error_t + + + Cleanup after manual appcall. + + @param tid: thread to use. NO_THREAD means to use the current thread + The application state is restored as it was before calling + the last appcall(). Nested appcalls are supported. (C++: + thid_t) + @return: eOk if successful, otherwise an error code + +Help on function dbg_appcall in module ida_idd: + +dbg_appcall(*args) + dbg_appcall(retval, func_ea, tid, ptif, argv, argnum) -> error_t + + + Call a function from the debugged application. + + @param retval (C++: idc_value_t *) + @param func_ea: address to call (C++: ea_t) + @param tid: thread to use. NO_THREAD means to use the current thread + (C++: thid_t) + @param ptif: pointer to type of the function to call (C++: const + tinfo_t *) + @param argv: array of arguments (C++: idc_value_t *) + @param argnum: number of actual arguments (C++: size_t) + @return: eOk if successful, otherwise an error code + +Help on built-in function dbg_can_query in module _ida_dbg: + +dbg_can_query(...) + dbg_can_query() -> bool + +Help on function dbg_get_memory_info in module ida_idd: + +dbg_get_memory_info(*args) + dbg_get_memory_info() -> PyObject * + + + This function returns the memory configuration of a debugged process. + @return: + None if no debugger is active + tuple(start_ea, end_ea, name, sclass, sbase, bitness, perm) + +Help on function dbg_get_name in module ida_idd: + +dbg_get_name(*args) + dbg_get_name() -> PyObject * + + + This function returns the current debugger's name. + @return: Debugger name or None if no debugger is active + +Help on function dbg_get_registers in module ida_idd: + +dbg_get_registers(*args) + dbg_get_registers() -> PyObject * + + + This function returns the register definition from the currently loaded debugger. + Basically, it returns an array of structure similar to to idd.hpp / register_info_t + @return: + None if no debugger is loaded + tuple(name, flags, class, dtype, bit_strings, default_bit_strings_mask) + The bit_strings can be a tuple of strings or None (if the register does not have bit_strings) + +Help on function dbg_get_thread_sreg_base in module ida_idd: + +dbg_get_thread_sreg_base(*args) + dbg_get_thread_sreg_base(tid, sreg_value) -> PyObject * + + + Returns the segment register base value + @param tid: thread id + @param sreg_value: segment register (selector) value + @return: + - The base as an 'ea' + - Or None on failure + +Help on function dbg_read_memory in module ida_idd: + +dbg_read_memory(*args) + dbg_read_memory(ea, sz) -> PyObject * + + + Reads from the debugee's memory at the specified ea + @return: + - The read buffer (as a string) + - Or None on failure + +Help on function dbg_write_memory in module ida_idd: + +dbg_write_memory(*args) + dbg_write_memory(ea, buf) -> PyObject * + + + Writes a buffer to the debugee's memory + @return: Boolean + +Help on class debapp_attrs_t in module ida_idd: + +class debapp_attrs_t(__builtin__.object) + | Proxy of C++ debapp_attrs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> debapp_attrs_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | addrsize + | debapp_attrs_t_addrsize_get(self) -> int + | + | cbsize + | debapp_attrs_t_cbsize_get(self) -> int32 + | + | is_be + | debapp_attrs_t_is_be_get(self) -> int + | + | platform + | debapp_attrs_t_platform_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_debapp_attrs_t(self) + +Help on class debug_event_t in module ida_idd: + +class debug_event_t(__builtin__.object) + | Proxy of C++ debug_event_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> debug_event_t + | __init__(self, r) -> debug_event_t + | + | __repr__ = _swig_repr(self) + | + | bpt(self, *args) + | bpt(self) -> bptaddr_t + | bpt(self) -> bptaddr_t + | + | bpt_ea(self, *args) + | bpt_ea(self) -> ea_t + | + | clear(self, *args) + | clear(self) + | + | clear_all(self, *args) + | clear_all(self) + | + | copy(self, *args) + | copy(self, r) -> debug_event_t + | + | eid(self, *args) + | eid(self) -> event_id_t + | + | exc(self, *args) + | exc(self) -> excinfo_t + | exc(self) -> excinfo_t + | + | exit_code(self, *args) + | exit_code(self) -> int const & + | + | info(self, *args) + | info(self) -> qstring + | info(self) -> qstring const & + | + | modinfo(self, *args) + | modinfo(self) -> modinfo_t + | modinfo(self) -> modinfo_t + | + | set_bpt(self, *args) + | set_bpt(self) -> bptaddr_t + | + | set_eid(self, *args) + | set_eid(self, id) + | + | set_exception(self, *args) + | set_exception(self) -> excinfo_t + | + | set_exit_code(self, *args) + | set_exit_code(self, id, code) + | + | set_info(self, *args) + | set_info(self, id) -> qstring & + | + | set_modinfo(self, *args) + | set_modinfo(self, id) -> modinfo_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | debug_event_t_ea_get(self) -> ea_t + | + | handled + | debug_event_t_handled_get(self) -> bool + | + | pid + | debug_event_t_pid_get(self) -> pid_t + | + | thisown + | The membership flag + | + | tid + | debug_event_t_tid_get(self) -> thid_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_debug_event_t(self) + +Help on class exception_info_t in module ida_idd: + +class exception_info_t(__builtin__.object) + | Proxy of C++ exception_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> exception_info_t + | __init__(self, _code, _flags, _name, _desc) -> exception_info_t + | + | __repr__ = _swig_repr(self) + | + | break_on(self, *args) + | break_on(self) -> bool + | + | handle(self, *args) + | handle(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | exception_info_t_code_get(self) -> uint + | + | desc + | exception_info_t_desc_get(self) -> qstring * + | + | flags + | exception_info_t_flags_get(self) -> uint32 + | + | name + | exception_info_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_exception_info_t(self) + +Help on class excinfo_t in module ida_idd: + +class excinfo_t(__builtin__.object) + | Proxy of C++ excinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> excinfo_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | can_cont + | excinfo_t_can_cont_get(self) -> bool + | + | code + | excinfo_t_code_get(self) -> uint32 + | + | ea + | excinfo_t_ea_get(self) -> ea_t + | + | info + | excinfo_t_info_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_excinfo_t(self) + +Help on class excvec_t in module ida_idd: + +class excvec_t(__builtin__.object) + | Proxy of C++ qvector< exception_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> exception_info_t + | + | __init__(self, *args) + | __init__(self) -> excvec_t + | __init__(self, x) -> excvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> exception_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> exception_info_t + | begin(self) -> exception_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> exception_info_t + | end(self) -> exception_info_t + | + | erase(self, *args) + | erase(self, it) -> exception_info_t + | erase(self, first, last) -> exception_info_t + | + | extract(self, *args) + | extract(self) -> exception_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=exception_info_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> exception_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> exception_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_excvec_t(self) + +Help on function get_event_bpt_hea in module ida_idd: + +get_event_bpt_hea(*args) + get_event_bpt_hea(ev) -> ea_t + +Help on function get_event_exc_code in module ida_idd: + +get_event_exc_code(*args) + get_event_exc_code(ev) -> uint + +Help on function get_event_exc_ea in module ida_idd: + +get_event_exc_ea(*args) + get_event_exc_ea(ev) -> ea_t + +Help on function get_event_exc_info in module ida_idd: + +get_event_exc_info(*args) + get_event_exc_info(ev) -> str + +Help on function get_event_info in module ida_idd: + +get_event_info(*args) + get_event_info(ev) -> str + +Help on function get_event_module_base in module ida_idd: + +get_event_module_base(*args) + get_event_module_base(ev) -> ea_t + +Help on function get_event_module_name in module ida_idd: + +get_event_module_name(*args) + get_event_module_name(ev) -> str + +Help on function get_event_module_size in module ida_idd: + +get_event_module_size(*args) + get_event_module_size(ev) -> asize_t + +Help on class meminfo_vec_t in module ida_idd: + +class meminfo_vec_t(__builtin__.object) + | Proxy of C++ qvector< memory_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> memory_info_t + | + | __init__(self, *args) + | __init__(self) -> meminfo_vec_t + | __init__(self, x) -> meminfo_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> memory_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> memory_info_t + | begin(self) -> memory_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> memory_info_t + | end(self) -> memory_info_t + | + | erase(self, *args) + | erase(self, it) -> memory_info_t + | erase(self, first, last) -> memory_info_t + | + | extract(self, *args) + | extract(self) -> memory_info_t + | + | find(self, *args) + | find(self, x) -> memory_info_t + | find(self, x) -> memory_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=memory_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> memory_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> memory_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_meminfo_vec_t(self) + +Help on class memory_info_t in module ida_idd: + +class memory_info_t(ida_range.range_t) + | Proxy of C++ memory_info_t class. + | + | Method resolution order: + | memory_info_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> memory_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bitness + | memory_info_t_bitness_get(self) -> uchar + | + | name + | memory_info_t_name_get(self) -> qstring * + | + | perm + | memory_info_t_perm_get(self) -> uchar + | + | sbase + | memory_info_t_sbase_get(self) -> ea_t + | + | sclass + | memory_info_t_sclass_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_memory_info_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on class modinfo_t in module ida_idd: + +class modinfo_t(__builtin__.object) + | Proxy of C++ modinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> modinfo_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | modinfo_t_base_get(self) -> ea_t + | + | name + | modinfo_t_name_get(self) -> qstring * + | + | rebase_to + | modinfo_t_rebase_to_get(self) -> ea_t + | + | size + | modinfo_t_size_get(self) -> asize_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_modinfo_t(self) + +Help on class process_info_t in module ida_idd: + +class process_info_t(__builtin__.object) + | Proxy of C++ process_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> process_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | process_info_t_name_get(self) -> qstring * + | + | pid + | process_info_t_pid_get(self) -> pid_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_process_info_t(self) + +Help on class procinfo_vec_t in module ida_idd: + +class procinfo_vec_t(__builtin__.object) + | Proxy of C++ qvector< process_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> process_info_t + | + | __init__(self, *args) + | __init__(self) -> procinfo_vec_t + | __init__(self, x) -> procinfo_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> process_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> process_info_t + | begin(self) -> process_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> process_info_t + | end(self) -> process_info_t + | + | erase(self, *args) + | erase(self, it) -> process_info_t + | erase(self, first, last) -> process_info_t + | + | extract(self, *args) + | extract(self) -> process_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=process_info_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> process_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> process_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_procinfo_vec_t(self) + +Help on class register_info_t in module ida_idd: + +class register_info_t(__builtin__.object) + | Proxy of C++ register_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> register_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bit_strings + | register_info_t_bit_strings_get(self) -> char const *const * + | + | default_bit_strings_mask + | register_info_t_default_bit_strings_mask_get(self) -> uval_t + | + | dtype + | register_info_t_dtype_get(self) -> op_dtype_t + | + | flags + | register_info_t_flags_get(self) -> uint32 + | + | name + | register_info_t_name_get(self) -> char const * + | + | register_class + | register_info_t_register_class_get(self) -> register_class_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_register_info_t(self) + +Help on class regval_t in module ida_idd: + +class regval_t(__builtin__.object) + | Proxy of C++ regval_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> regval_t + | __init__(self, r) -> regval_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | bytes(self, *args) + | bytes(self) -> bytevec_t + | bytes(self) -> bytevec_t const & + | + | clear(self, *args) + | clear(self) + | + | get_data(self, *args) + | get_data(self) + | get_data(self) -> void const * + | + | get_data_size(self, *args) + | get_data_size(self) -> size_t + | + | set_bytes(self, *args) + | set_bytes(self, data, size) + | set_bytes(self, v) + | set_bytes(self) -> bytevec_t & + | + | set_float(self, *args) + | set_float(self, x) + | + | set_int(self, *args) + | set_int(self, x) + | + | set_unavailable(self, *args) + | set_unavailable(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fval + | regval_t_fval_get(self) -> uint16 [6] + | + | ival + | regval_t_ival_get(self) -> uint64 + | + | rvtype + | regval_t_rvtype_get(self) -> int32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regval_t(self) + +Help on class scattered_segm_t in module ida_idd: + +class scattered_segm_t(ida_range.range_t) + | Proxy of C++ scattered_segm_t class. + | + | Method resolution order: + | scattered_segm_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> scattered_segm_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | name + | scattered_segm_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_scattered_segm_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on function set_debug_event_code in module ida_idd: + +set_debug_event_code(*args) + set_debug_event_code(ev, id) + +Help on class thread_name_t in module ida_idd: + +class thread_name_t(__builtin__.object) + | Proxy of C++ thread_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> thread_name_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | thread_name_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tid + | thread_name_t_tid_get(self) -> thid_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_thread_name_t(self) + +=== ida_idd EPYDOC INJECTIONS === +ida_idd.EXC_BREAK +""" +break on the exception +""" + +ida_idd.EXC_HANDLE +""" +should be handled by the debugger? +""" + +ida_idd.EXC_MSG +""" +instead of a warning, log the exception to the output window +""" + +ida_idd.EXC_SILENT +""" +do not warn or log to the output window +""" + +ida_idd.IDD_INTERFACE_VERSION +""" +The IDD interface version number. +""" + +ida_idd.NO_PROCESS +""" +No process. +""" + +ida_idd.NO_THREAD +""" +No thread. in 'PROCESS_STARTED' this value can be used to specify that +the main thread has not been created. It will be initialized later by +a 'THREAD_STARTED' event. +""" + +ida_idd.REGISTER_ADDRESS +""" +may contain an address +""" + +ida_idd.REGISTER_CS +""" +code segment +""" + +ida_idd.REGISTER_CUSTFMT +""" +register should be displayed using a custom data format. the format +name is in bit_strings[0] the corresponding 'regval_t' will use +'bytevec_t' +""" + +ida_idd.REGISTER_FP +""" +frame pointer +""" + +ida_idd.REGISTER_IP +""" +instruction pointer +""" + +ida_idd.REGISTER_NOLF +""" +allowing the next register to be displayed to its right (on the same +line) + +displays this register without returning to the next line +""" + +ida_idd.REGISTER_READONLY +""" +the user can't modify the current value of this register +""" + +ida_idd.REGISTER_SP +""" +stack pointer +""" + +ida_idd.REGISTER_SS +""" +stack segment +""" + +ida_idd.RVT_FLOAT +""" +floating point +""" + +ida_idd.RVT_INT +""" +integer +""" + +ida_idd.RVT_UNAVAILABLE +""" +other values mean custom data type + +unavailable +""" +=== ida_idd EPYDOC INJECTIONS END === +Help on function AssembleLine in module ida_idp: + +AssembleLine(*args) + AssembleLine(ea, cs, ip, use32, nonnul_line) -> PyObject * + + + Assemble an instruction to a string (display a warning if an error is found) + + @param ea: linear address of instruction + @param cs: cs of instruction + @param ip: ip of instruction + @param use32: is 32bit segment + @param line: line to assemble + @return: + - None on failure + - or a string containing the assembled instruction + +Help on class IDB_Hooks in module ida_idp: + +class IDB_Hooks(__builtin__.object) + | Proxy of C++ IDB_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> IDB_Hooks + | + | __repr__ = _swig_repr(self) + | + | allsegs_moved(self, *args) + | allsegs_moved(self, info) + | + | auto_empty(self, *args) + | auto_empty(self) + | + | auto_empty_finally(self, *args) + | auto_empty_finally(self) + | + | bookmark_changed(self, *args) + | bookmark_changed(self, index, pos, desc) + | + | byte_patched(self, *args) + | byte_patched(self, ea, old_value) + | + | callee_addr_changed(self, *args) + | callee_addr_changed(self, ea, callee) + | + | changing_cmt(self, *args) + | changing_cmt(self, ea, repeatable_cmt, newcmt) + | + | changing_enum_bf(self, *args) + | changing_enum_bf(self, id, new_bf) + | + | changing_enum_cmt(self, *args) + | changing_enum_cmt(self, id, repeatable, newcmt) + | + | changing_op_ti(self, *args) + | changing_op_ti(self, ea, n, new_type, new_fnames) + | + | changing_op_type(self, *args) + | changing_op_type(self, ea, n, opinfo) + | + | changing_range_cmt(self, *args) + | changing_range_cmt(self, kind, a, cmt, repeatable) + | + | changing_segm_class(self, *args) + | changing_segm_class(self, s) + | + | changing_segm_end(self, *args) + | changing_segm_end(self, s, new_end, segmod_flags) + | + | changing_segm_name(self, *args) + | changing_segm_name(self, s, oldname) + | + | changing_segm_start(self, *args) + | changing_segm_start(self, s, new_start, segmod_flags) + | + | changing_struc_align(self, *args) + | changing_struc_align(self, sptr) + | + | changing_struc_cmt(self, *args) + | changing_struc_cmt(self, struc_id, repeatable, newcmt) + | + | changing_struc_member(self, *args) + | changing_struc_member(self, sptr, mptr, flag, ti, nbytes) + | + | changing_ti(self, *args) + | changing_ti(self, ea, new_type, new_fnames) + | + | closebase(self, *args) + | closebase(self) + | + | cmt_changed(self, *args) + | cmt_changed(self, ea, repeatable_cmt) + | + | compiler_changed(self, *args) + | compiler_changed(self) + | + | deleting_enum(self, *args) + | deleting_enum(self, id) + | + | deleting_enum_member(self, *args) + | deleting_enum_member(self, id, cid) + | + | deleting_func(self, *args) + | deleting_func(self, pfn) + | + | deleting_func_tail(self, *args) + | deleting_func_tail(self, pfn, tail) + | + | deleting_segm(self, *args) + | deleting_segm(self, start_ea) + | + | deleting_struc(self, *args) + | deleting_struc(self, sptr) + | + | deleting_struc_member(self, *args) + | deleting_struc_member(self, sptr, mptr) + | + | deleting_tryblks(self, *args) + | deleting_tryblks(self, range) + | + | destroyed_items(self, *args) + | destroyed_items(self, ea1, ea2, will_disable_range) + | + | determined_main(self, *args) + | determined_main(self, main) + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | enum_bf_changed(self, *args) + | enum_bf_changed(self, id) + | + | enum_cmt_changed(self, *args) + | enum_cmt_changed(self, id, repeatable) + | + | enum_created(self, *args) + | enum_created(self, id) + | + | enum_deleted(self, *args) + | enum_deleted(self, id) + | + | enum_member_created(self, *args) + | enum_member_created(self, id, cid) + | + | enum_member_deleted(self, *args) + | enum_member_deleted(self, id, cid) + | + | enum_renamed(self, *args) + | enum_renamed(self, id) + | + | expanding_struc(self, *args) + | expanding_struc(self, sptr, offset, delta) + | + | extlang_changed(self, *args) + | extlang_changed(self, kind, el, idx) + | + | extra_cmt_changed(self, *args) + | extra_cmt_changed(self, ea, line_idx, cmt) + | + | flow_chart_created(self, *args) + | flow_chart_created(self, fc) + | + | frame_deleted(self, *args) + | frame_deleted(self, pfn) + | + | func_added(self, *args) + | func_added(self, pfn) + | + | func_noret_changed(self, *args) + | func_noret_changed(self, pfn) + | + | func_tail_appended(self, *args) + | func_tail_appended(self, pfn, tail) + | + | func_tail_deleted(self, *args) + | func_tail_deleted(self, pfn, tail_ea) + | + | func_updated(self, *args) + | func_updated(self, pfn) + | + | hook(self, *args) + | hook(self) -> bool + | + | idasgn_loaded(self, *args) + | idasgn_loaded(self, short_sig_name) + | + | item_color_changed(self, *args) + | item_color_changed(self, ea, color) + | + | kernel_config_loaded(self, *args) + | kernel_config_loaded(self) + | + | loader_finished(self, *args) + | loader_finished(self, li, neflags, filetypename) + | + | local_types_changed(self, *args) + | local_types_changed(self) + | + | make_code(self, *args) + | make_code(self, insn) + | + | make_data(self, *args) + | make_data(self, ea, flags, tid, len) + | + | op_ti_changed(self, *args) + | op_ti_changed(self, ea, n, type, fnames) + | + | op_type_changed(self, *args) + | op_type_changed(self, ea, n) + | + | range_cmt_changed(self, *args) + | range_cmt_changed(self, kind, a, cmt, repeatable) + | + | renamed(self, *args) + | renamed(self, ea, new_name, local_name) + | + | renaming_enum(self, *args) + | renaming_enum(self, id, is_enum, newname) + | + | renaming_struc(self, *args) + | renaming_struc(self, id, oldname, newname) + | + | renaming_struc_member(self, *args) + | renaming_struc_member(self, sptr, mptr, newname) + | + | savebase(self, *args) + | savebase(self) + | + | segm_added(self, *args) + | segm_added(self, s) + | + | segm_attrs_updated(self, *args) + | segm_attrs_updated(self, s) + | + | segm_class_changed(self, *args) + | segm_class_changed(self, s, sclass) + | + | segm_deleted(self, *args) + | segm_deleted(self, start_ea, end_ea) + | + | segm_end_changed(self, *args) + | segm_end_changed(self, s, oldend) + | + | segm_moved(self, *args) + | segm_moved(self, _from, to, size, changed_netmap) + | + | segm_name_changed(self, *args) + | segm_name_changed(self, s, name) + | + | segm_start_changed(self, *args) + | segm_start_changed(self, s, oldstart) + | + | set_func_end(self, *args) + | set_func_end(self, pfn, new_end) + | + | set_func_start(self, *args) + | set_func_start(self, pfn, new_start) + | + | sgr_changed(self, *args) + | sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) + | + | sgr_deleted(self, *args) + | sgr_deleted(self, start_ea, end_ea, regnum) + | + | stkpnts_changed(self, *args) + | stkpnts_changed(self, pfn) + | + | struc_align_changed(self, *args) + | struc_align_changed(self, sptr) + | + | struc_cmt_changed(self, *args) + | struc_cmt_changed(self, struc_id, repeatable_cmt) + | + | struc_created(self, *args) + | struc_created(self, struc_id) + | + | struc_deleted(self, *args) + | struc_deleted(self, struc_id) + | + | struc_expanded(self, *args) + | struc_expanded(self, sptr) + | + | struc_member_changed(self, *args) + | struc_member_changed(self, sptr, mptr) + | + | struc_member_created(self, *args) + | struc_member_created(self, sptr, mptr) + | + | struc_member_deleted(self, *args) + | struc_member_deleted(self, sptr, member_id, offset) + | + | struc_member_renamed(self, *args) + | struc_member_renamed(self, sptr, mptr) + | + | struc_renamed(self, *args) + | struc_renamed(self, sptr) + | + | tail_owner_changed(self, *args) + | tail_owner_changed(self, tail, owner_func, old_owner) + | + | thunk_func_created(self, *args) + | thunk_func_created(self, pfn) + | + | ti_changed(self, *args) + | ti_changed(self, ea, type, fnames) + | + | tryblks_updated(self, *args) + | tryblks_updated(self, tbv) + | + | unhook(self, *args) + | unhook(self) -> bool + | + | updating_tryblks(self, *args) + | updating_tryblks(self, tbv) + | + | upgraded(self, *args) + | upgraded(self, _from) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_IDB_Hooks(self) + +Help on class IDP_Hooks in module ida_idp: + +class IDP_Hooks(__builtin__.object) + | Proxy of C++ IDP_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> IDP_Hooks + | + | __repr__ = _swig_repr(self) + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | ev_add_cref(self, *args) + | ev_add_cref(self, _from, to, type) -> int + | + | ev_add_dref(self, *args) + | ev_add_dref(self, _from, to, type) -> int + | + | ev_adjust_argloc(self, *args) + | ev_adjust_argloc(self, argloc, optional_type, size) -> int + | + | ev_adjust_libfunc_ea(self, *args) + | ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int + | + | ev_adjust_refinfo(self, *args) + | ev_adjust_refinfo(self, ri, ea, n, fd) -> int + | + | ev_ana_insn(self, *args) + | ev_ana_insn(self, out) -> bool + | + | + | Analyzes and decodes an instruction at insn.ea + | - insn.itype must be set >= idaapi.CUSTOM_CMD_ITYPE + | - insn.size must be set to the instruction length + | + | @return: Boolean + | - False if the instruction is not recognized + | - True if the instruction was decoded. 'insn' should be filled in that case. + | + | ev_analyze_prolog(self, *args) + | ev_analyze_prolog(self, ea) -> int + | + | ev_arg_addrs_ready(self, *args) + | ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int + | + | ev_assemble(self, *args) + | ev_assemble(self, ea, cs, ip, use32, line) -> PyObject * + | + | + | Assembles an instruction + | + | @param ea: linear address of instruction + | @param cs: cs of instruction + | @param ip: ip of instruction + | @param use32: is 32bit segment? + | @param line: line to assemble + | + | @return: - None to let the underlying processor module assemble the line + | - or a string containing the assembled buffer + | + | ev_auto_queue_empty(self, *args) + | ev_auto_queue_empty(self, type) + | + | ev_calc_arglocs(self, *args) + | ev_calc_arglocs(self, fti) -> int + | + | ev_calc_cdecl_purged_bytes(self, *args) + | ev_calc_cdecl_purged_bytes(self, ea) -> int + | + | ev_calc_next_eas(self, *args) + | ev_calc_next_eas(self, res, insn, over) -> int + | + | ev_calc_purged_bytes(self, *args) + | ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int + | + | ev_calc_retloc(self, *args) + | ev_calc_retloc(self, retloc, rettype, cc) -> int + | + | ev_calc_spdelta(self, *args) + | ev_calc_spdelta(self, spdelta, insn) -> int + | + | ev_calc_step_over(self, *args) + | ev_calc_step_over(self, target, ip) -> int + | + | ev_calc_switch_cases(self, *args) + | ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int + | + | ev_calc_varglocs(self, *args) + | ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int + | + | ev_calcrel(self, *args) + | ev_calcrel(self) -> int + | + | ev_can_have_type(self, *args) + | ev_can_have_type(self, op) -> int + | + | ev_clean_tbit(self, *args) + | ev_clean_tbit(self, ea, getreg, regvalues) -> int + | + | ev_cmp_operands(self, *args) + | ev_cmp_operands(self, op1, op2) -> int + | + | ev_coagulate(self, *args) + | ev_coagulate(self, start_ea) -> int + | + | ev_coagulate_dref(self, *args) + | ev_coagulate_dref(self, _from, to, may_define, code_ea) -> int + | + | ev_create_flat_group(self, *args) + | ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int + | + | ev_create_func_frame(self, *args) + | ev_create_func_frame(self, pfn) -> int + | + | ev_create_switch_xrefs(self, *args) + | ev_create_switch_xrefs(self, jumpea, si) -> int + | + | ev_creating_segm(self, *args) + | ev_creating_segm(self, seg) -> int + | + | ev_decorate_name(self, *args) + | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * + | + | ev_del_cref(self, *args) + | ev_del_cref(self, _from, to, expand) -> int + | + | ev_del_dref(self, *args) + | ev_del_dref(self, _from, to) -> int + | + | ev_delay_slot_insn(self, *args) + | ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * + | + | ev_demangle_name(self, *args) + | ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * + | + | ev_emu_insn(self, *args) + | ev_emu_insn(self, insn) -> bool + | + | + | Emulate instruction, create cross-references, plan to analyze + | subsequent instructions, modify flags etc. Upon entrance to this function + | all information about the instruction is in 'insn' structure. + | + | @return: Boolean (whether this instruction has been emulated or not) + | + | ev_endbinary(self, *args) + | ev_endbinary(self, ok) -> int + | + | ev_ending_undo(self, *args) + | ev_ending_undo(self, action_name, is_undo) -> int + | + | ev_equal_reglocs(self, *args) + | ev_equal_reglocs(self, a1, a2) -> int + | + | ev_extract_address(self, *args) + | ev_extract_address(self, out_ea, screen_ea, string, position) -> int + | + | ev_find_op_value(self, *args) + | ev_find_op_value(self, pinsn, opn) -> PyObject * + | + | ev_find_reg_value(self, *args) + | ev_find_reg_value(self, pinsn, reg) -> PyObject * + | + | ev_func_bounds(self, *args) + | ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea) + | + | ev_gen_asm_or_lst(self, *args) + | ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) + | + | ev_gen_map_file(self, *args) + | ev_gen_map_file(self, nlines, fp) -> int + | + | ev_gen_regvar_def(self, *args) + | ev_gen_regvar_def(self, outctx, v) -> int + | + | ev_gen_src_file_lnnum(self, *args) + | ev_gen_src_file_lnnum(self, outctx, file, lnnum) -> int + | + | ev_gen_stkvar_def(self, *args) + | ev_gen_stkvar_def(self, outctx, mptr, v) -> int + | + | ev_get_abi_info(self, *args) + | ev_get_abi_info(self, abi_names, abi_opts, comp) -> int + | + | ev_get_autocmt(self, *args) + | ev_get_autocmt(self, insn) -> PyObject * + | + | ev_get_bg_color(self, *args) + | ev_get_bg_color(self, ea) -> int or None + | + | ev_get_cc_regs(self, *args) + | ev_get_cc_regs(self, regs, cc) -> int + | + | ev_get_code16_mode(self, *args) + | ev_get_code16_mode(self, ea) -> int + | + | ev_get_dbr_opnum(self, *args) + | ev_get_dbr_opnum(self, opnum, insn) -> int + | + | ev_get_default_enum_size(self, *args) + | ev_get_default_enum_size(self, cm) -> int + | + | ev_get_frame_retsize(self, *args) + | ev_get_frame_retsize(self, frsize, pfn) -> int + | + | ev_get_macro_insn_head(self, *args) + | ev_get_macro_insn_head(self, head, ip) -> int + | + | ev_get_operand_string(self, *args) + | ev_get_operand_string(self, insn, opnum) -> PyObject * + | + | ev_get_reg_info(self, *args) + | ev_get_reg_info(self, main_regname, bitrange, regname) -> int + | + | ev_get_reg_name(self, *args) + | ev_get_reg_name(self, reg, width, reghi) -> PyObject * + | + | ev_get_simd_types(self, *args) + | ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int + | + | ev_get_stkarg_offset(self, *args) + | ev_get_stkarg_offset(self) -> int + | + | ev_get_stkvar_scale_factor(self, *args) + | ev_get_stkvar_scale_factor(self) -> int + | + | ev_getreg(self, *args) + | ev_getreg(self, regval, regnum) -> int + | + | ev_init(self, *args) + | ev_init(self, idp_modname) -> int + | + | ev_insn_reads_tbit(self, *args) + | ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int + | + | ev_is_align_insn(self, *args) + | ev_is_align_insn(self, ea) -> int + | + | ev_is_alloca_probe(self, *args) + | ev_is_alloca_probe(self, ea) -> int + | + | ev_is_basic_block_end(self, *args) + | ev_is_basic_block_end(self, insn, call_insn_stops_block) -> int + | + | ev_is_call_insn(self, *args) + | ev_is_call_insn(self, insn) -> int + | + | + | Is the instruction a "call"? + | + | @param insn: instruction + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_cond_insn(self, *args) + | ev_is_cond_insn(self, insn) -> int + | + | ev_is_far_jump(self, *args) + | ev_is_far_jump(self, icode) -> int + | + | ev_is_indirect_jump(self, *args) + | ev_is_indirect_jump(self, insn) -> int + | + | ev_is_insn_table_jump(self, *args) + | ev_is_insn_table_jump(self, insn) -> int + | + | ev_is_jump_func(self, *args) + | ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int + | + | ev_is_ret_insn(self, *args) + | ev_is_ret_insn(self, insn, strict) -> int + | + | + | Is the instruction a "return"? + | + | @param insn: instruction + | @param strict: - True: report only ret instructions + | False: include instructions like "leave" which begins the function epilog + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_sane_insn(self, *args) + | ev_is_sane_insn(self, insn, no_crefs) -> int + | + | + | is the instruction sane for the current file type? + | @param insn: the instruction + | @param no_crefs: + | - 1: the instruction has no code refs to it. + | ida just tries to convert unexplored bytes + | to an instruction (but there is no other + | reason to convert them into an instruction) + | - 0: the instruction is created because + | of some coderef, user request or another + | weighty reason. + | @return: >=0-ok, <0-no, the instruction isn't likely to appear in the program + | + | ev_is_sp_based(self, *args) + | ev_is_sp_based(self, mode, insn, op) -> int + | + | ev_is_switch(self, *args) + | ev_is_switch(self, si, insn) -> int + | + | ev_last_cb_before_loader(self, *args) + | ev_last_cb_before_loader(self) -> int + | + | ev_loader(self, *args) + | ev_loader(self) -> int + | + | ev_lower_func_type(self, *args) + | ev_lower_func_type(self, argnums, fti) -> int + | + | ev_max_ptr_size(self, *args) + | ev_max_ptr_size(self) -> int + | + | ev_may_be_func(self, *args) + | ev_may_be_func(self, insn, state) -> int + | + | + | Can a function start here? + | @param insn: the instruction + | @param state: autoanalysis phase + | 0: creating functions + | 1: creating chunks + | + | @return: integer (probability 0..100) + | + | ev_may_show_sreg(self, *args) + | ev_may_show_sreg(self, current_ea) -> int + | + | ev_moving_segm(self, *args) + | ev_moving_segm(self, seg, to, flags) -> int + | + | ev_newasm(self, *args) + | ev_newasm(self, asmnum) -> int + | + | ev_newbinary(self, *args) + | ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes) -> int + | + | ev_newfile(self, *args) + | ev_newfile(self, fname) -> int + | + | ev_newprc(self, *args) + | ev_newprc(self, pnum, keep_cfg) -> int + | + | ev_next_exec_insn(self, *args) + | ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int + | + | ev_oldfile(self, *args) + | ev_oldfile(self, fname) -> int + | + | ev_out_assumes(self, *args) + | ev_out_assumes(self, outctx) -> int + | + | ev_out_data(self, *args) + | ev_out_data(self, outctx, analyze_only) -> int + | + | ev_out_footer(self, *args) + | ev_out_footer(self, outctx) + | + | ev_out_header(self, *args) + | ev_out_header(self, outctx) + | + | ev_out_insn(self, *args) + | ev_out_insn(self, outctx) -> bool + | + | + | Outputs the instruction defined in 'ctx.insn' + | + | @return: Boolean (whether this instruction can be outputted or not) + | + | ev_out_label(self, *args) + | ev_out_label(self, outctx, colored_name) -> int + | + | ev_out_mnem(self, *args) + | ev_out_mnem(self, outctx) -> int + | + | ev_out_operand(self, *args) + | ev_out_operand(self, outctx, op) -> bool + | + | + | Notification to generate operand text. + | If False was returned, then the standard operand output function will be called. + | + | this notification may use out_...() functions to form the operand text + | + | @return: Boolean (whether the operand has been outputted or not) + | + | ev_out_segend(self, *args) + | ev_out_segend(self, outctx, seg) -> int + | + | ev_out_segstart(self, *args) + | ev_out_segstart(self, outctx, seg) -> int + | + | ev_out_special_item(self, *args) + | ev_out_special_item(self, outctx, segtype) -> int + | + | ev_realcvt(self, *args) + | ev_realcvt(self, m, e, swt) -> int + | + | ev_rename(self, *args) + | ev_rename(self, ea, new_name) -> int + | + | + | The kernel is going to rename a byte. + | + | @param ea: Address + | @param new_name: The new name + | + | @return: + | - If returns value <0, then the kernel should + | not rename it. See also the 'renamed' event + | + | ev_replaying_undo(self, *args) + | ev_replaying_undo(self, action_name, vec, is_undo) -> int + | + | ev_set_code16_mode(self, *args) + | ev_set_code16_mode(self, ea, code16) -> int + | + | ev_set_idp_options(self, *args) + | ev_set_idp_options(self, keyword, value_type, value, errbuf, idb_loaded) -> int + | + | ev_set_proc_options(self, *args) + | ev_set_proc_options(self, options, confidence) -> int + | + | ev_setup_til(self, *args) + | ev_setup_til(self) + | + | ev_shadow_args_size(self, *args) + | ev_shadow_args_size(self, shadow_args_size, pfn) -> int + | + | ev_str2reg(self, *args) + | ev_str2reg(self, regname) -> int + | + | ev_term(self, *args) + | ev_term(self) -> int + | + | ev_treat_hindering_item(self, *args) + | ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> int + | + | ev_undefine(self, *args) + | ev_undefine(self, ea) -> int + | + | + | An item in the database (insn or data) is being deleted + | @param ea: Address + | @return: + | - 1 - do not delete srranges at the item end + | - 0 - srranges can be deleted + | + | ev_use_arg_types(self, *args) + | ev_use_arg_types(self, ea, fti, rargs) -> int + | + | ev_use_regarg_type(self, *args) + | ev_use_regarg_type(self, ea, rargs) -> PyObject * + | + | ev_use_stkarg_type(self, *args) + | ev_use_stkarg_type(self, ea, arg) -> int + | + | ev_validate_flirt_func(self, *args) + | ev_validate_flirt_func(self, start_ea, funcname) -> int + | + | ev_verify_noreturn(self, *args) + | ev_verify_noreturn(self, pfn) -> int + | + | ev_verify_sp(self, *args) + | ev_verify_sp(self, pfn) -> int + | + | hook(self, *args) + | hook(self) -> bool + | + | + | Creates an IDP hook + | + | @return: Boolean true on success + | + | unhook(self, *args) + | unhook(self) -> bool + | + | + | Removes the IDP hook + | @return: Boolean true on success + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_IDP_Hooks(self) + +Help on class __ph in module ida_idp: + +class __ph(__builtin__.object) + | # ---------------------------------------------------------------------- + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cnbits + | + | dnbits + | + | flag + | + | icode_return + | + | id + | + | instruc + | + | instruc_end + | + | instruc_start + | + | reg_code_sreg + | + | reg_data_sreg + | + | reg_first_sreg + | + | reg_last_sreg + | + | regnames + | + | segreg_size + | + | tbyte_size + | + | version + +Help on class _notify_when_dispatcher_t in module ida_idp: + +class _notify_when_dispatcher_t + | Methods defined here: + | + | __init__(self) + | + | _find(self, fun) + | + | dispatch(self, slot, *args) + | + | notify_when(self, when, fun) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _IDB_Hooks = + | + | + | _IDP_Hooks = + | + | + | _callback_t = + +Help on class _processor_t_Trampoline_IDB_Hooks in module ida_idp: + +class _processor_t_Trampoline_IDB_Hooks(IDB_Hooks) + | Method resolution order: + | _processor_t_Trampoline_IDB_Hooks + | IDB_Hooks + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, proc) + | + | _processor_t_Trampoline_IDB_Hooks__dummy = __dummy(self, *args) + | + | _processor_t_Trampoline_IDB_Hooks__make_parent_caller = __make_parent_caller(self, key) + | + | ---------------------------------------------------------------------- + | Methods inherited from IDB_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | allsegs_moved(self, *args) + | allsegs_moved(self, info) + | + | auto_empty(self, *args) + | auto_empty(self) + | + | auto_empty_finally(self, *args) + | auto_empty_finally(self) + | + | bookmark_changed(self, *args) + | bookmark_changed(self, index, pos, desc) + | + | byte_patched(self, *args) + | byte_patched(self, ea, old_value) + | + | callee_addr_changed(self, *args) + | callee_addr_changed(self, ea, callee) + | + | changing_cmt(self, *args) + | changing_cmt(self, ea, repeatable_cmt, newcmt) + | + | changing_enum_bf(self, *args) + | changing_enum_bf(self, id, new_bf) + | + | changing_enum_cmt(self, *args) + | changing_enum_cmt(self, id, repeatable, newcmt) + | + | changing_op_ti(self, *args) + | changing_op_ti(self, ea, n, new_type, new_fnames) + | + | changing_op_type(self, *args) + | changing_op_type(self, ea, n, opinfo) + | + | changing_range_cmt(self, *args) + | changing_range_cmt(self, kind, a, cmt, repeatable) + | + | changing_segm_class(self, *args) + | changing_segm_class(self, s) + | + | changing_segm_end(self, *args) + | changing_segm_end(self, s, new_end, segmod_flags) + | + | changing_segm_name(self, *args) + | changing_segm_name(self, s, oldname) + | + | changing_segm_start(self, *args) + | changing_segm_start(self, s, new_start, segmod_flags) + | + | changing_struc_align(self, *args) + | changing_struc_align(self, sptr) + | + | changing_struc_cmt(self, *args) + | changing_struc_cmt(self, struc_id, repeatable, newcmt) + | + | changing_struc_member(self, *args) + | changing_struc_member(self, sptr, mptr, flag, ti, nbytes) + | + | changing_ti(self, *args) + | changing_ti(self, ea, new_type, new_fnames) + | + | closebase(self, *args) + | closebase(self) + | + | cmt_changed(self, *args) + | cmt_changed(self, ea, repeatable_cmt) + | + | compiler_changed(self, *args) + | compiler_changed(self) + | + | deleting_enum(self, *args) + | deleting_enum(self, id) + | + | deleting_enum_member(self, *args) + | deleting_enum_member(self, id, cid) + | + | deleting_func(self, *args) + | deleting_func(self, pfn) + | + | deleting_func_tail(self, *args) + | deleting_func_tail(self, pfn, tail) + | + | deleting_segm(self, *args) + | deleting_segm(self, start_ea) + | + | deleting_struc(self, *args) + | deleting_struc(self, sptr) + | + | deleting_struc_member(self, *args) + | deleting_struc_member(self, sptr, mptr) + | + | deleting_tryblks(self, *args) + | deleting_tryblks(self, range) + | + | destroyed_items(self, *args) + | destroyed_items(self, ea1, ea2, will_disable_range) + | + | determined_main(self, *args) + | determined_main(self, main) + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | enum_bf_changed(self, *args) + | enum_bf_changed(self, id) + | + | enum_cmt_changed(self, *args) + | enum_cmt_changed(self, id, repeatable) + | + | enum_created(self, *args) + | enum_created(self, id) + | + | enum_deleted(self, *args) + | enum_deleted(self, id) + | + | enum_member_created(self, *args) + | enum_member_created(self, id, cid) + | + | enum_member_deleted(self, *args) + | enum_member_deleted(self, id, cid) + | + | enum_renamed(self, *args) + | enum_renamed(self, id) + | + | expanding_struc(self, *args) + | expanding_struc(self, sptr, offset, delta) + | + | extlang_changed(self, *args) + | extlang_changed(self, kind, el, idx) + | + | extra_cmt_changed(self, *args) + | extra_cmt_changed(self, ea, line_idx, cmt) + | + | flow_chart_created(self, *args) + | flow_chart_created(self, fc) + | + | frame_deleted(self, *args) + | frame_deleted(self, pfn) + | + | func_added(self, *args) + | func_added(self, pfn) + | + | func_noret_changed(self, *args) + | func_noret_changed(self, pfn) + | + | func_tail_appended(self, *args) + | func_tail_appended(self, pfn, tail) + | + | func_tail_deleted(self, *args) + | func_tail_deleted(self, pfn, tail_ea) + | + | func_updated(self, *args) + | func_updated(self, pfn) + | + | hook(self, *args) + | hook(self) -> bool + | + | idasgn_loaded(self, *args) + | idasgn_loaded(self, short_sig_name) + | + | item_color_changed(self, *args) + | item_color_changed(self, ea, color) + | + | kernel_config_loaded(self, *args) + | kernel_config_loaded(self) + | + | loader_finished(self, *args) + | loader_finished(self, li, neflags, filetypename) + | + | local_types_changed(self, *args) + | local_types_changed(self) + | + | make_code(self, *args) + | make_code(self, insn) + | + | make_data(self, *args) + | make_data(self, ea, flags, tid, len) + | + | op_ti_changed(self, *args) + | op_ti_changed(self, ea, n, type, fnames) + | + | op_type_changed(self, *args) + | op_type_changed(self, ea, n) + | + | range_cmt_changed(self, *args) + | range_cmt_changed(self, kind, a, cmt, repeatable) + | + | renamed(self, *args) + | renamed(self, ea, new_name, local_name) + | + | renaming_enum(self, *args) + | renaming_enum(self, id, is_enum, newname) + | + | renaming_struc(self, *args) + | renaming_struc(self, id, oldname, newname) + | + | renaming_struc_member(self, *args) + | renaming_struc_member(self, sptr, mptr, newname) + | + | savebase(self, *args) + | savebase(self) + | + | segm_added(self, *args) + | segm_added(self, s) + | + | segm_attrs_updated(self, *args) + | segm_attrs_updated(self, s) + | + | segm_class_changed(self, *args) + | segm_class_changed(self, s, sclass) + | + | segm_deleted(self, *args) + | segm_deleted(self, start_ea, end_ea) + | + | segm_end_changed(self, *args) + | segm_end_changed(self, s, oldend) + | + | segm_moved(self, *args) + | segm_moved(self, _from, to, size, changed_netmap) + | + | segm_name_changed(self, *args) + | segm_name_changed(self, s, name) + | + | segm_start_changed(self, *args) + | segm_start_changed(self, s, oldstart) + | + | set_func_end(self, *args) + | set_func_end(self, pfn, new_end) + | + | set_func_start(self, *args) + | set_func_start(self, pfn, new_start) + | + | sgr_changed(self, *args) + | sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) + | + | sgr_deleted(self, *args) + | sgr_deleted(self, start_ea, end_ea, regnum) + | + | stkpnts_changed(self, *args) + | stkpnts_changed(self, pfn) + | + | struc_align_changed(self, *args) + | struc_align_changed(self, sptr) + | + | struc_cmt_changed(self, *args) + | struc_cmt_changed(self, struc_id, repeatable_cmt) + | + | struc_created(self, *args) + | struc_created(self, struc_id) + | + | struc_deleted(self, *args) + | struc_deleted(self, struc_id) + | + | struc_expanded(self, *args) + | struc_expanded(self, sptr) + | + | struc_member_changed(self, *args) + | struc_member_changed(self, sptr, mptr) + | + | struc_member_created(self, *args) + | struc_member_created(self, sptr, mptr) + | + | struc_member_deleted(self, *args) + | struc_member_deleted(self, sptr, member_id, offset) + | + | struc_member_renamed(self, *args) + | struc_member_renamed(self, sptr, mptr) + | + | struc_renamed(self, *args) + | struc_renamed(self, sptr) + | + | tail_owner_changed(self, *args) + | tail_owner_changed(self, tail, owner_func, old_owner) + | + | thunk_func_created(self, *args) + | thunk_func_created(self, pfn) + | + | ti_changed(self, *args) + | ti_changed(self, ea, type, fnames) + | + | tryblks_updated(self, *args) + | tryblks_updated(self, tbv) + | + | unhook(self, *args) + | unhook(self) -> bool + | + | updating_tryblks(self, *args) + | updating_tryblks(self, tbv) + | + | upgraded(self, *args) + | upgraded(self, _from) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from IDB_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from IDB_Hooks: + | + | __swig_destroy__ = + | delete_IDB_Hooks(self) + +Help on class asm_t in module ida_idp: + +class asm_t(__builtin__.object) + | Proxy of C++ asm_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> asm_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a_align + | asm_t_a_align_get(self) -> char const * + | + | a_ascii + | asm_t_a_ascii_get(self) -> char const * + | + | a_band + | asm_t_a_band_get(self) -> char const * + | + | a_bnot + | asm_t_a_bnot_get(self) -> char const * + | + | a_bor + | asm_t_a_bor_get(self) -> char const * + | + | a_bss + | asm_t_a_bss_get(self) -> char const * + | + | a_byte + | asm_t_a_byte_get(self) -> char const * + | + | a_comdef + | asm_t_a_comdef_get(self) -> char const * + | + | a_curip + | asm_t_a_curip_get(self) -> char const * + | + | a_double + | asm_t_a_double_get(self) -> char const * + | + | a_dups + | asm_t_a_dups_get(self) -> char const * + | + | a_dword + | asm_t_a_dword_get(self) -> char const * + | + | a_equ + | asm_t_a_equ_get(self) -> char const * + | + | a_extrn + | asm_t_a_extrn_get(self) -> char const * + | + | a_float + | asm_t_a_float_get(self) -> char const * + | + | a_include_fmt + | asm_t_a_include_fmt_get(self) -> char const * + | + | a_mod + | asm_t_a_mod_get(self) -> char const * + | + | a_oword + | asm_t_a_oword_get(self) -> char const * + | + | a_packreal + | asm_t_a_packreal_get(self) -> char const * + | + | a_public + | asm_t_a_public_get(self) -> char const * + | + | a_qword + | asm_t_a_qword_get(self) -> char const * + | + | a_rva + | asm_t_a_rva_get(self) -> char const * + | + | a_seg + | asm_t_a_seg_get(self) -> char const * + | + | a_shl + | asm_t_a_shl_get(self) -> char const * + | + | a_shr + | asm_t_a_shr_get(self) -> char const * + | + | a_sizeof_fmt + | asm_t_a_sizeof_fmt_get(self) -> char const * + | + | a_tbyte + | asm_t_a_tbyte_get(self) -> char const * + | + | a_vstruc_fmt + | asm_t_a_vstruc_fmt_get(self) -> char const * + | + | a_weak + | asm_t_a_weak_get(self) -> char const * + | + | a_word + | asm_t_a_word_get(self) -> char const * + | + | a_xor + | asm_t_a_xor_get(self) -> char const * + | + | a_yword + | asm_t_a_yword_get(self) -> char const * + | + | accsep + | asm_t_accsep_get(self) -> char + | + | ascsep + | asm_t_ascsep_get(self) -> char + | + | cmnt + | asm_t_cmnt_get(self) -> char const * + | + | cmnt2 + | asm_t_cmnt2_get(self) -> char const * + | + | end + | asm_t_end_get(self) -> char const * + | + | esccodes + | asm_t_esccodes_get(self) -> char const * + | + | flag + | asm_t_flag_get(self) -> uint32 + | + | flag2 + | asm_t_flag2_get(self) -> uint32 + | + | header + | asm_t_header_get(self) -> char const *const * + | + | help + | asm_t_help_get(self) -> help_t + | + | high16 + | asm_t_high16_get(self) -> char const * + | + | high8 + | asm_t_high8_get(self) -> char const * + | + | lbrace + | asm_t_lbrace_get(self) -> char + | + | low16 + | asm_t_low16_get(self) -> char const * + | + | low8 + | asm_t_low8_get(self) -> char const * + | + | name + | asm_t_name_get(self) -> char const * + | + | origin + | asm_t_origin_get(self) -> char const * + | + | rbrace + | asm_t_rbrace_get(self) -> char + | + | thisown + | The membership flag + | + | uflag + | asm_t_uflag_get(self) -> uint16 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_asm_t(self) + +Help on function assemble in module ida_idp: + +assemble(*args) + assemble(ea, cs, ip, use32, line) -> bool + + + Assemble an instruction into the database (display a warning if an error is found) + @param ea: linear address of instruction + @param cs: cs of instruction + @param ip: ip of instruction + @param use32: is 32bit segment? + @param line: line to assemble + + @return: Boolean. True on success. + +Help on function cfg_get_cc_header_path in module ida_idp: + +cfg_get_cc_header_path(*args) + cfg_get_cc_header_path(compid) -> char const * + +Help on function cfg_get_cc_parm in module ida_idp: + +cfg_get_cc_parm(*args) + cfg_get_cc_parm(compid, name) -> char const * + +Help on function cfg_get_cc_predefined_macros in module ida_idp: + +cfg_get_cc_predefined_macros(*args) + cfg_get_cc_predefined_macros(compid) -> char const * + +Help on function delay_slot_insn in module ida_idp: + +delay_slot_insn(*args) + delay_slot_insn(ea, bexec, fexec) -> bool + + + Helper function to get the delay slot instruction. + + + @param ea (C++: ea_t *) + @param bexec (C++: bool *) + @param fexec (C++: bool *) + +Help on function gen_idb_event in module ida_idp: + +gen_idb_event(*args) + gen_idb_event(code) + + + the kernel will use this function to generate idb_events + + + @param code (C++: idb_event::event_code_t) + +Help on function get_idb_notifier_addr in module ida_idp: + +get_idb_notifier_addr(*args) + get_idb_notifier_addr(arg1) -> PyObject * + +Help on function get_idb_notifier_ud_addr in module ida_idp: + +get_idb_notifier_ud_addr(*args) + get_idb_notifier_ud_addr(hooks) -> PyObject * + +Help on function get_idp_name in module ida_idp: + +get_idp_name(*args) + get_idp_name() -> str + + + Get name of the current processor module. The name is derived from the + file name. For example, for IBM PC the module is named "pc.w32" + (windows version), then the module name is "PC" (uppercase). If no + processor module is loaded, this function will return NULL + +Help on function get_idp_notifier_addr in module ida_idp: + +get_idp_notifier_addr(*args) + get_idp_notifier_addr(arg1) -> PyObject * + +Help on function get_idp_notifier_ud_addr in module ida_idp: + +get_idp_notifier_ud_addr(*args) + get_idp_notifier_ud_addr(hooks) -> PyObject * + +Help on function get_reg_info in module ida_idp: + +get_reg_info(*args) + get_reg_info(regname, bitrange) -> char const * + + + Get register information - useful for registers like al, ah, dil, etc. + + @param regname (C++: const char *) + @param bitrange (C++: bitrange_t *) + @return: NULL no such register + +Help on function get_reg_name in module ida_idp: + +get_reg_name(*args) + get_reg_name(reg, width, reghi=-1) -> str + + + Get text representation of a register. For most processors this + function will just return \ph{reg_names}[reg]. If the processor module + has implemented processor_t::get_reg_name, it will be used instead + + @param reg: internal register number as defined in the processor + module (C++: int) + @param width: register width in bytes (C++: size_t) + @param reghi: if specified, then this function will return the + register pair (C++: int) + @return: length of register name in bytes or -1 if failure + +Help on function has_cf_chg in module ida_idp: + +has_cf_chg(*args) + has_cf_chg(feature, opnum) -> bool + + + Does an instruction with the specified feature modify the i-th + operand? + + + @param feature (C++: uint32) + @param opnum (C++: uint) + +Help on function has_cf_use in module ida_idp: + +has_cf_use(*args) + has_cf_use(feature, opnum) -> bool + + + Does an instruction with the specified feature use a value of the i-th + operand? + + + @param feature (C++: uint32) + @param opnum (C++: uint) + +Help on function has_insn_feature in module ida_idp: + +has_insn_feature(*args) + has_insn_feature(icode, bit) -> bool + + + Does the specified instruction have the specified feature? + + + @param icode (C++: int) + @param bit (C++: uint32) + +Help on function is_align_insn in module ida_idp: + +is_align_insn(*args) + is_align_insn(ea) -> int + + + If the instruction at 'ea' looks like an alignment instruction, return + its length in bytes. Otherwise return 0. + + @param ea (C++: ea_t) + +Help on function is_basic_block_end in module ida_idp: + +is_basic_block_end(*args) + is_basic_block_end(insn, call_insn_stops_block) -> bool + + + Is the instruction the end of a basic block? + + + @param insn (C++: const insn_t &) + @param call_insn_stops_block (C++: bool) + +Help on function is_call_insn in module ida_idp: + +is_call_insn(*args) + is_call_insn(insn) -> bool + + + Is the instruction a "call"? + + + @param insn (C++: const insn_t &) + +Help on function is_indirect_jump_insn in module ida_idp: + +is_indirect_jump_insn(*args) + is_indirect_jump_insn(insn) -> bool + + + Is the instruction an indirect jump? + + + @param insn (C++: const insn_t &) + +Help on function is_ret_insn in module ida_idp: + +is_ret_insn(*args) + is_ret_insn(insn, strict=True) -> bool + + + Is the instruction a "return"? + + + @param insn (C++: const insn_t &) + @param strict (C++: bool) + +Help on function parse_reg_name in module ida_idp: + +parse_reg_name(*args) + parse_reg_name(ri, regname) -> bool + + + Get register info by name. + + @param ri: result (C++: reg_info_t *) + @param regname: name of register (C++: const char *) + @return: success + +Help on __ph in module ida_idp object: + +class __ph(__builtin__.object) + | # ---------------------------------------------------------------------- + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cnbits + | + | dnbits + | + | flag + | + | icode_return + | + | id + | + | instruc + | + | instruc_end + | + | instruc_start + | + | reg_code_sreg + | + | reg_data_sreg + | + | reg_first_sreg + | + | reg_last_sreg + | + | regnames + | + | segreg_size + | + | tbyte_size + | + | version + +Help on function ph_calcrel in module ida_idp: + +ph_calcrel(*args) + ph_calcrel(ea) + +Help on function ph_find_op_value in module ida_idp: + +ph_find_op_value(*args) + ph_find_op_value(insn, op) -> ssize_t + +Help on function ph_find_reg_value in module ida_idp: + +ph_find_reg_value(*args) + ph_find_reg_value(insn, reg) -> ssize_t + +Help on function ph_get_cnbits in module ida_idp: + +ph_get_cnbits(*args) + ph_get_cnbits() -> size_t + + + Returns the 'ph.cnbits' + +Help on function ph_get_dnbits in module ida_idp: + +ph_get_dnbits(*args) + ph_get_dnbits() -> size_t + + + Returns the 'ph.dnbits' + +Help on function ph_get_flag in module ida_idp: + +ph_get_flag(*args) + ph_get_flag() -> size_t + + + Returns the 'ph.flag' + +Help on function ph_get_icode_return in module ida_idp: + +ph_get_icode_return(*args) + ph_get_icode_return() -> size_t + + + Returns the 'ph.icode_return' + +Help on function ph_get_id in module ida_idp: + +ph_get_id(*args) + ph_get_id() -> size_t + + + Returns the 'ph.id' field + +Help on function ph_get_instruc in module ida_idp: + +ph_get_instruc(*args) + ph_get_instruc() -> PyObject * + + + Returns a list of tuples (instruction_name, instruction_feature) containing the + instructions list as defined in he processor module + +Help on function ph_get_instruc_end in module ida_idp: + +ph_get_instruc_end(*args) + ph_get_instruc_end() -> size_t + + + Returns the 'ph.instruc_end' + +Help on function ph_get_instruc_start in module ida_idp: + +ph_get_instruc_start(*args) + ph_get_instruc_start() -> size_t + + + Returns the 'ph.instruc_start' + +Help on function ph_get_operand_info in module ida_idp: + +ph_get_operand_info(*args) + ph_get_operand_info(ea, n) -> PyObject * + + + Returns the operand information given an ea and operand number. + + @param ea: address + @param n: operand number + + @return: Returns an idd_opinfo_t as a tuple: (modified, ea, reg_ival, regidx, value_size). + Please refer to idd_opinfo_t structure in the SDK. + +Help on function ph_get_reg_code_sreg in module ida_idp: + +ph_get_reg_code_sreg(*args) + ph_get_reg_code_sreg() -> size_t + + + Returns the 'ph.reg_code_sreg' + +Help on function ph_get_reg_data_sreg in module ida_idp: + +ph_get_reg_data_sreg(*args) + ph_get_reg_data_sreg() -> size_t + + + Returns the 'ph.reg_data_sreg' + +Help on function ph_get_reg_first_sreg in module ida_idp: + +ph_get_reg_first_sreg(*args) + ph_get_reg_first_sreg() -> size_t + + + Returns the 'ph.reg_first_sreg' + +Help on function ph_get_reg_last_sreg in module ida_idp: + +ph_get_reg_last_sreg(*args) + ph_get_reg_last_sreg() -> size_t + + + Returns the 'ph.reg_last_sreg' + +Help on function ph_get_regnames in module ida_idp: + +ph_get_regnames(*args) + ph_get_regnames() -> PyObject * + + + Returns the list of register names as defined in the processor module + +Help on function ph_get_segreg_size in module ida_idp: + +ph_get_segreg_size(*args) + ph_get_segreg_size() -> size_t + + + Returns the 'ph.segreg_size' + +Help on function ph_get_tbyte_size in module ida_idp: + +ph_get_tbyte_size(*args) + ph_get_tbyte_size() -> size_t + + + Returns the 'ph.tbyte_size' field as defined in he processor module + +Help on function ph_get_version in module ida_idp: + +ph_get_version(*args) + ph_get_version() -> size_t + + + Returns the 'ph.version' + +Help on class processor_t in module ida_idp: + +class processor_t(IDP_Hooks) + | Method resolution order: + | processor_t + | IDP_Hooks + | __builtin__.object + | + | Methods defined here: + | + | __init__(self) + | + | _get_idb_notifier_addr(self) + | + | _get_idb_notifier_ud_addr(self) + | + | _get_idp_notifier_addr(self) + | + | _get_idp_notifier_ud_addr(self) + | + | _get_notify(self, what, unimp_val=0, imp_forced_val=None, add_prefix=True, mandatory_impl=None) + | This helper is used to implement backward-compatibility + | of pre IDA 7.3 processor_t interfaces. + | + | _make_forced_value_wrapper(self, val, meth=None) + | + | _make_int_returning_wrapper(self, meth, intval=0) + | + | auto_empty(self, *args) + | + | auto_empty_finally(self, *args) + | + | closebase(self, *args) + | + | compiler_changed(self, *args) + | + | deleting_func(self, pfn) + | + | determined_main(self, *args) + | + | ev_ana_insn(self, *args) + | + | ev_assemble(self, *args) + | + | ev_auto_queue_empty(self, *args) + | + | ev_calc_step_over(self, target, ip) + | + | ev_can_have_type(self, *args) + | + | ev_cmp_operands(self, *args) + | + | ev_coagulate(self, *args) + | + | ev_coagulate_dref(self, from_ea, to_ea, may_define, _code_ea) + | + | ev_create_func_frame(self, pfn) + | + | ev_create_switch_xrefs(self, *args) + | + | ev_creating_segm(self, s) + | + | ev_emu_insn(self, *args) + | + | ev_endbinary(self, *args) + | + | ev_func_bounds(self, _possible_return_code, pfn, max_func_end_ea) + | + | ev_gen_map_file(self, nlines, fp) + | + | ev_gen_regvar_def(self, ctx, v) + | + | ev_gen_src_file_lnnum(self, *args) + | + | ev_get_autocmt(self, *args) + | + | ev_get_frame_retsize(self, frsize, pfn) + | + | ev_get_operand_string(self, buf, insn, opnum) + | + | ev_is_align_insn(self, *args) + | + | ev_is_alloca_probe(self, *args) + | + | ev_is_basic_block_end(self, *args) + | + | ev_is_call_insn(self, *args) + | + | ev_is_far_jump(self, *args) + | + | ev_is_indirect_jump(self, *args) + | + | ev_is_insn_table_jump(self, *args) + | + | ev_is_ret_insn(self, *args) + | + | ev_is_sane_insn(self, *args) + | + | ev_is_sp_based(self, mode, insn, op) + | + | ev_is_switch(self, *args) + | + | ev_may_be_func(self, *args) + | + | ev_may_show_sreg(self, *args) + | + | ev_moving_segm(self, s, to_ea, flags) + | + | ev_newbinary(self, *args) + | + | ev_newfile(self, *args) + | + | ev_newprc(self, *args) + | + | ev_oldfile(self, *args) + | + | ev_out_assumes(self, *args) + | + | ev_out_data(self, *args) + | + | ev_out_footer(self, *args) + | + | ev_out_header(self, *args) + | + | ev_out_insn(self, *args) + | + | ev_out_label(self, *args) + | + | ev_out_mnem(self, *args) + | + | ev_out_operand(self, *args) + | + | ev_out_segend(self, ctx, s) + | + | ev_out_segstart(self, ctx, s) + | + | ev_out_special_item(self, *args) + | + | ev_rename(self, *args) + | + | ev_set_idp_options(self, keyword, value_type, value) + | + | ev_set_proc_options(self, *args) + | + | ev_str2reg(self, *args) + | + | ev_treat_hindering_item(self, *args) + | + | ev_undefine(self, *args) + | + | ev_validate_flirt_func(self, *args) + | + | ev_verify_noreturn(self, pfn) + | + | ev_verify_sp(self, pfn) + | + | func_added(self, pfn) + | + | get_auxpref(self, insn) + | This function returns insn.auxpref value + | + | get_idpdesc(self) + | This function must be present and should return the list of + | short processor names similar to the one in ph.psnames. + | This method can be overridden to return to the kernel a different IDP description. + | + | get_uFlag(self) + | Use this utility function to retrieve the 'uFlag' global variable + | + | idasgn_loaded(self, *args) + | + | kernel_config_loaded(self, *args) + | + | make_code(self, *args) + | + | make_data(self, *args) + | + | renamed(self, *args) + | + | savebase(self, *args) + | + | segm_moved(self, from_ea, to_ea, size, changed_netmap) + | + | set_func_end(self, *args) + | + | set_func_start(self, *args) + | + | sgr_changed(self, *args) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __idc_cvt_id__ = 2 + | + | ---------------------------------------------------------------------- + | Methods inherited from IDP_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | ev_add_cref(self, *args) + | ev_add_cref(self, _from, to, type) -> int + | + | ev_add_dref(self, *args) + | ev_add_dref(self, _from, to, type) -> int + | + | ev_adjust_argloc(self, *args) + | ev_adjust_argloc(self, argloc, optional_type, size) -> int + | + | ev_adjust_libfunc_ea(self, *args) + | ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int + | + | ev_adjust_refinfo(self, *args) + | ev_adjust_refinfo(self, ri, ea, n, fd) -> int + | + | ev_analyze_prolog(self, *args) + | ev_analyze_prolog(self, ea) -> int + | + | ev_arg_addrs_ready(self, *args) + | ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int + | + | ev_calc_arglocs(self, *args) + | ev_calc_arglocs(self, fti) -> int + | + | ev_calc_cdecl_purged_bytes(self, *args) + | ev_calc_cdecl_purged_bytes(self, ea) -> int + | + | ev_calc_next_eas(self, *args) + | ev_calc_next_eas(self, res, insn, over) -> int + | + | ev_calc_purged_bytes(self, *args) + | ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int + | + | ev_calc_retloc(self, *args) + | ev_calc_retloc(self, retloc, rettype, cc) -> int + | + | ev_calc_spdelta(self, *args) + | ev_calc_spdelta(self, spdelta, insn) -> int + | + | ev_calc_switch_cases(self, *args) + | ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int + | + | ev_calc_varglocs(self, *args) + | ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int + | + | ev_calcrel(self, *args) + | ev_calcrel(self) -> int + | + | ev_clean_tbit(self, *args) + | ev_clean_tbit(self, ea, getreg, regvalues) -> int + | + | ev_create_flat_group(self, *args) + | ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int + | + | ev_decorate_name(self, *args) + | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * + | + | ev_del_cref(self, *args) + | ev_del_cref(self, _from, to, expand) -> int + | + | ev_del_dref(self, *args) + | ev_del_dref(self, _from, to) -> int + | + | ev_delay_slot_insn(self, *args) + | ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * + | + | ev_demangle_name(self, *args) + | ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * + | + | ev_ending_undo(self, *args) + | ev_ending_undo(self, action_name, is_undo) -> int + | + | ev_equal_reglocs(self, *args) + | ev_equal_reglocs(self, a1, a2) -> int + | + | ev_extract_address(self, *args) + | ev_extract_address(self, out_ea, screen_ea, string, position) -> int + | + | ev_find_op_value(self, *args) + | ev_find_op_value(self, pinsn, opn) -> PyObject * + | + | ev_find_reg_value(self, *args) + | ev_find_reg_value(self, pinsn, reg) -> PyObject * + | + | ev_gen_asm_or_lst(self, *args) + | ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) + | + | ev_gen_stkvar_def(self, *args) + | ev_gen_stkvar_def(self, outctx, mptr, v) -> int + | + | ev_get_abi_info(self, *args) + | ev_get_abi_info(self, abi_names, abi_opts, comp) -> int + | + | ev_get_bg_color(self, *args) + | ev_get_bg_color(self, ea) -> int or None + | + | ev_get_cc_regs(self, *args) + | ev_get_cc_regs(self, regs, cc) -> int + | + | ev_get_code16_mode(self, *args) + | ev_get_code16_mode(self, ea) -> int + | + | ev_get_dbr_opnum(self, *args) + | ev_get_dbr_opnum(self, opnum, insn) -> int + | + | ev_get_default_enum_size(self, *args) + | ev_get_default_enum_size(self, cm) -> int + | + | ev_get_macro_insn_head(self, *args) + | ev_get_macro_insn_head(self, head, ip) -> int + | + | ev_get_reg_info(self, *args) + | ev_get_reg_info(self, main_regname, bitrange, regname) -> int + | + | ev_get_reg_name(self, *args) + | ev_get_reg_name(self, reg, width, reghi) -> PyObject * + | + | ev_get_simd_types(self, *args) + | ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int + | + | ev_get_stkarg_offset(self, *args) + | ev_get_stkarg_offset(self) -> int + | + | ev_get_stkvar_scale_factor(self, *args) + | ev_get_stkvar_scale_factor(self) -> int + | + | ev_getreg(self, *args) + | ev_getreg(self, regval, regnum) -> int + | + | ev_init(self, *args) + | ev_init(self, idp_modname) -> int + | + | ev_insn_reads_tbit(self, *args) + | ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int + | + | ev_is_cond_insn(self, *args) + | ev_is_cond_insn(self, insn) -> int + | + | ev_is_jump_func(self, *args) + | ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int + | + | ev_last_cb_before_loader(self, *args) + | ev_last_cb_before_loader(self) -> int + | + | ev_loader(self, *args) + | ev_loader(self) -> int + | + | ev_lower_func_type(self, *args) + | ev_lower_func_type(self, argnums, fti) -> int + | + | ev_max_ptr_size(self, *args) + | ev_max_ptr_size(self) -> int + | + | ev_newasm(self, *args) + | ev_newasm(self, asmnum) -> int + | + | ev_next_exec_insn(self, *args) + | ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int + | + | ev_realcvt(self, *args) + | ev_realcvt(self, m, e, swt) -> int + | + | ev_replaying_undo(self, *args) + | ev_replaying_undo(self, action_name, vec, is_undo) -> int + | + | ev_set_code16_mode(self, *args) + | ev_set_code16_mode(self, ea, code16) -> int + | + | ev_setup_til(self, *args) + | ev_setup_til(self) + | + | ev_shadow_args_size(self, *args) + | ev_shadow_args_size(self, shadow_args_size, pfn) -> int + | + | ev_term(self, *args) + | ev_term(self) -> int + | + | ev_use_arg_types(self, *args) + | ev_use_arg_types(self, ea, fti, rargs) -> int + | + | ev_use_regarg_type(self, *args) + | ev_use_regarg_type(self, ea, rargs) -> PyObject * + | + | ev_use_stkarg_type(self, *args) + | ev_use_stkarg_type(self, ea, arg) -> int + | + | hook(self, *args) + | hook(self) -> bool + | + | + | Creates an IDP hook + | + | @return: Boolean true on success + | + | unhook(self, *args) + | unhook(self) -> bool + | + | + | Removes the IDP hook + | @return: Boolean true on success + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from IDP_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from IDP_Hooks: + | + | __swig_destroy__ = + | delete_IDP_Hooks(self) + +Help on class reg_info_t in module ida_idp: + +class reg_info_t(__builtin__.object) + | Proxy of C++ reg_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> reg_info_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | reg + | reg_info_t_reg_get(self) -> int + | + | size + | reg_info_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_reg_info_t(self) + +Help on function set_processor_type in module ida_idp: + +set_processor_type(*args) + set_processor_type(procname, level) -> bool + + + Set target processor type. Once a processor module is loaded, it + cannot be replaced until we close the idb. + + @param procname: name of processor type (one of names present in + \ph{psnames}) (C++: const char *) + @param level: SETPROC_ (C++: setproc_level_t) + @return: success + +Help on function set_target_assembler in module ida_idp: + +set_target_assembler(*args) + set_target_assembler(asmnum) -> bool + + + Set target assembler. + + @param asmnum: number of assembler in the current processor module + (C++: int) + @return: success + +Help on function sizeof_ldbl in module ida_idp: + +sizeof_ldbl(*args) + sizeof_ldbl() -> size_t + + + Get size of long double. + +Help on function str2reg in module ida_idp: + +str2reg(*args) + str2reg(p) -> int + + + Get any reg number (-1 on error) + + + @param p (C++: const char *) + +=== ida_idp EPYDOC INJECTIONS === +ida_idp.AS2_BRACE +""" +Use braces for all expressions. +""" + +ida_idp.AS2_BYTE1CHAR +""" +Meaningful only for wide byte processors. + +One symbol per processor byte +""" + +ida_idp.AS2_COLONSUF +""" +addresses may have ":xx" suffix this suffix must be ignored when +extracting the address under the cursor +""" + +ida_idp.AS2_IDEALDSCR +""" +Description of struc/union is in the 'reverse' form (keyword before +name) the same as in borland tasm ideal +""" + +ida_idp.AS2_STRINV +""" +(For processors with bytes bigger than 8 bits) + +Invert meaning of \\inf{wide_high_byte_first} for text strings +""" + +ida_idp.AS2_TERSESTR +""" +NAME is supported. + +'terse' structure initialization form +""" + +ida_idp.AS2_YWORD +""" +a_yword field is present and valid +""" + +ida_idp.ASB_BINF0 +""" +010101b +""" + +ida_idp.ASB_BINF1 +""" +^B010101 +""" + +ida_idp.ASB_BINF2 +""" +%010101 +""" + +ida_idp.ASB_BINF3 +""" +0b1010101 +""" + +ida_idp.ASB_BINF4 +""" +b'1010101 +""" + +ida_idp.ASB_BINF5 +""" +b'1010101' +""" + +ida_idp.ASD_DECF0 +""" +34 +""" + +ida_idp.ASD_DECF1 +""" +#34 +""" + +ida_idp.ASD_DECF3 +""" +.34 +""" + +ida_idp.ASH_HEXF0 +""" +34h +""" + +ida_idp.ASH_HEXF1 +""" +h'34 +""" + +ida_idp.ASH_HEXF2 +""" +34 +""" + +ida_idp.ASH_HEXF3 +""" +0x34 +""" + +ida_idp.ASH_HEXF4 +""" +$34 +""" + +ida_idp.ASH_HEXF5 +""" +<^R > (radix) +""" + +ida_idp.ASO_OCTF0 +""" +123o +""" + +ida_idp.ASO_OCTF1 +""" +0123 +""" + +ida_idp.ASO_OCTF2 +""" +123 +""" + +ida_idp.ASO_OCTF3 +""" +@123 +""" + +ida_idp.ASO_OCTF4 +""" +o'123 +""" + +ida_idp.ASO_OCTF5 +""" +123q +""" + +ida_idp.ASO_OCTF6 +""" +~123 +""" + +ida_idp.ASO_OCTF7 +""" +q'123 +""" + +ida_idp.AS_1TEXT +""" +1 text per line, no bytes +""" + +ida_idp.AS_2CHRE +""" +double char constants are: "xy +""" + +ida_idp.AS_ALIGN2 +""" +(.align 5 means to align at 32byte boundary) + +.align directive expects an exponent rather than a power of 2 +""" + +ida_idp.AS_ASCIIC +""" +(\\n,\\x01 and similar) + +ascii directive accepts C-like escape sequences +""" + +ida_idp.AS_ASCIIZ +""" +ascii directive inserts implicit zero byte at the end +""" + +ida_idp.AS_BINFM +""" +mask - binary number format +""" + +ida_idp.AS_COLON +""" +create colons after data names ? +""" + +ida_idp.AS_DECFM +""" +mask - decimal number format +""" + +ida_idp.AS_HEXFM +""" +mask - hex number format +""" + +ida_idp.AS_LALIGN +""" +Labels at "align" keyword are supported. +""" + +ida_idp.AS_N2CHR +""" +can't have 2 byte char consts +""" + +ida_idp.AS_NCHRE +""" +char constants are: 'x +""" + +ida_idp.AS_NCMAS +""" +no commas in ascii directives +""" + +ida_idp.AS_NHIAS +""" +no characters with high bit +""" + +ida_idp.AS_NOCODECLN +""" +don't create colons after code names +""" + +ida_idp.AS_NOSPACE +""" +No spaces in expressions. +""" + +ida_idp.AS_NOXRF +""" +Disable xrefs during the output file generation. +""" + +ida_idp.AS_OCTFM +""" +mask - octal number format +""" + +ida_idp.AS_OFFST +""" +offsets are 'offset xxx' ? +""" + +ida_idp.AS_ONEDUP +""" +One array definition per line. +""" + +ida_idp.AS_RELSUP +""" +Checkarg: 'and','or','xor' operations with addresses are possible. +""" + +ida_idp.AS_UDATA +""" +can use '?' in data directives +""" + +ida_idp.AS_UNEQU +""" +replace undefined data items with EQU (for ANTA's A80) +""" + +ida_idp.AS_XTRNTYPE +""" +Assembler understands type of extern symbols as ":type" suffix. +""" + +ida_idp.CF_CALL +""" +CALL instruction (should make a procedure here) +""" + +ida_idp.CF_CHG1 +""" +The instruction modifies the first operand. +""" + +ida_idp.CF_CHG2 +""" +The instruction modifies the second operand. +""" + +ida_idp.CF_CHG3 +""" +The instruction modifies the third operand. +""" + +ida_idp.CF_CHG4 +""" +The instruction modifies 4 operand. +""" + +ida_idp.CF_CHG5 +""" +The instruction modifies 5 operand. +""" + +ida_idp.CF_CHG6 +""" +The instruction modifies 6 operand. +""" + +ida_idp.CF_HLL +""" +language function. + +Instruction may be present in a high level +""" + +ida_idp.CF_JUMP +""" +jump or call (thus needs additional analysis) + +The instruction passes execution using indirect +""" + +ida_idp.CF_SHFT +""" +Bit-shift instruction (shl,shr...) +""" + +ida_idp.CF_STOP +""" +next instruction + +Instruction doesn't pass execution to the +""" + +ida_idp.CF_USE1 +""" +The instruction uses value of the first operand. +""" + +ida_idp.CF_USE2 +""" +The instruction uses value of the second operand. +""" + +ida_idp.CF_USE3 +""" +The instruction uses value of the third operand. +""" + +ida_idp.CF_USE4 +""" +The instruction uses value of the 4 operand. +""" + +ida_idp.CF_USE5 +""" +The instruction uses value of the 5 operand. +""" + +ida_idp.CF_USE6 +""" +The instruction uses value of the 6 operand. +""" + +ida_idp.CUSTOM_INSN_ITYPE +""" +Custom instruction codes defined by processor extension plugins must +be greater than or equal to this +""" + +ida_idp.IDP_INTERFACE_VERSION +""" +The interface version number.see also 'IDA_SDK_VERSION' from 'pro.h' +""" + +ida_idp.OP_FP_BASED +""" +operand is FP based +""" + +ida_idp.OP_SP_ADD +""" +operand value is added to the pointer +""" + +ida_idp.OP_SP_BASED +""" +operand is SP based +""" + +ida_idp.OP_SP_SUB +""" +operand value is subtracted from the pointer +""" + +ida_idp.PLFM_386 +""" +Intel 80x86. +""" + +ida_idp.PLFM_6502 +""" +6502 +""" + +ida_idp.PLFM_65C816 +""" +65802/65816 +""" + +ida_idp.PLFM_6800 +""" +Motorola 68xx. +""" + +ida_idp.PLFM_68K +""" +Motorola 680x0. +""" + +ida_idp.PLFM_80196 +""" +Intel 80196. +""" + +ida_idp.PLFM_8051 +""" +8051 +""" + +ida_idp.PLFM_AD2106X +""" +Analog Devices ADSP 2106X. +""" + +ida_idp.PLFM_AD218X +""" +Analog Devices ADSP 218X. +""" + +ida_idp.PLFM_ALPHA +""" +DEC Alpha. +""" + +ida_idp.PLFM_ARC +""" +Argonaut RISC Core. +""" + +ida_idp.PLFM_ARM +""" +Advanced RISC Machines. +""" + +ida_idp.PLFM_AVR +""" +Atmel 8-bit RISC processor(s) +""" + +ida_idp.PLFM_C166 +""" +Siemens C166 family. +""" + +ida_idp.PLFM_C39 +""" +Rockwell C39. +""" + +ida_idp.PLFM_CR16 +""" +NSC CR16. +""" + +ida_idp.PLFM_DALVIK +""" +Android Dalvik Virtual Machine. +""" + +ida_idp.PLFM_DSP56K +""" +Motorola DSP5600x. +""" + +ida_idp.PLFM_DSP96K +""" +Motorola DSP96000. +""" + +ida_idp.PLFM_EBC +""" +EFI Bytecode. +""" + +ida_idp.PLFM_F2MC +""" +Fujistu F2MC-16. +""" + +ida_idp.PLFM_FR +""" +Fujitsu FR Family. +""" + +ida_idp.PLFM_H8 +""" +Hitachi H8/300, H8/2000. +""" + +ida_idp.PLFM_H8500 +""" +Hitachi H8/500. +""" + +ida_idp.PLFM_HPPA +""" +Hewlett-Packard PA-RISC. +""" + +ida_idp.PLFM_I860 +""" +Intel 860. +""" + +ida_idp.PLFM_I960 +""" +Intel 960. +""" + +ida_idp.PLFM_IA64 +""" +Intel Itanium IA64. +""" + +ida_idp.PLFM_JAVA +""" +Java. +""" + +ida_idp.PLFM_KR1878 +""" +Angstrem KR1878. +""" + +ida_idp.PLFM_M16C +""" +Renesas M16C. +""" + +ida_idp.PLFM_M32R +""" +Mitsubishi 32bit RISC. +""" + +ida_idp.PLFM_M740 +""" +Mitsubishi 8bit. +""" + +ida_idp.PLFM_M7700 +""" +Mitsubishi 16bit. +""" + +ida_idp.PLFM_M7900 +""" +Mitsubishi 7900. +""" + +ida_idp.PLFM_MC6812 +""" +Motorola 68HC12. +""" + +ida_idp.PLFM_MC6816 +""" +Motorola 68HC16. +""" + +ida_idp.PLFM_MIPS +""" +MIPS. +""" + +ida_idp.PLFM_MN102L00 +""" +Panasonic MN10200. +""" + +ida_idp.PLFM_MSP430 +""" +Texas Instruments MSP430. +""" + +ida_idp.PLFM_NEC_78K0 +""" +NEC 78K0. +""" + +ida_idp.PLFM_NEC_78K0S +""" +NEC 78K0S. +""" + +ida_idp.PLFM_NEC_V850X +""" +NEC V850 and V850ES/E1/E2. +""" + +ida_idp.PLFM_NET +""" +Microsoft Visual Studio.Net. +""" + +ida_idp.PLFM_OAKDSP +""" +Atmel OAK DSP. +""" + +ida_idp.PLFM_PDP +""" +PDP11. +""" + +ida_idp.PLFM_PIC +""" +Microchip's PIC. +""" + +ida_idp.PLFM_PIC16 +""" +Microchip's 16-bit PIC. +""" + +ida_idp.PLFM_PPC +""" +PowerPC. +""" + +ida_idp.PLFM_S390 +""" +IBM's S390. +""" + +ida_idp.PLFM_SCR_ADPT +""" +Processor module adapter for processor modules written in scripting +languages. +""" + +ida_idp.PLFM_SH +""" +Renesas (formerly Hitachi) SuperH. +""" + +ida_idp.PLFM_SPARC +""" +SPARC. +""" + +ida_idp.PLFM_SPC700 +""" +Sony SPC700. +""" + +ida_idp.PLFM_SPU +""" +Cell Broadband Engine Synergistic Processor Unit. +""" + +ida_idp.PLFM_ST20 +""" +SGS-Thomson ST20. +""" + +ida_idp.PLFM_ST7 +""" +SGS-Thomson ST7. +""" + +ida_idp.PLFM_ST9 +""" +ST9+. +""" + +ida_idp.PLFM_TLCS900 +""" +Toshiba TLCS-900. +""" + +ida_idp.PLFM_TMS +""" +Texas Instruments TMS320C5x. +""" + +ida_idp.PLFM_TMS320C1X +""" +Texas Instruments TMS320C1x. +""" + +ida_idp.PLFM_TMS320C28 +""" +Texas Instruments TMS320C28x. +""" + +ida_idp.PLFM_TMS320C3 +""" +Texas Instruments TMS320C3. +""" + +ida_idp.PLFM_TMS320C54 +""" +Texas Instruments TMS320C54xx. +""" + +ida_idp.PLFM_TMS320C55 +""" +Texas Instruments TMS320C55xx. +""" + +ida_idp.PLFM_TMSC6 +""" +Texas Instruments TMS320C6x. +""" + +ida_idp.PLFM_TRICORE +""" +Tasking Tricore. +""" + +ida_idp.PLFM_TRIMEDIA +""" +Trimedia. +""" + +ida_idp.PLFM_UNSP +""" +SunPlus unSP. +""" + +ida_idp.PLFM_Z8 +""" +Z8. +""" + +ida_idp.PLFM_Z80 +""" +8085, Z80 +""" + +ida_idp.PRN_BIN +""" +binary +""" + +ida_idp.PRN_DEC +""" +decimal +""" + +ida_idp.PRN_HEX +""" +hex +""" + +ida_idp.PRN_OCT +""" +octal +""" + +ida_idp.PR_ADJSEGS +""" +IDA may adjust segments' starting/ending addresses. +""" + +ida_idp.PR_ALIGN +""" +All data items should be aligned properly. +""" + +ida_idp.PR_ALIGN_INSN +""" +allow ida to create alignment instructions arbitrarily. Since these +instructions might lead to other wrong instructions and spoil the +listing, IDA does not create them by default anymore +""" + +ida_idp.PR_ASSEMBLE +""" +Module has a built-in assembler and will react to ev_assemble. +""" + +ida_idp.PR_BINMEM +""" +the processor module provides correct segmentation for binary files +(i.e. it creates additional segments) The kernel will not ask the user +to specify the RAM/ROM sizes +""" + +ida_idp.PR_CHK_XREF +""" +don't allow near xrefs between segments with different bases +""" + +ida_idp.PR_CNDINSNS +""" +has conditional instructions +""" + +ida_idp.PR_DEFNUM +""" +mask - default number representation +""" + +ida_idp.PR_DEFSEG32 +""" +segments are 32-bit by default +""" + +ida_idp.PR_DEFSEG64 +""" +segments are 64-bit by default +""" + +ida_idp.PR_DELAYED +""" +has delayed jumps and calls if this flag is set, +\\ph{is_basic_block_end}, \\ph{has_delay_slot} should be implemented +""" + +ida_idp.PR_NOCHANGE +""" +(display only) + +The user can't change segments and code/data attributes +""" + +ida_idp.PR_NO_SEGMOVE +""" +(i.e. the user can't move segments) + +the processor module doesn't support 'move_segm()' +""" + +ida_idp.PR_PURGING +""" +there are calling conventions which may purge bytes from the stack +""" + +ida_idp.PR_RNAMESOK +""" +allow user register names for location names +""" + +ida_idp.PR_SCALE_STKVARS +""" +use \\ph{get_stkvar_scale} callback +""" + +ida_idp.PR_SEGS +""" +has segment registers? +""" + +ida_idp.PR_SEGTRANS +""" +the processor module supports the segment translation feature (meaning +it calculates the code addresses using the 'map_code_ea()' function) +""" + +ida_idp.PR_SGROTHER +""" +the segment registers don't contain the segment selectors. +""" + +ida_idp.PR_STACK_UP +""" +the stack grows up +""" + +ida_idp.PR_TYPEINFO +""" +ALL OF THEM SHOULD BE IMPLEMENTED! + +the processor module supports type information callbacks +""" + +ida_idp.PR_USE32 +""" +supports 32-bit addressing? +""" + +ida_idp.PR_USE64 +""" +supports 64-bit addressing? +""" + +ida_idp.PR_USE_ARG_TYPES +""" +use \\ph{use_arg_types} callback +""" + +ida_idp.PR_USE_TBYTE +""" + 'BTMT_SPECFLT' means _TBYTE type +""" + +ida_idp.PR_WORD_INS +""" +instruction codes are grouped 2bytes in binary line prefix +""" + +ida_idp.REG_SPOIL +""" +processor_t::use_regarg_type uses this bit in the return value to +indicate that the register value has been spoiled +""" +=== ida_idp EPYDOC INJECTIONS END === +Help on class Choose in module ida_kernwin: + +class Choose(__builtin__.object) + | Chooser wrapper class. + | + | Some constants are defined in this class. + | Please refer to kernwin.hpp for more information. + | + | Methods defined here: + | + | Activate(self) + | Activates a visible chooser + | + | AddCommand(self, caption, flags=4, menu_index=-1, icon=-1, emb=None, shortcut=None) + | + | Close(self) + | Closes the chooser + | + | Embedded(self, create_chobj=False) + | Creates an embedded chooser (as opposed to Show()) + | @return: Returns 0 on success or NO_ATTR + | + | GetEmbSelection(self) + | Deprecated. For embedded choosers, the selection is + | available through 'Form.EmbeddedChooserControl.selection' + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | OnPopup(self, widget, popup_handle) + | + | Refresh(self) + | Causes the refresh callback to trigger + | + | Show(self, modal=False) + | Activates or creates a chooser window + | @param modal: Display as modal dialog + | @return: For all choosers it will return NO_ATTR if some mandatory + | attribute is missing. The mandatory attributes are: flags, + | title, cols, OnGetSize(), OnGetLine(); + | For modal choosers it will return the selected item index (0-based), + | or NO_SELECTION if no selection, + | or EMPTY_CHOOSER if the OnRefresh() callback returns EMPTY_CHOOSER; + | For non-modal choosers it will return 0 + | or ALREADY_EXISTS if the chooser was already open and is active now; + | + | __init__(self, title, cols, flags=0, popup_names=None, icon=-1, x1=-1, y1=-1, x2=-1, y2=-1, deflt=None, embedded=False, width=None, height=None, forbidden_cb=0) + | Constructs a chooser window. + | @param title: The chooser title + | @param cols: a list of colums; each list item is a list of two items + | example: [ ["Address", 10 | Choose.CHCOL_HEX], + | ["Name", 30 | Choose.CHCOL_PLAIN] ] + | @param flags: One of CH_XXXX constants + | @param deflt: The index of the default item (0-based) for single + | selection choosers or the list of indexes for multi selection + | chooser + | @param popup_names: List of new captions to replace this list + | ["Insert", "Delete", "Edit", "Refresh"] + | @param icon: Icon index (the icon should exist in ida resources or + | an index to a custom loaded icon) + | @param x1, y1, x2, y2: The default location (for txt-version) + | @param embedded: Create as embedded chooser + | @param width: Embedded chooser width + | @param height: Embedded chooser height + | @param forbidden_cb: Explicitly forbidden callbacks + | + | adjust_last_item(self, n) + | Helper for OnDeleteLine() and OnRefresh() callbacks. + | They can be finished by the following line: + | return [Choose.ALL_CHANGED] + self.adjust_last_item(n) + | @param: line number of the remaining select item + | @return: list of selected lines numbers (one element or empty) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | ALL_CHANGED = 1 + | + | ALREADY_EXISTS = -3 + | + | CHCOL_DEC = 196608 + | + | CHCOL_EA = 262144 + | + | CHCOL_FNAME = 327680 + | + | CHCOL_FORMAT = 458752 + | + | CHCOL_HEX = 131072 + | + | CHCOL_PATH = 65536 + | + | CHCOL_PLAIN = 0 + | + | CHOOSE_HAVE_DEL = 16 + | + | CHOOSE_HAVE_EDIT = 32 + | + | CHOOSE_HAVE_ENTER = 64 + | + | CHOOSE_HAVE_GETATTR = 4 + | + | CHOOSE_HAVE_GETICON = 2 + | + | CHOOSE_HAVE_INIT = 1 + | + | CHOOSE_HAVE_INS = 8 + | + | CHOOSE_HAVE_ONCLOSE = 512 + | + | CHOOSE_HAVE_REFRESH = 128 + | + | CHOOSE_HAVE_SELECT = 256 + | + | CH_ATTRS = 32 + | + | CH_BUILTIN_MASK = 33030144 + | + | CH_BUILTIN_SHIFT = 19 + | + | CH_CAN_DEL = 512 + | + | CH_CAN_EDIT = 1024 + | + | CH_CAN_INS = 256 + | + | CH_CAN_REFRESH = 2048 + | + | CH_FORCE_DEFAULT = 128 + | + | CH_MODAL = 1 + | + | CH_MULTI = 4 + | + | CH_NOBTNS = 16 + | + | CH_NOIDB = 64 + | + | CH_NO_STATUS_BAR = 65536 + | + | CH_QFLT = 4096 + | + | CH_QFTYP_DEFAULT = 0 + | + | CH_QFTYP_FUZZY = 32768 + | + | CH_QFTYP_MASK = 57344 + | + | CH_QFTYP_NORMAL = 8192 + | + | CH_QFTYP_REGEX = 24576 + | + | CH_QFTYP_SHIFT = 13 + | + | CH_QFTYP_WHOLE_WORDS = 16384 + | + | CH_RESTORE = 131072 + | + | EMPTY_CHOOSER = -2 + | + | NOTHING_CHANGED = 0 + | + | NO_ATTR = -4 + | + | NO_SELECTION = -1 + | + | SELECTION_CHANGED = 2 + | + | UI_Hooks_Trampoline = + +Help on class CustomIDAMemo in module ida_kernwin: + +class CustomIDAMemo(View_Hooks) + | # + | # ----------------------------------------------------------------------- + | # CustomIDAMemo + | # ----------------------------------------------------------------------- + | + | Method resolution order: + | CustomIDAMemo + | View_Hooks + | __builtin__.object + | + | Methods defined here: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | __init__(self) + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | + | view_click(self, view, ve) + | + | view_close(self, view, *args) + | + | view_curpos(self, view, *args) + | + | view_dblclick(self, view, ve) + | + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | + | view_mouse_over(self, view, ve) + | + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | view_created(self, *args) + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from View_Hooks: + | + | __swig_destroy__ = + | delete_View_Hooks(self) + +Help on class Form in module ida_kernwin: + +class Form(__builtin__.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | Add(self, name, ctrl, mkattr=True) + | Low level function. Prefer AddControls() to this function. + | This function adds one control to the form. + | + | @param name: Control name + | @param ctrl: Control object + | @param mkattr: Create control name / control object as a form attribute + | + | AddControls(self, controls, mkattr=True) + | Adds controls from a dictionary. + | The dictionary key is the control name and the value is a Form.Control object + | @param controls: The control dictionary + | + | Close(self, close_normally) + | Close the form + | @param close_normally: + | 1: form is closed normally as if the user pressed Enter + | 0: form is closed abnormally as if the user pressed Esc + | @return: None + | + | Compile(self) + | Compiles a form and returns the form object (self) and the argument list. + | The form object will contain object names corresponding to the form elements + | + | @return: It will raise an exception on failure. Otherwise the return value is ignored + | + | CompileEx(self, form) + | Low level function. + | Compiles (parses the form syntax and adds the control) the form string and + | returns the argument list to be passed the argument list to ask_form(). + | + | The form controls are wrapped inside curly braces: {ControlName}. + | + | A special operator can be used to return the index of a given control by its name: {id:ControlName}. + | This is useful when you use the STARTITEM form keyword to set the initially focused control. + | (note that, technically, the index is not the same as the ID; that's because STARTITEM + | uses raw, 0-based indexes rather than control IDs to determine the focused widget.) + | + | @param form: Compiles the form and returns the arguments needed to be passed to ask_form() + | + | Compiled(self) + | Checks if the form has already been compiled + | + | @return: Boolean + | + | EnableField(self, ctrl, enable) + | Enable or disable an input field + | @return: False - no such control + | + | Execute(self) + | Displays a modal dialog containing the compiled form. + | @return: 1 - ok ; 0 - cancel + | + | FindControlById(self, id) + | Finds a control instance given its id + | + | Free(self) + | Frees all resources associated with a compiled form. + | Make sure you call this function when you finish using the form. + | + | GetControlValue(self, ctrl) + | Returns the control's value depending on its type + | @param ctrl: Form control instance + | @return: + | - color button, radio controls: integer + | - file/dir input, string input and string label: string + | - embedded chooser control (0-based indices of selected items): integer list + | - for multilinetext control: textctrl_info_t + | - dropdown list controls: string (when editable) or index (when readonly) + | - None: on failure + | + | GetFocusedField(self) + | Get currently focused input field. + | @return: None if no field is selected otherwise the control ID + | + | MoveField(self, ctrl, x, y, w, h) + | Move/resize an input field + | + | @return: False - no such fiel + | + | Open(self) + | Opens a widget containing the compiled form. + | + | RefreshField(self, ctrl) + | Refresh a field + | @return: False - no such control + | + | SetControlValue(self, ctrl, value) + | Set the control's value depending on its type + | @param ctrl: Form control instance + | @param value: + | - embedded chooser: a 0-base indices list to select embedded chooser items + | - multilinetext: a textctrl_info_t + | - dropdown list: an integer designating the selection index if readonly + | a string designating the edit control value if not readonly + | @return: Boolean true on success + | + | SetFocusedField(self, ctrl) + | Set currently focused input field + | @return: False - no such control + | + | ShowField(self, ctrl, show) + | Show or hide an input field + | @return: False - no such control + | + | _AddGroup(self, Group, mkattr=True) + | Internal function. + | This function expands the group item names and creates individual group item controls + | + | @param Group: The group class (checkbox or radio group class) + | + | _ChkCompiled(self) + | + | __getitem__(self, name) + | Returns a control object by name + | + | __init__(self, form, controls) + | Contruct a Form class. + | This class wraps around ask_form() or open_form() and provides an easier / alternative syntax for describing forms. + | The form control names are wrapped inside the opening and closing curly braces and the control themselves are + | defined and instantiated via various form controls (subclasses of Form). + | + | @param form: The form string + | @param controls: A dictionary containing the control name as a _key_ and control object as _value_ + | + | _reset(self) + | Resets the Form class state variables + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | ControlToFieldTypeIdAndSize(ctrl) + | Converts a control object to a tuple containing the field id + | and the associated buffer size + | + | _ParseFormTitle(form) + | Parses the form's title from the form text + | + | create_string_buffer(value, size=None) + | + | fieldtype_to_ctype(tp, i64=False) + | Factory method returning a ctype class corresponding to the field type string + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | ButtonInput = + | Button control. + | A handler along with a 'code' (numeric value) can be associated with the button. + | This way one handler can handle many buttons based on the button code (or in other terms id or tag) + | + | ChkGroupControl = + | Checkbox group control class. + | It holds a set of checkbox controls + | + | ChkGroupItemControl = + | Checkbox group item control + | + | ColorInput = + | Color button input control + | + | Control = + | + | + | DirInput = + | Directory browsing control + | + | DropdownListControl = + | Dropdown control + | This control allows manipulating a dropdown control + | + | EmbeddedChooserControl = + | Embedded chooser control. + | This control links to a Chooser2 control created with the 'embedded=True' + | + | FT_ADDR = '$' + | + | FT_ASCII = 'A' + | + | FT_BIN = 'Y' + | + | FT_BUTTON = 'B' + | + | FT_CHAR = 'H' + | + | FT_CHKGRP = 'C' + | + | FT_CHKGRP2 = 'c' + | + | FT_COLOR = 'K' + | + | FT_DEC = 'D' + | + | FT_DIR = 'F' + | + | FT_DROPDOWN_LIST = 'b' + | + | FT_ECHOOSER = 'E' + | + | FT_FILE = 'f' + | + | FT_FORMCHG = '%/' + | + | FT_HEX = 'N' + | + | FT_HTML_LABEL = 'h' + | + | FT_IDENT = 'I' + | + | FT_INT64 = 'l' + | + | FT_MULTI_LINE_TEXT = 't' + | + | FT_OCT = 'O' + | + | FT_RADGRP = 'R' + | + | FT_RADGRP2 = 'r' + | + | FT_RAWHEX = 'M' + | + | FT_SEG = 'S' + | + | FT_SHEX = 'n' + | + | FT_TYPE = 'T' + | + | FT_UINT64 = 'L' + | + | FileInput = + | File Open/Save input control + | + | FormChangeCb = + | Form change handler. + | This can be thought of like a dialog procedure. + | Everytime a form action occurs, this handler will be called along with the control id. + | The programmer can then call various form actions accordingly: + | - EnableField + | - ShowField + | - MoveField + | - GetFieldValue + | - etc... + | + | Special control IDs: -1 (The form is initialized) and -2 (Ok has been clicked) + | + | GroupControl = + | Base class for group controls + | + | GroupItemControl = + | Base class for group control items + | + | InputControl = + | Generic form input control. + | It could be numeric control, string control, directory/file browsing, etc... + | + | LabelControl = + | Base class for static label control + | + | MultiLineTextControl = + | Multi line text control. + | This class inherits from textctrl_info_t. Thus the attributes are also inherited + | This control allows manipulating a multilinetext control + | + | NumericArgument = + | Argument representing various integer arguments (ushort, uint32, uint64, etc...) + | @param tp: One of Form.FT_XXX + | + | NumericInput = + | A composite class serving as a base numeric input control class + | + | NumericLabel = + | Numeric label control + | + | RadGroupControl = + | Radiobox group control class. + | It holds a set of radiobox controls + | + | RadGroupItemControl = + | Radiobox group item control + | + | StringArgument = + | Argument representing a character buffer + | + | StringInput = + | Base string input control class. + | This class also constructs a StringArgument + | + | StringLabel = + | String label control + | + | _FT_USHORT = '_US' + +Help on class IDAViewWrapper in module ida_kernwin: + +class IDAViewWrapper(CustomIDAMemo) + | Deprecated. Use View_Hooks instead. + | + | Because the lifecycle of an IDAView is not trivial to track (e.g., a user + | might close, then re-open the same disassembly view), this wrapper doesn't + | bring anything superior to the View_Hooks: quite the contrary, as the + | latter is much more generic (and better maps IDA's internal model.) + | + | Method resolution order: + | IDAViewWrapper + | CustomIDAMemo + | View_Hooks + | __builtin__.object + | + | Methods defined here: + | + | Bind(self) + | + | Unbind(self) + | + | __init__(self, title) + | + | ---------------------------------------------------------------------- + | Methods inherited from CustomIDAMemo: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | + | view_click(self, view, ve) + | + | view_close(self, view, *args) + | + | view_curpos(self, view, *args) + | + | view_dblclick(self, view, ve) + | + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | + | view_mouse_over(self, view, ve) + | + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods inherited from CustomIDAMemo: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | view_created(self, *args) + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from View_Hooks: + | + | __swig_destroy__ = + | delete_View_Hooks(self) + +Help on class PluginForm in module ida_kernwin: + +class PluginForm(__builtin__.object) + | PluginForm class. + | + | This form can be used to host additional controls. Please check the PyQt example. + | + | Methods defined here: + | + | Close(self, options) + | Closes the form. + | + | @param options: Close options (WCLS_SAVE, WCLS_NO_CONTEXT, ...) + | + | @return: None + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | OnClose(self, form) + | Called when the plugin form is closed + | + | @return: None + | + | OnCreate(self, form) + | This event is called when the plugin form is created. + | The programmer should populate the form when this event is triggered. + | + | @return: None + | + | Show(self, caption, options=0) + | Creates the form if not was not created or brings to front if it was already created + | + | @param caption: The form caption + | @param options: One of PluginForm.WOPN_ constants + | + | __init__(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | 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=) + | 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=) + | 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=) + | 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=) + | 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 + | + | _ensure_widget_deps(ctx) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | VALID_CAPSULE_NAME = '$valid$' + | + | WCLS_CLOSE_LATER = 8 + | + | WCLS_DONT_SAVE_SIZE = 4 + | + | WCLS_NO_CONTEXT = 2 + | + | WCLS_SAVE = 1 + | + | WOPN_CENTERED = 32 + | + | WOPN_CREATE_ONLY = {} + | + | WOPN_DP_BEFORE = 2097152 + | + | WOPN_DP_BOTTOM = 524288 + | + | WOPN_DP_FLOATING = 8388608 + | + | WOPN_DP_INSIDE = 1048576 + | + | WOPN_DP_INSIDE_BEFORE = 3145728 + | + | WOPN_DP_LEFT = 65536 + | + | WOPN_DP_RIGHT = 262144 + | + | WOPN_DP_TAB = 4194304 + | + | WOPN_DP_TAB_BEFORE = 6291456 + | + | WOPN_DP_TOP = 131072 + | + | WOPN_MDI = 1 + | + | WOPN_MENU = 16 + | + | WOPN_ONTOP = 8 + | + | WOPN_PERSIST = 64 + | + | WOPN_RESTORE = 4 + | + | WOPN_TAB = 2 + +Help on function TWidget__from_ptrval__ in module ida_kernwin: + +TWidget__from_ptrval__(*args) + TWidget__from_ptrval__(ptrval) -> TWidget * + +Help on class UI_Hooks in module ida_kernwin: + +class UI_Hooks(__builtin__.object) + | Proxy of C++ UI_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> UI_Hooks + | + | __repr__ = _swig_repr(self) + | + | create_desktop_widget(self, *args) + | create_desktop_widget(self, title, cfg) -> PyObject * + | + | current_widget_changed(self, *args) + | current_widget_changed(self, widget, prev_widget) + | + | database_inited(self, *args) + | database_inited(self, is_new_database, idc_script) + | + | debugger_menu_change(self, *args) + | debugger_menu_change(self, enable) + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | finish_populating_widget_popup(self, *args) + | finish_populating_widget_popup(self, widget, popup_handle, ctx=None) + | + | + | The UI is about to be done populating the TWidget's popup menu. + | Now is a good time to call idaapi.attach_action_to_popup() + | + | @param widget: The widget + | @param popup: The popup menu. + | @return: Ignored + | + | get_chooser_item_attrs(self, *args) + | get_chooser_item_attrs(self, chooser, n, attrs) + | + | get_custom_viewer_hint(self, *args) + | get_custom_viewer_hint(self, viewer, place) -> PyObject * + | + | get_ea_hint(self, *args) + | get_ea_hint(self, ea) -> PyObject * + | + | + | The UI wants to display a simple hint for an address in the navigation band + | + | @param ea: The address + | @return: String with the hint or None + | + | get_item_hint(self, *args) + | get_item_hint(self, ea, max_lines) -> PyObject * + | + | get_widget_config(self, *args) + | get_widget_config(self, widget, cfg) -> PyObject * + | + | hook(self, *args) + | hook(self) -> bool + | + | + | Creates an UI hook + | + | @return: Boolean true on success + | + | idcstart(self, *args) + | idcstart(self) + | + | idcstop(self, *args) + | idcstop(self) + | + | plugin_loaded(self, *args) + | plugin_loaded(self, plugin_info) + | + | plugin_unloading(self, *args) + | plugin_unloading(self, plugin_info) + | + | populating_widget_popup(self, *args) + | populating_widget_popup(self, widget, popup_handle, ctx=None) + | + | + | The UI is populating the TWidget's popup menu. + | Now is a good time to call idaapi.attach_action_to_popup() + | + | @param widget: The widget + | @param popup: The popup menu. + | @return: Ignored + | + | postprocess_action(self, *args) + | postprocess_action(self) + | + | + | An ida ui action has been handled + | + | @return: Ignored + | + | preprocess_action(self, *args) + | preprocess_action(self, name) + | + | + | IDA ui is about to handle a user action + | + | @param name: ui action name + | (these names can be looked up in ida[tg]ui.cfg) + | @return: 0-ok, nonzero - a plugin has handled the action + | + | range(self, *args) + | range(self) + | + | ready_to_run(self, *args) + | ready_to_run(self) + | + | resume(self, *args) + | resume(self) + | + | saved(self, *args) + | saved(self) + | + | + | The kernel has saved the database. + | + | @return: Ignored + | + | saving(self, *args) + | saving(self) + | + | + | The kernel is saving the database. + | + | @return: Ignored + | + | screen_ea_changed(self, *args) + | screen_ea_changed(self, ea, prev_ea) + | + | set_widget_config(self, *args) + | set_widget_config(self, widget, cfg) + | + | suspend(self, *args) + | suspend(self) + | + | term(self, *args) + | term(self) + | + | + | IDA is terminated and the database is already closed. + | The UI may close its windows in this callback. + | + | unhook(self, *args) + | unhook(self) -> bool + | + | + | Removes the UI hook + | @return: Boolean true on success + | + | updated_actions(self, *args) + | updated_actions(self) + | + | + | The UI is done updating actions. + | + | @return: Ignored + | + | updating_actions(self, *args) + | updating_actions(self, ctx) + | + | + | The UI is about to batch-update some actions. + | + | @param ctx: The action_update_ctx_t instance + | @return: Ignored + | + | widget_closing(self, *args) + | widget_closing(self, widget) + | + | widget_invisible(self, *args) + | widget_invisible(self, widget) + | + | widget_visible(self, *args) + | widget_visible(self, widget) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_UI_Hooks(self) + +Help on class View_Hooks in module ida_kernwin: + +class View_Hooks(__builtin__.object) + | Proxy of C++ View_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> View_Hooks + | + | __repr__ = _swig_repr(self) + | + | dump_state(self, *args) + | dump_state(self) -> qstring + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | view_activated(self, *args) + | view_activated(self, view) + | + | view_click(self, *args) + | view_click(self, view, event) + | + | view_close(self, *args) + | view_close(self, view) + | + | view_created(self, *args) + | view_created(self, view) + | + | view_curpos(self, *args) + | view_curpos(self, view) + | + | view_dblclick(self, *args) + | view_dblclick(self, view, event) + | + | view_deactivated(self, *args) + | view_deactivated(self, view) + | + | view_keydown(self, *args) + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, *args) + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, *args) + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, *args) + | view_mouse_over(self, view, event) + | + | view_switched(self, *args) + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_View_Hooks(self) + +Help on class __qtimer_t in module ida_kernwin: + +class __qtimer_t(__builtin__.object) + | Proxy of C++ __qtimer_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qtimer_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete___qtimer_t(self) + +Help on function _ask_addr in module ida_kernwin: + +_ask_addr(*args) + _ask_addr(addr, format) -> bool + +Help on function _ask_long in module ida_kernwin: + +_ask_long(*args) + _ask_long(value, format) -> bool + +Help on function _ask_seg in module ida_kernwin: + +_ask_seg(*args) + _ask_seg(sel, format) -> bool + +Help on function _call_ask_form in module ida_kernwin: + +_call_ask_form(*args) + +Help on function _call_open_form in module ida_kernwin: + +_call_open_form(*args) + +Help on class action_ctx_base_t in module ida_kernwin: + +class action_ctx_base_t(__builtin__.object) + | Proxy of C++ action_ctx_base_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> action_ctx_base_t + | + | __repr__ = _swig_repr(self) + | + | _get_form(self, *args) + | _get_form(self) -> TWidget * + | + | _get_form_title(self, *args) + | _get_form_title(self) -> qstring + | + | _get_form_type(self, *args) + | _get_form_type(self) -> twidget_type_t + | + | has_flag(self, *args) + | has_flag(self, flag) -> bool + | + | reset(self, *args) + | reset(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | action + | action_ctx_base_t_action_get(self) -> char const * + | + | chooser_selection + | action_ctx_base_t_chooser_selection_get(self) -> sizevec_t * + | + | cur_ea + | action_ctx_base_t_cur_ea_get(self) -> ea_t + | + | cur_enum + | action_ctx_base_t_cur_enum_get(self) -> enum_t + | + | cur_extracted_ea + | action_ctx_base_t_cur_value_get(self) -> uval_t + | + | cur_fchunk + | action_ctx_base_t_cur_fchunk_get(self) -> func_t * + | + | cur_flags + | action_ctx_base_t_cur_flags_get(self) -> uint32 + | + | cur_func + | action_ctx_base_t_cur_func_get(self) -> func_t * + | + | cur_seg + | action_ctx_base_t_cur_seg_get(self) -> segment_t * + | + | cur_strmem + | action_ctx_base_t_cur_strmem_get(self) -> member_t * + | + | cur_struc + | action_ctx_base_t_cur_struc_get(self) -> struc_t * + | + | cur_value + | action_ctx_base_t_cur_value_get(self) -> uval_t + | + | focus + | action_ctx_base_t_focus_get(self) -> TWidget * + | + | form + | _get_form(self) -> TWidget * + | + | form_title + | _get_form_title(self) -> qstring + | + | form_type + | _get_form_type(self) -> twidget_type_t + | + | graph_selection + | action_ctx_base_t_graph_selection_get(self) -> screen_graph_selection_t * + | + | regname + | action_ctx_base_t_regname_get(self) -> char const * + | + | thisown + | The membership flag + | + | widget + | action_ctx_base_t_widget_get(self) -> TWidget * + | + | widget_title + | action_ctx_base_t_widget_title_get(self) -> qstring * + | + | widget_type + | action_ctx_base_t_widget_type_get(self) -> twidget_type_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_action_ctx_base_t(self) + +Help on class action_desc_t in module ida_kernwin: + +class action_desc_t(__builtin__.object) + | Proxy of C++ action_desc_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, name, label, handler, shortcut=None, tooltip=None, icon=-1, flags=0) -> action_desc_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | action_desc_t_cb_get(self) -> int + | + | flags + | action_desc_t_flags_get(self) -> int + | + | icon + | action_desc_t_icon_get(self) -> int + | + | label + | action_desc_t_label_get(self) -> char const * + | + | name + | action_desc_t_name_get(self) -> char const * + | + | owner + | action_desc_t_owner_get(self) -> plugin_t const * + | + | shortcut + | action_desc_t_shortcut_get(self) -> char const * + | + | thisown + | The membership flag + | + | tooltip + | action_desc_t_tooltip_get(self) -> char const * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_action_desc_t(self) + +Help on class action_handler_t in module ida_kernwin: + +class action_handler_t(__builtin__.object) + | # ---------------------------------------------------------------------- + | + | Methods defined here: + | + | __init__(self) + | + | activate(self, ctx) + | + | update(self, ctx) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function activate_widget in module ida_kernwin: + +activate_widget(*args) + activate_widget(widget, take_focus) + + + Activate widget (only gui version) ( 'ui_activate_widget' ). + + @param widget: existing widget to display (C++: TWidget *) + @param take_focus: give focus to given widget (C++: bool) + +Help on function add_hotkey in module ida_kernwin: + +add_hotkey(*args) + add_hotkey(hotkey, pyfunc) -> PyObject * + + + Associates a function call with a hotkey. + Callable pyfunc will be called each time the hotkey is pressed + + @param hotkey: The hotkey + @param pyfunc: Callable + + @return: Context object on success or None on failure. + +Help on function add_idc_hotkey in module ida_kernwin: + +add_idc_hotkey(*args) + add_idc_hotkey(hotkey, idcfunc) -> int + + + Add hotkey for IDC function ( 'ui_add_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + @param idcfunc: IDC function name (C++: const char *) + @return: IDC hotkey error codes + +Help on function add_spaces in module ida_kernwin: + +add_spaces(*args) + add_spaces(s, len) -> PyObject * + + + Add space characters to the colored string so that its length will be + at least 'len' characters. Don't trim the string if it is longer than + 'len'. + + @param len: the desired length of the string (C++: ssize_t) + @return: pointer to the end of input string + +Help on function addon_count in module ida_kernwin: + +addon_count(*args) + addon_count() -> int + + + Get number of installed addons. + +Help on class addon_info_t in module ida_kernwin: + +class addon_info_t(__builtin__.object) + | Proxy of C++ addon_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> addon_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | addon_info_t_cb_get(self) -> size_t + | + | custom_data + | addon_info_t_custom_data_get(self) -> void const * + | + | custom_size + | addon_info_t_custom_size_get(self) -> size_t + | + | freeform + | addon_info_t_freeform_get(self) -> char const * + | + | id + | addon_info_t_id_get(self) -> char const * + | + | name + | addon_info_t_name_get(self) -> char const * + | + | producer + | addon_info_t_producer_get(self) -> char const * + | + | thisown + | The membership flag + | + | url + | addon_info_t_url_get(self) -> char const * + | + | version + | addon_info_t_version_get(self) -> char const * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_addon_info_t(self) + +Help on function analyzer_options in module ida_kernwin: + +analyzer_options(*args) + analyzer_options() + + + Allow the user to set analyzer options. (show a dialog box) ( + 'ui_analyzer_options' ) + +Help on function ask_addr in module ida_kernwin: + +ask_addr(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_buttons in module ida_kernwin: + +ask_buttons(*args) + ask_buttons(Yes, No, Cancel, deflt, format) -> int + + + Display a dialog box and get choice from maximum three possibilities ( + 'ui_ask_buttons' ).for all buttons:use "" or NULL to take the default + name for the button.use 'format' to hide the cancel button + + @param Yes: text for the first button (C++: const char *) + @param No: text for the second button (C++: const char *) + @param Cancel: text for the third button (C++: const char *) + @param deflt: default choice: one of Button IDs (C++: int) + @param format: printf-style format string for question. It may have + some prefixes, see below. (C++: const char *) + @return: one of Button IDs specifying the selected button (Esc key + returns Cancel/3rd button value) + +Help on function ask_file in module ida_kernwin: + +ask_file(*args) + ask_file(for_saving, defval, format) -> char * + +Help on function ask_for_feedback in module ida_kernwin: + +ask_for_feedback(*args) + ask_for_feedback(format) + + + Show a message box asking to send the input file tosupport@hex- + rays.com. + + @param format: the reason why the input file is bad (C++: const char + *) + +Help on function ask_ident in module ida_kernwin: + +ask_ident(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_long in module ida_kernwin: + +ask_long(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_seg in module ida_kernwin: + +ask_seg(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_str in module ida_kernwin: + +ask_str(*args) + ask_str(defval, hist, prompt) -> PyObject * + + + Asks for a long text + + @param hist: history id + @param defval: The default value + @param prompt: The prompt value + @return: None or the entered string + +Help on function ask_text in module ida_kernwin: + +ask_text(*args) + ask_text(max_size, defval, prompt) -> PyObject * + + + Asks for a long text + + @param max_size: Maximum text length, 0 for unlimited + @param defval: The default value + @param prompt: The prompt value + @return: None or the entered string + +Help on function ask_yn in module ida_kernwin: + +ask_yn(*args) + ask_yn(deflt, format) -> int + + + Display a dialog box and get choice from "Yes", "No", "Cancel". + + @param deflt: default choice: one of Button IDs (C++: int) + @param format: The question in printf() style format (C++: const char + *) + @return: the selected button (one of Button IDs ). Esc key returns + ASKBTN_CANCEL . + +Help on function attach_action_to_menu in module ida_kernwin: + +attach_action_to_menu(*args) + attach_action_to_menu(menupath, name, flags) -> bool + + + Attach a previously-registered action to the menu ( + 'ui_attach_action_to_menu' ).You should not change top level menu, or + the Edit,Plugins submenus If you want to modify the debugger menu, do + it at the ui_debugger_menu_change event (ida might destroy your menu + item if you do it elsewhere). + + @param menupath: path to the menu item after or before which the + insertion will take place. Example: + Debug/StartProcess Whitespace, punctuation are + ignored. It is allowed to specify only the prefix + of the menu item. Comparison is case insensitive. + menupath may start with the following prefixes: [S] + - modify the main menu of the structure window [E] + - modify the main menu of the enum window (C++: const + char *) + @param name: the action name (C++: const char *) + @param flags: a combination of Set menu flags , to determine menu + item position (C++: int) + @return: success + +Help on function attach_action_to_popup in module ida_kernwin: + +attach_action_to_popup(*args) + attach_action_to_popup(widget, popup_handle, name, popuppath=None, flags=0) -> bool + + + Insert a previously-registered action into the widget's popup menu ( + 'ui_attach_action_to_popup' ). This function has two "modes": 'single- + shot', and 'permanent'. + + @param widget: target widget (C++: TWidget *) + @param popup_handle: target popup menu if non-NULL, the action is + added to this popup menu invocation (i.e., + 'single-shot') if NULL, the action is added to + a list of actions that should always be present + in context menus for this widget (i.e., + 'permanent'.) (C++: TPopupMenu *) + @param name: action name (C++: const char *) + @param popuppath: can be NULL (C++: const char *) + @param flags: a combination of SETMENU_ flags (see Set menu flags ) + (C++: int) + @return: success + +Help on function attach_action_to_toolbar in module ida_kernwin: + +attach_action_to_toolbar(*args) + attach_action_to_toolbar(toolbar_name, name) -> bool + + + Attach an action to an existing toolbar ( + 'ui_attach_action_to_toolbar' ). + + @param toolbar_name: the name of the toolbar (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on function attach_dynamic_action_to_popup in module ida_kernwin: + +attach_dynamic_action_to_popup(*args) + attach_dynamic_action_to_popup(widget, popup_handle, desc, popuppath=None, flags=0) -> bool + + + Create & insert an action into the widget's popup menu ( + 'ui_attach_dynamic_action_to_popup' ). 'action_desc_t::handler' for + 'desc' must be instantiated using 'new', as it will be 'delete'd when + the action is unregistered. + + @param widget: target widget (C++: TWidget *) + @param popup_handle: target popup (C++: TPopupMenu *) + @param desc: created with DYNACTION_DESC_LITERAL (C++: const + action_desc_t &) + @param popuppath: can be NULL (C++: const char *) + @param flags: a combination of SETMENU_ constants (see Set menu flags + ) (C++: int) + @return: success + +Help on function banner in module ida_kernwin: + +banner(*args) + banner(wait) -> bool + + + Show a banner dialog box ( 'ui_banner' ). + + @param wait: time to wait before closing (C++: int) + +Help on function beep in module ida_kernwin: + +beep(*args) + beep(beep_type=beep_default) + + + Issue a beeping sound ( 'ui_beep' ). + + @param beep_type: beep_t (C++: beep_t) + +Help on function call_nav_colorizer in module ida_kernwin: + +call_nav_colorizer(*args) + call_nav_colorizer(dict, ea, nbytes) -> uint32 + + + To be used with the IDA-provided colorizer, that is + returned as result of the first call to set_nav_colorizer(). + +Help on function cancel_exec_request in module ida_kernwin: + +cancel_exec_request(*args) + cancel_exec_request(req_id) -> bool + + + Try to cancel an asynchronous exec request ( 'ui_cancel_exec_request' + ). + + @param req_id: request id (C++: int) + +Help on function choose_activate in module ida_kernwin: + +choose_activate(*args) + choose_activate(_self) + +Help on function choose_choose in module ida_kernwin: + +choose_choose(*args) + choose_choose(_self) -> PyObject * + +Help on function choose_close in module ida_kernwin: + +choose_close(*args) + choose_close(_self) + +Help on function choose_create_embedded_chobj in module ida_kernwin: + +choose_create_embedded_chobj(*args) + choose_create_embedded_chobj(_self) -> PyObject * + +Help on function choose_entry in module ida_kernwin: + +choose_entry(*args) + choose_entry(title) -> ea_t + + + Choose an entry point ( 'ui_choose' , 'chtype_entry' ). + + @param title: chooser title (C++: const char *) + @return: ea of selected entry point, BADADDR if none selected + +Help on function choose_enum in module ida_kernwin: + +choose_enum(*args) + choose_enum(title, default_id) -> enum_t + + + Choose an enum ( 'ui_choose' , 'chtype_enum' ). + + @param title: chooser title (C++: const char *) + @param default_id: id of enum to select by default (C++: enum_t) + @return: enum id of selected enum, BADNODE if none selected + +Help on function choose_enum_by_value in module ida_kernwin: + +choose_enum_by_value(*args) + choose_enum_by_value(title, default_id, value, nbytes) -> enum_t + + + Choose an enum, restricted by value & size ( 'ui_choose' , + 'chtype_enum_by_value_and_size' ). If the given value cannot be found + initially, this function will ask if the user would like to import a + standard enum. + + @param title: chooser title (C++: const char *) + @param default_id: id of enum to select by default (C++: enum_t) + @param value: value to search for (C++: uval_t) + @param nbytes: size of value (C++: int) + @return: enum id of selected (or imported) enum, BADNODE if none was + found + +Help on function choose_find in module ida_kernwin: + +choose_find(*args) + choose_find(title) -> PyObject * + +Help on function choose_func in module ida_kernwin: + +choose_func(*args) + choose_func(title, default_ea) -> func_t * + + + Choose a function ( 'ui_choose' , 'chtype_func' ). + + @param title: chooser title (C++: const char *) + @param default_ea: ea of function to select by default (C++: ea_t) + @return: pointer to function that was selected, NULL if none selected + +Help on function choose_get_widget in module ida_kernwin: + +choose_get_widget(*args) + choose_get_widget(_self) -> TWidget * + +Help on function choose_idasgn in module ida_kernwin: + +choose_idasgn(*args) + choose_idasgn() -> PyObject * + + + Opens the signature chooser + + @return: None or the selected signature name + +Help on function choose_name in module ida_kernwin: + +choose_name(*args) + choose_name(title) -> ea_t + + + Choose a name ( 'ui_choose' , 'chtype_name' ). + + @param title: chooser title (C++: const char *) + @return: ea of selected name, BADADDR if none selected + +Help on function choose_refresh in module ida_kernwin: + +choose_refresh(*args) + choose_refresh(_self) + +Help on function choose_segm in module ida_kernwin: + +choose_segm(*args) + choose_segm(title, default_ea) -> segment_t * + + + Choose a segment ( 'ui_choose' , 'chtype_segm' ). + + @param title: chooser title (C++: const char *) + @param default_ea: ea of segment to select by default (C++: ea_t) + @return: pointer to segment that was selected, NULL if none selected + +Help on function choose_srcp in module ida_kernwin: + +choose_srcp(*args) + choose_srcp(title) -> sreg_range_t * + + + Choose a segment register change point ( 'ui_choose' , 'chtype_srcp' + ). + + @param title: chooser title (C++: const char *) + @return: pointer to segment register range of selected change point, + NULL if none selected + +Help on function choose_stkvar_xref in module ida_kernwin: + +choose_stkvar_xref(*args) + choose_stkvar_xref(pfn, mptr) -> ea_t + + + Choose an xref to a stack variable ( 'ui_choose' , 'chtype_name' ). + + @param pfn: function (C++: func_t *) + @param mptr: variable (C++: member_t *) + @return: ea of the selected xref, BADADDR if none selected + +Help on function choose_struc in module ida_kernwin: + +choose_struc(*args) + choose_struc(title) -> struc_t * + + + Choose a structure ( 'ui_choose' , 'chtype_segm' ). + + @param title: chooser title; (C++: const char *) + @return: pointer to structure that was selected, NULL if none selected + +Help on function choose_til in module ida_kernwin: + +choose_til(*args) + choose_til() -> str + + + Choose a type library ( 'ui_choose' , 'chtype_idatil' ). + +Help on function choose_xref in module ida_kernwin: + +choose_xref(*args) + choose_xref(to) -> ea_t + + + Choose an xref to an address ( 'ui_choose' , 'chtype_xref' ). + + @param to: referenced address (C++: ea_t) + @return: ea of selected xref, BADADDR if none selected + +Help on class chooser_item_attrs_t in module ida_kernwin: + +class chooser_item_attrs_t(__builtin__.object) + | Proxy of C++ chooser_item_attrs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> chooser_item_attrs_t + | + | __repr__ = _swig_repr(self) + | + | reset(self, *args) + | reset(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | color + | chooser_item_attrs_t_color_get(self) -> bgcolor_t + | + | flags + | chooser_item_attrs_t_flags_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_chooser_item_attrs_t(self) + +Help on function clear_refresh_request in module ida_kernwin: + +clear_refresh_request(*args) + clear_refresh_request(mask) + +Help on class cli_t in module ida_kernwin: + +class cli_t(ida_idaapi.pyidc_opaque_object_t) + | cli_t wrapper class. + | + | This class allows you to implement your own command line interface handlers. + | + | Method resolution order: + | cli_t + | ida_idaapi.pyidc_opaque_object_t + | __builtin__.object + | + | Methods defined here: + | + | __del__(self) + | + | __init__(self) + | + | register(self, flags=0, sname=None, lname=None, hint=None) + | Registers the CLI. + | + | @param flags: Feature bits. No bits are defined yet, must be 0 + | @param sname: Short name (displayed on the button) + | @param lname: Long name (displayed in the menu) + | @param hint: Hint for the input line + | + | @return Boolean: True-Success, False-Failed + | + | unregister(self) + | Unregisters the CLI (if it was registered) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function close_chooser in module ida_kernwin: + +close_chooser(*args) + close_chooser(title) -> bool + + + Close a non-modal chooser ( 'ui_close_chooser' ). + + @param title: window title of chooser to close (C++: const char *) + @return: success + +Help on function close_widget in module ida_kernwin: + +close_widget(*args) + close_widget(widget, options) + + + Close widget ( 'ui_close_widget' , only gui version). + + @param widget: pointer to the widget to close (C++: TWidget *) + @param options: Form close flags (C++: int) + +Help on function clr_cancelled in module ida_kernwin: + +clr_cancelled(*args) + clr_cancelled() + + + Clear "Cancelled" flag ( 'ui_clr_cancelled' ) + +Help on function create_code_viewer in module ida_kernwin: + +create_code_viewer(*args) + create_code_viewer(custview, flags=0, parent=None) -> TWidget * + + + Create a code viewer ( 'ui_create_code_viewer' ). A code viewer + contains on the left side a widget representing the line numbers, and + on the right side, the child widget passed as parameter. It will + inherit its title from the child widget. + + @param custview: the custom view to be added (C++: TWidget *) + @param flags: Code viewer flags (C++: int) + @param parent: widget to contain the new code viewer (C++: TWidget *) + +Help on function create_empty_widget in module ida_kernwin: + +create_empty_widget(*args) + create_empty_widget(title, icon=-1) -> TWidget * + + + Create an empty widget, serving as a container for custom user widgets + + @param title (C++: const char *) + @param icon (C++: int) + +Help on function create_menu in module ida_kernwin: + +create_menu(*args) + create_menu(name, label, menupath=None) -> bool + + + Create a menu with the given name, label and optional position, either + in the menubar, or as a submenu. If 'menupath' is non-NULL, it + provides information about where the menu should be positioned. First, + IDA will try and resolve the corresponding menu by its name. If such + an existing menu is found and is present in the menubar, then the new + menu will be inserted in the menubar before it. Otherwise, IDA will + try to resolve 'menupath' as it would for 'attach_action_to_menu()' + and, if found, add the new menu like so: + + // The new 'My menu' submenu will appear in the 'Comments' submenu + // before the 'Enter comment..." command + create_menu("(...)", "My menu", "Edit/Comments/Enter comment..."); + + or + + // The new 'My menu' submenu will appear at the end of the + // 'Comments' submenu. + create_menu("(...)", "My menu", "Edit/Comments/"); + + If the above fails, the new menu will be appended to the menubar. + + @param name: name of menu (must be unique) (C++: const char *) + @param label: label of menu (C++: const char *) + @param menupath: where should the menu be inserted (C++: const char *) + @return: success + +Help on function create_toolbar in module ida_kernwin: + +create_toolbar(*args) + create_toolbar(name, label, before=None, flags=0) -> bool + + + Create a toolbar with the given name, label and optional position + + @param name: name of toolbar (must be unique) (C++: const char *) + @param label: label of toolbar (C++: const char *) + @param before: if non-NULL, the toolbar before which the new toolbar + will be inserted (C++: const char *) + @param flags: a combination of create toolbar flags , to determine + toolbar position (C++: int) + @return: success + +Help on function custom_viewer_jump in module ida_kernwin: + +custom_viewer_jump(*args) + custom_viewer_jump(v, loc, flags=0) -> bool + + + Append 'loc' to the viewer's history, and cause the viewer to display + it. + + @param v: (TWidget *) (C++: TWidget *) + @param loc: (const lochist_entry_t &) (C++: const lochist_entry_t + &) + @param flags: (uint32) or'ed combination of CVNF_* values (C++: + uint32) + @return: success + +Help on function del_hotkey in module ida_kernwin: + +del_hotkey(*args) + del_hotkey(pyctx) -> bool + + + Deletes a previously registered function hotkey + + @param ctx: Hotkey context previously returned by add_hotkey() + + @return: Boolean. + +Help on function del_idc_hotkey in module ida_kernwin: + +del_idc_hotkey(*args) + del_idc_hotkey(hotkey) -> bool + + + Delete IDC function hotkey ( 'ui_del_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + +Help on function delete_menu in module ida_kernwin: + +delete_menu(*args) + delete_menu(name) -> bool + + + Delete an existing menu + + @param name: name of menu (C++: const char *) + @return: success + +Help on function delete_toolbar in module ida_kernwin: + +delete_toolbar(*args) + delete_toolbar(name) -> bool + + + Delete an existing toolbar + + @param name: name of toolbar (C++: const char *) + @return: success + +Help on function detach_action_from_menu in module ida_kernwin: + +detach_action_from_menu(*args) + detach_action_from_menu(menupath, name) -> bool + + + Detach an action from the menu ( 'ui_detach_action_from_menu' ). + + @param menupath: path to the menu item (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on function detach_action_from_popup in module ida_kernwin: + +detach_action_from_popup(*args) + detach_action_from_popup(widget, name) -> bool + + + Remove a previously-registered action, from the list of 'permanent' + context menu actions for this widget ( 'ui_detach_action_from_popup' + ). This only makes sense if the action has been added to 'widget's + list of permanent popup actions by calling attach_action_to_popup in + 'permanent' mode. + + @param widget: target widget (C++: TWidget *) + @param name: action name (C++: const char *) + +Help on function detach_action_from_toolbar in module ida_kernwin: + +detach_action_from_toolbar(*args) + detach_action_from_toolbar(toolbar_name, name) -> bool + + + Detach an action from the toolbar ( 'ui_detach_action_from_toolbar' ). + + @param toolbar_name: the name of the toolbar (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on class disasm_line_t in module ida_kernwin: + +class disasm_line_t(__builtin__.object) + | Proxy of C++ disasm_line_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> disasm_line_t + | __init__(self, other) -> disasm_line_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | at + | disasm_line_t_at_get(self) -> place_t + | + | bg_color + | disasm_line_t_bg_color_get(self) -> bgcolor_t + | + | is_default + | disasm_line_t_is_default_get(self) -> bool + | + | line + | disasm_line_t_line_get(self) -> qstring * + | + | prefix_color + | disasm_line_t_prefix_color_get(self) -> color_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_disasm_line_t(self) + +Help on class disasm_text_t in module ida_kernwin: + +class disasm_text_t(__builtin__.object) + | Proxy of C++ qvector< disasm_line_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> disasm_line_t + | + | __init__(self, *args) + | __init__(self) -> disasm_text_t + | __init__(self, x) -> disasm_text_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> disasm_line_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> disasm_line_t + | begin(self) -> disasm_line_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> disasm_line_t + | end(self) -> disasm_line_t + | + | erase(self, *args) + | erase(self, it) -> disasm_line_t + | erase(self, first, last) -> disasm_line_t + | + | extract(self, *args) + | extract(self) -> disasm_line_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=disasm_line_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> disasm_line_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> disasm_line_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_disasm_text_t(self) + +Help on function display_copyright_warning in module ida_kernwin: + +display_copyright_warning(*args) + display_copyright_warning() -> bool + + + Display copyright warning ( 'ui_copywarn' ). + + @return: yes/no + +Help on function display_widget in module ida_kernwin: + +display_widget(*args) + display_widget(widget, options, dest_ctrl=None) + + + Display a widget, dock it if not done before + + @param widget: widget to display (C++: TWidget *) + @param options: Widget open flags (C++: uint32) + @param dest_ctrl: where to dock: if NULL or invalid then use the + active docker if there is not create a new tab + relative to current active tab (C++: const char *) + +Help on function ea2str in module ida_kernwin: + +ea2str(*args) + ea2str(ea) -> str + + + Convert linear address to UTF-8 string. + + + @param ea (C++: ea_t) + +Help on function ea_viewer_history_push_and_jump in module ida_kernwin: + +ea_viewer_history_push_and_jump(*args) + ea_viewer_history_push_and_jump(v, ea, x, y, lnnum) -> bool + + + Push current location in the history and jump to the given location ( + 'ui_ea_viewer_history_push_and_jump' ). This will jump in the given ea + viewer and also in other synchronized views. + + @param v: ea viewer (C++: TWidget *) + @param ea: jump destination (C++: ea_t) + @param x: coords on screen (C++: int) + @param y: coords on screen (C++: int) + @param lnnum: desired line number of given address (C++: int) + +Help on function enable_chooser_item_attrs in module ida_kernwin: + +enable_chooser_item_attrs(*args) + enable_chooser_item_attrs(chooser_caption, enable) -> bool + + + Enable item-specific attributes for chooser items ( + 'ui_enable_chooser_item_attrs' ). For example: color list items + differently depending on a criterium.If enabled, the chooser will + generate ui_get_chooser_item_attrsevents that can be intercepted by a + plugin to modify the item attributes.This event is generated only in + the GUI version of IDA.Specifying 'CH_ATTRS' bit at the chooser + creation time has the same effect. + + @param chooser_caption (C++: const char *) + @param enable (C++: bool) + @return: success + +Help on class enumplace_t in module ida_kernwin: + +class enumplace_t(place_t) + | Proxy of C++ enumplace_t class. + | + | Method resolution order: + | enumplace_t + | place_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bmask + | enumplace_t_bmask_get(self) -> bmask_t + | + | idx + | enumplace_t_idx_get(self) -> size_t + | + | serial + | enumplace_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | value + | enumplace_t_value_get(self) -> uval_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enumplace_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) + | _print(self, out_buf, ud) + | + | adjust(self, *args) + | adjust(self, ud) + | + | beginning(self, *args) + | beginning(self, ud) -> bool + | + | clone(self, *args) + | clone(self) -> place_t + | + | compare(self, *args) + | compare(self, t2) -> int + | + | copyfrom(self, *args) + | copyfrom(self, _from) + | + | deserialize(self, *args) + | deserialize(self, _in) -> bool + | + | ending(self, *args) + | ending(self, ud) -> bool + | + | enter(self, *args) + | enter(self, arg2) -> place_t + | + | generate(self, *args) + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) + | id(self) -> int + | + | leave(self, *args) + | leave(self, arg2) + | + | makeplace(self, *args) + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) + | name(self) -> char const * + | + | next(self, *args) + | next(self, ud) -> bool + | + | prev(self, *args) + | prev(self, ud) -> bool + | + | rebase(self, *args) + | rebase(self, arg2) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | toea(self, *args) + | toea(self) -> ea_t + | + | touval(self, *args) + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on function error in module ida_kernwin: + +error(*args) + error(format) + + + Display a fatal message in a message box and quit IDA + + @param format: message to print + +Help on function execute_sync in module ida_kernwin: + +execute_sync(*args) + execute_sync(py_callable, reqf) -> int + + + Executes a function in the context of the main thread. + If the current thread not the main thread, then the call is queued and + executed afterwards. + + @param callable: A python callable object, must return an integer value + @param reqf: one of MFF_ flags + @return: -1 or the return value of the callable + +Help on function execute_ui_requests in module ida_kernwin: + +execute_ui_requests(*args) + execute_ui_requests(py_list) -> bool + + + Inserts a list of callables into the UI message processing queue. + When the UI is ready it will call one callable. + A callable can request to be called more than once if it returns True. + + @param callable_list: A list of python callable objects. + @note: A callable should return True if it wants to be called more than once. + @return: Boolean. False if the list contains a non callabale item + +Help on function find_widget in module ida_kernwin: + +find_widget(*args) + find_widget(caption) -> TWidget * + + + Find widget with the specified caption (only gui version) ( + 'ui_find_widget' ). NB: this callback works only with the tabbed + widgets! + + @param caption: title of tab, or window title if widget is not tabbed + (C++: const char *) + @return: pointer to the TWidget, NULL if none is found + +Help on function formchgcbfa_close in module ida_kernwin: + +formchgcbfa_close(*args) + formchgcbfa_close(p_fa, close_normally) + +Help on function formchgcbfa_enable_field in module ida_kernwin: + +formchgcbfa_enable_field(*args) + formchgcbfa_enable_field(p_fa, fid, enable) -> bool + +Help on function formchgcbfa_get_field_value in module ida_kernwin: + +formchgcbfa_get_field_value(*args) + formchgcbfa_get_field_value(p_fa, fid, ft, sz) -> PyObject * + +Help on function formchgcbfa_get_focused_field in module ida_kernwin: + +formchgcbfa_get_focused_field(*args) + formchgcbfa_get_focused_field(p_fa) -> int + +Help on function formchgcbfa_move_field in module ida_kernwin: + +formchgcbfa_move_field(*args) + formchgcbfa_move_field(p_fa, fid, x, y, w, h) -> bool + +Help on function formchgcbfa_refresh_field in module ida_kernwin: + +formchgcbfa_refresh_field(*args) + formchgcbfa_refresh_field(p_fa, fid) + +Help on function formchgcbfa_set_field_value in module ida_kernwin: + +formchgcbfa_set_field_value(*args) + formchgcbfa_set_field_value(p_fa, fid, ft, py_val) -> bool + +Help on function formchgcbfa_set_focused_field in module ida_kernwin: + +formchgcbfa_set_focused_field(*args) + formchgcbfa_set_focused_field(p_fa, fid) -> bool + +Help on function formchgcbfa_show_field in module ida_kernwin: + +formchgcbfa_show_field(*args) + formchgcbfa_show_field(p_fa, fid, show) -> bool + +Help on function free_custom_icon in module ida_kernwin: + +free_custom_icon(*args) + free_custom_icon(icon_id) + + + Frees an icon loaded with load_custom_icon() + +Help on function gen_disasm_text in module ida_kernwin: + +gen_disasm_text(*args) + gen_disasm_text(text, ea1, ea2, truncate_lines) + + + Generate disassembly text for a range. + + @param text: result (C++: text_t &) + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @param truncate_lines: (on idainfo::margin ) (C++: bool) + +Help on function get_action_checkable in module ida_kernwin: + +get_action_checkable(*args) + get_action_checkable(name) -> bool + + + Get an action's checkability ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_checked in module ida_kernwin: + +get_action_checked(*args) + get_action_checked(name) -> bool + + + Get an action's checked state ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_icon in module ida_kernwin: + +get_action_icon(*args) + get_action_icon(name) -> bool + + + Get an action's icon ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_label in module ida_kernwin: + +get_action_label(*args) + get_action_label(name) -> str + + + Get an action's label ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_shortcut in module ida_kernwin: + +get_action_shortcut(*args) + get_action_shortcut(name) -> str + + + Get an action's shortcut ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_state in module ida_kernwin: + +get_action_state(*args) + get_action_state(name) -> bool + + + Get an action's state ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_tooltip in module ida_kernwin: + +get_action_tooltip(*args) + get_action_tooltip(name) -> str + + + Get an action's tooltip ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_visibility in module ida_kernwin: + +get_action_visibility(*args) + get_action_visibility(name) -> bool + + + Get an action's visibility ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_active_modal_widget in module ida_kernwin: + +get_active_modal_widget(*args) + get_active_modal_widget() -> TWidget * + + + Get the current, active modal TWidget instance. Note that in this + context, the "wait dialog" is not considered: this function will + return NULL even if it is currently shown. + + @return: TWidget * the active modal widget, or NULL + +Help on function get_addon_info in module ida_kernwin: + +get_addon_info(*args) + get_addon_info(id, info) -> bool + + + Get info about a registered addon with a given product code. info->cb + must be valid! NB: all pointers are invalidated by next call to + register_addon or get_addon_info + + @param id (C++: const char *) + @param info (C++: addon_info_t *) + @return: false if not found + +Help on function get_addon_info_idx in module ida_kernwin: + +get_addon_info_idx(*args) + get_addon_info_idx(index, info) -> bool + + + Get info about a registered addon with specific index. info->cb must + be valid! NB: all pointers are invalidated by next call to + register_addon or get_addon_info + + @param index (C++: int) + @param info (C++: addon_info_t *) + @return: false if index is out of range + +Help on function get_chooser_data in module ida_kernwin: + +get_chooser_data(*args) + get_chooser_data(chooser_caption, n) -> PyObject * + + + Get the text corresponding to the index N in the chooser data. Use -1 + to get the header. + + @param chooser_caption (C++: const char *) + @param n (C++: int) + +Help on function get_chooser_obj in module ida_kernwin: + +get_chooser_obj(*args) + get_chooser_obj(chooser_caption) -> void * + + + Get the underlying object of the specified chooser ( + 'ui_get_chooser_obj' ).This is object is chooser-specific. + + @param chooser_caption (C++: const char *) + @return: the object that was used to create the chooser + +Help on function get_curline in module ida_kernwin: + +get_curline(*args) + get_curline() -> char const * + + + Get current line from the disassemble window ( 'ui_get_curline' ). + + @return: cptr current line with the color codes (use tag_remove() to + remove the color codes) + +Help on function get_current_viewer in module ida_kernwin: + +get_current_viewer(*args) + get_current_viewer() -> TWidget * + + + Get current ida viewer (idaview or custom viewer) ( + 'ui_get_current_viewer' ) + +Help on function get_current_widget in module ida_kernwin: + +get_current_widget(*args) + get_current_widget() -> TWidget * + + + Get a pointer to the current widget ( 'ui_get_current_widget' ). + +Help on function get_cursor in module ida_kernwin: + +get_cursor(*args) + get_cursor() -> bool + + + Get the cursor position on the screen ( 'ui_get_cursor' ).coordinates + are 0-based + +Help on function get_custom_viewer_curline in module ida_kernwin: + +get_custom_viewer_curline(*args) + get_custom_viewer_curline(custom_viewer, mouse) -> char const * + + + Get current line of custom viewer ( 'ui_get_custom_viewer_curline' ). + The returned line contains color codes + + @param custom_viewer: view (C++: TWidget *) + @param mouse: mouse position (otherwise cursor position) (C++: bool) + @return: pointer to contents of current line + +Help on function get_custom_viewer_location in module ida_kernwin: + +get_custom_viewer_location(*args) + get_custom_viewer_location(out, custom_viewer, mouse=False) -> bool + + + Get the current location in a custom viewer ( + 'ui_get_custom_viewer_location' ). + + + @param out (C++: lochist_entry_t *) + @param custom_viewer (C++: TWidget *) + @param mouse (C++: bool) + +Help on function get_custom_viewer_place in module ida_kernwin: + +get_custom_viewer_place(*args) + get_custom_viewer_place(custom_viewer, mouse) -> place_t + + + Get current place in a custom viewer ( 'ui_get_curplace' ).See also + the more complete 'get_custom_viewer_location()' + + @param custom_viewer: view (C++: TWidget *) + @param mouse: mouse position (otherwise cursor position) (C++: bool) + +Help on function get_ea_viewer_history_info in module ida_kernwin: + +get_ea_viewer_history_info(*args) + get_ea_viewer_history_info(nback, nfwd, v) -> bool + + + Get information about what's in the history ( + 'ui_ea_viewer_history_info' ). + + @param nback: number of available back steps (C++: int *) + @param nfwd: number of available forward steps (C++: int *) + @param v: ea viewer (C++: TWidget *) + +Help on function get_hexdump_ea in module ida_kernwin: + +get_hexdump_ea(*args) + get_hexdump_ea(hexdump_num) -> ea_t + + + Get the current address in a hex view. + + @param hexdump_num: number of hexview window (C++: int) + +Help on function get_highlight in module ida_kernwin: + +get_highlight(*args) + get_highlight(v) -> PyObject * + + + Returns the currently highlighted identifier and flags + + @return: a tuple (text, flags), or None if nothing + is highlighted or in case of error. + +Help on function get_kernel_version in module ida_kernwin: + +get_kernel_version(*args) + get_kernel_version() -> str + + + Get IDA kernel version (in a string like "5.1"). + +Help on function get_key_code in module ida_kernwin: + +get_key_code(*args) + get_key_code(keyname) -> ushort + + + Get keyboard key code by its name ( 'ui_get_key_code' ) + + + @param keyname (C++: const char *) + +Help on function get_navband_ea in module ida_kernwin: + +get_navband_ea(*args) + get_navband_ea(pixel) -> ea_t + + + Translate the pixel position on the navigation band, into an address. + + + @param pixel (C++: int) + +Help on function get_navband_pixel in module ida_kernwin: + +get_navband_pixel(*args) + get_navband_pixel(ea) -> int + + + Maps an address, onto a pixel coordinate within the navband + + @param ea: The address to map + @return: a list [pixel, is_vertical] + +Help on function get_opnum in module ida_kernwin: + +get_opnum(*args) + get_opnum() -> int + + + Get current operand number, -1 means no operand ( 'ui_get_opnum' ) + +Help on function get_output_curline in module ida_kernwin: + +get_output_curline(*args) + get_output_curline(mouse) -> str + + + Get current line of output window ( 'ui_get_output_curline' ). + + @param mouse: current for mouse pointer? (C++: bool) + @return: false if output contains no text + +Help on function get_output_cursor in module ida_kernwin: + +get_output_cursor(*args) + get_output_cursor() -> bool + + + Get coordinates of the output window's cursor ( 'ui_get_output_cursor' + ).coordinates are 0-basedthis function will succeed even if the output + window is not visible + +Help on function get_output_selected_text in module ida_kernwin: + +get_output_selected_text(*args) + get_output_selected_text() -> str + + + Returns selected text from output window ( + 'ui_get_output_selected_text' ). + + @return: true if there is a selection + +Help on function get_place_class in module ida_kernwin: + +get_place_class(*args) + get_place_class(out_flags, out_sdk_version, id) -> place_t + + + Get information about a previously-registered 'place_t' class. See + also 'register_place_class()' . + + @param out_flags: output flags (can be NULL) (C++: int *) + @param out_sdk_version: sdk version the place was created with (can be + NULL) (C++: int *) + @param id: place class ID (C++: int) + @return: the place_t template, or NULL if not found + +Help on function get_place_class_id in module ida_kernwin: + +get_place_class_id(*args) + get_place_class_id(name) -> int + + + Get the place class ID for the place that has been registered as + 'name'. + + @param name: the class name (C++: const char *) + @return: the place class ID, or -1 if not found + +Help on function get_place_class_template in module ida_kernwin: + +get_place_class_template(*args) + get_place_class_template(id) -> place_t + + + See 'get_place_class()' + + + @param id (C++: int) + +Help on function get_registered_actions in module ida_kernwin: + +get_registered_actions(*args) + get_registered_actions() -> PyObject * + + + Get a list of all currently-registered actions + +Help on function get_screen_ea in module ida_kernwin: + +get_screen_ea(*args) + get_screen_ea() -> ea_t + + + Get the address at the screen cursor ( 'ui_screenea' ) + +Help on function get_tab_size in module ida_kernwin: + +get_tab_size(*args) + get_tab_size(path) -> int + + + Get the size of a tab in spaces ( 'ui_get_tab_size' ). + + @param path: the path of the source view for which the tab size is + requested. if NULL, the default size is returned. (C++: + const char *) + +Help on function get_user_strlist_options in module ida_kernwin: + +get_user_strlist_options(*args) + get_user_strlist_options(out) + +Help on function get_view_renderer_type in module ida_kernwin: + +get_view_renderer_type(*args) + get_view_renderer_type(v) -> tcc_renderer_type_t + + + Get the type of renderer currently in use in the given view ( + 'ui_get_renderer_type' ) + + + @param v (C++: TWidget *) + +Help on function get_viewer_place_type in module ida_kernwin: + +get_viewer_place_type(*args) + get_viewer_place_type(viewer) -> tcc_place_type_t + + + Get the type of 'place_t' instances a viewer uses & creates ( + 'ui_get_viewer_place_type' ). + + + @param viewer (C++: TWidget *) + +Help on function get_viewer_user_data in module ida_kernwin: + +get_viewer_user_data(*args) + get_viewer_user_data(viewer) -> void * + + + Get the user data from a custom viewer ( 'ui_get_viewer_user_data' ) + + + @param viewer (C++: TWidget *) + +Help on function get_widget_title in module ida_kernwin: + +get_widget_title(*args) + get_widget_title(widget) -> str + + + Get the TWidget's title ( 'ui_get_widget_title' ). + + + @param widget (C++: TWidget *) + +Help on function get_widget_type in module ida_kernwin: + +get_widget_type(*args) + get_widget_type(widget) -> twidget_type_t + + + Get the type of the TWidget * ( 'ui_get_widget_type' ). + + + @param widget (C++: TWidget *) + +Help on function get_window_id in module ida_kernwin: + +get_window_id(*args) + get_window_id(name=None) -> void * + + + Get the system-specific window ID (GUI version only) + + @param name (C++: const char *) + @return: the low-level window ID + +Help on function hide_wait_box in module ida_kernwin: + +hide_wait_box(*args) + hide_wait_box() + + + Hide the "Please wait dialog box". + +Help on class idaplace_t in module ida_kernwin: + +class idaplace_t(place_t) + | Proxy of C++ idaplace_t class. + | + | Method resolution order: + | idaplace_t + | place_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ea + | idaplace_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idaplace_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) + | _print(self, out_buf, ud) + | + | adjust(self, *args) + | adjust(self, ud) + | + | beginning(self, *args) + | beginning(self, ud) -> bool + | + | clone(self, *args) + | clone(self) -> place_t + | + | compare(self, *args) + | compare(self, t2) -> int + | + | copyfrom(self, *args) + | copyfrom(self, _from) + | + | deserialize(self, *args) + | deserialize(self, _in) -> bool + | + | ending(self, *args) + | ending(self, ud) -> bool + | + | enter(self, *args) + | enter(self, arg2) -> place_t + | + | generate(self, *args) + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) + | id(self) -> int + | + | leave(self, *args) + | leave(self, arg2) + | + | makeplace(self, *args) + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) + | name(self) -> char const * + | + | next(self, *args) + | next(self, ud) -> bool + | + | prev(self, *args) + | prev(self, ud) -> bool + | + | rebase(self, *args) + | rebase(self, arg2) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | toea(self, *args) + | toea(self) -> ea_t + | + | touval(self, *args) + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on function info in module ida_kernwin: + +info(*args) + info(format) + +Help on function install_command_interpreter in module ida_kernwin: + +install_command_interpreter(*args) + install_command_interpreter(py_obj) -> int + + + Install command line interpreter ( 'ui_install_cli' ) + +Help on function internal_register_place_class in module ida_kernwin: + +internal_register_place_class(*args) + internal_register_place_class(tmplate, flags, owner, sdk_version) -> int + +Help on function is_action_enabled in module ida_kernwin: + +is_action_enabled(*args) + is_action_enabled(s) -> bool + + + Check if the given action state is one of AST_ENABLE*. + + + @param s (C++: action_state_t) + +Help on function is_chooser_widget in module ida_kernwin: + +is_chooser_widget(*args) + is_chooser_widget(t) -> bool + + + Does the given widget type specify a chooser widget? + + + @param t (C++: twidget_type_t) + +Help on function is_idaq in module ida_kernwin: + +is_idaq(*args) + is_idaq() -> bool + + + Returns True or False depending if IDAPython is hosted by IDAQ + +Help on function is_msg_inited in module ida_kernwin: + +is_msg_inited(*args) + is_msg_inited() -> bool + + + Can we use msg() functions? + +Help on function is_place_class_ea_capable in module ida_kernwin: + +is_place_class_ea_capable(*args) + is_place_class_ea_capable(id) -> bool + + + See 'get_place_class()' + + + @param id (C++: int) + +Help on function is_refresh_requested in module ida_kernwin: + +is_refresh_requested(*args) + is_refresh_requested(mask) -> bool + + + Get a refresh request state + + @param mask: Window refresh flags (C++: uint64) + @return: the state (set or cleared) + +Help on class jobj_wrapper_t in module ida_kernwin: + +class jobj_wrapper_t(__builtin__.object) + | Proxy of C++ jobj_wrapper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | get_dict(self, *args) + | get_dict(self) -> PyObject * + | + | ---------------------------------------------------------------------- + | 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 + +Help on function jumpto in module ida_kernwin: + +jumpto(*args) + jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool + jumpto(custom_viewer, place, x, y) -> bool + + + Jump to the specified address ( 'ui_jumpto' ). + + @param ea: destination (C++: ea_t) + @param opnum: -1: don't change x coord (C++: int) + @param uijmp_flags: Jump flags (C++: int) + @return: success + +Help on function load_custom_icon in module ida_kernwin: + +load_custom_icon(file_name=None, data=None, format=None) + Loads a custom icon and returns an identifier that can be used with other APIs + + If file_name is passed then the other two arguments are ignored. + + @param file_name: The icon file name + @param data: The icon data + @param format: The icon data format + + @return: Icon id or 0 on failure. + Use free_custom_icon() to free it + + + Load an icon from a file ( 'ui_load_custom_icon_file' ). Also see + 'load_custom_icon(const void *, unsigned int, const char *)' + + @return: icon id + +Help on function load_dbg_dbginfo in module ida_kernwin: + +load_dbg_dbginfo(*args) + load_dbg_dbginfo(path, li=None, base=BADADDR, verbose=False) -> bool + + + Load debugging information from a file. + + @param path: path to file (C++: const char *) + @param li: loader input. if NULL, check DBG_NAME_KEY (C++: linput_t *) + @param base: loading address (C++: ea_t) + @param verbose: dump status to message window (C++: bool) + +Help on function lookup_key_code in module ida_kernwin: + +lookup_key_code(*args) + lookup_key_code(key, shift, is_qt) -> ushort + + + Get shortcut code previously created by 'ui_get_key_code' . + + @param key: key constant (C++: int) + @param shift: modifiers (C++: int) + @param is_qt: are we using gui version? (C++: bool) + +Help on function msg in module ida_kernwin: + +msg(*args) + msg(o) -> PyObject * + + + Display an UTF-8 string in the message window + + The result of the stringification of the arguments + will be treated as an UTF-8 string. + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + +Help on function msg_clear in module ida_kernwin: + +msg_clear(*args) + msg_clear() + + + Clear the "Output window". + +Help on function msg_get_lines in module ida_kernwin: + +msg_get_lines(*args) + msg_get_lines(count=-1) -> PyObject * + + + Retrieve the last 'count' lines from the output window, in reverse + order (from most recent, to least recent) + + @param count: The number of lines to retrieve. -1 means: all (C++: + int) + +Help on function msg_save in module ida_kernwin: + +msg_save(*args) + msg_save(path) -> bool + + + Save the "Output window" contents into a file + + @param path: The path of the file to save the contents into. An empty + path means that the user will be prompted for the + destination and, if the file already exists, the user + will be asked to confirm before overriding its contents. + Upon return, 'path' will contain the path that the user + chose. (C++: qstring &) + @return: success + +Help on function nomem in module ida_kernwin: + +nomem(*args) + nomem(format) + +Help on function open_bpts_window in module ida_kernwin: + +open_bpts_window(*args) + open_bpts_window(ea) -> TWidget * + + + Open the breakpoints window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_calls_window in module ida_kernwin: + +open_calls_window(*args) + open_calls_window(ea) -> TWidget * + + + Open the function calls window ( 'ui_open_builtin' ). + + @param ea (C++: ea_t) + @return: pointer to resulting window + +Help on function open_disasm_window in module ida_kernwin: + +open_disasm_window(*args) + open_disasm_window(window_title, ranges=None) -> TWidget * + + + Open a disassembly view ( 'ui_open_builtin' ). + + @param window_title: title of view to open (C++: const char *) + @param ranges: if != NULL, then display a flow chart with the + specified ranges (C++: const rangevec_t *) + @return: pointer to resulting window + +Help on function open_enums_window in module ida_kernwin: + +open_enums_window(*args) + open_enums_window(const_id=BADADDR) -> TWidget * + + + Open the enums window ( 'ui_open_builtin' ). + + @param const_id: index of entry to select by default (C++: tid_t) + @return: pointer to resulting window + +Help on function open_exports_window in module ida_kernwin: + +open_exports_window(*args) + open_exports_window(ea) -> TWidget * + + + Open the exports window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_frame_window in module ida_kernwin: + +open_frame_window(*args) + open_frame_window(pfn, offset) -> TWidget * + + + Open the frame window for the given function ( 'ui_open_builtin' ). + + @param pfn: function to analyze (C++: func_t *) + @param offset: offset where the cursor is placed (C++: uval_t) + @return: pointer to resulting window if 'pfn' is a valid function and + the window was displayed, NULL otherwise + +Help on function open_funcs_window in module ida_kernwin: + +open_funcs_window(*args) + open_funcs_window(ea) -> TWidget * + + + Open the functions window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_hexdump_window in module ida_kernwin: + +open_hexdump_window(*args) + open_hexdump_window(window_title) -> TWidget * + + + Open a hexdump view ( 'ui_open_builtin' ). + + @param window_title: title of view to open (C++: const char *) + @return: pointer to resulting window + +Help on function open_imports_window in module ida_kernwin: + +open_imports_window(*args) + open_imports_window(ea) -> TWidget * + + + Open the exports window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_loctypes_window in module ida_kernwin: + +open_loctypes_window(*args) + open_loctypes_window(ordinal) -> TWidget * + + + Open the local types window ( 'ui_open_builtin' ). + + @param ordinal: ordinal of type to select by default (C++: int) + @return: pointer to resulting window + +Help on function open_modules_window in module ida_kernwin: + +open_modules_window(*args) + open_modules_window() -> TWidget * + + + Open the modules window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_names_window in module ida_kernwin: + +open_names_window(*args) + open_names_window(ea) -> TWidget * + + + Open the names window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_navband_window in module ida_kernwin: + +open_navband_window(*args) + open_navband_window(ea, zoom) -> TWidget * + + + Open the navigation band window ( 'ui_open_builtin' ). + + @param ea: sets the address of the navband arrow (C++: ea_t) + @param zoom: sets the navband zoom level (C++: int) + @return: pointer to resulting window + +Help on function open_notepad_window in module ida_kernwin: + +open_notepad_window(*args) + open_notepad_window() -> TWidget * + + + Open the notepad window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_problems_window in module ida_kernwin: + +open_problems_window(*args) + open_problems_window(ea) -> TWidget * + + + Open the problems window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_segments_window in module ida_kernwin: + +open_segments_window(*args) + open_segments_window(ea) -> TWidget * + + + Open the segments window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_segregs_window in module ida_kernwin: + +open_segregs_window(*args) + open_segregs_window(ea) -> TWidget * + + + Open the segment registers window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_selectors_window in module ida_kernwin: + +open_selectors_window(*args) + open_selectors_window() -> TWidget * + + + Open the selectors window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_signatures_window in module ida_kernwin: + +open_signatures_window(*args) + open_signatures_window() -> TWidget * + + + Open the signatures window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_stack_window in module ida_kernwin: + +open_stack_window(*args) + open_stack_window() -> TWidget * + + + Open the call stack window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_strings_window in module ida_kernwin: + +open_strings_window(*args) + open_strings_window(ea, selstart=BADADDR, selend=BADADDR) -> TWidget * + + + Open the strings window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @param selstart: only display strings that occur within this range + (C++: ea_t) + @param selend: only display strings that occur within this range (C++: + ea_t) + @return: pointer to resulting window + +Help on function open_structs_window in module ida_kernwin: + +open_structs_window(*args) + open_structs_window(id=BADADDR, offset=0) -> TWidget * + + + Open the structs window ( 'ui_open_builtin' ). + + @param id: index of entry to select by default (C++: tid_t) + @param offset: offset where the cursor is placed (C++: uval_t) + @return: pointer to resulting window + +Help on function open_threads_window in module ida_kernwin: + +open_threads_window(*args) + open_threads_window() -> TWidget * + + + Open the threads window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_tils_window in module ida_kernwin: + +open_tils_window(*args) + open_tils_window() -> TWidget * + + + Open the type libraries window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_trace_window in module ida_kernwin: + +open_trace_window(*args) + open_trace_window() -> TWidget * + + + Open the trace window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_url in module ida_kernwin: + +open_url(*args) + open_url(url) + + + Open the given url ( 'ui_open_url' ) + + + @param url (C++: const char *) + +Help on function open_xrefs_window in module ida_kernwin: + +open_xrefs_window(*args) + open_xrefs_window(ea) -> TWidget * + + + Open the cross references window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on class place_t in module ida_kernwin: + +class place_t(__builtin__.object) + | Proxy of C++ place_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, out_buf, ud) + | + | adjust(self, *args) + | adjust(self, ud) + | + | beginning(self, *args) + | beginning(self, ud) -> bool + | + | clone(self, *args) + | clone(self) -> place_t + | + | compare(self, *args) + | compare(self, t2) -> int + | + | copyfrom(self, *args) + | copyfrom(self, _from) + | + | deserialize(self, *args) + | deserialize(self, _in) -> bool + | + | ending(self, *args) + | ending(self, ud) -> bool + | + | enter(self, *args) + | enter(self, arg2) -> place_t + | + | generate(self, *args) + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) + | id(self) -> int + | + | leave(self, *args) + | leave(self, arg2) + | + | makeplace(self, *args) + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) + | name(self) -> char const * + | + | next(self, *args) + | next(self, ud) -> bool + | + | prev(self, *args) + | prev(self, ud) -> bool + | + | rebase(self, *args) + | rebase(self, arg2) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | toea(self, *args) + | toea(self) -> ea_t + | + | touval(self, *args) + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | as_enumplace_t(*args) + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_place_t(self) + +Help on function place_t_as_enumplace_t in module ida_kernwin: + +place_t_as_enumplace_t(*args) + place_t_as_enumplace_t(p) -> enumplace_t + +Help on function place_t_as_idaplace_t in module ida_kernwin: + +place_t_as_idaplace_t(*args) + place_t_as_idaplace_t(p) -> idaplace_t + +Help on function place_t_as_simpleline_place_t in module ida_kernwin: + +place_t_as_simpleline_place_t(*args) + place_t_as_simpleline_place_t(p) -> simpleline_place_t + +Help on function place_t_as_structplace_t in module ida_kernwin: + +place_t_as_structplace_t(*args) + place_t_as_structplace_t(p) -> structplace_t + +Help on function plgform_close in module ida_kernwin: + +plgform_close(*args) + plgform_close(py_link, options) + +Help on function plgform_get_widget in module ida_kernwin: + +plgform_get_widget(*args) + plgform_get_widget(py_link) -> TWidget * + +Help on function plgform_new in module ida_kernwin: + +plgform_new(*args) + plgform_new() -> PyObject * + +Help on function plgform_show in module ida_kernwin: + +plgform_show(*args) + plgform_show(py_link, py_obj, caption, options=WOPN_DP_TAB|WOPN_RESTORE) -> bool + +Help on function process_ui_action in module ida_kernwin: + +process_ui_action(*args) + process_ui_action(name, flags=0) -> bool + + + Invokes an IDA UI action by name + + @param name: action name + @return: Boolean + +Help on function py_get_ask_form in module ida_kernwin: + +py_get_ask_form(*args) + py_get_ask_form() -> size_t + +Help on function py_get_open_form in module ida_kernwin: + +py_get_open_form(*args) + py_get_open_form() -> size_t + +Help on function py_load_custom_icon_data in module ida_kernwin: + +py_load_custom_icon_data(*args) + py_load_custom_icon_data(data, format) -> int + +Help on function py_load_custom_icon_fn in module ida_kernwin: + +py_load_custom_icon_fn(*args) + py_load_custom_icon_fn(filename) -> int + +Help on function py_register_compiled_form in module ida_kernwin: + +py_register_compiled_form(*args) + py_register_compiled_form(py_form) + +Help on function py_ss_restore_callback in module ida_kernwin: + +py_ss_restore_callback(*args) + py_ss_restore_callback(err_msg, userdata) + +Help on function py_unregister_compiled_form in module ida_kernwin: + +py_unregister_compiled_form(*args) + py_unregister_compiled_form(py_form) + +Help on function pyidag_bind in module ida_kernwin: + +pyidag_bind(*args) + pyidag_bind(_self) -> bool + +Help on function pyidag_unbind in module ida_kernwin: + +pyidag_unbind(*args) + pyidag_unbind(_self) -> bool + +Help on function pyscv_add_line in module ida_kernwin: + +pyscv_add_line(*args) + pyscv_add_line(py_this, py_sl) -> bool + +Help on function pyscv_clear_lines in module ida_kernwin: + +pyscv_clear_lines(*args) + pyscv_clear_lines(py_this) -> PyObject * + +Help on function pyscv_close in module ida_kernwin: + +pyscv_close(*args) + pyscv_close(py_this) + +Help on function pyscv_count in module ida_kernwin: + +pyscv_count(*args) + pyscv_count(py_this) -> size_t + +Help on function pyscv_del_line in module ida_kernwin: + +pyscv_del_line(*args) + pyscv_del_line(py_this, nline) -> bool + +Help on function pyscv_edit_line in module ida_kernwin: + +pyscv_edit_line(*args) + pyscv_edit_line(py_this, nline, py_sl) -> bool + +Help on function pyscv_get_current_line in module ida_kernwin: + +pyscv_get_current_line(*args) + pyscv_get_current_line(py_this, mouse, notags) -> PyObject * + +Help on function pyscv_get_current_word in module ida_kernwin: + +pyscv_get_current_word(*args) + pyscv_get_current_word(py_this, mouse) -> PyObject * + +Help on function pyscv_get_line in module ida_kernwin: + +pyscv_get_line(*args) + pyscv_get_line(py_this, nline) -> PyObject * + +Help on function pyscv_get_pos in module ida_kernwin: + +pyscv_get_pos(*args) + pyscv_get_pos(py_this, mouse) -> PyObject * + +Help on function pyscv_get_selection in module ida_kernwin: + +pyscv_get_selection(*args) + pyscv_get_selection(py_this) -> PyObject * + +Help on function pyscv_get_widget in module ida_kernwin: + +pyscv_get_widget(*args) + pyscv_get_widget(py_this) -> TWidget * + +Help on function pyscv_init in module ida_kernwin: + +pyscv_init(*args) + pyscv_init(py_link, title) -> PyObject * + +Help on function pyscv_insert_line in module ida_kernwin: + +pyscv_insert_line(*args) + pyscv_insert_line(py_this, nline, py_sl) -> bool + +Help on function pyscv_is_focused in module ida_kernwin: + +pyscv_is_focused(*args) + pyscv_is_focused(py_this) -> bool + +Help on function pyscv_jumpto in module ida_kernwin: + +pyscv_jumpto(*args) + pyscv_jumpto(py_this, ln, x, y) -> bool + +Help on function pyscv_patch_line in module ida_kernwin: + +pyscv_patch_line(*args) + pyscv_patch_line(py_this, nline, offs, value) -> bool + +Help on function pyscv_refresh in module ida_kernwin: + +pyscv_refresh(*args) + pyscv_refresh(py_this) -> bool + +Help on function pyscv_show in module ida_kernwin: + +pyscv_show(*args) + pyscv_show(py_this) -> bool + +Help on function qcleanline in module ida_kernwin: + +qcleanline(*args) + qcleanline(cmt_char='\0', flags=((1 << 0)|(1 << 1))|(1 << 2)) -> str + + + Performs some cleanup operations to a line. + + @param cmt_char: character that denotes the start of a comment: the + entire text is removed if the line begins with this + character (ignoring leading spaces) all text after + (and including) this character is removed if flag + CLNL_FINDCMT is set (C++: char) + @param flags: a combination of line cleanup flags . defaults to + CLNL_TRIM (C++: uint32) + @return: length of line + +Help on class quick_widget_commands_t in module ida_kernwin: + +class quick_widget_commands_t + | # ---------------------------------------------------------------------- + | # This provides an alternative to register_action()+attach_action_to_popup_menu() + | + | Methods defined here: + | + | __init__(self, callback) + | + | add(self, caption, flags, menu_index, icon, emb, shortcut) + | + | populate_popup(self, widget, popup) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _ah_t = + | + | + | _cmd_t = + +Help on function read_range_selection in module ida_kernwin: + +read_range_selection(*args) + read_range_selection(v) -> bool + + + Get the address range for the selected range boundaries, this is the + convenient function for 'read_selection()' + + @param v: view, NULL means the last active window containing addresses + (C++: TWidget *) + +Help on function read_selection in module ida_kernwin: + +read_selection(*args) + read_selection(v, p1, p2) -> bool + + + Read the user selection, and store its information in p0 (from) and p1 (to). + + This can be used as follows: + + + >>> p0 = idaapi.twinpos_t() + p1 = idaapi.twinpos_t() + view = idaapi.get_current_viewer() + idaapi.read_selection(view, p0, p1) + + + At that point, p0 and p1 hold information for the selection. + But, the 'at' property of p0 and p1 is not properly typed. + To specialize it, call #place() on it, passing it the view + they were retrieved from. Like so: + + + >>> place0 = p0.place(view) + place1 = p1.place(view) + + + This will effectively "cast" the place into a specialized type, + holding proper information, depending on the view type (e.g., + disassembly, structures, enums, ...) + + @param view: The view to retrieve the selection for. + @param p0: Storage for the "from" part of the selection. + @param p1: Storage for the "to" part of the selection. + @return: a bool value indicating success. + +Help on function refresh_chooser in module ida_kernwin: + +refresh_chooser(*args) + refresh_chooser(title) -> bool + + + Mark a non-modal custom chooser for a refresh ( 'ui_refresh_chooser' + ). + + @param title: title of chooser (C++: const char *) + @return: success + +Help on function refresh_choosers in module ida_kernwin: + +refresh_choosers(*args) + refresh_choosers() + +Help on function refresh_idaview in module ida_kernwin: + +refresh_idaview(*args) + refresh_idaview() + + + Refresh marked windows ( 'ui_refreshmarked' ) + +Help on function refresh_idaview_anyway in module ida_kernwin: + +refresh_idaview_anyway(*args) + refresh_idaview_anyway() + + + Refresh all disassembly views ( 'ui_refresh' ), forces an immediate + refresh. Please consider 'request_refresh()' instead + +Help on function refresh_navband in module ida_kernwin: + +refresh_navband(*args) + refresh_navband(force) + + + Refresh navigation band if changed ( 'ui_refresh_navband' ). + + @param force: refresh regardless (C++: bool) + +Help on function register_action in module ida_kernwin: + +register_action(*args) + register_action(desc) -> bool + + + Create a new action ( 'ui_register_action' ). After an action has been + created, it is possible to attach it to menu items ( + 'attach_action_to_menu()' ), or to popup menus ( + 'attach_action_to_popup()' ).Because the actions will need to call the + handler's activate() and update() methods at any time, you shouldn't + build your action handler on the stack.Please see the SDK's "ht_view" + plugin for an example how to register actions. + + @param desc: action to register (C++: const action_desc_t &) + @return: success + +Help on function register_addon in module ida_kernwin: + +register_addon(*args) + register_addon(info) -> int + + + Register an add-on. Show its info in the About box. For plugins, + should be called from init() function (repeated calls with the same + product code overwrite previous entries) returns: index of the add-on + in the list, or -1 on error + + @param info (C++: const addon_info_t *) + +Help on function register_and_attach_to_menu in module ida_kernwin: + +register_and_attach_to_menu(*args) + register_and_attach_to_menu(menupath, name, label, shortcut, flags, handler, owner) -> bool + + + Helper.You are not encouraged to use this, as it mixes flags for both + 'register_action()' , and 'attach_action_to_menu()' .The only reason + for its existence is to make it simpler to port existing plugins to + the new actions API. + + @param menupath (C++: const char *) + @param name (C++: const char *) + @param label (C++: const char *) + @param shortcut (C++: const char *) + @param flags (C++: int) + @param handler (C++: action_handler_t *) + @param owner (C++: const plugin_t *) + +Help on function register_timer in module ida_kernwin: + +register_timer(*args) + register_timer(interval, py_callback) -> PyObject * + + + Register a timer + + @param interval: Interval in milliseconds + @param callback: A Python callable that takes no parameters and returns an integer. + The callback may return: + -1 : to unregister the timer + >= 0 : the new or same timer interval + @return: None or a timer object + +Help on function remove_command_interpreter in module ida_kernwin: + +remove_command_interpreter(*args) + remove_command_interpreter(cli_idx) + + + Remove command line interpreter ( 'ui_install_cli' ) + +Help on class renderer_pos_info_t in module ida_kernwin: + +class renderer_pos_info_t(__builtin__.object) + | Proxy of C++ renderer_pos_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_pos_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cx + | renderer_pos_info_t_cx_get(self) -> short + | + | cy + | renderer_pos_info_t_cy_get(self) -> short + | + | node + | renderer_pos_info_t_node_get(self) -> int + | + | sx + | renderer_pos_info_t_sx_get(self) -> short + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_renderer_pos_info_t(self) + +Help on function repaint_custom_viewer in module ida_kernwin: + +repaint_custom_viewer(*args) + repaint_custom_viewer(custom_viewer) + + + Repaint the given widget immediately ( 'ui_repaint_qwidget' ) + + + @param custom_viewer (C++: TWidget *) + +Help on function replace_wait_box in module ida_kernwin: + +replace_wait_box(*args) + replace_wait_box(format) + + + Replace the label of "Please wait dialog box". + + + @param format (C++: const char *) + +Help on function request_refresh in module ida_kernwin: + +request_refresh(*args) + request_refresh(mask, cnd=True) + + + Request a refresh of a builtin window. + + @param mask: Window refresh flags (C++: uint64) + @param cnd: set if true or clear flag otherwise (C++: bool) + +Help on function restore_database_snapshot in module ida_kernwin: + +restore_database_snapshot(*args) + restore_database_snapshot(ss, pyfunc_or_none, pytuple_or_none) -> PyObject * + + + Restore a database snapshot. Note: This call is asynchronous. When it + is completed, the callback will be triggered. + + @param ss: snapshot instance (see build_snapshot_tree() ) (C++: const + snapshot_t *) + @return: false if restoration could not be started (snapshot file was + not found). If the returned value is True then check if + the operation succeeded from the callback. + +Help on function set_cancelled in module ida_kernwin: + +set_cancelled(*args) + set_cancelled() + + + Set "Cancelled" flag ( 'ui_set_cancelled' ) + +Help on function set_code_viewer_handler in module ida_kernwin: + +set_code_viewer_handler(*args) + set_code_viewer_handler(code_viewer, handler_id, handler_or_data) -> void * + + + Set a handler for a code viewer event ( 'ui_set_custom_viewer_handler' + ). + + @param code_viewer: the code viewer (C++: TWidget *) + @param handler_id: one of CDVH_ in custom_viewer_handler_id_t (C++: + custom_viewer_handler_id_t) + @param handler_or_data: can be a handler or data. see examples in + Functions: custom viewer handlers (C++: void + *) + @return: old value of the handler or data + +Help on function set_code_viewer_is_source in module ida_kernwin: + +set_code_viewer_is_source(*args) + set_code_viewer_is_source(code_viewer) -> bool + + + Specify that the given code viewer is used to display source code ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + +Help on function set_code_viewer_line_handlers in module ida_kernwin: + +set_code_viewer_line_handlers(*args) + set_code_viewer_line_handlers(code_viewer, click_handler, popup_handler, dblclick_handler, drawicon_handler, linenum_handler) + + + Set handlers for code viewer line events. Any of these handlers may be + NULL + + @param code_viewer (C++: TWidget *) + @param click_handler (C++: code_viewer_lines_click_t *) + @param popup_handler (C++: code_viewer_lines_click_t *) + @param dblclick_handler (C++: code_viewer_lines_click_t *) + @param drawicon_handler (C++: code_viewer_lines_icon_t *) + @param linenum_handler (C++: code_viewer_lines_linenum_t *) + +Help on function set_code_viewer_lines_alignment in module ida_kernwin: + +set_code_viewer_lines_alignment(*args) + set_code_viewer_lines_alignment(code_viewer, align) -> bool + + + Set alignment for lines in a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param align (C++: int) + +Help on function set_code_viewer_lines_icon_margin in module ida_kernwin: + +set_code_viewer_lines_icon_margin(*args) + set_code_viewer_lines_icon_margin(code_viewer, margin) -> bool + + + Set space allowed for icons in the margin of a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param margin (C++: int) + +Help on function set_code_viewer_lines_radix in module ida_kernwin: + +set_code_viewer_lines_radix(*args) + set_code_viewer_lines_radix(code_viewer, radix) -> bool + + + Set radix for values displayed in a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param radix (C++: int) + +Help on function set_code_viewer_user_data in module ida_kernwin: + +set_code_viewer_user_data(*args) + set_code_viewer_user_data(code_viewer, ud) -> bool + + + Set the user data on a code viewer ( 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param ud (C++: void *) + +Help on function set_custom_viewer_qt_aware in module ida_kernwin: + +set_custom_viewer_qt_aware(*args) + set_custom_viewer_qt_aware(custom_viewer) -> bool + + + Allow the given viewer to interpret Qt events ( + 'ui_set_custom_viewer_handler' ) + + + @param custom_viewer (C++: TWidget *) + +Help on function set_dock_pos in module ida_kernwin: + +set_dock_pos(*args) + set_dock_pos(src_ctrl, dest_ctrl, orient, left=0, top=0, right=0, bottom=0) -> bool + + + Sets the dock orientation of a window relatively to another window. + + @param src: Source docking control + @param dest: Destination docking control + @param orient: One of DOR_XXXX constants + @param left, top, right, bottom: These parameter if DOR_FLOATING is used, or if you want to specify the width of docked windows + @return: Boolean + + Example: + set_dock_pos('Structures', 'Enums', DOR_RIGHT) <- docks the Structures window to the right of Enums window + +Help on function set_highlight in module ida_kernwin: + +set_highlight(*args) + set_highlight(viewer, str, flags) -> bool + + + Set the highlighted identifier in the viewer ( 'ui_set_highlight' ). + + @param viewer: the viewer (C++: TWidget *) + @param str: the text to match, or NULL to remove current (C++: const + char *) + @param flags: combination of HIF_... bits (see set_highlightr flags ) + (C++: int) + @return: false if an error occurred + +Help on function set_nav_colorizer in module ida_kernwin: + +set_nav_colorizer(*args) + set_nav_colorizer(new_py_colorizer) -> PyObject * + + + Set a new colorizer for the navigation band. + + The 'callback' is a function of 2 arguments: + - ea (the EA to colorize for) + - nbytes (the number of bytes at that EA) + and must return a 'long' value. + + The previous colorizer is returned, allowing + the new 'callback' to use 'call_nav_colorizer' + with it. + + Note that the previous colorizer is returned + only the first time set_nav_colorizer() is called: + due to the way the colorizers API is defined in C, + it is impossible to chain more than 2 colorizers + in IDAPython: the original, IDA-provided colorizer, + and a user-provided one. + + Example: colorizer inverting the color provided by the IDA colorizer: + def my_colorizer(ea, nbytes): + global ida_colorizer + orig = idaapi.call_nav_colorizer(ida_colorizer, ea, nbytes) + return long(~orig) + + ida_colorizer = idaapi.set_nav_colorizer(my_colorizer) + +Help on function set_view_renderer_type in module ida_kernwin: + +set_view_renderer_type(*args) + set_view_renderer_type(v, rt) + + + Set the type of renderer to use in a view ( 'ui_set_renderer_type' ) + + + @param v (C++: TWidget *) + @param rt (C++: tcc_renderer_type_t) + +Help on function show_wait_box in module ida_kernwin: + +show_wait_box(*args) + show_wait_box(message) + + + Display a dialog box with "Please wait...". If the text message starts + with "HIDECANCEL\n", the cancel buttonwon't be displayed in the dialog + box and you don't need to checkfor cancellations with + 'user_cancelled()' . Plugins must call 'hide_wait_box()' to close the + dialog box, otherwise the user interface will be disabled.Note that, + if the wait dialog is already visible, 'show_wait_box()' will1) push + the currently-displayed text on a stack2) display the new textThen, + when 'hide_wait_box()' is called, if that stack isn't empty its + toplabel will be popped and restored in the wait dialog.This implies + that a plugin should call 'hide_wait_box()' exactly as manytimes as it + called 'show_wait_box()' , or the wait dialog might remainvisible and + block the UI.Also, in case the plugin knows the wait dialog is + currently displayed,alternatively it can call 'replace_wait_box()' , + to replace the text of thedialog without pushing the currently- + displayed text on the stack. + +Help on class simplecustviewer_t in module ida_kernwin: + +class simplecustviewer_t(__builtin__.object) + | The base class for implementing simple custom viewers + | + | Methods defined here: + | + | AddLine(self, line, fgcolor=None, bgcolor=None) + | Adds a colored line to the view + | @return: Boolean + | + | ClearLines(self) + | Clears all the lines + | + | Close(self) + | Destroys the view. + | One has to call Create() afterwards. + | Show() can be called and it will call Create() internally. + | @return: Boolean + | + | Count(self) + | Returns the number of lines in the view + | + | Create(self, title) + | Creates the custom view. This should be the first method called after instantiation + | + | @param title: The title of the view + | @return: Boolean whether it succeeds or fails. It may fail if a window with the same title is already open. + | In this case better close existing windows + | + | DelLine(self, lineno) + | Deletes an existing line + | @return: Boolean + | + | EditLine(self, lineno, line, fgcolor=None, bgcolor=None) + | Edits an existing line. + | @return: Boolean + | + | GetCurrentLine(self, mouse=0, notags=0) + | Returns the current line. + | @param mouse: Current line at mouse pos + | @param notags: If True then tag_remove() will be called before returning the line + | @return: Returns the current line (colored or uncolored) or None on failure + | + | GetCurrentWord(self, mouse=0) + | Returns the current word + | @param mouse: Use mouse position or cursor position + | @return: None if failed or a String containing the current word at mouse or cursor + | + | GetLine(self, lineno) + | Returns a line + | @param lineno: The line number + | @return: + | Returns a tuple (colored_line, fgcolor, bgcolor) or None + | + | GetLineNo(self, mouse=0) + | Calls GetPos() and returns the current line number or -1 on failure + | + | GetPos(self, mouse=0) + | Returns the current cursor or mouse position. + | @param mouse: return mouse position + | @return: Returns a tuple (lineno, x, y) + | + | GetSelection(self) + | Returns the selected range or None + | @return: + | - tuple(x1, y1, x2, y2) + | - None if no selection + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | InsertLine(self, lineno, line, fgcolor=None, bgcolor=None) + | Inserts a line in the given position + | @return: Boolean + | + | IsFocused(self) + | Returns True if the current view is the focused view + | + | Jump(self, lineno, x=0, y=0) + | + | OnPopup(self, form, popup_handle) + | Context menu popup is about to be shown. Create items dynamically if you wish + | @return: Boolean. True if you handled the event + | + | PatchLine(self, lineno, offs, value) + | Patches an existing line character at the given offset. This is a low level function. You must know what you're doing + | + | Refresh(self) + | + | RefreshCurrent(self) + | Refreshes the current line only + | + | Show(self) + | Shows an already created view. It the view was close, then it will call Create() for you + | @return: Boolean + | + | __init__(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _simplecustviewer_t__make_sl_arg = __make_sl_arg(line, fgcolor=None, bgcolor=None) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | UI_Hooks_Trampoline = + +Help on class simpleline_place_t in module ida_kernwin: + +class simpleline_place_t(place_t) + | Proxy of C++ simpleline_place_t class. + | + | Method resolution order: + | simpleline_place_t + | place_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | n + | simpleline_place_t_n_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_simpleline_place_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) + | _print(self, out_buf, ud) + | + | adjust(self, *args) + | adjust(self, ud) + | + | beginning(self, *args) + | beginning(self, ud) -> bool + | + | clone(self, *args) + | clone(self) -> place_t + | + | compare(self, *args) + | compare(self, t2) -> int + | + | copyfrom(self, *args) + | copyfrom(self, _from) + | + | deserialize(self, *args) + | deserialize(self, _in) -> bool + | + | ending(self, *args) + | ending(self, ud) -> bool + | + | enter(self, *args) + | enter(self, arg2) -> place_t + | + | generate(self, *args) + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) + | id(self) -> int + | + | leave(self, *args) + | leave(self, arg2) + | + | makeplace(self, *args) + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) + | name(self) -> char const * + | + | next(self, *args) + | next(self, ud) -> bool + | + | prev(self, *args) + | prev(self, ud) -> bool + | + | rebase(self, *args) + | rebase(self, arg2) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | toea(self, *args) + | toea(self) -> ea_t + | + | touval(self, *args) + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on class simpleline_t in module ida_kernwin: + +class simpleline_t(__builtin__.object) + | Proxy of C++ simpleline_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> simpleline_t + | __init__(self, c, str) -> simpleline_t + | __init__(self, str) -> simpleline_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bgcolor + | simpleline_t_bgcolor_get(self) -> bgcolor_t + | + | color + | simpleline_t_color_get(self) -> color_t + | + | line + | simpleline_t_line_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_simpleline_t(self) + +Help on function str2ea in module ida_kernwin: + +str2ea(*args) + str2ea(str, screenEA=BADADDR) -> ea_t + + + Converts a string express to EA. The expression evaluator may be called as well. + + @return: BADADDR or address value + +Help on function str2user in module ida_pro: + +str2user(*args) + str2user(str) -> PyObject * + + + Insert C-style escape characters to string + + @return: new string with escape characters inserted + +Help on function strarray in module ida_kernwin: + +strarray(*args) + strarray(array, array_size, code) -> char const * + + + Find a line with the specified code in the 'strarray_t' array. If the + last element of the array has code==0 then it is considered as the + default entry.If no default entry exists and the code is not found, + 'strarray()' returns "". + + @param array (C++: const strarray_t *) + @param array_size (C++: size_t) + @param code (C++: int) + +Help on class strarray_t in module ida_kernwin: + +class strarray_t(__builtin__.object) + | Proxy of C++ strarray_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strarray_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | strarray_t_code_get(self) -> int + | + | text + | strarray_t_text_get(self) -> char const * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_strarray_t(self) + +Help on class structplace_t in module ida_kernwin: + +class structplace_t(place_t) + | Proxy of C++ structplace_t class. + | + | Method resolution order: + | structplace_t + | place_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | idx + | structplace_t_idx_get(self) -> uval_t + | + | offset + | structplace_t_offset_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_structplace_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) + | _print(self, out_buf, ud) + | + | adjust(self, *args) + | adjust(self, ud) + | + | beginning(self, *args) + | beginning(self, ud) -> bool + | + | clone(self, *args) + | clone(self) -> place_t + | + | compare(self, *args) + | compare(self, t2) -> int + | + | copyfrom(self, *args) + | copyfrom(self, _from) + | + | deserialize(self, *args) + | deserialize(self, _in) -> bool + | + | ending(self, *args) + | ending(self, ud) -> bool + | + | enter(self, *args) + | enter(self, arg2) -> place_t + | + | generate(self, *args) + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) + | id(self) -> int + | + | leave(self, *args) + | leave(self, arg2) + | + | makeplace(self, *args) + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) + | name(self) -> char const * + | + | next(self, *args) + | next(self, ud) -> bool + | + | prev(self, *args) + | prev(self, ud) -> bool + | + | rebase(self, *args) + | rebase(self, arg2) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | toea(self, *args) + | toea(self) -> ea_t + | + | touval(self, *args) + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on class sync_source_t in module ida_kernwin: + +class sync_source_t(__builtin__.object) + | Proxy of C++ sync_source_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, _o) -> bool + | + | __init__(self, *args) + | __init__(self, _view) -> sync_source_t + | __init__(self, _regname) -> sync_source_t + | + | __ne__(self, *args) + | __ne__(self, _o) -> bool + | + | __repr__ = _swig_repr(self) + | + | get_register(self, *args) + | get_register(self) -> char const * + | + | get_widget(self, *args) + | get_widget(self) -> TWidget const * + | + | is_register(self, *args) + | is_register(self) -> bool + | + | is_widget(self, *args) + | is_widget(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sync_source_t(self) + +Help on function sync_sources in module ida_kernwin: + +sync_sources(*args) + sync_sources(what, _with, sync) -> bool + + + [Un]synchronize sources + + @param what (C++: const sync_source_t &) + @param _with (C++: const sync_source_t &) + @param sync (C++: bool) + @return: success + +Help on function take_database_snapshot in module ida_kernwin: + +take_database_snapshot(*args) + take_database_snapshot(ss) -> PyObject * + + + Take a database snapshot ( 'ui_take_database_snapshot' ). + + @param ss: in/out parameter. in: description, flags out: filename, + id (C++: snapshot_t *) + @return: success + +Help on class textctrl_info_t in module ida_kernwin: + +class textctrl_info_t(ida_idaapi.py_clinked_object_t) + | Class representing textctrl_info_t + | + | Method resolution order: + | textctrl_info_t + | ida_idaapi.py_clinked_object_t + | ida_idaapi.pyidc_opaque_object_t + | __builtin__.object + | + | Methods defined here: + | + | __get_flags__(self) + | Returns the flags value + | + | __get_tabsize__(self) + | Returns the tabsize value + | + | __init__(self, text='', flags=0, tabsize=0) + | + | __set_flags__(self, flags) + | Sets the flags value + | + | __set_tabsize__(self, tabsize) + | Sets the tabsize value + | + | _create_clink(self) + | + | _del_clink(self, lnk) + | + | _get_clink_ptr(self) + | + | _textctrl_info_t__get_text = __get_text(self) + | Sets the text value + | + | _textctrl_info_t__set_text = __set_text(self, s) + | Sets the text value + | + | assign(self, other) + | Copies the contents of 'other' to 'self' + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | Returns the flags value + | + | tabsize + | Returns the tabsize value + | + | text + | Sets the text value + | + | value + | Sets the text value + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | TXTF_ACCEPTTABS = 2 + | + | TXTF_AUTOINDENT = 1 + | + | TXTF_FIXEDFONT = 32 + | + | TXTF_MODIFIED = 16 + | + | TXTF_READONLY = 4 + | + | TXTF_SELECTED = 8 + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_idaapi.py_clinked_object_t: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.py_clinked_object_t: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function textctrl_info_t_assign in module ida_kernwin: + +textctrl_info_t_assign(*args) + textctrl_info_t_assign(_self, other) -> bool + +Help on function textctrl_info_t_create in module ida_kernwin: + +textctrl_info_t_create(*args) + textctrl_info_t_create() -> PyObject * + +Help on function textctrl_info_t_destroy in module ida_kernwin: + +textctrl_info_t_destroy(*args) + textctrl_info_t_destroy(py_obj) -> bool + +Help on function textctrl_info_t_get_clink in module ida_kernwin: + +textctrl_info_t_get_clink(*args) + textctrl_info_t_get_clink(_self) -> textctrl_info_t * + +Help on function textctrl_info_t_get_clink_ptr in module ida_kernwin: + +textctrl_info_t_get_clink_ptr(*args) + textctrl_info_t_get_clink_ptr(_self) -> PyObject * + +Help on function textctrl_info_t_get_flags in module ida_kernwin: + +textctrl_info_t_get_flags(*args) + textctrl_info_t_get_flags(_self) -> unsigned int + +Help on function textctrl_info_t_get_tabsize in module ida_kernwin: + +textctrl_info_t_get_tabsize(*args) + textctrl_info_t_get_tabsize(_self) -> unsigned int + +Help on function textctrl_info_t_get_text in module ida_kernwin: + +textctrl_info_t_get_text(*args) + textctrl_info_t_get_text(_self) -> char const * + +Help on function textctrl_info_t_set_flags in module ida_kernwin: + +textctrl_info_t_set_flags(*args) + textctrl_info_t_set_flags(_self, flags) -> bool + +Help on function textctrl_info_t_set_tabsize in module ida_kernwin: + +textctrl_info_t_set_tabsize(*args) + textctrl_info_t_set_tabsize(_self, tabsize) -> bool + +Help on function textctrl_info_t_set_text in module ida_kernwin: + +textctrl_info_t_set_text(*args) + textctrl_info_t_set_text(_self, s) -> bool + +Help on class twinpos_t in module ida_kernwin: + +class twinpos_t(__builtin__.object) + | Proxy of C++ twinpos_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> twinpos_t + | __init__(self, t) -> twinpos_t + | __init__(self, t, x0) -> twinpos_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | place(self, view) + | + | place_as_enumplace_t(self) + | + | place_as_idaplace_t(self) + | + | place_as_simpleline_place_t(self) + | + | place_as_structplace_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | at + | twinpos_t_at_get(self) -> place_t + | + | thisown + | The membership flag + | + | x + | twinpos_t_x_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_twinpos_t(self) + +Help on function ui_load_new_file in module ida_kernwin: + +ui_load_new_file(*args) + ui_load_new_file(temp_file, filename, pli, neflags, ploaders) -> bool + + + Display a load file dialog and load file ( 'ui_load_file' ). + + @param temp_file: name of the file with the extracted archive member. + (C++: qstring *) + @param filename: the name of input file as is, library or archive name + (C++: qstring *) + @param pli: loader input source, may be changed to point to temp_file + (C++: linput_t **) + @param neflags: combination of NEF_... bits (see Load file flags ) + (C++: ushort) + @param ploaders: list of loaders which accept file, may be changed for + loaders of temp_file (C++: load_info_t **) + +Help on class ui_requests_t in module ida_kernwin: + +class ui_requests_t(__builtin__.object) + | Proxy of C++ ui_requests_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ui_requests_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ui_requests_t(self) + +Help on function ui_run_debugger in module ida_kernwin: + +ui_run_debugger(*args) + ui_run_debugger(dbgopts, exename, argc, argv) -> bool + + + Load a debugger plugin and run the specified program ( 'ui_run_dbg' ). + + @param dbgopts: value of the -r command line switch (C++: const char + *) + @param exename: name of the file to run (C++: const char *) + @param argc: number of arguments for the executable (C++: int) + @param argv: argument vector (C++: const char *const *) + @return: success + +Help on function unmark_selection in module ida_kernwin: + +unmark_selection(*args) + unmark_selection() + + + Unmark selection ( 'ui_unmarksel' ) + +Help on function unregister_action in module ida_kernwin: + +unregister_action(*args) + unregister_action(name) -> bool + + + Delete a previously-registered action ( 'ui_unregister_action' ). + + @param name: name of action (C++: const char *) + @return: success + +Help on function unregister_timer in module ida_kernwin: + +unregister_timer(*args) + unregister_timer(py_timerctx) -> bool + + + Unregister a timer + + @param timer_obj: a timer object previously returned by a register_timer() + @return: Boolean + @note: After the timer has been deleted, the timer_obj will become invalid. + +Help on function update_action_checkable in module ida_kernwin: + +update_action_checkable(*args) + update_action_checkable(name, checkable) -> bool + + + Update an action's checkability ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param checkable: new checkability (C++: bool) + @return: success + +Help on function update_action_checked in module ida_kernwin: + +update_action_checked(*args) + update_action_checked(name, checked) -> bool + + + Update an action's checked state ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param checked: new checked state (C++: bool) + @return: success + +Help on function update_action_icon in module ida_kernwin: + +update_action_icon(*args) + update_action_icon(name, icon) -> bool + + + Update an action's icon ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param icon: new icon id (C++: int) + @return: success + +Help on function update_action_label in module ida_kernwin: + +update_action_label(*args) + update_action_label(name, label) -> bool + + + Update an action's label ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param label: new label (C++: const char *) + @return: success + +Help on function update_action_shortcut in module ida_kernwin: + +update_action_shortcut(*args) + update_action_shortcut(name, shortcut) -> bool + + + Update an action's shortcut ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param shortcut: new shortcut (C++: const char *) + @return: success + +Help on function update_action_state in module ida_kernwin: + +update_action_state(*args) + update_action_state(name, state) -> bool + + + Update an action's state ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param state: new state (C++: action_state_t) + @return: success + +Help on function update_action_tooltip in module ida_kernwin: + +update_action_tooltip(*args) + update_action_tooltip(name, tooltip) -> bool + + + Update an action's tooltip ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param tooltip: new tooltip (C++: const char *) + @return: success + +Help on function update_action_visibility in module ida_kernwin: + +update_action_visibility(*args) + update_action_visibility(name, visible) -> bool + + + Update an action's visibility ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param visible: new visibility (C++: bool) + @return: success + +Help on function user_cancelled in module ida_kernwin: + +user_cancelled(*args) + user_cancelled() -> bool + + + Test the ctrl-break flag ( 'ui_test_cancelled' ). + +Help on class view_mouse_event_location_t in module ida_kernwin: + +class view_mouse_event_location_t(__builtin__.object) + | Proxy of C++ view_mouse_event_location_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> view_mouse_event_location_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | view_mouse_event_location_t_ea_get(self) -> ea_t + | + | item + | view_mouse_event_location_t_item_get(self) -> selection_item_t const * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = view_mouse_event_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | button + | view_mouse_event_t_button_get(self) -> vme_button_t + | + | location + | view_mouse_event_t_location_get(self) -> view_mouse_event_location_t + | + | renderer_pos + | view_mouse_event_t_renderer_pos_get(self) -> renderer_pos_info_t + | + | rtype + | view_mouse_event_t_rtype_get(self) -> tcc_renderer_type_t + | + | state + | view_mouse_event_t_state_get(self) -> view_event_state_t + | + | thisown + | The membership flag + | + | x + | view_mouse_event_t_x_get(self) -> uint32 + | + | y + | view_mouse_event_t_y_get(self) -> uint32 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_view_mouse_event_t(self) + +Help on function warning in module ida_kernwin: + +warning(*args) + warning(format) + + + Display a message in a message box + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + The user will be able to hide messages if they appear twice in a row on + the screen + +=== ida_kernwin EPYDOC INJECTIONS === +ida_kernwin.ACF_HAS_SELECTION +""" +there is currently a valid selection +""" + +ida_kernwin.ACF_XTRN_EA +""" +cur_ea is in 'externs' segment +""" + +ida_kernwin.ADF_NO_UNDO +""" +useful for actions that do not modify the database. + +the action does not create an undo point. +""" + +ida_kernwin.ADF_OWN_HANDLER +""" +handler is owned by the action; it'll be destroyed when the action is +unregistered. You shouldn't have to use this. +""" + +ida_kernwin.AHF_VERSION +""" +action handler version (used by 'action_handler_t::flags' ) +""" + +ida_kernwin.AHF_VERSION_MASK +""" +mask for 'action_handler_t::flags' +""" + +ida_kernwin.ASKBTN_BTN1 +""" +First (Yes) button. +""" + +ida_kernwin.ASKBTN_BTN2 +""" +Second (No) button. +""" + +ida_kernwin.ASKBTN_BTN3 +""" +Third (Cancel) button. +""" + +ida_kernwin.ASKBTN_CANCEL +""" +Cancel button. +""" + +ida_kernwin.ASKBTN_NO +""" +No button. +""" + +ida_kernwin.ASKBTN_YES +""" +Yes button. +""" + +ida_kernwin.BWN_ADDRWATCH +""" +the 'Watch List' window +""" + +ida_kernwin.BWN_BPTS +""" +breakpoints +""" + +ida_kernwin.BWN_CALLS +""" +function calls +""" + +ida_kernwin.BWN_CALLS_CALLEES +""" +function calls, callees +""" + +ida_kernwin.BWN_CALLS_CALLERS +""" +function calls, callers +""" + +ida_kernwin.BWN_CALL_STACK +""" +call stack +""" + +ida_kernwin.BWN_CHOOSER +""" +a non-builtin chooser +""" + +ida_kernwin.BWN_CLI +""" +the command-line, in the output window +""" + +ida_kernwin.BWN_CMDPALCSR +""" +the command palette chooser (Qt version only) +""" + +ida_kernwin.BWN_CMDPALWIN +""" +the command palette window (Qt version only) +""" + +ida_kernwin.BWN_CPUREGS +""" +one of the 'General registers', 'FPU register', ... debugger windows +""" + +ida_kernwin.BWN_CUSTVIEW +""" +custom viewers +""" + +ida_kernwin.BWN_CV_LINE_INFOS +""" +custom viewers' lineinfo widget +""" + +ida_kernwin.BWN_DISASM +""" +disassembly views +""" + +ida_kernwin.BWN_DISASMS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_DISASM_ARROWS +""" +disassembly arrows widget +""" + +ida_kernwin.BWN_DUMP +""" +hex dumps +""" + +ida_kernwin.BWN_DUMPS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_ENUMS +""" +enumerations +""" + +ida_kernwin.BWN_EXPORTS +""" +exports +""" + +ida_kernwin.BWN_FRAME +""" +function frame +""" + +ida_kernwin.BWN_FUNCS +""" +functions +""" + +ida_kernwin.BWN_IMPORTS +""" +imports +""" + +ida_kernwin.BWN_LOCALS +""" +the 'locals' debugger window +""" + +ida_kernwin.BWN_LOCTYPS +""" +local types +""" + +ida_kernwin.BWN_MDVIEWCSR +""" +lumina metadata view chooser +""" + +ida_kernwin.BWN_MODULES +""" +modules +""" + +ida_kernwin.BWN_NAMES +""" +names +""" + +ida_kernwin.BWN_NAVBAND +""" +navigation band +""" + +ida_kernwin.BWN_NOTEPAD +""" +notepad +""" + +ida_kernwin.BWN_OUTPUT +""" +the text area, in the output window +""" + +ida_kernwin.BWN_PROBS +""" +problems +""" + +ida_kernwin.BWN_PSEUDOCODE +""" +hexrays decompiler views +""" + +ida_kernwin.BWN_SCRIPTS_CSR +""" +the "Recent scripts" chooser +""" + +ida_kernwin.BWN_SEARCH +""" +search results +""" + +ida_kernwin.BWN_SEARCHS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_SEGREGS +""" +segment registers +""" + +ida_kernwin.BWN_SEGS +""" +segments +""" + +ida_kernwin.BWN_SELS +""" +selectors +""" + +ida_kernwin.BWN_SHORTCUTCSR +""" +the shortcuts chooser (Qt version only) +""" + +ida_kernwin.BWN_SHORTCUTWIN +""" +the shortcuts window (Qt version only) +""" + +ida_kernwin.BWN_SIGNS +""" +signatures +""" + +ida_kernwin.BWN_SNIPPETS +""" +the 'Execute script' window +""" + +ida_kernwin.BWN_SNIPPETS_CSR +""" +the list of snippets in the 'Execute script' window +""" + +ida_kernwin.BWN_SO_OFFSETS +""" +the 'Structure offsets' dialog's offset panel +""" + +ida_kernwin.BWN_SO_STRUCTS +""" +the 'Structure offsets' dialog's 'Structures and Unions' panel +""" + +ida_kernwin.BWN_SRCPTHMAP_CSR +""" +"Source paths..."'s path mappings chooser +""" + +ida_kernwin.BWN_SRCPTHUND_CSR +""" +"Source paths..."'s undesired paths chooser +""" + +ida_kernwin.BWN_STACK +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_STKVIEW +""" +the 'Stack view' debugger window +""" + +ida_kernwin.BWN_STRINGS +""" +strings +""" + +ida_kernwin.BWN_STRUCTS +""" +structures +""" + +ida_kernwin.BWN_THREADS +""" +threads +""" + +ida_kernwin.BWN_TILS +""" +type libraries +""" + +ida_kernwin.BWN_TRACE +""" +trace view +""" + +ida_kernwin.BWN_UNDOHIST +""" +Undo history. +""" + +ida_kernwin.BWN_UNKNOWN +""" +unknown window +""" + +ida_kernwin.BWN_WATCH +""" +the 'watches' debugger window +""" + +ida_kernwin.BWN_XREFS +""" +xrefs +""" + +ida_kernwin.CHCOL_DEC +""" +decimal number +""" + +ida_kernwin.CHCOL_DEFHIDDEN +""" +column should be hidden by default +""" + +ida_kernwin.CHCOL_EA +""" +address +""" + +ida_kernwin.CHCOL_FNAME +""" +function name +""" + +ida_kernwin.CHCOL_FORMAT +""" +column format mask +""" + +ida_kernwin.CHCOL_HEX +""" +hexadecimal number +""" + +ida_kernwin.CHCOL_PATH +""" +file path +""" + +ida_kernwin.CHCOL_PLAIN +""" +plain string +""" + +ida_kernwin.CHITEM_BOLD +""" +display the item in bold +""" + +ida_kernwin.CHITEM_GRAY +""" +gray out the item +""" + +ida_kernwin.CHITEM_ITALIC +""" +display the item in italic +""" + +ida_kernwin.CHITEM_STRIKE +""" +strikeout the item +""" + +ida_kernwin.CHITEM_UNDER +""" +underline the item +""" + +ida_kernwin.CHOOSER_MENU_EDIT +""" +Values of the 'menu_index' parameter. + +Obsolete. Please don't use +""" + +ida_kernwin.CHOOSER_MENU_JUMP +""" +Obsolete. Please don't use. +""" + +ida_kernwin.CHOOSER_MENU_SEARCH +""" +Obsolete. Please don't use. +""" + +ida_kernwin.CHOOSER_MULTI_SELECTION +""" +enable for multiple selections. A callback of type +'chooser_multi_cb_t' will be called for all selected items. +""" + +ida_kernwin.CHOOSER_NO_SELECTION +""" +Flags. + +enable even if there's no selected item. 'n' will be NO_SELECTION for +a callback. +""" + +ida_kernwin.CHOOSER_POPUP_MENU +""" +Add command to the popup menu. +""" + +ida_kernwin.CH_ATTRS +""" +generate ui_get_chooser_item_attrs (gui only) +""" + +ida_kernwin.CH_BUILTIN_MASK +""" +Mask for builtin chooser numbers. Plugins should not use them. +""" + +ida_kernwin.CH_CAN_DEL +""" +allow to delete existing item(s) +""" + +ida_kernwin.CH_CAN_EDIT +""" +allow to edit existing item(s) +""" + +ida_kernwin.CH_CAN_INS +""" +allow to insert new items +""" + +ida_kernwin.CH_CAN_REFRESH +""" +allow to refresh chooser +""" + +ida_kernwin.CH_FORCE_DEFAULT +""" +if a non-modal chooser was already open, change selection to the +default one +""" + +ida_kernwin.CH_KEEP +""" +The chooser instance's lifecycle is not tied to the lifecycle of the +widget showing its contents. Closing the widget will not destroy the +chooser structure. This allows for, e.g., static global chooser +instances that don't need to be allocated on the heap. Also stack- +allocated chooser instances must set this bit. +""" + +ida_kernwin.CH_MODAL +""" +Modal chooser. +""" + +ida_kernwin.CH_MULTI +""" +Obsolete. + +The chooser will allow multi-selection (only for GUI choosers). This +bit is set when using the 'chooser_multi_t' structure. +""" + +ida_kernwin.CH_NOBTNS +""" +do not display ok/cancel/help/search buttons. Meaningful only for gui +modal windows because non-modal windows do not have any buttons +anyway. Text mode does not have them neither. +""" + +ida_kernwin.CH_NOIDB +""" +use the chooser before opening the database +""" + +ida_kernwin.CH_NO_STATUS_BAR +""" +don't show a status bar +""" + +ida_kernwin.CH_QFLT +""" +open with quick filter enabled and focused +""" + +ida_kernwin.CH_QFTYP_DEFAULT +""" +set quick filtering type to the possible existing default for this +chooser +""" + +ida_kernwin.CH_QFTYP_FUZZY +""" +fuzzy search quick filter type +""" + +ida_kernwin.CH_QFTYP_NORMAL +""" +normal (i.e., lexicographical) quick filter type +""" + +ida_kernwin.CH_QFTYP_REGEX +""" +regex quick filter type +""" + +ida_kernwin.CH_QFTYP_WHOLE_WORDS +""" +whole words quick filter type +""" + +ida_kernwin.CH_RESTORE +""" +restore floating position if present (equivalent of WOPN_RESTORE) (GUI +version only) +""" + +ida_kernwin.CLNL_FINDCMT +""" +Search for the comment symbol everywhere in the line, not only at the +beginning. +""" + +ida_kernwin.CLNL_LTRIM +""" +Remove leading space characters. +""" + +ida_kernwin.CLNL_RTRIM +""" +Remove trailing space characters. +""" + +ida_kernwin.CREATETB_ADV +""" +toolbar is for 'advanced mode' only +""" + +ida_kernwin.DP_BEFORE +""" +used with 'DP_INSIDE' . + +place src_form before dst_form in the tab bar instead of after +""" + +ida_kernwin.DP_BOTTOM +""" +Dock src_form below dest_form. +""" + +ida_kernwin.DP_FLOATING +""" +Make src_form floating. +""" + +ida_kernwin.DP_INSIDE +""" +Create a new tab bar with both src_form and dest_form. +""" + +ida_kernwin.DP_LEFT +""" +Dock src_form to the left of dest_form. +""" + +ida_kernwin.DP_RIGHT +""" +Dock src_form to the right of dest_form. +""" + +ida_kernwin.DP_TAB +""" +Place src_form into a tab next to dest_form, if dest_form is in a tab +bar (otherwise the same as 'DP_INSIDE' ) +""" + +ida_kernwin.DP_TOP +""" +Dock src_form above dest_form. +""" + +ida_kernwin.HIF_IDENTIFIER +""" +text is an identifier (i.e., when searching for the current highlight, +SEARCH_IDENT will be used) +""" + +ida_kernwin.HIF_LOCKED +""" +locked; clicking/moving the cursor around doesn't change the highlight +""" + +ida_kernwin.HIF_NOCASE +""" +case insensitive +""" + +ida_kernwin.HIF_REGISTER +""" +text represents a register (aliases/subregisters will be highlit as +well) +""" + +ida_kernwin.HIST_CMD +""" +commands +""" + +ida_kernwin.HIST_CMT +""" +comments +""" + +ida_kernwin.HIST_DIR +""" +directory names (text version only) +""" + +ida_kernwin.HIST_FILE +""" +file names +""" + +ida_kernwin.HIST_IDENT +""" +names +""" + +ida_kernwin.HIST_SEG +""" +segment names +""" + +ida_kernwin.HIST_SRCH +""" +search substrings +""" + +ida_kernwin.HIST_TYPE +""" +type declarations +""" + +ida_kernwin.IWID_ADDRWATCH +""" +address watches (47) +""" + +ida_kernwin.IWID_ALL +""" +mask +""" + +ida_kernwin.IWID_BPTS +""" +breakpoints (13) +""" + +ida_kernwin.IWID_CALLS +""" +function calls (11) +""" + +ida_kernwin.IWID_CALLS_CALLEES +""" +funcalls, callees (50) +""" + +ida_kernwin.IWID_CALLS_CALLERS +""" +funcalls, callers (49) +""" + +ida_kernwin.IWID_CALL_STACK +""" +call stack (17) +""" + +ida_kernwin.IWID_CHOOSER +""" +chooser (37) +""" + +ida_kernwin.IWID_CLI +""" +input line (33) +""" + +ida_kernwin.IWID_CMDPALCSR +""" +command palette (43) +""" + +ida_kernwin.IWID_CMDPALWIN +""" +command palette (44) +""" + +ida_kernwin.IWID_CPUREGS +""" +registers (40) +""" + +ida_kernwin.IWID_CUSTVIEW +""" +custom viewers (46) +""" + +ida_kernwin.IWID_CV_LINE_INFOS +""" +lineinfo widget (53) +""" + +ida_kernwin.IWID_DISASM +""" +disassembly views (29) +""" + +ida_kernwin.IWID_DISASM_ARROWS +""" +arrows widget (52) +""" + +ida_kernwin.IWID_DUMP +""" +hex dumps (30) +""" + +ida_kernwin.IWID_ENUMS +""" +enumerations (27) +""" + +ida_kernwin.IWID_EXPORTS +""" +exports (0) +""" + +ida_kernwin.IWID_FRAME +""" +function frame (25) +""" + +ida_kernwin.IWID_FUNCS +""" +functions (3) +""" + +ida_kernwin.IWID_IMPORTS +""" +imports (1) +""" + +ida_kernwin.IWID_LOCALS +""" +locals (35) +""" + +ida_kernwin.IWID_LOCTYPS +""" +local types (10) +""" + +ida_kernwin.IWID_MDVIEWCSR +""" +lumina md view (51) +""" + +ida_kernwin.IWID_MODULES +""" +modules (15) +""" + +ida_kernwin.IWID_NAMES +""" +names (2) +""" + +ida_kernwin.IWID_NAVBAND +""" +navigation band (26) +""" + +ida_kernwin.IWID_NOTEPAD +""" +notepad (31) +""" + +ida_kernwin.IWID_OUTPUT +""" +output (32) +""" + +ida_kernwin.IWID_PROBS +""" +problems (12) +""" + +ida_kernwin.IWID_PSEUDOCODE +""" +decompiler (48) +""" + +ida_kernwin.IWID_SCRIPTS_CSR +""" +recent scripts (58) +""" + +ida_kernwin.IWID_SEARCH +""" +search results (19) +""" + +ida_kernwin.IWID_SEGREGS +""" +segment registers (6) +""" + +ida_kernwin.IWID_SEGS +""" +segments (5) +""" + +ida_kernwin.IWID_SELS +""" +selectors (7) +""" + +ida_kernwin.IWID_SHORTCUTCSR +""" +shortcuts chooser (38) +""" + +ida_kernwin.IWID_SHORTCUTWIN +""" +shortcuts window (39) +""" + +ida_kernwin.IWID_SIGNS +""" +signatures (8) +""" + +ida_kernwin.IWID_SNIPPETS +""" +snippets (45) +""" + +ida_kernwin.IWID_SNIPPETS_CSR +""" +snippets chooser (57) +""" + +ida_kernwin.IWID_SO_OFFSETS +""" +stroff (42) +""" + +ida_kernwin.IWID_SO_STRUCTS +""" +stroff (41) +""" + +ida_kernwin.IWID_SRCPTHMAP_CSR +""" +mappings chooser (54) +""" + +ida_kernwin.IWID_SRCPTHUND_CSR +""" +undesired chooser (55) +""" + +ida_kernwin.IWID_STACK +""" +Alias. Some IWID_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.IWID_STKVIEW +""" +stack view (36) +""" + +ida_kernwin.IWID_STRINGS +""" +strings (4) +""" + +ida_kernwin.IWID_STRUCTS +""" +structures (28) +""" + +ida_kernwin.IWID_THREADS +""" +threads (14) +""" + +ida_kernwin.IWID_TILS +""" +type libraries (9) +""" + +ida_kernwin.IWID_TRACE +""" +trace view (16) +""" + +ida_kernwin.IWID_UNDOHIST +""" +Undo history (56) +""" + +ida_kernwin.IWID_WATCH +""" +watches (34) +""" + +ida_kernwin.IWID_XREFS +""" +xrefs (18) +""" + +ida_kernwin.MFF_FAST +""" +Execute code as soon as possible. this mode is ok for calling ui +related functions that do not query the database. +""" + +ida_kernwin.MFF_NOWAIT +""" +Do not wait for the request to be executed. the caller should ensure +that the request is not destroyed until the execution completes. if +not, the request will be ignored. 'execute_sync()' returns the request +id in this case. it can be used in 'cancel_exec_request()' . This flag +can be used to delay the code execution until the next UI loop run +even from the main thread. +""" + +ida_kernwin.MFF_READ +""" +Execute code only when ida is idle and it is safe to query the +database. this mode is recommended only for code that does not modify +the database. (nb: ida may be in the middle of executing another user +request, for example it may be waiting for him to enter values into a +modal dialog box) +""" + +ida_kernwin.MFF_WRITE +""" +Execute code only when ida is idle and it is safe to modify the +database. in particular, this flag will suspend execution if there is +a modal dialog box on the screen this mode can be used to call any ida +api function 'MFF_WRITE' implies 'MFF_READ' +""" + +ida_kernwin.SETMENU_APP +""" +add menu item after the specified path +""" + +ida_kernwin.SETMENU_FIRST +""" +add item to the beginning of menu +""" + +ida_kernwin.SETMENU_INS +""" +add menu item before the specified path (default) +""" + +ida_kernwin.UIJMP_ACTIVATE +""" +activate the new window +""" + +ida_kernwin.UIJMP_ANYVIEW +""" +jump in any ea_t-capable view +""" + +ida_kernwin.UIJMP_DONTPUSH +""" +in the navigation history + +do not remember the current address +""" + +ida_kernwin.UIJMP_IDAVIEW +""" +jump in idaview +""" + +ida_kernwin.UIJMP_IDAVIEW_NEW +""" +jump in new idaview +""" + +ida_kernwin.VES_SHIFT +""" +state & 1 => Shift is pressedstate & 2 => Alt is pressedstate & 4 => +Ctrl is pressedstate & 8 => Mouse left button is pressedstate & 16 => +Mouse right button is pressedstate & 32 => Mouse middle button is +pressedstate & 128 => Meta is pressed (OSX only) +""" +=== ida_kernwin EPYDOC INJECTIONS END === +Help on function COLSTR in module ida_lines: + +COLSTR(str, tag) + Utility function to create a colored line + @param str: The string + @param tag: Color tag constant. One of SCOLOR_XXXX + +Help on function add_extra_cmt in module ida_lines: + +add_extra_cmt(*args) + add_extra_cmt(ea, isprev, format) -> bool + + + Add anterior/posterior comment line(s). + + @param ea: linear address (C++: ea_t) + @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) + @param format: printf() style format string. may contain \n to denote + new lines. The resulting string should not contain + comment characters (;), the kernel will add them + automatically. (C++: const char *) + @return: true if success + +Help on function add_extra_line in module ida_lines: + +add_extra_line(*args) + add_extra_line(ea, isprev, format) -> bool + + + Add anterior/posterior non-comment line(s). + + @param ea: linear address (C++: ea_t) + @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) + @param format: printf() style format string. may contain \n to denote + new lines. (C++: const char *) + @return: true if success + +Help on function add_pgm_cmt in module ida_lines: + +add_pgm_cmt(*args) + add_pgm_cmt(format) -> bool + + + Add anterior comment line(s) at the start of program. + + @param format: printf() style format string. may contain \n to denote + new lines. The resulting string should not contain + comment characters (;), the kernel will add them + automatically. (C++: const char *) + @return: true if success + +Help on function add_sourcefile in module ida_lines: + +add_sourcefile(*args) + add_sourcefile(ea1, ea2, filename) -> bool + + + Mark a range of address as belonging to a source file. An address + range may belong only to one source file. A source file may be + represented by several address ranges. + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (excluded) + (C++: ea_t) + @param filename: name of source file. (C++: const char *) + @return: success + +Help on class bgcolors_t in module ida_lines: + +class bgcolors_t(__builtin__.object) + | Proxy of C++ bgcolors_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bgcolors_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | epilog_color + | bgcolors_t_epilog_color_get(self) -> bgcolor_t + | + | prolog_color + | bgcolors_t_prolog_color_get(self) -> bgcolor_t + | + | switch_color + | bgcolors_t_switch_color_get(self) -> bgcolor_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bgcolors_t(self) + +Help on function calc_bg_color in module ida_lines: + +calc_bg_color(*args) + calc_bg_color(ea) -> bgcolor_t + + + Get background color for line at 'ea' + + @param ea (C++: ea_t) + @return: RGB color + +Help on function calc_prefix_color in module ida_lines: + +calc_prefix_color(*args) + calc_prefix_color(ea) -> color_t + + + Get prefix color for line at 'ea' + + @param ea (C++: ea_t) + @return: Line prefix colors + +Help on function create_encoding_helper in module ida_lines: + +create_encoding_helper(*args) + create_encoding_helper(encidx=-1, nr=nr_once) -> encoder_t * + +Help on function del_extra_cmt in module ida_lines: + +del_extra_cmt(*args) + del_extra_cmt(ea, what) + +Help on function del_sourcefile in module ida_lines: + +del_sourcefile(*args) + del_sourcefile(ea) -> bool + + + Delete information about the source file. + + @param ea: linear address (C++: ea_t) + @return: success + +Help on function delete_extra_cmts in module ida_lines: + +delete_extra_cmts(*args) + delete_extra_cmts(ea, what) + +Help on function generate_disasm_line in module ida_lines: + +generate_disasm_line(*args) + generate_disasm_line(ea, flags=0) -> str + +Help on function generate_disassembly in module ida_lines: + +generate_disassembly(*args) + generate_disassembly(ea, max_lines, as_stack, notags) -> PyObject * + + + Generate disassembly lines (many lines) and put them into a buffer + + @param ea: address to generate disassembly for + @param max_lines: how many lines max to generate + @param as_stack: Display undefined items as 2/4/8 bytes + @return: + - None on failure + - tuple(most_important_line_number, tuple(lines)) : Returns a tuple containing + the most important line number and a tuple of generated lines + +Help on function get_extra_cmt in module ida_lines: + +get_extra_cmt(*args) + get_extra_cmt(ea, what) -> ssize_t + +Help on function get_first_free_extra_cmtidx in module ida_lines: + +get_first_free_extra_cmtidx(*args) + get_first_free_extra_cmtidx(ea, start) -> int + +Help on function get_sourcefile in module ida_lines: + +get_sourcefile(*args) + get_sourcefile(ea, bounds=None) -> char const * + + + Get name of source file occupying the given address. + + @param ea: linear address (C++: ea_t) + @param bounds: pointer to the output buffer with the address range for + the current file. May be NULL. (C++: range_t *) + @return: NULL if source file information is not found, otherwise + returns pointer to file name + +Help on function requires_color_esc in module ida_lines: + +requires_color_esc(c) + Checks if the given character requires escaping + @param c: character (string of one char) + @return: Boolean + + + Is the given char a color escape character? + +Help on function set_user_defined_prefix in module ida_lines: + +set_user_defined_prefix(*args) + set_user_defined_prefix(width, pycb) -> PyObject * + + + User-defined line-prefixes are displayed just after the autogenerated + line prefixes. In order to use them, the plugin should call the + following function to specify its width and contents. + @param width: the width of the user-defined prefix + @param callback: a get_user_defined_prefix callback to get the contents of the prefix. + Its arguments: + ea - linear address + lnnum - line number + indent - indent of the line contents (-1 means the default instruction) + indent and is used for instruction itself. see explanations for printf_line() + line - the line to be generated. the line usually contains color tags this argument + can be examined to decide whether to generated the prefix + It returns a buffer of size < bufsize + + In order to remove the callback before unloading the plugin, specify the width = 0 or the callback = None + +Help on function tag_addr in module ida_lines: + +tag_addr(*args) + tag_addr(ea) -> PyObject * + + + Insert an address mark into a string. + + @param ea: address to include (C++: ea_t) + +Help on function tag_advance in module ida_lines: + +tag_advance(*args) + tag_advance(line, cnt) -> int + + + Move pointer to a 'line' to 'cnt' positions right. Take into account + escape sequences. + + @param line: pointer to string (C++: const char *) + @param cnt: number of positions to move right (C++: int) + @return: moved pointer + +Help on function tag_remove in module ida_lines: + +tag_remove(*args) + tag_remove(nonnul_instr) -> PyObject * + + + Remove color escape sequences from a string + @param colstr: the colored string with embedded tags + @return: a new string w/o the tags + +Help on function tag_skipcode in module ida_lines: + +tag_skipcode(*args) + tag_skipcode(line) -> int + + + Skip one color code. This function should be used if you are + interested in color codes and want to analyze all of them. Otherwise + 'tag_skipcodes()' function is better since it will skip all colors at + once. This function will skip the current color code if there is one. + If the current symbol is not a color code, it will return the input. + + @param line (C++: const char *) + @return: moved pointer + +Help on function tag_skipcodes in module ida_lines: + +tag_skipcodes(*args) + tag_skipcodes(line) -> int + + + Move the pointer past all color codes. + + @param line: can't be NULL (C++: const char *) + @return: moved pointer, can't be NULL + +Help on function tag_strlen in module ida_lines: + +tag_strlen(*args) + tag_strlen(line) -> ssize_t + + + Calculate length of a colored string This function computes the length + in unicode codepoints of a line + + @param line (C++: const char *) + @return: the number of codepoints in the line, or -1 on error + +Help on function update_extra_cmt in module ida_lines: + +update_extra_cmt(*args) + update_extra_cmt(ea, what, str) + +=== ida_lines EPYDOC INJECTIONS === +ida_lines.COLOR_ADDR_SIZE +""" +Size of a tagged address (see 'COLOR_ADDR' ) +""" + +ida_lines.COLOR_BG_MAX +""" +Max color number. +""" + +ida_lines.COLOR_CODE +""" +Single instruction. +""" + +ida_lines.COLOR_CURITEM +""" +Current item. +""" + +ida_lines.COLOR_CURLINE +""" +Current line. +""" + +ida_lines.COLOR_DATA +""" +Data bytes. +""" + +ida_lines.COLOR_DEFAULT +""" +Default. +""" + +ida_lines.COLOR_ESC +""" +Escape character (Quote next character). This is needed to output '\\1' +and '\\2' characters. +""" + +ida_lines.COLOR_EXTERN +""" +External name definition segment. +""" + +ida_lines.COLOR_HIDLINE +""" +Hidden line. +""" + +ida_lines.COLOR_INV +""" +Escape character (Inverse foreground and background colors). This +escape character has no corresponding 'COLOR_OFF' . Its action +continues until the next 'COLOR_INV' or end of line. +""" + +ida_lines.COLOR_LIBFUNC +""" +Library function. +""" + +ida_lines.COLOR_LUMFUNC +""" +Lumina function. +""" + +ida_lines.COLOR_OFF +""" +Followed by a color code ( 'color_t' ). + +Escape character (OFF). +""" + +ida_lines.COLOR_ON +""" +Followed by a color code ( 'color_t' ). + +Escape character (ON). +""" + +ida_lines.COLOR_REGFUNC +""" +Regular function. +""" + +ida_lines.COLOR_SELECTED +""" +Selected. +""" + +ida_lines.COLOR_UNKNOWN +""" +Unexplored byte. +""" + +ida_lines.SCOLOR_ADDR +""" +Hidden address mark. +""" + +ida_lines.SCOLOR_ALTOP +""" +Alternative operand. +""" + +ida_lines.SCOLOR_ASMDIR +""" +Assembler directive. +""" + +ida_lines.SCOLOR_AUTOCMT +""" +Automatic comment. +""" + +ida_lines.SCOLOR_BINPREF +""" +Binary line prefix bytes. +""" + +ida_lines.SCOLOR_CHAR +""" +Char constant in instruction. +""" + +ida_lines.SCOLOR_CNAME +""" +Regular code name. +""" + +ida_lines.SCOLOR_CODNAME +""" +Dummy code name. +""" + +ida_lines.SCOLOR_COLLAPSED +""" +Collapsed line. +""" + +ida_lines.SCOLOR_CREF +""" +Code reference. +""" + +ida_lines.SCOLOR_CREFTAIL +""" +Code reference to tail byte. +""" + +ida_lines.SCOLOR_DATNAME +""" +Dummy Data Name. +""" + +ida_lines.SCOLOR_DCHAR +""" +Char constant in data directive. +""" + +ida_lines.SCOLOR_DEFAULT +""" +Default. +""" + +ida_lines.SCOLOR_DEMNAME +""" +Demangled Name. +""" + +ida_lines.SCOLOR_DNAME +""" +Regular Data Name. +""" + +ida_lines.SCOLOR_DNUM +""" +Numeric constant in data directive. +""" + +ida_lines.SCOLOR_DREF +""" +Data reference. +""" + +ida_lines.SCOLOR_DREFTAIL +""" +Data reference to tail byte. +""" + +ida_lines.SCOLOR_DSTR +""" +String constant in data directive. +""" + +ida_lines.SCOLOR_ERROR +""" +Error or problem. +""" + +ida_lines.SCOLOR_ESC +""" +Escape character (Quote next character) +""" + +ida_lines.SCOLOR_EXTRA +""" +Extra line. +""" + +ida_lines.SCOLOR_HIDNAME +""" +Hidden name. +""" + +ida_lines.SCOLOR_IMPNAME +""" +Imported name. +""" + +ida_lines.SCOLOR_INSN +""" +Instruction. +""" + +ida_lines.SCOLOR_INV +""" +Escape character (Inverse colors) +""" + +ida_lines.SCOLOR_KEYWORD +""" +Keywords. +""" + +ida_lines.SCOLOR_LIBNAME +""" +Library function name. +""" + +ida_lines.SCOLOR_LOCNAME +""" +Local variable name. +""" + +ida_lines.SCOLOR_MACRO +""" +Macro. +""" + +ida_lines.SCOLOR_NUMBER +""" +Numeric constant in instruction. +""" + +ida_lines.SCOLOR_OFF +""" +Escape character (OFF) +""" + +ida_lines.SCOLOR_ON +""" +Escape character (ON) +""" + +ida_lines.SCOLOR_PREFIX +""" +Line prefix. +""" + +ida_lines.SCOLOR_REG +""" +Register name. +""" + +ida_lines.SCOLOR_REGCMT +""" +Regular comment. +""" + +ida_lines.SCOLOR_RPTCMT +""" +Repeatable comment (defined not here) +""" + +ida_lines.SCOLOR_SEGNAME +""" +Segment name. +""" + +ida_lines.SCOLOR_STRING +""" +String constant in instruction. +""" + +ida_lines.SCOLOR_SYMBOL +""" +Punctuation. +""" + +ida_lines.SCOLOR_UNAME +""" +Regular unknown name. +""" + +ida_lines.SCOLOR_UNKNAME +""" +Dummy unknown name. +""" + +ida_lines.SCOLOR_VOIDOP +""" +Void operand. +""" +=== ida_lines EPYDOC INJECTIONS END === +Help on function base2file in module ida_loader: + +base2file(*args) + base2file(fp, pos, ea1, ea2) -> int + + + Unload database to a binary file. This function works for wide byte + processors too. + + @param fp: pointer to file (C++: FILE *) + @param pos: position in the file (C++: qoff64_t) + @param ea1: range of source linear addresses (C++: ea_t) + @param ea2: range of source linear addresses (C++: ea_t) + @return: 1-ok(always), write error leads to immediate exit + +Help on function build_snapshot_tree in module ida_loader: + +build_snapshot_tree(*args) + build_snapshot_tree(root) -> bool + + + Build the snapshot tree. + + @param root: snapshot root that will contain the snapshot tree + elements. (C++: snapshot_t *) + @return: success + +Help on function clr_database_flag in module ida_loader: + +clr_database_flag(*args) + clr_database_flag(dbfl) + +Help on function extract_module_from_archive in module ida_loader: + +extract_module_from_archive(*args) + extract_module_from_archive(fname, is_remote=False) -> PyObject * + + + Extract a module for an archive file. Parse an archive file, show the + list of modules to the user, allow him to select a module, extract the + selected module to a file (if the extract module is an archive, repeat + the process). This function can handle ZIP, AR, AIXAR, OMFLIB files. + The temporary file will be automatically deleted by IDA at the end. + + @param is_remote: is the input file remote? (C++: bool) + +Help on function file2base in module ida_loader: + +file2base(*args) + file2base(li, pos, ea1, ea2, patchable) -> int + + + Load portion of file into the database. This function will include + (ea1..ea2) into the addressing space of the program (make it enabled) + + @param li: pointer of input source (C++: linput_t *) + @param pos: position in the file (C++: qoff64_t) + @param ea1: range of destination linear addresses (C++: ea_t) + @param ea2: range of destination linear addresses (C++: ea_t) + @param patchable: should the kernel remember correspondence of file + offsets to linear addresses. (C++: int) + +Help on function find_plugin in module ida_loader: + +find_plugin(*args) + find_plugin(name, load_if_needed=False) -> plugin_t * + + + Find a user-defined plugin and optionally load it. + + @param name: short plugin name without path and extension, or absolute + path to the file name (C++: const char *) + @param load_if_needed: if the plugin is not present in the memory, try + to load it (C++: bool) + @return: pointer to plugin description block + +Help on function flush_buffers in module ida_loader: + +flush_buffers(*args) + flush_buffers() -> int + + + Flush buffers to the disk. + +Help on function gen_exe_file in module ida_loader: + +gen_exe_file(*args) + gen_exe_file(fp) -> int + + + Generate an exe file (unload the database in binary form). + + @param fp (C++: FILE *) + @return: fp the output file handle. if fp == NULL then return: 1: + can generate an executable file 0: can't generate an + executable file + +Help on function gen_file in module ida_loader: + +gen_file(*args) + gen_file(otype, fp, ea1, ea2, flags) -> int + + + Generate an output file. 'OFILE_EXE' : + + @param otype: type of output file. (C++: ofile_type_t) + @param fp: the output file handle (C++: FILE *) + @param ea1: start address. For some file types this argument is + ignored (C++: ea_t) + @param ea2: end address. For some file types this argument is ignored + as usual in ida, the end address of the range is not + included (C++: ea_t) + @param flags: Generate file flags (C++: int) + @return: number of the generated lines. -1 if an error occurred + +Help on function get_basic_file_type in module ida_loader: + +get_basic_file_type(*args) + get_basic_file_type(li) -> filetype_t + + + Get the input file type. This function can recognize libraries and zip + files. + + @param li (C++: linput_t *) + +Help on function get_elf_debug_file_directory in module ida_loader: + +get_elf_debug_file_directory(*args) + get_elf_debug_file_directory() -> char const * + + + Get the value of the ELF_DEBUG_FILE_DIRECTORY configuration directive. + +Help on function get_file_type_name in module ida_loader: + +get_file_type_name(*args) + get_file_type_name() -> str + + + Get name of the current file type. The current file type is kept in + \inf{filetype}. + + @return: size of answer, this function always succeeds + +Help on function get_fileregion_ea in module ida_loader: + +get_fileregion_ea(*args) + get_fileregion_ea(offset) -> ea_t + + + Get linear address which corresponds to the specified input file + offset. If can't be found, return 'BADADDR' + + @param offset (C++: qoff64_t) + +Help on function get_fileregion_offset in module ida_loader: + +get_fileregion_offset(*args) + get_fileregion_offset(ea) -> qoff64_t + + + Get offset in the input file which corresponds to the given ea. If the + specified ea can't be mapped into the input file offset, return -1. + + @param ea (C++: ea_t) + +Help on function get_path in module ida_loader: + +get_path(*args) + get_path(pt) -> char const * + + + Get the file path + + @param pt: file path type Types of the file pathes (C++: path_type_t) + @return: file path, never returns NULL + +Help on function get_plugin_options in module ida_loader: + +get_plugin_options(*args) + get_plugin_options(plugin) -> char const * + + + Get plugin options from the command line. If the user has specified + the options in the -Oplugin_name:options format, them this function + will return the 'options' part of it The 'plugin' parameter should + denote the plugin name Returns NULL if there we no options specified + + @param plugin (C++: const char *) + +Help on class idp_desc_t in module ida_loader: + +class idp_desc_t(__builtin__.object) + | Proxy of C++ idp_desc_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idp_desc_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | checked + | idp_desc_t_checked_get(self) -> bool + | + | family + | idp_desc_t_family_get(self) -> qstring * + | + | is_script + | idp_desc_t_is_script_get(self) -> bool + | + | mtime + | idp_desc_t_mtime_get(self) -> time_t + | + | names + | idp_desc_t_names_get(self) -> idp_names_t * + | + | path + | idp_desc_t_path_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idp_desc_t(self) + +Help on class idp_name_t in module ida_loader: + +class idp_name_t(__builtin__.object) + | Proxy of C++ idp_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idp_name_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hidden + | idp_name_t_hidden_get(self) -> bool + | + | lname + | idp_name_t_lname_get(self) -> qstring * + | + | sname + | idp_name_t_sname_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idp_name_t(self) + +Help on function is_database_flag in module ida_loader: + +is_database_flag(*args) + is_database_flag(dbfl) -> bool + + + Get the current database flag + + @param dbfl: flag Database flags (C++: uint32) + @return: the state of the flag (set or cleared) + +Help on function is_trusted_idb in module ida_loader: + +is_trusted_idb(*args) + is_trusted_idb() -> bool + + + Is the database considered as trusted? + +Help on function load_and_run_plugin in module ida_loader: + +load_and_run_plugin(*args) + load_and_run_plugin(name, arg) -> bool + + + Load & run a plugin. + + + @param name (C++: const char *) + @param arg (C++: size_t) + +Help on function load_binary_file in module ida_loader: + +load_binary_file(*args) + load_binary_file(filename, li, _neflags, fileoff, basepara, binoff, nbytes) -> bool + + + Load a binary file into the database. This function usually is called + from ui. + + @param filename: the name of input file as is (if the input file is + from library, then this is the name from the library) + (C++: const char *) + @param li: loader input source (C++: linput_t *) + @param _neflags: Load file flags . For the first file, the flag + NEF_FIRST must be set. (C++: ushort) + @param fileoff: Offset in the input file (C++: qoff64_t) + @param basepara: Load address in paragraphs (C++: ea_t) + @param binoff: Load offset (load_address=(basepara<<4)+binoff) (C++: + ea_t) + @param nbytes: Number of bytes to load from the file. 0: up to the + end of the file (C++: uint64) + +Help on function load_ids_module in module ida_loader: + +load_ids_module(*args) + load_ids_module(fname) -> int + + + Load and apply IDS file. This function loads the specified IDS file + and applies it to the database. If the program imports functions from + a module with the same name as the name of the ids file being loaded, + then only functions from this module will be affected. Otherwise (i.e. + when the program does not import a module with this name) any function + in the program may be affected. + + @param fname: name of file to apply (C++: char *) + +Help on function load_plugin in module ida_loader: + +load_plugin(*args) + load_plugin(name) -> PyObject * + + + Loads a plugin + @return: + - None if plugin could not be loaded + - An opaque object representing the loaded plugin + +Help on class loader_t in module ida_loader: + +class loader_t(__builtin__.object) + | Proxy of C++ loader_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> loader_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | loader_t_flags_get(self) -> uint32 + | + | thisown + | The membership flag + | + | version + | loader_t_version_get(self) -> uint32 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_loader_t(self) + +Help on function mem2base in module ida_loader: + +mem2base(*args) + mem2base(py_mem, ea, fpos=-1) -> int + + + Load database from the memory. + @param mem: the buffer + @param ea: start linear addresses + @param fpos: position in the input file the data is taken from. + if == -1, then no file position correspond to the data. + @return: + - Returns zero if the passed buffer was not a string + - Otherwise 1 is returned + +Help on class plugin_info_t in module ida_loader: + +class plugin_info_t(__builtin__.object) + | Proxy of C++ plugin_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> plugin_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | arg + | plugin_info_t_arg_get(self) -> size_t + | + | comment + | plugin_info_t_comment_get(self) -> char * + | + | dllmem + | plugin_info_t_dllmem_get(self) -> idadll_t * + | + | entry + | plugin_info_t_entry_get(self) -> plugin_t * + | + | flags + | plugin_info_t_flags_get(self) -> int + | + | hotkey + | plugin_info_t_hotkey_get(self) -> ushort + | + | name + | plugin_info_t_name_get(self) -> char * + | + | next + | plugin_info_t_next_get(self) -> plugin_info_t + | + | org_hotkey + | plugin_info_t_org_hotkey_get(self) -> ushort + | + | org_name + | plugin_info_t_org_name_get(self) -> char * + | + | path + | plugin_info_t_path_get(self) -> char * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_plugin_info_t(self) + +Help on function process_archive in module ida_loader: + +process_archive(*args) + process_archive(temp_file, li, module_name, neflags, defmember, loader) -> str + + + Calls 'loader_t::process_archive()' For parameters and return value + description look at 'loader_t::process_archive()' . Additional + parameter: + + @param temp_file (C++: qstring *) + @param li (C++: linput_t *) + @param module_name (C++: qstring *) + @param neflags (C++: ushort *) + @param defmember (C++: const char *) + @param loader: pointer to load_info_t structure. (C++: const + load_info_t *) + +Help on class qvector_snapshotvec_t in module ida_loader: + +class qvector_snapshotvec_t(__builtin__.object) + | Proxy of C++ qvector< snapshot_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> snapshot_t + | + | __init__(self, *args) + | __init__(self) -> qvector_snapshotvec_t + | __init__(self, x) -> qvector_snapshotvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> snapshot_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< snapshot_t * >::iterator + | begin(self) -> qvector< snapshot_t * >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< snapshot_t * >::iterator + | end(self) -> qvector< snapshot_t * >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< snapshot_t * >::iterator + | erase(self, first, last) -> qvector< snapshot_t * >::iterator + | + | extract(self, *args) + | extract(self) -> snapshot_t ** + | + | find(self, *args) + | find(self, x) -> qvector< snapshot_t * >::iterator + | find(self, x) -> qvector< snapshot_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< snapshot_t * >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> snapshot_t *& + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qvector_snapshotvec_t(self) + +Help on function reload_file in module ida_loader: + +reload_file(*args) + reload_file(file, is_remote) -> bool + + + Reload the input file. This function reloads the byte values from the + input file. It doesn't modify the segmentation, names, comments, etc. + + @param file: name of the input file. if file == NULL then returns: + 1: can reload the input file 0: can't reload the input + file (C++: const char *) + @param is_remote: is the file located on a remote computer with the + debugger server? (C++: bool) + @return: success + +Help on function run_plugin in module ida_loader: + +run_plugin(*args) + run_plugin(plg, arg) -> bool + + + Runs a plugin + @param plg: A plugin object (returned by load_plugin()) + @return: Boolean + +Help on function save_database in module ida_loader: + +save_database(*args) + save_database(outfile, flags, root=None, attr=None) -> bool + + + Save current database using a new file name.when both root and attr + are not NULL then the snapshot attributes will be updated, otherwise + the snapshot attributes will be inherited from the current database. + + @param outfile: output database file name (C++: const char *) + @param flags: Database flags (C++: uint32) + @param root: optional: snapshot tree root. (C++: const snapshot_t *) + @param attr: optional: snapshot attributes (C++: const snapshot_t *) + @return: success + +Help on function set_database_flag in module ida_loader: + +set_database_flag(*args) + set_database_flag(dbfl, cnd=True) + + + Set or clear database flag + + @param dbfl: flag Database flags (C++: uint32) + @param cnd: set if true or clear flag otherwise (C++: bool) + +Help on function set_path in module ida_loader: + +set_path(*args) + set_path(pt, path) + + + Set the file path + + @param pt: file path type Types of the file pathes (C++: path_type_t) + @param path: new file path, use NULL or empty string to clear the file + path (C++: const char *) + +Help on class snapshot_t in module ida_loader: + +class snapshot_t(__builtin__.object) + | Proxy of C++ snapshot_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> snapshot_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | children + | snapshot_t_children_get(self) -> qvector_snapshotvec_t + | + | desc + | snapshot_t_desc_get(self) -> char [128] + | + | filename + | snapshot_t_filename_get(self) -> char [QMAXPATH] + | + | flags + | snapshot_t_flags_get(self) -> uint16 + | + | id + | snapshot_t_id_get(self) -> qtime64_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_snapshot_t(self) + +=== ida_loader EPYDOC INJECTIONS === +ida_loader.ACCEPT_ARCHIVE +""" +Specify that a file format is served by archive loader See +'loader_t::accept_file' +""" + +ida_loader.ACCEPT_CONTINUE +""" +Specify that the function must be called another time See +'loader_t::accept_file' +""" + +ida_loader.ACCEPT_FIRST +""" +Specify that a file format should be place first in "load file" dialog +box. See 'loader_t::accept_file' +""" + +ida_loader.DBFL_BAK +""" +create backup file (if !DBFL_KILL) +""" + +ida_loader.DBFL_COMP +""" +collect garbage +""" + +ida_loader.DBFL_KILL +""" +delete unpacked database +""" + +ida_loader.DBFL_TEMP +""" +temporary database +""" + +ida_loader.FILEREG_NOTPATCHABLE +""" +form in the file. + +the data is kept in some encoded +""" + +ida_loader.FILEREG_PATCHABLE +""" +means that the input file may be patched (i.e. no compression, no +iterated data, etc) +""" + +ida_loader.GENFLG_ASMINC +""" + 'OFILE_ASM' , 'OFILE_LST' : gen information only about types +""" + +ida_loader.GENFLG_ASMTYPE +""" + 'OFILE_ASM' , 'OFILE_LST' : gen information about types too +""" + +ida_loader.GENFLG_GENHTML +""" + 'OFILE_ASM' , 'OFILE_LST' : generate html ( 'ui_genfile_callback' +will be used) +""" + +ida_loader.GENFLG_IDCTYPE +""" + 'OFILE_IDC' : gen only information about types +""" + +ida_loader.GENFLG_MAPDMNG +""" + 'OFILE_MAP' : demangle names +""" + +ida_loader.GENFLG_MAPLOC +""" + 'OFILE_MAP' : include local names +""" + +ida_loader.GENFLG_MAPNAME +""" + 'OFILE_MAP' : include dummy names +""" + +ida_loader.GENFLG_MAPSEG +""" + 'OFILE_MAP' : generate map of segments +""" + +ida_loader.LDRF_RELOAD +""" +loader recognizes 'NEF_RELOAD' flag +""" + +ida_loader.LDRF_REQ_PROC +""" +Requires a processor to be set. if this bit is not set, load_file() +must call set_processor_type(..., SETPROC_LOADER) +""" + +ida_loader.MAX_DATABASE_DESCRIPTION +""" +Maximum database snapshot description length. +""" + +ida_loader.NEF_CODE +""" +load as a code segment + +for 'load_binary_file()' : +""" + +ida_loader.NEF_FILL +""" +Fill segment gaps. +""" + +ida_loader.NEF_FIRST +""" +into the database. + +This is the first file loaded +""" + +ida_loader.NEF_FLAT +""" +Autocreate FLAT group (PE) +""" + +ida_loader.NEF_IMPS +""" +Create import segment. +""" + +ida_loader.NEF_LALL +""" +Load all segments without questions. +""" + +ida_loader.NEF_LOPT +""" +Display additional loader options dialog. +""" + +ida_loader.NEF_MAN +""" +Manual load. +""" + +ida_loader.NEF_MINI +""" +Create mini database (do not copy segment bytes from the input file; +use only the file header metadata) +""" + +ida_loader.NEF_NAME +""" +Rename entries. +""" + +ida_loader.NEF_RELOAD +""" +reload the file at the same place: - don't create segmentsdon't create +fixup infodon't import segmentsetc load only the bytes into the base. +a loader should have 'LDRF_RELOAD' bit set +""" + +ida_loader.NEF_RSCS +""" +Load resources. +""" + +ida_loader.NEF_SEGS +""" +Create segments. +""" + +ida_loader.PLUGIN_DLL +""" +Pattern to find plugin files. +""" + +ida_loader.SSF_AUTOMATIC +""" +automatic snapshot +""" + +ida_loader.SSUF_DESC +""" +Update the description. +""" + +ida_loader.SSUF_FLAGS +""" +Update the flags. +""" + +ida_loader.SSUF_PATH +""" +Update the path. +""" +=== ida_loader EPYDOC INJECTIONS END === +Help on function apply_metadata in module ida_lumina: + +apply_metadata(*args) + apply_metadata(ea, fi, flags=0) + +Help on function backup_metadata in module ida_lumina: + +backup_metadata(*args) + backup_metadata(ea) -> bool + +Help on function calc_func_metadata in module ida_lumina: + +calc_func_metadata(*args) + calc_func_metadata(out_fi, pfn, append_metadata=None) -> asize_t + +Help on function create_simple_diff_handler in module ida_lumina: + +create_simple_diff_handler(*args) + 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) + create_simple_idb_diff_handler(pfn) -> simple_idb_diff_handler_t + +Help on function diff_metadata in module ida_lumina: + +diff_metadata(*args) + diff_metadata(handler, left, right, flags=0) -> bool + +Help on function ea_to_ea64 in module ida_lumina: + +ea_to_ea64(*args) + ea_to_ea64(ea) -> ea64_t + +Help on class extra_cmt_t in module ida_lumina: + +class extra_cmt_t(insn_site_t) + | Proxy of C++ extra_cmt_t class. + | + | Method resolution order: + | extra_cmt_t + | insn_site_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> extra_cmt_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | next + | extra_cmt_t_next_get(self) -> qstring * + | + | prev + | extra_cmt_t_prev_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_extra_cmt_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from insn_site_t: + | + | toea(self, *args) + | toea(self, pfn) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from insn_site_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fchunk_nr + | insn_site_t_fchunk_nr_get(self) -> uint32 + | + | fchunk_off + | insn_site_t_fchunk_off_get(self) -> uint32 + +Help on class extra_cmts_t in module ida_lumina: + +class extra_cmts_t(__builtin__.object) + | Proxy of C++ qvector< extra_cmt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> extra_cmt_t + | + | __init__(self, *args) + | __init__(self) -> extra_cmts_t + | __init__(self, x) -> extra_cmts_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> extra_cmt_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> extra_cmt_t + | begin(self) -> extra_cmt_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> extra_cmt_t + | end(self) -> extra_cmt_t + | + | erase(self, *args) + | erase(self, it) -> extra_cmt_t + | erase(self, first, last) -> extra_cmt_t + | + | extract(self, *args) + | extract(self) -> extra_cmt_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=extra_cmt_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> extra_cmt_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> extra_cmt_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_extra_cmts_t(self) + +Help on function extract_extra_cmts_from_metadata in module ida_lumina: + +extract_extra_cmts_from_metadata(*args) + extract_extra_cmts_from_metadata(out, ptr) + +Help on function extract_frame_desc_from_metadata in module ida_lumina: + +extract_frame_desc_from_metadata(*args) + extract_frame_desc_from_metadata(out, ptr) + +Help on function extract_insn_cmts_from_metadata in module ida_lumina: + +extract_insn_cmts_from_metadata(*args) + extract_insn_cmts_from_metadata(out, ptr) + +Help on function extract_insn_opreprs_from_metadata in module ida_lumina: + +extract_insn_opreprs_from_metadata(*args) + extract_insn_opreprs_from_metadata(out, ptr) + +Help on function extract_type_from_metadata in module ida_lumina: + +extract_type_from_metadata(*args) + extract_type_from_metadata(out, _in) -> bool + +Help on function extract_user_stkpnts_from_metadata in module ida_lumina: + +extract_user_stkpnts_from_metadata(*args) + extract_user_stkpnts_from_metadata(out, ptr) + +Help on class frame_desc_t in module ida_lumina: + +class frame_desc_t(__builtin__.object) + | Proxy of C++ frame_desc_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> frame_desc_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argsize + | frame_desc_t_argsize_get(self) -> asize_t + | + | frregs + | frame_desc_t_frregs_get(self) -> ushort + | + | frsize + | frame_desc_t_frsize_get(self) -> sval_t + | + | members + | frame_desc_t_members_get(self) -> frame_mems_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_frame_desc_t(self) + +Help on class frame_mem_t in module ida_lumina: + +class frame_mem_t(__builtin__.object) + | Proxy of C++ frame_mem_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> frame_mem_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | frame_mem_t_cmt_get(self) -> qstring * + | + | info + | frame_mem_t_info_get(self) -> oprepr_t + | + | name + | frame_mem_t_name_get(self) -> qstring * + | + | nbytes + | frame_mem_t_nbytes_get(self) -> asize_t + | + | offset + | frame_mem_t_offset_get(self) -> ea64_t + | + | rptcmt + | frame_mem_t_rptcmt_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | frame_mem_t_type_get(self) -> serialized_tinfo + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_frame_mem_t(self) + +Help on class frame_mems_t in module ida_lumina: + +class frame_mems_t(__builtin__.object) + | Proxy of C++ qvector< frame_mem_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> frame_mem_t + | + | __init__(self, *args) + | __init__(self) -> frame_mems_t + | __init__(self, x) -> frame_mems_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> frame_mem_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> frame_mem_t + | begin(self) -> frame_mem_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> frame_mem_t + | end(self) -> frame_mem_t + | + | erase(self, *args) + | erase(self, it) -> frame_mem_t + | erase(self, first, last) -> frame_mem_t + | + | extract(self, *args) + | extract(self) -> frame_mem_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=frame_mem_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> frame_mem_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> frame_mem_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_frame_mems_t(self) + +Help on class func_info_and_frequency_t in module ida_lumina: + +class func_info_and_frequency_t(func_info_t) + | Proxy of C++ func_info_and_frequency_t class. + | + | Method resolution order: + | func_info_and_frequency_t + | func_info_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_info_and_frequency_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | frequency + | func_info_and_frequency_t_frequency_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = metadata_t * + | + | name + | func_info_t_name_get(self) -> qstring * + | + | size + | func_info_t_size_get(self) -> uint32 + +Help on class func_info_and_frequency_vec_t in module ida_lumina: + +class func_info_and_frequency_vec_t(__builtin__.object) + | Proxy of C++ qvector< func_info_and_frequency_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> func_info_and_frequency_t + | + | __init__(self, *args) + | __init__(self) -> func_info_and_frequency_vec_t + | __init__(self, x) -> func_info_and_frequency_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> func_info_and_frequency_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> func_info_and_frequency_t + | begin(self) -> func_info_and_frequency_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> func_info_and_frequency_t + | end(self) -> func_info_and_frequency_t + | + | erase(self, *args) + | erase(self, it) -> func_info_and_frequency_t + | erase(self, first, last) -> func_info_and_frequency_t + | + | extract(self, *args) + | extract(self) -> func_info_and_frequency_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=func_info_and_frequency_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> func_info_and_frequency_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> func_info_and_frequency_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = func_info_and_pattern_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | pattern_id + | func_info_and_pattern_t_pattern_id_get(self) -> pattern_id_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_info_and_pattern_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_t_name_get(self) -> qstring * + | + | size + | func_info_t_size_get(self) -> uint32 + +Help on class func_info_and_pattern_vec_t in module ida_lumina: + +class func_info_and_pattern_vec_t(__builtin__.object) + | Proxy of C++ qvector< func_info_and_pattern_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> func_info_and_pattern_t + | + | __init__(self, *args) + | __init__(self) -> func_info_and_pattern_vec_t + | __init__(self, x) -> func_info_and_pattern_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> func_info_and_pattern_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> func_info_and_pattern_t + | begin(self) -> func_info_and_pattern_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> func_info_and_pattern_t + | end(self) -> func_info_and_pattern_t + | + | erase(self, *args) + | erase(self, it) -> func_info_and_pattern_t + | erase(self, first, last) -> func_info_and_pattern_t + | + | extract(self, *args) + | extract(self) -> func_info_and_pattern_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=func_info_and_pattern_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> func_info_and_pattern_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> func_info_and_pattern_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = func_info_base_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_base_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_base_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_info_base_t(self) + +Help on class func_info_pattern_and_frequency_t in module ida_lumina: + +class func_info_pattern_and_frequency_t(func_info_and_pattern_t) + | Proxy of C++ func_info_pattern_and_frequency_t class. + | + | Method resolution order: + | func_info_pattern_and_frequency_t + | func_info_and_pattern_t + | func_info_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_info_pattern_and_frequency_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | frequency + | func_info_pattern_and_frequency_t_frequency_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = pattern_id_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_t_name_get(self) -> qstring * + | + | size + | func_info_t_size_get(self) -> uint32 + +Help on class func_info_pattern_and_frequency_vec_t in module ida_lumina: + +class func_info_pattern_and_frequency_vec_t(__builtin__.object) + | Proxy of C++ qvector< func_info_pattern_and_frequency_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> func_info_pattern_and_frequency_t + | + | __init__(self, *args) + | __init__(self) -> func_info_pattern_and_frequency_vec_t + | __init__(self, x) -> func_info_pattern_and_frequency_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> func_info_pattern_and_frequency_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> func_info_pattern_and_frequency_t + | begin(self) -> func_info_pattern_and_frequency_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> func_info_pattern_and_frequency_t + | end(self) -> func_info_pattern_and_frequency_t + | + | erase(self, *args) + | erase(self, it) -> func_info_pattern_and_frequency_t + | erase(self, first, last) -> func_info_pattern_and_frequency_t + | + | extract(self, *args) + | extract(self) -> func_info_pattern_and_frequency_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=func_info_pattern_and_frequency_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> func_info_pattern_and_frequency_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> func_info_pattern_and_frequency_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = func_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_t_name_get(self) -> qstring * + | + | size + | func_info_t_size_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_info_t(self) + +Help on class func_info_vec_t in module ida_lumina: + +class func_info_vec_t(__builtin__.object) + | Proxy of C++ qvector< func_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> func_info_t + | + | __init__(self, *args) + | __init__(self) -> func_info_vec_t + | __init__(self, x) -> func_info_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> func_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> func_info_t + | begin(self) -> func_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> func_info_t + | end(self) -> func_info_t + | + | erase(self, *args) + | erase(self, it) -> func_info_t + | erase(self, first, last) -> func_info_t + | + | extract(self, *args) + | extract(self) -> func_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=func_info_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> func_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> func_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_info_vec_t(self) + +Help on class func_md_diff_handler_t in module ida_lumina: + +class func_md_diff_handler_t(__builtin__.object) + | Proxy of C++ func_md_diff_handler_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> func_md_diff_handler_t + | + | __repr__ = _swig_repr(self) + | + | on_comment_changed(self, *args) + | on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) + | + | on_extra_comment_changed(self, *args) + | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) + | + | on_frame_member_changed(self, *args) + | on_frame_member_changed(self, offset, l, r) + | + | on_function_comment_changed(self, *args) + | on_function_comment_changed(self, l, r, rep) + | + | on_insn_ops_repr_changed(self, *args) + | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) + | + | on_name_changed(self, *args) + | on_name_changed(self, l, r) + | + | on_proto_changed(self, *args) + | on_proto_changed(self, l, r) + | + | on_score_changed(self, *args) + | on_score_changed(self, l, r) + | + | on_user_stkpnt_changed(self, *args) + | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_md_diff_handler_t(self) + +Help on function get_lumina_rpc_packet_t_index_from_base in module ida_lumina: + +get_lumina_rpc_packet_t_index_from_base(*args) + get_lumina_rpc_packet_t_index_from_base(code) -> uchar + +Help on function get_server_connection in module ida_lumina: + +get_server_connection(*args) + get_server_connection() -> lumina_client_t + +Help on function has_backup_metadata in module ida_lumina: + +has_backup_metadata(*args) + has_backup_metadata(ea) -> bool + +Help on class history_entries_helper_t in module ida_lumina: + +class history_entries_helper_t(__builtin__.object) + | Proxy of C++ history_entries_helper_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _r) -> history_entries_helper_t + | + | __repr__ = _swig_repr(self) + | + | next_entry(self, *args) + | next_entry(self, _from) -> change_desc_base_t const & + | + | next_entry_index(self, *args) + | next_entry_index(self, out_index, _from) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | res + | history_entries_helper_t_res_get(self) -> pkt_show_entries_result_t const & + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_history_entries_helper_t(self) + +Help on class input_file_t in module ida_lumina: + +class input_file_t(__builtin__.object) + | Proxy of C++ input_file_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> input_file_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | md5 + | input_file_t_md5_get(self) -> md5_t * + | + | path + | input_file_t_path_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_input_file_t(self) + +Help on class insn_cmt_t in module ida_lumina: + +class insn_cmt_t(insn_site_t) + | Proxy of C++ insn_cmt_t class. + | + | Method resolution order: + | insn_cmt_t + | insn_site_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> insn_cmt_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cmt + | insn_cmt_t_cmt_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_insn_cmt_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from insn_site_t: + | + | toea(self, *args) + | toea(self, pfn) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from insn_site_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fchunk_nr + | insn_site_t_fchunk_nr_get(self) -> uint32 + | + | fchunk_off + | insn_site_t_fchunk_off_get(self) -> uint32 + +Help on class insn_cmts_t in module ida_lumina: + +class insn_cmts_t(__builtin__.object) + | Proxy of C++ qvector< insn_cmt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> insn_cmt_t + | + | __init__(self, *args) + | __init__(self) -> insn_cmts_t + | __init__(self, x) -> insn_cmts_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> insn_cmt_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> insn_cmt_t + | begin(self) -> insn_cmt_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> insn_cmt_t + | end(self) -> insn_cmt_t + | + | erase(self, *args) + | erase(self, it) -> insn_cmt_t + | erase(self, first, last) -> insn_cmt_t + | + | extract(self, *args) + | extract(self) -> insn_cmt_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=insn_cmt_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> insn_cmt_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> insn_cmt_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_insn_cmts_t(self) + +Help on class insn_ops_repr_t in module ida_lumina: + +class insn_ops_repr_t(insn_site_t) + | Proxy of C++ insn_ops_repr_t class. + | + | Method resolution order: + | insn_ops_repr_t + | insn_site_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> insn_ops_repr_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | insn_ops_repr_t_flags_get(self) -> flags_t + | + | op0 + | insn_ops_repr_t_op0_get(self) -> opinfo_t + | + | op1 + | insn_ops_repr_t_op1_get(self) -> opinfo_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_insn_ops_repr_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from insn_site_t: + | + | toea(self, *args) + | toea(self, pfn) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from insn_site_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fchunk_nr + | insn_site_t_fchunk_nr_get(self) -> uint32 + | + | fchunk_off + | insn_site_t_fchunk_off_get(self) -> uint32 + +Help on class insn_ops_reprs_t in module ida_lumina: + +class insn_ops_reprs_t(__builtin__.object) + | Proxy of C++ qvector< insn_ops_repr_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> insn_ops_repr_t + | + | __init__(self, *args) + | __init__(self) -> insn_ops_reprs_t + | __init__(self, x) -> insn_ops_reprs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> insn_ops_repr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> insn_ops_repr_t + | begin(self) -> insn_ops_repr_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> insn_ops_repr_t + | end(self) -> insn_ops_repr_t + | + | erase(self, *args) + | erase(self, it) -> insn_ops_repr_t + | erase(self, first, last) -> insn_ops_repr_t + | + | extract(self, *args) + | extract(self) -> insn_ops_repr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=insn_ops_repr_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> insn_ops_repr_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> insn_ops_repr_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_insn_ops_reprs_t(self) + +Help on class insn_site_t in module ida_lumina: + +class insn_site_t(__builtin__.object) + | Proxy of C++ insn_site_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> insn_site_t + | + | __repr__ = _swig_repr(self) + | + | toea(self, *args) + | toea(self, pfn) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fchunk_nr + | insn_site_t_fchunk_nr_get(self) -> uint32 + | + | fchunk_off + | insn_site_t_fchunk_off_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_insn_site_t(self) + +Help on class lumina_client_t in module ida_lumina: + +class lumina_client_t(__builtin__.object) + | Proxy of C++ lumina_client_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | get_pop(self, *args) + | get_pop(self, nresults=10) -> pkt_get_pop_result_t + | + | is_pattern_id(self, *args) + | is_pattern_id(self, pid, md5) -> bool + | + | pull_md(self, *args) + | pull_md(self, pattern_ids, pull_md_flags=0) -> pkt_pull_md_result_t + | pull_md(self, funcs, pull_md_flags=0) -> pkt_pull_md_result_t + | + | push_md(self, *args) + | push_md(self, result, opts, append_metadata=None, flags=0) -> bool + | + | set_pattern_id_md5(self, *args) + | set_pattern_id_md5(self, out, md5) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lumina_client_t(self) + +Help on class lumina_op_res_vec_t in module ida_lumina: + +class lumina_op_res_vec_t(__builtin__.object) + | Proxy of C++ qvector< lumina_op_res_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> lumina_op_res_t const & + | + | __init__(self, *args) + | __init__(self) -> lumina_op_res_vec_t + | __init__(self, x) -> lumina_op_res_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> lumina_op_res_t const & + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< lumina_op_res_t >::iterator + | begin(self) -> qvector< lumina_op_res_t >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< lumina_op_res_t >::iterator + | end(self) -> qvector< lumina_op_res_t >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< lumina_op_res_t >::iterator + | erase(self, first, last) -> qvector< lumina_op_res_t >::iterator + | + | extract(self, *args) + | extract(self) -> lumina_op_res_t * + | + | find(self, *args) + | find(self, x) -> qvector< lumina_op_res_t >::iterator + | find(self, x) -> qvector< lumina_op_res_t >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=lumina_op_res_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< lumina_op_res_t >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> lumina_op_res_t & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lumina_op_res_vec_t(self) + +Help on class md_type_parts_t in module ida_lumina: + +class md_type_parts_t(__builtin__.object) + | Proxy of C++ md_type_parts_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> md_type_parts_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fields + | md_type_parts_t_fields_get(self) -> qtype * + | + | thisown + | The membership flag + | + | type + | md_type_parts_t_type_get(self) -> qtype * + | + | userti + | md_type_parts_t_userti_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_md_type_parts_t(self) + +Help on class metadata_iterator_t in module ida_lumina: + +class metadata_iterator_t(__builtin__.object) + | Proxy of C++ metadata_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _md) -> metadata_iterator_t + | + | __repr__ = _swig_repr(self) + | + | data_end(self, *args) + | data_end(self) -> uchar const * + | + | next(self, *args) + | next(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | metadata_iterator_t_data_get(self) -> uchar const * + | + | key + | metadata_iterator_t_key_get(self) -> mdkey_t + | + | size + | metadata_iterator_t_size_get(self) -> size_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_metadata_iterator_t(self) + +Help on function new_packet in module ida_lumina: + +new_packet(*args) + new_packet(code, ptr=None, len=0, version=-1) -> rpc_packet_data_t * + +Help on class oprepr_t in module ida_lumina: + +class oprepr_t(__builtin__.object) + | Proxy of C++ oprepr_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> oprepr_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | oprepr_t_flags_get(self) -> flags_t + | + | opinfo + | oprepr_t_opinfo_get(self) -> opinfo_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_oprepr_t(self) + +Help on class pattern_id_t in module ida_lumina: + +class pattern_id_t(__builtin__.object) + | Proxy of C++ pattern_id_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pattern_id_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | pattern_id_t_data_get(self) -> bytevec_t * + | + | thisown + | The membership flag + | + | type + | pattern_id_t_type_get(self) -> pattern_type_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pattern_id_t(self) + +Help on class pkt_clean_db_t in module ida_lumina: + +class pkt_clean_db_t(__builtin__.object) + | Proxy of C++ pkt_clean_db_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_clean_db_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_clean_db_t(self) + +Help on class pkt_debugctl_t in module ida_lumina: + +class pkt_debugctl_t(__builtin__.object) + | Proxy of C++ pkt_debugctl_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_debugctl_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | args + | pkt_debugctl_t_args_get(self) -> qstrvec_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_debugctl_t(self) + +Help on class pkt_dump_md_result_t in module ida_lumina: + +class pkt_dump_md_result_t(__builtin__.object) + | Proxy of C++ pkt_dump_md_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_dump_md_result_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | contents + | pkt_dump_md_result_t_contents_get(self) -> func_info_pattern_and_frequency_vec_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_dump_md_result_t(self) + +Help on class pkt_dump_md_t in module ida_lumina: + +class pkt_dump_md_t(__builtin__.object) + | Proxy of C++ pkt_dump_md_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_dump_md_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | sort + | pkt_dump_md_t_sort_get(self) -> dump_md_sort_type_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_dump_md_t(self) + +Help on class pkt_get_pop_result_t in module ida_lumina: + +class pkt_get_pop_result_t(__builtin__.object) + | Proxy of C++ pkt_get_pop_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_get_pop_result_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | results + | pkt_get_pop_result_t_results_get(self) -> pop_fun_vec_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_get_pop_result_t(self) + +Help on class pkt_get_pop_t in module ida_lumina: + +class pkt_get_pop_t(__builtin__.object) + | Proxy of C++ pkt_get_pop_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_get_pop_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | nresults + | pkt_get_pop_t_nresults_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_get_pop_t(self) + +Help on class pkt_helo_t in module ida_lumina: + +class pkt_helo_t(__builtin__.object) + | Proxy of C++ pkt_helo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_helo_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | client_version + | pkt_helo_t_client_version_get(self) -> int + | + | key + | pkt_helo_t_key_get(self) -> bytevec_t * + | + | license_id + | pkt_helo_t_license_id_get(self) -> uchar [6] + | + | record_conv + | pkt_helo_t_record_conv_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_helo_t(self) + +Help on class pkt_pull_md_result_t in module ida_lumina: + +class pkt_pull_md_result_t(__builtin__.object) + | Proxy of C++ pkt_pull_md_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_pull_md_result_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | codes + | pkt_pull_md_result_t_codes_get(self) -> lumina_op_res_vec_t + | + | results + | pkt_pull_md_result_t_results_get(self) -> func_info_and_frequency_vec_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_pull_md_result_t(self) + +Help on class pkt_pull_md_t in module ida_lumina: + +class pkt_pull_md_t(__builtin__.object) + | Proxy of C++ pkt_pull_md_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_pull_md_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | pkt_pull_md_t_flags_get(self) -> uint32 + | + | keys + | pkt_pull_md_t_keys_get(self) -> mdkey_vec_t * + | + | pattern_ids + | pkt_pull_md_t_pattern_ids_get(self) -> pattern_ids_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_pull_md_t(self) + +Help on class pkt_push_md_result_t in module ida_lumina: + +class pkt_push_md_result_t(__builtin__.object) + | Proxy of C++ pkt_push_md_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_push_md_result_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | codes + | pkt_push_md_result_t_codes_get(self) -> lumina_op_res_vec_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_push_md_result_t(self) + +Help on class pkt_push_md_t in module ida_lumina: + +class pkt_push_md_t(__builtin__.object) + | Proxy of C++ pkt_push_md_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_push_md_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | contents + | pkt_push_md_t_contents_get(self) -> func_info_and_pattern_vec_t + | + | ea64s + | pkt_push_md_t_ea64s_get(self) -> ea64vec_t * + | + | flags + | pkt_push_md_t_flags_get(self) -> uint32 + | + | hostname + | pkt_push_md_t_hostname_get(self) -> qstring * + | + | idb + | pkt_push_md_t_idb_get(self) -> qstring * + | + | input + | pkt_push_md_t_input_get(self) -> input_file_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_push_md_t(self) + +Help on class pkt_rpc_fail_t in module ida_lumina: + +class pkt_rpc_fail_t(__builtin__.object) + | Proxy of C++ pkt_rpc_fail_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_rpc_fail_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | error + | pkt_rpc_fail_t_error_get(self) -> qstring * + | + | result + | pkt_rpc_fail_t_result_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_rpc_fail_t(self) + +Help on class pkt_rpc_notify_t in module ida_lumina: + +class pkt_rpc_notify_t(__builtin__.object) + | Proxy of C++ pkt_rpc_notify_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_rpc_notify_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | text + | pkt_rpc_notify_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | pkt_rpc_notify_t_type_get(self) -> rpc_notification_type_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_rpc_notify_t(self) + +Help on class pkt_rpc_ok_t in module ida_lumina: + +class pkt_rpc_ok_t(__builtin__.object) + | Proxy of C++ pkt_rpc_ok_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_rpc_ok_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pkt_rpc_ok_t(self) + +Help on class pop_fun_t in module ida_lumina: + +class pop_fun_t(func_info_pattern_and_frequency_t) + | Proxy of C++ pop_fun_t class. + | + | Method resolution order: + | pop_fun_t + | func_info_pattern_and_frequency_t + | func_info_and_pattern_t + | func_info_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pop_fun_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ea64 + | pop_fun_t_ea64_get(self) -> ea64_t + | + | hostname + | pop_fun_t_hostname_get(self) -> qstring * + | + | input + | pop_fun_t_input_get(self) -> input_file_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pop_fun_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_pattern_and_frequency_t: + | + | frequency + | func_info_pattern_and_frequency_t_frequency_get(self) -> uint32 + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_and_pattern_t: + | + | pattern_id + | func_info_and_pattern_t_pattern_id_get(self) -> pattern_id_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_t_name_get(self) -> qstring * + | + | size + | func_info_t_size_get(self) -> uint32 + +Help on class push_md_opts_t in module ida_lumina: + +class push_md_opts_t(__builtin__.object) + | Proxy of C++ push_md_opts_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, mfs=size_t(-1)) -> push_md_opts_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | eas + | push_md_opts_t_eas_get(self) -> eavec_t * + | + | min_func_size + | push_md_opts_t_min_func_size_get(self) -> size_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_push_md_opts_t(self) + +Help on class push_md_result_t in module ida_lumina: + +class push_md_result_t(__builtin__.object) + | Proxy of C++ push_md_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> push_md_result_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | codes + | push_md_result_t_codes_get(self) -> lumina_op_res_vec_t + | + | contents + | push_md_result_t_contents_get(self) -> func_info_and_pattern_vec_t + | + | eas + | push_md_result_t_eas_get(self) -> eavec_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_push_md_result_t(self) + +Help on function revert_metadata in module ida_lumina: + +revert_metadata(*args) + revert_metadata(ea) -> bool + +Help on function score_metadata in module ida_lumina: + +score_metadata(*args) + score_metadata(fi) -> uint32 + +Help on class serialized_tinfo in module ida_lumina: + +class serialized_tinfo(__builtin__.object) + | Proxy of C++ serialized_tinfo class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> serialized_tinfo + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fields + | serialized_tinfo_fields_get(self) -> qtype * + | + | thisown + | The membership flag + | + | type + | serialized_tinfo_type_get(self) -> qtype * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_serialized_tinfo(self) + +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 + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | on_comment_changed(self, *args) + | on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) + | + | on_extra_comment_changed(self, *args) + | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) + | + | on_frame_member_changed(self, *args) + | on_frame_member_changed(self, offset, l, r) + | + | on_function_comment_changed(self, *args) + | on_function_comment_changed(self, l, r, rep) + | + | on_insn_ops_repr_changed(self, *args) + | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) + | + | on_name_changed(self, *args) + | on_name_changed(self, l, r) + | + | on_proto_changed(self, *args) + | on_proto_changed(self, l, r) + | + | on_score_changed(self, *args) + | on_score_changed(self, l, r) + | + | on_user_stkpnt_changed(self, *args) + | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | indent + | simple_diff_handler_t_indent_get(self) -> uint32 + | + | lines + | simple_diff_handler_t_lines_get(self) -> qstrvec_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_simple_diff_handler_t(self) + | + | ---------------------------------------------------------------------- + | 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. + | + | Method resolution order: + | simple_idb_diff_handler_t + | simple_diff_handler_t + | func_md_diff_handler_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | header_generated + | simple_idb_diff_handler_t_header_generated_get(self) -> bool + | + | pfn + | simple_idb_diff_handler_t_pfn_get(self) -> func_t const * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = uint32 + | + | lines + | simple_diff_handler_t_lines_get(self) -> qstrvec_t * + | + | ---------------------------------------------------------------------- + | 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 skipped_func_t in module ida_lumina: + +class skipped_func_t(__builtin__.object) + | Proxy of C++ skipped_func_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> skipped_func_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | skipped_func_t_count_get(self) -> uint32 + | + | pattern_id + | skipped_func_t_pattern_id_get(self) -> pattern_id_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_skipped_func_t(self) + +Help on class skipped_funcs_t in module ida_lumina: + +class skipped_funcs_t(__builtin__.object) + | Proxy of C++ qvector< skipped_func_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> skipped_func_t + | + | __init__(self, *args) + | __init__(self) -> skipped_funcs_t + | __init__(self, x) -> skipped_funcs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> skipped_func_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> skipped_func_t + | begin(self) -> skipped_func_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> skipped_func_t + | end(self) -> skipped_func_t + | + | erase(self, *args) + | erase(self, it) -> skipped_func_t + | erase(self, first, last) -> skipped_func_t + | + | extract(self, *args) + | extract(self) -> skipped_func_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=skipped_func_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> skipped_func_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> skipped_func_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_skipped_funcs_t(self) + +Help on function split_metadata in module ida_lumina: + +split_metadata(*args) + split_metadata(md) -> PyObject * + +Help on class user_identification_t in module ida_lumina: + +class user_identification_t(__builtin__.object) + | Proxy of C++ user_identification_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> user_identification_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | email + | user_identification_t_email_get(self) -> qstring * + | + | license_id + | user_identification_t_license_id_get(self) -> qstring * + | + | thisown + | The membership flag + | + | user_name + | user_identification_t_user_name_get(self) -> qstring * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_identification_t(self) + +Help on class user_stkpnt_t in module ida_lumina: + +class user_stkpnt_t(insn_site_t) + | Proxy of C++ user_stkpnt_t class. + | + | Method resolution order: + | user_stkpnt_t + | insn_site_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> user_stkpnt_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | delta + | user_stkpnt_t_delta_get(self) -> int64 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_stkpnt_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from insn_site_t: + | + | toea(self, *args) + | toea(self, pfn) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from insn_site_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fchunk_nr + | insn_site_t_fchunk_nr_get(self) -> uint32 + | + | fchunk_off + | insn_site_t_fchunk_off_get(self) -> uint32 + +Help on class user_stkpnts_t in module ida_lumina: + +class user_stkpnts_t(__builtin__.object) + | Proxy of C++ qvector< user_stkpnt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> user_stkpnt_t + | + | __init__(self, *args) + | __init__(self) -> user_stkpnts_t + | __init__(self, x) -> user_stkpnts_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> user_stkpnt_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> user_stkpnt_t + | begin(self) -> user_stkpnt_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> user_stkpnt_t + | end(self) -> user_stkpnt_t + | + | erase(self, *args) + | erase(self, it) -> user_stkpnt_t + | erase(self, first, last) -> user_stkpnt_t + | + | extract(self, *args) + | extract(self) -> user_stkpnt_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=user_stkpnt_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> user_stkpnt_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> user_stkpnt_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_stkpnts_t(self) + +=== ida_lumina EPYDOC INJECTIONS === +ida_lumina.AMDF_FORCE +""" +apply kvps regardless of what's currently in the IDB, possibly +removing some attributes currently present (e.g., name, or prototype +could be lost) +""" + +ida_lumina.AMDF_UPGRADE +""" +"quality" than what's currently in the IDB + +apply kvps that seem to be of higher +""" + +ida_lumina.PMF_PUSH_MODE_MASK +""" +Conflict resolution mode. +""" +=== ida_lumina EPYDOC INJECTIONS END === +Help on class bookmarks_t in module ida_moves: + +class bookmarks_t(__builtin__.object) + | Proxy of C++ bookmarks_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | erase(*args) + | erase(e, index, ud) -> bool + | + | find_index(*args) + | find_index(e, ud) -> uint32 + | + | get(*args) + | get(out_entry, out_desc, index, ud) -> bool + | + | get_desc(*args) + | get_desc(e, index, ud) -> bool + | + | mark(*args) + | mark(e, index, title, desc, ud) -> uint32 + | + | size(*args) + | size(e, ud) -> uint32 + | + | ---------------------------------------------------------------------- + | 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 + +Help on function bookmarks_t_erase in module ida_moves: + +bookmarks_t_erase(*args) + bookmarks_t_erase(e, index, ud) -> bool + +Help on function bookmarks_t_find_index in module ida_moves: + +bookmarks_t_find_index(*args) + bookmarks_t_find_index(e, ud) -> uint32 + +Help on function bookmarks_t_get in module ida_moves: + +bookmarks_t_get(*args) + bookmarks_t_get(out_entry, out_desc, index, ud) -> bool + +Help on function bookmarks_t_get_desc in module ida_moves: + +bookmarks_t_get_desc(*args) + bookmarks_t_get_desc(e, index, ud) -> str + +Help on function bookmarks_t_mark in module ida_moves: + +bookmarks_t_mark(*args) + bookmarks_t_mark(e, index, title, desc, ud) -> uint32 + +Help on function bookmarks_t_size in module ida_moves: + +bookmarks_t_size(*args) + bookmarks_t_size(e, ud) -> uint32 + +Help on class graph_location_info_t in module ida_moves: + +class graph_location_info_t(__builtin__.object) + | Proxy of C++ graph_location_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> graph_location_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | orgx + | graph_location_info_t_orgx_get(self) -> double + | + | orgy + | graph_location_info_t_orgy_get(self) -> double + | + | thisown + | The membership flag + | + | zoom + | graph_location_info_t_zoom_get(self) -> double + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_location_info_t(self) + +Help on class lochist_entry_t in module ida_moves: + +class lochist_entry_t(__builtin__.object) + | Proxy of C++ lochist_entry_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lochist_entry_t + | __init__(self, p, r) -> lochist_entry_t + | __init__(self, other) -> lochist_entry_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | acquire_place(self, *args) + | acquire_place(self, in_p) + | + | is_valid(self, *args) + | is_valid(self) -> bool + | + | place(self, *args) + | place(self) -> place_t + | place(self) -> place_t + | + | renderer_info(self, *args) + | renderer_info(self) -> renderer_info_t + | renderer_info(self) -> renderer_info_t + | + | set_place(self, *args) + | set_place(self, p) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | plce + | lochist_entry_t_plce_get(self) -> place_t + | + | rinfo + | lochist_entry_t_rinfo_get(self) -> renderer_info_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lochist_entry_t(self) + +Help on class lochist_t in module ida_moves: + +class lochist_t(__builtin__.object) + | Proxy of C++ lochist_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lochist_t + | + | __repr__ = _swig_repr(self) + | + | back(self, *args) + | back(self, cnt, try_to_unhide) -> bool + | + | clear(self, *args) + | clear(self) + | + | current_index(self, *args) + | current_index(self) -> uint32 + | + | fwd(self, *args) + | fwd(self, cnt, try_to_unhide) -> bool + | + | get(self, *args) + | get(self, out, index) -> bool + | + | get_current(self, *args) + | get_current(self) -> lochist_entry_t + | + | get_place_id(self, *args) + | get_place_id(self) -> int + | + | get_template_place(self, *args) + | get_template_place(self) -> place_t + | + | init(self, *args) + | init(self, stream_name, _defpos, _ud, _flags) -> bool + | + | is_history_enabled(self, *args) + | is_history_enabled(self) -> bool + | + | jump(self, *args) + | jump(self, try_to_unhide, e) + | + | netcode(self, *args) + | netcode(self) -> nodeidx_t + | + | save(self, *args) + | save(self) + | + | seek(self, *args) + | seek(self, index, try_to_unhide) -> bool + | + | set(self, *args) + | set(self, index, e) + | + | set_current(self, *args) + | set_current(self, e) + | + | size(self, *args) + | size(self) -> uint32 + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lochist_t(self) + +Help on class renderer_info_pos_t in module ida_moves: + +class renderer_info_pos_t(__builtin__.object) + | Proxy of C++ renderer_info_pos_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_info_pos_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cx + | renderer_info_pos_t_cx_get(self) -> short + | + | cy + | renderer_info_pos_t_cy_get(self) -> short + | + | node + | renderer_info_pos_t_node_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_renderer_info_pos_t(self) + +Help on class renderer_info_t in module ida_moves: + +class renderer_info_t(__builtin__.object) + | Proxy of C++ renderer_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | gli + | renderer_info_t_gli_get(self) -> graph_location_info_t + | + | pos + | renderer_info_t_pos_get(self) -> renderer_info_pos_t + | + | rtype + | renderer_info_t_rtype_get(self) -> tcc_renderer_type_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_renderer_info_t(self) + +Help on class segm_move_info_t in module ida_moves: + +class segm_move_info_t(__builtin__.object) + | Proxy of C++ segm_move_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _from=0, _to=0, _sz=0) -> segm_move_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _from + | segm_move_info_t__from_get(self) -> ea_t + | + | size + | segm_move_info_t_size_get(self) -> size_t + | + | thisown + | The membership flag + | + | to + | segm_move_info_t_to_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_segm_move_info_t(self) + +Help on class segm_move_info_vec_t in module ida_moves: + +class segm_move_info_vec_t(__builtin__.object) + | Proxy of C++ qvector< segm_move_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> segm_move_info_t + | + | __init__(self, *args) + | __init__(self) -> segm_move_info_vec_t + | __init__(self, x) -> segm_move_info_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> segm_move_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> segm_move_info_t + | begin(self) -> segm_move_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> segm_move_info_t + | end(self) -> segm_move_info_t + | + | erase(self, *args) + | erase(self, it) -> segm_move_info_t + | erase(self, first, last) -> segm_move_info_t + | + | extract(self, *args) + | extract(self) -> segm_move_info_t + | + | find(self, *args) + | find(self, x) -> segm_move_info_t + | find(self, x) -> segm_move_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=segm_move_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> segm_move_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> segm_move_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_segm_move_info_vec_t(self) + +Help on class segm_move_infos_t in module ida_moves: + +class segm_move_infos_t(segm_move_info_vec_t) + | Proxy of C++ segm_move_infos_t class. + | + | Method resolution order: + | segm_move_infos_t + | segm_move_info_vec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> segm_move_infos_t + | + | __repr__ = _swig_repr(self) + | + | find(self, *args) + | find(self, ea) -> segm_move_info_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_segm_move_infos_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from segm_move_info_vec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> segm_move_info_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> segm_move_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> segm_move_info_t + | begin(self) -> segm_move_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> segm_move_info_t + | end(self) -> segm_move_info_t + | + | erase(self, *args) + | erase(self, it) -> segm_move_info_t + | erase(self, first, last) -> segm_move_info_t + | + | extract(self, *args) + | extract(self) -> segm_move_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=segm_move_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> segm_move_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> segm_move_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from segm_move_info_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function get_switch_info in module ida_nalt: + +get_switch_info(*args) + get_switch_info(out, ea) -> ssize_t + +Help on function add_encoding in module ida_nalt: + +add_encoding(*args) + add_encoding(encoding) -> int + + + Add a new encoding (e.g. "UTF-8"). + + @param encoding (C++: const char *) + @return: its index (1-based) if it's already in the list, return its + index + +Help on class array_parameters_t in module ida_nalt: + +class array_parameters_t(__builtin__.object) + | Proxy of C++ array_parameters_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> array_parameters_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | alignment + | array_parameters_t_alignment_get(self) -> int32 + | + | flags + | array_parameters_t_flags_get(self) -> int32 + | + | lineitems + | array_parameters_t_lineitems_get(self) -> int32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_array_parameters_t(self) + +Help on function clr__bnot0 in module ida_nalt: + +clr__bnot0(*args) + clr__bnot0(ea) + +Help on function clr__bnot1 in module ida_nalt: + +clr__bnot1(*args) + clr__bnot1(ea) + +Help on function clr__invsign0 in module ida_nalt: + +clr__invsign0(*args) + clr__invsign0(ea) + +Help on function clr__invsign1 in module ida_nalt: + +clr__invsign1(*args) + clr__invsign1(ea) + +Help on function clr_abits in module ida_nalt: + +clr_abits(*args) + clr_abits(ea, bits) + +Help on function clr_align_flow in module ida_nalt: + +clr_align_flow(*args) + clr_align_flow(ea) + +Help on function clr_colored_item in module ida_nalt: + +clr_colored_item(*args) + clr_colored_item(ea) + +Help on function clr_fixed_spd in module ida_nalt: + +clr_fixed_spd(*args) + clr_fixed_spd(ea) + +Help on function clr_has_lname in module ida_nalt: + +clr_has_lname(*args) + clr_has_lname(ea) + +Help on function clr_has_ti in module ida_nalt: + +clr_has_ti(*args) + clr_has_ti(ea) + +Help on function clr_has_ti0 in module ida_nalt: + +clr_has_ti0(*args) + clr_has_ti0(ea) + +Help on function clr_has_ti1 in module ida_nalt: + +clr_has_ti1(*args) + clr_has_ti1(ea) + +Help on function clr_libitem in module ida_nalt: + +clr_libitem(*args) + clr_libitem(ea) + +Help on function clr_lzero0 in module ida_nalt: + +clr_lzero0(*args) + clr_lzero0(ea) + +Help on function clr_lzero1 in module ida_nalt: + +clr_lzero1(*args) + clr_lzero1(ea) + +Help on function clr_noret in module ida_nalt: + +clr_noret(*args) + clr_noret(ea) + +Help on function clr_notcode in module ida_nalt: + +clr_notcode(*args) + clr_notcode(ea) + + + Clear not-code mark. + + + @param ea (C++: ea_t) + +Help on function clr_notproc in module ida_nalt: + +clr_notproc(*args) + clr_notproc(ea) + +Help on function clr_retfp in module ida_nalt: + +clr_retfp(*args) + clr_retfp(ea) + +Help on function clr_terse_struc in module ida_nalt: + +clr_terse_struc(*args) + clr_terse_struc(ea) + +Help on function clr_tilcmt in module ida_nalt: + +clr_tilcmt(*args) + clr_tilcmt(ea) + +Help on function clr_usemodsp in module ida_nalt: + +clr_usemodsp(*args) + clr_usemodsp(ea) + +Help on function clr_usersp in module ida_nalt: + +clr_usersp(*args) + clr_usersp(ea) + +Help on function clr_userti in module ida_nalt: + +clr_userti(*args) + clr_userti(ea) + +Help on function clr_zstroff in module ida_nalt: + +clr_zstroff(*args) + clr_zstroff(ea) + +Help on class custom_data_type_ids_fids_array in module ida_nalt: + +class custom_data_type_ids_fids_array(__builtin__.object) + | Proxy of C++ wrapped_array_t< int16,8 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> short const & + | + | __init__(self, *args) + | __init__(self, data) -> custom_data_type_ids_fids_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | custom_data_type_ids_fids_array_data_get(self) -> short (&)[8] + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = custom_data_type_ids_t + | + | __repr__ = _swig_repr(self) + | + | _custom_data_type_ids_t__getFids = __getFids(self, *args) + | __getFids(self) -> custom_data_type_ids_fids_array + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dtid + | custom_data_type_ids_t_dtid_get(self) -> int16 + | + | fids + | __getFids(self) -> custom_data_type_ids_fids_array + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_custom_data_type_ids_t(self) + +Help on function dbg_get_input_path in module ida_nalt: + +dbg_get_input_path(*args) + dbg_get_input_path() -> str + + + Get debugger input file name/path (see 'LFLG_DBG_NOPATH' ) + +Help on function del_absbase in module ida_nalt: + +del_absbase(*args) + del_absbase(ea) + +Help on function del_aflags in module ida_nalt: + +del_aflags(*args) + del_aflags(ea) + +Help on function del_alignment in module ida_nalt: + +del_alignment(*args) + del_alignment(ea) + +Help on function del_array_parameters in module ida_nalt: + +del_array_parameters(*args) + del_array_parameters(ea) + +Help on function del_custom_data_type_ids in module ida_nalt: + +del_custom_data_type_ids(*args) + del_custom_data_type_ids(ea) + +Help on function del_encoding in module ida_nalt: + +del_encoding(*args) + del_encoding(idx) -> bool + + + Delete an encoding (1-based) + + + @param idx (C++: int) + +Help on function del_ind_purged in module ida_nalt: + +del_ind_purged(*args) + del_ind_purged(ea) + +Help on function del_item_color in module ida_nalt: + +del_item_color(*args) + del_item_color(ea) -> bool + +Help on function del_op_tinfo in module ida_nalt: + +del_op_tinfo(*args) + del_op_tinfo(ea, n) + +Help on function del_refinfo in module ida_nalt: + +del_refinfo(*args) + del_refinfo(ea, n) -> bool + +Help on function del_source_linnum in module ida_nalt: + +del_source_linnum(*args) + del_source_linnum(ea) + +Help on function del_str_type in module ida_nalt: + +del_str_type(*args) + del_str_type(ea) + +Help on function del_switch_info in module ida_nalt: + +del_switch_info(*args) + del_switch_info(ea) + +Help on function del_switch_parent in module ida_nalt: + +del_switch_parent(*args) + del_switch_parent(ea) + +Help on function del_tinfo in module ida_nalt: + +del_tinfo(*args) + del_tinfo(ea) + +Help on function delete_imports in module ida_nalt: + +delete_imports(*args) + delete_imports() + + + Delete all imported modules information. + +Help on function ea2node in module ida_nalt: + +ea2node(*args) + ea2node(ea) -> nodeidx_t + + + Get netnode for the specified address. + + + @param ea (C++: ea_t) + +Help on function encoding_from_strtype in module ida_nalt: + +encoding_from_strtype(*args) + encoding_from_strtype(strtype) -> char const * + + + Get encoding name for this strtype. + + + @param strtype (C++: int32) + +Help on class enum_const_t in module ida_nalt: + +class enum_const_t(__builtin__.object) + | Proxy of C++ enum_const_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> enum_const_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | serial + | enum_const_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | tid + | enum_const_t_tid_get(self) -> tid_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enum_const_t(self) + +Help on function enum_import_names in module ida_nalt: + +enum_import_names(*args) + enum_import_names(mod_index, py_cb) -> int + + + Enumerate imports from a specific module. + Please refer to ex_imports.py example. + + @param mod_index: The module index + @param callback: A callable object that will be invoked with an ea, name (could be None) and ordinal. + @return: 1-finished ok, -1 on error, otherwise callback return value (<=0) + +Help on function find_custom_refinfo in module ida_nalt: + +find_custom_refinfo(*args) + find_custom_refinfo(name) -> int + + + Get id of a custom refinfo type. + + + @param name (C++: const char *) + +Help on function get_abi_name in module ida_nalt: + +get_abi_name(*args) + +Help on function get_absbase in module ida_nalt: + +get_absbase(*args) + get_absbase(ea) -> ea_t + +Help on function get_aflags in module ida_nalt: + +get_aflags(*args) + get_aflags(ea) -> uint32 + +Help on function get_alignment in module ida_nalt: + +get_alignment(*args) + get_alignment(ea) -> uint32 + +Help on function get_archive_path in module ida_nalt: + +get_archive_path(*args) + get_archive_path() -> str + + + Get archive file path from which input file was extracted. + +Help on function get_array_parameters in module ida_nalt: + +get_array_parameters(*args) + get_array_parameters(out, ea) -> ssize_t + +Help on function get_asm_inc_file in module ida_nalt: + +get_asm_inc_file(*args) + get_asm_inc_file() -> str + + + Get name of the include file. + +Help on function get_custom_data_type_ids in module ida_nalt: + +get_custom_data_type_ids(*args) + get_custom_data_type_ids(cdis, ea) -> int + +Help on function get_custom_refinfo in module ida_nalt: + +get_custom_refinfo(*args) + get_custom_refinfo(crid) -> custom_refinfo_handler_t const * + + + Get definition of a registered custom refinfo type. + + + @param crid (C++: int) + +Help on function get_default_encoding_idx in module ida_nalt: + +get_default_encoding_idx(*args) + get_default_encoding_idx(bpu) -> int + + + Get default encoding index for a specific string type. + + @param bpu: the amount of bytes per unit (e.g., 1 for ASCII, CP1252, + UTF-8..., 2 for UTF-16, 4 for UTF-32) 0 means no specific + encoding is set - byte values are displayed without + conversion. (C++: int) + +Help on function get_encoding_bpu in module ida_nalt: + +get_encoding_bpu(*args) + get_encoding_bpu(idx) -> int + + + Get the amount of bytes per unit (e.g., 2 for UTF-16, 4 for UTF-32) + for the encoding with the given index. + + @param idx: the encoding index (C++: int) + @return: the number of bytes per units (1/2/4); -1 means error + +Help on function get_encoding_name in module ida_nalt: + +get_encoding_name(*args) + get_encoding_name(idx) -> char const * + + + Get encoding name for specific index (1-based). + + @param idx (C++: int) + @return: NULL if idx is out of bounds + +Help on function get_encoding_qty in module ida_nalt: + +get_encoding_qty(*args) + get_encoding_qty() -> int + + + Get total number of encodings (counted from 0) + +Help on function get_gotea in module ida_nalt: + +get_gotea(*args) + get_gotea() -> ea_t + +Help on function get_ids_modnode in module ida_nalt: + +get_ids_modnode(*args) + get_ids_modnode() -> netnode + + + Get ids modnode. + +Help on function get_imagebase in module ida_nalt: + +get_imagebase(*args) + get_imagebase() -> ea_t + + + Get image base address. + +Help on function get_import_module_name in module ida_nalt: + +get_import_module_name(*args) + get_import_module_name(mod_index) -> PyObject * + + + Returns the name of an imported module given its index + @return: None or the module name + +Help on function get_import_module_qty in module ida_nalt: + +get_import_module_qty(*args) + get_import_module_qty() -> uint + + + Get number of import modules. + +Help on function get_ind_purged in module ida_nalt: + +get_ind_purged(*args) + get_ind_purged(ea) -> ea_t + +Help on function get_input_file_path in module ida_nalt: + +get_input_file_path(*args) + get_input_file_path() -> str + + + Get full path of the input file. + +Help on function get_item_color in module ida_nalt: + +get_item_color(*args) + get_item_color(ea) -> bgcolor_t + +Help on function get_op_tinfo in module ida_nalt: + +get_op_tinfo(*args) + get_op_tinfo(tif, ea, n) -> bool + +Help on function get_outfile_encoding_idx in module ida_nalt: + +get_outfile_encoding_idx(*args) + get_outfile_encoding_idx() -> int + + + Get the index of the encoding used when producing files 0 means no + that the IDB's default 1 byte-per-unit encoding is used + +Help on function get_refinfo in module ida_nalt: + +get_refinfo(*args) + get_refinfo(ri, ea, n) -> bool + +Help on function get_reftype_by_size in module ida_nalt: + +get_reftype_by_size(*args) + get_reftype_by_size(size) -> reftype_t + + + Get REF_... constant from size Supported sizes: 1,2,4,8,16 For other + sizes returns reftype_t(-1) + + @param size (C++: size_t) + +Help on function get_root_filename in module ida_nalt: + +get_root_filename(*args) + get_root_filename() -> str + + + Get file name only of the input file. + +Help on function get_source_linnum in module ida_nalt: + +get_source_linnum(*args) + get_source_linnum(ea) -> uval_t + +Help on function get_str_encoding_idx in module ida_nalt: + +get_str_encoding_idx(*args) + get_str_encoding_idx(strtype) -> uchar + + + Get index of the string encoding for this string. + + + @param strtype (C++: int32) + +Help on function get_str_term1 in module ida_nalt: + +get_str_term1(*args) + get_str_term1(strtype) -> char + +Help on function get_str_term2 in module ida_nalt: + +get_str_term2(*args) + get_str_term2(strtype) -> char + +Help on function get_str_type in module ida_nalt: + +get_str_type(*args) + get_str_type(ea) -> uint32 + +Help on function get_str_type_code in module ida_nalt: + +get_str_type_code(*args) + get_str_type_code(strtype) -> uchar + +Help on function get_strtype_bpu in module ida_nalt: + +get_strtype_bpu(*args) + get_strtype_bpu(strtype) -> int + +Help on function get_switch_info in module ida_nalt: + +get_switch_info(*args) + +Help on function get_switch_parent in module ida_nalt: + +get_switch_parent(*args) + get_switch_parent(ea) -> ea_t + +Help on function get_tinfo in module ida_nalt: + +get_tinfo(*args) + get_tinfo(tif, ea) -> bool + +Help on function getnode in module ida_nalt: + +getnode(*args) + getnode(ea) -> netnode + +Help on function has_lname in module ida_nalt: + +has_lname(*args) + has_lname(ea) -> bool + +Help on function has_ti in module ida_nalt: + +has_ti(*args) + has_ti(ea) -> bool + +Help on function has_ti0 in module ida_nalt: + +has_ti0(*args) + has_ti0(ea) -> bool + +Help on function has_ti1 in module ida_nalt: + +has_ti1(*args) + has_ti1(ea) -> bool + +Help on function hide_border in module ida_nalt: + +hide_border(*args) + hide_border(ea) + +Help on function hide_item in module ida_nalt: + +hide_item(*args) + hide_item(ea) + +Help on function is__bnot0 in module ida_nalt: + +is__bnot0(*args) + is__bnot0(ea) -> bool + +Help on function is__bnot1 in module ida_nalt: + +is__bnot1(*args) + is__bnot1(ea) -> bool + +Help on function is__invsign0 in module ida_nalt: + +is__invsign0(*args) + is__invsign0(ea) -> bool + +Help on function is__invsign1 in module ida_nalt: + +is__invsign1(*args) + is__invsign1(ea) -> bool + +Help on function is_align_flow in module ida_nalt: + +is_align_flow(*args) + is_align_flow(ea) -> bool + +Help on function is_colored_item in module ida_nalt: + +is_colored_item(*args) + is_colored_item(ea) -> bool + +Help on function is_finally_visible_item in module ida_nalt: + +is_finally_visible_item(*args) + is_finally_visible_item(ea) -> bool + + + Is instruction visible? + + + @param ea (C++: ea_t) + +Help on function is_fixed_spd in module ida_nalt: + +is_fixed_spd(*args) + is_fixed_spd(ea) -> bool + +Help on function is_hidden_border in module ida_nalt: + +is_hidden_border(*args) + is_hidden_border(ea) -> bool + +Help on function is_hidden_item in module ida_nalt: + +is_hidden_item(*args) + is_hidden_item(ea) -> bool + +Help on function is_libitem in module ida_nalt: + +is_libitem(*args) + is_libitem(ea) -> bool + +Help on function is_lzero0 in module ida_nalt: + +is_lzero0(*args) + is_lzero0(ea) -> bool + +Help on function is_lzero1 in module ida_nalt: + +is_lzero1(*args) + is_lzero1(ea) -> bool + +Help on function is_noret in module ida_nalt: + +is_noret(*args) + is_noret(ea) -> bool + +Help on function is_notcode in module ida_nalt: + +is_notcode(*args) + is_notcode(ea) -> bool + + + Is the address marked as not-code? + + + @param ea (C++: ea_t) + +Help on function is_notproc in module ida_nalt: + +is_notproc(*args) + is_notproc(ea) -> bool + +Help on function is_pascal in module ida_nalt: + +is_pascal(*args) + is_pascal(strtype) -> bool + +Help on function is_reftype_target_optional in module ida_nalt: + +is_reftype_target_optional(*args) + is_reftype_target_optional(type) -> bool + + + Can the target be calculated using operand value? + + + @param type (C++: reftype_t) + +Help on function is_retfp in module ida_nalt: + +is_retfp(*args) + is_retfp(ea) -> bool + +Help on function is_terse_struc in module ida_nalt: + +is_terse_struc(*args) + is_terse_struc(ea) -> bool + +Help on function is_tilcmt in module ida_nalt: + +is_tilcmt(*args) + is_tilcmt(ea) -> bool + +Help on function is_usersp in module ida_nalt: + +is_usersp(*args) + is_usersp(ea) -> bool + +Help on function is_userti in module ida_nalt: + +is_userti(*args) + is_userti(ea) -> bool + +Help on function is_visible_item in module ida_nalt: + +is_visible_item(*args) + is_visible_item(ea) -> bool + + + Test visibility of item at given ea. + + + @param ea (C++: ea_t) + +Help on function is_zstroff in module ida_nalt: + +is_zstroff(*args) + is_zstroff(ea) -> bool + +Help on function node2ea in module ida_nalt: + +node2ea(*args) + node2ea(ndx) -> ea_t + +Help on class opinfo_t in module ida_nalt: + +class opinfo_t(__builtin__.object) + | Proxy of C++ opinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> opinfo_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cd + | opinfo_t_cd_get(self) -> custom_data_type_ids_t + | + | ec + | opinfo_t_ec_get(self) -> enum_const_t + | + | path + | opinfo_t_path_get(self) -> strpath_t + | + | ri + | opinfo_t_ri_get(self) -> refinfo_t + | + | strtype + | opinfo_t_strtype_get(self) -> int32 + | + | thisown + | The membership flag + | + | tid + | opinfo_t_tid_get(self) -> tid_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_opinfo_t(self) + +Help on class printop_t in module ida_nalt: + +class printop_t(__builtin__.object) + | Proxy of C++ printop_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> printop_t + | + | __repr__ = _swig_repr(self) + | + | get_ti(self, *args) + | get_ti(self) -> opinfo_t + | + | is_aflags_initialized(self, *args) + | is_aflags_initialized(self) -> bool + | + | is_ti_initialized(self, *args) + | is_ti_initialized(self) -> bool + | + | set_aflags_initialized(self, *args) + | set_aflags_initialized(self, v=True) + | + | set_ti_initialized(self, *args) + | set_ti_initialized(self, v=True) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | aflags + | printop_t_aflags_get(self) -> flags_t + | + | features + | printop_t_features_get(self) -> uchar + | + | flags + | printop_t_flags_get(self) -> flags_t + | + | is_ti_valid + | is_ti_initialized(self) -> bool + | + | suspop + | printop_t_suspop_get(self) -> int + | + | thisown + | The membership flag + | + | ti + | printop_t_ti_get(self) -> opinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_printop_t(self) + +Help on class refinfo_t in module ida_nalt: + +class refinfo_t(__builtin__.object) + | Proxy of C++ refinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> refinfo_t + | + | __repr__ = _swig_repr(self) + | + | init(self, *args) + | init(self, reft_and_flags, _base=0, _target=BADADDR, _tdelta=0) + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_pastend(self, *args) + | is_pastend(self) -> bool + | + | is_rvaoff(self, *args) + | is_rvaoff(self) -> bool + | + | is_signed(self, *args) + | is_signed(self) -> bool + | + | is_subtract(self, *args) + | is_subtract(self) -> bool + | + | is_target_optional(self, *args) + | is_target_optional(self) -> bool + | + | no_base_xref(self, *args) + | no_base_xref(self) -> bool + | + | set_type(self, *args) + | set_type(self, t) + | + | type(self, *args) + | type(self) -> reftype_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | refinfo_t_base_get(self) -> ea_t + | + | flags + | refinfo_t_flags_get(self) -> uint32 + | + | target + | refinfo_t_target_get(self) -> ea_t + | + | tdelta + | refinfo_t_tdelta_get(self) -> adiff_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_refinfo_t(self) + +Help on function rename_encoding in module ida_nalt: + +rename_encoding(*args) + rename_encoding(idx, encoding) -> bool + + + Change name for an encoding (1-based) + + + @param idx (C++: int) + @param encoding (C++: const char *) + +Help on function retrieve_input_file_crc32 in module ida_nalt: + +retrieve_input_file_crc32(*args) + retrieve_input_file_crc32() -> uint32 + + + Get input file crc32 stored in the database. it can be used to check + that the input file has not been changed. + +Help on function retrieve_input_file_md5 in module ida_nalt: + +retrieve_input_file_md5(*args) + retrieve_input_file_md5() -> str + + + Get input file md5. + +Help on function retrieve_input_file_sha256 in module ida_nalt: + +retrieve_input_file_sha256(*args) + retrieve_input_file_sha256() -> str + + + Get input file sha256. + +Help on function retrieve_input_file_size in module ida_nalt: + +retrieve_input_file_size(*args) + retrieve_input_file_size() -> uint32 + + + Get size of input file in bytes. + +Help on function set__bnot0 in module ida_nalt: + +set__bnot0(*args) + set__bnot0(ea) + +Help on function set__bnot1 in module ida_nalt: + +set__bnot1(*args) + set__bnot1(ea) + +Help on function set__invsign0 in module ida_nalt: + +set__invsign0(*args) + set__invsign0(ea) + +Help on function set__invsign1 in module ida_nalt: + +set__invsign1(*args) + set__invsign1(ea) + +Help on function set_abits in module ida_nalt: + +set_abits(*args) + set_abits(ea, bits) + +Help on function set_absbase in module ida_nalt: + +set_absbase(*args) + set_absbase(ea, x) + +Help on function set_aflags in module ida_nalt: + +set_aflags(*args) + set_aflags(ea, flags) + +Help on function set_align_flow in module ida_nalt: + +set_align_flow(*args) + set_align_flow(ea) + +Help on function set_alignment in module ida_nalt: + +set_alignment(*args) + set_alignment(ea, x) + +Help on function set_archive_path in module ida_nalt: + +set_archive_path(*args) + set_archive_path(file) -> bool + + + Set archive file path from which input file was extracted. + + + @param file (C++: const char *) + +Help on function set_array_parameters in module ida_nalt: + +set_array_parameters(*args) + set_array_parameters(ea, _in) + +Help on function set_asm_inc_file in module ida_nalt: + +set_asm_inc_file(*args) + set_asm_inc_file(file) -> bool + + + Set name of the include file. + + + @param file (C++: const char *) + +Help on function set_colored_item in module ida_nalt: + +set_colored_item(*args) + set_colored_item(ea) + +Help on function set_custom_data_type_ids in module ida_nalt: + +set_custom_data_type_ids(*args) + set_custom_data_type_ids(ea, cdis) + +Help on function set_default_encoding_idx in module ida_nalt: + +set_default_encoding_idx(*args) + set_default_encoding_idx(bpu, idx) -> bool + + + set default encoding for a string type + + @param bpu: the amount of bytes per unit (C++: int) + @param idx: the encoding index idx can be 0 to disable encoding + conversion (C++: int) + +Help on function set_fixed_spd in module ida_nalt: + +set_fixed_spd(*args) + set_fixed_spd(ea) + +Help on function set_gotea in module ida_nalt: + +set_gotea(*args) + set_gotea(gotea) + +Help on function set_has_lname in module ida_nalt: + +set_has_lname(*args) + set_has_lname(ea) + +Help on function set_has_ti in module ida_nalt: + +set_has_ti(*args) + set_has_ti(ea) + +Help on function set_has_ti0 in module ida_nalt: + +set_has_ti0(*args) + set_has_ti0(ea) + +Help on function set_has_ti1 in module ida_nalt: + +set_has_ti1(*args) + set_has_ti1(ea) + +Help on function set_ids_modnode in module ida_nalt: + +set_ids_modnode(*args) + set_ids_modnode(id) + + + Set ids modnode. + + + @param id (C++: netnode) + +Help on function set_imagebase in module ida_nalt: + +set_imagebase(*args) + set_imagebase(base) + + + Set image base address. + + + @param base (C++: ea_t) + +Help on function set_item_color in module ida_nalt: + +set_item_color(*args) + set_item_color(ea, color) + +Help on function set_libitem in module ida_nalt: + +set_libitem(*args) + set_libitem(ea) + +Help on function set_lzero0 in module ida_nalt: + +set_lzero0(*args) + set_lzero0(ea) + +Help on function set_lzero1 in module ida_nalt: + +set_lzero1(*args) + set_lzero1(ea) + +Help on function set_noret in module ida_nalt: + +set_noret(*args) + set_noret(ea) + +Help on function set_notcode in module ida_nalt: + +set_notcode(*args) + set_notcode(ea) + + + Mark address so that it cannot be converted to instruction. + + + @param ea (C++: ea_t) + +Help on function set_notproc in module ida_nalt: + +set_notproc(*args) + set_notproc(ea) + +Help on function set_op_tinfo in module ida_nalt: + +set_op_tinfo(*args) + set_op_tinfo(ea, n, tif) -> bool + +Help on function set_outfile_encoding_idx in module ida_nalt: + +set_outfile_encoding_idx(*args) + set_outfile_encoding_idx(idx) -> bool + + + set encoding to be used when producing files + + @param idx: the encoding index idx can be 0 to use the IDB's default 1 + -byte-per-unit encoding (C++: int) + +Help on function set_refinfo in module ida_nalt: + +set_refinfo(*args) + set_refinfo(ea, n, type, target=BADADDR, base=0, tdelta=0) -> bool + +Help on function set_refinfo_ex in module ida_nalt: + +set_refinfo_ex(*args) + set_refinfo_ex(ea, n, ri) -> bool + +Help on function set_retfp in module ida_nalt: + +set_retfp(*args) + set_retfp(ea) + +Help on function set_root_filename in module ida_nalt: + +set_root_filename(*args) + set_root_filename(file) + + + Set full path of the input file. + + + @param file (C++: const char *) + +Help on function set_source_linnum in module ida_nalt: + +set_source_linnum(*args) + set_source_linnum(ea, lnnum) + +Help on function set_str_type in module ida_nalt: + +set_str_type(*args) + set_str_type(ea, x) + +Help on function set_switch_info in module ida_nalt: + +set_switch_info(*args) + set_switch_info(ea, _in) + +Help on function set_switch_parent in module ida_nalt: + +set_switch_parent(*args) + set_switch_parent(ea, x) + +Help on function set_terse_struc in module ida_nalt: + +set_terse_struc(*args) + set_terse_struc(ea) + +Help on function set_tilcmt in module ida_nalt: + +set_tilcmt(*args) + set_tilcmt(ea) + +Help on function set_tinfo in module ida_nalt: + +set_tinfo(*args) + set_tinfo(ea, tif) -> bool + +Help on function set_usemodsp in module ida_nalt: + +set_usemodsp(*args) + set_usemodsp(ea) + +Help on function set_usersp in module ida_nalt: + +set_usersp(*args) + set_usersp(ea) + +Help on function set_userti in module ida_nalt: + +set_userti(*args) + set_userti(ea) + +Help on function set_visible_item in module ida_nalt: + +set_visible_item(*args) + set_visible_item(ea, visible) + + + Change visibility of item at given ea. + + + @param ea (C++: ea_t) + @param visible (C++: bool) + +Help on function set_zstroff in module ida_nalt: + +set_zstroff(*args) + set_zstroff(ea) + +Help on class strpath_ids_array in module ida_nalt: + +class strpath_ids_array(__builtin__.object) + | Proxy of C++ wrapped_array_t< tid_t,32 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | __init__(self, *args) + | __init__(self, data) -> strpath_ids_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | strpath_ids_array_data_get(self) -> unsigned-ea-like-numeric-type (&)[32]↗ + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_strpath_ids_array(self) + +Help on class strpath_t in module ida_nalt: + +class strpath_t(__builtin__.object) + | Proxy of C++ strpath_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strpath_t + | + | __repr__ = _swig_repr(self) + | + | _strpath_t__getIds = __getIds(self, *args) + | __getIds(self) -> strpath_ids_array + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | delta + | strpath_t_delta_get(self) -> adiff_t + | + | ids + | __getIds(self) -> strpath_ids_array + | + | len + | strpath_t_len_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_strpath_t(self) + +Help on class switch_info_t in module ida_nalt: + +class switch_info_t(__builtin__.object) + | Proxy of C++ switch_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> switch_info_t + | + | __repr__ = _swig_repr(self) + | + | _get_values_lowcase(self, *args) + | _get_values_lowcase(self) -> ea_t + | + | _set_values_lowcase(self, *args) + | _set_values_lowcase(self, values) + | + | assign(self, *args) + | assign(self, other) + | + | clear(self, *args) + | clear(self) + | + | get_jrange_vrange(self, *args) + | get_jrange_vrange(self, jrange=None, vrange=None) -> bool + | + | get_jtable_element_size(self, *args) + | get_jtable_element_size(self) -> int + | + | get_jtable_size(self, *args) + | get_jtable_size(self) -> int + | + | get_lowcase(self, *args) + | get_lowcase(self) -> sval_t + | + | get_shift(self, *args) + | get_shift(self) -> int + | + | get_version(self, *args) + | get_version(self) -> int + | + | get_vtable_element_size(self, *args) + | get_vtable_element_size(self) -> int + | + | has_default(self, *args) + | has_default(self) -> bool + | + | has_elbase(self, *args) + | has_elbase(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_indirect(self, *args) + | is_indirect(self) -> bool + | + | is_nolowcase(self, *args) + | is_nolowcase(self) -> bool + | + | is_sparse(self, *args) + | is_sparse(self) -> bool + | + | is_subtract(self, *args) + | is_subtract(self) -> bool + | + | set_elbase(self, *args) + | set_elbase(self, base) + | + | set_expr(self, *args) + | set_expr(self, r, dt) + | + | set_jtable_element_size(self, *args) + | set_jtable_element_size(self, size) + | + | set_jtable_size(self, *args) + | set_jtable_size(self, size) + | + | set_shift(self, *args) + | set_shift(self, shift) + | + | set_vtable_element_size(self, *args) + | set_vtable_element_size(self, size) + | + | use_std_table(self, *args) + | use_std_table(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | custom + | switch_info_t_custom_get(self) -> uval_t + | + | defjump + | switch_info_t_defjump_get(self) -> ea_t + | + | elbase + | switch_info_t_elbase_get(self) -> ea_t + | + | expr_ea + | switch_info_t_expr_ea_get(self) -> ea_t + | + | flags + | switch_info_t_flags_get(self) -> uint32 + | + | ind_lowcase + | switch_info_t_ind_lowcase_get(self) -> sval_t + | + | jcases + | switch_info_t_jcases_get(self) -> int + | + | jumps + | switch_info_t_jumps_get(self) -> ea_t + | + | lowcase + | _get_values_lowcase(self) -> ea_t + | + | marks + | switch_info_t_marks_get(self) -> eavec_t * + | + | ncases + | switch_info_t_ncases_get(self) -> ushort + | + | regdtype + | switch_info_t_regdtype_get(self) -> op_dtype_t + | + | regnum + | switch_info_t_regnum_get(self) -> int + | + | startea + | switch_info_t_startea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | values + | _get_values_lowcase(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | SWITCH_INFO_VERSION = 2 + | + | __swig_destroy__ = + | delete_switch_info_t(self) + +Help on function switch_info_t__from_ptrval__ in module ida_nalt: + +switch_info_t__from_ptrval__(*args) + switch_info_t__from_ptrval__(ptrval) -> switch_info_t + +Help on function unhide_border in module ida_nalt: + +unhide_border(*args) + unhide_border(ea) + +Help on function unhide_item in module ida_nalt: + +unhide_item(*args) + unhide_item(ea) + +Help on function uses_modsp in module ida_nalt: + +uses_modsp(*args) + uses_modsp(ea) -> bool + +Help on function validate_idb_names in module ida_nalt: + +validate_idb_names(*args) + validate_idb_names(do_repair) -> int + +=== ida_nalt EPYDOC INJECTIONS === +ida_nalt.AFL_ALIGNFLOW +""" +the previous insn was created for alignment purposes only +""" + +ida_nalt.AFL_BNOT0 +""" +the 1st operand is bitwise negated +""" + +ida_nalt.AFL_BNOT1 +""" +the 2nd operand is bitwise negated +""" + +ida_nalt.AFL_COLORED +""" +has user defined instruction color? +""" + +ida_nalt.AFL_FIXEDSPD +""" +should not be modified by modules + +sp delta value is fixed by analysis. +""" + +ida_nalt.AFL_HIDDEN +""" +the item is hidden completely +""" + +ida_nalt.AFL_LIB +""" +item from the standard library. low level flag, is used to set +'FUNC_LIB' of 'func_t' +""" + +ida_nalt.AFL_LINNUM +""" +has line number info +""" + +ida_nalt.AFL_LNAME +""" +has local name too ( 'FF_NAME' should be set) +""" + +ida_nalt.AFL_LZERO0 +""" +toggle leading zeroes for the 1st operand +""" + +ida_nalt.AFL_LZERO1 +""" +toggle leading zeroes for the 2nd operand +""" + +ida_nalt.AFL_MANUAL +""" +the instruction/data is specified by the user +""" + +ida_nalt.AFL_NOBRD +""" +the code/data border is hidden +""" + +ida_nalt.AFL_NORET +""" +for imported function pointers: doesn't return. this flag can also be +used for any instruction which halts or finishes the program execution +""" + +ida_nalt.AFL_NOTCODE +""" +autoanalysis should not create code here +""" + +ida_nalt.AFL_NOTPROC +""" +autoanalysis should not create proc here +""" + +ida_nalt.AFL_PUBNAM +""" +name is public (inter-file linkage) +""" + +ida_nalt.AFL_RETFP +""" +function returns a floating point value +""" + +ida_nalt.AFL_SIGN0 +""" +code: toggle sign of the 1st operand +""" + +ida_nalt.AFL_SIGN1 +""" +code: toggle sign of the 2nd operand +""" + +ida_nalt.AFL_TERSESTR +""" +terse structure variable display? +""" + +ida_nalt.AFL_TI +""" +has typeinfo? ( 'NSUP_TYPEINFO' ) +""" + +ida_nalt.AFL_TI0 +""" +has typeinfo for operand 0? ( 'NSUP_OPTYPES' ) +""" + +ida_nalt.AFL_TI1 +""" +has typeinfo for operand 1? ( 'NSUP_OPTYPES' +1) +""" + +ida_nalt.AFL_TILCMT +""" +has type comment? (such a comment may be changed by IDA) +""" + +ida_nalt.AFL_USEMODSP +""" +example: pop [rsp+N] + +insn modifes SP and uses the modified value +""" + +ida_nalt.AFL_USERSP +""" +user-defined SP value +""" + +ida_nalt.AFL_USERTI +""" +(comes from the user or type library) + +the type information is definitive. +""" + +ida_nalt.AFL_WEAKNAM +""" +name is weak +""" + +ida_nalt.AFL_ZSTROFF +""" +display struct field name at 0 offset when displaying an offset. +example: \\v{offset somestruct.field_0} if this flag is clear, then +\\v{offset somestruct} +""" + +ida_nalt.AP_ALLOWDUPS +""" +use 'dup' construct +""" + +ida_nalt.AP_ARRAY +""" +create as array (this flag is not stored in database) +""" + +ida_nalt.AP_IDXBASEMASK +""" +mask for number base of the indexes +""" + +ida_nalt.AP_IDXBIN +""" +display indexes in binary +""" + +ida_nalt.AP_IDXDEC +""" +display indexes in decimal +""" + +ida_nalt.AP_IDXHEX +""" +display indexes in hex +""" + +ida_nalt.AP_IDXOCT +""" +display indexes in octal +""" + +ida_nalt.AP_INDEX +""" +display array element indexes as comments +""" + +ida_nalt.AP_SIGNED +""" +treats numbers as signed +""" + +ida_nalt.MAXSTRUCPATH +""" +maximal inclusion depth of unions +""" + +ida_nalt.NALT_ABSBASE +""" +absolute segment location +""" + +ida_nalt.NALT_AFLAGS +""" +additional flags for an item +""" + +ida_nalt.NALT_ALIGN +""" +(should by equal to power of 2) + +alignment value if the item is 'FF_ALIGN' +""" + +ida_nalt.NALT_COLOR +""" +instruction/data background color +""" + +ida_nalt.NALT_CREF_FROM +""" +code xref from, idx: source address +""" + +ida_nalt.NALT_CREF_TO +""" +code xref to, idx: target address +""" + +ida_nalt.NALT_DREF_FROM +""" +data xref from, idx: source address +""" + +ida_nalt.NALT_DREF_TO +""" +data xref to, idx: target address +""" + +ida_nalt.NALT_ENUM0 +""" +enum id for the first operand +""" + +ida_nalt.NALT_ENUM1 +""" +enum id for the second operand +""" + +ida_nalt.NALT_GR_LAYX +""" +group layout ptrs, hash: md5 of 'belongs' +""" + +ida_nalt.NALT_LINNUM +""" +source line number +""" + +ida_nalt.NALT_PURGE +""" +number of bytes purged from the stack when a function is called +indirectly +""" + +ida_nalt.NALT_STRTYPE +""" +type of string item +""" + +ida_nalt.NALT_STRUCT +""" +struct id +""" + +ida_nalt.NALT_SWITCH +""" +switch idiom address (used at jump targets) +""" + +ida_nalt.NSUP_ARGEAS +""" +instructions that initialize call arguments +""" + +ida_nalt.NSUP_ARRAY +""" +array parameters +""" + +ida_nalt.NSUP_CMT +""" +regular comment +""" + +ida_nalt.NSUP_CUSTDT +""" +custom data type id +""" + +ida_nalt.NSUP_FOP1 +""" +forced operand 1 +""" + +ida_nalt.NSUP_FOP2 +""" +forced operand 2 +""" + +ida_nalt.NSUP_FOP3 +""" +forced operand 3 +""" + +ida_nalt.NSUP_FOP4 +""" +forced operand 4 +""" + +ida_nalt.NSUP_FOP5 +""" +forced operand 5 +""" + +ida_nalt.NSUP_FOP6 +""" +forced operand 6 +""" + +ida_nalt.NSUP_FOP7 +""" +forced operand 7 +""" + +ida_nalt.NSUP_FOP8 +""" +forced operand 8 +""" + +ida_nalt.NSUP_FTAILS +""" +function tails or tail referers values NSUP_FTAILS..NSUP_FTAILS+0x1000 +are reserved +""" + +ida_nalt.NSUP_GROUP +""" +graph group information values NSUP_GROUP..NSUP_GROUP+0x1000 are +reserved +""" + +ida_nalt.NSUP_GROUPS +""" +SEG_GRP: pack_dd encoded list of selectors. +""" + +ida_nalt.NSUP_GR_INFO +""" +group node info: color, ea, text +""" + +ida_nalt.NSUP_GR_LAYT +""" +group layouts, idx: layout pointer +""" + +ida_nalt.NSUP_JINFO +""" +jump table info +""" + +ida_nalt.NSUP_LLABEL +""" +local labels. values NSUP_LLABEL..NSUP_LLABEL+0x1000 are reserved +""" + +ida_nalt.NSUP_MANUAL +""" +manual instruction. values NSUP_MANUAL..NSUP_MANUAL+0x1000 are +reserved +""" + +ida_nalt.NSUP_OMFGRP +""" +OMF: group of segments (not used anymore) +""" + +ida_nalt.NSUP_OPTYPES +""" +operand type information. values NSUP_OPTYPES..NSUP_OPTYPES+0x100000 +are reserved +""" + +ida_nalt.NSUP_OREF0 +""" +outer complex reference information for operand 1 +""" + +ida_nalt.NSUP_OREF1 +""" +outer complex reference information for operand 2 +""" + +ida_nalt.NSUP_OREF2 +""" +outer complex reference information for operand 3 +""" + +ida_nalt.NSUP_OREF3 +""" +outer complex reference information for operand 4 +""" + +ida_nalt.NSUP_OREF4 +""" +outer complex reference information for operand 5 +""" + +ida_nalt.NSUP_OREF5 +""" +outer complex reference information for operand 6 +""" + +ida_nalt.NSUP_OREF6 +""" +outer complex reference information for operand 7 +""" + +ida_nalt.NSUP_OREF7 +""" +outer complex reference information for operand 8 +""" + +ida_nalt.NSUP_ORIGFMD +""" +function metadata before lumina information was applied values +NSUP_ORIGFMD..NSUP_ORIGFMD+0x1000 are reserved +""" + +ida_nalt.NSUP_POINTS +""" +SP change points blob (see funcs.cpp). values +NSUP_POINTS..NSUP_POINTS+0x1000 are reserved +""" + +ida_nalt.NSUP_REF0 +""" +complex reference information for operand 1 +""" + +ida_nalt.NSUP_REF1 +""" +complex reference information for operand 2 +""" + +ida_nalt.NSUP_REF2 +""" +complex reference information for operand 3 +""" + +ida_nalt.NSUP_REF3 +""" +complex reference information for operand 4 +""" + +ida_nalt.NSUP_REF4 +""" +complex reference information for operand 5 +""" + +ida_nalt.NSUP_REF5 +""" +complex reference information for operand 6 +""" + +ida_nalt.NSUP_REF6 +""" +complex reference information for operand 7 +""" + +ida_nalt.NSUP_REF7 +""" +complex reference information for operand 8 +""" + +ida_nalt.NSUP_REGARG +""" +register argument type/name descriptions values +NSUP_REGARG..NSUP_REGARG+0x1000 are reserved +""" + +ida_nalt.NSUP_REGVAR +""" +register variables. values NSUP_REGVAR..NSUP_REGVAR+0x1000 are +reserved +""" + +ida_nalt.NSUP_REPCMT +""" +repeatable comment +""" + +ida_nalt.NSUP_SEGTRANS +""" +segment translations +""" + +ida_nalt.NSUP_STROFF0 +""" +stroff: struct path for the first operand +""" + +ida_nalt.NSUP_STROFF1 +""" +stroff: struct path for the second operand +""" + +ida_nalt.NSUP_SWITCH +""" +switch information +""" + +ida_nalt.NSUP_TYPEINFO +""" +type information. values NSUP_TYPEINFO..NSUP_TYPEINFO+0x1000 are +reserved +""" + +ida_nalt.NSUP_XREFPOS +""" +saved xref address and type in the xrefs window +""" + +ida_nalt.PATCH_TAG +""" +Patch netnode tag. +""" + +ida_nalt.REFINFO_CUSTOM +""" +a custom reference the kernel will call \\ph{notify}(ph.custom_offset, +.... that can change all arguments used for calculations. This flag is +useful for custom fixups +""" + +ida_nalt.REFINFO_NOBASE +""" +don't create the base xref implies that the base can be any value nb: +base xrefs are created only if the offset base points to the middle of +a segment +""" + +ida_nalt.REFINFO_PASTEND +""" +reference past an item it may point to an nonexistent address do not +destroy alignment dirs +""" + +ida_nalt.REFINFO_RVAOFF +""" +based reference (rva) 'refinfo_t::base' will be forced to +'get_imagebase()' such a reference is displayed with the \\ash{a_rva} +keyword +""" + +ida_nalt.REFINFO_SIGNEDOP +""" +the operand value is sign-extended (only supported for +REF_OFF8/16/32/64) +""" + +ida_nalt.REFINFO_SUBTRACT +""" +the reference value is subtracted from the base value instead of (as +usual) being added to it +""" + +ida_nalt.REFINFO_TYPE +""" +reference type +""" + +ida_nalt.RIDX_ABINAME +""" +ABI name (processor specific) +""" + +ida_nalt.RIDX_ARCHIVE_PATH +""" +archive file path +""" + +ida_nalt.RIDX_C_MACROS +""" +C predefined macros. +""" + +ida_nalt.RIDX_DBG_BINPATHS +""" +unused (20 indexes) +""" + +ida_nalt.RIDX_DUALOP_GRAPH +""" +Graph text representation options. +""" + +ida_nalt.RIDX_DUALOP_TEXT +""" +Text text representation options. +""" + +ida_nalt.RIDX_FILE_FORMAT_NAME +""" +file format name for loader modules +""" + +ida_nalt.RIDX_GROUPS +""" +segment group information (see init_groups()) +""" + +ida_nalt.RIDX_H_PATH +""" +C header path. +""" + +ida_nalt.RIDX_IDA_VERSION +""" +version of ida which created the database +""" + +ida_nalt.RIDX_INCLUDE +""" +assembler include file name +""" + +ida_nalt.RIDX_MD5 +""" +MD5 of the input file. +""" + +ida_nalt.RIDX_NOTEPAD +""" +notepad blob, occupies 1000 indexes (1MB of text) +""" + +ida_nalt.RIDX_PROBLEMS +""" +problem lists +""" + +ida_nalt.RIDX_SELECTED_EXTLANG +""" +last selected extlang name (from the execute script box) +""" + +ida_nalt.RIDX_SELECTORS +""" +2..63 are for selector_t blob (see init_selectors()) +""" + +ida_nalt.RIDX_SHA256 +""" +SHA256 of the input file. +""" + +ida_nalt.RIDX_SMALL_IDC +""" +Instant IDC statements, blob. +""" + +ida_nalt.RIDX_SMALL_IDC_OLD +""" +Instant IDC statements (obsolete) +""" + +ida_nalt.RIDX_SRCDBG_PATHS +""" +source debug paths, occupies 20 indexes +""" + +ida_nalt.RIDX_SRCDBG_UNDESIRED +""" +user-closed source files, occupies 20 indexes +""" + +ida_nalt.RIDX_STR_ENCODINGS +""" +a list of encodings for the program strings +""" + +ida_nalt.STRENC_DEFAULT +""" +use default encoding for this type (see 'get_default_encoding_idx()' ) +""" + +ida_nalt.STRENC_NONE +""" +force no-conversion encoding +""" + +ida_nalt.STRTYPE_C +""" +Zero-terminated 16bit chars. +""" + +ida_nalt.STRTYPE_C_16 +""" +Zero-terminated 32bit chars. +""" + +ida_nalt.STRTYPE_C_32 +""" +Pascal-style, one-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN2 +""" +Pascal-style, 16bit chars, two-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN2_16 +""" +Pascal-style, four-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN4 +""" +Pascal-style, 16bit chars, four-byte length prefix. +""" + +ida_nalt.STRTYPE_PASCAL +""" +Pascal-style, 16bit chars, one-byte length prefix. +""" + +ida_nalt.STRTYPE_PASCAL_16 +""" +Pascal-style, two-byte length prefix. +""" + +ida_nalt.STRTYPE_TERMCHR +""" +C-style string. + +< Character-terminated string. The termination characters are kept in +the next bytes of string type. +""" + +ida_nalt.SWI_CUSTOM +""" +custom jump table. \\ph{create_switch_xrefs} will be called to create +code xrefs for the table. Custom jump table must be created by the +module (see also 'SWI_STDTBL' ) +""" + +ida_nalt.SWI_DEFRET +""" +return in the default case (defjump==BADADDR) +""" + +ida_nalt.SWI_DEF_IN_TBL +""" +default case is an entry in the jump table. This flag is applicable in +2 cases:The sparse indirect switch (i.e. a switch with a values table) +=""> ==+ 1. The default case entry is the last one +in the table (or the first one in the case of an inversed jump +table).The switch with insns in the jump table. The default case entry +is before the first entry of the table. See also the +find_defjump_from_table() helper function. +""" + +ida_nalt.SWI_ELBASE +""" +segment will be used) + +elbase is present (otherwise the base of the switch +""" + +ida_nalt.SWI_HXNOLOWCASE +""" +lowcase value should not be used by the decompiler (internal flag) +""" + +ida_nalt.SWI_INDIRECT +""" +(for sparse switches) + +value table elements are used as indexes into the jump table +""" + +ida_nalt.SWI_J32 +""" +32-bit jump offsets +""" + +ida_nalt.SWI_JMPINSN +""" +jump table entries are insns. For such entries SHIFT has a different +meaning. It denotes the number of insns in the entry. For example, 0 - +the entry contains the jump to the case, 1 - the entry contains one +insn like a 'mov' and jump to the end of case, and so on. +""" + +ida_nalt.SWI_JMP_INV +""" +for first entry in values table) + +jumptable is inversed. (last entry is +""" + +ida_nalt.SWI_JSIZE +""" +jump offset expansion bit +""" + +ida_nalt.SWI_RESERVED +""" +was: SWI_DEFAULT +""" + +ida_nalt.SWI_SELFREL +""" +jump address is relative to the element not to ELBASE +""" + +ida_nalt.SWI_SEPARATE +""" +create an array of individual elements (otherwise separate items) +""" + +ida_nalt.SWI_SHIFT_MASK +""" +use formula (element< str + + + Append names of struct fields to a name if the name is a struct name. + + @param disp: displacement from the name (C++: adiff_t *) + @param n: number of operand n which the name appears (C++: int) + @param path: 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 (if any). (C++: const tid_t + *) + @param flags: the input flags. they will be returned if the struct + cannot be found. (C++: flags_t) + @param delta: delta to add to displacement (C++: adiff_t) + @param appzero: should append a struct field name if the displacement + is zero? (C++: bool) + @return: flags of the innermost struct member or the input flags + +Help on function calc_gtn_flags in module ida_name: + +calc_gtn_flags(fromaddr, ea) + Calculate flags for get_ea_name() function + + @param fromaddr: the referring address. May be BADADDR. + @param ea: linear address + + @return: flags + +Help on function cleanup_name in module ida_name: + +cleanup_name(*args) + cleanup_name(ea, name, flags=0) -> str + +Help on function del_debug_names in module ida_name: + +del_debug_names(*args) + del_debug_names(ea1, ea2) + +Help on function del_global_name in module ida_name: + +del_global_name(*args) + del_global_name(ea) -> bool + +Help on function del_local_name in module ida_name: + +del_local_name(*args) + del_local_name(ea) -> bool + +Help on function demangle_name in module ida_name: + +demangle_name(*args) + demangle_name(name, disable_mask, demreq=DQT_FULL) -> str + + + Demangle a name. + + @param name: name to demangle (C++: const char *) + @param disable_mask: bits to inhibit parts of demangled name (see + MNG_). by the M_COMPILER bits a specific compiler + can be selected (see MT_). (C++: uint32) + @param demreq (C++: demreq_type_t) + @return: ME_... or MT__ bitmasks from demangle.hpp + +Help on class ea_name_t in module ida_name: + +class ea_name_t(__builtin__.object) + | Proxy of C++ ea_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ea_name_t + | __init__(self, _ea, _name) -> ea_name_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | ea_name_t_ea_get(self) -> ea_t + | + | name + | ea_name_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ea_name_t(self) + +Help on class ea_name_vec_t in module ida_name: + +class ea_name_vec_t(__builtin__.object) + | Proxy of C++ qvector< ea_name_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> ea_name_t + | + | __init__(self, *args) + | __init__(self) -> ea_name_vec_t + | __init__(self, x) -> ea_name_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> ea_name_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> ea_name_t + | begin(self) -> ea_name_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ea_name_t + | end(self) -> ea_name_t + | + | erase(self, *args) + | erase(self, it) -> ea_name_t + | erase(self, first, last) -> ea_name_t + | + | extract(self, *args) + | extract(self) -> ea_name_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=ea_name_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> ea_name_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ea_name_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ea_name_vec_t(self) + +Help on function extract_name in module ida_name: + +extract_name(*args) + extract_name(line, x) -> str + + + Extract a name or address from the specified string. + + @param line: input string (C++: const char *) + @param x: x coordinate of cursor (C++: int) + @return: -1 if cannot extract. otherwise length of the name + +Help on function force_name in module ida_name: + +force_name(*args) + force_name(ea, name, flags=0) -> bool + +Help on function get_colored_demangled_name in module ida_name: + +get_colored_demangled_name(*args) + get_colored_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring + +Help on function get_colored_long_name in module ida_name: + +get_colored_long_name(*args) + get_colored_long_name(ea, gtn_flags=0) -> qstring + +Help on function get_colored_name in module ida_name: + +get_colored_name(*args) + get_colored_name(ea) -> qstring + +Help on function get_colored_short_name in module ida_name: + +get_colored_short_name(*args) + get_colored_short_name(ea, gtn_flags=0) -> qstring + +Help on function get_cp_validity in module ida_name: + +get_cp_validity(*args) + get_cp_validity(kind, cp, endcp=wchar32_t(-1)) -> bool + + + Is the given codepoint (or range) acceptable in the given context? If + 'endcp' is not BADCP, it is considered to be the end of the range: + [cp, endcp), and is not included in the range + + @param kind (C++: ucdr_kind_t) + @param cp (C++: wchar32_t) + @param endcp (C++: wchar32_t) + +Help on function get_debug_name in module ida_name: + +get_debug_name(*args) + get_debug_name(ea_ptr, how) -> str + +Help on function get_debug_name_ea in module ida_name: + +get_debug_name_ea(*args) + get_debug_name_ea(name) -> ea_t + +Help on function get_debug_names in module ida_name: + +get_debug_names(*args) + get_debug_names(names, ea1, ea2) + get_debug_names(ea1, ea2, return_list=False) -> PyObject * + +Help on function get_demangled_name in module ida_name: + +get_demangled_name(*args) + get_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring + +Help on function get_ea_name in module ida_name: + +get_ea_name(*args) + get_ea_name(ea, gtn_flags=0) -> qstring + + + Get name at the specified address. + + @param ea: linear address (C++: ea_t) + @param gtn_flags: how exactly the name should be retrieved. + combination of bits for get_ea_name() function. + There is a convenience bits (C++: int) + @return: success + +Help on function get_long_name in module ida_name: + +get_long_name(*args) + get_long_name(ea, gtn_flags=0) -> qstring + +Help on function get_name in module ida_name: + +get_name(*args) + get_name(ea) -> qstring + +Help on function get_name_base_ea in module ida_name: + +get_name_base_ea(*args) + get_name_base_ea(_from, to) -> ea_t + + + Get address of the name used in the expression for the address + + @param _from: address of the operand which references to the address + (C++: ea_t) + @param to: the referenced address (C++: ea_t) + @return: address of the name used to represent the operand + +Help on function get_name_color in module ida_name: + +get_name_color(*args) + get_name_color(_from, ea) -> color_t + + + Calculate flags for 'get_ea_name()' function. + + Get name color. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . The kernel returns + a local name color if the reference is within a + function, i.e. 'from' and 'ea' belong to the same + function. (C++: ea_t) + @param ea: linear address (C++: ea_t) + +Help on function get_name_ea in module ida_name: + +get_name_ea(*args) + get_name_ea(_from, name) -> ea_t + + + Get address of the name. Dummy names (like byte_xxxx where xxxx are + hex digits) are parsed by this function to obtain the address. The + database is not consulted for them. This function works only with + regular names. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: address of the name or BADADDR + +Help on function get_name_expr in module ida_name: + +get_name_expr(*args) + get_name_expr(_from, n, ea, off, flags=0x0001) -> str + + + Convert address to name expression (name with a displacement). This + function takes into account fixup information and returns a colored + name expression (in the form +/- ). It also knows about + structure members and arrays. If the specified address doesn't have a + name, a dummy name is generated. + + @param _from: 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 the + operand in the instruction. (C++: ea_t) + @param n: number of referencing operand. for data items specify 0 + (C++: int) + @param ea: address to convert to name expression (C++: ea_t) + @param off: the value of name expression. this parameter is used only + to check that the name expression will have the wanted + value. 'off' may be equal to BADADDR but this is + discouraged because it prohibits checks. (C++: uval_t) + @param flags: Name expression flags (C++: int) + @return: < 0 if address is not valid, no segment or other failure. + otherwise the length of the name expression in characters. + +Help on function get_name_value in module ida_name: + +get_name_value(*args) + get_name_value(_from, name) -> int + + + Get value of the name. This function knows about: regular names, + enums, special segments, etc. + + @param _from: linear address where the name is used if not applicable, + then should be BADADDR (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: Name value result codes + +Help on function get_nice_colored_name in module ida_name: + +get_nice_colored_name(*args) + get_nice_colored_name(ea, flags=0) -> str + + + Get a nice colored name at the specified address. Ex:segment:sub+offse + tsegment:sub:local_labelsegment:labelsegment:addresssegment:address+of + fset + + @param ea (C++: ea_t) + @param flags (C++: int) + @return: the length of the generated name in bytes. + +Help on function get_nlist_ea in module ida_name: + +get_nlist_ea(*args) + get_nlist_ea(idx) -> ea_t + + + Get address from the list at 'idx'. + + + @param idx (C++: size_t) + +Help on function get_nlist_idx in module ida_name: + +get_nlist_idx(*args) + get_nlist_idx(ea) -> size_t + + + Get index of the name in the listreturns the closest match. may return + idx >= size. + + @param ea (C++: ea_t) + +Help on function get_nlist_name in module ida_name: + +get_nlist_name(*args) + get_nlist_name(idx) -> char const * + + + Get name using idx. + + + @param idx (C++: size_t) + +Help on function get_nlist_size in module ida_name: + +get_nlist_size(*args) + get_nlist_size() -> size_t + + + Get number of names in the list. + +Help on function get_short_name in module ida_name: + +get_short_name(*args) + get_short_name(ea, gtn_flags=0) -> qstring + +Help on function get_visible_name in module ida_name: + +get_visible_name(*args) + get_visible_name(ea, gtn_flags=0) -> qstring + +Help on function hide_name in module ida_name: + +hide_name(*args) + hide_name(ea) + + + Remove name from the list of names + + @param ea: address of the name (C++: ea_t) + +Help on function is_ident in module ida_name: + +is_ident(*args) + is_ident(name) -> bool + + + Is a valid name? (including ::MangleChars) + + + @param name (C++: const char *) + +Help on function is_ident_cp in module ida_name: + +is_ident_cp(*args) + is_ident_cp(cp) -> bool + + + Can a character appear in a name? (present in ::NameChars or + ::MangleChars) + + + @param cp (C++: wchar32_t) + +Help on function is_in_nlist in module ida_name: + +is_in_nlist(*args) + is_in_nlist(ea) -> bool + + + Is name included into names list? + + + @param ea (C++: ea_t) + +Help on function is_name_defined_locally in module ida_name: + +is_name_defined_locally(*args) + is_name_defined_locally(pfn, name, ignore_name_def, ea1=BADADDR, ea2=BADADDR) -> bool + + + Is the name defined locally in the specified function? + + @param pfn: pointer to function (C++: func_t *) + @param name: name to check (C++: const char *) + @param ignore_name_def: which names to ignore when checking (C++: + ignore_name_def_t) + @param ea1: the starting address of the range inside the function + (optional) (C++: ea_t) + @param ea2: the ending address of the range inside the function + (optional) (C++: ea_t) + @return: true if the name has been defined + +Help on function is_public_name in module ida_name: + +is_public_name(*args) + is_public_name(ea) -> bool + +Help on function is_strlit_cp in module ida_name: + +is_strlit_cp(*args) + is_strlit_cp(cp, specific_ranges=None) -> bool + + + Can a character appear in a string literal (present in ::StrlitChars) + If 'specific_ranges' are specified, those will be used instead of the + ones corresponding to the current culture (only if ::StrlitChars is + configured to use the current culture) + + @param cp (C++: wchar32_t) + @param specific_ranges (C++: const rangeset_crefvec_t *) + +Help on function is_uname in module ida_name: + +is_uname(*args) + is_uname(name) -> bool + + + Is valid user-specified name? (valid name & !dummy prefix). + + @param name: name to test. may be NULL. (C++: const char *) + +Help on function is_valid_cp in module ida_name: + +is_valid_cp(*args) + is_valid_cp(cp, kind, data=None) -> bool + + + Is the given codepoint acceptable in the given context? + + + @param cp (C++: wchar32_t) + @param kind (C++: nametype_t) + @param data (C++: void *) + +Help on function is_valid_typename in module ida_name: + +is_valid_typename(*args) + is_valid_typename(name) -> bool + + + Is valid type name? + + @param name: name to test. may be NULL. (C++: const char *) + +Help on function is_visible_cp in module ida_name: + +is_visible_cp(*args) + is_visible_cp(cp) -> bool + + + Can a character be displayed in a name? (present in ::NameChars) + + + @param cp (C++: wchar32_t) + +Help on function is_weak_name in module ida_name: + +is_weak_name(*args) + is_weak_name(ea) -> bool + +Help on function make_name_auto in module ida_name: + +make_name_auto(*args) + make_name_auto(ea) -> bool + +Help on function make_name_non_public in module ida_name: + +make_name_non_public(*args) + make_name_non_public(ea) + +Help on function make_name_non_weak in module ida_name: + +make_name_non_weak(*args) + make_name_non_weak(ea) + +Help on function make_name_public in module ida_name: + +make_name_public(*args) + make_name_public(ea) + +Help on function make_name_user in module ida_name: + +make_name_user(*args) + make_name_user(ea) -> bool + +Help on function make_name_weak in module ida_name: + +make_name_weak(*args) + make_name_weak(ea) + +Help on function rebuild_nlist in module ida_name: + +rebuild_nlist(*args) + rebuild_nlist() + + + Rebuild names list. + +Help on function reorder_dummy_names in module ida_name: + +reorder_dummy_names(*args) + reorder_dummy_names() + + + Renumber dummy names. + +Help on function set_cp_validity in module ida_name: + +set_cp_validity(*args) + set_cp_validity(kind, cp, endcp=wchar32_t(-1), valid=True) + + + Mark the given codepoint (or range) as acceptable or unacceptable in + the given context If 'endcp' is not BADCP, it is considered to be the + end of the range: [cp, endcp), and is not included in the range + + @param kind (C++: ucdr_kind_t) + @param cp (C++: wchar32_t) + @param endcp (C++: wchar32_t) + @param valid (C++: bool) + +Help on function set_debug_name in module ida_name: + +set_debug_name(*args) + set_debug_name(ea, name) -> bool + +Help on function set_dummy_name in module ida_name: + +set_dummy_name(*args) + set_dummy_name(_from, ea) -> bool + + + Give an autogenerated (dummy) name. Autogenerated names have special + prefixes (loc_...). + + @param _from: linear address of the operand which references to the + address (C++: ea_t) + @param ea: linear address (C++: ea_t) + +Help on function set_name in module ida_name: + +set_name(*args) + set_name(ea, name, flags=0) -> bool + + + Set or delete name of an item at the specified address. An item can be + anything: instruction, function, data byte, word, string, structure, + etc... Include name into the list of names. + + @param ea: linear address. do nothing if ea is not valid (return 0). + tail bytes can't have names. (C++: ea_t) + @param name: new name. NULL: do nothing (return 0). "" : delete + name. otherwise this is a new name. (C++: const char *) + @param flags: Set name flags . If a bit is not specified, then the + corresponding action is not performed and the name will + retain the same bits as before calling this function. + For new names, default is: non-public, non-weak, non- + auto. (C++: int) + +Help on function show_name in module ida_name: + +show_name(*args) + show_name(ea) + + + Insert name to the list of names. + + + @param ea (C++: ea_t) + +Help on function validate_name in module ida_name: + +validate_name(*args) + validate_name(name, type, flags=0) -> PyObject * + + + Validate a name. This function replaces all invalid characters in the + name with SUBSTCHAR. However, it will return false if name is valid + but not allowed to be an identifier (is a register name). + + @param name: ptr to name. the name will be modified (C++: qstring *) + @param type: the type of name we want to validate (C++: nametype_t) + @param flags: see SN_* . Only SN_IDBENC is currently considered (C++: + int) + @return: success + +=== ida_name EPYDOC INJECTIONS === +ida_name.FUNC_IMPORT_PREFIX +""" +Name prefix used by IDA for the imported functions. +""" + +ida_name.GETN_APPZERO +""" +append a struct field name if the field offset is zero? + +meaningful only if the name refers to a structure. +""" + +ida_name.GETN_NODUMMY +""" +do not create a new dummy name but pretend it exists +""" + +ida_name.GETN_NOFIXUP +""" +ignore the fixup information when producing the name +""" + +ida_name.GNCN_NOCOLOR +""" +generate an uncolored name +""" + +ida_name.GNCN_NODBGNM +""" +don't use debug names +""" + +ida_name.GNCN_NOFUNC +""" +don't generate funcname+... expressions +""" + +ida_name.GNCN_NOLABEL +""" +don't generate labels +""" + +ida_name.GNCN_NOSEG +""" +ignore the segment prefix when producing the name +""" + +ida_name.GNCN_PREFDBG +""" +if using debug names, prefer debug names over function names +""" + +ida_name.GNCN_REQFUNC +""" +return 0 if the address does not belong to a function +""" + +ida_name.GNCN_REQNAME +""" +return 0 if the address can only be represented as a hex number +""" + +ida_name.GNCN_SEGNUM +""" +segment part is displayed as a hex number +""" + +ida_name.GNCN_SEG_FUNC +""" +generate both segment and function names (default is to omit segment +name if a function name is present) +""" + +ida_name.GN_COLORED +""" +return colored name +""" + +ida_name.GN_DEMANGLED +""" +return demangled name +""" + +ida_name.GN_ISRET +""" +for dummy names: use retloc +""" + +ida_name.GN_LOCAL +""" +try to get local name first; if failed, get global +""" + +ida_name.GN_LONG +""" +use long form of demangled name +""" + +ida_name.GN_NOT_DUMMY +""" +do not return a dummy name +""" + +ida_name.GN_NOT_ISRET +""" +for dummy names: do not use retloc +""" + +ida_name.GN_SHORT +""" +use short form of demangled name +""" + +ida_name.GN_STRICT +""" +fail if cannot demangle +""" + +ida_name.GN_VISIBLE +""" +replace forbidden characters by SUBSTCHAR +""" + +ida_name.MAXNAMELEN +""" +Maximum length of a name in IDA (with the trailing zero) +""" + +ida_name.NT_ABS +""" +name is absolute symbol ( 'SEG_ABSSYM' ) +""" + +ida_name.NT_BMASK +""" +name is a bit group mask name +""" + +ida_name.NT_BYTE +""" +name is byte name (regular name) +""" + +ida_name.NT_ENUM +""" +name is symbolic constant +""" + +ida_name.NT_LOCAL +""" +name is local label +""" + +ida_name.NT_NONE +""" +name doesn't exist or has no value +""" + +ida_name.NT_REGVAR +""" +name is a renamed register (*value is idx into pfn->regvars) +""" + +ida_name.NT_SEG +""" +name is segment or segment register name +""" + +ida_name.NT_STKVAR +""" +name is stack variable name +""" + +ida_name.NT_STROFF +""" +name is structure member +""" + +ida_name.SN_AUTO +""" +if set, make name autogenerated +""" + +ida_name.SN_DELTAIL +""" +delete the hindering item + +if name cannot be set because of a tail byte, +""" + +ida_name.SN_FORCE +""" +if the specified name is already present in the database, try +variations with a numerical suffix like "_123" +""" + +ida_name.SN_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly. Specifying SN_IDBENC also implies SN_NODUMMY +""" + +ida_name.SN_LOCAL +""" +create local name. a function should exist. local names can't be +public or weak. also they are not included into the list of names they +can't have dummy prefixes. +""" + +ida_name.SN_NOCHECK +""" +Don't fail if the name contains invalid characters. If this bit is +clear, all invalid chars (those !is_ident_cp()) will be replaced by +SUBSTCHAR List of valid characters is defined in ida.cfg +""" + +ida_name.SN_NODUMMY +""" +automatically prepend the name with '_' if it begins with a dummy +suffix such as 'sub_'. See also SN_IDBENC +""" + +ida_name.SN_NOLIST +""" +if set, exclude name from the list. if not set, then include the name +into the list (however, if other bits are set, the name might be +immediately excluded from the list). +""" + +ida_name.SN_NON_AUTO +""" +if set, make name non-autogenerated +""" + +ida_name.SN_NON_PUBLIC +""" +if set, make name non-public +""" + +ida_name.SN_NON_WEAK +""" +if set, make name non-weak +""" + +ida_name.SN_NOWARN +""" +don't display a warning if failed +""" + +ida_name.SN_PUBLIC +""" +if set, make name public +""" + +ida_name.SN_WEAK +""" +if set, make name weak +""" +=== ida_name EPYDOC INJECTIONS END === +Help on function exist in module ida_netnode: + +exist(*args) + exist(n) -> bool + +Help on class netnode in module ida_netnode: + +class netnode(__builtin__.object) + | Proxy of C++ netnode class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, n) -> bool + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> netnode + | __init__(self, num) -> netnode + | __init__(self, _name, namlen=0, do_create=False) -> netnode + | + | __ne__(self, *args) + | __ne__(self, n) -> bool + | __ne__(self, x) -> bool + | + | __repr__ = _swig_repr(self) + | + | altdel(self, *args) + | altdel(self, alt, tag=atag) -> bool + | altdel(self) -> bool + | + | altdel_all(self, *args) + | altdel_all(self, tag) -> bool + | + | altdel_ea(self, *args) + | altdel_ea(self, ea, tag=atag) -> bool + | + | altdel_idx8(self, *args) + | altdel_idx8(self, alt, tag) -> bool + | + | altfirst(self, *args) + | altfirst(self, tag=atag) -> nodeidx_t + | + | altfirst_idx8(self, *args) + | altfirst_idx8(self, tag) -> nodeidx_t + | + | altlast(self, *args) + | altlast(self, tag=atag) -> nodeidx_t + | + | altlast_idx8(self, *args) + | altlast_idx8(self, tag) -> nodeidx_t + | + | altnext(self, *args) + | altnext(self, cur, tag=atag) -> nodeidx_t + | + | altnext_idx8(self, *args) + | altnext_idx8(self, cur, tag) -> nodeidx_t + | + | altprev(self, *args) + | altprev(self, cur, tag=atag) -> nodeidx_t + | + | altprev_idx8(self, *args) + | altprev_idx8(self, cur, tag) -> nodeidx_t + | + | altset(self, *args) + | altset(self, alt, value, tag=atag) -> bool + | + | altset_ea(self, *args) + | altset_ea(self, ea, value, tag=atag) -> bool + | + | altset_idx8(self, *args) + | altset_idx8(self, alt, val, tag) -> bool + | + | altshift(self, *args) + | altshift(self, _from, to, size, tag=atag) -> size_t + | + | altval(self, *args) + | altval(self, alt, tag=atag) -> nodeidx_t + | + | altval_ea(self, *args) + | altval_ea(self, ea, tag=atag) -> nodeidx_t + | + | altval_idx8(self, *args) + | altval_idx8(self, alt, tag) -> nodeidx_t + | + | blobsize(self, *args) + | blobsize(self, _start, tag) -> size_t + | + | blobsize_ea(self, *args) + | blobsize_ea(self, ea, tag) -> size_t + | + | chardel(self, *args) + | chardel(self, alt, tag) -> bool + | + | chardel_ea(self, *args) + | chardel_ea(self, ea, tag) -> bool + | + | chardel_idx8(self, *args) + | chardel_idx8(self, alt, tag) -> bool + | + | charfirst(self, *args) + | charfirst(self, tag) -> nodeidx_t + | + | charfirst_idx8(self, *args) + | charfirst_idx8(self, tag) -> nodeidx_t + | + | charlast(self, *args) + | charlast(self, tag) -> nodeidx_t + | + | charlast_idx8(self, *args) + | charlast_idx8(self, tag) -> nodeidx_t + | + | charnext(self, *args) + | charnext(self, cur, tag) -> nodeidx_t + | + | charnext_idx8(self, *args) + | charnext_idx8(self, cur, tag) -> nodeidx_t + | + | charprev(self, *args) + | charprev(self, cur, tag) -> nodeidx_t + | + | charprev_idx8(self, *args) + | charprev_idx8(self, cur, tag) -> nodeidx_t + | + | charset(self, *args) + | charset(self, alt, val, tag) -> bool + | + | charset_ea(self, *args) + | charset_ea(self, ea, val, tag) -> bool + | + | charset_idx8(self, *args) + | charset_idx8(self, alt, val, tag) -> bool + | + | charshift(self, *args) + | charshift(self, _from, to, size, tag) -> size_t + | + | charval(self, *args) + | charval(self, alt, tag) -> uchar + | + | charval_ea(self, *args) + | charval_ea(self, ea, tag) -> uchar + | + | charval_idx8(self, *args) + | charval_idx8(self, alt, tag) -> uchar + | + | copyto(self, *args) + | copyto(self, target, count=1) -> size_t + | + | create(self, *args) + | create(self, _name, namlen=0) -> bool + | create(self) -> bool + | + | delblob(self, *args) + | delblob(self, _start, tag) -> int + | + | delblob_ea(self, *args) + | delblob_ea(self, ea, tag) -> int + | + | delvalue(self, *args) + | delvalue(self) -> bool + | + | eadel(self, *args) + | eadel(self, ea, tag) -> bool + | + | eadel_idx8(self, *args) + | eadel_idx8(self, idx, tag) -> bool + | + | eaget(self, *args) + | eaget(self, ea, tag) -> ea_t + | + | eaget_idx(self, *args) + | eaget_idx(self, idx, tag) -> ea_t + | + | eaget_idx8(self, *args) + | eaget_idx8(self, idx, tag) -> ea_t + | + | easet(self, *args) + | easet(self, ea, addr, tag) -> bool + | + | easet_idx(self, *args) + | easet_idx(self, idx, addr, tag) -> bool + | + | easet_idx8(self, *args) + | easet_idx8(self, idx, addr, tag) -> bool + | + | end(self, *args) + | end(self) -> bool + | + | get_name(self, *args) + | get_name(self) -> ssize_t + | + | getblob(self, *args) + | getblob(self, start, tag) -> PyObject * + | + | getblob_ea(self, *args) + | getblob_ea(self, ea, tag) -> PyObject * + | + | getclob(self, *args) + | getclob(self, start, tag) -> PyObject * + | + | hashdel(self, *args) + | hashdel(self, idx, tag=htag) -> bool + | + | hashdel_all(self, *args) + | hashdel_all(self, tag=htag) -> bool + | + | hashfirst(self, *args) + | hashfirst(self, tag=htag) -> ssize_t + | + | hashlast(self, *args) + | hashlast(self, tag=htag) -> ssize_t + | + | hashnext(self, *args) + | hashnext(self, idx, tag=htag) -> ssize_t + | + | hashprev(self, *args) + | hashprev(self, idx, tag=htag) -> ssize_t + | + | hashset(self, *args) + | hashset(self, idx, value, tag=htag) -> bool + | + | hashset_buf(self, *args) + | hashset_buf(self, idx, py_str, tag=htag) -> bool + | + | hashset_idx(self, *args) + | hashset_idx(self, idx, value, tag=htag) -> bool + | + | hashstr(self, *args) + | hashstr(self, idx, tag=htag) -> ssize_t + | + | hashstr_buf(self, *args) + | hashstr_buf(self, idx, tag=htag) -> PyObject * + | + | hashval(self, *args) + | hashval(self, idx, tag=htag) -> ssize_t + | + | hashval_long(self, *args) + | hashval_long(self, idx, tag=htag) -> nodeidx_t + | + | index(self, *args) + | index(self) -> nodeidx_t + | + | kill(self, *args) + | kill(self) + | + | long_value(self, *args) + | long_value(self) -> nodeidx_t + | + | lower_bound(self, *args) + | lower_bound(self, cur, tag=stag) -> nodeidx_t + | + | lower_bound_ea(self, *args) + | lower_bound_ea(self, ea, tag=stag) -> nodeidx_t + | + | lower_bound_idx8(self, *args) + | lower_bound_idx8(self, alt, tag) -> nodeidx_t + | + | moveto(self, *args) + | moveto(self, target, count=1) -> size_t + | + | next(self, *args) + | next(self) -> bool + | + | prev(self, *args) + | prev(self) -> bool + | + | rename(self, *args) + | rename(self, newname, namlen=0) -> bool + | + | set(self, *args) + | set(self, value) -> bool + | + | set_long(self, *args) + | set_long(self, x) -> bool + | + | setblob(self, *args) + | setblob(self, buf, _start, tag) -> bool + | + | setblob_ea(self, *args) + | setblob_ea(self, buf, ea, tag) -> bool + | + | start(self, *args) + | start(self) -> bool + | + | supdel(self, *args) + | supdel(self, alt, tag=stag) -> bool + | supdel(self) -> bool + | + | supdel_all(self, *args) + | supdel_all(self, tag) -> bool + | + | supdel_ea(self, *args) + | supdel_ea(self, ea, tag=stag) -> bool + | + | supdel_idx8(self, *args) + | supdel_idx8(self, alt, tag) -> bool + | + | supdel_range(self, *args) + | supdel_range(self, idx1, idx2, tag) -> int + | + | supdel_range_idx8(self, *args) + | supdel_range_idx8(self, idx1, idx2, tag) -> int + | + | supfirst(self, *args) + | supfirst(self, tag=stag) -> nodeidx_t + | + | supfirst_idx8(self, *args) + | supfirst_idx8(self, tag) -> nodeidx_t + | + | suplast(self, *args) + | suplast(self, tag=stag) -> nodeidx_t + | + | suplast_idx8(self, *args) + | suplast_idx8(self, tag) -> nodeidx_t + | + | supnext(self, *args) + | supnext(self, cur, tag=stag) -> nodeidx_t + | + | supnext_idx8(self, *args) + | supnext_idx8(self, alt, tag) -> nodeidx_t + | + | supprev(self, *args) + | supprev(self, cur, tag=stag) -> nodeidx_t + | + | supprev_idx8(self, *args) + | supprev_idx8(self, alt, tag) -> nodeidx_t + | + | supset(self, *args) + | supset(self, alt, value, tag=stag) -> bool + | + | supset_ea(self, *args) + | supset_ea(self, ea, value, tag=stag) -> bool + | + | supset_idx8(self, *args) + | supset_idx8(self, alt, value, tag) -> bool + | + | supshift(self, *args) + | supshift(self, _from, to, size, tag=stag) -> size_t + | + | supstr(self, *args) + | supstr(self, alt, tag=stag) -> ssize_t + | + | supstr_ea(self, *args) + | supstr_ea(self, ea, tag=stag) -> ssize_t + | + | supstr_idx8(self, *args) + | supstr_idx8(self, alt, tag) -> ssize_t + | + | supval(self, *args) + | supval(self, alt, tag=stag) -> ssize_t + | + | supval_ea(self, *args) + | supval_ea(self, ea, tag=stag) -> ssize_t + | + | supval_idx8(self, *args) + | supval_idx8(self, alt, tag) -> ssize_t + | + | valobj(self, *args) + | valobj(self) -> ssize_t + | + | valstr(self, *args) + | valstr(self) -> ssize_t + | + | value_exists(self, *args) + | value_exists(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_netnode(self) + +=== ida_netnode EPYDOC INJECTIONS === +ida_netnode.BADNODE +""" +A number to represent a bad netnode reference. +""" +=== ida_netnode EPYDOC INJECTIONS END === +Help on function add_refinfo_dref in module ida_offset: + +add_refinfo_dref(*args) + add_refinfo_dref(insn, _from, ri, opval, type, opoff) -> ea_t + + + Add xrefs for a reference from the given instruction (\insn_t{ea}). + This function creates a cross references to the target and the base. + 'insn_t::add_off_drefs()' calls this function to create xrefs for + 'offset' operand. + + @param insn: the referencing instruction (C++: const insn_t &) + @param _from: the referencing instruction/data address (C++: ea_t) + @param ri: reference info block from the database (C++: const + refinfo_t &) + @param opval: operand value (usually op_t::value or op_t::addr ) + (C++: adiff_t) + @param type: type of xref (C++: dref_t) + @param opoff: offset of the operand from the start of instruction + (C++: int) + @return: the target address of the reference + +Help on function calc_basevalue in module ida_offset: + +calc_basevalue(*args) + calc_basevalue(target, base) -> ea_t + + + Calculate the value of the reference base. + + + @param target (C++: ea_t) + @param base (C++: ea_t) + +Help on function calc_offset_base in module ida_offset: + +calc_offset_base(*args) + calc_offset_base(ea, n) -> ea_t + + + Try to calculate the offset base This function takes into account the + fixup information, current ds and cs values. + + @param ea: the referencing instruction/data address (C++: ea_t) + @param n: operand number 0: first operand 1: other operand (C++: + int) + @return: output base address or BADADDR + +Help on function calc_probable_base_by_value in module ida_offset: + +calc_probable_base_by_value(*args) + calc_probable_base_by_value(ea, off) -> ea_t + + + Try to calculate the offset base. 2 bases are checked: current ds and + cs. If fails, return 'BADADDR' + + @param ea (C++: ea_t) + @param off (C++: uval_t) + +Help on function calc_reference_data in module ida_offset: + +calc_reference_data(*args) + calc_reference_data(target, base, _from, ri, opval) -> bool + + + Calculate the target and base addresses of an offset expression. The + calculated target and base addresses are returned in the locations + pointed by 'base' and 'target'. In case 'ri.base' is 'BADADDR' , the + function calculates the offset base address from the referencing + instruction/data address. The target address is copied from ri.target. + If ri.target is 'BADADDR' then the target is calculated using the base + address and 'opval'. This function also checks if 'opval' matches the + full value of the reference and takes in account the memory-mapping. + + @param target: output target address (C++: ea_t *) + @param base: output base address (C++: ea_t *) + @param _from: the referencing instruction/data address (C++: ea_t) + @param ri: reference info block from the database (C++: const + refinfo_t &) + @param opval: operand value (usually op_t::value or op_t::addr ) + (C++: adiff_t) + @return: success + +Help on function calc_target in module ida_offset: + +calc_target(*args) + calc_target(_from, opval, ri) -> ea_t + calc_target(_from, ea, n, opval) -> ea_t + + + Calculates the target, using the provided 'refinfo_t' . + + + @param _from (C++: ea_t) + @param opval (C++: adiff_t) + @param ri (C++: const refinfo_t &) + +Help on function can_be_off32 in module ida_offset: + +can_be_off32(*args) + can_be_off32(ea) -> ea_t + + + Does the specified address contain a valid OFF32 value?. For symbols + in special segments the displacement is not taken into account. If + yes, then the target address of OFF32 will be returned. If not, then + 'BADADDR' is returned. + + @param ea (C++: ea_t) + +Help on function get_default_reftype in module ida_offset: + +get_default_reftype(*args) + get_default_reftype(ea) -> reftype_t + + + Get default reference type depending on the segment. + + @param ea (C++: ea_t) + @return: one of REF_OFF8 , REF_OFF16 , REF_OFF32 + +Help on function get_offbase in module ida_offset: + +get_offbase(*args) + get_offbase(ea, n) -> ea_t + + + Get offset base value + + @param ea: linear address (C++: ea_t) + @param n: number of operand (C++: int) + @return: offset base or BADADDR + +Help on function get_offset_expr in module ida_offset: + +get_offset_expr(*args) + get_offset_expr(ea, n, ri, _from, offset, getn_flags=0) -> str + + + See 'get_offset_expression()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param ri (C++: const refinfo_t &) + @param _from (C++: ea_t) + @param offset (C++: adiff_t) + @param getn_flags (C++: int) + +Help on function get_offset_expression in module ida_offset: + +get_offset_expression(*args) + get_offset_expression(ea, n, _from, offset, getn_flags=0) -> str + + + Get offset expression (in the form "offset name+displ"). This function + uses offset translation function (\ph{translate}) if your IDP module + has such a function. Translation function is used to map linear + addresses in the program (only for offsets).Example: suppose we have + instruction at linear address 0x00011000: \v{mov ax, [bx+7422h]} and + at ds:7422h: \v{array dw ...} We want to represent the second operand + with an offset expression, so then we call: \v{ + get_offset_expresion(0x001100, 1, 0x001102, 0x7422, buf); | | | | | | + | | | +output buffer | | | +value of offset expression | | +address + offset value in the instruction | +the second operand +address of + instruction } and the function will return a colored string: \v{offset + array} + + @param ea: start of instruction or data with the offset expression + (C++: ea_t) + @param n: number of operand (may be ORed with OPND_OUTER ) 0: first + operand 1: second operand (C++: int) + @param _from: 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. (C++: ea_t) + @param offset: value of operand or its part. The function will return + text representation of this value as offset expression. + (C++: adiff_t) + @param getn_flags: combination of: GETN_APPZERO : meaningful only if + the name refers to a structure. appends the struct + field name if the field offset is zero + GETN_NODUMMY : do not generate dummy names for the + expression but pretend they already exist (useful + to verify that the offset expression can be + represented) (C++: int) + +Help on function op_offset in module ida_offset: + +op_offset(*args) + op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int + + + See 'op_offset_ex()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param type (C++: reftype_t) + @param target (C++: ea_t) + @param base (C++: ea_t) + @param tdelta (C++: adiff_t) + +Help on function op_offset_ex in module ida_offset: + +op_offset_ex(*args) + op_offset_ex(ea, n, ri) -> int + + + Convert operand to a reference. To delete an offset, use + 'clr_op_type()' function. + + @param ea: linear address. if 'ea' has unexplored bytes, try to + convert them to no segment: fail 16bit segment: to + 16bit word data 32bit segment: to dword (C++: ea_t) + @param n: number of operand (may be ORed with OPND_OUTER ) 0: first + 1: second 2: third OPND_MASK : all operands (C++: int) + @param ri: reference information (C++: const refinfo_t *) + @return: success + +Help on function op_plain_offset in module ida_offset: + +op_plain_offset(*args) + op_plain_offset(ea, n, base) -> bool + + + Convert operand to a reference with the default reference type. + + + @param ea (C++: ea_t) + @param n (C++: int) + @param base (C++: ea_t) + +Help on class __qmutex_t in module ida_pro: + +class __qmutex_t(__builtin__.object) + | Proxy of C++ __qmutex_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qmutex_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete___qmutex_t(self) + +Help on class __qsemaphore_t in module ida_pro: + +class __qsemaphore_t(__builtin__.object) + | Proxy of C++ __qsemaphore_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qsemaphore_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete___qsemaphore_t(self) + +Help on class __qthread_t in module ida_pro: + +class __qthread_t(__builtin__.object) + | Proxy of C++ __qthread_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qthread_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete___qthread_t(self) + +Help on class _qstrvec_t in module ida_pro: + +class _qstrvec_t(ida_idaapi.py_clinked_object_t) + | WARNING: It is very unlikely an IDAPython user should ever, ever + | have to use this type. It should only be used for IDAPython internals. + | + | For example, in py_askusingform.py, we ctypes-expose to the IDA + | kernel & UI a qstrvec instance, in case a DropdownListControl is + | constructed. + | That's because that's what ask_form expects, and we have no + | choice but to make a DropdownListControl hold a qstrvec_t. + | This is, afaict, the only situation where a Python + | _qstrvec_t is required. + | + | Method resolution order: + | _qstrvec_t + | ida_idaapi.py_clinked_object_t + | ida_idaapi.pyidc_opaque_object_t + | __builtin__.object + | + | Methods defined here: + | + | __getitem__(self, idx) + | Gets the string at the given index + | + | __init__(self, items=None) + | + | __setitem__(self, idx, s) + | Sets string at the given index + | + | _create_clink(self) + | + | _del_clink(self, lnk) + | + | _get_clink_ptr(self) + | + | _qstrvec_t__get_size = __get_size(self) + | + | add(self, s) + | Add a string to the vector + | + | addressof(self, idx) + | Returns the address (as number) of the qstring at the given index + | + | assign(self, other) + | Copies the contents of 'other' to 'self' + | + | clear(self, qclear=False) + | Clears all strings from the vector. + | @param qclear: Just reset the size but do not actually free the memory + | + | from_list(self, lst) + | Populates the vector from a Python string list + | + | insert(self, idx, s) + | Insert a string into the vector + | + | remove(self, idx) + | Removes a string from the vector + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | size + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_idaapi.py_clinked_object_t: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.py_clinked_object_t: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on class boolvec_t in module ida_pro: + +class boolvec_t(__builtin__.object) + | Proxy of C++ qvector< bool > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> bool const & + | + | __init__(self, *args) + | __init__(self) -> boolvec_t + | __init__(self, x) -> boolvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< bool >::iterator + | begin(self) -> qvector< bool >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< bool >::iterator + | end(self) -> qvector< bool >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< bool >::iterator + | erase(self, first, last) -> qvector< bool >::iterator + | + | extract(self, *args) + | extract(self) -> bool * + | + | find(self, *args) + | find(self, x) -> qvector< bool >::iterator + | find(self, x) -> qvector< bool >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=bool()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< bool >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> bool & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_boolvec_t(self) + +Help on class channel_redir_t in module ida_pro: + +class channel_redir_t(__builtin__.object) + | Proxy of C++ channel_redir_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> channel_redir_t + | + | __repr__ = _swig_repr(self) + | + | is_append(self, *args) + | is_append(self) -> bool + | + | is_input(self, *args) + | is_input(self) -> bool + | + | is_output(self, *args) + | is_output(self) -> bool + | + | is_quoted(self, *args) + | is_quoted(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fd + | channel_redir_t_fd_get(self) -> int + | + | file + | channel_redir_t_file_get(self) -> qstring * + | + | flags + | channel_redir_t_flags_get(self) -> int + | + | length + | channel_redir_t_length_get(self) -> int + | + | start + | channel_redir_t_start_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_channel_redir_t(self) + +Help on function check_process_exit in module ida_pro: + +check_process_exit(*args) + check_process_exit(handle, exit_code, msecs=-1) -> int + + + Check whether process has terminated or not. + + @param handle: process handle to wait for (C++: void *) + @param exit_code: pointer to the buffer for the exit code (C++: int *) + +Help on function clear_bits in module ida_pro: + +clear_bits(*args) + clear_bits(bitmap, low, high) + + + Clear bits between [low, high) in 'bitmap'. + + + @param bitmap (C++: uchar *) + @param low (C++: size_t) + @param high (C++: size_t) + +Help on class ea_array in module ida_pro: + +class ea_array(__builtin__.object) + | Proxy of C++ ea_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, index) -> ea_t + | + | __init__(self, *args) + | __init__(self, nelements) -> ea_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, index, value) + | + | cast(self, *args) + | cast(self) -> ea_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> ea_array + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ea_array(self) + +Help on function ea_array_frompointer in module ida_pro: + +ea_array_frompointer(*args) + ea_array_frompointer(t) -> ea_array + +Help on class ea_pointer in module ida_pro: + +class ea_pointer(__builtin__.object) + | Proxy of C++ ea_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ea_pointer + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, value) + | + | cast(self, *args) + | cast(self) -> ea_t * + | + | value(self, *args) + | value(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> ea_pointer + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ea_pointer(self) + +Help on function ea_pointer_frompointer in module ida_pro: + +ea_pointer_frompointer(*args) + ea_pointer_frompointer(t) -> ea_pointer + +Help on function extend_sign in module ida_pro: + +extend_sign(*args) + extend_sign(v, nbytes, sign_extend) -> uint64 + + + Sign-, or zero-extend the value 'v' to occupy 64 bits. The value 'v' + is considered to be of size 'nbytes'. + + @param v (C++: uint64) + @param nbytes (C++: int) + @param sign_extend (C++: bool) + +Help on class instant_dbgopts_t in module ida_pro: + +class instant_dbgopts_t(__builtin__.object) + | Proxy of C++ instant_dbgopts_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> instant_dbgopts_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _pass + | instant_dbgopts_t__pass_get(self) -> qstring * + | + | attach + | instant_dbgopts_t_attach_get(self) -> bool + | + | debmod + | instant_dbgopts_t_debmod_get(self) -> qstring * + | + | env + | instant_dbgopts_t_env_get(self) -> qstring * + | + | event_id + | instant_dbgopts_t_event_id_get(self) -> int + | + | host + | instant_dbgopts_t_host_get(self) -> qstring * + | + | pid + | instant_dbgopts_t_pid_get(self) -> int + | + | port + | instant_dbgopts_t_port_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_instant_dbgopts_t(self) + +Help on class longlongvec_t in module ida_pro: + +class longlongvec_t(__builtin__.object) + | Proxy of C++ qvector< long long > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> long long const & + | + | __init__(self, *args) + | __init__(self) -> longlongvec_t + | __init__(self, x) -> longlongvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< long long >::iterator + | begin(self) -> qvector< long long >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< long long >::iterator + | end(self) -> qvector< long long >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< long long >::iterator + | erase(self, first, last) -> qvector< long long >::iterator + | + | extract(self, *args) + | extract(self) -> long long * + | + | find(self, *args) + | find(self, x) -> qvector< long long >::iterator + | find(self, x) -> qvector< long long >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< long long >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> long long & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_longlongvec_t(self) + +Help on class int_pointer in module ida_pro: + +class int_pointer(__builtin__.object) + | Proxy of C++ int_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> int_pointer + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, value) + | + | cast(self, *args) + | cast(self) -> int * + | + | value(self, *args) + | value(self) -> int + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> int_pointer + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_int_pointer(self) + +Help on function int_pointer_frompointer in module ida_pro: + +int_pointer_frompointer(*args) + int_pointer_frompointer(t) -> int_pointer + +Help on class intvec_t in module ida_pro: + +class intvec_t(__builtin__.object) + | Proxy of C++ qvector< int > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> int const & + | + | __init__(self, *args) + | __init__(self) -> intvec_t + | __init__(self, x) -> intvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< int >::iterator + | begin(self) -> qvector< int >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< int >::iterator + | end(self) -> qvector< int >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< int >::iterator + | erase(self, first, last) -> qvector< int >::iterator + | + | extract(self, *args) + | extract(self) -> int * + | + | find(self, *args) + | find(self, x) -> qvector< int >::iterator + | find(self, x) -> qvector< int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< int >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> int & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_intvec_t(self) + +Help on function is_control_tty in module ida_pro: + +is_control_tty(*args) + is_control_tty(fd) -> enum tty_control_t + + + Check if the current process is the owner of the TTY specified by 'fd' + (typically an opened descriptor to /dev/tty). + + @param fd (C++: int) + +Help on function is_main_thread in module ida_pro: + +is_main_thread(*args) + is_main_thread() -> bool + + + Are we running in the main thread? + +Help on function log2ceil in module ida_pro: + +log2ceil(*args) + log2ceil(d64) -> int + + + calculate ceil(log2(d64)) or floor(log2(d64)), it returns 0 if d64 == + 0 + + @param d64 (C++: uint64) + +Help on function log2floor in module ida_pro: + +log2floor(*args) + log2floor(d64) -> int + +Help on function parse_dbgopts in module ida_pro: + +parse_dbgopts(*args) + parse_dbgopts(ido, r_switch) -> bool + + + Parse the -r command line switch (for instant debugging). r_switch + points to the value of the -r switch. Example: win32@localhost+ + + @param ido (C++: struct instant_dbgopts_t *) + @param r_switch (C++: const char *) + @return: true-ok, false-parse error + +Help on function qatoll in module ida_pro: + +qatoll(*args) + qatoll(nptr) -> int64 + +Help on function qcontrol_tty in module ida_pro: + +qcontrol_tty(*args) + qcontrol_tty() + + + Make the current terminal the controlling terminal of the calling + process.The current terminal is supposed to be /dev/tty + +Help on function qdetach_tty in module ida_pro: + +qdetach_tty(*args) + qdetach_tty() + + + If the current terminal is the controlling terminal of the calling + process, give up this controlling terminal.The current terminal is + supposed to be /dev/tty + +Help on function qexit in module ida_pro: + +qexit(*args) + qexit(code) + + + Call qatexit functions, shut down UI and kernel, and exit. + + @param code: exit code (C++: int) + +Help on class qmutex_locker_t in module ida_pro: + +class qmutex_locker_t(__builtin__.object) + | Proxy of C++ qmutex_locker_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _lock) -> qmutex_locker_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qmutex_locker_t(self) + +Help on class qrefcnt_obj_t in module ida_pro: + +class qrefcnt_obj_t(__builtin__.object) + | Proxy of C++ qrefcnt_obj_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | release(self, *args) + | release(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | refcnt + | qrefcnt_obj_t_refcnt_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qrefcnt_obj_t(self) + +Help on function qstrvec_t_add in module ida_pro: + +qstrvec_t_add(*args) + qstrvec_t_add(_self, s) -> bool + +Help on function qstrvec_t_addressof in module ida_pro: + +qstrvec_t_addressof(*args) + qstrvec_t_addressof(_self, idx) -> PyObject * + +Help on function qstrvec_t_assign in module ida_pro: + +qstrvec_t_assign(*args) + qstrvec_t_assign(_self, other) -> bool + +Help on function qstrvec_t_clear in module ida_pro: + +qstrvec_t_clear(*args) + qstrvec_t_clear(_self, qclear) -> bool + +Help on function qstrvec_t_create in module ida_pro: + +qstrvec_t_create(*args) + qstrvec_t_create() -> PyObject * + +Help on function qstrvec_t_destroy in module ida_pro: + +qstrvec_t_destroy(*args) + qstrvec_t_destroy(py_obj) -> bool + +Help on function qstrvec_t_from_list in module ida_pro: + +qstrvec_t_from_list(*args) + qstrvec_t_from_list(_self, py_list) -> bool + +Help on function qstrvec_t_get in module ida_pro: + +qstrvec_t_get(*args) + qstrvec_t_get(_self, idx) -> PyObject * + +Help on function qstrvec_t_get_clink in module ida_pro: + +qstrvec_t_get_clink(*args) + qstrvec_t_get_clink(_self) -> qstrvec_t * + +Help on function qstrvec_t_get_clink_ptr in module ida_pro: + +qstrvec_t_get_clink_ptr(*args) + qstrvec_t_get_clink_ptr(_self) -> PyObject * + +Help on function qstrvec_t_insert in module ida_pro: + +qstrvec_t_insert(*args) + qstrvec_t_insert(_self, idx, s) -> bool + +Help on function qstrvec_t_remove in module ida_pro: + +qstrvec_t_remove(*args) + qstrvec_t_remove(_self, idx) -> bool + +Help on function qstrvec_t_set in module ida_pro: + +qstrvec_t_set(*args) + qstrvec_t_set(_self, idx, s) -> bool + +Help on function qstrvec_t_size in module ida_pro: + +qstrvec_t_size(*args) + qstrvec_t_size(_self) -> size_t + +Help on function quote_cmdline_arg in module ida_pro: + +quote_cmdline_arg(*args) + quote_cmdline_arg(arg) -> bool + + + Quote a command line argument if it contains escape characters. For + example, *.c will be converted into "*.c" because * may be + inadvertently expanded by the shell + + @param arg (C++: qstring *) + @return: true: modified 'arg' + +Help on function qvector_reserve in module ida_pro: + +qvector_reserve(*args) + qvector_reserve(vec, old, cnt, elsize) -> void * + + + Change capacity of given qvector. + + @param vec: a pointer to a qvector (C++: void *) + @param old: a pointer to the qvector's array (C++: void *) + @param cnt: number of elements to reserve (C++: size_t) + @param elsize: size of each element (C++: size_t) + @return: a pointer to the newly allocated array + +Help on function readbytes in module ida_pro: + +readbytes(*args) + readbytes(h, res, size, mf) -> int + + + Read at most 4 bytes from file. + + @param h: file handle (C++: int) + @param res: value read from file (C++: uint32 *) + @param size: size of value in bytes (1,2,4) (C++: int) + @param mf: is MSB first? (C++: bool) + @return: 0 on success, nonzero otherwise + +Help on function reloc_value in module ida_pro: + +reloc_value(*args) + reloc_value(value, size, delta, mf) + +Help on function relocate_relobj in module ida_pro: + +relocate_relobj(*args) + relocate_relobj(_relobj, ea, mf) -> bool + +Help on class sel_array in module ida_pro: + +class sel_array(__builtin__.object) + | Proxy of C++ sel_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, index) -> sel_t + | + | __init__(self, *args) + | __init__(self, nelements) -> sel_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, index, value) + | + | cast(self, *args) + | cast(self) -> sel_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> sel_array + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sel_array(self) + +Help on function sel_array_frompointer in module ida_pro: + +sel_array_frompointer(*args) + sel_array_frompointer(t) -> sel_array + +Help on class sel_pointer in module ida_pro: + +class sel_pointer(__builtin__.object) + | Proxy of C++ sel_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sel_pointer + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, value) + | + | cast(self, *args) + | cast(self) -> sel_t * + | + | value(self, *args) + | value(self) -> sel_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> sel_pointer + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sel_pointer(self) + +Help on function sel_pointer_frompointer in module ida_pro: + +sel_pointer_frompointer(*args) + sel_pointer_frompointer(t) -> sel_pointer + +Help on function set_bits in module ida_pro: + +set_bits(*args) + set_bits(bitmap, low, high) + + + Set bits between [low, high) in 'bitmap'. + + + @param bitmap (C++: uchar *) + @param low (C++: size_t) + @param high (C++: size_t) + +Help on class sizevec_t in module ida_pro: + +class sizevec_t(__builtin__.object) + | Proxy of C++ qvector< size_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> size_t const & + | + | __init__(self, *args) + | __init__(self) -> sizevec_t + | __init__(self, x) -> sizevec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> size_t const & + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< size_t >::iterator + | begin(self) -> qvector< size_t >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< size_t >::iterator + | end(self) -> qvector< size_t >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< size_t >::iterator + | erase(self, first, last) -> qvector< size_t >::iterator + | + | extract(self, *args) + | extract(self) -> size_t * + | + | find(self, *args) + | find(self, x) -> qvector< size_t >::iterator + | find(self, x) -> qvector< size_t >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=size_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< size_t >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> size_t & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sizevec_t(self) + +Help on function str2user in module ida_pro: + +str2user(*args) + str2user(str) -> PyObject * + + + Insert C-style escape characters to string + + @return: new string with escape characters inserted + +Help on class strvec_t in module ida_pro: + +class strvec_t(__builtin__.object) + | Proxy of C++ qvector< simpleline_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> simpleline_t const & + | + | __init__(self, *args) + | __init__(self) -> strvec_t + | __init__(self, x) -> strvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< simpleline_t >::iterator + | begin(self) -> qvector< simpleline_t >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< simpleline_t >::iterator + | end(self) -> qvector< simpleline_t >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< simpleline_t >::iterator + | erase(self, first, last) -> qvector< simpleline_t >::iterator + | + | extract(self, *args) + | extract(self) -> simpleline_t * + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=simpleline_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< simpleline_t >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> simpleline_t & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_strvec_t(self) + +Help on class sval_pointer in module ida_pro: + +class sval_pointer(__builtin__.object) + | Proxy of C++ sval_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sval_pointer + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, value) + | + | cast(self, *args) + | cast(self) -> sval_t * + | + | value(self, *args) + | value(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> sval_pointer + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sval_pointer(self) + +Help on function sval_pointer_frompointer in module ida_pro: + +sval_pointer_frompointer(*args) + sval_pointer_frompointer(t) -> sval_pointer + +Help on class tid_array in module ida_pro: + +class tid_array(__builtin__.object) + | Proxy of C++ tid_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, index) -> tid_t + | + | __init__(self, *args) + | __init__(self, nelements) -> tid_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, index, value) + | + | cast(self, *args) + | cast(self) -> tid_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> tid_array + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tid_array(self) + +Help on function tid_array_frompointer in module ida_pro: + +tid_array_frompointer(*args) + tid_array_frompointer(t) -> tid_array + +Help on class uchar_array in module ida_pro: + +class uchar_array(__builtin__.object) + | Proxy of C++ uchar_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, index) -> uchar + | + | __init__(self, *args) + | __init__(self, nelements) -> uchar_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, index, value) + | + | cast(self, *args) + | cast(self) -> uchar * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> uchar_array + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_uchar_array(self) + +Help on function uchar_array_frompointer in module ida_pro: + +uchar_array_frompointer(*args) + uchar_array_frompointer(t) -> uchar_array + +Help on class ulonglongvec_t in module ida_pro: + +class ulonglongvec_t(__builtin__.object) + | Proxy of C++ qvector< unsigned long long > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> unsigned long long const & + | + | __init__(self, *args) + | __init__(self) -> ulonglongvec_t + | __init__(self, x) -> ulonglongvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< unsigned long long >::iterator + | begin(self) -> qvector< unsigned long long >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< unsigned long long >::iterator + | end(self) -> qvector< unsigned long long >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< unsigned long long >::iterator + | erase(self, first, last) -> qvector< unsigned long long >::iterator + | + | extract(self, *args) + | extract(self) -> unsigned long long * + | + | find(self, *args) + | find(self, x) -> qvector< unsigned long long >::iterator + | find(self, x) -> qvector< unsigned long long >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< unsigned long long >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> unsigned long long & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ulonglongvec_t(self) + +Help on class uintvec_t in module ida_pro: + +class uintvec_t(__builtin__.object) + | Proxy of C++ qvector< unsigned int > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> unsigned int const & + | + | __init__(self, *args) + | __init__(self) -> uintvec_t + | __init__(self, x) -> uintvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< unsigned int >::iterator + | begin(self) -> qvector< unsigned int >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< unsigned int >::iterator + | end(self) -> qvector< unsigned int >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< unsigned int >::iterator + | erase(self, first, last) -> qvector< unsigned int >::iterator + | + | extract(self, *args) + | extract(self) -> unsigned int * + | + | find(self, *args) + | find(self, x) -> qvector< unsigned int >::iterator + | find(self, x) -> qvector< unsigned int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< unsigned int >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> unsigned int & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_uintvec_t(self) + +Help on class uval_array in module ida_pro: + +class uval_array(__builtin__.object) + | Proxy of C++ uval_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, index) -> uval_t + | + | __init__(self, *args) + | __init__(self, nelements) -> uval_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, index, value) + | + | cast(self, *args) + | cast(self) -> uval_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> uval_array + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_uval_array(self) + +Help on function uval_array_frompointer in module ida_pro: + +uval_array_frompointer(*args) + uval_array_frompointer(t) -> uval_array + +Help on function writebytes in module ida_pro: + +writebytes(*args) + writebytes(h, l, size, mf) -> int + + + Write at most 4 bytes to file. + + @param h: file handle (C++: int) + @param l: value to write (C++: uint32) + @param size: size of value in bytes (1,2,4) (C++: int) + @param mf: is MSB first? (C++: bool) + @return: 0 on success, nonzero otherwise + +=== ida_pro EPYDOC INJECTIONS === +ida_pro.CP_UTF16 +""" +UTF-16 codepage. +""" + +ida_pro.IDA_SDK_VERSION +""" +IDA SDK v7.4. +""" + +ida_pro.IDBDEC_ESCAPE +""" +convert non-printable characters to C escapes (, \\xNN, \\uNNNN) +""" + +ida_pro.IOREDIR_APPEND +""" +append, do not overwrite the output file +""" + +ida_pro.IOREDIR_INPUT +""" +input redirection +""" + +ida_pro.IOREDIR_OUTPUT +""" +output redirection +""" + +ida_pro.IOREDIR_QUOTED +""" +the file name was quoted +""" + +ida_pro.MAXSTR +""" +maximum string size +""" + +ida_pro.SUBSTCHAR +""" +default char, used if a char cannot be represented in a codepage +""" + +ida_pro.__MF__ +""" +byte sex of our platform (Most significant byte First). 0: little +endian (Intel 80x86). 1: big endian (PowerPC). +""" +=== ida_pro EPYDOC INJECTIONS END === +Help on function forget_problem in module ida_problems: + +forget_problem(*args) + forget_problem(type, ea) -> bool + + + Remove an address from a problem list + + @param type: problem list type (C++: problist_id_t) + @param ea: linear address (C++: ea_t) + @return: success + +Help on function get_problem in module ida_problems: + +get_problem(*args) + get_problem(type, lowea) -> ea_t + + + Get an address from the specified problem list. The address is not + removed from the list. + + @param type: problem list type (C++: problist_id_t) + @param lowea: the returned address will be higher or equal than the + specified address (C++: ea_t) + @return: linear address or BADADDR + +Help on function get_problem_desc in module ida_problems: + +get_problem_desc(*args) + get_problem_desc(t, ea) -> str + + + Get the human-friendly description of the problem, if one was provided + to remember_problem. + + @param t: problem list type. (C++: problist_id_t) + @param ea: linear address. (C++: ea_t) + @return: the message length or -1 if none + +Help on function get_problem_name in module ida_problems: + +get_problem_name(*args) + get_problem_name(type, longname=True) -> char const * + + + Get problem list description. + + + @param type (C++: problist_id_t) + @param longname (C++: bool) + +Help on function is_problem_present in module ida_problems: + +is_problem_present(*args) + is_problem_present(t, ea) -> bool + + + Check if the specified address is present in the problem list. + + + @param t (C++: problist_id_t) + @param ea (C++: ea_t) + +Help on function remember_problem in module ida_problems: + +remember_problem(*args) + remember_problem(type, ea, msg=None) + + + Insert an address to a list of problems. Display a message saying + about the problem (except of 'PR_ATTN' , 'PR_FINAL' ) 'PR_JUMP' is + temporarily ignored. + + @param type: problem list type (C++: problist_id_t) + @param ea: linear address (C++: ea_t) + @param msg: a user-friendly message to be displayed instead of the + default more generic one associated with the type of + problem. Defaults to NULL. (C++: const char *) + +Help on function was_ida_decision in module ida_problems: + +was_ida_decision(*args) + was_ida_decision(ea) -> bool + +Help on class array_of_rangesets in module ida_range: + +class array_of_rangesets(__builtin__.object) + | Proxy of C++ qvector< rangeset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> rangeset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_rangesets + | __init__(self, x) -> array_of_rangesets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> rangeset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> rangeset_t + | begin(self) -> rangeset_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> rangeset_t + | end(self) -> rangeset_t + | + | erase(self, *args) + | erase(self, it) -> rangeset_t + | erase(self, first, last) -> rangeset_t + | + | extract(self, *args) + | extract(self) -> rangeset_t + | + | find(self, *args) + | find(self, x) -> rangeset_t + | find(self, x) -> rangeset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=rangeset_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> rangeset_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> rangeset_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_array_of_rangesets(self) + +Help on class range_t in module ida_range: + +class range_t(__builtin__.object) + | Proxy of C++ range_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> range_t + | __init__(self, ea1, ea2) -> range_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_range_t(self) + +Help on function range_t_print in module ida_range: + +range_t_print(*args) + range_t_print(cb) -> str + + + Helper function. Should not be called directly! + +Help on class rangeset_t in module ida_range: + +class rangeset_t(__builtin__.object) + | Proxy of C++ rangeset_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, aset) -> bool + | + | __getitem__(self, idx) + | + | __init__(self, *args) + | __init__(self) -> rangeset_t + | __init__(self, range) -> rangeset_t + | __init__(self, ivs) -> rangeset_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = nranges(self, *args) + | + | __ne__(self, *args) + | __ne__(self, aset) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) -> size_t + | + | add(self, *args) + | add(self, range) -> bool + | add(self, start, _end) -> bool + | add(self, aset) -> bool + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | cached_range(self, *args) + | cached_range(self) -> range_t + | + | clear(self, *args) + | clear(self) + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, aset) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | find_range(self, *args) + | find_range(self, ea) -> range_t + | + | getrange(self, *args) + | getrange(self, idx) -> range_t + | + | has_common(self, *args) + | has_common(self, range) -> bool + | has_common(self, aset) -> bool + | + | includes(self, *args) + | includes(self, range) -> bool + | + | intersect(self, *args) + | intersect(self, aset) -> bool + | + | is_equal(self, *args) + | is_equal(self, aset) -> bool + | + | is_subset_of(self, *args) + | is_subset_of(self, aset) -> bool + | + | lastrange(self, *args) + | lastrange(self) -> range_t + | + | next_addr(self, *args) + | next_addr(self, ea) -> ea_t + | + | next_range(self, *args) + | next_range(self, ea) -> ea_t + | + | nranges(self, *args) + | nranges(self) -> size_t + | + | prev_addr(self, *args) + | prev_addr(self, ea) -> ea_t + | + | prev_range(self, *args) + | prev_range(self, ea) -> ea_t + | + | sub(self, *args) + | sub(self, range) -> bool + | sub(self, ea) -> bool + | sub(self, aset) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rangeset_t(self) + +Help on class rangevec_base_t in module ida_range: + +class rangevec_base_t(__builtin__.object) + | Proxy of C++ qvector< range_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __init__(self, *args) + | __init__(self) -> rangevec_base_t + | __init__(self, x) -> rangevec_base_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rangevec_base_t(self) + +Help on class rangevec_t in module ida_range: + +class rangevec_t(rangevec_base_t) + | Proxy of C++ rangevec_t class. + | + | Method resolution order: + | rangevec_t + | rangevec_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rangevec_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rangevec_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from rangevec_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function reg_data_type in module ida_registry: + +reg_data_type(*args) + reg_data_type(name, subkey=None) -> regval_type_t + + + Get data type of a given value. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: false if the [key+]value doesn't exist + +Help on function reg_delete in module ida_registry: + +reg_delete(*args) + reg_delete(name, subkey=None) -> bool + + + Delete a value from the registry. + + @param name: value name (C++: const char *) + @param subkey: parent key (C++: const char *) + @return: success + +Help on function reg_delete_subkey in module ida_registry: + +reg_delete_subkey(*args) + reg_delete_subkey(name) -> bool + + + Delete a key from the registry. + + + @param name (C++: const char *) + +Help on function reg_delete_tree in module ida_registry: + +reg_delete_tree(*args) + reg_delete_tree(name) -> bool + + + Delete a subtree from the registry. + + + @param name (C++: const char *) + +Help on function reg_exists in module ida_registry: + +reg_exists(*args) + reg_exists(name, subkey=None) -> bool + + + Is there already a value with the given name? + + @param name: value name (C++: const char *) + @param subkey: parent key (C++: const char *) + +Help on function reg_flush in module ida_registry: + +reg_flush(*args) + reg_flush() + +Help on function reg_load in module ida_registry: + +reg_load(*args) + reg_load() + +Help on function reg_read_binary in module ida_registry: + +reg_read_binary(*args) + reg_read_binary(name, subkey=None) -> PyObject * + + + Read binary data from the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: false if 'data' is not large enough to hold all data present. + in this case 'data' is left untouched. + +Help on function reg_read_bool in module ida_registry: + +reg_read_bool(*args) + reg_read_bool(name, defval, subkey=None) -> bool + + + Read boolean value from the registry. + + @param name: value name (C++: const char *) + @param defval: default value (C++: bool) + @param subkey: key name (C++: const char *) + @return: boolean read from registry, or 'defval' if the read failed + +Help on function reg_read_int in module ida_registry: + +reg_read_int(*args) + reg_read_int(name, defval, subkey=None) -> int + + + Read integer value from the registry. + + @param name: value name (C++: const char *) + @param defval: default value (C++: int) + @param subkey: key name (C++: const char *) + @return: the value read from the registry, or 'defval' if the read + failed + +Help on function reg_read_string in module ida_registry: + +reg_read_string(*args) + reg_read_string(name, subkey=None, _def=None) -> PyObject * + + + Read a string from the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: success + +Help on function reg_read_strlist in module ida_registry: + +reg_read_strlist(*args) + reg_read_strlist(subkey) + + + Retrieve all string values associated with the given key. Also see + 'reg_update_strlist()' . + + @param subkey (C++: const char *) + +Help on function reg_subkey_exists in module ida_registry: + +reg_subkey_exists(*args) + reg_subkey_exists(name) -> bool + + + Is there already a key with the given name? + + + @param name (C++: const char *) + +Help on function reg_subkey_subkeys in module ida_registry: + +reg_subkey_subkeys(*args) + reg_subkey_subkeys(name) -> PyObject * + + + Get all subkey names of given key. + + + @param name (C++: const char *) + +Help on function reg_subkey_values in module ida_registry: + +reg_subkey_values(*args) + reg_subkey_values(name) -> PyObject * + + + Get all value names under given key. + + + @param name (C++: const char *) + +Help on function reg_update_filestrlist in module ida_registry: + +reg_update_filestrlist(*args) + reg_update_filestrlist(subkey, add, maxrecs, rem=None) + + + Update registry with a file list. Case sensitivity will vary depending + on the target OS.'add' and 'rem' must be UTF-8, just like for regular + string operations. + + @param subkey (C++: const char *) + @param add (C++: const char *) + @param maxrecs (C++: size_t) + @param rem (C++: const char *) + +Help on function reg_update_strlist in module ida_registry: + +reg_update_strlist(*args) + reg_update_strlist(subkey, add, maxrecs, rem=None, ignorecase=False) + + + Update list of strings associated with given key. + + @param subkey: key name (C++: const char *) + @param add: string to be added to list, can be NULL (C++: const char + *) + @param maxrecs: limit list to this size (C++: size_t) + @param rem: string to be removed from list, can be NULL (C++: const + char *) + @param ignorecase: ignore case for 'add' and 'rem' (C++: bool) + +Help on function reg_write_binary in module ida_registry: + +reg_write_binary(*args) + reg_write_binary(name, py_bytes, subkey=None) -> PyObject * + + + Write binary data to the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + +Help on function reg_write_bool in module ida_registry: + +reg_write_bool(*args) + reg_write_bool(name, value, subkey=None) + + + Write boolean value to the registry. + + @param name: value name (C++: const char *) + @param value: boolean to write (nonzero = true) (C++: int) + @param subkey: key name (C++: const char *) + +Help on function reg_write_int in module ida_registry: + +reg_write_int(*args) + reg_write_int(name, value, subkey=None) + + + Write integer value to the registry. + + @param name: value name (C++: const char *) + @param value: value to write (C++: int) + @param subkey: key name (C++: const char *) + +Help on function reg_write_string in module ida_registry: + +reg_write_string(*args) + reg_write_string(name, utf8, subkey=None) + + + Write a string to the registry. + + @param name: value name (C++: const char *) + @param utf8: utf8-encoded string (C++: const char *) + @param subkey: key name (C++: const char *) + +=== ida_registry EPYDOC INJECTIONS === +ida_registry.ROOT_KEY_NAME +""" +Key used to store IDA settings in registry (Windows version).this name +is automatically prepended to all key names passed to functions in +this file. +""" +=== ida_registry EPYDOC INJECTIONS END === +Help on function find_binary in module ida_search: + +find_binary(*args) + find_binary(arg1, arg2, arg3, arg4, arg5) -> ea_t + +Help on function find_code in module ida_search: + +find_code(*args) + find_code(ea, sflag) -> ea_t + + + Find next code address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_data in module ida_search: + +find_data(*args) + find_data(ea, sflag) -> ea_t + + + Find next data address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_defined in module ida_search: + +find_defined(*args) + find_defined(ea, sflag) -> ea_t + + + Find next ea that is the start of an instruction or data. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_error in module ida_search: + +find_error(*args) + find_error(ea, sflag) -> ea_t + + + Find next error or problem. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_imm in module ida_search: + +find_imm(*args) + find_imm(newEA, sflag, srchValue) -> ea_t + + + Find next immediate operand with the given value. + + + @param newEA (C++: ea_t) + @param sflag (C++: int) + @param srchValue (C++: uval_t) + +Help on function find_not_func in module ida_search: + +find_not_func(*args) + find_not_func(ea, sflag) -> ea_t + + + Find next code address that does not belong to a function. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_notype in module ida_search: + +find_notype(*args) + find_notype(ea, sflag) -> ea_t + + + Find next operand without any type info. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_suspop in module ida_search: + +find_suspop(*args) + find_suspop(ea, sflag) -> ea_t + + + Find next suspicious operand. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_text in module ida_search: + +find_text(*args) + find_text(start_ea, y, x, ustr, sflag) -> ea_t + + + See 'search()' + + + @param start_ea (C++: ea_t) + @param y (C++: int) + @param x (C++: int) + @param ustr (C++: const char *) + @param sflag (C++: int) + +Help on function find_unknown in module ida_search: + +find_unknown(*args) + find_unknown(ea, sflag) -> ea_t + + + Find next unexplored address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function search_down in module ida_search: + +search_down(*args) + search_down(sflag) -> bool + + + Is the 'SEARCH_DOWN' bit set? + + + @param sflag (C++: int) + +=== ida_search EPYDOC INJECTIONS === +ida_search.SEARCH_BRK +""" +return 'BADADDR' if Ctrl-Break wass pressed during search +""" + +ida_search.SEARCH_CASE +""" +case-sensitive search (case-insensitive otherwise) +""" + +ida_search.SEARCH_DOWN +""" +search towards higher addresses +""" + +ida_search.SEARCH_IDENT +""" +search for an identifier (text search). it means that the characters +before and after the match cannot be is_visible_char(). +""" + +ida_search.SEARCH_NEXT +""" +for other find_.. functions it is implicitly set + +useful only for 'search()' and find_binary(). +""" + +ida_search.SEARCH_NOBRK +""" +don't test for ctrl-break to interrupt the search +""" + +ida_search.SEARCH_NOSHOW +""" +don't display the search progress/refresh screen +""" + +ida_search.SEARCH_REGEX +""" +regular expressions in search string (only supported for txt search) +""" + +ida_search.SEARCH_UP +""" +search towards lower addresses +""" +=== ida_search EPYDOC INJECTIONS END === +Help on function add_segm in module ida_segment: + +add_segm(*args) + add_segm(para, start, end, name, sclass, flags=0) -> bool + + + Add a new segment, second form. Segment alignment is set to + 'saRelByte' . Segment combination is "public" or "stack" (if segment + class is "STACK"). Addressing mode of segment is taken as default + (16bit or 32bit). Default segment registers are set to 'BADSEL' . If a + segment already exists at the specified range of addresses, this + segment will be truncated. Instructions and data in the old segment + will be deleted if the new segment has another addressing mode or + another segment base address. + + @param para: segment base paragraph. if paragraph can't fit in 16bit, + then a new selector is allocated and mapped to the + paragraph. (C++: ea_t) + @param start: start address of the segment. if start== BADADDR then + start <- to_ea(para,0). (C++: ea_t) + @param end: end address of the segment. end address should be higher + than start address. For emulate empty segments, use + SEG_NULL segment type. If the end address is lower than + start address, then fail. If end== BADADDR , then a + segment up to the next segment will be created (if the + next segment doesn't exist, then 1 byte segment will be + created). If 'end' is too high and the new segment would + overlap the next segment, 'end' is adjusted properly. + (C++: ea_t) + @param name: name of new segment. may be NULL (C++: const char *) + @param sclass: class of the segment. may be NULL. type of the new + segment is modified if class is one of predefined + names: "CODE" -> SEG_CODE "DATA" -> SEG_DATA + "CONST" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> + SEG_BSS "XTRN" -> SEG_XTRN "COMM" -> SEG_COMM + "ABS" -> SEG_ABSSYM (C++: const char *) + @param flags (C++: int) + +Help on function add_segm_ex in module ida_segment: + +add_segm_ex(*args) + add_segm_ex(s, name, sclass, flags) -> bool + + + Add a new segment. If a segment already exists at the specified range + of addresses, this segment will be truncated. Instructions and data in + the old segment will be deleted if the new segment has another + addressing mode or another segment base address. + + @param s: pointer to filled segment structure. segment selector should + have proper mapping (see set_selector() ). if + s.start_ea== BADADDR then s.start_ea <- get_segm_base(&s) + if s.end_ea== BADADDR , then a segment up to the next + segment will be created (if the next segment doesn't exist, + then 1 byte segment will be created). if the s.end_ea < + s.start_ea, then fail. if s.end_ea is too high and the new + segment would overlap the next segment, s.end_ea is adjusted + properly. (C++: segment_t *) + @param name: name of new segment. may be NULL. if specified, the + segment is immediately renamed (C++: const char *) + @param sclass: class of the segment. may be NULL. if specified, the + segment class is immediately changed (C++: const char + *) + @param flags: Add segment flags (C++: int) + +Help on function add_segment_translation in module ida_segment: + +add_segment_translation(*args) + add_segment_translation(segstart, mappedseg) -> bool + + + Add segment translation. + + @param segstart: start address of the segment to add translation to + (C++: ea_t) + @param mappedseg: start address of the overlayed segment (C++: ea_t) + +Help on function allocate_selector in module ida_segment: + +allocate_selector(*args) + allocate_selector(segbase) -> sel_t + + + Allocate a selector for a segment unconditionally. You must call this + function before calling 'add_segm_ex()' . 'add_segm()' calls this + function itself, so you don't need to allocate a selector. This + function will allocate a new free selector and setup its mapping using + 'find_free_selector()' and 'set_selector()' functions. + + @param segbase: a new segment base paragraph (C++: ea_t) + @return: the allocated selector number + +Help on function change_segment_status in module ida_segment: + +change_segment_status(*args) + change_segment_status(s, is_deb_segm) -> int + + + Convert a debugger segment to a regular segment and vice versa. When + converting debug->regular, the memory contents will be copied to the + database. + + @param s: segment to modify (C++: segment_t *) + @param is_deb_segm: new status of the segment (C++: bool) + @return: Change segment status result codes + +Help on function del_segm in module ida_segment: + +del_segm(*args) + del_segm(ea, flags) -> bool + + + Delete a segment. + + @param ea: any address belonging to the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function del_segment_translations in module ida_segment: + +del_segment_translations(*args) + del_segment_translations(segstart) + + + Delete the translation list + + @param segstart: start address of the segment to delete translation + list (C++: ea_t) + +Help on function del_selector in module ida_segment: + +del_selector(*args) + del_selector(selector) + + + Delete mapping of a selector. Be wary of deleting selectors that are + being used in the program, this can make a mess in the segments. + + @param selector: number of selector to remove from the translation + table (C++: sel_t) + +Help on function find_free_selector in module ida_segment: + +find_free_selector(*args) + find_free_selector() -> sel_t + + + Find first unused selector. + + @return: a number >= 1 + +Help on function find_selector in module ida_segment: + +find_selector(*args) + find_selector(base) -> sel_t + + + Find a selector that has mapping to the specified paragraph. + + @param base: paragraph to search in the translation table (C++: ea_t) + @return: selector value or base + +Help on function get_defsr in module ida_segment: + +get_defsr(*args) + get_defsr(s, reg) -> sel_t + +Help on function get_first_seg in module ida_segment: + +get_first_seg(*args) + get_first_seg() -> segment_t + + + Get pointer to the first segment. + +Help on function get_group_selector in module ida_segment: + +get_group_selector(*args) + get_group_selector(grpsel) -> sel_t + + + Get common selector for a group of segments. + + @param grpsel: selector of group segment (C++: sel_t) + @return: common selector of the group or 'grpsel' if no such group is + found + +Help on function get_last_seg in module ida_segment: + +get_last_seg(*args) + get_last_seg() -> segment_t + + + Get pointer to the last segment. + +Help on function get_next_seg in module ida_segment: + +get_next_seg(*args) + get_next_seg(ea) -> segment_t + + + Get pointer to the next segment. + + + @param ea (C++: ea_t) + +Help on function get_prev_seg in module ida_segment: + +get_prev_seg(*args) + get_prev_seg(ea) -> segment_t + + + Get pointer to the previous segment. + + + @param ea (C++: ea_t) + +Help on function get_segm_base in module ida_segment: + +get_segm_base(*args) + get_segm_base(s) -> ea_t + + + Get segment base linear address. Segment base linear address is used + to calculate virtual addresses. The virtual address of the first byte + of the segment will be (start address of segment - segment base linear + address) + + @param s: pointer to segment (C++: const segment_t *) + @return: 0 if s == NULL, otherwise segment base linear address + +Help on function get_segm_by_name in module ida_segment: + +get_segm_by_name(*args) + get_segm_by_name(name) -> segment_t + + + Get pointer to segment by its name. If there are several segments with + the same name, returns the first of them. + + @param name: segment name. may be NULL. (C++: const char *) + @return: NULL or pointer to segment structure + +Help on function get_segm_by_sel in module ida_segment: + +get_segm_by_sel(*args) + get_segm_by_sel(selector) -> segment_t + + + Get pointer to segment structure. This function finds a segment by its + selector. If there are several segments with the same selectors, the + last one will be returned. + + @param selector: a segment with the specified selector will be + returned (C++: sel_t) + @return: pointer to segment or NULL + +Help on function get_segm_class in module ida_segment: + +get_segm_class(*args) + get_segm_class(s) -> str + + + Get segment class. Segment class is arbitrary text (max 8 characters). + + @param s: pointer to segment (C++: const segment_t *) + @return: size of segment class (-1 if s==NULL or bufsize<=0) + +Help on function get_segm_name in module ida_segment: + +get_segm_name(*args) + get_segm_name(s, flags=0) -> str + + + Get true segment name by pointer to segment. + + @param s: pointer to segment (C++: const segment_t *) + @param flags: 0-return name as is; 1-substitute bad symbols with _ 1 + corresponds to GN_VISIBLE (C++: int) + @return: size of segment name (-1 if s==NULL) + +Help on function get_segm_num in module ida_segment: + +get_segm_num(*args) + get_segm_num(ea) -> int + + + Get number of segment by address. + + @param ea: linear address belonging to the segment (C++: ea_t) + @return: -1 if no segment occupies the specified address. otherwise + returns number of the specified segment (0.. get_segm_qty() + -1) + +Help on function get_segm_para in module ida_segment: + +get_segm_para(*args) + get_segm_para(s) -> ea_t + + + Get segment base paragraph. Segment base paragraph may be converted to + segment base linear address using 'to_ea()' function. In fact, + to_ea(get_segm_para(s), 0) == get_segm_base(s). + + @param s: pointer to segment (C++: const segment_t *) + @return: 0 if s == NULL, the segment base paragraph + +Help on function get_segm_qty in module ida_segment: + +get_segm_qty(*args) + get_segm_qty() -> int + + + Get number of segments. + +Help on function get_segment_alignment in module ida_segment: + +get_segment_alignment(*args) + get_segment_alignment(align) -> char const * + + + Get text representation of segment alignment code. + + @param align (C++: uchar) + @return: text digestable by IBM PC assembler. + +Help on function get_segment_cmt in module ida_segment: + +get_segment_cmt(*args) + get_segment_cmt(s, repeatable) -> str + + + Get segment comment. + + @param s: pointer to segment structure (C++: const segment_t *) + @param repeatable: 0: get regular comment. 1: get repeatable comment. + (C++: bool) + @return: size of comment or -1 + +Help on function get_segment_combination in module ida_segment: + +get_segment_combination(*args) + get_segment_combination(comb) -> char const * + + + Get text representation of segment combination code. + + @param comb (C++: uchar) + @return: text digestable by IBM PC assembler. + +Help on function get_segment_translations in module ida_segment: + +get_segment_translations(*args) + get_segment_translations(transmap, segstart) -> ssize_t + + + Get segment translation list. + + @param transmap: vector of segment start addresses for the translation + list (C++: eavec_t *) + @param segstart: start address of the segment to get information about + (C++: ea_t) + @return: -1 if no translation list or bad segstart. otherwise returns + size of translation list. + +Help on function get_selector_qty in module ida_segment: + +get_selector_qty(*args) + get_selector_qty() -> int + + + Get number of defined selectors. + +Help on function get_visible_segm_name in module ida_segment: + +get_visible_segm_name(*args) + get_visible_segm_name(s) -> str + + + Get segment name by pointer to segment. + + @param s: pointer to segment (C++: const segment_t *) + @return: size of segment name (-1 if s==NULL) + +Help on function getn_selector in module ida_segment: + +getn_selector(*args) + getn_selector(n) -> bool + + + Get description of selector (0.. 'get_selector_qty()' -1) + + + @param n (C++: int) + +Help on function getnseg in module ida_segment: + +getnseg(*args) + getnseg(n) -> segment_t + + + Get pointer to segment by its number.Obsoleted because it can slow + down the debugger (it has to refresh the whole memory segmentation to + calculate the correct answer) + + @param n: segment number in the range (0.. get_segm_qty() -1) (C++: + int) + @return: NULL or pointer to segment structure + +Help on function getseg in module ida_segment: + +getseg(*args) + getseg(ea) -> segment_t + + + Get pointer to segment by linear address. + + @param ea: linear address belonging to the segment (C++: ea_t) + @return: NULL or pointer to segment structure + +Help on function is_finally_visible_segm in module ida_segment: + +is_finally_visible_segm(*args) + is_finally_visible_segm(s) -> bool + + + See 'SFL_HIDDEN' , 'SCF_SHHID_SEGM' . + + + @param s (C++: segment_t *) + +Help on function is_miniidb in module ida_segment: + +is_miniidb(*args) + is_miniidb() -> bool + + + Is the database a miniidb created by the debugger?. + + @return: true if the database contains no segments or only debugger + segments + +Help on function is_segm_locked in module ida_segment: + +is_segm_locked(*args) + is_segm_locked(segm) -> bool + + + Is a segment pointer locked? + + + @param segm (C++: const segment_t *) + +Help on function is_spec_ea in module ida_segment: + +is_spec_ea(*args) + is_spec_ea(ea) -> bool + + + Does the address belong to a segment with a special type?. ( + 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , 'SEG_COMM' ) + + @param ea: linear address (C++: ea_t) + +Help on function is_spec_segm in module ida_segment: + +is_spec_segm(*args) + is_spec_segm(seg_type) -> bool + + + Has segment a special type?. ( 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , + 'SEG_COMM' ) + + @param seg_type (C++: uchar) + +Help on function is_visible_segm in module ida_segment: + +is_visible_segm(*args) + is_visible_segm(s) -> bool + + + See 'SFL_HIDDEN' . + + + @param s (C++: segment_t *) + +Help on function lock_segm in module ida_segment: + +lock_segm(*args) + lock_segm(segm, lock) + + + Lock segment pointer Locked pointers are guaranteed to remain valid + until they are unlocked. Ranges with locked pointers cannot be deleted + or moved. + + @param segm (C++: const segment_t *) + @param lock (C++: bool) + +Help on class lock_segment in module ida_segment: + +class lock_segment(__builtin__.object) + | Proxy of C++ lock_segment class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _segm) -> lock_segment + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lock_segment(self) + +Help on function move_segm in module ida_segment: + +move_segm(*args) + 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. + + @param s: segment to move (C++: segment_t *) + @param to: new segment start address (C++: ea_t) + @param flags: Move segment flags (C++: int) + @return: Move segment result codes + +Help on function move_segm_start in module ida_segment: + +move_segm_start(*args) + move_segm_start(ea, newstart, mode) -> bool + + + Move segment start. The main difference between this function and + 'set_segm_start()' is that this function may expand the previous + segment while 'set_segm_start()' never does it. So, this function + allows to change bounds of two segments simultaneously. If the + previous segment and the specified segment have the same addressing + mode and segment base, then instructions and data are not destroyed - + they simply move from one segment to another. Otherwise all + instructions/data which migrate from one segment to another are + destroyed.this function never disables addresses. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newstart: new start address of the segment note that segment + start address should be higher than segment base + linear address. (C++: ea_t) + @param mode: policy for destroying defined items 0: if it is + necessary to destroy defined items, display a dialog box + and ask confirmation 1: if it is necessary to destroy + defined items, just destroy them without asking the user + -1: if it is necessary to destroy defined items, don't + destroy them (i.e. function will fail) -2: don't + destroy defined items (function will succeed) (C++: int) + +Help on function rebase_program in module ida_segment: + +rebase_program(*args) + rebase_program(delta, flags) -> int + + + Rebase the whole program by 'delta' bytes. + + @param delta: number of bytes to move the program (C++: adiff_t) + @param flags: Move segment flags it is recommended to use + MSF_FIXONCE so that the loader takes care of global + variables it stored in the database (C++: int) + @return: Move segment result codes + +Help on function segm_adjust_diff in module ida_segment: + +segm_adjust_diff(*args) + segm_adjust_diff(s, delta) -> adiff_t + + + Truncate and sign extend a delta depending on the segment. + + + @param s (C++: const segment_t *) + @param delta (C++: adiff_t) + +Help on function segm_adjust_ea in module ida_segment: + +segm_adjust_ea(*args) + segm_adjust_ea(s, ea) -> ea_t + + + Truncate an address depending on the segment. + + + @param s (C++: const segment_t *) + @param ea (C++: ea_t) + +Help on class segment_t in module ida_segment: + +class segment_t(ida_range.range_t) + | Proxy of C++ segment_t class. + | + | Method resolution order: + | segment_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> segment_t + | + | __repr__ = _swig_repr(self) + | + | abits(self, *args) + | abits(self) -> int + | + | abytes(self, *args) + | abytes(self) -> int + | + | clr_comorg(self, *args) + | clr_comorg(self) + | + | clr_ob_ok(self, *args) + | clr_ob_ok(self) + | + | comorg(self, *args) + | comorg(self) -> bool + | + | is_header_segm(self, *args) + | is_header_segm(self) -> bool + | + | is_hidden_segtype(self, *args) + | is_hidden_segtype(self) -> bool + | + | is_loader_segm(self, *args) + | is_loader_segm(self) -> bool + | + | is_visible_segm(self, *args) + | is_visible_segm(self) -> bool + | + | ob_ok(self, *args) + | ob_ok(self) -> bool + | + | set_comorg(self, *args) + | set_comorg(self) + | + | set_debugger_segm(self, *args) + | set_debugger_segm(self, debseg) + | + | set_header_segm(self, *args) + | set_header_segm(self, on) + | + | set_hidden_segtype(self, *args) + | set_hidden_segtype(self, hide) + | + | set_loader_segm(self, *args) + | set_loader_segm(self, ldrseg) + | + | set_ob_ok(self, *args) + | set_ob_ok(self) + | + | set_visible_segm(self, *args) + | set_visible_segm(self, visible) + | + | update(self, *args) + | update(self) -> bool + | + | use32(self, *args) + | use32(self) -> bool + | + | use64(self, *args) + | use64(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | align + | segment_t_align_get(self) -> uchar + | + | bitness + | segment_t_bitness_get(self) -> uchar + | + | color + | segment_t_color_get(self) -> bgcolor_t + | + | comb + | segment_t_comb_get(self) -> uchar + | + | defsr + | segment_t_defsr_get(self) -> sel_t [16] + | + | end_ea + | segment_t_end_ea_get(self) -> ea_t + | + | flags + | segment_t_flags_get(self) -> ushort + | + | name + | segment_t_name_get(self) -> uval_t + | + | orgbase + | segment_t_orgbase_get(self) -> uval_t + | + | perm + | segment_t_perm_get(self) -> uchar + | + | sclass + | segment_t_sclass_get(self) -> uval_t + | + | sel + | segment_t_sel_get(self) -> sel_t + | + | start_ea + | segment_t_start_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | type + | segment_t_type_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_segment_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | startEA + +Help on function segtype in module ida_segment: + +segtype(*args) + segtype(ea) -> uchar + + + Get segment type. + + @param ea: any linear address within the segment (C++: ea_t) + @return: Segment types , SEG_UNDF if no segment found at 'ea' + +Help on function sel2ea in module ida_segment: + +sel2ea(*args) + sel2ea(selector) -> ea_t + + + Get mapping of a selector as a linear address. + + @param selector: number of selector to translate to linear address + (C++: sel_t) + @return: linear address the specified selector is mapped to. if there + is no mapping, returns to_ea(selector,0); + +Help on function sel2para in module ida_segment: + +sel2para(*args) + sel2para(selector) -> ea_t + + + Get mapping of a selector. + + @param selector: number of selector to translate (C++: sel_t) + @return: paragraph the specified selector is mapped to. if there is no + mapping, returns 'selector'. + +Help on function set_defsr in module ida_segment: + +set_defsr(*args) + set_defsr(s, reg, value) + +Help on function set_group_selector in module ida_segment: + +set_group_selector(*args) + set_group_selector(grp, sel) -> int + + + Initialize groups. The kernel calls this function at the start of + work.Create a new group of segments (used OMF files). + + @param grp: selector of group segment (segment type is SEG_GRP ) You + should create an 'empty' (1 byte) group segment It won't + contain anything and will be used to redirect references + to the group of segments to the common selector. (C++: + sel_t) + @param sel: common selector of all segments belonging to the segment + You should create all segments within the group with the + same selector value. (C++: sel_t) + @return: 1 ok + +Help on function set_segm_addressing in module ida_segment: + +set_segm_addressing(*args) + set_segm_addressing(s, bitness) -> bool + + + Change segment addressing mode (16, 32, 64 bits). You must use this + function to change segment addressing, never change the 'bitness' + field directly. This function will delete all instructions, comments + and names in the segment + + @param s: pointer to segment (C++: segment_t *) + @param bitness: new addressing mode of segment 2: 64bit segment 1: + 32bit segment 0: 16bit segment (C++: size_t) + @return: success + +Help on function set_segm_base in module ida_segment: + +set_segm_base(*args) + set_segm_base(s, newbase) -> bool + + + Internal function. + + + @param s (C++: segment_t *) + @param newbase (C++: ea_t) + +Help on function set_segm_class in module ida_segment: + +set_segm_class(*args) + set_segm_class(s, sclass, flags=0) -> int + + + Set segment class. + + @param s: pointer to segment (may be NULL) (C++: segment_t *) + @param sclass: segment class (may be NULL). If segment type is + SEG_NORM and segment class is one of predefined names, + then segment type is changed to: "CODE" -> SEG_CODE + "DATA" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> + SEG_BSS if "UNK" then segment type is reset to + SEG_NORM . (C++: const char *) + @param flags (C++: int) + +Help on function set_segm_end in module ida_segment: + +set_segm_end(*args) + set_segm_end(ea, newend, flags) -> bool + + + Set segment end address. The next segment is shrinked to allow + expansion of the specified segment. The kernel might even delete the + next segment if necessary. The kernel will ask the user for a + permission to destroy instructions or data going out of segment scope + if such instructions exist. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newend: new end address of the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function set_segm_name in module ida_segment: + +set_segm_name(*args) + set_segm_name(s, name, flags=0) -> int + + + Rename segment. The new name is validated (see validate_name). A + segment always has a name. If you hadn't specified a name, the kernel + will assign it "seg###" name where ### is segment number. + + @param s: pointer to segment (may be NULL) (C++: segment_t *) + @param name: new segment name (C++: const char *) + @param flags: ADDSEG_IDBENC or 0 (C++: int) + +Help on function set_segm_start in module ida_segment: + +set_segm_start(*args) + set_segm_start(ea, newstart, flags) -> bool + + + Set segment start address. The previous segment is trimmed to allow + expansion of the specified segment. The kernel might even delete the + previous segment if necessary. The kernel will ask the user for a + permission to destroy instructions or data going out of segment scope + if such instructions exist. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newstart: new start address of the segment note that segment + start address should be higher than segment base + linear address. (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function set_segment_cmt in module ida_segment: + +set_segment_cmt(*args) + set_segment_cmt(s, cmt, repeatable) + + + Set segment comment. + + @param s: pointer to segment structure (C++: const segment_t *) + @param cmt: comment string, may be multiline (with ' '). maximal size + is 4096 bytes. Use empty str ("") to delete comment (C++: + const char *) + @param repeatable: 0: set regular comment. 1: set repeatable comment. + (C++: bool) + +Help on function set_segment_translations in module ida_segment: + +set_segment_translations(*args) + set_segment_translations(segstart, transmap) -> bool + + + Set new translation list. + + @param segstart: start address of the segment to add translation to + (C++: ea_t) + @param transmap: vector of segment start addresses for the translation + list. If transmap is empty, the translation list is + deleted. (C++: const eavec_t &) + +Help on function set_selector in module ida_segment: + +set_selector(*args) + set_selector(selector, paragraph) -> int + + + Set mapping of selector to a paragraph. You should call this + functionbeforecreating a segment which uses the selector, otherwise + the creation of the segment will fail. + + @param selector: number of selector to map if selector == BADSEL , + then return 0 (fail) if the selector has had a + mapping, old mapping is destroyed if the selector + number is equal to paragraph value, then the mapping + is destroyed because we don't need to keep trivial + mappings. (C++: sel_t) + @param paragraph: paragraph to map selector (C++: ea_t) + +Help on function set_visible_segm in module ida_segment: + +set_visible_segm(*args) + set_visible_segm(s, visible) + + + See 'SFL_HIDDEN' . + + + @param s (C++: segment_t *) + @param visible (C++: bool) + +Help on function setup_selector in module ida_segment: + +setup_selector(*args) + setup_selector(segbase) -> sel_t + + + Allocate a selector for a segment if necessary. You must call this + function before calling 'add_segm_ex()' . 'add_segm()' calls this + function itself, so you don't need to allocate a selector. This + function will allocate a selector if 'segbase' requires more than 16 + bits and the current processor is IBM PC. Otherwise it will return the + segbase value. + + @param segbase: a new segment base paragraph (C++: ea_t) + @return: the allocated selector number + +Help on function std_out_segm_footer in module ida_segment: + +std_out_segm_footer(*args) + std_out_segm_footer(ctx, seg) + + + Generate segment footer line as a comment line. This function may be + used in IDP modules to generate segment footer if the target assembler + doesn't have 'ends' directive. + + @param ctx (C++: struct outctx_t &) + @param seg (C++: segment_t *) + +Help on function take_memory_snapshot in module ida_segment: + +take_memory_snapshot(*args) + take_memory_snapshot(only_loader_segs) -> bool + + + Take a memory snapshot of the running process. + + @param only_loader_segs: only is_loader_segm() segments will be + affected (C++: bool) + @return: success + +Help on function update_segm in module ida_segment: + +update_segm(*args) + update_segm(s) -> bool + +=== ida_segment EPYDOC INJECTIONS === +ida_segment.ADDSEG_FILLGAP +""" +fill gap between new segment and previous one. i.e. if such a gap +exists, and this gap is less than 64K, then fill the gap by extending +the previous segment and adding .align directive to it. This way we +avoid gaps between segments. too many gaps lead to a virtual array +failure. it cannot hold more than ~1000 gaps. +""" + +ida_segment.ADDSEG_IDBENC +""" +non-ASCII bytes will be decoded accordingly + +'name' and 'sclass' are given in the IDB encoding; +""" + +ida_segment.ADDSEG_NOAA +""" +do not mark new segment for auto-analysis +""" + +ida_segment.ADDSEG_NOSREG +""" +(undefine all default segment registers) + +set all default segment register values to 'BADSEL' +""" + +ida_segment.ADDSEG_NOTRUNC +""" +destroy/truncate old segments instead. + +don't truncate the new segment at the beginning of the next segment if +they overlap. +""" + +ida_segment.ADDSEG_OR_DIE +""" + 'qexit()' if can't add a segment +""" + +ida_segment.ADDSEG_QUIET +""" +silent mode, no "Adding segment..." in the messages window +""" + +ida_segment.ADDSEG_SPARSE +""" +use sparse storage method for the new segment +""" + +ida_segment.CSS_BREAK +""" +memory reading process stopped by user +""" + +ida_segment.CSS_NODBG +""" +debugger is not running +""" + +ida_segment.CSS_NOMEM +""" +is too big) + +not enough memory (might be because the segment +""" + +ida_segment.CSS_NORANGE +""" +could not find corresponding memory range +""" + +ida_segment.CSS_OK +""" +ok +""" + +ida_segment.MAX_GROUPS +""" +max number of segment groups +""" + +ida_segment.MAX_SEGM_TRANSLATIONS +""" +max number of segment translations +""" + +ida_segment.MOVE_SEGM_CHUNK +""" +Too many chunks are defined, can't move. +""" + +ida_segment.MOVE_SEGM_DEBUG +""" +Debugger segments cannot be moved. +""" + +ida_segment.MOVE_SEGM_IDP +""" +IDP module forbids moving the segment. +""" + +ida_segment.MOVE_SEGM_LOADER +""" +The segment has been moved but the loader complained. +""" + +ida_segment.MOVE_SEGM_ODD +""" +Cannot move segments by an odd number of bytes. +""" + +ida_segment.MOVE_SEGM_OK +""" +all ok +""" + +ida_segment.MOVE_SEGM_ORPHAN +""" +Orphan bytes hinder segment movement. +""" + +ida_segment.MOVE_SEGM_PARAM +""" +The specified segment does not exist. +""" + +ida_segment.MOVE_SEGM_ROOM +""" +Not enough free room at the target address. +""" + +ida_segment.MSF_FIXONCE +""" +valid for 'rebase_program()' . see 'loader_t::move_segm' . + +call loader only once with the special calling method. +""" + +ida_segment.MSF_LDKEEP +""" +keep the loader in the memory (optimization) +""" + +ida_segment.MSF_NETNODES +""" +valid for 'rebase_program()' + +move netnodes instead of changing inf.netdelta (this is slower) +""" + +ida_segment.MSF_NOFIX +""" +don't call the loader to fix relocations +""" + +ida_segment.MSF_PRIORITY +""" +valid for 'move_segm()' + +loader segments will overwrite any existing debugger segments when +moved. +""" + +ida_segment.MSF_SILENT +""" +don't display a "please wait" box on the screen +""" + +ida_segment.SEGMOD_KEEP +""" +keep information (code & data, etc) +""" + +ida_segment.SEGMOD_KEEP0 +""" +flag for internal use, don't set +""" + +ida_segment.SEGMOD_KEEPSEL +""" +do not try to delete unused selector +""" + +ida_segment.SEGMOD_KILL +""" +disable addresses if segment gets shrinked or deleted +""" + +ida_segment.SEGMOD_NOMOVE +""" +(for 'set_segm_start()' ) + +don't move info from the start of segment to the new start address +""" + +ida_segment.SEGMOD_SILENT +""" +be silent +""" + +ida_segment.SEGMOD_SPARSE +""" +(for 'set_segm_start()' , 'set_segm_end()' ) + +use sparse storage if extending the segment +""" + +ida_segment.SEGPERM_EXEC +""" +Execute. +""" + +ida_segment.SEGPERM_READ +""" +Read. +""" + +ida_segment.SEGPERM_WRITE +""" +Write. +""" + +ida_segment.SEG_ABSSYM +""" +segment with definitions of absolute symbols +""" + +ida_segment.SEG_BSS +""" +uninitialized segment +""" + +ida_segment.SEG_CODE +""" +code segment +""" + +ida_segment.SEG_COMM +""" +segment with communal definitions +""" + +ida_segment.SEG_DATA +""" +data segment +""" + +ida_segment.SEG_GRP +""" +group of segments +""" + +ida_segment.SEG_IMEM +""" +internal processor memory & sfr (8051) +""" + +ida_segment.SEG_IMP +""" +java: implementation segment +""" + +ida_segment.SEG_NORM +""" +unknown type, no assumptions +""" + +ida_segment.SEG_NULL +""" +zero-length segment +""" + +ida_segment.SEG_UNDF +""" +undefined segment type (not used) +""" + +ida_segment.SEG_XTRN +""" +no instructions are allowed + +segment with 'extern' definitions. +""" + +ida_segment.SFL_COMORG +""" +IDP dependent field (IBM PC: if set, ORG directive is not commented +out) +""" + +ida_segment.SFL_DEBUG +""" +Is the segment created for the debugger?. Such segments are temporary +and do not have permanent flags. +""" + +ida_segment.SFL_HEADER +""" +Header segment (do not create offsets to it in the disassembly) +""" + +ida_segment.SFL_HIDDEN +""" +Is the segment hidden? +""" + +ida_segment.SFL_HIDETYPE +""" +Hide segment type (do not print it in the listing) +""" + +ida_segment.SFL_LOADER +""" +Is the segment created by the loader? +""" + +ida_segment.SFL_OBOK +""" +Orgbase is present? (IDP dependent field) +""" + +ida_segment.SREG_NUM +""" +Maximum number of segment registers is 16 (see 'segregs.hpp' ) +""" + +ida_segment.saAbs +""" +Absolute segment. +""" + +ida_segment.saGroup +""" +Segment group. +""" + +ida_segment.saRel1024Bytes +""" +1024 bytes +""" + +ida_segment.saRel128Bytes +""" +128 bytes +""" + +ida_segment.saRel2048Bytes +""" +2048 bytes +""" + +ida_segment.saRel32Bytes +""" +32 bytes +""" + +ida_segment.saRel4K +""" +alignment. It is not supported by LINK. + +This value is used by the PharLap OMF for page (4K) +""" + +ida_segment.saRel512Bytes +""" +512 bytes +""" + +ida_segment.saRel64Bytes +""" +64 bytes +""" + +ida_segment.saRelByte +""" +Relocatable, byte aligned. +""" + +ida_segment.saRelDble +""" +boundary. + +Relocatable, aligned on a double word (4-byte) +""" + +ida_segment.saRelPage +""" +Relocatable, aligned on 256-byte boundary. +""" + +ida_segment.saRelPara +""" +Relocatable, paragraph (16-byte) aligned. +""" + +ida_segment.saRelQword +""" +8 bytes +""" + +ida_segment.saRelWord +""" +Relocatable, word (2-byte) aligned. +""" + +ida_segment.scCommon +""" +Common. Combine by overlay using maximum size. +""" + +ida_segment.scGroup +""" +Segment group. +""" + +ida_segment.scPriv +""" +segment. + +Private. Do not combine with any other program +""" + +ida_segment.scPub +""" +the alignment requirement. + +Public. Combine by appending at an offset that meets +""" + +ida_segment.scPub2 +""" +As defined by Microsoft, same as C=2 (public). +""" + +ida_segment.scPub3 +""" +As defined by Microsoft, same as C=2 (public). +""" + +ida_segment.scStack +""" +byte alignment. + +Stack. Combine as for C=2. This combine type forces +""" +=== ida_segment EPYDOC INJECTIONS END === +Help on function copy_sreg_ranges in module ida_segregs: + +copy_sreg_ranges(*args) + copy_sreg_ranges(dst_rg, src_rg, map_selector=False) + + + Duplicate segment register ranges. + + @param dst_rg: number of destination segment register (C++: int) + @param src_rg: copy ranges from (C++: int) + @param map_selector: map selectors to linear addresses using sel2ea() + (C++: bool) + +Help on function del_sreg_range in module ida_segregs: + +del_sreg_range(*args) + del_sreg_range(ea, rg) -> bool + + + Delete segment register range started at ea. When a segment register + range is deleted, the previous range is extended to cover the empty + space. The segment register range at the beginning of a segment cannot + be deleted. + + @param ea: start_ea of the deleted range (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_prev_sreg_range in module ida_segregs: + +get_prev_sreg_range(*args) + get_prev_sreg_range(out, ea, rg) -> bool + + + Get segment register range previous to one with address.more efficient + then get_sreg_range(reg, ea-1) + + @param out: segment register range (C++: sreg_range_t *) + @param ea: any linear address in the program (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_sreg in module ida_segregs: + +get_sreg(*args) + get_sreg(ea, rg) -> sel_t + + + Get value of a segment register. This function uses segment register + range and default segment register values stored in the segment + structure. + + @param ea: linear address in the program (C++: ea_t) + @param rg: number of the segment register (C++: int) + @return: value of the segment register, BADSEL if value is unknown. + +Help on function get_sreg_range in module ida_segregs: + +get_sreg_range(*args) + get_sreg_range(out, ea, rg) -> bool + + + Get segment register range by linear address. + + @param out: segment register range (C++: sreg_range_t *) + @param ea: any linear address in the program (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_sreg_range_num in module ida_segregs: + +get_sreg_range_num(*args) + get_sreg_range_num(ea, rg) -> int + + + Get number of segment register range by address. + + @param ea: any address in the range (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: -1 if no range occupies the specified address. otherwise + returns number of the specified range + (0..get_srranges_qty()-1) + +Help on function get_sreg_ranges_qty in module ida_segregs: + +get_sreg_ranges_qty(*args) + get_sreg_ranges_qty(rg) -> size_t + + + Get number of segment register ranges. + + @param rg: the segment register number (C++: int) + +Help on function getn_sreg_range in module ida_segregs: + +getn_sreg_range(*args) + getn_sreg_range(out, rg, n) -> bool + + + Get segment register range by its number. + + @param out: segment register range (C++: sreg_range_t *) + @param rg: the segment register number (C++: int) + @param n: number of range (0..qty()-1) (C++: int) + @return: success + +Help on function set_default_dataseg in module ida_segregs: + +set_default_dataseg(*args) + set_default_dataseg(ds_sel) + + + Set default value of DS register for all segments. + + + @param ds_sel (C++: sel_t) + +Help on function set_default_sreg_value in module ida_segregs: + +set_default_sreg_value(*args) + set_default_sreg_value(sg, rg, value) -> bool + + + Set default value of a segment register for a segment. + + @param sg: pointer to segment structure if NULL, then set the register + for all segments (C++: segment_t *) + @param rg: number of segment register (C++: int) + @param value: its default value. this value will be used by + get_sreg() if value of the register is unknown at the + specified address. (C++: sel_t) + @return: success + +Help on function set_sreg_at_next_code in module ida_segregs: + +set_sreg_at_next_code(*args) + set_sreg_at_next_code(ea1, ea2, rg, value) + + + Set the segment register value at the next instruction. This function + is designed to be called from 'idb_event::sgr_changed' handler in + order to contain the effect of changing a segment register value only + until the next instruction.It is useful, for example, in the ARM + module: the modification of the T register does not affect existing + instructions later in the code. + + @param ea1: address to start to search for an instruction (C++: ea_t) + @param ea2: the maximal address (C++: ea_t) + @param rg: the segment register number (C++: int) + @param value: the segment register value (C++: sel_t) + +Help on function split_sreg_range in module ida_segregs: + +split_sreg_range(*args) + split_sreg_range(ea, rg, v, tag, silent=False) -> bool + + + Create a new segment register range. This function is used when the + IDP emulator detects that a segment register changes its value. + + @param ea: linear address where the segment register will have a new + value. if ea== BADADDR , nothing to do. (C++: ea_t) + @param rg: the number of the segment register (C++: int) + @param v: the new value of the segment register. If the value is + unknown, you should specify BADSEL . (C++: sel_t) + @param tag: the register info tag. see Segment register range tags + (C++: uchar) + @param silent: if false, display a warning() in the case of failure + (C++: bool) + @return: success + +Help on class sreg_range_t in module ida_segregs: + +class sreg_range_t(ida_range.range_t) + | Proxy of C++ sreg_range_t class. + | + | Method resolution order: + | sreg_range_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sreg_range_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | tag + | sreg_range_t_tag_get(self) -> uchar + | + | thisown + | The membership flag + | + | val + | sreg_range_t_val_get(self) -> sel_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sreg_range_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +=== ida_segregs EPYDOC INJECTIONS === +ida_segregs.SR_auto +""" +the value is determined by IDA +""" + +ida_segregs.SR_autostart +""" +used as 'SR_auto' for segment starting address +""" + +ida_segregs.SR_inherit +""" +the value is inherited from the previous range +""" + +ida_segregs.SR_user +""" +the value is specified by the user +""" +=== ida_segregs EPYDOC INJECTIONS END === +Help on function build_strlist in module ida_strlist: + +build_strlist(*args) + build_strlist() + + + Build the string list. You should initialize options before this call + using the restore_config() or setup_strings_window() methods. + +Help on function clear_strlist in module ida_strlist: + +clear_strlist(*args) + clear_strlist() + + + Clear the string list. + +Help on function get_strlist_item in module ida_strlist: + +get_strlist_item(*args) + get_strlist_item(si, n) -> bool + + + Get nth element of the string list (n=0.. 'get_strlist_qty()' -1) + + + @param si (C++: string_info_t *) + @param n (C++: size_t) + +Help on function get_strlist_options in module ida_strlist: + +get_strlist_options(*args) + get_strlist_options() -> strwinsetup_t + + + Get access to the static string list options. + +Help on function get_strlist_qty in module ida_strlist: + +get_strlist_qty(*args) + get_strlist_qty() -> size_t + + + Get number of elements in the string list. + +Help on class string_info_t in module ida_strlist: + +class string_info_t(__builtin__.object) + | Proxy of C++ string_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> string_info_t + | __init__(self, _ea) -> string_info_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | string_info_t_ea_get(self) -> ea_t + | + | length + | string_info_t_length_get(self) -> int + | + | thisown + | The membership flag + | + | type + | string_info_t_type_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_string_info_t(self) + +Help on class strwinsetup_t in module ida_strlist: + +class strwinsetup_t(__builtin__.object) + | Proxy of C++ strwinsetup_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strwinsetup_t + | + | __repr__ = _swig_repr(self) + | + | _get_strtypes(self, *args) + | _get_strtypes(self) -> PyObject * + | + | _set_strtypes(self, *args) + | _set_strtypes(self, py_t) -> PyObject * + | + | is_initialized(self, *args) + | is_initialized(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | display_only_existing_strings + | strwinsetup_t_display_only_existing_strings_get(self) -> uchar + | + | ignore_heads + | strwinsetup_t_ignore_heads_get(self) -> uchar + | + | minlen + | strwinsetup_t_minlen_get(self) -> sval_t + | + | only_7bit + | strwinsetup_t_only_7bit_get(self) -> uchar + | + | strtypes + | _get_strtypes(self) -> PyObject * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_strwinsetup_t(self) + +Help on function add_struc in module ida_struct: + +add_struc(*args) + add_struc(idx, name, is_union=False) -> tid_t + + + Create a structure type. if idx== 'BADADDR' then add as the last idx. + if name==NULL then a name will be generated "struct_%d". + + @param idx (C++: uval_t) + @param name (C++: const char *) + @param is_union (C++: bool) + +Help on function add_struc_member in module ida_struct: + +add_struc_member(*args) + add_struc_member(sptr, fieldname, offset, flag, mt, nbytes) -> struc_error_t + + + Add member to existing structure. + + @param sptr: structure to modify (C++: struc_t *) + @param fieldname: if NULL, then "anonymous_#" name will be generated + (C++: const char *) + @param offset: BADADDR means add to the end of structure (C++: ea_t) + @param flag: type + representation bits (C++: flags_t) + @param mt: additional info about member type. must be present for + structs, offsets, enums, strings, struct offsets. (C++: + const opinfo_t *) + @param nbytes: if == 0 then the structure will be a varstruct. in this + case the member should be the last member in the + structure (C++: asize_t) + +Help on function del_member_tinfo in module ida_struct: + +del_member_tinfo(*args) + del_member_tinfo(sptr, mptr) -> bool + + + Delete tinfo for given member. + + + @param sptr (C++: struc_t *) + @param mptr (C++: member_t *) + +Help on function del_struc in module ida_struct: + +del_struc(*args) + del_struc(sptr) -> bool + + + Delete a structure type. + + + @param sptr (C++: struc_t *) + +Help on function del_struc_member in module ida_struct: + +del_struc_member(*args) + del_struc_member(sptr, offset) -> bool + + + Delete member at given offset. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + +Help on function del_struc_members in module ida_struct: + +del_struc_members(*args) + del_struc_members(sptr, off1, off2) -> int + + + Delete members which occupy range of offsets (off1..off2). + + @param sptr (C++: struc_t *) + @param off1 (C++: ea_t) + @param off2 (C++: ea_t) + @return: number of deleted members or -1 on error + +Help on function expand_struc in module ida_struct: + +expand_struc(*args) + expand_struc(sptr, offset, delta, recalc=True) -> bool + + + Expand/Shrink structure type. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param delta (C++: adiff_t) + @param recalc (C++: bool) + +Help on function get_best_fit_member in module ida_struct: + +get_best_fit_member(*args) + get_best_fit_member(sptr, offset) -> member_t + + + Get member that is most likely referenced by the specified offset. + Useful for offsets > sizeof(struct). + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_first_struc_idx in module ida_struct: + +get_first_struc_idx(*args) + get_first_struc_idx() -> uval_t + + + Get index of first structure. + + @return: BADADDR if no known structures, 0 otherwise + +Help on function get_last_struc_idx in module ida_struct: + +get_last_struc_idx(*args) + get_last_struc_idx() -> uval_t + + + Get index of last structure. + + @return: BADADDR if no known structures, get_struc_qty() -1 + otherwise + +Help on function get_max_offset in module ida_struct: + +get_max_offset(*args) + get_max_offset(sptr) -> ea_t + + + For unions: returns number of members, for structs: returns size of + structure. + + + @param sptr (C++: struc_t *) + +Help on function get_member in module ida_struct: + +get_member(*args) + get_member(sptr, offset) -> member_t + + + Get member at given offset. + + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_member_by_fullname in module ida_struct: + +get_member_by_fullname(*args) + get_member_by_fullname(fullname) -> member_t + + + Get a member by its fully qualified name, "struct.field". + + + @param fullname (C++: const char *) + +Help on function get_member_by_id in module ida_struct: + +get_member_by_id(*args) + get_member_by_id(mid) -> member_t + + + Check if the specified member id points to a struct member. + + + @param mid (C++: tid_t) + +Help on function get_member_by_name in module ida_struct: + +get_member_by_name(*args) + get_member_by_name(sptr, membername) -> member_t + + + Get a member by its name, like "field44". + + + @param sptr (C++: const struc_t *) + @param membername (C++: const char *) + +Help on function get_member_cmt in module ida_struct: + +get_member_cmt(*args) + get_member_cmt(mid, repeatable) -> str + + + Get comment of structure member. + + + @param mid (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_member_fullname in module ida_struct: + +get_member_fullname(*args) + get_member_fullname(mid) -> str + + + Get a member's fully qualified name, "struct.field". + + + @param mid (C++: tid_t) + +Help on function get_member_id in module ida_struct: + +get_member_id(*args) + get_member_id(sptr, offset) -> tid_t + + + Get member id at given offset. + + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_member_name in module ida_struct: + +get_member_name(*args) + get_member_name(mid) -> str + + + Get name of structure member. + + + @param mid (C++: tid_t) + +Help on function get_member_size in module ida_struct: + +get_member_size(*args) + get_member_size(nonnul_mptr) -> asize_t + + + Get size of structure member. May return 0 for the last member of + varstruct. For union members, returns 'member_t::eoff' . + +Help on function get_member_struc in module ida_struct: + +get_member_struc(*args) + get_member_struc(fullname) -> struc_t + + + Get containing structure of member by its full name "struct.field". + + + @param fullname (C++: const char *) + +Help on function get_member_tinfo in module ida_struct: + +get_member_tinfo(*args) + get_member_tinfo(tif, mptr) -> bool + + + Get tinfo for given member. + + + @param tif (C++: tinfo_t *) + @param mptr (C++: const member_t *) + +Help on function get_next_member_idx in module ida_struct: + +get_next_member_idx(*args) + get_next_member_idx(sptr, off) -> ssize_t + + + Get the next member idx, if it does not exist, return -1. + + + @param sptr (C++: const struc_t *) + @param off (C++: asize_t) + +Help on function get_next_struc_idx in module ida_struct: + +get_next_struc_idx(*args) + get_next_struc_idx(idx) -> uval_t + + + Get next struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is out of bounds, otherwise idx++ + +Help on function get_or_guess_member_tinfo in module ida_struct: + +get_or_guess_member_tinfo(*args) + get_or_guess_member_tinfo(tif, mptr) -> bool + + + Try to get tinfo for given member - if failed, generate a tinfo using + information about the member id from the disassembly + + @param tif (C++: tinfo_t *) + @param mptr (C++: const member_t *) + +Help on function get_prev_member_idx in module ida_struct: + +get_prev_member_idx(*args) + get_prev_member_idx(sptr, off) -> ssize_t + + + Get the prev member idx, if it does not exist, return -1. + + + @param sptr (C++: const struc_t *) + @param off (C++: asize_t) + +Help on function get_prev_struc_idx in module ida_struct: + +get_prev_struc_idx(*args) + get_prev_struc_idx(idx) -> uval_t + + + Get previous struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is negative, otherwise idx - 1 + +Help on function get_sptr in module ida_struct: + +get_sptr(*args) + get_sptr(mptr) -> struc_t + + + Get child struct if member is a struct. + + + @param mptr (C++: const member_t *) + +Help on function get_struc in module ida_struct: + +get_struc(*args) + get_struc(id) -> struc_t + + + Get pointer to struct type info. + + + @param id (C++: tid_t) + +Help on function get_struc_by_idx in module ida_struct: + +get_struc_by_idx(*args) + get_struc_by_idx(idx) -> tid_t + + + Get struct id by struct number. + + + @param idx (C++: uval_t) + +Help on function get_struc_cmt in module ida_struct: + +get_struc_cmt(*args) + get_struc_cmt(id, repeatable) -> str + + + Get struct comment. + + + @param id (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_struc_first_offset in module ida_struct: + +get_struc_first_offset(*args) + get_struc_first_offset(sptr) -> ea_t + + + Get offset of first member. + + @param sptr (C++: const struc_t *) + @return: BADADDR if memqty == 0 + +Help on function get_struc_id in module ida_struct: + +get_struc_id(*args) + get_struc_id(name) -> tid_t + + + Get struct id by name. + + + @param name (C++: const char *) + +Help on function get_struc_idx in module ida_struct: + +get_struc_idx(*args) + get_struc_idx(id) -> uval_t + + + Get internal number of the structure. + + + @param id (C++: tid_t) + +Help on function get_struc_last_offset in module ida_struct: + +get_struc_last_offset(*args) + get_struc_last_offset(sptr) -> ea_t + + + Get offset of last member. + + @param sptr (C++: const struc_t *) + @return: BADADDR if memqty == 0 + +Help on function get_struc_name in module ida_struct: + +get_struc_name(*args) + get_struc_name(id, flags=0) -> str + + + Get struct name by id + + @param id: struct id (C++: tid_t) + @param flags: Struct name flags (C++: int) + +Help on function get_struc_next_offset in module ida_struct: + +get_struc_next_offset(*args) + get_struc_next_offset(sptr, offset) -> ea_t + + + Get offset of member with smallest offset larger than 'offset'. + + @param sptr (C++: const struc_t *) + @param offset (C++: ea_t) + @return: BADADDR if no next offset + +Help on function get_struc_prev_offset in module ida_struct: + +get_struc_prev_offset(*args) + get_struc_prev_offset(sptr, offset) -> ea_t + + + Get offset of member with largest offset less than 'offset'. + + @param sptr (C++: const struc_t *) + @param offset (C++: ea_t) + @return: BADADDR if no prev offset + +Help on function get_struc_qty in module ida_struct: + +get_struc_qty(*args) + get_struc_qty() -> size_t + + + Get number of known structures. + +Help on function get_struc_size in module ida_struct: + +get_struc_size(*args) + get_struc_size(sptr) -> asize_t + get_struc_size(id) -> asize_t + + + Get struct size (also see 'get_struc_size(tid_t)' ) + + + @param sptr (C++: const struc_t *) + +Help on function is_anonymous_member_name in module ida_struct: + +is_anonymous_member_name(*args) + is_anonymous_member_name(name) -> bool + + + Is member name prefixed with "anonymous"? + + + @param name (C++: const char *) + +Help on function is_dummy_member_name in module ida_struct: + +is_dummy_member_name(*args) + is_dummy_member_name(name) -> bool + + + Is member name an auto-generated name? + + + @param name (C++: const char *) + +Help on function is_member_id in module ida_struct: + +is_member_id(*args) + is_member_id(mid) -> bool + + + Is a member id? + + + @param mid (C++: tid_t) + +Help on function is_special_member in module ida_struct: + +is_special_member(*args) + is_special_member(id) -> bool + + + Is a special member with the name beginning with ' '? + + + @param id (C++: tid_t) + +Help on function is_union in module ida_struct: + +is_union(*args) + is_union(id) -> bool + + + Is a union? + + + @param id (C++: tid_t) + +Help on function is_varmember in module ida_struct: + +is_varmember(*args) + is_varmember(mptr) -> bool + + + Is variable size member? + + + @param mptr (C++: const member_t *) + +Help on function is_varstr in module ida_struct: + +is_varstr(*args) + is_varstr(id) -> bool + + + Is variable size structure? + + + @param id (C++: tid_t) + +Help on class member_t in module ida_struct: + +class member_t(__builtin__.object) + | Proxy of C++ member_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> member_t + | + | __repr__ = _swig_repr(self) + | + | by_til(self, *args) + | by_til(self) -> bool + | + | get_soff(self, *args) + | get_soff(self) -> ea_t + | + | has_ti(self, *args) + | has_ti(self) -> bool + | + | has_union(self, *args) + | has_union(self) -> bool + | + | is_baseclass(self, *args) + | is_baseclass(self) -> bool + | + | is_destructor(self, *args) + | is_destructor(self) -> bool + | + | is_dupname(self, *args) + | is_dupname(self) -> bool + | + | unimem(self, *args) + | unimem(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | eoff + | member_t_eoff_get(self) -> ea_t + | + | flag + | member_t_flag_get(self) -> flags_t + | + | id + | member_t_id_get(self) -> tid_t + | + | props + | member_t_props_get(self) -> uint32 + | + | soff + | member_t_soff_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_member_t(self) + +Help on function retrieve_member_info in module ida_struct: + +retrieve_member_info(*args) + retrieve_member_info(buf, mptr) -> opinfo_t + + + Get operand type info for member. + + + @param buf (C++: opinfo_t *) + @param mptr (C++: const member_t *) + +Help on function save_struc in module ida_struct: + +save_struc(*args) + save_struc(sptr, may_update_ltypes=True) + + + Update struct information in the database (internal function) + + + @param sptr (C++: struc_t *) + @param may_update_ltypes (C++: bool) + +Help on function set_member_cmt in module ida_struct: + +set_member_cmt(*args) + set_member_cmt(mptr, cmt, repeatable) -> bool + + + Set member comment. + + + @param mptr (C++: member_t *) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_member_name in module ida_struct: + +set_member_name(*args) + set_member_name(sptr, offset, name) -> bool + + + Set name of member at given offset. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param name (C++: const char *) + +Help on function set_member_tinfo in module ida_struct: + +set_member_tinfo(*args) + set_member_tinfo(sptr, mptr, memoff, tif, flags) -> smt_code_t + + + Set tinfo for given member. + + @param sptr: containing struct (C++: struc_t *) + @param mptr: target member (C++: member_t *) + @param memoff: offset within member (C++: uval_t) + @param tif: type info (C++: const tinfo_t &) + @param flags: Set member tinfo flags (C++: int) + +Help on function set_member_type in module ida_struct: + +set_member_type(*args) + set_member_type(sptr, offset, flag, mt, nbytes) -> bool + + + Set type of member at given offset (also see 'add_struc_member()' ) + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param flag (C++: flags_t) + @param mt (C++: const opinfo_t *) + @param nbytes (C++: asize_t) + +Help on function set_struc_align in module ida_struct: + +set_struc_align(*args) + set_struc_align(sptr, shift) -> bool + + + Set structure alignment ( 'SF_ALIGN' ) + + + @param sptr (C++: struc_t *) + @param shift (C++: int) + +Help on function set_struc_cmt in module ida_struct: + +set_struc_cmt(*args) + set_struc_cmt(id, cmt, repeatable) -> bool + + + Set structure comment. + + + @param id (C++: tid_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_struc_hidden in module ida_struct: + +set_struc_hidden(*args) + set_struc_hidden(sptr, is_hidden) + + + Hide/unhide a struct type. + + + @param sptr (C++: struc_t *) + @param is_hidden (C++: bool) + +Help on function set_struc_idx in module ida_struct: + +set_struc_idx(*args) + set_struc_idx(sptr, idx) -> bool + + + Set internal number of struct. Also see 'get_struc_idx()' , + 'get_struc_by_idx()' . + + @param sptr (C++: const struc_t *) + @param idx (C++: uval_t) + +Help on function set_struc_listed in module ida_struct: + +set_struc_listed(*args) + set_struc_listed(sptr, is_listed) + + + Add/remove a struct type from the struct list. + + + @param sptr (C++: struc_t *) + @param is_listed (C++: bool) + +Help on function set_struc_name in module ida_struct: + +set_struc_name(*args) + set_struc_name(id, name) -> bool + + + Set structure name. + + + @param id (C++: tid_t) + @param name (C++: const char *) + +Help on function stroff_as_size in module ida_struct: + +stroff_as_size(*args) + stroff_as_size(plen, sptr, value) -> bool + + + Should display a structure offset expression as the structure size? + + + @param plen (C++: int) + @param sptr (C++: const struc_t *) + @param value (C++: asize_t) + +Help on class struc_t in module ida_struct: + +class struc_t(__builtin__.object) + | Proxy of C++ struc_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | from_til(self, *args) + | from_til(self) -> bool + | + | get_alignment(self, *args) + | get_alignment(self) -> int + | + | get_member(self, *args) + | get_member(self, index) -> member_t + | + | has_union(self, *args) + | has_union(self) -> bool + | + | is_choosable(self, *args) + | is_choosable(self) -> bool + | + | is_frame(self, *args) + | is_frame(self) -> bool + | + | is_ghost(self, *args) + | is_ghost(self) -> bool + | + | is_hidden(self, *args) + | is_hidden(self) -> bool + | + | is_union(self, *args) + | is_union(self) -> bool + | + | is_varstr(self, *args) + | is_varstr(self) -> bool + | + | set_alignment(self, *args) + | set_alignment(self, shift) + | + | set_ghost(self, *args) + | set_ghost(self, _is_ghost) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | age + | struc_t_age_get(self) -> ushort + | + | id + | struc_t_id_get(self) -> tid_t + | + | members + | struc_t_members_get(self) -> member_t + | + | memqty + | struc_t_memqty_get(self) -> uint32 + | + | ordinal + | struc_t_ordinal_get(self) -> int32 + | + | props + | struc_t_props_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_struc_t(self) + +Help on class struct_field_visitor_t in module ida_struct: + +class struct_field_visitor_t(__builtin__.object) + | Proxy of C++ struct_field_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> struct_field_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_field(self, *args) + | visit_field(self, sptr, mptr) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_struct_field_visitor_t(self) + +Help on function visit_stroff_fields in module ida_struct: + +visit_stroff_fields(*args) + visit_stroff_fields(sfv, path, disp, appzero) -> flags_t + + + Visit structure fields in a stroff expression or in a reference to a + struct data variable. This function can be used to enumerate all + components of an expression like 'a.b.c'. + + @param sfv: visitor object (C++: struct_field_visitor_t &) + @param path: struct path (path[0] contains the initial struct id) + (C++: const tid_t *) + @param disp: offset into structure (C++: adiff_t *) + @param appzero: should visit field at offset zero? (C++: bool) + +=== ida_struct EPYDOC INJECTIONS === +ida_struct.MF_BASECLASS +""" +a special member representing base class +""" + +ida_struct.MF_BYTIL +""" +the member was created due to the type system +""" + +ida_struct.MF_DTOR +""" +a special member representing destructor +""" + +ida_struct.MF_DUPNAME +""" +duplicate name resolved with _N suffix (N==soff) +""" + +ida_struct.MF_HASTI +""" +has type information? +""" + +ida_struct.MF_HASUNI +""" +has members of type "union"? +""" + +ida_struct.MF_OK +""" +is the member ok? (always yes) +""" + +ida_struct.MF_UNIMEM +""" +is a member of a union? +""" + +ida_struct.SET_MEMTI_BYTIL +""" +new type was created by the type subsystem +""" + +ida_struct.SET_MEMTI_COMPATIBLE +""" +new type must be compatible with the old +""" + +ida_struct.SET_MEMTI_FUNCARG +""" +mptr is function argument (cannot create arrays) +""" + +ida_struct.SET_MEMTI_MAY_DESTROY +""" +may destroy other members +""" + +ida_struct.SET_MEMTI_USERTI +""" +user-specified type +""" + +ida_struct.SF_ALIGN +""" +alignment (shift amount: 0..31) +""" + +ida_struct.SF_FRAME +""" +the structure is a function frame +""" + +ida_struct.SF_GHOST +""" +ghost copy of a local type +""" + +ida_struct.SF_HASUNI +""" +has members of type "union"? +""" + +ida_struct.SF_HIDDEN +""" +the structure is collapsed +""" + +ida_struct.SF_NOLIST +""" +don't include in the chooser list +""" + +ida_struct.SF_TYPLIB +""" +the structure comes from type library +""" + +ida_struct.SF_UNION +""" +varunions are prohibited! + +is a union? +""" + +ida_struct.SF_VAR +""" +is variable size structure (varstruct)? a variable size structure is +one with the zero size last member. if the last member is a varstruct, +then the current structure is a varstruct too. +""" + +ida_struct.STRNFL_REGEX +""" +apply regular expressions to beautify the name +""" + +ida_struct.STRUC_SEPARATOR +""" +structname.fieldname +""" +=== ida_struct EPYDOC INJECTIONS END === +Help on function add_tryblk in module ida_tryblks: + +add_tryblk(*args) + add_tryblk(tb) -> int + + + Add one try block information. + + @param tb: try block to add. (C++: const tryblk_t &) + @return: error code; 0 means good + +Help on class catch_t in module ida_tryblks: + +class catch_t(try_handler_t) + | Proxy of C++ catch_t class. + | + | Method resolution order: + | catch_t + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> catch_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | obj + | catch_t_obj_get(self) -> sval_t + | + | thisown + | The membership flag + | + | type_id + | catch_t_type_id_get(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_catch_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from try_handler_t: + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from try_handler_t: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class catchvec_t in module ida_tryblks: + +class catchvec_t(__builtin__.object) + | Proxy of C++ qvector< catch_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> catch_t + | + | __init__(self, *args) + | __init__(self) -> catchvec_t + | __init__(self, x) -> catchvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> catch_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> catch_t + | begin(self) -> catch_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> catch_t + | end(self) -> catch_t + | + | erase(self, *args) + | erase(self, it) -> catch_t + | erase(self, first, last) -> catch_t + | + | extract(self, *args) + | extract(self) -> catch_t + | + | find(self, *args) + | find(self, x) -> catch_t + | find(self, x) -> catch_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=catch_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> catch_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> catch_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_catchvec_t(self) + +Help on function del_tryblks in module ida_tryblks: + +del_tryblks(*args) + del_tryblks(range) + + + Delete try block information in the specified range. + + @param range: the range to be cleared (C++: const range_t &) + +Help on function find_syseh in module ida_tryblks: + +find_syseh(*args) + find_syseh(ea) -> ea_t + + + Find the start address of the system eh region including the argument. + + @param ea: search address (C++: ea_t) + @return: start address of surrounding tryblk, otherwise BADADDR + +Help on function get_tryblks in module ida_tryblks: + +get_tryblks(*args) + get_tryblks(tbv, range) -> size_t + + + Retrieve try block information from the specified address range. Try + blocks are sorted by starting address and their nest levels + calculated. + + @param tbv: output buffer; may be NULL (C++: tryblks_t *) + @param range: address range to change (C++: const range_t &) + @return: number of found try blocks + +Help on class seh_t in module ida_tryblks: + +class seh_t(try_handler_t) + | Proxy of C++ seh_t class. + | + | Method resolution order: + | seh_t + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> seh_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | filter + | seh_t_filter_get(self) -> rangevec_t + | + | seh_code + | seh_t_seh_code_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_seh_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from try_handler_t: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class try_handler_t in module ida_tryblks: + +class try_handler_t(ida_range.rangevec_t) + | Proxy of C++ try_handler_t class. + | + | Method resolution order: + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> try_handler_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_try_handler_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class tryblk_t in module ida_tryblks: + +class tryblk_t(ida_range.rangevec_t) + | Proxy of C++ tryblk_t class. + | + | Method resolution order: + | tryblk_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tryblk_t + | __init__(self, r) -> tryblk_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | cpp(self, *args) + | cpp(self) -> catchvec_t + | + | empty(self, *args) + | empty(self) -> bool + | + | get_kind(self, *args) + | get_kind(self) -> uchar + | + | is_cpp(self, *args) + | is_cpp(self) -> bool + | + | is_seh(self, *args) + | is_seh(self) -> bool + | + | seh(self, *args) + | seh(self) -> seh_t + | + | set_cpp(self, *args) + | set_cpp(self) -> catchvec_t + | + | set_seh(self, *args) + | set_seh(self) -> seh_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | level + | tryblk_t_level_get(self) -> uchar + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tryblk_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class tryblks_t in module ida_tryblks: + +class tryblks_t(__builtin__.object) + | Proxy of C++ qvector< tryblk_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> tryblk_t + | + | __init__(self, *args) + | __init__(self) -> tryblks_t + | __init__(self, x) -> tryblks_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> tryblk_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> tryblk_t + | begin(self) -> tryblk_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> tryblk_t + | end(self) -> tryblk_t + | + | erase(self, *args) + | erase(self, it) -> tryblk_t + | erase(self, first, last) -> tryblk_t + | + | extract(self, *args) + | extract(self) -> tryblk_t + | + | find(self, *args) + | find(self, x) -> tryblk_t + | find(self, x) -> tryblk_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=tryblk_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> tryblk_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> tryblk_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tryblks_t(self) + +=== ida_tryblks EPYDOC INJECTIONS === +ida_tryblks.TBERR_EMPTY +""" +empty try block +""" + +ida_tryblks.TBERR_END +""" +bad end address +""" + +ida_tryblks.TBERR_INTERSECT +""" +range would intersect inner tryblk +""" + +ida_tryblks.TBERR_KIND +""" +illegal try block kind +""" + +ida_tryblks.TBERR_NO_CATCHES +""" +no catch blocks at all +""" + +ida_tryblks.TBERR_OK +""" +ok +""" + +ida_tryblks.TBERR_ORDER +""" +bad address order +""" + +ida_tryblks.TBERR_START +""" +bad start address +""" +=== ida_tryblks EPYDOC INJECTIONS END === +Help on function add_til in module ida_typeinf: + +add_til(*args) + add_til(name, flags) -> int + + + Load a til file. + + @param name: til name (C++: const char *) + @param flags: combination of Load TIL flags (C++: int) + @return: one of Load TIL result codes + +Help on function alloc_type_ordinal in module ida_typeinf: + +alloc_type_ordinal(*args) + alloc_type_ordinal(ti) -> uint32 + + + \call2{alloc_type_ordinals,ti,1} + + + @param ti (C++: til_t *) + +Help on function alloc_type_ordinals in module ida_typeinf: + +alloc_type_ordinals(*args) + alloc_type_ordinals(ti, qty) -> uint32 + + + Allocate a range of ordinal numbers for new types. + + @param ti: type library (C++: til_t *) + @param qty: number of ordinals to allocate (C++: int) + @return: the first ordinal. 0 means failure. + +Help on class aloc_visitor_t in module ida_typeinf: + +class aloc_visitor_t(__builtin__.object) + | Proxy of C++ aloc_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> aloc_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_location(self, *args) + | visit_location(self, v, off, size) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_aloc_visitor_t(self) + +Help on function append_abi_opts in module ida_typeinf: + +append_abi_opts(*args) + append_abi_opts(abi_opts, user_level=False) -> bool + + + Add/remove/check ABI option General form of full abi name: abiname- + opt1-opt2-... or -opt1-opt2-... + + @param abi_opts: - ABI options to add/remove in form opt1-opt2-... + (C++: const char *) + @param user_level: - initiated by user if TRUE (==SETCOMP_BY_USER) + (C++: bool) + @return: success + +Help on function append_argloc in module ida_typeinf: + +append_argloc(*args) + append_argloc(out, vloc) -> bool + + + Serialize argument location. + + + @param out (C++: qtype *) + @param vloc (C++: const argloc_t &) + +Help on function append_tinfo_covered in module ida_typeinf: + +append_tinfo_covered(*args) + append_tinfo_covered(out, typid, offset) -> bool + +Help on function apply_callee_tinfo in module ida_typeinf: + +apply_callee_tinfo(*args) + apply_callee_tinfo(caller, tif) -> bool + + + Apply the type of the called function to the calling instruction. This + function will append parameter comments and rename the local variables + of the calling function. It also stores information about the + instructions that initialize call arguments in the database. Use + 'get_arg_addrs()' to retrieve it if necessary. Alternatively it is + possible to hook to processor_t::arg_addrs_ready event. + + @param caller: linear address of the calling instruction. must belong + to a function. (C++: ea_t) + @param tif: type info (C++: const tinfo_t &) + @return: success + +Help on function apply_cdecl in module ida_typeinf: + +apply_cdecl(*args) + apply_cdecl(til, ea, decl, flags=0) -> bool + + + Apply the specified type to the address. This function parses the + declaration and calls 'apply_tinfo()' + + @param til: type library (C++: til_t *) + @param ea: linear address (C++: ea_t) + @param decl: type declaration in C form (C++: const char *) + @param flags: flags to pass to apply_tinfo ( TINFO_DEFINITE is always + passed) (C++: int) + @return: success + +Help on function apply_named_type in module ida_typeinf: + +apply_named_type(*args) + apply_named_type(ea, name) -> bool + + + Apply the specified named type to the address. + + @param ea: linear address (C++: ea_t) + @param name: the type name, e.g. "FILE" (C++: const char *) + @return: success + +Help on function apply_once_tinfo_and_name in module ida_typeinf: + +apply_once_tinfo_and_name(*args) + apply_once_tinfo_and_name(dea, tif, name) -> bool + + + Apply the specified type and name to the address. This function checks + if the address already has a type. If the old typedoes not exist or + the new type is 'better' than the old type, then thenew type will be + applied. A type is considered better if it has moreinformation (e.g. + 'BTMT_STRUCT' is better than 'BT_INT' ).The same logic is with the + name: if the address already have a meaningfulname, it will be + preserved. Only if the old name does not exist or itis a dummy name + like byte_123, it will be replaced by the new name. + + @param dea: linear address (C++: ea_t) + @param tif: type string in the internal format (C++: const tinfo_t + &) + @param name: new name for the address (C++: const char *) + @return: success + +Help on function apply_tinfo in module ida_typeinf: + +apply_tinfo(*args) + apply_tinfo(ea, tif, flags) -> bool + + + Apply the specified type to the specified address. This function sets + the type and tries to convert the item at the specified address to + conform the type. + + @param ea: linear address (C++: ea_t) + @param tif: type string in internal format (C++: const tinfo_t &) + @param flags: combination of Apply tinfo flags (C++: uint32) + @return: success + +Help on function apply_tinfo_to_stkarg in module ida_typeinf: + +apply_tinfo_to_stkarg(*args) + apply_tinfo_to_stkarg(insn, x, v, tif, name) -> bool + + + Helper function for the processor modules. to be called from + \ph{use_stkarg_type} + + @param insn (C++: const insn_t &) + @param x (C++: const op_t &) + @param v (C++: uval_t) + @param tif (C++: const tinfo_t &) + @param name (C++: const char *) + +Help on function apply_type in module ida_typeinf: + +apply_type(*args) + apply_type(ti, _type, _fields, ea, flags) -> bool + + + Apply the specified type to the address + @param ti: Type info library. 'None' can be used. + @param py_type: type string + @param py_fields: fields string (may be empty or None) + @param ea: the address of the object + @param flags: combination of TINFO_... constants or 0 + @return: Boolean + +Help on class argloc_t in module ida_typeinf: + +class argloc_t(__builtin__.object) + | Proxy of C++ argloc_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> argloc_t + | __init__(self, r) -> argloc_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _consume_rrel(self, *args) + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) + | _set_badloc(self) + | + | _set_biggest(self, *args) + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) + | _set_ea(self, _ea) + | + | _set_reg1(self, *args) + | _set_reg1(self, reg, off=0) + | + | _set_reg2(self, *args) + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) + | _set_stkoff(self, off) + | + | advance(self, *args) + | advance(self, delta) -> bool + | + | atype(self, *args) + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) + | calc_offset(self) -> sval_t + | + | compare(self, *args) + | compare(self, r) -> int + | + | consume_rrel(self, *args) + | consume_rrel(self, p) + | + | consume_scattered(self, *args) + | consume_scattered(self, p) + | + | get_biggest(self, *args) + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) + | get_custom(self) -> void * + | + | get_ea(self, *args) + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) + | has_reg(self) -> bool + | + | has_stkoff(self, *args) + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) + | is_badloc(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_ea(self, *args) + | is_ea(self) -> bool + | + | is_fragmented(self, *args) + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_rrel(self, *args) + | is_rrel(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) + | justify_stkoff_right(self, size, _slotsize) + | + | reg1(self, *args) + | reg1(self) -> int + | + | reg2(self, *args) + | reg2(self) -> int + | + | regoff(self, *args) + | regoff(self) -> int + | + | scattered(self, *args) + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) + | set_badloc(self) + | + | set_ea(self, *args) + | set_ea(self, _ea) + | + | set_reg1(self, *args) + | set_reg1(self, reg, off=0) + | + | set_reg2(self, *args) + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) + | set_stkoff(self, off) + | + | stkoff(self, *args) + | stkoff(self) -> sval_t + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_argloc_t(self) + +Help on class argpart_t in module ida_typeinf: + +class argpart_t(argloc_t) + | Proxy of C++ argpart_t class. + | + | Method resolution order: + | argpart_t + | argloc_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, a) -> argpart_t + | __init__(self) -> argpart_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | bad_offset(self, *args) + | bad_offset(self) -> bool + | + | bad_size(self, *args) + | bad_size(self) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | off + | argpart_t_off_get(self) -> ushort + | + | size + | argpart_t_size_get(self) -> ushort + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_argpart_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from argloc_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _consume_rrel(self, *args) + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) + | _set_badloc(self) + | + | _set_biggest(self, *args) + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) + | _set_ea(self, _ea) + | + | _set_reg1(self, *args) + | _set_reg1(self, reg, off=0) + | + | _set_reg2(self, *args) + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) + | _set_stkoff(self, off) + | + | advance(self, *args) + | advance(self, delta) -> bool + | + | atype(self, *args) + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) + | calc_offset(self) -> sval_t + | + | compare(self, *args) + | compare(self, r) -> int + | + | consume_rrel(self, *args) + | consume_rrel(self, p) + | + | consume_scattered(self, *args) + | consume_scattered(self, p) + | + | get_biggest(self, *args) + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) + | get_custom(self) -> void * + | + | get_ea(self, *args) + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) + | has_reg(self) -> bool + | + | has_stkoff(self, *args) + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) + | is_badloc(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_ea(self, *args) + | is_ea(self) -> bool + | + | is_fragmented(self, *args) + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_rrel(self, *args) + | is_rrel(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) + | justify_stkoff_right(self, size, _slotsize) + | + | reg1(self, *args) + | reg1(self) -> int + | + | reg2(self, *args) + | reg2(self) -> int + | + | regoff(self, *args) + | regoff(self) -> int + | + | scattered(self, *args) + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) + | set_badloc(self) + | + | set_ea(self, *args) + | set_ea(self, _ea) + | + | set_reg1(self, *args) + | set_reg1(self, reg, off=0) + | + | set_reg2(self, *args) + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) + | set_stkoff(self, off) + | + | stkoff(self, *args) + | stkoff(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class argpartvec_t in module ida_typeinf: + +class argpartvec_t(__builtin__.object) + | Proxy of C++ qvector< argpart_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> argpart_t + | + | __init__(self, *args) + | __init__(self) -> argpartvec_t + | __init__(self, x) -> argpartvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> argpart_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> argpart_t + | begin(self) -> argpart_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> argpart_t + | end(self) -> argpart_t + | + | erase(self, *args) + | erase(self, it) -> argpart_t + | erase(self, first, last) -> argpart_t + | + | extract(self, *args) + | extract(self) -> argpart_t + | + | find(self, *args) + | find(self, x) -> argpart_t + | find(self, x) -> argpart_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=argpart_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> argpart_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> argpart_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_argpartvec_t(self) + +Help on class array_type_data_t in module ida_typeinf: + +class array_type_data_t(__builtin__.object) + | Proxy of C++ array_type_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, b=0, n=0) -> array_type_data_t + | + | __repr__ = _swig_repr(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | array_type_data_t_base_get(self) -> uint32 + | + | elem_type + | array_type_data_t_elem_type_get(self) -> tinfo_t + | + | nelems + | array_type_data_t_nelems_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_array_type_data_t(self) + +Help on function begin_type_updating in module ida_typeinf: + +begin_type_updating(*args) + begin_type_updating(utp) + + + Mark the beginning of a large update operation on the types. Can be + used with 'add_enum_member()' , add_struc_member, etc... Also see + 'end_type_updating()' + + @param utp (C++: update_type_t) + +Help on class bitfield_type_data_t in module ida_typeinf: + +class bitfield_type_data_t(__builtin__.object) + | Proxy of C++ bitfield_type_data_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _nbytes=0, _width=0, _is_unsigned=False) -> bitfield_type_data_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | is_unsigned + | bitfield_type_data_t_is_unsigned_get(self) -> bool + | + | nbytes + | bitfield_type_data_t_nbytes_get(self) -> uchar + | + | thisown + | The membership flag + | + | width + | bitfield_type_data_t_width_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bitfield_type_data_t(self) + +Help on function calc_c_cpp_name in module ida_typeinf: + +calc_c_cpp_name(*args) + calc_c_cpp_name(name, type, ccn_flags) -> str + + + Get C or C++ form of the name. + + @param name: original (mangled or decorated) name (C++: const char *) + @param type: name type if known, otherwise NULL (C++: const tinfo_t + *) + @param ccn_flags: one of C/C++ naming flags (C++: int) + +Help on function calc_number_of_children in module ida_typeinf: + +calc_number_of_children(*args) + calc_number_of_children(loc, tif, dont_deref_ptr=False) -> int + + + Calculate max number of lines of a formatted c data, when expanded ( + 'PTV_EXPAND' ). + + @param loc: location of the data ( ALOC_STATIC or ALOC_CUSTOM ) + (C++: const argloc_t &) + @param tif: type info (C++: const tinfo_t &) + @param dont_deref_ptr: consider 'ea' as the ptr value (C++: bool) + +Help on function calc_tinfo_gaps in module ida_typeinf: + +calc_tinfo_gaps(*args) + calc_tinfo_gaps(out, typid) -> bool + +Help on function calc_type_size in module ida_typeinf: + +calc_type_size(*args) + calc_type_size(ti, tp) -> PyObject * + + + Returns the size of a type + @param ti: Type info. 'None' can be passed. + @param tp: type string + @return: + - None on failure + - The size of the type + +Help on class callregs_t in module ida_typeinf: + +class callregs_t(__builtin__.object) + | Proxy of C++ callregs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> callregs_t + | __init__(self, cc) -> callregs_t + | + | __repr__ = _swig_repr(self) + | + | init_regs(self, *args) + | init_regs(self, cc) + | + | reginds(self, *args) + | reginds(self, gp_ind, fp_ind, r) -> bool + | + | reset(self, *args) + | reset(self) + | + | set(self, *args) + | set(self, _policy, gprs, fprs) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | regcount(*args) + | regcount(cc) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fpregs + | callregs_t_fpregs_get(self) -> intvec_t * + | + | gpregs + | callregs_t_gpregs_get(self) -> intvec_t * + | + | nregs + | callregs_t_nregs_get(self) -> int + | + | policy + | callregs_t_policy_get(self) -> argreg_policy_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_callregs_t(self) + +Help on function callregs_t_regcount in module ida_typeinf: + +callregs_t_regcount(*args) + callregs_t_regcount(cc) -> int + +Help on function choose_local_tinfo in module ida_typeinf: + +choose_local_tinfo(*args) + choose_local_tinfo(ti, title, func=None, def_ord=0, ud=None) -> uint32 + + + Choose a type from the local type library. + + @param ti: pointer to til (C++: const til_t *) + @param title: title of listbox to display (C++: const char *) + @param func: predicate to select types to display (maybe NULL) (C++: + local_tinfo_predicate_t *) + @param def_ord: ordinal to position cursor before choose (C++: uint32) + @param ud: user data (C++: void *) + @return: == 0 means nothing is chosen, otherwise an ordinal number + +Help on function choose_local_tinfo_and_delta in module ida_typeinf: + +choose_local_tinfo_and_delta(*args) + choose_local_tinfo_and_delta(delta, ti, title, func=None, def_ord=0, ud=None) -> uint32 + + + Choose a type from the local type library and specify the pointer + shift value. + + @param delta: pointer shift value (C++: int32 *) + @param ti: pointer to til (C++: const til_t *) + @param title: title of listbox to display (C++: const char *) + @param func: predicate to select types to display (maybe NULL) (C++: + local_tinfo_predicate_t *) + @param def_ord: ordinal to position cursor before choose (C++: uint32) + @param ud: user data (C++: void *) + @return: == 0 means nothing is chosen, otherwise an ordinal number + +Help on function choose_named_type in module ida_typeinf: + +choose_named_type(*args) + choose_named_type(out_sym, root_til, title, ntf_flags, predicate=None) -> bool + + + Choose a type from a type library. + + @param out_sym: pointer to be filled with the chosen type (C++: + til_symbol_t *) + @param root_til: pointer to starting til (the function will inspect + the base tils if allowed by flags) (C++: const til_t + *) + @param title: title of listbox to display (C++: const char *) + @param ntf_flags: combination of Flags for named types (C++: int) + @param predicate: predicate to select types to display (maybe NULL) + (C++: predicate_t *) + @return: false if nothing is chosen, otherwise true + +Help on function clear_tinfo_t in module ida_typeinf: + +clear_tinfo_t(*args) + clear_tinfo_t(_this) + +Help on function compact_til in module ida_typeinf: + +compact_til(*args) + compact_til(ti) -> bool + + + Collect garbage in til. Must be called before storing the til. + + @param ti (C++: til_t *) + @return: true if any memory was freed + +Help on function compare_tinfo in module ida_typeinf: + +compare_tinfo(*args) + compare_tinfo(t1, t2, tcflags) -> bool + +Help on class const_aloc_visitor_t in module ida_typeinf: + +class const_aloc_visitor_t(__builtin__.object) + | Proxy of C++ const_aloc_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> const_aloc_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_location(self, *args) + | visit_location(self, v, off, size) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_const_aloc_visitor_t(self) + +Help on function convert_pt_flags_to_hti in module ida_typeinf: + +convert_pt_flags_to_hti(*args) + convert_pt_flags_to_hti(pt_flags) -> int + + + Convert 'Type parsing flags' to 'Type formatting flags' . Type parsing + flags lesser than 0x10 don't have stable meaning and will be ignored + (more on these flags can be seen in idc.idc) + + @param pt_flags (C++: int) + +Help on function copy_named_type in module ida_typeinf: + +copy_named_type(*args) + copy_named_type(dsttil, srctil, name) -> uint32 + + + Copy a named type from one til to another. This function will copy the + specified type and all dependent types from the source type library to + the destination library. + + @param dsttil: Destination til. It must have orginal types enabled + (C++: til_t *) + @param srctil: Source til. (C++: const til_t *) + @param name: name of the type to copy (C++: const char *) + @return: ordinal number of the copied type. 0 means error + +Help on function copy_tinfo_t in module ida_typeinf: + +copy_tinfo_t(*args) + copy_tinfo_t(_this, r) + +Help on function create_numbered_type_name in module ida_typeinf: + +create_numbered_type_name(*args) + create_numbered_type_name(ord) -> str + + + Create anonymous name for numbered type. This name can be used to + reference a numbered type by its ordinal Ordinal names have the + following format: '#' + set_de(ord) Returns: -1 if error, otherwise + the name length + + @param ord (C++: int32) + +Help on function create_tinfo in module ida_typeinf: + +create_tinfo(*args) + create_tinfo(_this, bt, bt2, ptr) -> bool + +Help on function default_compiler in module ida_typeinf: + +default_compiler(*args) + default_compiler() -> comp_t + + + Get compiler specified by \varmem{inf,idainfo,cc}. + +Help on function del_named_type in module ida_typeinf: + +del_named_type(*args) + del_named_type(ti, name, ntf_flags) -> bool + + + Delete information about a symbol. + + @param ti: type library (C++: til_t *) + @param name: name of symbol (C++: const char *) + @param ntf_flags: combination of Flags for named types (C++: int) + @return: success + +Help on function del_numbered_type in module ida_typeinf: + +del_numbered_type(*args) + del_numbered_type(ti, ordinal) -> bool + + + Delete a numbered type. + + + @param ti (C++: til_t *) + @param ordinal (C++: uint32) + +Help on function del_til in module ida_typeinf: + +del_til(*args) + del_til(name) -> bool + + + Unload a til file. + + + @param name (C++: const char *) + +Help on function del_tinfo_attr in module ida_typeinf: + +del_tinfo_attr(*args) + del_tinfo_attr(tif, key, make_copy) -> bool + +Help on function deref_ptr in module ida_typeinf: + +deref_ptr(*args) + deref_ptr(ptr_ea, tif, closure_obj=None) -> bool + + + Dereference a pointer. + + @param ptr_ea: in/out parameter in: address of the pointer out: + the pointed address (C++: ea_t *) + @param tif: type of the pointer (C++: const tinfo_t &) + @param closure_obj: closure object (not used yet) (C++: ea_t *) + @return: success + +Help on function deserialize_tinfo in module ida_typeinf: + +deserialize_tinfo(*args) + deserialize_tinfo(tif, til, ptype, pfields, pfldcmts) -> bool + +Help on function dstr_tinfo in module ida_typeinf: + +dstr_tinfo(*args) + dstr_tinfo(tif) -> char const * + +Help on function dump_func_type_data in module ida_typeinf: + +dump_func_type_data(*args) + dump_func_type_data(fti, praloc_bits) -> str + + + Use 'func_type_data_t::dump()' + + + @param fti (C++: const func_type_data_t &) + @param praloc_bits (C++: int) + +Help on function end_type_updating in module ida_typeinf: + +end_type_updating(*args) + end_type_updating(utp) + + + Mark the end of a large update operation on the types (see + 'begin_type_updating()' ) + + + @param utp (C++: update_type_t) + +Help on class enum_member_t in module ida_typeinf: + +class enum_member_t(__builtin__.object) + | Proxy of C++ enum_member_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> enum_member_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | enum_member_t_cmt_get(self) -> qstring * + | + | name + | enum_member_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | enum_member_t_value_get(self) -> uint64 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enum_member_t(self) + +Help on class enum_member_vec_t in module ida_typeinf: + +class enum_member_vec_t(__builtin__.object) + | Proxy of C++ qvector< enum_member_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> enum_member_t + | + | __init__(self, *args) + | __init__(self) -> enum_member_vec_t + | __init__(self, x) -> enum_member_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> enum_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> enum_member_t + | begin(self) -> enum_member_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> enum_member_t + | end(self) -> enum_member_t + | + | erase(self, *args) + | erase(self, it) -> enum_member_t + | erase(self, first, last) -> enum_member_t + | + | extract(self, *args) + | extract(self) -> enum_member_t + | + | find(self, *args) + | find(self, x) -> enum_member_t + | find(self, x) -> enum_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=enum_member_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> enum_member_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> enum_member_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enum_member_vec_t(self) + +Help on class enum_type_data_t in module ida_typeinf: + +class enum_type_data_t(enum_member_vec_t) + | Proxy of C++ enum_type_data_t class. + | + | Method resolution order: + | enum_type_data_t + | enum_member_vec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _bte=BTE_ALWAYS|BTE_HEX) -> enum_type_data_t + | + | __repr__ = _swig_repr(self) + | + | calc_mask(self, *args) + | calc_mask(self) -> uint64 + | + | calc_nbytes(self, *args) + | calc_nbytes(self) -> int + | + | is_64bit(self, *args) + | is_64bit(self) -> bool + | + | is_char(self, *args) + | is_char(self) -> bool + | + | is_hex(self, *args) + | is_hex(self) -> bool + | + | is_sdec(self, *args) + | is_sdec(self) -> bool + | + | is_udec(self, *args) + | is_udec(self) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bte + | enum_type_data_t_bte_get(self) -> bte_t + | + | group_sizes + | enum_type_data_t_group_sizes_get(self) -> intvec_t * + | + | taenum_bits + | enum_type_data_t_taenum_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enum_type_data_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from enum_member_vec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> enum_member_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> enum_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> enum_member_t + | begin(self) -> enum_member_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> enum_member_t + | end(self) -> enum_member_t + | + | erase(self, *args) + | erase(self, it) -> enum_member_t + | erase(self, first, last) -> enum_member_t + | + | extract(self, *args) + | extract(self) -> enum_member_t + | + | find(self, *args) + | find(self, x) -> enum_member_t + | find(self, x) -> enum_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=enum_member_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> enum_member_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> enum_member_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from enum_member_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function extract_argloc in module ida_typeinf: + +extract_argloc(*args) + extract_argloc(vloc, ptype, is_retval) -> bool + + + Deserialize argument location. + + + @param vloc (C++: argloc_t *) + @param ptype (C++: const type_t **) + @param is_retval (C++: bool) + +Help on function find_tinfo_udt_member in module ida_typeinf: + +find_tinfo_udt_member(*args) + find_tinfo_udt_member(udm, typid, strmem_flags) -> int + +Help on function first_named_type in module ida_typeinf: + +first_named_type(*args) + first_named_type(ti, ntf_flags) -> char const * + + + Enumerate types. Returns mangled names. Never returns anonymous types. + To include it, enumerate types by ordinals. + + @param ti (C++: const til_t *) + @param ntf_flags (C++: int) + +Help on function for_all_arglocs in module ida_typeinf: + +for_all_arglocs(*args) + for_all_arglocs(vv, vloc, size, off=0) -> int + + + Compress larger argloc types and initiate the aloc visitor. + + + @param vv (C++: aloc_visitor_t &) + @param vloc (C++: argloc_t &) + @param size (C++: int) + @param off (C++: int) + +Help on function for_all_const_arglocs in module ida_typeinf: + +for_all_const_arglocs(*args) + for_all_const_arglocs(vv, vloc, size, off=0) -> int + + + See 'for_all_arglocs()' + + + @param vv (C++: const_aloc_visitor_t &) + @param vloc (C++: const argloc_t &) + @param size (C++: int) + @param off (C++: int) + +Help on function free_til in module ida_typeinf: + +free_til(*args) + free_til(ti) + + + Free memory allocated by til. + + + @param ti (C++: til_t *) + +Help on function func_has_stkframe_hole in module ida_typeinf: + +func_has_stkframe_hole(*args) + func_has_stkframe_hole(ea, fti) -> bool + + + Looks for a hole at the beginning of the stack arguments. Will make + use of the IDB's 'func_t' function at that place (if present) to help + determine the presence of such a hole. + + @param ea (C++: ea_t) + @param fti (C++: const func_type_data_t &) + +Help on class func_type_data_t in module ida_typeinf: + +class func_type_data_t(funcargvec_t) + | Proxy of C++ func_type_data_t class. + | + | Method resolution order: + | func_type_data_t + | funcargvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_type_data_t + | + | __repr__ = _swig_repr(self) + | + | dump(self, *args) + | dump(self, praloc_bits=0x02) -> bool + | + | get_call_method(self, *args) + | get_call_method(self) -> int + | + | guess_cc(self, *args) + | guess_cc(self, purged, cc_flags) -> cm_t + | + | is_high(self, *args) + | is_high(self) -> bool + | + | is_noret(self, *args) + | is_noret(self) -> bool + | + | is_pure(self, *args) + | is_pure(self) -> bool + | + | is_vararg_cc(self, *args) + | is_vararg_cc(self) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cc + | func_type_data_t_cc_get(self) -> cm_t + | + | flags + | func_type_data_t_flags_get(self) -> int + | + | retloc + | func_type_data_t_retloc_get(self) -> argloc_t + | + | rettype + | func_type_data_t_rettype_get(self) -> tinfo_t + | + | spoiled + | func_type_data_t_spoiled_get(self) -> reginfovec_t + | + | stkargs + | func_type_data_t_stkargs_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_type_data_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from funcargvec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> funcarg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> funcarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> funcarg_t + | begin(self) -> funcarg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> funcarg_t + | end(self) -> funcarg_t + | + | erase(self, *args) + | erase(self, it) -> funcarg_t + | erase(self, first, last) -> funcarg_t + | + | extract(self, *args) + | extract(self) -> funcarg_t + | + | find(self, *args) + | find(self, x) -> funcarg_t + | find(self, x) -> funcarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=funcarg_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> funcarg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> funcarg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from funcargvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class funcarg_t in module ida_typeinf: + +class funcarg_t(__builtin__.object) + | Proxy of C++ funcarg_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> funcarg_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argloc + | funcarg_t_argloc_get(self) -> argloc_t + | + | cmt + | funcarg_t_cmt_get(self) -> qstring * + | + | flags + | funcarg_t_flags_get(self) -> uint32 + | + | name + | funcarg_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | funcarg_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_funcarg_t(self) + +Help on class funcargvec_t in module ida_typeinf: + +class funcargvec_t(__builtin__.object) + | Proxy of C++ qvector< funcarg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> funcarg_t + | + | __init__(self, *args) + | __init__(self) -> funcargvec_t + | __init__(self, x) -> funcargvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> funcarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> funcarg_t + | begin(self) -> funcarg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> funcarg_t + | end(self) -> funcarg_t + | + | erase(self, *args) + | erase(self, it) -> funcarg_t + | erase(self, first, last) -> funcarg_t + | + | extract(self, *args) + | extract(self) -> funcarg_t + | + | find(self, *args) + | find(self, x) -> funcarg_t + | find(self, x) -> funcarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=funcarg_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> funcarg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> funcarg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_funcargvec_t(self) + +Help on function gcc_layout in module ida_typeinf: + +gcc_layout(*args) + gcc_layout() -> bool + + + Should use the struct/union layout as done by gcc? + +Help on function gen_decorate_name in module ida_typeinf: + +gen_decorate_name(*args) + gen_decorate_name(name, mangle, cc, type) -> str + + + Generic function for 'decorate_name()' (may be used in IDP modules) + + + @param name (C++: const char *) + @param mangle (C++: bool) + @param cc (C++: cm_t) + @param type (C++: const tinfo_t *) + +Help on function gen_use_arg_tinfos in module ida_typeinf: + +gen_use_arg_tinfos(*args) + gen_use_arg_tinfos(caller, fti, rargs, set_optype, is_stkarg_load, has_delay_slot) + + + The main function using these callbacks: + + + @param caller (C++: ea_t) + @param fti (C++: func_type_data_t *) + @param rargs (C++: funcargvec_t *) + @param set_optype (C++: set_op_tinfo_t *) + @param is_stkarg_load (C++: is_stkarg_load_t *) + @param has_delay_slot (C++: has_delay_slot_t *) + +Help on function get_abi_name in module ida_typeinf: + +get_abi_name(*args) + get_abi_name() -> str + + + Get ABI name. + + @return: length of the name (>=0) + +Help on function get_alias_target in module ida_typeinf: + +get_alias_target(*args) + get_alias_target(ti, ordinal) -> uint32 + + + Find the final alias destination. If the ordinal has not been aliased, + return the specified ordinal itself If failed, returns 0. + + @param ti (C++: const til_t *) + @param ordinal (C++: uint32) + +Help on function get_arg_addrs in module ida_typeinf: + +get_arg_addrs(*args) + get_arg_addrs(caller) -> PyObject * + + + Retrieve addresses of argument initialization instructions + + @param caller: the address of the call instruction + @return: list of instruction addresses + +Help on function get_base_type in module ida_typeinf: + +get_base_type(*args) + get_base_type(t) -> type_t + + + Get get basic type bits ( 'TYPE_BASE_MASK' ) + + + @param t (C++: type_t) + +Help on function get_c_header_path in module ida_typeinf: + +get_c_header_path(*args) + get_c_header_path() -> str + + + Get the include directory path of the target compiler. + +Help on function get_c_macros in module ida_typeinf: + +get_c_macros(*args) + get_c_macros() -> str + + + Get predefined macros for the target compiler. + +Help on function get_comp in module ida_typeinf: + +get_comp(*args) + get_comp(comp) -> comp_t + + + Get compiler bits. + + + @param comp (C++: comp_t) + +Help on function get_compiler_abbr in module ida_typeinf: + +get_compiler_abbr(*args) + get_compiler_abbr(id) -> char const * + + + Get abbreviated compiler name. + + + @param id (C++: comp_t) + +Help on function get_compiler_name in module ida_typeinf: + +get_compiler_name(*args) + get_compiler_name(id) -> char const * + + + Get full compiler name. + + + @param id (C++: comp_t) + +Help on function get_compilers in module ida_typeinf: + +get_compilers(*args) + get_compilers(ids, names, abbrs) + + + Get names of all built-in compilers. + + + @param ids (C++: compvec_t *) + @param names (C++: qstrvec_t *) + @param abbrs (C++: qstrvec_t *) + +Help on function get_enum_member_expr in module ida_typeinf: + +get_enum_member_expr(*args) + get_enum_member_expr(tif, serial, value) -> str + + + Return a C expression that can be used to represent an enum member. If + the value does not correspond to any single enum member, this function + tries to find a bitwise combination of enum members that correspond to + it. If more than half of value bits do not match any enum members, it + fails. + + @param tif: enumeration type (C++: const tinfo_t &) + @param serial: which enumeration member to use (0 means the first with + the given value) (C++: int) + @param value: value to search in the enumeration type. only 32-bit + number can be handled yet (C++: uint64) + @return: success + +Help on function get_full_type in module ida_typeinf: + +get_full_type(*args) + get_full_type(t) -> type_t + + + Get basic type bits + type flags ( 'TYPE_FULL_MASK' ) + + + @param t (C++: type_t) + +Help on function get_idainfo_by_type in module ida_typeinf: + +get_idainfo_by_type(*args) + get_idainfo_by_type(tif) -> bool + + + Extract information from a 'tinfo_t' . + + @param tif: the type to inspect (C++: const tinfo_t &) + +Help on function get_idati in module ida_typeinf: + +get_idati(*args) + get_idati() -> til_t + + + Pointer to the local type library - this til is private for each IDB + file Function that accepts til_t* uses local type library instead of + NULL. + +Help on function get_named_type in module ida_typeinf: + +get_named_type(*args) + get_named_type(til, name, ntf_flags) -> PyObject * + + + Get a type data by its name. + @param til: the type library + @param name: the type name + @param ntf_flags: a combination of NTF_* constants + @return: + None on failure + tuple(code, type_str, fields_str, cmt, field_cmts, sclass, value) on success + +Help on function get_named_type64 in module ida_typeinf: + +get_named_type64(*args) + get_named_type64(til, name, ntf_flags) -> PyObject * + + + See 'get_named_type()' above.If the value in the 'ti' library is + 32-bit, it will be sign-extended before being stored in the 'value' + pointer. + + @param name (C++: const char *) + @param ntf_flags (C++: int) + +Help on function get_numbered_type in module ida_typeinf: + +get_numbered_type(*args) + get_numbered_type(til, ordinal) -> PyObject * + + + Retrieve a type by its ordinal number. + + + @param ordinal (C++: uint32) + +Help on function get_numbered_type_name in module ida_typeinf: + +get_numbered_type_name(*args) + get_numbered_type_name(ti, ordinal) -> char const * + + + Get type name (if exists) by its ordinal. If the type is anonymous, + returns "". If failed, returns NULL + + @param ti (C++: const til_t *) + @param ordinal (C++: uint32) + +Help on function get_ordinal_from_idb_type in module ida_typeinf: + +get_ordinal_from_idb_type(*args) + get_ordinal_from_idb_type(name, type) -> int + + + Get ordinal number of an idb type (struct/enum). The 'type' parameter + is used only to determine the kind of the type (struct or enum) Use + this function to find out the correspondence between idb types and til + types + + @param name (C++: const char *) + @param type (C++: const type_t *) + +Help on function get_ordinal_qty in module ida_typeinf: + +get_ordinal_qty(*args) + get_ordinal_qty(ti) -> uint32 + + + Get number of allocated ordinals. + + @param ti (C++: const til_t *) + @return: uint32(-1) if failed + +Help on function get_scalar_bt in module ida_typeinf: + +get_scalar_bt(*args) + get_scalar_bt(size) -> type_t + +Help on function get_stock_tinfo in module ida_typeinf: + +get_stock_tinfo(*args) + get_stock_tinfo(tif, id) -> bool + +Help on function get_tinfo_attr in module ida_typeinf: + +get_tinfo_attr(*args) + get_tinfo_attr(typid, key, bv, all_attrs) -> bool + +Help on function get_tinfo_attrs in module ida_typeinf: + +get_tinfo_attrs(*args) + get_tinfo_attrs(typid, tav, include_ref_attrs) -> bool + +Help on function get_tinfo_details in module ida_typeinf: + +get_tinfo_details(*args) + get_tinfo_details(typid, bt2, buf) -> bool + +Help on function get_tinfo_pdata in module ida_typeinf: + +get_tinfo_pdata(*args) + get_tinfo_pdata(outptr, typid, what) -> size_t + +Help on function get_tinfo_property in module ida_typeinf: + +get_tinfo_property(*args) + get_tinfo_property(typid, gta_prop) -> size_t + +Help on function get_tinfo_size in module ida_typeinf: + +get_tinfo_size(*args) + get_tinfo_size(p_effalign, typid, gts_code) -> size_t + +Help on function get_type_flags in module ida_typeinf: + +get_type_flags(*args) + get_type_flags(t) -> type_t + + + Get type flags ( 'TYPE_FLAGS_MASK' ) + + + @param t (C++: type_t) + +Help on function get_type_ordinal in module ida_typeinf: + +get_type_ordinal(*args) + get_type_ordinal(ti, name) -> int32 + + + Get type ordinal by its name. + + + @param ti (C++: const til_t *) + @param name (C++: const char *) + +Help on function guess_func_cc in module ida_typeinf: + +guess_func_cc(*args) + guess_func_cc(fti, npurged, cc_flags) -> cm_t + + + Use 'func_type_data_t::guess_cc()' + + + @param fti (C++: const func_type_data_t &) + @param npurged (C++: int) + @param cc_flags (C++: int) + +Help on function guess_tinfo in module ida_typeinf: + +guess_tinfo(*args) + guess_tinfo(tif, id) -> int + + + Generate a type information about the id from the disassembly. id can + be a structure/union/enum id or an address. + + @param tif (C++: tinfo_t *) + @param id (C++: tid_t) + @return: one of Guess tinfo codes + +Help on class ida_lowertype_helper_t in module ida_typeinf: + +class ida_lowertype_helper_t(lowertype_helper_t) + | Proxy of C++ ida_lowertype_helper_t class. + | + | Method resolution order: + | ida_lowertype_helper_t + | lowertype_helper_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _tif, _ea, _pb) -> ida_lowertype_helper_t + | + | __repr__ = _swig_repr(self) + | + | func_has_stkframe_hole(self, *args) + | func_has_stkframe_hole(self, candidate, candidate_data) -> bool + | + | get_func_purged_bytes(self, *args) + | get_func_purged_bytes(self, candidate, arg3) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ida_lowertype_helper_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from lowertype_helper_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function idc_get_local_type in module ida_typeinf: + +idc_get_local_type(*args) + idc_get_local_type(ordinal, flags, buf, maxsize) -> int + +Help on function idc_get_local_type_name in module ida_typeinf: + +idc_get_local_type_name(*args) + idc_get_local_type_name(ordinal) -> str + +Help on function idc_get_local_type_raw in module ida_typeinf: + +idc_get_local_type_raw(*args) + idc_get_local_type_raw(ordinal) -> PyObject * + +Help on function idc_get_type in module ida_typeinf: + +idc_get_type(*args) + idc_get_type(ea) -> str + +Help on function idc_get_type_raw in module ida_typeinf: + +idc_get_type_raw(*args) + idc_get_type_raw(ea) -> PyObject * + +Help on function idc_guess_type in module ida_typeinf: + +idc_guess_type(*args) + idc_guess_type(ea) -> str + +Help on function idc_parse_decl in module ida_typeinf: + +idc_parse_decl(*args) + idc_parse_decl(ti, decl, flags) -> PyObject * + +Help on function idc_parse_types in module ida_typeinf: + +idc_parse_types(*args) + idc_parse_types(input, flags) -> int + +Help on function idc_print_type in module ida_typeinf: + +idc_print_type(*args) + idc_print_type(_type, _fields, name, flags) -> PyObject * + +Help on function idc_set_local_type in module ida_typeinf: + +idc_set_local_type(*args) + idc_set_local_type(ordinal, dcl, flags) -> int + +Help on function import_type in module ida_typeinf: + +import_type(*args) + import_type(til, idx, name, flags=0) -> tid_t + + + Copy a named type from til to idb. + + @param til: type library (C++: const til_t *) + @param idx: the position of the new type in the list of types + (structures or enums). -1 means at the end of the list + (C++: int) + @param name: the type name (C++: const char *) + @param flags: combination of Import type flags (C++: int) + @return: BADNODE on error + +Help on function is_autosync in module ida_typeinf: + +is_autosync(*args) + is_autosync(name, type) -> bool + is_autosync(name, tif) -> bool + + + Is the specified idb type automatically synchronized? + + + @param name (C++: const char *) + @param type (C++: const type_t *) + +Help on function is_code_far in module ida_typeinf: + +is_code_far(*args) + is_code_far(cm) -> bool + + + Does the given model specify far code?. + + + @param cm (C++: cm_t) + +Help on function is_comp_unsure in module ida_typeinf: + +is_comp_unsure(*args) + is_comp_unsure(comp) -> comp_t + + + See 'COMP_UNSURE' . + + + @param comp (C++: comp_t) + +Help on function is_data_far in module ida_typeinf: + +is_data_far(*args) + is_data_far(cm) -> bool + + + Does the given model specify far data?. + + + @param cm (C++: cm_t) + +Help on function is_gcc in module ida_typeinf: + +is_gcc(*args) + is_gcc() -> bool + + + Is the target compiler 'COMP_GNU' ? + +Help on function is_gcc32 in module ida_typeinf: + +is_gcc32(*args) + is_gcc32() -> bool + + + Is the target compiler 32 bit gcc? + +Help on function is_gcc64 in module ida_typeinf: + +is_gcc64(*args) + is_gcc64() -> bool + + + Is the target compiler 64 bit gcc? + +Help on function is_ordinal_name in module ida_typeinf: + +is_ordinal_name(*args) + is_ordinal_name(name, ord=None) -> bool + + + Check if the name is an ordinal name. Ordinal names have the following + format: '#' + set_de(ord) + + @param name (C++: const char *) + @param ord (C++: uint32 *) + +Help on function is_purging_cc in module ida_typeinf: + +is_purging_cc(*args) + is_purging_cc(cm) -> bool + + + Does the calling convention clean the stack arguments upon + return?.this function is valid only for x86 code + + @param cm (C++: cm_t) + +Help on function is_restype_enum in module ida_typeinf: + +is_restype_enum(*args) + is_restype_enum(til, type) -> bool + +Help on function is_restype_struct in module ida_typeinf: + +is_restype_struct(*args) + is_restype_struct(til, type) -> bool + +Help on function is_restype_struni in module ida_typeinf: + +is_restype_struni(*args) + is_restype_struni(til, type) -> bool + +Help on function is_restype_void in module ida_typeinf: + +is_restype_void(*args) + is_restype_void(til, type) -> bool + +Help on function is_sdacl_byte in module ida_typeinf: + +is_sdacl_byte(*args) + is_sdacl_byte(t) -> bool + + + Identify an sdacl byte. The first sdacl byte has the following format: + 11xx000x. The sdacl bytes are appended to udt fields. They indicate + the start of type attributes (as the tah-bytes do). The sdacl bytes + are used in the udt headers instead of the tah-byte. This is done for + compatibility with old databases, they were already using sdacl bytes + in udt headers and as udt field postfixes. (see "sdacl-typeattrs" in + the type bit definitions) + + @param t (C++: type_t) + +Help on function is_tah_byte in module ida_typeinf: + +is_tah_byte(*args) + is_tah_byte(t) -> bool + + + The TAH byte (type attribute header byte) denotes the start of type + attributes. (see "tah-typeattrs" in the type bit definitions) + + @param t (C++: type_t) + +Help on function is_type_arithmetic in module ida_typeinf: + +is_type_arithmetic(*args) + is_type_arithmetic(t) -> bool + + + Is the type an arithmetic type? (floating or integral) + + + @param t (C++: type_t) + +Help on function is_type_array in module ida_typeinf: + +is_type_array(*args) + is_type_array(t) -> bool + + + See 'BT_ARRAY' . + + + @param t (C++: type_t) + +Help on function is_type_bitfld in module ida_typeinf: + +is_type_bitfld(*args) + is_type_bitfld(t) -> bool + + + See 'BT_BITFIELD' . + + + @param t (C++: type_t) + +Help on function is_type_bool in module ida_typeinf: + +is_type_bool(*args) + is_type_bool(t) -> bool + + + See 'BTF_BOOL' . + + + @param t (C++: type_t) + +Help on function is_type_char in module ida_typeinf: + +is_type_char(*args) + is_type_char(t) -> bool + + + Does the type specify a char value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_complex in module ida_typeinf: + +is_type_complex(*args) + is_type_complex(t) -> bool + + + See 'BT_COMPLEX' . + + + @param t (C++: type_t) + +Help on function is_type_const in module ida_typeinf: + +is_type_const(*args) + is_type_const(t) -> bool + + + See 'BTM_CONST' . + + + @param t (C++: type_t) + +Help on function is_type_double in module ida_typeinf: + +is_type_double(*args) + is_type_double(t) -> bool + + + See 'BTF_DOUBLE' . + + + @param t (C++: type_t) + +Help on function is_type_enum in module ida_typeinf: + +is_type_enum(*args) + is_type_enum(t) -> bool + + + See 'BTF_ENUM' . + + + @param t (C++: type_t) + +Help on function is_type_ext_arithmetic in module ida_typeinf: + +is_type_ext_arithmetic(*args) + is_type_ext_arithmetic(t) -> bool + + + Is the type an extended arithmetic type? (arithmetic or enum) + + + @param t (C++: type_t) + +Help on function is_type_ext_integral in module ida_typeinf: + +is_type_ext_integral(*args) + is_type_ext_integral(t) -> bool + + + Is the type an extended integral type? (integral or enum) + + + @param t (C++: type_t) + +Help on function is_type_float in module ida_typeinf: + +is_type_float(*args) + is_type_float(t) -> bool + + + See 'BTF_FLOAT' . + + + @param t (C++: type_t) + +Help on function is_type_floating in module ida_typeinf: + +is_type_floating(*args) + is_type_floating(t) -> bool + + + Is the type a floating point type? + + + @param t (C++: type_t) + +Help on function is_type_func in module ida_typeinf: + +is_type_func(*args) + is_type_func(t) -> bool + + + See 'BT_FUNC' . + + + @param t (C++: type_t) + +Help on function is_type_int in module ida_typeinf: + +is_type_int(*args) + is_type_int(bt) -> bool + + + Does the type_t specify one of the basic types in 'Basic type: + integer' ? + + + @param bt (C++: type_t) + +Help on function is_type_int128 in module ida_typeinf: + +is_type_int128(*args) + is_type_int128(t) -> bool + + + Does the type specify a 128-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int16 in module ida_typeinf: + +is_type_int16(*args) + is_type_int16(t) -> bool + + + Does the type specify a 16-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int32 in module ida_typeinf: + +is_type_int32(*args) + is_type_int32(t) -> bool + + + Does the type specify a 32-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int64 in module ida_typeinf: + +is_type_int64(*args) + is_type_int64(t) -> bool + + + Does the type specify a 64-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_integral in module ida_typeinf: + +is_type_integral(*args) + is_type_integral(t) -> bool + + + Is the type an integral type (char/short/int/long/bool)? + + + @param t (C++: type_t) + +Help on function is_type_ldouble in module ida_typeinf: + +is_type_ldouble(*args) + is_type_ldouble(t) -> bool + + + See 'BTF_LDOUBLE' . + + + @param t (C++: type_t) + +Help on function is_type_paf in module ida_typeinf: + +is_type_paf(*args) + is_type_paf(t) -> bool + + + Is the type a pointer, array, or function type? + + + @param t (C++: type_t) + +Help on function is_type_partial in module ida_typeinf: + +is_type_partial(*args) + is_type_partial(t) -> bool + + + Identifies an unknown or void type with a known size (see 'Basic type: + unknown & void' ) + + + @param t (C++: type_t) + +Help on function is_type_ptr in module ida_typeinf: + +is_type_ptr(*args) + is_type_ptr(t) -> bool + + + See 'BT_PTR' . + + + @param t (C++: type_t) + +Help on function is_type_ptr_or_array in module ida_typeinf: + +is_type_ptr_or_array(*args) + is_type_ptr_or_array(t) -> bool + + + Is the type a pointer or array type? + + + @param t (C++: type_t) + +Help on function is_type_struct in module ida_typeinf: + +is_type_struct(*args) + is_type_struct(t) -> bool + + + See 'BTF_STRUCT' . + + + @param t (C++: type_t) + +Help on function is_type_struni in module ida_typeinf: + +is_type_struni(*args) + is_type_struni(t) -> bool + + + Is the type a struct or union? + + + @param t (C++: type_t) + +Help on function is_type_sue in module ida_typeinf: + +is_type_sue(*args) + is_type_sue(t) -> bool + + + Is the type a struct/union/enum? + + + @param t (C++: type_t) + +Help on function is_type_tbyte in module ida_typeinf: + +is_type_tbyte(*args) + is_type_tbyte(t) -> bool + + + See 'BTF_FLOAT' . + + + @param t (C++: type_t) + +Help on function is_type_typedef in module ida_typeinf: + +is_type_typedef(*args) + is_type_typedef(t) -> bool + + + See 'BTF_TYPEDEF' . + + + @param t (C++: type_t) + +Help on function is_type_uchar in module ida_typeinf: + +is_type_uchar(*args) + is_type_uchar(t) -> bool + + + See 'BTF_UCHAR' . + + + @param t (C++: type_t) + +Help on function is_type_uint in module ida_typeinf: + +is_type_uint(*args) + is_type_uint(t) -> bool + + + See 'BTF_UINT' . + + + @param t (C++: type_t) + +Help on function is_type_uint128 in module ida_typeinf: + +is_type_uint128(*args) + is_type_uint128(t) -> bool + + + See 'BTF_UINT128' . + + + @param t (C++: type_t) + +Help on function is_type_uint16 in module ida_typeinf: + +is_type_uint16(*args) + is_type_uint16(t) -> bool + + + See 'BTF_UINT16' . + + + @param t (C++: type_t) + +Help on function is_type_uint32 in module ida_typeinf: + +is_type_uint32(*args) + is_type_uint32(t) -> bool + + + See 'BTF_UINT32' . + + + @param t (C++: type_t) + +Help on function is_type_uint64 in module ida_typeinf: + +is_type_uint64(*args) + is_type_uint64(t) -> bool + + + See 'BTF_UINT64' . + + + @param t (C++: type_t) + +Help on function is_type_union in module ida_typeinf: + +is_type_union(*args) + is_type_union(t) -> bool + + + See 'BTF_UNION' . + + + @param t (C++: type_t) + +Help on function is_type_unknown in module ida_typeinf: + +is_type_unknown(*args) + is_type_unknown(t) -> bool + + + See 'BT_UNKNOWN' . + + + @param t (C++: type_t) + +Help on function is_type_void in module ida_typeinf: + +is_type_void(*args) + is_type_void(t) -> bool + + + See 'BTF_VOID' . + + + @param t (C++: type_t) + +Help on function is_type_volatile in module ida_typeinf: + +is_type_volatile(*args) + is_type_volatile(t) -> bool + + + See 'BTM_VOLATILE' . + + + @param t (C++: type_t) + +Help on function is_typeid_last in module ida_typeinf: + +is_typeid_last(*args) + is_typeid_last(t) -> bool + + + Is the type_t the last byte of type declaration? (there are no + additional bytes after a basic type, see '_BT_LAST_BASIC' ) + + @param t (C++: type_t) + +Help on function is_user_cc in module ida_typeinf: + +is_user_cc(*args) + is_user_cc(cm) -> bool + + + Does the calling convention specify argument locations explicitly? + + + @param cm (C++: cm_t) + +Help on function is_vararg_cc in module ida_typeinf: + +is_vararg_cc(*args) + is_vararg_cc(cm) -> bool + + + Does the calling convention use ellipsis? + + + @param cm (C++: cm_t) + +Help on function lexcompare_tinfo in module ida_typeinf: + +lexcompare_tinfo(*args) + lexcompare_tinfo(t1, t2, arg3) -> int + +Help on function load_til in module ida_typeinf: + +load_til(*args) + load_til(name, tildir=None) -> til_t + + + Load til from a file. Failure to load base tils are reported into + 'errbuf'. They do not prevent loading of the main til. + + @param name: filename of the til. If it's an absolute path, tildir is + ignored. NB: the file extension is forced to .til (C++: + const char *) + @param tildir: directory where to load the til from. NULL means + default til subdirectories. (C++: const char *) + @return: pointer to resulting til, NULL if failed and error message is + in errbuf + +Help on function load_til_header in module ida_typeinf: + +load_til_header(*args) + load_til_header(tildir, name) -> til_t + + + Get human-readable til description. + + + @param tildir (C++: const char *) + @param name (C++: const char *) + +Help on function lower_type in module ida_typeinf: + +lower_type(*args) + lower_type(til, tif, name=None, _helper=None) -> int + + + Lower type. Inspect the type and lower all function subtypes using + lower_func_type().We call the prototypes usually encountered in source + files "high level"They may have implicit arguments, array arguments, + big structure retvals, etcWe introduce explicit arguments (i.e. 'this' + pointer) and call the result"low level prototype". See 'FTI_HIGH' .In + order to improve heuristics for recognition of big structure + retvals,it is recommended to pass a helper that will be used to make + decisions.That helper will be used only for lowering 'tif', and not + for the childrentypes walked through by recursion. + + @param til (C++: til_t *) + @param tif (C++: tinfo_t *) + @param name (C++: const char *) + @param _helper (C++: lowertype_helper_t *) + +Help on class lowertype_helper_t in module ida_typeinf: + +class lowertype_helper_t(__builtin__.object) + | Proxy of C++ lowertype_helper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | func_has_stkframe_hole(self, *args) + | func_has_stkframe_hole(self, candidate, candidate_data) -> bool + | + | get_func_purged_bytes(self, *args) + | get_func_purged_bytes(self, candidate, candidate_data) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lowertype_helper_t(self) + +Help on function new_til in module ida_typeinf: + +new_til(*args) + new_til(name, desc) -> til_t + + + Initialize a til. + + + @param name (C++: const char *) + @param desc (C++: const char *) + +Help on function next_named_type in module ida_typeinf: + +next_named_type(*args) + next_named_type(ti, name, ntf_flags) -> char const * + + + Enumerate types. Returns mangled names. Never returns anonymous types. + To include it, enumerate types by ordinals. + + @param ti (C++: const til_t *) + @param name (C++: const char *) + @param ntf_flags (C++: int) + +Help on function optimize_argloc in module ida_typeinf: + +optimize_argloc(*args) + optimize_argloc(vloc, size, gaps) -> bool + + + Verify and optimize scattered argloc into simple form. All new arglocs + must be processed by this function. + + @param vloc (C++: argloc_t *) + @param size (C++: int) + @param gaps (C++: const rangeset_t *) + +Help on function pack_idcobj_to_bv in module ida_typeinf: + +pack_idcobj_to_bv(*args) + pack_idcobj_to_bv(obj, tif, bytes, objoff, pio_flags=0) -> error_t + + + Write a typed idc object to the byte vector. Byte vector may be non- + empty, this function will append data to it + + @param obj (C++: const idc_value_t *) + @param tif (C++: const tinfo_t &) + @param bytes (C++: relobj_t *) + @param objoff (C++: void *) + @param pio_flags (C++: int) + +Help on function pack_idcobj_to_idb in module ida_typeinf: + +pack_idcobj_to_idb(*args) + pack_idcobj_to_idb(obj, tif, ea, pio_flags=0) -> error_t + + + Write a typed idc object to the database. + + + @param obj (C++: const idc_value_t *) + @param tif (C++: const tinfo_t &) + @param ea (C++: ea_t) + @param pio_flags (C++: int) + +Help on function pack_object_to_bv in module ida_typeinf: + +pack_object_to_bv(*args) + pack_object_to_bv(py_obj, ti, _type, _fields, base_ea, pio_flags=0) -> PyObject * + + + Packs a typed object to a string + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param base_ea: base ea used to relocate the pointers in the packed object + @param pio_flags: flags used while unpacking + @return: + tuple(0, err_code) on failure + tuple(1, packed_buf) on success + +Help on function pack_object_to_idb in module ida_typeinf: + +pack_object_to_idb(*args) + pack_object_to_idb(py_obj, ti, _type, _fields, ea, pio_flags=0) -> PyObject * + + + Write a typed object to the database. + Raises an exception if wrong parameters were passed or conversion fails + Returns the error_t returned by idaapi.pack_object_to_idb + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param ea: ea to be used while packing + @param pio_flags: flags used while unpacking + +Help on function parse_decl in module ida_typeinf: + +parse_decl(*args) + parse_decl(tif, til, decl, flags) -> str + + + Parse ONE declaration. If the input string contains more than one + declaration, the first complete type declaration ( 'PT_TYP' ) or the + last variable declaration ( 'PT_VAR' ) will be used.name & tif may be + empty after the call! + + @param tif: type info (C++: tinfo_t *) + @param til: type library to use. may be NULL (C++: til_t *) + @param decl: C declaration to parse (C++: const char *) + @param flags: combination of Type parsing flags bits (C++: int) + +Help on function parse_decls in module ida_typeinf: + +parse_decls(*args) + parse_decls(til, input, printer, hti_flags) -> int + + + Parse many declarations and store them in a til. If there are any + errors, they will be printed using 'printer'. This function uses + default include path and predefined macros from the database settings. + It always uses the 'HTI_DCL' bit. + + @param til: type library to store the result (C++: til_t *) + @param input: input string or file name (see hti_flags) (C++: const + char *) + @param printer: function to output error messages (use msg or NULL or + your own callback) (C++: printer_t *) + @param hti_flags: combination of Type formatting flags (C++: int) + @return: number of errors, 0 means ok. + +Help on class predicate_t in module ida_typeinf: + +class predicate_t(__builtin__.object) + | Proxy of C++ predicate_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> predicate_t + | + | __repr__ = _swig_repr(self) + | + | should_display(self, *args) + | should_display(self, til, name, type, fields) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_predicate_t(self) + +Help on function print_argloc in module ida_typeinf: + +print_argloc(*args) + print_argloc(vloc, size=0, vflags=0) -> str + + + Convert an argloc to human readable form. + + + @param vloc (C++: const argloc_t &) + @param size (C++: int) + @param vflags (C++: int) + +Help on function print_decls in module ida_typeinf: + +print_decls(*args) + print_decls(printer, til, py_ordinals, flags) -> PyObject * + + + Print types (and possibly their dependencies) in a format suitable for + use in a header file. This is the reverse 'parse_decls()' . + + @param printer: a handler for printing text (C++: text_sink_t &) + @param til: the type library holding the ordinals (C++: til_t *) + @param flags: flags for the algorithm. A combination of PDF_* + constants (C++: uint32) + +Help on function print_tinfo in module ida_typeinf: + +print_tinfo(*args) + print_tinfo(prefix, indent, cmtindent, flags, tif, name, cmt) -> str + +Help on function print_type in module ida_typeinf: + +print_type(*args) + print_type(ea, prtype_flags) -> str + + + Get type declaration for the specified address. + + @param ea: address (C++: ea_t) + @param prtype_flags: combination of Type printing flags (C++: int) + @return: success + +Help on class ptr_type_data_t in module ida_typeinf: + +class ptr_type_data_t(__builtin__.object) + | Proxy of C++ ptr_type_data_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, c=tinfo_t(), bps=0, p=tinfo_t(), d=0) -> ptr_type_data_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | is_code_ptr(self, *args) + | is_code_ptr(self) -> bool + | + | is_shifted(self, *args) + | is_shifted(self) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | based_ptr_size + | ptr_type_data_t_based_ptr_size_get(self) -> uchar + | + | closure + | ptr_type_data_t_closure_get(self) -> tinfo_t + | + | delta + | ptr_type_data_t_delta_get(self) -> int32 + | + | obj_type + | ptr_type_data_t_obj_type_get(self) -> tinfo_t + | + | parent + | ptr_type_data_t_parent_get(self) -> tinfo_t + | + | taptr_bits + | ptr_type_data_t_taptr_bits_get(self) -> uchar + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ptr_type_data_t(self) + +Help on function read_tinfo_bitfield_value in module ida_typeinf: + +read_tinfo_bitfield_value(*args) + read_tinfo_bitfield_value(typid, v, bitoff) -> uint64 + +Help on class reginfovec_t in module ida_typeinf: + +class reginfovec_t(__builtin__.object) + | Proxy of C++ qvector< reg_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> reg_info_t + | + | __init__(self, *args) + | __init__(self) -> reginfovec_t + | __init__(self, x) -> reginfovec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> reg_info_t + | begin(self) -> reg_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> reg_info_t + | end(self) -> reg_info_t + | + | erase(self, *args) + | erase(self, it) -> reg_info_t + | erase(self, first, last) -> reg_info_t + | + | extract(self, *args) + | extract(self) -> reg_info_t + | + | find(self, *args) + | find(self, x) -> reg_info_t + | find(self, x) -> reg_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=reg_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> reg_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> reg_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_reginfovec_t(self) + +Help on class regobj_t in module ida_typeinf: + +class regobj_t(__builtin__.object) + | Proxy of C++ regobj_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regobj_t + | + | __repr__ = _swig_repr(self) + | + | size(self, *args) + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | regidx + | regobj_t_regidx_get(self) -> int + | + | relocate + | regobj_t_relocate_get(self) -> int + | + | thisown + | The membership flag + | + | value + | regobj_t_value_get(self) -> bytevec_t * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regobj_t(self) + +Help on class regobjs_t in module ida_typeinf: + +class regobjs_t(regobjvec_t) + | Proxy of C++ regobjs_t class. + | + | Method resolution order: + | regobjs_t + | regobjvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regobjs_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regobjs_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from regobjvec_t: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> regobj_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> regobj_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> regobj_t + | begin(self) -> regobj_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> regobj_t + | end(self) -> regobj_t + | + | erase(self, *args) + | erase(self, it) -> regobj_t + | erase(self, first, last) -> regobj_t + | + | extract(self, *args) + | extract(self) -> regobj_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=regobj_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> regobj_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> regobj_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from regobjvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class regobjvec_t in module ida_typeinf: + +class regobjvec_t(__builtin__.object) + | Proxy of C++ qvector< regobj_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> regobj_t + | + | __init__(self, *args) + | __init__(self) -> regobjvec_t + | __init__(self, x) -> regobjvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> regobj_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> regobj_t + | begin(self) -> regobj_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> regobj_t + | end(self) -> regobj_t + | + | erase(self, *args) + | erase(self, it) -> regobj_t + | erase(self, first, last) -> regobj_t + | + | extract(self, *args) + | extract(self) -> regobj_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=regobj_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> regobj_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> regobj_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regobjvec_t(self) + +Help on function remove_abi_opts in module ida_typeinf: + +remove_abi_opts(*args) + remove_abi_opts(abi_opts, user_level=False) -> bool + +Help on function remove_pointer in module ida_typeinf: + +remove_pointer(*args) + remove_pointer(tif) -> tinfo_t + + + 'BT_PTR' : If the current type is a pointer, return the pointed + object. If the current type is not a pointer, return the current type. + See also get_ptrarr_object() and get_pointed_object() + + @param tif (C++: const tinfo_t &) + +Help on function remove_tinfo_pointer in module ida_typeinf: + +remove_tinfo_pointer(*args) + remove_tinfo_pointer(tif, name, til) -> PyObject * + + + Remove pointer of a type. (i.e. convert "char *" into "char"). + Optionally remove the "lp" (or similar) prefix of the input name. If + the input type is not a pointer, then fail. + + @param tif (C++: tinfo_t *) + @param til (C++: const til_t *) + +Help on function replace_ordinal_typerefs in module ida_typeinf: + +replace_ordinal_typerefs(*args) + replace_ordinal_typerefs(til, tif) -> int + + + Replace references to ordinal types by name references. This function + 'unties' the type from the current local type library and makes it + easier to export it. + + @param til: type library to use. may be NULL. (C++: til_t *) + @param tif: type to modify (in/out) (C++: tinfo_t *) + +Help on function resolve_typedef in module ida_typeinf: + +resolve_typedef(*args) + resolve_typedef(til, type) -> type_t const * + +Help on class rrel_t in module ida_typeinf: + +class rrel_t(__builtin__.object) + | Proxy of C++ rrel_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rrel_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | rrel_t_off_get(self) -> sval_t + | + | reg + | rrel_t_reg_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rrel_t(self) + +Help on function save_tinfo in module ida_typeinf: + +save_tinfo(*args) + save_tinfo(tif, til, ord, name, ntf_flags) -> tinfo_code_t + +Help on class scattered_aloc_t in module ida_typeinf: + +class scattered_aloc_t(argpartvec_t) + | Proxy of C++ scattered_aloc_t class. + | + | Method resolution order: + | scattered_aloc_t + | argpartvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> scattered_aloc_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_scattered_aloc_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from argpartvec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> argpart_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> argpart_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> argpart_t + | begin(self) -> argpart_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> argpart_t + | end(self) -> argpart_t + | + | erase(self, *args) + | erase(self, it) -> argpart_t + | erase(self, first, last) -> argpart_t + | + | extract(self, *args) + | extract(self) -> argpart_t + | + | find(self, *args) + | find(self, x) -> argpart_t + | find(self, x) -> argpart_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=argpart_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> argpart_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> argpart_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from argpartvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function score_tinfo in module ida_typeinf: + +score_tinfo(*args) + score_tinfo(tif) -> uint32 + +Help on function serialize_tinfo in module ida_typeinf: + +serialize_tinfo(*args) + serialize_tinfo(type, fields, fldcmts, tif, sudt_flags) -> bool + +Help on function set_abi_name in module ida_typeinf: + +set_abi_name(*args) + set_abi_name(abiname, user_level=False) -> bool + + + Set abi name (see 'Compiler IDs' ) + + + @param abiname (C++: const char *) + @param user_level (C++: bool) + +Help on function set_c_header_path in module ida_typeinf: + +set_c_header_path(*args) + set_c_header_path(incdir) + + + Set include directory path the target compiler. + + + @param incdir (C++: const char *) + +Help on function set_c_macros in module ida_typeinf: + +set_c_macros(*args) + set_c_macros(macros) + + + Set predefined macros for the target compiler. + + + @param macros (C++: const char *) + +Help on function set_compiler in module ida_typeinf: + +set_compiler(*args) + set_compiler(cc, flags, abiname=None) -> bool + + + Change current compiler. + + @param cc: compiler to switch to (C++: const compiler_info_t &) + @param flags: Set compiler flags (C++: int) + @param abiname: ABI name (C++: const char *) + @return: success + +Help on function set_compiler_id in module ida_typeinf: + +set_compiler_id(*args) + set_compiler_id(id, abiname=None) -> bool + + + Set the compiler id (see 'Compiler IDs' ) + + + @param id (C++: comp_t) + @param abiname (C++: const char *) + +Help on function set_compiler_string in module ida_typeinf: + +set_compiler_string(*args) + set_compiler_string(compstr, user_level) -> bool + +Help on function set_numbered_type in module ida_typeinf: + +set_numbered_type(*args) + set_numbered_type(ti, ordinal, ntf_flags, name, type, fields=None, cmt=None, fldcmts=None, sclass=None) -> tinfo_code_t + + + Store a type in the til. 'name' may be NULL for anonymous types. The + specified ordinal must be free (no other type is using it). For + ntf_flags, only 'NTF_REPLACE' is consulted. + + @param ti (C++: til_t *) + @param ordinal (C++: uint32) + @param ntf_flags (C++: int) + @param name (C++: const char *) + @param type (C++: const type_t *) + @param fields (C++: const p_list *) + @param cmt (C++: const char *) + @param fldcmts (C++: const p_list *) + @param sclass (C++: const sclass_t *) + +Help on function set_tinfo_attr in module ida_typeinf: + +set_tinfo_attr(*args) + set_tinfo_attr(tif, ta, may_overwrite) -> bool + +Help on function set_tinfo_attrs in module ida_typeinf: + +set_tinfo_attrs(*args) + set_tinfo_attrs(tif, ta) -> bool + +Help on function set_tinfo_property in module ida_typeinf: + +set_tinfo_property(*args) + set_tinfo_property(tif, sta_prop, x) -> size_t + +Help on function set_type_alias in module ida_typeinf: + +set_type_alias(*args) + set_type_alias(ti, src_ordinal, dst_ordinal) -> bool + + + Create a type alias. Redirects all references to source type to the + destination type. This is equivalent to instantaneous replacement all + reference to srctype by dsttype. + + @param ti (C++: til_t *) + @param src_ordinal (C++: uint32) + @param dst_ordinal (C++: uint32) + +Help on class simd_info_t in module ida_typeinf: + +class simd_info_t(__builtin__.object) + | Proxy of C++ simd_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, nm=None, sz=0, memt=BTF_UNK) -> simd_info_t + | + | __repr__ = _swig_repr(self) + | + | match_pattern(self, *args) + | match_pattern(self, pattern) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | memtype + | simd_info_t_memtype_get(self) -> type_t + | + | name + | simd_info_t_name_get(self) -> char const * + | + | size + | simd_info_t_size_get(self) -> uint16 + | + | thisown + | The membership flag + | + | tif + | simd_info_t_tif_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_simd_info_t(self) + +Help on function store_til in module ida_typeinf: + +store_til(*args) + store_til(ti, tildir, name) -> bool + + + Store til to a file. If the til contains garbage, it will be collected + before storing the til. Your plugin should call 'compact_til()' before + calling 'store_til()' . + + @param ti: type library to store (C++: til_t *) + @param tildir: directory where to store the til. NULL means current + directory. (C++: const char *) + @param name: filename of the til. If it's an absolute path, tildir is + ignored. NB: the file extension is forced to .til (C++: + const char *) + @return: success + +Help on class text_sink_t in module ida_typeinf: + +class text_sink_t(__builtin__.object) + | Proxy of C++ text_sink_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> text_sink_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, str) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_text_sink_t(self) + +Help on class til_symbol_t in module ida_typeinf: + +class til_symbol_t(__builtin__.object) + | Proxy of C++ til_symbol_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=None, t=None) -> til_symbol_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | til_symbol_t_name_get(self) -> char const * + | + | thisown + | The membership flag + | + | til + | til_symbol_t_til_get(self) -> til_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_til_symbol_t(self) + +Help on class til_t in module ida_typeinf: + +class til_t(__builtin__.object) + | Proxy of C++ til_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> til_t + | + | __repr__ = _swig_repr(self) + | + | base(self, *args) + | base(self, n) -> til_t + | + | is_dirty(self, *args) + | is_dirty(self) -> bool + | + | set_dirty(self, *args) + | set_dirty(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cc + | til_t_cc_get(self) -> compiler_info_t + | + | desc + | til_t_desc_get(self) -> char * + | + | flags + | til_t_flags_get(self) -> uint32 + | + | name + | til_t_name_get(self) -> char * + | + | nbases + | til_t_nbases_get(self) -> int + | + | nrefs + | til_t_nrefs_get(self) -> int + | + | nstreams + | til_t_nstreams_get(self) -> int + | + | streams + | til_t_streams_get(self) -> til_stream_t ** + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_til_t(self) + +Help on class tinfo_t in module ida_typeinf: + +class tinfo_t(__builtin__.object) + | Proxy of C++ tinfo_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> tinfo_t + | __init__(self, decl_type) -> tinfo_t + | __init__(self, r) -> tinfo_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) + | __str__(self) -> qstring + | + | _print(self, *args) + | _print(self, name=None, prtype_flags=0, indent=0, cmtindent=0, prefix=None, cmt=None) -> bool + | + | append_covered(self, *args) + | append_covered(self, out, offset=0) -> bool + | + | calc_gaps(self, *args) + | calc_gaps(self, out) -> bool + | + | calc_purged_bytes(self, *args) + | calc_purged_bytes(self) -> int + | + | calc_score(self, *args) + | calc_score(self) -> uint32 + | + | calc_udt_aligns(self, *args) + | calc_udt_aligns(self, sudt_flags=0x0004) -> bool + | + | change_sign(self, *args) + | change_sign(self, sign) -> bool + | + | clear(self, *args) + | clear(self) + | + | clr_const(self, *args) + | clr_const(self) + | + | clr_const_volatile(self, *args) + | clr_const_volatile(self) + | + | clr_volatile(self, *args) + | clr_volatile(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | compare_with(self, *args) + | compare_with(self, r, tcflags=0) -> bool + | + | convert_array_to_ptr(self, *args) + | convert_array_to_ptr(self) -> bool + | + | copy(self, *args) + | copy(self) -> tinfo_t + | + | create_array(self, *args) + | create_array(self, p, decl_type=BT_ARRAY) -> bool + | create_array(self, tif, nelems=0, base=0, decl_type=BT_ARRAY) -> bool + | + | create_bitfield(self, *args) + | create_bitfield(self, p, decl_type=BT_BITFIELD) -> bool + | create_bitfield(self, nbytes, width, is_unsigned=False, decl_type=BT_BITFIELD) -> bool + | + | create_enum(self, *args) + | create_enum(self, p, decl_type=BTF_ENUM) -> bool + | + | create_forward_decl(self, *args) + | create_forward_decl(self, til, decl_type, name, ntf_flags=0) -> tinfo_code_t + | + | create_func(self, *args) + | create_func(self, p, decl_type=BT_FUNC) -> bool + | + | create_ptr(self, *args) + | create_ptr(self, p, decl_type=BT_PTR) -> bool + | create_ptr(self, tif, bps=0, decl_type=BT_PTR) -> bool + | + | create_simple_type(self, *args) + | create_simple_type(self, decl_type) -> bool + | + | create_typedef(self, *args) + | create_typedef(self, p, decl_type=BTF_TYPEDEF, try_ordinal=True) -> bool + | create_typedef(self, til, name, decl_type=BTF_TYPEDEF, try_ordinal=True) + | create_typedef(self, til, ord, decl_type=BTF_TYPEDEF) + | + | create_udt(self, *args) + | create_udt(self, p, decl_type) -> bool + | + | del_attr(self, *args) + | del_attr(self, key, make_copy=True) -> bool + | + | del_attrs(self, *args) + | del_attrs(self) + | + | deserialize(self, *args) + | deserialize(self, til, ptype, pfields=None, pfldcmts=None) -> bool + | deserialize(self, til, type, fields, cmts=None) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | equals_to(self, *args) + | equals_to(self, r) -> bool + | + | find_udt_member(self, *args) + | find_udt_member(self, udm, strmem_flags) -> int + | + | get_array_details(self, *args) + | get_array_details(self, ai) -> bool + | + | get_array_element(self, *args) + | get_array_element(self) -> tinfo_t + | + | get_array_nelems(self, *args) + | get_array_nelems(self) -> int + | + | get_attr(self, *args) + | get_attr(self, key, all_attrs=True) -> PyObject * + | + | get_attrs(self, *args) + | get_attrs(self, tav, all_attrs=False) -> bool + | + | get_bitfield_details(self, *args) + | get_bitfield_details(self, bi) -> bool + | + | get_declalign(self, *args) + | get_declalign(self) -> uchar + | + | get_decltype(self, *args) + | get_decltype(self) -> type_t + | + | get_enum_base_type(self, *args) + | get_enum_base_type(self) -> type_t + | + | get_enum_details(self, *args) + | get_enum_details(self, ei) -> bool + | + | get_final_ordinal(self, *args) + | get_final_ordinal(self) -> uint32 + | + | get_final_type_name(self, *args) + | get_final_type_name(self) -> bool + | + | get_func_details(self, *args) + | get_func_details(self, fi, gtd=GTD_CALC_ARGLOCS) -> bool + | + | get_modifiers(self, *args) + | get_modifiers(self) -> type_t + | + | get_named_type(self, *args) + | get_named_type(self, til, name, decl_type=BTF_TYPEDEF, resolve=True, try_ordinal=True) -> bool + | + | get_nargs(self, *args) + | get_nargs(self) -> int + | + | get_next_type_name(self, *args) + | get_next_type_name(self) -> bool + | + | get_nth_arg(self, *args) + | get_nth_arg(self, n) -> tinfo_t + | + | get_numbered_type(self, *args) + | get_numbered_type(self, til, ordinal, decl_type=BTF_TYPEDEF, resolve=True) -> bool + | + | get_onemember_type(self, *args) + | get_onemember_type(self) -> tinfo_t + | + | get_ordinal(self, *args) + | get_ordinal(self) -> uint32 + | + | get_pointed_object(self, *args) + | get_pointed_object(self) -> tinfo_t + | + | get_ptr_details(self, *args) + | get_ptr_details(self, pi) -> bool + | + | get_ptrarr_object(self, *args) + | get_ptrarr_object(self) -> tinfo_t + | + | get_ptrarr_objsize(self, *args) + | get_ptrarr_objsize(self) -> int + | + | get_realtype(self, *args) + | get_realtype(self, full=False) -> type_t + | + | get_rettype(self, *args) + | get_rettype(self) -> tinfo_t + | + | get_sign(self, *args) + | get_sign(self) -> type_sign_t + | + | get_size(self, *args) + | get_size(self, p_effalign=None, gts_code=0) -> size_t + | + | get_til(self, *args) + | get_til(self) -> til_t + | + | get_type_name(self, *args) + | get_type_name(self) -> bool + | + | get_udt_details(self, *args) + | get_udt_details(self, udt, gtd=GTD_CALC_LAYOUT) -> bool + | + | get_udt_nmembers(self, *args) + | get_udt_nmembers(self) -> int + | + | get_unpadded_size(self, *args) + | get_unpadded_size(self) -> size_t + | + | has_details(self, *args) + | has_details(self) -> bool + | + | has_vftable(self, *args) + | has_vftable(self) -> bool + | + | is_anonymous_udt(self, *args) + | is_anonymous_udt(self) -> bool + | + | is_arithmetic(self, *args) + | is_arithmetic(self) -> bool + | + | is_array(self, *args) + | is_array(self) -> bool + | + | is_bitfield(self, *args) + | is_bitfield(self) -> bool + | + | is_bool(self, *args) + | is_bool(self) -> bool + | + | is_castable_to(self, *args) + | is_castable_to(self, target) -> bool + | + | is_char(self, *args) + | is_char(self) -> bool + | + | is_complex(self, *args) + | is_complex(self) -> bool + | + | is_const(self, *args) + | is_const(self) -> bool + | + | is_correct(self, *args) + | is_correct(self) -> bool + | + | is_decl_array(self, *args) + | is_decl_array(self) -> bool + | + | is_decl_bitfield(self, *args) + | is_decl_bitfield(self) -> bool + | + | is_decl_bool(self, *args) + | is_decl_bool(self) -> bool + | + | is_decl_char(self, *args) + | is_decl_char(self) -> bool + | + | is_decl_complex(self, *args) + | is_decl_complex(self) -> bool + | + | is_decl_const(self, *args) + | is_decl_const(self) -> bool + | + | is_decl_double(self, *args) + | is_decl_double(self) -> bool + | + | is_decl_enum(self, *args) + | is_decl_enum(self) -> bool + | + | is_decl_float(self, *args) + | is_decl_float(self) -> bool + | + | is_decl_floating(self, *args) + | is_decl_floating(self) -> bool + | + | is_decl_func(self, *args) + | is_decl_func(self) -> bool + | + | is_decl_int(self, *args) + | is_decl_int(self) -> bool + | + | is_decl_int128(self, *args) + | is_decl_int128(self) -> bool + | + | is_decl_int16(self, *args) + | is_decl_int16(self) -> bool + | + | is_decl_int32(self, *args) + | is_decl_int32(self) -> bool + | + | is_decl_int64(self, *args) + | is_decl_int64(self) -> bool + | + | is_decl_last(self, *args) + | is_decl_last(self) -> bool + | + | is_decl_ldouble(self, *args) + | is_decl_ldouble(self) -> bool + | + | is_decl_paf(self, *args) + | is_decl_paf(self) -> bool + | + | is_decl_partial(self, *args) + | is_decl_partial(self) -> bool + | + | is_decl_ptr(self, *args) + | is_decl_ptr(self) -> bool + | + | is_decl_struct(self, *args) + | is_decl_struct(self) -> bool + | + | is_decl_sue(self, *args) + | is_decl_sue(self) -> bool + | + | is_decl_tbyte(self, *args) + | is_decl_tbyte(self) -> bool + | + | is_decl_typedef(self, *args) + | is_decl_typedef(self) -> bool + | + | is_decl_uchar(self, *args) + | is_decl_uchar(self) -> bool + | + | is_decl_udt(self, *args) + | is_decl_udt(self) -> bool + | + | is_decl_uint(self, *args) + | is_decl_uint(self) -> bool + | + | is_decl_uint128(self, *args) + | is_decl_uint128(self) -> bool + | + | is_decl_uint16(self, *args) + | is_decl_uint16(self) -> bool + | + | is_decl_uint32(self, *args) + | is_decl_uint32(self) -> bool + | + | is_decl_uint64(self, *args) + | is_decl_uint64(self) -> bool + | + | is_decl_union(self, *args) + | is_decl_union(self) -> bool + | + | is_decl_unknown(self, *args) + | is_decl_unknown(self) -> bool + | + | is_decl_void(self, *args) + | is_decl_void(self) -> bool + | + | is_decl_volatile(self, *args) + | is_decl_volatile(self) -> bool + | + | is_double(self, *args) + | is_double(self) -> bool + | + | is_empty_udt(self, *args) + | is_empty_udt(self) -> bool + | + | is_enum(self, *args) + | is_enum(self) -> bool + | + | is_ext_arithmetic(self, *args) + | is_ext_arithmetic(self) -> bool + | + | is_ext_integral(self, *args) + | is_ext_integral(self) -> bool + | + | is_float(self, *args) + | is_float(self) -> bool + | + | is_floating(self, *args) + | is_floating(self) -> bool + | + | is_forward_decl(self, *args) + | is_forward_decl(self) -> bool + | + | is_from_subtil(self, *args) + | is_from_subtil(self) -> bool + | + | is_func(self, *args) + | is_func(self) -> bool + | + | is_funcptr(self, *args) + | is_funcptr(self) -> bool + | + | is_high_func(self, *args) + | is_high_func(self) -> bool + | + | is_int(self, *args) + | is_int(self) -> bool + | + | is_int128(self, *args) + | is_int128(self) -> bool + | + | is_int16(self, *args) + | is_int16(self) -> bool + | + | is_int32(self, *args) + | is_int32(self) -> bool + | + | is_int64(self, *args) + | is_int64(self) -> bool + | + | is_integral(self, *args) + | is_integral(self) -> bool + | + | is_ldouble(self, *args) + | is_ldouble(self) -> bool + | + | is_manually_castable_to(self, *args) + | is_manually_castable_to(self, target) -> bool + | + | is_one_fpval(self, *args) + | is_one_fpval(self) -> bool + | + | is_paf(self, *args) + | is_paf(self) -> bool + | + | is_partial(self, *args) + | is_partial(self) -> bool + | + | is_ptr(self, *args) + | is_ptr(self) -> bool + | + | is_ptr_or_array(self, *args) + | is_ptr_or_array(self) -> bool + | + | is_purging_cc(self, *args) + | is_purging_cc(self) -> bool + | + | is_pvoid(self, *args) + | is_pvoid(self) -> bool + | + | is_scalar(self, *args) + | is_scalar(self) -> bool + | + | is_shifted_ptr(self, *args) + | is_shifted_ptr(self) -> bool + | + | is_signed(self, *args) + | is_signed(self) -> bool + | + | is_small_udt(self, *args) + | is_small_udt(self) -> bool + | + | is_sse_type(self, *args) + | is_sse_type(self) -> bool + | + | is_struct(self, *args) + | is_struct(self) -> bool + | + | is_sue(self, *args) + | is_sue(self) -> bool + | + | is_tbyte(self, *args) + | is_tbyte(self) -> bool + | + | is_typeref(self, *args) + | is_typeref(self) -> bool + | + | is_uchar(self, *args) + | is_uchar(self) -> bool + | + | is_udt(self, *args) + | is_udt(self) -> bool + | + | is_uint(self, *args) + | is_uint(self) -> bool + | + | is_uint128(self, *args) + | is_uint128(self) -> bool + | + | is_uint16(self, *args) + | is_uint16(self) -> bool + | + | is_uint32(self, *args) + | is_uint32(self) -> bool + | + | is_uint64(self, *args) + | is_uint64(self) -> bool + | + | is_union(self, *args) + | is_union(self) -> bool + | + | is_unknown(self, *args) + | is_unknown(self) -> bool + | + | is_unsigned(self, *args) + | is_unsigned(self) -> bool + | + | is_user_cc(self, *args) + | is_user_cc(self) -> bool + | + | is_vararg_cc(self, *args) + | is_vararg_cc(self) -> bool + | + | is_varstruct(self, *args) + | is_varstruct(self) -> bool + | + | is_vftable(self, *args) + | is_vftable(self) -> bool + | + | is_void(self, *args) + | is_void(self) -> bool + | + | is_volatile(self, *args) + | is_volatile(self) -> bool + | + | is_well_defined(self, *args) + | is_well_defined(self) -> bool + | + | present(self, *args) + | present(self) -> bool + | + | read_bitfield_value(self, *args) + | read_bitfield_value(self, v, bitoff) -> uint64 + | + | remove_ptr_or_array(self, *args) + | remove_ptr_or_array(self) -> bool + | + | requires_qualifier(self, *args) + | requires_qualifier(self, name, offset) -> bool + | + | serialize(self, *args) + | serialize(self, sudt_flags=SUDT_FAST|SUDT_TRUNC) -> PyObject * + | + | set_attr(self, *args) + | set_attr(self, ta, may_overwrite=True) -> bool + | + | set_attrs(self, *args) + | set_attrs(self, tav) -> bool + | + | set_const(self, *args) + | set_const(self) + | + | set_declalign(self, *args) + | set_declalign(self, declalign) -> bool + | + | set_modifiers(self, *args) + | set_modifiers(self, mod) + | + | set_named_type(self, *args) + | set_named_type(self, til, name, ntf_flags=0) -> tinfo_code_t + | + | set_numbered_type(self, *args) + | set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t + | + | set_symbol_type(self, *args) + | set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t + | + | set_volatile(self, *args) + | set_volatile(self) + | + | swap(self, *args) + | swap(self, r) + | + | write_bitfield_value(self, *args) + | write_bitfield_value(self, dst, v, bitoff) -> uint64 + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | get_stock(*args) + | get_stock(id) -> tinfo_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tinfo_t(self) + +Help on function tinfo_t_get_stock in module ida_typeinf: + +tinfo_t_get_stock(*args) + tinfo_t_get_stock(id) -> tinfo_t + +Help on class tinfo_visitor_t in module ida_typeinf: + +class tinfo_visitor_t(__builtin__.object) + | Proxy of C++ tinfo_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, s=0) -> tinfo_visitor_t + | + | __repr__ = _swig_repr(self) + | + | apply_to(self, *args) + | apply_to(self, tif, out=None, name=None, cmt=None) -> int + | + | prune_now(self, *args) + | prune_now(self) + | + | visit_type(self, *args) + | visit_type(self, out, tif, name, cmt) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | state + | tinfo_visitor_t_state_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tinfo_visitor_t(self) + +Help on class type_attr_t in module ida_typeinf: + +class type_attr_t(__builtin__.object) + | Proxy of C++ type_attr_t class. + | + | Methods defined here: + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> type_attr_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | key + | type_attr_t_key_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | type_attr_t_value_get(self) -> bytevec_t * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_type_attr_t(self) + +Help on class type_attrs_t in module ida_typeinf: + +class type_attrs_t(__builtin__.object) + | Proxy of C++ qvector< type_attr_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> type_attr_t + | + | __init__(self, *args) + | __init__(self) -> type_attrs_t + | __init__(self, x) -> type_attrs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> type_attr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> type_attr_t + | begin(self) -> type_attr_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> type_attr_t + | end(self) -> type_attr_t + | + | erase(self, *args) + | erase(self, it) -> type_attr_t + | erase(self, first, last) -> type_attr_t + | + | extract(self, *args) + | extract(self) -> type_attr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=type_attr_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> type_attr_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> type_attr_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_type_attrs_t(self) + +Help on class type_mods_t in module ida_typeinf: + +class type_mods_t(__builtin__.object) + | Proxy of C++ type_mods_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> type_mods_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | has_cmt(self, *args) + | has_cmt(self) -> bool + | + | has_info(self, *args) + | has_info(self) -> bool + | + | has_name(self, *args) + | has_name(self) -> bool + | + | has_type(self, *args) + | has_type(self) -> bool + | + | set_new_cmt(self, *args) + | set_new_cmt(self, c) + | + | set_new_name(self, *args) + | set_new_name(self, n) + | + | set_new_type(self, *args) + | set_new_type(self, t) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | type_mods_t_cmt_get(self) -> qstring * + | + | flags + | type_mods_t_flags_get(self) -> int + | + | name + | type_mods_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | type_mods_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_type_mods_t(self) + +Help on class typedef_type_data_t in module ida_typeinf: + +class typedef_type_data_t(__builtin__.object) + | Proxy of C++ typedef_type_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _til, _name, _resolve=False) -> typedef_type_data_t + | __init__(self, _til, ord, _resolve=False) -> typedef_type_data_t + | + | __repr__ = _swig_repr(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | is_ordref + | typedef_type_data_t_is_ordref_get(self) -> bool + | + | resolve + | typedef_type_data_t_resolve_get(self) -> bool + | + | thisown + | The membership flag + | + | til + | typedef_type_data_t_til_get(self) -> til_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_typedef_type_data_t(self) + +Help on class udt_member_t in module ida_typeinf: + +class udt_member_t(__builtin__.object) + | Proxy of C++ udt_member_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> udt_member_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | begin(self, *args) + | begin(self) -> uint64 + | + | clr_baseclass(self, *args) + | clr_baseclass(self) + | + | clr_unaligned(self, *args) + | clr_unaligned(self) + | + | clr_vftable(self, *args) + | clr_vftable(self) + | + | clr_virtbase(self, *args) + | clr_virtbase(self) + | + | end(self, *args) + | end(self) -> uint64 + | + | is_anonymous_udm(self, *args) + | is_anonymous_udm(self) -> bool + | + | is_baseclass(self, *args) + | is_baseclass(self) -> bool + | + | is_bitfield(self, *args) + | is_bitfield(self) -> bool + | + | is_unaligned(self, *args) + | is_unaligned(self) -> bool + | + | is_vftable(self, *args) + | is_vftable(self) -> bool + | + | is_virtbase(self, *args) + | is_virtbase(self) -> bool + | + | is_zero_bitfield(self, *args) + | is_zero_bitfield(self) -> bool + | + | set_baseclass(self, *args) + | set_baseclass(self) + | + | set_unaligned(self, *args) + | set_unaligned(self) + | + | set_vftable(self, *args) + | set_vftable(self) + | + | set_virtbase(self, *args) + | set_virtbase(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | udt_member_t_cmt_get(self) -> qstring * + | + | effalign + | udt_member_t_effalign_get(self) -> int + | + | fda + | udt_member_t_fda_get(self) -> uchar + | + | name + | udt_member_t_name_get(self) -> qstring * + | + | offset + | udt_member_t_offset_get(self) -> uint64 + | + | size + | udt_member_t_size_get(self) -> uint64 + | + | tafld_bits + | udt_member_t_tafld_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | type + | udt_member_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udt_member_t(self) + +Help on class udt_type_data_t in module ida_typeinf: + +class udt_type_data_t(udtmembervec_t) + | Proxy of C++ udt_type_data_t class. + | + | Method resolution order: + | udt_type_data_t + | udtmembervec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> udt_type_data_t + | + | __repr__ = _swig_repr(self) + | + | is_cppobj(self, *args) + | is_cppobj(self) -> bool + | + | is_last_baseclass(self, *args) + | is_last_baseclass(self, idx) -> bool + | + | is_msstruct(self, *args) + | is_msstruct(self) -> bool + | + | is_unaligned(self, *args) + | is_unaligned(self) -> bool + | + | is_vftable(self, *args) + | is_vftable(self) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | effalign + | udt_type_data_t_effalign_get(self) -> uint32 + | + | is_union + | udt_type_data_t_is_union_get(self) -> bool + | + | pack + | udt_type_data_t_pack_get(self) -> uchar + | + | sda + | udt_type_data_t_sda_get(self) -> uchar + | + | taudt_bits + | udt_type_data_t_taudt_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | total_size + | udt_type_data_t_total_size_get(self) -> size_t + | + | unpadded_size + | udt_type_data_t_unpadded_size_get(self) -> size_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udt_type_data_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from udtmembervec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> udt_member_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> udt_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> udt_member_t + | begin(self) -> udt_member_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> udt_member_t + | end(self) -> udt_member_t + | + | erase(self, *args) + | erase(self, it) -> udt_member_t + | erase(self, first, last) -> udt_member_t + | + | extract(self, *args) + | extract(self) -> udt_member_t + | + | find(self, *args) + | find(self, x) -> udt_member_t + | find(self, x) -> udt_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=udt_member_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> udt_member_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> udt_member_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from udtmembervec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class udtmembervec_t in module ida_typeinf: + +class udtmembervec_t(__builtin__.object) + | Proxy of C++ qvector< udt_member_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> udt_member_t + | + | __init__(self, *args) + | __init__(self) -> udtmembervec_t + | __init__(self, x) -> udtmembervec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> udt_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> udt_member_t + | begin(self) -> udt_member_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> udt_member_t + | end(self) -> udt_member_t + | + | erase(self, *args) + | erase(self, it) -> udt_member_t + | erase(self, first, last) -> udt_member_t + | + | extract(self, *args) + | extract(self) -> udt_member_t + | + | find(self, *args) + | find(self, x) -> udt_member_t + | find(self, x) -> udt_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=udt_member_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> udt_member_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> udt_member_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udtmembervec_t(self) + +Help on function unpack_idcobj_from_bv in module ida_typeinf: + +unpack_idcobj_from_bv(*args) + unpack_idcobj_from_bv(obj, tif, bytes, pio_flags=0) -> error_t + + + Read a typed idc object from the byte vector. + + + @param obj (C++: idc_value_t *) + @param tif (C++: const tinfo_t &) + @param bytes (C++: const bytevec_t &) + @param pio_flags (C++: int) + +Help on function unpack_idcobj_from_idb in module ida_typeinf: + +unpack_idcobj_from_idb(*args) + unpack_idcobj_from_idb(obj, tif, ea, off0, pio_flags=0) -> error_t + + + Collection of register objects. + + Read a typed idc object from the database + + @param obj (C++: idc_value_t *) + @param tif (C++: const tinfo_t &) + @param ea (C++: ea_t) + @param off0 (C++: const bytevec_t *) + @param pio_flags (C++: int) + +Help on function unpack_object_from_bv in module ida_typeinf: + +unpack_object_from_bv(*args) + unpack_object_from_bv(ti, _type, _fields, bytes, pio_flags=0) -> PyObject * + + + Unpacks a buffer into an object. + Returns the error_t returned by idaapi.pack_object_to_idb + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param bytes: the bytes to unpack + @param pio_flags: flags used while unpacking + @return: + - tuple(0, err) on failure + - tuple(1, obj) on success + +Help on function unpack_object_from_idb in module ida_typeinf: + +unpack_object_from_idb(*args) + unpack_object_from_idb(ti, _type, _fields, ea, pio_flags=0) -> PyObject * + +Help on class valstr_t in module ida_typeinf: + +class valstr_t(__builtin__.object) + | Proxy of C++ valstr_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> valstr_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | info + | valstr_t_info_get(self) -> valinfo_t * + | + | length + | valstr_t_length_get(self) -> size_t + | + | members + | valstr_t_members_get(self) -> valstrs_t + | + | oneline + | valstr_t_oneline_get(self) -> qstring * + | + | props + | valstr_t_props_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_valstr_t(self) + +Help on class valstrs_t in module ida_typeinf: + +class valstrs_t(valstrvec_t) + | Proxy of C++ valstrs_t class. + | + | Method resolution order: + | valstrs_t + | valstrvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> valstrs_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_valstrs_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from valstrvec_t: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> valstr_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> valstr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> valstr_t + | begin(self) -> valstr_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> valstr_t + | end(self) -> valstr_t + | + | erase(self, *args) + | erase(self, it) -> valstr_t + | erase(self, first, last) -> valstr_t + | + | extract(self, *args) + | extract(self) -> valstr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=valstr_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> valstr_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> valstr_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from valstrvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class valstrvec_t in module ida_typeinf: + +class valstrvec_t(__builtin__.object) + | Proxy of C++ qvector< valstr_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> valstr_t + | + | __init__(self, *args) + | __init__(self) -> valstrvec_t + | __init__(self, x) -> valstrvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> valstr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> valstr_t + | begin(self) -> valstr_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> valstr_t + | end(self) -> valstr_t + | + | erase(self, *args) + | erase(self, it) -> valstr_t + | erase(self, first, last) -> valstr_t + | + | extract(self, *args) + | extract(self) -> valstr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=valstr_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> valstr_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> valstr_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_valstrvec_t(self) + +Help on function verify_argloc in module ida_typeinf: + +verify_argloc(*args) + verify_argloc(vloc, size, gaps) -> int + + + Verify 'argloc_t' . + + @param vloc (C++: const argloc_t &) + @param size: total size of the variable (C++: int) + @param gaps: if not NULL, specifies gaps in structure definition. + these gaps should not map to any argloc, but everything + else must be covered (C++: const rangeset_t *) + @return: 0 if ok, otherwise an interr code. + +Help on function verify_tinfo in module ida_typeinf: + +verify_tinfo(*args) + verify_tinfo(typid) -> int + +Help on function visit_subtypes in module ida_typeinf: + +visit_subtypes(*args) + visit_subtypes(visitor, out, tif, name, cmt) -> int + +Help on function write_tinfo_bitfield_value in module ida_typeinf: + +write_tinfo_bitfield_value(*args) + write_tinfo_bitfield_value(typid, dst, v, bitoff) -> uint64 + +=== ida_typeinf EPYDOC INJECTIONS === +ida_typeinf.ADDTIL_ABORTED +""" +til was not loaded (incompatible til rejected by user) +""" + +ida_typeinf.ADDTIL_COMP +""" +ok, but til is not compatible with the current compiler +""" + +ida_typeinf.ADDTIL_DEFAULT +""" +default behavior +""" + +ida_typeinf.ADDTIL_FAILED +""" +something bad, the warning is displayed +""" + +ida_typeinf.ADDTIL_INCOMP +""" +load incompatible tils +""" + +ida_typeinf.ADDTIL_OK +""" +ok, til is loaded +""" + +ida_typeinf.ADDTIL_SILENT +""" +do not ask any questions +""" + +ida_typeinf.CC_ALLOW_ARGPERM +""" +disregard argument order? +""" + +ida_typeinf.CC_ALLOW_REGHOLES +""" +allow holes in register argument list? +""" + +ida_typeinf.CC_CDECL_OK +""" +can use __cdecl calling convention? +""" + +ida_typeinf.CC_HAS_ELLIPSIS +""" +function has a variable list of arguments? +""" + +ida_typeinf.FAH_BYTE +""" +function argument attribute header byte +""" + +ida_typeinf.FAI_ARRAY +""" +was initially an array see "__org_typedef" or "__org_arrdim" type +attributes to determine the original type +""" + +ida_typeinf.FAI_HIDDEN +""" +hidden argument +""" + +ida_typeinf.FAI_RETPTR +""" +pointer to return value. implies hidden +""" + +ida_typeinf.FAI_STRUCT +""" +was initially a structure +""" + +ida_typeinf.FTI_ALL +""" +all defined bits +""" + +ida_typeinf.FTI_ARGLOCS +""" +(stkargs and retloc too) + +info about argument locations has been calculated +""" + +ida_typeinf.FTI_CALLTYPE +""" +mask for FTI_*CALL +""" + +ida_typeinf.FTI_DEFCALL +""" +default call +""" + +ida_typeinf.FTI_FARCALL +""" +far call +""" + +ida_typeinf.FTI_HIGH +""" +high level prototype (with possibly hidden args) +""" + +ida_typeinf.FTI_INTCALL +""" +interrupt call +""" + +ida_typeinf.FTI_NEARCALL +""" +near call +""" + +ida_typeinf.FTI_NORET +""" +noreturn +""" + +ida_typeinf.FTI_PURE +""" +__pure +""" + +ida_typeinf.FTI_SPOILED +""" +information about spoiled registers is present +""" + +ida_typeinf.FTI_STATIC +""" +static +""" + +ida_typeinf.FTI_VIRTUAL +""" +virtual +""" + +ida_typeinf.GUESS_FUNC_FAILED +""" +couldn't guess the function type +""" + +ida_typeinf.GUESS_FUNC_OK +""" +ok, some non-trivial information is gathered +""" + +ida_typeinf.GUESS_FUNC_TRIVIAL +""" +the function type doesn't have interesting info +""" + +ida_typeinf.HTI_CPP +""" +C++ mode (not implemented) +""" + +ida_typeinf.HTI_DCL +""" +don't complain about redeclarations +""" + +ida_typeinf.HTI_EXT +""" +debug: print external representation of types +""" + +ida_typeinf.HTI_FIL +""" +otherwise "input" contains a C declaration + +"input" is file name, +""" + +ida_typeinf.HTI_HIGH +""" +(with hidden args, etc) + +assume high level prototypes +""" + +ida_typeinf.HTI_INT +""" +debug: print internal representation of types +""" + +ida_typeinf.HTI_LEX +""" +debug: print tokens +""" + +ida_typeinf.HTI_LOWER +""" +lower the function prototypes +""" + +ida_typeinf.HTI_MAC +""" +define macros from the base tils +""" + +ida_typeinf.HTI_NDC +""" +don't decorate names +""" + +ida_typeinf.HTI_NER +""" +ignore all errors but display them +""" + +ida_typeinf.HTI_NWR +""" +no warning messages +""" + +ida_typeinf.HTI_PAK +""" +explicit structure pack value (#pragma pack) +""" + +ida_typeinf.HTI_PAK1 +""" +#pragma pack(1) +""" + +ida_typeinf.HTI_PAK16 +""" +#pragma pack(16) +""" + +ida_typeinf.HTI_PAK2 +""" +#pragma pack(2) +""" + +ida_typeinf.HTI_PAK4 +""" +#pragma pack(4) +""" + +ida_typeinf.HTI_PAK8 +""" +#pragma pack(8) +""" + +ida_typeinf.HTI_PAKDEF +""" +default pack value +""" + +ida_typeinf.HTI_PAK_SHIFT +""" +shift for 'HTI_PAK' . This field should be used if you want to +remember an explicit pack value for each structure/union type. See +'HTI_PAK' ... definitions +""" + +ida_typeinf.HTI_RAWARGS +""" +leave argument names unchanged (do not remove underscores) +""" + +ida_typeinf.HTI_TST +""" +test mode: discard the result +""" + +ida_typeinf.HTI_UNP +""" +debug: check the result by unpacking it +""" + +ida_typeinf.IMPTYPE_LOCAL +""" +the type is local, the struct/enum won't be marked as til type. there +is no need to specify this bit if til==idati, the kernel will set it +automatically +""" + +ida_typeinf.IMPTYPE_OVERRIDE +""" +override existing type +""" + +ida_typeinf.IMPTYPE_VERBOSE +""" +more verbose output (dialog boxes may appear) +""" + +ida_typeinf.MAX_FUNC_ARGS +""" +max number of function arguments +""" + +ida_typeinf.NTF_64BIT +""" +value is 64bit +""" + +ida_typeinf.NTF_CHKSYNC +""" +(set_numbered_type, set_named_type) + +check that synchronization to IDB passed OK +""" + +ida_typeinf.NTF_FIXNAME +""" +(set_named_type, set_numbered_type only) + +force-validate the name of the type when setting +""" + +ida_typeinf.NTF_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly (set_named_type, set_numbered_type only) +""" + +ida_typeinf.NTF_NOBASE +""" +don't inspect base tils (for get_named_type) +""" + +ida_typeinf.NTF_NOCUR +""" +don't inspect current til file (for get_named_type) +""" + +ida_typeinf.NTF_REPLACE +""" +replace original type (for set_named_type) +""" + +ida_typeinf.NTF_SYMM +""" +only one of 'NTF_TYPE' and 'NTF_SYMU' , 'NTF_SYMM' can be used + +symbol, name is mangled ('_func') +""" + +ida_typeinf.NTF_SYMU +""" +symbol, name is unmangled ('func') +""" + +ida_typeinf.NTF_TYPE +""" +type name +""" + +ida_typeinf.NTF_UMANGLED +""" +name is unmangled (don't use this flag) +""" + +ida_typeinf.PCN_CHR +""" +character +""" + +ida_typeinf.PCN_DEC +""" +decimal +""" + +ida_typeinf.PCN_DECSEXT +""" +automatically extend sign of signed decimal numbers +""" + +ida_typeinf.PCN_HEX +""" +hexadecimal +""" + +ida_typeinf.PCN_LZHEX +""" +print leading zeroes for hexdecimal number +""" + +ida_typeinf.PCN_NEGSIGN +""" +print negated value (-N) for negative numbers +""" + +ida_typeinf.PCN_OCT +""" +octal +""" + +ida_typeinf.PCN_RADIX +""" +number base to use +""" + +ida_typeinf.PCN_UNSIGNED +""" +add 'u' suffix +""" + +ida_typeinf.PDF_DEF_BASE +""" +Include base types: __int8, __int16, etc.. +""" + +ida_typeinf.PDF_DEF_FWD +""" +Allow forward declarations. +""" + +ida_typeinf.PDF_HEADER_CMT +""" +Prepend output with a descriptive comment. +""" + +ida_typeinf.PDF_INCL_DEPS +""" +Include all type dependencies. +""" + +ida_typeinf.PIO_IGNORE_PTRS +""" +do not follow pointers +""" + +ida_typeinf.PIO_NOATTR_FAIL +""" +missing attributes are not ok +""" + +ida_typeinf.PRALOC_STKOFF +""" +print stack offsets +""" + +ida_typeinf.PRALOC_VERIFY +""" +interr if illegal argloc +""" + +ida_typeinf.PRTYPE_1LINE +""" +print to one line +""" + +ida_typeinf.PRTYPE_COLORED +""" +add color tag COLOR_SYMBOL for any parentheses, commas and colons +""" + +ida_typeinf.PRTYPE_CPP +""" +use c++ name (only for 'print_type()' ) +""" + +ida_typeinf.PRTYPE_DEF +""" + 'tinfo_t' : print definition, if available +""" + +ida_typeinf.PRTYPE_MULTI +""" +print to many lines +""" + +ida_typeinf.PRTYPE_NOARGS +""" + 'tinfo_t' : do not print function argument names +""" + +ida_typeinf.PRTYPE_NOARRS +""" + 'tinfo_t' : print arguments with 'FAI_ARRAY' as pointers +""" + +ida_typeinf.PRTYPE_NOREGEX +""" +do not apply regular expressions to beautify name +""" + +ida_typeinf.PRTYPE_NORES +""" + 'tinfo_t' : never resolve types (meaningful with PRTYPE_DEF) +""" + +ida_typeinf.PRTYPE_PRAGMA +""" +print pragmas for alignment +""" + +ida_typeinf.PRTYPE_RESTORE +""" + 'tinfo_t' : print restored types for 'FAI_ARRAY' and 'FAI_STRUCT' +""" + +ida_typeinf.PRTYPE_SEMI +""" +append ; to the end +""" + +ida_typeinf.PRTYPE_TYPE +""" +print type declaration (not variable declaration) +""" + +ida_typeinf.PT_HIGH +""" +(with hidden args, etc) + +assume high level prototypes +""" + +ida_typeinf.PT_LOWER +""" +lower the function prototypes +""" + +ida_typeinf.PT_NDC +""" +don't decorate names +""" + +ida_typeinf.PT_PACKMASK +""" +mask for pack alignment values +""" + +ida_typeinf.PT_RAWARGS +""" +leave argument names unchanged (do not remove underscores) +""" + +ida_typeinf.PT_REPLACE +""" +replace the old type (used in idc) +""" + +ida_typeinf.PT_SIL +""" +silent, no messages +""" + +ida_typeinf.PT_TYP +""" +return declared type information +""" + +ida_typeinf.PT_VAR +""" +return declared object information +""" + +ida_typeinf.RESERVED_BYTE +""" +multifunctional purpose +""" + +ida_typeinf.SETCOMP_BY_USER +""" +invoked by user, cannot be replaced by module/loader +""" + +ida_typeinf.SETCOMP_ONLY_ABI +""" +ignore cc field complete, use only abiname +""" + +ida_typeinf.SETCOMP_ONLY_ID +""" +cc has only 'id' field the rest will be set to defaults corresponding +to the program bitness +""" + +ida_typeinf.SETCOMP_OVERRIDE +""" +may override old compiler info +""" + +ida_typeinf.STRMEM_ANON +""" +can be combined with 'STRMEM_NAME' : look inside anonymous members +too. +""" + +ida_typeinf.STRMEM_AUTO +""" +get member by offset if struct, or get member by index if union - nb: +union: index is stored in the udm->offset field!nb: struct: offset is +in bytes (not in bits)! +""" + +ida_typeinf.STRMEM_CASTABLE_TO +""" +can be combined with 'STRMEM_TYPE' : member type must be castable to +the specified type +""" + +ida_typeinf.STRMEM_INDEX +""" +get member by number- in: udm->offset - is a member number +""" + +ida_typeinf.STRMEM_MAXS +""" +get biggest member by size. +""" + +ida_typeinf.STRMEM_MINS +""" +get smallest member by size. +""" + +ida_typeinf.STRMEM_NAME +""" +get member by name- in: udm->name - the desired member name. +""" + +ida_typeinf.STRMEM_OFFSET +""" +get member by offset- in: udm->offset - is a member offset in bits +""" + +ida_typeinf.STRMEM_SIZE +""" +get member by size.- in: udm->size - the desired member size. +""" + +ida_typeinf.STRMEM_SKIP_EMPTY +""" +can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' skip empty +members (i.e. having zero size) only last empty member can be returned +""" + +ida_typeinf.STRMEM_TYPE +""" +get member by type. - in: udm->type - the desired member type. member +types are compared with tinfo_t::equals_to() +""" + +ida_typeinf.STRMEM_VFTABLE +""" +can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' get vftable +instead of the base class +""" + +ida_typeinf.SUDT_ALIGN +""" +to match the offsets and size info + +recalculate field alignments, struct packing, etc +""" + +ida_typeinf.SUDT_CONST +""" +only for serialize_udt: make type const +""" + +ida_typeinf.SUDT_FAST +""" +serialize without verifying offsets and alignments +""" + +ida_typeinf.SUDT_GAPS +""" +allow to fill gaps with additional members (_BYTE[]) +""" + +ida_typeinf.SUDT_SORT +""" +fields are not sorted by offset, sort them first +""" + +ida_typeinf.SUDT_TRUNC +""" +serialize: truncate useless strings from fields, fldcmts +""" + +ida_typeinf.SUDT_UNEX +""" +references to nonexistent member types are acceptable in this case it +is better to set the corresponding 'udt_member_t::fda' field to the +type alignment. if this field is not set, ida will try to guess the +alignment. +""" + +ida_typeinf.SUDT_VOLATILE +""" +only for serialize_udt: make type volatile +""" + +ida_typeinf.TAENUM_64BIT +""" +enum: store 64-bit values +""" + +ida_typeinf.TAENUM_SIGNED +""" +enum: signed +""" + +ida_typeinf.TAENUM_UNSIGNED +""" +enum: unsigned +""" + +ida_typeinf.TAFLD_BASECLASS +""" +field: do not include but inherit from the current field +""" + +ida_typeinf.TAFLD_UNALIGNED +""" +field: unaligned field +""" + +ida_typeinf.TAFLD_VFTABLE +""" +field: ptr to virtual function table +""" + +ida_typeinf.TAFLD_VIRTBASE +""" +field: virtual base (not supported yet) +""" + +ida_typeinf.TAH_ALL +""" +all defined bits +""" + +ida_typeinf.TAH_BYTE +""" +type attribute header byte +""" + +ida_typeinf.TAH_HASATTRS +""" +has extended attributes +""" + +ida_typeinf.TAPTR_PTR32 +""" +ptr: __ptr32 +""" + +ida_typeinf.TAPTR_PTR64 +""" +ptr: __ptr64 +""" + +ida_typeinf.TAPTR_RESTRICT +""" +ptr: __restrict +""" + +ida_typeinf.TAPTR_SHIFTED +""" +ptr: __shifted(parent_struct, delta) +""" + +ida_typeinf.TAUDT_CPPOBJ +""" +struct: a c++ object, not simple pod type +""" + +ida_typeinf.TAUDT_MSSTRUCT +""" +struct: gcc msstruct attribute +""" + +ida_typeinf.TAUDT_UNALIGNED +""" +struct: unaligned struct +""" + +ida_typeinf.TAUDT_VFTABLE +""" +struct: is virtual function table +""" + +ida_typeinf.TA_FORMAT +""" +info about the 'format' argument 3 times pack_dd: 'format_functype_t' +, argument number of 'format', argument number of '...' +""" + +ida_typeinf.TA_ORG_ARRDIM +""" +the original array dimension (pack_dd) +""" + +ida_typeinf.TA_ORG_TYPEDEF +""" +the original typedef name (simple string) +""" + +ida_typeinf.TCMP_ANYBASE +""" +accept any base class when casting +""" + +ida_typeinf.TCMP_AUTOCAST +""" +can t1 be cast into t2 automatically? +""" + +ida_typeinf.TCMP_CALL +""" +can t1 be called with t2 type? +""" + +ida_typeinf.TCMP_DECL +""" +compare declarations without resolving them +""" + +ida_typeinf.TCMP_DELPTR +""" +remove pointer from types before comparing +""" + +ida_typeinf.TCMP_EQUAL +""" +are types equal? +""" + +ida_typeinf.TCMP_IGNMODS +""" +ignore const/volatile modifiers +""" + +ida_typeinf.TCMP_MANCAST +""" +can t1 be cast into t2 manually? +""" + +ida_typeinf.TCMP_SKIPTHIS +""" +skip the first function argument in comparison +""" + +ida_typeinf.TIL_ADD_ALREADY +""" +the base til was already added +""" + +ida_typeinf.TIL_ADD_FAILED +""" +see errbuf +""" + +ida_typeinf.TIL_ADD_OK +""" +some tils were added +""" + +ida_typeinf.TIL_ALI +""" +type aliases are present (this bit is used only on the disk) +""" + +ida_typeinf.TIL_ESI +""" +extended sizeof info (short, long, longlong) +""" + +ida_typeinf.TIL_MAC +""" +til has macro table +""" + +ida_typeinf.TIL_MOD +""" +til has been modified, should be saved +""" + +ida_typeinf.TIL_ORD +""" +type ordinal numbers are present +""" + +ida_typeinf.TIL_SLD +""" +sizeof(long double) +""" + +ida_typeinf.TIL_STM +""" +til has extra streams +""" + +ida_typeinf.TIL_UNI +""" +universal til for any compiler +""" + +ida_typeinf.TIL_ZIP +""" +pack buckets using zip +""" + +ida_typeinf.TINFO_DEFINITE +""" +this is a definite type +""" + +ida_typeinf.TINFO_DELAYFUNC +""" +if type is a function and no function exists at ea, schedule its +creation and argument renaming to auto-analysis otherwise try to +create it immediately +""" + +ida_typeinf.TINFO_GUESSED +""" +this is a guessed type +""" + +ida_typeinf.TINFO_STRICT +""" +never convert given type to another one before applying +""" + +ida_typeinf.TVIS_CMT +""" +new comment is present +""" + +ida_typeinf.TVIS_NAME +""" +new name is present +""" + +ida_typeinf.TVIS_TYPE +""" +new type info is present +""" + +ida_typeinf.TVST_DEF +""" +visit type definition (meaningful for typerefs) +""" + +ida_typeinf.TVST_PRUNE +""" +don't visit children of current type +""" + +ida_typeinf.VALSTR_OPEN +""" +printed opening curly brace '{' +""" +=== ida_typeinf EPYDOC INJECTIONS END === +Help on function calc_dataseg in module ida_ua: + +calc_dataseg(*args) + calc_dataseg(insn, n=-1, rgnum=-1) -> ea_t + + + Get data segment for the instruction operand. 'opnum' and 'rgnum' are + meaningful only if the processor has segment registers. + + @param insn (C++: const insn_t &) + @param n (C++: int) + @param rgnum (C++: int) + +Help on function can_decode in module ida_ua: + +can_decode(*args) + can_decode(ea) -> bool + + + Can the bytes at address 'ea' be decoded as instruction? + + @param ea: linear address (C++: ea_t) + @return: whether or not the contents at that address could be a valid + instruction + +Help on function construct_macro in module ida_ua: + +construct_macro(*args) + construct_macro(insn, enable, build_macro) -> bool + + + See ua.hpp's construct_macro(). + +Help on function create_insn in module ida_ua: + +create_insn(*args) + create_insn(ea, out=None) -> int + + + Create an instruction at the specified address. This function checks + if an instruction is present at the specified address and will try to + create one if there is none. It will fail if there is a data item or + other items hindering the creation of the new instruction. This + function will also fill the 'out' structure. + + @param ea: linear address (C++: ea_t) + @param out: the resulting instruction (C++: insn_t *) + @return: the length of the instruction or 0 + +Help on function create_outctx in module ida_ua: + +create_outctx(*args) + create_outctx(ea, F=0, suspop=0) -> outctx_base_t + + + Create a new output context. To delete it, just use "delete pctx" + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param suspop (C++: int) + +Help on function decode_insn in module ida_ua: + +decode_insn(*args) + decode_insn(out, ea) -> int + + + Analyze the specified address and fill 'out'. This function does not + modify the database. It just tries to interpret the specified address + as an instruction and fills the 'out' structure. + + @param out: the resulting instruction (C++: insn_t *) + @param ea: linear address (C++: ea_t) + @return: the length of the (possible) instruction or 0 + +Help on function decode_preceding_insn in module ida_ua: + +decode_preceding_insn(*args) + decode_preceding_insn(out, ea) -> PyObject * + + + Decodes the preceding instruction. Please check ua.hpp / decode_preceding_insn() + @param ea: current ea + @param out: instruction storage + @return: tuple(preceeding_ea or BADADDR, farref = Boolean) + +Help on function decode_prev_insn in module ida_ua: + +decode_prev_insn(*args) + decode_prev_insn(out, ea) -> ea_t + + + Decode previous instruction if it exists, fill 'out'. + + @param out: the resulting instruction (C++: insn_t *) + @param ea: the address to decode the previous instruction from (C++: + ea_t) + @return: the previous instruction address ( BADADDR -no such insn) + +Help on function get_dtype_by_size in module ida_ua: + +get_dtype_by_size(*args) + get_dtype_by_size(size) -> int + + + Get 'op_t::dtype' from size. + + + @param size (C++: asize_t) + +Help on function get_dtype_flag in module ida_ua: + +get_dtype_flag(*args) + get_dtype_flag(dtype) -> flags_t + + + Get flags for 'op_t::dtype' field. + + + @param dtype (C++: op_dtype_t) + +Help on function get_dtype_size in module ida_ua: + +get_dtype_size(*args) + get_dtype_size(dtype) -> size_t + + + Get size of opt_::dtype field. + + + @param dtype (C++: op_dtype_t) + +Help on function get_immvals in module ida_ua: + +get_immvals(*args) + get_immvals(ea, n, F=0) -> PyObject * + + + Get immediate values at the specified address. This function decodes + instruction at the specified address or inspects the data item. It + finds immediate values and copies them to 'out'. This function will + store the original value of the operands in 'out', unless the last + bits of 'F' are "...0 11111111", in which case the transformed values + (as needed for printing) will be stored instead. + + @param ea: address to analyze (C++: ea_t) + @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands + (C++: int) + @param F: flags for the specified address (C++: flags_t) + @return: number of immediate values (0..2* UA_MAXOP ) + +Help on function get_lookback in module ida_ua: + +get_lookback(*args) + get_lookback() -> int + + + Number of instructions to look back. This variable is not used by the + kernel. Its value may be specified in ida.cfg: LOOKBACK = . + IDP may use it as you like it. (TMS module uses it) + +Help on function get_printable_immvals in module ida_ua: + +get_printable_immvals(*args) + get_printable_immvals(ea, n, F=0) -> PyObject * + + + Get immediate ready-to-print values at the specified address + + @param ea: address to analyze (C++: ea_t) + @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands + (C++: int) + @param F: flags for the specified address (C++: flags_t) + @return: number of immediate values (0..2* UA_MAXOP ) + +Help on function guess_table_address in module ida_ua: + +guess_table_address(*args) + guess_table_address(insn) -> ea_t + + + Guess the jump table address (ibm pc specific) + + + @param insn (C++: const insn_t &) + +Help on function guess_table_size in module ida_ua: + +guess_table_size(*args) + guess_table_size(insn, jump_table) -> asize_t + + + Guess the jump table size. + + + @param insn (C++: const insn_t &) + @param jump_table (C++: ea_t) + +Help on function insn_add_cref in module ida_ua: + +insn_add_cref(*args) + insn_add_cref(insn, to, opoff, type) + +Help on function insn_add_dref in module ida_ua: + +insn_add_dref(*args) + insn_add_dref(insn, to, opoff, type) + +Help on function insn_add_off_drefs in module ida_ua: + +insn_add_off_drefs(*args) + insn_add_off_drefs(insn, x, type, outf) -> ea_t + +Help on function insn_create_stkvar in module ida_ua: + +insn_create_stkvar(*args) + insn_create_stkvar(insn, x, v, flags) -> bool + +Help on class insn_t in module ida_ua: + +class insn_t(__builtin__.object) + | Proxy of C++ insn_t class. + | + | Methods defined here: + | + | __get_auxpref__(self, *args) + | __get_auxpref__(self) -> uint16 + | + | __get_operand__(self, *args) + | __get_operand__(self, n) -> op_t + | + | __get_ops__(self, *args) + | __get_ops__(self) -> operands_array + | + | __getitem__(self, idx) + | Operands can be accessed directly as indexes + | @return op_t: Returns an operand of type op_t + | + | __init__(self, *args) + | __init__(self) -> insn_t + | + | __iter__(self) + | + | __repr__ = _swig_repr(self) + | + | __set_auxpref__(self, *args) + | __set_auxpref__(self, v) + | + | add_cref(self, *args) + | add_cref(self, to, opoff, type) + | + | add_dref(self, *args) + | add_dref(self, to, opoff, type) + | + | add_off_drefs(self, *args) + | add_off_drefs(self, x, type, outf) -> ea_t + | + | assign(self, *args) + | assign(self, other) + | + | create_op_data(self, *args) + | create_op_data(self, ea_, opoff, dtype) -> bool + | create_op_data(self, ea_, op) -> bool + | + | create_stkvar(self, *args) + | create_stkvar(self, x, v, flags_) -> bool + | + | get_canon_feature(self, *args) + | get_canon_feature(self) -> uint32 + | + | get_canon_mnem(self, *args) + | get_canon_mnem(self) -> char const * + | + | get_next_byte(self, *args) + | get_next_byte(self) -> uint8 + | + | get_next_dword(self, *args) + | get_next_dword(self) -> uint32 + | + | get_next_qword(self, *args) + | get_next_qword(self) -> uint64 + | + | get_next_word(self, *args) + | get_next_word(self) -> uint16 + | + | is_64bit(self, *args) + | is_64bit(self) -> bool + | + | is_canon_insn(self, *args) + | is_canon_insn(self) -> bool + | + | is_macro(self, *args) + | is_macro(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Op1 + | + | Op2 + | + | Op3 + | + | Op4 + | + | Op5 + | + | Op6 + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | auxpref + | __get_auxpref__(self) -> uint16 + | + | cs + | insn_t_cs_get(self) -> ea_t + | + | ea + | insn_t_ea_get(self) -> ea_t + | + | flags + | insn_t_flags_get(self) -> int16 + | + | insnpref + | insn_t_insnpref_get(self) -> char + | + | ip + | insn_t_ip_get(self) -> ea_t + | + | itype + | insn_t_itype_get(self) -> uint16 + | + | ops + | __get_ops__(self) -> operands_array + | + | segpref + | insn_t_segpref_get(self) -> char + | + | size + | insn_t_size_get(self) -> uint16 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_insn_t(self) + +Help on function insn_t__from_ptrval__ in module ida_ua: + +insn_t__from_ptrval__(*args) + insn_t__from_ptrval__(ptrval) -> insn_t + +Help on function is_floating_dtype in module ida_ua: + +is_floating_dtype(*args) + is_floating_dtype(dtype) -> bool + + + Is a floating type operand? + + + @param dtype (C++: op_dtype_t) + +Help on function map_code_ea in module ida_ua: + +map_code_ea(*args) + map_code_ea(insn, addr, opnum) -> ea_t + map_code_ea(insn, op) -> ea_t + + + Map a code address. This function takes into account the segment + translations. + + @param insn: the current instruction (C++: const insn_t &) + @param addr: the referenced address to map (C++: ea_t) + @param opnum: operand number (C++: int) + +Help on function map_data_ea in module ida_ua: + +map_data_ea(*args) + map_data_ea(insn, addr, opnum=-1) -> ea_t + map_data_ea(insn, op) -> ea_t + + + Map a data address. + + @param insn: the current instruction (C++: const insn_t &) + @param addr: the referenced address to map (C++: ea_t) + @param opnum: operand number (C++: int) + +Help on function map_ea in module ida_ua: + +map_ea(*args) + map_ea(insn, op, iscode) -> ea_t + map_ea(insn, addr, opnum, iscode) -> ea_t + +Help on class op_t in module ida_ua: + +class op_t(__builtin__.object) + | Proxy of C++ op_t class. + | + | Methods defined here: + | + | __get_addr__(self, *args) + | __get_addr__(self) -> ea_t + | + | __get_reg_phrase__(self, *args) + | __get_reg_phrase__(self) -> uint16 + | + | __get_specval__(self, *args) + | __get_specval__(self) -> ea_t + | + | __get_value__(self, *args) + | __get_value__(self) -> ea_t + | + | __init__(self, *args) + | __init__(self) -> op_t + | + | __repr__ = _swig_repr(self) + | + | __set_addr__(self, *args) + | __set_addr__(self, v) + | + | __set_reg_phrase__(self, *args) + | __set_reg_phrase__(self, r) + | + | __set_specval__(self, *args) + | __set_specval__(self, v) + | + | __set_value__(self, *args) + | __set_value__(self, v) + | + | assign(self, *args) + | assign(self, other) + | + | clr_shown(self, *args) + | clr_shown(self) + | + | has_reg(self, r) + | Checks if the operand accesses the given processor register + | + | is_imm(self, *args) + | is_imm(self, v) -> bool + | + | is_reg(self, *args) + | is_reg(self, r) -> bool + | + | set_shown(self, *args) + | set_shown(self) + | + | shown(self, *args) + | shown(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | addr + | __get_addr__(self) -> ea_t + | + | dtype + | op_t_dtype_get(self) -> op_dtype_t + | + | flags + | op_t_flags_get(self) -> uchar + | + | n + | op_t_n_get(self) -> uchar + | + | offb + | op_t_offb_get(self) -> char + | + | offo + | op_t_offo_get(self) -> char + | + | phrase + | __get_reg_phrase__(self) -> uint16 + | + | reg + | __get_reg_phrase__(self) -> uint16 + | + | specflag1 + | op_t_specflag1_get(self) -> char + | + | specflag2 + | op_t_specflag2_get(self) -> char + | + | specflag3 + | op_t_specflag3_get(self) -> char + | + | specflag4 + | op_t_specflag4_get(self) -> char + | + | specval + | __get_specval__(self) -> ea_t + | + | thisown + | The membership flag + | + | type + | op_t_type_get(self) -> optype_t + | + | value + | __get_value__(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_op_t(self) + +Help on function op_t__from_ptrval__ in module ida_ua: + +op_t__from_ptrval__(*args) + op_t__from_ptrval__(ptrval) -> op_t + +Help on class operands_array in module ida_ua: + +class operands_array(__builtin__.object) + | Proxy of C++ wrapped_array_t< op_t,8 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> op_t + | + | __init__(self, *args) + | __init__(self, data) -> operands_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | operands_array_data_get(self) -> op_t (&)[8] + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_operands_array(self) + +Help on class outctx_base_t in module ida_ua: + +class outctx_base_t(__builtin__.object) + | Proxy of C++ outctx_base_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | close_comment(self, *args) + | close_comment(self) + | + | clr_gen_label(self, *args) + | clr_gen_label(self) + | + | display_voids(self, *args) + | display_voids(self) -> bool + | + | flush_buf(self, *args) + | flush_buf(self, buf, indent=-1) -> bool + | + | flush_outbuf(self, *args) + | flush_outbuf(self, indent=-1) -> bool + | + | forbid_annotations(self, *args) + | forbid_annotations(self) -> int + | + | force_code(self, *args) + | force_code(self) -> bool + | + | gen_block_cmt(self, *args) + | gen_block_cmt(self, cmt, color) -> bool + | + | gen_border_line(self, *args) + | gen_border_line(self, solid=False) -> bool + | + | gen_cmt_line(self, *args) + | gen_cmt_line(self, format) -> bool + | + | gen_collapsed_line(self, *args) + | gen_collapsed_line(self, format) -> bool + | + | gen_empty_line(self, *args) + | gen_empty_line(self) -> bool + | + | gen_empty_line_without_annotations(self, *args) + | gen_empty_line_without_annotations(self) + | + | gen_printf(self, *args) + | gen_printf(self, indent, format) -> bool + | + | gen_xref_lines(self, *args) + | gen_xref_lines(self) -> bool + | + | get_stkvar(self, *args) + | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * + | + | init_lines_array(self, *args) + | init_lines_array(self, answers, maxsize) + | + | multiline(self, *args) + | multiline(self) -> bool + | + | only_main_line(self, *args) + | only_main_line(self) -> bool + | + | out_addr_tag(self, *args) + | out_addr_tag(self, ea) + | + | out_btoa(self, *args) + | out_btoa(self, Word, radix=0) + | + | out_char(self, *args) + | out_char(self, c) + | + | out_chars(self, *args) + | out_chars(self, c, n) + | + | out_colored_register_line(self, *args) + | out_colored_register_line(self, str) + | + | out_keyword(self, *args) + | out_keyword(self, str) + | + | out_line(self, *args) + | out_line(self, str, color=0) + | + | out_long(self, *args) + | out_long(self, v, radix) + | + | out_name_expr(self, *args) + | out_name_expr(self, x, ea, off=BADADDR) -> bool + | + | out_printf(self, *args) + | out_printf(self, format) + | + | out_register(self, *args) + | out_register(self, str) + | + | out_spaces(self, *args) + | out_spaces(self, len) + | + | out_symbol(self, *args) + | out_symbol(self, c) + | + | out_tagoff(self, *args) + | out_tagoff(self, tag) + | + | out_tagon(self, *args) + | out_tagon(self, tag) + | + | out_value(self, *args) + | out_value(self, x, outf=0) -> flags_t + | + | print_label_now(self, *args) + | print_label_now(self) -> bool + | + | restore_ctxflags(self, *args) + | restore_ctxflags(self, saved_flags) + | + | retrieve_cmt(self, *args) + | retrieve_cmt(self) -> ssize_t + | + | retrieve_name(self, *args) + | retrieve_name(self, arg2, arg3) -> ssize_t + | + | set_comment_addr(self, *args) + | set_comment_addr(self, ea) + | + | set_dlbind_opnd(self, *args) + | set_dlbind_opnd(self) + | + | set_gen_cmt(self, *args) + | set_gen_cmt(self, on=True) + | + | set_gen_demangled_label(self, *args) + | set_gen_demangled_label(self) + | + | set_gen_label(self, *args) + | set_gen_label(self) + | + | set_gen_xrefs(self, *args) + | set_gen_xrefs(self, on=True) + | + | setup_outctx(self, *args) + | setup_outctx(self, prefix, makeline_flags) + | + | stack_view(self, *args) + | stack_view(self) -> bool + | + | term_outctx(self, *args) + | term_outctx(self, prefix=None) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | default_lnnum + | outctx_base_t_default_lnnum_get(self) -> int + | + | insn_ea + | outctx_base_t_insn_ea_get(self) -> ea_t + | + | outbuf + | outctx_base_t_outbuf_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on function outctx_base_t__from_ptrval__ in module ida_ua: + +outctx_base_t__from_ptrval__(*args) + outctx_base_t__from_ptrval__(ptrval) -> outctx_base_t + +Help on class outctx_t in module ida_ua: + +class outctx_t(outctx_base_t) + | Proxy of C++ outctx_t class. + | + | Method resolution order: + | outctx_t + | outctx_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | gen_func_footer(self, *args) + | gen_func_footer(self, pfn) + | + | gen_func_header(self, *args) + | gen_func_header(self, pfn) + | + | gen_header(self, *args) + | gen_header(self, flags=((1 << 0)|(1 << 1)), proc_name=None, proc_flavour=None) + | + | gen_header_extra(self, *args) + | gen_header_extra(self) + | + | gen_xref_lines(self, *args) + | gen_xref_lines(self) -> bool + | + | out_custom_mnem(self, *args) + | out_custom_mnem(self, mnem, width=8, postfix=None) + | + | out_data(self, *args) + | out_data(self, analyze_only) + | + | out_immchar_cmts(self, *args) + | out_immchar_cmts(self) + | + | out_mnem(self, *args) + | out_mnem(self, width=8, postfix=None) + | + | out_mnemonic(self, *args) + | out_mnemonic(self) + | + | out_one_operand(self, *args) + | out_one_operand(self, n) -> bool + | + | out_specea(self, *args) + | out_specea(self, segtype) -> bool + | + | retrieve_cmt(self, *args) + | retrieve_cmt(self) -> ssize_t + | + | retrieve_name(self, *args) + | retrieve_name(self, arg2, arg3) -> ssize_t + | + | set_bin_state(self, *args) + | set_bin_state(self, value) + | + | setup_outctx(self, *args) + | setup_outctx(self, prefix, flags) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bin_ea + | outctx_t_bin_ea_get(self) -> ea_t + | + | bin_state + | outctx_t_bin_state_get(self) -> char + | + | bin_width + | outctx_t_bin_width_get(self) -> int + | + | curlabel + | outctx_t_curlabel_get(self) -> qstring * + | + | gl_bpsize + | outctx_t_gl_bpsize_get(self) -> int + | + | insn + | outctx_t_insn_get(self) -> insn_t + | + | thisown + | The membership flag + | + | wif + | outctx_t_wif_get(self) -> printop_t + | + | ---------------------------------------------------------------------- + | Methods inherited from outctx_base_t: + | + | close_comment(self, *args) + | close_comment(self) + | + | clr_gen_label(self, *args) + | clr_gen_label(self) + | + | display_voids(self, *args) + | display_voids(self) -> bool + | + | flush_buf(self, *args) + | flush_buf(self, buf, indent=-1) -> bool + | + | flush_outbuf(self, *args) + | flush_outbuf(self, indent=-1) -> bool + | + | forbid_annotations(self, *args) + | forbid_annotations(self) -> int + | + | force_code(self, *args) + | force_code(self) -> bool + | + | gen_block_cmt(self, *args) + | gen_block_cmt(self, cmt, color) -> bool + | + | gen_border_line(self, *args) + | gen_border_line(self, solid=False) -> bool + | + | gen_cmt_line(self, *args) + | gen_cmt_line(self, format) -> bool + | + | gen_collapsed_line(self, *args) + | gen_collapsed_line(self, format) -> bool + | + | gen_empty_line(self, *args) + | gen_empty_line(self) -> bool + | + | gen_empty_line_without_annotations(self, *args) + | gen_empty_line_without_annotations(self) + | + | gen_printf(self, *args) + | gen_printf(self, indent, format) -> bool + | + | get_stkvar(self, *args) + | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * + | + | init_lines_array(self, *args) + | init_lines_array(self, answers, maxsize) + | + | multiline(self, *args) + | multiline(self) -> bool + | + | only_main_line(self, *args) + | only_main_line(self) -> bool + | + | out_addr_tag(self, *args) + | out_addr_tag(self, ea) + | + | out_btoa(self, *args) + | out_btoa(self, Word, radix=0) + | + | out_char(self, *args) + | out_char(self, c) + | + | out_chars(self, *args) + | out_chars(self, c, n) + | + | out_colored_register_line(self, *args) + | out_colored_register_line(self, str) + | + | out_keyword(self, *args) + | out_keyword(self, str) + | + | out_line(self, *args) + | out_line(self, str, color=0) + | + | out_long(self, *args) + | out_long(self, v, radix) + | + | out_name_expr(self, *args) + | out_name_expr(self, x, ea, off=BADADDR) -> bool + | + | out_printf(self, *args) + | out_printf(self, format) + | + | out_register(self, *args) + | out_register(self, str) + | + | out_spaces(self, *args) + | out_spaces(self, len) + | + | out_symbol(self, *args) + | out_symbol(self, c) + | + | out_tagoff(self, *args) + | out_tagoff(self, tag) + | + | out_tagon(self, *args) + | out_tagon(self, tag) + | + | out_value(self, *args) + | out_value(self, x, outf=0) -> flags_t + | + | print_label_now(self, *args) + | print_label_now(self) -> bool + | + | restore_ctxflags(self, *args) + | restore_ctxflags(self, saved_flags) + | + | set_comment_addr(self, *args) + | set_comment_addr(self, ea) + | + | set_dlbind_opnd(self, *args) + | set_dlbind_opnd(self) + | + | set_gen_cmt(self, *args) + | set_gen_cmt(self, on=True) + | + | set_gen_demangled_label(self, *args) + | set_gen_demangled_label(self) + | + | set_gen_label(self, *args) + | set_gen_label(self) + | + | set_gen_xrefs(self, *args) + | set_gen_xrefs(self, on=True) + | + | stack_view(self, *args) + | stack_view(self) -> bool + | + | term_outctx(self, *args) + | term_outctx(self, prefix=None) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from outctx_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | default_lnnum + | outctx_base_t_default_lnnum_get(self) -> int + | + | insn_ea + | outctx_base_t_insn_ea_get(self) -> ea_t + | + | outbuf + | outctx_base_t_outbuf_get(self) -> qstring * + +Help on function outctx_t__from_ptrval__ in module ida_ua: + +outctx_t__from_ptrval__(*args) + outctx_t__from_ptrval__(ptrval) -> outctx_t + +Help on function print_insn_mnem in module ida_ua: + +print_insn_mnem(*args) + print_insn_mnem(ea) -> str + + + Print instruction mnemonics. + + @param ea: linear address of the instruction (C++: ea_t) + @return: success + +Help on function print_operand in module ida_ua: + +print_operand(*args) + print_operand(ea, n, getn_flags=0, newtype=None) -> str + + + Generate text representation for operand #n. This function will + generate the text representation of the specified operand (includes + color codes.) + + @param ea: the item address (instruction or data) (C++: ea_t) + @param n: operand number (0,1,2...). meaningful only for instructions + (C++: int) + @param getn_flags (C++: int) + @param newtype: if specified, print the operand using the specified + type (C++: struct printop_t *) + @return: success + +=== ida_ua EPYDOC INJECTIONS === +ida_ua.FCBF_CONT +""" +don't stop on decoding, or any other kind of error +""" + +ida_ua.FCBF_DELIM +""" +add the 'ash'-specified delimiters around the generated data. Note: if +those are not defined and the INFFL_ALLASM is not set, +'format_charlit()' will return an error +""" + +ida_ua.FCBF_ERR_REPL +""" +of a hex representation of the problematic byte + +in case of an error, use a CP_REPLCHAR instead +""" + +ida_ua.FCBF_FF_LIT +""" +in case of codepoints == 0xFF, use it as-is (i.e., LATIN SMALL LETTER +Y WITH DIAERESIS) If both this, and FCBF_REPL are specified, this will +take precedence +""" + +ida_ua.INSN_64BIT +""" +belongs to 64bit segment? +""" + +ida_ua.INSN_MACRO +""" +macro instruction +""" + +ida_ua.INSN_MODMAC +""" +may modify the database to make room for the macro insn +""" + +ida_ua.OF_NO_BASE_DISP +""" +base displacement doesn't exist. meaningful only for 'o_displ' type. +if set, base displacement ( 'op_t::addr' ) doesn't exist. +""" + +ida_ua.OF_NUMBER +""" +the operand can be converted to a number only +""" + +ida_ua.OF_OUTER_DISP +""" +outer displacement exists. meaningful only for 'o_displ' type. if set, +outer displacement ( 'op_t::value' ) exists. +""" + +ida_ua.OF_SHOW +""" +should the operand be displayed? +""" + +ida_ua.OOFS_IFSIGN +""" +output sign if needed +""" + +ida_ua.OOFS_NEEDSIGN +""" +always out sign (+-) +""" + +ida_ua.OOFS_NOSIGN +""" +don't output sign, forbid the user to change the sign +""" + +ida_ua.OOFW_16 +""" +16 bit width +""" + +ida_ua.OOFW_24 +""" +24 bit width +""" + +ida_ua.OOFW_32 +""" +32 bit width +""" + +ida_ua.OOFW_64 +""" +64 bit width +""" + +ida_ua.OOFW_8 +""" +8 bit width +""" + +ida_ua.OOFW_IMM +""" +take from x.dtype +""" + +ida_ua.OOF_ADDR +""" +output x.addr, otherwise x.value +""" + +ida_ua.OOF_ANYSERIAL +""" +if enum: select first available serial +""" + +ida_ua.OOF_NOBNOT +""" +prohibit use of binary not +""" + +ida_ua.OOF_NUMBER +""" +always as a number +""" + +ida_ua.OOF_OUTER +""" +output outer operand +""" + +ida_ua.OOF_SIGNED +""" +output as signed if < 0 +""" + +ida_ua.OOF_SIGNMASK +""" +sign symbol (+/-) output +""" + +ida_ua.OOF_SPACES +""" +currently works only for floating point numbers + +do not suppress leading spaces +""" + +ida_ua.OOF_WIDTHMASK +""" +width of value in bits +""" + +ida_ua.OOF_ZSTROFF +""" +meaningful only if is_stroff(uFlag) append a struct field name if the +field offset is zero? if 'AFL_ZSTROFF' is set, then this flag is +ignored. +""" + +ida_ua.PACK_FORM_DEF +""" +(! 'o_reg' + 'dt_packreal' ) + +packed factor defined. +""" + +ida_ua.dt_bitfild +""" +bit field (mc680x0) +""" + +ida_ua.dt_byte +""" +8 bit integer +""" + +ida_ua.dt_byte16 +""" +128 bit integer +""" + +ida_ua.dt_byte32 +""" +256 bit integer +""" + +ida_ua.dt_byte64 +""" +512 bit integer +""" + +ida_ua.dt_code +""" +ptr to code (not used?) +""" + +ida_ua.dt_double +""" +8 byte floating point +""" + +ida_ua.dt_dword +""" +32 bit integer +""" + +ida_ua.dt_float +""" +4 byte floating point +""" + +ida_ua.dt_fword +""" +48 bit +""" + +ida_ua.dt_half +""" +2-byte floating point +""" + +ida_ua.dt_ldbl +""" +long double (which may be different from tbyte) +""" + +ida_ua.dt_packreal +""" +packed real format for mc68040 +""" + +ida_ua.dt_qword +""" +64 bit integer +""" + +ida_ua.dt_string +""" +pointer to asciiz string +""" + +ida_ua.dt_tbyte +""" +variable size (\\ph{tbyte_size}) floating point +""" + +ida_ua.dt_unicode +""" +pointer to unicode string +""" + +ida_ua.dt_void +""" +none +""" + +ida_ua.dt_word +""" +16 bit integer +""" +=== ida_ua EPYDOC INJECTIONS END === +Help on function add_cref in module ida_xref: + +add_cref(*args) + add_cref(frm, to, type) -> bool + + + Create a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param type: cross-reference type (C++: cref_t) + @return: success + +Help on function add_dref in module ida_xref: + +add_dref(*args) + add_dref(frm, to, type) -> bool + + + Create a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + @param type: cross-reference type (C++: dref_t) + @return: success (may fail if user-defined xref exists from->to) + +Help on function calc_switch_cases in module ida_xref: + +calc_switch_cases(*args) + calc_switch_cases(ea, si) -> cases_and_targets_t + + + Get information about a switch's cases. + + The returned information can be used as follows: + + for idx in range(len(results.cases)): + cur_case = results.cases[idx] + for cidx in range(len(cur_case)): + print("case: %d" % cur_case[cidx]) + print(" goto 0x%x" % results.targets[idx]) + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: a structure with 2 members: 'cases', and 'targets'. + +Help on class cases_and_targets_t in module ida_xref: + +class cases_and_targets_t(__builtin__.object) + | Proxy of C++ cases_and_targets_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cases_and_targets_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cases + | cases_and_targets_t_cases_get(self) -> casevec_t + | + | targets + | cases_and_targets_t_targets_get(self) -> eavec_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cases_and_targets_t(self) + +Help on class casevec_t in module ida_xref: + +class casevec_t(__builtin__.object) + | Proxy of C++ qvector< qvector< sval_t > > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> qvector< signed-ea-like-numeric-type > const &↗ + | + | __init__(self, *args) + | __init__(self) -> casevec_t + | __init__(self, x) -> casevec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | erase(self, *args) + | erase(self, it) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | erase(self, first, last) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | + | extract(self, *args) + | extract(self) -> qvector< signed-ea-like-numeric-type > *↗ + | + | find(self, *args) + | find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=qvector< signed-ea-like-numeric-type >())↗ + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> qvector< signed-ea-like-numeric-type > &↗ + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_casevec_t(self) + +Help on function create_switch_table in module ida_xref: + +create_switch_table(*args) + create_switch_table(ea, si) -> bool + + + Create switch table from the switch information + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: Boolean + +Help on function create_switch_xrefs in module ida_xref: + +create_switch_xrefs(*args) + create_switch_xrefs(ea, si) -> bool + + + This function creates xrefs from the indirect jump. + + Usually there is no need to call this function directly because the kernel + will call it for switch tables + + Note: Custom switch information are not supported yet. + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: Boolean + +Help on function del_cref in module ida_xref: + +del_cref(*args) + del_cref(frm, to, expand) -> int + + + Delete a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param expand: policy to delete the referenced instruction 1: plan + to delete the referenced instruction if it has no more + references. 0: don't delete the referenced + instruction even if no more cross-references point to + it (C++: bool) + +Help on function del_dref in module ida_xref: + +del_dref(*args) + del_dref(frm, to) + + + Delete a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + +Help on function delete_switch_table in module ida_xref: + +delete_switch_table(*args) + delete_switch_table(jump_ea, si) + +Help on function get_first_cref_from in module ida_xref: + +get_first_cref_from(*args) + get_first_cref_from(frm) -> ea_t + + + Get first instruction referenced from the specified instruction. If + the specified instruction passes execution to the next instruction + then the next instruction is returned. Otherwise the lowest referenced + address is returned (remember that xrefs are kept sorted!). + + @return: first referenced address. The lastXR variable contains type + of the reference. If the specified instruction doesn't + reference to other instructions then returns BADADDR . + +Help on function get_first_cref_to in module ida_xref: + +get_first_cref_to(*args) + get_first_cref_to(to) -> ea_t + + + Get first instruction referencing to the specified instruction. If the + specified instruction may be executed immediately after its previous + instruction then the previous instruction is returned. Otherwise the + lowest referencing address is returned. (remember that xrefs are kept + sorted!). + + @param to: linear address of referenced instruction (C++: ea_t) + @return: linear address of the first referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_first_dref_from in module ida_xref: + +get_first_dref_from(*args) + get_first_dref_from(frm) -> ea_t + + + Get first data referenced from the specified address. + + @return: linear address of first (lowest) data referenced from the + specified address. The lastXR variable contains type of the + reference. Return BADADDR if the specified instruction/data + doesn't reference to anything. + +Help on function get_first_dref_to in module ida_xref: + +get_first_dref_to(*args) + get_first_dref_to(to) -> ea_t + + + Get address of instruction/data referencing to the specified data. + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_first_fcref_from in module ida_xref: + +get_first_fcref_from(*args) + get_first_fcref_from(frm) -> ea_t + +Help on function get_first_fcref_to in module ida_xref: + +get_first_fcref_to(*args) + get_first_fcref_to(to) -> ea_t + +Help on function get_next_cref_from in module ida_xref: + +get_next_cref_from(*args) + get_next_cref_from(frm, current) -> ea_t + + + Get next instruction referenced from the specified instruction. + + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_from() or + previous call to get_next_cref_from() functions. + (C++: ea_t) + @return: next referenced address or BADADDR . The lastXR variable + contains type of the reference. + +Help on function get_next_cref_to in module ida_xref: + +get_next_cref_to(*args) + get_next_cref_to(to, current) -> ea_t + + + Get next instruction referencing to the specified instruction. + + @param to: linear address of referenced instruction (C++: ea_t) + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_to() or previous + call to get_next_cref_to() functions. (C++: ea_t) + @return: linear address of the next referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_next_dref_from in module ida_xref: + +get_next_dref_from(*args) + get_next_dref_from(frm, current) -> ea_t + + + Get next data referenced from the specified address. + + @param current: linear address of current referenced data. This value + is returned by get_first_dref_from() or previous + call to get_next_dref_from() functions. (C++: ea_t) + @return: linear address of next data or BADADDR . The lastXR + variable contains type of the reference + +Help on function get_next_dref_to in module ida_xref: + +get_next_dref_to(*args) + get_next_dref_to(to, current) -> ea_t + + + Get address of instruction/data referencing to the specified data + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @param current: current linear address. This value is returned by + get_first_dref_to() or previous call to + get_next_dref_to() functions. (C++: ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_next_fcref_from in module ida_xref: + +get_next_fcref_from(*args) + get_next_fcref_from(frm, current) -> ea_t + +Help on function get_next_fcref_to in module ida_xref: + +get_next_fcref_to(*args) + get_next_fcref_to(to, current) -> ea_t + +Help on function has_external_refs in module ida_xref: + +has_external_refs(*args) + has_external_refs(pfn, ea) -> bool + + + Has a location external to the function references? + + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on class xrefblk_t in module ida_xref: + +class xrefblk_t(__builtin__.object) + | Proxy of C++ xrefblk_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> xrefblk_t + | + | __repr__ = _swig_repr(self) + | + | first_from(self, *args) + | first_from(self, _from, flags) -> bool + | + | first_to(self, *args) + | first_to(self, _to, flags) -> bool + | + | next_from(self, *args) + | next_from(self) -> bool + | next_from(self, _from, _to, flags) -> bool + | + | next_to(self, *args) + | next_to(self) -> bool + | next_to(self, _from, _to, flags) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | frm + | xrefblk_t_frm_get(self) -> ea_t + | + | iscode + | xrefblk_t_iscode_get(self) -> uchar + | + | thisown + | The membership flag + | + | to + | xrefblk_t_to_get(self) -> ea_t + | + | type + | xrefblk_t_type_get(self) -> uchar + | + | user + | xrefblk_t_user_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_xrefblk_t(self) + +Help on function xrefchar in module ida_xref: + +xrefchar(*args) + xrefchar(xrtype) -> char + + + Get character describing the xref type. + + @param xrtype: combination of Cross-Reference type flags and a + cref_t of dref_t value (C++: char) + +=== ida_xref EPYDOC INJECTIONS === +ida_xref.XREF_ALL +""" +return all references +""" + +ida_xref.XREF_BASE +""" +Reference to the base part of an offset. +""" + +ida_xref.XREF_DATA +""" +return data references only +""" + +ida_xref.XREF_FAR +""" +don't return ordinary flow xrefs +""" + +ida_xref.XREF_MASK +""" +Mask to get xref type. +""" + +ida_xref.XREF_PASTEND +""" +Reference is past item. This bit may be passed to 'add_dref()' +functions but it won't be saved in the database. It will prevent the +destruction of eventual alignment directives. +""" + +ida_xref.XREF_TAIL +""" +Reference to tail byte in extrn symbols. +""" + +ida_xref.XREF_USER +""" +User specified xref. This xref will not be deleted by IDA. This bit +should be combined with the existing xref types ( 'cref_t' & 'dref_t' +) Cannot be used for fl_F xrefs +""" +=== ida_xref EPYDOC INJECTIONS END === +Help on function AddSeg in module idc: + +AddSeg(startea, endea, base, use32, align, comb) + +Help on function AutoMark in module idc: + +AutoMark(ea, qtype) + Plan to analyze an address + +Help on class DeprecatedIDCError in module idc: + +class DeprecatedIDCError(exceptions.Exception) + | Exception for deprecated function calls + | + | Method resolution order: + | DeprecatedIDCError + | exceptions.Exception + | exceptions.BaseException + | __builtin__.object + | + | Data descriptors defined here: + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Methods inherited from exceptions.Exception: + | + | __init__(...) + | x.__init__(...) initializes x; see help(type(x)) for signature + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from exceptions.Exception: + | + | __new__ = + | T.__new__(S, ...) -> a new object with type S, a subtype of T + | + | ---------------------------------------------------------------------- + | Methods inherited from exceptions.BaseException: + | + | __delattr__(...) + | x.__delattr__('name') <==> del x.name + | + | __getattribute__(...) + | x.__getattribute__('name') <==> x.name + | + | __getitem__(...) + | x.__getitem__(y) <==> x[y] + | + | __getslice__(...) + | x.__getslice__(i, j) <==> x[i:j] + | + | Use of negative indices is not supported. + | + | __reduce__(...) + | + | __repr__(...) + | x.__repr__() <==> repr(x) + | + | __setattr__(...) + | x.__setattr__('name', value) <==> x.name = value + | + | __setstate__(...) + | + | __str__(...) + | x.__str__() <==> str(x) + | + | __unicode__(...) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from exceptions.BaseException: + | + | __dict__ + | + | args + | + | message + +Help on function EVAL_FAILURE in module idc: + +EVAL_FAILURE(code) + Check the result of eval_idc() for evaluation failures + + @param code: result of eval_idc() + + @return: True if there was an evaluation error + +Help on function get_cmt in module ida_bytes: + +get_cmt(*args) + get_cmt(ea, rptble) -> str + + + Get an indented comment. + + @param ea: linear address. may point to tail byte, the function will + find start of the item (C++: ea_t) + @param rptble: get repeatable comment? (C++: bool) + @return: size of comment or -1 + +Help on function GetDisasm in module idc: + +GetDisasm(ea) + Get disassembly line + + @param ea: linear address of instruction + + @return: "" - could not decode instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function GetDouble in module idc: + +GetDouble(ea) + Get value of a floating point number (8 bytes) + This function assumes number stored using IEEE format + and in the same endianness as integers. + + @param ea: linear address + + @return: double + +Help on function GetFloat in module idc: + +GetFloat(ea) + Get value of a floating point number (4 bytes) + This function assumes number stored using IEEE format + and in the same endianness as integers. + + @param ea: linear address + + @return: float + +Help on function GetLocalType in module idc: + +GetLocalType(ordinal, flags) + Retrieve a local type declaration + @param flags: any of PRTYPE_* constants + @return: local type as a C declaration or "" + +Help on function LoadFile in module idc: + +LoadFile(filepath, pos, ea, size) + Load file into IDA database + + @param filepath: path to input file + @param pos: position in the file + @param ea: linear address to load + @param size: number of bytes to load + + @return: 0 - error, 1 - ok + +Help on function MakeVar in module idc: + +MakeVar(ea) + Mark the location as "variable" + + @param ea: address to mark + + @return: None + + @note: All that IDA does is to mark the location as "variable". + Nothing else, no additional analysis is performed. + This function may disappear in the future. + +Help on function SaveFile in module idc: + +SaveFile(filepath, pos, ea, size) + Save from IDA database to file + + @param filepath: path to output file + @param pos: position in the file + @param ea: linear address to save from + @param size: number of bytes to save + + @return: 0 - error, 1 - ok + +Help on function SetPrcsr in module idc: + +SetPrcsr(processor) + +Help on function SetType in module idc: + +SetType(ea, newtype) + Set type of function/variable + + @param ea: the address of the object + @param newtype: the type string in C declaration form. + Must contain the closing ';' + if specified as an empty string, then the + item associated with 'ea' will be deleted. + + @return: 1-ok, 0-failed. + +Help on function SizeOf in module idc: + +SizeOf(typestr) + Returns the size of the type. It is equivalent to IDC's sizeof(). + Use name, tp, fld = idc.parse_decl() ; SizeOf(tp) to retrieve the size + @return: -1 if typestring is not valid otherwise the size of the type + +Help on function _IDC_GetAttr in module idc: + +_IDC_GetAttr(obj, attrmap, attroffs) + Internal function to generically get object attributes + Do not use unless you know what you are doing + +Help on function _IDC_SetAttr in module idc: + +_IDC_SetAttr(obj, attrmap, attroffs, value) + Internal function to generically set object attributes + Do not use unless you know what you are doing + +Help on function __DbgValue in module idc: + +__DbgValue(ea, len) + +Help on function __GetArrayById in module idc: + +__GetArrayById(array_id) + Get an array, by its ID. + + This (internal) wrapper around 'idaaip.netnode(array_id)' + will ensure a certain safety around the retrieval of + arrays (by catching quite unexpect[ed|able] exceptions, + and making sure we don't create & use `transient' netnodes). + + @param array_id: A positive, valid array ID. + +Help on class __dummy_netnode in module idc: + +class __dummy_netnode(__builtin__.object) + | Implements, in an "always failing" fashion, the + | netnode functions that are necessary for the + | array-related functions. + | + | The sole purpose of this singleton class is to + | serve as a placeholder for netnode-manipulating + | functions, that don't want to each have to perform + | checks on the existence of the netnode. + | (..in other words: it avoids a bunch of if/else's). + | + | See __GetArrayById() for more info. + | + | Methods defined here: + | + | altdel(self, *args) + | + | altfirst(self, *args) + | + | altlast(self, *args) + | + | altnext(self, *args) + | + | altprev(self, *args) + | + | altset(self, *args) + | + | altval(self, *args) + | + | hashdel(self, *args) + | + | hashfirst(self, *args) + | + | hashlast(self, *args) + | + | hashnext(self, *args) + | + | hashprev(self, *args) + | + | hashset(self, *args) + | + | hashset_buf(self, *args) + | + | hashset_idx(self, *args) + | + | hashstr(self, *args) + | + | hashstr_buf(self, *args) + | + | hashval(self, *args) + | + | hashval_long(self, *args) + | + | index(self, *args) + | + | kill(self, *args) + | + | rename(self, *args) + | + | supdel(self, *args) + | + | supfirst(self, *args) + | + | suplast(self, *args) + | + | supnext(self, *args) + | + | supprev(self, *args) + | + | supset(self, *args) + | + | supval(self, *args) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | instance = + +Help on function __l2m1 in module idc: + +__l2m1(v) + Long to minus 1: If the 'v' appears to be the + 'signed long' version of -1, then return -1. + Otherwise, return 'v'. + +Help on function __warn_once_deprecated_proto_confusion in module idc: + +__warn_once_deprecated_proto_confusion(what, alternative) + +Help on function _get_modules in module idc: + +_get_modules() + INTERNAL: Enumerate process modules + +Help on function add_auto_stkpnt in module idc: + +add_auto_stkpnt(func_ea, ea, delta) + Add automatical SP register change point + @param func_ea: function start + @param ea: linear address where SP changes + usually this is the end of the instruction which + modifies the stack pointer (insn.ea+insn.size) + @param delta: difference between old and new values of SP + @return: 1-ok, 0-failed + +Help on function add_bpt in module ida_dbg: + +add_bpt(*args) + add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + add_bpt(bpt) -> bool + + + Add a new breakpoint in the debugged process. \sq{Type, Synchronous + function - available as request, Notification, none (synchronous + function)}Only one breakpoint can exist at a given address. + + @param ea: any address in the process memory space. Depending on the + architecture, hardware breakpoints always be setup at + random address. For example, on x86, hardware breakpoints + should be aligned depending on their size. Moreover, on the + x86 architecture, it is impossible to setup more than 4 + hardware breakpoints. (C++: ea_t) + @param size: size of the breakpoint (irrelevant for software + breakpoints): As for the address, hardware breakpoints + can't always be setup with random size. (C++: asize_t) + @param type: type of the breakpoint ( BPT_SOFT for software + breakpoint) special case BPT_DEFAULT ( BPT_SOFT | + BPT_EXEC ): try to add instruction breakpoint of the + appropriate type as follows: software bpt if supported, + hwbpt otherwise (C++: bpttype_t) + +Help on function add_cref in module ida_xref: + +add_cref(*args) + add_cref(frm, to, type) -> bool + + + Create a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param type: cross-reference type (C++: cref_t) + @return: success + +Help on function add_default_til in module idc: + +add_default_til(name) + Load a type library + + @param name: name of type library. + @return: 1-ok, 0-failed. + +Help on function add_dref in module ida_xref: + +add_dref(*args) + add_dref(frm, to, type) -> bool + + + Create a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + @param type: cross-reference type (C++: dref_t) + @return: success (may fail if user-defined xref exists from->to) + +Help on function add_entry in module ida_entry: + +add_entry(*args) + add_entry(ord, ea, name, makecode, flags=0) -> bool + + + Add an entry point to the list of entry points. + + @param ord: ordinal number if ordinal number is equal to 'ea' then + ordinal is not used (C++: uval_t) + @param ea: linear address (C++: ea_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to the regular + comment. If name == NULL, then the old name will be + retained. (C++: const char *) + @param makecode: should the kernel convert bytes at the entry point to + instruction(s) (C++: bool) + @param flags: See AEF_* (C++: int) + @return: success (currently always true) + +Help on function add_enum in module idc: + +add_enum(idx, name, flag) + Add a new enum type + + @param idx: serial number of the new enum. + If another enum with the same serial number + exists, then all enums with serial + numbers >= the specified idx get their + serial numbers incremented (in other words, + the new enum is put in the middle of the list of enums). + + If idx >= get_enum_qty() or idx == idaapi.BADNODE + then the new enum is created at the end of + the list of enums. + + @param name: name of the enum. + @param flag: flags for representation of numeric constants + in the definition of enum. + + @return: id of new enum or BADADDR + +Help on function add_enum_member in module idc: + +add_enum_member(enum_id, name, value, bmask) + Add a member of enum - a symbolic constant + + @param enum_id: id of enum + @param name: name of symbolic constant. Must be unique in the program. + @param value: value of symbolic constant. + @param bmask: bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + all bits set in value should be set in bmask too + + @return: 0-ok, otherwise error code (one of ENUM_MEMBER_ERROR_*) + +Help on function add_func in module ida_funcs: + +add_func(*args) + add_func(ea1, ea2=BADADDR) -> bool + + + Add a new function. If the function end address is 'BADADDR' , then + IDA will try to determine the function bounds by calling + find_func_bounds(..., 'FIND_FUNC_DEFINE' ). + + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @return: success + +Help on function add_hidden_range in module ida_bytes: + +add_hidden_range(*args) + add_hidden_range(ea1, ea2, description, header, footer, color) -> bool + + + Mark a range of addresses as hidden. The range will be created in the + invisible state with the default color + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (C++: ea_t) + @param description: range parameters (C++: const char *) + @param header: range parameters (C++: const char *) + @param footer: range parameters (C++: const char *) + @param color (C++: bgcolor_t) + @return: success + +Help on function add_idc_hotkey in module ida_kernwin: + +add_idc_hotkey(*args) + add_idc_hotkey(hotkey, idcfunc) -> int + + + Add hotkey for IDC function ( 'ui_add_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + @param idcfunc: IDC function name (C++: const char *) + @return: IDC hotkey error codes + +Help on function add_segm_ex in module idc: + +add_segm_ex(startea, endea, base, use32, align, comb, flags) + Create a new segment + + @param startea: linear address of the start of the segment + @param endea: linear address of the end of the segment + this address will not belong to the segment + 'endea' should be higher than 'startea' + @param base: base paragraph or selector of the segment. + a paragraph is 16byte memory chunk. + If a selector value is specified, the selector should be + already defined. + @param use32: 0: 16bit segment, 1: 32bit segment, 2: 64bit segment + @param align: segment alignment. see below for alignment values + @param comb: segment combination. see below for combination values. + @param flags: combination of ADDSEG_... bits + + @return: 0-failed, 1-ok + +Help on function add_sourcefile in module ida_lines: + +add_sourcefile(*args) + add_sourcefile(ea1, ea2, filename) -> bool + + + Mark a range of address as belonging to a source file. An address + range may belong only to one source file. A source file may be + represented by several address ranges. + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (excluded) + (C++: ea_t) + @param filename: name of source file. (C++: const char *) + @return: success + +Help on function add_struc in module idc: + +add_struc(index, name, is_union) + Define a new structure type + + @param index: index of new structure type + If another structure has the specified index, + then index of that structure and all other + structures will be incremented, freeing the specifed + index. If index is == -1, then the biggest index + number will be used. + See get_first_struc_idx() for the explanation of + structure indices and IDs. + @param name: name of the new structure type. + @param is_union: 0: structure + 1: union + + @return: -1 if can't define structure type because of + bad structure name: the name is ill-formed or is + already used in the program. + otherwise returns ID of the new structure type + +Help on function add_struc_member in module idc: + +add_struc_member(sid, name, offset, flag, typeid, nbytes, target=-1, tdelta=0, reftype=2) + Add structure member + + @param sid: structure type ID + @param name: name of the new member + @param offset: offset of the new member + -1 means to add at the end of the structure + @param flag: type of the new member. Should be one of + FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA + @param typeid: if is_struct(flag) then typeid specifies the structure id for the member + if is_off0(flag) then typeid specifies the offset base. + if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). + if is_stroff(flag) then typeid specifies the structure id + if is_enum(flag) then typeid specifies the enum id + if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) + Otherwise typeid should be -1. + @param nbytes: number of bytes in the new member + + @param target: target address of the offset expr. You may specify it as + -1, ida will calculate it itself + @param tdelta: offset target delta. usually 0 + @param reftype: see REF_... definitions + + @note: The remaining arguments are allowed only if is_off0(flag) and you want + to specify a complex offset expression + + @return: 0 - ok, otherwise error code (one of STRUC_ERROR_*) + +Help on function add_user_stkpnt in module ida_frame: + +add_user_stkpnt(*args) + add_user_stkpnt(ea, delta) -> bool + + + Add user-defined SP register change point. + + @param ea: linear address where SP changes (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function append_func_tail in module idc: + +append_func_tail(funcea, ea1, ea2) + Append a function chunk to the function + + @param funcea: any address in the function + @param ea1: start of function tail + @param ea2: end of function tail + @return: 0 if failed, 1 if success + + @note: If a chunk exists at the specified addresses, it must have exactly + the specified boundaries + +Help on function apply_type in module idc: + +apply_type(ea, py_type, flags=1) + Apply the specified type to the address + + @param ea: the address of the object + @param py_type: typeinfo tuple (type, fields) as get_tinfo() returns + or tuple (name, type, fields) as parse_decl() returns + or None + if specified as None, then the + item associated with 'ea' will be deleted. + @param flags: combination of TINFO_... constants or 0 + @return: Boolean + +Help on function ask_seg in module ida_kernwin: + +ask_seg(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_yn in module ida_kernwin: + +ask_yn(*args) + ask_yn(deflt, format) -> int + + + Display a dialog box and get choice from "Yes", "No", "Cancel". + + @param deflt: default choice: one of Button IDs (C++: int) + @param format: The question in printf() style format (C++: const char + *) + @return: the selected button (one of Button IDs ). Esc key returns + ASKBTN_CANCEL . + +Help on function atoa in module idc: + +atoa(ea) + Convert address value to a string + Return address in the form 'seg000:1234' + (the same as in line prefixes) + + @param ea: address to format + +Help on function atol in module idc: + +atol(s) + +Help on function attach_process in module ida_dbg: + +attach_process(*args) + attach_process(pid=pid_t(-1), event_id=-1) -> int + + + Attach the debugger to a running process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_attach' + }This function shouldn't be called as a request if 'NO_PROCESS' is + used. + + @param pid: PID of the process to attach to. If NO_PROCESS , a dialog + box will interactively ask the user for the process to + attach to. (C++: pid_t) + @param event_id (C++: int) + +Help on function auto_mark_range in module ida_auto: + +auto_mark_range(*args) + auto_mark_range(start, end, type) + + + Put range of addresses into a queue. 'start' may be higher than 'end', + the kernel will swap them in this case. 'end' doesn't belong to the + range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_unmark in module ida_auto: + +auto_unmark(*args) + auto_unmark(start, end, type) + + + Remove range of addresses from a queue. 'start' may be higher than + 'end', the kernel will swap them in this case. 'end' doesn't belong to + the range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_wait in module ida_auto: + +auto_wait(*args) + auto_wait() -> bool + + + Process everything in the queues and return true. + + @return: false if the user clicked cancel. (the wait box must be + displayed by the caller if desired) + +Help on function batch in module idc: + +batch(batch) + Enable/disable batch mode of operation + + @param batch: batch mode + 0 - ida will display dialog boxes and wait for the user input + 1 - ida will not display dialog boxes, warnings, etc. + + @return: old balue of batch flag + +Help on function byte_value in module idc: + +byte_value(F) + Get byte value from flags + Get value of byte provided that the byte is initialized. + This macro works ok only for 8-bit byte machines. + +Help on function calc_gtn_flags in module ida_name: + +calc_gtn_flags(fromaddr, ea) + Calculate flags for get_ea_name() function + + @param fromaddr: the referring address. May be BADADDR. + @param ea: linear address + + @return: flags + +Help on function call_system in module idc: + +call_system(command) + Execute an OS command. + + @param command: command line to execute + + @return: error code from OS + + @note: + IDA will wait for the started program to finish. + In order to start the command in parallel, use OS methods. + For example, you may start another program in parallel using + "start" command. + +Help on function can_exc_continue in module idc: + +can_exc_continue() + Can it continue after EXCEPTION event? + + @return: boolean + +Help on function check_bpt in module ida_dbg: + +check_bpt(*args) + check_bpt(ea) -> int + + + Check the breakpoint at the specified address. + + @param ea (C++: ea_t) + @return: one of Breakpoint status codes + +Help on function choose_func in module idc: + +choose_func(title) + Ask the user to select a function + + Arguments: + + @param title: title of the dialog box + + @return: -1 - user refused to select a function + otherwise returns the selected function start address + +Help on function clear_trace in module idc: + +clear_trace(filename) + Clear the current trace buffer + +Help on function create_align in module ida_bytes: + +create_align(*args) + create_align(ea, length, alignment) -> bool + + + Alignment: 0 or 2..32. If it is 0, is will be calculated. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param alignment (C++: int) + +Help on function create_array in module idc: + +create_array(name) + Create array. + + @param name: The array name. + + @return: -1 in case of failure, a valid array_id otherwise. + +Help on function create_byte in module idc: + +create_byte(ea) + Convert the current item to a byte + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_custdata in module ida_bytes: + +create_custdata(*args) + create_custdata(ea, length, dtid, fid, force=False) -> bool + + + Convert to custom data type. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param dtid (C++: int) + @param fid (C++: int) + @param force (C++: bool) + +Help on function create_data in module ida_bytes: + +create_data(*args) + create_data(ea, dataflag, size, tid) -> bool + + + Convert to data (byte, word, dword, etc). This function may be used to + create arrays. + + @param ea: linear address (C++: ea_t) + @param dataflag: type of data. Value of function byte_flag() , + word_flag() , etc. (C++: flags_t) + @param size: size of array in bytes. should be divisible by the size + of one item of the specified type. for variable sized + items it can be specified as 0, and the kernel will try + to calculate the size. (C++: asize_t) + @param tid: type id. If the specified type is a structure, then tid is + structure id. Otherwise should be BADNODE . (C++: tid_t) + @return: success + +Help on function create_double in module idc: + +create_double(ea) + Convert the current item to a double floating point (8 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_dword in module idc: + +create_dword(ea) + Convert the current item to a double word (4 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_float in module idc: + +create_float(ea) + Convert the current item to a floating point (4 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_insn in module ida_ua: + +create_insn(*args) + create_insn(ea, out=None) -> int + + + Create an instruction at the specified address. This function checks + if an instruction is present at the specified address and will try to + create one if there is none. It will fail if there is a data item or + other items hindering the creation of the new instruction. This + function will also fill the 'out' structure. + + @param ea: linear address (C++: ea_t) + @param out: the resulting instruction (C++: insn_t *) + @return: the length of the instruction or 0 + +Help on function create_oword in module idc: + +create_oword(ea) + Convert the current item to an octa word (16 bytes/128 bits) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_pack_real in module idc: + +create_pack_real(ea) + Convert the current item to a packed real (10 or 12 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_qword in module idc: + +create_qword(ea) + Convert the current item to a quadro word (8 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_strlit in module idc: + +create_strlit(ea, endea) + Create a string. + + This function creates a string (the string type is determined by the + value of get_inf_attr(INF_STRTYPE)) + + @param ea: linear address + @param endea: ending address of the string (excluded) + if endea == BADADDR, then length of string will be calculated + by the kernel + + @return: 1-ok, 0-failure + + @note: The type of an existing string is returned by get_str_type() + +Help on function create_struct in module idc: + +create_struct(ea, size, strname) + Convert the current item to a structure instance + + @param ea: linear address + @param size: structure size in bytes. -1 means that the size + will be calculated automatically + @param strname: name of a structure type + + @return: 1-ok, 0-failure + +Help on function create_tbyte in module idc: + +create_tbyte(ea) + Convert the current item to a tbyte (10 or 12 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_word in module idc: + +create_word(ea) + Convert the current item to a word (2 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_yword in module idc: + +create_yword(ea) + Convert the current item to a ymm word (32 bytes/256 bits) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function define_exception in module ida_dbg: + +define_exception(*args) + define_exception(code, name, desc, flags) -> char const * + + + Convenience function: define new exception code. + + @param code: exception code (cannot be 0) (C++: uint) + @param name: exception name (cannot be empty or NULL) (C++: const char + *) + @param desc: exception description (maybe NULL) (C++: const char *) + @param flags: combination of Exception info flags (C++: int) + @return: failure message or NULL. You must call store_exceptions() + if this function succeeds + +Help on function define_local_var in module idc: + +define_local_var(start, end, location, name) + Create a local variable + + @param start: start of address range for the local variable + @param end: end of address range for the local variable + @param location: the variable location in the "[bp+xx]" form where xx is + a number. The location can also be specified as a + register name. + @param name: name of the local variable + + @return: 1-ok, 0-failure + + @note: For the stack variables the end address is ignored. + If there is no function at 'start' then this function. + will fail. + +Help on function del_array_element in module idc: + +del_array_element(tag, array_id, idx) + Delete an array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of an element. + + @return: 1 in case of success, 0 otherwise. + +Help on function del_bpt in module ida_dbg: + +del_bpt(*args) + del_bpt(ea) -> bool + del_bpt(bptloc) -> bool + + + Delete an existing breakpoint in the debugged process. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + +Help on function del_cref in module ida_xref: + +del_cref(*args) + del_cref(frm, to, expand) -> int + + + Delete a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param expand: policy to delete the referenced instruction 1: plan + to delete the referenced instruction if it has no more + references. 0: don't delete the referenced + instruction even if no more cross-references point to + it (C++: bool) + +Help on function del_dref in module ida_xref: + +del_dref(*args) + del_dref(frm, to) + + + Delete a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + +Help on function del_enum in module ida_enum: + +del_enum(*args) + del_enum(id) + + + Delete an enum type. + + + @param id (C++: enum_t) + +Help on function del_enum_member in module idc: + +del_enum_member(enum_id, value, serial, bmask) + Delete a member of enum - a symbolic constant + + @param enum_id: id of enum + @param value: value of symbolic constant. + @param serial: serial number of the constant in the + enumeration. See op_enum() for for details. + @param bmask: bitmask of the constant ordinary enums accept + only ida_enum.DEFMASK as a bitmask + + @return: 1-ok, 0-failed + +Help on function del_extra_cmt in module ida_lines: + +del_extra_cmt(*args) + del_extra_cmt(ea, what) + +Help on function del_fixup in module ida_fixup: + +del_fixup(*args) + del_fixup(source) + + + Delete fixup information. + + + @param source (C++: ea_t) + +Help on function del_func in module ida_funcs: + +del_func(*args) + del_func(ea) -> bool + + + Delete a function. + + @param ea: any address in the function entry chunk (C++: ea_t) + @return: success + +Help on function del_hash_string in module idc: + +del_hash_string(hash_id, key) + Delete a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element + + @return: 1 upon success, 0 otherwise. + +Help on function del_hidden_range in module ida_bytes: + +del_hidden_range(*args) + del_hidden_range(ea) -> bool + + + Delete hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: success + +Help on function del_idc_hotkey in module ida_kernwin: + +del_idc_hotkey(*args) + del_idc_hotkey(hotkey) -> bool + + + Delete IDC function hotkey ( 'ui_del_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + +Help on function del_items in module ida_bytes: + +del_items(*args) + del_items(ea, flags=0, nbytes=1, may_destroy=None) -> bool + + + Convert item (instruction/data) to unexplored bytes. The whole item + (including the head and tail bytes) will be destroyed. It is allowed + to pass any address in the item to this function + + @param ea: any address within the first item to delete (C++: ea_t) + @param flags: combination of Unexplored byte conversion flags (C++: + int) + @param nbytes: number of bytes in the range to be undefined (C++: + asize_t) + @param may_destroy: optional routine invoked before deleting a head + item. If callback returns false then item has not + to be deleted and operation fails (C++: + may_destroy_cb_t *) + @return: true on sucessful operation, otherwise false + +Help on function del_segm in module ida_segment: + +del_segm(*args) + del_segm(ea, flags) -> bool + + + Delete a segment. + + @param ea: any address belonging to the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function del_selector in module ida_segment: + +del_selector(*args) + del_selector(selector) + + + Delete mapping of a selector. Be wary of deleting selectors that are + being used in the program, this can make a mess in the segments. + + @param selector: number of selector to remove from the translation + table (C++: sel_t) + +Help on function del_source_linnum in module ida_nalt: + +del_source_linnum(*args) + del_source_linnum(ea) + +Help on function del_sourcefile in module ida_lines: + +del_sourcefile(*args) + del_sourcefile(ea) -> bool + + + Delete information about the source file. + + @param ea: linear address (C++: ea_t) + @return: success + +Help on function del_stkpnt in module idc: + +del_stkpnt(func_ea, ea) + Delete SP register change point + + @param func_ea: function start + @param ea: linear address + @return: 1-ok, 0-failed + +Help on function del_struc in module idc: + +del_struc(sid) + Delete a structure type + + @param sid: structure type ID + + @return: 0 if bad structure type ID is passed + 1 otherwise the structure type is deleted. All data + and other structure types referencing to the + deleted structure type will be displayed as array + of bytes. + +Help on function del_struc_member in module idc: + +del_struc_member(sid, member_offset) + Delete structure member + + @param sid: structure type ID + @param member_offset: offset of the member + + @return: != 0 - ok. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + +Help on function delete_all_segments in module idc: + +delete_all_segments() + Delete all segments, instructions, comments, i.e. everything + except values of bytes. + +Help on function delete_array in module idc: + +delete_array(array_id) + Delete array, by its ID. + + @param array_id: The ID of the array to delete. + +Help on function demangle_name in module idc: + +demangle_name(name, disable_mask) + demangle_name a name + + @param name: name to demangle + @param disable_mask: a mask that tells how to demangle the name + it is a good idea to get this mask using + get_inf_attr(INF_SHORT_DN) or get_inf_attr(INF_LONG_DN) + + @return: a demangled name + If the input name cannot be demangled, returns None + +Help on function detach_process in module ida_dbg: + +detach_process(*args) + detach_process() -> bool + + + Detach the debugger from the debugged process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_detach' } + +Help on function diff_trace_file in module ida_dbg: + +diff_trace_file(*args) + diff_trace_file(nonnul_filename) -> bool + + + Show difference between the current trace and the one from 'filename'. + +Help on function enable_bpt in module ida_dbg: + +enable_bpt(*args) + enable_bpt(ea, enable=True) -> bool + enable_bpt(bptloc, enable=True) -> bool + +Help on function enable_tracing in module idc: + +enable_tracing(trace_level, enable) + Enable step tracing + + @param trace_level: what kind of trace to modify + @param enable: 0: turn off, 1: turn on + + @return: success + +Help on function error in module ida_kernwin: + +error(*args) + error(format) + + + Display a fatal message in a message box and quit IDA + + @param format: message to print + +Help on function eval_idc in module idc: + +eval_idc(expr) + Evaluate an IDC expression + + @param expr: an expression + + @return: the expression value. If there are problems, the returned value will be "IDC_FAILURE: xxx" + where xxx is the error description + + @note: Python implementation evaluates IDC only, while IDC can call other registered languages + +Help on function exit_process in module ida_dbg: + +exit_process(*args) + exit_process() -> bool + + + Terminate the debugging of the current process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_exit' } + +Help on function expand_struc in module idc: + +expand_struc(sid, offset, delta, recalc) + Expand or shrink a structure type + @param id: structure type ID + @param offset: offset in the structure + @param delta: how many bytes to add or remove + @param recalc: recalculate the locations where the structure + type is used + @return: != 0 - ok + +Help on function fclose in module idc: + +fclose(handle) + +Help on function fgetc in module idc: + +fgetc(handle) + +Help on function filelength in module idc: + +filelength(handle) + +Help on function find_binary in module idc: + +find_binary(ea, flag, searchstr, radix=16, from_bc695=False) + +Help on function find_code in module ida_search: + +find_code(*args) + find_code(ea, sflag) -> ea_t + + + Find next code address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_data in module ida_search: + +find_data(*args) + find_data(ea, sflag) -> ea_t + + + Find next data address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_defined in module ida_search: + +find_defined(*args) + find_defined(ea, sflag) -> ea_t + + + Find next ea that is the start of an instruction or data. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_func_end in module idc: + +find_func_end(ea) + Determine a new function boundaries + + @param ea: starting address of a new function + + @return: if a function already exists, then return its end address. + If a function end cannot be determined, the return BADADDR + otherwise return the end address of the new function + +Help on function find_imm in module ida_search: + +find_imm(*args) + find_imm(newEA, sflag, srchValue) -> ea_t + + + Find next immediate operand with the given value. + + + @param newEA (C++: ea_t) + @param sflag (C++: int) + @param srchValue (C++: uval_t) + +Help on function find_selector in module idc: + +find_selector(val) + Find a selector which has the specifed value + + @param val: value to search for + + @return: the selector number if found, + otherwise the input value (val & 0xFFFF) + + @note: selector values are always in paragraphs + +Help on function find_suspop in module ida_search: + +find_suspop(*args) + find_suspop(ea, sflag) -> ea_t + + + Find next suspicious operand. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_text in module idc: + +find_text(ea, flag, y, x, searchstr, from_bc695=False) + +Help on function find_unknown in module ida_search: + +find_unknown(*args) + find_unknown(ea, sflag) -> ea_t + + + Find next unexplored address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function first_func_chunk in module idc: + +first_func_chunk(funcea) + Get the first function chunk of the specified function + + @param funcea: any address in the function + + @return: the function entry point or BADADDR + + @note: This function returns the first (main) chunk of the specified function + +Help on function fopen in module idc: + +fopen(f, mode) + #---------------------------------------------------------------------------- + # F I L E I / O + #---------------------------------------------------------------------------- + +Help on function force_bl_call in module idc: + +force_bl_call(ea) + Force BL instruction to be a call + + @param ea: address of the BL instruction + + @return: 1-ok, 0-failed + +Help on function force_bl_jump in module idc: + +force_bl_jump(ea) + Some ARM compilers in Thumb mode use BL (branch-and-link) + instead of B (branch) for long jumps, since BL has more range. + By default, IDA tries to determine if BL is a jump or a call. + You can override IDA's decision using commands in Edit/Other menu + (Force BL call/Force BL jump) or the following two functions. + + Force BL instruction to be a jump + + @param ea: address of the BL instruction + + @return: 1-ok, 0-failed + +Help on function form in module idc: + +form(format, *args) + +Help on function fprintf in module idc: + +fprintf(handle, format, *args) + +Help on function fputc in module idc: + +fputc(byte, handle) + +Help on function fseek in module idc: + +fseek(handle, offset, origin) + +Help on function ftell in module idc: + +ftell(handle) + +Help on function func_contains in module idc: + +func_contains(func_ea, ea) + Does the given function contain the given address? + + @param func_ea: any address belonging to the function + @param ea: linear address + + @return: success + +Help on function gen_file in module idc: + +gen_file(filetype, path, ea1, ea2, flags) + Generate an output file + + @param filetype: type of output file. One of OFILE_... symbols. See below. + @param path: the output file path (will be overwritten!) + @param ea1: start address. For some file types this argument is ignored + @param ea2: end address. For some file types this argument is ignored + @param flags: bit combination of GENFLG_... + + @returns: number of the generated lines. + -1 if an error occurred + OFILE_EXE: 0-can't generate exe file, 1-ok + +Help on function gen_flow_graph in module idc: + +gen_flow_graph(outfile, title, ea1, ea2, flags) + Generate a flow chart GDL file + + @param outfile: output file name. GDL extension will be used + @param title: graph title + @param ea1: beginning of the range to flow chart + @param ea2: end of the range to flow chart. + @param flags: combination of CHART_... constants + + @note: If ea2 == BADADDR then ea1 is treated as an address within a function. + That function will be flow charted. + +Help on function gen_simple_call_chart in module idc: + +gen_simple_call_chart(outfile, title, flags) + Generate a function call graph GDL file + + @param outfile: output file name. GDL extension will be used + @param title: graph title + @param flags: combination of CHART_GEN_GDL, CHART_WINGRAPH, CHART_NOLIBFUNCS + +Help on function generate_disasm_line in module idc: + +generate_disasm_line(ea, flags) + Get disassembly line + + @param ea: linear address of instruction + + @param flags: combination of the GENDSM_ flags, or 0 + + @return: "" - could not decode instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function get_array_element in module idc: + +get_array_element(tag, array_id, idx) + Get value of array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of an element. + + @return: Value of the specified array element. Note that + this function may return char or long result. Unexistent + array elements give zero as a result. + +Help on function get_array_id in module idc: + +get_array_id(name) + Get array array_id, by name. + + @param name: The array name. + + @return: -1 in case of failure (i.e., no array with that + name exists), a valid array_id otherwise. + +Help on function get_bmask_cmt in module idc: + +get_bmask_cmt(enum_id, bmask, repeatable) + Get bitmask comment (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param repeatable: type of comment, 0-regular, 1-repeatable + + @return: comment attached to bitmask or None + +Help on function get_bmask_name in module idc: + +get_bmask_name(enum_id, bmask) + Get bitmask name (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + + @return: name of bitmask or None + +Help on function get_marked_pos in module ida_idc: + +get_marked_pos(*args) + get_marked_pos(slot) -> ea_t + +Help on function get_mark_comment in module ida_idc: + +get_mark_comment(*args) + get_mark_comment(slot) -> PyObject * + +Help on function get_bpt_attr in module idc: + +get_bpt_attr(ea, bptattr) + Get the characteristics of a breakpoint + + @param ea: any address in the breakpoint range + @param bptattr: the desired attribute code, one of BPTATTR_... constants + + @return: the desired attribute value or -1 + +Help on function get_bpt_ea in module idc: + +get_bpt_ea(n) + Get breakpoint address + + @param n: number of breakpoint, is in range 0..get_bpt_qty()-1 + + @return: address of the breakpoint or BADADDR + +Help on function get_bpt_qty in module ida_dbg: + +get_bpt_qty(*args) + get_bpt_qty() -> int + + + Get number of breakpoints. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function get_bpt_tev_ea in module ida_dbg: + +get_bpt_tev_ea(*args) + get_bpt_tev_ea(n) -> ea_t + + + Get the address associated to a read, read/write or execution trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)}Usually, a breakpoint is associated with a read, read/write + or execution trace event. However, the returned address could be any + address in the range of this breakpoint. If the breakpoint was deleted + after the trace event, the address no longer corresponds to a valid + breakpoint. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a read, read/write or execution trace event. + +Help on function get_bytes in module idc: + +get_bytes(ea, size, use_dbg=False) + Return the specified number of bytes of the program + + @param ea: linear address + + @param size: size of buffer in normal 8-bit bytes + + @param use_dbg: if True, use debugger memory, otherwise just the database + + @return: None on failure + otherwise a string containing the read bytes + +Help on function get_call_tev_callee in module ida_dbg: + +get_call_tev_callee(*args) + get_call_tev_callee(n) -> ea_t + + + Get the called function from a function call trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function call event. + +Help on function get_color in module idc: + +get_color(ea, what) + Get item color + + @param ea: address of the item + @param what: type of the item (one of CIC_* constants) + + @return: color code in RGB (hex 0xBBGGRR) + +Help on function get_curline in module idc: + +get_curline() + Get the disassembly line at the cursor + + @return: string + +Help on function get_current_thread in module ida_dbg: + +get_current_thread(*args) + get_current_thread() -> thid_t + + + Get current thread ID. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_db_byte in module ida_bytes: + +get_db_byte(*args) + get_db_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea' from the database. Works + even if the debugger is active. See also 'get_dbg_byte()' to read the + process memory directly. This function works only for 8bit byte + processors. + + @param ea (C++: ea_t) + +Help on function get_debugger_event_cond in module ida_dbg: + +get_debugger_event_cond(*args) + get_debugger_event_cond() -> char const * + +Help on function get_entry in module ida_entry: + +get_entry(*args) + get_entry(ord) -> ea_t + + + Get entry point address by its ordinal + + @param ord: ordinal number of entry point (C++: uval_t) + @return: address or BADADDR + +Help on function get_entry_name in module ida_entry: + +get_entry_name(*args) + get_entry_name(ord) -> str + + + Get name of the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry name or -1 + +Help on function get_entry_ordinal in module ida_entry: + +get_entry_ordinal(*args) + get_entry_ordinal(idx) -> uval_t + + + Get ordinal number of an entry point. + + @param idx: internal number of entry point. Should be in the range 0.. + get_entry_qty() -1 (C++: size_t) + @return: ordinal number or 0. + +Help on function get_entry_qty in module ida_entry: + +get_entry_qty(*args) + get_entry_qty() -> size_t + + + Get number of entry points. + +Help on function get_enum in module ida_enum: + +get_enum(*args) + get_enum(name) -> enum_t + + + Get enum by name. + + + @param name (C++: const char *) + +Help on function get_enum_cmt in module ida_enum: + +get_enum_cmt(*args) + get_enum_cmt(id, repeatable) -> str + + + Get enum comment. + + + @param id (C++: enum_t) + @param repeatable (C++: bool) + +Help on function get_enum_flag in module ida_enum: + +get_enum_flag(*args) + get_enum_flag(id) -> flags_t + + + Get flags determining the representation of the enum. (currently they + define the numeric base: octal, decimal, hex, bin) and signness. + + @param id (C++: enum_t) + +Help on function get_enum_idx in module ida_enum: + +get_enum_idx(*args) + get_enum_idx(id) -> uval_t + + + Get serial number of enum. The serial number determines the place of + the enum in the enum window. + + @param id (C++: enum_t) + +Help on function get_enum_member in module idc: + +get_enum_member(enum_id, value, serial, bmask) + Get id of constant + + @param enum_id: id of enum + @param value: value of constant + @param serial: serial number of the constant in the + enumeration. See op_enum() for details. + @param bmask: bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + + @return: id of constant or -1 if error + +Help on function get_enum_member_bmask in module ida_enum: + +get_enum_member_bmask(*args) + get_enum_member_bmask(id) -> bmask_t + + + Get bitmask of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_by_name in module ida_enum: + +get_enum_member_by_name(*args) + get_enum_member_by_name(name) -> const_t + + + Get a reference to an enum member by its name. + + + @param name (C++: const char *) + +Help on function get_enum_member_cmt in module idc: + +get_enum_member_cmt(const_id, repeatable) + Get comment of a constant + + @param const_id: id of const + @param repeatable: 0:get regular comment, 1:get repeatable comment + + @return: comment string + +Help on function get_enum_member_enum in module ida_enum: + +get_enum_member_enum(*args) + get_enum_member_enum(id) -> enum_t + + + Get the parent enum of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_name in module idc: + +get_enum_member_name(const_id) + Get name of a constant + + @param const_id: id of const + + Returns: name of constant + +Help on function get_enum_member_value in module ida_enum: + +get_enum_member_value(*args) + get_enum_member_value(id) -> uval_t + + + Get value of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_name in module ida_enum: + +get_enum_name(*args) + get_enum_name(id) -> str + + + Get name of enum. + + + @param id (C++: enum_t) + +Help on function get_enum_qty in module ida_enum: + +get_enum_qty(*args) + get_enum_qty() -> size_t + + + Get number of declared 'enum_t' types. + +Help on function get_enum_size in module ida_enum: + +get_enum_size(*args) + get_enum_size(id) -> size_t + + + Get the number of the members of the enum. + + + @param id (C++: enum_t) + +Help on function get_enum_width in module ida_enum: + +get_enum_width(*args) + get_enum_width(id) -> size_t + + + Get the width of a enum element allowed values: 0 + (unspecified),1,2,4,8,16,32,64 + + @param id (C++: enum_t) + +Help on function get_event_bpt_hea in module idc: + +get_event_bpt_hea() + Get hardware address for BREAKPOINT event + + @return: hardware address + +Help on function get_event_ea in module idc: + +get_event_ea() + Get ea for debug event + + @return: ea + +Help on function get_event_exc_code in module idc: + +get_event_exc_code() + Get exception code for EXCEPTION event + + @return: exception code + +Help on function get_event_exc_ea in module idc: + +get_event_exc_ea() + Get address for EXCEPTION event + + @return: adress of exception + +Help on function get_event_exc_info in module idc: + +get_event_exc_info() + Get info for EXCEPTION event + + @return: info string + +Help on function get_event_exit_code in module idc: + +get_event_exit_code() + Get exit code for debug event + + @return: exit code for PROCESS_EXITED, THREAD_EXITED events + +Help on function get_event_id in module idc: + +get_event_id() + Get ID of debug event + + @return: event ID + +Help on function get_event_info in module idc: + +get_event_info() + Get debug event info + + @return: event info: for THREAD_STARTED (thread name) + for LIB_UNLOADED (unloaded library name) + for INFORMATION (message to display) + +Help on function get_event_module_base in module idc: + +get_event_module_base() + Get module base for debug event + + @return: module base + +Help on function get_event_module_name in module idc: + +get_event_module_name() + Get module name for debug event + + @return: module name + +Help on function get_event_module_size in module idc: + +get_event_module_size() + Get module size for debug event + + @return: module size + +Help on function get_event_pid in module idc: + +get_event_pid() + Get process ID for debug event + + @return: process ID + +Help on function get_event_tid in module idc: + +get_event_tid() + Get type ID for debug event + + @return: type ID + +Help on function get_extra_cmt in module ida_lines: + +get_extra_cmt(*args) + get_extra_cmt(ea, what) -> ssize_t + +Help on function get_fchunk_attr in module idc: + +get_fchunk_attr(ea, attr) + Get a function chunk attribute + + @param ea: any address in the chunk + @param attr: one of: FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER, FUNCATTR_REFQTY + + @return: desired attribute or -1 + +Help on function get_fchunk_referer in module ida_funcs: + +get_fchunk_referer(*args) + get_fchunk_referer(ea, idx) -> ea_t + +Help on function get_first_bmask in module ida_enum: + +get_first_bmask(*args) + get_first_bmask(id) -> bmask_t + + + Get first bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the smallest bitmask for enum, or DEFMASK + +Help on function get_first_cref_from in module ida_xref: + +get_first_cref_from(*args) + get_first_cref_from(frm) -> ea_t + + + Get first instruction referenced from the specified instruction. If + the specified instruction passes execution to the next instruction + then the next instruction is returned. Otherwise the lowest referenced + address is returned (remember that xrefs are kept sorted!). + + @return: first referenced address. The lastXR variable contains type + of the reference. If the specified instruction doesn't + reference to other instructions then returns BADADDR . + +Help on function get_first_cref_to in module ida_xref: + +get_first_cref_to(*args) + get_first_cref_to(to) -> ea_t + + + Get first instruction referencing to the specified instruction. If the + specified instruction may be executed immediately after its previous + instruction then the previous instruction is returned. Otherwise the + lowest referencing address is returned. (remember that xrefs are kept + sorted!). + + @param to: linear address of referenced instruction (C++: ea_t) + @return: linear address of the first referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_first_dref_from in module ida_xref: + +get_first_dref_from(*args) + get_first_dref_from(frm) -> ea_t + + + Get first data referenced from the specified address. + + @return: linear address of first (lowest) data referenced from the + specified address. The lastXR variable contains type of the + reference. Return BADADDR if the specified instruction/data + doesn't reference to anything. + +Help on function get_first_dref_to in module ida_xref: + +get_first_dref_to(*args) + get_first_dref_to(to) -> ea_t + + + Get address of instruction/data referencing to the specified data. + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_first_enum_member in module idc: + +get_first_enum_member(enum_id, bmask) + Get first constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) + + @return: value of constant or idaapi.BADNODE no constants are defined + All constants are sorted by their values as unsigned longs. + +Help on function get_first_fcref_from in module ida_xref: + +get_first_fcref_from(*args) + get_first_fcref_from(frm) -> ea_t + +Help on function get_first_fcref_to in module ida_xref: + +get_first_fcref_to(*args) + get_first_fcref_to(to) -> ea_t + +Help on function get_first_hash_key in module idc: + +get_first_hash_key(hash_id) + Get the first key in the hash. + + @param hash_id: The hash ID. + + @return: the key, 0 otherwise. + +Help on function get_first_index in module idc: + +get_first_index(tag, array_id) + Get index of the first existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + + @return: -1 if the array is empty, otherwise index of first array + element of given type. + +Help on function get_first_member in module idc: + +get_first_member(sid) + Get offset of the first member of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if structure has no members, + otherwise returns offset of the first member. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_first_module in module idc: + +get_first_module() + Enumerate process modules + + @return: first module's base address or None on failure + +Help on function get_first_seg in module idc: + +get_first_seg() + Get first segment + + @return: address of the start of the first segment + BADADDR - no segments are defined + +Help on function get_first_struc_idx in module ida_struct: + +get_first_struc_idx(*args) + get_first_struc_idx() -> uval_t + + + Get index of first structure. + + @return: BADADDR if no known structures, 0 otherwise + +Help on function get_fixup_target_dis in module idc: + +get_fixup_target_dis(ea) + Get fixup target displacement + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup target displacement + +Help on function get_fixup_target_flags in module idc: + +get_fixup_target_flags(ea) + Get fixup target flags + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup target flags + +Help on function get_fixup_target_off in module idc: + +get_fixup_target_off(ea) + Get fixup target offset + + @param ea: address to get information about + + @return: BADADDR - no fixup at the specified address + otherwise returns fixup target offset + +Help on function get_fixup_target_sel in module idc: + +get_fixup_target_sel(ea) + Get fixup target selector + + @param ea: address to get information about + + @return: BADSEL - no fixup at the specified address + otherwise returns fixup target selector + +Help on function get_fixup_target_type in module idc: + +get_fixup_target_type(ea) + Get fixup target type + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup type + +Help on function get_forced_operand in module ida_bytes: + +get_forced_operand(*args) + get_forced_operand(ea, n) -> str + + + Get forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @return: size of forced operand or -1 + +Help on function get_frame_args_size in module idc: + +get_frame_args_size(ea) + Get size of arguments in function frame which are purged upon return + + @param ea: any address belonging to the function + + @return: Size of function arguments in bytes. + If the function doesn't have a frame, return 0 + If the function does't exist, return -1 + +Help on function get_frame_id in module idc: + +get_frame_id(ea) + Get ID of function frame structure + + @param ea: any address belonging to the function + + @return: ID of function frame or None In order to access stack variables + you need to use structure member manipulaion functions with the + obtained ID. + +Help on function get_frame_lvar_size in module idc: + +get_frame_lvar_size(ea) + Get size of local variables in function frame + + @param ea: any address belonging to the function + + @return: Size of local variables in bytes. + If the function doesn't have a frame, return 0 + If the function does't exist, return None + +Help on function get_frame_regs_size in module idc: + +get_frame_regs_size(ea) + Get size of saved registers in function frame + + @param ea: any address belonging to the function + + @return: Size of saved registers in bytes. + If the function doesn't have a frame, return 0 + This value is used as offset for BP (if FUNC_FRAME is set) + If the function does't exist, return None + +Help on function get_frame_size in module idc: + +get_frame_size(ea) + Get full size of function frame + + @param ea: any address belonging to the function + @returns: Size of function frame in bytes. + This function takes into account size of local + variables + size of saved registers + size of + return address + size of function arguments + If the function doesn't have a frame, return size of + function return address in the stack. + If the function does't exist, return 0 + +Help on function get_full_flags in module ida_bytes: + +get_full_flags(*args) + get_full_flags(ea) -> flags_t + + + Get flags value for address 'ea'. + + @param ea (C++: ea_t) + @return: 0 if address is not present in the program + +Help on function get_func_attr in module idc: + +get_func_attr(ea, attr) + Get a function attribute + + @param ea: any address belonging to the function + @param attr: one of FUNCATTR_... constants + + @return: BADADDR - error otherwise returns the attribute value + +Help on function get_func_cmt in module idc: + +get_func_cmt(ea, repeatable) + Retrieve function comment + + @param ea: any address belonging to the function + @param repeatable: 1: get repeatable comment + 0: get regular comment + + @return: function comment string + +Help on function get_func_flags in module idc: + +get_func_flags(ea) + Retrieve function flags + + @param ea: any address belonging to the function + + @return: -1 - function doesn't exist otherwise returns the flags + +Help on function get_func_name in module idc: + +get_func_name(ea) + Retrieve function name + + @param ea: any address belonging to the function + + @return: null string - function doesn't exist + otherwise returns function name + +Help on function get_func_off_str in module idc: + +get_func_off_str(ea) + Convert address to 'funcname+offset' string + + @param ea: address to convert + + @return: if the address belongs to a function then return a string + formed as 'name+offset' where 'name' is a function name + 'offset' is offset within the function else return null string + +Help on function get_hash_long in module idc: + +get_hash_long(hash_id, key) + Gets the long value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + + @return: the 32bit or 64bit value of the element, or 0 if no such + element. + +Help on function get_hash_string in module idc: + +get_hash_string(hash_id, key) + Gets the string value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + + @return: the string value of the element, or None if no such + element. + +Help on function get_idb_path in module idc: + +get_idb_path() + Get IDB full path + + This function returns full path of the current IDB database + +Help on function get_inf_attr in module idc: + +get_inf_attr(attr) + +Help on function get_input_file_path in module ida_nalt: + +get_input_file_path(*args) + get_input_file_path() -> str + + + Get full path of the input file. + +Help on function get_item_end in module ida_bytes: + +get_item_end(*args) + get_item_end(ea) -> ea_t + + + Get the end address of the item at 'ea'. The returned address doesn't + belong to the current item. Unexplored bytes are counted as 1 byte + entities. + + @param ea (C++: ea_t) + +Help on function get_item_head in module ida_bytes: + +get_item_head(*args) + get_item_head(ea) -> ea_t + + + Get the start address of the item at 'ea'. If there is no current + item, then 'ea' will be returned (see definition at the end of + 'bytes.hpp' source) + + @param ea (C++: ea_t) + +Help on function get_item_size in module idc: + +get_item_size(ea) + Get size of instruction or data item in bytes + + @param ea: linear address + + @return: 1..n + +Help on function get_last_bmask in module ida_enum: + +get_last_bmask(*args) + get_last_bmask(id) -> bmask_t + + + Get last bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the biggest bitmask for enum, or DEFMASK + +Help on function get_last_enum_member in module idc: + +get_last_enum_member(enum_id, bmask) + Get last constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) + + @return: value of constant or idaapi.BADNODE no constants are defined + All constants are sorted by their values + as unsigned longs. + +Help on function get_last_hash_key in module idc: + +get_last_hash_key(hash_id) + Get the last key in the hash. + + @param hash_id: The hash ID. + + @return: the key, 0 otherwise. + +Help on function get_last_index in module idc: + +get_last_index(tag, array_id) + Get index of last existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + + @return: -1 if the array is empty, otherwise index of first array + element of given type. + +Help on function get_last_member in module idc: + +get_last_member(sid) + Get offset of the last member of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if structure has no members, + otherwise returns offset of the last member. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_last_struc_idx in module ida_struct: + +get_last_struc_idx(*args) + get_last_struc_idx() -> uval_t + + + Get index of last structure. + + @return: BADADDR if no known structures, get_struc_qty() -1 + otherwise + +Help on function get_local_tinfo in module idc: + +get_local_tinfo(ordinal) + Get local type information as 'typeinfo' object + + @param ordinal: slot number (1...NumberOfLocalTypes) + @return: None on failure, or (type, fields) tuple. + +Help on function get_manual_insn in module ida_bytes: + +get_manual_insn(*args) + get_manual_insn(ea) -> str + + + Retrieve the user-specified string for the manual instruction. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @return: size of manual instruction or -1 + +Help on function get_member_cmt in module idc: + +get_member_cmt(sid, member_offset, repeatable) + Get comment of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + @param repeatable: 1: get repeatable comment + 0: get regular comment + + @return: None if bad structure type ID is passed + or no such member in the structure + otherwise returns comment of the specified member. + +Help on function get_member_flag in module idc: + +get_member_flag(sid, member_offset) + Get type of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns type of the member, see bit + definitions above. If the member type is a structure + then function GetMemberStrid() should be used to + get the structure type id. + +Help on function get_member_id in module idc: + +get_member_id(sid, member_offset) + @param sid: structure type ID + @param member_offset:. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: -1 if bad structure type ID is passed or there is + no member at the specified offset. + otherwise returns the member id. + +Help on function get_member_name in module idc: + +get_member_name(sid, member_offset) + Get name of a member of a structure + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: None if bad structure type ID is passed + or no such member in the structure + otherwise returns name of the specified member. + +Help on function get_member_offset in module idc: + +get_member_offset(sid, member_name) + Get offset of a member of a structure by the member name + + @param sid: structure type ID + @param member_name: name of structure member + + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns offset of the specified member. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_member_qty in module idc: + +get_member_qty(sid) + Get number of members of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed otherwise + returns number of members. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_member_size in module idc: + +get_member_size(sid, member_offset) + Get size of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: None if bad structure type ID is passed, + or no such member in the structure + otherwise returns size of the specified + member in bytes. + +Help on function get_member_strid in module idc: + +get_member_strid(sid, member_offset) + Get structure id of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns structure id of the member. + If the current member is not a structure, returns -1. + +Help on function get_min_spd_ea in module idc: + +get_min_spd_ea(func_ea) + Return the address with the minimal spd (stack pointer delta) + If there are no SP change points, then return BADADDR. + + @param func_ea: function start + @return: BADDADDR - no such function + +Help on function get_module_name in module idc: + +get_module_name(base) + Get process module name + + @param base: the base address of the module + + @return: required info or None + +Help on function get_module_size in module idc: + +get_module_size(base) + Get process module size + + @param base: the base address of the module + + @return: required info or -1 + +Help on function get_name in module idc: + +get_name(ea, gtn_flags=0) + Get name at the specified address + + @param ea: linear address + @param gtn_flags: how exactly the name should be retrieved. + combination of GN_ bits + + @return: "" - byte has no name + +Help on function get_name_ea in module ida_name: + +get_name_ea(*args) + get_name_ea(_from, name) -> ea_t + + + Get address of the name. Dummy names (like byte_xxxx where xxxx are + hex digits) are parsed by this function to obtain the address. The + database is not consulted for them. This function works only with + regular names. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: address of the name or BADADDR + +Help on function get_name_ea_simple in module idc: + +get_name_ea_simple(name) + Get linear address of a name + + @param name: name of program byte + + @return: address of the name + BADADDR - No such name + +Help on function get_next_bmask in module ida_enum: + +get_next_bmask(*args) + get_next_bmask(id, bmask) -> bmask_t + + + Get next bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value higher than the specified + value, or DEFMASK + +Help on function get_next_cref_from in module ida_xref: + +get_next_cref_from(*args) + get_next_cref_from(frm, current) -> ea_t + + + Get next instruction referenced from the specified instruction. + + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_from() or + previous call to get_next_cref_from() functions. + (C++: ea_t) + @return: next referenced address or BADADDR . The lastXR variable + contains type of the reference. + +Help on function get_next_cref_to in module ida_xref: + +get_next_cref_to(*args) + get_next_cref_to(to, current) -> ea_t + + + Get next instruction referencing to the specified instruction. + + @param to: linear address of referenced instruction (C++: ea_t) + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_to() or previous + call to get_next_cref_to() functions. (C++: ea_t) + @return: linear address of the next referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_next_dref_from in module ida_xref: + +get_next_dref_from(*args) + get_next_dref_from(frm, current) -> ea_t + + + Get next data referenced from the specified address. + + @param current: linear address of current referenced data. This value + is returned by get_first_dref_from() or previous + call to get_next_dref_from() functions. (C++: ea_t) + @return: linear address of next data or BADADDR . The lastXR + variable contains type of the reference + +Help on function get_next_dref_to in module ida_xref: + +get_next_dref_to(*args) + get_next_dref_to(to, current) -> ea_t + + + Get address of instruction/data referencing to the specified data + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @param current: current linear address. This value is returned by + get_first_dref_to() or previous call to + get_next_dref_to() functions. (C++: ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_next_enum_member in module idc: + +get_next_enum_member(enum_id, value, bmask) + Get next constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant ordinary enums accept only ida_enum.DEFMASK as a bitmask + @param value: value of the current constant + + @return: value of a constant with value higher than the specified + value. idaapi.BADNODE no such constants exist. + All constants are sorted by their values as unsigned longs. + +Help on function get_next_fchunk in module idc: + +get_next_fchunk(ea) + Get next function chunk + + @param ea: any address + + @return: the starting address of the next function chunk or BADADDR + + @note: This function enumerates all chunks of all functions in the database + +Help on function get_next_fcref_from in module ida_xref: + +get_next_fcref_from(*args) + get_next_fcref_from(frm, current) -> ea_t + +Help on function get_next_fcref_to in module ida_xref: + +get_next_fcref_to(*args) + get_next_fcref_to(to, current) -> ea_t + +Help on function get_next_fixup_ea in module ida_fixup: + +get_next_fixup_ea(*args) + get_next_fixup_ea(ea) -> ea_t + + + Find next address with fixup information + + @param ea: current address (C++: ea_t) + @return: the next address with fixup information, or BADADDR + +Help on function get_next_func in module idc: + +get_next_func(ea) + Find next function + + @param ea: any address belonging to the function + + @return: BADADDR - no more functions + otherwise returns the next function start address + +Help on function get_next_hash_key in module idc: + +get_next_hash_key(hash_id, key) + Get the next key in the hash. + + @param hash_id: The hash ID. + @param key: The current key. + + @return: the next key, 0 otherwise + +Help on function get_next_index in module idc: + +get_next_index(tag, array_id, idx) + Get index of the next existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of the current element. + + @return: -1 if no more elements, otherwise returns index of the + next array element of given type. + +Help on function get_next_module in module idc: + +get_next_module(base) + Enumerate process modules + + @param base: previous module's base address + + @return: next module's base address or None on failure + +Help on function get_next_offset in module idc: + +get_next_offset(sid, offset) + Get next offset in a structure + + @param sid: structure type ID + @param offset: current offset + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if no (more) offsets in the structure, + otherwise returns next offset in a structure. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + This function returns a member offset or a hole offset. + It will return size of the structure if input + 'offset' belongs to the last member of the structure. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_next_seg in module idc: + +get_next_seg(ea) + Get next segment + + @param ea: linear address + + @return: start of the next segment + BADADDR - no next segment + +Help on function get_next_struc_idx in module ida_struct: + +get_next_struc_idx(*args) + get_next_struc_idx(idx) -> uval_t + + + Get next struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is out of bounds, otherwise idx++ + +Help on function get_numbered_type_name in module idc: + +get_numbered_type_name(ordinal) + Retrieve a local type name + + @param ordinal: slot number (1...NumberOfLocalTypes) + + returns: local type name or None + +Help on function get_operand_type in module idc: + +get_operand_type(ea, n) + Get type of instruction operand + + @param ea: linear address of instruction + @param n: number of operand: + 0 - the first operand + 1 - the second operand + + @return: any of o_* constants or -1 on error + +Help on function get_operand_value in module idc: + +get_operand_value(ea, n) + Get number used in the operand + + This function returns an immediate number used in the operand + + @param ea: linear address of instruction + @param n: the operand number + + @return: value + operand is an immediate value => immediate value + operand has a displacement => displacement + operand is a direct memory ref => memory address + operand is a register => register number + operand is a register phrase => phrase number + otherwise => -1 + +Help on function get_ordinal_qty in module idc: + +get_ordinal_qty() + Get number of local types + 1 + + @return: value >= 1. 1 means that there are no local types. + +Help on function get_original_byte in module ida_bytes: + +get_original_byte(*args) + get_original_byte(ea) -> uint64 + + + Get original byte value (that was before patching). This function + works for wide byte processors too. + + @param ea (C++: ea_t) + +Help on function get_prev_bmask in module ida_enum: + +get_prev_bmask(*args) + get_prev_bmask(id, bmask) -> bmask_t + + + Get prev bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value lower than the specified value, + or DEFMASK + +Help on function get_prev_enum_member in module idc: + +get_prev_enum_member(enum_id, value, bmask) + Get prev constant in the enum + + @param enum_id: id of enum + @param bmask : bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + @param value: value of the current constant + + @return: value of a constant with value lower than the specified + value. idaapi.BADNODE no such constants exist. + All constants are sorted by their values as unsigned longs. + +Help on function get_prev_fchunk in module idc: + +get_prev_fchunk(ea) + Get previous function chunk + + @param ea: any address + + @return: the starting address of the function chunk or BADADDR + + @note: This function enumerates all chunks of all functions in the database + +Help on function get_prev_fixup_ea in module ida_fixup: + +get_prev_fixup_ea(*args) + get_prev_fixup_ea(ea) -> ea_t + + + Find previous address with fixup information + + @param ea: current address (C++: ea_t) + @return: the previous address with fixup information, or BADADDR + +Help on function get_prev_func in module idc: + +get_prev_func(ea) + Find previous function + + @param ea: any address belonging to the function + + @return: BADADDR - no more functions + otherwise returns the previous function start address + +Help on function get_prev_hash_key in module idc: + +get_prev_hash_key(hash_id, key) + Get the previous key in the hash. + + @param hash_id: The hash ID. + @param key: The current key. + + @return: the previous key, 0 otherwise + +Help on function get_prev_index in module idc: + +get_prev_index(tag, array_id, idx) + Get index of the previous existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of the current element. + + @return: -1 if no more elements, otherwise returns index of the + previous array element of given type. + +Help on function get_prev_offset in module idc: + +get_prev_offset(sid, offset) + Get previous offset in a structure + + @param sid: structure type ID + @param offset: current offset + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if no (more) offsets in the structure, + otherwise returns previous offset in a structure. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + This function returns a member offset or a hole offset. + It will return size of the structure if input + 'offset' is bigger than the structure size. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_prev_struc_idx in module ida_struct: + +get_prev_struc_idx(*args) + get_prev_struc_idx(idx) -> uval_t + + + Get previous struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is negative, otherwise idx - 1 + +Help on function get_process_state in module ida_dbg: + +get_process_state(*args) + get_process_state() -> int + + + Return the state of the currently debugged process. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @return: one of Debugged process states + +Help on function get_processes in module ida_dbg: + +get_processes(*args) + get_processes(proclist) -> ssize_t + + + Take a snapshot of running processes and return their description. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param proclist (C++: procinfo_vec_t *) + @return: number of processes or -1 on error + +Help on function get_qword in module ida_bytes: + +get_qword(*args) + get_qword(ea) -> uint64 + + + Get one qword (64-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_reg_value in module idc: + +get_reg_value(name) + Get register value + + @param name: the register name + + @note: The debugger should be running. otherwise the function fails + the register name should be valid. + It is not necessary to use this function to get register values + because a register name in the script will do too. + + @return: register value (integer or floating point) + +Help on function get_ret_tev_return in module ida_dbg: + +get_ret_tev_return(*args) + get_ret_tev_return(n) -> ea_t + + + Get the return address from a function return trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function return event. + +Help on function get_root_filename in module ida_nalt: + +get_root_filename(*args) + get_root_filename() -> str + + + Get file name only of the input file. + +Help on function get_screen_ea in module ida_kernwin: + +get_screen_ea(*args) + get_screen_ea() -> ea_t + + + Get the address at the screen cursor ( 'ui_screenea' ) + +Help on function get_segm_attr in module idc: + +get_segm_attr(segea, attr) + Get segment attribute + + @param segea: any address within segment + @param attr: one of SEGATTR_... constants + +Help on function get_segm_by_sel in module idc: + +get_segm_by_sel(base) + Get segment by segment base + + @param base: segment base paragraph or selector + + @return: linear address of the start of the segment or BADADDR + if no such segment + +Help on function get_segm_end in module idc: + +get_segm_end(ea) + Get end address of a segment + + @param ea: any address in the segment + + @return: end of segment (an address past end of the segment) + BADADDR - the specified address doesn't belong to any segment + +Help on function get_segm_name in module idc: + +get_segm_name(ea) + Get name of a segment + + @param ea: any address in the segment + + @return: "" - no segment at the specified address + +Help on function get_segm_start in module idc: + +get_segm_start(ea) + Get start address of a segment + + @param ea: any address in the segment + + @return: start of segment + BADADDR - the specified address doesn't belong to any segment + +Help on function get_source_linnum in module ida_nalt: + +get_source_linnum(*args) + get_source_linnum(ea) -> uval_t + +Help on function get_sourcefile in module ida_lines: + +get_sourcefile(*args) + get_sourcefile(ea, bounds=None) -> char const * + + + Get name of source file occupying the given address. + + @param ea: linear address (C++: ea_t) + @param bounds: pointer to the output buffer with the address range for + the current file. May be NULL. (C++: range_t *) + @return: NULL if source file information is not found, otherwise + returns pointer to file name + +Help on function get_sp_delta in module idc: + +get_sp_delta(ea) + Get modification of SP made by the instruction + + @param ea: end address of the instruction + i.e.the last address of the instruction+1 + + @return: Get modification of SP made at the specified location + If the specified location doesn't contain a SP change point, return 0 + Otherwise return delta of SP modification + +Help on function get_spd in module idc: + +get_spd(ea) + Get current delta for the stack pointer + + @param ea: end address of the instruction + i.e.the last address of the instruction+1 + + @return: The difference between the original SP upon + entering the function and SP for the specified address + +Help on function get_sreg in module idc: + +get_sreg(ea, reg) + Get value of segment register at the specified address + + @param ea: linear address + @param reg: name of segment register + + @return: the value of the segment register or -1 on error + + @note: The segment registers in 32bit program usually contain selectors, + so to get paragraph pointed to by the segment register you need to + call sel2para() function. + +Help on function get_step_trace_options in module ida_dbg: + +get_step_trace_options(*args) + get_step_trace_options() -> int + + + Get current step tracing options. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: Step trace options + +Help on function get_str_type in module idc: + +get_str_type(ea) + Get string type + + @param ea: linear address + + @return: One of STRTYPE_... constants + +Help on function get_strlit_contents in module idc: + +get_strlit_contents(ea, length=-1, strtype=0) + Get string contents + @param ea: linear address + @param length: string length. -1 means to calculate the max string length + @param strtype: the string type (one of STRTYPE_... constants) + + @return: string contents or empty string + +Help on function get_struc_by_idx in module ida_struct: + +get_struc_by_idx(*args) + get_struc_by_idx(idx) -> tid_t + + + Get struct id by struct number. + + + @param idx (C++: uval_t) + +Help on function get_struc_cmt in module ida_struct: + +get_struc_cmt(*args) + get_struc_cmt(id, repeatable) -> str + + + Get struct comment. + + + @param id (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_struc_id in module ida_struct: + +get_struc_id(*args) + get_struc_id(name) -> tid_t + + + Get struct id by name. + + + @param name (C++: const char *) + +Help on function get_struc_idx in module ida_struct: + +get_struc_idx(*args) + get_struc_idx(id) -> uval_t + + + Get internal number of the structure. + + + @param id (C++: tid_t) + +Help on function get_struc_name in module ida_struct: + +get_struc_name(*args) + get_struc_name(id, flags=0) -> str + + + Get struct name by id + + @param id: struct id (C++: tid_t) + @param flags: Struct name flags (C++: int) + +Help on function get_struc_qty in module ida_struct: + +get_struc_qty(*args) + get_struc_qty() -> size_t + + + Get number of known structures. + +Help on function get_struc_size in module ida_struct: + +get_struc_size(*args) + get_struc_size(sptr) -> asize_t + get_struc_size(id) -> asize_t + + + Get struct size (also see 'get_struc_size(tid_t)' ) + + + @param sptr (C++: const struc_t *) + +Help on function get_tev_ea in module ida_dbg: + +get_tev_ea(*args) + get_tev_ea(n) -> ea_t + +Help on function get_tev_reg_mem in module ida_dbg: + +get_tev_reg_mem(tev, idx) + +Help on function get_tev_reg_mem_ea in module ida_dbg: + +get_tev_reg_mem_ea(tev, idx) + +Help on function get_tev_reg_mem_qty in module ida_dbg: + +get_tev_reg_mem_qty(tev) + +Help on function get_tev_qty in module ida_dbg: + +get_tev_qty(*args) + get_tev_qty() -> int + + + Get number of trace events available in trace buffer. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_tev_reg_val in module ida_dbg: + +get_tev_reg_val(tev, reg) + +Help on function get_tev_tid in module ida_dbg: + +get_tev_tid(*args) + get_tev_tid(n) -> int + +Help on function get_tev_type in module ida_dbg: + +get_tev_type(*args) + get_tev_type(n) -> int + +Help on function get_thread_qty in module ida_dbg: + +get_thread_qty(*args) + get_thread_qty() -> int + + + Get number of threads. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_tinfo in module idc: + +get_tinfo(ea) + Get type information of function/variable as 'typeinfo' object + + @param ea: the address of the object + @return: None on failure, or (type, fields) tuple. + +Help on function get_trace_file_desc in module ida_dbg: + +get_trace_file_desc(*args) + get_trace_file_desc(filename) -> str + + + Get the file header of the specified trace file. + + + @param filename (C++: const char *) + +Help on function get_type in module idc: + +get_type(ea) + Get type of function/variable + + @param ea: the address of the object + + @return: type string or None if failed + +Help on function get_wide_byte in module ida_bytes: + +get_wide_byte(*args) + get_wide_byte(ea) -> uint64 + + + Get one wide byte of the program at 'ea'. Some processors may access + more than 8bit quantity at an address. These processors have 32-bit + byte organization from the IDA's point of view. + + @param ea (C++: ea_t) + +Help on function get_wide_dword in module ida_bytes: + +get_wide_dword(*args) + get_wide_dword(ea) -> uint64 + + + Get two wide words (4 'bytes') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in + \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 + + @param ea (C++: ea_t) + +Help on function get_wide_word in module ida_bytes: + +get_wide_word(*args) + get_wide_word(ea) -> uint64 + + + Get one wide word (2 'byte') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_xref_type in module idc: + +get_xref_type() + Return type of the last xref obtained by + [RD]first/next[B0] functions. + + @return: constants fl_* or dr_* + +Help on function getn_enum in module ida_enum: + +getn_enum(*args) + getn_enum(n) -> enum_t + + + Get enum by its ordinal number (0..n). + + + @param n (C++: size_t) + +Help on function getn_thread in module ida_dbg: + +getn_thread(*args) + getn_thread(n) -> thid_t + + + Get the ID of a thread. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: + int) + @return: NO_THREAD if the thread doesn't exist. + +Help on function getn_thread_name in module ida_dbg: + +getn_thread_name(*args) + getn_thread_name(n) -> char const * + + + Get the NAME of a thread \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 + for the current thread (C++: int) + @return: thread name or NULL if the thread doesn't exist. + +Help on function guess_type in module idc: + +guess_type(ea) + Guess type of function/variable + + @param ea: the address of the object, can be the structure member id too + + @return: type string or None if failed + +Help on function hasName in module idc: + +hasName(F) + +Help on function hasUserName in module idc: + +hasUserName(F) + +Help on function has_value in module idc: + +has_value(F) + +Help on function here in module idc: + +here() + # Convenience functions: + +Help on function idadir in module idc: + +idadir() + Get IDA directory + + This function returns the directory where IDA.EXE resides + +Help on function import_type in module idc: + +import_type(idx, type_name) + Copy information from type library to database + Copy structure, union, or enum definition from the type library + to the IDA database. + + @param idx: the position of the new type in the list of + types (structures or enums) -1 means at the end of the list + @param type_name: name of type to copy + + @return: BADNODE-failed, otherwise the type id (structure id or enum id) + +Help on function isBin0 in module idc: + +isBin0(F) + +Help on function isBin1 in module idc: + +isBin1(F) + +Help on function isDec0 in module idc: + +isDec0(F) + +Help on function isDec1 in module idc: + +isDec1(F) + +Help on function isExtra in module idc: + +isExtra(F) + +Help on function isHex0 in module idc: + +isHex0(F) + +Help on function isHex1 in module idc: + +isHex1(F) + +Help on function isOct0 in module idc: + +isOct0(F) + +Help on function isOct1 in module idc: + +isOct1(F) + +Help on function isRef in module idc: + +isRef(F) + +Help on function is_align in module idc: + +is_align(F) + +Help on function is_bf in module ida_enum: + +is_bf(*args) + is_bf(id) -> bool + + + Is enum a bitfield? (otherwise - plain enum, no bitmasks except for + 'DEFMASK' are allowed) + + @param id (C++: enum_t) + +Help on function is_byte in module idc: + +is_byte(F) + +Help on function is_char0 in module idc: + +is_char0(F) + +Help on function is_char1 in module idc: + +is_char1(F) + +Help on function is_code in module idc: + +is_code(F) + +Help on function is_data in module idc: + +is_data(F) + +Help on function is_defarg0 in module idc: + +is_defarg0(F) + +Help on function is_defarg1 in module idc: + +is_defarg1(F) + +Help on function is_double in module idc: + +is_double(F) + +Help on function is_dword in module idc: + +is_dword(F) + +Help on function is_enum0 in module idc: + +is_enum0(F) + +Help on function is_enum1 in module idc: + +is_enum1(F) + +Help on function is_event_handled in module idc: + +is_event_handled() + Is the debug event handled? + + @return: boolean + +Help on function is_float in module idc: + +is_float(F) + +Help on function is_flow in module idc: + +is_flow(F) + +Help on function is_head in module idc: + +is_head(F) + +Help on function is_loaded in module idc: + +is_loaded(ea) + Is the byte initialized? + +Help on function is_manual0 in module idc: + +is_manual0(F) + +Help on function is_manual1 in module idc: + +is_manual1(F) + +Help on function is_mapped in module idc: + +is_mapped(ea) + +Help on function is_off0 in module idc: + +is_off0(F) + +Help on function is_off1 in module idc: + +is_off1(F) + +Help on function is_oword in module idc: + +is_oword(F) + +Help on function is_pack_real in module idc: + +is_pack_real(F) + +Help on function is_qword in module idc: + +is_qword(F) + +Help on function is_seg0 in module idc: + +is_seg0(F) + +Help on function is_seg1 in module idc: + +is_seg1(F) + +Help on function is_stkvar0 in module idc: + +is_stkvar0(F) + +Help on function is_stkvar1 in module idc: + +is_stkvar1(F) + +Help on function is_strlit in module idc: + +is_strlit(F) + +Help on function is_stroff0 in module idc: + +is_stroff0(F) + +Help on function is_stroff1 in module idc: + +is_stroff1(F) + +Help on function is_struct in module idc: + +is_struct(F) + +Help on function is_tail in module idc: + +is_tail(F) + +Help on function is_tbyte in module idc: + +is_tbyte(F) + +Help on function is_union in module idc: + +is_union(sid) + Is a structure a union? + + @param sid: structure type ID + + @return: 1: yes, this is a union id + 0: no + + @note: Unions are a special kind of structures + +Help on function is_unknown in module idc: + +is_unknown(F) + +Help on function is_valid_trace_file in module ida_dbg: + +is_valid_trace_file(*args) + is_valid_trace_file(filename) -> bool + + + Is the specified file a valid trace file for the current database? + + + @param filename (C++: const char *) + +Help on function is_word in module idc: + +is_word(F) + +Help on function jumpto in module ida_kernwin: + +jumpto(*args) + jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool + jumpto(custom_viewer, place, x, y) -> bool + + + Jump to the specified address ( 'ui_jumpto' ). + + @param ea: destination (C++: ea_t) + @param opnum: -1: don't change x coord (C++: int) + @param uijmp_flags: Jump flags (C++: int) + @return: success + +Help on function load_and_run_plugin in module ida_loader: + +load_and_run_plugin(*args) + load_and_run_plugin(name, arg) -> bool + + + Load & run a plugin. + + + @param name (C++: const char *) + @param arg (C++: size_t) + +Help on function load_debugger in module ida_dbg: + +load_debugger(*args) + load_debugger(dbgname, use_remote) -> bool + +Help on function load_trace_file in module ida_dbg: + +load_trace_file(*args) + load_trace_file(filename) -> str + + + Load a recorded trace file in the trace window. If the call succeeds + and 'buf' is not null, the description of the trace stored in the + binary trace file will be returned in 'buf' + + @param filename (C++: const char *) + +Help on function loadfile in module idc: + +loadfile(filepath, pos, ea, size) + +Help on function ltoa in module idc: + +ltoa(n, radix) + +Help on function make_array in module idc: + +make_array(ea, nitems) + Create an array. + + @param ea: linear address + @param nitems: size of array in items + + @note: This function will create an array of the items with the same type as + the type of the item at 'ea'. If the byte at 'ea' is undefined, then + this function will create an array of bytes. + +Help on function move_segm in module idc: + +move_segm(ea, to, flags) + 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 + + @param ea: any address within the segment to move + @param to: new segment start address + @param flags: combination MFS_... constants + + @returns: MOVE_SEGM_... error code + +Help on function msg in module ida_kernwin: + +msg(*args) + msg(o) -> PyObject * + + + Display an UTF-8 string in the message window + + The result of the stringification of the arguments + will be treated as an UTF-8 string. + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + +Help on function next_addr in module ida_bytes: + +next_addr(*args) + next_addr(ea) -> ea_t + + + Get next address in the program (i.e. next address which has flags). + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function next_func_chunk in module idc: + +next_func_chunk(funcea, tailea) + Get the next function chunk of the specified function + + @param funcea: any address in the function + @param tailea: any address in the current chunk + + @return: the starting address of the next function chunk or BADADDR + + @note: This function returns the next chunk of the specified function + +Help on function next_head in module idc: + +next_head(ea, maxea=BADADDR)↗ + Get next defined item (instruction or data) in the program + + @param ea: linear address to start search from + @param maxea: the search will stop at the address + maxea is not included in the search range + + @return: BADADDR - no (more) defined items + +Help on function next_not_tail in module ida_bytes: + +next_not_tail(*args) + next_not_tail(ea) -> ea_t + + + Get address of next non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function op_bin in module ida_bytes: + +op_bin(*args) + op_bin(ea, n) -> bool + + + set op type to 'bin_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_chr in module ida_bytes: + +op_chr(*args) + op_chr(ea, n) -> bool + + + set op type to 'char_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_dec in module ida_bytes: + +op_dec(*args) + op_dec(ea, n) -> bool + + + set op type to 'dec_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_enum in module ida_bytes: + +op_enum(*args) + op_enum(ea, n, id, serial) -> bool + + + Set operand representation to be 'enum_t'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @param id: id of enum (C++: enum_t) + @param serial: the serial number of the constant in the enumeration, + usually 0. the serial numbers are used if the + enumeration contains several constants with the same + value (C++: uchar) + @return: success + +Help on function op_flt in module ida_bytes: + +op_flt(*args) + op_flt(ea, n) -> bool + + + set op type to 'flt_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_hex in module ida_bytes: + +op_hex(*args) + op_hex(ea, n) -> bool + + + set op type to 'hex_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function set_forced_operand in module ida_bytes: + +set_forced_operand(*args) + set_forced_operand(ea, n, op) -> bool + + + Set forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @param op: text of operand NULL: do nothing (return 0) "" : delete + forced operand (C++: const char *) + @return: success + +Help on function op_num in module ida_bytes: + +op_num(*args) + op_num(ea, n) -> bool + + + set op type to 'num_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_oct in module ida_bytes: + +op_oct(*args) + op_oct(ea, n) -> bool + + + set op type to 'oct_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_offset in module ida_offset: + +op_offset(*args) + op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int + + + See 'op_offset_ex()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param type (C++: reftype_t) + @param target (C++: ea_t) + @param base (C++: ea_t) + @param tdelta (C++: adiff_t) + +Help on function op_offset_high16 in module idc: + +op_offset_high16(ea, n, target) + Convert operand to a high offset + High offset is the upper 16bits of an offset. + This type is used by TMS320C6 processors (and probably by other + RISC processors too) + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param target: the full value (all 32bits) of the offset + +Help on function op_plain_offset in module idc: + +op_plain_offset(ea, n, base) + Convert operand to an offset + (for the explanations of 'ea' and 'n' please see op_bin()) + + Example: + ======== + + seg000:2000 dw 1234h + + and there is a segment at paragraph 0x1000 and there is a data item + within the segment at 0x1234: + + seg000:1234 MyString db 'Hello, world!',0 + + Then you need to specify a linear address of the segment base to + create a proper offset: + + op_plain_offset(["seg000",0x2000],0,0x10000); + + and you will have: + + seg000:2000 dw offset MyString + + Motorola 680x0 processor have a concept of "outer offsets". + If you want to create an outer offset, you need to combine number + of the operand with the following bit: + + Please note that the outer offsets are meaningful only for + Motorola 680x0. + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param base: base of the offset as a linear address + If base == BADADDR then the current operand becomes non-offset + +Help on function op_seg in module ida_bytes: + +op_seg(*args) + op_seg(ea, n) -> bool + + + Set operand representation to be 'segment'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stkvar in module ida_bytes: + +op_stkvar(*args) + op_stkvar(ea, n) -> bool + + + Set operand representation to be 'stack variable'. Should be applied + to an instruction within a function. Should be applied after creating + a stack var using 'insn_t::create_stkvar()' . + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stroff in module idc: + +op_stroff(ea, n, strid, delta) + Convert operand to an offset in a structure + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param strid: id of a structure type + @param delta: struct offset delta. usually 0. denotes the difference + between the structure base and the pointer into the structure. + +Help on function parse_decl in module idc: + +parse_decl(inputtype, flags) + Parse type declaration + + @param inputtype: file name or C declarations (depending on the flags) + @param flags: combination of PT_... constants or 0 + + @return: None on failure or (name, type, fields) tuple + +Help on function parse_decls in module idc: + +parse_decls(inputtype, flags=0) + Parse type declarations + + @param inputtype: file name or C declarations (depending on the flags) + @param flags: combination of PT_... constants or 0 + + @return: number of parsing errors (0 no errors) + +Help on function patch_byte in module ida_bytes: + +patch_byte(*args) + patch_byte(ea, x) -> bool + + + Patch a byte of the program. The original value of the byte is saved + and can be obtained by 'get_original_byte()' . This function works for + wide byte processors too. + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function put_dbg_byte in module ida_dbg: + +put_dbg_byte(*args) + put_dbg_byte(ea, x) -> bool + + + Change one byte of the debugged process memory. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint32) + @return: true if the process memory has been modified + +Help on function patch_dword in module ida_bytes: + +patch_dword(*args) + patch_dword(ea, x) -> bool + + + Patch a dword of the program. The original value of the dword is saved + and can be obtained by 'get_original_dword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_qword in module ida_bytes: + +patch_qword(*args) + patch_qword(ea, x) -> bool + + + Patch a qword of the program. The original value of the qword is saved + and can be obtained by 'get_original_qword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_word in module ida_bytes: + +patch_word(*args) + patch_word(ea, x) -> bool + + + Patch a word of the program. The original value of the word is saved + and can be obtained by 'get_original_word()' . This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function plan_and_wait in module idc: + +plan_and_wait(sEA, eEA, final_pass=True) + Perform full analysis of the range + + @param sEA: starting linear address + @param eEA: ending linear address (excluded) + @param final_pass: make the final pass over the specified range + + @return: 1-ok, 0-Ctrl-Break was pressed. + +Help on function plan_to_apply_idasgn in module ida_funcs: + +plan_to_apply_idasgn(*args) + plan_to_apply_idasgn(fname) -> int + + + Add a signature file to the list of planned signature files. + + @param fname: file name. should not contain directory part. (C++: + const char *) + @return: 0 if failed, otherwise number of planned (and applied) + signatures + +Help on function prev_addr in module ida_bytes: + +prev_addr(*args) + prev_addr(ea) -> ea_t + + + Get previous address in the program. + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function prev_head in module idc: + +prev_head(ea, minea=0) + Get previous defined item (instruction or data) in the program + + @param ea: linear address to start search from + @param minea: the search will stop at the address + minea is included in the search range + + @return: BADADDR - no (more) defined items + +Help on function prev_not_tail in module ida_bytes: + +prev_not_tail(*args) + prev_not_tail(ea) -> ea_t + + + Get address of previous non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function print_decls in module idc: + +print_decls(ordinals, flags) + Print types in a format suitable for use in a header file + + @param ordinals: comma-separated list of type ordinals + @param flags: combination of PDF_... constants or 0 + + @return: string containing the type definitions + +Help on instance of _Feature in module __future__: + +class _Feature + | Methods defined here: + | + | __init__(self, optionalRelease, mandatoryRelease, compiler_flag) + | + | __repr__(self) + | + | getMandatoryRelease(self) + | Return release in which this feature will become mandatory. + | + | This is a 5-tuple, of the same form as sys.version_info, or, if + | the feature was dropped, is None. + | + | getOptionalRelease(self) + | Return first release in which this feature was recognized. + | + | This is a 5-tuple, of the same form as sys.version_info. + +Help on function print_insn_mnem in module idc: + +print_insn_mnem(ea) + Get instruction mnemonics + + @param ea: linear address of instruction + + @return: "" - no instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function print_operand in module idc: + +print_operand(ea, n) + Get operand of an instruction or data + + @param ea: linear address of the item + @param n: number of operand: + 0 - the first operand + 1 - the second operand + + @return: the current text representation of operand or "" + +Help on function process_config_line in module idc: + +process_config_line(directive) + Parse one or more ida.cfg config directives + @param directive: directives to process, for example: PACK_DATABASE=2 + + @note: If the directives are erroneous, a fatal error will be generated. + The settings are permanent: effective for the current session and the next ones + +Help on function process_ui_action in module idc: + +process_ui_action(name, flags=0) + Invokes an IDA UI action by name + + @param name: Command name + @param flags: Reserved. Must be zero + @return: Boolean + +Help on function mark_position in module ida_idc: + +mark_position(*args) + mark_position(ea, lnnum, x, y, slot, comment) + +Help on function qexit in module ida_pro: + +qexit(*args) + qexit(code) + + + Call qatexit functions, shut down UI and kernel, and exit. + + @param code: exit code (C++: int) + +Help on function qsleep in module idc: + +qsleep(milliseconds) + qsleep the specified number of milliseconds + This function suspends IDA for the specified amount of time + + @param milliseconds: time to sleep + +Help on function read_dbg_byte in module idc: + +read_dbg_byte(ea) + Get value of program byte using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_dbg_dword in module idc: + +read_dbg_dword(ea) + Get value of program double-word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function dbg_read_memory in module ida_idd: + +dbg_read_memory(*args) + dbg_read_memory(ea, sz) -> PyObject * + + + Reads from the debugee's memory at the specified ea + @return: + - The read buffer (as a string) + - Or None on failure + +Help on function read_dbg_qword in module idc: + +read_dbg_qword(ea) + Get value of program quadro-word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_dbg_word in module idc: + +read_dbg_word(ea) + Get value of program word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_selection_end in module idc: + +read_selection_end() + Get end address of the selected range + + @return: BADADDR - the user has not selected an range + +Help on function read_selection_start in module idc: + +read_selection_start() + Get start address of the selected range + returns BADADDR - the user has not selected an range + +Help on function readlong in module idc: + +readlong(handle, mostfirst) + +Help on function readshort in module idc: + +readshort(handle, mostfirst) + +Help on function readstr in module idc: + +readstr(handle) + +Help on function rebase_program in module ida_segment: + +rebase_program(*args) + rebase_program(delta, flags) -> int + + + Rebase the whole program by 'delta' bytes. + + @param delta: number of bytes to move the program (C++: adiff_t) + @param flags: Move segment flags it is recommended to use + MSF_FIXONCE so that the loader takes care of global + variables it stored in the database (C++: int) + @return: Move segment result codes + +Help on function recalc_spd in module ida_frame: + +recalc_spd(*args) + recalc_spd(cur_ea) -> bool + + + Recalculate SP delta for an instruction that stops execution. The next + instruction is not reached from the current instruction. We need to + recalculate SP for the next instruction.This function will create a + new automatic SP register change point if necessary. It should be + called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the + current instruction doesn't pass the execution flow to the next + instruction. + + @param cur_ea: linear address of the current instruction (C++: ea_t) + +Help on function refresh_debugger_memory in module ida_dbg: + +refresh_debugger_memory(*args) + refresh_debugger_memory() -> PyObject * + + + Refreshes the debugger memory + @return: Nothing + +Help on function refresh_idaview_anyway in module ida_kernwin: + +refresh_idaview_anyway(*args) + refresh_idaview_anyway() + + + Refresh all disassembly views ( 'ui_refresh' ), forces an immediate + refresh. Please consider 'request_refresh()' instead + +Help on function refresh_choosers in module ida_kernwin: + +refresh_choosers(*args) + refresh_choosers() + +Help on function remove_fchunk in module idc: + +remove_fchunk(funcea, tailea) + Remove a function chunk from the function + + @param funcea: any address in the function + @param tailea: any address in the function chunk to remove + + @return: 0 if failed, 1 if success + +Help on function rename_array in module idc: + +rename_array(array_id, newname) + Rename array, by its ID. + + @param id: The ID of the array to rename. + @param newname: The new name of the array. + + @return: 1 in case of success, 0 otherwise + +Help on function rename_entry in module ida_entry: + +rename_entry(*args) + rename_entry(ord, name, flags=0) -> bool + + + Rename entry point. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to a repeatable + comment. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +Help on function resume_process in module idc: + +resume_process() + +Help on function resume_thread in module ida_dbg: + +resume_thread(*args) + resume_thread(tid) -> int + + + Resume thread. \sq{Type, Synchronous function - available as request, + Notification, none (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function retrieve_input_file_md5 in module ida_nalt: + +retrieve_input_file_md5(*args) + retrieve_input_file_md5() -> str + + + Get input file md5. + +Help on function rotate_byte in module idc: + +rotate_byte(x, count) + +Help on function rotate_dword in module idc: + +rotate_dword(x, count) + +Help on function rotate_left in module idc: + +rotate_left(value, count, nbits, offset) + Rotate a value to the left (or right) + + @param value: value to rotate + @param count: number of times to rotate. negative counter means + rotate to the right + @param nbits: number of bits to rotate + @param offset: offset of the first bit to rotate + + @return: the value with the specified field rotated + all other bits are not modified + +Help on function rotate_word in module idc: + +rotate_word(x, count) + +Help on function run_to in module ida_dbg: + +run_to(*args) + run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Execute the process until the given address is reached. If no process + is active, a new process is started. Technically, the debugger sets up + a temporary breakpoint at the given address, and continues (or starts) + the execution of the whole process. So, all threads continue their + execution! \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_run_to' } + + @param ea: target address (C++: ea_t) + @param pid: not used yet. please do not specify this parameter. (C++: + pid_t) + @param tid: not used yet. please do not specify this parameter. (C++: + thid_t) + +Help on function save_database in module idc: + +save_database(idbname, flags=0) + Save current database to the specified idb file + + @param idbname: name of the idb file. if empty, the current idb + file will be used. + @param flags: combination of ida_loader.DBFL_... bits or 0 + +Help on function save_trace_file in module ida_dbg: + +save_trace_file(*args) + save_trace_file(filename, description) -> bool + + + Save the current trace in the specified file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function savefile in module idc: + +savefile(filepath, pos, ea, size) + +Help on function sel2para in module idc: + +sel2para(sel) + Get a selector value + + @param sel: the selector number + + @return: selector value if found + otherwise the input value (sel) + + @note: selector values are always in paragraphs + +Help on function select_thread in module ida_dbg: + +select_thread(*args) + select_thread(tid) -> bool + + + Select the given thread as the current debugged thread. All thread + related execution functions will work on this thread. The process must + be suspended to select a new thread. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param tid: ID of the thread to select (C++: thid_t) + @return: false if the thread doesn't exist. + +Help on function selector_by_name in module idc: + +selector_by_name(segname) + Get segment selector by name + + @param segname: name of segment + + @return: segment selector or BADADDR + +Help on function send_dbg_command in module idc: + +send_dbg_command(cmd) + Sends a command to the debugger module and returns the output string. + An exception will be raised if the debugger is not running or the current debugger does not export + the 'send_dbg_command' IDC command. + +Help on function set_array_long in module idc: + +set_array_long(array_id, idx, value) + Sets the long value of an array element. + + @param array_id: The array ID. + @param idx: Index of an element. + @param value: 32bit or 64bit value to store in the array + + @return: 1 in case of success, 0 otherwise + +Help on function set_array_params in module idc: + +set_array_params(ea, flags, litems, align) + Set array representation format + + @param ea: linear address + @param flags: combination of AP_... constants or 0 + @param litems: number of items per line. 0 means auto + @param align: element alignment + - -1: do not align + - 0: automatic alignment + - other values: element width + + @return: 1-ok, 0-failure + +Help on function set_array_string in module idc: + +set_array_string(array_id, idx, value) + Sets the string value of an array element. + + @param array_id: The array ID. + @param idx: Index of an element. + @param value: String value to store in the array + + @return: 1 in case of success, 0 otherwise + +Help on function set_bmask_cmt in module idc: + +set_bmask_cmt(enum_id, bmask, cmt, repeatable) + Set bitmask comment (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param cmt: comment + repeatable - type of comment, 0-regular, 1-repeatable + + @return: 1-ok, 0-failed + +Help on function set_bmask_name in module idc: + +set_bmask_name(enum_id, bmask, name) + Set bitmask name (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param name: name of bitmask + + @return: 1-ok, 0-failed + +Help on function set_bpt_attr in module idc: + +set_bpt_attr(address, bptattr, value) + modifiable characteristics of a breakpoint + + @param address: any address in the breakpoint range + @param bptattr: the attribute code, one of BPTATTR_* constants + BPTATTR_CND is not allowed, see set_bpt_cond() + @param value: the attibute value + + @return: success + +Help on function set_bpt_cond in module idc: + +set_bpt_cond(ea, cnd, is_lowcnd=0) + Set breakpoint condition + + @param ea: any address in the breakpoint range + @param cnd: breakpoint condition + @param is_lowcnd: 0 - regular condition, 1 - low level condition + + @return: success + +Help on function set_cmt in module ida_bytes: + +set_cmt(*args) + set_cmt(ea, comm, rptble) -> bool + + + Set an indented comment. + + @param ea: linear address (C++: ea_t) + @param comm: comment string NULL: do nothing (return 0) "" : + delete comment (C++: const char *) + @param rptble: is repeatable? (C++: bool) + @return: success + +Help on function set_color in module idc: + +set_color(ea, what, color) + Set item color + + @param ea: address of the item + @param what: type of the item (one of CIC_* constants) + @param color: new color code in RGB (hex 0xBBGGRR) + + @return: success (True or False) + +Help on function set_debugger_event_cond in module ida_dbg: + +set_debugger_event_cond(*args) + set_debugger_event_cond(nonnul_cond) + +Help on function set_debugger_options in module ida_dbg: + +set_debugger_options(*args) + set_debugger_options(options) -> uint + + + Set debugger options. Replaces debugger options with the specification + combination 'Debugger options' + + @param options (C++: uint) + @return: the old debugger options + +Help on function set_default_sreg_value in module idc: + +set_default_sreg_value(ea, reg, value) + Set default segment register value for a segment + + @param ea: any address in the segment + if no segment is present at the specified address + then all segments will be affected + @param reg: name of segment register + @param value: default value of the segment register. -1-undefined. + +Help on function set_enum_bf in module ida_enum: + +set_enum_bf(*args) + set_enum_bf(id, bf) -> bool + + + Set 'bitfield' bit of enum (i.e. convert it to a bitfield) + + + @param id (C++: enum_t) + @param bf (C++: bool) + +Help on function set_enum_cmt in module ida_enum: + +set_enum_cmt(*args) + set_enum_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum type. + + + @param id (C++: enum_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_flag in module ida_enum: + +set_enum_flag(*args) + set_enum_flag(id, flag) -> bool + + + Set data representation flags. + + + @param id (C++: enum_t) + @param flag (C++: flags_t) + +Help on function set_enum_idx in module ida_enum: + +set_enum_idx(*args) + set_enum_idx(id, idx) -> bool + + + Set serial number of enum. Also see 'get_enum_idx()' . + + @param id (C++: enum_t) + @param idx (C++: size_t) + +Help on function set_enum_member_cmt in module ida_enum: + +set_enum_member_cmt(*args) + set_enum_member_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum member. + + + @param id (C++: const_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_member_name in module ida_enum: + +set_enum_member_name(*args) + set_enum_member_name(id, name) -> bool + + + Set name of enum member. + + + @param id (C++: const_t) + @param name (C++: const char *) + +Help on function set_enum_name in module ida_enum: + +set_enum_name(*args) + set_enum_name(id, name) -> bool + + + Set name of enum type. + + + @param id (C++: enum_t) + @param name (C++: const char *) + +Help on function set_enum_width in module ida_enum: + +set_enum_width(*args) + set_enum_width(id, width) -> bool + + + See comment for 'get_enum_width()' + + + @param id (C++: enum_t) + @param width (C++: int) + +Help on function set_fchunk_attr in module idc: + +set_fchunk_attr(ea, attr, value) + Set a function chunk attribute + + @param ea: any address in the chunk + @param attr: only FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER + @param value: desired value + + @return: 0 if failed, 1 if success + +Help on function set_fixup in module idc: + +set_fixup(ea, fixuptype, fixupflags, targetsel, targetoff, displ) + Set fixup information + + @param ea: address to set fixup information about + @param fixuptype: fixup type. see get_fixup_target_type() + for possible fixup types. + @param fixupflags: fixup flags. see get_fixup_target_flags() + for possible fixup types. + @param targetsel: target selector + @param targetoff: target offset + @param displ: displacement + + @return: none + +Help on function set_flag in module idc: + +set_flag(off, bit, value) + #-------------------------------------------------------------------------- + +Help on function set_frame_size in module idc: + +set_frame_size(ea, lvsize, frregs, argsize) + Make function frame + + @param ea: any address belonging to the function + @param lvsize: size of function local variables + @param frregs: size of saved registers + @param argsize: size of function arguments + + @return: ID of function frame or -1 + If the function did not have a frame, the frame + will be created. Otherwise the frame will be modified + +Help on function set_func_attr in module idc: + +set_func_attr(ea, attr, value) + Set a function attribute + + @param ea: any address belonging to the function + @param attr: one of FUNCATTR_... constants + @param value: new value of the attribute + + @return: 1-ok, 0-failed + +Help on function set_func_cmt in module idc: + +set_func_cmt(ea, cmt, repeatable) + Set function comment + + @param ea: any address belonging to the function + @param cmt: a function comment line + @param repeatable: 1: get repeatable comment + 0: get regular comment + +Help on function set_func_end in module ida_funcs: + +set_func_end(*args) + set_func_end(ea, newend) -> bool + + + Move function chunk end address. + + @param ea: any address in the function (C++: ea_t) + @param newend: new end address of the function (C++: ea_t) + @return: success + +Help on function set_func_flags in module idc: + +set_func_flags(ea, flags) + Change function flags + + @param ea: any address belonging to the function + @param flags: see get_func_flags() for explanations + + @return: !=0 - ok + +Help on function set_hash_long in module idc: + +set_hash_long(hash_id, key, value) + Sets the long value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + @param value: 32bit or 64bit value to store in the hash + + @return: 1 in case of success, 0 otherwise + +Help on function set_hash_string in module idc: + +set_hash_string(hash_id, key, value) + Sets the string value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + @param value: string value to store in the hash + + @return: 1 in case of success, 0 otherwise + +Help on function set_ida_state in module ida_auto: + +set_ida_state(*args) + set_ida_state(st) -> idastate_t + + + Change IDA status indicator value + + @param st: - new indicator status (C++: idastate_t) + @return: old indicator status + +Help on function set_inf_attr in module idc: + +set_inf_attr(attr, value) + +Help on function set_local_type in module idc: + +set_local_type(ordinal, input, flags) + Parse one type declaration and store it in the specified slot + + @param ordinal: slot number (1...NumberOfLocalTypes) + -1 means allocate new slot or reuse the slot + of the existing named type + @param input: C declaration. Empty input empties the slot + @param flags: combination of PT_... constants or 0 + + @return: slot number or 0 if error + +Help on function set_manual_insn in module ida_bytes: + +set_manual_insn(*args) + set_manual_insn(ea, manual_insn) + + + Set manual instruction string. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @param manual_insn: "" - delete manual string. NULL - do nothing (C++: + const char *) + +Help on function set_member_cmt in module idc: + +set_member_cmt(sid, member_offset, comment, repeatable) + Change structure member comment + + @param sid: structure type ID + @param member_offset: offset of the member + @param comment: new comment of the structure member + @param repeatable: 1: change repeatable comment + 0: change regular comment + + @return: != 0 - ok + +Help on function set_member_name in module idc: + +set_member_name(sid, member_offset, name) + Change structure member name + + @param sid: structure type ID + @param member_offset: offset of the member + @param name: new name of the member + + @return: != 0 - ok. + +Help on function set_member_type in module idc: + +set_member_type(sid, member_offset, flag, typeid, nitems, target=-1, tdelta=0, reftype=2) + Change structure member type + + @param sid: structure type ID + @param member_offset: offset of the member + @param flag: new type of the member. Should be one of + FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA + @param typeid: if is_struct(flag) then typeid specifies the structure id for the member + if is_off0(flag) then typeid specifies the offset base. + if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). + if is_stroff(flag) then typeid specifies the structure id + if is_enum(flag) then typeid specifies the enum id + if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) + Otherwise typeid should be -1. + @param nitems: number of items in the member + + @param target: target address of the offset expr. You may specify it as + -1, ida will calculate it itself + @param tdelta: offset target delta. usually 0 + @param reftype: see REF_... definitions + + @note: The remaining arguments are allowed only if is_off0(flag) and you want + to specify a complex offset expression + + @return: !=0 - ok. + +Help on function set_name in module idc: + +set_name(ea, name, flags=0) + Rename an address + + @param ea: linear address + @param name: new name of address. If name == "", then delete old name + @param flags: combination of SN_... constants + + @return: 1-ok, 0-failure + +Help on function set_processor_type in module ida_idp: + +set_processor_type(*args) + set_processor_type(procname, level) -> bool + + + Set target processor type. Once a processor module is loaded, it + cannot be replaced until we close the idb. + + @param procname: name of processor type (one of names present in + \ph{psnames}) (C++: const char *) + @param level: SETPROC_ (C++: setproc_level_t) + @return: success + +Help on function set_reg_value in module idc: + +set_reg_value(value, name) + Set register value + + @param name: the register name + @param value: new register value + + @note: The debugger should be running + It is not necessary to use this function to set register values. + A register name in the left side of an assignment will do too. + +Help on function set_remote_debugger in module ida_dbg: + +set_remote_debugger(*args) + set_remote_debugger(host, _pass, port=-1) + + + Set remote debugging options. Should be used before starting the + debugger. + + @param host: If empty, IDA will use local debugger. If NULL, the host + will not be set. (C++: const char *) + @param port: If -1, the default port number will be used (C++: int) + +Help on function set_root_filename in module ida_nalt: + +set_root_filename(*args) + set_root_filename(file) + + + Set full path of the input file. + + + @param file (C++: const char *) + +Help on function set_segm_addressing in module idc: + +set_segm_addressing(ea, bitness) + Change segment addressing + + @param ea: any address in the segment + @param bitness: 0: 16bit, 1: 32bit, 2: 64bit + + @return: success (boolean) + +Help on function set_segm_alignment in module idc: + +set_segm_alignment(ea, alignment) + Change alignment of the segment + + @param ea: any address in the segment + @param alignment: new alignment of the segment (one of the sa... constants) + + @return: success (boolean) + +Help on function set_segm_attr in module idc: + +set_segm_attr(segea, attr, value) + Set segment attribute + + @param segea: any address within segment + @param attr: one of SEGATTR_... constants + + @note: Please note that not all segment attributes are modifiable. + Also some of them should be modified using special functions + like set_segm_addressing, etc. + +Help on function set_segm_class in module idc: + +set_segm_class(ea, segclass) + Change class of the segment + + @param ea: any address in the segment + @param segclass: new class of the segment + + @return: success (boolean) + +Help on function set_segm_combination in module idc: + +set_segm_combination(segea, comb) + Change combination of the segment + + @param segea: any address in the segment + @param comb: new combination of the segment (one of the sc... constants) + + @return: success (boolean) + +Help on function set_segm_name in module idc: + +set_segm_name(ea, name) + Change name of the segment + + @param ea: any address in the segment + @param name: new name of the segment + + @return: success (boolean) + +Help on function set_segm_type in module idc: + +set_segm_type(segea, segtype) + Set segment type + + @param segea: any address within segment + @param segtype: new segment type: + + @return: !=0 - ok + +Help on function set_segment_bounds in module idc: + +set_segment_bounds(ea, startea, endea, flags) + Change segment boundaries + + @param ea: any address in the segment + @param startea: new start address of the segment + @param endea: new end address of the segment + @param flags: combination of SEGMOD_... flags + + @return: boolean success + +Help on function set_selector in module ida_segment: + +set_selector(*args) + set_selector(selector, paragraph) -> int + + + Set mapping of selector to a paragraph. You should call this + functionbeforecreating a segment which uses the selector, otherwise + the creation of the segment will fail. + + @param selector: number of selector to map if selector == BADSEL , + then return 0 (fail) if the selector has had a + mapping, old mapping is destroyed if the selector + number is equal to paragraph value, then the mapping + is destroyed because we don't need to keep trivial + mappings. (C++: sel_t) + @param paragraph: paragraph to map selector (C++: ea_t) + +Help on function set_source_linnum in module ida_nalt: + +set_source_linnum(*args) + set_source_linnum(ea, lnnum) + +Help on function set_step_trace_options in module ida_dbg: + +set_step_trace_options(*args) + set_step_trace_options(options) + + + Modify step tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function change_storage_type in module ida_bytes: + +change_storage_type(*args) + change_storage_type(start_ea, end_ea, stt) -> error_t + + + Change flag storage type for address range. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: error code + +Help on function set_struc_cmt in module ida_struct: + +set_struc_cmt(*args) + set_struc_cmt(id, cmt, repeatable) -> bool + + + Set structure comment. + + + @param id (C++: tid_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_struc_idx in module idc: + +set_struc_idx(sid, index) + Change structure index + + @param sid: structure type ID + @param index: new index of the structure + + @return: != 0 - ok + + @note: See get_first_struc_idx() for the explanation of + structure indices and IDs. + +Help on function set_struc_name in module ida_struct: + +set_struc_name(*args) + set_struc_name(id, name) -> bool + + + Set structure name. + + + @param id (C++: tid_t) + @param name (C++: const char *) + +Help on function set_tail_owner in module idc: + +set_tail_owner(tailea, funcea) + Change the function chunk owner + + @param tailea: any address in the function chunk + @param funcea: the starting address of the new owner + + @return: False if failed, True if success + + @note: The new owner must already have the chunk appended before the call + +Help on function set_target_assembler in module ida_idp: + +set_target_assembler(*args) + set_target_assembler(asmnum) -> bool + + + Set target assembler. + + @param asmnum: number of assembler in the current processor module + (C++: int) + @return: success + +Help on function set_trace_file_desc in module ida_dbg: + +set_trace_file_desc(*args) + set_trace_file_desc(filename, description) -> bool + + + Change the description of the specified trace file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function split_sreg_range in module idc: + +split_sreg_range(ea, reg, value, tag=2) + Set value of a segment register. + + @param ea: linear address + @param reg: name of a register, like "cs", "ds", "es", etc. + @param value: new value of the segment register. + @param tag: of SR_... constants + + @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. + +Help on function start_process in module ida_dbg: + +start_process(*args) + start_process(path=None, args=None, sdir=None) -> int + + + Start a process in the debugger. \sq{Type, Asynchronous function - + available as Request, Notification, 'dbg_process_start' }You can also + use the 'run_to()' function to easily start the execution of a process + until a given address is reached.For all parameters, a NULL value + indicates the debugger will take the value from the defined Process + Options. + + @param path: path to the executable to start (C++: const char *) + @param args: arguments to pass to process (C++: const char *) + @param sdir: starting directory for the process (C++: const char *) + +Help on function step_into in module ida_dbg: + +step_into(*args) + step_into() -> bool + + + Execute one instruction in the current thread. Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_into' } + +Help on function step_over in module ida_dbg: + +step_over(*args) + step_over() -> bool + + + Execute one instruction in the current thread, but without entering + into functions. Others threads keep suspended. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_step_over' } + +Help on function step_until_ret in module ida_dbg: + +step_until_ret(*args) + step_until_ret() -> bool + + + Execute instructions in the current thread until a function return + instruction is executed (aka "step out"). Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_until_ret' } + +Help on function strlen in module idc: + +strlen(s) + +Help on function strstr in module idc: + +strstr(s1, s2) + +Help on function substr in module idc: + +substr(s, x1, x2) + +Help on function suspend_process in module ida_dbg: + +suspend_process(*args) + suspend_process() -> bool + + + Suspend the process in the debugger. \sq{ Type,Synchronous function + (if in a notification handler)Asynchronous function (everywhere + else)available as Request, Notification,none (if in a notification + handler) 'dbg_suspend_process' (everywhere else) }The + 'suspend_process()' function can be called from a notification handler + to force the stopping of the process. In this case, no notification + will be generated. When you suspend a process, the running command is + always aborted. + +Help on function suspend_thread in module ida_dbg: + +suspend_thread(*args) + suspend_thread(tid) -> int + + + Suspend thread. Suspending a thread may deadlock the whole application + if the suspended was owning some synchronization objects. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function take_memory_snapshot in module ida_segment: + +take_memory_snapshot(*args) + take_memory_snapshot(only_loader_segs) -> bool + + + Take a memory snapshot of the running process. + + @param only_loader_segs: only is_loader_segm() segments will be + affected (C++: bool) + @return: success + +Help on function to_ea in module idc: + +to_ea(seg, off) + Return value of expression: ((seg<<4) + off) + +Help on function toggle_bnot in module idc: + +toggle_bnot(ea, n) + Toggle the bitwise not operator for the operand + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + +Help on function toggle_sign in module ida_bytes: + +toggle_sign(*args) + toggle_sign(ea, n) -> bool + + + Toggle sign of n-th operand. allowed values of n: 0-first operand, + 1-other operands + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function update_extra_cmt in module ida_lines: + +update_extra_cmt(*args) + update_extra_cmt(ea, what, str) + +Help on function update_hidden_range in module idc: + +update_hidden_range(ea, visible) + Set hidden range state + + @param ea: any address belonging to the hidden range + @param visible: new state of the range + + @return: != 0 - ok + +Help on function validate_idb_names in module idc: + +validate_idb_names(do_repair=0) + check consistency of IDB name records + @param do_repair: try to repair netnode header it TRUE + @return: number of inconsistent name records + +Help on function value_is_float in module idc: + +value_is_float(var) + +Help on function value_is_func in module idc: + +value_is_func(var) + +Help on function value_is_int64 in module idc: + +value_is_int64(var) + +Help on function value_is_long in module idc: + +value_is_long(var) + +Help on function value_is_pvoid in module idc: + +value_is_pvoid(var) + +Help on function value_is_string in module idc: + +value_is_string(var) + # List of built-in functions + # -------------------------- + # + # The following conventions are used in this list: + # 'ea' is a linear address + # 'success' is 0 if a function failed, 1 otherwise + # 'void' means that function returns no meaningful value (always 0) + # + # All function parameter conversions are made automatically. + # + # ---------------------------------------------------------------------------- + # M I S C E L L A N E O U S + # ---------------------------------------------------------------------------- + +Help on function wait_for_next_event in module ida_dbg: + +wait_for_next_event(*args) + wait_for_next_event(wfne, timeout) -> dbg_event_code_t + + + Wait for the next event.This function (optionally) resumes the process + execution, and waits for a debugger event until a possible timeout + occurs. + + @param wfne: combination of Wait for debugger event flags constants + (C++: int) + @param timeout: number of seconds to wait, -1-infinity (C++: int) + @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= + 0) + +Help on function warning in module ida_kernwin: + +warning(*args) + warning(format) + + + Display a message in a message box + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + The user will be able to hide messages if they appear twice in a row on + the screen + +Help on function write_dbg_memory in module idc: + +write_dbg_memory(ea, data) + Write to debugger memory. + + @param ea: linear address + @param data: string to write + @return: number of written bytes (-1 - network/debugger error) + + Thread-safe function (may be called only from the main thread and debthread) + +Help on function writelong in module idc: + +writelong(handle, dword, mostfirst) + +Help on function writeshort in module idc: + +writeshort(handle, word, mostfirst) + +Help on function writestr in module idc: + +writestr(handle, s) + +Help on function xtol in module idc: + +xtol(s) + diff --git a/pydoc_injections3.txt b/pydoc_injections3.txt new file mode 100644 index 0000000..8d7bc97 --- /dev/null +++ b/pydoc_injections3.txt @@ -0,0 +1,82030 @@ +Help on function auto_apply_tail in module ida_auto: + +auto_apply_tail(*args) -> 'void' + auto_apply_tail(tail_ea, parent_ea) + + + Plan to apply the tail_ea chunk to the parent + + @param tail_ea: linear address of start of tail (C++: ea_t) + @param parent_ea: linear address within parent. If BADADDR, + automatically try to find parent via xrefs. (C++: + ea_t) + +Help on function auto_apply_type in module ida_auto: + +auto_apply_type(*args) -> 'void' + auto_apply_type(caller, callee) + + + Plan to apply the callee's type to the calling point. + + + @param caller (C++: ea_t) + @param callee (C++: ea_t) + +Help on function auto_cancel in module ida_auto: + +auto_cancel(*args) -> 'void' + auto_cancel(ea1, ea2) + + + Remove an address range (ea1..ea2) from queues 'AU_CODE' , 'AU_PROC' , + 'AU_USED' . To remove an address range from other queues use + 'auto_unmark()' function. 'ea1' may be higher than 'ea2', the kernel + will swap them in this case. 'ea2' doesn't belong to the range. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on class auto_display_t in module ida_auto: + +class auto_display_t(builtins.object) + | Proxy of C++ auto_display_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> auto_display_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_auto_display_t(...) + | delete_auto_display_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | auto_display_t_ea_get(self) -> ea_t + | + | state + | auto_display_t_state_get(self) -> idastate_t + | + | thisown + | The membership flag + | + | type + | auto_display_t_type_get(self) -> atype_t + +Help on function auto_get in module ida_auto: + +auto_get(*args) -> 'ea_t' + auto_get(type, lowEA, highEA) -> ea_t + + + Retrieve an address from queues regarding their priority. Returns + 'BADADDR' if no addresses not lower than 'lowEA' and less than + 'highEA' are found in the queues. Otherwise *type will have queue + type. + + @param type (C++: atype_t *) + @param lowEA (C++: ea_t) + @param highEA (C++: ea_t) + +Help on function auto_is_ok in module ida_auto: + +auto_is_ok(*args) -> 'bool' + auto_is_ok() -> bool + + + Are all queues empty? (i.e. has autoanalysis finished?). + +Help on function auto_make_code in module ida_auto: + +auto_make_code(*args) -> 'void' + auto_make_code(ea) + + + Plan to make code. + + + @param ea (C++: ea_t) + +Help on function auto_make_proc in module ida_auto: + +auto_make_proc(*args) -> 'void' + auto_make_proc(ea) + + + Plan to make code&function. + + + @param ea (C++: ea_t) + +Help on function auto_mark in module ida_auto: + +auto_mark(*args) -> 'void' + auto_mark(ea, type) + + + Put single address into a queue. Queues keep addresses sorted. + + + @param ea (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_mark_range in module ida_auto: + +auto_mark_range(*args) -> 'void' + auto_mark_range(start, end, type) + + + Put range of addresses into a queue. 'start' may be higher than 'end', + the kernel will swap them in this case. 'end' doesn't belong to the + range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_recreate_insn in module ida_auto: + +auto_recreate_insn(*args) -> 'int' + auto_recreate_insn(ea) -> int + + + Try to create instruction + + @param ea: linear address of callee (C++: ea_t) + @return: the length of the instruction or 0 + +Help on function auto_unmark in module ida_auto: + +auto_unmark(*args) -> 'void' + auto_unmark(start, end, type) + + + Remove range of addresses from a queue. 'start' may be higher than + 'end', the kernel will swap them in this case. 'end' doesn't belong to + the range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_wait in module ida_auto: + +auto_wait(*args) -> 'bool' + auto_wait() -> bool + + + Process everything in the queues and return true. + + @return: false if the user clicked cancel. (the wait box must be + displayed by the caller if desired) + +Help on function auto_wait_range in module ida_auto: + +auto_wait_range(*args) -> 'ssize_t' + auto_wait_range(ea1, ea2) -> ssize_t + + + Process everything in the specified range and return true. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + @return: number of autoanalysis steps made. -1 if the user clicked + cancel. (the wait box must be displayed by the caller if + desired) + +Help on function enable_auto in module ida_auto: + +enable_auto(*args) -> 'bool' + enable_auto(enable) -> bool + + + Temporarily enable/disable autoanalyzer. Not user-facing, but rather + because IDA sometimes need to turn AA on/off regardless of + inf.s_genflags:INFFL_AUTO + + @param enable (C++: bool) + @return: old state + +Help on function get_auto_display in module ida_auto: + +get_auto_display(*args) -> 'void' + get_auto_display(auto_display) + + + Get structure which holds the autoanalysis indicator contents. + + + @param auto_display (C++: auto_display_t *) + +Help on function get_auto_state in module ida_auto: + +get_auto_state(*args) -> 'atype_t' + get_auto_state() -> atype_t + + + Get current state of autoanalyzer. If auto_state == 'AU_NONE' , IDA is + currently not running the analysis (it could be temporarily + interrupted to perform the user's requests, for example). + +Help on function is_auto_enabled in module ida_auto: + +is_auto_enabled(*args) -> 'bool' + is_auto_enabled() -> bool + + + Get autoanalyzer state. + +Help on function may_create_stkvars in module ida_auto: + +may_create_stkvars(*args) -> 'bool' + may_create_stkvars() -> bool + + + Is it allowed to create stack variables automatically?. This function + should be used by IDP modules before creating stack vars. + +Help on function may_trace_sp in module ida_auto: + +may_trace_sp(*args) -> 'bool' + may_trace_sp() -> bool + + + Is it allowed to trace stack pointer automatically?. This function + should be used by IDP modules before tracing sp. + +Help on function peek_auto_queue in module ida_auto: + +peek_auto_queue(*args) -> 'ea_t' + peek_auto_queue(low_ea, type) -> ea_t + + + Peek into a queue 'type' for an address not lower than 'low_ea'. Do + not remove address from the queue. + + @param low_ea (C++: ea_t) + @param type (C++: atype_t) + @return: the address or BADADDR + +Help on function plan_and_wait in module ida_auto: + +plan_and_wait(*args) -> 'int' + plan_and_wait(ea1, ea2, final_pass=True) -> int + + + Analyze the specified range. Try to create instructions where + possible. Make the final pass over the specified range if specified. + This function doesn't return until the range is analyzed. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + @param final_pass (C++: bool) + +Help on function plan_ea in module ida_auto: + +plan_ea(*args) -> 'void' + plan_ea(ea) + + + Plan to perform reanalysis. + + + @param ea (C++: ea_t) + +Help on function plan_range in module ida_auto: + +plan_range(*args) -> 'void' + plan_range(sEA, eEA) + + + Plan to perform reanalysis. + + + @param sEA (C++: ea_t) + @param eEA (C++: ea_t) + +Help on function reanalyze_callers in module ida_auto: + +reanalyze_callers(*args) -> 'void' + reanalyze_callers(ea, noret) + + + Plan to reanalyze callers of the specified address. This function will + add to 'AU_USED' queue all instructions that call (not jump to) the + specified address. + + @param ea: linear address of callee (C++: ea_t) + @param noret: !=0: the callee doesn't return, mark to undefine + subsequent instructions in the caller. 0: do nothing. + (C++: bool) + +Help on function revert_ida_decisions in module ida_auto: + +revert_ida_decisions(*args) -> 'void' + revert_ida_decisions(ea1, ea2) + + + Delete all analysis info that IDA generated for for the given range. + + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on function set_auto_state in module ida_auto: + +set_auto_state(*args) -> 'atype_t' + set_auto_state(new_state) -> atype_t + + + Set current state of autoanalyzer. + + @param new_state: new state of autoanalyzer (C++: atype_t) + @return: previous state + +Help on function set_ida_state in module ida_auto: + +set_ida_state(*args) -> 'idastate_t' + set_ida_state(st) -> idastate_t + + + Change IDA status indicator value + + @param st: - new indicator status (C++: idastate_t) + @return: old indicator status + +Help on function show_addr in module ida_auto: + +show_addr(*args) -> 'void' + show_addr(ea) + + + Show an address on the autoanalysis indicator. The address is + displayed in the form " @:12345678". + + @param ea: - linear address to display (C++: ea_t) + +Help on function show_auto in module ida_auto: + +show_auto(*args) -> 'void' + show_auto(ea, type=AU_NONE) + + + Change autoanalysis indicator value. + + @param ea: linear address being analyzed (C++: ea_t) + @param type: autoanalysis type (see Autoanalysis queues ) (C++: + atype_t) + +Help on function __walk_types_and_formats in module ida_bytes: + +__walk_types_and_formats(formats, type_action, format_action, installing) + # ----------------------------------------------------------------------- + +Help on function add_byte in module ida_bytes: + +add_byte(*args) -> 'void' + add_byte(ea, value) + + + Add a value to one byte of the program. This function works for wide + byte processors too. + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint32) + +Help on function add_dword in module ida_bytes: + +add_dword(*args) -> 'void' + add_dword(ea, value) + + + Add a value to one dword of the program. This function works for wide + byte processors too. This function takes into account order of bytes + specified in \inf{is_be()}this function works incorrectly if + \ph{nbits} > 16 + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function add_hidden_range in module ida_bytes: + +add_hidden_range(*args) -> 'bool' + add_hidden_range(ea1, ea2, description, header, footer, color) -> bool + + + Mark a range of addresses as hidden. The range will be created in the + invisible state with the default color + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (C++: ea_t) + @param description: range parameters (C++: const char *) + @param header: range parameters (C++: const char *) + @param footer: range parameters (C++: const char *) + @param color (C++: bgcolor_t) + @return: success + +Help on function add_mapping in module ida_bytes: + +add_mapping(*args) -> 'bool' + add_mapping(_from, to, size) -> bool + + + IDA supports memory mapping. References to the addresses from the + mapped range use data and meta-data from the mapping range.You should + set flag PR2_MAPPING in ph.flag2 to use memory mapping Add memory + mapping range. + + @param _from: start of the mapped range (nonexistent address) (C++: + ea_t) + @param to: start of the mapping range (existent address) (C++: ea_t) + @param size: size of the range (C++: asize_t) + @return: success + +Help on function add_qword in module ida_bytes: + +add_qword(*args) -> 'void' + add_qword(ea, value) + + + Add a value to one qword of the program. This function does not work + for wide byte processors. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function add_word in module ida_bytes: + +add_word(*args) -> 'void' + add_word(ea, value) + + + Add a value to one word of the program. This function works for wide + byte processors too. This function takes into account order of bytes + specified in \inf{is_be()} + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function align_flag in module ida_bytes: + +align_flag(*args) -> 'flags_t' + align_flag() -> flags_t + + + Get a flags_t representing an alignment directive. + +Help on function append_cmt in module ida_bytes: + +append_cmt(*args) -> 'bool' + append_cmt(ea, str, rptble) -> bool + + + Append to an indented comment. Creates a new comment if none exists. + Appends a newline character and the specified string otherwise. + + @param ea: linear address (C++: ea_t) + @param str: comment string to append (C++: const char *) + @param rptble: append to repeatable comment? (C++: bool) + @return: success + +Help on function attach_custom_data_format in module ida_bytes: + +attach_custom_data_format(*args) -> 'bool' + attach_custom_data_format(dtid, dfid) -> bool + + + Attach the data format to the data type. + + @param dtid: data type id that can use the data format. 0 means all + standard data types. Such data formats can be applied to + any data item or instruction operands. For instruction + operands, the data_format_t::value_size check is not + performed by the kernel. (C++: int) + @param dfid: data format id (C++: int) + +Help on function bin_flag in module ida_bytes: + +bin_flag(*args) -> 'flags_t' + bin_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function bin_search in module ida_bytes: + +bin_search(*args) -> 'ea_t' + bin_search(start_ea, end_ea, image, imask, step, flags) -> ea_t + +Help on function byte_flag in module ida_bytes: + +byte_flag(*args) -> 'flags_t' + byte_flag() -> flags_t + + + Get a flags_t representing a byte. + +Help on function bytesize in module ida_bytes: + +bytesize(*args) -> 'int' + bytesize(ea) -> int + + + Get number of bytes required to store a byte at the given address. + + + @param ea (C++: ea_t) + +Help on function calc_def_align in module ida_bytes: + +calc_def_align(*args) -> 'int' + calc_def_align(ea, mina, maxa) -> int + + + Calculate default alignment. + + + @param ea (C++: ea_t) + @param mina (C++: int) + @param maxa (C++: int) + +Help on function calc_dflags in module ida_bytes: + +calc_dflags(*args) -> 'flags_t' + calc_dflags(f, force) -> flags_t + +Help on function calc_max_align in module ida_bytes: + +calc_max_align(*args) -> 'int' + calc_max_align(endea) -> int + + + Returns: 0..32. + + + @param endea (C++: ea_t) + +Help on function calc_max_item_end in module ida_bytes: + +calc_max_item_end(*args) -> 'ea_t' + calc_max_item_end(ea, how=15) -> ea_t + + + Calculate maximal reasonable end address of a new item. This function + will limit the item with the current segment bounds. + + @param ea: linear address (C++: ea_t) + @param how: when to stop the search. A combination of Item end search + flags (C++: int) + @return: end of new item. If it is not possible to create an item, it + will return 'ea'. + +Help on function calc_min_align in module ida_bytes: + +calc_min_align(*args) -> 'int' + calc_min_align(length) -> int + + + Returns: 1..32. + + + @param length (C++: asize_t) + +Help on function can_define_item in module ida_bytes: + +can_define_item(*args) -> 'bool' + can_define_item(ea, length, flags) -> bool + + + Can define item (instruction/data) of the specified 'length', starting + at 'ea'?if there is an item starting at 'ea', this function ignores + itthis function converts to unexplored all encountered data items with + fixup information. Should be fixed in the future.a new item would + cross segment boundariesa new item would overlap with existing items + (except items specified by 'flags') + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param flags: if not 0, then the kernel will ignore the data types + specified by the flags and destroy them. For example: + 1000 dw 5 1002 db 5 ; undef + 1003 db 5 ; undef 1004 dw 5 + 1006 dd 5 can_define_item(1000, 6, 0) + - false because of dw at 1004 can_define_item(1000, + 6, word_flag()) - true, word at 1004 is destroyed (C++: + flags_t) + @return: 1-yes, 0-no + +Help on function change_storage_type in module ida_bytes: + +change_storage_type(*args) -> 'error_t' + change_storage_type(start_ea, end_ea, stt) -> error_t + + + Change flag storage type for address range. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: error code + +Help on function char_flag in module ida_bytes: + +char_flag(*args) -> 'flags_t' + char_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function chunk_size in module ida_bytes: + +chunk_size(*args) -> 'asize_t' + chunk_size(ea) -> asize_t + + + Get size of the contiguous address block containing 'ea'. + + @param ea (C++: ea_t) + @return: 0 if 'ea' doesn't belong to the program. + +Help on function chunk_start in module ida_bytes: + +chunk_start(*args) -> 'ea_t' + chunk_start(ea) -> ea_t + + + Get start of the contiguous address block containing 'ea'. + + @param ea (C++: ea_t) + @return: BADADDR if 'ea' doesn't belong to the program. + +Help on function clr_lzero in module ida_bytes: + +clr_lzero(*args) -> 'bool' + clr_lzero(ea, n) -> bool + + + Clear lzero bit. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function clr_op_type in module ida_bytes: + +clr_op_type(*args) -> 'bool' + clr_op_type(ea, n) -> bool + + + Remove operand representation information. (set operand representation + to be 'undefined') + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function code_flag in module ida_bytes: + +code_flag(*args) -> 'flags_t' + code_flag() -> flags_t + + + 'FF_CODE' + +Help on function create_16bit_data in module ida_bytes: + +create_16bit_data(*args) -> 'bool' + create_16bit_data(ea, length) -> bool + + + Convert to 16-bit quantity (take byte size into account) + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + +Help on function create_32bit_data in module ida_bytes: + +create_32bit_data(*args) -> 'bool' + create_32bit_data(ea, length) -> bool + + + Convert to 32-bit quantity (take byte size into account) + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + +Help on function create_align in module ida_bytes: + +create_align(*args) -> 'bool' + create_align(ea, length, alignment) -> bool + + + Alignment: 0 or 2..32. If it is 0, is will be calculated. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param alignment (C++: int) + +Help on function create_byte in module ida_bytes: + +create_byte(*args) -> 'bool' + create_byte(ea, length, force=False) -> bool + + + Convert to byte. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_custdata in module ida_bytes: + +create_custdata(*args) -> 'bool' + create_custdata(ea, length, dtid, fid, force=False) -> bool + + + Convert to custom data type. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param dtid (C++: int) + @param fid (C++: int) + @param force (C++: bool) + +Help on function create_data in module ida_bytes: + +create_data(*args) -> 'bool' + create_data(ea, dataflag, size, tid) -> bool + + + Convert to data (byte, word, dword, etc). This function may be used to + create arrays. + + @param ea: linear address (C++: ea_t) + @param dataflag: type of data. Value of function byte_flag() , + word_flag() , etc. (C++: flags_t) + @param size: size of array in bytes. should be divisible by the size + of one item of the specified type. for variable sized + items it can be specified as 0, and the kernel will try + to calculate the size. (C++: asize_t) + @param tid: type id. If the specified type is a structure, then tid is + structure id. Otherwise should be BADNODE . (C++: tid_t) + @return: success + +Help on function create_double in module ida_bytes: + +create_double(*args) -> 'bool' + create_double(ea, length, force=False) -> bool + + + Convert to double. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_dword in module ida_bytes: + +create_dword(*args) -> 'bool' + create_dword(ea, length, force=False) -> bool + + + Convert to dword. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_float in module ida_bytes: + +create_float(*args) -> 'bool' + create_float(ea, length, force=False) -> bool + + + Convert to float. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_oword in module ida_bytes: + +create_oword(*args) -> 'bool' + create_oword(ea, length, force=False) -> bool + + + Convert to octaword/xmm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_packed_real in module ida_bytes: + +create_packed_real(*args) -> 'bool' + create_packed_real(ea, length, force=False) -> bool + + + Convert to packed decimal real. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_qword in module ida_bytes: + +create_qword(*args) -> 'bool' + create_qword(ea, length, force=False) -> bool + + + Convert to quadword. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_strlit in module ida_bytes: + +create_strlit(*args) -> 'bool' + create_strlit(start, len, strtype) -> bool + + + Convert to string literal and give a meaningful name. 'start' may be + higher than 'end', the kernel will swap them in this case + + @param start: starting address (C++: ea_t) + @param len: length of the string in bytes. if 0, then + get_max_strlit_length() will be used to determine the + length (C++: size_t) + @param strtype: string type. one of String type codes (C++: int32) + @return: success + +Help on function create_struct in module ida_bytes: + +create_struct(*args) -> 'bool' + create_struct(ea, length, tid, force=False) -> bool + + + Convert to struct. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param tid (C++: tid_t) + @param force (C++: bool) + +Help on function create_tbyte in module ida_bytes: + +create_tbyte(*args) -> 'bool' + create_tbyte(ea, length, force=False) -> bool + + + Convert to tbyte. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_word in module ida_bytes: + +create_word(*args) -> 'bool' + create_word(ea, length, force=False) -> bool + + + Convert to word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_yword in module ida_bytes: + +create_yword(*args) -> 'bool' + create_yword(ea, length, force=False) -> bool + + + Convert to ymm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_zword in module ida_bytes: + +create_zword(*args) -> 'bool' + create_zword(ea, length, force=False) -> bool + + + Convert to zmm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function cust_flag in module ida_bytes: + +cust_flag(*args) -> 'flags_t' + cust_flag() -> flags_t + + + Get a flags_t representing custom type data. + +Help on function custfmt_flag in module ida_bytes: + +custfmt_flag(*args) -> 'flags_t' + custfmt_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on class data_format_t in module ida_bytes: + +class data_format_t(builtins.object) + | Proxy of C++ data_format_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | Initialize self. See help(type(self)) for accurate signature. + | + | __real__init__ = __init__(self, *args) + | __init__(self, _self, name, value_size=0, menu_name=None, props=0, hotkey=None, text_width=0) -> data_format_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_data_format_t(...) + | delete_data_format_t(self) + | + | _data_format_t__get_id = __get_id(self, *args) -> 'int' + | __get_id(self) -> int + | + | is_present_in_menus(self, *args) -> 'bool' + | is_present_in_menus(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hotkey + | data_format_t_hotkey_get(self) -> char const * + | + | id + | __get_id(self) -> int + | + | menu_name + | data_format_t_menu_name_get(self) -> char const * + | + | name + | data_format_t_name_get(self) -> char const * + | + | props + | data_format_t_props_get(self) -> int + | + | text_width + | data_format_t_text_width_get(self) -> int32 + | + | thisown + | The membership flag + | + | value_size + | data_format_t_value_size_get(self) -> asize_t + +Help on class data_type_t in module ida_bytes: + +class data_type_t(builtins.object) + | Proxy of C++ data_type_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | Initialize self. See help(type(self)) for accurate signature. + | + | __real__init__ = __init__(self, *args) + | __init__(self, _self, name, value_size=0, menu_name=None, hotkey=None, asm_keyword=None, props=0) -> data_type_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_data_type_t(...) + | delete_data_type_t(self) + | + | _data_type_t__get_id = __get_id(self, *args) -> 'int' + | __get_id(self) -> int + | + | is_present_in_menus(self, *args) -> 'bool' + | is_present_in_menus(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | asm_keyword + | data_type_t_asm_keyword_get(self) -> char const * + | + | hotkey + | data_type_t_hotkey_get(self) -> char const * + | + | id + | __get_id(self) -> int + | + | menu_name + | data_type_t_menu_name_get(self) -> char const * + | + | name + | data_type_t_name_get(self) -> char const * + | + | props + | data_type_t_props_get(self) -> int + | + | thisown + | The membership flag + | + | value_size + | data_type_t_value_size_get(self) -> asize_t + +Help on function dec_flag in module ida_bytes: + +dec_flag(*args) -> 'flags_t' + dec_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function del_hidden_range in module ida_bytes: + +del_hidden_range(*args) -> 'bool' + del_hidden_range(ea) -> bool + + + Delete hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: success + +Help on function del_items in module ida_bytes: + +del_items(*args) -> 'bool' + del_items(ea, flags=0, nbytes=1, may_destroy=None) -> bool + + + Convert item (instruction/data) to unexplored bytes. The whole item + (including the head and tail bytes) will be destroyed. It is allowed + to pass any address in the item to this function + + @param ea: any address within the first item to delete (C++: ea_t) + @param flags: combination of Unexplored byte conversion flags (C++: + int) + @param nbytes: number of bytes in the range to be undefined (C++: + asize_t) + @param may_destroy: optional routine invoked before deleting a head + item. If callback returns false then item has not + to be deleted and operation fails (C++: + may_destroy_cb_t *) + @return: true on sucessful operation, otherwise false + +Help on function del_mapping in module ida_bytes: + +del_mapping(*args) -> 'void' + del_mapping(ea) + + + Delete memory mapping range. + + @param ea: any address in the mapped range (C++: ea_t) + +Help on function del_value in module ida_bytes: + +del_value(*args) -> 'void' + del_value(ea) + + + Delete byte value from flags. The corresponding byte becomes + uninitialized. + + @param ea (C++: ea_t) + +Help on function detach_custom_data_format in module ida_bytes: + +detach_custom_data_format(*args) -> 'bool' + detach_custom_data_format(dtid, dfid) -> bool + + + Detach the data format from the data type. Unregistering a custom data + type detaches all attached data formats, no need to detach them + explicitly. You still need unregister them. Unregistering a custom + data format detaches it from all attached data types. + + @param dtid: data type id to detach data format from (C++: int) + @param dfid: data format id to detach (C++: int) + +Help on function disable_flags in module ida_bytes: + +disable_flags(*args) -> 'error_t' + disable_flags(start_ea, end_ea) -> error_t + + + Deallocate flags for address range. Exit with an error message if not + enough disk space (this may occur too). + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @return: 0 if ok, otherwise return error code + +Help on function double_flag in module ida_bytes: + +double_flag(*args) -> 'flags_t' + double_flag() -> flags_t + + + Get a flags_t representing a double. + +Help on function dword_flag in module ida_bytes: + +dword_flag(*args) -> 'flags_t' + dword_flag() -> flags_t + + + Get a flags_t representing a double word. + +Help on function enable_flags in module ida_bytes: + +enable_flags(*args) -> 'error_t' + enable_flags(start_ea, end_ea, stt) -> error_t + + + Allocate flags for address range. This function does not change the + storage type of existing ranges. Exit with an error message if not + enough disk space. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: 0 if ok, otherwise an error code + +Help on function enum_flag in module ida_bytes: + +enum_flag(*args) -> 'flags_t' + enum_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function equal_bytes in module ida_bytes: + +equal_bytes(*args) -> 'bool' + equal_bytes(ea, image, mask, len, sense_case) -> bool + + + Compare 'len' bytes of the program starting from 'ea' with 'image'. + + @param ea: linear address (C++: ea_t) + @param image: bytes to compare with (C++: const uchar *) + @param mask: array of 1/0 bytes, it's length is 'len'. 1 means to + perform the comparison of the corresponding byte. 0 means + not to perform. if mask == NULL, then all bytes of + 'image' will be compared. if mask == SKIP_FF_MASK then + 0xFF bytes will be skipped (C++: const uchar *) + @param len: length of block to compare in bytes. (C++: size_t) + @param sense_case: case-sensitive comparison? (C++: bool) + +Help on function f_has_cmt in module ida_bytes: + +f_has_cmt(*args) -> 'bool' + f_has_cmt(f, arg2) -> bool + +Help on function f_has_dummy_name in module ida_bytes: + +f_has_dummy_name(*args) -> 'bool' + f_has_dummy_name(f, arg2) -> bool + + + Does the current byte have dummy (auto-generated, with special prefix) + name? + + + @param f (C++: flags_t) + +Help on function f_has_extra_cmts in module ida_bytes: + +f_has_extra_cmts(*args) -> 'bool' + f_has_extra_cmts(f, arg2) -> bool + +Help on function f_has_name in module ida_bytes: + +f_has_name(*args) -> 'bool' + f_has_name(f, arg2) -> bool + + + Does the current byte have non-trivial (non-dummy) name? + + + @param f (C++: flags_t) + +Help on function f_has_user_name in module ida_bytes: + +f_has_user_name(*args) -> 'bool' + f_has_user_name(F, arg2) -> bool + + + Does the current byte have user-specified name? + + + @param F (C++: flags_t) + +Help on function f_has_xref in module ida_bytes: + +f_has_xref(*args) -> 'bool' + f_has_xref(f, arg2) -> bool + + + Does the current byte have cross-references to it? + + + @param f (C++: flags_t) + +Help on function f_is_align in module ida_bytes: + +f_is_align(*args) -> 'bool' + f_is_align(F, arg2) -> bool + + + See 'is_align()' + + + @param F (C++: flags_t) + +Help on function f_is_byte in module ida_bytes: + +f_is_byte(*args) -> 'bool' + f_is_byte(F, arg2) -> bool + + + See 'is_byte()' + + + @param F (C++: flags_t) + +Help on function f_is_code in module ida_bytes: + +f_is_code(*args) -> 'bool' + f_is_code(F, arg2) -> bool + + + Does flag denote start of an instruction? + + + @param F (C++: flags_t) + +Help on function f_is_custom in module ida_bytes: + +f_is_custom(*args) -> 'bool' + f_is_custom(F, arg2) -> bool + + + See 'is_custom()' + + + @param F (C++: flags_t) + +Help on function f_is_data in module ida_bytes: + +f_is_data(*args) -> 'bool' + f_is_data(F, arg2) -> bool + + + Does flag denote start of data? + + + @param F (C++: flags_t) + +Help on function f_is_double in module ida_bytes: + +f_is_double(*args) -> 'bool' + f_is_double(F, arg2) -> bool + + + See 'is_double()' + + + @param F (C++: flags_t) + +Help on function f_is_dword in module ida_bytes: + +f_is_dword(*args) -> 'bool' + f_is_dword(F, arg2) -> bool + + + See 'is_dword()' + + + @param F (C++: flags_t) + +Help on function f_is_float in module ida_bytes: + +f_is_float(*args) -> 'bool' + f_is_float(F, arg2) -> bool + + + See 'is_float()' + + + @param F (C++: flags_t) + +Help on function f_is_head in module ida_bytes: + +f_is_head(*args) -> 'bool' + f_is_head(F, arg2) -> bool + + + Does flag denote start of instruction OR data? + + + @param F (C++: flags_t) + +Help on function f_is_not_tail in module ida_bytes: + +f_is_not_tail(*args) -> 'bool' + f_is_not_tail(F, arg2) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function f_is_oword in module ida_bytes: + +f_is_oword(*args) -> 'bool' + f_is_oword(F, arg2) -> bool + + + See 'is_oword()' + + + @param F (C++: flags_t) + +Help on function f_is_pack_real in module ida_bytes: + +f_is_pack_real(*args) -> 'bool' + f_is_pack_real(F, arg2) -> bool + + + See 'is_pack_real()' + + + @param F (C++: flags_t) + +Help on function f_is_qword in module ida_bytes: + +f_is_qword(*args) -> 'bool' + f_is_qword(F, arg2) -> bool + + + See 'is_qword()' + + + @param F (C++: flags_t) + +Help on function f_is_strlit in module ida_bytes: + +f_is_strlit(*args) -> 'bool' + f_is_strlit(F, arg2) -> bool + + + See 'is_strlit()' + + + @param F (C++: flags_t) + +Help on function f_is_struct in module ida_bytes: + +f_is_struct(*args) -> 'bool' + f_is_struct(F, arg2) -> bool + + + See 'is_struct()' + + + @param F (C++: flags_t) + +Help on function f_is_tail in module ida_bytes: + +f_is_tail(*args) -> 'bool' + f_is_tail(F, arg2) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function f_is_tbyte in module ida_bytes: + +f_is_tbyte(*args) -> 'bool' + f_is_tbyte(F, arg2) -> bool + + + See 'is_tbyte()' + + + @param F (C++: flags_t) + +Help on function f_is_word in module ida_bytes: + +f_is_word(*args) -> 'bool' + f_is_word(F, arg2) -> bool + + + See 'is_word()' + + + @param F (C++: flags_t) + +Help on function f_is_yword in module ida_bytes: + +f_is_yword(*args) -> 'bool' + f_is_yword(F, arg2) -> bool + + + See 'is_yword()' + + + @param F (C++: flags_t) + +Help on function find_byte in module ida_bytes: + +find_byte(*args) -> 'ea_t' + find_byte(sEA, size, value, bin_search_flags) -> ea_t + + + Find forward a byte with the specified value (only 8-bit value from + the database). example: ea=4 size=3 will inspect addresses 4, 5, and 6 + + @param sEA: linear address (C++: ea_t) + @param size: number of bytes to inspect (C++: asize_t) + @param value: value to find (C++: uchar) + @param bin_search_flags: combination of Search flags (C++: int) + @return: address of byte or BADADDR + +Help on function find_byter in module ida_bytes: + +find_byter(*args) -> 'ea_t' + find_byter(sEA, size, value, bin_search_flags) -> ea_t + + + Find reverse a byte with the specified value (only 8-bit value from + the database). example: ea=4 size=3 will inspect addresses 6, 5, and 4 + + @param sEA: the lower address of the search range (C++: ea_t) + @param size: number of bytes to inspect (C++: asize_t) + @param value: value to find (C++: uchar) + @param bin_search_flags: combination of Search flags (C++: int) + @return: address of byte or BADADDR + +Help on function find_custom_data_format in module ida_bytes: + +find_custom_data_format(*args) -> 'int' + find_custom_data_format(name) -> int + + + Get id of a custom data format. + + @param name: name of the custom data format (C++: const char *) + @return: id or -1 + +Help on function find_custom_data_type in module ida_bytes: + +find_custom_data_type(*args) -> 'int' + find_custom_data_type(name) -> int + + + Get id of a custom data type. + + @param name: name of the custom data type (C++: const char *) + @return: id or -1 + +Help on function float_flag in module ida_bytes: + +float_flag(*args) -> 'flags_t' + float_flag() -> flags_t + + + Get a flags_t representing a float. + +Help on function flt_flag in module ida_bytes: + +flt_flag(*args) -> 'flags_t' + flt_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function free_chunk in module ida_bytes: + +free_chunk(*args) -> 'ea_t' + free_chunk(bottom, size, step) -> ea_t + + + Search for a hole in the addressing space of the program. + + @param bottom: address to start searching (C++: ea_t) + @param size: size of desired block (C++: asize_t) + @param step: bit mask for the start of hole (0xF would align hole to a + paragraph). if 'step' is negative, the bottom address + with be aligned. otherwise the kernel will try to use it + as is and align it only when the hole is too small. (C++: + int32) + @return: start of the hole or BADADDR + +Help on function get_16bit in module ida_bytes: + +get_16bit(*args) -> 'uint32' + get_16bit(ea) -> uint32 + + + Get 16bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 1 byte (getFullByte()) if the current processor has 16-bit + byte, otherwise return get_word() + +Help on function get_32bit in module ida_bytes: + +get_32bit(*args) -> 'uint32' + get_32bit(ea) -> uint32 + + + Get not more than 32bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 32 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) + return get_dword(ea); if ( nbits <= 16) return + get_wide_word(ea); return get_wide_byte(ea); + +Help on function get_64bit in module ida_bytes: + +get_64bit(*args) -> 'uint64' + get_64bit(ea) -> uint64 + + + Get not more than 64bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 64 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) + return get_qword(ea); if ( nbits <= 16) return + get_wide_dword(ea); return get_wide_byte(ea); + +Help on function get_8bit in module ida_bytes: + +get_8bit(*args) -> 'PyObject *' + get_8bit(ea, v, nbit) -> PyObject * + +Help on function get_byte in module ida_bytes: + +get_byte(*args) -> 'uchar' + get_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea'. This function works only + for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_bytes in module ida_bytes: + +get_bytes(*args) -> 'PyObject *' + get_bytes(ea, size, gmb_flags=0x01) -> PyObject * + + + Get the specified number of bytes of the program. + @param ea: program address + @param size: number of bytes to return + @return: the bytes (as a str), or None in case of failure + +Help on function get_bytes_and_mask in module ida_bytes: + +get_bytes_and_mask(*args) -> 'PyObject *' + get_bytes_and_mask(ea, size, gmb_flags=0x01) -> PyObject * + + + Get the specified number of bytes of the program, and a bitmask + specifying what bytes are defined and what bytes are not. + @param ea: program address + @param size: number of bytes to return + @return: a tuple (bytes, mask), or None in case of failure. + Both 'bytes' and 'mask' are 'str' instances. + +Help on function get_cmt in module ida_bytes: + +get_cmt(*args) -> 'qstring *' + get_cmt(ea, rptble) -> str + + + Get an indented comment. + + @param ea: linear address. may point to tail byte, the function will + find start of the item (C++: ea_t) + @param rptble: get repeatable comment? (C++: bool) + @return: size of comment or -1 + +Help on function get_custom_data_format in module ida_bytes: + +get_custom_data_format(*args) -> 'data_format_t const *' + get_custom_data_format(dfid) -> data_format_t + + + Get definition of a registered custom data format. + + @param dfid: data format id (C++: int) + @return: data format definition or NULL + +Help on function get_custom_data_formats in module ida_bytes: + +get_custom_data_formats(*args) -> 'int' + get_custom_data_formats(out, dtid) -> int + + + Get list of attached custom data formats for the specified data type. + + @param out: buffer for the output. may be NULL (C++: intvec_t *) + @param dtid: data type id (C++: int) + @return: number of returned custom data formats. if error, returns -1 + +Help on function get_custom_data_type in module ida_bytes: + +get_custom_data_type(*args) -> 'data_type_t const *' + get_custom_data_type(dtid) -> data_type_t + + + Get definition of a registered custom data type. + + @param dtid: data type id (C++: int) + @return: data type definition or NULL + +Help on function get_custom_data_types in module ida_bytes: + +get_custom_data_types(*args) -> 'int' + get_custom_data_types(out, min_size=0, max_size=BADADDR) -> int + + + Get list of registered custom data type ids. + + @param out: buffer for the output. may be NULL (C++: intvec_t *) + @param min_size: minimum value size (C++: asize_t) + @param max_size: maximum value size (C++: asize_t) + @return: number of custom data types with the specified size limits + +Help on function get_data_elsize in module ida_bytes: + +get_data_elsize(*args) -> 'asize_t' + get_data_elsize(ea, F, ti=None) -> asize_t + + + Get size of data type specified in flags 'F'. + + @param ea: linear address of the item (C++: ea_t) + @param F: flags (C++: flags_t) + @param ti: additional information about the data type. For example, if + the current item is a structure instance, then ti->tid is + structure id. Otherwise is ignored (may be NULL). If + specified as NULL, will be automatically retrieved from the + database (C++: const opinfo_t *) + @return: byte : 1 word : 2 etc... + +Help on function get_data_value in module ida_bytes: + +get_data_value(*args) -> 'bool' + get_data_value(v, ea, size) -> bool + + + Get the value at of the item at 'ea'. This function works with + entities up to sizeof(ea_t) (bytes, word, etc) + + @param v: pointer to the result. may be NULL (C++: uval_t *) + @param ea: linear address (C++: ea_t) + @param size: size of data to read. If 0, then the item type at 'ea' + will be used (C++: asize_t) + @return: success + +Help on function get_db_byte in module ida_bytes: + +get_db_byte(*args) -> 'uchar' + get_db_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea' from the database. Works + even if the debugger is active. See also 'get_dbg_byte()' to read the + process memory directly. This function works only for 8bit byte + processors. + + @param ea (C++: ea_t) + +Help on function get_default_radix in module ida_bytes: + +get_default_radix(*args) -> 'int' + get_default_radix() -> int + + + Get default base of number for the current processor. + + @return: 2, 8, 10, 16 + +Help on function get_dword in module ida_bytes: + +get_dword(*args) -> 'uint32' + get_dword(ea) -> uint32 + + + Get one dword (32-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_enum_id in module ida_bytes: + +get_enum_id(*args) -> 'uchar *' + get_enum_id(ea, n) -> enum_t + + + Get enum id of 'enum' operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: id of enum or BADNODE + +Help on function get_first_hidden_range in module ida_bytes: + +get_first_hidden_range(*args) -> 'hidden_range_t *' + get_first_hidden_range() -> hidden_range_t + + + Get pointer to the first hidden range. + + @return: ptr to hidden range or NULL + +Help on function get_flags in module ida_bytes: + +get_flags(*args) -> 'flags_t' + get_flags(ea) -> flags_t + + + get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote + debugging because the kernel needs to read the process memory. + + @param ea (C++: ea_t) + +Help on function get_flags_by_size in module ida_bytes: + +get_flags_by_size(*args) -> 'flags_t' + get_flags_by_size(size) -> flags_t + + + Get flags from size (in bytes). Supported sizes: 1, 2, 4, 8, 16, 32. + For other sizes returns 0 + + @param size (C++: size_t) + +Help on function get_flags_ex in module ida_bytes: + +get_flags_ex(*args) -> 'flags_t' + get_flags_ex(ea, how) -> flags_t + + + Get flags for the specified address, extended form. + + + @param ea (C++: ea_t) + @param how (C++: int) + +Help on function get_forced_operand in module ida_bytes: + +get_forced_operand(*args) -> 'qstring *' + get_forced_operand(ea, n) -> str + + + Get forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @return: size of forced operand or -1 + +Help on function get_full_data_elsize in module ida_bytes: + +get_full_data_elsize(*args) -> 'asize_t' + get_full_data_elsize(ea, F, ti=None) -> asize_t + + + Get full size of data type specified in flags 'F'. takes into account + processors with wide bytes e.g. returns 2 for a byte element with + 16-bit bytes + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param ti (C++: const opinfo_t *) + +Help on function get_full_flags in module ida_bytes: + +get_full_flags(*args) -> 'flags_t' + get_full_flags(ea) -> flags_t + + + Get flags value for address 'ea'. + + @param ea (C++: ea_t) + @return: 0 if address is not present in the program + +Help on function get_hidden_range in module ida_bytes: + +get_hidden_range(*args) -> 'hidden_range_t *' + get_hidden_range(ea) -> hidden_range_t + + + Get pointer to hidden range structure, in: linear address. + + @param ea: any address in the hidden range (C++: ea_t) + +Help on function get_hidden_range_num in module ida_bytes: + +get_hidden_range_num(*args) -> 'int' + get_hidden_range_num(ea) -> int + + + Get number of a hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: number of hidden range (0.. get_hidden_range_qty() -1) + +Help on function get_hidden_range_qty in module ida_bytes: + +get_hidden_range_qty(*args) -> 'int' + get_hidden_range_qty() -> int + + + Get number of hidden ranges. + +Help on function get_item_end in module ida_bytes: + +get_item_end(*args) -> 'ea_t' + get_item_end(ea) -> ea_t + + + Get the end address of the item at 'ea'. The returned address doesn't + belong to the current item. Unexplored bytes are counted as 1 byte + entities. + + @param ea (C++: ea_t) + +Help on function get_item_flag in module ida_bytes: + +get_item_flag(*args) -> 'flags_t' + get_item_flag(_from, n, ea, appzero) -> flags_t + + + Get flag of the item at 'ea' even if it is a tail byte of some array + or structure. This function is used to get flags of structure members + or array elements. + + @param _from: linear address of the instruction which refers to 'ea' + (C++: ea_t) + @param n: number of operand which refers to 'ea' (C++: int) + @param ea: the referenced address (C++: ea_t) + @param appzero: append a struct field name if the field offset is + zero? meaningful only if the name refers to a + structure. (C++: bool) + @return: flags or 0 (if failed) + +Help on function get_item_head in module ida_bytes: + +get_item_head(*args) -> 'ea_t' + get_item_head(ea) -> ea_t + + + Get the start address of the item at 'ea'. If there is no current + item, then 'ea' will be returned (see definition at the end of + 'bytes.hpp' source) + + @param ea (C++: ea_t) + +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. + + @param ea (C++: ea_t) + +Help on function get_last_hidden_range in module ida_bytes: + +get_last_hidden_range(*args) -> 'hidden_range_t *' + get_last_hidden_range() -> hidden_range_t + + + Get pointer to the last hidden range. + + @return: ptr to hidden range or NULL + +Help on function get_manual_insn in module ida_bytes: + +get_manual_insn(*args) -> 'qstring *' + get_manual_insn(ea) -> str + + + Retrieve the user-specified string for the manual instruction. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @return: size of manual instruction or -1 + +Help on function get_mapping in module ida_bytes: + +get_mapping(*args) -> 'ea_t *, ea_t *, asize_t *' + get_mapping(n) -> bool + + + Get memory mapping range by its number. + + @param n: number of mapping range (0.. get_mappings_qty() -1) (C++: + size_t) + @return: false if the specified range doesn't exist, otherwise returns + from , to , size + +Help on function get_mappings_qty in module ida_bytes: + +get_mappings_qty(*args) -> 'size_t' + get_mappings_qty() -> size_t + + + Get number of mappings. + +Help on function get_max_strlit_length in module ida_bytes: + +get_max_strlit_length(*args) -> 'size_t' + get_max_strlit_length(ea, strtype, options=0) -> size_t + + + Determine maximum length of string literal. + + @param ea: starting address (C++: ea_t) + @param strtype: string type. one of String type codes (C++: int32) + @param options: combination of string literal length options (C++: + int) + @return: length of the string in octets (octet==8bit) + +Help on function get_next_hidden_range in module ida_bytes: + +get_next_hidden_range(*args) -> 'hidden_range_t *' + get_next_hidden_range(ea) -> hidden_range_t + + + Get pointer to next hidden range. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to hidden range or NULL if next hidden range doesn't + exist + +Help on function get_octet in module ida_bytes: + +get_octet(*args) -> 'PyObject *' + get_octet(ea, v, nbit) -> PyObject * + + + Get 8 bits of the program at 'ea'. The main usage of this function is + to iterate range of bytes. Here is an example: + + uint64 v; + int nbit = 0; + for ( ... ) { + uchar byte = get_octet(&ea, &v, &nbit); + ... + } + + 'ea' is incremented each time when a new byte is read. In the above + example, it will be incremented in the first loop iteration. + + @param ea (C++: ea_t *) + @param v (C++: uint64 *) + @param nbit (C++: int *) + +Help on function get_opinfo in module ida_bytes: + +get_opinfo(*args) -> 'opinfo_t *' + get_opinfo(buf, ea, n, flags) -> opinfo_t + + + Get additional information about an operand representation. + + @param buf: buffer to receive the result. may not be NULL (C++: + opinfo_t *) + @param ea: linear address of item (C++: ea_t) + @param n: number of operand, 0 or 1 (C++: int) + @param flags: flags of the item (C++: flags_t) + @return: NULL if no additional representation information + +Help on function get_optype_flags0 in module ida_bytes: + +get_optype_flags0(*args) -> 'flags_t' + get_optype_flags0(F) -> flags_t + + + Get flags for first operand. + + + @param F (C++: flags_t) + +Help on function get_optype_flags1 in module ida_bytes: + +get_optype_flags1(*args) -> 'flags_t' + get_optype_flags1(F) -> flags_t + + + Get flags for second operand. + + + @param F (C++: flags_t) + +Help on function get_original_byte in module ida_bytes: + +get_original_byte(*args) -> 'uint64' + get_original_byte(ea) -> uint64 + + + Get original byte value (that was before patching). This function + works for wide byte processors too. + + @param ea (C++: ea_t) + +Help on function get_original_dword in module ida_bytes: + +get_original_dword(*args) -> 'uint64' + get_original_dword(ea) -> uint64 + + + Get original dword (that was before patching) This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_original_qword in module ida_bytes: + +get_original_qword(*args) -> 'uint64' + get_original_qword(ea) -> uint64 + + + Get original qword value (that was before patching) This function + DOESN'T work for wide byte processors too. This function takes into + account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_original_word in module ida_bytes: + +get_original_word(*args) -> 'uint64' + get_original_word(ea) -> uint64 + + + Get original word value (that was before patching). This function + works for wide byte processors too. This function takes into account + order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_predef_insn_cmt in module ida_bytes: + +get_predef_insn_cmt(*args) -> 'qstring *' + get_predef_insn_cmt(ins) -> str + + + Get predefined comment. + + @param ins: current instruction information (C++: const insn_t &) + @return: size of comment or -1 + +Help on function get_prev_hidden_range in module ida_bytes: + +get_prev_hidden_range(*args) -> 'hidden_range_t *' + get_prev_hidden_range(ea) -> hidden_range_t + + + Get pointer to previous hidden range. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to hidden range or NULL if previous hidden range doesn't + exist + +Help on function get_qword in module ida_bytes: + +get_qword(*args) -> 'uint64' + get_qword(ea) -> uint64 + + + Get one qword (64-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_radix in module ida_bytes: + +get_radix(*args) -> 'int' + get_radix(F, n) -> int + + + Get radix of the operand, in: flags. If the operand is not a number, + returns 'get_default_radix()' + + @param F: flags (C++: flags_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: 2, 8, 10, 16 + +Help on function get_strlit_contents in module ida_bytes: + +get_strlit_contents(*args) -> 'PyObject *' + get_strlit_contents(ea, py_len, type, flags=0) -> PyObject * + + + Get bytes contents at location, possibly converted. + It works even if the string has not been created in the database yet. + + Note that this will always return a simple string of bytes + (i.e., a 'str' instance), and not a string of unicode characters. + + If you want auto-conversion to unicode strings (that is: real strings), + you should probably be using the idautils.Strings class. + + @param ea: linear address of the string + @param len: length of the string in bytes (including terminating 0) + @param type: type of the string. Represents both the character encoding, + and the 'type' of string at the given location. + @param flags: combination of STRCONV_..., to perform output conversion. + @return: a bytes-filled str object. + +Help on function get_stroff_path in module ida_bytes: + +get_stroff_path(*args) -> 'int' + get_stroff_path(path, delta, ea, n) -> int + + + Get struct path of operand. + + @param path: buffer for structure path (strpath). see nalt.hpp for + more info. (C++: tid_t *) + @param delta: struct offset delta (C++: adiff_t *) + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: length of strpath + +Help on function get_wide_byte in module ida_bytes: + +get_wide_byte(*args) -> 'uint64' + get_wide_byte(ea) -> uint64 + + + Get one wide byte of the program at 'ea'. Some processors may access + more than 8bit quantity at an address. These processors have 32-bit + byte organization from the IDA's point of view. + + @param ea (C++: ea_t) + +Help on function get_wide_dword in module ida_bytes: + +get_wide_dword(*args) -> 'uint64' + get_wide_dword(ea) -> uint64 + + + Get two wide words (4 'bytes') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in + \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 + + @param ea (C++: ea_t) + +Help on function get_wide_word in module ida_bytes: + +get_wide_word(*args) -> 'uint64' + get_wide_word(ea) -> uint64 + + + Get one wide word (2 'byte') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_word in module ida_bytes: + +get_word(*args) -> 'ushort' + get_word(ea) -> ushort + + + Get one word (16-bit) of the program at 'ea'. This function takes into + account order of bytes specified in \inf{is_be()} This function works + only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_zero_ranges in module ida_bytes: + +get_zero_ranges(*args) -> 'bool' + get_zero_ranges(zranges, range) -> bool + + + Return set of ranges with zero initialized bytes. The returned set + includes only big zero initialized ranges (at least >1KB). Some zero + initialized byte ranges may be not included. Only zero bytes that use + the sparse storage method (STT_MM) are reported. + + @param zranges: pointer to the return value. cannot be NULL (C++: + rangeset_t *) + @param range: the range of addresses to verify. can be NULL - means + all ranges (C++: const range_t *) + @return: true if the result is a non-empty set + +Help on function getn_hidden_range in module ida_bytes: + +getn_hidden_range(*args) -> 'hidden_range_t *' + getn_hidden_range(n) -> hidden_range_t + + + Get pointer to hidden range structure, in: number of hidden range. + + @param n: number of hidden range, is in range 0.. + get_hidden_range_qty() -1 (C++: int) + +Help on function has_any_name in module ida_bytes: + +has_any_name(*args) -> 'bool' + has_any_name(F) -> bool + + + Does the current byte have any name? + + + @param F (C++: flags_t) + +Help on function has_auto_name in module ida_bytes: + +has_auto_name(*args) -> 'bool' + has_auto_name(F) -> bool + + + Does the current byte have auto-generated (no special prefix) name? + + + @param F (C++: flags_t) + +Help on function has_cmt in module ida_bytes: + +has_cmt(*args) -> 'bool' + has_cmt(F) -> bool + + + Does the current byte have an indented comment? + + + @param F (C++: flags_t) + +Help on function has_dummy_name in module ida_bytes: + +has_dummy_name(*args) -> 'bool' + has_dummy_name(F) -> bool + + + Does the current byte have dummy (auto-generated, with special prefix) + name? + + + @param F (C++: flags_t) + +Help on function has_extra_cmts in module ida_bytes: + +has_extra_cmts(*args) -> 'bool' + has_extra_cmts(F) -> bool + + + Does the current byte have additional anterior or posterior lines? + + + @param F (C++: flags_t) + +Help on function has_immd in module ida_bytes: + +has_immd(*args) -> 'bool' + has_immd(F) -> bool + + + Has immediate value? + + + @param F (C++: flags_t) + +Help on function has_name in module ida_bytes: + +has_name(*args) -> 'bool' + has_name(F) -> bool + + + Does the current byte have non-trivial (non-dummy) name? + + + @param F (C++: flags_t) + +Help on function has_user_name in module ida_bytes: + +has_user_name(*args) -> 'bool' + has_user_name(F) -> bool + + + Does the current byte have user-specified name? + + + @param F (C++: flags_t) + +Help on function has_value in module ida_bytes: + +has_value(*args) -> 'bool' + has_value(F) -> bool + + + Do flags contain byte value? + + + @param F (C++: flags_t) + +Help on function has_xref in module ida_bytes: + +has_xref(*args) -> 'bool' + has_xref(F) -> bool + + + Does the current byte have cross-references to it? + + + @param F (C++: flags_t) + +Help on function hex_flag in module ida_bytes: + +hex_flag(*args) -> 'flags_t' + hex_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on class hidden_range_t in module ida_bytes: + +class hidden_range_t(ida_range.range_t) + | Proxy of C++ hidden_range_t class. + | + | Method resolution order: + | hidden_range_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> hidden_range_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_hidden_range_t(...) + | delete_hidden_range_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | color + | hidden_range_t_color_get(self) -> bgcolor_t + | + | description + | hidden_range_t_description_get(self) -> char * + | + | footer + | hidden_range_t_footer_get(self) -> char * + | + | header + | hidden_range_t_header_get(self) -> char * + | + | thisown + | The membership flag + | + | visible + | hidden_range_t_visible_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on function is_align in module ida_bytes: + +is_align(*args) -> 'bool' + is_align(F) -> bool + + + 'FF_ALIGN' + + + @param F (C++: flags_t) + +Help on function is_attached_custom_data_format in module ida_bytes: + +is_attached_custom_data_format(*args) -> 'bool' + is_attached_custom_data_format(dtid, dfid) -> bool + +Help on function is_bnot in module ida_bytes: + +is_bnot(*args) -> 'bool' + is_bnot(ea, F, n) -> bool + + + Should we negate the operand?. \ash{a_bnot} should be defined in the + idp module in order to work with this function + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_byte in module ida_bytes: + +is_byte(*args) -> 'bool' + is_byte(F) -> bool + + + 'FF_BYTE' + + + @param F (C++: flags_t) + +Help on function is_char in module ida_bytes: + +is_char(*args) -> 'bool' + is_char(F, n) -> bool + + + is character constant? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_char0 in module ida_bytes: + +is_char0(*args) -> 'bool' + is_char0(F) -> bool + + + Is the first operand character constant? (example: push 'a') + + + @param F (C++: flags_t) + +Help on function is_char1 in module ida_bytes: + +is_char1(*args) -> 'bool' + is_char1(F) -> bool + + + Is the second operand character constant? (example: mov al, 'a') + + + @param F (C++: flags_t) + +Help on function is_code in module ida_bytes: + +is_code(*args) -> 'bool' + is_code(F) -> bool + + + Does flag denote start of an instruction? + + + @param F (C++: flags_t) + +Help on function is_custfmt in module ida_bytes: + +is_custfmt(*args) -> 'bool' + is_custfmt(F, n) -> bool + + + is custom data format? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_custfmt0 in module ida_bytes: + +is_custfmt0(*args) -> 'bool' + is_custfmt0(F) -> bool + + + Does the first operand use a custom data representation? + + + @param F (C++: flags_t) + +Help on function is_custfmt1 in module ida_bytes: + +is_custfmt1(*args) -> 'bool' + is_custfmt1(F) -> bool + + + Does the second operand use a custom data representation? + + + @param F (C++: flags_t) + +Help on function is_custom in module ida_bytes: + +is_custom(*args) -> 'bool' + is_custom(F) -> bool + + + 'FF_CUSTOM' + + + @param F (C++: flags_t) + +Help on function is_data in module ida_bytes: + +is_data(*args) -> 'bool' + is_data(F) -> bool + + + Does flag denote start of data? + + + @param F (C++: flags_t) + +Help on function is_defarg in module ida_bytes: + +is_defarg(*args) -> 'bool' + is_defarg(F, n) -> bool + + + is defined? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_defarg0 in module ida_bytes: + +is_defarg0(*args) -> 'bool' + is_defarg0(F) -> bool + + + Is the first operand defined? Initially operand has no defined + representation. + + + @param F (C++: flags_t) + +Help on function is_defarg1 in module ida_bytes: + +is_defarg1(*args) -> 'bool' + is_defarg1(F) -> bool + + + Is the second operand defined? Initially operand has no defined + representation. + + + @param F (C++: flags_t) + +Help on function is_double in module ida_bytes: + +is_double(*args) -> 'bool' + is_double(F) -> bool + + + 'FF_DOUBLE' + + + @param F (C++: flags_t) + +Help on function is_dword in module ida_bytes: + +is_dword(*args) -> 'bool' + is_dword(F) -> bool + + + 'FF_DWORD' + + + @param F (C++: flags_t) + +Help on function is_enum in module ida_bytes: + +is_enum(*args) -> 'bool' + is_enum(F, n) -> bool + + + is enum? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_enum0 in module ida_bytes: + +is_enum0(*args) -> 'bool' + is_enum0(F) -> bool + + + Is the first operand a symbolic constant (enum member)? + + + @param F (C++: flags_t) + +Help on function is_enum1 in module ida_bytes: + +is_enum1(*args) -> 'bool' + is_enum1(F) -> bool + + + Is the second operand a symbolic constant (enum member)? + + + @param F (C++: flags_t) + +Help on function is_float in module ida_bytes: + +is_float(*args) -> 'bool' + is_float(F) -> bool + + + 'FF_FLOAT' + + + @param F (C++: flags_t) + +Help on function is_float0 in module ida_bytes: + +is_float0(*args) -> 'bool' + is_float0(F) -> bool + + + Is the first operand a floating point number? + + + @param F (C++: flags_t) + +Help on function is_float1 in module ida_bytes: + +is_float1(*args) -> 'bool' + is_float1(F) -> bool + + + Is the second operand a floating point number? + + + @param F (C++: flags_t) + +Help on function is_flow in module ida_bytes: + +is_flow(*args) -> 'bool' + is_flow(F) -> bool + + + Does the previous instruction exist and pass execution flow to the + current byte? + + + @param F (C++: flags_t) + +Help on function is_fltnum in module ida_bytes: + +is_fltnum(*args) -> 'bool' + is_fltnum(F, n) -> bool + + + is floating point number? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_forced_operand in module ida_bytes: + +is_forced_operand(*args) -> 'bool' + is_forced_operand(ea, n) -> bool + + + Is operand manually defined?. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + +Help on function is_func in module ida_bytes: + +is_func(*args) -> 'bool' + is_func(F) -> bool + + + Is function start? + + + @param F (C++: flags_t) + +Help on function is_head in module ida_bytes: + +is_head(*args) -> 'bool' + is_head(F) -> bool + + + Does flag denote start of instruction OR data? + + + @param F (C++: flags_t) + +Help on function is_invsign in module ida_bytes: + +is_invsign(*args) -> 'bool' + is_invsign(ea, F, n) -> bool + + + Should sign of n-th operand inverted during output?. allowed values of + n: 0-first operand, 1-other operands + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_loaded in module ida_bytes: + +is_loaded(*args) -> 'bool' + is_loaded(ea) -> bool + + + Does the specified address have a byte value (is initialized?) + + + @param ea (C++: ea_t) + +Help on function is_lzero in module ida_bytes: + +is_lzero(*args) -> 'bool' + is_lzero(ea, n) -> bool + + + Display leading zeroes in operands. The global switch for the leading + zeroes is in \inf{s_genflags} The leading zeroes doesn't work if the + octal numbers start with 0 Display leading zeroes? (takes into account + \inf{s_genflags}) + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function is_manual in module ida_bytes: + +is_manual(*args) -> 'bool' + is_manual(F, n) -> bool + + + is forced operand? (use 'is_forced_operand()' ) + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_manual_insn in module ida_bytes: + +is_manual_insn(*args) -> 'bool' + is_manual_insn(ea) -> bool + + + Is the instruction overridden? + + @param ea: linear address of the instruction or data item (C++: ea_t) + +Help on function is_mapped in module ida_bytes: + +is_mapped(*args) -> 'bool' + is_mapped(ea) -> bool + + + Is the specified address 'ea' present in the program? + + + @param ea (C++: ea_t) + +Help on function is_not_tail in module ida_bytes: + +is_not_tail(*args) -> 'bool' + is_not_tail(F) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function is_numop in module ida_bytes: + +is_numop(*args) -> 'bool' + is_numop(F, n) -> bool + + + is number (bin, oct, dec, hex)? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_numop0 in module ida_bytes: + +is_numop0(*args) -> 'bool' + is_numop0(F) -> bool + + + Is the first operand a number (i.e. binary, octal, decimal or hex?) + + + @param F (C++: flags_t) + +Help on function is_numop1 in module ida_bytes: + +is_numop1(*args) -> 'bool' + is_numop1(F) -> bool + + + Is the second operand a number (i.e. binary, octal, decimal or hex?) + + + @param F (C++: flags_t) + +Help on function is_off in module ida_bytes: + +is_off(*args) -> 'bool' + is_off(F, n) -> bool + + + is offset? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_off0 in module ida_bytes: + +is_off0(*args) -> 'bool' + is_off0(F) -> bool + + + Is the first operand offset? (example: push offset xxx) + + + @param F (C++: flags_t) + +Help on function is_off1 in module ida_bytes: + +is_off1(*args) -> 'bool' + is_off1(F) -> bool + + + Is the second operand offset? (example: mov ax, offset xxx) + + + @param F (C++: flags_t) + +Help on function is_oword in module ida_bytes: + +is_oword(*args) -> 'bool' + is_oword(F) -> bool + + + 'FF_OWORD' + + + @param F (C++: flags_t) + +Help on function is_pack_real in module ida_bytes: + +is_pack_real(*args) -> 'bool' + is_pack_real(F) -> bool + + + 'FF_PACKREAL' + + + @param F (C++: flags_t) + +Help on function is_qword in module ida_bytes: + +is_qword(*args) -> 'bool' + is_qword(F) -> bool + + + 'FF_QWORD' + + + @param F (C++: flags_t) + +Help on function is_same_data_type in module ida_bytes: + +is_same_data_type(*args) -> 'bool' + is_same_data_type(F1, F2) -> bool + + + Do the given flags specify the same data type? + + + @param F1 (C++: flags_t) + @param F2 (C++: flags_t) + +Help on function is_seg in module ida_bytes: + +is_seg(*args) -> 'bool' + is_seg(F, n) -> bool + + + is segment? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_seg0 in module ida_bytes: + +is_seg0(*args) -> 'bool' + is_seg0(F) -> bool + + + Is the first operand segment selector? (example: push seg seg001) + + + @param F (C++: flags_t) + +Help on function is_seg1 in module ida_bytes: + +is_seg1(*args) -> 'bool' + is_seg1(F) -> bool + + + Is the second operand segment selector? (example: mov dx, seg dseg) + + + @param F (C++: flags_t) + +Help on function is_stkvar in module ida_bytes: + +is_stkvar(*args) -> 'bool' + is_stkvar(F, n) -> bool + + + is stack variable? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_stkvar0 in module ida_bytes: + +is_stkvar0(*args) -> 'bool' + is_stkvar0(F) -> bool + + + Is the first operand a stack variable? + + + @param F (C++: flags_t) + +Help on function is_stkvar1 in module ida_bytes: + +is_stkvar1(*args) -> 'bool' + is_stkvar1(F) -> bool + + + Is the second operand a stack variable? + + + @param F (C++: flags_t) + +Help on function is_strlit in module ida_bytes: + +is_strlit(*args) -> 'bool' + is_strlit(F) -> bool + + + 'FF_STRLIT' + + + @param F (C++: flags_t) + +Help on function is_stroff in module ida_bytes: + +is_stroff(*args) -> 'bool' + is_stroff(F, n) -> bool + + + is struct offset? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_stroff0 in module ida_bytes: + +is_stroff0(*args) -> 'bool' + is_stroff0(F) -> bool + + + Is the first operand an offset within a struct? + + + @param F (C++: flags_t) + +Help on function is_stroff1 in module ida_bytes: + +is_stroff1(*args) -> 'bool' + is_stroff1(F) -> bool + + + Is the second operand an offset within a struct? + + + @param F (C++: flags_t) + +Help on function is_struct in module ida_bytes: + +is_struct(*args) -> 'bool' + is_struct(F) -> bool + + + 'FF_STRUCT' + + + @param F (C++: flags_t) + +Help on function is_suspop in module ida_bytes: + +is_suspop(*args) -> 'bool' + is_suspop(ea, F, n) -> bool + + + is suspicious operand? + + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_tail in module ida_bytes: + +is_tail(*args) -> 'bool' + is_tail(F) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function is_tbyte in module ida_bytes: + +is_tbyte(*args) -> 'bool' + is_tbyte(F) -> bool + + + 'FF_TBYTE' + + + @param F (C++: flags_t) + +Help on function is_unknown in module ida_bytes: + +is_unknown(*args) -> 'bool' + is_unknown(F) -> bool + + + Does flag denote unexplored byte? + + + @param F (C++: flags_t) + +Help on function is_varsize_item in module ida_bytes: + +is_varsize_item(*args) -> 'int' + is_varsize_item(ea, F, ti=None, itemsize=None) -> int + + + Is the item at 'ea' variable size?. + + @param ea: linear address of the item (C++: ea_t) + @param F: flags (C++: flags_t) + @param ti: additional information about the data type. For example, if + the current item is a structure instance, then ti->tid is + structure id. Otherwise is ignored (may be NULL). If + specified as NULL, will be automatically retrieved from the + database (C++: const opinfo_t *) + @param itemsize: if not NULL and the item is varsize, itemsize will + contain the calculated item size (for struct types, + the minimal size is returned) (C++: asize_t *) + +Help on function is_word in module ida_bytes: + +is_word(*args) -> 'bool' + is_word(F) -> bool + + + 'FF_WORD' + + + @param F (C++: flags_t) + +Help on function is_yword in module ida_bytes: + +is_yword(*args) -> 'bool' + is_yword(F) -> bool + + + 'FF_YWORD' + + + @param F (C++: flags_t) + +Help on function is_zword in module ida_bytes: + +is_zword(*args) -> 'bool' + is_zword(F) -> bool + + + 'FF_ZWORD' + + + @param F (C++: flags_t) + +Help on function leading_zero_important in module ida_bytes: + +leading_zero_important(*args) -> 'bool' + leading_zero_important(ea, n) -> bool + + + Check if leading zeroes are important. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function nbits in module ida_bytes: + +nbits(*args) -> 'int' + nbits(ea) -> int + + + Get number of bits in a byte at the given address. + + @param ea (C++: ea_t) + @return: \ph{dnbits()} if the address doesn't belong to a segment, + otherwise the result depends on the segment type + +Help on function next_addr in module ida_bytes: + +next_addr(*args) -> 'ea_t' + next_addr(ea) -> ea_t + + + Get next address in the program (i.e. next address which has flags). + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function next_chunk in module ida_bytes: + +next_chunk(*args) -> 'ea_t' + next_chunk(ea) -> ea_t + + + Get the first address of next contiguous chunk in the program. + + @param ea (C++: ea_t) + @return: BADADDR if next chunk doesn't exist. + +Help on function next_head in module ida_bytes: + +next_head(*args) -> 'ea_t' + next_head(ea, maxea) -> ea_t + + + Get start of next defined item. + + @param ea: begin search at this address (C++: ea_t) + @param maxea: not included in the search range (C++: ea_t) + @return: BADADDR if none exists. + +Help on function next_inited in module ida_bytes: + +next_inited(*args) -> 'ea_t' + next_inited(ea, maxea) -> ea_t + + + Find the next initialized address. + + + @param ea (C++: ea_t) + @param maxea (C++: ea_t) + +Help on function next_not_tail in module ida_bytes: + +next_not_tail(*args) -> 'ea_t' + next_not_tail(ea) -> ea_t + + + Get address of next non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function next_that in module ida_bytes: + +next_that(*args) -> 'ea_t' + next_that(ea, maxea, callable) -> ea_t + + + Find next address with a flag satisfying the function 'testf'. + Start searching from address 'ea'+1 and inspect bytes up to 'maxea'. + maxea is not included in the search range. + + @param callable: a Python callable with the following prototype: + callable(flags). Return True to stop enumeration. + @return: the found address or BADADDR. + +Help on function next_unknown in module ida_bytes: + +next_unknown(*args) -> 'ea_t' + next_unknown(ea, maxea) -> ea_t + + + Similar to 'next_that()' , but will find the next address that is + unexplored. + + + @param ea (C++: ea_t) + @param maxea (C++: ea_t) + +Help on function num_flag in module ida_bytes: + +num_flag(*args) -> 'flags_t' + num_flag() -> flags_t + + + Get number of default base (bin, oct, dec, hex) + +Help on function oct_flag in module ida_bytes: + +oct_flag(*args) -> 'flags_t' + oct_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function off_flag in module ida_bytes: + +off_flag(*args) -> 'flags_t' + off_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function op_adds_xrefs in module ida_bytes: + +op_adds_xrefs(*args) -> 'bool' + op_adds_xrefs(F, n) -> bool + + + Should processor module create xrefs from the operand?. Currently + 'offset' and 'structure offset' operands create xrefs + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function op_bin in module ida_bytes: + +op_bin(*args) -> 'bool' + op_bin(ea, n) -> bool + + + set op type to 'bin_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_chr in module ida_bytes: + +op_chr(*args) -> 'bool' + op_chr(ea, n) -> bool + + + set op type to 'char_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_custfmt in module ida_bytes: + +op_custfmt(*args) -> 'bool' + op_custfmt(ea, n, fid) -> bool + + + Set custom data format for operand (fid-custom data format id) + + + @param ea (C++: ea_t) + @param n (C++: int) + @param fid (C++: int) + +Help on function op_dec in module ida_bytes: + +op_dec(*args) -> 'bool' + op_dec(ea, n) -> bool + + + set op type to 'dec_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_enum in module ida_bytes: + +op_enum(*args) -> 'bool' + op_enum(ea, n, id, serial) -> bool + + + Set operand representation to be 'enum_t'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @param id: id of enum (C++: enum_t) + @param serial: the serial number of the constant in the enumeration, + usually 0. the serial numbers are used if the + enumeration contains several constants with the same + value (C++: uchar) + @return: success + +Help on function op_flt in module ida_bytes: + +op_flt(*args) -> 'bool' + op_flt(ea, n) -> bool + + + set op type to 'flt_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_hex in module ida_bytes: + +op_hex(*args) -> 'bool' + op_hex(ea, n) -> bool + + + set op type to 'hex_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_num in module ida_bytes: + +op_num(*args) -> 'bool' + op_num(ea, n) -> bool + + + set op type to 'num_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_oct in module ida_bytes: + +op_oct(*args) -> 'bool' + op_oct(ea, n) -> bool + + + set op type to 'oct_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_seg in module ida_bytes: + +op_seg(*args) -> 'bool' + op_seg(ea, n) -> bool + + + Set operand representation to be 'segment'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stkvar in module ida_bytes: + +op_stkvar(*args) -> 'bool' + op_stkvar(ea, n) -> bool + + + Set operand representation to be 'stack variable'. Should be applied + to an instruction within a function. Should be applied after creating + a stack var using 'insn_t::create_stkvar()' . + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stroff in module ida_bytes: + +op_stroff(*args) -> 'bool' + op_stroff(insn, n, path, path_len, delta) -> bool + + + Set operand representation to be 'struct offset'. If applied to + unexplored bytes, converts them to 16/32bit word data + + @param insn: the instruction (C++: const insn_t &) + @param n: number of operand (0, 1, -1) (C++: int) + @param path: structure path (strpath). see nalt.hpp for more info. + (C++: const tid_t *) + @param path_len: length of the structure path (C++: int) + @param delta: struct offset delta. usually 0. denotes the difference + between the structure base and the pointer into the + structure. (C++: adiff_t) + @return: success + + Example: + Python> + Python> ins = ida_ua.insn_t() + Python> if ida_ua.decode_insn(ins, some_address): + Python> path_len = 1 + Python> path = ida_pro.tid_array(path_len) + Python> path[0] = ida_struct.get_struc_id("my_stucture_t") + Python> ida_bytes.op_stroff(ins, 0, path.cast(), path_len, 0) + Python> + +Help on function oword_flag in module ida_bytes: + +oword_flag(*args) -> 'flags_t' + oword_flag() -> flags_t + + + Get a flags_t representing a octaword. + +Help on function packreal_flag in module ida_bytes: + +packreal_flag(*args) -> 'flags_t' + packreal_flag() -> flags_t + + + Get a flags_t representing a packed decimal real. + +Help on function patch_byte in module ida_bytes: + +patch_byte(*args) -> 'bool' + patch_byte(ea, x) -> bool + + + Patch a byte of the program. The original value of the byte is saved + and can be obtained by 'get_original_byte()' . This function works for + wide byte processors too. + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_bytes in module ida_bytes: + +patch_bytes(*args) -> 'void' + patch_bytes(ea, buf) + + + Patch the specified number of bytes of the program. Original values of + bytes are saved and are available with get_original...() functions. + See also 'put_bytes()' . + + @param ea: linear address (C++: ea_t) + @param buf: buffer with new values of bytes (C++: const void *) + +Help on function patch_dword in module ida_bytes: + +patch_dword(*args) -> 'bool' + patch_dword(ea, x) -> bool + + + Patch a dword of the program. The original value of the dword is saved + and can be obtained by 'get_original_dword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_qword in module ida_bytes: + +patch_qword(*args) -> 'bool' + patch_qword(ea, x) -> bool + + + Patch a qword of the program. The original value of the qword is saved + and can be obtained by 'get_original_qword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_word in module ida_bytes: + +patch_word(*args) -> 'bool' + patch_word(ea, x) -> bool + + + Patch a word of the program. The original value of the word is saved + and can be obtained by 'get_original_word()' . This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function prev_addr in module ida_bytes: + +prev_addr(*args) -> 'ea_t' + prev_addr(ea) -> ea_t + + + Get previous address in the program. + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function prev_chunk in module ida_bytes: + +prev_chunk(*args) -> 'ea_t' + prev_chunk(ea) -> ea_t + + + Get the last address of previous contiguous chunk in the program. + + @param ea (C++: ea_t) + @return: BADADDR if previous chunk doesn't exist. + +Help on function prev_head in module ida_bytes: + +prev_head(*args) -> 'ea_t' + prev_head(ea, minea) -> ea_t + + + Get start of previous defined item. + + @param ea: begin search at this address (C++: ea_t) + @param minea: included in the search range (C++: ea_t) + @return: BADADDR if none exists. + +Help on function prev_inited in module ida_bytes: + +prev_inited(*args) -> 'ea_t' + prev_inited(ea, minea) -> ea_t + + + Find the previous initialized address. + + + @param ea (C++: ea_t) + @param minea (C++: ea_t) + +Help on function prev_not_tail in module ida_bytes: + +prev_not_tail(*args) -> 'ea_t' + prev_not_tail(ea) -> ea_t + + + Get address of previous non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function prev_that in module ida_bytes: + +prev_that(*args) -> 'ea_t' + prev_that(ea, minea, callable) -> ea_t + + + Find previous address with a flag satisfying the function 'testf'.do + not pass 'is_unknown()' to this function to find unexplored bytes It + will fail under the debugger. To find unexplored bytes, use + 'prev_unknown()' . + + @param ea: start searching from this address - 1. (C++: ea_t) + @param minea: included in the search range. (C++: ea_t) + @return: the found address or BADADDR . + +Help on function prev_unknown in module ida_bytes: + +prev_unknown(*args) -> 'ea_t' + prev_unknown(ea, minea) -> ea_t + + + Similar to 'prev_that()' , but will find the previous address that is + unexplored. + + + @param ea (C++: ea_t) + @param minea (C++: ea_t) + +Help on function print_strlit_type in module ida_bytes: + +print_strlit_type(*args) -> 'PyObject *' + print_strlit_type(strtype, flags=0) -> PyObject * + + + Get string type information: the string type name (possibly decorated + with hotkey markers), and the tooltip. + + @param strtype: the string type (C++: int32) + @param flags: or'ed PSTF_* constants (C++: int) + @return: length of generated text + +Help on function put_byte in module ida_bytes: + +put_byte(*args) -> 'bool' + put_byte(ea, x) -> bool + + + Set value of one byte of the program. This function modifies the + database. If the debugger is active then the debugged process memory + is patched too.The original value of the byte is completely lost and + can't be recovered by the 'get_original_byte()' function. See also + 'put_dbg_byte()' to write to the process memory directly when the + debugger is active. This function can handle wide byte processors. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint64) + @return: true if the database has been modified + +Help on function put_bytes in module ida_bytes: + +put_bytes(*args) -> 'void' + put_bytes(ea, buf) + + + Modify the specified number of bytes of the program. This function + does not save the original values of bytes. See also 'patch_bytes()' . + + @param ea: linear address (C++: ea_t) + @param buf: buffer with new values of bytes (C++: const void *) + +Help on function put_dword in module ida_bytes: + +put_dword(*args) -> 'void' + put_dword(ea, x) + + + Set value of one dword of the program. This function takes into + account order of bytes specified in \inf{is_be()} This function works + for wide byte processors too.the original value of the dword is + completely lost and can't be recovered by the 'get_original_dword()' + function. + + @param ea: linear address (C++: ea_t) + @param x: dword value (C++: uint64) + +Help on function put_qword in module ida_bytes: + +put_qword(*args) -> 'void' + put_qword(ea, x) + + + Set value of one qword (8 bytes) of the program. This function takes + into account order of bytes specified in \inf{is_be()} This function + DOESN'T works for wide byte processors. + + @param ea: linear address (C++: ea_t) + @param x: qword value (C++: uint64) + +Help on function put_word in module ida_bytes: + +put_word(*args) -> 'void' + put_word(ea, x) + + + Set value of one word of the program. This function takes into account + order of bytes specified in \inf{is_be()} This function works for wide + byte processors too.The original value of the word is completely lost + and can't be recovered by the 'get_original_word()' function. ea - + linear address x - word value + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function qword_flag in module ida_bytes: + +qword_flag(*args) -> 'flags_t' + qword_flag() -> flags_t + + + Get a flags_t representing a quad word. + +Help on function register_custom_data_format in module ida_bytes: + +register_custom_data_format(*args) -> 'int' + register_custom_data_format(py_df) -> int + + + Registers a custom data format with a given data type. + @param df: an instance of data_format_t + @return: + < 0 if failed to register + > 0 data format id + +Help on function register_custom_data_type in module ida_bytes: + +register_custom_data_type(*args) -> 'int' + register_custom_data_type(py_dt) -> int + + + Registers a custom data type. + @param dt: an instance of the data_type_t class + @return: + < 0 if failed to register + > 0 data type id + +Help on function register_data_types_and_formats in module ida_bytes: + +register_data_types_and_formats(formats) + Registers multiple data types and formats at once. + To register one type/format at a time use register_custom_data_type/register_custom_data_format + + It employs a special table of types and formats described below: + + The 'formats' is a list of tuples. If a tuple has one element then it is the format to be registered with dtid=0 + If the tuple has more than one element, then tuple[0] is the data type and tuple[1:] are the data formats. For example: + many_formats = [ + (pascal_data_type(), pascal_data_format()), + (simplevm_data_type(), simplevm_data_format()), + (makedword_data_format(),), + (simplevm_data_format(),) + ] + The first two tuples describe data types and their associated formats. + The last two tuples describe two data formats to be used with built-in data types. + The data format may be attached to several data types. The id of the + data format is stored in the first data_format_t object. For example: + assert many_formats[1][1] != -1 + assert many_formats[2][0] != -1 + assert many_formats[3][0] == -1 + +Help on function revert_byte in module ida_bytes: + +revert_byte(*args) -> 'bool' + revert_byte(ea) -> bool + + + Revert patched byte + + @param ea (C++: ea_t) + +Help on function seg_flag in module ida_bytes: + +seg_flag(*args) -> 'flags_t' + seg_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function set_cmt in module ida_bytes: + +set_cmt(*args) -> 'bool' + set_cmt(ea, comm, rptble) -> bool + + + Set an indented comment. + + @param ea: linear address (C++: ea_t) + @param comm: comment string NULL: do nothing (return 0) "" : + delete comment (C++: const char *) + @param rptble: is repeatable? (C++: bool) + @return: success + +Help on function set_forced_operand in module ida_bytes: + +set_forced_operand(*args) -> 'bool' + set_forced_operand(ea, n, op) -> bool + + + Set forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @param op: text of operand NULL: do nothing (return 0) "" : delete + forced operand (C++: const char *) + @return: success + +Help on function set_immd in module ida_bytes: + +set_immd(*args) -> 'bool' + set_immd(ea) -> bool + + + Set 'has immediate operand' flag. Returns true if the 'FF_IMMD' bit + was not set and now is set + + @param ea (C++: ea_t) + +Help on function set_lzero in module ida_bytes: + +set_lzero(*args) -> 'bool' + set_lzero(ea, n) -> bool + + + Set toggle lzero bit. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function set_manual_insn in module ida_bytes: + +set_manual_insn(*args) -> 'void' + set_manual_insn(ea, manual_insn) + + + Set manual instruction string. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @param manual_insn: "" - delete manual string. NULL - do nothing (C++: + const char *) + +Help on function set_op_type in module ida_bytes: + +set_op_type(*args) -> 'bool' + set_op_type(ea, type, n) -> bool + + + (internal function) change representation of operand(s). + + @param ea: linear address (C++: ea_t) + @param type: new flag value (should be obtained from char_flag() , + num_flag() and similar functions) (C++: flags_t) + @param n: number of operand (0, 1, -1) (C++: int) + +Help on function set_opinfo in module ida_bytes: + +set_opinfo(*args) -> 'bool' + set_opinfo(ea, n, flag, ti, suppress_events=False) -> bool + + + Set additional information about an operand representation. This + function is a low level one. Only the kernel should use it. + + @param ea: linear address of the item (C++: ea_t) + @param n: number of operand, 0 or 1 (C++: int) + @param flag: flags of the item (C++: flags_t) + @param ti: additional representation information (C++: const opinfo_t + *) + @param suppress_events: do not generate changing_op_type and + op_type_changed events (C++: bool) + @return: success + +Help on function stkvar_flag in module ida_bytes: + +stkvar_flag(*args) -> 'flags_t' + stkvar_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function strlit_flag in module ida_bytes: + +strlit_flag(*args) -> 'flags_t' + strlit_flag() -> flags_t + + + Get a flags_t representing a string literal. + +Help on function stroff_flag in module ida_bytes: + +stroff_flag(*args) -> 'flags_t' + stroff_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function stru_flag in module ida_bytes: + +stru_flag(*args) -> 'flags_t' + stru_flag() -> flags_t + + + Get a flags_t representing a struct. + +Help on function tbyte_flag in module ida_bytes: + +tbyte_flag(*args) -> 'flags_t' + tbyte_flag() -> flags_t + + + Get a flags_t representing a tbyte. + +Help on function toggle_bnot in module ida_bytes: + +toggle_bnot(*args) -> 'bool' + toggle_bnot(ea, n) -> bool + + + Toggle binary negation of operand. also see 'is_bnot()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function toggle_lzero in module ida_bytes: + +toggle_lzero(*args) -> 'bool' + toggle_lzero(ea, n) -> bool + +Help on function toggle_sign in module ida_bytes: + +toggle_sign(*args) -> 'bool' + toggle_sign(ea, n) -> bool + + + Toggle sign of n-th operand. allowed values of n: 0-first operand, + 1-other operands + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function unregister_custom_data_format in module ida_bytes: + +unregister_custom_data_format(*args) -> 'bool' + unregister_custom_data_format(dfid) -> bool + + + Unregisters a custom data format + @param dfid: data format id + @return: Boolean + +Help on function unregister_custom_data_type in module ida_bytes: + +unregister_custom_data_type(*args) -> 'bool' + unregister_custom_data_type(dtid) -> bool + + + Unregisters a custom data type. + @param dtid: the data type id + @return: Boolean + +Help on function unregister_data_types_and_formats in module ida_bytes: + +unregister_data_types_and_formats(formats) + As opposed to register_data_types_and_formats(), this function + unregisters multiple data types and formats at once. + +Help on function update_hidden_range in module ida_bytes: + +update_hidden_range(*args) -> 'bool' + update_hidden_range(ha) -> bool + + + Update hidden range information in the database. You cannot use this + function to change the range boundaries + + @param ha: range to update (C++: const hidden_range_t *) + @return: success + +Help on function use_mapping in module ida_bytes: + +use_mapping(*args) -> 'ea_t' + use_mapping(ea) -> ea_t + + + Translate address according to current mappings. + + @param ea: address to translate (C++: ea_t) + @return: translated address + +Help on function visit_patched_bytes in module ida_bytes: + +visit_patched_bytes(*args) -> 'int' + visit_patched_bytes(ea1, ea2, py_callable) -> int + + + Enumerates patched bytes in the given range and invokes a callable + @param ea1: start address + @param ea2: end address + @param callable: a Python callable with the following prototype: + callable(ea, fpos, org_val, patch_val). + If the callable returns non-zero then that value will be + returned to the caller and the enumeration will be + interrupted. + @return: Zero if the enumeration was successful or the return + value of the callback if enumeration was interrupted. + +Help on function word_flag in module ida_bytes: + +word_flag(*args) -> 'flags_t' + word_flag() -> flags_t + + + Get a flags_t representing a word. + +Help on function yword_flag in module ida_bytes: + +yword_flag(*args) -> 'flags_t' + yword_flag() -> flags_t + + + Get a flags_t representing a ymm word. + +Help on function zword_flag in module ida_bytes: + +zword_flag(*args) -> 'flags_t' + zword_flag() -> flags_t + + + Get a flags_t representing a zmm word. + +=== ida_bytes EPYDOC INJECTIONS === +ida_bytes.ALOPT_IGNCLT +""" +if set, don't stop at codepoints that are not part of the current +'culture'; accept all those that are graphical (this is typically used +used by user-initiated actions creating string literals.) +""" + +ida_bytes.ALOPT_IGNHEADS +""" +don't stop if another data item is encountered. only the byte values +will be used to determine the string length. if not set, a defined +data item or instruction will truncate the string +""" + +ida_bytes.ALOPT_IGNPRINT +""" +if set, don't stop at non-printable codepoints, but only at the +terminating character (or not unicode-mapped character (e.g., 0x8f in +CP1252)) +""" + +ida_bytes.ALOPT_MAX4K +""" +accumulated length + +if string length is more than 4K, return the +""" + +ida_bytes.BIN_SEARCH_BACKWARD +""" +search backward for bytes +""" + +ida_bytes.BIN_SEARCH_CASE +""" +case sensitive +""" + +ida_bytes.BIN_SEARCH_FORWARD +""" +search forward for bytes +""" + +ida_bytes.BIN_SEARCH_INITED +""" +find_byte, find_byter: any initilized value +""" + +ida_bytes.BIN_SEARCH_NOBREAK +""" +don't check for Ctrl-Break +""" + +ida_bytes.BIN_SEARCH_NOCASE +""" +case insensitive +""" + +ida_bytes.BIN_SEARCH_NOSHOW +""" +don't show search progress or update screen +""" + +ida_bytes.DELIT_DELNAMES +""" +delete any names at the specified address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_EXPAND +""" +propagate undefined items; for example if removing an instruction +removes all references to the next instruction, then plan to convert +to unexplored the next instruction too. +""" + +ida_bytes.DELIT_KEEPFUNC +""" +Just delete xrefs, ops e.t.c. + +do not undefine the function start. +""" + +ida_bytes.DELIT_NOCMT +""" +reject to delete if a comment is in address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_NOTRUNC +""" +even if 'AF_TRFUNC' is set + +don't truncate the current function +""" + +ida_bytes.DELIT_NOUNAME +""" +reject to delete if a user name is in address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_SIMPLE +""" +simply undefine the specified item(s) +""" + +ida_bytes.DTP_NODUP +""" +do not use dup construct +""" + +ida_bytes.DT_TYPE +""" +Mask for DATA typing. +""" + +ida_bytes.FF_0CHAR +""" +Char ('x')? +""" + +ida_bytes.FF_0CUST +""" +Custom representation? +""" + +ida_bytes.FF_0ENUM +""" +Enumeration? +""" + +ida_bytes.FF_0FLT +""" +Floating point number? +""" + +ida_bytes.FF_0FOP +""" +Forced operand? +""" + +ida_bytes.FF_0NUMB +""" +Binary number? +""" + +ida_bytes.FF_0NUMD +""" +Decimal number? +""" + +ida_bytes.FF_0NUMH +""" +Hexadecimal number? +""" + +ida_bytes.FF_0NUMO +""" +Octal number? +""" + +ida_bytes.FF_0OFF +""" +Offset? +""" + +ida_bytes.FF_0SEG +""" +Segment? +""" + +ida_bytes.FF_0STK +""" +Stack variable? +""" + +ida_bytes.FF_0STRO +""" +Struct offset? +""" + +ida_bytes.FF_0VOID +""" +Void (unknown)? +""" + +ida_bytes.FF_1CHAR +""" +Char ('x')? +""" + +ida_bytes.FF_1CUST +""" +Custom representation? +""" + +ida_bytes.FF_1ENUM +""" +Enumeration? +""" + +ida_bytes.FF_1FLT +""" +Floating point number? +""" + +ida_bytes.FF_1FOP +""" +Forced operand? +""" + +ida_bytes.FF_1NUMB +""" +Binary number? +""" + +ida_bytes.FF_1NUMD +""" +Decimal number? +""" + +ida_bytes.FF_1NUMH +""" +Hexadecimal number? +""" + +ida_bytes.FF_1NUMO +""" +Octal number? +""" + +ida_bytes.FF_1OFF +""" +Offset? +""" + +ida_bytes.FF_1SEG +""" +Segment? +""" + +ida_bytes.FF_1STK +""" +Stack variable? +""" + +ida_bytes.FF_1STRO +""" +Struct offset? +""" + +ida_bytes.FF_1VOID +""" +Void (unknown)? +""" + +ida_bytes.FF_ALIGN +""" +alignment directive +""" + +ida_bytes.FF_BNOT +""" +Bitwise negation of operands. +""" + +ida_bytes.FF_BYTE +""" +byte +""" + +ida_bytes.FF_CODE +""" +Code ? +""" + +ida_bytes.FF_COMM +""" +Has comment ? +""" + +ida_bytes.FF_CUSTOM +""" +custom data type +""" + +ida_bytes.FF_DATA +""" +Data ? +""" + +ida_bytes.FF_DOUBLE +""" +double +""" + +ida_bytes.FF_DWORD +""" +double word +""" + +ida_bytes.FF_FLOAT +""" +float +""" + +ida_bytes.FF_FLOW +""" +Exec flow from prev instruction. +""" + +ida_bytes.FF_FUNC +""" +function start? +""" + +ida_bytes.FF_IMMD +""" +Has Immediate value ? +""" + +ida_bytes.FF_IVL +""" +Byte has value ? +""" + +ida_bytes.FF_JUMP +""" +Has jump table or switch_info? +""" + +ida_bytes.FF_LABL +""" +Has dummy name? +""" + +ida_bytes.FF_LINE +""" +Has next or prev lines ? +""" + +ida_bytes.FF_NAME +""" +Has name ? +""" + +ida_bytes.FF_OWORD +""" +octaword/xmm word (16 bytes/128 bits) +""" + +ida_bytes.FF_PACKREAL +""" +packed decimal real +""" + +ida_bytes.FF_QWORD +""" +quadro word +""" + +ida_bytes.FF_REF +""" +has references +""" + +ida_bytes.FF_SIGN +""" +Inverted sign of operands. +""" + +ida_bytes.FF_STRLIT +""" +string literal +""" + +ida_bytes.FF_STRUCT +""" +struct variable +""" + +ida_bytes.FF_TAIL +""" +Tail ? +""" + +ida_bytes.FF_TBYTE +""" +tbyte +""" + +ida_bytes.FF_UNK +""" +Unknown ? +""" + +ida_bytes.FF_UNUSED +""" +unused bit (was used for variable bytes) +""" + +ida_bytes.FF_WORD +""" +word +""" + +ida_bytes.FF_YWORD +""" +ymm word (32 bytes/256 bits) +""" + +ida_bytes.FF_ZWORD +""" +zmm word (64 bytes/512 bits) +""" + +ida_bytes.GFE_VALUE +""" +get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote +debugging because the kernel needs to read the process memory. +""" + +ida_bytes.GMB_READALL +""" +if this bit is not set, fail at first uninited byte + +try to read all bytes +""" + +ida_bytes.GMB_WAITBOX +""" +show wait box (may return -1 in this case) +""" + +ida_bytes.ITEM_END_FIXUP +""" +stop at the first fixup +""" + +ida_bytes.ITEM_END_INITED +""" +stop when initialization changes i.e.if is_loaded(ea): stop if +uninitialized byte is encounteredif !is_loaded(ea): stop if +initialized byte is encountered +""" + +ida_bytes.ITEM_END_NAME +""" +stop at the first named location +""" + +ida_bytes.ITEM_END_XREF +""" +stop at the first referenced location +""" + +ida_bytes.MS_0TYPE +""" +Mask for 1st arg typing. +""" + +ida_bytes.MS_1TYPE +""" +Mask for the type of other operands. +""" + +ida_bytes.MS_CLS +""" +Mask for typing. +""" + +ida_bytes.MS_CODE +""" +Mask for code bits. +""" + +ida_bytes.MS_COMM +""" +Mask of common bits. +""" + +ida_bytes.MS_VAL +""" +Mask for byte value. +""" + +ida_bytes.OPND_ALL +""" +all operands +""" + +ida_bytes.OPND_MASK +""" +mask for operand number +""" + +ida_bytes.OPND_OUTER +""" +used only in set, get, del_offset() functions + +outer offset base (combined with operand number). +""" + +ida_bytes.PSTF_ENC +""" +if encoding is specified, append it +""" + +ida_bytes.PSTF_HOTKEY +""" +have hotkey markers part of the name +""" + +ida_bytes.PSTF_TBRIEF +""" +use brief name (e.g., in the 'Strings window') +""" + +ida_bytes.PSTF_TINLIN +""" +use 'inline' name (e.g., in the structures comments) +""" + +ida_bytes.PSTF_TMASK +""" +type mask +""" + +ida_bytes.PSTF_TNORM +""" +use normal name +""" + +ida_bytes.STRCONV_ESCAPE +""" +convert non-printable characters to C escapes (, \\xNN, \\uNNNN) +""" + +ida_bytes.STRCONV_INCLLEN +""" +for Pascal-style strings, include the prefixing length byte(s) as +C-escaped sequence +""" + +ida_bytes.STRCONV_REPLCHAR +""" +convert non-printable characters to the Unicode replacement character +(U+FFFD) +""" +=== ida_bytes EPYDOC INJECTIONS END === +Help on class DBG_Hooks in module ida_dbg: + +class DBG_Hooks(builtins.object) + | Proxy of C++ DBG_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> DBG_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_DBG_Hooks(...) + | delete_DBG_Hooks(self) + | + | dbg_bpt(self, *args) -> 'int' + | dbg_bpt(self, tid, bptea) -> int + | + | dbg_bpt_changed(self, *args) -> 'void' + | dbg_bpt_changed(self, bptev_code, bpt) + | + | dbg_exception(self, *args) -> 'int' + | dbg_exception(self, pid, tid, ea, exc_code, exc_can_cont, exc_ea, exc_info) -> int + | + | dbg_finished_loading_bpts(self, *args) -> 'void' + | dbg_finished_loading_bpts(self) + | + | dbg_information(self, *args) -> 'void' + | dbg_information(self, pid, tid, ea, info) + | + | dbg_library_load(self, *args) -> 'void' + | dbg_library_load(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_library_unload(self, *args) -> 'void' + | dbg_library_unload(self, pid, tid, ea, info) + | + | dbg_process_attach(self, *args) -> 'void' + | dbg_process_attach(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_process_detach(self, *args) -> 'void' + | dbg_process_detach(self, pid, tid, ea) + | + | dbg_process_exit(self, *args) -> 'void' + | dbg_process_exit(self, pid, tid, ea, exit_code) + | + | dbg_process_start(self, *args) -> 'void' + | dbg_process_start(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_request_error(self, *args) -> 'void' + | dbg_request_error(self, failed_command, failed_dbg_notification) + | + | dbg_run_to(self, *args) -> 'void' + | dbg_run_to(self, pid, tid, ea) + | + | dbg_started_loading_bpts(self, *args) -> 'void' + | dbg_started_loading_bpts(self) + | + | dbg_step_into(self, *args) -> 'void' + | dbg_step_into(self) + | + | dbg_step_over(self, *args) -> 'void' + | dbg_step_over(self) + | + | dbg_step_until_ret(self, *args) -> 'void' + | dbg_step_until_ret(self) + | + | dbg_suspend_process(self, *args) -> 'void' + | dbg_suspend_process(self) + | + | dbg_thread_exit(self, *args) -> 'void' + | dbg_thread_exit(self, pid, tid, ea, exit_code) + | + | dbg_thread_start(self, *args) -> 'void' + | dbg_thread_start(self, pid, tid, ea) + | + | dbg_trace(self, *args) -> 'int' + | dbg_trace(self, tid, ip) -> int + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function add_bpt in module ida_dbg: + +add_bpt(*args) -> 'bool' + add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + add_bpt(bpt) -> bool + + + Add a new breakpoint in the debugged process. \sq{Type, Synchronous + function - available as request, Notification, none (synchronous + function)}Only one breakpoint can exist at a given address. + + @param ea: any address in the process memory space. Depending on the + architecture, hardware breakpoints always be setup at + random address. For example, on x86, hardware breakpoints + should be aligned depending on their size. Moreover, on the + x86 architecture, it is impossible to setup more than 4 + hardware breakpoints. (C++: ea_t) + @param size: size of the breakpoint (irrelevant for software + breakpoints): As for the address, hardware breakpoints + can't always be setup with random size. (C++: asize_t) + @param type: type of the breakpoint ( BPT_SOFT for software + breakpoint) special case BPT_DEFAULT ( BPT_SOFT | + BPT_EXEC ): try to add instruction breakpoint of the + appropriate type as follows: software bpt if supported, + hwbpt otherwise (C++: bpttype_t) + +Help on function add_path_mapping in module ida_dbg: + +add_path_mapping(*args) -> 'void' + add_path_mapping(src, dst) + +Help on function add_virt_module in module ida_dbg: + +add_virt_module(*args) -> 'bool' + add_virt_module(mod) -> bool + +Help on function attach_process in module ida_dbg: + +attach_process(*args) -> 'int' + attach_process(pid=pid_t(-1), event_id=-1) -> int + + + Attach the debugger to a running process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_attach' + }This function shouldn't be called as a request if 'NO_PROCESS' is + used. + + @param pid: PID of the process to attach to. If NO_PROCESS , a dialog + box will interactively ask the user for the process to + attach to. (C++: pid_t) + @param event_id (C++: int) + +Help on class bpt_location_t in module ida_dbg: + +class bpt_location_t(builtins.object) + | Proxy of C++ bpt_location_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> bpt_location_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bpt_location_t(...) + | delete_bpt_location_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ea(self, *args) -> 'ea_t' + | ea(self) -> ea_t + | + | is_empty_path(self, *args) -> 'bool' + | is_empty_path(self) -> bool + | + | lineno(self, *args) -> 'int' + | lineno(self) -> int + | + | offset(self, *args) -> 'uval_t' + | offset(self) -> uval_t + | + | path(self, *args) -> 'char const *' + | path(self) -> char const * + | + | set_abs_bpt(self, *args) -> 'void' + | set_abs_bpt(self, a) + | + | set_rel_bpt(self, *args) -> 'void' + | set_rel_bpt(self, mod, _offset) + | + | set_src_bpt(self, *args) -> 'void' + | set_src_bpt(self, fn, _lineno) + | + | set_sym_bpt(self, *args) -> 'void' + | set_sym_bpt(self, _symbol, _offset=0) + | + | symbol(self, *args) -> 'char const *' + | symbol(self) -> char const * + | + | type(self, *args) -> 'bpt_loctype_t' + | type(self) -> bpt_loctype_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | index + | bpt_location_t_index_get(self) -> int + | + | info + | bpt_location_t_info_get(self) -> ea_t + | + | loctype + | bpt_location_t_loctype_get(self) -> bpt_loctype_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class bpt_t in module ida_dbg: + +class bpt_t(builtins.object) + | Proxy of C++ bpt_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bpt_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bpt_t(...) + | delete_bpt_t(self) + | + | badbpt(self, *args) -> 'bool' + | badbpt(self) -> bool + | + | enabled(self, *args) -> 'bool' + | enabled(self) -> bool + | + | get_cnd_elang_idx(self, *args) -> 'size_t' + | get_cnd_elang_idx(self) -> size_t + | + | get_size(self, *args) -> 'int' + | get_size(self) -> int + | + | is_absbpt(self, *args) -> 'bool' + | is_absbpt(self) -> bool + | + | is_active(self, *args) -> 'bool' + | is_active(self) -> bool + | + | is_compiled(self, *args) -> 'bool' + | is_compiled(self) -> bool + | + | is_hwbpt(self, *args) -> 'bool' + | is_hwbpt(self) -> bool + | + | is_inactive(self, *args) -> 'bool' + | is_inactive(self) -> bool + | + | is_low_level(self, *args) -> 'bool' + | is_low_level(self) -> bool + | + | is_page_bpt(self, *args) -> 'bool' + | is_page_bpt(self) -> bool + | + | is_partially_active(self, *args) -> 'bool' + | is_partially_active(self) -> bool + | + | is_relbpt(self, *args) -> 'bool' + | is_relbpt(self) -> bool + | + | is_srcbpt(self, *args) -> 'bool' + | is_srcbpt(self) -> bool + | + | is_symbpt(self, *args) -> 'bool' + | is_symbpt(self) -> bool + | + | is_tracemodebpt(self, *args) -> 'bool' + | is_tracemodebpt(self) -> bool + | + | is_traceoffbpt(self, *args) -> 'bool' + | is_traceoffbpt(self) -> bool + | + | is_traceonbpt(self, *args) -> 'bool' + | is_traceonbpt(self) -> bool + | + | listbpt(self, *args) -> 'bool' + | listbpt(self) -> bool + | + | set_abs_bpt(self, *args) -> 'void' + | set_abs_bpt(self, a) + | + | set_rel_bpt(self, *args) -> 'void' + | set_rel_bpt(self, mod, o) + | + | set_src_bpt(self, *args) -> 'void' + | set_src_bpt(self, fn, lineno) + | + | set_sym_bpt(self, *args) -> 'void' + | set_sym_bpt(self, sym, o) + | + | set_trace_action(self, *args) -> 'bool' + | set_trace_action(self, enable, trace_types) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | bpt_t_cb_get(self) -> size_t + | + | cndidx + | bpt_t_cndidx_get(self) -> int + | + | condition + | bpt_t_condition_get(self) -> PyObject * + | + | ea + | bpt_t_ea_get(self) -> ea_t + | + | elang + | bpt_t_elang_get(self) -> PyObject * + | + | flags + | bpt_t_flags_get(self) -> uint32 + | + | loc + | bpt_t_loc_get(self) -> bpt_location_t + | + | pass_count + | bpt_t_pass_count_get(self) -> int + | + | pid + | bpt_t_pid_get(self) -> pid_t + | + | props + | bpt_t_props_get(self) -> uint32 + | + | size + | bpt_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | tid + | bpt_t_tid_get(self) -> thid_t + | + | type + | bpt_t_type_get(self) -> bpttype_t + +Help on class bpt_vec_t in module ida_dbg: + +class bpt_vec_t(builtins.object) + | Proxy of C++ qvector< bpt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'bpt_t const &' + | __getitem__(self, i) -> bpt_t + | + | __init__(self, *args) + | __init__(self) -> bpt_vec_t + | __init__(self, x) -> bpt_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_bpt_vec_t(...) + | delete_bpt_vec_t(self) + | + | at(self, *args) -> 'bpt_t const &' + | at(self, _idx) -> bpt_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< bpt_t >::const_iterator' + | begin(self) -> bpt_t + | begin(self) -> bpt_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< bpt_t >::const_iterator' + | end(self) -> bpt_t + | end(self) -> bpt_t + | + | erase(self, *args) -> 'qvector< bpt_t >::iterator' + | erase(self, it) -> bpt_t + | erase(self, first, last) -> bpt_t + | + | extract(self, *args) -> 'bpt_t *' + | extract(self) -> bpt_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=bpt_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< bpt_t >::iterator' + | insert(self, it, x) -> bpt_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'bpt_t &' + | push_back(self, x) + | push_back(self) -> bpt_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function bring_debugger_to_front in module ida_dbg: + +bring_debugger_to_front(*args) -> 'void' + bring_debugger_to_front() + +Help on function check_bpt in module ida_dbg: + +check_bpt(*args) -> 'int' + check_bpt(ea) -> int + + + Check the breakpoint at the specified address. + + @param ea (C++: ea_t) + @return: one of Breakpoint status codes + +Help on function choose_trace_file in module ida_dbg: + +choose_trace_file(*args) -> 'qstring *' + choose_trace_file() -> str + + + Show the choose trace dialog. + +Help on function clear_requests_queue in module ida_dbg: + +clear_requests_queue(*args) -> 'void' + clear_requests_queue() + + + Clear the queue of waiting requests. \sq{Type, Synchronous function, + Notification, none (synchronous function)}If a request is currently + running, this one isn't stopped. + +Help on function clear_trace in module ida_dbg: + +clear_trace(*args) -> 'void' + clear_trace() + + + Clear all events in the trace buffer. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + +Help on function collect_stack_trace in module ida_dbg: + +collect_stack_trace(*args) -> 'bool' + collect_stack_trace(tid, trace) -> bool + +Help on function continue_process in module ida_dbg: + +continue_process(*args) -> 'bool' + continue_process() -> bool + + + Continue the execution of the process in the debugger. \sq{Type, + Synchronous function - available as Request, Notification, none + (synchronous function)}The 'continue_process()' function can be called + from a notification handler to force the continuation of the process. + In this case the request queue will not be examined, IDA will simply + resume execution. Usually it makes sense to call + 'request_continue_process()' followed by 'run_requests()' , so that + IDA will first start a queued request (if any) and then resume the + application. + +Help on function create_source_viewer in module ida_dbg: + +create_source_viewer(*args) -> 'source_view_t *' + create_source_viewer(out_ccv, parent, custview, sf, lines, lnnum, colnum, flags) -> source_view_t * + + + Create a source code view. + + + @param out_ccv (C++: TWidget **) + @param parent (C++: TWidget *) + @param custview (C++: TWidget *) + @param sf (C++: source_file_ptr) + @param lines (C++: strvec_t *) + @param lnnum (C++: int) + @param colnum (C++: int) + @param flags (C++: int) + +Help on function dbg_add_bpt_tev in module ida_dbg: + +dbg_add_bpt_tev(*args) -> 'bool' + dbg_add_bpt_tev(tid, ea, bp) -> bool + + + Add a new breakpoint trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ea (C++: ea_t) + @param bp (C++: ea_t) + @return: false if the operation failed, true otherwise + +Help on function dbg_add_call_tev in module ida_dbg: + +dbg_add_call_tev(*args) -> 'void' + dbg_add_call_tev(tid, caller, callee) + + + Add a new call trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param caller (C++: ea_t) + @param callee (C++: ea_t) + +Help on function dbg_add_debug_event in module ida_dbg: + +dbg_add_debug_event(*args) -> 'void' + dbg_add_debug_event(event) + + + Add a new debug event to the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param event (C++: debug_event_t *) + +Help on function dbg_add_insn_tev in module ida_dbg: + +dbg_add_insn_tev(*args) -> 'bool' + dbg_add_insn_tev(tid, ea, save=SAVE_DIFF) -> bool + + + Add a new instruction trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ea (C++: ea_t) + @param save (C++: save_reg_values_t) + @return: false if the operation failed, true otherwise + +Help on function dbg_add_many_tevs in module ida_dbg: + +dbg_add_many_tevs(*args) -> 'bool' + dbg_add_many_tevs(new_tevs) -> bool + + + Add many new trace elements to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param new_tevs (C++: tevinforeg_vec_t *) + @return: false if the operation failed for any tev_info_t object + +Help on function dbg_add_ret_tev in module ida_dbg: + +dbg_add_ret_tev(*args) -> 'void' + dbg_add_ret_tev(tid, ret_insn, return_to) + + + Add a new return trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ret_insn (C++: ea_t) + @param return_to (C++: ea_t) + +Help on function dbg_add_tev in module ida_dbg: + +dbg_add_tev(*args) -> 'void' + dbg_add_tev(type, tid, address) + + + Add a new trace element to the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param type (C++: tev_type_t) + @param tid (C++: thid_t) + @param address (C++: ea_t) + +Help on function dbg_add_thread in module ida_dbg: + +dbg_add_thread(*args) -> 'void' + dbg_add_thread(tid) + + + Add a thread to the current trace. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @param tid (C++: thid_t) + +Help on function dbg_bin_search in module ida_dbg: + +dbg_bin_search(*args) -> 'unsigned-ea-like-numeric-type *, qstring *'↗ + dbg_bin_search(start_ea, end_ea, data, srch_flags) -> str + +Help on function dbg_can_query in module ida_dbg: + +dbg_can_query(*args) -> 'bool' + dbg_can_query() -> bool + + + This function can be used to check if the debugger can be queried: + - debugger is loaded + - process is suspended + - process is not suspended but can take requests. In this case some requests like + memory read/write, bpt management succeed and register querying will fail. + Check if idaapi.get_process_state() < 0 to tell if the process is suspended + @return: Boolean + +Help on function dbg_del_thread in module ida_dbg: + +dbg_del_thread(*args) -> 'void' + dbg_del_thread(tid) + + + Delete a thread from the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + +Help on function dbg_is_loaded in module ida_dbg: + +dbg_is_loaded(*args) -> 'bool' + dbg_is_loaded() -> bool + + + Checks if a debugger is loaded + @return: Boolean + +Help on function define_exception in module ida_dbg: + +define_exception(*args) -> 'char const *' + define_exception(code, name, desc, flags) -> char const * + + + Convenience function: define new exception code. + + @param code: exception code (cannot be 0) (C++: uint) + @param name: exception name (cannot be empty or NULL) (C++: const char + *) + @param desc: exception description (maybe NULL) (C++: const char *) + @param flags: combination of Exception info flags (C++: int) + @return: failure message or NULL. You must call store_exceptions() + if this function succeeds + +Help on function del_bpt in module ida_dbg: + +del_bpt(*args) -> 'bool' + del_bpt(ea) -> bool + del_bpt(bptloc) -> bool + + + Delete an existing breakpoint in the debugged process. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + +Help on function del_bptgrp in module ida_dbg: + +del_bptgrp(*args) -> 'bool' + del_bptgrp(name) -> bool + +Help on function del_virt_module in module ida_dbg: + +del_virt_module(*args) -> 'bool' + del_virt_module(base) -> bool + +Help on function detach_process in module ida_dbg: + +detach_process(*args) -> 'bool' + detach_process() -> bool + + + Detach the debugger from the debugged process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_detach' } + +Help on function diff_trace_file in module ida_dbg: + +diff_trace_file(*args) -> 'bool' + diff_trace_file(nonnul_filename) -> bool + + + Show difference between the current trace and the one from 'filename'. + +Help on function disable_bblk_trace in module ida_dbg: + +disable_bblk_trace(*args) -> 'bool' + disable_bblk_trace() -> bool + +Help on function disable_bpt in module ida_dbg: + +disable_bpt(*args) -> 'bool' + disable_bpt(ea) -> bool + disable_bpt(bptloc) -> bool + +Help on function disable_func_trace in module ida_dbg: + +disable_func_trace(*args) -> 'bool' + disable_func_trace() -> bool + +Help on function disable_insn_trace in module ida_dbg: + +disable_insn_trace(*args) -> 'bool' + disable_insn_trace() -> bool + +Help on function disable_step_trace in module ida_dbg: + +disable_step_trace(*args) -> 'bool' + disable_step_trace() -> bool + +Help on function edit_manual_regions in module ida_dbg: + +edit_manual_regions(*args) -> 'void' + edit_manual_regions() + +Help on function enable_bblk_trace in module ida_dbg: + +enable_bblk_trace(*args) -> 'bool' + enable_bblk_trace(enable=True) -> bool + +Help on function enable_bpt in module ida_dbg: + +enable_bpt(*args) -> 'bool' + enable_bpt(ea, enable=True) -> bool + enable_bpt(bptloc, enable=True) -> bool + +Help on function enable_func_trace in module ida_dbg: + +enable_func_trace(*args) -> 'bool' + enable_func_trace(enable=True) -> bool + +Help on function enable_insn_trace in module ida_dbg: + +enable_insn_trace(*args) -> 'bool' + enable_insn_trace(enable=True) -> bool + +Help on function enable_manual_regions in module ida_dbg: + +enable_manual_regions(*args) -> 'void' + enable_manual_regions(enable) + +Help on function enable_step_trace in module ida_dbg: + +enable_step_trace(*args) -> 'bool' + enable_step_trace(enable=True) -> bool + +Help on class eval_ctx_t in module ida_dbg: + +class eval_ctx_t(builtins.object) + | Proxy of C++ eval_ctx_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea) -> eval_ctx_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_eval_ctx_t(...) + | delete_eval_ctx_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | eval_ctx_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + +Help on function exist_bpt in module ida_dbg: + +exist_bpt(*args) -> 'bool' + exist_bpt(ea) -> bool + + + Does a breakpoint exist at the given location? + + + @param ea (C++: ea_t) + +Help on function exit_process in module ida_dbg: + +exit_process(*args) -> 'bool' + exit_process() -> bool + + + Terminate the debugging of the current process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_exit' } + +Help on function find_bpt in module ida_dbg: + +find_bpt(*args) -> 'bool' + find_bpt(bptloc, bpt) -> bool + + + Find a breakpoint by location. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param bptloc: Breakpoint location (C++: const bpt_location_t &) + @param bpt: bpt is filled if the breakpoint was found (C++: bpt_t *) + +Help on function get_bblk_trace_options in module ida_dbg: + +get_bblk_trace_options(*args) -> 'int' + get_bblk_trace_options() -> int + + + Get current basic block tracing options. Also see 'BT_LOG_INSTS' + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + +Help on function get_bpt in module ida_dbg: + +get_bpt(*args) -> 'bool' + get_bpt(ea, bpt) -> bool + + + Get the characteristics of a breakpoint. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + @param bpt: if not NULL, is filled with the characteristics. (C++: + bpt_t *) + @return: false if no breakpoint exists + +Help on function get_bpt_group in module ida_dbg: + +get_bpt_group(*args) -> 'qstring *' + get_bpt_group(bptloc) -> str + +Help on function get_bpt_qty in module ida_dbg: + +get_bpt_qty(*args) -> 'int' + get_bpt_qty() -> int + + + Get number of breakpoints. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function get_bpt_tev_ea in module ida_dbg: + +get_bpt_tev_ea(*args) -> 'ea_t' + get_bpt_tev_ea(n) -> ea_t + + + Get the address associated to a read, read/write or execution trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)}Usually, a breakpoint is associated with a read, read/write + or execution trace event. However, the returned address could be any + address in the range of this breakpoint. If the breakpoint was deleted + after the trace event, the address no longer corresponds to a valid + breakpoint. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a read, read/write or execution trace event. + +Help on function get_bptloc_string in module ida_dbg: + +get_bptloc_string(*args) -> 'char const *' + get_bptloc_string(i) -> char const * + + + Helper function for 'bpt_location_t' . + + + @param i (C++: int) + +Help on function get_call_tev_callee in module ida_dbg: + +get_call_tev_callee(*args) -> 'ea_t' + get_call_tev_callee(n) -> ea_t + + + Get the called function from a function call trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function call event. + +Help on function get_current_source_file in module ida_dbg: + +get_current_source_file(*args) -> 'bool' + get_current_source_file(path) -> bool + +Help on function get_current_source_line in module ida_dbg: + +get_current_source_line(*args) -> 'int' + get_current_source_line() -> int + +Help on function get_current_thread in module ida_dbg: + +get_current_thread(*args) -> 'thid_t' + get_current_thread() -> thid_t + + + Get current thread ID. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_dbg_byte in module ida_dbg: + +get_dbg_byte(*args) -> 'bool' + get_dbg_byte(x, ea) -> bool + + + Get one byte of the debugged process memory. + + @param x: pointer to byte value (C++: uint32 *) + @param ea: linear address (C++: ea_t) + @return: true success + +Help on function get_dbg_memory_info in module ida_dbg: + +get_dbg_memory_info(*args) -> 'int' + get_dbg_memory_info(ranges) -> int + +Help on function get_dbg_reg_info in module ida_dbg: + +get_dbg_reg_info(*args) -> 'bool' + get_dbg_reg_info(regname, ri) -> bool + + + Get register information \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param regname (C++: const char *) + @param ri (C++: register_info_t *) + +Help on function get_debug_event in module ida_dbg: + +get_debug_event(*args) -> 'debug_event_t const *' + get_debug_event() -> debug_event_t + + + Get the current debugger event. + +Help on function get_debugger_event_cond in module ida_dbg: + +get_debugger_event_cond(*args) -> 'char const *' + get_debugger_event_cond() -> char const * + +Help on function get_first_module in module ida_dbg: + +get_first_module(*args) -> 'bool' + get_first_module(modinfo) -> bool + +Help on function get_func_trace_options in module ida_dbg: + +get_func_trace_options(*args) -> 'int' + get_func_trace_options() -> int + + + Get current function tracing options. Also see 'FT_LOG_RET' \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_global_var in module ida_dbg: + +get_global_var(*args) -> 'bool' + get_global_var(prov, ea, name, out) -> bool + +Help on function get_grp_bpts in module ida_dbg: + +get_grp_bpts(*args) -> 'ssize_t' + get_grp_bpts(bpts, grp_name) -> ssize_t + +Help on function get_insn_tev_reg_mem in module ida_dbg: + +get_insn_tev_reg_mem(*args) -> 'bool' + get_insn_tev_reg_mem(n, memmap) -> bool + + + Read the memory pointed by register values from an instruction trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param memmap: result (C++: memreg_infos_t *) + @return: false if not an instruction event or no memory is available + +Help on function get_insn_tev_reg_result in module ida_dbg: + +get_insn_tev_reg_result(*args) -> 'bool' + get_insn_tev_reg_result(n, regname, regval) -> bool + + + Read the resulting register value from an instruction trace event. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param regname: name of desired register (C++: const char *) + @param regval: result (C++: regval_t *) + @return: false if not an instruction trace event or register wasn't + modified. + +Help on function get_insn_tev_reg_val in module ida_dbg: + +get_insn_tev_reg_val(*args) -> 'bool' + get_insn_tev_reg_val(n, regname, regval) -> bool + + + Read a register value from an instruction trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)}This + is the value of the register before the execution of the instruction. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param regname: name of desired register (C++: const char *) + @param regval: result (C++: regval_t *) + @return: false if not an instruction event. + +Help on function get_insn_trace_options in module ida_dbg: + +get_insn_trace_options(*args) -> 'int' + get_insn_trace_options() -> int + + + Get current instruction tracing options. Also see 'IT_LOG_SAME_IP' + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + +Help on function get_ip_val in module ida_dbg: + +get_ip_val(*args) -> 'unsigned-ea-like-numeric-type *'↗ + get_ip_val() -> bool + + + Get value of the IP (program counter) register for the current thread. + Requires a suspended debugger. + +Help on function get_local_var in module ida_dbg: + +get_local_var(*args) -> 'bool' + get_local_var(prov, ea, name, out) -> bool + +Help on function get_local_vars in module ida_dbg: + +get_local_vars(*args) -> 'bool' + get_local_vars(prov, ea, out) -> bool + +Help on function get_manual_regions in module ida_dbg: + +get_manual_regions(*args) -> 'PyObject *' + get_manual_regions(ranges) + get_manual_regions() -> PyObject * + + + Returns the manual memory regions + @return: list(start_ea, end_ea, name, sclass, sbase, bitness, perm) + +Help on function get_module_info in module ida_dbg: + +get_module_info(*args) -> 'bool' + get_module_info(ea, modinfo) -> bool + +Help on function get_next_module in module ida_dbg: + +get_next_module(*args) -> 'bool' + get_next_module(modinfo) -> bool + +Help on function get_process_options in module ida_dbg: + +get_process_options(*args) -> 'void' + get_process_options(path, args, sdir, host, _pass, port) + + + Get process options. Any of the arguments may be NULL + + @param path (C++: qstring *) + @param args (C++: qstring *) + @param sdir (C++: qstring *) + @param host (C++: qstring *) + @param port (C++: int *) + +Help on function get_process_state in module ida_dbg: + +get_process_state(*args) -> 'int' + get_process_state() -> int + + + Return the state of the currently debugged process. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @return: one of Debugged process states + +Help on function get_processes in module ida_dbg: + +get_processes(*args) -> 'ssize_t' + get_processes(proclist) -> ssize_t + + + Take a snapshot of running processes and return their description. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param proclist (C++: procinfo_vec_t *) + @return: number of processes or -1 on error + +Help on function get_reg_val in module ida_dbg: + +get_reg_val(*args) -> 'PyObject *' + get_reg_val(regname, regval) -> bool + get_reg_val(regname, ival) -> bool + get_reg_val(regname) -> PyObject * + + + Read a register value from the current thread. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + @param regval (C++: regval_t *) + +Help on function get_reg_vals in module ida_dbg: + +get_reg_vals(*args) -> 'int' + get_reg_vals(tid, clsmask, values) -> int + +Help on function get_ret_tev_return in module ida_dbg: + +get_ret_tev_return(*args) -> 'ea_t' + get_ret_tev_return(n) -> ea_t + + + Get the return address from a function return trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function return event. + +Help on function get_running_notification in module ida_dbg: + +get_running_notification(*args) -> 'dbg_notification_t' + get_running_notification() -> dbg_notification_t + + + Get the notification associated (if any) with the current running + request. \sq{Type, Synchronous function, Notification, none + (synchronous function)} + + @return: dbg_null if no running request + +Help on function get_running_request in module ida_dbg: + +get_running_request(*args) -> 'ui_notification_t' + get_running_request() -> ui_notification_t + + + Get the current running request. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: ui_null if no running request + +Help on function get_sp_val in module ida_dbg: + +get_sp_val(*args) -> 'unsigned-ea-like-numeric-type *'↗ + get_sp_val() -> bool + + + Get value of the SP register for the current thread. Requires a + suspended debugger. + +Help on function get_srcinfo_provider in module ida_dbg: + +get_srcinfo_provider(*args) -> 'srcinfo_provider_t *' + get_srcinfo_provider(name) -> srcinfo_provider_t * + +Help on function get_step_trace_options in module ida_dbg: + +get_step_trace_options(*args) -> 'int' + get_step_trace_options() -> int + + + Get current step tracing options. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: Step trace options + +Help on function get_tev_ea in module ida_dbg: + +get_tev_ea(*args) -> 'ea_t' + get_tev_ea(n) -> ea_t + +Help on function get_tev_event in module ida_dbg: + +get_tev_event(*args) -> 'bool' + get_tev_event(n, d) -> bool + + + Get the corresponding debug event, if any, for the specified tev + object. \sq{Type, Synchronous function, Notification, none + (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param d: result (C++: debug_event_t *) + @return: false if the tev_t object doesn't have any associated debug + event, true otherwise, with the debug event in "d". + +Help on function get_tev_info in module ida_dbg: + +get_tev_info(*args) -> 'bool' + get_tev_info(n, tev_info) -> bool + + + Get main information about a trace event. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param tev_info: result (C++: tev_info_t *) + @return: success + +Help on function get_tev_memory_info in module ida_dbg: + +get_tev_memory_info(*args) -> 'bool' + get_tev_memory_info(n, mi) -> bool + + + Get the memory layout, if any, for the specified tev object. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param mi: result (C++: meminfo_vec_t *) + @return: false if the tev_t object is not of type tev_mem , true + otherwise, with the new memory layout in "mi". + +Help on function get_tev_qty in module ida_dbg: + +get_tev_qty(*args) -> 'int' + get_tev_qty() -> int + + + Get number of trace events available in trace buffer. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_tev_reg_mem in module ida_dbg: + +get_tev_reg_mem(tev, idx) + +Help on function get_tev_reg_mem_ea in module ida_dbg: + +get_tev_reg_mem_ea(tev, idx) + +Help on function get_tev_reg_mem_qty in module ida_dbg: + +get_tev_reg_mem_qty(tev) + +Help on function get_tev_reg_val in module ida_dbg: + +get_tev_reg_val(tev, reg) + +Help on function get_tev_tid in module ida_dbg: + +get_tev_tid(*args) -> 'int' + get_tev_tid(n) -> int + +Help on function get_tev_type in module ida_dbg: + +get_tev_type(*args) -> 'int' + get_tev_type(n) -> int + +Help on function get_thread_qty in module ida_dbg: + +get_thread_qty(*args) -> 'int' + get_thread_qty() -> int + + + Get number of threads. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_trace_base_address in module ida_dbg: + +get_trace_base_address(*args) -> 'ea_t' + get_trace_base_address() -> ea_t + + + Get the base address of the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @return: the base address of the currently loaded trace + +Help on function get_trace_file_desc in module ida_dbg: + +get_trace_file_desc(*args) -> 'qstring *' + get_trace_file_desc(filename) -> str + + + Get the file header of the specified trace file. + + + @param filename (C++: const char *) + +Help on function get_trace_platform in module ida_dbg: + +get_trace_platform(*args) -> 'char const *' + get_trace_platform() -> char const * + + + Get platform name of current trace. + +Help on function getn_bpt in module ida_dbg: + +getn_bpt(*args) -> 'bool' + getn_bpt(n, bpt) -> bool + + + Get the characteristics of a breakpoint. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param n: number of breakpoint, is in range 0.. get_bpt_qty() -1 (C++: + int) + @param bpt: filled with the characteristics. (C++: bpt_t *) + @return: false if no breakpoint exists + +Help on function getn_thread in module ida_dbg: + +getn_thread(*args) -> 'thid_t' + getn_thread(n) -> thid_t + + + Get the ID of a thread. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: + int) + @return: NO_THREAD if the thread doesn't exist. + +Help on function getn_thread_name in module ida_dbg: + +getn_thread_name(*args) -> 'char const *' + getn_thread_name(n) -> char const * + + + Get the NAME of a thread \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 + for the current thread (C++: int) + @return: thread name or NULL if the thread doesn't exist. + +Help on function graph_trace in module ida_dbg: + +graph_trace(*args) -> 'bool' + graph_trace() -> bool + + + Show the trace callgraph. + +Help on function handle_debug_event in module ida_dbg: + +handle_debug_event(*args) -> 'int' + handle_debug_event(ev, rqflags) -> int + +Help on function hide_all_bpts in module ida_dbg: + +hide_all_bpts(*args) -> 'int' + hide_all_bpts() -> int + +Help on function internal_get_sreg_base in module ida_dbg: + +internal_get_sreg_base(*args) -> 'ea_t' + internal_get_sreg_base(tid, sreg_value) -> ea_t + + + Get the sreg base, for the given thread. + + @return: The sreg base, or BADADDR on failure. + +Help on function internal_ioctl in module ida_dbg: + +internal_ioctl(*args) -> 'int' + internal_ioctl(fn, buf, poutbuf, poutsize) -> int + +Help on function invalidate_dbg_state in module ida_dbg: + +invalidate_dbg_state(*args) -> 'int' + invalidate_dbg_state(dbginv) -> int + + + Invalidate cached debugger information. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param dbginv: Debugged process invalidation options (C++: int) + @return: current debugger state (one of Debugged process states ) + +Help on function invalidate_dbgmem_config in module ida_dbg: + +invalidate_dbgmem_config(*args) -> 'void' + invalidate_dbgmem_config() + + + Invalidate the debugged process memory configuration. Call this + function if the debugged process might have changed its memory layout + (allocated more memory, for example) + +Help on function invalidate_dbgmem_contents in module ida_dbg: + +invalidate_dbgmem_contents(*args) -> 'void' + invalidate_dbgmem_contents(ea, size) + + + Invalidate the debugged process memory contents. Call this function + each time the process has been stopped or the process memory is + modified. If ea == 'BADADDR' , then the whole memory contents will be + invalidated + + @param ea (C++: ea_t) + @param size (C++: asize_t) + +Help on function is_bblk_trace_enabled in module ida_dbg: + +is_bblk_trace_enabled(*args) -> 'bool' + is_bblk_trace_enabled() -> bool + +Help on function is_debugger_busy in module ida_dbg: + +is_debugger_busy(*args) -> 'bool' + is_debugger_busy() -> bool + + + Is the debugger busy?. Some debuggers do not accept any commands while + the debugged application is running. For such a debugger, it is unsafe + to do anything with the database (even simple queries like get_byte + may lead to undesired consequences). Returns: true if the debugged + application is running under such a debugger + +Help on function is_debugger_memory in module ida_dbg: + +is_debugger_memory(*args) -> 'bool' + is_debugger_memory(ea) -> bool + + + Is the address mapped to debugger memory? + + + @param ea (C++: ea_t) + +Help on function is_debugger_on in module ida_dbg: + +is_debugger_on(*args) -> 'bool' + is_debugger_on() -> bool + + + Is the debugger currently running? + +Help on function is_func_trace_enabled in module ida_dbg: + +is_func_trace_enabled(*args) -> 'bool' + is_func_trace_enabled() -> bool + + + Get current state of functions tracing. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + +Help on function is_insn_trace_enabled in module ida_dbg: + +is_insn_trace_enabled(*args) -> 'bool' + is_insn_trace_enabled() -> bool + + + Get current state of instructions tracing. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + +Help on function is_reg_custom in module ida_dbg: + +is_reg_custom(*args) -> 'bool' + is_reg_custom(regname) -> bool + + + Does a register contain a value of a custom data type? \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_reg_float in module ida_dbg: + +is_reg_float(*args) -> 'bool' + is_reg_float(regname) -> bool + + + Does a register contain a floating point value? \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_reg_integer in module ida_dbg: + +is_reg_integer(*args) -> 'bool' + is_reg_integer(regname) -> bool + + + Does a register contain an integer value? \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_request_running in module ida_dbg: + +is_request_running(*args) -> 'bool' + is_request_running() -> bool + + + Is a request currently running? + +Help on function is_step_trace_enabled in module ida_dbg: + +is_step_trace_enabled(*args) -> 'bool' + is_step_trace_enabled() -> bool + + + Get current state of step tracing. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function is_valid_trace_file in module ida_dbg: + +is_valid_trace_file(*args) -> 'bool' + is_valid_trace_file(filename) -> bool + + + Is the specified file a valid trace file for the current database? + + + @param filename (C++: const char *) + +Help on function list_bptgrps in module ida_dbg: + +list_bptgrps(*args) -> 'PyObject *' + list_bptgrps(bptgrps) -> size_t + list_bptgrps() -> PyObject * + +Help on function load_debugger in module ida_dbg: + +load_debugger(*args) -> 'bool' + load_debugger(dbgname, use_remote) -> bool + +Help on function load_trace_file in module ida_dbg: + +load_trace_file(*args) -> 'qstring *' + load_trace_file(filename) -> str + + + Load a recorded trace file in the trace window. If the call succeeds + and 'buf' is not null, the description of the trace stored in the + binary trace file will be returned in 'buf' + + @param filename (C++: const char *) + +Help on class memreg_info_t in module ida_dbg: + +class memreg_info_t(builtins.object) + | Proxy of C++ memreg_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> memreg_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_memreg_info_t(...) + | delete_memreg_info_t(self) + | + | get_bytes(self, *args) -> 'PyObject *' + | get_bytes(self) -> PyObject * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bytes + | get_bytes(self) -> PyObject * + | + | ea + | memreg_info_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + +Help on class memreg_infos_t in module ida_dbg: + +class memreg_infos_t(builtins.object) + | Proxy of C++ qvector< memreg_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'memreg_info_t const &' + | __getitem__(self, i) -> memreg_info_t + | + | __init__(self, *args) + | __init__(self) -> memreg_infos_t + | __init__(self, x) -> memreg_infos_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_memreg_infos_t(...) + | delete_memreg_infos_t(self) + | + | at(self, *args) -> 'memreg_info_t const &' + | at(self, _idx) -> memreg_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< memreg_info_t >::const_iterator' + | begin(self) -> memreg_info_t + | begin(self) -> memreg_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< memreg_info_t >::const_iterator' + | end(self) -> memreg_info_t + | end(self) -> memreg_info_t + | + | erase(self, *args) -> 'qvector< memreg_info_t >::iterator' + | erase(self, it) -> memreg_info_t + | erase(self, first, last) -> memreg_info_t + | + | extract(self, *args) -> 'memreg_info_t *' + | extract(self) -> memreg_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=memreg_info_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< memreg_info_t >::iterator' + | insert(self, it, x) -> memreg_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'memreg_info_t &' + | push_back(self, x) + | push_back(self) -> memreg_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function move_bpt_to_grp in module ida_dbg: + +move_bpt_to_grp(*args) -> 'void' + move_bpt_to_grp(bpt, grp_name) + + + Sets new group for the breakpoint + +Help on function put_dbg_byte in module ida_dbg: + +put_dbg_byte(*args) -> 'bool' + put_dbg_byte(ea, x) -> bool + + + Change one byte of the debugged process memory. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint32) + @return: true if the process memory has been modified + +Help on function read_dbg_memory in module ida_dbg: + +read_dbg_memory(*args) -> 'ssize_t' + read_dbg_memory(ea, buffer, size) -> ssize_t + +Help on function refresh_debugger_memory in module ida_dbg: + +refresh_debugger_memory(*args) -> 'PyObject *' + refresh_debugger_memory() -> PyObject * + + + Refreshes the debugger memory + @return: Nothing + +Help on function rename_bptgrp in module ida_dbg: + +rename_bptgrp(*args) -> 'bool' + rename_bptgrp(old_name, new_name) -> bool + +Help on function request_add_bpt in module ida_dbg: + +request_add_bpt(*args) -> 'bool' + request_add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + request_add_bpt(bpt) -> bool + + + Post an 'add_bpt(ea_t, asize_t, bpttype_t)' request. + + + @param ea (C++: ea_t) + @param size (C++: asize_t) + @param type (C++: bpttype_t) + +Help on function request_attach_process in module ida_dbg: + +request_attach_process(*args) -> 'int' + request_attach_process(pid, event_id) -> int + + + Post an 'attach_process()' request. + + + @param pid (C++: pid_t) + @param event_id (C++: int) + +Help on function request_clear_trace in module ida_dbg: + +request_clear_trace(*args) -> 'void' + request_clear_trace() + + + Post a 'clear_trace()' request. + +Help on function request_continue_process in module ida_dbg: + +request_continue_process(*args) -> 'bool' + request_continue_process() -> bool + + + Post a 'continue_process()' request.This requires an explicit call to + 'run_requests()' + +Help on function request_del_bpt in module ida_dbg: + +request_del_bpt(*args) -> 'bool' + request_del_bpt(ea) -> bool + request_del_bpt(bptloc) -> bool + + + Post a 'del_bpt(ea_t)' request. + + + @param ea (C++: ea_t) + +Help on function request_detach_process in module ida_dbg: + +request_detach_process(*args) -> 'bool' + request_detach_process() -> bool + + + Post a 'detach_process()' request. + +Help on function request_disable_bblk_trace in module ida_dbg: + +request_disable_bblk_trace(*args) -> 'bool' + request_disable_bblk_trace() -> bool + +Help on function request_disable_bpt in module ida_dbg: + +request_disable_bpt(*args) -> 'bool' + request_disable_bpt(ea) -> bool + request_disable_bpt(bptloc) -> bool + +Help on function request_disable_func_trace in module ida_dbg: + +request_disable_func_trace(*args) -> 'bool' + request_disable_func_trace() -> bool + +Help on function request_disable_insn_trace in module ida_dbg: + +request_disable_insn_trace(*args) -> 'bool' + request_disable_insn_trace() -> bool + +Help on function request_disable_step_trace in module ida_dbg: + +request_disable_step_trace(*args) -> 'bool' + request_disable_step_trace() -> bool + +Help on function request_enable_bblk_trace in module ida_dbg: + +request_enable_bblk_trace(*args) -> 'bool' + request_enable_bblk_trace(enable=True) -> bool + +Help on function request_enable_bpt in module ida_dbg: + +request_enable_bpt(*args) -> 'bool' + request_enable_bpt(ea, enable=True) -> bool + request_enable_bpt(bptloc, enable=True) -> bool + +Help on function request_enable_func_trace in module ida_dbg: + +request_enable_func_trace(*args) -> 'bool' + request_enable_func_trace(enable=True) -> bool + +Help on function request_enable_insn_trace in module ida_dbg: + +request_enable_insn_trace(*args) -> 'bool' + request_enable_insn_trace(enable=True) -> bool + +Help on function request_enable_step_trace in module ida_dbg: + +request_enable_step_trace(*args) -> 'bool' + request_enable_step_trace(enable=True) -> bool + +Help on function request_exit_process in module ida_dbg: + +request_exit_process(*args) -> 'bool' + request_exit_process() -> bool + + + Post an 'exit_process()' request. + +Help on function request_resume_thread in module ida_dbg: + +request_resume_thread(*args) -> 'int' + request_resume_thread(tid) -> int + + + Post a 'resume_thread()' request. + + + @param tid (C++: thid_t) + +Help on function request_run_to in module ida_dbg: + +request_run_to(*args) -> 'bool' + request_run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Post a 'run_to()' request. + + + @param ea (C++: ea_t) + @param pid (C++: pid_t) + @param tid (C++: thid_t) + +Help on function request_select_thread in module ida_dbg: + +request_select_thread(*args) -> 'bool' + request_select_thread(tid) -> bool + + + Post a 'select_thread()' request. + + + @param tid (C++: thid_t) + +Help on function request_set_bblk_trace_options in module ida_dbg: + +request_set_bblk_trace_options(*args) -> 'void' + request_set_bblk_trace_options(options) + + + Post a 'set_bblk_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_func_trace_options in module ida_dbg: + +request_set_func_trace_options(*args) -> 'void' + request_set_func_trace_options(options) + + + Post a 'set_func_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_insn_trace_options in module ida_dbg: + +request_set_insn_trace_options(*args) -> 'void' + request_set_insn_trace_options(options) + + + Post a 'set_insn_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_reg_val in module ida_dbg: + +request_set_reg_val(*args) -> 'PyObject *' + request_set_reg_val(regname, o) -> PyObject * + + + Post a 'set_reg_val()' request. + + + @param regname (C++: const char *) + +Help on function request_set_resume_mode in module ida_dbg: + +request_set_resume_mode(*args) -> 'bool' + request_set_resume_mode(tid, mode) -> bool + + + Post a 'set_resume_mode()' request. + + + @param tid (C++: thid_t) + @param mode (C++: resume_mode_t) + +Help on function request_set_step_trace_options in module ida_dbg: + +request_set_step_trace_options(*args) -> 'void' + request_set_step_trace_options(options) + + + Post a 'set_step_trace_options()' request. + + + @param options (C++: int) + +Help on function request_start_process in module ida_dbg: + +request_start_process(*args) -> 'int' + request_start_process(path=None, args=None, sdir=None) -> int + + + Post a 'start_process()' request. + + + @param path (C++: const char *) + @param args (C++: const char *) + @param sdir (C++: const char *) + +Help on function request_step_into in module ida_dbg: + +request_step_into(*args) -> 'bool' + request_step_into() -> bool + + + Post a 'step_into()' request. + +Help on function request_step_over in module ida_dbg: + +request_step_over(*args) -> 'bool' + request_step_over() -> bool + + + Post a 'step_over()' request. + +Help on function request_step_until_ret in module ida_dbg: + +request_step_until_ret(*args) -> 'bool' + request_step_until_ret() -> bool + + + Post a 'step_until_ret()' request. + +Help on function request_suspend_process in module ida_dbg: + +request_suspend_process(*args) -> 'bool' + request_suspend_process() -> bool + + + Post a 'suspend_process()' request. + +Help on function request_suspend_thread in module ida_dbg: + +request_suspend_thread(*args) -> 'int' + request_suspend_thread(tid) -> int + + + Post a 'suspend_thread()' request. + + + @param tid (C++: thid_t) + +Help on function resume_thread in module ida_dbg: + +resume_thread(*args) -> 'int' + resume_thread(tid) -> int + + + Resume thread. \sq{Type, Synchronous function - available as request, + Notification, none (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function retrieve_exceptions in module ida_dbg: + +retrieve_exceptions(*args) -> 'excvec_t *' + retrieve_exceptions() -> excvec_t + + + Retrieve the exception information. You may freely modify the returned + vector and add/edit/delete exceptions You must call + 'store_exceptions()' after any modifications Note: exceptions with + code zero, multiple exception codes or names are prohibited + +Help on function run_requests in module ida_dbg: + +run_requests(*args) -> 'bool' + run_requests() -> bool + + + Execute requests until all requests are processed or an asynchronous + function is called. \sq{Type, Synchronous function, Notification, none + (synchronous function)}If called from a notification handler, the + execution of requests will be postponed to the end of the execution of + all notification handlers. + + @return: false if not all requests could be processed (indicates an + asynchronous function was started) + +Help on function run_to in module ida_dbg: + +run_to(*args) -> 'bool' + run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Execute the process until the given address is reached. If no process + is active, a new process is started. Technically, the debugger sets up + a temporary breakpoint at the given address, and continues (or starts) + the execution of the whole process. So, all threads continue their + execution! \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_run_to' } + + @param ea: target address (C++: ea_t) + @param pid: not used yet. please do not specify this parameter. (C++: + pid_t) + @param tid: not used yet. please do not specify this parameter. (C++: + thid_t) + +Help on function save_trace_file in module ida_dbg: + +save_trace_file(*args) -> 'bool' + save_trace_file(filename, description) -> bool + + + Save the current trace in the specified file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function select_thread in module ida_dbg: + +select_thread(*args) -> 'bool' + select_thread(tid) -> bool + + + Select the given thread as the current debugged thread. All thread + related execution functions will work on this thread. The process must + be suspended to select a new thread. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param tid: ID of the thread to select (C++: thid_t) + @return: false if the thread doesn't exist. + +Help on function send_dbg_command in module ida_dbg: + +send_dbg_command(command) + Send a direct command to the debugger backend, and + retrieve the result as a string. + + Note: any double-quotes in 'command' must be backslash-escaped. + Note: this only works with some debugger backends: Bochs, WinDbg, GDB. + + Returns: (True, ) on success, or (False, ) on failure + +Help on function set_bblk_trace_options in module ida_dbg: + +set_bblk_trace_options(*args) -> 'void' + set_bblk_trace_options(options) + + + Modify basic block tracing options (see 'BT_LOG_INSTS' ) + + + @param options (C++: int) + +Help on function set_bpt_group in module ida_dbg: + +set_bpt_group(*args) -> 'void' + set_bpt_group(bpt, grp_name) + +Help on function set_bptloc_group in module ida_dbg: + +set_bptloc_group(*args) -> 'bool' + set_bptloc_group(bptloc, grp_name) -> bool + +Help on function set_bptloc_string in module ida_dbg: + +set_bptloc_string(*args) -> 'int' + set_bptloc_string(s) -> int + + + Helper function for 'bpt_location_t' . + + + @param s (C++: const char *) + +Help on function set_debugger_event_cond in module ida_dbg: + +set_debugger_event_cond(*args) -> 'void' + set_debugger_event_cond(nonnul_cond) + +Help on function set_debugger_options in module ida_dbg: + +set_debugger_options(*args) -> 'uint' + set_debugger_options(options) -> uint + + + Set debugger options. Replaces debugger options with the specification + combination 'Debugger options' + + @param options (C++: uint) + @return: the old debugger options + +Help on function set_func_trace_options in module ida_dbg: + +set_func_trace_options(*args) -> 'void' + set_func_trace_options(options) + + + Modify function tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_highlight_trace_options in module ida_dbg: + +set_highlight_trace_options(*args) -> 'void' + set_highlight_trace_options(hilight, color, diff) + + + Set highlight trace parameters. + + + @param hilight (C++: bool) + @param color (C++: bgcolor_t) + @param diff (C++: bgcolor_t) + +Help on function set_insn_trace_options in module ida_dbg: + +set_insn_trace_options(*args) -> 'void' + set_insn_trace_options(options) + + + Modify instruction tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_manual_regions in module ida_dbg: + +set_manual_regions(*args) -> 'void' + set_manual_regions(ranges) + +Help on function set_process_options in module ida_dbg: + +set_process_options(*args) -> 'void' + set_process_options(path, args, sdir, host, _pass, port) + + + Set process options. Any of the arguments may be NULL, which means 'do + not modify' + + @param path (C++: const char *) + @param args (C++: const char *) + @param sdir (C++: const char *) + @param host (C++: const char *) + @param port (C++: int) + +Help on function set_process_state in module ida_dbg: + +set_process_state(*args) -> 'int' + set_process_state(newstate, p_thid, dbginv) -> int + + + Set new state for the debugged process. Notifies the IDA kernel about + the change of the debugged process state. For example, a debugger + module could call this function when it knows that the process is + suspended for a short period of time. Some IDA API calls can be made + only when the process is suspended. The process state is usually + restored before returning control to the caller. You must know that it + is ok to change the process state, doing it at arbitrary moments may + crash the application or IDA. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @param newstate: new process state (one of Debugged process states ) + if DSTATE_NOTASK is passed then the state is not + changed (C++: int) + @param p_thid: ptr to new thread id. may be NULL or pointer to + NO_THREAD . the pointed variable will contain the old + thread id upon return (C++: thid_t *) + @param dbginv: Debugged process invalidation options (C++: int) + @return: old debugger state (one of Debugged process states ) + +Help on function set_reg_val in module ida_dbg: + +set_reg_val(*args) -> 'PyObject *' + set_reg_val(regname, o) -> PyObject + set_reg_val(tid, regidx, o) -> PyObject * + + + Write a register value to the current thread. \sq{Type, Synchronous + function - available as Request, Notification, none (synchronous + function)} + + @param regname (C++: const char *) + +Help on function set_remote_debugger in module ida_dbg: + +set_remote_debugger(*args) -> 'void' + set_remote_debugger(host, _pass, port=-1) + + + Set remote debugging options. Should be used before starting the + debugger. + + @param host: If empty, IDA will use local debugger. If NULL, the host + will not be set. (C++: const char *) + @param port: If -1, the default port number will be used (C++: int) + +Help on function set_resume_mode in module ida_dbg: + +set_resume_mode(*args) -> 'bool' + set_resume_mode(tid, mode) -> bool + + + How to resume the application. Set resume mode but do not resume + process. + + @param tid (C++: thid_t) + @param mode (C++: resume_mode_t) + +Help on function set_step_trace_options in module ida_dbg: + +set_step_trace_options(*args) -> 'void' + set_step_trace_options(options) + + + Modify step tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_trace_base_address in module ida_dbg: + +set_trace_base_address(*args) -> 'void' + set_trace_base_address(ea) + + + Set the base address of the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param ea (C++: ea_t) + +Help on function set_trace_file_desc in module ida_dbg: + +set_trace_file_desc(*args) -> 'bool' + set_trace_file_desc(filename, description) -> bool + + + Change the description of the specified trace file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function set_trace_platform in module ida_dbg: + +set_trace_platform(*args) -> 'void' + set_trace_platform(platform) + + + Set platform name of current trace. + + + @param platform (C++: const char *) + +Help on function set_trace_size in module ida_dbg: + +set_trace_size(*args) -> 'bool' + set_trace_size(size) -> bool + + + Specify the new size of the circular buffer. \sq{Type, Synchronous + function, Notification, none (synchronous function)}If you specify 0, + all available memory can be quickly used !!! + + @param size: if 0, buffer isn't circular and events are never removed. + If the new size is smaller than the existing number of + trace events, a corresponding number of trace events are + removed. (C++: int) + +Help on function srcdbg_request_step_into in module ida_dbg: + +srcdbg_request_step_into(*args) -> 'bool' + srcdbg_request_step_into() -> bool + +Help on function srcdbg_request_step_over in module ida_dbg: + +srcdbg_request_step_over(*args) -> 'bool' + srcdbg_request_step_over() -> bool + +Help on function srcdbg_request_step_until_ret in module ida_dbg: + +srcdbg_request_step_until_ret(*args) -> 'bool' + srcdbg_request_step_until_ret() -> bool + +Help on function srcdbg_step_into in module ida_dbg: + +srcdbg_step_into(*args) -> 'bool' + srcdbg_step_into() -> bool + +Help on function srcdbg_step_over in module ida_dbg: + +srcdbg_step_over(*args) -> 'bool' + srcdbg_step_over() -> bool + +Help on function srcdbg_step_until_ret in module ida_dbg: + +srcdbg_step_until_ret(*args) -> 'bool' + srcdbg_step_until_ret() -> bool + +Help on function start_process in module ida_dbg: + +start_process(*args) -> 'int' + start_process(path=None, args=None, sdir=None) -> int + + + Start a process in the debugger. \sq{Type, Asynchronous function - + available as Request, Notification, 'dbg_process_start' }You can also + use the 'run_to()' function to easily start the execution of a process + until a given address is reached.For all parameters, a NULL value + indicates the debugger will take the value from the defined Process + Options. + + @param path: path to the executable to start (C++: const char *) + @param args: arguments to pass to process (C++: const char *) + @param sdir: starting directory for the process (C++: const char *) + +Help on function step_into in module ida_dbg: + +step_into(*args) -> 'bool' + step_into() -> bool + + + Execute one instruction in the current thread. Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_into' } + +Help on function step_over in module ida_dbg: + +step_over(*args) -> 'bool' + step_over() -> bool + + + Execute one instruction in the current thread, but without entering + into functions. Others threads keep suspended. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_step_over' } + +Help on function step_until_ret in module ida_dbg: + +step_until_ret(*args) -> 'bool' + step_until_ret() -> bool + + + Execute instructions in the current thread until a function return + instruction is executed (aka "step out"). Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_until_ret' } + +Help on function store_exceptions in module ida_dbg: + +store_exceptions(*args) -> 'bool' + store_exceptions() -> bool + + + Update the exception information stored in the debugger module by + invoking its dbg->set_exception_info callback + +Help on function suspend_process in module ida_dbg: + +suspend_process(*args) -> 'bool' + suspend_process() -> bool + + + Suspend the process in the debugger. \sq{ Type,Synchronous function + (if in a notification handler)Asynchronous function (everywhere + else)available as Request, Notification,none (if in a notification + handler) 'dbg_suspend_process' (everywhere else) }The + 'suspend_process()' function can be called from a notification handler + to force the stopping of the process. In this case, no notification + will be generated. When you suspend a process, the running command is + always aborted. + +Help on function suspend_thread in module ida_dbg: + +suspend_thread(*args) -> 'int' + suspend_thread(tid) -> int + + + Suspend thread. Suspending a thread may deadlock the whole application + if the suspended was owning some synchronization objects. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on class tev_info_reg_t in module ida_dbg: + +class tev_info_reg_t(builtins.object) + | Proxy of C++ tev_info_reg_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tev_info_reg_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_tev_info_reg_t(...) + | delete_tev_info_reg_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | info + | tev_info_reg_t_info_get(self) -> tev_info_t + | + | registers + | tev_info_reg_t_registers_get(self) -> tev_reg_values_t + | + | thisown + | The membership flag + +Help on class tev_info_t in module ida_dbg: + +class tev_info_t(builtins.object) + | Proxy of C++ tev_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tev_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_tev_info_t(...) + | delete_tev_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | tev_info_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | tid + | tev_info_t_tid_get(self) -> thid_t + | + | type + | tev_info_t_type_get(self) -> tev_type_t + +Help on class tev_reg_value_t in module ida_dbg: + +class tev_reg_value_t(builtins.object) + | Proxy of C++ tev_reg_value_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _reg_idx=-1, _value=uint64(-1)) -> tev_reg_value_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_tev_reg_value_t(...) + | delete_tev_reg_value_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | reg_idx + | tev_reg_value_t_reg_idx_get(self) -> int + | + | thisown + | The membership flag + | + | value + | tev_reg_value_t_value_get(self) -> regval_t + +Help on class tev_reg_values_t in module ida_dbg: + +class tev_reg_values_t(builtins.object) + | Proxy of C++ qvector< tev_reg_value_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'tev_reg_value_t const &' + | __getitem__(self, i) -> tev_reg_value_t + | + | __init__(self, *args) + | __init__(self) -> tev_reg_values_t + | __init__(self, x) -> tev_reg_values_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_tev_reg_values_t(...) + | delete_tev_reg_values_t(self) + | + | at(self, *args) -> 'tev_reg_value_t const &' + | at(self, _idx) -> tev_reg_value_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< tev_reg_value_t >::const_iterator' + | begin(self) -> tev_reg_value_t + | begin(self) -> tev_reg_value_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< tev_reg_value_t >::const_iterator' + | end(self) -> tev_reg_value_t + | end(self) -> tev_reg_value_t + | + | erase(self, *args) -> 'qvector< tev_reg_value_t >::iterator' + | erase(self, it) -> tev_reg_value_t + | erase(self, first, last) -> tev_reg_value_t + | + | extract(self, *args) -> 'tev_reg_value_t *' + | extract(self) -> tev_reg_value_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=tev_reg_value_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< tev_reg_value_t >::iterator' + | insert(self, it, x) -> tev_reg_value_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'tev_reg_value_t &' + | push_back(self, x) + | push_back(self) -> tev_reg_value_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class tevinforeg_vec_t in module ida_dbg: + +class tevinforeg_vec_t(builtins.object) + | Proxy of C++ qvector< tev_info_reg_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'tev_info_reg_t const &' + | __getitem__(self, i) -> tev_info_reg_t + | + | __init__(self, *args) + | __init__(self) -> tevinforeg_vec_t + | __init__(self, x) -> tevinforeg_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_tevinforeg_vec_t(...) + | delete_tevinforeg_vec_t(self) + | + | at(self, *args) -> 'tev_info_reg_t const &' + | at(self, _idx) -> tev_info_reg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< tev_info_reg_t >::const_iterator' + | begin(self) -> tev_info_reg_t + | begin(self) -> tev_info_reg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< tev_info_reg_t >::const_iterator' + | end(self) -> tev_info_reg_t + | end(self) -> tev_info_reg_t + | + | erase(self, *args) -> 'qvector< tev_info_reg_t >::iterator' + | erase(self, it) -> tev_info_reg_t + | erase(self, first, last) -> tev_info_reg_t + | + | extract(self, *args) -> 'tev_info_reg_t *' + | extract(self) -> tev_info_reg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=tev_info_reg_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< tev_info_reg_t >::iterator' + | insert(self, it, x) -> tev_info_reg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'tev_info_reg_t &' + | push_back(self, x) + | push_back(self) -> tev_info_reg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function update_bpt in module ida_dbg: + +update_bpt(*args) -> 'bool' + update_bpt(bpt) -> bool + + + Update modifiable characteristics of an existing breakpoint. To update + the breakpoint location, use 'change_bptlocs()' \sq{Type, Synchronous + function, Notification, none (synchronous function)}Only the following + fields can be modified: 'bpt_t::cndbody' 'bpt_t::pass_count' + 'bpt_t::flags' 'bpt_t::size' 'bpt_t::type' Changing some properties + will require removing and then re-adding the breakpoint to the process + memory (or the debugger backend), which can lead to race conditions + (i.e., breakpoint(s) can be missed) in case the process is not + suspended. Here are a list of scenarios that will require the + breakpoint to be removed & then re-added: 'bpt_t::size' is modified + 'bpt_t::type' is modified 'bpt_t::flags' 's BPT_ENABLED is modified + 'bpt_t::flags' 's BPT_LOWCND is changed 'bpt_t::flags' 's BPT_LOWCND + remains set, but cndbody changed + + @param bpt (C++: const bpt_t *) + +Help on function wait_for_next_event in module ida_dbg: + +wait_for_next_event(*args) -> 'dbg_event_code_t' + wait_for_next_event(wfne, timeout) -> dbg_event_code_t + + + Wait for the next event.This function (optionally) resumes the process + execution, and waits for a debugger event until a possible timeout + occurs. + + @param wfne: combination of Wait for debugger event flags constants + (C++: int) + @param timeout: number of seconds to wait, -1-infinity (C++: int) + @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= + 0) + +Help on function write_dbg_memory in module ida_dbg: + +write_dbg_memory(*args) -> 'ssize_t' + write_dbg_memory(ea, py_buf, size=size_t(-1)) -> ssize_t + +=== ida_dbg EPYDOC INJECTIONS === +ida_dbg.BKPT_ACTIVE +""" +active? +""" + +ida_dbg.BKPT_BADBPT +""" +failed to write the bpt to the process memory (at least one location) +""" + +ida_dbg.BKPT_CNDREADY +""" +condition has been compiled +""" + +ida_dbg.BKPT_FAKEPEND +""" +bpt of the same type is active at the same address(es) + +fake pending bpt: it is inactive but another +""" + +ida_dbg.BKPT_LISTBPT +""" +include in bpt list (user-defined bpt) +""" + +ida_dbg.BKPT_PAGE +""" +only after writing the bpt to the process. + +written to the process as a page bpt. is available +""" + +ida_dbg.BKPT_PARTIAL +""" +partially active? (some locations were not written yet) +""" + +ida_dbg.BKPT_TRACE +""" +trace bpt; should not be deleted when the process gets suspended +""" + +ida_dbg.BPTCK_ACT +""" +breakpoint is active (written to the process) +""" + +ida_dbg.BPTCK_NO +""" +breakpoint is disabled +""" + +ida_dbg.BPTCK_NONE +""" +breakpoint does not exist +""" + +ida_dbg.BPTCK_YES +""" +breakpoint is enabled +""" + +ida_dbg.BPTEV_ADDED +""" +Breakpoint has been added. +""" + +ida_dbg.BPTEV_CHANGED +""" +Breakpoint has been modified. +""" + +ida_dbg.BPTEV_REMOVED +""" +Breakpoint has been removed. +""" + +ida_dbg.BPT_BRK +""" +suspend execution upon hit +""" + +ida_dbg.BPT_ELANG_SHIFT +""" +index of the extlang (scripting language) of the condition +""" + +ida_dbg.BPT_ENABLED +""" +enabled? +""" + +ida_dbg.BPT_LOWCND +""" +condition is calculated at low level (on the server side) +""" + +ida_dbg.BPT_TRACE +""" +add trace information upon hit +""" + +ida_dbg.BPT_TRACEON +""" +enable tracing when the breakpoint is reached +""" + +ida_dbg.BPT_TRACE_BBLK +""" +basic block tracing +""" + +ida_dbg.BPT_TRACE_FUNC +""" +function tracing +""" + +ida_dbg.BPT_TRACE_INSN +""" +instruction tracing +""" + +ida_dbg.BPT_TRACE_TYPES +""" +trace insns, functions, and basic blocks. if any of 'BPT_TRACE_TYPES' +bits are set but 'BPT_TRACEON' is clear, then turn off tracing for the +specified trace types +""" + +ida_dbg.BPT_UPDMEM +""" +refresh the memory layout and contents before evaluating bpt condition +""" + +ida_dbg.BT_LOG_INSTS +""" +log all instructions in the current basic block +""" + +ida_dbg.DBGINV_ALL +""" +invalidate everything +""" + +ida_dbg.DBGINV_MEMCFG +""" +invalidate cached process segmentation +""" + +ida_dbg.DBGINV_MEMORY +""" +invalidate cached memory contents +""" + +ida_dbg.DBGINV_NONE +""" +invalidate nothing +""" + +ida_dbg.DBGINV_REDRAW +""" +refresh the screen +""" + +ida_dbg.DBGINV_REGS +""" +invalidate cached register values +""" + +ida_dbg.DOPT_BPT_MSGS +""" +log breakpoints +""" + +ida_dbg.DOPT_END_BPT +""" +evaluate event condition on process end +""" + +ida_dbg.DOPT_ENTRY_BPT +""" +break on program entry point +""" + +ida_dbg.DOPT_EXCDLG +""" +exception dialogs: +""" + +ida_dbg.DOPT_INFO_BPT +""" +break on debugging information +""" + +ida_dbg.DOPT_INFO_MSGS +""" +log debugging info events +""" + +ida_dbg.DOPT_LIB_BPT +""" +break on library load/unload +""" + +ida_dbg.DOPT_LIB_MSGS +""" +log library loads/unloads +""" + +ida_dbg.DOPT_LOAD_DINFO +""" +automatically load debug files (pdb) +""" + +ida_dbg.DOPT_REAL_MEMORY +""" +do not hide breakpoint instructions +""" + +ida_dbg.DOPT_REDO_STACK +""" +reconstruct the stack +""" + +ida_dbg.DOPT_SEGM_MSGS +""" +log debugger segments modifications +""" + +ida_dbg.DOPT_START_BPT +""" +break on process start +""" + +ida_dbg.DOPT_TEMP_HWBPT +""" +when possible use hardware bpts for temp bpts +""" + +ida_dbg.DOPT_THREAD_BPT +""" +break on thread start/exit +""" + +ida_dbg.DOPT_THREAD_MSGS +""" +log thread starts/exits +""" + +ida_dbg.DSTATE_NOTASK +""" +no process is currently debugged +""" + +ida_dbg.DSTATE_RUN +""" +process is running +""" + +ida_dbg.DSTATE_SUSP +""" +process is suspended and will not continue +""" + +ida_dbg.EXCDLG_ALWAYS +""" +always display +""" + +ida_dbg.EXCDLG_NEVER +""" +never display exception dialogs +""" + +ida_dbg.EXCDLG_UNKNOWN +""" +display for unknown exceptions +""" + +ida_dbg.FT_LOG_RET +""" +function tracing will log returning instructions +""" + +ida_dbg.IT_LOG_SAME_IP +""" +instruction tracing will log instructions whose IP doesn't change +""" + +ida_dbg.ST_ALREADY_LOGGED +""" +step tracing will be disabled when IP is already logged +""" + +ida_dbg.ST_DIFFERENTIAL +""" +tracing: log only new instructions +""" + +ida_dbg.ST_OPTIONS_MASK +""" +mask of available options, to ensure compatibility with newer IDA +versions +""" + +ida_dbg.ST_OVER_DEBUG_SEG +""" +step tracing will be disabled when IP is in a debugger segment +""" + +ida_dbg.ST_OVER_LIB_FUNC +""" +step tracing will be disabled when IP is in a library function +""" + +ida_dbg.ST_SKIP_LOOPS +""" +step tracing will try to skip loops already recorded +""" + +ida_dbg.WFNE_ANY +""" +return the first event (even if it doesn't suspend the process) +""" + +ida_dbg.WFNE_CONT +""" +continue from the suspended state +""" + +ida_dbg.WFNE_NOWAIT +""" +(to be used with 'WFNE_CONT' ) + +do not wait for any event, immediately return 'DEC_TIMEOUT' +""" + +ida_dbg.WFNE_SILENT +""" +1: be slient, 0:display modal boxes if necessary +""" + +ida_dbg.WFNE_SUSP +""" +wait until the process gets suspended +""" + +ida_dbg.WFNE_USEC +""" +(minimum non-zero timeout is 40000us) + +timeout is specified in microseconds +""" +=== ida_dbg EPYDOC INJECTIONS END === +Help on function close_linput in module ida_diskio: + +close_linput(*args) -> 'void' + close_linput(li) + + + Close loader input. + + + @param li (C++: linput_t *) + +Help on function create_bytearray_linput in module ida_diskio: + +create_bytearray_linput(*args) -> 'linput_t *' + create_bytearray_linput(s) -> linput_t * + + + Trivial memory linput. + +Help on function create_generic_linput in module ida_diskio: + +create_generic_linput(*args) -> 'linput_t *' + create_generic_linput(gl) -> linput_t * + + + Create a generic linput + + @param gl: linput description. this object will be destroyed by + close_linput() using "delete gl;" (C++: generic_linput_t + *) + +Help on function create_memory_linput in module ida_diskio: + +create_memory_linput(*args) -> 'linput_t *' + create_memory_linput(start, size) -> linput_t * + + + Create a linput for process memory. This linput will use + read_dbg_memory() to read data. + + @param start: starting address of the input (C++: ea_t) + @param size: size of the memory area to represent as linput if + unknown, may be passed as 0 (C++: asize_t) + +Help on function eclose in module ida_diskio: + +eclose(*args) -> 'void' + eclose(fp) + +Help on function enumerate_files in module ida_diskio: + +enumerate_files(*args) -> 'PyObject *' + enumerate_files(path, fname, callback) -> PyObject * + + + Enumerate files in the specified directory while the callback returns 0. + @param path: directory to enumerate files in + @param fname: mask of file names to enumerate + @param callback: a callable object that takes the filename as + its first argument and it returns 0 to continue + enumeration or non-zero to stop enumeration. + @return: + None in case of script errors + tuple(code, fname) : If the callback returns non-zero + +Help on function fopenA in module ida_diskio: + +fopenA(*args) -> 'FILE *' + fopenA(file) -> FILE * + + + Open a file for append in text mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenM in module ida_diskio: + +fopenM(*args) -> 'FILE *' + fopenM(file) -> FILE * + + + Open a file for read/write in binary mode, deny write. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenRB in module ida_diskio: + +fopenRB(*args) -> 'FILE *' + fopenRB(file) -> FILE * + + + Open a file for read in binary mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenRT in module ida_diskio: + +fopenRT(*args) -> 'FILE *' + fopenRT(file) -> FILE * + + + Open a file for read in text mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenWB in module ida_diskio: + +fopenWB(*args) -> 'FILE *' + fopenWB(file) -> FILE * + + + Open a new file for write in binary mode, deny read/write. If a file + exists, it will be removed. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenWT in module ida_diskio: + +fopenWT(*args) -> 'FILE *' + fopenWT(file) -> FILE * + + + Open a new file for write in text mode, deny write. If a file exists, + it will be removed. + + @param file (C++: const char *) + @return: NULL if failure + +Help on class generic_linput_t in module ida_diskio: + +class generic_linput_t(builtins.object) + | Proxy of C++ generic_linput_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_generic_linput_t(...) + | delete_generic_linput_t(self) + | + | read(self, *args) -> 'ssize_t' + | read(self, off, buffer, nbytes) -> ssize_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blocksize + | generic_linput_t_blocksize_get(self) -> uint32 + | + | filesize + | generic_linput_t_filesize_get(self) -> uint64 + | + | thisown + | The membership flag + +Help on function get_ida_subdirs in module ida_diskio: + +get_ida_subdirs(*args) -> 'qstrvec_t *' + get_ida_subdirs(subdir, flags=0) -> int + + + Get list of directories in which to find a specific IDA resource (see + 'IDA subdirectories' ). The order of the resulting list is as follows: + + - [$IDAUSR/subdir (0..N entries)] + - $IDADIR/subdir + + @param subdir: name of the resource to list (C++: const char *) + @param flags: Subdirectory modification flags bits (C++: int) + @return: number of directories appended to 'dirs' + +Help on function get_linput_type in module ida_diskio: + +get_linput_type(*args) -> 'linput_type_t' + get_linput_type(li) -> linput_type_t + + + Get linput type. + + + @param li (C++: linput_t *) + +Help on function get_special_folder in module ida_diskio: + +get_special_folder(*args) -> 'size_t' + get_special_folder(csidl) -> str + + + Get a folder location by CSIDL (see 'Common CSIDLs' ). Path should be + of at least MAX_PATH size + + @param csidl (C++: int) + +Help on function get_user_idadir in module ida_diskio: + +get_user_idadir(*args) -> 'char const *' + get_user_idadir() -> char const * + + + Get user ida related directory. + + - if $IDAUSR is defined: + - the first element in $IDAUSR + - else + - default user directory ($HOME/.idapro or %APPDATA%Hex-Rays/IDA Pro) + +Help on function getsysfile in module ida_diskio: + +getsysfile(*args) -> 'char const *' + getsysfile(filename, subdir) -> str + + + Search for IDA system file. This function searches for a file in:each + directory specified by IDAUSR%ida directory [+ subdir] and returns the + first match. + + @param filename (C++: const char *) + @param subdir (C++: const char *) + @return: NULL if not found, otherwise a pointer to full file name. + +Help on function idadir in module ida_diskio: + +idadir(*args) -> 'char const *' + idadir(subdir) -> char const * + + + Get IDA directory (if subdir==NULL) or the specified subdirectory (see + 'IDA subdirectories' ) + + @param subdir (C++: const char *) + +Help on function open_linput in module ida_diskio: + +open_linput(*args) -> 'linput_t *' + open_linput(file, remote) -> linput_t * + + + Open loader input. + + + @param file (C++: const char *) + @param remote (C++: bool) + +Help on function qlgetz in module ida_diskio: + +qlgetz(*args) -> 'size_t' + qlgetz(li, fpos) -> str + + + Read a zero-terminated string from the input. If fpos == -1 then no + seek will be performed. + + @param li (C++: linput_t *) + @param fpos (C++: int64) + +=== ida_diskio EPYDOC INJECTIONS === +ida_diskio.IDA_SUBDIR_IDADIR_FIRST +""" +$IDADIR/subdir will be first, not last +""" + +ida_diskio.IDA_SUBDIR_IDP +""" +append the processor name as a subdirectory +""" + +ida_diskio.IDA_SUBDIR_ONLY_EXISTING +""" +only existing directories will be present +""" +=== ida_diskio EPYDOC INJECTIONS END === +Help on function add_entry in module ida_entry: + +add_entry(*args) -> 'bool' + add_entry(ord, ea, name, makecode, flags=0) -> bool + + + Add an entry point to the list of entry points. + + @param ord: ordinal number if ordinal number is equal to 'ea' then + ordinal is not used (C++: uval_t) + @param ea: linear address (C++: ea_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to the regular + comment. If name == NULL, then the old name will be + retained. (C++: const char *) + @param makecode: should the kernel convert bytes at the entry point to + instruction(s) (C++: bool) + @param flags: See AEF_* (C++: int) + @return: success (currently always true) + +Help on function get_entry in module ida_entry: + +get_entry(*args) -> 'ea_t' + get_entry(ord) -> ea_t + + + Get entry point address by its ordinal + + @param ord: ordinal number of entry point (C++: uval_t) + @return: address or BADADDR + +Help on function get_entry_forwarder in module ida_entry: + +get_entry_forwarder(*args) -> 'qstring *' + get_entry_forwarder(ord) -> str + + + Get forwarder name for the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry forwarder name or -1 + +Help on function get_entry_name in module ida_entry: + +get_entry_name(*args) -> 'qstring *' + get_entry_name(ord) -> str + + + Get name of the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry name or -1 + +Help on function get_entry_ordinal in module ida_entry: + +get_entry_ordinal(*args) -> 'uval_t' + get_entry_ordinal(idx) -> uval_t + + + Get ordinal number of an entry point. + + @param idx: internal number of entry point. Should be in the range 0.. + get_entry_qty() -1 (C++: size_t) + @return: ordinal number or 0. + +Help on function get_entry_qty in module ida_entry: + +get_entry_qty(*args) -> 'size_t' + get_entry_qty() -> size_t + + + Get number of entry points. + +Help on function rename_entry in module ida_entry: + +rename_entry(*args) -> 'bool' + rename_entry(ord, name, flags=0) -> bool + + + Rename entry point. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to a repeatable + comment. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +Help on function set_entry_forwarder in module ida_entry: + +set_entry_forwarder(*args) -> 'bool' + set_entry_forwarder(ord, name, flags=0) -> bool + + + Set forwarder name for ordinal. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: forwarder name for entry point. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +=== ida_entry EPYDOC INJECTIONS === +ida_entry.AEF_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly Specifying AEF_IDBENC also implies AEF_NODUMMY +""" + +ida_entry.AEF_NODUMMY +""" +it begins with a dummy suffix. See also AEF_IDBENC + +automatically prepend the name with '_' if +""" + +ida_entry.AEF_UTF8 +""" +the name is given in UTF-8 (default) +""" +=== ida_entry EPYDOC INJECTIONS END === +Help on function add_enum in module ida_enum: + +add_enum(*args) -> 'enum_t' + add_enum(idx, name, flag) -> enum_t + + + Add new enum type.if idx== 'BADADDR' then add as the last idxif + name==NULL then generate a unique name "enum_%d" + + @param idx (C++: size_t) + @param name (C++: const char *) + @param flag (C++: flags_t) + +Help on function add_enum_member in module ida_enum: + +add_enum_member(*args) -> 'int' + add_enum_member(id, name, value, bmask=(bmask_t(-1))) -> int + + + Add member to enum type. + + @param id (C++: enum_t) + @param name (C++: const char *) + @param value (C++: uval_t) + @param bmask (C++: bmask_t) + @return: 0 if ok, otherwise one of Add enum member result codes + +Help on function del_enum in module ida_enum: + +del_enum(*args) -> 'void' + del_enum(id) + + + Delete an enum type. + + + @param id (C++: enum_t) + +Help on function del_enum_member in module ida_enum: + +del_enum_member(*args) -> 'bool' + del_enum_member(id, value, serial, bmask) -> bool + + + Delete member of enum type. + + + @param id (C++: enum_t) + @param value (C++: uval_t) + @param serial (C++: uchar) + @param bmask (C++: bmask_t) + +Help on class enum_member_visitor_t in module ida_enum: + +class enum_member_visitor_t(builtins.object) + | Proxy of C++ enum_member_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> enum_member_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_enum_member_visitor_t(...) + | delete_enum_member_visitor_t(self) + | + | visit_enum_member(self, *args) -> 'int' + | visit_enum_member(self, cid, value) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function for_all_enum_members in module ida_enum: + +for_all_enum_members(*args) -> 'int' + for_all_enum_members(id, cv) -> int + + + Visit all members of a given enum. + + + @param id (C++: enum_t) + @param cv (C++: enum_member_visitor_t &) + +Help on function get_bmask_cmt in module ida_enum: + +get_bmask_cmt(*args) -> 'qstring *' + get_bmask_cmt(id, bmask, repeatable) -> str + +Help on function get_bmask_name in module ida_enum: + +get_bmask_name(*args) -> 'qstring *' + get_bmask_name(id, bmask) -> str + +Help on function get_enum in module ida_enum: + +get_enum(*args) -> 'enum_t' + get_enum(name) -> enum_t + + + Get enum by name. + + + @param name (C++: const char *) + +Help on function get_enum_cmt in module ida_enum: + +get_enum_cmt(*args) -> 'qstring *' + get_enum_cmt(id, repeatable) -> str + + + Get enum comment. + + + @param id (C++: enum_t) + @param repeatable (C++: bool) + +Help on function get_enum_flag in module ida_enum: + +get_enum_flag(*args) -> 'flags_t' + get_enum_flag(id) -> flags_t + + + Get flags determining the representation of the enum. (currently they + define the numeric base: octal, decimal, hex, bin) and signness. + + @param id (C++: enum_t) + +Help on function get_enum_idx in module ida_enum: + +get_enum_idx(*args) -> 'uval_t' + get_enum_idx(id) -> uval_t + + + Get serial number of enum. The serial number determines the place of + the enum in the enum window. + + @param id (C++: enum_t) + +Help on function get_enum_member in module ida_enum: + +get_enum_member(*args) -> 'const_t' + get_enum_member(id, value, serial, mask) -> const_t + + + Find an enum member by enum, value and bitmaskif serial -1, return a + member with any serial + + @param id (C++: enum_t) + @param value (C++: uval_t) + @param serial (C++: int) + @param mask (C++: bmask_t) + +Help on function get_enum_member_bmask in module ida_enum: + +get_enum_member_bmask(*args) -> 'bmask_t' + get_enum_member_bmask(id) -> bmask_t + + + Get bitmask of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_by_name in module ida_enum: + +get_enum_member_by_name(*args) -> 'const_t' + get_enum_member_by_name(name) -> const_t + + + Get a reference to an enum member by its name. + + + @param name (C++: const char *) + +Help on function get_enum_member_cmt in module ida_enum: + +get_enum_member_cmt(*args) -> 'qstring *' + get_enum_member_cmt(id, repeatable) -> str + + + Get enum member's comment. + + + @param id (C++: const_t) + @param repeatable (C++: bool) + +Help on function get_enum_member_enum in module ida_enum: + +get_enum_member_enum(*args) -> 'enum_t' + get_enum_member_enum(id) -> enum_t + + + Get the parent enum of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_name in module ida_enum: + +get_enum_member_name(*args) -> 'qstring *' + get_enum_member_name(id) -> str + + + Get name of an enum member by const_t. + + + @param id (C++: const_t) + +Help on function get_enum_member_serial in module ida_enum: + +get_enum_member_serial(*args) -> 'uchar' + get_enum_member_serial(cid) -> uchar + + + Get serial number of an enum member. + + + @param cid (C++: const_t) + +Help on function get_enum_member_value in module ida_enum: + +get_enum_member_value(*args) -> 'uval_t' + get_enum_member_value(id) -> uval_t + + + Get value of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_name in module ida_enum: + +get_enum_name(*args) -> 'qstring *' + get_enum_name(id) -> str + + + Get name of enum. + + + @param id (C++: enum_t) + +Help on function get_enum_name2 in module ida_enum: + +get_enum_name2(*args) -> 'qstring *' + get_enum_name2(id, flags=0) -> str + + + Get name of enum + + @param id: enum id (C++: enum_t) + @param flags: Enum name flags (C++: int) + +Help on function get_enum_qty in module ida_enum: + +get_enum_qty(*args) -> 'size_t' + get_enum_qty() -> size_t + + + Get number of declared 'enum_t' types. + +Help on function get_enum_size in module ida_enum: + +get_enum_size(*args) -> 'size_t' + get_enum_size(id) -> size_t + + + Get the number of the members of the enum. + + + @param id (C++: enum_t) + +Help on function get_enum_type_ordinal in module ida_enum: + +get_enum_type_ordinal(*args) -> 'int32' + get_enum_type_ordinal(id) -> int32 + + + Get corresponding type ordinal number. + + + @param id (C++: enum_t) + +Help on function get_enum_width in module ida_enum: + +get_enum_width(*args) -> 'size_t' + get_enum_width(id) -> size_t + + + Get the width of a enum element allowed values: 0 + (unspecified),1,2,4,8,16,32,64 + + @param id (C++: enum_t) + +Help on function get_first_bmask in module ida_enum: + +get_first_bmask(*args) -> 'bmask_t' + get_first_bmask(id) -> bmask_t + + + Get first bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the smallest bitmask for enum, or DEFMASK + +Help on function get_first_enum_member in module ida_enum: + +get_first_enum_member(*args) -> 'uval_t' + get_first_enum_member(id, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_first_serial_enum_member in module ida_enum: + +get_first_serial_enum_member(*args) -> 'uchar *' + get_first_serial_enum_member(id, value, bmask) -> const_t + +Help on function get_last_bmask in module ida_enum: + +get_last_bmask(*args) -> 'bmask_t' + get_last_bmask(id) -> bmask_t + + + Get last bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the biggest bitmask for enum, or DEFMASK + +Help on function get_last_enum_member in module ida_enum: + +get_last_enum_member(*args) -> 'uval_t' + get_last_enum_member(id, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_last_serial_enum_member in module ida_enum: + +get_last_serial_enum_member(*args) -> 'uchar *' + get_last_serial_enum_member(id, value, bmask) -> const_t + +Help on function get_next_bmask in module ida_enum: + +get_next_bmask(*args) -> 'bmask_t' + get_next_bmask(id, bmask) -> bmask_t + + + Get next bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value higher than the specified + value, or DEFMASK + +Help on function get_next_enum_member in module ida_enum: + +get_next_enum_member(*args) -> 'uval_t' + get_next_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_next_serial_enum_member in module ida_enum: + +get_next_serial_enum_member(*args) -> 'uchar *' + get_next_serial_enum_member(in_out_serial, first_cid) -> const_t + +Help on function get_prev_bmask in module ida_enum: + +get_prev_bmask(*args) -> 'bmask_t' + get_prev_bmask(id, bmask) -> bmask_t + + + Get prev bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value lower than the specified value, + or DEFMASK + +Help on function get_prev_enum_member in module ida_enum: + +get_prev_enum_member(*args) -> 'uval_t' + get_prev_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_prev_serial_enum_member in module ida_enum: + +get_prev_serial_enum_member(*args) -> 'uchar *' + get_prev_serial_enum_member(in_out_serial, first_cid) -> const_t + +Help on function getn_enum in module ida_enum: + +getn_enum(*args) -> 'enum_t' + getn_enum(n) -> enum_t + + + Get enum by its ordinal number (0..n). + + + @param n (C++: size_t) + +Help on function is_bf in module ida_enum: + +is_bf(*args) -> 'bool' + is_bf(id) -> bool + + + Is enum a bitfield? (otherwise - plain enum, no bitmasks except for + 'DEFMASK' are allowed) + + @param id (C++: enum_t) + +Help on function is_enum_fromtil in module ida_enum: + +is_enum_fromtil(*args) -> 'bool' + is_enum_fromtil(id) -> bool + + + Does enum come from type library? + + + @param id (C++: enum_t) + +Help on function is_enum_hidden in module ida_enum: + +is_enum_hidden(*args) -> 'bool' + is_enum_hidden(id) -> bool + + + Is enum collapsed? + + + @param id (C++: enum_t) + +Help on function is_ghost_enum in module ida_enum: + +is_ghost_enum(*args) -> 'bool' + is_ghost_enum(id) -> bool + + + Is a ghost copy of a local type? + + + @param id (C++: enum_t) + +Help on function is_one_bit_mask in module ida_enum: + +is_one_bit_mask(*args) -> 'bool' + is_one_bit_mask(mask) -> bool + + + Is bitmask one bit? + + + @param mask (C++: bmask_t) + +Help on function set_bmask_cmt in module ida_enum: + +set_bmask_cmt(*args) -> 'bool' + set_bmask_cmt(id, bmask, cmt, repeatable) -> bool + +Help on function set_bmask_name in module ida_enum: + +set_bmask_name(*args) -> 'bool' + set_bmask_name(id, bmask, name) -> bool + +Help on function set_enum_bf in module ida_enum: + +set_enum_bf(*args) -> 'bool' + set_enum_bf(id, bf) -> bool + + + Set 'bitfield' bit of enum (i.e. convert it to a bitfield) + + + @param id (C++: enum_t) + @param bf (C++: bool) + +Help on function set_enum_cmt in module ida_enum: + +set_enum_cmt(*args) -> 'bool' + set_enum_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum type. + + + @param id (C++: enum_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_flag in module ida_enum: + +set_enum_flag(*args) -> 'bool' + set_enum_flag(id, flag) -> bool + + + Set data representation flags. + + + @param id (C++: enum_t) + @param flag (C++: flags_t) + +Help on function set_enum_fromtil in module ida_enum: + +set_enum_fromtil(*args) -> 'bool' + set_enum_fromtil(id, fromtil) -> bool + + + Specify that enum comes from a type library. + + + @param id (C++: enum_t) + @param fromtil (C++: bool) + +Help on function set_enum_ghost in module ida_enum: + +set_enum_ghost(*args) -> 'bool' + set_enum_ghost(id, ghost) -> bool + + + Specify that enum is a ghost copy of a local type. + + + @param id (C++: enum_t) + @param ghost (C++: bool) + +Help on function set_enum_hidden in module ida_enum: + +set_enum_hidden(*args) -> 'bool' + set_enum_hidden(id, hidden) -> bool + + + Collapse enum. + + + @param id (C++: enum_t) + @param hidden (C++: bool) + +Help on function set_enum_idx in module ida_enum: + +set_enum_idx(*args) -> 'bool' + set_enum_idx(id, idx) -> bool + + + Set serial number of enum. Also see 'get_enum_idx()' . + + @param id (C++: enum_t) + @param idx (C++: size_t) + +Help on function set_enum_member_cmt in module ida_enum: + +set_enum_member_cmt(*args) -> 'bool' + set_enum_member_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum member. + + + @param id (C++: const_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_member_name in module ida_enum: + +set_enum_member_name(*args) -> 'bool' + set_enum_member_name(id, name) -> bool + + + Set name of enum member. + + + @param id (C++: const_t) + @param name (C++: const char *) + +Help on function set_enum_name in module ida_enum: + +set_enum_name(*args) -> 'bool' + set_enum_name(id, name) -> bool + + + Set name of enum type. + + + @param id (C++: enum_t) + @param name (C++: const char *) + +Help on function set_enum_type_ordinal in module ida_enum: + +set_enum_type_ordinal(*args) -> 'void' + set_enum_type_ordinal(id, ord) + + + Set corresponding type ordinal number. + + + @param id (C++: enum_t) + @param ord (C++: int32) + +Help on function set_enum_width in module ida_enum: + +set_enum_width(*args) -> 'bool' + set_enum_width(id, width) -> bool + + + See comment for 'get_enum_width()' + + + @param id (C++: enum_t) + @param width (C++: int) + +=== ida_enum EPYDOC INJECTIONS === +ida_enum.DEFMASK +""" +default bitmask +""" + +ida_enum.ENFL_REGEX +""" +apply regular expressions to beautify the name +""" + +ida_enum.ENUM_MEMBER_ERROR_ENUM +""" +bad enum id +""" + +ida_enum.ENUM_MEMBER_ERROR_ILLV +""" +bad bmask and value combination (~bmask & value != 0) +""" + +ida_enum.ENUM_MEMBER_ERROR_MASK +""" +bad bmask +""" + +ida_enum.ENUM_MEMBER_ERROR_NAME +""" +already have member with this name (bad name) +""" + +ida_enum.ENUM_MEMBER_ERROR_VALUE +""" +already have 256 members with this value +""" +=== ida_enum EPYDOC INJECTIONS END === +Help on class _IdcFunction in module ida_expr: + +class _IdcFunction(builtins.object) + | Internal class that calls pyw_call_idc_func() with a context + | + | Methods defined here: + | + | __call__(self, args, res) + | Call self as a function. + | + | __init__(self, ctxptr) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fp_ptr + +Help on function add_idc_class in module ida_expr: + +add_idc_class(*args) -> 'idc_class_t *' + add_idc_class(name, super=None) -> idc_class_t * + + + Create a new IDC class. + + @param name: name of the new class (C++: const char *) + @param super: the base class for the new class. if the new class is + not based on any other class, pass NULL (C++: const + idc_class_t *) + @return: pointer to the created class. If such a class already exists, + a pointer to it will be returned. Pointers to other existing + classes may be invalidated by this call. + +Help on function add_idc_func in module ida_expr: + +add_idc_func(name, fp, args, defvals=None, flags=0) + Extends the IDC language by exposing a new IDC function that is backed up by a Python function + + @param name: IDC function name to expose + @param fp: Python callable that will receive the arguments and return a tuple. + @param args: Arguments. A tuple of idaapi.VT_XXX constants + @param flags: IDC function flags. A combination of EXTFUN_XXX constants + + @return: Boolean + + + Add an IDC function. This function does not modify the predefined + kernel functions. Example: + + static error_t idaapi myfunc5(idc_value_t *argv, idc_value_t *res) + { + msg("myfunc is called with arg0=%a and arg1=%s + ", argv[0].num, argv[1].str); + res->num = 5; // let's return 5 + return eOk; + } + static const char myfunc5_args[] = { VT_LONG, VT_STR, 0 }; + static const ext_idcfunc_t myfunc_desc = { "MyFunc5", myfunc5, myfunc5_args, NULL, 0, EXTFUN_BASE }; + + // after this: + add_idc_func(myfunc_desc); + + // there is a new IDC function which can be called like this: + MyFunc5(0x123, "test"); + + If the function already exists, it will be replaced by the new + function + + @return: success + +Help on function add_idc_gvar in module ida_expr: + +add_idc_gvar(*args) -> 'idc_value_t *' + add_idc_gvar(name) -> idc_value_t + + + Add global IDC variable. + + @param name: name of the global variable (C++: const char *) + @return: pointer to the created variable or existing variable. NB: the + returned pointer is valid until a new global var is added. + +Help on function compile_idc_file in module ida_expr: + +compile_idc_file(*args) -> 'qstring *' + compile_idc_file(nonnul_line) -> str + +Help on function compile_idc_snippet in module ida_expr: + +compile_idc_snippet(*args) -> 'qstring *' + compile_idc_snippet(func, text, resolver=None, only_safe_funcs=False) -> str + + + Compile text with IDC statements. + + @param func: name of the function to create out of the snippet (C++: + const char *) + @param text: text to compile (C++: const char *) + @param resolver: callback object to get values of undefined variables + This object will be called if IDC function contains + references to undefined variables. May be NULL. (C++: + idc_resolver_t *) + @param only_safe_funcs: if true, any calls to functions without + EXTFUN_SAFE flag will lead to a compilation + error. (C++: bool) + +Help on function compile_idc_text in module ida_expr: + +compile_idc_text(*args) -> 'qstring *' + compile_idc_text(nonnul_line) -> str + +Help on function copy_idcv in module ida_expr: + +copy_idcv(*args) -> 'error_t' + copy_idcv(dst, src) -> error_t + + + Copy 'src' to 'dst'. For idc objects only a reference is copied. + + @param dst (C++: idc_value_t *) + @param src (C++: const idc_value_t &) + +Help on function create_idcv_ref in module ida_expr: + +create_idcv_ref(*args) -> 'bool' + create_idcv_ref(ref, v) -> bool + + + Create a variable reference. Currently only references to global + variables can be created. + + @param ref: ptr to the result (C++: idc_value_t *) + @param v: variable to reference (C++: const idc_value_t *) + @return: success + +Help on function deep_copy_idcv in module ida_expr: + +deep_copy_idcv(*args) -> 'error_t' + deep_copy_idcv(dst, src) -> error_t + + + Deep copy an IDC object. This function performs deep copy of idc + objects. If 'src' is not an object, 'copy_idcv()' will be called + + @param dst (C++: idc_value_t *) + @param src (C++: const idc_value_t &) + +Help on function del_idc_func in module ida_expr: + +del_idc_func(name) + Unregisters the specified IDC function + + @param name: IDC function name to unregister + + @return: Boolean + + + Delete an IDC function + +Help on function del_idcv_attr in module ida_expr: + +del_idcv_attr(*args) -> 'error_t' + del_idcv_attr(obj, attr) -> error_t + + + Delete an object attribute. + + @param obj: variable that holds an object reference (C++: idc_value_t + *) + @param attr: attribute name (C++: const char *) + @return: error code, eOk on success + +Help on function deref_idcv in module ida_expr: + +deref_idcv(*args) -> 'idc_value_t *' + deref_idcv(v, vref_flags) -> idc_value_t + + + Dereference a 'VT_REF' variable. + + @param v: variable to dereference (C++: idc_value_t *) + @param vref_flags: Dereference IDC variable flags (C++: int) + @return: pointer to the dereference result or NULL. If returns NULL, + qerrno is set to eExecBadRef "Illegal variable reference" + +Help on function eval_expr in module ida_expr: + +eval_expr(*args) -> 'qstring *' + eval_expr(rv, where, line) -> str + + + Compile and calculate an expression. + + @param rv: pointer to the result (C++: idc_value_t *) + @param where: the current linear address in the addressing space of + the program being disassembled. If will be used to + resolve names of local variables etc. if not applicable, + then should be BADADDR . (C++: ea_t) + @param line: the expression to evaluate (C++: const char *) + +Help on function eval_idc_expr in module ida_expr: + +eval_idc_expr(*args) -> 'qstring *' + eval_idc_expr(rv, where, line) -> str + + + Same as 'eval_expr()' , but will always use the IDC interpreter + regardless of the currently installed extlang. + + @param rv (C++: idc_value_t *) + @param where (C++: ea_t) + +Help on function exec_idc_script in module ida_expr: + +exec_idc_script(*args) -> 'qstring *' + exec_idc_script(result, path, func, args, argsnum) -> str + + + Compile and execute IDC function(s) from file. + + @param result: ptr to idc_value_t to hold result of the function. If + execution fails, this variable will contain the + exception information. You may pass NULL if you are not + interested in the returned value. (C++: idc_value_t *) + @param path: text file containing text of IDC functions (C++: const + char *) + @param func: function name to execute (C++: const char *) + @param args: array of parameters (C++: const idc_value_t) + @param argsnum: number of parameters to pass to 'fname' This number + should be equal to number of parameters the function + expects. (C++: size_t) + +Help on function exec_system_script in module ida_expr: + +exec_system_script(*args) -> 'bool' + exec_system_script(file, complain_if_no_file=True) -> bool + + + Compile and execute "main" function from system file. + + @param file: file name with IDC function(s). The file will be searched + in the idc subdir of ida (C++: const char *) + @param complain_if_no_file: 1: display warning if the file is not + found 0: don't complain if file doesn't + exist (C++: bool) + +Help on function find_idc_class in module ida_expr: + +find_idc_class(*args) -> 'idc_class_t *' + find_idc_class(name) -> idc_class_t * + + + Find an existing IDC class by its name. + + @param name: name of the class (C++: const char *) + @return: pointer to the class or NULL. The returned pointer is valid + until a new call to add_idc_class() + +Help on function find_idc_func in module ida_expr: + +find_idc_func(*args) -> 'qstring *' + find_idc_func(prefix, n=0) -> str + +Help on function find_idc_gvar in module ida_expr: + +find_idc_gvar(*args) -> 'idc_value_t *' + find_idc_gvar(name) -> idc_value_t + + + Find an existing global IDC variable by its name. + + @param name: name of the global variable (C++: const char *) + @return: pointer to the variable or NULL. NB: the returned pointer is + valid until a new global var is added. FIXME: it is difficult + to use this function in a thread safe manner + +Help on function first_idcv_attr in module ida_expr: + +first_idcv_attr(*args) -> 'char const *' + first_idcv_attr(obj) -> char const * + +Help on function free_idcv in module ida_expr: + +free_idcv(*args) -> 'void' + free_idcv(v) + + + Free storage used by 'VT_STR' / 'VT_OBJ' IDC variables. After this + call the variable has a numeric value 0 + + @param v (C++: idc_value_t *) + +Help on function get_idc_filename in module ida_expr: + +get_idc_filename(*args) -> 'char const *' + get_idc_filename(file) -> str + + + Get full name of IDC file name. Search for file in list of include + directories, IDCPATH directory and the current directory. + + @param file: file name without full path (C++: const char *) + @return: NULL is file not found. otherwise returns pointer to buf + +Help on function get_idcv_attr in module ida_expr: + +get_idcv_attr(*args) -> 'error_t' + get_idcv_attr(res, obj, attr, may_use_getattr=False) -> error_t + + + Get an object attribute. + + @param res: buffer for the attribute value (C++: idc_value_t *) + @param obj: variable that holds an object reference. if obj is NULL it + searches global variables, then user functions (C++: const + idc_value_t *) + @param attr: attribute name (C++: const char *) + @param may_use_getattr: may call getattr functions to calculate the + attribute if it does not exist (C++: bool) + @return: error code, eOk on success + +Help on function get_idcv_class_name in module ida_expr: + +get_idcv_class_name(*args) -> 'qstring *' + get_idcv_class_name(obj) -> str + + + Retrieves the IDC object class name. + + @param obj: class instance variable (C++: const idc_value_t *) + @return: error code, eOk on success + +Help on function get_idcv_slice in module ida_expr: + +get_idcv_slice(*args) -> 'error_t' + get_idcv_slice(res, v, i1, i2, flags=0) -> error_t + + + Get slice. + + @param res: output variable that will contain the slice (C++: + idc_value_t *) + @param v: input variable (string or object) (C++: const idc_value_t + *) + @param i1: slice start index (C++: uval_t) + @param i2: slice end index (excluded) (C++: uval_t) + @param flags: IDC variable slice flags or 0 (C++: int) + @return: eOk if success + +Help on class highlighter_cbs_t in module ida_expr: + +class highlighter_cbs_t(builtins.object) + | Proxy of C++ highlighter_cbs_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> highlighter_cbs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_highlighter_cbs_t(...) + | delete_highlighter_cbs_t(self) + | + | cur_block_state(self, *args) -> 'int32' + | cur_block_state(self) -> int32 + | + | prev_block_state(self, *args) -> 'int32' + | prev_block_state(self) -> int32 + | + | set_block_state(self, *args) -> 'void' + | set_block_state(self, arg0) + | + | set_style(self, *args) -> 'void' + | set_style(self, arg0, arg1, arg2) + | + | ---------------------------------------------------------------------- + | 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 + +Help on class idc_global_t in module ida_expr: + +class idc_global_t(builtins.object) + | Proxy of C++ idc_global_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idc_global_t + | __init__(self, n) -> idc_global_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_idc_global_t(...) + | delete_idc_global_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | idc_global_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | idc_global_t_value_get(self) -> idc_value_t + +Help on class idc_value_t in module ida_expr: + +class idc_value_t(builtins.object) + | Proxy of C++ idc_value_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=0) -> idc_value_t + | __init__(self, r) -> idc_value_t + | __init__(self, _str) -> idc_value_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_idc_value_t(...) + | delete_idc_value_t(self) + | + | _create_empty_string(self, *args) -> 'void' + | _create_empty_string(self) + | + | _idc_value_t__get_e = __get_e(self, *args) -> 'wrapped_array_t< ushort,6 >' + | __get_e(self) -> wrapped_array_t< ushort,6 > + | + | c_str(self, *args) -> 'char const *' + | c_str(self) -> char const * + | + | clear(self, *args) -> 'void' + | clear(self) + | + | create_empty_string(self, *args) -> 'void' + | create_empty_string(self) + | + | is_convertible(self, *args) -> 'bool' + | is_convertible(self) -> bool + | + | is_integral(self, *args) -> 'bool' + | is_integral(self) -> bool + | + | is_zero(self, *args) -> 'bool' + | is_zero(self) -> bool + | + | qstr(self, *args) -> 'qstring const &' + | qstr(self) -> qstring + | qstr(self) -> qstring const & + | + | set_float(self, *args) -> 'void' + | set_float(self, f) + | + | set_int64(self, *args) -> 'void' + | set_int64(self, v) + | + | set_long(self, *args) -> 'void' + | set_long(self, v) + | + | set_pvoid(self, *args) -> 'void' + | set_pvoid(self, p) + | + | set_string(self, *args) -> 'void' + | set_string(self, _str, len) + | set_string(self, _str) + | + | swap(self, *args) -> 'void' + | swap(self, v) + | + | u_str(self, *args) -> 'uchar const *' + | u_str(self) -> uchar const * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | __get_e(self) -> wrapped_array_t< ushort,6 > + | + | funcidx + | idc_value_t_funcidx_get(self) -> int + | + | i64 + | idc_value_t_i64_get(self) -> int64 + | + | num + | idc_value_t_num_get(self) -> sval_t + | + | obj + | idc_value_t_obj_get(self) -> idc_object_t * + | + | pvoid + | idc_value_t_pvoid_get(self) -> void * + | + | reserve + | idc_value_t_reserve_get(self) -> uchar [sizeof(qstring)] + | + | str + | + | thisown + | The membership flag + | + | vtype + | idc_value_t_vtype_get(self) -> char + +Help on class idc_values_t in module ida_expr: + +class idc_values_t(builtins.object) + | Proxy of C++ qvector< idc_value_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'idc_value_t const &' + | __getitem__(self, i) -> idc_value_t + | + | __init__(self, *args) + | __init__(self) -> idc_values_t + | __init__(self, x) -> idc_values_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_idc_values_t(...) + | delete_idc_values_t(self) + | + | at(self, *args) -> 'idc_value_t const &' + | at(self, _idx) -> idc_value_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< idc_value_t >::const_iterator' + | begin(self) -> idc_value_t + | begin(self) -> idc_value_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< idc_value_t >::const_iterator' + | end(self) -> idc_value_t + | end(self) -> idc_value_t + | + | erase(self, *args) -> 'qvector< idc_value_t >::iterator' + | erase(self, it) -> idc_value_t + | erase(self, first, last) -> idc_value_t + | + | extract(self, *args) -> 'idc_value_t *' + | extract(self) -> idc_value_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=idc_value_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< idc_value_t >::iterator' + | insert(self, it, x) -> idc_value_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'idc_value_t &' + | push_back(self, x) + | push_back(self) -> idc_value_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function idcv_float in module ida_expr: + +idcv_float(*args) -> 'error_t' + idcv_float(v) -> error_t + + + Convert IDC variable to a floating point. + + + @param v (C++: idc_value_t *) + +Help on function idcv_int64 in module ida_expr: + +idcv_int64(*args) -> 'error_t' + idcv_int64(v) -> error_t + + + Convert IDC variable to a 64bit number. + + @param v (C++: idc_value_t *) + @return: v = 0 if impossible to convert to int64 + +Help on function idcv_long in module ida_expr: + +idcv_long(*args) -> 'error_t' + idcv_long(v) -> error_t + + + Convert IDC variable to a long (32/64bit) number. + + @param v (C++: idc_value_t *) + @return: v = 0 if impossible to convert to long + +Help on function idcv_num in module ida_expr: + +idcv_num(*args) -> 'error_t' + idcv_num(v) -> error_t + + + Convert IDC variable to a long number. + + @param v (C++: idc_value_t *) + @return: v = 0 if IDC variable = "false" string v = 1 if IDC + variable = "true" string v = number if IDC variable is + number or string containing a number eTypeConflict if IDC + variable = empty string + +Help on function idcv_object in module ida_expr: + +idcv_object(*args) -> 'error_t' + idcv_object(v, icls=None) -> error_t + + + Create an IDC object. The original value of 'v' is discarded (freed). + + @param v: variable to hold the object. any previous value will be + cleaned (C++: idc_value_t *) + @param icls: ptr to the desired class. NULL means "object" class this + ptr must be returned by add_idc_class() or + find_idc_class() (C++: const idc_class_t *) + @return: always eOk + +Help on function idcv_string in module ida_expr: + +idcv_string(*args) -> 'error_t' + idcv_string(v) -> error_t + + + Convert IDC variable to a text string. + + + @param v (C++: idc_value_t *) + +Help on function last_idcv_attr in module ida_expr: + +last_idcv_attr(*args) -> 'char const *' + last_idcv_attr(obj) -> char const * + +Help on function move_idcv in module ida_expr: + +move_idcv(*args) -> 'error_t' + move_idcv(dst, src) -> error_t + + + Move 'src' to 'dst'. This function is more effective than copy_idcv + since it never copies big amounts of data. + + @param dst (C++: idc_value_t *) + @param src (C++: idc_value_t *) + +Help on function next_idcv_attr in module ida_expr: + +next_idcv_attr(*args) -> 'char const *' + next_idcv_attr(obj, attr) -> char const * + +Help on function prev_idcv_attr in module ida_expr: + +prev_idcv_attr(*args) -> 'char const *' + prev_idcv_attr(obj, attr) -> char const * + +Help on function print_idcv in module ida_expr: + +print_idcv(*args) -> 'qstring *' + print_idcv(v, name=None, indent=0) -> str + + + Get text representation of 'idc_value_t' . + + + @param v (C++: const idc_value_t &) + @param name (C++: const char *) + @param indent (C++: int) + +Help on function py_add_idc_func in module ida_expr: + +py_add_idc_func(*args) -> 'bool' + py_add_idc_func(name, fp_ptr, args, defvals, flags) -> bool + +Help on function py_get_call_idc_func in module ida_expr: + +py_get_call_idc_func(*args) -> 'size_t' + py_get_call_idc_func() -> size_t + +Help on function pyw_convert_defvals in module ida_expr: + +pyw_convert_defvals(*args) -> 'bool' + pyw_convert_defvals(out, py_seq) -> bool + +Help on function pyw_register_idc_func in module ida_expr: + +pyw_register_idc_func(*args) -> 'size_t' + pyw_register_idc_func(name, args, py_fp) -> size_t + +Help on function pyw_unregister_idc_func in module ida_expr: + +pyw_unregister_idc_func(*args) -> 'bool' + pyw_unregister_idc_func(ctxptr) -> bool + +Help on function set_header_path in module ida_expr: + +set_header_path(*args) -> 'bool' + set_header_path(path, add) -> bool + + + Set or append a header path. IDA looks for the include files in the + appended header paths, then in the ida executable directory. + + @param path: list of directories to add (separated by ';') may be + NULL, in this case nothing is added (C++: const char *) + @param add: true: append. false: remove old paths. (C++: bool) + +Help on function set_idcv_attr in module ida_expr: + +set_idcv_attr(*args) -> 'error_t' + set_idcv_attr(obj, attr, value, may_use_setattr=False) -> error_t + + + Set an object attribute. + + @param obj: variable that holds an object reference. if obj is NULL + then it tries to modify a global variable with the + attribute name (C++: idc_value_t *) + @param attr: attribute name (C++: const char *) + @param value: new attribute value (C++: const idc_value_t &) + @param may_use_setattr: may call setattr functions for the class (C++: + bool) + @return: error code, eOk on success + +Help on function set_idcv_slice in module ida_expr: + +set_idcv_slice(*args) -> 'error_t' + set_idcv_slice(v, i1, i2, _in, flags=0) -> error_t + + + Set slice. + + @param v: variable to modify (string or object) (C++: idc_value_t *) + @param i1: slice start index (C++: uval_t) + @param i2: slice end index (excluded) (C++: uval_t) + @param flags: IDC variable slice flags or 0 (C++: int) + @return: eOk on success + +Help on function swap_idcvs in module ida_expr: + +swap_idcvs(*args) -> 'void' + swap_idcvs(v1, v2) + + + Swap 2 variables. + + + @param v1 (C++: idc_value_t *) + @param v2 (C++: idc_value_t *) + +Help on function throw_idc_exception in module ida_expr: + +throw_idc_exception(*args) -> 'error_t' + throw_idc_exception(r, desc) -> error_t + + + Create an idc execution exception object. This helper function can be + used to return an exception from C++ code to IDC. In other words this + function can be called from 'idc_func_t()' callbacks. Sample usage: if + ( !ok ) return throw_idc_exception(r, "detailed error msg"); + + @param r: object to hold the exception object (C++: idc_value_t *) + @param desc: exception description (C++: const char *) + @return: eExecThrow + +=== ida_expr EPYDOC INJECTIONS === +ida_expr.CPL_DEL_MACROS +""" +delete macros at the end of compilation +""" + +ida_expr.CPL_ONLY_SAFE +""" +allow calls of only thread-safe functions +""" + +ida_expr.CPL_USE_LABELS +""" +allow program labels in the script +""" + +ida_expr.IDC_LANG_EXT +""" +IDC script extension. +""" + +ida_expr.VARSLICE_SINGLE +""" +return single index (i2 is ignored) +""" + +ida_expr.VREF_COPY +""" +copy the result to the input var (v) +""" + +ida_expr.VREF_LOOP +""" +dereference until we get a non 'VT_REF' +""" + +ida_expr.VREF_ONCE +""" +dereference only once, do not loop +""" + +ida_expr.VT_FLOAT +""" +Floating point (see 'idc_value_t::e' ) +""" + +ida_expr.VT_FUNC +""" +Function (see 'idc_value_t::funcidx' ) +""" + +ida_expr.VT_INT64 +""" +i64 +""" + +ida_expr.VT_LONG +""" +Integer (see 'idc_value_t::num' ) +""" + +ida_expr.VT_OBJ +""" +Object (see idc_value_t::obj) +""" + +ida_expr.VT_PVOID +""" +void * +""" + +ida_expr.VT_REF +""" +Reference. +""" + +ida_expr.VT_STR +""" +String (see qstr() and similar functions) +""" + +ida_expr.VT_WILD +""" +Function with arbitrary number of arguments. The actual number of +arguments will be passed in 'idc_value_t::num' . This value should not +be used for 'idc_value_t' . +""" + +ida_expr.eExecThrow +""" +See return value of 'idc_func_t' . +""" +=== ida_expr EPYDOC INJECTIONS END === +Help on function calc_fixup_size in module ida_fixup: + +calc_fixup_size(*args) -> 'int' + calc_fixup_size(type) -> int + + + Calculate size of fixup in bytes (the number of bytes the fixup + patches) + + @param type (C++: fixup_type_t) + +Help on function contains_fixups in module ida_fixup: + +contains_fixups(*args) -> 'bool' + contains_fixups(ea, size) -> bool + + + Does the specified address range contain any fixup information? + + + @param ea (C++: ea_t) + @param size (C++: asize_t) + +Help on function del_fixup in module ida_fixup: + +del_fixup(*args) -> 'void' + del_fixup(source) + + + Delete fixup information. + + + @param source (C++: ea_t) + +Help on function exists_fixup in module ida_fixup: + +exists_fixup(*args) -> 'bool' + exists_fixup(source) -> bool + + + Check that a fixup exists at the given address. + + + @param source (C++: ea_t) + +Help on function find_custom_fixup in module ida_fixup: + +find_custom_fixup(*args) -> 'fixup_type_t' + find_custom_fixup(name) -> fixup_type_t + + + Get id of a custom fixup handler. + + @param name: name of the custom fixup handler (C++: const char *) + @return: id with FIXUP_CUSTOM bit set or 0 + +Help on class fixup_data_t in module ida_fixup: + +class fixup_data_t(builtins.object) + | Proxy of C++ fixup_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> fixup_data_t + | __init__(self, type_, flags_=0) -> fixup_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_fixup_data_t(...) + | delete_fixup_data_t(self) + | + | calc_size(self, *args) -> 'int' + | calc_size(self) -> int + | + | clr_extdef(self, *args) -> 'void' + | clr_extdef(self) + | + | clr_unused(self, *args) -> 'void' + | clr_unused(self) + | + | get(self, *args) -> 'bool' + | get(self, source) -> bool + | + | get_base(self, *args) -> 'ea_t' + | get_base(self) -> ea_t + | + | get_desc(self, *args) -> 'char const *' + | get_desc(self, source) -> char const * + | + | get_flags(self, *args) -> 'uint32' + | get_flags(self) -> uint32 + | + | get_handler(self, *args) -> 'fixup_handler_t const *' + | get_handler(self) -> fixup_handler_t const * + | + | get_type(self, *args) -> 'fixup_type_t' + | get_type(self) -> fixup_type_t + | + | get_value(self, *args) -> 'uval_t' + | get_value(self, ea) -> uval_t + | + | has_base(self, *args) -> 'bool' + | has_base(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_extdef(self, *args) -> 'bool' + | is_extdef(self) -> bool + | + | is_unused(self, *args) -> 'bool' + | is_unused(self) -> bool + | + | patch_value(self, *args) -> 'bool' + | patch_value(self, ea) -> bool + | + | set(self, *args) -> 'void' + | set(self, source) + | + | set_base(self, *args) -> 'void' + | set_base(self, new_base) + | + | set_extdef(self, *args) -> 'void' + | set_extdef(self) + | + | set_sel(self, *args) -> 'void' + | set_sel(self, seg) + | + | set_target_sel(self, *args) -> 'void' + | set_target_sel(self) + | + | set_type(self, *args) -> 'void' + | set_type(self, type_) + | + | set_type_and_flags(self, *args) -> 'void' + | set_type_and_flags(self, type_, flags_=0) + | + | set_unused(self, *args) -> 'void' + | set_unused(self) + | + | was_created(self, *args) -> 'bool' + | was_created(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | displacement + | fixup_data_t_displacement_get(self) -> adiff_t + | + | off + | fixup_data_t_off_get(self) -> ea_t + | + | sel + | fixup_data_t_sel_get(self) -> sel_t + | + | thisown + | The membership flag + +Help on class fixup_info_t in module ida_fixup: + +class fixup_info_t(builtins.object) + | Proxy of C++ fixup_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> fixup_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_fixup_info_t(...) + | delete_fixup_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | fixup_info_t_ea_get(self) -> ea_t + | + | fd + | fixup_info_t_fd_get(self) -> fixup_data_t + | + | thisown + | The membership flag + +Help on function gen_fix_fixups in module ida_fixup: + +gen_fix_fixups(*args) -> 'void' + gen_fix_fixups(_from, to, size) + + + Relocate the bytes with fixup information once more (generic + function). This function may be called from 'loader_t::move_segm()' if + it suits the goal. If 'loader_t::move_segm' is not defined then this + function will be called automatically when moving segments or rebasing + the entire program. Special parameter values (from = BADADDR, size = + 0, to = delta) are used when the function is called from + rebase_program(delta). + + @param _from (C++: ea_t) + @param to (C++: ea_t) + @param size (C++: asize_t) + +Help on function get_first_fixup_ea in module ida_fixup: + +get_first_fixup_ea(*args) -> 'ea_t' + get_first_fixup_ea() -> ea_t + + + Get the first address with fixup information + + @return: the first address with fixup information, or BADADDR + +Help on function get_fixup in module ida_fixup: + +get_fixup(*args) -> 'bool' + get_fixup(fd, source) -> bool + + + Get fixup information. + + + @param fd (C++: fixup_data_t *) + @param source (C++: ea_t) + +Help on function get_fixup_desc in module ida_fixup: + +get_fixup_desc(*args) -> 'fixup_data_t const &' + get_fixup_desc(source, fd) -> str + + + Get FIXUP description comment. + + + @param source (C++: ea_t) + @param fd (C++: const fixup_data_t &) + +Help on function get_fixup_handler in module ida_fixup: + +get_fixup_handler(*args) -> 'fixup_handler_t const *' + get_fixup_handler(type) -> fixup_handler_t const * + + + Get handler of standard or custom fixup. + + + @param type (C++: fixup_type_t) + +Help on function get_fixup_value in module ida_fixup: + +get_fixup_value(*args) -> 'uval_t' + get_fixup_value(ea, type) -> uval_t + + + Get the operand value. This function get fixup bytes from data or an + instruction at `ea' and convert them to the operand value (maybe + partially). It is opposite in meaning to the 'patch_fixup_value()' . + For example, FIXUP_HI8 read a byte at 'patch_fixup_value()' `ea' and + shifts it left by 8 bits, or AArch64's custom fixup BRANCH26 get low + 26 bits of the insn at `ea' and shifts it left by 2 bits. This + function is mainly used to get a relocation addend. + 'fixup_handler_t::size' + + @param ea: address to get fixup bytes from, the size of the fixup + bytes depends on the fixup type. (C++: ea_t) + @param type (C++: fixup_type_t) + +Help on function get_fixups in module ida_fixup: + +get_fixups(*args) -> 'bool' + get_fixups(out, ea, size) -> bool + +Help on function get_next_fixup_ea in module ida_fixup: + +get_next_fixup_ea(*args) -> 'ea_t' + get_next_fixup_ea(ea) -> ea_t + + + Find next address with fixup information + + @param ea: current address (C++: ea_t) + @return: the next address with fixup information, or BADADDR + +Help on function get_prev_fixup_ea in module ida_fixup: + +get_prev_fixup_ea(*args) -> 'ea_t' + get_prev_fixup_ea(ea) -> ea_t + + + Find previous address with fixup information + + @param ea: current address (C++: ea_t) + @return: the previous address with fixup information, or BADADDR + +Help on function is_fixup_custom in module ida_fixup: + +is_fixup_custom(*args) -> 'bool' + is_fixup_custom(type) -> bool + + + Is fixup processed by processor module? + + + @param type (C++: fixup_type_t) + +Help on function patch_fixup_value in module ida_fixup: + +patch_fixup_value(*args) -> 'bool' + patch_fixup_value(ea, fd) -> bool + + + Patch the fixup bytes. This function updates data or an instruction at + `ea' to the fixup bytes. For example, FIXUP_HI8 updates a byte at `ea' + to the high byte of `fd->off' , or AArch64's custom fixup BRANCH26 + updates low 26 bits of the insn at `ea' to the value of `fd->off' + shifted right by 2. 'fixup_handler_t::size' + + @param ea: address where data are changed, the size of the changed + data depends on the fixup type. (C++: ea_t) + @param fd (C++: const fixup_data_t &) + +Help on function set_fixup in module ida_fixup: + +set_fixup(*args) -> 'void' + set_fixup(source, fd) + + + Set fixup information. You should fill 'fixup_data_t' and call this + function and the kernel will remember information in the database. + + @param source: the fixup source address, i.e. the address modified by + the fixup (C++: ea_t) + @param fd: fixup data (C++: const fixup_data_t &) + +=== ida_fixup EPYDOC INJECTIONS === +ida_fixup.FIXUPF_CREATED +""" +fixup was not present in the input file +""" + +ida_fixup.FIXUPF_EXTDEF +""" +target is a location (otherwise - segment). Use this bit if the target +is a symbol rather than an offset from the beginning of a segment. +""" + +ida_fixup.FIXUPF_LOADER_MASK +""" +additional flags. The bits from this mask are not stored in the +database and can be used by the loader at its discretion. +""" + +ida_fixup.FIXUPF_REL +""" +fixup is relative to the linear address `base' . Otherwise fixup is +relative to the start of the segment with `sel' selector. +""" + +ida_fixup.FIXUPF_UNUSED +""" +fixup is ignored by IDAdisallows the kernel to convert operandsthis +fixup is not used during output +""" +=== ida_fixup EPYDOC INJECTIONS END === +Help on class qfile_t in module ida_fpro: + +class qfile_t(builtins.object) + | Proxy of C++ qfile_t class. + | + | + | A helper class to work with FILE related functions. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, rhs) -> qfile_t + | __init__(self, pycapsule=None) -> qfile_t + | + | + | Closes the file + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qfile_t(...) + | delete_qfile_t(self) + | + | close(self, *args) -> 'void' + | close(self) + | + | filename(self, *args) -> 'PyObject *' + | filename(self) -> PyObject * + | + | flush(self, *args) -> 'int' + | flush(self) -> int + | + | + | Reads a single byte from the file. Returns None if EOF or the read byte + | + | get_byte(self, *args) -> 'PyObject *' + | get_byte(self) -> PyObject * + | + | get_fp(self, *args) -> 'FILE *' + | get_fp(self) -> FILE * + | + | gets(self, *args) -> 'PyObject *' + | gets(self, size) -> PyObject * + | + | + | Reads a line from the input file. Returns the read line or None + | + | open(self, *args) -> 'bool' + | open(self, filename, mode) -> bool + | + | + | Opens a file + | + | @param filename: the file name + | @param mode: The mode string, ala fopen() style + | @return: Boolean + | + | opened(self, *args) -> 'bool' + | opened(self) -> bool + | + | + | Checks if the file is opened or not + | + | put_byte(self, *args) -> 'int' + | put_byte(self, chr) -> int + | + | + | Writes a single byte to the file + | + | puts(self, *args) -> 'int' + | puts(self, str) -> int + | + | read(self, *args) -> 'PyObject *' + | read(self, size) -> PyObject * + | + | + | Reads from the file. Returns the buffer or None + | + | readbytes(self, *args) -> 'PyObject *' + | readbytes(self, size, big_endian) -> PyObject * + | + | + | Similar to read() but it respect the endianness + | + | seek(self, *args) -> 'int' + | seek(self, offset, whence=SEEK_SET) -> int + | + | + | Set input source position + | @return: the new position (not 0 as fseek!) + | + | size(self, *args) -> 'int64' + | size(self) -> int64 + | + | tell(self, *args) -> 'int64' + | tell(self) -> int64 + | + | + | Returns the current position + | + | write(self, *args) -> 'int' + | write(self, py_buf) -> int + | + | + | Writes to the file. Returns 0 or the number of bytes written + | + | writebytes(self, *args) -> 'int' + | writebytes(self, py_buf, big_endian) -> int + | + | + | Similar to write() but it respect the endianness + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | from_capsule(*args) -> 'qfile_t *' + | from_capsule(pycapsule) -> qfile_t + | + | from_fp(*args) -> 'qfile_t *' + | from_fp(fp) -> qfile_t + | + | tmpfile(*args) -> 'qfile_t *' + | tmpfile() -> qfile_t + | + | + | A static method to construct an instance using a temporary file + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __idc_cvt_id__ + | qfile_t___idc_cvt_id___get(self) -> int + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on function qfile_t_from_capsule in module ida_fpro: + +qfile_t_from_capsule(*args) -> 'qfile_t *' + qfile_t_from_capsule(pycapsule) -> qfile_t + +Help on function qfile_t_from_fp in module ida_fpro: + +qfile_t_from_fp(*args) -> 'qfile_t *' + qfile_t_from_fp(fp) -> qfile_t + +Help on function qfile_t_tmpfile in module ida_fpro: + +qfile_t_tmpfile(*args) -> 'qfile_t *' + qfile_t_tmpfile() -> qfile_t + +Help on function add_auto_stkpnt in module ida_frame: + +add_auto_stkpnt(*args) -> 'bool' + add_auto_stkpnt(pfn, ea, delta) -> bool + + + Add automatic SP register change point. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address where SP changes. usually this is the end of + the instruction which modifies the stack pointer + (\cmd{ea}+\cmd{size}) (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function add_frame in module ida_frame: + +add_frame(*args) -> 'bool' + add_frame(pfn, frsize, frregs, argsize) -> bool + + + Add function frame. + + @param pfn: pointer to function structure (C++: func_t *) + @param frsize: size of function local variables (C++: sval_t) + @param frregs: size of saved registers (C++: ushort) + @param argsize: size of function arguments range which will be purged + upon return. this parameter is used for __stdcall and + __pascal calling conventions. for other calling + conventions please pass 0. (C++: asize_t) + +Help on function add_regvar in module ida_frame: + +add_regvar(*args) -> 'int' + add_regvar(pfn, ea1, ea2, canon, user, cmt) -> int + + + Define a register variable. + + @param pfn: function in which the definition will be created (C++: + func_t *) + @param ea1: range of addresses within the function where the + definition will be used (C++: ea_t) + @param ea2: range of addresses within the function where the + definition will be used (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @param user: user-defined name for the register (C++: const char *) + @param cmt: comment for the definition (C++: const char *) + @return: Register variable error codes + +Help on function add_user_stkpnt in module ida_frame: + +add_user_stkpnt(*args) -> 'bool' + add_user_stkpnt(ea, delta) -> bool + + + Add user-defined SP register change point. + + @param ea: linear address where SP changes (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function build_stkvar_name in module ida_frame: + +build_stkvar_name(*args) -> 'qstring *' + build_stkvar_name(pfn, v) -> str + + + Build automatic stack variable name. + + @param pfn: pointer to function (can't be NULL!) (C++: const func_t + *) + @param v: value of variable offset (C++: sval_t) + @return: length of stack variable name or -1 + +Help on function build_stkvar_xrefs in module ida_frame: + +build_stkvar_xrefs(*args) -> 'void' + build_stkvar_xrefs(out, pfn, mptr) + + + Fill 'out' with a list of all the xrefs made from function 'pfn', to + the argument or variable 'mptr' in 'pfn's stack frame. + + @param out: the list of xrefs to fill. (C++: xreflist_t *) + @param pfn: the function to scan. (C++: func_t *) + @param mptr: the argument/variable in pfn's stack frame. (C++: const + member_t *) + +Help on function calc_stkvar_struc_offset in module ida_frame: + +calc_stkvar_struc_offset(*args) -> 'ea_t' + calc_stkvar_struc_offset(pfn, insn, n) -> ea_t + + + Calculate offset of stack variable in the frame structure. + + @param pfn: pointer to function (can't be NULL!) (C++: func_t *) + @param insn: the instruction (C++: const insn_t &) + @param n: number of operand: (0.. UA_MAXOP -1) -1 if error, return + BADADDR (C++: int) + @return: BADADDR if some error (issue a warning if stack frame is + bad) + +Help on function define_stkvar in module ida_frame: + +define_stkvar(*args) -> 'bool' + define_stkvar(pfn, name, off, flags, ti, nbytes) -> bool + + + Define/redefine a stack variable. + + @param pfn: pointer to function (C++: func_t *) + @param name: variable name, NULL means autogenerate a name (C++: const + char *) + @param off: offset of the stack variable in the frame. negative values + denote local variables, positive - function arguments. + (C++: sval_t) + @param flags: variable type flags ( byte_flag() for a byte variable, + for example) (C++: flags_t) + @param ti: additional type information (like offsets, structs, etc) + (C++: const opinfo_t *) + @param nbytes: number of bytes occupied by the variable (C++: asize_t) + @return: success + +Help on function del_frame in module ida_frame: + +del_frame(*args) -> 'bool' + del_frame(pfn) -> bool + + + Delete a function frame. + + @param pfn: pointer to function structure (C++: func_t *) + @return: success + +Help on function del_regvar in module ida_frame: + +del_regvar(*args) -> 'int' + del_regvar(pfn, ea1, ea2, canon) -> int + + + Delete a register variable definition. + + @param pfn: function in question (C++: func_t *) + @param ea1: range of addresses within the function where the + definition holds (C++: ea_t) + @param ea2: range of addresses within the function where the + definition holds (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @return: Register variable error codes + +Help on function del_stkpnt in module ida_frame: + +del_stkpnt(*args) -> 'bool' + del_stkpnt(pfn, ea) -> bool + + + Delete SP register change point. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: success + +Help on function delete_unreferenced_stkvars in module ida_frame: + +delete_unreferenced_stkvars(*args) -> 'int' + delete_unreferenced_stkvars(pfn) -> int + +Help on function delete_wrong_stkvar_ops in module ida_frame: + +delete_wrong_stkvar_ops(*args) -> 'int' + delete_wrong_stkvar_ops(pfn) -> int + +Help on function find_regvar in module ida_frame: + +find_regvar(*args) -> 'regvar_t *' + find_regvar(pfn, ea1, ea2, canon, user) -> regvar_t + find_regvar(pfn, ea, canon) -> regvar_t + + + Find a register variable definition (powerful version). One of 'canon' + and 'user' should be NULL. If both 'canon' and 'user' are NULL it + returns the first regvar definition in the range. + + @param pfn: function in question (C++: func_t *) + @param ea1: range of addresses to search. ea1==BADADDR means the + entire function (C++: ea_t) + @param ea2: range of addresses to search. ea1==BADADDR means the + entire function (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @param user: user-defined name for the register (C++: const char *) + @return: NULL-not found, otherwise ptr to regvar_t + +Help on function frame_off_args in module ida_frame: + +frame_off_args(*args) -> 'ea_t' + frame_off_args(pfn) -> ea_t + + + Get starting address of arguments section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_lvars in module ida_frame: + +frame_off_lvars(*args) -> 'ea_t' + frame_off_lvars(pfn) -> ea_t + + + Get start address of local variables section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_retaddr in module ida_frame: + +frame_off_retaddr(*args) -> 'ea_t' + frame_off_retaddr(pfn) -> ea_t + + + Get starting address of return address section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_savregs in module ida_frame: + +frame_off_savregs(*args) -> 'ea_t' + frame_off_savregs(pfn) -> ea_t + + + Get starting address of saved registers section. + + + @param pfn (C++: const func_t *) + +Help on function get_effective_spd in module ida_frame: + +get_effective_spd(*args) -> 'sval_t' + get_effective_spd(pfn, ea) -> sval_t + + + Get effective difference between the initial and current values of + ESP. This function returns the sp-diff used by the instruction. The + difference between 'get_spd()' and 'get_effective_spd()' is present + only for instructions like "pop [esp+N]": they modify sp and use the + modified value. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: 0 or the difference, usually a negative number + +Help on function get_frame in module ida_frame: + +get_frame(*args) -> 'struc_t *' + get_frame(pfn) -> struc_t + get_frame(ea) -> struc_t * + + + Get pointer to function frame. + + @param pfn: pointer to function structure (C++: const func_t *) + +Help on function get_frame_part in module ida_frame: + +get_frame_part(*args) -> 'void' + get_frame_part(range, pfn, part) + + + Get offsets of the frame part in the frame. + + @param range: pointer to the output buffer with the frame part + start/end(exclusive) offsets, can't be NULL (C++: + range_t *) + @param pfn: pointer to function structure, can't be NULL (C++: const + func_t *) + @param part: frame part (C++: frame_part_t) + +Help on function get_frame_retsize in module ida_frame: + +get_frame_retsize(*args) -> 'int' + get_frame_retsize(pfn) -> int + + + Get size of function return address. + + @param pfn: pointer to function structure, can't be NULL (C++: const + func_t *) + +Help on function get_frame_size in module ida_frame: + +get_frame_size(*args) -> 'asize_t' + get_frame_size(pfn) -> asize_t + + + Get full size of a function frame. This function takes into account + size of local variables + size of saved registers + size of return + address + number of purged bytes. The purged bytes correspond to the + arguments of the functions with __stdcall and __fastcall calling + conventions. + + @param pfn: pointer to function structure, may be NULL (C++: const + func_t *) + @return: size of frame in bytes or zero + +Help on function get_func_by_frame in module ida_frame: + +get_func_by_frame(*args) -> 'ea_t' + get_func_by_frame(frame_id) -> ea_t + + + Get function by its frame id.this function works only with databases + created by IDA > 5.6 + + @param frame_id: id of the function frame (C++: tid_t) + @return: start address of the function or BADADDR + +Help on function get_min_spd_ea in module ida_frame: + +get_min_spd_ea(*args) -> 'ea_t' + get_min_spd_ea(pfn) -> ea_t + +Help on function get_sp_delta in module ida_frame: + +get_sp_delta(*args) -> 'sval_t' + get_sp_delta(pfn, ea) -> sval_t + + + Get modification of SP made at the specified location + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: 0 if the specified location doesn't contain a SP change + point. otherwise return delta of SP modification. + +Help on function get_spd in module ida_frame: + +get_spd(*args) -> 'sval_t' + get_spd(pfn, ea) -> sval_t + + + Get difference between the initial and current values of ESP. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address of an instruction (C++: ea_t) + @return: 0 or the difference, usually a negative number. returns the + sp-diff before executing the instruction. + +Help on function get_stkvar in module ida_frame: + +get_stkvar(*args) -> 'PyObject *' + get_stkvar(insn, op, v) -> PyObject * + + + Get pointer to stack variable + @param op: reference to instruction operand + @param v: immediate value in the operand (usually op.addr) + @return: + - None on failure + - tuple(member_t, actval) + where actval: actual value used to fetch stack variable + +Help on function has_regvar in module ida_frame: + +has_regvar(*args) -> 'bool' + has_regvar(pfn, ea) -> bool + + + Is there a register variable definition? + + @param pfn: function in question (C++: func_t *) + @param ea: current address (C++: ea_t) + +Help on function is_funcarg_off in module ida_frame: + +is_funcarg_off(*args) -> 'bool' + is_funcarg_off(pfn, frameoff) -> bool + + + Does the given offset lie within the arguments section? + + + @param pfn (C++: const func_t *) + @param frameoff (C++: uval_t) + +Help on class llabel_t in module ida_frame: + +class llabel_t(builtins.object) + | Proxy of C++ llabel_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> llabel_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_llabel_t(...) + | delete_llabel_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | llabel_t_ea_get(self) -> ea_t + | + | name + | llabel_t_name_get(self) -> char * + | + | thisown + | The membership flag + +Help on function lvar_off in module ida_frame: + +lvar_off(*args) -> 'sval_t' + lvar_off(pfn, frameoff) -> sval_t + + + Does the given offset lie within the local variables section? + + + @param pfn (C++: const func_t *) + @param frameoff (C++: uval_t) + +Help on function recalc_spd in module ida_frame: + +recalc_spd(*args) -> 'bool' + recalc_spd(cur_ea) -> bool + + + Recalculate SP delta for an instruction that stops execution. The next + instruction is not reached from the current instruction. We need to + recalculate SP for the next instruction.This function will create a + new automatic SP register change point if necessary. It should be + called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the + current instruction doesn't pass the execution flow to the next + instruction. + + @param cur_ea: linear address of the current instruction (C++: ea_t) + +Help on class regvar_t in module ida_frame: + +class regvar_t(ida_range.range_t) + | Proxy of C++ regvar_t class. + | + | Method resolution order: + | regvar_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regvar_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_regvar_t(...) + | delete_regvar_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | canon + | regvar_t_canon_get(self) -> char * + | + | cmt + | regvar_t_cmt_get(self) -> char * + | + | thisown + | The membership flag + | + | user + | regvar_t_user_get(self) -> char * + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on function rename_regvar in module ida_frame: + +rename_regvar(*args) -> 'int' + rename_regvar(pfn, v, user) -> int + + + Rename a register variable. + + @param pfn: function in question (C++: func_t *) + @param v: variable to rename (C++: regvar_t *) + @param user: new user-defined name for the register (C++: const char + *) + @return: Register variable error codes + +Help on function set_frame_size in module ida_frame: + +set_frame_size(*args) -> 'bool' + set_frame_size(pfn, frsize, frregs, argsize) -> bool + + + Set size of function frame. Note: The returned size may not include + all stack arguments. It does so only for __stdcall and __fastcall + calling conventions. To get the entire frame size for all cases use + get_struc_size(get_frame(pfn)). + + @param pfn: pointer to function structure (C++: func_t *) + @param frsize: size of function local variables (C++: asize_t) + @param frregs: size of saved registers (C++: ushort) + @param argsize: size of function arguments that will be purged from + the stack upon return (C++: asize_t) + @return: success + +Help on function set_purged in module ida_frame: + +set_purged(*args) -> 'bool' + set_purged(ea, nbytes, override_old_value) -> bool + + + Set the number of purged bytes for a function or data item (funcptr). + This function will update the database and plan to reanalyze items + referencing the specified address. It works only for processors with + 'PR_PURGING' bit in 16 and 32 bit modes. + + @param ea: address of the function of item (C++: ea_t) + @param nbytes: number of purged bytes (C++: int) + @param override_old_value: may overwrite old information about purged + bytes (C++: bool) + @return: success + +Help on function set_regvar_cmt in module ida_frame: + +set_regvar_cmt(*args) -> 'int' + set_regvar_cmt(pfn, v, cmt) -> int + + + Set comment for a register variable. + + @param pfn: function in question (C++: func_t *) + @param v: variable to rename (C++: regvar_t *) + @param cmt: new comment (C++: const char *) + @return: Register variable error codes + +Help on function soff_to_fpoff in module ida_frame: + +soff_to_fpoff(*args) -> 'sval_t' + soff_to_fpoff(pfn, soff) -> sval_t + + + Convert struct offsets into fp-relative offsets. This function + converts the offsets inside the 'struc_t' object into the frame + pointer offsets (for example, EBP-relative). + + @param pfn (C++: func_t *) + @param soff (C++: uval_t) + +Help on class stkpnt_t in module ida_frame: + +class stkpnt_t(builtins.object) + | Proxy of C++ stkpnt_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> stkpnt_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_stkpnt_t(...) + | delete_stkpnt_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | stkpnt_t_ea_get(self) -> ea_t + | + | spd + | stkpnt_t_spd_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class stkpnts_t in module ida_frame: + +class stkpnts_t(builtins.object) + | Proxy of C++ stkpnts_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> stkpnts_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_stkpnts_t(...) + | delete_stkpnts_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function update_fpd in module ida_frame: + +update_fpd(*args) -> 'bool' + update_fpd(pfn, fpd) -> bool + + + Update frame pointer delta. + + @param pfn: pointer to function structure (C++: func_t *) + @param fpd: new fpd value. cannot be bigger than the local variable + range size. (C++: asize_t) + @return: success + +Help on class xreflist_entry_t in module ida_frame: + +class xreflist_entry_t(builtins.object) + | Proxy of C++ xreflist_entry_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> xreflist_entry_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_xreflist_entry_t(...) + | delete_xreflist_entry_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | xreflist_entry_t_ea_get(self) -> ea_t + | + | opnum + | xreflist_entry_t_opnum_get(self) -> uchar + | + | thisown + | The membership flag + | + | type + | xreflist_entry_t_type_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class xreflist_t in module ida_frame: + +class xreflist_t(builtins.object) + | Proxy of C++ qvector< xreflist_entry_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'xreflist_entry_t const &' + | __getitem__(self, i) -> xreflist_entry_t + | + | __init__(self, *args) + | __init__(self) -> xreflist_t + | __init__(self, x) -> xreflist_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_xreflist_t(...) + | delete_xreflist_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'xreflist_entry_t const &' + | at(self, _idx) -> xreflist_entry_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< xreflist_entry_t >::const_iterator' + | begin(self) -> xreflist_entry_t + | begin(self) -> xreflist_entry_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< xreflist_entry_t >::const_iterator' + | end(self) -> xreflist_entry_t + | end(self) -> xreflist_entry_t + | + | erase(self, *args) -> 'qvector< xreflist_entry_t >::iterator' + | erase(self, it) -> xreflist_entry_t + | erase(self, first, last) -> xreflist_entry_t + | + | extract(self, *args) -> 'xreflist_entry_t *' + | extract(self) -> xreflist_entry_t + | + | find(self, *args) -> 'qvector< xreflist_entry_t >::const_iterator' + | find(self, x) -> xreflist_entry_t + | find(self, x) -> xreflist_entry_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=xreflist_entry_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< xreflist_entry_t >::iterator' + | insert(self, it, x) -> xreflist_entry_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'xreflist_entry_t &' + | push_back(self, x) + | push_back(self) -> xreflist_entry_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +=== ida_frame EPYDOC INJECTIONS === +ida_frame.REGVAR_ERROR_ARG +""" +function arguments are bad +""" + +ida_frame.REGVAR_ERROR_NAME +""" +the provided name(s) can't be accepted +""" + +ida_frame.REGVAR_ERROR_OK +""" +all ok +""" + +ida_frame.REGVAR_ERROR_RANGE +""" +the definition range is bad +""" + +ida_frame.STKVAR_VALID_SIZE +""" +x.dtyp contains correct variable type (for insns like 'lea' this bit +must be off) in general, dr_O references do not allow to determine the +variable size +""" +=== ida_frame EPYDOC INJECTIONS END === +Help on function add_func in module ida_funcs: + +add_func(*args) -> 'bool' + add_func(ea1, ea2=BADADDR) -> bool + + + Add a new function. If the function end address is 'BADADDR' , then + IDA will try to determine the function bounds by calling + find_func_bounds(..., 'FIND_FUNC_DEFINE' ). + + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @return: success + +Help on function add_func_ex in module ida_funcs: + +add_func_ex(*args) -> 'bool' + add_func_ex(pfn) -> bool + + + Add a new function. If the fn->end_ea is 'BADADDR' , then IDA will try + to determine the function bounds by calling find_func_bounds(..., + 'FIND_FUNC_DEFINE' ). + + @param pfn: ptr to filled function structure (C++: func_t *) + @return: success + +Help on function add_regarg in module ida_funcs: + +add_regarg(*args) -> 'void' + add_regarg(pfn, reg, tif, name) + +Help on function append_func_tail in module ida_funcs: + +append_func_tail(*args) -> 'bool' + append_func_tail(pfn, ea1, ea2) -> bool + + + Append a new tail chunk to the function definition. If the tail + already exists, then it will simply be added to the function tail list + Otherwise a new tail will be created and its owner will be set to be + our function If a new tail cannot be created, then this function will + fail. + + @param pfn (C++: func_t *) + @param ea1: start of the tail. If a tail already exists at the + specified address it must start at 'ea1' (C++: ea_t) + @param ea2: end of the tail. If a tail already exists at the specified + address it must end at 'ea2'. If specified as BADADDR, IDA + will determine the end address itself. (C++: ea_t) + +Help on function apply_idasgn_to in module ida_funcs: + +apply_idasgn_to(*args) -> 'int' + apply_idasgn_to(signame, ea, is_startup) -> int + + + Apply a signature file to the specified address. + + @param signame: short name of signature file (the file name without + path) (C++: const char *) + @param ea: address to apply the signature (C++: ea_t) + @param is_startup: if set, then the signature is treated as a startup + one for startup signature ida doesn't rename the + first function of the applied module. (C++: bool) + @return: Library function codes + +Help on function apply_startup_sig in module ida_funcs: + +apply_startup_sig(*args) -> 'bool' + apply_startup_sig(ea, startup) -> bool + + + Apply a startup signature file to the specified address. + + @param ea: address to apply the signature to; usually \inf{start_ea} + (C++: ea_t) + @param startup: the name of the signature file without path and + extension (C++: const char *) + @return: true if successfully applied the signature + +Help on function calc_func_size in module ida_funcs: + +calc_func_size(*args) -> 'asize_t' + calc_func_size(pfn) -> asize_t + + + Calculate function size. This function takes into account all + fragments of the function. + + @param pfn: ptr to function structure (C++: func_t *) + +Help on function calc_idasgn_state in module ida_funcs: + +calc_idasgn_state(*args) -> 'int' + calc_idasgn_state(n) -> int + + + Get state of a signature in the list of planned signatures + + @param n: number of signature in the list (0.. get_idasgn_qty() -1) + (C++: int) + @return: state of signature or IDASGN_BADARG + +Help on function calc_thunk_func_target in module ida_funcs: + +calc_thunk_func_target(*args) + calc_thunk_func_target(pfn) -> ea_t + + + Calculate target of a thunk function. + + @param pfn: pointer to function (may not be NULL) (C++: func_t *) + @return: the target function or BADADDR + +Help on function del_func in module ida_funcs: + +del_func(*args) -> 'bool' + del_func(ea) -> bool + + + Delete a function. + + @param ea: any address in the function entry chunk (C++: ea_t) + @return: success + +Help on function del_idasgn in module ida_funcs: + +del_idasgn(*args) -> 'int' + del_idasgn(n) -> int + + + Remove signature from the list of planned signatures. + + @param n: number of signature in the list (0.. get_idasgn_qty() -1) + (C++: int) + @return: IDASGN_OK , IDASGN_BADARG , IDASGN_APPLIED + +Help on function f_any in module ida_funcs: + +f_any(*args) -> 'bool' + f_any(arg1, arg2) -> bool + + + Helper function to accept any address. + +Help on function find_func_bounds in module ida_funcs: + +find_func_bounds(*args) -> 'int' + find_func_bounds(nfn, flags) -> int + + + Determine the boundaries of a new function. This function tries to + find the start and end addresses of a new function. It calls the + module with \ph{func_bounds} in order to fine tune the function + boundaries. + + @param nfn: structure to fill with information \ nfn->start_ea points + to the start address of the new function. (C++: func_t *) + @param flags: Find function bounds flags (C++: int) + @return: Find function bounds result codes + +Help on function func_contains in module ida_funcs: + +func_contains(*args) -> 'bool' + func_contains(pfn, ea) -> bool + + + Does the given function contain the given address? + + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on function func_does_return in module ida_funcs: + +func_does_return(*args) -> 'bool' + func_does_return(callee) -> bool + + + Does the function return?. To calculate the answer, 'FUNC_NORET' flag + and is_noret() are consulted The latter is required for imported + functions in the .idata section. Since in .idata we have only function + pointers but not functions, we have to introduce a special flag for + them. + + @param callee (C++: ea_t) + +Help on function func_item_iterator_decode_preceding_insn in module ida_funcs: + +func_item_iterator_decode_preceding_insn(*args) -> 'bool' + func_item_iterator_decode_preceding_insn(fii, visited, p_farref, out) -> bool + +Help on function func_item_iterator_decode_prev_insn in module ida_funcs: + +func_item_iterator_decode_prev_insn(*args) -> 'bool' + func_item_iterator_decode_prev_insn(fii, out) -> bool + +Help on function func_item_iterator_next in module ida_funcs: + +func_item_iterator_next(*args) -> 'bool' + func_item_iterator_next(fii, testf, ud) -> bool + +Help on function func_item_iterator_prev in module ida_funcs: + +func_item_iterator_prev(*args) -> 'bool' + func_item_iterator_prev(fii, testf, ud) -> bool + +Help on class func_item_iterator_t in module ida_funcs: + +class func_item_iterator_t(builtins.object) + | Proxy of C++ func_item_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_item_iterator_t + | __init__(self, pfn, _ea=BADADDR) -> func_item_iterator_t + | + | __next__(self, *args) -> 'bool' + | __next__(self, func, ud) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_item_iterator_t(...) + | delete_func_item_iterator_t(self) + | + | chunk(self, *args) -> 'range_t const &' + | chunk(self) -> range_t + | + | current(self, *args) -> 'ea_t' + | current(self) -> ea_t + | + | decode_preceding_insn(self, *args) -> 'bool' + | decode_preceding_insn(self, visited, p_farref, out) -> bool + | + | decode_prev_insn(self, *args) -> 'bool' + | decode_prev_insn(self, out) -> bool + | + | first(self, *args) -> 'bool' + | first(self) -> bool + | + | last(self, *args) -> 'bool' + | last(self) -> bool + | + | next = __next__(self, *args) -> 'bool' + | + | next_addr(self, *args) -> 'bool' + | next_addr(self) -> bool + | + | next_code(self, *args) -> 'bool' + | next_code(self) -> bool + | + | next_data(self, *args) -> 'bool' + | next_data(self) -> bool + | + | next_head(self, *args) -> 'bool' + | next_head(self) -> bool + | + | next_not_tail(self, *args) -> 'bool' + | next_not_tail(self) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, func, ud) -> bool + | + | prev_addr(self, *args) -> 'bool' + | prev_addr(self) -> bool + | + | prev_code(self, *args) -> 'bool' + | prev_code(self) -> bool + | + | prev_data(self, *args) -> 'bool' + | prev_data(self) -> bool + | + | prev_head(self, *args) -> 'bool' + | prev_head(self) -> bool + | + | prev_not_tail(self, *args) -> 'bool' + | prev_not_tail(self) -> bool + | + | set(self, *args) -> 'bool' + | set(self, pfn, _ea=BADADDR) -> bool + | + | set_range(self, *args) -> 'bool' + | set_range(self, ea1, ea2) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function func_parent_iterator_set in module ida_funcs: + +func_parent_iterator_set(*args) -> 'bool' + func_parent_iterator_set(fpi, pfn) -> bool + +Help on class func_parent_iterator_t in module ida_funcs: + +class func_parent_iterator_t(builtins.object) + | Proxy of C++ func_parent_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_parent_iterator_t + | __init__(self, _fnt) -> func_parent_iterator_t + | + | __next__(self, *args) -> 'bool' + | __next__(self) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_parent_iterator_t(...) + | delete_func_parent_iterator_t(self) + | + | first(self, *args) -> 'bool' + | first(self) -> bool + | + | last(self, *args) -> 'bool' + | last(self) -> bool + | + | next = __next__(self, *args) -> 'bool' + | + | parent(self, *args) -> 'ea_t' + | parent(self) -> ea_t + | + | prev(self, *args) -> 'bool' + | prev(self) -> bool + | + | reset_fnt(self, *args) -> 'void' + | reset_fnt(self, _fnt) + | + | set(self, *args) -> 'bool' + | set(self, _fnt) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on class func_t in module ida_funcs: + +class func_t(ida_range.range_t) + | Proxy of C++ func_t class. + | + | Method resolution order: + | func_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __get_points__(self, *args) -> 'dynamic_wrapped_array_t< stkpnt_t >' + | __get_points__(self) -> stkpnt_array + | + | __get_regvars__(self, *args) -> 'dynamic_wrapped_array_t< regvar_t >' + | __get_regvars__(self) -> regvar_array + | + | __get_tails__(self, *args) -> 'dynamic_wrapped_array_t< range_t >' + | __get_tails__(self) -> range_array + | + | __init__(self, *args) + | __init__(self, start=0, end=0, f=0) -> func_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_t(...) + | delete_func_t(self) + | + | analyzed_sp(self, *args) -> 'bool' + | analyzed_sp(self) -> bool + | + | does_return(self, *args) -> 'bool' + | does_return(self) -> bool + | + | is_far(self, *args) -> 'bool' + | is_far(self) -> bool + | + | need_prolog_analysis(self, *args) -> 'bool' + | need_prolog_analysis(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | argsize + | func_t_argsize_get(self) -> asize_t + | + | color + | func_t_color_get(self) -> bgcolor_t + | + | flags + | func_t_flags_get(self) -> uint64 + | + | fpd + | func_t_fpd_get(self) -> asize_t + | + | frame + | func_t_frame_get(self) -> uval_t + | + | frregs + | func_t_frregs_get(self) -> ushort + | + | frsize + | func_t_frsize_get(self) -> asize_t + | + | llabelqty + | func_t_llabelqty_get(self) -> int + | + | llabels + | func_t_llabels_get(self) -> llabel_t * + | + | owner + | func_t_owner_get(self) -> ea_t + | + | pntqty + | func_t_pntqty_get(self) -> uint32 + | + | points + | __get_points__(self) -> stkpnt_array + | + | referers + | func_t_referers_get(self) -> ea_t * + | + | refqty + | func_t_refqty_get(self) -> int + | + | regargqty + | func_t_regargqty_get(self) -> int + | + | regargs + | func_t_regargs_get(self) -> regarg_t + | + | regvarqty + | func_t_regvarqty_get(self) -> int + | + | regvars + | __get_regvars__(self) -> regvar_array + | + | tailqty + | func_t_tailqty_get(self) -> int + | + | tails + | __get_tails__(self) -> range_array + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on function func_t__from_ptrval__ in module ida_funcs: + +func_t__from_ptrval__(*args) -> 'func_t *' + func_t__from_ptrval__(ptrval) -> func_t + +Help on function func_tail_iterator_set in module ida_funcs: + +func_tail_iterator_set(*args) -> 'bool' + func_tail_iterator_set(fti, pfn, ea) -> bool + +Help on function func_tail_iterator_set_ea in module ida_funcs: + +func_tail_iterator_set_ea(*args) -> 'bool' + func_tail_iterator_set_ea(fti, ea) -> bool + +Help on class func_tail_iterator_t in module ida_funcs: + +class func_tail_iterator_t(builtins.object) + | Proxy of C++ func_tail_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_tail_iterator_t + | __init__(self, _pfn, ea=BADADDR) -> func_tail_iterator_t + | + | __next__(self, *args) -> 'bool' + | __next__(self) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_tail_iterator_t(...) + | delete_func_tail_iterator_t(self) + | + | chunk(self, *args) -> 'range_t const &' + | chunk(self) -> range_t + | + | first(self, *args) -> 'bool' + | first(self) -> bool + | + | last(self, *args) -> 'bool' + | last(self) -> bool + | + | main(self, *args) -> 'bool' + | main(self) -> bool + | + | next = __next__(self, *args) -> 'bool' + | + | prev(self, *args) -> 'bool' + | prev(self) -> bool + | + | set(self, *args) -> 'bool' + | set(self, _pfn, ea=BADADDR) -> bool + | + | set_ea(self, *args) -> 'bool' + | set_ea(self, ea) -> bool + | + | set_range(self, *args) -> 'bool' + | set_range(self, ea1, ea2) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function get_current_idasgn in module ida_funcs: + +get_current_idasgn(*args) -> 'int' + get_current_idasgn() -> int + + + Get number of the the current signature. + + @return: 0..n-1 + +Help on function get_fchunk in module ida_funcs: + +get_fchunk(*args) -> 'func_t *' + get_fchunk(ea) -> func_t + + + Get pointer to function chunk structure by address. + + @param ea: any address in a function chunk (C++: ea_t) + @return: ptr to a function chunk or NULL. This function may return a + function entry as well as a function tail. + +Help on function get_fchunk_num in module ida_funcs: + +get_fchunk_num(*args) -> 'int' + get_fchunk_num(ea) -> int + + + Get ordinal number of a function chunk in the global list of function + chunks. + + @param ea: any address in the function chunk (C++: ea_t) + @return: number of function chunk (0.. get_fchunk_qty() -1). -1 means + 'no function chunk at the specified address'. + +Help on function get_fchunk_qty in module ida_funcs: + +get_fchunk_qty(*args) -> 'size_t' + get_fchunk_qty() -> size_t + + + Get total number of function chunks in the program. + +Help on function get_fchunk_referer in module ida_funcs: + +get_fchunk_referer(*args) -> 'ea_t' + get_fchunk_referer(ea, idx) -> ea_t + +Help on function get_func in module ida_funcs: + +get_func(*args) -> 'func_t *' + get_func(ea) -> func_t + + + Get pointer to function structure by address. + + @param ea: any address in a function (C++: ea_t) + @return: ptr to a function or NULL. This function returns a function + entry chunk. + +Help on function get_func_bitness in module ida_funcs: + +get_func_bitness(*args) -> 'int' + get_func_bitness(pfn) -> int + + + Get function bitness (which is equal to the function segment bitness). + pfn==NULL => returns 0 + + @param pfn (C++: const func_t *) + +Help on function get_func_bits in module ida_funcs: + +get_func_bits(*args) -> 'int' + get_func_bits(pfn) -> int + + + Get number of bits in the function addressing. + + + @param pfn (C++: const func_t *) + +Help on function get_func_bytes in module ida_funcs: + +get_func_bytes(*args) -> 'int' + get_func_bytes(pfn) -> int + + + Get number of bytes in the function addressing. + + + @param pfn (C++: const func_t *) + +Help on function get_func_chunknum in module ida_funcs: + +get_func_chunknum(*args) -> 'int' + get_func_chunknum(pfn, ea) -> int + + + Get the containing tail chunk of 'ea'. + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on function get_func_cmt in module ida_funcs: + +get_func_cmt(*args) -> 'qstring *' + get_func_cmt(pfn, repeatable) -> str + + + Get function comment. + + @param pfn: ptr to function structure (C++: const func_t *) + @param repeatable: get repeatable comment? (C++: bool) + @return: size of comment or -1 In fact this function works with + function chunks too. + +Help on function get_func_name in module ida_funcs: + +get_func_name(*args) -> 'qstring *' + get_func_name(ea) -> str + + + Get function name. + + @param ea: any address in the function (C++: ea_t) + @return: length of the function name + +Help on function get_func_num in module ida_funcs: + +get_func_num(*args) -> 'int' + get_func_num(ea) -> int + + + Get ordinal number of a function. + + @param ea: any address in the function (C++: ea_t) + @return: number of function (0.. get_func_qty() -1). -1 means 'no + function at the specified address'. + +Help on function get_func_qty in module ida_funcs: + +get_func_qty(*args) -> 'size_t' + get_func_qty() -> size_t + + + Get total number of functions in the program. + +Help on function get_func_ranges in module ida_funcs: + +get_func_ranges(*args) -> 'ea_t' + get_func_ranges(ranges, pfn) -> ea_t + + + Get function ranges. + + @param ranges: buffer to receive the range info (C++: rangeset_t *) + @param pfn: ptr to function structure (C++: func_t *) + @return: end address of the last function range (BADADDR-error) + +Help on function get_idasgn_desc in module ida_funcs: + +get_idasgn_desc(*args) -> 'PyObject *' + get_idasgn_desc(n) -> PyObject * + + + Get information about a signature in the list. + It returns: (name of signature, names of optional libraries) + + See also: get_idasgn_desc_with_matches + + @param n: number of signature in the list (0..get_idasgn_qty()-1) + @return: None on failure or tuple(signame, optlibs) + +Help on function get_idasgn_desc_with_matches in module ida_funcs: + +get_idasgn_desc_with_matches(*args) -> 'PyObject *' + get_idasgn_desc_with_matches(n) -> PyObject * + + + Get information about a signature in the list. + It returns: (name of signature, names of optional libraries, number of matches) + + @param n: number of signature in the list (0..get_idasgn_qty()-1) + @return: None on failure or tuple(signame, optlibs, nmatches) + +Help on function get_idasgn_qty in module ida_funcs: + +get_idasgn_qty(*args) -> 'int' + get_idasgn_qty() -> int + + + Get number of signatures in the list of planned and applied + signatures. + + @return: 0..n + +Help on function get_idasgn_title in module ida_funcs: + +get_idasgn_title(*args) -> 'qstring *' + get_idasgn_title(name) -> str + + + Get full description of the signature by its short name. + + @param name: short name of a signature (C++: const char *) + @return: size of signature description or -1 + +Help on function get_next_fchunk in module ida_funcs: + +get_next_fchunk(*args) -> 'func_t *' + get_next_fchunk(ea) -> func_t + + + Get pointer to the next function chunk in the global list. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function chunk or NULL if next function chunk doesn't + exist + +Help on function get_next_func in module ida_funcs: + +get_next_func(*args) -> 'func_t *' + get_next_func(ea) -> func_t + + + Get pointer to the next function. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function or NULL if next function doesn't exist + +Help on function get_next_func_addr in module ida_funcs: + +get_next_func_addr(*args) -> 'ea_t' + get_next_func_addr(pfn, ea) -> ea_t + +Help on function get_prev_fchunk in module ida_funcs: + +get_prev_fchunk(*args) -> 'func_t *' + get_prev_fchunk(ea) -> func_t + + + Get pointer to the previous function chunk in the global list. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function chunk or NULL if previous function chunk + doesn't exist + +Help on function get_prev_func in module ida_funcs: + +get_prev_func(*args) -> 'func_t *' + get_prev_func(ea) -> func_t + + + Get pointer to the previous function. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function or NULL if previous function doesn't exist + +Help on function get_prev_func_addr in module ida_funcs: + +get_prev_func_addr(*args) -> 'ea_t' + get_prev_func_addr(pfn, ea) -> ea_t + +Help on function getn_fchunk in module ida_funcs: + +getn_fchunk(*args) -> 'func_t *' + getn_fchunk(n) -> func_t + + + Get pointer to function chunk structure by number. + + @param n: number of function chunk, is in range 0.. get_fchunk_qty() + -1 (C++: int) + @return: ptr to a function chunk or NULL. This function may return a + function entry as well as a function tail. + +Help on function getn_func in module ida_funcs: + +getn_func(*args) -> 'func_t *' + getn_func(n) -> func_t + + + Get pointer to function structure by number. + + @param n: number of function, is in range 0.. get_func_qty() -1 (C++: + size_t) + @return: ptr to a function or NULL. This function returns a function + entry chunk. + +Help on function is_finally_visible_func in module ida_funcs: + +is_finally_visible_func(*args) -> 'bool' + is_finally_visible_func(pfn) -> bool + + + Is the function visible (event after considering 'SCF_SHHID_FUNC' )? + + + @param pfn (C++: func_t *) + +Help on function is_func_entry in module ida_funcs: + +is_func_entry(*args) -> 'bool' + is_func_entry(pfn) -> bool + + + Does function describe a function entry chunk? + + + @param pfn (C++: const func_t *) + +Help on function is_func_locked in module ida_funcs: + +is_func_locked(*args) -> 'bool' + is_func_locked(pfn) -> bool + + + Is the function pointer locked? + + + @param pfn (C++: const func_t *) + +Help on function is_func_tail in module ida_funcs: + +is_func_tail(*args) -> 'bool' + is_func_tail(pfn) -> bool + + + Does function describe a function tail chunk? + + + @param pfn (C++: const func_t *) + +Help on function is_same_func in module ida_funcs: + +is_same_func(*args) -> 'bool' + is_same_func(ea1, ea2) -> bool + + + Do two addresses belong to the same function? + + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on function is_visible_func in module ida_funcs: + +is_visible_func(*args) -> 'bool' + is_visible_func(pfn) -> bool + + + Is the function visible (not hidden)? + + + @param pfn (C++: func_t *) + +Help on class lock_func in module ida_funcs: + +class lock_func(builtins.object) + | Proxy of C++ lock_func class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _pfn) -> lock_func + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lock_func(...) + | delete_lock_func(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 + +Help on function lock_func_range in module ida_funcs: + +lock_func_range(*args) -> 'void' + lock_func_range(pfn, lock) + + + Lock function pointer Locked pointers are guaranteed to remain valid + until they are unlocked. Ranges with locked pointers cannot be deleted + or moved. + + @param pfn (C++: const func_t *) + @param lock (C++: bool) + +Help on function plan_to_apply_idasgn in module ida_funcs: + +plan_to_apply_idasgn(*args) -> 'int' + plan_to_apply_idasgn(fname) -> int + + + Add a signature file to the list of planned signature files. + + @param fname: file name. should not contain directory part. (C++: + const char *) + @return: 0 if failed, otherwise number of planned (and applied) + signatures + +Help on class range_array in module ida_funcs: + +class range_array(builtins.object) + | Proxy of C++ dynamic_wrapped_array_t< range_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __init__(self, *args) + | __init__(self, _data, _count) -> range_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_range_array(...) + | delete_range_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | range_array_count_get(self) -> size_t + | + | data + | range_array_data_get(self) -> range_t + | + | thisown + | The membership flag + +Help on function read_regargs in module ida_funcs: + +read_regargs(*args) -> 'void' + read_regargs(pfn) + +Help on function reanalyze_function in module ida_funcs: + +reanalyze_function(*args) -> 'void' + reanalyze_function(pfn, ea1=0, ea2=BADADDR, analyze_parents=False) + + + Reanalyze a function. This function plans to analyzes all chunks of + the given function. Optional parameters (ea1, ea2) may be used to + narrow the analyzed range. + + @param pfn: pointer to a function (C++: func_t *) + @param ea1: start of the range to analyze (C++: ea_t) + @param ea2: end of range to analyze (C++: ea_t) + @param analyze_parents: meaningful only if pfn points to a function + tail. if true, all tail parents will be + reanalyzed. if false, only the given tail will + be reanalyzed. (C++: bool) + +Help on function reanalyze_noret_flag in module ida_funcs: + +reanalyze_noret_flag(*args) -> 'bool' + reanalyze_noret_flag(ea) -> bool + + + Plan to reanalyze noret flag. This function does not remove FUNC_NORET + if it is already present. It just plans to reanalysis. + + @param ea (C++: ea_t) + +Help on class regarg_t in module ida_funcs: + +class regarg_t(builtins.object) + | Proxy of C++ regarg_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regarg_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_regarg_t(...) + | delete_regarg_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | regarg_t_name_get(self) -> char * + | + | reg + | regarg_t_reg_get(self) -> int + | + | thisown + | The membership flag + | + | type + | regarg_t_type_get(self) -> type_t * + +Help on class regvar_array in module ida_funcs: + +class regvar_array(builtins.object) + | Proxy of C++ dynamic_wrapped_array_t< regvar_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'regvar_t const &' + | __getitem__(self, i) -> regvar_t const & + | + | __init__(self, *args) + | __init__(self, _data, _count) -> regvar_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_regvar_array(...) + | delete_regvar_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | regvar_array_count_get(self) -> size_t + | + | data + | regvar_array_data_get(self) -> regvar_t * + | + | thisown + | The membership flag + +Help on function remove_func_tail in module ida_funcs: + +remove_func_tail(*args) -> 'bool' + remove_func_tail(pfn, tail_ea) -> bool + + + Remove a function tail. If the tail belongs only to one function, it + will be completely removed. Otherwise if the function was the tail + owner, the first function using this tail becomes the owner of the + tail. + + @param pfn (C++: func_t *) + @param tail_ea (C++: ea_t) + +Help on function set_func_cmt in module ida_funcs: + +set_func_cmt(*args) -> 'bool' + set_func_cmt(pfn, cmt, repeatable) -> bool + + + Set function comment. This function works with function chunks too. + + @param pfn: ptr to function structure (C++: const func_t *) + @param cmt: comment string, may be multiline (with ' '). Use empty + str ("") to delete comment (C++: const char *) + @param repeatable: set repeatable comment? (C++: bool) + +Help on function set_func_end in module ida_funcs: + +set_func_end(*args) -> 'bool' + set_func_end(ea, newend) -> bool + + + Move function chunk end address. + + @param ea: any address in the function (C++: ea_t) + @param newend: new end address of the function (C++: ea_t) + @return: success + +Help on function set_func_name_if_jumpfunc in module ida_funcs: + +set_func_name_if_jumpfunc(*args) -> 'int' + set_func_name_if_jumpfunc(pfn, oldname) -> int + + + Give a meaningful name to function if it consists of only 'jump' + instruction. + + @param pfn: pointer to function (may be NULL) (C++: func_t *) + @param oldname: old name of function. if old name was in "j_..." form, + then we may discard it and set a new name. if oldname + is not known, you may pass NULL. (C++: const char *) + @return: success + +Help on function set_func_start in module ida_funcs: + +set_func_start(*args) -> 'int' + set_func_start(ea, newstart) -> int + + + Move function chunk start address. + + @param ea: any address in the function (C++: ea_t) + @param newstart: new end address of the function (C++: ea_t) + @return: Function move result codes + +Help on function set_noret_insn in module ida_funcs: + +set_noret_insn(*args) -> 'bool' + set_noret_insn(insn_ea, noret) -> bool + + + Signal a non-returning instruction. This function can be used by the + processor module to tell the kernel about non-returning instructions + (like call exit). The kernel will perform the global function analysis + and find out if the function returns at all. This analysis will be + done at the first call to 'func_does_return()' + + @param insn_ea (C++: ea_t) + @param noret (C++: bool) + @return: true if the instruction 'noret' flag has been changed + +Help on function set_tail_owner in module ida_funcs: + +set_tail_owner(*args) -> 'bool' + set_tail_owner(fnt, func_start) -> bool + + + Set a function as the possessing function of a function tail. The + function should already refer to the tail (after append_func_tail). + + @param fnt (C++: func_t *) + @param func_start (C++: ea_t) + +Help on function set_visible_func in module ida_funcs: + +set_visible_func(*args) -> 'void' + set_visible_func(pfn, visible) + + + Set visibility of function. + + + @param pfn (C++: func_t *) + @param visible (C++: bool) + +Help on class stkpnt_array in module ida_funcs: + +class stkpnt_array(builtins.object) + | Proxy of C++ dynamic_wrapped_array_t< stkpnt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'stkpnt_t const &' + | __getitem__(self, i) -> stkpnt_t const & + | + | __init__(self, *args) + | __init__(self, _data, _count) -> stkpnt_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_stkpnt_array(...) + | delete_stkpnt_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | stkpnt_array_count_get(self) -> size_t + | + | data + | stkpnt_array_data_get(self) -> stkpnt_t * + | + | thisown + | The membership flag + +Help on function try_to_add_libfunc in module ida_funcs: + +try_to_add_libfunc(*args) -> 'int' + try_to_add_libfunc(ea) -> int + + + Apply the currently loaded signature file to the specified address. If + a library function is found, then create a function and name it + accordingly. + + @param ea: any address in the program (C++: ea_t) + @return: Library function codes + +Help on function update_func in module ida_funcs: + +update_func(*args) -> 'bool' + update_func(pfn) -> bool + + + Update information about a function in the database ( 'func_t' ). You + must not change the function start and end addresses using this + function. Use 'set_func_start()' and 'set_func_end()' for it. + + @param pfn: ptr to function structure (C++: func_t *) + @return: success + +=== ida_funcs EPYDOC INJECTIONS === +ida_funcs.FIND_FUNC_DEFINE +""" +create instruction if undefined byte is encountered +""" + +ida_funcs.FIND_FUNC_EXIST +""" +its bounds are returned in 'nfn'. + +function exists already. +""" + +ida_funcs.FIND_FUNC_IGNOREFN +""" +ignore existing function boundaries. by default the function returns +function boundaries if ea belongs to a function. +""" + +ida_funcs.FIND_FUNC_KEEPBD +""" +just create instructions inside the boundaries. + +do not modify incoming function boundaries, +""" + +ida_funcs.FIND_FUNC_NORMAL +""" +stop processing if undefined byte is encountered +""" + +ida_funcs.FIND_FUNC_OK +""" +ok, 'nfn' is ready for 'add_func()' +""" + +ida_funcs.FIND_FUNC_UNDEF +""" +nfn->end_ea will have the address of the unexplored byte. + +function has instructions that pass execution flow to unexplored +bytes. +""" + +ida_funcs.FUNC_BOTTOMBP +""" +BP points to the bottom of the stack frame. +""" + +ida_funcs.FUNC_FAR +""" +Far function. +""" + +ida_funcs.FUNC_FRAME +""" +Function uses frame pointer (BP) +""" + +ida_funcs.FUNC_FUZZY_SP +""" +for example: and esp, 0FFFFFFF0h + +Function changes SP in untraceable way, +""" + +ida_funcs.FUNC_HIDDEN +""" +A hidden function chunk. +""" + +ida_funcs.FUNC_LIB +""" +Library function. +""" + +ida_funcs.FUNC_LUMINA +""" +Function info is provided by Lumina. +""" + +ida_funcs.FUNC_NORET +""" +Function doesn't return. +""" + +ida_funcs.FUNC_NORET_PENDING +""" +This flag is verified upon 'func_does_return()' + +Function 'non-return' analysis must be performed. +""" + +ida_funcs.FUNC_PROLOG_OK +""" +by last SP-analysis + +Prolog analysis has be performed +""" + +ida_funcs.FUNC_PURGED_OK +""" +'argsize' field has been validated. If this bit is clear and 'argsize' +is 0, then we do not known the real number of bytes removed from the +stack. This bit is handled by the processor module. +""" + +ida_funcs.FUNC_SP_READY +""" +SP-analysis has been performed. If this flag is on, the stack change +points should not be not modified anymore. Currently this analysis is +performed only for PC +""" + +ida_funcs.FUNC_STATICDEF +""" +Static function. +""" + +ida_funcs.FUNC_TAIL +""" +This is a function tail. Other bits must be clear (except +'FUNC_HIDDEN' ). +""" + +ida_funcs.FUNC_THUNK +""" +Thunk (jump) function. +""" + +ida_funcs.FUNC_USERFAR +""" +of the function + +User has specified far-ness +""" + +ida_funcs.IDASGN_APPLIED +""" +signature is already applied +""" + +ida_funcs.IDASGN_BADARG +""" +bad number of signature +""" + +ida_funcs.IDASGN_CURRENT +""" +signature is currently being applied +""" + +ida_funcs.IDASGN_OK +""" +ok +""" + +ida_funcs.IDASGN_PLANNED +""" +signature is planned to be applied +""" + +ida_funcs.LIBFUNC_DELAY +""" +no decision because of lack of information +""" + +ida_funcs.LIBFUNC_FOUND +""" +ok, library function is found +""" + +ida_funcs.LIBFUNC_NONE +""" +no, this is not a library function +""" + +ida_funcs.MOVE_FUNC_BADSTART +""" +bad new start address +""" + +ida_funcs.MOVE_FUNC_NOCODE +""" +no instruction at 'newstart' +""" + +ida_funcs.MOVE_FUNC_NOFUNC +""" +no function at 'ea' +""" + +ida_funcs.MOVE_FUNC_OK +""" +ok +""" + +ida_funcs.MOVE_FUNC_REFUSED +""" +a plugin refused the action +""" +=== ida_funcs EPYDOC INJECTIONS END === +Help on class BasicBlock in module ida_gdl: + +class BasicBlock(builtins.object) + | Basic block class. It is returned by the Flowchart class + | + | Methods defined here: + | + | __init__(self, id, bb, fc) + | Initialize self. See help(type(self)) for accurate signature. + | + | preds(self) + | Iterates the predecessors list + | + | succs(self) + | Iterates the successors list + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | startEA + +Help on class FlowChart in module ida_gdl: + +class FlowChart(builtins.object) + | Flowchart class used to determine basic blocks. + | Check ex_gdl_qflow_chart.py for sample usage. + | + | Methods defined here: + | + | __getitem__(self, index) + | Returns a basic block + | + | @return: BasicBlock + | + | __init__(self, f=None, bounds=None, flags=0) + | Constructor + | @param f: A func_t type, use get_func(ea) to get a reference + | @param bounds: A tuple of the form (start, end). Used if "f" is None + | @param flags: one of the FC_xxxx flags. One interesting flag is FC_PREDS + | + | __iter__(self) + | + | _getitem(self, index) + | + | refresh(self) + | Refreshes the flow chart + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | size + +Help on function display_gdl in module ida_gdl: + +display_gdl(*args) -> 'int' + display_gdl(fname) -> int + + + Display GDL file by calling wingraph32. The exact name of the grapher + is taken from the configuration file and set up by + 'setup_graph_subsystem()' . + + @param fname (C++: const char *) + @return: error code from os, 0 if ok + +Help on function gen_complex_call_chart in module ida_gdl: + +gen_complex_call_chart(*args) -> 'bool' + gen_complex_call_chart(filename, wait, title, ea1, ea2, flags, recursion_depth=-1) -> bool + + + Build and display a complex xref graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param wait: message to display during graph building (C++: const char + *) + @param title: graph title (C++: const char *) + @param ea1: address range (C++: ea_t) + @param ea2: address range (C++: ea_t) + @param flags: combination of Call chart building flags and Flow + graph building flags . if none of CHART_GEN_DOT , + CHART_GEN_GDL , CHART_WINGRAPH is specified, the + function will return false. (C++: int) + @param recursion_depth: optional limit of recursion (C++: int32) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function gen_flow_graph in module ida_gdl: + +gen_flow_graph(*args) -> 'bool' + gen_flow_graph(filename, title, pfn, ea1, ea2, gflags) -> bool + + + Build and display a flow graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param title: graph title (C++: const char *) + @param pfn: function to graph (C++: func_t *) + @param ea1: if pfn == NULL, then the address range (C++: ea_t) + @param ea2: if pfn == NULL, then the address range (C++: ea_t) + @param gflags: combination of Flow graph building flags . if none of + CHART_GEN_DOT , CHART_GEN_GDL , CHART_WINGRAPH is + specified, the function will return false (C++: int) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function gen_gdl in module ida_gdl: + +gen_gdl(*args) -> 'void' + gen_gdl(g, fname) + + + Create GDL file for graph. + + + @param g (C++: const gdl_graph_t *) + @param fname (C++: const char *) + +Help on function gen_simple_call_chart in module ida_gdl: + +gen_simple_call_chart(*args) -> 'bool' + gen_simple_call_chart(filename, wait, title, gflags) -> bool + + + Build and display a simple function call graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param wait: message to display during graph building (C++: const char + *) + @param title: graph title (C++: const char *) + @param gflags: combination of CHART_NOLIBFUNCS and Flow graph + building flags . if none of CHART_GEN_DOT , + CHART_GEN_GDL , CHART_WINGRAPH is specified, the + function will return false. (C++: int) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function is_noret_block in module ida_gdl: + +is_noret_block(*args) -> 'bool' + is_noret_block(btype) -> bool + + + Does this block never return? + + + @param btype (C++: fc_block_type_t) + +Help on function is_ret_block in module ida_gdl: + +is_ret_block(*args) -> 'bool' + is_ret_block(btype) -> bool + + + Does this block return? + + + @param btype (C++: fc_block_type_t) + +Help on class node_iterator in module ida_gdl: + +class node_iterator(builtins.object) + | Proxy of C++ node_iterator class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, n) -> bool + | + | __init__(self, *args) + | __init__(self, _g, n) -> node_iterator + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, n) -> bool + | + | __ref__(self, *args) -> 'int' + | __ref__(self) -> int + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_node_iterator(...) + | delete_node_iterator(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qbasic_block_t in module ida_gdl: + +class qbasic_block_t(ida_range.range_t) + | Proxy of C++ qbasic_block_t class. + | + | Method resolution order: + | qbasic_block_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> qbasic_block_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qbasic_block_t(...) + | delete_qbasic_block_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on class qflow_chart_t in module ida_gdl: + +class qflow_chart_t(builtins.object) + | Proxy of C++ qflow_chart_t class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'qbasic_block_t *' + | __getitem__(self, n) -> qbasic_block_t + | + | __init__(self, *args) + | __init__(self) -> qflow_chart_t + | __init__(self, _title, _pfn, _ea1, _ea2, _flags) -> qflow_chart_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qflow_chart_t(...) + | delete_qflow_chart_t(self) + | + | append_to_flowchart(self, *args) -> 'void' + | append_to_flowchart(self, ea1, ea2) + | + | calc_block_type(self, *args) -> 'fc_block_type_t' + | calc_block_type(self, blknum) -> fc_block_type_t + | + | create(self, *args) -> 'void' + | create(self, _title, _pfn, _ea1, _ea2, _flags) + | create(self, _title, ranges, _flags) + | + | get_node_label(self, *args) -> 'char *' + | get_node_label(self, arg2, arg3, arg4) -> char * + | + | is_noret_block(self, *args) -> 'bool' + | is_noret_block(self, blknum) -> bool + | + | is_ret_block(self, *args) -> 'bool' + | is_ret_block(self, blknum) -> bool + | + | npred(self, *args) -> 'int' + | npred(self, node) -> int + | + | nsucc(self, *args) -> 'int' + | nsucc(self, node) -> int + | + | pred(self, *args) -> 'int' + | pred(self, node, i) -> int + | + | print_names(self, *args) -> 'bool' + | print_names(self) -> bool + | + | print_node_attributes(self, *args) -> 'void' + | print_node_attributes(self, arg2, arg3) + | + | refresh(self, *args) -> 'void' + | refresh(self) + | + | size(self, *args) -> 'int' + | size(self) -> int + | + | succ(self, *args) -> 'int' + | succ(self, node, i) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bounds + | qflow_chart_t_bounds_get(self) -> range_t + | + | flags + | qflow_chart_t_flags_get(self) -> int + | + | nproper + | qflow_chart_t_nproper_get(self) -> int + | + | pfn + | qflow_chart_t_pfn_get(self) -> func_t * + | + | thisown + | The membership flag + | + | title + | qflow_chart_t_title_get(self) -> qstring * + +=== ida_gdl EPYDOC INJECTIONS === +ida_gdl.CHART_FOLLOW_DIRECTION +""" +analyze references to added blocks only in the direction of the +reference who discovered the current block +""" + +ida_gdl.CHART_GEN_DOT +""" +generate .dot file (file extension is forced to .dot) +""" + +ida_gdl.CHART_GEN_GDL +""" +generate .gdl file (file extension is forced to .gdl) +""" + +ida_gdl.CHART_IGNORE_LIB_FROM +""" +ignore references from library functions +""" + +ida_gdl.CHART_IGNORE_LIB_TO +""" +ignore references to library functions +""" + +ida_gdl.CHART_NOLIBFUNCS +""" +don't include library functions in the graph +""" + +ida_gdl.CHART_PRINT_DOTS +""" +print dots if xrefs exist outside of the range recursion depth +""" + +ida_gdl.CHART_PRINT_NAMES +""" +print labels for each block? +""" + +ida_gdl.CHART_RECURSIVE +""" +analyze added blocks +""" + +ida_gdl.CHART_REFERENCED +""" +references from the addresses in the list +""" + +ida_gdl.CHART_REFERENCING +""" +references to the addresses in the list +""" + +ida_gdl.CHART_WINGRAPH +""" +call grapher to display the graph +""" + +ida_gdl.FC_APPND +""" +multirange flowchart (set by append_to_flowchart) +""" + +ida_gdl.FC_CHKBREAK +""" +build_qflow_chart() may be aborted by user +""" + +ida_gdl.FC_NOEXT +""" +do not compute external blocks. Use this to prevent jumps leaving the +function from appearing in the flow chart. Unless specified, the +targets of those outgoing jumps will be present in the flow chart +under the form of one-instruction blocks +""" + +ida_gdl.FC_PREDS +""" +compute predecessor lists +""" + +ida_gdl.FC_PRINT +""" +print names (used only by display_flow_chart()) +""" +=== ida_gdl EPYDOC INJECTIONS END === +Help on class GraphViewer in module ida_graph: + +class GraphViewer(ida_kernwin.CustomIDAMemo) + | Proxy of C++ View_Hooks class. + | + | Method resolution order: + | GraphViewer + | ida_kernwin.CustomIDAMemo + | ida_kernwin.View_Hooks + | builtins.object + | + | Methods defined here: + | + | AddCommand(self, title, shortcut) + | + | AddEdge(self, src_node, dest_node) + | Creates an edge between two given node ids + | + | AddNode(self, obj) + | Creates a node associated with the given object and returns the node id + | + | Clear(self) + | Clears all the nodes and edges + | + | Close(self) + | Closes the graph. + | It is possible to call Show() again (which will recreate the graph) + | + | Count(self) + | Returns the node count + | + | OnCommand(self, cmd_id) + | + | OnPopup(self, widget, popup_handle) + | + | OnRefresh(self) + | Event called when the graph is refreshed or first created. + | From this event you are supposed to create nodes and edges. + | This callback is mandatory. + | + | @note: ***It is important to clear previous nodes before adding nodes.*** + | @return: Returning True tells the graph viewer to use the items. Otherwise old items will be used. + | + | Select(self, node_id) + | Selects a node on the graph + | + | Show(self) + | Shows an existing graph or creates a new one + | + | @return: Boolean + | + | __getitem__(self, idx) + | Returns a reference to the object associated with this node id + | + | __init__(self, title, close_open=False) + | Constructs the GraphView object. + | Please do not remove or rename the private fields + | + | @param title: The title of the graph window + | @param close_open: Should it attempt to close an existing graph (with same title) before creating this graph? + | + | __iter__(self) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | UI_Hooks_Trampoline = , , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | view_activated(self, view) + | + | view_click(self, view, ve) + | view_click(self, view, event) + | + | view_close(self, view, *args) + | view_close(self, view) + | + | view_curpos(self, view, *args) + | view_curpos(self, view) + | + | view_dblclick(self, view, ve) + | view_dblclick(self, view, event) + | + | view_deactivated(self, view) + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, view, ve) + | view_mouse_over(self, view, event) + | + | view_switched(self, view, rt) + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods inherited from ida_kernwin.CustomIDAMemo: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_kernwin.View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_View_Hooks(...) + | delete_View_Hooks(self) + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | view_created(self, *args) -> 'void' + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_kernwin.View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on class TPointDouble in module ida_graph: + +class TPointDouble(builtins.object) + | Proxy of C++ TPointDouble class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> TPointDouble + | __init__(self, a, b) -> TPointDouble + | __init__(self, r) -> TPointDouble + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_TPointDouble(...) + | delete_TPointDouble(self) + | + | add(self, *args) -> 'void' + | add(self, r) + | + | negate(self, *args) -> 'void' + | negate(self) + | + | sub(self, *args) -> 'void' + | sub(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | x + | TPointDouble_x_get(self) -> double + | + | y + | TPointDouble_y_get(self) -> double + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function calc_dist in module ida_graph: + +calc_dist(*args) -> 'double' + calc_dist(p, q) -> double + + + Calculate distance between p and q. + + + @param p (C++: point_t) + @param q (C++: point_t) + +Help on function clr_node_info in module ida_graph: + +clr_node_info(*args) -> 'void' + clr_node_info(gid, node, flags) + + + Clear node info for the given node. + + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @param flags: combination of Node info flags , identifying which + fields of node_info_t will be cleared (C++: uint32) + +Help on function create_disasm_graph in module ida_graph: + +create_disasm_graph(*args) -> 'mutable_graph_t *' + create_disasm_graph(ea) -> mutable_graph_t + create_disasm_graph(ranges) -> mutable_graph_t + + + Create a graph for the function that contains 'ea'. + + + @param ea (C++: ea_t) + +Help on function create_graph_viewer in module ida_graph: + +create_graph_viewer(*args) -> 'graph_viewer_t *' + create_graph_viewer(title, id, callback, ud, title_height, parent=None) -> graph_viewer_t * + + + Create a custom graph viewer. + + @param title: the widget title (C++: const char *) + @param id: graph id (C++: uval_t) + @param callback: callback to handle graph notifications ( + graph_notification_t ) (C++: hook_cb_t *) + @param ud: user data passed to callback (C++: void *) + @param title_height: node title height (C++: int) + @param parent (C++: TWidget *) + @return: new viewer + +Help on function create_mutable_graph in module ida_graph: + +create_mutable_graph(*args) -> 'mutable_graph_t *' + create_mutable_graph(id) -> mutable_graph_t + + + Create a new empty graph with given id. + + + @param id (C++: uval_t) + +Help on function create_user_graph_place in module ida_graph: + +create_user_graph_place(*args) -> 'user_graph_place_t *' + create_user_graph_place(node, lnnum) -> user_graph_place_t + + + Get a copy of a 'user_graph_place_t' (returns a pointer to static + storage) + + + @param node (C++: int) + @param lnnum (C++: int) + +Help on function del_node_info in module ida_graph: + +del_node_info(*args) -> 'void' + del_node_info(gid, node) + + + Delete the 'node_info_t' for the given node. + + + @param gid (C++: graph_id_t) + @param node (C++: int) + +Help on function delete_mutable_graph in module ida_graph: + +delete_mutable_graph(*args) -> 'void' + delete_mutable_graph(g) + + + Delete graph object.use this only if you are dealing with + 'mutable_graph_t' instances that have not been used together with a + 'graph_viewer_t' . If you have called 'set_viewer_graph()' with your + graph, the graph's lifecycle will be managed by the viewer, and you + shouldn't interfere with it + + @param g (C++: mutable_graph_t *) + +Help on class edge_info_t in module ida_graph: + +class edge_info_t(builtins.object) + | Proxy of C++ edge_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> edge_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_edge_info_t(...) + | delete_edge_info_t(self) + | + | reverse_layout(self, *args) -> 'void' + | reverse_layout(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | color + | edge_info_t_color_get(self) -> bgcolor_t + | + | dstoff + | edge_info_t_dstoff_get(self) -> int + | + | layout + | edge_info_t_layout_get(self) -> pointseq_t + | + | srcoff + | edge_info_t_srcoff_get(self) -> int + | + | thisown + | The membership flag + | + | width + | edge_info_t_width_get(self) -> int + +Help on class edge_infos_wrapper_t in module ida_graph: + +class edge_infos_wrapper_t(builtins.object) + | Proxy of C++ edge_infos_wrapper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ptr + | edge_infos_wrapper_t_ptr_get(self) -> edge_infos_t * + | + | thisown + | The membership flag + +Help on class edge_layout_point_t in module ida_graph: + +class edge_layout_point_t(builtins.object) + | Proxy of C++ edge_layout_point_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> edge_layout_point_t + | __init__(self, r) -> edge_layout_point_t + | __init__(self, _e, _pidx) -> edge_layout_point_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_edge_layout_point_t(...) + | delete_edge_layout_point_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | edge_layout_point_t_e_get(self) -> edge_t + | + | pidx + | edge_layout_point_t_pidx_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class edge_segment_t in module ida_graph: + +class edge_segment_t(builtins.object) + | Proxy of C++ edge_segment_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> edge_segment_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_edge_segment_t(...) + | delete_edge_segment_t(self) + | + | length(self, *args) -> 'size_t' + | length(self) -> size_t + | + | toright(self, *args) -> 'bool' + | toright(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | edge_segment_t_e_get(self) -> edge_t + | + | nseg + | edge_segment_t_nseg_get(self) -> int + | + | thisown + | The membership flag + | + | x0 + | edge_segment_t_x0_get(self) -> int + | + | x1 + | edge_segment_t_x1_get(self) -> int + +Help on class edge_t in module ida_graph: + +class edge_t(builtins.object) + | Proxy of C++ edge_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, y) -> bool + | + | __init__(self, *args) + | __init__(self) -> edge_t + | __init__(self, x, y) -> edge_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, y) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, y) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_edge_t(...) + | delete_edge_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dst + | edge_t_dst_get(self) -> int + | + | src + | edge_t_src_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function get_graph_viewer in module ida_graph: + +get_graph_viewer(*args) -> 'graph_viewer_t *' + get_graph_viewer(parent) -> graph_viewer_t * + + + Get custom graph viewer for given form. + + + @param parent (C++: TWidget *) + +Help on function get_node_info in module ida_graph: + +get_node_info(*args) -> 'bool' + get_node_info(out, gid, node) -> bool + + + Get node info. + + @param out: result (C++: node_info_t *) + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @return: success + +Help on function get_viewer_graph in module ida_graph: + +get_viewer_graph(*args) -> 'mutable_graph_t *' + get_viewer_graph(gv) -> mutable_graph_t + + + Get graph object for given custom graph viewer. + + + @param gv (C++: graph_viewer_t *) + +Help on class graph_item_t in module ida_graph: + +class graph_item_t(builtins.object) + | Proxy of C++ graph_item_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> graph_item_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_item_t(...) + | delete_graph_item_t(self) + | + | is_edge(self, *args) -> 'bool' + | is_edge(self) -> bool + | + | is_node(self, *args) -> 'bool' + | is_node(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | b + | graph_item_t_b_get(self) -> int + | + | e + | graph_item_t_e_get(self) -> edge_t + | + | elp + | graph_item_t_elp_get(self) -> edge_layout_point_t + | + | n + | graph_item_t_n_get(self) -> int + | + | p + | graph_item_t_p_get(self) -> point_t + | + | thisown + | The membership flag + | + | type + | graph_item_t_type_get(self) -> graph_item_type_t + +Help on class graph_node_visitor_t in module ida_graph: + +class graph_node_visitor_t(builtins.object) + | Proxy of C++ graph_node_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_node_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_node_visitor_t(...) + | delete_graph_node_visitor_t(self) + | + | is_forbidden_edge(self, *args) -> 'bool' + | is_forbidden_edge(self, arg0, arg1) -> bool + | + | is_visited(self, *args) -> 'bool' + | is_visited(self, n) -> bool + | + | reinit(self, *args) -> 'void' + | reinit(self) + | + | set_visited(self, *args) -> 'void' + | set_visited(self, n) + | + | visit_node(self, *args) -> 'int' + | visit_node(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on class graph_path_visitor_t in module ida_graph: + +class graph_path_visitor_t(builtins.object) + | Proxy of C++ graph_path_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_path_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_path_visitor_t(...) + | delete_graph_path_visitor_t(self) + | + | walk_backward(self, *args) -> 'int' + | walk_backward(self, arg0) -> int + | + | walk_forward(self, *args) -> 'int' + | walk_forward(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | path + | graph_path_visitor_t_path_get(self) -> intvec_t * + | + | prune + | graph_path_visitor_t_prune_get(self) -> bool + | + | thisown + | The membership flag + +Help on class graph_visitor_t in module ida_graph: + +class graph_visitor_t(builtins.object) + | Proxy of C++ graph_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_visitor_t(...) + | delete_graph_visitor_t(self) + | + | visit_edge(self, *args) -> 'int' + | visit_edge(self, arg2, arg3) -> int + | + | visit_node(self, *args) -> 'int' + | visit_node(self, arg2, arg3) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on class group_crinfo_t in module ida_graph: + +class group_crinfo_t(builtins.object) + | Proxy of C++ group_crinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> group_crinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_group_crinfo_t(...) + | delete_group_crinfo_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | nodes + | group_crinfo_t_nodes_get(self) -> intvec_t * + | + | text + | group_crinfo_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class interval_t in module ida_graph: + +class interval_t(builtins.object) + | Proxy of C++ interval_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> interval_t + | __init__(self, y0, y1) -> interval_t + | __init__(self, s) -> interval_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_interval_t(...) + | delete_interval_t(self) + | + | contains(self, *args) -> 'bool' + | contains(self, x) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | length(self, *args) -> 'int' + | length(self) -> int + | + | make_union(self, *args) -> 'void' + | make_union(self, r) + | + | move_by(self, *args) -> 'void' + | move_by(self, shift) + | + | ---------------------------------------------------------------------- + | 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 + | + | x0 + | interval_t_x0_get(self) -> int + | + | x1 + | interval_t_x1_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class mutable_graph_t in module ida_graph: + +class mutable_graph_t(builtins.object) + | Proxy of C++ mutable_graph_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mutable_graph_t(...) + | delete_mutable_graph_t(self) + | + | calc_group_ea(self, *args) -> 'ea_t' + | calc_group_ea(self, arg0) -> ea_t + | + | change_group_visibility(self, *args) -> 'bool' + | change_group_visibility(self, group, expand) -> bool + | + | clear(self, *args) -> 'void' + | clear(self) + | + | create_digraph_layout(self, *args) -> 'bool' + | create_digraph_layout(self) -> bool + | + | create_group(self, *args) -> 'int' + | create_group(self, nodes) -> int + | + | del_custom_layout(self, *args) -> 'void' + | del_custom_layout(self) + | + | delete_group(self, *args) -> 'bool' + | delete_group(self, group) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | exists(self, *args) -> 'bool' + | exists(self, node) -> bool + | + | get_custom_layout(self, *args) -> 'bool' + | get_custom_layout(self) -> bool + | + | get_edge(self, *args) -> 'edge_info_t' + | get_edge(self, e) -> edge_info_t + | + | get_first_subgraph_node(self, *args) -> 'int' + | get_first_subgraph_node(self, group) -> int + | + | get_graph_groups(self, *args) -> 'bool' + | get_graph_groups(self) -> bool + | + | get_next_subgraph_node(self, *args) -> 'int' + | get_next_subgraph_node(self, group, current) -> int + | + | get_node_group(self, *args) -> 'int' + | get_node_group(self, node) -> int + | + | get_node_representative(self, *args) -> 'int' + | get_node_representative(self, node) -> int + | + | is_collapsed_node(self, *args) -> 'bool' + | is_collapsed_node(self, node) -> bool + | + | is_deleted_node(self, *args) -> 'bool' + | is_deleted_node(self, node) -> bool + | + | is_displayable_node(self, *args) -> 'bool' + | is_displayable_node(self, node) -> bool + | + | is_dot_node(self, *args) -> 'bool' + | is_dot_node(self, node) -> bool + | + | is_group_node(self, *args) -> 'bool' + | is_group_node(self, node) -> bool + | + | is_simple_node(self, *args) -> 'bool' + | is_simple_node(self, node) -> bool + | + | is_subgraph_node(self, *args) -> 'bool' + | is_subgraph_node(self, node) -> bool + | + | is_uncollapsed_node(self, *args) -> 'bool' + | is_uncollapsed_node(self, node) -> bool + | + | is_user_graph(self, *args) -> 'bool' + | is_user_graph(self) -> bool + | + | is_visible_node(self, *args) -> 'bool' + | is_visible_node(self, node) -> bool + | + | node_qty(self, *args) -> 'int' + | node_qty(self) -> int + | + | npred(self, *args) -> 'int' + | npred(self, b) -> int + | + | nrect(self, *args) -> 'rect_t &' + | nrect(self, n) -> rect_t + | nrect(self, n) -> rect_t + | + | nsucc(self, *args) -> 'int' + | nsucc(self, b) -> int + | + | pred(self, *args) -> 'int' + | pred(self, b, i) -> int + | + | predset(self, *args) -> 'intvec_t const &' + | predset(self, b) -> intvec_t const & + | + | reset(self, *args) -> 'void' + | reset(self) + | + | set_custom_layout(self, *args) -> 'void' + | set_custom_layout(self) + | + | set_deleted_node(self, *args) -> 'void' + | set_deleted_node(self, node) + | + | set_edge(self, *args) -> 'bool' + | set_edge(self, e, ei) -> bool + | + | set_graph_groups(self, *args) -> 'void' + | set_graph_groups(self) + | + | set_node_group(self, *args) -> 'void' + | set_node_group(self, node, group) + | + | size(self, *args) -> 'int' + | size(self) -> int + | + | succ(self, *args) -> 'int' + | succ(self, b, i) -> int + | + | succset(self, *args) -> 'intvec_t const &' + | succset(self, b) -> intvec_t const & + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | belongs + | mutable_graph_t_belongs_get(self) -> intvec_t * + | + | edges + | mutable_graph_t_edges_get(self) -> edge_infos_wrapper_t + | + | gid + | mutable_graph_t_gid_get(self) -> uval_t + | + | node_flags + | mutable_graph_t_node_flags_get(self) -> bytevec_t * + | + | nodes + | mutable_graph_t_nodes_get(self) -> node_layout_t + | + | org_preds + | mutable_graph_t_org_preds_get(self) -> array_of_intvec_t + | + | org_succs + | mutable_graph_t_org_succs_get(self) -> array_of_intvec_t + | + | preds + | mutable_graph_t_preds_get(self) -> array_of_intvec_t + | + | succs + | mutable_graph_t_succs_get(self) -> array_of_intvec_t + | + | thisown + | The membership flag + +Help on class node_info_t in module ida_graph: + +class node_info_t(builtins.object) + | Proxy of C++ node_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> node_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_node_info_t(...) + | delete_node_info_t(self) + | + | get_flags_for_valid(self, *args) -> 'uint32' + | get_flags_for_valid(self) -> uint32 + | + | valid_bg_color(self, *args) -> 'bool' + | valid_bg_color(self) -> bool + | + | valid_ea(self, *args) -> 'bool' + | valid_ea(self) -> bool + | + | valid_flags(self, *args) -> 'bool' + | valid_flags(self) -> bool + | + | valid_frame_color(self, *args) -> 'bool' + | valid_frame_color(self) -> bool + | + | valid_text(self, *args) -> 'bool' + | valid_text(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bg_color + | node_info_t_bg_color_get(self) -> bgcolor_t + | + | ea + | node_info_t_ea_get(self) -> ea_t + | + | flags + | node_info_t_flags_get(self) -> uint32 + | + | frame_color + | node_info_t_frame_color_get(self) -> bgcolor_t + | + | text + | node_info_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class node_layout_t in module ida_graph: + +class node_layout_t(builtins.object) + | Proxy of C++ qvector< rect_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'rect_t const &' + | __getitem__(self, i) -> rect_t + | + | __init__(self, *args) + | __init__(self) -> node_layout_t + | __init__(self, x) -> node_layout_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_node_layout_t(...) + | delete_node_layout_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'rect_t const &' + | at(self, _idx) -> rect_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< rect_t >::const_iterator' + | begin(self) -> rect_t + | begin(self) -> rect_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< rect_t >::const_iterator' + | end(self) -> rect_t + | end(self) -> rect_t + | + | erase(self, *args) -> 'qvector< rect_t >::iterator' + | erase(self, it) -> rect_t + | erase(self, first, last) -> rect_t + | + | extract(self, *args) -> 'rect_t *' + | extract(self) -> rect_t + | + | find(self, *args) -> 'qvector< rect_t >::const_iterator' + | find(self, x) -> rect_t + | find(self, x) -> rect_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=rect_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< rect_t >::iterator' + | insert(self, it, x) -> rect_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'rect_t &' + | push_back(self, x) + | push_back(self) -> rect_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class node_ordering_t in module ida_graph: + +class node_ordering_t(builtins.object) + | Proxy of C++ node_ordering_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> node_ordering_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_node_ordering_t(...) + | delete_node_ordering_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | node(self, *args) -> 'int' + | node(self, _order) -> int + | + | resize(self, *args) -> 'void' + | resize(self, n) + | + | set(self, *args) -> 'void' + | set(self, _node, num) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + +Help on class point_t in module ida_graph: + +class point_t(builtins.object) + | Proxy of C++ point_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> point_t + | __init__(self, _x, _y) -> point_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_point_t(...) + | delete_point_t(self) + | + | add(self, *args) -> 'point_t &' + | add(self, r) -> point_t + | + | negate(self, *args) -> 'void' + | negate(self) + | + | sub(self, *args) -> 'point_t &' + | sub(self, r) -> point_t + | + | ---------------------------------------------------------------------- + | 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 + | + | x + | point_t_x_get(self) -> int + | + | y + | point_t_y_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class pointseq_t in module ida_graph: + +class pointseq_t(pointvec_t) + | Proxy of C++ pointseq_t class. + | + | Method resolution order: + | pointseq_t + | pointvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pointseq_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pointseq_t(...) + | delete_pointseq_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from pointvec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'point_t const &' + | __getitem__(self, i) -> point_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'point_t const &' + | at(self, _idx) -> point_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< point_t >::const_iterator' + | begin(self) -> point_t + | begin(self) -> point_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< point_t >::const_iterator' + | end(self) -> point_t + | end(self) -> point_t + | + | erase(self, *args) -> 'qvector< point_t >::iterator' + | erase(self, it) -> point_t + | erase(self, first, last) -> point_t + | + | extract(self, *args) -> 'point_t *' + | extract(self) -> point_t + | + | find(self, *args) -> 'qvector< point_t >::const_iterator' + | find(self, x) -> point_t + | find(self, x) -> point_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=point_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< point_t >::iterator' + | insert(self, it, x) -> point_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'point_t &' + | push_back(self, x) + | push_back(self) -> point_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from pointvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from pointvec_t: + | + | __hash__ = None + +Help on class pointvec_t in module ida_graph: + +class pointvec_t(builtins.object) + | Proxy of C++ qvector< point_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'point_t const &' + | __getitem__(self, i) -> point_t + | + | __init__(self, *args) + | __init__(self) -> pointvec_t + | __init__(self, x) -> pointvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_pointvec_t(...) + | delete_pointvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'point_t const &' + | at(self, _idx) -> point_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< point_t >::const_iterator' + | begin(self) -> point_t + | begin(self) -> point_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< point_t >::const_iterator' + | end(self) -> point_t + | end(self) -> point_t + | + | erase(self, *args) -> 'qvector< point_t >::iterator' + | erase(self, it) -> point_t + | erase(self, first, last) -> point_t + | + | extract(self, *args) -> 'point_t *' + | extract(self) -> point_t + | + | find(self, *args) -> 'qvector< point_t >::const_iterator' + | find(self, x) -> point_t + | find(self, x) -> point_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=point_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< point_t >::iterator' + | insert(self, it, x) -> point_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'point_t &' + | push_back(self, x) + | push_back(self) -> point_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function pyg_close in module ida_graph: + +pyg_close(*args) -> 'void' + pyg_close(_self) + +Help on function pyg_select_node in module ida_graph: + +pyg_select_node(*args) -> 'void' + pyg_select_node(_self, nid) + +Help on function pyg_show in module ida_graph: + +pyg_show(*args) -> 'bool' + pyg_show(_self) -> bool + +Help on class rect_t in module ida_graph: + +class rect_t(builtins.object) + | Proxy of C++ rect_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> rect_t + | __init__(self, l, t, r, b) -> rect_t + | __init__(self, p0, p1) -> rect_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_rect_t(...) + | delete_rect_t(self) + | + | area(self, *args) -> 'int' + | area(self) -> int + | + | bottomright(self, *args) -> 'point_t' + | bottomright(self) -> point_t + | + | center(self, *args) -> 'point_t' + | center(self) -> point_t + | + | contains(self, *args) -> 'bool' + | contains(self, p) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | grow(self, *args) -> 'void' + | grow(self, delta) + | + | height(self, *args) -> 'int' + | height(self) -> int + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | is_intersection_empty(self, *args) -> 'bool' + | is_intersection_empty(self, r) -> bool + | + | make_union(self, *args) -> 'void' + | make_union(self, r) + | + | move_by(self, *args) -> 'void' + | move_by(self, p) + | + | move_to(self, *args) -> 'void' + | move_to(self, p) + | + | topleft(self, *args) -> 'point_t' + | topleft(self) -> point_t + | + | width(self, *args) -> 'int' + | width(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bottom + | rect_t_bottom_get(self) -> int + | + | left + | rect_t_left_get(self) -> int + | + | right + | rect_t_right_get(self) -> int + | + | thisown + | The membership flag + | + | top + | rect_t_top_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function refresh_viewer in module ida_graph: + +refresh_viewer(*args) -> 'void' + refresh_viewer(gv) + + + Redraw the graph in the given view. + + + @param gv (C++: graph_viewer_t *) + +Help on class row_info_t in module ida_graph: + +class row_info_t(builtins.object) + | Proxy of C++ row_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> row_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_row_info_t(...) + | delete_row_info_t(self) + | + | height(self, *args) -> 'int' + | height(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bottom + | row_info_t_bottom_get(self) -> int + | + | nodes + | row_info_t_nodes_get(self) -> intvec_t * + | + | thisown + | The membership flag + | + | top + | row_info_t_top_get(self) -> int + +Help on class screen_graph_selection_base_t in module ida_graph: + +class screen_graph_selection_base_t(builtins.object) + | Proxy of C++ qvector< selection_item_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'selection_item_t const &' + | __getitem__(self, i) -> selection_item_t + | + | __init__(self, *args) + | __init__(self) -> screen_graph_selection_base_t + | __init__(self, x) -> screen_graph_selection_base_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_screen_graph_selection_base_t(...) + | delete_screen_graph_selection_base_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'selection_item_t const &' + | at(self, _idx) -> selection_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | begin(self) -> selection_item_t + | begin(self) -> selection_item_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | end(self) -> selection_item_t + | end(self) -> selection_item_t + | + | erase(self, *args) -> 'qvector< selection_item_t >::iterator' + | erase(self, it) -> selection_item_t + | erase(self, first, last) -> selection_item_t + | + | extract(self, *args) -> 'selection_item_t *' + | extract(self) -> selection_item_t + | + | find(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | find(self, x) -> selection_item_t + | find(self, x) -> selection_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=selection_item_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< selection_item_t >::iterator' + | insert(self, it, x) -> selection_item_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'selection_item_t &' + | push_back(self, x) + | push_back(self) -> selection_item_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class screen_graph_selection_t in module ida_graph: + +class screen_graph_selection_t(screen_graph_selection_base_t) + | Proxy of C++ screen_graph_selection_t class. + | + | Method resolution order: + | screen_graph_selection_t + | screen_graph_selection_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> screen_graph_selection_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_screen_graph_selection_t(...) + | delete_screen_graph_selection_t(self) + | + | add(self, *args) -> 'void' + | add(self, s) + | + | add_node(self, *args) -> 'void' + | add_node(self, node) + | + | add_point(self, *args) -> 'void' + | add_point(self, e, idx) + | + | del_node(self, *args) -> 'void' + | del_node(self, node) + | + | del_point(self, *args) -> 'void' + | del_point(self, e, idx) + | + | has(self, *args) -> 'bool' + | has(self, item) -> bool + | + | items_count(self, *args) -> 'size_t' + | items_count(self, look_for_nodes) -> size_t + | + | nodes_count(self, *args) -> 'size_t' + | nodes_count(self) -> size_t + | + | points_count(self, *args) -> 'size_t' + | points_count(self) -> size_t + | + | sub(self, *args) -> 'void' + | sub(self, s) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from screen_graph_selection_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'selection_item_t const &' + | __getitem__(self, i) -> selection_item_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'selection_item_t const &' + | at(self, _idx) -> selection_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | begin(self) -> selection_item_t + | begin(self) -> selection_item_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | end(self) -> selection_item_t + | end(self) -> selection_item_t + | + | erase(self, *args) -> 'qvector< selection_item_t >::iterator' + | erase(self, it) -> selection_item_t + | erase(self, first, last) -> selection_item_t + | + | extract(self, *args) -> 'selection_item_t *' + | extract(self) -> selection_item_t + | + | find(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | find(self, x) -> selection_item_t + | find(self, x) -> selection_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=selection_item_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< selection_item_t >::iterator' + | insert(self, it, x) -> selection_item_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'selection_item_t &' + | push_back(self, x) + | push_back(self) -> selection_item_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from screen_graph_selection_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from screen_graph_selection_base_t: + | + | __hash__ = None + +Help on class selection_item_t in module ida_graph: + +class selection_item_t(builtins.object) + | Proxy of C++ selection_item_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> selection_item_t + | __init__(self, n) -> selection_item_t + | __init__(self, _elp) -> selection_item_t + | __init__(self, e, idx) -> selection_item_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_selection_item_t(...) + | delete_selection_item_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | elp + | selection_item_t_elp_get(self) -> edge_layout_point_t + | + | is_node + | selection_item_t_is_node_get(self) -> bool + | + | node + | selection_item_t_node_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function set_node_info in module ida_graph: + +set_node_info(*args) -> 'void' + set_node_info(gid, node, ni, flags) + + + Set node info. + + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @param ni: node info to use (C++: const node_info_t &) + @param flags: combination of Node info flags , identifying which + fields of 'ni' will be used (C++: uint32) + +Help on function set_viewer_graph in module ida_graph: + +set_viewer_graph(*args) -> 'void' + set_viewer_graph(gv, g) + + + Set the underlying graph object for the given viewer. + + + @param gv (C++: graph_viewer_t *) + @param g (C++: mutable_graph_t *) + +Help on class user_graph_place_t in module ida_graph: + +class user_graph_place_t(builtins.object) + | Proxy of C++ user_graph_place_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_graph_place_t(...) + | delete_user_graph_place_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | node + | user_graph_place_t_node_get(self) -> int + | + | thisown + | The membership flag + +Help on function viewer_attach_menu_item in module ida_graph: + +viewer_attach_menu_item(*args) -> 'bool' + viewer_attach_menu_item(g, name) -> bool + + + Attach a previously-registered action to the view's context menu. See + 'kernwin.hpp' for how to register actions. + + @param g (C++: graph_viewer_t *) + @param name: action name (C++: const char *) + @return: success + +Help on function viewer_center_on in module ida_graph: + +viewer_center_on(*args) -> 'void' + viewer_center_on(gv, node) + + + Center the graph view on the given node. + + + @param gv (C++: graph_viewer_t *) + @param node (C++: int) + +Help on function viewer_create_groups in module ida_graph: + +viewer_create_groups(*args) -> 'bool' + viewer_create_groups(gv, out_group_nodes, gi) -> bool + + + This will perform an operation similar to what happens when a user + manually selects a set of nodes, right-clicks and selects "Create + group". This is a wrapper around mutable_graph_t::create_group that + will, in essence:clone the current graphfor each 'group_crinfo_t' , + attempt creating group in that new graphif all were successful, + animate to that new graph.this accepts parameters that allow creating + of multiple groups at once; which means only one graph animation will + be triggered. + + @param gv (C++: graph_viewer_t *) + @param out_group_nodes (C++: intvec_t *) + @param gi (C++: const groups_crinfos_t &) + +Help on function viewer_del_node_info in module ida_graph: + +viewer_del_node_info(*args) -> 'void' + viewer_del_node_info(gv, n) + + + Delete node info for node in given viewer (see 'del_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param n (C++: int) + +Help on function viewer_delete_groups in module ida_graph: + +viewer_delete_groups(*args) -> 'bool' + viewer_delete_groups(gv, groups, new_current=-1) -> bool + + + Wrapper around mutable_graph_t::delete_group. This function will:clone + the current graphattempt deleting the groups in that new graphif + successful, animate to that new graph. + + @param gv (C++: graph_viewer_t *) + @param groups (C++: const intvec_t &) + @param new_current (C++: int) + +Help on function viewer_fit_window in module ida_graph: + +viewer_fit_window(*args) -> 'void' + viewer_fit_window(gv) + + + Fit graph viewer to its parent form. + + + @param gv (C++: graph_viewer_t *) + +Help on function viewer_get_curnode in module ida_graph: + +viewer_get_curnode(*args) -> 'int' + viewer_get_curnode(gv) -> int + + + Get number of currently selected node (-1 if none) + + + @param gv (C++: graph_viewer_t *) + +Help on function viewer_get_gli in module ida_graph: + +viewer_get_gli(*args) -> 'bool' + viewer_get_gli(out, gv, flags=0) -> bool + + + Get location info for given graph view If flags contains + GLICTL_CENTER, then the gli that will be retrieved, will be the one at + the center of the view. Otherwise it will be the top-left. + + @param out (C++: graph_location_info_t *) + @param gv (C++: graph_viewer_t *) + @param flags (C++: uint32) + +Help on function viewer_get_node_info in module ida_graph: + +viewer_get_node_info(*args) -> 'bool' + viewer_get_node_info(gv, out, n) -> bool + + + Get node info for node in given viewer (see 'get_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param out (C++: node_info_t *) + @param n (C++: int) + +Help on function viewer_get_selection in module ida_graph: + +viewer_get_selection(*args) -> 'bool' + viewer_get_selection(gv, sgs) -> bool + + + Get currently selected items for graph viewer. + + + @param gv (C++: graph_viewer_t *) + @param sgs (C++: screen_graph_selection_t *) + +Help on function viewer_set_gli in module ida_graph: + +viewer_set_gli(*args) -> 'void' + viewer_set_gli(gv, gli, flags=0) + + + Set location info for given graph view If flags contains + GLICTL_CENTER, then the gli will be set to be the center of the view. + Otherwise it will be the top-left. + + @param gv (C++: graph_viewer_t *) + @param gli (C++: const graph_location_info_t *) + @param flags (C++: uint32) + +Help on function viewer_set_groups_visibility in module ida_graph: + +viewer_set_groups_visibility(*args) -> 'bool' + viewer_set_groups_visibility(gv, groups, expand, new_current=-1) -> bool + + + Wrapper around mutable_graph_t::change_visibility. This function + will:clone the current graphattempt changing visibility of the groups + in that new graphif successful, animate to that new graph. + + @param gv (C++: graph_viewer_t *) + @param groups (C++: const intvec_t &) + @param expand (C++: bool) + @param new_current (C++: int) + +Help on function viewer_set_node_info in module ida_graph: + +viewer_set_node_info(*args) -> 'void' + viewer_set_node_info(gv, n, ni, flags) + + + Set node info for node in given viewer (see 'set_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param n (C++: int) + @param ni (C++: const node_info_t &) + @param flags (C++: uint32) + +Help on function viewer_set_titlebar_height in module ida_graph: + +viewer_set_titlebar_height(*args) -> 'int' + viewer_set_titlebar_height(gv, height) -> int + + + Set height of node title bars ( 'grcode_set_titlebar_height' ) + + + @param gv (C++: graph_viewer_t *) + @param height (C++: int) + +=== ida_graph EPYDOC INJECTIONS === +ida_graph.GLICTL_CENTER +""" +the gli should be set/get as center +""" + +ida_graph.MTG_DOT_NODE +""" +is dot node? +""" + +ida_graph.MTG_GROUP_NODE +""" +is group node? +""" + +ida_graph.MTG_NON_DISPLAYABLE_NODE +""" +for disassembly graphs - non-displayable nodes have a visible area +that is too large to generate disassembly lines for without IDA +slowing down significantly (see MAX_VISIBLE_NODE_AREA) +""" + +ida_graph.NIF_BG_COLOR +""" + 'node_info_t::bg_color' +""" + +ida_graph.NIF_EA +""" + 'node_info_t::ea' +""" + +ida_graph.NIF_FLAGS +""" + 'node_info_t::flags' +""" + +ida_graph.NIF_FRAME_COLOR +""" + 'node_info_t::frame_color' +""" + +ida_graph.NIF_TEXT +""" + 'node_info_t::text' +""" +=== ida_graph EPYDOC INJECTIONS END === +Help on class DecompilationFailure in module ida_hexrays: + +class DecompilationFailure(builtins.Exception) + | Raised on a decompilation error. + | + | The associated hexrays_failure_t object is stored in the + | 'info' member of this exception. + | + | Method resolution order: + | DecompilationFailure + | builtins.Exception + | builtins.BaseException + | builtins.object + | + | Methods defined here: + | + | __init__(self, info) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Methods inherited from builtins.Exception: + | + | __new__(*args, **kwargs) from builtins.type + | Create and return a new object. See help(type) for accurate signature. + | + | ---------------------------------------------------------------------- + | Methods inherited from builtins.BaseException: + | + | __delattr__(self, name, /) + | Implement delattr(self, name). + | + | __getattribute__(self, name, /) + | Return getattr(self, name). + | + | __reduce__(...) + | helper for pickle + | + | __repr__(self, /) + | Return repr(self). + | + | __setattr__(self, name, value, /) + | Implement setattr(self, name, value). + | + | __setstate__(...) + | + | __str__(self, /) + | Return str(self). + | + | with_traceback(...) + | Exception.with_traceback(tb) -- + | set self.__traceback__ to tb and return self. + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from builtins.BaseException: + | + | __cause__ + | exception cause + | + | __context__ + | exception context + | + | __dict__ + | + | __suppress_context__ + | + | __traceback__ + | + | args + +Help on class Hexrays_Hooks in module ida_hexrays: + +class Hexrays_Hooks(builtins.object) + | Proxy of C++ Hexrays_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> Hexrays_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_Hexrays_Hooks(...) + | delete_Hexrays_Hooks(self) + | + | close_pseudocode(self, *args) -> 'int' + | close_pseudocode(self, vu) -> int + | + | cmt_changed(self, *args) -> 'int' + | cmt_changed(self, cfunc, loc, cmt) -> int + | + | combine(self, *args) -> 'int' + | combine(self, blk, insn) -> int + | + | create_hint(self, *args) -> 'PyObject *' + | create_hint(self, vu) -> PyObject * + | + | curpos(self, *args) -> 'int' + | curpos(self, vu) -> int + | + | double_click(self, *args) -> 'int' + | double_click(self, vu, shift_state) -> int + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | flowchart(self, *args) -> 'int' + | flowchart(self, fc) -> int + | + | func_printed(self, *args) -> 'int' + | func_printed(self, cfunc) -> int + | + | glbopt(self, *args) -> 'int' + | glbopt(self, mba) -> int + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | interr(self, *args) -> 'int' + | interr(self, errcode) -> int + | + | keyboard(self, *args) -> 'int' + | keyboard(self, vu, key_code, shift_state) -> int + | + | locopt(self, *args) -> 'int' + | locopt(self, mba) -> int + | + | lvar_cmt_changed(self, *args) -> 'int' + | lvar_cmt_changed(self, vu, v, cmt) -> int + | + | lvar_mapping_changed(self, *args) -> 'int' + | lvar_mapping_changed(self, vu, frm, to) -> int + | + | lvar_name_changed(self, *args) -> 'int' + | lvar_name_changed(self, vu, v, name, is_user_name) -> int + | + | lvar_type_changed(self, *args) -> 'int' + | lvar_type_changed(self, vu, v, tinfo) -> int + | + | maturity(self, *args) -> 'int' + | maturity(self, cfunc, new_maturity) -> int + | + | microcode(self, *args) -> 'int' + | microcode(self, mba) -> int + | + | open_pseudocode(self, *args) -> 'int' + | open_pseudocode(self, vu) -> int + | + | populating_popup(self, *args) -> 'int' + | populating_popup(self, widget, popup_handle, vu) -> int + | + | prealloc(self, *args) -> 'int' + | prealloc(self, mba) -> int + | + | preoptimized(self, *args) -> 'int' + | preoptimized(self, mba) -> int + | + | print_func(self, *args) -> 'int' + | print_func(self, cfunc, vp) -> int + | + | prolog(self, *args) -> 'int' + | prolog(self, mba, fc, reachable_blocks, decomp_flags) -> int + | + | refresh_pseudocode(self, *args) -> 'int' + | refresh_pseudocode(self, vu) -> int + | + | resolve_stkaddrs(self, *args) -> 'int' + | resolve_stkaddrs(self, mba) -> int + | + | right_click(self, *args) -> 'int' + | right_click(self, vu) -> int + | + | stkpnts(self, *args) -> 'int' + | stkpnts(self, mba, _sps) -> int + | + | structural(self, *args) -> 'int' + | structural(self, ct) -> int + | + | switch_pseudocode(self, *args) -> 'int' + | switch_pseudocode(self, vu) -> int + | + | text_ready(self, *args) -> 'int' + | text_ready(self, vu) -> int + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on class __cbhooks_t in module ida_hexrays: + +class __cbhooks_t(Hexrays_Hooks) + | Proxy of C++ Hexrays_Hooks class. + | + | Method resolution order: + | __cbhooks_t + | Hexrays_Hooks + | builtins.object + | + | Methods defined here: + | + | __init__(self, callback) + | __init__(self, _flags=0) -> Hexrays_Hooks + | + | close_pseudocode(self, *args) + | close_pseudocode(self, vu) -> int + | + | create_hint(self, *args) + | create_hint(self, vu) -> PyObject * + | + | curpos(self, *args) + | curpos(self, vu) -> int + | + | double_click(self, *args) + | double_click(self, vu, shift_state) -> int + | + | func_printed(self, *args) + | func_printed(self, cfunc) -> int + | + | interr(self, *args) + | interr(self, errcode) -> int + | + | keyboard(self, *args) + | keyboard(self, vu, key_code, shift_state) -> int + | + | maturity(self, *args) + | maturity(self, cfunc, new_maturity) -> int + | + | open_pseudocode(self, *args) + | open_pseudocode(self, vu) -> int + | + | populating_popup(self, *args) + | populating_popup(self, widget, popup_handle, vu) -> int + | + | print_func(self, *args) + | print_func(self, cfunc, vp) -> int + | + | refresh_pseudocode(self, *args) + | refresh_pseudocode(self, vu) -> int + | + | right_click(self, *args) + | right_click(self, vu) -> int + | + | switch_pseudocode(self, *args) + | switch_pseudocode(self, vu) -> int + | + | text_ready(self, *args) + | text_ready(self, vu) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | instances = [] + | + | ---------------------------------------------------------------------- + | Methods inherited from Hexrays_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_Hexrays_Hooks(...) + | delete_Hexrays_Hooks(self) + | + | cmt_changed(self, *args) -> 'int' + | cmt_changed(self, cfunc, loc, cmt) -> int + | + | combine(self, *args) -> 'int' + | combine(self, blk, insn) -> int + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | flowchart(self, *args) -> 'int' + | flowchart(self, fc) -> int + | + | glbopt(self, *args) -> 'int' + | glbopt(self, mba) -> int + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | locopt(self, *args) -> 'int' + | locopt(self, mba) -> int + | + | lvar_cmt_changed(self, *args) -> 'int' + | lvar_cmt_changed(self, vu, v, cmt) -> int + | + | lvar_mapping_changed(self, *args) -> 'int' + | lvar_mapping_changed(self, vu, frm, to) -> int + | + | lvar_name_changed(self, *args) -> 'int' + | lvar_name_changed(self, vu, v, name, is_user_name) -> int + | + | lvar_type_changed(self, *args) -> 'int' + | lvar_type_changed(self, vu, v, tinfo) -> int + | + | microcode(self, *args) -> 'int' + | microcode(self, mba) -> int + | + | prealloc(self, *args) -> 'int' + | prealloc(self, mba) -> int + | + | preoptimized(self, *args) -> 'int' + | preoptimized(self, mba) -> int + | + | prolog(self, *args) -> 'int' + | prolog(self, mba, fc, reachable_blocks, decomp_flags) -> int + | + | resolve_stkaddrs(self, *args) -> 'int' + | resolve_stkaddrs(self, mba) -> int + | + | stkpnts(self, *args) -> 'int' + | stkpnts(self, mba, _sps) -> int + | + | structural(self, *args) -> 'int' + | structural(self, ct) -> int + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from Hexrays_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on function _call_with_transferrable_ownership in module ida_hexrays: + +_call_with_transferrable_ownership(fun, *args) + # Object ownership + +Help on function _kludge_use_TPopupMenu in module ida_hexrays: + +_kludge_use_TPopupMenu(*args) -> 'void' + _kludge_use_TPopupMenu(m) + +Help on function _ll_call_helper in module ida_hexrays: + +_ll_call_helper(*args) -> 'cexpr_t *' + _ll_call_helper(rettype, args, format) -> cexpr_t + +Help on function _ll_create_helper in module ida_hexrays: + +_ll_create_helper(*args) -> 'cexpr_t *' + _ll_create_helper(standalone, type, format) -> cexpr_t + +Help on function _ll_dereference in module ida_hexrays: + +_ll_dereference(*args) -> 'cexpr_t *' + _ll_dereference(e, ptrsize, is_flt=False) -> cexpr_t + +Help on function _ll_lnot in module ida_hexrays: + +_ll_lnot(*args) -> 'cexpr_t *' + _ll_lnot(e) -> cexpr_t + +Help on function _ll_make_num in module ida_hexrays: + +_ll_make_num(*args) -> 'cexpr_t *' + _ll_make_num(n, func=None, ea=BADADDR, opnum=0, sign=no_sign, size=0) -> cexpr_t + +Help on function _ll_make_ref in module ida_hexrays: + +_ll_make_ref(*args) -> 'cexpr_t *' + _ll_make_ref(e) -> cexpr_t + +Help on function _ll_new_block in module ida_hexrays: + +_ll_new_block(*args) -> 'cinsn_t *' + _ll_new_block() -> cinsn_t + +Help on function _map_as_dict in module ida_hexrays: + +_map_as_dict(maptype, name, keytype, valuetype) + # dictify all dict-like types + +Help on function accepts_small_udts in module ida_hexrays: + +accepts_small_udts(*args) -> 'bool' + accepts_small_udts(op) -> bool + + + Is the operator allowed on small structure or union? + + + @param op (C++: ctype_t) + +Help on function accepts_udts in module ida_hexrays: + +accepts_udts(*args) -> 'bool' + accepts_udts(op) -> bool + +Help on function arglocs_overlap in module ida_hexrays: + +arglocs_overlap(*args) -> 'bool' + arglocs_overlap(loc1, w1, loc2, w2) -> bool + + + Do two arglocs overlap? + + + @param loc1 (C++: const vdloc_t &) + @param w1 (C++: size_t) + @param loc2 (C++: const vdloc_t &) + @param w2 (C++: size_t) + +Help on class array_of_bitsets in module ida_hexrays: + +class array_of_bitsets(builtins.object) + | Proxy of C++ qvector< bitset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'bitset_t const &' + | __getitem__(self, i) -> bitset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_bitsets + | __init__(self, x) -> array_of_bitsets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_array_of_bitsets(...) + | delete_array_of_bitsets(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'bitset_t const &' + | at(self, _idx) -> bitset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< bitset_t >::const_iterator' + | begin(self) -> bitset_t + | begin(self) -> bitset_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< bitset_t >::const_iterator' + | end(self) -> bitset_t + | end(self) -> bitset_t + | + | erase(self, *args) -> 'qvector< bitset_t >::iterator' + | erase(self, it) -> bitset_t + | erase(self, first, last) -> bitset_t + | + | extract(self, *args) -> 'bitset_t *' + | extract(self) -> bitset_t + | + | find(self, *args) -> 'qvector< bitset_t >::const_iterator' + | find(self, x) -> bitset_t + | find(self, x) -> bitset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=bitset_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< bitset_t >::iterator' + | insert(self, it, x) -> bitset_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'bitset_t &' + | push_back(self, x) + | push_back(self) -> bitset_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class array_of_ivlsets in module ida_hexrays: + +class array_of_ivlsets(builtins.object) + | Proxy of C++ qvector< ivlset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'ivlset_t const &' + | __getitem__(self, i) -> ivlset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_ivlsets + | __init__(self, x) -> array_of_ivlsets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_array_of_ivlsets(...) + | delete_array_of_ivlsets(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'ivlset_t const &' + | at(self, _idx) -> ivlset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< ivlset_t >::const_iterator' + | begin(self) -> ivlset_t + | begin(self) -> ivlset_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< ivlset_t >::const_iterator' + | end(self) -> ivlset_t + | end(self) -> ivlset_t + | + | erase(self, *args) -> 'qvector< ivlset_t >::iterator' + | erase(self, it) -> ivlset_t + | erase(self, first, last) -> ivlset_t + | + | extract(self, *args) -> 'ivlset_t *' + | extract(self) -> ivlset_t + | + | find(self, *args) -> 'qvector< ivlset_t >::const_iterator' + | find(self, x) -> ivlset_t + | find(self, x) -> ivlset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=ivlset_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< ivlset_t >::iterator' + | insert(self, it, x) -> ivlset_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'ivlset_t &' + | push_back(self, x) + | push_back(self) -> ivlset_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function asgop in module ida_hexrays: + +asgop(*args) -> 'ctype_t' + asgop(cop) -> ctype_t + + + Convert plain operator into assignment operator. For example, cot_add + returns cot_asgadd. + + + @param cop (C++: ctype_t) + +Help on function asgop_revert in module ida_hexrays: + +asgop_revert(*args) -> 'ctype_t' + asgop_revert(cop) -> ctype_t + + + Convert assignment operator into plain operator. For example, + cot_asgadd returns cot_add + + @param cop (C++: ctype_t) + @return: cot_empty is the input operator is not an assignment + operator. + +Help on class bit_bound_t in module ida_hexrays: + +class bit_bound_t(builtins.object) + | Proxy of C++ bit_bound_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=0, s=0) -> bit_bound_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bit_bound_t(...) + | delete_bit_bound_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | nbits + | bit_bound_t_nbits_get(self) -> int16 + | + | sbits + | bit_bound_t_sbits_get(self) -> int16 + | + | thisown + | The membership flag + +Help on class bitset_t in module ida_hexrays: + +class bitset_t(builtins.object) + | Proxy of C++ bitset_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> bitset_t + | __init__(self, m) -> bitset_t + | + | __iter__(self) + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __len__ = count(self, *args) -> 'int' + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bitset_t(...) + | delete_bitset_t(self) + | + | add(self, *args) -> 'bool' + | add(self, bit) -> bool + | add(self, bit, width) -> bool + | add(self, ml) -> bool + | + | back(self, *args) -> 'int' + | back(self) -> int + | + | begin(self, *args) -> 'bitset_t::iterator' + | begin(self) -> bitset_t::iterator + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | copy(self, *args) -> 'bitset_t &' + | copy(self, m) -> bitset_t + | + | count(self, *args) -> 'int' + | count(self) -> int + | count(self, bit) -> int + | + | cut_at(self, *args) -> 'bool' + | cut_at(self, maxbit) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'bitset_t::iterator' + | end(self) -> bitset_t::iterator + | + | fill_with_ones(self, *args) -> 'void' + | fill_with_ones(self, maxbit) + | + | front(self, *args) -> 'int' + | front(self) -> int + | + | has(self, *args) -> 'bool' + | has(self, bit) -> bool + | + | has_all(self, *args) -> 'bool' + | has_all(self, bit, width) -> bool + | + | has_any(self, *args) -> 'bool' + | has_any(self, bit, width) -> bool + | + | has_common(self, *args) -> 'bool' + | has_common(self, ml) -> bool + | + | inc(self, *args) -> 'void' + | inc(self, p, n=1) + | + | includes(self, *args) -> 'bool' + | includes(self, ml) -> bool + | + | intersect(self, *args) -> 'bool' + | intersect(self, ml) -> bool + | + | is_subset_of(self, *args) -> 'bool' + | is_subset_of(self, ml) -> bool + | + | itat(self, *args) -> 'bitset_t::iterator' + | itat(self, n) -> bitset_t::iterator + | + | itv(self, *args) -> 'int' + | itv(self, it) -> int + | + | last(self, *args) -> 'int' + | last(self) -> int + | + | shift_down(self, *args) -> 'void' + | shift_down(self, shift) + | + | sub(self, *args) -> 'bool' + | sub(self, bit) -> bool + | sub(self, bit, width) -> bool + | sub(self, ml) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function block_chains_begin in module ida_hexrays: + +block_chains_begin(*args) -> 'block_chains_iterator_t' + block_chains_begin(set) -> block_chains_iterator_t + + + Get iterator pointing to the beginning of 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + +Help on function block_chains_clear in module ida_hexrays: + +block_chains_clear(*args) -> 'void' + block_chains_clear(set) + + + Clear 'block_chains_t' . + + + @param set (C++: block_chains_t *) + +Help on function block_chains_end in module ida_hexrays: + +block_chains_end(*args) -> 'block_chains_iterator_t' + block_chains_end(set) -> block_chains_iterator_t + + + Get iterator pointing to the end of 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + +Help on function block_chains_erase in module ida_hexrays: + +block_chains_erase(*args) -> 'void' + block_chains_erase(set, p) + + + Erase current element from 'block_chains_t' . + + + @param set (C++: block_chains_t *) + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_find in module ida_hexrays: + +block_chains_find(*args) -> 'block_chains_iterator_t' + block_chains_find(set, val) -> block_chains_iterator_t + + + Find the specified key in set 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + @param val (C++: const chain_t &) + +Help on function block_chains_free in module ida_hexrays: + +block_chains_free(*args) -> 'void' + block_chains_free(set) + + + Delete 'block_chains_t' instance. + + + @param set (C++: block_chains_t *) + +Help on function block_chains_get in module ida_hexrays: + +block_chains_get(*args) -> 'chain_t &' + block_chains_get(p) -> chain_t + + + Get reference to the current set value. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_insert in module ida_hexrays: + +block_chains_insert(*args) -> 'block_chains_iterator_t' + block_chains_insert(set, val) -> block_chains_iterator_t + + + Insert new ( 'chain_t' ) into set 'block_chains_t' . + + + @param set (C++: block_chains_t *) + @param val (C++: const chain_t &) + +Help on class block_chains_iterator_t in module ida_hexrays: + +class block_chains_iterator_t(builtins.object) + | Proxy of C++ block_chains_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> block_chains_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_block_chains_iterator_t(...) + | delete_block_chains_iterator_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 + | + | x + | block_chains_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function block_chains_new in module ida_hexrays: + +block_chains_new(*args) -> 'block_chains_t *' + block_chains_new() -> block_chains_t + + + Create a new 'block_chains_t' instance. + +Help on function block_chains_next in module ida_hexrays: + +block_chains_next(*args) -> 'block_chains_iterator_t' + block_chains_next(p) -> block_chains_iterator_t + + + Move to the next element. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_prev in module ida_hexrays: + +block_chains_prev(*args) -> 'block_chains_iterator_t' + block_chains_prev(p) -> block_chains_iterator_t + + + Move to the previous element. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_size in module ida_hexrays: + +block_chains_size(*args) -> 'size_t' + block_chains_size(set) -> size_t + + + Get size of 'block_chains_t' . + + + @param set (C++: block_chains_t *) + +Help on class block_chains_t in module ida_hexrays: + +class block_chains_t(builtins.object) + | Proxy of C++ block_chains_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> block_chains_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_block_chains_t(...) + | delete_block_chains_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | get_chain(self, *args) -> 'chain_t *' + | get_chain(self, k, width=1) -> chain_t + | get_chain(self, k, width=1) -> chain_t + | get_chain(self, ch) -> chain_t + | get_chain(self, ch) -> chain_t + | + | get_reg_chain(self, *args) -> 'chain_t *' + | get_reg_chain(self, reg, width=1) -> chain_t + | get_reg_chain(self, reg, width=1) -> chain_t + | + | get_stk_chain(self, *args) -> 'chain_t *' + | get_stk_chain(self, off, width=1) -> chain_t + | get_stk_chain(self, off, width=1) -> chain_t + | + | ---------------------------------------------------------------------- + | 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 + +Help on class block_chains_vec_t in module ida_hexrays: + +class block_chains_vec_t(builtins.object) + | Proxy of C++ qvector< block_chains_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'block_chains_t const &' + | __getitem__(self, i) -> block_chains_t + | + | __init__(self, *args) + | __init__(self) -> block_chains_vec_t + | __init__(self, x) -> block_chains_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_block_chains_vec_t(...) + | delete_block_chains_vec_t(self) + | + | at(self, *args) -> 'block_chains_t const &' + | at(self, _idx) -> block_chains_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< block_chains_t >::const_iterator' + | begin(self) -> block_chains_t + | begin(self) -> block_chains_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< block_chains_t >::const_iterator' + | end(self) -> block_chains_t + | end(self) -> block_chains_t + | + | erase(self, *args) -> 'qvector< block_chains_t >::iterator' + | erase(self, it) -> block_chains_t + | erase(self, first, last) -> block_chains_t + | + | extract(self, *args) -> 'block_chains_t *' + | extract(self) -> block_chains_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=block_chains_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< block_chains_t >::iterator' + | insert(self, it, x) -> block_chains_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'block_chains_t &' + | push_back(self, x) + | push_back(self) -> block_chains_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function boundaries_begin in module ida_hexrays: + +boundaries_begin(*args) -> 'boundaries_iterator_t' + boundaries_begin(map) -> boundaries_iterator_t + + + Get iterator pointing to the beginning of boundaries_t. + + + @param map (C++: const boundaries_t *) + +Help on function boundaries_clear in module ida_hexrays: + +boundaries_clear(*args) -> 'void' + boundaries_clear(map) + + + Clear boundaries_t. + + + @param map (C++: boundaries_t *) + +Help on function boundaries_end in module ida_hexrays: + +boundaries_end(*args) -> 'boundaries_iterator_t' + boundaries_end(map) -> boundaries_iterator_t + + + Get iterator pointing to the end of boundaries_t. + + + @param map (C++: const boundaries_t *) + +Help on function boundaries_erase in module ida_hexrays: + +boundaries_erase(*args) -> 'void' + boundaries_erase(map, p) + + + Erase current element from boundaries_t. + + + @param map (C++: boundaries_t *) + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_find in module ida_hexrays: + +boundaries_find(*args) -> 'boundaries_iterator_t' + boundaries_find(map, key) -> boundaries_iterator_t + + + Find the specified key in boundaries_t. + + + @param map (C++: const boundaries_t *) + @param key (C++: const cinsn_t *&) + +Help on function boundaries_first in module ida_hexrays: + +boundaries_first(*args) -> 'cinsn_t *const &' + boundaries_first(p) -> cinsn_t + + + Get reference to the current map key. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_free in module ida_hexrays: + +boundaries_free(*args) -> 'void' + boundaries_free(map) + + + Delete boundaries_t instance. + + + @param map (C++: boundaries_t *) + +Help on function boundaries_insert in module ida_hexrays: + +boundaries_insert(*args) -> 'boundaries_iterator_t' + boundaries_insert(map, key, val) -> boundaries_iterator_t + + + Insert new ( 'cinsn_t' *, 'rangeset_t' ) pair into boundaries_t. + + + @param map (C++: boundaries_t *) + @param key (C++: const cinsn_t *&) + @param val (C++: const rangeset_t &) + +Help on class boundaries_iterator_t in module ida_hexrays: + +class boundaries_iterator_t(builtins.object) + | Proxy of C++ boundaries_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> boundaries_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_boundaries_iterator_t(...) + | delete_boundaries_iterator_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 + | + | x + | boundaries_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function boundaries_new in module ida_hexrays: + +boundaries_new(*args) -> 'boundaries_t *' + boundaries_new() -> boundaries_t + + + Create a new boundaries_t instance. + +Help on function boundaries_next in module ida_hexrays: + +boundaries_next(*args) -> 'boundaries_iterator_t' + boundaries_next(p) -> boundaries_iterator_t + + + Move to the next element. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_prev in module ida_hexrays: + +boundaries_prev(*args) -> 'boundaries_iterator_t' + boundaries_prev(p) -> boundaries_iterator_t + + + Move to the previous element. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_second in module ida_hexrays: + +boundaries_second(*args) -> 'rangeset_t &' + boundaries_second(p) -> rangeset_t + + + Get reference to the current map value. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_size in module ida_hexrays: + +boundaries_size(*args) -> 'size_t' + boundaries_size(map) -> size_t + + + Get size of boundaries_t. + + + @param map (C++: boundaries_t *) + +Help on class boundaries_t in module ida_hexrays: + +class boundaries_t(builtins.object) + | Proxy of C++ std::map< cinsn_t *,rangeset_t > class. + | + | Methods defined here: + | + | __begin = boundaries_begin(...) + | boundaries_begin(map) -> boundaries_iterator_t + | + | __clear = boundaries_clear(...) + | boundaries_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = boundaries_end(...) + | boundaries_end(map) -> boundaries_iterator_t + | + | __erase = boundaries_erase(...) + | boundaries_erase(map, p) + | + | __find = boundaries_find(...) + | boundaries_find(map, key) -> boundaries_iterator_t + | + | __first = boundaries_first(...) + | boundaries_first(p) -> cinsn_t + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> boundaries_t + | + | __insert = boundaries_insert(...) + | boundaries_insert(map, key, val) -> boundaries_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = boundaries_next(...) + | boundaries_next(p) -> boundaries_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = boundaries_second(...) + | boundaries_second(p) -> rangeset_t + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = boundaries_size(...) + | boundaries_size(map) -> size_t + | + | __swig_destroy__ = delete_boundaries_t(...) + | delete_boundaries_t(self) + | + | at(self, *args) -> 'rangeset_t &' + | at(self, _Keyval) -> rangeset_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = + | Proxy of C++ cinsn_t class. + | + | valuetype = + | Proxy of C++ rangeset_t class. + +Help on function call_helper in module ida_hexrays: + +call_helper(rettype, args, *rest) + +Help on class carg_t in module ida_hexrays: + +class carg_t(cexpr_t) + | Proxy of C++ carg_t class. + | + | Method resolution order: + | carg_t + | cexpr_t + | citem_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> carg_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_carg_t(...) + | delete_carg_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | consume_cexpr(self, *args) -> 'void' + | consume_cexpr(self, e) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | formal_type + | carg_t_formal_type_get(self) -> tinfo_t + | + | is_vararg + | carg_t_is_vararg_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from cexpr_t: + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _get_a(self, *args) -> 'carglist_t *' + | _get_a(self) -> carglist_t + | + | _get_fpc(self, *args) -> 'fnumber_t *' + | _get_fpc(self) -> fnumber_t + | + | _get_helper(self, *args) -> 'char *' + | _get_helper(self) -> char * + | + | _get_insn(self, *args) -> 'cinsn_t *' + | _get_insn(self) -> cinsn_t + | + | _get_m(self, *args) -> 'int' + | _get_m(self) -> int + | + | _get_n(self, *args) -> 'cnumber_t *' + | _get_n(self) -> cnumber_t + | + | _get_obj_ea(self, *args) -> 'ea_t' + | _get_obj_ea(self) -> ea_t + | + | _get_ptrsize(self, *args) -> 'int' + | _get_ptrsize(self) -> int + | + | _get_refwidth(self, *args) -> 'int' + | _get_refwidth(self) -> int + | + | _get_string(self, *args) -> 'char *' + | _get_string(self) -> char * + | + | _get_x(self, *args) -> 'cexpr_t *' + | _get_x(self) -> cexpr_t + | + | _get_y(self, *args) -> 'cexpr_t *' + | _get_y(self) -> cexpr_t + | + | _get_z(self, *args) -> 'cexpr_t *' + | _get_z(self) -> cexpr_t + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _replace_by(self, *args) -> 'void' + | _replace_by(self, r) + | + | _set_a(self, *args) -> 'void' + | _set_a(self, _v) + | + | _set_fpc(self, *args) -> 'void' + | _set_fpc(self, _v) + | + | _set_helper(self, *args) -> 'void' + | _set_helper(self, _v) + | + | _set_insn(self, *args) -> 'void' + | _set_insn(self, _v) + | + | _set_m(self, *args) -> 'void' + | _set_m(self, _v) + | + | _set_n(self, *args) -> 'void' + | _set_n(self, _v) + | + | _set_obj_ea(self, *args) -> 'void' + | _set_obj_ea(self, _v) + | + | _set_ptrsize(self, *args) -> 'void' + | _set_ptrsize(self, _v) + | + | _set_refwidth(self, *args) -> 'void' + | _set_refwidth(self, _v) + | + | _set_string(self, *args) -> 'void' + | _set_string(self, _v) + | + | _set_x(self, *args) -> 'void' + | _set_x(self, _v) + | + | _set_y(self, *args) -> 'void' + | _set_y(self, _v) + | + | _set_z(self, *args) -> 'void' + | _set_z(self, _v) + | + | assign(self, *args) -> 'cexpr_t &' + | assign(self, r) -> cexpr_t + | + | calc_type(self, *args) -> 'void' + | calc_type(self, recursive) + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | contains_comma(self, *args) -> 'bool' + | contains_comma(self, times=1) -> bool + | + | contains_comma_or_insn_or_label(self, *args) -> 'bool' + | contains_comma_or_insn_or_label(self, maxcommas=1) -> bool + | + | contains_insn(self, *args) -> 'bool' + | contains_insn(self, times=1) -> bool + | + | contains_insn_or_label(self, *args) -> 'bool' + | contains_insn_or_label(self) -> bool + | + | contains_operator(self, *args) -> 'bool' + | contains_operator(self, needed_op, times=1) -> bool + | + | cpadone(self, *args) -> 'bool' + | cpadone(self) -> bool + | + | equal_effect(self, *args) -> 'bool' + | equal_effect(self, r) -> bool + | + | find_num_op(self, *args) -> 'cexpr_t *' + | find_num_op(self) -> cexpr_t + | find_num_op(self) -> cexpr_t + | + | find_op(self, *args) -> 'cexpr_t *' + | find_op(self, _op) -> cexpr_t + | find_op(self, _op) -> cexpr_t + | + | get_1num_op(self, *args) -> 'bool' + | get_1num_op(self, o1, o2) -> bool + | + | get_const_value(self, *args) -> 'bool' + | get_const_value(self) -> bool + | + | get_high_nbit_bound(self, *args) -> 'bit_bound_t' + | get_high_nbit_bound(self) -> bit_bound_t + | + | get_low_nbit_bound(self, *args) -> 'int' + | get_low_nbit_bound(self) -> int + | + | get_ptr_or_array(self, *args) -> 'cexpr_t *' + | get_ptr_or_array(self) -> cexpr_t + | + | get_type_sign(self, *args) -> 'type_sign_t' + | get_type_sign(self) -> type_sign_t + | + | get_v(self, *args) -> 'var_ref_t *' + | get_v(self) -> var_ref_t + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self) -> bool + | + | is_call_arg_of(self, *args) -> 'bool' + | is_call_arg_of(self, parent) -> bool + | + | is_call_object_of(self, *args) -> 'bool' + | is_call_object_of(self, parent) -> bool + | + | is_child_of(self, *args) -> 'bool' + | is_child_of(self, parent) -> bool + | + | is_const_value(self, *args) -> 'bool' + | is_const_value(self, _v) -> bool + | + | is_cstr(self, *args) -> 'bool' + | is_cstr(self) -> bool + | + | is_fpop(self, *args) -> 'bool' + | is_fpop(self) -> bool + | + | is_jumpout(self, *args) -> 'bool' + | is_jumpout(self) -> bool + | + | is_negative_const(self, *args) -> 'bool' + | is_negative_const(self) -> bool + | + | is_nice_cond(self, *args) -> 'bool' + | is_nice_cond(self) -> bool + | + | is_nice_expr(self, *args) -> 'bool' + | is_nice_expr(self) -> bool + | + | is_non_negative_const(self, *args) -> 'bool' + | is_non_negative_const(self) -> bool + | + | is_non_zero_const(self, *args) -> 'bool' + | is_non_zero_const(self) -> bool + | + | is_odd_lvalue(self, *args) -> 'bool' + | is_odd_lvalue(self) -> bool + | + | is_type_signed(self, *args) -> 'bool' + | is_type_signed(self) -> bool + | + | is_type_unsigned(self, *args) -> 'bool' + | is_type_unsigned(self) -> bool + | + | is_undef_val(self, *args) -> 'bool' + | is_undef_val(self) -> bool + | + | is_vftable(self, *args) -> 'bool' + | is_vftable(self) -> bool + | + | is_zero_const(self, *args) -> 'bool' + | is_zero_const(self) -> bool + | + | maybe_ptr(self, *args) -> 'bool' + | maybe_ptr(self) -> bool + | + | numval(self, *args) -> 'uint64' + | numval(self) -> uint64 + | + | print1(self, *args) -> 'void' + | print1(self, func) + | + | put_number(self, *args) -> 'void' + | put_number(self, func, value, nbytes, sign=no_sign) + | + | requires_lvalue(self, *args) -> 'bool' + | requires_lvalue(self, child) -> bool + | + | set_cpadone(self, *args) -> 'void' + | set_cpadone(self) + | + | set_v(self, *args) -> 'void' + | set_v(self, v) + | + | set_vftable(self, *args) -> 'void' + | set_vftable(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | theother(self, *args) -> 'cexpr_t *' + | theother(self, what) -> cexpr_t + | theother(self, what) -> cexpr_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cexpr_t: + | + | a + | + | exflags + | cexpr_t_exflags_get(self) -> uint32 + | + | fpc + | + | helper + | + | insn + | + | m + | + | n + | + | obj_ea + | + | operands + | return a dictionary with the operands of a cexpr_t. + | + | opname + | + | ptrsize + | + | refwidth + | + | string + | + | type + | cexpr_t_type_get(self) -> tinfo_t + | + | v + | + | x + | + | y + | + | z + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from cexpr_t: + | + | op_to_typename = {0: 'empty', 1: 'comma', 2: 'asg', 3: 'asgbor', 4: 'a... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) -> 'ctype_t' + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) -> 'void' + | _set_op(self, v) + | + | contains_expr(self, *args) -> 'bool' + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) -> 'bool' + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) -> 'citem_t *' + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) -> 'citem_t *' + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) -> 'bool' + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class carglist_t in module ida_hexrays: + +class carglist_t(qvector_carg_t) + | Proxy of C++ carglist_t class. + | + | Method resolution order: + | carglist_t + | qvector_carg_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> carglist_t + | __init__(self, ftype, fl=0) -> carglist_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_carglist_t(...) + | delete_carglist_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | carglist_t_flags_get(self) -> int + | + | functype + | carglist_t_functype_get(self) -> tinfo_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_carg_t: + | + | __getitem__(self, *args) -> 'carg_t const &' + | __getitem__(self, i) -> carg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'carg_t &' + | push_back(self, x) + | push_back(self) -> carg_t + | + | at = __getitem__(self, *args) -> 'carg_t const &' + | __getitem__(self, i) -> carg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< carg_t >::const_iterator' + | begin(self) -> carg_t + | begin(self) -> carg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< carg_t >::const_iterator' + | end(self) -> carg_t + | end(self) -> carg_t + | + | erase(self, *args) -> 'qvector< carg_t >::iterator' + | erase(self, it) -> carg_t + | erase(self, first, last) -> carg_t + | + | extract(self, *args) -> 'carg_t *' + | extract(self) -> carg_t + | + | find(self, *args) -> 'qvector< carg_t >::const_iterator' + | find(self, x) -> carg_t + | find(self, x) -> carg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=carg_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< carg_t >::iterator' + | insert(self, it, x) -> carg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'carg_t &' + | push_back(self, x) + | push_back(self) -> carg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_carg_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class casm_t in module ida_hexrays: + +class casm_t(ida_pro.eavec_t)↗ + | Proxy of C++ casm_t class. + | + | Method resolution order: + | casm_t + | ida_pro.eavec_t↗ + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, ea) -> casm_t + | __init__(self, r) -> casm_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_casm_t(...) + | delete_casm_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | one_insn(self, *args) -> 'bool' + | one_insn(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_pro.eavec_t:↗ + | + | __getitem__(self, *args) -> 'unsigned-ea-like-numeric-type const &'↗ + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'unsigned-ea-like-numeric-type &'↗ + | push_back(self, x) + | push_back(self) -> unsigned-ea-like-numeric-type &↗ + | + | at = __getitem__(self, *args) -> 'unsigned-ea-like-numeric-type const &'↗ + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< unsigned-ea-like-numeric-type >::const_iterator'↗ + | begin(self) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | begin(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< unsigned-ea-like-numeric-type >::const_iterator'↗ + | end(self) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | end(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | erase(self, *args) -> 'qvector< unsigned-ea-like-numeric-type >::iterator'↗ + | erase(self, it) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | erase(self, first, last) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | + | extract(self, *args) -> 'unsigned-ea-like-numeric-type *'↗ + | extract(self) -> unsigned-ea-like-numeric-type *↗ + | + | find(self, *args) -> 'qvector< unsigned-ea-like-numeric-type >::const_iterator'↗ + | find(self, x) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | find(self, x) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< unsigned-ea-like-numeric-type >::iterator'↗ + | insert(self, it, x) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'unsigned-ea-like-numeric-type &'↗ + | push_back(self, x) + | push_back(self) -> unsigned-ea-like-numeric-type &↗ + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_pro.eavec_t:↗ + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function cblock_at in module ida_hexrays: + +cblock_at(self, index) + # cblock.at(int) -> returns the item at the given index index + +Help on function cblock_find in module ida_hexrays: + +cblock_find(self, item) + # cblock.find(cinsn_t) -> returns the iterator positioned at the given item + +Help on function cblock_index in module ida_hexrays: + +cblock_index(self, item) + # cblock.index(cinsn_t) -> returns the index of the given item + +Help on function cblock_insert in module ida_hexrays: + +cblock_insert(self, index, item) + # cblock.insert(index, cinsn_t) + +Help on function cblock_iter in module ida_hexrays: + +cblock_iter(self) + +Help on function cblock_remove in module ida_hexrays: + +cblock_remove(self, item) + # cblock.remove(cinsn_t) + +Help on class cblock_t in module ida_hexrays: + +class cblock_t(qlist_cinsn_t) + | Proxy of C++ cblock_t class. + | + | Method resolution order: + | cblock_t + | qlist_cinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cblock_t + | + | __iter__ = cblock_iter(self) + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cblock_t(...) + | delete_cblock_t(self) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | at = cblock_at(self, index) + | # cblock.at(int) -> returns the item at the given index index + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | find = cblock_find(self, item) + | # cblock.find(cinsn_t) -> returns the iterator positioned at the given item + | + | index = cblock_index(self, item) + | # cblock.index(cinsn_t) -> returns the index of the given item + | + | insert = cblock_insert(self, index, item) + | # cblock.insert(index, cinsn_t) + | + | remove = cblock_remove(self, item) + | # cblock.remove(cinsn_t) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from qlist_cinsn_t: + | + | back(self, *args) -> 'cinsn_t const &' + | back(self) -> cinsn_t + | back(self) -> cinsn_t + | + | begin(self, *args) -> 'qlist_cinsn_t_iterator' + | begin(self) -> qlist_cinsn_t_iterator + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qlist_cinsn_t_iterator' + | end(self) -> qlist_cinsn_t_iterator + | + | erase(self, *args) -> 'void' + | erase(self, p) -> qlist< cinsn_t >::iterator + | erase(self, p1, p2) + | erase(self, p) + | + | front(self, *args) -> 'cinsn_t const &' + | front(self) -> cinsn_t + | front(self) -> cinsn_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | pop_front(self, *args) -> 'void' + | pop_front(self) + | + | push_back(self, *args) -> 'cinsn_t &' + | push_back(self, x) + | push_back(self) -> cinsn_t + | + | push_front(self, *args) -> 'void' + | push_front(self, x) + | + | rbegin(self, *args) -> 'qlist< cinsn_t >::const_reverse_iterator' + | rbegin(self) -> qlist< cinsn_t >::reverse_iterator + | rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | rend(self, *args) -> 'qlist< cinsn_t >::const_reverse_iterator' + | rend(self) -> qlist< cinsn_t >::reverse_iterator + | rend(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, x) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qlist_cinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class ccase_t in module ida_hexrays: + +class ccase_t(cinsn_t) + | Proxy of C++ ccase_t class. + | + | Method resolution order: + | ccase_t + | cinsn_t + | citem_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ccase_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ccase_t(...) + | delete_ccase_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | value(self, *args) -> 'uint64 const &' + | value(self, i) -> uint64 const & + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | values + | ccase_t_values_get(self) -> ulonglongvec_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from cinsn_t: + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _get_casm(self, *args) -> 'casm_t *' + | _get_casm(self) -> casm_t + | + | _get_cblock(self, *args) -> 'cblock_t *' + | _get_cblock(self) -> cblock_t + | + | _get_cdo(self, *args) -> 'cdo_t *' + | _get_cdo(self) -> cdo_t + | + | _get_cexpr(self, *args) -> 'cexpr_t *' + | _get_cexpr(self) -> cexpr_t + | + | _get_cfor(self, *args) -> 'cfor_t *' + | _get_cfor(self) -> cfor_t + | + | _get_cgoto(self, *args) -> 'cgoto_t *' + | _get_cgoto(self) -> cgoto_t + | + | _get_cif(self, *args) -> 'cif_t *' + | _get_cif(self) -> cif_t + | + | _get_creturn(self, *args) -> 'creturn_t *' + | _get_creturn(self) -> creturn_t + | + | _get_cswitch(self, *args) -> 'cswitch_t *' + | _get_cswitch(self) -> cswitch_t + | + | _get_cwhile(self, *args) -> 'cwhile_t *' + | _get_cwhile(self) -> cwhile_t + | + | _print(self, *args) -> 'void' + | _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _replace_by(self, *args) -> 'void' + | _replace_by(self, r) + | + | _set_casm(self, *args) -> 'void' + | _set_casm(self, _v) + | + | _set_cblock(self, *args) -> 'void' + | _set_cblock(self, _v) + | + | _set_cdo(self, *args) -> 'void' + | _set_cdo(self, _v) + | + | _set_cexpr(self, *args) -> 'void' + | _set_cexpr(self, _v) + | + | _set_cfor(self, *args) -> 'void' + | _set_cfor(self, _v) + | + | _set_cgoto(self, *args) -> 'void' + | _set_cgoto(self, _v) + | + | _set_cif(self, *args) -> 'void' + | _set_cif(self, _v) + | + | _set_creturn(self, *args) -> 'void' + | _set_creturn(self, _v) + | + | _set_cswitch(self, *args) -> 'void' + | _set_cswitch(self, _v) + | + | _set_cwhile(self, *args) -> 'void' + | _set_cwhile(self, _v) + | + | assign(self, *args) -> 'cinsn_t &' + | assign(self, r) -> cinsn_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | collect_free_breaks(self, *args) -> 'bool' + | collect_free_breaks(self, breaks) -> bool + | + | collect_free_continues(self, *args) -> 'bool' + | collect_free_continues(self, continues) -> bool + | + | contains_free_break(self, *args) -> 'bool' + | contains_free_break(self) -> bool + | + | contains_free_continue(self, *args) -> 'bool' + | contains_free_continue(self) -> bool + | + | contains_insn(self, *args) -> 'bool' + | contains_insn(self, type, times=1) -> bool + | + | create_if(self, *args) -> 'cif_t &' + | create_if(self, cnd) -> cif_t + | + | is_epilog(self) + | + | is_ordinary_flow(self, *args) -> 'bool' + | is_ordinary_flow(self) -> bool + | + | new_insn(self, *args) -> 'cinsn_t &' + | new_insn(self, insn_ea) -> cinsn_t + | + | print1(self, *args) -> 'void' + | print1(self, func) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | zero(self, *args) -> 'void' + | zero(self) + | + | ---------------------------------------------------------------------- + | Static methods inherited from cinsn_t: + | + | insn_is_epilog(*args) -> 'bool' + | insn_is_epilog(insn) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cinsn_t: + | + | casm + | + | cblock + | + | cdo + | + | cexpr + | + | cfor + | + | cgoto + | + | cif + | + | creturn + | + | cswitch + | + | cwhile + | + | details + | return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + | + | opname + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from cinsn_t: + | + | op_to_typename = {70: 'empty', 71: 'block', 72: 'expr', 73: 'if', 74: ... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) -> 'ctype_t' + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) -> 'void' + | _set_op(self, v) + | + | contains_expr(self, *args) -> 'bool' + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) -> 'bool' + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) -> 'citem_t *' + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) -> 'citem_t *' + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) -> 'bool' + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class ccases_t in module ida_hexrays: + +class ccases_t(qvector_ccase_t) + | Proxy of C++ ccases_t class. + | + | Method resolution order: + | ccases_t + | qvector_ccase_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ccases_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ccases_t(...) + | delete_ccases_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_ccase_t: + | + | __getitem__(self, *args) -> 'ccase_t const &' + | __getitem__(self, i) -> ccase_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'ccase_t &' + | push_back(self, x) + | push_back(self) -> ccase_t + | + | at = __getitem__(self, *args) -> 'ccase_t const &' + | __getitem__(self, i) -> ccase_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< ccase_t >::const_iterator' + | begin(self) -> ccase_t + | begin(self) -> ccase_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< ccase_t >::const_iterator' + | end(self) -> ccase_t + | end(self) -> ccase_t + | + | erase(self, *args) -> 'qvector< ccase_t >::iterator' + | erase(self, it) -> ccase_t + | erase(self, first, last) -> ccase_t + | + | extract(self, *args) -> 'ccase_t *' + | extract(self) -> ccase_t + | + | find(self, *args) -> 'qvector< ccase_t >::const_iterator' + | find(self, x) -> ccase_t + | find(self, x) -> ccase_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=ccase_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< ccase_t >::iterator' + | insert(self, it, x) -> ccase_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'ccase_t &' + | push_back(self, x) + | push_back(self) -> ccase_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_ccase_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class cdg_insn_iterator_t in module ida_hexrays: + +class cdg_insn_iterator_t(builtins.object) + | Proxy of C++ cdg_insn_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cdg_insn_iterator_t + | __init__(self, r) -> cdg_insn_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cdg_insn_iterator_t(...) + | delete_cdg_insn_iterator_t(self) + | + | dslot_with_xrefs(self, *args) -> 'bool' + | dslot_with_xrefs(self) -> bool + | + | has_dslot(self, *args) -> 'bool' + | has_dslot(self) -> bool + | + | next(self, *args) -> 'merror_t' + | next(self, ins) -> merror_t + | + | ok(self, *args) -> 'bool' + | ok(self) -> bool + | + | start(self, *args) -> 'void' + | start(self, rng) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dslot + | cdg_insn_iterator_t_dslot_get(self) -> ea_t + | + | dslot_insn + | cdg_insn_iterator_t_dslot_insn_get(self) -> insn_t * + | + | ea + | cdg_insn_iterator_t_ea_get(self) -> ea_t + | + | end + | cdg_insn_iterator_t_end_get(self) -> ea_t + | + | is_likely_dslot + | cdg_insn_iterator_t_is_likely_dslot_get(self) -> bool + | + | is_separate_dslot + | cdg_insn_iterator_t_is_separate_dslot_get(self) -> bool + | + | thisown + | The membership flag + +Help on class cdo_t in module ida_hexrays: + +class cdo_t(cloop_t) + | Proxy of C++ cdo_t class. + | + | Method resolution order: + | cdo_t + | cloop_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cdo_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cdo_t(...) + | delete_cdo_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) -> 'cloop_t &' + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class ceinsn_t in module ida_hexrays: + +class ceinsn_t(builtins.object) + | Proxy of C++ ceinsn_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ceinsn_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ceinsn_t(...) + | delete_ceinsn_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + | + | thisown + | The membership flag + +Help on function cexpr_operands in module ida_hexrays: + +cexpr_operands(self) + return a dictionary with the operands of a cexpr_t. + +Help on class cexpr_t in module ida_hexrays: + +class cexpr_t(citem_t) + | Proxy of C++ cexpr_t class. + | + | Method resolution order: + | cexpr_t + | citem_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cexpr_t + | __init__(self, cop, _x) -> cexpr_t + | __init__(self, cop, _x, _y) -> cexpr_t + | __init__(self, cop, _x, _y, _z) -> cexpr_t + | __init__(self, r) -> cexpr_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cexpr_t(...) + | delete_cexpr_t(self) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _get_a(self, *args) -> 'carglist_t *' + | _get_a(self) -> carglist_t + | + | _get_fpc(self, *args) -> 'fnumber_t *' + | _get_fpc(self) -> fnumber_t + | + | _get_helper(self, *args) -> 'char *' + | _get_helper(self) -> char * + | + | _get_insn(self, *args) -> 'cinsn_t *' + | _get_insn(self) -> cinsn_t + | + | _get_m(self, *args) -> 'int' + | _get_m(self) -> int + | + | _get_n(self, *args) -> 'cnumber_t *' + | _get_n(self) -> cnumber_t + | + | _get_obj_ea(self, *args) -> 'ea_t' + | _get_obj_ea(self) -> ea_t + | + | _get_ptrsize(self, *args) -> 'int' + | _get_ptrsize(self) -> int + | + | _get_refwidth(self, *args) -> 'int' + | _get_refwidth(self) -> int + | + | _get_string(self, *args) -> 'char *' + | _get_string(self) -> char * + | + | _get_x(self, *args) -> 'cexpr_t *' + | _get_x(self) -> cexpr_t + | + | _get_y(self, *args) -> 'cexpr_t *' + | _get_y(self) -> cexpr_t + | + | _get_z(self, *args) -> 'cexpr_t *' + | _get_z(self) -> cexpr_t + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _replace_by(self, *args) -> 'void' + | _replace_by(self, r) + | + | _set_a(self, *args) -> 'void' + | _set_a(self, _v) + | + | _set_fpc(self, *args) -> 'void' + | _set_fpc(self, _v) + | + | _set_helper(self, *args) -> 'void' + | _set_helper(self, _v) + | + | _set_insn(self, *args) -> 'void' + | _set_insn(self, _v) + | + | _set_m(self, *args) -> 'void' + | _set_m(self, _v) + | + | _set_n(self, *args) -> 'void' + | _set_n(self, _v) + | + | _set_obj_ea(self, *args) -> 'void' + | _set_obj_ea(self, _v) + | + | _set_ptrsize(self, *args) -> 'void' + | _set_ptrsize(self, _v) + | + | _set_refwidth(self, *args) -> 'void' + | _set_refwidth(self, _v) + | + | _set_string(self, *args) -> 'void' + | _set_string(self, _v) + | + | _set_x(self, *args) -> 'void' + | _set_x(self, _v) + | + | _set_y(self, *args) -> 'void' + | _set_y(self, _v) + | + | _set_z(self, *args) -> 'void' + | _set_z(self, _v) + | + | assign(self, *args) -> 'cexpr_t &' + | assign(self, r) -> cexpr_t + | + | calc_type(self, *args) -> 'void' + | calc_type(self, recursive) + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains_comma(self, *args) -> 'bool' + | contains_comma(self, times=1) -> bool + | + | contains_comma_or_insn_or_label(self, *args) -> 'bool' + | contains_comma_or_insn_or_label(self, maxcommas=1) -> bool + | + | contains_insn(self, *args) -> 'bool' + | contains_insn(self, times=1) -> bool + | + | contains_insn_or_label(self, *args) -> 'bool' + | contains_insn_or_label(self) -> bool + | + | contains_operator(self, *args) -> 'bool' + | contains_operator(self, needed_op, times=1) -> bool + | + | cpadone(self, *args) -> 'bool' + | cpadone(self) -> bool + | + | equal_effect(self, *args) -> 'bool' + | equal_effect(self, r) -> bool + | + | find_num_op(self, *args) -> 'cexpr_t *' + | find_num_op(self) -> cexpr_t + | find_num_op(self) -> cexpr_t + | + | find_op(self, *args) -> 'cexpr_t *' + | find_op(self, _op) -> cexpr_t + | find_op(self, _op) -> cexpr_t + | + | get_1num_op(self, *args) -> 'bool' + | get_1num_op(self, o1, o2) -> bool + | + | get_const_value(self, *args) -> 'bool' + | get_const_value(self) -> bool + | + | get_high_nbit_bound(self, *args) -> 'bit_bound_t' + | get_high_nbit_bound(self) -> bit_bound_t + | + | get_low_nbit_bound(self, *args) -> 'int' + | get_low_nbit_bound(self) -> int + | + | get_ptr_or_array(self, *args) -> 'cexpr_t *' + | get_ptr_or_array(self) -> cexpr_t + | + | get_type_sign(self, *args) -> 'type_sign_t' + | get_type_sign(self) -> type_sign_t + | + | get_v(self, *args) -> 'var_ref_t *' + | get_v(self) -> var_ref_t + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self) -> bool + | + | is_call_arg_of(self, *args) -> 'bool' + | is_call_arg_of(self, parent) -> bool + | + | is_call_object_of(self, *args) -> 'bool' + | is_call_object_of(self, parent) -> bool + | + | is_child_of(self, *args) -> 'bool' + | is_child_of(self, parent) -> bool + | + | is_const_value(self, *args) -> 'bool' + | is_const_value(self, _v) -> bool + | + | is_cstr(self, *args) -> 'bool' + | is_cstr(self) -> bool + | + | is_fpop(self, *args) -> 'bool' + | is_fpop(self) -> bool + | + | is_jumpout(self, *args) -> 'bool' + | is_jumpout(self) -> bool + | + | is_negative_const(self, *args) -> 'bool' + | is_negative_const(self) -> bool + | + | is_nice_cond(self, *args) -> 'bool' + | is_nice_cond(self) -> bool + | + | is_nice_expr(self, *args) -> 'bool' + | is_nice_expr(self) -> bool + | + | is_non_negative_const(self, *args) -> 'bool' + | is_non_negative_const(self) -> bool + | + | is_non_zero_const(self, *args) -> 'bool' + | is_non_zero_const(self) -> bool + | + | is_odd_lvalue(self, *args) -> 'bool' + | is_odd_lvalue(self) -> bool + | + | is_type_signed(self, *args) -> 'bool' + | is_type_signed(self) -> bool + | + | is_type_unsigned(self, *args) -> 'bool' + | is_type_unsigned(self) -> bool + | + | is_undef_val(self, *args) -> 'bool' + | is_undef_val(self) -> bool + | + | is_vftable(self, *args) -> 'bool' + | is_vftable(self) -> bool + | + | is_zero_const(self, *args) -> 'bool' + | is_zero_const(self) -> bool + | + | maybe_ptr(self, *args) -> 'bool' + | maybe_ptr(self) -> bool + | + | numval(self, *args) -> 'uint64' + | numval(self) -> uint64 + | + | print1(self, *args) -> 'void' + | print1(self, func) + | + | put_number(self, *args) -> 'void' + | put_number(self, func, value, nbytes, sign=no_sign) + | + | requires_lvalue(self, *args) -> 'bool' + | requires_lvalue(self, child) -> bool + | + | set_cpadone(self, *args) -> 'void' + | set_cpadone(self) + | + | set_v(self, *args) -> 'void' + | set_v(self, v) + | + | set_vftable(self, *args) -> 'void' + | set_vftable(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | theother(self, *args) -> 'cexpr_t *' + | theother(self, what) -> cexpr_t + | theother(self, what) -> cexpr_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | a + | + | exflags + | cexpr_t_exflags_get(self) -> uint32 + | + | fpc + | + | helper + | + | insn + | + | m + | + | n + | + | obj_ea + | + | operands + | return a dictionary with the operands of a cexpr_t. + | + | opname + | + | ptrsize + | + | refwidth + | + | string + | + | thisown + | The membership flag + | + | type + | cexpr_t_type_get(self) -> tinfo_t + | + | v + | + | x + | + | y + | + | z + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | op_to_typename = {0: 'empty', 1: 'comma', 2: 'asg', 3: 'asgbor', 4: 'a... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) -> 'ctype_t' + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) -> 'void' + | _set_op(self, v) + | + | contains_expr(self, *args) -> 'bool' + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) -> 'bool' + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) -> 'citem_t *' + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) -> 'citem_t *' + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) -> 'bool' + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class cfor_t in module ida_hexrays: + +class cfor_t(cloop_t) + | Proxy of C++ cfor_t class. + | + | Method resolution order: + | cfor_t + | cloop_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cfor_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cfor_t(...) + | delete_cfor_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | init + | cfor_t_init_get(self) -> cexpr_t + | + | step + | cfor_t_step_get(self) -> cexpr_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) -> 'cloop_t &' + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class cfunc_parentee_t in module ida_hexrays: + +class cfunc_parentee_t(ctree_parentee_t) + | Proxy of C++ cfunc_parentee_t class. + | + | Method resolution order: + | cfunc_parentee_t + | ctree_parentee_t + | ctree_visitor_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, f, post=False) -> cfunc_parentee_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cfunc_parentee_t(...) + | delete_cfunc_parentee_t(self) + | + | calc_rvalue_type(self, *args) -> 'bool' + | calc_rvalue_type(self, target, e) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | func + | cfunc_parentee_t_func_get(self) -> cfunc_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_parentee_t: + | + | recalc_parent_types(self, *args) -> 'bool' + | recalc_parent_types(self) -> bool + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_visitor_t: + | + | apply_to(self, *args) -> 'int' + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) -> 'int' + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) -> 'void' + | clr_prune(self) + | + | clr_restart(self, *args) -> 'void' + | clr_restart(self) + | + | is_postorder(self, *args) -> 'bool' + | is_postorder(self) -> bool + | + | leave_expr(self, *args) -> 'int' + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) -> 'int' + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) -> 'bool' + | maintain_parents(self) -> bool + | + | must_prune(self, *args) -> 'bool' + | must_prune(self) -> bool + | + | must_restart(self, *args) -> 'bool' + | must_restart(self) -> bool + | + | only_insns(self, *args) -> 'bool' + | only_insns(self) -> bool + | + | parent_expr(self, *args) -> 'cexpr_t *' + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) -> 'cinsn_t *' + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) -> 'void' + | prune_now(self) + | + | set_restart(self, *args) -> 'void' + | set_restart(self) + | + | visit_expr(self, *args) -> 'int' + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) -> 'int' + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctree_visitor_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + +Help on class cfunc_t in module ida_hexrays: + +class cfunc_t(builtins.object) + | Proxy of C++ cfunc_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) -> 'qstring' + | __str__(self) -> qstring + | + | __swig_destroy__ = delete_cfunc_t(...) + | delete_cfunc_t(self) + | + | build_c_tree(self, *args) -> 'void' + | build_c_tree(self) + | + | del_orphan_cmts(self, *args) -> 'int' + | del_orphan_cmts(self) -> int + | + | find_item_coords(self, *args) -> 'PyObject *' + | find_item_coords(self, item, px, py) -> bool + | find_item_coords(self, item) -> PyObject * + | + | find_label(self, *args) -> 'citem_t *' + | find_label(self, label) -> citem_t + | + | gather_derefs(self, *args) -> 'bool' + | gather_derefs(self, ci, udm=None) -> bool + | + | get_boundaries(self, *args) -> 'boundaries_t &' + | get_boundaries(self) -> boundaries_t + | + | get_eamap(self, *args) -> 'eamap_t &' + | get_eamap(self) -> eamap_t + | + | get_func_type(self, *args) -> 'bool' + | get_func_type(self, type) -> bool + | + | get_line_item(self, *args) -> 'bool' + | get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool + | + | get_lvars(self, *args) -> 'lvars_t *' + | get_lvars(self) -> lvars_t + | + | get_pseudocode(self, *args) -> 'strvec_t const &' + | get_pseudocode(self) -> strvec_t + | + | get_stkoff_delta(self, *args) -> 'sval_t' + | get_stkoff_delta(self) -> sval_t + | + | get_user_cmt(self, *args) -> 'char const *' + | get_user_cmt(self, loc, rt) -> char const * + | + | get_user_iflags(self, *args) -> 'int32' + | get_user_iflags(self, loc) -> int32 + | + | get_user_union_selection(self, *args) -> 'bool' + | get_user_union_selection(self, ea, path) -> bool + | + | get_warnings(self, *args) -> 'hexwarns_t &' + | get_warnings(self) -> hexwarns_t + | + | has_orphan_cmts(self, *args) -> 'bool' + | has_orphan_cmts(self) -> bool + | + | print_dcl(self, *args) -> 'void' + | print_dcl(self) + | + | print_func(self, *args) -> 'void' + | print_func(self, vp) + | + | refresh_func_ctext(self, *args) -> 'void' + | refresh_func_ctext(self) + | + | release(self, *args) -> 'void' + | release(self) + | + | remove_unused_labels(self, *args) -> 'void' + | remove_unused_labels(self) + | + | save_user_cmts(self, *args) -> 'void' + | save_user_cmts(self) + | + | save_user_iflags(self, *args) -> 'void' + | save_user_iflags(self) + | + | save_user_labels(self, *args) -> 'void' + | save_user_labels(self) + | + | save_user_numforms(self, *args) -> 'void' + | save_user_numforms(self) + | + | save_user_unions(self, *args) -> 'void' + | save_user_unions(self) + | + | set_user_cmt(self, *args) -> 'void' + | set_user_cmt(self, loc, cmt) + | + | set_user_iflags(self, *args) -> 'void' + | set_user_iflags(self, loc, iflags) + | + | set_user_union_selection(self, *args) -> 'void' + | set_user_union_selection(self, ea, path) + | + | verify(self, *args) -> 'void' + | verify(self, aul, even_without_debugger) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argidx + | cfunc_t_argidx_get(self) -> intvec_t + | + | arguments + | + | body + | cfunc_t_body_get(self) -> cinsn_t + | + | boundaries + | get_boundaries(self) -> boundaries_t + | + | eamap + | get_eamap(self) -> eamap_t + | + | entry_ea + | cfunc_t_entry_ea_get(self) -> ea_t + | + | hdrlines + | cfunc_t_hdrlines_get(self) -> int + | + | lvars + | get_lvars(self) -> lvars_t + | + | maturity + | cfunc_t_maturity_get(self) -> ctree_maturity_t + | + | mba + | cfunc_t_mba_get(self) -> mbl_array_t + | + | numforms + | cfunc_t_numforms_get(self) -> user_numforms_t + | + | pseudocode + | get_pseudocode(self) -> strvec_t + | + | refcnt + | cfunc_t_refcnt_get(self) -> int + | + | statebits + | cfunc_t_statebits_get(self) -> int + | + | thisown + | The membership flag + | + | treeitems + | cfunc_t_treeitems_get(self) -> ctree_items_t + | + | type + | Get the function's return type tinfo_t object. + | + | user_cmts + | cfunc_t_user_cmts_get(self) -> user_cmts_t + | + | user_iflags + | cfunc_t_user_iflags_get(self) -> user_iflags_t + | + | user_labels + | cfunc_t_user_labels_get(self) -> user_labels_t + | + | user_unions + | cfunc_t_user_unions_get(self) -> user_unions_t + | + | warnings + | get_warnings(self) -> hexwarns_t + +Help on function cfunc_type in module ida_hexrays: + +cfunc_type(self) + Get the function's return type tinfo_t object. + +Help on class cfuncptr_t in module ida_hexrays: + +class cfuncptr_t(builtins.object) + | Proxy of C++ qrefcnt_t< cfunc_t > class. + | + | Methods defined here: + | + | __deref__(self, *args) -> 'cfunc_t *' + | __deref__(self) -> cfunc_t + | + | __eq__ lambda self, other + | + | __init__(self, *args) + | __init__(self, p) -> cfuncptr_t + | __init__(self, r) -> cfuncptr_t + | + | __ptrval__(self, *args) -> 'size_t' + | __ptrval__(self) -> size_t + | + | __ref__(self, *args) -> 'cfunc_t &' + | __ref__(self) -> cfunc_t + | + | __repr__ = _swig_repr(self) + | + | __str__ lambda self + | + | __swig_destroy__ = delete_cfuncptr_t(...) + | delete_cfuncptr_t(self) + | + | build_c_tree(self, *args) -> 'void' + | build_c_tree(self) + | + | del_orphan_cmts(self, *args) -> 'int' + | del_orphan_cmts(self) -> int + | + | find_item_coords(self, *args) -> 'PyObject *' + | find_item_coords(self, item, px, py) -> bool + | find_item_coords(self, item) -> PyObject * + | + | find_label(self, *args) -> 'citem_t *' + | find_label(self, label) -> citem_t + | + | gather_derefs(self, *args) -> 'bool' + | gather_derefs(self, ci, udm=None) -> bool + | + | get_boundaries(self, *args) -> 'boundaries_t &' + | get_boundaries(self) -> boundaries_t + | + | get_eamap(self, *args) -> 'eamap_t &' + | get_eamap(self) -> eamap_t + | + | get_func_type(self, *args) -> 'bool' + | get_func_type(self, type) -> bool + | + | get_line_item(self, *args) -> 'bool' + | get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool + | + | get_lvars(self, *args) -> 'lvars_t *' + | get_lvars(self) -> lvars_t + | + | get_pseudocode(self, *args) -> 'strvec_t const &' + | get_pseudocode(self) -> strvec_t + | + | get_stkoff_delta(self, *args) -> 'sval_t' + | get_stkoff_delta(self) -> sval_t + | + | get_user_cmt(self, *args) -> 'char const *' + | get_user_cmt(self, loc, rt) -> char const * + | + | get_user_iflags(self, *args) -> 'int32' + | get_user_iflags(self, loc) -> int32 + | + | get_user_union_selection(self, *args) -> 'bool' + | get_user_union_selection(self, ea, path) -> bool + | + | get_warnings(self, *args) -> 'hexwarns_t &' + | get_warnings(self) -> hexwarns_t + | + | has_orphan_cmts(self, *args) -> 'bool' + | has_orphan_cmts(self) -> bool + | + | print_dcl(self, *args) -> 'void' + | print_dcl(self) + | + | print_func(self, *args) -> 'void' + | print_func(self, vp) + | + | refresh_func_ctext(self, *args) -> 'void' + | refresh_func_ctext(self) + | + | release(self, *args) -> 'void' + | release(self) + | + | remove_unused_labels(self, *args) -> 'void' + | remove_unused_labels(self) + | + | reset(self, *args) -> 'void' + | reset(self) + | + | save_user_cmts(self, *args) -> 'void' + | save_user_cmts(self) + | + | save_user_iflags(self, *args) -> 'void' + | save_user_iflags(self) + | + | save_user_labels(self, *args) -> 'void' + | save_user_labels(self) + | + | save_user_numforms(self, *args) -> 'void' + | save_user_numforms(self) + | + | save_user_unions(self, *args) -> 'void' + | save_user_unions(self) + | + | set_user_cmt(self, *args) -> 'void' + | set_user_cmt(self, loc, cmt) + | + | set_user_iflags(self, *args) -> 'void' + | set_user_iflags(self, loc, iflags) + | + | set_user_union_selection(self, *args) -> 'void' + | set_user_union_selection(self, ea, path) + | + | verify(self, *args) -> 'void' + | verify(self, aul, even_without_debugger) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argidx + | cfuncptr_t_argidx_get(self) -> intvec_t + | + | arguments + | + | body + | cfuncptr_t_body_get(self) -> cinsn_t + | + | boundaries + | + | eamap + | + | entry_ea + | cfuncptr_t_entry_ea_get(self) -> ea_t + | + | hdrlines + | cfuncptr_t_hdrlines_get(self) -> int + | + | lvars + | + | maturity + | cfuncptr_t_maturity_get(self) -> ctree_maturity_t + | + | mba + | cfuncptr_t_mba_get(self) -> mbl_array_t + | + | numforms + | cfuncptr_t_numforms_get(self) -> user_numforms_t + | + | pseudocode + | + | refcnt + | cfuncptr_t_refcnt_get(self) -> int + | + | statebits + | cfuncptr_t_statebits_get(self) -> int + | + | thisown + | The membership flag + | + | treeitems + | cfuncptr_t_treeitems_get(self) -> ctree_items_t + | + | type + | + | user_cmts + | cfuncptr_t_user_cmts_get(self) -> user_cmts_t + | + | user_iflags + | cfuncptr_t_user_iflags_get(self) -> user_iflags_t + | + | user_labels + | cfuncptr_t_user_labels_get(self) -> user_labels_t + | + | user_unions + | cfuncptr_t_user_unions_get(self) -> user_unions_t + | + | warnings + +Help on class cgoto_t in module ida_hexrays: + +class cgoto_t(builtins.object) + | Proxy of C++ cgoto_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cgoto_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cgoto_t(...) + | delete_cgoto_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | label_num + | cgoto_t_label_num_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class chain_keeper_t in module ida_hexrays: + +class chain_keeper_t(builtins.object) + | Proxy of C++ chain_keeper_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _gc) -> chain_keeper_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_chain_keeper_t(...) + | delete_chain_keeper_t(self) + | + | back(self, *args) -> 'block_chains_t &' + | back(self) -> block_chains_t + | + | for_all_chains(self, *args) -> 'int' + | for_all_chains(self, cv, gca) -> int + | + | front(self, *args) -> 'block_chains_t &' + | front(self) -> block_chains_t + | + | ---------------------------------------------------------------------- + | 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 + +Help on class chain_t in module ida_hexrays: + +class chain_t(ida_pro.intvec_t) + | Proxy of C++ chain_t class. + | + | Method resolution order: + | chain_t + | ida_pro.intvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> chain_t + | __init__(self, t, off, w=1, v=-1) -> chain_t + | __init__(self, _k, w=1) -> chain_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_chain_t(...) + | delete_chain_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | append_list(self, *args) -> 'void' + | append_list(self, list) + | + | clear_varnum(self, *args) -> 'void' + | clear_varnum(self) + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | endoff(self, *args) -> 'voff_t const' + | endoff(self) -> voff_t + | + | get_reg(self, *args) -> 'mreg_t' + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) -> 'sval_t' + | get_stkoff(self) -> sval_t + | + | includes(self, *args) -> 'bool' + | includes(self, r) -> bool + | + | is_fake(self, *args) -> 'bool' + | is_fake(self) -> bool + | + | is_inited(self, *args) -> 'bool' + | is_inited(self) -> bool + | + | is_overlapped(self, *args) -> 'bool' + | is_overlapped(self) -> bool + | + | is_passreg(self, *args) -> 'bool' + | is_passreg(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_replaced(self, *args) -> 'bool' + | is_replaced(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | is_term(self, *args) -> 'bool' + | is_term(self) -> bool + | + | key(self, *args) -> 'voff_t const &' + | key(self) -> voff_t + | + | overlap(self, *args) -> 'bool' + | overlap(self, r) -> bool + | + | set_inited(self, *args) -> 'void' + | set_inited(self, b) + | + | set_overlapped(self, *args) -> 'void' + | set_overlapped(self, b) + | + | set_replaced(self, *args) -> 'void' + | set_replaced(self, b) + | + | set_term(self, *args) -> 'void' + | set_term(self, b) + | + | set_value(self, *args) -> 'void' + | set_value(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | chain_t_flags_get(self) -> uchar + | + | thisown + | The membership flag + | + | varnum + | chain_t_varnum_get(self) -> int + | + | width + | chain_t_width_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_pro.intvec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'int const &' + | __getitem__(self, i) -> int const & + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'int &' + | push_back(self, x) + | push_back(self) -> int & + | + | at = __getitem__(self, *args) -> 'int const &' + | __getitem__(self, i) -> int const & + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< int >::const_iterator' + | begin(self) -> qvector< int >::iterator + | begin(self) -> qvector< int >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< int >::const_iterator' + | end(self) -> qvector< int >::iterator + | end(self) -> qvector< int >::const_iterator + | + | erase(self, *args) -> 'qvector< int >::iterator' + | erase(self, it) -> qvector< int >::iterator + | erase(self, first, last) -> qvector< int >::iterator + | + | extract(self, *args) -> 'int *' + | extract(self) -> int * + | + | find(self, *args) -> 'qvector< int >::const_iterator' + | find(self, x) -> qvector< int >::iterator + | find(self, x) -> qvector< int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< int >::iterator' + | insert(self, it, x) -> qvector< int >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'int &' + | push_back(self, x) + | push_back(self) -> int & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_pro.intvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_pro.intvec_t: + | + | __hash__ = None + +Help on class chain_visitor_t in module ida_hexrays: + +class chain_visitor_t(builtins.object) + | Proxy of C++ chain_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> chain_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_chain_visitor_t(...) + | delete_chain_visitor_t(self) + | + | visit_chain(self, *args) -> 'int' + | visit_chain(self, nblock, ch) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | parent + | chain_visitor_t_parent_get(self) -> block_chains_t + | + | thisown + | The membership flag + +Help on function checkout_hexrays_license in module ida_hexrays: + +checkout_hexrays_license(*args) -> 'bool' + checkout_hexrays_license(silent) -> bool + + + Check out a floating decompiler license. This function will display a + dialog box if the license is not available. For non-floating licenses + this function is effectively no-op. It is not necessary to call this + function before decompiling. If the license was not checked out, the + decompiler will automatically do it. This function can be used to + check out a license in advance and ensure that a license is available. + + @param silent: silently fail if the license can not be checked out. + (C++: bool) + @return: false if failed + +Help on class cif_t in module ida_hexrays: + +class cif_t(ceinsn_t) + | Proxy of C++ cif_t class. + | + | Method resolution order: + | cif_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cif_t + | __init__(self, r) -> cif_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cif_t(...) + | delete_cif_t(self) + | + | assign(self, *args) -> 'cif_t &' + | assign(self, r) -> cif_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ielse + | cif_t_ielse_get(self) -> cinsn_t + | + | ithen + | cif_t_ithen_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function cinsn_details in module ida_hexrays: + +cinsn_details(self) + return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + +Help on class cinsn_t in module ida_hexrays: + +class cinsn_t(citem_t) + | Proxy of C++ cinsn_t class. + | + | Method resolution order: + | cinsn_t + | citem_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cinsn_t + | __init__(self, r) -> cinsn_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cinsn_t(...) + | delete_cinsn_t(self) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _get_casm(self, *args) -> 'casm_t *' + | _get_casm(self) -> casm_t + | + | _get_cblock(self, *args) -> 'cblock_t *' + | _get_cblock(self) -> cblock_t + | + | _get_cdo(self, *args) -> 'cdo_t *' + | _get_cdo(self) -> cdo_t + | + | _get_cexpr(self, *args) -> 'cexpr_t *' + | _get_cexpr(self) -> cexpr_t + | + | _get_cfor(self, *args) -> 'cfor_t *' + | _get_cfor(self) -> cfor_t + | + | _get_cgoto(self, *args) -> 'cgoto_t *' + | _get_cgoto(self) -> cgoto_t + | + | _get_cif(self, *args) -> 'cif_t *' + | _get_cif(self) -> cif_t + | + | _get_creturn(self, *args) -> 'creturn_t *' + | _get_creturn(self) -> creturn_t + | + | _get_cswitch(self, *args) -> 'cswitch_t *' + | _get_cswitch(self) -> cswitch_t + | + | _get_cwhile(self, *args) -> 'cwhile_t *' + | _get_cwhile(self) -> cwhile_t + | + | _print(self, *args) -> 'void' + | _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _replace_by(self, *args) -> 'void' + | _replace_by(self, r) + | + | _set_casm(self, *args) -> 'void' + | _set_casm(self, _v) + | + | _set_cblock(self, *args) -> 'void' + | _set_cblock(self, _v) + | + | _set_cdo(self, *args) -> 'void' + | _set_cdo(self, _v) + | + | _set_cexpr(self, *args) -> 'void' + | _set_cexpr(self, _v) + | + | _set_cfor(self, *args) -> 'void' + | _set_cfor(self, _v) + | + | _set_cgoto(self, *args) -> 'void' + | _set_cgoto(self, _v) + | + | _set_cif(self, *args) -> 'void' + | _set_cif(self, _v) + | + | _set_creturn(self, *args) -> 'void' + | _set_creturn(self, _v) + | + | _set_cswitch(self, *args) -> 'void' + | _set_cswitch(self, _v) + | + | _set_cwhile(self, *args) -> 'void' + | _set_cwhile(self, _v) + | + | assign(self, *args) -> 'cinsn_t &' + | assign(self, r) -> cinsn_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | collect_free_breaks(self, *args) -> 'bool' + | collect_free_breaks(self, breaks) -> bool + | + | collect_free_continues(self, *args) -> 'bool' + | collect_free_continues(self, continues) -> bool + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains_free_break(self, *args) -> 'bool' + | contains_free_break(self) -> bool + | + | contains_free_continue(self, *args) -> 'bool' + | contains_free_continue(self) -> bool + | + | contains_insn(self, *args) -> 'bool' + | contains_insn(self, type, times=1) -> bool + | + | create_if(self, *args) -> 'cif_t &' + | create_if(self, cnd) -> cif_t + | + | is_epilog(self) + | + | is_ordinary_flow(self, *args) -> 'bool' + | is_ordinary_flow(self) -> bool + | + | new_insn(self, *args) -> 'cinsn_t &' + | new_insn(self, insn_ea) -> cinsn_t + | + | print1(self, *args) -> 'void' + | print1(self, func) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | zero(self, *args) -> 'void' + | zero(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | insn_is_epilog(*args) -> 'bool' + | insn_is_epilog(insn) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | casm + | + | cblock + | + | cdo + | + | cexpr + | + | cfor + | + | cgoto + | + | cif + | + | creturn + | + | cswitch + | + | cwhile + | + | details + | return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + | + | opname + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | op_to_typename = {70: 'empty', 71: 'block', 72: 'expr', 73: 'if', 74: ... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) -> 'ctype_t' + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) -> 'void' + | _set_op(self, v) + | + | contains_expr(self, *args) -> 'bool' + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) -> 'bool' + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) -> 'citem_t *' + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) -> 'citem_t *' + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) -> 'bool' + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on function cinsn_t_insn_is_epilog in module ida_hexrays: + +cinsn_t_insn_is_epilog(*args) -> 'bool' + cinsn_t_insn_is_epilog(insn) -> bool + +Help on class cinsnptrvec_t in module ida_hexrays: + +class cinsnptrvec_t(builtins.object) + | Proxy of C++ qvector< cinsn_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'cinsn_t *const &' + | __getitem__(self, i) -> cinsn_t + | + | __init__(self, *args) + | __init__(self) -> cinsnptrvec_t + | __init__(self, x) -> cinsnptrvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_cinsnptrvec_t(...) + | delete_cinsnptrvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'cinsn_t *&' + | + | at = __getitem__(self, *args) -> 'cinsn_t *const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< cinsn_t * >::const_iterator' + | begin(self) -> qvector< cinsn_t * >::iterator + | begin(self) -> qvector< cinsn_t * >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< cinsn_t * >::const_iterator' + | end(self) -> qvector< cinsn_t * >::iterator + | end(self) -> qvector< cinsn_t * >::const_iterator + | + | erase(self, *args) -> 'qvector< cinsn_t * >::iterator' + | erase(self, it) -> qvector< cinsn_t * >::iterator + | erase(self, first, last) -> qvector< cinsn_t * >::iterator + | + | extract(self, *args) -> 'cinsn_t **' + | extract(self) -> cinsn_t ** + | + | find(self, *args) -> 'qvector< cinsn_t * >::const_iterator' + | find(self, x) -> qvector< cinsn_t * >::iterator + | find(self, x) -> qvector< cinsn_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< cinsn_t * >::iterator' + | insert(self, it, x) -> qvector< cinsn_t * >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'cinsn_t *&' + | push_back(self, x) + | push_back(self) -> cinsn_t *& + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class citem_cmt_t in module ida_hexrays: + +class citem_cmt_t(builtins.object) + | Proxy of C++ citem_cmt_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> citem_cmt_t + | __init__(self, s) -> citem_cmt_t + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) -> 'char const *' + | __str__(self) -> char const * + | + | __swig_destroy__ = delete_citem_cmt_t(...) + | delete_citem_cmt_t(self) + | + | c_str(self, *args) -> 'char const *' + | c_str(self) -> char const * + | + | ---------------------------------------------------------------------- + | 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 + | + | used + | citem_cmt_t_used_get(self) -> bool + +Help on class citem_locator_t in module ida_hexrays: + +class citem_locator_t(builtins.object) + | Proxy of C++ citem_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _ea, _op) -> citem_locator_t + | __init__(self, i) -> citem_locator_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_citem_locator_t(...) + | delete_citem_locator_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | citem_locator_t_ea_get(self) -> ea_t + | + | op + | citem_locator_t_op_get(self) -> ctype_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class citem_t in module ida_hexrays: + +class citem_t(builtins.object) + | Proxy of C++ citem_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> citem_t + | __init__(self, o) -> citem_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_citem_t(...) + | delete_citem_t(self) + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) -> 'ctype_t' + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) -> 'void' + | _set_op(self, v) + | + | contains_expr(self, *args) -> 'bool' + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) -> 'bool' + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) -> 'citem_t *' + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) -> 'citem_t *' + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) -> 'bool' + | is_expr(self) -> bool + | + | print1(self, *args) -> 'void' + | print1(self, func) + | + | replace_by(self, o) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | thisown + | The membership flag + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on function citem_to_specific_type in module ida_hexrays: + +citem_to_specific_type(self) + cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on function clear_cached_cfuncs in module ida_hexrays: + +clear_cached_cfuncs(*args) -> 'void' + clear_cached_cfuncs() + + + Flush all cached decompilation results. + +Help on class cloop_t in module ida_hexrays: + +class cloop_t(ceinsn_t) + | Proxy of C++ cloop_t class. + | + | Method resolution order: + | cloop_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cloop_t + | __init__(self, b) -> cloop_t + | __init__(self, r) -> cloop_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cloop_t(...) + | delete_cloop_t(self) + | + | assign(self, *args) -> 'cloop_t &' + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function close_pseudocode in module ida_hexrays: + +close_pseudocode(*args) -> 'bool' + close_pseudocode(f) -> bool + + + Close pseudocode window. + + @param f: pointer to window (C++: TWidget *) + @return: false if failed + +Help on class cnumber_t in module ida_hexrays: + +class cnumber_t(builtins.object) + | Proxy of C++ cnumber_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _opnum=0) -> cnumber_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cnumber_t(...) + | delete_cnumber_t(self) + | + | _print(self, *args) -> 'void' + | _print(self, type, parent=None, nice_stroff=None) + | + | assign(self, *args) -> 'void' + | assign(self, v, nbytes, sign) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | value(self, *args) -> 'uint64' + | value(self, type) -> uint64 + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _value + | cnumber_t__value_get(self) -> uint64 + | + | nf + | cnumber_t_nf_get(self) -> number_format_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class codegen_t in module ida_hexrays: + +class codegen_t(builtins.object) + | Proxy of C++ codegen_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, m) -> codegen_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_codegen_t(...) + | delete_codegen_t(self) + | + | analyze_prolog(self, *args) -> 'merror_t' + | analyze_prolog(self, fc, reachable) -> merror_t + | + | emit(self, *args) -> 'minsn_t *' + | emit(self, code, width, l, r, d, offsize) -> minsn_t + | emit(self, code, l, r, d) -> minsn_t + | + | emit_micro_mvm(self, *args) -> 'minsn_t *' + | emit_micro_mvm(self, code, dtype, l, r, d, offsize) -> minsn_t + | + | gen_micro(self, *args) -> 'merror_t' + | gen_micro(self) -> merror_t + | + | load_operand(self, *args) -> 'mreg_t' + | load_operand(self, opnum) -> mreg_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ignore_micro + | codegen_t_ignore_micro_get(self) -> char + | + | ii + | codegen_t_ii_get(self) -> cdg_insn_iterator_t + | + | insn + | codegen_t_insn_get(self) -> insn_t * + | + | mb + | codegen_t_mb_get(self) -> mblock_t + | + | mba + | codegen_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + +Help on function convert_to_user_call in module ida_hexrays: + +convert_to_user_call(*args) -> 'merror_t' + convert_to_user_call(udc, cdg) -> merror_t + + + try to generate user-defined call for an instruction + + @param udc (C++: const udcall_t &) + @param cdg (C++: codegen_t &) + @return: Microcode error codes code: MERR_OK - user-defined call + generated else - error (MERR_INSN == inacceptable udc.tif) + +Help on function create_field_name in module ida_hexrays: + +create_field_name(*args) -> 'qstring' + create_field_name(type, offset=BADADDR) -> qstring + +Help on function create_helper in module ida_hexrays: + +create_helper(*args) + +Help on function create_typedef in module ida_hexrays: + +create_typedef(*args) -> 'tinfo_t' + create_typedef(name) -> tinfo_t + create_typedef(n) -> tinfo_t + + + Create a reference to a named type. + + @param name: type name (C++: const char *) + @return: type which refers to the specified name. For example, if name + is "DWORD", the type info which refers to "DWORD" is created. + +Help on class creturn_t in module ida_hexrays: + +class creturn_t(ceinsn_t) + | Proxy of C++ creturn_t class. + | + | Method resolution order: + | creturn_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> creturn_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_creturn_t(...) + | delete_creturn_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class cswitch_t in module ida_hexrays: + +class cswitch_t(ceinsn_t) + | Proxy of C++ cswitch_t class. + | + | Method resolution order: + | cswitch_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cswitch_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cswitch_t(...) + | delete_cswitch_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cases + | cswitch_t_cases_get(self) -> ccases_t + | + | mvnf + | cswitch_t_mvnf_get(self) -> cnumber_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class ctext_position_t in module ida_hexrays: + +class ctext_position_t(builtins.object) + | Proxy of C++ ctext_position_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _lnnum=-1, _x=0, _y=0) -> ctext_position_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ctext_position_t(...) + | delete_ctext_position_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | in_ctree(self, *args) -> 'bool' + | in_ctree(self, hdrlines) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | ctext_position_t_lnnum_get(self) -> int + | + | thisown + | The membership flag + | + | x + | ctext_position_t_x_get(self) -> int + | + | y + | ctext_position_t_y_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class ctree_anchor_t in module ida_hexrays: + +class ctree_anchor_t(builtins.object) + | Proxy of C++ ctree_anchor_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ctree_anchor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ctree_anchor_t(...) + | delete_ctree_anchor_t(self) + | + | get_index(self, *args) -> 'int' + | get_index(self) -> int + | + | get_itp(self, *args) -> 'item_preciser_t' + | get_itp(self) -> item_preciser_t + | + | is_blkcmt_anchor(self, *args) -> 'bool' + | is_blkcmt_anchor(self) -> bool + | + | is_citem_anchor(self, *args) -> 'bool' + | is_citem_anchor(self) -> bool + | + | is_itp_anchor(self, *args) -> 'bool' + | is_itp_anchor(self) -> bool + | + | is_lvar_anchor(self, *args) -> 'bool' + | is_lvar_anchor(self) -> bool + | + | is_valid_anchor(self, *args) -> 'bool' + | is_valid_anchor(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | value + | ctree_anchor_t_value_get(self) -> uval_t + +Help on class ctree_item_t in module ida_hexrays: + +class ctree_item_t(builtins.object) + | Proxy of C++ ctree_item_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ctree_item_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ctree_item_t(...) + | delete_ctree_item_t(self) + | + | _get_e(self, *args) -> 'cexpr_t *' + | _get_e(self) -> cexpr_t + | + | _get_f(self, *args) -> 'cfunc_t *' + | _get_f(self) -> cfunc_t + | + | _get_i(self, *args) -> 'cinsn_t *' + | _get_i(self) -> cinsn_t + | + | _get_it(self, *args) -> 'citem_t *' + | _get_it(self) -> citem_t + | + | _get_l(self, *args) -> 'lvar_t *' + | _get_l(self) -> lvar_t + | + | get_ea(self, *args) -> 'ea_t' + | get_ea(self) -> ea_t + | + | get_label_num(self, *args) -> 'int' + | get_label_num(self, gln_flags) -> int + | + | get_lvar(self, *args) -> 'lvar_t *' + | get_lvar(self) -> lvar_t + | + | get_memptr(self, *args) -> 'member_t *' + | get_memptr(self, p_sptr=None) -> member_t * + | + | is_citem(self, *args) -> 'bool' + | is_citem(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | citype + | ctree_item_t_citype_get(self) -> cursor_item_type_t + | + | e + | + | f + | + | i + | + | it + | + | l + | + | loc + | ctree_item_t_loc_get(self) -> treeloc_t + | + | thisown + | The membership flag + +Help on class ctree_items_t in module ida_hexrays: + +class ctree_items_t(builtins.object) + | Proxy of C++ qvector< citem_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'citem_t *const &' + | __getitem__(self, i) -> citem_t + | + | __init__(self, *args) + | __init__(self) -> ctree_items_t + | __init__(self, x) -> ctree_items_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_ctree_items_t(...) + | delete_ctree_items_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'citem_t *&' + | + | at = __getitem__(self, *args) -> 'citem_t *const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< citem_t * >::const_iterator' + | begin(self) -> qvector< citem_t * >::iterator + | begin(self) -> qvector< citem_t * >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< citem_t * >::const_iterator' + | end(self) -> qvector< citem_t * >::iterator + | end(self) -> qvector< citem_t * >::const_iterator + | + | erase(self, *args) -> 'qvector< citem_t * >::iterator' + | erase(self, it) -> qvector< citem_t * >::iterator + | erase(self, first, last) -> qvector< citem_t * >::iterator + | + | extract(self, *args) -> 'citem_t **' + | extract(self) -> citem_t ** + | + | find(self, *args) -> 'qvector< citem_t * >::const_iterator' + | find(self, x) -> qvector< citem_t * >::iterator + | find(self, x) -> qvector< citem_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< citem_t * >::iterator' + | insert(self, it, x) -> qvector< citem_t * >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'citem_t *&' + | push_back(self, x) + | push_back(self) -> citem_t *& + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class ctree_parentee_t in module ida_hexrays: + +class ctree_parentee_t(ctree_visitor_t) + | Proxy of C++ ctree_parentee_t class. + | + | Method resolution order: + | ctree_parentee_t + | ctree_visitor_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, post=False) -> ctree_parentee_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ctree_parentee_t(...) + | delete_ctree_parentee_t(self) + | + | recalc_parent_types(self, *args) -> 'bool' + | recalc_parent_types(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_visitor_t: + | + | apply_to(self, *args) -> 'int' + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) -> 'int' + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) -> 'void' + | clr_prune(self) + | + | clr_restart(self, *args) -> 'void' + | clr_restart(self) + | + | is_postorder(self, *args) -> 'bool' + | is_postorder(self) -> bool + | + | leave_expr(self, *args) -> 'int' + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) -> 'int' + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) -> 'bool' + | maintain_parents(self) -> bool + | + | must_prune(self, *args) -> 'bool' + | must_prune(self) -> bool + | + | must_restart(self, *args) -> 'bool' + | must_restart(self) -> bool + | + | only_insns(self, *args) -> 'bool' + | only_insns(self) -> bool + | + | parent_expr(self, *args) -> 'cexpr_t *' + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) -> 'cinsn_t *' + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) -> 'void' + | prune_now(self) + | + | set_restart(self, *args) -> 'void' + | set_restart(self) + | + | visit_expr(self, *args) -> 'int' + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) -> 'int' + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctree_visitor_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + +Help on class ctree_visitor_t in module ida_hexrays: + +class ctree_visitor_t(builtins.object) + | Proxy of C++ ctree_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags) -> ctree_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ctree_visitor_t(...) + | delete_ctree_visitor_t(self) + | + | apply_to(self, *args) -> 'int' + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) -> 'int' + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) -> 'void' + | clr_prune(self) + | + | clr_restart(self, *args) -> 'void' + | clr_restart(self) + | + | is_postorder(self, *args) -> 'bool' + | is_postorder(self) -> bool + | + | leave_expr(self, *args) -> 'int' + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) -> 'int' + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) -> 'bool' + | maintain_parents(self) -> bool + | + | must_prune(self, *args) -> 'bool' + | must_prune(self) -> bool + | + | must_restart(self, *args) -> 'bool' + | must_restart(self) -> bool + | + | only_insns(self, *args) -> 'bool' + | only_insns(self) -> bool + | + | parent_expr(self, *args) -> 'cexpr_t *' + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) -> 'cinsn_t *' + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) -> 'void' + | prune_now(self) + | + | set_restart(self, *args) -> 'void' + | set_restart(self) + | + | visit_expr(self, *args) -> 'int' + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) -> 'int' + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + | + | thisown + | The membership flag + +Help on class cwhile_t in module ida_hexrays: + +class cwhile_t(cloop_t) + | Proxy of C++ cwhile_t class. + | + | Method resolution order: + | cwhile_t + | cloop_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cwhile_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cwhile_t(...) + | delete_cwhile_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) -> 'cloop_t &' + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function debug_hexrays_ctree in module ida_hexrays: + +debug_hexrays_ctree(*args) -> 'void' + debug_hexrays_ctree(msg) + +Help on function decompile in module ida_hexrays: + +decompile(ea, hf=None, flags=0) + # --------------------------------------------------------------------- + +Help on function decompile_func in module ida_hexrays: + +decompile_func(*args) -> 'cfuncptr_t' + decompile_func(pfn, hf, flags=0) -> cfuncptr_t + + + Decompile a function. Multiple decompilations of the same function + return the same object. + + @param pfn: pointer to function to decompile (C++: func_t *) + @param hf: extended error information (if failed) (C++: + hexrays_failure_t *) + @param flags: bitwise combination of decompile() flags ... bits (C++: + int) + @return: pointer to the decompilation result (a reference counted + pointer). NULL if failed. + +Help on function decompile_many in module ida_hexrays: + +decompile_many(*args) -> 'bool' + decompile_many(outfile, funcaddrs, flags) -> bool + + + Batch decompilation. Decompile all or the specified functions + + @param outfile: name of the output file (C++: const char *) + @param funcaddrs: list of functions to decompile. If NULL or empty, + then decompile all nonlib functions (C++: const + eavec_t *) + @param flags: Batch decompilation bits (C++: int) + @return: true if no internal error occurred and the user has not + cancelled decompilation + +Help on function dereference in module ida_hexrays: + +dereference(e, ptrsize, is_float=False) + +Help on function dstr in module ida_hexrays: + +dstr(*args) -> 'char const *' + dstr(tif) -> char const * + + + Print the specified type info. This function can be used from a + debugger by typing "tif->dstr()" + + @param tif (C++: const tinfo_t *) + +Help on function dummy_ptrtype in module ida_hexrays: + +dummy_ptrtype(*args) -> 'tinfo_t' + dummy_ptrtype(ptrsize, isfp) -> tinfo_t + + + Generate a dummy pointer type + + @param ptrsize: size of pointed object (C++: int) + @param isfp: is floating point object? (C++: bool) + +Help on function eamap_begin in module ida_hexrays: + +eamap_begin(*args) -> 'eamap_iterator_t' + eamap_begin(map) -> eamap_iterator_t + + + Get iterator pointing to the beginning of eamap_t. + + + @param map (C++: const eamap_t *) + +Help on function eamap_clear in module ida_hexrays: + +eamap_clear(*args) -> 'void' + eamap_clear(map) + + + Clear eamap_t. + + + @param map (C++: eamap_t *) + +Help on function eamap_end in module ida_hexrays: + +eamap_end(*args) -> 'eamap_iterator_t' + eamap_end(map) -> eamap_iterator_t + + + Get iterator pointing to the end of eamap_t. + + + @param map (C++: const eamap_t *) + +Help on function eamap_erase in module ida_hexrays: + +eamap_erase(*args) -> 'void' + eamap_erase(map, p) + + + Erase current element from eamap_t. + + + @param map (C++: eamap_t *) + @param p (C++: eamap_iterator_t) + +Help on function eamap_find in module ida_hexrays: + +eamap_find(*args) -> 'eamap_iterator_t' + eamap_find(map, key) -> eamap_iterator_t + + + Find the specified key in eamap_t. + + + @param map (C++: const eamap_t *) + @param key (C++: const ea_t &) + +Help on function eamap_first in module ida_hexrays: + +eamap_first(*args) -> 'ea_t const &' + eamap_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_free in module ida_hexrays: + +eamap_free(*args) -> 'void' + eamap_free(map) + + + Delete eamap_t instance. + + + @param map (C++: eamap_t *) + +Help on function eamap_insert in module ida_hexrays: + +eamap_insert(*args) -> 'eamap_iterator_t' + eamap_insert(map, key, val) -> eamap_iterator_t + + + Insert new (ea_t, cinsnptrvec_t) pair into eamap_t. + + + @param map (C++: eamap_t *) + @param key (C++: const ea_t &) + @param val (C++: const cinsnptrvec_t &) + +Help on class eamap_iterator_t in module ida_hexrays: + +class eamap_iterator_t(builtins.object) + | Proxy of C++ eamap_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> eamap_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_eamap_iterator_t(...) + | delete_eamap_iterator_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 + | + | x + | eamap_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function eamap_new in module ida_hexrays: + +eamap_new(*args) -> 'eamap_t *' + eamap_new() -> eamap_t + + + Create a new eamap_t instance. + +Help on function eamap_next in module ida_hexrays: + +eamap_next(*args) -> 'eamap_iterator_t' + eamap_next(p) -> eamap_iterator_t + + + Move to the next element. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_prev in module ida_hexrays: + +eamap_prev(*args) -> 'eamap_iterator_t' + eamap_prev(p) -> eamap_iterator_t + + + Move to the previous element. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_second in module ida_hexrays: + +eamap_second(*args) -> 'cinsnptrvec_t &' + eamap_second(p) -> cinsnptrvec_t + + + Get reference to the current map value. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_size in module ida_hexrays: + +eamap_size(*args) -> 'size_t' + eamap_size(map) -> size_t + + + Get size of eamap_t. + + + @param map (C++: eamap_t *) + +Help on class eamap_t in module ida_hexrays: + +class eamap_t(builtins.object) + | Proxy of C++ std::map< ea_t,cinsnptrvec_t > class. + | + | Methods defined here: + | + | __begin = eamap_begin(...) + | eamap_begin(map) -> eamap_iterator_t + | + | __clear = eamap_clear(...) + | eamap_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = eamap_end(...) + | eamap_end(map) -> eamap_iterator_t + | + | __erase = eamap_erase(...) + | eamap_erase(map, p) + | + | __find = eamap_find(...) + | eamap_find(map, key) -> eamap_iterator_t + | + | __first = eamap_first(...) + | eamap_first(p) -> ea_t const & + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> eamap_t + | + | __insert = eamap_insert(...) + | eamap_insert(map, key, val) -> eamap_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = eamap_next(...) + | eamap_next(p) -> eamap_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = eamap_second(...) + | eamap_second(p) -> cinsnptrvec_t + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = eamap_size(...) + | eamap_size(map) -> size_t + | + | __swig_destroy__ = delete_eamap_t(...) + | delete_eamap_t(self) + | + | at(self, *args) -> 'cinsnptrvec_t &' + | at(self, _Keyval) -> cinsnptrvec_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = + | int(x=0) -> integer + | int(x, base=10) -> integer + | + | Convert a number or string to an integer, or return 0 if no arguments + | are given. If x is a number, return x.__int__(). For floating point + | numbers, this truncates towards zero. + | + | If x is not a number or if base is given, then x must be a string, + | bytes, or bytearray instance representing an integer literal in the + | given base. The literal can be preceded by '+' or '-' and be surrounded + | by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. + | Base 0 means to interpret the base from the string as an integer literal. + | >>> int('0b100', base=0) + | 4 + | + | valuetype = + | Proxy of C++ qvector< cinsn_t * > class. + +Help on class fnum_array in module ida_hexrays: + +class fnum_array(builtins.object) + | Proxy of C++ wrapped_array_t< uint16,6 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'unsigned short const &' + | __getitem__(self, i) -> unsigned short const & + | + | __init__(self, *args) + | __init__(self, data) -> fnum_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_fnum_array(...) + | delete_fnum_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | fnum_array_data_get(self) -> unsigned short (&)[6] + | + | thisown + | The membership flag + +Help on class fnumber_t in module ida_hexrays: + +class fnumber_t(builtins.object) + | Proxy of C++ fnumber_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> fnumber_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_fnumber_t(...) + | delete_fnumber_t(self) + | + | _fnumber_t__get_fnum = __get_fnum(self, *args) -> 'wrapped_array_t< uint16,6 >' + | __get_fnum(self) -> fnum_array + | + | _print(self, *args) -> 'void' + | _print(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | dereference_const_uint16(self, *args) -> 'uint16 const *' + | dereference_const_uint16(self) -> uint16 const * + | + | dereference_uint16(self, *args) -> 'uint16 *' + | dereference_uint16(self) -> uint16 * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fnum + | __get_fnum(self) -> fnum_array + | + | nbytes + | fnumber_t_nbytes_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class gco_info_t in module ida_hexrays: + +class gco_info_t(builtins.object) + | Proxy of C++ gco_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> gco_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_gco_info_t(...) + | delete_gco_info_t(self) + | + | append_to_list(self, *args) -> 'bool' + | append_to_list(self, list, mba) -> bool + | + | is_def(self, *args) -> 'bool' + | is_def(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_use(self, *args) -> 'bool' + | is_use(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | gco_info_t_flags_get(self) -> int + | + | name + | gco_info_t_name_get(self) -> qstring * + | + | size + | gco_info_t_size_get(self) -> int + | + | thisown + | The membership flag + +Help on function gen_microcode in module ida_hexrays: + +gen_microcode(*args) -> 'mbl_array_t *' + gen_microcode(mbr, hf, retlist=None, flags=0, reqmat=MMAT_GLBOPT3) -> mbl_array_t + + + Generate microcode of an arbitrary code snippet + + @param mbr: snippet ranges (C++: const mba_ranges_t &) + @param hf: extended error information (if failed) (C++: + hexrays_failure_t *) + @param retlist: list of registers the snippet returns (C++: const + mlist_t *) + @param flags: bitwise combination of decompile() flags ... bits (C++: + int) + @param reqmat: required microcode maturity (C++: mba_maturity_t) + @return: pointer to the microcode, NULL if failed. + +Help on function get_ctype_name in module ida_hexrays: + +get_ctype_name(*args) -> 'char const *' + get_ctype_name(op) -> char const * + +Help on function get_current_operand in module ida_hexrays: + +get_current_operand(*args) -> 'bool' + get_current_operand(out) -> bool + + + Get the instruction operand under the cursor. This function determines + the operand that is under the cursor in the active disassembly + listing. If the operand refers to a register or stack variable, it + return true. + + @param out (C++: gco_info_t *) + +Help on function get_float_type in module ida_hexrays: + +get_float_type(*args) -> 'tinfo_t' + get_float_type(width) -> tinfo_t + + + Get a type of a floating point value with the specified width + + @param width: width of the desired type (C++: int) + @return: type info object + +Help on function get_hexrays_version in module ida_hexrays: + +get_hexrays_version(*args) -> 'char const *' + get_hexrays_version() -> char const * + + + Get decompiler version. The returned string is of the form + ... + + @return: pointer to version string. For example: "2.0.0.140605" + +Help on function get_int_type_by_width_and_sign in module ida_hexrays: + +get_int_type_by_width_and_sign(*args) -> 'tinfo_t' + get_int_type_by_width_and_sign(srcwidth, sign) -> tinfo_t + + + Create a type info by width and sign. Returns a simple type (examples: + int, short) with the given width and sign. + + @param srcwidth: size of the type in bytes (C++: int) + @param sign: sign of the type (C++: type_sign_t) + +Help on function get_member_type in module ida_hexrays: + +get_member_type(*args) -> 'bool' + get_member_type(mptr, type) -> bool + + + Get type of a structure field. This function performs validity checks + of the field type. Wrong types are rejected. + + @param mptr: structure field (C++: const member_t *) + @param type: pointer to the variable where the type is returned. This + parameter can be NULL. (C++: tinfo_t *) + @return: false if failed + +Help on function get_merror_desc in module ida_hexrays: + +get_merror_desc(*args) -> 'qstring *' + get_merror_desc(code, mba) -> str + + + Get textual description of an error code + + @param code: Microcode error codes (C++: merror_t) + @param mba: the microcode array (C++: mbl_array_t *) + @return: the error address + +Help on function get_mreg_name in module ida_hexrays: + +get_mreg_name(*args) -> 'qstring *' + get_mreg_name(reg, width, ud=None) -> str + + + Get the microregister name + + @param reg (C++: mreg_t) + @param width: size of microregister in bytes. may be bigger than the + real register size. (C++: int) + @param ud: reserved, must be nullptr (C++: void *) + @return: width of the printed register. this value may be less than + the WIDTH argument. + +Help on function get_op_signness in module ida_hexrays: + +get_op_signness(*args) -> 'type_sign_t' + get_op_signness(op) -> type_sign_t + + + Get operator sign. Meaningful for sign-dependent operators, like + cot_sdiv. + + + @param op (C++: ctype_t) + +Help on function get_signed_mcode in module ida_hexrays: + +get_signed_mcode(*args) -> 'mcode_t' + get_signed_mcode(code) -> mcode_t + +Help on function get_temp_regs in module ida_hexrays: + +get_temp_regs(*args) -> 'mlist_t const &' + get_temp_regs() -> mlist_t + + + Get list of temporary registers. Tempregs are temporary registers that + are used during code generation. They do not map to regular processor + registers. They are used only to store temporary values during + execution of one instruction. Tempregs may not be used to pass a value + from one block to another. In other words, at the end of a block all + tempregs must be dead. + +Help on function get_type in module ida_hexrays: + +get_type(*args) -> 'bool' + get_type(id, tif, guess) -> bool + + + Get a global type. Global types are types of addressable objects and + struct/union/enum types + + @param id: address or id of the object (C++: uval_t) + @param tif: buffer for the answer (C++: tinfo_t *) + @param guess: what kind of types to consider (C++: type_source_t) + @return: success + +Help on function get_unk_type in module ida_hexrays: + +get_unk_type(*args) -> 'tinfo_t' + get_unk_type(size) -> tinfo_t + + + Create a partial type info by width. Returns a partially defined type + (examples: _DWORD, _BYTE) with the given width. + + @param size: size of the type in bytes (C++: int) + +Help on function get_unsigned_mcode in module ida_hexrays: + +get_unsigned_mcode(*args) -> 'mcode_t' + get_unsigned_mcode(code) -> mcode_t + +Help on function get_widget_vdui in module ida_hexrays: + +get_widget_vdui(*args) -> 'vdui_t *' + get_widget_vdui(f) -> vdui_t + + + Get the 'vdui_t' instance associated to the TWidget + + @param f: pointer to window (C++: TWidget *) + @return: a vdui_t *, or NULL + +Help on function getb_reginsn in module ida_hexrays: + +getb_reginsn(*args) -> 'minsn_t *' + getb_reginsn(ins) -> minsn_t + + + Skip assertions backward. + + + @param ins (C++: const minsn_t *) + +Help on function getf_reginsn in module ida_hexrays: + +getf_reginsn(*args) -> 'minsn_t *' + getf_reginsn(ins) -> minsn_t + + + Skip assertions forward. + + + @param ins (C++: const minsn_t *) + +Help on class graph_chains_t in module ida_hexrays: + +class graph_chains_t(block_chains_vec_t) + | Proxy of C++ graph_chains_t class. + | + | Method resolution order: + | graph_chains_t + | block_chains_vec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> graph_chains_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_chains_t(...) + | delete_graph_chains_t(self) + | + | acquire(self, *args) -> 'void' + | acquire(self) + | + | for_all_chains(self, *args) -> 'int' + | for_all_chains(self, cv, gca_flags) -> int + | + | is_locked(self, *args) -> 'bool' + | is_locked(self) -> bool + | + | release(self, *args) -> 'void' + | release(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from block_chains_vec_t: + | + | __getitem__(self, *args) -> 'block_chains_t const &' + | __getitem__(self, i) -> block_chains_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | at(self, *args) -> 'block_chains_t const &' + | at(self, _idx) -> block_chains_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< block_chains_t >::const_iterator' + | begin(self) -> block_chains_t + | begin(self) -> block_chains_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< block_chains_t >::const_iterator' + | end(self) -> block_chains_t + | end(self) -> block_chains_t + | + | erase(self, *args) -> 'qvector< block_chains_t >::iterator' + | erase(self, it) -> block_chains_t + | erase(self, first, last) -> block_chains_t + | + | extract(self, *args) -> 'block_chains_t *' + | extract(self) -> block_chains_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=block_chains_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< block_chains_t >::iterator' + | insert(self, it, x) -> block_chains_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'block_chains_t &' + | push_back(self, x) + | push_back(self) -> block_chains_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from block_chains_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function has_cached_cfunc in module ida_hexrays: + +has_cached_cfunc(*args) -> 'bool' + has_cached_cfunc(ea) -> bool + + + Do we have a cached decompilation result for 'ea'? + + + @param ea (C++: ea_t) + +Help on function hexrays_alloc in module ida_hexrays: + +hexrays_alloc(*args) -> 'void *' + hexrays_alloc(size) -> void * + +Help on class hexrays_failure_t in module ida_hexrays: + +class hexrays_failure_t(builtins.object) + | Proxy of C++ hexrays_failure_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> hexrays_failure_t + | __init__(self, c, ea, buf=None) -> hexrays_failure_t + | __init__(self, c, ea, buf) -> hexrays_failure_t + | + | __repr__ = _swig_repr(self) + | + | __str__ lambda self + | + | __swig_destroy__ = delete_hexrays_failure_t(...) + | delete_hexrays_failure_t(self) + | + | desc(self, *args) -> 'qstring' + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | hexrays_failure_t_code_get(self) -> merror_t + | + | errea + | hexrays_failure_t_errea_get(self) -> ea_t + | + | str + | hexrays_failure_t_str_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on function hexrays_free in module ida_hexrays: + +hexrays_free(*args) -> 'void' + hexrays_free(ptr) + +Help on class hexwarn_t in module ida_hexrays: + +class hexwarn_t(builtins.object) + | Proxy of C++ hexwarn_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> hexwarn_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_hexwarn_t(...) + | delete_hexwarn_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | hexwarn_t_ea_get(self) -> ea_t + | + | id + | hexwarn_t_id_get(self) -> warnid_t + | + | text + | hexwarn_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class hexwarns_t in module ida_hexrays: + +class hexwarns_t(builtins.object) + | Proxy of C++ qvector< hexwarn_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'hexwarn_t const &' + | __getitem__(self, i) -> hexwarn_t + | + | __init__(self, *args) + | __init__(self) -> hexwarns_t + | __init__(self, x) -> hexwarns_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_hexwarns_t(...) + | delete_hexwarns_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'hexwarn_t &' + | + | at = __getitem__(self, *args) -> 'hexwarn_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< hexwarn_t >::const_iterator' + | begin(self) -> hexwarn_t + | begin(self) -> hexwarn_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< hexwarn_t >::const_iterator' + | end(self) -> hexwarn_t + | end(self) -> hexwarn_t + | + | erase(self, *args) -> 'qvector< hexwarn_t >::iterator' + | erase(self, it) -> hexwarn_t + | erase(self, first, last) -> hexwarn_t + | + | extract(self, *args) -> 'hexwarn_t *' + | extract(self) -> hexwarn_t + | + | find(self, *args) -> 'qvector< hexwarn_t >::const_iterator' + | find(self, x) -> hexwarn_t + | find(self, x) -> hexwarn_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=hexwarn_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< hexwarn_t >::iterator' + | insert(self, it, x) -> hexwarn_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'hexwarn_t &' + | push_back(self, x) + | push_back(self) -> hexwarn_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class history_item_t in module ida_hexrays: + +class history_item_t(ctext_position_t) + | Proxy of C++ history_item_t class. + | + | Method resolution order: + | history_item_t + | ctext_position_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea=BADADDR, _lnnum=-1, _x=0, _y=0) -> history_item_t + | __init__(self, _ea, p) -> history_item_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_history_item_t(...) + | delete_history_item_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ea + | history_item_t_ea_get(self) -> ea_t + | + | end + | history_item_t_end_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ctext_position_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | in_ctree(self, *args) -> 'bool' + | in_ctree(self, hdrlines) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctext_position_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | ctext_position_t_lnnum_get(self) -> int + | + | x + | ctext_position_t_x_get(self) -> int + | + | y + | ctext_position_t_y_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ctext_position_t: + | + | __hash__ = None + +Help on class history_t in module ida_hexrays: + +class history_t(qvector_history_t) + | Proxy of C++ qstack< history_item_t > class. + | + | Method resolution order: + | history_t + | qvector_history_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> history_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_history_t(...) + | delete_history_t(self) + | + | append = push_back(self, *args) -> 'history_item_t &' + | push_back(self, x) + | push_back(self) -> history_item_t + | + | at = __getitem__(self, *args) -> 'history_item_t const &' + | __getitem__(self, i) -> history_item_t + | + | pop(self, *args) -> 'history_item_t' + | pop(self) -> history_item_t + | + | push(self, *args) -> 'void' + | push(self, v) + | + | top(self, *args) -> 'history_item_t &' + | top(self) -> history_item_t + | top(self) -> history_item_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_history_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'history_item_t const &' + | __getitem__(self, i) -> history_item_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< history_item_t >::const_iterator' + | begin(self) -> history_item_t + | begin(self) -> history_item_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< history_item_t >::const_iterator' + | end(self) -> history_item_t + | end(self) -> history_item_t + | + | erase(self, *args) -> 'qvector< history_item_t >::iterator' + | erase(self, it) -> history_item_t + | erase(self, first, last) -> history_item_t + | + | extract(self, *args) -> 'history_item_t *' + | extract(self) -> history_item_t + | + | find(self, *args) -> 'qvector< history_item_t >::const_iterator' + | find(self, x) -> history_item_t + | find(self, x) -> history_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=history_item_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< history_item_t >::iterator' + | insert(self, it, x) -> history_item_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'history_item_t &' + | push_back(self, x) + | push_back(self) -> history_item_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_history_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from qvector_history_t: + | + | __hash__ = None + +Help on function init_hexrays_plugin in module ida_hexrays: + +init_hexrays_plugin(*args) -> 'bool' + init_hexrays_plugin(flags=0) -> bool + + + Initialize your plugin for hex-rays decompiler. This function must be + called before calling any other decompiler function. It initializes + the pointer to the dispatcher. + + @param flags: reserved, must be 0 (C++: int) + @return: true if the decompiler exists and the dispatcher pointer is + ready to use. + +Help on function install_hexrays_callback in module ida_hexrays: + +install_hexrays_callback(callback) + Deprecated. Please use Hexrays_Hooks instead + +Help on function install_microcode_filter in module ida_hexrays: + +install_microcode_filter(*args) -> 'void' + install_microcode_filter(filter, install=True) + + + register/unregister non-standard microcode generator + + @param filter: - microcode generator object (C++: microcode_filter_t + *) + @param install: - TRUE - register the object, FALSE - unregister (C++: + bool) + +Help on function is_additive in module ida_hexrays: + +is_additive(*args) -> 'bool' + is_additive(op) -> bool + + + Is additive operator? + + + @param op (C++: ctype_t) + +Help on function is_assignment in module ida_hexrays: + +is_assignment(*args) -> 'bool' + is_assignment(op) -> bool + + + Is assignment operator? + + + @param op (C++: ctype_t) + +Help on function is_binary in module ida_hexrays: + +is_binary(*args) -> 'bool' + is_binary(op) -> bool + + + Is binary operator? + + + @param op (C++: ctype_t) + +Help on function is_bitop in module ida_hexrays: + +is_bitop(*args) -> 'bool' + is_bitop(op) -> bool + + + Is bit related operator? + + + @param op (C++: ctype_t) + +Help on function is_bool_type in module ida_hexrays: + +is_bool_type(*args) -> 'bool' + is_bool_type(type) -> bool + + + Is a boolean type? + + @param type (C++: const tinfo_t &) + @return: true if the type is a boolean type + +Help on function is_break_consumer in module ida_hexrays: + +is_break_consumer(*args) -> 'bool' + is_break_consumer(op) -> bool + + + Does a break statement influence the specified statement code? + + + @param op (C++: ctype_t) + +Help on function is_commutative in module ida_hexrays: + +is_commutative(*args) -> 'bool' + is_commutative(op) -> bool + + + Is commutative operator? + + + @param op (C++: ctype_t) + +Help on function is_inplace_def in module ida_hexrays: + +is_inplace_def(*args) -> 'bool' + is_inplace_def(type) -> bool + + + Is struct/union/enum definition (not declaration)? + + + @param type (C++: const tinfo_t &) + +Help on function is_kreg in module ida_hexrays: + +is_kreg(*args) -> 'bool' + is_kreg(r) -> bool + + + Is a kernel register? + + + @param r (C++: mreg_t) + +Help on function is_logical in module ida_hexrays: + +is_logical(*args) -> 'bool' + is_logical(op) -> bool + + + Is logical operator? + + + @param op (C++: ctype_t) + +Help on function is_loop in module ida_hexrays: + +is_loop(*args) -> 'bool' + is_loop(op) -> bool + + + Is loop statement code? + + + @param op (C++: ctype_t) + +Help on function is_lvalue in module ida_hexrays: + +is_lvalue(*args) -> 'bool' + is_lvalue(op) -> bool + + + Is Lvalue operator? + + + @param op (C++: ctype_t) + +Help on function is_may_access in module ida_hexrays: + +is_may_access(*args) -> 'bool' + is_may_access(maymust) -> bool + +Help on function is_mcode_addsub in module ida_hexrays: + +is_mcode_addsub(*args) -> 'bool' + is_mcode_addsub(mcode) -> bool + +Help on function is_mcode_call in module ida_hexrays: + +is_mcode_call(*args) -> 'bool' + is_mcode_call(mcode) -> bool + +Help on function is_mcode_commutative in module ida_hexrays: + +is_mcode_commutative(*args) -> 'bool' + is_mcode_commutative(mcode) -> bool + +Help on function is_mcode_convertible_to_jmp in module ida_hexrays: + +is_mcode_convertible_to_jmp(*args) -> 'bool' + is_mcode_convertible_to_jmp(mcode) -> bool + +Help on function is_mcode_convertible_to_set in module ida_hexrays: + +is_mcode_convertible_to_set(*args) -> 'bool' + is_mcode_convertible_to_set(mcode) -> bool + +Help on function is_mcode_divmod in module ida_hexrays: + +is_mcode_divmod(*args) -> 'bool' + is_mcode_divmod(op) -> bool + +Help on function is_mcode_fpu in module ida_hexrays: + +is_mcode_fpu(*args) -> 'bool' + is_mcode_fpu(mcode) -> bool + +Help on function is_mcode_j1 in module ida_hexrays: + +is_mcode_j1(*args) -> 'bool' + is_mcode_j1(mcode) -> bool + +Help on function is_mcode_jcond in module ida_hexrays: + +is_mcode_jcond(*args) -> 'bool' + is_mcode_jcond(mcode) -> bool + +Help on function is_mcode_propagatable in module ida_hexrays: + +is_mcode_propagatable(*args) -> 'bool' + is_mcode_propagatable(mcode) -> bool + + + May opcode be propagated? Such opcodes can be used in sub-instructions + (nested instructions) There is a handful of non-propagatable opcodes, + like jumps, ret, nop, etc All other regular opcodes are propagatable + and may appear in a nested instruction. + + @param mcode (C++: mcode_t) + +Help on function is_mcode_set in module ida_hexrays: + +is_mcode_set(*args) -> 'bool' + is_mcode_set(mcode) -> bool + +Help on function is_mcode_set1 in module ida_hexrays: + +is_mcode_set1(*args) -> 'bool' + is_mcode_set1(mcode) -> bool + +Help on function is_mcode_shift in module ida_hexrays: + +is_mcode_shift(*args) -> 'bool' + is_mcode_shift(mcode) -> bool + +Help on function is_mcode_xdsu in module ida_hexrays: + +is_mcode_xdsu(*args) -> 'bool' + is_mcode_xdsu(mcode) -> bool + +Help on function is_multiplicative in module ida_hexrays: + +is_multiplicative(*args) -> 'bool' + is_multiplicative(op) -> bool + + + Is multiplicative operator? + + + @param op (C++: ctype_t) + +Help on function is_nonbool_type in module ida_hexrays: + +is_nonbool_type(*args) -> 'bool' + is_nonbool_type(type) -> bool + + + Is definitely a non-boolean type? + + @param type (C++: const tinfo_t &) + @return: true if the type is a non-boolean type (non bool and well + defined) + +Help on function is_paf in module ida_hexrays: + +is_paf(*args) -> 'bool' + is_paf(t) -> bool + + + Is a pointer, array, or function type? + + + @param t (C++: type_t) + +Help on function is_prepost in module ida_hexrays: + +is_prepost(*args) -> 'bool' + is_prepost(op) -> bool + + + Is pre/post increment/decrement operator? + + + @param op (C++: ctype_t) + +Help on function is_ptr_or_array in module ida_hexrays: + +is_ptr_or_array(*args) -> 'bool' + is_ptr_or_array(t) -> bool + + + Is a pointer or array type? + + + @param t (C++: type_t) + +Help on function is_relational in module ida_hexrays: + +is_relational(*args) -> 'bool' + is_relational(op) -> bool + + + Is comparison operator? + + + @param op (C++: ctype_t) + +Help on function is_signed_mcode in module ida_hexrays: + +is_signed_mcode(*args) -> 'bool' + is_signed_mcode(code) -> bool + +Help on function is_small_udt in module ida_hexrays: + +is_small_udt(*args) -> 'bool' + is_small_udt(tif) -> bool + + + Is a small structure or union? + + @param tif (C++: const tinfo_t &) + @return: true if the type is a small UDT (user defined type). Small + UDTs fit into a register (or pair or registers) as a rule. + +Help on function is_type_correct in module ida_hexrays: + +is_type_correct(*args) -> 'bool' + is_type_correct(ptr) -> bool + + + Verify a type string. + + @param ptr (C++: const type_t *) + @return: true if type string is correct + +Help on function is_unary in module ida_hexrays: + +is_unary(*args) -> 'bool' + is_unary(op) -> bool + + + Is unary operator? + + + @param op (C++: ctype_t) + +Help on function is_unsigned_mcode in module ida_hexrays: + +is_unsigned_mcode(*args) -> 'bool' + is_unsigned_mcode(code) -> bool + +Help on class ivl_t in module ida_hexrays: + +class ivl_t(uval_ivl_t) + | Proxy of C++ ivl_t class. + | + | Method resolution order: + | ivl_t + | uval_ivl_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _off, _size) -> ivl_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ivl_t(...) + | delete_ivl_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, off2) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend_to_cover(self, *args) -> 'bool' + | extend_to_cover(self, r) -> bool + | + | includes(self, *args) -> 'bool' + | includes(self, ivl) -> bool + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlap(self, *args) -> 'bool' + | overlap(self, ivl) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from uval_ivl_t: + | + | end(self, *args) -> 'unsigned-ea-like-numeric-type'↗ + | end(self) -> unsigned-ea-like-numeric-type↗ + | + | last(self, *args) -> 'unsigned-ea-like-numeric-type'↗ + | last(self) -> unsigned-ea-like-numeric-type↗ + | + | valid(self, *args) -> 'bool' + | valid(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from uval_ivl_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type↗ + | + | size + | uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type↗ + +Help on class ivl_with_name_t in module ida_hexrays: + +class ivl_with_name_t(builtins.object) + | Proxy of C++ ivl_with_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ivl_with_name_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ivl_with_name_t(...) + | delete_ivl_with_name_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ivl + | ivl_with_name_t_ivl_get(self) -> ivl_t + | + | part + | ivl_with_name_t_part_get(self) -> char const * + | + | thisown + | The membership flag + | + | whole + | ivl_with_name_t_whole_get(self) -> char const * + +Help on class ivlset_t in module ida_hexrays: + +class ivlset_t(uval_ivl_ivlset_t) + | Proxy of C++ ivlset_t class. + | + | Method resolution order: + | ivlset_t + | uval_ivl_ivlset_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ivlset_t + | __init__(self, ivl) -> ivlset_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ivlset_t(...) + | delete_ivlset_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | add(self, *args) -> 'bool' + | add(self, ivl) -> bool + | add(self, ea, size) -> bool + | add(self, ivs) -> bool + | + | addmasked(self, *args) -> 'bool' + | addmasked(self, ivs, mask) -> bool + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, off) -> bool + | + | count(self, *args) -> 'asize_t' + | count(self) -> asize_t + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | has_common(self, *args) -> 'bool' + | has_common(self, ivl, strict=False) -> bool + | has_common(self, ivs) -> bool + | + | includes(self, *args) -> 'bool' + | includes(self, ivs) -> bool + | + | intersect(self, *args) -> 'bool' + | intersect(self, ivs) -> bool + | + | sub(self, *args) -> 'bool' + | sub(self, ivl) -> bool + | sub(self, ea, size) -> bool + | sub(self, ivs) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from uval_ivl_ivlset_t: + | + | all_values(self, *args) -> 'bool' + | all_values(self) -> bool + | + | begin(self, *args) -> 'ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator'↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator'↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | getivl(self, *args) -> 'ivl_t const &' + | getivl(self, idx) -> ivl_t + | + | lastivl(self, *args) -> 'ivl_t const &' + | lastivl(self) -> ivl_t + | + | nivls(self, *args) -> 'size_t' + | nivls(self) -> size_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | set_all_values(self, *args) -> 'void' + | set_all_values(self) + | + | single_value(self, *args) -> 'bool' + | single_value(self, v) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from uval_ivl_ivlset_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function jcnd2set in module ida_hexrays: + +jcnd2set(*args) -> 'mcode_t' + jcnd2set(code) -> mcode_t + +Help on function lexcompare in module ida_hexrays: + +lexcompare(*args) -> 'int' + lexcompare(a, b) -> int + +Help on function lnot in module ida_hexrays: + +lnot(e) + +Help on class lvar_locator_t in module ida_hexrays: + +class lvar_locator_t(builtins.object) + | Proxy of C++ lvar_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_locator_t + | __init__(self, loc, ea) -> lvar_locator_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_locator_t(...) + | delete_lvar_locator_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | get_reg1(self, *args) -> 'mreg_t' + | get_reg1(self) -> mreg_t + | + | get_reg2(self, *args) -> 'mreg_t' + | get_reg2(self) -> mreg_t + | + | get_scattered(self, *args) -> 'scattered_aloc_t &' + | get_scattered(self) -> scattered_aloc_t + | get_scattered(self) -> scattered_aloc_t + | + | get_stkoff(self, *args) -> 'sval_t' + | get_stkoff(self) -> sval_t + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_reg_var(self, *args) -> 'bool' + | is_reg_var(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stk_var(self, *args) -> 'bool' + | is_stk_var(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | defea + | lvar_locator_t_defea_get(self) -> ea_t + | + | location + | lvar_locator_t_location_get(self) -> vdloc_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function lvar_mapping_begin in module ida_hexrays: + +lvar_mapping_begin(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_begin(map) -> lvar_mapping_iterator_t + + + Get iterator pointing to the beginning of lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + +Help on function lvar_mapping_clear in module ida_hexrays: + +lvar_mapping_clear(*args) -> 'void' + lvar_mapping_clear(map) + + + Clear lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + +Help on function lvar_mapping_end in module ida_hexrays: + +lvar_mapping_end(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_end(map) -> lvar_mapping_iterator_t + + + Get iterator pointing to the end of lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + +Help on function lvar_mapping_erase in module ida_hexrays: + +lvar_mapping_erase(*args) -> 'void' + lvar_mapping_erase(map, p) + + + Erase current element from lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_find in module ida_hexrays: + +lvar_mapping_find(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_find(map, key) -> lvar_mapping_iterator_t + + + Find the specified key in lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + @param key (C++: const lvar_locator_t &) + +Help on function lvar_mapping_first in module ida_hexrays: + +lvar_mapping_first(*args) -> 'lvar_locator_t const &' + lvar_mapping_first(p) -> lvar_locator_t + + + Get reference to the current map key. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_free in module ida_hexrays: + +lvar_mapping_free(*args) -> 'void' + lvar_mapping_free(map) + + + Delete lvar_mapping_t instance. + + + @param map (C++: lvar_mapping_t *) + +Help on function lvar_mapping_insert in module ida_hexrays: + +lvar_mapping_insert(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_insert(map, key, val) -> lvar_mapping_iterator_t + + + Insert new ( 'lvar_locator_t' , 'lvar_locator_t' ) pair into + lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + @param key (C++: const lvar_locator_t &) + @param val (C++: const lvar_locator_t &) + +Help on class lvar_mapping_iterator_t in module ida_hexrays: + +class lvar_mapping_iterator_t(builtins.object) + | Proxy of C++ lvar_mapping_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_mapping_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_mapping_iterator_t(...) + | delete_lvar_mapping_iterator_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 + | + | x + | lvar_mapping_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function lvar_mapping_new in module ida_hexrays: + +lvar_mapping_new(*args) -> 'lvar_mapping_t *' + lvar_mapping_new() -> lvar_mapping_t + + + Create a new lvar_mapping_t instance. + +Help on function lvar_mapping_next in module ida_hexrays: + +lvar_mapping_next(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_next(p) -> lvar_mapping_iterator_t + + + Move to the next element. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_prev in module ida_hexrays: + +lvar_mapping_prev(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_prev(p) -> lvar_mapping_iterator_t + + + Move to the previous element. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_second in module ida_hexrays: + +lvar_mapping_second(*args) -> 'lvar_locator_t &' + lvar_mapping_second(p) -> lvar_locator_t + + + Get reference to the current map value. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_size in module ida_hexrays: + +lvar_mapping_size(*args) -> 'size_t' + lvar_mapping_size(map) -> size_t + + + Get size of lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + +Help on class lvar_mapping_t in module ida_hexrays: + +class lvar_mapping_t(builtins.object) + | Proxy of C++ std::map< lvar_locator_t,lvar_locator_t > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvar_mapping_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_mapping_t(...) + | delete_lvar_mapping_t(self) + | + | at(self, *args) -> 'lvar_locator_t &' + | at(self, _Keyval) -> lvar_locator_t + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + +Help on class lvar_ref_t in module ida_hexrays: + +class lvar_ref_t(builtins.object) + | Proxy of C++ lvar_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, m, i, o=0) -> lvar_ref_t + | __init__(self, r) -> lvar_ref_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_ref_t(...) + | delete_lvar_ref_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | var(self, *args) -> 'lvar_t &' + | var(self) -> lvar_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | idx + | lvar_ref_t_idx_get(self) -> int + | + | mba + | lvar_ref_t_mba_get(self) -> mbl_array_t + | + | off + | lvar_ref_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class lvar_saved_info_t in module ida_hexrays: + +class lvar_saved_info_t(builtins.object) + | Proxy of C++ lvar_saved_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_saved_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_saved_info_t(...) + | delete_lvar_saved_info_t(self) + | + | clear_keep(self, *args) -> 'void' + | clear_keep(self) + | + | clr_forced_lvar(self, *args) -> 'void' + | clr_forced_lvar(self) + | + | clr_nomap_lvar(self, *args) -> 'void' + | clr_nomap_lvar(self) + | + | clr_noptr_lvar(self, *args) -> 'void' + | clr_noptr_lvar(self) + | + | has_info(self, *args) -> 'bool' + | has_info(self) -> bool + | + | is_forced_lvar(self, *args) -> 'bool' + | is_forced_lvar(self) -> bool + | + | is_kept(self, *args) -> 'bool' + | is_kept(self) -> bool + | + | is_nomap_lvar(self, *args) -> 'bool' + | is_nomap_lvar(self) -> bool + | + | is_noptr_lvar(self, *args) -> 'bool' + | is_noptr_lvar(self) -> bool + | + | set_forced_lvar(self, *args) -> 'void' + | set_forced_lvar(self) + | + | set_keep(self, *args) -> 'void' + | set_keep(self) + | + | set_nomap_lvar(self, *args) -> 'void' + | set_nomap_lvar(self) + | + | set_noptr_lvar(self, *args) -> 'void' + | set_noptr_lvar(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | lvar_saved_info_t_cmt_get(self) -> qstring * + | + | flags + | lvar_saved_info_t_flags_get(self) -> int + | + | ll + | lvar_saved_info_t_ll_get(self) -> lvar_locator_t + | + | name + | lvar_saved_info_t_name_get(self) -> qstring * + | + | size + | lvar_saved_info_t_size_get(self) -> ssize_t + | + | thisown + | The membership flag + | + | type + | lvar_saved_info_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class lvar_saved_infos_t in module ida_hexrays: + +class lvar_saved_infos_t(builtins.object) + | Proxy of C++ qvector< lvar_saved_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'lvar_saved_info_t const &' + | __getitem__(self, i) -> lvar_saved_info_t + | + | __init__(self, *args) + | __init__(self) -> lvar_saved_infos_t + | __init__(self, x) -> lvar_saved_infos_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_lvar_saved_infos_t(...) + | delete_lvar_saved_infos_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'lvar_saved_info_t &' + | + | at = __getitem__(self, *args) -> 'lvar_saved_info_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< lvar_saved_info_t >::const_iterator' + | begin(self) -> lvar_saved_info_t + | begin(self) -> lvar_saved_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< lvar_saved_info_t >::const_iterator' + | end(self) -> lvar_saved_info_t + | end(self) -> lvar_saved_info_t + | + | erase(self, *args) -> 'qvector< lvar_saved_info_t >::iterator' + | erase(self, it) -> lvar_saved_info_t + | erase(self, first, last) -> lvar_saved_info_t + | + | extract(self, *args) -> 'lvar_saved_info_t *' + | extract(self) -> lvar_saved_info_t + | + | find(self, *args) -> 'qvector< lvar_saved_info_t >::const_iterator' + | find(self, x) -> lvar_saved_info_t + | find(self, x) -> lvar_saved_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=lvar_saved_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< lvar_saved_info_t >::iterator' + | insert(self, it, x) -> lvar_saved_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'lvar_saved_info_t &' + | push_back(self, x) + | push_back(self) -> lvar_saved_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class lvar_t in module ida_hexrays: + +class lvar_t(lvar_locator_t) + | Proxy of C++ lvar_t class. + | + | Method resolution order: + | lvar_t + | lvar_locator_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | __init__(self) -> lvar_locator_t + | __init__(self, loc, ea) -> lvar_locator_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_t(...) + | delete_lvar_t(self) + | + | accepts_type(self, *args) -> 'bool' + | accepts_type(self, t, may_change_thisarg=False) -> bool + | + | append_list(self, *args) -> 'void' + | append_list(self, lst, pad_if_scattered=False) + | + | clear_used(self, *args) -> 'void' + | clear_used(self) + | + | clr_arg_var(self, *args) -> 'void' + | clr_arg_var(self) + | + | clr_automapped(self, *args) -> 'void' + | clr_automapped(self) + | + | clr_dummy_arg(self, *args) -> 'void' + | clr_dummy_arg(self) + | + | clr_fake_var(self, *args) -> 'void' + | clr_fake_var(self) + | + | clr_floating_var(self, *args) -> 'void' + | clr_floating_var(self) + | + | clr_forced_var(self, *args) -> 'void' + | clr_forced_var(self) + | + | clr_mapdst_var(self, *args) -> 'void' + | clr_mapdst_var(self) + | + | clr_mreg_done(self, *args) -> 'void' + | clr_mreg_done(self) + | + | clr_noptr_var(self, *args) -> 'void' + | clr_noptr_var(self) + | + | clr_notarg(self, *args) -> 'void' + | clr_notarg(self) + | + | clr_overlapped_var(self, *args) -> 'void' + | clr_overlapped_var(self) + | + | clr_spoiled_var(self, *args) -> 'void' + | clr_spoiled_var(self) + | + | clr_thisarg(self, *args) -> 'void' + | clr_thisarg(self) + | + | clr_unknown_width(self, *args) -> 'void' + | clr_unknown_width(self) + | + | clr_user_info(self, *args) -> 'void' + | clr_user_info(self) + | + | clr_user_name(self, *args) -> 'void' + | clr_user_name(self) + | + | clr_user_type(self, *args) -> 'void' + | clr_user_type(self) + | + | has_common(self, *args) -> 'bool' + | has_common(self, v) -> bool + | + | has_common_bit(self, *args) -> 'bool' + | has_common_bit(self, loc, width2) -> bool + | + | has_regname(self, *args) -> 'bool' + | has_regname(self) -> bool + | + | is_aliasable(self, *args) -> 'bool' + | is_aliasable(self, mba) -> bool + | + | is_automapped(self, *args) -> 'bool' + | is_automapped(self) -> bool + | + | is_dummy_arg(self, *args) -> 'bool' + | is_dummy_arg(self) -> bool + | + | is_forced_var(self, *args) -> 'bool' + | is_forced_var(self) -> bool + | + | is_noptr_var(self, *args) -> 'bool' + | is_noptr_var(self) -> bool + | + | is_notarg(self, *args) -> 'bool' + | is_notarg(self) -> bool + | + | is_thisarg(self, *args) -> 'bool' + | is_thisarg(self) -> bool + | + | set_arg_var(self, *args) -> 'void' + | set_arg_var(self) + | + | set_automapped(self, *args) -> 'void' + | set_automapped(self) + | + | set_dummy_arg(self, *args) -> 'void' + | set_dummy_arg(self) + | + | set_fake_var(self, *args) -> 'void' + | set_fake_var(self) + | + | set_final_lvar_type(self, *args) -> 'void' + | set_final_lvar_type(self, t) + | + | set_floating_var(self, *args) -> 'void' + | set_floating_var(self) + | + | set_forced_var(self, *args) -> 'void' + | set_forced_var(self) + | + | set_lvar_type(self, *args) -> 'bool' + | set_lvar_type(self, t, may_fail=False) -> bool + | + | set_mapdst_var(self, *args) -> 'void' + | set_mapdst_var(self) + | + | set_mreg_done(self, *args) -> 'void' + | set_mreg_done(self) + | + | set_non_typed(self, *args) -> 'void' + | set_non_typed(self) + | + | set_noptr_var(self, *args) -> 'void' + | set_noptr_var(self) + | + | set_notarg(self, *args) -> 'void' + | set_notarg(self) + | + | set_overlapped_var(self, *args) -> 'void' + | set_overlapped_var(self) + | + | set_spoiled_var(self, *args) -> 'void' + | set_spoiled_var(self) + | + | set_thisarg(self, *args) -> 'void' + | set_thisarg(self) + | + | set_typed(self, *args) -> 'void' + | set_typed(self) + | + | set_unknown_width(self, *args) -> 'void' + | set_unknown_width(self) + | + | set_used(self, *args) -> 'void' + | set_used(self) + | + | set_user_name(self, *args) -> 'void' + | set_user_name(self) + | + | set_user_type(self, *args) -> 'void' + | set_user_type(self) + | + | set_width(self, *args) -> 'bool' + | set_width(self, w, svw_flags=0) -> bool + | + | type(self, *args) -> 'tinfo_t &' + | type(self) -> tinfo_t + | type(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cmt + | lvar_t_cmt_get(self) -> qstring * + | + | defblk + | lvar_t_defblk_get(self) -> int + | + | divisor + | lvar_t_divisor_get(self) -> uint64 + | + | has_nice_name + | has_nice_name(self) -> bool + | + | has_user_info + | has_user_info(self) -> bool + | + | has_user_name + | has_user_name(self) -> bool + | + | has_user_type + | has_user_type(self) -> bool + | + | is_arg_var + | is_arg_var(self) -> bool + | + | is_fake_var + | is_fake_var(self) -> bool + | + | is_floating_var + | is_floating_var(self) -> bool + | + | is_mapdst_var + | is_mapdst_var(self) -> bool + | + | is_overlapped_var + | is_overlapped_var(self) -> bool + | + | is_result_var + | is_result_var(self) -> bool + | + | is_spoiled_var + | is_spoiled_var(self) -> bool + | + | is_unknown_width + | is_unknown_width(self) -> bool + | + | mreg_done + | mreg_done(self) -> bool + | + | name + | lvar_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tif + | lvar_t_tif_get(self) -> tinfo_t + | + | typed + | typed(self) -> bool + | + | used + | used(self) -> bool + | + | width + | lvar_t_width_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from lvar_locator_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | get_reg1(self, *args) -> 'mreg_t' + | get_reg1(self) -> mreg_t + | + | get_reg2(self, *args) -> 'mreg_t' + | get_reg2(self) -> mreg_t + | + | get_scattered(self, *args) -> 'scattered_aloc_t &' + | get_scattered(self) -> scattered_aloc_t + | get_scattered(self) -> scattered_aloc_t + | + | get_stkoff(self, *args) -> 'sval_t' + | get_stkoff(self) -> sval_t + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_reg_var(self, *args) -> 'bool' + | is_reg_var(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stk_var(self, *args) -> 'bool' + | is_stk_var(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from lvar_locator_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | defea + | lvar_locator_t_defea_get(self) -> ea_t + | + | location + | lvar_locator_t_location_get(self) -> vdloc_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from lvar_locator_t: + | + | __hash__ = None + +Help on class lvar_uservec_t in module ida_hexrays: + +class lvar_uservec_t(builtins.object) + | Proxy of C++ lvar_uservec_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvar_uservec_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_uservec_t(...) + | delete_lvar_uservec_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | find_info(self, *args) -> 'lvar_saved_info_t *' + | find_info(self, vloc) -> lvar_saved_info_t + | + | keep_info(self, *args) -> 'void' + | keep_info(self, v) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lmaps + | lvar_uservec_t_lmaps_get(self) -> lvar_mapping_t + | + | lvvec + | lvar_uservec_t_lvvec_get(self) -> lvar_saved_infos_t + | + | stkoff_delta + | lvar_uservec_t_stkoff_delta_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ulv_flags + | lvar_uservec_t_ulv_flags_get(self) -> int + +Help on class lvars_t in module ida_hexrays: + +class lvars_t(qvector_lvar_t) + | Proxy of C++ lvars_t class. + | + | Method resolution order: + | lvars_t + | qvector_lvar_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvars_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvars_t(...) + | delete_lvars_t(self) + | + | find(self, *args) -> 'lvar_t *' + | find(self, ll) -> lvar_t + | + | find_input_lvar(self, *args) -> 'int' + | find_input_lvar(self, argloc, _size) -> int + | + | find_lvar(self, *args) -> 'int' + | find_lvar(self, location, width, defblk=-1) -> int + | + | find_stkvar(self, *args) -> 'int' + | find_stkvar(self, spoff, width) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_lvar_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'lvar_t const &' + | __getitem__(self, i) -> lvar_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'lvar_t &' + | push_back(self, x) + | push_back(self) -> lvar_t + | + | at = __getitem__(self, *args) -> 'lvar_t const &' + | __getitem__(self, i) -> lvar_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< lvar_t >::const_iterator' + | begin(self) -> lvar_t + | begin(self) -> lvar_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< lvar_t >::const_iterator' + | end(self) -> lvar_t + | end(self) -> lvar_t + | + | erase(self, *args) -> 'qvector< lvar_t >::iterator' + | erase(self, it) -> lvar_t + | erase(self, first, last) -> lvar_t + | + | extract(self, *args) -> 'lvar_t *' + | extract(self) -> lvar_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=lvar_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< lvar_t >::iterator' + | insert(self, it, x) -> lvar_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'lvar_t &' + | push_back(self, x) + | push_back(self) -> lvar_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_lvar_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from qvector_lvar_t: + | + | __hash__ = None + +Help on function make_num in module ida_hexrays: + +make_num(*args) + +Help on function make_pointer in module ida_hexrays: + +make_pointer(*args) -> 'tinfo_t' + make_pointer(type) -> tinfo_t + + + Create a pointer type. This function performs the following + conversion: "type" -> "type*" + + @param type: object type. (C++: const tinfo_t &) + @return: "type*". for example, if 'char' is passed as the argument, + +Help on function make_ref in module ida_hexrays: + +make_ref(e) + +Help on function mark_cfunc_dirty in module ida_hexrays: + +mark_cfunc_dirty(*args) -> 'bool' + mark_cfunc_dirty(ea, close_views=False) -> bool + + + Flush the cached decompilation results. Erases a cache entry for the + specified function. + + @param ea: function to erase from the cache (C++: ea_t) + @param close_views: close pseudocode windows that show the function + (C++: bool) + @return: if a cache entry existed. + +Help on class mba_range_iterator_t in module ida_hexrays: + +class mba_range_iterator_t(builtins.object) + | Proxy of C++ mba_range_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mba_range_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mba_range_iterator_t(...) + | delete_mba_range_iterator_t(self) + | + | chunk(self, *args) -> 'range_t const &' + | chunk(self) -> range_t + | + | is_snippet(self, *args) -> 'bool' + | is_snippet(self) -> bool + | + | next(self, *args) -> 'bool' + | next(self) -> bool + | + | set(self, *args) -> 'bool' + | set(self, mbr) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fii + | mba_range_iterator_t_fii_get(self) -> func_tail_iterator_t + | + | rii + | mba_range_iterator_t_rii_get(self) -> range_chunk_iterator_t * + | + | thisown + | The membership flag + +Help on class mba_ranges_t in module ida_hexrays: + +class mba_ranges_t(builtins.object) + | Proxy of C++ mba_ranges_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _pfn=None) -> mba_ranges_t + | __init__(self, r) -> mba_ranges_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mba_ranges_t(...) + | delete_mba_ranges_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | is_fragmented(self, *args) -> 'bool' + | is_fragmented(self) -> bool + | + | is_snippet(self, *args) -> 'bool' + | is_snippet(self) -> bool + | + | start(self, *args) -> 'ea_t' + | start(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | pfn + | mba_ranges_t_pfn_get(self) -> func_t * + | + | ranges + | mba_ranges_t_ranges_get(self) -> rangevec_t + | + | thisown + | The membership flag + +Help on class mbl_array_t in module ida_hexrays: + +class mbl_array_t(builtins.object) + | Proxy of C++ mbl_array_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mbl_array_t(...) + | delete_mbl_array_t(self) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _print(self, *args) -> 'void' + | _print(self, vp) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | alloc_lvars(self, *args) -> 'void' + | alloc_lvars(self) + | + | analyze_calls(self, *args) -> 'int' + | analyze_calls(self, acflags) -> int + | + | arg(self, *args) -> 'lvar_t const &' + | arg(self, n) -> lvar_t + | arg(self, n) -> lvar_t + | + | argbase(self, *args) -> 'sval_t' + | argbase(self) -> sval_t + | + | argidx_ok(self, *args) -> 'bool' + | argidx_ok(self) -> bool + | + | bad_call_sp_detected(self, *args) -> 'bool' + | bad_call_sp_detected(self) -> bool + | + | build_graph(self, *args) -> 'merror_t' + | build_graph(self) -> merror_t + | + | calc_shins_flags(self, *args) -> 'int' + | calc_shins_flags(self) -> int + | + | callinfo_built(self, *args) -> 'bool' + | callinfo_built(self) -> bool + | + | chain_varnums_ok(self, *args) -> 'bool' + | chain_varnums_ok(self) -> bool + | + | clr_cdtr(self, *args) -> 'void' + | clr_cdtr(self) + | + | clr_mba_flags(self, *args) -> 'void' + | clr_mba_flags(self, f) + | + | clr_mba_flags2(self, *args) -> 'void' + | clr_mba_flags2(self, f) + | + | combine_blocks(self, *args) -> 'bool' + | combine_blocks(self) -> bool + | + | common_stkvars_stkargs(self, *args) -> 'bool' + | common_stkvars_stkargs(self) -> bool + | + | copy_block(self, *args) -> 'mblock_t *' + | copy_block(self, blk, new_serial, cpblk_flags=3) -> mblock_t + | + | deleted_pairs(self, *args) -> 'bool' + | deleted_pairs(self) -> bool + | + | display_numaddrs(self, *args) -> 'bool' + | display_numaddrs(self) -> bool + | + | display_valnums(self, *args) -> 'bool' + | display_valnums(self) -> bool + | + | dump(self, *args) -> 'void' + | dump(self) + | + | dump_mba(self, *args) -> 'void' + | dump_mba(self, _verify, title) + | + | find_mop(self, *args) -> 'mop_t *' + | find_mop(self, ctx, ea, is_dest, list) -> mop_t + | + | for_all_insns(self, *args) -> 'int' + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv) -> int + | + | for_all_topinsns(self, *args) -> 'int' + | for_all_topinsns(self, mv) -> int + | + | generated_asserts(self, *args) -> 'bool' + | generated_asserts(self) -> bool + | + | get_args_region(self, *args) -> 'ivl_t const &' + | get_args_region(self) -> ivl_t + | + | get_curfunc(self, *args) -> 'func_t *' + | get_curfunc(self) -> func_t * + | + | get_graph(self, *args) -> 'mbl_graph_t *' + | get_graph(self) -> mbl_graph_t + | + | get_ida_argloc(self, *args) -> 'argloc_t' + | get_ida_argloc(self, v) -> argloc_t + | + | get_lvars_region(self, *args) -> 'ivl_t const &' + | get_lvars_region(self) -> ivl_t + | + | get_mba_flags(self, *args) -> 'int' + | get_mba_flags(self) -> int + | + | get_mba_flags2(self, *args) -> 'int' + | get_mba_flags2(self) -> int + | + | get_mblock(self, *args) -> 'mblock_t *' + | get_mblock(self, n) -> mblock_t + | get_mblock(self, n) -> mblock_t + | + | get_shadow_region(self, *args) -> 'ivl_t const &' + | get_shadow_region(self) -> ivl_t + | + | get_stack_region(self, *args) -> 'ivl_t' + | get_stack_region(self) -> ivl_t + | + | get_std_region(self, *args) -> 'ivl_t const &' + | get_std_region(self, idx) -> ivl_t + | + | graph_insns(self, *args) -> 'bool' + | graph_insns(self) -> bool + | + | has_bad_sp(self, *args) -> 'bool' + | has_bad_sp(self) -> bool + | + | has_over_chains(self, *args) -> 'bool' + | has_over_chains(self) -> bool + | + | has_passregs(self, *args) -> 'bool' + | has_passregs(self) -> bool + | + | idaloc2vd(self, *args) -> 'vdloc_t' + | idaloc2vd(self, loc, width) -> vdloc_t + | + | insert_block(self, *args) -> 'mblock_t *' + | insert_block(self, bblk) -> mblock_t + | + | is_cdtr(self, *args) -> 'bool' + | is_cdtr(self) -> bool + | + | is_ctr(self, *args) -> 'bool' + | is_ctr(self) -> bool + | + | is_dtr(self, *args) -> 'bool' + | is_dtr(self) -> bool + | + | is_pattern(self, *args) -> 'bool' + | is_pattern(self) -> bool + | + | is_snippet(self, *args) -> 'bool' + | is_snippet(self) -> bool + | + | is_stkarg(self, *args) -> 'bool' + | is_stkarg(self, v) -> bool + | + | is_thunk(self, *args) -> 'bool' + | is_thunk(self) -> bool + | + | loaded_gdl(self, *args) -> 'bool' + | loaded_gdl(self) -> bool + | + | lvar_names_ok(self, *args) -> 'bool' + | lvar_names_ok(self) -> bool + | + | lvars_allocated(self, *args) -> 'bool' + | lvars_allocated(self) -> bool + | + | lvars_renamed(self, *args) -> 'bool' + | lvars_renamed(self) -> bool + | + | mark_chains_dirty(self, *args) -> 'void' + | mark_chains_dirty(self) + | + | may_refine_rettype(self, *args) -> 'bool' + | may_refine_rettype(self) -> bool + | + | optimize_global(self, *args) -> 'merror_t' + | optimize_global(self) -> merror_t + | + | optimize_local(self, *args) -> 'int' + | optimize_local(self, locopt_bits) -> int + | + | optimized(self, *args) -> 'bool' + | optimized(self) -> bool + | + | precise_defeas(self, *args) -> 'bool' + | precise_defeas(self) -> bool + | + | propagated_asserts(self, *args) -> 'bool' + | propagated_asserts(self) -> bool + | + | really_alloc(self, *args) -> 'bool' + | really_alloc(self) -> bool + | + | regargs_is_not_aligned(self, *args) -> 'bool' + | regargs_is_not_aligned(self) -> bool + | + | remove_block(self, *args) -> 'bool' + | remove_block(self, blk) -> bool + | + | remove_empty_blocks(self, *args) -> 'bool' + | remove_empty_blocks(self) -> bool + | + | returns_fpval(self, *args) -> 'bool' + | returns_fpval(self) -> bool + | + | rtype_refined(self, *args) -> 'bool' + | rtype_refined(self) -> bool + | + | saverest_done(self, *args) -> 'bool' + | saverest_done(self) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | set_mba_flags(self, *args) -> 'void' + | set_mba_flags(self, f) + | + | set_mba_flags2(self, *args) -> 'void' + | set_mba_flags2(self, f) + | + | short_display(self, *args) -> 'bool' + | short_display(self) -> bool + | + | should_beautify(self, *args) -> 'bool' + | should_beautify(self) -> bool + | + | show_reduction(self, *args) -> 'bool' + | show_reduction(self) -> bool + | + | stkoff_ida2vd(self, *args) -> 'sval_t' + | stkoff_ida2vd(self, off) -> sval_t + | + | stkoff_vd2ida(self, *args) -> 'sval_t' + | stkoff_vd2ida(self, off) -> sval_t + | + | term(self, *args) -> 'void' + | term(self) + | + | use_frame(self, *args) -> 'bool' + | use_frame(self) -> bool + | + | use_wingraph32(self, *args) -> 'bool' + | use_wingraph32(self) -> bool + | + | valranges_done(self, *args) -> 'bool' + | valranges_done(self) -> bool + | + | vd2idaloc(self, *args) -> 'argloc_t' + | vd2idaloc(self, loc, width, spd) -> argloc_t + | vd2idaloc(self, loc, width) -> argloc_t + | + | verify(self, *args) -> 'void' + | verify(self, always) + | + | write_to_const_detected(self, *args) -> 'bool' + | write_to_const_detected(self) -> bool + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | deserialize(*args) -> 'mbl_array_t *' + | deserialize(bytes) -> mbl_array_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | aliased_args + | mbl_array_t_aliased_args_get(self) -> ivl_t + | + | aliased_memory + | mbl_array_t_aliased_memory_get(self) -> ivlset_t + | + | aliased_vars + | mbl_array_t_aliased_vars_get(self) -> ivl_t + | + | argidx + | mbl_array_t_argidx_get(self) -> intvec_t + | + | blocks + | mbl_array_t_blocks_get(self) -> mblock_t + | + | cc + | mbl_array_t_cc_get(self) -> cm_t + | + | consumed_argregs + | mbl_array_t_consumed_argregs_get(self) -> rlist_t + | + | entry_ea + | mbl_array_t_entry_ea_get(self) -> ea_t + | + | error_ea + | mbl_array_t_error_ea_get(self) -> ea_t + | + | error_strarg + | mbl_array_t_error_strarg_get(self) -> qstring * + | + | final_type + | mbl_array_t_final_type_get(self) -> bool + | + | first_epilog_ea + | mbl_array_t_first_epilog_ea_get(self) -> ea_t + | + | fpd + | mbl_array_t_fpd_get(self) -> sval_t + | + | frregs + | mbl_array_t_frregs_get(self) -> sval_t + | + | frsize + | mbl_array_t_frsize_get(self) -> sval_t + | + | fti_flags + | mbl_array_t_fti_flags_get(self) -> int + | + | fullsize + | mbl_array_t_fullsize_get(self) -> sval_t + | + | gotoff_stkvars + | mbl_array_t_gotoff_stkvars_get(self) -> ivlset_t + | + | idb_node + | mbl_array_t_idb_node_get(self) -> netnode + | + | idb_spoiled + | mbl_array_t_idb_spoiled_get(self) -> reginfovec_t + | + | idb_type + | mbl_array_t_idb_type_get(self) -> tinfo_t + | + | inargoff + | mbl_array_t_inargoff_get(self) -> sval_t + | + | label + | mbl_array_t_label_get(self) -> qstring * + | + | last_prolog_ea + | mbl_array_t_last_prolog_ea_get(self) -> ea_t + | + | maturity + | mbl_array_t_maturity_get(self) -> mba_maturity_t + | + | mbr + | mbl_array_t_mbr_get(self) -> mba_ranges_t + | + | minargref + | mbl_array_t_minargref_get(self) -> sval_t + | + | minstkref + | mbl_array_t_minstkref_get(self) -> sval_t + | + | minstkref_ea + | mbl_array_t_minstkref_ea_get(self) -> ea_t + | + | natural + | mbl_array_t_natural_get(self) -> mblock_t ** + | + | nodel_memory + | mbl_array_t_nodel_memory_get(self) -> mlist_t + | + | notes + | mbl_array_t_notes_get(self) -> hexwarns_t + | + | npurged + | mbl_array_t_npurged_get(self) -> int + | + | occurred_warns + | mbl_array_t_occurred_warns_get(self) -> uchar [32] + | + | pfn_flags + | mbl_array_t_pfn_flags_get(self) -> int + | + | qty + | mbl_array_t_qty_get(self) -> int + | + | reqmat + | mbl_array_t_reqmat_get(self) -> mba_maturity_t + | + | restricted_memory + | mbl_array_t_restricted_memory_get(self) -> ivlset_t + | + | retsize + | mbl_array_t_retsize_get(self) -> int + | + | retvaridx + | mbl_array_t_retvaridx_get(self) -> int + | + | shadow_args + | mbl_array_t_shadow_args_get(self) -> int + | + | spd_adjust + | mbl_array_t_spd_adjust_get(self) -> sval_t + | + | spoiled_list + | mbl_array_t_spoiled_list_get(self) -> mlist_t + | + | stacksize + | mbl_array_t_stacksize_get(self) -> sval_t + | + | std_ivls + | mbl_array_t_std_ivls_get(self) -> ivl_with_name_t + | + | thisown + | The membership flag + | + | tmpstk_size + | mbl_array_t_tmpstk_size_get(self) -> sval_t + | + | vars + | mbl_array_t_vars_get(self) -> lvars_t + +Help on function mbl_array_t_deserialize in module ida_hexrays: + +mbl_array_t_deserialize(*args) -> 'mbl_array_t *' + mbl_array_t_deserialize(bytes) -> mbl_array_t + +Help on class mbl_graph_t in module ida_hexrays: + +class mbl_graph_t(simple_graph_t) + | Proxy of C++ mbl_graph_t class. + | + | Method resolution order: + | mbl_graph_t + | simple_graph_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | get_chain_stamp(self, *args) -> 'int' + | get_chain_stamp(self) -> int + | + | get_du(self, *args) -> 'graph_chains_t *' + | get_du(self, gctype) -> graph_chains_t + | + | get_mblock(self, *args) -> 'mblock_t *' + | get_mblock(self, n) -> mblock_t + | + | get_ud(self, *args) -> 'graph_chains_t *' + | get_ud(self, gctype) -> graph_chains_t + | + | is_du_chain_dirty(self, *args) -> 'bool' + | is_du_chain_dirty(self, gctype) -> bool + | + | is_redefined_globally(self, *args) -> 'bool' + | is_redefined_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool + | + | is_ud_chain_dirty(self, *args) -> 'bool' + | is_ud_chain_dirty(self, gctype) -> bool + | + | is_used_globally(self, *args) -> 'bool' + | is_used_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from simple_graph_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | colored_gdl_edges + | simple_graph_t_colored_gdl_edges_get(self) -> bool + | + | title + | simple_graph_t_title_get(self) -> qstring * + +Help on class mblock_t in module ida_hexrays: + +class mblock_t(builtins.object) + | Proxy of C++ mblock_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mblock_t(...) + | delete_mblock_t(self) + | + | _print(self, *args) -> 'void' + | _print(self, vp) + | + | append_def_list(self, *args) -> 'void' + | append_def_list(self, list, op, maymust) + | + | append_use_list(self, *args) -> 'void' + | append_use_list(self, list, op, maymust, mask=bitrange_t(0, USHRT_MAX)) + | + | build_def_list(self, *args) -> 'mlist_t' + | build_def_list(self, ins, maymust) -> mlist_t + | + | build_lists(self, *args) -> 'int' + | build_lists(self, kill_deads) -> int + | + | build_use_list(self, *args) -> 'mlist_t' + | build_use_list(self, ins, maymust) -> mlist_t + | + | dump(self, *args) -> 'void' + | dump(self) + | + | dump_block(self, *args) -> 'void' + | dump_block(self, title) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | find_access(self, *args) -> 'minsn_t *' + | find_access(self, op, parent, mend, fdflags) -> minsn_t + | + | find_def(self, *args) -> 'minsn_t *' + | find_def(self, op, p_i1, i2, fdflags) -> minsn_t + | + | find_first_use(self, *args) -> 'minsn_t *' + | find_first_use(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t + | + | find_redefinition(self, *args) -> 'minsn_t *' + | find_redefinition(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t + | + | find_use(self, *args) -> 'minsn_t *' + | find_use(self, op, p_i1, i2, fdflags) -> minsn_t + | + | for_all_insns(self, *args) -> 'int' + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv) -> int + | + | for_all_uses(self, *args) -> 'int' + | for_all_uses(self, list, i1, i2, mmv) -> int + | + | get_reginsn_qty(self, *args) -> 'size_t' + | get_reginsn_qty(self) -> size_t + | + | get_valranges(self, *args) -> 'bool' + | get_valranges(self, res, vivl, vrflags) -> bool + | get_valranges(self, res, vivl, m, vrflags) -> bool + | + | insert_into_block(self, *args) -> 'minsn_t *' + | insert_into_block(self, nm, om) -> minsn_t + | + | is_branch(self, *args) -> 'bool' + | is_branch(self) -> bool + | + | is_call_block(self, *args) -> 'bool' + | is_call_block(self) -> bool + | + | is_nway(self, *args) -> 'bool' + | is_nway(self) -> bool + | + | is_redefined(self, *args) -> 'bool' + | is_redefined(self, list, i1, i2, maymust=MAY_ACCESS) -> bool + | + | is_rhs_redefined(self, *args) -> 'bool' + | is_rhs_redefined(self, ins, i1, i2) -> bool + | + | is_simple_goto_block(self, *args) -> 'bool' + | is_simple_goto_block(self) -> bool + | + | is_simple_jcnd_block(self, *args) -> 'bool' + | is_simple_jcnd_block(self) -> bool + | + | is_unknown_call(self, *args) -> 'bool' + | is_unknown_call(self) -> bool + | + | is_used(self, *args) -> 'bool' + | is_used(self, list, i1, i2, maymust=MAY_ACCESS) -> bool + | + | lists_dirty(self, *args) -> 'bool' + | lists_dirty(self) -> bool + | + | lists_ready(self, *args) -> 'bool' + | lists_ready(self) -> bool + | + | make_lists_ready(self, *args) -> 'int' + | make_lists_ready(self) -> int + | + | make_nop(self, *args) -> 'void' + | make_nop(self, m) + | + | mark_lists_dirty(self, *args) -> 'void' + | mark_lists_dirty(self) + | + | needs_propagation(self, *args) -> 'bool' + | needs_propagation(self) -> bool + | + | npred(self, *args) -> 'int' + | npred(self) -> int + | + | nsucc(self, *args) -> 'int' + | nsucc(self) -> int + | + | optimize_block(self, *args) -> 'int' + | optimize_block(self) -> int + | + | optimize_insn(self, *args) -> 'int' + | optimize_insn(self, m, optflags=0x0002|0x0004) -> int + | + | optimize_useless_jump(self, *args) -> 'int' + | optimize_useless_jump(self) -> int + | + | pred(self, *args) -> 'int' + | pred(self, n) -> int + | + | preds(self) + | Iterates the list of predecessor blocks + | + | remove_from_block(self, *args) -> 'minsn_t *' + | remove_from_block(self, m) -> minsn_t + | + | request_demote64(self, *args) -> 'void' + | request_demote64(self) + | + | request_propagation(self, *args) -> 'void' + | request_propagation(self) + | + | succ(self, *args) -> 'int' + | succ(self, n) -> int + | + | succs(self) + | Iterates the list of successor blocks + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dead_at_start + | mblock_t_dead_at_start_get(self) -> mlist_t + | + | dnu + | mblock_t_dnu_get(self) -> mlist_t + | + | end + | mblock_t_end_get(self) -> ea_t + | + | flags + | mblock_t_flags_get(self) -> uint32 + | + | head + | mblock_t_head_get(self) -> minsn_t + | + | maxbsp + | mblock_t_maxbsp_get(self) -> sval_t + | + | maybdef + | mblock_t_maybdef_get(self) -> mlist_t + | + | maybuse + | mblock_t_maybuse_get(self) -> mlist_t + | + | mba + | mblock_t_mba_get(self) -> mbl_array_t + | + | minbargref + | mblock_t_minbargref_get(self) -> sval_t + | + | minbstkref + | mblock_t_minbstkref_get(self) -> sval_t + | + | mustbdef + | mblock_t_mustbdef_get(self) -> mlist_t + | + | mustbuse + | mblock_t_mustbuse_get(self) -> mlist_t + | + | nextb + | mblock_t_nextb_get(self) -> mblock_t + | + | predset + | mblock_t_predset_get(self) -> intvec_t + | + | prevb + | mblock_t_prevb_get(self) -> mblock_t + | + | serial + | mblock_t_serial_get(self) -> int + | + | start + | mblock_t_start_get(self) -> ea_t + | + | succset + | mblock_t_succset_get(self) -> intvec_t + | + | tail + | mblock_t_tail_get(self) -> minsn_t + | + | thisown + | The membership flag + | + | type + | mblock_t_type_get(self) -> mblock_type_t + +Help on class mcallarg_t in module ida_hexrays: + +class mcallarg_t(mop_t) + | Proxy of C++ mcallarg_t class. + | + | Method resolution order: + | mcallarg_t + | mop_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mcallarg_t + | __init__(self, rarg) -> mcallarg_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mcallarg_t(...) + | delete_mcallarg_t(self) + | + | _print(self, *args) -> 'void' + | _print(self, shins_flags=0x04|0x02) + | + | copy_mop(self, *args) -> 'void' + | copy_mop(self, op) + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | make_int(self, *args) -> 'void' + | make_int(self, val, val_ea, opno=0) + | + | make_uint(self, *args) -> 'void' + | make_uint(self, val, val_ea, opno=0) + | + | set_regarg(self, *args) -> 'void' + | set_regarg(self, mr, sz, tif) + | set_regarg(self, mr, tif) + | set_regarg(self, mr, dt, sign=type_unsigned) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | argloc + | mcallarg_t_argloc_get(self) -> argloc_t + | + | ea + | mcallarg_t_ea_get(self) -> ea_t + | + | name + | mcallarg_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | mcallarg_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Methods inherited from mop_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, rop) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, rop) -> bool + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) -> 'mop_addr_t *' + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) -> 'int' + | _get_b(self) -> int + | + | _get_c(self, *args) -> 'mcases_t *' + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) -> 'char const *' + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) -> 'minsn_t *' + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) -> 'mcallinfo_t *' + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) -> 'fnumber_t *' + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) -> 'ea_t' + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) -> 'char const *' + | _get_helper(self) -> char const * + | + | _get_l(self, *args) -> 'lvar_ref_t *' + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) -> 'mnumber_t *' + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) -> 'mop_pair_t *' + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) -> 'mreg_t' + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) -> 'stkvar_ref_t *' + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) -> 'scif_t *' + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) -> 'mopt_t' + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) -> 'void' + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) -> 'void' + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) -> 'void' + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) -> 'void' + | _make_gvar(self, ea) + | + | _make_insn(self, *args) -> 'void' + | _make_insn(self, ins) + | + | _make_lvar(self, *args) -> 'void' + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) -> 'void' + | _make_pair(self, _pair) + | + | _make_reg(self, *args) -> 'void' + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) -> 'void' + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) -> 'void' + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _set_a(self, *args) -> 'void' + | _set_a(self, _v) + | + | _set_b(self, *args) -> 'void' + | _set_b(self, _v) + | + | _set_c(self, *args) -> 'void' + | _set_c(self, _v) + | + | _set_cstr(self, *args) -> 'void' + | _set_cstr(self, _v) + | + | _set_d(self, *args) -> 'void' + | _set_d(self, _v) + | + | _set_f(self, *args) -> 'void' + | _set_f(self, _v) + | + | _set_fpc(self, *args) -> 'void' + | _set_fpc(self, _v) + | + | _set_g(self, *args) -> 'void' + | _set_g(self, _v) + | + | _set_helper(self, *args) -> 'void' + | _set_helper(self, _v) + | + | _set_l(self, *args) -> 'void' + | _set_l(self, _v) + | + | _set_nnn(self, *args) -> 'void' + | _set_nnn(self, _v) + | + | _set_pair(self, *args) -> 'void' + | _set_pair(self, _v) + | + | _set_r(self, *args) -> 'void' + | _set_r(self, _v) + | + | _set_s(self, *args) -> 'void' + | _set_s(self, _v) + | + | _set_scif(self, *args) -> 'void' + | _set_scif(self, _v) + | + | _set_t(self, *args) -> 'void' + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) -> 'void' + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) -> 'void' + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) -> 'void' + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) -> 'mop_t &' + | assign(self, rop) -> mop_t + | + | change_size(self, *args) -> 'bool' + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) -> 'void' + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) -> 'bool' + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) -> 'bool' + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) -> 'void' + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) -> 'void' + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) -> 'bool' + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | equal_mops(self, *args) -> 'bool' + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) -> 'void' + | erase(self) + | + | erase_but_keep_size(self, *args) -> 'void' + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) -> 'int' + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) -> 'minsn_t *' + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) -> 'bool' + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) -> 'bool' + | is01(self) -> bool + | + | is_arglist(self, *args) -> 'bool' + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) -> 'bool' + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) -> 'bool' + | is_cc(self) -> bool + | + | is_ccflags(self, *args) -> 'bool' + | is_ccflags(self) -> bool + | + | is_constant(self, *args) -> 'bool' + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) -> 'bool' + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) -> 'bool' + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) -> 'bool' + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) -> 'bool' + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) -> 'bool' + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) -> 'bool' + | is_kreg(self) -> bool + | + | is_mob(self, *args) -> 'bool' + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) -> 'bool' + | is_negative_constant(self) -> bool + | + | is_one(self, *args) -> 'bool' + | is_one(self) -> bool + | + | is_positive_constant(self, *args) -> 'bool' + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) -> 'bool' + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) -> 'bool' + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) -> 'bool' + | is_udt(self) -> bool + | + | is_undef_val(self, *args) -> 'bool' + | is_undef_val(self) -> bool + | + | is_zero(self, *args) -> 'bool' + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) -> 'bool' + | is_zero_extended_from(self, nbytes) -> bool + | + | lexcompare(self, *args) -> 'int' + | lexcompare(self, rop) -> int + | + | make_blkref(self, *args) -> 'void' + | make_blkref(self, blknum) + | + | make_first_half(self, *args) -> 'bool' + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) -> 'bool' + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) -> 'void' + | make_gvar(self, ea) + | + | make_helper(self, *args) -> 'void' + | make_helper(self, name) + | + | make_high_half(self, *args) -> 'bool' + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) -> 'void' + | make_insn(self, ins) + | + | make_low_half(self, *args) -> 'bool' + | make_low_half(self, width) -> bool + | + | make_number(self, *args) -> 'void' + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) -> 'void' + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) -> 'void' + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) -> 'bool' + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) -> 'bool' + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) -> 'bool' + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) -> 'bool' + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) -> 'void' + | set_impptr_done(self) + | + | set_udt(self, *args) -> 'void' + | set_udt(self) + | + | set_undef_val(self, *args) -> 'void' + | set_undef_val(self) + | + | shift_mop(self, *args) -> 'bool' + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) -> 'int64' + | signed_value(self) -> int64 + | + | swap(self, *args) -> 'void' + | swap(self, rop) + | + | unsigned_value(self, *args) -> 'uint64' + | unsigned_value(self) -> uint64 + | + | value(self, *args) -> 'uint64' + | value(self, is_signed) -> uint64 + | + | zero(self, *args) -> 'void' + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from mop_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | valnum + | mop_t_valnum_get(self) -> uint16 + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from mop_t: + | + | __hash__ = None + +Help on class mcallargs_t in module ida_hexrays: + +class mcallargs_t(builtins.object) + | Proxy of C++ qvector< mcallarg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'mcallarg_t const &' + | __getitem__(self, i) -> mcallarg_t + | + | __init__(self, *args) + | __init__(self) -> mcallargs_t + | __init__(self, x) -> mcallargs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_mcallargs_t(...) + | delete_mcallargs_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'mcallarg_t const &' + | at(self, _idx) -> mcallarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< mcallarg_t >::const_iterator' + | begin(self) -> mcallarg_t + | begin(self) -> mcallarg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< mcallarg_t >::const_iterator' + | end(self) -> mcallarg_t + | end(self) -> mcallarg_t + | + | erase(self, *args) -> 'qvector< mcallarg_t >::iterator' + | erase(self, it) -> mcallarg_t + | erase(self, first, last) -> mcallarg_t + | + | extract(self, *args) -> 'mcallarg_t *' + | extract(self) -> mcallarg_t + | + | find(self, *args) -> 'qvector< mcallarg_t >::const_iterator' + | find(self, x) -> mcallarg_t + | find(self, x) -> mcallarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=mcallarg_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< mcallarg_t >::iterator' + | insert(self, it, x) -> mcallarg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'mcallarg_t &' + | push_back(self, x) + | push_back(self) -> mcallarg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class mcallinfo_t in module ida_hexrays: + +class mcallinfo_t(builtins.object) + | Proxy of C++ mcallinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _callee=BADADDR, _sargs=0) -> mcallinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mcallinfo_t(...) + | delete_mcallinfo_t(self) + | + | _print(self, *args) -> 'void' + | _print(self, size=-1, shins_flags=0x04|0x02) + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | get_type(self, *args) -> 'tinfo_t' + | get_type(self) -> tinfo_t + | + | is_vararg(self, *args) -> 'bool' + | is_vararg(self) -> bool + | + | lexcompare(self, *args) -> 'int' + | lexcompare(self, f) -> int + | + | set_type(self, *args) -> 'bool' + | set_type(self, type) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | args + | mcallinfo_t_args_get(self) -> mcallargs_t + | + | call_spd + | mcallinfo_t_call_spd_get(self) -> int + | + | callee + | mcallinfo_t_callee_get(self) -> ea_t + | + | cc + | mcallinfo_t_cc_get(self) -> cm_t + | + | dead_regs + | mcallinfo_t_dead_regs_get(self) -> mlist_t + | + | flags + | mcallinfo_t_flags_get(self) -> int + | + | fti_attrs + | mcallinfo_t_fti_attrs_get(self) -> type_attrs_t + | + | pass_regs + | mcallinfo_t_pass_regs_get(self) -> mlist_t + | + | retregs + | mcallinfo_t_retregs_get(self) -> mopvec_t + | + | return_argloc + | mcallinfo_t_return_argloc_get(self) -> argloc_t + | + | return_regs + | mcallinfo_t_return_regs_get(self) -> mlist_t + | + | return_type + | mcallinfo_t_return_type_get(self) -> tinfo_t + | + | role + | mcallinfo_t_role_get(self) -> funcrole_t + | + | solid_args + | mcallinfo_t_solid_args_get(self) -> int + | + | spoiled + | mcallinfo_t_spoiled_get(self) -> mlist_t + | + | stkargs_top + | mcallinfo_t_stkargs_top_get(self) -> int + | + | thisown + | The membership flag + | + | visible_memory + | mcallinfo_t_visible_memory_get(self) -> ivlset_t + +Help on class mcases_t in module ida_hexrays: + +class mcases_t(builtins.object) + | Proxy of C++ mcases_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> mcases_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mcases_t(...) + | delete_mcases_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | resize(self, *args) -> 'void' + | resize(self, s) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | targets + | mcases_t_targets_get(self) -> intvec_t + | + | thisown + | The membership flag + | + | values + | mcases_t_values_get(self) -> casevec_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function mcode_modifies_d in module ida_hexrays: + +mcode_modifies_d(*args) -> 'bool' + mcode_modifies_d(mcode) -> bool + +Help on class microcode_filter_t in module ida_hexrays: + +class microcode_filter_t(builtins.object) + | Proxy of C++ microcode_filter_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> microcode_filter_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_microcode_filter_t(...) + | delete_microcode_filter_t(self) + | + | apply(self, *args) -> 'merror_t' + | apply(self, cdg) -> merror_t + | + | match(self, *args) -> 'bool' + | match(self, cdg) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on class minsn_t in module ida_hexrays: + +class minsn_t(builtins.object) + | Proxy of C++ minsn_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea) -> minsn_t + | __init__(self, m) -> minsn_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, ri) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_minsn_t(...) + | delete_minsn_t(self) + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _make_nop(self, *args) -> 'void' + | _make_nop(self) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _minsn_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _minsn_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) -> 'void' + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | clr_assert(self, *args) -> 'void' + | clr_assert(self) + | + | clr_combinable(self, *args) -> 'void' + | clr_combinable(self) + | + | clr_combined(self, *args) -> 'void' + | clr_combined(self) + | + | clr_fpinsn(self, *args) -> 'void' + | clr_fpinsn(self) + | + | clr_ignlowsrc(self, *args) -> 'void' + | clr_ignlowsrc(self) + | + | clr_multimov(self, *args) -> 'void' + | clr_multimov(self) + | + | clr_noret_icall(self, *args) -> 'void' + | clr_noret_icall(self) + | + | clr_propagatable(self, *args) -> 'void' + | clr_propagatable(self) + | + | clr_tailcall(self, *args) -> 'void' + | clr_tailcall(self) + | + | contains_call(self, *args) -> 'bool' + | contains_call(self, with_helpers=False) -> bool + | + | contains_opcode(self, *args) -> 'bool' + | contains_opcode(self, mcode) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | equal_insns(self, *args) -> 'bool' + | equal_insns(self, m, eqflags) -> bool + | + | find_call(self, *args) -> 'minsn_t *' + | find_call(self, with_helpers=False) -> minsn_t + | + | find_ins_op(self, *args) -> 'minsn_t *' + | find_ins_op(self, op=m_nop) -> minsn_t + | + | find_num_op(self, *args) -> 'mop_t *' + | find_num_op(self) -> mop_t + | + | find_opcode(self, *args) -> 'minsn_t *' + | find_opcode(self, mcode) -> minsn_t + | find_opcode(self, mcode) -> minsn_t + | + | for_all_insns(self, *args) -> 'int' + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv) -> int + | + | get_role(self, *args) -> 'funcrole_t' + | get_role(self) -> funcrole_t + | + | get_split_size(self, *args) -> 'int' + | get_split_size(self) -> int + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is_after(self, *args) -> 'bool' + | is_after(self, m) -> bool + | + | is_alloca(self, *args) -> 'bool' + | is_alloca(self) -> bool + | + | is_assert(self, *args) -> 'bool' + | is_assert(self) -> bool + | + | is_between(self, *args) -> 'bool' + | is_between(self, m1, m2) -> bool + | + | is_bswap(self, *args) -> 'bool' + | is_bswap(self) -> bool + | + | is_cleaning_pop(self, *args) -> 'bool' + | is_cleaning_pop(self) -> bool + | + | is_combinable(self, *args) -> 'bool' + | is_combinable(self) -> bool + | + | is_combined(self, *args) -> 'bool' + | is_combined(self) -> bool + | + | is_extstx(self, *args) -> 'bool' + | is_extstx(self) -> bool + | + | is_farcall(self, *args) -> 'bool' + | is_farcall(self) -> bool + | + | is_fpinsn(self, *args) -> 'bool' + | is_fpinsn(self) -> bool + | + | is_helper(self, *args) -> 'bool' + | is_helper(self, name) -> bool + | + | is_ignlowsrc(self, *args) -> 'bool' + | is_ignlowsrc(self) -> bool + | + | is_inverted_jx(self, *args) -> 'bool' + | is_inverted_jx(self) -> bool + | + | is_like_move(self, *args) -> 'bool' + | is_like_move(self) -> bool + | + | is_mbarrier(self, *args) -> 'bool' + | is_mbarrier(self) -> bool + | + | is_memcpy(self, *args) -> 'bool' + | is_memcpy(self) -> bool + | + | is_memset(self, *args) -> 'bool' + | is_memset(self) -> bool + | + | is_mov(self, *args) -> 'bool' + | is_mov(self) -> bool + | + | is_multimov(self, *args) -> 'bool' + | is_multimov(self) -> bool + | + | is_noret_call(self, *args) -> 'bool' + | is_noret_call(self, ignore_noret_icall=False) -> bool + | + | is_optional(self, *args) -> 'bool' + | is_optional(self) -> bool + | + | is_persistent(self, *args) -> 'bool' + | is_persistent(self) -> bool + | + | is_propagatable(self, *args) -> 'bool' + | is_propagatable(self) -> bool + | + | is_readflags(self, *args) -> 'bool' + | is_readflags(self) -> bool + | + | is_tailcall(self, *args) -> 'bool' + | is_tailcall(self) -> bool + | + | is_unknown_call(self, *args) -> 'bool' + | is_unknown_call(self) -> bool + | + | is_wild_match(self, *args) -> 'bool' + | is_wild_match(self) -> bool + | + | lexcompare(self, *args) -> 'int' + | lexcompare(self, ri) -> int + | + | may_use_aliased_memory(self, *args) -> 'bool' + | may_use_aliased_memory(self) -> bool + | + | modifes_d(self, *args) -> 'bool' + | modifes_d(self) -> bool + | + | modifies_pair_mop(self, *args) -> 'bool' + | modifies_pair_mop(self) -> bool + | + | optimize_solo(self, *args) -> 'int' + | optimize_solo(self, optflags=0) -> int + | + | optimize_subtree(self, *args) -> 'int' + | optimize_subtree(self, blk, top, parent, converted_call, optflags=0x0002) -> int + | + | replace_by(self, o) + | + | set_assert(self, *args) -> 'void' + | set_assert(self) + | + | set_cleaning_pop(self, *args) -> 'void' + | set_cleaning_pop(self) + | + | set_combinable(self, *args) -> 'void' + | set_combinable(self) + | + | set_extstx(self, *args) -> 'void' + | set_extstx(self) + | + | set_farcall(self, *args) -> 'void' + | set_farcall(self) + | + | set_fpinsn(self, *args) -> 'void' + | set_fpinsn(self) + | + | set_ignlowsrc(self, *args) -> 'void' + | set_ignlowsrc(self) + | + | set_inverted_jx(self, *args) -> 'void' + | set_inverted_jx(self) + | + | set_mbarrier(self, *args) -> 'void' + | set_mbarrier(self) + | + | set_multimov(self, *args) -> 'void' + | set_multimov(self) + | + | set_noret_icall(self, *args) -> 'void' + | set_noret_icall(self) + | + | set_optional(self, *args) -> 'void' + | set_optional(self) + | + | set_persistent(self, *args) -> 'void' + | set_persistent(self) + | + | set_split_size(self, *args) -> 'void' + | set_split_size(self, s) + | + | set_tailcall(self, *args) -> 'void' + | set_tailcall(self) + | + | set_wild_match(self, *args) -> 'void' + | set_wild_match(self) + | + | setaddr(self, *args) -> 'void' + | setaddr(self, new_ea) + | + | swap(self, *args) -> 'void' + | swap(self, m) + | + | was_noret_icall(self, *args) -> 'bool' + | was_noret_icall(self) -> bool + | + | was_split(self, *args) -> 'bool' + | was_split(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | d + | minsn_t_d_get(self) -> mop_t + | + | ea + | minsn_t_ea_get(self) -> ea_t + | + | iprops + | minsn_t_iprops_get(self) -> int + | + | l + | minsn_t_l_get(self) -> mop_t + | + | meminfo + | + | next + | minsn_t_next_get(self) -> minsn_t + | + | obj_id + | _obj_id(self) -> PyObject * + | + | opcode + | minsn_t_opcode_get(self) -> mcode_t + | + | prev + | minsn_t_prev_get(self) -> minsn_t + | + | r + | minsn_t_r_get(self) -> mop_t + | + | thisown + | The membership flag + +Help on class minsn_visitor_t in module ida_hexrays: + +class minsn_visitor_t(op_parent_info_t) + | Proxy of C++ minsn_visitor_t class. + | + | Method resolution order: + | minsn_visitor_t + | op_parent_info_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> minsn_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_minsn_visitor_t(...) + | delete_minsn_visitor_t(self) + | + | visit_minsn(self, *args) -> 'int' + | visit_minsn(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from op_parent_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + +Help on class mlist_mop_visitor_t in module ida_hexrays: + +class mlist_mop_visitor_t(builtins.object) + | Proxy of C++ mlist_mop_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> mlist_mop_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mlist_mop_visitor_t(...) + | delete_mlist_mop_visitor_t(self) + | + | visit_mop(self, *args) -> 'int' + | visit_mop(self, op) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | changed + | mlist_mop_visitor_t_changed_get(self) -> bool + | + | curins + | mlist_mop_visitor_t_curins_get(self) -> minsn_t + | + | list + | mlist_mop_visitor_t_list_get(self) -> mlist_t + | + | thisown + | The membership flag + | + | topins + | mlist_mop_visitor_t_topins_get(self) -> minsn_t + +Help on class mlist_t in module ida_hexrays: + +class mlist_t(builtins.object) + | Proxy of C++ mlist_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> mlist_t + | __init__(self, ivl) -> mlist_t + | __init__(self, r, size) -> mlist_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mlist_t(...) + | delete_mlist_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | add(self, *args) -> 'bool' + | add(self, r, size) -> bool + | add(self, r) -> bool + | add(self, ivl) -> bool + | add(self, lst) -> bool + | + | addmem(self, *args) -> 'bool' + | addmem(self, ea, size) -> bool + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | count(self, *args) -> 'asize_t' + | count(self) -> asize_t + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | has(self, *args) -> 'bool' + | has(self, r) -> bool + | + | has_all(self, *args) -> 'bool' + | has_all(self, r, size) -> bool + | + | has_any(self, *args) -> 'bool' + | has_any(self, r, size) -> bool + | + | has_common(self, *args) -> 'bool' + | has_common(self, lst) -> bool + | + | has_memory(self, *args) -> 'bool' + | has_memory(self) -> bool + | + | includes(self, *args) -> 'bool' + | includes(self, lst) -> bool + | + | intersect(self, *args) -> 'bool' + | intersect(self, lst) -> bool + | + | is_subset_of(self, *args) -> 'bool' + | is_subset_of(self, lst) -> bool + | + | sub(self, *args) -> 'bool' + | sub(self, r, size) -> bool + | sub(self, ivl) -> bool + | sub(self, lst) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | mem + | mlist_t_mem_get(self) -> ivlset_t + | + | reg + | mlist_t_reg_get(self) -> rlist_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class mnumber_t in module ida_hexrays: + +class mnumber_t(operand_locator_t) + | Proxy of C++ mnumber_t class. + | + | Method resolution order: + | mnumber_t + | operand_locator_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, v, _ea=BADADDR, n=0) -> mnumber_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mnumber_t(...) + | delete_mnumber_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | update_value(self, *args) -> 'void' + | update_value(self, val64) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | org_value + | mnumber_t_org_value_get(self) -> uint64 + | + | thisown + | The membership flag + | + | value + | mnumber_t_value_get(self) -> uint64 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from operand_locator_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | operand_locator_t_ea_get(self) -> ea_t + | + | opnum + | operand_locator_t_opnum_get(self) -> int + +Help on function modify_user_lvar_info in module ida_hexrays: + +modify_user_lvar_info(*args) -> 'bool' + modify_user_lvar_info(func_ea, mli_flags, info) -> bool + + + Modify saved local variable settings. + + @param func_ea (C++: ea_t) + @param mli_flags: bits that specify which attrs defined by INFO are to + be set (C++: uint) + @param info: local variable info attrs (C++: const lvar_saved_info_t + &) + @return: true if modified, false if invalid MLI_FLAGS passed + +Help on function modify_user_lvars in module ida_hexrays: + +modify_user_lvars(*args) -> 'bool' + modify_user_lvars(entry_ea, mlv) -> bool + + + Modify saved local variable settings. + + @param entry_ea: function start address (C++: ea_t) + @param mlv: local variable modifier (C++: user_lvar_modifier_t &) + @return: true if modified variables + +Help on class mop_addr_t in module ida_hexrays: + +class mop_addr_t(mop_t) + | Proxy of C++ mop_addr_t class. + | + | Method resolution order: + | mop_addr_t + | mop_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mop_addr_t + | __init__(self, ra) -> mop_addr_t + | __init__(self, ra, isz, osz) -> mop_addr_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mop_addr_t(...) + | delete_mop_addr_t(self) + | + | lexcompare(self, *args) -> 'int' + | lexcompare(self, ra) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | insize + | mop_addr_t_insize_get(self) -> int + | + | outsize + | mop_addr_t_outsize_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from mop_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, rop) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, rop) -> bool + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) -> 'mop_addr_t *' + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) -> 'int' + | _get_b(self) -> int + | + | _get_c(self, *args) -> 'mcases_t *' + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) -> 'char const *' + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) -> 'minsn_t *' + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) -> 'mcallinfo_t *' + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) -> 'fnumber_t *' + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) -> 'ea_t' + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) -> 'char const *' + | _get_helper(self) -> char const * + | + | _get_l(self, *args) -> 'lvar_ref_t *' + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) -> 'mnumber_t *' + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) -> 'mop_pair_t *' + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) -> 'mreg_t' + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) -> 'stkvar_ref_t *' + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) -> 'scif_t *' + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) -> 'mopt_t' + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) -> 'void' + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) -> 'void' + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) -> 'void' + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) -> 'void' + | _make_gvar(self, ea) + | + | _make_insn(self, *args) -> 'void' + | _make_insn(self, ins) + | + | _make_lvar(self, *args) -> 'void' + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) -> 'void' + | _make_pair(self, _pair) + | + | _make_reg(self, *args) -> 'void' + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) -> 'void' + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) -> 'void' + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) -> 'void' + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _set_a(self, *args) -> 'void' + | _set_a(self, _v) + | + | _set_b(self, *args) -> 'void' + | _set_b(self, _v) + | + | _set_c(self, *args) -> 'void' + | _set_c(self, _v) + | + | _set_cstr(self, *args) -> 'void' + | _set_cstr(self, _v) + | + | _set_d(self, *args) -> 'void' + | _set_d(self, _v) + | + | _set_f(self, *args) -> 'void' + | _set_f(self, _v) + | + | _set_fpc(self, *args) -> 'void' + | _set_fpc(self, _v) + | + | _set_g(self, *args) -> 'void' + | _set_g(self, _v) + | + | _set_helper(self, *args) -> 'void' + | _set_helper(self, _v) + | + | _set_l(self, *args) -> 'void' + | _set_l(self, _v) + | + | _set_nnn(self, *args) -> 'void' + | _set_nnn(self, _v) + | + | _set_pair(self, *args) -> 'void' + | _set_pair(self, _v) + | + | _set_r(self, *args) -> 'void' + | _set_r(self, _v) + | + | _set_s(self, *args) -> 'void' + | _set_s(self, _v) + | + | _set_scif(self, *args) -> 'void' + | _set_scif(self, _v) + | + | _set_t(self, *args) -> 'void' + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) -> 'void' + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) -> 'void' + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) -> 'void' + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) -> 'mop_t &' + | assign(self, rop) -> mop_t + | + | change_size(self, *args) -> 'bool' + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) -> 'void' + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) -> 'bool' + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) -> 'bool' + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) -> 'void' + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) -> 'void' + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) -> 'bool' + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | equal_mops(self, *args) -> 'bool' + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) -> 'void' + | erase(self) + | + | erase_but_keep_size(self, *args) -> 'void' + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) -> 'int' + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) -> 'minsn_t *' + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) -> 'bool' + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) -> 'bool' + | is01(self) -> bool + | + | is_arglist(self, *args) -> 'bool' + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) -> 'bool' + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) -> 'bool' + | is_cc(self) -> bool + | + | is_ccflags(self, *args) -> 'bool' + | is_ccflags(self) -> bool + | + | is_constant(self, *args) -> 'bool' + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) -> 'bool' + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) -> 'bool' + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) -> 'bool' + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) -> 'bool' + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) -> 'bool' + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) -> 'bool' + | is_kreg(self) -> bool + | + | is_mob(self, *args) -> 'bool' + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) -> 'bool' + | is_negative_constant(self) -> bool + | + | is_one(self, *args) -> 'bool' + | is_one(self) -> bool + | + | is_positive_constant(self, *args) -> 'bool' + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) -> 'bool' + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) -> 'bool' + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) -> 'bool' + | is_udt(self) -> bool + | + | is_undef_val(self, *args) -> 'bool' + | is_undef_val(self) -> bool + | + | is_zero(self, *args) -> 'bool' + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) -> 'bool' + | is_zero_extended_from(self, nbytes) -> bool + | + | make_blkref(self, *args) -> 'void' + | make_blkref(self, blknum) + | + | make_first_half(self, *args) -> 'bool' + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) -> 'bool' + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) -> 'void' + | make_gvar(self, ea) + | + | make_helper(self, *args) -> 'void' + | make_helper(self, name) + | + | make_high_half(self, *args) -> 'bool' + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) -> 'void' + | make_insn(self, ins) + | + | make_low_half(self, *args) -> 'bool' + | make_low_half(self, width) -> bool + | + | make_number(self, *args) -> 'void' + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) -> 'void' + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) -> 'void' + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) -> 'bool' + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) -> 'bool' + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) -> 'bool' + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) -> 'bool' + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) -> 'void' + | set_impptr_done(self) + | + | set_udt(self, *args) -> 'void' + | set_udt(self) + | + | set_undef_val(self, *args) -> 'void' + | set_undef_val(self) + | + | shift_mop(self, *args) -> 'bool' + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) -> 'int64' + | signed_value(self) -> int64 + | + | swap(self, *args) -> 'void' + | swap(self, rop) + | + | unsigned_value(self, *args) -> 'uint64' + | unsigned_value(self) -> uint64 + | + | value(self, *args) -> 'uint64' + | value(self, is_signed) -> uint64 + | + | zero(self, *args) -> 'void' + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from mop_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | valnum + | mop_t_valnum_get(self) -> uint16 + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from mop_t: + | + | __hash__ = None + +Help on class mop_pair_t in module ida_hexrays: + +class mop_pair_t(builtins.object) + | Proxy of C++ mop_pair_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mop_pair_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mop_pair_t(...) + | delete_mop_pair_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hop + | mop_pair_t_hop_get(self) -> mop_t + | + | lop + | mop_pair_t_lop_get(self) -> mop_t + | + | thisown + | The membership flag + +Help on class mop_t in module ida_hexrays: + +class mop_t(builtins.object) + | Proxy of C++ mop_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, rop) -> bool + | + | __init__(self, *args) + | __init__(self) -> mop_t + | __init__(self, rop) -> mop_t + | __init__(self, _r, _s) -> mop_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, rop) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mop_t(...) + | delete_mop_t(self) + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) -> 'mop_addr_t *' + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) -> 'int' + | _get_b(self) -> int + | + | _get_c(self, *args) -> 'mcases_t *' + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) -> 'char const *' + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) -> 'minsn_t *' + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) -> 'mcallinfo_t *' + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) -> 'fnumber_t *' + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) -> 'ea_t' + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) -> 'char const *' + | _get_helper(self) -> char const * + | + | _get_l(self, *args) -> 'lvar_ref_t *' + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) -> 'mnumber_t *' + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) -> 'mop_pair_t *' + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) -> 'mreg_t' + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) -> 'stkvar_ref_t *' + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) -> 'scif_t *' + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) -> 'mopt_t' + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) -> 'void' + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) -> 'void' + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) -> 'void' + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) -> 'void' + | _make_gvar(self, ea) + | + | _make_insn(self, *args) -> 'void' + | _make_insn(self, ins) + | + | _make_lvar(self, *args) -> 'void' + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) -> 'void' + | _make_pair(self, _pair) + | + | _make_reg(self, *args) -> 'void' + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) -> 'void' + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) -> 'void' + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) -> 'void' + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _set_a(self, *args) -> 'void' + | _set_a(self, _v) + | + | _set_b(self, *args) -> 'void' + | _set_b(self, _v) + | + | _set_c(self, *args) -> 'void' + | _set_c(self, _v) + | + | _set_cstr(self, *args) -> 'void' + | _set_cstr(self, _v) + | + | _set_d(self, *args) -> 'void' + | _set_d(self, _v) + | + | _set_f(self, *args) -> 'void' + | _set_f(self, _v) + | + | _set_fpc(self, *args) -> 'void' + | _set_fpc(self, _v) + | + | _set_g(self, *args) -> 'void' + | _set_g(self, _v) + | + | _set_helper(self, *args) -> 'void' + | _set_helper(self, _v) + | + | _set_l(self, *args) -> 'void' + | _set_l(self, _v) + | + | _set_nnn(self, *args) -> 'void' + | _set_nnn(self, _v) + | + | _set_pair(self, *args) -> 'void' + | _set_pair(self, _v) + | + | _set_r(self, *args) -> 'void' + | _set_r(self, _v) + | + | _set_s(self, *args) -> 'void' + | _set_s(self, _v) + | + | _set_scif(self, *args) -> 'void' + | _set_scif(self, _v) + | + | _set_t(self, *args) -> 'void' + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) -> 'void' + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) -> 'void' + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) -> 'void' + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) -> 'mop_t &' + | assign(self, rop) -> mop_t + | + | change_size(self, *args) -> 'bool' + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) -> 'void' + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) -> 'bool' + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) -> 'bool' + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) -> 'void' + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) -> 'void' + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) -> 'bool' + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | equal_mops(self, *args) -> 'bool' + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) -> 'void' + | erase(self) + | + | erase_but_keep_size(self, *args) -> 'void' + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) -> 'int' + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) -> 'minsn_t *' + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) -> 'bool' + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) -> 'bool' + | is01(self) -> bool + | + | is_arglist(self, *args) -> 'bool' + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) -> 'bool' + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) -> 'bool' + | is_cc(self) -> bool + | + | is_ccflags(self, *args) -> 'bool' + | is_ccflags(self) -> bool + | + | is_constant(self, *args) -> 'bool' + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) -> 'bool' + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) -> 'bool' + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) -> 'bool' + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) -> 'bool' + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) -> 'bool' + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) -> 'bool' + | is_kreg(self) -> bool + | + | is_mob(self, *args) -> 'bool' + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) -> 'bool' + | is_negative_constant(self) -> bool + | + | is_one(self, *args) -> 'bool' + | is_one(self) -> bool + | + | is_positive_constant(self, *args) -> 'bool' + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) -> 'bool' + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) -> 'bool' + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) -> 'bool' + | is_udt(self) -> bool + | + | is_undef_val(self, *args) -> 'bool' + | is_undef_val(self) -> bool + | + | is_zero(self, *args) -> 'bool' + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) -> 'bool' + | is_zero_extended_from(self, nbytes) -> bool + | + | lexcompare(self, *args) -> 'int' + | lexcompare(self, rop) -> int + | + | make_blkref(self, *args) -> 'void' + | make_blkref(self, blknum) + | + | make_first_half(self, *args) -> 'bool' + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) -> 'bool' + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) -> 'void' + | make_gvar(self, ea) + | + | make_helper(self, *args) -> 'void' + | make_helper(self, name) + | + | make_high_half(self, *args) -> 'bool' + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) -> 'void' + | make_insn(self, ins) + | + | make_low_half(self, *args) -> 'bool' + | make_low_half(self, width) -> bool + | + | make_number(self, *args) -> 'void' + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) -> 'void' + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) -> 'void' + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) -> 'bool' + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) -> 'bool' + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) -> 'bool' + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) -> 'bool' + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) -> 'void' + | set_impptr_done(self) + | + | set_udt(self, *args) -> 'void' + | set_udt(self) + | + | set_undef_val(self, *args) -> 'void' + | set_undef_val(self) + | + | shift_mop(self, *args) -> 'bool' + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) -> 'int64' + | signed_value(self) -> int64 + | + | swap(self, *args) -> 'void' + | swap(self, rop) + | + | unsigned_value(self, *args) -> 'uint64' + | unsigned_value(self) -> uint64 + | + | value(self, *args) -> 'uint64' + | value(self, is_signed) -> uint64 + | + | zero(self, *args) -> 'void' + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | thisown + | The membership flag + | + | valnum + | mop_t_valnum_get(self) -> uint16 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class mop_visitor_t in module ida_hexrays: + +class mop_visitor_t(op_parent_info_t) + | Proxy of C++ mop_visitor_t class. + | + | Method resolution order: + | mop_visitor_t + | op_parent_info_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> mop_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mop_visitor_t(...) + | delete_mop_visitor_t(self) + | + | visit_mop(self, *args) -> 'int' + | visit_mop(self, op, type, is_target) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | prune + | mop_visitor_t_prune_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from op_parent_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + +Help on class mopvec_t in module ida_hexrays: + +class mopvec_t(builtins.object) + | Proxy of C++ qvector< mop_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'mop_t const &' + | __getitem__(self, i) -> mop_t + | + | __init__(self, *args) + | __init__(self) -> mopvec_t + | __init__(self, x) -> mopvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_mopvec_t(...) + | delete_mopvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'mop_t const &' + | at(self, _idx) -> mop_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< mop_t >::const_iterator' + | begin(self) -> mop_t + | begin(self) -> mop_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< mop_t >::const_iterator' + | end(self) -> mop_t + | end(self) -> mop_t + | + | erase(self, *args) -> 'qvector< mop_t >::iterator' + | erase(self, it) -> mop_t + | erase(self, first, last) -> mop_t + | + | extract(self, *args) -> 'mop_t *' + | extract(self) -> mop_t + | + | find(self, *args) -> 'qvector< mop_t >::const_iterator' + | find(self, x) -> mop_t + | find(self, x) -> mop_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=mop_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< mop_t >::iterator' + | insert(self, it, x) -> mop_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'mop_t &' + | push_back(self, x) + | push_back(self) -> mop_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function mreg2reg in module ida_hexrays: + +mreg2reg(*args) -> 'int' + mreg2reg(reg, width) -> int + + + Map a microregister to a processor register. + + @param reg: microregister number (C++: mreg_t) + @param width: size of microregister in bytes (C++: int) + @return: processor register id or -1 + +Help on function must_mcode_close_block in module ida_hexrays: + +must_mcode_close_block(*args) -> 'bool' + must_mcode_close_block(mcode, including_calls) -> bool + + + Must an instruction with the given opcode be the last one in a block? + Such opcodes are called closing opcodes. + + @param mcode: instruction opcode (C++: mcode_t) + @param including_calls: should m_call/m_icall be considered as the + closing opcodes? If this function returns + true, the opcode cannot appear in the middle + of a block. Calls are a special case because + before MMAT_CALLS they are closing opcodes. + Afteer MMAT_CALLS that are not considered as + closing opcodes. (C++: bool) + +Help on function negate_mcode_relation in module ida_hexrays: + +negate_mcode_relation(*args) -> 'mcode_t' + negate_mcode_relation(code) -> mcode_t + +Help on function negated_relation in module ida_hexrays: + +negated_relation(*args) -> 'ctype_t' + negated_relation(op) -> ctype_t + + + Negate a comparison operator. For example, cot_sge becomes cot_slt. + + + @param op (C++: ctype_t) + +Help on function new_block in module ida_hexrays: + +new_block() + +Help on class number_format_t in module ida_hexrays: + +class number_format_t(builtins.object) + | Proxy of C++ number_format_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _opnum=0) -> number_format_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_number_format_t(...) + | delete_number_format_t(self) + | + | get_radix(self, *args) -> 'int' + | get_radix(self) -> int + | + | is_char(self, *args) -> 'bool' + | is_char(self) -> bool + | + | is_dec(self, *args) -> 'bool' + | is_dec(self) -> bool + | + | is_enum(self, *args) -> 'bool' + | is_enum(self) -> bool + | + | is_fixed(self, *args) -> 'bool' + | is_fixed(self) -> bool + | + | is_hex(self, *args) -> 'bool' + | is_hex(self) -> bool + | + | is_numop(self, *args) -> 'bool' + | is_numop(self) -> bool + | + | is_oct(self, *args) -> 'bool' + | is_oct(self) -> bool + | + | is_stroff(self, *args) -> 'bool' + | is_stroff(self) -> bool + | + | needs_to_be_inverted(self, *args) -> 'bool' + | needs_to_be_inverted(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | number_format_t_flags_get(self) -> flags_t + | + | opnum + | number_format_t_opnum_get(self) -> char + | + | org_nbytes + | number_format_t_org_nbytes_get(self) -> char + | + | props + | number_format_t_props_get(self) -> char + | + | serial + | number_format_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | type_name + | number_format_t_type_name_get(self) -> qstring * + +Help on class op_parent_info_t in module ida_hexrays: + +class op_parent_info_t(builtins.object) + | Proxy of C++ op_parent_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> op_parent_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_op_parent_info_t(...) + | delete_op_parent_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + +Help on function op_uses_x in module ida_hexrays: + +op_uses_x(*args) -> 'bool' + op_uses_x(op) -> bool + + + Does operator use the 'x' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function op_uses_y in module ida_hexrays: + +op_uses_y(*args) -> 'bool' + op_uses_y(op) -> bool + + + Does operator use the 'y' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function op_uses_z in module ida_hexrays: + +op_uses_z(*args) -> 'bool' + op_uses_z(op) -> bool + + + Does operator use the 'z' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function open_pseudocode in module ida_hexrays: + +open_pseudocode(*args) -> 'vdui_t *' + open_pseudocode(ea, new_window) -> vdui_t + + + Open pseudocode window. The specified function is decompiled and the + pseudocode window is opened. + + @param ea: function to decompile (C++: ea_t) + @param new_window: 0:reuse existing window; 1:open new window; -1: + reuse existing window if the current view is + pseudocode (C++: int) + @return: false if failed + +Help on class operand_locator_t in module ida_hexrays: + +class operand_locator_t(builtins.object) + | Proxy of C++ operand_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _ea, _opnum) -> operand_locator_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_operand_locator_t(...) + | delete_operand_locator_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | operand_locator_t_ea_get(self) -> ea_t + | + | opnum + | operand_locator_t_opnum_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class operator_info_t in module ida_hexrays: + +class operator_info_t(builtins.object) + | Proxy of C++ operator_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> operator_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_operator_info_t(...) + | delete_operator_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fixtype + | operator_info_t_fixtype_get(self) -> uchar + | + | flags + | operator_info_t_flags_get(self) -> uchar + | + | precedence + | operator_info_t_precedence_get(self) -> uchar + | + | text + | operator_info_t_text_get(self) -> char const * + | + | thisown + | The membership flag + | + | valency + | operator_info_t_valency_get(self) -> uchar + +Help on class optblock_t in module ida_hexrays: + +class optblock_t(builtins.object) + | Proxy of C++ optblock_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> optblock_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_optblock_t(...) + | delete_optblock_t(self) + | + | func(self, *args) -> 'int' + | func(self, blk) -> int + | + | install(self, *args) -> 'void' + | install(self) + | + | remove(self, *args) -> 'bool' + | remove(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on class optinsn_t in module ida_hexrays: + +class optinsn_t(builtins.object) + | Proxy of C++ optinsn_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> optinsn_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_optinsn_t(...) + | delete_optinsn_t(self) + | + | func(self, *args) -> 'int' + | func(self, blk, ins) -> int + | + | install(self, *args) -> 'void' + | install(self) + | + | remove(self, *args) -> 'bool' + | remove(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function parse_user_call in module ida_hexrays: + +parse_user_call(*args) -> 'bool' + parse_user_call(udc, decl, silent) -> bool + + + Convert function type declaration into internal structure + + @param udc: - pointer to output structure (C++: udcall_t *) + @param decl: - function type declaration (C++: const char *) + @param silent: - if TRUE: do not show warning in case of incorrect + type (C++: bool) + @return: success + +Help on function partial_type_num in module ida_hexrays: + +partial_type_num(*args) -> 'int' + partial_type_num(type) -> int + + + Calculate number of partial subtypes. + + @param type (C++: const tinfo_t &) + @return: number of partial subtypes. The bigger is this number, the + uglier is the type. + +Help on function print_vdloc in module ida_hexrays: + +print_vdloc(*args) -> 'qstring *' + print_vdloc(loc, nbytes) + + + Print vdloc. Since vdloc does not always carry the size info, we pass + it as NBYTES.. + + @param loc (C++: const vdloc_t &) + @param nbytes (C++: int) + +Help on function property_op_to_typename in module ida_hexrays: + +property_op_to_typename(self) + +Help on class qlist_cinsn_t in module ida_hexrays: + +class qlist_cinsn_t(builtins.object) + | Proxy of C++ qlist< cinsn_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> qlist_cinsn_t + | __init__(self, x) -> qlist_cinsn_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, x) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qlist_cinsn_t(...) + | delete_qlist_cinsn_t(self) + | + | back(self, *args) -> 'cinsn_t const &' + | back(self) -> cinsn_t + | back(self) -> cinsn_t + | + | begin(self, *args) -> 'qlist_cinsn_t_iterator' + | begin(self) -> qlist_cinsn_t_iterator + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qlist_cinsn_t_iterator' + | end(self) -> qlist_cinsn_t_iterator + | + | erase(self, *args) -> 'void' + | erase(self, p) -> qlist< cinsn_t >::iterator + | erase(self, p1, p2) + | erase(self, p) + | + | front(self, *args) -> 'cinsn_t const &' + | front(self) -> cinsn_t + | front(self) -> cinsn_t + | + | insert(self, *args) -> 'qlist_cinsn_t_iterator' + | insert(self, p, x) -> qlist< cinsn_t >::iterator + | insert(self, p) -> qlist< cinsn_t >::iterator + | insert(self, p, x) -> qlist_cinsn_t_iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | pop_front(self, *args) -> 'void' + | pop_front(self) + | + | push_back(self, *args) -> 'cinsn_t &' + | push_back(self, x) + | push_back(self) -> cinsn_t + | + | push_front(self, *args) -> 'void' + | push_front(self, x) + | + | rbegin(self, *args) -> 'qlist< cinsn_t >::const_reverse_iterator' + | rbegin(self) -> qlist< cinsn_t >::reverse_iterator + | rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | rend(self, *args) -> 'qlist< cinsn_t >::const_reverse_iterator' + | rend(self) -> qlist< cinsn_t >::reverse_iterator + | rend(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, x) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qlist_cinsn_t_iterator in module ida_hexrays: + +class qlist_cinsn_t_iterator(builtins.object) + | Proxy of C++ qlist_cinsn_t_iterator class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> qlist_cinsn_t_iterator + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, x) -> bool + | + | __next__(self, *args) -> 'void' + | __next__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qlist_cinsn_t_iterator(...) + | delete_qlist_cinsn_t_iterator(self) + | + | next = __next__(self, *args) -> 'void' + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cur + | qlist_cinsn_t_iterator_cur_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qstring_printer_t in module ida_hexrays: + +class qstring_printer_t(vc_printer_t) + | Proxy of C++ qstring_printer_t class. + | + | Method resolution order: + | qstring_printer_t + | vc_printer_t + | vd_printer_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, f, tags) -> qstring_printer_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) -> 'int' + | _print(self, indent, format) -> int + | + | get_s(self, *args) -> 'qstring' + | get_s(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | s + | + | thisown + | The membership flag + | + | with_tags + | qstring_printer_t_with_tags_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Methods inherited from vc_printer_t: + | + | __disown__(self) + | + | __swig_destroy__ = delete_vc_printer_t(...) + | delete_vc_printer_t(self) + | + | oneliner(self, *args) -> 'bool' + | oneliner(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vc_printer_t: + | + | func + | vc_printer_t_func_get(self) -> cfunc_t + | + | lastchar + | vc_printer_t_lastchar_get(self) -> char + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_printer_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + +Help on function qswap in module ida_hexrays: + +qswap(*args) -> 'void' + qswap(a, b) + +Help on class qvector_carg_t in module ida_hexrays: + +class qvector_carg_t(builtins.object) + | Proxy of C++ qvector< carg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'carg_t const &' + | __getitem__(self, i) -> carg_t + | + | __init__(self, *args) + | __init__(self) -> qvector_carg_t + | __init__(self, x) -> qvector_carg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_qvector_carg_t(...) + | delete_qvector_carg_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'carg_t &' + | + | at = __getitem__(self, *args) -> 'carg_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< carg_t >::const_iterator' + | begin(self) -> carg_t + | begin(self) -> carg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< carg_t >::const_iterator' + | end(self) -> carg_t + | end(self) -> carg_t + | + | erase(self, *args) -> 'qvector< carg_t >::iterator' + | erase(self, it) -> carg_t + | erase(self, first, last) -> carg_t + | + | extract(self, *args) -> 'carg_t *' + | extract(self) -> carg_t + | + | find(self, *args) -> 'qvector< carg_t >::const_iterator' + | find(self, x) -> carg_t + | find(self, x) -> carg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=carg_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< carg_t >::iterator' + | insert(self, it, x) -> carg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'carg_t &' + | push_back(self, x) + | push_back(self) -> carg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qvector_ccase_t in module ida_hexrays: + +class qvector_ccase_t(builtins.object) + | Proxy of C++ qvector< ccase_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'ccase_t const &' + | __getitem__(self, i) -> ccase_t + | + | __init__(self, *args) + | __init__(self) -> qvector_ccase_t + | __init__(self, x) -> qvector_ccase_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_qvector_ccase_t(...) + | delete_qvector_ccase_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'ccase_t &' + | + | at = __getitem__(self, *args) -> 'ccase_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< ccase_t >::const_iterator' + | begin(self) -> ccase_t + | begin(self) -> ccase_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< ccase_t >::const_iterator' + | end(self) -> ccase_t + | end(self) -> ccase_t + | + | erase(self, *args) -> 'qvector< ccase_t >::iterator' + | erase(self, it) -> ccase_t + | erase(self, first, last) -> ccase_t + | + | extract(self, *args) -> 'ccase_t *' + | extract(self) -> ccase_t + | + | find(self, *args) -> 'qvector< ccase_t >::const_iterator' + | find(self, x) -> ccase_t + | find(self, x) -> ccase_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=ccase_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< ccase_t >::iterator' + | insert(self, it, x) -> ccase_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'ccase_t &' + | push_back(self, x) + | push_back(self) -> ccase_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qvector_history_t in module ida_hexrays: + +class qvector_history_t(builtins.object) + | Proxy of C++ qvector< history_item_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'history_item_t const &' + | __getitem__(self, i) -> history_item_t + | + | __init__(self, *args) + | __init__(self) -> qvector_history_t + | __init__(self, x) -> qvector_history_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_qvector_history_t(...) + | delete_qvector_history_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'history_item_t const &' + | at(self, _idx) -> history_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< history_item_t >::const_iterator' + | begin(self) -> history_item_t + | begin(self) -> history_item_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< history_item_t >::const_iterator' + | end(self) -> history_item_t + | end(self) -> history_item_t + | + | erase(self, *args) -> 'qvector< history_item_t >::iterator' + | erase(self, it) -> history_item_t + | erase(self, first, last) -> history_item_t + | + | extract(self, *args) -> 'history_item_t *' + | extract(self) -> history_item_t + | + | find(self, *args) -> 'qvector< history_item_t >::const_iterator' + | find(self, x) -> history_item_t + | find(self, x) -> history_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=history_item_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< history_item_t >::iterator' + | insert(self, it, x) -> history_item_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'history_item_t &' + | push_back(self, x) + | push_back(self) -> history_item_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qvector_lvar_t in module ida_hexrays: + +class qvector_lvar_t(builtins.object) + | Proxy of C++ qvector< lvar_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'lvar_t const &' + | __getitem__(self, i) -> lvar_t + | + | __init__(self, *args) + | __init__(self) -> qvector_lvar_t + | __init__(self, x) -> qvector_lvar_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_qvector_lvar_t(...) + | delete_qvector_lvar_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'lvar_t &' + | + | at = __getitem__(self, *args) -> 'lvar_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< lvar_t >::const_iterator' + | begin(self) -> lvar_t + | begin(self) -> lvar_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< lvar_t >::const_iterator' + | end(self) -> lvar_t + | end(self) -> lvar_t + | + | erase(self, *args) -> 'qvector< lvar_t >::iterator' + | erase(self, it) -> lvar_t + | erase(self, first, last) -> lvar_t + | + | extract(self, *args) -> 'lvar_t *' + | extract(self) -> lvar_t + | + | find(self, *args) -> 'qvector< lvar_t >::const_iterator' + | find(self, x) -> lvar_t + | find(self, x) -> lvar_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=lvar_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< lvar_t >::iterator' + | insert(self, it, x) -> lvar_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'lvar_t &' + | push_back(self, x) + | push_back(self) -> lvar_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function reg2mreg in module ida_hexrays: + +reg2mreg(*args) -> 'mreg_t' + reg2mreg(reg) -> mreg_t + + + Map a processor register to a microregister. + + @param reg: processor register number (C++: int) + @return: microregister register id or mr_none + +Help on function remitem in module ida_hexrays: + +remitem(*args) -> 'void' + remitem(e) + +Help on function remove_hexrays_callback in module ida_hexrays: + +remove_hexrays_callback(callback) + Deprecated. Please use Hexrays_Hooks instead + +Help on function restore_user_cmts in module ida_hexrays: + +restore_user_cmts(*args) -> 'user_cmts_t *' + restore_user_cmts(func_ea) -> user_cmts_t + + + Restore user defined comments from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined comments. The returned object must + be deleted by the caller using delete_user_cmts() + +Help on function restore_user_defined_calls in module ida_hexrays: + +restore_user_defined_calls(*args) -> 'bool' + restore_user_defined_calls(udcalls, func_ea) -> bool + + + Restore user defined function calls from the database. + + @param udcalls: ptr to output buffer (C++: udcall_map_t *) + @param func_ea: entry address of the function (C++: ea_t) + @return: success + +Help on function restore_user_iflags in module ida_hexrays: + +restore_user_iflags(*args) -> 'user_iflags_t *' + restore_user_iflags(func_ea) -> user_iflags_t + + + Restore user defined citem iflags from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined iflags. The returned object must + be deleted by the caller using delete_user_iflags() + +Help on function restore_user_labels in module ida_hexrays: + +restore_user_labels(*args) -> 'user_labels_t *' + restore_user_labels(func_ea) -> user_labels_t + + + Restore user defined labels from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined labels. The returned object must + be deleted by the caller using delete_user_labels() + +Help on function restore_user_lvar_settings in module ida_hexrays: + +restore_user_lvar_settings(*args) -> 'bool' + restore_user_lvar_settings(lvinf, func_ea) -> bool + + + Restore user defined local variable settings in the database. + + @param lvinf: ptr to output buffer (C++: lvar_uservec_t *) + @param func_ea: entry address of the function (C++: ea_t) + @return: success + +Help on function restore_user_numforms in module ida_hexrays: + +restore_user_numforms(*args) -> 'user_numforms_t *' + restore_user_numforms(func_ea) -> user_numforms_t + + + Restore user defined number formats from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined number formats. The returned + object must be deleted by the caller using + delete_user_numforms() + +Help on function restore_user_unions in module ida_hexrays: + +restore_user_unions(*args) -> 'user_unions_t *' + restore_user_unions(func_ea) -> user_unions_t + + + Restore user defined union field selections from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of union field selections The returned object must + be deleted by the caller using delete_user_unions() + +Help on class rlist_t in module ida_hexrays: + +class rlist_t(bitset_t) + | Proxy of C++ rlist_t class. + | + | Method resolution order: + | rlist_t + | bitset_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rlist_t + | __init__(self, m) -> rlist_t + | __init__(self, reg, width) -> rlist_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_rlist_t(...) + | delete_rlist_t(self) + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from bitset_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __iter__(self) + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __len__ = count(self, *args) -> 'int' + | count(self) -> int + | count(self, bit) -> int + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | add(self, *args) -> 'bool' + | add(self, bit) -> bool + | add(self, bit, width) -> bool + | add(self, ml) -> bool + | + | back(self, *args) -> 'int' + | back(self) -> int + | + | begin(self, *args) -> 'bitset_t::iterator' + | begin(self) -> bitset_t::iterator + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | copy(self, *args) -> 'bitset_t &' + | copy(self, m) -> bitset_t + | + | count(self, *args) -> 'int' + | count(self) -> int + | count(self, bit) -> int + | + | cut_at(self, *args) -> 'bool' + | cut_at(self, maxbit) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'bitset_t::iterator' + | end(self) -> bitset_t::iterator + | + | fill_with_ones(self, *args) -> 'void' + | fill_with_ones(self, maxbit) + | + | front(self, *args) -> 'int' + | front(self) -> int + | + | has(self, *args) -> 'bool' + | has(self, bit) -> bool + | + | has_all(self, *args) -> 'bool' + | has_all(self, bit, width) -> bool + | + | has_any(self, *args) -> 'bool' + | has_any(self, bit, width) -> bool + | + | has_common(self, *args) -> 'bool' + | has_common(self, ml) -> bool + | + | inc(self, *args) -> 'void' + | inc(self, p, n=1) + | + | includes(self, *args) -> 'bool' + | includes(self, ml) -> bool + | + | intersect(self, *args) -> 'bool' + | intersect(self, ml) -> bool + | + | is_subset_of(self, *args) -> 'bool' + | is_subset_of(self, ml) -> bool + | + | itat(self, *args) -> 'bitset_t::iterator' + | itat(self, n) -> bitset_t::iterator + | + | itv(self, *args) -> 'int' + | itv(self, it) -> int + | + | last(self, *args) -> 'int' + | last(self) -> int + | + | shift_down(self, *args) -> 'void' + | shift_down(self, shift) + | + | sub(self, *args) -> 'bool' + | sub(self, bit) -> bool + | sub(self, bit, width) -> bool + | sub(self, ml) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from bitset_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from bitset_t: + | + | __hash__ = None + +Help on function save_user_cmts in module ida_hexrays: + +save_user_cmts(*args) -> 'void' + save_user_cmts(func_ea, user_cmts) + + + Save user defined comments into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param user_cmts: collection of user defined comments (C++: const + user_cmts_t *) + +Help on function save_user_defined_calls in module ida_hexrays: + +save_user_defined_calls(*args) -> 'void' + save_user_defined_calls(func_ea, udcalls) + + + Save user defined local function calls into the database. + + @param func_ea: entry address of the function (C++: ea_t) + @param udcalls: user-specified info about user defined function calls + (C++: const udcall_map_t &) + +Help on function save_user_iflags in module ida_hexrays: + +save_user_iflags(*args) -> 'void' + save_user_iflags(func_ea, iflags) + + + Save user defined citem iflags into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param iflags: collection of user defined citem iflags (C++: const + user_iflags_t *) + +Help on function save_user_labels in module ida_hexrays: + +save_user_labels(*args) -> 'void' + save_user_labels(func_ea, user_labels) + + + Save user defined labels into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param user_labels: collection of user defined labels (C++: const + user_labels_t *) + +Help on function save_user_lvar_settings in module ida_hexrays: + +save_user_lvar_settings(*args) -> 'void' + save_user_lvar_settings(func_ea, lvinf) + + + Save user defined local variable settings into the database. + + @param func_ea: entry address of the function (C++: ea_t) + @param lvinf: user-specified info about local variables (C++: const + lvar_uservec_t &) + +Help on function save_user_numforms in module ida_hexrays: + +save_user_numforms(*args) -> 'void' + save_user_numforms(func_ea, numforms) + + + Save user defined number formats into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param numforms: collection of user defined comments (C++: const + user_numforms_t *) + +Help on function save_user_unions in module ida_hexrays: + +save_user_unions(*args) -> 'void' + save_user_unions(func_ea, unions) + + + Save user defined union field selections into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param unions: collection of union field selections (C++: const + user_unions_t *) + +Help on class scif_t in module ida_hexrays: + +class scif_t(vdloc_t) + | Proxy of C++ scif_t class. + | + | Method resolution order: + | scif_t + | vdloc_t + | ida_typeinf.argloc_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _mba, n, tif) -> scif_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_scif_t(...) + | delete_scif_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | mba + | scif_t_mba_get(self) -> mbl_array_t + | + | name + | scif_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | scif_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Methods inherited from vdloc_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _set_reg1(self, *args) -> 'void' + | _set_reg1(self, r1) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | is_aliasable(self, *args) -> 'bool' + | is_aliasable(self, mb, size) -> bool + | + | reg1(self, *args) -> 'int' + | reg1(self) -> int + | + | set_reg1(self, *args) -> 'void' + | set_reg1(self, r1) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from vdloc_t: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_typeinf.argloc_t: + | + | _consume_rrel(self, *args) -> 'bool' + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) -> 'bool' + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) -> 'void' + | _set_badloc(self) + | + | _set_biggest(self, *args) -> 'void' + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) -> 'void' + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) -> 'void' + | _set_ea(self, _ea) + | + | _set_reg2(self, *args) -> 'void' + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) -> 'void' + | _set_stkoff(self, off) + | + | advance(self, *args) -> 'bool' + | advance(self, delta) -> bool + | + | atype(self, *args) -> 'argloc_type_t' + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) -> 'sval_t' + | calc_offset(self) -> sval_t + | + | consume_rrel(self, *args) -> 'void' + | consume_rrel(self, p) + | + | consume_scattered(self, *args) -> 'void' + | consume_scattered(self, p) + | + | get_biggest(self, *args) -> 'argloc_t::biggest_t' + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) -> 'void *' + | get_custom(self) -> void * + | + | get_ea(self, *args) -> 'ea_t' + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) -> 'uint32' + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) -> 'rrel_t const &' + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) -> 'bool' + | has_reg(self) -> bool + | + | has_stkoff(self, *args) -> 'bool' + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) -> 'bool' + | is_badloc(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_ea(self, *args) -> 'bool' + | is_ea(self) -> bool + | + | is_fragmented(self, *args) -> 'bool' + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) -> 'bool' + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_rrel(self, *args) -> 'bool' + | is_rrel(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) -> 'void' + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) -> 'void' + | justify_stkoff_right(self, size, _slotsize) + | + | reg2(self, *args) -> 'int' + | reg2(self) -> int + | + | regoff(self, *args) -> 'int' + | regoff(self) -> int + | + | scattered(self, *args) -> 'scattered_aloc_t const &' + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) -> 'void' + | set_badloc(self) + | + | set_ea(self, *args) -> 'void' + | set_ea(self, _ea) + | + | set_reg2(self, *args) -> 'void' + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, off) + | + | stkoff(self, *args) -> 'sval_t' + | stkoff(self) -> sval_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_typeinf.argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class scif_visitor_t in module ida_hexrays: + +class scif_visitor_t(builtins.object) + | Proxy of C++ scif_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> scif_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_scif_visitor_t(...) + | delete_scif_visitor_t(self) + | + | visit_scif_mop(self, *args) -> 'int' + | visit_scif_mop(self, r, off) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function select_udt_by_offset in module ida_hexrays: + +select_udt_by_offset(*args) -> 'int' + select_udt_by_offset(udts, ops, applicator) -> int + + + Select UDT + + @param udts: list of UDT tinfo_t for the selection, if NULL or empty + then UDTs from the "Local types" will be used (C++: const + qvector < tinfo_t > *) + @param ops: operands (C++: const ui_stroff_ops_t &) + @param applicator (C++: ui_stroff_applicator_t &) + +Help on function send_database in module ida_hexrays: + +send_database(*args) -> 'void' + send_database(err, silent) + + + Send the database to Hex-Rays. This function sends the current + database to the Hex-Rays server. The database is sent in the + compressed form over an encrypted (SSL) connection. + + @param err: failure description object. Empty hexrays_failure_t + object can be used if error information is not available. + (C++: const hexrays_failure_t &) + @param silent: if false, a dialog box will be displayed before sending + the database. (C++: bool) + +Help on function set2jcnd in module ida_hexrays: + +set2jcnd(*args) -> 'mcode_t' + set2jcnd(code) -> mcode_t + +Help on function set_type in module ida_hexrays: + +set_type(*args) -> 'bool' + set_type(id, tif, source, force=False) -> bool + + + Set a global type. + + @param id: address or id of the object (C++: uval_t) + @param tif: new type info (C++: const tinfo_t &) + @param source: where the type comes from (C++: type_source_t) + @param force: true means to set the type as is, false means to merge + the new type with the possibly existing old type info. + (C++: bool) + @return: success + +Help on class simple_graph_t in module ida_hexrays: + +class simple_graph_t(builtins.object) + | Proxy of C++ simple_graph_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | colored_gdl_edges + | simple_graph_t_colored_gdl_edges_get(self) -> bool + | + | thisown + | The membership flag + | + | title + | simple_graph_t_title_get(self) -> qstring * + +Help on class stkvar_ref_t in module ida_hexrays: + +class stkvar_ref_t(builtins.object) + | Proxy of C++ stkvar_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, m, o) -> stkvar_ref_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_stkvar_ref_t(...) + | delete_stkvar_ref_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, p_off=None) -> member_t * + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | mba + | stkvar_ref_t_mba_get(self) -> mbl_array_t + | + | off + | stkvar_ref_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function swap_mcode_relation in module ida_hexrays: + +swap_mcode_relation(*args) -> 'mcode_t' + swap_mcode_relation(code) -> mcode_t + +Help on function swapped_relation in module ida_hexrays: + +swapped_relation(*args) -> 'ctype_t' + swapped_relation(op) -> ctype_t + + + Swap a comparison operator. For example, cot_sge becomes cot_sle. + + + @param op (C++: ctype_t) + +Help on function term_hexrays_plugin in module ida_hexrays: + +term_hexrays_plugin(*args) -> 'void' + term_hexrays_plugin() + + + Stop working with hex-rays decompiler. + +Help on class treeloc_t in module ida_hexrays: + +class treeloc_t(builtins.object) + | Proxy of C++ treeloc_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> treeloc_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_treeloc_t(...) + | delete_treeloc_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | treeloc_t_ea_get(self) -> ea_t + | + | itp + | treeloc_t_itp_get(self) -> item_preciser_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class udc_filter_t in module ida_hexrays: + +class udc_filter_t(microcode_filter_t) + | Proxy of C++ udc_filter_t class. + | + | Method resolution order: + | udc_filter_t + | microcode_filter_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> udc_filter_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_udc_filter_t(...) + | delete_udc_filter_t(self) + | + | apply(self, *args) -> 'merror_t' + | apply(self, cdg) -> merror_t + | + | init(self, *args) -> 'bool' + | init(self, decl) -> bool + | + | match(self, *args) -> 'bool' + | match(self, cdg) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from microcode_filter_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function udcall_map_begin in module ida_hexrays: + +udcall_map_begin(*args) -> 'udcall_map_iterator_t' + udcall_map_begin(map) -> udcall_map_iterator_t + + + Get iterator pointing to the beginning of udcall_map_t. + + + @param map (C++: const udcall_map_t *) + +Help on function udcall_map_clear in module ida_hexrays: + +udcall_map_clear(*args) -> 'void' + udcall_map_clear(map) + + + Clear udcall_map_t. + + + @param map (C++: udcall_map_t *) + +Help on function udcall_map_end in module ida_hexrays: + +udcall_map_end(*args) -> 'udcall_map_iterator_t' + udcall_map_end(map) -> udcall_map_iterator_t + + + Get iterator pointing to the end of udcall_map_t. + + + @param map (C++: const udcall_map_t *) + +Help on function udcall_map_erase in module ida_hexrays: + +udcall_map_erase(*args) -> 'void' + udcall_map_erase(map, p) + + + Erase current element from udcall_map_t. + + + @param map (C++: udcall_map_t *) + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_find in module ida_hexrays: + +udcall_map_find(*args) -> 'udcall_map_iterator_t' + udcall_map_find(map, key) -> udcall_map_iterator_t + + + Find the specified key in udcall_map_t. + + + @param map (C++: const udcall_map_t *) + @param key (C++: const ea_t &) + +Help on function udcall_map_first in module ida_hexrays: + +udcall_map_first(*args) -> 'ea_t const &' + udcall_map_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_free in module ida_hexrays: + +udcall_map_free(*args) -> 'void' + udcall_map_free(map) + + + Delete udcall_map_t instance. + + + @param map (C++: udcall_map_t *) + +Help on function udcall_map_insert in module ida_hexrays: + +udcall_map_insert(*args) -> 'udcall_map_iterator_t' + udcall_map_insert(map, key, val) -> udcall_map_iterator_t + + + Insert new (ea_t, 'udcall_t' ) pair into udcall_map_t. + + + @param map (C++: udcall_map_t *) + @param key (C++: const ea_t &) + @param val (C++: const udcall_t &) + +Help on class udcall_map_iterator_t in module ida_hexrays: + +class udcall_map_iterator_t(builtins.object) + | Proxy of C++ udcall_map_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> udcall_map_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_udcall_map_iterator_t(...) + | delete_udcall_map_iterator_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 + | + | x + | udcall_map_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function udcall_map_new in module ida_hexrays: + +udcall_map_new(*args) -> 'udcall_map_t *' + udcall_map_new() -> udcall_map_t * + + + Create a new udcall_map_t instance. + +Help on function udcall_map_next in module ida_hexrays: + +udcall_map_next(*args) -> 'udcall_map_iterator_t' + udcall_map_next(p) -> udcall_map_iterator_t + + + Move to the next element. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_prev in module ida_hexrays: + +udcall_map_prev(*args) -> 'udcall_map_iterator_t' + udcall_map_prev(p) -> udcall_map_iterator_t + + + Move to the previous element. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_second in module ida_hexrays: + +udcall_map_second(*args) -> 'udcall_t &' + udcall_map_second(p) -> udcall_t + + + Get reference to the current map value. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_size in module ida_hexrays: + +udcall_map_size(*args) -> 'size_t' + udcall_map_size(map) -> size_t + + + Get size of udcall_map_t. + + + @param map (C++: udcall_map_t *) + +Help on class udcall_t in module ida_hexrays: + +class udcall_t(builtins.object) + | Proxy of C++ udcall_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> udcall_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_udcall_t(...) + | delete_udcall_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | udcall_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tif + | udcall_t_tif_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class ui_stroff_applicator_t in module ida_hexrays: + +class ui_stroff_applicator_t(builtins.object) + | Proxy of C++ ui_stroff_applicator_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_applicator_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ui_stroff_applicator_t(...) + | delete_ui_stroff_applicator_t(self) + | + | apply(self, *args) -> 'bool' + | apply(self, opnum, path) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on class ui_stroff_op_t in module ida_hexrays: + +class ui_stroff_op_t(builtins.object) + | Proxy of C++ ui_stroff_op_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_op_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ui_stroff_op_t(...) + | delete_ui_stroff_op_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | offset + | ui_stroff_op_t_offset_get(self) -> uval_t + | + | text + | ui_stroff_op_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class ui_stroff_ops_t in module ida_hexrays: + +class ui_stroff_ops_t(builtins.object) + | Proxy of C++ qvector< ui_stroff_op_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'ui_stroff_op_t const &' + | __getitem__(self, i) -> ui_stroff_op_t + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_ops_t + | __init__(self, x) -> ui_stroff_ops_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_ui_stroff_ops_t(...) + | delete_ui_stroff_ops_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'ui_stroff_op_t &' + | + | at = __getitem__(self, *args) -> 'ui_stroff_op_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< ui_stroff_op_t >::const_iterator' + | begin(self) -> ui_stroff_op_t + | begin(self) -> ui_stroff_op_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< ui_stroff_op_t >::const_iterator' + | end(self) -> ui_stroff_op_t + | end(self) -> ui_stroff_op_t + | + | erase(self, *args) -> 'qvector< ui_stroff_op_t >::iterator' + | erase(self, it) -> ui_stroff_op_t + | erase(self, first, last) -> ui_stroff_op_t + | + | extract(self, *args) -> 'ui_stroff_op_t *' + | extract(self) -> ui_stroff_op_t + | + | find(self, *args) -> 'qvector< ui_stroff_op_t >::const_iterator' + | find(self, x) -> ui_stroff_op_t + | find(self, x) -> ui_stroff_op_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=ui_stroff_op_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< ui_stroff_op_t >::iterator' + | insert(self, it, x) -> ui_stroff_op_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'ui_stroff_op_t &' + | push_back(self, x) + | push_back(self) -> ui_stroff_op_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_cmts_begin in module ida_hexrays: + +user_cmts_begin(*args) -> 'user_cmts_iterator_t' + user_cmts_begin(map) -> user_cmts_iterator_t + + + Get iterator pointing to the beginning of user_cmts_t. + + + @param map (C++: const user_cmts_t *) + +Help on function user_cmts_clear in module ida_hexrays: + +user_cmts_clear(*args) -> 'void' + user_cmts_clear(map) + + + Clear user_cmts_t. + + + @param map (C++: user_cmts_t *) + +Help on function user_cmts_end in module ida_hexrays: + +user_cmts_end(*args) -> 'user_cmts_iterator_t' + user_cmts_end(map) -> user_cmts_iterator_t + + + Get iterator pointing to the end of user_cmts_t. + + + @param map (C++: const user_cmts_t *) + +Help on function user_cmts_erase in module ida_hexrays: + +user_cmts_erase(*args) -> 'void' + user_cmts_erase(map, p) + + + Erase current element from user_cmts_t. + + + @param map (C++: user_cmts_t *) + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_find in module ida_hexrays: + +user_cmts_find(*args) -> 'user_cmts_iterator_t' + user_cmts_find(map, key) -> user_cmts_iterator_t + + + Find the specified key in user_cmts_t. + + + @param map (C++: const user_cmts_t *) + @param key (C++: const treeloc_t &) + +Help on function user_cmts_first in module ida_hexrays: + +user_cmts_first(*args) -> 'treeloc_t const &' + user_cmts_first(p) -> treeloc_t + + + Get reference to the current map key. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_free in module ida_hexrays: + +user_cmts_free(*args) -> 'void' + user_cmts_free(map) + + + Delete user_cmts_t instance. + + + @param map (C++: user_cmts_t *) + +Help on function user_cmts_insert in module ida_hexrays: + +user_cmts_insert(*args) -> 'user_cmts_iterator_t' + user_cmts_insert(map, key, val) -> user_cmts_iterator_t + + + Insert new ( 'treeloc_t' , 'citem_cmt_t' ) pair into user_cmts_t. + + + @param map (C++: user_cmts_t *) + @param key (C++: const treeloc_t &) + @param val (C++: const citem_cmt_t &) + +Help on class user_cmts_iterator_t in module ida_hexrays: + +class user_cmts_iterator_t(builtins.object) + | Proxy of C++ user_cmts_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_cmts_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_cmts_iterator_t(...) + | delete_user_cmts_iterator_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 + | + | x + | user_cmts_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_cmts_new in module ida_hexrays: + +user_cmts_new(*args) -> 'user_cmts_t *' + user_cmts_new() -> user_cmts_t + + + Create a new user_cmts_t instance. + +Help on function user_cmts_next in module ida_hexrays: + +user_cmts_next(*args) -> 'user_cmts_iterator_t' + user_cmts_next(p) -> user_cmts_iterator_t + + + Move to the next element. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_prev in module ida_hexrays: + +user_cmts_prev(*args) -> 'user_cmts_iterator_t' + user_cmts_prev(p) -> user_cmts_iterator_t + + + Move to the previous element. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_second in module ida_hexrays: + +user_cmts_second(*args) -> 'citem_cmt_t &' + user_cmts_second(p) -> citem_cmt_t + + + Get reference to the current map value. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_size in module ida_hexrays: + +user_cmts_size(*args) -> 'size_t' + user_cmts_size(map) -> size_t + + + Get size of user_cmts_t. + + + @param map (C++: user_cmts_t *) + +Help on class user_cmts_t in module ida_hexrays: + +class user_cmts_t(builtins.object) + | Proxy of C++ std::map< treeloc_t,citem_cmt_t > class. + | + | Methods defined here: + | + | __begin = user_cmts_begin(...) + | user_cmts_begin(map) -> user_cmts_iterator_t + | + | __clear = user_cmts_clear(...) + | user_cmts_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = user_cmts_end(...) + | user_cmts_end(map) -> user_cmts_iterator_t + | + | __erase = user_cmts_erase(...) + | user_cmts_erase(map, p) + | + | __find = user_cmts_find(...) + | user_cmts_find(map, key) -> user_cmts_iterator_t + | + | __first = user_cmts_first(...) + | user_cmts_first(p) -> treeloc_t + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_cmts_t + | + | __insert = user_cmts_insert(...) + | user_cmts_insert(map, key, val) -> user_cmts_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = user_cmts_next(...) + | user_cmts_next(p) -> user_cmts_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = user_cmts_second(...) + | user_cmts_second(p) -> citem_cmt_t + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = user_cmts_size(...) + | user_cmts_size(map) -> size_t + | + | __swig_destroy__ = delete_user_cmts_t(...) + | delete_user_cmts_t(self) + | + | at(self, *args) -> 'citem_cmt_t &' + | at(self, _Keyval) -> citem_cmt_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = + | Proxy of C++ treeloc_t class. + | + | valuetype = + | Proxy of C++ citem_cmt_t class. + +Help on function user_iflags_begin in module ida_hexrays: + +user_iflags_begin(*args) -> 'user_iflags_iterator_t' + user_iflags_begin(map) -> user_iflags_iterator_t + + + Get iterator pointing to the beginning of user_iflags_t. + + + @param map (C++: const user_iflags_t *) + +Help on function user_iflags_clear in module ida_hexrays: + +user_iflags_clear(*args) -> 'void' + user_iflags_clear(map) + + + Clear user_iflags_t. + + + @param map (C++: user_iflags_t *) + +Help on function user_iflags_end in module ida_hexrays: + +user_iflags_end(*args) -> 'user_iflags_iterator_t' + user_iflags_end(map) -> user_iflags_iterator_t + + + Get iterator pointing to the end of user_iflags_t. + + + @param map (C++: const user_iflags_t *) + +Help on function user_iflags_erase in module ida_hexrays: + +user_iflags_erase(*args) -> 'void' + user_iflags_erase(map, p) + + + Erase current element from user_iflags_t. + + + @param map (C++: user_iflags_t *) + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_find in module ida_hexrays: + +user_iflags_find(*args) -> 'user_iflags_iterator_t' + user_iflags_find(map, key) -> user_iflags_iterator_t + + + Find the specified key in user_iflags_t. + + + @param map (C++: const user_iflags_t *) + @param key (C++: const citem_locator_t &) + +Help on function user_iflags_first in module ida_hexrays: + +user_iflags_first(*args) -> 'citem_locator_t const &' + user_iflags_first(p) -> citem_locator_t + + + Get reference to the current map key. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_free in module ida_hexrays: + +user_iflags_free(*args) -> 'void' + user_iflags_free(map) + + + Delete user_iflags_t instance. + + + @param map (C++: user_iflags_t *) + +Help on function user_iflags_insert in module ida_hexrays: + +user_iflags_insert(*args) -> 'user_iflags_iterator_t' + user_iflags_insert(map, key, val) -> user_iflags_iterator_t + + + Insert new ( 'citem_locator_t' , int32) pair into user_iflags_t. + + + @param map (C++: user_iflags_t *) + @param key (C++: const citem_locator_t &) + @param val (C++: const int32 &) + +Help on class user_iflags_iterator_t in module ida_hexrays: + +class user_iflags_iterator_t(builtins.object) + | Proxy of C++ user_iflags_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_iflags_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_iflags_iterator_t(...) + | delete_user_iflags_iterator_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 + | + | x + | user_iflags_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_iflags_new in module ida_hexrays: + +user_iflags_new(*args) -> 'user_iflags_t *' + user_iflags_new() -> user_iflags_t + + + Create a new user_iflags_t instance. + +Help on function user_iflags_next in module ida_hexrays: + +user_iflags_next(*args) -> 'user_iflags_iterator_t' + user_iflags_next(p) -> user_iflags_iterator_t + + + Move to the next element. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_prev in module ida_hexrays: + +user_iflags_prev(*args) -> 'user_iflags_iterator_t' + user_iflags_prev(p) -> user_iflags_iterator_t + + + Move to the previous element. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_second in module ida_hexrays: + +user_iflags_second(*args) -> 'int32 const &' + user_iflags_second(p) -> int32 const & + + + Get reference to the current map value. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_size in module ida_hexrays: + +user_iflags_size(*args) -> 'size_t' + user_iflags_size(map) -> size_t + + + Get size of user_iflags_t. + + + @param map (C++: user_iflags_t *) + +Help on class user_iflags_t in module ida_hexrays: + +class user_iflags_t(builtins.object) + | Proxy of C++ std::map< citem_locator_t,int32 > class. + | + | Methods defined here: + | + | __begin = user_iflags_begin(...) + | user_iflags_begin(map) -> user_iflags_iterator_t + | + | __clear = user_iflags_clear(...) + | user_iflags_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = user_iflags_end(...) + | user_iflags_end(map) -> user_iflags_iterator_t + | + | __erase = user_iflags_erase(...) + | user_iflags_erase(map, p) + | + | __find = user_iflags_find(...) + | user_iflags_find(map, key) -> user_iflags_iterator_t + | + | __first = user_iflags_first(...) + | user_iflags_first(p) -> citem_locator_t + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_iflags_t + | + | __insert = user_iflags_insert(...) + | user_iflags_insert(map, key, val) -> user_iflags_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = user_iflags_next(...) + | user_iflags_next(p) -> user_iflags_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = user_iflags_second(...) + | user_iflags_second(p) -> int32 const & + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = user_iflags_size(...) + | user_iflags_size(map) -> size_t + | + | __swig_destroy__ = delete_user_iflags_t(...) + | delete_user_iflags_t(self) + | + | at(self, *args) -> 'int &' + | at(self, _Keyval) -> int & + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = + | Proxy of C++ citem_locator_t class. + | + | valuetype = + | int(x=0) -> integer + | int(x, base=10) -> integer + | + | Convert a number or string to an integer, or return 0 if no arguments + | are given. If x is a number, return x.__int__(). For floating point + | numbers, this truncates towards zero. + | + | If x is not a number or if base is given, then x must be a string, + | bytes, or bytearray instance representing an integer literal in the + | given base. The literal can be preceded by '+' or '-' and be surrounded + | by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. + | Base 0 means to interpret the base from the string as an integer literal. + | >>> int('0b100', base=0) + | 4 + +Help on function user_labels_begin in module ida_hexrays: + +user_labels_begin(*args) -> 'user_labels_iterator_t' + user_labels_begin(map) -> user_labels_iterator_t + + + Get iterator pointing to the beginning of user_labels_t. + + + @param map (C++: const user_labels_t *) + +Help on function user_labels_clear in module ida_hexrays: + +user_labels_clear(*args) -> 'void' + user_labels_clear(map) + + + Clear user_labels_t. + + + @param map (C++: user_labels_t *) + +Help on function user_labels_end in module ida_hexrays: + +user_labels_end(*args) -> 'user_labels_iterator_t' + user_labels_end(map) -> user_labels_iterator_t + + + Get iterator pointing to the end of user_labels_t. + + + @param map (C++: const user_labels_t *) + +Help on function user_labels_erase in module ida_hexrays: + +user_labels_erase(*args) -> 'void' + user_labels_erase(map, p) + + + Erase current element from user_labels_t. + + + @param map (C++: user_labels_t *) + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_find in module ida_hexrays: + +user_labels_find(*args) -> 'user_labels_iterator_t' + user_labels_find(map, key) -> user_labels_iterator_t + + + Find the specified key in user_labels_t. + + + @param map (C++: const user_labels_t *) + @param key (C++: const int &) + +Help on function user_labels_first in module ida_hexrays: + +user_labels_first(*args) -> 'int const &' + user_labels_first(p) -> int const & + + + Get reference to the current map key. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_free in module ida_hexrays: + +user_labels_free(*args) -> 'void' + user_labels_free(map) + + + Delete user_labels_t instance. + + + @param map (C++: user_labels_t *) + +Help on function user_labels_insert in module ida_hexrays: + +user_labels_insert(*args) -> 'user_labels_iterator_t' + user_labels_insert(map, key, val) -> user_labels_iterator_t + + + Insert new (int, qstring) pair into user_labels_t. + + + @param map (C++: user_labels_t *) + @param key (C++: const int &) + @param val (C++: const qstring &) + +Help on class user_labels_iterator_t in module ida_hexrays: + +class user_labels_iterator_t(builtins.object) + | Proxy of C++ user_labels_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_labels_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_labels_iterator_t(...) + | delete_user_labels_iterator_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 + | + | x + | user_labels_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_labels_new in module ida_hexrays: + +user_labels_new(*args) -> 'user_labels_t *' + user_labels_new() -> user_labels_t + + + Create a new user_labels_t instance. + +Help on function user_labels_next in module ida_hexrays: + +user_labels_next(*args) -> 'user_labels_iterator_t' + user_labels_next(p) -> user_labels_iterator_t + + + Move to the next element. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_prev in module ida_hexrays: + +user_labels_prev(*args) -> 'user_labels_iterator_t' + user_labels_prev(p) -> user_labels_iterator_t + + + Move to the previous element. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_second in module ida_hexrays: + +user_labels_second(*args) -> 'qstring &' + user_labels_second(p) -> qstring & + + + Get reference to the current map value. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_size in module ida_hexrays: + +user_labels_size(*args) -> 'size_t' + user_labels_size(map) -> size_t + + + Get size of user_labels_t. + + + @param map (C++: user_labels_t *) + +Help on class user_labels_t in module ida_hexrays: + +class user_labels_t(builtins.object) + | Proxy of C++ std::map< int,qstring > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> user_labels_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_labels_t(...) + | delete_user_labels_t(self) + | + | at(self, *args) -> '_qstring< char > &' + | at(self, _Keyval) -> _qstring< char > & + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + +Help on class user_lvar_modifier_t in module ida_hexrays: + +class user_lvar_modifier_t(builtins.object) + | Proxy of C++ user_lvar_modifier_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> user_lvar_modifier_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_lvar_modifier_t(...) + | delete_user_lvar_modifier_t(self) + | + | modify_lvars(self, *args) -> 'bool' + | modify_lvars(self, lvinf) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function user_numforms_begin in module ida_hexrays: + +user_numforms_begin(*args) -> 'user_numforms_iterator_t' + user_numforms_begin(map) -> user_numforms_iterator_t + + + Get iterator pointing to the beginning of user_numforms_t. + + + @param map (C++: const user_numforms_t *) + +Help on function user_numforms_clear in module ida_hexrays: + +user_numforms_clear(*args) -> 'void' + user_numforms_clear(map) + + + Clear user_numforms_t. + + + @param map (C++: user_numforms_t *) + +Help on function user_numforms_end in module ida_hexrays: + +user_numforms_end(*args) -> 'user_numforms_iterator_t' + user_numforms_end(map) -> user_numforms_iterator_t + + + Get iterator pointing to the end of user_numforms_t. + + + @param map (C++: const user_numforms_t *) + +Help on function user_numforms_erase in module ida_hexrays: + +user_numforms_erase(*args) -> 'void' + user_numforms_erase(map, p) + + + Erase current element from user_numforms_t. + + + @param map (C++: user_numforms_t *) + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_find in module ida_hexrays: + +user_numforms_find(*args) -> 'user_numforms_iterator_t' + user_numforms_find(map, key) -> user_numforms_iterator_t + + + Find the specified key in user_numforms_t. + + + @param map (C++: const user_numforms_t *) + @param key (C++: const operand_locator_t &) + +Help on function user_numforms_first in module ida_hexrays: + +user_numforms_first(*args) -> 'operand_locator_t const &' + user_numforms_first(p) -> operand_locator_t + + + Get reference to the current map key. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_free in module ida_hexrays: + +user_numforms_free(*args) -> 'void' + user_numforms_free(map) + + + Delete user_numforms_t instance. + + + @param map (C++: user_numforms_t *) + +Help on function user_numforms_insert in module ida_hexrays: + +user_numforms_insert(*args) -> 'user_numforms_iterator_t' + user_numforms_insert(map, key, val) -> user_numforms_iterator_t + + + Insert new ( 'operand_locator_t' , 'number_format_t' ) pair into + user_numforms_t. + + + @param map (C++: user_numforms_t *) + @param key (C++: const operand_locator_t &) + @param val (C++: const number_format_t &) + +Help on class user_numforms_iterator_t in module ida_hexrays: + +class user_numforms_iterator_t(builtins.object) + | Proxy of C++ user_numforms_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_numforms_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_numforms_iterator_t(...) + | delete_user_numforms_iterator_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 + | + | x + | user_numforms_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_numforms_new in module ida_hexrays: + +user_numforms_new(*args) -> 'user_numforms_t *' + user_numforms_new() -> user_numforms_t + + + Create a new user_numforms_t instance. + +Help on function user_numforms_next in module ida_hexrays: + +user_numforms_next(*args) -> 'user_numforms_iterator_t' + user_numforms_next(p) -> user_numforms_iterator_t + + + Move to the next element. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_prev in module ida_hexrays: + +user_numforms_prev(*args) -> 'user_numforms_iterator_t' + user_numforms_prev(p) -> user_numforms_iterator_t + + + Move to the previous element. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_second in module ida_hexrays: + +user_numforms_second(*args) -> 'number_format_t &' + user_numforms_second(p) -> number_format_t + + + Get reference to the current map value. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_size in module ida_hexrays: + +user_numforms_size(*args) -> 'size_t' + user_numforms_size(map) -> size_t + + + Get size of user_numforms_t. + + + @param map (C++: user_numforms_t *) + +Help on class user_numforms_t in module ida_hexrays: + +class user_numforms_t(builtins.object) + | Proxy of C++ std::map< operand_locator_t,number_format_t > class. + | + | Methods defined here: + | + | __begin = user_numforms_begin(...) + | user_numforms_begin(map) -> user_numforms_iterator_t + | + | __clear = user_numforms_clear(...) + | user_numforms_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = user_numforms_end(...) + | user_numforms_end(map) -> user_numforms_iterator_t + | + | __erase = user_numforms_erase(...) + | user_numforms_erase(map, p) + | + | __find = user_numforms_find(...) + | user_numforms_find(map, key) -> user_numforms_iterator_t + | + | __first = user_numforms_first(...) + | user_numforms_first(p) -> operand_locator_t + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_numforms_t + | + | __insert = user_numforms_insert(...) + | user_numforms_insert(map, key, val) -> user_numforms_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = user_numforms_next(...) + | user_numforms_next(p) -> user_numforms_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = user_numforms_second(...) + | user_numforms_second(p) -> number_format_t + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = user_numforms_size(...) + | user_numforms_size(map) -> size_t + | + | __swig_destroy__ = delete_user_numforms_t(...) + | delete_user_numforms_t(self) + | + | at(self, *args) -> 'number_format_t &' + | at(self, _Keyval) -> number_format_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = + | Proxy of C++ operand_locator_t class. + | + | valuetype = + | Proxy of C++ number_format_t class. + +Help on function user_unions_begin in module ida_hexrays: + +user_unions_begin(*args) -> 'user_unions_iterator_t' + user_unions_begin(map) -> user_unions_iterator_t + + + Get iterator pointing to the beginning of user_unions_t. + + + @param map (C++: const user_unions_t *) + +Help on function user_unions_clear in module ida_hexrays: + +user_unions_clear(*args) -> 'void' + user_unions_clear(map) + + + Clear user_unions_t. + + + @param map (C++: user_unions_t *) + +Help on function user_unions_end in module ida_hexrays: + +user_unions_end(*args) -> 'user_unions_iterator_t' + user_unions_end(map) -> user_unions_iterator_t + + + Get iterator pointing to the end of user_unions_t. + + + @param map (C++: const user_unions_t *) + +Help on function user_unions_erase in module ida_hexrays: + +user_unions_erase(*args) -> 'void' + user_unions_erase(map, p) + + + Erase current element from user_unions_t. + + + @param map (C++: user_unions_t *) + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_find in module ida_hexrays: + +user_unions_find(*args) -> 'user_unions_iterator_t' + user_unions_find(map, key) -> user_unions_iterator_t + + + Find the specified key in user_unions_t. + + + @param map (C++: const user_unions_t *) + @param key (C++: const ea_t &) + +Help on function user_unions_first in module ida_hexrays: + +user_unions_first(*args) -> 'ea_t const &' + user_unions_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_free in module ida_hexrays: + +user_unions_free(*args) -> 'void' + user_unions_free(map) + + + Delete user_unions_t instance. + + + @param map (C++: user_unions_t *) + +Help on function user_unions_insert in module ida_hexrays: + +user_unions_insert(*args) -> 'user_unions_iterator_t' + user_unions_insert(map, key, val) -> user_unions_iterator_t + + + Insert new (ea_t, intvec_t) pair into user_unions_t. + + + @param map (C++: user_unions_t *) + @param key (C++: const ea_t &) + @param val (C++: const intvec_t &) + +Help on class user_unions_iterator_t in module ida_hexrays: + +class user_unions_iterator_t(builtins.object) + | Proxy of C++ user_unions_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_unions_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_unions_iterator_t(...) + | delete_user_unions_iterator_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 + | + | x + | user_unions_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_unions_new in module ida_hexrays: + +user_unions_new(*args) -> 'user_unions_t *' + user_unions_new() -> user_unions_t + + + Create a new user_unions_t instance. + +Help on function user_unions_next in module ida_hexrays: + +user_unions_next(*args) -> 'user_unions_iterator_t' + user_unions_next(p) -> user_unions_iterator_t + + + Move to the next element. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_prev in module ida_hexrays: + +user_unions_prev(*args) -> 'user_unions_iterator_t' + user_unions_prev(p) -> user_unions_iterator_t + + + Move to the previous element. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_second in module ida_hexrays: + +user_unions_second(*args) -> 'intvec_t &' + user_unions_second(p) -> intvec_t + + + Get reference to the current map value. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_size in module ida_hexrays: + +user_unions_size(*args) -> 'size_t' + user_unions_size(map) -> size_t + + + Get size of user_unions_t. + + + @param map (C++: user_unions_t *) + +Help on class user_unions_t in module ida_hexrays: + +class user_unions_t(builtins.object) + | Proxy of C++ std::map< ea_t,intvec_t > class. + | + | Methods defined here: + | + | __begin = user_unions_begin(...) + | user_unions_begin(map) -> user_unions_iterator_t + | + | __clear = user_unions_clear(...) + | user_unions_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = user_unions_end(...) + | user_unions_end(map) -> user_unions_iterator_t + | + | __erase = user_unions_erase(...) + | user_unions_erase(map, p) + | + | __find = user_unions_find(...) + | user_unions_find(map, key) -> user_unions_iterator_t + | + | __first = user_unions_first(...) + | user_unions_first(p) -> ea_t const & + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_unions_t + | + | __insert = user_unions_insert(...) + | user_unions_insert(map, key, val) -> user_unions_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = user_unions_next(...) + | user_unions_next(p) -> user_unions_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = user_unions_second(...) + | user_unions_second(p) -> intvec_t + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = user_unions_size(...) + | user_unions_size(map) -> size_t + | + | __swig_destroy__ = delete_user_unions_t(...) + | delete_user_unions_t(self) + | + | at(self, *args) -> 'qvector< int > &' + | at(self, _Keyval) -> intvec_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = (,) + | + | valuetype = + | Proxy of C++ qvector< int > class. + +Help on class uval_ivl_ivlset_t in module ida_hexrays: + +class uval_ivl_ivlset_t(builtins.object) + | Proxy of C++ ivlset_tpl< ivl_t,uval_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, v) -> bool + | + | __init__(self, *args) + | __init__(self) -> uval_ivl_ivlset_t + | __init__(self, ivl) -> uval_ivl_ivlset_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, v) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_uval_ivl_ivlset_t(...) + | delete_uval_ivl_ivlset_t(self) + | + | all_values(self, *args) -> 'bool' + | all_values(self) -> bool + | + | begin(self, *args) -> 'ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator'↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator'↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | getivl(self, *args) -> 'ivl_t const &' + | getivl(self, idx) -> ivl_t + | + | lastivl(self, *args) -> 'ivl_t const &' + | lastivl(self) -> ivl_t + | + | nivls(self, *args) -> 'size_t' + | nivls(self) -> size_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | set_all_values(self, *args) -> 'void' + | set_all_values(self) + | + | single_value(self, *args) -> 'bool' + | single_value(self, v) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class uval_ivl_t in module ida_hexrays: + +class uval_ivl_t(builtins.object) + | Proxy of C++ ivl_tpl< uval_t > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _off, _size) -> uval_ivl_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_uval_ivl_t(...) + | delete_uval_ivl_t(self) + | + | end(self, *args) -> 'unsigned-ea-like-numeric-type'↗ + | end(self) -> unsigned-ea-like-numeric-type↗ + | + | last(self, *args) -> 'unsigned-ea-like-numeric-type'↗ + | last(self) -> unsigned-ea-like-numeric-type↗ + | + | valid(self, *args) -> 'bool' + | valid(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type↗ + | + | size + | uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type↗ + | + | thisown + | The membership flag + +Help on class valrng_t in module ida_hexrays: + +class valrng_t(builtins.object) + | Proxy of C++ valrng_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, size_=MAX_VLR_SIZE) -> valrng_t + | __init__(self, r) -> valrng_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_valrng_t(...) + | delete_valrng_t(self) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | all_values(self, *args) -> 'bool' + | all_values(self) -> bool + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | cvt_to_cmp(self, *args) -> 'bool' + | cvt_to_cmp(self, strict) -> bool + | + | cvt_to_single_value(self, *args) -> 'bool' + | cvt_to_single_value(self) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | get_size(self, *args) -> 'int' + | get_size(self) -> int + | + | has(self, *args) -> 'bool' + | has(self, v) -> bool + | + | intersect_with(self, *args) -> 'bool' + | intersect_with(self, r) -> bool + | + | inverse(self, *args) -> 'void' + | inverse(self) + | + | is_unknown(self, *args) -> 'bool' + | is_unknown(self) -> bool + | + | max_svalue(self, *args) -> 'uvlr_t' + | max_svalue(self, size_) -> uvlr_t + | max_svalue(self) -> uvlr_t + | + | max_value(self, *args) -> 'uvlr_t' + | max_value(self, size_) -> uvlr_t + | max_value(self) -> uvlr_t + | + | min_svalue(self, *args) -> 'uvlr_t' + | min_svalue(self, size_) -> uvlr_t + | min_svalue(self) -> uvlr_t + | + | reduce_size(self, *args) -> 'bool' + | reduce_size(self, new_size) -> bool + | + | set_all(self, *args) -> 'void' + | set_all(self) + | + | set_cmp(self, *args) -> 'void' + | set_cmp(self, cmp, _value) + | + | set_eq(self, *args) -> 'void' + | set_eq(self, v) + | + | set_none(self, *args) -> 'void' + | set_none(self) + | + | set_unk(self, *args) -> 'void' + | set_unk(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | unite_with(self, *args) -> 'bool' + | unite_with(self, r) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class var_ref_t in module ida_hexrays: + +class var_ref_t(builtins.object) + | Proxy of C++ var_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> var_ref_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_var_ref_t(...) + | delete_var_ref_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | idx + | var_ref_t_idx_get(self) -> int + | + | mba + | var_ref_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class vc_printer_t in module ida_hexrays: + +class vc_printer_t(vd_printer_t) + | Proxy of C++ vc_printer_t class. + | + | Method resolution order: + | vc_printer_t + | vd_printer_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, f) -> vc_printer_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vc_printer_t(...) + | delete_vc_printer_t(self) + | + | oneliner(self, *args) -> 'bool' + | oneliner(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | func + | vc_printer_t_func_get(self) -> cfunc_t + | + | lastchar + | vc_printer_t_lastchar_get(self) -> char + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from vd_printer_t: + | + | _print(self, *args) -> 'int' + | _print(self, indent, format) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_printer_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + +Help on class vd_failure_t in module ida_hexrays: + +class vd_failure_t(builtins.object) + | Proxy of C++ vd_failure_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> vd_failure_t + | __init__(self, code, ea, buf=None) -> vd_failure_t + | __init__(self, code, ea, buf) -> vd_failure_t + | __init__(self, _hf) -> vd_failure_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vd_failure_t(...) + | delete_vd_failure_t(self) + | + | desc(self, *args) -> 'qstring' + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hf + | vd_failure_t_hf_get(self) -> hexrays_failure_t + | + | thisown + | The membership flag + +Help on class vd_interr_t in module ida_hexrays: + +class vd_interr_t(vd_failure_t) + | Proxy of C++ vd_interr_t class. + | + | Method resolution order: + | vd_interr_t + | vd_failure_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, ea, buf) -> vd_interr_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vd_interr_t(...) + | delete_vd_interr_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from vd_failure_t: + | + | desc(self, *args) -> 'qstring' + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_failure_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hf + | vd_failure_t_hf_get(self) -> hexrays_failure_t + +Help on class vd_printer_t in module ida_hexrays: + +class vd_printer_t(builtins.object) + | Proxy of C++ vd_printer_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> vd_printer_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vd_printer_t(...) + | delete_vd_printer_t(self) + | + | _print(self, *args) -> 'int' + | _print(self, indent, format) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | thisown + | The membership flag + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + +Help on class vdloc_t in module ida_hexrays: + +class vdloc_t(ida_typeinf.argloc_t) + | Proxy of C++ vdloc_t class. + | + | Method resolution order: + | vdloc_t + | ida_typeinf.argloc_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> vdloc_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vdloc_t(...) + | delete_vdloc_t(self) + | + | _set_reg1(self, *args) -> 'void' + | _set_reg1(self, r1) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | is_aliasable(self, *args) -> 'bool' + | is_aliasable(self, mb, size) -> bool + | + | reg1(self, *args) -> 'int' + | reg1(self) -> int + | + | set_reg1(self, *args) -> 'void' + | set_reg1(self, r1) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_typeinf.argloc_t: + | + | _consume_rrel(self, *args) -> 'bool' + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) -> 'bool' + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) -> 'void' + | _set_badloc(self) + | + | _set_biggest(self, *args) -> 'void' + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) -> 'void' + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) -> 'void' + | _set_ea(self, _ea) + | + | _set_reg2(self, *args) -> 'void' + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) -> 'void' + | _set_stkoff(self, off) + | + | advance(self, *args) -> 'bool' + | advance(self, delta) -> bool + | + | atype(self, *args) -> 'argloc_type_t' + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) -> 'sval_t' + | calc_offset(self) -> sval_t + | + | consume_rrel(self, *args) -> 'void' + | consume_rrel(self, p) + | + | consume_scattered(self, *args) -> 'void' + | consume_scattered(self, p) + | + | get_biggest(self, *args) -> 'argloc_t::biggest_t' + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) -> 'void *' + | get_custom(self) -> void * + | + | get_ea(self, *args) -> 'ea_t' + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) -> 'uint32' + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) -> 'rrel_t const &' + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) -> 'bool' + | has_reg(self) -> bool + | + | has_stkoff(self, *args) -> 'bool' + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) -> 'bool' + | is_badloc(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_ea(self, *args) -> 'bool' + | is_ea(self) -> bool + | + | is_fragmented(self, *args) -> 'bool' + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) -> 'bool' + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_rrel(self, *args) -> 'bool' + | is_rrel(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) -> 'void' + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) -> 'void' + | justify_stkoff_right(self, size, _slotsize) + | + | reg2(self, *args) -> 'int' + | reg2(self) -> int + | + | regoff(self, *args) -> 'int' + | regoff(self) -> int + | + | scattered(self, *args) -> 'scattered_aloc_t const &' + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) -> 'void' + | set_badloc(self) + | + | set_ea(self, *args) -> 'void' + | set_ea(self, _ea) + | + | set_reg2(self, *args) -> 'void' + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, off) + | + | stkoff(self, *args) -> 'sval_t' + | stkoff(self) -> sval_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_typeinf.argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class vdui_t in module ida_hexrays: + +class vdui_t(builtins.object) + | Proxy of C++ vdui_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vdui_t(...) + | delete_vdui_t(self) + | + | calc_cmt_type(self, *args) -> 'cmt_type_t' + | calc_cmt_type(self, lnnum, cmttype) -> cmt_type_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | collapse_item(self, *args) -> 'bool' + | collapse_item(self, hide) -> bool + | + | collapse_lvars(self, *args) -> 'bool' + | collapse_lvars(self, hide) -> bool + | + | ctree_to_disasm(self, *args) -> 'bool' + | ctree_to_disasm(self) -> bool + | + | del_orphan_cmts(self, *args) -> 'bool' + | del_orphan_cmts(self) -> bool + | + | edit_cmt(self, *args) -> 'bool' + | edit_cmt(self, loc) -> bool + | + | edit_func_cmt(self, *args) -> 'bool' + | edit_func_cmt(self) -> bool + | + | get_current_item(self, *args) -> 'bool' + | get_current_item(self, idv) -> bool + | + | get_current_label(self, *args) -> 'int' + | get_current_label(self) -> int + | + | get_number(self, *args) -> 'cnumber_t *' + | get_number(self) -> cnumber_t + | + | in_ctree(self, *args) -> 'bool' + | in_ctree(self) -> bool + | + | invert_bits(self, *args) -> 'bool' + | invert_bits(self) -> bool + | + | invert_sign(self, *args) -> 'bool' + | invert_sign(self) -> bool + | + | jump_enter(self, *args) -> 'bool' + | jump_enter(self, idv, omflags) -> bool + | + | locked(self, *args) -> 'bool' + | locked(self) -> bool + | + | map_lvar(self, *args) -> 'bool' + | map_lvar(self, frm, to) -> bool + | + | refresh_cpos(self, *args) -> 'bool' + | refresh_cpos(self, idv) -> bool + | + | refresh_ctext(self, *args) -> 'void' + | refresh_ctext(self, activate=True) + | + | refresh_view(self, *args) -> 'void' + | refresh_view(self, redo_mba) + | + | rename_global(self, *args) -> 'bool' + | rename_global(self, ea) -> bool + | + | rename_label(self, *args) -> 'bool' + | rename_label(self, label) -> bool + | + | rename_lvar(self, *args) -> 'bool' + | rename_lvar(self, v, name, is_user_name) -> bool + | + | rename_strmem(self, *args) -> 'bool' + | rename_strmem(self, sptr, mptr) -> bool + | + | set_global_type(self, *args) -> 'bool' + | set_global_type(self, ea) -> bool + | + | set_locked(self, *args) -> 'bool' + | set_locked(self, v) -> bool + | + | set_lvar_cmt(self, *args) -> 'bool' + | set_lvar_cmt(self, v, cmt) -> bool + | + | set_lvar_type(self, *args) -> 'bool' + | set_lvar_type(self, v, type) -> bool + | + | set_noptr_lvar(self, *args) -> 'bool' + | set_noptr_lvar(self, v) -> bool + | + | set_num_enum(self, *args) -> 'bool' + | set_num_enum(self) -> bool + | + | set_num_radix(self, *args) -> 'bool' + | set_num_radix(self, base) -> bool + | + | set_num_stroff(self, *args) -> 'bool' + | set_num_stroff(self) -> bool + | + | set_strmem_type(self, *args) -> 'bool' + | set_strmem_type(self, sptr, mptr) -> bool + | + | set_valid(self, *args) -> 'void' + | set_valid(self, v) + | + | set_visible(self, *args) -> 'void' + | set_visible(self, v) + | + | split_item(self, *args) -> 'bool' + | split_item(self, split) -> bool + | + | switch_to(self, *args) -> 'void' + | switch_to(self, f, activate) + | + | ui_edit_lvar_cmt(self, *args) -> 'bool' + | ui_edit_lvar_cmt(self, v) -> bool + | + | ui_map_lvar(self, *args) -> 'bool' + | ui_map_lvar(self, v) -> bool + | + | ui_rename_lvar(self, *args) -> 'bool' + | ui_rename_lvar(self, v) -> bool + | + | ui_set_call_type(self, *args) -> 'bool' + | ui_set_call_type(self, e) -> bool + | + | ui_set_lvar_type(self, *args) -> 'bool' + | ui_set_lvar_type(self, v) -> bool + | + | ui_unmap_lvar(self, *args) -> 'bool' + | ui_unmap_lvar(self, v) -> bool + | + | valid(self, *args) -> 'bool' + | valid(self) -> bool + | + | visible(self, *args) -> 'bool' + | visible(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cfunc + | vdui_t_cfunc_get(self) -> cfuncptr_t + | + | cpos + | vdui_t_cpos_get(self) -> ctext_position_t + | + | ct + | vdui_t_ct_get(self) -> TWidget * + | + | flags + | vdui_t_flags_get(self) -> int + | + | head + | vdui_t_head_get(self) -> ctree_item_t + | + | item + | vdui_t_item_get(self) -> ctree_item_t + | + | last_code + | vdui_t_last_code_get(self) -> merror_t + | + | mba + | vdui_t_mba_get(self) -> mbl_array_t + | + | tail + | vdui_t_tail_get(self) -> ctree_item_t + | + | thisown + | The membership flag + | + | toplevel + | vdui_t_toplevel_get(self) -> TWidget * + | + | view_idx + | vdui_t_view_idx_get(self) -> int + +Help on class vivl_t in module ida_hexrays: + +class vivl_t(voff_t) + | Proxy of C++ vivl_t class. + | + | Method resolution order: + | vivl_t + | voff_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | __eq__(self, mop) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _type=mop_z, _off=-1, _size=0) -> vivl_t + | __init__(self, ch) -> vivl_t + | __init__(self, op) -> vivl_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vivl_t(...) + | delete_vivl_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, voff2) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | extend_to_cover(self, *args) -> 'bool' + | extend_to_cover(self, r) -> bool + | + | includes(self, *args) -> 'bool' + | includes(self, r) -> bool + | + | intersect(self, *args) -> 'uval_t' + | intersect(self, r) -> uval_t + | + | overlap(self, *args) -> 'bool' + | overlap(self, r) -> bool + | + | set(self, *args) -> 'void' + | set(self, _type, _off, _size=0) + | set(self, voff, _size) + | + | set_reg(self, *args) -> 'void' + | set_reg(self, mreg, sz=0) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, stkoff, sz=0) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | size + | vivl_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from voff_t: + | + | add(self, *args) -> 'voff_t' + | add(self, width) -> voff_t + | + | defined(self, *args) -> 'bool' + | defined(self) -> bool + | + | diff(self, *args) -> 'sval_t' + | diff(self, r) -> sval_t + | + | get_reg(self, *args) -> 'mreg_t' + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) -> 'sval_t' + | get_stkoff(self) -> sval_t + | + | inc(self, *args) -> 'void' + | inc(self, delta) + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | undef(self, *args) -> 'void' + | undef(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from voff_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | voff_t_off_get(self) -> sval_t + | + | type + | voff_t_type_get(self) -> mopt_t + +Help on class voff_t in module ida_hexrays: + +class voff_t(builtins.object) + | Proxy of C++ voff_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> voff_t + | __init__(self, _type, _off) -> voff_t + | __init__(self, op) -> voff_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_voff_t(...) + | delete_voff_t(self) + | + | add(self, *args) -> 'voff_t' + | add(self, width) -> voff_t + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | defined(self, *args) -> 'bool' + | defined(self) -> bool + | + | diff(self, *args) -> 'sval_t' + | diff(self, r) -> sval_t + | + | get_reg(self, *args) -> 'mreg_t' + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) -> 'sval_t' + | get_stkoff(self) -> sval_t + | + | inc(self, *args) -> 'void' + | inc(self, delta) + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | set(self, *args) -> 'void' + | set(self, _type, _off) + | + | set_reg(self, *args) -> 'void' + | set_reg(self, mreg) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, stkoff) + | + | undef(self, *args) -> 'void' + | undef(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | voff_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | type + | voff_t_type_get(self) -> mopt_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +=== ida_hexrays EPYDOC INJECTIONS === +ida_hexrays.ACFL_BLKOPT +""" +perform interblock transformations +""" + +ida_hexrays.ACFL_GLBDEL +""" +perform dead code eliminition +""" + +ida_hexrays.ACFL_GLBPROP +""" +perform global propagation +""" + +ida_hexrays.ACFL_GUESS +""" +may guess calling conventions +""" + +ida_hexrays.ACFL_LOCOPT +""" +perform local propagation (requires ACFL_BLKOPT) +""" + +ida_hexrays.ANCHOR_BLKCMT +""" +block comment (for ctree items) +""" + +ida_hexrays.ANCHOR_CITEM +""" +c-tree item +""" + +ida_hexrays.ANCHOR_ITP +""" +item type preciser +""" + +ida_hexrays.ANCHOR_LVAR +""" +declaration of local variable +""" + +ida_hexrays.CFL_FINAL +""" +call type is final, should not be changed +""" + +ida_hexrays.CFL_HELPER +""" +created from a decompiler helper function +""" + +ida_hexrays.CFS_BOUNDS +""" +'eamap' and 'boundaries' are ready +""" + +ida_hexrays.CFS_LVARS_HIDDEN +""" +local variable definitions are collapsed +""" + +ida_hexrays.CFS_TEXT +""" +'sv' is ready (and hdrlines) +""" + +ida_hexrays.CHF_FAKE +""" +fake chain created by widen_chains() +""" + +ida_hexrays.CHF_INITED +""" +is chain initialized? (valid only after lvar allocation) +""" + +ida_hexrays.CHF_OVER +""" +overlapped chain +""" + +ida_hexrays.CHF_PASSTHRU +""" +pass-thru chain, must use the input variable to the block +""" + +ida_hexrays.CHF_REPLACED +""" +chain operands have been replaced? +""" + +ida_hexrays.CHF_TERM +""" +terminating chain; the variable does not survive across the block +""" + +ida_hexrays.CIT_COLLAPSED +""" +display element in collapsed form +""" + +ida_hexrays.CPBLK_FAST +""" +do not update minbstkref and minbargref +""" + +ida_hexrays.CPBLK_MINREF +""" +update minbstkref and minbargref +""" + +ida_hexrays.CPBLK_OPTJMP +""" +if it becomes useless + +del the jump insn at the end of the block +""" + +ida_hexrays.CV_FAST +""" +do not maintain parent information +""" + +ida_hexrays.CV_INSNS +""" +visit only statements, prune all expressions do not use before the +final ctree maturity because expressions may contain statements at +intermediate stages (see cot_insn). Otherwise you risk missing +statements embedded into expressions. +""" + +ida_hexrays.CV_PARENTS +""" +maintain parent information +""" + +ida_hexrays.CV_POST +""" +call the leave...() functions +""" + +ida_hexrays.CV_PRUNE +""" +this bit is set by visit...() to prune the walk +""" + +ida_hexrays.CV_RESTART +""" +restart enumeration at the top expr (apply_to_exprs) +""" + +ida_hexrays.DECOMP_ALL_BLKS +""" +generate microcode for unreachable blocks +""" + +ida_hexrays.DECOMP_NO_CACHE +""" +do not use decompilation cache +""" + +ida_hexrays.DECOMP_NO_FRAME +""" +do not use function frame info (only snippet mode) +""" + +ida_hexrays.DECOMP_NO_WAIT +""" +do not display waitbox +""" + +ida_hexrays.DECOMP_WARNINGS +""" +display warnings in the output window +""" + +ida_hexrays.EQ_CMPDEST +""" +compare instruction destinations +""" + +ida_hexrays.EQ_IGNCODE +""" +ignore instruction opcodes +""" + +ida_hexrays.EQ_IGNSIZE +""" +ignore operand sizes +""" + +ida_hexrays.EQ_OPTINSN +""" +optimize mop_d operands +""" + +ida_hexrays.EXFL_ALL +""" +all currently defined bits +""" + +ida_hexrays.EXFL_ALONE +""" +standalone helper +""" + +ida_hexrays.EXFL_CPADONE +""" +pointer arithmetic correction done +""" + +ida_hexrays.EXFL_CSTR +""" +string literal +""" + +ida_hexrays.EXFL_FPOP +""" +floating point operation +""" + +ida_hexrays.EXFL_JUMPOUT +""" +jump out-of-function +""" + +ida_hexrays.EXFL_LVALUE +""" +expression is lvalue even if it doesn't look like it +""" + +ida_hexrays.EXFL_PARTIAL +""" +type of the expression is considered partial +""" + +ida_hexrays.EXFL_UNDEF +""" +expression uses undefined value +""" + +ida_hexrays.EXFL_VFTABLE +""" +is ptr to vftable (used for cot_memptr, cot_memref) +""" + +ida_hexrays.FCI_DEAD +""" +some return registers were determined dead +""" + +ida_hexrays.FCI_FINAL +""" +call type is final, should not be changed +""" + +ida_hexrays.FCI_HASCALL +""" +A function is an synthetic helper combined from several instructions +and at least one of them was a call to a real functions +""" + +ida_hexrays.FCI_HASFMT +""" +printf- or scanf-style format string + +A variadic function with recognized +""" + +ida_hexrays.FCI_NORET +""" +call does not return +""" + +ida_hexrays.FCI_NOSIDE +""" +call does not have side effects +""" + +ida_hexrays.FCI_PROP +""" +call has been propagated +""" + +ida_hexrays.FCI_PURE +""" +pure function +""" + +ida_hexrays.FCI_SPLOK +""" +spoiled/visible_memory lists have been optimized. for some functions +we can reduce them as soon as information about the arguments becomes +available. in order not to try optimize them again we use this bit. +""" + +ida_hexrays.FD_BACKWARD +""" +search direction +""" + +ida_hexrays.FD_DEF +""" +look for definition +""" + +ida_hexrays.FD_DIRTY +""" +by function calls and indirect memory access + +ignore possible implicit definitions +""" + +ida_hexrays.FD_FORWARD +""" +search direction +""" + +ida_hexrays.FD_USE +""" +look for use +""" + +ida_hexrays.GCA_ALLOC +""" +enumerate only allocated chains +""" + +ida_hexrays.GCA_EMPTY +""" +include empty chains +""" + +ida_hexrays.GCA_NALLOC +""" +enumerate only non-allocated chains +""" + +ida_hexrays.GCA_OFIRST +""" +consider only chains of the first block +""" + +ida_hexrays.GCA_OLAST +""" +consider only chains of the last block +""" + +ida_hexrays.GCA_SPEC +""" +include chains for special registers +""" + +ida_hexrays.GCO_DEF +""" +is destination operand? +""" + +ida_hexrays.GCO_REG +""" +is register? otherwise a stack variable +""" + +ida_hexrays.GCO_STK +""" +a stack variable +""" + +ida_hexrays.GCO_USE +""" +is source operand? +""" + +ida_hexrays.GLN_ALL +""" +get both +""" + +ida_hexrays.GLN_CURRENT +""" +get label of the current item +""" + +ida_hexrays.GLN_GOTO_TARGET +""" +get goto target +""" + +ida_hexrays.IPROP_ASSERT +""" +assertion: usually mov #val, op. assertions are used to help the +optimizer. assertions are ignored when generating ctree +""" + +ida_hexrays.IPROP_CLNPOP +""" +(e.g. "pop ecx" is often used for that) + +the purpose of the instruction is to clean stack +""" + +ida_hexrays.IPROP_COMBINED +""" +insn has been modified because of a partial reference +""" + +ida_hexrays.IPROP_DONT_COMB +""" +may not combine this instruction with others +""" + +ida_hexrays.IPROP_DONT_PROP +""" +may not propagate +""" + +ida_hexrays.IPROP_EXTSTX +""" +this is m_ext propagated into m_stx +""" + +ida_hexrays.IPROP_FARCALL +""" +call of a far function using push cs/call sequence +""" + +ida_hexrays.IPROP_FPINSN +""" +floating point insn +""" + +ida_hexrays.IPROP_IGNLOWSRC +""" +low part of the instruction source operand has been created +artificially (this bit is used only for 'and x, 80...') +""" + +ida_hexrays.IPROP_INV_JX +""" +inverted conditional jump +""" + +ida_hexrays.IPROP_MBARRIER +""" +(instructions accessing memory may not be reordered past it) + +this instruction acts as a memory barrier +""" + +ida_hexrays.IPROP_MULTI_MOV +""" +(example: STM on ARM may transfer multiple registers) + +the minsn was generated as part of insn that moves multiple +registersbits that can be set by plugins: +""" + +ida_hexrays.IPROP_OPTIONAL +""" +optional instruction +""" + +ida_hexrays.IPROP_PERSIST +""" +persistent insn; they are not destroyed +""" + +ida_hexrays.IPROP_SPLIT +""" +the instruction has been split: +""" + +ida_hexrays.IPROP_SPLIT1 +""" +into 1 byte +""" + +ida_hexrays.IPROP_SPLIT2 +""" +into 2 bytes +""" + +ida_hexrays.IPROP_SPLIT4 +""" +into 4 bytes +""" + +ida_hexrays.IPROP_SPLIT8 +""" +into 8 bytes +""" + +ida_hexrays.IPROP_TAILCALL +""" +tail call +""" + +ida_hexrays.IPROP_WAS_NORET +""" +was noret icall +""" + +ida_hexrays.IPROP_WILDMATCH +""" +match multiple insns +""" + +ida_hexrays.LOCOPT_ALL +""" +is not set, only dirty blocks will be optimized + +redo optimization for all blocks. if this bit +""" + +ida_hexrays.LOCOPT_REFINE +""" +refine return type, ok to fail +""" + +ida_hexrays.LOCOPT_REFINE2 +""" +refine return type, try harder +""" + +ida_hexrays.LVINF_FORCE +""" +force allocation of a new variable. forces the decompiler to create a +new variable at ll.defea +""" + +ida_hexrays.LVINF_KEEP +""" +preserve saved user settings regardless of vars for example, if a var +loses all its user-defined attributes or even gets destroyed, keep its +'lvar_saved_info_t' . this is used for ephemeral variables that get +destroyed by macro recognition. +""" + +ida_hexrays.LVINF_NOMAP +""" +forbid automatic mapping of the variable +""" + +ida_hexrays.LVINF_NOPTR +""" +variable type should not be a pointer +""" + +ida_hexrays.MBA_ASRPROP +""" +assertion have been propagated +""" + +ida_hexrays.MBA_ASRTOK +""" +assertions have been generated +""" + +ida_hexrays.MBA_CALLS +""" +callinfo has been built +""" + +ida_hexrays.MBA_CHVARS +""" +can verify chain varnums +""" + +ida_hexrays.MBA_CMBBLK +""" +request to combine blocks +""" + +ida_hexrays.MBA_CMNSTK +""" +stkvars+stkargs should be considered as one area +""" + +ida_hexrays.MBA_COLGDL +""" +display graph after each reduction +""" + +ida_hexrays.MBA_DELPAIRS +""" +pairs have been deleted once +""" + +ida_hexrays.MBA_GLBOPT +""" +microcode has been optimized globally +""" + +ida_hexrays.MBA_INSGDL +""" +display instruction in graphs +""" + +ida_hexrays.MBA_LOADED +""" +loaded gdl, no instructions (debugging) +""" + +ida_hexrays.MBA_LVARS0 +""" +lvar pre-allocation has been performed +""" + +ida_hexrays.MBA_LVARS1 +""" +lvar real allocation has been performed +""" + +ida_hexrays.MBA_NICE +""" +apply transformations to c code +""" + +ida_hexrays.MBA_NOFUNC +""" +function is not present, addresses might be wrong +""" + +ida_hexrays.MBA_NUMADDR +""" +display definition addresses for numbers +""" + +ida_hexrays.MBA_PASSREGS +""" +has 'mcallinfo_t::pass_regs' +""" + +ida_hexrays.MBA_PATTERN +""" +microcode pattern, callinfo is present +""" + +ida_hexrays.MBA_PRCDEFS +""" +use precise defeas for chain-allocated lvars +""" + +ida_hexrays.MBA_PREOPT +""" +preoptimization stage complete +""" + +ida_hexrays.MBA_REFINE +""" +may refine return value size +""" + +ida_hexrays.MBA_RETFP +""" +function returns floating point value +""" + +ida_hexrays.MBA_RETREF +""" +return type has been refined +""" + +ida_hexrays.MBA_SAVRST +""" +save-restore analysis has been performed +""" + +ida_hexrays.MBA_SHORT +""" +use short display +""" + +ida_hexrays.MBA_SPLINFO +""" +(final_type ? idb_spoiled : spoiled_regs) is valid +""" + +ida_hexrays.MBA_THUNK +""" +thunk function +""" + +ida_hexrays.MBA_VALNUM +""" +display value numbers +""" + +ida_hexrays.MBA_WINGR32 +""" +use wingraph32 +""" + +ida_hexrays.MBL_BACKPROP +""" +performed backprop_cc +""" + +ida_hexrays.MBL_CALL +""" +call information has been built +""" + +ida_hexrays.MBL_COMB +""" +needs "combine" pass +""" + +ida_hexrays.MBL_DEAD +""" +needs "eliminate deads" pass +""" + +ida_hexrays.MBL_DMT64 +""" +needs "demote 64bits" +""" + +ida_hexrays.MBL_DSLOT +""" +block for delay slot +""" + +ida_hexrays.MBL_FAKE +""" +fake block (after a tail call) +""" + +ida_hexrays.MBL_GOTO +""" +this block is a goto target +""" + +ida_hexrays.MBL_INCONST +""" +inconsistent lists: we are building them +""" + +ida_hexrays.MBL_LIST +""" +use/def lists are ready (not dirty) +""" + +ida_hexrays.MBL_NONFAKE +""" +regular block +""" + +ida_hexrays.MBL_NORET +""" +dead end block: doesn't return execution control +""" + +ida_hexrays.MBL_PRIV +""" +the specified are accepted (used in patterns) + +private block - no instructions except +""" + +ida_hexrays.MBL_PROP +""" +needs 'propagation' pass +""" + +ida_hexrays.MBL_PUSH +""" +needs "convert push/pop instructions" +""" + +ida_hexrays.MBL_TCAL +""" +aritifical call block for tail calls +""" + +ida_hexrays.MBL_VALRANGES +""" +should optimize using value ranges +""" + +ida_hexrays.MLI_CLR_FLAGS +""" +clear LVINF_... bits +""" + +ida_hexrays.MLI_CMT +""" +apply lvar comment +""" + +ida_hexrays.MLI_NAME +""" +apply lvar name +""" + +ida_hexrays.MLI_SET_FLAGS +""" +set LVINF_... bits +""" + +ida_hexrays.MLI_TYPE +""" +apply lvar type +""" + +ida_hexrays.NALT_VD +""" +this index is not used by ida +""" + +ida_hexrays.NF_BINVDONE +""" +temporary internal bit: inverting bits is done +""" + +ida_hexrays.NF_BITNOT +""" +The user asked to invert bits of the constant. +""" + +ida_hexrays.NF_FIXED +""" +number format has been defined by the user +""" + +ida_hexrays.NF_NEGATE +""" +The user asked to negate the constant. +""" + +ida_hexrays.NF_NEGDONE +""" +temporary internal bit: negation has been performed +""" + +ida_hexrays.NF_STROFF +""" +internal bit: used as stroff, valid iff 'is_stroff()' +""" + +ida_hexrays.OPROP_CCFLAGS +""" +condition codes register value +""" + +ida_hexrays.OPROP_FLOAT +""" +possibly floating value +""" + +ida_hexrays.OPROP_IMPDONE +""" +imported operand (a pointer) has been dereferenced +""" + +ida_hexrays.OPROP_UDEFVAL +""" +uses undefined value +""" + +ida_hexrays.OPROP_UDT +""" +a struct or union +""" + +ida_hexrays.OPTI_ADDREXPRS +""" +optimize all address expressions (&x+N; &x-&y) +""" + +ida_hexrays.OPTI_COMBINSNS +""" +may combine insns (only for optimize_insn) +""" + +ida_hexrays.OPTI_MINSTKREF +""" +may update minstkref +""" + +ida_hexrays.OPTI_NO_LDXOPT +""" +do not optimize low/high(ldx) +""" + +ida_hexrays.SHINS_LDXEA +""" +display address of ldx expressions (not used) +""" + +ida_hexrays.SHINS_NUMADDR +""" +display definition addresses for numbers +""" + +ida_hexrays.SHINS_SHORT +""" +do not display use-def chains and other attrs +""" + +ida_hexrays.SHINS_VALNUM +""" +display value numbers +""" + +ida_hexrays.ULV_PRECISE_DEFEA +""" +Use precise defea's for lvar locations. +""" + +ida_hexrays.VDRUN_APPEND +""" +Create a new file or append to existing file. +""" + +ida_hexrays.VDRUN_CMDLINE +""" +Called from ida's command line. +""" + +ida_hexrays.VDRUN_LUMINA +""" +Use lumina server. +""" + +ida_hexrays.VDRUN_MAYSTOP +""" +The user can cancel decompilation. +""" + +ida_hexrays.VDRUN_NEWFILE +""" +Create a new file or overwrite existing file. +""" + +ida_hexrays.VDRUN_ONLYNEW +""" +Fail if output file already exists. +""" + +ida_hexrays.VDRUN_SENDIDB +""" +Send problematic databases to hex-rays.com. +""" + +ida_hexrays.VDRUN_SILENT +""" +Silent decompilation. +""" + +ida_hexrays.VDRUN_STATS +""" +Print statistics into vd_stats.txt. +""" + +ida_hexrays.VDUI_LOCKED +""" +is locked? +""" + +ida_hexrays.VDUI_VALID +""" +is valid? +""" + +ida_hexrays.VDUI_VISIBLE +""" +is visible? +""" + +ida_hexrays.VR_AT_END +""" +get value ranges after the instruction or at the block end, just after +the last instruction (if M is NULL) +""" + +ida_hexrays.VR_AT_START +""" +at the block start (if M is NULL) + +get value ranges before the instruction or +""" + +ida_hexrays.VR_EXACT +""" +valrng size will be >= vivl.size + +find exact match. if not set, the returned +""" +=== ida_hexrays EPYDOC INJECTIONS END === +Help on function __make_idainfo_accessors in module ida_ida: + +__make_idainfo_accessors(attr, getter_name=None, setter_name=None) + +Help on function __make_idainfo_bound in module ida_ida: + +__make_idainfo_bound(func, attr) + # + +Help on function __make_idainfo_getter in module ida_ida: + +__make_idainfo_getter(name) + +Help on function calc_default_idaplace_flags in module ida_ida: + +calc_default_idaplace_flags(*args) -> 'int' + calc_default_idaplace_flags() -> int + + + Get default disassembly line options. + +Help on class compiler_info_t in module ida_ida: + +class compiler_info_t(builtins.object) + | Proxy of C++ compiler_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> compiler_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_compiler_info_t(...) + | delete_compiler_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cm + | compiler_info_t_cm_get(self) -> cm_t + | + | defalign + | compiler_info_t_defalign_get(self) -> uchar + | + | id + | compiler_info_t_id_get(self) -> comp_t + | + | size_b + | compiler_info_t_size_b_get(self) -> uchar + | + | size_e + | compiler_info_t_size_e_get(self) -> uchar + | + | size_i + | compiler_info_t_size_i_get(self) -> uchar + | + | size_l + | compiler_info_t_size_l_get(self) -> uchar + | + | size_ldbl + | compiler_info_t_size_ldbl_get(self) -> uchar + | + | size_ll + | compiler_info_t_size_ll_get(self) -> uchar + | + | size_s + | compiler_info_t_size_s_get(self) -> uchar + | + | thisown + | The membership flag + +Help on class idainfo in module ida_ida: + +class idainfo(builtins.object) + | Proxy of C++ idainfo class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | big_arg_align = __func(self, *args) + | + | gen_lzero = __func(self, *args) + | + | gen_null = __func(self, *args) + | + | gen_tryblks = __func(self, *args) + | + | get_abiname(self, *args) -> 'qstring' + | get_abiname(self) -> qstring + | + | get_demname_form = __func(self, *args) + | + | get_maxEA(self, *args) -> 'ea_t' + | get_maxEA(self) -> ea_t + | + | get_minEA(self, *args) -> 'ea_t' + | get_minEA(self) -> ea_t + | + | get_pack_mode = __func(self, *args) + | + | get_procName(self, *args) -> 'qstring' + | get_procName(self) -> qstring + | + | is_32bit = __func(self, *args) + | + | is_64bit = __func(self, *args) + | + | is_auto_enabled = __func(self, *args) + | + | is_be = __func(self, *args) + | + | is_dll = __func(self, *args) + | + | is_flat_off32 = __func(self, *args) + | + | is_graph_view = __func(self, *args) + | + | is_hard_float = __func(self, *args) + | + | is_kernel_mode = __func(self, *args) + | + | is_mem_aligned4 = __func(self, *args) + | + | is_snapshot = __func(self, *args) + | + | is_wide_high_byte_first = __func(self, *args) + | + | like_binary = __func(self, *args) + | + | line_pref_with_seg = __func(self, *args) + | + | loading_idc = __func(self, *args) + | + | map_stkargs = __func(self, *args) + | + | pack_stkargs = __func(self, *args) + | + | readonly_idb = __func(self, *args) + | + | set_64bit = __func(self, *args) + | + | set_auto_enabled = __func(self, *args) + | + | set_be = __func(self, *args) + | + | set_gen_lzero = __func(self, *args) + | + | set_gen_null = __func(self, *args) + | + | set_gen_tryblks = __func(self, *args) + | + | set_graph_view = __func(self, *args) + | + | set_line_pref_with_seg = __func(self, *args) + | + | set_maxEA(self, *args) -> 'void' + | set_maxEA(self, ea) + | + | set_minEA(self, *args) -> 'void' + | set_minEA(self, ea) + | + | set_pack_mode = __func(self, *args) + | + | set_show_auto = __func(self, *args) + | + | set_show_line_pref = __func(self, *args) + | + | set_show_void = __func(self, *args) + | + | set_wide_high_byte_first = __func(self, *args) + | + | show_auto = __func(self, *args) + | + | show_line_pref = __func(self, *args) + | + | show_void = __func(self, *args) + | + | stack_ldbl = __func(self, *args) + | + | stack_varargs = __func(self, *args) + | + | use_allasm = __func(self, *args) + | + | use_gcc_layout = __func(self, *args) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | abibits + | idainfo_abibits_get(self) -> uint32 + | + | abiname + | get_abiname(self) -> qstring + | + | af + | idainfo_af_get(self) -> uint32 + | + | af2 + | idainfo_af2_get(self) -> uint32 + | + | appcall_options + | idainfo_appcall_options_get(self) -> uint32 + | + | apptype + | idainfo_apptype_get(self) -> ushort + | + | asmtype + | idainfo_asmtype_get(self) -> uchar + | + | baseaddr + | idainfo_baseaddr_get(self) -> uval_t + | + | bin_prefix_size + | idainfo_bin_prefix_size_get(self) -> short + | + | cc + | idainfo_cc_get(self) -> compiler_info_t + | + | comment + | idainfo_comment_get(self) -> uchar + | + | database_change_count + | idainfo_database_change_count_get(self) -> uint32 + | + | datatypes + | idainfo_datatypes_get(self) -> uval_t + | + | demnames + | idainfo_demnames_get(self) -> uchar + | + | filetype + | idainfo_filetype_get(self) -> ushort + | + | highoff + | idainfo_highoff_get(self) -> ea_t + | + | indent + | idainfo_indent_get(self) -> uchar + | + | lenxref + | idainfo_lenxref_get(self) -> ushort + | + | lflags + | idainfo_lflags_get(self) -> uint32 + | + | listnames + | idainfo_listnames_get(self) -> uchar + | + | long_demnames + | idainfo_long_demnames_get(self) -> uint32 + | + | lowoff + | idainfo_lowoff_get(self) -> ea_t + | + | main + | idainfo_main_get(self) -> ea_t + | + | margin + | idainfo_margin_get(self) -> ushort + | + | maxEA + | get_maxEA(self) -> ea_t + | + | max_autoname_len + | idainfo_max_autoname_len_get(self) -> ushort + | + | max_ea + | idainfo_max_ea_get(self) -> ea_t + | + | maxref + | idainfo_maxref_get(self) -> uval_t + | + | minEA + | get_minEA(self) -> ea_t + | + | min_ea + | idainfo_min_ea_get(self) -> ea_t + | + | nametype + | idainfo_nametype_get(self) -> char + | + | omax_ea + | idainfo_omax_ea_get(self) -> ea_t + | + | omin_ea + | idainfo_omin_ea_get(self) -> ea_t + | + | ostype + | idainfo_ostype_get(self) -> ushort + | + | outflags + | idainfo_outflags_get(self) -> uint32 + | + | procName + | get_procName(self) -> qstring + | + | procname + | idainfo_procname_get(self) -> char [16] + | + | refcmtnum + | idainfo_refcmtnum_get(self) -> uchar + | + | s_cmtflg + | idainfo_s_cmtflg_get(self) -> uchar + | + | s_genflags + | idainfo_s_genflags_get(self) -> ushort + | + | s_limiter + | idainfo_s_limiter_get(self) -> uchar + | + | s_prefflag + | idainfo_s_prefflag_get(self) -> uchar + | + | s_xrefflag + | idainfo_s_xrefflag_get(self) -> uchar + | + | short_demnames + | idainfo_short_demnames_get(self) -> uint32 + | + | specsegs + | idainfo_specsegs_get(self) -> uchar + | + | start_cs + | idainfo_start_cs_get(self) -> sel_t + | + | start_ea + | idainfo_start_ea_get(self) -> ea_t + | + | start_ip + | idainfo_start_ip_get(self) -> ea_t + | + | start_sp + | idainfo_start_sp_get(self) -> ea_t + | + | start_ss + | idainfo_start_ss_get(self) -> sel_t + | + | strlit_break + | idainfo_strlit_break_get(self) -> uchar + | + | strlit_flags + | idainfo_strlit_flags_get(self) -> uchar + | + | strlit_pref + | idainfo_strlit_pref_get(self) -> char [16] + | + | strlit_sernum + | idainfo_strlit_sernum_get(self) -> uval_t + | + | strlit_zeroes + | idainfo_strlit_zeroes_get(self) -> char + | + | strtype + | idainfo_strtype_get(self) -> int32 + | + | tag + | idainfo_tag_get(self) -> char [3] + | + | thisown + | The membership flag + | + | type_xrefnum + | idainfo_type_xrefnum_get(self) -> uchar + | + | version + | idainfo_version_get(self) -> ushort + | + | xrefnum + | idainfo_xrefnum_get(self) -> uchar + +Help on function inf_big_arg_align in module ida_ida: + +inf_big_arg_align(*args) -> 'bool' + inf_big_arg_align() -> bool + +Help on function inf_gen_lzero in module ida_ida: + +inf_gen_lzero(*args) -> 'bool' + inf_gen_lzero() -> bool + +Help on function inf_gen_null in module ida_ida: + +inf_gen_null(*args) -> 'bool' + inf_gen_null() -> bool + +Help on function inf_gen_tryblks in module ida_ida: + +inf_gen_tryblks(*args) -> 'bool' + inf_gen_tryblks() -> bool + +Help on function inf_get_demname_form in module ida_ida: + +inf_get_demname_form(*args) -> 'uchar' + inf_get_demname_form() -> uchar + + + Get 'DEMNAM_MASK' bits of #demnames. + +Help on function inf_get_pack_mode in module ida_ida: + +inf_get_pack_mode(*args) -> 'int' + inf_get_pack_mode() -> int + +Help on function inf_is_32bit in module ida_ida: + +inf_is_32bit(*args) -> 'bool' + inf_is_32bit() -> bool + +Help on function inf_is_64bit in module ida_ida: + +inf_is_64bit(*args) -> 'bool' + inf_is_64bit() -> bool + +Help on function inf_is_auto_enabled in module ida_ida: + +inf_is_auto_enabled(*args) -> 'bool' + inf_is_auto_enabled() -> bool + +Help on function inf_is_be in module ida_ida: + +inf_is_be(*args) -> 'bool' + inf_is_be() -> bool + +Help on function inf_is_dll in module ida_ida: + +inf_is_dll(*args) -> 'bool' + inf_is_dll() -> bool + +Help on function inf_is_flat_off32 in module ida_ida: + +inf_is_flat_off32(*args) -> 'bool' + inf_is_flat_off32() -> bool + +Help on function inf_is_graph_view in module ida_ida: + +inf_is_graph_view(*args) -> 'bool' + inf_is_graph_view() -> bool + +Help on function inf_is_hard_float in module ida_ida: + +inf_is_hard_float(*args) -> 'bool' + inf_is_hard_float() -> bool + +Help on function inf_is_kernel_mode in module ida_ida: + +inf_is_kernel_mode(*args) -> 'bool' + inf_is_kernel_mode() -> bool + +Help on function inf_is_mem_aligned4 in module ida_ida: + +inf_is_mem_aligned4(*args) -> 'bool' + inf_is_mem_aligned4() -> bool + +Help on function inf_is_snapshot in module ida_ida: + +inf_is_snapshot(*args) -> 'bool' + inf_is_snapshot() -> bool + +Help on function inf_is_wide_high_byte_first in module ida_ida: + +inf_is_wide_high_byte_first(*args) -> 'bool' + inf_is_wide_high_byte_first() -> bool + +Help on function inf_like_binary in module ida_ida: + +inf_like_binary(*args) -> 'bool' + inf_like_binary() -> bool + +Help on function inf_line_pref_with_seg in module ida_ida: + +inf_line_pref_with_seg(*args) -> 'bool' + inf_line_pref_with_seg() -> bool + +Help on function inf_loading_idc in module ida_ida: + +inf_loading_idc(*args) -> 'bool' + inf_loading_idc() -> bool + +Help on function inf_map_stkargs in module ida_ida: + +inf_map_stkargs(*args) -> 'bool' + inf_map_stkargs() -> bool + +Help on function inf_pack_stkargs in module ida_ida: + +inf_pack_stkargs(*args) -> 'bool' + inf_pack_stkargs() -> bool + +Help on function inf_readonly_idb in module ida_ida: + +inf_readonly_idb(*args) -> 'bool' + inf_readonly_idb() -> bool + +Help on function inf_set_64bit in module ida_ida: + +inf_set_64bit(*args) -> 'bool' + inf_set_64bit(_v=True) -> bool + +Help on function inf_set_auto_enabled in module ida_ida: + +inf_set_auto_enabled(*args) -> 'bool' + inf_set_auto_enabled(_v=True) -> bool + +Help on function inf_set_be in module ida_ida: + +inf_set_be(*args) -> 'bool' + inf_set_be(_v=True) -> bool + +Help on function inf_set_gen_lzero in module ida_ida: + +inf_set_gen_lzero(*args) -> 'bool' + inf_set_gen_lzero(_v=True) -> bool + +Help on function inf_set_gen_null in module ida_ida: + +inf_set_gen_null(*args) -> 'bool' + inf_set_gen_null(_v=True) -> bool + +Help on function inf_set_gen_tryblks in module ida_ida: + +inf_set_gen_tryblks(*args) -> 'bool' + inf_set_gen_tryblks(_v=True) -> bool + +Help on function inf_set_graph_view in module ida_ida: + +inf_set_graph_view(*args) -> 'bool' + inf_set_graph_view(_v=True) -> bool + +Help on function inf_set_line_pref_with_seg in module ida_ida: + +inf_set_line_pref_with_seg(*args) -> 'bool' + inf_set_line_pref_with_seg(_v=True) -> bool + +Help on function inf_set_pack_mode in module ida_ida: + +inf_set_pack_mode(*args) -> 'int' + inf_set_pack_mode(pack_mode) -> int + +Help on function inf_set_show_auto in module ida_ida: + +inf_set_show_auto(*args) -> 'bool' + inf_set_show_auto(_v=True) -> bool + +Help on function inf_set_show_line_pref in module ida_ida: + +inf_set_show_line_pref(*args) -> 'bool' + inf_set_show_line_pref(_v=True) -> bool + +Help on function inf_set_show_void in module ida_ida: + +inf_set_show_void(*args) -> 'bool' + inf_set_show_void(_v=True) -> bool + +Help on function in module ida_ida: + + lambda *args + +Help on function inf_set_wide_high_byte_first in module ida_ida: + +inf_set_wide_high_byte_first(*args) -> 'bool' + inf_set_wide_high_byte_first(_v=True) -> bool + +Help on function inf_show_auto in module ida_ida: + +inf_show_auto(*args) -> 'bool' + inf_show_auto() -> bool + +Help on function inf_show_line_pref in module ida_ida: + +inf_show_line_pref(*args) -> 'bool' + inf_show_line_pref() -> bool + +Help on function inf_show_void in module ida_ida: + +inf_show_void(*args) -> 'bool' + inf_show_void() -> bool + +Help on function inf_stack_ldbl in module ida_ida: + +inf_stack_ldbl(*args) -> 'bool' + inf_stack_ldbl() -> bool + +Help on function inf_stack_varargs in module ida_ida: + +inf_stack_varargs(*args) -> 'bool' + inf_stack_varargs() -> bool + +Help on function inf_use_allasm in module ida_ida: + +inf_use_allasm(*args) -> 'bool' + inf_use_allasm() -> bool + +Help on function inf_use_gcc_layout in module ida_ida: + +inf_use_gcc_layout(*args) -> 'bool' + inf_use_gcc_layout() -> bool + +Help on function inf_abi_set_by_user in module ida_ida: + +inf_abi_set_by_user(*args) -> 'bool' + inf_abi_set_by_user() -> bool + +Help on function inf_allow_non_matched_ops in module ida_ida: + +inf_allow_non_matched_ops(*args) -> 'bool' + inf_allow_non_matched_ops() -> bool + +Help on function inf_allow_sigmulti in module ida_ida: + +inf_allow_sigmulti(*args) -> 'bool' + inf_allow_sigmulti() -> bool + +Help on function inf_append_sigcmt in module ida_ida: + +inf_append_sigcmt(*args) -> 'bool' + inf_append_sigcmt() -> bool + +Help on function inf_check_manual_ops in module ida_ida: + +inf_check_manual_ops(*args) -> 'bool' + inf_check_manual_ops() -> bool + +Help on function inf_check_unicode_strlits in module ida_ida: + +inf_check_unicode_strlits(*args) -> 'bool' + inf_check_unicode_strlits() -> bool + +Help on function inf_coagulate_code in module ida_ida: + +inf_coagulate_code(*args) -> 'bool' + inf_coagulate_code() -> bool + +Help on function inf_coagulate_data in module ida_ida: + +inf_coagulate_data(*args) -> 'bool' + inf_coagulate_data() -> bool + +Help on function inf_compress_idb in module ida_ida: + +inf_compress_idb(*args) -> 'bool' + inf_compress_idb() -> bool + +Help on function inf_create_all_xrefs in module ida_ida: + +inf_create_all_xrefs(*args) -> 'bool' + inf_create_all_xrefs() -> bool + +Help on function inf_create_func_from_call in module ida_ida: + +inf_create_func_from_call(*args) -> 'bool' + inf_create_func_from_call() -> bool + +Help on function inf_create_func_from_ptr in module ida_ida: + +inf_create_func_from_ptr(*args) -> 'bool' + inf_create_func_from_ptr() -> bool + +Help on function inf_create_func_tails in module ida_ida: + +inf_create_func_tails(*args) -> 'bool' + inf_create_func_tails() -> bool + +Help on function inf_create_jump_tables in module ida_ida: + +inf_create_jump_tables(*args) -> 'bool' + inf_create_jump_tables() -> bool + +Help on function inf_create_off_on_dref in module ida_ida: + +inf_create_off_on_dref(*args) -> 'bool' + inf_create_off_on_dref() -> bool + +Help on function inf_create_off_using_fixup in module ida_ida: + +inf_create_off_using_fixup(*args) -> 'bool' + inf_create_off_using_fixup() -> bool + +Help on function inf_create_strlit_on_xref in module ida_ida: + +inf_create_strlit_on_xref(*args) -> 'bool' + inf_create_strlit_on_xref() -> bool + +Help on function inf_data_offset in module ida_ida: + +inf_data_offset(*args) -> 'bool' + inf_data_offset() -> bool + +Help on function inf_dbg_no_store_path in module ida_ida: + +inf_dbg_no_store_path(*args) -> 'bool' + inf_dbg_no_store_path() -> bool + +Help on function inf_decode_fpp in module ida_ida: + +inf_decode_fpp(*args) -> 'bool' + inf_decode_fpp() -> bool + +Help on function inf_del_no_xref_insns in module ida_ida: + +inf_del_no_xref_insns(*args) -> 'bool' + inf_del_no_xref_insns() -> bool + +Help on function inf_final_pass in module ida_ida: + +inf_final_pass(*args) -> 'bool' + inf_final_pass() -> bool + +Help on function inf_full_sp_ana in module ida_ida: + +inf_full_sp_ana(*args) -> 'bool' + inf_full_sp_ana() -> bool + +Help on function inf_gen_assume in module ida_ida: + +inf_gen_assume(*args) -> 'bool' + inf_gen_assume() -> bool + +Help on function inf_gen_org in module ida_ida: + +inf_gen_org(*args) -> 'bool' + inf_gen_org() -> bool + +Help on function inf_get_abibits in module ida_ida: + +inf_get_abibits(*args) -> 'uint32' + inf_get_abibits() -> uint32 + +Help on function inf_get_af in module ida_ida: + +inf_get_af(*args) -> 'uint32' + inf_get_af() -> uint32 + +Help on function inf_get_af2 in module ida_ida: + +inf_get_af2(*args) -> 'uint32' + inf_get_af2() -> uint32 + +Help on function inf_get_af2_low in module ida_ida: + +inf_get_af2_low(*args) -> 'ushort' + inf_get_af2_low() -> ushort + + + Get/set low 16bit half of inf.af2. + +Help on function inf_get_af_high in module ida_ida: + +inf_get_af_high(*args) -> 'ushort' + inf_get_af_high() -> ushort + +Help on function inf_get_af_low in module ida_ida: + +inf_get_af_low(*args) -> 'ushort' + inf_get_af_low() -> ushort + + + Get/set low/high 16bit halves of inf.af. + +Help on function inf_get_appcall_options in module ida_ida: + +inf_get_appcall_options(*args) -> 'uint32' + inf_get_appcall_options() -> uint32 + +Help on function inf_get_apptype in module ida_ida: + +inf_get_apptype(*args) -> 'ushort' + inf_get_apptype() -> ushort + +Help on function inf_get_asmtype in module ida_ida: + +inf_get_asmtype(*args) -> 'uchar' + inf_get_asmtype() -> uchar + +Help on function inf_get_baseaddr in module ida_ida: + +inf_get_baseaddr(*args) -> 'uval_t' + inf_get_baseaddr() -> uval_t + +Help on function inf_get_bin_prefix_size in module ida_ida: + +inf_get_bin_prefix_size(*args) -> 'short' + inf_get_bin_prefix_size() -> short + +Help on function inf_get_cc in module ida_ida: + +inf_get_cc(*args) -> 'bool' + inf_get_cc(out) -> bool + +Help on function inf_get_cc_cm in module ida_ida: + +inf_get_cc_cm(*args) -> 'cm_t' + inf_get_cc_cm() -> cm_t + +Help on function inf_get_cc_defalign in module ida_ida: + +inf_get_cc_defalign(*args) -> 'uchar' + inf_get_cc_defalign() -> uchar + +Help on function inf_get_cc_id in module ida_ida: + +inf_get_cc_id(*args) -> 'comp_t' + inf_get_cc_id() -> comp_t + +Help on function inf_get_cc_size_b in module ida_ida: + +inf_get_cc_size_b(*args) -> 'uchar' + inf_get_cc_size_b() -> uchar + +Help on function inf_get_cc_size_e in module ida_ida: + +inf_get_cc_size_e(*args) -> 'uchar' + inf_get_cc_size_e() -> uchar + +Help on function inf_get_cc_size_i in module ida_ida: + +inf_get_cc_size_i(*args) -> 'uchar' + inf_get_cc_size_i() -> uchar + +Help on function inf_get_cc_size_l in module ida_ida: + +inf_get_cc_size_l(*args) -> 'uchar' + inf_get_cc_size_l() -> uchar + +Help on function inf_get_cc_size_ldbl in module ida_ida: + +inf_get_cc_size_ldbl(*args) -> 'uchar' + inf_get_cc_size_ldbl() -> uchar + +Help on function inf_get_cc_size_ll in module ida_ida: + +inf_get_cc_size_ll(*args) -> 'uchar' + inf_get_cc_size_ll() -> uchar + +Help on function inf_get_cc_size_s in module ida_ida: + +inf_get_cc_size_s(*args) -> 'uchar' + inf_get_cc_size_s() -> uchar + +Help on function inf_get_cmtflg in module ida_ida: + +inf_get_cmtflg(*args) -> 'uchar' + inf_get_cmtflg() -> uchar + +Help on function inf_get_comment in module ida_ida: + +inf_get_comment(*args) -> 'uchar' + inf_get_comment() -> uchar + +Help on function inf_get_database_change_count in module ida_ida: + +inf_get_database_change_count(*args) -> 'uint32' + inf_get_database_change_count() -> uint32 + +Help on function inf_get_datatypes in module ida_ida: + +inf_get_datatypes(*args) -> 'uval_t' + inf_get_datatypes() -> uval_t + +Help on function inf_get_demnames in module ida_ida: + +inf_get_demnames(*args) -> 'uchar' + inf_get_demnames() -> uchar + +Help on function inf_get_filetype in module ida_ida: + +inf_get_filetype(*args) -> 'filetype_t' + inf_get_filetype() -> filetype_t + +Help on function inf_get_genflags in module ida_ida: + +inf_get_genflags(*args) -> 'ushort' + inf_get_genflags() -> ushort + +Help on function inf_get_highoff in module ida_ida: + +inf_get_highoff(*args) -> 'ea_t' + inf_get_highoff() -> ea_t + +Help on function inf_get_indent in module ida_ida: + +inf_get_indent(*args) -> 'uchar' + inf_get_indent() -> uchar + +Help on function inf_get_lenxref in module ida_ida: + +inf_get_lenxref(*args) -> 'ushort' + inf_get_lenxref() -> ushort + +Help on function inf_get_lflags in module ida_ida: + +inf_get_lflags(*args) -> 'uint32' + inf_get_lflags() -> uint32 + +Help on function inf_get_limiter in module ida_ida: + +inf_get_limiter(*args) -> 'uchar' + inf_get_limiter() -> uchar + +Help on function inf_get_listnames in module ida_ida: + +inf_get_listnames(*args) -> 'uchar' + inf_get_listnames() -> uchar + +Help on function inf_get_long_demnames in module ida_ida: + +inf_get_long_demnames(*args) -> 'uint32' + inf_get_long_demnames() -> uint32 + +Help on function inf_get_lowoff in module ida_ida: + +inf_get_lowoff(*args) -> 'ea_t' + inf_get_lowoff() -> ea_t + +Help on function inf_get_main in module ida_ida: + +inf_get_main(*args) -> 'ea_t' + inf_get_main() -> ea_t + +Help on function inf_get_margin in module ida_ida: + +inf_get_margin(*args) -> 'ushort' + inf_get_margin() -> ushort + +Help on function inf_get_max_autoname_len in module ida_ida: + +inf_get_max_autoname_len(*args) -> 'ushort' + inf_get_max_autoname_len() -> ushort + +Help on function inf_get_max_ea in module ida_ida: + +inf_get_max_ea(*args) -> 'ea_t' + inf_get_max_ea() -> ea_t + +Help on function inf_get_maxref in module ida_ida: + +inf_get_maxref(*args) -> 'uval_t' + inf_get_maxref() -> uval_t + +Help on function inf_get_min_ea in module ida_ida: + +inf_get_min_ea(*args) -> 'ea_t' + inf_get_min_ea() -> ea_t + +Help on function inf_get_nametype in module ida_ida: + +inf_get_nametype(*args) -> 'char' + inf_get_nametype() -> char + +Help on function inf_get_netdelta in module ida_ida: + +inf_get_netdelta(*args) -> 'sval_t' + inf_get_netdelta() -> sval_t + +Help on function inf_get_omax_ea in module ida_ida: + +inf_get_omax_ea(*args) -> 'ea_t' + inf_get_omax_ea() -> ea_t + +Help on function inf_get_omin_ea in module ida_ida: + +inf_get_omin_ea(*args) -> 'ea_t' + inf_get_omin_ea() -> ea_t + +Help on function inf_get_ostype in module ida_ida: + +inf_get_ostype(*args) -> 'ushort' + inf_get_ostype() -> ushort + +Help on function inf_get_outflags in module ida_ida: + +inf_get_outflags(*args) -> 'uint32' + inf_get_outflags() -> uint32 + +Help on function inf_get_prefflag in module ida_ida: + +inf_get_prefflag(*args) -> 'uchar' + inf_get_prefflag() -> uchar + +Help on function inf_get_privrange in module ida_ida: + +inf_get_privrange(*args) -> 'range_t' + inf_get_privrange(out) -> bool + inf_get_privrange() -> range_t + +Help on function inf_get_privrange_end_ea in module ida_ida: + +inf_get_privrange_end_ea(*args) -> 'ea_t' + inf_get_privrange_end_ea() -> ea_t + +Help on function inf_get_privrange_start_ea in module ida_ida: + +inf_get_privrange_start_ea(*args) -> 'ea_t' + inf_get_privrange_start_ea() -> ea_t + +Help on function inf_get_procname in module ida_ida: + +inf_get_procname(*args) -> 'size_t' + inf_get_procname() -> str + +Help on function inf_get_refcmtnum in module ida_ida: + +inf_get_refcmtnum(*args) -> 'uchar' + inf_get_refcmtnum() -> uchar + +Help on function inf_get_short_demnames in module ida_ida: + +inf_get_short_demnames(*args) -> 'uint32' + inf_get_short_demnames() -> uint32 + +Help on function inf_get_specsegs in module ida_ida: + +inf_get_specsegs(*args) -> 'uchar' + inf_get_specsegs() -> uchar + +Help on function inf_get_start_cs in module ida_ida: + +inf_get_start_cs(*args) -> 'sel_t' + inf_get_start_cs() -> sel_t + +Help on function inf_get_start_ea in module ida_ida: + +inf_get_start_ea(*args) -> 'ea_t' + inf_get_start_ea() -> ea_t + +Help on function inf_get_start_ip in module ida_ida: + +inf_get_start_ip(*args) -> 'ea_t' + inf_get_start_ip() -> ea_t + +Help on function inf_get_start_sp in module ida_ida: + +inf_get_start_sp(*args) -> 'ea_t' + inf_get_start_sp() -> ea_t + +Help on function inf_get_start_ss in module ida_ida: + +inf_get_start_ss(*args) -> 'sel_t' + inf_get_start_ss() -> sel_t + +Help on function inf_get_strlit_break in module ida_ida: + +inf_get_strlit_break(*args) -> 'uchar' + inf_get_strlit_break() -> uchar + +Help on function inf_get_strlit_flags in module ida_ida: + +inf_get_strlit_flags(*args) -> 'uchar' + inf_get_strlit_flags() -> uchar + +Help on function inf_get_strlit_pref in module ida_ida: + +inf_get_strlit_pref(*args) -> 'size_t' + inf_get_strlit_pref() -> str + +Help on function inf_get_strlit_sernum in module ida_ida: + +inf_get_strlit_sernum(*args) -> 'uval_t' + inf_get_strlit_sernum() -> uval_t + +Help on function inf_get_strlit_zeroes in module ida_ida: + +inf_get_strlit_zeroes(*args) -> 'char' + inf_get_strlit_zeroes() -> char + +Help on function inf_get_strtype in module ida_ida: + +inf_get_strtype(*args) -> 'int32' + inf_get_strtype() -> int32 + +Help on function inf_get_type_xrefnum in module ida_ida: + +inf_get_type_xrefnum(*args) -> 'uchar' + inf_get_type_xrefnum() -> uchar + +Help on function inf_get_version in module ida_ida: + +inf_get_version(*args) -> 'ushort' + inf_get_version() -> ushort + +Help on function inf_get_xrefflag in module ida_ida: + +inf_get_xrefflag(*args) -> 'uchar' + inf_get_xrefflag() -> uchar + +Help on function inf_get_xrefnum in module ida_ida: + +inf_get_xrefnum(*args) -> 'uchar' + inf_get_xrefnum() -> uchar + +Help on function inf_guess_func_type in module ida_ida: + +inf_guess_func_type(*args) -> 'bool' + inf_guess_func_type() -> bool + +Help on function inf_handle_eh in module ida_ida: + +inf_handle_eh(*args) -> 'bool' + inf_handle_eh() -> bool + +Help on function inf_handle_rtti in module ida_ida: + +inf_handle_rtti(*args) -> 'bool' + inf_handle_rtti() -> bool + +Help on function inf_hide_comments in module ida_ida: + +inf_hide_comments(*args) -> 'bool' + inf_hide_comments() -> bool + +Help on function inf_hide_libfuncs in module ida_ida: + +inf_hide_libfuncs(*args) -> 'bool' + inf_hide_libfuncs() -> bool + +Help on function inf_huge_arg_align in module ida_ida: + +inf_huge_arg_align(*args) -> 'bool' + inf_huge_arg_align() -> bool + +Help on function inf_inc_database_change_count in module ida_ida: + +inf_inc_database_change_count(*args) -> 'void' + inf_inc_database_change_count(cnt=1) + +Help on function inf_is_limiter_empty in module ida_ida: + +inf_is_limiter_empty(*args) -> 'bool' + inf_is_limiter_empty() -> bool + +Help on function inf_is_limiter_thick in module ida_ida: + +inf_is_limiter_thick(*args) -> 'bool' + inf_is_limiter_thick() -> bool + +Help on function inf_is_limiter_thin in module ida_ida: + +inf_is_limiter_thin(*args) -> 'bool' + inf_is_limiter_thin() -> bool + +Help on function inf_macros_enabled in module ida_ida: + +inf_macros_enabled(*args) -> 'bool' + inf_macros_enabled() -> bool + +Help on function inf_mark_code in module ida_ida: + +inf_mark_code(*args) -> 'bool' + inf_mark_code() -> bool + +Help on function inf_no_store_user_info in module ida_ida: + +inf_no_store_user_info(*args) -> 'bool' + inf_no_store_user_info() -> bool + +Help on function inf_noflow_to_data in module ida_ida: + +inf_noflow_to_data(*args) -> 'bool' + inf_noflow_to_data() -> bool + +Help on function inf_noret_ana in module ida_ida: + +inf_noret_ana(*args) -> 'bool' + inf_noret_ana() -> bool + +Help on function inf_op_offset in module ida_ida: + +inf_op_offset(*args) -> 'bool' + inf_op_offset() -> bool + +Help on function inf_pack_idb in module ida_ida: + +inf_pack_idb(*args) -> 'bool' + inf_pack_idb() -> bool + +Help on function inf_postinc_strlit_sernum in module ida_ida: + +inf_postinc_strlit_sernum(*args) -> 'uval_t' + inf_postinc_strlit_sernum(cnt=1) -> uval_t + +Help on function inf_prefix_show_funcoff in module ida_ida: + +inf_prefix_show_funcoff(*args) -> 'bool' + inf_prefix_show_funcoff() -> bool + +Help on function inf_prefix_show_segaddr in module ida_ida: + +inf_prefix_show_segaddr(*args) -> 'bool' + inf_prefix_show_segaddr() -> bool + +Help on function inf_prefix_show_stack in module ida_ida: + +inf_prefix_show_stack(*args) -> 'bool' + inf_prefix_show_stack() -> bool + +Help on function inf_prefix_truncate_opcode_bytes in module ida_ida: + +inf_prefix_truncate_opcode_bytes(*args) -> 'bool' + inf_prefix_truncate_opcode_bytes() -> bool + +Help on function inf_propagate_regargs in module ida_ida: + +inf_propagate_regargs(*args) -> 'bool' + inf_propagate_regargs() -> bool + +Help on function inf_propagate_stkargs in module ida_ida: + +inf_propagate_stkargs(*args) -> 'bool' + inf_propagate_stkargs() -> bool + +Help on function inf_rename_jumpfunc in module ida_ida: + +inf_rename_jumpfunc(*args) -> 'bool' + inf_rename_jumpfunc() -> bool + +Help on function inf_rename_nullsub in module ida_ida: + +inf_rename_nullsub(*args) -> 'bool' + inf_rename_nullsub() -> bool + +Help on function inf_set_32bit in module ida_ida: + +inf_set_32bit(*args) -> 'bool' + inf_set_32bit(_v=True) -> bool + +Help on function inf_set_abi_set_by_user in module ida_ida: + +inf_set_abi_set_by_user(*args) -> 'bool' + inf_set_abi_set_by_user(_v=True) -> bool + +Help on function inf_set_abibits in module ida_ida: + +inf_set_abibits(*args) -> 'bool' + inf_set_abibits(_v) -> bool + +Help on function inf_set_af in module ida_ida: + +inf_set_af(*args) -> 'bool' + inf_set_af(_v) -> bool + +Help on function inf_set_af2 in module ida_ida: + +inf_set_af2(*args) -> 'bool' + inf_set_af2(_v) -> bool + +Help on function inf_set_af2_low in module ida_ida: + +inf_set_af2_low(*args) -> 'void' + inf_set_af2_low(saf) + +Help on function inf_set_af_high in module ida_ida: + +inf_set_af_high(*args) -> 'void' + inf_set_af_high(saf2) + +Help on function inf_set_af_low in module ida_ida: + +inf_set_af_low(*args) -> 'void' + inf_set_af_low(saf) + +Help on function inf_set_allow_non_matched_ops in module ida_ida: + +inf_set_allow_non_matched_ops(*args) -> 'bool' + inf_set_allow_non_matched_ops(_v=True) -> bool + +Help on function inf_set_allow_sigmulti in module ida_ida: + +inf_set_allow_sigmulti(*args) -> 'bool' + inf_set_allow_sigmulti(_v=True) -> bool + +Help on function inf_set_appcall_options in module ida_ida: + +inf_set_appcall_options(*args) -> 'bool' + inf_set_appcall_options(_v) -> bool + +Help on function inf_set_append_sigcmt in module ida_ida: + +inf_set_append_sigcmt(*args) -> 'bool' + inf_set_append_sigcmt(_v=True) -> bool + +Help on function inf_set_apptype in module ida_ida: + +inf_set_apptype(*args) -> 'bool' + inf_set_apptype(_v) -> bool + +Help on function inf_set_asmtype in module ida_ida: + +inf_set_asmtype(*args) -> 'bool' + inf_set_asmtype(_v) -> bool + +Help on function inf_set_baseaddr in module ida_ida: + +inf_set_baseaddr(*args) -> 'bool' + inf_set_baseaddr(_v) -> bool + +Help on function inf_set_big_arg_align in module ida_ida: + +inf_set_big_arg_align(*args) -> 'bool' + inf_set_big_arg_align(_v=True) -> bool + +Help on function inf_set_bin_prefix_size in module ida_ida: + +inf_set_bin_prefix_size(*args) -> 'bool' + inf_set_bin_prefix_size(_v) -> bool + +Help on function inf_set_cc in module ida_ida: + +inf_set_cc(*args) -> 'bool' + inf_set_cc(_v) -> bool + +Help on function inf_set_cc_cm in module ida_ida: + +inf_set_cc_cm(*args) -> 'bool' + inf_set_cc_cm(_v) -> bool + +Help on function inf_set_cc_defalign in module ida_ida: + +inf_set_cc_defalign(*args) -> 'bool' + inf_set_cc_defalign(_v) -> bool + +Help on function inf_set_cc_id in module ida_ida: + +inf_set_cc_id(*args) -> 'bool' + inf_set_cc_id(_v) -> bool + +Help on function inf_set_cc_size_b in module ida_ida: + +inf_set_cc_size_b(*args) -> 'bool' + inf_set_cc_size_b(_v) -> bool + +Help on function inf_set_cc_size_e in module ida_ida: + +inf_set_cc_size_e(*args) -> 'bool' + inf_set_cc_size_e(_v) -> bool + +Help on function inf_set_cc_size_i in module ida_ida: + +inf_set_cc_size_i(*args) -> 'bool' + inf_set_cc_size_i(_v) -> bool + +Help on function inf_set_cc_size_l in module ida_ida: + +inf_set_cc_size_l(*args) -> 'bool' + inf_set_cc_size_l(_v) -> bool + +Help on function inf_set_cc_size_ldbl in module ida_ida: + +inf_set_cc_size_ldbl(*args) -> 'bool' + inf_set_cc_size_ldbl(_v) -> bool + +Help on function inf_set_cc_size_ll in module ida_ida: + +inf_set_cc_size_ll(*args) -> 'bool' + inf_set_cc_size_ll(_v) -> bool + +Help on function inf_set_cc_size_s in module ida_ida: + +inf_set_cc_size_s(*args) -> 'bool' + inf_set_cc_size_s(_v) -> bool + +Help on function inf_set_check_manual_ops in module ida_ida: + +inf_set_check_manual_ops(*args) -> 'bool' + inf_set_check_manual_ops(_v=True) -> bool + +Help on function inf_set_check_unicode_strlits in module ida_ida: + +inf_set_check_unicode_strlits(*args) -> 'bool' + inf_set_check_unicode_strlits(_v=True) -> bool + +Help on function inf_set_cmtflg in module ida_ida: + +inf_set_cmtflg(*args) -> 'bool' + inf_set_cmtflg(_v) -> bool + +Help on function inf_set_coagulate_code in module ida_ida: + +inf_set_coagulate_code(*args) -> 'bool' + inf_set_coagulate_code(_v=True) -> bool + +Help on function inf_set_coagulate_data in module ida_ida: + +inf_set_coagulate_data(*args) -> 'bool' + inf_set_coagulate_data(_v=True) -> bool + +Help on function inf_set_comment in module ida_ida: + +inf_set_comment(*args) -> 'bool' + inf_set_comment(_v) -> bool + +Help on function inf_set_compress_idb in module ida_ida: + +inf_set_compress_idb(*args) -> 'bool' + inf_set_compress_idb(_v=True) -> bool + +Help on function inf_set_create_all_xrefs in module ida_ida: + +inf_set_create_all_xrefs(*args) -> 'bool' + inf_set_create_all_xrefs(_v=True) -> bool + +Help on function inf_set_create_func_from_call in module ida_ida: + +inf_set_create_func_from_call(*args) -> 'bool' + inf_set_create_func_from_call(_v=True) -> bool + +Help on function inf_set_create_func_from_ptr in module ida_ida: + +inf_set_create_func_from_ptr(*args) -> 'bool' + inf_set_create_func_from_ptr(_v=True) -> bool + +Help on function inf_set_create_func_tails in module ida_ida: + +inf_set_create_func_tails(*args) -> 'bool' + inf_set_create_func_tails(_v=True) -> bool + +Help on function inf_set_create_jump_tables in module ida_ida: + +inf_set_create_jump_tables(*args) -> 'bool' + inf_set_create_jump_tables(_v=True) -> bool + +Help on function inf_set_create_off_on_dref in module ida_ida: + +inf_set_create_off_on_dref(*args) -> 'bool' + inf_set_create_off_on_dref(_v=True) -> bool + +Help on function inf_set_create_off_using_fixup in module ida_ida: + +inf_set_create_off_using_fixup(*args) -> 'bool' + inf_set_create_off_using_fixup(_v=True) -> bool + +Help on function inf_set_create_strlit_on_xref in module ida_ida: + +inf_set_create_strlit_on_xref(*args) -> 'bool' + inf_set_create_strlit_on_xref(_v=True) -> bool + +Help on function inf_set_data_offset in module ida_ida: + +inf_set_data_offset(*args) -> 'bool' + inf_set_data_offset(_v=True) -> bool + +Help on function inf_set_database_change_count in module ida_ida: + +inf_set_database_change_count(*args) -> 'bool' + inf_set_database_change_count(_v) -> bool + +Help on function inf_set_datatypes in module ida_ida: + +inf_set_datatypes(*args) -> 'bool' + inf_set_datatypes(_v) -> bool + +Help on function inf_set_dbg_no_store_path in module ida_ida: + +inf_set_dbg_no_store_path(*args) -> 'bool' + inf_set_dbg_no_store_path(_v=True) -> bool + +Help on function inf_set_decode_fpp in module ida_ida: + +inf_set_decode_fpp(*args) -> 'bool' + inf_set_decode_fpp(_v=True) -> bool + +Help on function inf_set_del_no_xref_insns in module ida_ida: + +inf_set_del_no_xref_insns(*args) -> 'bool' + inf_set_del_no_xref_insns(_v=True) -> bool + +Help on function inf_set_demnames in module ida_ida: + +inf_set_demnames(*args) -> 'bool' + inf_set_demnames(_v) -> bool + +Help on function inf_set_dll in module ida_ida: + +inf_set_dll(*args) -> 'bool' + inf_set_dll(_v=True) -> bool + +Help on function inf_set_filetype in module ida_ida: + +inf_set_filetype(*args) -> 'bool' + inf_set_filetype(_v) -> bool + +Help on function inf_set_final_pass in module ida_ida: + +inf_set_final_pass(*args) -> 'bool' + inf_set_final_pass(_v=True) -> bool + +Help on function inf_set_flat_off32 in module ida_ida: + +inf_set_flat_off32(*args) -> 'bool' + inf_set_flat_off32(_v=True) -> bool + +Help on function inf_set_full_sp_ana in module ida_ida: + +inf_set_full_sp_ana(*args) -> 'bool' + inf_set_full_sp_ana(_v=True) -> bool + +Help on function inf_set_gen_assume in module ida_ida: + +inf_set_gen_assume(*args) -> 'bool' + inf_set_gen_assume(_v=True) -> bool + +Help on function inf_set_gen_org in module ida_ida: + +inf_set_gen_org(*args) -> 'bool' + inf_set_gen_org(_v=True) -> bool + +Help on function inf_set_genflags in module ida_ida: + +inf_set_genflags(*args) -> 'bool' + inf_set_genflags(_v) -> bool + +Help on function inf_set_guess_func_type in module ida_ida: + +inf_set_guess_func_type(*args) -> 'bool' + inf_set_guess_func_type(_v=True) -> bool + +Help on function inf_set_handle_eh in module ida_ida: + +inf_set_handle_eh(*args) -> 'bool' + inf_set_handle_eh(_v=True) -> bool + +Help on function inf_set_handle_rtti in module ida_ida: + +inf_set_handle_rtti(*args) -> 'bool' + inf_set_handle_rtti(_v=True) -> bool + +Help on function inf_set_hard_float in module ida_ida: + +inf_set_hard_float(*args) -> 'bool' + inf_set_hard_float(_v=True) -> bool + +Help on function inf_set_hide_comments in module ida_ida: + +inf_set_hide_comments(*args) -> 'bool' + inf_set_hide_comments(_v=True) -> bool + +Help on function inf_set_hide_libfuncs in module ida_ida: + +inf_set_hide_libfuncs(*args) -> 'bool' + inf_set_hide_libfuncs(_v=True) -> bool + +Help on function inf_set_highoff in module ida_ida: + +inf_set_highoff(*args) -> 'bool' + inf_set_highoff(_v) -> bool + +Help on function inf_set_huge_arg_align in module ida_ida: + +inf_set_huge_arg_align(*args) -> 'bool' + inf_set_huge_arg_align(_v=True) -> bool + +Help on function inf_set_indent in module ida_ida: + +inf_set_indent(*args) -> 'bool' + inf_set_indent(_v) -> bool + +Help on function inf_set_kernel_mode in module ida_ida: + +inf_set_kernel_mode(*args) -> 'bool' + inf_set_kernel_mode(_v=True) -> bool + +Help on function inf_set_lenxref in module ida_ida: + +inf_set_lenxref(*args) -> 'bool' + inf_set_lenxref(_v) -> bool + +Help on function inf_set_lflags in module ida_ida: + +inf_set_lflags(*args) -> 'bool' + inf_set_lflags(_v) -> bool + +Help on function inf_set_limiter in module ida_ida: + +inf_set_limiter(*args) -> 'bool' + inf_set_limiter(_v) -> bool + +Help on function inf_set_limiter_empty in module ida_ida: + +inf_set_limiter_empty(*args) -> 'bool' + inf_set_limiter_empty(_v=True) -> bool + +Help on function inf_set_limiter_thick in module ida_ida: + +inf_set_limiter_thick(*args) -> 'bool' + inf_set_limiter_thick(_v=True) -> bool + +Help on function inf_set_limiter_thin in module ida_ida: + +inf_set_limiter_thin(*args) -> 'bool' + inf_set_limiter_thin(_v=True) -> bool + +Help on function inf_set_listnames in module ida_ida: + +inf_set_listnames(*args) -> 'bool' + inf_set_listnames(_v) -> bool + +Help on function inf_set_loading_idc in module ida_ida: + +inf_set_loading_idc(*args) -> 'bool' + inf_set_loading_idc(_v=True) -> bool + +Help on function inf_set_long_demnames in module ida_ida: + +inf_set_long_demnames(*args) -> 'bool' + inf_set_long_demnames(_v) -> bool + +Help on function inf_set_lowoff in module ida_ida: + +inf_set_lowoff(*args) -> 'bool' + inf_set_lowoff(_v) -> bool + +Help on function inf_set_macros_enabled in module ida_ida: + +inf_set_macros_enabled(*args) -> 'bool' + inf_set_macros_enabled(_v=True) -> bool + +Help on function inf_set_main in module ida_ida: + +inf_set_main(*args) -> 'bool' + inf_set_main(_v) -> bool + +Help on function inf_set_map_stkargs in module ida_ida: + +inf_set_map_stkargs(*args) -> 'bool' + inf_set_map_stkargs(_v=True) -> bool + +Help on function inf_set_margin in module ida_ida: + +inf_set_margin(*args) -> 'bool' + inf_set_margin(_v) -> bool + +Help on function inf_set_mark_code in module ida_ida: + +inf_set_mark_code(*args) -> 'bool' + inf_set_mark_code(_v=True) -> bool + +Help on function inf_set_max_autoname_len in module ida_ida: + +inf_set_max_autoname_len(*args) -> 'bool' + inf_set_max_autoname_len(_v) -> bool + +Help on function inf_set_max_ea in module ida_ida: + +inf_set_max_ea(*args) -> 'bool' + inf_set_max_ea(_v) -> bool + +Help on function inf_set_maxref in module ida_ida: + +inf_set_maxref(*args) -> 'bool' + inf_set_maxref(_v) -> bool + +Help on function inf_set_mem_aligned4 in module ida_ida: + +inf_set_mem_aligned4(*args) -> 'bool' + inf_set_mem_aligned4(_v=True) -> bool + +Help on function inf_set_min_ea in module ida_ida: + +inf_set_min_ea(*args) -> 'bool' + inf_set_min_ea(_v) -> bool + +Help on function inf_set_nametype in module ida_ida: + +inf_set_nametype(*args) -> 'bool' + inf_set_nametype(_v) -> bool + +Help on function inf_set_netdelta in module ida_ida: + +inf_set_netdelta(*args) -> 'bool' + inf_set_netdelta(_v) -> bool + +Help on function inf_set_no_store_user_info in module ida_ida: + +inf_set_no_store_user_info(*args) -> 'bool' + inf_set_no_store_user_info(_v=True) -> bool + +Help on function inf_set_noflow_to_data in module ida_ida: + +inf_set_noflow_to_data(*args) -> 'bool' + inf_set_noflow_to_data(_v=True) -> bool + +Help on function inf_set_noret_ana in module ida_ida: + +inf_set_noret_ana(*args) -> 'bool' + inf_set_noret_ana(_v=True) -> bool + +Help on function inf_set_omax_ea in module ida_ida: + +inf_set_omax_ea(*args) -> 'bool' + inf_set_omax_ea(_v) -> bool + +Help on function inf_set_omin_ea in module ida_ida: + +inf_set_omin_ea(*args) -> 'bool' + inf_set_omin_ea(_v) -> bool + +Help on function inf_set_op_offset in module ida_ida: + +inf_set_op_offset(*args) -> 'bool' + inf_set_op_offset(_v=True) -> bool + +Help on function inf_set_ostype in module ida_ida: + +inf_set_ostype(*args) -> 'bool' + inf_set_ostype(_v) -> bool + +Help on function inf_set_outflags in module ida_ida: + +inf_set_outflags(*args) -> 'bool' + inf_set_outflags(_v) -> bool + +Help on function inf_set_pack_idb in module ida_ida: + +inf_set_pack_idb(*args) -> 'bool' + inf_set_pack_idb(_v=True) -> bool + +Help on function inf_set_pack_stkargs in module ida_ida: + +inf_set_pack_stkargs(*args) -> 'bool' + inf_set_pack_stkargs(_v=True) -> bool + +Help on function inf_set_prefflag in module ida_ida: + +inf_set_prefflag(*args) -> 'bool' + inf_set_prefflag(_v) -> bool + +Help on function inf_set_prefix_show_funcoff in module ida_ida: + +inf_set_prefix_show_funcoff(*args) -> 'bool' + inf_set_prefix_show_funcoff(_v=True) -> bool + +Help on function inf_set_prefix_show_segaddr in module ida_ida: + +inf_set_prefix_show_segaddr(*args) -> 'bool' + inf_set_prefix_show_segaddr(_v=True) -> bool + +Help on function inf_set_prefix_show_stack in module ida_ida: + +inf_set_prefix_show_stack(*args) -> 'bool' + inf_set_prefix_show_stack(_v=True) -> bool + +Help on function inf_set_prefix_truncate_opcode_bytes in module ida_ida: + +inf_set_prefix_truncate_opcode_bytes(*args) -> 'bool' + inf_set_prefix_truncate_opcode_bytes(_v=True) -> bool + +Help on function inf_set_privrange in module ida_ida: + +inf_set_privrange(*args) -> 'bool' + inf_set_privrange(_v) -> bool + +Help on function inf_set_privrange_end_ea in module ida_ida: + +inf_set_privrange_end_ea(*args) -> 'bool' + inf_set_privrange_end_ea(_v) -> bool + +Help on function inf_set_privrange_start_ea in module ida_ida: + +inf_set_privrange_start_ea(*args) -> 'bool' + inf_set_privrange_start_ea(_v) -> bool + +Help on function inf_set_procname in module ida_ida: + +inf_set_procname(*args) -> 'bool' + inf_set_procname(_v, len=size_t(-1)) -> bool + +Help on function inf_set_propagate_regargs in module ida_ida: + +inf_set_propagate_regargs(*args) -> 'bool' + inf_set_propagate_regargs(_v=True) -> bool + +Help on function inf_set_propagate_stkargs in module ida_ida: + +inf_set_propagate_stkargs(*args) -> 'bool' + inf_set_propagate_stkargs(_v=True) -> bool + +Help on function inf_set_readonly_idb in module ida_ida: + +inf_set_readonly_idb(*args) -> 'bool' + inf_set_readonly_idb(_v=True) -> bool + +Help on function inf_set_refcmtnum in module ida_ida: + +inf_set_refcmtnum(*args) -> 'bool' + inf_set_refcmtnum(_v) -> bool + +Help on function inf_set_rename_jumpfunc in module ida_ida: + +inf_set_rename_jumpfunc(*args) -> 'bool' + inf_set_rename_jumpfunc(_v=True) -> bool + +Help on function inf_set_rename_nullsub in module ida_ida: + +inf_set_rename_nullsub(*args) -> 'bool' + inf_set_rename_nullsub(_v=True) -> bool + +Help on function inf_set_short_demnames in module ida_ida: + +inf_set_short_demnames(*args) -> 'bool' + inf_set_short_demnames(_v) -> bool + +Help on function inf_set_should_create_stkvars in module ida_ida: + +inf_set_should_create_stkvars(*args) -> 'bool' + inf_set_should_create_stkvars(_v=True) -> bool + +Help on function inf_set_should_trace_sp in module ida_ida: + +inf_set_should_trace_sp(*args) -> 'bool' + inf_set_should_trace_sp(_v=True) -> bool + +Help on function inf_set_show_all_comments in module ida_ida: + +inf_set_show_all_comments(*args) -> 'bool' + inf_set_show_all_comments(_v=True) -> bool + +Help on function inf_set_show_hidden_funcs in module ida_ida: + +inf_set_show_hidden_funcs(*args) -> 'bool' + inf_set_show_hidden_funcs(_v=True) -> bool + +Help on function inf_set_show_hidden_insns in module ida_ida: + +inf_set_show_hidden_insns(*args) -> 'bool' + inf_set_show_hidden_insns(_v=True) -> bool + +Help on function inf_set_show_hidden_segms in module ida_ida: + +inf_set_show_hidden_segms(*args) -> 'bool' + inf_set_show_hidden_segms(_v=True) -> bool + +Help on function inf_set_show_repeatables in module ida_ida: + +inf_set_show_repeatables(*args) -> 'bool' + inf_set_show_repeatables(_v=True) -> bool + +Help on function inf_set_show_src_linnum in module ida_ida: + +inf_set_show_src_linnum(*args) -> 'bool' + inf_set_show_src_linnum(_v=True) -> bool + +Help on function inf_set_show_xref_fncoff in module ida_ida: + +inf_set_show_xref_fncoff(*args) -> 'bool' + inf_set_show_xref_fncoff(_v=True) -> bool + +Help on function inf_set_show_xref_seg in module ida_ida: + +inf_set_show_xref_seg(*args) -> 'bool' + inf_set_show_xref_seg(_v=True) -> bool + +Help on function inf_set_show_xref_tmarks in module ida_ida: + +inf_set_show_xref_tmarks(*args) -> 'bool' + inf_set_show_xref_tmarks(_v=True) -> bool + +Help on function inf_set_show_xref_val in module ida_ida: + +inf_set_show_xref_val(*args) -> 'bool' + inf_set_show_xref_val(_v=True) -> bool + +Help on function inf_set_snapshot in module ida_ida: + +inf_set_snapshot(*args) -> 'bool' + inf_set_snapshot(_v=True) -> bool + +Help on function inf_set_specsegs in module ida_ida: + +inf_set_specsegs(*args) -> 'bool' + inf_set_specsegs(_v) -> bool + +Help on function inf_set_stack_ldbl in module ida_ida: + +inf_set_stack_ldbl(*args) -> 'bool' + inf_set_stack_ldbl(_v=True) -> bool + +Help on function inf_set_stack_varargs in module ida_ida: + +inf_set_stack_varargs(*args) -> 'bool' + inf_set_stack_varargs(_v=True) -> bool + +Help on function inf_set_start_cs in module ida_ida: + +inf_set_start_cs(*args) -> 'bool' + inf_set_start_cs(_v) -> bool + +Help on function inf_set_start_ea in module ida_ida: + +inf_set_start_ea(*args) -> 'bool' + inf_set_start_ea(_v) -> bool + +Help on function inf_set_start_ip in module ida_ida: + +inf_set_start_ip(*args) -> 'bool' + inf_set_start_ip(_v) -> bool + +Help on function inf_set_start_sp in module ida_ida: + +inf_set_start_sp(*args) -> 'bool' + inf_set_start_sp(_v) -> bool + +Help on function inf_set_start_ss in module ida_ida: + +inf_set_start_ss(*args) -> 'bool' + inf_set_start_ss(_v) -> bool + +Help on function inf_set_strlit_autocmt in module ida_ida: + +inf_set_strlit_autocmt(*args) -> 'bool' + inf_set_strlit_autocmt(_v=True) -> bool + +Help on function inf_set_strlit_break in module ida_ida: + +inf_set_strlit_break(*args) -> 'bool' + inf_set_strlit_break(_v) -> bool + +Help on function inf_set_strlit_flags in module ida_ida: + +inf_set_strlit_flags(*args) -> 'bool' + inf_set_strlit_flags(_v) -> bool + +Help on function inf_set_strlit_name_bit in module ida_ida: + +inf_set_strlit_name_bit(*args) -> 'bool' + inf_set_strlit_name_bit(_v=True) -> bool + +Help on function inf_set_strlit_names in module ida_ida: + +inf_set_strlit_names(*args) -> 'bool' + inf_set_strlit_names(_v=True) -> bool + +Help on function inf_set_strlit_pref in module ida_ida: + +inf_set_strlit_pref(*args) -> 'bool' + inf_set_strlit_pref(_v, len=size_t(-1)) -> bool + +Help on function inf_set_strlit_savecase in module ida_ida: + +inf_set_strlit_savecase(*args) -> 'bool' + inf_set_strlit_savecase(_v=True) -> bool + +Help on function inf_set_strlit_serial_names in module ida_ida: + +inf_set_strlit_serial_names(*args) -> 'bool' + inf_set_strlit_serial_names(_v=True) -> bool + +Help on function inf_set_strlit_sernum in module ida_ida: + +inf_set_strlit_sernum(*args) -> 'bool' + inf_set_strlit_sernum(_v) -> bool + +Help on function inf_set_strlit_zeroes in module ida_ida: + +inf_set_strlit_zeroes(*args) -> 'bool' + inf_set_strlit_zeroes(_v) -> bool + +Help on function inf_set_strtype in module ida_ida: + +inf_set_strtype(*args) -> 'bool' + inf_set_strtype(_v) -> bool + +Help on function inf_set_test_mode in module ida_ida: + +inf_set_test_mode(*args) -> 'bool' + inf_set_test_mode(_v=True) -> bool + +Help on function inf_set_trace_flow in module ida_ida: + +inf_set_trace_flow(*args) -> 'bool' + inf_set_trace_flow(_v=True) -> bool + +Help on function inf_set_truncate_on_del in module ida_ida: + +inf_set_truncate_on_del(*args) -> 'bool' + inf_set_truncate_on_del(_v=True) -> bool + +Help on function inf_set_type_xrefnum in module ida_ida: + +inf_set_type_xrefnum(*args) -> 'bool' + inf_set_type_xrefnum(_v) -> bool + +Help on function inf_set_unicode_strlits in module ida_ida: + +inf_set_unicode_strlits(*args) -> 'bool' + inf_set_unicode_strlits(_v=True) -> bool + +Help on function inf_set_use_allasm in module ida_ida: + +inf_set_use_allasm(*args) -> 'bool' + inf_set_use_allasm(_v=True) -> bool + +Help on function inf_set_use_flirt in module ida_ida: + +inf_set_use_flirt(*args) -> 'bool' + inf_set_use_flirt(_v=True) -> bool + +Help on function inf_set_use_gcc_layout in module ida_ida: + +inf_set_use_gcc_layout(*args) -> 'bool' + inf_set_use_gcc_layout(_v=True) -> bool + +Help on function inf_set_version in module ida_ida: + +inf_set_version(*args) -> 'bool' + inf_set_version(_v) -> bool + +Help on function inf_set_xrefflag in module ida_ida: + +inf_set_xrefflag(*args) -> 'bool' + inf_set_xrefflag(_v) -> bool + +Help on function inf_set_xrefnum in module ida_ida: + +inf_set_xrefnum(*args) -> 'bool' + inf_set_xrefnum(_v) -> bool + +Help on function inf_should_create_stkvars in module ida_ida: + +inf_should_create_stkvars(*args) -> 'bool' + inf_should_create_stkvars() -> bool + +Help on function inf_should_trace_sp in module ida_ida: + +inf_should_trace_sp(*args) -> 'bool' + inf_should_trace_sp() -> bool + +Help on function inf_show_all_comments in module ida_ida: + +inf_show_all_comments(*args) -> 'bool' + inf_show_all_comments() -> bool + +Help on function inf_show_hidden_funcs in module ida_ida: + +inf_show_hidden_funcs(*args) -> 'bool' + inf_show_hidden_funcs() -> bool + +Help on function inf_show_hidden_insns in module ida_ida: + +inf_show_hidden_insns(*args) -> 'bool' + inf_show_hidden_insns() -> bool + +Help on function inf_show_hidden_segms in module ida_ida: + +inf_show_hidden_segms(*args) -> 'bool' + inf_show_hidden_segms() -> bool + +Help on function inf_show_repeatables in module ida_ida: + +inf_show_repeatables(*args) -> 'bool' + inf_show_repeatables() -> bool + +Help on function inf_show_src_linnum in module ida_ida: + +inf_show_src_linnum(*args) -> 'bool' + inf_show_src_linnum() -> bool + +Help on function inf_show_xref_fncoff in module ida_ida: + +inf_show_xref_fncoff(*args) -> 'bool' + inf_show_xref_fncoff() -> bool + +Help on function inf_show_xref_seg in module ida_ida: + +inf_show_xref_seg(*args) -> 'bool' + inf_show_xref_seg() -> bool + +Help on function inf_show_xref_tmarks in module ida_ida: + +inf_show_xref_tmarks(*args) -> 'bool' + inf_show_xref_tmarks() -> bool + +Help on function inf_show_xref_val in module ida_ida: + +inf_show_xref_val(*args) -> 'bool' + inf_show_xref_val() -> bool + +Help on function inf_strlit_autocmt in module ida_ida: + +inf_strlit_autocmt(*args) -> 'bool' + inf_strlit_autocmt() -> bool + +Help on function inf_strlit_name_bit in module ida_ida: + +inf_strlit_name_bit(*args) -> 'bool' + inf_strlit_name_bit() -> bool + +Help on function inf_strlit_names in module ida_ida: + +inf_strlit_names(*args) -> 'bool' + inf_strlit_names() -> bool + +Help on function inf_strlit_savecase in module ida_ida: + +inf_strlit_savecase(*args) -> 'bool' + inf_strlit_savecase() -> bool + +Help on function inf_strlit_serial_names in module ida_ida: + +inf_strlit_serial_names(*args) -> 'bool' + inf_strlit_serial_names() -> bool + +Help on function inf_test_mode in module ida_ida: + +inf_test_mode(*args) -> 'bool' + inf_test_mode() -> bool + +Help on function inf_trace_flow in module ida_ida: + +inf_trace_flow(*args) -> 'bool' + inf_trace_flow() -> bool + +Help on function inf_truncate_on_del in module ida_ida: + +inf_truncate_on_del(*args) -> 'bool' + inf_truncate_on_del() -> bool + +Help on function inf_unicode_strlits in module ida_ida: + +inf_unicode_strlits(*args) -> 'bool' + inf_unicode_strlits() -> bool + +Help on function inf_use_flirt in module ida_ida: + +inf_use_flirt(*args) -> 'bool' + inf_use_flirt() -> bool + +Help on function is_filetype_like_binary in module ida_ida: + +is_filetype_like_binary(*args) -> 'bool' + is_filetype_like_binary(ft) -> bool + + + Is unstructured input file? + + + @param ft (C++: filetype_t) + +Help on function in module ida_ida: + + lambda *args + +Help on function to_ea in module ida_ida: + +to_ea(*args) -> 'ea_t' + to_ea(reg_cs, reg_ip) -> ea_t + + + Convert (sel,off) value to a linear address. + + + @param reg_cs (C++: sel_t) + @param reg_ip (C++: uval_t) + +=== ida_ida EPYDOC INJECTIONS === +ida_ida.ABI_8ALIGN4 +""" +4 byte alignment for 8byte scalars (__int64/double) inside structures? +""" + +ida_ida.ABI_BIGARG_ALIGN +""" +(e.g. __int64 argument should be 8byte aligned on some 32bit +platforms) + +use natural type alignment for argument if the alignment exceeds +native word size +""" + +ida_ida.ABI_GCC_LAYOUT +""" +use gcc layout for udts (used for mingw) +""" + +ida_ida.ABI_HARD_FLOAT +""" +use the floating-point register set +""" + +ida_ida.ABI_HUGEARG_ALIGN +""" +use natural type alignment for an argument even if its alignment +exceeds double native word size (the default is to use double word +max). e.g. if this bit is set, __int128 has 16-byte alignment +""" + +ida_ida.ABI_MAP_STKARGS +""" +register arguments are mapped to stack area (and consume stack slots) +""" + +ida_ida.ABI_PACK_STKARGS +""" +do not align stack arguments to stack slots +""" + +ida_ida.ABI_SET_BY_USER +""" +compiler/abi were set by user flag and require SETCOMP_BY_USER flag to +be changed +""" + +ida_ida.ABI_STACK_LDBL +""" +long double arguments are passed on stack +""" + +ida_ida.ABI_STACK_VARARGS +""" +varargs are always passed on stack (even when there are free +registers) +""" + +ida_ida.AF2_DOEH +""" +Handle EH information. +""" + +ida_ida.AF2_DORTTI +""" +Handle RTTI information. +""" + +ida_ida.AF2_MACRO +""" +Try to combine several instructions into a macro instruction +""" + +ida_ida.AF_ANORET +""" +Perform 'no-return' analysis. +""" + +ida_ida.AF_CHKUNI +""" +Check for unicode strings. +""" + +ida_ida.AF_CODE +""" +Trace execution flow. +""" + +ida_ida.AF_DATOFF +""" +Automatically convert data to offsets. +""" + +ida_ida.AF_DOCODE +""" +Coagulate code segs at the final pass. +""" + +ida_ida.AF_DODATA +""" +Coagulate data segs at the final pass. +""" + +ida_ida.AF_DREFOFF +""" +Create offset if data xref to seg32 exists. +""" + +ida_ida.AF_FINAL +""" +Final pass of analysis. +""" + +ida_ida.AF_FIXUP +""" +Create offsets and segments using fixup info. +""" + +ida_ida.AF_FLIRT +""" +Use flirt signatures. +""" + +ida_ida.AF_FTAIL +""" +Create function tails. +""" + +ida_ida.AF_HFLIRT +""" +Automatically hide library functions. +""" + +ida_ida.AF_IMMOFF +""" +Convert 32bit instruction operand to offset. +""" + +ida_ida.AF_JFUNC +""" +Rename jump functions as j_... +""" + +ida_ida.AF_JUMPTBL +""" +Locate and create jump tables. +""" + +ida_ida.AF_LVAR +""" +Create stack variables. +""" + +ida_ida.AF_MARKCODE +""" +Mark typical code sequences as code. +""" + +ida_ida.AF_MEMFUNC +""" +Try to guess member function types. +""" + +ida_ida.AF_NULLSUB +""" +Rename empty functions as nullsub_... +""" + +ida_ida.AF_PROC +""" +Create functions if call is present. +""" + +ida_ida.AF_PROCPTR +""" +Create function if data xref data->code32 exists. +""" + +ida_ida.AF_PURDAT +""" +Control flow to data segment is ignored. +""" + +ida_ida.AF_REGARG +""" +Propagate register argument information. +""" + +ida_ida.AF_SIGCMT +""" +Append a signature name comment for recognized anonymous library +functions. +""" + +ida_ida.AF_SIGMLT +""" +Allow recognition of several copies of the same function. +""" + +ida_ida.AF_STKARG +""" +Propagate stack argument information. +""" + +ida_ida.AF_STRLIT +""" +Create string literal if data xref exists. +""" + +ida_ida.AF_TRACE +""" +Trace stack pointer. +""" + +ida_ida.AF_TRFUNC +""" +Truncate functions upon code deletion. +""" + +ida_ida.AF_UNK +""" +Delete instructions with no xrefs. +""" + +ida_ida.AF_USED +""" +Analyze and create all xrefs. +""" + +ida_ida.AF_VERSP +""" +Perform full SP-analysis. (\\ph{verify_sp}) +""" + +ida_ida.DEMNAM_CMNT +""" +display demangled names as comments +""" + +ida_ida.DEMNAM_FIRST +""" +override type info +""" + +ida_ida.DEMNAM_GCC3 +""" +assume gcc3 names (valid for gnu compiler) +""" + +ida_ida.DEMNAM_MASK +""" +mask for name form +""" + +ida_ida.DEMNAM_NAME +""" +display demangled names as regular names +""" + +ida_ida.DEMNAM_NONE +""" +don't display demangled names +""" + +ida_ida.IDAINFO_TAG_SIZE +""" +The database parameters. This structure is kept in the ida database. +It contains the essential parameters for the current program +""" + +ida_ida.IDB_COMPRESSED +""" +compress & pack database components +""" + +ida_ida.IDB_PACKED +""" +pack database components into .idb +""" + +ida_ida.IDB_UNPACKED +""" +leave database components unpacked +""" + +ida_ida.INFFL_ALLASM +""" +the target assembler + +may use constructs not supported by +""" + +ida_ida.INFFL_AUTO +""" +Autoanalysis is enabled? +""" + +ida_ida.INFFL_CHKOPS +""" +check manual operands? (unused) +""" + +ida_ida.INFFL_GRAPH_VIEW +""" +currently using graph options (\\dto{graph}) +""" + +ida_ida.INFFL_LOADIDC +""" +loading an idc file that contains database info +""" + +ida_ida.INFFL_NMOPS +""" +allow non-matched operands? (unused) +""" + +ida_ida.INFFL_NOUSER +""" +do not store user info in the database +""" + +ida_ida.INFFL_READONLY +""" +(internal) temporary interdiction to modify the database +""" + +ida_ida.LFLG_64BIT +""" +64-bit program? +""" + +ida_ida.LFLG_COMPRESS +""" +compress the database? +""" + +ida_ida.LFLG_DBG_NOPATH +""" +do not store input full path in debugger process options +""" + +ida_ida.LFLG_FLAT_OFF32 +""" +treat 'REF_OFF32' as 32-bit offset for 16bit segments (otherwise try +SEG16:OFF16) +""" + +ida_ida.LFLG_IS_DLL +""" +Is dynamic library? +""" + +ida_ida.LFLG_KERNMODE +""" +is kernel mode binary? +""" + +ida_ida.LFLG_MSF +""" +Byte order: is MSB first? +""" + +ida_ida.LFLG_PACK +""" +pack the database? +""" + +ida_ida.LFLG_PC_FLAT +""" +32-bit program? +""" + +ida_ida.LFLG_PC_FPP +""" +decode floating point processor instructions? +""" + +ida_ida.LFLG_SNAPSHOT +""" +memory snapshot was taken? +""" + +ida_ida.LFLG_WIDE_HBF +""" +(wide bytes: \\ph{dnbits} > 8) + +Bit order of wide bytes: high byte first? +""" + +ida_ida.LMT_EMPTY +""" +empty lines at the end of basic blocks +""" + +ida_ida.LMT_THICK +""" +thick borders +""" + +ida_ida.LMT_THIN +""" +thin borders +""" + +ida_ida.LN_AUTO +""" +include autogenerated names +""" + +ida_ida.LN_NORMAL +""" +include normal names +""" + +ida_ida.LN_PUBLIC +""" +include public names +""" + +ida_ida.LN_WEAK +""" +include weak names +""" + +ida_ida.OFLG_GEN_ASSUME +""" +Generate 'assume' directives? +""" + +ida_ida.OFLG_GEN_NULL +""" +Generate empty lines? +""" + +ida_ida.OFLG_GEN_ORG +""" +Generate 'org' directives? +""" + +ida_ida.OFLG_GEN_TRYBLKS +""" +Generate try/catch directives? +""" + +ida_ida.OFLG_LZERO +""" +generate leading zeroes in numbers +""" + +ida_ida.OFLG_PREF_SEG +""" +line prefixes with segment name? +""" + +ida_ida.OFLG_SHOW_AUTO +""" +Display autoanalysis indicator? +""" + +ida_ida.OFLG_SHOW_PREF +""" +Show line prefixes? +""" + +ida_ida.OFLG_SHOW_VOID +""" +Display void marks? +""" + +ida_ida.PREF_FNCOFF +""" +show function offsets? +""" + +ida_ida.PREF_PFXTRUNC +""" +truncate instruction bytes if they would need more than 1 line +""" + +ida_ida.PREF_SEGADR +""" +show segment addresses? +""" + +ida_ida.PREF_STACK +""" +show stack pointer? +""" + +ida_ida.SCF_ALLCMT +""" +comment all lines? +""" + +ida_ida.SCF_LINNUM +""" +show source line numbers +""" + +ida_ida.SCF_NOCMT +""" +no comments at all +""" + +ida_ida.SCF_RPTCMT +""" +show repeatable comments? +""" + +ida_ida.SCF_SHHID_FUNC +""" +show hidden functions +""" + +ida_ida.SCF_SHHID_ITEM +""" +show hidden instructions +""" + +ida_ida.SCF_SHHID_SEGM +""" +show hidden segments +""" + +ida_ida.SCF_TESTMODE +""" +testida.idc is running +""" + +ida_ida.STRF_AUTO +""" +names have 'autogenerated' bit? +""" + +ida_ida.STRF_COMMENT +""" +generate auto comment for string references? +""" + +ida_ida.STRF_GEN +""" +generate names? +""" + +ida_ida.STRF_SAVECASE +""" +preserve case of strings for identifiers +""" + +ida_ida.STRF_SERIAL +""" +generate serial names? +""" + +ida_ida.STRF_UNICODE +""" +unicode strings are present? +""" + +ida_ida.SW_SEGXRF +""" +show segments in xrefs? +""" + +ida_ida.SW_XRFFNC +""" +show function offsets? +""" + +ida_ida.SW_XRFMRK +""" +show xref type marks? +""" + +ida_ida.SW_XRFVAL +""" +show xref values? (otherwise-"...") +""" + +ida_ida.UA_MAXOP +""" +max number of operands allowed for an instruction +""" +=== ida_ida EPYDOC INJECTIONS END === +Help on class CustomIDAMemo in module ida_kernwin: + +class CustomIDAMemo(View_Hooks) + | Proxy of C++ View_Hooks class. + | + | Method resolution order: + | CustomIDAMemo + | View_Hooks + | builtins.object + | + | Methods defined here: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | __init__(self) + | __init__(self, _flags=0) -> View_Hooks + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | view_activated(self, view) + | + | view_click(self, view, ve) + | view_click(self, view, event) + | + | view_close(self, view, *args) + | view_close(self, view) + | + | view_curpos(self, view, *args) + | view_curpos(self, view) + | + | view_dblclick(self, view, ve) + | view_dblclick(self, view, event) + | + | view_deactivated(self, view) + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, view, ve) + | view_mouse_over(self, view, event) + | + | view_switched(self, view, rt) + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_View_Hooks(...) + | delete_View_Hooks(self) + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | view_created(self, *args) -> 'void' + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on __IDAPython_Completion_Util in module ida_idaapi object: + +class __IDAPython_Completion_Util(builtins.object) + | Internal utility class for auto-completion support + | + | Methods defined here: + | + | __call__(self, line, x) + | Call self as a function. + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | debug(self, *args) + | + | dir_namespace(self, m, prefix) + | + | get_candidates(self, qname, line, match_syntax_char) + | + | maybe_extend_syntactically(self, ns, name, line, syntax_char) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | QNAME_PAT = re.compile('([a-zA-Z_]([a-zA-Z0-9_\\.]*)?)') + +Help on function IDAPython_ExecScript in module ida_idaapi: + +IDAPython_ExecScript(script, g, print_error=True) + Run the specified script. + It also addresses http://code.google.com/p/idapython/issues/detail?id=42 + + This function is used by the low-level plugin code. + +Help on function IDAPython_ExecSystem in module ida_idaapi: + +IDAPython_ExecSystem(cmd) + Executes a command with popen(). + +Help on function IDAPython_FormatExc in module ida_idaapi: + +IDAPython_FormatExc(etype, value=None, tb=None, limit=None) + This function is used to format an exception given the + values returned by a PyErr_Fetch() + +Help on function IDAPython_LoadProcMod in module ida_idaapi: + +IDAPython_LoadProcMod(script, g, print_error=True) + Load processor module. + +Help on function IDAPython_UnLoadProcMod in module ida_idaapi: + +IDAPython_UnLoadProcMod(script, g, print_error=True) + Unload processor module. + +Help on class IDAPython_displayhook in module ida_idaapi: + +class IDAPython_displayhook(builtins.object) + | # ------------------------------------------------------------ + | + | Methods defined here: + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | _print_hex(self, x) + | + | displayhook(self, item) + | + | format_item(self, num_printer, storage, item) + | + | format_seq(self, num_printer, storage, item, opn, cls) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class PyIdc_cvt_int64__ in module ida_idaapi: + +class PyIdc_cvt_int64__(pyidc_cvt_helper__) + | Helper class for explicitly representing VT_INT64 values + | + | Method resolution order: + | PyIdc_cvt_int64__ + | pyidc_cvt_helper__ + | builtins.object + | + | Methods defined here: + | + | _PyIdc_cvt_int64____op = __op(self, op_n, other, rev=False) + | + | __add__(self, other) + | + | __div__(self, other) + | + | __init__(self, v) + | Initialize self. See help(type(self)) for accurate signature. + | + | __mul__(self, other) + | + | __radd__(self, other) + | + | __rdiv__(self, other) + | + | __rmul__(self, other) + | + | __rsub__(self, other) + | + | __sub__(self, other) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _PyIdc_cvt_int64____op_table = {0: 'void' + disable_script_timeout() + + + Disables the script timeout and hides the script wait box. + Calling L{set_script_timeout} will not have any effects until the script is compiled and executed again + + @return: None + +Help on function enable_extlang_python in module ida_idaapi: + +enable_extlang_python(*args) -> 'void' + enable_extlang_python(enable) + + + Enables or disables Python extlang. + When enabled, all expressions will be evaluated by Python. + @param enable: Set to True to enable, False otherwise + +Help on function enable_python_cli in module ida_idaapi: + +enable_python_cli(*args) -> 'void' + enable_python_cli(enable) + +Help on function format_basestring in module ida_idaapi: + +format_basestring(*args) -> 'PyObject *' + format_basestring(_in) -> PyObject * + +Help on function get_inf_structure in module ida_idaapi: + +get_inf_structure(*args) -> 'idainfo *' + get_inf_structure() -> idainfo + + + Returns the global variable 'inf' (an instance of idainfo structure, see ida.hpp) + +Help on class loader_input_t in module ida_idaapi: + +class loader_input_t(builtins.object) + | Proxy of C++ loader_input_t class. + | + | + | A helper class to work with linput_t related functions. + | This class is also used by file loaders scripts. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, pycapsule=None) -> loader_input_t + | + | + | Closes the file + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_loader_input_t(...) + | delete_loader_input_t(self) + | + | close(self, *args) -> 'void' + | close(self) + | + | file2base(self, *args) -> 'int' + | file2base(self, pos, ea1, ea2, patchable) -> int + | + | + | Load portion of file into the database + | This function will include (ea1..ea2) into the addressing space of the + | program (make it enabled) + | @param li: pointer ot input source + | @param pos: position in the file + | @param (ea1..ea2): range of destination linear addresses + | @param patchable: should the kernel remember correspondance of + | file offsets to linear addresses. + | @return: 1-ok,0-read error, a warning is displayed + | + | filename(self, *args) -> 'PyObject *' + | filename(self) -> PyObject * + | + | get_byte(self, *args) -> 'PyObject *' + | get_byte(self) -> PyObject * + | + | + | Reads a single byte from the file. Returns None if EOF or the read byte + | + | get_linput(self, *args) -> 'linput_t *' + | get_linput(self) -> linput_t * + | + | gets(self, *args) -> 'PyObject *' + | gets(self, len) -> PyObject * + | + | + | Reads a line from the input file. Returns the read line or None + | + | getz(self, *args) -> 'PyObject *' + | getz(self, sz, fpos=-1) -> PyObject * + | + | + | Returns a zero terminated string at the given position + | @param sz: maximum size of the string + | @param fpos: if != -1 then seek will be performed before reading + | @return: The string or None on failure. + | + | open(self, *args) -> 'bool' + | open(self, filename, remote=False) -> bool + | + | + | Opens a file (or a remote file) + | @return: Boolean + | + | open_memory(self, *args) -> 'bool' + | open_memory(self, start, size=0) -> bool + | + | + | Create a linput for process memory (By internally calling idaapi.create_memory_linput()) + | This linput will use dbg->read_memory() to read data + | @param start: starting address of the input + | @param size: size of the memory range to represent as linput + | if unknown, may be passed as 0 + | + | opened(self, *args) -> 'bool' + | opened(self) -> bool + | + | + | Checks if the file is opened or not + | + | read(self, *args) -> 'PyObject *' + | read(self, size) -> PyObject * + | + | + | Reads from the file. Returns the buffer or None + | + | readbytes(self, *args) -> 'PyObject *' + | readbytes(self, size, big_endian) -> PyObject * + | + | + | Similar to read() but it respect the endianness + | + | seek(self, *args) -> 'int64' + | seek(self, pos, whence=SEEK_SET) -> int64 + | + | + | Set input source position + | @return: the new position (not 0 as fseek!) + | + | set_linput(self, *args) -> 'void' + | set_linput(self, linput) + | + | + | Links the current loader_input_t instance to a linput_t instance + | + | size(self, *args) -> 'int64' + | size(self) -> int64 + | + | tell(self, *args) -> 'int64' + | tell(self) -> int64 + | + | + | Returns the current position + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | from_capsule(*args) -> 'loader_input_t *' + | from_capsule(pycapsule) -> loader_input_t + | + | from_fp(*args) -> 'loader_input_t *' + | from_fp(fp) -> loader_input_t + | + | + | A static method to construct an instance from a FILE* + | + | from_linput(*args) -> 'loader_input_t *' + | from_linput(linput) -> loader_input_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __idc_cvt_id__ + | loader_input_t___idc_cvt_id___get(self) -> int + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on function loader_input_t_from_capsule in module ida_idaapi: + +loader_input_t_from_capsule(*args) -> 'loader_input_t *' + loader_input_t_from_capsule(pycapsule) -> loader_input_t + +Help on function loader_input_t_from_fp in module ida_idaapi: + +loader_input_t_from_fp(*args) -> 'loader_input_t *' + loader_input_t_from_fp(fp) -> loader_input_t + +Help on function loader_input_t_from_linput in module ida_idaapi: + +loader_input_t_from_linput(*args) -> 'loader_input_t *' + loader_input_t_from_linput(linput) -> loader_input_t + +Help on function notify_when in module ida_idaapi: + +notify_when(when, callback) + Register a callback that will be called when an event happens. + @param when: one of NW_XXXX constants + @param callback: This callback prototype varies depending on the 'when' parameter: + The general callback format: + def notify_when_callback(nw_code) + In the case of NW_OPENIDB: + def notify_when_callback(nw_code, is_old_database) + @return: Boolean + +Help on class object_t in module ida_idaapi: + +class object_t(builtins.object) + | Helper class used to initialize empty objects + | + | Methods defined here: + | + | __getitem__(self, idx) + | Allow access to object attributes by index (like dictionaries) + | + | __init__(self, **kwds) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function parse_command_line3 in module ida_idaapi: + +parse_command_line3(*args) -> 'PyObject *' + parse_command_line3(cmdline) -> PyObject * + +Help on class plugin_t in module ida_idaapi: + +class plugin_t(pyidc_opaque_object_t) + | Base class for all scripted plugins. + | + | Method resolution order: + | plugin_t + | pyidc_opaque_object_t + | builtins.object + | + | Data descriptors inherited from pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on class py_clinked_object_t in module ida_idaapi: + +class py_clinked_object_t(pyidc_opaque_object_t) + | This is a utility and base class for C linked objects + | + | Method resolution order: + | py_clinked_object_t + | pyidc_opaque_object_t + | builtins.object + | + | Methods defined here: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | __init__(self, lnk=None) + | Initialize self. See help(type(self)) for accurate signature. + | + | _create_clink(self) + | Overwrite me. + | Creates a new clink + | @return: PyCapsule representing the C link + | + | _del_clink(self, lnk) + | Overwrite me. + | This method deletes the link + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | _get_clink_ptr(self) + | Overwrite me. + | Returns the C link pointer as a 64bit number + | + | assign(self, other) + | Overwrite me. + | This method allows you to assign an instance contents to anothers + | @return: Boolean + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function pycim_get_widget in module ida_idaapi: + +pycim_get_widget(*args) -> 'TWidget *' + pycim_get_widget(_self) -> TWidget * + +Help on function pycim_view_close in module ida_idaapi: + +pycim_view_close(*args) -> 'void' + pycim_view_close(_self) + +Help on function pygc_create_groups in module ida_idaapi: + +pygc_create_groups(*args) -> 'PyObject *' + pygc_create_groups(_self, groups_infos) -> PyObject * + +Help on function pygc_delete_groups in module ida_idaapi: + +pygc_delete_groups(*args) -> 'PyObject *' + pygc_delete_groups(_self, groups, new_current) -> PyObject * + +Help on function pygc_refresh in module ida_idaapi: + +pygc_refresh(*args) -> 'void' + pygc_refresh(_self) + +Help on function pygc_set_groups_visibility in module ida_idaapi: + +pygc_set_groups_visibility(*args) -> 'PyObject *' + pygc_set_groups_visibility(_self, groups, expand, new_current) -> PyObject * + +Help on class pyidc_cvt_helper__ in module ida_idaapi: + +class pyidc_cvt_helper__(builtins.object) + | This is a special helper object that helps detect which kind + | of object is this python object wrapping and how to convert it + | back and from IDC. + | This object is characterized by its special attribute and its value + | + | Methods defined here: + | + | __init__(self, cvt_id, value) + | Initialize self. See help(type(self)) for accurate signature. + | + | _pyidc_cvt_helper____get_value = __get_value(self) + | + | _pyidc_cvt_helper____set_value = __set_value(self, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | value + +Help on class pyidc_opaque_object_t in module ida_idaapi: + +class pyidc_opaque_object_t(builtins.object) + | This is the base class for all Python<->IDC opaque objects + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __idc_cvt_id__ = 2 + +Help on function replfun in module ida_idaapi: + +replfun(func) + +Help on function require in module ida_idaapi: + +require(modulename, package=None) + Load, or reload a module. + + When under heavy development, a user's tool might consist of multiple + modules. If those are imported using the standard 'import' mechanism, + there is no guarantee that the Python implementation will re-read + and re-evaluate the module's Python code. In fact, it usually doesn't. + What should be done instead is 'reload()'-ing that module. + + This is a simple helper function that will do just that: In case the + module doesn't exist, it 'import's it, and if it does exist, + 'reload()'s it. + + The importing module (i.e., the module calling require()) will have + the loaded module bound to its globals(), under the name 'modulename'. + (If require() is called from the command line, the importing module + will be '__main__'.) + + For more information, see: . + +Help on function set_script_timeout in module ida_idaapi: + +set_script_timeout(*args) -> 'int' + set_script_timeout(timeout) -> int + + + Changes the script timeout value. The script wait box dialog will be hidden and shown again when the timeout elapses. + See also L{disable_script_timeout}. + + @param timeout: This value is in seconds. + If this value is set to zero then the script will never timeout. + @return: Returns the old timeout value + +Help on function struct_unpack in module ida_idaapi: + +struct_unpack(buffer, signed=False, offs=0) + Unpack a buffer given its length and offset using struct.unpack_from(). + This function will know how to unpack the given buffer by using the lookup table '__struct_unpack_table' + If the buffer is of unknown length then None is returned. Otherwise the unpacked value is returned. + +Help on function get_mark_comment in module ida_idc: + +get_mark_comment(*args) -> 'PyObject *' + get_mark_comment(slot) -> PyObject * + +Help on function get_marked_pos in module ida_idc: + +get_marked_pos(*args) -> 'ea_t' + get_marked_pos(slot) -> ea_t + +Help on function mark_position in module ida_idc: + +mark_position(*args) -> 'void' + mark_position(ea, lnnum, x, y, slot, comment) + +Help on Appcall__ in module ida_idd object: + +class Appcall__(builtins.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | _Appcall____get_consts = __get_consts(self) + | + | __getattr__(self, name_or_ea) + | Allows you to call functions as if they were member functions (by returning a callable object) + | + | __getitem__(self, idx) + | Use self[func_name] syntax if the function name contains invalid characters for an attribute name + | See __getattr___ + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | UTF16(s) + | + | _Appcall____name_or_ea = __name_or_ea(name_or_ea) + | Function that accepts a name or an ea and checks if the address is enabled. + | If a name is passed then idaapi.get_name_ea() is applied to retrieve the name + | @return: + | - Returns the resolved EA or + | - Raises an exception if the address is not enabled + | + | _Appcall____typedecl_or_tinfo = __typedecl_or_tinfo(typedecl_or_tinfo, flags=None) + | Function that accepts a tinfo_t object or type declaration as a string + | If a type declaration is passed then ida_typeinf.parse_decl() is applied to prepare tinfo_t object + | @return: + | - Returns the tinfo_t object + | - Raises an exception if the declaration cannot be parsed + | + | array(type_name) + | Defines an array type. Later you need to pack() / unpack() + | + | buffer(str=None, size=0, fill='\x00') + | Creates a string buffer. The returned value (r) will be a byref object. + | Use r.value to get the contents and r.size to get the buffer's size + | + | byref(val) + | Method to create references to immutable objects + | Currently we support references to int/strings + | Objects need not be passed by reference (this will be done automatically) + | + | cleanup_appcall(tid=0) + | Equivalent to IDC's CleanupAppcall() + | + | cstr(val) + | + | get_appcall_options() + | Return the global Appcall options + | + | int64(v) + | Whenever a 64bit number is needed use this method to construct an object + | + | obj(**kwds) + | Returns an empty object or objects with attributes as passed via its keywords arguments + | + | proto(name_or_ea, proto_or_tinfo, flags=None) + | Allows you to instantiate an appcall (callable object) with the desired prototype + | @param name_or_ea: The name of the function (will be resolved with LocByName()) + | @param proto_or_tinfo: function prototype as a string or type of the function as tinfo_t object + | @return: + | - On failure it raises an exception if the prototype could not be parsed + | or the address is not resolvable + | - Returns a callbable Appcall instance with the given prototypes and flags + | + | set_appcall_options(opt) + | Method to change the Appcall options globally (not per Appcall) + | + | typedobj(typedecl_or_tinfo, ea=None) + | Returns an appcall object for a type (can be given as tinfo_t object or + | as a string declaration) + | One can then use retrieve() member method + | @param ea: Optional parameter that later can be used to retrieve the type + | @return: Appcall object or raises ValueError exception + | + | unicode = UTF16(s) + | + | valueof(name, default=0) + | Returns the numeric value of a given name string. + | If the name could not be resolved then the default value will be returned + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Consts + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | APPCALL_DEBEV = 2 + | + | APPCALL_MANUAL = 1 + | + | APPCALL_TIMEOUT = 4 + | + | __name__ = 'Appcall__' + +Help on class Appcall__ in module ida_idd: + +class Appcall__(builtins.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | _Appcall____get_consts = __get_consts(self) + | + | __getattr__(self, name_or_ea) + | Allows you to call functions as if they were member functions (by returning a callable object) + | + | __getitem__(self, idx) + | Use self[func_name] syntax if the function name contains invalid characters for an attribute name + | See __getattr___ + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | UTF16(s) + | + | _Appcall____name_or_ea = __name_or_ea(name_or_ea) + | Function that accepts a name or an ea and checks if the address is enabled. + | If a name is passed then idaapi.get_name_ea() is applied to retrieve the name + | @return: + | - Returns the resolved EA or + | - Raises an exception if the address is not enabled + | + | _Appcall____typedecl_or_tinfo = __typedecl_or_tinfo(typedecl_or_tinfo, flags=None) + | Function that accepts a tinfo_t object or type declaration as a string + | If a type declaration is passed then ida_typeinf.parse_decl() is applied to prepare tinfo_t object + | @return: + | - Returns the tinfo_t object + | - Raises an exception if the declaration cannot be parsed + | + | array(type_name) + | Defines an array type. Later you need to pack() / unpack() + | + | buffer(str=None, size=0, fill='\x00') + | Creates a string buffer. The returned value (r) will be a byref object. + | Use r.value to get the contents and r.size to get the buffer's size + | + | byref(val) + | Method to create references to immutable objects + | Currently we support references to int/strings + | Objects need not be passed by reference (this will be done automatically) + | + | cleanup_appcall(tid=0) + | Equivalent to IDC's CleanupAppcall() + | + | cstr(val) + | + | get_appcall_options() + | Return the global Appcall options + | + | int64(v) + | Whenever a 64bit number is needed use this method to construct an object + | + | obj(**kwds) + | Returns an empty object or objects with attributes as passed via its keywords arguments + | + | proto(name_or_ea, proto_or_tinfo, flags=None) + | Allows you to instantiate an appcall (callable object) with the desired prototype + | @param name_or_ea: The name of the function (will be resolved with LocByName()) + | @param proto_or_tinfo: function prototype as a string or type of the function as tinfo_t object + | @return: + | - On failure it raises an exception if the prototype could not be parsed + | or the address is not resolvable + | - Returns a callbable Appcall instance with the given prototypes and flags + | + | set_appcall_options(opt) + | Method to change the Appcall options globally (not per Appcall) + | + | typedobj(typedecl_or_tinfo, ea=None) + | Returns an appcall object for a type (can be given as tinfo_t object or + | as a string declaration) + | One can then use retrieve() member method + | @param ea: Optional parameter that later can be used to retrieve the type + | @return: Appcall object or raises ValueError exception + | + | unicode = UTF16(s) + | + | valueof(name, default=0) + | Returns the numeric value of a given name string. + | If the name could not be resolved then the default value will be returned + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Consts + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | APPCALL_DEBEV = 2 + | + | APPCALL_MANUAL = 1 + | + | APPCALL_TIMEOUT = 4 + | + | __name__ = 'Appcall__' + +Help on class Appcall_array__ in module ida_idd: + +class Appcall_array__(builtins.object) + | This class is used with Appcall.array() method + | + | Methods defined here: + | + | __init__(self, tp) + | Initialize self. See help(type(self)) for accurate signature. + | + | pack(self, L) + | Packs a list or tuple into a byref buffer + | + | try_to_convert_to_list(self, obj) + | Is this object a list? We check for the existance of attribute zero and attribute self.size-1 + | + | unpack(self, buf, as_list=True) + | Unpacks an array back into a list or an object + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class Appcall_callable__ in module ida_idd: + +class Appcall_callable__(builtins.object) + | Helper class to issue appcalls using a natural syntax: + | appcall.FunctionNameInTheDatabase(arguments, ....) + | or + | appcall["Function@8"](arguments, ...) + | or + | f8 = appcall["Function@8"] + | f8(arg1, arg2, ...) + | or + | o = appcall.obj() + | i = byref(5) + | appcall.funcname(arg1, i, "hello", o) + | + | Methods defined here: + | + | _Appcall_callable____get_ea = __get_ea(self) + | + | _Appcall_callable____get_fields = __get_fields(self) + | + | _Appcall_callable____get_options = __get_options(self) + | + | _Appcall_callable____get_size = __get_size(self) + | + | _Appcall_callable____get_tif = __get_tif(self) + | + | _Appcall_callable____get_timeout = __get_timeout(self) + | + | _Appcall_callable____get_type = __get_type(self) + | + | _Appcall_callable____set_ea = __set_ea(self, val) + | + | _Appcall_callable____set_options = __set_options(self, v) + | + | _Appcall_callable____set_timeout = __set_timeout(self, v) + | + | __call__(self, *args) + | Make object callable. We redirect execution to idaapi.appcall() + | + | __init__(self, ea, tinfo_or_typestr=None, fields=None) + | Initializes an appcall with a given function ea + | + | retrieve(self, src=None, flags=0) + | Unpacks a typed object from the database if an ea is given or from a string if a string was passed + | @param src: the address of the object or a string + | @return: Returns a tuple of boolean and object or error number (Bool, Error | Object). + | + | store(self, obj, dest_ea=None, base_ea=0, flags=0) + | Packs an object into a given ea if provided or into a string if no address was passed. + | @param obj: The object to pack + | @param dest_ea: If packing to idb this will be the store location + | @param base_ea: If packing to a buffer, this will be the base that will be used to relocate the pointers + | + | @return: + | - If packing to a string then a Tuple(Boolean, packed_string or error code) + | - If packing to the database then a return code is returned (0 is success) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | + | fields + | + | options + | + | size + | + | tif + | + | timeout + | + | type + +Help on class Appcall_consts__ in module ida_idd: + +class Appcall_consts__(builtins.object) + | Helper class used by Appcall.Consts attribute + | It is used to retrieve constants via attribute access + | + | Methods defined here: + | + | __getattr__(self, attr) + | + | __init__(self, default=None) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function appcall in module ida_idd: + +appcall(*args) -> 'PyObject *' + appcall(func_ea, tid, _type_or_none, _fields, arg_list) -> PyObject * + +Help on class bptaddr_t in module ida_idd: + +class bptaddr_t(builtins.object) + | Proxy of C++ bptaddr_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bptaddr_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bptaddr_t(...) + | delete_bptaddr_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hea + | bptaddr_t_hea_get(self) -> ea_t + | + | kea + | bptaddr_t_kea_get(self) -> ea_t + | + | thisown + | The membership flag + +Help on class call_stack_info_t in module ida_idd: + +class call_stack_info_t(builtins.object) + | Proxy of C++ call_stack_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> call_stack_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_call_stack_info_t(...) + | delete_call_stack_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | callea + | call_stack_info_t_callea_get(self) -> ea_t + | + | fp + | call_stack_info_t_fp_get(self) -> ea_t + | + | funcea + | call_stack_info_t_funcea_get(self) -> ea_t + | + | funcok + | call_stack_info_t_funcok_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class call_stack_t in module ida_idd: + +class call_stack_t(builtins.object) + | Proxy of C++ qvector< call_stack_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'call_stack_info_t const &' + | __getitem__(self, i) -> call_stack_info_t + | + | __init__(self, *args) + | __init__(self) -> call_stack_t + | __init__(self, x) -> call_stack_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_call_stack_t(...) + | delete_call_stack_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'call_stack_info_t const &' + | at(self, _idx) -> call_stack_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< call_stack_info_t >::const_iterator' + | begin(self) -> call_stack_info_t + | begin(self) -> call_stack_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< call_stack_info_t >::const_iterator' + | end(self) -> call_stack_info_t + | end(self) -> call_stack_info_t + | + | erase(self, *args) -> 'qvector< call_stack_info_t >::iterator' + | erase(self, it) -> call_stack_info_t + | erase(self, first, last) -> call_stack_info_t + | + | extract(self, *args) -> 'call_stack_info_t *' + | extract(self) -> call_stack_info_t + | + | find(self, *args) -> 'qvector< call_stack_info_t >::const_iterator' + | find(self, x) -> call_stack_info_t + | find(self, x) -> call_stack_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=call_stack_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< call_stack_info_t >::iterator' + | insert(self, it, x) -> call_stack_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'call_stack_info_t &' + | push_back(self, x) + | push_back(self) -> call_stack_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function can_exc_continue in module ida_idd: + +can_exc_continue(*args) -> 'bool' + can_exc_continue(ev) -> bool + +Help on function cleanup_appcall in module ida_idd: + +cleanup_appcall(*args) -> 'error_t' + cleanup_appcall(tid) -> error_t + + + Cleanup after manual appcall. + + @param tid: thread to use. NO_THREAD means to use the current thread + The application state is restored as it was before calling + the last appcall(). Nested appcalls are supported. (C++: + thid_t) + @return: eOk if successful, otherwise an error code + +Help on function dbg_appcall in module ida_idd: + +dbg_appcall(*args) -> 'error_t' + dbg_appcall(retval, func_ea, tid, ptif, argv, argnum) -> error_t + + + Call a function from the debugged application. + + @param retval (C++: idc_value_t *) + @param func_ea: address to call (C++: ea_t) + @param tid: thread to use. NO_THREAD means to use the current thread + (C++: thid_t) + @param ptif: pointer to type of the function to call (C++: const + tinfo_t *) + @param argv: array of arguments (C++: idc_value_t *) + @param argnum: number of actual arguments (C++: size_t) + @return: eOk if successful, otherwise an error code + +Help on built-in function dbg_can_query in module _ida_dbg: + +dbg_can_query(...) + dbg_can_query() -> bool + +Help on function dbg_get_memory_info in module ida_idd: + +dbg_get_memory_info(*args) -> 'PyObject *' + dbg_get_memory_info() -> PyObject * + + + This function returns the memory configuration of a debugged process. + @return: + None if no debugger is active + tuple(start_ea, end_ea, name, sclass, sbase, bitness, perm) + +Help on function dbg_get_name in module ida_idd: + +dbg_get_name(*args) -> 'PyObject *' + dbg_get_name() -> PyObject * + + + This function returns the current debugger's name. + @return: Debugger name or None if no debugger is active + +Help on function dbg_get_registers in module ida_idd: + +dbg_get_registers(*args) -> 'PyObject *' + dbg_get_registers() -> PyObject * + + + This function returns the register definition from the currently loaded debugger. + Basically, it returns an array of structure similar to to idd.hpp / register_info_t + @return: + None if no debugger is loaded + tuple(name, flags, class, dtype, bit_strings, default_bit_strings_mask) + The bit_strings can be a tuple of strings or None (if the register does not have bit_strings) + +Help on function dbg_get_thread_sreg_base in module ida_idd: + +dbg_get_thread_sreg_base(*args) -> 'PyObject *' + dbg_get_thread_sreg_base(tid, sreg_value) -> PyObject * + + + Returns the segment register base value + @param tid: thread id + @param sreg_value: segment register (selector) value + @return: + - The base as an 'ea' + - Or None on failure + +Help on function dbg_read_memory in module ida_idd: + +dbg_read_memory(*args) -> 'PyObject *' + dbg_read_memory(ea, sz) -> PyObject * + + + Reads from the debugee's memory at the specified ea + @return: + - The read buffer (as a string) + - Or None on failure + +Help on function dbg_write_memory in module ida_idd: + +dbg_write_memory(*args) -> 'PyObject *' + dbg_write_memory(ea, buf) -> PyObject * + + + Writes a buffer to the debugee's memory + @return: Boolean + +Help on class debapp_attrs_t in module ida_idd: + +class debapp_attrs_t(builtins.object) + | Proxy of C++ debapp_attrs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> debapp_attrs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_debapp_attrs_t(...) + | delete_debapp_attrs_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | addrsize + | debapp_attrs_t_addrsize_get(self) -> int + | + | cbsize + | debapp_attrs_t_cbsize_get(self) -> int32 + | + | is_be + | debapp_attrs_t_is_be_get(self) -> int + | + | platform + | debapp_attrs_t_platform_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class debug_event_t in module ida_idd: + +class debug_event_t(builtins.object) + | Proxy of C++ debug_event_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> debug_event_t + | __init__(self, r) -> debug_event_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_debug_event_t(...) + | delete_debug_event_t(self) + | + | bpt(self, *args) -> 'bptaddr_t const &' + | bpt(self) -> bptaddr_t + | bpt(self) -> bptaddr_t + | + | bpt_ea(self, *args) -> 'ea_t' + | bpt_ea(self) -> ea_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | clear_all(self, *args) -> 'void' + | clear_all(self) + | + | copy(self, *args) -> 'debug_event_t &' + | copy(self, r) -> debug_event_t + | + | eid(self, *args) -> 'event_id_t' + | eid(self) -> event_id_t + | + | exc(self, *args) -> 'excinfo_t const &' + | exc(self) -> excinfo_t + | exc(self) -> excinfo_t + | + | exit_code(self, *args) -> 'int const &' + | exit_code(self) -> int const & + | + | info(self, *args) -> 'qstring const &' + | info(self) -> qstring + | info(self) -> qstring const & + | + | modinfo(self, *args) -> 'modinfo_t const &' + | modinfo(self) -> modinfo_t + | modinfo(self) -> modinfo_t + | + | set_bpt(self, *args) -> 'bptaddr_t &' + | set_bpt(self) -> bptaddr_t + | + | set_eid(self, *args) -> 'void' + | set_eid(self, id) + | + | set_exception(self, *args) -> 'excinfo_t &' + | set_exception(self) -> excinfo_t + | + | set_exit_code(self, *args) -> 'void' + | set_exit_code(self, id, code) + | + | set_info(self, *args) -> 'qstring &' + | set_info(self, id) -> qstring & + | + | set_modinfo(self, *args) -> 'modinfo_t &' + | set_modinfo(self, id) -> modinfo_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | debug_event_t_ea_get(self) -> ea_t + | + | handled + | debug_event_t_handled_get(self) -> bool + | + | pid + | debug_event_t_pid_get(self) -> pid_t + | + | thisown + | The membership flag + | + | tid + | debug_event_t_tid_get(self) -> thid_t + +Help on class exception_info_t in module ida_idd: + +class exception_info_t(builtins.object) + | Proxy of C++ exception_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> exception_info_t + | __init__(self, _code, _flags, _name, _desc) -> exception_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_exception_info_t(...) + | delete_exception_info_t(self) + | + | break_on(self, *args) -> 'bool' + | break_on(self) -> bool + | + | handle(self, *args) -> 'bool' + | handle(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | exception_info_t_code_get(self) -> uint + | + | desc + | exception_info_t_desc_get(self) -> qstring * + | + | flags + | exception_info_t_flags_get(self) -> uint32 + | + | name + | exception_info_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class excinfo_t in module ida_idd: + +class excinfo_t(builtins.object) + | Proxy of C++ excinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> excinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_excinfo_t(...) + | delete_excinfo_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | can_cont + | excinfo_t_can_cont_get(self) -> bool + | + | code + | excinfo_t_code_get(self) -> uint32 + | + | ea + | excinfo_t_ea_get(self) -> ea_t + | + | info + | excinfo_t_info_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class excvec_t in module ida_idd: + +class excvec_t(builtins.object) + | Proxy of C++ qvector< exception_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'exception_info_t const &' + | __getitem__(self, i) -> exception_info_t + | + | __init__(self, *args) + | __init__(self) -> excvec_t + | __init__(self, x) -> excvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_excvec_t(...) + | delete_excvec_t(self) + | + | at(self, *args) -> 'exception_info_t const &' + | at(self, _idx) -> exception_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< exception_info_t >::const_iterator' + | begin(self) -> exception_info_t + | begin(self) -> exception_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< exception_info_t >::const_iterator' + | end(self) -> exception_info_t + | end(self) -> exception_info_t + | + | erase(self, *args) -> 'qvector< exception_info_t >::iterator' + | erase(self, it) -> exception_info_t + | erase(self, first, last) -> exception_info_t + | + | extract(self, *args) -> 'exception_info_t *' + | extract(self) -> exception_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=exception_info_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< exception_info_t >::iterator' + | insert(self, it, x) -> exception_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'exception_info_t &' + | push_back(self, x) + | push_back(self) -> exception_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function get_event_bpt_hea in module ida_idd: + +get_event_bpt_hea(*args) -> 'ea_t' + get_event_bpt_hea(ev) -> ea_t + +Help on function get_event_exc_code in module ida_idd: + +get_event_exc_code(*args) -> 'uint' + get_event_exc_code(ev) -> uint + +Help on function get_event_exc_ea in module ida_idd: + +get_event_exc_ea(*args) -> 'ea_t' + get_event_exc_ea(ev) -> ea_t + +Help on function get_event_exc_info in module ida_idd: + +get_event_exc_info(*args) -> 'size_t' + get_event_exc_info(ev) -> str + +Help on function get_event_info in module ida_idd: + +get_event_info(*args) -> 'size_t' + get_event_info(ev) -> str + +Help on function get_event_module_base in module ida_idd: + +get_event_module_base(*args) -> 'ea_t' + get_event_module_base(ev) -> ea_t + +Help on function get_event_module_name in module ida_idd: + +get_event_module_name(*args) -> 'size_t' + get_event_module_name(ev) -> str + +Help on function get_event_module_size in module ida_idd: + +get_event_module_size(*args) -> 'asize_t' + get_event_module_size(ev) -> asize_t + +Help on class meminfo_vec_t in module ida_idd: + +class meminfo_vec_t(builtins.object) + | Proxy of C++ qvector< memory_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'memory_info_t const &' + | __getitem__(self, i) -> memory_info_t + | + | __init__(self, *args) + | __init__(self) -> meminfo_vec_t + | __init__(self, x) -> meminfo_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_meminfo_vec_t(...) + | delete_meminfo_vec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'memory_info_t const &' + | at(self, _idx) -> memory_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | begin(self) -> memory_info_t + | begin(self) -> memory_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | end(self) -> memory_info_t + | end(self) -> memory_info_t + | + | erase(self, *args) -> 'qvector< memory_info_t >::iterator' + | erase(self, it) -> memory_info_t + | erase(self, first, last) -> memory_info_t + | + | extract(self, *args) -> 'memory_info_t *' + | extract(self) -> memory_info_t + | + | find(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | find(self, x) -> memory_info_t + | find(self, x) -> memory_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=memory_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< memory_info_t >::iterator' + | insert(self, it, x) -> memory_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'memory_info_t &' + | push_back(self, x) + | push_back(self) -> memory_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class memory_info_t in module ida_idd: + +class memory_info_t(ida_range.range_t) + | Proxy of C++ memory_info_t class. + | + | Method resolution order: + | memory_info_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> memory_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_memory_info_t(...) + | delete_memory_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bitness + | memory_info_t_bitness_get(self) -> uchar + | + | name + | memory_info_t_name_get(self) -> qstring * + | + | perm + | memory_info_t_perm_get(self) -> uchar + | + | sbase + | memory_info_t_sbase_get(self) -> ea_t + | + | sclass + | memory_info_t_sclass_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on class modinfo_t in module ida_idd: + +class modinfo_t(builtins.object) + | Proxy of C++ modinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> modinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_modinfo_t(...) + | delete_modinfo_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | modinfo_t_base_get(self) -> ea_t + | + | name + | modinfo_t_name_get(self) -> qstring * + | + | rebase_to + | modinfo_t_rebase_to_get(self) -> ea_t + | + | size + | modinfo_t_size_get(self) -> asize_t + | + | thisown + | The membership flag + +Help on class process_info_t in module ida_idd: + +class process_info_t(builtins.object) + | Proxy of C++ process_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> process_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_process_info_t(...) + | delete_process_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | process_info_t_name_get(self) -> qstring * + | + | pid + | process_info_t_pid_get(self) -> pid_t + | + | thisown + | The membership flag + +Help on class procinfo_vec_t in module ida_idd: + +class procinfo_vec_t(builtins.object) + | Proxy of C++ qvector< process_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'process_info_t const &' + | __getitem__(self, i) -> process_info_t + | + | __init__(self, *args) + | __init__(self) -> procinfo_vec_t + | __init__(self, x) -> procinfo_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_procinfo_vec_t(...) + | delete_procinfo_vec_t(self) + | + | at(self, *args) -> 'process_info_t const &' + | at(self, _idx) -> process_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< process_info_t >::const_iterator' + | begin(self) -> process_info_t + | begin(self) -> process_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< process_info_t >::const_iterator' + | end(self) -> process_info_t + | end(self) -> process_info_t + | + | erase(self, *args) -> 'qvector< process_info_t >::iterator' + | erase(self, it) -> process_info_t + | erase(self, first, last) -> process_info_t + | + | extract(self, *args) -> 'process_info_t *' + | extract(self) -> process_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=process_info_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< process_info_t >::iterator' + | insert(self, it, x) -> process_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'process_info_t &' + | push_back(self, x) + | push_back(self) -> process_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class register_info_t in module ida_idd: + +class register_info_t(builtins.object) + | Proxy of C++ register_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> register_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_register_info_t(...) + | delete_register_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bit_strings + | register_info_t_bit_strings_get(self) -> char const *const * + | + | default_bit_strings_mask + | register_info_t_default_bit_strings_mask_get(self) -> uval_t + | + | dtype + | register_info_t_dtype_get(self) -> op_dtype_t + | + | flags + | register_info_t_flags_get(self) -> uint32 + | + | name + | register_info_t_name_get(self) -> char const * + | + | register_class + | register_info_t_register_class_get(self) -> register_class_t + | + | thisown + | The membership flag + +Help on class regval_t in module ida_idd: + +class regval_t(builtins.object) + | Proxy of C++ regval_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> regval_t + | __init__(self, r) -> regval_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_regval_t(...) + | delete_regval_t(self) + | + | bytes(self, *args) -> 'bytevec_t const &' + | bytes(self) -> bytevec_t + | bytes(self) -> bytevec_t const & + | + | clear(self, *args) -> 'void' + | clear(self) + | + | get_data(self, *args) -> 'void const *' + | get_data(self) + | get_data(self) -> void const * + | + | get_data_size(self, *args) -> 'size_t' + | get_data_size(self) -> size_t + | + | set_bytes(self, *args) -> 'bytevec_t &' + | set_bytes(self, data, size) + | set_bytes(self, v) + | set_bytes(self) -> bytevec_t & + | + | set_float(self, *args) -> 'void' + | set_float(self, x) + | + | set_int(self, *args) -> 'void' + | set_int(self, x) + | + | set_unavailable(self, *args) -> 'void' + | set_unavailable(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fval + | regval_t_fval_get(self) -> uint16 [6] + | + | ival + | regval_t_ival_get(self) -> uint64 + | + | rvtype + | regval_t_rvtype_get(self) -> int32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class scattered_segm_t in module ida_idd: + +class scattered_segm_t(ida_range.range_t) + | Proxy of C++ scattered_segm_t class. + | + | Method resolution order: + | scattered_segm_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> scattered_segm_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_scattered_segm_t(...) + | delete_scattered_segm_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | name + | scattered_segm_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on function set_debug_event_code in module ida_idd: + +set_debug_event_code(*args) -> 'void' + set_debug_event_code(ev, id) + +Help on class thread_name_t in module ida_idd: + +class thread_name_t(builtins.object) + | Proxy of C++ thread_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> thread_name_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_thread_name_t(...) + | delete_thread_name_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | thread_name_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tid + | thread_name_t_tid_get(self) -> thid_t + +=== ida_idd EPYDOC INJECTIONS === +ida_idd.EXC_BREAK +""" +break on the exception +""" + +ida_idd.EXC_HANDLE +""" +should be handled by the debugger? +""" + +ida_idd.EXC_MSG +""" +instead of a warning, log the exception to the output window +""" + +ida_idd.EXC_SILENT +""" +do not warn or log to the output window +""" + +ida_idd.IDD_INTERFACE_VERSION +""" +The IDD interface version number. +""" + +ida_idd.NO_PROCESS +""" +No process. +""" + +ida_idd.NO_THREAD +""" +No thread. in 'PROCESS_STARTED' this value can be used to specify that +the main thread has not been created. It will be initialized later by +a 'THREAD_STARTED' event. +""" + +ida_idd.REGISTER_ADDRESS +""" +may contain an address +""" + +ida_idd.REGISTER_CS +""" +code segment +""" + +ida_idd.REGISTER_CUSTFMT +""" +register should be displayed using a custom data format. the format +name is in bit_strings[0] the corresponding 'regval_t' will use +'bytevec_t' +""" + +ida_idd.REGISTER_FP +""" +frame pointer +""" + +ida_idd.REGISTER_IP +""" +instruction pointer +""" + +ida_idd.REGISTER_NOLF +""" +allowing the next register to be displayed to its right (on the same +line) + +displays this register without returning to the next line +""" + +ida_idd.REGISTER_READONLY +""" +the user can't modify the current value of this register +""" + +ida_idd.REGISTER_SP +""" +stack pointer +""" + +ida_idd.REGISTER_SS +""" +stack segment +""" + +ida_idd.RVT_FLOAT +""" +floating point +""" + +ida_idd.RVT_INT +""" +integer +""" + +ida_idd.RVT_UNAVAILABLE +""" +other values mean custom data type + +unavailable +""" +=== ida_idd EPYDOC INJECTIONS END === +Help on function AssembleLine in module ida_idp: + +AssembleLine(*args) -> 'PyObject *' + AssembleLine(ea, cs, ip, use32, nonnul_line) -> PyObject * + + + Assemble an instruction to a string (display a warning if an error is found) + + @param ea: linear address of instruction + @param cs: cs of instruction + @param ip: ip of instruction + @param use32: is 32bit segment + @param line: line to assemble + @return: + - None on failure + - or a string containing the assembled instruction + +Help on class IDB_Hooks in module ida_idp: + +class IDB_Hooks(builtins.object) + | Proxy of C++ IDB_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> IDB_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_IDB_Hooks(...) + | delete_IDB_Hooks(self) + | + | allsegs_moved(self, *args) -> 'void' + | allsegs_moved(self, info) + | + | auto_empty(self, *args) -> 'void' + | auto_empty(self) + | + | auto_empty_finally(self, *args) -> 'void' + | auto_empty_finally(self) + | + | bookmark_changed(self, *args) -> 'void' + | bookmark_changed(self, index, pos, desc) + | + | byte_patched(self, *args) -> 'void' + | byte_patched(self, ea, old_value) + | + | callee_addr_changed(self, *args) -> 'void' + | callee_addr_changed(self, ea, callee) + | + | changing_cmt(self, *args) -> 'void' + | changing_cmt(self, ea, repeatable_cmt, newcmt) + | + | changing_enum_bf(self, *args) -> 'void' + | changing_enum_bf(self, id, new_bf) + | + | changing_enum_cmt(self, *args) -> 'void' + | changing_enum_cmt(self, id, repeatable, newcmt) + | + | changing_op_ti(self, *args) -> 'void' + | changing_op_ti(self, ea, n, new_type, new_fnames) + | + | changing_op_type(self, *args) -> 'void' + | changing_op_type(self, ea, n, opinfo) + | + | changing_range_cmt(self, *args) -> 'void' + | changing_range_cmt(self, kind, a, cmt, repeatable) + | + | changing_segm_class(self, *args) -> 'void' + | changing_segm_class(self, s) + | + | changing_segm_end(self, *args) -> 'void' + | changing_segm_end(self, s, new_end, segmod_flags) + | + | changing_segm_name(self, *args) -> 'void' + | changing_segm_name(self, s, oldname) + | + | changing_segm_start(self, *args) -> 'void' + | changing_segm_start(self, s, new_start, segmod_flags) + | + | changing_struc_align(self, *args) -> 'void' + | changing_struc_align(self, sptr) + | + | changing_struc_cmt(self, *args) -> 'void' + | changing_struc_cmt(self, struc_id, repeatable, newcmt) + | + | changing_struc_member(self, *args) -> 'void' + | changing_struc_member(self, sptr, mptr, flag, ti, nbytes) + | + | changing_ti(self, *args) -> 'void' + | changing_ti(self, ea, new_type, new_fnames) + | + | closebase(self, *args) -> 'void' + | closebase(self) + | + | cmt_changed(self, *args) -> 'void' + | cmt_changed(self, ea, repeatable_cmt) + | + | compiler_changed(self, *args) -> 'void' + | compiler_changed(self) + | + | deleting_enum(self, *args) -> 'void' + | deleting_enum(self, id) + | + | deleting_enum_member(self, *args) -> 'void' + | deleting_enum_member(self, id, cid) + | + | deleting_func(self, *args) -> 'void' + | deleting_func(self, pfn) + | + | deleting_func_tail(self, *args) -> 'void' + | deleting_func_tail(self, pfn, tail) + | + | deleting_segm(self, *args) -> 'void' + | deleting_segm(self, start_ea) + | + | deleting_struc(self, *args) -> 'void' + | deleting_struc(self, sptr) + | + | deleting_struc_member(self, *args) -> 'void' + | deleting_struc_member(self, sptr, mptr) + | + | deleting_tryblks(self, *args) -> 'void' + | deleting_tryblks(self, range) + | + | destroyed_items(self, *args) -> 'void' + | destroyed_items(self, ea1, ea2, will_disable_range) + | + | determined_main(self, *args) -> 'void' + | determined_main(self, main) + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | enum_bf_changed(self, *args) -> 'void' + | enum_bf_changed(self, id) + | + | enum_cmt_changed(self, *args) -> 'void' + | enum_cmt_changed(self, id, repeatable) + | + | enum_created(self, *args) -> 'void' + | enum_created(self, id) + | + | enum_deleted(self, *args) -> 'void' + | enum_deleted(self, id) + | + | enum_member_created(self, *args) -> 'void' + | enum_member_created(self, id, cid) + | + | enum_member_deleted(self, *args) -> 'void' + | enum_member_deleted(self, id, cid) + | + | enum_renamed(self, *args) -> 'void' + | enum_renamed(self, id) + | + | expanding_struc(self, *args) -> 'void' + | expanding_struc(self, sptr, offset, delta) + | + | extlang_changed(self, *args) -> 'void' + | extlang_changed(self, kind, el, idx) + | + | extra_cmt_changed(self, *args) -> 'void' + | extra_cmt_changed(self, ea, line_idx, cmt) + | + | flow_chart_created(self, *args) -> 'void' + | flow_chart_created(self, fc) + | + | frame_deleted(self, *args) -> 'void' + | frame_deleted(self, pfn) + | + | func_added(self, *args) -> 'void' + | func_added(self, pfn) + | + | func_noret_changed(self, *args) -> 'void' + | func_noret_changed(self, pfn) + | + | func_tail_appended(self, *args) -> 'void' + | func_tail_appended(self, pfn, tail) + | + | func_tail_deleted(self, *args) -> 'void' + | func_tail_deleted(self, pfn, tail_ea) + | + | func_updated(self, *args) -> 'void' + | func_updated(self, pfn) + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | idasgn_loaded(self, *args) -> 'void' + | idasgn_loaded(self, short_sig_name) + | + | item_color_changed(self, *args) -> 'void' + | item_color_changed(self, ea, color) + | + | kernel_config_loaded(self, *args) -> 'void' + | kernel_config_loaded(self) + | + | loader_finished(self, *args) -> 'void' + | loader_finished(self, li, neflags, filetypename) + | + | local_types_changed(self, *args) -> 'void' + | local_types_changed(self) + | + | make_code(self, *args) -> 'void' + | make_code(self, insn) + | + | make_data(self, *args) -> 'void' + | make_data(self, ea, flags, tid, len) + | + | op_ti_changed(self, *args) -> 'void' + | op_ti_changed(self, ea, n, type, fnames) + | + | op_type_changed(self, *args) -> 'void' + | op_type_changed(self, ea, n) + | + | range_cmt_changed(self, *args) -> 'void' + | range_cmt_changed(self, kind, a, cmt, repeatable) + | + | renamed(self, *args) -> 'void' + | renamed(self, ea, new_name, local_name) + | + | renaming_enum(self, *args) -> 'void' + | renaming_enum(self, id, is_enum, newname) + | + | renaming_struc(self, *args) -> 'void' + | renaming_struc(self, id, oldname, newname) + | + | renaming_struc_member(self, *args) -> 'void' + | renaming_struc_member(self, sptr, mptr, newname) + | + | savebase(self, *args) -> 'void' + | savebase(self) + | + | segm_added(self, *args) -> 'void' + | segm_added(self, s) + | + | segm_attrs_updated(self, *args) -> 'void' + | segm_attrs_updated(self, s) + | + | segm_class_changed(self, *args) -> 'void' + | segm_class_changed(self, s, sclass) + | + | segm_deleted(self, *args) -> 'void' + | segm_deleted(self, start_ea, end_ea) + | + | segm_end_changed(self, *args) -> 'void' + | segm_end_changed(self, s, oldend) + | + | segm_moved(self, *args) -> 'void' + | segm_moved(self, _from, to, size, changed_netmap) + | + | segm_name_changed(self, *args) -> 'void' + | segm_name_changed(self, s, name) + | + | segm_start_changed(self, *args) -> 'void' + | segm_start_changed(self, s, oldstart) + | + | set_func_end(self, *args) -> 'void' + | set_func_end(self, pfn, new_end) + | + | set_func_start(self, *args) -> 'void' + | set_func_start(self, pfn, new_start) + | + | sgr_changed(self, *args) -> 'void' + | sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) + | + | sgr_deleted(self, *args) -> 'void' + | sgr_deleted(self, start_ea, end_ea, regnum) + | + | stkpnts_changed(self, *args) -> 'void' + | stkpnts_changed(self, pfn) + | + | struc_align_changed(self, *args) -> 'void' + | struc_align_changed(self, sptr) + | + | struc_cmt_changed(self, *args) -> 'void' + | struc_cmt_changed(self, struc_id, repeatable_cmt) + | + | struc_created(self, *args) -> 'void' + | struc_created(self, struc_id) + | + | struc_deleted(self, *args) -> 'void' + | struc_deleted(self, struc_id) + | + | struc_expanded(self, *args) -> 'void' + | struc_expanded(self, sptr) + | + | struc_member_changed(self, *args) -> 'void' + | struc_member_changed(self, sptr, mptr) + | + | struc_member_created(self, *args) -> 'void' + | struc_member_created(self, sptr, mptr) + | + | struc_member_deleted(self, *args) -> 'void' + | struc_member_deleted(self, sptr, member_id, offset) + | + | struc_member_renamed(self, *args) -> 'void' + | struc_member_renamed(self, sptr, mptr) + | + | struc_renamed(self, *args) -> 'void' + | struc_renamed(self, sptr) + | + | tail_owner_changed(self, *args) -> 'void' + | tail_owner_changed(self, tail, owner_func, old_owner) + | + | thunk_func_created(self, *args) -> 'void' + | thunk_func_created(self, pfn) + | + | ti_changed(self, *args) -> 'void' + | ti_changed(self, ea, type, fnames) + | + | tryblks_updated(self, *args) -> 'void' + | tryblks_updated(self, tbv) + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | updating_tryblks(self, *args) -> 'void' + | updating_tryblks(self, tbv) + | + | upgraded(self, *args) -> 'void' + | upgraded(self, _from) + | + | ---------------------------------------------------------------------- + | 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 + +Help on class IDP_Hooks in module ida_idp: + +class IDP_Hooks(builtins.object) + | Proxy of C++ IDP_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> IDP_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_IDP_Hooks(...) + | delete_IDP_Hooks(self) + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | ev_add_cref(self, *args) -> 'int' + | ev_add_cref(self, _from, to, type) -> int + | + | ev_add_dref(self, *args) -> 'int' + | ev_add_dref(self, _from, to, type) -> int + | + | ev_adjust_argloc(self, *args) -> 'int' + | ev_adjust_argloc(self, argloc, optional_type, size) -> int + | + | ev_adjust_libfunc_ea(self, *args) -> 'int' + | ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int + | + | ev_adjust_refinfo(self, *args) -> 'int' + | ev_adjust_refinfo(self, ri, ea, n, fd) -> int + | + | ev_ana_insn(self, *args) -> 'bool' + | ev_ana_insn(self, out) -> bool + | + | + | Analyzes and decodes an instruction at insn.ea + | - insn.itype must be set >= idaapi.CUSTOM_CMD_ITYPE + | - insn.size must be set to the instruction length + | + | @return: Boolean + | - False if the instruction is not recognized + | - True if the instruction was decoded. 'insn' should be filled in that case. + | + | ev_analyze_prolog(self, *args) -> 'int' + | ev_analyze_prolog(self, ea) -> int + | + | ev_arg_addrs_ready(self, *args) -> 'int' + | ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int + | + | ev_assemble(self, *args) -> 'PyObject *' + | ev_assemble(self, ea, cs, ip, use32, line) -> PyObject * + | + | + | Assembles an instruction + | + | @param ea: linear address of instruction + | @param cs: cs of instruction + | @param ip: ip of instruction + | @param use32: is 32bit segment? + | @param line: line to assemble + | + | @return: - None to let the underlying processor module assemble the line + | - or a string containing the assembled buffer + | + | ev_auto_queue_empty(self, *args) -> 'void' + | ev_auto_queue_empty(self, type) + | + | ev_calc_arglocs(self, *args) -> 'int' + | ev_calc_arglocs(self, fti) -> int + | + | ev_calc_cdecl_purged_bytes(self, *args) -> 'int' + | ev_calc_cdecl_purged_bytes(self, ea) -> int + | + | ev_calc_next_eas(self, *args) -> 'int' + | ev_calc_next_eas(self, res, insn, over) -> int + | + | ev_calc_purged_bytes(self, *args) -> 'int' + | ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int + | + | ev_calc_retloc(self, *args) -> 'int' + | ev_calc_retloc(self, retloc, rettype, cc) -> int + | + | ev_calc_spdelta(self, *args) -> 'int' + | ev_calc_spdelta(self, spdelta, insn) -> int + | + | ev_calc_step_over(self, *args) -> 'int' + | ev_calc_step_over(self, target, ip) -> int + | + | ev_calc_switch_cases(self, *args) -> 'int' + | ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int + | + | ev_calc_varglocs(self, *args) -> 'int' + | ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int + | + | ev_calcrel(self, *args) -> 'int' + | ev_calcrel(self) -> int + | + | ev_can_have_type(self, *args) -> 'int' + | ev_can_have_type(self, op) -> int + | + | ev_clean_tbit(self, *args) -> 'int' + | ev_clean_tbit(self, ea, getreg, regvalues) -> int + | + | ev_cmp_operands(self, *args) -> 'int' + | ev_cmp_operands(self, op1, op2) -> int + | + | ev_coagulate(self, *args) -> 'int' + | ev_coagulate(self, start_ea) -> int + | + | ev_coagulate_dref(self, *args) -> 'int' + | ev_coagulate_dref(self, _from, to, may_define, code_ea) -> int + | + | ev_create_flat_group(self, *args) -> 'int' + | ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int + | + | ev_create_func_frame(self, *args) -> 'int' + | ev_create_func_frame(self, pfn) -> int + | + | ev_create_switch_xrefs(self, *args) -> 'int' + | ev_create_switch_xrefs(self, jumpea, si) -> int + | + | ev_creating_segm(self, *args) -> 'int' + | ev_creating_segm(self, seg) -> int + | + | ev_decorate_name(self, *args) -> 'PyObject *' + | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * + | + | ev_del_cref(self, *args) -> 'int' + | ev_del_cref(self, _from, to, expand) -> int + | + | ev_del_dref(self, *args) -> 'int' + | ev_del_dref(self, _from, to) -> int + | + | ev_delay_slot_insn(self, *args) -> 'PyObject *' + | ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * + | + | ev_demangle_name(self, *args) -> 'PyObject *' + | ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * + | + | ev_emu_insn(self, *args) -> 'bool' + | ev_emu_insn(self, insn) -> bool + | + | + | Emulate instruction, create cross-references, plan to analyze + | subsequent instructions, modify flags etc. Upon entrance to this function + | all information about the instruction is in 'insn' structure. + | + | @return: Boolean (whether this instruction has been emulated or not) + | + | ev_endbinary(self, *args) -> 'int' + | ev_endbinary(self, ok) -> int + | + | ev_ending_undo(self, *args) -> 'int' + | ev_ending_undo(self, action_name, is_undo) -> int + | + | ev_equal_reglocs(self, *args) -> 'int' + | ev_equal_reglocs(self, a1, a2) -> int + | + | ev_extract_address(self, *args) -> 'int' + | ev_extract_address(self, out_ea, screen_ea, string, position) -> int + | + | ev_find_op_value(self, *args) -> 'PyObject *' + | ev_find_op_value(self, pinsn, opn) -> PyObject * + | + | ev_find_reg_value(self, *args) -> 'PyObject *' + | ev_find_reg_value(self, pinsn, reg) -> PyObject * + | + | ev_func_bounds(self, *args) -> 'void' + | ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea) + | + | ev_gen_asm_or_lst(self, *args) -> 'void' + | ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) + | + | ev_gen_map_file(self, *args) -> 'int' + | ev_gen_map_file(self, nlines, fp) -> int + | + | ev_gen_regvar_def(self, *args) -> 'int' + | ev_gen_regvar_def(self, outctx, v) -> int + | + | ev_gen_src_file_lnnum(self, *args) -> 'int' + | ev_gen_src_file_lnnum(self, outctx, file, lnnum) -> int + | + | ev_gen_stkvar_def(self, *args) -> 'int' + | ev_gen_stkvar_def(self, outctx, mptr, v) -> int + | + | ev_get_abi_info(self, *args) -> 'int' + | ev_get_abi_info(self, abi_names, abi_opts, comp) -> int + | + | ev_get_autocmt(self, *args) -> 'PyObject *' + | ev_get_autocmt(self, insn) -> PyObject * + | + | ev_get_bg_color(self, *args) -> 'int' + | ev_get_bg_color(self, ea) -> int or None + | + | ev_get_cc_regs(self, *args) -> 'int' + | ev_get_cc_regs(self, regs, cc) -> int + | + | ev_get_code16_mode(self, *args) -> 'int' + | ev_get_code16_mode(self, ea) -> int + | + | ev_get_dbr_opnum(self, *args) -> 'int' + | ev_get_dbr_opnum(self, opnum, insn) -> int + | + | ev_get_default_enum_size(self, *args) -> 'int' + | ev_get_default_enum_size(self, cm) -> int + | + | ev_get_frame_retsize(self, *args) -> 'int' + | ev_get_frame_retsize(self, frsize, pfn) -> int + | + | ev_get_macro_insn_head(self, *args) -> 'int' + | ev_get_macro_insn_head(self, head, ip) -> int + | + | ev_get_operand_string(self, *args) -> 'PyObject *' + | ev_get_operand_string(self, insn, opnum) -> PyObject * + | + | ev_get_reg_info(self, *args) -> 'int' + | ev_get_reg_info(self, main_regname, bitrange, regname) -> int + | + | ev_get_reg_name(self, *args) -> 'PyObject *' + | ev_get_reg_name(self, reg, width, reghi) -> PyObject * + | + | ev_get_simd_types(self, *args) -> 'int' + | ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int + | + | ev_get_stkarg_offset(self, *args) -> 'int' + | ev_get_stkarg_offset(self) -> int + | + | ev_get_stkvar_scale_factor(self, *args) -> 'int' + | ev_get_stkvar_scale_factor(self) -> int + | + | ev_getreg(self, *args) -> 'int' + | ev_getreg(self, regval, regnum) -> int + | + | ev_init(self, *args) -> 'int' + | ev_init(self, idp_modname) -> int + | + | ev_insn_reads_tbit(self, *args) -> 'int' + | ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int + | + | ev_is_align_insn(self, *args) -> 'int' + | ev_is_align_insn(self, ea) -> int + | + | ev_is_alloca_probe(self, *args) -> 'int' + | ev_is_alloca_probe(self, ea) -> int + | + | ev_is_basic_block_end(self, *args) -> 'int' + | ev_is_basic_block_end(self, insn, call_insn_stops_block) -> int + | + | ev_is_call_insn(self, *args) -> 'int' + | ev_is_call_insn(self, insn) -> int + | + | + | Is the instruction a "call"? + | + | @param insn: instruction + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_cond_insn(self, *args) -> 'int' + | ev_is_cond_insn(self, insn) -> int + | + | ev_is_far_jump(self, *args) -> 'int' + | ev_is_far_jump(self, icode) -> int + | + | ev_is_indirect_jump(self, *args) -> 'int' + | ev_is_indirect_jump(self, insn) -> int + | + | ev_is_insn_table_jump(self, *args) -> 'int' + | ev_is_insn_table_jump(self, insn) -> int + | + | ev_is_jump_func(self, *args) -> 'int' + | ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int + | + | ev_is_ret_insn(self, *args) -> 'int' + | ev_is_ret_insn(self, insn, strict) -> int + | + | + | Is the instruction a "return"? + | + | @param insn: instruction + | @param strict: - True: report only ret instructions + | False: include instructions like "leave" which begins the function epilog + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_sane_insn(self, *args) -> 'int' + | ev_is_sane_insn(self, insn, no_crefs) -> int + | + | + | is the instruction sane for the current file type? + | @param insn: the instruction + | @param no_crefs: + | - 1: the instruction has no code refs to it. + | ida just tries to convert unexplored bytes + | to an instruction (but there is no other + | reason to convert them into an instruction) + | - 0: the instruction is created because + | of some coderef, user request or another + | weighty reason. + | @return: >=0-ok, <0-no, the instruction isn't likely to appear in the program + | + | ev_is_sp_based(self, *args) -> 'int' + | ev_is_sp_based(self, mode, insn, op) -> int + | + | ev_is_switch(self, *args) -> 'int' + | ev_is_switch(self, si, insn) -> int + | + | ev_last_cb_before_loader(self, *args) -> 'int' + | ev_last_cb_before_loader(self) -> int + | + | ev_loader(self, *args) -> 'int' + | ev_loader(self) -> int + | + | ev_lower_func_type(self, *args) -> 'int' + | ev_lower_func_type(self, argnums, fti) -> int + | + | ev_max_ptr_size(self, *args) -> 'int' + | ev_max_ptr_size(self) -> int + | + | ev_may_be_func(self, *args) -> 'int' + | ev_may_be_func(self, insn, state) -> int + | + | + | Can a function start here? + | @param insn: the instruction + | @param state: autoanalysis phase + | 0: creating functions + | 1: creating chunks + | + | @return: integer (probability 0..100) + | + | ev_may_show_sreg(self, *args) -> 'int' + | ev_may_show_sreg(self, current_ea) -> int + | + | ev_moving_segm(self, *args) -> 'int' + | ev_moving_segm(self, seg, to, flags) -> int + | + | ev_newasm(self, *args) -> 'int' + | ev_newasm(self, asmnum) -> int + | + | ev_newbinary(self, *args) -> 'int' + | ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes) -> int + | + | ev_newfile(self, *args) -> 'int' + | ev_newfile(self, fname) -> int + | + | ev_newprc(self, *args) -> 'int' + | ev_newprc(self, pnum, keep_cfg) -> int + | + | ev_next_exec_insn(self, *args) -> 'int' + | ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int + | + | ev_oldfile(self, *args) -> 'int' + | ev_oldfile(self, fname) -> int + | + | ev_out_assumes(self, *args) -> 'int' + | ev_out_assumes(self, outctx) -> int + | + | ev_out_data(self, *args) -> 'int' + | ev_out_data(self, outctx, analyze_only) -> int + | + | ev_out_footer(self, *args) -> 'void' + | ev_out_footer(self, outctx) + | + | ev_out_header(self, *args) -> 'void' + | ev_out_header(self, outctx) + | + | ev_out_insn(self, *args) -> 'bool' + | ev_out_insn(self, outctx) -> bool + | + | + | Outputs the instruction defined in 'ctx.insn' + | + | @return: Boolean (whether this instruction can be outputted or not) + | + | ev_out_label(self, *args) -> 'int' + | ev_out_label(self, outctx, colored_name) -> int + | + | ev_out_mnem(self, *args) -> 'int' + | ev_out_mnem(self, outctx) -> int + | + | ev_out_operand(self, *args) -> 'bool' + | ev_out_operand(self, outctx, op) -> bool + | + | + | Notification to generate operand text. + | If False was returned, then the standard operand output function will be called. + | + | this notification may use out_...() functions to form the operand text + | + | @return: Boolean (whether the operand has been outputted or not) + | + | ev_out_segend(self, *args) -> 'int' + | ev_out_segend(self, outctx, seg) -> int + | + | ev_out_segstart(self, *args) -> 'int' + | ev_out_segstart(self, outctx, seg) -> int + | + | ev_out_special_item(self, *args) -> 'int' + | ev_out_special_item(self, outctx, segtype) -> int + | + | ev_realcvt(self, *args) -> 'int' + | ev_realcvt(self, m, e, swt) -> int + | + | ev_rename(self, *args) -> 'int' + | ev_rename(self, ea, new_name) -> int + | + | + | The kernel is going to rename a byte. + | + | @param ea: Address + | @param new_name: The new name + | + | @return: + | - If returns value <0, then the kernel should + | not rename it. See also the 'renamed' event + | + | ev_replaying_undo(self, *args) -> 'int' + | ev_replaying_undo(self, action_name, vec, is_undo) -> int + | + | ev_set_code16_mode(self, *args) -> 'int' + | ev_set_code16_mode(self, ea, code16) -> int + | + | ev_set_idp_options(self, *args) -> 'int' + | ev_set_idp_options(self, keyword, value_type, value, errbuf, idb_loaded) -> int + | + | ev_set_proc_options(self, *args) -> 'int' + | ev_set_proc_options(self, options, confidence) -> int + | + | ev_setup_til(self, *args) -> 'void' + | ev_setup_til(self) + | + | ev_shadow_args_size(self, *args) -> 'int' + | ev_shadow_args_size(self, shadow_args_size, pfn) -> int + | + | ev_str2reg(self, *args) -> 'int' + | ev_str2reg(self, regname) -> int + | + | ev_term(self, *args) -> 'int' + | ev_term(self) -> int + | + | ev_treat_hindering_item(self, *args) -> 'int' + | ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> int + | + | ev_undefine(self, *args) -> 'int' + | ev_undefine(self, ea) -> int + | + | + | An item in the database (insn or data) is being deleted + | @param ea: Address + | @return: + | - 1 - do not delete srranges at the item end + | - 0 - srranges can be deleted + | + | ev_use_arg_types(self, *args) -> 'int' + | ev_use_arg_types(self, ea, fti, rargs) -> int + | + | ev_use_regarg_type(self, *args) -> 'PyObject *' + | ev_use_regarg_type(self, ea, rargs) -> PyObject * + | + | ev_use_stkarg_type(self, *args) -> 'int' + | ev_use_stkarg_type(self, ea, arg) -> int + | + | ev_validate_flirt_func(self, *args) -> 'int' + | ev_validate_flirt_func(self, start_ea, funcname) -> int + | + | ev_verify_noreturn(self, *args) -> 'int' + | ev_verify_noreturn(self, pfn) -> int + | + | ev_verify_sp(self, *args) -> 'int' + | ev_verify_sp(self, pfn) -> int + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | + | Creates an IDP hook + | + | @return: Boolean true on success + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | + | Removes the IDP hook + | @return: Boolean true on success + | + | ---------------------------------------------------------------------- + | 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 + +Help on class __ph in module ida_idp: + +class __ph(builtins.object) + | # ---------------------------------------------------------------------- + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cnbits + | + | dnbits + | + | flag + | + | icode_return + | + | id + | + | instruc + | + | instruc_end + | + | instruc_start + | + | reg_code_sreg + | + | reg_data_sreg + | + | reg_first_sreg + | + | reg_last_sreg + | + | regnames + | + | segreg_size + | + | tbyte_size + | + | version + +Help on class _notify_when_dispatcher_t in module ida_idp: + +class _notify_when_dispatcher_t(builtins.object) + | Methods defined here: + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | _find(self, fun) + | + | dispatch(self, slot, *args) + | + | notify_when(self, when, fun) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _IDB_Hooks = + | Proxy of C++ IDB_Hooks class. + | + | _IDP_Hooks = + | Proxy of C++ IDP_Hooks class. + | + | _callback_t = + +Help on class _processor_t_Trampoline_IDB_Hooks in module ida_idp: + +class _processor_t_Trampoline_IDB_Hooks(IDB_Hooks) + | Proxy of C++ IDB_Hooks class. + | + | Method resolution order: + | _processor_t_Trampoline_IDB_Hooks + | IDB_Hooks + | builtins.object + | + | Methods defined here: + | + | __init__(self, proc) + | __init__(self, _flags=0) -> IDB_Hooks + | + | _processor_t_Trampoline_IDB_Hooks__dummy = __dummy(self, *args) + | + | _processor_t_Trampoline_IDB_Hooks__make_parent_caller = __make_parent_caller(self, key) + | + | ---------------------------------------------------------------------- + | Methods inherited from IDB_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_IDB_Hooks(...) + | delete_IDB_Hooks(self) + | + | allsegs_moved(self, *args) -> 'void' + | allsegs_moved(self, info) + | + | auto_empty(self, *args) -> 'void' + | auto_empty(self) + | + | auto_empty_finally(self, *args) -> 'void' + | auto_empty_finally(self) + | + | bookmark_changed(self, *args) -> 'void' + | bookmark_changed(self, index, pos, desc) + | + | byte_patched(self, *args) -> 'void' + | byte_patched(self, ea, old_value) + | + | callee_addr_changed(self, *args) -> 'void' + | callee_addr_changed(self, ea, callee) + | + | changing_cmt(self, *args) -> 'void' + | changing_cmt(self, ea, repeatable_cmt, newcmt) + | + | changing_enum_bf(self, *args) -> 'void' + | changing_enum_bf(self, id, new_bf) + | + | changing_enum_cmt(self, *args) -> 'void' + | changing_enum_cmt(self, id, repeatable, newcmt) + | + | changing_op_ti(self, *args) -> 'void' + | changing_op_ti(self, ea, n, new_type, new_fnames) + | + | changing_op_type(self, *args) -> 'void' + | changing_op_type(self, ea, n, opinfo) + | + | changing_range_cmt(self, *args) -> 'void' + | changing_range_cmt(self, kind, a, cmt, repeatable) + | + | changing_segm_class(self, *args) -> 'void' + | changing_segm_class(self, s) + | + | changing_segm_end(self, *args) -> 'void' + | changing_segm_end(self, s, new_end, segmod_flags) + | + | changing_segm_name(self, *args) -> 'void' + | changing_segm_name(self, s, oldname) + | + | changing_segm_start(self, *args) -> 'void' + | changing_segm_start(self, s, new_start, segmod_flags) + | + | changing_struc_align(self, *args) -> 'void' + | changing_struc_align(self, sptr) + | + | changing_struc_cmt(self, *args) -> 'void' + | changing_struc_cmt(self, struc_id, repeatable, newcmt) + | + | changing_struc_member(self, *args) -> 'void' + | changing_struc_member(self, sptr, mptr, flag, ti, nbytes) + | + | changing_ti(self, *args) -> 'void' + | changing_ti(self, ea, new_type, new_fnames) + | + | closebase(self, *args) -> 'void' + | closebase(self) + | + | cmt_changed(self, *args) -> 'void' + | cmt_changed(self, ea, repeatable_cmt) + | + | compiler_changed(self, *args) -> 'void' + | compiler_changed(self) + | + | deleting_enum(self, *args) -> 'void' + | deleting_enum(self, id) + | + | deleting_enum_member(self, *args) -> 'void' + | deleting_enum_member(self, id, cid) + | + | deleting_func(self, *args) -> 'void' + | deleting_func(self, pfn) + | + | deleting_func_tail(self, *args) -> 'void' + | deleting_func_tail(self, pfn, tail) + | + | deleting_segm(self, *args) -> 'void' + | deleting_segm(self, start_ea) + | + | deleting_struc(self, *args) -> 'void' + | deleting_struc(self, sptr) + | + | deleting_struc_member(self, *args) -> 'void' + | deleting_struc_member(self, sptr, mptr) + | + | deleting_tryblks(self, *args) -> 'void' + | deleting_tryblks(self, range) + | + | destroyed_items(self, *args) -> 'void' + | destroyed_items(self, ea1, ea2, will_disable_range) + | + | determined_main(self, *args) -> 'void' + | determined_main(self, main) + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | enum_bf_changed(self, *args) -> 'void' + | enum_bf_changed(self, id) + | + | enum_cmt_changed(self, *args) -> 'void' + | enum_cmt_changed(self, id, repeatable) + | + | enum_created(self, *args) -> 'void' + | enum_created(self, id) + | + | enum_deleted(self, *args) -> 'void' + | enum_deleted(self, id) + | + | enum_member_created(self, *args) -> 'void' + | enum_member_created(self, id, cid) + | + | enum_member_deleted(self, *args) -> 'void' + | enum_member_deleted(self, id, cid) + | + | enum_renamed(self, *args) -> 'void' + | enum_renamed(self, id) + | + | expanding_struc(self, *args) -> 'void' + | expanding_struc(self, sptr, offset, delta) + | + | extlang_changed(self, *args) -> 'void' + | extlang_changed(self, kind, el, idx) + | + | extra_cmt_changed(self, *args) -> 'void' + | extra_cmt_changed(self, ea, line_idx, cmt) + | + | flow_chart_created(self, *args) -> 'void' + | flow_chart_created(self, fc) + | + | frame_deleted(self, *args) -> 'void' + | frame_deleted(self, pfn) + | + | func_added(self, *args) -> 'void' + | func_added(self, pfn) + | + | func_noret_changed(self, *args) -> 'void' + | func_noret_changed(self, pfn) + | + | func_tail_appended(self, *args) -> 'void' + | func_tail_appended(self, pfn, tail) + | + | func_tail_deleted(self, *args) -> 'void' + | func_tail_deleted(self, pfn, tail_ea) + | + | func_updated(self, *args) -> 'void' + | func_updated(self, pfn) + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | idasgn_loaded(self, *args) -> 'void' + | idasgn_loaded(self, short_sig_name) + | + | item_color_changed(self, *args) -> 'void' + | item_color_changed(self, ea, color) + | + | kernel_config_loaded(self, *args) -> 'void' + | kernel_config_loaded(self) + | + | loader_finished(self, *args) -> 'void' + | loader_finished(self, li, neflags, filetypename) + | + | local_types_changed(self, *args) -> 'void' + | local_types_changed(self) + | + | make_code(self, *args) -> 'void' + | make_code(self, insn) + | + | make_data(self, *args) -> 'void' + | make_data(self, ea, flags, tid, len) + | + | op_ti_changed(self, *args) -> 'void' + | op_ti_changed(self, ea, n, type, fnames) + | + | op_type_changed(self, *args) -> 'void' + | op_type_changed(self, ea, n) + | + | range_cmt_changed(self, *args) -> 'void' + | range_cmt_changed(self, kind, a, cmt, repeatable) + | + | renamed(self, *args) -> 'void' + | renamed(self, ea, new_name, local_name) + | + | renaming_enum(self, *args) -> 'void' + | renaming_enum(self, id, is_enum, newname) + | + | renaming_struc(self, *args) -> 'void' + | renaming_struc(self, id, oldname, newname) + | + | renaming_struc_member(self, *args) -> 'void' + | renaming_struc_member(self, sptr, mptr, newname) + | + | savebase(self, *args) -> 'void' + | savebase(self) + | + | segm_added(self, *args) -> 'void' + | segm_added(self, s) + | + | segm_attrs_updated(self, *args) -> 'void' + | segm_attrs_updated(self, s) + | + | segm_class_changed(self, *args) -> 'void' + | segm_class_changed(self, s, sclass) + | + | segm_deleted(self, *args) -> 'void' + | segm_deleted(self, start_ea, end_ea) + | + | segm_end_changed(self, *args) -> 'void' + | segm_end_changed(self, s, oldend) + | + | segm_moved(self, *args) -> 'void' + | segm_moved(self, _from, to, size, changed_netmap) + | + | segm_name_changed(self, *args) -> 'void' + | segm_name_changed(self, s, name) + | + | segm_start_changed(self, *args) -> 'void' + | segm_start_changed(self, s, oldstart) + | + | set_func_end(self, *args) -> 'void' + | set_func_end(self, pfn, new_end) + | + | set_func_start(self, *args) -> 'void' + | set_func_start(self, pfn, new_start) + | + | sgr_changed(self, *args) -> 'void' + | sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) + | + | sgr_deleted(self, *args) -> 'void' + | sgr_deleted(self, start_ea, end_ea, regnum) + | + | stkpnts_changed(self, *args) -> 'void' + | stkpnts_changed(self, pfn) + | + | struc_align_changed(self, *args) -> 'void' + | struc_align_changed(self, sptr) + | + | struc_cmt_changed(self, *args) -> 'void' + | struc_cmt_changed(self, struc_id, repeatable_cmt) + | + | struc_created(self, *args) -> 'void' + | struc_created(self, struc_id) + | + | struc_deleted(self, *args) -> 'void' + | struc_deleted(self, struc_id) + | + | struc_expanded(self, *args) -> 'void' + | struc_expanded(self, sptr) + | + | struc_member_changed(self, *args) -> 'void' + | struc_member_changed(self, sptr, mptr) + | + | struc_member_created(self, *args) -> 'void' + | struc_member_created(self, sptr, mptr) + | + | struc_member_deleted(self, *args) -> 'void' + | struc_member_deleted(self, sptr, member_id, offset) + | + | struc_member_renamed(self, *args) -> 'void' + | struc_member_renamed(self, sptr, mptr) + | + | struc_renamed(self, *args) -> 'void' + | struc_renamed(self, sptr) + | + | tail_owner_changed(self, *args) -> 'void' + | tail_owner_changed(self, tail, owner_func, old_owner) + | + | thunk_func_created(self, *args) -> 'void' + | thunk_func_created(self, pfn) + | + | ti_changed(self, *args) -> 'void' + | ti_changed(self, ea, type, fnames) + | + | tryblks_updated(self, *args) -> 'void' + | tryblks_updated(self, tbv) + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | updating_tryblks(self, *args) -> 'void' + | updating_tryblks(self, tbv) + | + | upgraded(self, *args) -> 'void' + | upgraded(self, _from) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from IDB_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on class asm_t in module ida_idp: + +class asm_t(builtins.object) + | Proxy of C++ asm_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> asm_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_asm_t(...) + | delete_asm_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a_align + | asm_t_a_align_get(self) -> char const * + | + | a_ascii + | asm_t_a_ascii_get(self) -> char const * + | + | a_band + | asm_t_a_band_get(self) -> char const * + | + | a_bnot + | asm_t_a_bnot_get(self) -> char const * + | + | a_bor + | asm_t_a_bor_get(self) -> char const * + | + | a_bss + | asm_t_a_bss_get(self) -> char const * + | + | a_byte + | asm_t_a_byte_get(self) -> char const * + | + | a_comdef + | asm_t_a_comdef_get(self) -> char const * + | + | a_curip + | asm_t_a_curip_get(self) -> char const * + | + | a_double + | asm_t_a_double_get(self) -> char const * + | + | a_dups + | asm_t_a_dups_get(self) -> char const * + | + | a_dword + | asm_t_a_dword_get(self) -> char const * + | + | a_equ + | asm_t_a_equ_get(self) -> char const * + | + | a_extrn + | asm_t_a_extrn_get(self) -> char const * + | + | a_float + | asm_t_a_float_get(self) -> char const * + | + | a_include_fmt + | asm_t_a_include_fmt_get(self) -> char const * + | + | a_mod + | asm_t_a_mod_get(self) -> char const * + | + | a_oword + | asm_t_a_oword_get(self) -> char const * + | + | a_packreal + | asm_t_a_packreal_get(self) -> char const * + | + | a_public + | asm_t_a_public_get(self) -> char const * + | + | a_qword + | asm_t_a_qword_get(self) -> char const * + | + | a_rva + | asm_t_a_rva_get(self) -> char const * + | + | a_seg + | asm_t_a_seg_get(self) -> char const * + | + | a_shl + | asm_t_a_shl_get(self) -> char const * + | + | a_shr + | asm_t_a_shr_get(self) -> char const * + | + | a_sizeof_fmt + | asm_t_a_sizeof_fmt_get(self) -> char const * + | + | a_tbyte + | asm_t_a_tbyte_get(self) -> char const * + | + | a_vstruc_fmt + | asm_t_a_vstruc_fmt_get(self) -> char const * + | + | a_weak + | asm_t_a_weak_get(self) -> char const * + | + | a_word + | asm_t_a_word_get(self) -> char const * + | + | a_xor + | asm_t_a_xor_get(self) -> char const * + | + | a_yword + | asm_t_a_yword_get(self) -> char const * + | + | accsep + | asm_t_accsep_get(self) -> char + | + | ascsep + | asm_t_ascsep_get(self) -> char + | + | cmnt + | asm_t_cmnt_get(self) -> char const * + | + | cmnt2 + | asm_t_cmnt2_get(self) -> char const * + | + | end + | asm_t_end_get(self) -> char const * + | + | esccodes + | asm_t_esccodes_get(self) -> char const * + | + | flag + | asm_t_flag_get(self) -> uint32 + | + | flag2 + | asm_t_flag2_get(self) -> uint32 + | + | header + | asm_t_header_get(self) -> char const *const * + | + | help + | asm_t_help_get(self) -> help_t + | + | high16 + | asm_t_high16_get(self) -> char const * + | + | high8 + | asm_t_high8_get(self) -> char const * + | + | lbrace + | asm_t_lbrace_get(self) -> char + | + | low16 + | asm_t_low16_get(self) -> char const * + | + | low8 + | asm_t_low8_get(self) -> char const * + | + | name + | asm_t_name_get(self) -> char const * + | + | origin + | asm_t_origin_get(self) -> char const * + | + | rbrace + | asm_t_rbrace_get(self) -> char + | + | thisown + | The membership flag + | + | uflag + | asm_t_uflag_get(self) -> uint16 + +Help on function assemble in module ida_idp: + +assemble(*args) -> 'bool' + assemble(ea, cs, ip, use32, line) -> bool + + + Assemble an instruction into the database (display a warning if an error is found) + @param ea: linear address of instruction + @param cs: cs of instruction + @param ip: ip of instruction + @param use32: is 32bit segment? + @param line: line to assemble + + @return: Boolean. True on success. + +Help on function cfg_get_cc_header_path in module ida_idp: + +cfg_get_cc_header_path(*args) -> 'char const *' + cfg_get_cc_header_path(compid) -> char const * + +Help on function cfg_get_cc_parm in module ida_idp: + +cfg_get_cc_parm(*args) -> 'char const *' + cfg_get_cc_parm(compid, name) -> char const * + +Help on function cfg_get_cc_predefined_macros in module ida_idp: + +cfg_get_cc_predefined_macros(*args) -> 'char const *' + cfg_get_cc_predefined_macros(compid) -> char const * + +Help on function delay_slot_insn in module ida_idp: + +delay_slot_insn(*args) -> 'bool' + delay_slot_insn(ea, bexec, fexec) -> bool + + + Helper function to get the delay slot instruction. + + + @param ea (C++: ea_t *) + @param bexec (C++: bool *) + @param fexec (C++: bool *) + +Help on function gen_idb_event in module ida_idp: + +gen_idb_event(*args) -> 'void' + gen_idb_event(code) + + + the kernel will use this function to generate idb_events + + + @param code (C++: idb_event::event_code_t) + +Help on function get_idb_notifier_addr in module ida_idp: + +get_idb_notifier_addr(*args) -> 'PyObject *' + get_idb_notifier_addr(arg1) -> PyObject * + +Help on function get_idb_notifier_ud_addr in module ida_idp: + +get_idb_notifier_ud_addr(*args) -> 'PyObject *' + get_idb_notifier_ud_addr(hooks) -> PyObject * + +Help on function get_idp_name in module ida_idp: + +get_idp_name(*args) -> 'size_t' + get_idp_name() -> str + + + Get name of the current processor module. The name is derived from the + file name. For example, for IBM PC the module is named "pc.w32" + (windows version), then the module name is "PC" (uppercase). If no + processor module is loaded, this function will return NULL + +Help on function get_idp_notifier_addr in module ida_idp: + +get_idp_notifier_addr(*args) -> 'PyObject *' + get_idp_notifier_addr(arg1) -> PyObject * + +Help on function get_idp_notifier_ud_addr in module ida_idp: + +get_idp_notifier_ud_addr(*args) -> 'PyObject *' + get_idp_notifier_ud_addr(hooks) -> PyObject * + +Help on function get_reg_info in module ida_idp: + +get_reg_info(*args) -> 'char const *' + get_reg_info(regname, bitrange) -> char const * + + + Get register information - useful for registers like al, ah, dil, etc. + + @param regname (C++: const char *) + @param bitrange (C++: bitrange_t *) + @return: NULL no such register + +Help on function get_reg_name in module ida_idp: + +get_reg_name(*args) -> 'qstring *' + get_reg_name(reg, width, reghi=-1) -> str + + + Get text representation of a register. For most processors this + function will just return \ph{reg_names}[reg]. If the processor module + has implemented processor_t::get_reg_name, it will be used instead + + @param reg: internal register number as defined in the processor + module (C++: int) + @param width: register width in bytes (C++: size_t) + @param reghi: if specified, then this function will return the + register pair (C++: int) + @return: length of register name in bytes or -1 if failure + +Help on function has_cf_chg in module ida_idp: + +has_cf_chg(*args) -> 'bool' + has_cf_chg(feature, opnum) -> bool + + + Does an instruction with the specified feature modify the i-th + operand? + + + @param feature (C++: uint32) + @param opnum (C++: uint) + +Help on function has_cf_use in module ida_idp: + +has_cf_use(*args) -> 'bool' + has_cf_use(feature, opnum) -> bool + + + Does an instruction with the specified feature use a value of the i-th + operand? + + + @param feature (C++: uint32) + @param opnum (C++: uint) + +Help on function has_insn_feature in module ida_idp: + +has_insn_feature(*args) -> 'bool' + has_insn_feature(icode, bit) -> bool + + + Does the specified instruction have the specified feature? + + + @param icode (C++: int) + @param bit (C++: uint32) + +Help on function is_align_insn in module ida_idp: + +is_align_insn(*args) -> 'int' + is_align_insn(ea) -> int + + + If the instruction at 'ea' looks like an alignment instruction, return + its length in bytes. Otherwise return 0. + + @param ea (C++: ea_t) + +Help on function is_basic_block_end in module ida_idp: + +is_basic_block_end(*args) -> 'bool' + is_basic_block_end(insn, call_insn_stops_block) -> bool + + + Is the instruction the end of a basic block? + + + @param insn (C++: const insn_t &) + @param call_insn_stops_block (C++: bool) + +Help on function is_call_insn in module ida_idp: + +is_call_insn(*args) -> 'bool' + is_call_insn(insn) -> bool + + + Is the instruction a "call"? + + + @param insn (C++: const insn_t &) + +Help on function is_indirect_jump_insn in module ida_idp: + +is_indirect_jump_insn(*args) -> 'bool' + is_indirect_jump_insn(insn) -> bool + + + Is the instruction an indirect jump? + + + @param insn (C++: const insn_t &) + +Help on function is_ret_insn in module ida_idp: + +is_ret_insn(*args) -> 'bool' + is_ret_insn(insn, strict=True) -> bool + + + Is the instruction a "return"? + + + @param insn (C++: const insn_t &) + @param strict (C++: bool) + +Help on function parse_reg_name in module ida_idp: + +parse_reg_name(*args) -> 'bool' + parse_reg_name(ri, regname) -> bool + + + Get register info by name. + + @param ri: result (C++: reg_info_t *) + @param regname: name of register (C++: const char *) + @return: success + +Help on __ph in module ida_idp object: + +class __ph(builtins.object) + | # ---------------------------------------------------------------------- + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cnbits + | + | dnbits + | + | flag + | + | icode_return + | + | id + | + | instruc + | + | instruc_end + | + | instruc_start + | + | reg_code_sreg + | + | reg_data_sreg + | + | reg_first_sreg + | + | reg_last_sreg + | + | regnames + | + | segreg_size + | + | tbyte_size + | + | version + +Help on function ph_calcrel in module ida_idp: + +ph_calcrel(*args) -> 'bytevec_t *' + ph_calcrel(ea) + +Help on function ph_find_op_value in module ida_idp: + +ph_find_op_value(*args) -> 'unsigned-ea-like-numeric-type *'↗ + ph_find_op_value(insn, op) -> ssize_t + +Help on function ph_find_reg_value in module ida_idp: + +ph_find_reg_value(*args) -> 'unsigned-ea-like-numeric-type *'↗ + ph_find_reg_value(insn, reg) -> ssize_t + +Help on function ph_get_cnbits in module ida_idp: + +ph_get_cnbits(*args) -> 'size_t' + ph_get_cnbits() -> size_t + + + Returns the 'ph.cnbits' + +Help on function ph_get_dnbits in module ida_idp: + +ph_get_dnbits(*args) -> 'size_t' + ph_get_dnbits() -> size_t + + + Returns the 'ph.dnbits' + +Help on function ph_get_flag in module ida_idp: + +ph_get_flag(*args) -> 'size_t' + ph_get_flag() -> size_t + + + Returns the 'ph.flag' + +Help on function ph_get_icode_return in module ida_idp: + +ph_get_icode_return(*args) -> 'size_t' + ph_get_icode_return() -> size_t + + + Returns the 'ph.icode_return' + +Help on function ph_get_id in module ida_idp: + +ph_get_id(*args) -> 'size_t' + ph_get_id() -> size_t + + + Returns the 'ph.id' field + +Help on function ph_get_instruc in module ida_idp: + +ph_get_instruc(*args) -> 'PyObject *' + ph_get_instruc() -> PyObject * + + + Returns a list of tuples (instruction_name, instruction_feature) containing the + instructions list as defined in he processor module + +Help on function ph_get_instruc_end in module ida_idp: + +ph_get_instruc_end(*args) -> 'size_t' + ph_get_instruc_end() -> size_t + + + Returns the 'ph.instruc_end' + +Help on function ph_get_instruc_start in module ida_idp: + +ph_get_instruc_start(*args) -> 'size_t' + ph_get_instruc_start() -> size_t + + + Returns the 'ph.instruc_start' + +Help on function ph_get_operand_info in module ida_idp: + +ph_get_operand_info(*args) -> 'PyObject *' + ph_get_operand_info(ea, n) -> PyObject * + + + Returns the operand information given an ea and operand number. + + @param ea: address + @param n: operand number + + @return: Returns an idd_opinfo_t as a tuple: (modified, ea, reg_ival, regidx, value_size). + Please refer to idd_opinfo_t structure in the SDK. + +Help on function ph_get_reg_code_sreg in module ida_idp: + +ph_get_reg_code_sreg(*args) -> 'size_t' + ph_get_reg_code_sreg() -> size_t + + + Returns the 'ph.reg_code_sreg' + +Help on function ph_get_reg_data_sreg in module ida_idp: + +ph_get_reg_data_sreg(*args) -> 'size_t' + ph_get_reg_data_sreg() -> size_t + + + Returns the 'ph.reg_data_sreg' + +Help on function ph_get_reg_first_sreg in module ida_idp: + +ph_get_reg_first_sreg(*args) -> 'size_t' + ph_get_reg_first_sreg() -> size_t + + + Returns the 'ph.reg_first_sreg' + +Help on function ph_get_reg_last_sreg in module ida_idp: + +ph_get_reg_last_sreg(*args) -> 'size_t' + ph_get_reg_last_sreg() -> size_t + + + Returns the 'ph.reg_last_sreg' + +Help on function ph_get_regnames in module ida_idp: + +ph_get_regnames(*args) -> 'PyObject *' + ph_get_regnames() -> PyObject * + + + Returns the list of register names as defined in the processor module + +Help on function ph_get_segreg_size in module ida_idp: + +ph_get_segreg_size(*args) -> 'size_t' + ph_get_segreg_size() -> size_t + + + Returns the 'ph.segreg_size' + +Help on function ph_get_tbyte_size in module ida_idp: + +ph_get_tbyte_size(*args) -> 'size_t' + ph_get_tbyte_size() -> size_t + + + Returns the 'ph.tbyte_size' field as defined in he processor module + +Help on function ph_get_version in module ida_idp: + +ph_get_version(*args) -> 'size_t' + ph_get_version() -> size_t + + + Returns the 'ph.version' + +Help on class processor_t in module ida_idp: + +class processor_t(IDP_Hooks) + | Proxy of C++ IDP_Hooks class. + | + | Method resolution order: + | processor_t + | IDP_Hooks + | builtins.object + | + | Methods defined here: + | + | __init__(self) + | __init__(self, _flags=0) -> IDP_Hooks + | + | _get_idb_notifier_addr(self) + | + | _get_idb_notifier_ud_addr(self) + | + | _get_idp_notifier_addr(self) + | + | _get_idp_notifier_ud_addr(self) + | + | _get_notify(self, what, unimp_val=0, imp_forced_val=None, add_prefix=True, mandatory_impl=None) + | This helper is used to implement backward-compatibility + | of pre IDA 7.3 processor_t interfaces. + | + | _make_forced_value_wrapper(self, val, meth=None) + | + | _make_int_returning_wrapper(self, meth, intval=0) + | + | auto_empty(self, *args) + | + | auto_empty_finally(self, *args) + | + | closebase(self, *args) + | + | compiler_changed(self, *args) + | + | deleting_func(self, pfn) + | + | determined_main(self, *args) + | + | ev_ana_insn(self, *args) + | ev_ana_insn(self, out) -> bool + | + | + | Analyzes and decodes an instruction at insn.ea + | - insn.itype must be set >= idaapi.CUSTOM_CMD_ITYPE + | - insn.size must be set to the instruction length + | + | @return: Boolean + | - False if the instruction is not recognized + | - True if the instruction was decoded. 'insn' should be filled in that case. + | + | ev_assemble(self, *args) + | ev_assemble(self, ea, cs, ip, use32, line) -> PyObject * + | + | + | Assembles an instruction + | + | @param ea: linear address of instruction + | @param cs: cs of instruction + | @param ip: ip of instruction + | @param use32: is 32bit segment? + | @param line: line to assemble + | + | @return: - None to let the underlying processor module assemble the line + | - or a string containing the assembled buffer + | + | ev_auto_queue_empty(self, *args) + | ev_auto_queue_empty(self, type) + | + | ev_calc_step_over(self, target, ip) + | ev_calc_step_over(self, target, ip) -> int + | + | ev_can_have_type(self, *args) + | ev_can_have_type(self, op) -> int + | + | ev_cmp_operands(self, *args) + | ev_cmp_operands(self, op1, op2) -> int + | + | ev_coagulate(self, *args) + | ev_coagulate(self, start_ea) -> int + | + | ev_coagulate_dref(self, from_ea, to_ea, may_define, _code_ea) + | ev_coagulate_dref(self, _from, to, may_define, code_ea) -> int + | + | ev_create_func_frame(self, pfn) + | ev_create_func_frame(self, pfn) -> int + | + | ev_create_switch_xrefs(self, *args) + | ev_create_switch_xrefs(self, jumpea, si) -> int + | + | ev_creating_segm(self, s) + | ev_creating_segm(self, seg) -> int + | + | ev_emu_insn(self, *args) + | ev_emu_insn(self, insn) -> bool + | + | + | Emulate instruction, create cross-references, plan to analyze + | subsequent instructions, modify flags etc. Upon entrance to this function + | all information about the instruction is in 'insn' structure. + | + | @return: Boolean (whether this instruction has been emulated or not) + | + | ev_endbinary(self, *args) + | ev_endbinary(self, ok) -> int + | + | ev_func_bounds(self, _possible_return_code, pfn, max_func_end_ea) + | ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea) + | + | ev_gen_map_file(self, nlines, fp) + | ev_gen_map_file(self, nlines, fp) -> int + | + | ev_gen_regvar_def(self, ctx, v) + | ev_gen_regvar_def(self, outctx, v) -> int + | + | ev_gen_src_file_lnnum(self, *args) + | ev_gen_src_file_lnnum(self, outctx, file, lnnum) -> int + | + | ev_get_autocmt(self, *args) + | ev_get_autocmt(self, insn) -> PyObject * + | + | ev_get_frame_retsize(self, frsize, pfn) + | ev_get_frame_retsize(self, frsize, pfn) -> int + | + | ev_get_operand_string(self, buf, insn, opnum) + | ev_get_operand_string(self, insn, opnum) -> PyObject * + | + | ev_is_align_insn(self, *args) + | ev_is_align_insn(self, ea) -> int + | + | ev_is_alloca_probe(self, *args) + | ev_is_alloca_probe(self, ea) -> int + | + | ev_is_basic_block_end(self, *args) + | ev_is_basic_block_end(self, insn, call_insn_stops_block) -> int + | + | ev_is_call_insn(self, *args) + | ev_is_call_insn(self, insn) -> int + | + | + | Is the instruction a "call"? + | + | @param insn: instruction + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_far_jump(self, *args) + | ev_is_far_jump(self, icode) -> int + | + | ev_is_indirect_jump(self, *args) + | ev_is_indirect_jump(self, insn) -> int + | + | ev_is_insn_table_jump(self, *args) + | ev_is_insn_table_jump(self, insn) -> int + | + | ev_is_ret_insn(self, *args) + | ev_is_ret_insn(self, insn, strict) -> int + | + | + | Is the instruction a "return"? + | + | @param insn: instruction + | @param strict: - True: report only ret instructions + | False: include instructions like "leave" which begins the function epilog + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_sane_insn(self, *args) + | ev_is_sane_insn(self, insn, no_crefs) -> int + | + | + | is the instruction sane for the current file type? + | @param insn: the instruction + | @param no_crefs: + | - 1: the instruction has no code refs to it. + | ida just tries to convert unexplored bytes + | to an instruction (but there is no other + | reason to convert them into an instruction) + | - 0: the instruction is created because + | of some coderef, user request or another + | weighty reason. + | @return: >=0-ok, <0-no, the instruction isn't likely to appear in the program + | + | ev_is_sp_based(self, mode, insn, op) + | ev_is_sp_based(self, mode, insn, op) -> int + | + | ev_is_switch(self, *args) + | ev_is_switch(self, si, insn) -> int + | + | ev_may_be_func(self, *args) + | ev_may_be_func(self, insn, state) -> int + | + | + | Can a function start here? + | @param insn: the instruction + | @param state: autoanalysis phase + | 0: creating functions + | 1: creating chunks + | + | @return: integer (probability 0..100) + | + | ev_may_show_sreg(self, *args) + | ev_may_show_sreg(self, current_ea) -> int + | + | ev_moving_segm(self, s, to_ea, flags) + | ev_moving_segm(self, seg, to, flags) -> int + | + | ev_newbinary(self, *args) + | ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes) -> int + | + | ev_newfile(self, *args) + | ev_newfile(self, fname) -> int + | + | ev_newprc(self, *args) + | ev_newprc(self, pnum, keep_cfg) -> int + | + | ev_oldfile(self, *args) + | ev_oldfile(self, fname) -> int + | + | ev_out_assumes(self, *args) + | ev_out_assumes(self, outctx) -> int + | + | ev_out_data(self, *args) + | ev_out_data(self, outctx, analyze_only) -> int + | + | ev_out_footer(self, *args) + | ev_out_footer(self, outctx) + | + | ev_out_header(self, *args) + | ev_out_header(self, outctx) + | + | ev_out_insn(self, *args) + | ev_out_insn(self, outctx) -> bool + | + | + | Outputs the instruction defined in 'ctx.insn' + | + | @return: Boolean (whether this instruction can be outputted or not) + | + | ev_out_label(self, *args) + | ev_out_label(self, outctx, colored_name) -> int + | + | ev_out_mnem(self, *args) + | ev_out_mnem(self, outctx) -> int + | + | ev_out_operand(self, *args) + | ev_out_operand(self, outctx, op) -> bool + | + | + | Notification to generate operand text. + | If False was returned, then the standard operand output function will be called. + | + | this notification may use out_...() functions to form the operand text + | + | @return: Boolean (whether the operand has been outputted or not) + | + | ev_out_segend(self, ctx, s) + | ev_out_segend(self, outctx, seg) -> int + | + | ev_out_segstart(self, ctx, s) + | ev_out_segstart(self, outctx, seg) -> int + | + | ev_out_special_item(self, *args) + | ev_out_special_item(self, outctx, segtype) -> int + | + | ev_rename(self, *args) + | ev_rename(self, ea, new_name) -> int + | + | + | The kernel is going to rename a byte. + | + | @param ea: Address + | @param new_name: The new name + | + | @return: + | - If returns value <0, then the kernel should + | not rename it. See also the 'renamed' event + | + | ev_set_idp_options(self, keyword, value_type, value) + | ev_set_idp_options(self, keyword, value_type, value, errbuf, idb_loaded) -> int + | + | ev_set_proc_options(self, *args) + | ev_set_proc_options(self, options, confidence) -> int + | + | ev_str2reg(self, *args) + | ev_str2reg(self, regname) -> int + | + | ev_treat_hindering_item(self, *args) + | ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> int + | + | ev_undefine(self, *args) + | ev_undefine(self, ea) -> int + | + | + | An item in the database (insn or data) is being deleted + | @param ea: Address + | @return: + | - 1 - do not delete srranges at the item end + | - 0 - srranges can be deleted + | + | ev_validate_flirt_func(self, *args) + | ev_validate_flirt_func(self, start_ea, funcname) -> int + | + | ev_verify_noreturn(self, pfn) + | ev_verify_noreturn(self, pfn) -> int + | + | ev_verify_sp(self, pfn) + | ev_verify_sp(self, pfn) -> int + | + | func_added(self, pfn) + | + | get_auxpref(self, insn) + | This function returns insn.auxpref value + | + | get_idpdesc(self) + | This function must be present and should return the list of + | short processor names similar to the one in ph.psnames. + | This method can be overridden to return to the kernel a different IDP description. + | + | get_uFlag(self) + | Use this utility function to retrieve the 'uFlag' global variable + | + | idasgn_loaded(self, *args) + | + | kernel_config_loaded(self, *args) + | + | make_code(self, *args) + | + | make_data(self, *args) + | + | renamed(self, *args) + | + | savebase(self, *args) + | + | segm_moved(self, from_ea, to_ea, size, changed_netmap) + | + | set_func_end(self, *args) + | + | set_func_start(self, *args) + | + | sgr_changed(self, *args) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __idc_cvt_id__ = 2 + | + | ---------------------------------------------------------------------- + | Methods inherited from IDP_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_IDP_Hooks(...) + | delete_IDP_Hooks(self) + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | ev_add_cref(self, *args) -> 'int' + | ev_add_cref(self, _from, to, type) -> int + | + | ev_add_dref(self, *args) -> 'int' + | ev_add_dref(self, _from, to, type) -> int + | + | ev_adjust_argloc(self, *args) -> 'int' + | ev_adjust_argloc(self, argloc, optional_type, size) -> int + | + | ev_adjust_libfunc_ea(self, *args) -> 'int' + | ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int + | + | ev_adjust_refinfo(self, *args) -> 'int' + | ev_adjust_refinfo(self, ri, ea, n, fd) -> int + | + | ev_analyze_prolog(self, *args) -> 'int' + | ev_analyze_prolog(self, ea) -> int + | + | ev_arg_addrs_ready(self, *args) -> 'int' + | ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int + | + | ev_calc_arglocs(self, *args) -> 'int' + | ev_calc_arglocs(self, fti) -> int + | + | ev_calc_cdecl_purged_bytes(self, *args) -> 'int' + | ev_calc_cdecl_purged_bytes(self, ea) -> int + | + | ev_calc_next_eas(self, *args) -> 'int' + | ev_calc_next_eas(self, res, insn, over) -> int + | + | ev_calc_purged_bytes(self, *args) -> 'int' + | ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int + | + | ev_calc_retloc(self, *args) -> 'int' + | ev_calc_retloc(self, retloc, rettype, cc) -> int + | + | ev_calc_spdelta(self, *args) -> 'int' + | ev_calc_spdelta(self, spdelta, insn) -> int + | + | ev_calc_switch_cases(self, *args) -> 'int' + | ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int + | + | ev_calc_varglocs(self, *args) -> 'int' + | ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int + | + | ev_calcrel(self, *args) -> 'int' + | ev_calcrel(self) -> int + | + | ev_clean_tbit(self, *args) -> 'int' + | ev_clean_tbit(self, ea, getreg, regvalues) -> int + | + | ev_create_flat_group(self, *args) -> 'int' + | ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int + | + | ev_decorate_name(self, *args) -> 'PyObject *' + | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * + | + | ev_del_cref(self, *args) -> 'int' + | ev_del_cref(self, _from, to, expand) -> int + | + | ev_del_dref(self, *args) -> 'int' + | ev_del_dref(self, _from, to) -> int + | + | ev_delay_slot_insn(self, *args) -> 'PyObject *' + | ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * + | + | ev_demangle_name(self, *args) -> 'PyObject *' + | ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * + | + | ev_ending_undo(self, *args) -> 'int' + | ev_ending_undo(self, action_name, is_undo) -> int + | + | ev_equal_reglocs(self, *args) -> 'int' + | ev_equal_reglocs(self, a1, a2) -> int + | + | ev_extract_address(self, *args) -> 'int' + | ev_extract_address(self, out_ea, screen_ea, string, position) -> int + | + | ev_find_op_value(self, *args) -> 'PyObject *' + | ev_find_op_value(self, pinsn, opn) -> PyObject * + | + | ev_find_reg_value(self, *args) -> 'PyObject *' + | ev_find_reg_value(self, pinsn, reg) -> PyObject * + | + | ev_gen_asm_or_lst(self, *args) -> 'void' + | ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) + | + | ev_gen_stkvar_def(self, *args) -> 'int' + | ev_gen_stkvar_def(self, outctx, mptr, v) -> int + | + | ev_get_abi_info(self, *args) -> 'int' + | ev_get_abi_info(self, abi_names, abi_opts, comp) -> int + | + | ev_get_bg_color(self, *args) -> 'int' + | ev_get_bg_color(self, ea) -> int or None + | + | ev_get_cc_regs(self, *args) -> 'int' + | ev_get_cc_regs(self, regs, cc) -> int + | + | ev_get_code16_mode(self, *args) -> 'int' + | ev_get_code16_mode(self, ea) -> int + | + | ev_get_dbr_opnum(self, *args) -> 'int' + | ev_get_dbr_opnum(self, opnum, insn) -> int + | + | ev_get_default_enum_size(self, *args) -> 'int' + | ev_get_default_enum_size(self, cm) -> int + | + | ev_get_macro_insn_head(self, *args) -> 'int' + | ev_get_macro_insn_head(self, head, ip) -> int + | + | ev_get_reg_info(self, *args) -> 'int' + | ev_get_reg_info(self, main_regname, bitrange, regname) -> int + | + | ev_get_reg_name(self, *args) -> 'PyObject *' + | ev_get_reg_name(self, reg, width, reghi) -> PyObject * + | + | ev_get_simd_types(self, *args) -> 'int' + | ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int + | + | ev_get_stkarg_offset(self, *args) -> 'int' + | ev_get_stkarg_offset(self) -> int + | + | ev_get_stkvar_scale_factor(self, *args) -> 'int' + | ev_get_stkvar_scale_factor(self) -> int + | + | ev_getreg(self, *args) -> 'int' + | ev_getreg(self, regval, regnum) -> int + | + | ev_init(self, *args) -> 'int' + | ev_init(self, idp_modname) -> int + | + | ev_insn_reads_tbit(self, *args) -> 'int' + | ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int + | + | ev_is_cond_insn(self, *args) -> 'int' + | ev_is_cond_insn(self, insn) -> int + | + | ev_is_jump_func(self, *args) -> 'int' + | ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int + | + | ev_last_cb_before_loader(self, *args) -> 'int' + | ev_last_cb_before_loader(self) -> int + | + | ev_loader(self, *args) -> 'int' + | ev_loader(self) -> int + | + | ev_lower_func_type(self, *args) -> 'int' + | ev_lower_func_type(self, argnums, fti) -> int + | + | ev_max_ptr_size(self, *args) -> 'int' + | ev_max_ptr_size(self) -> int + | + | ev_newasm(self, *args) -> 'int' + | ev_newasm(self, asmnum) -> int + | + | ev_next_exec_insn(self, *args) -> 'int' + | ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int + | + | ev_realcvt(self, *args) -> 'int' + | ev_realcvt(self, m, e, swt) -> int + | + | ev_replaying_undo(self, *args) -> 'int' + | ev_replaying_undo(self, action_name, vec, is_undo) -> int + | + | ev_set_code16_mode(self, *args) -> 'int' + | ev_set_code16_mode(self, ea, code16) -> int + | + | ev_setup_til(self, *args) -> 'void' + | ev_setup_til(self) + | + | ev_shadow_args_size(self, *args) -> 'int' + | ev_shadow_args_size(self, shadow_args_size, pfn) -> int + | + | ev_term(self, *args) -> 'int' + | ev_term(self) -> int + | + | ev_use_arg_types(self, *args) -> 'int' + | ev_use_arg_types(self, ea, fti, rargs) -> int + | + | ev_use_regarg_type(self, *args) -> 'PyObject *' + | ev_use_regarg_type(self, ea, rargs) -> PyObject * + | + | ev_use_stkarg_type(self, *args) -> 'int' + | ev_use_stkarg_type(self, ea, arg) -> int + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | + | Creates an IDP hook + | + | @return: Boolean true on success + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | + | Removes the IDP hook + | @return: Boolean true on success + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from IDP_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on class reg_info_t in module ida_idp: + +class reg_info_t(builtins.object) + | Proxy of C++ reg_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> reg_info_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_reg_info_t(...) + | delete_reg_info_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | reg + | reg_info_t_reg_get(self) -> int + | + | size + | reg_info_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function set_processor_type in module ida_idp: + +set_processor_type(*args) -> 'bool' + set_processor_type(procname, level) -> bool + + + Set target processor type. Once a processor module is loaded, it + cannot be replaced until we close the idb. + + @param procname: name of processor type (one of names present in + \ph{psnames}) (C++: const char *) + @param level: SETPROC_ (C++: setproc_level_t) + @return: success + +Help on function set_target_assembler in module ida_idp: + +set_target_assembler(*args) -> 'bool' + set_target_assembler(asmnum) -> bool + + + Set target assembler. + + @param asmnum: number of assembler in the current processor module + (C++: int) + @return: success + +Help on function sizeof_ldbl in module ida_idp: + +sizeof_ldbl(*args) -> 'size_t' + sizeof_ldbl() -> size_t + + + Get size of long double. + +Help on function str2reg in module ida_idp: + +str2reg(*args) -> 'int' + str2reg(p) -> int + + + Get any reg number (-1 on error) + + + @param p (C++: const char *) + +=== ida_idp EPYDOC INJECTIONS === +ida_idp.AS2_BRACE +""" +Use braces for all expressions. +""" + +ida_idp.AS2_BYTE1CHAR +""" +Meaningful only for wide byte processors. + +One symbol per processor byte +""" + +ida_idp.AS2_COLONSUF +""" +addresses may have ":xx" suffix this suffix must be ignored when +extracting the address under the cursor +""" + +ida_idp.AS2_IDEALDSCR +""" +Description of struc/union is in the 'reverse' form (keyword before +name) the same as in borland tasm ideal +""" + +ida_idp.AS2_STRINV +""" +(For processors with bytes bigger than 8 bits) + +Invert meaning of \\inf{wide_high_byte_first} for text strings +""" + +ida_idp.AS2_TERSESTR +""" +NAME is supported. + +'terse' structure initialization form +""" + +ida_idp.AS2_YWORD +""" +a_yword field is present and valid +""" + +ida_idp.ASB_BINF0 +""" +010101b +""" + +ida_idp.ASB_BINF1 +""" +^B010101 +""" + +ida_idp.ASB_BINF2 +""" +%010101 +""" + +ida_idp.ASB_BINF3 +""" +0b1010101 +""" + +ida_idp.ASB_BINF4 +""" +b'1010101 +""" + +ida_idp.ASB_BINF5 +""" +b'1010101' +""" + +ida_idp.ASD_DECF0 +""" +34 +""" + +ida_idp.ASD_DECF1 +""" +#34 +""" + +ida_idp.ASD_DECF3 +""" +.34 +""" + +ida_idp.ASH_HEXF0 +""" +34h +""" + +ida_idp.ASH_HEXF1 +""" +h'34 +""" + +ida_idp.ASH_HEXF2 +""" +34 +""" + +ida_idp.ASH_HEXF3 +""" +0x34 +""" + +ida_idp.ASH_HEXF4 +""" +$34 +""" + +ida_idp.ASH_HEXF5 +""" +<^R > (radix) +""" + +ida_idp.ASO_OCTF0 +""" +123o +""" + +ida_idp.ASO_OCTF1 +""" +0123 +""" + +ida_idp.ASO_OCTF2 +""" +123 +""" + +ida_idp.ASO_OCTF3 +""" +@123 +""" + +ida_idp.ASO_OCTF4 +""" +o'123 +""" + +ida_idp.ASO_OCTF5 +""" +123q +""" + +ida_idp.ASO_OCTF6 +""" +~123 +""" + +ida_idp.ASO_OCTF7 +""" +q'123 +""" + +ida_idp.AS_1TEXT +""" +1 text per line, no bytes +""" + +ida_idp.AS_2CHRE +""" +double char constants are: "xy +""" + +ida_idp.AS_ALIGN2 +""" +(.align 5 means to align at 32byte boundary) + +.align directive expects an exponent rather than a power of 2 +""" + +ida_idp.AS_ASCIIC +""" +(\\n,\\x01 and similar) + +ascii directive accepts C-like escape sequences +""" + +ida_idp.AS_ASCIIZ +""" +ascii directive inserts implicit zero byte at the end +""" + +ida_idp.AS_BINFM +""" +mask - binary number format +""" + +ida_idp.AS_COLON +""" +create colons after data names ? +""" + +ida_idp.AS_DECFM +""" +mask - decimal number format +""" + +ida_idp.AS_HEXFM +""" +mask - hex number format +""" + +ida_idp.AS_LALIGN +""" +Labels at "align" keyword are supported. +""" + +ida_idp.AS_N2CHR +""" +can't have 2 byte char consts +""" + +ida_idp.AS_NCHRE +""" +char constants are: 'x +""" + +ida_idp.AS_NCMAS +""" +no commas in ascii directives +""" + +ida_idp.AS_NHIAS +""" +no characters with high bit +""" + +ida_idp.AS_NOCODECLN +""" +don't create colons after code names +""" + +ida_idp.AS_NOSPACE +""" +No spaces in expressions. +""" + +ida_idp.AS_NOXRF +""" +Disable xrefs during the output file generation. +""" + +ida_idp.AS_OCTFM +""" +mask - octal number format +""" + +ida_idp.AS_OFFST +""" +offsets are 'offset xxx' ? +""" + +ida_idp.AS_ONEDUP +""" +One array definition per line. +""" + +ida_idp.AS_RELSUP +""" +Checkarg: 'and','or','xor' operations with addresses are possible. +""" + +ida_idp.AS_UDATA +""" +can use '?' in data directives +""" + +ida_idp.AS_UNEQU +""" +replace undefined data items with EQU (for ANTA's A80) +""" + +ida_idp.AS_XTRNTYPE +""" +Assembler understands type of extern symbols as ":type" suffix. +""" + +ida_idp.CF_CALL +""" +CALL instruction (should make a procedure here) +""" + +ida_idp.CF_CHG1 +""" +The instruction modifies the first operand. +""" + +ida_idp.CF_CHG2 +""" +The instruction modifies the second operand. +""" + +ida_idp.CF_CHG3 +""" +The instruction modifies the third operand. +""" + +ida_idp.CF_CHG4 +""" +The instruction modifies 4 operand. +""" + +ida_idp.CF_CHG5 +""" +The instruction modifies 5 operand. +""" + +ida_idp.CF_CHG6 +""" +The instruction modifies 6 operand. +""" + +ida_idp.CF_HLL +""" +language function. + +Instruction may be present in a high level +""" + +ida_idp.CF_JUMP +""" +jump or call (thus needs additional analysis) + +The instruction passes execution using indirect +""" + +ida_idp.CF_SHFT +""" +Bit-shift instruction (shl,shr...) +""" + +ida_idp.CF_STOP +""" +next instruction + +Instruction doesn't pass execution to the +""" + +ida_idp.CF_USE1 +""" +The instruction uses value of the first operand. +""" + +ida_idp.CF_USE2 +""" +The instruction uses value of the second operand. +""" + +ida_idp.CF_USE3 +""" +The instruction uses value of the third operand. +""" + +ida_idp.CF_USE4 +""" +The instruction uses value of the 4 operand. +""" + +ida_idp.CF_USE5 +""" +The instruction uses value of the 5 operand. +""" + +ida_idp.CF_USE6 +""" +The instruction uses value of the 6 operand. +""" + +ida_idp.CUSTOM_INSN_ITYPE +""" +Custom instruction codes defined by processor extension plugins must +be greater than or equal to this +""" + +ida_idp.IDP_INTERFACE_VERSION +""" +The interface version number.see also 'IDA_SDK_VERSION' from 'pro.h' +""" + +ida_idp.OP_FP_BASED +""" +operand is FP based +""" + +ida_idp.OP_SP_ADD +""" +operand value is added to the pointer +""" + +ida_idp.OP_SP_BASED +""" +operand is SP based +""" + +ida_idp.OP_SP_SUB +""" +operand value is subtracted from the pointer +""" + +ida_idp.PLFM_386 +""" +Intel 80x86. +""" + +ida_idp.PLFM_6502 +""" +6502 +""" + +ida_idp.PLFM_65C816 +""" +65802/65816 +""" + +ida_idp.PLFM_6800 +""" +Motorola 68xx. +""" + +ida_idp.PLFM_68K +""" +Motorola 680x0. +""" + +ida_idp.PLFM_80196 +""" +Intel 80196. +""" + +ida_idp.PLFM_8051 +""" +8051 +""" + +ida_idp.PLFM_AD2106X +""" +Analog Devices ADSP 2106X. +""" + +ida_idp.PLFM_AD218X +""" +Analog Devices ADSP 218X. +""" + +ida_idp.PLFM_ALPHA +""" +DEC Alpha. +""" + +ida_idp.PLFM_ARC +""" +Argonaut RISC Core. +""" + +ida_idp.PLFM_ARM +""" +Advanced RISC Machines. +""" + +ida_idp.PLFM_AVR +""" +Atmel 8-bit RISC processor(s) +""" + +ida_idp.PLFM_C166 +""" +Siemens C166 family. +""" + +ida_idp.PLFM_C39 +""" +Rockwell C39. +""" + +ida_idp.PLFM_CR16 +""" +NSC CR16. +""" + +ida_idp.PLFM_DALVIK +""" +Android Dalvik Virtual Machine. +""" + +ida_idp.PLFM_DSP56K +""" +Motorola DSP5600x. +""" + +ida_idp.PLFM_DSP96K +""" +Motorola DSP96000. +""" + +ida_idp.PLFM_EBC +""" +EFI Bytecode. +""" + +ida_idp.PLFM_F2MC +""" +Fujistu F2MC-16. +""" + +ida_idp.PLFM_FR +""" +Fujitsu FR Family. +""" + +ida_idp.PLFM_H8 +""" +Hitachi H8/300, H8/2000. +""" + +ida_idp.PLFM_H8500 +""" +Hitachi H8/500. +""" + +ida_idp.PLFM_HPPA +""" +Hewlett-Packard PA-RISC. +""" + +ida_idp.PLFM_I860 +""" +Intel 860. +""" + +ida_idp.PLFM_I960 +""" +Intel 960. +""" + +ida_idp.PLFM_IA64 +""" +Intel Itanium IA64. +""" + +ida_idp.PLFM_JAVA +""" +Java. +""" + +ida_idp.PLFM_KR1878 +""" +Angstrem KR1878. +""" + +ida_idp.PLFM_M16C +""" +Renesas M16C. +""" + +ida_idp.PLFM_M32R +""" +Mitsubishi 32bit RISC. +""" + +ida_idp.PLFM_M740 +""" +Mitsubishi 8bit. +""" + +ida_idp.PLFM_M7700 +""" +Mitsubishi 16bit. +""" + +ida_idp.PLFM_M7900 +""" +Mitsubishi 7900. +""" + +ida_idp.PLFM_MC6812 +""" +Motorola 68HC12. +""" + +ida_idp.PLFM_MC6816 +""" +Motorola 68HC16. +""" + +ida_idp.PLFM_MIPS +""" +MIPS. +""" + +ida_idp.PLFM_MN102L00 +""" +Panasonic MN10200. +""" + +ida_idp.PLFM_MSP430 +""" +Texas Instruments MSP430. +""" + +ida_idp.PLFM_NEC_78K0 +""" +NEC 78K0. +""" + +ida_idp.PLFM_NEC_78K0S +""" +NEC 78K0S. +""" + +ida_idp.PLFM_NEC_V850X +""" +NEC V850 and V850ES/E1/E2. +""" + +ida_idp.PLFM_NET +""" +Microsoft Visual Studio.Net. +""" + +ida_idp.PLFM_OAKDSP +""" +Atmel OAK DSP. +""" + +ida_idp.PLFM_PDP +""" +PDP11. +""" + +ida_idp.PLFM_PIC +""" +Microchip's PIC. +""" + +ida_idp.PLFM_PIC16 +""" +Microchip's 16-bit PIC. +""" + +ida_idp.PLFM_PPC +""" +PowerPC. +""" + +ida_idp.PLFM_S390 +""" +IBM's S390. +""" + +ida_idp.PLFM_SCR_ADPT +""" +Processor module adapter for processor modules written in scripting +languages. +""" + +ida_idp.PLFM_SH +""" +Renesas (formerly Hitachi) SuperH. +""" + +ida_idp.PLFM_SPARC +""" +SPARC. +""" + +ida_idp.PLFM_SPC700 +""" +Sony SPC700. +""" + +ida_idp.PLFM_SPU +""" +Cell Broadband Engine Synergistic Processor Unit. +""" + +ida_idp.PLFM_ST20 +""" +SGS-Thomson ST20. +""" + +ida_idp.PLFM_ST7 +""" +SGS-Thomson ST7. +""" + +ida_idp.PLFM_ST9 +""" +ST9+. +""" + +ida_idp.PLFM_TLCS900 +""" +Toshiba TLCS-900. +""" + +ida_idp.PLFM_TMS +""" +Texas Instruments TMS320C5x. +""" + +ida_idp.PLFM_TMS320C1X +""" +Texas Instruments TMS320C1x. +""" + +ida_idp.PLFM_TMS320C28 +""" +Texas Instruments TMS320C28x. +""" + +ida_idp.PLFM_TMS320C3 +""" +Texas Instruments TMS320C3. +""" + +ida_idp.PLFM_TMS320C54 +""" +Texas Instruments TMS320C54xx. +""" + +ida_idp.PLFM_TMS320C55 +""" +Texas Instruments TMS320C55xx. +""" + +ida_idp.PLFM_TMSC6 +""" +Texas Instruments TMS320C6x. +""" + +ida_idp.PLFM_TRICORE +""" +Tasking Tricore. +""" + +ida_idp.PLFM_TRIMEDIA +""" +Trimedia. +""" + +ida_idp.PLFM_UNSP +""" +SunPlus unSP. +""" + +ida_idp.PLFM_Z8 +""" +Z8. +""" + +ida_idp.PLFM_Z80 +""" +8085, Z80 +""" + +ida_idp.PRN_BIN +""" +binary +""" + +ida_idp.PRN_DEC +""" +decimal +""" + +ida_idp.PRN_HEX +""" +hex +""" + +ida_idp.PRN_OCT +""" +octal +""" + +ida_idp.PR_ADJSEGS +""" +IDA may adjust segments' starting/ending addresses. +""" + +ida_idp.PR_ALIGN +""" +All data items should be aligned properly. +""" + +ida_idp.PR_ALIGN_INSN +""" +allow ida to create alignment instructions arbitrarily. Since these +instructions might lead to other wrong instructions and spoil the +listing, IDA does not create them by default anymore +""" + +ida_idp.PR_ASSEMBLE +""" +Module has a built-in assembler and will react to ev_assemble. +""" + +ida_idp.PR_BINMEM +""" +the processor module provides correct segmentation for binary files +(i.e. it creates additional segments) The kernel will not ask the user +to specify the RAM/ROM sizes +""" + +ida_idp.PR_CHK_XREF +""" +don't allow near xrefs between segments with different bases +""" + +ida_idp.PR_CNDINSNS +""" +has conditional instructions +""" + +ida_idp.PR_DEFNUM +""" +mask - default number representation +""" + +ida_idp.PR_DEFSEG32 +""" +segments are 32-bit by default +""" + +ida_idp.PR_DEFSEG64 +""" +segments are 64-bit by default +""" + +ida_idp.PR_DELAYED +""" +has delayed jumps and calls if this flag is set, +\\ph{is_basic_block_end}, \\ph{has_delay_slot} should be implemented +""" + +ida_idp.PR_NOCHANGE +""" +(display only) + +The user can't change segments and code/data attributes +""" + +ida_idp.PR_NO_SEGMOVE +""" +(i.e. the user can't move segments) + +the processor module doesn't support 'move_segm()' +""" + +ida_idp.PR_PURGING +""" +there are calling conventions which may purge bytes from the stack +""" + +ida_idp.PR_RNAMESOK +""" +allow user register names for location names +""" + +ida_idp.PR_SCALE_STKVARS +""" +use \\ph{get_stkvar_scale} callback +""" + +ida_idp.PR_SEGS +""" +has segment registers? +""" + +ida_idp.PR_SEGTRANS +""" +the processor module supports the segment translation feature (meaning +it calculates the code addresses using the 'map_code_ea()' function) +""" + +ida_idp.PR_SGROTHER +""" +the segment registers don't contain the segment selectors. +""" + +ida_idp.PR_STACK_UP +""" +the stack grows up +""" + +ida_idp.PR_TYPEINFO +""" +ALL OF THEM SHOULD BE IMPLEMENTED! + +the processor module supports type information callbacks +""" + +ida_idp.PR_USE32 +""" +supports 32-bit addressing? +""" + +ida_idp.PR_USE64 +""" +supports 64-bit addressing? +""" + +ida_idp.PR_USE_ARG_TYPES +""" +use \\ph{use_arg_types} callback +""" + +ida_idp.PR_USE_TBYTE +""" + 'BTMT_SPECFLT' means _TBYTE type +""" + +ida_idp.PR_WORD_INS +""" +instruction codes are grouped 2bytes in binary line prefix +""" + +ida_idp.REG_SPOIL +""" +processor_t::use_regarg_type uses this bit in the return value to +indicate that the register value has been spoiled +""" +=== ida_idp EPYDOC INJECTIONS END === +Help on class Choose in module ida_kernwin: + +class Choose(builtins.object) + | Chooser wrapper class. + | + | Some constants are defined in this class. + | Please refer to kernwin.hpp for more information. + | + | Methods defined here: + | + | Activate(self) + | Activates a visible chooser + | + | AddCommand(self, caption, flags=4, menu_index=-1, icon=-1, emb=None, shortcut=None) + | + | Close(self) + | Closes the chooser + | + | Embedded(self, create_chobj=False) + | Creates an embedded chooser (as opposed to Show()) + | @return: Returns 0 on success or NO_ATTR + | + | GetEmbSelection(self) + | Deprecated. For embedded choosers, the selection is + | available through 'Form.EmbeddedChooserControl.selection' + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | OnPopup(self, widget, popup_handle) + | + | Refresh(self) + | Causes the refresh callback to trigger + | + | Show(self, modal=False) + | Activates or creates a chooser window + | @param modal: Display as modal dialog + | @return: For all choosers it will return NO_ATTR if some mandatory + | attribute is missing. The mandatory attributes are: flags, + | title, cols, OnGetSize(), OnGetLine(); + | For modal choosers it will return the selected item index (0-based), + | or NO_SELECTION if no selection, + | or EMPTY_CHOOSER if the OnRefresh() callback returns EMPTY_CHOOSER; + | For non-modal choosers it will return 0 + | or ALREADY_EXISTS if the chooser was already open and is active now; + | + | __init__(self, title, cols, flags=0, popup_names=None, icon=-1, x1=-1, y1=-1, x2=-1, y2=-1, deflt=None, embedded=False, width=None, height=None, forbidden_cb=0) + | Constructs a chooser window. + | @param title: The chooser title + | @param cols: a list of colums; each list item is a list of two items + | example: [ ["Address", 10 | Choose.CHCOL_HEX], + | ["Name", 30 | Choose.CHCOL_PLAIN] ] + | @param flags: One of CH_XXXX constants + | @param deflt: The index of the default item (0-based) for single + | selection choosers or the list of indexes for multi selection + | chooser + | @param popup_names: List of new captions to replace this list + | ["Insert", "Delete", "Edit", "Refresh"] + | @param icon: Icon index (the icon should exist in ida resources or + | an index to a custom loaded icon) + | @param x1, y1, x2, y2: The default location (for txt-version) + | @param embedded: Create as embedded chooser + | @param width: Embedded chooser width + | @param height: Embedded chooser height + | @param forbidden_cb: Explicitly forbidden callbacks + | + | adjust_last_item(self, n) + | Helper for OnDeleteLine() and OnRefresh() callbacks. + | They can be finished by the following line: + | return [Choose.ALL_CHANGED] + self.adjust_last_item(n) + | @param: line number of the remaining select item + | @return: list of selected lines numbers (one element or empty) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | ALL_CHANGED = 1 + | + | ALREADY_EXISTS = -3 + | + | CHCOL_DEC = 196608 + | + | CHCOL_EA = 262144 + | + | CHCOL_FNAME = 327680 + | + | CHCOL_FORMAT = 458752 + | + | CHCOL_HEX = 131072 + | + | CHCOL_PATH = 65536 + | + | CHCOL_PLAIN = 0 + | + | CHOOSE_HAVE_DEL = 16 + | + | CHOOSE_HAVE_EDIT = 32 + | + | CHOOSE_HAVE_ENTER = 64 + | + | CHOOSE_HAVE_GETATTR = 4 + | + | CHOOSE_HAVE_GETICON = 2 + | + | CHOOSE_HAVE_INIT = 1 + | + | CHOOSE_HAVE_INS = 8 + | + | CHOOSE_HAVE_ONCLOSE = 512 + | + | CHOOSE_HAVE_REFRESH = 128 + | + | CHOOSE_HAVE_SELECT = 256 + | + | CH_ATTRS = 32 + | + | CH_BUILTIN_MASK = 33030144 + | + | CH_BUILTIN_SHIFT = 19 + | + | CH_CAN_DEL = 512 + | + | CH_CAN_EDIT = 1024 + | + | CH_CAN_INS = 256 + | + | CH_CAN_REFRESH = 2048 + | + | CH_FORCE_DEFAULT = 128 + | + | CH_MODAL = 1 + | + | CH_MULTI = 4 + | + | CH_NOBTNS = 16 + | + | CH_NOIDB = 64 + | + | CH_NO_STATUS_BAR = 65536 + | + | CH_QFLT = 4096 + | + | CH_QFTYP_DEFAULT = 0 + | + | CH_QFTYP_FUZZY = 32768 + | + | CH_QFTYP_MASK = 57344 + | + | CH_QFTYP_NORMAL = 8192 + | + | CH_QFTYP_REGEX = 24576 + | + | CH_QFTYP_SHIFT = 13 + | + | CH_QFTYP_WHOLE_WORDS = 16384 + | + | CH_RESTORE = 131072 + | + | EMPTY_CHOOSER = -2 + | + | NOTHING_CHANGED = 0 + | + | NO_ATTR = -4 + | + | NO_SELECTION = -1 + | + | SELECTION_CHANGED = 2 + | + | UI_Hooks_Trampoline = + | Proxy of C++ UI_Hooks class. + +Help on class CustomIDAMemo in module ida_kernwin: + +class CustomIDAMemo(View_Hooks) + | Proxy of C++ View_Hooks class. + | + | Method resolution order: + | CustomIDAMemo + | View_Hooks + | builtins.object + | + | Methods defined here: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | __init__(self) + | __init__(self, _flags=0) -> View_Hooks + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | view_activated(self, view) + | + | view_click(self, view, ve) + | view_click(self, view, event) + | + | view_close(self, view, *args) + | view_close(self, view) + | + | view_curpos(self, view, *args) + | view_curpos(self, view) + | + | view_dblclick(self, view, ve) + | view_dblclick(self, view, event) + | + | view_deactivated(self, view) + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, view, ve) + | view_mouse_over(self, view, event) + | + | view_switched(self, view, rt) + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_View_Hooks(...) + | delete_View_Hooks(self) + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | view_created(self, *args) -> 'void' + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on class Form in module ida_kernwin: + +class Form(builtins.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | Add(self, name, ctrl, mkattr=True) + | Low level function. Prefer AddControls() to this function. + | This function adds one control to the form. + | + | @param name: Control name + | @param ctrl: Control object + | @param mkattr: Create control name / control object as a form attribute + | + | AddControls(self, controls, mkattr=True) + | Adds controls from a dictionary. + | The dictionary key is the control name and the value is a Form.Control object + | @param controls: The control dictionary + | + | Close(self, close_normally) + | Close the form + | @param close_normally: + | 1: form is closed normally as if the user pressed Enter + | 0: form is closed abnormally as if the user pressed Esc + | @return: None + | + | Compile(self) + | Compiles a form and returns the form object (self) and the argument list. + | The form object will contain object names corresponding to the form elements + | + | @return: It will raise an exception on failure. Otherwise the return value is ignored + | + | CompileEx(self, form) + | Low level function. + | Compiles (parses the form syntax and adds the control) the form string and + | returns the argument list to be passed the argument list to ask_form(). + | + | The form controls are wrapped inside curly braces: {ControlName}. + | + | A special operator can be used to return the index of a given control by its name: {id:ControlName}. + | This is useful when you use the STARTITEM form keyword to set the initially focused control. + | (note that, technically, the index is not the same as the ID; that's because STARTITEM + | uses raw, 0-based indexes rather than control IDs to determine the focused widget.) + | + | @param form: Compiles the form and returns the arguments needed to be passed to ask_form() + | + | Compiled(self) + | Checks if the form has already been compiled + | + | @return: Boolean + | + | EnableField(self, ctrl, enable) + | Enable or disable an input field + | @return: False - no such control + | + | Execute(self) + | Displays a modal dialog containing the compiled form. + | @return: 1 - ok ; 0 - cancel + | + | FindControlById(self, id) + | Finds a control instance given its id + | + | Free(self) + | Frees all resources associated with a compiled form. + | Make sure you call this function when you finish using the form. + | + | GetControlValue(self, ctrl) + | Returns the control's value depending on its type + | @param ctrl: Form control instance + | @return: + | - color button, radio controls: integer + | - file/dir input, string input and string label: string + | - embedded chooser control (0-based indices of selected items): integer list + | - for multilinetext control: textctrl_info_t + | - dropdown list controls: string (when editable) or index (when readonly) + | - None: on failure + | + | GetFocusedField(self) + | Get currently focused input field. + | @return: None if no field is selected otherwise the control ID + | + | MoveField(self, ctrl, x, y, w, h) + | Move/resize an input field + | + | @return: False - no such fiel + | + | Open(self) + | Opens a widget containing the compiled form. + | + | RefreshField(self, ctrl) + | Refresh a field + | @return: False - no such control + | + | SetControlValue(self, ctrl, value) + | Set the control's value depending on its type + | @param ctrl: Form control instance + | @param value: + | - embedded chooser: a 0-base indices list to select embedded chooser items + | - multilinetext: a textctrl_info_t + | - dropdown list: an integer designating the selection index if readonly + | a string designating the edit control value if not readonly + | @return: Boolean true on success + | + | SetFocusedField(self, ctrl) + | Set currently focused input field + | @return: False - no such control + | + | ShowField(self, ctrl, show) + | Show or hide an input field + | @return: False - no such control + | + | _AddGroup(self, Group, mkattr=True) + | Internal function. + | This function expands the group item names and creates individual group item controls + | + | @param Group: The group class (checkbox or radio group class) + | + | _ChkCompiled(self) + | + | __getitem__(self, name) + | Returns a control object by name + | + | __init__(self, form, controls) + | Contruct a Form class. + | This class wraps around ask_form() or open_form() and provides an easier / alternative syntax for describing forms. + | The form control names are wrapped inside the opening and closing curly braces and the control themselves are + | defined and instantiated via various form controls (subclasses of Form). + | + | @param form: The form string + | @param controls: A dictionary containing the control name as a _key_ and control object as _value_ + | + | _reset(self) + | Resets the Form class state variables + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | ControlToFieldTypeIdAndSize(ctrl) + | Converts a control object to a tuple containing the field id + | and the associated buffer size + | + | _ParseFormTitle(form) + | Parses the form's title from the form text + | + | create_string_buffer(value, size=None) + | + | fieldtype_to_ctype(tp, i64=False) + | Factory method returning a ctype class corresponding to the field type string + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | ButtonInput = + | Button control. + | A handler along with a 'code' (numeric value) can be associated with the button. + | This way one handler can handle many buttons based on the button code (or in other terms id or tag) + | + | ChkGroupControl = + | Checkbox group control class. + | It holds a set of checkbox controls + | + | ChkGroupItemControl = + | Checkbox group item control + | + | ColorInput = + | Color button input control + | + | Control = + | + | + | DirInput = + | Directory browsing control + | + | DropdownListControl = + | Dropdown control + | This control allows manipulating a dropdown control + | + | EmbeddedChooserControl = + | File Open/Save input control + | + | FormChangeCb = + | Form change handler. + | This can be thought of like a dialog procedure. + | Everytime a form action occurs, this handler will be called along with the control id. + | The programmer can then call various form actions accordingly: + | - EnableField + | - ShowField + | - MoveField + | - GetFieldValue + | - etc... + | + | Special control IDs: -1 (The form is initialized) and -2 (Ok has been clicked) + | + | GroupControl = + | Base class for group controls + | + | GroupItemControl = + | Base class for group control items + | + | InputControl = + | Generic form input control. + | It could be numeric control, string control, directory/file browsing, etc... + | + | LabelControl = + | Base class for static label control + | + | MultiLineTextControl = + | Multi line text control. + | This class inherits from textctrl_info_t. Thus the attributes are also inherited + | This control allows manipulating a multilinetext control + | + | NumericArgument = + | Argument representing various integer arguments (ushort, uint32, uint64, etc...) + | @param tp: One of Form.FT_XXX + | + | NumericInput = + | A composite class serving as a base numeric input control class + | + | NumericLabel = + | Numeric label control + | + | RadGroupControl = + | Radiobox group control class. + | It holds a set of radiobox controls + | + | RadGroupItemControl = + | Radiobox group item control + | + | StringArgument = + | Argument representing a character buffer + | + | StringInput = + | Base string input control class. + | This class also constructs a StringArgument + | + | StringLabel = + | String label control + | + | _FT_USHORT = '_US' + +Help on class IDAViewWrapper in module ida_kernwin: + +class IDAViewWrapper(CustomIDAMemo) + | Deprecated. Use View_Hooks instead. + | + | Because the lifecycle of an IDAView is not trivial to track (e.g., a user + | might close, then re-open the same disassembly view), this wrapper doesn't + | bring anything superior to the View_Hooks: quite the contrary, as the + | latter is much more generic (and better maps IDA's internal model.) + | + | Method resolution order: + | IDAViewWrapper + | CustomIDAMemo + | View_Hooks + | builtins.object + | + | Methods defined here: + | + | Bind(self) + | + | Unbind(self) + | + | __init__(self, title) + | __init__(self, _flags=0) -> View_Hooks + | + | ---------------------------------------------------------------------- + | Methods inherited from CustomIDAMemo: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | view_activated(self, view) + | + | view_click(self, view, ve) + | view_click(self, view, event) + | + | view_close(self, view, *args) + | view_close(self, view) + | + | view_curpos(self, view, *args) + | view_curpos(self, view) + | + | view_dblclick(self, view, ve) + | view_dblclick(self, view, event) + | + | view_deactivated(self, view) + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, view, ve) + | view_mouse_over(self, view, event) + | + | view_switched(self, view, rt) + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods inherited from CustomIDAMemo: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_View_Hooks(...) + | delete_View_Hooks(self) + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | view_created(self, *args) -> 'void' + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on class PluginForm in module ida_kernwin: + +class PluginForm(builtins.object) + | PluginForm class. + | + | This form can be used to host additional controls. Please check the PyQt example. + | + | Methods defined here: + | + | Close(self, options) + | Closes the form. + | + | @param options: Close options (WCLS_SAVE, WCLS_NO_CONTEXT, ...) + | + | @return: None + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | OnClose(self, form) + | Called when the plugin form is closed + | + | @return: None + | + | OnCreate(self, form) + | This event is called when the plugin form is created. + | The programmer should populate the form when this event is triggered. + | + | @return: None + | + | Show(self, caption, options=0) + | Creates the form if not was not created or brings to front if it was already created + | + | @param caption: The form caption + | @param options: One of PluginForm.WOPN_ constants + | + | __init__(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | 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=) + | 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=) + | 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=) + | 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=) + | 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 + | + | _ensure_widget_deps(ctx) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | VALID_CAPSULE_NAME = b'$valid$' + | + | WCLS_CLOSE_LATER = 8 + | + | WCLS_DONT_SAVE_SIZE = 4 + | + | WCLS_NO_CONTEXT = 2 + | + | WCLS_SAVE = 1 + | + | WOPN_CENTERED = 32 + | + | WOPN_CREATE_ONLY = {} + | + | WOPN_DP_BEFORE = 2097152 + | + | WOPN_DP_BOTTOM = 524288 + | + | WOPN_DP_FLOATING = 8388608 + | + | WOPN_DP_INSIDE = 1048576 + | + | WOPN_DP_INSIDE_BEFORE = 3145728 + | + | WOPN_DP_LEFT = 65536 + | + | WOPN_DP_RIGHT = 262144 + | + | WOPN_DP_TAB = 4194304 + | + | WOPN_DP_TAB_BEFORE = 6291456 + | + | WOPN_DP_TOP = 131072 + | + | WOPN_MDI = 1 + | + | WOPN_MENU = 16 + | + | WOPN_ONTOP = 8 + | + | WOPN_PERSIST = 64 + | + | WOPN_RESTORE = 4 + | + | WOPN_TAB = 2 + +Help on function TWidget__from_ptrval__ in module ida_kernwin: + +TWidget__from_ptrval__(*args) -> 'TWidget *' + TWidget__from_ptrval__(ptrval) -> TWidget * + +Help on class UI_Hooks in module ida_kernwin: + +class UI_Hooks(builtins.object) + | Proxy of C++ UI_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> UI_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_UI_Hooks(...) + | delete_UI_Hooks(self) + | + | create_desktop_widget(self, *args) -> 'PyObject *' + | create_desktop_widget(self, title, cfg) -> PyObject * + | + | current_widget_changed(self, *args) -> 'void' + | current_widget_changed(self, widget, prev_widget) + | + | database_inited(self, *args) -> 'void' + | database_inited(self, is_new_database, idc_script) + | + | debugger_menu_change(self, *args) -> 'void' + | debugger_menu_change(self, enable) + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | finish_populating_widget_popup(self, *args) -> 'void' + | finish_populating_widget_popup(self, widget, popup_handle, ctx=None) + | + | + | The UI is about to be done populating the TWidget's popup menu. + | Now is a good time to call idaapi.attach_action_to_popup() + | + | @param widget: The widget + | @param popup: The popup menu. + | @return: Ignored + | + | get_chooser_item_attrs(self, *args) -> 'void' + | get_chooser_item_attrs(self, chooser, n, attrs) + | + | get_custom_viewer_hint(self, *args) -> 'PyObject *' + | get_custom_viewer_hint(self, viewer, place) -> PyObject * + | + | get_ea_hint(self, *args) -> 'PyObject *' + | get_ea_hint(self, ea) -> PyObject * + | + | + | The UI wants to display a simple hint for an address in the navigation band + | + | @param ea: The address + | @return: String with the hint or None + | + | get_item_hint(self, *args) -> 'PyObject *' + | get_item_hint(self, ea, max_lines) -> PyObject * + | + | get_widget_config(self, *args) -> 'PyObject *' + | get_widget_config(self, widget, cfg) -> PyObject * + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | + | Creates an UI hook + | + | @return: Boolean true on success + | + | idcstart(self, *args) -> 'void' + | idcstart(self) + | + | idcstop(self, *args) -> 'void' + | idcstop(self) + | + | plugin_loaded(self, *args) -> 'void' + | plugin_loaded(self, plugin_info) + | + | plugin_unloading(self, *args) -> 'void' + | plugin_unloading(self, plugin_info) + | + | populating_widget_popup(self, *args) -> 'void' + | populating_widget_popup(self, widget, popup_handle, ctx=None) + | + | + | The UI is populating the TWidget's popup menu. + | Now is a good time to call idaapi.attach_action_to_popup() + | + | @param widget: The widget + | @param popup: The popup menu. + | @return: Ignored + | + | postprocess_action(self, *args) -> 'void' + | postprocess_action(self) + | + | + | An ida ui action has been handled + | + | @return: Ignored + | + | preprocess_action(self, *args) -> 'void' + | preprocess_action(self, name) + | + | + | IDA ui is about to handle a user action + | + | @param name: ui action name + | (these names can be looked up in ida[tg]ui.cfg) + | @return: 0-ok, nonzero - a plugin has handled the action + | + | range(self, *args) -> 'void' + | range(self) + | + | ready_to_run(self, *args) -> 'void' + | ready_to_run(self) + | + | resume(self, *args) -> 'void' + | resume(self) + | + | saved(self, *args) -> 'void' + | saved(self) + | + | + | The kernel has saved the database. + | + | @return: Ignored + | + | saving(self, *args) -> 'void' + | saving(self) + | + | + | The kernel is saving the database. + | + | @return: Ignored + | + | screen_ea_changed(self, *args) -> 'void' + | screen_ea_changed(self, ea, prev_ea) + | + | set_widget_config(self, *args) -> 'void' + | set_widget_config(self, widget, cfg) + | + | suspend(self, *args) -> 'void' + | suspend(self) + | + | term(self, *args) -> 'void' + | term(self) + | + | + | IDA is terminated and the database is already closed. + | The UI may close its windows in this callback. + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | + | Removes the UI hook + | @return: Boolean true on success + | + | updated_actions(self, *args) -> 'void' + | updated_actions(self) + | + | + | The UI is done updating actions. + | + | @return: Ignored + | + | updating_actions(self, *args) -> 'void' + | updating_actions(self, ctx) + | + | + | The UI is about to batch-update some actions. + | + | @param ctx: The action_update_ctx_t instance + | @return: Ignored + | + | widget_closing(self, *args) -> 'void' + | widget_closing(self, widget) + | + | widget_invisible(self, *args) -> 'void' + | widget_invisible(self, widget) + | + | widget_visible(self, *args) -> 'void' + | widget_visible(self, widget) + | + | ---------------------------------------------------------------------- + | 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 + +Help on class View_Hooks in module ida_kernwin: + +class View_Hooks(builtins.object) + | Proxy of C++ View_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> View_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_View_Hooks(...) + | delete_View_Hooks(self) + | + | dump_state(self, *args) -> 'qstring' + | dump_state(self) -> qstring + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | view_activated(self, *args) -> 'void' + | view_activated(self, view) + | + | view_click(self, *args) -> 'void' + | view_click(self, view, event) + | + | view_close(self, *args) -> 'void' + | view_close(self, view) + | + | view_created(self, *args) -> 'void' + | view_created(self, view) + | + | view_curpos(self, *args) -> 'void' + | view_curpos(self, view) + | + | view_dblclick(self, *args) -> 'void' + | view_dblclick(self, view, event) + | + | view_deactivated(self, *args) -> 'void' + | view_deactivated(self, view) + | + | view_keydown(self, *args) -> 'void' + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, *args) -> 'void' + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, *args) -> 'void' + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, *args) -> 'void' + | view_mouse_over(self, view, event) + | + | view_switched(self, *args) -> 'void' + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | 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 + +Help on class __qtimer_t in module ida_kernwin: + +class __qtimer_t(builtins.object) + | Proxy of C++ __qtimer_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qtimer_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete___qtimer_t(...) + | delete___qtimer_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 + +Help on function _ask_addr in module ida_kernwin: + +_ask_addr(*args) -> 'ea_t *' + _ask_addr(addr, format) -> bool + +Help on function _ask_long in module ida_kernwin: + +_ask_long(*args) -> 'sval_t *' + _ask_long(value, format) -> bool + +Help on function _ask_seg in module ida_kernwin: + +_ask_seg(*args) -> 'sel_t *' + _ask_seg(sel, format) -> bool + +Help on function _call_ask_form in module ida_kernwin: + +_call_ask_form(*args) + +Help on function _call_open_form in module ida_kernwin: + +_call_open_form(*args) + +Help on class action_ctx_base_t in module ida_kernwin: + +class action_ctx_base_t(builtins.object) + | Proxy of C++ action_ctx_base_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> action_ctx_base_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_action_ctx_base_t(...) + | delete_action_ctx_base_t(self) + | + | _get_form(self, *args) -> 'TWidget *' + | _get_form(self) -> TWidget * + | + | _get_form_title(self, *args) -> 'qstring' + | _get_form_title(self) -> qstring + | + | _get_form_type(self, *args) -> 'twidget_type_t' + | _get_form_type(self) -> twidget_type_t + | + | has_flag(self, *args) -> 'bool' + | has_flag(self, flag) -> bool + | + | reset(self, *args) -> 'void' + | reset(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | action + | action_ctx_base_t_action_get(self) -> char const * + | + | chooser_selection + | action_ctx_base_t_chooser_selection_get(self) -> sizevec_t * + | + | cur_ea + | action_ctx_base_t_cur_ea_get(self) -> ea_t + | + | cur_enum + | action_ctx_base_t_cur_enum_get(self) -> enum_t + | + | cur_extracted_ea + | action_ctx_base_t_cur_value_get(self) -> uval_t + | + | cur_fchunk + | action_ctx_base_t_cur_fchunk_get(self) -> func_t * + | + | cur_flags + | action_ctx_base_t_cur_flags_get(self) -> uint32 + | + | cur_func + | action_ctx_base_t_cur_func_get(self) -> func_t * + | + | cur_seg + | action_ctx_base_t_cur_seg_get(self) -> segment_t * + | + | cur_strmem + | action_ctx_base_t_cur_strmem_get(self) -> member_t * + | + | cur_struc + | action_ctx_base_t_cur_struc_get(self) -> struc_t * + | + | cur_value + | action_ctx_base_t_cur_value_get(self) -> uval_t + | + | focus + | action_ctx_base_t_focus_get(self) -> TWidget * + | + | form + | _get_form(self) -> TWidget * + | + | form_title + | _get_form_title(self) -> qstring + | + | form_type + | _get_form_type(self) -> twidget_type_t + | + | graph_selection + | action_ctx_base_t_graph_selection_get(self) -> screen_graph_selection_t * + | + | regname + | action_ctx_base_t_regname_get(self) -> char const * + | + | thisown + | The membership flag + | + | widget + | action_ctx_base_t_widget_get(self) -> TWidget * + | + | widget_title + | action_ctx_base_t_widget_title_get(self) -> qstring * + | + | widget_type + | action_ctx_base_t_widget_type_get(self) -> twidget_type_t + +Help on class action_desc_t in module ida_kernwin: + +class action_desc_t(builtins.object) + | Proxy of C++ action_desc_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, name, label, handler, shortcut=None, tooltip=None, icon=-1, flags=0) -> action_desc_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_action_desc_t(...) + | delete_action_desc_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | action_desc_t_cb_get(self) -> int + | + | flags + | action_desc_t_flags_get(self) -> int + | + | icon + | action_desc_t_icon_get(self) -> int + | + | label + | action_desc_t_label_get(self) -> char const * + | + | name + | action_desc_t_name_get(self) -> char const * + | + | owner + | action_desc_t_owner_get(self) -> plugin_t const * + | + | shortcut + | action_desc_t_shortcut_get(self) -> char const * + | + | thisown + | The membership flag + | + | tooltip + | action_desc_t_tooltip_get(self) -> char const * + +Help on class action_handler_t in module ida_kernwin: + +class action_handler_t(builtins.object) + | # ---------------------------------------------------------------------- + | + | Methods defined here: + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | activate(self, ctx) + | + | update(self, ctx) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function activate_widget in module ida_kernwin: + +activate_widget(*args) -> 'void' + activate_widget(widget, take_focus) + + + Activate widget (only gui version) ( 'ui_activate_widget' ). + + @param widget: existing widget to display (C++: TWidget *) + @param take_focus: give focus to given widget (C++: bool) + +Help on function add_hotkey in module ida_kernwin: + +add_hotkey(*args) -> 'PyObject *' + add_hotkey(hotkey, pyfunc) -> PyObject * + + + Associates a function call with a hotkey. + Callable pyfunc will be called each time the hotkey is pressed + + @param hotkey: The hotkey + @param pyfunc: Callable + + @return: Context object on success or None on failure. + +Help on function add_idc_hotkey in module ida_kernwin: + +add_idc_hotkey(*args) -> 'int' + add_idc_hotkey(hotkey, idcfunc) -> int + + + Add hotkey for IDC function ( 'ui_add_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + @param idcfunc: IDC function name (C++: const char *) + @return: IDC hotkey error codes + +Help on function add_spaces in module ida_kernwin: + +add_spaces(*args) -> 'PyObject *' + add_spaces(s, len) -> PyObject * + + + Add space characters to the colored string so that its length will be + at least 'len' characters. Don't trim the string if it is longer than + 'len'. + + @param len: the desired length of the string (C++: ssize_t) + @return: pointer to the end of input string + +Help on function addon_count in module ida_kernwin: + +addon_count(*args) -> 'int' + addon_count() -> int + + + Get number of installed addons. + +Help on class addon_info_t in module ida_kernwin: + +class addon_info_t(builtins.object) + | Proxy of C++ addon_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> addon_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_addon_info_t(...) + | delete_addon_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | addon_info_t_cb_get(self) -> size_t + | + | custom_data + | addon_info_t_custom_data_get(self) -> void const * + | + | custom_size + | addon_info_t_custom_size_get(self) -> size_t + | + | freeform + | addon_info_t_freeform_get(self) -> char const * + | + | id + | addon_info_t_id_get(self) -> char const * + | + | name + | addon_info_t_name_get(self) -> char const * + | + | producer + | addon_info_t_producer_get(self) -> char const * + | + | thisown + | The membership flag + | + | url + | addon_info_t_url_get(self) -> char const * + | + | version + | addon_info_t_version_get(self) -> char const * + +Help on function analyzer_options in module ida_kernwin: + +analyzer_options(*args) -> 'void' + analyzer_options() + + + Allow the user to set analyzer options. (show a dialog box) ( + 'ui_analyzer_options' ) + +Help on function ask_addr in module ida_kernwin: + +ask_addr(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_buttons in module ida_kernwin: + +ask_buttons(*args) -> 'int' + ask_buttons(Yes, No, Cancel, deflt, format) -> int + + + Display a dialog box and get choice from maximum three possibilities ( + 'ui_ask_buttons' ).for all buttons:use "" or NULL to take the default + name for the button.use 'format' to hide the cancel button + + @param Yes: text for the first button (C++: const char *) + @param No: text for the second button (C++: const char *) + @param Cancel: text for the third button (C++: const char *) + @param deflt: default choice: one of Button IDs (C++: int) + @param format: printf-style format string for question. It may have + some prefixes, see below. (C++: const char *) + @return: one of Button IDs specifying the selected button (Esc key + returns Cancel/3rd button value) + +Help on function ask_file in module ida_kernwin: + +ask_file(*args) -> 'char *' + ask_file(for_saving, defval, format) -> char * + +Help on function ask_for_feedback in module ida_kernwin: + +ask_for_feedback(*args) -> 'void' + ask_for_feedback(format) + + + Show a message box asking to send the input file tosupport@hex- + rays.com. + + @param format: the reason why the input file is bad (C++: const char + *) + +Help on function ask_ident in module ida_kernwin: + +ask_ident(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_long in module ida_kernwin: + +ask_long(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_seg in module ida_kernwin: + +ask_seg(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_str in module ida_kernwin: + +ask_str(*args) -> 'PyObject *' + ask_str(defval, hist, prompt) -> PyObject * + + + Asks for a long text + + @param hist: history id + @param defval: The default value + @param prompt: The prompt value + @return: None or the entered string + +Help on function ask_text in module ida_kernwin: + +ask_text(*args) -> 'PyObject *' + ask_text(max_size, defval, prompt) -> PyObject * + + + Asks for a long text + + @param max_size: Maximum text length, 0 for unlimited + @param defval: The default value + @param prompt: The prompt value + @return: None or the entered string + +Help on function ask_yn in module ida_kernwin: + +ask_yn(*args) -> 'int' + ask_yn(deflt, format) -> int + + + Display a dialog box and get choice from "Yes", "No", "Cancel". + + @param deflt: default choice: one of Button IDs (C++: int) + @param format: The question in printf() style format (C++: const char + *) + @return: the selected button (one of Button IDs ). Esc key returns + ASKBTN_CANCEL . + +Help on function attach_action_to_menu in module ida_kernwin: + +attach_action_to_menu(*args) -> 'bool' + attach_action_to_menu(menupath, name, flags) -> bool + + + Attach a previously-registered action to the menu ( + 'ui_attach_action_to_menu' ).You should not change top level menu, or + the Edit,Plugins submenus If you want to modify the debugger menu, do + it at the ui_debugger_menu_change event (ida might destroy your menu + item if you do it elsewhere). + + @param menupath: path to the menu item after or before which the + insertion will take place. Example: + Debug/StartProcess Whitespace, punctuation are + ignored. It is allowed to specify only the prefix + of the menu item. Comparison is case insensitive. + menupath may start with the following prefixes: [S] + - modify the main menu of the structure window [E] + - modify the main menu of the enum window (C++: const + char *) + @param name: the action name (C++: const char *) + @param flags: a combination of Set menu flags , to determine menu + item position (C++: int) + @return: success + +Help on function attach_action_to_popup in module ida_kernwin: + +attach_action_to_popup(*args) -> 'bool' + attach_action_to_popup(widget, popup_handle, name, popuppath=None, flags=0) -> bool + + + Insert a previously-registered action into the widget's popup menu ( + 'ui_attach_action_to_popup' ). This function has two "modes": 'single- + shot', and 'permanent'. + + @param widget: target widget (C++: TWidget *) + @param popup_handle: target popup menu if non-NULL, the action is + added to this popup menu invocation (i.e., + 'single-shot') if NULL, the action is added to + a list of actions that should always be present + in context menus for this widget (i.e., + 'permanent'.) (C++: TPopupMenu *) + @param name: action name (C++: const char *) + @param popuppath: can be NULL (C++: const char *) + @param flags: a combination of SETMENU_ flags (see Set menu flags ) + (C++: int) + @return: success + +Help on function attach_action_to_toolbar in module ida_kernwin: + +attach_action_to_toolbar(*args) -> 'bool' + attach_action_to_toolbar(toolbar_name, name) -> bool + + + Attach an action to an existing toolbar ( + 'ui_attach_action_to_toolbar' ). + + @param toolbar_name: the name of the toolbar (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on function attach_dynamic_action_to_popup in module ida_kernwin: + +attach_dynamic_action_to_popup(*args) -> 'bool' + attach_dynamic_action_to_popup(widget, popup_handle, desc, popuppath=None, flags=0) -> bool + + + Create & insert an action into the widget's popup menu ( + 'ui_attach_dynamic_action_to_popup' ). 'action_desc_t::handler' for + 'desc' must be instantiated using 'new', as it will be 'delete'd when + the action is unregistered. + + @param widget: target widget (C++: TWidget *) + @param popup_handle: target popup (C++: TPopupMenu *) + @param desc: created with DYNACTION_DESC_LITERAL (C++: const + action_desc_t &) + @param popuppath: can be NULL (C++: const char *) + @param flags: a combination of SETMENU_ constants (see Set menu flags + ) (C++: int) + @return: success + +Help on function banner in module ida_kernwin: + +banner(*args) -> 'bool' + banner(wait) -> bool + + + Show a banner dialog box ( 'ui_banner' ). + + @param wait: time to wait before closing (C++: int) + +Help on function beep in module ida_kernwin: + +beep(*args) -> 'void' + beep(beep_type=beep_default) + + + Issue a beeping sound ( 'ui_beep' ). + + @param beep_type: beep_t (C++: beep_t) + +Help on function call_nav_colorizer in module ida_kernwin: + +call_nav_colorizer(*args) -> 'uint32' + call_nav_colorizer(dict, ea, nbytes) -> uint32 + + + To be used with the IDA-provided colorizer, that is + returned as result of the first call to set_nav_colorizer(). + +Help on function cancel_exec_request in module ida_kernwin: + +cancel_exec_request(*args) -> 'bool' + cancel_exec_request(req_id) -> bool + + + Try to cancel an asynchronous exec request ( 'ui_cancel_exec_request' + ). + + @param req_id: request id (C++: int) + +Help on function choose_activate in module ida_kernwin: + +choose_activate(*args) -> 'void' + choose_activate(_self) + +Help on function choose_choose in module ida_kernwin: + +choose_choose(*args) -> 'PyObject *' + choose_choose(_self) -> PyObject * + +Help on function choose_close in module ida_kernwin: + +choose_close(*args) -> 'void' + choose_close(_self) + +Help on function choose_create_embedded_chobj in module ida_kernwin: + +choose_create_embedded_chobj(*args) -> 'PyObject *' + choose_create_embedded_chobj(_self) -> PyObject * + +Help on function choose_entry in module ida_kernwin: + +choose_entry(*args) -> 'ea_t' + choose_entry(title) -> ea_t + + + Choose an entry point ( 'ui_choose' , 'chtype_entry' ). + + @param title: chooser title (C++: const char *) + @return: ea of selected entry point, BADADDR if none selected + +Help on function choose_enum in module ida_kernwin: + +choose_enum(*args) -> 'enum_t' + choose_enum(title, default_id) -> enum_t + + + Choose an enum ( 'ui_choose' , 'chtype_enum' ). + + @param title: chooser title (C++: const char *) + @param default_id: id of enum to select by default (C++: enum_t) + @return: enum id of selected enum, BADNODE if none selected + +Help on function choose_enum_by_value in module ida_kernwin: + +choose_enum_by_value(*args) -> 'uchar *' + choose_enum_by_value(title, default_id, value, nbytes) -> enum_t + + + Choose an enum, restricted by value & size ( 'ui_choose' , + 'chtype_enum_by_value_and_size' ). If the given value cannot be found + initially, this function will ask if the user would like to import a + standard enum. + + @param title: chooser title (C++: const char *) + @param default_id: id of enum to select by default (C++: enum_t) + @param value: value to search for (C++: uval_t) + @param nbytes: size of value (C++: int) + @return: enum id of selected (or imported) enum, BADNODE if none was + found + +Help on function choose_find in module ida_kernwin: + +choose_find(*args) -> 'PyObject *' + choose_find(title) -> PyObject * + +Help on function choose_func in module ida_kernwin: + +choose_func(*args) -> 'func_t *' + choose_func(title, default_ea) -> func_t * + + + Choose a function ( 'ui_choose' , 'chtype_func' ). + + @param title: chooser title (C++: const char *) + @param default_ea: ea of function to select by default (C++: ea_t) + @return: pointer to function that was selected, NULL if none selected + +Help on function choose_get_widget in module ida_kernwin: + +choose_get_widget(*args) -> 'TWidget *' + choose_get_widget(_self) -> TWidget * + +Help on function choose_idasgn in module ida_kernwin: + +choose_idasgn(*args) -> 'PyObject *' + choose_idasgn() -> PyObject * + + + Opens the signature chooser + + @return: None or the selected signature name + +Help on function choose_name in module ida_kernwin: + +choose_name(*args) -> 'ea_t' + choose_name(title) -> ea_t + + + Choose a name ( 'ui_choose' , 'chtype_name' ). + + @param title: chooser title (C++: const char *) + @return: ea of selected name, BADADDR if none selected + +Help on function choose_refresh in module ida_kernwin: + +choose_refresh(*args) -> 'void' + choose_refresh(_self) + +Help on function choose_segm in module ida_kernwin: + +choose_segm(*args) -> 'segment_t *' + choose_segm(title, default_ea) -> segment_t * + + + Choose a segment ( 'ui_choose' , 'chtype_segm' ). + + @param title: chooser title (C++: const char *) + @param default_ea: ea of segment to select by default (C++: ea_t) + @return: pointer to segment that was selected, NULL if none selected + +Help on function choose_srcp in module ida_kernwin: + +choose_srcp(*args) -> 'sreg_range_t *' + choose_srcp(title) -> sreg_range_t * + + + Choose a segment register change point ( 'ui_choose' , 'chtype_srcp' + ). + + @param title: chooser title (C++: const char *) + @return: pointer to segment register range of selected change point, + NULL if none selected + +Help on function choose_stkvar_xref in module ida_kernwin: + +choose_stkvar_xref(*args) -> 'ea_t' + choose_stkvar_xref(pfn, mptr) -> ea_t + + + Choose an xref to a stack variable ( 'ui_choose' , 'chtype_name' ). + + @param pfn: function (C++: func_t *) + @param mptr: variable (C++: member_t *) + @return: ea of the selected xref, BADADDR if none selected + +Help on function choose_struc in module ida_kernwin: + +choose_struc(*args) -> 'struc_t *' + choose_struc(title) -> struc_t * + + + Choose a structure ( 'ui_choose' , 'chtype_segm' ). + + @param title: chooser title; (C++: const char *) + @return: pointer to structure that was selected, NULL if none selected + +Help on function choose_til in module ida_kernwin: + +choose_til(*args) -> 'qstring *' + choose_til() -> str + + + Choose a type library ( 'ui_choose' , 'chtype_idatil' ). + +Help on function choose_xref in module ida_kernwin: + +choose_xref(*args) -> 'ea_t' + choose_xref(to) -> ea_t + + + Choose an xref to an address ( 'ui_choose' , 'chtype_xref' ). + + @param to: referenced address (C++: ea_t) + @return: ea of selected xref, BADADDR if none selected + +Help on class chooser_item_attrs_t in module ida_kernwin: + +class chooser_item_attrs_t(builtins.object) + | Proxy of C++ chooser_item_attrs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> chooser_item_attrs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_chooser_item_attrs_t(...) + | delete_chooser_item_attrs_t(self) + | + | reset(self, *args) -> 'void' + | reset(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | color + | chooser_item_attrs_t_color_get(self) -> bgcolor_t + | + | flags + | chooser_item_attrs_t_flags_get(self) -> int + | + | thisown + | The membership flag + +Help on function clear_refresh_request in module ida_kernwin: + +clear_refresh_request(*args) -> 'void' + clear_refresh_request(mask) + +Help on class cli_t in module ida_kernwin: + +class cli_t(ida_idaapi.pyidc_opaque_object_t) + | cli_t wrapper class. + | + | This class allows you to implement your own command line interface handlers. + | + | Method resolution order: + | cli_t + | ida_idaapi.pyidc_opaque_object_t + | builtins.object + | + | Methods defined here: + | + | __del__(self) + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | register(self, flags=0, sname=None, lname=None, hint=None) + | Registers the CLI. + | + | @param flags: Feature bits. No bits are defined yet, must be 0 + | @param sname: Short name (displayed on the button) + | @param lname: Long name (displayed in the menu) + | @param hint: Hint for the input line + | + | @return Boolean: True-Success, False-Failed + | + | unregister(self) + | Unregisters the CLI (if it was registered) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function close_chooser in module ida_kernwin: + +close_chooser(*args) -> 'bool' + close_chooser(title) -> bool + + + Close a non-modal chooser ( 'ui_close_chooser' ). + + @param title: window title of chooser to close (C++: const char *) + @return: success + +Help on function close_widget in module ida_kernwin: + +close_widget(*args) -> 'void' + close_widget(widget, options) + + + Close widget ( 'ui_close_widget' , only gui version). + + @param widget: pointer to the widget to close (C++: TWidget *) + @param options: Form close flags (C++: int) + +Help on function clr_cancelled in module ida_kernwin: + +clr_cancelled(*args) -> 'void' + clr_cancelled() + + + Clear "Cancelled" flag ( 'ui_clr_cancelled' ) + +Help on function create_code_viewer in module ida_kernwin: + +create_code_viewer(*args) -> 'TWidget *' + create_code_viewer(custview, flags=0, parent=None) -> TWidget * + + + Create a code viewer ( 'ui_create_code_viewer' ). A code viewer + contains on the left side a widget representing the line numbers, and + on the right side, the child widget passed as parameter. It will + inherit its title from the child widget. + + @param custview: the custom view to be added (C++: TWidget *) + @param flags: Code viewer flags (C++: int) + @param parent: widget to contain the new code viewer (C++: TWidget *) + +Help on function create_empty_widget in module ida_kernwin: + +create_empty_widget(*args) -> 'TWidget *' + create_empty_widget(title, icon=-1) -> TWidget * + + + Create an empty widget, serving as a container for custom user widgets + + @param title (C++: const char *) + @param icon (C++: int) + +Help on function create_menu in module ida_kernwin: + +create_menu(*args) -> 'bool' + create_menu(name, label, menupath=None) -> bool + + + Create a menu with the given name, label and optional position, either + in the menubar, or as a submenu. If 'menupath' is non-NULL, it + provides information about where the menu should be positioned. First, + IDA will try and resolve the corresponding menu by its name. If such + an existing menu is found and is present in the menubar, then the new + menu will be inserted in the menubar before it. Otherwise, IDA will + try to resolve 'menupath' as it would for 'attach_action_to_menu()' + and, if found, add the new menu like so: + + // The new 'My menu' submenu will appear in the 'Comments' submenu + // before the 'Enter comment..." command + create_menu("(...)", "My menu", "Edit/Comments/Enter comment..."); + + or + + // The new 'My menu' submenu will appear at the end of the + // 'Comments' submenu. + create_menu("(...)", "My menu", "Edit/Comments/"); + + If the above fails, the new menu will be appended to the menubar. + + @param name: name of menu (must be unique) (C++: const char *) + @param label: label of menu (C++: const char *) + @param menupath: where should the menu be inserted (C++: const char *) + @return: success + +Help on function create_toolbar in module ida_kernwin: + +create_toolbar(*args) -> 'bool' + create_toolbar(name, label, before=None, flags=0) -> bool + + + Create a toolbar with the given name, label and optional position + + @param name: name of toolbar (must be unique) (C++: const char *) + @param label: label of toolbar (C++: const char *) + @param before: if non-NULL, the toolbar before which the new toolbar + will be inserted (C++: const char *) + @param flags: a combination of create toolbar flags , to determine + toolbar position (C++: int) + @return: success + +Help on function custom_viewer_jump in module ida_kernwin: + +custom_viewer_jump(*args) -> 'bool' + custom_viewer_jump(v, loc, flags=0) -> bool + + + Append 'loc' to the viewer's history, and cause the viewer to display + it. + + @param v: (TWidget *) (C++: TWidget *) + @param loc: (const lochist_entry_t &) (C++: const lochist_entry_t + &) + @param flags: (uint32) or'ed combination of CVNF_* values (C++: + uint32) + @return: success + +Help on function del_hotkey in module ida_kernwin: + +del_hotkey(*args) -> 'bool' + del_hotkey(pyctx) -> bool + + + Deletes a previously registered function hotkey + + @param ctx: Hotkey context previously returned by add_hotkey() + + @return: Boolean. + +Help on function del_idc_hotkey in module ida_kernwin: + +del_idc_hotkey(*args) -> 'bool' + del_idc_hotkey(hotkey) -> bool + + + Delete IDC function hotkey ( 'ui_del_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + +Help on function delete_menu in module ida_kernwin: + +delete_menu(*args) -> 'bool' + delete_menu(name) -> bool + + + Delete an existing menu + + @param name: name of menu (C++: const char *) + @return: success + +Help on function delete_toolbar in module ida_kernwin: + +delete_toolbar(*args) -> 'bool' + delete_toolbar(name) -> bool + + + Delete an existing toolbar + + @param name: name of toolbar (C++: const char *) + @return: success + +Help on function detach_action_from_menu in module ida_kernwin: + +detach_action_from_menu(*args) -> 'bool' + detach_action_from_menu(menupath, name) -> bool + + + Detach an action from the menu ( 'ui_detach_action_from_menu' ). + + @param menupath: path to the menu item (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on function detach_action_from_popup in module ida_kernwin: + +detach_action_from_popup(*args) -> 'bool' + detach_action_from_popup(widget, name) -> bool + + + Remove a previously-registered action, from the list of 'permanent' + context menu actions for this widget ( 'ui_detach_action_from_popup' + ). This only makes sense if the action has been added to 'widget's + list of permanent popup actions by calling attach_action_to_popup in + 'permanent' mode. + + @param widget: target widget (C++: TWidget *) + @param name: action name (C++: const char *) + +Help on function detach_action_from_toolbar in module ida_kernwin: + +detach_action_from_toolbar(*args) -> 'bool' + detach_action_from_toolbar(toolbar_name, name) -> bool + + + Detach an action from the toolbar ( 'ui_detach_action_from_toolbar' ). + + @param toolbar_name: the name of the toolbar (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on class disasm_line_t in module ida_kernwin: + +class disasm_line_t(builtins.object) + | Proxy of C++ disasm_line_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> disasm_line_t + | __init__(self, other) -> disasm_line_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_disasm_line_t(...) + | delete_disasm_line_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | at + | disasm_line_t_at_get(self) -> place_t + | + | bg_color + | disasm_line_t_bg_color_get(self) -> bgcolor_t + | + | is_default + | disasm_line_t_is_default_get(self) -> bool + | + | line + | disasm_line_t_line_get(self) -> qstring * + | + | prefix_color + | disasm_line_t_prefix_color_get(self) -> color_t + | + | thisown + | The membership flag + +Help on class disasm_text_t in module ida_kernwin: + +class disasm_text_t(builtins.object) + | Proxy of C++ qvector< disasm_line_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'disasm_line_t const &' + | __getitem__(self, i) -> disasm_line_t + | + | __init__(self, *args) + | __init__(self) -> disasm_text_t + | __init__(self, x) -> disasm_text_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_disasm_text_t(...) + | delete_disasm_text_t(self) + | + | at(self, *args) -> 'disasm_line_t const &' + | at(self, _idx) -> disasm_line_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< disasm_line_t >::const_iterator' + | begin(self) -> disasm_line_t + | begin(self) -> disasm_line_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< disasm_line_t >::const_iterator' + | end(self) -> disasm_line_t + | end(self) -> disasm_line_t + | + | erase(self, *args) -> 'qvector< disasm_line_t >::iterator' + | erase(self, it) -> disasm_line_t + | erase(self, first, last) -> disasm_line_t + | + | extract(self, *args) -> 'disasm_line_t *' + | extract(self) -> disasm_line_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=disasm_line_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< disasm_line_t >::iterator' + | insert(self, it, x) -> disasm_line_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'disasm_line_t &' + | push_back(self, x) + | push_back(self) -> disasm_line_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function display_copyright_warning in module ida_kernwin: + +display_copyright_warning(*args) -> 'bool' + display_copyright_warning() -> bool + + + Display copyright warning ( 'ui_copywarn' ). + + @return: yes/no + +Help on function display_widget in module ida_kernwin: + +display_widget(*args) -> 'void' + display_widget(widget, options, dest_ctrl=None) + + + Display a widget, dock it if not done before + + @param widget: widget to display (C++: TWidget *) + @param options: Widget open flags (C++: uint32) + @param dest_ctrl: where to dock: if NULL or invalid then use the + active docker if there is not create a new tab + relative to current active tab (C++: const char *) + +Help on function ea2str in module ida_kernwin: + +ea2str(*args) -> 'size_t' + ea2str(ea) -> str + + + Convert linear address to UTF-8 string. + + + @param ea (C++: ea_t) + +Help on function ea_viewer_history_push_and_jump in module ida_kernwin: + +ea_viewer_history_push_and_jump(*args) -> 'bool' + ea_viewer_history_push_and_jump(v, ea, x, y, lnnum) -> bool + + + Push current location in the history and jump to the given location ( + 'ui_ea_viewer_history_push_and_jump' ). This will jump in the given ea + viewer and also in other synchronized views. + + @param v: ea viewer (C++: TWidget *) + @param ea: jump destination (C++: ea_t) + @param x: coords on screen (C++: int) + @param y: coords on screen (C++: int) + @param lnnum: desired line number of given address (C++: int) + +Help on function enable_chooser_item_attrs in module ida_kernwin: + +enable_chooser_item_attrs(*args) -> 'bool' + enable_chooser_item_attrs(chooser_caption, enable) -> bool + + + Enable item-specific attributes for chooser items ( + 'ui_enable_chooser_item_attrs' ). For example: color list items + differently depending on a criterium.If enabled, the chooser will + generate ui_get_chooser_item_attrsevents that can be intercepted by a + plugin to modify the item attributes.This event is generated only in + the GUI version of IDA.Specifying 'CH_ATTRS' bit at the chooser + creation time has the same effect. + + @param chooser_caption (C++: const char *) + @param enable (C++: bool) + @return: success + +Help on class enumplace_t in module ida_kernwin: + +class enumplace_t(place_t) + | Proxy of C++ enumplace_t class. + | + | Method resolution order: + | enumplace_t + | place_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_enumplace_t(...) + | delete_enumplace_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bmask + | enumplace_t_bmask_get(self) -> bmask_t + | + | idx + | enumplace_t_idx_get(self) -> size_t + | + | serial + | enumplace_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | value + | enumplace_t_value_get(self) -> uval_t + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) -> 'void' + | _print(self, out_buf, ud) + | + | adjust(self, *args) -> 'void' + | adjust(self, ud) + | + | beginning(self, *args) -> 'bool' + | beginning(self, ud) -> bool + | + | clone(self, *args) -> 'place_t *' + | clone(self) -> place_t + | + | compare(self, *args) -> 'int' + | compare(self, t2) -> int + | + | copyfrom(self, *args) -> 'void' + | copyfrom(self, _from) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, _in) -> bool + | + | ending(self, *args) -> 'bool' + | ending(self, ud) -> bool + | + | enter(self, *args) -> 'place_t *' + | enter(self, arg2) -> place_t + | + | generate(self, *args) -> 'PyObject *' + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) -> 'int' + | id(self) -> int + | + | leave(self, *args) -> 'void' + | leave(self, arg2) + | + | makeplace(self, *args) -> 'place_t *' + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) -> 'char const *' + | name(self) -> char const * + | + | next(self, *args) -> 'bool' + | next(self, ud) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, ud) -> bool + | + | rebase(self, *args) -> 'bool' + | rebase(self, arg2) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self) -> ea_t + | + | touval(self, *args) -> 'uval_t' + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) -> 'enumplace_t *' + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) -> 'idaplace_t *' + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) -> 'simpleline_place_t *' + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) -> 'structplace_t *' + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on function error in module ida_kernwin: + +error(*args) -> 'void' + error(format) + + + Display a fatal message in a message box and quit IDA + + @param format: message to print + +Help on function execute_sync in module ida_kernwin: + +execute_sync(*args) -> 'int' + execute_sync(py_callable, reqf) -> int + + + Executes a function in the context of the main thread. + If the current thread not the main thread, then the call is queued and + executed afterwards. + + @param callable: A python callable object, must return an integer value + @param reqf: one of MFF_ flags + @return: -1 or the return value of the callable + +Help on function execute_ui_requests in module ida_kernwin: + +execute_ui_requests(*args) -> 'bool' + execute_ui_requests(py_list) -> bool + + + Inserts a list of callables into the UI message processing queue. + When the UI is ready it will call one callable. + A callable can request to be called more than once if it returns True. + + @param callable_list: A list of python callable objects. + @note: A callable should return True if it wants to be called more than once. + @return: Boolean. False if the list contains a non callabale item + +Help on function find_widget in module ida_kernwin: + +find_widget(*args) -> 'TWidget *' + find_widget(caption) -> TWidget * + + + Find widget with the specified caption (only gui version) ( + 'ui_find_widget' ). NB: this callback works only with the tabbed + widgets! + + @param caption: title of tab, or window title if widget is not tabbed + (C++: const char *) + @return: pointer to the TWidget, NULL if none is found + +Help on function formchgcbfa_close in module ida_kernwin: + +formchgcbfa_close(*args) -> 'void' + formchgcbfa_close(p_fa, close_normally) + +Help on function formchgcbfa_enable_field in module ida_kernwin: + +formchgcbfa_enable_field(*args) -> 'bool' + formchgcbfa_enable_field(p_fa, fid, enable) -> bool + +Help on function formchgcbfa_get_field_value in module ida_kernwin: + +formchgcbfa_get_field_value(*args) -> 'PyObject *' + formchgcbfa_get_field_value(p_fa, fid, ft, sz) -> PyObject * + +Help on function formchgcbfa_get_focused_field in module ida_kernwin: + +formchgcbfa_get_focused_field(*args) -> 'int' + formchgcbfa_get_focused_field(p_fa) -> int + +Help on function formchgcbfa_move_field in module ida_kernwin: + +formchgcbfa_move_field(*args) -> 'bool' + formchgcbfa_move_field(p_fa, fid, x, y, w, h) -> bool + +Help on function formchgcbfa_refresh_field in module ida_kernwin: + +formchgcbfa_refresh_field(*args) -> 'void' + formchgcbfa_refresh_field(p_fa, fid) + +Help on function formchgcbfa_set_field_value in module ida_kernwin: + +formchgcbfa_set_field_value(*args) -> 'bool' + formchgcbfa_set_field_value(p_fa, fid, ft, py_val) -> bool + +Help on function formchgcbfa_set_focused_field in module ida_kernwin: + +formchgcbfa_set_focused_field(*args) -> 'bool' + formchgcbfa_set_focused_field(p_fa, fid) -> bool + +Help on function formchgcbfa_show_field in module ida_kernwin: + +formchgcbfa_show_field(*args) -> 'bool' + formchgcbfa_show_field(p_fa, fid, show) -> bool + +Help on function free_custom_icon in module ida_kernwin: + +free_custom_icon(*args) -> 'void' + free_custom_icon(icon_id) + + + Frees an icon loaded with load_custom_icon() + +Help on function gen_disasm_text in module ida_kernwin: + +gen_disasm_text(*args) -> 'void' + gen_disasm_text(text, ea1, ea2, truncate_lines) + + + Generate disassembly text for a range. + + @param text: result (C++: text_t &) + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @param truncate_lines: (on idainfo::margin ) (C++: bool) + +Help on function get_action_checkable in module ida_kernwin: + +get_action_checkable(*args) -> 'bool *' + get_action_checkable(name) -> bool + + + Get an action's checkability ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_checked in module ida_kernwin: + +get_action_checked(*args) -> 'bool *' + get_action_checked(name) -> bool + + + Get an action's checked state ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_icon in module ida_kernwin: + +get_action_icon(*args) -> 'int *' + get_action_icon(name) -> bool + + + Get an action's icon ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_label in module ida_kernwin: + +get_action_label(*args) -> 'qstring *' + get_action_label(name) -> str + + + Get an action's label ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_shortcut in module ida_kernwin: + +get_action_shortcut(*args) -> 'qstring *' + get_action_shortcut(name) -> str + + + Get an action's shortcut ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_state in module ida_kernwin: + +get_action_state(*args) -> 'action_state_t *' + get_action_state(name) -> bool + + + Get an action's state ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_tooltip in module ida_kernwin: + +get_action_tooltip(*args) -> 'qstring *' + get_action_tooltip(name) -> str + + + Get an action's tooltip ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_visibility in module ida_kernwin: + +get_action_visibility(*args) -> 'bool *' + get_action_visibility(name) -> bool + + + Get an action's visibility ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_active_modal_widget in module ida_kernwin: + +get_active_modal_widget(*args) -> 'TWidget *' + get_active_modal_widget() -> TWidget * + + + Get the current, active modal TWidget instance. Note that in this + context, the "wait dialog" is not considered: this function will + return NULL even if it is currently shown. + + @return: TWidget * the active modal widget, or NULL + +Help on function get_addon_info in module ida_kernwin: + +get_addon_info(*args) -> 'bool' + get_addon_info(id, info) -> bool + + + Get info about a registered addon with a given product code. info->cb + must be valid! NB: all pointers are invalidated by next call to + register_addon or get_addon_info + + @param id (C++: const char *) + @param info (C++: addon_info_t *) + @return: false if not found + +Help on function get_addon_info_idx in module ida_kernwin: + +get_addon_info_idx(*args) -> 'bool' + get_addon_info_idx(index, info) -> bool + + + Get info about a registered addon with specific index. info->cb must + be valid! NB: all pointers are invalidated by next call to + register_addon or get_addon_info + + @param index (C++: int) + @param info (C++: addon_info_t *) + @return: false if index is out of range + +Help on function get_chooser_data in module ida_kernwin: + +get_chooser_data(*args) -> 'PyObject *' + get_chooser_data(chooser_caption, n) -> PyObject * + + + Get the text corresponding to the index N in the chooser data. Use -1 + to get the header. + + @param chooser_caption (C++: const char *) + @param n (C++: int) + +Help on function get_chooser_obj in module ida_kernwin: + +get_chooser_obj(*args) -> 'void *' + get_chooser_obj(chooser_caption) -> void * + + + Get the underlying object of the specified chooser ( + 'ui_get_chooser_obj' ).This is object is chooser-specific. + + @param chooser_caption (C++: const char *) + @return: the object that was used to create the chooser + +Help on function get_curline in module ida_kernwin: + +get_curline(*args) -> 'char const *' + get_curline() -> char const * + + + Get current line from the disassemble window ( 'ui_get_curline' ). + + @return: cptr current line with the color codes (use tag_remove() to + remove the color codes) + +Help on function get_current_viewer in module ida_kernwin: + +get_current_viewer(*args) -> 'TWidget *' + get_current_viewer() -> TWidget * + + + Get current ida viewer (idaview or custom viewer) ( + 'ui_get_current_viewer' ) + +Help on function get_current_widget in module ida_kernwin: + +get_current_widget(*args) -> 'TWidget *' + get_current_widget() -> TWidget * + + + Get a pointer to the current widget ( 'ui_get_current_widget' ). + +Help on function get_cursor in module ida_kernwin: + +get_cursor(*args) -> 'int *, int *' + get_cursor() -> bool + + + Get the cursor position on the screen ( 'ui_get_cursor' ).coordinates + are 0-based + +Help on function get_custom_viewer_curline in module ida_kernwin: + +get_custom_viewer_curline(*args) -> 'char const *' + get_custom_viewer_curline(custom_viewer, mouse) -> char const * + + + Get current line of custom viewer ( 'ui_get_custom_viewer_curline' ). + The returned line contains color codes + + @param custom_viewer: view (C++: TWidget *) + @param mouse: mouse position (otherwise cursor position) (C++: bool) + @return: pointer to contents of current line + +Help on function get_custom_viewer_location in module ida_kernwin: + +get_custom_viewer_location(*args) -> 'bool' + get_custom_viewer_location(out, custom_viewer, mouse=False) -> bool + + + Get the current location in a custom viewer ( + 'ui_get_custom_viewer_location' ). + + + @param out (C++: lochist_entry_t *) + @param custom_viewer (C++: TWidget *) + @param mouse (C++: bool) + +Help on function get_custom_viewer_place in module ida_kernwin: + +get_custom_viewer_place(*args) -> 'int *, int *' + get_custom_viewer_place(custom_viewer, mouse) -> place_t + + + Get current place in a custom viewer ( 'ui_get_curplace' ).See also + the more complete 'get_custom_viewer_location()' + + @param custom_viewer: view (C++: TWidget *) + @param mouse: mouse position (otherwise cursor position) (C++: bool) + +Help on function get_ea_viewer_history_info in module ida_kernwin: + +get_ea_viewer_history_info(*args) -> 'bool' + get_ea_viewer_history_info(nback, nfwd, v) -> bool + + + Get information about what's in the history ( + 'ui_ea_viewer_history_info' ). + + @param nback: number of available back steps (C++: int *) + @param nfwd: number of available forward steps (C++: int *) + @param v: ea viewer (C++: TWidget *) + +Help on function get_hexdump_ea in module ida_kernwin: + +get_hexdump_ea(*args) -> 'ea_t' + get_hexdump_ea(hexdump_num) -> ea_t + + + Get the current address in a hex view. + + @param hexdump_num: number of hexview window (C++: int) + +Help on function get_highlight in module ida_kernwin: + +get_highlight(*args) -> 'PyObject *' + get_highlight(v) -> PyObject * + + + Returns the currently highlighted identifier and flags + + @return: a tuple (text, flags), or None if nothing + is highlighted or in case of error. + +Help on function get_kernel_version in module ida_kernwin: + +get_kernel_version(*args) -> 'size_t' + get_kernel_version() -> str + + + Get IDA kernel version (in a string like "5.1"). + +Help on function get_key_code in module ida_kernwin: + +get_key_code(*args) -> 'ushort' + get_key_code(keyname) -> ushort + + + Get keyboard key code by its name ( 'ui_get_key_code' ) + + + @param keyname (C++: const char *) + +Help on function get_navband_ea in module ida_kernwin: + +get_navband_ea(*args) -> 'ea_t' + get_navband_ea(pixel) -> ea_t + + + Translate the pixel position on the navigation band, into an address. + + + @param pixel (C++: int) + +Help on function get_navband_pixel in module ida_kernwin: + +get_navband_pixel(*args) -> 'bool *' + get_navband_pixel(ea) -> int + + + Maps an address, onto a pixel coordinate within the navband + + @param ea: The address to map + @return: a list [pixel, is_vertical] + +Help on function get_opnum in module ida_kernwin: + +get_opnum(*args) -> 'int' + get_opnum() -> int + + + Get current operand number, -1 means no operand ( 'ui_get_opnum' ) + +Help on function get_output_curline in module ida_kernwin: + +get_output_curline(*args) -> 'qstring *' + get_output_curline(mouse) -> str + + + Get current line of output window ( 'ui_get_output_curline' ). + + @param mouse: current for mouse pointer? (C++: bool) + @return: false if output contains no text + +Help on function get_output_cursor in module ida_kernwin: + +get_output_cursor(*args) -> 'int *, int *' + get_output_cursor() -> bool + + + Get coordinates of the output window's cursor ( 'ui_get_output_cursor' + ).coordinates are 0-basedthis function will succeed even if the output + window is not visible + +Help on function get_output_selected_text in module ida_kernwin: + +get_output_selected_text(*args) -> 'qstring *' + get_output_selected_text() -> str + + + Returns selected text from output window ( + 'ui_get_output_selected_text' ). + + @return: true if there is a selection + +Help on function get_place_class in module ida_kernwin: + +get_place_class(*args) -> 'place_t const *' + get_place_class(out_flags, out_sdk_version, id) -> place_t + + + Get information about a previously-registered 'place_t' class. See + also 'register_place_class()' . + + @param out_flags: output flags (can be NULL) (C++: int *) + @param out_sdk_version: sdk version the place was created with (can be + NULL) (C++: int *) + @param id: place class ID (C++: int) + @return: the place_t template, or NULL if not found + +Help on function get_place_class_id in module ida_kernwin: + +get_place_class_id(*args) -> 'int' + get_place_class_id(name) -> int + + + Get the place class ID for the place that has been registered as + 'name'. + + @param name: the class name (C++: const char *) + @return: the place class ID, or -1 if not found + +Help on function get_place_class_template in module ida_kernwin: + +get_place_class_template(*args) -> 'place_t const *' + get_place_class_template(id) -> place_t + + + See 'get_place_class()' + + + @param id (C++: int) + +Help on function get_registered_actions in module ida_kernwin: + +get_registered_actions(*args) -> 'PyObject *' + get_registered_actions() -> PyObject * + + + Get a list of all currently-registered actions + +Help on function get_screen_ea in module ida_kernwin: + +get_screen_ea(*args) -> 'ea_t' + get_screen_ea() -> ea_t + + + Get the address at the screen cursor ( 'ui_screenea' ) + +Help on function get_tab_size in module ida_kernwin: + +get_tab_size(*args) -> 'int' + get_tab_size(path) -> int + + + Get the size of a tab in spaces ( 'ui_get_tab_size' ). + + @param path: the path of the source view for which the tab size is + requested. if NULL, the default size is returned. (C++: + const char *) + +Help on function get_user_strlist_options in module ida_kernwin: + +get_user_strlist_options(*args) -> 'void' + get_user_strlist_options(out) + +Help on function get_view_renderer_type in module ida_kernwin: + +get_view_renderer_type(*args) -> 'tcc_renderer_type_t' + get_view_renderer_type(v) -> tcc_renderer_type_t + + + Get the type of renderer currently in use in the given view ( + 'ui_get_renderer_type' ) + + + @param v (C++: TWidget *) + +Help on function get_viewer_place_type in module ida_kernwin: + +get_viewer_place_type(*args) -> 'tcc_place_type_t' + get_viewer_place_type(viewer) -> tcc_place_type_t + + + Get the type of 'place_t' instances a viewer uses & creates ( + 'ui_get_viewer_place_type' ). + + + @param viewer (C++: TWidget *) + +Help on function get_viewer_user_data in module ida_kernwin: + +get_viewer_user_data(*args) -> 'void *' + get_viewer_user_data(viewer) -> void * + + + Get the user data from a custom viewer ( 'ui_get_viewer_user_data' ) + + + @param viewer (C++: TWidget *) + +Help on function get_widget_title in module ida_kernwin: + +get_widget_title(*args) -> 'qstring *' + get_widget_title(widget) -> str + + + Get the TWidget's title ( 'ui_get_widget_title' ). + + + @param widget (C++: TWidget *) + +Help on function get_widget_type in module ida_kernwin: + +get_widget_type(*args) -> 'twidget_type_t' + get_widget_type(widget) -> twidget_type_t + + + Get the type of the TWidget * ( 'ui_get_widget_type' ). + + + @param widget (C++: TWidget *) + +Help on function get_window_id in module ida_kernwin: + +get_window_id(*args) -> 'void *' + get_window_id(name=None) -> void * + + + Get the system-specific window ID (GUI version only) + + @param name (C++: const char *) + @return: the low-level window ID + +Help on function hide_wait_box in module ida_kernwin: + +hide_wait_box(*args) -> 'void' + hide_wait_box() + + + Hide the "Please wait dialog box". + +Help on class idaplace_t in module ida_kernwin: + +class idaplace_t(place_t) + | Proxy of C++ idaplace_t class. + | + | Method resolution order: + | idaplace_t + | place_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_idaplace_t(...) + | delete_idaplace_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ea + | idaplace_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) -> 'void' + | _print(self, out_buf, ud) + | + | adjust(self, *args) -> 'void' + | adjust(self, ud) + | + | beginning(self, *args) -> 'bool' + | beginning(self, ud) -> bool + | + | clone(self, *args) -> 'place_t *' + | clone(self) -> place_t + | + | compare(self, *args) -> 'int' + | compare(self, t2) -> int + | + | copyfrom(self, *args) -> 'void' + | copyfrom(self, _from) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, _in) -> bool + | + | ending(self, *args) -> 'bool' + | ending(self, ud) -> bool + | + | enter(self, *args) -> 'place_t *' + | enter(self, arg2) -> place_t + | + | generate(self, *args) -> 'PyObject *' + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) -> 'int' + | id(self) -> int + | + | leave(self, *args) -> 'void' + | leave(self, arg2) + | + | makeplace(self, *args) -> 'place_t *' + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) -> 'char const *' + | name(self) -> char const * + | + | next(self, *args) -> 'bool' + | next(self, ud) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, ud) -> bool + | + | rebase(self, *args) -> 'bool' + | rebase(self, arg2) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self) -> ea_t + | + | touval(self, *args) -> 'uval_t' + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) -> 'enumplace_t *' + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) -> 'idaplace_t *' + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) -> 'simpleline_place_t *' + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) -> 'structplace_t *' + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on function info in module ida_kernwin: + +info(*args) -> 'void' + info(format) + +Help on function install_command_interpreter in module ida_kernwin: + +install_command_interpreter(*args) -> 'int' + install_command_interpreter(py_obj) -> int + + + Install command line interpreter ( 'ui_install_cli' ) + +Help on function internal_register_place_class in module ida_kernwin: + +internal_register_place_class(*args) -> 'int' + internal_register_place_class(tmplate, flags, owner, sdk_version) -> int + +Help on function is_action_enabled in module ida_kernwin: + +is_action_enabled(*args) -> 'bool' + is_action_enabled(s) -> bool + + + Check if the given action state is one of AST_ENABLE*. + + + @param s (C++: action_state_t) + +Help on function is_chooser_widget in module ida_kernwin: + +is_chooser_widget(*args) -> 'bool' + is_chooser_widget(t) -> bool + + + Does the given widget type specify a chooser widget? + + + @param t (C++: twidget_type_t) + +Help on function is_idaq in module ida_kernwin: + +is_idaq(*args) -> 'bool' + is_idaq() -> bool + + + Returns True or False depending if IDAPython is hosted by IDAQ + +Help on function is_msg_inited in module ida_kernwin: + +is_msg_inited(*args) -> 'bool' + is_msg_inited() -> bool + + + Can we use msg() functions? + +Help on function is_place_class_ea_capable in module ida_kernwin: + +is_place_class_ea_capable(*args) -> 'bool' + is_place_class_ea_capable(id) -> bool + + + See 'get_place_class()' + + + @param id (C++: int) + +Help on function is_refresh_requested in module ida_kernwin: + +is_refresh_requested(*args) -> 'bool' + is_refresh_requested(mask) -> bool + + + Get a refresh request state + + @param mask: Window refresh flags (C++: uint64) + @return: the state (set or cleared) + +Help on class jobj_wrapper_t in module ida_kernwin: + +class jobj_wrapper_t(builtins.object) + | Proxy of C++ jobj_wrapper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | get_dict(self, *args) -> 'PyObject *' + | get_dict(self) -> PyObject * + | + | ---------------------------------------------------------------------- + | 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 + +Help on function jumpto in module ida_kernwin: + +jumpto(*args) -> 'bool' + jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool + jumpto(custom_viewer, place, x, y) -> bool + + + Jump to the specified address ( 'ui_jumpto' ). + + @param ea: destination (C++: ea_t) + @param opnum: -1: don't change x coord (C++: int) + @param uijmp_flags: Jump flags (C++: int) + @return: success + +Help on function load_custom_icon in module ida_kernwin: + +load_custom_icon(file_name=None, data=None, format=None) + Loads a custom icon and returns an identifier that can be used with other APIs + + If file_name is passed then the other two arguments are ignored. + + @param file_name: The icon file name + @param data: The icon data + @param format: The icon data format + + @return: Icon id or 0 on failure. + Use free_custom_icon() to free it + + + Load an icon from a file ( 'ui_load_custom_icon_file' ). Also see + 'load_custom_icon(const void *, unsigned int, const char *)' + + @return: icon id + +Help on function load_dbg_dbginfo in module ida_kernwin: + +load_dbg_dbginfo(*args) -> 'bool' + load_dbg_dbginfo(path, li=None, base=BADADDR, verbose=False) -> bool + + + Load debugging information from a file. + + @param path: path to file (C++: const char *) + @param li: loader input. if NULL, check DBG_NAME_KEY (C++: linput_t *) + @param base: loading address (C++: ea_t) + @param verbose: dump status to message window (C++: bool) + +Help on function lookup_key_code in module ida_kernwin: + +lookup_key_code(*args) -> 'ushort' + lookup_key_code(key, shift, is_qt) -> ushort + + + Get shortcut code previously created by 'ui_get_key_code' . + + @param key: key constant (C++: int) + @param shift: modifiers (C++: int) + @param is_qt: are we using gui version? (C++: bool) + +Help on function msg in module ida_kernwin: + +msg(*args) -> 'PyObject *' + msg(o) -> PyObject * + + + Display an UTF-8 string in the message window + + The result of the stringification of the arguments + will be treated as an UTF-8 string. + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + +Help on function msg_clear in module ida_kernwin: + +msg_clear(*args) -> 'void' + msg_clear() + + + Clear the "Output window". + +Help on function msg_get_lines in module ida_kernwin: + +msg_get_lines(*args) -> 'PyObject *' + msg_get_lines(count=-1) -> PyObject * + + + Retrieve the last 'count' lines from the output window, in reverse + order (from most recent, to least recent) + + @param count: The number of lines to retrieve. -1 means: all (C++: + int) + +Help on function msg_save in module ida_kernwin: + +msg_save(*args) -> 'bool' + msg_save(path) -> bool + + + Save the "Output window" contents into a file + + @param path: The path of the file to save the contents into. An empty + path means that the user will be prompted for the + destination and, if the file already exists, the user + will be asked to confirm before overriding its contents. + Upon return, 'path' will contain the path that the user + chose. (C++: qstring &) + @return: success + +Help on function nomem in module ida_kernwin: + +nomem(*args) -> 'void' + nomem(format) + +Help on function open_bpts_window in module ida_kernwin: + +open_bpts_window(*args) -> 'TWidget *' + open_bpts_window(ea) -> TWidget * + + + Open the breakpoints window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_calls_window in module ida_kernwin: + +open_calls_window(*args) -> 'TWidget *' + open_calls_window(ea) -> TWidget * + + + Open the function calls window ( 'ui_open_builtin' ). + + @param ea (C++: ea_t) + @return: pointer to resulting window + +Help on function open_disasm_window in module ida_kernwin: + +open_disasm_window(*args) -> 'TWidget *' + open_disasm_window(window_title, ranges=None) -> TWidget * + + + Open a disassembly view ( 'ui_open_builtin' ). + + @param window_title: title of view to open (C++: const char *) + @param ranges: if != NULL, then display a flow chart with the + specified ranges (C++: const rangevec_t *) + @return: pointer to resulting window + +Help on function open_enums_window in module ida_kernwin: + +open_enums_window(*args) -> 'TWidget *' + open_enums_window(const_id=BADADDR) -> TWidget * + + + Open the enums window ( 'ui_open_builtin' ). + + @param const_id: index of entry to select by default (C++: tid_t) + @return: pointer to resulting window + +Help on function open_exports_window in module ida_kernwin: + +open_exports_window(*args) -> 'TWidget *' + open_exports_window(ea) -> TWidget * + + + Open the exports window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_frame_window in module ida_kernwin: + +open_frame_window(*args) -> 'TWidget *' + open_frame_window(pfn, offset) -> TWidget * + + + Open the frame window for the given function ( 'ui_open_builtin' ). + + @param pfn: function to analyze (C++: func_t *) + @param offset: offset where the cursor is placed (C++: uval_t) + @return: pointer to resulting window if 'pfn' is a valid function and + the window was displayed, NULL otherwise + +Help on function open_funcs_window in module ida_kernwin: + +open_funcs_window(*args) -> 'TWidget *' + open_funcs_window(ea) -> TWidget * + + + Open the functions window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_hexdump_window in module ida_kernwin: + +open_hexdump_window(*args) -> 'TWidget *' + open_hexdump_window(window_title) -> TWidget * + + + Open a hexdump view ( 'ui_open_builtin' ). + + @param window_title: title of view to open (C++: const char *) + @return: pointer to resulting window + +Help on function open_imports_window in module ida_kernwin: + +open_imports_window(*args) -> 'TWidget *' + open_imports_window(ea) -> TWidget * + + + Open the exports window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_loctypes_window in module ida_kernwin: + +open_loctypes_window(*args) -> 'TWidget *' + open_loctypes_window(ordinal) -> TWidget * + + + Open the local types window ( 'ui_open_builtin' ). + + @param ordinal: ordinal of type to select by default (C++: int) + @return: pointer to resulting window + +Help on function open_modules_window in module ida_kernwin: + +open_modules_window(*args) -> 'TWidget *' + open_modules_window() -> TWidget * + + + Open the modules window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_names_window in module ida_kernwin: + +open_names_window(*args) -> 'TWidget *' + open_names_window(ea) -> TWidget * + + + Open the names window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_navband_window in module ida_kernwin: + +open_navband_window(*args) -> 'TWidget *' + open_navband_window(ea, zoom) -> TWidget * + + + Open the navigation band window ( 'ui_open_builtin' ). + + @param ea: sets the address of the navband arrow (C++: ea_t) + @param zoom: sets the navband zoom level (C++: int) + @return: pointer to resulting window + +Help on function open_notepad_window in module ida_kernwin: + +open_notepad_window(*args) -> 'TWidget *' + open_notepad_window() -> TWidget * + + + Open the notepad window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_problems_window in module ida_kernwin: + +open_problems_window(*args) -> 'TWidget *' + open_problems_window(ea) -> TWidget * + + + Open the problems window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_segments_window in module ida_kernwin: + +open_segments_window(*args) -> 'TWidget *' + open_segments_window(ea) -> TWidget * + + + Open the segments window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_segregs_window in module ida_kernwin: + +open_segregs_window(*args) -> 'TWidget *' + open_segregs_window(ea) -> TWidget * + + + Open the segment registers window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_selectors_window in module ida_kernwin: + +open_selectors_window(*args) -> 'TWidget *' + open_selectors_window() -> TWidget * + + + Open the selectors window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_signatures_window in module ida_kernwin: + +open_signatures_window(*args) -> 'TWidget *' + open_signatures_window() -> TWidget * + + + Open the signatures window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_stack_window in module ida_kernwin: + +open_stack_window(*args) -> 'TWidget *' + open_stack_window() -> TWidget * + + + Open the call stack window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_strings_window in module ida_kernwin: + +open_strings_window(*args) -> 'TWidget *' + open_strings_window(ea, selstart=BADADDR, selend=BADADDR) -> TWidget * + + + Open the strings window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @param selstart: only display strings that occur within this range + (C++: ea_t) + @param selend: only display strings that occur within this range (C++: + ea_t) + @return: pointer to resulting window + +Help on function open_structs_window in module ida_kernwin: + +open_structs_window(*args) -> 'TWidget *' + open_structs_window(id=BADADDR, offset=0) -> TWidget * + + + Open the structs window ( 'ui_open_builtin' ). + + @param id: index of entry to select by default (C++: tid_t) + @param offset: offset where the cursor is placed (C++: uval_t) + @return: pointer to resulting window + +Help on function open_threads_window in module ida_kernwin: + +open_threads_window(*args) -> 'TWidget *' + open_threads_window() -> TWidget * + + + Open the threads window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_tils_window in module ida_kernwin: + +open_tils_window(*args) -> 'TWidget *' + open_tils_window() -> TWidget * + + + Open the type libraries window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_trace_window in module ida_kernwin: + +open_trace_window(*args) -> 'TWidget *' + open_trace_window() -> TWidget * + + + Open the trace window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_url in module ida_kernwin: + +open_url(*args) -> 'void' + open_url(url) + + + Open the given url ( 'ui_open_url' ) + + + @param url (C++: const char *) + +Help on function open_xrefs_window in module ida_kernwin: + +open_xrefs_window(*args) -> 'TWidget *' + open_xrefs_window(ea) -> TWidget * + + + Open the cross references window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on class place_t in module ida_kernwin: + +class place_t(builtins.object) + | Proxy of C++ place_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_place_t(...) + | delete_place_t(self) + | + | _print(self, *args) -> 'void' + | _print(self, out_buf, ud) + | + | adjust(self, *args) -> 'void' + | adjust(self, ud) + | + | beginning(self, *args) -> 'bool' + | beginning(self, ud) -> bool + | + | clone(self, *args) -> 'place_t *' + | clone(self) -> place_t + | + | compare(self, *args) -> 'int' + | compare(self, t2) -> int + | + | copyfrom(self, *args) -> 'void' + | copyfrom(self, _from) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, _in) -> bool + | + | ending(self, *args) -> 'bool' + | ending(self, ud) -> bool + | + | enter(self, *args) -> 'place_t *' + | enter(self, arg2) -> place_t + | + | generate(self, *args) -> 'PyObject *' + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) -> 'int' + | id(self) -> int + | + | leave(self, *args) -> 'void' + | leave(self, arg2) + | + | makeplace(self, *args) -> 'place_t *' + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) -> 'char const *' + | name(self) -> char const * + | + | next(self, *args) -> 'bool' + | next(self, ud) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, ud) -> bool + | + | rebase(self, *args) -> 'bool' + | rebase(self, arg2) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self) -> ea_t + | + | touval(self, *args) -> 'uval_t' + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | as_enumplace_t(*args) -> 'enumplace_t *' + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) -> 'idaplace_t *' + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) -> 'simpleline_place_t *' + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) -> 'structplace_t *' + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + | + | thisown + | The membership flag + +Help on function place_t_as_enumplace_t in module ida_kernwin: + +place_t_as_enumplace_t(*args) -> 'enumplace_t *' + place_t_as_enumplace_t(p) -> enumplace_t + +Help on function place_t_as_idaplace_t in module ida_kernwin: + +place_t_as_idaplace_t(*args) -> 'idaplace_t *' + place_t_as_idaplace_t(p) -> idaplace_t + +Help on function place_t_as_simpleline_place_t in module ida_kernwin: + +place_t_as_simpleline_place_t(*args) -> 'simpleline_place_t *' + place_t_as_simpleline_place_t(p) -> simpleline_place_t + +Help on function place_t_as_structplace_t in module ida_kernwin: + +place_t_as_structplace_t(*args) -> 'structplace_t *' + place_t_as_structplace_t(p) -> structplace_t + +Help on function plgform_close in module ida_kernwin: + +plgform_close(*args) -> 'void' + plgform_close(py_link, options) + +Help on function plgform_get_widget in module ida_kernwin: + +plgform_get_widget(*args) -> 'TWidget *' + plgform_get_widget(py_link) -> TWidget * + +Help on function plgform_new in module ida_kernwin: + +plgform_new(*args) -> 'PyObject *' + plgform_new() -> PyObject * + +Help on function plgform_show in module ida_kernwin: + +plgform_show(*args) -> 'bool' + plgform_show(py_link, py_obj, caption, options=WOPN_DP_TAB|WOPN_RESTORE) -> bool + +Help on function process_ui_action in module ida_kernwin: + +process_ui_action(*args) -> 'bool' + process_ui_action(name, flags=0) -> bool + + + Invokes an IDA UI action by name + + @param name: action name + @return: Boolean + +Help on function py_get_ask_form in module ida_kernwin: + +py_get_ask_form(*args) -> 'size_t' + py_get_ask_form() -> size_t + +Help on function py_get_open_form in module ida_kernwin: + +py_get_open_form(*args) -> 'size_t' + py_get_open_form() -> size_t + +Help on function py_load_custom_icon_data in module ida_kernwin: + +py_load_custom_icon_data(*args) -> 'int' + py_load_custom_icon_data(data, format) -> int + +Help on function py_load_custom_icon_fn in module ida_kernwin: + +py_load_custom_icon_fn(*args) -> 'int' + py_load_custom_icon_fn(filename) -> int + +Help on function py_register_compiled_form in module ida_kernwin: + +py_register_compiled_form(*args) -> 'void' + py_register_compiled_form(py_form) + +Help on function py_ss_restore_callback in module ida_kernwin: + +py_ss_restore_callback(*args) -> 'void' + py_ss_restore_callback(err_msg, userdata) + +Help on function py_unregister_compiled_form in module ida_kernwin: + +py_unregister_compiled_form(*args) -> 'void' + py_unregister_compiled_form(py_form) + +Help on function pyidag_bind in module ida_kernwin: + +pyidag_bind(*args) -> 'bool' + pyidag_bind(_self) -> bool + +Help on function pyidag_unbind in module ida_kernwin: + +pyidag_unbind(*args) -> 'bool' + pyidag_unbind(_self) -> bool + +Help on function pyscv_add_line in module ida_kernwin: + +pyscv_add_line(*args) -> 'bool' + pyscv_add_line(py_this, py_sl) -> bool + +Help on function pyscv_clear_lines in module ida_kernwin: + +pyscv_clear_lines(*args) -> 'PyObject *' + pyscv_clear_lines(py_this) -> PyObject * + +Help on function pyscv_close in module ida_kernwin: + +pyscv_close(*args) -> 'void' + pyscv_close(py_this) + +Help on function pyscv_count in module ida_kernwin: + +pyscv_count(*args) -> 'size_t' + pyscv_count(py_this) -> size_t + +Help on function pyscv_del_line in module ida_kernwin: + +pyscv_del_line(*args) -> 'bool' + pyscv_del_line(py_this, nline) -> bool + +Help on function pyscv_edit_line in module ida_kernwin: + +pyscv_edit_line(*args) -> 'bool' + pyscv_edit_line(py_this, nline, py_sl) -> bool + +Help on function pyscv_get_current_line in module ida_kernwin: + +pyscv_get_current_line(*args) -> 'PyObject *' + pyscv_get_current_line(py_this, mouse, notags) -> PyObject * + +Help on function pyscv_get_current_word in module ida_kernwin: + +pyscv_get_current_word(*args) -> 'PyObject *' + pyscv_get_current_word(py_this, mouse) -> PyObject * + +Help on function pyscv_get_line in module ida_kernwin: + +pyscv_get_line(*args) -> 'PyObject *' + pyscv_get_line(py_this, nline) -> PyObject * + +Help on function pyscv_get_pos in module ida_kernwin: + +pyscv_get_pos(*args) -> 'PyObject *' + pyscv_get_pos(py_this, mouse) -> PyObject * + +Help on function pyscv_get_selection in module ida_kernwin: + +pyscv_get_selection(*args) -> 'PyObject *' + pyscv_get_selection(py_this) -> PyObject * + +Help on function pyscv_get_widget in module ida_kernwin: + +pyscv_get_widget(*args) -> 'TWidget *' + pyscv_get_widget(py_this) -> TWidget * + +Help on function pyscv_init in module ida_kernwin: + +pyscv_init(*args) -> 'PyObject *' + pyscv_init(py_link, title) -> PyObject * + +Help on function pyscv_insert_line in module ida_kernwin: + +pyscv_insert_line(*args) -> 'bool' + pyscv_insert_line(py_this, nline, py_sl) -> bool + +Help on function pyscv_is_focused in module ida_kernwin: + +pyscv_is_focused(*args) -> 'bool' + pyscv_is_focused(py_this) -> bool + +Help on function pyscv_jumpto in module ida_kernwin: + +pyscv_jumpto(*args) -> 'bool' + pyscv_jumpto(py_this, ln, x, y) -> bool + +Help on function pyscv_patch_line in module ida_kernwin: + +pyscv_patch_line(*args) -> 'bool' + pyscv_patch_line(py_this, nline, offs, value) -> bool + +Help on function pyscv_refresh in module ida_kernwin: + +pyscv_refresh(*args) -> 'bool' + pyscv_refresh(py_this) -> bool + +Help on function pyscv_show in module ida_kernwin: + +pyscv_show(*args) -> 'bool' + pyscv_show(py_this) -> bool + +Help on function qcleanline in module ida_kernwin: + +qcleanline(*args) -> 'qstring *' + qcleanline(cmt_char='\0', flags=((1 << 0)|(1 << 1))|(1 << 2)) -> str + + + Performs some cleanup operations to a line. + + @param cmt_char: character that denotes the start of a comment: the + entire text is removed if the line begins with this + character (ignoring leading spaces) all text after + (and including) this character is removed if flag + CLNL_FINDCMT is set (C++: char) + @param flags: a combination of line cleanup flags . defaults to + CLNL_TRIM (C++: uint32) + @return: length of line + +Help on class quick_widget_commands_t in module ida_kernwin: + +class quick_widget_commands_t(builtins.object) + | # ---------------------------------------------------------------------- + | # This provides an alternative to register_action()+attach_action_to_popup_menu() + | + | Methods defined here: + | + | __init__(self, callback) + | Initialize self. See help(type(self)) for accurate signature. + | + | add(self, caption, flags, menu_index, icon, emb, shortcut) + | + | populate_popup(self, widget, popup) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _ah_t = + | + | + | _cmd_t = + +Help on function read_range_selection in module ida_kernwin: + +read_range_selection(*args) -> 'ea_t *, ea_t *' + read_range_selection(v) -> bool + + + Get the address range for the selected range boundaries, this is the + convenient function for 'read_selection()' + + @param v: view, NULL means the last active window containing addresses + (C++: TWidget *) + +Help on function read_selection in module ida_kernwin: + +read_selection(*args) -> 'bool' + read_selection(v, p1, p2) -> bool + + + Read the user selection, and store its information in p0 (from) and p1 (to). + + This can be used as follows: + + + >>> p0 = idaapi.twinpos_t() + p1 = idaapi.twinpos_t() + view = idaapi.get_current_viewer() + idaapi.read_selection(view, p0, p1) + + + At that point, p0 and p1 hold information for the selection. + But, the 'at' property of p0 and p1 is not properly typed. + To specialize it, call #place() on it, passing it the view + they were retrieved from. Like so: + + + >>> place0 = p0.place(view) + place1 = p1.place(view) + + + This will effectively "cast" the place into a specialized type, + holding proper information, depending on the view type (e.g., + disassembly, structures, enums, ...) + + @param view: The view to retrieve the selection for. + @param p0: Storage for the "from" part of the selection. + @param p1: Storage for the "to" part of the selection. + @return: a bool value indicating success. + +Help on function refresh_chooser in module ida_kernwin: + +refresh_chooser(*args) -> 'bool' + refresh_chooser(title) -> bool + + + Mark a non-modal custom chooser for a refresh ( 'ui_refresh_chooser' + ). + + @param title: title of chooser (C++: const char *) + @return: success + +Help on function refresh_choosers in module ida_kernwin: + +refresh_choosers(*args) -> 'void' + refresh_choosers() + +Help on function refresh_idaview in module ida_kernwin: + +refresh_idaview(*args) -> 'void' + refresh_idaview() + + + Refresh marked windows ( 'ui_refreshmarked' ) + +Help on function refresh_idaview_anyway in module ida_kernwin: + +refresh_idaview_anyway(*args) -> 'void' + refresh_idaview_anyway() + + + Refresh all disassembly views ( 'ui_refresh' ), forces an immediate + refresh. Please consider 'request_refresh()' instead + +Help on function refresh_navband in module ida_kernwin: + +refresh_navband(*args) -> 'void' + refresh_navband(force) + + + Refresh navigation band if changed ( 'ui_refresh_navband' ). + + @param force: refresh regardless (C++: bool) + +Help on function register_action in module ida_kernwin: + +register_action(*args) -> 'bool' + register_action(desc) -> bool + + + Create a new action ( 'ui_register_action' ). After an action has been + created, it is possible to attach it to menu items ( + 'attach_action_to_menu()' ), or to popup menus ( + 'attach_action_to_popup()' ).Because the actions will need to call the + handler's activate() and update() methods at any time, you shouldn't + build your action handler on the stack.Please see the SDK's "ht_view" + plugin for an example how to register actions. + + @param desc: action to register (C++: const action_desc_t &) + @return: success + +Help on function register_addon in module ida_kernwin: + +register_addon(*args) -> 'int' + register_addon(info) -> int + + + Register an add-on. Show its info in the About box. For plugins, + should be called from init() function (repeated calls with the same + product code overwrite previous entries) returns: index of the add-on + in the list, or -1 on error + + @param info (C++: const addon_info_t *) + +Help on function register_and_attach_to_menu in module ida_kernwin: + +register_and_attach_to_menu(*args) -> 'bool' + register_and_attach_to_menu(menupath, name, label, shortcut, flags, handler, owner) -> bool + + + Helper.You are not encouraged to use this, as it mixes flags for both + 'register_action()' , and 'attach_action_to_menu()' .The only reason + for its existence is to make it simpler to port existing plugins to + the new actions API. + + @param menupath (C++: const char *) + @param name (C++: const char *) + @param label (C++: const char *) + @param shortcut (C++: const char *) + @param flags (C++: int) + @param handler (C++: action_handler_t *) + @param owner (C++: const plugin_t *) + +Help on function register_timer in module ida_kernwin: + +register_timer(*args) -> 'PyObject *' + register_timer(interval, py_callback) -> PyObject * + + + Register a timer + + @param interval: Interval in milliseconds + @param callback: A Python callable that takes no parameters and returns an integer. + The callback may return: + -1 : to unregister the timer + >= 0 : the new or same timer interval + @return: None or a timer object + +Help on function remove_command_interpreter in module ida_kernwin: + +remove_command_interpreter(*args) -> 'void' + remove_command_interpreter(cli_idx) + + + Remove command line interpreter ( 'ui_install_cli' ) + +Help on class renderer_pos_info_t in module ida_kernwin: + +class renderer_pos_info_t(builtins.object) + | Proxy of C++ renderer_pos_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_pos_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_renderer_pos_info_t(...) + | delete_renderer_pos_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cx + | renderer_pos_info_t_cx_get(self) -> short + | + | cy + | renderer_pos_info_t_cy_get(self) -> short + | + | node + | renderer_pos_info_t_node_get(self) -> int + | + | sx + | renderer_pos_info_t_sx_get(self) -> short + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function repaint_custom_viewer in module ida_kernwin: + +repaint_custom_viewer(*args) -> 'void' + repaint_custom_viewer(custom_viewer) + + + Repaint the given widget immediately ( 'ui_repaint_qwidget' ) + + + @param custom_viewer (C++: TWidget *) + +Help on function replace_wait_box in module ida_kernwin: + +replace_wait_box(*args) -> 'void' + replace_wait_box(format) + + + Replace the label of "Please wait dialog box". + + + @param format (C++: const char *) + +Help on function request_refresh in module ida_kernwin: + +request_refresh(*args) -> 'void' + request_refresh(mask, cnd=True) + + + Request a refresh of a builtin window. + + @param mask: Window refresh flags (C++: uint64) + @param cnd: set if true or clear flag otherwise (C++: bool) + +Help on function restore_database_snapshot in module ida_kernwin: + +restore_database_snapshot(*args) -> 'PyObject *' + restore_database_snapshot(ss, pyfunc_or_none, pytuple_or_none) -> PyObject * + + + Restore a database snapshot. Note: This call is asynchronous. When it + is completed, the callback will be triggered. + + @param ss: snapshot instance (see build_snapshot_tree() ) (C++: const + snapshot_t *) + @return: false if restoration could not be started (snapshot file was + not found). If the returned value is True then check if + the operation succeeded from the callback. + +Help on function set_cancelled in module ida_kernwin: + +set_cancelled(*args) -> 'void' + set_cancelled() + + + Set "Cancelled" flag ( 'ui_set_cancelled' ) + +Help on function set_code_viewer_handler in module ida_kernwin: + +set_code_viewer_handler(*args) -> 'void *' + set_code_viewer_handler(code_viewer, handler_id, handler_or_data) -> void * + + + Set a handler for a code viewer event ( 'ui_set_custom_viewer_handler' + ). + + @param code_viewer: the code viewer (C++: TWidget *) + @param handler_id: one of CDVH_ in custom_viewer_handler_id_t (C++: + custom_viewer_handler_id_t) + @param handler_or_data: can be a handler or data. see examples in + Functions: custom viewer handlers (C++: void + *) + @return: old value of the handler or data + +Help on function set_code_viewer_is_source in module ida_kernwin: + +set_code_viewer_is_source(*args) -> 'bool' + set_code_viewer_is_source(code_viewer) -> bool + + + Specify that the given code viewer is used to display source code ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + +Help on function set_code_viewer_line_handlers in module ida_kernwin: + +set_code_viewer_line_handlers(*args) -> 'void' + set_code_viewer_line_handlers(code_viewer, click_handler, popup_handler, dblclick_handler, drawicon_handler, linenum_handler) + + + Set handlers for code viewer line events. Any of these handlers may be + NULL + + @param code_viewer (C++: TWidget *) + @param click_handler (C++: code_viewer_lines_click_t *) + @param popup_handler (C++: code_viewer_lines_click_t *) + @param dblclick_handler (C++: code_viewer_lines_click_t *) + @param drawicon_handler (C++: code_viewer_lines_icon_t *) + @param linenum_handler (C++: code_viewer_lines_linenum_t *) + +Help on function set_code_viewer_lines_alignment in module ida_kernwin: + +set_code_viewer_lines_alignment(*args) -> 'bool' + set_code_viewer_lines_alignment(code_viewer, align) -> bool + + + Set alignment for lines in a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param align (C++: int) + +Help on function set_code_viewer_lines_icon_margin in module ida_kernwin: + +set_code_viewer_lines_icon_margin(*args) -> 'bool' + set_code_viewer_lines_icon_margin(code_viewer, margin) -> bool + + + Set space allowed for icons in the margin of a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param margin (C++: int) + +Help on function set_code_viewer_lines_radix in module ida_kernwin: + +set_code_viewer_lines_radix(*args) -> 'bool' + set_code_viewer_lines_radix(code_viewer, radix) -> bool + + + Set radix for values displayed in a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param radix (C++: int) + +Help on function set_code_viewer_user_data in module ida_kernwin: + +set_code_viewer_user_data(*args) -> 'bool' + set_code_viewer_user_data(code_viewer, ud) -> bool + + + Set the user data on a code viewer ( 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param ud (C++: void *) + +Help on function set_custom_viewer_qt_aware in module ida_kernwin: + +set_custom_viewer_qt_aware(*args) -> 'bool' + set_custom_viewer_qt_aware(custom_viewer) -> bool + + + Allow the given viewer to interpret Qt events ( + 'ui_set_custom_viewer_handler' ) + + + @param custom_viewer (C++: TWidget *) + +Help on function set_dock_pos in module ida_kernwin: + +set_dock_pos(*args) -> 'bool' + set_dock_pos(src_ctrl, dest_ctrl, orient, left=0, top=0, right=0, bottom=0) -> bool + + + Sets the dock orientation of a window relatively to another window. + + @param src: Source docking control + @param dest: Destination docking control + @param orient: One of DOR_XXXX constants + @param left, top, right, bottom: These parameter if DOR_FLOATING is used, or if you want to specify the width of docked windows + @return: Boolean + + Example: + set_dock_pos('Structures', 'Enums', DOR_RIGHT) <- docks the Structures window to the right of Enums window + +Help on function set_highlight in module ida_kernwin: + +set_highlight(*args) -> 'bool' + set_highlight(viewer, str, flags) -> bool + + + Set the highlighted identifier in the viewer ( 'ui_set_highlight' ). + + @param viewer: the viewer (C++: TWidget *) + @param str: the text to match, or NULL to remove current (C++: const + char *) + @param flags: combination of HIF_... bits (see set_highlightr flags ) + (C++: int) + @return: false if an error occurred + +Help on function set_nav_colorizer in module ida_kernwin: + +set_nav_colorizer(*args) -> 'PyObject *' + set_nav_colorizer(new_py_colorizer) -> PyObject * + + + Set a new colorizer for the navigation band. + + The 'callback' is a function of 2 arguments: + - ea (the EA to colorize for) + - nbytes (the number of bytes at that EA) + and must return a 'long' value. + + The previous colorizer is returned, allowing + the new 'callback' to use 'call_nav_colorizer' + with it. + + Note that the previous colorizer is returned + only the first time set_nav_colorizer() is called: + due to the way the colorizers API is defined in C, + it is impossible to chain more than 2 colorizers + in IDAPython: the original, IDA-provided colorizer, + and a user-provided one. + + Example: colorizer inverting the color provided by the IDA colorizer: + def my_colorizer(ea, nbytes): + global ida_colorizer + orig = idaapi.call_nav_colorizer(ida_colorizer, ea, nbytes) + return long(~orig) + + ida_colorizer = idaapi.set_nav_colorizer(my_colorizer) + +Help on function set_view_renderer_type in module ida_kernwin: + +set_view_renderer_type(*args) -> 'void' + set_view_renderer_type(v, rt) + + + Set the type of renderer to use in a view ( 'ui_set_renderer_type' ) + + + @param v (C++: TWidget *) + @param rt (C++: tcc_renderer_type_t) + +Help on function show_wait_box in module ida_kernwin: + +show_wait_box(*args) -> 'void' + show_wait_box(message) + + + Display a dialog box with "Please wait...". If the text message starts + with "HIDECANCEL\n", the cancel buttonwon't be displayed in the dialog + box and you don't need to checkfor cancellations with + 'user_cancelled()' . Plugins must call 'hide_wait_box()' to close the + dialog box, otherwise the user interface will be disabled.Note that, + if the wait dialog is already visible, 'show_wait_box()' will1) push + the currently-displayed text on a stack2) display the new textThen, + when 'hide_wait_box()' is called, if that stack isn't empty its + toplabel will be popped and restored in the wait dialog.This implies + that a plugin should call 'hide_wait_box()' exactly as manytimes as it + called 'show_wait_box()' , or the wait dialog might remainvisible and + block the UI.Also, in case the plugin knows the wait dialog is + currently displayed,alternatively it can call 'replace_wait_box()' , + to replace the text of thedialog without pushing the currently- + displayed text on the stack. + +Help on class simplecustviewer_t in module ida_kernwin: + +class simplecustviewer_t(builtins.object) + | The base class for implementing simple custom viewers + | + | Methods defined here: + | + | AddLine(self, line, fgcolor=None, bgcolor=None) + | Adds a colored line to the view + | @return: Boolean + | + | ClearLines(self) + | Clears all the lines + | + | Close(self) + | Destroys the view. + | One has to call Create() afterwards. + | Show() can be called and it will call Create() internally. + | @return: Boolean + | + | Count(self) + | Returns the number of lines in the view + | + | Create(self, title) + | Creates the custom view. This should be the first method called after instantiation + | + | @param title: The title of the view + | @return: Boolean whether it succeeds or fails. It may fail if a window with the same title is already open. + | In this case better close existing windows + | + | DelLine(self, lineno) + | Deletes an existing line + | @return: Boolean + | + | EditLine(self, lineno, line, fgcolor=None, bgcolor=None) + | Edits an existing line. + | @return: Boolean + | + | GetCurrentLine(self, mouse=0, notags=0) + | Returns the current line. + | @param mouse: Current line at mouse pos + | @param notags: If True then tag_remove() will be called before returning the line + | @return: Returns the current line (colored or uncolored) or None on failure + | + | GetCurrentWord(self, mouse=0) + | Returns the current word + | @param mouse: Use mouse position or cursor position + | @return: None if failed or a String containing the current word at mouse or cursor + | + | GetLine(self, lineno) + | Returns a line + | @param lineno: The line number + | @return: + | Returns a tuple (colored_line, fgcolor, bgcolor) or None + | + | GetLineNo(self, mouse=0) + | Calls GetPos() and returns the current line number or -1 on failure + | + | GetPos(self, mouse=0) + | Returns the current cursor or mouse position. + | @param mouse: return mouse position + | @return: Returns a tuple (lineno, x, y) + | + | GetSelection(self) + | Returns the selected range or None + | @return: + | - tuple(x1, y1, x2, y2) + | - None if no selection + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | InsertLine(self, lineno, line, fgcolor=None, bgcolor=None) + | Inserts a line in the given position + | @return: Boolean + | + | IsFocused(self) + | Returns True if the current view is the focused view + | + | Jump(self, lineno, x=0, y=0) + | + | OnPopup(self, form, popup_handle) + | Context menu popup is about to be shown. Create items dynamically if you wish + | @return: Boolean. True if you handled the event + | + | PatchLine(self, lineno, offs, value) + | Patches an existing line character at the given offset. This is a low level function. You must know what you're doing + | + | Refresh(self) + | + | RefreshCurrent(self) + | Refreshes the current line only + | + | Show(self) + | Shows an already created view. It the view was close, then it will call Create() for you + | @return: Boolean + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _simplecustviewer_t__make_sl_arg = __make_sl_arg(line, fgcolor=None, bgcolor=None) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | UI_Hooks_Trampoline = uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) -> 'void' + | _print(self, out_buf, ud) + | + | adjust(self, *args) -> 'void' + | adjust(self, ud) + | + | beginning(self, *args) -> 'bool' + | beginning(self, ud) -> bool + | + | clone(self, *args) -> 'place_t *' + | clone(self) -> place_t + | + | compare(self, *args) -> 'int' + | compare(self, t2) -> int + | + | copyfrom(self, *args) -> 'void' + | copyfrom(self, _from) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, _in) -> bool + | + | ending(self, *args) -> 'bool' + | ending(self, ud) -> bool + | + | enter(self, *args) -> 'place_t *' + | enter(self, arg2) -> place_t + | + | generate(self, *args) -> 'PyObject *' + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) -> 'int' + | id(self) -> int + | + | leave(self, *args) -> 'void' + | leave(self, arg2) + | + | makeplace(self, *args) -> 'place_t *' + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) -> 'char const *' + | name(self) -> char const * + | + | next(self, *args) -> 'bool' + | next(self, ud) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, ud) -> bool + | + | rebase(self, *args) -> 'bool' + | rebase(self, arg2) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self) -> ea_t + | + | touval(self, *args) -> 'uval_t' + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) -> 'enumplace_t *' + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) -> 'idaplace_t *' + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) -> 'simpleline_place_t *' + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) -> 'structplace_t *' + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on class simpleline_t in module ida_kernwin: + +class simpleline_t(builtins.object) + | Proxy of C++ simpleline_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> simpleline_t + | __init__(self, c, str) -> simpleline_t + | __init__(self, str) -> simpleline_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_simpleline_t(...) + | delete_simpleline_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bgcolor + | simpleline_t_bgcolor_get(self) -> bgcolor_t + | + | color + | simpleline_t_color_get(self) -> color_t + | + | line + | simpleline_t_line_get(self) -> qstring * + | + | thisown + | The membership flag + +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. + + @return: BADADDR or address value + +Help on function str2user in module ida_pro: + +str2user(*args) -> 'PyObject *' + str2user(str) -> PyObject * + + + Insert C-style escape characters to string + + @return: new string with escape characters inserted + +Help on function strarray in module ida_kernwin: + +strarray(*args) -> 'char const *' + strarray(array, array_size, code) -> char const * + + + Find a line with the specified code in the 'strarray_t' array. If the + last element of the array has code==0 then it is considered as the + default entry.If no default entry exists and the code is not found, + 'strarray()' returns "". + + @param array (C++: const strarray_t *) + @param array_size (C++: size_t) + @param code (C++: int) + +Help on class strarray_t in module ida_kernwin: + +class strarray_t(builtins.object) + | Proxy of C++ strarray_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strarray_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_strarray_t(...) + | delete_strarray_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | strarray_t_code_get(self) -> int + | + | text + | strarray_t_text_get(self) -> char const * + | + | thisown + | The membership flag + +Help on class structplace_t in module ida_kernwin: + +class structplace_t(place_t) + | Proxy of C++ structplace_t class. + | + | Method resolution order: + | structplace_t + | place_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_structplace_t(...) + | delete_structplace_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | idx + | structplace_t_idx_get(self) -> uval_t + | + | offset + | structplace_t_offset_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) -> 'void' + | _print(self, out_buf, ud) + | + | adjust(self, *args) -> 'void' + | adjust(self, ud) + | + | beginning(self, *args) -> 'bool' + | beginning(self, ud) -> bool + | + | clone(self, *args) -> 'place_t *' + | clone(self) -> place_t + | + | compare(self, *args) -> 'int' + | compare(self, t2) -> int + | + | copyfrom(self, *args) -> 'void' + | copyfrom(self, _from) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, _in) -> bool + | + | ending(self, *args) -> 'bool' + | ending(self, ud) -> bool + | + | enter(self, *args) -> 'place_t *' + | enter(self, arg2) -> place_t + | + | generate(self, *args) -> 'PyObject *' + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) -> 'int' + | id(self) -> int + | + | leave(self, *args) -> 'void' + | leave(self, arg2) + | + | makeplace(self, *args) -> 'place_t *' + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) -> 'char const *' + | name(self) -> char const * + | + | next(self, *args) -> 'bool' + | next(self, ud) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, ud) -> bool + | + | rebase(self, *args) -> 'bool' + | rebase(self, arg2) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self) -> ea_t + | + | touval(self, *args) -> 'uval_t' + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) -> 'enumplace_t *' + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) -> 'idaplace_t *' + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) -> 'simpleline_place_t *' + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) -> 'structplace_t *' + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on class sync_source_t in module ida_kernwin: + +class sync_source_t(builtins.object) + | Proxy of C++ sync_source_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, _o) -> bool + | + | __init__(self, *args) + | __init__(self, _view) -> sync_source_t + | __init__(self, _regname) -> sync_source_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, _o) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_sync_source_t(...) + | delete_sync_source_t(self) + | + | get_register(self, *args) -> 'char const *' + | get_register(self) -> char const * + | + | get_widget(self, *args) -> 'TWidget const *' + | get_widget(self) -> TWidget const * + | + | is_register(self, *args) -> 'bool' + | is_register(self) -> bool + | + | is_widget(self, *args) -> 'bool' + | is_widget(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function sync_sources in module ida_kernwin: + +sync_sources(*args) -> 'bool' + sync_sources(what, _with, sync) -> bool + + + [Un]synchronize sources + + @param what (C++: const sync_source_t &) + @param _with (C++: const sync_source_t &) + @param sync (C++: bool) + @return: success + +Help on function take_database_snapshot in module ida_kernwin: + +take_database_snapshot(*args) -> 'PyObject *' + take_database_snapshot(ss) -> PyObject * + + + Take a database snapshot ( 'ui_take_database_snapshot' ). + + @param ss: in/out parameter. in: description, flags out: filename, + id (C++: snapshot_t *) + @return: success + +Help on class textctrl_info_t in module ida_kernwin: + +class textctrl_info_t(ida_idaapi.py_clinked_object_t) + | Class representing textctrl_info_t + | + | Method resolution order: + | textctrl_info_t + | ida_idaapi.py_clinked_object_t + | ida_idaapi.pyidc_opaque_object_t + | builtins.object + | + | Methods defined here: + | + | __get_flags__(self) + | Returns the flags value + | + | __get_tabsize__(self) + | Returns the tabsize value + | + | __init__(self, text='', flags=0, tabsize=0) + | Initialize self. See help(type(self)) for accurate signature. + | + | __set_flags__(self, flags) + | Sets the flags value + | + | __set_tabsize__(self, tabsize) + | Sets the tabsize value + | + | _create_clink(self) + | Overwrite me. + | Creates a new clink + | @return: PyCapsule representing the C link + | + | _del_clink(self, lnk) + | Overwrite me. + | This method deletes the link + | + | _get_clink_ptr(self) + | Overwrite me. + | Returns the C link pointer as a 64bit number + | + | _textctrl_info_t__get_text = __get_text(self) + | Sets the text value + | + | _textctrl_info_t__set_text = __set_text(self, s) + | Sets the text value + | + | assign(self, other) + | Copies the contents of 'other' to 'self' + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | Returns the flags value + | + | tabsize + | Returns the tabsize value + | + | text + | Sets the text value + | + | value + | Sets the text value + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | TXTF_ACCEPTTABS = 2 + | + | TXTF_AUTOINDENT = 1 + | + | TXTF_FIXEDFONT = 32 + | + | TXTF_MODIFIED = 16 + | + | TXTF_READONLY = 4 + | + | TXTF_SELECTED = 8 + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_idaapi.py_clinked_object_t: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.py_clinked_object_t: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function textctrl_info_t_assign in module ida_kernwin: + +textctrl_info_t_assign(*args) -> 'bool' + textctrl_info_t_assign(_self, other) -> bool + +Help on function textctrl_info_t_create in module ida_kernwin: + +textctrl_info_t_create(*args) -> 'PyObject *' + textctrl_info_t_create() -> PyObject * + +Help on function textctrl_info_t_destroy in module ida_kernwin: + +textctrl_info_t_destroy(*args) -> 'bool' + textctrl_info_t_destroy(py_obj) -> bool + +Help on function textctrl_info_t_get_clink in module ida_kernwin: + +textctrl_info_t_get_clink(*args) -> 'textctrl_info_t *' + textctrl_info_t_get_clink(_self) -> textctrl_info_t * + +Help on function textctrl_info_t_get_clink_ptr in module ida_kernwin: + +textctrl_info_t_get_clink_ptr(*args) -> 'PyObject *' + textctrl_info_t_get_clink_ptr(_self) -> PyObject * + +Help on function textctrl_info_t_get_flags in module ida_kernwin: + +textctrl_info_t_get_flags(*args) -> 'unsigned int' + textctrl_info_t_get_flags(_self) -> unsigned int + +Help on function textctrl_info_t_get_tabsize in module ida_kernwin: + +textctrl_info_t_get_tabsize(*args) -> 'unsigned int' + textctrl_info_t_get_tabsize(_self) -> unsigned int + +Help on function textctrl_info_t_get_text in module ida_kernwin: + +textctrl_info_t_get_text(*args) -> 'char const *' + textctrl_info_t_get_text(_self) -> char const * + +Help on function textctrl_info_t_set_flags in module ida_kernwin: + +textctrl_info_t_set_flags(*args) -> 'bool' + textctrl_info_t_set_flags(_self, flags) -> bool + +Help on function textctrl_info_t_set_tabsize in module ida_kernwin: + +textctrl_info_t_set_tabsize(*args) -> 'bool' + textctrl_info_t_set_tabsize(_self, tabsize) -> bool + +Help on function textctrl_info_t_set_text in module ida_kernwin: + +textctrl_info_t_set_text(*args) -> 'bool' + textctrl_info_t_set_text(_self, s) -> bool + +Help on class twinpos_t in module ida_kernwin: + +class twinpos_t(builtins.object) + | Proxy of C++ twinpos_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> twinpos_t + | __init__(self, t) -> twinpos_t + | __init__(self, t, x0) -> twinpos_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_twinpos_t(...) + | delete_twinpos_t(self) + | + | place(self, view) + | + | place_as_enumplace_t(self) + | + | place_as_idaplace_t(self) + | + | place_as_simpleline_place_t(self) + | + | place_as_structplace_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | at + | twinpos_t_at_get(self) -> place_t + | + | thisown + | The membership flag + | + | x + | twinpos_t_x_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function ui_load_new_file in module ida_kernwin: + +ui_load_new_file(*args) -> 'bool' + ui_load_new_file(temp_file, filename, pli, neflags, ploaders) -> bool + + + Display a load file dialog and load file ( 'ui_load_file' ). + + @param temp_file: name of the file with the extracted archive member. + (C++: qstring *) + @param filename: the name of input file as is, library or archive name + (C++: qstring *) + @param pli: loader input source, may be changed to point to temp_file + (C++: linput_t **) + @param neflags: combination of NEF_... bits (see Load file flags ) + (C++: ushort) + @param ploaders: list of loaders which accept file, may be changed for + loaders of temp_file (C++: load_info_t **) + +Help on class ui_requests_t in module ida_kernwin: + +class ui_requests_t(builtins.object) + | Proxy of C++ ui_requests_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ui_requests_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ui_requests_t(...) + | delete_ui_requests_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 + +Help on function ui_run_debugger in module ida_kernwin: + +ui_run_debugger(*args) -> 'bool' + ui_run_debugger(dbgopts, exename, argc, argv) -> bool + + + Load a debugger plugin and run the specified program ( 'ui_run_dbg' ). + + @param dbgopts: value of the -r command line switch (C++: const char + *) + @param exename: name of the file to run (C++: const char *) + @param argc: number of arguments for the executable (C++: int) + @param argv: argument vector (C++: const char *const *) + @return: success + +Help on function unmark_selection in module ida_kernwin: + +unmark_selection(*args) -> 'void' + unmark_selection() + + + Unmark selection ( 'ui_unmarksel' ) + +Help on function unregister_action in module ida_kernwin: + +unregister_action(*args) -> 'bool' + unregister_action(name) -> bool + + + Delete a previously-registered action ( 'ui_unregister_action' ). + + @param name: name of action (C++: const char *) + @return: success + +Help on function unregister_timer in module ida_kernwin: + +unregister_timer(*args) -> 'bool' + unregister_timer(py_timerctx) -> bool + + + Unregister a timer + + @param timer_obj: a timer object previously returned by a register_timer() + @return: Boolean + @note: After the timer has been deleted, the timer_obj will become invalid. + +Help on function update_action_checkable in module ida_kernwin: + +update_action_checkable(*args) -> 'bool' + update_action_checkable(name, checkable) -> bool + + + Update an action's checkability ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param checkable: new checkability (C++: bool) + @return: success + +Help on function update_action_checked in module ida_kernwin: + +update_action_checked(*args) -> 'bool' + update_action_checked(name, checked) -> bool + + + Update an action's checked state ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param checked: new checked state (C++: bool) + @return: success + +Help on function update_action_icon in module ida_kernwin: + +update_action_icon(*args) -> 'bool' + update_action_icon(name, icon) -> bool + + + Update an action's icon ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param icon: new icon id (C++: int) + @return: success + +Help on function update_action_label in module ida_kernwin: + +update_action_label(*args) -> 'bool' + update_action_label(name, label) -> bool + + + Update an action's label ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param label: new label (C++: const char *) + @return: success + +Help on function update_action_shortcut in module ida_kernwin: + +update_action_shortcut(*args) -> 'bool' + update_action_shortcut(name, shortcut) -> bool + + + Update an action's shortcut ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param shortcut: new shortcut (C++: const char *) + @return: success + +Help on function update_action_state in module ida_kernwin: + +update_action_state(*args) -> 'bool' + update_action_state(name, state) -> bool + + + Update an action's state ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param state: new state (C++: action_state_t) + @return: success + +Help on function update_action_tooltip in module ida_kernwin: + +update_action_tooltip(*args) -> 'bool' + update_action_tooltip(name, tooltip) -> bool + + + Update an action's tooltip ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param tooltip: new tooltip (C++: const char *) + @return: success + +Help on function update_action_visibility in module ida_kernwin: + +update_action_visibility(*args) -> 'bool' + update_action_visibility(name, visible) -> bool + + + Update an action's visibility ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param visible: new visibility (C++: bool) + @return: success + +Help on function user_cancelled in module ida_kernwin: + +user_cancelled(*args) -> 'bool' + user_cancelled() -> bool + + + Test the ctrl-break flag ( 'ui_test_cancelled' ). + +Help on class view_mouse_event_location_t in module ida_kernwin: + +class view_mouse_event_location_t(builtins.object) + | Proxy of C++ view_mouse_event_location_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> view_mouse_event_location_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_view_mouse_event_location_t(...) + | delete_view_mouse_event_location_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | view_mouse_event_location_t_ea_get(self) -> ea_t + | + | item + | view_mouse_event_location_t_item_get(self) -> selection_item_t const * + | + | thisown + | The membership flag + +Help on class view_mouse_event_t in module ida_kernwin: + +class view_mouse_event_t(builtins.object) + | Proxy of C++ view_mouse_event_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> view_mouse_event_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_view_mouse_event_t(...) + | delete_view_mouse_event_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | button + | view_mouse_event_t_button_get(self) -> vme_button_t + | + | location + | view_mouse_event_t_location_get(self) -> view_mouse_event_location_t + | + | renderer_pos + | view_mouse_event_t_renderer_pos_get(self) -> renderer_pos_info_t + | + | rtype + | view_mouse_event_t_rtype_get(self) -> tcc_renderer_type_t + | + | state + | view_mouse_event_t_state_get(self) -> view_event_state_t + | + | thisown + | The membership flag + | + | x + | view_mouse_event_t_x_get(self) -> uint32 + | + | y + | view_mouse_event_t_y_get(self) -> uint32 + +Help on function warning in module ida_kernwin: + +warning(*args) -> 'void' + warning(format) + + + Display a message in a message box + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + The user will be able to hide messages if they appear twice in a row on + the screen + +=== ida_kernwin EPYDOC INJECTIONS === +ida_kernwin.ACF_HAS_SELECTION +""" +there is currently a valid selection +""" + +ida_kernwin.ACF_XTRN_EA +""" +cur_ea is in 'externs' segment +""" + +ida_kernwin.ADF_NO_UNDO +""" +useful for actions that do not modify the database. + +the action does not create an undo point. +""" + +ida_kernwin.ADF_OWN_HANDLER +""" +handler is owned by the action; it'll be destroyed when the action is +unregistered. You shouldn't have to use this. +""" + +ida_kernwin.AHF_VERSION +""" +action handler version (used by 'action_handler_t::flags' ) +""" + +ida_kernwin.AHF_VERSION_MASK +""" +mask for 'action_handler_t::flags' +""" + +ida_kernwin.ASKBTN_BTN1 +""" +First (Yes) button. +""" + +ida_kernwin.ASKBTN_BTN2 +""" +Second (No) button. +""" + +ida_kernwin.ASKBTN_BTN3 +""" +Third (Cancel) button. +""" + +ida_kernwin.ASKBTN_CANCEL +""" +Cancel button. +""" + +ida_kernwin.ASKBTN_NO +""" +No button. +""" + +ida_kernwin.ASKBTN_YES +""" +Yes button. +""" + +ida_kernwin.BWN_ADDRWATCH +""" +the 'Watch List' window +""" + +ida_kernwin.BWN_BPTS +""" +breakpoints +""" + +ida_kernwin.BWN_CALLS +""" +function calls +""" + +ida_kernwin.BWN_CALLS_CALLEES +""" +function calls, callees +""" + +ida_kernwin.BWN_CALLS_CALLERS +""" +function calls, callers +""" + +ida_kernwin.BWN_CALL_STACK +""" +call stack +""" + +ida_kernwin.BWN_CHOOSER +""" +a non-builtin chooser +""" + +ida_kernwin.BWN_CLI +""" +the command-line, in the output window +""" + +ida_kernwin.BWN_CMDPALCSR +""" +the command palette chooser (Qt version only) +""" + +ida_kernwin.BWN_CMDPALWIN +""" +the command palette window (Qt version only) +""" + +ida_kernwin.BWN_CPUREGS +""" +one of the 'General registers', 'FPU register', ... debugger windows +""" + +ida_kernwin.BWN_CUSTVIEW +""" +custom viewers +""" + +ida_kernwin.BWN_CV_LINE_INFOS +""" +custom viewers' lineinfo widget +""" + +ida_kernwin.BWN_DISASM +""" +disassembly views +""" + +ida_kernwin.BWN_DISASMS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_DISASM_ARROWS +""" +disassembly arrows widget +""" + +ida_kernwin.BWN_DUMP +""" +hex dumps +""" + +ida_kernwin.BWN_DUMPS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_ENUMS +""" +enumerations +""" + +ida_kernwin.BWN_EXPORTS +""" +exports +""" + +ida_kernwin.BWN_FRAME +""" +function frame +""" + +ida_kernwin.BWN_FUNCS +""" +functions +""" + +ida_kernwin.BWN_IMPORTS +""" +imports +""" + +ida_kernwin.BWN_LOCALS +""" +the 'locals' debugger window +""" + +ida_kernwin.BWN_LOCTYPS +""" +local types +""" + +ida_kernwin.BWN_MDVIEWCSR +""" +lumina metadata view chooser +""" + +ida_kernwin.BWN_MODULES +""" +modules +""" + +ida_kernwin.BWN_NAMES +""" +names +""" + +ida_kernwin.BWN_NAVBAND +""" +navigation band +""" + +ida_kernwin.BWN_NOTEPAD +""" +notepad +""" + +ida_kernwin.BWN_OUTPUT +""" +the text area, in the output window +""" + +ida_kernwin.BWN_PROBS +""" +problems +""" + +ida_kernwin.BWN_PSEUDOCODE +""" +hexrays decompiler views +""" + +ida_kernwin.BWN_SCRIPTS_CSR +""" +the "Recent scripts" chooser +""" + +ida_kernwin.BWN_SEARCH +""" +search results +""" + +ida_kernwin.BWN_SEARCHS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_SEGREGS +""" +segment registers +""" + +ida_kernwin.BWN_SEGS +""" +segments +""" + +ida_kernwin.BWN_SELS +""" +selectors +""" + +ida_kernwin.BWN_SHORTCUTCSR +""" +the shortcuts chooser (Qt version only) +""" + +ida_kernwin.BWN_SHORTCUTWIN +""" +the shortcuts window (Qt version only) +""" + +ida_kernwin.BWN_SIGNS +""" +signatures +""" + +ida_kernwin.BWN_SNIPPETS +""" +the 'Execute script' window +""" + +ida_kernwin.BWN_SNIPPETS_CSR +""" +the list of snippets in the 'Execute script' window +""" + +ida_kernwin.BWN_SO_OFFSETS +""" +the 'Structure offsets' dialog's offset panel +""" + +ida_kernwin.BWN_SO_STRUCTS +""" +the 'Structure offsets' dialog's 'Structures and Unions' panel +""" + +ida_kernwin.BWN_SRCPTHMAP_CSR +""" +"Source paths..."'s path mappings chooser +""" + +ida_kernwin.BWN_SRCPTHUND_CSR +""" +"Source paths..."'s undesired paths chooser +""" + +ida_kernwin.BWN_STACK +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_STKVIEW +""" +the 'Stack view' debugger window +""" + +ida_kernwin.BWN_STRINGS +""" +strings +""" + +ida_kernwin.BWN_STRUCTS +""" +structures +""" + +ida_kernwin.BWN_THREADS +""" +threads +""" + +ida_kernwin.BWN_TILS +""" +type libraries +""" + +ida_kernwin.BWN_TRACE +""" +trace view +""" + +ida_kernwin.BWN_UNDOHIST +""" +Undo history. +""" + +ida_kernwin.BWN_UNKNOWN +""" +unknown window +""" + +ida_kernwin.BWN_WATCH +""" +the 'watches' debugger window +""" + +ida_kernwin.BWN_XREFS +""" +xrefs +""" + +ida_kernwin.CHCOL_DEC +""" +decimal number +""" + +ida_kernwin.CHCOL_DEFHIDDEN +""" +column should be hidden by default +""" + +ida_kernwin.CHCOL_EA +""" +address +""" + +ida_kernwin.CHCOL_FNAME +""" +function name +""" + +ida_kernwin.CHCOL_FORMAT +""" +column format mask +""" + +ida_kernwin.CHCOL_HEX +""" +hexadecimal number +""" + +ida_kernwin.CHCOL_PATH +""" +file path +""" + +ida_kernwin.CHCOL_PLAIN +""" +plain string +""" + +ida_kernwin.CHITEM_BOLD +""" +display the item in bold +""" + +ida_kernwin.CHITEM_GRAY +""" +gray out the item +""" + +ida_kernwin.CHITEM_ITALIC +""" +display the item in italic +""" + +ida_kernwin.CHITEM_STRIKE +""" +strikeout the item +""" + +ida_kernwin.CHITEM_UNDER +""" +underline the item +""" + +ida_kernwin.CHOOSER_MENU_EDIT +""" +Values of the 'menu_index' parameter. + +Obsolete. Please don't use +""" + +ida_kernwin.CHOOSER_MENU_JUMP +""" +Obsolete. Please don't use. +""" + +ida_kernwin.CHOOSER_MENU_SEARCH +""" +Obsolete. Please don't use. +""" + +ida_kernwin.CHOOSER_MULTI_SELECTION +""" +enable for multiple selections. A callback of type +'chooser_multi_cb_t' will be called for all selected items. +""" + +ida_kernwin.CHOOSER_NO_SELECTION +""" +Flags. + +enable even if there's no selected item. 'n' will be NO_SELECTION for +a callback. +""" + +ida_kernwin.CHOOSER_POPUP_MENU +""" +Add command to the popup menu. +""" + +ida_kernwin.CH_ATTRS +""" +generate ui_get_chooser_item_attrs (gui only) +""" + +ida_kernwin.CH_BUILTIN_MASK +""" +Mask for builtin chooser numbers. Plugins should not use them. +""" + +ida_kernwin.CH_CAN_DEL +""" +allow to delete existing item(s) +""" + +ida_kernwin.CH_CAN_EDIT +""" +allow to edit existing item(s) +""" + +ida_kernwin.CH_CAN_INS +""" +allow to insert new items +""" + +ida_kernwin.CH_CAN_REFRESH +""" +allow to refresh chooser +""" + +ida_kernwin.CH_FORCE_DEFAULT +""" +if a non-modal chooser was already open, change selection to the +default one +""" + +ida_kernwin.CH_KEEP +""" +The chooser instance's lifecycle is not tied to the lifecycle of the +widget showing its contents. Closing the widget will not destroy the +chooser structure. This allows for, e.g., static global chooser +instances that don't need to be allocated on the heap. Also stack- +allocated chooser instances must set this bit. +""" + +ida_kernwin.CH_MODAL +""" +Modal chooser. +""" + +ida_kernwin.CH_MULTI +""" +Obsolete. + +The chooser will allow multi-selection (only for GUI choosers). This +bit is set when using the 'chooser_multi_t' structure. +""" + +ida_kernwin.CH_NOBTNS +""" +do not display ok/cancel/help/search buttons. Meaningful only for gui +modal windows because non-modal windows do not have any buttons +anyway. Text mode does not have them neither. +""" + +ida_kernwin.CH_NOIDB +""" +use the chooser before opening the database +""" + +ida_kernwin.CH_NO_STATUS_BAR +""" +don't show a status bar +""" + +ida_kernwin.CH_QFLT +""" +open with quick filter enabled and focused +""" + +ida_kernwin.CH_QFTYP_DEFAULT +""" +set quick filtering type to the possible existing default for this +chooser +""" + +ida_kernwin.CH_QFTYP_FUZZY +""" +fuzzy search quick filter type +""" + +ida_kernwin.CH_QFTYP_NORMAL +""" +normal (i.e., lexicographical) quick filter type +""" + +ida_kernwin.CH_QFTYP_REGEX +""" +regex quick filter type +""" + +ida_kernwin.CH_QFTYP_WHOLE_WORDS +""" +whole words quick filter type +""" + +ida_kernwin.CH_RESTORE +""" +restore floating position if present (equivalent of WOPN_RESTORE) (GUI +version only) +""" + +ida_kernwin.CLNL_FINDCMT +""" +Search for the comment symbol everywhere in the line, not only at the +beginning. +""" + +ida_kernwin.CLNL_LTRIM +""" +Remove leading space characters. +""" + +ida_kernwin.CLNL_RTRIM +""" +Remove trailing space characters. +""" + +ida_kernwin.CREATETB_ADV +""" +toolbar is for 'advanced mode' only +""" + +ida_kernwin.DP_BEFORE +""" +used with 'DP_INSIDE' . + +place src_form before dst_form in the tab bar instead of after +""" + +ida_kernwin.DP_BOTTOM +""" +Dock src_form below dest_form. +""" + +ida_kernwin.DP_FLOATING +""" +Make src_form floating. +""" + +ida_kernwin.DP_INSIDE +""" +Create a new tab bar with both src_form and dest_form. +""" + +ida_kernwin.DP_LEFT +""" +Dock src_form to the left of dest_form. +""" + +ida_kernwin.DP_RIGHT +""" +Dock src_form to the right of dest_form. +""" + +ida_kernwin.DP_TAB +""" +Place src_form into a tab next to dest_form, if dest_form is in a tab +bar (otherwise the same as 'DP_INSIDE' ) +""" + +ida_kernwin.DP_TOP +""" +Dock src_form above dest_form. +""" + +ida_kernwin.HIF_IDENTIFIER +""" +text is an identifier (i.e., when searching for the current highlight, +SEARCH_IDENT will be used) +""" + +ida_kernwin.HIF_LOCKED +""" +locked; clicking/moving the cursor around doesn't change the highlight +""" + +ida_kernwin.HIF_NOCASE +""" +case insensitive +""" + +ida_kernwin.HIF_REGISTER +""" +text represents a register (aliases/subregisters will be highlit as +well) +""" + +ida_kernwin.HIST_CMD +""" +commands +""" + +ida_kernwin.HIST_CMT +""" +comments +""" + +ida_kernwin.HIST_DIR +""" +directory names (text version only) +""" + +ida_kernwin.HIST_FILE +""" +file names +""" + +ida_kernwin.HIST_IDENT +""" +names +""" + +ida_kernwin.HIST_SEG +""" +segment names +""" + +ida_kernwin.HIST_SRCH +""" +search substrings +""" + +ida_kernwin.HIST_TYPE +""" +type declarations +""" + +ida_kernwin.IWID_ADDRWATCH +""" +address watches (47) +""" + +ida_kernwin.IWID_ALL +""" +mask +""" + +ida_kernwin.IWID_BPTS +""" +breakpoints (13) +""" + +ida_kernwin.IWID_CALLS +""" +function calls (11) +""" + +ida_kernwin.IWID_CALLS_CALLEES +""" +funcalls, callees (50) +""" + +ida_kernwin.IWID_CALLS_CALLERS +""" +funcalls, callers (49) +""" + +ida_kernwin.IWID_CALL_STACK +""" +call stack (17) +""" + +ida_kernwin.IWID_CHOOSER +""" +chooser (37) +""" + +ida_kernwin.IWID_CLI +""" +input line (33) +""" + +ida_kernwin.IWID_CMDPALCSR +""" +command palette (43) +""" + +ida_kernwin.IWID_CMDPALWIN +""" +command palette (44) +""" + +ida_kernwin.IWID_CPUREGS +""" +registers (40) +""" + +ida_kernwin.IWID_CUSTVIEW +""" +custom viewers (46) +""" + +ida_kernwin.IWID_CV_LINE_INFOS +""" +lineinfo widget (53) +""" + +ida_kernwin.IWID_DISASM +""" +disassembly views (29) +""" + +ida_kernwin.IWID_DISASM_ARROWS +""" +arrows widget (52) +""" + +ida_kernwin.IWID_DUMP +""" +hex dumps (30) +""" + +ida_kernwin.IWID_ENUMS +""" +enumerations (27) +""" + +ida_kernwin.IWID_EXPORTS +""" +exports (0) +""" + +ida_kernwin.IWID_FRAME +""" +function frame (25) +""" + +ida_kernwin.IWID_FUNCS +""" +functions (3) +""" + +ida_kernwin.IWID_IMPORTS +""" +imports (1) +""" + +ida_kernwin.IWID_LOCALS +""" +locals (35) +""" + +ida_kernwin.IWID_LOCTYPS +""" +local types (10) +""" + +ida_kernwin.IWID_MDVIEWCSR +""" +lumina md view (51) +""" + +ida_kernwin.IWID_MODULES +""" +modules (15) +""" + +ida_kernwin.IWID_NAMES +""" +names (2) +""" + +ida_kernwin.IWID_NAVBAND +""" +navigation band (26) +""" + +ida_kernwin.IWID_NOTEPAD +""" +notepad (31) +""" + +ida_kernwin.IWID_OUTPUT +""" +output (32) +""" + +ida_kernwin.IWID_PROBS +""" +problems (12) +""" + +ida_kernwin.IWID_PSEUDOCODE +""" +decompiler (48) +""" + +ida_kernwin.IWID_SCRIPTS_CSR +""" +recent scripts (58) +""" + +ida_kernwin.IWID_SEARCH +""" +search results (19) +""" + +ida_kernwin.IWID_SEGREGS +""" +segment registers (6) +""" + +ida_kernwin.IWID_SEGS +""" +segments (5) +""" + +ida_kernwin.IWID_SELS +""" +selectors (7) +""" + +ida_kernwin.IWID_SHORTCUTCSR +""" +shortcuts chooser (38) +""" + +ida_kernwin.IWID_SHORTCUTWIN +""" +shortcuts window (39) +""" + +ida_kernwin.IWID_SIGNS +""" +signatures (8) +""" + +ida_kernwin.IWID_SNIPPETS +""" +snippets (45) +""" + +ida_kernwin.IWID_SNIPPETS_CSR +""" +snippets chooser (57) +""" + +ida_kernwin.IWID_SO_OFFSETS +""" +stroff (42) +""" + +ida_kernwin.IWID_SO_STRUCTS +""" +stroff (41) +""" + +ida_kernwin.IWID_SRCPTHMAP_CSR +""" +mappings chooser (54) +""" + +ida_kernwin.IWID_SRCPTHUND_CSR +""" +undesired chooser (55) +""" + +ida_kernwin.IWID_STACK +""" +Alias. Some IWID_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.IWID_STKVIEW +""" +stack view (36) +""" + +ida_kernwin.IWID_STRINGS +""" +strings (4) +""" + +ida_kernwin.IWID_STRUCTS +""" +structures (28) +""" + +ida_kernwin.IWID_THREADS +""" +threads (14) +""" + +ida_kernwin.IWID_TILS +""" +type libraries (9) +""" + +ida_kernwin.IWID_TRACE +""" +trace view (16) +""" + +ida_kernwin.IWID_UNDOHIST +""" +Undo history (56) +""" + +ida_kernwin.IWID_WATCH +""" +watches (34) +""" + +ida_kernwin.IWID_XREFS +""" +xrefs (18) +""" + +ida_kernwin.MFF_FAST +""" +Execute code as soon as possible. this mode is ok for calling ui +related functions that do not query the database. +""" + +ida_kernwin.MFF_NOWAIT +""" +Do not wait for the request to be executed. the caller should ensure +that the request is not destroyed until the execution completes. if +not, the request will be ignored. 'execute_sync()' returns the request +id in this case. it can be used in 'cancel_exec_request()' . This flag +can be used to delay the code execution until the next UI loop run +even from the main thread. +""" + +ida_kernwin.MFF_READ +""" +Execute code only when ida is idle and it is safe to query the +database. this mode is recommended only for code that does not modify +the database. (nb: ida may be in the middle of executing another user +request, for example it may be waiting for him to enter values into a +modal dialog box) +""" + +ida_kernwin.MFF_WRITE +""" +Execute code only when ida is idle and it is safe to modify the +database. in particular, this flag will suspend execution if there is +a modal dialog box on the screen this mode can be used to call any ida +api function 'MFF_WRITE' implies 'MFF_READ' +""" + +ida_kernwin.SETMENU_APP +""" +add menu item after the specified path +""" + +ida_kernwin.SETMENU_FIRST +""" +add item to the beginning of menu +""" + +ida_kernwin.SETMENU_INS +""" +add menu item before the specified path (default) +""" + +ida_kernwin.UIJMP_ACTIVATE +""" +activate the new window +""" + +ida_kernwin.UIJMP_ANYVIEW +""" +jump in any ea_t-capable view +""" + +ida_kernwin.UIJMP_DONTPUSH +""" +in the navigation history + +do not remember the current address +""" + +ida_kernwin.UIJMP_IDAVIEW +""" +jump in idaview +""" + +ida_kernwin.UIJMP_IDAVIEW_NEW +""" +jump in new idaview +""" + +ida_kernwin.VES_SHIFT +""" +state & 1 => Shift is pressedstate & 2 => Alt is pressedstate & 4 => +Ctrl is pressedstate & 8 => Mouse left button is pressedstate & 16 => +Mouse right button is pressedstate & 32 => Mouse middle button is +pressedstate & 128 => Meta is pressed (OSX only) +""" +=== ida_kernwin EPYDOC INJECTIONS END === +Help on function COLSTR in module ida_lines: + +COLSTR(str, tag) + Utility function to create a colored line + @param str: The string + @param tag: Color tag constant. One of SCOLOR_XXXX + +Help on function add_extra_cmt in module ida_lines: + +add_extra_cmt(*args) -> 'bool' + add_extra_cmt(ea, isprev, format) -> bool + + + Add anterior/posterior comment line(s). + + @param ea: linear address (C++: ea_t) + @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) + @param format: printf() style format string. may contain \n to denote + new lines. The resulting string should not contain + comment characters (;), the kernel will add them + automatically. (C++: const char *) + @return: true if success + +Help on function add_extra_line in module ida_lines: + +add_extra_line(*args) -> 'bool' + add_extra_line(ea, isprev, format) -> bool + + + Add anterior/posterior non-comment line(s). + + @param ea: linear address (C++: ea_t) + @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) + @param format: printf() style format string. may contain \n to denote + new lines. (C++: const char *) + @return: true if success + +Help on function add_pgm_cmt in module ida_lines: + +add_pgm_cmt(*args) -> 'bool' + add_pgm_cmt(format) -> bool + + + Add anterior comment line(s) at the start of program. + + @param format: printf() style format string. may contain \n to denote + new lines. The resulting string should not contain + comment characters (;), the kernel will add them + automatically. (C++: const char *) + @return: true if success + +Help on function add_sourcefile in module ida_lines: + +add_sourcefile(*args) -> 'bool' + add_sourcefile(ea1, ea2, filename) -> bool + + + Mark a range of address as belonging to a source file. An address + range may belong only to one source file. A source file may be + represented by several address ranges. + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (excluded) + (C++: ea_t) + @param filename: name of source file. (C++: const char *) + @return: success + +Help on class bgcolors_t in module ida_lines: + +class bgcolors_t(builtins.object) + | Proxy of C++ bgcolors_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bgcolors_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bgcolors_t(...) + | delete_bgcolors_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | epilog_color + | bgcolors_t_epilog_color_get(self) -> bgcolor_t + | + | prolog_color + | bgcolors_t_prolog_color_get(self) -> bgcolor_t + | + | switch_color + | bgcolors_t_switch_color_get(self) -> bgcolor_t + | + | thisown + | The membership flag + +Help on function calc_bg_color in module ida_lines: + +calc_bg_color(*args) -> 'bgcolor_t' + calc_bg_color(ea) -> bgcolor_t + + + Get background color for line at 'ea' + + @param ea (C++: ea_t) + @return: RGB color + +Help on function calc_prefix_color in module ida_lines: + +calc_prefix_color(*args) -> 'color_t' + calc_prefix_color(ea) -> color_t + + + Get prefix color for line at 'ea' + + @param ea (C++: ea_t) + @return: Line prefix colors + +Help on function create_encoding_helper in module ida_lines: + +create_encoding_helper(*args) -> 'encoder_t *' + create_encoding_helper(encidx=-1, nr=nr_once) -> encoder_t * + +Help on function del_extra_cmt in module ida_lines: + +del_extra_cmt(*args) -> 'void' + del_extra_cmt(ea, what) + +Help on function del_sourcefile in module ida_lines: + +del_sourcefile(*args) -> 'bool' + del_sourcefile(ea) -> bool + + + Delete information about the source file. + + @param ea: linear address (C++: ea_t) + @return: success + +Help on function delete_extra_cmts in module ida_lines: + +delete_extra_cmts(*args) -> 'void' + delete_extra_cmts(ea, what) + +Help on function generate_disasm_line in module ida_lines: + +generate_disasm_line(*args) -> 'qstring *' + generate_disasm_line(ea, flags=0) -> str + +Help on function generate_disassembly in module ida_lines: + +generate_disassembly(*args) -> 'PyObject *' + generate_disassembly(ea, max_lines, as_stack, notags) -> PyObject * + + + Generate disassembly lines (many lines) and put them into a buffer + + @param ea: address to generate disassembly for + @param max_lines: how many lines max to generate + @param as_stack: Display undefined items as 2/4/8 bytes + @return: + - None on failure + - tuple(most_important_line_number, tuple(lines)) : Returns a tuple containing + the most important line number and a tuple of generated lines + +Help on function get_extra_cmt in module ida_lines: + +get_extra_cmt(*args) -> 'int' + get_extra_cmt(ea, what) -> ssize_t + +Help on function get_first_free_extra_cmtidx in module ida_lines: + +get_first_free_extra_cmtidx(*args) -> 'int' + get_first_free_extra_cmtidx(ea, start) -> int + +Help on function get_sourcefile in module ida_lines: + +get_sourcefile(*args) -> 'char const *' + get_sourcefile(ea, bounds=None) -> char const * + + + Get name of source file occupying the given address. + + @param ea: linear address (C++: ea_t) + @param bounds: pointer to the output buffer with the address range for + the current file. May be NULL. (C++: range_t *) + @return: NULL if source file information is not found, otherwise + returns pointer to file name + +Help on function requires_color_esc in module ida_lines: + +requires_color_esc(c) + Checks if the given character requires escaping + @param c: character (string of one char) + @return: Boolean + + + Is the given char a color escape character? + +Help on function set_user_defined_prefix in module ida_lines: + +set_user_defined_prefix(*args) -> 'PyObject *' + set_user_defined_prefix(width, pycb) -> PyObject * + + + User-defined line-prefixes are displayed just after the autogenerated + line prefixes. In order to use them, the plugin should call the + following function to specify its width and contents. + @param width: the width of the user-defined prefix + @param callback: a get_user_defined_prefix callback to get the contents of the prefix. + Its arguments: + ea - linear address + lnnum - line number + indent - indent of the line contents (-1 means the default instruction) + indent and is used for instruction itself. see explanations for printf_line() + line - the line to be generated. the line usually contains color tags this argument + can be examined to decide whether to generated the prefix + It returns a buffer of size < bufsize + + In order to remove the callback before unloading the plugin, specify the width = 0 or the callback = None + +Help on function tag_addr in module ida_lines: + +tag_addr(*args) -> 'PyObject *' + tag_addr(ea) -> PyObject * + + + Insert an address mark into a string. + + @param ea: address to include (C++: ea_t) + +Help on function tag_advance in module ida_lines: + +tag_advance(*args) -> 'int' + tag_advance(line, cnt) -> int + + + Move pointer to a 'line' to 'cnt' positions right. Take into account + escape sequences. + + @param line: pointer to string (C++: const char *) + @param cnt: number of positions to move right (C++: int) + @return: moved pointer + +Help on function tag_remove in module ida_lines: + +tag_remove(*args) -> 'PyObject *' + tag_remove(nonnul_instr) -> PyObject * + + + Remove color escape sequences from a string + @param colstr: the colored string with embedded tags + @return: a new string w/o the tags + +Help on function tag_skipcode in module ida_lines: + +tag_skipcode(*args) -> 'int' + tag_skipcode(line) -> int + + + Skip one color code. This function should be used if you are + interested in color codes and want to analyze all of them. Otherwise + 'tag_skipcodes()' function is better since it will skip all colors at + once. This function will skip the current color code if there is one. + If the current symbol is not a color code, it will return the input. + + @param line (C++: const char *) + @return: moved pointer + +Help on function tag_skipcodes in module ida_lines: + +tag_skipcodes(*args) -> 'int' + tag_skipcodes(line) -> int + + + Move the pointer past all color codes. + + @param line: can't be NULL (C++: const char *) + @return: moved pointer, can't be NULL + +Help on function tag_strlen in module ida_lines: + +tag_strlen(*args) -> 'ssize_t' + tag_strlen(line) -> ssize_t + + + Calculate length of a colored string This function computes the length + in unicode codepoints of a line + + @param line (C++: const char *) + @return: the number of codepoints in the line, or -1 on error + +Help on function update_extra_cmt in module ida_lines: + +update_extra_cmt(*args) -> 'void' + update_extra_cmt(ea, what, str) + +=== ida_lines EPYDOC INJECTIONS === +ida_lines.COLOR_ADDR_SIZE +""" +Size of a tagged address (see 'COLOR_ADDR' ) +""" + +ida_lines.COLOR_BG_MAX +""" +Max color number. +""" + +ida_lines.COLOR_CODE +""" +Single instruction. +""" + +ida_lines.COLOR_CURITEM +""" +Current item. +""" + +ida_lines.COLOR_CURLINE +""" +Current line. +""" + +ida_lines.COLOR_DATA +""" +Data bytes. +""" + +ida_lines.COLOR_DEFAULT +""" +Default. +""" + +ida_lines.COLOR_ESC +""" +Escape character (Quote next character). This is needed to output '\\1' +and '\\2' characters. +""" + +ida_lines.COLOR_EXTERN +""" +External name definition segment. +""" + +ida_lines.COLOR_HIDLINE +""" +Hidden line. +""" + +ida_lines.COLOR_INV +""" +Escape character (Inverse foreground and background colors). This +escape character has no corresponding 'COLOR_OFF' . Its action +continues until the next 'COLOR_INV' or end of line. +""" + +ida_lines.COLOR_LIBFUNC +""" +Library function. +""" + +ida_lines.COLOR_LUMFUNC +""" +Lumina function. +""" + +ida_lines.COLOR_OFF +""" +Followed by a color code ( 'color_t' ). + +Escape character (OFF). +""" + +ida_lines.COLOR_ON +""" +Followed by a color code ( 'color_t' ). + +Escape character (ON). +""" + +ida_lines.COLOR_REGFUNC +""" +Regular function. +""" + +ida_lines.COLOR_SELECTED +""" +Selected. +""" + +ida_lines.COLOR_UNKNOWN +""" +Unexplored byte. +""" + +ida_lines.SCOLOR_ADDR +""" +Hidden address mark. +""" + +ida_lines.SCOLOR_ALTOP +""" +Alternative operand. +""" + +ida_lines.SCOLOR_ASMDIR +""" +Assembler directive. +""" + +ida_lines.SCOLOR_AUTOCMT +""" +Automatic comment. +""" + +ida_lines.SCOLOR_BINPREF +""" +Binary line prefix bytes. +""" + +ida_lines.SCOLOR_CHAR +""" +Char constant in instruction. +""" + +ida_lines.SCOLOR_CNAME +""" +Regular code name. +""" + +ida_lines.SCOLOR_CODNAME +""" +Dummy code name. +""" + +ida_lines.SCOLOR_COLLAPSED +""" +Collapsed line. +""" + +ida_lines.SCOLOR_CREF +""" +Code reference. +""" + +ida_lines.SCOLOR_CREFTAIL +""" +Code reference to tail byte. +""" + +ida_lines.SCOLOR_DATNAME +""" +Dummy Data Name. +""" + +ida_lines.SCOLOR_DCHAR +""" +Char constant in data directive. +""" + +ida_lines.SCOLOR_DEFAULT +""" +Default. +""" + +ida_lines.SCOLOR_DEMNAME +""" +Demangled Name. +""" + +ida_lines.SCOLOR_DNAME +""" +Regular Data Name. +""" + +ida_lines.SCOLOR_DNUM +""" +Numeric constant in data directive. +""" + +ida_lines.SCOLOR_DREF +""" +Data reference. +""" + +ida_lines.SCOLOR_DREFTAIL +""" +Data reference to tail byte. +""" + +ida_lines.SCOLOR_DSTR +""" +String constant in data directive. +""" + +ida_lines.SCOLOR_ERROR +""" +Error or problem. +""" + +ida_lines.SCOLOR_ESC +""" +Escape character (Quote next character) +""" + +ida_lines.SCOLOR_EXTRA +""" +Extra line. +""" + +ida_lines.SCOLOR_HIDNAME +""" +Hidden name. +""" + +ida_lines.SCOLOR_IMPNAME +""" +Imported name. +""" + +ida_lines.SCOLOR_INSN +""" +Instruction. +""" + +ida_lines.SCOLOR_INV +""" +Escape character (Inverse colors) +""" + +ida_lines.SCOLOR_KEYWORD +""" +Keywords. +""" + +ida_lines.SCOLOR_LIBNAME +""" +Library function name. +""" + +ida_lines.SCOLOR_LOCNAME +""" +Local variable name. +""" + +ida_lines.SCOLOR_MACRO +""" +Macro. +""" + +ida_lines.SCOLOR_NUMBER +""" +Numeric constant in instruction. +""" + +ida_lines.SCOLOR_OFF +""" +Escape character (OFF) +""" + +ida_lines.SCOLOR_ON +""" +Escape character (ON) +""" + +ida_lines.SCOLOR_PREFIX +""" +Line prefix. +""" + +ida_lines.SCOLOR_REG +""" +Register name. +""" + +ida_lines.SCOLOR_REGCMT +""" +Regular comment. +""" + +ida_lines.SCOLOR_RPTCMT +""" +Repeatable comment (defined not here) +""" + +ida_lines.SCOLOR_SEGNAME +""" +Segment name. +""" + +ida_lines.SCOLOR_STRING +""" +String constant in instruction. +""" + +ida_lines.SCOLOR_SYMBOL +""" +Punctuation. +""" + +ida_lines.SCOLOR_UNAME +""" +Regular unknown name. +""" + +ida_lines.SCOLOR_UNKNAME +""" +Dummy unknown name. +""" + +ida_lines.SCOLOR_VOIDOP +""" +Void operand. +""" +=== ida_lines EPYDOC INJECTIONS END === +Help on function base2file in module ida_loader: + +base2file(*args) -> 'int' + base2file(fp, pos, ea1, ea2) -> int + + + Unload database to a binary file. This function works for wide byte + processors too. + + @param fp: pointer to file (C++: FILE *) + @param pos: position in the file (C++: qoff64_t) + @param ea1: range of source linear addresses (C++: ea_t) + @param ea2: range of source linear addresses (C++: ea_t) + @return: 1-ok(always), write error leads to immediate exit + +Help on function build_snapshot_tree in module ida_loader: + +build_snapshot_tree(*args) -> 'bool' + build_snapshot_tree(root) -> bool + + + Build the snapshot tree. + + @param root: snapshot root that will contain the snapshot tree + elements. (C++: snapshot_t *) + @return: success + +Help on function clr_database_flag in module ida_loader: + +clr_database_flag(*args) -> 'void' + clr_database_flag(dbfl) + +Help on function extract_module_from_archive in module ida_loader: + +extract_module_from_archive(*args) -> 'PyObject *' + extract_module_from_archive(fname, is_remote=False) -> PyObject * + + + Extract a module for an archive file. Parse an archive file, show the + list of modules to the user, allow him to select a module, extract the + selected module to a file (if the extract module is an archive, repeat + the process). This function can handle ZIP, AR, AIXAR, OMFLIB files. + The temporary file will be automatically deleted by IDA at the end. + + @param is_remote: is the input file remote? (C++: bool) + +Help on function file2base in module ida_loader: + +file2base(*args) -> 'int' + file2base(li, pos, ea1, ea2, patchable) -> int + + + Load portion of file into the database. This function will include + (ea1..ea2) into the addressing space of the program (make it enabled) + + @param li: pointer of input source (C++: linput_t *) + @param pos: position in the file (C++: qoff64_t) + @param ea1: range of destination linear addresses (C++: ea_t) + @param ea2: range of destination linear addresses (C++: ea_t) + @param patchable: should the kernel remember correspondence of file + offsets to linear addresses. (C++: int) + +Help on function find_plugin in module ida_loader: + +find_plugin(*args) -> 'plugin_t *' + find_plugin(name, load_if_needed=False) -> plugin_t * + + + Find a user-defined plugin and optionally load it. + + @param name: short plugin name without path and extension, or absolute + path to the file name (C++: const char *) + @param load_if_needed: if the plugin is not present in the memory, try + to load it (C++: bool) + @return: pointer to plugin description block + +Help on function flush_buffers in module ida_loader: + +flush_buffers(*args) -> 'int' + flush_buffers() -> int + + + Flush buffers to the disk. + +Help on function gen_exe_file in module ida_loader: + +gen_exe_file(*args) -> 'int' + gen_exe_file(fp) -> int + + + Generate an exe file (unload the database in binary form). + + @param fp (C++: FILE *) + @return: fp the output file handle. if fp == NULL then return: 1: + can generate an executable file 0: can't generate an + executable file + +Help on function gen_file in module ida_loader: + +gen_file(*args) -> 'int' + gen_file(otype, fp, ea1, ea2, flags) -> int + + + Generate an output file. 'OFILE_EXE' : + + @param otype: type of output file. (C++: ofile_type_t) + @param fp: the output file handle (C++: FILE *) + @param ea1: start address. For some file types this argument is + ignored (C++: ea_t) + @param ea2: end address. For some file types this argument is ignored + as usual in ida, the end address of the range is not + included (C++: ea_t) + @param flags: Generate file flags (C++: int) + @return: number of the generated lines. -1 if an error occurred + +Help on function get_basic_file_type in module ida_loader: + +get_basic_file_type(*args) -> 'filetype_t' + get_basic_file_type(li) -> filetype_t + + + Get the input file type. This function can recognize libraries and zip + files. + + @param li (C++: linput_t *) + +Help on function get_elf_debug_file_directory in module ida_loader: + +get_elf_debug_file_directory(*args) -> 'char const *' + get_elf_debug_file_directory() -> char const * + + + Get the value of the ELF_DEBUG_FILE_DIRECTORY configuration directive. + +Help on function get_file_type_name in module ida_loader: + +get_file_type_name(*args) -> 'size_t' + get_file_type_name() -> str + + + Get name of the current file type. The current file type is kept in + \inf{filetype}. + + @return: size of answer, this function always succeeds + +Help on function get_fileregion_ea in module ida_loader: + +get_fileregion_ea(*args) -> 'ea_t' + get_fileregion_ea(offset) -> ea_t + + + Get linear address which corresponds to the specified input file + offset. If can't be found, return 'BADADDR' + + @param offset (C++: qoff64_t) + +Help on function get_fileregion_offset in module ida_loader: + +get_fileregion_offset(*args) -> 'qoff64_t' + get_fileregion_offset(ea) -> qoff64_t + + + Get offset in the input file which corresponds to the given ea. If the + specified ea can't be mapped into the input file offset, return -1. + + @param ea (C++: ea_t) + +Help on function get_path in module ida_loader: + +get_path(*args) -> 'char const *' + get_path(pt) -> char const * + + + Get the file path + + @param pt: file path type Types of the file pathes (C++: path_type_t) + @return: file path, never returns NULL + +Help on function get_plugin_options in module ida_loader: + +get_plugin_options(*args) -> 'char const *' + get_plugin_options(plugin) -> char const * + + + Get plugin options from the command line. If the user has specified + the options in the -Oplugin_name:options format, them this function + will return the 'options' part of it The 'plugin' parameter should + denote the plugin name Returns NULL if there we no options specified + + @param plugin (C++: const char *) + +Help on class idp_desc_t in module ida_loader: + +class idp_desc_t(builtins.object) + | Proxy of C++ idp_desc_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idp_desc_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_idp_desc_t(...) + | delete_idp_desc_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | checked + | idp_desc_t_checked_get(self) -> bool + | + | family + | idp_desc_t_family_get(self) -> qstring * + | + | is_script + | idp_desc_t_is_script_get(self) -> bool + | + | mtime + | idp_desc_t_mtime_get(self) -> time_t + | + | names + | idp_desc_t_names_get(self) -> idp_names_t * + | + | path + | idp_desc_t_path_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class idp_name_t in module ida_loader: + +class idp_name_t(builtins.object) + | Proxy of C++ idp_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idp_name_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_idp_name_t(...) + | delete_idp_name_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hidden + | idp_name_t_hidden_get(self) -> bool + | + | lname + | idp_name_t_lname_get(self) -> qstring * + | + | sname + | idp_name_t_sname_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on function is_database_flag in module ida_loader: + +is_database_flag(*args) -> 'bool' + is_database_flag(dbfl) -> bool + + + Get the current database flag + + @param dbfl: flag Database flags (C++: uint32) + @return: the state of the flag (set or cleared) + +Help on function is_trusted_idb in module ida_loader: + +is_trusted_idb(*args) -> 'bool' + is_trusted_idb() -> bool + + + Is the database considered as trusted? + +Help on function load_and_run_plugin in module ida_loader: + +load_and_run_plugin(*args) -> 'bool' + load_and_run_plugin(name, arg) -> bool + + + Load & run a plugin. + + + @param name (C++: const char *) + @param arg (C++: size_t) + +Help on function load_binary_file in module ida_loader: + +load_binary_file(*args) -> 'bool' + load_binary_file(filename, li, _neflags, fileoff, basepara, binoff, nbytes) -> bool + + + Load a binary file into the database. This function usually is called + from ui. + + @param filename: the name of input file as is (if the input file is + from library, then this is the name from the library) + (C++: const char *) + @param li: loader input source (C++: linput_t *) + @param _neflags: Load file flags . For the first file, the flag + NEF_FIRST must be set. (C++: ushort) + @param fileoff: Offset in the input file (C++: qoff64_t) + @param basepara: Load address in paragraphs (C++: ea_t) + @param binoff: Load offset (load_address=(basepara<<4)+binoff) (C++: + ea_t) + @param nbytes: Number of bytes to load from the file. 0: up to the + end of the file (C++: uint64) + +Help on function load_ids_module in module ida_loader: + +load_ids_module(*args) -> 'int' + load_ids_module(fname) -> int + + + Load and apply IDS file. This function loads the specified IDS file + and applies it to the database. If the program imports functions from + a module with the same name as the name of the ids file being loaded, + then only functions from this module will be affected. Otherwise (i.e. + when the program does not import a module with this name) any function + in the program may be affected. + + @param fname: name of file to apply (C++: char *) + +Help on function load_plugin in module ida_loader: + +load_plugin(*args) -> 'PyObject *' + load_plugin(name) -> PyObject * + + + Loads a plugin + @return: + - None if plugin could not be loaded + - An opaque object representing the loaded plugin + +Help on class loader_t in module ida_loader: + +class loader_t(builtins.object) + | Proxy of C++ loader_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> loader_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_loader_t(...) + | delete_loader_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | loader_t_flags_get(self) -> uint32 + | + | thisown + | The membership flag + | + | version + | loader_t_version_get(self) -> uint32 + +Help on function mem2base in module ida_loader: + +mem2base(*args) -> 'int' + mem2base(py_mem, ea, fpos=-1) -> int + + + Load database from the memory. + @param mem: the buffer + @param ea: start linear addresses + @param fpos: position in the input file the data is taken from. + if == -1, then no file position correspond to the data. + @return: + - Returns zero if the passed buffer was not a string + - Otherwise 1 is returned + +Help on class plugin_info_t in module ida_loader: + +class plugin_info_t(builtins.object) + | Proxy of C++ plugin_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> plugin_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_plugin_info_t(...) + | delete_plugin_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | arg + | plugin_info_t_arg_get(self) -> size_t + | + | comment + | plugin_info_t_comment_get(self) -> char * + | + | dllmem + | plugin_info_t_dllmem_get(self) -> idadll_t * + | + | entry + | plugin_info_t_entry_get(self) -> plugin_t * + | + | flags + | plugin_info_t_flags_get(self) -> int + | + | hotkey + | plugin_info_t_hotkey_get(self) -> ushort + | + | name + | plugin_info_t_name_get(self) -> char * + | + | next + | plugin_info_t_next_get(self) -> plugin_info_t + | + | org_hotkey + | plugin_info_t_org_hotkey_get(self) -> ushort + | + | org_name + | plugin_info_t_org_name_get(self) -> char * + | + | path + | plugin_info_t_path_get(self) -> char * + | + | thisown + | The membership flag + +Help on function process_archive in module ida_loader: + +process_archive(*args) -> 'qstring *' + process_archive(temp_file, li, module_name, neflags, defmember, loader) -> str + + + Calls 'loader_t::process_archive()' For parameters and return value + description look at 'loader_t::process_archive()' . Additional + parameter: + + @param temp_file (C++: qstring *) + @param li (C++: linput_t *) + @param module_name (C++: qstring *) + @param neflags (C++: ushort *) + @param defmember (C++: const char *) + @param loader: pointer to load_info_t structure. (C++: const + load_info_t *) + +Help on class qvector_snapshotvec_t in module ida_loader: + +class qvector_snapshotvec_t(builtins.object) + | Proxy of C++ qvector< snapshot_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'snapshot_t *const &' + | __getitem__(self, i) -> snapshot_t + | + | __init__(self, *args) + | __init__(self) -> qvector_snapshotvec_t + | __init__(self, x) -> qvector_snapshotvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_qvector_snapshotvec_t(...) + | delete_qvector_snapshotvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'snapshot_t *const &' + | at(self, _idx) -> snapshot_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< snapshot_t * >::const_iterator' + | begin(self) -> qvector< snapshot_t * >::iterator + | begin(self) -> qvector< snapshot_t * >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< snapshot_t * >::const_iterator' + | end(self) -> qvector< snapshot_t * >::iterator + | end(self) -> qvector< snapshot_t * >::const_iterator + | + | erase(self, *args) -> 'qvector< snapshot_t * >::iterator' + | erase(self, it) -> qvector< snapshot_t * >::iterator + | erase(self, first, last) -> qvector< snapshot_t * >::iterator + | + | extract(self, *args) -> 'snapshot_t **' + | extract(self) -> snapshot_t ** + | + | find(self, *args) -> 'qvector< snapshot_t * >::const_iterator' + | find(self, x) -> qvector< snapshot_t * >::iterator + | find(self, x) -> qvector< snapshot_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< snapshot_t * >::iterator' + | insert(self, it, x) -> qvector< snapshot_t * >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'snapshot_t *&' + | push_back(self, x) + | push_back(self) -> snapshot_t *& + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function reload_file in module ida_loader: + +reload_file(*args) -> 'bool' + reload_file(file, is_remote) -> bool + + + Reload the input file. This function reloads the byte values from the + input file. It doesn't modify the segmentation, names, comments, etc. + + @param file: name of the input file. if file == NULL then returns: + 1: can reload the input file 0: can't reload the input + file (C++: const char *) + @param is_remote: is the file located on a remote computer with the + debugger server? (C++: bool) + @return: success + +Help on function run_plugin in module ida_loader: + +run_plugin(*args) -> 'bool' + run_plugin(plg, arg) -> bool + + + Runs a plugin + @param plg: A plugin object (returned by load_plugin()) + @return: Boolean + +Help on function save_database in module ida_loader: + +save_database(*args) -> 'bool' + save_database(outfile, flags, root=None, attr=None) -> bool + + + Save current database using a new file name.when both root and attr + are not NULL then the snapshot attributes will be updated, otherwise + the snapshot attributes will be inherited from the current database. + + @param outfile: output database file name (C++: const char *) + @param flags: Database flags (C++: uint32) + @param root: optional: snapshot tree root. (C++: const snapshot_t *) + @param attr: optional: snapshot attributes (C++: const snapshot_t *) + @return: success + +Help on function set_database_flag in module ida_loader: + +set_database_flag(*args) -> 'void' + set_database_flag(dbfl, cnd=True) + + + Set or clear database flag + + @param dbfl: flag Database flags (C++: uint32) + @param cnd: set if true or clear flag otherwise (C++: bool) + +Help on function set_path in module ida_loader: + +set_path(*args) -> 'void' + set_path(pt, path) + + + Set the file path + + @param pt: file path type Types of the file pathes (C++: path_type_t) + @param path: new file path, use NULL or empty string to clear the file + path (C++: const char *) + +Help on class snapshot_t in module ida_loader: + +class snapshot_t(builtins.object) + | Proxy of C++ snapshot_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> snapshot_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_snapshot_t(...) + | delete_snapshot_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | children + | snapshot_t_children_get(self) -> qvector_snapshotvec_t + | + | desc + | snapshot_t_desc_get(self) -> char [128] + | + | filename + | snapshot_t_filename_get(self) -> char [QMAXPATH] + | + | flags + | snapshot_t_flags_get(self) -> uint16 + | + | id + | snapshot_t_id_get(self) -> qtime64_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +=== ida_loader EPYDOC INJECTIONS === +ida_loader.ACCEPT_ARCHIVE +""" +Specify that a file format is served by archive loader See +'loader_t::accept_file' +""" + +ida_loader.ACCEPT_CONTINUE +""" +Specify that the function must be called another time See +'loader_t::accept_file' +""" + +ida_loader.ACCEPT_FIRST +""" +Specify that a file format should be place first in "load file" dialog +box. See 'loader_t::accept_file' +""" + +ida_loader.DBFL_BAK +""" +create backup file (if !DBFL_KILL) +""" + +ida_loader.DBFL_COMP +""" +collect garbage +""" + +ida_loader.DBFL_KILL +""" +delete unpacked database +""" + +ida_loader.DBFL_TEMP +""" +temporary database +""" + +ida_loader.FILEREG_NOTPATCHABLE +""" +form in the file. + +the data is kept in some encoded +""" + +ida_loader.FILEREG_PATCHABLE +""" +means that the input file may be patched (i.e. no compression, no +iterated data, etc) +""" + +ida_loader.GENFLG_ASMINC +""" + 'OFILE_ASM' , 'OFILE_LST' : gen information only about types +""" + +ida_loader.GENFLG_ASMTYPE +""" + 'OFILE_ASM' , 'OFILE_LST' : gen information about types too +""" + +ida_loader.GENFLG_GENHTML +""" + 'OFILE_ASM' , 'OFILE_LST' : generate html ( 'ui_genfile_callback' +will be used) +""" + +ida_loader.GENFLG_IDCTYPE +""" + 'OFILE_IDC' : gen only information about types +""" + +ida_loader.GENFLG_MAPDMNG +""" + 'OFILE_MAP' : demangle names +""" + +ida_loader.GENFLG_MAPLOC +""" + 'OFILE_MAP' : include local names +""" + +ida_loader.GENFLG_MAPNAME +""" + 'OFILE_MAP' : include dummy names +""" + +ida_loader.GENFLG_MAPSEG +""" + 'OFILE_MAP' : generate map of segments +""" + +ida_loader.LDRF_RELOAD +""" +loader recognizes 'NEF_RELOAD' flag +""" + +ida_loader.LDRF_REQ_PROC +""" +Requires a processor to be set. if this bit is not set, load_file() +must call set_processor_type(..., SETPROC_LOADER) +""" + +ida_loader.MAX_DATABASE_DESCRIPTION +""" +Maximum database snapshot description length. +""" + +ida_loader.NEF_CODE +""" +load as a code segment + +for 'load_binary_file()' : +""" + +ida_loader.NEF_FILL +""" +Fill segment gaps. +""" + +ida_loader.NEF_FIRST +""" +into the database. + +This is the first file loaded +""" + +ida_loader.NEF_FLAT +""" +Autocreate FLAT group (PE) +""" + +ida_loader.NEF_IMPS +""" +Create import segment. +""" + +ida_loader.NEF_LALL +""" +Load all segments without questions. +""" + +ida_loader.NEF_LOPT +""" +Display additional loader options dialog. +""" + +ida_loader.NEF_MAN +""" +Manual load. +""" + +ida_loader.NEF_MINI +""" +Create mini database (do not copy segment bytes from the input file; +use only the file header metadata) +""" + +ida_loader.NEF_NAME +""" +Rename entries. +""" + +ida_loader.NEF_RELOAD +""" +reload the file at the same place: - don't create segmentsdon't create +fixup infodon't import segmentsetc load only the bytes into the base. +a loader should have 'LDRF_RELOAD' bit set +""" + +ida_loader.NEF_RSCS +""" +Load resources. +""" + +ida_loader.NEF_SEGS +""" +Create segments. +""" + +ida_loader.PLUGIN_DLL +""" +Pattern to find plugin files. +""" + +ida_loader.SSF_AUTOMATIC +""" +automatic snapshot +""" + +ida_loader.SSUF_DESC +""" +Update the description. +""" + +ida_loader.SSUF_FLAGS +""" +Update the flags. +""" + +ida_loader.SSUF_PATH +""" +Update the path. +""" +=== ida_loader EPYDOC INJECTIONS END === +Help on function apply_metadata in module ida_lumina: + +apply_metadata(*args) -> 'void' + apply_metadata(ea, fi, flags=0) + +Help on function backup_metadata in module ida_lumina: + +backup_metadata(*args) -> 'bool' + backup_metadata(ea) -> bool + +Help on function calc_func_metadata in module ida_lumina: + +calc_func_metadata(*args) -> 'md5_t *' + calc_func_metadata(out_fi, pfn, append_metadata=None) -> asize_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 + +Help on function diff_metadata in module ida_lumina: + +diff_metadata(*args) -> 'bool' + diff_metadata(handler, left, right, flags=0) -> bool + +Help on function ea_to_ea64 in module ida_lumina: + +ea_to_ea64(*args) -> 'ea64_t' + ea_to_ea64(ea) -> ea64_t + +Help on class extra_cmt_t in module ida_lumina: + +class extra_cmt_t(insn_site_t) + | Proxy of C++ extra_cmt_t class. + | + | Method resolution order: + | extra_cmt_t + | insn_site_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> extra_cmt_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_extra_cmt_t(...) + | delete_extra_cmt_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | next + | extra_cmt_t_next_get(self) -> qstring * + | + | prev + | extra_cmt_t_prev_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from insn_site_t: + | + | toea(self, *args) -> 'ea_t' + | toea(self, pfn) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from insn_site_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fchunk_nr + | insn_site_t_fchunk_nr_get(self) -> uint32 + | + | fchunk_off + | insn_site_t_fchunk_off_get(self) -> uint32 + +Help on class extra_cmts_t in module ida_lumina: + +class extra_cmts_t(builtins.object) + | Proxy of C++ qvector< extra_cmt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'extra_cmt_t const &' + | __getitem__(self, i) -> extra_cmt_t + | + | __init__(self, *args) + | __init__(self) -> extra_cmts_t + | __init__(self, x) -> extra_cmts_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_extra_cmts_t(...) + | delete_extra_cmts_t(self) + | + | at(self, *args) -> 'extra_cmt_t const &' + | at(self, _idx) -> extra_cmt_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< extra_cmt_t >::const_iterator' + | begin(self) -> extra_cmt_t + | begin(self) -> extra_cmt_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< extra_cmt_t >::const_iterator' + | end(self) -> extra_cmt_t + | end(self) -> extra_cmt_t + | + | erase(self, *args) -> 'qvector< extra_cmt_t >::iterator' + | erase(self, it) -> extra_cmt_t + | erase(self, first, last) -> extra_cmt_t + | + | extract(self, *args) -> 'extra_cmt_t *' + | extract(self) -> extra_cmt_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=extra_cmt_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< extra_cmt_t >::iterator' + | insert(self, it, x) -> extra_cmt_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'extra_cmt_t &' + | push_back(self, x) + | push_back(self) -> extra_cmt_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function extract_extra_cmts_from_metadata in module ida_lumina: + +extract_extra_cmts_from_metadata(*args) -> 'void' + extract_extra_cmts_from_metadata(out, ptr) + +Help on function extract_frame_desc_from_metadata in module ida_lumina: + +extract_frame_desc_from_metadata(*args) -> 'void' + extract_frame_desc_from_metadata(out, ptr) + +Help on function extract_insn_cmts_from_metadata in module ida_lumina: + +extract_insn_cmts_from_metadata(*args) -> 'void' + extract_insn_cmts_from_metadata(out, ptr) + +Help on function extract_insn_opreprs_from_metadata in module ida_lumina: + +extract_insn_opreprs_from_metadata(*args) -> 'void' + extract_insn_opreprs_from_metadata(out, ptr) + +Help on function extract_type_from_metadata in module ida_lumina: + +extract_type_from_metadata(*args) -> 'bool' + extract_type_from_metadata(out, _in) -> bool + +Help on function extract_user_stkpnts_from_metadata in module ida_lumina: + +extract_user_stkpnts_from_metadata(*args) -> 'void' + extract_user_stkpnts_from_metadata(out, ptr) + +Help on class frame_desc_t in module ida_lumina: + +class frame_desc_t(builtins.object) + | Proxy of C++ frame_desc_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> frame_desc_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_frame_desc_t(...) + | delete_frame_desc_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argsize + | frame_desc_t_argsize_get(self) -> asize_t + | + | frregs + | frame_desc_t_frregs_get(self) -> ushort + | + | frsize + | frame_desc_t_frsize_get(self) -> sval_t + | + | members + | frame_desc_t_members_get(self) -> frame_mems_t + | + | thisown + | The membership flag + +Help on class frame_mem_t in module ida_lumina: + +class frame_mem_t(builtins.object) + | Proxy of C++ frame_mem_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> frame_mem_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_frame_mem_t(...) + | delete_frame_mem_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | frame_mem_t_cmt_get(self) -> qstring * + | + | info + | frame_mem_t_info_get(self) -> oprepr_t + | + | name + | frame_mem_t_name_get(self) -> qstring * + | + | nbytes + | frame_mem_t_nbytes_get(self) -> asize_t + | + | offset + | frame_mem_t_offset_get(self) -> ea64_t + | + | rptcmt + | frame_mem_t_rptcmt_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | frame_mem_t_type_get(self) -> serialized_tinfo + +Help on class frame_mems_t in module ida_lumina: + +class frame_mems_t(builtins.object) + | Proxy of C++ qvector< frame_mem_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'frame_mem_t const &' + | __getitem__(self, i) -> frame_mem_t + | + | __init__(self, *args) + | __init__(self) -> frame_mems_t + | __init__(self, x) -> frame_mems_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_frame_mems_t(...) + | delete_frame_mems_t(self) + | + | at(self, *args) -> 'frame_mem_t const &' + | at(self, _idx) -> frame_mem_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< frame_mem_t >::const_iterator' + | begin(self) -> frame_mem_t + | begin(self) -> frame_mem_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< frame_mem_t >::const_iterator' + | end(self) -> frame_mem_t + | end(self) -> frame_mem_t + | + | erase(self, *args) -> 'qvector< frame_mem_t >::iterator' + | erase(self, it) -> frame_mem_t + | erase(self, first, last) -> frame_mem_t + | + | extract(self, *args) -> 'frame_mem_t *' + | extract(self) -> frame_mem_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=frame_mem_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< frame_mem_t >::iterator' + | insert(self, it, x) -> frame_mem_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'frame_mem_t &' + | push_back(self, x) + | push_back(self) -> frame_mem_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class func_info_and_frequency_t in module ida_lumina: + +class func_info_and_frequency_t(func_info_t) + | Proxy of C++ func_info_and_frequency_t class. + | + | Method resolution order: + | func_info_and_frequency_t + | func_info_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_info_and_frequency_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_info_and_frequency_t(...) + | delete_func_info_and_frequency_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | frequency + | func_info_and_frequency_t_frequency_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_t_name_get(self) -> qstring * + | + | size + | func_info_t_size_get(self) -> uint32 + +Help on class func_info_and_frequency_vec_t in module ida_lumina: + +class func_info_and_frequency_vec_t(builtins.object) + | Proxy of C++ qvector< func_info_and_frequency_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'func_info_and_frequency_t const &' + | __getitem__(self, i) -> func_info_and_frequency_t + | + | __init__(self, *args) + | __init__(self) -> func_info_and_frequency_vec_t + | __init__(self, x) -> func_info_and_frequency_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_func_info_and_frequency_vec_t(...) + | delete_func_info_and_frequency_vec_t(self) + | + | at(self, *args) -> 'func_info_and_frequency_t const &' + | at(self, _idx) -> func_info_and_frequency_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< func_info_and_frequency_t >::const_iterator' + | begin(self) -> func_info_and_frequency_t + | begin(self) -> func_info_and_frequency_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< func_info_and_frequency_t >::const_iterator' + | end(self) -> func_info_and_frequency_t + | end(self) -> func_info_and_frequency_t + | + | erase(self, *args) -> 'qvector< func_info_and_frequency_t >::iterator' + | erase(self, it) -> func_info_and_frequency_t + | erase(self, first, last) -> func_info_and_frequency_t + | + | extract(self, *args) -> 'func_info_and_frequency_t *' + | extract(self) -> func_info_and_frequency_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=func_info_and_frequency_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< func_info_and_frequency_t >::iterator' + | insert(self, it, x) -> func_info_and_frequency_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'func_info_and_frequency_t &' + | push_back(self, x) + | push_back(self) -> func_info_and_frequency_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class func_info_and_pattern_t in module ida_lumina: + +class func_info_and_pattern_t(func_info_t) + | Proxy of C++ func_info_and_pattern_t class. + | + | Method resolution order: + | func_info_and_pattern_t + | func_info_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_info_and_pattern_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_info_and_pattern_t(...) + | delete_func_info_and_pattern_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | pattern_id + | func_info_and_pattern_t_pattern_id_get(self) -> pattern_id_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_t_name_get(self) -> qstring * + | + | size + | func_info_t_size_get(self) -> uint32 + +Help on class func_info_and_pattern_vec_t in module ida_lumina: + +class func_info_and_pattern_vec_t(builtins.object) + | Proxy of C++ qvector< func_info_and_pattern_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'func_info_and_pattern_t const &' + | __getitem__(self, i) -> func_info_and_pattern_t + | + | __init__(self, *args) + | __init__(self) -> func_info_and_pattern_vec_t + | __init__(self, x) -> func_info_and_pattern_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_func_info_and_pattern_vec_t(...) + | delete_func_info_and_pattern_vec_t(self) + | + | at(self, *args) -> 'func_info_and_pattern_t const &' + | at(self, _idx) -> func_info_and_pattern_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< func_info_and_pattern_t >::const_iterator' + | begin(self) -> func_info_and_pattern_t + | begin(self) -> func_info_and_pattern_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< func_info_and_pattern_t >::const_iterator' + | end(self) -> func_info_and_pattern_t + | end(self) -> func_info_and_pattern_t + | + | erase(self, *args) -> 'qvector< func_info_and_pattern_t >::iterator' + | erase(self, it) -> func_info_and_pattern_t + | erase(self, first, last) -> func_info_and_pattern_t + | + | extract(self, *args) -> 'func_info_and_pattern_t *' + | extract(self) -> func_info_and_pattern_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=func_info_and_pattern_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< func_info_and_pattern_t >::iterator' + | insert(self, it, x) -> func_info_and_pattern_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'func_info_and_pattern_t &' + | push_back(self, x) + | push_back(self) -> func_info_and_pattern_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class func_info_base_t in module ida_lumina: + +class func_info_base_t(builtins.object) + | Proxy of C++ func_info_base_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_info_base_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_info_base_t(...) + | delete_func_info_base_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_base_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_base_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class func_info_pattern_and_frequency_t in module ida_lumina: + +class func_info_pattern_and_frequency_t(func_info_and_pattern_t) + | Proxy of C++ func_info_pattern_and_frequency_t class. + | + | Method resolution order: + | func_info_pattern_and_frequency_t + | func_info_and_pattern_t + | func_info_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_info_pattern_and_frequency_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_info_pattern_and_frequency_t(...) + | delete_func_info_pattern_and_frequency_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | frequency + | func_info_pattern_and_frequency_t_frequency_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_and_pattern_t: + | + | pattern_id + | func_info_and_pattern_t_pattern_id_get(self) -> pattern_id_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_t_name_get(self) -> qstring * + | + | size + | func_info_t_size_get(self) -> uint32 + +Help on class func_info_pattern_and_frequency_vec_t in module ida_lumina: + +class func_info_pattern_and_frequency_vec_t(builtins.object) + | Proxy of C++ qvector< func_info_pattern_and_frequency_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'func_info_pattern_and_frequency_t const &' + | __getitem__(self, i) -> func_info_pattern_and_frequency_t + | + | __init__(self, *args) + | __init__(self) -> func_info_pattern_and_frequency_vec_t + | __init__(self, x) -> func_info_pattern_and_frequency_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_func_info_pattern_and_frequency_vec_t(...) + | delete_func_info_pattern_and_frequency_vec_t(self) + | + | at(self, *args) -> 'func_info_pattern_and_frequency_t const &' + | at(self, _idx) -> func_info_pattern_and_frequency_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< func_info_pattern_and_frequency_t >::const_iterator' + | begin(self) -> func_info_pattern_and_frequency_t + | begin(self) -> func_info_pattern_and_frequency_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< func_info_pattern_and_frequency_t >::const_iterator' + | end(self) -> func_info_pattern_and_frequency_t + | end(self) -> func_info_pattern_and_frequency_t + | + | erase(self, *args) -> 'qvector< func_info_pattern_and_frequency_t >::iterator' + | erase(self, it) -> func_info_pattern_and_frequency_t + | erase(self, first, last) -> func_info_pattern_and_frequency_t + | + | extract(self, *args) -> 'func_info_pattern_and_frequency_t *' + | extract(self) -> func_info_pattern_and_frequency_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=func_info_pattern_and_frequency_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< func_info_pattern_and_frequency_t >::iterator' + | insert(self, it, x) -> func_info_pattern_and_frequency_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'func_info_pattern_and_frequency_t &' + | push_back(self, x) + | push_back(self) -> func_info_pattern_and_frequency_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class func_info_t in module ida_lumina: + +class func_info_t(builtins.object) + | Proxy of C++ func_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_info_t(...) + | delete_func_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_t_name_get(self) -> qstring * + | + | size + | func_info_t_size_get(self) -> uint32 + | + | thisown + | The membership flag + +Help on class func_info_vec_t in module ida_lumina: + +class func_info_vec_t(builtins.object) + | Proxy of C++ qvector< func_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'func_info_t const &' + | __getitem__(self, i) -> func_info_t + | + | __init__(self, *args) + | __init__(self) -> func_info_vec_t + | __init__(self, x) -> func_info_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_func_info_vec_t(...) + | delete_func_info_vec_t(self) + | + | at(self, *args) -> 'func_info_t const &' + | at(self, _idx) -> func_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< func_info_t >::const_iterator' + | begin(self) -> func_info_t + | begin(self) -> func_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< func_info_t >::const_iterator' + | end(self) -> func_info_t + | end(self) -> func_info_t + | + | erase(self, *args) -> 'qvector< func_info_t >::iterator' + | erase(self, it) -> func_info_t + | erase(self, first, last) -> func_info_t + | + | extract(self, *args) -> 'func_info_t *' + | extract(self) -> func_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=func_info_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< func_info_t >::iterator' + | insert(self, it, x) -> func_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'func_info_t &' + | push_back(self, x) + | push_back(self) -> func_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class func_md_diff_handler_t in module ida_lumina: + +class func_md_diff_handler_t(builtins.object) + | Proxy of C++ func_md_diff_handler_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> func_md_diff_handler_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_md_diff_handler_t(...) + | delete_func_md_diff_handler_t(self) + | + | on_comment_changed(self, *args) -> 'void' + | on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) + | + | on_extra_comment_changed(self, *args) -> 'void' + | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) + | + | on_frame_member_changed(self, *args) -> 'void' + | on_frame_member_changed(self, offset, l, r) + | + | on_function_comment_changed(self, *args) -> 'void' + | on_function_comment_changed(self, l, r, rep) + | + | on_insn_ops_repr_changed(self, *args) -> 'void' + | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) + | + | on_name_changed(self, *args) -> 'void' + | on_name_changed(self, l, r) + | + | on_proto_changed(self, *args) -> 'void' + | on_proto_changed(self, l, r) + | + | on_score_changed(self, *args) -> 'void' + | on_score_changed(self, l, r) + | + | on_user_stkpnt_changed(self, *args) -> 'void' + | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) + | + | ---------------------------------------------------------------------- + | 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 + +Help on function get_lumina_rpc_packet_t_index_from_base in module ida_lumina: + +get_lumina_rpc_packet_t_index_from_base(*args) -> 'uchar' + get_lumina_rpc_packet_t_index_from_base(code) -> uchar + +Help on function get_server_connection in module ida_lumina: + +get_server_connection(*args) -> 'lumina_client_t *' + get_server_connection() -> lumina_client_t + +Help on function has_backup_metadata in module ida_lumina: + +has_backup_metadata(*args) -> 'bool' + has_backup_metadata(ea) -> bool + +Help on class history_entries_helper_t in module ida_lumina: + +class history_entries_helper_t(builtins.object) + | Proxy of C++ history_entries_helper_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _r) -> history_entries_helper_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_history_entries_helper_t(...) + | delete_history_entries_helper_t(self) + | + | next_entry(self, *args) -> 'change_desc_base_t const &' + | next_entry(self, _from) -> change_desc_base_t const & + | + | next_entry_index(self, *args) -> 'bool' + | next_entry_index(self, out_index, _from) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | res + | history_entries_helper_t_res_get(self) -> pkt_show_entries_result_t const & + | + | thisown + | The membership flag + +Help on class input_file_t in module ida_lumina: + +class input_file_t(builtins.object) + | Proxy of C++ input_file_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> input_file_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_input_file_t(...) + | delete_input_file_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | md5 + | input_file_t_md5_get(self) -> md5_t * + | + | path + | input_file_t_path_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class insn_cmt_t in module ida_lumina: + +class insn_cmt_t(insn_site_t) + | Proxy of C++ insn_cmt_t class. + | + | Method resolution order: + | insn_cmt_t + | insn_site_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> insn_cmt_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_insn_cmt_t(...) + | delete_insn_cmt_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cmt + | insn_cmt_t_cmt_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from insn_site_t: + | + | toea(self, *args) -> 'ea_t' + | toea(self, pfn) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from insn_site_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fchunk_nr + | insn_site_t_fchunk_nr_get(self) -> uint32 + | + | fchunk_off + | insn_site_t_fchunk_off_get(self) -> uint32 + +Help on class insn_cmts_t in module ida_lumina: + +class insn_cmts_t(builtins.object) + | Proxy of C++ qvector< insn_cmt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'insn_cmt_t const &' + | __getitem__(self, i) -> insn_cmt_t + | + | __init__(self, *args) + | __init__(self) -> insn_cmts_t + | __init__(self, x) -> insn_cmts_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_insn_cmts_t(...) + | delete_insn_cmts_t(self) + | + | at(self, *args) -> 'insn_cmt_t const &' + | at(self, _idx) -> insn_cmt_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< insn_cmt_t >::const_iterator' + | begin(self) -> insn_cmt_t + | begin(self) -> insn_cmt_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< insn_cmt_t >::const_iterator' + | end(self) -> insn_cmt_t + | end(self) -> insn_cmt_t + | + | erase(self, *args) -> 'qvector< insn_cmt_t >::iterator' + | erase(self, it) -> insn_cmt_t + | erase(self, first, last) -> insn_cmt_t + | + | extract(self, *args) -> 'insn_cmt_t *' + | extract(self) -> insn_cmt_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=insn_cmt_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< insn_cmt_t >::iterator' + | insert(self, it, x) -> insn_cmt_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'insn_cmt_t &' + | push_back(self, x) + | push_back(self) -> insn_cmt_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class insn_ops_repr_t in module ida_lumina: + +class insn_ops_repr_t(insn_site_t) + | Proxy of C++ insn_ops_repr_t class. + | + | Method resolution order: + | insn_ops_repr_t + | insn_site_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> insn_ops_repr_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_insn_ops_repr_t(...) + | delete_insn_ops_repr_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | insn_ops_repr_t_flags_get(self) -> flags_t + | + | op0 + | insn_ops_repr_t_op0_get(self) -> opinfo_t + | + | op1 + | insn_ops_repr_t_op1_get(self) -> opinfo_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from insn_site_t: + | + | toea(self, *args) -> 'ea_t' + | toea(self, pfn) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from insn_site_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fchunk_nr + | insn_site_t_fchunk_nr_get(self) -> uint32 + | + | fchunk_off + | insn_site_t_fchunk_off_get(self) -> uint32 + +Help on class insn_ops_reprs_t in module ida_lumina: + +class insn_ops_reprs_t(builtins.object) + | Proxy of C++ qvector< insn_ops_repr_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'insn_ops_repr_t const &' + | __getitem__(self, i) -> insn_ops_repr_t + | + | __init__(self, *args) + | __init__(self) -> insn_ops_reprs_t + | __init__(self, x) -> insn_ops_reprs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_insn_ops_reprs_t(...) + | delete_insn_ops_reprs_t(self) + | + | at(self, *args) -> 'insn_ops_repr_t const &' + | at(self, _idx) -> insn_ops_repr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< insn_ops_repr_t >::const_iterator' + | begin(self) -> insn_ops_repr_t + | begin(self) -> insn_ops_repr_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< insn_ops_repr_t >::const_iterator' + | end(self) -> insn_ops_repr_t + | end(self) -> insn_ops_repr_t + | + | erase(self, *args) -> 'qvector< insn_ops_repr_t >::iterator' + | erase(self, it) -> insn_ops_repr_t + | erase(self, first, last) -> insn_ops_repr_t + | + | extract(self, *args) -> 'insn_ops_repr_t *' + | extract(self) -> insn_ops_repr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=insn_ops_repr_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< insn_ops_repr_t >::iterator' + | insert(self, it, x) -> insn_ops_repr_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'insn_ops_repr_t &' + | push_back(self, x) + | push_back(self) -> insn_ops_repr_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class insn_site_t in module ida_lumina: + +class insn_site_t(builtins.object) + | Proxy of C++ insn_site_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> insn_site_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_insn_site_t(...) + | delete_insn_site_t(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self, pfn) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fchunk_nr + | insn_site_t_fchunk_nr_get(self) -> uint32 + | + | fchunk_off + | insn_site_t_fchunk_off_get(self) -> uint32 + | + | thisown + | The membership flag + +Help on class lumina_client_t in module ida_lumina: + +class lumina_client_t(builtins.object) + | Proxy of C++ lumina_client_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lumina_client_t(...) + | delete_lumina_client_t(self) + | + | get_pop(self, *args) -> 'pkt_get_pop_result_t *' + | get_pop(self, nresults=10) -> pkt_get_pop_result_t + | + | is_pattern_id(self, *args) -> 'bool' + | is_pattern_id(self, pid, md5) -> bool + | + | pull_md(self, *args) -> 'pkt_pull_md_result_t *' + | pull_md(self, pattern_ids, pull_md_flags=0) -> pkt_pull_md_result_t + | pull_md(self, funcs, pull_md_flags=0) -> pkt_pull_md_result_t + | + | push_md(self, *args) -> 'bool' + | push_md(self, result, opts, append_metadata=None, flags=0) -> bool + | + | set_pattern_id_md5(self, *args) -> 'void' + | set_pattern_id_md5(self, out, md5) + | + | ---------------------------------------------------------------------- + | 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 + +Help on class lumina_op_res_vec_t in module ida_lumina: + +class lumina_op_res_vec_t(builtins.object) + | Proxy of C++ qvector< lumina_op_res_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'lumina_op_res_t const &' + | __getitem__(self, i) -> lumina_op_res_t const & + | + | __init__(self, *args) + | __init__(self) -> lumina_op_res_vec_t + | __init__(self, x) -> lumina_op_res_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_lumina_op_res_vec_t(...) + | delete_lumina_op_res_vec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'lumina_op_res_t const &' + | at(self, _idx) -> lumina_op_res_t const & + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< lumina_op_res_t >::const_iterator' + | begin(self) -> qvector< lumina_op_res_t >::iterator + | begin(self) -> qvector< lumina_op_res_t >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< lumina_op_res_t >::const_iterator' + | end(self) -> qvector< lumina_op_res_t >::iterator + | end(self) -> qvector< lumina_op_res_t >::const_iterator + | + | erase(self, *args) -> 'qvector< lumina_op_res_t >::iterator' + | erase(self, it) -> qvector< lumina_op_res_t >::iterator + | erase(self, first, last) -> qvector< lumina_op_res_t >::iterator + | + | extract(self, *args) -> 'lumina_op_res_t *' + | extract(self) -> lumina_op_res_t * + | + | find(self, *args) -> 'qvector< lumina_op_res_t >::const_iterator' + | find(self, x) -> qvector< lumina_op_res_t >::iterator + | find(self, x) -> qvector< lumina_op_res_t >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=lumina_op_res_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< lumina_op_res_t >::iterator' + | insert(self, it, x) -> qvector< lumina_op_res_t >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'lumina_op_res_t &' + | push_back(self, x) + | push_back(self) -> lumina_op_res_t & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class md_type_parts_t in module ida_lumina: + +class md_type_parts_t(builtins.object) + | Proxy of C++ md_type_parts_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> md_type_parts_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_md_type_parts_t(...) + | delete_md_type_parts_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fields + | md_type_parts_t_fields_get(self) -> qtype * + | + | thisown + | The membership flag + | + | type + | md_type_parts_t_type_get(self) -> qtype * + | + | userti + | md_type_parts_t_userti_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class metadata_iterator_t in module ida_lumina: + +class metadata_iterator_t(builtins.object) + | Proxy of C++ metadata_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _md) -> metadata_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_metadata_iterator_t(...) + | delete_metadata_iterator_t(self) + | + | data_end(self, *args) -> 'uchar const *' + | data_end(self) -> uchar const * + | + | next(self, *args) -> 'bool' + | next(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | metadata_iterator_t_data_get(self) -> uchar const * + | + | key + | metadata_iterator_t_key_get(self) -> mdkey_t + | + | size + | metadata_iterator_t_size_get(self) -> size_t + | + | thisown + | The membership flag + +Help on function new_packet in module ida_lumina: + +new_packet(*args) -> 'rpc_packet_data_t *' + new_packet(code, ptr=None, len=0, version=-1) -> rpc_packet_data_t * + +Help on class oprepr_t in module ida_lumina: + +class oprepr_t(builtins.object) + | Proxy of C++ oprepr_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> oprepr_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_oprepr_t(...) + | delete_oprepr_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | oprepr_t_flags_get(self) -> flags_t + | + | opinfo + | oprepr_t_opinfo_get(self) -> opinfo_t + | + | thisown + | The membership flag + +Help on class pattern_id_t in module ida_lumina: + +class pattern_id_t(builtins.object) + | Proxy of C++ pattern_id_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pattern_id_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pattern_id_t(...) + | delete_pattern_id_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | pattern_id_t_data_get(self) -> bytevec_t * + | + | thisown + | The membership flag + | + | type + | pattern_id_t_type_get(self) -> pattern_type_t + +Help on class pkt_clean_db_t in module ida_lumina: + +class pkt_clean_db_t(builtins.object) + | Proxy of C++ pkt_clean_db_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_clean_db_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_clean_db_t(...) + | delete_pkt_clean_db_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 + +Help on class pkt_debugctl_t in module ida_lumina: + +class pkt_debugctl_t(builtins.object) + | Proxy of C++ pkt_debugctl_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_debugctl_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_debugctl_t(...) + | delete_pkt_debugctl_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | args + | pkt_debugctl_t_args_get(self) -> qstrvec_t * + | + | thisown + | The membership flag + +Help on class pkt_dump_md_result_t in module ida_lumina: + +class pkt_dump_md_result_t(builtins.object) + | Proxy of C++ pkt_dump_md_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_dump_md_result_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_dump_md_result_t(...) + | delete_pkt_dump_md_result_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | contents + | pkt_dump_md_result_t_contents_get(self) -> func_info_pattern_and_frequency_vec_t + | + | thisown + | The membership flag + +Help on class pkt_dump_md_t in module ida_lumina: + +class pkt_dump_md_t(builtins.object) + | Proxy of C++ pkt_dump_md_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_dump_md_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_dump_md_t(...) + | delete_pkt_dump_md_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | sort + | pkt_dump_md_t_sort_get(self) -> dump_md_sort_type_t + | + | thisown + | The membership flag + +Help on class pkt_get_pop_result_t in module ida_lumina: + +class pkt_get_pop_result_t(builtins.object) + | Proxy of C++ pkt_get_pop_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_get_pop_result_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_get_pop_result_t(...) + | delete_pkt_get_pop_result_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | results + | pkt_get_pop_result_t_results_get(self) -> pop_fun_vec_t * + | + | thisown + | The membership flag + +Help on class pkt_get_pop_t in module ida_lumina: + +class pkt_get_pop_t(builtins.object) + | Proxy of C++ pkt_get_pop_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_get_pop_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_get_pop_t(...) + | delete_pkt_get_pop_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | nresults + | pkt_get_pop_t_nresults_get(self) -> uint32 + | + | thisown + | The membership flag + +Help on class pkt_helo_t in module ida_lumina: + +class pkt_helo_t(builtins.object) + | Proxy of C++ pkt_helo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_helo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_helo_t(...) + | delete_pkt_helo_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | client_version + | pkt_helo_t_client_version_get(self) -> int + | + | key + | pkt_helo_t_key_get(self) -> bytevec_t * + | + | license_id + | pkt_helo_t_license_id_get(self) -> uchar [6] + | + | record_conv + | pkt_helo_t_record_conv_get(self) -> bool + | + | thisown + | The membership flag + +Help on class pkt_pull_md_result_t in module ida_lumina: + +class pkt_pull_md_result_t(builtins.object) + | Proxy of C++ pkt_pull_md_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_pull_md_result_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_pull_md_result_t(...) + | delete_pkt_pull_md_result_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | codes + | pkt_pull_md_result_t_codes_get(self) -> lumina_op_res_vec_t + | + | results + | pkt_pull_md_result_t_results_get(self) -> func_info_and_frequency_vec_t + | + | thisown + | The membership flag + +Help on class pkt_pull_md_t in module ida_lumina: + +class pkt_pull_md_t(builtins.object) + | Proxy of C++ pkt_pull_md_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_pull_md_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_pull_md_t(...) + | delete_pkt_pull_md_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | pkt_pull_md_t_flags_get(self) -> uint32 + | + | keys + | pkt_pull_md_t_keys_get(self) -> mdkey_vec_t * + | + | pattern_ids + | pkt_pull_md_t_pattern_ids_get(self) -> pattern_ids_t * + | + | thisown + | The membership flag + +Help on class pkt_push_md_result_t in module ida_lumina: + +class pkt_push_md_result_t(builtins.object) + | Proxy of C++ pkt_push_md_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_push_md_result_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_push_md_result_t(...) + | delete_pkt_push_md_result_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | codes + | pkt_push_md_result_t_codes_get(self) -> lumina_op_res_vec_t + | + | thisown + | The membership flag + +Help on class pkt_push_md_t in module ida_lumina: + +class pkt_push_md_t(builtins.object) + | Proxy of C++ pkt_push_md_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_push_md_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_push_md_t(...) + | delete_pkt_push_md_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | contents + | pkt_push_md_t_contents_get(self) -> func_info_and_pattern_vec_t + | + | ea64s + | pkt_push_md_t_ea64s_get(self) -> ea64vec_t * + | + | flags + | pkt_push_md_t_flags_get(self) -> uint32 + | + | hostname + | pkt_push_md_t_hostname_get(self) -> qstring * + | + | idb + | pkt_push_md_t_idb_get(self) -> qstring * + | + | input + | pkt_push_md_t_input_get(self) -> input_file_t + | + | thisown + | The membership flag + +Help on class pkt_rpc_fail_t in module ida_lumina: + +class pkt_rpc_fail_t(builtins.object) + | Proxy of C++ pkt_rpc_fail_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_rpc_fail_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_rpc_fail_t(...) + | delete_pkt_rpc_fail_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | error + | pkt_rpc_fail_t_error_get(self) -> qstring * + | + | result + | pkt_rpc_fail_t_result_get(self) -> int + | + | thisown + | The membership flag + +Help on class pkt_rpc_notify_t in module ida_lumina: + +class pkt_rpc_notify_t(builtins.object) + | Proxy of C++ pkt_rpc_notify_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_rpc_notify_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_rpc_notify_t(...) + | delete_pkt_rpc_notify_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | text + | pkt_rpc_notify_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | pkt_rpc_notify_t_type_get(self) -> rpc_notification_type_t + +Help on class pkt_rpc_ok_t in module ida_lumina: + +class pkt_rpc_ok_t(builtins.object) + | Proxy of C++ pkt_rpc_ok_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_rpc_ok_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_rpc_ok_t(...) + | delete_pkt_rpc_ok_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 + +Help on class pop_fun_t in module ida_lumina: + +class pop_fun_t(func_info_pattern_and_frequency_t) + | Proxy of C++ pop_fun_t class. + | + | Method resolution order: + | pop_fun_t + | func_info_pattern_and_frequency_t + | func_info_and_pattern_t + | func_info_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pop_fun_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pop_fun_t(...) + | delete_pop_fun_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ea64 + | pop_fun_t_ea64_get(self) -> ea64_t + | + | hostname + | pop_fun_t_hostname_get(self) -> qstring * + | + | input + | pop_fun_t_input_get(self) -> input_file_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_pattern_and_frequency_t: + | + | frequency + | func_info_pattern_and_frequency_t_frequency_get(self) -> uint32 + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_and_pattern_t: + | + | pattern_id + | func_info_and_pattern_t_pattern_id_get(self) -> pattern_id_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from func_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | metadata + | func_info_t_metadata_get(self) -> metadata_t * + | + | name + | func_info_t_name_get(self) -> qstring * + | + | size + | func_info_t_size_get(self) -> uint32 + +Help on class push_md_opts_t in module ida_lumina: + +class push_md_opts_t(builtins.object) + | Proxy of C++ push_md_opts_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, mfs=size_t(-1)) -> push_md_opts_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_push_md_opts_t(...) + | delete_push_md_opts_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | eas + | push_md_opts_t_eas_get(self) -> eavec_t * + | + | min_func_size + | push_md_opts_t_min_func_size_get(self) -> size_t + | + | thisown + | The membership flag + +Help on class push_md_result_t in module ida_lumina: + +class push_md_result_t(builtins.object) + | Proxy of C++ push_md_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> push_md_result_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_push_md_result_t(...) + | delete_push_md_result_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | codes + | push_md_result_t_codes_get(self) -> lumina_op_res_vec_t + | + | contents + | push_md_result_t_contents_get(self) -> func_info_and_pattern_vec_t + | + | eas + | push_md_result_t_eas_get(self) -> eavec_t * + | + | thisown + | The membership flag + +Help on function revert_metadata in module ida_lumina: + +revert_metadata(*args) -> 'bool' + revert_metadata(ea) -> bool + +Help on function score_metadata in module ida_lumina: + +score_metadata(*args) -> 'uint32' + score_metadata(fi) -> uint32 + +Help on class serialized_tinfo in module ida_lumina: + +class serialized_tinfo(builtins.object) + | Proxy of C++ serialized_tinfo class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> serialized_tinfo + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_serialized_tinfo(...) + | delete_serialized_tinfo(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fields + | serialized_tinfo_fields_get(self) -> qtype * + | + | thisown + | The membership flag + | + | type + | serialized_tinfo_type_get(self) -> qtype * + +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 + | + | __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) + | + | on_extra_comment_changed(self, *args) -> 'void' + | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) + | + | on_frame_member_changed(self, *args) -> 'void' + | on_frame_member_changed(self, offset, l, r) + | + | on_function_comment_changed(self, *args) -> 'void' + | on_function_comment_changed(self, l, r, rep) + | + | on_insn_ops_repr_changed(self, *args) -> 'void' + | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) + | + | on_name_changed(self, *args) -> 'void' + | on_name_changed(self, l, r) + | + | on_proto_changed(self, *args) -> 'void' + | on_proto_changed(self, l, r) + | + | on_score_changed(self, *args) -> 'void' + | on_score_changed(self, l, r) + | + | on_user_stkpnt_changed(self, *args) -> 'void' + | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | indent + | simple_diff_handler_t_indent_get(self) -> uint32 + | + | lines + | simple_diff_handler_t_lines_get(self) -> qstrvec_t * + | + | 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. + | + | 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) -> func_md_diff_handler_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_simple_idb_diff_handler_t(...) + | delete_simple_idb_diff_handler_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | header_generated + | simple_idb_diff_handler_t_header_generated_get(self) -> bool + | + | pfn + | simple_idb_diff_handler_t_pfn_get(self) -> func_t const * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | 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_extra_comment_changed(self, *args) -> 'void' + | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) + | + | on_frame_member_changed(self, *args) -> 'void' + | on_frame_member_changed(self, offset, l, r) + | + | on_function_comment_changed(self, *args) -> 'void' + | on_function_comment_changed(self, l, r, rep) + | + | on_insn_ops_repr_changed(self, *args) -> 'void' + | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) + | + | on_name_changed(self, *args) -> 'void' + | on_name_changed(self, l, r) + | + | on_proto_changed(self, *args) -> 'void' + | on_proto_changed(self, l, r) + | + | on_score_changed(self, *args) -> 'void' + | on_score_changed(self, l, r) + | + | on_user_stkpnt_changed(self, *args) -> 'void' + | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from simple_diff_handler_t: + | + | indent + | simple_diff_handler_t_indent_get(self) -> uint32 + | + | lines + | simple_diff_handler_t_lines_get(self) -> qstrvec_t * + | + | ---------------------------------------------------------------------- + | 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 skipped_func_t in module ida_lumina: + +class skipped_func_t(builtins.object) + | Proxy of C++ skipped_func_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> skipped_func_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_skipped_func_t(...) + | delete_skipped_func_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | skipped_func_t_count_get(self) -> uint32 + | + | pattern_id + | skipped_func_t_pattern_id_get(self) -> pattern_id_t + | + | thisown + | The membership flag + +Help on class skipped_funcs_t in module ida_lumina: + +class skipped_funcs_t(builtins.object) + | Proxy of C++ qvector< skipped_func_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'skipped_func_t const &' + | __getitem__(self, i) -> skipped_func_t + | + | __init__(self, *args) + | __init__(self) -> skipped_funcs_t + | __init__(self, x) -> skipped_funcs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_skipped_funcs_t(...) + | delete_skipped_funcs_t(self) + | + | at(self, *args) -> 'skipped_func_t const &' + | at(self, _idx) -> skipped_func_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< skipped_func_t >::const_iterator' + | begin(self) -> skipped_func_t + | begin(self) -> skipped_func_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< skipped_func_t >::const_iterator' + | end(self) -> skipped_func_t + | end(self) -> skipped_func_t + | + | erase(self, *args) -> 'qvector< skipped_func_t >::iterator' + | erase(self, it) -> skipped_func_t + | erase(self, first, last) -> skipped_func_t + | + | extract(self, *args) -> 'skipped_func_t *' + | extract(self) -> skipped_func_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=skipped_func_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< skipped_func_t >::iterator' + | insert(self, it, x) -> skipped_func_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'skipped_func_t &' + | push_back(self, x) + | push_back(self) -> skipped_func_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function split_metadata in module ida_lumina: + +split_metadata(*args) -> 'PyObject *' + split_metadata(md) -> PyObject * + +Help on class user_identification_t in module ida_lumina: + +class user_identification_t(builtins.object) + | Proxy of C++ user_identification_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> user_identification_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_identification_t(...) + | delete_user_identification_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | email + | user_identification_t_email_get(self) -> qstring * + | + | license_id + | user_identification_t_license_id_get(self) -> qstring * + | + | thisown + | The membership flag + | + | user_name + | user_identification_t_user_name_get(self) -> qstring * + +Help on class user_stkpnt_t in module ida_lumina: + +class user_stkpnt_t(insn_site_t) + | Proxy of C++ user_stkpnt_t class. + | + | Method resolution order: + | user_stkpnt_t + | insn_site_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> user_stkpnt_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_stkpnt_t(...) + | delete_user_stkpnt_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | delta + | user_stkpnt_t_delta_get(self) -> int64 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from insn_site_t: + | + | toea(self, *args) -> 'ea_t' + | toea(self, pfn) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from insn_site_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fchunk_nr + | insn_site_t_fchunk_nr_get(self) -> uint32 + | + | fchunk_off + | insn_site_t_fchunk_off_get(self) -> uint32 + +Help on class user_stkpnts_t in module ida_lumina: + +class user_stkpnts_t(builtins.object) + | Proxy of C++ qvector< user_stkpnt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'user_stkpnt_t const &' + | __getitem__(self, i) -> user_stkpnt_t + | + | __init__(self, *args) + | __init__(self) -> user_stkpnts_t + | __init__(self, x) -> user_stkpnts_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_user_stkpnts_t(...) + | delete_user_stkpnts_t(self) + | + | at(self, *args) -> 'user_stkpnt_t const &' + | at(self, _idx) -> user_stkpnt_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< user_stkpnt_t >::const_iterator' + | begin(self) -> user_stkpnt_t + | begin(self) -> user_stkpnt_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< user_stkpnt_t >::const_iterator' + | end(self) -> user_stkpnt_t + | end(self) -> user_stkpnt_t + | + | erase(self, *args) -> 'qvector< user_stkpnt_t >::iterator' + | erase(self, it) -> user_stkpnt_t + | erase(self, first, last) -> user_stkpnt_t + | + | extract(self, *args) -> 'user_stkpnt_t *' + | extract(self) -> user_stkpnt_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=user_stkpnt_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< user_stkpnt_t >::iterator' + | insert(self, it, x) -> user_stkpnt_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'user_stkpnt_t &' + | push_back(self, x) + | push_back(self) -> user_stkpnt_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +=== ida_lumina EPYDOC INJECTIONS === +ida_lumina.AMDF_FORCE +""" +apply kvps regardless of what's currently in the IDB, possibly +removing some attributes currently present (e.g., name, or prototype +could be lost) +""" + +ida_lumina.AMDF_UPGRADE +""" +"quality" than what's currently in the IDB + +apply kvps that seem to be of higher +""" + +ida_lumina.PMF_PUSH_MODE_MASK +""" +Conflict resolution mode. +""" +=== ida_lumina EPYDOC INJECTIONS END === +Help on class bookmarks_t in module ida_moves: + +class bookmarks_t(builtins.object) + | Proxy of C++ bookmarks_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | erase(*args) -> 'bool' + | erase(e, index, ud) -> bool + | + | find_index(*args) -> 'uint32' + | find_index(e, ud) -> uint32 + | + | get(*args) -> 'bool' + | get(out_entry, out_desc, index, ud) -> bool + | + | get_desc(*args) -> 'qstring *' + | get_desc(e, index, ud) -> bool + | + | mark(*args) -> 'uint32' + | mark(e, index, title, desc, ud) -> uint32 + | + | size(*args) -> 'uint32' + | size(e, ud) -> uint32 + | + | ---------------------------------------------------------------------- + | 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 + +Help on function bookmarks_t_erase in module ida_moves: + +bookmarks_t_erase(*args) -> 'bool' + bookmarks_t_erase(e, index, ud) -> bool + +Help on function bookmarks_t_find_index in module ida_moves: + +bookmarks_t_find_index(*args) -> 'uint32' + bookmarks_t_find_index(e, ud) -> uint32 + +Help on function bookmarks_t_get in module ida_moves: + +bookmarks_t_get(*args) -> 'bool' + bookmarks_t_get(out_entry, out_desc, index, ud) -> bool + +Help on function bookmarks_t_get_desc in module ida_moves: + +bookmarks_t_get_desc(*args) -> 'qstring *' + bookmarks_t_get_desc(e, index, ud) -> str + +Help on function bookmarks_t_mark in module ida_moves: + +bookmarks_t_mark(*args) -> 'uint32' + bookmarks_t_mark(e, index, title, desc, ud) -> uint32 + +Help on function bookmarks_t_size in module ida_moves: + +bookmarks_t_size(*args) -> 'uint32' + bookmarks_t_size(e, ud) -> uint32 + +Help on class graph_location_info_t in module ida_moves: + +class graph_location_info_t(builtins.object) + | Proxy of C++ graph_location_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> graph_location_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_location_info_t(...) + | delete_graph_location_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | orgx + | graph_location_info_t_orgx_get(self) -> double + | + | orgy + | graph_location_info_t_orgy_get(self) -> double + | + | thisown + | The membership flag + | + | zoom + | graph_location_info_t_zoom_get(self) -> double + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class lochist_entry_t in module ida_moves: + +class lochist_entry_t(builtins.object) + | Proxy of C++ lochist_entry_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lochist_entry_t + | __init__(self, p, r) -> lochist_entry_t + | __init__(self, other) -> lochist_entry_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lochist_entry_t(...) + | delete_lochist_entry_t(self) + | + | acquire_place(self, *args) -> 'void' + | acquire_place(self, in_p) + | + | is_valid(self, *args) -> 'bool' + | is_valid(self) -> bool + | + | place(self, *args) -> 'place_t *' + | place(self) -> place_t + | place(self) -> place_t + | + | renderer_info(self, *args) -> 'renderer_info_t &' + | renderer_info(self) -> renderer_info_t + | renderer_info(self) -> renderer_info_t + | + | set_place(self, *args) -> 'void' + | set_place(self, p) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | plce + | lochist_entry_t_plce_get(self) -> place_t + | + | rinfo + | lochist_entry_t_rinfo_get(self) -> renderer_info_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class lochist_t in module ida_moves: + +class lochist_t(builtins.object) + | Proxy of C++ lochist_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lochist_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lochist_t(...) + | delete_lochist_t(self) + | + | back(self, *args) -> 'bool' + | back(self, cnt, try_to_unhide) -> bool + | + | clear(self, *args) -> 'void' + | clear(self) + | + | current_index(self, *args) -> 'uint32' + | current_index(self) -> uint32 + | + | fwd(self, *args) -> 'bool' + | fwd(self, cnt, try_to_unhide) -> bool + | + | get(self, *args) -> 'bool' + | get(self, out, index) -> bool + | + | get_current(self, *args) -> 'lochist_entry_t const &' + | get_current(self) -> lochist_entry_t + | + | get_place_id(self, *args) -> 'int' + | get_place_id(self) -> int + | + | get_template_place(self, *args) -> 'place_t const *' + | get_template_place(self) -> place_t + | + | init(self, *args) -> 'bool' + | init(self, stream_name, _defpos, _ud, _flags) -> bool + | + | is_history_enabled(self, *args) -> 'bool' + | is_history_enabled(self) -> bool + | + | jump(self, *args) -> 'void' + | jump(self, try_to_unhide, e) + | + | netcode(self, *args) -> 'nodeidx_t' + | netcode(self) -> nodeidx_t + | + | save(self, *args) -> 'void' + | save(self) + | + | seek(self, *args) -> 'bool' + | seek(self, index, try_to_unhide) -> bool + | + | set(self, *args) -> 'void' + | set(self, index, e) + | + | set_current(self, *args) -> 'void' + | set_current(self, e) + | + | size(self, *args) -> 'uint32' + | size(self) -> uint32 + | + | ---------------------------------------------------------------------- + | 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 + +Help on class renderer_info_pos_t in module ida_moves: + +class renderer_info_pos_t(builtins.object) + | Proxy of C++ renderer_info_pos_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_info_pos_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_renderer_info_pos_t(...) + | delete_renderer_info_pos_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cx + | renderer_info_pos_t_cx_get(self) -> short + | + | cy + | renderer_info_pos_t_cy_get(self) -> short + | + | node + | renderer_info_pos_t_node_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class renderer_info_t in module ida_moves: + +class renderer_info_t(builtins.object) + | Proxy of C++ renderer_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_renderer_info_t(...) + | delete_renderer_info_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | gli + | renderer_info_t_gli_get(self) -> graph_location_info_t + | + | pos + | renderer_info_t_pos_get(self) -> renderer_info_pos_t + | + | rtype + | renderer_info_t_rtype_get(self) -> tcc_renderer_type_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class segm_move_info_t in module ida_moves: + +class segm_move_info_t(builtins.object) + | Proxy of C++ segm_move_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _from=0, _to=0, _sz=0) -> segm_move_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_segm_move_info_t(...) + | delete_segm_move_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _from + | segm_move_info_t__from_get(self) -> ea_t + | + | size + | segm_move_info_t_size_get(self) -> size_t + | + | thisown + | The membership flag + | + | to + | segm_move_info_t_to_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class segm_move_info_vec_t in module ida_moves: + +class segm_move_info_vec_t(builtins.object) + | Proxy of C++ qvector< segm_move_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'segm_move_info_t const &' + | __getitem__(self, i) -> segm_move_info_t + | + | __init__(self, *args) + | __init__(self) -> segm_move_info_vec_t + | __init__(self, x) -> segm_move_info_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_segm_move_info_vec_t(...) + | delete_segm_move_info_vec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'segm_move_info_t const &' + | at(self, _idx) -> segm_move_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< segm_move_info_t >::const_iterator' + | begin(self) -> segm_move_info_t + | begin(self) -> segm_move_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< segm_move_info_t >::const_iterator' + | end(self) -> segm_move_info_t + | end(self) -> segm_move_info_t + | + | erase(self, *args) -> 'qvector< segm_move_info_t >::iterator' + | erase(self, it) -> segm_move_info_t + | erase(self, first, last) -> segm_move_info_t + | + | extract(self, *args) -> 'segm_move_info_t *' + | extract(self) -> segm_move_info_t + | + | find(self, *args) -> 'qvector< segm_move_info_t >::const_iterator' + | find(self, x) -> segm_move_info_t + | find(self, x) -> segm_move_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=segm_move_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< segm_move_info_t >::iterator' + | insert(self, it, x) -> segm_move_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'segm_move_info_t &' + | push_back(self, x) + | push_back(self) -> segm_move_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class segm_move_infos_t in module ida_moves: + +class segm_move_infos_t(segm_move_info_vec_t) + | Proxy of C++ segm_move_infos_t class. + | + | Method resolution order: + | segm_move_infos_t + | segm_move_info_vec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> segm_move_infos_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_segm_move_infos_t(...) + | delete_segm_move_infos_t(self) + | + | find(self, *args) -> 'segm_move_info_t const *' + | find(self, ea) -> segm_move_info_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from segm_move_info_vec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'segm_move_info_t const &' + | __getitem__(self, i) -> segm_move_info_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'segm_move_info_t const &' + | at(self, _idx) -> segm_move_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< segm_move_info_t >::const_iterator' + | begin(self) -> segm_move_info_t + | begin(self) -> segm_move_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< segm_move_info_t >::const_iterator' + | end(self) -> segm_move_info_t + | end(self) -> segm_move_info_t + | + | erase(self, *args) -> 'qvector< segm_move_info_t >::iterator' + | erase(self, it) -> segm_move_info_t + | erase(self, first, last) -> segm_move_info_t + | + | extract(self, *args) -> 'segm_move_info_t *' + | extract(self) -> segm_move_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=segm_move_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< segm_move_info_t >::iterator' + | insert(self, it, x) -> segm_move_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'segm_move_info_t &' + | push_back(self, x) + | push_back(self) -> segm_move_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from segm_move_info_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from segm_move_info_vec_t: + | + | __hash__ = None + +Help on function get_switch_info in module ida_nalt: + +get_switch_info(*args) -> 'ssize_t' + get_switch_info(out, ea) -> ssize_t + +Help on function add_encoding in module ida_nalt: + +add_encoding(*args) -> 'int' + add_encoding(encoding) -> int + + + Add a new encoding (e.g. "UTF-8"). + + @param encoding (C++: const char *) + @return: its index (1-based) if it's already in the list, return its + index + +Help on class array_parameters_t in module ida_nalt: + +class array_parameters_t(builtins.object) + | Proxy of C++ array_parameters_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> array_parameters_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_array_parameters_t(...) + | delete_array_parameters_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | alignment + | array_parameters_t_alignment_get(self) -> int32 + | + | flags + | array_parameters_t_flags_get(self) -> int32 + | + | lineitems + | array_parameters_t_lineitems_get(self) -> int32 + | + | thisown + | The membership flag + +Help on function clr__bnot0 in module ida_nalt: + +clr__bnot0(*args) -> 'void' + clr__bnot0(ea) + +Help on function clr__bnot1 in module ida_nalt: + +clr__bnot1(*args) -> 'void' + clr__bnot1(ea) + +Help on function clr__invsign0 in module ida_nalt: + +clr__invsign0(*args) -> 'void' + clr__invsign0(ea) + +Help on function clr__invsign1 in module ida_nalt: + +clr__invsign1(*args) -> 'void' + clr__invsign1(ea) + +Help on function clr_abits in module ida_nalt: + +clr_abits(*args) -> 'void' + clr_abits(ea, bits) + +Help on function clr_align_flow in module ida_nalt: + +clr_align_flow(*args) -> 'void' + clr_align_flow(ea) + +Help on function clr_colored_item in module ida_nalt: + +clr_colored_item(*args) -> 'void' + clr_colored_item(ea) + +Help on function clr_fixed_spd in module ida_nalt: + +clr_fixed_spd(*args) -> 'void' + clr_fixed_spd(ea) + +Help on function clr_has_lname in module ida_nalt: + +clr_has_lname(*args) -> 'void' + clr_has_lname(ea) + +Help on function clr_has_ti in module ida_nalt: + +clr_has_ti(*args) -> 'void' + clr_has_ti(ea) + +Help on function clr_has_ti0 in module ida_nalt: + +clr_has_ti0(*args) -> 'void' + clr_has_ti0(ea) + +Help on function clr_has_ti1 in module ida_nalt: + +clr_has_ti1(*args) -> 'void' + clr_has_ti1(ea) + +Help on function clr_libitem in module ida_nalt: + +clr_libitem(*args) -> 'void' + clr_libitem(ea) + +Help on function clr_lzero0 in module ida_nalt: + +clr_lzero0(*args) -> 'void' + clr_lzero0(ea) + +Help on function clr_lzero1 in module ida_nalt: + +clr_lzero1(*args) -> 'void' + clr_lzero1(ea) + +Help on function clr_noret in module ida_nalt: + +clr_noret(*args) -> 'void' + clr_noret(ea) + +Help on function clr_notcode in module ida_nalt: + +clr_notcode(*args) -> 'void' + clr_notcode(ea) + + + Clear not-code mark. + + + @param ea (C++: ea_t) + +Help on function clr_notproc in module ida_nalt: + +clr_notproc(*args) -> 'void' + clr_notproc(ea) + +Help on function clr_retfp in module ida_nalt: + +clr_retfp(*args) -> 'void' + clr_retfp(ea) + +Help on function clr_terse_struc in module ida_nalt: + +clr_terse_struc(*args) -> 'void' + clr_terse_struc(ea) + +Help on function clr_tilcmt in module ida_nalt: + +clr_tilcmt(*args) -> 'void' + clr_tilcmt(ea) + +Help on function clr_usemodsp in module ida_nalt: + +clr_usemodsp(*args) -> 'void' + clr_usemodsp(ea) + +Help on function clr_usersp in module ida_nalt: + +clr_usersp(*args) -> 'void' + clr_usersp(ea) + +Help on function clr_userti in module ida_nalt: + +clr_userti(*args) -> 'void' + clr_userti(ea) + +Help on function clr_zstroff in module ida_nalt: + +clr_zstroff(*args) -> 'void' + clr_zstroff(ea) + +Help on class custom_data_type_ids_fids_array in module ida_nalt: + +class custom_data_type_ids_fids_array(builtins.object) + | Proxy of C++ wrapped_array_t< int16,8 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'short const &' + | __getitem__(self, i) -> short const & + | + | __init__(self, *args) + | __init__(self, data) -> custom_data_type_ids_fids_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_custom_data_type_ids_fids_array(...) + | delete_custom_data_type_ids_fids_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | custom_data_type_ids_fids_array_data_get(self) -> short (&)[8] + | + | thisown + | The membership flag + +Help on class custom_data_type_ids_t in module ida_nalt: + +class custom_data_type_ids_t(builtins.object) + | Proxy of C++ custom_data_type_ids_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> custom_data_type_ids_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_custom_data_type_ids_t(...) + | delete_custom_data_type_ids_t(self) + | + | _custom_data_type_ids_t__getFids = __getFids(self, *args) -> 'wrapped_array_t< int16,8 >' + | __getFids(self) -> custom_data_type_ids_fids_array + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dtid + | custom_data_type_ids_t_dtid_get(self) -> int16 + | + | fids + | __getFids(self) -> custom_data_type_ids_fids_array + | + | thisown + | The membership flag + +Help on function dbg_get_input_path in module ida_nalt: + +dbg_get_input_path(*args) -> 'size_t' + dbg_get_input_path() -> str + + + Get debugger input file name/path (see 'LFLG_DBG_NOPATH' ) + +Help on function del_absbase in module ida_nalt: + +del_absbase(*args) -> 'void' + del_absbase(ea) + +Help on function del_aflags in module ida_nalt: + +del_aflags(*args) -> 'void' + del_aflags(ea) + +Help on function del_alignment in module ida_nalt: + +del_alignment(*args) -> 'void' + del_alignment(ea) + +Help on function del_array_parameters in module ida_nalt: + +del_array_parameters(*args) -> 'void' + del_array_parameters(ea) + +Help on function del_custom_data_type_ids in module ida_nalt: + +del_custom_data_type_ids(*args) -> 'void' + del_custom_data_type_ids(ea) + +Help on function del_encoding in module ida_nalt: + +del_encoding(*args) -> 'bool' + del_encoding(idx) -> bool + + + Delete an encoding (1-based) + + + @param idx (C++: int) + +Help on function del_ind_purged in module ida_nalt: + +del_ind_purged(*args) -> 'void' + del_ind_purged(ea) + +Help on function del_item_color in module ida_nalt: + +del_item_color(*args) -> 'bool' + del_item_color(ea) -> bool + +Help on function del_op_tinfo in module ida_nalt: + +del_op_tinfo(*args) -> 'void' + del_op_tinfo(ea, n) + +Help on function del_refinfo in module ida_nalt: + +del_refinfo(*args) -> 'bool' + del_refinfo(ea, n) -> bool + +Help on function del_source_linnum in module ida_nalt: + +del_source_linnum(*args) -> 'void' + del_source_linnum(ea) + +Help on function del_str_type in module ida_nalt: + +del_str_type(*args) -> 'void' + del_str_type(ea) + +Help on function del_switch_info in module ida_nalt: + +del_switch_info(*args) -> 'void' + del_switch_info(ea) + +Help on function del_switch_parent in module ida_nalt: + +del_switch_parent(*args) -> 'void' + del_switch_parent(ea) + +Help on function del_tinfo in module ida_nalt: + +del_tinfo(*args) -> 'void' + del_tinfo(ea) + +Help on function delete_imports in module ida_nalt: + +delete_imports(*args) -> 'void' + delete_imports() + + + Delete all imported modules information. + +Help on function ea2node in module ida_nalt: + +ea2node(*args) -> 'nodeidx_t' + ea2node(ea) -> nodeidx_t + + + Get netnode for the specified address. + + + @param ea (C++: ea_t) + +Help on function encoding_from_strtype in module ida_nalt: + +encoding_from_strtype(*args) -> 'char const *' + encoding_from_strtype(strtype) -> char const * + + + Get encoding name for this strtype. + + + @param strtype (C++: int32) + +Help on class enum_const_t in module ida_nalt: + +class enum_const_t(builtins.object) + | Proxy of C++ enum_const_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> enum_const_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_enum_const_t(...) + | delete_enum_const_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | serial + | enum_const_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | tid + | enum_const_t_tid_get(self) -> tid_t + +Help on function enum_import_names in module ida_nalt: + +enum_import_names(*args) -> 'int' + enum_import_names(mod_index, py_cb) -> int + + + Enumerate imports from a specific module. + Please refer to ex_imports.py example. + + @param mod_index: The module index + @param callback: A callable object that will be invoked with an ea, name (could be None) and ordinal. + @return: 1-finished ok, -1 on error, otherwise callback return value (<=0) + +Help on function find_custom_refinfo in module ida_nalt: + +find_custom_refinfo(*args) -> 'int' + find_custom_refinfo(name) -> int + + + Get id of a custom refinfo type. + + + @param name (C++: const char *) + +Help on function get_abi_name in module ida_nalt: + +get_abi_name(*args) + +Help on function get_absbase in module ida_nalt: + +get_absbase(*args) -> 'ea_t' + get_absbase(ea) -> ea_t + +Help on function get_aflags in module ida_nalt: + +get_aflags(*args) -> 'uint32' + get_aflags(ea) -> uint32 + +Help on function get_alignment in module ida_nalt: + +get_alignment(*args) -> 'uint32' + get_alignment(ea) -> uint32 + +Help on function get_archive_path in module ida_nalt: + +get_archive_path(*args) -> 'qstring *' + get_archive_path() -> str + + + Get archive file path from which input file was extracted. + +Help on function get_array_parameters in module ida_nalt: + +get_array_parameters(*args) -> 'ssize_t' + get_array_parameters(out, ea) -> ssize_t + +Help on function get_asm_inc_file in module ida_nalt: + +get_asm_inc_file(*args) -> 'qstring *' + get_asm_inc_file() -> str + + + Get name of the include file. + +Help on function get_custom_data_type_ids in module ida_nalt: + +get_custom_data_type_ids(*args) -> 'int' + get_custom_data_type_ids(cdis, ea) -> int + +Help on function get_custom_refinfo in module ida_nalt: + +get_custom_refinfo(*args) -> 'custom_refinfo_handler_t const *' + get_custom_refinfo(crid) -> custom_refinfo_handler_t const * + + + Get definition of a registered custom refinfo type. + + + @param crid (C++: int) + +Help on function get_default_encoding_idx in module ida_nalt: + +get_default_encoding_idx(*args) -> 'int' + get_default_encoding_idx(bpu) -> int + + + Get default encoding index for a specific string type. + + @param bpu: the amount of bytes per unit (e.g., 1 for ASCII, CP1252, + UTF-8..., 2 for UTF-16, 4 for UTF-32) 0 means no specific + encoding is set - byte values are displayed without + conversion. (C++: int) + +Help on function get_encoding_bpu in module ida_nalt: + +get_encoding_bpu(*args) -> 'int' + get_encoding_bpu(idx) -> int + + + Get the amount of bytes per unit (e.g., 2 for UTF-16, 4 for UTF-32) + for the encoding with the given index. + + @param idx: the encoding index (C++: int) + @return: the number of bytes per units (1/2/4); -1 means error + +Help on function get_encoding_name in module ida_nalt: + +get_encoding_name(*args) -> 'char const *' + get_encoding_name(idx) -> char const * + + + Get encoding name for specific index (1-based). + + @param idx (C++: int) + @return: NULL if idx is out of bounds + +Help on function get_encoding_qty in module ida_nalt: + +get_encoding_qty(*args) -> 'int' + get_encoding_qty() -> int + + + Get total number of encodings (counted from 0) + +Help on function get_gotea in module ida_nalt: + +get_gotea(*args) -> 'ea_t' + get_gotea() -> ea_t + +Help on function get_ids_modnode in module ida_nalt: + +get_ids_modnode(*args) -> 'netnode' + get_ids_modnode() -> netnode + + + Get ids modnode. + +Help on function get_imagebase in module ida_nalt: + +get_imagebase(*args) -> 'ea_t' + get_imagebase() -> ea_t + + + Get image base address. + +Help on function get_import_module_name in module ida_nalt: + +get_import_module_name(*args) -> 'PyObject *' + get_import_module_name(mod_index) -> PyObject * + + + Returns the name of an imported module given its index + @return: None or the module name + +Help on function get_import_module_qty in module ida_nalt: + +get_import_module_qty(*args) -> 'uint' + get_import_module_qty() -> uint + + + Get number of import modules. + +Help on function get_ind_purged in module ida_nalt: + +get_ind_purged(*args) -> 'ea_t' + get_ind_purged(ea) -> ea_t + +Help on function get_input_file_path in module ida_nalt: + +get_input_file_path(*args) -> 'size_t' + get_input_file_path() -> str + + + Get full path of the input file. + +Help on function get_item_color in module ida_nalt: + +get_item_color(*args) -> 'bgcolor_t' + get_item_color(ea) -> bgcolor_t + +Help on function get_op_tinfo in module ida_nalt: + +get_op_tinfo(*args) -> 'bool' + get_op_tinfo(tif, ea, n) -> bool + +Help on function get_outfile_encoding_idx in module ida_nalt: + +get_outfile_encoding_idx(*args) -> 'int' + get_outfile_encoding_idx() -> int + + + Get the index of the encoding used when producing files 0 means no + that the IDB's default 1 byte-per-unit encoding is used + +Help on function get_refinfo in module ida_nalt: + +get_refinfo(*args) -> 'bool' + get_refinfo(ri, ea, n) -> bool + +Help on function get_reftype_by_size in module ida_nalt: + +get_reftype_by_size(*args) -> 'reftype_t' + get_reftype_by_size(size) -> reftype_t + + + Get REF_... constant from size Supported sizes: 1,2,4,8,16 For other + sizes returns reftype_t(-1) + + @param size (C++: size_t) + +Help on function get_root_filename in module ida_nalt: + +get_root_filename(*args) -> 'size_t' + get_root_filename() -> str + + + Get file name only of the input file. + +Help on function get_source_linnum in module ida_nalt: + +get_source_linnum(*args) -> 'uval_t' + get_source_linnum(ea) -> uval_t + +Help on function get_str_encoding_idx in module ida_nalt: + +get_str_encoding_idx(*args) -> 'uchar' + get_str_encoding_idx(strtype) -> uchar + + + Get index of the string encoding for this string. + + + @param strtype (C++: int32) + +Help on function get_str_term1 in module ida_nalt: + +get_str_term1(*args) -> 'char' + get_str_term1(strtype) -> char + +Help on function get_str_term2 in module ida_nalt: + +get_str_term2(*args) -> 'char' + get_str_term2(strtype) -> char + +Help on function get_str_type in module ida_nalt: + +get_str_type(*args) -> 'uint32' + get_str_type(ea) -> uint32 + +Help on function get_str_type_code in module ida_nalt: + +get_str_type_code(*args) -> 'uchar' + get_str_type_code(strtype) -> uchar + +Help on function get_strtype_bpu in module ida_nalt: + +get_strtype_bpu(*args) -> 'int' + get_strtype_bpu(strtype) -> int + +Help on function get_switch_info in module ida_nalt: + +get_switch_info(*args) + +Help on function get_switch_parent in module ida_nalt: + +get_switch_parent(*args) -> 'ea_t' + get_switch_parent(ea) -> ea_t + +Help on function get_tinfo in module ida_nalt: + +get_tinfo(*args) -> 'bool' + get_tinfo(tif, ea) -> bool + +Help on function getnode in module ida_nalt: + +getnode(*args) -> 'netnode' + getnode(ea) -> netnode + +Help on function has_lname in module ida_nalt: + +has_lname(*args) -> 'bool' + has_lname(ea) -> bool + +Help on function has_ti in module ida_nalt: + +has_ti(*args) -> 'bool' + has_ti(ea) -> bool + +Help on function has_ti0 in module ida_nalt: + +has_ti0(*args) -> 'bool' + has_ti0(ea) -> bool + +Help on function has_ti1 in module ida_nalt: + +has_ti1(*args) -> 'bool' + has_ti1(ea) -> bool + +Help on function hide_border in module ida_nalt: + +hide_border(*args) -> 'void' + hide_border(ea) + +Help on function hide_item in module ida_nalt: + +hide_item(*args) -> 'void' + hide_item(ea) + +Help on function is__bnot0 in module ida_nalt: + +is__bnot0(*args) -> 'bool' + is__bnot0(ea) -> bool + +Help on function is__bnot1 in module ida_nalt: + +is__bnot1(*args) -> 'bool' + is__bnot1(ea) -> bool + +Help on function is__invsign0 in module ida_nalt: + +is__invsign0(*args) -> 'bool' + is__invsign0(ea) -> bool + +Help on function is__invsign1 in module ida_nalt: + +is__invsign1(*args) -> 'bool' + is__invsign1(ea) -> bool + +Help on function is_align_flow in module ida_nalt: + +is_align_flow(*args) -> 'bool' + is_align_flow(ea) -> bool + +Help on function is_colored_item in module ida_nalt: + +is_colored_item(*args) -> 'bool' + is_colored_item(ea) -> bool + +Help on function is_finally_visible_item in module ida_nalt: + +is_finally_visible_item(*args) -> 'bool' + is_finally_visible_item(ea) -> bool + + + Is instruction visible? + + + @param ea (C++: ea_t) + +Help on function is_fixed_spd in module ida_nalt: + +is_fixed_spd(*args) -> 'bool' + is_fixed_spd(ea) -> bool + +Help on function is_hidden_border in module ida_nalt: + +is_hidden_border(*args) -> 'bool' + is_hidden_border(ea) -> bool + +Help on function is_hidden_item in module ida_nalt: + +is_hidden_item(*args) -> 'bool' + is_hidden_item(ea) -> bool + +Help on function is_libitem in module ida_nalt: + +is_libitem(*args) -> 'bool' + is_libitem(ea) -> bool + +Help on function is_lzero0 in module ida_nalt: + +is_lzero0(*args) -> 'bool' + is_lzero0(ea) -> bool + +Help on function is_lzero1 in module ida_nalt: + +is_lzero1(*args) -> 'bool' + is_lzero1(ea) -> bool + +Help on function is_noret in module ida_nalt: + +is_noret(*args) -> 'bool' + is_noret(ea) -> bool + +Help on function is_notcode in module ida_nalt: + +is_notcode(*args) -> 'bool' + is_notcode(ea) -> bool + + + Is the address marked as not-code? + + + @param ea (C++: ea_t) + +Help on function is_notproc in module ida_nalt: + +is_notproc(*args) -> 'bool' + is_notproc(ea) -> bool + +Help on function is_pascal in module ida_nalt: + +is_pascal(*args) -> 'bool' + is_pascal(strtype) -> bool + +Help on function is_reftype_target_optional in module ida_nalt: + +is_reftype_target_optional(*args) -> 'bool' + is_reftype_target_optional(type) -> bool + + + Can the target be calculated using operand value? + + + @param type (C++: reftype_t) + +Help on function is_retfp in module ida_nalt: + +is_retfp(*args) -> 'bool' + is_retfp(ea) -> bool + +Help on function is_terse_struc in module ida_nalt: + +is_terse_struc(*args) -> 'bool' + is_terse_struc(ea) -> bool + +Help on function is_tilcmt in module ida_nalt: + +is_tilcmt(*args) -> 'bool' + is_tilcmt(ea) -> bool + +Help on function is_usersp in module ida_nalt: + +is_usersp(*args) -> 'bool' + is_usersp(ea) -> bool + +Help on function is_userti in module ida_nalt: + +is_userti(*args) -> 'bool' + is_userti(ea) -> bool + +Help on function is_visible_item in module ida_nalt: + +is_visible_item(*args) -> 'bool' + is_visible_item(ea) -> bool + + + Test visibility of item at given ea. + + + @param ea (C++: ea_t) + +Help on function is_zstroff in module ida_nalt: + +is_zstroff(*args) -> 'bool' + is_zstroff(ea) -> bool + +Help on function node2ea in module ida_nalt: + +node2ea(*args) -> 'ea_t' + node2ea(ndx) -> ea_t + +Help on class opinfo_t in module ida_nalt: + +class opinfo_t(builtins.object) + | Proxy of C++ opinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> opinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_opinfo_t(...) + | delete_opinfo_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cd + | opinfo_t_cd_get(self) -> custom_data_type_ids_t + | + | ec + | opinfo_t_ec_get(self) -> enum_const_t + | + | path + | opinfo_t_path_get(self) -> strpath_t + | + | ri + | opinfo_t_ri_get(self) -> refinfo_t + | + | strtype + | opinfo_t_strtype_get(self) -> int32 + | + | thisown + | The membership flag + | + | tid + | opinfo_t_tid_get(self) -> tid_t + +Help on class printop_t in module ida_nalt: + +class printop_t(builtins.object) + | Proxy of C++ printop_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> printop_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_printop_t(...) + | delete_printop_t(self) + | + | get_ti(self, *args) -> 'opinfo_t const *' + | get_ti(self) -> opinfo_t + | + | is_aflags_initialized(self, *args) -> 'bool' + | is_aflags_initialized(self) -> bool + | + | is_ti_initialized(self, *args) -> 'bool' + | is_ti_initialized(self) -> bool + | + | set_aflags_initialized(self, *args) -> 'void' + | set_aflags_initialized(self, v=True) + | + | set_ti_initialized(self, *args) -> 'void' + | set_ti_initialized(self, v=True) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | aflags + | printop_t_aflags_get(self) -> flags_t + | + | features + | printop_t_features_get(self) -> uchar + | + | flags + | printop_t_flags_get(self) -> flags_t + | + | is_ti_valid + | is_ti_initialized(self) -> bool + | + | suspop + | printop_t_suspop_get(self) -> int + | + | thisown + | The membership flag + | + | ti + | printop_t_ti_get(self) -> opinfo_t + +Help on class refinfo_t in module ida_nalt: + +class refinfo_t(builtins.object) + | Proxy of C++ refinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> refinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_refinfo_t(...) + | delete_refinfo_t(self) + | + | init(self, *args) -> 'void' + | init(self, reft_and_flags, _base=0, _target=BADADDR, _tdelta=0) + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_pastend(self, *args) -> 'bool' + | is_pastend(self) -> bool + | + | is_rvaoff(self, *args) -> 'bool' + | is_rvaoff(self) -> bool + | + | is_signed(self, *args) -> 'bool' + | is_signed(self) -> bool + | + | is_subtract(self, *args) -> 'bool' + | is_subtract(self) -> bool + | + | is_target_optional(self, *args) -> 'bool' + | is_target_optional(self) -> bool + | + | no_base_xref(self, *args) -> 'bool' + | no_base_xref(self) -> bool + | + | set_type(self, *args) -> 'void' + | set_type(self, t) + | + | type(self, *args) -> 'reftype_t' + | type(self) -> reftype_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | refinfo_t_base_get(self) -> ea_t + | + | flags + | refinfo_t_flags_get(self) -> uint32 + | + | target + | refinfo_t_target_get(self) -> ea_t + | + | tdelta + | refinfo_t_tdelta_get(self) -> adiff_t + | + | thisown + | The membership flag + +Help on function rename_encoding in module ida_nalt: + +rename_encoding(*args) -> 'bool' + rename_encoding(idx, encoding) -> bool + + + Change name for an encoding (1-based) + + + @param idx (C++: int) + @param encoding (C++: const char *) + +Help on function retrieve_input_file_crc32 in module ida_nalt: + +retrieve_input_file_crc32(*args) -> 'uint32' + retrieve_input_file_crc32() -> uint32 + + + Get input file crc32 stored in the database. it can be used to check + that the input file has not been changed. + +Help on function retrieve_input_file_md5 in module ida_nalt: + +retrieve_input_file_md5(*args) -> 'uchar [ANY]' + retrieve_input_file_md5() -> str + + + Get input file md5. + +Help on function retrieve_input_file_sha256 in module ida_nalt: + +retrieve_input_file_sha256(*args) -> 'uchar [ANY]' + retrieve_input_file_sha256() -> str + + + Get input file sha256. + +Help on function retrieve_input_file_size in module ida_nalt: + +retrieve_input_file_size(*args) -> 'uint32' + retrieve_input_file_size() -> uint32 + + + Get size of input file in bytes. + +Help on function set__bnot0 in module ida_nalt: + +set__bnot0(*args) -> 'void' + set__bnot0(ea) + +Help on function set__bnot1 in module ida_nalt: + +set__bnot1(*args) -> 'void' + set__bnot1(ea) + +Help on function set__invsign0 in module ida_nalt: + +set__invsign0(*args) -> 'void' + set__invsign0(ea) + +Help on function set__invsign1 in module ida_nalt: + +set__invsign1(*args) -> 'void' + set__invsign1(ea) + +Help on function set_abits in module ida_nalt: + +set_abits(*args) -> 'void' + set_abits(ea, bits) + +Help on function set_absbase in module ida_nalt: + +set_absbase(*args) -> 'void' + set_absbase(ea, x) + +Help on function set_aflags in module ida_nalt: + +set_aflags(*args) -> 'void' + set_aflags(ea, flags) + +Help on function set_align_flow in module ida_nalt: + +set_align_flow(*args) -> 'void' + set_align_flow(ea) + +Help on function set_alignment in module ida_nalt: + +set_alignment(*args) -> 'void' + set_alignment(ea, x) + +Help on function set_archive_path in module ida_nalt: + +set_archive_path(*args) -> 'bool' + set_archive_path(file) -> bool + + + Set archive file path from which input file was extracted. + + + @param file (C++: const char *) + +Help on function set_array_parameters in module ida_nalt: + +set_array_parameters(*args) -> 'void' + set_array_parameters(ea, _in) + +Help on function set_asm_inc_file in module ida_nalt: + +set_asm_inc_file(*args) -> 'bool' + set_asm_inc_file(file) -> bool + + + Set name of the include file. + + + @param file (C++: const char *) + +Help on function set_colored_item in module ida_nalt: + +set_colored_item(*args) -> 'void' + set_colored_item(ea) + +Help on function set_custom_data_type_ids in module ida_nalt: + +set_custom_data_type_ids(*args) -> 'void' + set_custom_data_type_ids(ea, cdis) + +Help on function set_default_encoding_idx in module ida_nalt: + +set_default_encoding_idx(*args) -> 'bool' + set_default_encoding_idx(bpu, idx) -> bool + + + set default encoding for a string type + + @param bpu: the amount of bytes per unit (C++: int) + @param idx: the encoding index idx can be 0 to disable encoding + conversion (C++: int) + +Help on function set_fixed_spd in module ida_nalt: + +set_fixed_spd(*args) -> 'void' + set_fixed_spd(ea) + +Help on function set_gotea in module ida_nalt: + +set_gotea(*args) -> 'void' + set_gotea(gotea) + +Help on function set_has_lname in module ida_nalt: + +set_has_lname(*args) -> 'void' + set_has_lname(ea) + +Help on function set_has_ti in module ida_nalt: + +set_has_ti(*args) -> 'void' + set_has_ti(ea) + +Help on function set_has_ti0 in module ida_nalt: + +set_has_ti0(*args) -> 'void' + set_has_ti0(ea) + +Help on function set_has_ti1 in module ida_nalt: + +set_has_ti1(*args) -> 'void' + set_has_ti1(ea) + +Help on function set_ids_modnode in module ida_nalt: + +set_ids_modnode(*args) -> 'void' + set_ids_modnode(id) + + + Set ids modnode. + + + @param id (C++: netnode) + +Help on function set_imagebase in module ida_nalt: + +set_imagebase(*args) -> 'void' + set_imagebase(base) + + + Set image base address. + + + @param base (C++: ea_t) + +Help on function set_item_color in module ida_nalt: + +set_item_color(*args) -> 'void' + set_item_color(ea, color) + +Help on function set_libitem in module ida_nalt: + +set_libitem(*args) -> 'void' + set_libitem(ea) + +Help on function set_lzero0 in module ida_nalt: + +set_lzero0(*args) -> 'void' + set_lzero0(ea) + +Help on function set_lzero1 in module ida_nalt: + +set_lzero1(*args) -> 'void' + set_lzero1(ea) + +Help on function set_noret in module ida_nalt: + +set_noret(*args) -> 'void' + set_noret(ea) + +Help on function set_notcode in module ida_nalt: + +set_notcode(*args) -> 'void' + set_notcode(ea) + + + Mark address so that it cannot be converted to instruction. + + + @param ea (C++: ea_t) + +Help on function set_notproc in module ida_nalt: + +set_notproc(*args) -> 'void' + set_notproc(ea) + +Help on function set_op_tinfo in module ida_nalt: + +set_op_tinfo(*args) -> 'bool' + set_op_tinfo(ea, n, tif) -> bool + +Help on function set_outfile_encoding_idx in module ida_nalt: + +set_outfile_encoding_idx(*args) -> 'bool' + set_outfile_encoding_idx(idx) -> bool + + + set encoding to be used when producing files + + @param idx: the encoding index idx can be 0 to use the IDB's default + 1-byte-per-unit encoding (C++: int) + +Help on function set_refinfo in module ida_nalt: + +set_refinfo(*args) -> 'bool' + set_refinfo(ea, n, type, target=BADADDR, base=0, tdelta=0) -> bool + +Help on function set_refinfo_ex in module ida_nalt: + +set_refinfo_ex(*args) -> 'bool' + set_refinfo_ex(ea, n, ri) -> bool + +Help on function set_retfp in module ida_nalt: + +set_retfp(*args) -> 'void' + set_retfp(ea) + +Help on function set_root_filename in module ida_nalt: + +set_root_filename(*args) -> 'void' + set_root_filename(file) + + + Set full path of the input file. + + + @param file (C++: const char *) + +Help on function set_source_linnum in module ida_nalt: + +set_source_linnum(*args) -> 'void' + set_source_linnum(ea, lnnum) + +Help on function set_str_type in module ida_nalt: + +set_str_type(*args) -> 'void' + set_str_type(ea, x) + +Help on function set_switch_info in module ida_nalt: + +set_switch_info(*args) -> 'void' + set_switch_info(ea, _in) + +Help on function set_switch_parent in module ida_nalt: + +set_switch_parent(*args) -> 'void' + set_switch_parent(ea, x) + +Help on function set_terse_struc in module ida_nalt: + +set_terse_struc(*args) -> 'void' + set_terse_struc(ea) + +Help on function set_tilcmt in module ida_nalt: + +set_tilcmt(*args) -> 'void' + set_tilcmt(ea) + +Help on function set_tinfo in module ida_nalt: + +set_tinfo(*args) -> 'bool' + set_tinfo(ea, tif) -> bool + +Help on function set_usemodsp in module ida_nalt: + +set_usemodsp(*args) -> 'void' + set_usemodsp(ea) + +Help on function set_usersp in module ida_nalt: + +set_usersp(*args) -> 'void' + set_usersp(ea) + +Help on function set_userti in module ida_nalt: + +set_userti(*args) -> 'void' + set_userti(ea) + +Help on function set_visible_item in module ida_nalt: + +set_visible_item(*args) -> 'void' + set_visible_item(ea, visible) + + + Change visibility of item at given ea. + + + @param ea (C++: ea_t) + @param visible (C++: bool) + +Help on function set_zstroff in module ida_nalt: + +set_zstroff(*args) -> 'void' + set_zstroff(ea) + +Help on class strpath_ids_array in module ida_nalt: + +class strpath_ids_array(builtins.object) + | Proxy of C++ wrapped_array_t< tid_t,32 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'unsigned-ea-like-numeric-type const &'↗ + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | __init__(self, *args) + | __init__(self, data) -> strpath_ids_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_strpath_ids_array(...) + | delete_strpath_ids_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | strpath_ids_array_data_get(self) -> unsigned-ea-like-numeric-type (&)[32]↗ + | + | thisown + | The membership flag + +Help on class strpath_t in module ida_nalt: + +class strpath_t(builtins.object) + | Proxy of C++ strpath_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strpath_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_strpath_t(...) + | delete_strpath_t(self) + | + | _strpath_t__getIds = __getIds(self, *args) -> 'wrapped_array_t< tid_t,32 >' + | __getIds(self) -> strpath_ids_array + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | delta + | strpath_t_delta_get(self) -> adiff_t + | + | ids + | __getIds(self) -> strpath_ids_array + | + | len + | strpath_t_len_get(self) -> int + | + | thisown + | The membership flag + +Help on class switch_info_t in module ida_nalt: + +class switch_info_t(builtins.object) + | Proxy of C++ switch_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> switch_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_switch_info_t(...) + | delete_switch_info_t(self) + | + | _get_values_lowcase(self, *args) -> 'ea_t' + | _get_values_lowcase(self) -> ea_t + | + | _set_values_lowcase(self, *args) -> 'void' + | _set_values_lowcase(self, values) + | + | assign(self, *args) -> 'void' + | assign(self, other) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | get_jrange_vrange(self, *args) -> 'bool' + | get_jrange_vrange(self, jrange=None, vrange=None) -> bool + | + | get_jtable_element_size(self, *args) -> 'int' + | get_jtable_element_size(self) -> int + | + | get_jtable_size(self, *args) -> 'int' + | get_jtable_size(self) -> int + | + | get_lowcase(self, *args) -> 'sval_t' + | get_lowcase(self) -> sval_t + | + | get_shift(self, *args) -> 'int' + | get_shift(self) -> int + | + | get_version(self, *args) -> 'int' + | get_version(self) -> int + | + | get_vtable_element_size(self, *args) -> 'int' + | get_vtable_element_size(self) -> int + | + | has_default(self, *args) -> 'bool' + | has_default(self) -> bool + | + | has_elbase(self, *args) -> 'bool' + | has_elbase(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_indirect(self, *args) -> 'bool' + | is_indirect(self) -> bool + | + | is_nolowcase(self, *args) -> 'bool' + | is_nolowcase(self) -> bool + | + | is_sparse(self, *args) -> 'bool' + | is_sparse(self) -> bool + | + | is_subtract(self, *args) -> 'bool' + | is_subtract(self) -> bool + | + | set_elbase(self, *args) -> 'void' + | set_elbase(self, base) + | + | set_expr(self, *args) -> 'void' + | set_expr(self, r, dt) + | + | set_jtable_element_size(self, *args) -> 'void' + | set_jtable_element_size(self, size) + | + | set_jtable_size(self, *args) -> 'void' + | set_jtable_size(self, size) + | + | set_shift(self, *args) -> 'void' + | set_shift(self, shift) + | + | set_vtable_element_size(self, *args) -> 'void' + | set_vtable_element_size(self, size) + | + | use_std_table(self, *args) -> 'bool' + | use_std_table(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | custom + | switch_info_t_custom_get(self) -> uval_t + | + | defjump + | switch_info_t_defjump_get(self) -> ea_t + | + | elbase + | switch_info_t_elbase_get(self) -> ea_t + | + | expr_ea + | switch_info_t_expr_ea_get(self) -> ea_t + | + | flags + | switch_info_t_flags_get(self) -> uint32 + | + | ind_lowcase + | switch_info_t_ind_lowcase_get(self) -> sval_t + | + | jcases + | switch_info_t_jcases_get(self) -> int + | + | jumps + | switch_info_t_jumps_get(self) -> ea_t + | + | lowcase + | _get_values_lowcase(self) -> ea_t + | + | marks + | switch_info_t_marks_get(self) -> eavec_t * + | + | ncases + | switch_info_t_ncases_get(self) -> ushort + | + | regdtype + | switch_info_t_regdtype_get(self) -> op_dtype_t + | + | regnum + | switch_info_t_regnum_get(self) -> int + | + | startea + | switch_info_t_startea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | values + | _get_values_lowcase(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | SWITCH_INFO_VERSION = 2 + +Help on function switch_info_t__from_ptrval__ in module ida_nalt: + +switch_info_t__from_ptrval__(*args) -> 'switch_info_t *' + switch_info_t__from_ptrval__(ptrval) -> switch_info_t + +Help on function unhide_border in module ida_nalt: + +unhide_border(*args) -> 'void' + unhide_border(ea) + +Help on function unhide_item in module ida_nalt: + +unhide_item(*args) -> 'void' + unhide_item(ea) + +Help on function uses_modsp in module ida_nalt: + +uses_modsp(*args) -> 'bool' + uses_modsp(ea) -> bool + +Help on function validate_idb_names in module ida_nalt: + +validate_idb_names(*args) -> 'int' + validate_idb_names(do_repair) -> int + +=== ida_nalt EPYDOC INJECTIONS === +ida_nalt.AFL_ALIGNFLOW +""" +the previous insn was created for alignment purposes only +""" + +ida_nalt.AFL_BNOT0 +""" +the 1st operand is bitwise negated +""" + +ida_nalt.AFL_BNOT1 +""" +the 2nd operand is bitwise negated +""" + +ida_nalt.AFL_COLORED +""" +has user defined instruction color? +""" + +ida_nalt.AFL_FIXEDSPD +""" +should not be modified by modules + +sp delta value is fixed by analysis. +""" + +ida_nalt.AFL_HIDDEN +""" +the item is hidden completely +""" + +ida_nalt.AFL_LIB +""" +item from the standard library. low level flag, is used to set +'FUNC_LIB' of 'func_t' +""" + +ida_nalt.AFL_LINNUM +""" +has line number info +""" + +ida_nalt.AFL_LNAME +""" +has local name too ( 'FF_NAME' should be set) +""" + +ida_nalt.AFL_LZERO0 +""" +toggle leading zeroes for the 1st operand +""" + +ida_nalt.AFL_LZERO1 +""" +toggle leading zeroes for the 2nd operand +""" + +ida_nalt.AFL_MANUAL +""" +the instruction/data is specified by the user +""" + +ida_nalt.AFL_NOBRD +""" +the code/data border is hidden +""" + +ida_nalt.AFL_NORET +""" +for imported function pointers: doesn't return. this flag can also be +used for any instruction which halts or finishes the program execution +""" + +ida_nalt.AFL_NOTCODE +""" +autoanalysis should not create code here +""" + +ida_nalt.AFL_NOTPROC +""" +autoanalysis should not create proc here +""" + +ida_nalt.AFL_PUBNAM +""" +name is public (inter-file linkage) +""" + +ida_nalt.AFL_RETFP +""" +function returns a floating point value +""" + +ida_nalt.AFL_SIGN0 +""" +code: toggle sign of the 1st operand +""" + +ida_nalt.AFL_SIGN1 +""" +code: toggle sign of the 2nd operand +""" + +ida_nalt.AFL_TERSESTR +""" +terse structure variable display? +""" + +ida_nalt.AFL_TI +""" +has typeinfo? ( 'NSUP_TYPEINFO' ) +""" + +ida_nalt.AFL_TI0 +""" +has typeinfo for operand 0? ( 'NSUP_OPTYPES' ) +""" + +ida_nalt.AFL_TI1 +""" +has typeinfo for operand 1? ( 'NSUP_OPTYPES' +1) +""" + +ida_nalt.AFL_TILCMT +""" +has type comment? (such a comment may be changed by IDA) +""" + +ida_nalt.AFL_USEMODSP +""" +example: pop [rsp+N] + +insn modifes SP and uses the modified value +""" + +ida_nalt.AFL_USERSP +""" +user-defined SP value +""" + +ida_nalt.AFL_USERTI +""" +(comes from the user or type library) + +the type information is definitive. +""" + +ida_nalt.AFL_WEAKNAM +""" +name is weak +""" + +ida_nalt.AFL_ZSTROFF +""" +display struct field name at 0 offset when displaying an offset. +example: \\v{offset somestruct.field_0} if this flag is clear, then +\\v{offset somestruct} +""" + +ida_nalt.AP_ALLOWDUPS +""" +use 'dup' construct +""" + +ida_nalt.AP_ARRAY +""" +create as array (this flag is not stored in database) +""" + +ida_nalt.AP_IDXBASEMASK +""" +mask for number base of the indexes +""" + +ida_nalt.AP_IDXBIN +""" +display indexes in binary +""" + +ida_nalt.AP_IDXDEC +""" +display indexes in decimal +""" + +ida_nalt.AP_IDXHEX +""" +display indexes in hex +""" + +ida_nalt.AP_IDXOCT +""" +display indexes in octal +""" + +ida_nalt.AP_INDEX +""" +display array element indexes as comments +""" + +ida_nalt.AP_SIGNED +""" +treats numbers as signed +""" + +ida_nalt.MAXSTRUCPATH +""" +maximal inclusion depth of unions +""" + +ida_nalt.NALT_ABSBASE +""" +absolute segment location +""" + +ida_nalt.NALT_AFLAGS +""" +additional flags for an item +""" + +ida_nalt.NALT_ALIGN +""" +(should by equal to power of 2) + +alignment value if the item is 'FF_ALIGN' +""" + +ida_nalt.NALT_COLOR +""" +instruction/data background color +""" + +ida_nalt.NALT_CREF_FROM +""" +code xref from, idx: source address +""" + +ida_nalt.NALT_CREF_TO +""" +code xref to, idx: target address +""" + +ida_nalt.NALT_DREF_FROM +""" +data xref from, idx: source address +""" + +ida_nalt.NALT_DREF_TO +""" +data xref to, idx: target address +""" + +ida_nalt.NALT_ENUM0 +""" +enum id for the first operand +""" + +ida_nalt.NALT_ENUM1 +""" +enum id for the second operand +""" + +ida_nalt.NALT_GR_LAYX +""" +group layout ptrs, hash: md5 of 'belongs' +""" + +ida_nalt.NALT_LINNUM +""" +source line number +""" + +ida_nalt.NALT_PURGE +""" +number of bytes purged from the stack when a function is called +indirectly +""" + +ida_nalt.NALT_STRTYPE +""" +type of string item +""" + +ida_nalt.NALT_STRUCT +""" +struct id +""" + +ida_nalt.NALT_SWITCH +""" +switch idiom address (used at jump targets) +""" + +ida_nalt.NSUP_ARGEAS +""" +instructions that initialize call arguments +""" + +ida_nalt.NSUP_ARRAY +""" +array parameters +""" + +ida_nalt.NSUP_CMT +""" +regular comment +""" + +ida_nalt.NSUP_CUSTDT +""" +custom data type id +""" + +ida_nalt.NSUP_FOP1 +""" +forced operand 1 +""" + +ida_nalt.NSUP_FOP2 +""" +forced operand 2 +""" + +ida_nalt.NSUP_FOP3 +""" +forced operand 3 +""" + +ida_nalt.NSUP_FOP4 +""" +forced operand 4 +""" + +ida_nalt.NSUP_FOP5 +""" +forced operand 5 +""" + +ida_nalt.NSUP_FOP6 +""" +forced operand 6 +""" + +ida_nalt.NSUP_FOP7 +""" +forced operand 7 +""" + +ida_nalt.NSUP_FOP8 +""" +forced operand 8 +""" + +ida_nalt.NSUP_FTAILS +""" +function tails or tail referers values NSUP_FTAILS..NSUP_FTAILS+0x1000 +are reserved +""" + +ida_nalt.NSUP_GROUP +""" +graph group information values NSUP_GROUP..NSUP_GROUP+0x1000 are +reserved +""" + +ida_nalt.NSUP_GROUPS +""" +SEG_GRP: pack_dd encoded list of selectors. +""" + +ida_nalt.NSUP_GR_INFO +""" +group node info: color, ea, text +""" + +ida_nalt.NSUP_GR_LAYT +""" +group layouts, idx: layout pointer +""" + +ida_nalt.NSUP_JINFO +""" +jump table info +""" + +ida_nalt.NSUP_LLABEL +""" +local labels. values NSUP_LLABEL..NSUP_LLABEL+0x1000 are reserved +""" + +ida_nalt.NSUP_MANUAL +""" +manual instruction. values NSUP_MANUAL..NSUP_MANUAL+0x1000 are +reserved +""" + +ida_nalt.NSUP_OMFGRP +""" +OMF: group of segments (not used anymore) +""" + +ida_nalt.NSUP_OPTYPES +""" +operand type information. values NSUP_OPTYPES..NSUP_OPTYPES+0x100000 +are reserved +""" + +ida_nalt.NSUP_OREF0 +""" +outer complex reference information for operand 1 +""" + +ida_nalt.NSUP_OREF1 +""" +outer complex reference information for operand 2 +""" + +ida_nalt.NSUP_OREF2 +""" +outer complex reference information for operand 3 +""" + +ida_nalt.NSUP_OREF3 +""" +outer complex reference information for operand 4 +""" + +ida_nalt.NSUP_OREF4 +""" +outer complex reference information for operand 5 +""" + +ida_nalt.NSUP_OREF5 +""" +outer complex reference information for operand 6 +""" + +ida_nalt.NSUP_OREF6 +""" +outer complex reference information for operand 7 +""" + +ida_nalt.NSUP_OREF7 +""" +outer complex reference information for operand 8 +""" + +ida_nalt.NSUP_ORIGFMD +""" +function metadata before lumina information was applied values +NSUP_ORIGFMD..NSUP_ORIGFMD+0x1000 are reserved +""" + +ida_nalt.NSUP_POINTS +""" +SP change points blob (see funcs.cpp). values +NSUP_POINTS..NSUP_POINTS+0x1000 are reserved +""" + +ida_nalt.NSUP_REF0 +""" +complex reference information for operand 1 +""" + +ida_nalt.NSUP_REF1 +""" +complex reference information for operand 2 +""" + +ida_nalt.NSUP_REF2 +""" +complex reference information for operand 3 +""" + +ida_nalt.NSUP_REF3 +""" +complex reference information for operand 4 +""" + +ida_nalt.NSUP_REF4 +""" +complex reference information for operand 5 +""" + +ida_nalt.NSUP_REF5 +""" +complex reference information for operand 6 +""" + +ida_nalt.NSUP_REF6 +""" +complex reference information for operand 7 +""" + +ida_nalt.NSUP_REF7 +""" +complex reference information for operand 8 +""" + +ida_nalt.NSUP_REGARG +""" +register argument type/name descriptions values +NSUP_REGARG..NSUP_REGARG+0x1000 are reserved +""" + +ida_nalt.NSUP_REGVAR +""" +register variables. values NSUP_REGVAR..NSUP_REGVAR+0x1000 are +reserved +""" + +ida_nalt.NSUP_REPCMT +""" +repeatable comment +""" + +ida_nalt.NSUP_SEGTRANS +""" +segment translations +""" + +ida_nalt.NSUP_STROFF0 +""" +stroff: struct path for the first operand +""" + +ida_nalt.NSUP_STROFF1 +""" +stroff: struct path for the second operand +""" + +ida_nalt.NSUP_SWITCH +""" +switch information +""" + +ida_nalt.NSUP_TYPEINFO +""" +type information. values NSUP_TYPEINFO..NSUP_TYPEINFO+0x1000 are +reserved +""" + +ida_nalt.NSUP_XREFPOS +""" +saved xref address and type in the xrefs window +""" + +ida_nalt.PATCH_TAG +""" +Patch netnode tag. +""" + +ida_nalt.REFINFO_CUSTOM +""" +a custom reference the kernel will call \\ph{notify}(ph.custom_offset, +.... that can change all arguments used for calculations. This flag is +useful for custom fixups +""" + +ida_nalt.REFINFO_NOBASE +""" +don't create the base xref implies that the base can be any value nb: +base xrefs are created only if the offset base points to the middle of +a segment +""" + +ida_nalt.REFINFO_PASTEND +""" +reference past an item it may point to an nonexistent address do not +destroy alignment dirs +""" + +ida_nalt.REFINFO_RVAOFF +""" +based reference (rva) 'refinfo_t::base' will be forced to +'get_imagebase()' such a reference is displayed with the \\ash{a_rva} +keyword +""" + +ida_nalt.REFINFO_SIGNEDOP +""" +the operand value is sign-extended (only supported for +REF_OFF8/16/32/64) +""" + +ida_nalt.REFINFO_SUBTRACT +""" +the reference value is subtracted from the base value instead of (as +usual) being added to it +""" + +ida_nalt.REFINFO_TYPE +""" +reference type +""" + +ida_nalt.RIDX_ABINAME +""" +ABI name (processor specific) +""" + +ida_nalt.RIDX_ARCHIVE_PATH +""" +archive file path +""" + +ida_nalt.RIDX_C_MACROS +""" +C predefined macros. +""" + +ida_nalt.RIDX_DBG_BINPATHS +""" +unused (20 indexes) +""" + +ida_nalt.RIDX_DUALOP_GRAPH +""" +Graph text representation options. +""" + +ida_nalt.RIDX_DUALOP_TEXT +""" +Text text representation options. +""" + +ida_nalt.RIDX_FILE_FORMAT_NAME +""" +file format name for loader modules +""" + +ida_nalt.RIDX_GROUPS +""" +segment group information (see init_groups()) +""" + +ida_nalt.RIDX_H_PATH +""" +C header path. +""" + +ida_nalt.RIDX_IDA_VERSION +""" +version of ida which created the database +""" + +ida_nalt.RIDX_INCLUDE +""" +assembler include file name +""" + +ida_nalt.RIDX_MD5 +""" +MD5 of the input file. +""" + +ida_nalt.RIDX_NOTEPAD +""" +notepad blob, occupies 1000 indexes (1MB of text) +""" + +ida_nalt.RIDX_PROBLEMS +""" +problem lists +""" + +ida_nalt.RIDX_SELECTED_EXTLANG +""" +last selected extlang name (from the execute script box) +""" + +ida_nalt.RIDX_SELECTORS +""" +2..63 are for selector_t blob (see init_selectors()) +""" + +ida_nalt.RIDX_SHA256 +""" +SHA256 of the input file. +""" + +ida_nalt.RIDX_SMALL_IDC +""" +Instant IDC statements, blob. +""" + +ida_nalt.RIDX_SMALL_IDC_OLD +""" +Instant IDC statements (obsolete) +""" + +ida_nalt.RIDX_SRCDBG_PATHS +""" +source debug paths, occupies 20 indexes +""" + +ida_nalt.RIDX_SRCDBG_UNDESIRED +""" +user-closed source files, occupies 20 indexes +""" + +ida_nalt.RIDX_STR_ENCODINGS +""" +a list of encodings for the program strings +""" + +ida_nalt.STRENC_DEFAULT +""" +use default encoding for this type (see 'get_default_encoding_idx()' ) +""" + +ida_nalt.STRENC_NONE +""" +force no-conversion encoding +""" + +ida_nalt.STRTYPE_C +""" +Zero-terminated 16bit chars. +""" + +ida_nalt.STRTYPE_C_16 +""" +Zero-terminated 32bit chars. +""" + +ida_nalt.STRTYPE_C_32 +""" +Pascal-style, one-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN2 +""" +Pascal-style, 16bit chars, two-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN2_16 +""" +Pascal-style, four-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN4 +""" +Pascal-style, 16bit chars, four-byte length prefix. +""" + +ida_nalt.STRTYPE_PASCAL +""" +Pascal-style, 16bit chars, one-byte length prefix. +""" + +ida_nalt.STRTYPE_PASCAL_16 +""" +Pascal-style, two-byte length prefix. +""" + +ida_nalt.STRTYPE_TERMCHR +""" +C-style string. + +< Character-terminated string. The termination characters are kept in +the next bytes of string type. +""" + +ida_nalt.SWI_CUSTOM +""" +custom jump table. \\ph{create_switch_xrefs} will be called to create +code xrefs for the table. Custom jump table must be created by the +module (see also 'SWI_STDTBL' ) +""" + +ida_nalt.SWI_DEFRET +""" +return in the default case (defjump==BADADDR) +""" + +ida_nalt.SWI_DEF_IN_TBL +""" +default case is an entry in the jump table. This flag is applicable in +2 cases:The sparse indirect switch (i.e. a switch with a values table) +=""> ==+ 1. The default case entry is the last one +in the table (or the first one in the case of an inversed jump +table).The switch with insns in the jump table. The default case entry +is before the first entry of the table. See also the +find_defjump_from_table() helper function. +""" + +ida_nalt.SWI_ELBASE +""" +segment will be used) + +elbase is present (otherwise the base of the switch +""" + +ida_nalt.SWI_HXNOLOWCASE +""" +lowcase value should not be used by the decompiler (internal flag) +""" + +ida_nalt.SWI_INDIRECT +""" +(for sparse switches) + +value table elements are used as indexes into the jump table +""" + +ida_nalt.SWI_J32 +""" +32-bit jump offsets +""" + +ida_nalt.SWI_JMPINSN +""" +jump table entries are insns. For such entries SHIFT has a different +meaning. It denotes the number of insns in the entry. For example, 0 - +the entry contains the jump to the case, 1 - the entry contains one +insn like a 'mov' and jump to the end of case, and so on. +""" + +ida_nalt.SWI_JMP_INV +""" +for first entry in values table) + +jumptable is inversed. (last entry is +""" + +ida_nalt.SWI_JSIZE +""" +jump offset expansion bit +""" + +ida_nalt.SWI_RESERVED +""" +was: SWI_DEFAULT +""" + +ida_nalt.SWI_SELFREL +""" +jump address is relative to the element not to ELBASE +""" + +ida_nalt.SWI_SEPARATE +""" +create an array of individual elements (otherwise separate items) +""" + +ida_nalt.SWI_SHIFT_MASK +""" +use formula (element< 'qstring *, adiff_t *' + append_struct_fields(disp, n, path, flags, delta, appzero) -> str + + + Append names of struct fields to a name if the name is a struct name. + + @param disp: displacement from the name (C++: adiff_t *) + @param n: number of operand n which the name appears (C++: int) + @param path: 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 (if any). (C++: const tid_t + *) + @param flags: the input flags. they will be returned if the struct + cannot be found. (C++: flags_t) + @param delta: delta to add to displacement (C++: adiff_t) + @param appzero: should append a struct field name if the displacement + is zero? (C++: bool) + @return: flags of the innermost struct member or the input flags + +Help on function calc_gtn_flags in module ida_name: + +calc_gtn_flags(fromaddr, ea) + Calculate flags for get_ea_name() function + + @param fromaddr: the referring address. May be BADADDR. + @param ea: linear address + + @return: flags + +Help on function cleanup_name in module ida_name: + +cleanup_name(*args) -> 'qstring *' + cleanup_name(ea, name, flags=0) -> str + +Help on function del_debug_names in module ida_name: + +del_debug_names(*args) -> 'void' + del_debug_names(ea1, ea2) + +Help on function del_global_name in module ida_name: + +del_global_name(*args) -> 'bool' + del_global_name(ea) -> bool + +Help on function del_local_name in module ida_name: + +del_local_name(*args) -> 'bool' + del_local_name(ea) -> bool + +Help on function demangle_name in module ida_name: + +demangle_name(*args) -> 'qstring *' + demangle_name(name, disable_mask, demreq=DQT_FULL) -> str + + + Demangle a name. + + @param name: name to demangle (C++: const char *) + @param disable_mask: bits to inhibit parts of demangled name (see + MNG_). by the M_COMPILER bits a specific compiler + can be selected (see MT_). (C++: uint32) + @param demreq (C++: demreq_type_t) + @return: ME_... or MT__ bitmasks from demangle.hpp + +Help on class ea_name_t in module ida_name: + +class ea_name_t(builtins.object) + | Proxy of C++ ea_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ea_name_t + | __init__(self, _ea, _name) -> ea_name_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ea_name_t(...) + | delete_ea_name_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | ea_name_t_ea_get(self) -> ea_t + | + | name + | ea_name_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class ea_name_vec_t in module ida_name: + +class ea_name_vec_t(builtins.object) + | Proxy of C++ qvector< ea_name_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'ea_name_t const &' + | __getitem__(self, i) -> ea_name_t + | + | __init__(self, *args) + | __init__(self) -> ea_name_vec_t + | __init__(self, x) -> ea_name_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_ea_name_vec_t(...) + | delete_ea_name_vec_t(self) + | + | at(self, *args) -> 'ea_name_t const &' + | at(self, _idx) -> ea_name_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< ea_name_t >::const_iterator' + | begin(self) -> ea_name_t + | begin(self) -> ea_name_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< ea_name_t >::const_iterator' + | end(self) -> ea_name_t + | end(self) -> ea_name_t + | + | erase(self, *args) -> 'qvector< ea_name_t >::iterator' + | erase(self, it) -> ea_name_t + | erase(self, first, last) -> ea_name_t + | + | extract(self, *args) -> 'ea_name_t *' + | extract(self) -> ea_name_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=ea_name_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< ea_name_t >::iterator' + | insert(self, it, x) -> ea_name_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'ea_name_t &' + | push_back(self, x) + | push_back(self) -> ea_name_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function extract_name in module ida_name: + +extract_name(*args) -> 'qstring *' + extract_name(line, x) -> str + + + Extract a name or address from the specified string. + + @param line: input string (C++: const char *) + @param x: x coordinate of cursor (C++: int) + @return: -1 if cannot extract. otherwise length of the name + +Help on function force_name in module ida_name: + +force_name(*args) -> 'bool' + force_name(ea, name, flags=0) -> bool + +Help on function get_colored_demangled_name in module ida_name: + +get_colored_demangled_name(*args) -> 'qstring' + get_colored_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring + +Help on function get_colored_long_name in module ida_name: + +get_colored_long_name(*args) -> 'qstring' + get_colored_long_name(ea, gtn_flags=0) -> qstring + +Help on function get_colored_name in module ida_name: + +get_colored_name(*args) -> 'qstring' + get_colored_name(ea) -> qstring + +Help on function get_colored_short_name in module ida_name: + +get_colored_short_name(*args) -> 'qstring' + get_colored_short_name(ea, gtn_flags=0) -> qstring + +Help on function get_cp_validity in module ida_name: + +get_cp_validity(*args) -> 'bool' + get_cp_validity(kind, cp, endcp=wchar32_t(-1)) -> bool + + + Is the given codepoint (or range) acceptable in the given context? If + 'endcp' is not BADCP, it is considered to be the end of the range: + [cp, endcp), and is not included in the range + + @param kind (C++: ucdr_kind_t) + @param cp (C++: wchar32_t) + @param endcp (C++: wchar32_t) + +Help on function get_debug_name in module ida_name: + +get_debug_name(*args) -> 'qstring *' + get_debug_name(ea_ptr, how) -> str + +Help on function get_debug_name_ea in module ida_name: + +get_debug_name_ea(*args) -> 'ea_t' + get_debug_name_ea(name) -> ea_t + +Help on function get_debug_names in module ida_name: + +get_debug_names(*args) -> 'PyObject *' + get_debug_names(names, ea1, ea2) + get_debug_names(ea1, ea2, return_list=False) -> PyObject * + +Help on function get_demangled_name in module ida_name: + +get_demangled_name(*args) -> 'qstring' + get_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring + +Help on function get_ea_name in module ida_name: + +get_ea_name(*args) -> 'qstring' + get_ea_name(ea, gtn_flags=0) -> qstring + + + Get name at the specified address. + + @param ea: linear address (C++: ea_t) + @param gtn_flags: how exactly the name should be retrieved. + combination of bits for get_ea_name() function. + There is a convenience bits (C++: int) + @return: success + +Help on function get_long_name in module ida_name: + +get_long_name(*args) -> 'qstring' + get_long_name(ea, gtn_flags=0) -> qstring + +Help on function get_name in module ida_name: + +get_name(*args) -> 'qstring' + get_name(ea) -> qstring + +Help on function get_name_base_ea in module ida_name: + +get_name_base_ea(*args) -> 'ea_t' + get_name_base_ea(_from, to) -> ea_t + + + Get address of the name used in the expression for the address + + @param _from: address of the operand which references to the address + (C++: ea_t) + @param to: the referenced address (C++: ea_t) + @return: address of the name used to represent the operand + +Help on function get_name_color in module ida_name: + +get_name_color(*args) -> 'color_t' + get_name_color(_from, ea) -> color_t + + + Calculate flags for 'get_ea_name()' function. + + Get name color. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . The kernel returns + a local name color if the reference is within a + function, i.e. 'from' and 'ea' belong to the same + function. (C++: ea_t) + @param ea: linear address (C++: ea_t) + +Help on function get_name_ea in module ida_name: + +get_name_ea(*args) -> 'ea_t' + get_name_ea(_from, name) -> ea_t + + + Get address of the name. Dummy names (like byte_xxxx where xxxx are + hex digits) are parsed by this function to obtain the address. The + database is not consulted for them. This function works only with + regular names. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: address of the name or BADADDR + +Help on function get_name_expr in module ida_name: + +get_name_expr(*args) -> 'qstring *' + get_name_expr(_from, n, ea, off, flags=0x0001) -> str + + + Convert address to name expression (name with a displacement). This + function takes into account fixup information and returns a colored + name expression (in the form +/- ). It also knows about + structure members and arrays. If the specified address doesn't have a + name, a dummy name is generated. + + @param _from: 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 the + operand in the instruction. (C++: ea_t) + @param n: number of referencing operand. for data items specify 0 + (C++: int) + @param ea: address to convert to name expression (C++: ea_t) + @param off: the value of name expression. this parameter is used only + to check that the name expression will have the wanted + value. 'off' may be equal to BADADDR but this is + discouraged because it prohibits checks. (C++: uval_t) + @param flags: Name expression flags (C++: int) + @return: < 0 if address is not valid, no segment or other failure. + otherwise the length of the name expression in characters. + +Help on function get_name_value in module ida_name: + +get_name_value(*args) -> 'uval_t *' + get_name_value(_from, name) -> int + + + Get value of the name. This function knows about: regular names, + enums, special segments, etc. + + @param _from: linear address where the name is used if not applicable, + then should be BADADDR (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: Name value result codes + +Help on function get_nice_colored_name in module ida_name: + +get_nice_colored_name(*args) -> 'qstring *' + get_nice_colored_name(ea, flags=0) -> str + + + Get a nice colored name at the specified address. Ex:segment:sub+offse + tsegment:sub:local_labelsegment:labelsegment:addresssegment:address+of + fset + + @param ea (C++: ea_t) + @param flags (C++: int) + @return: the length of the generated name in bytes. + +Help on function get_nlist_ea in module ida_name: + +get_nlist_ea(*args) -> 'ea_t' + get_nlist_ea(idx) -> ea_t + + + Get address from the list at 'idx'. + + + @param idx (C++: size_t) + +Help on function get_nlist_idx in module ida_name: + +get_nlist_idx(*args) -> 'size_t' + get_nlist_idx(ea) -> size_t + + + Get index of the name in the listreturns the closest match. may return + idx >= size. + + @param ea (C++: ea_t) + +Help on function get_nlist_name in module ida_name: + +get_nlist_name(*args) -> 'char const *' + get_nlist_name(idx) -> char const * + + + Get name using idx. + + + @param idx (C++: size_t) + +Help on function get_nlist_size in module ida_name: + +get_nlist_size(*args) -> 'size_t' + get_nlist_size() -> size_t + + + Get number of names in the list. + +Help on function get_short_name in module ida_name: + +get_short_name(*args) -> 'qstring' + get_short_name(ea, gtn_flags=0) -> qstring + +Help on function get_visible_name in module ida_name: + +get_visible_name(*args) -> 'qstring' + get_visible_name(ea, gtn_flags=0) -> qstring + +Help on function hide_name in module ida_name: + +hide_name(*args) -> 'void' + hide_name(ea) + + + Remove name from the list of names + + @param ea: address of the name (C++: ea_t) + +Help on function is_ident in module ida_name: + +is_ident(*args) -> 'bool' + is_ident(name) -> bool + + + Is a valid name? (including ::MangleChars) + + + @param name (C++: const char *) + +Help on function is_ident_cp in module ida_name: + +is_ident_cp(*args) -> 'bool' + is_ident_cp(cp) -> bool + + + Can a character appear in a name? (present in ::NameChars or + ::MangleChars) + + + @param cp (C++: wchar32_t) + +Help on function is_in_nlist in module ida_name: + +is_in_nlist(*args) -> 'bool' + is_in_nlist(ea) -> bool + + + Is name included into names list? + + + @param ea (C++: ea_t) + +Help on function is_name_defined_locally in module ida_name: + +is_name_defined_locally(*args) -> 'bool' + is_name_defined_locally(pfn, name, ignore_name_def, ea1=BADADDR, ea2=BADADDR) -> bool + + + Is the name defined locally in the specified function? + + @param pfn: pointer to function (C++: func_t *) + @param name: name to check (C++: const char *) + @param ignore_name_def: which names to ignore when checking (C++: + ignore_name_def_t) + @param ea1: the starting address of the range inside the function + (optional) (C++: ea_t) + @param ea2: the ending address of the range inside the function + (optional) (C++: ea_t) + @return: true if the name has been defined + +Help on function is_public_name in module ida_name: + +is_public_name(*args) -> 'bool' + is_public_name(ea) -> bool + +Help on function is_strlit_cp in module ida_name: + +is_strlit_cp(*args) -> 'bool' + is_strlit_cp(cp, specific_ranges=None) -> bool + + + Can a character appear in a string literal (present in ::StrlitChars) + If 'specific_ranges' are specified, those will be used instead of the + ones corresponding to the current culture (only if ::StrlitChars is + configured to use the current culture) + + @param cp (C++: wchar32_t) + @param specific_ranges (C++: const rangeset_crefvec_t *) + +Help on function is_uname in module ida_name: + +is_uname(*args) -> 'bool' + is_uname(name) -> bool + + + Is valid user-specified name? (valid name & !dummy prefix). + + @param name: name to test. may be NULL. (C++: const char *) + +Help on function is_valid_cp in module ida_name: + +is_valid_cp(*args) -> 'bool' + is_valid_cp(cp, kind, data=None) -> bool + + + Is the given codepoint acceptable in the given context? + + + @param cp (C++: wchar32_t) + @param kind (C++: nametype_t) + @param data (C++: void *) + +Help on function is_valid_typename in module ida_name: + +is_valid_typename(*args) -> 'bool' + is_valid_typename(name) -> bool + + + Is valid type name? + + @param name: name to test. may be NULL. (C++: const char *) + +Help on function is_visible_cp in module ida_name: + +is_visible_cp(*args) -> 'bool' + is_visible_cp(cp) -> bool + + + Can a character be displayed in a name? (present in ::NameChars) + + + @param cp (C++: wchar32_t) + +Help on function is_weak_name in module ida_name: + +is_weak_name(*args) -> 'bool' + is_weak_name(ea) -> bool + +Help on function make_name_auto in module ida_name: + +make_name_auto(*args) -> 'bool' + make_name_auto(ea) -> bool + +Help on function make_name_non_public in module ida_name: + +make_name_non_public(*args) -> 'void' + make_name_non_public(ea) + +Help on function make_name_non_weak in module ida_name: + +make_name_non_weak(*args) -> 'void' + make_name_non_weak(ea) + +Help on function make_name_public in module ida_name: + +make_name_public(*args) -> 'void' + make_name_public(ea) + +Help on function make_name_user in module ida_name: + +make_name_user(*args) -> 'bool' + make_name_user(ea) -> bool + +Help on function make_name_weak in module ida_name: + +make_name_weak(*args) -> 'void' + make_name_weak(ea) + +Help on function rebuild_nlist in module ida_name: + +rebuild_nlist(*args) -> 'void' + rebuild_nlist() + + + Rebuild names list. + +Help on function reorder_dummy_names in module ida_name: + +reorder_dummy_names(*args) -> 'void' + reorder_dummy_names() + + + Renumber dummy names. + +Help on function set_cp_validity in module ida_name: + +set_cp_validity(*args) -> 'void' + set_cp_validity(kind, cp, endcp=wchar32_t(-1), valid=True) + + + Mark the given codepoint (or range) as acceptable or unacceptable in + the given context If 'endcp' is not BADCP, it is considered to be the + end of the range: [cp, endcp), and is not included in the range + + @param kind (C++: ucdr_kind_t) + @param cp (C++: wchar32_t) + @param endcp (C++: wchar32_t) + @param valid (C++: bool) + +Help on function set_debug_name in module ida_name: + +set_debug_name(*args) -> 'bool' + set_debug_name(ea, name) -> bool + +Help on function set_dummy_name in module ida_name: + +set_dummy_name(*args) -> 'bool' + set_dummy_name(_from, ea) -> bool + + + Give an autogenerated (dummy) name. Autogenerated names have special + prefixes (loc_...). + + @param _from: linear address of the operand which references to the + address (C++: ea_t) + @param ea: linear address (C++: ea_t) + +Help on function set_name in module ida_name: + +set_name(*args) -> 'bool' + set_name(ea, name, flags=0) -> bool + + + Set or delete name of an item at the specified address. An item can be + anything: instruction, function, data byte, word, string, structure, + etc... Include name into the list of names. + + @param ea: linear address. do nothing if ea is not valid (return 0). + tail bytes can't have names. (C++: ea_t) + @param name: new name. NULL: do nothing (return 0). "" : delete + name. otherwise this is a new name. (C++: const char *) + @param flags: Set name flags . If a bit is not specified, then the + corresponding action is not performed and the name will + retain the same bits as before calling this function. + For new names, default is: non-public, non-weak, non- + auto. (C++: int) + +Help on function show_name in module ida_name: + +show_name(*args) -> 'void' + show_name(ea) + + + Insert name to the list of names. + + + @param ea (C++: ea_t) + +Help on function validate_name in module ida_name: + +validate_name(*args) -> 'PyObject *' + validate_name(name, type, flags=0) -> PyObject * + + + Validate a name. This function replaces all invalid characters in the + name with SUBSTCHAR. However, it will return false if name is valid + but not allowed to be an identifier (is a register name). + + @param name: ptr to name. the name will be modified (C++: qstring *) + @param type: the type of name we want to validate (C++: nametype_t) + @param flags: see SN_* . Only SN_IDBENC is currently considered (C++: + int) + @return: success + +=== ida_name EPYDOC INJECTIONS === +ida_name.FUNC_IMPORT_PREFIX +""" +Name prefix used by IDA for the imported functions. +""" + +ida_name.GETN_APPZERO +""" +append a struct field name if the field offset is zero? + +meaningful only if the name refers to a structure. +""" + +ida_name.GETN_NODUMMY +""" +do not create a new dummy name but pretend it exists +""" + +ida_name.GETN_NOFIXUP +""" +ignore the fixup information when producing the name +""" + +ida_name.GNCN_NOCOLOR +""" +generate an uncolored name +""" + +ida_name.GNCN_NODBGNM +""" +don't use debug names +""" + +ida_name.GNCN_NOFUNC +""" +don't generate funcname+... expressions +""" + +ida_name.GNCN_NOLABEL +""" +don't generate labels +""" + +ida_name.GNCN_NOSEG +""" +ignore the segment prefix when producing the name +""" + +ida_name.GNCN_PREFDBG +""" +if using debug names, prefer debug names over function names +""" + +ida_name.GNCN_REQFUNC +""" +return 0 if the address does not belong to a function +""" + +ida_name.GNCN_REQNAME +""" +return 0 if the address can only be represented as a hex number +""" + +ida_name.GNCN_SEGNUM +""" +segment part is displayed as a hex number +""" + +ida_name.GNCN_SEG_FUNC +""" +generate both segment and function names (default is to omit segment +name if a function name is present) +""" + +ida_name.GN_COLORED +""" +return colored name +""" + +ida_name.GN_DEMANGLED +""" +return demangled name +""" + +ida_name.GN_ISRET +""" +for dummy names: use retloc +""" + +ida_name.GN_LOCAL +""" +try to get local name first; if failed, get global +""" + +ida_name.GN_LONG +""" +use long form of demangled name +""" + +ida_name.GN_NOT_DUMMY +""" +do not return a dummy name +""" + +ida_name.GN_NOT_ISRET +""" +for dummy names: do not use retloc +""" + +ida_name.GN_SHORT +""" +use short form of demangled name +""" + +ida_name.GN_STRICT +""" +fail if cannot demangle +""" + +ida_name.GN_VISIBLE +""" +replace forbidden characters by SUBSTCHAR +""" + +ida_name.MAXNAMELEN +""" +Maximum length of a name in IDA (with the trailing zero) +""" + +ida_name.NT_ABS +""" +name is absolute symbol ( 'SEG_ABSSYM' ) +""" + +ida_name.NT_BMASK +""" +name is a bit group mask name +""" + +ida_name.NT_BYTE +""" +name is byte name (regular name) +""" + +ida_name.NT_ENUM +""" +name is symbolic constant +""" + +ida_name.NT_LOCAL +""" +name is local label +""" + +ida_name.NT_NONE +""" +name doesn't exist or has no value +""" + +ida_name.NT_REGVAR +""" +name is a renamed register (*value is idx into pfn->regvars) +""" + +ida_name.NT_SEG +""" +name is segment or segment register name +""" + +ida_name.NT_STKVAR +""" +name is stack variable name +""" + +ida_name.NT_STROFF +""" +name is structure member +""" + +ida_name.SN_AUTO +""" +if set, make name autogenerated +""" + +ida_name.SN_DELTAIL +""" +delete the hindering item + +if name cannot be set because of a tail byte, +""" + +ida_name.SN_FORCE +""" +if the specified name is already present in the database, try +variations with a numerical suffix like "_123" +""" + +ida_name.SN_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly. Specifying SN_IDBENC also implies SN_NODUMMY +""" + +ida_name.SN_LOCAL +""" +create local name. a function should exist. local names can't be +public or weak. also they are not included into the list of names they +can't have dummy prefixes. +""" + +ida_name.SN_NOCHECK +""" +Don't fail if the name contains invalid characters. If this bit is +clear, all invalid chars (those !is_ident_cp()) will be replaced by +SUBSTCHAR List of valid characters is defined in ida.cfg +""" + +ida_name.SN_NODUMMY +""" +automatically prepend the name with '_' if it begins with a dummy +suffix such as 'sub_'. See also SN_IDBENC +""" + +ida_name.SN_NOLIST +""" +if set, exclude name from the list. if not set, then include the name +into the list (however, if other bits are set, the name might be +immediately excluded from the list). +""" + +ida_name.SN_NON_AUTO +""" +if set, make name non-autogenerated +""" + +ida_name.SN_NON_PUBLIC +""" +if set, make name non-public +""" + +ida_name.SN_NON_WEAK +""" +if set, make name non-weak +""" + +ida_name.SN_NOWARN +""" +don't display a warning if failed +""" + +ida_name.SN_PUBLIC +""" +if set, make name public +""" + +ida_name.SN_WEAK +""" +if set, make name weak +""" +=== ida_name EPYDOC INJECTIONS END === +Help on function exist in module ida_netnode: + +exist(*args) -> 'bool' + exist(n) -> bool + +Help on class netnode in module ida_netnode: + +class netnode(builtins.object) + | Proxy of C++ netnode class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, n) -> bool + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> netnode + | __init__(self, num) -> netnode + | __init__(self, _name, namlen=0, do_create=False) -> netnode + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, n) -> bool + | __ne__(self, x) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_netnode(...) + | delete_netnode(self) + | + | altdel(self, *args) -> 'bool' + | altdel(self, alt, tag=atag) -> bool + | altdel(self) -> bool + | + | altdel_all(self, *args) -> 'bool' + | altdel_all(self, tag) -> bool + | + | altdel_ea(self, *args) -> 'bool' + | altdel_ea(self, ea, tag=atag) -> bool + | + | altdel_idx8(self, *args) -> 'bool' + | altdel_idx8(self, alt, tag) -> bool + | + | altfirst(self, *args) -> 'nodeidx_t' + | altfirst(self, tag=atag) -> nodeidx_t + | + | altfirst_idx8(self, *args) -> 'nodeidx_t' + | altfirst_idx8(self, tag) -> nodeidx_t + | + | altlast(self, *args) -> 'nodeidx_t' + | altlast(self, tag=atag) -> nodeidx_t + | + | altlast_idx8(self, *args) -> 'nodeidx_t' + | altlast_idx8(self, tag) -> nodeidx_t + | + | altnext(self, *args) -> 'nodeidx_t' + | altnext(self, cur, tag=atag) -> nodeidx_t + | + | altnext_idx8(self, *args) -> 'nodeidx_t' + | altnext_idx8(self, cur, tag) -> nodeidx_t + | + | altprev(self, *args) -> 'nodeidx_t' + | altprev(self, cur, tag=atag) -> nodeidx_t + | + | altprev_idx8(self, *args) -> 'nodeidx_t' + | altprev_idx8(self, cur, tag) -> nodeidx_t + | + | altset(self, *args) -> 'bool' + | altset(self, alt, value, tag=atag) -> bool + | + | altset_ea(self, *args) -> 'bool' + | altset_ea(self, ea, value, tag=atag) -> bool + | + | altset_idx8(self, *args) -> 'bool' + | altset_idx8(self, alt, val, tag) -> bool + | + | altshift(self, *args) -> 'size_t' + | altshift(self, _from, to, size, tag=atag) -> size_t + | + | altval(self, *args) -> 'nodeidx_t' + | altval(self, alt, tag=atag) -> nodeidx_t + | + | altval_ea(self, *args) -> 'nodeidx_t' + | altval_ea(self, ea, tag=atag) -> nodeidx_t + | + | altval_idx8(self, *args) -> 'nodeidx_t' + | altval_idx8(self, alt, tag) -> nodeidx_t + | + | blobsize(self, *args) -> 'size_t' + | blobsize(self, _start, tag) -> size_t + | + | blobsize_ea(self, *args) -> 'size_t' + | blobsize_ea(self, ea, tag) -> size_t + | + | chardel(self, *args) -> 'bool' + | chardel(self, alt, tag) -> bool + | + | chardel_ea(self, *args) -> 'bool' + | chardel_ea(self, ea, tag) -> bool + | + | chardel_idx8(self, *args) -> 'bool' + | chardel_idx8(self, alt, tag) -> bool + | + | charfirst(self, *args) -> 'nodeidx_t' + | charfirst(self, tag) -> nodeidx_t + | + | charfirst_idx8(self, *args) -> 'nodeidx_t' + | charfirst_idx8(self, tag) -> nodeidx_t + | + | charlast(self, *args) -> 'nodeidx_t' + | charlast(self, tag) -> nodeidx_t + | + | charlast_idx8(self, *args) -> 'nodeidx_t' + | charlast_idx8(self, tag) -> nodeidx_t + | + | charnext(self, *args) -> 'nodeidx_t' + | charnext(self, cur, tag) -> nodeidx_t + | + | charnext_idx8(self, *args) -> 'nodeidx_t' + | charnext_idx8(self, cur, tag) -> nodeidx_t + | + | charprev(self, *args) -> 'nodeidx_t' + | charprev(self, cur, tag) -> nodeidx_t + | + | charprev_idx8(self, *args) -> 'nodeidx_t' + | charprev_idx8(self, cur, tag) -> nodeidx_t + | + | charset(self, *args) -> 'bool' + | charset(self, alt, val, tag) -> bool + | + | charset_ea(self, *args) -> 'bool' + | charset_ea(self, ea, val, tag) -> bool + | + | charset_idx8(self, *args) -> 'bool' + | charset_idx8(self, alt, val, tag) -> bool + | + | charshift(self, *args) -> 'size_t' + | charshift(self, _from, to, size, tag) -> size_t + | + | charval(self, *args) -> 'uchar' + | charval(self, alt, tag) -> uchar + | + | charval_ea(self, *args) -> 'uchar' + | charval_ea(self, ea, tag) -> uchar + | + | charval_idx8(self, *args) -> 'uchar' + | charval_idx8(self, alt, tag) -> uchar + | + | copyto(self, *args) -> 'size_t' + | copyto(self, target, count=1) -> size_t + | + | create(self, *args) -> 'bool' + | create(self, _name, namlen=0) -> bool + | create(self) -> bool + | + | delblob(self, *args) -> 'int' + | delblob(self, _start, tag) -> int + | + | delblob_ea(self, *args) -> 'int' + | delblob_ea(self, ea, tag) -> int + | + | delvalue(self, *args) -> 'bool' + | delvalue(self) -> bool + | + | eadel(self, *args) -> 'bool' + | eadel(self, ea, tag) -> bool + | + | eadel_idx8(self, *args) -> 'bool' + | eadel_idx8(self, idx, tag) -> bool + | + | eaget(self, *args) -> 'ea_t' + | eaget(self, ea, tag) -> ea_t + | + | eaget_idx(self, *args) -> 'ea_t' + | eaget_idx(self, idx, tag) -> ea_t + | + | eaget_idx8(self, *args) -> 'ea_t' + | eaget_idx8(self, idx, tag) -> ea_t + | + | easet(self, *args) -> 'bool' + | easet(self, ea, addr, tag) -> bool + | + | easet_idx(self, *args) -> 'bool' + | easet_idx(self, idx, addr, tag) -> bool + | + | easet_idx8(self, *args) -> 'bool' + | easet_idx8(self, idx, addr, tag) -> bool + | + | end(self, *args) -> 'bool' + | end(self) -> bool + | + | get_name(self, *args) -> 'ssize_t' + | get_name(self) -> ssize_t + | + | getblob(self, *args) -> 'PyObject *' + | getblob(self, start, tag) -> PyObject * + | + | getblob_ea(self, *args) -> 'PyObject *' + | getblob_ea(self, ea, tag) -> PyObject * + | + | getclob(self, *args) -> 'PyObject *' + | getclob(self, start, tag) -> PyObject * + | + | hashdel(self, *args) -> 'bool' + | hashdel(self, idx, tag=htag) -> bool + | + | hashdel_all(self, *args) -> 'bool' + | hashdel_all(self, tag=htag) -> bool + | + | hashfirst(self, *args) -> 'ssize_t' + | hashfirst(self, tag=htag) -> ssize_t + | + | hashlast(self, *args) -> 'ssize_t' + | hashlast(self, tag=htag) -> ssize_t + | + | hashnext(self, *args) -> 'ssize_t' + | hashnext(self, idx, tag=htag) -> ssize_t + | + | hashprev(self, *args) -> 'ssize_t' + | hashprev(self, idx, tag=htag) -> ssize_t + | + | hashset(self, *args) -> 'bool' + | hashset(self, idx, value, tag=htag) -> bool + | + | hashset_buf(self, *args) -> 'bool' + | hashset_buf(self, idx, py_str, tag=htag) -> bool + | + | hashset_idx(self, *args) -> 'bool' + | hashset_idx(self, idx, value, tag=htag) -> bool + | + | hashstr(self, *args) -> 'ssize_t' + | hashstr(self, idx, tag=htag) -> ssize_t + | + | hashstr_buf(self, *args) -> 'PyObject *' + | hashstr_buf(self, idx, tag=htag) -> PyObject * + | + | hashval(self, *args) -> 'ssize_t' + | hashval(self, idx, tag=htag) -> ssize_t + | + | hashval_long(self, *args) -> 'nodeidx_t' + | hashval_long(self, idx, tag=htag) -> nodeidx_t + | + | index(self, *args) -> 'nodeidx_t' + | index(self) -> nodeidx_t + | + | kill(self, *args) -> 'void' + | kill(self) + | + | long_value(self, *args) -> 'nodeidx_t' + | long_value(self) -> nodeidx_t + | + | lower_bound(self, *args) -> 'nodeidx_t' + | lower_bound(self, cur, tag=stag) -> nodeidx_t + | + | lower_bound_ea(self, *args) -> 'nodeidx_t' + | lower_bound_ea(self, ea, tag=stag) -> nodeidx_t + | + | lower_bound_idx8(self, *args) -> 'nodeidx_t' + | lower_bound_idx8(self, alt, tag) -> nodeidx_t + | + | moveto(self, *args) -> 'size_t' + | moveto(self, target, count=1) -> size_t + | + | next(self, *args) -> 'bool' + | next(self) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self) -> bool + | + | rename(self, *args) -> 'bool' + | rename(self, newname, namlen=0) -> bool + | + | set(self, *args) -> 'bool' + | set(self, value) -> bool + | + | set_long(self, *args) -> 'bool' + | set_long(self, x) -> bool + | + | setblob(self, *args) -> 'bool' + | setblob(self, buf, _start, tag) -> bool + | + | setblob_ea(self, *args) -> 'bool' + | setblob_ea(self, buf, ea, tag) -> bool + | + | start(self, *args) -> 'bool' + | start(self) -> bool + | + | supdel(self, *args) -> 'bool' + | supdel(self, alt, tag=stag) -> bool + | supdel(self) -> bool + | + | supdel_all(self, *args) -> 'bool' + | supdel_all(self, tag) -> bool + | + | supdel_ea(self, *args) -> 'bool' + | supdel_ea(self, ea, tag=stag) -> bool + | + | supdel_idx8(self, *args) -> 'bool' + | supdel_idx8(self, alt, tag) -> bool + | + | supdel_range(self, *args) -> 'int' + | supdel_range(self, idx1, idx2, tag) -> int + | + | supdel_range_idx8(self, *args) -> 'int' + | supdel_range_idx8(self, idx1, idx2, tag) -> int + | + | supfirst(self, *args) -> 'nodeidx_t' + | supfirst(self, tag=stag) -> nodeidx_t + | + | supfirst_idx8(self, *args) -> 'nodeidx_t' + | supfirst_idx8(self, tag) -> nodeidx_t + | + | suplast(self, *args) -> 'nodeidx_t' + | suplast(self, tag=stag) -> nodeidx_t + | + | suplast_idx8(self, *args) -> 'nodeidx_t' + | suplast_idx8(self, tag) -> nodeidx_t + | + | supnext(self, *args) -> 'nodeidx_t' + | supnext(self, cur, tag=stag) -> nodeidx_t + | + | supnext_idx8(self, *args) -> 'nodeidx_t' + | supnext_idx8(self, alt, tag) -> nodeidx_t + | + | supprev(self, *args) -> 'nodeidx_t' + | supprev(self, cur, tag=stag) -> nodeidx_t + | + | supprev_idx8(self, *args) -> 'nodeidx_t' + | supprev_idx8(self, alt, tag) -> nodeidx_t + | + | supset(self, *args) -> 'bool' + | supset(self, alt, value, tag=stag) -> bool + | supset(self, alt, value, tag=stag) -> bool + | + | supset_ea(self, *args) -> 'bool' + | supset_ea(self, ea, value, tag=stag) -> bool + | supset_ea(self, ea, value, tag=stag) -> bool + | + | supset_idx8(self, *args) -> 'bool' + | supset_idx8(self, alt, value, tag) -> bool + | + | supshift(self, *args) -> 'size_t' + | supshift(self, _from, to, size, tag=stag) -> size_t + | + | supstr(self, *args) -> 'ssize_t' + | supstr(self, alt, tag=stag) -> ssize_t + | + | supstr_ea(self, *args) -> 'ssize_t' + | supstr_ea(self, ea, tag=stag) -> ssize_t + | + | supstr_idx8(self, *args) -> 'ssize_t' + | supstr_idx8(self, alt, tag) -> ssize_t + | + | supval(self, *args) -> 'ssize_t' + | supval(self, alt, tag=stag) -> ssize_t + | + | supval_ea(self, *args) -> 'ssize_t' + | supval_ea(self, ea, tag=stag) -> ssize_t + | + | supval_idx8(self, *args) -> 'ssize_t' + | supval_idx8(self, alt, tag) -> ssize_t + | + | valobj(self, *args) -> 'ssize_t' + | valobj(self) -> ssize_t + | + | valstr(self, *args) -> 'ssize_t' + | valstr(self) -> ssize_t + | + | value_exists(self, *args) -> 'bool' + | value_exists(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +=== ida_netnode EPYDOC INJECTIONS === +ida_netnode.BADNODE +""" +A number to represent a bad netnode reference. +""" +=== ida_netnode EPYDOC INJECTIONS END === +Help on function add_refinfo_dref in module ida_offset: + +add_refinfo_dref(*args) -> 'ea_t' + add_refinfo_dref(insn, _from, ri, opval, type, opoff) -> ea_t + + + Add xrefs for a reference from the given instruction (\insn_t{ea}). + This function creates a cross references to the target and the base. + 'insn_t::add_off_drefs()' calls this function to create xrefs for + 'offset' operand. + + @param insn: the referencing instruction (C++: const insn_t &) + @param _from: the referencing instruction/data address (C++: ea_t) + @param ri: reference info block from the database (C++: const + refinfo_t &) + @param opval: operand value (usually op_t::value or op_t::addr ) + (C++: adiff_t) + @param type: type of xref (C++: dref_t) + @param opoff: offset of the operand from the start of instruction + (C++: int) + @return: the target address of the reference + +Help on function calc_basevalue in module ida_offset: + +calc_basevalue(*args) -> 'ea_t' + calc_basevalue(target, base) -> ea_t + + + Calculate the value of the reference base. + + + @param target (C++: ea_t) + @param base (C++: ea_t) + +Help on function calc_offset_base in module ida_offset: + +calc_offset_base(*args) -> 'ea_t' + calc_offset_base(ea, n) -> ea_t + + + Try to calculate the offset base This function takes into account the + fixup information, current ds and cs values. + + @param ea: the referencing instruction/data address (C++: ea_t) + @param n: operand number 0: first operand 1: other operand (C++: + int) + @return: output base address or BADADDR + +Help on function calc_probable_base_by_value in module ida_offset: + +calc_probable_base_by_value(*args) -> 'ea_t' + calc_probable_base_by_value(ea, off) -> ea_t + + + Try to calculate the offset base. 2 bases are checked: current ds and + cs. If fails, return 'BADADDR' + + @param ea (C++: ea_t) + @param off (C++: uval_t) + +Help on function calc_reference_data in module ida_offset: + +calc_reference_data(*args) -> 'bool' + calc_reference_data(target, base, _from, ri, opval) -> bool + + + Calculate the target and base addresses of an offset expression. The + calculated target and base addresses are returned in the locations + pointed by 'base' and 'target'. In case 'ri.base' is 'BADADDR' , the + function calculates the offset base address from the referencing + instruction/data address. The target address is copied from ri.target. + If ri.target is 'BADADDR' then the target is calculated using the base + address and 'opval'. This function also checks if 'opval' matches the + full value of the reference and takes in account the memory-mapping. + + @param target: output target address (C++: ea_t *) + @param base: output base address (C++: ea_t *) + @param _from: the referencing instruction/data address (C++: ea_t) + @param ri: reference info block from the database (C++: const + refinfo_t &) + @param opval: operand value (usually op_t::value or op_t::addr ) + (C++: adiff_t) + @return: success + +Help on function calc_target in module ida_offset: + +calc_target(*args) -> 'ea_t' + calc_target(_from, opval, ri) -> ea_t + calc_target(_from, ea, n, opval) -> ea_t + + + Calculates the target, using the provided 'refinfo_t' . + + + @param _from (C++: ea_t) + @param opval (C++: adiff_t) + @param ri (C++: const refinfo_t &) + +Help on function can_be_off32 in module ida_offset: + +can_be_off32(*args) -> 'ea_t' + can_be_off32(ea) -> ea_t + + + Does the specified address contain a valid OFF32 value?. For symbols + in special segments the displacement is not taken into account. If + yes, then the target address of OFF32 will be returned. If not, then + 'BADADDR' is returned. + + @param ea (C++: ea_t) + +Help on function get_default_reftype in module ida_offset: + +get_default_reftype(*args) -> 'reftype_t' + get_default_reftype(ea) -> reftype_t + + + Get default reference type depending on the segment. + + @param ea (C++: ea_t) + @return: one of REF_OFF8 , REF_OFF16 , REF_OFF32 + +Help on function get_offbase in module ida_offset: + +get_offbase(*args) -> 'ea_t' + get_offbase(ea, n) -> ea_t + + + Get offset base value + + @param ea: linear address (C++: ea_t) + @param n: number of operand (C++: int) + @return: offset base or BADADDR + +Help on function get_offset_expr in module ida_offset: + +get_offset_expr(*args) -> 'qstring *' + get_offset_expr(ea, n, ri, _from, offset, getn_flags=0) -> str + + + See 'get_offset_expression()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param ri (C++: const refinfo_t &) + @param _from (C++: ea_t) + @param offset (C++: adiff_t) + @param getn_flags (C++: int) + +Help on function get_offset_expression in module ida_offset: + +get_offset_expression(*args) -> 'qstring *' + get_offset_expression(ea, n, _from, offset, getn_flags=0) -> str + + + Get offset expression (in the form "offset name+displ"). This function + uses offset translation function (\ph{translate}) if your IDP module + has such a function. Translation function is used to map linear + addresses in the program (only for offsets).Example: suppose we have + instruction at linear address 0x00011000: \v{mov ax, [bx+7422h]} and + at ds:7422h: \v{array dw ...} We want to represent the second operand + with an offset expression, so then we call: \v{ + get_offset_expresion(0x001100, 1, 0x001102, 0x7422, buf); | | | | | | + | | | +output buffer | | | +value of offset expression | | +address + offset value in the instruction | +the second operand +address of + instruction } and the function will return a colored string: \v{offset + array} + + @param ea: start of instruction or data with the offset expression + (C++: ea_t) + @param n: number of operand (may be ORed with OPND_OUTER ) 0: first + operand 1: second operand (C++: int) + @param _from: 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. (C++: ea_t) + @param offset: value of operand or its part. The function will return + text representation of this value as offset expression. + (C++: adiff_t) + @param getn_flags: combination of: GETN_APPZERO : meaningful only if + the name refers to a structure. appends the struct + field name if the field offset is zero + GETN_NODUMMY : do not generate dummy names for the + expression but pretend they already exist (useful + to verify that the offset expression can be + represented) (C++: int) + +Help on function op_offset in module ida_offset: + +op_offset(*args) -> 'int' + op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int + + + See 'op_offset_ex()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param type (C++: reftype_t) + @param target (C++: ea_t) + @param base (C++: ea_t) + @param tdelta (C++: adiff_t) + +Help on function op_offset_ex in module ida_offset: + +op_offset_ex(*args) -> 'int' + op_offset_ex(ea, n, ri) -> int + + + Convert operand to a reference. To delete an offset, use + 'clr_op_type()' function. + + @param ea: linear address. if 'ea' has unexplored bytes, try to + convert them to no segment: fail 16bit segment: to + 16bit word data 32bit segment: to dword (C++: ea_t) + @param n: number of operand (may be ORed with OPND_OUTER ) 0: first + 1: second 2: third OPND_MASK : all operands (C++: int) + @param ri: reference information (C++: const refinfo_t *) + @return: success + +Help on function op_plain_offset in module ida_offset: + +op_plain_offset(*args) -> 'bool' + op_plain_offset(ea, n, base) -> bool + + + Convert operand to a reference with the default reference type. + + + @param ea (C++: ea_t) + @param n (C++: int) + @param base (C++: ea_t) + +Help on class __qmutex_t in module ida_pro: + +class __qmutex_t(builtins.object) + | Proxy of C++ __qmutex_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qmutex_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete___qmutex_t(...) + | delete___qmutex_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 + +Help on class __qsemaphore_t in module ida_pro: + +class __qsemaphore_t(builtins.object) + | Proxy of C++ __qsemaphore_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qsemaphore_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete___qsemaphore_t(...) + | delete___qsemaphore_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 + +Help on class __qthread_t in module ida_pro: + +class __qthread_t(builtins.object) + | Proxy of C++ __qthread_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qthread_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete___qthread_t(...) + | delete___qthread_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 + +Help on class _qstrvec_t in module ida_pro: + +class _qstrvec_t(ida_idaapi.py_clinked_object_t) + | WARNING: It is very unlikely an IDAPython user should ever, ever + | have to use this type. It should only be used for IDAPython internals. + | + | For example, in py_askusingform.py, we ctypes-expose to the IDA + | kernel & UI a qstrvec instance, in case a DropdownListControl is + | constructed. + | That's because that's what ask_form expects, and we have no + | choice but to make a DropdownListControl hold a qstrvec_t. + | This is, afaict, the only situation where a Python + | _qstrvec_t is required. + | + | Method resolution order: + | _qstrvec_t + | ida_idaapi.py_clinked_object_t + | ida_idaapi.pyidc_opaque_object_t + | builtins.object + | + | Methods defined here: + | + | __getitem__(self, idx) + | Gets the string at the given index + | + | __init__(self, items=None) + | Initialize self. See help(type(self)) for accurate signature. + | + | __setitem__(self, idx, s) + | Sets string at the given index + | + | _create_clink(self) + | Overwrite me. + | Creates a new clink + | @return: PyCapsule representing the C link + | + | _del_clink(self, lnk) + | Overwrite me. + | This method deletes the link + | + | _get_clink_ptr(self) + | Overwrite me. + | Returns the C link pointer as a 64bit number + | + | _qstrvec_t__get_size = __get_size(self) + | + | add(self, s) + | Add a string to the vector + | + | addressof(self, idx) + | Returns the address (as number) of the qstring at the given index + | + | assign(self, other) + | Copies the contents of 'other' to 'self' + | + | clear(self, qclear=False) + | Clears all strings from the vector. + | @param qclear: Just reset the size but do not actually free the memory + | + | from_list(self, lst) + | Populates the vector from a Python string list + | + | insert(self, idx, s) + | Insert a string into the vector + | + | remove(self, idx) + | Removes a string from the vector + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | size + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_idaapi.py_clinked_object_t: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.py_clinked_object_t: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on class boolvec_t in module ida_pro: + +class boolvec_t(builtins.object) + | Proxy of C++ qvector< bool > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'bool const &' + | __getitem__(self, i) -> bool const & + | + | __init__(self, *args) + | __init__(self) -> boolvec_t + | __init__(self, x) -> boolvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_boolvec_t(...) + | delete_boolvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'bool &' + | + | at = __getitem__(self, *args) -> 'bool const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< bool >::const_iterator' + | begin(self) -> qvector< bool >::iterator + | begin(self) -> qvector< bool >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< bool >::const_iterator' + | end(self) -> qvector< bool >::iterator + | end(self) -> qvector< bool >::const_iterator + | + | erase(self, *args) -> 'qvector< bool >::iterator' + | erase(self, it) -> qvector< bool >::iterator + | erase(self, first, last) -> qvector< bool >::iterator + | + | extract(self, *args) -> 'bool *' + | extract(self) -> bool * + | + | find(self, *args) -> 'qvector< bool >::const_iterator' + | find(self, x) -> qvector< bool >::iterator + | find(self, x) -> qvector< bool >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=bool()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< bool >::iterator' + | insert(self, it, x) -> qvector< bool >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'bool &' + | push_back(self, x) + | push_back(self) -> bool & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class channel_redir_t in module ida_pro: + +class channel_redir_t(builtins.object) + | Proxy of C++ channel_redir_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> channel_redir_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_channel_redir_t(...) + | delete_channel_redir_t(self) + | + | is_append(self, *args) -> 'bool' + | is_append(self) -> bool + | + | is_input(self, *args) -> 'bool' + | is_input(self) -> bool + | + | is_output(self, *args) -> 'bool' + | is_output(self) -> bool + | + | is_quoted(self, *args) -> 'bool' + | is_quoted(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fd + | channel_redir_t_fd_get(self) -> int + | + | file + | channel_redir_t_file_get(self) -> qstring * + | + | flags + | channel_redir_t_flags_get(self) -> int + | + | length + | channel_redir_t_length_get(self) -> int + | + | start + | channel_redir_t_start_get(self) -> int + | + | thisown + | The membership flag + +Help on function check_process_exit in module ida_pro: + +check_process_exit(*args) -> 'int' + check_process_exit(handle, exit_code, msecs=-1) -> int + + + Check whether process has terminated or not. + + @param handle: process handle to wait for (C++: void *) + @param exit_code: pointer to the buffer for the exit code (C++: int *) + +Help on function clear_bits in module ida_pro: + +clear_bits(*args) -> 'void' + clear_bits(bitmap, low, high) + + + Clear bits between [low, high) in 'bitmap'. + + + @param bitmap (C++: uchar *) + @param low (C++: size_t) + @param high (C++: size_t) + +Help on class ea_array in module ida_pro: + +class ea_array(builtins.object) + | Proxy of C++ ea_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'ea_t' + | __getitem__(self, index) -> ea_t + | + | __init__(self, *args) + | __init__(self, nelements) -> ea_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, index, value) + | + | __swig_destroy__ = delete_ea_array(...) + | delete_ea_array(self) + | + | cast(self, *args) -> 'ea_t *' + | cast(self) -> ea_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'ea_array *' + | frompointer(t) -> ea_array + | + | ---------------------------------------------------------------------- + | 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 + +Help on function ea_array_frompointer in module ida_pro: + +ea_array_frompointer(*args) -> 'ea_array *' + ea_array_frompointer(t) -> ea_array + +Help on class ea_pointer in module ida_pro: + +class ea_pointer(builtins.object) + | Proxy of C++ ea_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ea_pointer + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ea_pointer(...) + | delete_ea_pointer(self) + | + | assign(self, *args) -> 'void' + | assign(self, value) + | + | cast(self, *args) -> 'ea_t *' + | cast(self) -> ea_t * + | + | value(self, *args) -> 'ea_t' + | value(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'ea_pointer *' + | frompointer(t) -> ea_pointer + | + | ---------------------------------------------------------------------- + | 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 + +Help on function ea_pointer_frompointer in module ida_pro: + +ea_pointer_frompointer(*args) -> 'ea_pointer *' + ea_pointer_frompointer(t) -> ea_pointer + +Help on function extend_sign in module ida_pro: + +extend_sign(*args) -> 'uint64' + extend_sign(v, nbytes, sign_extend) -> uint64 + + + Sign-, or zero-extend the value 'v' to occupy 64 bits. The value 'v' + is considered to be of size 'nbytes'. + + @param v (C++: uint64) + @param nbytes (C++: int) + @param sign_extend (C++: bool) + +Help on class instant_dbgopts_t in module ida_pro: + +class instant_dbgopts_t(builtins.object) + | Proxy of C++ instant_dbgopts_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> instant_dbgopts_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_instant_dbgopts_t(...) + | delete_instant_dbgopts_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _pass + | instant_dbgopts_t__pass_get(self) -> qstring * + | + | attach + | instant_dbgopts_t_attach_get(self) -> bool + | + | debmod + | instant_dbgopts_t_debmod_get(self) -> qstring * + | + | env + | instant_dbgopts_t_env_get(self) -> qstring * + | + | event_id + | instant_dbgopts_t_event_id_get(self) -> int + | + | host + | instant_dbgopts_t_host_get(self) -> qstring * + | + | pid + | instant_dbgopts_t_pid_get(self) -> int + | + | port + | instant_dbgopts_t_port_get(self) -> int + | + | thisown + | The membership flag + +Help on class longlongvec_t in module ida_pro: + +class longlongvec_t(builtins.object) + | Proxy of C++ qvector< long long > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'long long const &' + | __getitem__(self, i) -> long long const & + | + | __init__(self, *args) + | __init__(self) -> longlongvec_t + | __init__(self, x) -> longlongvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_longlongvec_t(...) + | delete_longlongvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'long long &' + | + | at = __getitem__(self, *args) -> 'long long const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< long long >::const_iterator' + | begin(self) -> qvector< long long >::iterator + | begin(self) -> qvector< long long >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< long long >::const_iterator' + | end(self) -> qvector< long long >::iterator + | end(self) -> qvector< long long >::const_iterator + | + | erase(self, *args) -> 'qvector< long long >::iterator' + | erase(self, it) -> qvector< long long >::iterator + | erase(self, first, last) -> qvector< long long >::iterator + | + | extract(self, *args) -> 'long long *' + | extract(self) -> long long * + | + | find(self, *args) -> 'qvector< long long >::const_iterator' + | find(self, x) -> qvector< long long >::iterator + | find(self, x) -> qvector< long long >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< long long >::iterator' + | insert(self, it, x) -> qvector< long long >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'long long &' + | push_back(self, x) + | push_back(self) -> long long & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class int_pointer in module ida_pro: + +class int_pointer(builtins.object) + | Proxy of C++ int_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> int_pointer + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_int_pointer(...) + | delete_int_pointer(self) + | + | assign(self, *args) -> 'void' + | assign(self, value) + | + | cast(self, *args) -> 'int *' + | cast(self) -> int * + | + | value(self, *args) -> 'int' + | value(self) -> int + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'int_pointer *' + | frompointer(t) -> int_pointer + | + | ---------------------------------------------------------------------- + | 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 + +Help on function int_pointer_frompointer in module ida_pro: + +int_pointer_frompointer(*args) -> 'int_pointer *' + int_pointer_frompointer(t) -> int_pointer + +Help on class intvec_t in module ida_pro: + +class intvec_t(builtins.object) + | Proxy of C++ qvector< int > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'int const &' + | __getitem__(self, i) -> int const & + | + | __init__(self, *args) + | __init__(self) -> intvec_t + | __init__(self, x) -> intvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_intvec_t(...) + | delete_intvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'int &' + | + | at = __getitem__(self, *args) -> 'int const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< int >::const_iterator' + | begin(self) -> qvector< int >::iterator + | begin(self) -> qvector< int >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< int >::const_iterator' + | end(self) -> qvector< int >::iterator + | end(self) -> qvector< int >::const_iterator + | + | erase(self, *args) -> 'qvector< int >::iterator' + | erase(self, it) -> qvector< int >::iterator + | erase(self, first, last) -> qvector< int >::iterator + | + | extract(self, *args) -> 'int *' + | extract(self) -> int * + | + | find(self, *args) -> 'qvector< int >::const_iterator' + | find(self, x) -> qvector< int >::iterator + | find(self, x) -> qvector< int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< int >::iterator' + | insert(self, it, x) -> qvector< int >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'int &' + | push_back(self, x) + | push_back(self) -> int & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function is_control_tty in module ida_pro: + +is_control_tty(*args) -> 'enum tty_control_t' + is_control_tty(fd) -> enum tty_control_t + + + Check if the current process is the owner of the TTY specified by 'fd' + (typically an opened descriptor to /dev/tty). + + @param fd (C++: int) + +Help on function is_main_thread in module ida_pro: + +is_main_thread(*args) -> 'bool' + is_main_thread() -> bool + + + Are we running in the main thread? + +Help on function log2ceil in module ida_pro: + +log2ceil(*args) -> 'int' + log2ceil(d64) -> int + + + calculate ceil(log2(d64)) or floor(log2(d64)), it returns 0 if d64 == + 0 + + @param d64 (C++: uint64) + +Help on function log2floor in module ida_pro: + +log2floor(*args) -> 'int' + log2floor(d64) -> int + +Help on function parse_dbgopts in module ida_pro: + +parse_dbgopts(*args) -> 'bool' + parse_dbgopts(ido, r_switch) -> bool + + + Parse the -r command line switch (for instant debugging). r_switch + points to the value of the -r switch. Example: win32@localhost+ + + @param ido (C++: struct instant_dbgopts_t *) + @param r_switch (C++: const char *) + @return: true-ok, false-parse error + +Help on function qatoll in module ida_pro: + +qatoll(*args) -> 'int64' + qatoll(nptr) -> int64 + +Help on function qcontrol_tty in module ida_pro: + +qcontrol_tty(*args) -> 'void' + qcontrol_tty() + + + Make the current terminal the controlling terminal of the calling + process.The current terminal is supposed to be /dev/tty + +Help on function qdetach_tty in module ida_pro: + +qdetach_tty(*args) -> 'void' + qdetach_tty() + + + If the current terminal is the controlling terminal of the calling + process, give up this controlling terminal.The current terminal is + supposed to be /dev/tty + +Help on function qexit in module ida_pro: + +qexit(*args) -> 'void' + qexit(code) + + + Call qatexit functions, shut down UI and kernel, and exit. + + @param code: exit code (C++: int) + +Help on class qmutex_locker_t in module ida_pro: + +class qmutex_locker_t(builtins.object) + | Proxy of C++ qmutex_locker_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _lock) -> qmutex_locker_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qmutex_locker_t(...) + | delete_qmutex_locker_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 + +Help on class qrefcnt_obj_t in module ida_pro: + +class qrefcnt_obj_t(builtins.object) + | Proxy of C++ qrefcnt_obj_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qrefcnt_obj_t(...) + | delete_qrefcnt_obj_t(self) + | + | release(self, *args) -> 'void' + | release(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | refcnt + | qrefcnt_obj_t_refcnt_get(self) -> int + | + | thisown + | The membership flag + +Help on function qstrvec_t_add in module ida_pro: + +qstrvec_t_add(*args) -> 'bool' + qstrvec_t_add(_self, s) -> bool + +Help on function qstrvec_t_addressof in module ida_pro: + +qstrvec_t_addressof(*args) -> 'PyObject *' + qstrvec_t_addressof(_self, idx) -> PyObject * + +Help on function qstrvec_t_assign in module ida_pro: + +qstrvec_t_assign(*args) -> 'bool' + qstrvec_t_assign(_self, other) -> bool + +Help on function qstrvec_t_clear in module ida_pro: + +qstrvec_t_clear(*args) -> 'bool' + qstrvec_t_clear(_self, qclear) -> bool + +Help on function qstrvec_t_create in module ida_pro: + +qstrvec_t_create(*args) -> 'PyObject *' + qstrvec_t_create() -> PyObject * + +Help on function qstrvec_t_destroy in module ida_pro: + +qstrvec_t_destroy(*args) -> 'bool' + qstrvec_t_destroy(py_obj) -> bool + +Help on function qstrvec_t_from_list in module ida_pro: + +qstrvec_t_from_list(*args) -> 'bool' + qstrvec_t_from_list(_self, py_list) -> bool + +Help on function qstrvec_t_get in module ida_pro: + +qstrvec_t_get(*args) -> 'PyObject *' + qstrvec_t_get(_self, idx) -> PyObject * + +Help on function qstrvec_t_get_clink in module ida_pro: + +qstrvec_t_get_clink(*args) -> 'qstrvec_t *' + qstrvec_t_get_clink(_self) -> qstrvec_t * + +Help on function qstrvec_t_get_clink_ptr in module ida_pro: + +qstrvec_t_get_clink_ptr(*args) -> 'PyObject *' + qstrvec_t_get_clink_ptr(_self) -> PyObject * + +Help on function qstrvec_t_insert in module ida_pro: + +qstrvec_t_insert(*args) -> 'bool' + qstrvec_t_insert(_self, idx, s) -> bool + +Help on function qstrvec_t_remove in module ida_pro: + +qstrvec_t_remove(*args) -> 'bool' + qstrvec_t_remove(_self, idx) -> bool + +Help on function qstrvec_t_set in module ida_pro: + +qstrvec_t_set(*args) -> 'bool' + qstrvec_t_set(_self, idx, s) -> bool + +Help on function qstrvec_t_size in module ida_pro: + +qstrvec_t_size(*args) -> 'size_t' + qstrvec_t_size(_self) -> size_t + +Help on function quote_cmdline_arg in module ida_pro: + +quote_cmdline_arg(*args) -> 'bool' + quote_cmdline_arg(arg) -> bool + + + Quote a command line argument if it contains escape characters. For + example, *.c will be converted into "*.c" because * may be + inadvertently expanded by the shell + + @param arg (C++: qstring *) + @return: true: modified 'arg' + +Help on function qvector_reserve in module ida_pro: + +qvector_reserve(*args) -> 'void *' + qvector_reserve(vec, old, cnt, elsize) -> void * + + + Change capacity of given qvector. + + @param vec: a pointer to a qvector (C++: void *) + @param old: a pointer to the qvector's array (C++: void *) + @param cnt: number of elements to reserve (C++: size_t) + @param elsize: size of each element (C++: size_t) + @return: a pointer to the newly allocated array + +Help on function readbytes in module ida_pro: + +readbytes(*args) -> 'int' + readbytes(h, res, size, mf) -> int + + + Read at most 4 bytes from file. + + @param h: file handle (C++: int) + @param res: value read from file (C++: uint32 *) + @param size: size of value in bytes (1,2,4) (C++: int) + @param mf: is MSB first? (C++: bool) + @return: 0 on success, nonzero otherwise + +Help on function reloc_value in module ida_pro: + +reloc_value(*args) -> 'void' + reloc_value(value, size, delta, mf) + +Help on function relocate_relobj in module ida_pro: + +relocate_relobj(*args) -> 'bool' + relocate_relobj(_relobj, ea, mf) -> bool + +Help on class sel_array in module ida_pro: + +class sel_array(builtins.object) + | Proxy of C++ sel_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'sel_t' + | __getitem__(self, index) -> sel_t + | + | __init__(self, *args) + | __init__(self, nelements) -> sel_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, index, value) + | + | __swig_destroy__ = delete_sel_array(...) + | delete_sel_array(self) + | + | cast(self, *args) -> 'sel_t *' + | cast(self) -> sel_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'sel_array *' + | frompointer(t) -> sel_array + | + | ---------------------------------------------------------------------- + | 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 + +Help on function sel_array_frompointer in module ida_pro: + +sel_array_frompointer(*args) -> 'sel_array *' + sel_array_frompointer(t) -> sel_array + +Help on class sel_pointer in module ida_pro: + +class sel_pointer(builtins.object) + | Proxy of C++ sel_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sel_pointer + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_sel_pointer(...) + | delete_sel_pointer(self) + | + | assign(self, *args) -> 'void' + | assign(self, value) + | + | cast(self, *args) -> 'sel_t *' + | cast(self) -> sel_t * + | + | value(self, *args) -> 'sel_t' + | value(self) -> sel_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'sel_pointer *' + | frompointer(t) -> sel_pointer + | + | ---------------------------------------------------------------------- + | 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 + +Help on function sel_pointer_frompointer in module ida_pro: + +sel_pointer_frompointer(*args) -> 'sel_pointer *' + sel_pointer_frompointer(t) -> sel_pointer + +Help on function set_bits in module ida_pro: + +set_bits(*args) -> 'void' + set_bits(bitmap, low, high) + + + Set bits between [low, high) in 'bitmap'. + + + @param bitmap (C++: uchar *) + @param low (C++: size_t) + @param high (C++: size_t) + +Help on class sizevec_t in module ida_pro: + +class sizevec_t(builtins.object) + | Proxy of C++ qvector< size_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'size_t const &' + | __getitem__(self, i) -> size_t const & + | + | __init__(self, *args) + | __init__(self) -> sizevec_t + | __init__(self, x) -> sizevec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_sizevec_t(...) + | delete_sizevec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'size_t const &' + | at(self, _idx) -> size_t const & + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< size_t >::const_iterator' + | begin(self) -> qvector< size_t >::iterator + | begin(self) -> qvector< size_t >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< size_t >::const_iterator' + | end(self) -> qvector< size_t >::iterator + | end(self) -> qvector< size_t >::const_iterator + | + | erase(self, *args) -> 'qvector< size_t >::iterator' + | erase(self, it) -> qvector< size_t >::iterator + | erase(self, first, last) -> qvector< size_t >::iterator + | + | extract(self, *args) -> 'size_t *' + | extract(self) -> size_t * + | + | find(self, *args) -> 'qvector< size_t >::const_iterator' + | find(self, x) -> qvector< size_t >::iterator + | find(self, x) -> qvector< size_t >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=size_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< size_t >::iterator' + | insert(self, it, x) -> qvector< size_t >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'size_t &' + | push_back(self, x) + | push_back(self) -> size_t & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function str2user in module ida_pro: + +str2user(*args) -> 'PyObject *' + str2user(str) -> PyObject * + + + Insert C-style escape characters to string + + @return: new string with escape characters inserted + +Help on class strvec_t in module ida_pro: + +class strvec_t(builtins.object) + | Proxy of C++ qvector< simpleline_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'simpleline_t const &' + | __getitem__(self, i) -> simpleline_t const & + | + | __init__(self, *args) + | __init__(self) -> strvec_t + | __init__(self, x) -> strvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_strvec_t(...) + | delete_strvec_t(self) + | + | append = push_back(self, *args) -> 'simpleline_t &' + | + | at = __getitem__(self, *args) -> 'simpleline_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< simpleline_t >::const_iterator' + | begin(self) -> qvector< simpleline_t >::iterator + | begin(self) -> qvector< simpleline_t >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< simpleline_t >::const_iterator' + | end(self) -> qvector< simpleline_t >::iterator + | end(self) -> qvector< simpleline_t >::const_iterator + | + | erase(self, *args) -> 'qvector< simpleline_t >::iterator' + | erase(self, it) -> qvector< simpleline_t >::iterator + | erase(self, first, last) -> qvector< simpleline_t >::iterator + | + | extract(self, *args) -> 'simpleline_t *' + | extract(self) -> simpleline_t * + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=simpleline_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< simpleline_t >::iterator' + | insert(self, it, x) -> qvector< simpleline_t >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'simpleline_t &' + | push_back(self, x) + | push_back(self) -> simpleline_t & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class sval_pointer in module ida_pro: + +class sval_pointer(builtins.object) + | Proxy of C++ sval_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sval_pointer + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_sval_pointer(...) + | delete_sval_pointer(self) + | + | assign(self, *args) -> 'void' + | assign(self, value) + | + | cast(self, *args) -> 'sval_t *' + | cast(self) -> sval_t * + | + | value(self, *args) -> 'sval_t' + | value(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'sval_pointer *' + | frompointer(t) -> sval_pointer + | + | ---------------------------------------------------------------------- + | 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 + +Help on function sval_pointer_frompointer in module ida_pro: + +sval_pointer_frompointer(*args) -> 'sval_pointer *' + sval_pointer_frompointer(t) -> sval_pointer + +Help on class tid_array in module ida_pro: + +class tid_array(builtins.object) + | Proxy of C++ tid_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'tid_t' + | __getitem__(self, index) -> tid_t + | + | __init__(self, *args) + | __init__(self, nelements) -> tid_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, index, value) + | + | __swig_destroy__ = delete_tid_array(...) + | delete_tid_array(self) + | + | cast(self, *args) -> 'tid_t *' + | cast(self) -> tid_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'tid_array *' + | frompointer(t) -> tid_array + | + | ---------------------------------------------------------------------- + | 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 + +Help on function tid_array_frompointer in module ida_pro: + +tid_array_frompointer(*args) -> 'tid_array *' + tid_array_frompointer(t) -> tid_array + +Help on class uchar_array in module ida_pro: + +class uchar_array(builtins.object) + | Proxy of C++ uchar_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'uchar' + | __getitem__(self, index) -> uchar + | + | __init__(self, *args) + | __init__(self, nelements) -> uchar_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, index, value) + | + | __swig_destroy__ = delete_uchar_array(...) + | delete_uchar_array(self) + | + | cast(self, *args) -> 'uchar *' + | cast(self) -> uchar * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'uchar_array *' + | frompointer(t) -> uchar_array + | + | ---------------------------------------------------------------------- + | 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 + +Help on function uchar_array_frompointer in module ida_pro: + +uchar_array_frompointer(*args) -> 'uchar_array *' + uchar_array_frompointer(t) -> uchar_array + +Help on class ulonglongvec_t in module ida_pro: + +class ulonglongvec_t(builtins.object) + | Proxy of C++ qvector< unsigned long long > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'unsigned long long const &' + | __getitem__(self, i) -> unsigned long long const & + | + | __init__(self, *args) + | __init__(self) -> ulonglongvec_t + | __init__(self, x) -> ulonglongvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_ulonglongvec_t(...) + | delete_ulonglongvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'unsigned long long &' + | + | at = __getitem__(self, *args) -> 'unsigned long long const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< unsigned long long >::const_iterator' + | begin(self) -> qvector< unsigned long long >::iterator + | begin(self) -> qvector< unsigned long long >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< unsigned long long >::const_iterator' + | end(self) -> qvector< unsigned long long >::iterator + | end(self) -> qvector< unsigned long long >::const_iterator + | + | erase(self, *args) -> 'qvector< unsigned long long >::iterator' + | erase(self, it) -> qvector< unsigned long long >::iterator + | erase(self, first, last) -> qvector< unsigned long long >::iterator + | + | extract(self, *args) -> 'unsigned long long *' + | extract(self) -> unsigned long long * + | + | find(self, *args) -> 'qvector< unsigned long long >::const_iterator' + | find(self, x) -> qvector< unsigned long long >::iterator + | find(self, x) -> qvector< unsigned long long >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< unsigned long long >::iterator' + | insert(self, it, x) -> qvector< unsigned long long >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'unsigned long long &' + | push_back(self, x) + | push_back(self) -> unsigned long long & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class uintvec_t in module ida_pro: + +class uintvec_t(builtins.object) + | Proxy of C++ qvector< unsigned int > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'unsigned int const &' + | __getitem__(self, i) -> unsigned int const & + | + | __init__(self, *args) + | __init__(self) -> uintvec_t + | __init__(self, x) -> uintvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_uintvec_t(...) + | delete_uintvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'unsigned int &' + | + | at = __getitem__(self, *args) -> 'unsigned int const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< unsigned int >::const_iterator' + | begin(self) -> qvector< unsigned int >::iterator + | begin(self) -> qvector< unsigned int >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< unsigned int >::const_iterator' + | end(self) -> qvector< unsigned int >::iterator + | end(self) -> qvector< unsigned int >::const_iterator + | + | erase(self, *args) -> 'qvector< unsigned int >::iterator' + | erase(self, it) -> qvector< unsigned int >::iterator + | erase(self, first, last) -> qvector< unsigned int >::iterator + | + | extract(self, *args) -> 'unsigned int *' + | extract(self) -> unsigned int * + | + | find(self, *args) -> 'qvector< unsigned int >::const_iterator' + | find(self, x) -> qvector< unsigned int >::iterator + | find(self, x) -> qvector< unsigned int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< unsigned int >::iterator' + | insert(self, it, x) -> qvector< unsigned int >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'unsigned int &' + | push_back(self, x) + | push_back(self) -> unsigned int & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class uval_array in module ida_pro: + +class uval_array(builtins.object) + | Proxy of C++ uval_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'uval_t' + | __getitem__(self, index) -> uval_t + | + | __init__(self, *args) + | __init__(self, nelements) -> uval_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, index, value) + | + | __swig_destroy__ = delete_uval_array(...) + | delete_uval_array(self) + | + | cast(self, *args) -> 'uval_t *' + | cast(self) -> uval_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'uval_array *' + | frompointer(t) -> uval_array + | + | ---------------------------------------------------------------------- + | 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 + +Help on function uval_array_frompointer in module ida_pro: + +uval_array_frompointer(*args) -> 'uval_array *' + uval_array_frompointer(t) -> uval_array + +Help on function writebytes in module ida_pro: + +writebytes(*args) -> 'int' + writebytes(h, l, size, mf) -> int + + + Write at most 4 bytes to file. + + @param h: file handle (C++: int) + @param l: value to write (C++: uint32) + @param size: size of value in bytes (1,2,4) (C++: int) + @param mf: is MSB first? (C++: bool) + @return: 0 on success, nonzero otherwise + +=== ida_pro EPYDOC INJECTIONS === +ida_pro.CP_UTF16 +""" +UTF-16 codepage. +""" + +ida_pro.IDA_SDK_VERSION +""" +IDA SDK v7.4. +""" + +ida_pro.IDBDEC_ESCAPE +""" +convert non-printable characters to C escapes (, \\xNN, \\uNNNN) +""" + +ida_pro.IOREDIR_APPEND +""" +append, do not overwrite the output file +""" + +ida_pro.IOREDIR_INPUT +""" +input redirection +""" + +ida_pro.IOREDIR_OUTPUT +""" +output redirection +""" + +ida_pro.IOREDIR_QUOTED +""" +the file name was quoted +""" + +ida_pro.MAXSTR +""" +maximum string size +""" + +ida_pro.SUBSTCHAR +""" +default char, used if a char cannot be represented in a codepage +""" + +ida_pro.__MF__ +""" +byte sex of our platform (Most significant byte First). 0: little +endian (Intel 80x86). 1: big endian (PowerPC). +""" +=== ida_pro EPYDOC INJECTIONS END === +Help on function forget_problem in module ida_problems: + +forget_problem(*args) -> 'bool' + forget_problem(type, ea) -> bool + + + Remove an address from a problem list + + @param type: problem list type (C++: problist_id_t) + @param ea: linear address (C++: ea_t) + @return: success + +Help on function get_problem in module ida_problems: + +get_problem(*args) -> 'ea_t' + get_problem(type, lowea) -> ea_t + + + Get an address from the specified problem list. The address is not + removed from the list. + + @param type: problem list type (C++: problist_id_t) + @param lowea: the returned address will be higher or equal than the + specified address (C++: ea_t) + @return: linear address or BADADDR + +Help on function get_problem_desc in module ida_problems: + +get_problem_desc(*args) -> 'qstring *' + get_problem_desc(t, ea) -> str + + + Get the human-friendly description of the problem, if one was provided + to remember_problem. + + @param t: problem list type. (C++: problist_id_t) + @param ea: linear address. (C++: ea_t) + @return: the message length or -1 if none + +Help on function get_problem_name in module ida_problems: + +get_problem_name(*args) -> 'char const *' + get_problem_name(type, longname=True) -> char const * + + + Get problem list description. + + + @param type (C++: problist_id_t) + @param longname (C++: bool) + +Help on function is_problem_present in module ida_problems: + +is_problem_present(*args) -> 'bool' + is_problem_present(t, ea) -> bool + + + Check if the specified address is present in the problem list. + + + @param t (C++: problist_id_t) + @param ea (C++: ea_t) + +Help on function remember_problem in module ida_problems: + +remember_problem(*args) -> 'void' + remember_problem(type, ea, msg=None) + + + Insert an address to a list of problems. Display a message saying + about the problem (except of 'PR_ATTN' , 'PR_FINAL' ) 'PR_JUMP' is + temporarily ignored. + + @param type: problem list type (C++: problist_id_t) + @param ea: linear address (C++: ea_t) + @param msg: a user-friendly message to be displayed instead of the + default more generic one associated with the type of + problem. Defaults to NULL. (C++: const char *) + +Help on function was_ida_decision in module ida_problems: + +was_ida_decision(*args) -> 'bool' + was_ida_decision(ea) -> bool + +Help on class array_of_rangesets in module ida_range: + +class array_of_rangesets(builtins.object) + | Proxy of C++ qvector< rangeset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'rangeset_t const &' + | __getitem__(self, i) -> rangeset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_rangesets + | __init__(self, x) -> array_of_rangesets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_array_of_rangesets(...) + | delete_array_of_rangesets(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'rangeset_t const &' + | at(self, _idx) -> rangeset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< rangeset_t >::const_iterator' + | begin(self) -> rangeset_t + | begin(self) -> rangeset_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< rangeset_t >::const_iterator' + | end(self) -> rangeset_t + | end(self) -> rangeset_t + | + | erase(self, *args) -> 'qvector< rangeset_t >::iterator' + | erase(self, it) -> rangeset_t + | erase(self, first, last) -> rangeset_t + | + | extract(self, *args) -> 'rangeset_t *' + | extract(self) -> rangeset_t + | + | find(self, *args) -> 'qvector< rangeset_t >::const_iterator' + | find(self, x) -> rangeset_t + | find(self, x) -> rangeset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=rangeset_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< rangeset_t >::iterator' + | insert(self, it, x) -> rangeset_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'rangeset_t &' + | push_back(self, x) + | push_back(self) -> rangeset_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class range_t in module ida_range: + +class range_t(builtins.object) + | Proxy of C++ range_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> range_t + | __init__(self, ea1, ea2) -> range_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_range_t(...) + | delete_range_t(self) + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function range_t_print in module ida_range: + +range_t_print(*args) -> 'size_t' + range_t_print(cb) -> str + + + Helper function. Should not be called directly! + +Help on class rangeset_t in module ida_range: + +class rangeset_t(builtins.object) + | Proxy of C++ rangeset_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, aset) -> bool + | + | __getitem__(self, idx) + | + | __init__(self, *args) + | __init__(self) -> rangeset_t + | __init__(self, range) -> rangeset_t + | __init__(self, ivs) -> rangeset_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = nranges(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, aset) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_rangeset_t(...) + | delete_rangeset_t(self) + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | add(self, *args) -> 'bool' + | add(self, range) -> bool + | add(self, start, _end) -> bool + | add(self, aset) -> bool + | + | begin(self, *args) -> 'rangeset_t::iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | cached_range(self, *args) -> 'range_t const *' + | cached_range(self) -> range_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, aset) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'rangeset_t::iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | find_range(self, *args) -> 'range_t const *' + | find_range(self, ea) -> range_t + | + | getrange(self, *args) -> 'range_t const &' + | getrange(self, idx) -> range_t + | + | has_common(self, *args) -> 'bool' + | has_common(self, range) -> bool + | has_common(self, aset) -> bool + | + | includes(self, *args) -> 'bool' + | includes(self, range) -> bool + | + | intersect(self, *args) -> 'bool' + | intersect(self, aset) -> bool + | + | is_equal(self, *args) -> 'bool' + | is_equal(self, aset) -> bool + | + | is_subset_of(self, *args) -> 'bool' + | is_subset_of(self, aset) -> bool + | + | lastrange(self, *args) -> 'range_t const &' + | lastrange(self) -> range_t + | + | next_addr(self, *args) -> 'ea_t' + | next_addr(self, ea) -> ea_t + | + | next_range(self, *args) -> 'ea_t' + | next_range(self, ea) -> ea_t + | + | nranges(self, *args) -> 'size_t' + | nranges(self) -> size_t + | + | prev_addr(self, *args) -> 'ea_t' + | prev_addr(self, ea) -> ea_t + | + | prev_range(self, *args) -> 'ea_t' + | prev_range(self, ea) -> ea_t + | + | sub(self, *args) -> 'bool' + | sub(self, range) -> bool + | sub(self, ea) -> bool + | sub(self, aset) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class rangevec_base_t in module ida_range: + +class rangevec_base_t(builtins.object) + | Proxy of C++ qvector< range_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __init__(self, *args) + | __init__(self) -> rangevec_base_t + | __init__(self, x) -> rangevec_base_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_rangevec_base_t(...) + | delete_rangevec_base_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class rangevec_t in module ida_range: + +class rangevec_t(rangevec_base_t) + | Proxy of C++ rangevec_t class. + | + | Method resolution order: + | rangevec_t + | rangevec_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rangevec_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_rangevec_t(...) + | delete_rangevec_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from rangevec_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from rangevec_base_t: + | + | __hash__ = None + +Help on function reg_data_type in module ida_registry: + +reg_data_type(*args) -> 'regval_type_t' + reg_data_type(name, subkey=None) -> regval_type_t + + + Get data type of a given value. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: false if the [key+]value doesn't exist + +Help on function reg_delete in module ida_registry: + +reg_delete(*args) -> 'bool' + reg_delete(name, subkey=None) -> bool + + + Delete a value from the registry. + + @param name: value name (C++: const char *) + @param subkey: parent key (C++: const char *) + @return: success + +Help on function reg_delete_subkey in module ida_registry: + +reg_delete_subkey(*args) -> 'bool' + reg_delete_subkey(name) -> bool + + + Delete a key from the registry. + + + @param name (C++: const char *) + +Help on function reg_delete_tree in module ida_registry: + +reg_delete_tree(*args) -> 'bool' + reg_delete_tree(name) -> bool + + + Delete a subtree from the registry. + + + @param name (C++: const char *) + +Help on function reg_exists in module ida_registry: + +reg_exists(*args) -> 'bool' + reg_exists(name, subkey=None) -> bool + + + Is there already a value with the given name? + + @param name: value name (C++: const char *) + @param subkey: parent key (C++: const char *) + +Help on function reg_flush in module ida_registry: + +reg_flush(*args) -> 'void' + reg_flush() + +Help on function reg_load in module ida_registry: + +reg_load(*args) -> 'void' + reg_load() + +Help on function reg_read_binary in module ida_registry: + +reg_read_binary(*args) -> 'PyObject *' + reg_read_binary(name, subkey=None) -> PyObject * + + + Read binary data from the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: false if 'data' is not large enough to hold all data present. + in this case 'data' is left untouched. + +Help on function reg_read_bool in module ida_registry: + +reg_read_bool(*args) -> 'bool' + reg_read_bool(name, defval, subkey=None) -> bool + + + Read boolean value from the registry. + + @param name: value name (C++: const char *) + @param defval: default value (C++: bool) + @param subkey: key name (C++: const char *) + @return: boolean read from registry, or 'defval' if the read failed + +Help on function reg_read_int in module ida_registry: + +reg_read_int(*args) -> 'int' + reg_read_int(name, defval, subkey=None) -> int + + + Read integer value from the registry. + + @param name: value name (C++: const char *) + @param defval: default value (C++: int) + @param subkey: key name (C++: const char *) + @return: the value read from the registry, or 'defval' if the read + failed + +Help on function reg_read_string in module ida_registry: + +reg_read_string(*args) -> 'PyObject *' + reg_read_string(name, subkey=None, _def=None) -> PyObject * + + + Read a string from the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: success + +Help on function reg_read_strlist in module ida_registry: + +reg_read_strlist(*args) -> 'qstrvec_t *' + reg_read_strlist(subkey) + + + Retrieve all string values associated with the given key. Also see + 'reg_update_strlist()' . + + @param subkey (C++: const char *) + +Help on function reg_subkey_exists in module ida_registry: + +reg_subkey_exists(*args) -> 'bool' + reg_subkey_exists(name) -> bool + + + Is there already a key with the given name? + + + @param name (C++: const char *) + +Help on function reg_subkey_subkeys in module ida_registry: + +reg_subkey_subkeys(*args) -> 'PyObject *' + reg_subkey_subkeys(name) -> PyObject * + + + Get all subkey names of given key. + + + @param name (C++: const char *) + +Help on function reg_subkey_values in module ida_registry: + +reg_subkey_values(*args) -> 'PyObject *' + reg_subkey_values(name) -> PyObject * + + + Get all value names under given key. + + + @param name (C++: const char *) + +Help on function reg_update_filestrlist in module ida_registry: + +reg_update_filestrlist(*args) -> 'void' + reg_update_filestrlist(subkey, add, maxrecs, rem=None) + + + Update registry with a file list. Case sensitivity will vary depending + on the target OS.'add' and 'rem' must be UTF-8, just like for regular + string operations. + + @param subkey (C++: const char *) + @param add (C++: const char *) + @param maxrecs (C++: size_t) + @param rem (C++: const char *) + +Help on function reg_update_strlist in module ida_registry: + +reg_update_strlist(*args) -> 'void' + reg_update_strlist(subkey, add, maxrecs, rem=None, ignorecase=False) + + + Update list of strings associated with given key. + + @param subkey: key name (C++: const char *) + @param add: string to be added to list, can be NULL (C++: const char + *) + @param maxrecs: limit list to this size (C++: size_t) + @param rem: string to be removed from list, can be NULL (C++: const + char *) + @param ignorecase: ignore case for 'add' and 'rem' (C++: bool) + +Help on function reg_write_binary in module ida_registry: + +reg_write_binary(*args) -> 'PyObject *' + reg_write_binary(name, py_bytes, subkey=None) -> PyObject * + + + Write binary data to the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + +Help on function reg_write_bool in module ida_registry: + +reg_write_bool(*args) -> 'void' + reg_write_bool(name, value, subkey=None) + + + Write boolean value to the registry. + + @param name: value name (C++: const char *) + @param value: boolean to write (nonzero = true) (C++: int) + @param subkey: key name (C++: const char *) + +Help on function reg_write_int in module ida_registry: + +reg_write_int(*args) -> 'void' + reg_write_int(name, value, subkey=None) + + + Write integer value to the registry. + + @param name: value name (C++: const char *) + @param value: value to write (C++: int) + @param subkey: key name (C++: const char *) + +Help on function reg_write_string in module ida_registry: + +reg_write_string(*args) -> 'void' + reg_write_string(name, utf8, subkey=None) + + + Write a string to the registry. + + @param name: value name (C++: const char *) + @param utf8: utf8-encoded string (C++: const char *) + @param subkey: key name (C++: const char *) + +=== ida_registry EPYDOC INJECTIONS === +ida_registry.ROOT_KEY_NAME +""" +Key used to store IDA settings in registry (Windows version).this name +is automatically prepended to all key names passed to functions in +this file. +""" +=== ida_registry EPYDOC INJECTIONS END === +Help on function find_binary in module ida_search: + +find_binary(*args) -> 'ea_t' + find_binary(arg1, arg2, arg3, arg4, arg5) -> ea_t + +Help on function find_code in module ida_search: + +find_code(*args) -> 'ea_t' + find_code(ea, sflag) -> ea_t + + + Find next code address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_data in module ida_search: + +find_data(*args) -> 'ea_t' + find_data(ea, sflag) -> ea_t + + + Find next data address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_defined in module ida_search: + +find_defined(*args) -> 'ea_t' + find_defined(ea, sflag) -> ea_t + + + Find next ea that is the start of an instruction or data. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_error in module ida_search: + +find_error(*args) -> 'int *' + find_error(ea, sflag) -> ea_t + + + Find next error or problem. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_imm in module ida_search: + +find_imm(*args) -> 'int *' + find_imm(newEA, sflag, srchValue) -> ea_t + + + Find next immediate operand with the given value. + + + @param newEA (C++: ea_t) + @param sflag (C++: int) + @param srchValue (C++: uval_t) + +Help on function find_not_func in module ida_search: + +find_not_func(*args) -> 'ea_t' + find_not_func(ea, sflag) -> ea_t + + + Find next code address that does not belong to a function. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_notype in module ida_search: + +find_notype(*args) -> 'int *' + find_notype(ea, sflag) -> ea_t + + + Find next operand without any type info. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_suspop in module ida_search: + +find_suspop(*args) -> 'int *' + find_suspop(ea, sflag) -> ea_t + + + Find next suspicious operand. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_text in module ida_search: + +find_text(*args) -> 'ea_t' + find_text(start_ea, y, x, ustr, sflag) -> ea_t + + + See 'search()' + + + @param start_ea (C++: ea_t) + @param y (C++: int) + @param x (C++: int) + @param ustr (C++: const char *) + @param sflag (C++: int) + +Help on function find_unknown in module ida_search: + +find_unknown(*args) -> 'ea_t' + find_unknown(ea, sflag) -> ea_t + + + Find next unexplored address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function search_down in module ida_search: + +search_down(*args) -> 'bool' + search_down(sflag) -> bool + + + Is the 'SEARCH_DOWN' bit set? + + + @param sflag (C++: int) + +=== ida_search EPYDOC INJECTIONS === +ida_search.SEARCH_BRK +""" +return 'BADADDR' if Ctrl-Break wass pressed during search +""" + +ida_search.SEARCH_CASE +""" +case-sensitive search (case-insensitive otherwise) +""" + +ida_search.SEARCH_DOWN +""" +search towards higher addresses +""" + +ida_search.SEARCH_IDENT +""" +search for an identifier (text search). it means that the characters +before and after the match cannot be is_visible_char(). +""" + +ida_search.SEARCH_NEXT +""" +for other find_.. functions it is implicitly set + +useful only for 'search()' and find_binary(). +""" + +ida_search.SEARCH_NOBRK +""" +don't test for ctrl-break to interrupt the search +""" + +ida_search.SEARCH_NOSHOW +""" +don't display the search progress/refresh screen +""" + +ida_search.SEARCH_REGEX +""" +regular expressions in search string (only supported for txt search) +""" + +ida_search.SEARCH_UP +""" +search towards lower addresses +""" +=== ida_search EPYDOC INJECTIONS END === +Help on function add_segm in module ida_segment: + +add_segm(*args) -> 'bool' + add_segm(para, start, end, name, sclass, flags=0) -> bool + + + Add a new segment, second form. Segment alignment is set to + 'saRelByte' . Segment combination is "public" or "stack" (if segment + class is "STACK"). Addressing mode of segment is taken as default + (16bit or 32bit). Default segment registers are set to 'BADSEL' . If a + segment already exists at the specified range of addresses, this + segment will be truncated. Instructions and data in the old segment + will be deleted if the new segment has another addressing mode or + another segment base address. + + @param para: segment base paragraph. if paragraph can't fit in 16bit, + then a new selector is allocated and mapped to the + paragraph. (C++: ea_t) + @param start: start address of the segment. if start== BADADDR then + start <- to_ea(para,0). (C++: ea_t) + @param end: end address of the segment. end address should be higher + than start address. For emulate empty segments, use + SEG_NULL segment type. If the end address is lower than + start address, then fail. If end== BADADDR , then a + segment up to the next segment will be created (if the + next segment doesn't exist, then 1 byte segment will be + created). If 'end' is too high and the new segment would + overlap the next segment, 'end' is adjusted properly. + (C++: ea_t) + @param name: name of new segment. may be NULL (C++: const char *) + @param sclass: class of the segment. may be NULL. type of the new + segment is modified if class is one of predefined + names: "CODE" -> SEG_CODE "DATA" -> SEG_DATA + "CONST" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> + SEG_BSS "XTRN" -> SEG_XTRN "COMM" -> SEG_COMM + "ABS" -> SEG_ABSSYM (C++: const char *) + @param flags (C++: int) + +Help on function add_segm_ex in module ida_segment: + +add_segm_ex(*args) -> 'bool' + add_segm_ex(s, name, sclass, flags) -> bool + + + Add a new segment. If a segment already exists at the specified range + of addresses, this segment will be truncated. Instructions and data in + the old segment will be deleted if the new segment has another + addressing mode or another segment base address. + + @param s: pointer to filled segment structure. segment selector should + have proper mapping (see set_selector() ). if + s.start_ea== BADADDR then s.start_ea <- get_segm_base(&s) + if s.end_ea== BADADDR , then a segment up to the next + segment will be created (if the next segment doesn't exist, + then 1 byte segment will be created). if the s.end_ea < + s.start_ea, then fail. if s.end_ea is too high and the new + segment would overlap the next segment, s.end_ea is adjusted + properly. (C++: segment_t *) + @param name: name of new segment. may be NULL. if specified, the + segment is immediately renamed (C++: const char *) + @param sclass: class of the segment. may be NULL. if specified, the + segment class is immediately changed (C++: const char + *) + @param flags: Add segment flags (C++: int) + +Help on function add_segment_translation in module ida_segment: + +add_segment_translation(*args) -> 'bool' + add_segment_translation(segstart, mappedseg) -> bool + + + Add segment translation. + + @param segstart: start address of the segment to add translation to + (C++: ea_t) + @param mappedseg: start address of the overlayed segment (C++: ea_t) + +Help on function allocate_selector in module ida_segment: + +allocate_selector(*args) -> 'sel_t' + allocate_selector(segbase) -> sel_t + + + Allocate a selector for a segment unconditionally. You must call this + function before calling 'add_segm_ex()' . 'add_segm()' calls this + function itself, so you don't need to allocate a selector. This + function will allocate a new free selector and setup its mapping using + 'find_free_selector()' and 'set_selector()' functions. + + @param segbase: a new segment base paragraph (C++: ea_t) + @return: the allocated selector number + +Help on function change_segment_status in module ida_segment: + +change_segment_status(*args) -> 'int' + change_segment_status(s, is_deb_segm) -> int + + + Convert a debugger segment to a regular segment and vice versa. When + converting debug->regular, the memory contents will be copied to the + database. + + @param s: segment to modify (C++: segment_t *) + @param is_deb_segm: new status of the segment (C++: bool) + @return: Change segment status result codes + +Help on function del_segm in module ida_segment: + +del_segm(*args) -> 'bool' + del_segm(ea, flags) -> bool + + + Delete a segment. + + @param ea: any address belonging to the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function del_segment_translations in module ida_segment: + +del_segment_translations(*args) -> 'void' + del_segment_translations(segstart) + + + Delete the translation list + + @param segstart: start address of the segment to delete translation + list (C++: ea_t) + +Help on function del_selector in module ida_segment: + +del_selector(*args) -> 'void' + del_selector(selector) + + + Delete mapping of a selector. Be wary of deleting selectors that are + being used in the program, this can make a mess in the segments. + + @param selector: number of selector to remove from the translation + table (C++: sel_t) + +Help on function find_free_selector in module ida_segment: + +find_free_selector(*args) -> 'sel_t' + find_free_selector() -> sel_t + + + Find first unused selector. + + @return: a number >= 1 + +Help on function find_selector in module ida_segment: + +find_selector(*args) -> 'sel_t' + find_selector(base) -> sel_t + + + Find a selector that has mapping to the specified paragraph. + + @param base: paragraph to search in the translation table (C++: ea_t) + @return: selector value or base + +Help on function get_defsr in module ida_segment: + +get_defsr(*args) -> 'sel_t' + get_defsr(s, reg) -> sel_t + +Help on function get_first_seg in module ida_segment: + +get_first_seg(*args) -> 'segment_t *' + get_first_seg() -> segment_t + + + Get pointer to the first segment. + +Help on function get_group_selector in module ida_segment: + +get_group_selector(*args) -> 'sel_t' + get_group_selector(grpsel) -> sel_t + + + Get common selector for a group of segments. + + @param grpsel: selector of group segment (C++: sel_t) + @return: common selector of the group or 'grpsel' if no such group is + found + +Help on function get_last_seg in module ida_segment: + +get_last_seg(*args) -> 'segment_t *' + get_last_seg() -> segment_t + + + Get pointer to the last segment. + +Help on function get_next_seg in module ida_segment: + +get_next_seg(*args) -> 'segment_t *' + get_next_seg(ea) -> segment_t + + + Get pointer to the next segment. + + + @param ea (C++: ea_t) + +Help on function get_prev_seg in module ida_segment: + +get_prev_seg(*args) -> 'segment_t *' + get_prev_seg(ea) -> segment_t + + + Get pointer to the previous segment. + + + @param ea (C++: ea_t) + +Help on function get_segm_base in module ida_segment: + +get_segm_base(*args) -> 'ea_t' + get_segm_base(s) -> ea_t + + + Get segment base linear address. Segment base linear address is used + to calculate virtual addresses. The virtual address of the first byte + of the segment will be (start address of segment - segment base linear + address) + + @param s: pointer to segment (C++: const segment_t *) + @return: 0 if s == NULL, otherwise segment base linear address + +Help on function get_segm_by_name in module ida_segment: + +get_segm_by_name(*args) -> 'segment_t *' + get_segm_by_name(name) -> segment_t + + + Get pointer to segment by its name. If there are several segments with + the same name, returns the first of them. + + @param name: segment name. may be NULL. (C++: const char *) + @return: NULL or pointer to segment structure + +Help on function get_segm_by_sel in module ida_segment: + +get_segm_by_sel(*args) -> 'segment_t *' + get_segm_by_sel(selector) -> segment_t + + + Get pointer to segment structure. This function finds a segment by its + selector. If there are several segments with the same selectors, the + last one will be returned. + + @param selector: a segment with the specified selector will be + returned (C++: sel_t) + @return: pointer to segment or NULL + +Help on function get_segm_class in module ida_segment: + +get_segm_class(*args) -> 'qstring *' + get_segm_class(s) -> str + + + Get segment class. Segment class is arbitrary text (max 8 characters). + + @param s: pointer to segment (C++: const segment_t *) + @return: size of segment class (-1 if s==NULL or bufsize<=0) + +Help on function get_segm_name in module ida_segment: + +get_segm_name(*args) -> 'qstring *' + get_segm_name(s, flags=0) -> str + + + Get true segment name by pointer to segment. + + @param s: pointer to segment (C++: const segment_t *) + @param flags: 0-return name as is; 1-substitute bad symbols with _ 1 + corresponds to GN_VISIBLE (C++: int) + @return: size of segment name (-1 if s==NULL) + +Help on function get_segm_num in module ida_segment: + +get_segm_num(*args) -> 'int' + get_segm_num(ea) -> int + + + Get number of segment by address. + + @param ea: linear address belonging to the segment (C++: ea_t) + @return: -1 if no segment occupies the specified address. otherwise + returns number of the specified segment (0.. get_segm_qty() + -1) + +Help on function get_segm_para in module ida_segment: + +get_segm_para(*args) -> 'ea_t' + get_segm_para(s) -> ea_t + + + Get segment base paragraph. Segment base paragraph may be converted to + segment base linear address using 'to_ea()' function. In fact, + to_ea(get_segm_para(s), 0) == get_segm_base(s). + + @param s: pointer to segment (C++: const segment_t *) + @return: 0 if s == NULL, the segment base paragraph + +Help on function get_segm_qty in module ida_segment: + +get_segm_qty(*args) -> 'int' + get_segm_qty() -> int + + + Get number of segments. + +Help on function get_segment_alignment in module ida_segment: + +get_segment_alignment(*args) -> 'char const *' + get_segment_alignment(align) -> char const * + + + Get text representation of segment alignment code. + + @param align (C++: uchar) + @return: text digestable by IBM PC assembler. + +Help on function get_segment_cmt in module ida_segment: + +get_segment_cmt(*args) -> 'qstring *' + get_segment_cmt(s, repeatable) -> str + + + Get segment comment. + + @param s: pointer to segment structure (C++: const segment_t *) + @param repeatable: 0: get regular comment. 1: get repeatable comment. + (C++: bool) + @return: size of comment or -1 + +Help on function get_segment_combination in module ida_segment: + +get_segment_combination(*args) -> 'char const *' + get_segment_combination(comb) -> char const * + + + Get text representation of segment combination code. + + @param comb (C++: uchar) + @return: text digestable by IBM PC assembler. + +Help on function get_segment_translations in module ida_segment: + +get_segment_translations(*args) -> 'ssize_t' + get_segment_translations(transmap, segstart) -> ssize_t + + + Get segment translation list. + + @param transmap: vector of segment start addresses for the translation + list (C++: eavec_t *) + @param segstart: start address of the segment to get information about + (C++: ea_t) + @return: -1 if no translation list or bad segstart. otherwise returns + size of translation list. + +Help on function get_selector_qty in module ida_segment: + +get_selector_qty(*args) -> 'int' + get_selector_qty() -> int + + + Get number of defined selectors. + +Help on function get_visible_segm_name in module ida_segment: + +get_visible_segm_name(*args) -> 'qstring *' + get_visible_segm_name(s) -> str + + + Get segment name by pointer to segment. + + @param s: pointer to segment (C++: const segment_t *) + @return: size of segment name (-1 if s==NULL) + +Help on function getn_selector in module ida_segment: + +getn_selector(*args) -> 'sel_t *, ea_t *' + getn_selector(n) -> bool + + + Get description of selector (0.. 'get_selector_qty()' -1) + + + @param n (C++: int) + +Help on function getnseg in module ida_segment: + +getnseg(*args) -> 'segment_t *' + getnseg(n) -> segment_t + + + Get pointer to segment by its number.Obsoleted because it can slow + down the debugger (it has to refresh the whole memory segmentation to + calculate the correct answer) + + @param n: segment number in the range (0.. get_segm_qty() -1) (C++: + int) + @return: NULL or pointer to segment structure + +Help on function getseg in module ida_segment: + +getseg(*args) -> 'segment_t *' + getseg(ea) -> segment_t + + + Get pointer to segment by linear address. + + @param ea: linear address belonging to the segment (C++: ea_t) + @return: NULL or pointer to segment structure + +Help on function is_finally_visible_segm in module ida_segment: + +is_finally_visible_segm(*args) -> 'bool' + is_finally_visible_segm(s) -> bool + + + See 'SFL_HIDDEN' , 'SCF_SHHID_SEGM' . + + + @param s (C++: segment_t *) + +Help on function is_miniidb in module ida_segment: + +is_miniidb(*args) -> 'bool' + is_miniidb() -> bool + + + Is the database a miniidb created by the debugger?. + + @return: true if the database contains no segments or only debugger + segments + +Help on function is_segm_locked in module ida_segment: + +is_segm_locked(*args) -> 'bool' + is_segm_locked(segm) -> bool + + + Is a segment pointer locked? + + + @param segm (C++: const segment_t *) + +Help on function is_spec_ea in module ida_segment: + +is_spec_ea(*args) -> 'bool' + is_spec_ea(ea) -> bool + + + Does the address belong to a segment with a special type?. ( + 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , 'SEG_COMM' ) + + @param ea: linear address (C++: ea_t) + +Help on function is_spec_segm in module ida_segment: + +is_spec_segm(*args) -> 'bool' + is_spec_segm(seg_type) -> bool + + + Has segment a special type?. ( 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , + 'SEG_COMM' ) + + @param seg_type (C++: uchar) + +Help on function is_visible_segm in module ida_segment: + +is_visible_segm(*args) -> 'bool' + is_visible_segm(s) -> bool + + + See 'SFL_HIDDEN' . + + + @param s (C++: segment_t *) + +Help on function lock_segm in module ida_segment: + +lock_segm(*args) -> 'void' + lock_segm(segm, lock) + + + Lock segment pointer Locked pointers are guaranteed to remain valid + until they are unlocked. Ranges with locked pointers cannot be deleted + or moved. + + @param segm (C++: const segment_t *) + @param lock (C++: bool) + +Help on class lock_segment in module ida_segment: + +class lock_segment(builtins.object) + | Proxy of C++ lock_segment class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _segm) -> lock_segment + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lock_segment(...) + | delete_lock_segment(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 + +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. + + @param s: segment to move (C++: segment_t *) + @param to: new segment start address (C++: ea_t) + @param flags: Move segment flags (C++: int) + @return: Move segment result codes + +Help on function move_segm_start in module ida_segment: + +move_segm_start(*args) -> 'bool' + move_segm_start(ea, newstart, mode) -> bool + + + Move segment start. The main difference between this function and + 'set_segm_start()' is that this function may expand the previous + segment while 'set_segm_start()' never does it. So, this function + allows to change bounds of two segments simultaneously. If the + previous segment and the specified segment have the same addressing + mode and segment base, then instructions and data are not destroyed - + they simply move from one segment to another. Otherwise all + instructions/data which migrate from one segment to another are + destroyed.this function never disables addresses. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newstart: new start address of the segment note that segment + start address should be higher than segment base + linear address. (C++: ea_t) + @param mode: policy for destroying defined items 0: if it is + necessary to destroy defined items, display a dialog box + and ask confirmation 1: if it is necessary to destroy + defined items, just destroy them without asking the user + -1: if it is necessary to destroy defined items, don't + destroy them (i.e. function will fail) -2: don't + destroy defined items (function will succeed) (C++: int) + +Help on function rebase_program in module ida_segment: + +rebase_program(*args) -> 'int' + rebase_program(delta, flags) -> int + + + Rebase the whole program by 'delta' bytes. + + @param delta: number of bytes to move the program (C++: adiff_t) + @param flags: Move segment flags it is recommended to use + MSF_FIXONCE so that the loader takes care of global + variables it stored in the database (C++: int) + @return: Move segment result codes + +Help on function segm_adjust_diff in module ida_segment: + +segm_adjust_diff(*args) -> 'adiff_t' + segm_adjust_diff(s, delta) -> adiff_t + + + Truncate and sign extend a delta depending on the segment. + + + @param s (C++: const segment_t *) + @param delta (C++: adiff_t) + +Help on function segm_adjust_ea in module ida_segment: + +segm_adjust_ea(*args) -> 'ea_t' + segm_adjust_ea(s, ea) -> ea_t + + + Truncate an address depending on the segment. + + + @param s (C++: const segment_t *) + @param ea (C++: ea_t) + +Help on class segment_t in module ida_segment: + +class segment_t(ida_range.range_t) + | Proxy of C++ segment_t class. + | + | Method resolution order: + | segment_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> segment_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_segment_t(...) + | delete_segment_t(self) + | + | abits(self, *args) -> 'int' + | abits(self) -> int + | + | abytes(self, *args) -> 'int' + | abytes(self) -> int + | + | clr_comorg(self, *args) -> 'void' + | clr_comorg(self) + | + | clr_ob_ok(self, *args) -> 'void' + | clr_ob_ok(self) + | + | comorg(self, *args) -> 'bool' + | comorg(self) -> bool + | + | is_header_segm(self, *args) -> 'bool' + | is_header_segm(self) -> bool + | + | is_hidden_segtype(self, *args) -> 'bool' + | is_hidden_segtype(self) -> bool + | + | is_loader_segm(self, *args) -> 'bool' + | is_loader_segm(self) -> bool + | + | is_visible_segm(self, *args) -> 'bool' + | is_visible_segm(self) -> bool + | + | ob_ok(self, *args) -> 'bool' + | ob_ok(self) -> bool + | + | set_comorg(self, *args) -> 'void' + | set_comorg(self) + | + | set_debugger_segm(self, *args) -> 'void' + | set_debugger_segm(self, debseg) + | + | set_header_segm(self, *args) -> 'void' + | set_header_segm(self, on) + | + | set_hidden_segtype(self, *args) -> 'void' + | set_hidden_segtype(self, hide) + | + | set_loader_segm(self, *args) -> 'void' + | set_loader_segm(self, ldrseg) + | + | set_ob_ok(self, *args) -> 'void' + | set_ob_ok(self) + | + | set_visible_segm(self, *args) -> 'void' + | set_visible_segm(self, visible) + | + | update(self, *args) -> 'bool' + | update(self) -> bool + | + | use32(self, *args) -> 'bool' + | use32(self) -> bool + | + | use64(self, *args) -> 'bool' + | use64(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | align + | segment_t_align_get(self) -> uchar + | + | bitness + | segment_t_bitness_get(self) -> uchar + | + | color + | segment_t_color_get(self) -> bgcolor_t + | + | comb + | segment_t_comb_get(self) -> uchar + | + | defsr + | segment_t_defsr_get(self) -> sel_t [16] + | + | end_ea + | segment_t_end_ea_get(self) -> ea_t + | + | flags + | segment_t_flags_get(self) -> ushort + | + | name + | segment_t_name_get(self) -> uval_t + | + | orgbase + | segment_t_orgbase_get(self) -> uval_t + | + | perm + | segment_t_perm_get(self) -> uchar + | + | sclass + | segment_t_sclass_get(self) -> uval_t + | + | sel + | segment_t_sel_get(self) -> sel_t + | + | start_ea + | segment_t_start_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | type + | segment_t_type_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | startEA + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on function segtype in module ida_segment: + +segtype(*args) -> 'uchar' + segtype(ea) -> uchar + + + Get segment type. + + @param ea: any linear address within the segment (C++: ea_t) + @return: Segment types , SEG_UNDF if no segment found at 'ea' + +Help on function sel2ea in module ida_segment: + +sel2ea(*args) -> 'ea_t' + sel2ea(selector) -> ea_t + + + Get mapping of a selector as a linear address. + + @param selector: number of selector to translate to linear address + (C++: sel_t) + @return: linear address the specified selector is mapped to. if there + is no mapping, returns to_ea(selector,0); + +Help on function sel2para in module ida_segment: + +sel2para(*args) -> 'ea_t' + sel2para(selector) -> ea_t + + + Get mapping of a selector. + + @param selector: number of selector to translate (C++: sel_t) + @return: paragraph the specified selector is mapped to. if there is no + mapping, returns 'selector'. + +Help on function set_defsr in module ida_segment: + +set_defsr(*args) -> 'void' + set_defsr(s, reg, value) + +Help on function set_group_selector in module ida_segment: + +set_group_selector(*args) -> 'int' + set_group_selector(grp, sel) -> int + + + Initialize groups. The kernel calls this function at the start of + work.Create a new group of segments (used OMF files). + + @param grp: selector of group segment (segment type is SEG_GRP ) You + should create an 'empty' (1 byte) group segment It won't + contain anything and will be used to redirect references + to the group of segments to the common selector. (C++: + sel_t) + @param sel: common selector of all segments belonging to the segment + You should create all segments within the group with the + same selector value. (C++: sel_t) + @return: 1 ok + +Help on function set_segm_addressing in module ida_segment: + +set_segm_addressing(*args) -> 'bool' + set_segm_addressing(s, bitness) -> bool + + + Change segment addressing mode (16, 32, 64 bits). You must use this + function to change segment addressing, never change the 'bitness' + field directly. This function will delete all instructions, comments + and names in the segment + + @param s: pointer to segment (C++: segment_t *) + @param bitness: new addressing mode of segment 2: 64bit segment 1: + 32bit segment 0: 16bit segment (C++: size_t) + @return: success + +Help on function set_segm_base in module ida_segment: + +set_segm_base(*args) -> 'bool' + set_segm_base(s, newbase) -> bool + + + Internal function. + + + @param s (C++: segment_t *) + @param newbase (C++: ea_t) + +Help on function set_segm_class in module ida_segment: + +set_segm_class(*args) -> 'int' + set_segm_class(s, sclass, flags=0) -> int + + + Set segment class. + + @param s: pointer to segment (may be NULL) (C++: segment_t *) + @param sclass: segment class (may be NULL). If segment type is + SEG_NORM and segment class is one of predefined names, + then segment type is changed to: "CODE" -> SEG_CODE + "DATA" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> + SEG_BSS if "UNK" then segment type is reset to + SEG_NORM . (C++: const char *) + @param flags (C++: int) + +Help on function set_segm_end in module ida_segment: + +set_segm_end(*args) -> 'bool' + set_segm_end(ea, newend, flags) -> bool + + + Set segment end address. The next segment is shrinked to allow + expansion of the specified segment. The kernel might even delete the + next segment if necessary. The kernel will ask the user for a + permission to destroy instructions or data going out of segment scope + if such instructions exist. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newend: new end address of the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function set_segm_name in module ida_segment: + +set_segm_name(*args) -> 'int' + set_segm_name(s, name, flags=0) -> int + + + Rename segment. The new name is validated (see validate_name). A + segment always has a name. If you hadn't specified a name, the kernel + will assign it "seg###" name where ### is segment number. + + @param s: pointer to segment (may be NULL) (C++: segment_t *) + @param name: new segment name (C++: const char *) + @param flags: ADDSEG_IDBENC or 0 (C++: int) + +Help on function set_segm_start in module ida_segment: + +set_segm_start(*args) -> 'bool' + set_segm_start(ea, newstart, flags) -> bool + + + Set segment start address. The previous segment is trimmed to allow + expansion of the specified segment. The kernel might even delete the + previous segment if necessary. The kernel will ask the user for a + permission to destroy instructions or data going out of segment scope + if such instructions exist. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newstart: new start address of the segment note that segment + start address should be higher than segment base + linear address. (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function set_segment_cmt in module ida_segment: + +set_segment_cmt(*args) -> 'void' + set_segment_cmt(s, cmt, repeatable) + + + Set segment comment. + + @param s: pointer to segment structure (C++: const segment_t *) + @param cmt: comment string, may be multiline (with ' '). maximal size + is 4096 bytes. Use empty str ("") to delete comment (C++: + const char *) + @param repeatable: 0: set regular comment. 1: set repeatable comment. + (C++: bool) + +Help on function set_segment_translations in module ida_segment: + +set_segment_translations(*args) -> 'bool' + set_segment_translations(segstart, transmap) -> bool + + + Set new translation list. + + @param segstart: start address of the segment to add translation to + (C++: ea_t) + @param transmap: vector of segment start addresses for the translation + list. If transmap is empty, the translation list is + deleted. (C++: const eavec_t &) + +Help on function set_selector in module ida_segment: + +set_selector(*args) -> 'int' + set_selector(selector, paragraph) -> int + + + Set mapping of selector to a paragraph. You should call this + functionbeforecreating a segment which uses the selector, otherwise + the creation of the segment will fail. + + @param selector: number of selector to map if selector == BADSEL , + then return 0 (fail) if the selector has had a + mapping, old mapping is destroyed if the selector + number is equal to paragraph value, then the mapping + is destroyed because we don't need to keep trivial + mappings. (C++: sel_t) + @param paragraph: paragraph to map selector (C++: ea_t) + +Help on function set_visible_segm in module ida_segment: + +set_visible_segm(*args) -> 'void' + set_visible_segm(s, visible) + + + See 'SFL_HIDDEN' . + + + @param s (C++: segment_t *) + @param visible (C++: bool) + +Help on function setup_selector in module ida_segment: + +setup_selector(*args) -> 'sel_t' + setup_selector(segbase) -> sel_t + + + Allocate a selector for a segment if necessary. You must call this + function before calling 'add_segm_ex()' . 'add_segm()' calls this + function itself, so you don't need to allocate a selector. This + function will allocate a selector if 'segbase' requires more than 16 + bits and the current processor is IBM PC. Otherwise it will return the + segbase value. + + @param segbase: a new segment base paragraph (C++: ea_t) + @return: the allocated selector number + +Help on function std_out_segm_footer in module ida_segment: + +std_out_segm_footer(*args) -> 'void' + std_out_segm_footer(ctx, seg) + + + Generate segment footer line as a comment line. This function may be + used in IDP modules to generate segment footer if the target assembler + doesn't have 'ends' directive. + + @param ctx (C++: struct outctx_t &) + @param seg (C++: segment_t *) + +Help on function take_memory_snapshot in module ida_segment: + +take_memory_snapshot(*args) -> 'bool' + take_memory_snapshot(only_loader_segs) -> bool + + + Take a memory snapshot of the running process. + + @param only_loader_segs: only is_loader_segm() segments will be + affected (C++: bool) + @return: success + +Help on function update_segm in module ida_segment: + +update_segm(*args) -> 'bool' + update_segm(s) -> bool + +=== ida_segment EPYDOC INJECTIONS === +ida_segment.ADDSEG_FILLGAP +""" +fill gap between new segment and previous one. i.e. if such a gap +exists, and this gap is less than 64K, then fill the gap by extending +the previous segment and adding .align directive to it. This way we +avoid gaps between segments. too many gaps lead to a virtual array +failure. it cannot hold more than ~1000 gaps. +""" + +ida_segment.ADDSEG_IDBENC +""" +non-ASCII bytes will be decoded accordingly + +'name' and 'sclass' are given in the IDB encoding; +""" + +ida_segment.ADDSEG_NOAA +""" +do not mark new segment for auto-analysis +""" + +ida_segment.ADDSEG_NOSREG +""" +(undefine all default segment registers) + +set all default segment register values to 'BADSEL' +""" + +ida_segment.ADDSEG_NOTRUNC +""" +destroy/truncate old segments instead. + +don't truncate the new segment at the beginning of the next segment if +they overlap. +""" + +ida_segment.ADDSEG_OR_DIE +""" + 'qexit()' if can't add a segment +""" + +ida_segment.ADDSEG_QUIET +""" +silent mode, no "Adding segment..." in the messages window +""" + +ida_segment.ADDSEG_SPARSE +""" +use sparse storage method for the new segment +""" + +ida_segment.CSS_BREAK +""" +memory reading process stopped by user +""" + +ida_segment.CSS_NODBG +""" +debugger is not running +""" + +ida_segment.CSS_NOMEM +""" +is too big) + +not enough memory (might be because the segment +""" + +ida_segment.CSS_NORANGE +""" +could not find corresponding memory range +""" + +ida_segment.CSS_OK +""" +ok +""" + +ida_segment.MAX_GROUPS +""" +max number of segment groups +""" + +ida_segment.MAX_SEGM_TRANSLATIONS +""" +max number of segment translations +""" + +ida_segment.MOVE_SEGM_CHUNK +""" +Too many chunks are defined, can't move. +""" + +ida_segment.MOVE_SEGM_DEBUG +""" +Debugger segments cannot be moved. +""" + +ida_segment.MOVE_SEGM_IDP +""" +IDP module forbids moving the segment. +""" + +ida_segment.MOVE_SEGM_LOADER +""" +The segment has been moved but the loader complained. +""" + +ida_segment.MOVE_SEGM_ODD +""" +Cannot move segments by an odd number of bytes. +""" + +ida_segment.MOVE_SEGM_OK +""" +all ok +""" + +ida_segment.MOVE_SEGM_ORPHAN +""" +Orphan bytes hinder segment movement. +""" + +ida_segment.MOVE_SEGM_PARAM +""" +The specified segment does not exist. +""" + +ida_segment.MOVE_SEGM_ROOM +""" +Not enough free room at the target address. +""" + +ida_segment.MSF_FIXONCE +""" +valid for 'rebase_program()' . see 'loader_t::move_segm' . + +call loader only once with the special calling method. +""" + +ida_segment.MSF_LDKEEP +""" +keep the loader in the memory (optimization) +""" + +ida_segment.MSF_NETNODES +""" +valid for 'rebase_program()' + +move netnodes instead of changing inf.netdelta (this is slower) +""" + +ida_segment.MSF_NOFIX +""" +don't call the loader to fix relocations +""" + +ida_segment.MSF_PRIORITY +""" +valid for 'move_segm()' + +loader segments will overwrite any existing debugger segments when +moved. +""" + +ida_segment.MSF_SILENT +""" +don't display a "please wait" box on the screen +""" + +ida_segment.SEGMOD_KEEP +""" +keep information (code & data, etc) +""" + +ida_segment.SEGMOD_KEEP0 +""" +flag for internal use, don't set +""" + +ida_segment.SEGMOD_KEEPSEL +""" +do not try to delete unused selector +""" + +ida_segment.SEGMOD_KILL +""" +disable addresses if segment gets shrinked or deleted +""" + +ida_segment.SEGMOD_NOMOVE +""" +(for 'set_segm_start()' ) + +don't move info from the start of segment to the new start address +""" + +ida_segment.SEGMOD_SILENT +""" +be silent +""" + +ida_segment.SEGMOD_SPARSE +""" +(for 'set_segm_start()' , 'set_segm_end()' ) + +use sparse storage if extending the segment +""" + +ida_segment.SEGPERM_EXEC +""" +Execute. +""" + +ida_segment.SEGPERM_READ +""" +Read. +""" + +ida_segment.SEGPERM_WRITE +""" +Write. +""" + +ida_segment.SEG_ABSSYM +""" +segment with definitions of absolute symbols +""" + +ida_segment.SEG_BSS +""" +uninitialized segment +""" + +ida_segment.SEG_CODE +""" +code segment +""" + +ida_segment.SEG_COMM +""" +segment with communal definitions +""" + +ida_segment.SEG_DATA +""" +data segment +""" + +ida_segment.SEG_GRP +""" +group of segments +""" + +ida_segment.SEG_IMEM +""" +internal processor memory & sfr (8051) +""" + +ida_segment.SEG_IMP +""" +java: implementation segment +""" + +ida_segment.SEG_NORM +""" +unknown type, no assumptions +""" + +ida_segment.SEG_NULL +""" +zero-length segment +""" + +ida_segment.SEG_UNDF +""" +undefined segment type (not used) +""" + +ida_segment.SEG_XTRN +""" +no instructions are allowed + +segment with 'extern' definitions. +""" + +ida_segment.SFL_COMORG +""" +IDP dependent field (IBM PC: if set, ORG directive is not commented +out) +""" + +ida_segment.SFL_DEBUG +""" +Is the segment created for the debugger?. Such segments are temporary +and do not have permanent flags. +""" + +ida_segment.SFL_HEADER +""" +Header segment (do not create offsets to it in the disassembly) +""" + +ida_segment.SFL_HIDDEN +""" +Is the segment hidden? +""" + +ida_segment.SFL_HIDETYPE +""" +Hide segment type (do not print it in the listing) +""" + +ida_segment.SFL_LOADER +""" +Is the segment created by the loader? +""" + +ida_segment.SFL_OBOK +""" +Orgbase is present? (IDP dependent field) +""" + +ida_segment.SREG_NUM +""" +Maximum number of segment registers is 16 (see 'segregs.hpp' ) +""" + +ida_segment.saAbs +""" +Absolute segment. +""" + +ida_segment.saGroup +""" +Segment group. +""" + +ida_segment.saRel1024Bytes +""" +1024 bytes +""" + +ida_segment.saRel128Bytes +""" +128 bytes +""" + +ida_segment.saRel2048Bytes +""" +2048 bytes +""" + +ida_segment.saRel32Bytes +""" +32 bytes +""" + +ida_segment.saRel4K +""" +alignment. It is not supported by LINK. + +This value is used by the PharLap OMF for page (4K) +""" + +ida_segment.saRel512Bytes +""" +512 bytes +""" + +ida_segment.saRel64Bytes +""" +64 bytes +""" + +ida_segment.saRelByte +""" +Relocatable, byte aligned. +""" + +ida_segment.saRelDble +""" +boundary. + +Relocatable, aligned on a double word (4-byte) +""" + +ida_segment.saRelPage +""" +Relocatable, aligned on 256-byte boundary. +""" + +ida_segment.saRelPara +""" +Relocatable, paragraph (16-byte) aligned. +""" + +ida_segment.saRelQword +""" +8 bytes +""" + +ida_segment.saRelWord +""" +Relocatable, word (2-byte) aligned. +""" + +ida_segment.scCommon +""" +Common. Combine by overlay using maximum size. +""" + +ida_segment.scGroup +""" +Segment group. +""" + +ida_segment.scPriv +""" +segment. + +Private. Do not combine with any other program +""" + +ida_segment.scPub +""" +the alignment requirement. + +Public. Combine by appending at an offset that meets +""" + +ida_segment.scPub2 +""" +As defined by Microsoft, same as C=2 (public). +""" + +ida_segment.scPub3 +""" +As defined by Microsoft, same as C=2 (public). +""" + +ida_segment.scStack +""" +byte alignment. + +Stack. Combine as for C=2. This combine type forces +""" +=== ida_segment EPYDOC INJECTIONS END === +Help on function copy_sreg_ranges in module ida_segregs: + +copy_sreg_ranges(*args) -> 'void' + copy_sreg_ranges(dst_rg, src_rg, map_selector=False) + + + Duplicate segment register ranges. + + @param dst_rg: number of destination segment register (C++: int) + @param src_rg: copy ranges from (C++: int) + @param map_selector: map selectors to linear addresses using sel2ea() + (C++: bool) + +Help on function del_sreg_range in module ida_segregs: + +del_sreg_range(*args) -> 'bool' + del_sreg_range(ea, rg) -> bool + + + Delete segment register range started at ea. When a segment register + range is deleted, the previous range is extended to cover the empty + space. The segment register range at the beginning of a segment cannot + be deleted. + + @param ea: start_ea of the deleted range (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_prev_sreg_range in module ida_segregs: + +get_prev_sreg_range(*args) -> 'bool' + get_prev_sreg_range(out, ea, rg) -> bool + + + Get segment register range previous to one with address.more efficient + then get_sreg_range(reg, ea-1) + + @param out: segment register range (C++: sreg_range_t *) + @param ea: any linear address in the program (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_sreg in module ida_segregs: + +get_sreg(*args) -> 'sel_t' + get_sreg(ea, rg) -> sel_t + + + Get value of a segment register. This function uses segment register + range and default segment register values stored in the segment + structure. + + @param ea: linear address in the program (C++: ea_t) + @param rg: number of the segment register (C++: int) + @return: value of the segment register, BADSEL if value is unknown. + +Help on function get_sreg_range in module ida_segregs: + +get_sreg_range(*args) -> 'bool' + get_sreg_range(out, ea, rg) -> bool + + + Get segment register range by linear address. + + @param out: segment register range (C++: sreg_range_t *) + @param ea: any linear address in the program (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_sreg_range_num in module ida_segregs: + +get_sreg_range_num(*args) -> 'int' + get_sreg_range_num(ea, rg) -> int + + + Get number of segment register range by address. + + @param ea: any address in the range (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: -1 if no range occupies the specified address. otherwise + returns number of the specified range + (0..get_srranges_qty()-1) + +Help on function get_sreg_ranges_qty in module ida_segregs: + +get_sreg_ranges_qty(*args) -> 'size_t' + get_sreg_ranges_qty(rg) -> size_t + + + Get number of segment register ranges. + + @param rg: the segment register number (C++: int) + +Help on function getn_sreg_range in module ida_segregs: + +getn_sreg_range(*args) -> 'bool' + getn_sreg_range(out, rg, n) -> bool + + + Get segment register range by its number. + + @param out: segment register range (C++: sreg_range_t *) + @param rg: the segment register number (C++: int) + @param n: number of range (0..qty()-1) (C++: int) + @return: success + +Help on function set_default_dataseg in module ida_segregs: + +set_default_dataseg(*args) -> 'void' + set_default_dataseg(ds_sel) + + + Set default value of DS register for all segments. + + + @param ds_sel (C++: sel_t) + +Help on function set_default_sreg_value in module ida_segregs: + +set_default_sreg_value(*args) -> 'bool' + set_default_sreg_value(sg, rg, value) -> bool + + + Set default value of a segment register for a segment. + + @param sg: pointer to segment structure if NULL, then set the register + for all segments (C++: segment_t *) + @param rg: number of segment register (C++: int) + @param value: its default value. this value will be used by + get_sreg() if value of the register is unknown at the + specified address. (C++: sel_t) + @return: success + +Help on function set_sreg_at_next_code in module ida_segregs: + +set_sreg_at_next_code(*args) -> 'void' + set_sreg_at_next_code(ea1, ea2, rg, value) + + + Set the segment register value at the next instruction. This function + is designed to be called from 'idb_event::sgr_changed' handler in + order to contain the effect of changing a segment register value only + until the next instruction.It is useful, for example, in the ARM + module: the modification of the T register does not affect existing + instructions later in the code. + + @param ea1: address to start to search for an instruction (C++: ea_t) + @param ea2: the maximal address (C++: ea_t) + @param rg: the segment register number (C++: int) + @param value: the segment register value (C++: sel_t) + +Help on function split_sreg_range in module ida_segregs: + +split_sreg_range(*args) -> 'bool' + split_sreg_range(ea, rg, v, tag, silent=False) -> bool + + + Create a new segment register range. This function is used when the + IDP emulator detects that a segment register changes its value. + + @param ea: linear address where the segment register will have a new + value. if ea== BADADDR , nothing to do. (C++: ea_t) + @param rg: the number of the segment register (C++: int) + @param v: the new value of the segment register. If the value is + unknown, you should specify BADSEL . (C++: sel_t) + @param tag: the register info tag. see Segment register range tags + (C++: uchar) + @param silent: if false, display a warning() in the case of failure + (C++: bool) + @return: success + +Help on class sreg_range_t in module ida_segregs: + +class sreg_range_t(ida_range.range_t) + | Proxy of C++ sreg_range_t class. + | + | Method resolution order: + | sreg_range_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sreg_range_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_sreg_range_t(...) + | delete_sreg_range_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | tag + | sreg_range_t_tag_get(self) -> uchar + | + | thisown + | The membership flag + | + | val + | sreg_range_t_val_get(self) -> sel_t + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +=== ida_segregs EPYDOC INJECTIONS === +ida_segregs.SR_auto +""" +the value is determined by IDA +""" + +ida_segregs.SR_autostart +""" +used as 'SR_auto' for segment starting address +""" + +ida_segregs.SR_inherit +""" +the value is inherited from the previous range +""" + +ida_segregs.SR_user +""" +the value is specified by the user +""" +=== ida_segregs EPYDOC INJECTIONS END === +Help on function build_strlist in module ida_strlist: + +build_strlist(*args) -> 'void' + build_strlist() + + + Build the string list. You should initialize options before this call + using the restore_config() or setup_strings_window() methods. + +Help on function clear_strlist in module ida_strlist: + +clear_strlist(*args) -> 'void' + clear_strlist() + + + Clear the string list. + +Help on function get_strlist_item in module ida_strlist: + +get_strlist_item(*args) -> 'bool' + get_strlist_item(si, n) -> bool + + + Get nth element of the string list (n=0.. 'get_strlist_qty()' -1) + + + @param si (C++: string_info_t *) + @param n (C++: size_t) + +Help on function get_strlist_options in module ida_strlist: + +get_strlist_options(*args) -> 'strwinsetup_t *' + get_strlist_options() -> strwinsetup_t + + + Get access to the static string list options. + +Help on function get_strlist_qty in module ida_strlist: + +get_strlist_qty(*args) -> 'size_t' + get_strlist_qty() -> size_t + + + Get number of elements in the string list. + +Help on class string_info_t in module ida_strlist: + +class string_info_t(builtins.object) + | Proxy of C++ string_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> string_info_t + | __init__(self, _ea) -> string_info_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_string_info_t(...) + | delete_string_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | string_info_t_ea_get(self) -> ea_t + | + | length + | string_info_t_length_get(self) -> int + | + | thisown + | The membership flag + | + | type + | string_info_t_type_get(self) -> int + +Help on class strwinsetup_t in module ida_strlist: + +class strwinsetup_t(builtins.object) + | Proxy of C++ strwinsetup_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strwinsetup_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_strwinsetup_t(...) + | delete_strwinsetup_t(self) + | + | _get_strtypes(self, *args) -> 'PyObject *' + | _get_strtypes(self) -> PyObject * + | + | _set_strtypes(self, *args) -> 'PyObject *' + | _set_strtypes(self, py_t) -> PyObject * + | + | is_initialized(self, *args) -> 'bool' + | is_initialized(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | display_only_existing_strings + | strwinsetup_t_display_only_existing_strings_get(self) -> uchar + | + | ignore_heads + | strwinsetup_t_ignore_heads_get(self) -> uchar + | + | minlen + | strwinsetup_t_minlen_get(self) -> sval_t + | + | only_7bit + | strwinsetup_t_only_7bit_get(self) -> uchar + | + | strtypes + | _get_strtypes(self) -> PyObject * + | + | thisown + | The membership flag + +Help on function add_struc in module ida_struct: + +add_struc(*args) -> 'tid_t' + add_struc(idx, name, is_union=False) -> tid_t + + + Create a structure type. if idx== 'BADADDR' then add as the last idx. + if name==NULL then a name will be generated "struct_%d". + + @param idx (C++: uval_t) + @param name (C++: const char *) + @param is_union (C++: bool) + +Help on function add_struc_member in module ida_struct: + +add_struc_member(*args) -> 'struc_error_t' + add_struc_member(sptr, fieldname, offset, flag, mt, nbytes) -> struc_error_t + + + Add member to existing structure. + + @param sptr: structure to modify (C++: struc_t *) + @param fieldname: if NULL, then "anonymous_#" name will be generated + (C++: const char *) + @param offset: BADADDR means add to the end of structure (C++: ea_t) + @param flag: type + representation bits (C++: flags_t) + @param mt: additional info about member type. must be present for + structs, offsets, enums, strings, struct offsets. (C++: + const opinfo_t *) + @param nbytes: if == 0 then the structure will be a varstruct. in this + case the member should be the last member in the + structure (C++: asize_t) + +Help on function del_member_tinfo in module ida_struct: + +del_member_tinfo(*args) -> 'bool' + del_member_tinfo(sptr, mptr) -> bool + + + Delete tinfo for given member. + + + @param sptr (C++: struc_t *) + @param mptr (C++: member_t *) + +Help on function del_struc in module ida_struct: + +del_struc(*args) -> 'bool' + del_struc(sptr) -> bool + + + Delete a structure type. + + + @param sptr (C++: struc_t *) + +Help on function del_struc_member in module ida_struct: + +del_struc_member(*args) -> 'bool' + del_struc_member(sptr, offset) -> bool + + + Delete member at given offset. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + +Help on function del_struc_members in module ida_struct: + +del_struc_members(*args) -> 'int' + del_struc_members(sptr, off1, off2) -> int + + + Delete members which occupy range of offsets (off1..off2). + + @param sptr (C++: struc_t *) + @param off1 (C++: ea_t) + @param off2 (C++: ea_t) + @return: number of deleted members or -1 on error + +Help on function expand_struc in module ida_struct: + +expand_struc(*args) -> 'bool' + expand_struc(sptr, offset, delta, recalc=True) -> bool + + + Expand/Shrink structure type. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param delta (C++: adiff_t) + @param recalc (C++: bool) + +Help on function get_best_fit_member in module ida_struct: + +get_best_fit_member(*args) -> 'member_t *' + get_best_fit_member(sptr, offset) -> member_t + + + Get member that is most likely referenced by the specified offset. + Useful for offsets > sizeof(struct). + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_first_struc_idx in module ida_struct: + +get_first_struc_idx(*args) -> 'uval_t' + get_first_struc_idx() -> uval_t + + + Get index of first structure. + + @return: BADADDR if no known structures, 0 otherwise + +Help on function get_last_struc_idx in module ida_struct: + +get_last_struc_idx(*args) -> 'uval_t' + get_last_struc_idx() -> uval_t + + + Get index of last structure. + + @return: BADADDR if no known structures, get_struc_qty() -1 + otherwise + +Help on function get_max_offset in module ida_struct: + +get_max_offset(*args) -> 'ea_t' + get_max_offset(sptr) -> ea_t + + + For unions: returns number of members, for structs: returns size of + structure. + + + @param sptr (C++: struc_t *) + +Help on function get_member in module ida_struct: + +get_member(*args) -> 'member_t *' + get_member(sptr, offset) -> member_t + + + Get member at given offset. + + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_member_by_fullname in module ida_struct: + +get_member_by_fullname(*args) -> 'struc_t **' + get_member_by_fullname(fullname) -> member_t + + + Get a member by its fully qualified name, "struct.field". + + + @param fullname (C++: const char *) + +Help on function get_member_by_id in module ida_struct: + +get_member_by_id(*args) -> 'qstring *, struc_t **' + get_member_by_id(mid) -> member_t + + + Check if the specified member id points to a struct member. + + + @param mid (C++: tid_t) + +Help on function get_member_by_name in module ida_struct: + +get_member_by_name(*args) -> 'member_t *' + get_member_by_name(sptr, membername) -> member_t + + + Get a member by its name, like "field44". + + + @param sptr (C++: const struc_t *) + @param membername (C++: const char *) + +Help on function get_member_cmt in module ida_struct: + +get_member_cmt(*args) -> 'qstring *' + get_member_cmt(mid, repeatable) -> str + + + Get comment of structure member. + + + @param mid (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_member_fullname in module ida_struct: + +get_member_fullname(*args) -> 'qstring *' + get_member_fullname(mid) -> str + + + Get a member's fully qualified name, "struct.field". + + + @param mid (C++: tid_t) + +Help on function get_member_id in module ida_struct: + +get_member_id(*args) -> 'tid_t' + get_member_id(sptr, offset) -> tid_t + + + Get member id at given offset. + + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_member_name in module ida_struct: + +get_member_name(*args) -> 'qstring *' + get_member_name(mid) -> str + + + Get name of structure member. + + + @param mid (C++: tid_t) + +Help on function get_member_size in module ida_struct: + +get_member_size(*args) -> 'asize_t' + get_member_size(nonnul_mptr) -> asize_t + + + Get size of structure member. May return 0 for the last member of + varstruct. For union members, returns 'member_t::eoff' . + +Help on function get_member_struc in module ida_struct: + +get_member_struc(*args) -> 'struc_t *' + get_member_struc(fullname) -> struc_t + + + Get containing structure of member by its full name "struct.field". + + + @param fullname (C++: const char *) + +Help on function get_member_tinfo in module ida_struct: + +get_member_tinfo(*args) -> 'bool' + get_member_tinfo(tif, mptr) -> bool + + + Get tinfo for given member. + + + @param tif (C++: tinfo_t *) + @param mptr (C++: const member_t *) + +Help on function get_next_member_idx in module ida_struct: + +get_next_member_idx(*args) -> 'ssize_t' + get_next_member_idx(sptr, off) -> ssize_t + + + Get the next member idx, if it does not exist, return -1. + + + @param sptr (C++: const struc_t *) + @param off (C++: asize_t) + +Help on function get_next_struc_idx in module ida_struct: + +get_next_struc_idx(*args) -> 'uval_t' + get_next_struc_idx(idx) -> uval_t + + + Get next struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is out of bounds, otherwise idx++ + +Help on function get_or_guess_member_tinfo in module ida_struct: + +get_or_guess_member_tinfo(*args) -> 'bool' + get_or_guess_member_tinfo(tif, mptr) -> bool + + + Try to get tinfo for given member - if failed, generate a tinfo using + information about the member id from the disassembly + + @param tif (C++: tinfo_t *) + @param mptr (C++: const member_t *) + +Help on function get_prev_member_idx in module ida_struct: + +get_prev_member_idx(*args) -> 'ssize_t' + get_prev_member_idx(sptr, off) -> ssize_t + + + Get the prev member idx, if it does not exist, return -1. + + + @param sptr (C++: const struc_t *) + @param off (C++: asize_t) + +Help on function get_prev_struc_idx in module ida_struct: + +get_prev_struc_idx(*args) -> 'uval_t' + get_prev_struc_idx(idx) -> uval_t + + + Get previous struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is negative, otherwise idx - 1 + +Help on function get_sptr in module ida_struct: + +get_sptr(*args) -> 'struc_t *' + get_sptr(mptr) -> struc_t + + + Get child struct if member is a struct. + + + @param mptr (C++: const member_t *) + +Help on function get_struc in module ida_struct: + +get_struc(*args) -> 'struc_t *' + get_struc(id) -> struc_t + + + Get pointer to struct type info. + + + @param id (C++: tid_t) + +Help on function get_struc_by_idx in module ida_struct: + +get_struc_by_idx(*args) -> 'tid_t' + get_struc_by_idx(idx) -> tid_t + + + Get struct id by struct number. + + + @param idx (C++: uval_t) + +Help on function get_struc_cmt in module ida_struct: + +get_struc_cmt(*args) -> 'qstring *' + get_struc_cmt(id, repeatable) -> str + + + Get struct comment. + + + @param id (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_struc_first_offset in module ida_struct: + +get_struc_first_offset(*args) -> 'ea_t' + get_struc_first_offset(sptr) -> ea_t + + + Get offset of first member. + + @param sptr (C++: const struc_t *) + @return: BADADDR if memqty == 0 + +Help on function get_struc_id in module ida_struct: + +get_struc_id(*args) -> 'tid_t' + get_struc_id(name) -> tid_t + + + Get struct id by name. + + + @param name (C++: const char *) + +Help on function get_struc_idx in module ida_struct: + +get_struc_idx(*args) -> 'uval_t' + get_struc_idx(id) -> uval_t + + + Get internal number of the structure. + + + @param id (C++: tid_t) + +Help on function get_struc_last_offset in module ida_struct: + +get_struc_last_offset(*args) -> 'ea_t' + get_struc_last_offset(sptr) -> ea_t + + + Get offset of last member. + + @param sptr (C++: const struc_t *) + @return: BADADDR if memqty == 0 + +Help on function get_struc_name in module ida_struct: + +get_struc_name(*args) -> 'qstring *' + get_struc_name(id, flags=0) -> str + + + Get struct name by id + + @param id: struct id (C++: tid_t) + @param flags: Struct name flags (C++: int) + +Help on function get_struc_next_offset in module ida_struct: + +get_struc_next_offset(*args) -> 'ea_t' + get_struc_next_offset(sptr, offset) -> ea_t + + + Get offset of member with smallest offset larger than 'offset'. + + @param sptr (C++: const struc_t *) + @param offset (C++: ea_t) + @return: BADADDR if no next offset + +Help on function get_struc_prev_offset in module ida_struct: + +get_struc_prev_offset(*args) -> 'ea_t' + get_struc_prev_offset(sptr, offset) -> ea_t + + + Get offset of member with largest offset less than 'offset'. + + @param sptr (C++: const struc_t *) + @param offset (C++: ea_t) + @return: BADADDR if no prev offset + +Help on function get_struc_qty in module ida_struct: + +get_struc_qty(*args) -> 'size_t' + get_struc_qty() -> size_t + + + Get number of known structures. + +Help on function get_struc_size in module ida_struct: + +get_struc_size(*args) -> 'asize_t' + get_struc_size(sptr) -> asize_t + get_struc_size(id) -> asize_t + + + Get struct size (also see 'get_struc_size(tid_t)' ) + + + @param sptr (C++: const struc_t *) + +Help on function is_anonymous_member_name in module ida_struct: + +is_anonymous_member_name(*args) -> 'bool' + is_anonymous_member_name(name) -> bool + + + Is member name prefixed with "anonymous"? + + + @param name (C++: const char *) + +Help on function is_dummy_member_name in module ida_struct: + +is_dummy_member_name(*args) -> 'bool' + is_dummy_member_name(name) -> bool + + + Is member name an auto-generated name? + + + @param name (C++: const char *) + +Help on function is_member_id in module ida_struct: + +is_member_id(*args) -> 'bool' + is_member_id(mid) -> bool + + + Is a member id? + + + @param mid (C++: tid_t) + +Help on function is_special_member in module ida_struct: + +is_special_member(*args) -> 'bool' + is_special_member(id) -> bool + + + Is a special member with the name beginning with ' '? + + + @param id (C++: tid_t) + +Help on function is_union in module ida_struct: + +is_union(*args) -> 'bool' + is_union(id) -> bool + + + Is a union? + + + @param id (C++: tid_t) + +Help on function is_varmember in module ida_struct: + +is_varmember(*args) -> 'bool' + is_varmember(mptr) -> bool + + + Is variable size member? + + + @param mptr (C++: const member_t *) + +Help on function is_varstr in module ida_struct: + +is_varstr(*args) -> 'bool' + is_varstr(id) -> bool + + + Is variable size structure? + + + @param id (C++: tid_t) + +Help on class member_t in module ida_struct: + +class member_t(builtins.object) + | Proxy of C++ member_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> member_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_member_t(...) + | delete_member_t(self) + | + | by_til(self, *args) -> 'bool' + | by_til(self) -> bool + | + | get_soff(self, *args) -> 'ea_t' + | get_soff(self) -> ea_t + | + | has_ti(self, *args) -> 'bool' + | has_ti(self) -> bool + | + | has_union(self, *args) -> 'bool' + | has_union(self) -> bool + | + | is_baseclass(self, *args) -> 'bool' + | is_baseclass(self) -> bool + | + | is_destructor(self, *args) -> 'bool' + | is_destructor(self) -> bool + | + | is_dupname(self, *args) -> 'bool' + | is_dupname(self) -> bool + | + | unimem(self, *args) -> 'bool' + | unimem(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | eoff + | member_t_eoff_get(self) -> ea_t + | + | flag + | member_t_flag_get(self) -> flags_t + | + | id + | member_t_id_get(self) -> tid_t + | + | props + | member_t_props_get(self) -> uint32 + | + | soff + | member_t_soff_get(self) -> ea_t + | + | thisown + | The membership flag + +Help on function retrieve_member_info in module ida_struct: + +retrieve_member_info(*args) -> 'opinfo_t *' + retrieve_member_info(buf, mptr) -> opinfo_t + + + Get operand type info for member. + + + @param buf (C++: opinfo_t *) + @param mptr (C++: const member_t *) + +Help on function save_struc in module ida_struct: + +save_struc(*args) -> 'void' + save_struc(sptr, may_update_ltypes=True) + + + Update struct information in the database (internal function) + + + @param sptr (C++: struc_t *) + @param may_update_ltypes (C++: bool) + +Help on function set_member_cmt in module ida_struct: + +set_member_cmt(*args) -> 'bool' + set_member_cmt(mptr, cmt, repeatable) -> bool + + + Set member comment. + + + @param mptr (C++: member_t *) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_member_name in module ida_struct: + +set_member_name(*args) -> 'bool' + set_member_name(sptr, offset, name) -> bool + + + Set name of member at given offset. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param name (C++: const char *) + +Help on function set_member_tinfo in module ida_struct: + +set_member_tinfo(*args) -> 'smt_code_t' + set_member_tinfo(sptr, mptr, memoff, tif, flags) -> smt_code_t + + + Set tinfo for given member. + + @param sptr: containing struct (C++: struc_t *) + @param mptr: target member (C++: member_t *) + @param memoff: offset within member (C++: uval_t) + @param tif: type info (C++: const tinfo_t &) + @param flags: Set member tinfo flags (C++: int) + +Help on function set_member_type in module ida_struct: + +set_member_type(*args) -> 'bool' + set_member_type(sptr, offset, flag, mt, nbytes) -> bool + + + Set type of member at given offset (also see 'add_struc_member()' ) + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param flag (C++: flags_t) + @param mt (C++: const opinfo_t *) + @param nbytes (C++: asize_t) + +Help on function set_struc_align in module ida_struct: + +set_struc_align(*args) -> 'bool' + set_struc_align(sptr, shift) -> bool + + + Set structure alignment ( 'SF_ALIGN' ) + + + @param sptr (C++: struc_t *) + @param shift (C++: int) + +Help on function set_struc_cmt in module ida_struct: + +set_struc_cmt(*args) -> 'bool' + set_struc_cmt(id, cmt, repeatable) -> bool + + + Set structure comment. + + + @param id (C++: tid_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_struc_hidden in module ida_struct: + +set_struc_hidden(*args) -> 'void' + set_struc_hidden(sptr, is_hidden) + + + Hide/unhide a struct type. + + + @param sptr (C++: struc_t *) + @param is_hidden (C++: bool) + +Help on function set_struc_idx in module ida_struct: + +set_struc_idx(*args) -> 'bool' + set_struc_idx(sptr, idx) -> bool + + + Set internal number of struct. Also see 'get_struc_idx()' , + 'get_struc_by_idx()' . + + @param sptr (C++: const struc_t *) + @param idx (C++: uval_t) + +Help on function set_struc_listed in module ida_struct: + +set_struc_listed(*args) -> 'void' + set_struc_listed(sptr, is_listed) + + + Add/remove a struct type from the struct list. + + + @param sptr (C++: struc_t *) + @param is_listed (C++: bool) + +Help on function set_struc_name in module ida_struct: + +set_struc_name(*args) -> 'bool' + set_struc_name(id, name) -> bool + + + Set structure name. + + + @param id (C++: tid_t) + @param name (C++: const char *) + +Help on function stroff_as_size in module ida_struct: + +stroff_as_size(*args) -> 'bool' + stroff_as_size(plen, sptr, value) -> bool + + + Should display a structure offset expression as the structure size? + + + @param plen (C++: int) + @param sptr (C++: const struc_t *) + @param value (C++: asize_t) + +Help on class struc_t in module ida_struct: + +class struc_t(builtins.object) + | Proxy of C++ struc_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_struc_t(...) + | delete_struc_t(self) + | + | from_til(self, *args) -> 'bool' + | from_til(self) -> bool + | + | get_alignment(self, *args) -> 'int' + | get_alignment(self) -> int + | + | get_member(self, *args) -> 'member_t *' + | get_member(self, index) -> member_t + | + | has_union(self, *args) -> 'bool' + | has_union(self) -> bool + | + | is_choosable(self, *args) -> 'bool' + | is_choosable(self) -> bool + | + | is_frame(self, *args) -> 'bool' + | is_frame(self) -> bool + | + | is_ghost(self, *args) -> 'bool' + | is_ghost(self) -> bool + | + | is_hidden(self, *args) -> 'bool' + | is_hidden(self) -> bool + | + | is_union(self, *args) -> 'bool' + | is_union(self) -> bool + | + | is_varstr(self, *args) -> 'bool' + | is_varstr(self) -> bool + | + | set_alignment(self, *args) -> 'void' + | set_alignment(self, shift) + | + | set_ghost(self, *args) -> 'void' + | set_ghost(self, _is_ghost) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | age + | struc_t_age_get(self) -> ushort + | + | id + | struc_t_id_get(self) -> tid_t + | + | members + | struc_t_members_get(self) -> member_t + | + | memqty + | struc_t_memqty_get(self) -> uint32 + | + | ordinal + | struc_t_ordinal_get(self) -> int32 + | + | props + | struc_t_props_get(self) -> uint32 + | + | thisown + | The membership flag + +Help on class struct_field_visitor_t in module ida_struct: + +class struct_field_visitor_t(builtins.object) + | Proxy of C++ struct_field_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> struct_field_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_struct_field_visitor_t(...) + | delete_struct_field_visitor_t(self) + | + | visit_field(self, *args) -> 'int' + | visit_field(self, sptr, mptr) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function visit_stroff_fields in module ida_struct: + +visit_stroff_fields(*args) -> 'adiff_t *' + visit_stroff_fields(sfv, path, disp, appzero) -> flags_t + + + Visit structure fields in a stroff expression or in a reference to a + struct data variable. This function can be used to enumerate all + components of an expression like 'a.b.c'. + + @param sfv: visitor object (C++: struct_field_visitor_t &) + @param path: struct path (path[0] contains the initial struct id) + (C++: const tid_t *) + @param disp: offset into structure (C++: adiff_t *) + @param appzero: should visit field at offset zero? (C++: bool) + +=== ida_struct EPYDOC INJECTIONS === +ida_struct.MF_BASECLASS +""" +a special member representing base class +""" + +ida_struct.MF_BYTIL +""" +the member was created due to the type system +""" + +ida_struct.MF_DTOR +""" +a special member representing destructor +""" + +ida_struct.MF_DUPNAME +""" +duplicate name resolved with _N suffix (N==soff) +""" + +ida_struct.MF_HASTI +""" +has type information? +""" + +ida_struct.MF_HASUNI +""" +has members of type "union"? +""" + +ida_struct.MF_OK +""" +is the member ok? (always yes) +""" + +ida_struct.MF_UNIMEM +""" +is a member of a union? +""" + +ida_struct.SET_MEMTI_BYTIL +""" +new type was created by the type subsystem +""" + +ida_struct.SET_MEMTI_COMPATIBLE +""" +new type must be compatible with the old +""" + +ida_struct.SET_MEMTI_FUNCARG +""" +mptr is function argument (cannot create arrays) +""" + +ida_struct.SET_MEMTI_MAY_DESTROY +""" +may destroy other members +""" + +ida_struct.SET_MEMTI_USERTI +""" +user-specified type +""" + +ida_struct.SF_ALIGN +""" +alignment (shift amount: 0..31) +""" + +ida_struct.SF_FRAME +""" +the structure is a function frame +""" + +ida_struct.SF_GHOST +""" +ghost copy of a local type +""" + +ida_struct.SF_HASUNI +""" +has members of type "union"? +""" + +ida_struct.SF_HIDDEN +""" +the structure is collapsed +""" + +ida_struct.SF_NOLIST +""" +don't include in the chooser list +""" + +ida_struct.SF_TYPLIB +""" +the structure comes from type library +""" + +ida_struct.SF_UNION +""" +varunions are prohibited! + +is a union? +""" + +ida_struct.SF_VAR +""" +is variable size structure (varstruct)? a variable size structure is +one with the zero size last member. if the last member is a varstruct, +then the current structure is a varstruct too. +""" + +ida_struct.STRNFL_REGEX +""" +apply regular expressions to beautify the name +""" + +ida_struct.STRUC_SEPARATOR +""" +structname.fieldname +""" +=== ida_struct EPYDOC INJECTIONS END === +Help on function add_tryblk in module ida_tryblks: + +add_tryblk(*args) -> 'int' + add_tryblk(tb) -> int + + + Add one try block information. + + @param tb: try block to add. (C++: const tryblk_t &) + @return: error code; 0 means good + +Help on class catch_t in module ida_tryblks: + +class catch_t(try_handler_t) + | Proxy of C++ catch_t class. + | + | Method resolution order: + | catch_t + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> catch_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_catch_t(...) + | delete_catch_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | obj + | catch_t_obj_get(self) -> sval_t + | + | thisown + | The membership flag + | + | type_id + | catch_t_type_id_get(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Methods inherited from try_handler_t: + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from try_handler_t: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.rangevec_base_t: + | + | __hash__ = None + +Help on class catchvec_t in module ida_tryblks: + +class catchvec_t(builtins.object) + | Proxy of C++ qvector< catch_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'catch_t const &' + | __getitem__(self, i) -> catch_t + | + | __init__(self, *args) + | __init__(self) -> catchvec_t + | __init__(self, x) -> catchvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_catchvec_t(...) + | delete_catchvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'catch_t const &' + | at(self, _idx) -> catch_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< catch_t >::const_iterator' + | begin(self) -> catch_t + | begin(self) -> catch_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< catch_t >::const_iterator' + | end(self) -> catch_t + | end(self) -> catch_t + | + | erase(self, *args) -> 'qvector< catch_t >::iterator' + | erase(self, it) -> catch_t + | erase(self, first, last) -> catch_t + | + | extract(self, *args) -> 'catch_t *' + | extract(self) -> catch_t + | + | find(self, *args) -> 'qvector< catch_t >::const_iterator' + | find(self, x) -> catch_t + | find(self, x) -> catch_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=catch_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< catch_t >::iterator' + | insert(self, it, x) -> catch_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'catch_t &' + | push_back(self, x) + | push_back(self) -> catch_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function del_tryblks in module ida_tryblks: + +del_tryblks(*args) -> 'void' + del_tryblks(range) + + + Delete try block information in the specified range. + + @param range: the range to be cleared (C++: const range_t &) + +Help on function find_syseh in module ida_tryblks: + +find_syseh(*args) -> 'ea_t' + find_syseh(ea) -> ea_t + + + Find the start address of the system eh region including the argument. + + @param ea: search address (C++: ea_t) + @return: start address of surrounding tryblk, otherwise BADADDR + +Help on function get_tryblks in module ida_tryblks: + +get_tryblks(*args) -> 'size_t' + get_tryblks(tbv, range) -> size_t + + + Retrieve try block information from the specified address range. Try + blocks are sorted by starting address and their nest levels + calculated. + + @param tbv: output buffer; may be NULL (C++: tryblks_t *) + @param range: address range to change (C++: const range_t &) + @return: number of found try blocks + +Help on class seh_t in module ida_tryblks: + +class seh_t(try_handler_t) + | Proxy of C++ seh_t class. + | + | Method resolution order: + | seh_t + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> seh_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_seh_t(...) + | delete_seh_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | filter + | seh_t_filter_get(self) -> rangevec_t + | + | seh_code + | seh_t_seh_code_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from try_handler_t: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.rangevec_base_t: + | + | __hash__ = None + +Help on class try_handler_t in module ida_tryblks: + +class try_handler_t(ida_range.rangevec_t) + | Proxy of C++ try_handler_t class. + | + | Method resolution order: + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> try_handler_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_try_handler_t(...) + | delete_try_handler_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.rangevec_base_t: + | + | __hash__ = None + +Help on class tryblk_t in module ida_tryblks: + +class tryblk_t(ida_range.rangevec_t) + | Proxy of C++ tryblk_t class. + | + | Method resolution order: + | tryblk_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tryblk_t + | __init__(self, r) -> tryblk_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_tryblk_t(...) + | delete_tryblk_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | cpp(self, *args) -> 'catchvec_t &' + | cpp(self) -> catchvec_t + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | get_kind(self, *args) -> 'uchar' + | get_kind(self) -> uchar + | + | is_cpp(self, *args) -> 'bool' + | is_cpp(self) -> bool + | + | is_seh(self, *args) -> 'bool' + | is_seh(self) -> bool + | + | seh(self, *args) -> 'seh_t &' + | seh(self) -> seh_t + | + | set_cpp(self, *args) -> 'catchvec_t &' + | set_cpp(self) -> catchvec_t + | + | set_seh(self, *args) -> 'seh_t &' + | set_seh(self) -> seh_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | level + | tryblk_t_level_get(self) -> uchar + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.rangevec_base_t: + | + | __hash__ = None + +Help on class tryblks_t in module ida_tryblks: + +class tryblks_t(builtins.object) + | Proxy of C++ qvector< tryblk_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'tryblk_t const &' + | __getitem__(self, i) -> tryblk_t + | + | __init__(self, *args) + | __init__(self) -> tryblks_t + | __init__(self, x) -> tryblks_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_tryblks_t(...) + | delete_tryblks_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'tryblk_t const &' + | at(self, _idx) -> tryblk_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< tryblk_t >::const_iterator' + | begin(self) -> tryblk_t + | begin(self) -> tryblk_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< tryblk_t >::const_iterator' + | end(self) -> tryblk_t + | end(self) -> tryblk_t + | + | erase(self, *args) -> 'qvector< tryblk_t >::iterator' + | erase(self, it) -> tryblk_t + | erase(self, first, last) -> tryblk_t + | + | extract(self, *args) -> 'tryblk_t *' + | extract(self) -> tryblk_t + | + | find(self, *args) -> 'qvector< tryblk_t >::const_iterator' + | find(self, x) -> tryblk_t + | find(self, x) -> tryblk_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=tryblk_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< tryblk_t >::iterator' + | insert(self, it, x) -> tryblk_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'tryblk_t &' + | push_back(self, x) + | push_back(self) -> tryblk_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +=== ida_tryblks EPYDOC INJECTIONS === +ida_tryblks.TBERR_EMPTY +""" +empty try block +""" + +ida_tryblks.TBERR_END +""" +bad end address +""" + +ida_tryblks.TBERR_INTERSECT +""" +range would intersect inner tryblk +""" + +ida_tryblks.TBERR_KIND +""" +illegal try block kind +""" + +ida_tryblks.TBERR_NO_CATCHES +""" +no catch blocks at all +""" + +ida_tryblks.TBERR_OK +""" +ok +""" + +ida_tryblks.TBERR_ORDER +""" +bad address order +""" + +ida_tryblks.TBERR_START +""" +bad start address +""" +=== ida_tryblks EPYDOC INJECTIONS END === +Help on function add_til in module ida_typeinf: + +add_til(*args) -> 'int' + add_til(name, flags) -> int + + + Load a til file. + + @param name: til name (C++: const char *) + @param flags: combination of Load TIL flags (C++: int) + @return: one of Load TIL result codes + +Help on function alloc_type_ordinal in module ida_typeinf: + +alloc_type_ordinal(*args) -> 'uint32' + alloc_type_ordinal(ti) -> uint32 + + + \call2{alloc_type_ordinals,ti,1} + + + @param ti (C++: til_t *) + +Help on function alloc_type_ordinals in module ida_typeinf: + +alloc_type_ordinals(*args) -> 'uint32' + alloc_type_ordinals(ti, qty) -> uint32 + + + Allocate a range of ordinal numbers for new types. + + @param ti: type library (C++: til_t *) + @param qty: number of ordinals to allocate (C++: int) + @return: the first ordinal. 0 means failure. + +Help on class aloc_visitor_t in module ida_typeinf: + +class aloc_visitor_t(builtins.object) + | Proxy of C++ aloc_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> aloc_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_aloc_visitor_t(...) + | delete_aloc_visitor_t(self) + | + | visit_location(self, *args) -> 'int' + | visit_location(self, v, off, size) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function append_abi_opts in module ida_typeinf: + +append_abi_opts(*args) -> 'bool' + append_abi_opts(abi_opts, user_level=False) -> bool + + + Add/remove/check ABI option General form of full abi name: abiname- + opt1-opt2-... or -opt1-opt2-... + + @param abi_opts: - ABI options to add/remove in form opt1-opt2-... + (C++: const char *) + @param user_level: - initiated by user if TRUE (==SETCOMP_BY_USER) + (C++: bool) + @return: success + +Help on function append_argloc in module ida_typeinf: + +append_argloc(*args) -> 'bool' + append_argloc(out, vloc) -> bool + + + Serialize argument location. + + + @param out (C++: qtype *) + @param vloc (C++: const argloc_t &) + +Help on function append_tinfo_covered in module ida_typeinf: + +append_tinfo_covered(*args) -> 'bool' + append_tinfo_covered(out, typid, offset) -> bool + +Help on function apply_callee_tinfo in module ida_typeinf: + +apply_callee_tinfo(*args) -> 'bool' + apply_callee_tinfo(caller, tif) -> bool + + + Apply the type of the called function to the calling instruction. This + function will append parameter comments and rename the local variables + of the calling function. It also stores information about the + instructions that initialize call arguments in the database. Use + 'get_arg_addrs()' to retrieve it if necessary. Alternatively it is + possible to hook to processor_t::arg_addrs_ready event. + + @param caller: linear address of the calling instruction. must belong + to a function. (C++: ea_t) + @param tif: type info (C++: const tinfo_t &) + @return: success + +Help on function apply_cdecl in module ida_typeinf: + +apply_cdecl(*args) -> 'bool' + apply_cdecl(til, ea, decl, flags=0) -> bool + + + Apply the specified type to the address. This function parses the + declaration and calls 'apply_tinfo()' + + @param til: type library (C++: til_t *) + @param ea: linear address (C++: ea_t) + @param decl: type declaration in C form (C++: const char *) + @param flags: flags to pass to apply_tinfo ( TINFO_DEFINITE is always + passed) (C++: int) + @return: success + +Help on function apply_named_type in module ida_typeinf: + +apply_named_type(*args) -> 'bool' + apply_named_type(ea, name) -> bool + + + Apply the specified named type to the address. + + @param ea: linear address (C++: ea_t) + @param name: the type name, e.g. "FILE" (C++: const char *) + @return: success + +Help on function apply_once_tinfo_and_name in module ida_typeinf: + +apply_once_tinfo_and_name(*args) -> 'bool' + apply_once_tinfo_and_name(dea, tif, name) -> bool + + + Apply the specified type and name to the address. This function checks + if the address already has a type. If the old typedoes not exist or + the new type is 'better' than the old type, then thenew type will be + applied. A type is considered better if it has moreinformation (e.g. + 'BTMT_STRUCT' is better than 'BT_INT' ).The same logic is with the + name: if the address already have a meaningfulname, it will be + preserved. Only if the old name does not exist or itis a dummy name + like byte_123, it will be replaced by the new name. + + @param dea: linear address (C++: ea_t) + @param tif: type string in the internal format (C++: const tinfo_t + &) + @param name: new name for the address (C++: const char *) + @return: success + +Help on function apply_tinfo in module ida_typeinf: + +apply_tinfo(*args) -> 'bool' + apply_tinfo(ea, tif, flags) -> bool + + + Apply the specified type to the specified address. This function sets + the type and tries to convert the item at the specified address to + conform the type. + + @param ea: linear address (C++: ea_t) + @param tif: type string in internal format (C++: const tinfo_t &) + @param flags: combination of Apply tinfo flags (C++: uint32) + @return: success + +Help on function apply_tinfo_to_stkarg in module ida_typeinf: + +apply_tinfo_to_stkarg(*args) -> 'bool' + apply_tinfo_to_stkarg(insn, x, v, tif, name) -> bool + + + Helper function for the processor modules. to be called from + \ph{use_stkarg_type} + + @param insn (C++: const insn_t &) + @param x (C++: const op_t &) + @param v (C++: uval_t) + @param tif (C++: const tinfo_t &) + @param name (C++: const char *) + +Help on function apply_type in module ida_typeinf: + +apply_type(*args) -> 'bool' + apply_type(ti, _type, _fields, ea, flags) -> bool + + + Apply the specified type to the address + @param ti: Type info library. 'None' can be used. + @param py_type: type string + @param py_fields: fields string (may be empty or None) + @param ea: the address of the object + @param flags: combination of TINFO_... constants or 0 + @return: Boolean + +Help on class argloc_t in module ida_typeinf: + +class argloc_t(builtins.object) + | Proxy of C++ argloc_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> argloc_t + | __init__(self, r) -> argloc_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_argloc_t(...) + | delete_argloc_t(self) + | + | _consume_rrel(self, *args) -> 'bool' + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) -> 'bool' + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) -> 'void' + | _set_badloc(self) + | + | _set_biggest(self, *args) -> 'void' + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) -> 'void' + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) -> 'void' + | _set_ea(self, _ea) + | + | _set_reg1(self, *args) -> 'void' + | _set_reg1(self, reg, off=0) + | + | _set_reg2(self, *args) -> 'void' + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) -> 'void' + | _set_stkoff(self, off) + | + | advance(self, *args) -> 'bool' + | advance(self, delta) -> bool + | + | atype(self, *args) -> 'argloc_type_t' + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) -> 'sval_t' + | calc_offset(self) -> sval_t + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | consume_rrel(self, *args) -> 'void' + | consume_rrel(self, p) + | + | consume_scattered(self, *args) -> 'void' + | consume_scattered(self, p) + | + | get_biggest(self, *args) -> 'argloc_t::biggest_t' + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) -> 'void *' + | get_custom(self) -> void * + | + | get_ea(self, *args) -> 'ea_t' + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) -> 'uint32' + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) -> 'rrel_t const &' + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) -> 'bool' + | has_reg(self) -> bool + | + | has_stkoff(self, *args) -> 'bool' + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) -> 'bool' + | is_badloc(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_ea(self, *args) -> 'bool' + | is_ea(self) -> bool + | + | is_fragmented(self, *args) -> 'bool' + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) -> 'bool' + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_rrel(self, *args) -> 'bool' + | is_rrel(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) -> 'void' + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) -> 'void' + | justify_stkoff_right(self, size, _slotsize) + | + | reg1(self, *args) -> 'int' + | reg1(self) -> int + | + | reg2(self, *args) -> 'int' + | reg2(self) -> int + | + | regoff(self, *args) -> 'int' + | regoff(self) -> int + | + | scattered(self, *args) -> 'scattered_aloc_t const &' + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) -> 'void' + | set_badloc(self) + | + | set_ea(self, *args) -> 'void' + | set_ea(self, _ea) + | + | set_reg1(self, *args) -> 'void' + | set_reg1(self, reg, off=0) + | + | set_reg2(self, *args) -> 'void' + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, off) + | + | stkoff(self, *args) -> 'sval_t' + | stkoff(self) -> sval_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class argpart_t in module ida_typeinf: + +class argpart_t(argloc_t) + | Proxy of C++ argpart_t class. + | + | Method resolution order: + | argpart_t + | argloc_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, a) -> argpart_t + | __init__(self) -> argpart_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_argpart_t(...) + | delete_argpart_t(self) + | + | bad_offset(self, *args) -> 'bool' + | bad_offset(self) -> bool + | + | bad_size(self, *args) -> 'bool' + | bad_size(self) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | off + | argpart_t_off_get(self) -> ushort + | + | size + | argpart_t_size_get(self) -> ushort + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from argloc_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _consume_rrel(self, *args) -> 'bool' + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) -> 'bool' + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) -> 'void' + | _set_badloc(self) + | + | _set_biggest(self, *args) -> 'void' + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) -> 'void' + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) -> 'void' + | _set_ea(self, _ea) + | + | _set_reg1(self, *args) -> 'void' + | _set_reg1(self, reg, off=0) + | + | _set_reg2(self, *args) -> 'void' + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) -> 'void' + | _set_stkoff(self, off) + | + | advance(self, *args) -> 'bool' + | advance(self, delta) -> bool + | + | atype(self, *args) -> 'argloc_type_t' + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) -> 'sval_t' + | calc_offset(self) -> sval_t + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | consume_rrel(self, *args) -> 'void' + | consume_rrel(self, p) + | + | consume_scattered(self, *args) -> 'void' + | consume_scattered(self, p) + | + | get_biggest(self, *args) -> 'argloc_t::biggest_t' + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) -> 'void *' + | get_custom(self) -> void * + | + | get_ea(self, *args) -> 'ea_t' + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) -> 'uint32' + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) -> 'rrel_t const &' + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) -> 'bool' + | has_reg(self) -> bool + | + | has_stkoff(self, *args) -> 'bool' + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) -> 'bool' + | is_badloc(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_ea(self, *args) -> 'bool' + | is_ea(self) -> bool + | + | is_fragmented(self, *args) -> 'bool' + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) -> 'bool' + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_rrel(self, *args) -> 'bool' + | is_rrel(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) -> 'void' + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) -> 'void' + | justify_stkoff_right(self, size, _slotsize) + | + | reg1(self, *args) -> 'int' + | reg1(self) -> int + | + | reg2(self, *args) -> 'int' + | reg2(self) -> int + | + | regoff(self, *args) -> 'int' + | regoff(self) -> int + | + | scattered(self, *args) -> 'scattered_aloc_t const &' + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) -> 'void' + | set_badloc(self) + | + | set_ea(self, *args) -> 'void' + | set_ea(self, _ea) + | + | set_reg1(self, *args) -> 'void' + | set_reg1(self, reg, off=0) + | + | set_reg2(self, *args) -> 'void' + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, off) + | + | stkoff(self, *args) -> 'sval_t' + | stkoff(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from argloc_t: + | + | __hash__ = None + +Help on class argpartvec_t in module ida_typeinf: + +class argpartvec_t(builtins.object) + | Proxy of C++ qvector< argpart_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'argpart_t const &' + | __getitem__(self, i) -> argpart_t + | + | __init__(self, *args) + | __init__(self) -> argpartvec_t + | __init__(self, x) -> argpartvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_argpartvec_t(...) + | delete_argpartvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'argpart_t const &' + | at(self, _idx) -> argpart_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< argpart_t >::const_iterator' + | begin(self) -> argpart_t + | begin(self) -> argpart_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< argpart_t >::const_iterator' + | end(self) -> argpart_t + | end(self) -> argpart_t + | + | erase(self, *args) -> 'qvector< argpart_t >::iterator' + | erase(self, it) -> argpart_t + | erase(self, first, last) -> argpart_t + | + | extract(self, *args) -> 'argpart_t *' + | extract(self) -> argpart_t + | + | find(self, *args) -> 'qvector< argpart_t >::const_iterator' + | find(self, x) -> argpart_t + | find(self, x) -> argpart_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=argpart_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< argpart_t >::iterator' + | insert(self, it, x) -> argpart_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'argpart_t &' + | push_back(self, x) + | push_back(self) -> argpart_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class array_type_data_t in module ida_typeinf: + +class array_type_data_t(builtins.object) + | Proxy of C++ array_type_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, b=0, n=0) -> array_type_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_array_type_data_t(...) + | delete_array_type_data_t(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | array_type_data_t_base_get(self) -> uint32 + | + | elem_type + | array_type_data_t_elem_type_get(self) -> tinfo_t + | + | nelems + | array_type_data_t_nelems_get(self) -> uint32 + | + | thisown + | The membership flag + +Help on function begin_type_updating in module ida_typeinf: + +begin_type_updating(*args) -> 'void' + begin_type_updating(utp) + + + Mark the beginning of a large update operation on the types. Can be + used with 'add_enum_member()' , add_struc_member, etc... Also see + 'end_type_updating()' + + @param utp (C++: update_type_t) + +Help on class bitfield_type_data_t in module ida_typeinf: + +class bitfield_type_data_t(builtins.object) + | Proxy of C++ bitfield_type_data_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _nbytes=0, _width=0, _is_unsigned=False) -> bitfield_type_data_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bitfield_type_data_t(...) + | delete_bitfield_type_data_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | is_unsigned + | bitfield_type_data_t_is_unsigned_get(self) -> bool + | + | nbytes + | bitfield_type_data_t_nbytes_get(self) -> uchar + | + | thisown + | The membership flag + | + | width + | bitfield_type_data_t_width_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function calc_c_cpp_name in module ida_typeinf: + +calc_c_cpp_name(*args) -> 'qstring *' + calc_c_cpp_name(name, type, ccn_flags) -> str + + + Get C or C++ form of the name. + + @param name: original (mangled or decorated) name (C++: const char *) + @param type: name type if known, otherwise NULL (C++: const tinfo_t + *) + @param ccn_flags: one of C/C++ naming flags (C++: int) + +Help on function calc_number_of_children in module ida_typeinf: + +calc_number_of_children(*args) -> 'int' + calc_number_of_children(loc, tif, dont_deref_ptr=False) -> int + + + Calculate max number of lines of a formatted c data, when expanded ( + 'PTV_EXPAND' ). + + @param loc: location of the data ( ALOC_STATIC or ALOC_CUSTOM ) + (C++: const argloc_t &) + @param tif: type info (C++: const tinfo_t &) + @param dont_deref_ptr: consider 'ea' as the ptr value (C++: bool) + +Help on function calc_tinfo_gaps in module ida_typeinf: + +calc_tinfo_gaps(*args) -> 'bool' + calc_tinfo_gaps(out, typid) -> bool + +Help on function calc_type_size in module ida_typeinf: + +calc_type_size(*args) -> 'PyObject *' + calc_type_size(ti, tp) -> PyObject * + + + Returns the size of a type + @param ti: Type info. 'None' can be passed. + @param tp: type string + @return: + - None on failure + - The size of the type + +Help on class callregs_t in module ida_typeinf: + +class callregs_t(builtins.object) + | Proxy of C++ callregs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> callregs_t + | __init__(self, cc) -> callregs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_callregs_t(...) + | delete_callregs_t(self) + | + | init_regs(self, *args) -> 'void' + | init_regs(self, cc) + | + | reginds(self, *args) -> 'bool' + | reginds(self, gp_ind, fp_ind, r) -> bool + | + | reset(self, *args) -> 'void' + | reset(self) + | + | set(self, *args) -> 'void' + | set(self, _policy, gprs, fprs) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | regcount(*args) -> 'int' + | regcount(cc) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fpregs + | callregs_t_fpregs_get(self) -> intvec_t * + | + | gpregs + | callregs_t_gpregs_get(self) -> intvec_t * + | + | nregs + | callregs_t_nregs_get(self) -> int + | + | policy + | callregs_t_policy_get(self) -> argreg_policy_t + | + | thisown + | The membership flag + +Help on function callregs_t_regcount in module ida_typeinf: + +callregs_t_regcount(*args) -> 'int' + callregs_t_regcount(cc) -> int + +Help on function choose_local_tinfo in module ida_typeinf: + +choose_local_tinfo(*args) -> 'uint32' + choose_local_tinfo(ti, title, func=None, def_ord=0, ud=None) -> uint32 + + + Choose a type from the local type library. + + @param ti: pointer to til (C++: const til_t *) + @param title: title of listbox to display (C++: const char *) + @param func: predicate to select types to display (maybe NULL) (C++: + local_tinfo_predicate_t *) + @param def_ord: ordinal to position cursor before choose (C++: uint32) + @param ud: user data (C++: void *) + @return: == 0 means nothing is chosen, otherwise an ordinal number + +Help on function choose_local_tinfo_and_delta in module ida_typeinf: + +choose_local_tinfo_and_delta(*args) -> 'uint32' + choose_local_tinfo_and_delta(delta, ti, title, func=None, def_ord=0, ud=None) -> uint32 + + + Choose a type from the local type library and specify the pointer + shift value. + + @param delta: pointer shift value (C++: int32 *) + @param ti: pointer to til (C++: const til_t *) + @param title: title of listbox to display (C++: const char *) + @param func: predicate to select types to display (maybe NULL) (C++: + local_tinfo_predicate_t *) + @param def_ord: ordinal to position cursor before choose (C++: uint32) + @param ud: user data (C++: void *) + @return: == 0 means nothing is chosen, otherwise an ordinal number + +Help on function choose_named_type in module ida_typeinf: + +choose_named_type(*args) -> 'bool' + choose_named_type(out_sym, root_til, title, ntf_flags, predicate=None) -> bool + + + Choose a type from a type library. + + @param out_sym: pointer to be filled with the chosen type (C++: + til_symbol_t *) + @param root_til: pointer to starting til (the function will inspect + the base tils if allowed by flags) (C++: const til_t + *) + @param title: title of listbox to display (C++: const char *) + @param ntf_flags: combination of Flags for named types (C++: int) + @param predicate: predicate to select types to display (maybe NULL) + (C++: predicate_t *) + @return: false if nothing is chosen, otherwise true + +Help on function clear_tinfo_t in module ida_typeinf: + +clear_tinfo_t(*args) -> 'void' + clear_tinfo_t(_this) + +Help on function compact_til in module ida_typeinf: + +compact_til(*args) -> 'bool' + compact_til(ti) -> bool + + + Collect garbage in til. Must be called before storing the til. + + @param ti (C++: til_t *) + @return: true if any memory was freed + +Help on function compare_tinfo in module ida_typeinf: + +compare_tinfo(*args) -> 'bool' + compare_tinfo(t1, t2, tcflags) -> bool + +Help on class const_aloc_visitor_t in module ida_typeinf: + +class const_aloc_visitor_t(builtins.object) + | Proxy of C++ const_aloc_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> const_aloc_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_const_aloc_visitor_t(...) + | delete_const_aloc_visitor_t(self) + | + | visit_location(self, *args) -> 'int' + | visit_location(self, v, off, size) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function convert_pt_flags_to_hti in module ida_typeinf: + +convert_pt_flags_to_hti(*args) -> 'int' + convert_pt_flags_to_hti(pt_flags) -> int + + + Convert 'Type parsing flags' to 'Type formatting flags' . Type parsing + flags lesser than 0x10 don't have stable meaning and will be ignored + (more on these flags can be seen in idc.idc) + + @param pt_flags (C++: int) + +Help on function copy_named_type in module ida_typeinf: + +copy_named_type(*args) -> 'uint32' + copy_named_type(dsttil, srctil, name) -> uint32 + + + Copy a named type from one til to another. This function will copy the + specified type and all dependent types from the source type library to + the destination library. + + @param dsttil: Destination til. It must have orginal types enabled + (C++: til_t *) + @param srctil: Source til. (C++: const til_t *) + @param name: name of the type to copy (C++: const char *) + @return: ordinal number of the copied type. 0 means error + +Help on function copy_tinfo_t in module ida_typeinf: + +copy_tinfo_t(*args) -> 'void' + copy_tinfo_t(_this, r) + +Help on function create_numbered_type_name in module ida_typeinf: + +create_numbered_type_name(*args) -> 'qstring *' + create_numbered_type_name(ord) -> str + + + Create anonymous name for numbered type. This name can be used to + reference a numbered type by its ordinal Ordinal names have the + following format: '#' + set_de(ord) Returns: -1 if error, otherwise + the name length + + @param ord (C++: int32) + +Help on function create_tinfo in module ida_typeinf: + +create_tinfo(*args) -> 'bool' + create_tinfo(_this, bt, bt2, ptr) -> bool + +Help on function default_compiler in module ida_typeinf: + +default_compiler(*args) -> 'comp_t' + default_compiler() -> comp_t + + + Get compiler specified by \varmem{inf,idainfo,cc}. + +Help on function del_named_type in module ida_typeinf: + +del_named_type(*args) -> 'bool' + del_named_type(ti, name, ntf_flags) -> bool + + + Delete information about a symbol. + + @param ti: type library (C++: til_t *) + @param name: name of symbol (C++: const char *) + @param ntf_flags: combination of Flags for named types (C++: int) + @return: success + +Help on function del_numbered_type in module ida_typeinf: + +del_numbered_type(*args) -> 'bool' + del_numbered_type(ti, ordinal) -> bool + + + Delete a numbered type. + + + @param ti (C++: til_t *) + @param ordinal (C++: uint32) + +Help on function del_til in module ida_typeinf: + +del_til(*args) -> 'bool' + del_til(name) -> bool + + + Unload a til file. + + + @param name (C++: const char *) + +Help on function del_tinfo_attr in module ida_typeinf: + +del_tinfo_attr(*args) -> 'bool' + del_tinfo_attr(tif, key, make_copy) -> bool + +Help on function deref_ptr in module ida_typeinf: + +deref_ptr(*args) -> 'bool' + deref_ptr(ptr_ea, tif, closure_obj=None) -> bool + + + Dereference a pointer. + + @param ptr_ea: in/out parameter in: address of the pointer out: + the pointed address (C++: ea_t *) + @param tif: type of the pointer (C++: const tinfo_t &) + @param closure_obj: closure object (not used yet) (C++: ea_t *) + @return: success + +Help on function deserialize_tinfo in module ida_typeinf: + +deserialize_tinfo(*args) -> 'bool' + deserialize_tinfo(tif, til, ptype, pfields, pfldcmts) -> bool + +Help on function dstr_tinfo in module ida_typeinf: + +dstr_tinfo(*args) -> 'char const *' + dstr_tinfo(tif) -> char const * + +Help on function dump_func_type_data in module ida_typeinf: + +dump_func_type_data(*args) -> 'qstring *' + dump_func_type_data(fti, praloc_bits) -> str + + + Use 'func_type_data_t::dump()' + + + @param fti (C++: const func_type_data_t &) + @param praloc_bits (C++: int) + +Help on function end_type_updating in module ida_typeinf: + +end_type_updating(*args) -> 'void' + end_type_updating(utp) + + + Mark the end of a large update operation on the types (see + 'begin_type_updating()' ) + + + @param utp (C++: update_type_t) + +Help on class enum_member_t in module ida_typeinf: + +class enum_member_t(builtins.object) + | Proxy of C++ enum_member_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> enum_member_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_enum_member_t(...) + | delete_enum_member_t(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | enum_member_t_cmt_get(self) -> qstring * + | + | name + | enum_member_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | enum_member_t_value_get(self) -> uint64 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class enum_member_vec_t in module ida_typeinf: + +class enum_member_vec_t(builtins.object) + | Proxy of C++ qvector< enum_member_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'enum_member_t const &' + | __getitem__(self, i) -> enum_member_t + | + | __init__(self, *args) + | __init__(self) -> enum_member_vec_t + | __init__(self, x) -> enum_member_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_enum_member_vec_t(...) + | delete_enum_member_vec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'enum_member_t const &' + | at(self, _idx) -> enum_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | begin(self) -> enum_member_t + | begin(self) -> enum_member_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | end(self) -> enum_member_t + | end(self) -> enum_member_t + | + | erase(self, *args) -> 'qvector< enum_member_t >::iterator' + | erase(self, it) -> enum_member_t + | erase(self, first, last) -> enum_member_t + | + | extract(self, *args) -> 'enum_member_t *' + | extract(self) -> enum_member_t + | + | find(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | find(self, x) -> enum_member_t + | find(self, x) -> enum_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=enum_member_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< enum_member_t >::iterator' + | insert(self, it, x) -> enum_member_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'enum_member_t &' + | push_back(self, x) + | push_back(self) -> enum_member_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class enum_type_data_t in module ida_typeinf: + +class enum_type_data_t(enum_member_vec_t) + | Proxy of C++ enum_type_data_t class. + | + | Method resolution order: + | enum_type_data_t + | enum_member_vec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _bte=BTE_ALWAYS|BTE_HEX) -> enum_type_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_enum_type_data_t(...) + | delete_enum_type_data_t(self) + | + | calc_mask(self, *args) -> 'uint64' + | calc_mask(self) -> uint64 + | + | calc_nbytes(self, *args) -> 'int' + | calc_nbytes(self) -> int + | + | is_64bit(self, *args) -> 'bool' + | is_64bit(self) -> bool + | + | is_char(self, *args) -> 'bool' + | is_char(self) -> bool + | + | is_hex(self, *args) -> 'bool' + | is_hex(self) -> bool + | + | is_sdec(self, *args) -> 'bool' + | is_sdec(self) -> bool + | + | is_udec(self, *args) -> 'bool' + | is_udec(self) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bte + | enum_type_data_t_bte_get(self) -> bte_t + | + | group_sizes + | enum_type_data_t_group_sizes_get(self) -> intvec_t * + | + | taenum_bits + | enum_type_data_t_taenum_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from enum_member_vec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'enum_member_t const &' + | __getitem__(self, i) -> enum_member_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'enum_member_t const &' + | at(self, _idx) -> enum_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | begin(self) -> enum_member_t + | begin(self) -> enum_member_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | end(self) -> enum_member_t + | end(self) -> enum_member_t + | + | erase(self, *args) -> 'qvector< enum_member_t >::iterator' + | erase(self, it) -> enum_member_t + | erase(self, first, last) -> enum_member_t + | + | extract(self, *args) -> 'enum_member_t *' + | extract(self) -> enum_member_t + | + | find(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | find(self, x) -> enum_member_t + | find(self, x) -> enum_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=enum_member_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< enum_member_t >::iterator' + | insert(self, it, x) -> enum_member_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'enum_member_t &' + | push_back(self, x) + | push_back(self) -> enum_member_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from enum_member_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from enum_member_vec_t: + | + | __hash__ = None + +Help on function extract_argloc in module ida_typeinf: + +extract_argloc(*args) -> 'bool' + extract_argloc(vloc, ptype, is_retval) -> bool + + + Deserialize argument location. + + + @param vloc (C++: argloc_t *) + @param ptype (C++: const type_t **) + @param is_retval (C++: bool) + +Help on function find_tinfo_udt_member in module ida_typeinf: + +find_tinfo_udt_member(*args) -> 'int' + find_tinfo_udt_member(udm, typid, strmem_flags) -> int + +Help on function first_named_type in module ida_typeinf: + +first_named_type(*args) -> 'char const *' + first_named_type(ti, ntf_flags) -> char const * + + + Enumerate types. Returns mangled names. Never returns anonymous types. + To include it, enumerate types by ordinals. + + @param ti (C++: const til_t *) + @param ntf_flags (C++: int) + +Help on function for_all_arglocs in module ida_typeinf: + +for_all_arglocs(*args) -> 'int' + for_all_arglocs(vv, vloc, size, off=0) -> int + + + Compress larger argloc types and initiate the aloc visitor. + + + @param vv (C++: aloc_visitor_t &) + @param vloc (C++: argloc_t &) + @param size (C++: int) + @param off (C++: int) + +Help on function for_all_const_arglocs in module ida_typeinf: + +for_all_const_arglocs(*args) -> 'int' + for_all_const_arglocs(vv, vloc, size, off=0) -> int + + + See 'for_all_arglocs()' + + + @param vv (C++: const_aloc_visitor_t &) + @param vloc (C++: const argloc_t &) + @param size (C++: int) + @param off (C++: int) + +Help on function free_til in module ida_typeinf: + +free_til(*args) -> 'void' + free_til(ti) + + + Free memory allocated by til. + + + @param ti (C++: til_t *) + +Help on function func_has_stkframe_hole in module ida_typeinf: + +func_has_stkframe_hole(*args) -> 'bool' + func_has_stkframe_hole(ea, fti) -> bool + + + Looks for a hole at the beginning of the stack arguments. Will make + use of the IDB's 'func_t' function at that place (if present) to help + determine the presence of such a hole. + + @param ea (C++: ea_t) + @param fti (C++: const func_type_data_t &) + +Help on class func_type_data_t in module ida_typeinf: + +class func_type_data_t(funcargvec_t) + | Proxy of C++ func_type_data_t class. + | + | Method resolution order: + | func_type_data_t + | funcargvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_type_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_type_data_t(...) + | delete_func_type_data_t(self) + | + | dump(self, *args) -> 'bool' + | dump(self, praloc_bits=0x02) -> bool + | + | get_call_method(self, *args) -> 'int' + | get_call_method(self) -> int + | + | guess_cc(self, *args) -> 'cm_t' + | guess_cc(self, purged, cc_flags) -> cm_t + | + | is_high(self, *args) -> 'bool' + | is_high(self) -> bool + | + | is_noret(self, *args) -> 'bool' + | is_noret(self) -> bool + | + | is_pure(self, *args) -> 'bool' + | is_pure(self) -> bool + | + | is_vararg_cc(self, *args) -> 'bool' + | is_vararg_cc(self) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cc + | func_type_data_t_cc_get(self) -> cm_t + | + | flags + | func_type_data_t_flags_get(self) -> int + | + | retloc + | func_type_data_t_retloc_get(self) -> argloc_t + | + | rettype + | func_type_data_t_rettype_get(self) -> tinfo_t + | + | spoiled + | func_type_data_t_spoiled_get(self) -> reginfovec_t + | + | stkargs + | func_type_data_t_stkargs_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from funcargvec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'funcarg_t const &' + | __getitem__(self, i) -> funcarg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'funcarg_t const &' + | at(self, _idx) -> funcarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | begin(self) -> funcarg_t + | begin(self) -> funcarg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | end(self) -> funcarg_t + | end(self) -> funcarg_t + | + | erase(self, *args) -> 'qvector< funcarg_t >::iterator' + | erase(self, it) -> funcarg_t + | erase(self, first, last) -> funcarg_t + | + | extract(self, *args) -> 'funcarg_t *' + | extract(self) -> funcarg_t + | + | find(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | find(self, x) -> funcarg_t + | find(self, x) -> funcarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=funcarg_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< funcarg_t >::iterator' + | insert(self, it, x) -> funcarg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'funcarg_t &' + | push_back(self, x) + | push_back(self) -> funcarg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from funcargvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from funcargvec_t: + | + | __hash__ = None + +Help on class funcarg_t in module ida_typeinf: + +class funcarg_t(builtins.object) + | Proxy of C++ funcarg_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> funcarg_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_funcarg_t(...) + | delete_funcarg_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argloc + | funcarg_t_argloc_get(self) -> argloc_t + | + | cmt + | funcarg_t_cmt_get(self) -> qstring * + | + | flags + | funcarg_t_flags_get(self) -> uint32 + | + | name + | funcarg_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | funcarg_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class funcargvec_t in module ida_typeinf: + +class funcargvec_t(builtins.object) + | Proxy of C++ qvector< funcarg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'funcarg_t const &' + | __getitem__(self, i) -> funcarg_t + | + | __init__(self, *args) + | __init__(self) -> funcargvec_t + | __init__(self, x) -> funcargvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_funcargvec_t(...) + | delete_funcargvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'funcarg_t const &' + | at(self, _idx) -> funcarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | begin(self) -> funcarg_t + | begin(self) -> funcarg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | end(self) -> funcarg_t + | end(self) -> funcarg_t + | + | erase(self, *args) -> 'qvector< funcarg_t >::iterator' + | erase(self, it) -> funcarg_t + | erase(self, first, last) -> funcarg_t + | + | extract(self, *args) -> 'funcarg_t *' + | extract(self) -> funcarg_t + | + | find(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | find(self, x) -> funcarg_t + | find(self, x) -> funcarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=funcarg_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< funcarg_t >::iterator' + | insert(self, it, x) -> funcarg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'funcarg_t &' + | push_back(self, x) + | push_back(self) -> funcarg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function gcc_layout in module ida_typeinf: + +gcc_layout(*args) -> 'bool' + gcc_layout() -> bool + + + Should use the struct/union layout as done by gcc? + +Help on function gen_decorate_name in module ida_typeinf: + +gen_decorate_name(*args) -> 'qstring *' + gen_decorate_name(name, mangle, cc, type) -> str + + + Generic function for 'decorate_name()' (may be used in IDP modules) + + + @param name (C++: const char *) + @param mangle (C++: bool) + @param cc (C++: cm_t) + @param type (C++: const tinfo_t *) + +Help on function gen_use_arg_tinfos in module ida_typeinf: + +gen_use_arg_tinfos(*args) -> 'void' + gen_use_arg_tinfos(caller, fti, rargs, set_optype, is_stkarg_load, has_delay_slot) + + + The main function using these callbacks: + + + @param caller (C++: ea_t) + @param fti (C++: func_type_data_t *) + @param rargs (C++: funcargvec_t *) + @param set_optype (C++: set_op_tinfo_t *) + @param is_stkarg_load (C++: is_stkarg_load_t *) + @param has_delay_slot (C++: has_delay_slot_t *) + +Help on function get_abi_name in module ida_typeinf: + +get_abi_name(*args) -> 'qstring *' + get_abi_name() -> str + + + Get ABI name. + + @return: length of the name (>=0) + +Help on function get_alias_target in module ida_typeinf: + +get_alias_target(*args) -> 'uint32' + get_alias_target(ti, ordinal) -> uint32 + + + Find the final alias destination. If the ordinal has not been aliased, + return the specified ordinal itself If failed, returns 0. + + @param ti (C++: const til_t *) + @param ordinal (C++: uint32) + +Help on function get_arg_addrs in module ida_typeinf: + +get_arg_addrs(*args) -> 'PyObject *' + get_arg_addrs(caller) -> PyObject * + + + Retrieve addresses of argument initialization instructions + + @param caller: the address of the call instruction + @return: list of instruction addresses + +Help on function get_base_type in module ida_typeinf: + +get_base_type(*args) -> 'type_t' + get_base_type(t) -> type_t + + + Get get basic type bits ( 'TYPE_BASE_MASK' ) + + + @param t (C++: type_t) + +Help on function get_c_header_path in module ida_typeinf: + +get_c_header_path(*args) -> 'qstring *' + get_c_header_path() -> str + + + Get the include directory path of the target compiler. + +Help on function get_c_macros in module ida_typeinf: + +get_c_macros(*args) -> 'qstring *' + get_c_macros() -> str + + + Get predefined macros for the target compiler. + +Help on function get_comp in module ida_typeinf: + +get_comp(*args) -> 'comp_t' + get_comp(comp) -> comp_t + + + Get compiler bits. + + + @param comp (C++: comp_t) + +Help on function get_compiler_abbr in module ida_typeinf: + +get_compiler_abbr(*args) -> 'char const *' + get_compiler_abbr(id) -> char const * + + + Get abbreviated compiler name. + + + @param id (C++: comp_t) + +Help on function get_compiler_name in module ida_typeinf: + +get_compiler_name(*args) -> 'char const *' + get_compiler_name(id) -> char const * + + + Get full compiler name. + + + @param id (C++: comp_t) + +Help on function get_compilers in module ida_typeinf: + +get_compilers(*args) -> 'void' + get_compilers(ids, names, abbrs) + + + Get names of all built-in compilers. + + + @param ids (C++: compvec_t *) + @param names (C++: qstrvec_t *) + @param abbrs (C++: qstrvec_t *) + +Help on function get_enum_member_expr in module ida_typeinf: + +get_enum_member_expr(*args) -> 'qstring *' + get_enum_member_expr(tif, serial, value) -> str + + + Return a C expression that can be used to represent an enum member. If + the value does not correspond to any single enum member, this function + tries to find a bitwise combination of enum members that correspond to + it. If more than half of value bits do not match any enum members, it + fails. + + @param tif: enumeration type (C++: const tinfo_t &) + @param serial: which enumeration member to use (0 means the first with + the given value) (C++: int) + @param value: value to search in the enumeration type. only 32-bit + number can be handled yet (C++: uint64) + @return: success + +Help on function get_full_type in module ida_typeinf: + +get_full_type(*args) -> 'type_t' + get_full_type(t) -> type_t + + + Get basic type bits + type flags ( 'TYPE_FULL_MASK' ) + + + @param t (C++: type_t) + +Help on function get_idainfo_by_type in module ida_typeinf: + +get_idainfo_by_type(*args) -> 'size_t *, flags_t *, opinfo_t *, size_t *' + get_idainfo_by_type(tif) -> bool + + + Extract information from a 'tinfo_t' . + + @param tif: the type to inspect (C++: const tinfo_t &) + +Help on function get_idati in module ida_typeinf: + +get_idati(*args) -> 'til_t const *' + get_idati() -> til_t + + + Pointer to the local type library - this til is private for each IDB + file Function that accepts til_t* uses local type library instead of + NULL. + +Help on function get_named_type in module ida_typeinf: + +get_named_type(*args) -> 'PyObject *' + get_named_type(til, name, ntf_flags) -> PyObject * + + + Get a type data by its name. + @param til: the type library + @param name: the type name + @param ntf_flags: a combination of NTF_* constants + @return: + None on failure + tuple(code, type_str, fields_str, cmt, field_cmts, sclass, value) on success + +Help on function get_named_type64 in module ida_typeinf: + +get_named_type64(*args) -> 'PyObject *' + get_named_type64(til, name, ntf_flags) -> PyObject * + + + See 'get_named_type()' above.If the value in the 'ti' library is + 32-bit, it will be sign-extended before being stored in the 'value' + pointer. + + @param name (C++: const char *) + @param ntf_flags (C++: int) + +Help on function get_numbered_type in module ida_typeinf: + +get_numbered_type(*args) -> 'PyObject *' + get_numbered_type(til, ordinal) -> PyObject * + + + Retrieve a type by its ordinal number. + + + @param ordinal (C++: uint32) + +Help on function get_numbered_type_name in module ida_typeinf: + +get_numbered_type_name(*args) -> 'char const *' + get_numbered_type_name(ti, ordinal) -> char const * + + + Get type name (if exists) by its ordinal. If the type is anonymous, + returns "". If failed, returns NULL + + @param ti (C++: const til_t *) + @param ordinal (C++: uint32) + +Help on function get_ordinal_from_idb_type in module ida_typeinf: + +get_ordinal_from_idb_type(*args) -> 'int' + get_ordinal_from_idb_type(name, type) -> int + + + Get ordinal number of an idb type (struct/enum). The 'type' parameter + is used only to determine the kind of the type (struct or enum) Use + this function to find out the correspondence between idb types and til + types + + @param name (C++: const char *) + @param type (C++: const type_t *) + +Help on function get_ordinal_qty in module ida_typeinf: + +get_ordinal_qty(*args) -> 'uint32' + get_ordinal_qty(ti) -> uint32 + + + Get number of allocated ordinals. + + @param ti (C++: const til_t *) + @return: uint32(-1) if failed + +Help on function get_scalar_bt in module ida_typeinf: + +get_scalar_bt(*args) -> 'type_t' + get_scalar_bt(size) -> type_t + +Help on function get_stock_tinfo in module ida_typeinf: + +get_stock_tinfo(*args) -> 'bool' + get_stock_tinfo(tif, id) -> bool + +Help on function get_tinfo_attr in module ida_typeinf: + +get_tinfo_attr(*args) -> 'bool' + get_tinfo_attr(typid, key, bv, all_attrs) -> bool + +Help on function get_tinfo_attrs in module ida_typeinf: + +get_tinfo_attrs(*args) -> 'bool' + get_tinfo_attrs(typid, tav, include_ref_attrs) -> bool + +Help on function get_tinfo_details in module ida_typeinf: + +get_tinfo_details(*args) -> 'bool' + get_tinfo_details(typid, bt2, buf) -> bool + +Help on function get_tinfo_pdata in module ida_typeinf: + +get_tinfo_pdata(*args) -> 'size_t' + get_tinfo_pdata(outptr, typid, what) -> size_t + +Help on function get_tinfo_property in module ida_typeinf: + +get_tinfo_property(*args) -> 'size_t' + get_tinfo_property(typid, gta_prop) -> size_t + +Help on function get_tinfo_size in module ida_typeinf: + +get_tinfo_size(*args) -> 'size_t' + get_tinfo_size(p_effalign, typid, gts_code) -> size_t + +Help on function get_type_flags in module ida_typeinf: + +get_type_flags(*args) -> 'type_t' + get_type_flags(t) -> type_t + + + Get type flags ( 'TYPE_FLAGS_MASK' ) + + + @param t (C++: type_t) + +Help on function get_type_ordinal in module ida_typeinf: + +get_type_ordinal(*args) -> 'int32' + get_type_ordinal(ti, name) -> int32 + + + Get type ordinal by its name. + + + @param ti (C++: const til_t *) + @param name (C++: const char *) + +Help on function guess_func_cc in module ida_typeinf: + +guess_func_cc(*args) -> 'cm_t' + guess_func_cc(fti, npurged, cc_flags) -> cm_t + + + Use 'func_type_data_t::guess_cc()' + + + @param fti (C++: const func_type_data_t &) + @param npurged (C++: int) + @param cc_flags (C++: int) + +Help on function guess_tinfo in module ida_typeinf: + +guess_tinfo(*args) -> 'int' + guess_tinfo(tif, id) -> int + + + Generate a type information about the id from the disassembly. id can + be a structure/union/enum id or an address. + + @param tif (C++: tinfo_t *) + @param id (C++: tid_t) + @return: one of Guess tinfo codes + +Help on class ida_lowertype_helper_t in module ida_typeinf: + +class ida_lowertype_helper_t(lowertype_helper_t) + | Proxy of C++ ida_lowertype_helper_t class. + | + | Method resolution order: + | ida_lowertype_helper_t + | lowertype_helper_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _tif, _ea, _pb) -> ida_lowertype_helper_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ida_lowertype_helper_t(...) + | delete_ida_lowertype_helper_t(self) + | + | func_has_stkframe_hole(self, *args) -> 'bool' + | func_has_stkframe_hole(self, candidate, candidate_data) -> bool + | + | get_func_purged_bytes(self, *args) -> 'int' + | get_func_purged_bytes(self, candidate, arg3) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from lowertype_helper_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function idc_get_local_type in module ida_typeinf: + +idc_get_local_type(*args) -> 'int' + idc_get_local_type(ordinal, flags, buf, maxsize) -> int + +Help on function idc_get_local_type_name in module ida_typeinf: + +idc_get_local_type_name(*args) -> 'size_t' + idc_get_local_type_name(ordinal) -> str + +Help on function idc_get_local_type_raw in module ida_typeinf: + +idc_get_local_type_raw(*args) -> 'PyObject *' + idc_get_local_type_raw(ordinal) -> PyObject * + +Help on function idc_get_type in module ida_typeinf: + +idc_get_type(*args) -> 'size_t' + idc_get_type(ea) -> str + +Help on function idc_get_type_raw in module ida_typeinf: + +idc_get_type_raw(*args) -> 'PyObject *' + idc_get_type_raw(ea) -> PyObject * + +Help on function idc_guess_type in module ida_typeinf: + +idc_guess_type(*args) -> 'size_t' + idc_guess_type(ea) -> str + +Help on function idc_parse_decl in module ida_typeinf: + +idc_parse_decl(*args) -> 'PyObject *' + idc_parse_decl(ti, decl, flags) -> PyObject * + +Help on function idc_parse_types in module ida_typeinf: + +idc_parse_types(*args) -> 'int' + idc_parse_types(input, flags) -> int + +Help on function idc_print_type in module ida_typeinf: + +idc_print_type(*args) -> 'PyObject *' + idc_print_type(_type, _fields, name, flags) -> PyObject * + +Help on function idc_set_local_type in module ida_typeinf: + +idc_set_local_type(*args) -> 'int' + idc_set_local_type(ordinal, dcl, flags) -> int + +Help on function import_type in module ida_typeinf: + +import_type(*args) -> 'tid_t' + import_type(til, idx, name, flags=0) -> tid_t + + + Copy a named type from til to idb. + + @param til: type library (C++: const til_t *) + @param idx: the position of the new type in the list of types + (structures or enums). -1 means at the end of the list + (C++: int) + @param name: the type name (C++: const char *) + @param flags: combination of Import type flags (C++: int) + @return: BADNODE on error + +Help on function is_autosync in module ida_typeinf: + +is_autosync(*args) -> 'bool' + is_autosync(name, type) -> bool + is_autosync(name, tif) -> bool + + + Is the specified idb type automatically synchronized? + + + @param name (C++: const char *) + @param type (C++: const type_t *) + +Help on function is_code_far in module ida_typeinf: + +is_code_far(*args) -> 'bool' + is_code_far(cm) -> bool + + + Does the given model specify far code?. + + + @param cm (C++: cm_t) + +Help on function is_comp_unsure in module ida_typeinf: + +is_comp_unsure(*args) -> 'comp_t' + is_comp_unsure(comp) -> comp_t + + + See 'COMP_UNSURE' . + + + @param comp (C++: comp_t) + +Help on function is_data_far in module ida_typeinf: + +is_data_far(*args) -> 'bool' + is_data_far(cm) -> bool + + + Does the given model specify far data?. + + + @param cm (C++: cm_t) + +Help on function is_gcc in module ida_typeinf: + +is_gcc(*args) -> 'bool' + is_gcc() -> bool + + + Is the target compiler 'COMP_GNU' ? + +Help on function is_gcc32 in module ida_typeinf: + +is_gcc32(*args) -> 'bool' + is_gcc32() -> bool + + + Is the target compiler 32 bit gcc? + +Help on function is_gcc64 in module ida_typeinf: + +is_gcc64(*args) -> 'bool' + is_gcc64() -> bool + + + Is the target compiler 64 bit gcc? + +Help on function is_ordinal_name in module ida_typeinf: + +is_ordinal_name(*args) -> 'bool' + is_ordinal_name(name, ord=None) -> bool + + + Check if the name is an ordinal name. Ordinal names have the following + format: '#' + set_de(ord) + + @param name (C++: const char *) + @param ord (C++: uint32 *) + +Help on function is_purging_cc in module ida_typeinf: + +is_purging_cc(*args) -> 'bool' + is_purging_cc(cm) -> bool + + + Does the calling convention clean the stack arguments upon + return?.this function is valid only for x86 code + + @param cm (C++: cm_t) + +Help on function is_restype_enum in module ida_typeinf: + +is_restype_enum(*args) -> 'bool' + is_restype_enum(til, type) -> bool + +Help on function is_restype_struct in module ida_typeinf: + +is_restype_struct(*args) -> 'bool' + is_restype_struct(til, type) -> bool + +Help on function is_restype_struni in module ida_typeinf: + +is_restype_struni(*args) -> 'bool' + is_restype_struni(til, type) -> bool + +Help on function is_restype_void in module ida_typeinf: + +is_restype_void(*args) -> 'bool' + is_restype_void(til, type) -> bool + +Help on function is_sdacl_byte in module ida_typeinf: + +is_sdacl_byte(*args) -> 'bool' + is_sdacl_byte(t) -> bool + + + Identify an sdacl byte. The first sdacl byte has the following format: + 11xx000x. The sdacl bytes are appended to udt fields. They indicate + the start of type attributes (as the tah-bytes do). The sdacl bytes + are used in the udt headers instead of the tah-byte. This is done for + compatibility with old databases, they were already using sdacl bytes + in udt headers and as udt field postfixes. (see "sdacl-typeattrs" in + the type bit definitions) + + @param t (C++: type_t) + +Help on function is_tah_byte in module ida_typeinf: + +is_tah_byte(*args) -> 'bool' + is_tah_byte(t) -> bool + + + The TAH byte (type attribute header byte) denotes the start of type + attributes. (see "tah-typeattrs" in the type bit definitions) + + @param t (C++: type_t) + +Help on function is_type_arithmetic in module ida_typeinf: + +is_type_arithmetic(*args) -> 'bool' + is_type_arithmetic(t) -> bool + + + Is the type an arithmetic type? (floating or integral) + + + @param t (C++: type_t) + +Help on function is_type_array in module ida_typeinf: + +is_type_array(*args) -> 'bool' + is_type_array(t) -> bool + + + See 'BT_ARRAY' . + + + @param t (C++: type_t) + +Help on function is_type_bitfld in module ida_typeinf: + +is_type_bitfld(*args) -> 'bool' + is_type_bitfld(t) -> bool + + + See 'BT_BITFIELD' . + + + @param t (C++: type_t) + +Help on function is_type_bool in module ida_typeinf: + +is_type_bool(*args) -> 'bool' + is_type_bool(t) -> bool + + + See 'BTF_BOOL' . + + + @param t (C++: type_t) + +Help on function is_type_char in module ida_typeinf: + +is_type_char(*args) -> 'bool' + is_type_char(t) -> bool + + + Does the type specify a char value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_complex in module ida_typeinf: + +is_type_complex(*args) -> 'bool' + is_type_complex(t) -> bool + + + See 'BT_COMPLEX' . + + + @param t (C++: type_t) + +Help on function is_type_const in module ida_typeinf: + +is_type_const(*args) -> 'bool' + is_type_const(t) -> bool + + + See 'BTM_CONST' . + + + @param t (C++: type_t) + +Help on function is_type_double in module ida_typeinf: + +is_type_double(*args) -> 'bool' + is_type_double(t) -> bool + + + See 'BTF_DOUBLE' . + + + @param t (C++: type_t) + +Help on function is_type_enum in module ida_typeinf: + +is_type_enum(*args) -> 'bool' + is_type_enum(t) -> bool + + + See 'BTF_ENUM' . + + + @param t (C++: type_t) + +Help on function is_type_ext_arithmetic in module ida_typeinf: + +is_type_ext_arithmetic(*args) -> 'bool' + is_type_ext_arithmetic(t) -> bool + + + Is the type an extended arithmetic type? (arithmetic or enum) + + + @param t (C++: type_t) + +Help on function is_type_ext_integral in module ida_typeinf: + +is_type_ext_integral(*args) -> 'bool' + is_type_ext_integral(t) -> bool + + + Is the type an extended integral type? (integral or enum) + + + @param t (C++: type_t) + +Help on function is_type_float in module ida_typeinf: + +is_type_float(*args) -> 'bool' + is_type_float(t) -> bool + + + See 'BTF_FLOAT' . + + + @param t (C++: type_t) + +Help on function is_type_floating in module ida_typeinf: + +is_type_floating(*args) -> 'bool' + is_type_floating(t) -> bool + + + Is the type a floating point type? + + + @param t (C++: type_t) + +Help on function is_type_func in module ida_typeinf: + +is_type_func(*args) -> 'bool' + is_type_func(t) -> bool + + + See 'BT_FUNC' . + + + @param t (C++: type_t) + +Help on function is_type_int in module ida_typeinf: + +is_type_int(*args) -> 'bool' + is_type_int(bt) -> bool + + + Does the type_t specify one of the basic types in 'Basic type: + integer' ? + + + @param bt (C++: type_t) + +Help on function is_type_int128 in module ida_typeinf: + +is_type_int128(*args) -> 'bool' + is_type_int128(t) -> bool + + + Does the type specify a 128-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int16 in module ida_typeinf: + +is_type_int16(*args) -> 'bool' + is_type_int16(t) -> bool + + + Does the type specify a 16-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int32 in module ida_typeinf: + +is_type_int32(*args) -> 'bool' + is_type_int32(t) -> bool + + + Does the type specify a 32-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int64 in module ida_typeinf: + +is_type_int64(*args) -> 'bool' + is_type_int64(t) -> bool + + + Does the type specify a 64-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_integral in module ida_typeinf: + +is_type_integral(*args) -> 'bool' + is_type_integral(t) -> bool + + + Is the type an integral type (char/short/int/long/bool)? + + + @param t (C++: type_t) + +Help on function is_type_ldouble in module ida_typeinf: + +is_type_ldouble(*args) -> 'bool' + is_type_ldouble(t) -> bool + + + See 'BTF_LDOUBLE' . + + + @param t (C++: type_t) + +Help on function is_type_paf in module ida_typeinf: + +is_type_paf(*args) -> 'bool' + is_type_paf(t) -> bool + + + Is the type a pointer, array, or function type? + + + @param t (C++: type_t) + +Help on function is_type_partial in module ida_typeinf: + +is_type_partial(*args) -> 'bool' + is_type_partial(t) -> bool + + + Identifies an unknown or void type with a known size (see 'Basic type: + unknown & void' ) + + + @param t (C++: type_t) + +Help on function is_type_ptr in module ida_typeinf: + +is_type_ptr(*args) -> 'bool' + is_type_ptr(t) -> bool + + + See 'BT_PTR' . + + + @param t (C++: type_t) + +Help on function is_type_ptr_or_array in module ida_typeinf: + +is_type_ptr_or_array(*args) -> 'bool' + is_type_ptr_or_array(t) -> bool + + + Is the type a pointer or array type? + + + @param t (C++: type_t) + +Help on function is_type_struct in module ida_typeinf: + +is_type_struct(*args) -> 'bool' + is_type_struct(t) -> bool + + + See 'BTF_STRUCT' . + + + @param t (C++: type_t) + +Help on function is_type_struni in module ida_typeinf: + +is_type_struni(*args) -> 'bool' + is_type_struni(t) -> bool + + + Is the type a struct or union? + + + @param t (C++: type_t) + +Help on function is_type_sue in module ida_typeinf: + +is_type_sue(*args) -> 'bool' + is_type_sue(t) -> bool + + + Is the type a struct/union/enum? + + + @param t (C++: type_t) + +Help on function is_type_tbyte in module ida_typeinf: + +is_type_tbyte(*args) -> 'bool' + is_type_tbyte(t) -> bool + + + See 'BTF_FLOAT' . + + + @param t (C++: type_t) + +Help on function is_type_typedef in module ida_typeinf: + +is_type_typedef(*args) -> 'bool' + is_type_typedef(t) -> bool + + + See 'BTF_TYPEDEF' . + + + @param t (C++: type_t) + +Help on function is_type_uchar in module ida_typeinf: + +is_type_uchar(*args) -> 'bool' + is_type_uchar(t) -> bool + + + See 'BTF_UCHAR' . + + + @param t (C++: type_t) + +Help on function is_type_uint in module ida_typeinf: + +is_type_uint(*args) -> 'bool' + is_type_uint(t) -> bool + + + See 'BTF_UINT' . + + + @param t (C++: type_t) + +Help on function is_type_uint128 in module ida_typeinf: + +is_type_uint128(*args) -> 'bool' + is_type_uint128(t) -> bool + + + See 'BTF_UINT128' . + + + @param t (C++: type_t) + +Help on function is_type_uint16 in module ida_typeinf: + +is_type_uint16(*args) -> 'bool' + is_type_uint16(t) -> bool + + + See 'BTF_UINT16' . + + + @param t (C++: type_t) + +Help on function is_type_uint32 in module ida_typeinf: + +is_type_uint32(*args) -> 'bool' + is_type_uint32(t) -> bool + + + See 'BTF_UINT32' . + + + @param t (C++: type_t) + +Help on function is_type_uint64 in module ida_typeinf: + +is_type_uint64(*args) -> 'bool' + is_type_uint64(t) -> bool + + + See 'BTF_UINT64' . + + + @param t (C++: type_t) + +Help on function is_type_union in module ida_typeinf: + +is_type_union(*args) -> 'bool' + is_type_union(t) -> bool + + + See 'BTF_UNION' . + + + @param t (C++: type_t) + +Help on function is_type_unknown in module ida_typeinf: + +is_type_unknown(*args) -> 'bool' + is_type_unknown(t) -> bool + + + See 'BT_UNKNOWN' . + + + @param t (C++: type_t) + +Help on function is_type_void in module ida_typeinf: + +is_type_void(*args) -> 'bool' + is_type_void(t) -> bool + + + See 'BTF_VOID' . + + + @param t (C++: type_t) + +Help on function is_type_volatile in module ida_typeinf: + +is_type_volatile(*args) -> 'bool' + is_type_volatile(t) -> bool + + + See 'BTM_VOLATILE' . + + + @param t (C++: type_t) + +Help on function is_typeid_last in module ida_typeinf: + +is_typeid_last(*args) -> 'bool' + is_typeid_last(t) -> bool + + + Is the type_t the last byte of type declaration? (there are no + additional bytes after a basic type, see '_BT_LAST_BASIC' ) + + @param t (C++: type_t) + +Help on function is_user_cc in module ida_typeinf: + +is_user_cc(*args) -> 'bool' + is_user_cc(cm) -> bool + + + Does the calling convention specify argument locations explicitly? + + + @param cm (C++: cm_t) + +Help on function is_vararg_cc in module ida_typeinf: + +is_vararg_cc(*args) -> 'bool' + is_vararg_cc(cm) -> bool + + + Does the calling convention use ellipsis? + + + @param cm (C++: cm_t) + +Help on function lexcompare_tinfo in module ida_typeinf: + +lexcompare_tinfo(*args) -> 'int' + lexcompare_tinfo(t1, t2, arg3) -> int + +Help on function load_til in module ida_typeinf: + +load_til(*args) -> 'qstring *' + load_til(name, tildir=None) -> til_t + + + Load til from a file. Failure to load base tils are reported into + 'errbuf'. They do not prevent loading of the main til. + + @param name: filename of the til. If it's an absolute path, tildir is + ignored. NB: the file extension is forced to .til (C++: + const char *) + @param tildir: directory where to load the til from. NULL means + default til subdirectories. (C++: const char *) + @return: pointer to resulting til, NULL if failed and error message is + in errbuf + +Help on function load_til_header in module ida_typeinf: + +load_til_header(*args) -> 'qstring *' + load_til_header(tildir, name) -> til_t + + + Get human-readable til description. + + + @param tildir (C++: const char *) + @param name (C++: const char *) + +Help on function lower_type in module ida_typeinf: + +lower_type(*args) -> 'int' + lower_type(til, tif, name=None, _helper=None) -> int + + + Lower type. Inspect the type and lower all function subtypes using + lower_func_type().We call the prototypes usually encountered in source + files "high level"They may have implicit arguments, array arguments, + big structure retvals, etcWe introduce explicit arguments (i.e. 'this' + pointer) and call the result"low level prototype". See 'FTI_HIGH' .In + order to improve heuristics for recognition of big structure + retvals,it is recommended to pass a helper that will be used to make + decisions.That helper will be used only for lowering 'tif', and not + for the childrentypes walked through by recursion. + + @param til (C++: til_t *) + @param tif (C++: tinfo_t *) + @param name (C++: const char *) + @param _helper (C++: lowertype_helper_t *) + +Help on class lowertype_helper_t in module ida_typeinf: + +class lowertype_helper_t(builtins.object) + | Proxy of C++ lowertype_helper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lowertype_helper_t(...) + | delete_lowertype_helper_t(self) + | + | func_has_stkframe_hole(self, *args) -> 'bool' + | func_has_stkframe_hole(self, candidate, candidate_data) -> bool + | + | get_func_purged_bytes(self, *args) -> 'int' + | get_func_purged_bytes(self, candidate, candidate_data) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function new_til in module ida_typeinf: + +new_til(*args) -> 'til_t *' + new_til(name, desc) -> til_t + + + Initialize a til. + + + @param name (C++: const char *) + @param desc (C++: const char *) + +Help on function next_named_type in module ida_typeinf: + +next_named_type(*args) -> 'char const *' + next_named_type(ti, name, ntf_flags) -> char const * + + + Enumerate types. Returns mangled names. Never returns anonymous types. + To include it, enumerate types by ordinals. + + @param ti (C++: const til_t *) + @param name (C++: const char *) + @param ntf_flags (C++: int) + +Help on function optimize_argloc in module ida_typeinf: + +optimize_argloc(*args) -> 'bool' + optimize_argloc(vloc, size, gaps) -> bool + + + Verify and optimize scattered argloc into simple form. All new arglocs + must be processed by this function. + + @param vloc (C++: argloc_t *) + @param size (C++: int) + @param gaps (C++: const rangeset_t *) + +Help on function pack_idcobj_to_bv in module ida_typeinf: + +pack_idcobj_to_bv(*args) -> 'error_t' + pack_idcobj_to_bv(obj, tif, bytes, objoff, pio_flags=0) -> error_t + + + Write a typed idc object to the byte vector. Byte vector may be non- + empty, this function will append data to it + + @param obj (C++: const idc_value_t *) + @param tif (C++: const tinfo_t &) + @param bytes (C++: relobj_t *) + @param objoff (C++: void *) + @param pio_flags (C++: int) + +Help on function pack_idcobj_to_idb in module ida_typeinf: + +pack_idcobj_to_idb(*args) -> 'error_t' + pack_idcobj_to_idb(obj, tif, ea, pio_flags=0) -> error_t + + + Write a typed idc object to the database. + + + @param obj (C++: const idc_value_t *) + @param tif (C++: const tinfo_t &) + @param ea (C++: ea_t) + @param pio_flags (C++: int) + +Help on function pack_object_to_bv in module ida_typeinf: + +pack_object_to_bv(*args) -> 'PyObject *' + pack_object_to_bv(py_obj, ti, _type, _fields, base_ea, pio_flags=0) -> PyObject * + + + Packs a typed object to a string + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param base_ea: base ea used to relocate the pointers in the packed object + @param pio_flags: flags used while unpacking + @return: + tuple(0, err_code) on failure + tuple(1, packed_buf) on success + +Help on function pack_object_to_idb in module ida_typeinf: + +pack_object_to_idb(*args) -> 'PyObject *' + pack_object_to_idb(py_obj, ti, _type, _fields, ea, pio_flags=0) -> PyObject * + + + Write a typed object to the database. + Raises an exception if wrong parameters were passed or conversion fails + Returns the error_t returned by idaapi.pack_object_to_idb + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param ea: ea to be used while packing + @param pio_flags: flags used while unpacking + +Help on function parse_decl in module ida_typeinf: + +parse_decl(*args) -> 'qstring *' + parse_decl(tif, til, decl, flags) -> str + + + Parse ONE declaration. If the input string contains more than one + declaration, the first complete type declaration ( 'PT_TYP' ) or the + last variable declaration ( 'PT_VAR' ) will be used.name & tif may be + empty after the call! + + @param tif: type info (C++: tinfo_t *) + @param til: type library to use. may be NULL (C++: til_t *) + @param decl: C declaration to parse (C++: const char *) + @param flags: combination of Type parsing flags bits (C++: int) + +Help on function parse_decls in module ida_typeinf: + +parse_decls(*args) -> 'int' + parse_decls(til, input, printer, hti_flags) -> int + + + Parse many declarations and store them in a til. If there are any + errors, they will be printed using 'printer'. This function uses + default include path and predefined macros from the database settings. + It always uses the 'HTI_DCL' bit. + + @param til: type library to store the result (C++: til_t *) + @param input: input string or file name (see hti_flags) (C++: const + char *) + @param printer: function to output error messages (use msg or NULL or + your own callback) (C++: printer_t *) + @param hti_flags: combination of Type formatting flags (C++: int) + @return: number of errors, 0 means ok. + +Help on class predicate_t in module ida_typeinf: + +class predicate_t(builtins.object) + | Proxy of C++ predicate_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> predicate_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_predicate_t(...) + | delete_predicate_t(self) + | + | should_display(self, *args) -> 'bool' + | should_display(self, til, name, type, fields) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function print_argloc in module ida_typeinf: + +print_argloc(*args) -> 'size_t' + print_argloc(vloc, size=0, vflags=0) -> str + + + Convert an argloc to human readable form. + + + @param vloc (C++: const argloc_t &) + @param size (C++: int) + @param vflags (C++: int) + +Help on function print_decls in module ida_typeinf: + +print_decls(*args) -> 'PyObject *' + print_decls(printer, til, py_ordinals, flags) -> PyObject * + + + Print types (and possibly their dependencies) in a format suitable for + use in a header file. This is the reverse 'parse_decls()' . + + @param printer: a handler for printing text (C++: text_sink_t &) + @param til: the type library holding the ordinals (C++: til_t *) + @param flags: flags for the algorithm. A combination of PDF_* + constants (C++: uint32) + +Help on function print_tinfo in module ida_typeinf: + +print_tinfo(*args) -> 'qstring *' + print_tinfo(prefix, indent, cmtindent, flags, tif, name, cmt) -> str + +Help on function print_type in module ida_typeinf: + +print_type(*args) -> 'qstring *' + print_type(ea, prtype_flags) -> str + + + Get type declaration for the specified address. + + @param ea: address (C++: ea_t) + @param prtype_flags: combination of Type printing flags (C++: int) + @return: success + +Help on class ptr_type_data_t in module ida_typeinf: + +class ptr_type_data_t(builtins.object) + | Proxy of C++ ptr_type_data_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, c=tinfo_t(), bps=0, p=tinfo_t(), d=0) -> ptr_type_data_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ptr_type_data_t(...) + | delete_ptr_type_data_t(self) + | + | is_code_ptr(self, *args) -> 'bool' + | is_code_ptr(self) -> bool + | + | is_shifted(self, *args) -> 'bool' + | is_shifted(self) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | based_ptr_size + | ptr_type_data_t_based_ptr_size_get(self) -> uchar + | + | closure + | ptr_type_data_t_closure_get(self) -> tinfo_t + | + | delta + | ptr_type_data_t_delta_get(self) -> int32 + | + | obj_type + | ptr_type_data_t_obj_type_get(self) -> tinfo_t + | + | parent + | ptr_type_data_t_parent_get(self) -> tinfo_t + | + | taptr_bits + | ptr_type_data_t_taptr_bits_get(self) -> uchar + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function read_tinfo_bitfield_value in module ida_typeinf: + +read_tinfo_bitfield_value(*args) -> 'uint64' + read_tinfo_bitfield_value(typid, v, bitoff) -> uint64 + +Help on class reginfovec_t in module ida_typeinf: + +class reginfovec_t(builtins.object) + | Proxy of C++ qvector< reg_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'reg_info_t const &' + | __getitem__(self, i) -> reg_info_t + | + | __init__(self, *args) + | __init__(self) -> reginfovec_t + | __init__(self, x) -> reginfovec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_reginfovec_t(...) + | delete_reginfovec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'reg_info_t &' + | + | at = __getitem__(self, *args) -> 'reg_info_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< reg_info_t >::const_iterator' + | begin(self) -> reg_info_t + | begin(self) -> reg_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< reg_info_t >::const_iterator' + | end(self) -> reg_info_t + | end(self) -> reg_info_t + | + | erase(self, *args) -> 'qvector< reg_info_t >::iterator' + | erase(self, it) -> reg_info_t + | erase(self, first, last) -> reg_info_t + | + | extract(self, *args) -> 'reg_info_t *' + | extract(self) -> reg_info_t + | + | find(self, *args) -> 'qvector< reg_info_t >::const_iterator' + | find(self, x) -> reg_info_t + | find(self, x) -> reg_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=reg_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< reg_info_t >::iterator' + | insert(self, it, x) -> reg_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'reg_info_t &' + | push_back(self, x) + | push_back(self) -> reg_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class regobj_t in module ida_typeinf: + +class regobj_t(builtins.object) + | Proxy of C++ regobj_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regobj_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_regobj_t(...) + | delete_regobj_t(self) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | regidx + | regobj_t_regidx_get(self) -> int + | + | relocate + | regobj_t_relocate_get(self) -> int + | + | thisown + | The membership flag + | + | value + | regobj_t_value_get(self) -> bytevec_t * + +Help on class regobjs_t in module ida_typeinf: + +class regobjs_t(regobjvec_t) + | Proxy of C++ regobjs_t class. + | + | Method resolution order: + | regobjs_t + | regobjvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regobjs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_regobjs_t(...) + | delete_regobjs_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from regobjvec_t: + | + | __getitem__(self, *args) -> 'regobj_t const &' + | __getitem__(self, i) -> regobj_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | at(self, *args) -> 'regobj_t const &' + | at(self, _idx) -> regobj_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< regobj_t >::const_iterator' + | begin(self) -> regobj_t + | begin(self) -> regobj_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< regobj_t >::const_iterator' + | end(self) -> regobj_t + | end(self) -> regobj_t + | + | erase(self, *args) -> 'qvector< regobj_t >::iterator' + | erase(self, it) -> regobj_t + | erase(self, first, last) -> regobj_t + | + | extract(self, *args) -> 'regobj_t *' + | extract(self) -> regobj_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=regobj_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< regobj_t >::iterator' + | insert(self, it, x) -> regobj_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'regobj_t &' + | push_back(self, x) + | push_back(self) -> regobj_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from regobjvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class regobjvec_t in module ida_typeinf: + +class regobjvec_t(builtins.object) + | Proxy of C++ qvector< regobj_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'regobj_t const &' + | __getitem__(self, i) -> regobj_t + | + | __init__(self, *args) + | __init__(self) -> regobjvec_t + | __init__(self, x) -> regobjvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_regobjvec_t(...) + | delete_regobjvec_t(self) + | + | at(self, *args) -> 'regobj_t const &' + | at(self, _idx) -> regobj_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< regobj_t >::const_iterator' + | begin(self) -> regobj_t + | begin(self) -> regobj_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< regobj_t >::const_iterator' + | end(self) -> regobj_t + | end(self) -> regobj_t + | + | erase(self, *args) -> 'qvector< regobj_t >::iterator' + | erase(self, it) -> regobj_t + | erase(self, first, last) -> regobj_t + | + | extract(self, *args) -> 'regobj_t *' + | extract(self) -> regobj_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=regobj_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< regobj_t >::iterator' + | insert(self, it, x) -> regobj_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'regobj_t &' + | push_back(self, x) + | push_back(self) -> regobj_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function remove_abi_opts in module ida_typeinf: + +remove_abi_opts(*args) -> 'bool' + remove_abi_opts(abi_opts, user_level=False) -> bool + +Help on function remove_pointer in module ida_typeinf: + +remove_pointer(*args) -> 'tinfo_t' + remove_pointer(tif) -> tinfo_t + + + 'BT_PTR' : If the current type is a pointer, return the pointed + object. If the current type is not a pointer, return the current type. + See also get_ptrarr_object() and get_pointed_object() + + @param tif (C++: const tinfo_t &) + +Help on function remove_tinfo_pointer in module ida_typeinf: + +remove_tinfo_pointer(*args) -> 'PyObject *' + remove_tinfo_pointer(tif, name, til) -> PyObject * + + + Remove pointer of a type. (i.e. convert "char *" into "char"). + Optionally remove the "lp" (or similar) prefix of the input name. If + the input type is not a pointer, then fail. + + @param tif (C++: tinfo_t *) + @param til (C++: const til_t *) + +Help on function replace_ordinal_typerefs in module ida_typeinf: + +replace_ordinal_typerefs(*args) -> 'int' + replace_ordinal_typerefs(til, tif) -> int + + + Replace references to ordinal types by name references. This function + 'unties' the type from the current local type library and makes it + easier to export it. + + @param til: type library to use. may be NULL. (C++: til_t *) + @param tif: type to modify (in/out) (C++: tinfo_t *) + +Help on function resolve_typedef in module ida_typeinf: + +resolve_typedef(*args) -> 'type_t const *' + resolve_typedef(til, type) -> type_t const * + +Help on class rrel_t in module ida_typeinf: + +class rrel_t(builtins.object) + | Proxy of C++ rrel_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rrel_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_rrel_t(...) + | delete_rrel_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | rrel_t_off_get(self) -> sval_t + | + | reg + | rrel_t_reg_get(self) -> int + | + | thisown + | The membership flag + +Help on function save_tinfo in module ida_typeinf: + +save_tinfo(*args) -> 'tinfo_code_t' + save_tinfo(tif, til, ord, name, ntf_flags) -> tinfo_code_t + +Help on class scattered_aloc_t in module ida_typeinf: + +class scattered_aloc_t(argpartvec_t) + | Proxy of C++ scattered_aloc_t class. + | + | Method resolution order: + | scattered_aloc_t + | argpartvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> scattered_aloc_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_scattered_aloc_t(...) + | delete_scattered_aloc_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from argpartvec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'argpart_t const &' + | __getitem__(self, i) -> argpart_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'argpart_t const &' + | at(self, _idx) -> argpart_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< argpart_t >::const_iterator' + | begin(self) -> argpart_t + | begin(self) -> argpart_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< argpart_t >::const_iterator' + | end(self) -> argpart_t + | end(self) -> argpart_t + | + | erase(self, *args) -> 'qvector< argpart_t >::iterator' + | erase(self, it) -> argpart_t + | erase(self, first, last) -> argpart_t + | + | extract(self, *args) -> 'argpart_t *' + | extract(self) -> argpart_t + | + | find(self, *args) -> 'qvector< argpart_t >::const_iterator' + | find(self, x) -> argpart_t + | find(self, x) -> argpart_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=argpart_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< argpart_t >::iterator' + | insert(self, it, x) -> argpart_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'argpart_t &' + | push_back(self, x) + | push_back(self) -> argpart_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from argpartvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from argpartvec_t: + | + | __hash__ = None + +Help on function score_tinfo in module ida_typeinf: + +score_tinfo(*args) -> 'uint32' + score_tinfo(tif) -> uint32 + +Help on function serialize_tinfo in module ida_typeinf: + +serialize_tinfo(*args) -> 'bool' + serialize_tinfo(type, fields, fldcmts, tif, sudt_flags) -> bool + +Help on function set_abi_name in module ida_typeinf: + +set_abi_name(*args) -> 'bool' + set_abi_name(abiname, user_level=False) -> bool + + + Set abi name (see 'Compiler IDs' ) + + + @param abiname (C++: const char *) + @param user_level (C++: bool) + +Help on function set_c_header_path in module ida_typeinf: + +set_c_header_path(*args) -> 'void' + set_c_header_path(incdir) + + + Set include directory path the target compiler. + + + @param incdir (C++: const char *) + +Help on function set_c_macros in module ida_typeinf: + +set_c_macros(*args) -> 'void' + set_c_macros(macros) + + + Set predefined macros for the target compiler. + + + @param macros (C++: const char *) + +Help on function set_compiler in module ida_typeinf: + +set_compiler(*args) -> 'bool' + set_compiler(cc, flags, abiname=None) -> bool + + + Change current compiler. + + @param cc: compiler to switch to (C++: const compiler_info_t &) + @param flags: Set compiler flags (C++: int) + @param abiname: ABI name (C++: const char *) + @return: success + +Help on function set_compiler_id in module ida_typeinf: + +set_compiler_id(*args) -> 'bool' + set_compiler_id(id, abiname=None) -> bool + + + Set the compiler id (see 'Compiler IDs' ) + + + @param id (C++: comp_t) + @param abiname (C++: const char *) + +Help on function set_compiler_string in module ida_typeinf: + +set_compiler_string(*args) -> 'bool' + set_compiler_string(compstr, user_level) -> bool + +Help on function set_numbered_type in module ida_typeinf: + +set_numbered_type(*args) -> 'tinfo_code_t' + set_numbered_type(ti, ordinal, ntf_flags, name, type, fields=None, cmt=None, fldcmts=None, sclass=None) -> tinfo_code_t + + + Store a type in the til. 'name' may be NULL for anonymous types. The + specified ordinal must be free (no other type is using it). For + ntf_flags, only 'NTF_REPLACE' is consulted. + + @param ti (C++: til_t *) + @param ordinal (C++: uint32) + @param ntf_flags (C++: int) + @param name (C++: const char *) + @param type (C++: const type_t *) + @param fields (C++: const p_list *) + @param cmt (C++: const char *) + @param fldcmts (C++: const p_list *) + @param sclass (C++: const sclass_t *) + +Help on function set_tinfo_attr in module ida_typeinf: + +set_tinfo_attr(*args) -> 'bool' + set_tinfo_attr(tif, ta, may_overwrite) -> bool + +Help on function set_tinfo_attrs in module ida_typeinf: + +set_tinfo_attrs(*args) -> 'bool' + set_tinfo_attrs(tif, ta) -> bool + +Help on function set_tinfo_property in module ida_typeinf: + +set_tinfo_property(*args) -> 'size_t' + set_tinfo_property(tif, sta_prop, x) -> size_t + +Help on function set_type_alias in module ida_typeinf: + +set_type_alias(*args) -> 'bool' + set_type_alias(ti, src_ordinal, dst_ordinal) -> bool + + + Create a type alias. Redirects all references to source type to the + destination type. This is equivalent to instantaneous replacement all + reference to srctype by dsttype. + + @param ti (C++: til_t *) + @param src_ordinal (C++: uint32) + @param dst_ordinal (C++: uint32) + +Help on class simd_info_t in module ida_typeinf: + +class simd_info_t(builtins.object) + | Proxy of C++ simd_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, nm=None, sz=0, memt=BTF_UNK) -> simd_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_simd_info_t(...) + | delete_simd_info_t(self) + | + | match_pattern(self, *args) -> 'bool' + | match_pattern(self, pattern) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | memtype + | simd_info_t_memtype_get(self) -> type_t + | + | name + | simd_info_t_name_get(self) -> char const * + | + | size + | simd_info_t_size_get(self) -> uint16 + | + | thisown + | The membership flag + | + | tif + | simd_info_t_tif_get(self) -> tinfo_t + +Help on function store_til in module ida_typeinf: + +store_til(*args) -> 'bool' + store_til(ti, tildir, name) -> bool + + + Store til to a file. If the til contains garbage, it will be collected + before storing the til. Your plugin should call 'compact_til()' before + calling 'store_til()' . + + @param ti: type library to store (C++: til_t *) + @param tildir: directory where to store the til. NULL means current + directory. (C++: const char *) + @param name: filename of the til. If it's an absolute path, tildir is + ignored. NB: the file extension is forced to .til (C++: + const char *) + @return: success + +Help on class text_sink_t in module ida_typeinf: + +class text_sink_t(builtins.object) + | Proxy of C++ text_sink_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> text_sink_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_text_sink_t(...) + | delete_text_sink_t(self) + | + | _print(self, *args) -> 'int' + | _print(self, str) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on class til_symbol_t in module ida_typeinf: + +class til_symbol_t(builtins.object) + | Proxy of C++ til_symbol_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=None, t=None) -> til_symbol_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_til_symbol_t(...) + | delete_til_symbol_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | til_symbol_t_name_get(self) -> char const * + | + | thisown + | The membership flag + | + | til + | til_symbol_t_til_get(self) -> til_t + +Help on class til_t in module ida_typeinf: + +class til_t(builtins.object) + | Proxy of C++ til_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> til_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_til_t(...) + | delete_til_t(self) + | + | base(self, *args) -> 'til_t *' + | base(self, n) -> til_t + | + | is_dirty(self, *args) -> 'bool' + | is_dirty(self) -> bool + | + | set_dirty(self, *args) -> 'void' + | set_dirty(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cc + | til_t_cc_get(self) -> compiler_info_t + | + | desc + | til_t_desc_get(self) -> char * + | + | flags + | til_t_flags_get(self) -> uint32 + | + | name + | til_t_name_get(self) -> char * + | + | nbases + | til_t_nbases_get(self) -> int + | + | nrefs + | til_t_nrefs_get(self) -> int + | + | nstreams + | til_t_nstreams_get(self) -> int + | + | streams + | til_t_streams_get(self) -> til_stream_t ** + | + | thisown + | The membership flag + +Help on class tinfo_t in module ida_typeinf: + +class tinfo_t(builtins.object) + | Proxy of C++ tinfo_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> tinfo_t + | __init__(self, decl_type) -> tinfo_t + | __init__(self, r) -> tinfo_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) -> 'qstring' + | __str__(self) -> qstring + | + | __swig_destroy__ = delete_tinfo_t(...) + | delete_tinfo_t(self) + | + | _print(self, *args) -> 'bool' + | _print(self, name=None, prtype_flags=0, indent=0, cmtindent=0, prefix=None, cmt=None) -> bool + | + | append_covered(self, *args) -> 'bool' + | append_covered(self, out, offset=0) -> bool + | + | calc_gaps(self, *args) -> 'bool' + | calc_gaps(self, out) -> bool + | + | calc_purged_bytes(self, *args) -> 'int' + | calc_purged_bytes(self) -> int + | + | calc_score(self, *args) -> 'uint32' + | calc_score(self) -> uint32 + | + | calc_udt_aligns(self, *args) -> 'bool' + | calc_udt_aligns(self, sudt_flags=0x0004) -> bool + | + | change_sign(self, *args) -> 'bool' + | change_sign(self, sign) -> bool + | + | clear(self, *args) -> 'void' + | clear(self) + | + | clr_const(self, *args) -> 'void' + | clr_const(self) + | + | clr_const_volatile(self, *args) -> 'void' + | clr_const_volatile(self) + | + | clr_volatile(self, *args) -> 'void' + | clr_volatile(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | compare_with(self, *args) -> 'bool' + | compare_with(self, r, tcflags=0) -> bool + | + | convert_array_to_ptr(self, *args) -> 'bool' + | convert_array_to_ptr(self) -> bool + | + | copy(self, *args) -> 'tinfo_t' + | copy(self) -> tinfo_t + | + | create_array(self, *args) -> 'bool' + | create_array(self, p, decl_type=BT_ARRAY) -> bool + | create_array(self, tif, nelems=0, base=0, decl_type=BT_ARRAY) -> bool + | + | create_bitfield(self, *args) -> 'bool' + | create_bitfield(self, p, decl_type=BT_BITFIELD) -> bool + | create_bitfield(self, nbytes, width, is_unsigned=False, decl_type=BT_BITFIELD) -> bool + | + | create_enum(self, *args) -> 'bool' + | create_enum(self, p, decl_type=BTF_ENUM) -> bool + | + | create_forward_decl(self, *args) -> 'tinfo_code_t' + | create_forward_decl(self, til, decl_type, name, ntf_flags=0) -> tinfo_code_t + | + | create_func(self, *args) -> 'bool' + | create_func(self, p, decl_type=BT_FUNC) -> bool + | + | create_ptr(self, *args) -> 'bool' + | create_ptr(self, p, decl_type=BT_PTR) -> bool + | create_ptr(self, tif, bps=0, decl_type=BT_PTR) -> bool + | + | create_simple_type(self, *args) -> 'bool' + | create_simple_type(self, decl_type) -> bool + | + | create_typedef(self, *args) -> 'void' + | create_typedef(self, p, decl_type=BTF_TYPEDEF, try_ordinal=True) -> bool + | create_typedef(self, til, name, decl_type=BTF_TYPEDEF, try_ordinal=True) + | create_typedef(self, til, ord, decl_type=BTF_TYPEDEF) + | + | create_udt(self, *args) -> 'bool' + | create_udt(self, p, decl_type) -> bool + | + | del_attr(self, *args) -> 'bool' + | del_attr(self, key, make_copy=True) -> bool + | + | del_attrs(self, *args) -> 'void' + | del_attrs(self) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, til, ptype, pfields=None, pfldcmts=None) -> bool + | deserialize(self, til, type, fields, cmts=None) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | equals_to(self, *args) -> 'bool' + | equals_to(self, r) -> bool + | + | find_udt_member(self, *args) -> 'int' + | find_udt_member(self, udm, strmem_flags) -> int + | + | get_array_details(self, *args) -> 'bool' + | get_array_details(self, ai) -> bool + | + | get_array_element(self, *args) -> 'tinfo_t' + | get_array_element(self) -> tinfo_t + | + | get_array_nelems(self, *args) -> 'int' + | get_array_nelems(self) -> int + | + | get_attr(self, *args) -> 'PyObject *' + | get_attr(self, key, all_attrs=True) -> PyObject * + | + | get_attrs(self, *args) -> 'bool' + | get_attrs(self, tav, all_attrs=False) -> bool + | + | get_bitfield_details(self, *args) -> 'bool' + | get_bitfield_details(self, bi) -> bool + | + | get_declalign(self, *args) -> 'uchar' + | get_declalign(self) -> uchar + | + | get_decltype(self, *args) -> 'type_t' + | get_decltype(self) -> type_t + | + | get_enum_base_type(self, *args) -> 'type_t' + | get_enum_base_type(self) -> type_t + | + | get_enum_details(self, *args) -> 'bool' + | get_enum_details(self, ei) -> bool + | + | get_final_ordinal(self, *args) -> 'uint32' + | get_final_ordinal(self) -> uint32 + | + | get_final_type_name(self, *args) -> 'bool' + | get_final_type_name(self) -> bool + | + | get_func_details(self, *args) -> 'bool' + | get_func_details(self, fi, gtd=GTD_CALC_ARGLOCS) -> bool + | + | get_modifiers(self, *args) -> 'type_t' + | get_modifiers(self) -> type_t + | + | get_named_type(self, *args) -> 'bool' + | get_named_type(self, til, name, decl_type=BTF_TYPEDEF, resolve=True, try_ordinal=True) -> bool + | + | get_nargs(self, *args) -> 'int' + | get_nargs(self) -> int + | + | get_next_type_name(self, *args) -> 'bool' + | get_next_type_name(self) -> bool + | + | get_nth_arg(self, *args) -> 'tinfo_t' + | get_nth_arg(self, n) -> tinfo_t + | + | get_numbered_type(self, *args) -> 'bool' + | get_numbered_type(self, til, ordinal, decl_type=BTF_TYPEDEF, resolve=True) -> bool + | + | get_onemember_type(self, *args) -> 'tinfo_t' + | get_onemember_type(self) -> tinfo_t + | + | get_ordinal(self, *args) -> 'uint32' + | get_ordinal(self) -> uint32 + | + | get_pointed_object(self, *args) -> 'tinfo_t' + | get_pointed_object(self) -> tinfo_t + | + | get_ptr_details(self, *args) -> 'bool' + | get_ptr_details(self, pi) -> bool + | + | get_ptrarr_object(self, *args) -> 'tinfo_t' + | get_ptrarr_object(self) -> tinfo_t + | + | get_ptrarr_objsize(self, *args) -> 'int' + | get_ptrarr_objsize(self) -> int + | + | get_realtype(self, *args) -> 'type_t' + | get_realtype(self, full=False) -> type_t + | + | get_rettype(self, *args) -> 'tinfo_t' + | get_rettype(self) -> tinfo_t + | + | get_sign(self, *args) -> 'type_sign_t' + | get_sign(self) -> type_sign_t + | + | get_size(self, *args) -> 'size_t' + | get_size(self, p_effalign=None, gts_code=0) -> size_t + | + | get_til(self, *args) -> 'til_t const *' + | get_til(self) -> til_t + | + | get_type_name(self, *args) -> 'bool' + | get_type_name(self) -> bool + | + | get_udt_details(self, *args) -> 'bool' + | get_udt_details(self, udt, gtd=GTD_CALC_LAYOUT) -> bool + | + | get_udt_nmembers(self, *args) -> 'int' + | get_udt_nmembers(self) -> int + | + | get_unpadded_size(self, *args) -> 'size_t' + | get_unpadded_size(self) -> size_t + | + | has_details(self, *args) -> 'bool' + | has_details(self) -> bool + | + | has_vftable(self, *args) -> 'bool' + | has_vftable(self) -> bool + | + | is_anonymous_udt(self, *args) -> 'bool' + | is_anonymous_udt(self) -> bool + | + | is_arithmetic(self, *args) -> 'bool' + | is_arithmetic(self) -> bool + | + | is_array(self, *args) -> 'bool' + | is_array(self) -> bool + | + | is_bitfield(self, *args) -> 'bool' + | is_bitfield(self) -> bool + | + | is_bool(self, *args) -> 'bool' + | is_bool(self) -> bool + | + | is_castable_to(self, *args) -> 'bool' + | is_castable_to(self, target) -> bool + | + | is_char(self, *args) -> 'bool' + | is_char(self) -> bool + | + | is_complex(self, *args) -> 'bool' + | is_complex(self) -> bool + | + | is_const(self, *args) -> 'bool' + | is_const(self) -> bool + | + | is_correct(self, *args) -> 'bool' + | is_correct(self) -> bool + | + | is_decl_array(self, *args) -> 'bool' + | is_decl_array(self) -> bool + | + | is_decl_bitfield(self, *args) -> 'bool' + | is_decl_bitfield(self) -> bool + | + | is_decl_bool(self, *args) -> 'bool' + | is_decl_bool(self) -> bool + | + | is_decl_char(self, *args) -> 'bool' + | is_decl_char(self) -> bool + | + | is_decl_complex(self, *args) -> 'bool' + | is_decl_complex(self) -> bool + | + | is_decl_const(self, *args) -> 'bool' + | is_decl_const(self) -> bool + | + | is_decl_double(self, *args) -> 'bool' + | is_decl_double(self) -> bool + | + | is_decl_enum(self, *args) -> 'bool' + | is_decl_enum(self) -> bool + | + | is_decl_float(self, *args) -> 'bool' + | is_decl_float(self) -> bool + | + | is_decl_floating(self, *args) -> 'bool' + | is_decl_floating(self) -> bool + | + | is_decl_func(self, *args) -> 'bool' + | is_decl_func(self) -> bool + | + | is_decl_int(self, *args) -> 'bool' + | is_decl_int(self) -> bool + | + | is_decl_int128(self, *args) -> 'bool' + | is_decl_int128(self) -> bool + | + | is_decl_int16(self, *args) -> 'bool' + | is_decl_int16(self) -> bool + | + | is_decl_int32(self, *args) -> 'bool' + | is_decl_int32(self) -> bool + | + | is_decl_int64(self, *args) -> 'bool' + | is_decl_int64(self) -> bool + | + | is_decl_last(self, *args) -> 'bool' + | is_decl_last(self) -> bool + | + | is_decl_ldouble(self, *args) -> 'bool' + | is_decl_ldouble(self) -> bool + | + | is_decl_paf(self, *args) -> 'bool' + | is_decl_paf(self) -> bool + | + | is_decl_partial(self, *args) -> 'bool' + | is_decl_partial(self) -> bool + | + | is_decl_ptr(self, *args) -> 'bool' + | is_decl_ptr(self) -> bool + | + | is_decl_struct(self, *args) -> 'bool' + | is_decl_struct(self) -> bool + | + | is_decl_sue(self, *args) -> 'bool' + | is_decl_sue(self) -> bool + | + | is_decl_tbyte(self, *args) -> 'bool' + | is_decl_tbyte(self) -> bool + | + | is_decl_typedef(self, *args) -> 'bool' + | is_decl_typedef(self) -> bool + | + | is_decl_uchar(self, *args) -> 'bool' + | is_decl_uchar(self) -> bool + | + | is_decl_udt(self, *args) -> 'bool' + | is_decl_udt(self) -> bool + | + | is_decl_uint(self, *args) -> 'bool' + | is_decl_uint(self) -> bool + | + | is_decl_uint128(self, *args) -> 'bool' + | is_decl_uint128(self) -> bool + | + | is_decl_uint16(self, *args) -> 'bool' + | is_decl_uint16(self) -> bool + | + | is_decl_uint32(self, *args) -> 'bool' + | is_decl_uint32(self) -> bool + | + | is_decl_uint64(self, *args) -> 'bool' + | is_decl_uint64(self) -> bool + | + | is_decl_union(self, *args) -> 'bool' + | is_decl_union(self) -> bool + | + | is_decl_unknown(self, *args) -> 'bool' + | is_decl_unknown(self) -> bool + | + | is_decl_void(self, *args) -> 'bool' + | is_decl_void(self) -> bool + | + | is_decl_volatile(self, *args) -> 'bool' + | is_decl_volatile(self) -> bool + | + | is_double(self, *args) -> 'bool' + | is_double(self) -> bool + | + | is_empty_udt(self, *args) -> 'bool' + | is_empty_udt(self) -> bool + | + | is_enum(self, *args) -> 'bool' + | is_enum(self) -> bool + | + | is_ext_arithmetic(self, *args) -> 'bool' + | is_ext_arithmetic(self) -> bool + | + | is_ext_integral(self, *args) -> 'bool' + | is_ext_integral(self) -> bool + | + | is_float(self, *args) -> 'bool' + | is_float(self) -> bool + | + | is_floating(self, *args) -> 'bool' + | is_floating(self) -> bool + | + | is_forward_decl(self, *args) -> 'bool' + | is_forward_decl(self) -> bool + | + | is_from_subtil(self, *args) -> 'bool' + | is_from_subtil(self) -> bool + | + | is_func(self, *args) -> 'bool' + | is_func(self) -> bool + | + | is_funcptr(self, *args) -> 'bool' + | is_funcptr(self) -> bool + | + | is_high_func(self, *args) -> 'bool' + | is_high_func(self) -> bool + | + | is_int(self, *args) -> 'bool' + | is_int(self) -> bool + | + | is_int128(self, *args) -> 'bool' + | is_int128(self) -> bool + | + | is_int16(self, *args) -> 'bool' + | is_int16(self) -> bool + | + | is_int32(self, *args) -> 'bool' + | is_int32(self) -> bool + | + | is_int64(self, *args) -> 'bool' + | is_int64(self) -> bool + | + | is_integral(self, *args) -> 'bool' + | is_integral(self) -> bool + | + | is_ldouble(self, *args) -> 'bool' + | is_ldouble(self) -> bool + | + | is_manually_castable_to(self, *args) -> 'bool' + | is_manually_castable_to(self, target) -> bool + | + | is_one_fpval(self, *args) -> 'bool' + | is_one_fpval(self) -> bool + | + | is_paf(self, *args) -> 'bool' + | is_paf(self) -> bool + | + | is_partial(self, *args) -> 'bool' + | is_partial(self) -> bool + | + | is_ptr(self, *args) -> 'bool' + | is_ptr(self) -> bool + | + | is_ptr_or_array(self, *args) -> 'bool' + | is_ptr_or_array(self) -> bool + | + | is_purging_cc(self, *args) -> 'bool' + | is_purging_cc(self) -> bool + | + | is_pvoid(self, *args) -> 'bool' + | is_pvoid(self) -> bool + | + | is_scalar(self, *args) -> 'bool' + | is_scalar(self) -> bool + | + | is_shifted_ptr(self, *args) -> 'bool' + | is_shifted_ptr(self) -> bool + | + | is_signed(self, *args) -> 'bool' + | is_signed(self) -> bool + | + | is_small_udt(self, *args) -> 'bool' + | is_small_udt(self) -> bool + | + | is_sse_type(self, *args) -> 'bool' + | is_sse_type(self) -> bool + | + | is_struct(self, *args) -> 'bool' + | is_struct(self) -> bool + | + | is_sue(self, *args) -> 'bool' + | is_sue(self) -> bool + | + | is_tbyte(self, *args) -> 'bool' + | is_tbyte(self) -> bool + | + | is_typeref(self, *args) -> 'bool' + | is_typeref(self) -> bool + | + | is_uchar(self, *args) -> 'bool' + | is_uchar(self) -> bool + | + | is_udt(self, *args) -> 'bool' + | is_udt(self) -> bool + | + | is_uint(self, *args) -> 'bool' + | is_uint(self) -> bool + | + | is_uint128(self, *args) -> 'bool' + | is_uint128(self) -> bool + | + | is_uint16(self, *args) -> 'bool' + | is_uint16(self) -> bool + | + | is_uint32(self, *args) -> 'bool' + | is_uint32(self) -> bool + | + | is_uint64(self, *args) -> 'bool' + | is_uint64(self) -> bool + | + | is_union(self, *args) -> 'bool' + | is_union(self) -> bool + | + | is_unknown(self, *args) -> 'bool' + | is_unknown(self) -> bool + | + | is_unsigned(self, *args) -> 'bool' + | is_unsigned(self) -> bool + | + | is_user_cc(self, *args) -> 'bool' + | is_user_cc(self) -> bool + | + | is_vararg_cc(self, *args) -> 'bool' + | is_vararg_cc(self) -> bool + | + | is_varstruct(self, *args) -> 'bool' + | is_varstruct(self) -> bool + | + | is_vftable(self, *args) -> 'bool' + | is_vftable(self) -> bool + | + | is_void(self, *args) -> 'bool' + | is_void(self) -> bool + | + | is_volatile(self, *args) -> 'bool' + | is_volatile(self) -> bool + | + | is_well_defined(self, *args) -> 'bool' + | is_well_defined(self) -> bool + | + | present(self, *args) -> 'bool' + | present(self) -> bool + | + | read_bitfield_value(self, *args) -> 'uint64' + | read_bitfield_value(self, v, bitoff) -> uint64 + | + | remove_ptr_or_array(self, *args) -> 'bool' + | remove_ptr_or_array(self) -> bool + | + | requires_qualifier(self, *args) -> 'bool' + | requires_qualifier(self, name, offset) -> bool + | + | serialize(self, *args) -> 'PyObject *' + | serialize(self, sudt_flags=SUDT_FAST|SUDT_TRUNC) -> PyObject * + | + | set_attr(self, *args) -> 'bool' + | set_attr(self, ta, may_overwrite=True) -> bool + | + | set_attrs(self, *args) -> 'bool' + | set_attrs(self, tav) -> bool + | + | set_const(self, *args) -> 'void' + | set_const(self) + | + | set_declalign(self, *args) -> 'bool' + | set_declalign(self, declalign) -> bool + | + | set_modifiers(self, *args) -> 'void' + | set_modifiers(self, mod) + | + | set_named_type(self, *args) -> 'tinfo_code_t' + | set_named_type(self, til, name, ntf_flags=0) -> tinfo_code_t + | + | set_numbered_type(self, *args) -> 'tinfo_code_t' + | set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t + | + | set_symbol_type(self, *args) -> 'tinfo_code_t' + | set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t + | + | set_volatile(self, *args) -> 'void' + | set_volatile(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | write_bitfield_value(self, *args) -> 'uint64' + | write_bitfield_value(self, dst, v, bitoff) -> uint64 + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | get_stock(*args) -> 'tinfo_t' + | get_stock(id) -> tinfo_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function tinfo_t_get_stock in module ida_typeinf: + +tinfo_t_get_stock(*args) -> 'tinfo_t' + tinfo_t_get_stock(id) -> tinfo_t + +Help on class tinfo_visitor_t in module ida_typeinf: + +class tinfo_visitor_t(builtins.object) + | Proxy of C++ tinfo_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, s=0) -> tinfo_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_tinfo_visitor_t(...) + | delete_tinfo_visitor_t(self) + | + | apply_to(self, *args) -> 'int' + | apply_to(self, tif, out=None, name=None, cmt=None) -> int + | + | prune_now(self, *args) -> 'void' + | prune_now(self) + | + | visit_type(self, *args) -> 'int' + | visit_type(self, out, tif, name, cmt) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | state + | tinfo_visitor_t_state_get(self) -> int + | + | thisown + | The membership flag + +Help on class type_attr_t in module ida_typeinf: + +class type_attr_t(builtins.object) + | Proxy of C++ type_attr_t class. + | + | Methods defined here: + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> type_attr_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_type_attr_t(...) + | delete_type_attr_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | key + | type_attr_t_key_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | type_attr_t_value_get(self) -> bytevec_t * + +Help on class type_attrs_t in module ida_typeinf: + +class type_attrs_t(builtins.object) + | Proxy of C++ qvector< type_attr_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'type_attr_t const &' + | __getitem__(self, i) -> type_attr_t + | + | __init__(self, *args) + | __init__(self) -> type_attrs_t + | __init__(self, x) -> type_attrs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_type_attrs_t(...) + | delete_type_attrs_t(self) + | + | at(self, *args) -> 'type_attr_t const &' + | at(self, _idx) -> type_attr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< type_attr_t >::const_iterator' + | begin(self) -> type_attr_t + | begin(self) -> type_attr_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< type_attr_t >::const_iterator' + | end(self) -> type_attr_t + | end(self) -> type_attr_t + | + | erase(self, *args) -> 'qvector< type_attr_t >::iterator' + | erase(self, it) -> type_attr_t + | erase(self, first, last) -> type_attr_t + | + | extract(self, *args) -> 'type_attr_t *' + | extract(self) -> type_attr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=type_attr_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< type_attr_t >::iterator' + | insert(self, it, x) -> type_attr_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'type_attr_t &' + | push_back(self, x) + | push_back(self) -> type_attr_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class type_mods_t in module ida_typeinf: + +class type_mods_t(builtins.object) + | Proxy of C++ type_mods_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> type_mods_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_type_mods_t(...) + | delete_type_mods_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | has_cmt(self, *args) -> 'bool' + | has_cmt(self) -> bool + | + | has_info(self, *args) -> 'bool' + | has_info(self) -> bool + | + | has_name(self, *args) -> 'bool' + | has_name(self) -> bool + | + | has_type(self, *args) -> 'bool' + | has_type(self) -> bool + | + | set_new_cmt(self, *args) -> 'void' + | set_new_cmt(self, c) + | + | set_new_name(self, *args) -> 'void' + | set_new_name(self, n) + | + | set_new_type(self, *args) -> 'void' + | set_new_type(self, t) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | type_mods_t_cmt_get(self) -> qstring * + | + | flags + | type_mods_t_flags_get(self) -> int + | + | name + | type_mods_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | type_mods_t_type_get(self) -> tinfo_t + +Help on class typedef_type_data_t in module ida_typeinf: + +class typedef_type_data_t(builtins.object) + | Proxy of C++ typedef_type_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _til, _name, _resolve=False) -> typedef_type_data_t + | __init__(self, _til, ord, _resolve=False) -> typedef_type_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_typedef_type_data_t(...) + | delete_typedef_type_data_t(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | is_ordref + | typedef_type_data_t_is_ordref_get(self) -> bool + | + | resolve + | typedef_type_data_t_resolve_get(self) -> bool + | + | thisown + | The membership flag + | + | til + | typedef_type_data_t_til_get(self) -> til_t + +Help on class udt_member_t in module ida_typeinf: + +class udt_member_t(builtins.object) + | Proxy of C++ udt_member_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> udt_member_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_udt_member_t(...) + | delete_udt_member_t(self) + | + | begin(self, *args) -> 'uint64' + | begin(self) -> uint64 + | + | clr_baseclass(self, *args) -> 'void' + | clr_baseclass(self) + | + | clr_unaligned(self, *args) -> 'void' + | clr_unaligned(self) + | + | clr_vftable(self, *args) -> 'void' + | clr_vftable(self) + | + | clr_virtbase(self, *args) -> 'void' + | clr_virtbase(self) + | + | end(self, *args) -> 'uint64' + | end(self) -> uint64 + | + | is_anonymous_udm(self, *args) -> 'bool' + | is_anonymous_udm(self) -> bool + | + | is_baseclass(self, *args) -> 'bool' + | is_baseclass(self) -> bool + | + | is_bitfield(self, *args) -> 'bool' + | is_bitfield(self) -> bool + | + | is_unaligned(self, *args) -> 'bool' + | is_unaligned(self) -> bool + | + | is_vftable(self, *args) -> 'bool' + | is_vftable(self) -> bool + | + | is_virtbase(self, *args) -> 'bool' + | is_virtbase(self) -> bool + | + | is_zero_bitfield(self, *args) -> 'bool' + | is_zero_bitfield(self) -> bool + | + | set_baseclass(self, *args) -> 'void' + | set_baseclass(self) + | + | set_unaligned(self, *args) -> 'void' + | set_unaligned(self) + | + | set_vftable(self, *args) -> 'void' + | set_vftable(self) + | + | set_virtbase(self, *args) -> 'void' + | set_virtbase(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | udt_member_t_cmt_get(self) -> qstring * + | + | effalign + | udt_member_t_effalign_get(self) -> int + | + | fda + | udt_member_t_fda_get(self) -> uchar + | + | name + | udt_member_t_name_get(self) -> qstring * + | + | offset + | udt_member_t_offset_get(self) -> uint64 + | + | size + | udt_member_t_size_get(self) -> uint64 + | + | tafld_bits + | udt_member_t_tafld_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | type + | udt_member_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class udt_type_data_t in module ida_typeinf: + +class udt_type_data_t(udtmembervec_t) + | Proxy of C++ udt_type_data_t class. + | + | Method resolution order: + | udt_type_data_t + | udtmembervec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> udt_type_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_udt_type_data_t(...) + | delete_udt_type_data_t(self) + | + | is_cppobj(self, *args) -> 'bool' + | is_cppobj(self) -> bool + | + | is_last_baseclass(self, *args) -> 'bool' + | is_last_baseclass(self, idx) -> bool + | + | is_msstruct(self, *args) -> 'bool' + | is_msstruct(self) -> bool + | + | is_unaligned(self, *args) -> 'bool' + | is_unaligned(self) -> bool + | + | is_vftable(self, *args) -> 'bool' + | is_vftable(self) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | effalign + | udt_type_data_t_effalign_get(self) -> uint32 + | + | is_union + | udt_type_data_t_is_union_get(self) -> bool + | + | pack + | udt_type_data_t_pack_get(self) -> uchar + | + | sda + | udt_type_data_t_sda_get(self) -> uchar + | + | taudt_bits + | udt_type_data_t_taudt_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | total_size + | udt_type_data_t_total_size_get(self) -> size_t + | + | unpadded_size + | udt_type_data_t_unpadded_size_get(self) -> size_t + | + | ---------------------------------------------------------------------- + | Methods inherited from udtmembervec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'udt_member_t const &' + | __getitem__(self, i) -> udt_member_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'udt_member_t const &' + | at(self, _idx) -> udt_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | begin(self) -> udt_member_t + | begin(self) -> udt_member_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | end(self) -> udt_member_t + | end(self) -> udt_member_t + | + | erase(self, *args) -> 'qvector< udt_member_t >::iterator' + | erase(self, it) -> udt_member_t + | erase(self, first, last) -> udt_member_t + | + | extract(self, *args) -> 'udt_member_t *' + | extract(self) -> udt_member_t + | + | find(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | find(self, x) -> udt_member_t + | find(self, x) -> udt_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=udt_member_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< udt_member_t >::iterator' + | insert(self, it, x) -> udt_member_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'udt_member_t &' + | push_back(self, x) + | push_back(self) -> udt_member_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from udtmembervec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from udtmembervec_t: + | + | __hash__ = None + +Help on class udtmembervec_t in module ida_typeinf: + +class udtmembervec_t(builtins.object) + | Proxy of C++ qvector< udt_member_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'udt_member_t const &' + | __getitem__(self, i) -> udt_member_t + | + | __init__(self, *args) + | __init__(self) -> udtmembervec_t + | __init__(self, x) -> udtmembervec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_udtmembervec_t(...) + | delete_udtmembervec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'udt_member_t const &' + | at(self, _idx) -> udt_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | begin(self) -> udt_member_t + | begin(self) -> udt_member_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | end(self) -> udt_member_t + | end(self) -> udt_member_t + | + | erase(self, *args) -> 'qvector< udt_member_t >::iterator' + | erase(self, it) -> udt_member_t + | erase(self, first, last) -> udt_member_t + | + | extract(self, *args) -> 'udt_member_t *' + | extract(self) -> udt_member_t + | + | find(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | find(self, x) -> udt_member_t + | find(self, x) -> udt_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=udt_member_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< udt_member_t >::iterator' + | insert(self, it, x) -> udt_member_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'udt_member_t &' + | push_back(self, x) + | push_back(self) -> udt_member_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function unpack_idcobj_from_bv in module ida_typeinf: + +unpack_idcobj_from_bv(*args) -> 'error_t' + unpack_idcobj_from_bv(obj, tif, bytes, pio_flags=0) -> error_t + + + Read a typed idc object from the byte vector. + + + @param obj (C++: idc_value_t *) + @param tif (C++: const tinfo_t &) + @param bytes (C++: const bytevec_t &) + @param pio_flags (C++: int) + +Help on function unpack_idcobj_from_idb in module ida_typeinf: + +unpack_idcobj_from_idb(*args) -> 'error_t' + unpack_idcobj_from_idb(obj, tif, ea, off0, pio_flags=0) -> error_t + + + Collection of register objects. + + Read a typed idc object from the database + + @param obj (C++: idc_value_t *) + @param tif (C++: const tinfo_t &) + @param ea (C++: ea_t) + @param off0 (C++: const bytevec_t *) + @param pio_flags (C++: int) + +Help on function unpack_object_from_bv in module ida_typeinf: + +unpack_object_from_bv(*args) -> 'PyObject *' + unpack_object_from_bv(ti, _type, _fields, bytes, pio_flags=0) -> PyObject * + + + Unpacks a buffer into an object. + Returns the error_t returned by idaapi.pack_object_to_idb + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param bytes: the bytes to unpack + @param pio_flags: flags used while unpacking + @return: + - tuple(0, err) on failure + - tuple(1, obj) on success + +Help on function unpack_object_from_idb in module ida_typeinf: + +unpack_object_from_idb(*args) -> 'PyObject *' + unpack_object_from_idb(ti, _type, _fields, ea, pio_flags=0) -> PyObject * + +Help on class valstr_t in module ida_typeinf: + +class valstr_t(builtins.object) + | Proxy of C++ valstr_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> valstr_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_valstr_t(...) + | delete_valstr_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | info + | valstr_t_info_get(self) -> valinfo_t * + | + | length + | valstr_t_length_get(self) -> size_t + | + | members + | valstr_t_members_get(self) -> valstrs_t + | + | oneline + | valstr_t_oneline_get(self) -> qstring * + | + | props + | valstr_t_props_get(self) -> int + | + | thisown + | The membership flag + +Help on class valstrs_t in module ida_typeinf: + +class valstrs_t(valstrvec_t) + | Proxy of C++ valstrs_t class. + | + | Method resolution order: + | valstrs_t + | valstrvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> valstrs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_valstrs_t(...) + | delete_valstrs_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from valstrvec_t: + | + | __getitem__(self, *args) -> 'valstr_t const &' + | __getitem__(self, i) -> valstr_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | at(self, *args) -> 'valstr_t const &' + | at(self, _idx) -> valstr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< valstr_t >::const_iterator' + | begin(self) -> valstr_t + | begin(self) -> valstr_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< valstr_t >::const_iterator' + | end(self) -> valstr_t + | end(self) -> valstr_t + | + | erase(self, *args) -> 'qvector< valstr_t >::iterator' + | erase(self, it) -> valstr_t + | erase(self, first, last) -> valstr_t + | + | extract(self, *args) -> 'valstr_t *' + | extract(self) -> valstr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=valstr_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< valstr_t >::iterator' + | insert(self, it, x) -> valstr_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'valstr_t &' + | push_back(self, x) + | push_back(self) -> valstr_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from valstrvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class valstrvec_t in module ida_typeinf: + +class valstrvec_t(builtins.object) + | Proxy of C++ qvector< valstr_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'valstr_t const &' + | __getitem__(self, i) -> valstr_t + | + | __init__(self, *args) + | __init__(self) -> valstrvec_t + | __init__(self, x) -> valstrvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_valstrvec_t(...) + | delete_valstrvec_t(self) + | + | at(self, *args) -> 'valstr_t const &' + | at(self, _idx) -> valstr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< valstr_t >::const_iterator' + | begin(self) -> valstr_t + | begin(self) -> valstr_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< valstr_t >::const_iterator' + | end(self) -> valstr_t + | end(self) -> valstr_t + | + | erase(self, *args) -> 'qvector< valstr_t >::iterator' + | erase(self, it) -> valstr_t + | erase(self, first, last) -> valstr_t + | + | extract(self, *args) -> 'valstr_t *' + | extract(self) -> valstr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=valstr_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< valstr_t >::iterator' + | insert(self, it, x) -> valstr_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'valstr_t &' + | push_back(self, x) + | push_back(self) -> valstr_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function verify_argloc in module ida_typeinf: + +verify_argloc(*args) -> 'int' + verify_argloc(vloc, size, gaps) -> int + + + Verify 'argloc_t' . + + @param vloc (C++: const argloc_t &) + @param size: total size of the variable (C++: int) + @param gaps: if not NULL, specifies gaps in structure definition. + these gaps should not map to any argloc, but everything + else must be covered (C++: const rangeset_t *) + @return: 0 if ok, otherwise an interr code. + +Help on function verify_tinfo in module ida_typeinf: + +verify_tinfo(*args) -> 'int' + verify_tinfo(typid) -> int + +Help on function visit_subtypes in module ida_typeinf: + +visit_subtypes(*args) -> 'int' + visit_subtypes(visitor, out, tif, name, cmt) -> int + +Help on function write_tinfo_bitfield_value in module ida_typeinf: + +write_tinfo_bitfield_value(*args) -> 'uint64' + write_tinfo_bitfield_value(typid, dst, v, bitoff) -> uint64 + +=== ida_typeinf EPYDOC INJECTIONS === +ida_typeinf.ADDTIL_ABORTED +""" +til was not loaded (incompatible til rejected by user) +""" + +ida_typeinf.ADDTIL_COMP +""" +ok, but til is not compatible with the current compiler +""" + +ida_typeinf.ADDTIL_DEFAULT +""" +default behavior +""" + +ida_typeinf.ADDTIL_FAILED +""" +something bad, the warning is displayed +""" + +ida_typeinf.ADDTIL_INCOMP +""" +load incompatible tils +""" + +ida_typeinf.ADDTIL_OK +""" +ok, til is loaded +""" + +ida_typeinf.ADDTIL_SILENT +""" +do not ask any questions +""" + +ida_typeinf.CC_ALLOW_ARGPERM +""" +disregard argument order? +""" + +ida_typeinf.CC_ALLOW_REGHOLES +""" +allow holes in register argument list? +""" + +ida_typeinf.CC_CDECL_OK +""" +can use __cdecl calling convention? +""" + +ida_typeinf.CC_HAS_ELLIPSIS +""" +function has a variable list of arguments? +""" + +ida_typeinf.FAH_BYTE +""" +function argument attribute header byte +""" + +ida_typeinf.FAI_ARRAY +""" +was initially an array see "__org_typedef" or "__org_arrdim" type +attributes to determine the original type +""" + +ida_typeinf.FAI_HIDDEN +""" +hidden argument +""" + +ida_typeinf.FAI_RETPTR +""" +pointer to return value. implies hidden +""" + +ida_typeinf.FAI_STRUCT +""" +was initially a structure +""" + +ida_typeinf.FTI_ALL +""" +all defined bits +""" + +ida_typeinf.FTI_ARGLOCS +""" +(stkargs and retloc too) + +info about argument locations has been calculated +""" + +ida_typeinf.FTI_CALLTYPE +""" +mask for FTI_*CALL +""" + +ida_typeinf.FTI_DEFCALL +""" +default call +""" + +ida_typeinf.FTI_FARCALL +""" +far call +""" + +ida_typeinf.FTI_HIGH +""" +high level prototype (with possibly hidden args) +""" + +ida_typeinf.FTI_INTCALL +""" +interrupt call +""" + +ida_typeinf.FTI_NEARCALL +""" +near call +""" + +ida_typeinf.FTI_NORET +""" +noreturn +""" + +ida_typeinf.FTI_PURE +""" +__pure +""" + +ida_typeinf.FTI_SPOILED +""" +information about spoiled registers is present +""" + +ida_typeinf.FTI_STATIC +""" +static +""" + +ida_typeinf.FTI_VIRTUAL +""" +virtual +""" + +ida_typeinf.GUESS_FUNC_FAILED +""" +couldn't guess the function type +""" + +ida_typeinf.GUESS_FUNC_OK +""" +ok, some non-trivial information is gathered +""" + +ida_typeinf.GUESS_FUNC_TRIVIAL +""" +the function type doesn't have interesting info +""" + +ida_typeinf.HTI_CPP +""" +C++ mode (not implemented) +""" + +ida_typeinf.HTI_DCL +""" +don't complain about redeclarations +""" + +ida_typeinf.HTI_EXT +""" +debug: print external representation of types +""" + +ida_typeinf.HTI_FIL +""" +otherwise "input" contains a C declaration + +"input" is file name, +""" + +ida_typeinf.HTI_HIGH +""" +(with hidden args, etc) + +assume high level prototypes +""" + +ida_typeinf.HTI_INT +""" +debug: print internal representation of types +""" + +ida_typeinf.HTI_LEX +""" +debug: print tokens +""" + +ida_typeinf.HTI_LOWER +""" +lower the function prototypes +""" + +ida_typeinf.HTI_MAC +""" +define macros from the base tils +""" + +ida_typeinf.HTI_NDC +""" +don't decorate names +""" + +ida_typeinf.HTI_NER +""" +ignore all errors but display them +""" + +ida_typeinf.HTI_NWR +""" +no warning messages +""" + +ida_typeinf.HTI_PAK +""" +explicit structure pack value (#pragma pack) +""" + +ida_typeinf.HTI_PAK1 +""" +#pragma pack(1) +""" + +ida_typeinf.HTI_PAK16 +""" +#pragma pack(16) +""" + +ida_typeinf.HTI_PAK2 +""" +#pragma pack(2) +""" + +ida_typeinf.HTI_PAK4 +""" +#pragma pack(4) +""" + +ida_typeinf.HTI_PAK8 +""" +#pragma pack(8) +""" + +ida_typeinf.HTI_PAKDEF +""" +default pack value +""" + +ida_typeinf.HTI_PAK_SHIFT +""" +shift for 'HTI_PAK' . This field should be used if you want to +remember an explicit pack value for each structure/union type. See +'HTI_PAK' ... definitions +""" + +ida_typeinf.HTI_RAWARGS +""" +leave argument names unchanged (do not remove underscores) +""" + +ida_typeinf.HTI_TST +""" +test mode: discard the result +""" + +ida_typeinf.HTI_UNP +""" +debug: check the result by unpacking it +""" + +ida_typeinf.IMPTYPE_LOCAL +""" +the type is local, the struct/enum won't be marked as til type. there +is no need to specify this bit if til==idati, the kernel will set it +automatically +""" + +ida_typeinf.IMPTYPE_OVERRIDE +""" +override existing type +""" + +ida_typeinf.IMPTYPE_VERBOSE +""" +more verbose output (dialog boxes may appear) +""" + +ida_typeinf.MAX_FUNC_ARGS +""" +max number of function arguments +""" + +ida_typeinf.NTF_64BIT +""" +value is 64bit +""" + +ida_typeinf.NTF_CHKSYNC +""" +(set_numbered_type, set_named_type) + +check that synchronization to IDB passed OK +""" + +ida_typeinf.NTF_FIXNAME +""" +(set_named_type, set_numbered_type only) + +force-validate the name of the type when setting +""" + +ida_typeinf.NTF_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly (set_named_type, set_numbered_type only) +""" + +ida_typeinf.NTF_NOBASE +""" +don't inspect base tils (for get_named_type) +""" + +ida_typeinf.NTF_NOCUR +""" +don't inspect current til file (for get_named_type) +""" + +ida_typeinf.NTF_REPLACE +""" +replace original type (for set_named_type) +""" + +ida_typeinf.NTF_SYMM +""" +only one of 'NTF_TYPE' and 'NTF_SYMU' , 'NTF_SYMM' can be used + +symbol, name is mangled ('_func') +""" + +ida_typeinf.NTF_SYMU +""" +symbol, name is unmangled ('func') +""" + +ida_typeinf.NTF_TYPE +""" +type name +""" + +ida_typeinf.NTF_UMANGLED +""" +name is unmangled (don't use this flag) +""" + +ida_typeinf.PCN_CHR +""" +character +""" + +ida_typeinf.PCN_DEC +""" +decimal +""" + +ida_typeinf.PCN_DECSEXT +""" +automatically extend sign of signed decimal numbers +""" + +ida_typeinf.PCN_HEX +""" +hexadecimal +""" + +ida_typeinf.PCN_LZHEX +""" +print leading zeroes for hexdecimal number +""" + +ida_typeinf.PCN_NEGSIGN +""" +print negated value (-N) for negative numbers +""" + +ida_typeinf.PCN_OCT +""" +octal +""" + +ida_typeinf.PCN_RADIX +""" +number base to use +""" + +ida_typeinf.PCN_UNSIGNED +""" +add 'u' suffix +""" + +ida_typeinf.PDF_DEF_BASE +""" +Include base types: __int8, __int16, etc.. +""" + +ida_typeinf.PDF_DEF_FWD +""" +Allow forward declarations. +""" + +ida_typeinf.PDF_HEADER_CMT +""" +Prepend output with a descriptive comment. +""" + +ida_typeinf.PDF_INCL_DEPS +""" +Include all type dependencies. +""" + +ida_typeinf.PIO_IGNORE_PTRS +""" +do not follow pointers +""" + +ida_typeinf.PIO_NOATTR_FAIL +""" +missing attributes are not ok +""" + +ida_typeinf.PRALOC_STKOFF +""" +print stack offsets +""" + +ida_typeinf.PRALOC_VERIFY +""" +interr if illegal argloc +""" + +ida_typeinf.PRTYPE_1LINE +""" +print to one line +""" + +ida_typeinf.PRTYPE_COLORED +""" +add color tag COLOR_SYMBOL for any parentheses, commas and colons +""" + +ida_typeinf.PRTYPE_CPP +""" +use c++ name (only for 'print_type()' ) +""" + +ida_typeinf.PRTYPE_DEF +""" + 'tinfo_t' : print definition, if available +""" + +ida_typeinf.PRTYPE_MULTI +""" +print to many lines +""" + +ida_typeinf.PRTYPE_NOARGS +""" + 'tinfo_t' : do not print function argument names +""" + +ida_typeinf.PRTYPE_NOARRS +""" + 'tinfo_t' : print arguments with 'FAI_ARRAY' as pointers +""" + +ida_typeinf.PRTYPE_NOREGEX +""" +do not apply regular expressions to beautify name +""" + +ida_typeinf.PRTYPE_NORES +""" + 'tinfo_t' : never resolve types (meaningful with PRTYPE_DEF) +""" + +ida_typeinf.PRTYPE_PRAGMA +""" +print pragmas for alignment +""" + +ida_typeinf.PRTYPE_RESTORE +""" + 'tinfo_t' : print restored types for 'FAI_ARRAY' and 'FAI_STRUCT' +""" + +ida_typeinf.PRTYPE_SEMI +""" +append ; to the end +""" + +ida_typeinf.PRTYPE_TYPE +""" +print type declaration (not variable declaration) +""" + +ida_typeinf.PT_HIGH +""" +(with hidden args, etc) + +assume high level prototypes +""" + +ida_typeinf.PT_LOWER +""" +lower the function prototypes +""" + +ida_typeinf.PT_NDC +""" +don't decorate names +""" + +ida_typeinf.PT_PACKMASK +""" +mask for pack alignment values +""" + +ida_typeinf.PT_RAWARGS +""" +leave argument names unchanged (do not remove underscores) +""" + +ida_typeinf.PT_REPLACE +""" +replace the old type (used in idc) +""" + +ida_typeinf.PT_SIL +""" +silent, no messages +""" + +ida_typeinf.PT_TYP +""" +return declared type information +""" + +ida_typeinf.PT_VAR +""" +return declared object information +""" + +ida_typeinf.RESERVED_BYTE +""" +multifunctional purpose +""" + +ida_typeinf.SETCOMP_BY_USER +""" +invoked by user, cannot be replaced by module/loader +""" + +ida_typeinf.SETCOMP_ONLY_ABI +""" +ignore cc field complete, use only abiname +""" + +ida_typeinf.SETCOMP_ONLY_ID +""" +cc has only 'id' field the rest will be set to defaults corresponding +to the program bitness +""" + +ida_typeinf.SETCOMP_OVERRIDE +""" +may override old compiler info +""" + +ida_typeinf.STRMEM_ANON +""" +can be combined with 'STRMEM_NAME' : look inside anonymous members +too. +""" + +ida_typeinf.STRMEM_AUTO +""" +get member by offset if struct, or get member by index if union - nb: +union: index is stored in the udm->offset field!nb: struct: offset is +in bytes (not in bits)! +""" + +ida_typeinf.STRMEM_CASTABLE_TO +""" +can be combined with 'STRMEM_TYPE' : member type must be castable to +the specified type +""" + +ida_typeinf.STRMEM_INDEX +""" +get member by number- in: udm->offset - is a member number +""" + +ida_typeinf.STRMEM_MAXS +""" +get biggest member by size. +""" + +ida_typeinf.STRMEM_MINS +""" +get smallest member by size. +""" + +ida_typeinf.STRMEM_NAME +""" +get member by name- in: udm->name - the desired member name. +""" + +ida_typeinf.STRMEM_OFFSET +""" +get member by offset- in: udm->offset - is a member offset in bits +""" + +ida_typeinf.STRMEM_SIZE +""" +get member by size.- in: udm->size - the desired member size. +""" + +ida_typeinf.STRMEM_SKIP_EMPTY +""" +can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' skip empty +members (i.e. having zero size) only last empty member can be returned +""" + +ida_typeinf.STRMEM_TYPE +""" +get member by type. - in: udm->type - the desired member type. member +types are compared with tinfo_t::equals_to() +""" + +ida_typeinf.STRMEM_VFTABLE +""" +can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' get vftable +instead of the base class +""" + +ida_typeinf.SUDT_ALIGN +""" +to match the offsets and size info + +recalculate field alignments, struct packing, etc +""" + +ida_typeinf.SUDT_CONST +""" +only for serialize_udt: make type const +""" + +ida_typeinf.SUDT_FAST +""" +serialize without verifying offsets and alignments +""" + +ida_typeinf.SUDT_GAPS +""" +allow to fill gaps with additional members (_BYTE[]) +""" + +ida_typeinf.SUDT_SORT +""" +fields are not sorted by offset, sort them first +""" + +ida_typeinf.SUDT_TRUNC +""" +serialize: truncate useless strings from fields, fldcmts +""" + +ida_typeinf.SUDT_UNEX +""" +references to nonexistent member types are acceptable in this case it +is better to set the corresponding 'udt_member_t::fda' field to the +type alignment. if this field is not set, ida will try to guess the +alignment. +""" + +ida_typeinf.SUDT_VOLATILE +""" +only for serialize_udt: make type volatile +""" + +ida_typeinf.TAENUM_64BIT +""" +enum: store 64-bit values +""" + +ida_typeinf.TAENUM_SIGNED +""" +enum: signed +""" + +ida_typeinf.TAENUM_UNSIGNED +""" +enum: unsigned +""" + +ida_typeinf.TAFLD_BASECLASS +""" +field: do not include but inherit from the current field +""" + +ida_typeinf.TAFLD_UNALIGNED +""" +field: unaligned field +""" + +ida_typeinf.TAFLD_VFTABLE +""" +field: ptr to virtual function table +""" + +ida_typeinf.TAFLD_VIRTBASE +""" +field: virtual base (not supported yet) +""" + +ida_typeinf.TAH_ALL +""" +all defined bits +""" + +ida_typeinf.TAH_BYTE +""" +type attribute header byte +""" + +ida_typeinf.TAH_HASATTRS +""" +has extended attributes +""" + +ida_typeinf.TAPTR_PTR32 +""" +ptr: __ptr32 +""" + +ida_typeinf.TAPTR_PTR64 +""" +ptr: __ptr64 +""" + +ida_typeinf.TAPTR_RESTRICT +""" +ptr: __restrict +""" + +ida_typeinf.TAPTR_SHIFTED +""" +ptr: __shifted(parent_struct, delta) +""" + +ida_typeinf.TAUDT_CPPOBJ +""" +struct: a c++ object, not simple pod type +""" + +ida_typeinf.TAUDT_MSSTRUCT +""" +struct: gcc msstruct attribute +""" + +ida_typeinf.TAUDT_UNALIGNED +""" +struct: unaligned struct +""" + +ida_typeinf.TAUDT_VFTABLE +""" +struct: is virtual function table +""" + +ida_typeinf.TA_FORMAT +""" +info about the 'format' argument 3 times pack_dd: 'format_functype_t' +, argument number of 'format', argument number of '...' +""" + +ida_typeinf.TA_ORG_ARRDIM +""" +the original array dimension (pack_dd) +""" + +ida_typeinf.TA_ORG_TYPEDEF +""" +the original typedef name (simple string) +""" + +ida_typeinf.TCMP_ANYBASE +""" +accept any base class when casting +""" + +ida_typeinf.TCMP_AUTOCAST +""" +can t1 be cast into t2 automatically? +""" + +ida_typeinf.TCMP_CALL +""" +can t1 be called with t2 type? +""" + +ida_typeinf.TCMP_DECL +""" +compare declarations without resolving them +""" + +ida_typeinf.TCMP_DELPTR +""" +remove pointer from types before comparing +""" + +ida_typeinf.TCMP_EQUAL +""" +are types equal? +""" + +ida_typeinf.TCMP_IGNMODS +""" +ignore const/volatile modifiers +""" + +ida_typeinf.TCMP_MANCAST +""" +can t1 be cast into t2 manually? +""" + +ida_typeinf.TCMP_SKIPTHIS +""" +skip the first function argument in comparison +""" + +ida_typeinf.TIL_ADD_ALREADY +""" +the base til was already added +""" + +ida_typeinf.TIL_ADD_FAILED +""" +see errbuf +""" + +ida_typeinf.TIL_ADD_OK +""" +some tils were added +""" + +ida_typeinf.TIL_ALI +""" +type aliases are present (this bit is used only on the disk) +""" + +ida_typeinf.TIL_ESI +""" +extended sizeof info (short, long, longlong) +""" + +ida_typeinf.TIL_MAC +""" +til has macro table +""" + +ida_typeinf.TIL_MOD +""" +til has been modified, should be saved +""" + +ida_typeinf.TIL_ORD +""" +type ordinal numbers are present +""" + +ida_typeinf.TIL_SLD +""" +sizeof(long double) +""" + +ida_typeinf.TIL_STM +""" +til has extra streams +""" + +ida_typeinf.TIL_UNI +""" +universal til for any compiler +""" + +ida_typeinf.TIL_ZIP +""" +pack buckets using zip +""" + +ida_typeinf.TINFO_DEFINITE +""" +this is a definite type +""" + +ida_typeinf.TINFO_DELAYFUNC +""" +if type is a function and no function exists at ea, schedule its +creation and argument renaming to auto-analysis otherwise try to +create it immediately +""" + +ida_typeinf.TINFO_GUESSED +""" +this is a guessed type +""" + +ida_typeinf.TINFO_STRICT +""" +never convert given type to another one before applying +""" + +ida_typeinf.TVIS_CMT +""" +new comment is present +""" + +ida_typeinf.TVIS_NAME +""" +new name is present +""" + +ida_typeinf.TVIS_TYPE +""" +new type info is present +""" + +ida_typeinf.TVST_DEF +""" +visit type definition (meaningful for typerefs) +""" + +ida_typeinf.TVST_PRUNE +""" +don't visit children of current type +""" + +ida_typeinf.VALSTR_OPEN +""" +printed opening curly brace '{' +""" +=== ida_typeinf EPYDOC INJECTIONS END === +Help on function calc_dataseg in module ida_ua: + +calc_dataseg(*args) -> 'ea_t' + calc_dataseg(insn, n=-1, rgnum=-1) -> ea_t + + + Get data segment for the instruction operand. 'opnum' and 'rgnum' are + meaningful only if the processor has segment registers. + + @param insn (C++: const insn_t &) + @param n (C++: int) + @param rgnum (C++: int) + +Help on function can_decode in module ida_ua: + +can_decode(*args) -> 'bool' + can_decode(ea) -> bool + + + Can the bytes at address 'ea' be decoded as instruction? + + @param ea: linear address (C++: ea_t) + @return: whether or not the contents at that address could be a valid + instruction + +Help on function construct_macro in module ida_ua: + +construct_macro(*args) -> 'bool' + construct_macro(insn, enable, build_macro) -> bool + + + See ua.hpp's construct_macro(). + +Help on function create_insn in module ida_ua: + +create_insn(*args) -> 'int' + create_insn(ea, out=None) -> int + + + Create an instruction at the specified address. This function checks + if an instruction is present at the specified address and will try to + create one if there is none. It will fail if there is a data item or + other items hindering the creation of the new instruction. This + function will also fill the 'out' structure. + + @param ea: linear address (C++: ea_t) + @param out: the resulting instruction (C++: insn_t *) + @return: the length of the instruction or 0 + +Help on function create_outctx in module ida_ua: + +create_outctx(*args) -> 'outctx_base_t *' + create_outctx(ea, F=0, suspop=0) -> outctx_base_t + + + Create a new output context. To delete it, just use "delete pctx" + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param suspop (C++: int) + +Help on function decode_insn in module ida_ua: + +decode_insn(*args) -> 'int' + decode_insn(out, ea) -> int + + + Analyze the specified address and fill 'out'. This function does not + modify the database. It just tries to interpret the specified address + as an instruction and fills the 'out' structure. + + @param out: the resulting instruction (C++: insn_t *) + @param ea: linear address (C++: ea_t) + @return: the length of the (possible) instruction or 0 + +Help on function decode_preceding_insn in module ida_ua: + +decode_preceding_insn(*args) -> 'PyObject *' + decode_preceding_insn(out, ea) -> PyObject * + + + Decodes the preceding instruction. Please check ua.hpp / decode_preceding_insn() + @param ea: current ea + @param out: instruction storage + @return: tuple(preceeding_ea or BADADDR, farref = Boolean) + +Help on function decode_prev_insn in module ida_ua: + +decode_prev_insn(*args) -> 'ea_t' + decode_prev_insn(out, ea) -> ea_t + + + Decode previous instruction if it exists, fill 'out'. + + @param out: the resulting instruction (C++: insn_t *) + @param ea: the address to decode the previous instruction from (C++: + ea_t) + @return: the previous instruction address ( BADADDR -no such insn) + +Help on function get_dtype_by_size in module ida_ua: + +get_dtype_by_size(*args) -> 'int' + get_dtype_by_size(size) -> int + + + Get 'op_t::dtype' from size. + + + @param size (C++: asize_t) + +Help on function get_dtype_flag in module ida_ua: + +get_dtype_flag(*args) -> 'flags_t' + get_dtype_flag(dtype) -> flags_t + + + Get flags for 'op_t::dtype' field. + + + @param dtype (C++: op_dtype_t) + +Help on function get_dtype_size in module ida_ua: + +get_dtype_size(*args) -> 'size_t' + get_dtype_size(dtype) -> size_t + + + Get size of opt_::dtype field. + + + @param dtype (C++: op_dtype_t) + +Help on function get_immvals in module ida_ua: + +get_immvals(*args) -> 'PyObject *' + get_immvals(ea, n, F=0) -> PyObject * + + + Get immediate values at the specified address. This function decodes + instruction at the specified address or inspects the data item. It + finds immediate values and copies them to 'out'. This function will + store the original value of the operands in 'out', unless the last + bits of 'F' are "...0 11111111", in which case the transformed values + (as needed for printing) will be stored instead. + + @param ea: address to analyze (C++: ea_t) + @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands + (C++: int) + @param F: flags for the specified address (C++: flags_t) + @return: number of immediate values (0..2* UA_MAXOP ) + +Help on function get_lookback in module ida_ua: + +get_lookback(*args) -> 'int' + get_lookback() -> int + + + Number of instructions to look back. This variable is not used by the + kernel. Its value may be specified in ida.cfg: LOOKBACK = . + IDP may use it as you like it. (TMS module uses it) + +Help on function get_printable_immvals in module ida_ua: + +get_printable_immvals(*args) -> 'PyObject *' + get_printable_immvals(ea, n, F=0) -> PyObject * + + + Get immediate ready-to-print values at the specified address + + @param ea: address to analyze (C++: ea_t) + @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands + (C++: int) + @param F: flags for the specified address (C++: flags_t) + @return: number of immediate values (0..2* UA_MAXOP ) + +Help on function guess_table_address in module ida_ua: + +guess_table_address(*args) -> 'ea_t' + guess_table_address(insn) -> ea_t + + + Guess the jump table address (ibm pc specific) + + + @param insn (C++: const insn_t &) + +Help on function guess_table_size in module ida_ua: + +guess_table_size(*args) -> 'asize_t' + guess_table_size(insn, jump_table) -> asize_t + + + Guess the jump table size. + + + @param insn (C++: const insn_t &) + @param jump_table (C++: ea_t) + +Help on function insn_add_cref in module ida_ua: + +insn_add_cref(*args) -> 'void' + insn_add_cref(insn, to, opoff, type) + +Help on function insn_add_dref in module ida_ua: + +insn_add_dref(*args) -> 'void' + insn_add_dref(insn, to, opoff, type) + +Help on function insn_add_off_drefs in module ida_ua: + +insn_add_off_drefs(*args) -> 'ea_t' + insn_add_off_drefs(insn, x, type, outf) -> ea_t + +Help on function insn_create_stkvar in module ida_ua: + +insn_create_stkvar(*args) -> 'bool' + insn_create_stkvar(insn, x, v, flags) -> bool + +Help on class insn_t in module ida_ua: + +class insn_t(builtins.object) + | Proxy of C++ insn_t class. + | + | Methods defined here: + | + | __get_auxpref__(self, *args) -> 'uint16' + | __get_auxpref__(self) -> uint16 + | + | __get_operand__(self, *args) -> 'op_t *' + | __get_operand__(self, n) -> op_t + | + | __get_ops__(self, *args) -> 'wrapped_array_t< op_t,8 >' + | __get_ops__(self) -> operands_array + | + | __getitem__(self, idx) + | Operands can be accessed directly as indexes + | @return op_t: Returns an operand of type op_t + | + | __init__(self, *args) + | __init__(self) -> insn_t + | + | __iter__(self) + | + | __repr__ = _swig_repr(self) + | + | __set_auxpref__(self, *args) -> 'void' + | __set_auxpref__(self, v) + | + | __swig_destroy__ = delete_insn_t(...) + | delete_insn_t(self) + | + | add_cref(self, *args) -> 'void' + | add_cref(self, to, opoff, type) + | + | add_dref(self, *args) -> 'void' + | add_dref(self, to, opoff, type) + | + | add_off_drefs(self, *args) -> 'ea_t' + | add_off_drefs(self, x, type, outf) -> ea_t + | + | assign(self, *args) -> 'void' + | assign(self, other) + | + | create_op_data(self, *args) -> 'bool' + | create_op_data(self, ea_, opoff, dtype) -> bool + | create_op_data(self, ea_, op) -> bool + | + | create_stkvar(self, *args) -> 'bool' + | create_stkvar(self, x, v, flags_) -> bool + | + | get_canon_feature(self, *args) -> 'uint32' + | get_canon_feature(self) -> uint32 + | + | get_canon_mnem(self, *args) -> 'char const *' + | get_canon_mnem(self) -> char const * + | + | get_next_byte(self, *args) -> 'uint8' + | get_next_byte(self) -> uint8 + | + | get_next_dword(self, *args) -> 'uint32' + | get_next_dword(self) -> uint32 + | + | get_next_qword(self, *args) -> 'uint64' + | get_next_qword(self) -> uint64 + | + | get_next_word(self, *args) -> 'uint16' + | get_next_word(self) -> uint16 + | + | is_64bit(self, *args) -> 'bool' + | is_64bit(self) -> bool + | + | is_canon_insn(self, *args) -> 'bool' + | is_canon_insn(self) -> bool + | + | is_macro(self, *args) -> 'bool' + | is_macro(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Op1 + | + | Op2 + | + | Op3 + | + | Op4 + | + | Op5 + | + | Op6 + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | auxpref + | __get_auxpref__(self) -> uint16 + | + | cs + | insn_t_cs_get(self) -> ea_t + | + | ea + | insn_t_ea_get(self) -> ea_t + | + | flags + | insn_t_flags_get(self) -> int16 + | + | insnpref + | insn_t_insnpref_get(self) -> char + | + | ip + | insn_t_ip_get(self) -> ea_t + | + | itype + | insn_t_itype_get(self) -> uint16 + | + | ops + | __get_ops__(self) -> operands_array + | + | segpref + | insn_t_segpref_get(self) -> char + | + | size + | insn_t_size_get(self) -> uint16 + | + | thisown + | The membership flag + +Help on function insn_t__from_ptrval__ in module ida_ua: + +insn_t__from_ptrval__(*args) -> 'insn_t *' + insn_t__from_ptrval__(ptrval) -> insn_t + +Help on function is_floating_dtype in module ida_ua: + +is_floating_dtype(*args) -> 'bool' + is_floating_dtype(dtype) -> bool + + + Is a floating type operand? + + + @param dtype (C++: op_dtype_t) + +Help on function map_code_ea in module ida_ua: + +map_code_ea(*args) -> 'ea_t' + map_code_ea(insn, addr, opnum) -> ea_t + map_code_ea(insn, op) -> ea_t + + + Map a code address. This function takes into account the segment + translations. + + @param insn: the current instruction (C++: const insn_t &) + @param addr: the referenced address to map (C++: ea_t) + @param opnum: operand number (C++: int) + +Help on function map_data_ea in module ida_ua: + +map_data_ea(*args) -> 'ea_t' + map_data_ea(insn, addr, opnum=-1) -> ea_t + map_data_ea(insn, op) -> ea_t + + + Map a data address. + + @param insn: the current instruction (C++: const insn_t &) + @param addr: the referenced address to map (C++: ea_t) + @param opnum: operand number (C++: int) + +Help on function map_ea in module ida_ua: + +map_ea(*args) -> 'ea_t' + map_ea(insn, op, iscode) -> ea_t + map_ea(insn, addr, opnum, iscode) -> ea_t + +Help on class op_t in module ida_ua: + +class op_t(builtins.object) + | Proxy of C++ op_t class. + | + | Methods defined here: + | + | __get_addr__(self, *args) -> 'ea_t' + | __get_addr__(self) -> ea_t + | + | __get_reg_phrase__(self, *args) -> 'uint16' + | __get_reg_phrase__(self) -> uint16 + | + | __get_specval__(self, *args) -> 'ea_t' + | __get_specval__(self) -> ea_t + | + | __get_value__(self, *args) -> 'ea_t' + | __get_value__(self) -> ea_t + | + | __init__(self, *args) + | __init__(self) -> op_t + | + | __repr__ = _swig_repr(self) + | + | __set_addr__(self, *args) -> 'void' + | __set_addr__(self, v) + | + | __set_reg_phrase__(self, *args) -> 'void' + | __set_reg_phrase__(self, r) + | + | __set_specval__(self, *args) -> 'void' + | __set_specval__(self, v) + | + | __set_value__(self, *args) -> 'void' + | __set_value__(self, v) + | + | __swig_destroy__ = delete_op_t(...) + | delete_op_t(self) + | + | assign(self, *args) -> 'void' + | assign(self, other) + | + | clr_shown(self, *args) -> 'void' + | clr_shown(self) + | + | has_reg(self, r) + | Checks if the operand accesses the given processor register + | + | is_imm(self, *args) -> 'bool' + | is_imm(self, v) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self, r) -> bool + | + | set_shown(self, *args) -> 'void' + | set_shown(self) + | + | shown(self, *args) -> 'bool' + | shown(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | addr + | __get_addr__(self) -> ea_t + | + | dtype + | op_t_dtype_get(self) -> op_dtype_t + | + | flags + | op_t_flags_get(self) -> uchar + | + | n + | op_t_n_get(self) -> uchar + | + | offb + | op_t_offb_get(self) -> char + | + | offo + | op_t_offo_get(self) -> char + | + | phrase + | __get_reg_phrase__(self) -> uint16 + | + | reg + | __get_reg_phrase__(self) -> uint16 + | + | specflag1 + | op_t_specflag1_get(self) -> char + | + | specflag2 + | op_t_specflag2_get(self) -> char + | + | specflag3 + | op_t_specflag3_get(self) -> char + | + | specflag4 + | op_t_specflag4_get(self) -> char + | + | specval + | __get_specval__(self) -> ea_t + | + | thisown + | The membership flag + | + | type + | op_t_type_get(self) -> optype_t + | + | value + | __get_value__(self) -> ea_t + +Help on function op_t__from_ptrval__ in module ida_ua: + +op_t__from_ptrval__(*args) -> 'op_t *' + op_t__from_ptrval__(ptrval) -> op_t + +Help on class operands_array in module ida_ua: + +class operands_array(builtins.object) + | Proxy of C++ wrapped_array_t< op_t,8 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'op_t const &' + | __getitem__(self, i) -> op_t + | + | __init__(self, *args) + | __init__(self, data) -> operands_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_operands_array(...) + | delete_operands_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | operands_array_data_get(self) -> op_t (&)[8] + | + | thisown + | The membership flag + +Help on class outctx_base_t in module ida_ua: + +class outctx_base_t(builtins.object) + | Proxy of C++ outctx_base_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | close_comment(self, *args) -> 'void' + | close_comment(self) + | + | clr_gen_label(self, *args) -> 'void' + | clr_gen_label(self) + | + | display_voids(self, *args) -> 'bool' + | display_voids(self) -> bool + | + | flush_buf(self, *args) -> 'bool' + | flush_buf(self, buf, indent=-1) -> bool + | + | flush_outbuf(self, *args) -> 'bool' + | flush_outbuf(self, indent=-1) -> bool + | + | forbid_annotations(self, *args) -> 'int' + | forbid_annotations(self) -> int + | + | force_code(self, *args) -> 'bool' + | force_code(self) -> bool + | + | gen_block_cmt(self, *args) -> 'bool' + | gen_block_cmt(self, cmt, color) -> bool + | + | gen_border_line(self, *args) -> 'bool' + | gen_border_line(self, solid=False) -> bool + | + | gen_cmt_line(self, *args) -> 'bool' + | gen_cmt_line(self, format) -> bool + | + | gen_collapsed_line(self, *args) -> 'bool' + | gen_collapsed_line(self, format) -> bool + | + | gen_empty_line(self, *args) -> 'bool' + | gen_empty_line(self) -> bool + | + | gen_empty_line_without_annotations(self, *args) -> 'void' + | gen_empty_line_without_annotations(self) + | + | gen_printf(self, *args) -> 'bool' + | gen_printf(self, indent, format) -> bool + | + | gen_xref_lines(self, *args) -> 'bool' + | gen_xref_lines(self) -> bool + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * + | + | init_lines_array(self, *args) -> 'void' + | init_lines_array(self, answers, maxsize) + | + | multiline(self, *args) -> 'bool' + | multiline(self) -> bool + | + | only_main_line(self, *args) -> 'bool' + | only_main_line(self) -> bool + | + | out_addr_tag(self, *args) -> 'void' + | out_addr_tag(self, ea) + | + | out_btoa(self, *args) -> 'void' + | out_btoa(self, Word, radix=0) + | + | out_char(self, *args) -> 'void' + | out_char(self, c) + | + | out_chars(self, *args) -> 'void' + | out_chars(self, c, n) + | + | out_colored_register_line(self, *args) -> 'void' + | out_colored_register_line(self, str) + | + | out_keyword(self, *args) -> 'void' + | out_keyword(self, str) + | + | out_line(self, *args) -> 'void' + | out_line(self, str, color=0) + | + | out_long(self, *args) -> 'void' + | out_long(self, v, radix) + | + | out_name_expr(self, *args) -> 'bool' + | out_name_expr(self, x, ea, off=BADADDR) -> bool + | + | out_printf(self, *args) -> 'void' + | out_printf(self, format) + | + | out_register(self, *args) -> 'void' + | out_register(self, str) + | + | out_spaces(self, *args) -> 'void' + | out_spaces(self, len) + | + | out_symbol(self, *args) -> 'void' + | out_symbol(self, c) + | + | out_tagoff(self, *args) -> 'void' + | out_tagoff(self, tag) + | + | out_tagon(self, *args) -> 'void' + | out_tagon(self, tag) + | + | out_value(self, *args) -> 'flags_t' + | out_value(self, x, outf=0) -> flags_t + | + | print_label_now(self, *args) -> 'bool' + | print_label_now(self) -> bool + | + | restore_ctxflags(self, *args) -> 'void' + | restore_ctxflags(self, saved_flags) + | + | retrieve_cmt(self, *args) -> 'ssize_t' + | retrieve_cmt(self) -> ssize_t + | + | retrieve_name(self, *args) -> 'ssize_t' + | retrieve_name(self, arg2, arg3) -> ssize_t + | + | set_comment_addr(self, *args) -> 'void' + | set_comment_addr(self, ea) + | + | set_dlbind_opnd(self, *args) -> 'void' + | set_dlbind_opnd(self) + | + | set_gen_cmt(self, *args) -> 'void' + | set_gen_cmt(self, on=True) + | + | set_gen_demangled_label(self, *args) -> 'void' + | set_gen_demangled_label(self) + | + | set_gen_label(self, *args) -> 'void' + | set_gen_label(self) + | + | set_gen_xrefs(self, *args) -> 'void' + | set_gen_xrefs(self, on=True) + | + | setup_outctx(self, *args) -> 'void' + | setup_outctx(self, prefix, makeline_flags) + | + | stack_view(self, *args) -> 'bool' + | stack_view(self) -> bool + | + | term_outctx(self, *args) -> 'int' + | term_outctx(self, prefix=None) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | default_lnnum + | outctx_base_t_default_lnnum_get(self) -> int + | + | insn_ea + | outctx_base_t_insn_ea_get(self) -> ea_t + | + | outbuf + | outctx_base_t_outbuf_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on function outctx_base_t__from_ptrval__ in module ida_ua: + +outctx_base_t__from_ptrval__(*args) -> 'outctx_base_t *' + outctx_base_t__from_ptrval__(ptrval) -> outctx_base_t + +Help on class outctx_t in module ida_ua: + +class outctx_t(outctx_base_t) + | Proxy of C++ outctx_t class. + | + | Method resolution order: + | outctx_t + | outctx_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | gen_func_footer(self, *args) -> 'void' + | gen_func_footer(self, pfn) + | + | gen_func_header(self, *args) -> 'void' + | gen_func_header(self, pfn) + | + | gen_header(self, *args) -> 'void' + | gen_header(self, flags=((1 << 0)|(1 << 1)), proc_name=None, proc_flavour=None) + | + | gen_header_extra(self, *args) -> 'void' + | gen_header_extra(self) + | + | gen_xref_lines(self, *args) -> 'bool' + | gen_xref_lines(self) -> bool + | + | out_custom_mnem(self, *args) -> 'void' + | out_custom_mnem(self, mnem, width=8, postfix=None) + | + | out_data(self, *args) -> 'void' + | out_data(self, analyze_only) + | + | out_immchar_cmts(self, *args) -> 'void' + | out_immchar_cmts(self) + | + | out_mnem(self, *args) -> 'void' + | out_mnem(self, width=8, postfix=None) + | + | out_mnemonic(self, *args) -> 'void' + | out_mnemonic(self) + | + | out_one_operand(self, *args) -> 'bool' + | out_one_operand(self, n) -> bool + | + | out_specea(self, *args) -> 'bool' + | out_specea(self, segtype) -> bool + | + | retrieve_cmt(self, *args) -> 'ssize_t' + | retrieve_cmt(self) -> ssize_t + | + | retrieve_name(self, *args) -> 'ssize_t' + | retrieve_name(self, arg2, arg3) -> ssize_t + | + | set_bin_state(self, *args) -> 'void' + | set_bin_state(self, value) + | + | setup_outctx(self, *args) -> 'void' + | setup_outctx(self, prefix, flags) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bin_ea + | outctx_t_bin_ea_get(self) -> ea_t + | + | bin_state + | outctx_t_bin_state_get(self) -> char + | + | bin_width + | outctx_t_bin_width_get(self) -> int + | + | curlabel + | outctx_t_curlabel_get(self) -> qstring * + | + | gl_bpsize + | outctx_t_gl_bpsize_get(self) -> int + | + | insn + | outctx_t_insn_get(self) -> insn_t + | + | thisown + | The membership flag + | + | wif + | outctx_t_wif_get(self) -> printop_t + | + | ---------------------------------------------------------------------- + | Methods inherited from outctx_base_t: + | + | close_comment(self, *args) -> 'void' + | close_comment(self) + | + | clr_gen_label(self, *args) -> 'void' + | clr_gen_label(self) + | + | display_voids(self, *args) -> 'bool' + | display_voids(self) -> bool + | + | flush_buf(self, *args) -> 'bool' + | flush_buf(self, buf, indent=-1) -> bool + | + | flush_outbuf(self, *args) -> 'bool' + | flush_outbuf(self, indent=-1) -> bool + | + | forbid_annotations(self, *args) -> 'int' + | forbid_annotations(self) -> int + | + | force_code(self, *args) -> 'bool' + | force_code(self) -> bool + | + | gen_block_cmt(self, *args) -> 'bool' + | gen_block_cmt(self, cmt, color) -> bool + | + | gen_border_line(self, *args) -> 'bool' + | gen_border_line(self, solid=False) -> bool + | + | gen_cmt_line(self, *args) -> 'bool' + | gen_cmt_line(self, format) -> bool + | + | gen_collapsed_line(self, *args) -> 'bool' + | gen_collapsed_line(self, format) -> bool + | + | gen_empty_line(self, *args) -> 'bool' + | gen_empty_line(self) -> bool + | + | gen_empty_line_without_annotations(self, *args) -> 'void' + | gen_empty_line_without_annotations(self) + | + | gen_printf(self, *args) -> 'bool' + | gen_printf(self, indent, format) -> bool + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * + | + | init_lines_array(self, *args) -> 'void' + | init_lines_array(self, answers, maxsize) + | + | multiline(self, *args) -> 'bool' + | multiline(self) -> bool + | + | only_main_line(self, *args) -> 'bool' + | only_main_line(self) -> bool + | + | out_addr_tag(self, *args) -> 'void' + | out_addr_tag(self, ea) + | + | out_btoa(self, *args) -> 'void' + | out_btoa(self, Word, radix=0) + | + | out_char(self, *args) -> 'void' + | out_char(self, c) + | + | out_chars(self, *args) -> 'void' + | out_chars(self, c, n) + | + | out_colored_register_line(self, *args) -> 'void' + | out_colored_register_line(self, str) + | + | out_keyword(self, *args) -> 'void' + | out_keyword(self, str) + | + | out_line(self, *args) -> 'void' + | out_line(self, str, color=0) + | + | out_long(self, *args) -> 'void' + | out_long(self, v, radix) + | + | out_name_expr(self, *args) -> 'bool' + | out_name_expr(self, x, ea, off=BADADDR) -> bool + | + | out_printf(self, *args) -> 'void' + | out_printf(self, format) + | + | out_register(self, *args) -> 'void' + | out_register(self, str) + | + | out_spaces(self, *args) -> 'void' + | out_spaces(self, len) + | + | out_symbol(self, *args) -> 'void' + | out_symbol(self, c) + | + | out_tagoff(self, *args) -> 'void' + | out_tagoff(self, tag) + | + | out_tagon(self, *args) -> 'void' + | out_tagon(self, tag) + | + | out_value(self, *args) -> 'flags_t' + | out_value(self, x, outf=0) -> flags_t + | + | print_label_now(self, *args) -> 'bool' + | print_label_now(self) -> bool + | + | restore_ctxflags(self, *args) -> 'void' + | restore_ctxflags(self, saved_flags) + | + | set_comment_addr(self, *args) -> 'void' + | set_comment_addr(self, ea) + | + | set_dlbind_opnd(self, *args) -> 'void' + | set_dlbind_opnd(self) + | + | set_gen_cmt(self, *args) -> 'void' + | set_gen_cmt(self, on=True) + | + | set_gen_demangled_label(self, *args) -> 'void' + | set_gen_demangled_label(self) + | + | set_gen_label(self, *args) -> 'void' + | set_gen_label(self) + | + | set_gen_xrefs(self, *args) -> 'void' + | set_gen_xrefs(self, on=True) + | + | stack_view(self, *args) -> 'bool' + | stack_view(self) -> bool + | + | term_outctx(self, *args) -> 'int' + | term_outctx(self, prefix=None) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from outctx_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | default_lnnum + | outctx_base_t_default_lnnum_get(self) -> int + | + | insn_ea + | outctx_base_t_insn_ea_get(self) -> ea_t + | + | outbuf + | outctx_base_t_outbuf_get(self) -> qstring * + +Help on function outctx_t__from_ptrval__ in module ida_ua: + +outctx_t__from_ptrval__(*args) -> 'outctx_t *' + outctx_t__from_ptrval__(ptrval) -> outctx_t + +Help on function print_insn_mnem in module ida_ua: + +print_insn_mnem(*args) -> 'qstring *' + print_insn_mnem(ea) -> str + + + Print instruction mnemonics. + + @param ea: linear address of the instruction (C++: ea_t) + @return: success + +Help on function print_operand in module ida_ua: + +print_operand(*args) -> 'qstring *' + print_operand(ea, n, getn_flags=0, newtype=None) -> str + + + Generate text representation for operand #n. This function will + generate the text representation of the specified operand (includes + color codes.) + + @param ea: the item address (instruction or data) (C++: ea_t) + @param n: operand number (0,1,2...). meaningful only for instructions + (C++: int) + @param getn_flags (C++: int) + @param newtype: if specified, print the operand using the specified + type (C++: struct printop_t *) + @return: success + +=== ida_ua EPYDOC INJECTIONS === +ida_ua.FCBF_CONT +""" +don't stop on decoding, or any other kind of error +""" + +ida_ua.FCBF_DELIM +""" +add the 'ash'-specified delimiters around the generated data. Note: if +those are not defined and the INFFL_ALLASM is not set, +'format_charlit()' will return an error +""" + +ida_ua.FCBF_ERR_REPL +""" +of a hex representation of the problematic byte + +in case of an error, use a CP_REPLCHAR instead +""" + +ida_ua.FCBF_FF_LIT +""" +in case of codepoints == 0xFF, use it as-is (i.e., LATIN SMALL LETTER +Y WITH DIAERESIS) If both this, and FCBF_REPL are specified, this will +take precedence +""" + +ida_ua.INSN_64BIT +""" +belongs to 64bit segment? +""" + +ida_ua.INSN_MACRO +""" +macro instruction +""" + +ida_ua.INSN_MODMAC +""" +may modify the database to make room for the macro insn +""" + +ida_ua.OF_NO_BASE_DISP +""" +base displacement doesn't exist. meaningful only for 'o_displ' type. +if set, base displacement ( 'op_t::addr' ) doesn't exist. +""" + +ida_ua.OF_NUMBER +""" +the operand can be converted to a number only +""" + +ida_ua.OF_OUTER_DISP +""" +outer displacement exists. meaningful only for 'o_displ' type. if set, +outer displacement ( 'op_t::value' ) exists. +""" + +ida_ua.OF_SHOW +""" +should the operand be displayed? +""" + +ida_ua.OOFS_IFSIGN +""" +output sign if needed +""" + +ida_ua.OOFS_NEEDSIGN +""" +always out sign (+-) +""" + +ida_ua.OOFS_NOSIGN +""" +don't output sign, forbid the user to change the sign +""" + +ida_ua.OOFW_16 +""" +16 bit width +""" + +ida_ua.OOFW_24 +""" +24 bit width +""" + +ida_ua.OOFW_32 +""" +32 bit width +""" + +ida_ua.OOFW_64 +""" +64 bit width +""" + +ida_ua.OOFW_8 +""" +8 bit width +""" + +ida_ua.OOFW_IMM +""" +take from x.dtype +""" + +ida_ua.OOF_ADDR +""" +output x.addr, otherwise x.value +""" + +ida_ua.OOF_ANYSERIAL +""" +if enum: select first available serial +""" + +ida_ua.OOF_NOBNOT +""" +prohibit use of binary not +""" + +ida_ua.OOF_NUMBER +""" +always as a number +""" + +ida_ua.OOF_OUTER +""" +output outer operand +""" + +ida_ua.OOF_SIGNED +""" +output as signed if < 0 +""" + +ida_ua.OOF_SIGNMASK +""" +sign symbol (+/-) output +""" + +ida_ua.OOF_SPACES +""" +currently works only for floating point numbers + +do not suppress leading spaces +""" + +ida_ua.OOF_WIDTHMASK +""" +width of value in bits +""" + +ida_ua.OOF_ZSTROFF +""" +meaningful only if is_stroff(uFlag) append a struct field name if the +field offset is zero? if 'AFL_ZSTROFF' is set, then this flag is +ignored. +""" + +ida_ua.PACK_FORM_DEF +""" +(! 'o_reg' + 'dt_packreal' ) + +packed factor defined. +""" + +ida_ua.dt_bitfild +""" +bit field (mc680x0) +""" + +ida_ua.dt_byte +""" +8 bit integer +""" + +ida_ua.dt_byte16 +""" +128 bit integer +""" + +ida_ua.dt_byte32 +""" +256 bit integer +""" + +ida_ua.dt_byte64 +""" +512 bit integer +""" + +ida_ua.dt_code +""" +ptr to code (not used?) +""" + +ida_ua.dt_double +""" +8 byte floating point +""" + +ida_ua.dt_dword +""" +32 bit integer +""" + +ida_ua.dt_float +""" +4 byte floating point +""" + +ida_ua.dt_fword +""" +48 bit +""" + +ida_ua.dt_half +""" +2-byte floating point +""" + +ida_ua.dt_ldbl +""" +long double (which may be different from tbyte) +""" + +ida_ua.dt_packreal +""" +packed real format for mc68040 +""" + +ida_ua.dt_qword +""" +64 bit integer +""" + +ida_ua.dt_string +""" +pointer to asciiz string +""" + +ida_ua.dt_tbyte +""" +variable size (\\ph{tbyte_size}) floating point +""" + +ida_ua.dt_unicode +""" +pointer to unicode string +""" + +ida_ua.dt_void +""" +none +""" + +ida_ua.dt_word +""" +16 bit integer +""" +=== ida_ua EPYDOC INJECTIONS END === +Help on function add_cref in module ida_xref: + +add_cref(*args) -> 'bool' + add_cref(frm, to, type) -> bool + + + Create a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param type: cross-reference type (C++: cref_t) + @return: success + +Help on function add_dref in module ida_xref: + +add_dref(*args) -> 'bool' + add_dref(frm, to, type) -> bool + + + Create a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + @param type: cross-reference type (C++: dref_t) + @return: success (may fail if user-defined xref exists from->to) + +Help on function calc_switch_cases in module ida_xref: + +calc_switch_cases(*args) -> 'cases_and_targets_t *' + calc_switch_cases(ea, si) -> cases_and_targets_t + + + Get information about a switch's cases. + + The returned information can be used as follows: + + for idx in range(len(results.cases)): + cur_case = results.cases[idx] + for cidx in range(len(cur_case)): + print("case: %d" % cur_case[cidx]) + print(" goto 0x%x" % results.targets[idx]) + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: a structure with 2 members: 'cases', and 'targets'. + +Help on class cases_and_targets_t in module ida_xref: + +class cases_and_targets_t(builtins.object) + | Proxy of C++ cases_and_targets_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cases_and_targets_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cases_and_targets_t(...) + | delete_cases_and_targets_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cases + | cases_and_targets_t_cases_get(self) -> casevec_t + | + | targets + | cases_and_targets_t_targets_get(self) -> eavec_t * + | + | thisown + | The membership flag + +Help on class casevec_t in module ida_xref: + +class casevec_t(builtins.object) + | Proxy of C++ qvector< qvector< sval_t > > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'qvector< signed-ea-like-numeric-type > const &'↗ + | __getitem__(self, i) -> qvector< signed-ea-like-numeric-type > const &↗ + | + | __init__(self, *args) + | __init__(self) -> casevec_t + | __init__(self, x) -> casevec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_casevec_t(...) + | delete_casevec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'qvector< signed-ea-like-numeric-type > &'↗ + | + | at = __getitem__(self, *args) -> 'qvector< signed-ea-like-numeric-type > const &'↗ + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< qvector< signed-ea-like-numeric-type > >::const_iterator'↗ + | begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< qvector< signed-ea-like-numeric-type > >::const_iterator'↗ + | end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | erase(self, *args) -> 'qvector< qvector< signed-ea-like-numeric-type > >::iterator'↗ + | erase(self, it) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | erase(self, first, last) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | + | extract(self, *args) -> 'qvector< signed-ea-like-numeric-type > *'↗ + | extract(self) -> qvector< signed-ea-like-numeric-type > *↗ + | + | find(self, *args) -> 'qvector< qvector< signed-ea-like-numeric-type > >::const_iterator'↗ + | find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=qvector< signed-ea-like-numeric-type >())↗ + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< qvector< signed-ea-like-numeric-type > >::iterator'↗ + | insert(self, it, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'qvector< signed-ea-like-numeric-type > &'↗ + | push_back(self, x) + | push_back(self) -> qvector< signed-ea-like-numeric-type > &↗ + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function create_switch_table in module ida_xref: + +create_switch_table(*args) -> 'bool' + create_switch_table(ea, si) -> bool + + + Create switch table from the switch information + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: Boolean + +Help on function create_switch_xrefs in module ida_xref: + +create_switch_xrefs(*args) -> 'bool' + create_switch_xrefs(ea, si) -> bool + + + This function creates xrefs from the indirect jump. + + Usually there is no need to call this function directly because the kernel + will call it for switch tables + + Note: Custom switch information are not supported yet. + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: Boolean + +Help on function del_cref in module ida_xref: + +del_cref(*args) -> 'int' + del_cref(frm, to, expand) -> int + + + Delete a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param expand: policy to delete the referenced instruction 1: plan + to delete the referenced instruction if it has no more + references. 0: don't delete the referenced + instruction even if no more cross-references point to + it (C++: bool) + +Help on function del_dref in module ida_xref: + +del_dref(*args) -> 'void' + del_dref(frm, to) + + + Delete a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + +Help on function delete_switch_table in module ida_xref: + +delete_switch_table(*args) -> 'void' + delete_switch_table(jump_ea, si) + +Help on function get_first_cref_from in module ida_xref: + +get_first_cref_from(*args) -> 'ea_t' + get_first_cref_from(frm) -> ea_t + + + Get first instruction referenced from the specified instruction. If + the specified instruction passes execution to the next instruction + then the next instruction is returned. Otherwise the lowest referenced + address is returned (remember that xrefs are kept sorted!). + + @return: first referenced address. The lastXR variable contains type + of the reference. If the specified instruction doesn't + reference to other instructions then returns BADADDR . + +Help on function get_first_cref_to in module ida_xref: + +get_first_cref_to(*args) -> 'ea_t' + get_first_cref_to(to) -> ea_t + + + Get first instruction referencing to the specified instruction. If the + specified instruction may be executed immediately after its previous + instruction then the previous instruction is returned. Otherwise the + lowest referencing address is returned. (remember that xrefs are kept + sorted!). + + @param to: linear address of referenced instruction (C++: ea_t) + @return: linear address of the first referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_first_dref_from in module ida_xref: + +get_first_dref_from(*args) -> 'ea_t' + get_first_dref_from(frm) -> ea_t + + + Get first data referenced from the specified address. + + @return: linear address of first (lowest) data referenced from the + specified address. The lastXR variable contains type of the + reference. Return BADADDR if the specified instruction/data + doesn't reference to anything. + +Help on function get_first_dref_to in module ida_xref: + +get_first_dref_to(*args) -> 'ea_t' + get_first_dref_to(to) -> ea_t + + + Get address of instruction/data referencing to the specified data. + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_first_fcref_from in module ida_xref: + +get_first_fcref_from(*args) -> 'ea_t' + get_first_fcref_from(frm) -> ea_t + +Help on function get_first_fcref_to in module ida_xref: + +get_first_fcref_to(*args) -> 'ea_t' + get_first_fcref_to(to) -> ea_t + +Help on function get_next_cref_from in module ida_xref: + +get_next_cref_from(*args) -> 'ea_t' + get_next_cref_from(frm, current) -> ea_t + + + Get next instruction referenced from the specified instruction. + + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_from() or + previous call to get_next_cref_from() functions. + (C++: ea_t) + @return: next referenced address or BADADDR . The lastXR variable + contains type of the reference. + +Help on function get_next_cref_to in module ida_xref: + +get_next_cref_to(*args) -> 'ea_t' + get_next_cref_to(to, current) -> ea_t + + + Get next instruction referencing to the specified instruction. + + @param to: linear address of referenced instruction (C++: ea_t) + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_to() or previous + call to get_next_cref_to() functions. (C++: ea_t) + @return: linear address of the next referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_next_dref_from in module ida_xref: + +get_next_dref_from(*args) -> 'ea_t' + get_next_dref_from(frm, current) -> ea_t + + + Get next data referenced from the specified address. + + @param current: linear address of current referenced data. This value + is returned by get_first_dref_from() or previous + call to get_next_dref_from() functions. (C++: ea_t) + @return: linear address of next data or BADADDR . The lastXR + variable contains type of the reference + +Help on function get_next_dref_to in module ida_xref: + +get_next_dref_to(*args) -> 'ea_t' + get_next_dref_to(to, current) -> ea_t + + + Get address of instruction/data referencing to the specified data + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @param current: current linear address. This value is returned by + get_first_dref_to() or previous call to + get_next_dref_to() functions. (C++: ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_next_fcref_from in module ida_xref: + +get_next_fcref_from(*args) -> 'ea_t' + get_next_fcref_from(frm, current) -> ea_t + +Help on function get_next_fcref_to in module ida_xref: + +get_next_fcref_to(*args) -> 'ea_t' + get_next_fcref_to(to, current) -> ea_t + +Help on function has_external_refs in module ida_xref: + +has_external_refs(*args) -> 'bool' + has_external_refs(pfn, ea) -> bool + + + Has a location external to the function references? + + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on class xrefblk_t in module ida_xref: + +class xrefblk_t(builtins.object) + | Proxy of C++ xrefblk_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> xrefblk_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_xrefblk_t(...) + | delete_xrefblk_t(self) + | + | first_from(self, *args) -> 'bool' + | first_from(self, _from, flags) -> bool + | + | first_to(self, *args) -> 'bool' + | first_to(self, _to, flags) -> bool + | + | next_from(self, *args) -> 'bool' + | next_from(self) -> bool + | next_from(self, _from, _to, flags) -> bool + | + | next_to(self, *args) -> 'bool' + | next_to(self) -> bool + | next_to(self, _from, _to, flags) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | frm + | xrefblk_t_frm_get(self) -> ea_t + | + | iscode + | xrefblk_t_iscode_get(self) -> uchar + | + | thisown + | The membership flag + | + | to + | xrefblk_t_to_get(self) -> ea_t + | + | type + | xrefblk_t_type_get(self) -> uchar + | + | user + | xrefblk_t_user_get(self) -> uchar + +Help on function xrefchar in module ida_xref: + +xrefchar(*args) -> 'char' + xrefchar(xrtype) -> char + + + Get character describing the xref type. + + @param xrtype: combination of Cross-Reference type flags and a + cref_t of dref_t value (C++: char) + +=== ida_xref EPYDOC INJECTIONS === +ida_xref.XREF_ALL +""" +return all references +""" + +ida_xref.XREF_BASE +""" +Reference to the base part of an offset. +""" + +ida_xref.XREF_DATA +""" +return data references only +""" + +ida_xref.XREF_FAR +""" +don't return ordinary flow xrefs +""" + +ida_xref.XREF_MASK +""" +Mask to get xref type. +""" + +ida_xref.XREF_PASTEND +""" +Reference is past item. This bit may be passed to 'add_dref()' +functions but it won't be saved in the database. It will prevent the +destruction of eventual alignment directives. +""" + +ida_xref.XREF_TAIL +""" +Reference to tail byte in extrn symbols. +""" + +ida_xref.XREF_USER +""" +User specified xref. This xref will not be deleted by IDA. This bit +should be combined with the existing xref types ( 'cref_t' & 'dref_t' +) Cannot be used for fl_F xrefs +""" +=== ida_xref EPYDOC INJECTIONS END === +Help on function AddSeg in module idc: + +AddSeg(startea, endea, base, use32, align, comb) + +Help on function AutoMark in module idc: + +AutoMark(ea, qtype) + Plan to analyze an address + +Help on class DeprecatedIDCError in module idc: + +class DeprecatedIDCError(builtins.Exception) + | Exception for deprecated function calls + | + | Method resolution order: + | DeprecatedIDCError + | builtins.Exception + | builtins.BaseException + | builtins.object + | + | Data descriptors defined here: + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Methods inherited from builtins.Exception: + | + | __init__(self, /, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __new__(*args, **kwargs) from builtins.type + | Create and return a new object. See help(type) for accurate signature. + | + | ---------------------------------------------------------------------- + | Methods inherited from builtins.BaseException: + | + | __delattr__(self, name, /) + | Implement delattr(self, name). + | + | __getattribute__(self, name, /) + | Return getattr(self, name). + | + | __reduce__(...) + | helper for pickle + | + | __repr__(self, /) + | Return repr(self). + | + | __setattr__(self, name, value, /) + | Implement setattr(self, name, value). + | + | __setstate__(...) + | + | __str__(self, /) + | Return str(self). + | + | with_traceback(...) + | Exception.with_traceback(tb) -- + | set self.__traceback__ to tb and return self. + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from builtins.BaseException: + | + | __cause__ + | exception cause + | + | __context__ + | exception context + | + | __dict__ + | + | __suppress_context__ + | + | __traceback__ + | + | args + +Help on function EVAL_FAILURE in module idc: + +EVAL_FAILURE(code) + Check the result of eval_idc() for evaluation failures + + @param code: result of eval_idc() + + @return: True if there was an evaluation error + +Help on function get_cmt in module ida_bytes: + +get_cmt(*args) -> 'qstring *' + get_cmt(ea, rptble) -> str + + + Get an indented comment. + + @param ea: linear address. may point to tail byte, the function will + find start of the item (C++: ea_t) + @param rptble: get repeatable comment? (C++: bool) + @return: size of comment or -1 + +Help on function GetDisasm in module idc: + +GetDisasm(ea) + Get disassembly line + + @param ea: linear address of instruction + + @return: "" - could not decode instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function GetDouble in module idc: + +GetDouble(ea) + Get value of a floating point number (8 bytes) + This function assumes number stored using IEEE format + and in the same endianness as integers. + + @param ea: linear address + + @return: double + +Help on function GetFloat in module idc: + +GetFloat(ea) + Get value of a floating point number (4 bytes) + This function assumes number stored using IEEE format + and in the same endianness as integers. + + @param ea: linear address + + @return: float + +Help on function GetLocalType in module idc: + +GetLocalType(ordinal, flags) + Retrieve a local type declaration + @param flags: any of PRTYPE_* constants + @return: local type as a C declaration or "" + +Help on function LoadFile in module idc: + +LoadFile(filepath, pos, ea, size) + Load file into IDA database + + @param filepath: path to input file + @param pos: position in the file + @param ea: linear address to load + @param size: number of bytes to load + + @return: 0 - error, 1 - ok + +Help on function MakeVar in module idc: + +MakeVar(ea) + Mark the location as "variable" + + @param ea: address to mark + + @return: None + + @note: All that IDA does is to mark the location as "variable". + Nothing else, no additional analysis is performed. + This function may disappear in the future. + +Help on function SaveFile in module idc: + +SaveFile(filepath, pos, ea, size) + Save from IDA database to file + + @param filepath: path to output file + @param pos: position in the file + @param ea: linear address to save from + @param size: number of bytes to save + + @return: 0 - error, 1 - ok + +Help on function SetPrcsr in module idc: + +SetPrcsr(processor) + +Help on function SetType in module idc: + +SetType(ea, newtype) + Set type of function/variable + + @param ea: the address of the object + @param newtype: the type string in C declaration form. + Must contain the closing ';' + if specified as an empty string, then the + item associated with 'ea' will be deleted. + + @return: 1-ok, 0-failed. + +Help on function SizeOf in module idc: + +SizeOf(typestr) + Returns the size of the type. It is equivalent to IDC's sizeof(). + Use name, tp, fld = idc.parse_decl() ; SizeOf(tp) to retrieve the size + @return: -1 if typestring is not valid otherwise the size of the type + +Help on function _IDC_GetAttr in module idc: + +_IDC_GetAttr(obj, attrmap, attroffs) + Internal function to generically get object attributes + Do not use unless you know what you are doing + +Help on function _IDC_SetAttr in module idc: + +_IDC_SetAttr(obj, attrmap, attroffs, value) + Internal function to generically set object attributes + Do not use unless you know what you are doing + +Help on function __DbgValue in module idc: + +__DbgValue(ea, len) + +Help on function __GetArrayById in module idc: + +__GetArrayById(array_id) + Get an array, by its ID. + + This (internal) wrapper around 'idaaip.netnode(array_id)' + will ensure a certain safety around the retrieval of + arrays (by catching quite unexpect[ed|able] exceptions, + and making sure we don't create & use `transient' netnodes). + + @param array_id: A positive, valid array ID. + +Help on class __dummy_netnode in module idc: + +class __dummy_netnode(builtins.object) + | Implements, in an "always failing" fashion, the + | netnode functions that are necessary for the + | array-related functions. + | + | The sole purpose of this singleton class is to + | serve as a placeholder for netnode-manipulating + | functions, that don't want to each have to perform + | checks on the existence of the netnode. + | (..in other words: it avoids a bunch of if/else's). + | + | See __GetArrayById() for more info. + | + | Methods defined here: + | + | altdel(self, *args) + | + | altfirst(self, *args) + | + | altlast(self, *args) + | + | altnext(self, *args) + | + | altprev(self, *args) + | + | altset(self, *args) + | + | altval(self, *args) + | + | hashdel(self, *args) + | + | hashfirst(self, *args) + | + | hashlast(self, *args) + | + | hashnext(self, *args) + | + | hashprev(self, *args) + | + | hashset(self, *args) + | + | hashset_buf(self, *args) + | + | hashset_idx(self, *args) + | + | hashstr(self, *args) + | + | hashstr_buf(self, *args) + | + | hashval(self, *args) + | + | hashval_long(self, *args) + | + | index(self, *args) + | + | kill(self, *args) + | + | rename(self, *args) + | + | supdel(self, *args) + | + | supfirst(self, *args) + | + | suplast(self, *args) + | + | supnext(self, *args) + | + | supprev(self, *args) + | + | supset(self, *args) + | + | supval(self, *args) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | instance = + +Help on function __l2m1 in module idc: + +__l2m1(v) + Long to minus 1: If the 'v' appears to be the + 'signed long' version of -1, then return -1. + Otherwise, return 'v'. + +Help on function __warn_once_deprecated_proto_confusion in module idc: + +__warn_once_deprecated_proto_confusion(what, alternative) + +Help on function _get_modules in module idc: + +_get_modules() + INTERNAL: Enumerate process modules + +Help on function add_auto_stkpnt in module idc: + +add_auto_stkpnt(func_ea, ea, delta) + Add automatical SP register change point + @param func_ea: function start + @param ea: linear address where SP changes + usually this is the end of the instruction which + modifies the stack pointer (insn.ea+insn.size) + @param delta: difference between old and new values of SP + @return: 1-ok, 0-failed + +Help on function add_bpt in module ida_dbg: + +add_bpt(*args) -> 'bool' + add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + add_bpt(bpt) -> bool + + + Add a new breakpoint in the debugged process. \sq{Type, Synchronous + function - available as request, Notification, none (synchronous + function)}Only one breakpoint can exist at a given address. + + @param ea: any address in the process memory space. Depending on the + architecture, hardware breakpoints always be setup at + random address. For example, on x86, hardware breakpoints + should be aligned depending on their size. Moreover, on the + x86 architecture, it is impossible to setup more than 4 + hardware breakpoints. (C++: ea_t) + @param size: size of the breakpoint (irrelevant for software + breakpoints): As for the address, hardware breakpoints + can't always be setup with random size. (C++: asize_t) + @param type: type of the breakpoint ( BPT_SOFT for software + breakpoint) special case BPT_DEFAULT ( BPT_SOFT | + BPT_EXEC ): try to add instruction breakpoint of the + appropriate type as follows: software bpt if supported, + hwbpt otherwise (C++: bpttype_t) + +Help on function add_cref in module ida_xref: + +add_cref(*args) -> 'bool' + add_cref(frm, to, type) -> bool + + + Create a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param type: cross-reference type (C++: cref_t) + @return: success + +Help on function add_default_til in module idc: + +add_default_til(name) + Load a type library + + @param name: name of type library. + @return: 1-ok, 0-failed. + +Help on function add_dref in module ida_xref: + +add_dref(*args) -> 'bool' + add_dref(frm, to, type) -> bool + + + Create a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + @param type: cross-reference type (C++: dref_t) + @return: success (may fail if user-defined xref exists from->to) + +Help on function add_entry in module ida_entry: + +add_entry(*args) -> 'bool' + add_entry(ord, ea, name, makecode, flags=0) -> bool + + + Add an entry point to the list of entry points. + + @param ord: ordinal number if ordinal number is equal to 'ea' then + ordinal is not used (C++: uval_t) + @param ea: linear address (C++: ea_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to the regular + comment. If name == NULL, then the old name will be + retained. (C++: const char *) + @param makecode: should the kernel convert bytes at the entry point to + instruction(s) (C++: bool) + @param flags: See AEF_* (C++: int) + @return: success (currently always true) + +Help on function add_enum in module idc: + +add_enum(idx, name, flag) + Add a new enum type + + @param idx: serial number of the new enum. + If another enum with the same serial number + exists, then all enums with serial + numbers >= the specified idx get their + serial numbers incremented (in other words, + the new enum is put in the middle of the list of enums). + + If idx >= get_enum_qty() or idx == idaapi.BADNODE + then the new enum is created at the end of + the list of enums. + + @param name: name of the enum. + @param flag: flags for representation of numeric constants + in the definition of enum. + + @return: id of new enum or BADADDR + +Help on function add_enum_member in module idc: + +add_enum_member(enum_id, name, value, bmask) + Add a member of enum - a symbolic constant + + @param enum_id: id of enum + @param name: name of symbolic constant. Must be unique in the program. + @param value: value of symbolic constant. + @param bmask: bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + all bits set in value should be set in bmask too + + @return: 0-ok, otherwise error code (one of ENUM_MEMBER_ERROR_*) + +Help on function add_func in module ida_funcs: + +add_func(*args) -> 'bool' + add_func(ea1, ea2=BADADDR) -> bool + + + Add a new function. If the function end address is 'BADADDR' , then + IDA will try to determine the function bounds by calling + find_func_bounds(..., 'FIND_FUNC_DEFINE' ). + + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @return: success + +Help on function add_hidden_range in module ida_bytes: + +add_hidden_range(*args) -> 'bool' + add_hidden_range(ea1, ea2, description, header, footer, color) -> bool + + + Mark a range of addresses as hidden. The range will be created in the + invisible state with the default color + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (C++: ea_t) + @param description: range parameters (C++: const char *) + @param header: range parameters (C++: const char *) + @param footer: range parameters (C++: const char *) + @param color (C++: bgcolor_t) + @return: success + +Help on function add_idc_hotkey in module ida_kernwin: + +add_idc_hotkey(*args) -> 'int' + add_idc_hotkey(hotkey, idcfunc) -> int + + + Add hotkey for IDC function ( 'ui_add_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + @param idcfunc: IDC function name (C++: const char *) + @return: IDC hotkey error codes + +Help on function add_segm_ex in module idc: + +add_segm_ex(startea, endea, base, use32, align, comb, flags) + Create a new segment + + @param startea: linear address of the start of the segment + @param endea: linear address of the end of the segment + this address will not belong to the segment + 'endea' should be higher than 'startea' + @param base: base paragraph or selector of the segment. + a paragraph is 16byte memory chunk. + If a selector value is specified, the selector should be + already defined. + @param use32: 0: 16bit segment, 1: 32bit segment, 2: 64bit segment + @param align: segment alignment. see below for alignment values + @param comb: segment combination. see below for combination values. + @param flags: combination of ADDSEG_... bits + + @return: 0-failed, 1-ok + +Help on function add_sourcefile in module ida_lines: + +add_sourcefile(*args) -> 'bool' + add_sourcefile(ea1, ea2, filename) -> bool + + + Mark a range of address as belonging to a source file. An address + range may belong only to one source file. A source file may be + represented by several address ranges. + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (excluded) + (C++: ea_t) + @param filename: name of source file. (C++: const char *) + @return: success + +Help on function add_struc in module idc: + +add_struc(index, name, is_union) + Define a new structure type + + @param index: index of new structure type + If another structure has the specified index, + then index of that structure and all other + structures will be incremented, freeing the specifed + index. If index is == -1, then the biggest index + number will be used. + See get_first_struc_idx() for the explanation of + structure indices and IDs. + @param name: name of the new structure type. + @param is_union: 0: structure + 1: union + + @return: -1 if can't define structure type because of + bad structure name: the name is ill-formed or is + already used in the program. + otherwise returns ID of the new structure type + +Help on function add_struc_member in module idc: + +add_struc_member(sid, name, offset, flag, typeid, nbytes, target=-1, tdelta=0, reftype=2) + Add structure member + + @param sid: structure type ID + @param name: name of the new member + @param offset: offset of the new member + -1 means to add at the end of the structure + @param flag: type of the new member. Should be one of + FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA + @param typeid: if is_struct(flag) then typeid specifies the structure id for the member + if is_off0(flag) then typeid specifies the offset base. + if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). + if is_stroff(flag) then typeid specifies the structure id + if is_enum(flag) then typeid specifies the enum id + if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) + Otherwise typeid should be -1. + @param nbytes: number of bytes in the new member + + @param target: target address of the offset expr. You may specify it as + -1, ida will calculate it itself + @param tdelta: offset target delta. usually 0 + @param reftype: see REF_... definitions + + @note: The remaining arguments are allowed only if is_off0(flag) and you want + to specify a complex offset expression + + @return: 0 - ok, otherwise error code (one of STRUC_ERROR_*) + +Help on function add_user_stkpnt in module ida_frame: + +add_user_stkpnt(*args) -> 'bool' + add_user_stkpnt(ea, delta) -> bool + + + Add user-defined SP register change point. + + @param ea: linear address where SP changes (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function append_func_tail in module idc: + +append_func_tail(funcea, ea1, ea2) + Append a function chunk to the function + + @param funcea: any address in the function + @param ea1: start of function tail + @param ea2: end of function tail + @return: 0 if failed, 1 if success + + @note: If a chunk exists at the specified addresses, it must have exactly + the specified boundaries + +Help on function apply_type in module idc: + +apply_type(ea, py_type, flags=1) + Apply the specified type to the address + + @param ea: the address of the object + @param py_type: typeinfo tuple (type, fields) as get_tinfo() returns + or tuple (name, type, fields) as parse_decl() returns + or None + if specified as None, then the + item associated with 'ea' will be deleted. + @param flags: combination of TINFO_... constants or 0 + @return: Boolean + +Help on function ask_seg in module ida_kernwin: + +ask_seg(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_yn in module ida_kernwin: + +ask_yn(*args) -> 'int' + ask_yn(deflt, format) -> int + + + Display a dialog box and get choice from "Yes", "No", "Cancel". + + @param deflt: default choice: one of Button IDs (C++: int) + @param format: The question in printf() style format (C++: const char + *) + @return: the selected button (one of Button IDs ). Esc key returns + ASKBTN_CANCEL . + +Help on function atoa in module idc: + +atoa(ea) + Convert address value to a string + Return address in the form 'seg000:1234' + (the same as in line prefixes) + + @param ea: address to format + +Help on function atol in module idc: + +atol(s) + +Help on function attach_process in module ida_dbg: + +attach_process(*args) -> 'int' + attach_process(pid=pid_t(-1), event_id=-1) -> int + + + Attach the debugger to a running process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_attach' + }This function shouldn't be called as a request if 'NO_PROCESS' is + used. + + @param pid: PID of the process to attach to. If NO_PROCESS , a dialog + box will interactively ask the user for the process to + attach to. (C++: pid_t) + @param event_id (C++: int) + +Help on function auto_mark_range in module ida_auto: + +auto_mark_range(*args) -> 'void' + auto_mark_range(start, end, type) + + + Put range of addresses into a queue. 'start' may be higher than 'end', + the kernel will swap them in this case. 'end' doesn't belong to the + range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_unmark in module ida_auto: + +auto_unmark(*args) -> 'void' + auto_unmark(start, end, type) + + + Remove range of addresses from a queue. 'start' may be higher than + 'end', the kernel will swap them in this case. 'end' doesn't belong to + the range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_wait in module ida_auto: + +auto_wait(*args) -> 'bool' + auto_wait() -> bool + + + Process everything in the queues and return true. + + @return: false if the user clicked cancel. (the wait box must be + displayed by the caller if desired) + +Help on function batch in module idc: + +batch(batch) + Enable/disable batch mode of operation + + @param batch: batch mode + 0 - ida will display dialog boxes and wait for the user input + 1 - ida will not display dialog boxes, warnings, etc. + + @return: old balue of batch flag + +Help on function byte_value in module idc: + +byte_value(F) + Get byte value from flags + Get value of byte provided that the byte is initialized. + This macro works ok only for 8-bit byte machines. + +Help on function calc_gtn_flags in module ida_name: + +calc_gtn_flags(fromaddr, ea) + Calculate flags for get_ea_name() function + + @param fromaddr: the referring address. May be BADADDR. + @param ea: linear address + + @return: flags + +Help on function call_system in module idc: + +call_system(command) + Execute an OS command. + + @param command: command line to execute + + @return: error code from OS + + @note: + IDA will wait for the started program to finish. + In order to start the command in parallel, use OS methods. + For example, you may start another program in parallel using + "start" command. + +Help on function can_exc_continue in module idc: + +can_exc_continue() + Can it continue after EXCEPTION event? + + @return: boolean + +Help on function check_bpt in module ida_dbg: + +check_bpt(*args) -> 'int' + check_bpt(ea) -> int + + + Check the breakpoint at the specified address. + + @param ea (C++: ea_t) + @return: one of Breakpoint status codes + +Help on function choose_func in module idc: + +choose_func(title) + Ask the user to select a function + + Arguments: + + @param title: title of the dialog box + + @return: -1 - user refused to select a function + otherwise returns the selected function start address + +Help on function clear_trace in module idc: + +clear_trace(filename) + Clear the current trace buffer + +Help on function create_align in module ida_bytes: + +create_align(*args) -> 'bool' + create_align(ea, length, alignment) -> bool + + + Alignment: 0 or 2..32. If it is 0, is will be calculated. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param alignment (C++: int) + +Help on function create_array in module idc: + +create_array(name) + Create array. + + @param name: The array name. + + @return: -1 in case of failure, a valid array_id otherwise. + +Help on function create_byte in module idc: + +create_byte(ea) + Convert the current item to a byte + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_custdata in module ida_bytes: + +create_custdata(*args) -> 'bool' + create_custdata(ea, length, dtid, fid, force=False) -> bool + + + Convert to custom data type. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param dtid (C++: int) + @param fid (C++: int) + @param force (C++: bool) + +Help on function create_data in module ida_bytes: + +create_data(*args) -> 'bool' + create_data(ea, dataflag, size, tid) -> bool + + + Convert to data (byte, word, dword, etc). This function may be used to + create arrays. + + @param ea: linear address (C++: ea_t) + @param dataflag: type of data. Value of function byte_flag() , + word_flag() , etc. (C++: flags_t) + @param size: size of array in bytes. should be divisible by the size + of one item of the specified type. for variable sized + items it can be specified as 0, and the kernel will try + to calculate the size. (C++: asize_t) + @param tid: type id. If the specified type is a structure, then tid is + structure id. Otherwise should be BADNODE . (C++: tid_t) + @return: success + +Help on function create_double in module idc: + +create_double(ea) + Convert the current item to a double floating point (8 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_dword in module idc: + +create_dword(ea) + Convert the current item to a double word (4 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_float in module idc: + +create_float(ea) + Convert the current item to a floating point (4 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_insn in module ida_ua: + +create_insn(*args) -> 'int' + create_insn(ea, out=None) -> int + + + Create an instruction at the specified address. This function checks + if an instruction is present at the specified address and will try to + create one if there is none. It will fail if there is a data item or + other items hindering the creation of the new instruction. This + function will also fill the 'out' structure. + + @param ea: linear address (C++: ea_t) + @param out: the resulting instruction (C++: insn_t *) + @return: the length of the instruction or 0 + +Help on function create_oword in module idc: + +create_oword(ea) + Convert the current item to an octa word (16 bytes/128 bits) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_pack_real in module idc: + +create_pack_real(ea) + Convert the current item to a packed real (10 or 12 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_qword in module idc: + +create_qword(ea) + Convert the current item to a quadro word (8 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_strlit in module idc: + +create_strlit(ea, endea) + Create a string. + + This function creates a string (the string type is determined by the + value of get_inf_attr(INF_STRTYPE)) + + @param ea: linear address + @param endea: ending address of the string (excluded) + if endea == BADADDR, then length of string will be calculated + by the kernel + + @return: 1-ok, 0-failure + + @note: The type of an existing string is returned by get_str_type() + +Help on function create_struct in module idc: + +create_struct(ea, size, strname) + Convert the current item to a structure instance + + @param ea: linear address + @param size: structure size in bytes. -1 means that the size + will be calculated automatically + @param strname: name of a structure type + + @return: 1-ok, 0-failure + +Help on function create_tbyte in module idc: + +create_tbyte(ea) + Convert the current item to a tbyte (10 or 12 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_word in module idc: + +create_word(ea) + Convert the current item to a word (2 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_yword in module idc: + +create_yword(ea) + Convert the current item to a ymm word (32 bytes/256 bits) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function define_exception in module ida_dbg: + +define_exception(*args) -> 'char const *' + define_exception(code, name, desc, flags) -> char const * + + + Convenience function: define new exception code. + + @param code: exception code (cannot be 0) (C++: uint) + @param name: exception name (cannot be empty or NULL) (C++: const char + *) + @param desc: exception description (maybe NULL) (C++: const char *) + @param flags: combination of Exception info flags (C++: int) + @return: failure message or NULL. You must call store_exceptions() + if this function succeeds + +Help on function define_local_var in module idc: + +define_local_var(start, end, location, name) + Create a local variable + + @param start: start of address range for the local variable + @param end: end of address range for the local variable + @param location: the variable location in the "[bp+xx]" form where xx is + a number. The location can also be specified as a + register name. + @param name: name of the local variable + + @return: 1-ok, 0-failure + + @note: For the stack variables the end address is ignored. + If there is no function at 'start' then this function. + will fail. + +Help on function del_array_element in module idc: + +del_array_element(tag, array_id, idx) + Delete an array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of an element. + + @return: 1 in case of success, 0 otherwise. + +Help on function del_bpt in module ida_dbg: + +del_bpt(*args) -> 'bool' + del_bpt(ea) -> bool + del_bpt(bptloc) -> bool + + + Delete an existing breakpoint in the debugged process. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + +Help on function del_cref in module ida_xref: + +del_cref(*args) -> 'int' + del_cref(frm, to, expand) -> int + + + Delete a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param expand: policy to delete the referenced instruction 1: plan + to delete the referenced instruction if it has no more + references. 0: don't delete the referenced + instruction even if no more cross-references point to + it (C++: bool) + +Help on function del_dref in module ida_xref: + +del_dref(*args) -> 'void' + del_dref(frm, to) + + + Delete a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + +Help on function del_enum in module ida_enum: + +del_enum(*args) -> 'void' + del_enum(id) + + + Delete an enum type. + + + @param id (C++: enum_t) + +Help on function del_enum_member in module idc: + +del_enum_member(enum_id, value, serial, bmask) + Delete a member of enum - a symbolic constant + + @param enum_id: id of enum + @param value: value of symbolic constant. + @param serial: serial number of the constant in the + enumeration. See op_enum() for for details. + @param bmask: bitmask of the constant ordinary enums accept + only ida_enum.DEFMASK as a bitmask + + @return: 1-ok, 0-failed + +Help on function del_extra_cmt in module ida_lines: + +del_extra_cmt(*args) -> 'void' + del_extra_cmt(ea, what) + +Help on function del_fixup in module ida_fixup: + +del_fixup(*args) -> 'void' + del_fixup(source) + + + Delete fixup information. + + + @param source (C++: ea_t) + +Help on function del_func in module ida_funcs: + +del_func(*args) -> 'bool' + del_func(ea) -> bool + + + Delete a function. + + @param ea: any address in the function entry chunk (C++: ea_t) + @return: success + +Help on function del_hash_string in module idc: + +del_hash_string(hash_id, key) + Delete a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element + + @return: 1 upon success, 0 otherwise. + +Help on function del_hidden_range in module ida_bytes: + +del_hidden_range(*args) -> 'bool' + del_hidden_range(ea) -> bool + + + Delete hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: success + +Help on function del_idc_hotkey in module ida_kernwin: + +del_idc_hotkey(*args) -> 'bool' + del_idc_hotkey(hotkey) -> bool + + + Delete IDC function hotkey ( 'ui_del_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + +Help on function del_items in module ida_bytes: + +del_items(*args) -> 'bool' + del_items(ea, flags=0, nbytes=1, may_destroy=None) -> bool + + + Convert item (instruction/data) to unexplored bytes. The whole item + (including the head and tail bytes) will be destroyed. It is allowed + to pass any address in the item to this function + + @param ea: any address within the first item to delete (C++: ea_t) + @param flags: combination of Unexplored byte conversion flags (C++: + int) + @param nbytes: number of bytes in the range to be undefined (C++: + asize_t) + @param may_destroy: optional routine invoked before deleting a head + item. If callback returns false then item has not + to be deleted and operation fails (C++: + may_destroy_cb_t *) + @return: true on sucessful operation, otherwise false + +Help on function del_segm in module ida_segment: + +del_segm(*args) -> 'bool' + del_segm(ea, flags) -> bool + + + Delete a segment. + + @param ea: any address belonging to the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function del_selector in module ida_segment: + +del_selector(*args) -> 'void' + del_selector(selector) + + + Delete mapping of a selector. Be wary of deleting selectors that are + being used in the program, this can make a mess in the segments. + + @param selector: number of selector to remove from the translation + table (C++: sel_t) + +Help on function del_source_linnum in module ida_nalt: + +del_source_linnum(*args) -> 'void' + del_source_linnum(ea) + +Help on function del_sourcefile in module ida_lines: + +del_sourcefile(*args) -> 'bool' + del_sourcefile(ea) -> bool + + + Delete information about the source file. + + @param ea: linear address (C++: ea_t) + @return: success + +Help on function del_stkpnt in module idc: + +del_stkpnt(func_ea, ea) + Delete SP register change point + + @param func_ea: function start + @param ea: linear address + @return: 1-ok, 0-failed + +Help on function del_struc in module idc: + +del_struc(sid) + Delete a structure type + + @param sid: structure type ID + + @return: 0 if bad structure type ID is passed + 1 otherwise the structure type is deleted. All data + and other structure types referencing to the + deleted structure type will be displayed as array + of bytes. + +Help on function del_struc_member in module idc: + +del_struc_member(sid, member_offset) + Delete structure member + + @param sid: structure type ID + @param member_offset: offset of the member + + @return: != 0 - ok. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + +Help on function delete_all_segments in module idc: + +delete_all_segments() + Delete all segments, instructions, comments, i.e. everything + except values of bytes. + +Help on function delete_array in module idc: + +delete_array(array_id) + Delete array, by its ID. + + @param array_id: The ID of the array to delete. + +Help on function demangle_name in module idc: + +demangle_name(name, disable_mask) + demangle_name a name + + @param name: name to demangle + @param disable_mask: a mask that tells how to demangle the name + it is a good idea to get this mask using + get_inf_attr(INF_SHORT_DN) or get_inf_attr(INF_LONG_DN) + + @return: a demangled name + If the input name cannot be demangled, returns None + +Help on function detach_process in module ida_dbg: + +detach_process(*args) -> 'bool' + detach_process() -> bool + + + Detach the debugger from the debugged process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_detach' } + +Help on function diff_trace_file in module ida_dbg: + +diff_trace_file(*args) -> 'bool' + diff_trace_file(nonnul_filename) -> bool + + + Show difference between the current trace and the one from 'filename'. + +Help on function enable_bpt in module ida_dbg: + +enable_bpt(*args) -> 'bool' + enable_bpt(ea, enable=True) -> bool + enable_bpt(bptloc, enable=True) -> bool + +Help on function enable_tracing in module idc: + +enable_tracing(trace_level, enable) + Enable step tracing + + @param trace_level: what kind of trace to modify + @param enable: 0: turn off, 1: turn on + + @return: success + +Help on function error in module ida_kernwin: + +error(*args) -> 'void' + error(format) + + + Display a fatal message in a message box and quit IDA + + @param format: message to print + +Help on function eval_idc in module idc: + +eval_idc(expr) + Evaluate an IDC expression + + @param expr: an expression + + @return: the expression value. If there are problems, the returned value will be "IDC_FAILURE: xxx" + where xxx is the error description + + @note: Python implementation evaluates IDC only, while IDC can call other registered languages + +Help on function exit_process in module ida_dbg: + +exit_process(*args) -> 'bool' + exit_process() -> bool + + + Terminate the debugging of the current process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_exit' } + +Help on function expand_struc in module idc: + +expand_struc(sid, offset, delta, recalc) + Expand or shrink a structure type + @param id: structure type ID + @param offset: offset in the structure + @param delta: how many bytes to add or remove + @param recalc: recalculate the locations where the structure + type is used + @return: != 0 - ok + +Help on function fclose in module idc: + +fclose(handle) + +Help on function fgetc in module idc: + +fgetc(handle) + +Help on function filelength in module idc: + +filelength(handle) + +Help on function find_binary in module idc: + +find_binary(ea, flag, searchstr, radix=16, from_bc695=False) + +Help on function find_code in module ida_search: + +find_code(*args) -> 'ea_t' + find_code(ea, sflag) -> ea_t + + + Find next code address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_data in module ida_search: + +find_data(*args) -> 'ea_t' + find_data(ea, sflag) -> ea_t + + + Find next data address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_defined in module ida_search: + +find_defined(*args) -> 'ea_t' + find_defined(ea, sflag) -> ea_t + + + Find next ea that is the start of an instruction or data. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_func_end in module idc: + +find_func_end(ea) + Determine a new function boundaries + + @param ea: starting address of a new function + + @return: if a function already exists, then return its end address. + If a function end cannot be determined, the return BADADDR + otherwise return the end address of the new function + +Help on function find_imm in module ida_search: + +find_imm(*args) -> 'int *' + find_imm(newEA, sflag, srchValue) -> ea_t + + + Find next immediate operand with the given value. + + + @param newEA (C++: ea_t) + @param sflag (C++: int) + @param srchValue (C++: uval_t) + +Help on function find_selector in module idc: + +find_selector(val) + Find a selector which has the specifed value + + @param val: value to search for + + @return: the selector number if found, + otherwise the input value (val & 0xFFFF) + + @note: selector values are always in paragraphs + +Help on function find_suspop in module ida_search: + +find_suspop(*args) -> 'int *' + find_suspop(ea, sflag) -> ea_t + + + Find next suspicious operand. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_text in module idc: + +find_text(ea, flag, y, x, searchstr, from_bc695=False) + +Help on function find_unknown in module ida_search: + +find_unknown(*args) -> 'ea_t' + find_unknown(ea, sflag) -> ea_t + + + Find next unexplored address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function first_func_chunk in module idc: + +first_func_chunk(funcea) + Get the first function chunk of the specified function + + @param funcea: any address in the function + + @return: the function entry point or BADADDR + + @note: This function returns the first (main) chunk of the specified function + +Help on function fopen in module idc: + +fopen(f, mode) + #---------------------------------------------------------------------------- + # F I L E I / O + #---------------------------------------------------------------------------- + +Help on function force_bl_call in module idc: + +force_bl_call(ea) + Force BL instruction to be a call + + @param ea: address of the BL instruction + + @return: 1-ok, 0-failed + +Help on function force_bl_jump in module idc: + +force_bl_jump(ea) + Some ARM compilers in Thumb mode use BL (branch-and-link) + instead of B (branch) for long jumps, since BL has more range. + By default, IDA tries to determine if BL is a jump or a call. + You can override IDA's decision using commands in Edit/Other menu + (Force BL call/Force BL jump) or the following two functions. + + Force BL instruction to be a jump + + @param ea: address of the BL instruction + + @return: 1-ok, 0-failed + +Help on function form in module idc: + +form(format, *args) + +Help on function fprintf in module idc: + +fprintf(handle, format, *args) + +Help on function fputc in module idc: + +fputc(byte, handle) + +Help on function fseek in module idc: + +fseek(handle, offset, origin) + +Help on function ftell in module idc: + +ftell(handle) + +Help on function func_contains in module idc: + +func_contains(func_ea, ea) + Does the given function contain the given address? + + @param func_ea: any address belonging to the function + @param ea: linear address + + @return: success + +Help on function gen_file in module idc: + +gen_file(filetype, path, ea1, ea2, flags) + Generate an output file + + @param filetype: type of output file. One of OFILE_... symbols. See below. + @param path: the output file path (will be overwritten!) + @param ea1: start address. For some file types this argument is ignored + @param ea2: end address. For some file types this argument is ignored + @param flags: bit combination of GENFLG_... + + @returns: number of the generated lines. + -1 if an error occurred + OFILE_EXE: 0-can't generate exe file, 1-ok + +Help on function gen_flow_graph in module idc: + +gen_flow_graph(outfile, title, ea1, ea2, flags) + Generate a flow chart GDL file + + @param outfile: output file name. GDL extension will be used + @param title: graph title + @param ea1: beginning of the range to flow chart + @param ea2: end of the range to flow chart. + @param flags: combination of CHART_... constants + + @note: If ea2 == BADADDR then ea1 is treated as an address within a function. + That function will be flow charted. + +Help on function gen_simple_call_chart in module idc: + +gen_simple_call_chart(outfile, title, flags) + Generate a function call graph GDL file + + @param outfile: output file name. GDL extension will be used + @param title: graph title + @param flags: combination of CHART_GEN_GDL, CHART_WINGRAPH, CHART_NOLIBFUNCS + +Help on function generate_disasm_line in module idc: + +generate_disasm_line(ea, flags) + Get disassembly line + + @param ea: linear address of instruction + + @param flags: combination of the GENDSM_ flags, or 0 + + @return: "" - could not decode instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function get_array_element in module idc: + +get_array_element(tag, array_id, idx) + Get value of array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of an element. + + @return: Value of the specified array element. Note that + this function may return char or long result. Unexistent + array elements give zero as a result. + +Help on function get_array_id in module idc: + +get_array_id(name) + Get array array_id, by name. + + @param name: The array name. + + @return: -1 in case of failure (i.e., no array with that + name exists), a valid array_id otherwise. + +Help on function get_bmask_cmt in module idc: + +get_bmask_cmt(enum_id, bmask, repeatable) + Get bitmask comment (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param repeatable: type of comment, 0-regular, 1-repeatable + + @return: comment attached to bitmask or None + +Help on function get_bmask_name in module idc: + +get_bmask_name(enum_id, bmask) + Get bitmask name (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + + @return: name of bitmask or None + +Help on function get_marked_pos in module ida_idc: + +get_marked_pos(*args) -> 'ea_t' + get_marked_pos(slot) -> ea_t + +Help on function get_mark_comment in module ida_idc: + +get_mark_comment(*args) -> 'PyObject *' + get_mark_comment(slot) -> PyObject * + +Help on function get_bpt_attr in module idc: + +get_bpt_attr(ea, bptattr) + Get the characteristics of a breakpoint + + @param ea: any address in the breakpoint range + @param bptattr: the desired attribute code, one of BPTATTR_... constants + + @return: the desired attribute value or -1 + +Help on function get_bpt_ea in module idc: + +get_bpt_ea(n) + Get breakpoint address + + @param n: number of breakpoint, is in range 0..get_bpt_qty()-1 + + @return: address of the breakpoint or BADADDR + +Help on function get_bpt_qty in module ida_dbg: + +get_bpt_qty(*args) -> 'int' + get_bpt_qty() -> int + + + Get number of breakpoints. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function get_bpt_tev_ea in module ida_dbg: + +get_bpt_tev_ea(*args) -> 'ea_t' + get_bpt_tev_ea(n) -> ea_t + + + Get the address associated to a read, read/write or execution trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)}Usually, a breakpoint is associated with a read, read/write + or execution trace event. However, the returned address could be any + address in the range of this breakpoint. If the breakpoint was deleted + after the trace event, the address no longer corresponds to a valid + breakpoint. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a read, read/write or execution trace event. + +Help on function get_bytes in module idc: + +get_bytes(ea, size, use_dbg=False) + Return the specified number of bytes of the program + + @param ea: linear address + + @param size: size of buffer in normal 8-bit bytes + + @param use_dbg: if True, use debugger memory, otherwise just the database + + @return: None on failure + otherwise a string containing the read bytes + +Help on function get_call_tev_callee in module ida_dbg: + +get_call_tev_callee(*args) -> 'ea_t' + get_call_tev_callee(n) -> ea_t + + + Get the called function from a function call trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function call event. + +Help on function get_color in module idc: + +get_color(ea, what) + Get item color + + @param ea: address of the item + @param what: type of the item (one of CIC_* constants) + + @return: color code in RGB (hex 0xBBGGRR) + +Help on function get_curline in module idc: + +get_curline() + Get the disassembly line at the cursor + + @return: string + +Help on function get_current_thread in module ida_dbg: + +get_current_thread(*args) -> 'thid_t' + get_current_thread() -> thid_t + + + Get current thread ID. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_db_byte in module ida_bytes: + +get_db_byte(*args) -> 'uchar' + get_db_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea' from the database. Works + even if the debugger is active. See also 'get_dbg_byte()' to read the + process memory directly. This function works only for 8bit byte + processors. + + @param ea (C++: ea_t) + +Help on function get_debugger_event_cond in module ida_dbg: + +get_debugger_event_cond(*args) -> 'char const *' + get_debugger_event_cond() -> char const * + +Help on function get_entry in module ida_entry: + +get_entry(*args) -> 'ea_t' + get_entry(ord) -> ea_t + + + Get entry point address by its ordinal + + @param ord: ordinal number of entry point (C++: uval_t) + @return: address or BADADDR + +Help on function get_entry_name in module ida_entry: + +get_entry_name(*args) -> 'qstring *' + get_entry_name(ord) -> str + + + Get name of the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry name or -1 + +Help on function get_entry_ordinal in module ida_entry: + +get_entry_ordinal(*args) -> 'uval_t' + get_entry_ordinal(idx) -> uval_t + + + Get ordinal number of an entry point. + + @param idx: internal number of entry point. Should be in the range 0.. + get_entry_qty() -1 (C++: size_t) + @return: ordinal number or 0. + +Help on function get_entry_qty in module ida_entry: + +get_entry_qty(*args) -> 'size_t' + get_entry_qty() -> size_t + + + Get number of entry points. + +Help on function get_enum in module ida_enum: + +get_enum(*args) -> 'enum_t' + get_enum(name) -> enum_t + + + Get enum by name. + + + @param name (C++: const char *) + +Help on function get_enum_cmt in module ida_enum: + +get_enum_cmt(*args) -> 'qstring *' + get_enum_cmt(id, repeatable) -> str + + + Get enum comment. + + + @param id (C++: enum_t) + @param repeatable (C++: bool) + +Help on function get_enum_flag in module ida_enum: + +get_enum_flag(*args) -> 'flags_t' + get_enum_flag(id) -> flags_t + + + Get flags determining the representation of the enum. (currently they + define the numeric base: octal, decimal, hex, bin) and signness. + + @param id (C++: enum_t) + +Help on function get_enum_idx in module ida_enum: + +get_enum_idx(*args) -> 'uval_t' + get_enum_idx(id) -> uval_t + + + Get serial number of enum. The serial number determines the place of + the enum in the enum window. + + @param id (C++: enum_t) + +Help on function get_enum_member in module idc: + +get_enum_member(enum_id, value, serial, bmask) + Get id of constant + + @param enum_id: id of enum + @param value: value of constant + @param serial: serial number of the constant in the + enumeration. See op_enum() for details. + @param bmask: bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + + @return: id of constant or -1 if error + +Help on function get_enum_member_bmask in module ida_enum: + +get_enum_member_bmask(*args) -> 'bmask_t' + get_enum_member_bmask(id) -> bmask_t + + + Get bitmask of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_by_name in module ida_enum: + +get_enum_member_by_name(*args) -> 'const_t' + get_enum_member_by_name(name) -> const_t + + + Get a reference to an enum member by its name. + + + @param name (C++: const char *) + +Help on function get_enum_member_cmt in module idc: + +get_enum_member_cmt(const_id, repeatable) + Get comment of a constant + + @param const_id: id of const + @param repeatable: 0:get regular comment, 1:get repeatable comment + + @return: comment string + +Help on function get_enum_member_enum in module ida_enum: + +get_enum_member_enum(*args) -> 'enum_t' + get_enum_member_enum(id) -> enum_t + + + Get the parent enum of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_name in module idc: + +get_enum_member_name(const_id) + Get name of a constant + + @param const_id: id of const + + Returns: name of constant + +Help on function get_enum_member_value in module ida_enum: + +get_enum_member_value(*args) -> 'uval_t' + get_enum_member_value(id) -> uval_t + + + Get value of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_name in module ida_enum: + +get_enum_name(*args) -> 'qstring *' + get_enum_name(id) -> str + + + Get name of enum. + + + @param id (C++: enum_t) + +Help on function get_enum_qty in module ida_enum: + +get_enum_qty(*args) -> 'size_t' + get_enum_qty() -> size_t + + + Get number of declared 'enum_t' types. + +Help on function get_enum_size in module ida_enum: + +get_enum_size(*args) -> 'size_t' + get_enum_size(id) -> size_t + + + Get the number of the members of the enum. + + + @param id (C++: enum_t) + +Help on function get_enum_width in module ida_enum: + +get_enum_width(*args) -> 'size_t' + get_enum_width(id) -> size_t + + + Get the width of a enum element allowed values: 0 + (unspecified),1,2,4,8,16,32,64 + + @param id (C++: enum_t) + +Help on function get_event_bpt_hea in module idc: + +get_event_bpt_hea() + Get hardware address for BREAKPOINT event + + @return: hardware address + +Help on function get_event_ea in module idc: + +get_event_ea() + Get ea for debug event + + @return: ea + +Help on function get_event_exc_code in module idc: + +get_event_exc_code() + Get exception code for EXCEPTION event + + @return: exception code + +Help on function get_event_exc_ea in module idc: + +get_event_exc_ea() + Get address for EXCEPTION event + + @return: adress of exception + +Help on function get_event_exc_info in module idc: + +get_event_exc_info() + Get info for EXCEPTION event + + @return: info string + +Help on function get_event_exit_code in module idc: + +get_event_exit_code() + Get exit code for debug event + + @return: exit code for PROCESS_EXITED, THREAD_EXITED events + +Help on function get_event_id in module idc: + +get_event_id() + Get ID of debug event + + @return: event ID + +Help on function get_event_info in module idc: + +get_event_info() + Get debug event info + + @return: event info: for THREAD_STARTED (thread name) + for LIB_UNLOADED (unloaded library name) + for INFORMATION (message to display) + +Help on function get_event_module_base in module idc: + +get_event_module_base() + Get module base for debug event + + @return: module base + +Help on function get_event_module_name in module idc: + +get_event_module_name() + Get module name for debug event + + @return: module name + +Help on function get_event_module_size in module idc: + +get_event_module_size() + Get module size for debug event + + @return: module size + +Help on function get_event_pid in module idc: + +get_event_pid() + Get process ID for debug event + + @return: process ID + +Help on function get_event_tid in module idc: + +get_event_tid() + Get type ID for debug event + + @return: type ID + +Help on function get_extra_cmt in module ida_lines: + +get_extra_cmt(*args) -> 'int' + get_extra_cmt(ea, what) -> ssize_t + +Help on function get_fchunk_attr in module idc: + +get_fchunk_attr(ea, attr) + Get a function chunk attribute + + @param ea: any address in the chunk + @param attr: one of: FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER, FUNCATTR_REFQTY + + @return: desired attribute or -1 + +Help on function get_fchunk_referer in module ida_funcs: + +get_fchunk_referer(*args) -> 'ea_t' + get_fchunk_referer(ea, idx) -> ea_t + +Help on function get_first_bmask in module ida_enum: + +get_first_bmask(*args) -> 'bmask_t' + get_first_bmask(id) -> bmask_t + + + Get first bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the smallest bitmask for enum, or DEFMASK + +Help on function get_first_cref_from in module ida_xref: + +get_first_cref_from(*args) -> 'ea_t' + get_first_cref_from(frm) -> ea_t + + + Get first instruction referenced from the specified instruction. If + the specified instruction passes execution to the next instruction + then the next instruction is returned. Otherwise the lowest referenced + address is returned (remember that xrefs are kept sorted!). + + @return: first referenced address. The lastXR variable contains type + of the reference. If the specified instruction doesn't + reference to other instructions then returns BADADDR . + +Help on function get_first_cref_to in module ida_xref: + +get_first_cref_to(*args) -> 'ea_t' + get_first_cref_to(to) -> ea_t + + + Get first instruction referencing to the specified instruction. If the + specified instruction may be executed immediately after its previous + instruction then the previous instruction is returned. Otherwise the + lowest referencing address is returned. (remember that xrefs are kept + sorted!). + + @param to: linear address of referenced instruction (C++: ea_t) + @return: linear address of the first referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_first_dref_from in module ida_xref: + +get_first_dref_from(*args) -> 'ea_t' + get_first_dref_from(frm) -> ea_t + + + Get first data referenced from the specified address. + + @return: linear address of first (lowest) data referenced from the + specified address. The lastXR variable contains type of the + reference. Return BADADDR if the specified instruction/data + doesn't reference to anything. + +Help on function get_first_dref_to in module ida_xref: + +get_first_dref_to(*args) -> 'ea_t' + get_first_dref_to(to) -> ea_t + + + Get address of instruction/data referencing to the specified data. + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_first_enum_member in module idc: + +get_first_enum_member(enum_id, bmask) + Get first constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) + + @return: value of constant or idaapi.BADNODE no constants are defined + All constants are sorted by their values as unsigned longs. + +Help on function get_first_fcref_from in module ida_xref: + +get_first_fcref_from(*args) -> 'ea_t' + get_first_fcref_from(frm) -> ea_t + +Help on function get_first_fcref_to in module ida_xref: + +get_first_fcref_to(*args) -> 'ea_t' + get_first_fcref_to(to) -> ea_t + +Help on function get_first_hash_key in module idc: + +get_first_hash_key(hash_id) + Get the first key in the hash. + + @param hash_id: The hash ID. + + @return: the key, 0 otherwise. + +Help on function get_first_index in module idc: + +get_first_index(tag, array_id) + Get index of the first existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + + @return: -1 if the array is empty, otherwise index of first array + element of given type. + +Help on function get_first_member in module idc: + +get_first_member(sid) + Get offset of the first member of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if structure has no members, + otherwise returns offset of the first member. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_first_module in module idc: + +get_first_module() + Enumerate process modules + + @return: first module's base address or None on failure + +Help on function get_first_seg in module idc: + +get_first_seg() + Get first segment + + @return: address of the start of the first segment + BADADDR - no segments are defined + +Help on function get_first_struc_idx in module ida_struct: + +get_first_struc_idx(*args) -> 'uval_t' + get_first_struc_idx() -> uval_t + + + Get index of first structure. + + @return: BADADDR if no known structures, 0 otherwise + +Help on function get_fixup_target_dis in module idc: + +get_fixup_target_dis(ea) + Get fixup target displacement + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup target displacement + +Help on function get_fixup_target_flags in module idc: + +get_fixup_target_flags(ea) + Get fixup target flags + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup target flags + +Help on function get_fixup_target_off in module idc: + +get_fixup_target_off(ea) + Get fixup target offset + + @param ea: address to get information about + + @return: BADADDR - no fixup at the specified address + otherwise returns fixup target offset + +Help on function get_fixup_target_sel in module idc: + +get_fixup_target_sel(ea) + Get fixup target selector + + @param ea: address to get information about + + @return: BADSEL - no fixup at the specified address + otherwise returns fixup target selector + +Help on function get_fixup_target_type in module idc: + +get_fixup_target_type(ea) + Get fixup target type + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup type + +Help on function get_forced_operand in module ida_bytes: + +get_forced_operand(*args) -> 'qstring *' + get_forced_operand(ea, n) -> str + + + Get forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @return: size of forced operand or -1 + +Help on function get_frame_args_size in module idc: + +get_frame_args_size(ea) + Get size of arguments in function frame which are purged upon return + + @param ea: any address belonging to the function + + @return: Size of function arguments in bytes. + If the function doesn't have a frame, return 0 + If the function does't exist, return -1 + +Help on function get_frame_id in module idc: + +get_frame_id(ea) + Get ID of function frame structure + + @param ea: any address belonging to the function + + @return: ID of function frame or None In order to access stack variables + you need to use structure member manipulaion functions with the + obtained ID. + +Help on function get_frame_lvar_size in module idc: + +get_frame_lvar_size(ea) + Get size of local variables in function frame + + @param ea: any address belonging to the function + + @return: Size of local variables in bytes. + If the function doesn't have a frame, return 0 + If the function does't exist, return None + +Help on function get_frame_regs_size in module idc: + +get_frame_regs_size(ea) + Get size of saved registers in function frame + + @param ea: any address belonging to the function + + @return: Size of saved registers in bytes. + If the function doesn't have a frame, return 0 + This value is used as offset for BP (if FUNC_FRAME is set) + If the function does't exist, return None + +Help on function get_frame_size in module idc: + +get_frame_size(ea) + Get full size of function frame + + @param ea: any address belonging to the function + @returns: Size of function frame in bytes. + This function takes into account size of local + variables + size of saved registers + size of + return address + size of function arguments + If the function doesn't have a frame, return size of + function return address in the stack. + If the function does't exist, return 0 + +Help on function get_full_flags in module ida_bytes: + +get_full_flags(*args) -> 'flags_t' + get_full_flags(ea) -> flags_t + + + Get flags value for address 'ea'. + + @param ea (C++: ea_t) + @return: 0 if address is not present in the program + +Help on function get_func_attr in module idc: + +get_func_attr(ea, attr) + Get a function attribute + + @param ea: any address belonging to the function + @param attr: one of FUNCATTR_... constants + + @return: BADADDR - error otherwise returns the attribute value + +Help on function get_func_cmt in module idc: + +get_func_cmt(ea, repeatable) + Retrieve function comment + + @param ea: any address belonging to the function + @param repeatable: 1: get repeatable comment + 0: get regular comment + + @return: function comment string + +Help on function get_func_flags in module idc: + +get_func_flags(ea) + Retrieve function flags + + @param ea: any address belonging to the function + + @return: -1 - function doesn't exist otherwise returns the flags + +Help on function get_func_name in module idc: + +get_func_name(ea) + Retrieve function name + + @param ea: any address belonging to the function + + @return: null string - function doesn't exist + otherwise returns function name + +Help on function get_func_off_str in module idc: + +get_func_off_str(ea) + Convert address to 'funcname+offset' string + + @param ea: address to convert + + @return: if the address belongs to a function then return a string + formed as 'name+offset' where 'name' is a function name + 'offset' is offset within the function else return null string + +Help on function get_hash_long in module idc: + +get_hash_long(hash_id, key) + Gets the long value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + + @return: the 32bit or 64bit value of the element, or 0 if no such + element. + +Help on function get_hash_string in module idc: + +get_hash_string(hash_id, key) + Gets the string value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + + @return: the string value of the element, or None if no such + element. + +Help on function get_idb_path in module idc: + +get_idb_path() + Get IDB full path + + This function returns full path of the current IDB database + +Help on function get_inf_attr in module idc: + +get_inf_attr(attr) + +Help on function get_input_file_path in module ida_nalt: + +get_input_file_path(*args) -> 'size_t' + get_input_file_path() -> str + + + Get full path of the input file. + +Help on function get_item_end in module ida_bytes: + +get_item_end(*args) -> 'ea_t' + get_item_end(ea) -> ea_t + + + Get the end address of the item at 'ea'. The returned address doesn't + belong to the current item. Unexplored bytes are counted as 1 byte + entities. + + @param ea (C++: ea_t) + +Help on function get_item_head in module ida_bytes: + +get_item_head(*args) -> 'ea_t' + get_item_head(ea) -> ea_t + + + Get the start address of the item at 'ea'. If there is no current + item, then 'ea' will be returned (see definition at the end of + 'bytes.hpp' source) + + @param ea (C++: ea_t) + +Help on function get_item_size in module idc: + +get_item_size(ea) + Get size of instruction or data item in bytes + + @param ea: linear address + + @return: 1..n + +Help on function get_last_bmask in module ida_enum: + +get_last_bmask(*args) -> 'bmask_t' + get_last_bmask(id) -> bmask_t + + + Get last bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the biggest bitmask for enum, or DEFMASK + +Help on function get_last_enum_member in module idc: + +get_last_enum_member(enum_id, bmask) + Get last constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) + + @return: value of constant or idaapi.BADNODE no constants are defined + All constants are sorted by their values + as unsigned longs. + +Help on function get_last_hash_key in module idc: + +get_last_hash_key(hash_id) + Get the last key in the hash. + + @param hash_id: The hash ID. + + @return: the key, 0 otherwise. + +Help on function get_last_index in module idc: + +get_last_index(tag, array_id) + Get index of last existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + + @return: -1 if the array is empty, otherwise index of first array + element of given type. + +Help on function get_last_member in module idc: + +get_last_member(sid) + Get offset of the last member of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if structure has no members, + otherwise returns offset of the last member. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_last_struc_idx in module ida_struct: + +get_last_struc_idx(*args) -> 'uval_t' + get_last_struc_idx() -> uval_t + + + Get index of last structure. + + @return: BADADDR if no known structures, get_struc_qty() -1 + otherwise + +Help on function get_local_tinfo in module idc: + +get_local_tinfo(ordinal) + Get local type information as 'typeinfo' object + + @param ordinal: slot number (1...NumberOfLocalTypes) + @return: None on failure, or (type, fields) tuple. + +Help on function get_manual_insn in module ida_bytes: + +get_manual_insn(*args) -> 'qstring *' + get_manual_insn(ea) -> str + + + Retrieve the user-specified string for the manual instruction. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @return: size of manual instruction or -1 + +Help on function get_member_cmt in module idc: + +get_member_cmt(sid, member_offset, repeatable) + Get comment of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + @param repeatable: 1: get repeatable comment + 0: get regular comment + + @return: None if bad structure type ID is passed + or no such member in the structure + otherwise returns comment of the specified member. + +Help on function get_member_flag in module idc: + +get_member_flag(sid, member_offset) + Get type of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns type of the member, see bit + definitions above. If the member type is a structure + then function GetMemberStrid() should be used to + get the structure type id. + +Help on function get_member_id in module idc: + +get_member_id(sid, member_offset) + @param sid: structure type ID + @param member_offset:. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: -1 if bad structure type ID is passed or there is + no member at the specified offset. + otherwise returns the member id. + +Help on function get_member_name in module idc: + +get_member_name(sid, member_offset) + Get name of a member of a structure + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: None if bad structure type ID is passed + or no such member in the structure + otherwise returns name of the specified member. + +Help on function get_member_offset in module idc: + +get_member_offset(sid, member_name) + Get offset of a member of a structure by the member name + + @param sid: structure type ID + @param member_name: name of structure member + + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns offset of the specified member. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_member_qty in module idc: + +get_member_qty(sid) + Get number of members of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed otherwise + returns number of members. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_member_size in module idc: + +get_member_size(sid, member_offset) + Get size of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: None if bad structure type ID is passed, + or no such member in the structure + otherwise returns size of the specified + member in bytes. + +Help on function get_member_strid in module idc: + +get_member_strid(sid, member_offset) + Get structure id of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns structure id of the member. + If the current member is not a structure, returns -1. + +Help on function get_min_spd_ea in module idc: + +get_min_spd_ea(func_ea) + Return the address with the minimal spd (stack pointer delta) + If there are no SP change points, then return BADADDR. + + @param func_ea: function start + @return: BADDADDR - no such function + +Help on function get_module_name in module idc: + +get_module_name(base) + Get process module name + + @param base: the base address of the module + + @return: required info or None + +Help on function get_module_size in module idc: + +get_module_size(base) + Get process module size + + @param base: the base address of the module + + @return: required info or -1 + +Help on function get_name in module idc: + +get_name(ea, gtn_flags=0) + Get name at the specified address + + @param ea: linear address + @param gtn_flags: how exactly the name should be retrieved. + combination of GN_ bits + + @return: "" - byte has no name + +Help on function get_name_ea in module ida_name: + +get_name_ea(*args) -> 'ea_t' + get_name_ea(_from, name) -> ea_t + + + Get address of the name. Dummy names (like byte_xxxx where xxxx are + hex digits) are parsed by this function to obtain the address. The + database is not consulted for them. This function works only with + regular names. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: address of the name or BADADDR + +Help on function get_name_ea_simple in module idc: + +get_name_ea_simple(name) + Get linear address of a name + + @param name: name of program byte + + @return: address of the name + BADADDR - No such name + +Help on function get_next_bmask in module ida_enum: + +get_next_bmask(*args) -> 'bmask_t' + get_next_bmask(id, bmask) -> bmask_t + + + Get next bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value higher than the specified + value, or DEFMASK + +Help on function get_next_cref_from in module ida_xref: + +get_next_cref_from(*args) -> 'ea_t' + get_next_cref_from(frm, current) -> ea_t + + + Get next instruction referenced from the specified instruction. + + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_from() or + previous call to get_next_cref_from() functions. + (C++: ea_t) + @return: next referenced address or BADADDR . The lastXR variable + contains type of the reference. + +Help on function get_next_cref_to in module ida_xref: + +get_next_cref_to(*args) -> 'ea_t' + get_next_cref_to(to, current) -> ea_t + + + Get next instruction referencing to the specified instruction. + + @param to: linear address of referenced instruction (C++: ea_t) + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_to() or previous + call to get_next_cref_to() functions. (C++: ea_t) + @return: linear address of the next referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_next_dref_from in module ida_xref: + +get_next_dref_from(*args) -> 'ea_t' + get_next_dref_from(frm, current) -> ea_t + + + Get next data referenced from the specified address. + + @param current: linear address of current referenced data. This value + is returned by get_first_dref_from() or previous + call to get_next_dref_from() functions. (C++: ea_t) + @return: linear address of next data or BADADDR . The lastXR + variable contains type of the reference + +Help on function get_next_dref_to in module ida_xref: + +get_next_dref_to(*args) -> 'ea_t' + get_next_dref_to(to, current) -> ea_t + + + Get address of instruction/data referencing to the specified data + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @param current: current linear address. This value is returned by + get_first_dref_to() or previous call to + get_next_dref_to() functions. (C++: ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_next_enum_member in module idc: + +get_next_enum_member(enum_id, value, bmask) + Get next constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant ordinary enums accept only ida_enum.DEFMASK as a bitmask + @param value: value of the current constant + + @return: value of a constant with value higher than the specified + value. idaapi.BADNODE no such constants exist. + All constants are sorted by their values as unsigned longs. + +Help on function get_next_fchunk in module idc: + +get_next_fchunk(ea) + Get next function chunk + + @param ea: any address + + @return: the starting address of the next function chunk or BADADDR + + @note: This function enumerates all chunks of all functions in the database + +Help on function get_next_fcref_from in module ida_xref: + +get_next_fcref_from(*args) -> 'ea_t' + get_next_fcref_from(frm, current) -> ea_t + +Help on function get_next_fcref_to in module ida_xref: + +get_next_fcref_to(*args) -> 'ea_t' + get_next_fcref_to(to, current) -> ea_t + +Help on function get_next_fixup_ea in module ida_fixup: + +get_next_fixup_ea(*args) -> 'ea_t' + get_next_fixup_ea(ea) -> ea_t + + + Find next address with fixup information + + @param ea: current address (C++: ea_t) + @return: the next address with fixup information, or BADADDR + +Help on function get_next_func in module idc: + +get_next_func(ea) + Find next function + + @param ea: any address belonging to the function + + @return: BADADDR - no more functions + otherwise returns the next function start address + +Help on function get_next_hash_key in module idc: + +get_next_hash_key(hash_id, key) + Get the next key in the hash. + + @param hash_id: The hash ID. + @param key: The current key. + + @return: the next key, 0 otherwise + +Help on function get_next_index in module idc: + +get_next_index(tag, array_id, idx) + Get index of the next existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of the current element. + + @return: -1 if no more elements, otherwise returns index of the + next array element of given type. + +Help on function get_next_module in module idc: + +get_next_module(base) + Enumerate process modules + + @param base: previous module's base address + + @return: next module's base address or None on failure + +Help on function get_next_offset in module idc: + +get_next_offset(sid, offset) + Get next offset in a structure + + @param sid: structure type ID + @param offset: current offset + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if no (more) offsets in the structure, + otherwise returns next offset in a structure. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + This function returns a member offset or a hole offset. + It will return size of the structure if input + 'offset' belongs to the last member of the structure. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_next_seg in module idc: + +get_next_seg(ea) + Get next segment + + @param ea: linear address + + @return: start of the next segment + BADADDR - no next segment + +Help on function get_next_struc_idx in module ida_struct: + +get_next_struc_idx(*args) -> 'uval_t' + get_next_struc_idx(idx) -> uval_t + + + Get next struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is out of bounds, otherwise idx++ + +Help on function get_numbered_type_name in module idc: + +get_numbered_type_name(ordinal) + Retrieve a local type name + + @param ordinal: slot number (1...NumberOfLocalTypes) + + returns: local type name or None + +Help on function get_operand_type in module idc: + +get_operand_type(ea, n) + Get type of instruction operand + + @param ea: linear address of instruction + @param n: number of operand: + 0 - the first operand + 1 - the second operand + + @return: any of o_* constants or -1 on error + +Help on function get_operand_value in module idc: + +get_operand_value(ea, n) + Get number used in the operand + + This function returns an immediate number used in the operand + + @param ea: linear address of instruction + @param n: the operand number + + @return: value + operand is an immediate value => immediate value + operand has a displacement => displacement + operand is a direct memory ref => memory address + operand is a register => register number + operand is a register phrase => phrase number + otherwise => -1 + +Help on function get_ordinal_qty in module idc: + +get_ordinal_qty() + Get number of local types + 1 + + @return: value >= 1. 1 means that there are no local types. + +Help on function get_original_byte in module ida_bytes: + +get_original_byte(*args) -> 'uint64' + get_original_byte(ea) -> uint64 + + + Get original byte value (that was before patching). This function + works for wide byte processors too. + + @param ea (C++: ea_t) + +Help on function get_prev_bmask in module ida_enum: + +get_prev_bmask(*args) -> 'bmask_t' + get_prev_bmask(id, bmask) -> bmask_t + + + Get prev bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value lower than the specified value, + or DEFMASK + +Help on function get_prev_enum_member in module idc: + +get_prev_enum_member(enum_id, value, bmask) + Get prev constant in the enum + + @param enum_id: id of enum + @param bmask : bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + @param value: value of the current constant + + @return: value of a constant with value lower than the specified + value. idaapi.BADNODE no such constants exist. + All constants are sorted by their values as unsigned longs. + +Help on function get_prev_fchunk in module idc: + +get_prev_fchunk(ea) + Get previous function chunk + + @param ea: any address + + @return: the starting address of the function chunk or BADADDR + + @note: This function enumerates all chunks of all functions in the database + +Help on function get_prev_fixup_ea in module ida_fixup: + +get_prev_fixup_ea(*args) -> 'ea_t' + get_prev_fixup_ea(ea) -> ea_t + + + Find previous address with fixup information + + @param ea: current address (C++: ea_t) + @return: the previous address with fixup information, or BADADDR + +Help on function get_prev_func in module idc: + +get_prev_func(ea) + Find previous function + + @param ea: any address belonging to the function + + @return: BADADDR - no more functions + otherwise returns the previous function start address + +Help on function get_prev_hash_key in module idc: + +get_prev_hash_key(hash_id, key) + Get the previous key in the hash. + + @param hash_id: The hash ID. + @param key: The current key. + + @return: the previous key, 0 otherwise + +Help on function get_prev_index in module idc: + +get_prev_index(tag, array_id, idx) + Get index of the previous existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of the current element. + + @return: -1 if no more elements, otherwise returns index of the + previous array element of given type. + +Help on function get_prev_offset in module idc: + +get_prev_offset(sid, offset) + Get previous offset in a structure + + @param sid: structure type ID + @param offset: current offset + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if no (more) offsets in the structure, + otherwise returns previous offset in a structure. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + This function returns a member offset or a hole offset. + It will return size of the structure if input + 'offset' is bigger than the structure size. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_prev_struc_idx in module ida_struct: + +get_prev_struc_idx(*args) -> 'uval_t' + get_prev_struc_idx(idx) -> uval_t + + + Get previous struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is negative, otherwise idx - 1 + +Help on function get_process_state in module ida_dbg: + +get_process_state(*args) -> 'int' + get_process_state() -> int + + + Return the state of the currently debugged process. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @return: one of Debugged process states + +Help on function get_processes in module ida_dbg: + +get_processes(*args) -> 'ssize_t' + get_processes(proclist) -> ssize_t + + + Take a snapshot of running processes and return their description. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param proclist (C++: procinfo_vec_t *) + @return: number of processes or -1 on error + +Help on function get_qword in module ida_bytes: + +get_qword(*args) -> 'uint64' + get_qword(ea) -> uint64 + + + Get one qword (64-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_reg_value in module idc: + +get_reg_value(name) + Get register value + + @param name: the register name + + @note: The debugger should be running. otherwise the function fails + the register name should be valid. + It is not necessary to use this function to get register values + because a register name in the script will do too. + + @return: register value (integer or floating point) + +Help on function get_ret_tev_return in module ida_dbg: + +get_ret_tev_return(*args) -> 'ea_t' + get_ret_tev_return(n) -> ea_t + + + Get the return address from a function return trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function return event. + +Help on function get_root_filename in module ida_nalt: + +get_root_filename(*args) -> 'size_t' + get_root_filename() -> str + + + Get file name only of the input file. + +Help on function get_screen_ea in module ida_kernwin: + +get_screen_ea(*args) -> 'ea_t' + get_screen_ea() -> ea_t + + + Get the address at the screen cursor ( 'ui_screenea' ) + +Help on function get_segm_attr in module idc: + +get_segm_attr(segea, attr) + Get segment attribute + + @param segea: any address within segment + @param attr: one of SEGATTR_... constants + +Help on function get_segm_by_sel in module idc: + +get_segm_by_sel(base) + Get segment by segment base + + @param base: segment base paragraph or selector + + @return: linear address of the start of the segment or BADADDR + if no such segment + +Help on function get_segm_end in module idc: + +get_segm_end(ea) + Get end address of a segment + + @param ea: any address in the segment + + @return: end of segment (an address past end of the segment) + BADADDR - the specified address doesn't belong to any segment + +Help on function get_segm_name in module idc: + +get_segm_name(ea) + Get name of a segment + + @param ea: any address in the segment + + @return: "" - no segment at the specified address + +Help on function get_segm_start in module idc: + +get_segm_start(ea) + Get start address of a segment + + @param ea: any address in the segment + + @return: start of segment + BADADDR - the specified address doesn't belong to any segment + +Help on function get_source_linnum in module ida_nalt: + +get_source_linnum(*args) -> 'uval_t' + get_source_linnum(ea) -> uval_t + +Help on function get_sourcefile in module ida_lines: + +get_sourcefile(*args) -> 'char const *' + get_sourcefile(ea, bounds=None) -> char const * + + + Get name of source file occupying the given address. + + @param ea: linear address (C++: ea_t) + @param bounds: pointer to the output buffer with the address range for + the current file. May be NULL. (C++: range_t *) + @return: NULL if source file information is not found, otherwise + returns pointer to file name + +Help on function get_sp_delta in module idc: + +get_sp_delta(ea) + Get modification of SP made by the instruction + + @param ea: end address of the instruction + i.e.the last address of the instruction+1 + + @return: Get modification of SP made at the specified location + If the specified location doesn't contain a SP change point, return 0 + Otherwise return delta of SP modification + +Help on function get_spd in module idc: + +get_spd(ea) + Get current delta for the stack pointer + + @param ea: end address of the instruction + i.e.the last address of the instruction+1 + + @return: The difference between the original SP upon + entering the function and SP for the specified address + +Help on function get_sreg in module idc: + +get_sreg(ea, reg) + Get value of segment register at the specified address + + @param ea: linear address + @param reg: name of segment register + + @return: the value of the segment register or -1 on error + + @note: The segment registers in 32bit program usually contain selectors, + so to get paragraph pointed to by the segment register you need to + call sel2para() function. + +Help on function get_step_trace_options in module ida_dbg: + +get_step_trace_options(*args) -> 'int' + get_step_trace_options() -> int + + + Get current step tracing options. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: Step trace options + +Help on function get_str_type in module idc: + +get_str_type(ea) + Get string type + + @param ea: linear address + + @return: One of STRTYPE_... constants + +Help on function get_strlit_contents in module idc: + +get_strlit_contents(ea, length=-1, strtype=0) + Get string contents + @param ea: linear address + @param length: string length. -1 means to calculate the max string length + @param strtype: the string type (one of STRTYPE_... constants) + + @return: string contents or empty string + +Help on function get_struc_by_idx in module ida_struct: + +get_struc_by_idx(*args) -> 'tid_t' + get_struc_by_idx(idx) -> tid_t + + + Get struct id by struct number. + + + @param idx (C++: uval_t) + +Help on function get_struc_cmt in module ida_struct: + +get_struc_cmt(*args) -> 'qstring *' + get_struc_cmt(id, repeatable) -> str + + + Get struct comment. + + + @param id (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_struc_id in module ida_struct: + +get_struc_id(*args) -> 'tid_t' + get_struc_id(name) -> tid_t + + + Get struct id by name. + + + @param name (C++: const char *) + +Help on function get_struc_idx in module ida_struct: + +get_struc_idx(*args) -> 'uval_t' + get_struc_idx(id) -> uval_t + + + Get internal number of the structure. + + + @param id (C++: tid_t) + +Help on function get_struc_name in module ida_struct: + +get_struc_name(*args) -> 'qstring *' + get_struc_name(id, flags=0) -> str + + + Get struct name by id + + @param id: struct id (C++: tid_t) + @param flags: Struct name flags (C++: int) + +Help on function get_struc_qty in module ida_struct: + +get_struc_qty(*args) -> 'size_t' + get_struc_qty() -> size_t + + + Get number of known structures. + +Help on function get_struc_size in module ida_struct: + +get_struc_size(*args) -> 'asize_t' + get_struc_size(sptr) -> asize_t + get_struc_size(id) -> asize_t + + + Get struct size (also see 'get_struc_size(tid_t)' ) + + + @param sptr (C++: const struc_t *) + +Help on function get_tev_ea in module ida_dbg: + +get_tev_ea(*args) -> 'ea_t' + get_tev_ea(n) -> ea_t + +Help on function get_tev_reg_mem in module ida_dbg: + +get_tev_reg_mem(tev, idx) + +Help on function get_tev_reg_mem_ea in module ida_dbg: + +get_tev_reg_mem_ea(tev, idx) + +Help on function get_tev_reg_mem_qty in module ida_dbg: + +get_tev_reg_mem_qty(tev) + +Help on function get_tev_qty in module ida_dbg: + +get_tev_qty(*args) -> 'int' + get_tev_qty() -> int + + + Get number of trace events available in trace buffer. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_tev_reg_val in module ida_dbg: + +get_tev_reg_val(tev, reg) + +Help on function get_tev_tid in module ida_dbg: + +get_tev_tid(*args) -> 'int' + get_tev_tid(n) -> int + +Help on function get_tev_type in module ida_dbg: + +get_tev_type(*args) -> 'int' + get_tev_type(n) -> int + +Help on function get_thread_qty in module ida_dbg: + +get_thread_qty(*args) -> 'int' + get_thread_qty() -> int + + + Get number of threads. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_tinfo in module idc: + +get_tinfo(ea) + Get type information of function/variable as 'typeinfo' object + + @param ea: the address of the object + @return: None on failure, or (type, fields) tuple. + +Help on function get_trace_file_desc in module ida_dbg: + +get_trace_file_desc(*args) -> 'qstring *' + get_trace_file_desc(filename) -> str + + + Get the file header of the specified trace file. + + + @param filename (C++: const char *) + +Help on function get_type in module idc: + +get_type(ea) + Get type of function/variable + + @param ea: the address of the object + + @return: type string or None if failed + +Help on function get_wide_byte in module ida_bytes: + +get_wide_byte(*args) -> 'uint64' + get_wide_byte(ea) -> uint64 + + + Get one wide byte of the program at 'ea'. Some processors may access + more than 8bit quantity at an address. These processors have 32-bit + byte organization from the IDA's point of view. + + @param ea (C++: ea_t) + +Help on function get_wide_dword in module ida_bytes: + +get_wide_dword(*args) -> 'uint64' + get_wide_dword(ea) -> uint64 + + + Get two wide words (4 'bytes') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in + \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 + + @param ea (C++: ea_t) + +Help on function get_wide_word in module ida_bytes: + +get_wide_word(*args) -> 'uint64' + get_wide_word(ea) -> uint64 + + + Get one wide word (2 'byte') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_xref_type in module idc: + +get_xref_type() + Return type of the last xref obtained by + [RD]first/next[B0] functions. + + @return: constants fl_* or dr_* + +Help on function getn_enum in module ida_enum: + +getn_enum(*args) -> 'enum_t' + getn_enum(n) -> enum_t + + + Get enum by its ordinal number (0..n). + + + @param n (C++: size_t) + +Help on function getn_thread in module ida_dbg: + +getn_thread(*args) -> 'thid_t' + getn_thread(n) -> thid_t + + + Get the ID of a thread. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: + int) + @return: NO_THREAD if the thread doesn't exist. + +Help on function getn_thread_name in module ida_dbg: + +getn_thread_name(*args) -> 'char const *' + getn_thread_name(n) -> char const * + + + Get the NAME of a thread \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 + for the current thread (C++: int) + @return: thread name or NULL if the thread doesn't exist. + +Help on function guess_type in module idc: + +guess_type(ea) + Guess type of function/variable + + @param ea: the address of the object, can be the structure member id too + + @return: type string or None if failed + +Help on function hasName in module idc: + +hasName(F) + +Help on function hasUserName in module idc: + +hasUserName(F) + +Help on function has_value in module idc: + +has_value(F) + +Help on function here in module idc: + +here() + # Convenience functions: + +Help on function idadir in module idc: + +idadir() + Get IDA directory + + This function returns the directory where IDA.EXE resides + +Help on function import_type in module idc: + +import_type(idx, type_name) + Copy information from type library to database + Copy structure, union, or enum definition from the type library + to the IDA database. + + @param idx: the position of the new type in the list of + types (structures or enums) -1 means at the end of the list + @param type_name: name of type to copy + + @return: BADNODE-failed, otherwise the type id (structure id or enum id) + +Help on function isBin0 in module idc: + +isBin0(F) + +Help on function isBin1 in module idc: + +isBin1(F) + +Help on function isDec0 in module idc: + +isDec0(F) + +Help on function isDec1 in module idc: + +isDec1(F) + +Help on function isExtra in module idc: + +isExtra(F) + +Help on function isHex0 in module idc: + +isHex0(F) + +Help on function isHex1 in module idc: + +isHex1(F) + +Help on function isOct0 in module idc: + +isOct0(F) + +Help on function isOct1 in module idc: + +isOct1(F) + +Help on function isRef in module idc: + +isRef(F) + +Help on function is_align in module idc: + +is_align(F) + +Help on function is_bf in module ida_enum: + +is_bf(*args) -> 'bool' + is_bf(id) -> bool + + + Is enum a bitfield? (otherwise - plain enum, no bitmasks except for + 'DEFMASK' are allowed) + + @param id (C++: enum_t) + +Help on function is_byte in module idc: + +is_byte(F) + +Help on function is_char0 in module idc: + +is_char0(F) + +Help on function is_char1 in module idc: + +is_char1(F) + +Help on function is_code in module idc: + +is_code(F) + +Help on function is_data in module idc: + +is_data(F) + +Help on function is_defarg0 in module idc: + +is_defarg0(F) + +Help on function is_defarg1 in module idc: + +is_defarg1(F) + +Help on function is_double in module idc: + +is_double(F) + +Help on function is_dword in module idc: + +is_dword(F) + +Help on function is_enum0 in module idc: + +is_enum0(F) + +Help on function is_enum1 in module idc: + +is_enum1(F) + +Help on function is_event_handled in module idc: + +is_event_handled() + Is the debug event handled? + + @return: boolean + +Help on function is_float in module idc: + +is_float(F) + +Help on function is_flow in module idc: + +is_flow(F) + +Help on function is_head in module idc: + +is_head(F) + +Help on function is_loaded in module idc: + +is_loaded(ea) + Is the byte initialized? + +Help on function is_manual0 in module idc: + +is_manual0(F) + +Help on function is_manual1 in module idc: + +is_manual1(F) + +Help on function is_mapped in module idc: + +is_mapped(ea) + +Help on function is_off0 in module idc: + +is_off0(F) + +Help on function is_off1 in module idc: + +is_off1(F) + +Help on function is_oword in module idc: + +is_oword(F) + +Help on function is_pack_real in module idc: + +is_pack_real(F) + +Help on function is_qword in module idc: + +is_qword(F) + +Help on function is_seg0 in module idc: + +is_seg0(F) + +Help on function is_seg1 in module idc: + +is_seg1(F) + +Help on function is_stkvar0 in module idc: + +is_stkvar0(F) + +Help on function is_stkvar1 in module idc: + +is_stkvar1(F) + +Help on function is_strlit in module idc: + +is_strlit(F) + +Help on function is_stroff0 in module idc: + +is_stroff0(F) + +Help on function is_stroff1 in module idc: + +is_stroff1(F) + +Help on function is_struct in module idc: + +is_struct(F) + +Help on function is_tail in module idc: + +is_tail(F) + +Help on function is_tbyte in module idc: + +is_tbyte(F) + +Help on function is_union in module idc: + +is_union(sid) + Is a structure a union? + + @param sid: structure type ID + + @return: 1: yes, this is a union id + 0: no + + @note: Unions are a special kind of structures + +Help on function is_unknown in module idc: + +is_unknown(F) + +Help on function is_valid_trace_file in module ida_dbg: + +is_valid_trace_file(*args) -> 'bool' + is_valid_trace_file(filename) -> bool + + + Is the specified file a valid trace file for the current database? + + + @param filename (C++: const char *) + +Help on function is_word in module idc: + +is_word(F) + +Help on function jumpto in module ida_kernwin: + +jumpto(*args) -> 'bool' + jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool + jumpto(custom_viewer, place, x, y) -> bool + + + Jump to the specified address ( 'ui_jumpto' ). + + @param ea: destination (C++: ea_t) + @param opnum: -1: don't change x coord (C++: int) + @param uijmp_flags: Jump flags (C++: int) + @return: success + +Help on function load_and_run_plugin in module ida_loader: + +load_and_run_plugin(*args) -> 'bool' + load_and_run_plugin(name, arg) -> bool + + + Load & run a plugin. + + + @param name (C++: const char *) + @param arg (C++: size_t) + +Help on function load_debugger in module ida_dbg: + +load_debugger(*args) -> 'bool' + load_debugger(dbgname, use_remote) -> bool + +Help on function load_trace_file in module ida_dbg: + +load_trace_file(*args) -> 'qstring *' + load_trace_file(filename) -> str + + + Load a recorded trace file in the trace window. If the call succeeds + and 'buf' is not null, the description of the trace stored in the + binary trace file will be returned in 'buf' + + @param filename (C++: const char *) + +Help on function loadfile in module idc: + +loadfile(filepath, pos, ea, size) + +Help on function ltoa in module idc: + +ltoa(n, radix) + +Help on function make_array in module idc: + +make_array(ea, nitems) + Create an array. + + @param ea: linear address + @param nitems: size of array in items + + @note: This function will create an array of the items with the same type as + the type of the item at 'ea'. If the byte at 'ea' is undefined, then + this function will create an array of bytes. + +Help on function move_segm in module idc: + +move_segm(ea, to, flags) + 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 + + @param ea: any address within the segment to move + @param to: new segment start address + @param flags: combination MFS_... constants + + @returns: MOVE_SEGM_... error code + +Help on function msg in module ida_kernwin: + +msg(*args) -> 'PyObject *' + msg(o) -> PyObject * + + + Display an UTF-8 string in the message window + + The result of the stringification of the arguments + will be treated as an UTF-8 string. + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + +Help on function next_addr in module ida_bytes: + +next_addr(*args) -> 'ea_t' + next_addr(ea) -> ea_t + + + Get next address in the program (i.e. next address which has flags). + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function next_func_chunk in module idc: + +next_func_chunk(funcea, tailea) + Get the next function chunk of the specified function + + @param funcea: any address in the function + @param tailea: any address in the current chunk + + @return: the starting address of the next function chunk or BADADDR + + @note: This function returns the next chunk of the specified function + +Help on function next_head in module idc: + +next_head(ea, maxea=BADADDR)↗ + Get next defined item (instruction or data) in the program + + @param ea: linear address to start search from + @param maxea: the search will stop at the address + maxea is not included in the search range + + @return: BADADDR - no (more) defined items + +Help on function next_not_tail in module ida_bytes: + +next_not_tail(*args) -> 'ea_t' + next_not_tail(ea) -> ea_t + + + Get address of next non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function op_bin in module ida_bytes: + +op_bin(*args) -> 'bool' + op_bin(ea, n) -> bool + + + set op type to 'bin_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_chr in module ida_bytes: + +op_chr(*args) -> 'bool' + op_chr(ea, n) -> bool + + + set op type to 'char_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_dec in module ida_bytes: + +op_dec(*args) -> 'bool' + op_dec(ea, n) -> bool + + + set op type to 'dec_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_enum in module ida_bytes: + +op_enum(*args) -> 'bool' + op_enum(ea, n, id, serial) -> bool + + + Set operand representation to be 'enum_t'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @param id: id of enum (C++: enum_t) + @param serial: the serial number of the constant in the enumeration, + usually 0. the serial numbers are used if the + enumeration contains several constants with the same + value (C++: uchar) + @return: success + +Help on function op_flt in module ida_bytes: + +op_flt(*args) -> 'bool' + op_flt(ea, n) -> bool + + + set op type to 'flt_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_hex in module ida_bytes: + +op_hex(*args) -> 'bool' + op_hex(ea, n) -> bool + + + set op type to 'hex_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function set_forced_operand in module ida_bytes: + +set_forced_operand(*args) -> 'bool' + set_forced_operand(ea, n, op) -> bool + + + Set forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @param op: text of operand NULL: do nothing (return 0) "" : delete + forced operand (C++: const char *) + @return: success + +Help on function op_num in module ida_bytes: + +op_num(*args) -> 'bool' + op_num(ea, n) -> bool + + + set op type to 'num_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_oct in module ida_bytes: + +op_oct(*args) -> 'bool' + op_oct(ea, n) -> bool + + + set op type to 'oct_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_offset in module ida_offset: + +op_offset(*args) -> 'int' + op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int + + + See 'op_offset_ex()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param type (C++: reftype_t) + @param target (C++: ea_t) + @param base (C++: ea_t) + @param tdelta (C++: adiff_t) + +Help on function op_offset_high16 in module idc: + +op_offset_high16(ea, n, target) + Convert operand to a high offset + High offset is the upper 16bits of an offset. + This type is used by TMS320C6 processors (and probably by other + RISC processors too) + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param target: the full value (all 32bits) of the offset + +Help on function op_plain_offset in module idc: + +op_plain_offset(ea, n, base) + Convert operand to an offset + (for the explanations of 'ea' and 'n' please see op_bin()) + + Example: + ======== + + seg000:2000 dw 1234h + + and there is a segment at paragraph 0x1000 and there is a data item + within the segment at 0x1234: + + seg000:1234 MyString db 'Hello, world!',0 + + Then you need to specify a linear address of the segment base to + create a proper offset: + + op_plain_offset(["seg000",0x2000],0,0x10000); + + and you will have: + + seg000:2000 dw offset MyString + + Motorola 680x0 processor have a concept of "outer offsets". + If you want to create an outer offset, you need to combine number + of the operand with the following bit: + + Please note that the outer offsets are meaningful only for + Motorola 680x0. + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param base: base of the offset as a linear address + If base == BADADDR then the current operand becomes non-offset + +Help on function op_seg in module ida_bytes: + +op_seg(*args) -> 'bool' + op_seg(ea, n) -> bool + + + Set operand representation to be 'segment'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stkvar in module ida_bytes: + +op_stkvar(*args) -> 'bool' + op_stkvar(ea, n) -> bool + + + Set operand representation to be 'stack variable'. Should be applied + to an instruction within a function. Should be applied after creating + a stack var using 'insn_t::create_stkvar()' . + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stroff in module idc: + +op_stroff(ea, n, strid, delta) + Convert operand to an offset in a structure + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param strid: id of a structure type + @param delta: struct offset delta. usually 0. denotes the difference + between the structure base and the pointer into the structure. + +Help on function parse_decl in module idc: + +parse_decl(inputtype, flags) + Parse type declaration + + @param inputtype: file name or C declarations (depending on the flags) + @param flags: combination of PT_... constants or 0 + + @return: None on failure or (name, type, fields) tuple + +Help on function parse_decls in module idc: + +parse_decls(inputtype, flags=0) + Parse type declarations + + @param inputtype: file name or C declarations (depending on the flags) + @param flags: combination of PT_... constants or 0 + + @return: number of parsing errors (0 no errors) + +Help on function patch_byte in module ida_bytes: + +patch_byte(*args) -> 'bool' + patch_byte(ea, x) -> bool + + + Patch a byte of the program. The original value of the byte is saved + and can be obtained by 'get_original_byte()' . This function works for + wide byte processors too. + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function put_dbg_byte in module ida_dbg: + +put_dbg_byte(*args) -> 'bool' + put_dbg_byte(ea, x) -> bool + + + Change one byte of the debugged process memory. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint32) + @return: true if the process memory has been modified + +Help on function patch_dword in module ida_bytes: + +patch_dword(*args) -> 'bool' + patch_dword(ea, x) -> bool + + + Patch a dword of the program. The original value of the dword is saved + and can be obtained by 'get_original_dword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_qword in module ida_bytes: + +patch_qword(*args) -> 'bool' + patch_qword(ea, x) -> bool + + + Patch a qword of the program. The original value of the qword is saved + and can be obtained by 'get_original_qword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_word in module ida_bytes: + +patch_word(*args) -> 'bool' + patch_word(ea, x) -> bool + + + Patch a word of the program. The original value of the word is saved + and can be obtained by 'get_original_word()' . This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function plan_and_wait in module idc: + +plan_and_wait(sEA, eEA, final_pass=True) + Perform full analysis of the range + + @param sEA: starting linear address + @param eEA: ending linear address (excluded) + @param final_pass: make the final pass over the specified range + + @return: 1-ok, 0-Ctrl-Break was pressed. + +Help on function plan_to_apply_idasgn in module ida_funcs: + +plan_to_apply_idasgn(*args) -> 'int' + plan_to_apply_idasgn(fname) -> int + + + Add a signature file to the list of planned signature files. + + @param fname: file name. should not contain directory part. (C++: + const char *) + @return: 0 if failed, otherwise number of planned (and applied) + signatures + +Help on function prev_addr in module ida_bytes: + +prev_addr(*args) -> 'ea_t' + prev_addr(ea) -> ea_t + + + Get previous address in the program. + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function prev_head in module idc: + +prev_head(ea, minea=0) + Get previous defined item (instruction or data) in the program + + @param ea: linear address to start search from + @param minea: the search will stop at the address + minea is included in the search range + + @return: BADADDR - no (more) defined items + +Help on function prev_not_tail in module ida_bytes: + +prev_not_tail(*args) -> 'ea_t' + prev_not_tail(ea) -> ea_t + + + Get address of previous non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function print_decls in module idc: + +print_decls(ordinals, flags) + Print types in a format suitable for use in a header file + + @param ordinals: comma-separated list of type ordinals + @param flags: combination of PDF_... constants or 0 + + @return: string containing the type definitions + +Help on _Feature in module __future__ object: + +class _Feature(builtins.object) + | Methods defined here: + | + | __init__(self, optionalRelease, mandatoryRelease, compiler_flag) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__(self) + | Return repr(self). + | + | getMandatoryRelease(self) + | Return release in which this feature will become mandatory. + | + | This is a 5-tuple, of the same form as sys.version_info, or, if + | the feature was dropped, is None. + | + | getOptionalRelease(self) + | Return first release in which this feature was recognized. + | + | This is a 5-tuple, of the same form as sys.version_info. + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function print_insn_mnem in module idc: + +print_insn_mnem(ea) + Get instruction mnemonics + + @param ea: linear address of instruction + + @return: "" - no instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function print_operand in module idc: + +print_operand(ea, n) + Get operand of an instruction or data + + @param ea: linear address of the item + @param n: number of operand: + 0 - the first operand + 1 - the second operand + + @return: the current text representation of operand or "" + +Help on function process_config_line in module idc: + +process_config_line(directive) + Parse one or more ida.cfg config directives + @param directive: directives to process, for example: PACK_DATABASE=2 + + @note: If the directives are erroneous, a fatal error will be generated. + The settings are permanent: effective for the current session and the next ones + +Help on function process_ui_action in module idc: + +process_ui_action(name, flags=0) + Invokes an IDA UI action by name + + @param name: Command name + @param flags: Reserved. Must be zero + @return: Boolean + +Help on function mark_position in module ida_idc: + +mark_position(*args) -> 'void' + mark_position(ea, lnnum, x, y, slot, comment) + +Help on function qexit in module ida_pro: + +qexit(*args) -> 'void' + qexit(code) + + + Call qatexit functions, shut down UI and kernel, and exit. + + @param code: exit code (C++: int) + +Help on function qsleep in module idc: + +qsleep(milliseconds) + qsleep the specified number of milliseconds + This function suspends IDA for the specified amount of time + + @param milliseconds: time to sleep + +Help on function read_dbg_byte in module idc: + +read_dbg_byte(ea) + Get value of program byte using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_dbg_dword in module idc: + +read_dbg_dword(ea) + Get value of program double-word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function dbg_read_memory in module ida_idd: + +dbg_read_memory(*args) -> 'PyObject *' + dbg_read_memory(ea, sz) -> PyObject * + + + Reads from the debugee's memory at the specified ea + @return: + - The read buffer (as a string) + - Or None on failure + +Help on function read_dbg_qword in module idc: + +read_dbg_qword(ea) + Get value of program quadro-word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_dbg_word in module idc: + +read_dbg_word(ea) + Get value of program word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_selection_end in module idc: + +read_selection_end() + Get end address of the selected range + + @return: BADADDR - the user has not selected an range + +Help on function read_selection_start in module idc: + +read_selection_start() + Get start address of the selected range + returns BADADDR - the user has not selected an range + +Help on function readlong in module idc: + +readlong(handle, mostfirst) + +Help on function readshort in module idc: + +readshort(handle, mostfirst) + +Help on function readstr in module idc: + +readstr(handle) + +Help on function rebase_program in module ida_segment: + +rebase_program(*args) -> 'int' + rebase_program(delta, flags) -> int + + + Rebase the whole program by 'delta' bytes. + + @param delta: number of bytes to move the program (C++: adiff_t) + @param flags: Move segment flags it is recommended to use + MSF_FIXONCE so that the loader takes care of global + variables it stored in the database (C++: int) + @return: Move segment result codes + +Help on function recalc_spd in module ida_frame: + +recalc_spd(*args) -> 'bool' + recalc_spd(cur_ea) -> bool + + + Recalculate SP delta for an instruction that stops execution. The next + instruction is not reached from the current instruction. We need to + recalculate SP for the next instruction.This function will create a + new automatic SP register change point if necessary. It should be + called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the + current instruction doesn't pass the execution flow to the next + instruction. + + @param cur_ea: linear address of the current instruction (C++: ea_t) + +Help on function refresh_debugger_memory in module ida_dbg: + +refresh_debugger_memory(*args) -> 'PyObject *' + refresh_debugger_memory() -> PyObject * + + + Refreshes the debugger memory + @return: Nothing + +Help on function refresh_idaview_anyway in module ida_kernwin: + +refresh_idaview_anyway(*args) -> 'void' + refresh_idaview_anyway() + + + Refresh all disassembly views ( 'ui_refresh' ), forces an immediate + refresh. Please consider 'request_refresh()' instead + +Help on function refresh_choosers in module ida_kernwin: + +refresh_choosers(*args) -> 'void' + refresh_choosers() + +Help on function remove_fchunk in module idc: + +remove_fchunk(funcea, tailea) + Remove a function chunk from the function + + @param funcea: any address in the function + @param tailea: any address in the function chunk to remove + + @return: 0 if failed, 1 if success + +Help on function rename_array in module idc: + +rename_array(array_id, newname) + Rename array, by its ID. + + @param id: The ID of the array to rename. + @param newname: The new name of the array. + + @return: 1 in case of success, 0 otherwise + +Help on function rename_entry in module ida_entry: + +rename_entry(*args) -> 'bool' + rename_entry(ord, name, flags=0) -> bool + + + Rename entry point. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to a repeatable + comment. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +Help on function resume_process in module idc: + +resume_process() + +Help on function resume_thread in module ida_dbg: + +resume_thread(*args) -> 'int' + resume_thread(tid) -> int + + + Resume thread. \sq{Type, Synchronous function - available as request, + Notification, none (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function retrieve_input_file_md5 in module ida_nalt: + +retrieve_input_file_md5(*args) -> 'uchar [ANY]' + retrieve_input_file_md5() -> str + + + Get input file md5. + +Help on function rotate_byte in module idc: + +rotate_byte(x, count) + +Help on function rotate_dword in module idc: + +rotate_dword(x, count) + +Help on function rotate_left in module idc: + +rotate_left(value, count, nbits, offset) + Rotate a value to the left (or right) + + @param value: value to rotate + @param count: number of times to rotate. negative counter means + rotate to the right + @param nbits: number of bits to rotate + @param offset: offset of the first bit to rotate + + @return: the value with the specified field rotated + all other bits are not modified + +Help on function rotate_word in module idc: + +rotate_word(x, count) + +Help on function run_to in module ida_dbg: + +run_to(*args) -> 'bool' + run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Execute the process until the given address is reached. If no process + is active, a new process is started. Technically, the debugger sets up + a temporary breakpoint at the given address, and continues (or starts) + the execution of the whole process. So, all threads continue their + execution! \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_run_to' } + + @param ea: target address (C++: ea_t) + @param pid: not used yet. please do not specify this parameter. (C++: + pid_t) + @param tid: not used yet. please do not specify this parameter. (C++: + thid_t) + +Help on function save_database in module idc: + +save_database(idbname, flags=0) + Save current database to the specified idb file + + @param idbname: name of the idb file. if empty, the current idb + file will be used. + @param flags: combination of ida_loader.DBFL_... bits or 0 + +Help on function save_trace_file in module ida_dbg: + +save_trace_file(*args) -> 'bool' + save_trace_file(filename, description) -> bool + + + Save the current trace in the specified file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function savefile in module idc: + +savefile(filepath, pos, ea, size) + +Help on function sel2para in module idc: + +sel2para(sel) + Get a selector value + + @param sel: the selector number + + @return: selector value if found + otherwise the input value (sel) + + @note: selector values are always in paragraphs + +Help on function select_thread in module ida_dbg: + +select_thread(*args) -> 'bool' + select_thread(tid) -> bool + + + Select the given thread as the current debugged thread. All thread + related execution functions will work on this thread. The process must + be suspended to select a new thread. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param tid: ID of the thread to select (C++: thid_t) + @return: false if the thread doesn't exist. + +Help on function selector_by_name in module idc: + +selector_by_name(segname) + Get segment selector by name + + @param segname: name of segment + + @return: segment selector or BADADDR + +Help on function send_dbg_command in module idc: + +send_dbg_command(cmd) + Sends a command to the debugger module and returns the output string. + An exception will be raised if the debugger is not running or the current debugger does not export + the 'send_dbg_command' IDC command. + +Help on function set_array_long in module idc: + +set_array_long(array_id, idx, value) + Sets the long value of an array element. + + @param array_id: The array ID. + @param idx: Index of an element. + @param value: 32bit or 64bit value to store in the array + + @return: 1 in case of success, 0 otherwise + +Help on function set_array_params in module idc: + +set_array_params(ea, flags, litems, align) + Set array representation format + + @param ea: linear address + @param flags: combination of AP_... constants or 0 + @param litems: number of items per line. 0 means auto + @param align: element alignment + - -1: do not align + - 0: automatic alignment + - other values: element width + + @return: 1-ok, 0-failure + +Help on function set_array_string in module idc: + +set_array_string(array_id, idx, value) + Sets the string value of an array element. + + @param array_id: The array ID. + @param idx: Index of an element. + @param value: String value to store in the array + + @return: 1 in case of success, 0 otherwise + +Help on function set_bmask_cmt in module idc: + +set_bmask_cmt(enum_id, bmask, cmt, repeatable) + Set bitmask comment (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param cmt: comment + repeatable - type of comment, 0-regular, 1-repeatable + + @return: 1-ok, 0-failed + +Help on function set_bmask_name in module idc: + +set_bmask_name(enum_id, bmask, name) + Set bitmask name (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param name: name of bitmask + + @return: 1-ok, 0-failed + +Help on function set_bpt_attr in module idc: + +set_bpt_attr(address, bptattr, value) + modifiable characteristics of a breakpoint + + @param address: any address in the breakpoint range + @param bptattr: the attribute code, one of BPTATTR_* constants + BPTATTR_CND is not allowed, see set_bpt_cond() + @param value: the attibute value + + @return: success + +Help on function set_bpt_cond in module idc: + +set_bpt_cond(ea, cnd, is_lowcnd=0) + Set breakpoint condition + + @param ea: any address in the breakpoint range + @param cnd: breakpoint condition + @param is_lowcnd: 0 - regular condition, 1 - low level condition + + @return: success + +Help on function set_cmt in module ida_bytes: + +set_cmt(*args) -> 'bool' + set_cmt(ea, comm, rptble) -> bool + + + Set an indented comment. + + @param ea: linear address (C++: ea_t) + @param comm: comment string NULL: do nothing (return 0) "" : + delete comment (C++: const char *) + @param rptble: is repeatable? (C++: bool) + @return: success + +Help on function set_color in module idc: + +set_color(ea, what, color) + Set item color + + @param ea: address of the item + @param what: type of the item (one of CIC_* constants) + @param color: new color code in RGB (hex 0xBBGGRR) + + @return: success (True or False) + +Help on function set_debugger_event_cond in module ida_dbg: + +set_debugger_event_cond(*args) -> 'void' + set_debugger_event_cond(nonnul_cond) + +Help on function set_debugger_options in module ida_dbg: + +set_debugger_options(*args) -> 'uint' + set_debugger_options(options) -> uint + + + Set debugger options. Replaces debugger options with the specification + combination 'Debugger options' + + @param options (C++: uint) + @return: the old debugger options + +Help on function set_default_sreg_value in module idc: + +set_default_sreg_value(ea, reg, value) + Set default segment register value for a segment + + @param ea: any address in the segment + if no segment is present at the specified address + then all segments will be affected + @param reg: name of segment register + @param value: default value of the segment register. -1-undefined. + +Help on function set_enum_bf in module ida_enum: + +set_enum_bf(*args) -> 'bool' + set_enum_bf(id, bf) -> bool + + + Set 'bitfield' bit of enum (i.e. convert it to a bitfield) + + + @param id (C++: enum_t) + @param bf (C++: bool) + +Help on function set_enum_cmt in module ida_enum: + +set_enum_cmt(*args) -> 'bool' + set_enum_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum type. + + + @param id (C++: enum_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_flag in module ida_enum: + +set_enum_flag(*args) -> 'bool' + set_enum_flag(id, flag) -> bool + + + Set data representation flags. + + + @param id (C++: enum_t) + @param flag (C++: flags_t) + +Help on function set_enum_idx in module ida_enum: + +set_enum_idx(*args) -> 'bool' + set_enum_idx(id, idx) -> bool + + + Set serial number of enum. Also see 'get_enum_idx()' . + + @param id (C++: enum_t) + @param idx (C++: size_t) + +Help on function set_enum_member_cmt in module ida_enum: + +set_enum_member_cmt(*args) -> 'bool' + set_enum_member_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum member. + + + @param id (C++: const_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_member_name in module ida_enum: + +set_enum_member_name(*args) -> 'bool' + set_enum_member_name(id, name) -> bool + + + Set name of enum member. + + + @param id (C++: const_t) + @param name (C++: const char *) + +Help on function set_enum_name in module ida_enum: + +set_enum_name(*args) -> 'bool' + set_enum_name(id, name) -> bool + + + Set name of enum type. + + + @param id (C++: enum_t) + @param name (C++: const char *) + +Help on function set_enum_width in module ida_enum: + +set_enum_width(*args) -> 'bool' + set_enum_width(id, width) -> bool + + + See comment for 'get_enum_width()' + + + @param id (C++: enum_t) + @param width (C++: int) + +Help on function set_fchunk_attr in module idc: + +set_fchunk_attr(ea, attr, value) + Set a function chunk attribute + + @param ea: any address in the chunk + @param attr: only FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER + @param value: desired value + + @return: 0 if failed, 1 if success + +Help on function set_fixup in module idc: + +set_fixup(ea, fixuptype, fixupflags, targetsel, targetoff, displ) + Set fixup information + + @param ea: address to set fixup information about + @param fixuptype: fixup type. see get_fixup_target_type() + for possible fixup types. + @param fixupflags: fixup flags. see get_fixup_target_flags() + for possible fixup types. + @param targetsel: target selector + @param targetoff: target offset + @param displ: displacement + + @return: none + +Help on function set_flag in module idc: + +set_flag(off, bit, value) + #-------------------------------------------------------------------------- + +Help on function set_frame_size in module idc: + +set_frame_size(ea, lvsize, frregs, argsize) + Make function frame + + @param ea: any address belonging to the function + @param lvsize: size of function local variables + @param frregs: size of saved registers + @param argsize: size of function arguments + + @return: ID of function frame or -1 + If the function did not have a frame, the frame + will be created. Otherwise the frame will be modified + +Help on function set_func_attr in module idc: + +set_func_attr(ea, attr, value) + Set a function attribute + + @param ea: any address belonging to the function + @param attr: one of FUNCATTR_... constants + @param value: new value of the attribute + + @return: 1-ok, 0-failed + +Help on function set_func_cmt in module idc: + +set_func_cmt(ea, cmt, repeatable) + Set function comment + + @param ea: any address belonging to the function + @param cmt: a function comment line + @param repeatable: 1: get repeatable comment + 0: get regular comment + +Help on function set_func_end in module ida_funcs: + +set_func_end(*args) -> 'bool' + set_func_end(ea, newend) -> bool + + + Move function chunk end address. + + @param ea: any address in the function (C++: ea_t) + @param newend: new end address of the function (C++: ea_t) + @return: success + +Help on function set_func_flags in module idc: + +set_func_flags(ea, flags) + Change function flags + + @param ea: any address belonging to the function + @param flags: see get_func_flags() for explanations + + @return: !=0 - ok + +Help on function set_hash_long in module idc: + +set_hash_long(hash_id, key, value) + Sets the long value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + @param value: 32bit or 64bit value to store in the hash + + @return: 1 in case of success, 0 otherwise + +Help on function set_hash_string in module idc: + +set_hash_string(hash_id, key, value) + Sets the string value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + @param value: string value to store in the hash + + @return: 1 in case of success, 0 otherwise + +Help on function set_ida_state in module ida_auto: + +set_ida_state(*args) -> 'idastate_t' + set_ida_state(st) -> idastate_t + + + Change IDA status indicator value + + @param st: - new indicator status (C++: idastate_t) + @return: old indicator status + +Help on function set_inf_attr in module idc: + +set_inf_attr(attr, value) + +Help on function set_local_type in module idc: + +set_local_type(ordinal, input, flags) + Parse one type declaration and store it in the specified slot + + @param ordinal: slot number (1...NumberOfLocalTypes) + -1 means allocate new slot or reuse the slot + of the existing named type + @param input: C declaration. Empty input empties the slot + @param flags: combination of PT_... constants or 0 + + @return: slot number or 0 if error + +Help on function set_manual_insn in module ida_bytes: + +set_manual_insn(*args) -> 'void' + set_manual_insn(ea, manual_insn) + + + Set manual instruction string. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @param manual_insn: "" - delete manual string. NULL - do nothing (C++: + const char *) + +Help on function set_member_cmt in module idc: + +set_member_cmt(sid, member_offset, comment, repeatable) + Change structure member comment + + @param sid: structure type ID + @param member_offset: offset of the member + @param comment: new comment of the structure member + @param repeatable: 1: change repeatable comment + 0: change regular comment + + @return: != 0 - ok + +Help on function set_member_name in module idc: + +set_member_name(sid, member_offset, name) + Change structure member name + + @param sid: structure type ID + @param member_offset: offset of the member + @param name: new name of the member + + @return: != 0 - ok. + +Help on function set_member_type in module idc: + +set_member_type(sid, member_offset, flag, typeid, nitems, target=-1, tdelta=0, reftype=2) + Change structure member type + + @param sid: structure type ID + @param member_offset: offset of the member + @param flag: new type of the member. Should be one of + FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA + @param typeid: if is_struct(flag) then typeid specifies the structure id for the member + if is_off0(flag) then typeid specifies the offset base. + if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). + if is_stroff(flag) then typeid specifies the structure id + if is_enum(flag) then typeid specifies the enum id + if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) + Otherwise typeid should be -1. + @param nitems: number of items in the member + + @param target: target address of the offset expr. You may specify it as + -1, ida will calculate it itself + @param tdelta: offset target delta. usually 0 + @param reftype: see REF_... definitions + + @note: The remaining arguments are allowed only if is_off0(flag) and you want + to specify a complex offset expression + + @return: !=0 - ok. + +Help on function set_name in module idc: + +set_name(ea, name, flags=0) + Rename an address + + @param ea: linear address + @param name: new name of address. If name == "", then delete old name + @param flags: combination of SN_... constants + + @return: 1-ok, 0-failure + +Help on function set_processor_type in module ida_idp: + +set_processor_type(*args) -> 'bool' + set_processor_type(procname, level) -> bool + + + Set target processor type. Once a processor module is loaded, it + cannot be replaced until we close the idb. + + @param procname: name of processor type (one of names present in + \ph{psnames}) (C++: const char *) + @param level: SETPROC_ (C++: setproc_level_t) + @return: success + +Help on function set_reg_value in module idc: + +set_reg_value(value, name) + Set register value + + @param name: the register name + @param value: new register value + + @note: The debugger should be running + It is not necessary to use this function to set register values. + A register name in the left side of an assignment will do too. + +Help on function set_remote_debugger in module ida_dbg: + +set_remote_debugger(*args) -> 'void' + set_remote_debugger(host, _pass, port=-1) + + + Set remote debugging options. Should be used before starting the + debugger. + + @param host: If empty, IDA will use local debugger. If NULL, the host + will not be set. (C++: const char *) + @param port: If -1, the default port number will be used (C++: int) + +Help on function set_root_filename in module ida_nalt: + +set_root_filename(*args) -> 'void' + set_root_filename(file) + + + Set full path of the input file. + + + @param file (C++: const char *) + +Help on function set_segm_addressing in module idc: + +set_segm_addressing(ea, bitness) + Change segment addressing + + @param ea: any address in the segment + @param bitness: 0: 16bit, 1: 32bit, 2: 64bit + + @return: success (boolean) + +Help on function set_segm_alignment in module idc: + +set_segm_alignment(ea, alignment) + Change alignment of the segment + + @param ea: any address in the segment + @param alignment: new alignment of the segment (one of the sa... constants) + + @return: success (boolean) + +Help on function set_segm_attr in module idc: + +set_segm_attr(segea, attr, value) + Set segment attribute + + @param segea: any address within segment + @param attr: one of SEGATTR_... constants + + @note: Please note that not all segment attributes are modifiable. + Also some of them should be modified using special functions + like set_segm_addressing, etc. + +Help on function set_segm_class in module idc: + +set_segm_class(ea, segclass) + Change class of the segment + + @param ea: any address in the segment + @param segclass: new class of the segment + + @return: success (boolean) + +Help on function set_segm_combination in module idc: + +set_segm_combination(segea, comb) + Change combination of the segment + + @param segea: any address in the segment + @param comb: new combination of the segment (one of the sc... constants) + + @return: success (boolean) + +Help on function set_segm_name in module idc: + +set_segm_name(ea, name) + Change name of the segment + + @param ea: any address in the segment + @param name: new name of the segment + + @return: success (boolean) + +Help on function set_segm_type in module idc: + +set_segm_type(segea, segtype) + Set segment type + + @param segea: any address within segment + @param segtype: new segment type: + + @return: !=0 - ok + +Help on function set_segment_bounds in module idc: + +set_segment_bounds(ea, startea, endea, flags) + Change segment boundaries + + @param ea: any address in the segment + @param startea: new start address of the segment + @param endea: new end address of the segment + @param flags: combination of SEGMOD_... flags + + @return: boolean success + +Help on function set_selector in module ida_segment: + +set_selector(*args) -> 'int' + set_selector(selector, paragraph) -> int + + + Set mapping of selector to a paragraph. You should call this + functionbeforecreating a segment which uses the selector, otherwise + the creation of the segment will fail. + + @param selector: number of selector to map if selector == BADSEL , + then return 0 (fail) if the selector has had a + mapping, old mapping is destroyed if the selector + number is equal to paragraph value, then the mapping + is destroyed because we don't need to keep trivial + mappings. (C++: sel_t) + @param paragraph: paragraph to map selector (C++: ea_t) + +Help on function set_source_linnum in module ida_nalt: + +set_source_linnum(*args) -> 'void' + set_source_linnum(ea, lnnum) + +Help on function set_step_trace_options in module ida_dbg: + +set_step_trace_options(*args) -> 'void' + set_step_trace_options(options) + + + Modify step tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function change_storage_type in module ida_bytes: + +change_storage_type(*args) -> 'error_t' + change_storage_type(start_ea, end_ea, stt) -> error_t + + + Change flag storage type for address range. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: error code + +Help on function set_struc_cmt in module ida_struct: + +set_struc_cmt(*args) -> 'bool' + set_struc_cmt(id, cmt, repeatable) -> bool + + + Set structure comment. + + + @param id (C++: tid_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_struc_idx in module idc: + +set_struc_idx(sid, index) + Change structure index + + @param sid: structure type ID + @param index: new index of the structure + + @return: != 0 - ok + + @note: See get_first_struc_idx() for the explanation of + structure indices and IDs. + +Help on function set_struc_name in module ida_struct: + +set_struc_name(*args) -> 'bool' + set_struc_name(id, name) -> bool + + + Set structure name. + + + @param id (C++: tid_t) + @param name (C++: const char *) + +Help on function set_tail_owner in module idc: + +set_tail_owner(tailea, funcea) + Change the function chunk owner + + @param tailea: any address in the function chunk + @param funcea: the starting address of the new owner + + @return: False if failed, True if success + + @note: The new owner must already have the chunk appended before the call + +Help on function set_target_assembler in module ida_idp: + +set_target_assembler(*args) -> 'bool' + set_target_assembler(asmnum) -> bool + + + Set target assembler. + + @param asmnum: number of assembler in the current processor module + (C++: int) + @return: success + +Help on function set_trace_file_desc in module ida_dbg: + +set_trace_file_desc(*args) -> 'bool' + set_trace_file_desc(filename, description) -> bool + + + Change the description of the specified trace file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function split_sreg_range in module idc: + +split_sreg_range(ea, reg, value, tag=2) + Set value of a segment register. + + @param ea: linear address + @param reg: name of a register, like "cs", "ds", "es", etc. + @param value: new value of the segment register. + @param tag: of SR_... constants + + @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. + +Help on function start_process in module ida_dbg: + +start_process(*args) -> 'int' + start_process(path=None, args=None, sdir=None) -> int + + + Start a process in the debugger. \sq{Type, Asynchronous function - + available as Request, Notification, 'dbg_process_start' }You can also + use the 'run_to()' function to easily start the execution of a process + until a given address is reached.For all parameters, a NULL value + indicates the debugger will take the value from the defined Process + Options. + + @param path: path to the executable to start (C++: const char *) + @param args: arguments to pass to process (C++: const char *) + @param sdir: starting directory for the process (C++: const char *) + +Help on function step_into in module ida_dbg: + +step_into(*args) -> 'bool' + step_into() -> bool + + + Execute one instruction in the current thread. Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_into' } + +Help on function step_over in module ida_dbg: + +step_over(*args) -> 'bool' + step_over() -> bool + + + Execute one instruction in the current thread, but without entering + into functions. Others threads keep suspended. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_step_over' } + +Help on function step_until_ret in module ida_dbg: + +step_until_ret(*args) -> 'bool' + step_until_ret() -> bool + + + Execute instructions in the current thread until a function return + instruction is executed (aka "step out"). Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_until_ret' } + +Help on function strlen in module idc: + +strlen(s) + +Help on function strstr in module idc: + +strstr(s1, s2) + +Help on function substr in module idc: + +substr(s, x1, x2) + +Help on function suspend_process in module ida_dbg: + +suspend_process(*args) -> 'bool' + suspend_process() -> bool + + + Suspend the process in the debugger. \sq{ Type,Synchronous function + (if in a notification handler)Asynchronous function (everywhere + else)available as Request, Notification,none (if in a notification + handler) 'dbg_suspend_process' (everywhere else) }The + 'suspend_process()' function can be called from a notification handler + to force the stopping of the process. In this case, no notification + will be generated. When you suspend a process, the running command is + always aborted. + +Help on function suspend_thread in module ida_dbg: + +suspend_thread(*args) -> 'int' + suspend_thread(tid) -> int + + + Suspend thread. Suspending a thread may deadlock the whole application + if the suspended was owning some synchronization objects. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function take_memory_snapshot in module ida_segment: + +take_memory_snapshot(*args) -> 'bool' + take_memory_snapshot(only_loader_segs) -> bool + + + Take a memory snapshot of the running process. + + @param only_loader_segs: only is_loader_segm() segments will be + affected (C++: bool) + @return: success + +Help on function to_ea in module idc: + +to_ea(seg, off) + Return value of expression: ((seg<<4) + off) + +Help on function toggle_bnot in module idc: + +toggle_bnot(ea, n) + Toggle the bitwise not operator for the operand + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + +Help on function toggle_sign in module ida_bytes: + +toggle_sign(*args) -> 'bool' + toggle_sign(ea, n) -> bool + + + Toggle sign of n-th operand. allowed values of n: 0-first operand, + 1-other operands + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function update_extra_cmt in module ida_lines: + +update_extra_cmt(*args) -> 'void' + update_extra_cmt(ea, what, str) + +Help on function update_hidden_range in module idc: + +update_hidden_range(ea, visible) + Set hidden range state + + @param ea: any address belonging to the hidden range + @param visible: new state of the range + + @return: != 0 - ok + +Help on function validate_idb_names in module idc: + +validate_idb_names(do_repair=0) + check consistency of IDB name records + @param do_repair: try to repair netnode header it TRUE + @return: number of inconsistent name records + +Help on function value_is_float in module idc: + +value_is_float(var) + +Help on function value_is_func in module idc: + +value_is_func(var) + +Help on function value_is_int64 in module idc: + +value_is_int64(var) + +Help on function value_is_long in module idc: + +value_is_long(var) + +Help on function value_is_pvoid in module idc: + +value_is_pvoid(var) + +Help on function value_is_string in module idc: + +value_is_string(var) + # List of built-in functions + # -------------------------- + # + # The following conventions are used in this list: + # 'ea' is a linear address + # 'success' is 0 if a function failed, 1 otherwise + # 'void' means that function returns no meaningful value (always 0) + # + # All function parameter conversions are made automatically. + # + # ---------------------------------------------------------------------------- + # M I S C E L L A N E O U S + # ---------------------------------------------------------------------------- + +Help on function wait_for_next_event in module ida_dbg: + +wait_for_next_event(*args) -> 'dbg_event_code_t' + wait_for_next_event(wfne, timeout) -> dbg_event_code_t + + + Wait for the next event.This function (optionally) resumes the process + execution, and waits for a debugger event until a possible timeout + occurs. + + @param wfne: combination of Wait for debugger event flags constants + (C++: int) + @param timeout: number of seconds to wait, -1-infinity (C++: int) + @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= + 0) + +Help on function warning in module ida_kernwin: + +warning(*args) -> 'void' + warning(format) + + + Display a message in a message box + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + The user will be able to hide messages if they appear twice in a row on + the screen + +Help on function write_dbg_memory in module idc: + +write_dbg_memory(ea, data) + Write to debugger memory. + + @param ea: linear address + @param data: string to write + @return: number of written bytes (-1 - network/debugger error) + + Thread-safe function (may be called only from the main thread and debthread) + +Help on function writelong in module idc: + +writelong(handle, dword, mostfirst) + +Help on function writeshort in module idc: + +writeshort(handle, word, mostfirst) + +Help on function writestr in module idc: + +writestr(handle, s) + +Help on function xtol in module idc: + +xtol(s) + diff --git a/python/idadex.py b/python/idadex.py index 337a01b..53184ea 100644 --- a/python/idadex.py +++ b/python/idadex.py @@ -14,6 +14,7 @@ from __future__ import print_function # #--------------------------------------------------------------------- # pylint: disable=C0103, C0111, C0301, C0326, W0511, R0903 +import sys import ctypes import idaapi import ida_idaapi @@ -41,21 +42,23 @@ def get_struct(str_, off, struct): ctypes.memmove(ctypes.addressof(s), bytebuf, fit) return s +_byte = ord if sys.version_info.major < 3 else lambda t: t + # unpack base address def unpack_db(buf, off): x = 0 if off < len(buf): - x = ord(buf[off]) + x = _byte(buf[off]) off += 1 return (x, off) def get_dw(buf, off): x = 0 if off < len(buf): - x = ord(buf[off]) << 8 + x = _byte(buf[off]) << 8 off += 1 if off < len(buf): - x |= ord(buf[off]) + x |= _byte(buf[off]) off += 1 return (x, off) @@ -66,7 +69,7 @@ def unpack_dw(buf, off): (x, off) = get_dw(buf, off) else: if off < len(buf): - x = ((x & ~0x80) << 8) | ord(buf[off]) + x = ((x & ~0x80) << 8) | _byte(buf[off]) off += 1 return (x, off) @@ -79,13 +82,13 @@ def unpack_dd(buf, off): else: xh = 0 if off < len(buf): - xh = ((x & ~0xC0) << 8) | ord(buf[off]) + xh = ((x & ~0xC0) << 8) | _byte(buf[off]) off += 1 (xl, off) = get_dw(buf, off) x = (xh << 16) | xl else: if off < len(buf): - x = ((x & ~0x80) << 8) | ord(buf[off]) + x = ((x & ~0x80) << 8) | _byte(buf[off]) off += 1 return (x, off) @@ -184,21 +187,21 @@ class Dex(object): # ea-based indexes DEXCMN_STRING_ID = ord('S') # string ea => string_id - DEXCMN_METHOD_ID = ord('M') # dex_method::func.start_ea => method_id - DEXCMN_TRY_TYPES = ord('E') # ea (handler start) => list of type_id, handled types - DEXCMN_TRY_IDS = ord('Y') # ea (handler start) => list of try_item_id - DEXCMN_DEBINFO = ord('D') # line start ea => dex_lineinfo_t + DEXCMN_METHOD_ID = ord('M') # dex_method::func.start_ea => method_id + DEXCMN_TRY_TYPES = ord('E') # ea (handler start) => list of type_id, handled types + DEXCMN_TRY_IDS = ord('Y') # ea (handler start) => list of try_item_id + DEXCMN_DEBINFO = ord('D') # line start ea => dex_lineinfo_t DEXCMN_DEBSTR = ord('B') # line start ea => human readable debug info string # var indexes DEXVAR_STRING_IDS = ord('S') # string_id => ea DEXVAR_TYPE_IDS = ord('T') # type_id => descriptor_idx - DEXVAR_TYPE_STR = ord('U') # type_id => type string (possible user redefined), char data + DEXVAR_TYPE_STR = ord('U') # type_id => type string (possible user redefined), char data DEXVAR_TYPE_STRO = ord('V') # type_id => type string (original), char data DEXVAR_METHOD = ord('M') # method_id => struct dex_method, supval - DEXVAR_METH_STR = ord('N') # method_id => method name, char data + DEXVAR_METH_STR = ord('N') # method_id => method name, char data DEXVAR_METH_STRO = ord('O') # method_id => method name fromdex file, char data - DEXVAR_FIELD = ord('F') # field_id => struct dex_field + DEXVAR_FIELD = ord('F') # field_id => struct dex_field DEXVAR_TRYLIST = ord('Y') # method_id => try_item # debug info representation @@ -263,6 +266,11 @@ class Dex(object): res += " " + access_bit return res[1:] if res else "" + #--------------------------------------------------------------------------- + @staticmethod + def as_string(s): + return s.decode("UTF-8") if sys.version_info.major >= 3 else s + #--------------------------------------------------------------------------- def idx_to_ea(self, from_ea, idx, tag): nn_var = self.get_nn_var(from_ea) @@ -274,7 +282,8 @@ class Dex(object): if addr == ida_idaapi.BADADDR: return None length = ida_bytes.get_max_strlit_length(addr, idc.STRTYPE_C, ida_bytes.ALOPT_IGNHEADS|ida_bytes.ALOPT_IGNPRINT) - return ida_bytes.get_strlit_contents(addr, length, idc.STRTYPE_C) + raw = ida_bytes.get_strlit_contents(addr, length, idc.STRTYPE_C) + return Dex.as_string(raw) def get_method_idx(self, ea): return self.nn_cmn.altval(ea, Dex.DEXCMN_METHOD_ID) @@ -299,9 +308,9 @@ class Dex(object): longname_director = get_struct(val, 0, longname_director_t) if longname_director.zero == 0: nn = idaapi.netnode(longname_director.node) - return nn.getblob(0, tag)[:-1] + return Dex.as_string(nn.getblob(0, tag)[:-1]) if len(val) > 0: - return val[:-1] + return Dex.as_string(val[:-1]) return "" #--------------------------------------------------------------------------- diff --git a/python/idautils.py b/python/idautils.py index 4fa6461..581beb6 100644 --- a/python/idautils.py +++ b/python/idautils.py @@ -32,7 +32,7 @@ import ida_xref import idc import types import os - +import sys def refs(ea, funcfirst, funcnext): """ @@ -57,7 +57,7 @@ def CodeRefsTo(ea, flow): Example:: for ref in CodeRefsTo(get_screen_ea(), 1): - print ref + print(ref) """ if flow == 1: return refs(ea, ida_xref.get_first_cref_to, ida_xref.get_next_cref_to) @@ -78,7 +78,7 @@ def CodeRefsFrom(ea, flow): Example:: for ref in CodeRefsFrom(get_screen_ea(), 1): - print ref + print(ref) """ if flow == 1: return refs(ea, ida_xref.get_first_cref_from, ida_xref.get_next_cref_from) @@ -97,7 +97,7 @@ def DataRefsTo(ea): Example:: for ref in DataRefsTo(get_screen_ea()): - print ref + print(ref) """ return refs(ea, ida_xref.get_first_dref_to, ida_xref.get_next_dref_to) @@ -113,7 +113,7 @@ def DataRefsFrom(ea): Example:: for ref in DataRefsFrom(get_screen_ea()): - print ref + print(ref) """ return refs(ea, ida_xref.get_first_dref_from, ida_xref.get_next_dref_from) @@ -159,12 +159,12 @@ def XrefsFrom(ea, flags=0): Return all references from address 'ea' @param ea: Reference address - @param flags: any of ida_xref.XREF_* flags + @param flags: one of ida_xref.XREF_ALL (default), ida_xref.XREF_FAR, ida_xref.XREF_DATA Example:: for xref in XrefsFrom(here(), 0): - print xref.type, XrefTypeName(xref.type), \ - 'from', hex(xref.frm), 'to', hex(xref.to) + print(xref.type, XrefTypeName(xref.type), \ + 'from', hex(xref.frm), 'to', hex(xref.to)) """ xref = ida_xref.xrefblk_t() if xref.first_from(ea, flags): @@ -178,12 +178,12 @@ def XrefsTo(ea, flags=0): Return all references to address 'ea' @param ea: Reference address - @param flags: any of ida_xref.XREF_* flags + @param flags: one of ida_xref.XREF_ALL (default), ida_xref.XREF_FAR, ida_xref.XREF_DATA Example:: for xref in XrefsTo(here(), 0): - print xref.type, XrefTypeName(xref.type), \ - 'from', hex(xref.frm), 'to', hex(xref.to) + print(xref.type, XrefTypeName(xref.type), \ + 'from', hex(xref.frm), 'to', hex(xref.to)) """ xref = ida_xref.xrefblk_t() if xref.first_to(ea, flags): @@ -194,7 +194,7 @@ def XrefsTo(ea, flags=0): def Threads(): """Returns all thread IDs for the current debugee""" - for i in xrange(0, idc.get_thread_qty()): + for i in range(0, idc.get_thread_qty()): yield idc.getn_thread(i) @@ -283,7 +283,7 @@ def Names(): @return: List of tuples (ea, name) """ - for i in xrange(ida_name.get_nlist_size()): + for i in range(ida_name.get_nlist_size()): ea = ida_name.get_nlist_ea(i) name = ida_name.get_nlist_name(i) yield (ea, name) @@ -295,7 +295,7 @@ def Segments(): @return: List of segment start addresses. """ - for n in xrange(ida_segment.get_segm_qty()): + for n in range(ida_segment.get_segm_qty()): seg = ida_segment.getnseg(n) if seg: yield seg.start_ea @@ -308,7 +308,7 @@ def Entries(): @return: List of tuples (index, ordinal, ea, name) """ n = ida_entry.get_entry_qty() - for i in xrange(0, n): + for i in range(0, n): ordinal = ida_entry.get_entry_ordinal(i) ea = ida_entry.get_entry(ordinal) name = ida_entry.get_entry_name(ordinal) @@ -482,7 +482,7 @@ class Strings(object): s = Strings() for i in s: - print "%x: len=%d type=%d -> '%s'" % (i.ea, i.length, i.strtype, str(i)) + print("%x: len=%d type=%d -> '%s'" % (i.ea, i.length, i.strtype, str(i))) """ class StringItem(object): @@ -502,10 +502,13 @@ class Strings(object): def _toseq(self, as_unicode): strbytes = ida_bytes.get_strlit_contents(self.ea, self.length, self.strtype) - return unicode(strbytes, "UTF-8", 'replace') if as_unicode else strbytes + if sys.version_info.major >= 3: + return strbytes.decode("UTF-8", "replace") if as_unicode else strbytes + else: + return unicode(strbytes, "UTF-8", 'replace') if as_unicode else strbytes def __str__(self): - return self._toseq(False) + return self._toseq(False if sys.version_info.major < 3 else True) def __unicode__(self): return self._toseq(True) @@ -559,7 +562,7 @@ class Strings(object): def __iter__(self): - return (self._get_item(index) for index in xrange(0, self.size)) + return (self._get_item(index) for index in range(0, self.size)) def __getitem__(self, index): @@ -593,7 +596,7 @@ def _Assemble(ea, line): """ Please refer to Assemble() - INTERNAL USE ONLY """ - if type(line) == bytes: + if type(line) in ([bytes] + list(ida_idaapi.string_types)): lines = [line] else: lines = line @@ -686,11 +689,9 @@ class _procregs(object): class _cpu(object): "Simple wrapper around get_reg_value/set_reg_value" def __getattr__(self, name): - #print "cpu.get(%s)" % name return idc.get_reg_value(name) def __setattr__(self, name, value): - #print "cpu.set(%s)" % name return idc.set_reg_value(value, name) @@ -784,7 +785,7 @@ class peutils_t(object): cpu = _cpu() """This is a special class instance used to access the registers as if they were attributes of this object. For example to access the EAX register: - print "%x" % cpu.Eax + print("%x" % cpu.Eax) """ procregs = _procregs() @@ -792,5 +793,5 @@ procregs = _procregs() For example: x = idautils.DecodeInstruction(here()) if x[0] == procregs.Esp: - print "This operand is the register ESP + print("This operand is the register ESP) """ diff --git a/python/idc.py b/python/idc.py index c1d944a..9c6297c 100644 --- a/python/idc.py +++ b/python/idc.py @@ -270,16 +270,20 @@ FF_JUMP = ida_bytes.FF_JUMP & 0xFFFFFFFF # Has jump table # # Loader flags # -NEF_SEGS = ida_loader.NEF_SEGS # Create segments -NEF_RSCS = ida_loader.NEF_RSCS # Load resources -NEF_NAME = ida_loader.NEF_NAME # Rename entries -NEF_MAN = ida_loader.NEF_MAN # Manual load -NEF_FILL = ida_loader.NEF_FILL # Fill segment gaps -NEF_IMPS = ida_loader.NEF_IMPS # Create imports section -NEF_FIRST = ida_loader.NEF_FIRST # This is the first file loaded -NEF_CODE = ida_loader.NEF_CODE # for load_binary_file: -NEF_RELOAD = ida_loader.NEF_RELOAD # reload the file at the same place: -NEF_FLAT = ida_loader.NEF_FLAT # Autocreated FLAT group (PE) +if ida_idaapi.uses_swig_builtins: + _scope = ida_loader.loader_t +else: + _scope = ida_loader +NEF_SEGS = _scope.NEF_SEGS # Create segments +NEF_RSCS = _scope.NEF_RSCS # Load resources +NEF_NAME = _scope.NEF_NAME # Rename entries +NEF_MAN = _scope.NEF_MAN # Manual load +NEF_FILL = _scope.NEF_FILL # Fill segment gaps +NEF_IMPS = _scope.NEF_IMPS # Create imports section +NEF_FIRST = _scope.NEF_FIRST # This is the first file loaded +NEF_CODE = _scope.NEF_CODE # for load_binary_file: +NEF_RELOAD = _scope.NEF_RELOAD # reload the file at the same place: +NEF_FLAT = _scope.NEF_FLAT # Autocreated FLAT group (PE) # List of built-in functions # -------------------------- @@ -359,13 +363,13 @@ def rotate_left(value, count, nbits, offset): tmp = value & mask if count > 0: - for x in xrange(count): + for x in range(count): if (tmp >> (offset+nbits-1)) & 1: tmp = (tmp << 1) | (1 << offset) else: tmp = (tmp << 1) else: - for x in xrange(-count): + for x in range(-count): if (tmp >> offset) & 1: tmp = (tmp >> 1) | (1 << (offset+nbits-1)) else: @@ -808,7 +812,7 @@ def define_local_var(start, end, location, name): frame, name, offset, - ida_bytes.byteflag(), + ida_bytes.byte_flag(), None, 1) == 0: return 1 else: @@ -818,18 +822,7 @@ def define_local_var(start, end, location, name): return ida_frame.add_regvar(func, start, end, location, name, None) -def del_items(ea, flags=0, size=1): - """ - Convert the current item to an explored item - - @param ea: linear address - @param flags: combination of DELIT_* constants - @param size: size of the range to undefine - - @return: None - """ - return ida_bytes.del_items(ea, flags, size) - +del_items = ida_bytes.del_items DELIT_SIMPLE = ida_bytes.DELIT_SIMPLE # simply undefine the specified item DELIT_EXPAND = ida_bytes.DELIT_EXPAND # propogate undefined items, for example @@ -985,7 +978,12 @@ def op_stroff(ea, n, strid, delta): """ path = ida_pro.tid_array(1) path[0] = strid - return ida_bytes.op_stroff(ea, n, path.cast(), 1, delta) + if isinstance(ea, ida_ua.insn_t): + insn = ea + else: + insn = ida_ua.insn_t() + ida_ua.decode_insn(insn, ea) + return ida_bytes.op_stroff(insn, n, path.cast(), 1, delta) op_stkvar = ida_bytes.op_stkvar @@ -1765,12 +1763,12 @@ def get_str_type(ea): # flag is combination of the following bits # returns BADADDR - not found -def find_suspop (ea, flag): return ida_search.find_suspop(ea, flag) -def find_code (ea, flag): return ida_search.find_code(ea, flag) -def find_data (ea, flag): return ida_search.find_data(ea, flag) -def find_unknown (ea, flag): return ida_search.find_unknown(ea, flag) -def find_defined (ea, flag): return ida_search.find_defined(ea, flag) -def find_imm (ea, flag, value): return ida_search.find_imm(ea, flag, value) +find_suspop = ida_search.find_suspop +find_code = ida_search.find_code +find_data = ida_search.find_data +find_unknown = ida_search.find_unknown +find_defined = ida_search.find_defined +find_imm = ida_search.find_imm SEARCH_UP = ida_search.SEARCH_UP # search backward SEARCH_DOWN = ida_search.SEARCH_DOWN # search forward @@ -2366,16 +2364,7 @@ ADDSEG_SPARSE = ida_segment.ADDSEG_SPARSE # Use sparse storage method for the def AddSeg(startea, endea, base, use32, align, comb): return add_segm_ex(startea, endea, base, use32, align, comb, ADDSEG_NOSREG) -def del_segm(ea, flags): - """ - Delete a segment - - @param ea: any address in the segment - @param flags: combination of SEGMOD_* flags - - @return: boolean success - """ - return ida_segment.del_segm(ea, flags) +del_segm = ida_segment.del_segm SEGMOD_KILL = ida_segment.SEGMOD_KILL # disable addresses if segment gets # shrinked or deleted @@ -2444,22 +2433,26 @@ def set_segm_alignment(ea, alignment): return set_segm_attr(ea, SEGATTR_ALIGN, alignment) -saAbs = ida_segment.saAbs # Absolute segment. -saRelByte = ida_segment.saRelByte # Relocatable, byte aligned. -saRelWord = ida_segment.saRelWord # Relocatable, word (2-byte, 16-bit) aligned. -saRelPara = ida_segment.saRelPara # Relocatable, paragraph (16-byte) aligned. -saRelPage = ida_segment.saRelPage # Relocatable, aligned on 256-byte boundary - # (a "page" in the original Intel specification). -saRelDble = ida_segment.saRelDble # Relocatable, aligned on a double word - # (4-byte) boundary. This value is used by - # the PharLap OMF for the same alignment. -saRel4K = ida_segment.saRel4K # This value is used by the PharLap OMF for - # page (4K) alignment. It is not supported - # by LINK. -saGroup = ida_segment.saGroup # Segment group -saRel32Bytes = ida_segment.saRel32Bytes # 32 bytes -saRel64Bytes = ida_segment.saRel64Bytes # 64 bytes -saRelQword = ida_segment.saRelQword # 8 bytes +if ida_idaapi.uses_swig_builtins: + _scope = ida_segment.segment_t +else: + _scope = ida_segment +saAbs = _scope.saAbs # Absolute segment. +saRelByte = _scope.saRelByte # Relocatable, byte aligned. +saRelWord = _scope.saRelWord # Relocatable, word (2-byte, 16-bit) aligned. +saRelPara = _scope.saRelPara # Relocatable, paragraph (16-byte) aligned. +saRelPage = _scope.saRelPage # Relocatable, aligned on 256-byte boundary + # (a "page" in the original Intel specification). +saRelDble = _scope.saRelDble # Relocatable, aligned on a double word + # (4-byte) boundary. This value is used by + # the PharLap OMF for the same alignment. +saRel4K = _scope.saRel4K # This value is used by the PharLap OMF for + # page (4K) alignment. It is not supported + # by LINK. +saGroup = _scope.saGroup # Segment group +saRel32Bytes = _scope.saRel32Bytes # 32 bytes +saRel64Bytes = _scope.saRel64Bytes # 64 bytes +saRelQword = _scope.saRelQword # 8 bytes def set_segm_combination(segea, comb): @@ -2474,15 +2467,15 @@ def set_segm_combination(segea, comb): return set_segm_attr(segea, SEGATTR_COMB, comb) -scPriv = ida_segment.scPriv # Private. Do not combine with any other program - # segment. -scPub = ida_segment.scPub # Public. Combine by appending at an offset that - # meets the alignment requirement. -scPub2 = ida_segment.scPub2 # As defined by Microsoft, same as C=2 (public). -scStack = ida_segment.scStack # Stack. Combine as for C=2. This combine type - # forces byte alignment. -scCommon = ida_segment.scCommon # Common. Combine by overlay using maximum size. -scPub3 = ida_segment.scPub3 # As defined by Microsoft, same as C=2 (public). +scPriv = _scope.scPriv # Private. Do not combine with any other program + # segment. +scPub = _scope.scPub # Public. Combine by appending at an offset that + # meets the alignment requirement. +scPub2 = _scope.scPub2 # As defined by Microsoft, same as C=2 (public). +scStack = _scope.scStack # Stack. Combine as for C=2. This combine type + # forces byte alignment. +scCommon = _scope.scCommon # Common. Combine by overlay using maximum size. +scPub3 = _scope.scPub3 # As defined by Microsoft, same as C=2 (public). def set_segm_addressing(ea, bitness): @@ -2557,22 +2550,22 @@ def set_segm_type(segea, segtype): return seg.update() -SEG_NORM = ida_segment.SEG_NORM -SEG_XTRN = ida_segment.SEG_XTRN # * segment with 'extern' definitions - # no instructions are allowed -SEG_CODE = ida_segment.SEG_CODE # pure code segment -SEG_DATA = ida_segment.SEG_DATA # pure data segment -SEG_IMP = ida_segment.SEG_IMP # implementation segment -SEG_GRP = ida_segment.SEG_GRP # * group of segments - # no instructions are allowed -SEG_NULL = ida_segment.SEG_NULL # zero-length segment -SEG_UNDF = ida_segment.SEG_UNDF # undefined segment type -SEG_BSS = ida_segment.SEG_BSS # uninitialized segment -SEG_ABSSYM = ida_segment.SEG_ABSSYM # * segment with definitions of absolute symbols - # no instructions are allowed -SEG_COMM = ida_segment.SEG_COMM # * segment with communal definitions - # no instructions are allowed -SEG_IMEM = ida_segment.SEG_IMEM # internal processor memory & sfr (8051) +SEG_NORM = _scope.SEG_NORM +SEG_XTRN = _scope.SEG_XTRN # * segment with 'extern' definitions + # no instructions are allowed +SEG_CODE = _scope.SEG_CODE # pure code segment +SEG_DATA = _scope.SEG_DATA # pure data segment +SEG_IMP = _scope.SEG_IMP # implementation segment +SEG_GRP = _scope.SEG_GRP # * group of segments + # no instructions are allowed +SEG_NULL = _scope.SEG_NULL # zero-length segment +SEG_UNDF = _scope.SEG_UNDF # undefined segment type +SEG_BSS = _scope.SEG_BSS # uninitialized segment +SEG_ABSSYM = _scope.SEG_ABSSYM # * segment with definitions of absolute symbols + # no instructions are allowed +SEG_COMM = _scope.SEG_COMM # * segment with communal definitions + # no instructions are allowed +SEG_IMEM = _scope.SEG_IMEM # internal processor memory & sfr (8051) def get_segm_attr(segea, attr): @@ -2880,25 +2873,7 @@ def writestr(handle, s): # F U N C T I O N S # ---------------------------------------------------------------------------- -def add_func(start, end = ida_idaapi.BADADDR): - """ - Create a function - - @param start: function bounds - @param end: function bounds - - If the function end address is BADADDR, then - IDA will try to determine the function bounds - automatically. IDA will define all necessary - instructions to determine the function bounds. - - @return: !=0 - ok - - @note: an instruction should be present at the start address - """ - return ida_funcs.add_func(start, end) - - +add_func = ida_funcs.add_func del_func = ida_funcs.del_func set_func_end = ida_funcs.set_func_end @@ -3026,33 +3001,38 @@ def get_func_flags(ea): return func.flags -FUNC_NORET = ida_funcs.FUNC_NORET # function doesn't return -FUNC_FAR = ida_funcs.FUNC_FAR # far function -FUNC_LIB = ida_funcs.FUNC_LIB # library function -FUNC_STATIC = ida_funcs.FUNC_STATICDEF # static function -FUNC_FRAME = ida_funcs.FUNC_FRAME # function uses frame pointer (BP) -FUNC_USERFAR = ida_funcs.FUNC_USERFAR # user has specified far-ness - # of the function -FUNC_HIDDEN = ida_funcs.FUNC_HIDDEN # a hidden function -FUNC_THUNK = ida_funcs.FUNC_THUNK # thunk (jump) function -FUNC_BOTTOMBP = ida_funcs.FUNC_BOTTOMBP # BP points to the bottom of the stack frame -FUNC_NORET_PENDING = ida_funcs.FUNC_NORET_PENDING # Function 'non-return' analysis - # must be performed. This flag is - # verified upon func_does_return() -FUNC_SP_READY = ida_funcs.FUNC_SP_READY # SP-analysis has been performed - # If this flag is on, the stack - # change points should not be not - # modified anymore. Currently this - # analysis is performed only for PC -FUNC_PURGED_OK = ida_funcs.FUNC_PURGED_OK # 'argsize' field has been validated. - # If this bit is clear and 'argsize' - # is 0, then we do not known the real - # number of bytes removed from - # the stack. This bit is handled - # by the processor module. -FUNC_TAIL = ida_funcs.FUNC_TAIL # This is a function tail. - # Other bits must be clear - # (except FUNC_HIDDEN) +if ida_idaapi.uses_swig_builtins: + _scope = ida_funcs.func_t +else: + _scope = ida_funcs + +FUNC_NORET = _scope.FUNC_NORET # function doesn't return +FUNC_FAR = _scope.FUNC_FAR # far function +FUNC_LIB = _scope.FUNC_LIB # library function +FUNC_STATIC = _scope.FUNC_STATICDEF # static function +FUNC_FRAME = _scope.FUNC_FRAME # function uses frame pointer (BP) +FUNC_USERFAR = _scope.FUNC_USERFAR # user has specified far-ness + # of the function +FUNC_HIDDEN = _scope.FUNC_HIDDEN # a hidden function +FUNC_THUNK = _scope.FUNC_THUNK # thunk (jump) function +FUNC_BOTTOMBP = _scope.FUNC_BOTTOMBP # BP points to the bottom of the stack frame +FUNC_NORET_PENDING = _scope.FUNC_NORET_PENDING # Function 'non-return' analysis + # must be performed. This flag is + # verified upon func_does_return() +FUNC_SP_READY = _scope.FUNC_SP_READY # SP-analysis has been performed + # If this flag is on, the stack + # change points should not be not + # modified anymore. Currently this + # analysis is performed only for PC +FUNC_PURGED_OK = _scope.FUNC_PURGED_OK # 'argsize' field has been validated. + # If this bit is clear and 'argsize' + # is 0, then we do not known the real + # number of bytes removed from + # the stack. This bit is handled + # by the processor module. +FUNC_TAIL = _scope.FUNC_TAIL # This is a function tail. + # Other bits must be clear + # (except FUNC_HIDDEN) def set_func_flags(ea, flags): @@ -3979,10 +3959,10 @@ def add_struc_member(sid, name, offset, flag, typeid, nbytes, target=-1, tdelta= """ if is_off0(flag): - return eval_idc('add_struc_member(%d, "%s", %d, %d, %d, %d, %d, %d, %d);' % (sid, ida_kernwin.str2user(name), offset, flag, typeid, nbytes, + return eval_idc('add_struc_member(%d, "%s", %d, %d, %d, %d, %d, %d, %d);' % (sid, ida_kernwin.str2user(name or ""), offset, flag, typeid, nbytes, target, tdelta, reftype)) else: - return eval_idc('add_struc_member(%d, "%s", %d, %d, %d, %d);' % (sid, ida_kernwin.str2user(name), offset, flag, typeid, nbytes)) + return eval_idc('add_struc_member(%d, "%s", %d, %d, %d, %d);' % (sid, ida_kernwin.str2user(name or ""), offset, flag, typeid, nbytes)) STRUC_ERROR_MEMBER_NAME = -1 # already has member with this name (bad name) @@ -4136,16 +4116,7 @@ def set_fchunk_attr(ea, attr, value): return 0 -def get_fchunk_referer(ea, idx): - """ - Get a function chunk referer - - @param ea: any address in the chunk - @param idx: referer index (0..get_fchunk_attr(FUNCATTR_REFQTY)) - - @return: referer address or BADADDR - """ - return ida_funcs.get_fchunk_referer(ea, idx) +get_fchunk_referer = ida_funcs.get_fchunk_referer def get_next_fchunk(ea): @@ -4664,6 +4635,8 @@ def __GetArrayById(array_id): return __dummy_netnode.instance else: return node + except TypeError: + return __dummy_netnode.instance except NotImplementedError: return __dummy_netnode.instance @@ -5101,8 +5074,8 @@ def apply_type(ea, py_type, flags = TINFO_DEFINITE): if py_type is None: py_type = "" - if isinstance(py_type, basestring) and len(py_type) == 0: - pt = ("", "") + if isinstance(py_type, ida_idaapi.string_types) and len(py_type) == 0: + pt = (b"", b"") else: if len(py_type) == 3: pt = py_type[1:] # skip name component @@ -5199,7 +5172,7 @@ def print_decls(ordinals, flags): return 0 sink = def_sink() - py_ordinals = map(lambda l : int(l), ordinals.split(",")) + py_ordinals = list(map(lambda l : int(l), ordinals.split(","))) ida_typeinf.print_decls(sink, None, py_ordinals, flags) return sink.text @@ -5687,13 +5660,7 @@ def set_reg_value(value, name): return ida_dbg.set_reg_val(name, value) -def get_bpt_qty(): - """ - Get number of breakpoints. - - @return: number of breakpoints - """ - return ida_dbg.get_bpt_qty() +get_bpt_qty = ida_dbg.get_bpt_qty def get_bpt_ea(n): @@ -5846,34 +5813,10 @@ def set_bpt_cond(ea, cnd, is_lowcnd=0): return ida_dbg.update_bpt(bpt) -def add_bpt(ea, size=0, bpttype=BPT_DEFAULT): - """ - Add a new breakpoint - - @param ea: any address in the process memory space: - @param size: size of the breakpoint (irrelevant for software breakpoints): - @param bpttype: type of the breakpoint (one of BPT_... constants) - - @return: success - - @note: Only one breakpoint can exist at a given address. - """ - return ida_dbg.add_bpt(ea, size, bpttype) - - -def del_bpt(ea): - """ - Delete breakpoint - - @param ea: any address in the process memory space: - - @return: success - """ - return ida_dbg.del_bpt(ea) - - +add_bpt = ida_dbg.add_bpt +del_bpt = ida_dbg.del_bpt enable_bpt = ida_dbg.enable_bpt -check_bpt = ida_dbg.check_bpt +check_bpt = ida_dbg.check_bpt BPTCK_NONE = -1 # breakpoint does not exist BPTCK_NO = 0 # breakpoint is disabled diff --git a/python/init.py b/python/init.py index 2f5c247..6cd5b75 100644 --- a/python/init.py +++ b/python/init.py @@ -21,7 +21,8 @@ import warnings lib_dynload = os.path.join( sys.executable, IDAPYTHON_DYNLOAD_BASE, - "python", "lib", "python2.7", "lib-dynload") + "python", + str(sys.version_info.major)) is_x64 = sys.maxsize >= 0x100000000 if is_x64: @@ -140,4 +141,20 @@ userrc = os.path.join(ida_diskio.get_user_idadir(), "idapythonrc.py") if os.path.exists(userrc): ida_idaapi.IDAPython_ExecScript(userrc, globals()) +# In Python3, some modules (e.g., subprocess) will load the 'signal' +# module which, upon loading, will registers default handlers for some +# signals. In particular, for SIGINT, which we don't want to handle +# since it'll prevent us from killing IDA with Ctrl+C on a TTY. +if sys.version_info.major >= 3: + import signal + signal.signal(signal.SIGINT, signal.SIG_DFL) + + # Also, embedded Python3 will not include the 'site packages' by + # default, which means many packages provided by the distribution + # would not be reachable. Let's provide a way to load them. + import site + for sp in site.getsitepackages(): + if sp not in sys.path: + sys.path.append(sp) + # All done, ready to rock. diff --git a/pywraps.cpp b/pywraps.cpp index 3c59b00..14af288 100644 --- a/pywraps.cpp +++ b/pywraps.cpp @@ -5,9 +5,12 @@ #include #include "pywraps.hpp" +#include "extapi.hpp" #undef hook_to_notification_point #undef unhook_from_notification_point +#undef show_wait_box +#undef hide_wait_box //lint -esym(843,pywraps_initialized) could be declared const //lint -esym(843,g_nw) could be declared const @@ -82,7 +85,13 @@ ref_t ida_export PyW_SizeVecToPyList(const sizevec_t &vec) PYW_GIL_CHECK_LOCKED_SCOPE(); newref_t py_list(PyList_New(n)); for ( size_t i = 0; i < n; ++i ) + { +#ifdef PY3 + PyList_SetItem(py_list.o, i, PyLong_FromSize_t(vec[i])); +#else PyList_SetItem(py_list.o, i, PyInt_FromSize_t(vec[i])); +#endif + } return ref_t(py_list); } @@ -122,11 +131,23 @@ static Py_ssize_t pyvar_walk_list( py_item = newref_t(PySequence_GetItem(o, i)); else py_item = borref_t(PyList_GetItem(o, i)); - if ( py_item == NULL || cb(py_item, i, ud) != CIP_OK ) + bool ok = py_item != NULL && cb(py_item, i, ud) == CIP_OK; + if ( ok ) { - qstring m; - m.sprnt("Sequence item #%d cannot be converted", int(i)); - PyErr_SetString(PyExc_ValueError, m.c_str()); + // We cannot have, at the same time, a 'successful conversion', and + // the Python runtime raising an exception. It's up to the callback + // implementation to ensure that whatever it did, didn't cause an + // error to be set. + QASSERT(30604, PyErr_Occurred() == NULL); + } + else + { + if ( PyErr_Occurred() == NULL ) + { + qstring m; + m.sprnt("Sequence item #%d cannot be converted", int(i)); + PyErr_SetString(PyExc_ValueError, m.c_str()); + } return CIP_FAILED; } } @@ -173,12 +194,28 @@ Py_ssize_t ida_export PyW_PyListToEaVec(eavec_t *out, PyObject *py_list) eavec_t &eavec = *(eavec_t *) ud; ea_t ea = BADADDR; { +#ifdef PY3 + if ( PyLong_Check(py_item.o) ) + { + unsigned long long ull = PyLong_AsUnsignedLongLong(py_item.o); + if ( ull == -1ULL && PyErr_Occurred() != NULL ) + return CIP_FAILED; + ea = ea_t(ull); + } + else + { + return CIP_FAILED; + } +#else if ( PyInt_Check(py_item.o) ) ea = PyInt_AsUnsignedLongMask(py_item.o); else if ( PyLong_Check(py_item.o) ) ea = ea_t(PyLong_AsUnsignedLongLong(py_item.o)); else return CIP_FAILED; + if ( PyErr_Occurred() != NULL ) + return CIP_FAILED; +#endif } eavec.push_back(ea); return CIP_OK; @@ -198,12 +235,28 @@ Py_ssize_t ida_export PyW_PyListToEa64Vec(ea64vec_t *out, PyObject *py_list) ea64vec_t &ea64vec = *(ea64vec_t *) ud; ea64_t v = 0; { +#ifdef PY3 + if ( PyLong_Check(py_item.o) ) + { + unsigned long long ull = PyLong_AsUnsignedLongLong(py_item.o); + if ( ull == -1ULL && PyErr_Occurred() != NULL ) + return CIP_FAILED; + v = uint64(ull); + } + else + { + return CIP_FAILED; + } +#else if ( PyInt_Check(py_item.o) ) v = PyInt_AsUnsignedLongMask(py_item.o); else if ( PyLong_Check(py_item.o) ) v = uint64(PyLong_AsUnsignedLongLong(py_item.o)); else return CIP_FAILED; + if ( PyErr_Occurred() != NULL ) + return CIP_FAILED; +#endif } ea64vec.push_back(v); return CIP_OK; @@ -221,21 +274,15 @@ Py_ssize_t ida_export PyW_PyListToStrVec(qstrvec_t *out, PyObject *py_list) static int idaapi cvt(const ref_t &py_item, Py_ssize_t /*i*/, void *ud) { qstrvec_t &strvec = *(qstrvec_t *)ud; - if ( !PyString_Check(py_item.o) ) + if ( !IDAPyStr_Check(py_item.o) ) return CIP_FAILED; - strvec.push_back(PyString_AsString(py_item.o)); + IDAPyStr_AsUTF8(&strvec.push_back(), py_item.o); return CIP_OK; } }; return pyvar_walk_list(py_list, lambda_t::cvt, out); } -//------------------------------------------------------------------------- -bool ida_export PyWStringOrNone_Check(PyObject *tp) -{ - return tp == Py_None || PyString_Check(tp); -} - //------------------------------------------------------------------------- PyObject *ida_export meminfo_vec_t_to_py(meminfo_vec_t &ranges) { @@ -306,9 +353,9 @@ static int get_pyidc_cvt_type(PyObject *py_var) // Check if this our special by reference object ref_t attr(PyW_TryGetAttrString(py_var, S_PY_IDCCVT_ID_ATTR)); - if ( attr == NULL || (!PyInt_Check(attr.o) && !PyLong_Check(attr.o)) ) + if ( attr == NULL || !IDAPyIntOrLong_Check(attr.o) ) return -1; - return (int)PyInt_AsLong(attr.o); + return int(IDAPyIntOrLong_AsLong(attr.o)); } //------------------------------------------------------------------------- @@ -424,15 +471,28 @@ static int pyvar_to_idcvar2( return CIP_OK; } // String +#ifdef PY3 + else if ( PyBytes_Check(py_var.o) ) + { + idc_var->_set_string(PyBytes_AsString(py_var.o), PyBytes_Size(py_var.o)); + } +#else else if ( PyString_Check(py_var.o) ) { idc_var->_set_string(PyString_AsString(py_var.o), PyString_Size(py_var.o)); } +#endif // Unicode else if ( PyUnicode_Check(py_var.o) ) { +#ifdef PY3 + qstring utf8; + IDAPyStr_AsUTF8(&utf8, py_var.o); + idc_var->_set_string(utf8.c_str(), utf8.length()); +#else newref_t utf8(PyUnicode_AsEncodedString(py_var.o, ENC_UTF8, "strict")); return pyvar_to_idcvar1(utf8, idc_var, gvar_sn, visited); +#endif } // Boolean else if ( PyBool_Check(py_var.o) ) @@ -447,9 +507,9 @@ static int pyvar_to_idcvar2( idc_var->vtype = VT_FLOAT; } // void* - else if ( PyCObject_Check(py_var.o) ) + else if ( PyCapsule_IsValid(py_var.o, VALID_CAPSULE_NAME) ) { - idc_var->set_pvoid(PyCObject_AsVoidPtr(py_var.o)); + idc_var->set_pvoid(PyCapsule_GetPointer(py_var.o, VALID_CAPSULE_NAME)); } // Python list? else if ( PyList_CheckExact(py_var.o) || PyW_IsSequenceType(py_var.o) ) @@ -479,7 +539,11 @@ static int pyvar_to_idcvar2( if ( ok ) { // Form the attribute name +#ifdef PY3 + newref_t py_int(PyLong_FromSsize_t(i)); +#else newref_t py_int(PyInt_FromSsize_t(i)); +#endif ok = PyW_ObjectToString(py_int.o, &attr_name); if ( !ok ) break; @@ -608,7 +672,13 @@ static int pyvar_to_idcvar2( for ( Py_ssize_t i=0; i < size; i++ ) { borref_t item(PyList_GetItem(py_dir.o, i)); +#ifdef PY3 + qstring field_name_buf; + IDAPyStr_AsUTF8(&field_name_buf, item.o); + const char *field_name = field_name_buf.begin(); +#else const char *field_name = PyString_AsString(item.o); +#endif if ( field_name == NULL ) continue; @@ -692,7 +762,7 @@ int ida_export idcvar_to_pyvar( case VT_PVOID: if ( *py_var == NULL ) { - newref_t nr(PyCObject_FromVoidPtr(idc_var.pvoid, NULL)); + newref_t nr(PyCapsule_New(idc_var.pvoid, VALID_CAPSULE_NAME, NULL)); *py_var = nr; } else @@ -737,7 +807,10 @@ int ida_export idcvar_to_pyvar( if ( *py_var == NULL ) { const qstring &s = idc_var.qstr(); - *py_var = newref_t(PyString_FromStringAndSize(s.begin(), s.length())); + if ( (flags & PYWCVTF_STR_AS_BYTES) != 0 ) + *py_var = newref_t(IDAPyBytes_FromMemAndSize(s.begin(), s.length())); + else + *py_var = newref_t(IDAPyStr_FromUTF8AndSize(s.begin(), s.length())); break; } else @@ -1093,7 +1166,7 @@ ref_t ida_export create_linked_class_instance( ref_t py_class = PyW_TryGetAttrString(py_module.o, clsname); if ( py_class != NULL ) { - newref_t py_lnk(PyCObject_FromVoidPtr(lnk, NULL)); + newref_t py_lnk(PyCapsule_New(lnk, VALID_CAPSULE_NAME, NULL)); ref_t py_obj = newref_t(PyObject_CallFunctionObjArgs(py_class.o, py_lnk.o, NULL)); if ( !PyW_GetError() && py_obj != NULL ) result = py_obj; @@ -1143,12 +1216,7 @@ bool ida_export PyW_GetStringAttr( ref_t py_attr(PyW_TryGetAttrString(py_obj, attr_name)); if ( py_attr == NULL ) return false; - - bool ok = PyString_Check(py_attr.o); - if ( ok ) - *str = PyString_AsString(py_attr.o); - - return ok; + return IDAPyStr_Check(py_attr.o) != 0 && IDAPyStr_AsUTF8(str, py_attr.o); } //------------------------------------------------------------------------ @@ -1208,7 +1276,11 @@ bool ida_export PyW_GetNumber(PyObject *py_var, uint64 *num, bool *is_64) do { +#ifdef PY3 + if ( !PyLong_CheckExact(py_var) ) +#else if ( !(PyInt_CheckExact(py_var) || PyLong_CheckExact(py_var)) ) +#endif { rc = false; break; @@ -1217,7 +1289,11 @@ bool ida_export PyW_GetNumber(PyObject *py_var, uint64 *num, bool *is_64) constexpr bool is_long_64 = sizeof(long) > 4; // Can we convert to C long? +#ifdef PY3 + long l = PyLong_AsLong(py_var); +#else long l = PyInt_AsLong(py_var); +#endif if ( !PyErr_Occurred() ) { SETNUM(uint64(l), is_long_64); @@ -1308,8 +1384,13 @@ bool ida_export PyW_ObjectToString(PyObject *obj, qstring *out) PYW_GIL_CHECK_LOCKED_SCOPE(); newref_t py_str(PyObject_Str(obj)); bool ok = py_str != NULL; +#ifdef PY3 + if ( ok ) + IDAPyStr_AsUTF8(out, py_str.o); +#else if ( ok ) *out = PyString_AsString(py_str.o); +#endif else out->qclear(); return ok; @@ -1325,65 +1406,51 @@ bool ida_export PyW_GetError(qstring *out, bool clear_err) if ( PyErr_Occurred() == NULL ) return false; - // Error occurred but details not needed? - if ( out == NULL ) + if ( out != NULL ) { - // Just clear the error + // Get the exception info (this also clears the exception) + PyObject *err_type, *err_value, *err_traceback; + PyErr_Fetch(&err_type, &err_value, &err_traceback); + + // Try helper first + ref_t py_ret; + ref_t py_fmtexc(get_idaapi_attr(S_IDAAPI_FORMATEXC)); + if ( py_fmtexc != NULL ) + { + py_ret = newref_t(PyObject_CallFunctionObjArgs( + py_fmtexc.o, + err_type, + err_value, + err_traceback, + NULL)); + } + + // and fallback to simple stringification if needed + if ( py_ret == NULL ) + py_ret = newref_t(PyObject_Str(err_value)); + + if ( py_ret != NULL ) + IDAPyStr_AsUTF8(out, py_ret.o); + else + *out = "IDAPython: unknown error"; + if ( clear_err ) - PyErr_Clear(); - return true; - } - - // Get the exception info - PyObject *err_type, *err_value, *err_traceback, *py_ret(NULL); - PyErr_Fetch(&err_type, &err_value, &err_traceback); - - if ( !clear_err ) - PyErr_Restore(err_type, err_value, err_traceback); - - // Resolve FormatExc() - ref_t py_fmtexc(get_idaapi_attr(S_IDAAPI_FORMATEXC)); - - // Helper there? - if ( py_fmtexc != NULL ) - { - // Call helper - py_ret = PyObject_CallFunctionObjArgs( - py_fmtexc.o, - err_type, - err_value, - err_traceback, - NULL); - } - - // Clear the error - if ( clear_err ) - PyErr_Clear(); - - // Helper failed?! - if ( py_ret == NULL ) - { - // Just convert the 'value' part of the original error - py_ret = PyObject_Str(err_value); - } - - // No exception text? - if ( py_ret == NULL ) - { - *out = "IDAPython: unknown error!"; + { + Py_XDECREF(err_traceback); + Py_XDECREF(err_value); + Py_XDECREF(err_type); + } + else + { + PyErr_Restore(err_type, err_value, err_traceback); + } } else { - *out = PyString_AsString(py_ret); - Py_DECREF(py_ret); + if ( clear_err ) + PyErr_Clear(); } - if ( clear_err ) - { - Py_XDECREF(err_traceback); - Py_XDECREF(err_value); - Py_XDECREF(err_type); - } return true; } @@ -1409,7 +1476,9 @@ void *ida_export pyobj_get_clink(PyObject *pyobj) // Try to query the link attribute ref_t attr(PyW_TryGetAttrString(pyobj, S_CLINK_NAME)); - void *t = attr != NULL && PyCObject_Check(attr.o) ? PyCObject_AsVoidPtr(attr.o) : NULL; + void *t = attr != NULL && PyCapsule_IsValid(attr.o, VALID_CAPSULE_NAME) + ? PyCapsule_GetPointer(attr.o, VALID_CAPSULE_NAME) + : NULL; return t; } @@ -1486,132 +1555,6 @@ lookup_info_t pycim_lookup_info; //------------------------------------------------------------------------- // py_customidamemo_t -//------------------------------------------------------------------------- -void py_customidamemo_t::convert_node_info( - node_info_t *out, - uint32 *out_flags, - ref_t py_nodeinfo) -{ - if ( out_flags != NULL ) - *out_flags = 0; -#define COPY_PROP(checker, converter, pname, flag) \ - do \ - { \ - newref_t pname(PyObject_GetAttrString(py_nodeinfo.o, #pname)); \ - if ( pname != NULL && checker(pname.o) ) \ - { \ - out->pname = converter(pname.o); \ - if ( out_flags != NULL ) \ - *out_flags |= flag; \ - } \ - } while ( false ) -#define COPY_ULONG_PROP(pname, flag) COPY_PROP(PyNumber_Check, PyLong_AsUnsignedLong, pname, flag) -#define COPY_STRING_PROP(pname, flag) COPY_PROP(PyString_Check, PyString_AsString, pname, flag) - COPY_ULONG_PROP(bg_color, NIF_BG_COLOR); - COPY_ULONG_PROP(frame_color, NIF_FRAME_COLOR); - COPY_ULONG_PROP(flags, NIF_FLAGS); - COPY_ULONG_PROP(ea, NIF_EA); - COPY_STRING_PROP(text, NIF_TEXT); -#undef COPY_STRING_PROP -#undef COPY_ULONG_PROP -#undef COPY_PROP -} - -//------------------------------------------------------------------------- -void ida_export py_customidamemo_t_set_node_info( - py_customidamemo_t *_this, - PyObject *py_node_idx, - PyObject *py_node_info, - PyObject *py_flags) -{ - if ( !PyNumber_Check(py_node_idx) || !PyNumber_Check(py_flags) ) - return; - borref_t py_idx(py_node_idx); - borref_t py_ni(py_node_info); - borref_t py_fl(py_flags); - node_info_t ni; - _this->convert_node_info(&ni, NULL, py_ni); - int idx = PyInt_AsLong(py_idx.o); - uint32 flgs = PyLong_AsLong(py_fl.o); - viewer_set_node_info(_this->view, idx, ni, flgs); -} - -//------------------------------------------------------------------------- -void ida_export py_customidamemo_t_set_nodes_infos( - py_customidamemo_t *_this, - PyObject *dict) -{ - if ( !PyDict_Check(dict) ) - return; - Py_ssize_t pos = 0; - PyObject *o_key, *o_value; - while ( PyDict_Next(dict, &pos, &o_key, &o_value) ) - { - borref_t key(o_key); - borref_t value(o_value); - if ( !PyNumber_Check(key.o) ) - continue; - uint32 flags; - node_info_t ni; - _this->convert_node_info(&ni, &flags, value); - int idx = PyInt_AsLong(key.o); - viewer_set_node_info(_this->view, idx, ni, flags); - } -} - -//------------------------------------------------------------------------- -PyObject *ida_export py_customidamemo_t_get_node_info( - py_customidamemo_t *_this, - PyObject *py_node_idx) -{ - if ( !PyNumber_Check(py_node_idx) ) - Py_RETURN_NONE; - node_info_t ni; - if ( !viewer_get_node_info(_this->view, &ni, PyInt_AsLong(py_node_idx)) ) - Py_RETURN_NONE; - return Py_BuildValue("(kkks)", ni.bg_color, ni.frame_color, ni.ea, ni.text.c_str()); -} - -//------------------------------------------------------------------------- -void ida_export py_customidamemo_t_del_nodes_infos( - py_customidamemo_t *_this, - PyObject *py_nodes) -{ - if ( !PySequence_Check(py_nodes) ) - return; - Py_ssize_t sz = PySequence_Size(py_nodes); - for ( Py_ssize_t i = 0; i < sz; ++i ) - { - newref_t item(PySequence_GetItem(py_nodes, i)); - if ( !PyNumber_Check(item.o) ) - continue; - int idx = PyInt_AsLong(item.o); - viewer_del_node_info(_this->view, idx); - } -} - -//------------------------------------------------------------------------- -PyObject *ida_export py_customidamemo_t_get_current_renderer_type( - py_customidamemo_t *_this) -{ - tcc_renderer_type_t rt = get_view_renderer_type(_this->view); - return PyLong_FromLong(long(rt)); -} - -//------------------------------------------------------------------------- -void ida_export py_customidamemo_t_set_current_renderer_type( - py_customidamemo_t *_this, - PyObject *py_rto) -{ - tcc_renderer_type_t rt = TCCRT_INVALID; - borref_t py_rt(py_rto); - if ( PyNumber_Check(py_rt.o) ) - { - rt = tcc_renderer_type_t(PyLong_AsLong(py_rt.o)); - set_view_renderer_type(_this->view, rt); - } -} - //------------------------------------------------------------------------- PyObject *ida_export py_customidamemo_t_create_groups( py_customidamemo_t *_this, @@ -1631,19 +1574,19 @@ PyObject *ida_export py_customidamemo_t_create_groups( if ( nodes.o == NULL || !PySequence_Check(nodes.o) ) continue; borref_t text(PyDict_GetItemString(item.o, "text")); - if ( text.o == NULL || !PyString_Check(text.o) ) + if ( text.o == NULL || !IDAPyStr_Check(text.o) ) continue; group_crinfo_t gi; Py_ssize_t nodes_cnt = PySequence_Size(nodes.o); for ( Py_ssize_t k = 0; k < nodes_cnt; ++k ) { newref_t node(PySequence_GetItem(nodes.o, k)); - if ( PyInt_Check(node.o) ) - gi.nodes.add_unique(PyInt_AsLong(node.o)); + if ( IDAPyInt_Check(node.o) ) + gi.nodes.add_unique(IDAPyInt_AsLong(node.o)); } if ( !gi.nodes.empty() ) { - gi.text = PyString_AsString(text.o); + IDAPyStr_AsUTF8(&gi.text, text.o); gis.push_back(gi); } } @@ -1653,7 +1596,7 @@ PyObject *ida_export py_customidamemo_t_create_groups( PyObject *py_groups = PyList_New(0); for ( intvec_t::const_iterator it = groups.begin(); it != groups.end(); ++it ) - PyList_Append(py_groups, PyInt_FromLong(long(*it))); + PyList_Append(py_groups, IDAPyInt_FromLong(long(*it))); return py_groups; } @@ -1664,9 +1607,9 @@ static void pynodes_to_idanodes(intvec_t *idanodes, ref_t pynodes) for ( Py_ssize_t i = 0; i < sz; ++i ) { newref_t item(PySequence_GetItem(pynodes.o, i)); - if ( !PyInt_Check(item.o) ) + if ( !IDAPyInt_Check(item.o) ) continue; - idanodes->add_unique(PyInt_AsLong(item.o)); + idanodes->add_unique(IDAPyInt_AsLong(item.o)); } } @@ -1684,7 +1627,7 @@ PyObject *ida_export py_customidamemo_t_delete_groups( pynodes_to_idanodes(&ida_groups, groups); if ( ida_groups.empty() ) Py_RETURN_NONE; - if ( viewer_delete_groups(_this->view, ida_groups, int(PyInt_AsLong(new_current.o))) ) + if ( viewer_delete_groups(_this->view, ida_groups, int(IDAPyInt_AsLong(new_current.o))) ) Py_RETURN_TRUE; else Py_RETURN_FALSE; @@ -1708,7 +1651,11 @@ PyObject *ida_export py_customidamemo_t_set_groups_visibility( pynodes_to_idanodes(&ida_groups, groups); if ( ida_groups.empty() ) Py_RETURN_NONE; +#ifdef PY3 + if ( viewer_set_groups_visibility(_this->view, ida_groups, expand.o == Py_True, int(PyLong_AsLong(new_current.o))) ) +#else if ( viewer_set_groups_visibility(_this->view, ida_groups, expand.o == Py_True, int(PyInt_AsLong(new_current.o))) ) +#endif Py_RETURN_TRUE; else Py_RETURN_FALSE; @@ -1722,7 +1669,7 @@ bool ida_export py_customidamemo_t_bind(py_customidamemo_t *_this, PyObject *sel PYGLOG("%p: py_customidamemo_t::bind(self=%p, view=%p)\n", _this, _this->self.o, _this->view); PYW_GIL_CHECK_LOCKED_SCOPE(); - newref_t py_cobj(PyCObject_FromVoidPtr(_this, NULL)); + newref_t py_cobj(PyCapsule_New(_this, VALID_CAPSULE_NAME, NULL)); PyObject_SetAttrString(self, S_M_THIS, py_cobj.o); _this->self = borref_t(self); @@ -1737,8 +1684,7 @@ void ida_export py_customidamemo_t_unbind(py_customidamemo_t *_this, bool clear_ 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 py_cobj(PyCObject_FromVoidPtr(NULL, NULL)); - PyObject_SetAttrString(_this->self.o, S_M_THIS, py_cobj.o); + PyObject_SetAttrString(_this->self.o, S_M_THIS, Py_None); _this->self = newref_t(NULL); if ( clear_view ) _this->view = NULL; @@ -1863,8 +1809,7 @@ static qvector live_timers; py_timer_ctx_t *ida_export python_timer_new(PyObject *py_callback) { py_timer_ctx_t *t = new py_timer_ctx_t(); - t->pycallback = py_callback; - Py_INCREF(t->pycallback); + t->pyfunc = borref_t(py_callback); live_timers.push_back(t); return t; } @@ -1873,7 +1818,6 @@ py_timer_ctx_t *ida_export python_timer_new(PyObject *py_callback) void ida_export python_timer_del(py_timer_ctx_t *t) { QASSERT(30491, live_timers.del(t)); - Py_DECREF(t->pycallback); delete t; } @@ -1914,7 +1858,11 @@ ssize_t ida_export get_callable_arg_count(ref_t callable) ssize_t cnt = -1; if ( py_module != NULL ) { +#ifdef PY3 + ref_t py_fun = PyW_TryGetAttrString(py_module.o, "getfullargspec"); +#else ref_t py_fun = PyW_TryGetAttrString(py_module.o, "getargspec"); +#endif if ( py_fun != NULL ) { newref_t py_tuple(PyObject_CallFunctionObjArgs(py_fun.o, callable.o, NULL)); @@ -1977,7 +1925,7 @@ bool ida_export idapython_unhook_from_notification_point( hook_cb_t *cb, void *user_data) { - bool ok = unhook_from_notification_point(hook_type, cb, user_data); + bool ok = unhook_from_notification_point(hook_type, cb, user_data) > 0; if ( ok ) { bool found = false; @@ -2013,14 +1961,14 @@ bool ida_export idapython_convert_cli_completions( borref_t i0(PyTuple_GetItem(py_res.o, 0)); borref_t i1(PyTuple_GetItem(py_res.o, 1)); borref_t i2(PyTuple_GetItem(py_res.o, 2)); - ok = PyList_Check(i0.o) && PyInt_Check(i1.o) && PyInt_Check(i2.o); + ok = PyList_Check(i0.o) && IDAPyInt_Check(i1.o) && IDAPyInt_Check(i2.o); if ( ok ) { ok = PyW_PyListToStrVec(out_completions, i0.o) > 0; if ( ok ) { - *out_match_start = PyInt_AsLong(i1.o); - *out_match_end = PyInt_AsLong(i2.o); + *out_match_start = IDAPyInt_AsLong(i1.o); + *out_match_end = IDAPyInt_AsLong(i2.o); ok = PyErr_Occurred() == NULL; } else @@ -2033,4 +1981,22 @@ bool ida_export idapython_convert_cli_completions( return ok; } +//------------------------------------------------------------------------- +int ida_export pylong_to_byte_array( + bytevec_t *out_allocated_buffer, + PyObject *in, + bool little_endian, + bool is_signed) +{ + if ( !PyLong_Check(in) ) + return -1; + return extapi._PyLong_AsByteArray_ptr( + in, + out_allocated_buffer->begin(), + out_allocated_buffer->size(), + little_endian, + is_signed); +} + + #undef DEF_REG_UNREG_REFCOUNTED diff --git a/pywraps.hpp b/pywraps.hpp index 2eb7f50..59390e4 100644 --- a/pywraps.hpp +++ b/pywraps.hpp @@ -13,6 +13,16 @@ #define PY_BV_SEL PY_BV_EA #define PY_BV_SVAL "L" // Convert a C long long to a Python long integer object +#ifdef PY3 +# define PY_BV_TYPE "y" +# define PY_BV_FIELDS "y" +# define PY_BV_BYTES "y" +#else +# define PY_BV_TYPE "s" +# define PY_BV_FIELDS "s" +# define PY_BV_BYTES "s" +#endif + typedef unsigned PY_LONG_LONG bvea_t; typedef Py_ssize_t bvsz_t; typedef bvea_t bvuval_t; @@ -66,6 +76,7 @@ static const char S_PY_OP_T_CLSNAME[] = "op_t"; static const char S_PROPS[] = "props"; static const char S_NAME[] = "name"; static const char S_TITLE[] = "title"; +static const char S_COLS[] = "cols"; static const char S_ASM_KEYWORD[] = "asm_keyword"; static const char S_MENU_NAME[] = "menu_name"; static const char S_HOTKEY[] = "hotkey"; @@ -120,6 +131,9 @@ static const char S_CLINK_NAME[] = "__clink__"; static const char S_ON_VIEW_MOUSE_MOVED[] = "OnViewMouseMoved"; static const char S_MAIN[] = "__main__"; +#define VALID_CAPSULE_NAME "$valid$" +#define INVALID_CAPSULE_NAME "$INvalid$" + #ifdef __PYWRAPS__ static const char S_PY_IDA_IDAAPI_MODNAME[] = "__main__"; #else @@ -165,8 +179,19 @@ idaman uint32 ida_export_data debug; #define IDA_DEBUG_PLUGIN 0x00000020 THREAD_SAFE AS_PRINTF(1, 2) inline int msg(const char *format, ...); #endif // __KERNWIN_HPP -#define GIL_CHKCONDFAIL (((debug & IDA_DEBUG_PLUGIN) != 0) \ - && PyGILState_GetThisThreadState() != _PyThreadState_Current) + +#ifdef PY3 +# ifdef Py_LIMITED_API +# define GIL_CHKCONDFAIL (false) +# else +# define GIL_CHKCONDFAIL (((debug & IDA_DEBUG_PLUGIN) != 0) && !PyGILState_Check()) +# endif +#else +# define GIL_CHKCONDFAIL (((debug & IDA_DEBUG_PLUGIN) != 0) \ + && PyGILState_GetThisThreadState() != _PyThreadState_Current) +#endif + +#include "idapy.hpp" #define PYW_GIL_CHECK_LOCKED_SCOPE() \ do \ @@ -353,7 +378,7 @@ idaman bool ida_export PyW_GetStringAttr( const char *attr_name, qstring *str); -// Converts a Python number to an uint64 and indicates whether the number was a long number +// Deprecated. Please use specific functions instead. idaman bool ida_export PyW_GetNumber(PyObject *py_var, uint64 *num, bool *is_64 = NULL); // Checks if an Python object can be treated like a sequence @@ -384,6 +409,7 @@ idaman error_t ida_export PyW_CreateIdcException(idc_value_t *res, const char *m // #define PYWCVTF_AS_TUPLE 0x1 #define PYWCVTF_INT64_AS_UNSIGNED_PYLONG 0x2 // don't wrap int64 into 'PyIdc_cvt_int64__' objects, but make them 'long' instead +#define PYWCVTF_STR_AS_BYTES 0x4 // VT_STR objects will be converted into 'bytes', not strings coming from UTF-8 data // Converts from IDC to Python idaman bool ida_export pyw_convert_idc_args( @@ -437,9 +463,6 @@ typedef qvector ea64vec_t; #endif // LUMINA_HPP idaman Py_ssize_t ida_export PyW_PyListToEa64Vec(ea64vec_t *out, PyObject *py_list); -//------------------------------------------------------------------------- -idaman bool ida_export PyWStringOrNone_Check(PyObject *tp); - //------------------------------------------------------------------------- #include idaman PyObject *ida_export meminfo_vec_t_to_py(meminfo_vec_t &ranges); @@ -583,30 +606,6 @@ struct pycim_callbacks_ids_t : public qvector //------------------------------------------------------------------------- // //------------------------------------------------------------------------- -#define PY_CIM_HLPPRM_set_node_info (py_customidamemo_t *_this, PyObject *py_node_idx, PyObject *py_node_info, PyObject *py_flags) -#define PY_CIM_PARAMS_set_node_info (PyObject *py_node_idx, PyObject *py_node_info, PyObject *py_flags) -#define PY_CIM_TRANSM_set_node_info (this, py_node_idx, py_node_info, py_flags) - -#define PY_CIM_HLPPRM_set_nodes_infos (py_customidamemo_t *_this, PyObject *dict) -#define PY_CIM_PARAMS_set_nodes_infos (PyObject *dict) -#define PY_CIM_TRANSM_set_nodes_infos (this, dict) - -#define PY_CIM_HLPPRM_get_node_info (py_customidamemo_t *_this, PyObject *py_node_idx) -#define PY_CIM_PARAMS_get_node_info (PyObject *py_node_idx) -#define PY_CIM_TRANSM_get_node_info (this, py_node_idx) - -#define PY_CIM_HLPPRM_del_nodes_infos (py_customidamemo_t *_this, PyObject *py_nodes) -#define PY_CIM_PARAMS_del_nodes_infos (PyObject *py_nodes) -#define PY_CIM_TRANSM_del_nodes_infos (this, py_nodes) - -#define PY_CIM_HLPPRM_get_current_renderer_type (py_customidamemo_t *_this) -#define PY_CIM_PARAMS_get_current_renderer_type () -#define PY_CIM_TRANSM_get_current_renderer_type (this) - -#define PY_CIM_HLPPRM_set_current_renderer_type (py_customidamemo_t *_this, PyObject *py_rto) -#define PY_CIM_PARAMS_set_current_renderer_type (PyObject *py_rto) -#define PY_CIM_TRANSM_set_current_renderer_type (this, py_rto) - #define PY_CIM_HLPPRM_create_groups (py_customidamemo_t *_this, PyObject *groups_infos) #define PY_CIM_PARAMS_create_groups (PyObject *groups_infos) #define PY_CIM_TRANSM_create_groups (this, groups_infos) @@ -639,12 +638,6 @@ struct pycim_callbacks_ids_t : public qvector decl RType ida_export py_customidamemo_t_##MName MParams #define DECL_CIM_HELPERS(decl) \ - DECL_CIM_HELPER(decl, void, set_node_info, PY_CIM_HLPPRM_set_node_info); \ - DECL_CIM_HELPER(decl, void, set_nodes_infos, PY_CIM_HLPPRM_set_nodes_infos); \ - DECL_CIM_HELPER(decl, PyObject*, get_node_info, PY_CIM_HLPPRM_get_node_info); \ - DECL_CIM_HELPER(decl, void, del_nodes_infos, PY_CIM_HLPPRM_del_nodes_infos); \ - DECL_CIM_HELPER(decl, PyObject*, get_current_renderer_type, PY_CIM_HLPPRM_get_current_renderer_type); \ - DECL_CIM_HELPER(decl, void, set_current_renderer_type, PY_CIM_HLPPRM_set_current_renderer_type); \ DECL_CIM_HELPER(decl, PyObject*, create_groups, PY_CIM_HLPPRM_create_groups); \ DECL_CIM_HELPER(decl, PyObject*, delete_groups, PY_CIM_HLPPRM_delete_groups); \ DECL_CIM_HELPER(decl, PyObject*, set_groups_visibility, PY_CIM_HLPPRM_set_groups_visibility);\ @@ -662,11 +655,6 @@ DECL_CIM_HELPERS(idaman); class py_customidamemo_t { - void convert_node_info( - node_info_t *out, - uint32 *out_flags, - ref_t py_nodeinfo); - // can use up to 16 bits; not more! (GRCODE_HAVE_* uses the rest) enum { @@ -720,12 +708,6 @@ public: } inline bool has_callback(int flag) { return (cb_flags & flag) != 0; } - PY_CIM_TRAMPOLINE(void, set_node_info, PY_CIM_PARAMS_set_node_info, PY_CIM_TRANSM_set_node_info); - PY_CIM_TRAMPOLINE(void, set_nodes_infos, PY_CIM_PARAMS_set_nodes_infos, PY_CIM_TRANSM_set_nodes_infos); - PY_CIM_TRAMPOLINE(PyObject*, get_node_info, PY_CIM_PARAMS_get_node_info, PY_CIM_TRANSM_get_node_info); - PY_CIM_TRAMPOLINE(void, del_nodes_infos, PY_CIM_PARAMS_del_nodes_infos, PY_CIM_TRANSM_del_nodes_infos); - PY_CIM_TRAMPOLINE(PyObject*, get_current_renderer_type, PY_CIM_PARAMS_get_current_renderer_type, PY_CIM_TRANSM_get_current_renderer_type); - PY_CIM_TRAMPOLINE(void, set_current_renderer_type, PY_CIM_PARAMS_set_current_renderer_type, PY_CIM_TRANSM_set_current_renderer_type); PY_CIM_TRAMPOLINE(PyObject*, create_groups, PY_CIM_PARAMS_create_groups, PY_CIM_TRANSM_create_groups); PY_CIM_TRAMPOLINE(PyObject*, delete_groups, PY_CIM_PARAMS_delete_groups, PY_CIM_TRANSM_delete_groups); PY_CIM_TRAMPOLINE(PyObject*, set_groups_visibility, PY_CIM_PARAMS_set_groups_visibility, PY_CIM_TRANSM_set_groups_visibility); @@ -735,16 +717,14 @@ public: #undef DECL_CIM_HELPERS #undef DECL_CIM_HELPER - //------------------------------------------------------------------------- -template -T *view_extract_this(PyObject *self) +inline void *view_extract_this(PyObject *self) { PYW_GIL_CHECK_LOCKED_SCOPE(); ref_t py_this(PyW_TryGetAttrString(self, S_M_THIS)); - if ( py_this == NULL || !PyCObject_Check(py_this.o) ) + if ( py_this == NULL || !PyCapsule_IsValid(py_this.o, VALID_CAPSULE_NAME) ) return NULL; - return (T*) PyCObject_AsVoidPtr(py_this.o); + return PyCapsule_GetPointer(py_this.o, VALID_CAPSULE_NAME); } //------------------------------------------------------------------------- @@ -765,10 +745,12 @@ DECL_REG_UNREG_REFCOUNTED(udt_type_data_t); // Context structure used by register/unregister timer struct py_timer_ctx_t { - py_timer_ctx_t() : timer_id(NULL), pycallback(NULL) {} + py_timer_ctx_t() : timer_id(NULL) {} qtimer_t timer_id; - PyObject *pycallback; + ref_t pyfunc; }; + +//------------------------------------------------------------------------- idaman py_timer_ctx_t *ida_export python_timer_new(PyObject *py_callback); idaman void ida_export python_timer_del(py_timer_ctx_t *t); @@ -799,6 +781,9 @@ struct new_execution_t ~new_execution_t() { setup_new_execution(this, false); } }; +//------------------------------------------------------------------------- +idaman bool ida_export is_api695_compat_enabled(); + //------------------------------------------------------------------------- idaman bool ida_export idapython_hook_to_notification_point( hook_type_t hook_type, @@ -858,10 +843,10 @@ protected: // identifier { ref_t py_id = newref_t(PyObject_GetAttrString(self, "id")); - if ( py_id == NULL || !PyString_Check(py_id.o) ) + if ( py_id == NULL || !IDAPyStr_Check(py_id.o) ) py_id = newref_t(PyObject_Repr(self)); - if ( py_id != NULL && PyString_Check(py_id.o) ) - identifier = PyString_AsString(py_id.o); + if ( py_id != NULL && IDAPyStr_Check(py_id.o) ) + IDAPyStr_AsUTF8(&identifier, py_id.o); } // method set @@ -900,7 +885,11 @@ protected: _has_nondef = 2; else #endif +#ifdef PY3 + _has_nondef = PyObject_RichCompareBool(py_this_meth.o, py_def_meth.o, Py_EQ) == 0 ? 1 : 0; +#else _has_nondef = PyObject_Compare(py_this_meth.o, py_def_meth.o) != 0 ? 1 : 0; +#endif } has_nondef[cur.code] = _has_nondef; } @@ -908,6 +897,26 @@ protected: } } + void ensure_no_method_when_no_695_compat( + PyObject *self, + const char *forbidden_method_name, + const char *replacement_method_name) + { + if ( !is_api695_compat_enabled() ) + { + if ( PyObject_HasAttrString(self, "__class__") ) + { + newref_t py_this_class(PyObject_GetAttrString(self, "__class__")); + if ( py_this_class != NULL + && PyObject_HasAttrString(py_this_class.o, forbidden_method_name) ) + { + msg("WARNING: The method \"%s::%s\" won't be called (it has been replaced with \"%s::%s\")\n", + class_name, forbidden_method_name, class_name, replacement_method_name); + } + } + } + } + qstring dump_state( const event_code_to_method_name_t *mappings, size_t mappings_size) const @@ -943,6 +952,14 @@ protected: } }; +//------------------------------------------------------------------------- +idaman THREAD_SAFE void ida_export idapython_show_wait_box( + bool internal, + const char *message); +idaman void ida_export idapython_hide_wait_box(); +#define show_wait_box USE_IDAPYTHON_SHOW_WAIT_BOX +#define hide_wait_box USE_IDAPYTHON_HIDE_WAIT_BOX + //------------------------------------------------------------------------- idaman bool ida_export idapython_convert_cli_completions( qstrvec_t *out_completions, @@ -951,11 +968,11 @@ idaman bool ida_export idapython_convert_cli_completions( ref_t py_res); //------------------------------------------------------------------------- -idaman void ida_export dump_hooks_state( - qstrvec_t *out, - const hooks_base_t &h, - const hooks_base_t::event_code_to_method_name_t *mappings, - size_t mappings_size); +idaman int ida_export pylong_to_byte_array( + bytevec_t *out_allocated_buffer, + PyObject *in, + bool little_endian=true, + bool is_signed=true); //------------------------------------------------------------------------- struct module_callbacks_t diff --git a/pywraps/py_bytes.hpp b/pywraps/py_bytes.hpp index c640864..103c095 100644 --- a/pywraps/py_bytes.hpp +++ b/pywraps/py_bytes.hpp @@ -40,7 +40,7 @@ static int idaapi py_visit_patched_bytes_cb( o, v)); PyW_ShowCbErr("visit_patched_bytes"); - return (py_result != NULL && PyInt_Check(py_result.o)) ? PyInt_AsLong(py_result.o) : 0; + return (py_result != NULL && IDAPyInt_Check(py_result.o)) ? IDAPyInt_AsLong(py_result.o) : 0; } //------------------------------------------------------------------------- @@ -70,7 +70,8 @@ static bool py_do_get_bytes( break; // Allocate memory via Python - newref_t py_bytes(PyString_FromStringAndSize(NULL, Py_ssize_t(size))); + + newref_t py_bytes(IDAPyBytes_FromMemAndSize(NULL, Py_ssize_t(size))); if ( py_bytes == NULL ) break; @@ -79,7 +80,7 @@ static bool py_do_get_bytes( mask.resize((size + 7) / 8, 0); // Read bytes - int code = get_bytes(PyString_AsString(py_bytes.o), + int code = get_bytes(IDAPyBytes_AsString(py_bytes.o), size, ea, gmb_flags, @@ -90,7 +91,7 @@ static bool py_do_get_bytes( // note: specify size, as '0' bytes would otherwise cut the mask short if ( has_mask ) { - newref_t py_mask(PyString_FromStringAndSize( + newref_t py_mask(IDAPyBytes_FromMemAndSize( (const char *) mask.begin(), mask.size())); if ( py_mask == NULL ) @@ -260,7 +261,7 @@ static PyObject *py_get_strlit_contents( if ( type == STRTYPE_C && buf.length() > 0 && buf.last() == '\0' ) buf.remove_last(); PYW_GIL_CHECK_LOCKED_SCOPE(); - newref_t py_buf(PyString_FromStringAndSize(buf.begin(), buf.length())); + newref_t py_buf(IDAPyBytes_FromMemAndSize(buf.begin(), buf.length())); py_buf.incref(); return py_buf.o; } @@ -269,17 +270,20 @@ static PyObject *py_get_strlit_contents( static ea_t py_bin_search( ea_t start_ea, ea_t end_ea, - const uchar *image, - size_t len, - const uchar *mask, + const bytevec_t &image, + const bytevec_t &imask, int step, int flags) { + if ( image.empty() ) + return BADADDR; if ( step != /* old value of BIN_SEARCH_FORWARD*/ 1 && step != /* new value of BIN_SEARCH_FORWARD */ 0 ) { flags |= BIN_SEARCH_BACKWARD; } + const size_t len = image.size(); + const uchar *mask = imask.begin(); bytevec_t lmask; if ( mask != NULL ) { @@ -299,7 +303,7 @@ static ea_t py_bin_search( mask = lmask.begin(); } } - return bin_search2(start_ea, end_ea, image, mask, len, flags); + return bin_search2(start_ea, end_ea, image.begin(), mask, len, flags); } //------------------------------------------------------------------------- diff --git a/pywraps/py_bytes_custdata.hpp b/pywraps/py_bytes_custdata.hpp index 58691ef..058ff0c 100644 --- a/pywraps/py_bytes_custdata.hpp +++ b/pywraps/py_bytes_custdata.hpp @@ -188,7 +188,7 @@ private: PYW_GIL_GET; // Build a string from the buffer - newref_t py_value(PyString_FromStringAndSize( + newref_t py_value(IDAPyBytes_FromMemAndSize( (const char *)value, Py_ssize_t(size))); if ( py_value == NULL ) @@ -209,15 +209,10 @@ private: return false; bool ok = false; - if ( PyString_Check(py_result.o) ) + if ( IDAPyStr_Check(py_result.o) ) { - Py_ssize_t len; - char *buf; - if ( out != NULL && PyString_AsStringAndSize(py_result.o, &buf, &len) != -1 ) - { - out->qclear(); - out->append(buf, len); - } + if ( out != NULL ) + IDAPyStr_AsUTF8(out, py_result.o); ok = true; } return ok; @@ -258,7 +253,7 @@ private: borref_t py_val(PyTuple_GetItem(py_result.o, 1)); // Get return code from Python - ok = PyObject_IsTrue(py_bool.o); + ok = PyObject_IsTrue(py_bool.o) != 0; // We expect None or the value (depending on probe) if ( ok ) @@ -269,7 +264,7 @@ private: Py_ssize_t len; char *buf; - if ( PyString_AsStringAndSize(py_val.o, &buf, &len) != -1 ) + if ( IDAPyBytes_AsMemAndSize(py_val.o, &buf, &len) != -1 ) { value->qclear(); value->append(buf, len); @@ -279,13 +274,13 @@ private: else { // Make sure the user returned (False, String) - if ( py_bool.o != Py_False || !PyString_Check(py_val.o) ) + if ( py_bool.o != Py_False || !IDAPyStr_Check(py_val.o) ) { *errstr = "Invalid return value returned from the Python callback!"; break; } // Get the error message - *errstr = PyString_AsString(py_val.o); + IDAPyStr_AsUTF8(errstr, py_val.o); } } while ( false ); return ok; diff --git a/pywraps/py_bytes_custdata.py b/pywraps/py_bytes_custdata.py index 2755789..302cc40 100644 --- a/pywraps/py_bytes_custdata.py +++ b/pywraps/py_bytes_custdata.py @@ -74,7 +74,8 @@ def register_data_types_and_formats(formats): # ----------------------------------------------------------------------- def unregister_data_types_and_formats(formats): - """As opposed to register_data_types_and_formats(), this function + """ + As opposed to register_data_types_and_formats(), this function unregisters multiple data types and formats at once. """ def __unreg_format(df, dtid): diff --git a/pywraps/py_dbg.hpp b/pywraps/py_dbg.hpp index 236182a..360ca03 100644 --- a/pywraps/py_dbg.hpp +++ b/pywraps/py_dbg.hpp @@ -126,10 +126,10 @@ static bool _to_reg_val(regval_t **out, regval_t *buf, const char *name, PyObjec if ( status.ok ) { status.ok = false; - if ( PyString_Check(in) ) + if ( IDAPyBytes_Check(in) ) { char *buf; - status.ok = PyString_AsStringAndSize(in, &buf, &got) >= 0 && got <= nbytes; + status.ok = IDAPyBytes_AsMemAndSize(in, &buf, &got) >= 0 && got <= nbytes; if ( status.ok ) bytes.append((const uchar *) buf, got); else @@ -137,7 +137,7 @@ static bool _to_reg_val(regval_t **out, regval_t *buf, const char *name, PyObjec "List of bytes is too long; was expecting at most %d bytes", int(nbytes)); } - else if ( PyInt_Check(in) ) + else if ( IDAPyInt_Check(in) ) { uint64 u64 = 0; status.ok = PyW_GetNumber(in, &u64); @@ -147,9 +147,15 @@ static bool _to_reg_val(regval_t **out, regval_t *buf, const char *name, PyObjec bytes.resize(got, 0); memcpy(bytes.begin(), &u64, got); } + else + { + if ( PyLong_CheckExact(in) ) + goto TRY_RAW_LONG; + } } else if ( PyLong_CheckExact(in) ) { +TRY_RAW_LONG: // (possibly very long) int or long value. Apparently it's rather // safe to use _PyLong_AsByteArray (it's even present in 3.x) // https://stackoverflow.com/questions/18290507/python-extension-construct-and-inspect-large-integers-efficiently @@ -174,12 +180,11 @@ static bool _to_reg_val(regval_t **out, regval_t *buf, const char *name, PyObjec // case, but bytes holds the least-significant n bytes of the true value. // */ bytes.resize(nbytes, 0); - status.ok = _PyLong_AsByteArray( - (PyLongObject *) in, - bytes.begin(), - bytes.size(), - /*little_endian=*/ 1, - /*is_signed=*/ 1) >= 0; + status.ok = pylong_to_byte_array( + &bytes, + in, + /*little_endian=*/ true, + /*is_signed=*/ true) >= 0; if ( status.ok ) got = nbytes; else @@ -239,7 +244,7 @@ static PyObject *_from_reg_val( switch ( ri.dtype ) { default: - if ( rv.ival <= uint64(PyInt_GetMax()) ) + if ( rv.ival <= uint64(LONG_MAX) ) res = PyInt_FromLong(long(rv.ival)); else res = PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) rv.ival); @@ -260,7 +265,7 @@ static PyObject *_from_reg_val( case dt_byte64: { const bytevec_t &b = rv.bytes(); - res = PyString_FromStringAndSize((const char *) b.begin(), b.size()); + res = IDAPyBytes_FromMemAndSize((const char *) b.begin(), b.size()); } break; } @@ -442,11 +447,11 @@ static ea_t py_internal_get_sreg_base(thid_t tid, int sreg_value) static ssize_t py_write_dbg_memory(ea_t ea, PyObject *py_buf, size_t size=size_t(-1)) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !dbg_can_query() || !PyString_Check(py_buf) ) + if ( !dbg_can_query() || !IDAPyBytes_Check(py_buf) ) return -1; char *buf = NULL; Py_ssize_t sz; - if ( PyString_AsStringAndSize(py_buf, &buf, &sz) < 0 ) + if ( IDAPyBytes_AsMemAndSize(py_buf, &buf, &sz) < 0 ) return -1; if ( size == size_t(-1) ) size = size_t(sz); @@ -482,7 +487,7 @@ static PyObject *py_set_reg_val(const char *regname, PyObject *o) if ( !ok ) { PyErr_SetString(PyExc_Exception, "Failed to set register value"); - Py_RETURN_FALSE; + return NULL; } Py_RETURN_TRUE; } @@ -508,7 +513,7 @@ static PyObject *py_set_reg_val(thid_t tid, int regidx, PyObject *o) if ( !_to_reg_val(&ptr, &buf, ri.name, o) ) return NULL; SWIG_PYTHON_THREAD_BEGIN_ALLOW; - bool ok = set_reg_val(tid, regidx, ptr); + bool ok = set_reg_val(tid, regidx, ptr) > 0; SWIG_PYTHON_THREAD_END_ALLOW; return PyInt_FromLong(ok); } @@ -526,7 +531,7 @@ static PyObject *py_request_set_reg_val(const char *regname, PyObject *o) if ( !ok ) { PyErr_SetString(PyExc_Exception, "Failed to request set register value"); - Py_RETURN_FALSE; + return NULL; } Py_RETURN_TRUE; } diff --git a/pywraps/py_diskio.hpp b/pywraps/py_diskio.hpp index 4db535f..c63e7ee 100644 --- a/pywraps/py_diskio.hpp +++ b/pywraps/py_diskio.hpp @@ -9,7 +9,7 @@ int idaapi py_enumerate_files_cb(const char *file, void *ud) // and from the same thread as the one that executes // 'py_enumerate_files'. PYW_GIL_CHECK_LOCKED_SCOPE(); - newref_t py_file(PyString_FromString(file)); + newref_t py_file(IDAPyStr_FromUTF8(file)); newref_t py_ret( PyObject_CallFunctionObjArgs( (PyObject *)ud, @@ -54,17 +54,21 @@ PyObject *py_enumerate_files(PyObject *path, PyObject *fname, PyObject *callback do { - if ( !PyString_Check(path) || !PyString_Check(fname) || !PyCallable_Check(callback) ) + if ( !IDAPyStr_Check(path) || !IDAPyStr_Check(fname) || !PyCallable_Check(callback) ) break; - const char *_path = PyString_AsString(path); - const char *_fname = PyString_AsString(fname); - if ( _path == NULL || _fname == NULL ) + qstring _path; + qstring _fname; + if ( !IDAPyStr_AsUTF8(&_path, path) || !IDAPyStr_AsUTF8(&_fname, fname) ) break; char answer[MAXSTR]; answer[0] = '\0'; - int r = enumerate_files(answer, sizeof(answer), _path, _fname, py_enumerate_files_cb, callback); + int r = enumerate_files( + answer, sizeof(answer), + _path.c_str(), + _fname.c_str(), + py_enumerate_files_cb, callback); return Py_BuildValue("(is)", r, answer); } while ( false ); Py_RETURN_NONE; diff --git a/pywraps/py_fpro.hpp b/pywraps/py_fpro.hpp index 1f26367..fa96e49 100644 --- a/pywraps/py_fpro.hpp +++ b/pywraps/py_fpro.hpp @@ -14,7 +14,9 @@ class qfile_t(pyidc_opaque_object_t): pass def open(self, filename, mode): - """Opens a file + """ + Opens a file + @param filename: the file name @param mode: The mode string, ala fopen() style @return: Boolean @@ -31,7 +33,8 @@ class qfile_t(pyidc_opaque_object_t): pass def seek(self, pos, whence = SEEK_SET): - """Set input source position + """ + Set input source position @return: the new position (not 0 as fseek!) """ pass @@ -63,12 +66,12 @@ class qfile_t(pyidc_opaque_object_t): def flush(self): pass - def get_char(self): - """Reads a single character from the file. Returns None if EOF or the read character""" + def get_byte(self): + """Reads a single byte from the file. Returns None if EOF or the read byte""" pass - def put_char(self): - """Writes a single character to the file""" + def put_byte(self): + """Writes a single byte to the file""" pass def opened(self): @@ -100,10 +103,10 @@ private: this->fp = fp; return true; } - inline void _from_cobject(PyObject *pycobject) + inline void _from_capsule(PyObject *pycapsule) { PYW_GIL_CHECK_LOCKED_SCOPE(); - _from_fp((FILE *)PyCObject_AsVoidPtr(pycobject)); + _from_fp((FILE *) PyCapsule_GetPointer(pycapsule, VALID_CAPSULE_NAME)); } public: int __idc_cvt_id__; @@ -114,7 +117,7 @@ public: } //-------------------------------------------------------------------------- - qfile_t(PyObject *pycobject = NULL) + qfile_t(PyObject *pycapsule = NULL) { fp = NULL; own = true; @@ -123,10 +126,10 @@ public: bool ok; { PYW_GIL_CHECK_LOCKED_SCOPE(); - ok = pycobject != NULL && PyCObject_Check(pycobject); + ok = pycapsule != NULL && PyCapsule_IsValid(pycapsule, VALID_CAPSULE_NAME); } if ( ok ) - _from_cobject(pycobject); + _from_capsule(pycapsule); } //-------------------------------------------------------------------------- @@ -185,9 +188,11 @@ public: //-------------------------------------------------------------------------- // This method can be used to pass a FILE* from C code - static qfile_t *from_cobject(PyObject *pycobject) + static qfile_t *from_capsule(PyObject *pycapsule) { - return PyCObject_Check(pycobject) ? from_fp((FILE *)PyCObject_AsVoidPtr(pycobject)) : NULL; + return PyCapsule_IsValid(pycapsule, VALID_CAPSULE_NAME) + ? from_fp((FILE *) PyCapsule_GetPointer(pycapsule, VALID_CAPSULE_NAME)) + : NULL; } //-------------------------------------------------------------------------- @@ -245,7 +250,7 @@ public: break; } - PyObject *ret = PyString_FromStringAndSize(buf, r); + PyObject *ret = IDAPyStr_FromUTF8AndSize(buf, r); free(buf); return ret; } while ( false ); @@ -270,7 +275,7 @@ public: free(buf); break; } - PyObject *ret = PyString_FromStringAndSize(buf, r); + PyObject *ret = IDAPyStr_FromUTF8AndSize(buf, r); free(buf); return ret; } while ( false ); @@ -295,7 +300,7 @@ public: free(buf); break; } - PyObject *ret = PyString_FromString(buf); + PyObject *ret = IDAPyStr_FromUTF8(buf); free(buf); return ret; } while ( false ); @@ -305,11 +310,10 @@ public: //-------------------------------------------------------------------------- int writebytes(PyObject *py_buf, bool big_endian) { - Py_ssize_t sz; - void *buf; PYW_GIL_CHECK_LOCKED_SCOPE(); - sz = PyString_GET_SIZE(py_buf); - buf = (void *)PyString_AS_STRING(py_buf); + char *buf; + Py_ssize_t sz; + IDAPyBytes_AsMemAndSize(py_buf, &buf, &sz); int rc; Py_BEGIN_ALLOW_THREADS; rc = fwritebytes(fp, buf, int(sz), big_endian); @@ -321,17 +325,15 @@ public: int write(PyObject *py_buf) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyString_Check(py_buf) ) + if ( !IDAPyStr_Check(py_buf) ) return 0; // Just so that there is no risk that the buffer returned by - // 'PyString_AS_STRING' gets deallocated within the - // Py_BEGIN|END_ALLOW_THREADS section. borref_t py_buf_ref(py_buf); - void *p = (void *)PyString_AS_STRING(py_buf); - Py_ssize_t sz = PyString_GET_SIZE(py_buf); + qstring buf; + IDAPyStr_AsUTF8(&buf, py_buf); int rc; Py_BEGIN_ALLOW_THREADS; - rc = qfwrite(fp, p, sz); + rc = qfwrite(fp, buf.c_str(), buf.length()); Py_END_ALLOW_THREADS; return rc; } @@ -375,11 +377,15 @@ public: PyObject *filename() { PYW_GIL_CHECK_LOCKED_SCOPE(); - return PyString_FromString(fn.c_str()); + return IDAPyStr_FromUTF8(fn.c_str()); } //-------------------------------------------------------------------------- +#ifdef PY3 + PyObject *get_byte() +#else PyObject *get_char() +#endif { PYW_GIL_CHECK_LOCKED_SCOPE(); int ch; @@ -388,11 +394,19 @@ public: Py_END_ALLOW_THREADS; if ( ch == EOF ) Py_RETURN_NONE; +#ifdef PY3 + return Py_BuildValue("i", ch); +#else return Py_BuildValue("c", ch); +#endif } //-------------------------------------------------------------------------- +#ifdef PY3 + int put_byte(int chr) +#else int put_char(char chr) +#endif { PYW_GIL_CHECK_LOCKED_SCOPE(); int rc; diff --git a/pywraps/py_frame.hpp b/pywraps/py_frame.hpp index acc3bab..ca8f512 100644 --- a/pywraps/py_frame.hpp +++ b/pywraps/py_frame.hpp @@ -25,7 +25,7 @@ PyObject *py_get_stkvar(const insn_t &insn, const op_t &op, sval_t v) Py_RETURN_NONE; return Py_BuildValue("(O" PY_BV_SVAL ")", - SWIG_NewPointerObj(SWIG_as_voidptr(member), SWIGTYPE_p_member_t, 0), + SWIG_InternalNewPointerObj(SWIG_as_voidptr(member), SWIGTYPE_p_member_t, 0), bvsval_t(actval)); } // diff --git a/pywraps/py_gdl.py b/pywraps/py_gdl.py index df6f7eb..b312dc8 100644 --- a/pywraps/py_gdl.py +++ b/pywraps/py_gdl.py @@ -1,6 +1,8 @@ # -import _ida_idaapi import types + +import _ida_idaapi +import ida_idaapi # ----------------------------------------------------------------------- class BasicBlock(object): """Basic block class. It is returned by the Flowchart class""" @@ -25,7 +27,7 @@ class BasicBlock(object): Iterates the predecessors list """ q = self._fc._q - for i in xrange(0, self._fc._q.npred(self.id)): + for i in range(0, self._fc._q.npred(self.id)): yield self._fc[q.pred(self.id, i)] @@ -34,13 +36,16 @@ class BasicBlock(object): Iterates the successors list """ q = self._fc._q - for i in xrange(0, q.nsucc(self.id)): + for i in range(0, q.nsucc(self.id)): yield self._fc[q.succ(self.id, i)] try: if _BC695: startEA = property(lambda self: self.start_ea, lambda self, ea: setattr(self, "start_ea", ea)) endEA = property(lambda self: self.end_ea, lambda self, ea: setattr(self, "end_ea", ea)) + else: + startEA = ida_idaapi._make_badattr_property("startEA", "start_ea") + endEA = ida_idaapi._make_badattr_property("endEA", "end_ea") except: pass # BC695 not defined at compile-time @@ -80,7 +85,7 @@ class FlowChart(object): def __iter__(self): - return (self._getitem(index) for index in xrange(0, self.size)) + return (self._getitem(index) for index in range(0, self.size)) def __getitem__(self, index): diff --git a/pywraps/py_graph.hpp b/pywraps/py_graph.hpp index 22db641..9c1d0a4 100644 --- a/pywraps/py_graph.hpp +++ b/pywraps/py_graph.hpp @@ -18,10 +18,9 @@ private: GRCODE_HAVE_DBL_CLICKED = 0x00080000, GRCODE_HAVE_GOTFOCUS = 0x00100000, GRCODE_HAVE_LOSTFOCUS = 0x00200000, - GRCODE_HAVE_CHANGED_CURRENT = 0x00400000, - GRCODE_HAVE_CREATING_GROUP = 0x00800000, - GRCODE_HAVE_DELETING_GROUP = 0x01000000, - GRCODE_HAVE_GROUP_VISIBILITY = 0x02000000, + GRCODE_HAVE_CREATING_GROUP = 0x00400000, + GRCODE_HAVE_DELETING_GROUP = 0x00800000, + GRCODE_HAVE_GROUP_VISIBILITY = 0x01000000, }; struct nodetext_cache_t { @@ -173,26 +172,6 @@ private: PyW_ShowCbErr(S_ON_DEACTIVATE); } - // a new graph node became the current node - int on_changed_current(graph_viewer_t * /*view*/, int curnode) - { - // in: graph_viewer_t *view - // int curnode - // out: 0-ok, 1-forbid to change the current node - if ( curnode < 0 ) - return 0; - - PYW_GIL_CHECK_LOCKED_SCOPE(); - newref_t result( - PyObject_CallMethod( - self.o, - (char *)S_ON_SELECT, - "i", - curnode)); - PyW_ShowCbErr(S_ON_SELECT); - return !(result != NULL && PyObject_IsTrue(result.o)); - } - // a group is being created int on_creating_group(mutable_graph_t * /*my_g*/, intvec_t *my_nodes) { @@ -209,7 +188,9 @@ private: "O", py_nodes.o)); PyW_ShowCbErr(S_ON_CREATING_GROUP); - return (py_result == NULL || !PyInt_Check(py_result.o)) ? 1 : PyInt_AsLong(py_result.o); + return (py_result == NULL || !IDAPyInt_Check(py_result.o)) + ? 1 + : IDAPyInt_AsLong(py_result.o); } // a group is being deleted @@ -310,7 +291,7 @@ public: if ( nid < 0 ) return; - py_graph_t *_this = view_extract_this(self); + py_graph_t *_this = (py_graph_t *) view_extract_this(self); if ( _this == NULL || !pycim_lookup_info.find_by_py_view(NULL, _this) ) return; @@ -320,7 +301,7 @@ public: static py_graph_t *Close(PyObject *self) { TWidget *view; - py_graph_t *_this = view_extract_this(self); + py_graph_t *_this = (py_graph_t *) view_extract_this(self); if ( _this == NULL || !pycim_lookup_info.find_by_py_view(&view, _this) ) return NULL; newref_t ret(PyObject_CallMethod(self, "unhook", NULL)); @@ -332,7 +313,7 @@ public: { PYW_GIL_CHECK_LOCKED_SCOPE(); - py_graph_t *py_graph = view_extract_this(self); + py_graph_t *py_graph = (py_graph_t *) view_extract_this(self); // New instance? if ( py_graph == NULL ) @@ -383,7 +364,6 @@ void py_graph_t::collect_class_callbacks_ids(pycim_callbacks_ids_t *out) out->add(S_ON_EDGE_HINT, GRCODE_HAVE_EDGE_HINT); out->add(S_ON_CLICK, GRCODE_HAVE_CLICKED); out->add(S_ON_DBL_CLICK, GRCODE_HAVE_DBL_CLICKED); - out->add(S_ON_SELECT, GRCODE_HAVE_CHANGED_CURRENT); out->add(S_ON_ACTIVATE, GRCODE_HAVE_GOTFOCUS); out->add(S_ON_DEACTIVATE, GRCODE_HAVE_LOSTFOCUS); out->add(S_ON_CREATING_GROUP, GRCODE_HAVE_CREATING_GROUP); @@ -436,9 +416,9 @@ void py_graph_t::on_user_refresh(mutable_graph_t *g) for ( j=0; j < qnumber(edge_ids); j++ ) { newref_t id(PySequence_GetItem(item.o, j)); - if ( id == NULL || !PyInt_Check(id.o) ) + if ( id == NULL || !IDAPyInt_Check(id.o) ) break; - int v = int(PyInt_AS_LONG(id.o)); + int v = int(IDAPyInt_AsLong(id.o)); if ( v > max_nodes ) break; edge_ids[j] = v; @@ -477,28 +457,27 @@ bool py_graph_t::on_user_text(mutable_graph_t * /*g*/, int node, const char **st return false; bgcolor_t cl = bg_color == NULL ? DEFCOLOR : *bg_color; - const char *s; + qstring buf; // User returned a string? - if ( PyString_Check(result.o) ) + if ( IDAPyStr_Check(result.o) ) { - s = PyString_AsString(result.o); - if ( s == NULL ) - s = ""; - c = node_cache.add(node, s, cl); + IDAPyStr_AsUTF8(&buf, result.o); + c = node_cache.add(node, buf.c_str(), cl); } // User returned a sequence of text and bgcolor - else if ( PySequence_Check(result.o) && PySequence_Size(result.o) == 2 ) + else if ( PySequence_Check(result.o) + && PySequence_Size(result.o) == 2 ) { newref_t py_str(PySequence_GetItem(result.o, 0)); newref_t py_color(PySequence_GetItem(result.o, 1)); - if ( py_str == NULL || !PyString_Check(py_str.o) || (s = PyString_AsString(py_str.o)) == NULL ) - s = ""; + if ( py_str != NULL && IDAPyStr_Check(py_str.o) ) + IDAPyStr_AsUTF8(&buf, py_str.o); if ( py_color != NULL && PyNumber_Check(py_color.o) ) cl = bgcolor_t(PyLong_AsUnsignedLong(py_color.o)); - c = node_cache.add(node, s, cl); + c = node_cache.add(node, buf.c_str(), cl); } *str = c->text.c_str(); @@ -531,9 +510,13 @@ int py_graph_t::_on_hint_epilog(char **hint, ref_t result) { // 'hint' must be allocated by qalloc() or qstrdup() // out: 0-use default hint, 1-use proposed hint - bool ok = result != NULL && PyString_Check(result.o); + bool ok = result != NULL && IDAPyStr_Check(result.o); if ( ok ) - *hint = qstrdup(PyString_AsString(result.o)); + { + qstring buf; + IDAPyStr_AsUTF8(&buf, result.o); + *hint = buf.extract(); + } return ok; } @@ -570,8 +553,8 @@ ssize_t py_graph_t::gr_callback(int code, va_list va) } else { - // Ignore the click - ret = 1; + // let the click go through + ret = 0; } break; // @@ -630,17 +613,6 @@ ssize_t py_graph_t::gr_callback(int code, va_list va) } break; // - case grcode_changed_current: - if ( has_callback(GRCODE_HAVE_CHANGED_CURRENT) ) - { - graph_viewer_t *view = va_arg(va, graph_viewer_t *); - int cur_node = va_arg(va, int); - ret = on_changed_current(view, cur_node); - } - else - ret = 0; // allow selection change - break; - // case grcode_creating_group: // a group is being created if ( has_callback(GRCODE_HAVE_CREATING_GROUP) ) { diff --git a/pywraps/py_graph.py b/pywraps/py_graph.py index d2dad98..e24b97b 100644 --- a/pywraps/py_graph.py +++ b/pywraps/py_graph.py @@ -1,11 +1,6 @@ # import ida_idaapi import ida_kernwin -try: - if _BC695: - from ida_kernwin import BC695_control_cmd -except: - pass # BC695 not defined at compile-time class GraphViewer(ida_kernwin.CustomIDAMemo): class UI_Hooks_Trampoline(ida_kernwin.UI_Hooks): @@ -15,10 +10,10 @@ class GraphViewer(ida_kernwin.CustomIDAMemo): import weakref self.v = weakref.ref(v) - def populating_widget_popup(self, form, popup_handle): - my_form = self.v().GetWidget() - if form == my_form: - self.v().OnPopup(my_form, popup_handle) + def populating_widget_popup(self, w, popup_handle): + my_w = self.v().GetWidget() + if w == my_w: + self.v().OnPopup(my_w, popup_handle) """This class wraps the user graphing facility provided by the graph.hpp file""" def __init__(self, title, close_open = False): @@ -33,6 +28,9 @@ class GraphViewer(ida_kernwin.CustomIDAMemo): self._nodes = [] self._edges = [] self._close_open = close_open + def _qccb(ctx, cmd_id): + return self.OnCommand(cmd_id) + self._quick_commands = ida_kernwin.quick_widget_commands_t(_qccb) ida_kernwin.CustomIDAMemo.__init__(self) self.ui_hooks_trampoline = self.UI_Hooks_Trampoline(self) @@ -53,12 +51,8 @@ class GraphViewer(ida_kernwin.CustomIDAMemo): self._nodes = [] self._edges = [] - def OnPopup(self, form, popup_handle): - pass - def __iter__(self): - return (self._nodes[index] for index in xrange(0, len(self._nodes))) - + return (self._nodes[index] for index in range(0, len(self._nodes))) def __getitem__(self, idx): """Returns a reference to the object associated with this node id""" @@ -108,19 +102,17 @@ class GraphViewer(ida_kernwin.CustomIDAMemo): return True - def AddCommand(self, title, hotkey): - return BC695_control_cmd.add_to_control( - self, - title, - ida_kernwin.CHOOSER_POPUP_MENU, # KLUDGE - -1, # menu index - -1, # icon - None, # emb - hotkey, - is_chooser=False) + def AddCommand(self, title, shortcut): + return self._quick_commands.add( + caption=title, + flags=ida_kernwin.CHOOSER_POPUP_MENU, + menu_index=-1, + icon=-1, + emb=None, + shortcut=shortcut) def OnPopup(self, widget, popup_handle): - BC695_control_cmd.populate_popup(self, widget, popup_handle) + self._quick_commands.populate_popup(widget, popup_handle) def OnCommand(self, cmd_id): return 0 @@ -144,21 +136,13 @@ class GraphViewer(ida_kernwin.CustomIDAMemo): # Triggered when the graph window gets the focus # @return: None # """ -# print "Activated...." +# print("Activated....") # # def OnDeactivate(self): # """Triggered when the graph window loses the focus # @return: None # """ -# print "Deactivated...." -# -# def OnSelect(self, node_id): -# """ -# Triggered when a node is being selected -# @return: Return True to allow the node to be selected or False to disallow node selection change -# """ -# # allow selection change -# return True +# print("Deactivated....") # # def OnHint(self, node_id): # """ @@ -180,14 +164,14 @@ class GraphViewer(ida_kernwin.CustomIDAMemo): # """Triggered when the graph viewer window is being closed # @return: None # """ -# print "Closing......." +# print("Closing.......") # # def OnClick(self, node_id): # """ # Triggered when a node is clicked # @return: False to ignore the click and True otherwise # """ -# print "clicked on", self[node_id] +# print("clicked on", self[node_id]) # return True # # def OnDblClick(self, node_id): @@ -195,7 +179,7 @@ class GraphViewer(ida_kernwin.CustomIDAMemo): # Triggerd when a node is double-clicked. # @return: False to ignore the click and True otherwise # """ -# print "dblclicked on", self[node_id] +# print("dblclicked on", self[node_id]) # return True # # diff --git a/pywraps/py_hexrays.py b/pywraps/py_hexrays.py index 008ddd1..eff975b 100644 --- a/pywraps/py_hexrays.py +++ b/pywraps/py_hexrays.py @@ -1,6 +1,7 @@ # ----------------------------------------------------------------------- # import ida_funcs +import ida_idaapi hexrays_failure_t.__str__ = lambda self: str("%x: %s" % (self.errea, self.desc())) @@ -11,7 +12,8 @@ is_small_struni = is_small_udt # --------------------------------------------------------------------- class DecompilationFailure(Exception): - """ Raised on a decompilation error. + """ + Raised on a decompilation error. The associated hexrays_failure_t object is stored in the 'info' member of this exception. """ @@ -23,7 +25,7 @@ class DecompilationFailure(Exception): # --------------------------------------------------------------------- def decompile(ea, hf=None, flags=0): - if isinstance(ea, (int, long)): + if isinstance(ea, ida_idaapi.integer_types): func = ida_funcs.get_func(ea) if not func: return elif type(ea) == ida_funcs.func_t: @@ -135,8 +137,10 @@ def cexpr_operands(self): cexpr_t.operands = property(cexpr_operands) def cinsn_details(self): - """ return the details pointer for the cinsn_t object depending on the value of its op member. \ - this is one of the cblock_t, cif_t, etc. objects. """ + """ + return the details pointer for the cinsn_t object depending on the value of its op member. \ + this is one of the cblock_t, cif_t, etc. objects. + """ if self.op not in self.op_to_typename: raise RuntimeError('unknown item->op type') @@ -218,6 +222,7 @@ def cblock_insert(self, index, item): cblock_t.insert = cblock_insert cfuncptr_t.__str__ = lambda self: str(self.__deref__()) +cfuncptr_t.__eq__ = lambda self, other: self.__ptrval__() == other.__ptrval__() import ida_typeinf def cfunc_type(self): @@ -417,13 +422,12 @@ def _map_as_dict(maptype, name, keytype, valuetype): return default maptype.setdefault = _map_setdefault -#_map_as_dict(user_labels_t, 'user_labels', (int, long), qstring) _map_as_dict(user_cmts_t, 'user_cmts', treeloc_t, citem_cmt_t) _map_as_dict(user_numforms_t, 'user_numforms', operand_locator_t, number_format_t) _map_as_dict(user_iflags_t, 'user_iflags', citem_locator_t, int) import ida_pro -_map_as_dict(user_unions_t, 'user_unions', (int, long), ida_pro.intvec_t) -_map_as_dict(eamap_t, 'eamap', long, cinsnptrvec_t) +_map_as_dict(user_unions_t, 'user_unions', ida_idaapi.integer_types, ida_pro.intvec_t) +_map_as_dict(eamap_t, 'eamap', ida_idaapi.long_type, cinsnptrvec_t) import ida_range _map_as_dict(boundaries_t, 'boundaries', cinsn_t, ida_range.rangeset_t) diff --git a/pywraps/py_hexrays_hooks.hpp b/pywraps/py_hexrays_hooks.hpp index 857b0fb..c0ee039 100644 --- a/pywraps/py_hexrays_hooks.hpp +++ b/pywraps/py_hexrays_hooks.hpp @@ -90,17 +90,13 @@ private: newref_t py_rc(PySequence_GetItem(o, 0)); newref_t py_hint(PySequence_GetItem(o, 1)); newref_t py_implines(PySequence_GetItem(o, 2)); - if ( PyInt_Check(py_rc.o) && PyString_Check(py_hint.o) && PyInt_Check(py_implines.o) ) + if ( IDAPyInt_Check(py_rc.o) + && IDAPyStr_Check(py_hint.o) + && IDAPyInt_Check(py_implines.o) + && IDAPyStr_AsUTF8(out_hint, py_hint.o) ) { - char *buf; - Py_ssize_t bufsize; - if ( PyString_AsStringAndSize(py_hint.o, &buf, &bufsize) > -1 ) - { - rc = PyInt_AsLong(py_rc.o); - qstring tmp(buf, bufsize); - out_hint->swap(tmp); - *out_implines = PyInt_AsLong(py_implines.o); - } + rc = IDAPyInt_AsLong(py_rc.o); + *out_implines = IDAPyInt_AsLong(py_implines.o); } } return rc; diff --git a/pywraps/py_ida.py b/pywraps/py_ida.py index 2e46a49..311fbab 100644 --- a/pywraps/py_ida.py +++ b/pywraps/py_ida.py @@ -140,14 +140,18 @@ show_repeatables = inf_show_repeatables __make_idainfo_accessors(None, "is_graph_view", "set_graph_view") -SW_RPTCMT = SCF_RPTCMT -SW_ALLCMT = SCF_ALLCMT -SW_NOCMT = SCF_NOCMT -SW_LINNUM = SCF_LINNUM -SW_TESTMODE = SCF_TESTMODE -SW_SHHID_ITEM = SCF_SHHID_ITEM -SW_SHHID_FUNC = SCF_SHHID_FUNC -SW_SHHID_SEGM = SCF_SHHID_SEGM +if ida_idaapi.uses_swig_builtins: + _scope = _ida_ida.idainfo +else: + _scope = _ida_ida +SW_RPTCMT = _scope.SCF_RPTCMT +SW_ALLCMT = _scope.SCF_ALLCMT +SW_NOCMT = _scope.SCF_NOCMT +SW_LINNUM = _scope.SCF_LINNUM +SW_TESTMODE = _scope.SCF_TESTMODE +SW_SHHID_ITEM = _scope.SCF_SHHID_ITEM +SW_SHHID_FUNC = _scope.SCF_SHHID_FUNC +SW_SHHID_SEGM = _scope.SCF_SHHID_SEGM # diff --git a/pywraps/py_idaapi.hpp.in b/pywraps/py_idaapi.hpp.in index f4ba9b5..82aafc2 100644 --- a/pywraps/py_idaapi.hpp.in +++ b/pywraps/py_idaapi.hpp.in @@ -3,7 +3,7 @@ // //------------------------------------------------------------------------- -#define GET_THIS() py_customidamemo_t *_this = view_extract_this(self) +#define GET_THIS() py_customidamemo_t *_this = (py_customidamemo_t *) view_extract_this(self) #define CHK_THIS() \ GET_THIS(); \ if ( _this == NULL ) \ @@ -25,54 +25,6 @@ void pygc_refresh(PyObject *self) _this->refresh(); } -//------------------------------------------------------------------------- -void pygc_set_node_info(PyObject *self, PyObject *py_node_idx, PyObject *py_node_info, PyObject *py_flags) -{ - CHK_THIS(); - _this->set_node_info(py_node_idx, py_node_info, py_flags); -} - -//------------------------------------------------------------------------- -void pygc_set_nodes_infos(PyObject *self, PyObject *values) -{ - CHK_THIS(); - _this->set_nodes_infos(values); -} - -//------------------------------------------------------------------------- -PyObject *pygc_get_node_info(PyObject *self, PyObject *py_node_idx) -{ - GET_THIS(); - if ( _this != NULL ) - return _this->get_node_info(py_node_idx); - else - Py_RETURN_NONE; -} - -//------------------------------------------------------------------------- -void pygc_del_nodes_infos(PyObject *self, PyObject *py_nodes) -{ - CHK_THIS(); - _this->del_nodes_infos(py_nodes); -} - -//------------------------------------------------------------------------- -PyObject *pygc_get_current_renderer_type(PyObject *self) -{ - GET_THIS(); - if ( _this != NULL ) - return _this->get_current_renderer_type(); - else - Py_RETURN_NONE; -} - -//------------------------------------------------------------------------- -void pygc_set_current_renderer_type(PyObject *self, PyObject *py_rt) -{ - CHK_THIS(); - _this->set_current_renderer_type(py_rt); -} - //------------------------------------------------------------------------- PyObject *pygc_create_groups(PyObject *self, PyObject *groups_infos) { @@ -244,10 +196,13 @@ idaman PyObject *ida_export format_basestring(PyObject *_in) // we don't want to turn non-ASCII bytes into a \xNN equivalent: IDA // accepts UTF-8 everywhere internally (and this will end up in a // 'msg' call eventually.) + qstring utf8; +#ifdef PY3 + if ( !IDAPyStr_AsUTF8(&utf8, _in) ) + return NULL; +#else PyObject *_pystr; ref_t _tmp; - char *in_bytes; - Py_ssize_t in_len; if ( PyUnicode_Check(_in) ) { _tmp = newref_t(PyUnicode_AsUTF8String(_in)); @@ -260,8 +215,11 @@ idaman PyObject *ida_export format_basestring(PyObject *_in) _pystr = _in; } - if ( PyString_AsStringAndSize(_pystr, &in_bytes, &in_len) < 0 ) - return _in; + if ( !IDAPyStr_AsUTF8(&utf8, _pystr) ) + return NULL; +#endif + char *in_bytes = utf8.begin(); + Py_ssize_t in_len = utf8.length(); char quote = '\''; if ( memchr(in_bytes, '\'', in_len) != NULL @@ -299,7 +257,7 @@ idaman PyObject *ida_export format_basestring(PyObject *_in) buf.append(c); } buf.append(quote); - return PyString_FromStringAndSize(buf.c_str(), buf.length()); + return IDAPyStr_FromUTF8AndSize(buf.c_str(), buf.length()); } /* @@ -316,12 +274,6 @@ def RunPythonStatement(stmt): */ void pygc_refresh(PyObject *self); -void pygc_set_node_info(PyObject *self, PyObject *py_node_idx, PyObject *py_node_info, PyObject *py_flags); -void pygc_set_nodes_infos(PyObject *self, PyObject *values); -PyObject *pygc_get_node_info(PyObject *self, PyObject *py_node_idx); -void pygc_del_nodes_infos(PyObject *self, PyObject *py_nodes); -PyObject *pygc_get_current_renderer_type(PyObject *self); -void pygc_set_current_renderer_type(PyObject *self, PyObject *py_rt); PyObject *pygc_create_groups(PyObject *self, PyObject *groups_infos); PyObject *pygc_delete_groups(PyObject *self, PyObject *groups, PyObject *new_current); PyObject *pygc_set_groups_visibility(PyObject *self, PyObject *groups, PyObject *expand, PyObject *new_current); diff --git a/pywraps/py_idaapi.py b/pywraps/py_idaapi.py index 893e66d..61623f1 100644 --- a/pywraps/py_idaapi.py +++ b/pywraps/py_idaapi.py @@ -20,7 +20,17 @@ import traceback import os import sys import bisect -import __builtin__ +try: + import __builtin__ as builtins + # This basically mimics six's features (it's not ok to ask the IDAPython runtime to rely on six) + integer_types = (int, long) + string_types = (str, unicode) + long_type = long +except: + import builtins + integer_types = (int,) + string_types = (str,) + long_type = int import imp import re @@ -51,7 +61,12 @@ def require(modulename, package=None): if importer_module is None: # No importer module; called from command line importer_module = sys.modules['__main__'] if modulename in sys.modules.keys(): - reload(sys.modules[modulename]) + m = sys.modules[modulename] + if sys.version_info.major >= 3: + import importlib + importlib.reload(m) + else: + reload(m) m = sys.modules[modulename] else: import importlib @@ -156,7 +171,7 @@ class py_clinked_object_t(pyidc_opaque_object_t): """ Overwrite me. Creates a new clink - @return: PyCObject representing the C link + @return: PyCapsule representing the C link """ pass @@ -300,11 +315,17 @@ def as_cstr(val): return val if n == -1 else val[:n] # ----------------------------------------------------------------------- -def as_unicode(s): +def as_UTF16(s): """Convenience function to convert a string into appropriate unicode format""" # use UTF16 big/little endian, depending on the environment? import _ida_ida - return unicode(s).encode("UTF-16" + ("BE" if _ida_ida.cvar.inf.is_be() else "LE")) + if sys.version_info.major >= 3: + if type(s) == bytes: + s = s.decode("UTF-8") + else: + s = unicode(s) + return s.encode("UTF-16" + ("BE" if _ida_ida.cvar.inf.is_be() else "LE")) +as_unicode = as_UTF16 # ----------------------------------------------------------------------- def as_uint32(v): @@ -397,15 +418,22 @@ def IDAPython_ExecSystem(cmd): return "%s\n%s" % (str(e), traceback.format_exc()) # ------------------------------------------------------------ -def IDAPython_FormatExc(etype, value, tb, limit=None): +def IDAPython_FormatExc(etype, value=None, tb=None, limit=None): """ This function is used to format an exception given the values returned by a PyErr_Fetch() """ + import traceback try: return ''.join(traceback.format_exception(etype, value, tb, limit)) except: - return str(value) + parts = [str(value)] + if tb: + try: + parts.append("".join(traceback.format_tb(tb))) + finally: + pass + return "\n".join(parts) # ------------------------------------------------------------ @@ -429,7 +457,9 @@ def IDAPython_ExecScript(script, g, print_error=True): g['__file__'] = script try: - execfile(script, g) + with open(script) as fin: + code = compile(fin.read(), script, 'exec') + exec(code, g) PY_COMPILE_ERR = None except Exception as e: PY_COMPILE_ERR = "%s\n%s" % (str(e), traceback.format_exc()) @@ -527,7 +557,7 @@ class __IDAPython_Completion_Util(object): if not line.startswith("?"): to_add = "(" # Is it iterable? - elif isinstance(attr, basestring) or getattr(attr, '__iter__', False): + elif isinstance(attr, string_types) or getattr(attr, '__iter__', False): to_add = "[" except: # self.debug("maybe_extend_syntactically() got an exception:\n%s", traceback.format_exc()) @@ -537,13 +567,13 @@ class __IDAPython_Completion_Util(object): return name def get_candidates(self, qname, line, match_syntax_char): - # self.debug("get_candidates(qname=%s, line=%s, has_syntax=%s)", qname, line, has_syntax) + # self.debug("get_candidates(qname=%s, line=%s, match_syntax_char=%s)", qname, line, match_syntax_char) results = [] try: ns = sys.modules['__main__'] parts = qname.split('.') # self.debug("get_candidates() got parts: %s", parts) - for i in xrange(0, len(parts) - 1): + for i in range(0, len(parts) - 1): ns = getattr(ns, parts[i]) except Exception as e: # self.debug("get_candidates() got exception:\n%s", traceback.format_exc()) @@ -556,12 +586,12 @@ class __IDAPython_Completion_Util(object): # no completion found? looking from the global scope? then try the builtins if not results and len(parts) == 1: - results = self.dir_namespace(__builtin__, last_token) - # self.debug("get_candidates() completions for %s in %s: %s", last_token, __builtin__, results) + results = self.dir_namespace(builtins, last_token) + # self.debug("get_candidates() completions for %s in %s: %s", last_token, builtins, results) results = map(lambda r: self.maybe_extend_syntactically(ns, r, line, match_syntax_char), results) ns_parts = parts[:-1] - results = map(lambda r: ".".join(ns_parts + [r]), results) + results = list(map(lambda r: ".".join(ns_parts + [r]), results)) # self.debug("get_candidates() => '%s'", str(results)) return results @@ -570,7 +600,7 @@ class __IDAPython_Completion_Util(object): def __call__(self, line, x): try: # self.debug("__call__(line=%s, x=%s)", line, x) - uline = line.decode("UTF-8") + uline = line.decode("UTF-8") if sys.version_info.major < 3 else line result = None # Kludge: if the we are past the last char, and that char is syntax: @@ -586,7 +616,9 @@ class __IDAPython_Completion_Util(object): # Find what looks like an identifier (possibly qualified) for match in re.finditer(self.QNAME_PAT, uline): - qname, start, end = match.group(1).encode("UTF-8"), match.start(1), match.end(1) + qname, start, end = match.group(1), match.start(1), match.end(1) + if sys.version_info.major < 3: + qname = qname.encode("UTF-8") if x >= start and x <= end: result = self.get_candidates(qname, line, match_syntax_char), start, end + (1 if match_syntax_char else 0) @@ -671,9 +703,9 @@ class IDAPython_displayhook: def format_item(self, num_printer, storage, item): if item is None or isinstance(item, bool): storage.append(repr(item)) - elif isinstance(item, basestring): - storage.append(_ida_idaapi.format_basestring(item)) - elif isinstance(item, (int, long)): + elif isinstance(item, string_types): + storage.append(format_basestring(item)) + elif isinstance(item, integer_types): storage.append(num_printer(item)) elif isinstance(item, list): self.format_seq(num_printer, storage, item, '[', ']') @@ -683,7 +715,7 @@ class IDAPython_displayhook: self.format_seq(num_printer, storage, item, 'set([', '])') elif isinstance(item, (dict,)): storage.append('{') - for idx, pair in enumerate(item.iteritems()): + for idx, pair in enumerate(item.items()): if idx > 0: storage.append(', ') self.format_item(num_printer, storage, pair[0]) @@ -741,6 +773,11 @@ class __BC695: _replace_module_function(new) _BC695 = __BC695() + +def _make_badattr_property(bad_attr, new_attr): + def _raise(*args): + raise AttributeError("Property %s has been replaced with %s" % (bad_attr, new_attr)) + return property(_raise, _raise) # # diff --git a/pywraps/py_idaapi_loader_input.hpp b/pywraps/py_idaapi_loader_input.hpp index e1615e1..c702a8f 100644 --- a/pywraps/py_idaapi_loader_input.hpp +++ b/pywraps/py_idaapi_loader_input.hpp @@ -6,7 +6,8 @@ /* # class loader_input_t(pyidc_opaque_object_t): - """A helper class to work with linput_t related functions. + """ + A helper class to work with linput_t related functions. This class is also used by file loaders scripts. """ def __init__(self): @@ -17,7 +18,8 @@ class loader_input_t(pyidc_opaque_object_t): pass def open(self, filename, remote = False): - """Opens a file (or a remote file) + """ + Opens a file (or a remote file) @return: Boolean """ pass @@ -32,7 +34,8 @@ class loader_input_t(pyidc_opaque_object_t): pass def open_memory(self, start, size): - """Create a linput for process memory (By internally calling idaapi.create_memory_linput()) + """ + Create a linput for process memory (By internally calling idaapi.create_memory_linput()) This linput will use dbg->read_memory() to read data @param start: starting address of the input @param size: size of the memory range to represent as linput @@ -41,7 +44,8 @@ class loader_input_t(pyidc_opaque_object_t): pass def seek(self, pos, whence = SEEK_SET): - """Set input source position + """ + Set input source position @return: the new position (not 0 as fseek!) """ pass @@ -51,7 +55,8 @@ class loader_input_t(pyidc_opaque_object_t): pass def getz(self, sz, fpos = -1): - """Returns a zero terminated string at the given position + """ + Returns a zero terminated string at the given position @param sz: maximum size of the string @param fpos: if != -1 then seek will be performed before reading @return: The string or None on failure. @@ -84,8 +89,8 @@ class loader_input_t(pyidc_opaque_object_t): """ pass - def get_char(self): - """Reads a single character from the file. Returns None if EOF or the read character""" + def get_byte(self): + """Reads a single byte from the file. Returns None if EOF or the read byte""" pass def opened(self): @@ -108,10 +113,10 @@ private: }; //-------------------------------------------------------------------------- - void _from_cobject(PyObject *pycobject) + void _from_capsule(PyObject *pycapsule) { PYW_GIL_CHECK_LOCKED_SCOPE(); - this->set_linput((linput_t *)PyCObject_AsVoidPtr(pycobject)); + this->set_linput((linput_t *)PyCapsule_GetPointer(pycapsule, VALID_CAPSULE_NAME)); } //-------------------------------------------------------------------------- @@ -132,11 +137,11 @@ public: // class from and to IDC. The value of this variable must be set to two int __idc_cvt_id__; //-------------------------------------------------------------------------- - loader_input_t(PyObject *pycobject = NULL): li(NULL), own(OWN_NONE), __idc_cvt_id__(PY_ICID_OPAQUE) + loader_input_t(PyObject *pycapsule = NULL): li(NULL), own(OWN_NONE), __idc_cvt_id__(PY_ICID_OPAQUE) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( pycobject != NULL && PyCObject_Check(pycobject) ) - _from_cobject(pycobject); + if ( pycapsule != NULL && PyCapsule_IsValid(pycapsule, VALID_CAPSULE_NAME) ) + _from_capsule(pycapsule); } //-------------------------------------------------------------------------- @@ -198,13 +203,13 @@ public: //-------------------------------------------------------------------------- // This method can be used to pass a linput_t* from C code - static loader_input_t *from_cobject(PyObject *pycobject) + static loader_input_t *from_capsule(PyObject *pycapsule) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyCObject_Check(pycobject) ) + if ( !PyCapsule_IsValid(pycapsule, VALID_CAPSULE_NAME) ) return NULL; loader_input_t *l = new loader_input_t(); - l->_from_cobject(pycobject); + l->_from_capsule(pycapsule); return l; } @@ -284,7 +289,7 @@ public: Py_BEGIN_ALLOW_THREADS; qlgetz(li, fpos, buf, sz); Py_END_ALLOW_THREADS; - PyObject *ret = PyString_FromString(buf); + PyObject *ret = IDAPyStr_FromUTF8(buf); free(buf); return ret; } while ( false ); @@ -295,44 +300,30 @@ public: PyObject *gets(size_t len) { PYW_GIL_CHECK_LOCKED_SCOPE(); - do - { - char *buf = (char *) malloc(len + 5); - if ( buf == NULL ) - break; - bool ok; - Py_BEGIN_ALLOW_THREADS; - ok = qlgets(buf, len, li) != NULL; - Py_END_ALLOW_THREADS; - if ( !ok ) - buf[0] = '\0'; - PyObject *ret = PyString_FromString(buf); - free(buf); - return ret; - } while ( false ); - Py_RETURN_NONE; + bytevec_t buf; + buf.resize(len); + bool ok; + Py_BEGIN_ALLOW_THREADS; + ok = qlgets((char *) buf.begin(), buf.size(), li) != NULL; + Py_END_ALLOW_THREADS; + if ( !ok ) + Py_RETURN_NONE; + return IDAPyStr_FromUTF8((const char *) buf.begin()); } //-------------------------------------------------------------------------- PyObject *read(size_t size) { PYW_GIL_CHECK_LOCKED_SCOPE(); - do - { - char *buf = (char *) malloc(size + 5); - if ( buf == NULL ) - break; - ssize_t r; - Py_BEGIN_ALLOW_THREADS; - r = qlread(li, buf, size); - Py_END_ALLOW_THREADS; - if ( r == -1 ) - r = 0; - PyObject *ret = PyString_FromStringAndSize(buf, r); - free(buf); - return ret; - } while ( false ); - Py_RETURN_NONE; + bytevec_t buf; + buf.resize(size); + ssize_t nread; + Py_BEGIN_ALLOW_THREADS; + nread = qlread(li, (char *) buf.begin(), buf.size()); + Py_END_ALLOW_THREADS; + if ( nread <= 0 ) + Py_RETURN_NONE; + return IDAPyBytes_FromMemAndSize((const char *) buf.begin(), nread); } //-------------------------------------------------------------------------- @@ -356,7 +347,7 @@ public: Py_END_ALLOW_THREADS; if ( r == -1 ) r = 0; - PyObject *ret = PyString_FromStringAndSize(buf, r); + PyObject *ret = IDAPyStr_FromUTF8AndSize(buf, r); free(buf); return ret; } while ( false ); @@ -387,11 +378,15 @@ public: PyObject *filename() { PYW_GIL_CHECK_LOCKED_SCOPE(); - return PyString_FromString(fn.c_str()); + return IDAPyStr_FromUTF8(fn.c_str()); } //-------------------------------------------------------------------------- +#ifdef PY3 + PyObject *get_byte() +#else PyObject *get_char() +#endif { PYW_GIL_CHECK_LOCKED_SCOPE(); int ch; @@ -400,7 +395,11 @@ public: Py_END_ALLOW_THREADS; if ( ch == EOF ) Py_RETURN_NONE; +#ifdef PY3 + return Py_BuildValue("i", ch); +#else return Py_BuildValue("c", ch); +#endif } }; // diff --git a/pywraps/py_idc.hpp b/pywraps/py_idc.hpp index a7b5dab..248b4f9 100644 --- a/pywraps/py_idc.hpp +++ b/pywraps/py_idc.hpp @@ -38,7 +38,7 @@ inline PyObject *get_mark_comment(int32 slot) renderer_info_t ri; lochist_entry_t loc(&ip, ri); if ( bookmarks_t::get_desc(&desc, loc, slot, NULL) ) - return PyString_FromString(desc.c_str()); + return IDAPyStr_FromUTF8(desc.c_str()); else Py_RETURN_NONE; } diff --git a/pywraps/py_idd.hpp b/pywraps/py_idd.hpp index d35f823..fd14cb3 100644 --- a/pywraps/py_idd.hpp +++ b/pywraps/py_idd.hpp @@ -3,8 +3,8 @@ PyObject *py_appcall( ea_t func_ea, thid_t tid, - PyObject *py_type, - PyObject *py_fields, + const bytevec_t &_type_or_none, + const bytevec_t &_fields, PyObject *arg_list) { PYW_GIL_CHECK_LOCKED_SCOPE(); @@ -12,11 +12,11 @@ PyObject *py_appcall( if ( !PyList_Check(arg_list) ) return NULL; - const char *type = py_type == Py_None ? NULL : PyString_AS_STRING(py_type); - const char *fields = py_fields == Py_None ? NULL : PyString_AS_STRING(py_fields); + const type_t *type = (const type_t *) _type_or_none.begin(); + const type_t *fields = (const p_list *) _fields.begin(); tinfo_t tif; tinfo_t *ptif = NULL; - if ( tif.deserialize(NULL, (const type_t **)&type, (const p_list **)&fields) ) + if ( tif.deserialize(NULL, &type, &fields) ) ptif = &tif; // Convert Python arguments into IDC values @@ -125,9 +125,12 @@ PyObject *py_appcall( return NULL; } } + // Convert the result from IDC back to Python + // Any set of bytes (stored in a VT_STR), will have to be converted + // to a 'bytes' object, not a string ref_t py_result; - if ( idcvar_to_pyvar(idc_result, &py_result) <= CIP_IMMUTABLE ) + if ( idcvar_to_pyvar(idc_result, &py_result, PYWCVTF_STR_AS_BYTES) <= CIP_IMMUTABLE ) { PyErr_SetString(PyExc_ValueError, "PyAppCall: Failed while converting IDC return value to Python return value"); return NULL; @@ -185,7 +188,7 @@ static PyObject *dbg_get_registers() for ( int i=0; i < nbits; i++ ) { const char *s = ri.bit_strings[i]; - PyList_SetItem(py_bits, i, PyString_FromString(s == NULL ? "" : s)); + PyList_SetItem(py_bits, i, IDAPyStr_FromUTF8(s == NULL ? "" : s)); } } else @@ -222,22 +225,12 @@ def dbg_get_thread_sreg_base(tid, sreg_value): pass # */ -static PyObject *dbg_get_thread_sreg_base(PyObject *py_tid, PyObject *py_sreg_value) +static PyObject *dbg_get_thread_sreg_base(thid_t tid, int sreg_value) { PYW_GIL_CHECK_LOCKED_SCOPE(); - - if ( !dbg_can_query() - || (!PyInt_Check(py_tid) && !PyLong_Check(py_tid)) - || (!PyInt_Check(py_sreg_value) && !PyLong_Check(py_sreg_value)) ) - { - Py_RETURN_NONE; - } ea_t answer; - thid_t tid = PyLong_AsLong(py_tid); - int sreg_value = PyLong_AsLong(py_sreg_value); - if ( internal_get_sreg_base(&answer, tid, sreg_value) != DRC_OK ) + if ( !dbg_can_query() || internal_get_sreg_base(&answer, tid, sreg_value) != DRC_OK ) Py_RETURN_NONE; - return Py_BuildValue(PY_BV_EA, bvea_t(answer)); } @@ -254,29 +247,25 @@ def dbg_read_memory(ea, sz): pass # */ -static PyObject *dbg_read_memory(PyObject *py_ea, PyObject *py_sz) +static PyObject *dbg_read_memory(ea_t ea, size_t sz) { PYW_GIL_CHECK_LOCKED_SCOPE(); - uint64 ea, sz; - if ( !dbg_can_query() || !PyW_GetNumber(py_ea, &ea) || !PyW_GetNumber(py_sz, &sz) ) + if ( !dbg_can_query() ) Py_RETURN_NONE; // Create a Python string - PyObject *ret = PyString_FromStringAndSize(NULL, Py_ssize_t(sz)); + PyObject *ret = IDAPyBytes_FromMemAndSize(NULL, Py_ssize_t(sz)); if ( ret == NULL ) Py_RETURN_NONE; // Get the internal buffer Py_ssize_t len; char *buf; - PyString_AsStringAndSize(ret, &buf, &len); - - if ( (size_t)read_dbg_memory(ea_t(ea), buf, size_t(sz)) != sz ) + IDAPyBytes_AsMemAndSize(ret, &buf, &len); + if ( size_t(read_dbg_memory(ea, buf, sz)) != sz ) { - // Release the string on failure Py_DECREF(ret); - // Return None on failure Py_RETURN_NONE; } return ret; @@ -293,17 +282,16 @@ def dbg_write_memory(ea, buffer): pass # */ -static PyObject *dbg_write_memory(PyObject *py_ea, PyObject *py_buf) +static PyObject *dbg_write_memory( + ea_t ea, + const bytevec_t &buf) { PYW_GIL_CHECK_LOCKED_SCOPE(); - uint64 ea; - if ( !dbg_can_query() || !PyString_Check(py_buf) || !PyW_GetNumber(py_ea, &ea) ) + if ( !dbg_can_query() ) Py_RETURN_NONE; - size_t sz = PyString_GET_SIZE(py_buf); - void *buf = (void *)PyString_AS_STRING(py_buf); - if ( write_dbg_memory(ea_t(ea), buf, sz) != sz ) + if ( write_dbg_memory(ea, buf.begin(), buf.size()) != buf.size() ) Py_RETURN_FALSE; Py_RETURN_TRUE; } @@ -326,7 +314,7 @@ static PyObject *dbg_get_name() if ( dbg == NULL ) Py_RETURN_NONE; else - return PyString_FromString(dbg->name); + return IDAPyStr_FromUTF8(dbg->name); } //------------------------------------------------------------------------- @@ -364,8 +352,8 @@ static PyObject *dbg_get_memory_info() PyObject *py_appcall( ea_t func_ea, thid_t tid, - PyObject *py_type, - PyObject *py_fields, + const bytevec_t &_type_or_none, + const bytevec_t &_fields, PyObject *arg_list); char get_event_module_name(const debug_event_t *ev, char *buf, size_t bufsize) diff --git a/pywraps/py_idd.py b/pywraps/py_idd.py index 14831f4..e8cc8eb 100644 --- a/pywraps/py_idd.py +++ b/pywraps/py_idd.py @@ -44,7 +44,7 @@ class Appcall_array__(object): return obj # at this point, we are sure we have an "idc list" # let us convert to a Python list - return [getattr(obj, str(x)) for x in xrange(0, self.__size)] + return [getattr(obj, str(x)) for x in range(0, self.__size)] def unpack(self, buf, as_list=True): """Unpacks an array back into a list or an object""" @@ -90,14 +90,14 @@ class Appcall_callable__(object): self.__timeout = None # Appcall timeout if tinfo_or_typestr: - if type(tinfo_or_typestr) == types.StringType: + if isinstance(tinfo_or_typestr, ida_idaapi.string_types): # a type string? assume (typestr, fields), try to deserialize tif = ida_typeinf.tinfo_t() if not tif.deserialize(None, tinfo_or_typestr, fields): - raise ValueError, "Could not deserialize type string" + raise ValueError("Could not deserialize type string") else: if not isinstance(tinfo_or_typestr, ida_typeinf.tinfo_t): - raise ValueError, "Invalid argument 'tinfo_or_typestr'" + raise ValueError("Invalid argument 'tinfo_or_typestr'") tif = tinfo_or_typestr self.__tif = tif (self.__type, self.__fields, _) = tif.serialize() @@ -236,8 +236,10 @@ class Appcall_callable__(object): # ----------------------------------------------------------------------- class Appcall_consts__(object): - """Helper class used by Appcall.Consts attribute - It is used to retrieve constants via attribute access""" + """ + Helper class used by Appcall.Consts attribute + It is used to retrieve constants via attribute access + """ def __init__(self, default=None): self.__default = default @@ -293,7 +295,7 @@ class Appcall__(object): """ # a string? try to resolve it - if type(name_or_ea) == bytes: + if type(name_or_ea) in ida_idaapi.string_types: ea = _ida_name.get_name_ea(_ida_idaapi.BADADDR, name_or_ea) else: ea = name_or_ea @@ -313,15 +315,15 @@ class Appcall__(object): """ # a string? try to parse it - if type(typedecl_or_tinfo) == types.StringType: + if isinstance(typedecl_or_tinfo, ida_idaapi.string_types): if flags is None: flags = ida_typeinf.PT_SIL|ida_typeinf.PT_NDC|ida_typeinf.PT_TYP tif = ida_typeinf.tinfo_t() if ida_typeinf.parse_decl(tif, None, typedecl_or_tinfo, flags) == None: - raise ValueError, "Could not parse type: " + typedecl_or_tinfo + raise ValueError("Could not parse type: " + typedecl_or_tinfo) else: if not isinstance(typedecl_or_tinfo, ida_typeinf.tinfo_t): - raise ValueError, "Invalid argument 'typedecl_or_tinfo'" + raise ValueError("Invalid argument 'typedecl_or_tinfo'") tif = typedecl_or_tinfo return tif @@ -412,8 +414,9 @@ class Appcall__(object): return ida_idaapi.as_cstr(val) @staticmethod - def unicode(s): - return ida_idaapi.as_unicode(s) + def UTF16(s): + return ida_idaapi.as_UTF16(s) + unicode = UTF16 @staticmethod def array(type_name): diff --git a/pywraps/py_idp.hpp b/pywraps/py_idp.hpp index 1452add..eda6d8f 100644 --- a/pywraps/py_idp.hpp +++ b/pywraps/py_idp.hpp @@ -35,7 +35,7 @@ static PyObject *AssembleLine( int inslen = ph.assemble((uchar *)buf, ea, cs, ip, use32, line); PYW_GIL_CHECK_LOCKED_SCOPE(); if ( inslen > 0 ) - return PyString_FromStringAndSize(buf, inslen); + return IDAPyBytes_FromMemAndSize(buf, inslen); else Py_RETURN_NONE; } @@ -327,7 +327,7 @@ static PyObject *ph_get_regnames() PYW_GIL_CHECK_LOCKED_SCOPE(); PyObject *py_result = PyList_New(ph.regs_num); for ( Py_ssize_t i=0; i < ph.regs_num; i++ ) - PyList_SetItem(py_result, i, PyString_FromString(ph.reg_names[i])); + PyList_SetItem(py_result, i, IDAPyStr_FromUTF8(ph.reg_names[i])); return py_result; } @@ -627,9 +627,9 @@ private: static ssize_t cm_t_to_ssize_t(cm_t cm) { return ssize_t(cm); } static bool _handle_qstring_output(PyObject *o, qstring *buf) { - bool is_str = o != NULL && PyString_Check(o); + bool is_str = o != NULL && IDAPyStr_Check(o); if ( is_str && buf != NULL ) - *buf = PyString_AS_STRING(o); + IDAPyStr_AsUTF8(buf, o); Py_XDECREF(o); return is_str; } @@ -647,11 +647,11 @@ private: const char * /*line*/) { ssize_t rc = 0; - if ( o != NULL && PyString_Check(o) ) + if ( o != NULL && IDAPyBytes_Check(o) ) { char *s; Py_ssize_t len = 0; - if ( PyString_AsStringAndSize(o, &s, &len) != -1 ) + if ( IDAPyBytes_AsMemAndSize(o, &s, &len) != -1 ) { if ( len > MAXSTR ) len = MAXSTR; @@ -700,10 +700,10 @@ private: { newref_t py_rc(PySequence_GetItem(o, 0)); newref_t py_idx(PySequence_GetItem(o, 1)); - if ( PyInt_Check(py_rc.o) && PyInt_Check(py_idx.o) ) + if ( IDAPyInt_Check(py_rc.o) && IDAPyInt_Check(py_idx.o) ) { - rc = PyInt_AsLong(py_rc.o); - *idx = PyInt_AsLong(py_idx.o); + rc = IDAPyInt_AsLong(py_rc.o); + *idx = IDAPyInt_AsLong(py_idx.o); } } return rc; @@ -722,20 +722,16 @@ private: newref_t py_rc(PySequence_GetItem(o, 0)); newref_t py_out(PySequence_GetItem(o, 1)); newref_t py_out_res(PySequence_GetItem(o, 2)); - char *s; - Py_ssize_t len = 0; - if ( PyInt_Check(py_rc.o) - && PyInt_Check(py_out_res.o) - && PyString_Check(py_out.o) - && PyString_AsStringAndSize(py_out.o, &s, &len) != -1 ) + qstring qs; + if ( IDAPyInt_Check(py_rc.o) + && IDAPyInt_Check(py_out_res.o) + && IDAPyStr_Check(py_out.o) + && IDAPyStr_AsUTF8(&qs, py_out.o) ) { - rc = PyInt_AsLong(py_rc.o); - *out_res = PyInt_AsLong(py_out_res.o); + rc = IDAPyInt_AsLong(py_rc.o); + *out_res = IDAPyInt_AsLong(py_out_res.o); if ( out != NULL ) - { - out->qclear(); - out->append(s, len); - } + out->swap(qs); } } return rc; @@ -757,19 +753,7 @@ private: qstring *buf, const insn_t * /*pinsn*/) { - ssize_t rc = 0; - if ( PyString_Check(o) ) - { - char *s; - Py_ssize_t len = 0; - if ( PyString_AsStringAndSize(o, &s, &len) != -1 ) - { - buf->qclear(); - buf->append(s, len); - rc = 1; - } - } - return rc; + return IDAPyStr_Check(o) && IDAPyStr_AsUTF8(buf, o); } static ssize_t handle_get_operand_string_output( PyObject *o, @@ -777,33 +761,21 @@ private: const insn_t * /*pinsn*/, int /*opnum*/) { - ssize_t rc = 0; - if ( PyString_Check(o) ) - { - char *s; - Py_ssize_t len = 0; - if ( PyString_AsStringAndSize(o, &s, &len) != -1 ) - { - buf->qclear(); - buf->append(s, len); - rc = 1; - } - } - return rc; + return IDAPyStr_Check(o) && IDAPyStr_AsUTF8(buf, o); } }; //------------------------------------------------------------------------- -static PyObject *_wrap_addr_in_pycobject(void *addr); +static PyObject *_wrap_addr_in_pycapsule(void *addr); PyObject *get_idp_notifier_addr(PyObject *) { - return _wrap_addr_in_pycobject((void *) IDP_Callback); + return _wrap_addr_in_pycapsule((void *) IDP_Callback); } //------------------------------------------------------------------------- PyObject *get_idp_notifier_ud_addr(IDP_Hooks *hooks) { - return _wrap_addr_in_pycobject(hooks); + return _wrap_addr_in_pycapsule(hooks); } // @@ -813,9 +785,9 @@ PyObject *get_idp_notifier_ud_addr(IDP_Hooks *hooks) // hookgenIDP:methodsinfo_def //------------------------------------------------------------------------- -static PyObject *_wrap_addr_in_pycobject(void *addr) +static PyObject *_wrap_addr_in_pycapsule(void *addr) { - return PyCObject_FromVoidPtr(addr, NULL); + return PyCapsule_New(addr, VALID_CAPSULE_NAME, NULL); } //------------------------------------------------------------------------- diff --git a/pywraps/py_idp.py.in b/pywraps/py_idp.py.in index de3fed1..49d8b8c 100644 --- a/pywraps/py_idp.py.in +++ b/pywraps/py_idp.py.in @@ -548,21 +548,6 @@ ph_get_regLastSreg=ph_get_reg_last_sreg removing_func_tail=deleting_func_tail segm_attrs_changed=segm_attrs_updated str2regf=str2reg -def __wrap_insn_func(name): - def __wrapper(*args): - arg0 = args[0] - import ida_ua - if not isinstance(arg0, ida_ua.insn_t): - tmp = ida_ua.insn_t() - if not ida_ua.decode_insn(tmp, arg0): - return False - arg0 = tmp - return getattr(_ida_idp, name)(arg0, *args[1:]) - globals()[name] = __wrapper -__wrap_insn_func("is_call_insn") -__wrap_insn_func("is_ret_insn") -__wrap_insn_func("is_indirect_jump_insn") -__wrap_insn_func("is_basic_block_end") def parse_reg_name(*args): if isinstance(args[1], reg_info_t): # 6.95: regname, reg_info_t regname, ri = args diff --git a/pywraps/py_idp_idbhooks.hpp b/pywraps/py_idp_idbhooks.hpp index 095072a..ec44002 100644 --- a/pywraps/py_idp_idbhooks.hpp +++ b/pywraps/py_idp_idbhooks.hpp @@ -33,13 +33,13 @@ struct IDB_Hooks : public hooks_base_t //------------------------------------------------------------------------- PyObject *get_idb_notifier_addr(PyObject *) { - return _wrap_addr_in_pycobject((void *) IDB_Callback); + return _wrap_addr_in_pycapsule((void *) IDB_Callback); } //------------------------------------------------------------------------- PyObject *get_idb_notifier_ud_addr(IDB_Hooks *hooks) { - return _wrap_addr_in_pycobject(hooks); + return _wrap_addr_in_pycapsule(hooks); } // diff --git a/pywraps/py_kernwin.hpp b/pywraps/py_kernwin.hpp index 2e61e65..6e69272 100644 --- a/pywraps/py_kernwin.hpp +++ b/pywraps/py_kernwin.hpp @@ -11,7 +11,13 @@ struct py_idchotkey_ctx_t { qstring hotkey; - PyObject *pyfunc; + ref_t pyfunc; + + py_idchotkey_ctx_t( + const char *_hotkey, + PyObject *_pyfunc) + : hotkey(_hotkey), + pyfunc(borref_t(_pyfunc)) {} }; //------------------------------------------------------------------------ @@ -54,7 +60,7 @@ static PyObject *py_register_timer(int interval, PyObject *py_callback) { PYW_GIL_GET; py_timer_ctx_t *ctx = (py_timer_ctx_t *)ud; - newref_t py_result(PyObject_CallFunctionObjArgs(ctx->pycallback, NULL)); + newref_t py_result(PyObject_CallFunctionObjArgs(ctx->pyfunc.o, NULL)); int ret = -1; if ( PyErr_Occurred() ) { @@ -79,12 +85,15 @@ static PyObject *py_register_timer(int interval, PyObject *py_callback) tmr_t::callback, ctx); - if ( ctx->timer_id == NULL ) + if ( ctx->timer_id != NULL ) + { + return PyCapsule_New(ctx, VALID_CAPSULE_NAME, NULL); + } + else { python_timer_del(ctx); Py_RETURN_NONE; } - return PyCObject_FromVoidPtr(ctx, NULL); } //------------------------------------------------------------------------ @@ -101,20 +110,21 @@ def unregister_timer(timer_obj): pass # */ -static PyObject *py_unregister_timer(PyObject *py_timerctx) +static bool py_unregister_timer(PyObject *py_timerctx) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( py_timerctx == NULL || !PyCObject_Check(py_timerctx) ) - Py_RETURN_FALSE; + if ( py_timerctx == NULL || !PyCapsule_IsValid(py_timerctx, VALID_CAPSULE_NAME) ) + return false; - py_timer_ctx_t *ctx = (py_timer_ctx_t *) PyCObject_AsVoidPtr(py_timerctx); + py_timer_ctx_t *ctx = (py_timer_ctx_t *) PyCapsule_GetPointer(py_timerctx, VALID_CAPSULE_NAME); if ( ctx == NULL || !unregister_timer(ctx->timer_id) ) - Py_RETURN_FALSE; + return false; python_timer_del(ctx); - PyCObject_SetVoidPtr(py_timerctx, NULL); - Py_RETURN_TRUE; + // invalidate capsule; make sure we don't try and delete twice + PyCapsule_SetName(py_timerctx, INVALID_CAPSULE_NAME); + return true; } //------------------------------------------------------------------------ @@ -139,7 +149,7 @@ static PyObject *py_choose_idasgn() } else { - PyObject *py_str = PyString_FromString(name); + PyObject *py_str = IDAPyStr_FromUTF8(name); qfree(name); return py_str; } @@ -181,7 +191,7 @@ static int py_load_custom_icon_data(PyObject *data, const char *format) Py_ssize_t len; char *s; PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( PyString_AsStringAndSize(data, &s, &len) == -1 ) + if ( IDAPyBytes_AsMemAndSize(data, &s, &len) == -1 ) return 0; else return load_custom_icon(s, len, format); @@ -300,7 +310,7 @@ PyObject *py_ask_text(size_t max_size, const char *defval, const char *prompt) PyObject *py_ret; if ( ask_text(&qbuf, max_size, defval, "%s", prompt) ) { - py_ret = PyString_FromStringAndSize(qbuf.begin(), qbuf.length()); + py_ret = IDAPyStr_FromUTF8AndSize(qbuf.begin(), qbuf.length()); } else { @@ -332,7 +342,7 @@ PyObject *py_ask_str(qstring *defval, int hist, const char *prompt) PyObject *py_ret; if ( ask_str(defval, hist, "%s", prompt) ) { - py_ret = PyString_FromStringAndSize(defval->begin(), defval->length()); + py_ret = IDAPyStr_FromUTF8AndSize(defval->begin(), defval->length()); } else { @@ -396,20 +406,17 @@ def del_hotkey(ctx): bool py_del_hotkey(PyObject *pyctx) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyCObject_Check(pyctx) ) + if ( !PyCapsule_IsValid(pyctx, VALID_CAPSULE_NAME) ) return false; - py_idchotkey_ctx_t *ctx = (py_idchotkey_ctx_t *) PyCObject_AsVoidPtr(pyctx); + py_idchotkey_ctx_t *ctx = (py_idchotkey_ctx_t *) PyCapsule_GetPointer(pyctx, VALID_CAPSULE_NAME); if ( ctx == NULL || !del_idc_hotkey(ctx->hotkey.c_str()) ) return false; - Py_DECREF(ctx->pyfunc); delete ctx; - // Here we must ensure that the python object is invalidated. - // This is to avoid the possibility of this function being called again - // with the same ctx, which would contain a pointer to a deleted object. - PyCObject_SetVoidPtr(pyctx, NULL); + // invalidate capsule; make sure we don't try and delete twice + PyCapsule_SetName(pyctx, INVALID_CAPSULE_NAME); return true; } @@ -468,21 +475,13 @@ PyObject *py_add_hotkey(const char *hotkey, PyObject *pyfunc) break; // Create new context - // Define context - py_idchotkey_ctx_t *ctx = new py_idchotkey_ctx_t(); - - // Remember the hotkey - ctx->hotkey = hotkey; - - // Take reference to the callable - ctx->pyfunc = pyfunc; - Py_INCREF(pyfunc); + py_idchotkey_ctx_t *ctx = new py_idchotkey_ctx_t(hotkey, pyfunc); // Bind IDC variable w/ the PyCallable gvar->set_pvoid(pyfunc); // Return the context - return PyCObject_FromVoidPtr(ctx, NULL); + return PyCapsule_New(ctx, VALID_CAPSULE_NAME, NULL); } while (false); } // Cleanup @@ -510,8 +509,13 @@ static void idaapi py_ss_restore_callback(const char *err_msg, void *userdata) // userdata is a tuple of ( func, args ) // func and args are borrowed references from userdata - PyObject *func = PyTuple_GET_ITEM(userdata, 0); - PyObject *args = PyTuple_GET_ITEM(userdata, 1); + + PyObject *o = (PyObject *) userdata; + if ( !PyTuple_Check(o) ) + return; + + PyObject *func = PyTuple_GetItem(o, 0); + PyObject *args = PyTuple_GetItem(o, 1); // Create arguments tuple for python function PyObject *cb_args = Py_BuildValue("(sO)", err_msg, args); @@ -521,12 +525,14 @@ static void idaapi py_ss_restore_callback(const char *err_msg, void *userdata) // Free cb_args and userdata Py_DECREF(cb_args); - Py_DECREF(userdata); + Py_DECREF(o); // We cannot raise an exception in the callback, just print it. if ( result == NULL ) PyErr_Print(); } + +//------------------------------------------------------------------------- static PyObject *py_restore_database_snapshot( const snapshot_t *ss, PyObject *pyfunc_or_none, @@ -618,9 +624,9 @@ static int py_execute_sync(PyObject *py_callable, int reqf) { PYW_GIL_GET; newref_t py_result(PyObject_CallFunctionObjArgs(py_callable.o, NULL)); - int ret = py_result == NULL || !PyInt_Check(py_result.o) + int ret = py_result == NULL || !IDAPyInt_Check(py_result.o) ? -1 - : PyInt_AsLong(py_result.o); + : IDAPyInt_AsLong(py_result.o); // if the requesting thread decided not to wait for the request to // complete, we have to self-destroy, nobody else will do it if ( (code & MFF_NOWAIT) != 0 ) @@ -827,12 +833,11 @@ public: if ( json_dumps != NULL ) { newref_t str(PyObject_CallFunction(json_dumps.o, "O", dict)); - Py_ssize_t len; - char *s; - if ( PyString_AsStringAndSize(str.o, &s, &len) != -1 ) + qstring buf; + if ( IDAPyStr_AsUTF8(&buf, str.o) ) { jvalue_t tmp; - if ( parse_json_string(&tmp, s) == eOk ) + if ( parse_json_string(&tmp, buf.c_str()) == eOk ) { out->swap(tmp.obj()); return true; @@ -992,13 +997,8 @@ private: static ssize_t handle_get_ea_hint_output(PyObject *o, qstring *buf, ea_t) { ssize_t rc = 0; - char *_buf; - Py_ssize_t _len; - if ( o != NULL && PyString_Check(o) && PyString_AsStringAndSize(o, &_buf, &_len) != -1 ) - { - buf->append(_buf, _len); + if ( o != NULL && IDAPyStr_Check(o) && IDAPyStr_AsUTF8(buf, o) ) rc = 1; - } Py_XDECREF(o); return rc; } @@ -1009,21 +1009,18 @@ private: if ( o != NULL && PyTuple_Check(o) && PyTuple_Size(o) == 2 ) { borref_t el0(PyTuple_GetItem(o, 0)); - char *_buf; - Py_ssize_t _len; if ( el0 != NULL - && PyString_Check(el0.o) - && PyString_AsStringAndSize(el0.o, &_buf, &_len) != -1 - && _len > 0 ) + && IDAPyStr_Check(el0.o) + && IDAPyStr_AsUTF8(hint, el0.o) + && !hint->empty() ) { borref_t el1(PyTuple_GetItem(o, 1)); - if ( el1 != NULL && PyInt_Check(el1.o) ) + if ( el1 != NULL && IDAPyInt_Check(el1.o) ) { - long lns = PyInt_AsLong(el1.o); + long lns = IDAPyInt_AsLong(el1.o); if ( lns > 0 ) { *important_lines = lns; - hint->append(_buf, _len); rc = 1; } } @@ -1245,8 +1242,8 @@ PyObject *py_set_nav_colorizer(PyObject *new_py_colorizer) set_nav_colorizer(&was_fun, &was_ud, lambda_t::call_py_colorizer, NULL); if ( !first_install ) Py_RETURN_NONE; - PyObject *was_fun_ptr = PyCObject_FromVoidPtr((void *) was_fun, NULL); - PyObject *was_ud_ptr = PyCObject_FromVoidPtr(was_ud, NULL); + PyObject *was_fun_ptr = PyCapsule_New((void *) was_fun, VALID_CAPSULE_NAME, NULL); + PyObject *was_ud_ptr = PyCapsule_New(was_ud, VALID_CAPSULE_NAME, NULL); PyObject *dict = PyDict_New(); PyDict_SetItemString(dict, "fun", was_fun_ptr); PyDict_SetItemString(dict, "ud", was_ud_ptr); @@ -1273,10 +1270,14 @@ uint32 py_call_nav_colorizer( return 0; borref_t py_fun(PyDict_GetItemString(dict, "fun")); borref_t py_ud(PyDict_GetItemString(dict, "ud")); - if ( py_fun == NULL || !PyCObject_Check(py_fun.o) || !PyCObject_Check(py_ud.o) ) + if ( py_fun == NULL + || !PyCapsule_IsValid(py_fun.o, VALID_CAPSULE_NAME) + || !PyCapsule_IsValid(py_ud.o, VALID_CAPSULE_NAME) ) + { return 0; - nav_colorizer_t *fun = (nav_colorizer_t *) PyCObject_AsVoidPtr(py_fun.o); - void *ud = PyCObject_AsVoidPtr(py_ud.o); + } + nav_colorizer_t *fun = (nav_colorizer_t *) PyCapsule_GetPointer(py_fun.o, VALID_CAPSULE_NAME); + void *ud = PyCapsule_GetPointer(py_ud.o, VALID_CAPSULE_NAME); if ( fun == NULL ) return 0; return fun(ea, nbytes, ud); @@ -1342,7 +1343,19 @@ static PyObject *py_add_spaces(const char *s, size_t len) // we use the actual 'size' because we know that // 'add_spaces()' will add a terminating zero anyway add_spaces(qbuf.begin(), qbuf.size(), len); - return PyString_FromString(qbuf.c_str()); + return IDAPyStr_FromUTF8(qbuf.c_str()); +} + +//------------------------------------------------------------------------- +THREAD_SAFE void py_show_wait_box(const char *message) +{ + idapython_show_wait_box(/*internal=*/ false, message); +} + +//------------------------------------------------------------------------- +void py_hide_wait_box() +{ + idapython_hide_wait_box(); } // @@ -1365,8 +1378,13 @@ bool idaapi py_menu_item_callback(void *userdata) // userdata is a tuple of ( func, args ) // func and args are borrowed references from userdata - PyObject *func = PyTuple_GET_ITEM(userdata, 0); - PyObject *args = PyTuple_GET_ITEM(userdata, 1); + + PyObject *o = (PyObject *) userdata; + if ( !PyTuple_Check(o) ) + return false; + + PyObject *func = PyTuple_GetItem(o, 0); + PyObject *args = PyTuple_GetItem(o, 1); // Call the python function newref_t result(PyEval_CallObject(func, args)); diff --git a/pywraps/py_kernwin.py b/pywraps/py_kernwin.py index 06bf58f..7149757 100644 --- a/pywraps/py_kernwin.py +++ b/pywraps/py_kernwin.py @@ -76,6 +76,56 @@ class action_handler_t(object): def update(self, ctx): pass +# ---------------------------------------------------------------------- +# This provides an alternative to register_action()+attach_action_to_popup_menu() +class quick_widget_commands_t: + + class _cmd_t: + def __init__(self, caption, flags, menu_index, icon, emb, shortcut): + self.caption = caption + self.flags = flags + self.menu_index = menu_index + self.icon = icon + self.emb = emb + self.shortcut = shortcut + + class _ah_t(action_handler_t): + def __init__(self, parent, cmd_id): + action_handler_t.__init__(self) + self.parent = parent + self.cmd_id = cmd_id + + def activate(self, ctx): + self.parent.callback(ctx, self.cmd_id) + + def update(self, ctx): + return AST_ENABLE_ALWAYS + + + def __init__(self, callback): + self.callback = callback + self.cmds = [] + + def add(self, caption, flags, menu_index, icon, emb, shortcut): + for idx, cmd in enumerate(self.cmds): + if cmd.caption == caption: + return idx + self.cmds.append( + quick_widget_commands_t._cmd_t( + caption, flags, menu_index, icon, emb, shortcut)) + return len(self.cmds) - 1 + + def populate_popup(self, widget, popup): + for idx, cmd in enumerate(self.cmds): + if (cmd.flags & CHOOSER_POPUP_MENU) != 0: + desc = action_desc_t(None, + cmd.caption, + quick_widget_commands_t._ah_t(self, idx), + cmd.shortcut, + None, + cmd.icon) + attach_dynamic_action_to_popup(widget, popup, desc) + # ---------------------------------------------------------------------- # bw-compat/deprecated. You shouldn't rely on this in new code from ida_pro import str2user @@ -169,56 +219,8 @@ setBreak=set_cancelled wasBreak=user_cancelled refresh_lists=refresh_choosers -#-------------------------------------------------------------------------- -class BC695_control_cmd: - def __init__(self, cmd_id, caption, flags, menu_index, icon, emb, shortcut, is_chooser): - self.cmd_id = cmd_id - self.caption = caption - self.flags = flags - self.menu_index = menu_index - self.icon = icon - self.emb = emb - self.shortcut = shortcut - self.is_chooser = is_chooser - - @staticmethod - def add_to_control(control, caption, flags, menu_index, icon, emb, shortcut, is_chooser): - if getattr(control, "commands", None) is None: - setattr(control, "commands", []) - found = filter(lambda x: x.caption == caption, control.commands) - if len(found) == 1: - cmd_id = found[0].cmd_id - else: - cmd_id = len(control.commands) - cmd = BC695_control_cmd(cmd_id, caption, flags, menu_index, icon, emb, shortcut, is_chooser) - control.commands.append(cmd) - return cmd_id - - @staticmethod - def populate_popup(control, widget, popup): - cmds = getattr(control, "commands", []) - for cmd in cmds: - if (cmd.flags & CHOOSER_POPUP_MENU) != 0: - desc = action_desc_t(None, cmd.caption, BC695_control_cmd_ah_t(control, cmd), cmd.shortcut, None, cmd.icon) - attach_dynamic_action_to_popup(widget, popup, desc) - -class BC695_control_cmd_ah_t(action_handler_t): - def __init__(self, control, cmd): - action_handler_t.__init__(self) - self.control = control - self.cmd = cmd - - def activate(self, ctx): - if self.cmd.is_chooser: - idx = ctx.chooser_selection[0] - self.control.OnCommand(idx, self.cmd.cmd_id) - else: - self.control.OnCommand(self.cmd.cmd_id) - - def update(self, ctx): - return AST_ENABLE_ALWAYS - +# ------------------------------------------------------- class Choose2(object): """v.6.95 compatible chooser wrapper class.""" @@ -370,10 +372,7 @@ class Choose2(object): self.link.OnSelectionChange(n) def OnPopup(self, widget, popup_handle): - BC695_control_cmd.populate_popup( - self.link, - widget, - popup_handle) + self.link._quick_commands.populate_popup(widget, popup_handle) def __init__(self, title, cols, flags=0, popup_names=None, @@ -415,6 +414,10 @@ class Choose2(object): self.height = height # construct the v.7.0 chooser object self.chobj = Choose2.ChooseWrapper(self) + def _qccb(ctx, cmd_id): + for idx in ctx.chooser_selection: + self.OnCommand(idx, cmd_id) + self._quick_commands = quick_widget_commands_t(_qccb) # redirect methods to the v.7.0 chooser @@ -427,6 +430,7 @@ class Choose2(object): raise AttributeError(attr) return getattr(self.chobj, attr) + def Embedded(self): """ Creates an embedded chooser (as opposed to Show()) @@ -460,9 +464,13 @@ class Choose2(object): if self.embedded and ((emb is None) or (emb != 2002)): raise RuntimeError("Please add a command through " "EmbeddedChooserControl.AddCommand()") - return BC695_control_cmd.add_to_control( - self, caption, flags, menu_index, icon, emb, None, - is_chooser=True) + return self._quick_commands.add( + caption=caption, + flags=flags, + menu_index=menu_index, + icon=icon, + emb=emb, + shortcut=shortcut) # callbacks # def OnGetSize(self): diff --git a/pywraps/py_kernwin_askform.hpp b/pywraps/py_kernwin_askform.hpp index b776108..60a0f6f 100644 --- a/pywraps/py_kernwin_askform.hpp +++ b/pywraps/py_kernwin_askform.hpp @@ -151,7 +151,7 @@ static PyObject *formchgcbfa_get_field_value( { qstring val; if ( fa->get_combobox_value(fid, &val) ) - return PyString_FromString(val.c_str()); + return IDAPyStr_FromUTF8(val.c_str()); } break; @@ -184,7 +184,7 @@ static PyObject *formchgcbfa_get_field_value( { char val[MAXSTR]; if ( fa->get_string_value(fid, val, sizeof(val)) ) - return PyString_FromString(val); + return IDAPyStr_FromUTF8(val); break; } // string input @@ -193,7 +193,7 @@ static PyObject *formchgcbfa_get_field_value( qstring val; val.resize(sz + 1); if ( fa->get_string_value(fid, val.begin(), val.size()) ) - return PyString_FromString(val.begin()); + return IDAPyStr_FromUTF8(val.begin()); break; } case 5: @@ -268,9 +268,10 @@ static bool formchgcbfa_set_field_value( // dropdown list case 8: // Editable dropdown list - if ( PyString_Check(py_val) ) + if ( IDAPyStr_Check(py_val) ) { - qstring val(PyString_AsString(py_val)); + qstring val; + IDAPyStr_AsUTF8(&val, py_val); return fa->set_combobox_value(fid, &val); } // Readonly dropdown list @@ -302,7 +303,11 @@ static bool formchgcbfa_set_field_value( // strings case 3: case 1: - return fa->set_string_value(fid, PyString_AsString(py_val)); + { + qstring val; + IDAPyStr_AsUTF8(&val, py_val); + return fa->set_string_value(fid, val.c_str()); + } // intvec_t case 5: { diff --git a/pywraps/py_kernwin_askform.py b/pywraps/py_kernwin_askform.py index a3983c0..0e5c4ea 100644 --- a/pywraps/py_kernwin_askform.py +++ b/pywraps/py_kernwin_askform.py @@ -1,5 +1,7 @@ # -------------------------------------------------------------------------- # +import sys + import ida_idaapi, _ida_idaapi import ida_pro @@ -160,6 +162,17 @@ class Form(object): FT_RADGRP = 'R' FT_RADGRP2= 'r' + @staticmethod + def create_string_buffer(value, size=None): + if value is None: + assert(size is not None) + return ctypes.create_string_buffer(size) + else: + if sys.version_info.major >= 3: + return ctypes.create_string_buffer(value.encode("UTF-8"), size) + else: + return ctypes.create_string_buffer(value, size) + @staticmethod def fieldtype_to_ctype(tp, i64 = False): """ @@ -211,16 +224,15 @@ class Form(object): def __init__(self, size=None, value=None): if size is None: raise SyntaxError("The string size must be passed") - - if value is None: - self.arg = ctypes.create_string_buffer(size) - else: - self.arg = ctypes.create_string_buffer(value, size) self.size = size + self.arg = Form.create_string_buffer(value, size) + + def __get_value(self): + return self.arg.value.decode("UTF-8") def __set_value(self, v): - self.arg.value = v - value = property(lambda self: self.arg.value, __set_value) + self.arg.value = v.encode("UTF-8") + value = property(__get_value, __set_value) # @@ -288,7 +300,7 @@ class Form(object): """ String label control """ - def __init__(self, value, tp=None, sz=1024): + def __init__(self, value, tp=None, size=1024): """ Type field can be one of: A - ascii string @@ -301,8 +313,8 @@ class Form(object): if tp is None: tp = Form.FT_ASCII Form.LabelControl.__init__(self, tp) - self.size = sz - self.arg = ctypes.create_string_buffer(value, sz) + self.size = size + self.arg = Form.create_string_buffer(value, size) class NumericLabel(LabelControl, NumericArgument): @@ -693,8 +705,10 @@ class Form(object): self.selobj = ida_pro.sizevec_t() # Get a pointer to the selection vector - # emb = _ida_kernwin._choose_get_embedded_chobj_pointer(chooser) - sel = self.selobj.this.__long__() + if sys.version_info.major >= 3: + sel = self.selobj.this.__int__() + else: + sel = self.selobj.this.__long__() # Get a pointer to a c_void_p constructed from an address p_embedded = ctypes.pointer(ctypes.c_void_p.from_address(emb)) @@ -979,7 +993,7 @@ class Form(object): """ # Create group item controls for each child - for child_name in Group.children_names: + for child_name in sorted(Group.children_names): self.Add( child_name, # Use the class factory @@ -993,9 +1007,9 @@ class Form(object): The dictionary key is the control name and the value is a Form.Control object @param controls: The control dictionary """ - for name, ctrl in controls.items(): + for name in sorted(controls.keys()): # Add the control - self.Add(name, ctrl, mkattr) + self.Add(name, controls[name], mkattr) def CompileEx(self, form): @@ -1146,7 +1160,11 @@ class Form(object): args.insert(inspos, fccb.get_arg()) # Patch in the final form string - args[0] = form + + if sys.version_info.major >= 3: + args[0] = form.encode("UTF-8") + else: + args[0] = form self.title = self._ParseFormTitle(form) return args @@ -1285,12 +1303,12 @@ class Form(object): - dropdown list controls: string (when editable) or index (when readonly) - None: on failure """ - tid, sz = self.ControlToFieldTypeIdAndSize(ctrl) + tid, size = self.ControlToFieldTypeIdAndSize(ctrl) r = _ida_kernwin.formchgcbfa_get_field_value( self.p_fa, ctrl.id, tid, - sz) + size) # Multilinetext? Unpack the tuple into a new textctrl_info_t instance if r is not None and tid == 7: return textctrl_info_t(text=r[0], flags=r[1], tabsize=r[2]) diff --git a/pywraps/py_kernwin_choose.hpp b/pywraps/py_kernwin_choose.hpp index c493a88..30290df 100644 --- a/pywraps/py_kernwin_choose.hpp +++ b/pywraps/py_kernwin_choose.hpp @@ -67,6 +67,7 @@ struct py_chooser_props_t intvec_t widths; // Column widths qstrvec_t header_strings; // Chooser headers qvector header; + qstrvec_t popup_names; // Features flags (to tell which callback exists and which not) // See CHOOSE_xxxx uint32 features; @@ -80,21 +81,34 @@ struct py_chooser_props_t widths.swap(o.widths); header_strings.swap(o.header_strings); header.swap(o.header); + popup_names.swap(o.popup_names); qswap(features, o.features); qswap(flags, o.flags); } bool has_feature(feature_t f) const { return (features & f) == f; } + static bool do_extract_from_pyobject( + py_chooser_props_t *out, + PyObject *o, + bool title_only, + qstring *errbuf); + static bool extract_from_pyobject( py_chooser_props_t *out, PyObject *o, - bool title_only=false); + qstring *errbuf) + { + return do_extract_from_pyobject(out, o, /*title_only=*/ false, errbuf); + } - static bool get_title_from_pyobject(qstring *out, PyObject *o) + static bool get_title_from_pyobject( + qstring *out, + PyObject *o, + qstring *errbuf) { py_chooser_props_t props; - bool ok = extract_from_pyobject(&props, o, /*title_only=*/ true); + bool ok = do_extract_from_pyobject(&props, o, /*title_only=*/ true, errbuf); if ( ok ) out->swap(props.title); return ok; @@ -102,16 +116,20 @@ struct py_chooser_props_t }; //------------------------------------------------------------------------- -bool py_chooser_props_t::extract_from_pyobject( +bool py_chooser_props_t::do_extract_from_pyobject( py_chooser_props_t *out, PyObject *o, - bool title_only) + bool title_only, + qstring *errbuf) { PYW_GIL_CHECK_LOCKED_SCOPE(); +#define RETERR(Format, ...) do { errbuf->sprnt(Format, __VA_ARGS__); return false; } while ( false ) + // Get the title if ( !PyW_GetStringAttr(o, S_TITLE, &out->title) ) - return false; + RETERR("Missing or invalid mandatory '%s' attribute", S_TITLE); + if ( title_only ) return true; @@ -119,36 +137,35 @@ bool py_chooser_props_t::extract_from_pyobject( out->flags = 0; ref_t flags_attr(PyW_TryGetAttrString(o, S_FLAGS)); if ( flags_attr == NULL ) - return false; - if ( PyInt_Check(flags_attr.o) ) - out->flags = uint32(PyInt_AsLong(flags_attr.o)); - // instruct TChooser destructor to delete this chooser when window + RETERR("Missing or invalid mandatory '%s' attribute", S_FLAGS); + + if ( IDAPyInt_Check(flags_attr.o) ) + out->flags = uint32(IDAPyInt_AsLong(flags_attr.o)); + // instruct TChooser destructor to delete this chooser when widget // closes out->flags &= ~CH_KEEP; // Get columns + int ncols = -1; ref_t cols_attr(PyW_TryGetAttrString(o, "cols")); - if ( cols_attr == NULL ) - return false; - - // Get col count - int columns = int(PyList_Size(cols_attr.o)); - if ( columns < 1 ) - return false; + if ( cols_attr != NULL ) + ncols = int(PyList_Size(cols_attr.o)); + if ( ncols < 1 ) + RETERR("Missing or invalid mandatory '%s' attribute", S_COLS); // Get columns caption and widthes - out->header_strings.resize(columns); - out->header.resize(columns); - out->widths.resize(columns); - for ( int i = 0; i < columns; ++i ) + out->header_strings.resize(ncols); + out->header.resize(ncols); + out->widths.resize(ncols); + for ( int i = 0; i < ncols; ++i ) { // get list item: [name, width] borref_t list(PyList_GetItem(cols_attr.o, i)); borref_t v(PyList_GetItem(list.o, 0)); // Extract string - const char *str = v == NULL ? "" : PyString_AsString(v.o); - out->header_strings[i] = str; + if ( v != NULL ) + IDAPyStr_AsUTF8(&out->header_strings[i], v.o); out->header[i] = out->header_strings[i].c_str(); // Extract width @@ -156,12 +173,27 @@ bool py_chooser_props_t::extract_from_pyobject( borref_t v2(PyList_GetItem(list.o, 1)); // No width? Guess width from column title if ( v2 == NULL ) - width = strlen(str); + width = ::qustrlen(out->header_strings[i].c_str()); else width = PyInt_AsLong(v2.o); out->widths[i] = width; } + // Get popup names + // An array of 4 strings: ("Insert", "Delete", "Edit", "Refresh") + ref_t pn_attr(PyW_TryGetAttrString(o, S_POPUP_NAMES)); + if ( pn_attr != NULL && PyList_Check(pn_attr.o) ) + { + Py_ssize_t npopups = PyList_Size(pn_attr.o); + if ( npopups > chooser_base_t::NSTDPOPUPS ) + npopups = chooser_base_t::NSTDPOPUPS; + for ( Py_ssize_t i = 0; i < npopups; ++i ) + { + qstring &buf = out->popup_names.push_back(); + IDAPyStr_AsUTF8(&buf, PyList_GetItem(pn_attr.o, i)); + } + } + // Check what callbacks we have static const struct { @@ -186,8 +218,8 @@ bool py_chooser_props_t::extract_from_pyobject( // we can forbid some callbacks explicitly uint32 forbidden_cb = 0; ref_t forbidden_cb_attr(PyW_TryGetAttrString(o, "forbidden_cb")); - if ( forbidden_cb_attr != NULL && PyInt_Check(forbidden_cb_attr.o) ) - forbidden_cb = uint32(PyInt_AsLong(forbidden_cb_attr.o)); + if ( forbidden_cb_attr != NULL && IDAPyInt_Check(forbidden_cb_attr.o) ) + forbidden_cb = uint32(IDAPyInt_AsLong(forbidden_cb_attr.o)); out->features = 0; for ( int i = 0; i < qnumber(callbacks); ++i ) @@ -203,7 +235,7 @@ bool py_chooser_props_t::extract_from_pyobject( { // Mandatory field? if ( callbacks[i].have == 0 ) - return false; + RETERR("Missing or invalid mandatory '%s' callback", callbacks[i].name); } } @@ -212,6 +244,8 @@ bool py_chooser_props_t::extract_from_pyobject( if ( emb_attr != NULL && PyObject_IsTrue(emb_attr.o) == 1 ) out->features |= CFEAT_EMBEDDED; +#undef RETERR + return true; } @@ -249,6 +283,7 @@ protected: size_t n, const chooser_base_t *chobj) const; void mixin_closed(chooser_base_t *chobj); + void mixin_init_chooser_base_from_props(chooser_base_t *cb); }; //------------------------------------------------------------------------- @@ -289,18 +324,16 @@ void py_chooser_mixin_t::mixin_get_row( PyObject_CallMethod( self.o, (char *)S_ON_GET_LINE, "i", int(n))); + if ( PyErr_Occurred() != NULL ) + return; if ( list.result != NULL ) { // Go over the List returned by Python and convert to C strings for ( int i = chobj->columns - 1; i >= 0; --i ) { borref_t item(PyList_GetItem(list.result.o, Py_ssize_t(i))); - if ( item == NULL ) - continue; - - const char *str = PyString_AsString(item.o); - if ( str != NULL ) - (*cols)[i] = str; + if ( item != NULL ) + IDAPyStr_AsUTF8(&cols->at(i), item.o); } } @@ -311,6 +344,8 @@ void py_chooser_mixin_t::mixin_get_row( PyObject_CallMethod( self.o, (char *)S_ON_GET_ICON, "i", int(n))); + if ( PyErr_Occurred() != NULL ) + return; if ( pyres.result != NULL ) *icon_ = PyInt_AsLong(pyres.result.o); } @@ -321,6 +356,8 @@ void py_chooser_mixin_t::mixin_get_row( PyObject_CallMethod( self.o, (char *)S_ON_GET_LINE_ATTR, "i", int(n))); + if ( PyErr_Occurred() != NULL ) + return; if ( pyres.result != NULL && PyList_Check(pyres.result.o) ) { PyObject *item; @@ -335,14 +372,34 @@ void py_chooser_mixin_t::mixin_get_row( //------------------------------------------------------------------------- void py_chooser_mixin_t::mixin_closed(chooser_base_t *chobj) { - if ( !has_feature(CFEAT_ONCLOSE) ) + PYW_GIL_GET; + if ( has_feature(CFEAT_ONCLOSE) ) + { + pycall_res_t pyres(PyObject_CallMethod(self.o, (char *)S_ON_CLOSE, NULL)); + } + else { chobj->chooser_base_t::closed(); - return; } - PYW_GIL_GET; - pycall_res_t pyres(PyObject_CallMethod(self.o, (char *)S_ON_CLOSE, NULL)); - PyObject_DelAttrString(self.o, "ui_hooks_trampoline"); // delete UI hook + if ( PyObject_HasAttrString(self.o, "ui_hooks_trampoline") ) + { + { + newref_t tramp(PyObject_GetAttrString(self.o, "ui_hooks_trampoline")); + if ( tramp.o != Py_None ) + { + newref_t unhook_res(PyObject_CallMethod(tramp.o, "unhook", NULL)); + } + } + PyObject_DelAttrString(self.o, "ui_hooks_trampoline"); + } +} + +//------------------------------------------------------------------------- +void py_chooser_mixin_t::mixin_init_chooser_base_from_props( + chooser_base_t *cb) +{ + for ( size_t i = 0; i < props.popup_names.size(); ++i ) + cb->popup_names[i] = props.popup_names[i].begin(); } //------------------------------------------------------------------------ @@ -365,14 +422,14 @@ class py_chooser_t : public chooser_t, public py_chooser_mixin_t { { newref_t item(PySequence_GetItem(pyres.result.o, 0)); - if ( item.o != NULL && PyInt_Check(item.o) ) - ret.changed = cbres_t(PyInt_AsLong(item.o)); + if ( item.o != NULL && IDAPyInt_Check(item.o) ) + ret.changed = cbres_t(IDAPyInt_AsLong(item.o)); } if ( ret.changed != NOTHING_CHANGED ) { newref_t item(PySequence_GetItem(pyres.result.o, 1)); - if ( item.o != NULL && PyInt_Check(item.o) ) - ret.idx = ssize_t(PyInt_AsSsize_t(item.o)); + if ( item.o != NULL && IDAPyInt_Check(item.o) ) + ret.idx = ssize_t(IDAPyInt_AsSsize_t(item.o)); } } *out = ret; @@ -388,7 +445,10 @@ public: props_.widths.begin(), props_.header.begin(), props_.title.c_str()), - py_chooser_mixin_t(self_, props_) {} + py_chooser_mixin_t(self_, props_) + { + mixin_init_chooser_base_from_props(this); + } DEFINE_COMMON_CALLBACKS @@ -468,7 +528,10 @@ public: props_.widths.begin(), props_.header.begin(), props_.title.c_str()), - py_chooser_mixin_t(self_, props_) {} + py_chooser_mixin_t(self_, props_) + { + mixin_init_chooser_base_from_props(this); + } DEFINE_COMMON_CALLBACKS @@ -529,21 +592,6 @@ chooser_base_t *py_chooser_mixin_t::create_concrete_instance( // Get *icon py_get_int(o, &chobj->icon, "icon"); - // Get *popup names - // An array of 4 strings: ("Insert", "Delete", "Edit", "Refresh") - ref_t pn_attr(PyW_TryGetAttrString(o, S_POPUP_NAMES)); - if ( pn_attr != NULL && PyList_Check(pn_attr.o) ) - { - int npopups = int(PyList_Size(pn_attr.o)); - if ( npopups > chooser_base_t::NSTDPOPUPS ) - npopups = chooser_base_t::NSTDPOPUPS; - for ( int i = 0; i < npopups; ++i ) - { - const char *str = PyString_AsString(PyList_GetItem(pn_attr.o, i)); - chobj->popup_names[i] = str; - } - } - if ( props.has_feature(CFEAT_EMBEDDED) ) { py_get_int(o, &chobj->width, "width"); @@ -553,11 +601,15 @@ chooser_base_t *py_chooser_mixin_t::create_concrete_instance( } //------------------------------------------------------------------------- -int choose_choose(PyObject *self) +PyObject *choose_choose(PyObject *self) { + qstring errbuf; py_chooser_props_t props; - if ( !py_chooser_props_t::extract_from_pyobject(&props, self) ) - return chooser_base_t::NO_SELECTION; + if ( !py_chooser_props_t::extract_from_pyobject(&props, self, &errbuf) ) + { + PyErr_SetString(PyExc_AttributeError, errbuf.c_str()); + return NULL; + } chooser_base_t *chobj = py_chooser_mixin_t::create_concrete_instance(props, self); ssize_t res; @@ -583,30 +635,30 @@ int choose_choose(PyObject *self) } // assert: `this` is deleted in the case of the modal chooser - return res; + return PyInt_FromLong(long(res)); } //------------------------------------------------------------------------ void choose_close(PyObject *self) { - qstring title; - if ( py_chooser_props_t::get_title_from_pyobject(&title, self) ) + qstring title, errbuf; + if ( py_chooser_props_t::get_title_from_pyobject(&title, self, &errbuf) ) close_chooser(title.c_str()); } //------------------------------------------------------------------------ void choose_refresh(PyObject *self) { - qstring title; - if ( py_chooser_props_t::get_title_from_pyobject(&title, self) ) + qstring title, errbuf; + if ( py_chooser_props_t::get_title_from_pyobject(&title, self, &errbuf) ) refresh_chooser(title.c_str()); } //------------------------------------------------------------------------- TWidget *choose_get_widget(PyObject *self) { - qstring title; - return py_chooser_props_t::get_title_from_pyobject(&title, self) + qstring title, errbuf; + return py_chooser_props_t::get_title_from_pyobject(&title, self, &errbuf) ? find_widget(title.c_str()) : NULL; } @@ -621,17 +673,23 @@ void choose_activate(PyObject *self) //------------------------------------------------------------------------ // Return the C instance as 64bit number -uint64 choose_create_embedded_chobj(PyObject *self) +PyObject *choose_create_embedded_chobj(PyObject *self) { PYW_GIL_CHECK_LOCKED_SCOPE(); uint64 ptr = 0; + qstring errbuf; py_chooser_props_t props; - if ( py_chooser_props_t::extract_from_pyobject(&props, self) ) + if ( py_chooser_props_t::extract_from_pyobject(&props, self, &errbuf) ) { chooser_base_t *chobj = py_chooser_mixin_t::create_concrete_instance(props, self); ptr = uint64(chobj); } - return ptr; + else + { + PyErr_SetString(PyExc_AttributeError, errbuf.c_str()); + return NULL; + } + return PyLong_FromUnsignedLongLong(ptr); } //------------------------------------------------------------------------ @@ -650,11 +708,10 @@ PyObject *choose_find(const char *title) PyObject *choose_find(const char *title); void choose_refresh(PyObject *self); void choose_close(PyObject *self); -// int choose_create(PyObject *self); TWidget *choose_get_widget(PyObject *self); -int choose_choose(PyObject *self); +PyObject *choose_choose(PyObject *self); void choose_activate(PyObject *self); -uint64 choose_create_embedded_chobj(PyObject *self); +PyObject *choose_create_embedded_chobj(PyObject *self); PyObject *py_get_chooser_data(const char *chooser_caption, int n) { @@ -663,7 +720,7 @@ PyObject *py_get_chooser_data(const char *chooser_caption, int n) Py_RETURN_NONE; PyObject *py_list = PyList_New(data.size()); for ( size_t i = 0; i < data.size(); ++i ) - PyList_SetItem(py_list, i, PyString_FromString(data[i].c_str())); + PyList_SetItem(py_list, i, IDAPyStr_FromUTF8(data[i].c_str())); return py_list; } diff --git a/pywraps/py_kernwin_choose.py b/pywraps/py_kernwin_choose.py index f6b6c34..6da1234 100644 --- a/pywraps/py_kernwin_choose.py +++ b/pywraps/py_kernwin_choose.py @@ -1,5 +1,7 @@ #-------------------------------------------------------------------------- # +import _ida_kernwin + class Choose(object): """ Chooser wrapper class. @@ -106,12 +108,12 @@ class Choose(object): import weakref self.v = weakref.ref(v) - def populating_widget_popup(self, form, popup_handle): + def populating_widget_popup(self, widget, popup_handle): chooser = self.v() - if form == chooser.GetWidget() and \ + if widget == chooser.GetWidget() and \ hasattr(chooser, "OnPopup") and \ callable(getattr(chooser, "OnPopup")): - chooser.OnPopup(form, popup_handle) + chooser.OnPopup(widget, popup_handle) def __init__(self, title, cols, flags = 0, popup_names = None, icon=-1, x1=-1, y1=-1, x2=-1, y2=-1, @@ -155,6 +157,10 @@ class Choose(object): self.height = height self.forbidden_cb = forbidden_cb self.ui_hooks_trampoline = None # set on Show + def _qccb(ctx, cmd_id): + for idx in ctx.chooser_selection: + self.OnCommand(idx, cmd_id) + self._quick_commands = quick_widget_commands_t(_qccb) def Embedded(self, create_chobj=False): @@ -250,4 +256,23 @@ class Choose(object): if n >= cnt: n = cnt - 1 return [n] + + def AddCommand(self, + caption, + flags = _ida_kernwin.CHOOSER_POPUP_MENU, + menu_index = -1, + icon = -1, + emb=None, + shortcut=None): + return self._quick_commands.add( + caption=caption, + flags=flags, + menu_index=menu_index, + icon=icon, + emb=emb, + shortcut=shortcut) + + def OnPopup(self, widget, popup_handle): + self._quick_commands.populate_popup(widget, popup_handle) + # diff --git a/pywraps/py_kernwin_cli.hpp b/pywraps/py_kernwin_cli.hpp index f780fe7..4a66186 100644 --- a/pywraps/py_kernwin_cli.hpp +++ b/pywraps/py_kernwin_cli.hpp @@ -96,11 +96,11 @@ private: // Returns: true-modified input line or x coordinate or selection length // This callback is optional bool on_keydown( - qstring *line, - int *p_x, - int *p_sellen, - int *vk_key, - int shift) + qstring *line, + int *p_x, + int *p_sellen, + int *vk_key, + int shift) { PYW_GIL_GET; newref_t result( @@ -121,6 +121,12 @@ private: if ( ok ) { Py_ssize_t sz = PyTuple_Size(result.o); + if ( sz > 0 ) + { + borref_t _r(PyTuple_GetItem(result.o, 0)); + if ( _r != NULL && IDAPyStr_Check(_r.o) ) + IDAPyStr_AsUTF8(line, _r.o); + } #define GET_TUPLE_ENTRY(col, PyThingy, AsThingy, out) \ do \ @@ -132,8 +138,6 @@ private: *out = PyThingy##_##AsThingy(_r.o); \ } \ } while ( false ) - - GET_TUPLE_ENTRY(0, PyString, AsString, line); GET_TUPLE_ENTRY(1, PyInt, AsLong, p_x); GET_TUPLE_ENTRY(2, PyInt, AsLong, p_sellen); GET_TUPLE_ENTRY(3, PyInt, AsLong, vk_key); @@ -167,10 +171,10 @@ private: line, x)); - bool ok = result != NULL && PyString_Check(result.o); + bool ok = result != NULL && IDAPyStr_Check(result.o); PyW_ShowCbErr(S_ON_COMPLETE_LINE); if ( ok ) - *completion = PyString_AsString(result.o); + IDAPyStr_AsUTF8(completion, result.o); return ok; } diff --git a/pywraps/py_kernwin_custview.hpp b/pywraps/py_kernwin_custview.hpp index 52864c6..f723011 100644 --- a/pywraps/py_kernwin_custview.hpp +++ b/pywraps/py_kernwin_custview.hpp @@ -216,9 +216,9 @@ class py_simplecustview_t } else { - ok = PyInt_Check(obj.o); + ok = IDAPyInt_Check(obj.o) != 0; if ( ok ) - *out = uint32(PyInt_AsLong(obj.o)); + *out = uint32(IDAPyInt_AsLong(obj.o)); } return ok; } @@ -229,9 +229,9 @@ class py_simplecustview_t { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( PyString_Check(py) ) + if ( IDAPyStr_Check(py) ) { - sl.line = PyString_AsString(py); + IDAPyStr_AsUTF8(&sl.line, py); return true; } Py_ssize_t sz; @@ -239,10 +239,10 @@ class py_simplecustview_t return false; PyObject *py_val = PyTuple_GetItem(py, 0); - if ( !PyString_Check(py_val) ) + if ( !IDAPyStr_Check(py_val) ) return false; - sl.line = PyString_AsString(py_val); + IDAPyStr_AsUTF8(&sl.line, py_val); uint32 col; if ( sz > 1 && get_color(&col, borref_t(PyTuple_GetItem(py, 1))) ) sl.color = color_t(col); @@ -329,12 +329,14 @@ class py_simplecustview_t bvsz_t(ln))); PyW_ShowCbErr(S_ON_HINT); - bool ok = py_result != NULL && PyTuple_Check(py_result.o) && PyTuple_Size(py_result.o) == 2; + bool ok = py_result != NULL + && PyTuple_Check(py_result.o) + && PyTuple_Size(py_result.o) == 2; if ( ok ) { if ( important_lines != NULL ) *important_lines = PyInt_AsLong(PyTuple_GetItem(py_result.o, 0)); - hint = PyString_AsString(PyTuple_GetItem(py_result.o, 1)); + IDAPyStr_AsUTF8(&hint, PyTuple_GetItem(py_result.o, 1)); } return ok; } @@ -627,7 +629,7 @@ public: // Return a reference to the C++ instance (only once) if ( py_this == NULL ) - py_this = PyCObject_FromVoidPtr(this, NULL); + py_this = PyCapsule_New(this, VALID_CAPSULE_NAME, NULL); return true; } @@ -683,7 +685,9 @@ public: static py_simplecustview_t *get_this(PyObject *py_this) { PYW_GIL_CHECK_LOCKED_SCOPE(); - return PyCObject_Check(py_this) ? (py_simplecustview_t *) PyCObject_AsVoidPtr(py_this) : NULL; + return PyCapsule_IsValid(py_this, VALID_CAPSULE_NAME) + ? (py_simplecustview_t *) PyCapsule_GetPointer(py_this, VALID_CAPSULE_NAME) + : NULL; } PyObject *get_pythis() @@ -733,16 +737,14 @@ PyObject *pyscv_get_current_line(PyObject *py_this, bool mouse, bool notags) _this->get_current_line(&line, mouse, notags); if ( line.empty() ) Py_RETURN_NONE; - return PyString_FromStringAndSize(line.c_str(), line.length()); + return IDAPyStr_FromUTF8AndSize(line.c_str(), line.length()); } //-------------------------------------------------------------------------- bool pyscv_is_focused(PyObject *py_this) { DECL_THIS; - if ( _this == NULL ) - return false; - return _this->is_focused(); + return _this != NULL && _this->is_focused(); } size_t pyscv_count(PyObject *py_this) @@ -754,7 +756,7 @@ size_t pyscv_count(PyObject *py_this) bool pyscv_show(PyObject *py_this) { DECL_THIS; - return _this == NULL ? false : _this->show(); + return _this != NULL && _this->show(); } void pyscv_close(PyObject *py_this) @@ -767,9 +769,7 @@ void pyscv_close(PyObject *py_this) bool pyscv_jumpto(PyObject *py_this, size_t ln, int x, int y) { DECL_THIS; - if ( _this == NULL ) - return false; - return _this->jumpto(ln, x, y); + return _this != NULL && _this->jumpto(ln, x, y); } // Returns the line tuple @@ -812,28 +812,28 @@ PyObject *pyscv_clear_lines(PyObject *py_this) bool pyscv_add_line(PyObject *py_this, PyObject *py_sl) { DECL_THIS; - return _this == NULL ? false : _this->add_line(py_sl); + return _this != NULL && _this->add_line(py_sl); } //-------------------------------------------------------------------------- bool pyscv_insert_line(PyObject *py_this, size_t nline, PyObject *py_sl) { DECL_THIS; - return _this == NULL ? false : _this->insert_line(nline, py_sl); + return _this != NULL && _this->insert_line(nline, py_sl); } //-------------------------------------------------------------------------- bool pyscv_patch_line(PyObject *py_this, size_t nline, size_t offs, int value) { DECL_THIS; - return _this == NULL ? false : _this->patch_line(nline, offs, value); + return _this != NULL && _this->patch_line(nline, offs, value); } //-------------------------------------------------------------------------- bool pyscv_del_line(PyObject *py_this, size_t nline) { DECL_THIS; - return _this == NULL ? false : _this->del_line(nline); + return _this != NULL && _this->del_line(nline); } //-------------------------------------------------------------------------- @@ -857,7 +857,7 @@ PyObject *pyscv_get_current_word(PyObject *py_this, bool mouse) { qstring word; if ( _this->get_current_word(mouse, word) ) - return PyString_FromString(word.c_str()); + return IDAPyStr_FromUTF8(word.c_str()); } Py_RETURN_NONE; } @@ -867,7 +867,7 @@ PyObject *pyscv_get_current_word(PyObject *py_this, bool mouse) bool pyscv_edit_line(PyObject *py_this, size_t nline, PyObject *py_sl) { DECL_THIS; - return _this == NULL ? false : _this->edit_line(nline, py_sl); + return _this != NULL && _this->edit_line(nline, py_sl); } //------------------------------------------------------------------------- diff --git a/pywraps/py_kernwin_custview.py b/pywraps/py_kernwin_custview.py index 460e7e7..fafaf1b 100644 --- a/pywraps/py_kernwin_custview.py +++ b/pywraps/py_kernwin_custview.py @@ -14,10 +14,18 @@ class simplecustviewer_t(object): my_form = self.v().GetWidget() if form == my_form: cb = self.v().OnPopup - from inspect import getargspec - if len(getargspec(cb).args) == 3: - cb(my_form, popup_handle) + import sys + import inspect + handled = False + if sys.version_info.major >= 3: + if len(inspect.getfullargspec(cb).args) == 3: + cb(my_form, popup_handle) + handled = True else: + if len(inspect.getargspec(cb).args) == 3: + cb(my_form, popup_handle) + handled = True + if not handled: cb() # bw-compat def __init__(self): @@ -183,7 +191,7 @@ class simplecustviewer_t(object): # @param shift: Shift flag # @return: Boolean. True if you handled the event # """ -# print "OnClick, shift=%d" % shift +# print("OnClick, shift=%d" % shift) # return True # # def OnDblClick(self, shift): @@ -192,7 +200,7 @@ class simplecustviewer_t(object): # @param shift: Shift flag # @return: Boolean. True if you handled the event # """ -# print "OnDblClick, shift=%d" % shift +# print("OnDblClick, shift=%d" % shift) # return True # # def OnCursorPosChanged(self): @@ -200,14 +208,14 @@ class simplecustviewer_t(object): # Cursor position changed. # @return: Nothing # """ -# print "OnCurposChanged" +# print("OnCurposChanged") # # def OnClose(self): # """ # The view is closing. Use this event to cleanup. # @return: Nothing # """ -# print "OnClose" +# print("OnClose") # # def OnKeydown(self, vkey, shift): # """ @@ -216,7 +224,7 @@ class simplecustviewer_t(object): # @param shift: Shift flag # @return: Boolean. True if you handled the event # """ -# print "OnKeydown, vk=%d shift=%d" % (vkey, shift) +# print("OnKeydown, vk=%d shift=%d" % (vkey, shift)) # return False # # def OnHint(self, lineno): @@ -235,7 +243,7 @@ class simplecustviewer_t(object): # @param menu_id: ID previously registered with add_popup_menu() # @return: Boolean # """ -# print "OnPopupMenu, menu_id=" % menu_id +# print("OnPopupMenu, menu_id=" % menu_id) # return True # # diff --git a/pywraps/py_kernwin_idaview.hpp b/pywraps/py_kernwin_idaview.hpp index 034ef46..95ca880 100644 --- a/pywraps/py_kernwin_idaview.hpp +++ b/pywraps/py_kernwin_idaview.hpp @@ -16,7 +16,7 @@ public: bool py_idaview_t::Bind(PyObject *self) { // Already a py_idaview_t associated to this object? - py_idaview_t *_this = view_extract_this(self); + py_idaview_t *_this = (py_idaview_t *) view_extract_this(self); if ( _this != NULL ) return false; @@ -54,7 +54,7 @@ bool py_idaview_t::Bind(PyObject *self) //------------------------------------------------------------------------- bool py_idaview_t::Unbind(PyObject *self) { - py_idaview_t *_this = view_extract_this(self); + py_idaview_t *_this = (py_idaview_t *) view_extract_this(self); if ( _this == NULL ) return false; _this->unbind(true); diff --git a/pywraps/py_kernwin_plgform.hpp b/pywraps/py_kernwin_plgform.hpp index 5bb01ee..decaf0e 100644 --- a/pywraps/py_kernwin_plgform.hpp +++ b/pywraps/py_kernwin_plgform.hpp @@ -24,7 +24,7 @@ class plgform_t PyObject_CallMethod( _this->py_obj.o, (char *)S_ON_CLOSE, "O", - PyCObject_FromVoidPtr(widget, NULL))); + PyCapsule_New(widget, VALID_CAPSULE_NAME, NULL))); PyW_ShowCbErr(S_ON_CLOSE); } _this->unhook(); @@ -92,7 +92,7 @@ public: PyObject_CallMethod( py_obj.o, (char *)S_ON_CREATE, "O", - PyCObject_FromVoidPtr(widget, NULL))); + PyCapsule_New(widget, VALID_CAPSULE_NAME, NULL))); PyW_ShowCbErr(S_ON_CREATE); if ( !create_only ) @@ -111,19 +111,23 @@ public: static PyObject *create() { PYW_GIL_CHECK_LOCKED_SCOPE(); - return PyCObject_FromVoidPtr(new plgform_t(), destroy); + return PyCapsule_New(new plgform_t(), VALID_CAPSULE_NAME, destroy); } - static void destroy(void *obj) + static void destroy(PyObject *py_obj) { - delete (plgform_t *)obj; + if ( PyCapsule_IsValid(py_obj, VALID_CAPSULE_NAME) ) + { + plgform_t *obj = (plgform_t *) PyCapsule_GetPointer(py_obj, VALID_CAPSULE_NAME); + delete (plgform_t *) obj; + } } }; // // //--------------------------------------------------------------------------- -#define DECL_PLGFORM PYW_GIL_CHECK_LOCKED_SCOPE(); plgform_t *plgform = (plgform_t *) PyCObject_AsVoidPtr(py_link); +#define DECL_PLGFORM PYW_GIL_CHECK_LOCKED_SCOPE(); plgform_t *plgform = (plgform_t *) PyCapsule_GetPointer(py_link, VALID_CAPSULE_NAME); static PyObject *plgform_new() { return plgform_t::create(); @@ -136,7 +140,7 @@ static bool plgform_show( int options = WOPN_DP_TAB|WOPN_RESTORE) { DECL_PLGFORM; - return plgform->show(py_obj, caption, options); + return plgform != NULL && plgform->show(py_obj, caption, options); } static void plgform_close( @@ -144,14 +148,15 @@ static void plgform_close( int options) { DECL_PLGFORM; - plgform->close(options); + if ( plgform != NULL ) + plgform->close(options); } static TWidget *plgform_get_widget( PyObject *py_link) { DECL_PLGFORM; - return plgform->get_widget(); + return plgform != NULL ? plgform->get_widget() : NULL; } #undef DECL_PLGFORM diff --git a/pywraps/py_kernwin_plgform.py b/pywraps/py_kernwin_plgform.py index 809e8f5..23f8c58 100644 --- a/pywraps/py_kernwin_plgform.py +++ b/pywraps/py_kernwin_plgform.py @@ -1,6 +1,9 @@ from __future__ import print_function # import sys + +import ida_idaapi + class PluginForm(object): """ PluginForm class. @@ -74,24 +77,28 @@ class PluginForm(object): @staticmethod def _ensure_widget_deps(ctx): - for key, modname in [("sip", "sip"), ("QtWidgets", "PyQt5.QtWidgets")]: - if not hasattr(ctx, key): - print("Note: importing '%s' module into %s" % (key, ctx)) + for modname in ["sip", "QtWidgets"]: + if not hasattr(ctx, modname): import importlib - setattr(ctx, key, importlib.import_module(modname)) + setattr(ctx, modname, importlib.import_module("PyQt5." + modname)) + VALID_CAPSULE_NAME = b"$valid$" + @staticmethod - def TWidgetToPyQtWidget(form, ctx = sys.modules['__main__']): + def TWidgetToPyQtWidget(tw, ctx = sys.modules['__main__']): """ 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 """ - if type(form).__name__ == "SwigPyObject": - ptr_l = long(form) + if type(tw).__name__ == "SwigPyObject": + ptr_l = ida_idaapi.long_type(tw) else: - ptr_l = form + import ctypes + ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.c_void_p + ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p] + ptr_l = ctypes.pythonapi.PyCapsule_GetPointer(tw, PluginForm.VALID_CAPSULE_NAME) PluginForm._ensure_widget_deps(ctx) vptr = ctx.sip.voidptr(ptr_l) return ctx.sip.wrapinstance(vptr.__int__(), ctx.QtWidgets.QWidget) @@ -106,31 +113,32 @@ class PluginForm(object): @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules """ PluginForm._ensure_widget_deps(ctx) - as_long = long(ctx.sip.unwrapinstance(w)) + as_long = ida_idaapi.long_type(ctx.sip.unwrapinstance(w)) return TWidget__from_ptrval__(as_long) @staticmethod - def TWidgetToPySideWidget(form, ctx = sys.modules['__main__']): + def TWidgetToPySideWidget(tw, ctx = sys.modules['__main__']): """ 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 """ - if form is None: + if tw is None: return None - if type(form).__name__ == "SwigPyObject": - # Since 'form' is a SwigPyObject, we first need to convert it to a PyCObject. + if type(tw).__name__ == "SwigPyObject": + # Since 'tw' is a SwigPyObject, we first need to convert it to a PyCapsule. # However, there's no easy way of doing it, so we'll use a rather brutal approach: # converting the SwigPyObject to a 'long' (will go through 'SwigPyObject_long', # that will return the pointer's value as a long), and then convert that value - # back to a pointer into a PyCObject. - ptr_l = long(form) - from ctypes import pythonapi, c_void_p, py_object - pythonapi.PyCObject_FromVoidPtr.restype = py_object - pythonapi.PyCObject_AsVoidPtr.argtypes = [c_void_p, c_void_p] - form = pythonapi.PyCObject_FromVoidPtr(ptr_l, 0) - return ctx.QtGui.QWidget.FromCObject(form) + # back to a pointer into a PyCapsule. + ptr_l = ida_idaapi.long_type(tw) + # Warning: this is untested + import ctypes + ctypes.pythonapi.PyCapsule_New.restype = ctypes.py_object + ctypes.pythonapi.PyCapsule_New.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_void_p] + tw = ctypes.pythonapi.PyCapsule_New(ptr_l, PluginForm.VALID_CAPSULE_NAME, 0) + return ctx.QtGui.QWidget.FromCapsule(tw) FormToPySideWidget = TWidgetToPySideWidget def OnCreate(self, form): diff --git a/pywraps/py_kernwin_viewhooks.py b/pywraps/py_kernwin_viewhooks.py index 6378a4b..f0fb8a9 100644 --- a/pywraps/py_kernwin_viewhooks.py +++ b/pywraps/py_kernwin_viewhooks.py @@ -29,8 +29,12 @@ class CustomIDAMemo(View_Hooks): return cb def _get_cb_arity(self, cb): - from inspect import getargspec - return len(getargspec(cb).args) + import sys + import inspect + if sys.version_info.major >= 3: + return len(inspect.getfullargspec(cb).args) + else: + return len(inspect.getargspec(cb).args) def view_activated(self, view): return self._get_cb(view, "OnViewActivated")() @@ -102,7 +106,7 @@ class CustomIDAMemo(View_Hooks): ida_idaapi.pygc_refresh(self) def GetCurrentRendererType(self): - return ida_idaapi.pygc_get_current_renderer_type(self) + return get_view_renderer_type(self.GetWidget()) def SetCurrentRendererType(self, rtype): """ @@ -110,7 +114,7 @@ class CustomIDAMemo(View_Hooks): @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. """ - ida_idaapi.pygc_set_current_renderer_type(self, rtype) + return set_view_renderer_type(self.GetWidget(), rtype) def SetNodeInfo(self, node_index, node_info, flags): """ @@ -126,7 +130,8 @@ class CustomIDAMemo(View_Hooks): @param node_info: An idaapi.node_info_t instance. @param flags: An OR'ed value of NIF_* values. """ - ida_idaapi.pygc_set_node_info(self, node_index, node_info, flags) + import ida_graph + return ida_graph.viewer_set_node_info(self.GetWidget(), node_index, node_info, flags) def SetNodesInfos(self, values): """ @@ -140,16 +145,29 @@ class CustomIDAMemo(View_Hooks): @param values: A dictionary of 'int -> node_info_t' objects. """ - ida_idaapi.pygc_set_nodes_infos(self, values) + import ida_graph + for node_index, node_info in values.items(): + ida_graph.viewer_set_node_info(self.GetWidget(), node_index, node_info, ida_graph.NIF_ALL) - def GetNodeInfo(self, node): + def GetNodeInfo(self, *args): """ Get the properties for the given node. + @param ni: A node_info_t instance @param node: The index of the node. - @return: A tuple (bg_color, frame_color, ea, text), or None. + @return: success """ - return ida_idaapi.pygc_get_node_info(self, node) + import ida_graph + if len(args) < 2: + # bw-compat + ni, node = ida_graph.node_info_t(), args[0] + if ida_graph.viewer_get_node_info(self.GetWidget(), ni, node): + return (ni.bg_color, ni.frame_color, ni.ea, ni.text) + else: + return None + else: + ni, node = args[0], args[1] + return ida_graph.viewer_get_node_info(self.GetWidget(), ni, node) def DelNodesInfos(self, *nodes): """ @@ -157,7 +175,9 @@ class CustomIDAMemo(View_Hooks): @param nodes: A list of node IDs """ - return ida_idaapi.pygc_del_nodes_infos(self, nodes) + import ida_graph + for n in nodes: + ida_graph.viewer_del_node_info(self.GetWidget(), n) def CreateGroups(self, groups_infos): """ @@ -206,6 +226,14 @@ class CustomIDAMemo(View_Hooks): """ return ida_idaapi.pycim_get_widget(self) + def GetWidgetAsGraphViewer(self): + """ + Return the graph_viewer_t underlying this view. + + @return: The graph_viewer_t underlying this view, or None. + """ + return ida_idaapi.pycim_get_widget_as_graph_viewer(self) + # ---------------------------------------------------------------------- # bw-compat/deprecated. You shouldn't rely on this in new code import ida_idaapi diff --git a/pywraps/py_lines.hpp b/pywraps/py_lines.hpp index f7a930f..1f0640e 100644 --- a/pywraps/py_lines.hpp +++ b/pywraps/py_lines.hpp @@ -21,15 +21,7 @@ static void idaapi s_py_get_user_defined_prefix( // Error? Display it // No error? Copy the buffer if ( !PyW_ShowCbErr("py_get_user_defined_prefix") ) - { - Py_ssize_t py_len; - char *py_str; - if ( PyString_AsStringAndSize(py_ret.o, &py_str, &py_len) != -1 ) - { - buf->qclear(); - buf->append(py_str, py_len); - } - } + IDAPyStr_AsUTF8(buf, py_ret.o); } // @@ -110,7 +102,7 @@ PyObject *py_tag_remove(const char *instr) PYW_GIL_CHECK_LOCKED_SCOPE(); qstring qbuf; tag_remove(&qbuf, instr); - return PyString_FromString(qbuf.c_str()); + return IDAPyStr_FromUTF8(qbuf.c_str()); } //------------------------------------------------------------------------- @@ -119,7 +111,7 @@ PyObject *py_tag_addr(ea_t ea) qstring tag; tag_addr(&tag, ea); PYW_GIL_CHECK_LOCKED_SCOPE(); - return PyString_FromString(tag.begin()); + return IDAPyStr_FromUTF8(tag.begin()); } //------------------------------------------------------------------------- @@ -183,7 +175,7 @@ PyObject *py_generate_disassembly( tag_remove(&qbuf, l); s = qbuf.c_str(); } - PyTuple_SetItem(py_tuple.o, i, PyString_FromString(s)); + PyTuple_SetItem(py_tuple.o, i, IDAPyStr_FromUTF8(s)); } return Py_BuildValue("(iO)", lnnum, py_tuple.o); } diff --git a/pywraps/py_lines.py b/pywraps/py_lines.py index 4ea5402..6d88ab2 100644 --- a/pywraps/py_lines.py +++ b/pywraps/py_lines.py @@ -1,5 +1,6 @@ # import _ida_idaapi +import _ida_lines # ---------------- Color escape sequence defitions ------------------------- COLOR_ADDR_SIZE = 16 if _ida_idaapi.BADADDR == 0xFFFFFFFFFFFFFFFF else 8 diff --git a/pywraps/py_loader.hpp b/pywraps/py_loader.hpp index 584ff79..65d3d7b 100644 --- a/pywraps/py_loader.hpp +++ b/pywraps/py_loader.hpp @@ -27,7 +27,7 @@ static int py_mem2base(PyObject *py_mem, ea_t ea, qoff64_t fpos = -1) char *buf; { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( PyString_AsStringAndSize(py_mem, &buf, &len) == -1 ) + if ( IDAPyBytes_AsMemAndSize(py_mem, &buf, &len) == -1 ) return 0; } @@ -57,7 +57,7 @@ static PyObject *py_load_plugin(const char *name) if ( r == NULL ) Py_RETURN_NONE; else - return PyCObject_FromVoidPtr(r, NULL); + return PyCapsule_New(r, VALID_CAPSULE_NAME, NULL); } //------------------------------------------------------------------------ @@ -75,13 +75,13 @@ def run_plugin(plg): static bool py_run_plugin(PyObject *plg, int arg) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyCObject_Check(plg) ) + if ( !PyCapsule_IsValid(plg, VALID_CAPSULE_NAME) ) { return false; } else { - plugin_t *p = (plugin_t *)PyCObject_AsVoidPtr(plg); + plugin_t *p = (plugin_t *) PyCapsule_GetPointer(plg, VALID_CAPSULE_NAME); bool rc; Py_BEGIN_ALLOW_THREADS; rc = run_plugin(p, arg); diff --git a/pywraps/py_lumina.hpp b/pywraps/py_lumina.hpp index 88d9028..7efcc7b 100644 --- a/pywraps/py_lumina.hpp +++ b/pywraps/py_lumina.hpp @@ -24,7 +24,7 @@ PyObject *py_split_metadata(const metadata_t &md) while ( p.next() ) { newref_t py_key(PyInt_FromLong(p.key)); - newref_t py_value(PyString_FromStringAndSize((const char *) p.data, p.size)); + newref_t py_value(IDAPyBytes_FromMemAndSize((const char *) p.data, p.size)); // PyDict_SetItem doesn't "steal" references; hence the 'newref_t's above. PyDict_SetItem(py_dict, py_key.o, py_value.o); } diff --git a/pywraps/py_nalt.hpp b/pywraps/py_nalt.hpp index 1707ca2..2a3a5e9 100644 --- a/pywraps/py_nalt.hpp +++ b/pywraps/py_nalt.hpp @@ -26,7 +26,7 @@ static int idaapi py_import_enum_cb( if ( name == NULL ) py_name = borref_t(Py_None); else - py_name = newref_t(PyString_FromString(name)); + py_name = newref_t(IDAPyStr_FromUTF8(name)); newref_t py_ord(Py_BuildValue(PY_BV_UVAL, bvuval_t(ord))); newref_t py_ea(Py_BuildValue(PY_BV_EA, bvea_t(ea))); @@ -61,7 +61,7 @@ static PyObject *py_get_import_module_name(int mod_index) if ( !get_import_module_name(&qbuf, mod_index) ) Py_RETURN_NONE; - return PyString_FromStringAndSize(qbuf.begin(), qbuf.length()); + return IDAPyStr_FromUTF8AndSize(qbuf.begin(), qbuf.length()); } //------------------------------------------------------------------------- diff --git a/pywraps/py_name.hpp b/pywraps/py_name.hpp index 14fcc38..076e9c2 100644 --- a/pywraps/py_name.hpp +++ b/pywraps/py_name.hpp @@ -20,7 +20,7 @@ PyObject *get_debug_names(ea_t ea1, ea_t ea2, bool return_list=false) PyObject *list = NULL; for ( ea_name_vec_t::iterator it = names.begin(); it != names.end(); ++it ) { - PyObject *name_obj = PyString_FromString(it->name.c_str()); + PyObject *name_obj = IDAPyStr_FromUTF8(it->name.c_str()); if ( it->ea != last_ea ) { if ( return_list ) @@ -49,7 +49,7 @@ PyObject *py_validate_name(const char *name, nametype_t type, int flags=0) { qstring qname(name); if ( validate_name(&qname, type, flags) ) - return PyString_FromStringAndSize(qname.c_str(), qname.length()); + return IDAPyStr_FromUTF8AndSize(qname.c_str(), qname.length()); else Py_RETURN_NONE; } diff --git a/pywraps/py_name.py b/pywraps/py_name.py index 506e013..d180183 100644 --- a/pywraps/py_name.py +++ b/pywraps/py_name.py @@ -17,7 +17,7 @@ class NearestName(object): def update(self, ea_names): """Updates the ea/names map""" self._names = ea_names - self._addrs = ea_names.keys() + self._addrs = list(ea_names.keys()) self._addrs.sort() @@ -44,7 +44,7 @@ class NearestName(object): def __iter__(self): - return (self._get_item(index) for index in xrange(0, len(self._addrs))) + return (self._get_item(index) for index in range(0, len(self._addrs))) def __getitem__(self, index): diff --git a/pywraps/py_pro.hpp b/pywraps/py_pro.hpp index 88c71ed..c7720a1 100644 --- a/pywraps/py_pro.hpp +++ b/pywraps/py_pro.hpp @@ -58,7 +58,7 @@ static PyObject *qstrvec_t_get(PyObject *self, size_t idx) qstrvec_t *sv = qstrvec_t_get_clink(self); if ( sv == NULL || idx >= sv->size() ) Py_RETURN_NONE; - return PyString_FromString(sv->at(idx).c_str()); + return IDAPyStr_FromUTF8(sv->at(idx).c_str()); } static bool qstrvec_t_add(PyObject *self, const char *s) @@ -121,8 +121,10 @@ def str2user(str): */ PyObject *py_str2user(const char *str) { + if ( str == nullptr ) + Py_RETURN_NONE; qstring retstr; qstr2user(&retstr, str); - return PyString_FromString(retstr.c_str()); + return IDAPyStr_FromUTF8(retstr.c_str()); } // diff --git a/pywraps/py_range.py b/pywraps/py_range.py index bf3f205..4de1722 100644 --- a/pywraps/py_range.py +++ b/pywraps/py_range.py @@ -1,4 +1,8 @@ +# +import ida_idaapi +# + # import sys sys.modules["ida_area"] = sys.modules["ida_range"] diff --git a/pywraps/py_registry.hpp b/pywraps/py_registry.hpp index 49c2cea..4ca372b 100644 --- a/pywraps/py_registry.hpp +++ b/pywraps/py_registry.hpp @@ -15,7 +15,7 @@ static PyObject *_py_reg_subkey_children(const char *name, bool subkeys) result = PyList_New(children.size()); if ( result != NULL ) for ( size_t i = 0, n = children.size(); i < n; ++i ) - PyList_SET_ITEM(result, i, PyString_FromString(children[i].c_str())); + PyList_SET_ITEM(result, i, IDAPyStr_FromUTF8(children[i].c_str())); } Py_END_ALLOW_THREADS; if ( result == NULL ) @@ -36,7 +36,7 @@ PyObject *py_reg_read_string(const char *name, const char *subkey = NULL, const if ( !reg_read_string(&utf8, name, subkey) && def != NULL ) utf8 = def; Py_END_ALLOW_THREADS; - return PyString_FromString(utf8.c_str()); + return IDAPyStr_FromUTF8(utf8.c_str()); } //------------------------------------------------------------------------- @@ -60,29 +60,31 @@ PyObject *py_reg_read_binary(const char *name, const char *subkey = NULL) ok = reg_read_binary(name, &bytes, subkey); Py_END_ALLOW_THREADS; if ( ok ) - return PyString_FromStringAndSize((const char *) bytes.begin(), bytes.size()); + return IDAPyBytes_FromMemAndSize((const char *) bytes.begin(), bytes.size()); else Py_RETURN_NONE; } //------------------------------------------------------------------------- -void py_reg_write_binary(const char *name, PyObject *py_bytes, const char *subkey = NULL) +PyObject *py_reg_write_binary(const char *name, PyObject *py_bytes, const char *subkey = NULL) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( PyString_Check(py_bytes) ) + if ( IDAPyBytes_Check(py_bytes) ) { char *py_bytes_raw = NULL; Py_ssize_t py_size = 0; - PyString_AsStringAndSize(py_bytes, &py_bytes_raw, &py_size); + IDAPyBytes_AsMemAndSize(py_bytes, &py_bytes_raw, &py_size); bytevec_t bytes; bytes.append(py_bytes_raw, py_size); Py_BEGIN_ALLOW_THREADS; reg_write_binary(name, bytes.begin(), bytes.size(), subkey); Py_END_ALLOW_THREADS; + Py_RETURN_NONE; } else { PyErr_SetString(PyExc_ValueError, "Bytes string expected!"); + return NULL; } } diff --git a/pywraps/py_segregs.py b/pywraps/py_segregs.py index 698cd15..f53f274 100644 --- a/pywraps/py_segregs.py +++ b/pywraps/py_segregs.py @@ -1,12 +1,15 @@ # import sys +import ida_idaapi sys.modules["ida_srarea"] = sys.modules["ida_segregs"] SetDefaultRegisterValue=set_default_sreg_value copy_srareas=copy_sreg_ranges def ___looks_like_ea_not_segreg(thing): # yay heuristics. Not sure how best to do this... - return (type(thing) == long) or (thing > 0x200) + if thing > 0x200: + return True + return sys.version_info.major < 3 and (type(thing) == long) def del_sreg_range(*args): if ___looks_like_ea_not_segreg(args[1]): # 6.95: rg, ea ea, rg = args[1], args[0] @@ -26,7 +29,6 @@ def get_sreg_range_num(*args): get_srarea_num=get_sreg_range_num get_srareas_qty2=get_sreg_ranges_qty getn_srarea2=getn_sreg_range -import ida_idaapi is_segreg_locked=ida_idaapi._BC695.false_p class lock_segreg: def __init__(): diff --git a/pywraps/py_typeinf.hpp b/pywraps/py_typeinf.hpp index 782286f..ed25aa9 100644 --- a/pywraps/py_typeinf.hpp +++ b/pywraps/py_typeinf.hpp @@ -14,7 +14,7 @@ PyObject *idc_parse_decl(til_t *ti, const char *decl, int flags) PYW_GIL_CHECK_LOCKED_SCOPE(); if ( ok ) - return Py_BuildValue("(sss)", + return Py_BuildValue("(s" PY_BV_TYPE PY_BV_FIELDS ")", name.c_str(), (char *)type.c_str(), (char *)fields.c_str()); @@ -39,11 +39,11 @@ def calc_type_size(ti, tp): PyObject *py_calc_type_size(const til_t *ti, PyObject *tp) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( PyString_Check(tp) ) + if ( IDAPyBytes_Check(tp) ) { // To avoid release of 'data' during Py_BEGIN|END_ALLOW_THREADS section. borref_t tpref(tp); - const type_t *data = (type_t *)PyString_AsString(tp); + const type_t *data = (type_t *)IDAPyBytes_AsString(tp); size_t sz; Py_BEGIN_ALLOW_THREADS; tinfo_t tif; @@ -77,21 +77,21 @@ def apply_type(ti, ea, tp_name, py_type, py_fields, flags) pass # */ -static bool py_apply_type(til_t *ti, PyObject *py_type, PyObject *py_fields, ea_t ea, int flags) +static bool py_apply_type( + til_t *ti, + const bytevec_t &_type, + const bytevec_t &_fields, + ea_t ea, + int flags) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyString_Check(py_type) || !PyWStringOrNone_Check(py_fields) ) - { - PyErr_SetString(PyExc_ValueError, "Typestring must be passed!"); - return NULL; - } - const type_t *type = (const type_t *) PyString_AsString(py_type); - const p_list *fields = PyW_Fields(py_fields); + const type_t *type = (const type_t *) _type.begin(); + const p_list *fields = (const p_list *) _fields.begin(); bool rc; Py_BEGIN_ALLOW_THREADS; struc_t *sptr; member_t *mptr = get_member_by_id(ea, &sptr); - if ( type[0] == '\0' ) + if ( type == NULL || type[0] == '\0' ) { if ( mptr != NULL ) { @@ -113,7 +113,7 @@ static bool py_apply_type(til_t *ti, PyObject *py_type, PyObject *py_fields, ea_ if ( rc ) { if ( mptr != NULL ) - rc = set_member_tinfo(sptr, mptr, 0, tif, 0); + rc = set_member_tinfo(sptr, mptr, 0, tif, 0) > SMT_FAILED; else rc = apply_tinfo(ea, tif, flags); } @@ -161,25 +161,14 @@ def py_unpack_object_from_idb(ti, tp, fields, ea, pio_flags = 0): */ PyObject *py_unpack_object_from_idb( til_t *ti, - PyObject *py_type, - PyObject *py_fields, + const bytevec_t &_type, + const bytevec_t &_fields, ea_t ea, int pio_flags = 0) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyString_Check(py_type) || !PyWStringOrNone_Check(py_fields) ) - { - PyErr_SetString(PyExc_ValueError, "Typestring must be passed!"); - return NULL; - } - - // To avoid release of 'type'/'fields' during Py_BEGIN|END_ALLOW_THREADS section. - borref_t py_type_ref(py_type); - borref_t py_fields_ref(py_fields); - - // Unpack - const type_t *type = (const type_t *) PyString_AsString(py_type); - const p_list *fields = PyW_Fields(py_fields); + const type_t *type = (const type_t *) _type.begin(); + const p_list *fields = (const p_list *) _fields.begin(); idc_value_t idc_obj; error_t err; Py_BEGIN_ALLOW_THREADS; @@ -229,31 +218,13 @@ def unpack_object_from_bv(ti, tp, fields, bytes, pio_flags = 0): */ PyObject *py_unpack_object_from_bv( til_t *ti, - PyObject *py_type, - PyObject *py_fields, - PyObject *py_bytes, + const bytevec_t &_type, + const bytevec_t &_fields, + const bytevec_t &bytes, int pio_flags = 0) { - PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyString_Check(py_type) || !PyWStringOrNone_Check(py_fields) || !PyString_Check(py_bytes) ) - { - PyErr_SetString(PyExc_ValueError, "Incorrect argument type!"); - return NULL; - } - - // To avoid release of 'type'/'fields' during Py_BEGIN|END_ALLOW_THREADS section. - borref_t py_type_ref(py_type); - borref_t py_fields_ref(py_fields); - - // Get type strings - const type_t *type = (const type_t *) PyString_AsString(py_type); - const p_list *fields = PyW_Fields(py_fields); - - // Make a byte vector - bytevec_t bytes; - bytes.resize(PyString_Size(py_bytes)); - memcpy(bytes.begin(), PyString_AsString(py_bytes), bytes.size()); - + const type_t *type = (const type_t *) _type.begin(); + const p_list *fields = (const p_list *) _fields.begin(); idc_value_t idc_obj; error_t err; Py_BEGIN_ALLOW_THREADS; @@ -301,17 +272,12 @@ def pack_object_to_idb(obj, ti, tp, fields, ea, pio_flags = 0): PyObject *py_pack_object_to_idb( PyObject *py_obj, til_t *ti, - PyObject *py_type, - PyObject *py_fields, + const bytevec_t &_type, + const bytevec_t &_fields, ea_t ea, int pio_flags = 0) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyString_Check(py_type) || !PyWStringOrNone_Check(py_fields) ) - { - PyErr_SetString(PyExc_ValueError, "Typestring must be passed!"); - return NULL; - } // Convert Python object to IDC object idc_value_t idc_obj; @@ -319,13 +285,8 @@ PyObject *py_pack_object_to_idb( if ( !pyvar_to_idcvar_or_error(py_obj_ref, &idc_obj) ) return NULL; - // To avoid release of 'type'/'fields' during Py_BEGIN|END_ALLOW_THREADS section. - borref_t py_type_ref(py_type); - borref_t py_fields_ref(py_fields); - - // Get type strings - const type_t *type = (const type_t *)PyString_AsString(py_type); - const p_list *fields = PyW_Fields(py_fields); + const type_t *type = (const type_t *) _type.begin(); + const p_list *fields = (const p_list *) _fields.begin(); // Pack // error_t err; @@ -360,17 +321,12 @@ def pack_object_to_bv(obj, ti, tp, fields, base_ea, pio_flags = 0): PyObject *py_pack_object_to_bv( PyObject *py_obj, til_t *ti, - PyObject *py_type, - PyObject *py_fields, + const bytevec_t &_type, + const bytevec_t &_fields, ea_t base_ea, int pio_flags=0) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyString_Check(py_type) || !PyWStringOrNone_Check(py_fields) ) - { - PyErr_SetString(PyExc_ValueError, "Typestring must be passed!"); - return NULL; - } // Convert Python object to IDC object idc_value_t idc_obj; @@ -378,13 +334,8 @@ PyObject *py_pack_object_to_bv( if ( !pyvar_to_idcvar_or_error(py_obj_ref, &idc_obj) ) return NULL; - // To avoid release of 'type'/'fields' during Py_BEGIN|END_ALLOW_THREADS section. - borref_t py_type_ref(py_type); - borref_t py_fields_ref(py_fields); - - // Get type strings - const type_t *type = (const type_t *)PyString_AsString(py_type); - const p_list *fields = PyW_Fields(py_fields); + const type_t *type = (const type_t *) _type.begin(); + const p_list *fields = (const p_list *) _fields.begin(); // Pack relobj_t bytes; @@ -402,7 +353,7 @@ PyObject *py_pack_object_to_bv( err = -1; Py_END_ALLOW_THREADS; if ( err == eOk ) - return Py_BuildValue("(is#)", 1, bytes.begin(), bytes.size()); + return Py_BuildValue("(i" PY_BV_BYTES "#)", 1, bytes.begin(), bytes.size()); else return Py_BuildValue("(ii)", 0, err); } @@ -433,7 +384,7 @@ PyObject *py_idc_get_type_raw(ea_t ea) ok = tif.serialize(&type, &fields, NULL, SUDT_FAST); PYW_GIL_CHECK_LOCKED_SCOPE(); if ( ok ) - return Py_BuildValue("(ss)", (char *)type.c_str(), (char *)fields.c_str()); + return Py_BuildValue("(" PY_BV_TYPE PY_BV_FIELDS ")", (char *)type.c_str(), (char *)fields.c_str()); else Py_RETURN_NONE; } @@ -446,7 +397,7 @@ PyObject *py_idc_get_local_type_raw(int ordinal) bool ok = get_numbered_type(NULL, ordinal, &type, &fields); PYW_GIL_CHECK_LOCKED_SCOPE(); if ( ok ) - return Py_BuildValue("(ss)", (char *)type, (char *)fields); + return Py_BuildValue("(" PY_BV_TYPE PY_BV_FIELDS ")", (char *)type, (char *)fields); Py_RETURN_NONE; } @@ -532,22 +483,16 @@ int idc_get_local_type(int ordinal, int flags, char *buf, size_t maxsize) } //------------------------------------------------------------------------- -PyObject *idc_print_type(PyObject *py_type, PyObject *py_fields, const char *name, int flags) +PyObject *idc_print_type( + const bytevec_t &_type, + const bytevec_t &_fields, + const char *name, + int flags) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyString_Check(py_type) || !PyWStringOrNone_Check(py_fields) ) - { - PyErr_SetString(PyExc_ValueError, "Typestring must be passed!"); - return NULL; - } - - // To avoid release of 'type'/'fields' during Py_BEGIN|END_ALLOW_THREADS section. - borref_t py_type_ref(py_type); - borref_t py_fields_ref(py_fields); - qstring res; - const type_t *type = (type_t *)PyString_AsString(py_type); - const p_list *fields = PyW_Fields(py_fields); + const type_t *type = (const type_t *) _type.begin(); + const p_list *fields = (const p_list *) _fields.begin(); bool ok; Py_BEGIN_ALLOW_THREADS; tinfo_t tif; @@ -555,7 +500,7 @@ PyObject *idc_print_type(PyObject *py_type, PyObject *py_fields, const char *nam && tif.print(&res, name, flags, 2, 40); Py_END_ALLOW_THREADS; if ( ok ) - return PyString_FromString(res.begin()); + return IDAPyStr_FromUTF8(res.begin()); else Py_RETURN_NONE; } @@ -615,10 +560,10 @@ PyObject *py_get_named_type(const til_t *til, const char *name, int ntf_flags) } while ( false ) ADD(PyInt_FromLong(long(code))); - ADD(PyString_FromString((const char *) type)); - ADD_OR_NONE(fields != NULL, PyString_FromString((const char *) fields)); - ADD_OR_NONE(cmt != NULL, PyString_FromString(cmt)); - ADD_OR_NONE(field_cmts != NULL, PyString_FromString((const char *) field_cmts)); + ADD(IDAPyBytes_FromMem((const char *) type)); + ADD_OR_NONE(fields != NULL, IDAPyBytes_FromMem((const char *) fields)); + ADD_OR_NONE(cmt != NULL, IDAPyStr_FromUTF8(cmt)); + ADD_OR_NONE(field_cmts != NULL, IDAPyStr_FromUTF8((const char *) field_cmts)); ADD(PyInt_FromLong(long(sclass))); if ( (ntf_flags & NTF_64BIT) != 0 ) ADD(PyLong_FromUnsignedLongLong(value)); @@ -636,12 +581,12 @@ PyObject *py_get_named_type64(const til_t *til, const char *name, int ntf_flags) } //------------------------------------------------------------------------- -int py_print_decls(text_sink_t &printer, til_t *til, PyObject *py_ordinals, uint32 flags) +PyObject *py_print_decls(text_sink_t &printer, til_t *til, PyObject *py_ordinals, uint32 flags) { if ( !PyList_Check(py_ordinals) ) { PyErr_SetString(PyExc_ValueError, "'ordinals' must be a list"); - return 0; + return NULL; } Py_ssize_t nords = PyList_Size(py_ordinals); @@ -650,38 +595,17 @@ int py_print_decls(text_sink_t &printer, til_t *til, PyObject *py_ordinals, uint for ( Py_ssize_t i = 0; i < nords; ++i ) { borref_t item(PyList_GetItem(py_ordinals, i)); - if ( item == NULL - || (!PyInt_Check(item.o) && !PyLong_Check(item.o)) ) + if ( item == NULL || !IDAPyIntOrLong_Check(item.o) ) { qstring msg; msg.sprnt("ordinals[%d] is not a valid value", int(i)); PyErr_SetString(PyExc_ValueError, msg.begin()); - return 0; + return NULL; } - uint32 ord = PyInt_Check(item.o) ? PyInt_AsLong(item.o) : PyLong_AsLong(item.o); + uint32 ord = IDAPyIntOrLong_AsLong(item.o); ordinals.push_back(ord); } - return print_decls(printer, til, ordinals.empty() ? NULL : &ordinals, flags); -} - -//------------------------------------------------------------------------- -til_t *py_load_til(const char *name, const char *tildir) -{ - qstring errbuf; - til_t *res = load_til(name, &errbuf, tildir); - if ( res == NULL ) - PyErr_SetString(PyExc_RuntimeError, errbuf.c_str()); - return res; -} - -//------------------------------------------------------------------------- -til_t *py_load_til_header(const char *tildir, const char *name) -{ - qstring errbuf; - til_t *res = load_til_header(tildir, name, &errbuf); - if ( res == NULL ) - PyErr_SetString(PyExc_RuntimeError, errbuf.c_str()); - return res; + return IDAPyInt_FromLong(print_decls(printer, til, ordinals.empty() ? NULL : &ordinals, flags)); } #ifdef BC695 @@ -707,7 +631,7 @@ static PyObject *py_get_numbered_type(const til_t *til, uint32 ordinal) const p_list *fieldcmts; sclass_t sclass; if ( get_numbered_type(til, ordinal, &type, &fields, &cmt, &fieldcmts, &sclass) ) - return Py_BuildValue("(ssssi)", type, fields, cmt, fieldcmts, sclass); + return Py_BuildValue("(" PY_BV_TYPE PY_BV_FIELDS "ssi)", type, fields, cmt, fieldcmts, sclass); else Py_RETURN_NONE; } @@ -715,12 +639,6 @@ static PyObject *py_get_numbered_type(const til_t *til, uint32 ordinal) // // -//------------------------------------------------------------------------- -inline const p_list * PyW_Fields(PyObject *tp) -{ - return tp == Py_None ? NULL : (const p_list *) PyString_AsString(tp); -} - //------------------------------------------------------------------------- // tuple(type_str, fields_str, field_cmts) on success static PyObject *py_tinfo_t_serialize( @@ -739,7 +657,7 @@ static PyObject *py_tinfo_t_serialize( if ( (Thing).empty() ) \ Py_INCREF(Py_None); \ else \ - o = PyString_FromString((const char *) (Thing).begin()); \ + o = IDAPyBytes_FromMem((const char *) (Thing).begin()); \ PyTuple_SetItem(tuple, ctr, o); \ ++ctr; \ } while ( false ) diff --git a/pywraps/py_typeinf.py b/pywraps/py_typeinf.py index 40b5556..0fc85ac 100644 --- a/pywraps/py_typeinf.py +++ b/pywraps/py_typeinf.py @@ -18,7 +18,7 @@ def add_til(name, flags=0): return _ida_typeinf.add_til(name, flags) add_til2=add_til def apply_decl(arg0, arg1, arg2=None, arg3=0): - if type(arg0) in [int, long]: # old apply_cdecl() + if type(arg0) in ida_idaapi.integer_types: # old apply_cdecl() return _ida_typeinf.apply_cdecl(cvar.idati, arg0, arg1, 0) else: assert(arg2 is not None) diff --git a/pywraps/py_xref.hpp b/pywraps/py_xref.hpp index cfbc175..07f4a8d 100644 --- a/pywraps/py_xref.hpp +++ b/pywraps/py_xref.hpp @@ -49,11 +49,11 @@ def calc_switch_cases(ea, si): The returned information can be used as follows: - for idx in xrange(len(results.cases)): + for idx in range(len(results.cases)): cur_case = results.cases[idx] - for cidx in xrange(len(cur_case)): - print "case: %d" % cur_case[cidx] - print " goto 0x%x" % results.targets[idx] + for cidx in range(len(cur_case)): + print("case: %d" % cur_case[cidx]) + print(" goto 0x%x" % results.targets[idx]) @param ea: address of the 'indirect jump' instruction @param si: switch information diff --git a/pywraps/pywraps.vcproj b/pywraps/pywraps.vcproj index a8b52e8..82f0e20 100644 --- a/pywraps/pywraps.vcproj +++ b/pywraps/pywraps.vcproj @@ -1822,18 +1822,6 @@ - - - - - - diff --git a/pywraps/sidc.py b/pywraps/sidc.py index 8c65e6a..383d0ce 100644 --- a/pywraps/sidc.py +++ b/pywraps/sidc.py @@ -58,9 +58,9 @@ o_idpspec5 = 13 # Processor specific type dt_byte = 0 # 8 bit dt_word = 1 # 16 bit dt_dword = 2 # 32 bit -dt_float = 3 # 4 byte -dt_double = 4 # 8 byte -dt_tbyte = 5 # variable size (ph.tbyte_size) +dt_float = 3 # 4 byte floating point +dt_double = 4 # 8 byte floating point +dt_tbyte = 5 # variable size (ph.tbyte_size) floating point dt_packreal = 6 # packed real format for mc68040 dt_qword = 7 # 64 bit dt_byte16 = 8 # 128 bit @@ -73,6 +73,7 @@ dt_unicode = 14 # pointer to unicode string dt_ldbl = 15 # long double (which may be different from tbyte) dt_byte32 = 16 # 256 bit dt_byte64 = 17 # 512 bit +dt_half = 18 # 2 byte floating point # # op_t.flags @@ -276,7 +277,7 @@ class insn_t(object): self.n = noperands # create operands - for i in xrange(0, noperands): + for i in range(0, noperands): op = op_t() op.n = i self.ops.append(op) diff --git a/pywraps/swig_stub.cpp b/pywraps/swig_stub.cpp deleted file mode 100644 index e44b86b..0000000 --- a/pywraps/swig_stub.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "swig_stub.h" - -PyObject *SWIG_NewPointerObj(void *ptr, void *type, int flags) -{ - return PyCObject_FromVoidPtr(ptr, NULL); -} diff --git a/pywraps/swig_stub.h b/pywraps/swig_stub.h deleted file mode 100644 index 4752aeb..0000000 --- a/pywraps/swig_stub.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef __SWIG_STUB__ -#define __SWIG_STUB__ - -#include - -#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a)) - -PyObject *SWIG_NewPointerObj(void *ptr, void *type, int flags); - -namespace Swig -{ - class DirectorException - { - public: - const char *getMessage() const - { - return "NULL"; - } - }; -} - -// Some fake SWIG types -#define SWIGTYPE_p_member_t NULL - -#endif diff --git a/release_api_contents.txt b/release_api_contents2.txt similarity index 99% rename from release_api_contents.txt rename to release_api_contents2.txt index fbf68d6..83cdb30 100644 --- a/release_api_contents.txt +++ b/release_api_contents2.txt @@ -202,6 +202,7 @@ 'IDP_Hooks_ev_get_autocmt', 'IDP_Hooks_ev_get_bg_color', 'IDP_Hooks_ev_get_cc_regs', + 'IDP_Hooks_ev_get_code16_mode', 'IDP_Hooks_ev_get_dbr_opnum', 'IDP_Hooks_ev_get_default_enum_size', 'IDP_Hooks_ev_get_frame_retsize', @@ -255,6 +256,7 @@ 'IDP_Hooks_ev_realcvt', 'IDP_Hooks_ev_rename', 'IDP_Hooks_ev_replaying_undo', + 'IDP_Hooks_ev_set_code16_mode', 'IDP_Hooks_ev_set_idp_options', 'IDP_Hooks_ev_set_proc_options', 'IDP_Hooks_ev_setup_til', @@ -373,11 +375,11 @@ 'action_ctx_base_t_cur_value_set', 'action_ctx_base_t_focus_get', 'action_ctx_base_t_focus_set', + 'action_ctx_base_t_graph_selection_get', + 'action_ctx_base_t_graph_selection_set', 'action_ctx_base_t_has_flag', 'action_ctx_base_t_regname_get', 'action_ctx_base_t_regname_set', - 'action_ctx_base_t_reserved_get', - 'action_ctx_base_t_reserved_set', 'action_ctx_base_t_reset', 'action_ctx_base_t_widget_get', 'action_ctx_base_t_widget_set', @@ -528,6 +530,8 @@ 'argloc_t_is_rrel', 'argloc_t_is_scattered', 'argloc_t_is_stkoff', + 'argloc_t_justify_reg_high', + 'argloc_t_justify_stkoff_right', 'argloc_t_reg1', 'argloc_t_reg2', 'argloc_t_regoff', @@ -1418,6 +1422,23 @@ 'ccases_t___lt__', 'ccases_t___ne__', 'ccases_t_compare', + 'cdg_insn_iterator_t_dslot_get', + 'cdg_insn_iterator_t_dslot_insn_get', + 'cdg_insn_iterator_t_dslot_insn_set', + 'cdg_insn_iterator_t_dslot_set', + 'cdg_insn_iterator_t_dslot_with_xrefs', + 'cdg_insn_iterator_t_ea_get', + 'cdg_insn_iterator_t_ea_set', + 'cdg_insn_iterator_t_end_get', + 'cdg_insn_iterator_t_end_set', + 'cdg_insn_iterator_t_has_dslot', + 'cdg_insn_iterator_t_is_likely_dslot_get', + 'cdg_insn_iterator_t_is_likely_dslot_set', + 'cdg_insn_iterator_t_is_separate_dslot_get', + 'cdg_insn_iterator_t_is_separate_dslot_set', + 'cdg_insn_iterator_t_next', + 'cdg_insn_iterator_t_ok', + 'cdg_insn_iterator_t_start', 'cdo_t___eq__', 'cdo_t___ge__', 'cdo_t___gt__', @@ -1600,6 +1621,7 @@ 'cfunc_t_user_unions_set', 'cfunc_t_verify', 'cfuncptr_t___deref__', + 'cfuncptr_t___ptrval__', 'cfuncptr_t___ref__', 'cfuncptr_t___str__', 'cfuncptr_t_argidx_get', @@ -1740,6 +1762,7 @@ 'choose_get_widget', 'choose_idasgn', 'choose_local_tinfo', + 'choose_local_tinfo_and_delta', 'choose_name', 'choose_named_type', 'choose_refresh', @@ -1959,6 +1982,8 @@ 'codegen_t_gen_micro', 'codegen_t_ignore_micro_get', 'codegen_t_ignore_micro_set', + 'codegen_t_ii_get', + 'codegen_t_ii_set', 'codegen_t_insn_get', 'codegen_t_insn_set', 'codegen_t_load_operand', @@ -2389,6 +2414,7 @@ 'delete_cblock_t', 'delete_ccase_t', 'delete_ccases_t', + 'delete_cdg_insn_iterator_t', 'delete_cdo_t', 'delete_ceinsn_t', 'delete_cexpr_t', @@ -3234,13 +3260,13 @@ 'func_item_iterator_decode_prev_insn', 'func_item_iterator_next', 'func_item_iterator_prev', + 'func_item_iterator_t___next__', 'func_item_iterator_t_chunk', 'func_item_iterator_t_current', 'func_item_iterator_t_decode_preceding_insn', 'func_item_iterator_t_decode_prev_insn', 'func_item_iterator_t_first', 'func_item_iterator_t_last', - 'func_item_iterator_t_next', 'func_item_iterator_t_next_addr', 'func_item_iterator_t_next_code', 'func_item_iterator_t_next_data', @@ -3255,9 +3281,9 @@ 'func_item_iterator_t_set', 'func_item_iterator_t_set_range', 'func_parent_iterator_set', + 'func_parent_iterator_t___next__', 'func_parent_iterator_t_first', 'func_parent_iterator_t_last', - 'func_parent_iterator_t_next', 'func_parent_iterator_t_parent', 'func_parent_iterator_t_prev', 'func_parent_iterator_t_reset_fnt', @@ -3312,11 +3338,11 @@ 'func_t_tails_set', 'func_tail_iterator_set', 'func_tail_iterator_set_ea', + 'func_tail_iterator_t___next__', 'func_tail_iterator_t_chunk', 'func_tail_iterator_t_first', 'func_tail_iterator_t_last', 'func_tail_iterator_t_main', - 'func_tail_iterator_t_next', 'func_tail_iterator_t_prev', 'func_tail_iterator_t_set', 'func_tail_iterator_t_set_ea', @@ -3478,6 +3504,7 @@ 'get_compiler_abbr', 'get_compiler_name', 'get_compilers', + 'get_cp_validity', 'get_ctype_name', 'get_curline', 'get_current_idasgn', @@ -3495,6 +3522,7 @@ 'get_custom_data_types', 'get_custom_refinfo', 'get_custom_viewer_curline', + 'get_custom_viewer_location', 'get_custom_viewer_place', 'get_data_elsize', 'get_data_value', @@ -3545,6 +3573,7 @@ 'get_enum_member_serial', 'get_enum_member_value', 'get_enum_name', + 'get_enum_name2', 'get_enum_qty', 'get_enum_size', 'get_enum_type_ordinal', @@ -4209,6 +4238,7 @@ 'idc_parse_types', 'idc_print_type', 'idc_set_local_type', + 'idc_value_t___get_e', 'idc_value_t__create_empty_string', 'idc_value_t_c_str', 'idc_value_t_clear', @@ -4411,6 +4441,7 @@ 'inf_handle_rtti', 'inf_hide_comments', 'inf_hide_libfuncs', + 'inf_huge_arg_align', 'inf_inc_database_change_count', 'inf_is_32bit', 'inf_is_64bit', @@ -4443,6 +4474,7 @@ 'inf_prefix_show_funcoff', 'inf_prefix_show_segaddr', 'inf_prefix_show_stack', + 'inf_prefix_truncate_opcode_bytes', 'inf_propagate_regargs', 'inf_propagate_stkargs', 'inf_readonly_idb', @@ -4520,6 +4552,7 @@ 'inf_set_hide_comments', 'inf_set_hide_libfuncs', 'inf_set_highoff', + 'inf_set_huge_arg_align', 'inf_set_indent', 'inf_set_kernel_mode', 'inf_set_lenxref', @@ -4560,6 +4593,7 @@ 'inf_set_prefix_show_funcoff', 'inf_set_prefix_show_segaddr', 'inf_set_prefix_show_stack', + 'inf_set_prefix_truncate_opcode_bytes', 'inf_set_privrange', 'inf_set_privrange_end_ea', 'inf_set_privrange_start_ea', @@ -4839,6 +4873,7 @@ 'is_float', 'is_float0', 'is_float1', + 'is_floating_dtype', 'is_flow', 'is_fltnum', 'is_forced_operand', @@ -5106,7 +5141,7 @@ 'loader_input_t_close', 'loader_input_t_file2base', 'loader_input_t_filename', - 'loader_input_t_from_cobject', + 'loader_input_t_from_capsule', 'loader_input_t_from_fp', 'loader_input_t_from_linput', 'loader_input_t_get_char', @@ -5265,6 +5300,7 @@ 'lvar_saved_info_t___ne__', 'lvar_saved_info_t_clear_keep', 'lvar_saved_info_t_clr_forced_lvar', + 'lvar_saved_info_t_clr_nomap_lvar', 'lvar_saved_info_t_clr_noptr_lvar', 'lvar_saved_info_t_cmt_get', 'lvar_saved_info_t_cmt_set', @@ -5273,6 +5309,7 @@ 'lvar_saved_info_t_has_info', 'lvar_saved_info_t_is_forced_lvar', 'lvar_saved_info_t_is_kept', + 'lvar_saved_info_t_is_nomap_lvar', 'lvar_saved_info_t_is_noptr_lvar', 'lvar_saved_info_t_ll_get', 'lvar_saved_info_t_ll_set', @@ -5280,6 +5317,7 @@ 'lvar_saved_info_t_name_set', 'lvar_saved_info_t_set_forced_lvar', 'lvar_saved_info_t_set_keep', + 'lvar_saved_info_t_set_nomap_lvar', 'lvar_saved_info_t_set_noptr_lvar', 'lvar_saved_info_t_size_get', 'lvar_saved_info_t_size_set', @@ -5329,6 +5367,7 @@ 'lvar_t_append_list', 'lvar_t_clear_used', 'lvar_t_clr_arg_var', + 'lvar_t_clr_automapped', 'lvar_t_clr_dummy_arg', 'lvar_t_clr_fake_var', 'lvar_t_clr_floating_var', @@ -5359,6 +5398,7 @@ 'lvar_t_has_user_type', 'lvar_t_is_aliasable', 'lvar_t_is_arg_var', + 'lvar_t_is_automapped', 'lvar_t_is_dummy_arg', 'lvar_t_is_fake_var', 'lvar_t_is_floating_var', @@ -5375,6 +5415,7 @@ 'lvar_t_name_get', 'lvar_t_name_set', 'lvar_t_set_arg_var', + 'lvar_t_set_automapped', 'lvar_t_set_dummy_arg', 'lvar_t_set_fake_var', 'lvar_t_set_final_lvar_type', @@ -5542,7 +5583,6 @@ 'mbl_array_t_graph_insns', 'mbl_array_t_has_bad_sp', 'mbl_array_t_has_over_chains', - 'mbl_array_t_has_overvars', 'mbl_array_t_has_passregs', 'mbl_array_t_idaloc2vd', 'mbl_array_t_idb_node_get', @@ -5815,6 +5855,8 @@ 'mcallinfo_t_dstr', 'mcallinfo_t_flags_get', 'mcallinfo_t_flags_set', + 'mcallinfo_t_fti_attrs_get', + 'mcallinfo_t_fti_attrs_set', 'mcallinfo_t_get_type', 'mcallinfo_t_is_vararg', 'mcallinfo_t_lexcompare', @@ -6018,6 +6060,7 @@ 'minsn_t_is_ignlowsrc', 'minsn_t_is_inverted_jx', 'minsn_t_is_like_move', + 'minsn_t_is_mbarrier', 'minsn_t_is_memcpy', 'minsn_t_is_memset', 'minsn_t_is_mov', @@ -6054,6 +6097,7 @@ 'minsn_t_set_fpinsn', 'minsn_t_set_ignlowsrc', 'minsn_t_set_inverted_jx', + 'minsn_t_set_mbarrier', 'minsn_t_set_multimov', 'minsn_t_set_noret_icall', 'minsn_t_set_optional', @@ -6122,6 +6166,7 @@ 'mnumber_t_update_value', 'mnumber_t_value_get', 'mnumber_t_value_set', + 'modify_user_lvar_info', 'modify_user_lvars', 'modinfo_t_base_get', 'modinfo_t_base_set', @@ -6205,6 +6250,7 @@ 'mop_t_create_from_vdloc', 'mop_t_double_size', 'mop_t_dstr', + 'mop_t_empty', 'mop_t_equal_mops', 'mop_t_erase', 'mop_t_erase_but_keep_size', @@ -6217,6 +6263,7 @@ 'mop_t_get_stkvar', 'mop_t_has_side_effects', 'mop_t_is01', + 'mop_t_is_arglist', 'mop_t_is_bit_reg', 'mop_t_is_bit_reg__SWIG_0', 'mop_t_is_bit_reg__SWIG_1', @@ -6611,6 +6658,9 @@ 'new_cblock_t', 'new_ccase_t', 'new_ccases_t', + 'new_cdg_insn_iterator_t', + 'new_cdg_insn_iterator_t__SWIG_0', + 'new_cdg_insn_iterator_t__SWIG_1', 'new_cdo_t', 'new_ceinsn_t', 'new_cexpr_t', @@ -7505,6 +7555,7 @@ 'place_t_clone', 'place_t_compare', 'place_t_copyfrom', + 'place_t_deserialize', 'place_t_ending', 'place_t_enter', 'place_t_generate', @@ -7517,6 +7568,7 @@ 'place_t_next', 'place_t_prev', 'place_t_rebase', + 'place_t_serialize', 'place_t_toea', 'place_t_touval', 'plan_and_wait', @@ -7616,11 +7668,17 @@ 'print_tinfo', 'print_type', 'print_vdloc', + 'printop_t_aflags_get', + 'printop_t_aflags_set', + 'printop_t_features_get', + 'printop_t_features_set', 'printop_t_flags_get', 'printop_t_flags_set', 'printop_t_get_ti', - 'printop_t_is_ti_valid_get', - 'printop_t_is_ti_valid_set', + 'printop_t_is_aflags_initialized', + 'printop_t_is_ti_initialized', + 'printop_t_set_aflags_initialized', + 'printop_t_set_ti_initialized', 'printop_t_suspop_get', 'printop_t_suspop_set', 'printop_t_ti_get', @@ -7701,15 +7759,9 @@ 'pyg_select_node', 'pyg_show', 'pygc_create_groups', - 'pygc_del_nodes_infos', 'pygc_delete_groups', - 'pygc_get_current_renderer_type', - 'pygc_get_node_info', 'pygc_refresh', - 'pygc_set_current_renderer_type', 'pygc_set_groups_visibility', - 'pygc_set_node_info', - 'pygc_set_nodes_infos', 'pyidag_bind', 'pyidag_unbind', 'pyscv_add_line', @@ -7744,7 +7796,7 @@ 'qfile_t_close', 'qfile_t_filename', 'qfile_t_flush', - 'qfile_t_from_cobject', + 'qfile_t_from_capsule', 'qfile_t_from_fp', 'qfile_t_get_char', 'qfile_t_get_fp', @@ -7811,8 +7863,8 @@ 'qlist_cinsn_t_insert__SWIG_3', 'qlist_cinsn_t_iterator___eq__', 'qlist_cinsn_t_iterator___ne__', + 'qlist_cinsn_t_iterator___next__', 'qlist_cinsn_t_iterator_cur_get', - 'qlist_cinsn_t_iterator_next', 'qlist_cinsn_t_pop_back', 'qlist_cinsn_t_pop_front', 'qlist_cinsn_t_push_back', @@ -8890,7 +8942,6 @@ 'show_auto', 'show_name', 'show_wait_box', - 'show_wait_box__varargs__', 'simd_info_t_match_pattern', 'simd_info_t_memtype_get', 'simd_info_t_memtype_set', @@ -9179,6 +9230,7 @@ 'switch_info_t_regdtype_set', 'switch_info_t_regnum_get', 'switch_info_t_regnum_set', + 'switch_info_t_set_elbase', 'switch_info_t_set_expr', 'switch_info_t_set_jtable_element_size', 'switch_info_t_set_jtable_size', @@ -10423,4 +10475,4 @@ 'xreflist_t_swap', 'xreflist_t_truncate', 'yword_flag', - 'zword_flag']} + 'zword_flag']} \ No newline at end of file diff --git a/release_api_contents3.txt b/release_api_contents3.txt new file mode 100644 index 0000000..e2f1d80 --- /dev/null +++ b/release_api_contents3.txt @@ -0,0 +1,10482 @@ +{'functions': ['AssembleLine', + 'DBG_Hooks_dbg_bpt', + 'DBG_Hooks_dbg_bpt_changed', + 'DBG_Hooks_dbg_exception', + 'DBG_Hooks_dbg_finished_loading_bpts', + 'DBG_Hooks_dbg_information', + 'DBG_Hooks_dbg_library_load', + 'DBG_Hooks_dbg_library_unload', + 'DBG_Hooks_dbg_process_attach', + 'DBG_Hooks_dbg_process_detach', + 'DBG_Hooks_dbg_process_exit', + 'DBG_Hooks_dbg_process_start', + 'DBG_Hooks_dbg_request_error', + 'DBG_Hooks_dbg_run_to', + 'DBG_Hooks_dbg_started_loading_bpts', + 'DBG_Hooks_dbg_step_into', + 'DBG_Hooks_dbg_step_over', + 'DBG_Hooks_dbg_step_until_ret', + 'DBG_Hooks_dbg_suspend_process', + 'DBG_Hooks_dbg_thread_exit', + 'DBG_Hooks_dbg_thread_start', + 'DBG_Hooks_dbg_trace', + 'DBG_Hooks_hook', + 'DBG_Hooks_unhook', + 'Hexrays_Hooks_close_pseudocode', + 'Hexrays_Hooks_cmt_changed', + 'Hexrays_Hooks_combine', + 'Hexrays_Hooks_create_hint', + 'Hexrays_Hooks_curpos', + 'Hexrays_Hooks_double_click', + 'Hexrays_Hooks_flowchart', + 'Hexrays_Hooks_func_printed', + 'Hexrays_Hooks_glbopt', + 'Hexrays_Hooks_hook', + 'Hexrays_Hooks_interr', + 'Hexrays_Hooks_keyboard', + 'Hexrays_Hooks_locopt', + 'Hexrays_Hooks_lvar_cmt_changed', + 'Hexrays_Hooks_lvar_mapping_changed', + 'Hexrays_Hooks_lvar_name_changed', + 'Hexrays_Hooks_lvar_type_changed', + 'Hexrays_Hooks_maturity', + 'Hexrays_Hooks_microcode', + 'Hexrays_Hooks_open_pseudocode', + 'Hexrays_Hooks_populating_popup', + 'Hexrays_Hooks_prealloc', + 'Hexrays_Hooks_preoptimized', + 'Hexrays_Hooks_print_func', + 'Hexrays_Hooks_prolog', + 'Hexrays_Hooks_refresh_pseudocode', + 'Hexrays_Hooks_resolve_stkaddrs', + 'Hexrays_Hooks_right_click', + 'Hexrays_Hooks_stkpnts', + 'Hexrays_Hooks_structural', + 'Hexrays_Hooks_switch_pseudocode', + 'Hexrays_Hooks_text_ready', + 'Hexrays_Hooks_unhook', + 'IDB_Hooks_allsegs_moved', + 'IDB_Hooks_auto_empty', + 'IDB_Hooks_auto_empty_finally', + 'IDB_Hooks_bookmark_changed', + 'IDB_Hooks_byte_patched', + 'IDB_Hooks_callee_addr_changed', + 'IDB_Hooks_changing_cmt', + 'IDB_Hooks_changing_enum_bf', + 'IDB_Hooks_changing_enum_cmt', + 'IDB_Hooks_changing_op_ti', + 'IDB_Hooks_changing_op_type', + 'IDB_Hooks_changing_range_cmt', + 'IDB_Hooks_changing_segm_class', + 'IDB_Hooks_changing_segm_end', + 'IDB_Hooks_changing_segm_name', + 'IDB_Hooks_changing_segm_start', + 'IDB_Hooks_changing_struc_align', + 'IDB_Hooks_changing_struc_cmt', + 'IDB_Hooks_changing_struc_member', + 'IDB_Hooks_changing_ti', + 'IDB_Hooks_closebase', + 'IDB_Hooks_cmt_changed', + 'IDB_Hooks_compiler_changed', + 'IDB_Hooks_deleting_enum', + 'IDB_Hooks_deleting_enum_member', + 'IDB_Hooks_deleting_func', + 'IDB_Hooks_deleting_func_tail', + 'IDB_Hooks_deleting_segm', + 'IDB_Hooks_deleting_struc', + 'IDB_Hooks_deleting_struc_member', + 'IDB_Hooks_deleting_tryblks', + 'IDB_Hooks_destroyed_items', + 'IDB_Hooks_determined_main', + 'IDB_Hooks_enum_bf_changed', + 'IDB_Hooks_enum_cmt_changed', + 'IDB_Hooks_enum_created', + 'IDB_Hooks_enum_deleted', + 'IDB_Hooks_enum_member_created', + 'IDB_Hooks_enum_member_deleted', + 'IDB_Hooks_enum_renamed', + 'IDB_Hooks_expanding_struc', + 'IDB_Hooks_extlang_changed', + 'IDB_Hooks_extra_cmt_changed', + 'IDB_Hooks_flow_chart_created', + 'IDB_Hooks_frame_deleted', + 'IDB_Hooks_func_added', + 'IDB_Hooks_func_noret_changed', + 'IDB_Hooks_func_tail_appended', + 'IDB_Hooks_func_tail_deleted', + 'IDB_Hooks_func_updated', + 'IDB_Hooks_hook', + 'IDB_Hooks_idasgn_loaded', + 'IDB_Hooks_item_color_changed', + 'IDB_Hooks_kernel_config_loaded', + 'IDB_Hooks_loader_finished', + 'IDB_Hooks_local_types_changed', + 'IDB_Hooks_make_code', + 'IDB_Hooks_make_data', + 'IDB_Hooks_op_ti_changed', + 'IDB_Hooks_op_type_changed', + 'IDB_Hooks_range_cmt_changed', + 'IDB_Hooks_renamed', + 'IDB_Hooks_renaming_enum', + 'IDB_Hooks_renaming_struc', + 'IDB_Hooks_renaming_struc_member', + 'IDB_Hooks_savebase', + 'IDB_Hooks_segm_added', + 'IDB_Hooks_segm_attrs_updated', + 'IDB_Hooks_segm_class_changed', + 'IDB_Hooks_segm_deleted', + 'IDB_Hooks_segm_end_changed', + 'IDB_Hooks_segm_moved', + 'IDB_Hooks_segm_name_changed', + 'IDB_Hooks_segm_start_changed', + 'IDB_Hooks_set_func_end', + 'IDB_Hooks_set_func_start', + 'IDB_Hooks_sgr_changed', + 'IDB_Hooks_sgr_deleted', + 'IDB_Hooks_stkpnts_changed', + 'IDB_Hooks_struc_align_changed', + 'IDB_Hooks_struc_cmt_changed', + 'IDB_Hooks_struc_created', + 'IDB_Hooks_struc_deleted', + 'IDB_Hooks_struc_expanded', + 'IDB_Hooks_struc_member_changed', + 'IDB_Hooks_struc_member_created', + 'IDB_Hooks_struc_member_deleted', + 'IDB_Hooks_struc_member_renamed', + 'IDB_Hooks_struc_renamed', + 'IDB_Hooks_tail_owner_changed', + 'IDB_Hooks_thunk_func_created', + 'IDB_Hooks_ti_changed', + 'IDB_Hooks_tryblks_updated', + 'IDB_Hooks_unhook', + 'IDB_Hooks_updating_tryblks', + 'IDB_Hooks_upgraded', + 'IDP_Hooks_ev_add_cref', + 'IDP_Hooks_ev_add_dref', + 'IDP_Hooks_ev_adjust_argloc', + 'IDP_Hooks_ev_adjust_libfunc_ea', + 'IDP_Hooks_ev_adjust_refinfo', + 'IDP_Hooks_ev_ana_insn', + 'IDP_Hooks_ev_analyze_prolog', + 'IDP_Hooks_ev_arg_addrs_ready', + 'IDP_Hooks_ev_assemble', + 'IDP_Hooks_ev_auto_queue_empty', + 'IDP_Hooks_ev_calc_arglocs', + 'IDP_Hooks_ev_calc_cdecl_purged_bytes', + 'IDP_Hooks_ev_calc_next_eas', + 'IDP_Hooks_ev_calc_purged_bytes', + 'IDP_Hooks_ev_calc_retloc', + 'IDP_Hooks_ev_calc_spdelta', + 'IDP_Hooks_ev_calc_step_over', + 'IDP_Hooks_ev_calc_switch_cases', + 'IDP_Hooks_ev_calc_varglocs', + 'IDP_Hooks_ev_calcrel', + 'IDP_Hooks_ev_can_have_type', + 'IDP_Hooks_ev_clean_tbit', + 'IDP_Hooks_ev_cmp_operands', + 'IDP_Hooks_ev_coagulate', + 'IDP_Hooks_ev_coagulate_dref', + 'IDP_Hooks_ev_create_flat_group', + 'IDP_Hooks_ev_create_func_frame', + 'IDP_Hooks_ev_create_switch_xrefs', + 'IDP_Hooks_ev_creating_segm', + 'IDP_Hooks_ev_decorate_name', + 'IDP_Hooks_ev_del_cref', + 'IDP_Hooks_ev_del_dref', + 'IDP_Hooks_ev_delay_slot_insn', + 'IDP_Hooks_ev_demangle_name', + 'IDP_Hooks_ev_emu_insn', + 'IDP_Hooks_ev_endbinary', + 'IDP_Hooks_ev_ending_undo', + 'IDP_Hooks_ev_equal_reglocs', + 'IDP_Hooks_ev_extract_address', + 'IDP_Hooks_ev_find_op_value', + 'IDP_Hooks_ev_find_reg_value', + 'IDP_Hooks_ev_func_bounds', + 'IDP_Hooks_ev_gen_asm_or_lst', + 'IDP_Hooks_ev_gen_map_file', + 'IDP_Hooks_ev_gen_regvar_def', + 'IDP_Hooks_ev_gen_src_file_lnnum', + 'IDP_Hooks_ev_gen_stkvar_def', + 'IDP_Hooks_ev_get_abi_info', + 'IDP_Hooks_ev_get_autocmt', + 'IDP_Hooks_ev_get_bg_color', + 'IDP_Hooks_ev_get_cc_regs', + 'IDP_Hooks_ev_get_code16_mode', + 'IDP_Hooks_ev_get_dbr_opnum', + 'IDP_Hooks_ev_get_default_enum_size', + 'IDP_Hooks_ev_get_frame_retsize', + 'IDP_Hooks_ev_get_macro_insn_head', + 'IDP_Hooks_ev_get_operand_string', + 'IDP_Hooks_ev_get_reg_info', + 'IDP_Hooks_ev_get_reg_name', + 'IDP_Hooks_ev_get_simd_types', + 'IDP_Hooks_ev_get_stkarg_offset', + 'IDP_Hooks_ev_get_stkvar_scale_factor', + 'IDP_Hooks_ev_getreg', + 'IDP_Hooks_ev_init', + 'IDP_Hooks_ev_insn_reads_tbit', + 'IDP_Hooks_ev_is_align_insn', + 'IDP_Hooks_ev_is_alloca_probe', + 'IDP_Hooks_ev_is_basic_block_end', + 'IDP_Hooks_ev_is_call_insn', + 'IDP_Hooks_ev_is_cond_insn', + 'IDP_Hooks_ev_is_far_jump', + 'IDP_Hooks_ev_is_indirect_jump', + 'IDP_Hooks_ev_is_insn_table_jump', + 'IDP_Hooks_ev_is_jump_func', + 'IDP_Hooks_ev_is_ret_insn', + 'IDP_Hooks_ev_is_sane_insn', + 'IDP_Hooks_ev_is_sp_based', + 'IDP_Hooks_ev_is_switch', + 'IDP_Hooks_ev_last_cb_before_loader', + 'IDP_Hooks_ev_loader', + 'IDP_Hooks_ev_lower_func_type', + 'IDP_Hooks_ev_max_ptr_size', + 'IDP_Hooks_ev_may_be_func', + 'IDP_Hooks_ev_may_show_sreg', + 'IDP_Hooks_ev_moving_segm', + 'IDP_Hooks_ev_newasm', + 'IDP_Hooks_ev_newbinary', + 'IDP_Hooks_ev_newfile', + 'IDP_Hooks_ev_newprc', + 'IDP_Hooks_ev_next_exec_insn', + 'IDP_Hooks_ev_oldfile', + 'IDP_Hooks_ev_out_assumes', + 'IDP_Hooks_ev_out_data', + 'IDP_Hooks_ev_out_footer', + 'IDP_Hooks_ev_out_header', + 'IDP_Hooks_ev_out_insn', + 'IDP_Hooks_ev_out_label', + 'IDP_Hooks_ev_out_mnem', + 'IDP_Hooks_ev_out_operand', + 'IDP_Hooks_ev_out_segend', + 'IDP_Hooks_ev_out_segstart', + 'IDP_Hooks_ev_out_special_item', + 'IDP_Hooks_ev_realcvt', + 'IDP_Hooks_ev_rename', + 'IDP_Hooks_ev_replaying_undo', + 'IDP_Hooks_ev_set_code16_mode', + 'IDP_Hooks_ev_set_idp_options', + 'IDP_Hooks_ev_set_proc_options', + 'IDP_Hooks_ev_setup_til', + 'IDP_Hooks_ev_shadow_args_size', + 'IDP_Hooks_ev_str2reg', + 'IDP_Hooks_ev_term', + 'IDP_Hooks_ev_treat_hindering_item', + 'IDP_Hooks_ev_undefine', + 'IDP_Hooks_ev_use_arg_types', + 'IDP_Hooks_ev_use_regarg_type', + 'IDP_Hooks_ev_use_stkarg_type', + 'IDP_Hooks_ev_validate_flirt_func', + 'IDP_Hooks_ev_verify_noreturn', + 'IDP_Hooks_ev_verify_sp', + 'IDP_Hooks_hook', + 'IDP_Hooks_unhook', + 'TPointDouble___eq__', + 'TPointDouble___ne__', + 'TPointDouble_add', + 'TPointDouble_negate', + 'TPointDouble_sub', + 'TPointDouble_x_get', + 'TPointDouble_x_set', + 'TPointDouble_y_get', + 'TPointDouble_y_set', + 'TWidget__from_ptrval__', + 'UI_Hooks_create_desktop_widget', + 'UI_Hooks_current_widget_changed', + 'UI_Hooks_database_inited', + 'UI_Hooks_debugger_menu_change', + 'UI_Hooks_finish_populating_widget_popup', + 'UI_Hooks_get_chooser_item_attrs', + 'UI_Hooks_get_custom_viewer_hint', + 'UI_Hooks_get_ea_hint', + 'UI_Hooks_get_item_hint', + 'UI_Hooks_get_widget_config', + 'UI_Hooks_hook', + 'UI_Hooks_idcstart', + 'UI_Hooks_idcstop', + 'UI_Hooks_plugin_loaded', + 'UI_Hooks_plugin_unloading', + 'UI_Hooks_populating_widget_popup', + 'UI_Hooks_postprocess_action', + 'UI_Hooks_preprocess_action', + 'UI_Hooks_range', + 'UI_Hooks_ready_to_run', + 'UI_Hooks_resume', + 'UI_Hooks_saved', + 'UI_Hooks_saving', + 'UI_Hooks_screen_ea_changed', + 'UI_Hooks_set_widget_config', + 'UI_Hooks_suspend', + 'UI_Hooks_term', + 'UI_Hooks_unhook', + 'UI_Hooks_updated_actions', + 'UI_Hooks_updating_actions', + 'UI_Hooks_widget_closing', + 'UI_Hooks_widget_invisible', + 'UI_Hooks_widget_visible', + 'View_Hooks_hook', + 'View_Hooks_unhook', + 'View_Hooks_view_activated', + 'View_Hooks_view_click', + 'View_Hooks_view_close', + 'View_Hooks_view_created', + 'View_Hooks_view_curpos', + 'View_Hooks_view_dblclick', + 'View_Hooks_view_deactivated', + 'View_Hooks_view_keydown', + 'View_Hooks_view_loc_changed', + 'View_Hooks_view_mouse_moved', + 'View_Hooks_view_mouse_over', + 'View_Hooks_view_switched', + '_ask_addr', + '_ask_addr__varargs__', + '_ask_long', + '_ask_long__varargs__', + '_ask_seg', + '_ask_seg__varargs__', + '_kludge_use_TPopupMenu', + '_ll_call_helper', + '_ll_call_helper__varargs__', + '_ll_create_helper', + '_ll_create_helper__varargs__', + '_ll_dereference', + '_ll_lnot', + '_ll_make_num', + '_ll_make_ref', + '_ll_new_block', + 'accepts_small_udts', + 'accepts_udts', + 'action_ctx_base_t__get_form', + 'action_ctx_base_t__get_form_title', + 'action_ctx_base_t__get_form_type', + 'action_ctx_base_t_action_get', + 'action_ctx_base_t_action_set', + 'action_ctx_base_t_chooser_selection_get', + 'action_ctx_base_t_chooser_selection_set', + 'action_ctx_base_t_cur_ea_get', + 'action_ctx_base_t_cur_ea_set', + 'action_ctx_base_t_cur_enum_get', + 'action_ctx_base_t_cur_enum_set', + 'action_ctx_base_t_cur_fchunk_get', + 'action_ctx_base_t_cur_fchunk_set', + 'action_ctx_base_t_cur_flags_get', + 'action_ctx_base_t_cur_flags_set', + 'action_ctx_base_t_cur_func_get', + 'action_ctx_base_t_cur_func_set', + 'action_ctx_base_t_cur_seg_get', + 'action_ctx_base_t_cur_seg_set', + 'action_ctx_base_t_cur_strmem_get', + 'action_ctx_base_t_cur_strmem_set', + 'action_ctx_base_t_cur_struc_get', + 'action_ctx_base_t_cur_struc_set', + 'action_ctx_base_t_cur_value_get', + 'action_ctx_base_t_cur_value_set', + 'action_ctx_base_t_focus_get', + 'action_ctx_base_t_focus_set', + 'action_ctx_base_t_graph_selection_get', + 'action_ctx_base_t_graph_selection_set', + 'action_ctx_base_t_has_flag', + 'action_ctx_base_t_regname_get', + 'action_ctx_base_t_regname_set', + 'action_ctx_base_t_reset', + 'action_ctx_base_t_widget_get', + 'action_ctx_base_t_widget_set', + 'action_ctx_base_t_widget_title_get', + 'action_ctx_base_t_widget_title_set', + 'action_ctx_base_t_widget_type_get', + 'action_ctx_base_t_widget_type_set', + 'action_desc_t_cb_get', + 'action_desc_t_cb_set', + 'action_desc_t_flags_get', + 'action_desc_t_flags_set', + 'action_desc_t_icon_get', + 'action_desc_t_icon_set', + 'action_desc_t_label_get', + 'action_desc_t_label_set', + 'action_desc_t_name_get', + 'action_desc_t_name_set', + 'action_desc_t_owner_get', + 'action_desc_t_owner_set', + 'action_desc_t_shortcut_get', + 'action_desc_t_shortcut_set', + 'action_desc_t_tooltip_get', + 'action_desc_t_tooltip_set', + 'activate_widget', + 'add_auto_stkpnt', + 'add_bpt', + 'add_bpt__SWIG_0', + 'add_bpt__SWIG_1', + 'add_byte', + 'add_cref', + 'add_dref', + 'add_dword', + 'add_encoding', + 'add_entry', + 'add_enum', + 'add_enum_member', + 'add_extra_cmt', + 'add_extra_cmt__varargs__', + 'add_extra_line', + 'add_extra_line__varargs__', + 'add_frame', + 'add_func', + 'add_func_ex', + 'add_hidden_range', + 'add_hotkey', + 'add_idc_class', + 'add_idc_gvar', + 'add_idc_hotkey', + 'add_mapping', + 'add_path_mapping', + 'add_pgm_cmt', + 'add_pgm_cmt__varargs__', + 'add_qword', + 'add_refinfo_dref', + 'add_regarg', + 'add_regvar', + 'add_segm', + 'add_segm_ex', + 'add_segment_translation', + 'add_sourcefile', + 'add_spaces', + 'add_struc', + 'add_struc_member', + 'add_til', + 'add_tryblk', + 'add_user_stkpnt', + 'add_virt_module', + 'add_word', + 'addon_count', + 'addon_info_t_cb_get', + 'addon_info_t_cb_set', + 'addon_info_t_custom_data_get', + 'addon_info_t_custom_data_set', + 'addon_info_t_custom_size_get', + 'addon_info_t_custom_size_set', + 'addon_info_t_freeform_get', + 'addon_info_t_freeform_set', + 'addon_info_t_id_get', + 'addon_info_t_id_set', + 'addon_info_t_name_get', + 'addon_info_t_name_set', + 'addon_info_t_producer_get', + 'addon_info_t_producer_set', + 'addon_info_t_url_get', + 'addon_info_t_url_set', + 'addon_info_t_version_get', + 'addon_info_t_version_set', + 'align_flag', + 'alloc_type_ordinal', + 'alloc_type_ordinals', + 'allocate_selector', + 'aloc_visitor_t_visit_location', + 'analyzer_options', + 'appcall', + 'append_abi_opts', + 'append_argloc', + 'append_cmt', + 'append_func_tail', + 'append_struct_fields', + 'append_tinfo_covered', + 'apply_callee_tinfo', + 'apply_cdecl', + 'apply_idasgn_to', + 'apply_named_type', + 'apply_once_tinfo_and_name', + 'apply_startup_sig', + 'apply_tinfo', + 'apply_tinfo_to_stkarg', + 'apply_type', + 'argloc_t___eq__', + 'argloc_t___ge__', + 'argloc_t___gt__', + 'argloc_t___le__', + 'argloc_t___lt__', + 'argloc_t___ne__', + 'argloc_t__consume_rrel', + 'argloc_t__consume_scattered', + 'argloc_t__set_badloc', + 'argloc_t__set_biggest', + 'argloc_t__set_custom', + 'argloc_t__set_ea', + 'argloc_t__set_reg1', + 'argloc_t__set_reg2', + 'argloc_t__set_stkoff', + 'argloc_t_advance', + 'argloc_t_atype', + 'argloc_t_calc_offset', + 'argloc_t_compare', + 'argloc_t_consume_rrel', + 'argloc_t_consume_scattered', + 'argloc_t_get_biggest', + 'argloc_t_get_custom', + 'argloc_t_get_ea', + 'argloc_t_get_reginfo', + 'argloc_t_get_rrel', + 'argloc_t_get_rrel__SWIG_0', + 'argloc_t_get_rrel__SWIG_1', + 'argloc_t_has_reg', + 'argloc_t_has_stkoff', + 'argloc_t_is_badloc', + 'argloc_t_is_custom', + 'argloc_t_is_ea', + 'argloc_t_is_fragmented', + 'argloc_t_is_mixed_scattered', + 'argloc_t_is_reg', + 'argloc_t_is_reg1', + 'argloc_t_is_reg2', + 'argloc_t_is_rrel', + 'argloc_t_is_scattered', + 'argloc_t_is_stkoff', + 'argloc_t_justify_reg_high', + 'argloc_t_justify_stkoff_right', + 'argloc_t_reg1', + 'argloc_t_reg2', + 'argloc_t_regoff', + 'argloc_t_scattered', + 'argloc_t_scattered__SWIG_0', + 'argloc_t_scattered__SWIG_1', + 'argloc_t_set_badloc', + 'argloc_t_set_ea', + 'argloc_t_set_reg1', + 'argloc_t_set_reg2', + 'argloc_t_set_stkoff', + 'argloc_t_stkoff', + 'argloc_t_swap', + 'arglocs_overlap', + 'argpart_t___lt__', + 'argpart_t_bad_offset', + 'argpart_t_bad_size', + 'argpart_t_off_get', + 'argpart_t_off_set', + 'argpart_t_size_get', + 'argpart_t_size_set', + 'argpart_t_swap', + 'argpartvec_t___eq__', + 'argpartvec_t___getitem__', + 'argpartvec_t___len__', + 'argpartvec_t___ne__', + 'argpartvec_t___setitem__', + 'argpartvec_t__del', + 'argpartvec_t_add_unique', + 'argpartvec_t_at', + 'argpartvec_t_begin', + 'argpartvec_t_begin__SWIG_0', + 'argpartvec_t_begin__SWIG_1', + 'argpartvec_t_capacity', + 'argpartvec_t_clear', + 'argpartvec_t_empty', + 'argpartvec_t_end', + 'argpartvec_t_end__SWIG_0', + 'argpartvec_t_end__SWIG_1', + 'argpartvec_t_erase', + 'argpartvec_t_erase__SWIG_0', + 'argpartvec_t_erase__SWIG_1', + 'argpartvec_t_extract', + 'argpartvec_t_find', + 'argpartvec_t_find__SWIG_0', + 'argpartvec_t_find__SWIG_1', + 'argpartvec_t_grow', + 'argpartvec_t_has', + 'argpartvec_t_inject', + 'argpartvec_t_insert', + 'argpartvec_t_pop_back', + 'argpartvec_t_push_back', + 'argpartvec_t_push_back__SWIG_0', + 'argpartvec_t_push_back__SWIG_1', + 'argpartvec_t_qclear', + 'argpartvec_t_reserve', + 'argpartvec_t_resize', + 'argpartvec_t_resize__SWIG_0', + 'argpartvec_t_resize__SWIG_1', + 'argpartvec_t_size', + 'argpartvec_t_swap', + 'argpartvec_t_truncate', + 'array_of_bitsets___eq__', + 'array_of_bitsets___getitem__', + 'array_of_bitsets___len__', + 'array_of_bitsets___ne__', + 'array_of_bitsets___setitem__', + 'array_of_bitsets__del', + 'array_of_bitsets_add_unique', + 'array_of_bitsets_at', + 'array_of_bitsets_begin', + 'array_of_bitsets_begin__SWIG_0', + 'array_of_bitsets_begin__SWIG_1', + 'array_of_bitsets_capacity', + 'array_of_bitsets_clear', + 'array_of_bitsets_empty', + 'array_of_bitsets_end', + 'array_of_bitsets_end__SWIG_0', + 'array_of_bitsets_end__SWIG_1', + 'array_of_bitsets_erase', + 'array_of_bitsets_erase__SWIG_0', + 'array_of_bitsets_erase__SWIG_1', + 'array_of_bitsets_extract', + 'array_of_bitsets_find', + 'array_of_bitsets_find__SWIG_0', + 'array_of_bitsets_find__SWIG_1', + 'array_of_bitsets_grow', + 'array_of_bitsets_has', + 'array_of_bitsets_inject', + 'array_of_bitsets_insert', + 'array_of_bitsets_pop_back', + 'array_of_bitsets_push_back', + 'array_of_bitsets_push_back__SWIG_0', + 'array_of_bitsets_push_back__SWIG_1', + 'array_of_bitsets_qclear', + 'array_of_bitsets_reserve', + 'array_of_bitsets_resize', + 'array_of_bitsets_resize__SWIG_0', + 'array_of_bitsets_resize__SWIG_1', + 'array_of_bitsets_size', + 'array_of_bitsets_swap', + 'array_of_bitsets_truncate', + 'array_of_ivlsets___eq__', + 'array_of_ivlsets___getitem__', + 'array_of_ivlsets___len__', + 'array_of_ivlsets___ne__', + 'array_of_ivlsets___setitem__', + 'array_of_ivlsets__del', + 'array_of_ivlsets_add_unique', + 'array_of_ivlsets_at', + 'array_of_ivlsets_begin', + 'array_of_ivlsets_begin__SWIG_0', + 'array_of_ivlsets_begin__SWIG_1', + 'array_of_ivlsets_capacity', + 'array_of_ivlsets_clear', + 'array_of_ivlsets_empty', + 'array_of_ivlsets_end', + 'array_of_ivlsets_end__SWIG_0', + 'array_of_ivlsets_end__SWIG_1', + 'array_of_ivlsets_erase', + 'array_of_ivlsets_erase__SWIG_0', + 'array_of_ivlsets_erase__SWIG_1', + 'array_of_ivlsets_extract', + 'array_of_ivlsets_find', + 'array_of_ivlsets_find__SWIG_0', + 'array_of_ivlsets_find__SWIG_1', + 'array_of_ivlsets_grow', + 'array_of_ivlsets_has', + 'array_of_ivlsets_inject', + 'array_of_ivlsets_insert', + 'array_of_ivlsets_pop_back', + 'array_of_ivlsets_push_back', + 'array_of_ivlsets_push_back__SWIG_0', + 'array_of_ivlsets_push_back__SWIG_1', + 'array_of_ivlsets_qclear', + 'array_of_ivlsets_reserve', + 'array_of_ivlsets_resize', + 'array_of_ivlsets_resize__SWIG_0', + 'array_of_ivlsets_resize__SWIG_1', + 'array_of_ivlsets_size', + 'array_of_ivlsets_swap', + 'array_of_ivlsets_truncate', + 'array_of_rangesets___eq__', + 'array_of_rangesets___getitem__', + 'array_of_rangesets___len__', + 'array_of_rangesets___ne__', + 'array_of_rangesets___setitem__', + 'array_of_rangesets__del', + 'array_of_rangesets_add_unique', + 'array_of_rangesets_at', + 'array_of_rangesets_begin', + 'array_of_rangesets_begin__SWIG_0', + 'array_of_rangesets_begin__SWIG_1', + 'array_of_rangesets_capacity', + 'array_of_rangesets_clear', + 'array_of_rangesets_empty', + 'array_of_rangesets_end', + 'array_of_rangesets_end__SWIG_0', + 'array_of_rangesets_end__SWIG_1', + 'array_of_rangesets_erase', + 'array_of_rangesets_erase__SWIG_0', + 'array_of_rangesets_erase__SWIG_1', + 'array_of_rangesets_extract', + 'array_of_rangesets_find', + 'array_of_rangesets_find__SWIG_0', + 'array_of_rangesets_find__SWIG_1', + 'array_of_rangesets_grow', + 'array_of_rangesets_has', + 'array_of_rangesets_inject', + 'array_of_rangesets_insert', + 'array_of_rangesets_pop_back', + 'array_of_rangesets_push_back', + 'array_of_rangesets_push_back__SWIG_0', + 'array_of_rangesets_push_back__SWIG_1', + 'array_of_rangesets_qclear', + 'array_of_rangesets_reserve', + 'array_of_rangesets_resize', + 'array_of_rangesets_resize__SWIG_0', + 'array_of_rangesets_resize__SWIG_1', + 'array_of_rangesets_size', + 'array_of_rangesets_swap', + 'array_of_rangesets_truncate', + 'array_parameters_t_alignment_get', + 'array_parameters_t_alignment_set', + 'array_parameters_t_flags_get', + 'array_parameters_t_flags_set', + 'array_parameters_t_lineitems_get', + 'array_parameters_t_lineitems_set', + 'array_type_data_t_base_get', + 'array_type_data_t_base_set', + 'array_type_data_t_elem_type_get', + 'array_type_data_t_elem_type_set', + 'array_type_data_t_nelems_get', + 'array_type_data_t_nelems_set', + 'array_type_data_t_swap', + 'asgop', + 'asgop_revert', + 'ask_buttons', + 'ask_buttons__varargs__', + 'ask_file', + 'ask_file__varargs__', + 'ask_for_feedback', + 'ask_for_feedback__varargs__', + 'ask_str', + 'ask_text', + 'ask_yn', + 'ask_yn__varargs__', + 'asm_t_a_align_get', + 'asm_t_a_align_set', + 'asm_t_a_ascii_get', + 'asm_t_a_ascii_set', + 'asm_t_a_band_get', + 'asm_t_a_band_set', + 'asm_t_a_bnot_get', + 'asm_t_a_bnot_set', + 'asm_t_a_bor_get', + 'asm_t_a_bor_set', + 'asm_t_a_bss_get', + 'asm_t_a_bss_set', + 'asm_t_a_byte_get', + 'asm_t_a_byte_set', + 'asm_t_a_comdef_get', + 'asm_t_a_comdef_set', + 'asm_t_a_curip_get', + 'asm_t_a_curip_set', + 'asm_t_a_double_get', + 'asm_t_a_double_set', + 'asm_t_a_dups_get', + 'asm_t_a_dups_set', + 'asm_t_a_dword_get', + 'asm_t_a_dword_set', + 'asm_t_a_equ_get', + 'asm_t_a_equ_set', + 'asm_t_a_extrn_get', + 'asm_t_a_extrn_set', + 'asm_t_a_float_get', + 'asm_t_a_float_set', + 'asm_t_a_include_fmt_get', + 'asm_t_a_include_fmt_set', + 'asm_t_a_mod_get', + 'asm_t_a_mod_set', + 'asm_t_a_oword_get', + 'asm_t_a_oword_set', + 'asm_t_a_packreal_get', + 'asm_t_a_packreal_set', + 'asm_t_a_public_get', + 'asm_t_a_public_set', + 'asm_t_a_qword_get', + 'asm_t_a_qword_set', + 'asm_t_a_rva_get', + 'asm_t_a_rva_set', + 'asm_t_a_seg_get', + 'asm_t_a_seg_set', + 'asm_t_a_shl_get', + 'asm_t_a_shl_set', + 'asm_t_a_shr_get', + 'asm_t_a_shr_set', + 'asm_t_a_sizeof_fmt_get', + 'asm_t_a_sizeof_fmt_set', + 'asm_t_a_tbyte_get', + 'asm_t_a_tbyte_set', + 'asm_t_a_vstruc_fmt_get', + 'asm_t_a_vstruc_fmt_set', + 'asm_t_a_weak_get', + 'asm_t_a_weak_set', + 'asm_t_a_word_get', + 'asm_t_a_word_set', + 'asm_t_a_xor_get', + 'asm_t_a_xor_set', + 'asm_t_a_yword_get', + 'asm_t_a_yword_set', + 'asm_t_accsep_get', + 'asm_t_accsep_set', + 'asm_t_ascsep_get', + 'asm_t_ascsep_set', + 'asm_t_cmnt2_get', + 'asm_t_cmnt2_set', + 'asm_t_cmnt_get', + 'asm_t_cmnt_set', + 'asm_t_end_get', + 'asm_t_end_set', + 'asm_t_esccodes_get', + 'asm_t_esccodes_set', + 'asm_t_flag2_get', + 'asm_t_flag2_set', + 'asm_t_flag_get', + 'asm_t_flag_set', + 'asm_t_header_get', + 'asm_t_header_set', + 'asm_t_help_get', + 'asm_t_help_set', + 'asm_t_high16_get', + 'asm_t_high16_set', + 'asm_t_high8_get', + 'asm_t_high8_set', + 'asm_t_lbrace_get', + 'asm_t_lbrace_set', + 'asm_t_low16_get', + 'asm_t_low16_set', + 'asm_t_low8_get', + 'asm_t_low8_set', + 'asm_t_name_get', + 'asm_t_name_set', + 'asm_t_origin_get', + 'asm_t_origin_set', + 'asm_t_rbrace_get', + 'asm_t_rbrace_set', + 'asm_t_uflag_get', + 'asm_t_uflag_set', + 'assemble', + 'attach_action_to_menu', + 'attach_action_to_popup', + 'attach_action_to_toolbar', + 'attach_custom_data_format', + 'attach_dynamic_action_to_popup', + 'attach_process', + 'auto_apply_tail', + 'auto_apply_type', + 'auto_cancel', + 'auto_display_t_ea_get', + 'auto_display_t_ea_set', + 'auto_display_t_state_get', + 'auto_display_t_state_set', + 'auto_display_t_type_get', + 'auto_display_t_type_set', + 'auto_get', + 'auto_is_ok', + 'auto_make_code', + 'auto_make_proc', + 'auto_mark', + 'auto_mark_range', + 'auto_recreate_insn', + 'auto_unmark', + 'auto_wait', + 'auto_wait_range', + 'banner', + 'base2file', + 'beep', + 'begin_type_updating', + 'bgcolors_t_epilog_color_get', + 'bgcolors_t_epilog_color_set', + 'bgcolors_t_prolog_color_get', + 'bgcolors_t_prolog_color_set', + 'bgcolors_t_switch_color_get', + 'bgcolors_t_switch_color_set', + 'bin_flag', + 'bin_search', + 'bit_bound_t_nbits_get', + 'bit_bound_t_nbits_set', + 'bit_bound_t_sbits_get', + 'bit_bound_t_sbits_set', + 'bitfield_type_data_t___eq__', + 'bitfield_type_data_t___ge__', + 'bitfield_type_data_t___gt__', + 'bitfield_type_data_t___le__', + 'bitfield_type_data_t___lt__', + 'bitfield_type_data_t___ne__', + 'bitfield_type_data_t_compare', + 'bitfield_type_data_t_is_unsigned_get', + 'bitfield_type_data_t_is_unsigned_set', + 'bitfield_type_data_t_nbytes_get', + 'bitfield_type_data_t_nbytes_set', + 'bitfield_type_data_t_swap', + 'bitfield_type_data_t_width_get', + 'bitfield_type_data_t_width_set', + 'bitset_t___eq__', + 'bitset_t___ge__', + 'bitset_t___gt__', + 'bitset_t___le__', + 'bitset_t___lt__', + 'bitset_t___ne__', + 'bitset_t_add', + 'bitset_t_add__SWIG_0', + 'bitset_t_add__SWIG_1', + 'bitset_t_add__SWIG_2', + 'bitset_t_back', + 'bitset_t_begin', + 'bitset_t_clear', + 'bitset_t_compare', + 'bitset_t_copy', + 'bitset_t_count', + 'bitset_t_count__SWIG_0', + 'bitset_t_count__SWIG_1', + 'bitset_t_cut_at', + 'bitset_t_dstr', + 'bitset_t_empty', + 'bitset_t_end', + 'bitset_t_fill_with_ones', + 'bitset_t_front', + 'bitset_t_has', + 'bitset_t_has_all', + 'bitset_t_has_any', + 'bitset_t_has_common', + 'bitset_t_inc', + 'bitset_t_includes', + 'bitset_t_intersect', + 'bitset_t_is_subset_of', + 'bitset_t_itat', + 'bitset_t_itv', + 'bitset_t_last', + 'bitset_t_shift_down', + 'bitset_t_sub', + 'bitset_t_sub__SWIG_0', + 'bitset_t_sub__SWIG_1', + 'bitset_t_sub__SWIG_2', + 'bitset_t_swap', + 'block_chains_begin', + 'block_chains_clear', + 'block_chains_end', + 'block_chains_erase', + 'block_chains_find', + 'block_chains_free', + 'block_chains_get', + 'block_chains_insert', + 'block_chains_iterator_t___eq__', + 'block_chains_iterator_t___ne__', + 'block_chains_iterator_t_x_get', + 'block_chains_iterator_t_x_set', + 'block_chains_new', + 'block_chains_next', + 'block_chains_prev', + 'block_chains_size', + 'block_chains_t__print', + 'block_chains_t_dstr', + 'block_chains_t_get_chain', + 'block_chains_t_get_chain__SWIG_0', + 'block_chains_t_get_chain__SWIG_1', + 'block_chains_t_get_chain__SWIG_2', + 'block_chains_t_get_chain__SWIG_3', + 'block_chains_t_get_reg_chain', + 'block_chains_t_get_reg_chain__SWIG_0', + 'block_chains_t_get_reg_chain__SWIG_1', + 'block_chains_t_get_stk_chain', + 'block_chains_t_get_stk_chain__SWIG_0', + 'block_chains_t_get_stk_chain__SWIG_1', + 'block_chains_vec_t___getitem__', + 'block_chains_vec_t___len__', + 'block_chains_vec_t___setitem__', + 'block_chains_vec_t_at', + 'block_chains_vec_t_begin', + 'block_chains_vec_t_begin__SWIG_0', + 'block_chains_vec_t_begin__SWIG_1', + 'block_chains_vec_t_capacity', + 'block_chains_vec_t_clear', + 'block_chains_vec_t_empty', + 'block_chains_vec_t_end', + 'block_chains_vec_t_end__SWIG_0', + 'block_chains_vec_t_end__SWIG_1', + 'block_chains_vec_t_erase', + 'block_chains_vec_t_erase__SWIG_0', + 'block_chains_vec_t_erase__SWIG_1', + 'block_chains_vec_t_extract', + 'block_chains_vec_t_grow', + 'block_chains_vec_t_inject', + 'block_chains_vec_t_insert', + 'block_chains_vec_t_pop_back', + 'block_chains_vec_t_push_back', + 'block_chains_vec_t_push_back__SWIG_0', + 'block_chains_vec_t_push_back__SWIG_1', + 'block_chains_vec_t_qclear', + 'block_chains_vec_t_reserve', + 'block_chains_vec_t_resize', + 'block_chains_vec_t_resize__SWIG_0', + 'block_chains_vec_t_resize__SWIG_1', + 'block_chains_vec_t_size', + 'block_chains_vec_t_swap', + 'block_chains_vec_t_truncate', + 'bookmarks_t_erase', + 'bookmarks_t_find_index', + 'bookmarks_t_get', + 'bookmarks_t_get_desc', + 'bookmarks_t_mark', + 'bookmarks_t_size', + 'boolvec_t___eq__', + 'boolvec_t___getitem__', + 'boolvec_t___len__', + 'boolvec_t___ne__', + 'boolvec_t___setitem__', + 'boolvec_t__del', + 'boolvec_t_add_unique', + 'boolvec_t_at', + 'boolvec_t_begin', + 'boolvec_t_begin__SWIG_0', + 'boolvec_t_begin__SWIG_1', + 'boolvec_t_capacity', + 'boolvec_t_clear', + 'boolvec_t_empty', + 'boolvec_t_end', + 'boolvec_t_end__SWIG_0', + 'boolvec_t_end__SWIG_1', + 'boolvec_t_erase', + 'boolvec_t_erase__SWIG_0', + 'boolvec_t_erase__SWIG_1', + 'boolvec_t_extract', + 'boolvec_t_find', + 'boolvec_t_find__SWIG_0', + 'boolvec_t_find__SWIG_1', + 'boolvec_t_grow', + 'boolvec_t_has', + 'boolvec_t_inject', + 'boolvec_t_insert', + 'boolvec_t_pop_back', + 'boolvec_t_push_back', + 'boolvec_t_push_back__SWIG_0', + 'boolvec_t_push_back__SWIG_1', + 'boolvec_t_qclear', + 'boolvec_t_reserve', + 'boolvec_t_resize', + 'boolvec_t_resize__SWIG_0', + 'boolvec_t_resize__SWIG_1', + 'boolvec_t_size', + 'boolvec_t_swap', + 'boolvec_t_truncate', + 'boundaries_begin', + 'boundaries_clear', + 'boundaries_end', + 'boundaries_erase', + 'boundaries_find', + 'boundaries_first', + 'boundaries_free', + 'boundaries_insert', + 'boundaries_iterator_t___eq__', + 'boundaries_iterator_t___ne__', + 'boundaries_iterator_t_x_get', + 'boundaries_iterator_t_x_set', + 'boundaries_new', + 'boundaries_next', + 'boundaries_prev', + 'boundaries_second', + 'boundaries_size', + 'boundaries_t_at', + 'boundaries_t_size', + 'bpt_location_t___eq__', + 'bpt_location_t___ge__', + 'bpt_location_t___gt__', + 'bpt_location_t___le__', + 'bpt_location_t___lt__', + 'bpt_location_t___ne__', + 'bpt_location_t_compare', + 'bpt_location_t_ea', + 'bpt_location_t_index_get', + 'bpt_location_t_index_set', + 'bpt_location_t_info_get', + 'bpt_location_t_info_set', + 'bpt_location_t_is_empty_path', + 'bpt_location_t_lineno', + 'bpt_location_t_loctype_get', + 'bpt_location_t_loctype_set', + 'bpt_location_t_offset', + 'bpt_location_t_path', + 'bpt_location_t_set_abs_bpt', + 'bpt_location_t_set_rel_bpt', + 'bpt_location_t_set_src_bpt', + 'bpt_location_t_set_sym_bpt', + 'bpt_location_t_symbol', + 'bpt_location_t_type', + 'bpt_t_badbpt', + 'bpt_t_cb_get', + 'bpt_t_cb_set', + 'bpt_t_cndidx_get', + 'bpt_t_cndidx_set', + 'bpt_t_condition_get', + 'bpt_t_condition_set', + 'bpt_t_ea_get', + 'bpt_t_ea_set', + 'bpt_t_elang_get', + 'bpt_t_elang_set', + 'bpt_t_enabled', + 'bpt_t_flags_get', + 'bpt_t_flags_set', + 'bpt_t_get_cnd_elang_idx', + 'bpt_t_get_size', + 'bpt_t_is_absbpt', + 'bpt_t_is_active', + 'bpt_t_is_compiled', + 'bpt_t_is_hwbpt', + 'bpt_t_is_inactive', + 'bpt_t_is_low_level', + 'bpt_t_is_page_bpt', + 'bpt_t_is_partially_active', + 'bpt_t_is_relbpt', + 'bpt_t_is_srcbpt', + 'bpt_t_is_symbpt', + 'bpt_t_is_tracemodebpt', + 'bpt_t_is_traceoffbpt', + 'bpt_t_is_traceonbpt', + 'bpt_t_listbpt', + 'bpt_t_loc_get', + 'bpt_t_loc_set', + 'bpt_t_pass_count_get', + 'bpt_t_pass_count_set', + 'bpt_t_pid_get', + 'bpt_t_pid_set', + 'bpt_t_props_get', + 'bpt_t_props_set', + 'bpt_t_set_abs_bpt', + 'bpt_t_set_rel_bpt', + 'bpt_t_set_src_bpt', + 'bpt_t_set_sym_bpt', + 'bpt_t_set_trace_action', + 'bpt_t_size_get', + 'bpt_t_size_set', + 'bpt_t_tid_get', + 'bpt_t_tid_set', + 'bpt_t_type_get', + 'bpt_t_type_set', + 'bpt_vec_t___getitem__', + 'bpt_vec_t___len__', + 'bpt_vec_t___setitem__', + 'bpt_vec_t_at', + 'bpt_vec_t_begin', + 'bpt_vec_t_begin__SWIG_0', + 'bpt_vec_t_begin__SWIG_1', + 'bpt_vec_t_capacity', + 'bpt_vec_t_clear', + 'bpt_vec_t_empty', + 'bpt_vec_t_end', + 'bpt_vec_t_end__SWIG_0', + 'bpt_vec_t_end__SWIG_1', + 'bpt_vec_t_erase', + 'bpt_vec_t_erase__SWIG_0', + 'bpt_vec_t_erase__SWIG_1', + 'bpt_vec_t_extract', + 'bpt_vec_t_grow', + 'bpt_vec_t_inject', + 'bpt_vec_t_insert', + 'bpt_vec_t_pop_back', + 'bpt_vec_t_push_back', + 'bpt_vec_t_push_back__SWIG_0', + 'bpt_vec_t_push_back__SWIG_1', + 'bpt_vec_t_qclear', + 'bpt_vec_t_reserve', + 'bpt_vec_t_resize', + 'bpt_vec_t_resize__SWIG_0', + 'bpt_vec_t_resize__SWIG_1', + 'bpt_vec_t_size', + 'bpt_vec_t_swap', + 'bpt_vec_t_truncate', + 'bptaddr_t_hea_get', + 'bptaddr_t_hea_set', + 'bptaddr_t_kea_get', + 'bptaddr_t_kea_set', + 'bring_debugger_to_front', + 'build_snapshot_tree', + 'build_stkvar_name', + 'build_stkvar_xrefs', + 'build_strlist', + 'byte_flag', + 'bytesize', + 'calc_basevalue', + 'calc_bg_color', + 'calc_c_cpp_name', + 'calc_dataseg', + 'calc_def_align', + 'calc_default_idaplace_flags', + 'calc_dflags', + 'calc_dist', + 'calc_fixup_size', + 'calc_func_size', + 'calc_idasgn_state', + 'calc_max_align', + 'calc_max_item_end', + 'calc_min_align', + 'calc_number_of_children', + 'calc_offset_base', + 'calc_prefix_color', + 'calc_probable_base_by_value', + 'calc_reference_data', + 'calc_stkvar_struc_offset', + 'calc_switch_cases', + 'calc_target', + 'calc_target__SWIG_0', + 'calc_target__SWIG_1', + 'calc_thunk_func_target', + 'calc_tinfo_gaps', + 'calc_type_size', + 'call_nav_colorizer', + 'call_stack_info_t___eq__', + 'call_stack_info_t___ne__', + 'call_stack_info_t_callea_get', + 'call_stack_info_t_callea_set', + 'call_stack_info_t_fp_get', + 'call_stack_info_t_fp_set', + 'call_stack_info_t_funcea_get', + 'call_stack_info_t_funcea_set', + 'call_stack_info_t_funcok_get', + 'call_stack_info_t_funcok_set', + 'call_stack_t___eq__', + 'call_stack_t___getitem__', + 'call_stack_t___len__', + 'call_stack_t___ne__', + 'call_stack_t___setitem__', + 'call_stack_t__del', + 'call_stack_t_add_unique', + 'call_stack_t_at', + 'call_stack_t_begin', + 'call_stack_t_begin__SWIG_0', + 'call_stack_t_begin__SWIG_1', + 'call_stack_t_capacity', + 'call_stack_t_clear', + 'call_stack_t_empty', + 'call_stack_t_end', + 'call_stack_t_end__SWIG_0', + 'call_stack_t_end__SWIG_1', + 'call_stack_t_erase', + 'call_stack_t_erase__SWIG_0', + 'call_stack_t_erase__SWIG_1', + 'call_stack_t_extract', + 'call_stack_t_find', + 'call_stack_t_find__SWIG_0', + 'call_stack_t_find__SWIG_1', + 'call_stack_t_grow', + 'call_stack_t_has', + 'call_stack_t_inject', + 'call_stack_t_insert', + 'call_stack_t_pop_back', + 'call_stack_t_push_back', + 'call_stack_t_push_back__SWIG_0', + 'call_stack_t_push_back__SWIG_1', + 'call_stack_t_qclear', + 'call_stack_t_reserve', + 'call_stack_t_resize', + 'call_stack_t_resize__SWIG_0', + 'call_stack_t_resize__SWIG_1', + 'call_stack_t_size', + 'call_stack_t_swap', + 'call_stack_t_truncate', + 'callregs_t_fpregs_get', + 'callregs_t_fpregs_set', + 'callregs_t_gpregs_get', + 'callregs_t_gpregs_set', + 'callregs_t_init_regs', + 'callregs_t_nregs_get', + 'callregs_t_nregs_set', + 'callregs_t_policy_get', + 'callregs_t_policy_set', + 'callregs_t_regcount', + 'callregs_t_reginds', + 'callregs_t_reset', + 'callregs_t_set', + 'can_be_off32', + 'can_decode', + 'can_define_item', + 'can_exc_continue', + 'cancel_exec_request', + 'carg_t___eq__', + 'carg_t___ge__', + 'carg_t___gt__', + 'carg_t___le__', + 'carg_t___lt__', + 'carg_t___ne__', + 'carg_t_compare', + 'carg_t_consume_cexpr', + 'carg_t_formal_type_get', + 'carg_t_formal_type_set', + 'carg_t_is_vararg_get', + 'carg_t_is_vararg_set', + 'carglist_t___eq__', + 'carglist_t___ge__', + 'carglist_t___gt__', + 'carglist_t___le__', + 'carglist_t___lt__', + 'carglist_t___ne__', + 'carglist_t_compare', + 'carglist_t_flags_get', + 'carglist_t_flags_set', + 'carglist_t_functype_get', + 'carglist_t_functype_set', + 'cases_and_targets_t_cases_get', + 'cases_and_targets_t_cases_set', + 'cases_and_targets_t_targets_get', + 'cases_and_targets_t_targets_set', + 'casevec_t___eq__', + 'casevec_t___getitem__', + 'casevec_t___len__', + 'casevec_t___ne__', + 'casevec_t___setitem__', + 'casevec_t__del', + 'casevec_t_add_unique', + 'casevec_t_at', + 'casevec_t_begin', + 'casevec_t_begin__SWIG_0', + 'casevec_t_begin__SWIG_1', + 'casevec_t_capacity', + 'casevec_t_clear', + 'casevec_t_empty', + 'casevec_t_end', + 'casevec_t_end__SWIG_0', + 'casevec_t_end__SWIG_1', + 'casevec_t_erase', + 'casevec_t_erase__SWIG_0', + 'casevec_t_erase__SWIG_1', + 'casevec_t_extract', + 'casevec_t_find', + 'casevec_t_find__SWIG_0', + 'casevec_t_find__SWIG_1', + 'casevec_t_grow', + 'casevec_t_has', + 'casevec_t_inject', + 'casevec_t_insert', + 'casevec_t_pop_back', + 'casevec_t_push_back', + 'casevec_t_push_back__SWIG_0', + 'casevec_t_push_back__SWIG_1', + 'casevec_t_qclear', + 'casevec_t_reserve', + 'casevec_t_resize', + 'casevec_t_resize__SWIG_0', + 'casevec_t_resize__SWIG_1', + 'casevec_t_size', + 'casevec_t_swap', + 'casevec_t_truncate', + 'casm_t___eq__', + 'casm_t___ge__', + 'casm_t___gt__', + 'casm_t___le__', + 'casm_t___lt__', + 'casm_t___ne__', + 'casm_t_compare', + 'casm_t_one_insn', + 'catch_t_obj_get', + 'catch_t_obj_set', + 'catch_t_type_id_get', + 'catch_t_type_id_set', + 'catchvec_t___eq__', + 'catchvec_t___getitem__', + 'catchvec_t___len__', + 'catchvec_t___ne__', + 'catchvec_t___setitem__', + 'catchvec_t__del', + 'catchvec_t_add_unique', + 'catchvec_t_at', + 'catchvec_t_begin', + 'catchvec_t_begin__SWIG_0', + 'catchvec_t_begin__SWIG_1', + 'catchvec_t_capacity', + 'catchvec_t_clear', + 'catchvec_t_empty', + 'catchvec_t_end', + 'catchvec_t_end__SWIG_0', + 'catchvec_t_end__SWIG_1', + 'catchvec_t_erase', + 'catchvec_t_erase__SWIG_0', + 'catchvec_t_erase__SWIG_1', + 'catchvec_t_extract', + 'catchvec_t_find', + 'catchvec_t_find__SWIG_0', + 'catchvec_t_find__SWIG_1', + 'catchvec_t_grow', + 'catchvec_t_has', + 'catchvec_t_inject', + 'catchvec_t_insert', + 'catchvec_t_pop_back', + 'catchvec_t_push_back', + 'catchvec_t_push_back__SWIG_0', + 'catchvec_t_push_back__SWIG_1', + 'catchvec_t_qclear', + 'catchvec_t_reserve', + 'catchvec_t_resize', + 'catchvec_t_resize__SWIG_0', + 'catchvec_t_resize__SWIG_1', + 'catchvec_t_size', + 'catchvec_t_swap', + 'catchvec_t_truncate', + 'cblock_t___eq__', + 'cblock_t___ge__', + 'cblock_t___gt__', + 'cblock_t___le__', + 'cblock_t___lt__', + 'cblock_t___ne__', + 'cblock_t__deregister', + 'cblock_t_compare', + 'ccase_t___eq__', + 'ccase_t___ge__', + 'ccase_t___gt__', + 'ccase_t___le__', + 'ccase_t___lt__', + 'ccase_t___ne__', + 'ccase_t_compare', + 'ccase_t_size', + 'ccase_t_value', + 'ccase_t_values_get', + 'ccase_t_values_set', + 'ccases_t___eq__', + 'ccases_t___ge__', + 'ccases_t___gt__', + 'ccases_t___le__', + 'ccases_t___lt__', + 'ccases_t___ne__', + 'ccases_t_compare', + 'cdg_insn_iterator_t_dslot_get', + 'cdg_insn_iterator_t_dslot_insn_get', + 'cdg_insn_iterator_t_dslot_insn_set', + 'cdg_insn_iterator_t_dslot_set', + 'cdg_insn_iterator_t_dslot_with_xrefs', + 'cdg_insn_iterator_t_ea_get', + 'cdg_insn_iterator_t_ea_set', + 'cdg_insn_iterator_t_end_get', + 'cdg_insn_iterator_t_end_set', + 'cdg_insn_iterator_t_has_dslot', + 'cdg_insn_iterator_t_is_likely_dslot_get', + 'cdg_insn_iterator_t_is_likely_dslot_set', + 'cdg_insn_iterator_t_is_separate_dslot_get', + 'cdg_insn_iterator_t_is_separate_dslot_set', + 'cdg_insn_iterator_t_next', + 'cdg_insn_iterator_t_ok', + 'cdg_insn_iterator_t_start', + 'cdo_t___eq__', + 'cdo_t___ge__', + 'cdo_t___gt__', + 'cdo_t___le__', + 'cdo_t___lt__', + 'cdo_t___ne__', + 'cdo_t_compare', + 'ceinsn_t_expr_get', + 'ceinsn_t_expr_set', + 'cexpr_t___eq__', + 'cexpr_t___ge__', + 'cexpr_t___gt__', + 'cexpr_t___le__', + 'cexpr_t___lt__', + 'cexpr_t___ne__', + 'cexpr_t__deregister', + 'cexpr_t__get_a', + 'cexpr_t__get_fpc', + 'cexpr_t__get_helper', + 'cexpr_t__get_insn', + 'cexpr_t__get_m', + 'cexpr_t__get_n', + 'cexpr_t__get_obj_ea', + 'cexpr_t__get_ptrsize', + 'cexpr_t__get_refwidth', + 'cexpr_t__get_string', + 'cexpr_t__get_x', + 'cexpr_t__get_y', + 'cexpr_t__get_z', + 'cexpr_t__register', + 'cexpr_t__replace_by', + 'cexpr_t__set_a', + 'cexpr_t__set_fpc', + 'cexpr_t__set_helper', + 'cexpr_t__set_insn', + 'cexpr_t__set_m', + 'cexpr_t__set_n', + 'cexpr_t__set_obj_ea', + 'cexpr_t__set_ptrsize', + 'cexpr_t__set_refwidth', + 'cexpr_t__set_string', + 'cexpr_t__set_x', + 'cexpr_t__set_y', + 'cexpr_t__set_z', + 'cexpr_t_assign', + 'cexpr_t_calc_type', + 'cexpr_t_cleanup', + 'cexpr_t_compare', + 'cexpr_t_contains_comma', + 'cexpr_t_contains_comma_or_insn_or_label', + 'cexpr_t_contains_insn', + 'cexpr_t_contains_insn_or_label', + 'cexpr_t_contains_operator', + 'cexpr_t_cpadone', + 'cexpr_t_equal_effect', + 'cexpr_t_exflags_get', + 'cexpr_t_exflags_set', + 'cexpr_t_find_num_op', + 'cexpr_t_find_num_op__SWIG_0', + 'cexpr_t_find_num_op__SWIG_1', + 'cexpr_t_find_op', + 'cexpr_t_find_op__SWIG_0', + 'cexpr_t_find_op__SWIG_1', + 'cexpr_t_get_1num_op', + 'cexpr_t_get_const_value', + 'cexpr_t_get_high_nbit_bound', + 'cexpr_t_get_low_nbit_bound', + 'cexpr_t_get_ptr_or_array', + 'cexpr_t_get_type_sign', + 'cexpr_t_get_v', + 'cexpr_t_has_side_effects', + 'cexpr_t_is_call_arg_of', + 'cexpr_t_is_call_object_of', + 'cexpr_t_is_child_of', + 'cexpr_t_is_const_value', + 'cexpr_t_is_cstr', + 'cexpr_t_is_fpop', + 'cexpr_t_is_jumpout', + 'cexpr_t_is_negative_const', + 'cexpr_t_is_nice_cond', + 'cexpr_t_is_nice_expr', + 'cexpr_t_is_non_negative_const', + 'cexpr_t_is_non_zero_const', + 'cexpr_t_is_odd_lvalue', + 'cexpr_t_is_type_signed', + 'cexpr_t_is_type_unsigned', + 'cexpr_t_is_undef_val', + 'cexpr_t_is_vftable', + 'cexpr_t_is_zero_const', + 'cexpr_t_maybe_ptr', + 'cexpr_t_numval', + 'cexpr_t_print1', + 'cexpr_t_put_number', + 'cexpr_t_requires_lvalue', + 'cexpr_t_set_cpadone', + 'cexpr_t_set_v', + 'cexpr_t_set_vftable', + 'cexpr_t_swap', + 'cexpr_t_theother', + 'cexpr_t_theother__SWIG_0', + 'cexpr_t_theother__SWIG_1', + 'cexpr_t_type_get', + 'cexpr_t_type_set', + 'cfg_get_cc_header_path', + 'cfg_get_cc_parm', + 'cfg_get_cc_predefined_macros', + 'cfor_t___eq__', + 'cfor_t___ge__', + 'cfor_t___gt__', + 'cfor_t___le__', + 'cfor_t___lt__', + 'cfor_t___ne__', + 'cfor_t_compare', + 'cfor_t_init_get', + 'cfor_t_init_set', + 'cfor_t_step_get', + 'cfor_t_step_set', + 'cfunc_parentee_t_calc_rvalue_type', + 'cfunc_parentee_t_func_get', + 'cfunc_parentee_t_func_set', + 'cfunc_t___str__', + 'cfunc_t_argidx_get', + 'cfunc_t_body_get', + 'cfunc_t_body_set', + 'cfunc_t_build_c_tree', + 'cfunc_t_del_orphan_cmts', + 'cfunc_t_entry_ea_get', + 'cfunc_t_entry_ea_set', + 'cfunc_t_find_item_coords', + 'cfunc_t_find_item_coords__SWIG_0', + 'cfunc_t_find_item_coords__SWIG_1', + 'cfunc_t_find_label', + 'cfunc_t_gather_derefs', + 'cfunc_t_get_boundaries', + 'cfunc_t_get_eamap', + 'cfunc_t_get_func_type', + 'cfunc_t_get_line_item', + 'cfunc_t_get_lvars', + 'cfunc_t_get_pseudocode', + 'cfunc_t_get_stkoff_delta', + 'cfunc_t_get_user_cmt', + 'cfunc_t_get_user_iflags', + 'cfunc_t_get_user_union_selection', + 'cfunc_t_get_warnings', + 'cfunc_t_has_orphan_cmts', + 'cfunc_t_hdrlines_get', + 'cfunc_t_hdrlines_set', + 'cfunc_t_maturity_get', + 'cfunc_t_maturity_set', + 'cfunc_t_mba_get', + 'cfunc_t_mba_set', + 'cfunc_t_numforms_get', + 'cfunc_t_numforms_set', + 'cfunc_t_print_dcl', + 'cfunc_t_print_func', + 'cfunc_t_refcnt_get', + 'cfunc_t_refcnt_set', + 'cfunc_t_refresh_func_ctext', + 'cfunc_t_release', + 'cfunc_t_remove_unused_labels', + 'cfunc_t_save_user_cmts', + 'cfunc_t_save_user_iflags', + 'cfunc_t_save_user_labels', + 'cfunc_t_save_user_numforms', + 'cfunc_t_save_user_unions', + 'cfunc_t_set_user_cmt', + 'cfunc_t_set_user_iflags', + 'cfunc_t_set_user_union_selection', + 'cfunc_t_statebits_get', + 'cfunc_t_statebits_set', + 'cfunc_t_treeitems_get', + 'cfunc_t_treeitems_set', + 'cfunc_t_user_cmts_get', + 'cfunc_t_user_cmts_set', + 'cfunc_t_user_iflags_get', + 'cfunc_t_user_iflags_set', + 'cfunc_t_user_labels_get', + 'cfunc_t_user_labels_set', + 'cfunc_t_user_unions_get', + 'cfunc_t_user_unions_set', + 'cfunc_t_verify', + 'cfuncptr_t___deref__', + 'cfuncptr_t___ptrval__', + 'cfuncptr_t___ref__', + 'cfuncptr_t___str__', + 'cfuncptr_t_argidx_get', + 'cfuncptr_t_body_get', + 'cfuncptr_t_body_set', + 'cfuncptr_t_build_c_tree', + 'cfuncptr_t_del_orphan_cmts', + 'cfuncptr_t_entry_ea_get', + 'cfuncptr_t_entry_ea_set', + 'cfuncptr_t_find_item_coords', + 'cfuncptr_t_find_item_coords__SWIG_0', + 'cfuncptr_t_find_item_coords__SWIG_1', + 'cfuncptr_t_find_label', + 'cfuncptr_t_gather_derefs', + 'cfuncptr_t_get_boundaries', + 'cfuncptr_t_get_eamap', + 'cfuncptr_t_get_func_type', + 'cfuncptr_t_get_line_item', + 'cfuncptr_t_get_lvars', + 'cfuncptr_t_get_pseudocode', + 'cfuncptr_t_get_stkoff_delta', + 'cfuncptr_t_get_user_cmt', + 'cfuncptr_t_get_user_iflags', + 'cfuncptr_t_get_user_union_selection', + 'cfuncptr_t_get_warnings', + 'cfuncptr_t_has_orphan_cmts', + 'cfuncptr_t_hdrlines_get', + 'cfuncptr_t_hdrlines_set', + 'cfuncptr_t_maturity_get', + 'cfuncptr_t_maturity_set', + 'cfuncptr_t_mba_get', + 'cfuncptr_t_mba_set', + 'cfuncptr_t_numforms_get', + 'cfuncptr_t_numforms_set', + 'cfuncptr_t_print_dcl', + 'cfuncptr_t_print_func', + 'cfuncptr_t_refcnt_get', + 'cfuncptr_t_refcnt_set', + 'cfuncptr_t_refresh_func_ctext', + 'cfuncptr_t_release', + 'cfuncptr_t_remove_unused_labels', + 'cfuncptr_t_reset', + 'cfuncptr_t_save_user_cmts', + 'cfuncptr_t_save_user_iflags', + 'cfuncptr_t_save_user_labels', + 'cfuncptr_t_save_user_numforms', + 'cfuncptr_t_save_user_unions', + 'cfuncptr_t_set_user_cmt', + 'cfuncptr_t_set_user_iflags', + 'cfuncptr_t_set_user_union_selection', + 'cfuncptr_t_statebits_get', + 'cfuncptr_t_statebits_set', + 'cfuncptr_t_treeitems_get', + 'cfuncptr_t_treeitems_set', + 'cfuncptr_t_user_cmts_get', + 'cfuncptr_t_user_cmts_set', + 'cfuncptr_t_user_iflags_get', + 'cfuncptr_t_user_iflags_set', + 'cfuncptr_t_user_labels_get', + 'cfuncptr_t_user_labels_set', + 'cfuncptr_t_user_unions_get', + 'cfuncptr_t_user_unions_set', + 'cfuncptr_t_verify', + 'cgoto_t___eq__', + 'cgoto_t___ge__', + 'cgoto_t___gt__', + 'cgoto_t___le__', + 'cgoto_t___lt__', + 'cgoto_t___ne__', + 'cgoto_t_compare', + 'cgoto_t_label_num_get', + 'cgoto_t_label_num_set', + 'chain_keeper_t_back', + 'chain_keeper_t_for_all_chains', + 'chain_keeper_t_front', + 'chain_t___lt__', + 'chain_t__print', + 'chain_t_append_list', + 'chain_t_clear_varnum', + 'chain_t_dstr', + 'chain_t_endoff', + 'chain_t_flags_get', + 'chain_t_flags_set', + 'chain_t_get_reg', + 'chain_t_get_stkoff', + 'chain_t_includes', + 'chain_t_is_fake', + 'chain_t_is_inited', + 'chain_t_is_overlapped', + 'chain_t_is_passreg', + 'chain_t_is_reg', + 'chain_t_is_replaced', + 'chain_t_is_stkoff', + 'chain_t_is_term', + 'chain_t_key', + 'chain_t_overlap', + 'chain_t_set_inited', + 'chain_t_set_overlapped', + 'chain_t_set_replaced', + 'chain_t_set_term', + 'chain_t_set_value', + 'chain_t_varnum_get', + 'chain_t_varnum_set', + 'chain_t_width_get', + 'chain_t_width_set', + 'chain_visitor_t_parent_get', + 'chain_visitor_t_parent_set', + 'chain_visitor_t_visit_chain', + 'change_segment_status', + 'change_storage_type', + 'channel_redir_t_fd_get', + 'channel_redir_t_fd_set', + 'channel_redir_t_file_get', + 'channel_redir_t_file_set', + 'channel_redir_t_flags_get', + 'channel_redir_t_flags_set', + 'channel_redir_t_is_append', + 'channel_redir_t_is_input', + 'channel_redir_t_is_output', + 'channel_redir_t_is_quoted', + 'channel_redir_t_length_get', + 'channel_redir_t_length_set', + 'channel_redir_t_start_get', + 'channel_redir_t_start_set', + 'char_flag', + 'check_bpt', + 'check_process_exit', + 'checkout_hexrays_license', + 'choose_activate', + 'choose_choose', + 'choose_close', + 'choose_create_embedded_chobj', + 'choose_entry', + 'choose_enum', + 'choose_enum_by_value', + 'choose_find', + 'choose_func', + 'choose_get_widget', + 'choose_idasgn', + 'choose_local_tinfo', + 'choose_local_tinfo_and_delta', + 'choose_name', + 'choose_named_type', + 'choose_refresh', + 'choose_segm', + 'choose_srcp', + 'choose_stkvar_xref', + 'choose_struc', + 'choose_til', + 'choose_trace_file', + 'choose_xref', + 'chooser_item_attrs_t_color_get', + 'chooser_item_attrs_t_color_set', + 'chooser_item_attrs_t_flags_get', + 'chooser_item_attrs_t_flags_set', + 'chooser_item_attrs_t_reset', + 'chunk_size', + 'chunk_start', + 'cif_t___eq__', + 'cif_t___ge__', + 'cif_t___gt__', + 'cif_t___le__', + 'cif_t___lt__', + 'cif_t___ne__', + 'cif_t_assign', + 'cif_t_cleanup', + 'cif_t_compare', + 'cif_t_ielse_get', + 'cif_t_ielse_set', + 'cif_t_ithen_get', + 'cif_t_ithen_set', + 'cinsn_t___eq__', + 'cinsn_t___ge__', + 'cinsn_t___gt__', + 'cinsn_t___le__', + 'cinsn_t___lt__', + 'cinsn_t___ne__', + 'cinsn_t__deregister', + 'cinsn_t__get_casm', + 'cinsn_t__get_cblock', + 'cinsn_t__get_cdo', + 'cinsn_t__get_cexpr', + 'cinsn_t__get_cfor', + 'cinsn_t__get_cgoto', + 'cinsn_t__get_cif', + 'cinsn_t__get_creturn', + 'cinsn_t__get_cswitch', + 'cinsn_t__get_cwhile', + 'cinsn_t__print', + 'cinsn_t__register', + 'cinsn_t__replace_by', + 'cinsn_t__set_casm', + 'cinsn_t__set_cblock', + 'cinsn_t__set_cdo', + 'cinsn_t__set_cexpr', + 'cinsn_t__set_cfor', + 'cinsn_t__set_cgoto', + 'cinsn_t__set_cif', + 'cinsn_t__set_creturn', + 'cinsn_t__set_cswitch', + 'cinsn_t__set_cwhile', + 'cinsn_t_assign', + 'cinsn_t_cleanup', + 'cinsn_t_collect_free_breaks', + 'cinsn_t_collect_free_continues', + 'cinsn_t_compare', + 'cinsn_t_contains_free_break', + 'cinsn_t_contains_free_continue', + 'cinsn_t_contains_insn', + 'cinsn_t_create_if', + 'cinsn_t_insn_is_epilog', + 'cinsn_t_is_ordinary_flow', + 'cinsn_t_new_insn', + 'cinsn_t_print1', + 'cinsn_t_swap', + 'cinsn_t_zero', + 'cinsnptrvec_t___eq__', + 'cinsnptrvec_t___getitem__', + 'cinsnptrvec_t___len__', + 'cinsnptrvec_t___ne__', + 'cinsnptrvec_t___setitem__', + 'cinsnptrvec_t__del', + 'cinsnptrvec_t_add_unique', + 'cinsnptrvec_t_at', + 'cinsnptrvec_t_begin', + 'cinsnptrvec_t_begin__SWIG_0', + 'cinsnptrvec_t_begin__SWIG_1', + 'cinsnptrvec_t_capacity', + 'cinsnptrvec_t_clear', + 'cinsnptrvec_t_empty', + 'cinsnptrvec_t_end', + 'cinsnptrvec_t_end__SWIG_0', + 'cinsnptrvec_t_end__SWIG_1', + 'cinsnptrvec_t_erase', + 'cinsnptrvec_t_erase__SWIG_0', + 'cinsnptrvec_t_erase__SWIG_1', + 'cinsnptrvec_t_extract', + 'cinsnptrvec_t_find', + 'cinsnptrvec_t_find__SWIG_0', + 'cinsnptrvec_t_find__SWIG_1', + 'cinsnptrvec_t_has', + 'cinsnptrvec_t_inject', + 'cinsnptrvec_t_insert', + 'cinsnptrvec_t_pop_back', + 'cinsnptrvec_t_push_back', + 'cinsnptrvec_t_push_back__SWIG_0', + 'cinsnptrvec_t_push_back__SWIG_1', + 'cinsnptrvec_t_qclear', + 'cinsnptrvec_t_reserve', + 'cinsnptrvec_t_resize', + 'cinsnptrvec_t_resize__SWIG_0', + 'cinsnptrvec_t_resize__SWIG_1', + 'cinsnptrvec_t_size', + 'cinsnptrvec_t_swap', + 'cinsnptrvec_t_truncate', + 'citem_cmt_t___str__', + 'citem_cmt_t_c_str', + 'citem_cmt_t_used_get', + 'citem_cmt_t_used_set', + 'citem_locator_t___eq__', + 'citem_locator_t___ge__', + 'citem_locator_t___gt__', + 'citem_locator_t___le__', + 'citem_locator_t___lt__', + 'citem_locator_t___ne__', + 'citem_locator_t_compare', + 'citem_locator_t_ea_get', + 'citem_locator_t_ea_set', + 'citem_locator_t_op_get', + 'citem_locator_t_op_set', + 'citem_t__get_op', + 'citem_t__obj_id', + 'citem_t__set_op', + 'citem_t_cexpr_get', + 'citem_t_cinsn_get', + 'citem_t_contains_expr', + 'citem_t_contains_label', + 'citem_t_ea_get', + 'citem_t_ea_set', + 'citem_t_find_closest_addr', + 'citem_t_find_parent_of', + 'citem_t_find_parent_of__SWIG_0', + 'citem_t_find_parent_of__SWIG_1', + 'citem_t_index_get', + 'citem_t_index_set', + 'citem_t_is_expr', + 'citem_t_label_num_get', + 'citem_t_label_num_set', + 'citem_t_print1', + 'citem_t_swap', + 'cleanup_appcall', + 'cleanup_name', + 'clear_bits', + 'clear_cached_cfuncs', + 'clear_refresh_request', + 'clear_requests_queue', + 'clear_strlist', + 'clear_tinfo_t', + 'clear_trace', + 'cloop_t_assign', + 'cloop_t_body_get', + 'cloop_t_body_set', + 'cloop_t_cleanup', + 'close_chooser', + 'close_linput', + 'close_pseudocode', + 'close_widget', + 'clr__bnot0', + 'clr__bnot1', + 'clr__invsign0', + 'clr__invsign1', + 'clr_abits', + 'clr_align_flow', + 'clr_cancelled', + 'clr_colored_item', + 'clr_database_flag', + 'clr_fixed_spd', + 'clr_has_lname', + 'clr_has_ti', + 'clr_has_ti0', + 'clr_has_ti1', + 'clr_libitem', + 'clr_lzero', + 'clr_lzero0', + 'clr_lzero1', + 'clr_node_info', + 'clr_noret', + 'clr_notcode', + 'clr_notproc', + 'clr_op_type', + 'clr_retfp', + 'clr_terse_struc', + 'clr_tilcmt', + 'clr_usemodsp', + 'clr_usersp', + 'clr_userti', + 'clr_zstroff', + 'cnumber_t___eq__', + 'cnumber_t___ge__', + 'cnumber_t___gt__', + 'cnumber_t___le__', + 'cnumber_t___lt__', + 'cnumber_t___ne__', + 'cnumber_t__print', + 'cnumber_t__value_get', + 'cnumber_t__value_set', + 'cnumber_t_assign', + 'cnumber_t_compare', + 'cnumber_t_nf_get', + 'cnumber_t_nf_set', + 'cnumber_t_value', + 'code_flag', + 'codegen_t_analyze_prolog', + 'codegen_t_emit', + 'codegen_t_emit__SWIG_0', + 'codegen_t_emit__SWIG_1', + 'codegen_t_emit_micro_mvm', + 'codegen_t_gen_micro', + 'codegen_t_ignore_micro_get', + 'codegen_t_ignore_micro_set', + 'codegen_t_ii_get', + 'codegen_t_ii_set', + 'codegen_t_insn_get', + 'codegen_t_insn_set', + 'codegen_t_load_operand', + 'codegen_t_mb_get', + 'codegen_t_mb_set', + 'codegen_t_mba_get', + 'codegen_t_mba_set', + 'collect_stack_trace', + 'compact_til', + 'compare_tinfo', + 'compile_idc_file', + 'compile_idc_snippet', + 'compile_idc_text', + 'compiler_info_t_cm_get', + 'compiler_info_t_cm_set', + 'compiler_info_t_defalign_get', + 'compiler_info_t_defalign_set', + 'compiler_info_t_id_get', + 'compiler_info_t_id_set', + 'compiler_info_t_size_b_get', + 'compiler_info_t_size_b_set', + 'compiler_info_t_size_e_get', + 'compiler_info_t_size_e_set', + 'compiler_info_t_size_i_get', + 'compiler_info_t_size_i_set', + 'compiler_info_t_size_l_get', + 'compiler_info_t_size_l_set', + 'compiler_info_t_size_ldbl_get', + 'compiler_info_t_size_ldbl_set', + 'compiler_info_t_size_ll_get', + 'compiler_info_t_size_ll_set', + 'compiler_info_t_size_s_get', + 'compiler_info_t_size_s_set', + 'const_aloc_visitor_t_visit_location', + 'construct_macro', + 'contains_fixups', + 'continue_process', + 'convert_pt_flags_to_hti', + 'convert_to_user_call', + 'copy_idcv', + 'copy_named_type', + 'copy_sreg_ranges', + 'copy_tinfo_t', + 'create_16bit_data', + 'create_32bit_data', + 'create_align', + 'create_byte', + 'create_bytearray_linput', + 'create_code_viewer', + 'create_custdata', + 'create_data', + 'create_disasm_graph', + 'create_disasm_graph__SWIG_0', + 'create_disasm_graph__SWIG_1', + 'create_double', + 'create_dword', + 'create_empty_widget', + 'create_encoding_helper', + 'create_field_name', + 'create_float', + 'create_generic_linput', + 'create_graph_viewer', + 'create_idcv_ref', + 'create_insn', + 'create_memory_linput', + 'create_menu', + 'create_mutable_graph', + 'create_numbered_type_name', + 'create_outctx', + 'create_oword', + 'create_packed_real', + 'create_qword', + 'create_source_viewer', + 'create_strlit', + 'create_struct', + 'create_switch_table', + 'create_switch_xrefs', + 'create_tbyte', + 'create_tinfo', + 'create_toolbar', + 'create_typedef', + 'create_typedef__SWIG_0', + 'create_typedef__SWIG_1', + 'create_user_graph_place', + 'create_word', + 'create_yword', + 'create_zword', + 'creturn_t___eq__', + 'creturn_t___ge__', + 'creturn_t___gt__', + 'creturn_t___le__', + 'creturn_t___lt__', + 'creturn_t___ne__', + 'creturn_t_compare', + 'cswitch_t___eq__', + 'cswitch_t___ge__', + 'cswitch_t___gt__', + 'cswitch_t___le__', + 'cswitch_t___lt__', + 'cswitch_t___ne__', + 'cswitch_t_cases_get', + 'cswitch_t_cases_set', + 'cswitch_t_compare', + 'cswitch_t_mvnf_get', + 'cswitch_t_mvnf_set', + 'ctext_position_t___eq__', + 'ctext_position_t___ge__', + 'ctext_position_t___gt__', + 'ctext_position_t___le__', + 'ctext_position_t___lt__', + 'ctext_position_t___ne__', + 'ctext_position_t_compare', + 'ctext_position_t_in_ctree', + 'ctext_position_t_lnnum_get', + 'ctext_position_t_lnnum_set', + 'ctext_position_t_x_get', + 'ctext_position_t_x_set', + 'ctext_position_t_y_get', + 'ctext_position_t_y_set', + 'ctree_anchor_t_get_index', + 'ctree_anchor_t_get_itp', + 'ctree_anchor_t_is_blkcmt_anchor', + 'ctree_anchor_t_is_citem_anchor', + 'ctree_anchor_t_is_itp_anchor', + 'ctree_anchor_t_is_lvar_anchor', + 'ctree_anchor_t_is_valid_anchor', + 'ctree_anchor_t_value_get', + 'ctree_anchor_t_value_set', + 'ctree_item_t__get_e', + 'ctree_item_t__get_f', + 'ctree_item_t__get_i', + 'ctree_item_t__get_it', + 'ctree_item_t__get_l', + 'ctree_item_t_citype_get', + 'ctree_item_t_citype_set', + 'ctree_item_t_get_ea', + 'ctree_item_t_get_label_num', + 'ctree_item_t_get_lvar', + 'ctree_item_t_get_memptr', + 'ctree_item_t_is_citem', + 'ctree_item_t_loc_get', + 'ctree_items_t___eq__', + 'ctree_items_t___getitem__', + 'ctree_items_t___len__', + 'ctree_items_t___ne__', + 'ctree_items_t___setitem__', + 'ctree_items_t__del', + 'ctree_items_t_add_unique', + 'ctree_items_t_at', + 'ctree_items_t_begin', + 'ctree_items_t_begin__SWIG_0', + 'ctree_items_t_begin__SWIG_1', + 'ctree_items_t_capacity', + 'ctree_items_t_clear', + 'ctree_items_t_empty', + 'ctree_items_t_end', + 'ctree_items_t_end__SWIG_0', + 'ctree_items_t_end__SWIG_1', + 'ctree_items_t_erase', + 'ctree_items_t_erase__SWIG_0', + 'ctree_items_t_erase__SWIG_1', + 'ctree_items_t_extract', + 'ctree_items_t_find', + 'ctree_items_t_find__SWIG_0', + 'ctree_items_t_find__SWIG_1', + 'ctree_items_t_has', + 'ctree_items_t_inject', + 'ctree_items_t_insert', + 'ctree_items_t_pop_back', + 'ctree_items_t_push_back', + 'ctree_items_t_push_back__SWIG_0', + 'ctree_items_t_push_back__SWIG_1', + 'ctree_items_t_qclear', + 'ctree_items_t_reserve', + 'ctree_items_t_resize', + 'ctree_items_t_resize__SWIG_0', + 'ctree_items_t_resize__SWIG_1', + 'ctree_items_t_size', + 'ctree_items_t_swap', + 'ctree_items_t_truncate', + 'ctree_parentee_t_recalc_parent_types', + 'ctree_visitor_t_apply_to', + 'ctree_visitor_t_apply_to_exprs', + 'ctree_visitor_t_clr_prune', + 'ctree_visitor_t_clr_restart', + 'ctree_visitor_t_cv_flags_get', + 'ctree_visitor_t_cv_flags_set', + 'ctree_visitor_t_is_postorder', + 'ctree_visitor_t_leave_expr', + 'ctree_visitor_t_leave_insn', + 'ctree_visitor_t_maintain_parents', + 'ctree_visitor_t_must_prune', + 'ctree_visitor_t_must_restart', + 'ctree_visitor_t_only_insns', + 'ctree_visitor_t_parent_expr', + 'ctree_visitor_t_parent_insn', + 'ctree_visitor_t_parents_get', + 'ctree_visitor_t_parents_set', + 'ctree_visitor_t_prune_now', + 'ctree_visitor_t_set_restart', + 'ctree_visitor_t_visit_expr', + 'ctree_visitor_t_visit_insn', + 'cust_flag', + 'custfmt_flag', + 'custom_data_type_ids_fids_array___getitem__', + 'custom_data_type_ids_fids_array___len__', + 'custom_data_type_ids_fids_array___setitem__', + 'custom_data_type_ids_fids_array_data_get', + 'custom_data_type_ids_t___getFids', + 'custom_data_type_ids_t_dtid_get', + 'custom_data_type_ids_t_dtid_set', + 'custom_data_type_ids_t_fids_get', + 'custom_data_type_ids_t_fids_set', + 'custom_viewer_jump', + 'cwhile_t___eq__', + 'cwhile_t___ge__', + 'cwhile_t___gt__', + 'cwhile_t___le__', + 'cwhile_t___lt__', + 'cwhile_t___ne__', + 'cwhile_t_compare', + 'data_format_t___get_id', + 'data_format_t_hotkey_get', + 'data_format_t_hotkey_set', + 'data_format_t_is_present_in_menus', + 'data_format_t_menu_name_get', + 'data_format_t_menu_name_set', + 'data_format_t_name_get', + 'data_format_t_name_set', + 'data_format_t_props_get', + 'data_format_t_props_set', + 'data_format_t_text_width_get', + 'data_format_t_text_width_set', + 'data_format_t_value_size_get', + 'data_format_t_value_size_set', + 'data_type_t___get_id', + 'data_type_t_asm_keyword_get', + 'data_type_t_asm_keyword_set', + 'data_type_t_hotkey_get', + 'data_type_t_hotkey_set', + 'data_type_t_is_present_in_menus', + 'data_type_t_menu_name_get', + 'data_type_t_menu_name_set', + 'data_type_t_name_get', + 'data_type_t_name_set', + 'data_type_t_props_get', + 'data_type_t_props_set', + 'data_type_t_value_size_get', + 'data_type_t_value_size_set', + 'dbg_add_bpt_tev', + 'dbg_add_call_tev', + 'dbg_add_debug_event', + 'dbg_add_insn_tev', + 'dbg_add_many_tevs', + 'dbg_add_ret_tev', + 'dbg_add_tev', + 'dbg_add_thread', + 'dbg_appcall', + 'dbg_bin_search', + 'dbg_can_query', + 'dbg_del_thread', + 'dbg_get_input_path', + 'dbg_get_memory_info', + 'dbg_get_name', + 'dbg_get_registers', + 'dbg_get_thread_sreg_base', + 'dbg_is_loaded', + 'dbg_read_memory', + 'dbg_write_memory', + 'debapp_attrs_t_addrsize_get', + 'debapp_attrs_t_addrsize_set', + 'debapp_attrs_t_cbsize_get', + 'debapp_attrs_t_cbsize_set', + 'debapp_attrs_t_is_be_get', + 'debapp_attrs_t_is_be_set', + 'debapp_attrs_t_platform_get', + 'debapp_attrs_t_platform_set', + 'debug_event_t_bpt', + 'debug_event_t_bpt__SWIG_0', + 'debug_event_t_bpt__SWIG_1', + 'debug_event_t_bpt_ea', + 'debug_event_t_clear', + 'debug_event_t_clear_all', + 'debug_event_t_copy', + 'debug_event_t_ea_get', + 'debug_event_t_ea_set', + 'debug_event_t_eid', + 'debug_event_t_exc', + 'debug_event_t_exc__SWIG_0', + 'debug_event_t_exc__SWIG_1', + 'debug_event_t_exit_code', + 'debug_event_t_handled_get', + 'debug_event_t_handled_set', + 'debug_event_t_info', + 'debug_event_t_info__SWIG_0', + 'debug_event_t_info__SWIG_1', + 'debug_event_t_modinfo', + 'debug_event_t_modinfo__SWIG_0', + 'debug_event_t_modinfo__SWIG_1', + 'debug_event_t_pid_get', + 'debug_event_t_pid_set', + 'debug_event_t_set_bpt', + 'debug_event_t_set_eid', + 'debug_event_t_set_exception', + 'debug_event_t_set_exit_code', + 'debug_event_t_set_info', + 'debug_event_t_set_modinfo', + 'debug_event_t_tid_get', + 'debug_event_t_tid_set', + 'debug_hexrays_ctree', + 'dec_flag', + 'decode_insn', + 'decode_preceding_insn', + 'decode_prev_insn', + 'decompile', + 'decompile_func', + 'decompile_many', + 'deep_copy_idcv', + 'default_compiler', + 'define_exception', + 'define_stkvar', + 'del_absbase', + 'del_aflags', + 'del_alignment', + 'del_array_parameters', + 'del_bpt', + 'del_bpt__SWIG_0', + 'del_bpt__SWIG_1', + 'del_bptgrp', + 'del_cref', + 'del_custom_data_type_ids', + 'del_debug_names', + 'del_dref', + 'del_encoding', + 'del_enum', + 'del_enum_member', + 'del_extra_cmt', + 'del_fixup', + 'del_frame', + 'del_func', + 'del_global_name', + 'del_hidden_range', + 'del_hotkey', + 'del_idasgn', + 'del_idc_hotkey', + 'del_idcv_attr', + 'del_ind_purged', + 'del_item_color', + 'del_items', + 'del_local_name', + 'del_mapping', + 'del_member_tinfo', + 'del_named_type', + 'del_node_info', + 'del_numbered_type', + 'del_op_tinfo', + 'del_refinfo', + 'del_regvar', + 'del_segm', + 'del_segment_translations', + 'del_selector', + 'del_source_linnum', + 'del_sourcefile', + 'del_sreg_range', + 'del_stkpnt', + 'del_str_type', + 'del_struc', + 'del_struc_member', + 'del_struc_members', + 'del_switch_info', + 'del_switch_parent', + 'del_til', + 'del_tinfo', + 'del_tinfo_attr', + 'del_tryblks', + 'del_value', + 'del_virt_module', + 'delay_slot_insn', + 'delete_DBG_Hooks', + 'delete_Hexrays_Hooks', + 'delete_IDB_Hooks', + 'delete_IDP_Hooks', + 'delete_TPointDouble', + 'delete_UI_Hooks', + 'delete_View_Hooks', + 'delete___qmutex_t', + 'delete___qsemaphore_t', + 'delete___qthread_t', + 'delete___qtimer_t', + 'delete_action_ctx_base_t', + 'delete_action_desc_t', + 'delete_addon_info_t', + 'delete_aloc_visitor_t', + 'delete_argloc_t', + 'delete_argpart_t', + 'delete_argpartvec_t', + 'delete_array_of_bitsets', + 'delete_array_of_ivlsets', + 'delete_array_of_rangesets', + 'delete_array_parameters_t', + 'delete_array_type_data_t', + 'delete_asm_t', + 'delete_auto_display_t', + 'delete_bgcolors_t', + 'delete_bit_bound_t', + 'delete_bitfield_type_data_t', + 'delete_bitset_t', + 'delete_block_chains_iterator_t', + 'delete_block_chains_t', + 'delete_block_chains_vec_t', + 'delete_boolvec_t', + 'delete_boundaries_iterator_t', + 'delete_boundaries_t', + 'delete_bpt_location_t', + 'delete_bpt_t', + 'delete_bpt_vec_t', + 'delete_bptaddr_t', + 'delete_call_stack_info_t', + 'delete_call_stack_t', + 'delete_callregs_t', + 'delete_carg_t', + 'delete_carglist_t', + 'delete_cases_and_targets_t', + 'delete_casevec_t', + 'delete_casm_t', + 'delete_catch_t', + 'delete_catchvec_t', + 'delete_cblock_t', + 'delete_ccase_t', + 'delete_ccases_t', + 'delete_cdg_insn_iterator_t', + 'delete_cdo_t', + 'delete_ceinsn_t', + 'delete_cexpr_t', + 'delete_cfor_t', + 'delete_cfunc_parentee_t', + 'delete_cfunc_t', + 'delete_cfuncptr_t', + 'delete_cgoto_t', + 'delete_chain_keeper_t', + 'delete_chain_t', + 'delete_chain_visitor_t', + 'delete_channel_redir_t', + 'delete_chooser_item_attrs_t', + 'delete_cif_t', + 'delete_cinsn_t', + 'delete_cinsnptrvec_t', + 'delete_citem_cmt_t', + 'delete_citem_locator_t', + 'delete_citem_t', + 'delete_cloop_t', + 'delete_cnumber_t', + 'delete_codegen_t', + 'delete_compiler_info_t', + 'delete_const_aloc_visitor_t', + 'delete_creturn_t', + 'delete_cswitch_t', + 'delete_ctext_position_t', + 'delete_ctree_anchor_t', + 'delete_ctree_item_t', + 'delete_ctree_items_t', + 'delete_ctree_parentee_t', + 'delete_ctree_visitor_t', + 'delete_custom_data_type_ids_fids_array', + 'delete_custom_data_type_ids_t', + 'delete_cwhile_t', + 'delete_data_format_t', + 'delete_data_type_t', + 'delete_debapp_attrs_t', + 'delete_debug_event_t', + 'delete_disasm_line_t', + 'delete_disasm_text_t', + 'delete_ea_array', + 'delete_ea_name_t', + 'delete_ea_name_vec_t', + 'delete_ea_pointer', + 'delete_eamap_iterator_t', + 'delete_eamap_t', + 'delete_edge_info_t', + 'delete_edge_layout_point_t', + 'delete_edge_segment_t', + 'delete_edge_t', + 'delete_enum_const_t', + 'delete_enum_member_t', + 'delete_enum_member_vec_t', + 'delete_enum_member_visitor_t', + 'delete_enum_type_data_t', + 'delete_enumplace_t', + 'delete_eval_ctx_t', + 'delete_exception_info_t', + 'delete_excinfo_t', + 'delete_excvec_t', + 'delete_extra_cmts', + 'delete_fixup_data_t', + 'delete_fixup_info_t', + 'delete_fnum_array', + 'delete_fnumber_t', + 'delete_func_item_iterator_t', + 'delete_func_parent_iterator_t', + 'delete_func_t', + 'delete_func_tail_iterator_t', + 'delete_func_type_data_t', + 'delete_funcarg_t', + 'delete_funcargvec_t', + 'delete_gco_info_t', + 'delete_generic_linput_t', + 'delete_graph_chains_t', + 'delete_graph_item_t', + 'delete_graph_location_info_t', + 'delete_graph_node_visitor_t', + 'delete_graph_path_visitor_t', + 'delete_graph_visitor_t', + 'delete_group_crinfo_t', + 'delete_hexrays_failure_t', + 'delete_hexwarn_t', + 'delete_hexwarns_t', + 'delete_hidden_range_t', + 'delete_highlighter_cbs_t', + 'delete_history_item_t', + 'delete_history_t', + 'delete_ida_lowertype_helper_t', + 'delete_idaplace_t', + 'delete_idc_global_t', + 'delete_idc_value_t', + 'delete_idc_values_t', + 'delete_idp_desc_t', + 'delete_idp_name_t', + 'delete_imports', + 'delete_insn_t', + 'delete_instant_dbgopts_t', + 'delete_int_pointer', + 'delete_interval_t', + 'delete_intvec_t', + 'delete_ivl_t', + 'delete_ivl_with_name_t', + 'delete_ivlset_t', + 'delete_llabel_t', + 'delete_loader_input_t', + 'delete_loader_t', + 'delete_lochist_entry_t', + 'delete_lochist_t', + 'delete_lock_func', + 'delete_lock_segment', + 'delete_longlongvec_t', + 'delete_lowertype_helper_t', + 'delete_lvar_locator_t', + 'delete_lvar_mapping_iterator_t', + 'delete_lvar_mapping_t', + 'delete_lvar_ref_t', + 'delete_lvar_saved_info_t', + 'delete_lvar_saved_infos_t', + 'delete_lvar_t', + 'delete_lvar_uservec_t', + 'delete_lvars_t', + 'delete_mba_range_iterator_t', + 'delete_mba_ranges_t', + 'delete_mbl_array_t', + 'delete_mblock_t', + 'delete_mcallarg_t', + 'delete_mcallargs_t', + 'delete_mcallinfo_t', + 'delete_mcases_t', + 'delete_member_t', + 'delete_meminfo_vec_t', + 'delete_memory_info_t', + 'delete_memreg_info_t', + 'delete_memreg_infos_t', + 'delete_menu', + 'delete_microcode_filter_t', + 'delete_minsn_t', + 'delete_minsn_visitor_t', + 'delete_mlist_mop_visitor_t', + 'delete_mlist_t', + 'delete_mnumber_t', + 'delete_modinfo_t', + 'delete_mop_addr_t', + 'delete_mop_pair_t', + 'delete_mop_t', + 'delete_mop_visitor_t', + 'delete_mopvec_t', + 'delete_mutable_graph', + 'delete_mutable_graph_t', + 'delete_netnode', + 'delete_node_info_t', + 'delete_node_iterator', + 'delete_node_layout_t', + 'delete_node_ordering_t', + 'delete_number_format_t', + 'delete_op_parent_info_t', + 'delete_op_t', + 'delete_operand_locator_t', + 'delete_operands_array', + 'delete_operator_info_t', + 'delete_opinfo_t', + 'delete_optblock_t', + 'delete_optinsn_t', + 'delete_place_t', + 'delete_plugin_info_t', + 'delete_point_t', + 'delete_pointseq_t', + 'delete_pointvec_t', + 'delete_predicate_t', + 'delete_printop_t', + 'delete_process_info_t', + 'delete_procinfo_vec_t', + 'delete_ptr_type_data_t', + 'delete_qbasic_block_t', + 'delete_qfile_t', + 'delete_qflow_chart_t', + 'delete_qlist_cinsn_t', + 'delete_qlist_cinsn_t_iterator', + 'delete_qmutex_locker_t', + 'delete_qrefcnt_obj_t', + 'delete_qvector_carg_t', + 'delete_qvector_ccase_t', + 'delete_qvector_history_t', + 'delete_qvector_lvar_t', + 'delete_qvector_snapshotvec_t', + 'delete_range_array', + 'delete_range_t', + 'delete_rangeset_t', + 'delete_rangevec_base_t', + 'delete_rangevec_t', + 'delete_rect_t', + 'delete_refinfo_t', + 'delete_reg_info_t', + 'delete_regarg_t', + 'delete_reginfovec_t', + 'delete_register_info_t', + 'delete_regobj_t', + 'delete_regobjs_t', + 'delete_regobjvec_t', + 'delete_regval_t', + 'delete_regvar_array', + 'delete_regvar_t', + 'delete_renderer_info_pos_t', + 'delete_renderer_info_t', + 'delete_renderer_pos_info_t', + 'delete_rlist_t', + 'delete_row_info_t', + 'delete_rrel_t', + 'delete_scattered_aloc_t', + 'delete_scattered_segm_t', + 'delete_scif_t', + 'delete_scif_visitor_t', + 'delete_screen_graph_selection_base_t', + 'delete_screen_graph_selection_t', + 'delete_segm_move_info_t', + 'delete_segm_move_info_vec_t', + 'delete_segm_move_infos_t', + 'delete_segment_t', + 'delete_seh_t', + 'delete_sel_array', + 'delete_sel_pointer', + 'delete_selection_item_t', + 'delete_simd_info_t', + 'delete_simpleline_place_t', + 'delete_simpleline_t', + 'delete_sizevec_t', + 'delete_snapshot_t', + 'delete_sreg_range_t', + 'delete_stkpnt_array', + 'delete_stkpnt_t', + 'delete_stkpnts_t', + 'delete_stkvar_ref_t', + 'delete_strarray_t', + 'delete_string_info_t', + 'delete_strpath_ids_array', + 'delete_strpath_t', + 'delete_struc_t', + 'delete_struct_field_visitor_t', + 'delete_structplace_t', + 'delete_strvec_t', + 'delete_strwinsetup_t', + 'delete_sval_pointer', + 'delete_switch_info_t', + 'delete_switch_table', + 'delete_sync_source_t', + 'delete_tev_info_reg_t', + 'delete_tev_info_t', + 'delete_tev_reg_value_t', + 'delete_tev_reg_values_t', + 'delete_tevinforeg_vec_t', + 'delete_text_sink_t', + 'delete_thread_name_t', + 'delete_tid_array', + 'delete_til_symbol_t', + 'delete_til_t', + 'delete_tinfo_t', + 'delete_tinfo_visitor_t', + 'delete_toolbar', + 'delete_treeloc_t', + 'delete_try_handler_t', + 'delete_tryblk_t', + 'delete_tryblks_t', + 'delete_twinpos_t', + 'delete_type_attr_t', + 'delete_type_attrs_t', + 'delete_type_mods_t', + 'delete_typedef_type_data_t', + 'delete_uchar_array', + 'delete_udc_filter_t', + 'delete_udcall_map_iterator_t', + 'delete_udcall_t', + 'delete_udt_member_t', + 'delete_udt_type_data_t', + 'delete_udtmembervec_t', + 'delete_ui_requests_t', + 'delete_ui_stroff_applicator_t', + 'delete_ui_stroff_op_t', + 'delete_ui_stroff_ops_t', + 'delete_uintvec_t', + 'delete_ulonglongvec_t', + 'delete_unreferenced_stkvars', + 'delete_user_cmts_iterator_t', + 'delete_user_cmts_t', + 'delete_user_graph_place_t', + 'delete_user_iflags_iterator_t', + 'delete_user_iflags_t', + 'delete_user_labels_iterator_t', + 'delete_user_labels_t', + 'delete_user_lvar_modifier_t', + 'delete_user_numforms_iterator_t', + 'delete_user_numforms_t', + 'delete_user_unions_iterator_t', + 'delete_user_unions_t', + 'delete_uval_array', + 'delete_uval_ivl_ivlset_t', + 'delete_uval_ivl_t', + 'delete_valrng_t', + 'delete_valstr_t', + 'delete_valstrs_t', + 'delete_valstrvec_t', + 'delete_var_ref_t', + 'delete_vc_printer_t', + 'delete_vd_failure_t', + 'delete_vd_interr_t', + 'delete_vd_printer_t', + 'delete_vdloc_t', + 'delete_vdui_t', + 'delete_view_mouse_event_location_t', + 'delete_view_mouse_event_t', + 'delete_vivl_t', + 'delete_voff_t', + 'delete_wrong_stkvar_ops', + 'delete_xrefblk_t', + 'delete_xreflist_entry_t', + 'delete_xreflist_t', + 'demangle_name', + 'deref_idcv', + 'deref_ptr', + 'deserialize_tinfo', + 'detach_action_from_menu', + 'detach_action_from_popup', + 'detach_action_from_toolbar', + 'detach_custom_data_format', + 'detach_process', + 'diff_trace_file', + 'disable_bblk_trace', + 'disable_bpt', + 'disable_bpt__SWIG_0', + 'disable_bpt__SWIG_1', + 'disable_flags', + 'disable_func_trace', + 'disable_insn_trace', + 'disable_script_timeout', + 'disable_step_trace', + 'disasm_line_t_at_get', + 'disasm_line_t_at_set', + 'disasm_line_t_bg_color_get', + 'disasm_line_t_bg_color_set', + 'disasm_line_t_is_default_get', + 'disasm_line_t_is_default_set', + 'disasm_line_t_line_get', + 'disasm_line_t_line_set', + 'disasm_line_t_prefix_color_get', + 'disasm_line_t_prefix_color_set', + 'disasm_text_t___getitem__', + 'disasm_text_t___len__', + 'disasm_text_t___setitem__', + 'disasm_text_t_at', + 'disasm_text_t_begin', + 'disasm_text_t_begin__SWIG_0', + 'disasm_text_t_begin__SWIG_1', + 'disasm_text_t_capacity', + 'disasm_text_t_clear', + 'disasm_text_t_empty', + 'disasm_text_t_end', + 'disasm_text_t_end__SWIG_0', + 'disasm_text_t_end__SWIG_1', + 'disasm_text_t_erase', + 'disasm_text_t_erase__SWIG_0', + 'disasm_text_t_erase__SWIG_1', + 'disasm_text_t_extract', + 'disasm_text_t_grow', + 'disasm_text_t_inject', + 'disasm_text_t_insert', + 'disasm_text_t_pop_back', + 'disasm_text_t_push_back', + 'disasm_text_t_push_back__SWIG_0', + 'disasm_text_t_push_back__SWIG_1', + 'disasm_text_t_qclear', + 'disasm_text_t_reserve', + 'disasm_text_t_resize', + 'disasm_text_t_resize__SWIG_0', + 'disasm_text_t_resize__SWIG_1', + 'disasm_text_t_size', + 'disasm_text_t_swap', + 'disasm_text_t_truncate', + 'disown_DBG_Hooks', + 'disown_Hexrays_Hooks', + 'disown_IDB_Hooks', + 'disown_IDP_Hooks', + 'disown_UI_Hooks', + 'disown_View_Hooks', + 'disown_aloc_visitor_t', + 'disown_cfunc_parentee_t', + 'disown_chain_visitor_t', + 'disown_codegen_t', + 'disown_const_aloc_visitor_t', + 'disown_ctree_parentee_t', + 'disown_ctree_visitor_t', + 'disown_enum_member_visitor_t', + 'disown_graph_node_visitor_t', + 'disown_graph_path_visitor_t', + 'disown_graph_visitor_t', + 'disown_highlighter_cbs_t', + 'disown_microcode_filter_t', + 'disown_minsn_visitor_t', + 'disown_mlist_mop_visitor_t', + 'disown_mop_visitor_t', + 'disown_mutable_graph_t', + 'disown_optblock_t', + 'disown_optinsn_t', + 'disown_predicate_t', + 'disown_scif_visitor_t', + 'disown_struct_field_visitor_t', + 'disown_text_sink_t', + 'disown_tinfo_visitor_t', + 'disown_udc_filter_t', + 'disown_ui_stroff_applicator_t', + 'disown_user_lvar_modifier_t', + 'disown_vc_printer_t', + 'disown_vd_printer_t', + 'display_copyright_warning', + 'display_gdl', + 'display_widget', + 'double_flag', + 'dstr', + 'dstr_tinfo', + 'dummy_ptrtype', + 'dump_func_type_data', + 'dword_flag', + 'ea2node', + 'ea2str', + 'ea_array___getitem__', + 'ea_array___setitem__', + 'ea_array_cast', + 'ea_array_frompointer', + 'ea_name_t_ea_get', + 'ea_name_t_ea_set', + 'ea_name_t_name_get', + 'ea_name_t_name_set', + 'ea_name_vec_t___getitem__', + 'ea_name_vec_t___len__', + 'ea_name_vec_t___setitem__', + 'ea_name_vec_t_at', + 'ea_name_vec_t_begin', + 'ea_name_vec_t_begin__SWIG_0', + 'ea_name_vec_t_begin__SWIG_1', + 'ea_name_vec_t_capacity', + 'ea_name_vec_t_clear', + 'ea_name_vec_t_empty', + 'ea_name_vec_t_end', + 'ea_name_vec_t_end__SWIG_0', + 'ea_name_vec_t_end__SWIG_1', + 'ea_name_vec_t_erase', + 'ea_name_vec_t_erase__SWIG_0', + 'ea_name_vec_t_erase__SWIG_1', + 'ea_name_vec_t_extract', + 'ea_name_vec_t_grow', + 'ea_name_vec_t_inject', + 'ea_name_vec_t_insert', + 'ea_name_vec_t_pop_back', + 'ea_name_vec_t_push_back', + 'ea_name_vec_t_push_back__SWIG_0', + 'ea_name_vec_t_push_back__SWIG_1', + 'ea_name_vec_t_qclear', + 'ea_name_vec_t_reserve', + 'ea_name_vec_t_resize', + 'ea_name_vec_t_resize__SWIG_0', + 'ea_name_vec_t_resize__SWIG_1', + 'ea_name_vec_t_size', + 'ea_name_vec_t_swap', + 'ea_name_vec_t_truncate', + 'ea_pointer_assign', + 'ea_pointer_cast', + 'ea_pointer_frompointer', + 'ea_pointer_value', + 'ea_viewer_history_push_and_jump', + 'eamap_begin', + 'eamap_clear', + 'eamap_end', + 'eamap_erase', + 'eamap_find', + 'eamap_first', + 'eamap_free', + 'eamap_insert', + 'eamap_iterator_t___eq__', + 'eamap_iterator_t___ne__', + 'eamap_iterator_t_x_get', + 'eamap_iterator_t_x_set', + 'eamap_new', + 'eamap_next', + 'eamap_prev', + 'eamap_second', + 'eamap_size', + 'eamap_t_at', + 'eamap_t_size', + 'eclose', + 'edge_info_t_color_get', + 'edge_info_t_color_set', + 'edge_info_t_dstoff_get', + 'edge_info_t_dstoff_set', + 'edge_info_t_layout_get', + 'edge_info_t_layout_set', + 'edge_info_t_reverse_layout', + 'edge_info_t_srcoff_get', + 'edge_info_t_srcoff_set', + 'edge_info_t_width_get', + 'edge_info_t_width_set', + 'edge_infos_wrapper_t_clear', + 'edge_infos_wrapper_t_ptr_get', + 'edge_infos_wrapper_t_ptr_set', + 'edge_layout_point_t___eq__', + 'edge_layout_point_t___ne__', + 'edge_layout_point_t_compare', + 'edge_layout_point_t_e_get', + 'edge_layout_point_t_e_set', + 'edge_layout_point_t_pidx_get', + 'edge_layout_point_t_pidx_set', + 'edge_segment_t___lt__', + 'edge_segment_t_e_get', + 'edge_segment_t_e_set', + 'edge_segment_t_length', + 'edge_segment_t_nseg_get', + 'edge_segment_t_nseg_set', + 'edge_segment_t_toright', + 'edge_segment_t_x0_get', + 'edge_segment_t_x0_set', + 'edge_segment_t_x1_get', + 'edge_segment_t_x1_set', + 'edge_t___eq__', + 'edge_t___lt__', + 'edge_t___ne__', + 'edge_t_dst_get', + 'edge_t_dst_set', + 'edge_t_src_get', + 'edge_t_src_set', + 'edit_manual_regions', + 'enable_auto', + 'enable_bblk_trace', + 'enable_bpt', + 'enable_bpt__SWIG_0', + 'enable_bpt__SWIG_1', + 'enable_chooser_item_attrs', + 'enable_extlang_python', + 'enable_flags', + 'enable_func_trace', + 'enable_insn_trace', + 'enable_manual_regions', + 'enable_python_cli', + 'enable_step_trace', + 'encoding_from_strtype', + 'end_type_updating', + 'enum_const_t_serial_get', + 'enum_const_t_serial_set', + 'enum_const_t_tid_get', + 'enum_const_t_tid_set', + 'enum_flag', + 'enum_import_names', + 'enum_member_t___eq__', + 'enum_member_t___ne__', + 'enum_member_t_cmt_get', + 'enum_member_t_cmt_set', + 'enum_member_t_name_get', + 'enum_member_t_name_set', + 'enum_member_t_swap', + 'enum_member_t_value_get', + 'enum_member_t_value_set', + 'enum_member_vec_t___eq__', + 'enum_member_vec_t___getitem__', + 'enum_member_vec_t___len__', + 'enum_member_vec_t___ne__', + 'enum_member_vec_t___setitem__', + 'enum_member_vec_t__del', + 'enum_member_vec_t_add_unique', + 'enum_member_vec_t_at', + 'enum_member_vec_t_begin', + 'enum_member_vec_t_begin__SWIG_0', + 'enum_member_vec_t_begin__SWIG_1', + 'enum_member_vec_t_capacity', + 'enum_member_vec_t_clear', + 'enum_member_vec_t_empty', + 'enum_member_vec_t_end', + 'enum_member_vec_t_end__SWIG_0', + 'enum_member_vec_t_end__SWIG_1', + 'enum_member_vec_t_erase', + 'enum_member_vec_t_erase__SWIG_0', + 'enum_member_vec_t_erase__SWIG_1', + 'enum_member_vec_t_extract', + 'enum_member_vec_t_find', + 'enum_member_vec_t_find__SWIG_0', + 'enum_member_vec_t_find__SWIG_1', + 'enum_member_vec_t_grow', + 'enum_member_vec_t_has', + 'enum_member_vec_t_inject', + 'enum_member_vec_t_insert', + 'enum_member_vec_t_pop_back', + 'enum_member_vec_t_push_back', + 'enum_member_vec_t_push_back__SWIG_0', + 'enum_member_vec_t_push_back__SWIG_1', + 'enum_member_vec_t_qclear', + 'enum_member_vec_t_reserve', + 'enum_member_vec_t_resize', + 'enum_member_vec_t_resize__SWIG_0', + 'enum_member_vec_t_resize__SWIG_1', + 'enum_member_vec_t_size', + 'enum_member_vec_t_swap', + 'enum_member_vec_t_truncate', + 'enum_member_visitor_t_visit_enum_member', + 'enum_type_data_t_bte_get', + 'enum_type_data_t_bte_set', + 'enum_type_data_t_calc_mask', + 'enum_type_data_t_calc_nbytes', + 'enum_type_data_t_group_sizes_get', + 'enum_type_data_t_group_sizes_set', + 'enum_type_data_t_is_64bit', + 'enum_type_data_t_is_char', + 'enum_type_data_t_is_hex', + 'enum_type_data_t_is_sdec', + 'enum_type_data_t_is_udec', + 'enum_type_data_t_swap', + 'enum_type_data_t_taenum_bits_get', + 'enum_type_data_t_taenum_bits_set', + 'enumerate_files', + 'enumplace_t_bmask_get', + 'enumplace_t_bmask_set', + 'enumplace_t_idx_get', + 'enumplace_t_idx_set', + 'enumplace_t_serial_get', + 'enumplace_t_serial_set', + 'enumplace_t_value_get', + 'enumplace_t_value_set', + 'equal_bytes', + 'error', + 'error__varargs__', + 'eval_ctx_t_ea_get', + 'eval_ctx_t_ea_set', + 'eval_expr', + 'eval_idc_expr', + 'exception_info_t_break_on', + 'exception_info_t_code_get', + 'exception_info_t_code_set', + 'exception_info_t_desc_get', + 'exception_info_t_desc_set', + 'exception_info_t_flags_get', + 'exception_info_t_flags_set', + 'exception_info_t_handle', + 'exception_info_t_name_get', + 'exception_info_t_name_set', + 'excinfo_t_can_cont_get', + 'excinfo_t_can_cont_set', + 'excinfo_t_code_get', + 'excinfo_t_code_set', + 'excinfo_t_ea_get', + 'excinfo_t_ea_set', + 'excinfo_t_info_get', + 'excinfo_t_info_set', + 'excvec_t___getitem__', + 'excvec_t___len__', + 'excvec_t___setitem__', + 'excvec_t_at', + 'excvec_t_begin', + 'excvec_t_begin__SWIG_0', + 'excvec_t_begin__SWIG_1', + 'excvec_t_capacity', + 'excvec_t_clear', + 'excvec_t_empty', + 'excvec_t_end', + 'excvec_t_end__SWIG_0', + 'excvec_t_end__SWIG_1', + 'excvec_t_erase', + 'excvec_t_erase__SWIG_0', + 'excvec_t_erase__SWIG_1', + 'excvec_t_extract', + 'excvec_t_grow', + 'excvec_t_inject', + 'excvec_t_insert', + 'excvec_t_pop_back', + 'excvec_t_push_back', + 'excvec_t_push_back__SWIG_0', + 'excvec_t_push_back__SWIG_1', + 'excvec_t_qclear', + 'excvec_t_reserve', + 'excvec_t_resize', + 'excvec_t_resize__SWIG_0', + 'excvec_t_resize__SWIG_1', + 'excvec_t_size', + 'excvec_t_swap', + 'excvec_t_truncate', + 'exec_idc_script', + 'exec_system_script', + 'execute_sync', + 'execute_ui_requests', + 'exist', + 'exist_bpt', + 'exists_fixup', + 'exit_process', + 'expand_struc', + 'extend_sign', + 'extract_argloc', + 'extract_module_from_archive', + 'extract_name', + 'f_any', + 'f_has_cmt', + 'f_has_dummy_name', + 'f_has_extra_cmts', + 'f_has_name', + 'f_has_user_name', + 'f_has_xref', + 'f_is_align', + 'f_is_byte', + 'f_is_code', + 'f_is_custom', + 'f_is_data', + 'f_is_double', + 'f_is_dword', + 'f_is_float', + 'f_is_head', + 'f_is_not_tail', + 'f_is_oword', + 'f_is_pack_real', + 'f_is_qword', + 'f_is_strlit', + 'f_is_struct', + 'f_is_tail', + 'f_is_tbyte', + 'f_is_word', + 'f_is_yword', + 'file2base', + 'find_binary', + 'find_bpt', + 'find_byte', + 'find_byter', + 'find_code', + 'find_custom_data_format', + 'find_custom_data_type', + 'find_custom_fixup', + 'find_custom_refinfo', + 'find_data', + 'find_defined', + 'find_error', + 'find_free_selector', + 'find_func_bounds', + 'find_idc_class', + 'find_idc_func', + 'find_idc_gvar', + 'find_imm', + 'find_not_func', + 'find_notype', + 'find_plugin', + 'find_regvar', + 'find_regvar__SWIG_0', + 'find_regvar__SWIG_1', + 'find_selector', + 'find_suspop', + 'find_syseh', + 'find_text', + 'find_tinfo_udt_member', + 'find_unknown', + 'find_widget', + 'first_idcv_attr', + 'first_named_type', + 'fixup_data_t_calc_size', + 'fixup_data_t_clr_extdef', + 'fixup_data_t_clr_unused', + 'fixup_data_t_displacement_get', + 'fixup_data_t_displacement_set', + 'fixup_data_t_get', + 'fixup_data_t_get_base', + 'fixup_data_t_get_desc', + 'fixup_data_t_get_flags', + 'fixup_data_t_get_handler', + 'fixup_data_t_get_type', + 'fixup_data_t_get_value', + 'fixup_data_t_has_base', + 'fixup_data_t_is_custom', + 'fixup_data_t_is_extdef', + 'fixup_data_t_is_unused', + 'fixup_data_t_off_get', + 'fixup_data_t_off_set', + 'fixup_data_t_patch_value', + 'fixup_data_t_sel_get', + 'fixup_data_t_sel_set', + 'fixup_data_t_set', + 'fixup_data_t_set_base', + 'fixup_data_t_set_extdef', + 'fixup_data_t_set_sel', + 'fixup_data_t_set_target_sel', + 'fixup_data_t_set_type', + 'fixup_data_t_set_type_and_flags', + 'fixup_data_t_set_unused', + 'fixup_data_t_was_created', + 'fixup_info_t_ea_get', + 'fixup_info_t_ea_set', + 'fixup_info_t_fd_get', + 'fixup_info_t_fd_set', + 'float_flag', + 'flt_flag', + 'flush_buffers', + 'fnum_array___getitem__', + 'fnum_array___len__', + 'fnum_array___setitem__', + 'fnum_array_data_get', + 'fnumber_t___eq__', + 'fnumber_t___ge__', + 'fnumber_t___get_fnum', + 'fnumber_t___gt__', + 'fnumber_t___le__', + 'fnumber_t___lt__', + 'fnumber_t___ne__', + 'fnumber_t__print', + 'fnumber_t_compare', + 'fnumber_t_dereference_const_uint16', + 'fnumber_t_dereference_uint16', + 'fnumber_t_fnum_get', + 'fnumber_t_fnum_set', + 'fnumber_t_nbytes_get', + 'fnumber_t_nbytes_set', + 'fopenA', + 'fopenM', + 'fopenRB', + 'fopenRT', + 'fopenWB', + 'fopenWT', + 'for_all_arglocs', + 'for_all_const_arglocs', + 'for_all_enum_members', + 'force_name', + 'forget_problem', + 'format_basestring', + 'formchgcbfa_close', + 'formchgcbfa_enable_field', + 'formchgcbfa_get_field_value', + 'formchgcbfa_get_focused_field', + 'formchgcbfa_move_field', + 'formchgcbfa_refresh_field', + 'formchgcbfa_set_field_value', + 'formchgcbfa_set_focused_field', + 'formchgcbfa_show_field', + 'frame_off_args', + 'frame_off_lvars', + 'frame_off_retaddr', + 'frame_off_savregs', + 'free_chunk', + 'free_custom_icon', + 'free_idcv', + 'free_til', + 'func_contains', + 'func_does_return', + 'func_has_stkframe_hole', + 'func_item_iterator_decode_preceding_insn', + 'func_item_iterator_decode_prev_insn', + 'func_item_iterator_next', + 'func_item_iterator_prev', + 'func_item_iterator_t___next__', + 'func_item_iterator_t_chunk', + 'func_item_iterator_t_current', + 'func_item_iterator_t_decode_preceding_insn', + 'func_item_iterator_t_decode_prev_insn', + 'func_item_iterator_t_first', + 'func_item_iterator_t_last', + 'func_item_iterator_t_next_addr', + 'func_item_iterator_t_next_code', + 'func_item_iterator_t_next_data', + 'func_item_iterator_t_next_head', + 'func_item_iterator_t_next_not_tail', + 'func_item_iterator_t_prev', + 'func_item_iterator_t_prev_addr', + 'func_item_iterator_t_prev_code', + 'func_item_iterator_t_prev_data', + 'func_item_iterator_t_prev_head', + 'func_item_iterator_t_prev_not_tail', + 'func_item_iterator_t_set', + 'func_item_iterator_t_set_range', + 'func_parent_iterator_set', + 'func_parent_iterator_t___next__', + 'func_parent_iterator_t_first', + 'func_parent_iterator_t_last', + 'func_parent_iterator_t_parent', + 'func_parent_iterator_t_prev', + 'func_parent_iterator_t_reset_fnt', + 'func_parent_iterator_t_set', + 'func_t___get_points__', + 'func_t___get_regvars__', + 'func_t___get_tails__', + 'func_t__from_ptrval__', + 'func_t_analyzed_sp', + 'func_t_argsize_get', + 'func_t_argsize_set', + 'func_t_color_get', + 'func_t_color_set', + 'func_t_does_return', + 'func_t_flags_get', + 'func_t_flags_set', + 'func_t_fpd_get', + 'func_t_fpd_set', + 'func_t_frame_get', + 'func_t_frame_set', + 'func_t_frregs_get', + 'func_t_frregs_set', + 'func_t_frsize_get', + 'func_t_frsize_set', + 'func_t_is_far', + 'func_t_llabelqty_get', + 'func_t_llabelqty_set', + 'func_t_llabels_get', + 'func_t_llabels_set', + 'func_t_need_prolog_analysis', + 'func_t_owner_get', + 'func_t_owner_set', + 'func_t_pntqty_get', + 'func_t_pntqty_set', + 'func_t_points_get', + 'func_t_points_set', + 'func_t_referers_get', + 'func_t_referers_set', + 'func_t_refqty_get', + 'func_t_refqty_set', + 'func_t_regargqty_get', + 'func_t_regargqty_set', + 'func_t_regargs_get', + 'func_t_regargs_set', + 'func_t_regvarqty_get', + 'func_t_regvarqty_set', + 'func_t_regvars_get', + 'func_t_regvars_set', + 'func_t_tailqty_get', + 'func_t_tailqty_set', + 'func_t_tails_get', + 'func_t_tails_set', + 'func_tail_iterator_set', + 'func_tail_iterator_set_ea', + 'func_tail_iterator_t___next__', + 'func_tail_iterator_t_chunk', + 'func_tail_iterator_t_first', + 'func_tail_iterator_t_last', + 'func_tail_iterator_t_main', + 'func_tail_iterator_t_prev', + 'func_tail_iterator_t_set', + 'func_tail_iterator_t_set_ea', + 'func_tail_iterator_t_set_range', + 'func_type_data_t_cc_get', + 'func_type_data_t_cc_set', + 'func_type_data_t_dump', + 'func_type_data_t_flags_get', + 'func_type_data_t_flags_set', + 'func_type_data_t_get_call_method', + 'func_type_data_t_guess_cc', + 'func_type_data_t_is_high', + 'func_type_data_t_is_noret', + 'func_type_data_t_is_pure', + 'func_type_data_t_is_vararg_cc', + 'func_type_data_t_retloc_get', + 'func_type_data_t_retloc_set', + 'func_type_data_t_rettype_get', + 'func_type_data_t_rettype_set', + 'func_type_data_t_spoiled_get', + 'func_type_data_t_spoiled_set', + 'func_type_data_t_stkargs_get', + 'func_type_data_t_stkargs_set', + 'func_type_data_t_swap', + 'funcarg_t___eq__', + 'funcarg_t___ne__', + 'funcarg_t_argloc_get', + 'funcarg_t_argloc_set', + 'funcarg_t_cmt_get', + 'funcarg_t_cmt_set', + 'funcarg_t_flags_get', + 'funcarg_t_flags_set', + 'funcarg_t_name_get', + 'funcarg_t_name_set', + 'funcarg_t_type_get', + 'funcarg_t_type_set', + 'funcargvec_t___eq__', + 'funcargvec_t___getitem__', + 'funcargvec_t___len__', + 'funcargvec_t___ne__', + 'funcargvec_t___setitem__', + 'funcargvec_t__del', + 'funcargvec_t_add_unique', + 'funcargvec_t_at', + 'funcargvec_t_begin', + 'funcargvec_t_begin__SWIG_0', + 'funcargvec_t_begin__SWIG_1', + 'funcargvec_t_capacity', + 'funcargvec_t_clear', + 'funcargvec_t_empty', + 'funcargvec_t_end', + 'funcargvec_t_end__SWIG_0', + 'funcargvec_t_end__SWIG_1', + 'funcargvec_t_erase', + 'funcargvec_t_erase__SWIG_0', + 'funcargvec_t_erase__SWIG_1', + 'funcargvec_t_extract', + 'funcargvec_t_find', + 'funcargvec_t_find__SWIG_0', + 'funcargvec_t_find__SWIG_1', + 'funcargvec_t_grow', + 'funcargvec_t_has', + 'funcargvec_t_inject', + 'funcargvec_t_insert', + 'funcargvec_t_pop_back', + 'funcargvec_t_push_back', + 'funcargvec_t_push_back__SWIG_0', + 'funcargvec_t_push_back__SWIG_1', + 'funcargvec_t_qclear', + 'funcargvec_t_reserve', + 'funcargvec_t_resize', + 'funcargvec_t_resize__SWIG_0', + 'funcargvec_t_resize__SWIG_1', + 'funcargvec_t_size', + 'funcargvec_t_swap', + 'funcargvec_t_truncate', + 'gcc_layout', + 'gco_info_t_append_to_list', + 'gco_info_t_flags_get', + 'gco_info_t_flags_set', + 'gco_info_t_is_def', + 'gco_info_t_is_reg', + 'gco_info_t_is_use', + 'gco_info_t_name_get', + 'gco_info_t_name_set', + 'gco_info_t_size_get', + 'gco_info_t_size_set', + 'gen_complex_call_chart', + 'gen_decorate_name', + 'gen_disasm_text', + 'gen_exe_file', + 'gen_file', + 'gen_fix_fixups', + 'gen_flow_graph', + 'gen_gdl', + 'gen_idb_event', + 'gen_idb_event__varargs__', + 'gen_microcode', + 'gen_simple_call_chart', + 'gen_use_arg_tinfos', + 'generate_disasm_line', + 'generate_disassembly', + 'generic_linput_t_blocksize_get', + 'generic_linput_t_blocksize_set', + 'generic_linput_t_filesize_get', + 'generic_linput_t_filesize_set', + 'generic_linput_t_read', + 'get_16bit', + 'get_32bit', + 'get_64bit', + 'get_8bit', + 'get_abi_name', + 'get_absbase', + 'get_action_checkable', + 'get_action_checked', + 'get_action_icon', + 'get_action_label', + 'get_action_shortcut', + 'get_action_state', + 'get_action_tooltip', + 'get_action_visibility', + 'get_active_modal_widget', + 'get_addon_info', + 'get_addon_info_idx', + 'get_aflags', + 'get_alias_target', + 'get_alignment', + 'get_archive_path', + 'get_arg_addrs', + 'get_array_parameters', + 'get_asm_inc_file', + 'get_auto_display', + 'get_auto_state', + 'get_base_type', + 'get_basic_file_type', + 'get_bblk_trace_options', + 'get_best_fit_member', + 'get_bmask_cmt', + 'get_bmask_name', + 'get_bpt', + 'get_bpt_group', + 'get_bpt_qty', + 'get_bpt_tev_ea', + 'get_bptloc_string', + 'get_byte', + 'get_bytes', + 'get_bytes_and_mask', + 'get_c_header_path', + 'get_c_macros', + 'get_call_tev_callee', + 'get_chooser_data', + 'get_chooser_obj', + 'get_cmt', + 'get_colored_demangled_name', + 'get_colored_long_name', + 'get_colored_name', + 'get_colored_short_name', + 'get_comp', + 'get_compiler_abbr', + 'get_compiler_name', + 'get_compilers', + 'get_cp_validity', + 'get_ctype_name', + 'get_curline', + 'get_current_idasgn', + 'get_current_operand', + 'get_current_source_file', + 'get_current_source_line', + 'get_current_thread', + 'get_current_viewer', + 'get_current_widget', + 'get_cursor', + 'get_custom_data_format', + 'get_custom_data_formats', + 'get_custom_data_type', + 'get_custom_data_type_ids', + 'get_custom_data_types', + 'get_custom_refinfo', + 'get_custom_viewer_curline', + 'get_custom_viewer_location', + 'get_custom_viewer_place', + 'get_data_elsize', + 'get_data_value', + 'get_db_byte', + 'get_dbg_byte', + 'get_dbg_memory_info', + 'get_dbg_reg_info', + 'get_debug_event', + 'get_debug_name', + 'get_debug_name_ea', + 'get_debug_names', + 'get_debug_names__SWIG_0', + 'get_debug_names__SWIG_1', + 'get_debugger_event_cond', + 'get_default_encoding_idx', + 'get_default_radix', + 'get_default_reftype', + 'get_defsr', + 'get_demangled_name', + 'get_dtype_by_size', + 'get_dtype_flag', + 'get_dtype_size', + 'get_dword', + 'get_ea_name', + 'get_ea_viewer_history_info', + 'get_effective_spd', + 'get_elf_debug_file_directory', + 'get_encoding_bpu', + 'get_encoding_name', + 'get_encoding_qty', + 'get_entry', + 'get_entry_forwarder', + 'get_entry_name', + 'get_entry_ordinal', + 'get_entry_qty', + 'get_enum', + 'get_enum_cmt', + 'get_enum_flag', + 'get_enum_id', + 'get_enum_idx', + 'get_enum_member', + 'get_enum_member_bmask', + 'get_enum_member_by_name', + 'get_enum_member_cmt', + 'get_enum_member_enum', + 'get_enum_member_expr', + 'get_enum_member_name', + 'get_enum_member_serial', + 'get_enum_member_value', + 'get_enum_name', + 'get_enum_name2', + 'get_enum_qty', + 'get_enum_size', + 'get_enum_type_ordinal', + 'get_enum_width', + 'get_event_bpt_hea', + 'get_event_exc_code', + 'get_event_exc_ea', + 'get_event_exc_info', + 'get_event_info', + 'get_event_module_base', + 'get_event_module_name', + 'get_event_module_size', + 'get_extra_cmt', + 'get_fchunk', + 'get_fchunk_num', + 'get_fchunk_qty', + 'get_fchunk_referer', + 'get_file_type_name', + 'get_fileregion_ea', + 'get_fileregion_offset', + 'get_first_bmask', + 'get_first_cref_from', + 'get_first_cref_to', + 'get_first_dref_from', + 'get_first_dref_to', + 'get_first_enum_member', + 'get_first_fcref_from', + 'get_first_fcref_to', + 'get_first_fixup_ea', + 'get_first_free_extra_cmtidx', + 'get_first_hidden_range', + 'get_first_module', + 'get_first_seg', + 'get_first_serial_enum_member', + 'get_first_struc_idx', + 'get_fixup', + 'get_fixup_desc', + 'get_fixup_handler', + 'get_fixup_value', + 'get_fixups', + 'get_flags', + 'get_flags_by_size', + 'get_flags_ex', + 'get_float_type', + 'get_forced_operand', + 'get_frame', + 'get_frame__SWIG_0', + 'get_frame__SWIG_1', + 'get_frame_part', + 'get_frame_retsize', + 'get_frame_size', + 'get_full_data_elsize', + 'get_full_flags', + 'get_full_type', + 'get_func', + 'get_func_bitness', + 'get_func_bits', + 'get_func_by_frame', + 'get_func_bytes', + 'get_func_chunknum', + 'get_func_cmt', + 'get_func_name', + 'get_func_num', + 'get_func_qty', + 'get_func_ranges', + 'get_func_trace_options', + 'get_global_var', + 'get_gotea', + 'get_graph_viewer', + 'get_group_selector', + 'get_grp_bpts', + 'get_hexdump_ea', + 'get_hexrays_version', + 'get_hidden_range', + 'get_hidden_range_num', + 'get_hidden_range_qty', + 'get_highlight', + 'get_ida_subdirs', + 'get_idainfo_by_type', + 'get_idasgn_desc', + 'get_idasgn_desc_with_matches', + 'get_idasgn_qty', + 'get_idasgn_title', + 'get_idati', + 'get_idb_notifier_addr', + 'get_idb_notifier_ud_addr', + 'get_idc_filename', + 'get_idcv_attr', + 'get_idcv_class_name', + 'get_idcv_slice', + 'get_idp_name', + 'get_idp_notifier_addr', + 'get_idp_notifier_ud_addr', + 'get_ids_modnode', + 'get_imagebase', + 'get_immvals', + 'get_import_module_name', + 'get_import_module_qty', + 'get_ind_purged', + 'get_inf_structure', + 'get_input_file_path', + 'get_insn_tev_reg_mem', + 'get_insn_tev_reg_result', + 'get_insn_tev_reg_val', + 'get_insn_trace_options', + 'get_int_type_by_width_and_sign', + 'get_ip_val', + 'get_item_color', + 'get_item_end', + 'get_item_flag', + 'get_item_head', + 'get_item_size', + 'get_kernel_version', + 'get_key_code', + 'get_last_bmask', + 'get_last_enum_member', + 'get_last_hidden_range', + 'get_last_seg', + 'get_last_serial_enum_member', + 'get_last_struc_idx', + 'get_linput_type', + 'get_local_var', + 'get_local_vars', + 'get_long_name', + 'get_lookback', + 'get_manual_insn', + 'get_manual_regions', + 'get_manual_regions__SWIG_0', + 'get_manual_regions__SWIG_1', + 'get_mapping', + 'get_mappings_qty', + 'get_mark_comment', + 'get_marked_pos', + 'get_max_offset', + 'get_max_strlit_length', + 'get_member', + 'get_member_by_fullname', + 'get_member_by_id', + 'get_member_by_name', + 'get_member_cmt', + 'get_member_fullname', + 'get_member_id', + 'get_member_name', + 'get_member_size', + 'get_member_struc', + 'get_member_tinfo', + 'get_member_type', + 'get_merror_desc', + 'get_min_spd_ea', + 'get_module_info', + 'get_mreg_name', + 'get_name', + 'get_name_base_ea', + 'get_name_color', + 'get_name_ea', + 'get_name_expr', + 'get_name_value', + 'get_named_type', + 'get_named_type64', + 'get_navband_ea', + 'get_navband_pixel', + 'get_next_bmask', + 'get_next_cref_from', + 'get_next_cref_to', + 'get_next_dref_from', + 'get_next_dref_to', + 'get_next_enum_member', + 'get_next_fchunk', + 'get_next_fcref_from', + 'get_next_fcref_to', + 'get_next_fixup_ea', + 'get_next_func', + 'get_next_func_addr', + 'get_next_hidden_range', + 'get_next_member_idx', + 'get_next_module', + 'get_next_seg', + 'get_next_serial_enum_member', + 'get_next_struc_idx', + 'get_nice_colored_name', + 'get_nlist_ea', + 'get_nlist_idx', + 'get_nlist_name', + 'get_nlist_size', + 'get_node_info', + 'get_numbered_type', + 'get_numbered_type_name', + 'get_octet', + 'get_offbase', + 'get_offset_expr', + 'get_offset_expression', + 'get_op_signness', + 'get_op_tinfo', + 'get_opinfo', + 'get_opnum', + 'get_optype_flags0', + 'get_optype_flags1', + 'get_or_guess_member_tinfo', + 'get_ordinal_from_idb_type', + 'get_ordinal_qty', + 'get_original_byte', + 'get_original_dword', + 'get_original_qword', + 'get_original_word', + 'get_outfile_encoding_idx', + 'get_output_curline', + 'get_output_cursor', + 'get_output_selected_text', + 'get_path', + 'get_place_class', + 'get_place_class_id', + 'get_place_class_template', + 'get_plugin_options', + 'get_predef_insn_cmt', + 'get_prev_bmask', + 'get_prev_enum_member', + 'get_prev_fchunk', + 'get_prev_fixup_ea', + 'get_prev_func', + 'get_prev_func_addr', + 'get_prev_hidden_range', + 'get_prev_member_idx', + 'get_prev_seg', + 'get_prev_serial_enum_member', + 'get_prev_sreg_range', + 'get_prev_struc_idx', + 'get_printable_immvals', + 'get_problem', + 'get_problem_desc', + 'get_problem_name', + 'get_process_options', + 'get_process_state', + 'get_processes', + 'get_qword', + 'get_radix', + 'get_refinfo', + 'get_reftype_by_size', + 'get_reg_info', + 'get_reg_name', + 'get_reg_val', + 'get_reg_val__SWIG_0', + 'get_reg_val__SWIG_1', + 'get_reg_val__SWIG_2', + 'get_reg_vals', + 'get_registered_actions', + 'get_ret_tev_return', + 'get_root_filename', + 'get_running_notification', + 'get_running_request', + 'get_scalar_bt', + 'get_screen_ea', + 'get_segm_base', + 'get_segm_by_name', + 'get_segm_by_sel', + 'get_segm_class', + 'get_segm_name', + 'get_segm_num', + 'get_segm_para', + 'get_segm_qty', + 'get_segment_alignment', + 'get_segment_cmt', + 'get_segment_combination', + 'get_segment_translations', + 'get_selector_qty', + 'get_short_name', + 'get_signed_mcode', + 'get_source_linnum', + 'get_sourcefile', + 'get_sp_delta', + 'get_sp_val', + 'get_spd', + 'get_special_folder', + 'get_sptr', + 'get_srcinfo_provider', + 'get_sreg', + 'get_sreg_range', + 'get_sreg_range_num', + 'get_sreg_ranges_qty', + 'get_step_trace_options', + 'get_stkvar', + 'get_stock_tinfo', + 'get_str_encoding_idx', + 'get_str_term1', + 'get_str_term2', + 'get_str_type', + 'get_str_type_code', + 'get_strlist_item', + 'get_strlist_options', + 'get_strlist_qty', + 'get_strlit_contents', + 'get_stroff_path', + 'get_strtype_bpu', + 'get_struc', + 'get_struc_by_idx', + 'get_struc_cmt', + 'get_struc_first_offset', + 'get_struc_id', + 'get_struc_idx', + 'get_struc_last_offset', + 'get_struc_name', + 'get_struc_next_offset', + 'get_struc_prev_offset', + 'get_struc_qty', + 'get_struc_size', + 'get_struc_size__SWIG_0', + 'get_struc_size__SWIG_1', + 'get_switch_info', + 'get_switch_parent', + 'get_tab_size', + 'get_temp_regs', + 'get_tev_ea', + 'get_tev_event', + 'get_tev_info', + 'get_tev_memory_info', + 'get_tev_qty', + 'get_tev_tid', + 'get_tev_type', + 'get_thread_qty', + 'get_tinfo', + 'get_tinfo_attr', + 'get_tinfo_attrs', + 'get_tinfo_details', + 'get_tinfo_pdata', + 'get_tinfo_property', + 'get_tinfo_size', + 'get_trace_base_address', + 'get_trace_file_desc', + 'get_trace_platform', + 'get_tryblks', + 'get_type', + 'get_type_flags', + 'get_type_ordinal', + 'get_unk_type', + 'get_unsigned_mcode', + 'get_user_idadir', + 'get_user_strlist_options', + 'get_view_renderer_type', + 'get_viewer_graph', + 'get_viewer_place_type', + 'get_viewer_user_data', + 'get_visible_name', + 'get_visible_segm_name', + 'get_wide_byte', + 'get_wide_dword', + 'get_wide_word', + 'get_widget_title', + 'get_widget_type', + 'get_widget_vdui', + 'get_window_id', + 'get_word', + 'get_zero_ranges', + 'getb_reginsn', + 'getf_reginsn', + 'getn_bpt', + 'getn_enum', + 'getn_fchunk', + 'getn_func', + 'getn_hidden_range', + 'getn_selector', + 'getn_sreg_range', + 'getn_thread', + 'getn_thread_name', + 'getnode', + 'getnseg', + 'getseg', + 'getsysfile', + 'graph_chains_t_acquire', + 'graph_chains_t_for_all_chains', + 'graph_chains_t_is_locked', + 'graph_chains_t_release', + 'graph_chains_t_swap', + 'graph_item_t_b_get', + 'graph_item_t_b_set', + 'graph_item_t_e_get', + 'graph_item_t_e_set', + 'graph_item_t_elp_get', + 'graph_item_t_elp_set', + 'graph_item_t_is_edge', + 'graph_item_t_is_node', + 'graph_item_t_n_get', + 'graph_item_t_n_set', + 'graph_item_t_p_get', + 'graph_item_t_p_set', + 'graph_item_t_type_get', + 'graph_item_t_type_set', + 'graph_location_info_t___eq__', + 'graph_location_info_t___ne__', + 'graph_location_info_t_orgx_get', + 'graph_location_info_t_orgx_set', + 'graph_location_info_t_orgy_get', + 'graph_location_info_t_orgy_set', + 'graph_location_info_t_zoom_get', + 'graph_location_info_t_zoom_set', + 'graph_node_visitor_t_is_forbidden_edge', + 'graph_node_visitor_t_is_visited', + 'graph_node_visitor_t_reinit', + 'graph_node_visitor_t_set_visited', + 'graph_node_visitor_t_visit_node', + 'graph_path_visitor_t_path_get', + 'graph_path_visitor_t_path_set', + 'graph_path_visitor_t_prune_get', + 'graph_path_visitor_t_prune_set', + 'graph_path_visitor_t_walk_backward', + 'graph_path_visitor_t_walk_forward', + 'graph_trace', + 'graph_visitor_t_visit_edge', + 'graph_visitor_t_visit_node', + 'group_crinfo_t_nodes_get', + 'group_crinfo_t_nodes_set', + 'group_crinfo_t_text_get', + 'group_crinfo_t_text_set', + 'guess_func_cc', + 'guess_table_address', + 'guess_table_size', + 'guess_tinfo', + 'handle_debug_event', + 'has_any_name', + 'has_auto_name', + 'has_cached_cfunc', + 'has_cf_chg', + 'has_cf_use', + 'has_cmt', + 'has_dummy_name', + 'has_external_refs', + 'has_extra_cmts', + 'has_immd', + 'has_insn_feature', + 'has_lname', + 'has_name', + 'has_regvar', + 'has_ti', + 'has_ti0', + 'has_ti1', + 'has_user_name', + 'has_value', + 'has_xref', + 'hex_flag', + 'hexrays_alloc', + 'hexrays_failure_t_code_get', + 'hexrays_failure_t_code_set', + 'hexrays_failure_t_desc', + 'hexrays_failure_t_errea_get', + 'hexrays_failure_t_errea_set', + 'hexrays_failure_t_str_get', + 'hexrays_failure_t_str_set', + 'hexrays_free', + 'hexwarn_t___eq__', + 'hexwarn_t___ge__', + 'hexwarn_t___gt__', + 'hexwarn_t___le__', + 'hexwarn_t___lt__', + 'hexwarn_t___ne__', + 'hexwarn_t_compare', + 'hexwarn_t_ea_get', + 'hexwarn_t_ea_set', + 'hexwarn_t_id_get', + 'hexwarn_t_id_set', + 'hexwarn_t_text_get', + 'hexwarn_t_text_set', + 'hexwarns_t___eq__', + 'hexwarns_t___getitem__', + 'hexwarns_t___len__', + 'hexwarns_t___ne__', + 'hexwarns_t___setitem__', + 'hexwarns_t__del', + 'hexwarns_t_add_unique', + 'hexwarns_t_at', + 'hexwarns_t_begin', + 'hexwarns_t_begin__SWIG_0', + 'hexwarns_t_begin__SWIG_1', + 'hexwarns_t_capacity', + 'hexwarns_t_clear', + 'hexwarns_t_empty', + 'hexwarns_t_end', + 'hexwarns_t_end__SWIG_0', + 'hexwarns_t_end__SWIG_1', + 'hexwarns_t_erase', + 'hexwarns_t_erase__SWIG_0', + 'hexwarns_t_erase__SWIG_1', + 'hexwarns_t_extract', + 'hexwarns_t_find', + 'hexwarns_t_find__SWIG_0', + 'hexwarns_t_find__SWIG_1', + 'hexwarns_t_grow', + 'hexwarns_t_has', + 'hexwarns_t_inject', + 'hexwarns_t_insert', + 'hexwarns_t_pop_back', + 'hexwarns_t_push_back', + 'hexwarns_t_push_back__SWIG_0', + 'hexwarns_t_push_back__SWIG_1', + 'hexwarns_t_qclear', + 'hexwarns_t_reserve', + 'hexwarns_t_resize', + 'hexwarns_t_resize__SWIG_0', + 'hexwarns_t_resize__SWIG_1', + 'hexwarns_t_size', + 'hexwarns_t_swap', + 'hexwarns_t_truncate', + 'hidden_range_t_color_get', + 'hidden_range_t_color_set', + 'hidden_range_t_description_get', + 'hidden_range_t_description_set', + 'hidden_range_t_footer_get', + 'hidden_range_t_footer_set', + 'hidden_range_t_header_get', + 'hidden_range_t_header_set', + 'hidden_range_t_visible_get', + 'hidden_range_t_visible_set', + 'hide_all_bpts', + 'hide_border', + 'hide_item', + 'hide_name', + 'hide_wait_box', + 'highlighter_cbs_t_cur_block_state', + 'highlighter_cbs_t_prev_block_state', + 'highlighter_cbs_t_set_block_state', + 'highlighter_cbs_t_set_style', + 'history_item_t_ea_get', + 'history_item_t_ea_set', + 'history_item_t_end_get', + 'history_item_t_end_set', + 'history_t_pop', + 'history_t_push', + 'history_t_top', + 'history_t_top__SWIG_0', + 'history_t_top__SWIG_1', + 'ida_lowertype_helper_t_func_has_stkframe_hole', + 'ida_lowertype_helper_t_get_func_purged_bytes', + 'idadir', + 'idainfo_abibits_get', + 'idainfo_abibits_set', + 'idainfo_af2_get', + 'idainfo_af2_set', + 'idainfo_af_get', + 'idainfo_af_set', + 'idainfo_appcall_options_get', + 'idainfo_appcall_options_set', + 'idainfo_apptype_get', + 'idainfo_apptype_set', + 'idainfo_asmtype_get', + 'idainfo_asmtype_set', + 'idainfo_baseaddr_get', + 'idainfo_baseaddr_set', + 'idainfo_bin_prefix_size_get', + 'idainfo_bin_prefix_size_set', + 'idainfo_cc_get', + 'idainfo_cc_set', + 'idainfo_comment_get', + 'idainfo_comment_set', + 'idainfo_database_change_count_get', + 'idainfo_database_change_count_set', + 'idainfo_datatypes_get', + 'idainfo_datatypes_set', + 'idainfo_demnames_get', + 'idainfo_demnames_set', + 'idainfo_filetype_get', + 'idainfo_filetype_set', + 'idainfo_get_abiname', + 'idainfo_get_maxEA', + 'idainfo_get_minEA', + 'idainfo_get_procName', + 'idainfo_highoff_get', + 'idainfo_highoff_set', + 'idainfo_indent_get', + 'idainfo_indent_set', + 'idainfo_lenxref_get', + 'idainfo_lenxref_set', + 'idainfo_lflags_get', + 'idainfo_lflags_set', + 'idainfo_listnames_get', + 'idainfo_listnames_set', + 'idainfo_long_demnames_get', + 'idainfo_long_demnames_set', + 'idainfo_lowoff_get', + 'idainfo_lowoff_set', + 'idainfo_main_get', + 'idainfo_main_set', + 'idainfo_margin_get', + 'idainfo_margin_set', + 'idainfo_max_autoname_len_get', + 'idainfo_max_autoname_len_set', + 'idainfo_max_ea_get', + 'idainfo_max_ea_set', + 'idainfo_maxref_get', + 'idainfo_maxref_set', + 'idainfo_min_ea_get', + 'idainfo_min_ea_set', + 'idainfo_nametype_get', + 'idainfo_nametype_set', + 'idainfo_omax_ea_get', + 'idainfo_omax_ea_set', + 'idainfo_omin_ea_get', + 'idainfo_omin_ea_set', + 'idainfo_ostype_get', + 'idainfo_ostype_set', + 'idainfo_outflags_get', + 'idainfo_outflags_set', + 'idainfo_procname_get', + 'idainfo_procname_set', + 'idainfo_refcmtnum_get', + 'idainfo_refcmtnum_set', + 'idainfo_s_cmtflg_get', + 'idainfo_s_cmtflg_set', + 'idainfo_s_genflags_get', + 'idainfo_s_genflags_set', + 'idainfo_s_limiter_get', + 'idainfo_s_limiter_set', + 'idainfo_s_prefflag_get', + 'idainfo_s_prefflag_set', + 'idainfo_s_xrefflag_get', + 'idainfo_s_xrefflag_set', + 'idainfo_set_maxEA', + 'idainfo_set_minEA', + 'idainfo_short_demnames_get', + 'idainfo_short_demnames_set', + 'idainfo_specsegs_get', + 'idainfo_specsegs_set', + 'idainfo_start_cs_get', + 'idainfo_start_cs_set', + 'idainfo_start_ea_get', + 'idainfo_start_ea_set', + 'idainfo_start_ip_get', + 'idainfo_start_ip_set', + 'idainfo_start_sp_get', + 'idainfo_start_sp_set', + 'idainfo_start_ss_get', + 'idainfo_start_ss_set', + 'idainfo_strlit_break_get', + 'idainfo_strlit_break_set', + 'idainfo_strlit_flags_get', + 'idainfo_strlit_flags_set', + 'idainfo_strlit_pref_get', + 'idainfo_strlit_pref_set', + 'idainfo_strlit_sernum_get', + 'idainfo_strlit_sernum_set', + 'idainfo_strlit_zeroes_get', + 'idainfo_strlit_zeroes_set', + 'idainfo_strtype_get', + 'idainfo_strtype_set', + 'idainfo_tag_get', + 'idainfo_tag_set', + 'idainfo_type_xrefnum_get', + 'idainfo_type_xrefnum_set', + 'idainfo_version_get', + 'idainfo_version_set', + 'idainfo_xrefnum_get', + 'idainfo_xrefnum_set', + 'idaplace_t_ea_get', + 'idaplace_t_ea_set', + 'idc_get_local_type', + 'idc_get_local_type_name', + 'idc_get_local_type_raw', + 'idc_get_type', + 'idc_get_type_raw', + 'idc_global_t_name_get', + 'idc_global_t_name_set', + 'idc_global_t_value_get', + 'idc_global_t_value_set', + 'idc_guess_type', + 'idc_parse_decl', + 'idc_parse_types', + 'idc_print_type', + 'idc_set_local_type', + 'idc_value_t___get_e', + 'idc_value_t__create_empty_string', + 'idc_value_t_c_str', + 'idc_value_t_clear', + 'idc_value_t_create_empty_string', + 'idc_value_t_e_get', + 'idc_value_t_e_set', + 'idc_value_t_funcidx_get', + 'idc_value_t_funcidx_set', + 'idc_value_t_i64_get', + 'idc_value_t_i64_set', + 'idc_value_t_is_convertible', + 'idc_value_t_is_integral', + 'idc_value_t_is_zero', + 'idc_value_t_num_get', + 'idc_value_t_num_set', + 'idc_value_t_obj_get', + 'idc_value_t_obj_set', + 'idc_value_t_pvoid_get', + 'idc_value_t_pvoid_set', + 'idc_value_t_qstr', + 'idc_value_t_qstr__SWIG_0', + 'idc_value_t_qstr__SWIG_1', + 'idc_value_t_reserve_get', + 'idc_value_t_reserve_set', + 'idc_value_t_set_float', + 'idc_value_t_set_int64', + 'idc_value_t_set_long', + 'idc_value_t_set_pvoid', + 'idc_value_t_set_string', + 'idc_value_t_set_string__SWIG_0', + 'idc_value_t_set_string__SWIG_1', + 'idc_value_t_swap', + 'idc_value_t_u_str', + 'idc_value_t_vtype_get', + 'idc_value_t_vtype_set', + 'idc_values_t___getitem__', + 'idc_values_t___len__', + 'idc_values_t___setitem__', + 'idc_values_t_at', + 'idc_values_t_begin', + 'idc_values_t_begin__SWIG_0', + 'idc_values_t_begin__SWIG_1', + 'idc_values_t_capacity', + 'idc_values_t_clear', + 'idc_values_t_empty', + 'idc_values_t_end', + 'idc_values_t_end__SWIG_0', + 'idc_values_t_end__SWIG_1', + 'idc_values_t_erase', + 'idc_values_t_erase__SWIG_0', + 'idc_values_t_erase__SWIG_1', + 'idc_values_t_extract', + 'idc_values_t_grow', + 'idc_values_t_inject', + 'idc_values_t_insert', + 'idc_values_t_pop_back', + 'idc_values_t_push_back', + 'idc_values_t_push_back__SWIG_0', + 'idc_values_t_push_back__SWIG_1', + 'idc_values_t_qclear', + 'idc_values_t_reserve', + 'idc_values_t_resize', + 'idc_values_t_resize__SWIG_0', + 'idc_values_t_resize__SWIG_1', + 'idc_values_t_size', + 'idc_values_t_swap', + 'idc_values_t_truncate', + 'idcv_float', + 'idcv_int64', + 'idcv_long', + 'idcv_num', + 'idcv_object', + 'idcv_string', + 'idp_desc_t_checked_get', + 'idp_desc_t_checked_set', + 'idp_desc_t_family_get', + 'idp_desc_t_family_set', + 'idp_desc_t_is_script_get', + 'idp_desc_t_is_script_set', + 'idp_desc_t_mtime_get', + 'idp_desc_t_mtime_set', + 'idp_desc_t_names_get', + 'idp_desc_t_names_set', + 'idp_desc_t_path_get', + 'idp_desc_t_path_set', + 'idp_name_t_hidden_get', + 'idp_name_t_hidden_set', + 'idp_name_t_lname_get', + 'idp_name_t_lname_set', + 'idp_name_t_sname_get', + 'idp_name_t_sname_set', + 'import_type', + 'inf_abi_set_by_user', + 'inf_allow_non_matched_ops', + 'inf_allow_sigmulti', + 'inf_append_sigcmt', + 'inf_big_arg_align', + 'inf_check_manual_ops', + 'inf_check_unicode_strlits', + 'inf_coagulate_code', + 'inf_coagulate_data', + 'inf_compress_idb', + 'inf_create_all_xrefs', + 'inf_create_func_from_call', + 'inf_create_func_from_ptr', + 'inf_create_func_tails', + 'inf_create_jump_tables', + 'inf_create_off_on_dref', + 'inf_create_off_using_fixup', + 'inf_create_strlit_on_xref', + 'inf_data_offset', + 'inf_dbg_no_store_path', + 'inf_decode_fpp', + 'inf_del_no_xref_insns', + 'inf_final_pass', + 'inf_full_sp_ana', + 'inf_gen_assume', + 'inf_gen_lzero', + 'inf_gen_null', + 'inf_gen_org', + 'inf_gen_tryblks', + 'inf_get_abibits', + 'inf_get_af', + 'inf_get_af2', + 'inf_get_af2_low', + 'inf_get_af_high', + 'inf_get_af_low', + 'inf_get_appcall_options', + 'inf_get_apptype', + 'inf_get_asmtype', + 'inf_get_baseaddr', + 'inf_get_bin_prefix_size', + 'inf_get_cc', + 'inf_get_cc_cm', + 'inf_get_cc_defalign', + 'inf_get_cc_id', + 'inf_get_cc_size_b', + 'inf_get_cc_size_e', + 'inf_get_cc_size_i', + 'inf_get_cc_size_l', + 'inf_get_cc_size_ldbl', + 'inf_get_cc_size_ll', + 'inf_get_cc_size_s', + 'inf_get_cmtflg', + 'inf_get_comment', + 'inf_get_database_change_count', + 'inf_get_datatypes', + 'inf_get_demname_form', + 'inf_get_demnames', + 'inf_get_filetype', + 'inf_get_genflags', + 'inf_get_highoff', + 'inf_get_indent', + 'inf_get_lenxref', + 'inf_get_lflags', + 'inf_get_limiter', + 'inf_get_listnames', + 'inf_get_long_demnames', + 'inf_get_lowoff', + 'inf_get_main', + 'inf_get_margin', + 'inf_get_max_autoname_len', + 'inf_get_max_ea', + 'inf_get_maxref', + 'inf_get_min_ea', + 'inf_get_nametype', + 'inf_get_netdelta', + 'inf_get_omax_ea', + 'inf_get_omin_ea', + 'inf_get_ostype', + 'inf_get_outflags', + 'inf_get_pack_mode', + 'inf_get_prefflag', + 'inf_get_privrange', + 'inf_get_privrange__SWIG_0', + 'inf_get_privrange__SWIG_1', + 'inf_get_privrange_end_ea', + 'inf_get_privrange_start_ea', + 'inf_get_procname', + 'inf_get_refcmtnum', + 'inf_get_short_demnames', + 'inf_get_specsegs', + 'inf_get_start_cs', + 'inf_get_start_ea', + 'inf_get_start_ip', + 'inf_get_start_sp', + 'inf_get_start_ss', + 'inf_get_strlit_break', + 'inf_get_strlit_flags', + 'inf_get_strlit_pref', + 'inf_get_strlit_sernum', + 'inf_get_strlit_zeroes', + 'inf_get_strtype', + 'inf_get_type_xrefnum', + 'inf_get_version', + 'inf_get_xrefflag', + 'inf_get_xrefnum', + 'inf_guess_func_type', + 'inf_handle_eh', + 'inf_handle_rtti', + 'inf_hide_comments', + 'inf_hide_libfuncs', + 'inf_huge_arg_align', + 'inf_inc_database_change_count', + 'inf_is_32bit', + 'inf_is_64bit', + 'inf_is_auto_enabled', + 'inf_is_be', + 'inf_is_dll', + 'inf_is_flat_off32', + 'inf_is_graph_view', + 'inf_is_hard_float', + 'inf_is_kernel_mode', + 'inf_is_limiter_empty', + 'inf_is_limiter_thick', + 'inf_is_limiter_thin', + 'inf_is_mem_aligned4', + 'inf_is_snapshot', + 'inf_is_wide_high_byte_first', + 'inf_like_binary', + 'inf_line_pref_with_seg', + 'inf_loading_idc', + 'inf_macros_enabled', + 'inf_map_stkargs', + 'inf_mark_code', + 'inf_no_store_user_info', + 'inf_noflow_to_data', + 'inf_noret_ana', + 'inf_op_offset', + 'inf_pack_idb', + 'inf_pack_stkargs', + 'inf_postinc_strlit_sernum', + 'inf_prefix_show_funcoff', + 'inf_prefix_show_segaddr', + 'inf_prefix_show_stack', + 'inf_prefix_truncate_opcode_bytes', + 'inf_propagate_regargs', + 'inf_propagate_stkargs', + 'inf_readonly_idb', + 'inf_rename_jumpfunc', + 'inf_rename_nullsub', + 'inf_set_32bit', + 'inf_set_64bit', + 'inf_set_abi_set_by_user', + 'inf_set_abibits', + 'inf_set_af', + 'inf_set_af2', + 'inf_set_af2_low', + 'inf_set_af_high', + 'inf_set_af_low', + 'inf_set_allow_non_matched_ops', + 'inf_set_allow_sigmulti', + 'inf_set_appcall_options', + 'inf_set_append_sigcmt', + 'inf_set_apptype', + 'inf_set_asmtype', + 'inf_set_auto_enabled', + 'inf_set_baseaddr', + 'inf_set_be', + 'inf_set_big_arg_align', + 'inf_set_bin_prefix_size', + 'inf_set_cc', + 'inf_set_cc_cm', + 'inf_set_cc_defalign', + 'inf_set_cc_id', + 'inf_set_cc_size_b', + 'inf_set_cc_size_e', + 'inf_set_cc_size_i', + 'inf_set_cc_size_l', + 'inf_set_cc_size_ldbl', + 'inf_set_cc_size_ll', + 'inf_set_cc_size_s', + 'inf_set_check_manual_ops', + 'inf_set_check_unicode_strlits', + 'inf_set_cmtflg', + 'inf_set_coagulate_code', + 'inf_set_coagulate_data', + 'inf_set_comment', + 'inf_set_compress_idb', + 'inf_set_create_all_xrefs', + 'inf_set_create_func_from_call', + 'inf_set_create_func_from_ptr', + 'inf_set_create_func_tails', + 'inf_set_create_jump_tables', + 'inf_set_create_off_on_dref', + 'inf_set_create_off_using_fixup', + 'inf_set_create_strlit_on_xref', + 'inf_set_data_offset', + 'inf_set_database_change_count', + 'inf_set_datatypes', + 'inf_set_dbg_no_store_path', + 'inf_set_decode_fpp', + 'inf_set_del_no_xref_insns', + 'inf_set_demnames', + 'inf_set_dll', + 'inf_set_filetype', + 'inf_set_final_pass', + 'inf_set_flat_off32', + 'inf_set_full_sp_ana', + 'inf_set_gen_assume', + 'inf_set_gen_lzero', + 'inf_set_gen_null', + 'inf_set_gen_org', + 'inf_set_gen_tryblks', + 'inf_set_genflags', + 'inf_set_graph_view', + 'inf_set_guess_func_type', + 'inf_set_handle_eh', + 'inf_set_handle_rtti', + 'inf_set_hard_float', + 'inf_set_hide_comments', + 'inf_set_hide_libfuncs', + 'inf_set_highoff', + 'inf_set_huge_arg_align', + 'inf_set_indent', + 'inf_set_kernel_mode', + 'inf_set_lenxref', + 'inf_set_lflags', + 'inf_set_limiter', + 'inf_set_limiter_empty', + 'inf_set_limiter_thick', + 'inf_set_limiter_thin', + 'inf_set_line_pref_with_seg', + 'inf_set_listnames', + 'inf_set_loading_idc', + 'inf_set_long_demnames', + 'inf_set_lowoff', + 'inf_set_macros_enabled', + 'inf_set_main', + 'inf_set_map_stkargs', + 'inf_set_margin', + 'inf_set_mark_code', + 'inf_set_max_autoname_len', + 'inf_set_max_ea', + 'inf_set_maxref', + 'inf_set_mem_aligned4', + 'inf_set_min_ea', + 'inf_set_nametype', + 'inf_set_netdelta', + 'inf_set_no_store_user_info', + 'inf_set_noflow_to_data', + 'inf_set_noret_ana', + 'inf_set_omax_ea', + 'inf_set_omin_ea', + 'inf_set_op_offset', + 'inf_set_ostype', + 'inf_set_outflags', + 'inf_set_pack_idb', + 'inf_set_pack_mode', + 'inf_set_pack_stkargs', + 'inf_set_prefflag', + 'inf_set_prefix_show_funcoff', + 'inf_set_prefix_show_segaddr', + 'inf_set_prefix_show_stack', + 'inf_set_prefix_truncate_opcode_bytes', + 'inf_set_privrange', + 'inf_set_privrange_end_ea', + 'inf_set_privrange_start_ea', + 'inf_set_procname', + 'inf_set_propagate_regargs', + 'inf_set_propagate_stkargs', + 'inf_set_readonly_idb', + 'inf_set_refcmtnum', + 'inf_set_rename_jumpfunc', + 'inf_set_rename_nullsub', + 'inf_set_short_demnames', + 'inf_set_should_create_stkvars', + 'inf_set_should_trace_sp', + 'inf_set_show_all_comments', + 'inf_set_show_auto', + 'inf_set_show_hidden_funcs', + 'inf_set_show_hidden_insns', + 'inf_set_show_hidden_segms', + 'inf_set_show_line_pref', + 'inf_set_show_repeatables', + 'inf_set_show_src_linnum', + 'inf_set_show_void', + 'inf_set_show_xref_fncoff', + 'inf_set_show_xref_seg', + 'inf_set_show_xref_tmarks', + 'inf_set_show_xref_val', + 'inf_set_snapshot', + 'inf_set_specsegs', + 'inf_set_stack_ldbl', + 'inf_set_stack_varargs', + 'inf_set_start_cs', + 'inf_set_start_ea', + 'inf_set_start_ip', + 'inf_set_start_sp', + 'inf_set_start_ss', + 'inf_set_strlit_autocmt', + 'inf_set_strlit_break', + 'inf_set_strlit_flags', + 'inf_set_strlit_name_bit', + 'inf_set_strlit_names', + 'inf_set_strlit_pref', + 'inf_set_strlit_savecase', + 'inf_set_strlit_serial_names', + 'inf_set_strlit_sernum', + 'inf_set_strlit_zeroes', + 'inf_set_strtype', + 'inf_set_test_mode', + 'inf_set_trace_flow', + 'inf_set_truncate_on_del', + 'inf_set_type_xrefnum', + 'inf_set_unicode_strlits', + 'inf_set_use_allasm', + 'inf_set_use_flirt', + 'inf_set_use_gcc_layout', + 'inf_set_version', + 'inf_set_wide_high_byte_first', + 'inf_set_xrefflag', + 'inf_set_xrefnum', + 'inf_should_create_stkvars', + 'inf_should_trace_sp', + 'inf_show_all_comments', + 'inf_show_auto', + 'inf_show_hidden_funcs', + 'inf_show_hidden_insns', + 'inf_show_hidden_segms', + 'inf_show_line_pref', + 'inf_show_repeatables', + 'inf_show_src_linnum', + 'inf_show_void', + 'inf_show_xref_fncoff', + 'inf_show_xref_seg', + 'inf_show_xref_tmarks', + 'inf_show_xref_val', + 'inf_stack_ldbl', + 'inf_stack_varargs', + 'inf_strlit_autocmt', + 'inf_strlit_name_bit', + 'inf_strlit_names', + 'inf_strlit_savecase', + 'inf_strlit_serial_names', + 'inf_test_mode', + 'inf_trace_flow', + 'inf_truncate_on_del', + 'inf_unicode_strlits', + 'inf_use_allasm', + 'inf_use_flirt', + 'inf_use_gcc_layout', + 'info', + 'info__varargs__', + 'init_hexrays_plugin', + 'insn_add_cref', + 'insn_add_dref', + 'insn_add_off_drefs', + 'insn_create_stkvar', + 'insn_t___get_auxpref__', + 'insn_t___get_operand__', + 'insn_t___get_ops__', + 'insn_t___set_auxpref__', + 'insn_t__from_ptrval__', + 'insn_t_add_cref', + 'insn_t_add_dref', + 'insn_t_add_off_drefs', + 'insn_t_assign', + 'insn_t_create_op_data', + 'insn_t_create_op_data__SWIG_0', + 'insn_t_create_op_data__SWIG_1', + 'insn_t_create_stkvar', + 'insn_t_cs_get', + 'insn_t_cs_set', + 'insn_t_ea_get', + 'insn_t_ea_set', + 'insn_t_flags_get', + 'insn_t_flags_set', + 'insn_t_get_canon_feature', + 'insn_t_get_canon_mnem', + 'insn_t_get_next_byte', + 'insn_t_get_next_dword', + 'insn_t_get_next_qword', + 'insn_t_get_next_word', + 'insn_t_insnpref_get', + 'insn_t_insnpref_set', + 'insn_t_ip_get', + 'insn_t_ip_set', + 'insn_t_is_64bit', + 'insn_t_is_canon_insn', + 'insn_t_is_macro', + 'insn_t_itype_get', + 'insn_t_itype_set', + 'insn_t_ops_get', + 'insn_t_ops_set', + 'insn_t_segpref_get', + 'insn_t_segpref_set', + 'insn_t_size_get', + 'insn_t_size_set', + 'install_command_interpreter', + 'install_microcode_filter', + 'instant_dbgopts_t__pass_get', + 'instant_dbgopts_t__pass_set', + 'instant_dbgopts_t_attach_get', + 'instant_dbgopts_t_attach_set', + 'instant_dbgopts_t_debmod_get', + 'instant_dbgopts_t_debmod_set', + 'instant_dbgopts_t_env_get', + 'instant_dbgopts_t_env_set', + 'instant_dbgopts_t_event_id_get', + 'instant_dbgopts_t_event_id_set', + 'instant_dbgopts_t_host_get', + 'instant_dbgopts_t_host_set', + 'instant_dbgopts_t_pid_get', + 'instant_dbgopts_t_pid_set', + 'instant_dbgopts_t_port_get', + 'instant_dbgopts_t_port_set', + 'int_pointer_assign', + 'int_pointer_cast', + 'int_pointer_frompointer', + 'int_pointer_value', + 'internal_get_sreg_base', + 'internal_ioctl', + 'internal_register_place_class', + 'interval_t___eq__', + 'interval_t___ne__', + 'interval_t_contains', + 'interval_t_empty', + 'interval_t_intersect', + 'interval_t_length', + 'interval_t_make_union', + 'interval_t_move_by', + 'interval_t_x0_get', + 'interval_t_x0_set', + 'interval_t_x1_get', + 'interval_t_x1_set', + 'intvec_t___eq__', + 'intvec_t___getitem__', + 'intvec_t___len__', + 'intvec_t___ne__', + 'intvec_t___setitem__', + 'intvec_t__del', + 'intvec_t_add_unique', + 'intvec_t_at', + 'intvec_t_begin', + 'intvec_t_begin__SWIG_0', + 'intvec_t_begin__SWIG_1', + 'intvec_t_capacity', + 'intvec_t_clear', + 'intvec_t_empty', + 'intvec_t_end', + 'intvec_t_end__SWIG_0', + 'intvec_t_end__SWIG_1', + 'intvec_t_erase', + 'intvec_t_erase__SWIG_0', + 'intvec_t_erase__SWIG_1', + 'intvec_t_extract', + 'intvec_t_find', + 'intvec_t_find__SWIG_0', + 'intvec_t_find__SWIG_1', + 'intvec_t_has', + 'intvec_t_inject', + 'intvec_t_insert', + 'intvec_t_pop_back', + 'intvec_t_push_back', + 'intvec_t_push_back__SWIG_0', + 'intvec_t_push_back__SWIG_1', + 'intvec_t_qclear', + 'intvec_t_reserve', + 'intvec_t_resize', + 'intvec_t_resize__SWIG_0', + 'intvec_t_resize__SWIG_1', + 'intvec_t_size', + 'intvec_t_swap', + 'intvec_t_truncate', + 'invalidate_dbg_state', + 'invalidate_dbgmem_config', + 'invalidate_dbgmem_contents', + 'is__bnot0', + 'is__bnot1', + 'is__invsign0', + 'is__invsign1', + 'is_action_enabled', + 'is_additive', + 'is_align', + 'is_align_flow', + 'is_align_insn', + 'is_anonymous_member_name', + 'is_assignment', + 'is_attached_custom_data_format', + 'is_auto_enabled', + 'is_autosync', + 'is_autosync__SWIG_0', + 'is_autosync__SWIG_1', + 'is_basic_block_end', + 'is_bblk_trace_enabled', + 'is_bf', + 'is_binary', + 'is_bitop', + 'is_bnot', + 'is_bool_type', + 'is_break_consumer', + 'is_byte', + 'is_call_insn', + 'is_char', + 'is_char0', + 'is_char1', + 'is_chooser_widget', + 'is_code', + 'is_code_far', + 'is_colored_item', + 'is_commutative', + 'is_comp_unsure', + 'is_control_tty', + 'is_custfmt', + 'is_custfmt0', + 'is_custfmt1', + 'is_custom', + 'is_data', + 'is_data_far', + 'is_database_flag', + 'is_debugger_busy', + 'is_debugger_memory', + 'is_debugger_on', + 'is_defarg', + 'is_defarg0', + 'is_defarg1', + 'is_double', + 'is_dummy_member_name', + 'is_dword', + 'is_enum', + 'is_enum0', + 'is_enum1', + 'is_enum_fromtil', + 'is_enum_hidden', + 'is_filetype_like_binary', + 'is_finally_visible_func', + 'is_finally_visible_item', + 'is_finally_visible_segm', + 'is_fixed_spd', + 'is_fixup_custom', + 'is_float', + 'is_float0', + 'is_float1', + 'is_floating_dtype', + 'is_flow', + 'is_fltnum', + 'is_forced_operand', + 'is_func', + 'is_func_entry', + 'is_func_locked', + 'is_func_tail', + 'is_func_trace_enabled', + 'is_funcarg_off', + 'is_gcc', + 'is_gcc32', + 'is_gcc64', + 'is_ghost_enum', + 'is_head', + 'is_hidden_border', + 'is_hidden_item', + 'is_idaq', + 'is_ident', + 'is_ident_cp', + 'is_in_nlist', + 'is_indirect_jump_insn', + 'is_inplace_def', + 'is_insn_trace_enabled', + 'is_invsign', + 'is_kreg', + 'is_libitem', + 'is_loaded', + 'is_logical', + 'is_loop', + 'is_lvalue', + 'is_lzero', + 'is_lzero0', + 'is_lzero1', + 'is_main_thread', + 'is_manual', + 'is_manual_insn', + 'is_mapped', + 'is_may_access', + 'is_mcode_addsub', + 'is_mcode_call', + 'is_mcode_commutative', + 'is_mcode_convertible_to_jmp', + 'is_mcode_convertible_to_set', + 'is_mcode_divmod', + 'is_mcode_fpu', + 'is_mcode_j1', + 'is_mcode_jcond', + 'is_mcode_propagatable', + 'is_mcode_set', + 'is_mcode_set1', + 'is_mcode_shift', + 'is_mcode_xdsu', + 'is_member_id', + 'is_miniidb', + 'is_msg_inited', + 'is_multiplicative', + 'is_name_defined_locally', + 'is_nonbool_type', + 'is_noret', + 'is_noret_block', + 'is_not_tail', + 'is_notcode', + 'is_notproc', + 'is_numop', + 'is_numop0', + 'is_numop1', + 'is_off', + 'is_off0', + 'is_off1', + 'is_one_bit_mask', + 'is_ordinal_name', + 'is_oword', + 'is_pack_real', + 'is_paf', + 'is_pascal', + 'is_place_class_ea_capable', + 'is_prepost', + 'is_problem_present', + 'is_ptr_or_array', + 'is_public_name', + 'is_purging_cc', + 'is_qword', + 'is_refresh_requested', + 'is_reftype_target_optional', + 'is_reg_custom', + 'is_reg_float', + 'is_reg_integer', + 'is_relational', + 'is_request_running', + 'is_restype_enum', + 'is_restype_struct', + 'is_restype_struni', + 'is_restype_void', + 'is_ret_block', + 'is_ret_insn', + 'is_retfp', + 'is_same_data_type', + 'is_same_func', + 'is_sdacl_byte', + 'is_seg', + 'is_seg0', + 'is_seg1', + 'is_segm_locked', + 'is_signed_mcode', + 'is_small_udt', + 'is_spec_ea', + 'is_spec_segm', + 'is_special_member', + 'is_step_trace_enabled', + 'is_stkvar', + 'is_stkvar0', + 'is_stkvar1', + 'is_strlit', + 'is_strlit_cp', + 'is_stroff', + 'is_stroff0', + 'is_stroff1', + 'is_struct', + 'is_suspop', + 'is_tah_byte', + 'is_tail', + 'is_tbyte', + 'is_terse_struc', + 'is_tilcmt', + 'is_trusted_idb', + 'is_type_arithmetic', + 'is_type_array', + 'is_type_bitfld', + 'is_type_bool', + 'is_type_char', + 'is_type_complex', + 'is_type_const', + 'is_type_correct', + 'is_type_double', + 'is_type_enum', + 'is_type_ext_arithmetic', + 'is_type_ext_integral', + 'is_type_float', + 'is_type_floating', + 'is_type_func', + 'is_type_int', + 'is_type_int128', + 'is_type_int16', + 'is_type_int32', + 'is_type_int64', + 'is_type_integral', + 'is_type_ldouble', + 'is_type_paf', + 'is_type_partial', + 'is_type_ptr', + 'is_type_ptr_or_array', + 'is_type_struct', + 'is_type_struni', + 'is_type_sue', + 'is_type_tbyte', + 'is_type_typedef', + 'is_type_uchar', + 'is_type_uint', + 'is_type_uint128', + 'is_type_uint16', + 'is_type_uint32', + 'is_type_uint64', + 'is_type_union', + 'is_type_unknown', + 'is_type_void', + 'is_type_volatile', + 'is_typeid_last', + 'is_uname', + 'is_unary', + 'is_union', + 'is_unknown', + 'is_unsigned_mcode', + 'is_user_cc', + 'is_usersp', + 'is_userti', + 'is_valid_cp', + 'is_valid_trace_file', + 'is_valid_typename', + 'is_vararg_cc', + 'is_varmember', + 'is_varsize_item', + 'is_varstr', + 'is_visible_cp', + 'is_visible_func', + 'is_visible_item', + 'is_visible_segm', + 'is_weak_name', + 'is_word', + 'is_yword', + 'is_zstroff', + 'is_zword', + 'ivl_t___eq__', + 'ivl_t___ge__', + 'ivl_t___gt__', + 'ivl_t___le__', + 'ivl_t___lt__', + 'ivl_t___ne__', + 'ivl_t_clear', + 'ivl_t_compare', + 'ivl_t_contains', + 'ivl_t_dstr', + 'ivl_t_empty', + 'ivl_t_extend_to_cover', + 'ivl_t_includes', + 'ivl_t_intersect', + 'ivl_t_overlap', + 'ivl_with_name_t_ivl_get', + 'ivl_with_name_t_ivl_set', + 'ivl_with_name_t_part_get', + 'ivl_with_name_t_part_set', + 'ivl_with_name_t_whole_get', + 'ivl_with_name_t_whole_set', + 'ivlset_t___eq__', + 'ivlset_t___ge__', + 'ivlset_t___gt__', + 'ivlset_t___le__', + 'ivlset_t___lt__', + 'ivlset_t___ne__', + 'ivlset_t__print', + 'ivlset_t_add', + 'ivlset_t_add__SWIG_0', + 'ivlset_t_add__SWIG_1', + 'ivlset_t_add__SWIG_2', + 'ivlset_t_addmasked', + 'ivlset_t_compare', + 'ivlset_t_contains', + 'ivlset_t_count', + 'ivlset_t_dstr', + 'ivlset_t_has_common', + 'ivlset_t_has_common__SWIG_0', + 'ivlset_t_has_common__SWIG_1', + 'ivlset_t_includes', + 'ivlset_t_intersect', + 'ivlset_t_sub', + 'ivlset_t_sub__SWIG_0', + 'ivlset_t_sub__SWIG_1', + 'ivlset_t_sub__SWIG_2', + 'jcnd2set', + 'jobj_wrapper_t_get_dict', + 'jumpto', + 'jumpto__SWIG_0', + 'jumpto__SWIG_1', + 'last_idcv_attr', + 'leading_zero_important', + 'lexcompare', + 'lexcompare_tinfo', + 'list_bptgrps', + 'list_bptgrps__SWIG_0', + 'list_bptgrps__SWIG_1', + 'llabel_t_ea_get', + 'llabel_t_ea_set', + 'llabel_t_name_get', + 'llabel_t_name_set', + 'load_and_run_plugin', + 'load_binary_file', + 'load_dbg_dbginfo', + 'load_debugger', + 'load_ids_module', + 'load_plugin', + 'load_til', + 'load_til_header', + 'load_trace_file', + 'loader_input_t___idc_cvt_id___get', + 'loader_input_t___idc_cvt_id___set', + 'loader_input_t_close', + 'loader_input_t_file2base', + 'loader_input_t_filename', + 'loader_input_t_from_capsule', + 'loader_input_t_from_fp', + 'loader_input_t_from_linput', + 'loader_input_t_get_byte', + 'loader_input_t_get_linput', + 'loader_input_t_gets', + 'loader_input_t_getz', + 'loader_input_t_open', + 'loader_input_t_open_memory', + 'loader_input_t_opened', + 'loader_input_t_read', + 'loader_input_t_readbytes', + 'loader_input_t_seek', + 'loader_input_t_set_linput', + 'loader_input_t_size', + 'loader_input_t_tell', + 'loader_t_flags_get', + 'loader_t_flags_set', + 'loader_t_version_get', + 'loader_t_version_set', + 'lochist_entry_t___eq__', + 'lochist_entry_t___ne__', + 'lochist_entry_t_acquire_place', + 'lochist_entry_t_is_valid', + 'lochist_entry_t_place', + 'lochist_entry_t_place__SWIG_0', + 'lochist_entry_t_place__SWIG_1', + 'lochist_entry_t_plce_get', + 'lochist_entry_t_plce_set', + 'lochist_entry_t_renderer_info', + 'lochist_entry_t_renderer_info__SWIG_0', + 'lochist_entry_t_renderer_info__SWIG_1', + 'lochist_entry_t_rinfo_get', + 'lochist_entry_t_rinfo_set', + 'lochist_entry_t_set_place', + 'lochist_t_back', + 'lochist_t_clear', + 'lochist_t_current_index', + 'lochist_t_fwd', + 'lochist_t_get', + 'lochist_t_get_current', + 'lochist_t_get_place_id', + 'lochist_t_get_template_place', + 'lochist_t_init', + 'lochist_t_is_history_enabled', + 'lochist_t_jump', + 'lochist_t_netcode', + 'lochist_t_save', + 'lochist_t_seek', + 'lochist_t_set', + 'lochist_t_set_current', + 'lochist_t_size', + 'lock_func_range', + 'lock_segm', + 'log2ceil', + 'log2floor', + 'longlongvec_t___eq__', + 'longlongvec_t___getitem__', + 'longlongvec_t___len__', + 'longlongvec_t___ne__', + 'longlongvec_t___setitem__', + 'longlongvec_t__del', + 'longlongvec_t_add_unique', + 'longlongvec_t_at', + 'longlongvec_t_begin', + 'longlongvec_t_begin__SWIG_0', + 'longlongvec_t_begin__SWIG_1', + 'longlongvec_t_capacity', + 'longlongvec_t_clear', + 'longlongvec_t_empty', + 'longlongvec_t_end', + 'longlongvec_t_end__SWIG_0', + 'longlongvec_t_end__SWIG_1', + 'longlongvec_t_erase', + 'longlongvec_t_erase__SWIG_0', + 'longlongvec_t_erase__SWIG_1', + 'longlongvec_t_extract', + 'longlongvec_t_find', + 'longlongvec_t_find__SWIG_0', + 'longlongvec_t_find__SWIG_1', + 'longlongvec_t_has', + 'longlongvec_t_inject', + 'longlongvec_t_insert', + 'longlongvec_t_pop_back', + 'longlongvec_t_push_back', + 'longlongvec_t_push_back__SWIG_0', + 'longlongvec_t_push_back__SWIG_1', + 'longlongvec_t_qclear', + 'longlongvec_t_reserve', + 'longlongvec_t_resize', + 'longlongvec_t_resize__SWIG_0', + 'longlongvec_t_resize__SWIG_1', + 'longlongvec_t_size', + 'longlongvec_t_swap', + 'longlongvec_t_truncate', + 'lookup_key_code', + 'lower_type', + 'lowertype_helper_t_func_has_stkframe_hole', + 'lowertype_helper_t_get_func_purged_bytes', + 'lvar_locator_t___eq__', + 'lvar_locator_t___ge__', + 'lvar_locator_t___gt__', + 'lvar_locator_t___le__', + 'lvar_locator_t___lt__', + 'lvar_locator_t___ne__', + 'lvar_locator_t_compare', + 'lvar_locator_t_defea_get', + 'lvar_locator_t_defea_set', + 'lvar_locator_t_get_reg1', + 'lvar_locator_t_get_reg2', + 'lvar_locator_t_get_scattered', + 'lvar_locator_t_get_scattered__SWIG_0', + 'lvar_locator_t_get_scattered__SWIG_1', + 'lvar_locator_t_get_stkoff', + 'lvar_locator_t_is_reg1', + 'lvar_locator_t_is_reg2', + 'lvar_locator_t_is_reg_var', + 'lvar_locator_t_is_scattered', + 'lvar_locator_t_is_stk_var', + 'lvar_locator_t_location_get', + 'lvar_locator_t_location_set', + 'lvar_mapping_begin', + 'lvar_mapping_clear', + 'lvar_mapping_end', + 'lvar_mapping_erase', + 'lvar_mapping_find', + 'lvar_mapping_first', + 'lvar_mapping_free', + 'lvar_mapping_insert', + 'lvar_mapping_iterator_t___eq__', + 'lvar_mapping_iterator_t___ne__', + 'lvar_mapping_iterator_t_x_get', + 'lvar_mapping_iterator_t_x_set', + 'lvar_mapping_new', + 'lvar_mapping_next', + 'lvar_mapping_prev', + 'lvar_mapping_second', + 'lvar_mapping_size', + 'lvar_mapping_t_at', + 'lvar_mapping_t_size', + 'lvar_off', + 'lvar_ref_t___eq__', + 'lvar_ref_t___ge__', + 'lvar_ref_t___gt__', + 'lvar_ref_t___le__', + 'lvar_ref_t___lt__', + 'lvar_ref_t___ne__', + 'lvar_ref_t_compare', + 'lvar_ref_t_idx_get', + 'lvar_ref_t_idx_set', + 'lvar_ref_t_mba_get', + 'lvar_ref_t_off_get', + 'lvar_ref_t_off_set', + 'lvar_ref_t_swap', + 'lvar_ref_t_var', + 'lvar_saved_info_t___eq__', + 'lvar_saved_info_t___ne__', + 'lvar_saved_info_t_clear_keep', + 'lvar_saved_info_t_clr_forced_lvar', + 'lvar_saved_info_t_clr_nomap_lvar', + 'lvar_saved_info_t_clr_noptr_lvar', + 'lvar_saved_info_t_cmt_get', + 'lvar_saved_info_t_cmt_set', + 'lvar_saved_info_t_flags_get', + 'lvar_saved_info_t_flags_set', + 'lvar_saved_info_t_has_info', + 'lvar_saved_info_t_is_forced_lvar', + 'lvar_saved_info_t_is_kept', + 'lvar_saved_info_t_is_nomap_lvar', + 'lvar_saved_info_t_is_noptr_lvar', + 'lvar_saved_info_t_ll_get', + 'lvar_saved_info_t_ll_set', + 'lvar_saved_info_t_name_get', + 'lvar_saved_info_t_name_set', + 'lvar_saved_info_t_set_forced_lvar', + 'lvar_saved_info_t_set_keep', + 'lvar_saved_info_t_set_nomap_lvar', + 'lvar_saved_info_t_set_noptr_lvar', + 'lvar_saved_info_t_size_get', + 'lvar_saved_info_t_size_set', + 'lvar_saved_info_t_type_get', + 'lvar_saved_info_t_type_set', + 'lvar_saved_infos_t___eq__', + 'lvar_saved_infos_t___getitem__', + 'lvar_saved_infos_t___len__', + 'lvar_saved_infos_t___ne__', + 'lvar_saved_infos_t___setitem__', + 'lvar_saved_infos_t__del', + 'lvar_saved_infos_t_add_unique', + 'lvar_saved_infos_t_at', + 'lvar_saved_infos_t_begin', + 'lvar_saved_infos_t_begin__SWIG_0', + 'lvar_saved_infos_t_begin__SWIG_1', + 'lvar_saved_infos_t_capacity', + 'lvar_saved_infos_t_clear', + 'lvar_saved_infos_t_empty', + 'lvar_saved_infos_t_end', + 'lvar_saved_infos_t_end__SWIG_0', + 'lvar_saved_infos_t_end__SWIG_1', + 'lvar_saved_infos_t_erase', + 'lvar_saved_infos_t_erase__SWIG_0', + 'lvar_saved_infos_t_erase__SWIG_1', + 'lvar_saved_infos_t_extract', + 'lvar_saved_infos_t_find', + 'lvar_saved_infos_t_find__SWIG_0', + 'lvar_saved_infos_t_find__SWIG_1', + 'lvar_saved_infos_t_grow', + 'lvar_saved_infos_t_has', + 'lvar_saved_infos_t_inject', + 'lvar_saved_infos_t_insert', + 'lvar_saved_infos_t_pop_back', + 'lvar_saved_infos_t_push_back', + 'lvar_saved_infos_t_push_back__SWIG_0', + 'lvar_saved_infos_t_push_back__SWIG_1', + 'lvar_saved_infos_t_qclear', + 'lvar_saved_infos_t_reserve', + 'lvar_saved_infos_t_resize', + 'lvar_saved_infos_t_resize__SWIG_0', + 'lvar_saved_infos_t_resize__SWIG_1', + 'lvar_saved_infos_t_size', + 'lvar_saved_infos_t_swap', + 'lvar_saved_infos_t_truncate', + 'lvar_t_accepts_type', + 'lvar_t_append_list', + 'lvar_t_clear_used', + 'lvar_t_clr_arg_var', + 'lvar_t_clr_automapped', + 'lvar_t_clr_dummy_arg', + 'lvar_t_clr_fake_var', + 'lvar_t_clr_floating_var', + 'lvar_t_clr_forced_var', + 'lvar_t_clr_mapdst_var', + 'lvar_t_clr_mreg_done', + 'lvar_t_clr_noptr_var', + 'lvar_t_clr_notarg', + 'lvar_t_clr_overlapped_var', + 'lvar_t_clr_spoiled_var', + 'lvar_t_clr_thisarg', + 'lvar_t_clr_unknown_width', + 'lvar_t_clr_user_info', + 'lvar_t_clr_user_name', + 'lvar_t_clr_user_type', + 'lvar_t_cmt_get', + 'lvar_t_cmt_set', + 'lvar_t_defblk_get', + 'lvar_t_defblk_set', + 'lvar_t_divisor_get', + 'lvar_t_divisor_set', + 'lvar_t_has_common', + 'lvar_t_has_common_bit', + 'lvar_t_has_nice_name', + 'lvar_t_has_regname', + 'lvar_t_has_user_info', + 'lvar_t_has_user_name', + 'lvar_t_has_user_type', + 'lvar_t_is_aliasable', + 'lvar_t_is_arg_var', + 'lvar_t_is_automapped', + 'lvar_t_is_dummy_arg', + 'lvar_t_is_fake_var', + 'lvar_t_is_floating_var', + 'lvar_t_is_forced_var', + 'lvar_t_is_mapdst_var', + 'lvar_t_is_noptr_var', + 'lvar_t_is_notarg', + 'lvar_t_is_overlapped_var', + 'lvar_t_is_result_var', + 'lvar_t_is_spoiled_var', + 'lvar_t_is_thisarg', + 'lvar_t_is_unknown_width', + 'lvar_t_mreg_done', + 'lvar_t_name_get', + 'lvar_t_name_set', + 'lvar_t_set_arg_var', + 'lvar_t_set_automapped', + 'lvar_t_set_dummy_arg', + 'lvar_t_set_fake_var', + 'lvar_t_set_final_lvar_type', + 'lvar_t_set_floating_var', + 'lvar_t_set_forced_var', + 'lvar_t_set_lvar_type', + 'lvar_t_set_mapdst_var', + 'lvar_t_set_mreg_done', + 'lvar_t_set_non_typed', + 'lvar_t_set_noptr_var', + 'lvar_t_set_notarg', + 'lvar_t_set_overlapped_var', + 'lvar_t_set_spoiled_var', + 'lvar_t_set_thisarg', + 'lvar_t_set_typed', + 'lvar_t_set_unknown_width', + 'lvar_t_set_used', + 'lvar_t_set_user_name', + 'lvar_t_set_user_type', + 'lvar_t_set_width', + 'lvar_t_tif_get', + 'lvar_t_tif_set', + 'lvar_t_type', + 'lvar_t_type__SWIG_0', + 'lvar_t_type__SWIG_1', + 'lvar_t_typed', + 'lvar_t_used', + 'lvar_t_width_get', + 'lvar_t_width_set', + 'lvar_uservec_t_clear', + 'lvar_uservec_t_find_info', + 'lvar_uservec_t_keep_info', + 'lvar_uservec_t_lmaps_get', + 'lvar_uservec_t_lmaps_set', + 'lvar_uservec_t_lvvec_get', + 'lvar_uservec_t_lvvec_set', + 'lvar_uservec_t_stkoff_delta_get', + 'lvar_uservec_t_stkoff_delta_set', + 'lvar_uservec_t_swap', + 'lvar_uservec_t_ulv_flags_get', + 'lvar_uservec_t_ulv_flags_set', + 'lvars_t_find', + 'lvars_t_find_input_lvar', + 'lvars_t_find_lvar', + 'lvars_t_find_stkvar', + 'make_name_auto', + 'make_name_non_public', + 'make_name_non_weak', + 'make_name_public', + 'make_name_user', + 'make_name_weak', + 'make_pointer', + 'map_code_ea', + 'map_code_ea__SWIG_0', + 'map_code_ea__SWIG_1', + 'map_data_ea', + 'map_data_ea__SWIG_0', + 'map_data_ea__SWIG_1', + 'map_ea', + 'map_ea__SWIG_0', + 'map_ea__SWIG_1', + 'mark_cfunc_dirty', + 'mark_position', + 'may_create_stkvars', + 'may_trace_sp', + 'mba_range_iterator_t_chunk', + 'mba_range_iterator_t_fii_get', + 'mba_range_iterator_t_fii_set', + 'mba_range_iterator_t_is_snippet', + 'mba_range_iterator_t_next', + 'mba_range_iterator_t_rii_get', + 'mba_range_iterator_t_rii_set', + 'mba_range_iterator_t_set', + 'mba_ranges_t_clear', + 'mba_ranges_t_empty', + 'mba_ranges_t_is_fragmented', + 'mba_ranges_t_is_snippet', + 'mba_ranges_t_pfn_get', + 'mba_ranges_t_pfn_set', + 'mba_ranges_t_ranges_get', + 'mba_ranges_t_ranges_set', + 'mba_ranges_t_start', + 'mbl_array_t__deregister', + 'mbl_array_t__print', + 'mbl_array_t__register', + 'mbl_array_t_aliased_args_get', + 'mbl_array_t_aliased_args_set', + 'mbl_array_t_aliased_memory_get', + 'mbl_array_t_aliased_memory_set', + 'mbl_array_t_aliased_vars_get', + 'mbl_array_t_aliased_vars_set', + 'mbl_array_t_alloc_lvars', + 'mbl_array_t_analyze_calls', + 'mbl_array_t_arg', + 'mbl_array_t_arg__SWIG_0', + 'mbl_array_t_arg__SWIG_1', + 'mbl_array_t_argbase', + 'mbl_array_t_argidx_get', + 'mbl_array_t_argidx_ok', + 'mbl_array_t_argidx_set', + 'mbl_array_t_bad_call_sp_detected', + 'mbl_array_t_blocks_get', + 'mbl_array_t_blocks_set', + 'mbl_array_t_build_graph', + 'mbl_array_t_calc_shins_flags', + 'mbl_array_t_callinfo_built', + 'mbl_array_t_cc_get', + 'mbl_array_t_cc_set', + 'mbl_array_t_chain_varnums_ok', + 'mbl_array_t_clr_cdtr', + 'mbl_array_t_clr_mba_flags', + 'mbl_array_t_clr_mba_flags2', + 'mbl_array_t_combine_blocks', + 'mbl_array_t_common_stkvars_stkargs', + 'mbl_array_t_consumed_argregs_get', + 'mbl_array_t_consumed_argregs_set', + 'mbl_array_t_copy_block', + 'mbl_array_t_deleted_pairs', + 'mbl_array_t_deserialize', + 'mbl_array_t_display_numaddrs', + 'mbl_array_t_display_valnums', + 'mbl_array_t_dump', + 'mbl_array_t_dump_mba', + 'mbl_array_t_dump_mba__varargs__', + 'mbl_array_t_entry_ea_get', + 'mbl_array_t_entry_ea_set', + 'mbl_array_t_error_ea_get', + 'mbl_array_t_error_ea_set', + 'mbl_array_t_error_strarg_get', + 'mbl_array_t_error_strarg_set', + 'mbl_array_t_final_type_get', + 'mbl_array_t_final_type_set', + 'mbl_array_t_find_mop', + 'mbl_array_t_first_epilog_ea_get', + 'mbl_array_t_first_epilog_ea_set', + 'mbl_array_t_for_all_insns', + 'mbl_array_t_for_all_ops', + 'mbl_array_t_for_all_topinsns', + 'mbl_array_t_fpd_get', + 'mbl_array_t_fpd_set', + 'mbl_array_t_frregs_get', + 'mbl_array_t_frregs_set', + 'mbl_array_t_frsize_get', + 'mbl_array_t_frsize_set', + 'mbl_array_t_fti_flags_get', + 'mbl_array_t_fti_flags_set', + 'mbl_array_t_fullsize_get', + 'mbl_array_t_fullsize_set', + 'mbl_array_t_generated_asserts', + 'mbl_array_t_get_args_region', + 'mbl_array_t_get_curfunc', + 'mbl_array_t_get_graph', + 'mbl_array_t_get_ida_argloc', + 'mbl_array_t_get_lvars_region', + 'mbl_array_t_get_mba_flags', + 'mbl_array_t_get_mba_flags2', + 'mbl_array_t_get_mblock', + 'mbl_array_t_get_mblock__SWIG_0', + 'mbl_array_t_get_mblock__SWIG_1', + 'mbl_array_t_get_shadow_region', + 'mbl_array_t_get_stack_region', + 'mbl_array_t_get_std_region', + 'mbl_array_t_gotoff_stkvars_get', + 'mbl_array_t_gotoff_stkvars_set', + 'mbl_array_t_graph_insns', + 'mbl_array_t_has_bad_sp', + 'mbl_array_t_has_over_chains', + 'mbl_array_t_has_passregs', + 'mbl_array_t_idaloc2vd', + 'mbl_array_t_idb_node_get', + 'mbl_array_t_idb_node_set', + 'mbl_array_t_idb_spoiled_get', + 'mbl_array_t_idb_spoiled_set', + 'mbl_array_t_idb_type_get', + 'mbl_array_t_idb_type_set', + 'mbl_array_t_inargoff_get', + 'mbl_array_t_inargoff_set', + 'mbl_array_t_insert_block', + 'mbl_array_t_is_cdtr', + 'mbl_array_t_is_ctr', + 'mbl_array_t_is_dtr', + 'mbl_array_t_is_pattern', + 'mbl_array_t_is_snippet', + 'mbl_array_t_is_stkarg', + 'mbl_array_t_is_thunk', + 'mbl_array_t_label_get', + 'mbl_array_t_label_set', + 'mbl_array_t_last_prolog_ea_get', + 'mbl_array_t_last_prolog_ea_set', + 'mbl_array_t_loaded_gdl', + 'mbl_array_t_lvar_names_ok', + 'mbl_array_t_lvars_allocated', + 'mbl_array_t_lvars_renamed', + 'mbl_array_t_mark_chains_dirty', + 'mbl_array_t_maturity_get', + 'mbl_array_t_maturity_set', + 'mbl_array_t_may_refine_rettype', + 'mbl_array_t_mbr_get', + 'mbl_array_t_mbr_set', + 'mbl_array_t_minargref_get', + 'mbl_array_t_minargref_set', + 'mbl_array_t_minstkref_ea_get', + 'mbl_array_t_minstkref_ea_set', + 'mbl_array_t_minstkref_get', + 'mbl_array_t_minstkref_set', + 'mbl_array_t_natural_get', + 'mbl_array_t_natural_set', + 'mbl_array_t_nodel_memory_get', + 'mbl_array_t_nodel_memory_set', + 'mbl_array_t_notes_get', + 'mbl_array_t_notes_set', + 'mbl_array_t_npurged_get', + 'mbl_array_t_npurged_set', + 'mbl_array_t_occurred_warns_get', + 'mbl_array_t_occurred_warns_set', + 'mbl_array_t_optimize_global', + 'mbl_array_t_optimize_local', + 'mbl_array_t_optimized', + 'mbl_array_t_pfn_flags_get', + 'mbl_array_t_pfn_flags_set', + 'mbl_array_t_precise_defeas', + 'mbl_array_t_propagated_asserts', + 'mbl_array_t_qty_get', + 'mbl_array_t_qty_set', + 'mbl_array_t_really_alloc', + 'mbl_array_t_regargs_is_not_aligned', + 'mbl_array_t_remove_block', + 'mbl_array_t_remove_empty_blocks', + 'mbl_array_t_reqmat_get', + 'mbl_array_t_reqmat_set', + 'mbl_array_t_restricted_memory_get', + 'mbl_array_t_restricted_memory_set', + 'mbl_array_t_retsize_get', + 'mbl_array_t_retsize_set', + 'mbl_array_t_returns_fpval', + 'mbl_array_t_retvaridx_get', + 'mbl_array_t_retvaridx_set', + 'mbl_array_t_rtype_refined', + 'mbl_array_t_saverest_done', + 'mbl_array_t_serialize', + 'mbl_array_t_set_mba_flags', + 'mbl_array_t_set_mba_flags2', + 'mbl_array_t_shadow_args_get', + 'mbl_array_t_shadow_args_set', + 'mbl_array_t_short_display', + 'mbl_array_t_should_beautify', + 'mbl_array_t_show_reduction', + 'mbl_array_t_spd_adjust_get', + 'mbl_array_t_spd_adjust_set', + 'mbl_array_t_spoiled_list_get', + 'mbl_array_t_spoiled_list_set', + 'mbl_array_t_stacksize_get', + 'mbl_array_t_stacksize_set', + 'mbl_array_t_std_ivls_get', + 'mbl_array_t_std_ivls_set', + 'mbl_array_t_stkoff_ida2vd', + 'mbl_array_t_stkoff_vd2ida', + 'mbl_array_t_term', + 'mbl_array_t_tmpstk_size_get', + 'mbl_array_t_tmpstk_size_set', + 'mbl_array_t_use_frame', + 'mbl_array_t_use_wingraph32', + 'mbl_array_t_valranges_done', + 'mbl_array_t_vars_get', + 'mbl_array_t_vars_set', + 'mbl_array_t_vd2idaloc', + 'mbl_array_t_vd2idaloc__SWIG_0', + 'mbl_array_t_vd2idaloc__SWIG_1', + 'mbl_array_t_verify', + 'mbl_array_t_write_to_const_detected', + 'mbl_graph_t_get_chain_stamp', + 'mbl_graph_t_get_du', + 'mbl_graph_t_get_mblock', + 'mbl_graph_t_get_ud', + 'mbl_graph_t_is_du_chain_dirty', + 'mbl_graph_t_is_redefined_globally', + 'mbl_graph_t_is_ud_chain_dirty', + 'mbl_graph_t_is_used_globally', + 'mblock_t__print', + 'mblock_t_append_def_list', + 'mblock_t_append_use_list', + 'mblock_t_build_def_list', + 'mblock_t_build_lists', + 'mblock_t_build_use_list', + 'mblock_t_dead_at_start_get', + 'mblock_t_dead_at_start_set', + 'mblock_t_dnu_get', + 'mblock_t_dnu_set', + 'mblock_t_dump', + 'mblock_t_dump_block', + 'mblock_t_dump_block__varargs__', + 'mblock_t_empty', + 'mblock_t_end_get', + 'mblock_t_end_set', + 'mblock_t_find_access', + 'mblock_t_find_def', + 'mblock_t_find_first_use', + 'mblock_t_find_redefinition', + 'mblock_t_find_use', + 'mblock_t_flags_get', + 'mblock_t_flags_set', + 'mblock_t_for_all_insns', + 'mblock_t_for_all_ops', + 'mblock_t_for_all_uses', + 'mblock_t_get_reginsn_qty', + 'mblock_t_get_valranges', + 'mblock_t_get_valranges__SWIG_0', + 'mblock_t_get_valranges__SWIG_1', + 'mblock_t_head_get', + 'mblock_t_head_set', + 'mblock_t_insert_into_block', + 'mblock_t_is_branch', + 'mblock_t_is_call_block', + 'mblock_t_is_nway', + 'mblock_t_is_redefined', + 'mblock_t_is_rhs_redefined', + 'mblock_t_is_simple_goto_block', + 'mblock_t_is_simple_jcnd_block', + 'mblock_t_is_unknown_call', + 'mblock_t_is_used', + 'mblock_t_lists_dirty', + 'mblock_t_lists_ready', + 'mblock_t_make_lists_ready', + 'mblock_t_make_nop', + 'mblock_t_mark_lists_dirty', + 'mblock_t_maxbsp_get', + 'mblock_t_maxbsp_set', + 'mblock_t_maybdef_get', + 'mblock_t_maybdef_set', + 'mblock_t_maybuse_get', + 'mblock_t_maybuse_set', + 'mblock_t_mba_get', + 'mblock_t_mba_set', + 'mblock_t_minbargref_get', + 'mblock_t_minbargref_set', + 'mblock_t_minbstkref_get', + 'mblock_t_minbstkref_set', + 'mblock_t_mustbdef_get', + 'mblock_t_mustbdef_set', + 'mblock_t_mustbuse_get', + 'mblock_t_mustbuse_set', + 'mblock_t_needs_propagation', + 'mblock_t_nextb_get', + 'mblock_t_nextb_set', + 'mblock_t_npred', + 'mblock_t_nsucc', + 'mblock_t_optimize_block', + 'mblock_t_optimize_insn', + 'mblock_t_optimize_useless_jump', + 'mblock_t_pred', + 'mblock_t_predset_get', + 'mblock_t_predset_set', + 'mblock_t_prevb_get', + 'mblock_t_prevb_set', + 'mblock_t_remove_from_block', + 'mblock_t_request_demote64', + 'mblock_t_request_propagation', + 'mblock_t_serial_get', + 'mblock_t_serial_set', + 'mblock_t_start_get', + 'mblock_t_start_set', + 'mblock_t_succ', + 'mblock_t_succset_get', + 'mblock_t_succset_set', + 'mblock_t_tail_get', + 'mblock_t_tail_set', + 'mblock_t_type_get', + 'mblock_t_type_set', + 'mcallarg_t__print', + 'mcallarg_t_argloc_get', + 'mcallarg_t_argloc_set', + 'mcallarg_t_copy_mop', + 'mcallarg_t_dstr', + 'mcallarg_t_ea_get', + 'mcallarg_t_ea_set', + 'mcallarg_t_make_int', + 'mcallarg_t_make_uint', + 'mcallarg_t_name_get', + 'mcallarg_t_name_set', + 'mcallarg_t_set_regarg', + 'mcallarg_t_set_regarg__SWIG_0', + 'mcallarg_t_set_regarg__SWIG_1', + 'mcallarg_t_set_regarg__SWIG_2', + 'mcallarg_t_type_get', + 'mcallarg_t_type_set', + 'mcallargs_t___eq__', + 'mcallargs_t___getitem__', + 'mcallargs_t___len__', + 'mcallargs_t___ne__', + 'mcallargs_t___setitem__', + 'mcallargs_t__del', + 'mcallargs_t_add_unique', + 'mcallargs_t_at', + 'mcallargs_t_begin', + 'mcallargs_t_begin__SWIG_0', + 'mcallargs_t_begin__SWIG_1', + 'mcallargs_t_capacity', + 'mcallargs_t_clear', + 'mcallargs_t_empty', + 'mcallargs_t_end', + 'mcallargs_t_end__SWIG_0', + 'mcallargs_t_end__SWIG_1', + 'mcallargs_t_erase', + 'mcallargs_t_erase__SWIG_0', + 'mcallargs_t_erase__SWIG_1', + 'mcallargs_t_extract', + 'mcallargs_t_find', + 'mcallargs_t_find__SWIG_0', + 'mcallargs_t_find__SWIG_1', + 'mcallargs_t_grow', + 'mcallargs_t_has', + 'mcallargs_t_inject', + 'mcallargs_t_insert', + 'mcallargs_t_pop_back', + 'mcallargs_t_push_back', + 'mcallargs_t_push_back__SWIG_0', + 'mcallargs_t_push_back__SWIG_1', + 'mcallargs_t_qclear', + 'mcallargs_t_reserve', + 'mcallargs_t_resize', + 'mcallargs_t_resize__SWIG_0', + 'mcallargs_t_resize__SWIG_1', + 'mcallargs_t_size', + 'mcallargs_t_swap', + 'mcallargs_t_truncate', + 'mcallinfo_t__print', + 'mcallinfo_t_args_get', + 'mcallinfo_t_args_set', + 'mcallinfo_t_call_spd_get', + 'mcallinfo_t_call_spd_set', + 'mcallinfo_t_callee_get', + 'mcallinfo_t_callee_set', + 'mcallinfo_t_cc_get', + 'mcallinfo_t_cc_set', + 'mcallinfo_t_dead_regs_get', + 'mcallinfo_t_dead_regs_set', + 'mcallinfo_t_dstr', + 'mcallinfo_t_flags_get', + 'mcallinfo_t_flags_set', + 'mcallinfo_t_fti_attrs_get', + 'mcallinfo_t_fti_attrs_set', + 'mcallinfo_t_get_type', + 'mcallinfo_t_is_vararg', + 'mcallinfo_t_lexcompare', + 'mcallinfo_t_pass_regs_get', + 'mcallinfo_t_pass_regs_set', + 'mcallinfo_t_retregs_get', + 'mcallinfo_t_retregs_set', + 'mcallinfo_t_return_argloc_get', + 'mcallinfo_t_return_argloc_set', + 'mcallinfo_t_return_regs_get', + 'mcallinfo_t_return_regs_set', + 'mcallinfo_t_return_type_get', + 'mcallinfo_t_return_type_set', + 'mcallinfo_t_role_get', + 'mcallinfo_t_role_set', + 'mcallinfo_t_set_type', + 'mcallinfo_t_solid_args_get', + 'mcallinfo_t_solid_args_set', + 'mcallinfo_t_spoiled_get', + 'mcallinfo_t_spoiled_set', + 'mcallinfo_t_stkargs_top_get', + 'mcallinfo_t_stkargs_top_set', + 'mcallinfo_t_visible_memory_get', + 'mcallinfo_t_visible_memory_set', + 'mcases_t___eq__', + 'mcases_t___ge__', + 'mcases_t___gt__', + 'mcases_t___le__', + 'mcases_t___lt__', + 'mcases_t___ne__', + 'mcases_t__print', + 'mcases_t_compare', + 'mcases_t_dstr', + 'mcases_t_empty', + 'mcases_t_resize', + 'mcases_t_size', + 'mcases_t_swap', + 'mcases_t_targets_get', + 'mcases_t_targets_set', + 'mcases_t_values_get', + 'mcases_t_values_set', + 'mcode_modifies_d', + 'mem2base', + 'member_t_by_til', + 'member_t_eoff_get', + 'member_t_eoff_set', + 'member_t_flag_get', + 'member_t_flag_set', + 'member_t_get_soff', + 'member_t_has_ti', + 'member_t_has_union', + 'member_t_id_get', + 'member_t_id_set', + 'member_t_is_baseclass', + 'member_t_is_destructor', + 'member_t_is_dupname', + 'member_t_props_get', + 'member_t_props_set', + 'member_t_soff_get', + 'member_t_soff_set', + 'member_t_unimem', + 'meminfo_vec_t___eq__', + 'meminfo_vec_t___getitem__', + 'meminfo_vec_t___len__', + 'meminfo_vec_t___ne__', + 'meminfo_vec_t___setitem__', + 'meminfo_vec_t__del', + 'meminfo_vec_t_add_unique', + 'meminfo_vec_t_at', + 'meminfo_vec_t_begin', + 'meminfo_vec_t_begin__SWIG_0', + 'meminfo_vec_t_begin__SWIG_1', + 'meminfo_vec_t_capacity', + 'meminfo_vec_t_clear', + 'meminfo_vec_t_empty', + 'meminfo_vec_t_end', + 'meminfo_vec_t_end__SWIG_0', + 'meminfo_vec_t_end__SWIG_1', + 'meminfo_vec_t_erase', + 'meminfo_vec_t_erase__SWIG_0', + 'meminfo_vec_t_erase__SWIG_1', + 'meminfo_vec_t_extract', + 'meminfo_vec_t_find', + 'meminfo_vec_t_find__SWIG_0', + 'meminfo_vec_t_find__SWIG_1', + 'meminfo_vec_t_grow', + 'meminfo_vec_t_has', + 'meminfo_vec_t_inject', + 'meminfo_vec_t_insert', + 'meminfo_vec_t_pop_back', + 'meminfo_vec_t_push_back', + 'meminfo_vec_t_push_back__SWIG_0', + 'meminfo_vec_t_push_back__SWIG_1', + 'meminfo_vec_t_qclear', + 'meminfo_vec_t_reserve', + 'meminfo_vec_t_resize', + 'meminfo_vec_t_resize__SWIG_0', + 'meminfo_vec_t_resize__SWIG_1', + 'meminfo_vec_t_size', + 'meminfo_vec_t_swap', + 'meminfo_vec_t_truncate', + 'memory_info_t___eq__', + 'memory_info_t___ne__', + 'memory_info_t_bitness_get', + 'memory_info_t_bitness_set', + 'memory_info_t_name_get', + 'memory_info_t_name_set', + 'memory_info_t_perm_get', + 'memory_info_t_perm_set', + 'memory_info_t_sbase_get', + 'memory_info_t_sbase_set', + 'memory_info_t_sclass_get', + 'memory_info_t_sclass_set', + 'memreg_info_t_ea_get', + 'memreg_info_t_ea_set', + 'memreg_info_t_get_bytes', + 'memreg_infos_t___getitem__', + 'memreg_infos_t___len__', + 'memreg_infos_t___setitem__', + 'memreg_infos_t_at', + 'memreg_infos_t_begin', + 'memreg_infos_t_begin__SWIG_0', + 'memreg_infos_t_begin__SWIG_1', + 'memreg_infos_t_capacity', + 'memreg_infos_t_clear', + 'memreg_infos_t_empty', + 'memreg_infos_t_end', + 'memreg_infos_t_end__SWIG_0', + 'memreg_infos_t_end__SWIG_1', + 'memreg_infos_t_erase', + 'memreg_infos_t_erase__SWIG_0', + 'memreg_infos_t_erase__SWIG_1', + 'memreg_infos_t_extract', + 'memreg_infos_t_grow', + 'memreg_infos_t_inject', + 'memreg_infos_t_insert', + 'memreg_infos_t_pop_back', + 'memreg_infos_t_push_back', + 'memreg_infos_t_push_back__SWIG_0', + 'memreg_infos_t_push_back__SWIG_1', + 'memreg_infos_t_qclear', + 'memreg_infos_t_reserve', + 'memreg_infos_t_resize', + 'memreg_infos_t_resize__SWIG_0', + 'memreg_infos_t_resize__SWIG_1', + 'memreg_infos_t_size', + 'memreg_infos_t_swap', + 'memreg_infos_t_truncate', + 'microcode_filter_t_apply', + 'microcode_filter_t_match', + 'minsn_t___dbg_get_meminfo', + 'minsn_t___dbg_get_registered_kind', + 'minsn_t___lt__', + 'minsn_t__deregister', + 'minsn_t__make_nop', + 'minsn_t__obj_id', + 'minsn_t__print', + 'minsn_t__register', + 'minsn_t_clr_assert', + 'minsn_t_clr_combinable', + 'minsn_t_clr_combined', + 'minsn_t_clr_fpinsn', + 'minsn_t_clr_ignlowsrc', + 'minsn_t_clr_multimov', + 'minsn_t_clr_noret_icall', + 'minsn_t_clr_propagatable', + 'minsn_t_clr_tailcall', + 'minsn_t_contains_call', + 'minsn_t_contains_opcode', + 'minsn_t_d_get', + 'minsn_t_d_set', + 'minsn_t_dstr', + 'minsn_t_ea_get', + 'minsn_t_ea_set', + 'minsn_t_equal_insns', + 'minsn_t_find_call', + 'minsn_t_find_ins_op', + 'minsn_t_find_num_op', + 'minsn_t_find_opcode', + 'minsn_t_find_opcode__SWIG_0', + 'minsn_t_find_opcode__SWIG_1', + 'minsn_t_for_all_insns', + 'minsn_t_for_all_ops', + 'minsn_t_get_role', + 'minsn_t_get_split_size', + 'minsn_t_has_side_effects', + 'minsn_t_iprops_get', + 'minsn_t_iprops_set', + 'minsn_t_is_after', + 'minsn_t_is_alloca', + 'minsn_t_is_assert', + 'minsn_t_is_between', + 'minsn_t_is_bswap', + 'minsn_t_is_cleaning_pop', + 'minsn_t_is_combinable', + 'minsn_t_is_combined', + 'minsn_t_is_extstx', + 'minsn_t_is_farcall', + 'minsn_t_is_fpinsn', + 'minsn_t_is_helper', + 'minsn_t_is_ignlowsrc', + 'minsn_t_is_inverted_jx', + 'minsn_t_is_like_move', + 'minsn_t_is_mbarrier', + 'minsn_t_is_memcpy', + 'minsn_t_is_memset', + 'minsn_t_is_mov', + 'minsn_t_is_multimov', + 'minsn_t_is_noret_call', + 'minsn_t_is_optional', + 'minsn_t_is_persistent', + 'minsn_t_is_propagatable', + 'minsn_t_is_readflags', + 'minsn_t_is_tailcall', + 'minsn_t_is_unknown_call', + 'minsn_t_is_wild_match', + 'minsn_t_l_get', + 'minsn_t_l_set', + 'minsn_t_lexcompare', + 'minsn_t_may_use_aliased_memory', + 'minsn_t_modifes_d', + 'minsn_t_modifies_pair_mop', + 'minsn_t_next_get', + 'minsn_t_next_set', + 'minsn_t_opcode_get', + 'minsn_t_opcode_set', + 'minsn_t_optimize_solo', + 'minsn_t_optimize_subtree', + 'minsn_t_prev_get', + 'minsn_t_prev_set', + 'minsn_t_r_get', + 'minsn_t_r_set', + 'minsn_t_set_assert', + 'minsn_t_set_cleaning_pop', + 'minsn_t_set_combinable', + 'minsn_t_set_extstx', + 'minsn_t_set_farcall', + 'minsn_t_set_fpinsn', + 'minsn_t_set_ignlowsrc', + 'minsn_t_set_inverted_jx', + 'minsn_t_set_mbarrier', + 'minsn_t_set_multimov', + 'minsn_t_set_noret_icall', + 'minsn_t_set_optional', + 'minsn_t_set_persistent', + 'minsn_t_set_split_size', + 'minsn_t_set_tailcall', + 'minsn_t_set_wild_match', + 'minsn_t_setaddr', + 'minsn_t_swap', + 'minsn_t_was_noret_icall', + 'minsn_t_was_split', + 'minsn_visitor_t_visit_minsn', + 'mlist_mop_visitor_t_changed_get', + 'mlist_mop_visitor_t_changed_set', + 'mlist_mop_visitor_t_curins_get', + 'mlist_mop_visitor_t_curins_set', + 'mlist_mop_visitor_t_list_get', + 'mlist_mop_visitor_t_list_set', + 'mlist_mop_visitor_t_topins_get', + 'mlist_mop_visitor_t_topins_set', + 'mlist_mop_visitor_t_visit_mop', + 'mlist_t___eq__', + 'mlist_t___ge__', + 'mlist_t___gt__', + 'mlist_t___le__', + 'mlist_t___lt__', + 'mlist_t___ne__', + 'mlist_t__print', + 'mlist_t_add', + 'mlist_t_add__SWIG_0', + 'mlist_t_add__SWIG_1', + 'mlist_t_add__SWIG_2', + 'mlist_t_add__SWIG_3', + 'mlist_t_addmem', + 'mlist_t_clear', + 'mlist_t_compare', + 'mlist_t_count', + 'mlist_t_dstr', + 'mlist_t_empty', + 'mlist_t_has', + 'mlist_t_has_all', + 'mlist_t_has_any', + 'mlist_t_has_common', + 'mlist_t_has_memory', + 'mlist_t_includes', + 'mlist_t_intersect', + 'mlist_t_is_subset_of', + 'mlist_t_mem_get', + 'mlist_t_mem_set', + 'mlist_t_reg_get', + 'mlist_t_reg_set', + 'mlist_t_sub', + 'mlist_t_sub__SWIG_0', + 'mlist_t_sub__SWIG_1', + 'mlist_t_sub__SWIG_2', + 'mlist_t_swap', + 'mnumber_t___eq__', + 'mnumber_t___ge__', + 'mnumber_t___gt__', + 'mnumber_t___le__', + 'mnumber_t___lt__', + 'mnumber_t___ne__', + 'mnumber_t_compare', + 'mnumber_t_org_value_get', + 'mnumber_t_org_value_set', + 'mnumber_t_update_value', + 'mnumber_t_value_get', + 'mnumber_t_value_set', + 'modify_user_lvar_info', + 'modify_user_lvars', + 'modinfo_t_base_get', + 'modinfo_t_base_set', + 'modinfo_t_name_get', + 'modinfo_t_name_set', + 'modinfo_t_rebase_to_get', + 'modinfo_t_rebase_to_set', + 'modinfo_t_size_get', + 'modinfo_t_size_set', + 'mop_addr_t_insize_get', + 'mop_addr_t_insize_set', + 'mop_addr_t_lexcompare', + 'mop_addr_t_outsize_get', + 'mop_addr_t_outsize_set', + 'mop_pair_t_hop_get', + 'mop_pair_t_hop_set', + 'mop_pair_t_lop_get', + 'mop_pair_t_lop_set', + 'mop_t___dbg_get_meminfo', + 'mop_t___dbg_get_registered_kind', + 'mop_t___eq__', + 'mop_t___lt__', + 'mop_t___ne__', + 'mop_t__deregister', + 'mop_t__get_a', + 'mop_t__get_b', + 'mop_t__get_c', + 'mop_t__get_cstr', + 'mop_t__get_d', + 'mop_t__get_f', + 'mop_t__get_fpc', + 'mop_t__get_g', + 'mop_t__get_helper', + 'mop_t__get_l', + 'mop_t__get_nnn', + 'mop_t__get_pair', + 'mop_t__get_r', + 'mop_t__get_s', + 'mop_t__get_scif', + 'mop_t__get_t', + 'mop_t__make_blkref', + 'mop_t__make_callinfo', + 'mop_t__make_cases', + 'mop_t__make_gvar', + 'mop_t__make_insn', + 'mop_t__make_lvar', + 'mop_t__make_pair', + 'mop_t__make_reg', + 'mop_t__make_reg__SWIG_0', + 'mop_t__make_reg__SWIG_1', + 'mop_t__make_stkvar', + 'mop_t__make_strlit', + 'mop_t__obj_id', + 'mop_t__print', + 'mop_t__register', + 'mop_t__set_a', + 'mop_t__set_b', + 'mop_t__set_c', + 'mop_t__set_cstr', + 'mop_t__set_d', + 'mop_t__set_f', + 'mop_t__set_fpc', + 'mop_t__set_g', + 'mop_t__set_helper', + 'mop_t__set_l', + 'mop_t__set_nnn', + 'mop_t__set_pair', + 'mop_t__set_r', + 'mop_t__set_s', + 'mop_t__set_scif', + 'mop_t__set_t', + 'mop_t_apply_ld_mcode', + 'mop_t_apply_xds', + 'mop_t_apply_xdu', + 'mop_t_assign', + 'mop_t_change_size', + 'mop_t_create_from_insn', + 'mop_t_create_from_ivlset', + 'mop_t_create_from_mlist', + 'mop_t_create_from_scattered_vdloc', + 'mop_t_create_from_vdloc', + 'mop_t_double_size', + 'mop_t_dstr', + 'mop_t_empty', + 'mop_t_equal_mops', + 'mop_t_erase', + 'mop_t_erase_but_keep_size', + 'mop_t_for_all_ops', + 'mop_t_for_all_scattered_submops', + 'mop_t_get_insn', + 'mop_t_get_insn__SWIG_0', + 'mop_t_get_insn__SWIG_1', + 'mop_t_get_stkoff', + 'mop_t_get_stkvar', + 'mop_t_has_side_effects', + 'mop_t_is01', + 'mop_t_is_arglist', + 'mop_t_is_bit_reg', + 'mop_t_is_bit_reg__SWIG_0', + 'mop_t_is_bit_reg__SWIG_1', + 'mop_t_is_cc', + 'mop_t_is_ccflags', + 'mop_t_is_constant', + 'mop_t_is_equal_to', + 'mop_t_is_extended_from', + 'mop_t_is_glbaddr', + 'mop_t_is_glbaddr__SWIG_0', + 'mop_t_is_glbaddr__SWIG_1', + 'mop_t_is_impptr_done', + 'mop_t_is_insn', + 'mop_t_is_insn__SWIG_0', + 'mop_t_is_insn__SWIG_1', + 'mop_t_is_kreg', + 'mop_t_is_mob', + 'mop_t_is_negative_constant', + 'mop_t_is_one', + 'mop_t_is_positive_constant', + 'mop_t_is_reg', + 'mop_t_is_reg__SWIG_0', + 'mop_t_is_reg__SWIG_1', + 'mop_t_is_reg__SWIG_2', + 'mop_t_is_scattered', + 'mop_t_is_sign_extended_from', + 'mop_t_is_stkaddr', + 'mop_t_is_udt', + 'mop_t_is_undef_val', + 'mop_t_is_zero', + 'mop_t_is_zero_extended_from', + 'mop_t_lexcompare', + 'mop_t_make_blkref', + 'mop_t_make_first_half', + 'mop_t_make_fpnum', + 'mop_t_make_gvar', + 'mop_t_make_helper', + 'mop_t_make_high_half', + 'mop_t_make_insn', + 'mop_t_make_low_half', + 'mop_t_make_number', + 'mop_t_make_reg', + 'mop_t_make_reg__SWIG_0', + 'mop_t_make_reg__SWIG_1', + 'mop_t_make_reg_pair', + 'mop_t_make_second_half', + 'mop_t_may_use_aliased_memory', + 'mop_t_oprops_get', + 'mop_t_oprops_set', + 'mop_t_preserve_side_effects', + 'mop_t_probably_floating', + 'mop_t_set_impptr_done', + 'mop_t_set_udt', + 'mop_t_set_undef_val', + 'mop_t_shift_mop', + 'mop_t_signed_value', + 'mop_t_size_get', + 'mop_t_size_set', + 'mop_t_swap', + 'mop_t_t_get', + 'mop_t_t_set', + 'mop_t_unsigned_value', + 'mop_t_valnum_get', + 'mop_t_valnum_set', + 'mop_t_value', + 'mop_t_zero', + 'mop_visitor_t_prune_get', + 'mop_visitor_t_prune_set', + 'mop_visitor_t_visit_mop', + 'mopvec_t___eq__', + 'mopvec_t___getitem__', + 'mopvec_t___len__', + 'mopvec_t___ne__', + 'mopvec_t___setitem__', + 'mopvec_t__del', + 'mopvec_t_add_unique', + 'mopvec_t_at', + 'mopvec_t_begin', + 'mopvec_t_begin__SWIG_0', + 'mopvec_t_begin__SWIG_1', + 'mopvec_t_capacity', + 'mopvec_t_clear', + 'mopvec_t_empty', + 'mopvec_t_end', + 'mopvec_t_end__SWIG_0', + 'mopvec_t_end__SWIG_1', + 'mopvec_t_erase', + 'mopvec_t_erase__SWIG_0', + 'mopvec_t_erase__SWIG_1', + 'mopvec_t_extract', + 'mopvec_t_find', + 'mopvec_t_find__SWIG_0', + 'mopvec_t_find__SWIG_1', + 'mopvec_t_grow', + 'mopvec_t_has', + 'mopvec_t_inject', + 'mopvec_t_insert', + 'mopvec_t_pop_back', + 'mopvec_t_push_back', + 'mopvec_t_push_back__SWIG_0', + 'mopvec_t_push_back__SWIG_1', + 'mopvec_t_qclear', + 'mopvec_t_reserve', + 'mopvec_t_resize', + 'mopvec_t_resize__SWIG_0', + 'mopvec_t_resize__SWIG_1', + 'mopvec_t_size', + 'mopvec_t_swap', + 'mopvec_t_truncate', + 'move_bpt_to_grp', + 'move_idcv', + 'move_segm', + 'move_segm_start', + 'mreg2reg', + 'msg', + 'msg_clear', + 'msg_get_lines', + 'msg_save', + 'must_mcode_close_block', + 'mutable_graph_t_belongs_get', + 'mutable_graph_t_belongs_set', + 'mutable_graph_t_calc_group_ea', + 'mutable_graph_t_change_group_visibility', + 'mutable_graph_t_clear', + 'mutable_graph_t_create_digraph_layout', + 'mutable_graph_t_create_group', + 'mutable_graph_t_del_custom_layout', + 'mutable_graph_t_delete_group', + 'mutable_graph_t_edges_get', + 'mutable_graph_t_edges_set', + 'mutable_graph_t_empty', + 'mutable_graph_t_exists', + 'mutable_graph_t_get_custom_layout', + 'mutable_graph_t_get_edge', + 'mutable_graph_t_get_first_subgraph_node', + 'mutable_graph_t_get_graph_groups', + 'mutable_graph_t_get_next_subgraph_node', + 'mutable_graph_t_get_node_group', + 'mutable_graph_t_get_node_representative', + 'mutable_graph_t_gid_get', + 'mutable_graph_t_gid_set', + 'mutable_graph_t_is_collapsed_node', + 'mutable_graph_t_is_deleted_node', + 'mutable_graph_t_is_displayable_node', + 'mutable_graph_t_is_dot_node', + 'mutable_graph_t_is_group_node', + 'mutable_graph_t_is_simple_node', + 'mutable_graph_t_is_subgraph_node', + 'mutable_graph_t_is_uncollapsed_node', + 'mutable_graph_t_is_user_graph', + 'mutable_graph_t_is_visible_node', + 'mutable_graph_t_node_flags_get', + 'mutable_graph_t_node_flags_set', + 'mutable_graph_t_node_qty', + 'mutable_graph_t_nodes_get', + 'mutable_graph_t_nodes_set', + 'mutable_graph_t_npred', + 'mutable_graph_t_nrect', + 'mutable_graph_t_nrect__SWIG_0', + 'mutable_graph_t_nrect__SWIG_1', + 'mutable_graph_t_nsucc', + 'mutable_graph_t_org_preds_get', + 'mutable_graph_t_org_preds_set', + 'mutable_graph_t_org_succs_get', + 'mutable_graph_t_org_succs_set', + 'mutable_graph_t_pred', + 'mutable_graph_t_preds_get', + 'mutable_graph_t_preds_set', + 'mutable_graph_t_predset', + 'mutable_graph_t_reset', + 'mutable_graph_t_set_custom_layout', + 'mutable_graph_t_set_deleted_node', + 'mutable_graph_t_set_edge', + 'mutable_graph_t_set_graph_groups', + 'mutable_graph_t_set_node_group', + 'mutable_graph_t_size', + 'mutable_graph_t_succ', + 'mutable_graph_t_succs_get', + 'mutable_graph_t_succs_set', + 'mutable_graph_t_succset', + 'nbits', + 'negate_mcode_relation', + 'negated_relation', + 'netnode___eq__', + 'netnode___eq____SWIG_0', + 'netnode___eq____SWIG_1', + 'netnode___ne__', + 'netnode___ne____SWIG_0', + 'netnode___ne____SWIG_1', + 'netnode_altdel', + 'netnode_altdel__SWIG_0', + 'netnode_altdel__SWIG_1', + 'netnode_altdel_all', + 'netnode_altdel_ea', + 'netnode_altdel_idx8', + 'netnode_altfirst', + 'netnode_altfirst_idx8', + 'netnode_altlast', + 'netnode_altlast_idx8', + 'netnode_altnext', + 'netnode_altnext_idx8', + 'netnode_altprev', + 'netnode_altprev_idx8', + 'netnode_altset', + 'netnode_altset_ea', + 'netnode_altset_idx8', + 'netnode_altshift', + 'netnode_altval', + 'netnode_altval_ea', + 'netnode_altval_idx8', + 'netnode_blobsize', + 'netnode_blobsize_ea', + 'netnode_chardel', + 'netnode_chardel_ea', + 'netnode_chardel_idx8', + 'netnode_charfirst', + 'netnode_charfirst_idx8', + 'netnode_charlast', + 'netnode_charlast_idx8', + 'netnode_charnext', + 'netnode_charnext_idx8', + 'netnode_charprev', + 'netnode_charprev_idx8', + 'netnode_charset', + 'netnode_charset_ea', + 'netnode_charset_idx8', + 'netnode_charshift', + 'netnode_charval', + 'netnode_charval_ea', + 'netnode_charval_idx8', + 'netnode_copyto', + 'netnode_create', + 'netnode_create__SWIG_0', + 'netnode_create__SWIG_1', + 'netnode_delblob', + 'netnode_delblob_ea', + 'netnode_delvalue', + 'netnode_eadel', + 'netnode_eadel_idx8', + 'netnode_eaget', + 'netnode_eaget_idx', + 'netnode_eaget_idx8', + 'netnode_easet', + 'netnode_easet_idx', + 'netnode_easet_idx8', + 'netnode_end', + 'netnode_get_name', + 'netnode_getblob', + 'netnode_getblob_ea', + 'netnode_getclob', + 'netnode_hashdel', + 'netnode_hashdel_all', + 'netnode_hashfirst', + 'netnode_hashlast', + 'netnode_hashnext', + 'netnode_hashprev', + 'netnode_hashset', + 'netnode_hashset_buf', + 'netnode_hashset_idx', + 'netnode_hashstr', + 'netnode_hashstr_buf', + 'netnode_hashval', + 'netnode_hashval_long', + 'netnode_index', + 'netnode_kill', + 'netnode_long_value', + 'netnode_lower_bound', + 'netnode_lower_bound_ea', + 'netnode_lower_bound_idx8', + 'netnode_moveto', + 'netnode_next', + 'netnode_prev', + 'netnode_rename', + 'netnode_set', + 'netnode_set_long', + 'netnode_setblob', + 'netnode_setblob_ea', + 'netnode_start', + 'netnode_supdel', + 'netnode_supdel__SWIG_0', + 'netnode_supdel__SWIG_1', + 'netnode_supdel_all', + 'netnode_supdel_ea', + 'netnode_supdel_idx8', + 'netnode_supdel_range', + 'netnode_supdel_range_idx8', + 'netnode_supfirst', + 'netnode_supfirst_idx8', + 'netnode_suplast', + 'netnode_suplast_idx8', + 'netnode_supnext', + 'netnode_supnext_idx8', + 'netnode_supprev', + 'netnode_supprev_idx8', + 'netnode_supset', + 'netnode_supset__SWIG_0', + 'netnode_supset__SWIG_1', + 'netnode_supset_ea', + 'netnode_supset_ea__SWIG_0', + 'netnode_supset_ea__SWIG_1', + 'netnode_supset_idx8', + 'netnode_supshift', + 'netnode_supstr', + 'netnode_supstr_ea', + 'netnode_supstr_idx8', + 'netnode_supval', + 'netnode_supval_ea', + 'netnode_supval_idx8', + 'netnode_valobj', + 'netnode_valstr', + 'netnode_value_exists', + 'new_DBG_Hooks', + 'new_Hexrays_Hooks', + 'new_IDB_Hooks', + 'new_IDP_Hooks', + 'new_TPointDouble', + 'new_TPointDouble__SWIG_0', + 'new_TPointDouble__SWIG_1', + 'new_TPointDouble__SWIG_2', + 'new_UI_Hooks', + 'new_View_Hooks', + 'new___qmutex_t', + 'new___qsemaphore_t', + 'new___qthread_t', + 'new___qtimer_t', + 'new_action_ctx_base_t', + 'new_action_desc_t', + 'new_addon_info_t', + 'new_aloc_visitor_t', + 'new_argloc_t', + 'new_argloc_t__SWIG_0', + 'new_argloc_t__SWIG_1', + 'new_argpart_t', + 'new_argpart_t__SWIG_0', + 'new_argpart_t__SWIG_1', + 'new_argpartvec_t', + 'new_argpartvec_t__SWIG_0', + 'new_argpartvec_t__SWIG_1', + 'new_array_of_bitsets', + 'new_array_of_bitsets__SWIG_0', + 'new_array_of_bitsets__SWIG_1', + 'new_array_of_ivlsets', + 'new_array_of_ivlsets__SWIG_0', + 'new_array_of_ivlsets__SWIG_1', + 'new_array_of_rangesets', + 'new_array_of_rangesets__SWIG_0', + 'new_array_of_rangesets__SWIG_1', + 'new_array_parameters_t', + 'new_array_type_data_t', + 'new_asm_t', + 'new_auto_display_t', + 'new_bgcolors_t', + 'new_bit_bound_t', + 'new_bitfield_type_data_t', + 'new_bitset_t', + 'new_bitset_t__SWIG_0', + 'new_bitset_t__SWIG_1', + 'new_block_chains_iterator_t', + 'new_block_chains_t', + 'new_block_chains_vec_t', + 'new_block_chains_vec_t__SWIG_0', + 'new_block_chains_vec_t__SWIG_1', + 'new_boolvec_t', + 'new_boolvec_t__SWIG_0', + 'new_boolvec_t__SWIG_1', + 'new_boundaries_iterator_t', + 'new_boundaries_t', + 'new_bpt_location_t', + 'new_bpt_t', + 'new_bpt_vec_t', + 'new_bpt_vec_t__SWIG_0', + 'new_bpt_vec_t__SWIG_1', + 'new_bptaddr_t', + 'new_call_stack_info_t', + 'new_call_stack_t', + 'new_call_stack_t__SWIG_0', + 'new_call_stack_t__SWIG_1', + 'new_callregs_t', + 'new_callregs_t__SWIG_0', + 'new_callregs_t__SWIG_1', + 'new_carg_t', + 'new_carglist_t', + 'new_carglist_t__SWIG_0', + 'new_carglist_t__SWIG_1', + 'new_cases_and_targets_t', + 'new_casevec_t', + 'new_casevec_t__SWIG_0', + 'new_casevec_t__SWIG_1', + 'new_casm_t', + 'new_casm_t__SWIG_0', + 'new_casm_t__SWIG_1', + 'new_catch_t', + 'new_catchvec_t', + 'new_catchvec_t__SWIG_0', + 'new_catchvec_t__SWIG_1', + 'new_cblock_t', + 'new_ccase_t', + 'new_ccases_t', + 'new_cdg_insn_iterator_t', + 'new_cdg_insn_iterator_t__SWIG_0', + 'new_cdg_insn_iterator_t__SWIG_1', + 'new_cdo_t', + 'new_ceinsn_t', + 'new_cexpr_t', + 'new_cexpr_t__SWIG_0', + 'new_cexpr_t__SWIG_1', + 'new_cexpr_t__SWIG_2', + 'new_cexpr_t__SWIG_3', + 'new_cexpr_t__SWIG_4', + 'new_cfor_t', + 'new_cfunc_parentee_t', + 'new_cfuncptr_t', + 'new_cfuncptr_t__SWIG_0', + 'new_cfuncptr_t__SWIG_1', + 'new_cgoto_t', + 'new_chain_keeper_t', + 'new_chain_t', + 'new_chain_t__SWIG_0', + 'new_chain_t__SWIG_1', + 'new_chain_t__SWIG_2', + 'new_chain_visitor_t', + 'new_channel_redir_t', + 'new_chooser_item_attrs_t', + 'new_cif_t', + 'new_cif_t__SWIG_0', + 'new_cif_t__SWIG_1', + 'new_cinsn_t', + 'new_cinsn_t__SWIG_0', + 'new_cinsn_t__SWIG_1', + 'new_cinsnptrvec_t', + 'new_cinsnptrvec_t__SWIG_0', + 'new_cinsnptrvec_t__SWIG_1', + 'new_citem_cmt_t', + 'new_citem_cmt_t__SWIG_0', + 'new_citem_cmt_t__SWIG_1', + 'new_citem_locator_t', + 'new_citem_locator_t__SWIG_0', + 'new_citem_locator_t__SWIG_1', + 'new_citem_t', + 'new_citem_t__SWIG_0', + 'new_citem_t__SWIG_1', + 'new_cloop_t', + 'new_cloop_t__SWIG_0', + 'new_cloop_t__SWIG_1', + 'new_cloop_t__SWIG_2', + 'new_cnumber_t', + 'new_codegen_t', + 'new_compiler_info_t', + 'new_const_aloc_visitor_t', + 'new_creturn_t', + 'new_cswitch_t', + 'new_ctext_position_t', + 'new_ctree_anchor_t', + 'new_ctree_item_t', + 'new_ctree_items_t', + 'new_ctree_items_t__SWIG_0', + 'new_ctree_items_t__SWIG_1', + 'new_ctree_parentee_t', + 'new_ctree_visitor_t', + 'new_custom_data_type_ids_fids_array', + 'new_custom_data_type_ids_t', + 'new_cwhile_t', + 'new_data_format_t', + 'new_data_type_t', + 'new_debapp_attrs_t', + 'new_debug_event_t', + 'new_debug_event_t__SWIG_0', + 'new_debug_event_t__SWIG_1', + 'new_disasm_line_t', + 'new_disasm_line_t__SWIG_0', + 'new_disasm_line_t__SWIG_1', + 'new_disasm_text_t', + 'new_disasm_text_t__SWIG_0', + 'new_disasm_text_t__SWIG_1', + 'new_ea_array', + 'new_ea_name_t', + 'new_ea_name_t__SWIG_0', + 'new_ea_name_t__SWIG_1', + 'new_ea_name_vec_t', + 'new_ea_name_vec_t__SWIG_0', + 'new_ea_name_vec_t__SWIG_1', + 'new_ea_pointer', + 'new_eamap_iterator_t', + 'new_eamap_t', + 'new_edge_info_t', + 'new_edge_layout_point_t', + 'new_edge_layout_point_t__SWIG_0', + 'new_edge_layout_point_t__SWIG_1', + 'new_edge_layout_point_t__SWIG_2', + 'new_edge_segment_t', + 'new_edge_t', + 'new_edge_t__SWIG_0', + 'new_edge_t__SWIG_1', + 'new_enum_const_t', + 'new_enum_member_t', + 'new_enum_member_vec_t', + 'new_enum_member_vec_t__SWIG_0', + 'new_enum_member_vec_t__SWIG_1', + 'new_enum_member_visitor_t', + 'new_enum_type_data_t', + 'new_eval_ctx_t', + 'new_exception_info_t', + 'new_exception_info_t__SWIG_0', + 'new_exception_info_t__SWIG_1', + 'new_excinfo_t', + 'new_excvec_t', + 'new_excvec_t__SWIG_0', + 'new_excvec_t__SWIG_1', + 'new_fixup_data_t', + 'new_fixup_data_t__SWIG_0', + 'new_fixup_data_t__SWIG_1', + 'new_fixup_info_t', + 'new_fnum_array', + 'new_fnumber_t', + 'new_func_item_iterator_t', + 'new_func_item_iterator_t__SWIG_0', + 'new_func_item_iterator_t__SWIG_1', + 'new_func_parent_iterator_t', + 'new_func_parent_iterator_t__SWIG_0', + 'new_func_parent_iterator_t__SWIG_1', + 'new_func_t', + 'new_func_tail_iterator_t', + 'new_func_tail_iterator_t__SWIG_0', + 'new_func_tail_iterator_t__SWIG_1', + 'new_func_type_data_t', + 'new_funcarg_t', + 'new_funcargvec_t', + 'new_funcargvec_t__SWIG_0', + 'new_funcargvec_t__SWIG_1', + 'new_gco_info_t', + 'new_graph_chains_t', + 'new_graph_item_t', + 'new_graph_location_info_t', + 'new_graph_node_visitor_t', + 'new_graph_path_visitor_t', + 'new_graph_visitor_t', + 'new_group_crinfo_t', + 'new_hexrays_failure_t', + 'new_hexrays_failure_t__SWIG_0', + 'new_hexrays_failure_t__SWIG_1', + 'new_hexrays_failure_t__SWIG_2', + 'new_hexwarn_t', + 'new_hexwarns_t', + 'new_hexwarns_t__SWIG_0', + 'new_hexwarns_t__SWIG_1', + 'new_hidden_range_t', + 'new_highlighter_cbs_t', + 'new_history_item_t', + 'new_history_item_t__SWIG_0', + 'new_history_item_t__SWIG_1', + 'new_history_t', + 'new_ida_lowertype_helper_t', + 'new_idc_global_t', + 'new_idc_global_t__SWIG_0', + 'new_idc_global_t__SWIG_1', + 'new_idc_value_t', + 'new_idc_value_t__SWIG_0', + 'new_idc_value_t__SWIG_1', + 'new_idc_value_t__SWIG_2', + 'new_idc_values_t', + 'new_idc_values_t__SWIG_0', + 'new_idc_values_t__SWIG_1', + 'new_idp_desc_t', + 'new_idp_name_t', + 'new_insn_t', + 'new_instant_dbgopts_t', + 'new_int_pointer', + 'new_interval_t', + 'new_interval_t__SWIG_0', + 'new_interval_t__SWIG_1', + 'new_interval_t__SWIG_2', + 'new_intvec_t', + 'new_intvec_t__SWIG_0', + 'new_intvec_t__SWIG_1', + 'new_ivl_t', + 'new_ivl_with_name_t', + 'new_ivlset_t', + 'new_ivlset_t__SWIG_0', + 'new_ivlset_t__SWIG_1', + 'new_llabel_t', + 'new_loader_input_t', + 'new_loader_t', + 'new_lochist_entry_t', + 'new_lochist_entry_t__SWIG_0', + 'new_lochist_entry_t__SWIG_1', + 'new_lochist_entry_t__SWIG_2', + 'new_lochist_t', + 'new_lock_func', + 'new_lock_segment', + 'new_longlongvec_t', + 'new_longlongvec_t__SWIG_0', + 'new_longlongvec_t__SWIG_1', + 'new_lvar_locator_t', + 'new_lvar_locator_t__SWIG_0', + 'new_lvar_locator_t__SWIG_1', + 'new_lvar_mapping_iterator_t', + 'new_lvar_mapping_t', + 'new_lvar_ref_t', + 'new_lvar_ref_t__SWIG_0', + 'new_lvar_ref_t__SWIG_1', + 'new_lvar_saved_info_t', + 'new_lvar_saved_infos_t', + 'new_lvar_saved_infos_t__SWIG_0', + 'new_lvar_saved_infos_t__SWIG_1', + 'new_lvar_uservec_t', + 'new_lvars_t', + 'new_mba_range_iterator_t', + 'new_mba_ranges_t', + 'new_mba_ranges_t__SWIG_0', + 'new_mba_ranges_t__SWIG_1', + 'new_mcallarg_t', + 'new_mcallarg_t__SWIG_0', + 'new_mcallarg_t__SWIG_1', + 'new_mcallargs_t', + 'new_mcallargs_t__SWIG_0', + 'new_mcallargs_t__SWIG_1', + 'new_mcallinfo_t', + 'new_mcases_t', + 'new_member_t', + 'new_meminfo_vec_t', + 'new_meminfo_vec_t__SWIG_0', + 'new_meminfo_vec_t__SWIG_1', + 'new_memory_info_t', + 'new_memreg_info_t', + 'new_memreg_infos_t', + 'new_memreg_infos_t__SWIG_0', + 'new_memreg_infos_t__SWIG_1', + 'new_microcode_filter_t', + 'new_minsn_t', + 'new_minsn_t__SWIG_0', + 'new_minsn_t__SWIG_1', + 'new_minsn_visitor_t', + 'new_mlist_mop_visitor_t', + 'new_mlist_t', + 'new_mlist_t__SWIG_0', + 'new_mlist_t__SWIG_1', + 'new_mlist_t__SWIG_2', + 'new_mnumber_t', + 'new_modinfo_t', + 'new_mop_addr_t', + 'new_mop_addr_t__SWIG_0', + 'new_mop_addr_t__SWIG_1', + 'new_mop_addr_t__SWIG_2', + 'new_mop_pair_t', + 'new_mop_t', + 'new_mop_t__SWIG_0', + 'new_mop_t__SWIG_1', + 'new_mop_t__SWIG_2', + 'new_mop_visitor_t', + 'new_mopvec_t', + 'new_mopvec_t__SWIG_0', + 'new_mopvec_t__SWIG_1', + 'new_netnode', + 'new_netnode__SWIG_0', + 'new_netnode__SWIG_1', + 'new_netnode__SWIG_2', + 'new_node_info_t', + 'new_node_iterator', + 'new_node_layout_t', + 'new_node_layout_t__SWIG_0', + 'new_node_layout_t__SWIG_1', + 'new_node_ordering_t', + 'new_number_format_t', + 'new_op_parent_info_t', + 'new_op_t', + 'new_operand_locator_t', + 'new_operands_array', + 'new_operator_info_t', + 'new_opinfo_t', + 'new_optblock_t', + 'new_optinsn_t', + 'new_plugin_info_t', + 'new_point_t', + 'new_point_t__SWIG_0', + 'new_point_t__SWIG_1', + 'new_pointseq_t', + 'new_pointvec_t', + 'new_pointvec_t__SWIG_0', + 'new_pointvec_t__SWIG_1', + 'new_predicate_t', + 'new_printop_t', + 'new_process_info_t', + 'new_procinfo_vec_t', + 'new_procinfo_vec_t__SWIG_0', + 'new_procinfo_vec_t__SWIG_1', + 'new_ptr_type_data_t', + 'new_qbasic_block_t', + 'new_qfile_t', + 'new_qfile_t__SWIG_0', + 'new_qfile_t__SWIG_1', + 'new_qflow_chart_t', + 'new_qflow_chart_t__SWIG_0', + 'new_qflow_chart_t__SWIG_1', + 'new_qlist_cinsn_t', + 'new_qlist_cinsn_t__SWIG_0', + 'new_qlist_cinsn_t__SWIG_1', + 'new_qlist_cinsn_t_iterator', + 'new_qmutex_locker_t', + 'new_qstring_printer_t', + 'new_qvector_carg_t', + 'new_qvector_carg_t__SWIG_0', + 'new_qvector_carg_t__SWIG_1', + 'new_qvector_ccase_t', + 'new_qvector_ccase_t__SWIG_0', + 'new_qvector_ccase_t__SWIG_1', + 'new_qvector_history_t', + 'new_qvector_history_t__SWIG_0', + 'new_qvector_history_t__SWIG_1', + 'new_qvector_lvar_t', + 'new_qvector_lvar_t__SWIG_0', + 'new_qvector_lvar_t__SWIG_1', + 'new_qvector_snapshotvec_t', + 'new_qvector_snapshotvec_t__SWIG_0', + 'new_qvector_snapshotvec_t__SWIG_1', + 'new_range_array', + 'new_range_t', + 'new_range_t__SWIG_0', + 'new_range_t__SWIG_1', + 'new_rangeset_t', + 'new_rangeset_t__SWIG_0', + 'new_rangeset_t__SWIG_1', + 'new_rangeset_t__SWIG_2', + 'new_rangevec_base_t', + 'new_rangevec_base_t__SWIG_0', + 'new_rangevec_base_t__SWIG_1', + 'new_rangevec_t', + 'new_rect_t', + 'new_rect_t__SWIG_0', + 'new_rect_t__SWIG_1', + 'new_rect_t__SWIG_2', + 'new_refinfo_t', + 'new_reg_info_t', + 'new_regarg_t', + 'new_reginfovec_t', + 'new_reginfovec_t__SWIG_0', + 'new_reginfovec_t__SWIG_1', + 'new_register_info_t', + 'new_regobj_t', + 'new_regobjs_t', + 'new_regobjvec_t', + 'new_regobjvec_t__SWIG_0', + 'new_regobjvec_t__SWIG_1', + 'new_regval_t', + 'new_regval_t__SWIG_0', + 'new_regval_t__SWIG_1', + 'new_regvar_array', + 'new_regvar_t', + 'new_renderer_info_pos_t', + 'new_renderer_info_t', + 'new_renderer_pos_info_t', + 'new_rlist_t', + 'new_rlist_t__SWIG_0', + 'new_rlist_t__SWIG_1', + 'new_rlist_t__SWIG_2', + 'new_row_info_t', + 'new_rrel_t', + 'new_scattered_aloc_t', + 'new_scattered_segm_t', + 'new_scif_t', + 'new_scif_visitor_t', + 'new_screen_graph_selection_base_t', + 'new_screen_graph_selection_base_t__SWIG_0', + 'new_screen_graph_selection_base_t__SWIG_1', + 'new_screen_graph_selection_t', + 'new_segm_move_info_t', + 'new_segm_move_info_vec_t', + 'new_segm_move_info_vec_t__SWIG_0', + 'new_segm_move_info_vec_t__SWIG_1', + 'new_segm_move_infos_t', + 'new_segment_t', + 'new_seh_t', + 'new_sel_array', + 'new_sel_pointer', + 'new_selection_item_t', + 'new_selection_item_t__SWIG_0', + 'new_selection_item_t__SWIG_1', + 'new_selection_item_t__SWIG_2', + 'new_selection_item_t__SWIG_3', + 'new_simd_info_t', + 'new_simpleline_t', + 'new_simpleline_t__SWIG_0', + 'new_simpleline_t__SWIG_1', + 'new_simpleline_t__SWIG_2', + 'new_sizevec_t', + 'new_sizevec_t__SWIG_0', + 'new_sizevec_t__SWIG_1', + 'new_snapshot_t', + 'new_sreg_range_t', + 'new_stkpnt_array', + 'new_stkpnt_t', + 'new_stkpnts_t', + 'new_stkvar_ref_t', + 'new_strarray_t', + 'new_string_info_t', + 'new_string_info_t__SWIG_0', + 'new_string_info_t__SWIG_1', + 'new_strpath_ids_array', + 'new_strpath_t', + 'new_struct_field_visitor_t', + 'new_strvec_t', + 'new_strvec_t__SWIG_0', + 'new_strvec_t__SWIG_1', + 'new_strwinsetup_t', + 'new_sval_pointer', + 'new_switch_info_t', + 'new_sync_source_t', + 'new_sync_source_t__SWIG_0', + 'new_sync_source_t__SWIG_1', + 'new_tev_info_reg_t', + 'new_tev_info_t', + 'new_tev_reg_value_t', + 'new_tev_reg_values_t', + 'new_tev_reg_values_t__SWIG_0', + 'new_tev_reg_values_t__SWIG_1', + 'new_tevinforeg_vec_t', + 'new_tevinforeg_vec_t__SWIG_0', + 'new_tevinforeg_vec_t__SWIG_1', + 'new_text_sink_t', + 'new_thread_name_t', + 'new_tid_array', + 'new_til', + 'new_til_symbol_t', + 'new_til_t', + 'new_tinfo_t', + 'new_tinfo_t__SWIG_0', + 'new_tinfo_t__SWIG_1', + 'new_tinfo_t__SWIG_2', + 'new_tinfo_visitor_t', + 'new_treeloc_t', + 'new_try_handler_t', + 'new_tryblk_t', + 'new_tryblk_t__SWIG_0', + 'new_tryblk_t__SWIG_1', + 'new_tryblks_t', + 'new_tryblks_t__SWIG_0', + 'new_tryblks_t__SWIG_1', + 'new_twinpos_t', + 'new_twinpos_t__SWIG_0', + 'new_twinpos_t__SWIG_1', + 'new_twinpos_t__SWIG_2', + 'new_type_attr_t', + 'new_type_attrs_t', + 'new_type_attrs_t__SWIG_0', + 'new_type_attrs_t__SWIG_1', + 'new_type_mods_t', + 'new_typedef_type_data_t', + 'new_typedef_type_data_t__SWIG_0', + 'new_typedef_type_data_t__SWIG_1', + 'new_uchar_array', + 'new_udc_filter_t', + 'new_udcall_map_iterator_t', + 'new_udcall_t', + 'new_udt_member_t', + 'new_udt_type_data_t', + 'new_udtmembervec_t', + 'new_udtmembervec_t__SWIG_0', + 'new_udtmembervec_t__SWIG_1', + 'new_ui_requests_t', + 'new_ui_stroff_applicator_t', + 'new_ui_stroff_op_t', + 'new_ui_stroff_ops_t', + 'new_ui_stroff_ops_t__SWIG_0', + 'new_ui_stroff_ops_t__SWIG_1', + 'new_uintvec_t', + 'new_uintvec_t__SWIG_0', + 'new_uintvec_t__SWIG_1', + 'new_ulonglongvec_t', + 'new_ulonglongvec_t__SWIG_0', + 'new_ulonglongvec_t__SWIG_1', + 'new_user_cmts_iterator_t', + 'new_user_cmts_t', + 'new_user_iflags_iterator_t', + 'new_user_iflags_t', + 'new_user_labels_iterator_t', + 'new_user_labels_t', + 'new_user_lvar_modifier_t', + 'new_user_numforms_iterator_t', + 'new_user_numforms_t', + 'new_user_unions_iterator_t', + 'new_user_unions_t', + 'new_uval_array', + 'new_uval_ivl_ivlset_t', + 'new_uval_ivl_ivlset_t__SWIG_0', + 'new_uval_ivl_ivlset_t__SWIG_1', + 'new_uval_ivl_t', + 'new_uval_ivl_t__SWIG_1', + 'new_valrng_t', + 'new_valrng_t__SWIG_0', + 'new_valrng_t__SWIG_1', + 'new_valstr_t', + 'new_valstrs_t', + 'new_valstrvec_t', + 'new_valstrvec_t__SWIG_0', + 'new_valstrvec_t__SWIG_1', + 'new_var_ref_t', + 'new_vc_printer_t', + 'new_vd_failure_t', + 'new_vd_failure_t__SWIG_0', + 'new_vd_failure_t__SWIG_1', + 'new_vd_failure_t__SWIG_2', + 'new_vd_failure_t__SWIG_3', + 'new_vd_interr_t', + 'new_vd_printer_t', + 'new_vdloc_t', + 'new_view_mouse_event_location_t', + 'new_view_mouse_event_t', + 'new_vivl_t', + 'new_vivl_t__SWIG_0', + 'new_vivl_t__SWIG_1', + 'new_vivl_t__SWIG_2', + 'new_voff_t', + 'new_voff_t__SWIG_0', + 'new_voff_t__SWIG_1', + 'new_voff_t__SWIG_2', + 'new_xrefblk_t', + 'new_xreflist_entry_t', + 'new_xreflist_t', + 'new_xreflist_t__SWIG_0', + 'new_xreflist_t__SWIG_1', + 'next_addr', + 'next_chunk', + 'next_head', + 'next_idcv_attr', + 'next_inited', + 'next_named_type', + 'next_not_tail', + 'next_that', + 'next_unknown', + 'node2ea', + 'node_info_t_bg_color_get', + 'node_info_t_bg_color_set', + 'node_info_t_ea_get', + 'node_info_t_ea_set', + 'node_info_t_flags_get', + 'node_info_t_flags_set', + 'node_info_t_frame_color_get', + 'node_info_t_frame_color_set', + 'node_info_t_get_flags_for_valid', + 'node_info_t_text_get', + 'node_info_t_text_set', + 'node_info_t_valid_bg_color', + 'node_info_t_valid_ea', + 'node_info_t_valid_flags', + 'node_info_t_valid_frame_color', + 'node_info_t_valid_text', + 'node_iterator___eq__', + 'node_iterator___ne__', + 'node_iterator___ref__', + 'node_layout_t___eq__', + 'node_layout_t___getitem__', + 'node_layout_t___len__', + 'node_layout_t___ne__', + 'node_layout_t___setitem__', + 'node_layout_t__del', + 'node_layout_t_add_unique', + 'node_layout_t_at', + 'node_layout_t_begin', + 'node_layout_t_begin__SWIG_0', + 'node_layout_t_begin__SWIG_1', + 'node_layout_t_capacity', + 'node_layout_t_clear', + 'node_layout_t_empty', + 'node_layout_t_end', + 'node_layout_t_end__SWIG_0', + 'node_layout_t_end__SWIG_1', + 'node_layout_t_erase', + 'node_layout_t_erase__SWIG_0', + 'node_layout_t_erase__SWIG_1', + 'node_layout_t_extract', + 'node_layout_t_find', + 'node_layout_t_find__SWIG_0', + 'node_layout_t_find__SWIG_1', + 'node_layout_t_grow', + 'node_layout_t_has', + 'node_layout_t_inject', + 'node_layout_t_insert', + 'node_layout_t_pop_back', + 'node_layout_t_push_back', + 'node_layout_t_push_back__SWIG_0', + 'node_layout_t_push_back__SWIG_1', + 'node_layout_t_qclear', + 'node_layout_t_reserve', + 'node_layout_t_resize', + 'node_layout_t_resize__SWIG_0', + 'node_layout_t_resize__SWIG_1', + 'node_layout_t_size', + 'node_layout_t_swap', + 'node_layout_t_truncate', + 'node_ordering_t_clear', + 'node_ordering_t_node', + 'node_ordering_t_resize', + 'node_ordering_t_set', + 'node_ordering_t_size', + 'nomem', + 'nomem__varargs__', + 'num_flag', + 'number_format_t_flags_get', + 'number_format_t_flags_set', + 'number_format_t_get_radix', + 'number_format_t_is_char', + 'number_format_t_is_dec', + 'number_format_t_is_enum', + 'number_format_t_is_fixed', + 'number_format_t_is_hex', + 'number_format_t_is_numop', + 'number_format_t_is_oct', + 'number_format_t_is_stroff', + 'number_format_t_needs_to_be_inverted', + 'number_format_t_opnum_get', + 'number_format_t_opnum_set', + 'number_format_t_org_nbytes_get', + 'number_format_t_org_nbytes_set', + 'number_format_t_props_get', + 'number_format_t_props_set', + 'number_format_t_serial_get', + 'number_format_t_serial_set', + 'number_format_t_type_name_get', + 'number_format_t_type_name_set', + 'oct_flag', + 'off_flag', + 'op_adds_xrefs', + 'op_bin', + 'op_chr', + 'op_custfmt', + 'op_dec', + 'op_enum', + 'op_flt', + 'op_hex', + 'op_num', + 'op_oct', + 'op_offset', + 'op_offset_ex', + 'op_parent_info_t_blk_get', + 'op_parent_info_t_blk_set', + 'op_parent_info_t_curins_get', + 'op_parent_info_t_curins_set', + 'op_parent_info_t_mba_get', + 'op_parent_info_t_mba_set', + 'op_parent_info_t_topins_get', + 'op_parent_info_t_topins_set', + 'op_plain_offset', + 'op_seg', + 'op_stkvar', + 'op_stroff', + 'op_t___get_addr__', + 'op_t___get_reg_phrase__', + 'op_t___get_specval__', + 'op_t___get_value__', + 'op_t___set_addr__', + 'op_t___set_reg_phrase__', + 'op_t___set_specval__', + 'op_t___set_value__', + 'op_t__from_ptrval__', + 'op_t_assign', + 'op_t_clr_shown', + 'op_t_dtype_get', + 'op_t_dtype_set', + 'op_t_flags_get', + 'op_t_flags_set', + 'op_t_is_imm', + 'op_t_is_reg', + 'op_t_n_get', + 'op_t_n_set', + 'op_t_offb_get', + 'op_t_offb_set', + 'op_t_offo_get', + 'op_t_offo_set', + 'op_t_set_shown', + 'op_t_shown', + 'op_t_specflag1_get', + 'op_t_specflag1_set', + 'op_t_specflag2_get', + 'op_t_specflag2_set', + 'op_t_specflag3_get', + 'op_t_specflag3_set', + 'op_t_specflag4_get', + 'op_t_specflag4_set', + 'op_t_type_get', + 'op_t_type_set', + 'op_uses_x', + 'op_uses_y', + 'op_uses_z', + 'open_bpts_window', + 'open_calls_window', + 'open_disasm_window', + 'open_enums_window', + 'open_exports_window', + 'open_frame_window', + 'open_funcs_window', + 'open_hexdump_window', + 'open_imports_window', + 'open_linput', + 'open_loctypes_window', + 'open_modules_window', + 'open_names_window', + 'open_navband_window', + 'open_notepad_window', + 'open_problems_window', + 'open_pseudocode', + 'open_segments_window', + 'open_segregs_window', + 'open_selectors_window', + 'open_signatures_window', + 'open_stack_window', + 'open_strings_window', + 'open_structs_window', + 'open_threads_window', + 'open_tils_window', + 'open_trace_window', + 'open_url', + 'open_xrefs_window', + 'operand_locator_t___eq__', + 'operand_locator_t___ge__', + 'operand_locator_t___gt__', + 'operand_locator_t___le__', + 'operand_locator_t___lt__', + 'operand_locator_t___ne__', + 'operand_locator_t_compare', + 'operand_locator_t_ea_get', + 'operand_locator_t_ea_set', + 'operand_locator_t_opnum_get', + 'operand_locator_t_opnum_set', + 'operands_array___getitem__', + 'operands_array___len__', + 'operands_array___setitem__', + 'operands_array_data_get', + 'operator_info_t_fixtype_get', + 'operator_info_t_fixtype_set', + 'operator_info_t_flags_get', + 'operator_info_t_flags_set', + 'operator_info_t_precedence_get', + 'operator_info_t_precedence_set', + 'operator_info_t_text_get', + 'operator_info_t_text_set', + 'operator_info_t_valency_get', + 'operator_info_t_valency_set', + 'opinfo_t_cd_get', + 'opinfo_t_cd_set', + 'opinfo_t_ec_get', + 'opinfo_t_ec_set', + 'opinfo_t_path_get', + 'opinfo_t_path_set', + 'opinfo_t_ri_get', + 'opinfo_t_ri_set', + 'opinfo_t_strtype_get', + 'opinfo_t_strtype_set', + 'opinfo_t_tid_get', + 'opinfo_t_tid_set', + 'optblock_t_func', + 'optblock_t_install', + 'optblock_t_remove', + 'optimize_argloc', + 'optinsn_t_func', + 'optinsn_t_install', + 'optinsn_t_remove', + 'outctx_base_t__from_ptrval__', + 'outctx_base_t_close_comment', + 'outctx_base_t_clr_gen_label', + 'outctx_base_t_default_lnnum_get', + 'outctx_base_t_default_lnnum_set', + 'outctx_base_t_display_voids', + 'outctx_base_t_flush_buf', + 'outctx_base_t_flush_outbuf', + 'outctx_base_t_forbid_annotations', + 'outctx_base_t_force_code', + 'outctx_base_t_gen_block_cmt', + 'outctx_base_t_gen_border_line', + 'outctx_base_t_gen_cmt_line', + 'outctx_base_t_gen_cmt_line__varargs__', + 'outctx_base_t_gen_collapsed_line', + 'outctx_base_t_gen_collapsed_line__varargs__', + 'outctx_base_t_gen_empty_line', + 'outctx_base_t_gen_empty_line_without_annotations', + 'outctx_base_t_gen_printf', + 'outctx_base_t_gen_printf__varargs__', + 'outctx_base_t_gen_xref_lines', + 'outctx_base_t_get_stkvar', + 'outctx_base_t_init_lines_array', + 'outctx_base_t_insn_ea_get', + 'outctx_base_t_insn_ea_set', + 'outctx_base_t_multiline', + 'outctx_base_t_only_main_line', + 'outctx_base_t_out_addr_tag', + 'outctx_base_t_out_btoa', + 'outctx_base_t_out_char', + 'outctx_base_t_out_chars', + 'outctx_base_t_out_colored_register_line', + 'outctx_base_t_out_keyword', + 'outctx_base_t_out_line', + 'outctx_base_t_out_long', + 'outctx_base_t_out_name_expr', + 'outctx_base_t_out_printf', + 'outctx_base_t_out_printf__varargs__', + 'outctx_base_t_out_register', + 'outctx_base_t_out_spaces', + 'outctx_base_t_out_symbol', + 'outctx_base_t_out_tagoff', + 'outctx_base_t_out_tagon', + 'outctx_base_t_out_value', + 'outctx_base_t_outbuf_get', + 'outctx_base_t_outbuf_set', + 'outctx_base_t_print_label_now', + 'outctx_base_t_restore_ctxflags', + 'outctx_base_t_retrieve_cmt', + 'outctx_base_t_retrieve_name', + 'outctx_base_t_set_comment_addr', + 'outctx_base_t_set_dlbind_opnd', + 'outctx_base_t_set_gen_cmt', + 'outctx_base_t_set_gen_demangled_label', + 'outctx_base_t_set_gen_label', + 'outctx_base_t_set_gen_xrefs', + 'outctx_base_t_setup_outctx', + 'outctx_base_t_stack_view', + 'outctx_base_t_term_outctx', + 'outctx_t__from_ptrval__', + 'outctx_t_bin_ea_get', + 'outctx_t_bin_ea_set', + 'outctx_t_bin_state_get', + 'outctx_t_bin_state_set', + 'outctx_t_bin_width_get', + 'outctx_t_bin_width_set', + 'outctx_t_curlabel_get', + 'outctx_t_curlabel_set', + 'outctx_t_gen_func_footer', + 'outctx_t_gen_func_header', + 'outctx_t_gen_header', + 'outctx_t_gen_header_extra', + 'outctx_t_gen_xref_lines', + 'outctx_t_gl_bpsize_get', + 'outctx_t_gl_bpsize_set', + 'outctx_t_insn_get', + 'outctx_t_insn_set', + 'outctx_t_out_custom_mnem', + 'outctx_t_out_data', + 'outctx_t_out_immchar_cmts', + 'outctx_t_out_mnem', + 'outctx_t_out_mnemonic', + 'outctx_t_out_one_operand', + 'outctx_t_out_specea', + 'outctx_t_retrieve_cmt', + 'outctx_t_retrieve_name', + 'outctx_t_set_bin_state', + 'outctx_t_setup_outctx', + 'outctx_t_wif_get', + 'outctx_t_wif_set', + 'oword_flag', + 'pack_idcobj_to_bv', + 'pack_idcobj_to_idb', + 'pack_object_to_bv', + 'pack_object_to_idb', + 'packreal_flag', + 'parse_command_line3', + 'parse_dbgopts', + 'parse_decl', + 'parse_decls', + 'parse_reg_name', + 'parse_user_call', + 'partial_type_num', + 'patch_byte', + 'patch_bytes', + 'patch_dword', + 'patch_fixup_value', + 'patch_qword', + 'patch_word', + 'peek_auto_queue', + 'ph_calcrel', + 'ph_find_op_value', + 'ph_find_reg_value', + 'ph_get_cnbits', + 'ph_get_dnbits', + 'ph_get_flag', + 'ph_get_icode_return', + 'ph_get_id', + 'ph_get_instruc', + 'ph_get_instruc_end', + 'ph_get_instruc_start', + 'ph_get_operand_info', + 'ph_get_reg_code_sreg', + 'ph_get_reg_data_sreg', + 'ph_get_reg_first_sreg', + 'ph_get_reg_last_sreg', + 'ph_get_regnames', + 'ph_get_segreg_size', + 'ph_get_tbyte_size', + 'ph_get_version', + 'place_t__print', + 'place_t_adjust', + 'place_t_as_enumplace_t', + 'place_t_as_idaplace_t', + 'place_t_as_simpleline_place_t', + 'place_t_as_structplace_t', + 'place_t_beginning', + 'place_t_clone', + 'place_t_compare', + 'place_t_copyfrom', + 'place_t_deserialize', + 'place_t_ending', + 'place_t_enter', + 'place_t_generate', + 'place_t_id', + 'place_t_leave', + 'place_t_lnnum_get', + 'place_t_lnnum_set', + 'place_t_makeplace', + 'place_t_name', + 'place_t_next', + 'place_t_prev', + 'place_t_rebase', + 'place_t_serialize', + 'place_t_toea', + 'place_t_touval', + 'plan_and_wait', + 'plan_ea', + 'plan_range', + 'plan_to_apply_idasgn', + 'plgform_close', + 'plgform_get_widget', + 'plgform_new', + 'plgform_show', + 'plugin_info_t_arg_get', + 'plugin_info_t_arg_set', + 'plugin_info_t_comment_get', + 'plugin_info_t_comment_set', + 'plugin_info_t_dllmem_get', + 'plugin_info_t_dllmem_set', + 'plugin_info_t_entry_get', + 'plugin_info_t_entry_set', + 'plugin_info_t_flags_get', + 'plugin_info_t_flags_set', + 'plugin_info_t_hotkey_get', + 'plugin_info_t_hotkey_set', + 'plugin_info_t_name_get', + 'plugin_info_t_name_set', + 'plugin_info_t_next_get', + 'plugin_info_t_next_set', + 'plugin_info_t_org_hotkey_get', + 'plugin_info_t_org_hotkey_set', + 'plugin_info_t_org_name_get', + 'plugin_info_t_org_name_set', + 'plugin_info_t_path_get', + 'plugin_info_t_path_set', + 'point_t___eq__', + 'point_t___ne__', + 'point_t_add', + 'point_t_negate', + 'point_t_sub', + 'point_t_x_get', + 'point_t_x_set', + 'point_t_y_get', + 'point_t_y_set', + 'pointvec_t___eq__', + 'pointvec_t___getitem__', + 'pointvec_t___len__', + 'pointvec_t___ne__', + 'pointvec_t___setitem__', + 'pointvec_t__del', + 'pointvec_t_add_unique', + 'pointvec_t_at', + 'pointvec_t_begin', + 'pointvec_t_begin__SWIG_0', + 'pointvec_t_begin__SWIG_1', + 'pointvec_t_capacity', + 'pointvec_t_clear', + 'pointvec_t_empty', + 'pointvec_t_end', + 'pointvec_t_end__SWIG_0', + 'pointvec_t_end__SWIG_1', + 'pointvec_t_erase', + 'pointvec_t_erase__SWIG_0', + 'pointvec_t_erase__SWIG_1', + 'pointvec_t_extract', + 'pointvec_t_find', + 'pointvec_t_find__SWIG_0', + 'pointvec_t_find__SWIG_1', + 'pointvec_t_grow', + 'pointvec_t_has', + 'pointvec_t_inject', + 'pointvec_t_insert', + 'pointvec_t_pop_back', + 'pointvec_t_push_back', + 'pointvec_t_push_back__SWIG_0', + 'pointvec_t_push_back__SWIG_1', + 'pointvec_t_qclear', + 'pointvec_t_reserve', + 'pointvec_t_resize', + 'pointvec_t_resize__SWIG_0', + 'pointvec_t_resize__SWIG_1', + 'pointvec_t_size', + 'pointvec_t_swap', + 'pointvec_t_truncate', + 'predicate_t_should_display', + 'prev_addr', + 'prev_chunk', + 'prev_head', + 'prev_idcv_attr', + 'prev_inited', + 'prev_not_tail', + 'prev_that', + 'prev_unknown', + 'print_argloc', + 'print_decls', + 'print_idcv', + 'print_insn_mnem', + 'print_operand', + 'print_strlit_type', + 'print_tinfo', + 'print_type', + 'print_vdloc', + 'printop_t_aflags_get', + 'printop_t_aflags_set', + 'printop_t_features_get', + 'printop_t_features_set', + 'printop_t_flags_get', + 'printop_t_flags_set', + 'printop_t_get_ti', + 'printop_t_is_aflags_initialized', + 'printop_t_is_ti_initialized', + 'printop_t_set_aflags_initialized', + 'printop_t_set_ti_initialized', + 'printop_t_suspop_get', + 'printop_t_suspop_set', + 'printop_t_ti_get', + 'printop_t_ti_set', + 'process_archive', + 'process_info_t_name_get', + 'process_info_t_name_set', + 'process_info_t_pid_get', + 'process_info_t_pid_set', + 'process_ui_action', + 'procinfo_vec_t___getitem__', + 'procinfo_vec_t___len__', + 'procinfo_vec_t___setitem__', + 'procinfo_vec_t_at', + 'procinfo_vec_t_begin', + 'procinfo_vec_t_begin__SWIG_0', + 'procinfo_vec_t_begin__SWIG_1', + 'procinfo_vec_t_capacity', + 'procinfo_vec_t_clear', + 'procinfo_vec_t_empty', + 'procinfo_vec_t_end', + 'procinfo_vec_t_end__SWIG_0', + 'procinfo_vec_t_end__SWIG_1', + 'procinfo_vec_t_erase', + 'procinfo_vec_t_erase__SWIG_0', + 'procinfo_vec_t_erase__SWIG_1', + 'procinfo_vec_t_extract', + 'procinfo_vec_t_grow', + 'procinfo_vec_t_inject', + 'procinfo_vec_t_insert', + 'procinfo_vec_t_pop_back', + 'procinfo_vec_t_push_back', + 'procinfo_vec_t_push_back__SWIG_0', + 'procinfo_vec_t_push_back__SWIG_1', + 'procinfo_vec_t_qclear', + 'procinfo_vec_t_reserve', + 'procinfo_vec_t_resize', + 'procinfo_vec_t_resize__SWIG_0', + 'procinfo_vec_t_resize__SWIG_1', + 'procinfo_vec_t_size', + 'procinfo_vec_t_swap', + 'procinfo_vec_t_truncate', + 'ptr_type_data_t___eq__', + 'ptr_type_data_t___ne__', + 'ptr_type_data_t_based_ptr_size_get', + 'ptr_type_data_t_based_ptr_size_set', + 'ptr_type_data_t_closure_get', + 'ptr_type_data_t_closure_set', + 'ptr_type_data_t_delta_get', + 'ptr_type_data_t_delta_set', + 'ptr_type_data_t_is_code_ptr', + 'ptr_type_data_t_is_shifted', + 'ptr_type_data_t_obj_type_get', + 'ptr_type_data_t_obj_type_set', + 'ptr_type_data_t_parent_get', + 'ptr_type_data_t_parent_set', + 'ptr_type_data_t_swap', + 'ptr_type_data_t_taptr_bits_get', + 'ptr_type_data_t_taptr_bits_set', + 'put_byte', + 'put_bytes', + 'put_dbg_byte', + 'put_dword', + 'put_qword', + 'put_word', + 'py_add_idc_func', + 'py_get_ask_form', + 'py_get_call_idc_func', + 'py_get_open_form', + 'py_load_custom_icon_data', + 'py_load_custom_icon_fn', + 'py_register_compiled_form', + 'py_ss_restore_callback', + 'py_unregister_compiled_form', + 'pycim_get_widget', + 'pycim_view_close', + 'pyg_close', + 'pyg_select_node', + 'pyg_show', + 'pygc_create_groups', + 'pygc_delete_groups', + 'pygc_refresh', + 'pygc_set_groups_visibility', + 'pyidag_bind', + 'pyidag_unbind', + 'pyscv_add_line', + 'pyscv_clear_lines', + 'pyscv_close', + 'pyscv_count', + 'pyscv_del_line', + 'pyscv_edit_line', + 'pyscv_get_current_line', + 'pyscv_get_current_word', + 'pyscv_get_line', + 'pyscv_get_pos', + 'pyscv_get_selection', + 'pyscv_get_widget', + 'pyscv_init', + 'pyscv_insert_line', + 'pyscv_is_focused', + 'pyscv_jumpto', + 'pyscv_patch_line', + 'pyscv_refresh', + 'pyscv_show', + 'pyw_convert_defvals', + 'pyw_register_idc_func', + 'pyw_unregister_idc_func', + 'qatoll', + 'qcleanline', + 'qcontrol_tty', + 'qdetach_tty', + 'qexit', + 'qfile_t___idc_cvt_id___get', + 'qfile_t___idc_cvt_id___set', + 'qfile_t_close', + 'qfile_t_filename', + 'qfile_t_flush', + 'qfile_t_from_capsule', + 'qfile_t_from_fp', + 'qfile_t_get_byte', + 'qfile_t_get_fp', + 'qfile_t_gets', + 'qfile_t_open', + 'qfile_t_opened', + 'qfile_t_put_byte', + 'qfile_t_puts', + 'qfile_t_read', + 'qfile_t_readbytes', + 'qfile_t_seek', + 'qfile_t_size', + 'qfile_t_tell', + 'qfile_t_tmpfile', + 'qfile_t_write', + 'qfile_t_writebytes', + 'qflow_chart_t___getitem__', + 'qflow_chart_t_append_to_flowchart', + 'qflow_chart_t_bounds_get', + 'qflow_chart_t_bounds_set', + 'qflow_chart_t_calc_block_type', + 'qflow_chart_t_create', + 'qflow_chart_t_create__SWIG_0', + 'qflow_chart_t_create__SWIG_1', + 'qflow_chart_t_flags_get', + 'qflow_chart_t_flags_set', + 'qflow_chart_t_get_node_label', + 'qflow_chart_t_is_noret_block', + 'qflow_chart_t_is_ret_block', + 'qflow_chart_t_npred', + 'qflow_chart_t_nproper_get', + 'qflow_chart_t_nproper_set', + 'qflow_chart_t_nsucc', + 'qflow_chart_t_pfn_get', + 'qflow_chart_t_pfn_set', + 'qflow_chart_t_pred', + 'qflow_chart_t_print_names', + 'qflow_chart_t_print_node_attributes', + 'qflow_chart_t_refresh', + 'qflow_chart_t_size', + 'qflow_chart_t_succ', + 'qflow_chart_t_title_get', + 'qflow_chart_t_title_set', + 'qlgetz', + 'qlist_cinsn_t___eq__', + 'qlist_cinsn_t___ne__', + 'qlist_cinsn_t_back', + 'qlist_cinsn_t_back__SWIG_0', + 'qlist_cinsn_t_back__SWIG_1', + 'qlist_cinsn_t_begin', + 'qlist_cinsn_t_clear', + 'qlist_cinsn_t_empty', + 'qlist_cinsn_t_end', + 'qlist_cinsn_t_erase', + 'qlist_cinsn_t_erase__SWIG_0', + 'qlist_cinsn_t_erase__SWIG_1', + 'qlist_cinsn_t_erase__SWIG_2', + 'qlist_cinsn_t_front', + 'qlist_cinsn_t_front__SWIG_0', + 'qlist_cinsn_t_front__SWIG_1', + 'qlist_cinsn_t_insert', + 'qlist_cinsn_t_insert__SWIG_0', + 'qlist_cinsn_t_insert__SWIG_1', + 'qlist_cinsn_t_insert__SWIG_3', + 'qlist_cinsn_t_iterator___eq__', + 'qlist_cinsn_t_iterator___ne__', + 'qlist_cinsn_t_iterator___next__', + 'qlist_cinsn_t_iterator_cur_get', + 'qlist_cinsn_t_pop_back', + 'qlist_cinsn_t_pop_front', + 'qlist_cinsn_t_push_back', + 'qlist_cinsn_t_push_back__SWIG_0', + 'qlist_cinsn_t_push_back__SWIG_1', + 'qlist_cinsn_t_push_front', + 'qlist_cinsn_t_rbegin', + 'qlist_cinsn_t_rbegin__SWIG_0', + 'qlist_cinsn_t_rbegin__SWIG_1', + 'qlist_cinsn_t_rend', + 'qlist_cinsn_t_rend__SWIG_0', + 'qlist_cinsn_t_rend__SWIG_1', + 'qlist_cinsn_t_size', + 'qlist_cinsn_t_swap', + 'qrefcnt_obj_t_refcnt_get', + 'qrefcnt_obj_t_refcnt_set', + 'qrefcnt_obj_t_release', + 'qstring_printer_t__print', + 'qstring_printer_t__print__varargs__', + 'qstring_printer_t_get_s', + 'qstring_printer_t_s_get', + 'qstring_printer_t_s_set', + 'qstring_printer_t_with_tags_get', + 'qstring_printer_t_with_tags_set', + 'qstrvec_t_add', + 'qstrvec_t_addressof', + 'qstrvec_t_assign', + 'qstrvec_t_clear', + 'qstrvec_t_create', + 'qstrvec_t_destroy', + 'qstrvec_t_from_list', + 'qstrvec_t_get', + 'qstrvec_t_get_clink', + 'qstrvec_t_get_clink_ptr', + 'qstrvec_t_insert', + 'qstrvec_t_remove', + 'qstrvec_t_set', + 'qstrvec_t_size', + 'qswap', + 'quote_cmdline_arg', + 'qvector_carg_t___eq__', + 'qvector_carg_t___getitem__', + 'qvector_carg_t___len__', + 'qvector_carg_t___ne__', + 'qvector_carg_t___setitem__', + 'qvector_carg_t__del', + 'qvector_carg_t_add_unique', + 'qvector_carg_t_at', + 'qvector_carg_t_begin', + 'qvector_carg_t_begin__SWIG_0', + 'qvector_carg_t_begin__SWIG_1', + 'qvector_carg_t_capacity', + 'qvector_carg_t_clear', + 'qvector_carg_t_empty', + 'qvector_carg_t_end', + 'qvector_carg_t_end__SWIG_0', + 'qvector_carg_t_end__SWIG_1', + 'qvector_carg_t_erase', + 'qvector_carg_t_erase__SWIG_0', + 'qvector_carg_t_erase__SWIG_1', + 'qvector_carg_t_extract', + 'qvector_carg_t_find', + 'qvector_carg_t_find__SWIG_0', + 'qvector_carg_t_find__SWIG_1', + 'qvector_carg_t_grow', + 'qvector_carg_t_has', + 'qvector_carg_t_inject', + 'qvector_carg_t_insert', + 'qvector_carg_t_pop_back', + 'qvector_carg_t_push_back', + 'qvector_carg_t_push_back__SWIG_0', + 'qvector_carg_t_push_back__SWIG_1', + 'qvector_carg_t_qclear', + 'qvector_carg_t_reserve', + 'qvector_carg_t_resize', + 'qvector_carg_t_resize__SWIG_0', + 'qvector_carg_t_resize__SWIG_1', + 'qvector_carg_t_size', + 'qvector_carg_t_swap', + 'qvector_carg_t_truncate', + 'qvector_ccase_t___eq__', + 'qvector_ccase_t___getitem__', + 'qvector_ccase_t___len__', + 'qvector_ccase_t___ne__', + 'qvector_ccase_t___setitem__', + 'qvector_ccase_t__del', + 'qvector_ccase_t_add_unique', + 'qvector_ccase_t_at', + 'qvector_ccase_t_begin', + 'qvector_ccase_t_begin__SWIG_0', + 'qvector_ccase_t_begin__SWIG_1', + 'qvector_ccase_t_capacity', + 'qvector_ccase_t_clear', + 'qvector_ccase_t_empty', + 'qvector_ccase_t_end', + 'qvector_ccase_t_end__SWIG_0', + 'qvector_ccase_t_end__SWIG_1', + 'qvector_ccase_t_erase', + 'qvector_ccase_t_erase__SWIG_0', + 'qvector_ccase_t_erase__SWIG_1', + 'qvector_ccase_t_extract', + 'qvector_ccase_t_find', + 'qvector_ccase_t_find__SWIG_0', + 'qvector_ccase_t_find__SWIG_1', + 'qvector_ccase_t_grow', + 'qvector_ccase_t_has', + 'qvector_ccase_t_inject', + 'qvector_ccase_t_insert', + 'qvector_ccase_t_pop_back', + 'qvector_ccase_t_push_back', + 'qvector_ccase_t_push_back__SWIG_0', + 'qvector_ccase_t_push_back__SWIG_1', + 'qvector_ccase_t_qclear', + 'qvector_ccase_t_reserve', + 'qvector_ccase_t_resize', + 'qvector_ccase_t_resize__SWIG_0', + 'qvector_ccase_t_resize__SWIG_1', + 'qvector_ccase_t_size', + 'qvector_ccase_t_swap', + 'qvector_ccase_t_truncate', + 'qvector_history_t___eq__', + 'qvector_history_t___getitem__', + 'qvector_history_t___len__', + 'qvector_history_t___ne__', + 'qvector_history_t___setitem__', + 'qvector_history_t__del', + 'qvector_history_t_add_unique', + 'qvector_history_t_at', + 'qvector_history_t_begin', + 'qvector_history_t_begin__SWIG_0', + 'qvector_history_t_begin__SWIG_1', + 'qvector_history_t_capacity', + 'qvector_history_t_clear', + 'qvector_history_t_empty', + 'qvector_history_t_end', + 'qvector_history_t_end__SWIG_0', + 'qvector_history_t_end__SWIG_1', + 'qvector_history_t_erase', + 'qvector_history_t_erase__SWIG_0', + 'qvector_history_t_erase__SWIG_1', + 'qvector_history_t_extract', + 'qvector_history_t_find', + 'qvector_history_t_find__SWIG_0', + 'qvector_history_t_find__SWIG_1', + 'qvector_history_t_grow', + 'qvector_history_t_has', + 'qvector_history_t_inject', + 'qvector_history_t_insert', + 'qvector_history_t_pop_back', + 'qvector_history_t_push_back', + 'qvector_history_t_push_back__SWIG_0', + 'qvector_history_t_push_back__SWIG_1', + 'qvector_history_t_qclear', + 'qvector_history_t_reserve', + 'qvector_history_t_resize', + 'qvector_history_t_resize__SWIG_0', + 'qvector_history_t_resize__SWIG_1', + 'qvector_history_t_size', + 'qvector_history_t_swap', + 'qvector_history_t_truncate', + 'qvector_lvar_t___eq__', + 'qvector_lvar_t___getitem__', + 'qvector_lvar_t___len__', + 'qvector_lvar_t___ne__', + 'qvector_lvar_t___setitem__', + 'qvector_lvar_t__del', + 'qvector_lvar_t_add_unique', + 'qvector_lvar_t_at', + 'qvector_lvar_t_begin', + 'qvector_lvar_t_begin__SWIG_0', + 'qvector_lvar_t_begin__SWIG_1', + 'qvector_lvar_t_capacity', + 'qvector_lvar_t_clear', + 'qvector_lvar_t_empty', + 'qvector_lvar_t_end', + 'qvector_lvar_t_end__SWIG_0', + 'qvector_lvar_t_end__SWIG_1', + 'qvector_lvar_t_erase', + 'qvector_lvar_t_erase__SWIG_0', + 'qvector_lvar_t_erase__SWIG_1', + 'qvector_lvar_t_extract', + 'qvector_lvar_t_find', + 'qvector_lvar_t_find__SWIG_0', + 'qvector_lvar_t_find__SWIG_1', + 'qvector_lvar_t_grow', + 'qvector_lvar_t_has', + 'qvector_lvar_t_inject', + 'qvector_lvar_t_insert', + 'qvector_lvar_t_pop_back', + 'qvector_lvar_t_push_back', + 'qvector_lvar_t_push_back__SWIG_0', + 'qvector_lvar_t_push_back__SWIG_1', + 'qvector_lvar_t_qclear', + 'qvector_lvar_t_reserve', + 'qvector_lvar_t_resize', + 'qvector_lvar_t_resize__SWIG_0', + 'qvector_lvar_t_resize__SWIG_1', + 'qvector_lvar_t_size', + 'qvector_lvar_t_swap', + 'qvector_lvar_t_truncate', + 'qvector_reserve', + 'qvector_snapshotvec_t___eq__', + 'qvector_snapshotvec_t___getitem__', + 'qvector_snapshotvec_t___len__', + 'qvector_snapshotvec_t___ne__', + 'qvector_snapshotvec_t___setitem__', + 'qvector_snapshotvec_t__del', + 'qvector_snapshotvec_t_add_unique', + 'qvector_snapshotvec_t_at', + 'qvector_snapshotvec_t_begin', + 'qvector_snapshotvec_t_begin__SWIG_0', + 'qvector_snapshotvec_t_begin__SWIG_1', + 'qvector_snapshotvec_t_capacity', + 'qvector_snapshotvec_t_clear', + 'qvector_snapshotvec_t_empty', + 'qvector_snapshotvec_t_end', + 'qvector_snapshotvec_t_end__SWIG_0', + 'qvector_snapshotvec_t_end__SWIG_1', + 'qvector_snapshotvec_t_erase', + 'qvector_snapshotvec_t_erase__SWIG_0', + 'qvector_snapshotvec_t_erase__SWIG_1', + 'qvector_snapshotvec_t_extract', + 'qvector_snapshotvec_t_find', + 'qvector_snapshotvec_t_find__SWIG_0', + 'qvector_snapshotvec_t_find__SWIG_1', + 'qvector_snapshotvec_t_has', + 'qvector_snapshotvec_t_inject', + 'qvector_snapshotvec_t_insert', + 'qvector_snapshotvec_t_pop_back', + 'qvector_snapshotvec_t_push_back', + 'qvector_snapshotvec_t_push_back__SWIG_0', + 'qvector_snapshotvec_t_push_back__SWIG_1', + 'qvector_snapshotvec_t_qclear', + 'qvector_snapshotvec_t_reserve', + 'qvector_snapshotvec_t_resize', + 'qvector_snapshotvec_t_resize__SWIG_0', + 'qvector_snapshotvec_t_resize__SWIG_1', + 'qvector_snapshotvec_t_size', + 'qvector_snapshotvec_t_swap', + 'qvector_snapshotvec_t_truncate', + 'qword_flag', + 'range_array___getitem__', + 'range_array___len__', + 'range_array___setitem__', + 'range_array_count_get', + 'range_array_data_get', + 'range_t___eq__', + 'range_t___gt__', + 'range_t___lt__', + 'range_t___ne__', + 'range_t__print', + 'range_t_clear', + 'range_t_compare', + 'range_t_contains', + 'range_t_contains__SWIG_0', + 'range_t_contains__SWIG_1', + 'range_t_empty', + 'range_t_end_ea_get', + 'range_t_end_ea_set', + 'range_t_extend', + 'range_t_intersect', + 'range_t_overlaps', + 'range_t_print', + 'range_t_size', + 'range_t_start_ea_get', + 'range_t_start_ea_set', + 'rangeset_t___eq__', + 'rangeset_t___ne__', + 'rangeset_t__print', + 'rangeset_t_add', + 'rangeset_t_add__SWIG_0', + 'rangeset_t_add__SWIG_1', + 'rangeset_t_add__SWIG_2', + 'rangeset_t_begin', + 'rangeset_t_begin__SWIG_0', + 'rangeset_t_begin__SWIG_1', + 'rangeset_t_cached_range', + 'rangeset_t_clear', + 'rangeset_t_contains', + 'rangeset_t_contains__SWIG_0', + 'rangeset_t_contains__SWIG_1', + 'rangeset_t_empty', + 'rangeset_t_end', + 'rangeset_t_end__SWIG_0', + 'rangeset_t_end__SWIG_1', + 'rangeset_t_find_range', + 'rangeset_t_getrange', + 'rangeset_t_has_common', + 'rangeset_t_has_common__SWIG_0', + 'rangeset_t_has_common__SWIG_1', + 'rangeset_t_includes', + 'rangeset_t_intersect', + 'rangeset_t_is_equal', + 'rangeset_t_is_subset_of', + 'rangeset_t_lastrange', + 'rangeset_t_next_addr', + 'rangeset_t_next_range', + 'rangeset_t_nranges', + 'rangeset_t_prev_addr', + 'rangeset_t_prev_range', + 'rangeset_t_sub', + 'rangeset_t_sub__SWIG_0', + 'rangeset_t_sub__SWIG_1', + 'rangeset_t_sub__SWIG_2', + 'rangeset_t_swap', + 'rangevec_base_t___eq__', + 'rangevec_base_t___getitem__', + 'rangevec_base_t___len__', + 'rangevec_base_t___ne__', + 'rangevec_base_t___setitem__', + 'rangevec_base_t__del', + 'rangevec_base_t_add_unique', + 'rangevec_base_t_at', + 'rangevec_base_t_begin', + 'rangevec_base_t_begin__SWIG_0', + 'rangevec_base_t_begin__SWIG_1', + 'rangevec_base_t_capacity', + 'rangevec_base_t_clear', + 'rangevec_base_t_empty', + 'rangevec_base_t_end', + 'rangevec_base_t_end__SWIG_0', + 'rangevec_base_t_end__SWIG_1', + 'rangevec_base_t_erase', + 'rangevec_base_t_erase__SWIG_0', + 'rangevec_base_t_erase__SWIG_1', + 'rangevec_base_t_extract', + 'rangevec_base_t_find', + 'rangevec_base_t_find__SWIG_0', + 'rangevec_base_t_find__SWIG_1', + 'rangevec_base_t_grow', + 'rangevec_base_t_has', + 'rangevec_base_t_inject', + 'rangevec_base_t_insert', + 'rangevec_base_t_pop_back', + 'rangevec_base_t_push_back', + 'rangevec_base_t_push_back__SWIG_0', + 'rangevec_base_t_push_back__SWIG_1', + 'rangevec_base_t_qclear', + 'rangevec_base_t_reserve', + 'rangevec_base_t_resize', + 'rangevec_base_t_resize__SWIG_0', + 'rangevec_base_t_resize__SWIG_1', + 'rangevec_base_t_size', + 'rangevec_base_t_swap', + 'rangevec_base_t_truncate', + 'read_dbg_memory', + 'read_range_selection', + 'read_regargs', + 'read_selection', + 'read_tinfo_bitfield_value', + 'readbytes', + 'reanalyze_callers', + 'reanalyze_function', + 'reanalyze_noret_flag', + 'rebase_program', + 'rebuild_nlist', + 'recalc_spd', + 'rect_t___eq__', + 'rect_t___ne__', + 'rect_t_area', + 'rect_t_bottom_get', + 'rect_t_bottom_set', + 'rect_t_bottomright', + 'rect_t_center', + 'rect_t_contains', + 'rect_t_empty', + 'rect_t_grow', + 'rect_t_height', + 'rect_t_intersect', + 'rect_t_is_intersection_empty', + 'rect_t_left_get', + 'rect_t_left_set', + 'rect_t_make_union', + 'rect_t_move_by', + 'rect_t_move_to', + 'rect_t_right_get', + 'rect_t_right_set', + 'rect_t_top_get', + 'rect_t_top_set', + 'rect_t_topleft', + 'rect_t_width', + 'refinfo_t_base_get', + 'refinfo_t_base_set', + 'refinfo_t_flags_get', + 'refinfo_t_flags_set', + 'refinfo_t_init', + 'refinfo_t_is_custom', + 'refinfo_t_is_pastend', + 'refinfo_t_is_rvaoff', + 'refinfo_t_is_signed', + 'refinfo_t_is_subtract', + 'refinfo_t_is_target_optional', + 'refinfo_t_no_base_xref', + 'refinfo_t_set_type', + 'refinfo_t_target_get', + 'refinfo_t_target_set', + 'refinfo_t_tdelta_get', + 'refinfo_t_tdelta_set', + 'refinfo_t_type', + 'refresh_chooser', + 'refresh_choosers', + 'refresh_debugger_memory', + 'refresh_idaview', + 'refresh_idaview_anyway', + 'refresh_navband', + 'refresh_viewer', + 'reg2mreg', + 'reg_data_type', + 'reg_delete', + 'reg_delete_subkey', + 'reg_delete_tree', + 'reg_exists', + 'reg_flush', + 'reg_info_t___eq__', + 'reg_info_t___ge__', + 'reg_info_t___gt__', + 'reg_info_t___le__', + 'reg_info_t___lt__', + 'reg_info_t___ne__', + 'reg_info_t_compare', + 'reg_info_t_reg_get', + 'reg_info_t_reg_set', + 'reg_info_t_size_get', + 'reg_info_t_size_set', + 'reg_load', + 'reg_read_binary', + 'reg_read_bool', + 'reg_read_int', + 'reg_read_string', + 'reg_read_strlist', + 'reg_subkey_exists', + 'reg_subkey_subkeys', + 'reg_subkey_values', + 'reg_update_filestrlist', + 'reg_update_strlist', + 'reg_write_binary', + 'reg_write_bool', + 'reg_write_int', + 'reg_write_string', + 'regarg_t_name_get', + 'regarg_t_name_set', + 'regarg_t_reg_get', + 'regarg_t_reg_set', + 'regarg_t_type_get', + 'regarg_t_type_set', + 'reginfovec_t___eq__', + 'reginfovec_t___getitem__', + 'reginfovec_t___len__', + 'reginfovec_t___ne__', + 'reginfovec_t___setitem__', + 'reginfovec_t__del', + 'reginfovec_t_add_unique', + 'reginfovec_t_at', + 'reginfovec_t_begin', + 'reginfovec_t_begin__SWIG_0', + 'reginfovec_t_begin__SWIG_1', + 'reginfovec_t_capacity', + 'reginfovec_t_clear', + 'reginfovec_t_empty', + 'reginfovec_t_end', + 'reginfovec_t_end__SWIG_0', + 'reginfovec_t_end__SWIG_1', + 'reginfovec_t_erase', + 'reginfovec_t_erase__SWIG_0', + 'reginfovec_t_erase__SWIG_1', + 'reginfovec_t_extract', + 'reginfovec_t_find', + 'reginfovec_t_find__SWIG_0', + 'reginfovec_t_find__SWIG_1', + 'reginfovec_t_grow', + 'reginfovec_t_has', + 'reginfovec_t_inject', + 'reginfovec_t_insert', + 'reginfovec_t_pop_back', + 'reginfovec_t_push_back', + 'reginfovec_t_push_back__SWIG_0', + 'reginfovec_t_push_back__SWIG_1', + 'reginfovec_t_qclear', + 'reginfovec_t_reserve', + 'reginfovec_t_resize', + 'reginfovec_t_resize__SWIG_0', + 'reginfovec_t_resize__SWIG_1', + 'reginfovec_t_size', + 'reginfovec_t_swap', + 'reginfovec_t_truncate', + 'register_action', + 'register_addon', + 'register_and_attach_to_menu', + 'register_custom_data_format', + 'register_custom_data_type', + 'register_info_t_bit_strings_get', + 'register_info_t_bit_strings_set', + 'register_info_t_default_bit_strings_mask_get', + 'register_info_t_default_bit_strings_mask_set', + 'register_info_t_dtype_get', + 'register_info_t_dtype_set', + 'register_info_t_flags_get', + 'register_info_t_flags_set', + 'register_info_t_name_get', + 'register_info_t_name_set', + 'register_info_t_register_class_get', + 'register_info_t_register_class_set', + 'register_timer', + 'regobj_t_regidx_get', + 'regobj_t_regidx_set', + 'regobj_t_relocate_get', + 'regobj_t_relocate_set', + 'regobj_t_size', + 'regobj_t_value_get', + 'regobj_t_value_set', + 'regobjvec_t___getitem__', + 'regobjvec_t___len__', + 'regobjvec_t___setitem__', + 'regobjvec_t_at', + 'regobjvec_t_begin', + 'regobjvec_t_begin__SWIG_0', + 'regobjvec_t_begin__SWIG_1', + 'regobjvec_t_capacity', + 'regobjvec_t_clear', + 'regobjvec_t_empty', + 'regobjvec_t_end', + 'regobjvec_t_end__SWIG_0', + 'regobjvec_t_end__SWIG_1', + 'regobjvec_t_erase', + 'regobjvec_t_erase__SWIG_0', + 'regobjvec_t_erase__SWIG_1', + 'regobjvec_t_extract', + 'regobjvec_t_grow', + 'regobjvec_t_inject', + 'regobjvec_t_insert', + 'regobjvec_t_pop_back', + 'regobjvec_t_push_back', + 'regobjvec_t_push_back__SWIG_0', + 'regobjvec_t_push_back__SWIG_1', + 'regobjvec_t_qclear', + 'regobjvec_t_reserve', + 'regobjvec_t_resize', + 'regobjvec_t_resize__SWIG_0', + 'regobjvec_t_resize__SWIG_1', + 'regobjvec_t_size', + 'regobjvec_t_swap', + 'regobjvec_t_truncate', + 'regval_t___eq__', + 'regval_t___ne__', + 'regval_t_bytes', + 'regval_t_bytes__SWIG_0', + 'regval_t_bytes__SWIG_1', + 'regval_t_clear', + 'regval_t_fval_get', + 'regval_t_fval_set', + 'regval_t_get_data', + 'regval_t_get_data__SWIG_0', + 'regval_t_get_data__SWIG_1', + 'regval_t_get_data_size', + 'regval_t_ival_get', + 'regval_t_ival_set', + 'regval_t_rvtype_get', + 'regval_t_rvtype_set', + 'regval_t_set_bytes', + 'regval_t_set_bytes__SWIG_0', + 'regval_t_set_bytes__SWIG_1', + 'regval_t_set_bytes__SWIG_2', + 'regval_t_set_float', + 'regval_t_set_int', + 'regval_t_set_unavailable', + 'regval_t_swap', + 'regvar_array___getitem__', + 'regvar_array___len__', + 'regvar_array___setitem__', + 'regvar_array_count_get', + 'regvar_array_data_get', + 'regvar_t_canon_get', + 'regvar_t_canon_set', + 'regvar_t_cmt_get', + 'regvar_t_cmt_set', + 'regvar_t_user_get', + 'regvar_t_user_set', + 'reload_file', + 'reloc_value', + 'relocate_relobj', + 'remember_problem', + 'remitem', + 'remove_abi_opts', + 'remove_command_interpreter', + 'remove_func_tail', + 'remove_pointer', + 'remove_tinfo_pointer', + 'rename_bptgrp', + 'rename_encoding', + 'rename_entry', + 'rename_regvar', + 'renderer_info_pos_t___eq__', + 'renderer_info_pos_t___ne__', + 'renderer_info_pos_t_cx_get', + 'renderer_info_pos_t_cx_set', + 'renderer_info_pos_t_cy_get', + 'renderer_info_pos_t_cy_set', + 'renderer_info_pos_t_node_get', + 'renderer_info_pos_t_node_set', + 'renderer_info_t___eq__', + 'renderer_info_t___ne__', + 'renderer_info_t_clear', + 'renderer_info_t_gli_get', + 'renderer_info_t_gli_set', + 'renderer_info_t_pos_get', + 'renderer_info_t_pos_set', + 'renderer_info_t_rtype_get', + 'renderer_info_t_rtype_set', + 'renderer_pos_info_t___eq__', + 'renderer_pos_info_t___ne__', + 'renderer_pos_info_t_cx_get', + 'renderer_pos_info_t_cx_set', + 'renderer_pos_info_t_cy_get', + 'renderer_pos_info_t_cy_set', + 'renderer_pos_info_t_node_get', + 'renderer_pos_info_t_node_set', + 'renderer_pos_info_t_sx_get', + 'renderer_pos_info_t_sx_set', + 'reorder_dummy_names', + 'repaint_custom_viewer', + 'replace_ordinal_typerefs', + 'replace_wait_box', + 'replace_wait_box__varargs__', + 'request_add_bpt', + 'request_add_bpt__SWIG_0', + 'request_add_bpt__SWIG_1', + 'request_attach_process', + 'request_clear_trace', + 'request_continue_process', + 'request_del_bpt', + 'request_del_bpt__SWIG_0', + 'request_del_bpt__SWIG_1', + 'request_detach_process', + 'request_disable_bblk_trace', + 'request_disable_bpt', + 'request_disable_bpt__SWIG_0', + 'request_disable_bpt__SWIG_1', + 'request_disable_func_trace', + 'request_disable_insn_trace', + 'request_disable_step_trace', + 'request_enable_bblk_trace', + 'request_enable_bpt', + 'request_enable_bpt__SWIG_0', + 'request_enable_bpt__SWIG_1', + 'request_enable_func_trace', + 'request_enable_insn_trace', + 'request_enable_step_trace', + 'request_exit_process', + 'request_refresh', + 'request_resume_thread', + 'request_run_to', + 'request_select_thread', + 'request_set_bblk_trace_options', + 'request_set_func_trace_options', + 'request_set_insn_trace_options', + 'request_set_reg_val', + 'request_set_resume_mode', + 'request_set_step_trace_options', + 'request_start_process', + 'request_step_into', + 'request_step_over', + 'request_step_until_ret', + 'request_suspend_process', + 'request_suspend_thread', + 'resolve_typedef', + 'restore_database_snapshot', + 'restore_user_cmts', + 'restore_user_defined_calls', + 'restore_user_iflags', + 'restore_user_labels', + 'restore_user_lvar_settings', + 'restore_user_numforms', + 'restore_user_unions', + 'resume_thread', + 'retrieve_exceptions', + 'retrieve_input_file_crc32', + 'retrieve_input_file_md5', + 'retrieve_input_file_sha256', + 'retrieve_input_file_size', + 'retrieve_member_info', + 'revert_byte', + 'revert_ida_decisions', + 'rlist_t_dstr', + 'row_info_t_bottom_get', + 'row_info_t_bottom_set', + 'row_info_t_height', + 'row_info_t_nodes_get', + 'row_info_t_nodes_set', + 'row_info_t_top_get', + 'row_info_t_top_set', + 'rrel_t_off_get', + 'rrel_t_off_set', + 'rrel_t_reg_get', + 'rrel_t_reg_set', + 'run_plugin', + 'run_requests', + 'run_to', + 'save_database', + 'save_struc', + 'save_tinfo', + 'save_trace_file', + 'save_user_cmts', + 'save_user_defined_calls', + 'save_user_iflags', + 'save_user_labels', + 'save_user_lvar_settings', + 'save_user_numforms', + 'save_user_unions', + 'scattered_segm_t_name_get', + 'scattered_segm_t_name_set', + 'scif_t_mba_get', + 'scif_t_mba_set', + 'scif_t_name_get', + 'scif_t_name_set', + 'scif_t_type_get', + 'scif_t_type_set', + 'scif_visitor_t_visit_scif_mop', + 'score_tinfo', + 'screen_graph_selection_base_t___eq__', + 'screen_graph_selection_base_t___getitem__', + 'screen_graph_selection_base_t___len__', + 'screen_graph_selection_base_t___ne__', + 'screen_graph_selection_base_t___setitem__', + 'screen_graph_selection_base_t__del', + 'screen_graph_selection_base_t_add_unique', + 'screen_graph_selection_base_t_at', + 'screen_graph_selection_base_t_begin', + 'screen_graph_selection_base_t_begin__SWIG_0', + 'screen_graph_selection_base_t_begin__SWIG_1', + 'screen_graph_selection_base_t_capacity', + 'screen_graph_selection_base_t_clear', + 'screen_graph_selection_base_t_empty', + 'screen_graph_selection_base_t_end', + 'screen_graph_selection_base_t_end__SWIG_0', + 'screen_graph_selection_base_t_end__SWIG_1', + 'screen_graph_selection_base_t_erase', + 'screen_graph_selection_base_t_erase__SWIG_0', + 'screen_graph_selection_base_t_erase__SWIG_1', + 'screen_graph_selection_base_t_extract', + 'screen_graph_selection_base_t_find', + 'screen_graph_selection_base_t_find__SWIG_0', + 'screen_graph_selection_base_t_find__SWIG_1', + 'screen_graph_selection_base_t_grow', + 'screen_graph_selection_base_t_has', + 'screen_graph_selection_base_t_inject', + 'screen_graph_selection_base_t_insert', + 'screen_graph_selection_base_t_pop_back', + 'screen_graph_selection_base_t_push_back', + 'screen_graph_selection_base_t_push_back__SWIG_0', + 'screen_graph_selection_base_t_push_back__SWIG_1', + 'screen_graph_selection_base_t_qclear', + 'screen_graph_selection_base_t_reserve', + 'screen_graph_selection_base_t_resize', + 'screen_graph_selection_base_t_resize__SWIG_0', + 'screen_graph_selection_base_t_resize__SWIG_1', + 'screen_graph_selection_base_t_size', + 'screen_graph_selection_base_t_swap', + 'screen_graph_selection_base_t_truncate', + 'screen_graph_selection_t_add', + 'screen_graph_selection_t_add_node', + 'screen_graph_selection_t_add_point', + 'screen_graph_selection_t_del_node', + 'screen_graph_selection_t_del_point', + 'screen_graph_selection_t_has', + 'screen_graph_selection_t_items_count', + 'screen_graph_selection_t_nodes_count', + 'screen_graph_selection_t_points_count', + 'screen_graph_selection_t_sub', + 'search_down', + 'seg_flag', + 'segm_adjust_diff', + 'segm_adjust_ea', + 'segm_move_info_t___eq__', + 'segm_move_info_t___ne__', + 'segm_move_info_t__from_get', + 'segm_move_info_t__from_set', + 'segm_move_info_t_size_get', + 'segm_move_info_t_size_set', + 'segm_move_info_t_to_get', + 'segm_move_info_t_to_set', + 'segm_move_info_vec_t___eq__', + 'segm_move_info_vec_t___getitem__', + 'segm_move_info_vec_t___len__', + 'segm_move_info_vec_t___ne__', + 'segm_move_info_vec_t___setitem__', + 'segm_move_info_vec_t__del', + 'segm_move_info_vec_t_add_unique', + 'segm_move_info_vec_t_at', + 'segm_move_info_vec_t_begin', + 'segm_move_info_vec_t_begin__SWIG_0', + 'segm_move_info_vec_t_begin__SWIG_1', + 'segm_move_info_vec_t_capacity', + 'segm_move_info_vec_t_clear', + 'segm_move_info_vec_t_empty', + 'segm_move_info_vec_t_end', + 'segm_move_info_vec_t_end__SWIG_0', + 'segm_move_info_vec_t_end__SWIG_1', + 'segm_move_info_vec_t_erase', + 'segm_move_info_vec_t_erase__SWIG_0', + 'segm_move_info_vec_t_erase__SWIG_1', + 'segm_move_info_vec_t_extract', + 'segm_move_info_vec_t_find', + 'segm_move_info_vec_t_find__SWIG_0', + 'segm_move_info_vec_t_find__SWIG_1', + 'segm_move_info_vec_t_grow', + 'segm_move_info_vec_t_has', + 'segm_move_info_vec_t_inject', + 'segm_move_info_vec_t_insert', + 'segm_move_info_vec_t_pop_back', + 'segm_move_info_vec_t_push_back', + 'segm_move_info_vec_t_push_back__SWIG_0', + 'segm_move_info_vec_t_push_back__SWIG_1', + 'segm_move_info_vec_t_qclear', + 'segm_move_info_vec_t_reserve', + 'segm_move_info_vec_t_resize', + 'segm_move_info_vec_t_resize__SWIG_0', + 'segm_move_info_vec_t_resize__SWIG_1', + 'segm_move_info_vec_t_size', + 'segm_move_info_vec_t_swap', + 'segm_move_info_vec_t_truncate', + 'segm_move_infos_t_find', + 'segment_t_abits', + 'segment_t_abytes', + 'segment_t_align_get', + 'segment_t_align_set', + 'segment_t_bitness_get', + 'segment_t_bitness_set', + 'segment_t_clr_comorg', + 'segment_t_clr_ob_ok', + 'segment_t_color_get', + 'segment_t_color_set', + 'segment_t_comb_get', + 'segment_t_comb_set', + 'segment_t_comorg', + 'segment_t_defsr_get', + 'segment_t_defsr_set', + 'segment_t_end_ea_get', + 'segment_t_end_ea_set', + 'segment_t_flags_get', + 'segment_t_flags_set', + 'segment_t_is_header_segm', + 'segment_t_is_hidden_segtype', + 'segment_t_is_loader_segm', + 'segment_t_is_visible_segm', + 'segment_t_name_get', + 'segment_t_name_set', + 'segment_t_ob_ok', + 'segment_t_orgbase_get', + 'segment_t_orgbase_set', + 'segment_t_perm_get', + 'segment_t_perm_set', + 'segment_t_sclass_get', + 'segment_t_sclass_set', + 'segment_t_sel_get', + 'segment_t_sel_set', + 'segment_t_set_comorg', + 'segment_t_set_debugger_segm', + 'segment_t_set_header_segm', + 'segment_t_set_hidden_segtype', + 'segment_t_set_loader_segm', + 'segment_t_set_ob_ok', + 'segment_t_set_visible_segm', + 'segment_t_start_ea_get', + 'segment_t_start_ea_set', + 'segment_t_type_get', + 'segment_t_type_set', + 'segment_t_update', + 'segment_t_use32', + 'segment_t_use64', + 'segtype', + 'seh_t_clear', + 'seh_t_filter_get', + 'seh_t_filter_set', + 'seh_t_seh_code_get', + 'seh_t_seh_code_set', + 'sel2ea', + 'sel2para', + 'sel_array___getitem__', + 'sel_array___setitem__', + 'sel_array_cast', + 'sel_array_frompointer', + 'sel_pointer_assign', + 'sel_pointer_cast', + 'sel_pointer_frompointer', + 'sel_pointer_value', + 'select_thread', + 'select_udt_by_offset', + 'selection_item_t___eq__', + 'selection_item_t___lt__', + 'selection_item_t___ne__', + 'selection_item_t_compare', + 'selection_item_t_elp_get', + 'selection_item_t_elp_set', + 'selection_item_t_is_node_get', + 'selection_item_t_is_node_set', + 'selection_item_t_node_get', + 'selection_item_t_node_set', + 'send_database', + 'serialize_tinfo', + 'set2jcnd', + 'set__bnot0', + 'set__bnot1', + 'set__invsign0', + 'set__invsign1', + 'set_abi_name', + 'set_abits', + 'set_absbase', + 'set_aflags', + 'set_align_flow', + 'set_alignment', + 'set_archive_path', + 'set_array_parameters', + 'set_asm_inc_file', + 'set_auto_state', + 'set_bblk_trace_options', + 'set_bits', + 'set_bmask_cmt', + 'set_bmask_name', + 'set_bpt_group', + 'set_bptloc_group', + 'set_bptloc_string', + 'set_c_header_path', + 'set_c_macros', + 'set_cancelled', + 'set_cmt', + 'set_code_viewer_handler', + 'set_code_viewer_is_source', + 'set_code_viewer_line_handlers', + 'set_code_viewer_lines_alignment', + 'set_code_viewer_lines_icon_margin', + 'set_code_viewer_lines_radix', + 'set_code_viewer_user_data', + 'set_colored_item', + 'set_compiler', + 'set_compiler_id', + 'set_compiler_string', + 'set_cp_validity', + 'set_custom_data_type_ids', + 'set_custom_viewer_qt_aware', + 'set_database_flag', + 'set_debug_event_code', + 'set_debug_name', + 'set_debugger_event_cond', + 'set_debugger_options', + 'set_default_dataseg', + 'set_default_encoding_idx', + 'set_default_sreg_value', + 'set_defsr', + 'set_dock_pos', + 'set_dummy_name', + 'set_entry_forwarder', + 'set_enum_bf', + 'set_enum_cmt', + 'set_enum_flag', + 'set_enum_fromtil', + 'set_enum_ghost', + 'set_enum_hidden', + 'set_enum_idx', + 'set_enum_member_cmt', + 'set_enum_member_name', + 'set_enum_name', + 'set_enum_type_ordinal', + 'set_enum_width', + 'set_fixed_spd', + 'set_fixup', + 'set_forced_operand', + 'set_frame_size', + 'set_func_cmt', + 'set_func_end', + 'set_func_name_if_jumpfunc', + 'set_func_start', + 'set_func_trace_options', + 'set_gotea', + 'set_group_selector', + 'set_has_lname', + 'set_has_ti', + 'set_has_ti0', + 'set_has_ti1', + 'set_header_path', + 'set_highlight', + 'set_highlight_trace_options', + 'set_ida_state', + 'set_idcv_attr', + 'set_idcv_slice', + 'set_ids_modnode', + 'set_imagebase', + 'set_immd', + 'set_insn_trace_options', + 'set_item_color', + 'set_libitem', + 'set_lzero', + 'set_lzero0', + 'set_lzero1', + 'set_manual_insn', + 'set_manual_regions', + 'set_member_cmt', + 'set_member_name', + 'set_member_tinfo', + 'set_member_type', + 'set_name', + 'set_nav_colorizer', + 'set_node_info', + 'set_noret', + 'set_noret_insn', + 'set_notcode', + 'set_notproc', + 'set_numbered_type', + 'set_op_tinfo', + 'set_op_type', + 'set_opinfo', + 'set_outfile_encoding_idx', + 'set_path', + 'set_process_options', + 'set_process_state', + 'set_processor_type', + 'set_purged', + 'set_refinfo', + 'set_refinfo_ex', + 'set_reg_val', + 'set_reg_val__SWIG_0', + 'set_reg_val__SWIG_1', + 'set_regvar_cmt', + 'set_remote_debugger', + 'set_resume_mode', + 'set_retfp', + 'set_root_filename', + 'set_script_timeout', + 'set_segm_addressing', + 'set_segm_base', + 'set_segm_class', + 'set_segm_end', + 'set_segm_name', + 'set_segm_start', + 'set_segment_cmt', + 'set_segment_translations', + 'set_selector', + 'set_source_linnum', + 'set_sreg_at_next_code', + 'set_step_trace_options', + 'set_str_type', + 'set_struc_align', + 'set_struc_cmt', + 'set_struc_hidden', + 'set_struc_idx', + 'set_struc_listed', + 'set_struc_name', + 'set_switch_info', + 'set_switch_parent', + 'set_tail_owner', + 'set_target_assembler', + 'set_terse_struc', + 'set_tilcmt', + 'set_tinfo', + 'set_tinfo_attr', + 'set_tinfo_attrs', + 'set_tinfo_property', + 'set_trace_base_address', + 'set_trace_file_desc', + 'set_trace_platform', + 'set_trace_size', + 'set_type', + 'set_type_alias', + 'set_usemodsp', + 'set_user_defined_prefix', + 'set_usersp', + 'set_userti', + 'set_view_renderer_type', + 'set_viewer_graph', + 'set_visible_func', + 'set_visible_item', + 'set_visible_segm', + 'set_zstroff', + 'setup_selector', + 'show_addr', + 'show_auto', + 'show_name', + 'show_wait_box', + 'simd_info_t_match_pattern', + 'simd_info_t_memtype_get', + 'simd_info_t_memtype_set', + 'simd_info_t_name_get', + 'simd_info_t_name_set', + 'simd_info_t_size_get', + 'simd_info_t_size_set', + 'simd_info_t_tif_get', + 'simd_info_t_tif_set', + 'simple_graph_t_colored_gdl_edges_get', + 'simple_graph_t_colored_gdl_edges_set', + 'simple_graph_t_title_get', + 'simple_graph_t_title_set', + 'simpleline_place_t_n_get', + 'simpleline_place_t_n_set', + 'simpleline_t_bgcolor_get', + 'simpleline_t_bgcolor_set', + 'simpleline_t_color_get', + 'simpleline_t_color_set', + 'simpleline_t_line_get', + 'simpleline_t_line_set', + 'sizeof_ldbl', + 'sizevec_t___eq__', + 'sizevec_t___getitem__', + 'sizevec_t___len__', + 'sizevec_t___ne__', + 'sizevec_t___setitem__', + 'sizevec_t__del', + 'sizevec_t_add_unique', + 'sizevec_t_at', + 'sizevec_t_begin', + 'sizevec_t_begin__SWIG_0', + 'sizevec_t_begin__SWIG_1', + 'sizevec_t_capacity', + 'sizevec_t_clear', + 'sizevec_t_empty', + 'sizevec_t_end', + 'sizevec_t_end__SWIG_0', + 'sizevec_t_end__SWIG_1', + 'sizevec_t_erase', + 'sizevec_t_erase__SWIG_0', + 'sizevec_t_erase__SWIG_1', + 'sizevec_t_extract', + 'sizevec_t_find', + 'sizevec_t_find__SWIG_0', + 'sizevec_t_find__SWIG_1', + 'sizevec_t_grow', + 'sizevec_t_has', + 'sizevec_t_inject', + 'sizevec_t_insert', + 'sizevec_t_pop_back', + 'sizevec_t_push_back', + 'sizevec_t_push_back__SWIG_0', + 'sizevec_t_push_back__SWIG_1', + 'sizevec_t_qclear', + 'sizevec_t_reserve', + 'sizevec_t_resize', + 'sizevec_t_resize__SWIG_0', + 'sizevec_t_resize__SWIG_1', + 'sizevec_t_size', + 'sizevec_t_swap', + 'sizevec_t_truncate', + 'snapshot_t___eq__', + 'snapshot_t___ge__', + 'snapshot_t___gt__', + 'snapshot_t___le__', + 'snapshot_t___lt__', + 'snapshot_t___ne__', + 'snapshot_t_children_get', + 'snapshot_t_children_set', + 'snapshot_t_clear', + 'snapshot_t_desc_get', + 'snapshot_t_desc_set', + 'snapshot_t_filename_get', + 'snapshot_t_filename_set', + 'snapshot_t_flags_get', + 'snapshot_t_flags_set', + 'snapshot_t_id_get', + 'snapshot_t_id_set', + 'soff_to_fpoff', + 'split_sreg_range', + 'srcdbg_request_step_into', + 'srcdbg_request_step_over', + 'srcdbg_request_step_until_ret', + 'srcdbg_step_into', + 'srcdbg_step_over', + 'srcdbg_step_until_ret', + 'sreg_range_t_tag_get', + 'sreg_range_t_tag_set', + 'sreg_range_t_val_get', + 'sreg_range_t_val_set', + 'start_process', + 'std_out_segm_footer', + 'step_into', + 'step_over', + 'step_until_ret', + 'stkpnt_array___getitem__', + 'stkpnt_array___len__', + 'stkpnt_array___setitem__', + 'stkpnt_array_count_get', + 'stkpnt_array_data_get', + 'stkpnt_t___eq__', + 'stkpnt_t___ge__', + 'stkpnt_t___gt__', + 'stkpnt_t___le__', + 'stkpnt_t___lt__', + 'stkpnt_t___ne__', + 'stkpnt_t_compare', + 'stkpnt_t_ea_get', + 'stkpnt_t_ea_set', + 'stkpnt_t_spd_get', + 'stkpnt_t_spd_set', + 'stkpnts_t___eq__', + 'stkpnts_t___ge__', + 'stkpnts_t___gt__', + 'stkpnts_t___le__', + 'stkpnts_t___lt__', + 'stkpnts_t___ne__', + 'stkpnts_t_compare', + 'stkvar_flag', + 'stkvar_ref_t___eq__', + 'stkvar_ref_t___ge__', + 'stkvar_ref_t___gt__', + 'stkvar_ref_t___le__', + 'stkvar_ref_t___lt__', + 'stkvar_ref_t___ne__', + 'stkvar_ref_t_compare', + 'stkvar_ref_t_get_stkvar', + 'stkvar_ref_t_mba_get', + 'stkvar_ref_t_off_get', + 'stkvar_ref_t_off_set', + 'stkvar_ref_t_swap', + 'store_exceptions', + 'store_til', + 'str2ea', + 'str2reg', + 'str2user', + 'strarray', + 'strarray_t_code_get', + 'strarray_t_code_set', + 'strarray_t_text_get', + 'strarray_t_text_set', + 'string_info_t___lt__', + 'string_info_t_ea_get', + 'string_info_t_ea_set', + 'string_info_t_length_get', + 'string_info_t_length_set', + 'string_info_t_type_get', + 'string_info_t_type_set', + 'strlit_flag', + 'stroff_as_size', + 'stroff_flag', + 'strpath_ids_array___getitem__', + 'strpath_ids_array___len__', + 'strpath_ids_array___setitem__', + 'strpath_ids_array_data_get', + 'strpath_t___getIds', + 'strpath_t_delta_get', + 'strpath_t_delta_set', + 'strpath_t_ids_get', + 'strpath_t_ids_set', + 'strpath_t_len_get', + 'strpath_t_len_set', + 'stru_flag', + 'struc_t_age_get', + 'struc_t_age_set', + 'struc_t_from_til', + 'struc_t_get_alignment', + 'struc_t_get_member', + 'struc_t_has_union', + 'struc_t_id_get', + 'struc_t_id_set', + 'struc_t_is_choosable', + 'struc_t_is_frame', + 'struc_t_is_ghost', + 'struc_t_is_hidden', + 'struc_t_is_union', + 'struc_t_is_varstr', + 'struc_t_members_get', + 'struc_t_members_set', + 'struc_t_memqty_get', + 'struc_t_memqty_set', + 'struc_t_ordinal_get', + 'struc_t_ordinal_set', + 'struc_t_props_get', + 'struc_t_props_set', + 'struc_t_set_alignment', + 'struc_t_set_ghost', + 'struct_field_visitor_t_visit_field', + 'structplace_t_idx_get', + 'structplace_t_idx_set', + 'structplace_t_offset_get', + 'structplace_t_offset_set', + 'strvec_t___getitem__', + 'strvec_t___len__', + 'strvec_t___setitem__', + 'strvec_t_at', + 'strvec_t_begin', + 'strvec_t_begin__SWIG_0', + 'strvec_t_begin__SWIG_1', + 'strvec_t_capacity', + 'strvec_t_clear', + 'strvec_t_empty', + 'strvec_t_end', + 'strvec_t_end__SWIG_0', + 'strvec_t_end__SWIG_1', + 'strvec_t_erase', + 'strvec_t_erase__SWIG_0', + 'strvec_t_erase__SWIG_1', + 'strvec_t_extract', + 'strvec_t_grow', + 'strvec_t_inject', + 'strvec_t_insert', + 'strvec_t_pop_back', + 'strvec_t_push_back', + 'strvec_t_push_back__SWIG_0', + 'strvec_t_push_back__SWIG_1', + 'strvec_t_qclear', + 'strvec_t_reserve', + 'strvec_t_resize', + 'strvec_t_resize__SWIG_0', + 'strvec_t_resize__SWIG_1', + 'strvec_t_size', + 'strvec_t_swap', + 'strvec_t_truncate', + 'strwinsetup_t__get_strtypes', + 'strwinsetup_t__set_strtypes', + 'strwinsetup_t_display_only_existing_strings_get', + 'strwinsetup_t_display_only_existing_strings_set', + 'strwinsetup_t_ignore_heads_get', + 'strwinsetup_t_ignore_heads_set', + 'strwinsetup_t_is_initialized', + 'strwinsetup_t_minlen_get', + 'strwinsetup_t_minlen_set', + 'strwinsetup_t_only_7bit_get', + 'strwinsetup_t_only_7bit_set', + 'suspend_process', + 'suspend_thread', + 'sval_pointer_assign', + 'sval_pointer_cast', + 'sval_pointer_frompointer', + 'sval_pointer_value', + 'swap_idcvs', + 'swap_mcode_relation', + 'swapped_relation', + 'switch_info_t__from_ptrval__', + 'switch_info_t__get_values_lowcase', + 'switch_info_t__set_values_lowcase', + 'switch_info_t_assign', + 'switch_info_t_clear', + 'switch_info_t_custom_get', + 'switch_info_t_custom_set', + 'switch_info_t_defjump_get', + 'switch_info_t_defjump_set', + 'switch_info_t_elbase_get', + 'switch_info_t_elbase_set', + 'switch_info_t_expr_ea_get', + 'switch_info_t_expr_ea_set', + 'switch_info_t_flags_get', + 'switch_info_t_flags_set', + 'switch_info_t_get_jrange_vrange', + 'switch_info_t_get_jtable_element_size', + 'switch_info_t_get_jtable_size', + 'switch_info_t_get_lowcase', + 'switch_info_t_get_shift', + 'switch_info_t_get_version', + 'switch_info_t_get_vtable_element_size', + 'switch_info_t_has_default', + 'switch_info_t_has_elbase', + 'switch_info_t_ind_lowcase_get', + 'switch_info_t_ind_lowcase_set', + 'switch_info_t_is_custom', + 'switch_info_t_is_indirect', + 'switch_info_t_is_nolowcase', + 'switch_info_t_is_sparse', + 'switch_info_t_is_subtract', + 'switch_info_t_jcases_get', + 'switch_info_t_jcases_set', + 'switch_info_t_jumps_get', + 'switch_info_t_jumps_set', + 'switch_info_t_marks_get', + 'switch_info_t_marks_set', + 'switch_info_t_ncases_get', + 'switch_info_t_ncases_set', + 'switch_info_t_regdtype_get', + 'switch_info_t_regdtype_set', + 'switch_info_t_regnum_get', + 'switch_info_t_regnum_set', + 'switch_info_t_set_elbase', + 'switch_info_t_set_expr', + 'switch_info_t_set_jtable_element_size', + 'switch_info_t_set_jtable_size', + 'switch_info_t_set_shift', + 'switch_info_t_set_vtable_element_size', + 'switch_info_t_startea_get', + 'switch_info_t_startea_set', + 'switch_info_t_use_std_table', + 'sync_source_t___eq__', + 'sync_source_t___ne__', + 'sync_source_t_get_register', + 'sync_source_t_get_widget', + 'sync_source_t_is_register', + 'sync_source_t_is_widget', + 'sync_sources', + 'tag_addr', + 'tag_advance', + 'tag_remove', + 'tag_skipcode', + 'tag_skipcodes', + 'tag_strlen', + 'take_database_snapshot', + 'take_memory_snapshot', + 'tbyte_flag', + 'term_hexrays_plugin', + 'tev_info_reg_t_info_get', + 'tev_info_reg_t_info_set', + 'tev_info_reg_t_registers_get', + 'tev_info_reg_t_registers_set', + 'tev_info_t_ea_get', + 'tev_info_t_ea_set', + 'tev_info_t_tid_get', + 'tev_info_t_tid_set', + 'tev_info_t_type_get', + 'tev_info_t_type_set', + 'tev_reg_value_t_reg_idx_get', + 'tev_reg_value_t_reg_idx_set', + 'tev_reg_value_t_value_get', + 'tev_reg_value_t_value_set', + 'tev_reg_values_t___getitem__', + 'tev_reg_values_t___len__', + 'tev_reg_values_t___setitem__', + 'tev_reg_values_t_at', + 'tev_reg_values_t_begin', + 'tev_reg_values_t_begin__SWIG_0', + 'tev_reg_values_t_begin__SWIG_1', + 'tev_reg_values_t_capacity', + 'tev_reg_values_t_clear', + 'tev_reg_values_t_empty', + 'tev_reg_values_t_end', + 'tev_reg_values_t_end__SWIG_0', + 'tev_reg_values_t_end__SWIG_1', + 'tev_reg_values_t_erase', + 'tev_reg_values_t_erase__SWIG_0', + 'tev_reg_values_t_erase__SWIG_1', + 'tev_reg_values_t_extract', + 'tev_reg_values_t_grow', + 'tev_reg_values_t_inject', + 'tev_reg_values_t_insert', + 'tev_reg_values_t_pop_back', + 'tev_reg_values_t_push_back', + 'tev_reg_values_t_push_back__SWIG_0', + 'tev_reg_values_t_push_back__SWIG_1', + 'tev_reg_values_t_qclear', + 'tev_reg_values_t_reserve', + 'tev_reg_values_t_resize', + 'tev_reg_values_t_resize__SWIG_0', + 'tev_reg_values_t_resize__SWIG_1', + 'tev_reg_values_t_size', + 'tev_reg_values_t_swap', + 'tev_reg_values_t_truncate', + 'tevinforeg_vec_t___getitem__', + 'tevinforeg_vec_t___len__', + 'tevinforeg_vec_t___setitem__', + 'tevinforeg_vec_t_at', + 'tevinforeg_vec_t_begin', + 'tevinforeg_vec_t_begin__SWIG_0', + 'tevinforeg_vec_t_begin__SWIG_1', + 'tevinforeg_vec_t_capacity', + 'tevinforeg_vec_t_clear', + 'tevinforeg_vec_t_empty', + 'tevinforeg_vec_t_end', + 'tevinforeg_vec_t_end__SWIG_0', + 'tevinforeg_vec_t_end__SWIG_1', + 'tevinforeg_vec_t_erase', + 'tevinforeg_vec_t_erase__SWIG_0', + 'tevinforeg_vec_t_erase__SWIG_1', + 'tevinforeg_vec_t_extract', + 'tevinforeg_vec_t_grow', + 'tevinforeg_vec_t_inject', + 'tevinforeg_vec_t_insert', + 'tevinforeg_vec_t_pop_back', + 'tevinforeg_vec_t_push_back', + 'tevinforeg_vec_t_push_back__SWIG_0', + 'tevinforeg_vec_t_push_back__SWIG_1', + 'tevinforeg_vec_t_qclear', + 'tevinforeg_vec_t_reserve', + 'tevinforeg_vec_t_resize', + 'tevinforeg_vec_t_resize__SWIG_0', + 'tevinforeg_vec_t_resize__SWIG_1', + 'tevinforeg_vec_t_size', + 'tevinforeg_vec_t_swap', + 'tevinforeg_vec_t_truncate', + 'text_sink_t__print', + 'textctrl_info_t_assign', + 'textctrl_info_t_create', + 'textctrl_info_t_destroy', + 'textctrl_info_t_get_clink', + 'textctrl_info_t_get_clink_ptr', + 'textctrl_info_t_get_flags', + 'textctrl_info_t_get_tabsize', + 'textctrl_info_t_get_text', + 'textctrl_info_t_set_flags', + 'textctrl_info_t_set_tabsize', + 'textctrl_info_t_set_text', + 'thread_name_t_name_get', + 'thread_name_t_name_set', + 'thread_name_t_tid_get', + 'thread_name_t_tid_set', + 'throw_idc_exception', + 'tid_array___getitem__', + 'tid_array___setitem__', + 'tid_array_cast', + 'tid_array_frompointer', + 'til_symbol_t_name_get', + 'til_symbol_t_name_set', + 'til_symbol_t_til_get', + 'til_symbol_t_til_set', + 'til_t_base', + 'til_t_cc_get', + 'til_t_cc_set', + 'til_t_desc_get', + 'til_t_desc_set', + 'til_t_flags_get', + 'til_t_flags_set', + 'til_t_is_dirty', + 'til_t_name_get', + 'til_t_name_set', + 'til_t_nbases_get', + 'til_t_nbases_set', + 'til_t_nrefs_get', + 'til_t_nrefs_set', + 'til_t_nstreams_get', + 'til_t_nstreams_set', + 'til_t_set_dirty', + 'til_t_streams_get', + 'til_t_streams_set', + 'tinfo_t___eq__', + 'tinfo_t___ge__', + 'tinfo_t___gt__', + 'tinfo_t___le__', + 'tinfo_t___lt__', + 'tinfo_t___ne__', + 'tinfo_t___str__', + 'tinfo_t__print', + 'tinfo_t_append_covered', + 'tinfo_t_calc_gaps', + 'tinfo_t_calc_purged_bytes', + 'tinfo_t_calc_score', + 'tinfo_t_calc_udt_aligns', + 'tinfo_t_change_sign', + 'tinfo_t_clear', + 'tinfo_t_clr_const', + 'tinfo_t_clr_const_volatile', + 'tinfo_t_clr_volatile', + 'tinfo_t_compare', + 'tinfo_t_compare_with', + 'tinfo_t_convert_array_to_ptr', + 'tinfo_t_copy', + 'tinfo_t_create_array', + 'tinfo_t_create_array__SWIG_0', + 'tinfo_t_create_array__SWIG_1', + 'tinfo_t_create_bitfield', + 'tinfo_t_create_bitfield__SWIG_0', + 'tinfo_t_create_bitfield__SWIG_1', + 'tinfo_t_create_enum', + 'tinfo_t_create_forward_decl', + 'tinfo_t_create_func', + 'tinfo_t_create_ptr', + 'tinfo_t_create_ptr__SWIG_0', + 'tinfo_t_create_ptr__SWIG_1', + 'tinfo_t_create_simple_type', + 'tinfo_t_create_typedef', + 'tinfo_t_create_typedef__SWIG_0', + 'tinfo_t_create_typedef__SWIG_1', + 'tinfo_t_create_typedef__SWIG_2', + 'tinfo_t_create_udt', + 'tinfo_t_del_attr', + 'tinfo_t_del_attrs', + 'tinfo_t_deserialize', + 'tinfo_t_deserialize__SWIG_0', + 'tinfo_t_deserialize__SWIG_1', + 'tinfo_t_dstr', + 'tinfo_t_empty', + 'tinfo_t_equals_to', + 'tinfo_t_find_udt_member', + 'tinfo_t_get_array_details', + 'tinfo_t_get_array_element', + 'tinfo_t_get_array_nelems', + 'tinfo_t_get_attr', + 'tinfo_t_get_attrs', + 'tinfo_t_get_bitfield_details', + 'tinfo_t_get_declalign', + 'tinfo_t_get_decltype', + 'tinfo_t_get_enum_base_type', + 'tinfo_t_get_enum_details', + 'tinfo_t_get_final_ordinal', + 'tinfo_t_get_final_type_name', + 'tinfo_t_get_func_details', + 'tinfo_t_get_modifiers', + 'tinfo_t_get_named_type', + 'tinfo_t_get_nargs', + 'tinfo_t_get_next_type_name', + 'tinfo_t_get_nth_arg', + 'tinfo_t_get_numbered_type', + 'tinfo_t_get_onemember_type', + 'tinfo_t_get_ordinal', + 'tinfo_t_get_pointed_object', + 'tinfo_t_get_ptr_details', + 'tinfo_t_get_ptrarr_object', + 'tinfo_t_get_ptrarr_objsize', + 'tinfo_t_get_realtype', + 'tinfo_t_get_rettype', + 'tinfo_t_get_sign', + 'tinfo_t_get_size', + 'tinfo_t_get_stock', + 'tinfo_t_get_til', + 'tinfo_t_get_type_name', + 'tinfo_t_get_udt_details', + 'tinfo_t_get_udt_nmembers', + 'tinfo_t_get_unpadded_size', + 'tinfo_t_has_details', + 'tinfo_t_has_vftable', + 'tinfo_t_is_anonymous_udt', + 'tinfo_t_is_arithmetic', + 'tinfo_t_is_array', + 'tinfo_t_is_bitfield', + 'tinfo_t_is_bool', + 'tinfo_t_is_castable_to', + 'tinfo_t_is_char', + 'tinfo_t_is_complex', + 'tinfo_t_is_const', + 'tinfo_t_is_correct', + 'tinfo_t_is_decl_array', + 'tinfo_t_is_decl_bitfield', + 'tinfo_t_is_decl_bool', + 'tinfo_t_is_decl_char', + 'tinfo_t_is_decl_complex', + 'tinfo_t_is_decl_const', + 'tinfo_t_is_decl_double', + 'tinfo_t_is_decl_enum', + 'tinfo_t_is_decl_float', + 'tinfo_t_is_decl_floating', + 'tinfo_t_is_decl_func', + 'tinfo_t_is_decl_int', + 'tinfo_t_is_decl_int128', + 'tinfo_t_is_decl_int16', + 'tinfo_t_is_decl_int32', + 'tinfo_t_is_decl_int64', + 'tinfo_t_is_decl_last', + 'tinfo_t_is_decl_ldouble', + 'tinfo_t_is_decl_paf', + 'tinfo_t_is_decl_partial', + 'tinfo_t_is_decl_ptr', + 'tinfo_t_is_decl_struct', + 'tinfo_t_is_decl_sue', + 'tinfo_t_is_decl_tbyte', + 'tinfo_t_is_decl_typedef', + 'tinfo_t_is_decl_uchar', + 'tinfo_t_is_decl_udt', + 'tinfo_t_is_decl_uint', + 'tinfo_t_is_decl_uint128', + 'tinfo_t_is_decl_uint16', + 'tinfo_t_is_decl_uint32', + 'tinfo_t_is_decl_uint64', + 'tinfo_t_is_decl_union', + 'tinfo_t_is_decl_unknown', + 'tinfo_t_is_decl_void', + 'tinfo_t_is_decl_volatile', + 'tinfo_t_is_double', + 'tinfo_t_is_empty_udt', + 'tinfo_t_is_enum', + 'tinfo_t_is_ext_arithmetic', + 'tinfo_t_is_ext_integral', + 'tinfo_t_is_float', + 'tinfo_t_is_floating', + 'tinfo_t_is_forward_decl', + 'tinfo_t_is_from_subtil', + 'tinfo_t_is_func', + 'tinfo_t_is_funcptr', + 'tinfo_t_is_high_func', + 'tinfo_t_is_int', + 'tinfo_t_is_int128', + 'tinfo_t_is_int16', + 'tinfo_t_is_int32', + 'tinfo_t_is_int64', + 'tinfo_t_is_integral', + 'tinfo_t_is_ldouble', + 'tinfo_t_is_manually_castable_to', + 'tinfo_t_is_one_fpval', + 'tinfo_t_is_paf', + 'tinfo_t_is_partial', + 'tinfo_t_is_ptr', + 'tinfo_t_is_ptr_or_array', + 'tinfo_t_is_purging_cc', + 'tinfo_t_is_pvoid', + 'tinfo_t_is_scalar', + 'tinfo_t_is_shifted_ptr', + 'tinfo_t_is_signed', + 'tinfo_t_is_small_udt', + 'tinfo_t_is_sse_type', + 'tinfo_t_is_struct', + 'tinfo_t_is_sue', + 'tinfo_t_is_tbyte', + 'tinfo_t_is_typeref', + 'tinfo_t_is_uchar', + 'tinfo_t_is_udt', + 'tinfo_t_is_uint', + 'tinfo_t_is_uint128', + 'tinfo_t_is_uint16', + 'tinfo_t_is_uint32', + 'tinfo_t_is_uint64', + 'tinfo_t_is_union', + 'tinfo_t_is_unknown', + 'tinfo_t_is_unsigned', + 'tinfo_t_is_user_cc', + 'tinfo_t_is_vararg_cc', + 'tinfo_t_is_varstruct', + 'tinfo_t_is_vftable', + 'tinfo_t_is_void', + 'tinfo_t_is_volatile', + 'tinfo_t_is_well_defined', + 'tinfo_t_present', + 'tinfo_t_read_bitfield_value', + 'tinfo_t_remove_ptr_or_array', + 'tinfo_t_requires_qualifier', + 'tinfo_t_serialize', + 'tinfo_t_set_attr', + 'tinfo_t_set_attrs', + 'tinfo_t_set_const', + 'tinfo_t_set_declalign', + 'tinfo_t_set_modifiers', + 'tinfo_t_set_named_type', + 'tinfo_t_set_numbered_type', + 'tinfo_t_set_symbol_type', + 'tinfo_t_set_volatile', + 'tinfo_t_swap', + 'tinfo_t_write_bitfield_value', + 'tinfo_visitor_t_apply_to', + 'tinfo_visitor_t_prune_now', + 'tinfo_visitor_t_state_get', + 'tinfo_visitor_t_state_set', + 'tinfo_visitor_t_visit_type', + 'to_ea', + 'toggle_bnot', + 'toggle_lzero', + 'toggle_sign', + 'treeloc_t___eq__', + 'treeloc_t___lt__', + 'treeloc_t_ea_get', + 'treeloc_t_ea_set', + 'treeloc_t_itp_get', + 'treeloc_t_itp_set', + 'try_handler_t_clear', + 'try_handler_t_disp_get', + 'try_handler_t_disp_set', + 'try_handler_t_fpreg_get', + 'try_handler_t_fpreg_set', + 'try_to_add_libfunc', + 'tryblk_t_clear', + 'tryblk_t_cpp', + 'tryblk_t_empty', + 'tryblk_t_get_kind', + 'tryblk_t_is_cpp', + 'tryblk_t_is_seh', + 'tryblk_t_level_get', + 'tryblk_t_level_set', + 'tryblk_t_seh', + 'tryblk_t_set_cpp', + 'tryblk_t_set_seh', + 'tryblks_t___eq__', + 'tryblks_t___getitem__', + 'tryblks_t___len__', + 'tryblks_t___ne__', + 'tryblks_t___setitem__', + 'tryblks_t__del', + 'tryblks_t_add_unique', + 'tryblks_t_at', + 'tryblks_t_begin', + 'tryblks_t_begin__SWIG_0', + 'tryblks_t_begin__SWIG_1', + 'tryblks_t_capacity', + 'tryblks_t_clear', + 'tryblks_t_empty', + 'tryblks_t_end', + 'tryblks_t_end__SWIG_0', + 'tryblks_t_end__SWIG_1', + 'tryblks_t_erase', + 'tryblks_t_erase__SWIG_0', + 'tryblks_t_erase__SWIG_1', + 'tryblks_t_extract', + 'tryblks_t_find', + 'tryblks_t_find__SWIG_0', + 'tryblks_t_find__SWIG_1', + 'tryblks_t_grow', + 'tryblks_t_has', + 'tryblks_t_inject', + 'tryblks_t_insert', + 'tryblks_t_pop_back', + 'tryblks_t_push_back', + 'tryblks_t_push_back__SWIG_0', + 'tryblks_t_push_back__SWIG_1', + 'tryblks_t_qclear', + 'tryblks_t_reserve', + 'tryblks_t_resize', + 'tryblks_t_resize__SWIG_0', + 'tryblks_t_resize__SWIG_1', + 'tryblks_t_size', + 'tryblks_t_swap', + 'tryblks_t_truncate', + 'twinpos_t___eq__', + 'twinpos_t___ne__', + 'twinpos_t_at_get', + 'twinpos_t_at_set', + 'twinpos_t_x_get', + 'twinpos_t_x_set', + 'type_attr_t___ge__', + 'type_attr_t___lt__', + 'type_attr_t_key_get', + 'type_attr_t_key_set', + 'type_attr_t_value_get', + 'type_attr_t_value_set', + 'type_attrs_t___getitem__', + 'type_attrs_t___len__', + 'type_attrs_t___setitem__', + 'type_attrs_t_at', + 'type_attrs_t_begin', + 'type_attrs_t_begin__SWIG_0', + 'type_attrs_t_begin__SWIG_1', + 'type_attrs_t_capacity', + 'type_attrs_t_clear', + 'type_attrs_t_empty', + 'type_attrs_t_end', + 'type_attrs_t_end__SWIG_0', + 'type_attrs_t_end__SWIG_1', + 'type_attrs_t_erase', + 'type_attrs_t_erase__SWIG_0', + 'type_attrs_t_erase__SWIG_1', + 'type_attrs_t_extract', + 'type_attrs_t_grow', + 'type_attrs_t_inject', + 'type_attrs_t_insert', + 'type_attrs_t_pop_back', + 'type_attrs_t_push_back', + 'type_attrs_t_push_back__SWIG_0', + 'type_attrs_t_push_back__SWIG_1', + 'type_attrs_t_qclear', + 'type_attrs_t_reserve', + 'type_attrs_t_resize', + 'type_attrs_t_resize__SWIG_0', + 'type_attrs_t_resize__SWIG_1', + 'type_attrs_t_size', + 'type_attrs_t_swap', + 'type_attrs_t_truncate', + 'type_mods_t_clear', + 'type_mods_t_cmt_get', + 'type_mods_t_cmt_set', + 'type_mods_t_flags_get', + 'type_mods_t_flags_set', + 'type_mods_t_has_cmt', + 'type_mods_t_has_info', + 'type_mods_t_has_name', + 'type_mods_t_has_type', + 'type_mods_t_name_get', + 'type_mods_t_name_set', + 'type_mods_t_set_new_cmt', + 'type_mods_t_set_new_name', + 'type_mods_t_set_new_type', + 'type_mods_t_type_get', + 'type_mods_t_type_set', + 'typedef_type_data_t_is_ordref_get', + 'typedef_type_data_t_is_ordref_set', + 'typedef_type_data_t_resolve_get', + 'typedef_type_data_t_resolve_set', + 'typedef_type_data_t_swap', + 'typedef_type_data_t_til_get', + 'typedef_type_data_t_til_set', + 'uchar_array___getitem__', + 'uchar_array___setitem__', + 'uchar_array_cast', + 'uchar_array_frompointer', + 'udc_filter_t_apply', + 'udc_filter_t_init', + 'udc_filter_t_match', + 'udcall_map_begin', + 'udcall_map_clear', + 'udcall_map_end', + 'udcall_map_erase', + 'udcall_map_find', + 'udcall_map_first', + 'udcall_map_free', + 'udcall_map_insert', + 'udcall_map_iterator_t___eq__', + 'udcall_map_iterator_t___ne__', + 'udcall_map_iterator_t_x_get', + 'udcall_map_iterator_t_x_set', + 'udcall_map_new', + 'udcall_map_next', + 'udcall_map_prev', + 'udcall_map_second', + 'udcall_map_size', + 'udcall_t___eq__', + 'udcall_t___ge__', + 'udcall_t___gt__', + 'udcall_t___le__', + 'udcall_t___lt__', + 'udcall_t___ne__', + 'udcall_t_compare', + 'udcall_t_name_get', + 'udcall_t_name_set', + 'udcall_t_tif_get', + 'udcall_t_tif_set', + 'udt_member_t___eq__', + 'udt_member_t___lt__', + 'udt_member_t___ne__', + 'udt_member_t_begin', + 'udt_member_t_clr_baseclass', + 'udt_member_t_clr_unaligned', + 'udt_member_t_clr_vftable', + 'udt_member_t_clr_virtbase', + 'udt_member_t_cmt_get', + 'udt_member_t_cmt_set', + 'udt_member_t_effalign_get', + 'udt_member_t_effalign_set', + 'udt_member_t_end', + 'udt_member_t_fda_get', + 'udt_member_t_fda_set', + 'udt_member_t_is_anonymous_udm', + 'udt_member_t_is_baseclass', + 'udt_member_t_is_bitfield', + 'udt_member_t_is_unaligned', + 'udt_member_t_is_vftable', + 'udt_member_t_is_virtbase', + 'udt_member_t_is_zero_bitfield', + 'udt_member_t_name_get', + 'udt_member_t_name_set', + 'udt_member_t_offset_get', + 'udt_member_t_offset_set', + 'udt_member_t_set_baseclass', + 'udt_member_t_set_unaligned', + 'udt_member_t_set_vftable', + 'udt_member_t_set_virtbase', + 'udt_member_t_size_get', + 'udt_member_t_size_set', + 'udt_member_t_swap', + 'udt_member_t_tafld_bits_get', + 'udt_member_t_tafld_bits_set', + 'udt_member_t_type_get', + 'udt_member_t_type_set', + 'udt_type_data_t_effalign_get', + 'udt_type_data_t_effalign_set', + 'udt_type_data_t_is_cppobj', + 'udt_type_data_t_is_last_baseclass', + 'udt_type_data_t_is_msstruct', + 'udt_type_data_t_is_unaligned', + 'udt_type_data_t_is_union_get', + 'udt_type_data_t_is_union_set', + 'udt_type_data_t_is_vftable', + 'udt_type_data_t_pack_get', + 'udt_type_data_t_pack_set', + 'udt_type_data_t_sda_get', + 'udt_type_data_t_sda_set', + 'udt_type_data_t_swap', + 'udt_type_data_t_taudt_bits_get', + 'udt_type_data_t_taudt_bits_set', + 'udt_type_data_t_total_size_get', + 'udt_type_data_t_total_size_set', + 'udt_type_data_t_unpadded_size_get', + 'udt_type_data_t_unpadded_size_set', + 'udtmembervec_t___eq__', + 'udtmembervec_t___getitem__', + 'udtmembervec_t___len__', + 'udtmembervec_t___ne__', + 'udtmembervec_t___setitem__', + 'udtmembervec_t__del', + 'udtmembervec_t_add_unique', + 'udtmembervec_t_at', + 'udtmembervec_t_begin', + 'udtmembervec_t_begin__SWIG_0', + 'udtmembervec_t_begin__SWIG_1', + 'udtmembervec_t_capacity', + 'udtmembervec_t_clear', + 'udtmembervec_t_empty', + 'udtmembervec_t_end', + 'udtmembervec_t_end__SWIG_0', + 'udtmembervec_t_end__SWIG_1', + 'udtmembervec_t_erase', + 'udtmembervec_t_erase__SWIG_0', + 'udtmembervec_t_erase__SWIG_1', + 'udtmembervec_t_extract', + 'udtmembervec_t_find', + 'udtmembervec_t_find__SWIG_0', + 'udtmembervec_t_find__SWIG_1', + 'udtmembervec_t_grow', + 'udtmembervec_t_has', + 'udtmembervec_t_inject', + 'udtmembervec_t_insert', + 'udtmembervec_t_pop_back', + 'udtmembervec_t_push_back', + 'udtmembervec_t_push_back__SWIG_0', + 'udtmembervec_t_push_back__SWIG_1', + 'udtmembervec_t_qclear', + 'udtmembervec_t_reserve', + 'udtmembervec_t_resize', + 'udtmembervec_t_resize__SWIG_0', + 'udtmembervec_t_resize__SWIG_1', + 'udtmembervec_t_size', + 'udtmembervec_t_swap', + 'udtmembervec_t_truncate', + 'ui_load_new_file', + 'ui_run_debugger', + 'ui_stroff_applicator_t_apply', + 'ui_stroff_op_t___eq__', + 'ui_stroff_op_t___ne__', + 'ui_stroff_op_t_offset_get', + 'ui_stroff_op_t_offset_set', + 'ui_stroff_op_t_text_get', + 'ui_stroff_op_t_text_set', + 'ui_stroff_ops_t___eq__', + 'ui_stroff_ops_t___getitem__', + 'ui_stroff_ops_t___len__', + 'ui_stroff_ops_t___ne__', + 'ui_stroff_ops_t___setitem__', + 'ui_stroff_ops_t__del', + 'ui_stroff_ops_t_add_unique', + 'ui_stroff_ops_t_at', + 'ui_stroff_ops_t_begin', + 'ui_stroff_ops_t_begin__SWIG_0', + 'ui_stroff_ops_t_begin__SWIG_1', + 'ui_stroff_ops_t_capacity', + 'ui_stroff_ops_t_clear', + 'ui_stroff_ops_t_empty', + 'ui_stroff_ops_t_end', + 'ui_stroff_ops_t_end__SWIG_0', + 'ui_stroff_ops_t_end__SWIG_1', + 'ui_stroff_ops_t_erase', + 'ui_stroff_ops_t_erase__SWIG_0', + 'ui_stroff_ops_t_erase__SWIG_1', + 'ui_stroff_ops_t_extract', + 'ui_stroff_ops_t_find', + 'ui_stroff_ops_t_find__SWIG_0', + 'ui_stroff_ops_t_find__SWIG_1', + 'ui_stroff_ops_t_grow', + 'ui_stroff_ops_t_has', + 'ui_stroff_ops_t_inject', + 'ui_stroff_ops_t_insert', + 'ui_stroff_ops_t_pop_back', + 'ui_stroff_ops_t_push_back', + 'ui_stroff_ops_t_push_back__SWIG_0', + 'ui_stroff_ops_t_push_back__SWIG_1', + 'ui_stroff_ops_t_qclear', + 'ui_stroff_ops_t_reserve', + 'ui_stroff_ops_t_resize', + 'ui_stroff_ops_t_resize__SWIG_0', + 'ui_stroff_ops_t_resize__SWIG_1', + 'ui_stroff_ops_t_size', + 'ui_stroff_ops_t_swap', + 'ui_stroff_ops_t_truncate', + 'uintvec_t___eq__', + 'uintvec_t___getitem__', + 'uintvec_t___len__', + 'uintvec_t___ne__', + 'uintvec_t___setitem__', + 'uintvec_t__del', + 'uintvec_t_add_unique', + 'uintvec_t_at', + 'uintvec_t_begin', + 'uintvec_t_begin__SWIG_0', + 'uintvec_t_begin__SWIG_1', + 'uintvec_t_capacity', + 'uintvec_t_clear', + 'uintvec_t_empty', + 'uintvec_t_end', + 'uintvec_t_end__SWIG_0', + 'uintvec_t_end__SWIG_1', + 'uintvec_t_erase', + 'uintvec_t_erase__SWIG_0', + 'uintvec_t_erase__SWIG_1', + 'uintvec_t_extract', + 'uintvec_t_find', + 'uintvec_t_find__SWIG_0', + 'uintvec_t_find__SWIG_1', + 'uintvec_t_has', + 'uintvec_t_inject', + 'uintvec_t_insert', + 'uintvec_t_pop_back', + 'uintvec_t_push_back', + 'uintvec_t_push_back__SWIG_0', + 'uintvec_t_push_back__SWIG_1', + 'uintvec_t_qclear', + 'uintvec_t_reserve', + 'uintvec_t_resize', + 'uintvec_t_resize__SWIG_0', + 'uintvec_t_resize__SWIG_1', + 'uintvec_t_size', + 'uintvec_t_swap', + 'uintvec_t_truncate', + 'ulonglongvec_t___eq__', + 'ulonglongvec_t___getitem__', + 'ulonglongvec_t___len__', + 'ulonglongvec_t___ne__', + 'ulonglongvec_t___setitem__', + 'ulonglongvec_t__del', + 'ulonglongvec_t_add_unique', + 'ulonglongvec_t_at', + 'ulonglongvec_t_begin', + 'ulonglongvec_t_begin__SWIG_0', + 'ulonglongvec_t_begin__SWIG_1', + 'ulonglongvec_t_capacity', + 'ulonglongvec_t_clear', + 'ulonglongvec_t_empty', + 'ulonglongvec_t_end', + 'ulonglongvec_t_end__SWIG_0', + 'ulonglongvec_t_end__SWIG_1', + 'ulonglongvec_t_erase', + 'ulonglongvec_t_erase__SWIG_0', + 'ulonglongvec_t_erase__SWIG_1', + 'ulonglongvec_t_extract', + 'ulonglongvec_t_find', + 'ulonglongvec_t_find__SWIG_0', + 'ulonglongvec_t_find__SWIG_1', + 'ulonglongvec_t_has', + 'ulonglongvec_t_inject', + 'ulonglongvec_t_insert', + 'ulonglongvec_t_pop_back', + 'ulonglongvec_t_push_back', + 'ulonglongvec_t_push_back__SWIG_0', + 'ulonglongvec_t_push_back__SWIG_1', + 'ulonglongvec_t_qclear', + 'ulonglongvec_t_reserve', + 'ulonglongvec_t_resize', + 'ulonglongvec_t_resize__SWIG_0', + 'ulonglongvec_t_resize__SWIG_1', + 'ulonglongvec_t_size', + 'ulonglongvec_t_swap', + 'ulonglongvec_t_truncate', + 'unhide_border', + 'unhide_item', + 'unmark_selection', + 'unpack_idcobj_from_bv', + 'unpack_idcobj_from_idb', + 'unpack_object_from_bv', + 'unpack_object_from_idb', + 'unregister_action', + 'unregister_custom_data_format', + 'unregister_custom_data_type', + 'unregister_timer', + 'update_action_checkable', + 'update_action_checked', + 'update_action_icon', + 'update_action_label', + 'update_action_shortcut', + 'update_action_state', + 'update_action_tooltip', + 'update_action_visibility', + 'update_bpt', + 'update_extra_cmt', + 'update_fpd', + 'update_func', + 'update_hidden_range', + 'update_segm', + 'use_mapping', + 'user_cancelled', + 'user_cmts_begin', + 'user_cmts_clear', + 'user_cmts_end', + 'user_cmts_erase', + 'user_cmts_find', + 'user_cmts_first', + 'user_cmts_free', + 'user_cmts_insert', + 'user_cmts_iterator_t___eq__', + 'user_cmts_iterator_t___ne__', + 'user_cmts_iterator_t_x_get', + 'user_cmts_iterator_t_x_set', + 'user_cmts_new', + 'user_cmts_next', + 'user_cmts_prev', + 'user_cmts_second', + 'user_cmts_size', + 'user_cmts_t_at', + 'user_cmts_t_size', + 'user_graph_place_t_node_get', + 'user_graph_place_t_node_set', + 'user_iflags_begin', + 'user_iflags_clear', + 'user_iflags_end', + 'user_iflags_erase', + 'user_iflags_find', + 'user_iflags_first', + 'user_iflags_free', + 'user_iflags_insert', + 'user_iflags_iterator_t___eq__', + 'user_iflags_iterator_t___ne__', + 'user_iflags_iterator_t_x_get', + 'user_iflags_iterator_t_x_set', + 'user_iflags_new', + 'user_iflags_next', + 'user_iflags_prev', + 'user_iflags_second', + 'user_iflags_size', + 'user_iflags_t_at', + 'user_iflags_t_size', + 'user_labels_begin', + 'user_labels_clear', + 'user_labels_end', + 'user_labels_erase', + 'user_labels_find', + 'user_labels_first', + 'user_labels_free', + 'user_labels_insert', + 'user_labels_iterator_t___eq__', + 'user_labels_iterator_t___ne__', + 'user_labels_iterator_t_x_get', + 'user_labels_iterator_t_x_set', + 'user_labels_new', + 'user_labels_next', + 'user_labels_prev', + 'user_labels_second', + 'user_labels_size', + 'user_labels_t_at', + 'user_labels_t_size', + 'user_lvar_modifier_t_modify_lvars', + 'user_numforms_begin', + 'user_numforms_clear', + 'user_numforms_end', + 'user_numforms_erase', + 'user_numforms_find', + 'user_numforms_first', + 'user_numforms_free', + 'user_numforms_insert', + 'user_numforms_iterator_t___eq__', + 'user_numforms_iterator_t___ne__', + 'user_numforms_iterator_t_x_get', + 'user_numforms_iterator_t_x_set', + 'user_numforms_new', + 'user_numforms_next', + 'user_numforms_prev', + 'user_numforms_second', + 'user_numforms_size', + 'user_numforms_t_at', + 'user_numforms_t_size', + 'user_unions_begin', + 'user_unions_clear', + 'user_unions_end', + 'user_unions_erase', + 'user_unions_find', + 'user_unions_first', + 'user_unions_free', + 'user_unions_insert', + 'user_unions_iterator_t___eq__', + 'user_unions_iterator_t___ne__', + 'user_unions_iterator_t_x_get', + 'user_unions_iterator_t_x_set', + 'user_unions_new', + 'user_unions_next', + 'user_unions_prev', + 'user_unions_second', + 'user_unions_size', + 'user_unions_t_at', + 'user_unions_t_size', + 'uses_modsp', + 'uval_array___getitem__', + 'uval_array___setitem__', + 'uval_array_cast', + 'uval_array_frompointer', + 'uval_ivl_ivlset_t___eq__', + 'uval_ivl_ivlset_t___ne__', + 'uval_ivl_ivlset_t_all_values', + 'uval_ivl_ivlset_t_begin', + 'uval_ivl_ivlset_t_begin__SWIG_0', + 'uval_ivl_ivlset_t_begin__SWIG_1', + 'uval_ivl_ivlset_t_clear', + 'uval_ivl_ivlset_t_empty', + 'uval_ivl_ivlset_t_end', + 'uval_ivl_ivlset_t_end__SWIG_0', + 'uval_ivl_ivlset_t_end__SWIG_1', + 'uval_ivl_ivlset_t_getivl', + 'uval_ivl_ivlset_t_lastivl', + 'uval_ivl_ivlset_t_nivls', + 'uval_ivl_ivlset_t_qclear', + 'uval_ivl_ivlset_t_set_all_values', + 'uval_ivl_ivlset_t_single_value', + 'uval_ivl_ivlset_t_swap', + 'uval_ivl_t_end', + 'uval_ivl_t_last', + 'uval_ivl_t_off_get', + 'uval_ivl_t_off_set', + 'uval_ivl_t_size_get', + 'uval_ivl_t_size_set', + 'uval_ivl_t_valid', + 'validate_idb_names', + 'validate_name', + 'valrng_t___eq__', + 'valrng_t___ge__', + 'valrng_t___gt__', + 'valrng_t___le__', + 'valrng_t___lt__', + 'valrng_t___ne__', + 'valrng_t__deregister', + 'valrng_t__print', + 'valrng_t__register', + 'valrng_t_all_values', + 'valrng_t_compare', + 'valrng_t_cvt_to_cmp', + 'valrng_t_cvt_to_single_value', + 'valrng_t_dstr', + 'valrng_t_empty', + 'valrng_t_get_size', + 'valrng_t_has', + 'valrng_t_intersect_with', + 'valrng_t_inverse', + 'valrng_t_is_unknown', + 'valrng_t_max_svalue', + 'valrng_t_max_svalue__SWIG_0', + 'valrng_t_max_svalue__SWIG_1', + 'valrng_t_max_value', + 'valrng_t_max_value__SWIG_0', + 'valrng_t_max_value__SWIG_1', + 'valrng_t_min_svalue', + 'valrng_t_min_svalue__SWIG_0', + 'valrng_t_min_svalue__SWIG_1', + 'valrng_t_reduce_size', + 'valrng_t_set_all', + 'valrng_t_set_cmp', + 'valrng_t_set_eq', + 'valrng_t_set_none', + 'valrng_t_set_unk', + 'valrng_t_swap', + 'valrng_t_unite_with', + 'valstr_t_info_get', + 'valstr_t_info_set', + 'valstr_t_length_get', + 'valstr_t_length_set', + 'valstr_t_members_get', + 'valstr_t_members_set', + 'valstr_t_oneline_get', + 'valstr_t_oneline_set', + 'valstr_t_props_get', + 'valstr_t_props_set', + 'valstrvec_t___getitem__', + 'valstrvec_t___len__', + 'valstrvec_t___setitem__', + 'valstrvec_t_at', + 'valstrvec_t_begin', + 'valstrvec_t_begin__SWIG_0', + 'valstrvec_t_begin__SWIG_1', + 'valstrvec_t_capacity', + 'valstrvec_t_clear', + 'valstrvec_t_empty', + 'valstrvec_t_end', + 'valstrvec_t_end__SWIG_0', + 'valstrvec_t_end__SWIG_1', + 'valstrvec_t_erase', + 'valstrvec_t_erase__SWIG_0', + 'valstrvec_t_erase__SWIG_1', + 'valstrvec_t_extract', + 'valstrvec_t_grow', + 'valstrvec_t_inject', + 'valstrvec_t_insert', + 'valstrvec_t_pop_back', + 'valstrvec_t_push_back', + 'valstrvec_t_push_back__SWIG_0', + 'valstrvec_t_push_back__SWIG_1', + 'valstrvec_t_qclear', + 'valstrvec_t_reserve', + 'valstrvec_t_resize', + 'valstrvec_t_resize__SWIG_0', + 'valstrvec_t_resize__SWIG_1', + 'valstrvec_t_size', + 'valstrvec_t_swap', + 'valstrvec_t_truncate', + 'var_ref_t___eq__', + 'var_ref_t___ge__', + 'var_ref_t___gt__', + 'var_ref_t___le__', + 'var_ref_t___lt__', + 'var_ref_t___ne__', + 'var_ref_t_compare', + 'var_ref_t_idx_get', + 'var_ref_t_idx_set', + 'var_ref_t_mba_get', + 'var_ref_t_mba_set', + 'vc_printer_t_func_get', + 'vc_printer_t_func_set', + 'vc_printer_t_lastchar_get', + 'vc_printer_t_lastchar_set', + 'vc_printer_t_oneliner', + 'vd_failure_t_desc', + 'vd_failure_t_hf_get', + 'vd_failure_t_hf_set', + 'vd_printer_t__print', + 'vd_printer_t__print__varargs__', + 'vd_printer_t_hdrlines_get', + 'vd_printer_t_hdrlines_set', + 'vd_printer_t_tmpbuf_get', + 'vd_printer_t_tmpbuf_set', + 'vdloc_t___eq__', + 'vdloc_t___ge__', + 'vdloc_t___gt__', + 'vdloc_t___le__', + 'vdloc_t___lt__', + 'vdloc_t___ne__', + 'vdloc_t__set_reg1', + 'vdloc_t_compare', + 'vdloc_t_is_aliasable', + 'vdloc_t_reg1', + 'vdloc_t_set_reg1', + 'vdui_t_calc_cmt_type', + 'vdui_t_cfunc_get', + 'vdui_t_cfunc_set', + 'vdui_t_clear', + 'vdui_t_collapse_item', + 'vdui_t_collapse_lvars', + 'vdui_t_cpos_get', + 'vdui_t_cpos_set', + 'vdui_t_ct_get', + 'vdui_t_ct_set', + 'vdui_t_ctree_to_disasm', + 'vdui_t_del_orphan_cmts', + 'vdui_t_edit_cmt', + 'vdui_t_edit_func_cmt', + 'vdui_t_flags_get', + 'vdui_t_flags_set', + 'vdui_t_get_current_item', + 'vdui_t_get_current_label', + 'vdui_t_get_number', + 'vdui_t_head_get', + 'vdui_t_head_set', + 'vdui_t_in_ctree', + 'vdui_t_invert_bits', + 'vdui_t_invert_sign', + 'vdui_t_item_get', + 'vdui_t_item_set', + 'vdui_t_jump_enter', + 'vdui_t_last_code_get', + 'vdui_t_last_code_set', + 'vdui_t_locked', + 'vdui_t_map_lvar', + 'vdui_t_mba_get', + 'vdui_t_mba_set', + 'vdui_t_refresh_cpos', + 'vdui_t_refresh_ctext', + 'vdui_t_refresh_view', + 'vdui_t_rename_global', + 'vdui_t_rename_label', + 'vdui_t_rename_lvar', + 'vdui_t_rename_strmem', + 'vdui_t_set_global_type', + 'vdui_t_set_locked', + 'vdui_t_set_lvar_cmt', + 'vdui_t_set_lvar_type', + 'vdui_t_set_noptr_lvar', + 'vdui_t_set_num_enum', + 'vdui_t_set_num_radix', + 'vdui_t_set_num_stroff', + 'vdui_t_set_strmem_type', + 'vdui_t_set_valid', + 'vdui_t_set_visible', + 'vdui_t_split_item', + 'vdui_t_switch_to', + 'vdui_t_tail_get', + 'vdui_t_tail_set', + 'vdui_t_toplevel_get', + 'vdui_t_toplevel_set', + 'vdui_t_ui_edit_lvar_cmt', + 'vdui_t_ui_map_lvar', + 'vdui_t_ui_rename_lvar', + 'vdui_t_ui_set_call_type', + 'vdui_t_ui_set_lvar_type', + 'vdui_t_ui_unmap_lvar', + 'vdui_t_valid', + 'vdui_t_view_idx_get', + 'vdui_t_view_idx_set', + 'vdui_t_visible', + 'verify_argloc', + 'verify_tinfo', + 'view_mouse_event_location_t_ea_get', + 'view_mouse_event_location_t_ea_set', + 'view_mouse_event_location_t_item_get', + 'view_mouse_event_location_t_item_set', + 'view_mouse_event_t_button_get', + 'view_mouse_event_t_button_set', + 'view_mouse_event_t_location_get', + 'view_mouse_event_t_location_set', + 'view_mouse_event_t_renderer_pos_get', + 'view_mouse_event_t_renderer_pos_set', + 'view_mouse_event_t_rtype_get', + 'view_mouse_event_t_rtype_set', + 'view_mouse_event_t_state_get', + 'view_mouse_event_t_state_set', + 'view_mouse_event_t_x_get', + 'view_mouse_event_t_x_set', + 'view_mouse_event_t_y_get', + 'view_mouse_event_t_y_set', + 'viewer_attach_menu_item', + 'viewer_center_on', + 'viewer_create_groups', + 'viewer_del_node_info', + 'viewer_delete_groups', + 'viewer_fit_window', + 'viewer_get_curnode', + 'viewer_get_gli', + 'viewer_get_node_info', + 'viewer_get_selection', + 'viewer_set_gli', + 'viewer_set_groups_visibility', + 'viewer_set_node_info', + 'viewer_set_titlebar_height', + 'visit_patched_bytes', + 'visit_stroff_fields', + 'visit_subtypes', + 'vivl_t___eq__', + 'vivl_t___eq____SWIG_0', + 'vivl_t___eq____SWIG_1', + 'vivl_t___ge__', + 'vivl_t___gt__', + 'vivl_t___le__', + 'vivl_t___lt__', + 'vivl_t___ne__', + 'vivl_t__print', + 'vivl_t_compare', + 'vivl_t_contains', + 'vivl_t_dstr', + 'vivl_t_extend_to_cover', + 'vivl_t_includes', + 'vivl_t_intersect', + 'vivl_t_overlap', + 'vivl_t_set', + 'vivl_t_set__SWIG_0', + 'vivl_t_set__SWIG_1', + 'vivl_t_set_reg', + 'vivl_t_set_stkoff', + 'vivl_t_size_get', + 'vivl_t_size_set', + 'voff_t___eq__', + 'voff_t___ge__', + 'voff_t___gt__', + 'voff_t___le__', + 'voff_t___lt__', + 'voff_t___ne__', + 'voff_t_add', + 'voff_t_compare', + 'voff_t_defined', + 'voff_t_diff', + 'voff_t_get_reg', + 'voff_t_get_stkoff', + 'voff_t_inc', + 'voff_t_is_reg', + 'voff_t_is_stkoff', + 'voff_t_off_get', + 'voff_t_off_set', + 'voff_t_set', + 'voff_t_set_reg', + 'voff_t_set_stkoff', + 'voff_t_type_get', + 'voff_t_type_set', + 'voff_t_undef', + 'wait_for_next_event', + 'warning', + 'warning__varargs__', + 'was_ida_decision', + 'word_flag', + 'write_dbg_memory', + 'write_tinfo_bitfield_value', + 'writebytes', + 'xrefblk_t_first_from', + 'xrefblk_t_first_to', + 'xrefblk_t_frm_get', + 'xrefblk_t_frm_set', + 'xrefblk_t_iscode_get', + 'xrefblk_t_iscode_set', + 'xrefblk_t_next_from', + 'xrefblk_t_next_from__SWIG_0', + 'xrefblk_t_next_from__SWIG_1', + 'xrefblk_t_next_to', + 'xrefblk_t_next_to__SWIG_0', + 'xrefblk_t_next_to__SWIG_1', + 'xrefblk_t_to_get', + 'xrefblk_t_to_set', + 'xrefblk_t_type_get', + 'xrefblk_t_type_set', + 'xrefblk_t_user_get', + 'xrefblk_t_user_set', + 'xrefchar', + 'xreflist_entry_t___eq__', + 'xreflist_entry_t___ne__', + 'xreflist_entry_t_ea_get', + 'xreflist_entry_t_ea_set', + 'xreflist_entry_t_opnum_get', + 'xreflist_entry_t_opnum_set', + 'xreflist_entry_t_type_get', + 'xreflist_entry_t_type_set', + 'xreflist_t___eq__', + 'xreflist_t___getitem__', + 'xreflist_t___len__', + 'xreflist_t___ne__', + 'xreflist_t___setitem__', + 'xreflist_t__del', + 'xreflist_t_add_unique', + 'xreflist_t_at', + 'xreflist_t_begin', + 'xreflist_t_begin__SWIG_0', + 'xreflist_t_begin__SWIG_1', + 'xreflist_t_capacity', + 'xreflist_t_clear', + 'xreflist_t_empty', + 'xreflist_t_end', + 'xreflist_t_end__SWIG_0', + 'xreflist_t_end__SWIG_1', + 'xreflist_t_erase', + 'xreflist_t_erase__SWIG_0', + 'xreflist_t_erase__SWIG_1', + 'xreflist_t_extract', + 'xreflist_t_find', + 'xreflist_t_find__SWIG_0', + 'xreflist_t_find__SWIG_1', + 'xreflist_t_grow', + 'xreflist_t_has', + 'xreflist_t_inject', + 'xreflist_t_insert', + 'xreflist_t_pop_back', + 'xreflist_t_push_back', + 'xreflist_t_push_back__SWIG_0', + 'xreflist_t_push_back__SWIG_1', + 'xreflist_t_qclear', + 'xreflist_t_reserve', + 'xreflist_t_resize', + 'xreflist_t_resize__SWIG_0', + 'xreflist_t_resize__SWIG_1', + 'xreflist_t_size', + 'xreflist_t_swap', + 'xreflist_t_truncate', + 'yword_flag', + 'zword_flag']} \ No newline at end of file diff --git a/release_pydoc_injections.txt b/release_pydoc_injections.txt deleted file mode 100644 index 9e2b0ce..0000000 --- a/release_pydoc_injections.txt +++ /dev/null @@ -1,71596 +0,0 @@ -ida_auto.auto_apply_tail(): - - auto_apply_tail(tail_ea, parent_ea) - - - Plan to apply the tail_ea chunk to the parent - - @param tail_ea: linear address of start of tail (C++: ea_t) - @param parent_ea: linear address within parent. If BADADDR, - automatically try to find parent via xrefs. (C++: - ea_t) - - -ida_auto.auto_apply_type(): - - auto_apply_type(caller, callee) - - - Plan to apply the callee's type to the calling point. - - - @param caller (C++: ea_t) - @param callee (C++: ea_t) - - -ida_auto.auto_cancel(): - - auto_cancel(ea1, ea2) - - - Remove an address range (ea1..ea2) from queues 'AU_CODE' , 'AU_PROC' , - 'AU_USED' . To remove an address range from other queues use - 'auto_unmark()' function. 'ea1' may be higher than 'ea2', the kernel - will swap them in this case. 'ea2' doesn't belong to the range. - - @param ea1 (C++: ea_t) - @param ea2 (C++: ea_t) - - -class ida_auto.auto_display_t(): - - Proxy of C++ auto_display_t class - - -ida_auto.auto_display_t.ea: - auto_display_t_ea_get(self) -> ea_t - -ida_auto.auto_display_t.state: - auto_display_t_state_get(self) -> idastate_t - -ida_auto.auto_display_t.type: - auto_display_t_type_get(self) -> atype_t - -ida_auto.auto_get(): - - auto_get(type, lowEA, highEA) -> ea_t - - - Retrieve an address from queues regarding their priority. Returns - 'BADADDR' if no addresses not lower than 'lowEA' and less than - 'highEA' are found in the queues. Otherwise *type will have queue - type. - - @param type (C++: atype_t *) - @param lowEA (C++: ea_t) - @param highEA (C++: ea_t) - - -ida_auto.auto_is_ok(): - - auto_is_ok() -> bool - - - Are all queues empty? (i.e. has autoanalysis finished?). - - -ida_auto.auto_make_code(): - - auto_make_code(ea) - - - Plan to make code. - - - @param ea (C++: ea_t) - - -ida_auto.auto_make_proc(): - - auto_make_proc(ea) - - - Plan to make code&function. - - - @param ea (C++: ea_t) - - -ida_auto.auto_mark(): - - auto_mark(ea, type) - - - Put single address into a queue. Queues keep addresses sorted. - - - @param ea (C++: ea_t) - @param type (C++: atype_t) - - -ida_auto.auto_mark_range(): - - auto_mark_range(start, end, type) - - - Put range of addresses into a queue. 'start' may be higher than 'end', - the kernel will swap them in this case. 'end' doesn't belong to the - range. - - @param start (C++: ea_t) - @param end (C++: ea_t) - @param type (C++: atype_t) - - -ida_auto.auto_recreate_insn(): - - auto_recreate_insn(ea) -> int - - - Try to create instruction - - @param ea: linear address of callee (C++: ea_t) - @return: the length of the instruction or 0 - - -ida_auto.auto_unmark(): - - auto_unmark(start, end, type) - - - Remove range of addresses from a queue. 'start' may be higher than - 'end', the kernel will swap them in this case. 'end' doesn't belong to - the range. - - @param start (C++: ea_t) - @param end (C++: ea_t) - @param type (C++: atype_t) - - -ida_auto.auto_wait(): - - auto_wait() -> bool - - - Process everything in the queues and return true. - - @return: false if the user clicked cancel. (the wait box must be - displayed by the caller if desired) - - -ida_auto.auto_wait_range(): - - auto_wait_range(ea1, ea2) -> ssize_t - - - Process everything in the specified range and return true. - - @param ea1 (C++: ea_t) - @param ea2 (C++: ea_t) - @return: number of autoanalysis steps made. -1 if the user clicked - cancel. (the wait box must be displayed by the caller if - desired) - - -ida_auto.enable_auto(): - - enable_auto(enable) -> bool - - - Temporarily enable/disable autoanalyzer. Not user-facing, but rather - because IDA sometimes need to turn AA on/off regardless of - inf.s_genflags:INFFL_AUTO - - @param enable (C++: bool) - @return: old state - - -ida_auto.get_auto_display(): - - get_auto_display(auto_display) - - - Get structure which holds the autoanalysis indicator contents. - - - @param auto_display (C++: auto_display_t *) - - -ida_auto.get_auto_state(): - - get_auto_state() -> atype_t - - - Get current state of autoanalyzer. If auto_state == 'AU_NONE' , IDA is - currently not running the analysis (it could be temporarily - interrupted to perform the user's requests, for example). - - -ida_auto.is_auto_enabled(): - - is_auto_enabled() -> bool - - - Get autoanalyzer state. - - -ida_auto.may_create_stkvars(): - - may_create_stkvars() -> bool - - - Is it allowed to create stack variables automatically?. This function - should be used by IDP modules before creating stack vars. - - -ida_auto.may_trace_sp(): - - may_trace_sp() -> bool - - - Is it allowed to trace stack pointer automatically?. This function - should be used by IDP modules before tracing sp. - - -ida_auto.peek_auto_queue(): - - peek_auto_queue(low_ea, type) -> ea_t - - - Peek into a queue 'type' for an address not lower than 'low_ea'. Do - not remove address from the queue. - - @param low_ea (C++: ea_t) - @param type (C++: atype_t) - @return: the address or BADADDR - - -ida_auto.plan_and_wait(): - - plan_and_wait(ea1, ea2, final_pass=True) -> int - - - Analyze the specified range. Try to create instructions where - possible. Make the final pass over the specified range if specified. - This function doesn't return until the range is analyzed. - - @param ea1 (C++: ea_t) - @param ea2 (C++: ea_t) - @param final_pass (C++: bool) - - -ida_auto.plan_ea(): - - plan_ea(ea) - - - Plan to perform reanalysis. - - - @param ea (C++: ea_t) - - -ida_auto.plan_range(): - - plan_range(sEA, eEA) - - - Plan to perform reanalysis. - - - @param sEA (C++: ea_t) - @param eEA (C++: ea_t) - - -ida_auto.reanalyze_callers(): - - reanalyze_callers(ea, noret) - - - Plan to reanalyze callers of the specified address. This function will - add to 'AU_USED' queue all instructions that call (not jump to) the - specified address. - - @param ea: linear address of callee (C++: ea_t) - @param noret: !=0: the callee doesn't return, mark to undefine - subsequent instructions in the caller. 0: do nothing. - (C++: bool) - - -ida_auto.revert_ida_decisions(): - - revert_ida_decisions(ea1, ea2) - - - Delete all analysis info that IDA generated for for the given range. - - - @param ea1 (C++: ea_t) - @param ea2 (C++: ea_t) - - -ida_auto.set_auto_state(): - - set_auto_state(new_state) -> atype_t - - - Set current state of autoanalyzer. - - @param new_state: new state of autoanalyzer (C++: atype_t) - @return: previous state - - -ida_auto.set_ida_state(): - - set_ida_state(st) -> idastate_t - - - Change IDA status indicator value - - @param st: - new indicator status (C++: idastate_t) - @return: old indicator status - - -ida_auto.show_addr(): - - show_addr(ea) - - - Show an address on the autoanalysis indicator. The address is - displayed in the form " @:12345678". - - @param ea: - linear address to display (C++: ea_t) - - -ida_auto.show_auto(): - - show_auto(ea, type=AU_NONE) - - - Change autoanalysis indicator value. - - @param ea: linear address being analyzed (C++: ea_t) - @param type: autoanalysis type (see Autoanalysis queues ) (C++: - atype_t) - - -ida_bytes.add_byte(): - - add_byte(ea, value) - - - Add a value to one byte of the program. This function works for wide - byte processors too. - - @param ea: linear address (C++: ea_t) - @param value: byte value (C++: uint32) - - -ida_bytes.add_dword(): - - add_dword(ea, value) - - - Add a value to one dword of the program. This function works for wide - byte processors too. This function takes into account order of bytes - specified in \inf{is_be()}this function works incorrectly if - \ph{nbits} > 16 - - @param ea: linear address (C++: ea_t) - @param value: byte value (C++: uint64) - - -ida_bytes.add_hidden_range(): - - add_hidden_range(ea1, ea2, description, header, footer, color) -> bool - - - Mark a range of addresses as hidden. The range will be created in the - invisible state with the default color - - @param ea1: linear address of start of the address range (C++: ea_t) - @param ea2: linear address of end of the address range (C++: ea_t) - @param description: range parameters (C++: const char *) - @param header: range parameters (C++: const char *) - @param footer: range parameters (C++: const char *) - @param color (C++: bgcolor_t) - @return: success - - -ida_bytes.add_mapping(): - - add_mapping(_from, to, size) -> bool - - - IDA supports memory mapping. References to the addresses from the - mapped range use data and meta-data from the mapping range.You should - set flag PR2_MAPPING in ph.flag2 to use memory mapping Add memory - mapping range. - - @param _from: start of the mapped range (nonexistent address) (C++: - ea_t) - @param to: start of the mapping range (existent address) (C++: ea_t) - @param size: size of the range (C++: asize_t) - @return: success - - -ida_bytes.add_qword(): - - add_qword(ea, value) - - - Add a value to one qword of the program. This function does not work - for wide byte processors. This function takes into account order of - bytes specified in \inf{is_be()} - - @param ea: linear address (C++: ea_t) - @param value: byte value (C++: uint64) - - -ida_bytes.add_word(): - - add_word(ea, value) - - - Add a value to one word of the program. This function works for wide - byte processors too. This function takes into account order of bytes - specified in \inf{is_be()} - - @param ea: linear address (C++: ea_t) - @param value: byte value (C++: uint64) - - -ida_bytes.align_flag(): - - align_flag() -> flags_t - - - Get a flags_t representing an alignment directive. - - -ida_bytes.append_cmt(): - - append_cmt(ea, str, rptble) -> bool - - - Append to an indented comment. Creates a new comment if none exists. - Appends a newline character and the specified string otherwise. - - @param ea: linear address (C++: ea_t) - @param str: comment string to append (C++: const char *) - @param rptble: append to repeatable comment? (C++: bool) - @return: success - - -ida_bytes.attach_custom_data_format(): - - attach_custom_data_format(dtid, dfid) -> bool - - - Attach the data format to the data type. - - @param dtid: data type id that can use the data format. 0 means all - standard data types. Such data formats can be applied to - any data item or instruction operands. For instruction - operands, the data_format_t::value_size check is not - performed by the kernel. (C++: int) - @param dfid: data format id (C++: int) - - -ida_bytes.bin_flag(): - - bin_flag() -> flags_t - - - Get number flag of the base, regardless of current processor - better - to use 'num_flag()' - - -ida_bytes.bin_search(): - - bin_search(start_ea, end_ea, image, mask, step, flags) -> ea_t - - -ida_bytes.byte_flag(): - - byte_flag() -> flags_t - - - Get a flags_t representing a byte. - - -ida_bytes.bytesize(): - - bytesize(ea) -> int - - - Get number of bytes required to store a byte at the given address. - - - @param ea (C++: ea_t) - - -ida_bytes.calc_def_align(): - - calc_def_align(ea, mina, maxa) -> int - - - Calculate default alignment. - - - @param ea (C++: ea_t) - @param mina (C++: int) - @param maxa (C++: int) - - -ida_bytes.calc_dflags(): - - calc_dflags(f, force) -> flags_t - - -ida_bytes.calc_max_align(): - - calc_max_align(endea) -> int - - - Returns: 0..32. - - - @param endea (C++: ea_t) - - -ida_bytes.calc_max_item_end(): - - calc_max_item_end(ea, how=15) -> ea_t - - - Calculate maximal reasonable end address of a new item. This function - will limit the item with the current segment bounds. - - @param ea: linear address (C++: ea_t) - @param how: when to stop the search. A combination of Item end search - flags (C++: int) - @return: end of new item. If it is not possible to create an item, it - will return 'ea'. - - -ida_bytes.calc_min_align(): - - calc_min_align(length) -> int - - - Returns: 1..32. - - - @param length (C++: asize_t) - - -ida_bytes.can_define_item(): - - can_define_item(ea, length, flags) -> bool - - - Can define item (instruction/data) of the specified 'length', starting - at 'ea'?if there is an item starting at 'ea', this function ignores - itthis function converts to unexplored all encountered data items with - fixup information. Should be fixed in the future.a new item would - cross segment boundariesa new item would overlap with existing items - (except items specified by 'flags') - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param flags: if not 0, then the kernel will ignore the data types - specified by the flags and destroy them. For example: - 1000 dw 5 1002 db 5 ; undef - 1003 db 5 ; undef 1004 dw 5 - 1006 dd 5 can_define_item(1000, 6, 0) - - false because of dw at 1004 can_define_item(1000, - 6, word_flag()) - true, word at 1004 is destroyed (C++: - flags_t) - @return: 1-yes, 0-no - - -ida_bytes.change_storage_type(): - - change_storage_type(start_ea, end_ea, stt) -> error_t - - - Change flag storage type for address range. - - @param start_ea: should be lower than end_ea. (C++: ea_t) - @param end_ea: does not belong to the range. (C++: ea_t) - @param stt: storage_type_t (C++: storage_type_t) - @return: error code - - -ida_bytes.char_flag(): - - char_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.chunk_size(): - - chunk_size(ea) -> asize_t - - - Get size of the contiguous address block containing 'ea'. - - @param ea (C++: ea_t) - @return: 0 if 'ea' doesn't belong to the program. - - -ida_bytes.chunk_start(): - - chunk_start(ea) -> ea_t - - - Get start of the contiguous address block containing 'ea'. - - @param ea (C++: ea_t) - @return: BADADDR if 'ea' doesn't belong to the program. - - -ida_bytes.clr_lzero(): - - clr_lzero(ea, n) -> bool - - - Clear lzero bit. - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.clr_op_type(): - - clr_op_type(ea, n) -> bool - - - Remove operand representation information. (set operand representation - to be 'undefined') - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: success - - -ida_bytes.code_flag(): - - code_flag() -> flags_t - - - 'FF_CODE' - - -ida_bytes.create_16bit_data(): - - create_16bit_data(ea, length) -> bool - - - Convert to 16-bit quantity (take byte size into account) - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - - -ida_bytes.create_32bit_data(): - - create_32bit_data(ea, length) -> bool - - - Convert to 32-bit quantity (take byte size into account) - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - - -ida_bytes.create_align(): - - create_align(ea, length, alignment) -> bool - - - Alignment: 0 or 2..32. If it is 0, is will be calculated. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param alignment (C++: int) - - -ida_bytes.create_byte(): - - create_byte(ea, length, force=False) -> bool - - - Convert to byte. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_custdata(): - - create_custdata(ea, length, dtid, fid, force=False) -> bool - - - Convert to custom data type. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param dtid (C++: int) - @param fid (C++: int) - @param force (C++: bool) - - -ida_bytes.create_data(): - - create_data(ea, dataflag, size, tid) -> bool - - - Convert to data (byte, word, dword, etc). This function may be used to - create arrays. - - @param ea: linear address (C++: ea_t) - @param dataflag: type of data. Value of function byte_flag() , - word_flag() , etc. (C++: flags_t) - @param size: size of array in bytes. should be divisible by the size - of one item of the specified type. for variable sized - items it can be specified as 0, and the kernel will try - to calculate the size. (C++: asize_t) - @param tid: type id. If the specified type is a structure, then tid is - structure id. Otherwise should be BADNODE . (C++: tid_t) - @return: success - - -ida_bytes.create_double(): - - create_double(ea, length, force=False) -> bool - - - Convert to double. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_dword(): - - create_dword(ea, length, force=False) -> bool - - - Convert to dword. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_float(): - - create_float(ea, length, force=False) -> bool - - - Convert to float. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_oword(): - - create_oword(ea, length, force=False) -> bool - - - Convert to octaword/xmm word. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_packed_real(): - - create_packed_real(ea, length, force=False) -> bool - - - Convert to packed decimal real. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_qword(): - - create_qword(ea, length, force=False) -> bool - - - Convert to quadword. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_strlit(): - - create_strlit(start, len, strtype) -> bool - - - Convert to string literal and give a meaningful name. 'start' may be - higher than 'end', the kernel will swap them in this case - - @param start: starting address (C++: ea_t) - @param len: length of the string in bytes. if 0, then - get_max_strlit_length() will be used to determine the - length (C++: size_t) - @param strtype: string type. one of String type codes (C++: int32) - @return: success - - -ida_bytes.create_struct(): - - create_struct(ea, length, tid, force=False) -> bool - - - Convert to struct. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param tid (C++: tid_t) - @param force (C++: bool) - - -ida_bytes.create_tbyte(): - - create_tbyte(ea, length, force=False) -> bool - - - Convert to tbyte. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_word(): - - create_word(ea, length, force=False) -> bool - - - Convert to word. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_yword(): - - create_yword(ea, length, force=False) -> bool - - - Convert to ymm word. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.create_zword(): - - create_zword(ea, length, force=False) -> bool - - - Convert to zmm word. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param force (C++: bool) - - -ida_bytes.cust_flag(): - - cust_flag() -> flags_t - - - Get a flags_t representing custom type data. - - -ida_bytes.custfmt_flag(): - - custfmt_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -class ida_bytes.data_format_t(): - - Proxy of C++ data_format_t class - - -ida_bytes.data_format_t.hotkey: - data_format_t_hotkey_get(self) -> char const * - -ida_bytes.data_format_t.id: - - __get_id(self) -> int - - -ida_bytes.data_format_t.is_present_in_menus(): - - is_present_in_menus(self) -> bool - - -ida_bytes.data_format_t.menu_name: - data_format_t_menu_name_get(self) -> char const * - -ida_bytes.data_format_t.name: - data_format_t_name_get(self) -> char const * - -ida_bytes.data_format_t.props: - data_format_t_props_get(self) -> int - -ida_bytes.data_format_t.text_width: - data_format_t_text_width_get(self) -> int32 - -ida_bytes.data_format_t.value_size: - data_format_t_value_size_get(self) -> asize_t - -class ida_bytes.data_type_t(): - - Proxy of C++ data_type_t class - - -ida_bytes.data_type_t.asm_keyword: - data_type_t_asm_keyword_get(self) -> char const * - -ida_bytes.data_type_t.hotkey: - data_type_t_hotkey_get(self) -> char const * - -ida_bytes.data_type_t.id: - - __get_id(self) -> int - - -ida_bytes.data_type_t.is_present_in_menus(): - - is_present_in_menus(self) -> bool - - -ida_bytes.data_type_t.menu_name: - data_type_t_menu_name_get(self) -> char const * - -ida_bytes.data_type_t.name: - data_type_t_name_get(self) -> char const * - -ida_bytes.data_type_t.props: - data_type_t_props_get(self) -> int - -ida_bytes.data_type_t.value_size: - data_type_t_value_size_get(self) -> asize_t - -ida_bytes.dec_flag(): - - dec_flag() -> flags_t - - - Get number flag of the base, regardless of current processor - better - to use 'num_flag()' - - -ida_bytes.del_hidden_range(): - - del_hidden_range(ea) -> bool - - - Delete hidden range. - - @param ea: any address in the hidden range (C++: ea_t) - @return: success - - -ida_bytes.del_items(): - - del_items(ea, flags=0, nbytes=1, may_destroy=None) -> bool - - - Convert item (instruction/data) to unexplored bytes. The whole item - (including the head and tail bytes) will be destroyed. It is allowed - to pass any address in the item to this function - - @param ea: any address within the first item to delete (C++: ea_t) - @param flags: combination of Unexplored byte conversion flags (C++: - int) - @param nbytes: number of bytes in the range to be undefined (C++: - asize_t) - @param may_destroy: optional routine invoked before deleting a head - item. If callback returns false then item has not - to be deleted and operation fails (C++: - may_destroy_cb_t *) - @return: true on sucessful operation, otherwise false - - -ida_bytes.del_mapping(): - - del_mapping(ea) - - - Delete memory mapping range. - - @param ea: any address in the mapped range (C++: ea_t) - - -ida_bytes.del_value(): - - del_value(ea) - - - Delete byte value from flags. The corresponding byte becomes - uninitialized. - - @param ea (C++: ea_t) - - -ida_bytes.detach_custom_data_format(): - - detach_custom_data_format(dtid, dfid) -> bool - - - Detach the data format from the data type. Unregistering a custom data - type detaches all attached data formats, no need to detach them - explicitly. You still need unregister them. Unregistering a custom - data format detaches it from all attached data types. - - @param dtid: data type id to detach data format from (C++: int) - @param dfid: data format id to detach (C++: int) - - -ida_bytes.disable_flags(): - - disable_flags(start_ea, end_ea) -> error_t - - - Deallocate flags for address range. Exit with an error message if not - enough disk space (this may occur too). - - @param start_ea: should be lower than end_ea. (C++: ea_t) - @param end_ea: does not belong to the range. (C++: ea_t) - @return: 0 if ok, otherwise return error code - - -ida_bytes.double_flag(): - - double_flag() -> flags_t - - - Get a flags_t representing a double. - - -ida_bytes.dword_flag(): - - dword_flag() -> flags_t - - - Get a flags_t representing a double word. - - -ida_bytes.enable_flags(): - - enable_flags(start_ea, end_ea, stt) -> error_t - - - Allocate flags for address range. This function does not change the - storage type of existing ranges. Exit with an error message if not - enough disk space. - - @param start_ea: should be lower than end_ea. (C++: ea_t) - @param end_ea: does not belong to the range. (C++: ea_t) - @param stt: storage_type_t (C++: storage_type_t) - @return: 0 if ok, otherwise an error code - - -ida_bytes.enum_flag(): - - enum_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.equal_bytes(): - - equal_bytes(ea, image, mask, len, sense_case) -> bool - - - Compare 'len' bytes of the program starting from 'ea' with 'image'. - - @param ea: linear address (C++: ea_t) - @param image: bytes to compare with (C++: const uchar *) - @param mask: array of 1/0 bytes, it's length is 'len'. 1 means to - perform the comparison of the corresponding byte. 0 means - not to perform. if mask == NULL, then all bytes of - 'image' will be compared. if mask == SKIP_FF_MASK then - 0xFF bytes will be skipped (C++: const uchar *) - @param len: length of block to compare in bytes. (C++: size_t) - @param sense_case: case-sensitive comparison? (C++: bool) - - -ida_bytes.f_has_cmt(): - - f_has_cmt(f, arg2) -> bool - - -ida_bytes.f_has_dummy_name(): - - f_has_dummy_name(f, arg2) -> bool - - - Does the current byte have dummy (auto-generated, with special prefix) - name? - - - @param f (C++: flags_t) - - -ida_bytes.f_has_extra_cmts(): - - f_has_extra_cmts(f, arg2) -> bool - - -ida_bytes.f_has_name(): - - f_has_name(f, arg2) -> bool - - - Does the current byte have non-trivial (non-dummy) name? - - - @param f (C++: flags_t) - - -ida_bytes.f_has_user_name(): - - f_has_user_name(F, arg2) -> bool - - - Does the current byte have user-specified name? - - - @param F (C++: flags_t) - - -ida_bytes.f_has_xref(): - - f_has_xref(f, arg2) -> bool - - - Does the current byte have cross-references to it? - - - @param f (C++: flags_t) - - -ida_bytes.f_is_align(): - - f_is_align(F, arg2) -> bool - - - See 'is_align()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_byte(): - - f_is_byte(F, arg2) -> bool - - - See 'is_byte()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_code(): - - f_is_code(F, arg2) -> bool - - - Does flag denote start of an instruction? - - - @param F (C++: flags_t) - - -ida_bytes.f_is_custom(): - - f_is_custom(F, arg2) -> bool - - - See 'is_custom()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_data(): - - f_is_data(F, arg2) -> bool - - - Does flag denote start of data? - - - @param F (C++: flags_t) - - -ida_bytes.f_is_double(): - - f_is_double(F, arg2) -> bool - - - See 'is_double()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_dword(): - - f_is_dword(F, arg2) -> bool - - - See 'is_dword()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_float(): - - f_is_float(F, arg2) -> bool - - - See 'is_float()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_head(): - - f_is_head(F, arg2) -> bool - - - Does flag denote start of instruction OR data? - - - @param F (C++: flags_t) - - -ida_bytes.f_is_not_tail(): - - f_is_not_tail(F, arg2) -> bool - - - Does flag denote tail byte? - - - @param F (C++: flags_t) - - -ida_bytes.f_is_oword(): - - f_is_oword(F, arg2) -> bool - - - See 'is_oword()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_pack_real(): - - f_is_pack_real(F, arg2) -> bool - - - See 'is_pack_real()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_qword(): - - f_is_qword(F, arg2) -> bool - - - See 'is_qword()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_strlit(): - - f_is_strlit(F, arg2) -> bool - - - See 'is_strlit()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_struct(): - - f_is_struct(F, arg2) -> bool - - - See 'is_struct()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_tail(): - - f_is_tail(F, arg2) -> bool - - - Does flag denote tail byte? - - - @param F (C++: flags_t) - - -ida_bytes.f_is_tbyte(): - - f_is_tbyte(F, arg2) -> bool - - - See 'is_tbyte()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_word(): - - f_is_word(F, arg2) -> bool - - - See 'is_word()' - - - @param F (C++: flags_t) - - -ida_bytes.f_is_yword(): - - f_is_yword(F, arg2) -> bool - - - See 'is_yword()' - - - @param F (C++: flags_t) - - -ida_bytes.find_byte(): - - find_byte(sEA, size, value, bin_search_flags) -> ea_t - - - Find forward a byte with the specified value (only 8-bit value from - the database). example: ea=4 size=3 will inspect addresses 4, 5, and 6 - - @param sEA: linear address (C++: ea_t) - @param size: number of bytes to inspect (C++: asize_t) - @param value: value to find (C++: uchar) - @param bin_search_flags: combination of Search flags (C++: int) - @return: address of byte or BADADDR - - -ida_bytes.find_byter(): - - find_byter(sEA, size, value, bin_search_flags) -> ea_t - - - Find reverse a byte with the specified value (only 8-bit value from - the database). example: ea=4 size=3 will inspect addresses 6, 5, and 4 - - @param sEA: the lower address of the search range (C++: ea_t) - @param size: number of bytes to inspect (C++: asize_t) - @param value: value to find (C++: uchar) - @param bin_search_flags: combination of Search flags (C++: int) - @return: address of byte or BADADDR - - -ida_bytes.find_custom_data_format(): - - find_custom_data_format(name) -> int - - - Get id of a custom data format. - - @param name: name of the custom data format (C++: const char *) - @return: id or -1 - - -ida_bytes.find_custom_data_type(): - - find_custom_data_type(name) -> int - - - Get id of a custom data type. - - @param name: name of the custom data type (C++: const char *) - @return: id or -1 - - -ida_bytes.float_flag(): - - float_flag() -> flags_t - - - Get a flags_t representing a float. - - -ida_bytes.flt_flag(): - - flt_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.free_chunk(): - - free_chunk(bottom, size, step) -> ea_t - - - Search for a hole in the addressing space of the program. - - @param bottom: address to start searching (C++: ea_t) - @param size: size of desired block (C++: asize_t) - @param step: bit mask for the start of hole (0xF would align hole to a - paragraph). if 'step' is negative, the bottom address - with be aligned. otherwise the kernel will try to use it - as is and align it only when the hole is too small. (C++: - int32) - @return: start of the hole or BADADDR - - -ida_bytes.get_16bit(): - - get_16bit(ea) -> uint32 - - - Get 16bits of the program at 'ea'. - - @param ea (C++: ea_t) - @return: 1 byte (getFullByte()) if the current processor has 16-bit - byte, otherwise return get_word() - - -ida_bytes.get_32bit(): - - get_32bit(ea) -> uint32 - - - Get not more than 32bits of the program at 'ea'. - - @param ea (C++: ea_t) - @return: 32 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) - return get_dword(ea); if ( nbits <= 16) return - get_wide_word(ea); return get_wide_byte(ea); - - -ida_bytes.get_64bit(): - - get_64bit(ea) -> uint64 - - - Get not more than 64bits of the program at 'ea'. - - @param ea (C++: ea_t) - @return: 64 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) - return get_qword(ea); if ( nbits <= 16) return - get_wide_dword(ea); return get_wide_byte(ea); - - -ida_bytes.get_8bit(): - - get_8bit(ea, v, nbit) -> PyObject * - - -ida_bytes.get_byte(): - - get_byte(ea) -> uchar - - - Get one byte (8-bit) of the program at 'ea'. This function works only - for 8bit byte processors. - - @param ea (C++: ea_t) - - -ida_bytes.get_bytes(): - - get_bytes(ea, size, gmb_flags=0x01) -> PyObject * - - - Get the specified number of bytes of the program. - @param ea: program address - @param size: number of bytes to return - @return: the bytes (as a str), or None in case of failure - - -ida_bytes.get_bytes_and_mask(): - - get_bytes_and_mask(ea, size, gmb_flags=0x01) -> PyObject * - - - Get the specified number of bytes of the program, and a bitmask - specifying what bytes are defined and what bytes are not. - @param ea: program address - @param size: number of bytes to return - @return: a tuple (bytes, mask), or None in case of failure. - Both 'bytes' and 'mask' are 'str' instances. - - -ida_bytes.get_cmt(): - - get_cmt(ea, rptble) -> ssize_t - - - Get an indented comment. - - @param ea: linear address. may point to tail byte, the function will - find start of the item (C++: ea_t) - @param rptble: get repeatable comment? (C++: bool) - @return: size of comment or -1 - - -ida_bytes.get_custom_data_format(): - - get_custom_data_format(dfid) -> data_format_t - - - Get definition of a registered custom data format. - - @param dfid: data format id (C++: int) - @return: data format definition or NULL - - -ida_bytes.get_custom_data_formats(): - - get_custom_data_formats(out, dtid) -> int - - - Get list of attached custom data formats for the specified data type. - - @param out: buffer for the output. may be NULL (C++: intvec_t *) - @param dtid: data type id (C++: int) - @return: number of returned custom data formats. if error, returns -1 - - -ida_bytes.get_custom_data_type(): - - get_custom_data_type(dtid) -> data_type_t - - - Get definition of a registered custom data type. - - @param dtid: data type id (C++: int) - @return: data type definition or NULL - - -ida_bytes.get_custom_data_types(): - - get_custom_data_types(out, min_size=0, max_size=BADADDR) -> int - - - Get list of registered custom data type ids. - - @param out: buffer for the output. may be NULL (C++: intvec_t *) - @param min_size: minimum value size (C++: asize_t) - @param max_size: maximum value size (C++: asize_t) - @return: number of custom data types with the specified size limits - - -ida_bytes.get_data_elsize(): - - get_data_elsize(ea, F, ti=None) -> asize_t - - - Get size of data type specified in flags 'F'. - - @param ea: linear address of the item (C++: ea_t) - @param F: flags (C++: flags_t) - @param ti: additional information about the data type. For example, if - the current item is a structure instance, then ti->tid is - structure id. Otherwise is ignored (may be NULL). If - specified as NULL, will be automatically retrieved from the - database (C++: const opinfo_t *) - @return: byte : 1 word : 2 etc... - - -ida_bytes.get_data_value(): - - get_data_value(v, ea, size) -> bool - - - Get the value at of the item at 'ea'. This function works with - entities up to sizeof(ea_t) (bytes, word, etc) - - @param v: pointer to the result. may be NULL (C++: uval_t *) - @param ea: linear address (C++: ea_t) - @param size: size of data to read. If 0, then the item type at 'ea' - will be used (C++: asize_t) - @return: success - - -ida_bytes.get_db_byte(): - - get_db_byte(ea) -> uchar - - - Get one byte (8-bit) of the program at 'ea' from the database. Works - even if the debugger is active. See also 'get_dbg_byte()' to read the - process memory directly. This function works only for 8bit byte - processors. - - @param ea (C++: ea_t) - - -ida_bytes.get_default_radix(): - - get_default_radix() -> int - - - Get default base of number for the current processor. - - @return: 2, 8, 10, 16 - - -ida_bytes.get_dword(): - - get_dword(ea) -> uint32 - - - Get one dword (32-bit) of the program at 'ea'. This function takes - into account order of bytes specified in \inf{is_be()} This function - works only for 8bit byte processors. - - @param ea (C++: ea_t) - - -ida_bytes.get_enum_id(): - - get_enum_id(ea, n) -> enum_t - - - Get enum id of 'enum' operand. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: id of enum or BADNODE - - -ida_bytes.get_first_hidden_range(): - - get_first_hidden_range() -> hidden_range_t - - - Get pointer to the first hidden range. - - @return: ptr to hidden range or NULL - - -ida_bytes.get_flags(): - - get_flags(ea) -> flags_t - - - get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote - debugging because the kernel needs to read the process memory. - - @param ea (C++: ea_t) - - -ida_bytes.get_flags_by_size(): - - get_flags_by_size(size) -> flags_t - - - Get flags from size (in bytes). Supported sizes: 1, 2, 4, 8, 16, 32. - For other sizes returns 0 - - @param size (C++: size_t) - - -ida_bytes.get_flags_ex(): - - get_flags_ex(ea, how) -> flags_t - - - Get flags for the specified address, extended form. - - - @param ea (C++: ea_t) - @param how (C++: int) - - -ida_bytes.get_forced_operand(): - - get_forced_operand(ea, n) -> ssize_t - - - Get forced operand. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, 2) (C++: int) - @return: size of forced operand or -1 - - -ida_bytes.get_full_data_elsize(): - - get_full_data_elsize(ea, F, ti=None) -> asize_t - - - Get full size of data type specified in flags 'F'. takes into account - processors with wide bytes e.g. returns 2 for a byte element with - 16-bit bytes - - @param ea (C++: ea_t) - @param F (C++: flags_t) - @param ti (C++: const opinfo_t *) - - -ida_bytes.get_full_flags(): - - get_full_flags(ea) -> flags_t - - - Get flags value for address 'ea'. - - @param ea (C++: ea_t) - @return: 0 if address is not present in the program - - -ida_bytes.get_hidden_range(): - - get_hidden_range(ea) -> hidden_range_t - - - Get pointer to hidden range structure, in: linear address. - - @param ea: any address in the hidden range (C++: ea_t) - - -ida_bytes.get_hidden_range_num(): - - get_hidden_range_num(ea) -> int - - - Get number of a hidden range. - - @param ea: any address in the hidden range (C++: ea_t) - @return: number of hidden range (0.. get_hidden_range_qty() -1) - - -ida_bytes.get_hidden_range_qty(): - - get_hidden_range_qty() -> int - - - Get number of hidden ranges. - - -ida_bytes.get_item_end(): - - get_item_end(ea) -> ea_t - - - Get the end address of the item at 'ea'. The returned address doesn't - belong to the current item. Unexplored bytes are counted as 1 byte - entities. - - @param ea (C++: ea_t) - - -ida_bytes.get_item_flag(): - - get_item_flag(_from, n, ea, appzero) -> flags_t - - - Get flag of the item at 'ea' even if it is a tail byte of some array - or structure. This function is used to get flags of structure members - or array elements. - - @param _from: linear address of the instruction which refers to 'ea' - (C++: ea_t) - @param n: number of operand which refers to 'ea' (C++: int) - @param ea: the referenced address (C++: ea_t) - @param appzero: append a struct field name if the field offset is - zero? meaningful only if the name refers to a - structure. (C++: bool) - @return: flags or 0 (if failed) - - -ida_bytes.get_item_head(): - - get_item_head(ea) -> ea_t - - - Get the start address of the item at 'ea'. If there is no current - item, then 'ea' will be returned (see definition at the end of - 'bytes.hpp' source) - - @param ea (C++: ea_t) - - -ida_bytes.get_item_size(): - - 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. - - @param ea (C++: ea_t) - - -ida_bytes.get_last_hidden_range(): - - get_last_hidden_range() -> hidden_range_t - - - Get pointer to the last hidden range. - - @return: ptr to hidden range or NULL - - -ida_bytes.get_manual_insn(): - - get_manual_insn(ea) -> ssize_t - - - Retrieve the user-specified string for the manual instruction. - - @param ea: linear address of the instruction or data item (C++: ea_t) - @return: size of manual instruction or -1 - - -ida_bytes.get_mapping(): - - get_mapping(n) -> bool - - - Get memory mapping range by its number. - - @param n: number of mapping range (0.. get_mappings_qty() -1) (C++: - size_t) - @return: false if the specified range doesn't exist, otherwise returns - from , to , size - - -ida_bytes.get_mappings_qty(): - - get_mappings_qty() -> size_t - - - Get number of mappings. - - -ida_bytes.get_max_strlit_length(): - - get_max_strlit_length(ea, strtype, options=0) -> size_t - - - Determine maximum length of string literal. - - @param ea: starting address (C++: ea_t) - @param strtype: string type. one of String type codes (C++: int32) - @param options: combination of string literal length options (C++: - int) - @return: length of the string in octets (octet==8bit) - - -ida_bytes.get_next_hidden_range(): - - get_next_hidden_range(ea) -> hidden_range_t - - - Get pointer to next hidden range. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to hidden range or NULL if next hidden range doesn't - exist - - -ida_bytes.get_octet(): - - get_octet(ea, v, nbit) -> PyObject * - - - Get 8 bits of the program at 'ea'. The main usage of this function is - to iterate range of bytes. Here is an example: - - uint64 v; - int nbit = 0; - for ( ... ) { - uchar byte = get_octet(&ea, &v, &nbit); - ... - } - - 'ea' is incremented each time when a new byte is read. In the above - example, it will be incremented in the first loop iteration. - - @param ea (C++: ea_t *) - @param v (C++: uint64 *) - @param nbit (C++: int *) - - -ida_bytes.get_opinfo(): - - get_opinfo(buf, ea, n, flags) -> opinfo_t - - - Get additional information about an operand representation. - - @param buf: buffer to receive the result. may not be NULL (C++: - opinfo_t *) - @param ea: linear address of item (C++: ea_t) - @param n: number of operand, 0 or 1 (C++: int) - @param flags: flags of the item (C++: flags_t) - @return: NULL if no additional representation information - - -ida_bytes.get_optype_flags0(): - - get_optype_flags0(F) -> flags_t - - - Get flags for first operand. - - - @param F (C++: flags_t) - - -ida_bytes.get_optype_flags1(): - - get_optype_flags1(F) -> flags_t - - - Get flags for second operand. - - - @param F (C++: flags_t) - - -ida_bytes.get_original_byte(): - - get_original_byte(ea) -> uint64 - - - Get original byte value (that was before patching). This function - works for wide byte processors too. - - @param ea (C++: ea_t) - - -ida_bytes.get_original_dword(): - - get_original_dword(ea) -> uint64 - - - Get original dword (that was before patching) This function works for - wide byte processors too. This function takes into account order of - bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - - -ida_bytes.get_original_qword(): - - get_original_qword(ea) -> uint64 - - - Get original qword value (that was before patching) This function - DOESN'T work for wide byte processors too. This function takes into - account order of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - - -ida_bytes.get_original_word(): - - get_original_word(ea) -> uint64 - - - Get original word value (that was before patching). This function - works for wide byte processors too. This function takes into account - order of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - - -ida_bytes.get_predef_insn_cmt(): - - get_predef_insn_cmt(ins) -> ssize_t - - - Get predefined comment. - - @param ins: current instruction information (C++: const insn_t &) - @return: size of comment or -1 - - -ida_bytes.get_prev_hidden_range(): - - get_prev_hidden_range(ea) -> hidden_range_t - - - Get pointer to previous hidden range. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to hidden range or NULL if previous hidden range doesn't - exist - - -ida_bytes.get_qword(): - - get_qword(ea) -> uint64 - - - Get one qword (64-bit) of the program at 'ea'. This function takes - into account order of bytes specified in \inf{is_be()} This function - works only for 8bit byte processors. - - @param ea (C++: ea_t) - - -ida_bytes.get_radix(): - - get_radix(F, n) -> int - - - Get radix of the operand, in: flags. If the operand is not a number, - returns 'get_default_radix()' - - @param F: flags (C++: flags_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: 2, 8, 10, 16 - - -ida_bytes.get_strlit_contents(): - - get_strlit_contents(ea, py_len, type, flags=0) -> PyObject * - - - Get bytes contents at location, possibly converted. - It works even if the string has not been created in the database yet. - - Note that this will always return a simple string of bytes - (i.e., a 'str' instance), and not a string of unicode characters. - - If you want auto-conversion to unicode strings (that is: real strings), - you should probably be using the idautils.Strings class. - - @param ea: linear address of the string - @param len: length of the string in bytes (including terminating 0) - @param type: type of the string. Represents both the character encoding, - and the 'type' of string at the given location. - @param flags: combination of STRCONV_..., to perform output conversion. - @return: a bytes-filled str object. - - -ida_bytes.get_stroff_path(): - - get_stroff_path(path, delta, ea, n) -> int - - - Get struct path of operand. - - @param path: buffer for structure path (strpath). see nalt.hpp for - more info. (C++: tid_t *) - @param delta: struct offset delta (C++: adiff_t *) - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: length of strpath - - -ida_bytes.get_wide_byte(): - - get_wide_byte(ea) -> uint64 - - - Get one wide byte of the program at 'ea'. Some processors may access - more than 8bit quantity at an address. These processors have 32-bit - byte organization from the IDA's point of view. - - @param ea (C++: ea_t) - - -ida_bytes.get_wide_dword(): - - get_wide_dword(ea) -> uint64 - - - Get two wide words (4 'bytes') of the program at 'ea'. Some processors - may access more than 8bit quantity at an address. These processors - have 32-bit byte organization from the IDA's point of view. This - function takes into account order of bytes specified in - \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 - - @param ea (C++: ea_t) - - -ida_bytes.get_wide_word(): - - get_wide_word(ea) -> uint64 - - - Get one wide word (2 'byte') of the program at 'ea'. Some processors - may access more than 8bit quantity at an address. These processors - have 32-bit byte organization from the IDA's point of view. This - function takes into account order of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - - -ida_bytes.get_word(): - - get_word(ea) -> ushort - - - Get one word (16-bit) of the program at 'ea'. This function takes into - account order of bytes specified in \inf{is_be()} This function works - only for 8bit byte processors. - - @param ea (C++: ea_t) - - -ida_bytes.get_zero_ranges(): - - get_zero_ranges(zranges, range) -> bool - - - Return set of ranges with zero initialized bytes. The returned set - includes only big zero initialized ranges (at least >1KB). Some zero - initialized byte ranges may be not included. Only zero bytes that use - the sparse storage method (STT_MM) are reported. - - @param zranges: pointer to the return value. cannot be NULL (C++: - rangeset_t *) - @param range: the range of addresses to verify. can be NULL - means - all ranges (C++: const range_t *) - @return: true if the result is a non-empty set - - -ida_bytes.getn_hidden_range(): - - getn_hidden_range(n) -> hidden_range_t - - - Get pointer to hidden range structure, in: number of hidden range. - - @param n: number of hidden range, is in range 0.. - get_hidden_range_qty() -1 (C++: int) - - -ida_bytes.has_any_name(): - - has_any_name(F) -> bool - - - Does the current byte have any name? - - - @param F (C++: flags_t) - - -ida_bytes.has_auto_name(): - - has_auto_name(F) -> bool - - - Does the current byte have auto-generated (no special prefix) name? - - - @param F (C++: flags_t) - - -ida_bytes.has_cmt(): - - has_cmt(F) -> bool - - - Does the current byte have an indented comment? - - - @param F (C++: flags_t) - - -ida_bytes.has_dummy_name(): - - has_dummy_name(F) -> bool - - - Does the current byte have dummy (auto-generated, with special prefix) - name? - - - @param F (C++: flags_t) - - -ida_bytes.has_extra_cmts(): - - has_extra_cmts(F) -> bool - - - Does the current byte have additional anterior or posterior lines? - - - @param F (C++: flags_t) - - -ida_bytes.has_immd(): - - has_immd(F) -> bool - - - Has immediate value? - - - @param F (C++: flags_t) - - -ida_bytes.has_name(): - - has_name(F) -> bool - - - Does the current byte have non-trivial (non-dummy) name? - - - @param F (C++: flags_t) - - -ida_bytes.has_user_name(): - - has_user_name(F) -> bool - - - Does the current byte have user-specified name? - - - @param F (C++: flags_t) - - -ida_bytes.has_value(): - - has_value(F) -> bool - - - Do flags contain byte value? - - - @param F (C++: flags_t) - - -ida_bytes.has_xref(): - - has_xref(F) -> bool - - - Does the current byte have cross-references to it? - - - @param F (C++: flags_t) - - -ida_bytes.hex_flag(): - - hex_flag() -> flags_t - - - Get number flag of the base, regardless of current processor - better - to use 'num_flag()' - - -class ida_bytes.hidden_range_t(): - - Proxy of C++ hidden_range_t class - - -ida_bytes.hidden_range_t._print(): - - _print(self) -> size_t - - -ida_bytes.hidden_range_t.clear(): - - clear(self) - - -ida_bytes.hidden_range_t.color: - hidden_range_t_color_get(self) -> bgcolor_t - -ida_bytes.hidden_range_t.compare(): - - compare(self, r) -> int - - -ida_bytes.hidden_range_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_bytes.hidden_range_t.description: - hidden_range_t_description_get(self) -> char * - -ida_bytes.hidden_range_t.empty(): - - empty(self) -> bool - - -ida_bytes.hidden_range_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_bytes.hidden_range_t.extend(): - - extend(self, ea) - - -ida_bytes.hidden_range_t.footer: - hidden_range_t_footer_get(self) -> char * - -ida_bytes.hidden_range_t.header: - hidden_range_t_header_get(self) -> char * - -ida_bytes.hidden_range_t.intersect(): - - intersect(self, r) - - -ida_bytes.hidden_range_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_bytes.hidden_range_t.size(): - - size(self) -> asize_t - - -ida_bytes.hidden_range_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_bytes.hidden_range_t.visible: - hidden_range_t_visible_get(self) -> bool - -ida_bytes.is_align(): - - is_align(F) -> bool - - - 'FF_ALIGN' - - - @param F (C++: flags_t) - - -ida_bytes.is_attached_custom_data_format(): - - is_attached_custom_data_format(dtid, dfid) -> bool - - -ida_bytes.is_bnot(): - - is_bnot(ea, F, n) -> bool - - - Should we negate the operand?. sh{a_bnot} should be defined in the - idp module in order to work with this function - - @param ea (C++: ea_t) - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_byte(): - - is_byte(F) -> bool - - - 'FF_BYTE' - - - @param F (C++: flags_t) - - -ida_bytes.is_char(): - - is_char(F, n) -> bool - - - is character constant? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_char0(): - - is_char0(F) -> bool - - - Is the first operand character constant? (example: push 'a') - - - @param F (C++: flags_t) - - -ida_bytes.is_char1(): - - is_char1(F) -> bool - - - Is the second operand character constant? (example: mov al, 'a') - - - @param F (C++: flags_t) - - -ida_bytes.is_code(): - - is_code(F) -> bool - - - Does flag denote start of an instruction? - - - @param F (C++: flags_t) - - -ida_bytes.is_custfmt(): - - is_custfmt(F, n) -> bool - - - is custom data format? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_custfmt0(): - - is_custfmt0(F) -> bool - - - Does the first operand use a custom data representation? - - - @param F (C++: flags_t) - - -ida_bytes.is_custfmt1(): - - is_custfmt1(F) -> bool - - - Does the second operand use a custom data representation? - - - @param F (C++: flags_t) - - -ida_bytes.is_custom(): - - is_custom(F) -> bool - - - 'FF_CUSTOM' - - - @param F (C++: flags_t) - - -ida_bytes.is_data(): - - is_data(F) -> bool - - - Does flag denote start of data? - - - @param F (C++: flags_t) - - -ida_bytes.is_defarg(): - - is_defarg(F, n) -> bool - - - is defined? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_defarg0(): - - is_defarg0(F) -> bool - - - Is the first operand defined? Initially operand has no defined - representation. - - - @param F (C++: flags_t) - - -ida_bytes.is_defarg1(): - - is_defarg1(F) -> bool - - - Is the second operand defined? Initially operand has no defined - representation. - - - @param F (C++: flags_t) - - -ida_bytes.is_double(): - - is_double(F) -> bool - - - 'FF_DOUBLE' - - - @param F (C++: flags_t) - - -ida_bytes.is_dword(): - - is_dword(F) -> bool - - - 'FF_DWORD' - - - @param F (C++: flags_t) - - -ida_bytes.is_enum(): - - is_enum(F, n) -> bool - - - is enum? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_enum0(): - - is_enum0(F) -> bool - - - Is the first operand a symbolic constant (enum member)? - - - @param F (C++: flags_t) - - -ida_bytes.is_enum1(): - - is_enum1(F) -> bool - - - Is the second operand a symbolic constant (enum member)? - - - @param F (C++: flags_t) - - -ida_bytes.is_float(): - - is_float(F) -> bool - - - 'FF_FLOAT' - - - @param F (C++: flags_t) - - -ida_bytes.is_float0(): - - is_float0(F) -> bool - - - Is the first operand a floating point number? - - - @param F (C++: flags_t) - - -ida_bytes.is_float1(): - - is_float1(F) -> bool - - - Is the second operand a floating point number? - - - @param F (C++: flags_t) - - -ida_bytes.is_flow(): - - is_flow(F) -> bool - - - Does the previous instruction exist and pass execution flow to the - current byte? - - - @param F (C++: flags_t) - - -ida_bytes.is_fltnum(): - - is_fltnum(F, n) -> bool - - - is floating point number? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_forced_operand(): - - is_forced_operand(ea, n) -> bool - - - Is operand manually defined?. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, 2) (C++: int) - - -ida_bytes.is_func(): - - is_func(F) -> bool - - - Is function start? - - - @param F (C++: flags_t) - - -ida_bytes.is_head(): - - is_head(F) -> bool - - - Does flag denote start of instruction OR data? - - - @param F (C++: flags_t) - - -ida_bytes.is_invsign(): - - is_invsign(ea, F, n) -> bool - - - Should sign of n-th operand inverted during output?. allowed values of - n: 0-first operand, 1-other operands - - @param ea (C++: ea_t) - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_loaded(): - - is_loaded(ea) -> bool - - - Does the specified address have a byte value (is initialized?) - - - @param ea (C++: ea_t) - - -ida_bytes.is_lzero(): - - is_lzero(ea, n) -> bool - - - Display leading zeroes in operands. The global switch for the leading - zeroes is in \inf{s_genflags} The leading zeroes doesn't work if the - octal numbers start with 0 Display leading zeroes? (takes into account - \inf{s_genflags}) - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.is_manual(): - - is_manual(F, n) -> bool - - - is forced operand? (use 'is_forced_operand()' ) - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_manual_insn(): - - is_manual_insn(ea) -> bool - - - Is the instruction overridden? - - @param ea: linear address of the instruction or data item (C++: ea_t) - - -ida_bytes.is_mapped(): - - is_mapped(ea) -> bool - - - Is the specified address 'ea' present in the program? - - - @param ea (C++: ea_t) - - -ida_bytes.is_not_tail(): - - is_not_tail(F) -> bool - - - Does flag denote tail byte? - - - @param F (C++: flags_t) - - -ida_bytes.is_numop(): - - is_numop(F, n) -> bool - - - is number (bin, oct, dec, hex)? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_numop0(): - - is_numop0(F) -> bool - - - Is the first operand a number (i.e. binary, octal, decimal or hex?) - - - @param F (C++: flags_t) - - -ida_bytes.is_numop1(): - - is_numop1(F) -> bool - - - Is the second operand a number (i.e. binary, octal, decimal or hex?) - - - @param F (C++: flags_t) - - -ida_bytes.is_off(): - - is_off(F, n) -> bool - - - is offset? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_off0(): - - is_off0(F) -> bool - - - Is the first operand offset? (example: push offset xxx) - - - @param F (C++: flags_t) - - -ida_bytes.is_off1(): - - is_off1(F) -> bool - - - Is the second operand offset? (example: mov ax, offset xxx) - - - @param F (C++: flags_t) - - -ida_bytes.is_oword(): - - is_oword(F) -> bool - - - 'FF_OWORD' - - - @param F (C++: flags_t) - - -ida_bytes.is_pack_real(): - - is_pack_real(F) -> bool - - - 'FF_PACKREAL' - - - @param F (C++: flags_t) - - -ida_bytes.is_qword(): - - is_qword(F) -> bool - - - 'FF_QWORD' - - - @param F (C++: flags_t) - - -ida_bytes.is_same_data_type(): - - is_same_data_type(F1, F2) -> bool - - - Do the given flags specify the same data type? - - - @param F1 (C++: flags_t) - @param F2 (C++: flags_t) - - -ida_bytes.is_seg(): - - is_seg(F, n) -> bool - - - is segment? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_seg0(): - - is_seg0(F) -> bool - - - Is the first operand segment selector? (example: push seg seg001) - - - @param F (C++: flags_t) - - -ida_bytes.is_seg1(): - - is_seg1(F) -> bool - - - Is the second operand segment selector? (example: mov dx, seg dseg) - - - @param F (C++: flags_t) - - -ida_bytes.is_stkvar(): - - is_stkvar(F, n) -> bool - - - is stack variable? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_stkvar0(): - - is_stkvar0(F) -> bool - - - Is the first operand a stack variable? - - - @param F (C++: flags_t) - - -ida_bytes.is_stkvar1(): - - is_stkvar1(F) -> bool - - - Is the second operand a stack variable? - - - @param F (C++: flags_t) - - -ida_bytes.is_strlit(): - - is_strlit(F) -> bool - - - 'FF_STRLIT' - - - @param F (C++: flags_t) - - -ida_bytes.is_stroff(): - - is_stroff(F, n) -> bool - - - is struct offset? - - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_stroff0(): - - is_stroff0(F) -> bool - - - Is the first operand an offset within a struct? - - - @param F (C++: flags_t) - - -ida_bytes.is_stroff1(): - - is_stroff1(F) -> bool - - - Is the second operand an offset within a struct? - - - @param F (C++: flags_t) - - -ida_bytes.is_struct(): - - is_struct(F) -> bool - - - 'FF_STRUCT' - - - @param F (C++: flags_t) - - -ida_bytes.is_suspop(): - - is_suspop(ea, F, n) -> bool - - - is suspicious operand? - - - @param ea (C++: ea_t) - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.is_tail(): - - is_tail(F) -> bool - - - Does flag denote tail byte? - - - @param F (C++: flags_t) - - -ida_bytes.is_tbyte(): - - is_tbyte(F) -> bool - - - 'FF_TBYTE' - - - @param F (C++: flags_t) - - -ida_bytes.is_unknown(): - - is_unknown(F) -> bool - - - Does flag denote unexplored byte? - - - @param F (C++: flags_t) - - -ida_bytes.is_varsize_item(): - - is_varsize_item(ea, F, ti=None, itemsize=None) -> int - - - Is the item at 'ea' variable size?. - - @param ea: linear address of the item (C++: ea_t) - @param F: flags (C++: flags_t) - @param ti: additional information about the data type. For example, if - the current item is a structure instance, then ti->tid is - structure id. Otherwise is ignored (may be NULL). If - specified as NULL, will be automatically retrieved from the - database (C++: const opinfo_t *) - @param itemsize: if not NULL and the item is varsize, itemsize will - contain the calculated item size (for struct types, - the minimal size is returned) (C++: asize_t *) - - -ida_bytes.is_word(): - - is_word(F) -> bool - - - 'FF_WORD' - - - @param F (C++: flags_t) - - -ida_bytes.is_yword(): - - is_yword(F) -> bool - - - 'FF_YWORD' - - - @param F (C++: flags_t) - - -ida_bytes.is_zword(): - - is_zword(F) -> bool - - - 'FF_ZWORD' - - - @param F (C++: flags_t) - - -ida_bytes.leading_zero_important(): - - leading_zero_important(ea, n) -> bool - - - Check if leading zeroes are important. - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.nbits(): - - nbits(ea) -> int - - - Get number of bits in a byte at the given address. - - @param ea (C++: ea_t) - @return: \ph{dnbits()} if the address doesn't belong to a segment, - otherwise the result depends on the segment type - - -ida_bytes.next_addr(): - - next_addr(ea) -> ea_t - - - Get next address in the program (i.e. next address which has flags). - - @param ea (C++: ea_t) - @return: BADADDR if no such address exist. - - -ida_bytes.next_chunk(): - - next_chunk(ea) -> ea_t - - - Get the first address of next contiguous chunk in the program. - - @param ea (C++: ea_t) - @return: BADADDR if next chunk doesn't exist. - - -ida_bytes.next_head(): - - next_head(ea, maxea) -> ea_t - - - Get start of next defined item. - - @param ea: begin search at this address (C++: ea_t) - @param maxea: not included in the search range (C++: ea_t) - @return: BADADDR if none exists. - - -ida_bytes.next_inited(): - - next_inited(ea, maxea) -> ea_t - - - Find the next initialized address. - - - @param ea (C++: ea_t) - @param maxea (C++: ea_t) - - -ida_bytes.next_not_tail(): - - next_not_tail(ea) -> ea_t - - - Get address of next non-tail byte. - - @param ea (C++: ea_t) - @return: BADADDR if none exists. - - -ida_bytes.next_that(): - - next_that(ea, maxea, callable) -> ea_t - - - Find next address with a flag satisfying the function 'testf'. - Start searching from address 'ea'+1 and inspect bytes up to 'maxea'. - maxea is not included in the search range. - - @param callable: a Python callable with the following prototype: - callable(flags). Return True to stop enumeration. - @return: the found address or BADADDR. - - -ida_bytes.next_unknown(): - - next_unknown(ea, maxea) -> ea_t - - - Similar to 'next_that()' , but will find the next address that is - unexplored. - - - @param ea (C++: ea_t) - @param maxea (C++: ea_t) - - -ida_bytes.num_flag(): - - num_flag() -> flags_t - - - Get number of default base (bin, oct, dec, hex) - - -ida_bytes.oct_flag(): - - oct_flag() -> flags_t - - - Get number flag of the base, regardless of current processor - better - to use 'num_flag()' - - -ida_bytes.off_flag(): - - off_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.op_adds_xrefs(): - - op_adds_xrefs(F, n) -> bool - - - Should processor module create xrefs from the operand?. Currently - 'offset' and 'structure offset' operands create xrefs - - @param F (C++: flags_t) - @param n (C++: int) - - -ida_bytes.op_bin(): - - op_bin(ea, n) -> bool - - - set op type to 'bin_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_chr(): - - op_chr(ea, n) -> bool - - - set op type to 'char_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_custfmt(): - - op_custfmt(ea, n, fid) -> bool - - - Set custom data format for operand (fid-custom data format id) - - - @param ea (C++: ea_t) - @param n (C++: int) - @param fid (C++: int) - - -ida_bytes.op_dec(): - - op_dec(ea, n) -> bool - - - set op type to 'dec_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_enum(): - - op_enum(ea, n, id, serial) -> bool - - - Set operand representation to be 'enum_t'. If applied to unexplored - bytes, converts them to 16/32bit word data - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @param id: id of enum (C++: enum_t) - @param serial: the serial number of the constant in the enumeration, - usually 0. the serial numbers are used if the - enumeration contains several constants with the same - value (C++: uchar) - @return: success - - -ida_bytes.op_flt(): - - op_flt(ea, n) -> bool - - - set op type to 'flt_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_hex(): - - op_hex(ea, n) -> bool - - - set op type to 'hex_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_num(): - - op_num(ea, n) -> bool - - - set op type to 'num_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_oct(): - - op_oct(ea, n) -> bool - - - set op type to 'oct_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.op_seg(): - - op_seg(ea, n) -> bool - - - Set operand representation to be 'segment'. If applied to unexplored - bytes, converts them to 16/32bit word data - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: success - - -ida_bytes.op_stkvar(): - - op_stkvar(ea, n) -> bool - - - Set operand representation to be 'stack variable'. Should be applied - to an instruction within a function. Should be applied after creating - a stack var using 'insn_t::create_stkvar()' . - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: success - - -ida_bytes.op_stroff(): - - op_stroff(insn, n, path, path_len, delta) -> bool - - - Set operand representation to be 'struct offset'. If applied to - unexplored bytes, converts them to 16/32bit word data - - @param insn: the instruction (C++: const insn_t &) - @param n: number of operand (0, 1, -1) (C++: int) - @param path: structure path (strpath). see nalt.hpp for more info. - (C++: const tid_t *) - @param path_len: length of the structure path (C++: int) - @param delta: struct offset delta. usually 0. denotes the difference - between the structure base and the pointer into the - structure. (C++: adiff_t) - @return: success - - Example: - Python> - Python> ins = ida_ua.insn_t() - Python> if ida_ua.decode_insn(ins, some_address): - Python> path_len = 1 - Python> path = ida_pro.tid_array(path_len) - Python> path[0] = ida_struct.get_struc_id("my_stucture_t") - Python> ida_bytes.op_stroff(ins, 0, path.cast(), path_len, 0) - Python> - - -ida_bytes.oword_flag(): - - oword_flag() -> flags_t - - - Get a flags_t representing a octaword. - - -ida_bytes.packreal_flag(): - - packreal_flag() -> flags_t - - - Get a flags_t representing a packed decimal real. - - -ida_bytes.patch_byte(): - - patch_byte(ea, x) -> bool - - - Patch a byte of the program. The original value of the byte is saved - and can be obtained by 'get_original_byte()' . This function works for - wide byte processors too. - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -ida_bytes.patch_bytes(): - - patch_bytes(ea, buf) - - - Patch the specified number of bytes of the program. Original values of - bytes are saved and are available with get_original...() functions. - See also 'put_bytes()' . - - @param ea: linear address (C++: ea_t) - @param buf: buffer with new values of bytes (C++: const void *) - - -ida_bytes.patch_dword(): - - patch_dword(ea, x) -> bool - - - Patch a dword of the program. The original value of the dword is saved - and can be obtained by 'get_original_dword()' . This function DOESN'T - work for wide byte processors. This function takes into account order - of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -ida_bytes.patch_qword(): - - patch_qword(ea, x) -> bool - - - Patch a qword of the program. The original value of the qword is saved - and can be obtained by 'get_original_qword()' . This function DOESN'T - work for wide byte processors. This function takes into account order - of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -ida_bytes.patch_word(): - - patch_word(ea, x) -> bool - - - Patch a word of the program. The original value of the word is saved - and can be obtained by 'get_original_word()' . This function works for - wide byte processors too. This function takes into account order of - bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -ida_bytes.prev_addr(): - - prev_addr(ea) -> ea_t - - - Get previous address in the program. - - @param ea (C++: ea_t) - @return: BADADDR if no such address exist. - - -ida_bytes.prev_chunk(): - - prev_chunk(ea) -> ea_t - - - Get the last address of previous contiguous chunk in the program. - - @param ea (C++: ea_t) - @return: BADADDR if previous chunk doesn't exist. - - -ida_bytes.prev_head(): - - prev_head(ea, minea) -> ea_t - - - Get start of previous defined item. - - @param ea: begin search at this address (C++: ea_t) - @param minea: included in the search range (C++: ea_t) - @return: BADADDR if none exists. - - -ida_bytes.prev_inited(): - - prev_inited(ea, minea) -> ea_t - - - Find the previous initialized address. - - - @param ea (C++: ea_t) - @param minea (C++: ea_t) - - -ida_bytes.prev_not_tail(): - - prev_not_tail(ea) -> ea_t - - - Get address of previous non-tail byte. - - @param ea (C++: ea_t) - @return: BADADDR if none exists. - - -ida_bytes.prev_that(): - - prev_that(ea, minea, callable) -> ea_t - - - Find previous address with a flag satisfying the function 'testf'.do - not pass 'is_unknown()' to this function to find unexplored bytes It - will fail under the debugger. To find unexplored bytes, use - 'prev_unknown()' . - - @param ea: start searching from this address - 1. (C++: ea_t) - @param minea: included in the search range. (C++: ea_t) - @return: the found address or BADADDR . - - -ida_bytes.prev_unknown(): - - prev_unknown(ea, minea) -> ea_t - - - Similar to 'prev_that()' , but will find the previous address that is - unexplored. - - - @param ea (C++: ea_t) - @param minea (C++: ea_t) - - -ida_bytes.print_strlit_type(): - - print_strlit_type(strtype, flags=0) -> PyObject * - - - Get string type information: the string type name (possibly decorated - with hotkey markers), and the tooltip. - - @param strtype: the string type (C++: int32) - @param flags: or'ed PSTF_* constants (C++: int) - @return: length of generated text - - -ida_bytes.put_byte(): - - put_byte(ea, x) -> bool - - - Set value of one byte of the program. This function modifies the - database. If the debugger is active then the debugged process memory - is patched too.The original value of the byte is completely lost and - can't be recovered by the 'get_original_byte()' function. See also - 'put_dbg_byte()' to write to the process memory directly when the - debugger is active. This function can handle wide byte processors. - - @param ea: linear address (C++: ea_t) - @param x: byte value (C++: uint64) - @return: true if the database has been modified - - -ida_bytes.put_bytes(): - - put_bytes(ea, buf) - - - Modify the specified number of bytes of the program. This function - does not save the original values of bytes. See also 'patch_bytes()' . - - @param ea: linear address (C++: ea_t) - @param buf: buffer with new values of bytes (C++: const void *) - - -ida_bytes.put_dword(): - - put_dword(ea, x) - - - Set value of one dword of the program. This function takes into - account order of bytes specified in \inf{is_be()} This function works - for wide byte processors too.the original value of the dword is - completely lost and can't be recovered by the 'get_original_dword()' - function. - - @param ea: linear address (C++: ea_t) - @param x: dword value (C++: uint64) - - -ida_bytes.put_qword(): - - put_qword(ea, x) - - - Set value of one qword (8 bytes) of the program. This function takes - into account order of bytes specified in \inf{is_be()} This function - DOESN'T works for wide byte processors. - - @param ea: linear address (C++: ea_t) - @param x: qword value (C++: uint64) - - -ida_bytes.put_word(): - - put_word(ea, x) - - - Set value of one word of the program. This function takes into account - order of bytes specified in \inf{is_be()} This function works for wide - byte processors too.The original value of the word is completely lost - and can't be recovered by the 'get_original_word()' function. ea - - linear address x - word value - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -ida_bytes.qword_flag(): - - qword_flag() -> flags_t - - - Get a flags_t representing a quad word. - - -ida_bytes.register_custom_data_format(): - - register_custom_data_format(py_df) -> int - - - Registers a custom data format with a given data type. - @param df: an instance of data_format_t - @return: - < 0 if failed to register - > 0 data format id - - -ida_bytes.register_custom_data_type(): - - register_custom_data_type(py_dt) -> int - - - Registers a custom data type. - @param dt: an instance of the data_type_t class - @return: - < 0 if failed to register - > 0 data type id - - -ida_bytes.register_data_types_and_formats(): - - Registers multiple data types and formats at once. - To register one type/format at a time use register_custom_data_type/register_custom_data_format - - It employs a special table of types and formats described below: - - The 'formats' is a list of tuples. If a tuple has one element then it is the format to be registered with dtid=0 - If the tuple has more than one element, then tuple[0] is the data type and tuple[1:] are the data formats. For example: - many_formats = [ - (pascal_data_type(), pascal_data_format()), - (simplevm_data_type(), simplevm_data_format()), - (makedword_data_format(),), - (simplevm_data_format(),) - ] - The first two tuples describe data types and their associated formats. - The last two tuples describe two data formats to be used with built-in data types. - The data format may be attached to several data types. The id of the - data format is stored in the first data_format_t object. For example: - assert many_formats[1][1] != -1 - assert many_formats[2][0] != -1 - assert many_formats[3][0] == -1 - - -ida_bytes.revert_byte(): - - revert_byte(ea) -> bool - - - Revert patched byte - - @param ea (C++: ea_t) - - -ida_bytes.seg_flag(): - - seg_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.set_cmt(): - - set_cmt(ea, comm, rptble) -> bool - - - Set an indented comment. - - @param ea: linear address (C++: ea_t) - @param comm: comment string NULL: do nothing (return 0) "" : - delete comment (C++: const char *) - @param rptble: is repeatable? (C++: bool) - @return: success - - -ida_bytes.set_forced_operand(): - - set_forced_operand(ea, n, op) -> bool - - - Set forced operand. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, 2) (C++: int) - @param op: text of operand NULL: do nothing (return 0) "" : delete - forced operand (C++: const char *) - @return: success - - -ida_bytes.set_immd(): - - set_immd(ea) -> bool - - - Set 'has immediate operand' flag. Returns true if the 'FF_IMMD' bit - was not set and now is set - - @param ea (C++: ea_t) - - -ida_bytes.set_lzero(): - - set_lzero(ea, n) -> bool - - - Set toggle lzero bit. - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.set_manual_insn(): - - set_manual_insn(ea, manual_insn) - - - Set manual instruction string. - - @param ea: linear address of the instruction or data item (C++: ea_t) - @param manual_insn: "" - delete manual string. NULL - do nothing (C++: - const char *) - - -ida_bytes.set_op_type(): - - set_op_type(ea, type, n) -> bool - - - (internal function) change representation of operand(s). - - @param ea: linear address (C++: ea_t) - @param type: new flag value (should be obtained from char_flag() , - num_flag() and similar functions) (C++: flags_t) - @param n: number of operand (0, 1, -1) (C++: int) - - -ida_bytes.set_opinfo(): - - set_opinfo(ea, n, flag, ti, suppress_events=False) -> bool - - - Set additional information about an operand representation. This - function is a low level one. Only the kernel should use it. - - @param ea: linear address of the item (C++: ea_t) - @param n: number of operand, 0 or 1 (C++: int) - @param flag: flags of the item (C++: flags_t) - @param ti: additional representation information (C++: const opinfo_t - *) - @param suppress_events: do not generate changing_op_type and - op_type_changed events (C++: bool) - @return: success - - -ida_bytes.stkvar_flag(): - - stkvar_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.strlit_flag(): - - strlit_flag() -> flags_t - - - Get a flags_t representing a string literal. - - -ida_bytes.stroff_flag(): - - stroff_flag() -> flags_t - - - see 'Bits: instruction operand types' - - -ida_bytes.stru_flag(): - - stru_flag() -> flags_t - - - Get a flags_t representing a struct. - - -ida_bytes.tbyte_flag(): - - tbyte_flag() -> flags_t - - - Get a flags_t representing a tbyte. - - -ida_bytes.toggle_bnot(): - - toggle_bnot(ea, n) -> bool - - - Toggle binary negation of operand. also see 'is_bnot()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.toggle_lzero(): - - toggle_lzero(ea, n) -> bool - - -ida_bytes.toggle_sign(): - - toggle_sign(ea, n) -> bool - - - Toggle sign of n-th operand. allowed values of n: 0-first operand, - 1-other operands - - @param ea (C++: ea_t) - @param n (C++: int) - - -ida_bytes.unregister_custom_data_format(): - - unregister_custom_data_format(dfid) -> bool - - - Unregisters a custom data format - @param dfid: data format id - @return: Boolean - - -ida_bytes.unregister_custom_data_type(): - - unregister_custom_data_type(dtid) -> bool - - - Unregisters a custom data type. - @param dtid: the data type id - @return: Boolean - - -ida_bytes.unregister_data_types_and_formats(): - - As opposed to register_data_types_and_formats(), this function - unregisters multiple data types and formats at once. - - -ida_bytes.update_hidden_range(): - - update_hidden_range(ha) -> bool - - - Update hidden range information in the database. You cannot use this - function to change the range boundaries - - @param ha: range to update (C++: const hidden_range_t *) - @return: success - - -ida_bytes.use_mapping(): - - use_mapping(ea) -> ea_t - - - Translate address according to current mappings. - - @param ea: address to translate (C++: ea_t) - @return: translated address - - -ida_bytes.visit_patched_bytes(): - - visit_patched_bytes(ea1, ea2, py_callable) -> int - - - Enumerates patched bytes in the given range and invokes a callable - @param ea1: start address - @param ea2: end address - @param callable: a Python callable with the following prototype: - callable(ea, fpos, org_val, patch_val). - If the callable returns non-zero then that value will be - returned to the caller and the enumeration will be - interrupted. - @return: Zero if the enumeration was successful or the return - value of the callback if enumeration was interrupted. - - -ida_bytes.word_flag(): - - word_flag() -> flags_t - - - Get a flags_t representing a word. - - -ida_bytes.yword_flag(): - - yword_flag() -> flags_t - - - Get a flags_t representing a ymm word. - - -ida_bytes.zword_flag(): - - zword_flag() -> flags_t - - - Get a flags_t representing a zmm word. - - - -=== ida_bytes EPYDOC INJECTIONS === -ida_bytes.ALOPT_IGNCLT -""" -if set, don't stop at codepoints that are not part of the current -'culture'; accept all those that are graphical (this is typically used -used by user-initiated actions creating string literals.) -""" - -ida_bytes.ALOPT_IGNHEADS -""" -don't stop if another data item is encountered. only the byte values -will be used to determine the string length. if not set, a defined -data item or instruction will truncate the string -""" - -ida_bytes.ALOPT_IGNPRINT -""" -if set, don't stop at non-printable codepoints, but only at the -terminating character (or not unicode-mapped character (e.g., 0x8f in -CP1252)) -""" - -ida_bytes.ALOPT_MAX4K -""" -accumulated length - -if string length is more than 4K, return the -""" - -ida_bytes.BIN_SEARCH_BACKWARD -""" -search backward for bytes -""" - -ida_bytes.BIN_SEARCH_CASE -""" -case sensitive -""" - -ida_bytes.BIN_SEARCH_FORWARD -""" -search forward for bytes -""" - -ida_bytes.BIN_SEARCH_INITED -""" -find_byte, find_byter: any initilized value -""" - -ida_bytes.BIN_SEARCH_NOBREAK -""" -don't check for Ctrl-Break -""" - -ida_bytes.BIN_SEARCH_NOCASE -""" -case insensitive -""" - -ida_bytes.BIN_SEARCH_NOSHOW -""" -don't show search progress or update screen -""" - -ida_bytes.DELIT_DELNAMES -""" -delete any names at the specified address range (except for the -starting address). this bit is valid if nbytes > 1 -""" - -ida_bytes.DELIT_EXPAND -""" -propagate undefined items; for example if removing an instruction -removes all references to the next instruction, then plan to convert -to unexplored the next instruction too. -""" - -ida_bytes.DELIT_KEEPFUNC -""" -Just delete xrefs, ops e.t.c. - -do not undefine the function start. -""" - -ida_bytes.DELIT_NOCMT -""" -reject to delete if a comment is in address range (except for the -starting address). this bit is valid if nbytes > 1 -""" - -ida_bytes.DELIT_NOTRUNC -""" -even if 'AF_TRFUNC' is set - -don't truncate the current function -""" - -ida_bytes.DELIT_NOUNAME -""" -reject to delete if a user name is in address range (except for the -starting address). this bit is valid if nbytes > 1 -""" - -ida_bytes.DELIT_SIMPLE -""" -simply undefine the specified item(s) -""" - -ida_bytes.DTP_NODUP -""" -do not use dup construct -""" - -ida_bytes.DT_TYPE -""" -Mask for DATA typing. -""" - -ida_bytes.FF_0CHAR -""" -Char ('x')? -""" - -ida_bytes.FF_0CUST -""" -Custom representation? -""" - -ida_bytes.FF_0ENUM -""" -Enumeration? -""" - -ida_bytes.FF_0FLT -""" -Floating point number? -""" - -ida_bytes.FF_0FOP -""" -Forced operand? -""" - -ida_bytes.FF_0NUMB -""" -Binary number? -""" - -ida_bytes.FF_0NUMD -""" -Decimal number? -""" - -ida_bytes.FF_0NUMH -""" -Hexadecimal number? -""" - -ida_bytes.FF_0NUMO -""" -Octal number? -""" - -ida_bytes.FF_0OFF -""" -Offset? -""" - -ida_bytes.FF_0SEG -""" -Segment? -""" - -ida_bytes.FF_0STK -""" -Stack variable? -""" - -ida_bytes.FF_0STRO -""" -Struct offset? -""" - -ida_bytes.FF_0VOID -""" -Void (unknown)? -""" - -ida_bytes.FF_1CHAR -""" -Char ('x')? -""" - -ida_bytes.FF_1CUST -""" -Custom representation? -""" - -ida_bytes.FF_1ENUM -""" -Enumeration? -""" - -ida_bytes.FF_1FLT -""" -Floating point number? -""" - -ida_bytes.FF_1FOP -""" -Forced operand? -""" - -ida_bytes.FF_1NUMB -""" -Binary number? -""" - -ida_bytes.FF_1NUMD -""" -Decimal number? -""" - -ida_bytes.FF_1NUMH -""" -Hexadecimal number? -""" - -ida_bytes.FF_1NUMO -""" -Octal number? -""" - -ida_bytes.FF_1OFF -""" -Offset? -""" - -ida_bytes.FF_1SEG -""" -Segment? -""" - -ida_bytes.FF_1STK -""" -Stack variable? -""" - -ida_bytes.FF_1STRO -""" -Struct offset? -""" - -ida_bytes.FF_1VOID -""" -Void (unknown)? -""" - -ida_bytes.FF_ALIGN -""" -alignment directive -""" - -ida_bytes.FF_BNOT -""" -Bitwise negation of operands. -""" - -ida_bytes.FF_BYTE -""" -byte -""" - -ida_bytes.FF_CODE -""" -Code ? -""" - -ida_bytes.FF_COMM -""" -Has comment ? -""" - -ida_bytes.FF_CUSTOM -""" -custom data type -""" - -ida_bytes.FF_DATA -""" -Data ? -""" - -ida_bytes.FF_DOUBLE -""" -double -""" - -ida_bytes.FF_DWORD -""" -double word -""" - -ida_bytes.FF_FLOAT -""" -float -""" - -ida_bytes.FF_FLOW -""" -Exec flow from prev instruction. -""" - -ida_bytes.FF_FUNC -""" -function start? -""" - -ida_bytes.FF_IMMD -""" -Has Immediate value ? -""" - -ida_bytes.FF_IVL -""" -Byte has value ? -""" - -ida_bytes.FF_JUMP -""" -Has jump table or switch_info? -""" - -ida_bytes.FF_LABL -""" -Has dummy name? -""" - -ida_bytes.FF_LINE -""" -Has next or prev lines ? -""" - -ida_bytes.FF_NAME -""" -Has name ? -""" - -ida_bytes.FF_OWORD -""" -octaword/xmm word (16 bytes/128 bits) -""" - -ida_bytes.FF_PACKREAL -""" -packed decimal real -""" - -ida_bytes.FF_QWORD -""" -quadro word -""" - -ida_bytes.FF_REF -""" -has references -""" - -ida_bytes.FF_SIGN -""" -Inverted sign of operands. -""" - -ida_bytes.FF_STRLIT -""" -string literal -""" - -ida_bytes.FF_STRUCT -""" -struct variable -""" - -ida_bytes.FF_TAIL -""" -Tail ? -""" - -ida_bytes.FF_TBYTE -""" -tbyte -""" - -ida_bytes.FF_UNK -""" -Unknown ? -""" - -ida_bytes.FF_UNUSED -""" -unused bit (was used for variable bytes) -""" - -ida_bytes.FF_WORD -""" -word -""" - -ida_bytes.FF_YWORD -""" -ymm word (32 bytes/256 bits) -""" - -ida_bytes.FF_ZWORD -""" -zmm word (64 bytes/512 bits) -""" - -ida_bytes.GFE_VALUE -""" -get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote -debugging because the kernel needs to read the process memory. -""" - -ida_bytes.GMB_READALL -""" -if this bit is not set, fail at first uninited byte - -try to read all bytes -""" - -ida_bytes.GMB_WAITBOX -""" -show wait box (may return -1 in this case) -""" - -ida_bytes.ITEM_END_FIXUP -""" -stop at the first fixup -""" - -ida_bytes.ITEM_END_INITED -""" -stop when initialization changes i.e.if is_loaded(ea): stop if -uninitialized byte is encounteredif !is_loaded(ea): stop if -initialized byte is encountered -""" - -ida_bytes.ITEM_END_NAME -""" -stop at the first named location -""" - -ida_bytes.ITEM_END_XREF -""" -stop at the first referenced location -""" - -ida_bytes.MS_0TYPE -""" -Mask for 1st arg typing. -""" - -ida_bytes.MS_1TYPE -""" -Mask for the type of other operands. -""" - -ida_bytes.MS_CLS -""" -Mask for typing. -""" - -ida_bytes.MS_CODE -""" -Mask for code bits. -""" - -ida_bytes.MS_COMM -""" -Mask of common bits. -""" - -ida_bytes.MS_VAL -""" -Mask for byte value. -""" - -ida_bytes.OPND_ALL -""" -all operands -""" - -ida_bytes.OPND_MASK -""" -mask for operand number -""" - -ida_bytes.OPND_OUTER -""" -used only in set, get, del_offset() functions - -outer offset base (combined with operand number). -""" - -ida_bytes.PSTF_ENC -""" -if encoding is specified, append it -""" - -ida_bytes.PSTF_HOTKEY -""" -have hotkey markers part of the name -""" - -ida_bytes.PSTF_TBRIEF -""" -use brief name (e.g., in the 'Strings window') -""" - -ida_bytes.PSTF_TINLIN -""" -use 'inline' name (e.g., in the structures comments) -""" - -ida_bytes.PSTF_TMASK -""" -type mask -""" - -ida_bytes.PSTF_TNORM -""" -use normal name -""" - -ida_bytes.STRCONV_ESCAPE -""" -convert non-printable characters to C escapes (, \\xNN, \\uNNNN) -""" - -ida_bytes.STRCONV_INCLLEN -""" -for Pascal-style strings, include the prefixing length byte(s) as -C-escaped sequence -""" - -ida_bytes.STRCONV_REPLCHAR -""" -convert non-printable characters to the Unicode replacement character -(U+FFFD) -""" -=== ida_bytes EPYDOC INJECTIONS END === -class ida_dbg.DBG_Hooks(): - - Proxy of C++ DBG_Hooks class - - -ida_dbg.DBG_Hooks.dbg_bpt(): - - dbg_bpt(self, tid, bptea) -> int - - -ida_dbg.DBG_Hooks.dbg_bpt_changed(): - - dbg_bpt_changed(self, bptev_code, bpt) - - -ida_dbg.DBG_Hooks.dbg_exception(): - - dbg_exception(self, pid, tid, ea, exc_code, exc_can_cont, exc_ea, exc_info) -> int - - -ida_dbg.DBG_Hooks.dbg_finished_loading_bpts(): - - dbg_finished_loading_bpts(self) - - -ida_dbg.DBG_Hooks.dbg_information(): - - dbg_information(self, pid, tid, ea, info) - - -ida_dbg.DBG_Hooks.dbg_library_load(): - - dbg_library_load(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - -ida_dbg.DBG_Hooks.dbg_library_unload(): - - dbg_library_unload(self, pid, tid, ea, info) - - -ida_dbg.DBG_Hooks.dbg_process_attach(): - - dbg_process_attach(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - -ida_dbg.DBG_Hooks.dbg_process_detach(): - - dbg_process_detach(self, pid, tid, ea) - - -ida_dbg.DBG_Hooks.dbg_process_exit(): - - dbg_process_exit(self, pid, tid, ea, exit_code) - - -ida_dbg.DBG_Hooks.dbg_process_start(): - - dbg_process_start(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - -ida_dbg.DBG_Hooks.dbg_request_error(): - - dbg_request_error(self, failed_command, failed_dbg_notification) - - -ida_dbg.DBG_Hooks.dbg_run_to(): - - dbg_run_to(self, pid, tid, ea) - - -ida_dbg.DBG_Hooks.dbg_started_loading_bpts(): - - dbg_started_loading_bpts(self) - - -ida_dbg.DBG_Hooks.dbg_step_into(): - - dbg_step_into(self) - - -ida_dbg.DBG_Hooks.dbg_step_over(): - - dbg_step_over(self) - - -ida_dbg.DBG_Hooks.dbg_step_until_ret(): - - dbg_step_until_ret(self) - - -ida_dbg.DBG_Hooks.dbg_suspend_process(): - - dbg_suspend_process(self) - - -ida_dbg.DBG_Hooks.dbg_thread_exit(): - - dbg_thread_exit(self, pid, tid, ea, exit_code) - - -ida_dbg.DBG_Hooks.dbg_thread_start(): - - dbg_thread_start(self, pid, tid, ea) - - -ida_dbg.DBG_Hooks.dbg_trace(): - - dbg_trace(self, tid, ip) -> int - - -ida_dbg.DBG_Hooks.hook(): - - hook(self) -> bool - - -ida_dbg.DBG_Hooks.unhook(): - - unhook(self) -> bool - - -ida_dbg.add_bpt(): - - add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool - add_bpt(bpt) -> bool - - - Add a new breakpoint in the debugged process. \sq{Type, Synchronous - function - available as request, Notification, none (synchronous - function)}Only one breakpoint can exist at a given address. - - @param ea: any address in the process memory space. Depending on the - architecture, hardware breakpoints always be setup at - random address. For example, on x86, hardware breakpoints - should be aligned depending on their size. Moreover, on the - x86 architecture, it is impossible to setup more than 4 - hardware breakpoints. (C++: ea_t) - @param size: size of the breakpoint (irrelevant for software - breakpoints): As for the address, hardware breakpoints - can't always be setup with random size. (C++: asize_t) - @param type: type of the breakpoint ( BPT_SOFT for software - breakpoint) special case BPT_DEFAULT ( BPT_SOFT | - BPT_EXEC ): try to add instruction breakpoint of the - appropriate type as follows: software bpt if supported, - hwbpt otherwise (C++: bpttype_t) - - -ida_dbg.add_path_mapping(): - - add_path_mapping(src, dst) - - -ida_dbg.add_virt_module(): - - add_virt_module(mod) -> bool - - -ida_dbg.attach_process(): - - attach_process(pid=pid_t(-1), event_id=-1) -> int - - - Attach the debugger to a running process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_attach' - }This function shouldn't be called as a request if 'NO_PROCESS' is - used. - - @param pid: PID of the process to attach to. If NO_PROCESS , a dialog - box will interactively ask the user for the process to - attach to. (C++: pid_t) - @param event_id (C++: int) - - -class ida_dbg.bpt_location_t(): - - Proxy of C++ bpt_location_t class - - -ida_dbg.bpt_location_t.compare(): - - compare(self, r) -> int - - -ida_dbg.bpt_location_t.ea(): - - ea(self) -> ea_t - - -ida_dbg.bpt_location_t.index: - bpt_location_t_index_get(self) -> int - -ida_dbg.bpt_location_t.info: - bpt_location_t_info_get(self) -> ea_t - -ida_dbg.bpt_location_t.is_empty_path(): - - is_empty_path(self) -> bool - - -ida_dbg.bpt_location_t.lineno(): - - lineno(self) -> int - - -ida_dbg.bpt_location_t.loctype: - bpt_location_t_loctype_get(self) -> bpt_loctype_t - -ida_dbg.bpt_location_t.offset(): - - offset(self) -> uval_t - - -ida_dbg.bpt_location_t.path(): - - path(self) -> char const * - - -ida_dbg.bpt_location_t.set_abs_bpt(): - - set_abs_bpt(self, a) - - -ida_dbg.bpt_location_t.set_rel_bpt(): - - set_rel_bpt(self, mod, _offset) - - -ida_dbg.bpt_location_t.set_src_bpt(): - - set_src_bpt(self, fn, _lineno) - - -ida_dbg.bpt_location_t.set_sym_bpt(): - - set_sym_bpt(self, _symbol, _offset=0) - - -ida_dbg.bpt_location_t.symbol(): - - symbol(self) -> char const * - - -ida_dbg.bpt_location_t.type(): - - type(self) -> bpt_loctype_t - - -class ida_dbg.bpt_t(): - - Proxy of C++ bpt_t class - - -ida_dbg.bpt_t.badbpt(): - - badbpt(self) -> bool - - -ida_dbg.bpt_t.cb: - bpt_t_cb_get(self) -> size_t - -ida_dbg.bpt_t.cndidx: - bpt_t_cndidx_get(self) -> int - -ida_dbg.bpt_t.condition: - bpt_t_condition_get(self) -> PyObject * - -ida_dbg.bpt_t.ea: - bpt_t_ea_get(self) -> ea_t - -ida_dbg.bpt_t.elang: - bpt_t_elang_get(self) -> PyObject * - -ida_dbg.bpt_t.enabled(): - - enabled(self) -> bool - - -ida_dbg.bpt_t.flags: - bpt_t_flags_get(self) -> uint32 - -ida_dbg.bpt_t.get_cnd_elang_idx(): - - get_cnd_elang_idx(self) -> size_t - - -ida_dbg.bpt_t.get_size(): - - get_size(self) -> int - - -ida_dbg.bpt_t.is_absbpt(): - - is_absbpt(self) -> bool - - -ida_dbg.bpt_t.is_active(): - - is_active(self) -> bool - - -ida_dbg.bpt_t.is_compiled(): - - is_compiled(self) -> bool - - -ida_dbg.bpt_t.is_hwbpt(): - - is_hwbpt(self) -> bool - - -ida_dbg.bpt_t.is_inactive(): - - is_inactive(self) -> bool - - -ida_dbg.bpt_t.is_low_level(): - - is_low_level(self) -> bool - - -ida_dbg.bpt_t.is_page_bpt(): - - is_page_bpt(self) -> bool - - -ida_dbg.bpt_t.is_partially_active(): - - is_partially_active(self) -> bool - - -ida_dbg.bpt_t.is_relbpt(): - - is_relbpt(self) -> bool - - -ida_dbg.bpt_t.is_srcbpt(): - - is_srcbpt(self) -> bool - - -ida_dbg.bpt_t.is_symbpt(): - - is_symbpt(self) -> bool - - -ida_dbg.bpt_t.is_tracemodebpt(): - - is_tracemodebpt(self) -> bool - - -ida_dbg.bpt_t.is_traceoffbpt(): - - is_traceoffbpt(self) -> bool - - -ida_dbg.bpt_t.is_traceonbpt(): - - is_traceonbpt(self) -> bool - - -ida_dbg.bpt_t.listbpt(): - - listbpt(self) -> bool - - -ida_dbg.bpt_t.loc: - bpt_t_loc_get(self) -> bpt_location_t - -ida_dbg.bpt_t.pass_count: - bpt_t_pass_count_get(self) -> int - -ida_dbg.bpt_t.pid: - bpt_t_pid_get(self) -> pid_t - -ida_dbg.bpt_t.props: - bpt_t_props_get(self) -> uint32 - -ida_dbg.bpt_t.set_abs_bpt(): - - set_abs_bpt(self, a) - - -ida_dbg.bpt_t.set_rel_bpt(): - - set_rel_bpt(self, mod, o) - - -ida_dbg.bpt_t.set_src_bpt(): - - set_src_bpt(self, fn, lineno) - - -ida_dbg.bpt_t.set_sym_bpt(): - - set_sym_bpt(self, sym, o) - - -ida_dbg.bpt_t.set_trace_action(): - - set_trace_action(self, enable, trace_types) -> bool - - -ida_dbg.bpt_t.size: - bpt_t_size_get(self) -> int - -ida_dbg.bpt_t.tid: - bpt_t_tid_get(self) -> thid_t - -ida_dbg.bpt_t.type: - bpt_t_type_get(self) -> bpttype_t - -class ida_dbg.bpt_vec_t(): - - Proxy of C++ qvector<(bpt_t)> class - - -ida_dbg.bpt_vec_t.at(): - - at(self, _idx) -> bpt_t - - -ida_dbg.bpt_vec_t.begin(): - - begin(self) -> bpt_t - begin(self) -> bpt_t - - -ida_dbg.bpt_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_dbg.bpt_vec_t.clear(): - - clear(self) - - -ida_dbg.bpt_vec_t.empty(): - - empty(self) -> bool - - -ida_dbg.bpt_vec_t.end(): - - end(self) -> bpt_t - end(self) -> bpt_t - - -ida_dbg.bpt_vec_t.erase(): - - erase(self, it) -> bpt_t - erase(self, first, last) -> bpt_t - - -ida_dbg.bpt_vec_t.extract(): - - extract(self) -> bpt_t - - -ida_dbg.bpt_vec_t.grow(): - - grow(self, x=bpt_t()) - - -ida_dbg.bpt_vec_t.inject(): - - inject(self, s, len) - - -ida_dbg.bpt_vec_t.insert(): - - insert(self, it, x) -> bpt_t - - -ida_dbg.bpt_vec_t.pop_back(): - - pop_back(self) - - -ida_dbg.bpt_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> bpt_t - - -ida_dbg.bpt_vec_t.qclear(): - - qclear(self) - - -ida_dbg.bpt_vec_t.reserve(): - - reserve(self, cnt) - - -ida_dbg.bpt_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_dbg.bpt_vec_t.size(): - - size(self) -> size_t - - -ida_dbg.bpt_vec_t.swap(): - - swap(self, r) - - -ida_dbg.bpt_vec_t.truncate(): - - truncate(self) - - -ida_dbg.bring_debugger_to_front(): - - bring_debugger_to_front() - - -ida_dbg.check_bpt(): - - check_bpt(ea) -> int - - - Check the breakpoint at the specified address. - - @param ea (C++: ea_t) - @return: one of Breakpoint status codes - - -ida_dbg.choose_trace_file(): - - choose_trace_file() -> bool - - - Show the choose trace dialog. - - -ida_dbg.clear_requests_queue(): - - clear_requests_queue() - - - Clear the queue of waiting requests. \sq{Type, Synchronous function, - Notification, none (synchronous function)}If a request is currently - running, this one isn't stopped. - - -ida_dbg.clear_trace(): - - clear_trace() - - - Clear all events in the trace buffer. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - -ida_dbg.collect_stack_trace(): - - collect_stack_trace(tid, trace) -> bool - - -ida_dbg.continue_process(): - - continue_process() -> bool - - - Continue the execution of the process in the debugger. \sq{Type, - Synchronous function - available as Request, Notification, none - (synchronous function)}The 'continue_process()' function can be called - from a notification handler to force the continuation of the process. - In this case the request queue will not be examined, IDA will simply - resume execution. Usually it makes sense to call - 'request_continue_process()' followed by 'run_requests()' , so that - IDA will first start a queued request (if any) and then resume the - application. - - -ida_dbg.create_source_viewer(): - - create_source_viewer(out_ccv, parent, custview, sf, lines, lnnum, colnum, flags) -> source_view_t * - - - Create a source code view. - - - @param out_ccv (C++: TWidget **) - @param parent (C++: TWidget *) - @param custview (C++: TWidget *) - @param sf (C++: source_file_ptr) - @param lines (C++: strvec_t *) - @param lnnum (C++: int) - @param colnum (C++: int) - @param flags (C++: int) - - -ida_dbg.dbg_add_bpt_tev(): - - dbg_add_bpt_tev(tid, ea, bp) -> bool - - - Add a new breakpoint trace element to the current trace. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param tid (C++: thid_t) - @param ea (C++: ea_t) - @param bp (C++: ea_t) - @return: false if the operation failed, true otherwise - - -ida_dbg.dbg_add_call_tev(): - - dbg_add_call_tev(tid, caller, callee) - - - Add a new call trace element to the current trace. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param tid (C++: thid_t) - @param caller (C++: ea_t) - @param callee (C++: ea_t) - - -ida_dbg.dbg_add_debug_event(): - - dbg_add_debug_event(event) - - - Add a new debug event to the current trace. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param event (C++: debug_event_t *) - - -ida_dbg.dbg_add_insn_tev(): - - dbg_add_insn_tev(tid, ea, save=SAVE_DIFF) -> bool - - - Add a new instruction trace element to the current trace. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param tid (C++: thid_t) - @param ea (C++: ea_t) - @param save (C++: save_reg_values_t) - @return: false if the operation failed, true otherwise - - -ida_dbg.dbg_add_many_tevs(): - - dbg_add_many_tevs(new_tevs) -> bool - - - Add many new trace elements to the current trace. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param new_tevs (C++: tevinforeg_vec_t *) - @return: false if the operation failed for any tev_info_t object - - -ida_dbg.dbg_add_ret_tev(): - - dbg_add_ret_tev(tid, ret_insn, return_to) - - - Add a new return trace element to the current trace. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param tid (C++: thid_t) - @param ret_insn (C++: ea_t) - @param return_to (C++: ea_t) - - -ida_dbg.dbg_add_tev(): - - dbg_add_tev(type, tid, address) - - - Add a new trace element to the current trace. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param type (C++: tev_type_t) - @param tid (C++: thid_t) - @param address (C++: ea_t) - - -ida_dbg.dbg_add_thread(): - - dbg_add_thread(tid) - - - Add a thread to the current trace. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param tid (C++: thid_t) - - -ida_dbg.dbg_bin_search(): - - dbg_bin_search(start_ea, end_ea, data, srch_flags) -> drc_t - - -ida_dbg.dbg_can_query(): - - dbg_can_query() -> bool - - - This function can be used to check if the debugger can be queried: - - debugger is loaded - - process is suspended - - process is not suspended but can take requests. In this case some requests like - memory read/write, bpt management succeed and register querying will fail. - Check if idaapi.get_process_state() < 0 to tell if the process is suspended - @return: Boolean - - -ida_dbg.dbg_del_thread(): - - dbg_del_thread(tid) - - - Delete a thread from the current trace. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param tid (C++: thid_t) - - -ida_dbg.dbg_is_loaded(): - - dbg_is_loaded() -> bool - - - Checks if a debugger is loaded - @return: Boolean - - -ida_dbg.define_exception(): - - define_exception(code, name, desc, flags) -> char const * - - - Convenience function: define new exception code. - - @param code: exception code (cannot be 0) (C++: uint) - @param name: exception name (cannot be empty or NULL) (C++: const char - *) - @param desc: exception description (maybe NULL) (C++: const char *) - @param flags: combination of Exception info flags (C++: int) - @return: failure message or NULL. You must call store_exceptions() - if this function succeeds - - -ida_dbg.del_bpt(): - - del_bpt(ea) -> bool - del_bpt(bptloc) -> bool - - - Delete an existing breakpoint in the debugged process. \sq{Type, - Synchronous function - available as request, Notification, none - (synchronous function)} - - @param ea: any address in the breakpoint range (C++: ea_t) - - -ida_dbg.del_bptgrp(): - - del_bptgrp(name) -> bool - - -ida_dbg.del_virt_module(): - - del_virt_module(base) -> bool - - -ida_dbg.detach_process(): - - detach_process() -> bool - - - Detach the debugger from the debugged process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_detach' } - - -ida_dbg.diff_trace_file(): - - diff_trace_file(nonnul_filename) -> bool - - - Show difference between the current trace and the one from 'filename'. - - -ida_dbg.disable_bblk_trace(): - - disable_bblk_trace() -> bool - - -ida_dbg.disable_bpt(): - - disable_bpt(ea) -> bool - disable_bpt(bptloc) -> bool - - -ida_dbg.disable_func_trace(): - - disable_func_trace() -> bool - - -ida_dbg.disable_insn_trace(): - - disable_insn_trace() -> bool - - -ida_dbg.disable_step_trace(): - - disable_step_trace() -> bool - - -ida_dbg.edit_manual_regions(): - - edit_manual_regions() - - -ida_dbg.enable_bblk_trace(): - - enable_bblk_trace(enable=True) -> bool - - -ida_dbg.enable_bpt(): - - enable_bpt(ea, enable=True) -> bool - enable_bpt(bptloc, enable=True) -> bool - - -ida_dbg.enable_func_trace(): - - enable_func_trace(enable=True) -> bool - - -ida_dbg.enable_insn_trace(): - - enable_insn_trace(enable=True) -> bool - - -ida_dbg.enable_manual_regions(): - - enable_manual_regions(enable) - - -ida_dbg.enable_step_trace(): - - enable_step_trace(enable=True) -> bool - - -class ida_dbg.eval_ctx_t(): - - Proxy of C++ eval_ctx_t class - - -ida_dbg.eval_ctx_t.ea: - eval_ctx_t_ea_get(self) -> ea_t - -ida_dbg.exist_bpt(): - - exist_bpt(ea) -> bool - - - Does a breakpoint exist at the given location? - - - @param ea (C++: ea_t) - - -ida_dbg.exit_process(): - - exit_process() -> bool - - - Terminate the debugging of the current process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_exit' } - - -ida_dbg.find_bpt(): - - find_bpt(bptloc, bpt) -> bool - - - Find a breakpoint by location. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param bptloc: Breakpoint location (C++: const bpt_location_t &) - @param bpt: bpt is filled if the breakpoint was found (C++: bpt_t *) - - -ida_dbg.get_bblk_trace_options(): - - get_bblk_trace_options() -> int - - - Get current basic block tracing options. Also see 'BT_LOG_INSTS' - \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - -ida_dbg.get_bpt(): - - get_bpt(ea, bpt) -> bool - - - Get the characteristics of a breakpoint. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param ea: any address in the breakpoint range (C++: ea_t) - @param bpt: if not NULL, is filled with the characteristics. (C++: - bpt_t *) - @return: false if no breakpoint exists - - -ida_dbg.get_bpt_group(): - - get_bpt_group(bptloc) -> bool - - -ida_dbg.get_bpt_qty(): - - get_bpt_qty() -> int - - - Get number of breakpoints. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - -ida_dbg.get_bpt_tev_ea(): - - get_bpt_tev_ea(n) -> ea_t - - - Get the address associated to a read, read/write or execution trace - event. \sq{Type, Synchronous function, Notification, none (synchronous - function)}Usually, a breakpoint is associated with a read, read/write - or execution trace event. However, the returned address could be any - address in the range of this breakpoint. If the breakpoint was deleted - after the trace event, the address no longer corresponds to a valid - breakpoint. - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a read, read/write or execution trace event. - - -ida_dbg.get_bptloc_string(): - - get_bptloc_string(i) -> char const * - - - Helper function for 'bpt_location_t' . - - - @param i (C++: int) - - -ida_dbg.get_call_tev_callee(): - - get_call_tev_callee(n) -> ea_t - - - Get the called function from a function call trace event. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a function call event. - - -ida_dbg.get_current_source_file(): - - get_current_source_file(path) -> bool - - -ida_dbg.get_current_source_line(): - - get_current_source_line() -> int - - -ida_dbg.get_current_thread(): - - get_current_thread() -> thid_t - - - Get current thread ID. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - -ida_dbg.get_dbg_byte(): - - get_dbg_byte(x, ea) -> bool - - - Get one byte of the debugged process memory. - - @param x: pointer to byte value (C++: uint32 *) - @param ea: linear address (C++: ea_t) - @return: true success - - -ida_dbg.get_dbg_memory_info(): - - get_dbg_memory_info(ranges) -> int - - -ida_dbg.get_dbg_reg_info(): - - get_dbg_reg_info(regname, ri) -> bool - - - Get register information \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param regname (C++: const char *) - @param ri (C++: register_info_t *) - - -ida_dbg.get_debug_event(): - - get_debug_event() -> debug_event_t - - - Get the current debugger event. - - -ida_dbg.get_debugger_event_cond(): - - get_debugger_event_cond() -> char const * - - -ida_dbg.get_first_module(): - - get_first_module(modinfo) -> bool - - -ida_dbg.get_func_trace_options(): - - get_func_trace_options() -> int - - - Get current function tracing options. Also see 'FT_LOG_RET' \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - -ida_dbg.get_global_var(): - - get_global_var(prov, ea, name, out) -> bool - - -ida_dbg.get_grp_bpts(): - - get_grp_bpts(bpts, grp_name) -> ssize_t - - -ida_dbg.get_insn_tev_reg_mem(): - - get_insn_tev_reg_mem(n, memmap) -> bool - - - Read the memory pointed by register values from an instruction trace - event. \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param memmap: result (C++: memreg_infos_t *) - @return: false if not an instruction event or no memory is available - - -ida_dbg.get_insn_tev_reg_result(): - - get_insn_tev_reg_result(n, regname, regval) -> bool - - - Read the resulting register value from an instruction trace event. - \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param regname: name of desired register (C++: const char *) - @param regval: result (C++: regval_t *) - @return: false if not an instruction trace event or register wasn't - modified. - - -ida_dbg.get_insn_tev_reg_val(): - - get_insn_tev_reg_val(n, regname, regval) -> bool - - - Read a register value from an instruction trace event. \sq{Type, - Synchronous function, Notification, none (synchronous function)}This - is the value of the register before the execution of the instruction. - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param regname: name of desired register (C++: const char *) - @param regval: result (C++: regval_t *) - @return: false if not an instruction event. - - -ida_dbg.get_insn_trace_options(): - - get_insn_trace_options() -> int - - - Get current instruction tracing options. Also see 'IT_LOG_SAME_IP' - \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - -ida_dbg.get_ip_val(): - - get_ip_val() -> bool - - - Get value of the IP (program counter) register for the current thread. - Requires a suspended debugger. - - -ida_dbg.get_local_var(): - - get_local_var(prov, ea, name, out) -> bool - - -ida_dbg.get_local_vars(): - - get_local_vars(prov, ea, out) -> bool - - -ida_dbg.get_manual_regions(): - - get_manual_regions(ranges) - get_manual_regions() -> PyObject * - - - Returns the manual memory regions - @return: list(start_ea, end_ea, name, sclass, sbase, bitness, perm) - - -ida_dbg.get_module_info(): - - get_module_info(ea, modinfo) -> bool - - -ida_dbg.get_next_module(): - - get_next_module(modinfo) -> bool - - -ida_dbg.get_process_options(): - - get_process_options(path, args, sdir, host, _pass, port) - - - Get process options. Any of the arguments may be NULL - - @param path (C++: qstring *) - @param args (C++: qstring *) - @param sdir (C++: qstring *) - @param host (C++: qstring *) - @param port (C++: int *) - - -ida_dbg.get_process_state(): - - get_process_state() -> int - - - Return the state of the currently debugged process. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @return: one of Debugged process states - - -ida_dbg.get_processes(): - - get_processes(proclist) -> ssize_t - - - Take a snapshot of running processes and return their description. - \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - @param proclist (C++: procinfo_vec_t *) - @return: number of processes or -1 on error - - -ida_dbg.get_reg_val(): - - get_reg_val(regname, regval) -> bool - get_reg_val(regname, ival) -> bool - get_reg_val(regname) -> PyObject * - - - Read a register value from the current thread. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param regname (C++: const char *) - @param regval (C++: regval_t *) - - -ida_dbg.get_reg_vals(): - - get_reg_vals(tid, clsmask, values) -> int - - -ida_dbg.get_ret_tev_return(): - - get_ret_tev_return(n) -> ea_t - - - Get the return address from a function return trace event. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a function return event. - - -ida_dbg.get_running_notification(): - - get_running_notification() -> dbg_notification_t - - - Get the notification associated (if any) with the current running - request. \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @return: dbg_null if no running request - - -ida_dbg.get_running_request(): - - get_running_request() -> ui_notification_t - - - Get the current running request. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @return: ui_null if no running request - - -ida_dbg.get_sp_val(): - - get_sp_val() -> bool - - - Get value of the SP register for the current thread. Requires a - suspended debugger. - - -ida_dbg.get_srcinfo_provider(): - - get_srcinfo_provider(name) -> srcinfo_provider_t * - - -ida_dbg.get_step_trace_options(): - - get_step_trace_options() -> int - - - Get current step tracing options. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @return: Step trace options - - -ida_dbg.get_tev_ea(): - - get_tev_ea(n) -> ea_t - - -ida_dbg.get_tev_event(): - - get_tev_event(n, d) -> bool - - - Get the corresponding debug event, if any, for the specified tev - object. \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param d: result (C++: debug_event_t *) - @return: false if the tev_t object doesn't have any associated debug - event, true otherwise, with the debug event in "d". - - -ida_dbg.get_tev_info(): - - get_tev_info(n, tev_info) -> bool - - - Get main information about a trace event. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param tev_info: result (C++: tev_info_t *) - @return: success - - -ida_dbg.get_tev_memory_info(): - - get_tev_memory_info(n, mi) -> bool - - - Get the memory layout, if any, for the specified tev object. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @param mi: result (C++: meminfo_vec_t *) - @return: false if the tev_t object is not of type tev_mem , true - otherwise, with the new memory layout in "mi". - - -ida_dbg.get_tev_qty(): - - get_tev_qty() -> int - - - Get number of trace events available in trace buffer. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - -ida_dbg.get_tev_tid(): - - get_tev_tid(n) -> int - - -ida_dbg.get_tev_type(): - - get_tev_type(n) -> int - - -ida_dbg.get_thread_qty(): - - get_thread_qty() -> int - - - Get number of threads. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - -ida_dbg.get_trace_base_address(): - - get_trace_base_address() -> ea_t - - - Get the base address of the current trace. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @return: the base address of the currently loaded trace - - -ida_dbg.get_trace_file_desc(): - - get_trace_file_desc(filename) -> bool - - - Get the file header of the specified trace file. - - - @param filename (C++: const char *) - - -ida_dbg.get_trace_platform(): - - get_trace_platform() -> char const * - - - Get platform name of current trace. - - -ida_dbg.getn_bpt(): - - getn_bpt(n, bpt) -> bool - - - Get the characteristics of a breakpoint. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param n: number of breakpoint, is in range 0.. get_bpt_qty() -1 (C++: - int) - @param bpt: filled with the characteristics. (C++: bpt_t *) - @return: false if no breakpoint exists - - -ida_dbg.getn_thread(): - - getn_thread(n) -> thid_t - - - Get the ID of a thread. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: - int) - @return: NO_THREAD if the thread doesn't exist. - - -ida_dbg.getn_thread_name(): - - getn_thread_name(n) -> char const * - - - Get the NAME of a thread \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 - for the current thread (C++: int) - @return: thread name or NULL if the thread doesn't exist. - - -ida_dbg.graph_trace(): - - graph_trace() -> bool - - - Show the trace callgraph. - - -ida_dbg.handle_debug_event(): - - handle_debug_event(ev, rqflags) -> int - - -ida_dbg.hide_all_bpts(): - - hide_all_bpts() -> int - - -ida_dbg.internal_get_sreg_base(): - - internal_get_sreg_base(tid, sreg_value) -> ea_t - - - Get the sreg base, for the given thread. - - @return: The sreg base, or BADADDR on failure. - - -ida_dbg.internal_ioctl(): - - internal_ioctl(fn, buf, poutbuf, poutsize) -> int - - -ida_dbg.invalidate_dbg_state(): - - invalidate_dbg_state(dbginv) -> int - - - Invalidate cached debugger information. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param dbginv: Debugged process invalidation options (C++: int) - @return: current debugger state (one of Debugged process states ) - - -ida_dbg.invalidate_dbgmem_config(): - - invalidate_dbgmem_config() - - - Invalidate the debugged process memory configuration. Call this - function if the debugged process might have changed its memory layout - (allocated more memory, for example) - - -ida_dbg.invalidate_dbgmem_contents(): - - invalidate_dbgmem_contents(ea, size) - - - Invalidate the debugged process memory contents. Call this function - each time the process has been stopped or the process memory is - modified. If ea == 'BADADDR' , then the whole memory contents will be - invalidated - - @param ea (C++: ea_t) - @param size (C++: asize_t) - - -ida_dbg.is_bblk_trace_enabled(): - - is_bblk_trace_enabled() -> bool - - -ida_dbg.is_debugger_busy(): - - is_debugger_busy() -> bool - - - Is the debugger busy?. Some debuggers do not accept any commands while - the debugged application is running. For such a debugger, it is unsafe - to do anything with the database (even simple queries like get_byte - may lead to undesired consequences). Returns: true if the debugged - application is running under such a debugger - - -ida_dbg.is_debugger_memory(): - - is_debugger_memory(ea) -> bool - - - Is the address mapped to debugger memory? - - - @param ea (C++: ea_t) - - -ida_dbg.is_debugger_on(): - - is_debugger_on() -> bool - - - Is the debugger currently running? - - -ida_dbg.is_func_trace_enabled(): - - is_func_trace_enabled() -> bool - - - Get current state of functions tracing. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - -ida_dbg.is_insn_trace_enabled(): - - is_insn_trace_enabled() -> bool - - - Get current state of instructions tracing. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - -ida_dbg.is_reg_custom(): - - is_reg_custom(regname) -> bool - - - Does a register contain a value of a custom data type? \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param regname (C++: const char *) - - -ida_dbg.is_reg_float(): - - is_reg_float(regname) -> bool - - - Does a register contain a floating point value? \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param regname (C++: const char *) - - -ida_dbg.is_reg_integer(): - - is_reg_integer(regname) -> bool - - - Does a register contain an integer value? \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param regname (C++: const char *) - - -ida_dbg.is_request_running(): - - is_request_running() -> bool - - - Is a request currently running? - - -ida_dbg.is_step_trace_enabled(): - - is_step_trace_enabled() -> bool - - - Get current state of step tracing. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - -ida_dbg.is_valid_trace_file(): - - is_valid_trace_file(filename) -> bool - - - Is the specified file a valid trace file for the current database? - - - @param filename (C++: const char *) - - -ida_dbg.list_bptgrps(): - - list_bptgrps(bptgrps) -> size_t - list_bptgrps() -> PyObject * - - -ida_dbg.load_debugger(): - - load_debugger(dbgname, use_remote) -> bool - - -ida_dbg.load_trace_file(): - - load_trace_file(filename) -> bool - - - Load a recorded trace file in the trace window. If the call succeeds - and 'buf' is not null, the description of the trace stored in the - binary trace file will be returned in 'buf' - - @param filename (C++: const char *) - - -class ida_dbg.memreg_info_t(): - - Proxy of C++ memreg_info_t class - - -ida_dbg.memreg_info_t.bytes: - - get_bytes(self) -> PyObject * - - -ida_dbg.memreg_info_t.ea: - memreg_info_t_ea_get(self) -> ea_t - -ida_dbg.memreg_info_t.get_bytes(): - - get_bytes(self) -> PyObject * - - -class ida_dbg.memreg_infos_t(): - - Proxy of C++ qvector<(memreg_info_t)> class - - -ida_dbg.memreg_infos_t.at(): - - at(self, _idx) -> memreg_info_t - - -ida_dbg.memreg_infos_t.begin(): - - begin(self) -> memreg_info_t - begin(self) -> memreg_info_t - - -ida_dbg.memreg_infos_t.capacity(): - - capacity(self) -> size_t - - -ida_dbg.memreg_infos_t.clear(): - - clear(self) - - -ida_dbg.memreg_infos_t.empty(): - - empty(self) -> bool - - -ida_dbg.memreg_infos_t.end(): - - end(self) -> memreg_info_t - end(self) -> memreg_info_t - - -ida_dbg.memreg_infos_t.erase(): - - erase(self, it) -> memreg_info_t - erase(self, first, last) -> memreg_info_t - - -ida_dbg.memreg_infos_t.extract(): - - extract(self) -> memreg_info_t - - -ida_dbg.memreg_infos_t.grow(): - - grow(self, x=memreg_info_t()) - - -ida_dbg.memreg_infos_t.inject(): - - inject(self, s, len) - - -ida_dbg.memreg_infos_t.insert(): - - insert(self, it, x) -> memreg_info_t - - -ida_dbg.memreg_infos_t.pop_back(): - - pop_back(self) - - -ida_dbg.memreg_infos_t.push_back(): - - push_back(self, x) - push_back(self) -> memreg_info_t - - -ida_dbg.memreg_infos_t.qclear(): - - qclear(self) - - -ida_dbg.memreg_infos_t.reserve(): - - reserve(self, cnt) - - -ida_dbg.memreg_infos_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_dbg.memreg_infos_t.size(): - - size(self) -> size_t - - -ida_dbg.memreg_infos_t.swap(): - - swap(self, r) - - -ida_dbg.memreg_infos_t.truncate(): - - truncate(self) - - -ida_dbg.move_bpt_to_grp(): - - move_bpt_to_grp(bpt, grp_name) - - - Sets new group for the breakpoint - - -ida_dbg.put_dbg_byte(): - - put_dbg_byte(ea, x) -> bool - - - Change one byte of the debugged process memory. - - @param ea: linear address (C++: ea_t) - @param x: byte value (C++: uint32) - @return: true if the process memory has been modified - - -ida_dbg.read_dbg_memory(): - - read_dbg_memory(ea, buffer, size) -> ssize_t - - -ida_dbg.refresh_debugger_memory(): - - refresh_debugger_memory() -> PyObject * - - - Refreshes the debugger memory - @return: Nothing - - -ida_dbg.rename_bptgrp(): - - rename_bptgrp(old_name, new_name) -> bool - - -ida_dbg.request_add_bpt(): - - request_add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool - request_add_bpt(bpt) -> bool - - - Post an 'add_bpt(ea_t, asize_t, bpttype_t)' request. - - - @param ea (C++: ea_t) - @param size (C++: asize_t) - @param type (C++: bpttype_t) - - -ida_dbg.request_attach_process(): - - request_attach_process(pid, event_id) -> int - - - Post an 'attach_process()' request. - - - @param pid (C++: pid_t) - @param event_id (C++: int) - - -ida_dbg.request_clear_trace(): - - request_clear_trace() - - - Post a 'clear_trace()' request. - - -ida_dbg.request_continue_process(): - - request_continue_process() -> bool - - - Post a 'continue_process()' request.This requires an explicit call to - 'run_requests()' - - -ida_dbg.request_del_bpt(): - - request_del_bpt(ea) -> bool - request_del_bpt(bptloc) -> bool - - - Post a 'del_bpt(ea_t)' request. - - - @param ea (C++: ea_t) - - -ida_dbg.request_detach_process(): - - request_detach_process() -> bool - - - Post a 'detach_process()' request. - - -ida_dbg.request_disable_bblk_trace(): - - request_disable_bblk_trace() -> bool - - -ida_dbg.request_disable_bpt(): - - request_disable_bpt(ea) -> bool - request_disable_bpt(bptloc) -> bool - - -ida_dbg.request_disable_func_trace(): - - request_disable_func_trace() -> bool - - -ida_dbg.request_disable_insn_trace(): - - request_disable_insn_trace() -> bool - - -ida_dbg.request_disable_step_trace(): - - request_disable_step_trace() -> bool - - -ida_dbg.request_enable_bblk_trace(): - - request_enable_bblk_trace(enable=True) -> bool - - -ida_dbg.request_enable_bpt(): - - request_enable_bpt(ea, enable=True) -> bool - request_enable_bpt(bptloc, enable=True) -> bool - - -ida_dbg.request_enable_func_trace(): - - request_enable_func_trace(enable=True) -> bool - - -ida_dbg.request_enable_insn_trace(): - - request_enable_insn_trace(enable=True) -> bool - - -ida_dbg.request_enable_step_trace(): - - request_enable_step_trace(enable=True) -> bool - - -ida_dbg.request_exit_process(): - - request_exit_process() -> bool - - - Post an 'exit_process()' request. - - -ida_dbg.request_resume_thread(): - - request_resume_thread(tid) -> int - - - Post a 'resume_thread()' request. - - - @param tid (C++: thid_t) - - -ida_dbg.request_run_to(): - - request_run_to(ea, pid=pid_t(-1), tid=0) -> bool - - - Post a 'run_to()' request. - - - @param ea (C++: ea_t) - @param pid (C++: pid_t) - @param tid (C++: thid_t) - - -ida_dbg.request_select_thread(): - - request_select_thread(tid) -> bool - - - Post a 'select_thread()' request. - - - @param tid (C++: thid_t) - - -ida_dbg.request_set_bblk_trace_options(): - - request_set_bblk_trace_options(options) - - - Post a 'set_bblk_trace_options()' request. - - - @param options (C++: int) - - -ida_dbg.request_set_func_trace_options(): - - request_set_func_trace_options(options) - - - Post a 'set_func_trace_options()' request. - - - @param options (C++: int) - - -ida_dbg.request_set_insn_trace_options(): - - request_set_insn_trace_options(options) - - - Post a 'set_insn_trace_options()' request. - - - @param options (C++: int) - - -ida_dbg.request_set_reg_val(): - - request_set_reg_val(regname, o) -> PyObject * - - - Post a 'set_reg_val()' request. - - - @param regname (C++: const char *) - - -ida_dbg.request_set_resume_mode(): - - request_set_resume_mode(tid, mode) -> bool - - - Post a 'set_resume_mode()' request. - - - @param tid (C++: thid_t) - @param mode (C++: resume_mode_t) - - -ida_dbg.request_set_step_trace_options(): - - request_set_step_trace_options(options) - - - Post a 'set_step_trace_options()' request. - - - @param options (C++: int) - - -ida_dbg.request_start_process(): - - request_start_process(path=None, args=None, sdir=None) -> int - - - Post a 'start_process()' request. - - - @param path (C++: const char *) - @param args (C++: const char *) - @param sdir (C++: const char *) - - -ida_dbg.request_step_into(): - - request_step_into() -> bool - - - Post a 'step_into()' request. - - -ida_dbg.request_step_over(): - - request_step_over() -> bool - - - Post a 'step_over()' request. - - -ida_dbg.request_step_until_ret(): - - request_step_until_ret() -> bool - - - Post a 'step_until_ret()' request. - - -ida_dbg.request_suspend_process(): - - request_suspend_process() -> bool - - - Post a 'suspend_process()' request. - - -ida_dbg.request_suspend_thread(): - - request_suspend_thread(tid) -> int - - - Post a 'suspend_thread()' request. - - - @param tid (C++: thid_t) - - -ida_dbg.resume_thread(): - - resume_thread(tid) -> int - - - Resume thread. \sq{Type, Synchronous function - available as request, - Notification, none (synchronous function)} - - @param tid: thread id (C++: thid_t) - - -ida_dbg.retrieve_exceptions(): - - retrieve_exceptions() -> excvec_t - - - Retrieve the exception information. You may freely modify the returned - vector and add/edit/delete exceptions You must call - 'store_exceptions()' after any modifications Note: exceptions with - code zero, multiple exception codes or names are prohibited - - -ida_dbg.run_requests(): - - run_requests() -> bool - - - Execute requests until all requests are processed or an asynchronous - function is called. \sq{Type, Synchronous function, Notification, none - (synchronous function)}If called from a notification handler, the - execution of requests will be postponed to the end of the execution of - all notification handlers. - - @return: false if not all requests could be processed (indicates an - asynchronous function was started) - - -ida_dbg.run_to(): - - run_to(ea, pid=pid_t(-1), tid=0) -> bool - - - Execute the process until the given address is reached. If no process - is active, a new process is started. Technically, the debugger sets up - a temporary breakpoint at the given address, and continues (or starts) - the execution of the whole process. So, all threads continue their - execution! \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_run_to' } - - @param ea: target address (C++: ea_t) - @param pid: not used yet. please do not specify this parameter. (C++: - pid_t) - @param tid: not used yet. please do not specify this parameter. (C++: - thid_t) - - -ida_dbg.save_trace_file(): - - save_trace_file(filename, description) -> bool - - - Save the current trace in the specified file. - - - @param filename (C++: const char *) - @param description (C++: const char *) - - -ida_dbg.select_thread(): - - select_thread(tid) -> bool - - - Select the given thread as the current debugged thread. All thread - related execution functions will work on this thread. The process must - be suspended to select a new thread. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param tid: ID of the thread to select (C++: thid_t) - @return: false if the thread doesn't exist. - - -ida_dbg.send_dbg_command(): - - Send a direct command to the debugger backend, and - retrieve the result as a string. - - Note: any double-quotes in 'command' must be backslash-escaped. - Note: this only works with some debugger backends: Bochs, WinDbg, GDB. - - Returns: (True, ) on success, or (False, ) on failure - - -ida_dbg.set_bblk_trace_options(): - - set_bblk_trace_options(options) - - - Modify basic block tracing options (see 'BT_LOG_INSTS' ) - - - @param options (C++: int) - - -ida_dbg.set_bpt_group(): - - set_bpt_group(bpt, grp_name) - - -ida_dbg.set_bptloc_group(): - - set_bptloc_group(bptloc, grp_name) -> bool - - -ida_dbg.set_bptloc_string(): - - set_bptloc_string(s) -> int - - - Helper function for 'bpt_location_t' . - - - @param s (C++: const char *) - - -ida_dbg.set_debugger_event_cond(): - - set_debugger_event_cond(nonnul_cond) - - -ida_dbg.set_debugger_options(): - - set_debugger_options(options) -> uint - - - Set debugger options. Replaces debugger options with the specification - combination 'Debugger options' - - @param options (C++: uint) - @return: the old debugger options - - -ida_dbg.set_func_trace_options(): - - set_func_trace_options(options) - - - Modify function tracing options. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param options (C++: int) - - -ida_dbg.set_highlight_trace_options(): - - set_highlight_trace_options(hilight, color, diff) - - - Set highlight trace parameters. - - - @param hilight (C++: bool) - @param color (C++: bgcolor_t) - @param diff (C++: bgcolor_t) - - -ida_dbg.set_insn_trace_options(): - - set_insn_trace_options(options) - - - Modify instruction tracing options. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param options (C++: int) - - -ida_dbg.set_manual_regions(): - - set_manual_regions(ranges) - - -ida_dbg.set_process_options(): - - set_process_options(path, args, sdir, host, _pass, port) - - - Set process options. Any of the arguments may be NULL, which means 'do - not modify' - - @param path (C++: const char *) - @param args (C++: const char *) - @param sdir (C++: const char *) - @param host (C++: const char *) - @param port (C++: int) - - -ida_dbg.set_process_state(): - - set_process_state(newstate, p_thid, dbginv) -> int - - - Set new state for the debugged process. Notifies the IDA kernel about - the change of the debugged process state. For example, a debugger - module could call this function when it knows that the process is - suspended for a short period of time. Some IDA API calls can be made - only when the process is suspended. The process state is usually - restored before returning control to the caller. You must know that it - is ok to change the process state, doing it at arbitrary moments may - crash the application or IDA. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param newstate: new process state (one of Debugged process states ) - if DSTATE_NOTASK is passed then the state is not - changed (C++: int) - @param p_thid: ptr to new thread id. may be NULL or pointer to - NO_THREAD . the pointed variable will contain the old - thread id upon return (C++: thid_t *) - @param dbginv: Debugged process invalidation options (C++: int) - @return: old debugger state (one of Debugged process states ) - - -ida_dbg.set_reg_val(): - - set_reg_val(regname, o) -> PyObject - set_reg_val(tid, regidx, o) -> PyObject * - - - Write a register value to the current thread. \sq{Type, Synchronous - function - available as Request, Notification, none (synchronous - function)} - - @param regname (C++: const char *) - - -ida_dbg.set_remote_debugger(): - - set_remote_debugger(host, _pass, port=-1) - - - Set remote debugging options. Should be used before starting the - debugger. - - @param host: If empty, IDA will use local debugger. If NULL, the host - will not be set. (C++: const char *) - @param port: If -1, the default port number will be used (C++: int) - - -ida_dbg.set_resume_mode(): - - set_resume_mode(tid, mode) -> bool - - - How to resume the application. Set resume mode but do not resume - process. - - @param tid (C++: thid_t) - @param mode (C++: resume_mode_t) - - -ida_dbg.set_step_trace_options(): - - set_step_trace_options(options) - - - Modify step tracing options. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param options (C++: int) - - -ida_dbg.set_trace_base_address(): - - set_trace_base_address(ea) - - - Set the base address of the current trace. \sq{Type, Synchronous - function, Notification, none (synchronous function)} - - @param ea (C++: ea_t) - - -ida_dbg.set_trace_file_desc(): - - set_trace_file_desc(filename, description) -> bool - - - Change the description of the specified trace file. - - - @param filename (C++: const char *) - @param description (C++: const char *) - - -ida_dbg.set_trace_platform(): - - set_trace_platform(platform) - - - Set platform name of current trace. - - - @param platform (C++: const char *) - - -ida_dbg.set_trace_size(): - - set_trace_size(size) -> bool - - - Specify the new size of the circular buffer. \sq{Type, Synchronous - function, Notification, none (synchronous function)}If you specify 0, - all available memory can be quickly used !!! - - @param size: if 0, buffer isn't circular and events are never removed. - If the new size is smaller than the existing number of - trace events, a corresponding number of trace events are - removed. (C++: int) - - -ida_dbg.srcdbg_request_step_into(): - - srcdbg_request_step_into() -> bool - - -ida_dbg.srcdbg_request_step_over(): - - srcdbg_request_step_over() -> bool - - -ida_dbg.srcdbg_request_step_until_ret(): - - srcdbg_request_step_until_ret() -> bool - - -ida_dbg.srcdbg_step_into(): - - srcdbg_step_into() -> bool - - -ida_dbg.srcdbg_step_over(): - - srcdbg_step_over() -> bool - - -ida_dbg.srcdbg_step_until_ret(): - - srcdbg_step_until_ret() -> bool - - -ida_dbg.start_process(): - - start_process(path=None, args=None, sdir=None) -> int - - - Start a process in the debugger. \sq{Type, Asynchronous function - - available as Request, Notification, 'dbg_process_start' }You can also - use the 'run_to()' function to easily start the execution of a process - until a given address is reached.For all parameters, a NULL value - indicates the debugger will take the value from the defined Process - Options. - - @param path: path to the executable to start (C++: const char *) - @param args: arguments to pass to process (C++: const char *) - @param sdir: starting directory for the process (C++: const char *) - - -ida_dbg.step_into(): - - step_into() -> bool - - - Execute one instruction in the current thread. Other threads are kept - suspended. \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_step_into' } - - -ida_dbg.step_over(): - - step_over() -> bool - - - Execute one instruction in the current thread, but without entering - into functions. Others threads keep suspended. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_step_over' } - - -ida_dbg.step_until_ret(): - - step_until_ret() -> bool - - - Execute instructions in the current thread until a function return - instruction is executed (aka "step out"). Other threads are kept - suspended. \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_step_until_ret' } - - -ida_dbg.store_exceptions(): - - store_exceptions() -> bool - - - Update the exception information stored in the debugger module by - invoking its dbg->set_exception_info callback - - -ida_dbg.suspend_process(): - - suspend_process() -> bool - - - Suspend the process in the debugger. \sq{ Type,Synchronous function - (if in a notification handler)Asynchronous function (everywhere - else)available as Request, Notification,none (if in a notification - handler) 'dbg_suspend_process' (everywhere else) }The - 'suspend_process()' function can be called from a notification handler - to force the stopping of the process. In this case, no notification - will be generated. When you suspend a process, the running command is - always aborted. - - -ida_dbg.suspend_thread(): - - suspend_thread(tid) -> int - - - Suspend thread. Suspending a thread may deadlock the whole application - if the suspended was owning some synchronization objects. \sq{Type, - Synchronous function - available as request, Notification, none - (synchronous function)} - - @param tid: thread id (C++: thid_t) - - -class ida_dbg.tev_info_reg_t(): - - Proxy of C++ tev_info_reg_t class - - -ida_dbg.tev_info_reg_t.info: - tev_info_reg_t_info_get(self) -> tev_info_t - -ida_dbg.tev_info_reg_t.registers: - tev_info_reg_t_registers_get(self) -> tev_reg_values_t - -class ida_dbg.tev_info_t(): - - Proxy of C++ tev_info_t class - - -ida_dbg.tev_info_t.ea: - tev_info_t_ea_get(self) -> ea_t - -ida_dbg.tev_info_t.tid: - tev_info_t_tid_get(self) -> thid_t - -ida_dbg.tev_info_t.type: - tev_info_t_type_get(self) -> tev_type_t - -class ida_dbg.tev_reg_value_t(): - - Proxy of C++ tev_reg_value_t class - - -ida_dbg.tev_reg_value_t.reg_idx: - tev_reg_value_t_reg_idx_get(self) -> int - -ida_dbg.tev_reg_value_t.value: - tev_reg_value_t_value_get(self) -> regval_t - -class ida_dbg.tev_reg_values_t(): - - Proxy of C++ qvector<(tev_reg_value_t)> class - - -ida_dbg.tev_reg_values_t.at(): - - at(self, _idx) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.begin(): - - begin(self) -> tev_reg_value_t - begin(self) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.capacity(): - - capacity(self) -> size_t - - -ida_dbg.tev_reg_values_t.clear(): - - clear(self) - - -ida_dbg.tev_reg_values_t.empty(): - - empty(self) -> bool - - -ida_dbg.tev_reg_values_t.end(): - - end(self) -> tev_reg_value_t - end(self) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.erase(): - - erase(self, it) -> tev_reg_value_t - erase(self, first, last) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.extract(): - - extract(self) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.grow(): - - grow(self, x=tev_reg_value_t()) - - -ida_dbg.tev_reg_values_t.inject(): - - inject(self, s, len) - - -ida_dbg.tev_reg_values_t.insert(): - - insert(self, it, x) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.pop_back(): - - pop_back(self) - - -ida_dbg.tev_reg_values_t.push_back(): - - push_back(self, x) - push_back(self) -> tev_reg_value_t - - -ida_dbg.tev_reg_values_t.qclear(): - - qclear(self) - - -ida_dbg.tev_reg_values_t.reserve(): - - reserve(self, cnt) - - -ida_dbg.tev_reg_values_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_dbg.tev_reg_values_t.size(): - - size(self) -> size_t - - -ida_dbg.tev_reg_values_t.swap(): - - swap(self, r) - - -ida_dbg.tev_reg_values_t.truncate(): - - truncate(self) - - -class ida_dbg.tevinforeg_vec_t(): - - Proxy of C++ qvector<(tev_info_reg_t)> class - - -ida_dbg.tevinforeg_vec_t.at(): - - at(self, _idx) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.begin(): - - begin(self) -> tev_info_reg_t - begin(self) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_dbg.tevinforeg_vec_t.clear(): - - clear(self) - - -ida_dbg.tevinforeg_vec_t.empty(): - - empty(self) -> bool - - -ida_dbg.tevinforeg_vec_t.end(): - - end(self) -> tev_info_reg_t - end(self) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.erase(): - - erase(self, it) -> tev_info_reg_t - erase(self, first, last) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.extract(): - - extract(self) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.grow(): - - grow(self, x=tev_info_reg_t()) - - -ida_dbg.tevinforeg_vec_t.inject(): - - inject(self, s, len) - - -ida_dbg.tevinforeg_vec_t.insert(): - - insert(self, it, x) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.pop_back(): - - pop_back(self) - - -ida_dbg.tevinforeg_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> tev_info_reg_t - - -ida_dbg.tevinforeg_vec_t.qclear(): - - qclear(self) - - -ida_dbg.tevinforeg_vec_t.reserve(): - - reserve(self, cnt) - - -ida_dbg.tevinforeg_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_dbg.tevinforeg_vec_t.size(): - - size(self) -> size_t - - -ida_dbg.tevinforeg_vec_t.swap(): - - swap(self, r) - - -ida_dbg.tevinforeg_vec_t.truncate(): - - truncate(self) - - -ida_dbg.update_bpt(): - - update_bpt(bpt) -> bool - - - Update modifiable characteristics of an existing breakpoint. To update - the breakpoint location, use 'change_bptlocs()' \sq{Type, Synchronous - function, Notification, none (synchronous function)}Only the following - fields can be modified: 'bpt_t::cndbody' 'bpt_t::pass_count' - 'bpt_t::flags' 'bpt_t::size' 'bpt_t::type' Changing some properties - will require removing and then re-adding the breakpoint to the process - memory (or the debugger backend), which can lead to race conditions - (i.e., breakpoint(s) can be missed) in case the process is not - suspended. Here are a list of scenarios that will require the - breakpoint to be removed & then re-added: 'bpt_t::size' is modified - 'bpt_t::type' is modified 'bpt_t::flags' 's BPT_ENABLED is modified - 'bpt_t::flags' 's BPT_LOWCND is changed 'bpt_t::flags' 's BPT_LOWCND - remains set, but cndbody changed - - @param bpt (C++: const bpt_t *) - - -ida_dbg.wait_for_next_event(): - - wait_for_next_event(wfne, timeout) -> dbg_event_code_t - - - Wait for the next event.This function (optionally) resumes the process - execution, and waits for a debugger event until a possible timeout - occurs. - - @param wfne: combination of Wait for debugger event flags constants - (C++: int) - @param timeout: number of seconds to wait, -1-infinity (C++: int) - @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= - 0) - - -ida_dbg.write_dbg_memory(): - - write_dbg_memory(ea, py_buf, size=size_t(-1)) -> ssize_t - - - -=== ida_dbg EPYDOC INJECTIONS === -ida_dbg.BKPT_ACTIVE -""" -active? -""" - -ida_dbg.BKPT_BADBPT -""" -failed to write the bpt to the process memory (at least one location) -""" - -ida_dbg.BKPT_CNDREADY -""" -condition has been compiled -""" - -ida_dbg.BKPT_FAKEPEND -""" -bpt of the same type is active at the same address(es) - -fake pending bpt: it is inactive but another -""" - -ida_dbg.BKPT_LISTBPT -""" -include in bpt list (user-defined bpt) -""" - -ida_dbg.BKPT_PAGE -""" -only after writing the bpt to the process. - -written to the process as a page bpt. is available -""" - -ida_dbg.BKPT_PARTIAL -""" -partially active? (some locations were not written yet) -""" - -ida_dbg.BKPT_TRACE -""" -trace bpt; should not be deleted when the process gets suspended -""" - -ida_dbg.BPTCK_ACT -""" -breakpoint is active (written to the process) -""" - -ida_dbg.BPTCK_NO -""" -breakpoint is disabled -""" - -ida_dbg.BPTCK_NONE -""" -breakpoint does not exist -""" - -ida_dbg.BPTCK_YES -""" -breakpoint is enabled -""" - -ida_dbg.BPTEV_ADDED -""" -Breakpoint has been added. -""" - -ida_dbg.BPTEV_CHANGED -""" -Breakpoint has been modified. -""" - -ida_dbg.BPTEV_REMOVED -""" -Breakpoint has been removed. -""" - -ida_dbg.BPT_BRK -""" -suspend execution upon hit -""" - -ida_dbg.BPT_ELANG_SHIFT -""" -index of the extlang (scripting language) of the condition -""" - -ida_dbg.BPT_ENABLED -""" -enabled? -""" - -ida_dbg.BPT_LOWCND -""" -condition is calculated at low level (on the server side) -""" - -ida_dbg.BPT_TRACE -""" -add trace information upon hit -""" - -ida_dbg.BPT_TRACEON -""" -enable tracing when the breakpoint is reached -""" - -ida_dbg.BPT_TRACE_BBLK -""" -basic block tracing -""" - -ida_dbg.BPT_TRACE_FUNC -""" -function tracing -""" - -ida_dbg.BPT_TRACE_INSN -""" -instruction tracing -""" - -ida_dbg.BPT_TRACE_TYPES -""" -trace insns, functions, and basic blocks. if any of 'BPT_TRACE_TYPES' -bits are set but 'BPT_TRACEON' is clear, then turn off tracing for the -specified trace types -""" - -ida_dbg.BPT_UPDMEM -""" -refresh the memory layout and contents before evaluating bpt condition -""" - -ida_dbg.BT_LOG_INSTS -""" -log all instructions in the current basic block -""" - -ida_dbg.DBGINV_ALL -""" -invalidate everything -""" - -ida_dbg.DBGINV_MEMCFG -""" -invalidate cached process segmentation -""" - -ida_dbg.DBGINV_MEMORY -""" -invalidate cached memory contents -""" - -ida_dbg.DBGINV_NONE -""" -invalidate nothing -""" - -ida_dbg.DBGINV_REDRAW -""" -refresh the screen -""" - -ida_dbg.DBGINV_REGS -""" -invalidate cached register values -""" - -ida_dbg.DOPT_BPT_MSGS -""" -log breakpoints -""" - -ida_dbg.DOPT_END_BPT -""" -evaluate event condition on process end -""" - -ida_dbg.DOPT_ENTRY_BPT -""" -break on program entry point -""" - -ida_dbg.DOPT_EXCDLG -""" -exception dialogs: -""" - -ida_dbg.DOPT_INFO_BPT -""" -break on debugging information -""" - -ida_dbg.DOPT_INFO_MSGS -""" -log debugging info events -""" - -ida_dbg.DOPT_LIB_BPT -""" -break on library load/unload -""" - -ida_dbg.DOPT_LIB_MSGS -""" -log library loads/unloads -""" - -ida_dbg.DOPT_LOAD_DINFO -""" -automatically load debug files (pdb) -""" - -ida_dbg.DOPT_REAL_MEMORY -""" -do not hide breakpoint instructions -""" - -ida_dbg.DOPT_REDO_STACK -""" -reconstruct the stack -""" - -ida_dbg.DOPT_SEGM_MSGS -""" -log debugger segments modifications -""" - -ida_dbg.DOPT_START_BPT -""" -break on process start -""" - -ida_dbg.DOPT_TEMP_HWBPT -""" -when possible use hardware bpts for temp bpts -""" - -ida_dbg.DOPT_THREAD_BPT -""" -break on thread start/exit -""" - -ida_dbg.DOPT_THREAD_MSGS -""" -log thread starts/exits -""" - -ida_dbg.DSTATE_NOTASK -""" -no process is currently debugged -""" - -ida_dbg.DSTATE_RUN -""" -process is running -""" - -ida_dbg.DSTATE_SUSP -""" -process is suspended and will not continue -""" - -ida_dbg.EXCDLG_ALWAYS -""" -always display -""" - -ida_dbg.EXCDLG_NEVER -""" -never display exception dialogs -""" - -ida_dbg.EXCDLG_UNKNOWN -""" -display for unknown exceptions -""" - -ida_dbg.FT_LOG_RET -""" -function tracing will log returning instructions -""" - -ida_dbg.IT_LOG_SAME_IP -""" -instruction tracing will log instructions whose IP doesn't change -""" - -ida_dbg.ST_ALREADY_LOGGED -""" -step tracing will be disabled when IP is already logged -""" - -ida_dbg.ST_DIFFERENTIAL -""" -tracing: log only new instructions -""" - -ida_dbg.ST_OPTIONS_MASK -""" -mask of available options, to ensure compatibility with newer IDA -versions -""" - -ida_dbg.ST_OVER_DEBUG_SEG -""" -step tracing will be disabled when IP is in a debugger segment -""" - -ida_dbg.ST_OVER_LIB_FUNC -""" -step tracing will be disabled when IP is in a library function -""" - -ida_dbg.ST_SKIP_LOOPS -""" -step tracing will try to skip loops already recorded -""" - -ida_dbg.WFNE_ANY -""" -return the first event (even if it doesn't suspend the process) -""" - -ida_dbg.WFNE_CONT -""" -continue from the suspended state -""" - -ida_dbg.WFNE_NOWAIT -""" -(to be used with 'WFNE_CONT' ) - -do not wait for any event, immediately return 'DEC_TIMEOUT' -""" - -ida_dbg.WFNE_SILENT -""" -1: be slient, 0:display modal boxes if necessary -""" - -ida_dbg.WFNE_SUSP -""" -wait until the process gets suspended -""" - -ida_dbg.WFNE_USEC -""" -(minimum non-zero timeout is 40000us) - -timeout is specified in microseconds -""" -=== ida_dbg EPYDOC INJECTIONS END === -ida_diskio.close_linput(): - - close_linput(li) - - - Close loader input. - - - @param li (C++: linput_t *) - - -ida_diskio.create_bytearray_linput(): - - create_bytearray_linput(s) -> linput_t * - - - Trivial memory linput. - - -ida_diskio.create_generic_linput(): - - create_generic_linput(gl) -> linput_t * - - - Create a generic linput - - @param gl: linput description. this object will be destroyed by - close_linput() using "delete gl;" (C++: generic_linput_t - *) - - -ida_diskio.create_memory_linput(): - - create_memory_linput(start, size) -> linput_t * - - - Create a linput for process memory. This linput will use - read_dbg_memory() to read data. - - @param start: starting address of the input (C++: ea_t) - @param size: size of the memory area to represent as linput if - unknown, may be passed as 0 (C++: asize_t) - - -ida_diskio.eclose(): - - eclose(fp) - - -ida_diskio.enumerate_files(): - - enumerate_files(path, fname, callback) -> PyObject * - - - Enumerate files in the specified directory while the callback returns 0. - @param path: directory to enumerate files in - @param fname: mask of file names to enumerate - @param callback: a callable object that takes the filename as - its first argument and it returns 0 to continue - enumeration or non-zero to stop enumeration. - @return: - None in case of script errors - tuple(code, fname) : If the callback returns non-zero - - -ida_diskio.fopenA(): - - fopenA(file) -> FILE * - - - Open a file for append in text mode, deny none. - - @param file (C++: const char *) - @return: NULL if failure - - -ida_diskio.fopenM(): - - fopenM(file) -> FILE * - - - Open a file for read/write in binary mode, deny write. - - @param file (C++: const char *) - @return: NULL if failure - - -ida_diskio.fopenRB(): - - fopenRB(file) -> FILE * - - - Open a file for read in binary mode, deny none. - - @param file (C++: const char *) - @return: NULL if failure - - -ida_diskio.fopenRT(): - - fopenRT(file) -> FILE * - - - Open a file for read in text mode, deny none. - - @param file (C++: const char *) - @return: NULL if failure - - -ida_diskio.fopenWB(): - - fopenWB(file) -> FILE * - - - Open a new file for write in binary mode, deny read/write. If a file - exists, it will be removed. - - @param file (C++: const char *) - @return: NULL if failure - - -ida_diskio.fopenWT(): - - fopenWT(file) -> FILE * - - - Open a new file for write in text mode, deny write. If a file exists, - it will be removed. - - @param file (C++: const char *) - @return: NULL if failure - - -class ida_diskio.generic_linput_t(): - - Proxy of C++ generic_linput_t class - - -ida_diskio.generic_linput_t.blocksize: - generic_linput_t_blocksize_get(self) -> uint32 - -ida_diskio.generic_linput_t.filesize: - generic_linput_t_filesize_get(self) -> uint64 - -ida_diskio.generic_linput_t.read(): - - read(self, off, buffer, nbytes) -> ssize_t - - -ida_diskio.get_ida_subdirs(): - - get_ida_subdirs(subdir, flags=0) -> int - - - Get list of directories in which to find a specific IDA resource (see - 'IDA subdirectories' ). The order of the resulting list is as follows: - - - [$IDAUSR/subdir (0..N entries)] - - $IDADIR/subdir - - @param subdir: name of the resource to list (C++: const char *) - @param flags: Subdirectory modification flags bits (C++: int) - @return: number of directories appended to 'dirs' - - -ida_diskio.get_linput_type(): - - get_linput_type(li) -> linput_type_t - - - Get linput type. - - - @param li (C++: linput_t *) - - -ida_diskio.get_special_folder(): - - get_special_folder(csidl) -> bool - - - Get a folder location by CSIDL (see 'Common CSIDLs' ). Path should be - of at least MAX_PATH size - - @param csidl (C++: int) - - -ida_diskio.get_user_idadir(): - - get_user_idadir() -> char const * - - - Get user ida related directory. - - - if $IDAUSR is defined: - - the first element in $IDAUSR - - else - - default user directory ($HOME/.idapro or %APPDATA%Hex-Rays/IDA Pro) - - -ida_diskio.getsysfile(): - - getsysfile(filename, subdir) -> char * - - - Search for IDA system file. This function searches for a file in:each - directory specified by IDAUSR%ida directory [+ subdir] and returns the - first match. - - @param filename (C++: const char *) - @param subdir (C++: const char *) - @return: NULL if not found, otherwise a pointer to full file name. - - -ida_diskio.idadir(): - - idadir(subdir) -> char const * - - - Get IDA directory (if subdir==NULL) or the specified subdirectory (see - 'IDA subdirectories' ) - - @param subdir (C++: const char *) - - -ida_diskio.open_linput(): - - open_linput(file, remote) -> linput_t * - - - Open loader input. - - - @param file (C++: const char *) - @param remote (C++: bool) - - -ida_diskio.qlgetz(): - - qlgetz(li, fpos) -> char * - - - Read a zero-terminated string from the input. If fpos == -1 then no - seek will be performed. - - @param li (C++: linput_t *) - @param fpos (C++: int64) - - - -=== ida_diskio EPYDOC INJECTIONS === -ida_diskio.IDA_SUBDIR_IDADIR_FIRST -""" -$IDADIR/subdir will be first, not last -""" - -ida_diskio.IDA_SUBDIR_IDP -""" -append the processor name as a subdirectory -""" - -ida_diskio.IDA_SUBDIR_ONLY_EXISTING -""" -only existing directories will be present -""" -=== ida_diskio EPYDOC INJECTIONS END === -ida_entry.add_entry(): - - add_entry(ord, ea, name, makecode, flags=0x0) -> bool - - - Add an entry point to the list of entry points. - - @param ord: ordinal number if ordinal number is equal to 'ea' then - ordinal is not used (C++: uval_t) - @param ea: linear address (C++: ea_t) - @param name: name of entry point. If the specified location already - has a name, the old name will be appended to the regular - comment. If name == NULL, then the old name will be - retained. (C++: const char *) - @param makecode: should the kernel convert bytes at the entry point to - instruction(s) (C++: bool) - @param flags: See AEF_* (C++: int) - @return: success (currently always true) - - -ida_entry.get_entry(): - - get_entry(ord) -> ea_t - - - Get entry point address by its ordinal - - @param ord: ordinal number of entry point (C++: uval_t) - @return: address or BADADDR - - -ida_entry.get_entry_forwarder(): - - get_entry_forwarder(ord) -> ssize_t - - - Get forwarder name for the entry point by its ordinal. - - @param ord: ordinal number of entry point (C++: uval_t) - @return: size of entry forwarder name or -1 - - -ida_entry.get_entry_name(): - - get_entry_name(ord) -> ssize_t - - - Get name of the entry point by its ordinal. - - @param ord: ordinal number of entry point (C++: uval_t) - @return: size of entry name or -1 - - -ida_entry.get_entry_ordinal(): - - get_entry_ordinal(idx) -> uval_t - - - Get ordinal number of an entry point. - - @param idx: internal number of entry point. Should be in the range 0.. - get_entry_qty() -1 (C++: size_t) - @return: ordinal number or 0. - - -ida_entry.get_entry_qty(): - - get_entry_qty() -> size_t - - - Get number of entry points. - - -ida_entry.rename_entry(): - - rename_entry(ord, name, flags=0x0) -> bool - - - Rename entry point. - - @param ord: ordinal number of the entry point (C++: uval_t) - @param name: name of entry point. If the specified location already - has a name, the old name will be appended to a repeatable - comment. (C++: const char *) - @param flags: See AEF_* (C++: int) - @return: success - - -ida_entry.set_entry_forwarder(): - - set_entry_forwarder(ord, name, flags=0x0) -> bool - - - Set forwarder name for ordinal. - - @param ord: ordinal number of the entry point (C++: uval_t) - @param name: forwarder name for entry point. (C++: const char *) - @param flags: See AEF_* (C++: int) - @return: success - - - -=== ida_entry EPYDOC INJECTIONS === -ida_entry.AEF_IDBENC -""" -the name is given in the IDB encoding; non-ASCII bytes will be decoded -accordingly Specifying AEF_IDBENC also implies AEF_NODUMMY -""" - -ida_entry.AEF_NODUMMY -""" -it begins with a dummy suffix. See also AEF_IDBENC - -automatically prepend the name with '_' if -""" - -ida_entry.AEF_UTF8 -""" -the name is given in UTF-8 (default) -""" -=== ida_entry EPYDOC INJECTIONS END === -ida_enum.add_enum(): - - add_enum(idx, name, flag) -> enum_t - - - Add new enum type.if idx== 'BADADDR' then add as the last idxif - name==NULL then generate a unique name "enum_%d" - - @param idx (C++: size_t) - @param name (C++: const char *) - @param flag (C++: flags_t) - - -ida_enum.add_enum_member(): - - add_enum_member(id, name, value, bmask=(bmask_t(-1))) -> int - - - Add member to enum type. - - @param id (C++: enum_t) - @param name (C++: const char *) - @param value (C++: uval_t) - @param bmask (C++: bmask_t) - @return: 0 if ok, otherwise one of Add enum member result codes - - -ida_enum.del_enum(): - - del_enum(id) - - - Delete an enum type. - - - @param id (C++: enum_t) - - -ida_enum.del_enum_member(): - - del_enum_member(id, value, serial, bmask) -> bool - - - Delete member of enum type. - - - @param id (C++: enum_t) - @param value (C++: uval_t) - @param serial (C++: uchar) - @param bmask (C++: bmask_t) - - -class ida_enum.enum_member_visitor_t(): - - Proxy of C++ enum_member_visitor_t class - - -ida_enum.enum_member_visitor_t.visit_enum_member(): - - visit_enum_member(self, cid, value) -> int - - -ida_enum.for_all_enum_members(): - - for_all_enum_members(id, cv) -> int - - - Visit all members of a given enum. - - - @param id (C++: enum_t) - @param cv (C++: enum_member_visitor_t &) - - -ida_enum.get_bmask_cmt(): - - get_bmask_cmt(id, bmask, repeatable) -> ssize_t - - -ida_enum.get_bmask_name(): - - get_bmask_name(id, bmask) -> ssize_t - - -ida_enum.get_enum(): - - get_enum(name) -> enum_t - - - Get enum by name. - - - @param name (C++: const char *) - - -ida_enum.get_enum_cmt(): - - get_enum_cmt(id, repeatable) -> ssize_t - - - Get enum comment. - - - @param id (C++: enum_t) - @param repeatable (C++: bool) - - -ida_enum.get_enum_flag(): - - get_enum_flag(id) -> flags_t - - - Get flags determining the representation of the enum. (currently they - define the numeric base: octal, decimal, hex, bin) and signness. - - @param id (C++: enum_t) - - -ida_enum.get_enum_idx(): - - get_enum_idx(id) -> uval_t - - - Get serial number of enum. The serial number determines the place of - the enum in the enum window. - - @param id (C++: enum_t) - - -ida_enum.get_enum_member(): - - get_enum_member(id, value, serial, mask) -> const_t - - - Find an enum member by enum, value and bitmaskif serial -1, return a - member with any serial - - @param id (C++: enum_t) - @param value (C++: uval_t) - @param serial (C++: int) - @param mask (C++: bmask_t) - - -ida_enum.get_enum_member_bmask(): - - get_enum_member_bmask(id) -> bmask_t - - - Get bitmask of an enum member. - - - @param id (C++: const_t) - - -ida_enum.get_enum_member_by_name(): - - get_enum_member_by_name(name) -> const_t - - - Get a reference to an enum member by its name. - - - @param name (C++: const char *) - - -ida_enum.get_enum_member_cmt(): - - get_enum_member_cmt(id, repeatable) -> ssize_t - - - Get enum member's comment. - - - @param id (C++: const_t) - @param repeatable (C++: bool) - - -ida_enum.get_enum_member_enum(): - - get_enum_member_enum(id) -> enum_t - - - Get the parent enum of an enum member. - - - @param id (C++: const_t) - - -ida_enum.get_enum_member_name(): - - get_enum_member_name(id) -> ssize_t - - - Get name of an enum member by const_t. - - - @param id (C++: const_t) - - -ida_enum.get_enum_member_serial(): - - get_enum_member_serial(cid) -> uchar - - - Get serial number of an enum member. - - - @param cid (C++: const_t) - - -ida_enum.get_enum_member_value(): - - get_enum_member_value(id) -> uval_t - - - Get value of an enum member. - - - @param id (C++: const_t) - - -ida_enum.get_enum_name(): - - get_enum_name(id) -> ssize_t - - - Get name of enum. - - - @param id (C++: enum_t) - - -ida_enum.get_enum_qty(): - - get_enum_qty() -> size_t - - - Get number of declared 'enum_t' types. - - -ida_enum.get_enum_size(): - - get_enum_size(id) -> size_t - - - Get the number of the members of the enum. - - - @param id (C++: enum_t) - - -ida_enum.get_enum_type_ordinal(): - - get_enum_type_ordinal(id) -> int32 - - - Get corresponding type ordinal number. - - - @param id (C++: enum_t) - - -ida_enum.get_enum_width(): - - get_enum_width(id) -> size_t - - - Get the width of a enum element allowed values: 0 - (unspecified),1,2,4,8,16,32,64 - - @param id (C++: enum_t) - - -ida_enum.get_first_bmask(): - - get_first_bmask(id) -> bmask_t - - - Get first bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @return: the smallest bitmask for enum, or DEFMASK - - -ida_enum.get_first_enum_member(): - - get_first_enum_member(id, bmask=(bmask_t(-1))) -> uval_t - - -ida_enum.get_first_serial_enum_member(): - - get_first_serial_enum_member(id, value, bmask) -> const_t - - -ida_enum.get_last_bmask(): - - get_last_bmask(id) -> bmask_t - - - Get last bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @return: the biggest bitmask for enum, or DEFMASK - - -ida_enum.get_last_enum_member(): - - get_last_enum_member(id, bmask=(bmask_t(-1))) -> uval_t - - -ida_enum.get_last_serial_enum_member(): - - get_last_serial_enum_member(id, value, bmask) -> const_t - - -ida_enum.get_next_bmask(): - - get_next_bmask(id, bmask) -> bmask_t - - - Get next bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @param bmask (C++: bmask_t) - @return: value of a bitmask with value higher than the specified - value, or DEFMASK - - -ida_enum.get_next_enum_member(): - - get_next_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t - - -ida_enum.get_next_serial_enum_member(): - - get_next_serial_enum_member(in_out_serial, first_cid) -> const_t - - -ida_enum.get_prev_bmask(): - - get_prev_bmask(id, bmask) -> bmask_t - - - Get prev bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @param bmask (C++: bmask_t) - @return: value of a bitmask with value lower than the specified value, - or DEFMASK - - -ida_enum.get_prev_enum_member(): - - get_prev_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t - - -ida_enum.get_prev_serial_enum_member(): - - get_prev_serial_enum_member(in_out_serial, first_cid) -> const_t - - -ida_enum.getn_enum(): - - getn_enum(n) -> enum_t - - - Get enum by its ordinal number (0..n). - - - @param n (C++: size_t) - - -ida_enum.is_bf(): - - is_bf(id) -> bool - - - Is enum a bitfield? (otherwise - plain enum, no bitmasks except for - 'DEFMASK' are allowed) - - @param id (C++: enum_t) - - -ida_enum.is_enum_fromtil(): - - is_enum_fromtil(id) -> bool - - - Does enum come from type library? - - - @param id (C++: enum_t) - - -ida_enum.is_enum_hidden(): - - is_enum_hidden(id) -> bool - - - Is enum collapsed? - - - @param id (C++: enum_t) - - -ida_enum.is_ghost_enum(): - - is_ghost_enum(id) -> bool - - - Is a ghost copy of a local type? - - - @param id (C++: enum_t) - - -ida_enum.is_one_bit_mask(): - - is_one_bit_mask(mask) -> bool - - - Is bitmask one bit? - - - @param mask (C++: bmask_t) - - -ida_enum.set_bmask_cmt(): - - set_bmask_cmt(id, bmask, cmt, repeatable) -> bool - - -ida_enum.set_bmask_name(): - - set_bmask_name(id, bmask, name) -> bool - - -ida_enum.set_enum_bf(): - - set_enum_bf(id, bf) -> bool - - - Set 'bitfield' bit of enum (i.e. convert it to a bitfield) - - - @param id (C++: enum_t) - @param bf (C++: bool) - - -ida_enum.set_enum_cmt(): - - set_enum_cmt(id, cmt, repeatable) -> bool - - - Set comment for enum type. - - - @param id (C++: enum_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -ida_enum.set_enum_flag(): - - set_enum_flag(id, flag) -> bool - - - Set data representation flags. - - - @param id (C++: enum_t) - @param flag (C++: flags_t) - - -ida_enum.set_enum_fromtil(): - - set_enum_fromtil(id, fromtil) -> bool - - - Specify that enum comes from a type library. - - - @param id (C++: enum_t) - @param fromtil (C++: bool) - - -ida_enum.set_enum_ghost(): - - set_enum_ghost(id, ghost) -> bool - - - Specify that enum is a ghost copy of a local type. - - - @param id (C++: enum_t) - @param ghost (C++: bool) - - -ida_enum.set_enum_hidden(): - - set_enum_hidden(id, hidden) -> bool - - - Collapse enum. - - - @param id (C++: enum_t) - @param hidden (C++: bool) - - -ida_enum.set_enum_idx(): - - set_enum_idx(id, idx) -> bool - - - Set serial number of enum. Also see 'get_enum_idx()' . - - @param id (C++: enum_t) - @param idx (C++: size_t) - - -ida_enum.set_enum_member_cmt(): - - set_enum_member_cmt(id, cmt, repeatable) -> bool - - - Set comment for enum member. - - - @param id (C++: const_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -ida_enum.set_enum_member_name(): - - set_enum_member_name(id, name) -> bool - - - Set name of enum member. - - - @param id (C++: const_t) - @param name (C++: const char *) - - -ida_enum.set_enum_name(): - - set_enum_name(id, name) -> bool - - - Set name of enum type. - - - @param id (C++: enum_t) - @param name (C++: const char *) - - -ida_enum.set_enum_type_ordinal(): - - set_enum_type_ordinal(id, ord) - - - Set corresponding type ordinal number. - - - @param id (C++: enum_t) - @param ord (C++: int32) - - -ida_enum.set_enum_width(): - - set_enum_width(id, width) -> bool - - - See comment for 'get_enum_width()' - - - @param id (C++: enum_t) - @param width (C++: int) - - - -=== ida_enum EPYDOC INJECTIONS === -ida_enum.DEFMASK -""" -default bitmask -""" - -ida_enum.ENUM_MEMBER_ERROR_ENUM -""" -bad enum id -""" - -ida_enum.ENUM_MEMBER_ERROR_ILLV -""" -bad bmask and value combination (~bmask & value != 0) -""" - -ida_enum.ENUM_MEMBER_ERROR_MASK -""" -bad bmask -""" - -ida_enum.ENUM_MEMBER_ERROR_NAME -""" -already have member with this name (bad name) -""" - -ida_enum.ENUM_MEMBER_ERROR_VALUE -""" -already have 256 members with this value -""" -=== ida_enum EPYDOC INJECTIONS END === -ida_expr.add_idc_class(): - - add_idc_class(name, super=None) -> idc_class_t * - - - Create a new IDC class. - - @param name: name of the new class (C++: const char *) - @param super: the base class for the new class. if the new class is - not based on any other class, pass NULL (C++: const - idc_class_t *) - @return: pointer to the created class. If such a class already exists, - a pointer to it will be returned. Pointers to other existing - classes may be invalidated by this call. - - -ida_expr.add_idc_func(): - - Extends the IDC language by exposing a new IDC function that is backed up by a Python function - - @param name: IDC function name to expose - @param fp: Python callable that will receive the arguments and return a tuple. - @param args: Arguments. A tuple of idaapi.VT_XXX constants - @param flags: IDC function flags. A combination of EXTFUN_XXX constants - - @return: Boolean - - - Add an IDC function. This function does not modify the predefined - kernel functions. Example: - - static error_t idaapi myfunc5(idc_value_t *argv, idc_value_t *res) - { - msg("myfunc is called with arg0=%a and arg1=%s - ", argv[0].num, argv[1].str); - res->num = 5; // let's return 5 - return eOk; - } - static const char myfunc5_args[] = { VT_LONG, VT_STR, 0 }; - static const ext_idcfunc_t myfunc_desc = { "MyFunc5", myfunc5, myfunc5_args, NULL, 0, EXTFUN_BASE }; - - // after this: - add_idc_func(myfunc_desc); - - // there is a new IDC function which can be called like this: - MyFunc5(0x123, "test"); - - If the function already exists, it will be replaced by the new - function - - @return: success - - -ida_expr.add_idc_gvar(): - - add_idc_gvar(name) -> idc_value_t - - - Add global IDC variable. - - @param name: name of the global variable (C++: const char *) - @return: pointer to the created variable or existing variable. NB: the - returned pointer is valid until a new global var is added. - - -ida_expr.compile_idc_file(): - - compile_idc_file(nonnul_line) -> bool - - -ida_expr.compile_idc_snippet(): - - compile_idc_snippet(func, text, resolver=None, only_safe_funcs=False) -> bool - - - Compile text with IDC statements. - - @param func: name of the function to create out of the snippet (C++: - const char *) - @param text: text to compile (C++: const char *) - @param resolver: callback object to get values of undefined variables - This object will be called if IDC function contains - references to undefined variables. May be NULL. (C++: - idc_resolver_t *) - @param only_safe_funcs: if true, any calls to functions without - EXTFUN_SAFE flag will lead to a compilation - error. (C++: bool) - - -ida_expr.compile_idc_text(): - - compile_idc_text(nonnul_line) -> bool - - -ida_expr.copy_idcv(): - - copy_idcv(dst, src) -> error_t - - - Copy 'src' to 'dst'. For idc objects only a reference is copied. - - @param dst (C++: idc_value_t *) - @param src (C++: const idc_value_t &) - - -ida_expr.create_idcv_ref(): - - create_idcv_ref(ref, v) -> bool - - - Create a variable reference. Currently only references to global - variables can be created. - - @param ref: ptr to the result (C++: idc_value_t *) - @param v: variable to reference (C++: const idc_value_t *) - @return: success - - -ida_expr.deep_copy_idcv(): - - deep_copy_idcv(dst, src) -> error_t - - - Deep copy an IDC object. This function performs deep copy of idc - objects. If 'src' is not an object, 'copy_idcv()' will be called - - @param dst (C++: idc_value_t *) - @param src (C++: const idc_value_t &) - - -ida_expr.del_idc_func(): - - Unregisters the specified IDC function - - @param name: IDC function name to unregister - - @return: Boolean - - - Delete an IDC function - - -ida_expr.del_idcv_attr(): - - del_idcv_attr(obj, attr) -> error_t - - - Delete an object attribute. - - @param obj: variable that holds an object reference (C++: idc_value_t - *) - @param attr: attribute name (C++: const char *) - @return: error code, eOk on success - - -ida_expr.deref_idcv(): - - deref_idcv(v, vref_flags) -> idc_value_t - - - Dereference a 'VT_REF' variable. - - @param v: variable to dereference (C++: idc_value_t *) - @param vref_flags: Dereference IDC variable flags (C++: int) - @return: pointer to the dereference result or NULL. If returns NULL, - qerrno is set to eExecBadRef "Illegal variable reference" - - -ida_expr.eval_expr(): - - eval_expr(rv, where, line) -> bool - - - Compile and calculate an expression. - - @param rv: pointer to the result (C++: idc_value_t *) - @param where: the current linear address in the addressing space of - the program being disassembled. If will be used to - resolve names of local variables etc. if not applicable, - then should be BADADDR . (C++: ea_t) - @param line: the expression to evaluate (C++: const char *) - - -ida_expr.eval_idc_expr(): - - eval_idc_expr(rv, where, line) -> bool - - - Same as 'eval_expr()' , but will always use the IDC interpreter - regardless of the currently installed extlang. - - @param rv (C++: idc_value_t *) - @param where (C++: ea_t) - - -ida_expr.exec_idc_script(): - - exec_idc_script(result, path, func, args, argsnum) -> bool - - - Compile and execute IDC function(s) from file. - - @param result: ptr to idc_value_t to hold result of the function. If - execution fails, this variable will contain the - exception information. You may pass NULL if you are not - interested in the returned value. (C++: idc_value_t *) - @param path: text file containing text of IDC functions (C++: const - char *) - @param func: function name to execute (C++: const char *) - @param args: array of parameters (C++: const idc_value_t) - @param argsnum: number of parameters to pass to 'fname' This number - should be equal to number of parameters the function - expects. (C++: size_t) - - -ida_expr.exec_system_script(): - - exec_system_script(file, complain_if_no_file=True) -> bool - - - Compile and execute "main" function from system file. - - @param file: file name with IDC function(s). The file will be searched - in the idc subdir of ida (C++: const char *) - @param complain_if_no_file: 1: display warning if the file is not - found 0: don't complain if file doesn't - exist (C++: bool) - - -ida_expr.find_idc_class(): - - find_idc_class(name) -> idc_class_t * - - - Find an existing IDC class by its name. - - @param name: name of the class (C++: const char *) - @return: pointer to the class or NULL. The returned pointer is valid - until a new call to add_idc_class() - - -ida_expr.find_idc_func(): - - find_idc_func(prefix, n=0) -> bool - - -ida_expr.find_idc_gvar(): - - find_idc_gvar(name) -> idc_value_t - - - Find an existing global IDC variable by its name. - - @param name: name of the global variable (C++: const char *) - @return: pointer to the variable or NULL. NB: the returned pointer is - valid until a new global var is added. FIXME: it is difficult - to use this function in a thread safe manner - - -ida_expr.first_idcv_attr(): - - first_idcv_attr(obj) -> char const * - - -ida_expr.free_idcv(): - - free_idcv(v) - - - Free storage used by 'VT_STR' / 'VT_OBJ' IDC variables. After this - call the variable has a numeric value 0 - - @param v (C++: idc_value_t *) - - -ida_expr.get_idc_filename(): - - get_idc_filename(file) -> char * - - - Get full name of IDC file name. Search for file in list of include - directories, IDCPATH directory and the current directory. - - @param file: file name without full path (C++: const char *) - @return: NULL is file not found. otherwise returns pointer to buf - - -ida_expr.get_idcv_attr(): - - get_idcv_attr(res, obj, attr, may_use_getattr=False) -> error_t - - - Get an object attribute. - - @param res: buffer for the attribute value (C++: idc_value_t *) - @param obj: variable that holds an object reference. if obj is NULL it - searches global variables, then user functions (C++: const - idc_value_t *) - @param attr: attribute name (C++: const char *) - @param may_use_getattr: may call getattr functions to calculate the - attribute if it does not exist (C++: bool) - @return: error code, eOk on success - - -ida_expr.get_idcv_class_name(): - - get_idcv_class_name(obj) -> error_t - - - Retrieves the IDC object class name. - - @param obj: class instance variable (C++: const idc_value_t *) - @return: error code, eOk on success - - -ida_expr.get_idcv_slice(): - - get_idcv_slice(res, v, i1, i2, flags=0) -> error_t - - - Get slice. - - @param res: output variable that will contain the slice (C++: - idc_value_t *) - @param v: input variable (string or object) (C++: const idc_value_t - *) - @param i1: slice start index (C++: uval_t) - @param i2: slice end index (excluded) (C++: uval_t) - @param flags: IDC variable slice flags or 0 (C++: int) - @return: eOk if success - - -class ida_expr.highlighter_cbs_t(): - - Proxy of C++ highlighter_cbs_t class - - -ida_expr.highlighter_cbs_t.cur_block_state(): - - cur_block_state(self) -> int32 - - -ida_expr.highlighter_cbs_t.prev_block_state(): - - prev_block_state(self) -> int32 - - -ida_expr.highlighter_cbs_t.set_block_state(): - - set_block_state(self, arg0) - - -ida_expr.highlighter_cbs_t.set_style(): - - set_style(self, arg0, arg1, arg2) - - -class ida_expr.idc_global_t(): - - Proxy of C++ idc_global_t class - - -ida_expr.idc_global_t.name: - idc_global_t_name_get(self) -> qstring * - -ida_expr.idc_global_t.value: - idc_global_t_value_get(self) -> idc_value_t - -class ida_expr.idc_value_t(): - - Proxy of C++ idc_value_t class - - -ida_expr.idc_value_t.c_str(): - - c_str(self) -> char const * - - -ida_expr.idc_value_t.clear(): - - clear(self) - - -ida_expr.idc_value_t.create_empty_string(): - - create_empty_string(self) - - -ida_expr.idc_value_t.e: - idc_value_t_e_get(self) -> ushort [6] - -ida_expr.idc_value_t.funcidx: - idc_value_t_funcidx_get(self) -> int - -ida_expr.idc_value_t.i64: - idc_value_t_i64_get(self) -> int64 - -ida_expr.idc_value_t.is_convertible(): - - is_convertible(self) -> bool - - -ida_expr.idc_value_t.is_integral(): - - is_integral(self) -> bool - - -ida_expr.idc_value_t.is_zero(): - - is_zero(self) -> bool - - -ida_expr.idc_value_t.num: - idc_value_t_num_get(self) -> sval_t - -ida_expr.idc_value_t.obj: - idc_value_t_obj_get(self) -> idc_object_t * - -ida_expr.idc_value_t.pvoid: - idc_value_t_pvoid_get(self) -> void * - -ida_expr.idc_value_t.qstr(): - - qstr(self) -> qstring - qstr(self) -> qstring const & - - -ida_expr.idc_value_t.reserve: - idc_value_t_reserve_get(self) -> uchar [sizeof(qstring)] - -ida_expr.idc_value_t.set_float(): - - set_float(self, f) - - -ida_expr.idc_value_t.set_int64(): - - set_int64(self, v) - - -ida_expr.idc_value_t.set_long(): - - set_long(self, v) - - -ida_expr.idc_value_t.set_pvoid(): - - set_pvoid(self, p) - - -ida_expr.idc_value_t.set_string(): - - set_string(self, _str, len) - set_string(self, _str) - - -ida_expr.idc_value_t.swap(): - - swap(self, v) - - -ida_expr.idc_value_t.u_str(): - - u_str(self) -> uchar const * - - -ida_expr.idc_value_t.vtype: - idc_value_t_vtype_get(self) -> char - -class ida_expr.idc_values_t(): - - Proxy of C++ qvector<(idc_value_t)> class - - -ida_expr.idc_values_t.at(): - - at(self, _idx) -> idc_value_t - - -ida_expr.idc_values_t.begin(): - - begin(self) -> idc_value_t - begin(self) -> idc_value_t - - -ida_expr.idc_values_t.capacity(): - - capacity(self) -> size_t - - -ida_expr.idc_values_t.clear(): - - clear(self) - - -ida_expr.idc_values_t.empty(): - - empty(self) -> bool - - -ida_expr.idc_values_t.end(): - - end(self) -> idc_value_t - end(self) -> idc_value_t - - -ida_expr.idc_values_t.erase(): - - erase(self, it) -> idc_value_t - erase(self, first, last) -> idc_value_t - - -ida_expr.idc_values_t.extract(): - - extract(self) -> idc_value_t - - -ida_expr.idc_values_t.grow(): - - grow(self, x=idc_value_t()) - - -ida_expr.idc_values_t.inject(): - - inject(self, s, len) - - -ida_expr.idc_values_t.insert(): - - insert(self, it, x) -> idc_value_t - - -ida_expr.idc_values_t.pop_back(): - - pop_back(self) - - -ida_expr.idc_values_t.push_back(): - - push_back(self, x) - push_back(self) -> idc_value_t - - -ida_expr.idc_values_t.qclear(): - - qclear(self) - - -ida_expr.idc_values_t.reserve(): - - reserve(self, cnt) - - -ida_expr.idc_values_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_expr.idc_values_t.size(): - - size(self) -> size_t - - -ida_expr.idc_values_t.swap(): - - swap(self, r) - - -ida_expr.idc_values_t.truncate(): - - truncate(self) - - -ida_expr.idcv_float(): - - idcv_float(v) -> error_t - - - Convert IDC variable to a floating point. - - - @param v (C++: idc_value_t *) - - -ida_expr.idcv_int64(): - - idcv_int64(v) -> error_t - - - Convert IDC variable to a 64bit number. - - @param v (C++: idc_value_t *) - @return: v = 0 if impossible to convert to int64 - - -ida_expr.idcv_long(): - - idcv_long(v) -> error_t - - - Convert IDC variable to a long (32/64bit) number. - - @param v (C++: idc_value_t *) - @return: v = 0 if impossible to convert to long - - -ida_expr.idcv_num(): - - idcv_num(v) -> error_t - - - Convert IDC variable to a long number. - - @param v (C++: idc_value_t *) - @return: v = 0 if IDC variable = "false" string v = 1 if IDC - variable = "true" string v = number if IDC variable is - number or string containing a number eTypeConflict if IDC - variable = empty string - - -ida_expr.idcv_object(): - - idcv_object(v, icls=None) -> error_t - - - Create an IDC object. The original value of 'v' is discarded (freed). - - @param v: variable to hold the object. any previous value will be - cleaned (C++: idc_value_t *) - @param icls: ptr to the desired class. NULL means "object" class this - ptr must be returned by add_idc_class() or - find_idc_class() (C++: const idc_class_t *) - @return: always eOk - - -ida_expr.idcv_string(): - - idcv_string(v) -> error_t - - - Convert IDC variable to a text string. - - - @param v (C++: idc_value_t *) - - -ida_expr.last_idcv_attr(): - - last_idcv_attr(obj) -> char const * - - -ida_expr.move_idcv(): - - move_idcv(dst, src) -> error_t - - - Move 'src' to 'dst'. This function is more effective than copy_idcv - since it never copies big amounts of data. - - @param dst (C++: idc_value_t *) - @param src (C++: idc_value_t *) - - -ida_expr.next_idcv_attr(): - - next_idcv_attr(obj, attr) -> char const * - - -ida_expr.prev_idcv_attr(): - - prev_idcv_attr(obj, attr) -> char const * - - -ida_expr.print_idcv(): - - print_idcv(v, name=None, indent=0) -> bool - - - Get text representation of 'idc_value_t' . - - - @param v (C++: const idc_value_t &) - @param name (C++: const char *) - @param indent (C++: int) - - -ida_expr.py_add_idc_func(): - - py_add_idc_func(name, fp_ptr, args, defvals, flags) -> bool - - -ida_expr.py_get_call_idc_func(): - - py_get_call_idc_func() -> size_t - - -ida_expr.pyw_convert_defvals(): - - pyw_convert_defvals(out, py_seq) -> bool - - -ida_expr.pyw_register_idc_func(): - - pyw_register_idc_func(name, args, py_fp) -> size_t - - -ida_expr.pyw_unregister_idc_func(): - - pyw_unregister_idc_func(ctxptr) -> bool - - -ida_expr.set_header_path(): - - set_header_path(path, add) -> bool - - - Set or append a header path. IDA looks for the include files in the - appended header paths, then in the ida executable directory. - - @param path: list of directories to add (separated by ';') may be - NULL, in this case nothing is added (C++: const char *) - @param add: true: append. false: remove old paths. (C++: bool) - - -ida_expr.set_idcv_attr(): - - set_idcv_attr(obj, attr, value, may_use_setattr=False) -> error_t - - - Set an object attribute. - - @param obj: variable that holds an object reference. if obj is NULL - then it tries to modify a global variable with the - attribute name (C++: idc_value_t *) - @param attr: attribute name (C++: const char *) - @param value: new attribute value (C++: const idc_value_t &) - @param may_use_setattr: may call setattr functions for the class (C++: - bool) - @return: error code, eOk on success - - -ida_expr.set_idcv_slice(): - - set_idcv_slice(v, i1, i2, _in, flags=0) -> error_t - - - Set slice. - - @param v: variable to modify (string or object) (C++: idc_value_t *) - @param i1: slice start index (C++: uval_t) - @param i2: slice end index (excluded) (C++: uval_t) - @param flags: IDC variable slice flags or 0 (C++: int) - @return: eOk on success - - -ida_expr.swap_idcvs(): - - swap_idcvs(v1, v2) - - - Swap 2 variables. - - - @param v1 (C++: idc_value_t *) - @param v2 (C++: idc_value_t *) - - -ida_expr.throw_idc_exception(): - - throw_idc_exception(r, desc) -> error_t - - - Create an idc execution exception object. This helper function can be - used to return an exception from C++ code to IDC. In other words this - function can be called from 'idc_func_t()' callbacks. Sample usage: if - ( !ok ) return throw_idc_exception(r, "detailed error msg"); - - @param r: object to hold the exception object (C++: idc_value_t *) - @param desc: exception description (C++: const char *) - @return: eExecThrow - - - -=== ida_expr EPYDOC INJECTIONS === -ida_expr.CPL_DEL_MACROS -""" -delete macros at the end of compilation -""" - -ida_expr.CPL_ONLY_SAFE -""" -allow calls of only thread-safe functions -""" - -ida_expr.CPL_USE_LABELS -""" -allow program labels in the script -""" - -ida_expr.IDC_LANG_EXT -""" -IDC script extension. -""" - -ida_expr.VARSLICE_SINGLE -""" -return single index (i2 is ignored) -""" - -ida_expr.VREF_COPY -""" -copy the result to the input var (v) -""" - -ida_expr.VREF_LOOP -""" -dereference until we get a non 'VT_REF' -""" - -ida_expr.VREF_ONCE -""" -dereference only once, do not loop -""" - -ida_expr.VT_FLOAT -""" -Floating point (see 'idc_value_t::e' ) -""" - -ida_expr.VT_FUNC -""" -Function (see 'idc_value_t::funcidx' ) -""" - -ida_expr.VT_INT64 -""" -i64 -""" - -ida_expr.VT_LONG -""" -Integer (see 'idc_value_t::num' ) -""" - -ida_expr.VT_OBJ -""" -Object (see idc_value_t::obj) -""" - -ida_expr.VT_PVOID -""" -void * -""" - -ida_expr.VT_REF -""" -Reference. -""" - -ida_expr.VT_STR -""" -String (see qstr() and similar functions) -""" - -ida_expr.VT_WILD -""" -Function with arbitrary number of arguments. The actual number of -arguments will be passed in 'idc_value_t::num' . This value should not -be used for 'idc_value_t' . -""" - -ida_expr.eExecThrow -""" -See return value of 'idc_func_t' . -""" -=== ida_expr EPYDOC INJECTIONS END === -ida_fixup.calc_fixup_size(): - - calc_fixup_size(type) -> int - - - Calculate size of fixup in bytes (the number of bytes the fixup - patches) - - @param type (C++: fixup_type_t) - - -ida_fixup.contains_fixups(): - - contains_fixups(ea, size) -> bool - - - Does the specified address range contain any fixup information? - - - @param ea (C++: ea_t) - @param size (C++: asize_t) - - -ida_fixup.del_fixup(): - - del_fixup(source) - - - Delete fixup information. - - - @param source (C++: ea_t) - - -ida_fixup.exists_fixup(): - - exists_fixup(source) -> bool - - - Check that a fixup exists at the given address. - - - @param source (C++: ea_t) - - -ida_fixup.find_custom_fixup(): - - find_custom_fixup(name) -> fixup_type_t - - - Get id of a custom fixup handler. - - @param name: name of the custom fixup handler (C++: const char *) - @return: id with FIXUP_CUSTOM bit set or 0 - - -class ida_fixup.fixup_data_t(): - - Proxy of C++ fixup_data_t class - - -ida_fixup.fixup_data_t.calc_size(): - - calc_size(self) -> int - - -ida_fixup.fixup_data_t.clr_extdef(): - - clr_extdef(self) - - -ida_fixup.fixup_data_t.clr_unused(): - - clr_unused(self) - - -ida_fixup.fixup_data_t.displacement: - fixup_data_t_displacement_get(self) -> adiff_t - -ida_fixup.fixup_data_t.get(): - - get(self, source) -> bool - - -ida_fixup.fixup_data_t.get_base(): - - get_base(self) -> ea_t - - -ida_fixup.fixup_data_t.get_desc(): - - get_desc(self, source) -> char const * - - -ida_fixup.fixup_data_t.get_flags(): - - get_flags(self) -> uint32 - - -ida_fixup.fixup_data_t.get_handler(): - - get_handler(self) -> fixup_handler_t const * - - -ida_fixup.fixup_data_t.get_type(): - - get_type(self) -> fixup_type_t - - -ida_fixup.fixup_data_t.get_value(): - - get_value(self, ea) -> uval_t - - -ida_fixup.fixup_data_t.has_base(): - - has_base(self) -> bool - - -ida_fixup.fixup_data_t.is_custom(): - - is_custom(self) -> bool - - -ida_fixup.fixup_data_t.is_extdef(): - - is_extdef(self) -> bool - - -ida_fixup.fixup_data_t.is_unused(): - - is_unused(self) -> bool - - -ida_fixup.fixup_data_t.off: - fixup_data_t_off_get(self) -> ea_t - -ida_fixup.fixup_data_t.patch_value(): - - patch_value(self, ea) -> bool - - -ida_fixup.fixup_data_t.sel: - fixup_data_t_sel_get(self) -> sel_t - -ida_fixup.fixup_data_t.set(): - - set(self, source) - - -ida_fixup.fixup_data_t.set_base(): - - set_base(self, new_base) - - -ida_fixup.fixup_data_t.set_extdef(): - - set_extdef(self) - - -ida_fixup.fixup_data_t.set_sel(): - - set_sel(self, seg) - - -ida_fixup.fixup_data_t.set_target_sel(): - - set_target_sel(self) - - -ida_fixup.fixup_data_t.set_type(): - - set_type(self, type_) - - -ida_fixup.fixup_data_t.set_type_and_flags(): - - set_type_and_flags(self, type_, flags_=0) - - -ida_fixup.fixup_data_t.set_unused(): - - set_unused(self) - - -ida_fixup.fixup_data_t.was_created(): - - was_created(self) -> bool - - -class ida_fixup.fixup_info_t(): - - Proxy of C++ fixup_info_t class - - -ida_fixup.fixup_info_t.ea: - fixup_info_t_ea_get(self) -> ea_t - -ida_fixup.fixup_info_t.fd: - fixup_info_t_fd_get(self) -> fixup_data_t - -ida_fixup.gen_fix_fixups(): - - gen_fix_fixups(_from, to, size) - - - Relocate the bytes with fixup information once more (generic - function). This function may be called from 'loader_t::move_segm()' if - it suits the goal. If 'loader_t::move_segm' is not defined then this - function will be called automatically when moving segments or rebasing - the entire program. Special parameter values (from = BADADDR, size = - 0, to = delta) are used when the function is called from - rebase_program(delta). - - @param _from (C++: ea_t) - @param to (C++: ea_t) - @param size (C++: asize_t) - - -ida_fixup.get_first_fixup_ea(): - - get_first_fixup_ea() -> ea_t - - - Get the first address with fixup information - - @return: the first address with fixup information, or BADADDR - - -ida_fixup.get_fixup(): - - get_fixup(fd, source) -> bool - - - Get fixup information. - - - @param fd (C++: fixup_data_t *) - @param source (C++: ea_t) - - -ida_fixup.get_fixup_desc(): - - get_fixup_desc(source, fd) -> char const * - - - Get FIXUP description comment. - - - @param source (C++: ea_t) - @param fd (C++: const fixup_data_t &) - - -ida_fixup.get_fixup_handler(): - - get_fixup_handler(type) -> fixup_handler_t const * - - - Get handler of standard or custom fixup. - - - @param type (C++: fixup_type_t) - - -ida_fixup.get_fixup_value(): - - get_fixup_value(ea, type) -> uval_t - - - Get the operand value. This function get fixup bytes from data or an - instruction at `ea' and convert them to the operand value (maybe - partially). It is opposite in meaning to the 'patch_fixup_value()' . - For example, FIXUP_HI8 read a byte at 'patch_fixup_value()' `ea' and - shifts it left by 8 bits, or AArch64's custom fixup BRANCH26 get low - 26 bits of the insn at `ea' and shifts it left by 2 bits. This - function is mainly used to get a relocation addend. - 'fixup_handler_t::size' - - @param ea: address to get fixup bytes from, the size of the fixup - bytes depends on the fixup type. (C++: ea_t) - @param type (C++: fixup_type_t) - - -ida_fixup.get_fixups(): - - get_fixups(out, ea, size) -> bool - - -ida_fixup.get_next_fixup_ea(): - - get_next_fixup_ea(ea) -> ea_t - - - Find next address with fixup information - - @param ea: current address (C++: ea_t) - @return: the next address with fixup information, or BADADDR - - -ida_fixup.get_prev_fixup_ea(): - - get_prev_fixup_ea(ea) -> ea_t - - - Find previous address with fixup information - - @param ea: current address (C++: ea_t) - @return: the previous address with fixup information, or BADADDR - - -ida_fixup.is_fixup_custom(): - - is_fixup_custom(type) -> bool - - - Is fixup processed by processor module? - - - @param type (C++: fixup_type_t) - - -ida_fixup.patch_fixup_value(): - - patch_fixup_value(ea, fd) -> bool - - - Patch the fixup bytes. This function updates data or an instruction at - `ea' to the fixup bytes. For example, FIXUP_HI8 updates a byte at `ea' - to the high byte of `fd->off' , or AArch64's custom fixup BRANCH26 - updates low 26 bits of the insn at `ea' to the value of `fd->off' - shifted right by 2. 'fixup_handler_t::size' - - @param ea: address where data are changed, the size of the changed - data depends on the fixup type. (C++: ea_t) - @param fd (C++: const fixup_data_t &) - - -ida_fixup.set_fixup(): - - set_fixup(source, fd) - - - Set fixup information. You should fill 'fixup_data_t' and call this - function and the kernel will remember information in the database. - - @param source: the fixup source address, i.e. the address modified by - the fixup (C++: ea_t) - @param fd: fixup data (C++: const fixup_data_t &) - - - -=== ida_fixup EPYDOC INJECTIONS === -ida_fixup.FIXUPF_CREATED -""" -fixup was not present in the input file -""" - -ida_fixup.FIXUPF_EXTDEF -""" -target is a location (otherwise - segment). Use this bit if the target -is a symbol rather than an offset from the beginning of a segment. -""" - -ida_fixup.FIXUPF_LOADER_MASK -""" -additional flags. The bits from this mask are not stored in the -database and can be used by the loader at its discretion. -""" - -ida_fixup.FIXUPF_REL -""" -fixup is relative to the linear address `base' . Otherwise fixup is -relative to the start of the segment with `sel' selector. -""" - -ida_fixup.FIXUPF_UNUSED -""" -fixup is ignored by IDAdisallows the kernel to convert operandsthis -fixup is not used during output -""" -=== ida_fixup EPYDOC INJECTIONS END === -class ida_fpro.qfile_t(): - - Proxy of C++ qfile_t class - - - A helper class to work with FILE related functions. - - -ida_fpro.qfile_t.close(): - - close(self) - - -ida_fpro.qfile_t.filename(): - - filename(self) -> PyObject * - - -ida_fpro.qfile_t.flush(): - - flush(self) -> int - - - Reads a single character from the file. Returns None if EOF or the read character - - -ida_fpro.qfile_t.from_cobject(): - - from_cobject(pycobject) -> qfile_t - - -ida_fpro.qfile_t.from_fp(): - - from_fp(fp) -> qfile_t - - -ida_fpro.qfile_t.get_char(): - - get_char(self) -> PyObject * - - -ida_fpro.qfile_t.get_fp(): - - get_fp(self) -> FILE * - - -ida_fpro.qfile_t.gets(): - - gets(self, size) -> PyObject * - - - Reads a line from the input file. Returns the read line or None - - -ida_fpro.qfile_t.open(): - - open(self, filename, mode) -> bool - - - Opens a file - @param filename: the file name - @param mode: The mode string, ala fopen() style - @return: Boolean - - -ida_fpro.qfile_t.opened(): - - opened(self) -> bool - - - Checks if the file is opened or not - - -ida_fpro.qfile_t.put_char(): - - put_char(self, chr) -> int - - - Writes a single character to the file - - -ida_fpro.qfile_t.puts(): - - puts(self, str) -> int - - -ida_fpro.qfile_t.read(): - - read(self, size) -> PyObject * - - - Reads from the file. Returns the buffer or None - - -ida_fpro.qfile_t.readbytes(): - - readbytes(self, size, big_endian) -> PyObject * - - - Similar to read() but it respect the endianness - - -ida_fpro.qfile_t.seek(): - - seek(self, offset, whence=SEEK_SET) -> int - - - Set input source position - @return: the new position (not 0 as fseek!) - - -ida_fpro.qfile_t.size(): - - size(self) -> int64 - - -ida_fpro.qfile_t.tell(): - - tell(self) -> int64 - - - Returns the current position - - -ida_fpro.qfile_t.tmpfile(): - - tmpfile() -> qfile_t - - - A static method to construct an instance using a temporary file - - -ida_fpro.qfile_t.write(): - - write(self, py_buf) -> int - - - Writes to the file. Returns 0 or the number of bytes written - - -ida_fpro.qfile_t.writebytes(): - - writebytes(self, py_buf, big_endian) -> int - - - Similar to write() but it respect the endianness - - -ida_fpro.qfile_t_from_cobject(): - - qfile_t_from_cobject(pycobject) -> qfile_t - - -ida_fpro.qfile_t_from_fp(): - - qfile_t_from_fp(fp) -> qfile_t - - -ida_fpro.qfile_t_tmpfile(): - - qfile_t_tmpfile() -> qfile_t - - -ida_frame.add_auto_stkpnt(): - - add_auto_stkpnt(pfn, ea, delta) -> bool - - - Add automatic SP register change point. - - @param pfn: pointer to function. may be NULL. (C++: func_t *) - @param ea: linear address where SP changes. usually this is the end of - the instruction which modifies the stack pointer - (\cmd{ea}+\cmd{size}) (C++: ea_t) - @param delta: difference between old and new values of SP (C++: - sval_t) - @return: success - - -ida_frame.add_frame(): - - add_frame(pfn, frsize, frregs, argsize) -> bool - - - Add function frame. - - @param pfn: pointer to function structure (C++: func_t *) - @param frsize: size of function local variables (C++: sval_t) - @param frregs: size of saved registers (C++: ushort) - @param argsize: size of function arguments range which will be purged - upon return. this parameter is used for __stdcall and - __pascal calling conventions. for other calling - conventions please pass 0. (C++: asize_t) - - -ida_frame.add_regvar(): - - add_regvar(pfn, ea1, ea2, canon, user, cmt) -> int - - - Define a register variable. - - @param pfn: function in which the definition will be created (C++: - func_t *) - @param ea1: range of addresses within the function where the - definition will be used (C++: ea_t) - @param ea2: range of addresses within the function where the - definition will be used (C++: ea_t) - @param canon: name of a general register (C++: const char *) - @param user: user-defined name for the register (C++: const char *) - @param cmt: comment for the definition (C++: const char *) - @return: Register variable error codes - - -ida_frame.add_user_stkpnt(): - - add_user_stkpnt(ea, delta) -> bool - - - Add user-defined SP register change point. - - @param ea: linear address where SP changes (C++: ea_t) - @param delta: difference between old and new values of SP (C++: - sval_t) - @return: success - - -ida_frame.build_stkvar_name(): - - build_stkvar_name(pfn, v) -> ssize_t - - - Build automatic stack variable name. - - @param pfn: pointer to function (can't be NULL!) (C++: const func_t - *) - @param v: value of variable offset (C++: sval_t) - @return: length of stack variable name or -1 - - -ida_frame.build_stkvar_xrefs(): - - build_stkvar_xrefs(out, pfn, mptr) - - - Fill 'out' with a list of all the xrefs made from function 'pfn', to - the argument or variable 'mptr' in 'pfn's stack frame. - - @param out: the list of xrefs to fill. (C++: xreflist_t *) - @param pfn: the function to scan. (C++: func_t *) - @param mptr: the argument/variable in pfn's stack frame. (C++: const - member_t *) - - -ida_frame.calc_stkvar_struc_offset(): - - calc_stkvar_struc_offset(pfn, insn, n) -> ea_t - - - Calculate offset of stack variable in the frame structure. - - @param pfn: pointer to function (can't be NULL!) (C++: func_t *) - @param insn: the instruction (C++: const insn_t &) - @param n: number of operand: (0.. UA_MAXOP -1) -1 if error, return - BADADDR (C++: int) - @return: BADADDR if some error (issue a warning if stack frame is - bad) - - -ida_frame.define_stkvar(): - - define_stkvar(pfn, name, off, flags, ti, nbytes) -> bool - - - Define/redefine a stack variable. - - @param pfn: pointer to function (C++: func_t *) - @param name: variable name, NULL means autogenerate a name (C++: const - char *) - @param off: offset of the stack variable in the frame. negative values - denote local variables, positive - function arguments. - (C++: sval_t) - @param flags: variable type flags ( byte_flag() for a byte variable, - for example) (C++: flags_t) - @param ti: additional type information (like offsets, structs, etc) - (C++: const opinfo_t *) - @param nbytes: number of bytes occupied by the variable (C++: asize_t) - @return: success - - -ida_frame.del_frame(): - - del_frame(pfn) -> bool - - - Delete a function frame. - - @param pfn: pointer to function structure (C++: func_t *) - @return: success - - -ida_frame.del_regvar(): - - del_regvar(pfn, ea1, ea2, canon) -> int - - - Delete a register variable definition. - - @param pfn: function in question (C++: func_t *) - @param ea1: range of addresses within the function where the - definition holds (C++: ea_t) - @param ea2: range of addresses within the function where the - definition holds (C++: ea_t) - @param canon: name of a general register (C++: const char *) - @return: Register variable error codes - - -ida_frame.del_stkpnt(): - - del_stkpnt(pfn, ea) -> bool - - - Delete SP register change point. - - @param pfn: pointer to function. may be NULL. (C++: func_t *) - @param ea: linear address (C++: ea_t) - @return: success - - -ida_frame.delete_unreferenced_stkvars(): - - delete_unreferenced_stkvars(pfn) -> int - - -ida_frame.delete_wrong_stkvar_ops(): - - delete_wrong_stkvar_ops(pfn) -> int - - -ida_frame.find_regvar(): - - find_regvar(pfn, ea1, ea2, canon, user) -> regvar_t - find_regvar(pfn, ea, canon) -> regvar_t - - - Find a register variable definition (powerful version). One of 'canon' - and 'user' should be NULL. If both 'canon' and 'user' are NULL it - returns the first regvar definition in the range. - - @param pfn: function in question (C++: func_t *) - @param ea1: range of addresses to search. ea1==BADADDR means the - entire function (C++: ea_t) - @param ea2: range of addresses to search. ea1==BADADDR means the - entire function (C++: ea_t) - @param canon: name of a general register (C++: const char *) - @param user: user-defined name for the register (C++: const char *) - @return: NULL-not found, otherwise ptr to regvar_t - - -ida_frame.frame_off_args(): - - frame_off_args(pfn) -> ea_t - - - Get starting address of arguments section. - - - @param pfn (C++: const func_t *) - - -ida_frame.frame_off_lvars(): - - frame_off_lvars(pfn) -> ea_t - - - Get start address of local variables section. - - - @param pfn (C++: const func_t *) - - -ida_frame.frame_off_retaddr(): - - frame_off_retaddr(pfn) -> ea_t - - - Get starting address of return address section. - - - @param pfn (C++: const func_t *) - - -ida_frame.frame_off_savregs(): - - frame_off_savregs(pfn) -> ea_t - - - Get starting address of saved registers section. - - - @param pfn (C++: const func_t *) - - -ida_frame.get_effective_spd(): - - get_effective_spd(pfn, ea) -> sval_t - - - Get effective difference between the initial and current values of - ESP. This function returns the sp-diff used by the instruction. The - difference between 'get_spd()' and 'get_effective_spd()' is present - only for instructions like "pop [esp+N]": they modify sp and use the - modified value. - - @param pfn: pointer to function. may be NULL. (C++: func_t *) - @param ea: linear address (C++: ea_t) - @return: 0 or the difference, usually a negative number - - -ida_frame.get_frame(): - - get_frame(pfn) -> struc_t - get_frame(ea) -> struc_t * - - - Get pointer to function frame. - - @param pfn: pointer to function structure (C++: const func_t *) - - -ida_frame.get_frame_part(): - - get_frame_part(range, pfn, part) - - - Get offsets of the frame part in the frame. - - @param range: pointer to the output buffer with the frame part - start/end(exclusive) offsets, can't be NULL (C++: - range_t *) - @param pfn: pointer to function structure, can't be NULL (C++: const - func_t *) - @param part: frame part (C++: frame_part_t) - - -ida_frame.get_frame_retsize(): - - get_frame_retsize(pfn) -> int - - - Get size of function return address. - - @param pfn: pointer to function structure, can't be NULL (C++: const - func_t *) - - -ida_frame.get_frame_size(): - - get_frame_size(pfn) -> asize_t - - - Get full size of a function frame. This function takes into account - size of local variables + size of saved registers + size of return - address + number of purged bytes. The purged bytes correspond to the - arguments of the functions with __stdcall and __fastcall calling - conventions. - - @param pfn: pointer to function structure, may be NULL (C++: const - func_t *) - @return: size of frame in bytes or zero - - -ida_frame.get_func_by_frame(): - - get_func_by_frame(frame_id) -> ea_t - - - Get function by its frame id.this function works only with databases - created by IDA > 5.6 - - @param frame_id: id of the function frame (C++: tid_t) - @return: start address of the function or BADADDR - - -ida_frame.get_min_spd_ea(): - - get_min_spd_ea(pfn) -> ea_t - - -ida_frame.get_sp_delta(): - - get_sp_delta(pfn, ea) -> sval_t - - - Get modification of SP made at the specified location - - @param pfn: pointer to function. may be NULL. (C++: func_t *) - @param ea: linear address (C++: ea_t) - @return: 0 if the specified location doesn't contain a SP change - point. otherwise return delta of SP modification. - - -ida_frame.get_spd(): - - get_spd(pfn, ea) -> sval_t - - - Get difference between the initial and current values of ESP. - - @param pfn: pointer to function. may be NULL. (C++: func_t *) - @param ea: linear address of an instruction (C++: ea_t) - @return: 0 or the difference, usually a negative number. returns the - sp-diff before executing the instruction. - - -ida_frame.get_stkvar(): - - get_stkvar(insn, op, v) -> PyObject * - - - Get pointer to stack variable - @param op: reference to instruction operand - @param v: immediate value in the operand (usually op.addr) - @return: - - None on failure - - tuple(member_t, actval) - where actval: actual value used to fetch stack variable - - -ida_frame.has_regvar(): - - has_regvar(pfn, ea) -> bool - - - Is there a register variable definition? - - @param pfn: function in question (C++: func_t *) - @param ea: current address (C++: ea_t) - - -ida_frame.is_funcarg_off(): - - is_funcarg_off(pfn, frameoff) -> bool - - - Does the given offset lie within the arguments section? - - - @param pfn (C++: const func_t *) - @param frameoff (C++: uval_t) - - -class ida_frame.llabel_t(): - - Proxy of C++ llabel_t class - - -ida_frame.llabel_t.ea: - llabel_t_ea_get(self) -> ea_t - -ida_frame.llabel_t.name: - llabel_t_name_get(self) -> char * - -ida_frame.lvar_off(): - - lvar_off(pfn, frameoff) -> sval_t - - - Does the given offset lie within the local variables section? - - - @param pfn (C++: const func_t *) - @param frameoff (C++: uval_t) - - -ida_frame.recalc_spd(): - - recalc_spd(cur_ea) -> bool - - - Recalculate SP delta for an instruction that stops execution. The next - instruction is not reached from the current instruction. We need to - recalculate SP for the next instruction.This function will create a - new automatic SP register change point if necessary. It should be - called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the - current instruction doesn't pass the execution flow to the next - instruction. - - @param cur_ea: linear address of the current instruction (C++: ea_t) - - -class ida_frame.regvar_t(): - - Proxy of C++ regvar_t class - - -ida_frame.regvar_t._print(): - - _print(self) -> size_t - - -ida_frame.regvar_t.canon: - regvar_t_canon_get(self) -> char * - -ida_frame.regvar_t.clear(): - - clear(self) - - -ida_frame.regvar_t.cmt: - regvar_t_cmt_get(self) -> char * - -ida_frame.regvar_t.compare(): - - compare(self, r) -> int - - -ida_frame.regvar_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_frame.regvar_t.empty(): - - empty(self) -> bool - - -ida_frame.regvar_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_frame.regvar_t.extend(): - - extend(self, ea) - - -ida_frame.regvar_t.intersect(): - - intersect(self, r) - - -ida_frame.regvar_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_frame.regvar_t.size(): - - size(self) -> asize_t - - -ida_frame.regvar_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_frame.regvar_t.user: - regvar_t_user_get(self) -> char * - -ida_frame.rename_regvar(): - - rename_regvar(pfn, v, user) -> int - - - Rename a register variable. - - @param pfn: function in question (C++: func_t *) - @param v: variable to rename (C++: regvar_t *) - @param user: new user-defined name for the register (C++: const char - *) - @return: Register variable error codes - - -ida_frame.set_frame_size(): - - set_frame_size(pfn, frsize, frregs, argsize) -> bool - - - Set size of function frame. Note: The returned size may not include - all stack arguments. It does so only for __stdcall and __fastcall - calling conventions. To get the entire frame size for all cases use - get_struc_size(get_frame(pfn)). - - @param pfn: pointer to function structure (C++: func_t *) - @param frsize: size of function local variables (C++: asize_t) - @param frregs: size of saved registers (C++: ushort) - @param argsize: size of function arguments that will be purged from - the stack upon return (C++: asize_t) - @return: success - - -ida_frame.set_purged(): - - set_purged(ea, nbytes, override_old_value) -> bool - - - Set the number of purged bytes for a function or data item (funcptr). - This function will update the database and plan to reanalyze items - referencing the specified address. It works only for processors with - 'PR_PURGING' bit in 16 and 32 bit modes. - - @param ea: address of the function of item (C++: ea_t) - @param nbytes: number of purged bytes (C++: int) - @param override_old_value: may overwrite old information about purged - bytes (C++: bool) - @return: success - - -ida_frame.set_regvar_cmt(): - - set_regvar_cmt(pfn, v, cmt) -> int - - - Set comment for a register variable. - - @param pfn: function in question (C++: func_t *) - @param v: variable to rename (C++: regvar_t *) - @param cmt: new comment (C++: const char *) - @return: Register variable error codes - - -ida_frame.soff_to_fpoff(): - - soff_to_fpoff(pfn, soff) -> sval_t - - - Convert struct offsets into fp-relative offsets. This function - converts the offsets inside the 'struc_t' object into the frame - pointer offsets (for example, EBP-relative). - - @param pfn (C++: func_t *) - @param soff (C++: uval_t) - - -class ida_frame.stkpnt_t(): - - Proxy of C++ stkpnt_t class - - -ida_frame.stkpnt_t.compare(): - - compare(self, r) -> int - - -ida_frame.stkpnt_t.ea: - stkpnt_t_ea_get(self) -> ea_t - -ida_frame.stkpnt_t.spd: - stkpnt_t_spd_get(self) -> sval_t - -class ida_frame.stkpnts_t(): - - Proxy of C++ stkpnts_t class - - -ida_frame.stkpnts_t.compare(): - - compare(self, r) -> int - - -ida_frame.update_fpd(): - - update_fpd(pfn, fpd) -> bool - - - Update frame pointer delta. - - @param pfn: pointer to function structure (C++: func_t *) - @param fpd: new fpd value. cannot be bigger than the local variable - range size. (C++: asize_t) - @return: success - - -class ida_frame.xreflist_entry_t(): - - Proxy of C++ xreflist_entry_t class - - -ida_frame.xreflist_entry_t.ea: - xreflist_entry_t_ea_get(self) -> ea_t - -ida_frame.xreflist_entry_t.opnum: - xreflist_entry_t_opnum_get(self) -> uchar - -ida_frame.xreflist_entry_t.type: - xreflist_entry_t_type_get(self) -> uchar - -class ida_frame.xreflist_t(): - - Proxy of C++ qvector<(xreflist_entry_t)> class - - -ida_frame.xreflist_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_frame.xreflist_t.at(): - - at(self, _idx) -> xreflist_entry_t - - -ida_frame.xreflist_t.begin(): - - begin(self) -> xreflist_entry_t - begin(self) -> xreflist_entry_t - - -ida_frame.xreflist_t.capacity(): - - capacity(self) -> size_t - - -ida_frame.xreflist_t.clear(): - - clear(self) - - -ida_frame.xreflist_t.empty(): - - empty(self) -> bool - - -ida_frame.xreflist_t.end(): - - end(self) -> xreflist_entry_t - end(self) -> xreflist_entry_t - - -ida_frame.xreflist_t.erase(): - - erase(self, it) -> xreflist_entry_t - erase(self, first, last) -> xreflist_entry_t - - -ida_frame.xreflist_t.extract(): - - extract(self) -> xreflist_entry_t - - -ida_frame.xreflist_t.find(): - - find(self, x) -> xreflist_entry_t - find(self, x) -> xreflist_entry_t - - -ida_frame.xreflist_t.grow(): - - grow(self, x=xreflist_entry_t()) - - -ida_frame.xreflist_t.has(): - - has(self, x) -> bool - - -ida_frame.xreflist_t.inject(): - - inject(self, s, len) - - -ida_frame.xreflist_t.insert(): - - insert(self, it, x) -> xreflist_entry_t - - -ida_frame.xreflist_t.pop_back(): - - pop_back(self) - - -ida_frame.xreflist_t.push_back(): - - push_back(self, x) - push_back(self) -> xreflist_entry_t - - -ida_frame.xreflist_t.qclear(): - - qclear(self) - - -ida_frame.xreflist_t.reserve(): - - reserve(self, cnt) - - -ida_frame.xreflist_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_frame.xreflist_t.size(): - - size(self) -> size_t - - -ida_frame.xreflist_t.swap(): - - swap(self, r) - - -ida_frame.xreflist_t.truncate(): - - truncate(self) - - - -=== ida_frame EPYDOC INJECTIONS === -ida_frame.REGVAR_ERROR_ARG -""" -function arguments are bad -""" - -ida_frame.REGVAR_ERROR_NAME -""" -the provided name(s) can't be accepted -""" - -ida_frame.REGVAR_ERROR_OK -""" -all ok -""" - -ida_frame.REGVAR_ERROR_RANGE -""" -the definition range is bad -""" - -ida_frame.STKVAR_VALID_SIZE -""" -x.dtyp contains correct variable type (for insns like 'lea' this bit -must be off) in general, dr_O references do not allow to determine the -variable size -""" -=== ida_frame EPYDOC INJECTIONS END === -ida_funcs.add_func(): - - add_func(ea1, ea2=BADADDR) -> bool - - - Add a new function. If the function end address is 'BADADDR' , then - IDA will try to determine the function bounds by calling - find_func_bounds(..., 'FIND_FUNC_DEFINE' ). - - @param ea1: start address (C++: ea_t) - @param ea2: end address (C++: ea_t) - @return: success - - -ida_funcs.add_func_ex(): - - add_func_ex(pfn) -> bool - - - Add a new function. If the fn->end_ea is 'BADADDR' , then IDA will try - to determine the function bounds by calling find_func_bounds(..., - 'FIND_FUNC_DEFINE' ). - - @param pfn: ptr to filled function structure (C++: func_t *) - @return: success - - -ida_funcs.add_regarg(): - - add_regarg(pfn, reg, tif, name) - - -ida_funcs.append_func_tail(): - - append_func_tail(pfn, ea1, ea2) -> bool - - - Append a new tail chunk to the function definition. If the tail - already exists, then it will simply be added to the function tail list - Otherwise a new tail will be created and its owner will be set to be - our function If a new tail cannot be created, then this function will - fail. - - @param pfn (C++: func_t *) - @param ea1: start of the tail. If a tail already exists at the - specified address it must start at 'ea1' (C++: ea_t) - @param ea2: end of the tail. If a tail already exists at the specified - address it must end at 'ea2'. If specified as BADADDR, IDA - will determine the end address itself. (C++: ea_t) - - -ida_funcs.apply_idasgn_to(): - - apply_idasgn_to(signame, ea, is_startup) -> int - - - Apply a signature file to the specified address. - - @param signame: short name of signature file (the file name without - path) (C++: const char *) - @param ea: address to apply the signature (C++: ea_t) - @param is_startup: if set, then the signature is treated as a startup - one for startup signature ida doesn't rename the - first function of the applied module. (C++: bool) - @return: Library function codes - - -ida_funcs.apply_startup_sig(): - - apply_startup_sig(ea, startup) -> bool - - - Apply a startup signature file to the specified address. - - @param ea: address to apply the signature to; usually \inf{start_ea} - (C++: ea_t) - @param startup: the name of the signature file without path and - extension (C++: const char *) - @return: true if successfully applied the signature - - -ida_funcs.calc_func_size(): - - calc_func_size(pfn) -> asize_t - - - Calculate function size. This function takes into account all - fragments of the function. - - @param pfn: ptr to function structure (C++: func_t *) - - -ida_funcs.calc_idasgn_state(): - - calc_idasgn_state(n) -> int - - - Get state of a signature in the list of planned signatures - - @param n: number of signature in the list (0.. get_idasgn_qty() -1) - (C++: int) - @return: state of signature or IDASGN_BADARG - - -ida_funcs.calc_thunk_func_target(): - - calc_thunk_func_target(pfn) -> ea_t - - - Calculate target of a thunk function. - - @param pfn: pointer to function (may not be NULL) (C++: func_t *) - @return: the target function or BADADDR - - -ida_funcs.del_func(): - - del_func(ea) -> bool - - - Delete a function. - - @param ea: any address in the function entry chunk (C++: ea_t) - @return: success - - -ida_funcs.del_idasgn(): - - del_idasgn(n) -> int - - - Remove signature from the list of planned signatures. - - @param n: number of signature in the list (0.. get_idasgn_qty() -1) - (C++: int) - @return: IDASGN_OK , IDASGN_BADARG , IDASGN_APPLIED - - -ida_funcs.f_any(): - - f_any(arg1, arg2) -> bool - - - Helper function to accept any address. - - -ida_funcs.find_func_bounds(): - - find_func_bounds(nfn, flags) -> int - - - Determine the boundaries of a new function. This function tries to - find the start and end addresses of a new function. It calls the - module with \ph{func_bounds} in order to fine tune the function - boundaries. - - @param nfn: structure to fill with information \ nfn->start_ea points - to the start address of the new function. (C++: func_t *) - @param flags: Find function bounds flags (C++: int) - @return: Find function bounds result codes - - -ida_funcs.func_contains(): - - func_contains(pfn, ea) -> bool - - - Does the given function contain the given address? - - - @param pfn (C++: func_t *) - @param ea (C++: ea_t) - - -ida_funcs.func_does_return(): - - func_does_return(callee) -> bool - - - Does the function return?. To calculate the answer, 'FUNC_NORET' flag - and is_noret() are consulted The latter is required for imported - functions in the .idata section. Since in .idata we have only function - pointers but not functions, we have to introduce a special flag for - them. - - @param callee (C++: ea_t) - - -ida_funcs.func_item_iterator_decode_preceding_insn(): - - func_item_iterator_decode_preceding_insn(fii, visited, p_farref, out) -> bool - - -ida_funcs.func_item_iterator_decode_prev_insn(): - - func_item_iterator_decode_prev_insn(fii, out) -> bool - - -ida_funcs.func_item_iterator_next(): - - func_item_iterator_next(fii, testf, ud) -> bool - - -ida_funcs.func_item_iterator_prev(): - - func_item_iterator_prev(fii, testf, ud) -> bool - - -class ida_funcs.func_item_iterator_t(): - - Proxy of C++ func_item_iterator_t class - - -ida_funcs.func_item_iterator_t.chunk(): - - chunk(self) -> range_t - - -ida_funcs.func_item_iterator_t.current(): - - current(self) -> ea_t - - -ida_funcs.func_item_iterator_t.decode_preceding_insn(): - - decode_preceding_insn(self, visited, p_farref, out) -> bool - - -ida_funcs.func_item_iterator_t.decode_prev_insn(): - - decode_prev_insn(self, out) -> bool - - -ida_funcs.func_item_iterator_t.first(): - - first(self) -> bool - - -ida_funcs.func_item_iterator_t.last(): - - last(self) -> bool - - -ida_funcs.func_item_iterator_t.next(): - - next(self, func, ud) -> bool - - -ida_funcs.func_item_iterator_t.next_addr(): - - next_addr(self) -> bool - - -ida_funcs.func_item_iterator_t.next_code(): - - next_code(self) -> bool - - -ida_funcs.func_item_iterator_t.next_data(): - - next_data(self) -> bool - - -ida_funcs.func_item_iterator_t.next_head(): - - next_head(self) -> bool - - -ida_funcs.func_item_iterator_t.next_not_tail(): - - next_not_tail(self) -> bool - - -ida_funcs.func_item_iterator_t.prev(): - - prev(self, func, ud) -> bool - - -ida_funcs.func_item_iterator_t.prev_addr(): - - prev_addr(self) -> bool - - -ida_funcs.func_item_iterator_t.prev_code(): - - prev_code(self) -> bool - - -ida_funcs.func_item_iterator_t.prev_data(): - - prev_data(self) -> bool - - -ida_funcs.func_item_iterator_t.prev_head(): - - prev_head(self) -> bool - - -ida_funcs.func_item_iterator_t.prev_not_tail(): - - prev_not_tail(self) -> bool - - -ida_funcs.func_item_iterator_t.set(): - - set(self, pfn, _ea=BADADDR) -> bool - - -ida_funcs.func_item_iterator_t.set_range(): - - set_range(self, ea1, ea2) -> bool - - -ida_funcs.func_parent_iterator_set(): - - func_parent_iterator_set(fpi, pfn) -> bool - - -class ida_funcs.func_parent_iterator_t(): - - Proxy of C++ func_parent_iterator_t class - - -ida_funcs.func_parent_iterator_t.first(): - - first(self) -> bool - - -ida_funcs.func_parent_iterator_t.last(): - - last(self) -> bool - - -ida_funcs.func_parent_iterator_t.next(): - - next(self) -> bool - - -ida_funcs.func_parent_iterator_t.parent(): - - parent(self) -> ea_t - - -ida_funcs.func_parent_iterator_t.prev(): - - prev(self) -> bool - - -ida_funcs.func_parent_iterator_t.reset_fnt(): - - reset_fnt(self, _fnt) - - -ida_funcs.func_parent_iterator_t.set(): - - set(self, _fnt) -> bool - - -class ida_funcs.func_t(): - - Proxy of C++ func_t class - - -ida_funcs.func_t._print(): - - _print(self) -> size_t - - -ida_funcs.func_t.analyzed_sp(): - - analyzed_sp(self) -> bool - - -ida_funcs.func_t.argsize: - func_t_argsize_get(self) -> asize_t - -ida_funcs.func_t.clear(): - - clear(self) - - -ida_funcs.func_t.color: - func_t_color_get(self) -> bgcolor_t - -ida_funcs.func_t.compare(): - - compare(self, r) -> int - - -ida_funcs.func_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_funcs.func_t.does_return(): - - does_return(self) -> bool - - -ida_funcs.func_t.empty(): - - empty(self) -> bool - - -ida_funcs.func_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_funcs.func_t.extend(): - - extend(self, ea) - - -ida_funcs.func_t.flags: - func_t_flags_get(self) -> uint64 - -ida_funcs.func_t.fpd: - func_t_fpd_get(self) -> asize_t - -ida_funcs.func_t.frame: - func_t_frame_get(self) -> uval_t - -ida_funcs.func_t.frregs: - func_t_frregs_get(self) -> ushort - -ida_funcs.func_t.frsize: - func_t_frsize_get(self) -> asize_t - -ida_funcs.func_t.intersect(): - - intersect(self, r) - - -ida_funcs.func_t.is_far(): - - is_far(self) -> bool - - -ida_funcs.func_t.llabelqty: - func_t_llabelqty_get(self) -> int - -ida_funcs.func_t.llabels: - func_t_llabels_get(self) -> llabel_t * - -ida_funcs.func_t.need_prolog_analysis(): - - need_prolog_analysis(self) -> bool - - -ida_funcs.func_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_funcs.func_t.owner: - func_t_owner_get(self) -> ea_t - -ida_funcs.func_t.pntqty: - func_t_pntqty_get(self) -> uint32 - -ida_funcs.func_t.points: - - __get_points__(self) -> stkpnt_array - - -ida_funcs.func_t.referers: - func_t_referers_get(self) -> ea_t * - -ida_funcs.func_t.refqty: - func_t_refqty_get(self) -> int - -ida_funcs.func_t.regargqty: - func_t_regargqty_get(self) -> int - -ida_funcs.func_t.regargs: - func_t_regargs_get(self) -> regarg_t - -ida_funcs.func_t.regvarqty: - func_t_regvarqty_get(self) -> int - -ida_funcs.func_t.regvars: - - __get_regvars__(self) -> regvar_array - - -ida_funcs.func_t.size(): - - size(self) -> asize_t - - -ida_funcs.func_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_funcs.func_t.tailqty: - func_t_tailqty_get(self) -> int - -ida_funcs.func_t.tails: - - __get_tails__(self) -> range_array - - -ida_funcs.func_t__from_ptrval__(): - - func_t__from_ptrval__(ptrval) -> func_t - - -ida_funcs.func_tail_iterator_set(): - - func_tail_iterator_set(fti, pfn, ea) -> bool - - -ida_funcs.func_tail_iterator_set_ea(): - - func_tail_iterator_set_ea(fti, ea) -> bool - - -class ida_funcs.func_tail_iterator_t(): - - Proxy of C++ func_tail_iterator_t class - - -ida_funcs.func_tail_iterator_t.chunk(): - - chunk(self) -> range_t - - -ida_funcs.func_tail_iterator_t.first(): - - first(self) -> bool - - -ida_funcs.func_tail_iterator_t.last(): - - last(self) -> bool - - -ida_funcs.func_tail_iterator_t.main(): - - main(self) -> bool - - -ida_funcs.func_tail_iterator_t.next(): - - next(self) -> bool - - -ida_funcs.func_tail_iterator_t.prev(): - - prev(self) -> bool - - -ida_funcs.func_tail_iterator_t.set(): - - set(self, _pfn, ea=BADADDR) -> bool - - -ida_funcs.func_tail_iterator_t.set_ea(): - - set_ea(self, ea) -> bool - - -ida_funcs.func_tail_iterator_t.set_range(): - - set_range(self, ea1, ea2) -> bool - - -ida_funcs.get_current_idasgn(): - - get_current_idasgn() -> int - - - Get number of the the current signature. - - @return: 0..n-1 - - -ida_funcs.get_fchunk(): - - get_fchunk(ea) -> func_t - - - Get pointer to function chunk structure by address. - - @param ea: any address in a function chunk (C++: ea_t) - @return: ptr to a function chunk or NULL. This function may return a - function entry as well as a function tail. - - -ida_funcs.get_fchunk_num(): - - get_fchunk_num(ea) -> int - - - Get ordinal number of a function chunk in the global list of function - chunks. - - @param ea: any address in the function chunk (C++: ea_t) - @return: number of function chunk (0.. get_fchunk_qty() -1). -1 means - 'no function chunk at the specified address'. - - -ida_funcs.get_fchunk_qty(): - - get_fchunk_qty() -> size_t - - - Get total number of function chunks in the program. - - -ida_funcs.get_fchunk_referer(): - - get_fchunk_referer(ea, idx) -> ea_t - - -ida_funcs.get_func(): - - get_func(ea) -> func_t - - - Get pointer to function structure by address. - - @param ea: any address in a function (C++: ea_t) - @return: ptr to a function or NULL. This function returns a function - entry chunk. - - -ida_funcs.get_func_bitness(): - - get_func_bitness(pfn) -> int - - - Get function bitness (which is equal to the function segment bitness). - pfn==NULL => returns 0 - - @param pfn (C++: const func_t *) - - -ida_funcs.get_func_bits(): - - get_func_bits(pfn) -> int - - - Get number of bits in the function addressing. - - - @param pfn (C++: const func_t *) - - -ida_funcs.get_func_bytes(): - - get_func_bytes(pfn) -> int - - - Get number of bytes in the function addressing. - - - @param pfn (C++: const func_t *) - - -ida_funcs.get_func_chunknum(): - - get_func_chunknum(pfn, ea) -> int - - - Get the containing tail chunk of 'ea'. - - @param pfn (C++: func_t *) - @param ea (C++: ea_t) - - -ida_funcs.get_func_cmt(): - - get_func_cmt(pfn, repeatable) -> ssize_t - - - Get function comment. - - @param pfn: ptr to function structure (C++: const func_t *) - @param repeatable: get repeatable comment? (C++: bool) - @return: size of comment or -1 In fact this function works with - function chunks too. - - -ida_funcs.get_func_name(): - - get_func_name(ea) -> ssize_t - - - Get function name. - - @param ea: any address in the function (C++: ea_t) - @return: length of the function name - - -ida_funcs.get_func_num(): - - get_func_num(ea) -> int - - - Get ordinal number of a function. - - @param ea: any address in the function (C++: ea_t) - @return: number of function (0.. get_func_qty() -1). -1 means 'no - function at the specified address'. - - -ida_funcs.get_func_qty(): - - get_func_qty() -> size_t - - - Get total number of functions in the program. - - -ida_funcs.get_func_ranges(): - - get_func_ranges(ranges, pfn) -> ea_t - - - Get function ranges. - - @param ranges: buffer to receive the range info (C++: rangeset_t *) - @param pfn: ptr to function structure (C++: func_t *) - @return: end address of the last function range (BADADDR-error) - - -ida_funcs.get_idasgn_desc(): - - get_idasgn_desc(n) -> PyObject * - - - Get information about a signature in the list. - It returns: (name of signature, names of optional libraries) - - See also: get_idasgn_desc_with_matches - - @param n: number of signature in the list (0..get_idasgn_qty()-1) - @return: None on failure or tuple(signame, optlibs) - - -ida_funcs.get_idasgn_desc_with_matches(): - - get_idasgn_desc_with_matches(n) -> PyObject * - - - Get information about a signature in the list. - It returns: (name of signature, names of optional libraries, number of matches) - - @param n: number of signature in the list (0..get_idasgn_qty()-1) - @return: None on failure or tuple(signame, optlibs, nmatches) - - -ida_funcs.get_idasgn_qty(): - - get_idasgn_qty() -> int - - - Get number of signatures in the list of planned and applied - signatures. - - @return: 0..n - - -ida_funcs.get_idasgn_title(): - - get_idasgn_title(name) -> ssize_t - - - Get full description of the signature by its short name. - - @param name: short name of a signature (C++: const char *) - @return: size of signature description or -1 - - -ida_funcs.get_next_fchunk(): - - get_next_fchunk(ea) -> func_t - - - Get pointer to the next function chunk in the global list. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to function chunk or NULL if next function chunk doesn't - exist - - -ida_funcs.get_next_func(): - - get_next_func(ea) -> func_t - - - Get pointer to the next function. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to function or NULL if next function doesn't exist - - -ida_funcs.get_next_func_addr(): - - get_next_func_addr(pfn, ea) -> ea_t - - -ida_funcs.get_prev_fchunk(): - - get_prev_fchunk(ea) -> func_t - - - Get pointer to the previous function chunk in the global list. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to function chunk or NULL if previous function chunk - doesn't exist - - -ida_funcs.get_prev_func(): - - get_prev_func(ea) -> func_t - - - Get pointer to the previous function. - - @param ea: any address in the program (C++: ea_t) - @return: ptr to function or NULL if previous function doesn't exist - - -ida_funcs.get_prev_func_addr(): - - get_prev_func_addr(pfn, ea) -> ea_t - - -ida_funcs.getn_fchunk(): - - getn_fchunk(n) -> func_t - - - Get pointer to function chunk structure by number. - - @param n: number of function chunk, is in range 0.. get_fchunk_qty() - -1 (C++: int) - @return: ptr to a function chunk or NULL. This function may return a - function entry as well as a function tail. - - -ida_funcs.getn_func(): - - getn_func(n) -> func_t - - - Get pointer to function structure by number. - - @param n: number of function, is in range 0.. get_func_qty() -1 (C++: - size_t) - @return: ptr to a function or NULL. This function returns a function - entry chunk. - - -ida_funcs.is_finally_visible_func(): - - is_finally_visible_func(pfn) -> bool - - - Is the function visible (event after considering 'SCF_SHHID_FUNC' )? - - - @param pfn (C++: func_t *) - - -ida_funcs.is_func_entry(): - - is_func_entry(pfn) -> bool - - - Does function describe a function entry chunk? - - - @param pfn (C++: const func_t *) - - -ida_funcs.is_func_locked(): - - is_func_locked(pfn) -> bool - - - Is the function pointer locked? - - - @param pfn (C++: const func_t *) - - -ida_funcs.is_func_tail(): - - is_func_tail(pfn) -> bool - - - Does function describe a function tail chunk? - - - @param pfn (C++: const func_t *) - - -ida_funcs.is_same_func(): - - is_same_func(ea1, ea2) -> bool - - - Do two addresses belong to the same function? - - - @param ea1 (C++: ea_t) - @param ea2 (C++: ea_t) - - -ida_funcs.is_visible_func(): - - is_visible_func(pfn) -> bool - - - Is the function visible (not hidden)? - - - @param pfn (C++: func_t *) - - -class ida_funcs.lock_func(): - - Proxy of C++ lock_func class - - -ida_funcs.lock_func_range(): - - lock_func_range(pfn, lock) - - - Lock function pointer Locked pointers are guaranteed to remain valid - until they are unlocked. Ranges with locked pointers cannot be deleted - or moved. - - @param pfn (C++: const func_t *) - @param lock (C++: bool) - - -ida_funcs.plan_to_apply_idasgn(): - - plan_to_apply_idasgn(fname) -> int - - - Add a signature file to the list of planned signature files. - - @param fname: file name. should not contain directory part. (C++: - const char *) - @return: 0 if failed, otherwise number of planned (and applied) - signatures - - -class ida_funcs.range_array(): - - Proxy of C++ dynamic_wrapped_array_t<(range_t)> class - - -ida_funcs.range_array.count: - range_array_count_get(self) -> size_t - -ida_funcs.range_array.data: - range_array_data_get(self) -> range_t - -ida_funcs.read_regargs(): - - read_regargs(pfn) - - -ida_funcs.reanalyze_function(): - - reanalyze_function(pfn, ea1=0, ea2=BADADDR, analyze_parents=False) - - - Reanalyze a function. This function plans to analyzes all chunks of - the given function. Optional parameters (ea1, ea2) may be used to - narrow the analyzed range. - - @param pfn: pointer to a function (C++: func_t *) - @param ea1: start of the range to analyze (C++: ea_t) - @param ea2: end of range to analyze (C++: ea_t) - @param analyze_parents: meaningful only if pfn points to a function - tail. if true, all tail parents will be - reanalyzed. if false, only the given tail will - be reanalyzed. (C++: bool) - - -ida_funcs.reanalyze_noret_flag(): - - reanalyze_noret_flag(ea) -> bool - - - Plan to reanalyze noret flag. This function does not remove FUNC_NORET - if it is already present. It just plans to reanalysis. - - @param ea (C++: ea_t) - - -class ida_funcs.regarg_t(): - - Proxy of C++ regarg_t class - - -ida_funcs.regarg_t.name: - regarg_t_name_get(self) -> char * - -ida_funcs.regarg_t.reg: - regarg_t_reg_get(self) -> int - -ida_funcs.regarg_t.type: - regarg_t_type_get(self) -> type_t * - -class ida_funcs.regvar_array(): - - Proxy of C++ dynamic_wrapped_array_t<(regvar_t)> class - - -ida_funcs.regvar_array.count: - regvar_array_count_get(self) -> size_t - -ida_funcs.regvar_array.data: - regvar_array_data_get(self) -> regvar_t * - -ida_funcs.remove_func_tail(): - - remove_func_tail(pfn, tail_ea) -> bool - - - Remove a function tail. If the tail belongs only to one function, it - will be completely removed. Otherwise if the function was the tail - owner, the first function using this tail becomes the owner of the - tail. - - @param pfn (C++: func_t *) - @param tail_ea (C++: ea_t) - - -ida_funcs.set_func_cmt(): - - set_func_cmt(pfn, cmt, repeatable) -> bool - - - Set function comment. This function works with function chunks too. - - @param pfn: ptr to function structure (C++: const func_t *) - @param cmt: comment string, may be multiline (with ' '). Use empty - str ("") to delete comment (C++: const char *) - @param repeatable: set repeatable comment? (C++: bool) - - -ida_funcs.set_func_end(): - - set_func_end(ea, newend) -> bool - - - Move function chunk end address. - - @param ea: any address in the function (C++: ea_t) - @param newend: new end address of the function (C++: ea_t) - @return: success - - -ida_funcs.set_func_name_if_jumpfunc(): - - set_func_name_if_jumpfunc(pfn, oldname) -> int - - - Give a meaningful name to function if it consists of only 'jump' - instruction. - - @param pfn: pointer to function (may be NULL) (C++: func_t *) - @param oldname: old name of function. if old name was in "j_..." form, - then we may discard it and set a new name. if oldname - is not known, you may pass NULL. (C++: const char *) - @return: success - - -ida_funcs.set_func_start(): - - set_func_start(ea, newstart) -> int - - - Move function chunk start address. - - @param ea: any address in the function (C++: ea_t) - @param newstart: new end address of the function (C++: ea_t) - @return: Function move result codes - - -ida_funcs.set_noret_insn(): - - set_noret_insn(insn_ea, noret) -> bool - - - Signal a non-returning instruction. This function can be used by the - processor module to tell the kernel about non-returning instructions - (like call exit). The kernel will perform the global function analysis - and find out if the function returns at all. This analysis will be - done at the first call to 'func_does_return()' - - @param insn_ea (C++: ea_t) - @param noret (C++: bool) - @return: true if the instruction 'noret' flag has been changed - - -ida_funcs.set_tail_owner(): - - set_tail_owner(fnt, func_start) -> bool - - - Set a function as the possessing function of a function tail. The - function should already refer to the tail (after append_func_tail). - - @param fnt (C++: func_t *) - @param func_start (C++: ea_t) - - -ida_funcs.set_visible_func(): - - set_visible_func(pfn, visible) - - - Set visibility of function. - - - @param pfn (C++: func_t *) - @param visible (C++: bool) - - -class ida_funcs.stkpnt_array(): - - Proxy of C++ dynamic_wrapped_array_t<(stkpnt_t)> class - - -ida_funcs.stkpnt_array.count: - stkpnt_array_count_get(self) -> size_t - -ida_funcs.stkpnt_array.data: - stkpnt_array_data_get(self) -> stkpnt_t * - -ida_funcs.try_to_add_libfunc(): - - try_to_add_libfunc(ea) -> int - - - Apply the currently loaded signature file to the specified address. If - a library function is found, then create a function and name it - accordingly. - - @param ea: any address in the program (C++: ea_t) - @return: Library function codes - - -ida_funcs.update_func(): - - update_func(pfn) -> bool - - - Update information about a function in the database ( 'func_t' ). You - must not change the function start and end addresses using this - function. Use 'set_func_start()' and 'set_func_end()' for it. - - @param pfn: ptr to function structure (C++: func_t *) - @return: success - - - -=== ida_funcs EPYDOC INJECTIONS === -ida_funcs.FIND_FUNC_DEFINE -""" -create instruction if undefined byte is encountered -""" - -ida_funcs.FIND_FUNC_EXIST -""" -its bounds are returned in 'nfn'. - -function exists already. -""" - -ida_funcs.FIND_FUNC_IGNOREFN -""" -ignore existing function boundaries. by default the function returns -function boundaries if ea belongs to a function. -""" - -ida_funcs.FIND_FUNC_KEEPBD -""" -just create instructions inside the boundaries. - -do not modify incoming function boundaries, -""" - -ida_funcs.FIND_FUNC_NORMAL -""" -stop processing if undefined byte is encountered -""" - -ida_funcs.FIND_FUNC_OK -""" -ok, 'nfn' is ready for 'add_func()' -""" - -ida_funcs.FIND_FUNC_UNDEF -""" -nfn->end_ea will have the address of the unexplored byte. - -function has instructions that pass execution flow to unexplored -bytes. -""" - -ida_funcs.FUNC_BOTTOMBP -""" -BP points to the bottom of the stack frame. -""" - -ida_funcs.FUNC_FAR -""" -Far function. -""" - -ida_funcs.FUNC_FRAME -""" -Function uses frame pointer (BP) -""" - -ida_funcs.FUNC_FUZZY_SP -""" -for example: and esp, 0FFFFFFF0h - -Function changes SP in untraceable way, -""" - -ida_funcs.FUNC_HIDDEN -""" -A hidden function chunk. -""" - -ida_funcs.FUNC_LIB -""" -Library function. -""" - -ida_funcs.FUNC_LUMINA -""" -Function info is provided by Lumina. -""" - -ida_funcs.FUNC_NORET -""" -Function doesn't return. -""" - -ida_funcs.FUNC_NORET_PENDING -""" -This flag is verified upon 'func_does_return()' - -Function 'non-return' analysis must be performed. -""" - -ida_funcs.FUNC_PROLOG_OK -""" -by last SP-analysis - -Prolog analysis has be performed -""" - -ida_funcs.FUNC_PURGED_OK -""" -'argsize' field has been validated. If this bit is clear and 'argsize' -is 0, then we do not known the real number of bytes removed from the -stack. This bit is handled by the processor module. -""" - -ida_funcs.FUNC_SP_READY -""" -SP-analysis has been performed. If this flag is on, the stack change -points should not be not modified anymore. Currently this analysis is -performed only for PC -""" - -ida_funcs.FUNC_STATICDEF -""" -Static function. -""" - -ida_funcs.FUNC_TAIL -""" -This is a function tail. Other bits must be clear (except -'FUNC_HIDDEN' ). -""" - -ida_funcs.FUNC_THUNK -""" -Thunk (jump) function. -""" - -ida_funcs.FUNC_USERFAR -""" -of the function - -User has specified far-ness -""" - -ida_funcs.IDASGN_APPLIED -""" -signature is already applied -""" - -ida_funcs.IDASGN_BADARG -""" -bad number of signature -""" - -ida_funcs.IDASGN_CURRENT -""" -signature is currently being applied -""" - -ida_funcs.IDASGN_OK -""" -ok -""" - -ida_funcs.IDASGN_PLANNED -""" -signature is planned to be applied -""" - -ida_funcs.LIBFUNC_DELAY -""" -no decision because of lack of information -""" - -ida_funcs.LIBFUNC_FOUND -""" -ok, library function is found -""" - -ida_funcs.LIBFUNC_NONE -""" -no, this is not a library function -""" - -ida_funcs.MOVE_FUNC_BADSTART -""" -bad new start address -""" - -ida_funcs.MOVE_FUNC_NOCODE -""" -no instruction at 'newstart' -""" - -ida_funcs.MOVE_FUNC_NOFUNC -""" -no function at 'ea' -""" - -ida_funcs.MOVE_FUNC_OK -""" -ok -""" - -ida_funcs.MOVE_FUNC_REFUSED -""" -a plugin refused the action -""" -=== ida_funcs EPYDOC INJECTIONS END === -class ida_gdl.BasicBlock(): - - Basic block class. It is returned by the Flowchart class - - -ida_gdl.BasicBlock.preds(): - - Iterates the predecessors list - - -ida_gdl.BasicBlock.succs(): - - Iterates the successors list - - -class ida_gdl.FlowChart(): - - Flowchart class used to determine basic blocks. - Check ex_gdl_qflow_chart.py for sample usage. - - -ida_gdl.FlowChart.refresh(): - - Refreshes the flow chart - - -ida_gdl.display_gdl(): - - display_gdl(fname) -> int - - - Display GDL file by calling wingraph32. The exact name of the grapher - is taken from the configuration file and set up by - 'setup_graph_subsystem()' . - - @param fname (C++: const char *) - @return: error code from os, 0 if ok - - -ida_gdl.gen_complex_call_chart(): - - gen_complex_call_chart(filename, wait, title, ea1, ea2, flags, recursion_depth=-1) -> bool - - - Build and display a complex xref graph. - - @param filename: output file name. the file extension is not used. - maybe NULL. (C++: const char *) - @param wait: message to display during graph building (C++: const char - *) - @param title: graph title (C++: const char *) - @param ea1: address range (C++: ea_t) - @param ea2: address range (C++: ea_t) - @param flags: combination of Call chart building flags and Flow - graph building flags . if none of CHART_GEN_DOT , - CHART_GEN_GDL , CHART_WINGRAPH is specified, the - function will return false. (C++: int) - @param recursion_depth: optional limit of recursion (C++: int32) - @return: success. if fails, a warning message is displayed on the - screen - - -ida_gdl.gen_flow_graph(): - - gen_flow_graph(filename, title, pfn, ea1, ea2, gflags) -> bool - - - Build and display a flow graph. - - @param filename: output file name. the file extension is not used. - maybe NULL. (C++: const char *) - @param title: graph title (C++: const char *) - @param pfn: function to graph (C++: func_t *) - @param ea1: if pfn == NULL, then the address range (C++: ea_t) - @param ea2: if pfn == NULL, then the address range (C++: ea_t) - @param gflags: combination of Flow graph building flags . if none of - CHART_GEN_DOT , CHART_GEN_GDL , CHART_WINGRAPH is - specified, the function will return false (C++: int) - @return: success. if fails, a warning message is displayed on the - screen - - -ida_gdl.gen_gdl(): - - gen_gdl(g, fname) - - - Create GDL file for graph. - - - @param g (C++: const gdl_graph_t *) - @param fname (C++: const char *) - - -ida_gdl.gen_simple_call_chart(): - - gen_simple_call_chart(filename, wait, title, gflags) -> bool - - - Build and display a simple function call graph. - - @param filename: output file name. the file extension is not used. - maybe NULL. (C++: const char *) - @param wait: message to display during graph building (C++: const char - *) - @param title: graph title (C++: const char *) - @param gflags: combination of CHART_NOLIBFUNCS and Flow graph - building flags . if none of CHART_GEN_DOT , - CHART_GEN_GDL , CHART_WINGRAPH is specified, the - function will return false. (C++: int) - @return: success. if fails, a warning message is displayed on the - screen - - -ida_gdl.is_noret_block(): - - is_noret_block(btype) -> bool - - - Does this block never return? - - - @param btype (C++: fc_block_type_t) - - -ida_gdl.is_ret_block(): - - is_ret_block(btype) -> bool - - - Does this block return? - - - @param btype (C++: fc_block_type_t) - - -class ida_gdl.node_iterator(): - - Proxy of C++ node_iterator class - - -class ida_gdl.qbasic_block_t(): - - Proxy of C++ qbasic_block_t class - - -ida_gdl.qbasic_block_t._print(): - - _print(self) -> size_t - - -ida_gdl.qbasic_block_t.clear(): - - clear(self) - - -ida_gdl.qbasic_block_t.compare(): - - compare(self, r) -> int - - -ida_gdl.qbasic_block_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_gdl.qbasic_block_t.empty(): - - empty(self) -> bool - - -ida_gdl.qbasic_block_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_gdl.qbasic_block_t.extend(): - - extend(self, ea) - - -ida_gdl.qbasic_block_t.intersect(): - - intersect(self, r) - - -ida_gdl.qbasic_block_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_gdl.qbasic_block_t.size(): - - size(self) -> asize_t - - -ida_gdl.qbasic_block_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -class ida_gdl.qflow_chart_t(): - - Proxy of C++ qflow_chart_t class - - -ida_gdl.qflow_chart_t.append_to_flowchart(): - - append_to_flowchart(self, ea1, ea2) - - -ida_gdl.qflow_chart_t.bounds: - qflow_chart_t_bounds_get(self) -> range_t - -ida_gdl.qflow_chart_t.calc_block_type(): - - calc_block_type(self, blknum) -> fc_block_type_t - - -ida_gdl.qflow_chart_t.create(): - - create(self, _title, _pfn, _ea1, _ea2, _flags) - create(self, _title, ranges, _flags) - - -ida_gdl.qflow_chart_t.flags: - qflow_chart_t_flags_get(self) -> int - -ida_gdl.qflow_chart_t.get_node_label(): - - get_node_label(self, arg2, arg3, arg4) -> char * - - -ida_gdl.qflow_chart_t.is_noret_block(): - - is_noret_block(self, blknum) -> bool - - -ida_gdl.qflow_chart_t.is_ret_block(): - - is_ret_block(self, blknum) -> bool - - -ida_gdl.qflow_chart_t.npred(): - - npred(self, node) -> int - - -ida_gdl.qflow_chart_t.nproper: - qflow_chart_t_nproper_get(self) -> int - -ida_gdl.qflow_chart_t.nsucc(): - - nsucc(self, node) -> int - - -ida_gdl.qflow_chart_t.pfn: - qflow_chart_t_pfn_get(self) -> func_t * - -ida_gdl.qflow_chart_t.pred(): - - pred(self, node, i) -> int - - -ida_gdl.qflow_chart_t.print_names(): - - print_names(self) -> bool - - -ida_gdl.qflow_chart_t.print_node_attributes(): - - print_node_attributes(self, arg2, arg3) - - -ida_gdl.qflow_chart_t.refresh(): - - refresh(self) - - -ida_gdl.qflow_chart_t.size(): - - size(self) -> int - - -ida_gdl.qflow_chart_t.succ(): - - succ(self, node, i) -> int - - -ida_gdl.qflow_chart_t.title: - qflow_chart_t_title_get(self) -> qstring * - - -=== ida_gdl EPYDOC INJECTIONS === -ida_gdl.CHART_FOLLOW_DIRECTION -""" -analyze references to added blocks only in the direction of the -reference who discovered the current block -""" - -ida_gdl.CHART_GEN_DOT -""" -generate .dot file (file extension is forced to .dot) -""" - -ida_gdl.CHART_GEN_GDL -""" -generate .gdl file (file extension is forced to .gdl) -""" - -ida_gdl.CHART_IGNORE_LIB_FROM -""" -ignore references from library functions -""" - -ida_gdl.CHART_IGNORE_LIB_TO -""" -ignore references to library functions -""" - -ida_gdl.CHART_NOLIBFUNCS -""" -don't include library functions in the graph -""" - -ida_gdl.CHART_PRINT_DOTS -""" -print dots if xrefs exist outside of the range recursion depth -""" - -ida_gdl.CHART_PRINT_NAMES -""" -print labels for each block? -""" - -ida_gdl.CHART_RECURSIVE -""" -analyze added blocks -""" - -ida_gdl.CHART_REFERENCED -""" -references from the addresses in the list -""" - -ida_gdl.CHART_REFERENCING -""" -references to the addresses in the list -""" - -ida_gdl.CHART_WINGRAPH -""" -call grapher to display the graph -""" - -ida_gdl.FC_APPND -""" -multirange flowchart (set by append_to_flowchart) -""" - -ida_gdl.FC_CHKBREAK -""" -build_qflow_chart() may be aborted by user -""" - -ida_gdl.FC_NOEXT -""" -do not compute external blocks. Use this to prevent jumps leaving the -function from appearing in the flow chart. Unless specified, the -targets of those outgoing jumps will be present in the flow chart -under the form of one-instruction blocks -""" - -ida_gdl.FC_PREDS -""" -compute predecessor lists -""" - -ida_gdl.FC_PRINT -""" -print names (used only by display_flow_chart()) -""" -=== ida_gdl EPYDOC INJECTIONS END === -ida_graph.GraphViewer.AddEdge(): - - Creates an edge between two given node ids - - -ida_graph.GraphViewer.AddNode(): - - Creates a node associated with the given object and returns the node id - - -ida_graph.GraphViewer.Clear(): - - Clears all the nodes and edges - - -ida_graph.GraphViewer.Close(): - - Closes the graph. - It is possible to call Show() again (which will recreate the graph) - - -ida_graph.GraphViewer.Count(): - - Returns the node count - - -ida_graph.GraphViewer.CreateGroups(): - - Send a request to modify the graph by creating a - (set of) group(s), and perform an animation. - - Each object in the 'groups_infos' list must be of the format: - { - "nodes" : [, , , ...] # The list of nodes to group - "text" : # The synthetic text for that group - } - - @param groups_infos: A list of objects that describe those groups. - @return: A [, , ...] list of group nodes, or None (failure). - - -ida_graph.GraphViewer.DelNodesInfos(): - - Delete the properties for the given node(s). - - @param nodes: A list of node IDs - - -ida_graph.GraphViewer.DeleteGroups(): - - Send a request to delete the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param new_current: A node to focus on after the groups have been deleted - @return: True on success, False otherwise. - - -ida_graph.GraphViewer.GetNodeInfo(): - - Get the properties for the given node. - - @param node: The index of the node. - @return: A tuple (bg_color, frame_color, ea, text), or None. - - -ida_graph.GraphViewer.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_graph.GraphViewer.OnRefresh(): - - Event called when the graph is refreshed or first created. - From this event you are supposed to create nodes and edges. - This callback is mandatory. - - @note: ***It is important to clear previous nodes before adding nodes.*** - @return: Returning True tells the graph viewer to use the items. Otherwise old items will be used. - - -ida_graph.GraphViewer.Refresh(): - - Refreshes the view. This causes the OnRefresh() to be called - - -ida_graph.GraphViewer.Select(): - - Selects a node on the graph - - -ida_graph.GraphViewer.SetCurrentRendererType(): - - Set the current view's renderer. - - @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. - - -ida_graph.GraphViewer.SetGroupsVisibility(): - - Send a request to expand/collapse the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param expand: True to expand the group, False otherwise. - @param new_current: A node to focus on after the groups have been expanded/collapsed. - @return: True on success, False otherwise. - - -ida_graph.GraphViewer.SetNodeInfo(): - - Set the properties for the given node. - - Example usage (set second nodes's bg color to red): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff0000 - inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) - - @param node_index: The node index. - @param node_info: An idaapi.node_info_t instance. - @param flags: An OR'ed value of NIF_* values. - - -ida_graph.GraphViewer.SetNodesInfos(): - - Set the properties for the given nodes. - - Example usage (set first three nodes's bg color to purple): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff00ff - inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) - - @param values: A dictionary of 'int -> node_info_t' objects. - - -ida_graph.GraphViewer.Show(): - - Shows an existing graph or creates a new one - - @return: Boolean - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.create_desktop_widget(): - - create_desktop_widget(self, title, cfg) -> PyObject * - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.current_widget_changed(): - - current_widget_changed(self, widget, prev_widget) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.database_inited(): - - database_inited(self, is_new_database, idc_script) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.debugger_menu_change(): - - debugger_menu_change(self, enable) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.finish_populating_widget_popup(): - - finish_populating_widget_popup(self, widget, popup_handle, ctx=None) - - - The UI is about to be done populating the TWidget's popup menu. - Now is a good time to call idaapi.attach_action_to_popup() - - @param widget: The widget - @param popup: The popup menu. - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.get_chooser_item_attrs(): - - get_chooser_item_attrs(self, chooser, n, attrs) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.get_custom_viewer_hint(): - - get_custom_viewer_hint(self, viewer, place) -> PyObject * - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.get_ea_hint(): - - get_ea_hint(self, ea) -> PyObject * - - - The UI wants to display a simple hint for an address in the navigation band - - @param ea: The address - @return: String with the hint or None - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.get_item_hint(): - - get_item_hint(self, ea, max_lines) -> PyObject * - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.get_widget_config(): - - get_widget_config(self, widget, cfg) -> PyObject * - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.hook(): - - hook(self) -> bool - - - Creates an UI hook - - @return: Boolean true on success - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.idcstart(): - - idcstart(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.idcstop(): - - idcstop(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.plugin_loaded(): - - plugin_loaded(self, plugin_info) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.plugin_unloading(): - - plugin_unloading(self, plugin_info) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.postprocess_action(): - - postprocess_action(self) - - - An ida ui action has been handled - - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.preprocess_action(): - - preprocess_action(self, name) - - - IDA ui is about to handle a user action - - @param name: ui action name - (these names can be looked up in ida[tg]ui.cfg) - @return: 0-ok, nonzero - a plugin has handled the action - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.range(): - - range(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.ready_to_run(): - - ready_to_run(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.resume(): - - resume(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.saved(): - - saved(self) - - - The kernel has saved the database. - - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.saving(): - - saving(self) - - - The kernel is saving the database. - - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.screen_ea_changed(): - - screen_ea_changed(self, ea, prev_ea) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.set_widget_config(): - - set_widget_config(self, widget, cfg) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.suspend(): - - suspend(self) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.term(): - - term(self) - - - IDA is terminated and the database is already closed. - The UI may close its windows in this callback. - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.unhook(): - - unhook(self) -> bool - - - Removes the UI hook - @return: Boolean true on success - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.updated_actions(): - - updated_actions(self) - - - The UI is done updating actions. - - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.updating_actions(): - - updating_actions(self, ctx) - - - The UI is about to batch-update some actions. - - @param ctx: The action_update_ctx_t instance - @return: Ignored - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.widget_closing(): - - widget_closing(self, widget) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.widget_invisible(): - - widget_invisible(self, widget) - - -ida_graph.GraphViewer.UI_Hooks_Trampoline.widget_visible(): - - widget_visible(self, widget) - - -ida_graph.GraphViewer.hook(): - - hook(self) -> bool - - -ida_graph.GraphViewer.unhook(): - - unhook(self) -> bool - - -ida_graph.GraphViewer.view_created(): - - view_created(self, view) - - -class ida_graph.TPointDouble(): - - Proxy of C++ TPointDouble class - - -ida_graph.TPointDouble.add(): - - add(self, r) - - -ida_graph.TPointDouble.negate(): - - negate(self) - - -ida_graph.TPointDouble.sub(): - - sub(self, r) - - -ida_graph.TPointDouble.x: - TPointDouble_x_get(self) -> double - -ida_graph.TPointDouble.y: - TPointDouble_y_get(self) -> double - -ida_graph.calc_dist(): - - calc_dist(p, q) -> double - - - Calculate distance between p and q. - - - @param p (C++: point_t) - @param q (C++: point_t) - - -ida_graph.clr_node_info(): - - clr_node_info(gid, node, flags) - - - Clear node info for the given node. - - @param gid: id of desired graph (C++: graph_id_t) - @param node: node number (C++: int) - @param flags: combination of Node info flags , identifying which - fields of node_info_t will be cleared (C++: uint32) - - -ida_graph.create_disasm_graph(): - - create_disasm_graph(ea) -> mutable_graph_t - create_disasm_graph(ranges) -> mutable_graph_t - - - Create a graph for the function that contains 'ea'. - - - @param ea (C++: ea_t) - - -ida_graph.create_graph_viewer(): - - create_graph_viewer(title, id, callback, ud, title_height, parent=None) -> graph_viewer_t * - - - Create a custom graph viewer. - - @param title: the widget title (C++: const char *) - @param id: graph id (C++: uval_t) - @param callback: callback to handle graph notifications ( - graph_notification_t ) (C++: hook_cb_t *) - @param ud: user data passed to callback (C++: void *) - @param title_height: node title height (C++: int) - @param parent (C++: TWidget *) - @return: new viewer - - -ida_graph.create_mutable_graph(): - - create_mutable_graph(id) -> mutable_graph_t - - - Create a new empty graph with given id. - - - @param id (C++: uval_t) - - -ida_graph.create_user_graph_place(): - - create_user_graph_place(node, lnnum) -> user_graph_place_t - - - Get a copy of a 'user_graph_place_t' (returns a pointer to static - storage) - - - @param node (C++: int) - @param lnnum (C++: int) - - -ida_graph.del_node_info(): - - del_node_info(gid, node) - - - Delete the 'node_info_t' for the given node. - - - @param gid (C++: graph_id_t) - @param node (C++: int) - - -ida_graph.delete_mutable_graph(): - - delete_mutable_graph(g) - - - Delete graph object.use this only if you are dealing with - 'mutable_graph_t' instances that have not been used together with a - 'graph_viewer_t' . If you have called 'set_viewer_graph()' with your - graph, the graph's lifecycle will be managed by the viewer, and you - shouldn't interfere with it - - @param g (C++: mutable_graph_t *) - - -class ida_graph.edge_info_t(): - - Proxy of C++ edge_info_t class - - -ida_graph.edge_info_t.color: - edge_info_t_color_get(self) -> bgcolor_t - -ida_graph.edge_info_t.dstoff: - edge_info_t_dstoff_get(self) -> int - -ida_graph.edge_info_t.layout: - edge_info_t_layout_get(self) -> pointseq_t - -ida_graph.edge_info_t.reverse_layout(): - - reverse_layout(self) - - -ida_graph.edge_info_t.srcoff: - edge_info_t_srcoff_get(self) -> int - -ida_graph.edge_info_t.width: - edge_info_t_width_get(self) -> int - -class ida_graph.edge_infos_wrapper_t(): - - Proxy of C++ edge_infos_wrapper_t class - - -ida_graph.edge_infos_wrapper_t.clear(): - - clear(self) - - -ida_graph.edge_infos_wrapper_t.ptr: - edge_infos_wrapper_t_ptr_get(self) -> edge_infos_t * - -class ida_graph.edge_layout_point_t(): - - Proxy of C++ edge_layout_point_t class - - -ida_graph.edge_layout_point_t.compare(): - - compare(self, r) -> int - - -ida_graph.edge_layout_point_t.e: - edge_layout_point_t_e_get(self) -> edge_t - -ida_graph.edge_layout_point_t.pidx: - edge_layout_point_t_pidx_get(self) -> int - -class ida_graph.edge_segment_t(): - - Proxy of C++ edge_segment_t class - - -ida_graph.edge_segment_t.e: - edge_segment_t_e_get(self) -> edge_t - -ida_graph.edge_segment_t.length(): - - length(self) -> size_t - - -ida_graph.edge_segment_t.nseg: - edge_segment_t_nseg_get(self) -> int - -ida_graph.edge_segment_t.toright(): - - toright(self) -> bool - - -ida_graph.edge_segment_t.x0: - edge_segment_t_x0_get(self) -> int - -ida_graph.edge_segment_t.x1: - edge_segment_t_x1_get(self) -> int - -class ida_graph.edge_t(): - - Proxy of C++ edge_t class - - -ida_graph.edge_t.dst: - edge_t_dst_get(self) -> int - -ida_graph.edge_t.src: - edge_t_src_get(self) -> int - -ida_graph.get_graph_viewer(): - - get_graph_viewer(parent) -> graph_viewer_t * - - - Get custom graph viewer for given form. - - - @param parent (C++: TWidget *) - - -ida_graph.get_node_info(): - - get_node_info(out, gid, node) -> bool - - - Get node info. - - @param out: result (C++: node_info_t *) - @param gid: id of desired graph (C++: graph_id_t) - @param node: node number (C++: int) - @return: success - - -ida_graph.get_viewer_graph(): - - get_viewer_graph(gv) -> mutable_graph_t - - - Get graph object for given custom graph viewer. - - - @param gv (C++: graph_viewer_t *) - - -class ida_graph.graph_item_t(): - - Proxy of C++ graph_item_t class - - -ida_graph.graph_item_t.b: - graph_item_t_b_get(self) -> int - -ida_graph.graph_item_t.e: - graph_item_t_e_get(self) -> edge_t - -ida_graph.graph_item_t.elp: - graph_item_t_elp_get(self) -> edge_layout_point_t - -ida_graph.graph_item_t.is_edge(): - - is_edge(self) -> bool - - -ida_graph.graph_item_t.is_node(): - - is_node(self) -> bool - - -ida_graph.graph_item_t.n: - graph_item_t_n_get(self) -> int - -ida_graph.graph_item_t.p: - graph_item_t_p_get(self) -> point_t - -ida_graph.graph_item_t.type: - graph_item_t_type_get(self) -> graph_item_type_t - -class ida_graph.graph_node_visitor_t(): - - Proxy of C++ graph_node_visitor_t class - - -ida_graph.graph_node_visitor_t.is_forbidden_edge(): - - is_forbidden_edge(self, arg0, arg1) -> bool - - -ida_graph.graph_node_visitor_t.is_visited(): - - is_visited(self, n) -> bool - - -ida_graph.graph_node_visitor_t.reinit(): - - reinit(self) - - -ida_graph.graph_node_visitor_t.set_visited(): - - set_visited(self, n) - - -ida_graph.graph_node_visitor_t.visit_node(): - - visit_node(self, arg0) -> int - - -class ida_graph.graph_path_visitor_t(): - - Proxy of C++ graph_path_visitor_t class - - -ida_graph.graph_path_visitor_t.path: - graph_path_visitor_t_path_get(self) -> intvec_t * - -ida_graph.graph_path_visitor_t.prune: - graph_path_visitor_t_prune_get(self) -> bool - -ida_graph.graph_path_visitor_t.walk_backward(): - - walk_backward(self, arg0) -> int - - -ida_graph.graph_path_visitor_t.walk_forward(): - - walk_forward(self, arg0) -> int - - -class ida_graph.graph_visitor_t(): - - Proxy of C++ graph_visitor_t class - - -ida_graph.graph_visitor_t.visit_edge(): - - visit_edge(self, arg2, arg3) -> int - - -ida_graph.graph_visitor_t.visit_node(): - - visit_node(self, arg2, arg3) -> int - - -class ida_graph.group_crinfo_t(): - - Proxy of C++ group_crinfo_t class - - -ida_graph.group_crinfo_t.nodes: - group_crinfo_t_nodes_get(self) -> intvec_t * - -ida_graph.group_crinfo_t.text: - group_crinfo_t_text_get(self) -> qstring * - -class ida_graph.interval_t(): - - Proxy of C++ interval_t class - - -ida_graph.interval_t.contains(): - - contains(self, x) -> bool - - -ida_graph.interval_t.empty(): - - empty(self) -> bool - - -ida_graph.interval_t.intersect(): - - intersect(self, r) - - -ida_graph.interval_t.length(): - - length(self) -> int - - -ida_graph.interval_t.make_union(): - - make_union(self, r) - - -ida_graph.interval_t.move_by(): - - move_by(self, shift) - - -ida_graph.interval_t.x0: - interval_t_x0_get(self) -> int - -ida_graph.interval_t.x1: - interval_t_x1_get(self) -> int - -class ida_graph.mutable_graph_t(): - - Proxy of C++ mutable_graph_t class - - -ida_graph.mutable_graph_t.belongs: - mutable_graph_t_belongs_get(self) -> intvec_t * - -ida_graph.mutable_graph_t.calc_group_ea(): - - calc_group_ea(self, arg0) -> ea_t - - -ida_graph.mutable_graph_t.change_group_visibility(): - - change_group_visibility(self, group, expand) -> bool - - -ida_graph.mutable_graph_t.clear(): - - clear(self) - - -ida_graph.mutable_graph_t.create_digraph_layout(): - - create_digraph_layout(self) -> bool - - -ida_graph.mutable_graph_t.create_group(): - - create_group(self, nodes) -> int - - -ida_graph.mutable_graph_t.del_custom_layout(): - - del_custom_layout(self) - - -ida_graph.mutable_graph_t.delete_group(): - - delete_group(self, group) -> bool - - -ida_graph.mutable_graph_t.edges: - mutable_graph_t_edges_get(self) -> edge_infos_wrapper_t - -ida_graph.mutable_graph_t.empty(): - - empty(self) -> bool - - -ida_graph.mutable_graph_t.exists(): - - exists(self, node) -> bool - - -ida_graph.mutable_graph_t.get_custom_layout(): - - get_custom_layout(self) -> bool - - -ida_graph.mutable_graph_t.get_edge(): - - get_edge(self, e) -> edge_info_t - - -ida_graph.mutable_graph_t.get_first_subgraph_node(): - - get_first_subgraph_node(self, group) -> int - - -ida_graph.mutable_graph_t.get_graph_groups(): - - get_graph_groups(self) -> bool - - -ida_graph.mutable_graph_t.get_next_subgraph_node(): - - get_next_subgraph_node(self, group, current) -> int - - -ida_graph.mutable_graph_t.get_node_group(): - - get_node_group(self, node) -> int - - -ida_graph.mutable_graph_t.get_node_representative(): - - get_node_representative(self, node) -> int - - -ida_graph.mutable_graph_t.gid: - mutable_graph_t_gid_get(self) -> uval_t - -ida_graph.mutable_graph_t.is_collapsed_node(): - - is_collapsed_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_deleted_node(): - - is_deleted_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_displayable_node(): - - is_displayable_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_dot_node(): - - is_dot_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_group_node(): - - is_group_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_simple_node(): - - is_simple_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_subgraph_node(): - - is_subgraph_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_uncollapsed_node(): - - is_uncollapsed_node(self, node) -> bool - - -ida_graph.mutable_graph_t.is_user_graph(): - - is_user_graph(self) -> bool - - -ida_graph.mutable_graph_t.is_visible_node(): - - is_visible_node(self, node) -> bool - - -ida_graph.mutable_graph_t.node_flags: - mutable_graph_t_node_flags_get(self) -> bytevec_t * - -ida_graph.mutable_graph_t.node_qty(): - - node_qty(self) -> int - - -ida_graph.mutable_graph_t.nodes: - mutable_graph_t_nodes_get(self) -> node_layout_t - -ida_graph.mutable_graph_t.npred(): - - npred(self, b) -> int - - -ida_graph.mutable_graph_t.nrect(): - - nrect(self, n) -> rect_t - nrect(self, n) -> rect_t - - -ida_graph.mutable_graph_t.nsucc(): - - nsucc(self, b) -> int - - -ida_graph.mutable_graph_t.org_preds: - mutable_graph_t_org_preds_get(self) -> array_of_intvec_t - -ida_graph.mutable_graph_t.org_succs: - mutable_graph_t_org_succs_get(self) -> array_of_intvec_t - -ida_graph.mutable_graph_t.pred(): - - pred(self, b, i) -> int - - -ida_graph.mutable_graph_t.preds: - mutable_graph_t_preds_get(self) -> array_of_intvec_t - -ida_graph.mutable_graph_t.predset(): - - predset(self, b) -> intvec_t const & - - -ida_graph.mutable_graph_t.reset(): - - reset(self) - - -ida_graph.mutable_graph_t.set_custom_layout(): - - set_custom_layout(self) - - -ida_graph.mutable_graph_t.set_deleted_node(): - - set_deleted_node(self, node) - - -ida_graph.mutable_graph_t.set_edge(): - - set_edge(self, e, ei) -> bool - - -ida_graph.mutable_graph_t.set_graph_groups(): - - set_graph_groups(self) - - -ida_graph.mutable_graph_t.set_node_group(): - - set_node_group(self, node, group) - - -ida_graph.mutable_graph_t.size(): - - size(self) -> int - - -ida_graph.mutable_graph_t.succ(): - - succ(self, b, i) -> int - - -ida_graph.mutable_graph_t.succs: - mutable_graph_t_succs_get(self) -> array_of_intvec_t - -ida_graph.mutable_graph_t.succset(): - - succset(self, b) -> intvec_t const & - - -class ida_graph.node_info_t(): - - Proxy of C++ node_info_t class - - -ida_graph.node_info_t.bg_color: - node_info_t_bg_color_get(self) -> bgcolor_t - -ida_graph.node_info_t.ea: - node_info_t_ea_get(self) -> ea_t - -ida_graph.node_info_t.flags: - node_info_t_flags_get(self) -> uint32 - -ida_graph.node_info_t.frame_color: - node_info_t_frame_color_get(self) -> bgcolor_t - -ida_graph.node_info_t.get_flags_for_valid(): - - get_flags_for_valid(self) -> uint32 - - -ida_graph.node_info_t.text: - node_info_t_text_get(self) -> qstring * - -ida_graph.node_info_t.valid_bg_color(): - - valid_bg_color(self) -> bool - - -ida_graph.node_info_t.valid_ea(): - - valid_ea(self) -> bool - - -ida_graph.node_info_t.valid_flags(): - - valid_flags(self) -> bool - - -ida_graph.node_info_t.valid_frame_color(): - - valid_frame_color(self) -> bool - - -ida_graph.node_info_t.valid_text(): - - valid_text(self) -> bool - - -class ida_graph.node_layout_t(): - - Proxy of C++ qvector<(rect_t)> class - - -ida_graph.node_layout_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_graph.node_layout_t.at(): - - at(self, _idx) -> rect_t - - -ida_graph.node_layout_t.begin(): - - begin(self) -> rect_t - begin(self) -> rect_t - - -ida_graph.node_layout_t.capacity(): - - capacity(self) -> size_t - - -ida_graph.node_layout_t.clear(): - - clear(self) - - -ida_graph.node_layout_t.empty(): - - empty(self) -> bool - - -ida_graph.node_layout_t.end(): - - end(self) -> rect_t - end(self) -> rect_t - - -ida_graph.node_layout_t.erase(): - - erase(self, it) -> rect_t - erase(self, first, last) -> rect_t - - -ida_graph.node_layout_t.extract(): - - extract(self) -> rect_t - - -ida_graph.node_layout_t.find(): - - find(self, x) -> rect_t - find(self, x) -> rect_t - - -ida_graph.node_layout_t.grow(): - - grow(self, x=rect_t()) - - -ida_graph.node_layout_t.has(): - - has(self, x) -> bool - - -ida_graph.node_layout_t.inject(): - - inject(self, s, len) - - -ida_graph.node_layout_t.insert(): - - insert(self, it, x) -> rect_t - - -ida_graph.node_layout_t.pop_back(): - - pop_back(self) - - -ida_graph.node_layout_t.push_back(): - - push_back(self, x) - push_back(self) -> rect_t - - -ida_graph.node_layout_t.qclear(): - - qclear(self) - - -ida_graph.node_layout_t.reserve(): - - reserve(self, cnt) - - -ida_graph.node_layout_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_graph.node_layout_t.size(): - - size(self) -> size_t - - -ida_graph.node_layout_t.swap(): - - swap(self, r) - - -ida_graph.node_layout_t.truncate(): - - truncate(self) - - -class ida_graph.node_ordering_t(): - - Proxy of C++ node_ordering_t class - - -ida_graph.node_ordering_t.clear(): - - clear(self) - - -ida_graph.node_ordering_t.node(): - - node(self, _order) -> int - - -ida_graph.node_ordering_t.resize(): - - resize(self, n) - - -ida_graph.node_ordering_t.set(): - - set(self, _node, num) - - -ida_graph.node_ordering_t.size(): - - size(self) -> size_t - - -class ida_graph.point_t(): - - Proxy of C++ point_t class - - -ida_graph.point_t.add(): - - add(self, r) -> point_t - - -ida_graph.point_t.negate(): - - negate(self) - - -ida_graph.point_t.sub(): - - sub(self, r) -> point_t - - -ida_graph.point_t.x: - point_t_x_get(self) -> int - -ida_graph.point_t.y: - point_t_y_get(self) -> int - -class ida_graph.pointseq_t(): - - Proxy of C++ pointseq_t class - - -ida_graph.pointseq_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_graph.pointseq_t.at(): - - at(self, _idx) -> point_t - - -ida_graph.pointseq_t.begin(): - - begin(self) -> point_t - begin(self) -> point_t - - -ida_graph.pointseq_t.capacity(): - - capacity(self) -> size_t - - -ida_graph.pointseq_t.clear(): - - clear(self) - - -ida_graph.pointseq_t.empty(): - - empty(self) -> bool - - -ida_graph.pointseq_t.end(): - - end(self) -> point_t - end(self) -> point_t - - -ida_graph.pointseq_t.erase(): - - erase(self, it) -> point_t - erase(self, first, last) -> point_t - - -ida_graph.pointseq_t.extract(): - - extract(self) -> point_t - - -ida_graph.pointseq_t.find(): - - find(self, x) -> point_t - find(self, x) -> point_t - - -ida_graph.pointseq_t.grow(): - - grow(self, x=point_t()) - - -ida_graph.pointseq_t.has(): - - has(self, x) -> bool - - -ida_graph.pointseq_t.inject(): - - inject(self, s, len) - - -ida_graph.pointseq_t.insert(): - - insert(self, it, x) -> point_t - - -ida_graph.pointseq_t.pop_back(): - - pop_back(self) - - -ida_graph.pointseq_t.push_back(): - - push_back(self, x) - push_back(self) -> point_t - - -ida_graph.pointseq_t.qclear(): - - qclear(self) - - -ida_graph.pointseq_t.reserve(): - - reserve(self, cnt) - - -ida_graph.pointseq_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_graph.pointseq_t.size(): - - size(self) -> size_t - - -ida_graph.pointseq_t.swap(): - - swap(self, r) - - -ida_graph.pointseq_t.truncate(): - - truncate(self) - - -class ida_graph.pointvec_t(): - - Proxy of C++ qvector<(point_t)> class - - -ida_graph.pointvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_graph.pointvec_t.at(): - - at(self, _idx) -> point_t - - -ida_graph.pointvec_t.begin(): - - begin(self) -> point_t - begin(self) -> point_t - - -ida_graph.pointvec_t.capacity(): - - capacity(self) -> size_t - - -ida_graph.pointvec_t.clear(): - - clear(self) - - -ida_graph.pointvec_t.empty(): - - empty(self) -> bool - - -ida_graph.pointvec_t.end(): - - end(self) -> point_t - end(self) -> point_t - - -ida_graph.pointvec_t.erase(): - - erase(self, it) -> point_t - erase(self, first, last) -> point_t - - -ida_graph.pointvec_t.extract(): - - extract(self) -> point_t - - -ida_graph.pointvec_t.find(): - - find(self, x) -> point_t - find(self, x) -> point_t - - -ida_graph.pointvec_t.grow(): - - grow(self, x=point_t()) - - -ida_graph.pointvec_t.has(): - - has(self, x) -> bool - - -ida_graph.pointvec_t.inject(): - - inject(self, s, len) - - -ida_graph.pointvec_t.insert(): - - insert(self, it, x) -> point_t - - -ida_graph.pointvec_t.pop_back(): - - pop_back(self) - - -ida_graph.pointvec_t.push_back(): - - push_back(self, x) - push_back(self) -> point_t - - -ida_graph.pointvec_t.qclear(): - - qclear(self) - - -ida_graph.pointvec_t.reserve(): - - reserve(self, cnt) - - -ida_graph.pointvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_graph.pointvec_t.size(): - - size(self) -> size_t - - -ida_graph.pointvec_t.swap(): - - swap(self, r) - - -ida_graph.pointvec_t.truncate(): - - truncate(self) - - -ida_graph.pyg_close(): - - pyg_close(self) - - -ida_graph.pyg_select_node(): - - pyg_select_node(self, nid) - - -ida_graph.pyg_show(): - - pyg_show(self) -> bool - - -class ida_graph.rect_t(): - - Proxy of C++ rect_t class - - -ida_graph.rect_t.area(): - - area(self) -> int - - -ida_graph.rect_t.bottom: - rect_t_bottom_get(self) -> int - -ida_graph.rect_t.bottomright(): - - bottomright(self) -> point_t - - -ida_graph.rect_t.center(): - - center(self) -> point_t - - -ida_graph.rect_t.contains(): - - contains(self, p) -> bool - - -ida_graph.rect_t.empty(): - - empty(self) -> bool - - -ida_graph.rect_t.grow(): - - grow(self, delta) - - -ida_graph.rect_t.height(): - - height(self) -> int - - -ida_graph.rect_t.intersect(): - - intersect(self, r) - - -ida_graph.rect_t.is_intersection_empty(): - - is_intersection_empty(self, r) -> bool - - -ida_graph.rect_t.left: - rect_t_left_get(self) -> int - -ida_graph.rect_t.make_union(): - - make_union(self, r) - - -ida_graph.rect_t.move_by(): - - move_by(self, p) - - -ida_graph.rect_t.move_to(): - - move_to(self, p) - - -ida_graph.rect_t.right: - rect_t_right_get(self) -> int - -ida_graph.rect_t.top: - rect_t_top_get(self) -> int - -ida_graph.rect_t.topleft(): - - topleft(self) -> point_t - - -ida_graph.rect_t.width(): - - width(self) -> int - - -ida_graph.refresh_viewer(): - - refresh_viewer(gv) - - - Redraw the graph in the given view. - - - @param gv (C++: graph_viewer_t *) - - -class ida_graph.row_info_t(): - - Proxy of C++ row_info_t class - - -ida_graph.row_info_t.bottom: - row_info_t_bottom_get(self) -> int - -ida_graph.row_info_t.height(): - - height(self) -> int - - -ida_graph.row_info_t.nodes: - row_info_t_nodes_get(self) -> intvec_t * - -ida_graph.row_info_t.top: - row_info_t_top_get(self) -> int - -class ida_graph.screen_graph_selection_base_t(): - - Proxy of C++ qvector<(selection_item_t)> class - - -ida_graph.screen_graph_selection_base_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_graph.screen_graph_selection_base_t.at(): - - at(self, _idx) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.begin(): - - begin(self) -> selection_item_t - begin(self) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.capacity(): - - capacity(self) -> size_t - - -ida_graph.screen_graph_selection_base_t.clear(): - - clear(self) - - -ida_graph.screen_graph_selection_base_t.empty(): - - empty(self) -> bool - - -ida_graph.screen_graph_selection_base_t.end(): - - end(self) -> selection_item_t - end(self) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.erase(): - - erase(self, it) -> selection_item_t - erase(self, first, last) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.extract(): - - extract(self) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.find(): - - find(self, x) -> selection_item_t - find(self, x) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.grow(): - - grow(self, x=selection_item_t()) - - -ida_graph.screen_graph_selection_base_t.has(): - - has(self, x) -> bool - - -ida_graph.screen_graph_selection_base_t.inject(): - - inject(self, s, len) - - -ida_graph.screen_graph_selection_base_t.insert(): - - insert(self, it, x) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.pop_back(): - - pop_back(self) - - -ida_graph.screen_graph_selection_base_t.push_back(): - - push_back(self, x) - push_back(self) -> selection_item_t - - -ida_graph.screen_graph_selection_base_t.qclear(): - - qclear(self) - - -ida_graph.screen_graph_selection_base_t.reserve(): - - reserve(self, cnt) - - -ida_graph.screen_graph_selection_base_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_graph.screen_graph_selection_base_t.size(): - - size(self) -> size_t - - -ida_graph.screen_graph_selection_base_t.swap(): - - swap(self, r) - - -ida_graph.screen_graph_selection_base_t.truncate(): - - truncate(self) - - -class ida_graph.screen_graph_selection_t(): - - Proxy of C++ screen_graph_selection_t class - - -ida_graph.screen_graph_selection_t.add(): - - add(self, s) - - -ida_graph.screen_graph_selection_t.add_node(): - - add_node(self, node) - - -ida_graph.screen_graph_selection_t.add_point(): - - add_point(self, e, idx) - - -ida_graph.screen_graph_selection_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_graph.screen_graph_selection_t.at(): - - at(self, _idx) -> selection_item_t - - -ida_graph.screen_graph_selection_t.begin(): - - begin(self) -> selection_item_t - begin(self) -> selection_item_t - - -ida_graph.screen_graph_selection_t.capacity(): - - capacity(self) -> size_t - - -ida_graph.screen_graph_selection_t.clear(): - - clear(self) - - -ida_graph.screen_graph_selection_t.del_node(): - - del_node(self, node) - - -ida_graph.screen_graph_selection_t.del_point(): - - del_point(self, e, idx) - - -ida_graph.screen_graph_selection_t.empty(): - - empty(self) -> bool - - -ida_graph.screen_graph_selection_t.end(): - - end(self) -> selection_item_t - end(self) -> selection_item_t - - -ida_graph.screen_graph_selection_t.erase(): - - erase(self, it) -> selection_item_t - erase(self, first, last) -> selection_item_t - - -ida_graph.screen_graph_selection_t.extract(): - - extract(self) -> selection_item_t - - -ida_graph.screen_graph_selection_t.find(): - - find(self, x) -> selection_item_t - find(self, x) -> selection_item_t - - -ida_graph.screen_graph_selection_t.grow(): - - grow(self, x=selection_item_t()) - - -ida_graph.screen_graph_selection_t.has(): - - has(self, item) -> bool - - -ida_graph.screen_graph_selection_t.inject(): - - inject(self, s, len) - - -ida_graph.screen_graph_selection_t.insert(): - - insert(self, it, x) -> selection_item_t - - -ida_graph.screen_graph_selection_t.items_count(): - - items_count(self, look_for_nodes) -> size_t - - -ida_graph.screen_graph_selection_t.nodes_count(): - - nodes_count(self) -> size_t - - -ida_graph.screen_graph_selection_t.points_count(): - - points_count(self) -> size_t - - -ida_graph.screen_graph_selection_t.pop_back(): - - pop_back(self) - - -ida_graph.screen_graph_selection_t.push_back(): - - push_back(self, x) - push_back(self) -> selection_item_t - - -ida_graph.screen_graph_selection_t.qclear(): - - qclear(self) - - -ida_graph.screen_graph_selection_t.reserve(): - - reserve(self, cnt) - - -ida_graph.screen_graph_selection_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_graph.screen_graph_selection_t.size(): - - size(self) -> size_t - - -ida_graph.screen_graph_selection_t.sub(): - - sub(self, s) - - -ida_graph.screen_graph_selection_t.swap(): - - swap(self, r) - - -ida_graph.screen_graph_selection_t.truncate(): - - truncate(self) - - -class ida_graph.selection_item_t(): - - Proxy of C++ selection_item_t class - - -ida_graph.selection_item_t.compare(): - - compare(self, r) -> int - - -ida_graph.selection_item_t.elp: - selection_item_t_elp_get(self) -> edge_layout_point_t - -ida_graph.selection_item_t.is_node: - selection_item_t_is_node_get(self) -> bool - -ida_graph.selection_item_t.node: - selection_item_t_node_get(self) -> int - -ida_graph.set_node_info(): - - set_node_info(gid, node, ni, flags) - - - Set node info. - - @param gid: id of desired graph (C++: graph_id_t) - @param node: node number (C++: int) - @param ni: node info to use (C++: const node_info_t &) - @param flags: combination of Node info flags , identifying which - fields of 'ni' will be used (C++: uint32) - - -ida_graph.set_viewer_graph(): - - set_viewer_graph(gv, g) - - - Set the underlying graph object for the given viewer. - - - @param gv (C++: graph_viewer_t *) - @param g (C++: mutable_graph_t *) - - -class ida_graph.user_graph_place_t(): - - Proxy of C++ user_graph_place_t class - - -ida_graph.user_graph_place_t.node: - user_graph_place_t_node_get(self) -> int - -ida_graph.viewer_attach_menu_item(): - - viewer_attach_menu_item(g, name) -> bool - - - Attach a previously-registered action to the view's context menu. See - 'kernwin.hpp' for how to register actions. - - @param g (C++: graph_viewer_t *) - @param name: action name (C++: const char *) - @return: success - - -ida_graph.viewer_center_on(): - - viewer_center_on(gv, node) - - - Center the graph view on the given node. - - - @param gv (C++: graph_viewer_t *) - @param node (C++: int) - - -ida_graph.viewer_create_groups(): - - viewer_create_groups(gv, out_group_nodes, gi) -> bool - - - This will perform an operation similar to what happens when a user - manually selects a set of nodes, right-clicks and selects "Create - group". This is a wrapper around mutable_graph_t::create_group that - will, in essence:clone the current graphfor each 'group_crinfo_t' , - attempt creating group in that new graphif all were successful, - animate to that new graph.this accepts parameters that allow creating - of multiple groups at once; which means only one graph animation will - be triggered. - - @param gv (C++: graph_viewer_t *) - @param out_group_nodes (C++: intvec_t *) - @param gi (C++: const groups_crinfos_t &) - - -ida_graph.viewer_del_node_info(): - - viewer_del_node_info(gv, n) - - - Delete node info for node in given viewer (see 'del_node_info()' ) - - - @param gv (C++: graph_viewer_t *) - @param n (C++: int) - - -ida_graph.viewer_delete_groups(): - - viewer_delete_groups(gv, groups, new_current=-1) -> bool - - - Wrapper around mutable_graph_t::delete_group. This function will:clone - the current graphattempt deleting the groups in that new graphif - successful, animate to that new graph. - - @param gv (C++: graph_viewer_t *) - @param groups (C++: const intvec_t &) - @param new_current (C++: int) - - -ida_graph.viewer_fit_window(): - - viewer_fit_window(gv) - - - Fit graph viewer to its parent form. - - - @param gv (C++: graph_viewer_t *) - - -ida_graph.viewer_get_curnode(): - - viewer_get_curnode(gv) -> int - - - Get number of currently selected node (-1 if none) - - - @param gv (C++: graph_viewer_t *) - - -ida_graph.viewer_get_gli(): - - viewer_get_gli(out, gv, flags=0) -> bool - - - Get location info for given graph view If flags contains - GLICTL_CENTER, then the gli that will be retrieved, will be the one at - the center of the view. Otherwise it will be the top-left. - - @param out (C++: graph_location_info_t *) - @param gv (C++: graph_viewer_t *) - @param flags (C++: uint32) - - -ida_graph.viewer_get_node_info(): - - viewer_get_node_info(gv, out, n) -> bool - - - Get node info for node in given viewer (see 'get_node_info()' ) - - - @param gv (C++: graph_viewer_t *) - @param out (C++: node_info_t *) - @param n (C++: int) - - -ida_graph.viewer_get_selection(): - - viewer_get_selection(gv, sgs) -> bool - - - Get currently selected items for graph viewer. - - - @param gv (C++: graph_viewer_t *) - @param sgs (C++: screen_graph_selection_t *) - - -ida_graph.viewer_set_gli(): - - viewer_set_gli(gv, gli, flags=0) - - - Set location info for given graph view If flags contains - GLICTL_CENTER, then the gli will be set to be the center of the view. - Otherwise it will be the top-left. - - @param gv (C++: graph_viewer_t *) - @param gli (C++: const graph_location_info_t *) - @param flags (C++: uint32) - - -ida_graph.viewer_set_groups_visibility(): - - viewer_set_groups_visibility(gv, groups, expand, new_current=-1) -> bool - - - Wrapper around mutable_graph_t::change_visibility. This function - will:clone the current graphattempt changing visibility of the groups - in that new graphif successful, animate to that new graph. - - @param gv (C++: graph_viewer_t *) - @param groups (C++: const intvec_t &) - @param expand (C++: bool) - @param new_current (C++: int) - - -ida_graph.viewer_set_node_info(): - - viewer_set_node_info(gv, n, ni, flags) - - - Set node info for node in given viewer (see 'set_node_info()' ) - - - @param gv (C++: graph_viewer_t *) - @param n (C++: int) - @param ni (C++: const node_info_t &) - @param flags (C++: uint32) - - -ida_graph.viewer_set_titlebar_height(): - - viewer_set_titlebar_height(gv, height) -> int - - - Set height of node title bars ( 'grcode_set_titlebar_height' ) - - - @param gv (C++: graph_viewer_t *) - @param height (C++: int) - - - -=== ida_graph EPYDOC INJECTIONS === -ida_graph.GLICTL_CENTER -""" -the gli should be set/get as center -""" - -ida_graph.MTG_DOT_NODE -""" -is dot node? -""" - -ida_graph.MTG_GROUP_NODE -""" -is group node? -""" - -ida_graph.MTG_NON_DISPLAYABLE_NODE -""" -for disassembly graphs - non-displayable nodes have a visible area -that is too large to generate disassembly lines for without IDA -slowing down significantly (see MAX_VISIBLE_NODE_AREA) -""" - -ida_graph.NIF_BG_COLOR -""" - 'node_info_t::bg_color' -""" - -ida_graph.NIF_EA -""" - 'node_info_t::ea' -""" - -ida_graph.NIF_FLAGS -""" - 'node_info_t::flags' -""" - -ida_graph.NIF_FRAME_COLOR -""" - 'node_info_t::frame_color' -""" - -ida_graph.NIF_TEXT -""" - 'node_info_t::text' -""" -=== ida_graph EPYDOC INJECTIONS END === -class ida_hexrays.DecompilationFailure(): - - Raised on a decompilation error. - - The associated hexrays_failure_t object is stored in the - 'info' member of this exception. - - -class ida_hexrays.Hexrays_Hooks(): - - Proxy of C++ Hexrays_Hooks class - - -ida_hexrays.Hexrays_Hooks.close_pseudocode(): - - close_pseudocode(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.cmt_changed(): - - cmt_changed(self, cfunc, loc, cmt) -> int - - -ida_hexrays.Hexrays_Hooks.combine(): - - combine(self, blk, insn) -> int - - -ida_hexrays.Hexrays_Hooks.create_hint(): - - create_hint(self, vu) -> PyObject * - - -ida_hexrays.Hexrays_Hooks.curpos(): - - curpos(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.double_click(): - - double_click(self, vu, shift_state) -> int - - -ida_hexrays.Hexrays_Hooks.flowchart(): - - flowchart(self, fc) -> int - - -ida_hexrays.Hexrays_Hooks.func_printed(): - - func_printed(self, cfunc) -> int - - -ida_hexrays.Hexrays_Hooks.glbopt(): - - glbopt(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.hook(): - - hook(self) -> bool - - -ida_hexrays.Hexrays_Hooks.interr(): - - interr(self, errcode) -> int - - -ida_hexrays.Hexrays_Hooks.keyboard(): - - keyboard(self, vu, key_code, shift_state) -> int - - -ida_hexrays.Hexrays_Hooks.locopt(): - - locopt(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.lvar_cmt_changed(): - - lvar_cmt_changed(self, vu, v, cmt) -> int - - -ida_hexrays.Hexrays_Hooks.lvar_mapping_changed(): - - lvar_mapping_changed(self, vu, frm, to) -> int - - -ida_hexrays.Hexrays_Hooks.lvar_name_changed(): - - lvar_name_changed(self, vu, v, name, is_user_name) -> int - - -ida_hexrays.Hexrays_Hooks.lvar_type_changed(): - - lvar_type_changed(self, vu, v, tinfo) -> int - - -ida_hexrays.Hexrays_Hooks.maturity(): - - maturity(self, cfunc, new_maturity) -> int - - -ida_hexrays.Hexrays_Hooks.microcode(): - - microcode(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.open_pseudocode(): - - open_pseudocode(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.populating_popup(): - - populating_popup(self, widget, popup_handle, vu) -> int - - -ida_hexrays.Hexrays_Hooks.prealloc(): - - prealloc(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.preoptimized(): - - preoptimized(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.print_func(): - - print_func(self, cfunc, vp) -> int - - -ida_hexrays.Hexrays_Hooks.prolog(): - - prolog(self, mba, fc, reachable_blocks) -> int - - -ida_hexrays.Hexrays_Hooks.refresh_pseudocode(): - - refresh_pseudocode(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.resolve_stkaddrs(): - - resolve_stkaddrs(self, mba) -> int - - -ida_hexrays.Hexrays_Hooks.right_click(): - - right_click(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.stkpnts(): - - stkpnts(self, mba, _sps) -> int - - -ida_hexrays.Hexrays_Hooks.structural(): - - structural(self, ct) -> int - - -ida_hexrays.Hexrays_Hooks.switch_pseudocode(): - - switch_pseudocode(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.text_ready(): - - text_ready(self, vu) -> int - - -ida_hexrays.Hexrays_Hooks.unhook(): - - unhook(self) -> bool - - -ida_hexrays.accepts_small_udts(): - - accepts_small_udts(op) -> bool - - - Is the operator allowed on small structure or union? - - - @param op (C++: ctype_t) - - -ida_hexrays.accepts_udts(): - - accepts_udts(op) -> bool - - -ida_hexrays.arglocs_overlap(): - - arglocs_overlap(loc1, w1, loc2, w2) -> bool - - - Do two arglocs overlap? - - - @param loc1 (C++: const vdloc_t &) - @param w1 (C++: size_t) - @param loc2 (C++: const vdloc_t &) - @param w2 (C++: size_t) - - -class ida_hexrays.array_of_bitsets(): - - Proxy of C++ qvector<(bitset_t)> class - - -ida_hexrays.array_of_bitsets.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.array_of_bitsets.at(): - - at(self, _idx) -> bitset_t - - -ida_hexrays.array_of_bitsets.begin(): - - begin(self) -> bitset_t - begin(self) -> bitset_t - - -ida_hexrays.array_of_bitsets.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.array_of_bitsets.clear(): - - clear(self) - - -ida_hexrays.array_of_bitsets.empty(): - - empty(self) -> bool - - -ida_hexrays.array_of_bitsets.end(): - - end(self) -> bitset_t - end(self) -> bitset_t - - -ida_hexrays.array_of_bitsets.erase(): - - erase(self, it) -> bitset_t - erase(self, first, last) -> bitset_t - - -ida_hexrays.array_of_bitsets.extract(): - - extract(self) -> bitset_t - - -ida_hexrays.array_of_bitsets.find(): - - find(self, x) -> bitset_t - find(self, x) -> bitset_t - - -ida_hexrays.array_of_bitsets.grow(): - - grow(self, x=bitset_t()) - - -ida_hexrays.array_of_bitsets.has(): - - has(self, x) -> bool - - -ida_hexrays.array_of_bitsets.inject(): - - inject(self, s, len) - - -ida_hexrays.array_of_bitsets.insert(): - - insert(self, it, x) -> bitset_t - - -ida_hexrays.array_of_bitsets.pop_back(): - - pop_back(self) - - -ida_hexrays.array_of_bitsets.push_back(): - - push_back(self, x) - push_back(self) -> bitset_t - - -ida_hexrays.array_of_bitsets.qclear(): - - qclear(self) - - -ida_hexrays.array_of_bitsets.reserve(): - - reserve(self, cnt) - - -ida_hexrays.array_of_bitsets.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.array_of_bitsets.size(): - - size(self) -> size_t - - -ida_hexrays.array_of_bitsets.swap(): - - swap(self, r) - - -ida_hexrays.array_of_bitsets.truncate(): - - truncate(self) - - -class ida_hexrays.array_of_ivlsets(): - - Proxy of C++ qvector<(ivlset_t)> class - - -ida_hexrays.array_of_ivlsets.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.array_of_ivlsets.at(): - - at(self, _idx) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.begin(): - - begin(self) -> ivlset_t - begin(self) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.array_of_ivlsets.clear(): - - clear(self) - - -ida_hexrays.array_of_ivlsets.empty(): - - empty(self) -> bool - - -ida_hexrays.array_of_ivlsets.end(): - - end(self) -> ivlset_t - end(self) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.erase(): - - erase(self, it) -> ivlset_t - erase(self, first, last) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.extract(): - - extract(self) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.find(): - - find(self, x) -> ivlset_t - find(self, x) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.grow(): - - grow(self, x=ivlset_t()) - - -ida_hexrays.array_of_ivlsets.has(): - - has(self, x) -> bool - - -ida_hexrays.array_of_ivlsets.inject(): - - inject(self, s, len) - - -ida_hexrays.array_of_ivlsets.insert(): - - insert(self, it, x) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.pop_back(): - - pop_back(self) - - -ida_hexrays.array_of_ivlsets.push_back(): - - push_back(self, x) - push_back(self) -> ivlset_t - - -ida_hexrays.array_of_ivlsets.qclear(): - - qclear(self) - - -ida_hexrays.array_of_ivlsets.reserve(): - - reserve(self, cnt) - - -ida_hexrays.array_of_ivlsets.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.array_of_ivlsets.size(): - - size(self) -> size_t - - -ida_hexrays.array_of_ivlsets.swap(): - - swap(self, r) - - -ida_hexrays.array_of_ivlsets.truncate(): - - truncate(self) - - -ida_hexrays.asgop(): - - asgop(cop) -> ctype_t - - - Convert plain operator into assignment operator. For example, cot_add - returns cot_asgadd. - - - @param cop (C++: ctype_t) - - -ida_hexrays.asgop_revert(): - - asgop_revert(cop) -> ctype_t - - - Convert assignment operator into plain operator. For example, - cot_asgadd returns cot_add - - @param cop (C++: ctype_t) - @return: cot_empty is the input operator is not an assignment - operator. - - -class ida_hexrays.bit_bound_t(): - - Proxy of C++ bit_bound_t class - - -ida_hexrays.bit_bound_t.nbits: - bit_bound_t_nbits_get(self) -> int16 - -ida_hexrays.bit_bound_t.sbits: - bit_bound_t_sbits_get(self) -> int16 - -class ida_hexrays.bitset_t(): - - Proxy of C++ bitset_t class - - -ida_hexrays.bitset_t.add(): - - add(self, bit) -> bool - add(self, bit, width) -> bool - add(self, ml) -> bool - - -ida_hexrays.bitset_t.back(): - - back(self) -> int - - -ida_hexrays.bitset_t.begin(): - - begin(self) -> bitset_t::iterator - - -ida_hexrays.bitset_t.clear(): - - clear(self) - - -ida_hexrays.bitset_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.bitset_t.copy(): - - copy(self, m) -> bitset_t - - -ida_hexrays.bitset_t.count(): - - count(self) -> int - count(self, bit) -> int - - -ida_hexrays.bitset_t.cut_at(): - - cut_at(self, maxbit) -> bool - - -ida_hexrays.bitset_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.bitset_t.empty(): - - empty(self) -> bool - - -ida_hexrays.bitset_t.end(): - - end(self) -> bitset_t::iterator - - -ida_hexrays.bitset_t.fill_with_ones(): - - fill_with_ones(self, maxbit) - - -ida_hexrays.bitset_t.front(): - - front(self) -> int - - -ida_hexrays.bitset_t.has(): - - has(self, bit) -> bool - - -ida_hexrays.bitset_t.has_all(): - - has_all(self, bit, width) -> bool - - -ida_hexrays.bitset_t.has_any(): - - has_any(self, bit, width) -> bool - - -ida_hexrays.bitset_t.has_common(): - - has_common(self, ml) -> bool - - -ida_hexrays.bitset_t.inc(): - - inc(self, p, n=1) - - -ida_hexrays.bitset_t.includes(): - - includes(self, ml) -> bool - - -ida_hexrays.bitset_t.intersect(): - - intersect(self, ml) -> bool - - -ida_hexrays.bitset_t.is_subset_of(): - - is_subset_of(self, ml) -> bool - - -ida_hexrays.bitset_t.itat(): - - itat(self, n) -> bitset_t::iterator - - -ida_hexrays.bitset_t.itv(): - - itv(self, it) -> int - - -ida_hexrays.bitset_t.last(): - - last(self) -> int - - -ida_hexrays.bitset_t.shift_down(): - - shift_down(self, shift) - - -ida_hexrays.bitset_t.sub(): - - sub(self, bit) -> bool - sub(self, bit, width) -> bool - sub(self, ml) -> bool - - -ida_hexrays.bitset_t.swap(): - - swap(self, r) - - -ida_hexrays.block_chains_begin(): - - block_chains_begin(set) -> block_chains_iterator_t - - - Get iterator pointing to the beginning of 'block_chains_t' . - - - @param set (C++: const block_chains_t *) - - -ida_hexrays.block_chains_clear(): - - block_chains_clear(set) - - - Clear 'block_chains_t' . - - - @param set (C++: block_chains_t *) - - -ida_hexrays.block_chains_end(): - - block_chains_end(set) -> block_chains_iterator_t - - - Get iterator pointing to the end of 'block_chains_t' . - - - @param set (C++: const block_chains_t *) - - -ida_hexrays.block_chains_erase(): - - block_chains_erase(set, p) - - - Erase current element from 'block_chains_t' . - - - @param set (C++: block_chains_t *) - @param p (C++: block_chains_iterator_t) - - -ida_hexrays.block_chains_find(): - - block_chains_find(set, val) -> block_chains_iterator_t - - - Find the specified key in set 'block_chains_t' . - - - @param set (C++: const block_chains_t *) - @param val (C++: const chain_t &) - - -ida_hexrays.block_chains_free(): - - block_chains_free(set) - - - Delete 'block_chains_t' instance. - - - @param set (C++: block_chains_t *) - - -ida_hexrays.block_chains_get(): - - block_chains_get(p) -> chain_t - - - Get reference to the current set value. - - - @param p (C++: block_chains_iterator_t) - - -ida_hexrays.block_chains_insert(): - - block_chains_insert(set, val) -> block_chains_iterator_t - - - Insert new ( 'chain_t' ) into set 'block_chains_t' . - - - @param set (C++: block_chains_t *) - @param val (C++: const chain_t &) - - -class ida_hexrays.block_chains_iterator_t(): - - Proxy of C++ block_chains_iterator_t class - - -ida_hexrays.block_chains_iterator_t.x: - block_chains_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.block_chains_new(): - - block_chains_new() -> block_chains_t - - - Create a new 'block_chains_t' instance. - - -ida_hexrays.block_chains_next(): - - block_chains_next(p) -> block_chains_iterator_t - - - Move to the next element. - - - @param p (C++: block_chains_iterator_t) - - -ida_hexrays.block_chains_prev(): - - block_chains_prev(p) -> block_chains_iterator_t - - - Move to the previous element. - - - @param p (C++: block_chains_iterator_t) - - -ida_hexrays.block_chains_size(): - - block_chains_size(set) -> size_t - - - Get size of 'block_chains_t' . - - - @param set (C++: block_chains_t *) - - -class ida_hexrays.block_chains_t(): - - Proxy of C++ block_chains_t class - - -ida_hexrays.block_chains_t._print(): - - _print(self) - - -ida_hexrays.block_chains_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.block_chains_t.get_chain(): - - get_chain(self, k, width=1) -> chain_t - get_chain(self, k, width=1) -> chain_t - get_chain(self, ch) -> chain_t - get_chain(self, ch) -> chain_t - - -ida_hexrays.block_chains_t.get_reg_chain(): - - get_reg_chain(self, reg, width=1) -> chain_t - get_reg_chain(self, reg, width=1) -> chain_t - - -ida_hexrays.block_chains_t.get_stk_chain(): - - get_stk_chain(self, off, width=1) -> chain_t - get_stk_chain(self, off, width=1) -> chain_t - - -class ida_hexrays.block_chains_vec_t(): - - Proxy of C++ qvector<(block_chains_t)> class - - -ida_hexrays.block_chains_vec_t.at(): - - at(self, _idx) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.begin(): - - begin(self) -> block_chains_t - begin(self) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.block_chains_vec_t.clear(): - - clear(self) - - -ida_hexrays.block_chains_vec_t.empty(): - - empty(self) -> bool - - -ida_hexrays.block_chains_vec_t.end(): - - end(self) -> block_chains_t - end(self) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.erase(): - - erase(self, it) -> block_chains_t - erase(self, first, last) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.extract(): - - extract(self) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.grow(): - - grow(self, x=block_chains_t()) - - -ida_hexrays.block_chains_vec_t.inject(): - - inject(self, s, len) - - -ida_hexrays.block_chains_vec_t.insert(): - - insert(self, it, x) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.pop_back(): - - pop_back(self) - - -ida_hexrays.block_chains_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> block_chains_t - - -ida_hexrays.block_chains_vec_t.qclear(): - - qclear(self) - - -ida_hexrays.block_chains_vec_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.block_chains_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.block_chains_vec_t.size(): - - size(self) -> size_t - - -ida_hexrays.block_chains_vec_t.swap(): - - swap(self, r) - - -ida_hexrays.block_chains_vec_t.truncate(): - - truncate(self) - - -ida_hexrays.boundaries_begin(): - - boundaries_begin(map) -> boundaries_iterator_t - - - Get iterator pointing to the beginning of boundaries_t. - - - @param map (C++: const boundaries_t *) - - -ida_hexrays.boundaries_clear(): - - boundaries_clear(map) - - - Clear boundaries_t. - - - @param map (C++: boundaries_t *) - - -ida_hexrays.boundaries_end(): - - boundaries_end(map) -> boundaries_iterator_t - - - Get iterator pointing to the end of boundaries_t. - - - @param map (C++: const boundaries_t *) - - -ida_hexrays.boundaries_erase(): - - boundaries_erase(map, p) - - - Erase current element from boundaries_t. - - - @param map (C++: boundaries_t *) - @param p (C++: boundaries_iterator_t) - - -ida_hexrays.boundaries_find(): - - boundaries_find(map, key) -> boundaries_iterator_t - - - Find the specified key in boundaries_t. - - - @param map (C++: const boundaries_t *) - @param key (C++: const cinsn_t *&) - - -ida_hexrays.boundaries_first(): - - boundaries_first(p) -> cinsn_t - - - Get reference to the current map key. - - - @param p (C++: boundaries_iterator_t) - - -ida_hexrays.boundaries_free(): - - boundaries_free(map) - - - Delete boundaries_t instance. - - - @param map (C++: boundaries_t *) - - -ida_hexrays.boundaries_insert(): - - boundaries_insert(map, key, val) -> boundaries_iterator_t - - - Insert new ( 'cinsn_t' *, 'rangeset_t' ) pair into boundaries_t. - - - @param map (C++: boundaries_t *) - @param key (C++: const cinsn_t *&) - @param val (C++: const rangeset_t &) - - -class ida_hexrays.boundaries_iterator_t(): - - Proxy of C++ boundaries_iterator_t class - - -ida_hexrays.boundaries_iterator_t.x: - boundaries_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.boundaries_new(): - - boundaries_new() -> boundaries_t - - - Create a new boundaries_t instance. - - -ida_hexrays.boundaries_next(): - - boundaries_next(p) -> boundaries_iterator_t - - - Move to the next element. - - - @param p (C++: boundaries_iterator_t) - - -ida_hexrays.boundaries_prev(): - - boundaries_prev(p) -> boundaries_iterator_t - - - Move to the previous element. - - - @param p (C++: boundaries_iterator_t) - - -ida_hexrays.boundaries_second(): - - boundaries_second(p) -> rangeset_t - - - Get reference to the current map value. - - - @param p (C++: boundaries_iterator_t) - - -ida_hexrays.boundaries_size(): - - boundaries_size(map) -> size_t - - - Get size of boundaries_t. - - - @param map (C++: boundaries_t *) - - -class ida_hexrays.boundaries_t(): - - Proxy of C++ std::map<(p.cinsn_t,rangeset_t)> class - - -ida_hexrays.boundaries_t.at(): - - at(self, _Keyval) -> rangeset_t - - -class ida_hexrays.boundaries_t.keytype(): - - Proxy of C++ cinsn_t class - - -ida_hexrays.boundaries_t.keytype._print(): - - _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) - - -ida_hexrays.boundaries_t.keytype.assign(): - - assign(self, r) -> cinsn_t - - -ida_hexrays.boundaries_t.keytype.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.boundaries_t.keytype.cleanup(): - - cleanup(self) - - -ida_hexrays.boundaries_t.keytype.collect_free_breaks(): - - collect_free_breaks(self, breaks) -> bool - - -ida_hexrays.boundaries_t.keytype.collect_free_continues(): - - collect_free_continues(self, continues) -> bool - - -ida_hexrays.boundaries_t.keytype.compare(): - - compare(self, r) -> int - - -ida_hexrays.boundaries_t.keytype.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.boundaries_t.keytype.contains_free_break(): - - contains_free_break(self) -> bool - - -ida_hexrays.boundaries_t.keytype.contains_free_continue(): - - contains_free_continue(self) -> bool - - -ida_hexrays.boundaries_t.keytype.contains_insn(): - - contains_insn(self, type, times=1) -> bool - - -ida_hexrays.boundaries_t.keytype.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.boundaries_t.keytype.create_if(): - - create_if(self, cnd) -> cif_t - - -ida_hexrays.boundaries_t.keytype.details: - - return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. - - -ida_hexrays.boundaries_t.keytype.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.boundaries_t.keytype.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.boundaries_t.keytype.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.boundaries_t.keytype.index: - citem_t_index_get(self) -> int - -ida_hexrays.boundaries_t.keytype.insn_is_epilog(): - - insn_is_epilog(insn) -> bool - - -ida_hexrays.boundaries_t.keytype.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.boundaries_t.keytype.is_ordinary_flow(): - - is_ordinary_flow(self) -> bool - - -ida_hexrays.boundaries_t.keytype.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.boundaries_t.keytype.new_insn(): - - new_insn(self, insn_ea) -> cinsn_t - - -ida_hexrays.boundaries_t.keytype.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.boundaries_t.keytype.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.boundaries_t.keytype.print1(): - - print1(self, func) - - -ida_hexrays.boundaries_t.keytype.swap(): - - swap(self, r) - - -ida_hexrays.boundaries_t.keytype.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.boundaries_t.keytype.zero(): - - zero(self) - - -ida_hexrays.boundaries_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.boundaries_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.boundaries_t.setdefault(): - - Sets the value associated with the provided key. - - -class ida_hexrays.boundaries_t.valuetype(): - - Proxy of C++ rangeset_t class - - -ida_hexrays.boundaries_t.valuetype._print(): - - _print(self) -> size_t - - -ida_hexrays.boundaries_t.valuetype.add(): - - add(self, range) -> bool - add(self, start, _end) -> bool - add(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_hexrays.boundaries_t.valuetype.cached_range(): - - cached_range(self) -> range_t - - -ida_hexrays.boundaries_t.valuetype.clear(): - - clear(self) - - -ida_hexrays.boundaries_t.valuetype.contains(): - - contains(self, ea) -> bool - contains(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.empty(): - - empty(self) -> bool - - -ida_hexrays.boundaries_t.valuetype.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_hexrays.boundaries_t.valuetype.find_range(): - - find_range(self, ea) -> range_t - - -ida_hexrays.boundaries_t.valuetype.getrange(): - - getrange(self, idx) -> range_t - - -ida_hexrays.boundaries_t.valuetype.has_common(): - - has_common(self, range) -> bool - has_common(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.includes(): - - includes(self, range) -> bool - - -ida_hexrays.boundaries_t.valuetype.intersect(): - - intersect(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.is_equal(): - - is_equal(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.is_subset_of(): - - is_subset_of(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.lastrange(): - - lastrange(self) -> range_t - - -ida_hexrays.boundaries_t.valuetype.next_addr(): - - next_addr(self, ea) -> ea_t - - -ida_hexrays.boundaries_t.valuetype.next_range(): - - next_range(self, ea) -> ea_t - - -ida_hexrays.boundaries_t.valuetype.nranges(): - - nranges(self) -> size_t - - -ida_hexrays.boundaries_t.valuetype.prev_addr(): - - prev_addr(self, ea) -> ea_t - - -ida_hexrays.boundaries_t.valuetype.prev_range(): - - prev_range(self, ea) -> ea_t - - -ida_hexrays.boundaries_t.valuetype.sub(): - - sub(self, range) -> bool - sub(self, ea) -> bool - sub(self, aset) -> bool - - -ida_hexrays.boundaries_t.valuetype.swap(): - - swap(self, r) - - -class ida_hexrays.carg_t(): - - Proxy of C++ carg_t class - - -ida_hexrays.carg_t.assign(): - - assign(self, r) -> cexpr_t - - -ida_hexrays.carg_t.calc_type(): - - calc_type(self, recursive) - - -ida_hexrays.carg_t.cexpr: - citem_t_cexpr_get(self) -> cexpr_t - -ida_hexrays.carg_t.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.carg_t.cleanup(): - - cleanup(self) - - -ida_hexrays.carg_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.carg_t.consume_cexpr(): - - consume_cexpr(self, e) - - -ida_hexrays.carg_t.contains_comma(): - - contains_comma(self, times=1) -> bool - - -ida_hexrays.carg_t.contains_comma_or_insn_or_label(): - - contains_comma_or_insn_or_label(self, maxcommas=1) -> bool - - -ida_hexrays.carg_t.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.carg_t.contains_insn(): - - contains_insn(self, times=1) -> bool - - -ida_hexrays.carg_t.contains_insn_or_label(): - - contains_insn_or_label(self) -> bool - - -ida_hexrays.carg_t.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.carg_t.contains_operator(): - - contains_operator(self, needed_op, times=1) -> bool - - -ida_hexrays.carg_t.cpadone(): - - cpadone(self) -> bool - - -ida_hexrays.carg_t.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.carg_t.equal_effect(): - - equal_effect(self, r) -> bool - - -ida_hexrays.carg_t.exflags: - cexpr_t_exflags_get(self) -> uint32 - -ida_hexrays.carg_t.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.carg_t.find_num_op(): - - find_num_op(self) -> cexpr_t - find_num_op(self) -> cexpr_t - - -ida_hexrays.carg_t.find_op(): - - find_op(self, _op) -> cexpr_t - find_op(self, _op) -> cexpr_t - - -ida_hexrays.carg_t.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.carg_t.formal_type: - carg_t_formal_type_get(self) -> tinfo_t - -ida_hexrays.carg_t.get_1num_op(): - - get_1num_op(self, o1, o2) -> bool - - -ida_hexrays.carg_t.get_const_value(): - - get_const_value(self) -> bool - - -ida_hexrays.carg_t.get_high_nbit_bound(): - - get_high_nbit_bound(self) -> bit_bound_t - - -ida_hexrays.carg_t.get_low_nbit_bound(): - - get_low_nbit_bound(self) -> int - - -ida_hexrays.carg_t.get_ptr_or_array(): - - get_ptr_or_array(self) -> cexpr_t - - -ida_hexrays.carg_t.get_type_sign(): - - get_type_sign(self) -> type_sign_t - - -ida_hexrays.carg_t.get_v(): - - get_v(self) -> var_ref_t - - -ida_hexrays.carg_t.has_side_effects(): - - has_side_effects(self) -> bool - - -ida_hexrays.carg_t.index: - citem_t_index_get(self) -> int - -ida_hexrays.carg_t.is_call_arg_of(): - - is_call_arg_of(self, parent) -> bool - - -ida_hexrays.carg_t.is_call_object_of(): - - is_call_object_of(self, parent) -> bool - - -ida_hexrays.carg_t.is_child_of(): - - is_child_of(self, parent) -> bool - - -ida_hexrays.carg_t.is_const_value(): - - is_const_value(self, _v) -> bool - - -ida_hexrays.carg_t.is_cstr(): - - is_cstr(self) -> bool - - -ida_hexrays.carg_t.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.carg_t.is_fpop(): - - is_fpop(self) -> bool - - -ida_hexrays.carg_t.is_jumpout(): - - is_jumpout(self) -> bool - - -ida_hexrays.carg_t.is_negative_const(): - - is_negative_const(self) -> bool - - -ida_hexrays.carg_t.is_nice_cond(): - - is_nice_cond(self) -> bool - - -ida_hexrays.carg_t.is_nice_expr(): - - is_nice_expr(self) -> bool - - -ida_hexrays.carg_t.is_non_negative_const(): - - is_non_negative_const(self) -> bool - - -ida_hexrays.carg_t.is_non_zero_const(): - - is_non_zero_const(self) -> bool - - -ida_hexrays.carg_t.is_odd_lvalue(): - - is_odd_lvalue(self) -> bool - - -ida_hexrays.carg_t.is_type_signed(): - - is_type_signed(self) -> bool - - -ida_hexrays.carg_t.is_type_unsigned(): - - is_type_unsigned(self) -> bool - - -ida_hexrays.carg_t.is_undef_val(): - - is_undef_val(self) -> bool - - -ida_hexrays.carg_t.is_vararg: - carg_t_is_vararg_get(self) -> bool - -ida_hexrays.carg_t.is_vftable(): - - is_vftable(self) -> bool - - -ida_hexrays.carg_t.is_zero_const(): - - is_zero_const(self) -> bool - - -ida_hexrays.carg_t.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.carg_t.maybe_ptr(): - - maybe_ptr(self) -> bool - - -ida_hexrays.carg_t.numval(): - - numval(self) -> uint64 - - -ida_hexrays.carg_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.carg_t.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.carg_t.operands: - - return a dictionary with the operands of a cexpr_t. - - -ida_hexrays.carg_t.print1(): - - print1(self, func) - - -ida_hexrays.carg_t.put_number(): - - put_number(self, func, value, nbytes, sign=no_sign) - - -ida_hexrays.carg_t.requires_lvalue(): - - requires_lvalue(self, child) -> bool - - -ida_hexrays.carg_t.set_cpadone(): - - set_cpadone(self) - - -ida_hexrays.carg_t.set_v(): - - set_v(self, v) - - -ida_hexrays.carg_t.set_vftable(): - - set_vftable(self) - - -ida_hexrays.carg_t.swap(): - - swap(self, r) - - -ida_hexrays.carg_t.theother(): - - theother(self, what) -> cexpr_t - theother(self, what) -> cexpr_t - - -ida_hexrays.carg_t.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.carg_t.type: - cexpr_t_type_get(self) -> tinfo_t - -class ida_hexrays.carglist_t(): - - Proxy of C++ carglist_t class - - -ida_hexrays.carglist_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.carglist_t.append(): - - push_back(self, x) - push_back(self) -> carg_t - - -ida_hexrays.carglist_t.at(): - - __getitem__(self, i) -> carg_t - - -ida_hexrays.carglist_t.begin(): - - begin(self) -> carg_t - begin(self) -> carg_t - - -ida_hexrays.carglist_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.carglist_t.clear(): - - clear(self) - - -ida_hexrays.carglist_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.carglist_t.empty(): - - empty(self) -> bool - - -ida_hexrays.carglist_t.end(): - - end(self) -> carg_t - end(self) -> carg_t - - -ida_hexrays.carglist_t.erase(): - - erase(self, it) -> carg_t - erase(self, first, last) -> carg_t - - -ida_hexrays.carglist_t.extract(): - - extract(self) -> carg_t - - -ida_hexrays.carglist_t.find(): - - find(self, x) -> carg_t - find(self, x) -> carg_t - - -ida_hexrays.carglist_t.flags: - carglist_t_flags_get(self) -> int - -ida_hexrays.carglist_t.functype: - carglist_t_functype_get(self) -> tinfo_t - -ida_hexrays.carglist_t.grow(): - - grow(self, x=carg_t()) - - -ida_hexrays.carglist_t.has(): - - has(self, x) -> bool - - -ida_hexrays.carglist_t.inject(): - - inject(self, s, len) - - -ida_hexrays.carglist_t.insert(): - - insert(self, it, x) -> carg_t - - -ida_hexrays.carglist_t.pop_back(): - - pop_back(self) - - -ida_hexrays.carglist_t.push_back(): - - push_back(self, x) - push_back(self) -> carg_t - - -ida_hexrays.carglist_t.qclear(): - - qclear(self) - - -ida_hexrays.carglist_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.carglist_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.carglist_t.size(): - - size(self) -> size_t - - -ida_hexrays.carglist_t.swap(): - - swap(self, r) - - -ida_hexrays.carglist_t.truncate(): - - truncate(self) - - -class ida_hexrays.casm_t(): - - Proxy of C++ casm_t class - - -ida_hexrays.casm_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.casm_t.append(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_hexrays.casm_t.at(): - - __getitem__(self, i) -> unsigned-ea-like-numeric-type & - - -ida_hexrays.casm_t.begin(): - - begin(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - begin(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_hexrays.casm_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.casm_t.clear(): - - clear(self) - - -ida_hexrays.casm_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.casm_t.empty(): - - empty(self) -> bool - - -ida_hexrays.casm_t.end(): - - end(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - end(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_hexrays.casm_t.erase(): - - erase(self, it) -> qvector< unsigned-ea-like-numeric-type >::iterator - erase(self, first, last) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.casm_t.extract(): - - extract(self) -> unsigned-ea-like-numeric-type * - - -ida_hexrays.casm_t.find(): - - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_hexrays.casm_t.has(): - - has(self, x) -> bool - - -ida_hexrays.casm_t.inject(): - - inject(self, s, len) - - -ida_hexrays.casm_t.insert(): - - insert(self, it, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.casm_t.one_insn(): - - one_insn(self) -> bool - - -ida_hexrays.casm_t.pop_back(): - - pop_back(self) - - -ida_hexrays.casm_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_hexrays.casm_t.qclear(): - - qclear(self) - - -ida_hexrays.casm_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.casm_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.casm_t.size(): - - size(self) -> size_t - - -ida_hexrays.casm_t.swap(): - - swap(self, r) - - -ida_hexrays.casm_t.truncate(): - - truncate(self) - - -class ida_hexrays.cblock_t(): - - Proxy of C++ cblock_t class - - -ida_hexrays.cblock_t.back(): - - back(self) -> cinsn_t - back(self) -> cinsn_t - - -ida_hexrays.cblock_t.begin(): - - begin(self) -> qlist_cinsn_t_iterator - - -ida_hexrays.cblock_t.clear(): - - clear(self) - - -ida_hexrays.cblock_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cblock_t.empty(): - - empty(self) -> bool - - -ida_hexrays.cblock_t.end(): - - end(self) -> qlist_cinsn_t_iterator - - -ida_hexrays.cblock_t.erase(): - - erase(self, p) -> qlist< cinsn_t >::iterator - erase(self, p1, p2) - erase(self, p) - - -ida_hexrays.cblock_t.front(): - - front(self) -> cinsn_t - front(self) -> cinsn_t - - -ida_hexrays.cblock_t.pop_back(): - - pop_back(self) - - -ida_hexrays.cblock_t.pop_front(): - - pop_front(self) - - -ida_hexrays.cblock_t.push_back(): - - push_back(self, x) - push_back(self) -> cinsn_t - - -ida_hexrays.cblock_t.push_front(): - - push_front(self, x) - - -ida_hexrays.cblock_t.rbegin(): - - rbegin(self) -> qlist< cinsn_t >::reverse_iterator - rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator - - -ida_hexrays.cblock_t.rend(): - - rend(self) -> qlist< cinsn_t >::reverse_iterator - rend(self) -> qlist< cinsn_t >::const_reverse_iterator - - -ida_hexrays.cblock_t.size(): - - size(self) -> size_t - - -ida_hexrays.cblock_t.swap(): - - swap(self, x) - - -class ida_hexrays.ccase_t(): - - Proxy of C++ ccase_t class - - -ida_hexrays.ccase_t._print(): - - _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) - - -ida_hexrays.ccase_t.assign(): - - assign(self, r) -> cinsn_t - - -ida_hexrays.ccase_t.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.ccase_t.cleanup(): - - cleanup(self) - - -ida_hexrays.ccase_t.collect_free_breaks(): - - collect_free_breaks(self, breaks) -> bool - - -ida_hexrays.ccase_t.collect_free_continues(): - - collect_free_continues(self, continues) -> bool - - -ida_hexrays.ccase_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.ccase_t.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.ccase_t.contains_free_break(): - - contains_free_break(self) -> bool - - -ida_hexrays.ccase_t.contains_free_continue(): - - contains_free_continue(self) -> bool - - -ida_hexrays.ccase_t.contains_insn(): - - contains_insn(self, type, times=1) -> bool - - -ida_hexrays.ccase_t.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.ccase_t.create_if(): - - create_if(self, cnd) -> cif_t - - -ida_hexrays.ccase_t.details: - - return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. - - -ida_hexrays.ccase_t.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.ccase_t.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.ccase_t.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.ccase_t.index: - citem_t_index_get(self) -> int - -ida_hexrays.ccase_t.insn_is_epilog(): - - insn_is_epilog(insn) -> bool - - -ida_hexrays.ccase_t.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.ccase_t.is_ordinary_flow(): - - is_ordinary_flow(self) -> bool - - -ida_hexrays.ccase_t.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.ccase_t.new_insn(): - - new_insn(self, insn_ea) -> cinsn_t - - -ida_hexrays.ccase_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.ccase_t.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.ccase_t.print1(): - - print1(self, func) - - -ida_hexrays.ccase_t.size(): - - size(self) -> size_t - - -ida_hexrays.ccase_t.swap(): - - swap(self, r) - - -ida_hexrays.ccase_t.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.ccase_t.value(): - - value(self, i) -> uint64 const & - - -ida_hexrays.ccase_t.values: - ccase_t_values_get(self) -> ulonglongvec_t - -ida_hexrays.ccase_t.zero(): - - zero(self) - - -class ida_hexrays.ccases_t(): - - Proxy of C++ ccases_t class - - -ida_hexrays.ccases_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.ccases_t.append(): - - push_back(self, x) - push_back(self) -> ccase_t - - -ida_hexrays.ccases_t.at(): - - __getitem__(self, i) -> ccase_t - - -ida_hexrays.ccases_t.begin(): - - begin(self) -> ccase_t - begin(self) -> ccase_t - - -ida_hexrays.ccases_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.ccases_t.clear(): - - clear(self) - - -ida_hexrays.ccases_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.ccases_t.empty(): - - empty(self) -> bool - - -ida_hexrays.ccases_t.end(): - - end(self) -> ccase_t - end(self) -> ccase_t - - -ida_hexrays.ccases_t.erase(): - - erase(self, it) -> ccase_t - erase(self, first, last) -> ccase_t - - -ida_hexrays.ccases_t.extract(): - - extract(self) -> ccase_t - - -ida_hexrays.ccases_t.find(): - - find(self, x) -> ccase_t - find(self, x) -> ccase_t - - -ida_hexrays.ccases_t.grow(): - - grow(self, x=ccase_t()) - - -ida_hexrays.ccases_t.has(): - - has(self, x) -> bool - - -ida_hexrays.ccases_t.inject(): - - inject(self, s, len) - - -ida_hexrays.ccases_t.insert(): - - insert(self, it, x) -> ccase_t - - -ida_hexrays.ccases_t.pop_back(): - - pop_back(self) - - -ida_hexrays.ccases_t.push_back(): - - push_back(self, x) - push_back(self) -> ccase_t - - -ida_hexrays.ccases_t.qclear(): - - qclear(self) - - -ida_hexrays.ccases_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.ccases_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.ccases_t.size(): - - size(self) -> size_t - - -ida_hexrays.ccases_t.swap(): - - swap(self, r) - - -ida_hexrays.ccases_t.truncate(): - - truncate(self) - - -class ida_hexrays.cdo_t(): - - Proxy of C++ cdo_t class - - -ida_hexrays.cdo_t.assign(): - - assign(self, r) -> cloop_t - - -ida_hexrays.cdo_t.body: - cloop_t_body_get(self) -> cinsn_t - -ida_hexrays.cdo_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cdo_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cdo_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -class ida_hexrays.ceinsn_t(): - - Proxy of C++ ceinsn_t class - - -ida_hexrays.ceinsn_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.cexpr_operands(): - - return a dictionary with the operands of a cexpr_t. - - -class ida_hexrays.cexpr_t(): - - Proxy of C++ cexpr_t class - - -ida_hexrays.cexpr_t.assign(): - - assign(self, r) -> cexpr_t - - -ida_hexrays.cexpr_t.calc_type(): - - calc_type(self, recursive) - - -ida_hexrays.cexpr_t.cexpr: - citem_t_cexpr_get(self) -> cexpr_t - -ida_hexrays.cexpr_t.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.cexpr_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cexpr_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cexpr_t.contains_comma(): - - contains_comma(self, times=1) -> bool - - -ida_hexrays.cexpr_t.contains_comma_or_insn_or_label(): - - contains_comma_or_insn_or_label(self, maxcommas=1) -> bool - - -ida_hexrays.cexpr_t.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.cexpr_t.contains_insn(): - - contains_insn(self, times=1) -> bool - - -ida_hexrays.cexpr_t.contains_insn_or_label(): - - contains_insn_or_label(self) -> bool - - -ida_hexrays.cexpr_t.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.cexpr_t.contains_operator(): - - contains_operator(self, needed_op, times=1) -> bool - - -ida_hexrays.cexpr_t.cpadone(): - - cpadone(self) -> bool - - -ida_hexrays.cexpr_t.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.cexpr_t.equal_effect(): - - equal_effect(self, r) -> bool - - -ida_hexrays.cexpr_t.exflags: - cexpr_t_exflags_get(self) -> uint32 - -ida_hexrays.cexpr_t.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.cexpr_t.find_num_op(): - - find_num_op(self) -> cexpr_t - find_num_op(self) -> cexpr_t - - -ida_hexrays.cexpr_t.find_op(): - - find_op(self, _op) -> cexpr_t - find_op(self, _op) -> cexpr_t - - -ida_hexrays.cexpr_t.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.cexpr_t.get_1num_op(): - - get_1num_op(self, o1, o2) -> bool - - -ida_hexrays.cexpr_t.get_const_value(): - - get_const_value(self) -> bool - - -ida_hexrays.cexpr_t.get_high_nbit_bound(): - - get_high_nbit_bound(self) -> bit_bound_t - - -ida_hexrays.cexpr_t.get_low_nbit_bound(): - - get_low_nbit_bound(self) -> int - - -ida_hexrays.cexpr_t.get_ptr_or_array(): - - get_ptr_or_array(self) -> cexpr_t - - -ida_hexrays.cexpr_t.get_type_sign(): - - get_type_sign(self) -> type_sign_t - - -ida_hexrays.cexpr_t.get_v(): - - get_v(self) -> var_ref_t - - -ida_hexrays.cexpr_t.has_side_effects(): - - has_side_effects(self) -> bool - - -ida_hexrays.cexpr_t.index: - citem_t_index_get(self) -> int - -ida_hexrays.cexpr_t.is_call_arg_of(): - - is_call_arg_of(self, parent) -> bool - - -ida_hexrays.cexpr_t.is_call_object_of(): - - is_call_object_of(self, parent) -> bool - - -ida_hexrays.cexpr_t.is_child_of(): - - is_child_of(self, parent) -> bool - - -ida_hexrays.cexpr_t.is_const_value(): - - is_const_value(self, _v) -> bool - - -ida_hexrays.cexpr_t.is_cstr(): - - is_cstr(self) -> bool - - -ida_hexrays.cexpr_t.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.cexpr_t.is_fpop(): - - is_fpop(self) -> bool - - -ida_hexrays.cexpr_t.is_jumpout(): - - is_jumpout(self) -> bool - - -ida_hexrays.cexpr_t.is_negative_const(): - - is_negative_const(self) -> bool - - -ida_hexrays.cexpr_t.is_nice_cond(): - - is_nice_cond(self) -> bool - - -ida_hexrays.cexpr_t.is_nice_expr(): - - is_nice_expr(self) -> bool - - -ida_hexrays.cexpr_t.is_non_negative_const(): - - is_non_negative_const(self) -> bool - - -ida_hexrays.cexpr_t.is_non_zero_const(): - - is_non_zero_const(self) -> bool - - -ida_hexrays.cexpr_t.is_odd_lvalue(): - - is_odd_lvalue(self) -> bool - - -ida_hexrays.cexpr_t.is_type_signed(): - - is_type_signed(self) -> bool - - -ida_hexrays.cexpr_t.is_type_unsigned(): - - is_type_unsigned(self) -> bool - - -ida_hexrays.cexpr_t.is_undef_val(): - - is_undef_val(self) -> bool - - -ida_hexrays.cexpr_t.is_vftable(): - - is_vftable(self) -> bool - - -ida_hexrays.cexpr_t.is_zero_const(): - - is_zero_const(self) -> bool - - -ida_hexrays.cexpr_t.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.cexpr_t.maybe_ptr(): - - maybe_ptr(self) -> bool - - -ida_hexrays.cexpr_t.numval(): - - numval(self) -> uint64 - - -ida_hexrays.cexpr_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.cexpr_t.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.cexpr_t.operands: - - return a dictionary with the operands of a cexpr_t. - - -ida_hexrays.cexpr_t.print1(): - - print1(self, func) - - -ida_hexrays.cexpr_t.put_number(): - - put_number(self, func, value, nbytes, sign=no_sign) - - -ida_hexrays.cexpr_t.requires_lvalue(): - - requires_lvalue(self, child) -> bool - - -ida_hexrays.cexpr_t.set_cpadone(): - - set_cpadone(self) - - -ida_hexrays.cexpr_t.set_v(): - - set_v(self, v) - - -ida_hexrays.cexpr_t.set_vftable(): - - set_vftable(self) - - -ida_hexrays.cexpr_t.swap(): - - swap(self, r) - - -ida_hexrays.cexpr_t.theother(): - - theother(self, what) -> cexpr_t - theother(self, what) -> cexpr_t - - -ida_hexrays.cexpr_t.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.cexpr_t.type: - cexpr_t_type_get(self) -> tinfo_t - -class ida_hexrays.cfor_t(): - - Proxy of C++ cfor_t class - - -ida_hexrays.cfor_t.assign(): - - assign(self, r) -> cloop_t - - -ida_hexrays.cfor_t.body: - cloop_t_body_get(self) -> cinsn_t - -ida_hexrays.cfor_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cfor_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cfor_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.cfor_t.init: - cfor_t_init_get(self) -> cexpr_t - -ida_hexrays.cfor_t.step: - cfor_t_step_get(self) -> cexpr_t - -class ida_hexrays.cfunc_parentee_t(): - - Proxy of C++ cfunc_parentee_t class - - -ida_hexrays.cfunc_parentee_t.apply_to(): - - apply_to(self, item, parent) -> int - - -ida_hexrays.cfunc_parentee_t.apply_to_exprs(): - - apply_to_exprs(self, item, parent) -> int - - -ida_hexrays.cfunc_parentee_t.calc_rvalue_type(): - - calc_rvalue_type(self, target, e) -> bool - - -ida_hexrays.cfunc_parentee_t.clr_prune(): - - clr_prune(self) - - -ida_hexrays.cfunc_parentee_t.clr_restart(): - - clr_restart(self) - - -ida_hexrays.cfunc_parentee_t.cv_flags: - ctree_visitor_t_cv_flags_get(self) -> int - -ida_hexrays.cfunc_parentee_t.func: - cfunc_parentee_t_func_get(self) -> cfunc_t - -ida_hexrays.cfunc_parentee_t.is_postorder(): - - is_postorder(self) -> bool - - -ida_hexrays.cfunc_parentee_t.leave_expr(): - - leave_expr(self, arg0) -> int - - -ida_hexrays.cfunc_parentee_t.leave_insn(): - - leave_insn(self, arg0) -> int - - -ida_hexrays.cfunc_parentee_t.maintain_parents(): - - maintain_parents(self) -> bool - - -ida_hexrays.cfunc_parentee_t.must_prune(): - - must_prune(self) -> bool - - -ida_hexrays.cfunc_parentee_t.must_restart(): - - must_restart(self) -> bool - - -ida_hexrays.cfunc_parentee_t.only_insns(): - - only_insns(self) -> bool - - -ida_hexrays.cfunc_parentee_t.parent_expr(): - - parent_expr(self) -> cexpr_t - - -ida_hexrays.cfunc_parentee_t.parent_insn(): - - parent_insn(self) -> cinsn_t - - -ida_hexrays.cfunc_parentee_t.parents: - ctree_visitor_t_parents_get(self) -> ctree_items_t - -ida_hexrays.cfunc_parentee_t.prune_now(): - - prune_now(self) - - -ida_hexrays.cfunc_parentee_t.recalc_parent_types(): - - recalc_parent_types(self) -> bool - - -ida_hexrays.cfunc_parentee_t.set_restart(): - - set_restart(self) - - -ida_hexrays.cfunc_parentee_t.visit_expr(): - - visit_expr(self, arg0) -> int - - -ida_hexrays.cfunc_parentee_t.visit_insn(): - - visit_insn(self, arg0) -> int - - -class ida_hexrays.cfunc_t(): - - Proxy of C++ cfunc_t class - - -ida_hexrays.cfunc_t.argidx: - cfunc_t_argidx_get(self) -> intvec_t - -ida_hexrays.cfunc_t.body: - cfunc_t_body_get(self) -> cinsn_t - -ida_hexrays.cfunc_t.boundaries: - - get_boundaries(self) -> boundaries_t - - -ida_hexrays.cfunc_t.build_c_tree(): - - build_c_tree(self) - - -ida_hexrays.cfunc_t.del_orphan_cmts(): - - del_orphan_cmts(self) -> int - - -ida_hexrays.cfunc_t.eamap: - - get_eamap(self) -> eamap_t - - -ida_hexrays.cfunc_t.entry_ea: - cfunc_t_entry_ea_get(self) -> ea_t - -ida_hexrays.cfunc_t.find_item_coords(): - - find_item_coords(self, item, px, py) -> bool - find_item_coords(self, item) -> PyObject * - - -ida_hexrays.cfunc_t.find_label(): - - find_label(self, label) -> citem_t - - -ida_hexrays.cfunc_t.gather_derefs(): - - gather_derefs(self, ci, udm=None) -> bool - - -ida_hexrays.cfunc_t.get_boundaries(): - - get_boundaries(self) -> boundaries_t - - -ida_hexrays.cfunc_t.get_eamap(): - - get_eamap(self) -> eamap_t - - -ida_hexrays.cfunc_t.get_func_type(): - - get_func_type(self, type) -> bool - - -ida_hexrays.cfunc_t.get_line_item(): - - get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool - - -ida_hexrays.cfunc_t.get_lvars(): - - get_lvars(self) -> lvars_t - - -ida_hexrays.cfunc_t.get_pseudocode(): - - get_pseudocode(self) -> strvec_t - - -ida_hexrays.cfunc_t.get_stkoff_delta(): - - get_stkoff_delta(self) -> sval_t - - -ida_hexrays.cfunc_t.get_user_cmt(): - - get_user_cmt(self, loc, rt) -> char const * - - -ida_hexrays.cfunc_t.get_user_iflags(): - - get_user_iflags(self, loc) -> int32 - - -ida_hexrays.cfunc_t.get_user_union_selection(): - - get_user_union_selection(self, ea, path) -> bool - - -ida_hexrays.cfunc_t.get_warnings(): - - get_warnings(self) -> hexwarns_t - - -ida_hexrays.cfunc_t.has_orphan_cmts(): - - has_orphan_cmts(self) -> bool - - -ida_hexrays.cfunc_t.hdrlines: - cfunc_t_hdrlines_get(self) -> int - -ida_hexrays.cfunc_t.lvars: - - get_lvars(self) -> lvars_t - - -ida_hexrays.cfunc_t.maturity: - cfunc_t_maturity_get(self) -> ctree_maturity_t - -ida_hexrays.cfunc_t.mba: - cfunc_t_mba_get(self) -> mbl_array_t - -ida_hexrays.cfunc_t.numforms: - cfunc_t_numforms_get(self) -> user_numforms_t - -ida_hexrays.cfunc_t.print_dcl(): - - print_dcl(self) - - -ida_hexrays.cfunc_t.print_func(): - - print_func(self, vp) - - -ida_hexrays.cfunc_t.pseudocode: - - get_pseudocode(self) -> strvec_t - - -ida_hexrays.cfunc_t.refcnt: - cfunc_t_refcnt_get(self) -> int - -ida_hexrays.cfunc_t.refresh_func_ctext(): - - refresh_func_ctext(self) - - -ida_hexrays.cfunc_t.release(): - - release(self) - - -ida_hexrays.cfunc_t.remove_unused_labels(): - - remove_unused_labels(self) - - -ida_hexrays.cfunc_t.save_user_cmts(): - - save_user_cmts(self) - - -ida_hexrays.cfunc_t.save_user_iflags(): - - save_user_iflags(self) - - -ida_hexrays.cfunc_t.save_user_labels(): - - save_user_labels(self) - - -ida_hexrays.cfunc_t.save_user_numforms(): - - save_user_numforms(self) - - -ida_hexrays.cfunc_t.save_user_unions(): - - save_user_unions(self) - - -ida_hexrays.cfunc_t.set_user_cmt(): - - set_user_cmt(self, loc, cmt) - - -ida_hexrays.cfunc_t.set_user_iflags(): - - set_user_iflags(self, loc, iflags) - - -ida_hexrays.cfunc_t.set_user_union_selection(): - - set_user_union_selection(self, ea, path) - - -ida_hexrays.cfunc_t.statebits: - cfunc_t_statebits_get(self) -> int - -ida_hexrays.cfunc_t.treeitems: - cfunc_t_treeitems_get(self) -> ctree_items_t - -ida_hexrays.cfunc_t.type: - - Get the function's return type tinfo_t object. - - -ida_hexrays.cfunc_t.user_cmts: - cfunc_t_user_cmts_get(self) -> user_cmts_t - -ida_hexrays.cfunc_t.user_iflags: - cfunc_t_user_iflags_get(self) -> user_iflags_t - -ida_hexrays.cfunc_t.user_labels: - cfunc_t_user_labels_get(self) -> user_labels_t - -ida_hexrays.cfunc_t.user_unions: - cfunc_t_user_unions_get(self) -> user_unions_t - -ida_hexrays.cfunc_t.verify(): - - verify(self, aul, even_without_debugger) - - -ida_hexrays.cfunc_t.warnings: - - get_warnings(self) -> hexwarns_t - - -ida_hexrays.cfunc_type(): - - Get the function's return type tinfo_t object. - - -class ida_hexrays.cfuncptr_t(): - - Proxy of C++ qrefcnt_t<(cfunc_t)> class - - -ida_hexrays.cfuncptr_t.argidx: - cfuncptr_t_argidx_get(self) -> intvec_t - -ida_hexrays.cfuncptr_t.body: - cfuncptr_t_body_get(self) -> cinsn_t - -ida_hexrays.cfuncptr_t.build_c_tree(): - - build_c_tree(self) - - -ida_hexrays.cfuncptr_t.del_orphan_cmts(): - - del_orphan_cmts(self) -> int - - -ida_hexrays.cfuncptr_t.entry_ea: - cfuncptr_t_entry_ea_get(self) -> ea_t - -ida_hexrays.cfuncptr_t.find_item_coords(): - - find_item_coords(self, item, px, py) -> bool - find_item_coords(self, item) -> PyObject * - - -ida_hexrays.cfuncptr_t.find_label(): - - find_label(self, label) -> citem_t - - -ida_hexrays.cfuncptr_t.gather_derefs(): - - gather_derefs(self, ci, udm=None) -> bool - - -ida_hexrays.cfuncptr_t.get_boundaries(): - - get_boundaries(self) -> boundaries_t - - -ida_hexrays.cfuncptr_t.get_eamap(): - - get_eamap(self) -> eamap_t - - -ida_hexrays.cfuncptr_t.get_func_type(): - - get_func_type(self, type) -> bool - - -ida_hexrays.cfuncptr_t.get_line_item(): - - get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool - - -ida_hexrays.cfuncptr_t.get_lvars(): - - get_lvars(self) -> lvars_t - - -ida_hexrays.cfuncptr_t.get_pseudocode(): - - get_pseudocode(self) -> strvec_t - - -ida_hexrays.cfuncptr_t.get_stkoff_delta(): - - get_stkoff_delta(self) -> sval_t - - -ida_hexrays.cfuncptr_t.get_user_cmt(): - - get_user_cmt(self, loc, rt) -> char const * - - -ida_hexrays.cfuncptr_t.get_user_iflags(): - - get_user_iflags(self, loc) -> int32 - - -ida_hexrays.cfuncptr_t.get_user_union_selection(): - - get_user_union_selection(self, ea, path) -> bool - - -ida_hexrays.cfuncptr_t.get_warnings(): - - get_warnings(self) -> hexwarns_t - - -ida_hexrays.cfuncptr_t.has_orphan_cmts(): - - has_orphan_cmts(self) -> bool - - -ida_hexrays.cfuncptr_t.hdrlines: - cfuncptr_t_hdrlines_get(self) -> int - -ida_hexrays.cfuncptr_t.maturity: - cfuncptr_t_maturity_get(self) -> ctree_maturity_t - -ida_hexrays.cfuncptr_t.mba: - cfuncptr_t_mba_get(self) -> mbl_array_t - -ida_hexrays.cfuncptr_t.numforms: - cfuncptr_t_numforms_get(self) -> user_numforms_t - -ida_hexrays.cfuncptr_t.print_dcl(): - - print_dcl(self) - - -ida_hexrays.cfuncptr_t.print_func(): - - print_func(self, vp) - - -ida_hexrays.cfuncptr_t.refcnt: - cfuncptr_t_refcnt_get(self) -> int - -ida_hexrays.cfuncptr_t.refresh_func_ctext(): - - refresh_func_ctext(self) - - -ida_hexrays.cfuncptr_t.release(): - - release(self) - - -ida_hexrays.cfuncptr_t.remove_unused_labels(): - - remove_unused_labels(self) - - -ida_hexrays.cfuncptr_t.reset(): - - reset(self) - - -ida_hexrays.cfuncptr_t.save_user_cmts(): - - save_user_cmts(self) - - -ida_hexrays.cfuncptr_t.save_user_iflags(): - - save_user_iflags(self) - - -ida_hexrays.cfuncptr_t.save_user_labels(): - - save_user_labels(self) - - -ida_hexrays.cfuncptr_t.save_user_numforms(): - - save_user_numforms(self) - - -ida_hexrays.cfuncptr_t.save_user_unions(): - - save_user_unions(self) - - -ida_hexrays.cfuncptr_t.set_user_cmt(): - - set_user_cmt(self, loc, cmt) - - -ida_hexrays.cfuncptr_t.set_user_iflags(): - - set_user_iflags(self, loc, iflags) - - -ida_hexrays.cfuncptr_t.set_user_union_selection(): - - set_user_union_selection(self, ea, path) - - -ida_hexrays.cfuncptr_t.statebits: - cfuncptr_t_statebits_get(self) -> int - -ida_hexrays.cfuncptr_t.treeitems: - cfuncptr_t_treeitems_get(self) -> ctree_items_t - -ida_hexrays.cfuncptr_t.user_cmts: - cfuncptr_t_user_cmts_get(self) -> user_cmts_t - -ida_hexrays.cfuncptr_t.user_iflags: - cfuncptr_t_user_iflags_get(self) -> user_iflags_t - -ida_hexrays.cfuncptr_t.user_labels: - cfuncptr_t_user_labels_get(self) -> user_labels_t - -ida_hexrays.cfuncptr_t.user_unions: - cfuncptr_t_user_unions_get(self) -> user_unions_t - -ida_hexrays.cfuncptr_t.verify(): - - verify(self, aul, even_without_debugger) - - -class ida_hexrays.cgoto_t(): - - Proxy of C++ cgoto_t class - - -ida_hexrays.cgoto_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cgoto_t.label_num: - cgoto_t_label_num_get(self) -> int - -class ida_hexrays.chain_keeper_t(): - - Proxy of C++ chain_keeper_t class - - -ida_hexrays.chain_keeper_t.back(): - - back(self) -> block_chains_t - - -ida_hexrays.chain_keeper_t.for_all_chains(): - - for_all_chains(self, cv, gca) -> int - - -ida_hexrays.chain_keeper_t.front(): - - front(self) -> block_chains_t - - -class ida_hexrays.chain_t(): - - Proxy of C++ chain_t class - - -ida_hexrays.chain_t._print(): - - _print(self) - - -ida_hexrays.chain_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.chain_t.append(): - - push_back(self, x) - push_back(self) -> int & - - -ida_hexrays.chain_t.append_list(): - - append_list(self, list) - - -ida_hexrays.chain_t.at(): - - __getitem__(self, i) -> int const & - - -ida_hexrays.chain_t.begin(): - - begin(self) -> qvector< int >::iterator - begin(self) -> qvector< int >::const_iterator - - -ida_hexrays.chain_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.chain_t.clear(): - - clear(self) - - -ida_hexrays.chain_t.clear_varnum(): - - clear_varnum(self) - - -ida_hexrays.chain_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.chain_t.empty(): - - empty(self) -> bool - - -ida_hexrays.chain_t.end(): - - end(self) -> qvector< int >::iterator - end(self) -> qvector< int >::const_iterator - - -ida_hexrays.chain_t.endoff(): - - endoff(self) -> voff_t - - -ida_hexrays.chain_t.erase(): - - erase(self, it) -> qvector< int >::iterator - erase(self, first, last) -> qvector< int >::iterator - - -ida_hexrays.chain_t.extract(): - - extract(self) -> int * - - -ida_hexrays.chain_t.find(): - - find(self, x) -> qvector< int >::iterator - find(self, x) -> qvector< int >::const_iterator - - -ida_hexrays.chain_t.flags: - chain_t_flags_get(self) -> uchar - -ida_hexrays.chain_t.get_reg(): - - get_reg(self) -> mreg_t - - -ida_hexrays.chain_t.get_stkoff(): - - get_stkoff(self) -> sval_t - - -ida_hexrays.chain_t.has(): - - has(self, x) -> bool - - -ida_hexrays.chain_t.includes(): - - includes(self, r) -> bool - - -ida_hexrays.chain_t.inject(): - - inject(self, s, len) - - -ida_hexrays.chain_t.insert(): - - insert(self, it, x) -> qvector< int >::iterator - - -ida_hexrays.chain_t.is_fake(): - - is_fake(self) -> bool - - -ida_hexrays.chain_t.is_inited(): - - is_inited(self) -> bool - - -ida_hexrays.chain_t.is_overlapped(): - - is_overlapped(self) -> bool - - -ida_hexrays.chain_t.is_passreg(): - - is_passreg(self) -> bool - - -ida_hexrays.chain_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.chain_t.is_replaced(): - - is_replaced(self) -> bool - - -ida_hexrays.chain_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_hexrays.chain_t.is_term(): - - is_term(self) -> bool - - -ida_hexrays.chain_t.key(): - - key(self) -> voff_t - - -ida_hexrays.chain_t.overlap(): - - overlap(self, r) -> bool - - -ida_hexrays.chain_t.pop_back(): - - pop_back(self) - - -ida_hexrays.chain_t.push_back(): - - push_back(self, x) - push_back(self) -> int & - - -ida_hexrays.chain_t.qclear(): - - qclear(self) - - -ida_hexrays.chain_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.chain_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.chain_t.set_inited(): - - set_inited(self, b) - - -ida_hexrays.chain_t.set_overlapped(): - - set_overlapped(self, b) - - -ida_hexrays.chain_t.set_replaced(): - - set_replaced(self, b) - - -ida_hexrays.chain_t.set_term(): - - set_term(self, b) - - -ida_hexrays.chain_t.set_value(): - - set_value(self, r) - - -ida_hexrays.chain_t.size(): - - size(self) -> size_t - - -ida_hexrays.chain_t.swap(): - - swap(self, r) - - -ida_hexrays.chain_t.truncate(): - - truncate(self) - - -ida_hexrays.chain_t.varnum: - chain_t_varnum_get(self) -> int - -ida_hexrays.chain_t.width: - chain_t_width_get(self) -> int - -class ida_hexrays.chain_visitor_t(): - - Proxy of C++ chain_visitor_t class - - -ida_hexrays.chain_visitor_t.parent: - chain_visitor_t_parent_get(self) -> block_chains_t - -ida_hexrays.chain_visitor_t.visit_chain(): - - visit_chain(self, nblock, ch) -> int - - -ida_hexrays.checkout_hexrays_license(): - - checkout_hexrays_license(silent) -> bool - - - Check out a floating decompiler license. This function will display a - dialog box if the license is not available. For non-floating licenses - this function is effectively no-op. It is not necessary to call this - function before decompiling. If the license was not checked out, the - decompiler will automatically do it. This function can be used to - check out a license in advance and ensure that a license is available. - - @param silent: silently fail if the license can not be checked out. - (C++: bool) - @return: false if failed - - -class ida_hexrays.cif_t(): - - Proxy of C++ cif_t class - - -ida_hexrays.cif_t.assign(): - - assign(self, r) -> cif_t - - -ida_hexrays.cif_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cif_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cif_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.cif_t.ielse: - cif_t_ielse_get(self) -> cinsn_t - -ida_hexrays.cif_t.ithen: - cif_t_ithen_get(self) -> cinsn_t - -ida_hexrays.cinsn_details(): - - return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. - - -class ida_hexrays.cinsn_t(): - - Proxy of C++ cinsn_t class - - -ida_hexrays.cinsn_t._print(): - - _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) - - -ida_hexrays.cinsn_t.assign(): - - assign(self, r) -> cinsn_t - - -ida_hexrays.cinsn_t.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.cinsn_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cinsn_t.collect_free_breaks(): - - collect_free_breaks(self, breaks) -> bool - - -ida_hexrays.cinsn_t.collect_free_continues(): - - collect_free_continues(self, continues) -> bool - - -ida_hexrays.cinsn_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cinsn_t.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.cinsn_t.contains_free_break(): - - contains_free_break(self) -> bool - - -ida_hexrays.cinsn_t.contains_free_continue(): - - contains_free_continue(self) -> bool - - -ida_hexrays.cinsn_t.contains_insn(): - - contains_insn(self, type, times=1) -> bool - - -ida_hexrays.cinsn_t.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.cinsn_t.create_if(): - - create_if(self, cnd) -> cif_t - - -ida_hexrays.cinsn_t.details: - - return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. - - -ida_hexrays.cinsn_t.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.cinsn_t.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.cinsn_t.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.cinsn_t.index: - citem_t_index_get(self) -> int - -ida_hexrays.cinsn_t.insn_is_epilog(): - - insn_is_epilog(insn) -> bool - - -ida_hexrays.cinsn_t.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.cinsn_t.is_ordinary_flow(): - - is_ordinary_flow(self) -> bool - - -ida_hexrays.cinsn_t.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.cinsn_t.new_insn(): - - new_insn(self, insn_ea) -> cinsn_t - - -ida_hexrays.cinsn_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.cinsn_t.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.cinsn_t.print1(): - - print1(self, func) - - -ida_hexrays.cinsn_t.swap(): - - swap(self, r) - - -ida_hexrays.cinsn_t.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.cinsn_t.zero(): - - zero(self) - - -ida_hexrays.cinsn_t_insn_is_epilog(): - - cinsn_t_insn_is_epilog(insn) -> bool - - -class ida_hexrays.cinsnptrvec_t(): - - Proxy of C++ qvector<(p.cinsn_t)> class - - -ida_hexrays.cinsnptrvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.cinsnptrvec_t.append(): - - push_back(self, x) - push_back(self) -> cinsn_t *& - - -ida_hexrays.cinsnptrvec_t.at(): - - __getitem__(self, i) -> cinsn_t - - -ida_hexrays.cinsnptrvec_t.begin(): - - begin(self) -> qvector< cinsn_t * >::iterator - begin(self) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.cinsnptrvec_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.cinsnptrvec_t.clear(): - - clear(self) - - -ida_hexrays.cinsnptrvec_t.empty(): - - empty(self) -> bool - - -ida_hexrays.cinsnptrvec_t.end(): - - end(self) -> qvector< cinsn_t * >::iterator - end(self) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.cinsnptrvec_t.erase(): - - erase(self, it) -> qvector< cinsn_t * >::iterator - erase(self, first, last) -> qvector< cinsn_t * >::iterator - - -ida_hexrays.cinsnptrvec_t.extract(): - - extract(self) -> cinsn_t ** - - -ida_hexrays.cinsnptrvec_t.find(): - - find(self, x) -> qvector< cinsn_t * >::iterator - find(self, x) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.cinsnptrvec_t.has(): - - has(self, x) -> bool - - -ida_hexrays.cinsnptrvec_t.inject(): - - inject(self, s, len) - - -ida_hexrays.cinsnptrvec_t.insert(): - - insert(self, it, x) -> qvector< cinsn_t * >::iterator - - -ida_hexrays.cinsnptrvec_t.pop_back(): - - pop_back(self) - - -ida_hexrays.cinsnptrvec_t.push_back(): - - push_back(self, x) - push_back(self) -> cinsn_t *& - - -ida_hexrays.cinsnptrvec_t.qclear(): - - qclear(self) - - -ida_hexrays.cinsnptrvec_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.cinsnptrvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.cinsnptrvec_t.size(): - - size(self) -> size_t - - -ida_hexrays.cinsnptrvec_t.swap(): - - swap(self, r) - - -ida_hexrays.cinsnptrvec_t.truncate(): - - truncate(self) - - -class ida_hexrays.citem_cmt_t(): - - Proxy of C++ citem_cmt_t class - - -ida_hexrays.citem_cmt_t.c_str(): - - c_str(self) -> char const * - - -ida_hexrays.citem_cmt_t.used: - citem_cmt_t_used_get(self) -> bool - -class ida_hexrays.citem_locator_t(): - - Proxy of C++ citem_locator_t class - - -ida_hexrays.citem_locator_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.citem_locator_t.ea: - citem_locator_t_ea_get(self) -> ea_t - -ida_hexrays.citem_locator_t.op: - citem_locator_t_op_get(self) -> ctype_t - -class ida_hexrays.citem_t(): - - Proxy of C++ citem_t class - - -ida_hexrays.citem_t.cexpr: - citem_t_cexpr_get(self) -> cexpr_t - -ida_hexrays.citem_t.cinsn: - citem_t_cinsn_get(self) -> cinsn_t - -ida_hexrays.citem_t.contains_expr(): - - contains_expr(self, e) -> bool - - -ida_hexrays.citem_t.contains_label(): - - contains_label(self) -> bool - - -ida_hexrays.citem_t.ea: - citem_t_ea_get(self) -> ea_t - -ida_hexrays.citem_t.find_closest_addr(): - - find_closest_addr(self, _ea) -> citem_t - - -ida_hexrays.citem_t.find_parent_of(): - - find_parent_of(self, sitem) -> citem_t - find_parent_of(self, item) -> citem_t - - -ida_hexrays.citem_t.index: - citem_t_index_get(self) -> int - -ida_hexrays.citem_t.is_expr(): - - is_expr(self) -> bool - - -ida_hexrays.citem_t.label_num: - citem_t_label_num_get(self) -> int - -ida_hexrays.citem_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.citem_t.op: - - _get_op(self) -> ctype_t - - -ida_hexrays.citem_t.print1(): - - print1(self, func) - - -ida_hexrays.citem_t.swap(): - - swap(self, r) - - -ida_hexrays.citem_t.to_specific_type: - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.citem_to_specific_type(): - - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - - -ida_hexrays.clear_cached_cfuncs(): - - clear_cached_cfuncs() - - - Flush all cached decompilation results. - - -class ida_hexrays.cloop_t(): - - Proxy of C++ cloop_t class - - -ida_hexrays.cloop_t.assign(): - - assign(self, r) -> cloop_t - - -ida_hexrays.cloop_t.body: - cloop_t_body_get(self) -> cinsn_t - -ida_hexrays.cloop_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cloop_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.close_pseudocode(): - - close_pseudocode(f) -> bool - - - Close pseudocode window. - - @param f: pointer to window (C++: TWidget *) - @return: false if failed - - -class ida_hexrays.cnumber_t(): - - Proxy of C++ cnumber_t class - - -ida_hexrays.cnumber_t._print(): - - _print(self, type, parent=None, nice_stroff=None) - - -ida_hexrays.cnumber_t.assign(): - - assign(self, v, nbytes, sign) - - -ida_hexrays.cnumber_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cnumber_t.nf: - cnumber_t_nf_get(self) -> number_format_t - -ida_hexrays.cnumber_t.value(): - - value(self, type) -> uint64 - - -class ida_hexrays.codegen_t(): - - Proxy of C++ codegen_t class - - -ida_hexrays.codegen_t.analyze_prolog(): - - analyze_prolog(self, fc, reachable) -> merror_t - - -ida_hexrays.codegen_t.emit(): - - emit(self, code, width, l, r, d, offsize) -> minsn_t - emit(self, code, l, r, d) -> minsn_t - - -ida_hexrays.codegen_t.emit_micro_mvm(): - - emit_micro_mvm(self, code, dtype, l, r, d, offsize) -> minsn_t - - -ida_hexrays.codegen_t.gen_micro(): - - gen_micro(self) -> merror_t - - -ida_hexrays.codegen_t.ignore_micro: - codegen_t_ignore_micro_get(self) -> char - -ida_hexrays.codegen_t.insn: - codegen_t_insn_get(self) -> insn_t * - -ida_hexrays.codegen_t.load_operand(): - - load_operand(self, opnum) -> mreg_t - - -ida_hexrays.codegen_t.mb: - codegen_t_mb_get(self) -> mblock_t - -ida_hexrays.codegen_t.mba: - codegen_t_mba_get(self) -> mbl_array_t - -ida_hexrays.convert_to_user_call(): - - convert_to_user_call(udc, cdg) -> merror_t - - - try to generate user-defined call for an instruction - - @param udc (C++: const udcall_t &) - @param cdg (C++: codegen_t &) - @return: Microcode error codes code: MERR_OK - user-defined call - generated else - error (MERR_INSN == inacceptable udc.tif) - - -ida_hexrays.create_field_name(): - - create_field_name(type, offset=BADADDR) -> qstring - - -ida_hexrays.create_typedef(): - - create_typedef(name) -> tinfo_t - create_typedef(n) -> tinfo_t - - - Create a reference to a named type. - - @param name: type name (C++: const char *) - @return: type which refers to the specified name. For example, if name - is "DWORD", the type info which refers to "DWORD" is created. - - -class ida_hexrays.creturn_t(): - - Proxy of C++ creturn_t class - - -ida_hexrays.creturn_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.creturn_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -class ida_hexrays.cswitch_t(): - - Proxy of C++ cswitch_t class - - -ida_hexrays.cswitch_t.cases: - cswitch_t_cases_get(self) -> ccases_t - -ida_hexrays.cswitch_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cswitch_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.cswitch_t.mvnf: - cswitch_t_mvnf_get(self) -> cnumber_t - -class ida_hexrays.ctext_position_t(): - - Proxy of C++ ctext_position_t class - - -ida_hexrays.ctext_position_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.ctext_position_t.in_ctree(): - - in_ctree(self, hdrlines) -> bool - - -ida_hexrays.ctext_position_t.lnnum: - ctext_position_t_lnnum_get(self) -> int - -ida_hexrays.ctext_position_t.x: - ctext_position_t_x_get(self) -> int - -ida_hexrays.ctext_position_t.y: - ctext_position_t_y_get(self) -> int - -class ida_hexrays.ctree_anchor_t(): - - Proxy of C++ ctree_anchor_t class - - -ida_hexrays.ctree_anchor_t.get_index(): - - get_index(self) -> int - - -ida_hexrays.ctree_anchor_t.get_itp(): - - get_itp(self) -> item_preciser_t - - -ida_hexrays.ctree_anchor_t.is_blkcmt_anchor(): - - is_blkcmt_anchor(self) -> bool - - -ida_hexrays.ctree_anchor_t.is_citem_anchor(): - - is_citem_anchor(self) -> bool - - -ida_hexrays.ctree_anchor_t.is_itp_anchor(): - - is_itp_anchor(self) -> bool - - -ida_hexrays.ctree_anchor_t.is_lvar_anchor(): - - is_lvar_anchor(self) -> bool - - -ida_hexrays.ctree_anchor_t.is_valid_anchor(): - - is_valid_anchor(self) -> bool - - -ida_hexrays.ctree_anchor_t.value: - ctree_anchor_t_value_get(self) -> uval_t - -class ida_hexrays.ctree_item_t(): - - Proxy of C++ ctree_item_t class - - -ida_hexrays.ctree_item_t.citype: - ctree_item_t_citype_get(self) -> cursor_item_type_t - -ida_hexrays.ctree_item_t.get_ea(): - - get_ea(self) -> ea_t - - -ida_hexrays.ctree_item_t.get_label_num(): - - get_label_num(self, gln_flags) -> int - - -ida_hexrays.ctree_item_t.get_lvar(): - - get_lvar(self) -> lvar_t - - -ida_hexrays.ctree_item_t.get_memptr(): - - get_memptr(self, p_sptr=None) -> member_t * - - -ida_hexrays.ctree_item_t.is_citem(): - - is_citem(self) -> bool - - -ida_hexrays.ctree_item_t.loc: - ctree_item_t_loc_get(self) -> treeloc_t - -class ida_hexrays.ctree_items_t(): - - Proxy of C++ qvector<(p.citem_t)> class - - -ida_hexrays.ctree_items_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.ctree_items_t.append(): - - push_back(self, x) - push_back(self) -> citem_t *& - - -ida_hexrays.ctree_items_t.at(): - - __getitem__(self, i) -> citem_t - - -ida_hexrays.ctree_items_t.begin(): - - begin(self) -> qvector< citem_t * >::iterator - begin(self) -> qvector< citem_t * >::const_iterator - - -ida_hexrays.ctree_items_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.ctree_items_t.clear(): - - clear(self) - - -ida_hexrays.ctree_items_t.empty(): - - empty(self) -> bool - - -ida_hexrays.ctree_items_t.end(): - - end(self) -> qvector< citem_t * >::iterator - end(self) -> qvector< citem_t * >::const_iterator - - -ida_hexrays.ctree_items_t.erase(): - - erase(self, it) -> qvector< citem_t * >::iterator - erase(self, first, last) -> qvector< citem_t * >::iterator - - -ida_hexrays.ctree_items_t.extract(): - - extract(self) -> citem_t ** - - -ida_hexrays.ctree_items_t.find(): - - find(self, x) -> qvector< citem_t * >::iterator - find(self, x) -> qvector< citem_t * >::const_iterator - - -ida_hexrays.ctree_items_t.has(): - - has(self, x) -> bool - - -ida_hexrays.ctree_items_t.inject(): - - inject(self, s, len) - - -ida_hexrays.ctree_items_t.insert(): - - insert(self, it, x) -> qvector< citem_t * >::iterator - - -ida_hexrays.ctree_items_t.pop_back(): - - pop_back(self) - - -ida_hexrays.ctree_items_t.push_back(): - - push_back(self, x) - push_back(self) -> citem_t *& - - -ida_hexrays.ctree_items_t.qclear(): - - qclear(self) - - -ida_hexrays.ctree_items_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.ctree_items_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.ctree_items_t.size(): - - size(self) -> size_t - - -ida_hexrays.ctree_items_t.swap(): - - swap(self, r) - - -ida_hexrays.ctree_items_t.truncate(): - - truncate(self) - - -class ida_hexrays.ctree_parentee_t(): - - Proxy of C++ ctree_parentee_t class - - -ida_hexrays.ctree_parentee_t.apply_to(): - - apply_to(self, item, parent) -> int - - -ida_hexrays.ctree_parentee_t.apply_to_exprs(): - - apply_to_exprs(self, item, parent) -> int - - -ida_hexrays.ctree_parentee_t.clr_prune(): - - clr_prune(self) - - -ida_hexrays.ctree_parentee_t.clr_restart(): - - clr_restart(self) - - -ida_hexrays.ctree_parentee_t.cv_flags: - ctree_visitor_t_cv_flags_get(self) -> int - -ida_hexrays.ctree_parentee_t.is_postorder(): - - is_postorder(self) -> bool - - -ida_hexrays.ctree_parentee_t.leave_expr(): - - leave_expr(self, arg0) -> int - - -ida_hexrays.ctree_parentee_t.leave_insn(): - - leave_insn(self, arg0) -> int - - -ida_hexrays.ctree_parentee_t.maintain_parents(): - - maintain_parents(self) -> bool - - -ida_hexrays.ctree_parentee_t.must_prune(): - - must_prune(self) -> bool - - -ida_hexrays.ctree_parentee_t.must_restart(): - - must_restart(self) -> bool - - -ida_hexrays.ctree_parentee_t.only_insns(): - - only_insns(self) -> bool - - -ida_hexrays.ctree_parentee_t.parent_expr(): - - parent_expr(self) -> cexpr_t - - -ida_hexrays.ctree_parentee_t.parent_insn(): - - parent_insn(self) -> cinsn_t - - -ida_hexrays.ctree_parentee_t.parents: - ctree_visitor_t_parents_get(self) -> ctree_items_t - -ida_hexrays.ctree_parentee_t.prune_now(): - - prune_now(self) - - -ida_hexrays.ctree_parentee_t.recalc_parent_types(): - - recalc_parent_types(self) -> bool - - -ida_hexrays.ctree_parentee_t.set_restart(): - - set_restart(self) - - -ida_hexrays.ctree_parentee_t.visit_expr(): - - visit_expr(self, arg0) -> int - - -ida_hexrays.ctree_parentee_t.visit_insn(): - - visit_insn(self, arg0) -> int - - -class ida_hexrays.ctree_visitor_t(): - - Proxy of C++ ctree_visitor_t class - - -ida_hexrays.ctree_visitor_t.apply_to(): - - apply_to(self, item, parent) -> int - - -ida_hexrays.ctree_visitor_t.apply_to_exprs(): - - apply_to_exprs(self, item, parent) -> int - - -ida_hexrays.ctree_visitor_t.clr_prune(): - - clr_prune(self) - - -ida_hexrays.ctree_visitor_t.clr_restart(): - - clr_restart(self) - - -ida_hexrays.ctree_visitor_t.cv_flags: - ctree_visitor_t_cv_flags_get(self) -> int - -ida_hexrays.ctree_visitor_t.is_postorder(): - - is_postorder(self) -> bool - - -ida_hexrays.ctree_visitor_t.leave_expr(): - - leave_expr(self, arg0) -> int - - -ida_hexrays.ctree_visitor_t.leave_insn(): - - leave_insn(self, arg0) -> int - - -ida_hexrays.ctree_visitor_t.maintain_parents(): - - maintain_parents(self) -> bool - - -ida_hexrays.ctree_visitor_t.must_prune(): - - must_prune(self) -> bool - - -ida_hexrays.ctree_visitor_t.must_restart(): - - must_restart(self) -> bool - - -ida_hexrays.ctree_visitor_t.only_insns(): - - only_insns(self) -> bool - - -ida_hexrays.ctree_visitor_t.parent_expr(): - - parent_expr(self) -> cexpr_t - - -ida_hexrays.ctree_visitor_t.parent_insn(): - - parent_insn(self) -> cinsn_t - - -ida_hexrays.ctree_visitor_t.parents: - ctree_visitor_t_parents_get(self) -> ctree_items_t - -ida_hexrays.ctree_visitor_t.prune_now(): - - prune_now(self) - - -ida_hexrays.ctree_visitor_t.set_restart(): - - set_restart(self) - - -ida_hexrays.ctree_visitor_t.visit_expr(): - - visit_expr(self, arg0) -> int - - -ida_hexrays.ctree_visitor_t.visit_insn(): - - visit_insn(self, arg0) -> int - - -class ida_hexrays.cwhile_t(): - - Proxy of C++ cwhile_t class - - -ida_hexrays.cwhile_t.assign(): - - assign(self, r) -> cloop_t - - -ida_hexrays.cwhile_t.body: - cloop_t_body_get(self) -> cinsn_t - -ida_hexrays.cwhile_t.cleanup(): - - cleanup(self) - - -ida_hexrays.cwhile_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.cwhile_t.expr: - ceinsn_t_expr_get(self) -> cexpr_t - -ida_hexrays.debug_hexrays_ctree(): - - debug_hexrays_ctree(msg) - - -ida_hexrays.decompile_func(): - - decompile_func(pfn, hf, flags=0) -> cfuncptr_t - - - Decompile a function. Multiple decompilations of the same function - return the same object. - - @param pfn: pointer to function to decompile (C++: func_t *) - @param hf: extended error information (if failed) (C++: - hexrays_failure_t *) - @param flags: bitwise combination of decompile() flags ... bits (C++: - int) - @return: pointer to the decompilation result (a reference counted - pointer). NULL if failed. - - -ida_hexrays.decompile_many(): - - decompile_many(outfile, funcaddrs, flags) -> bool - - - Batch decompilation. Decompile all or the specified functions - - @param outfile: name of the output file (C++: const char *) - @param funcaddrs: list of functions to decompile. If NULL or empty, - then decompile all nonlib functions (C++: eavec_t - *) - @param flags: Batch decompilation bits (C++: int) - @return: true if no internal error occurred and the user has not - cancelled decompilation - - -ida_hexrays.dstr(): - - dstr(tif) -> char const * - - - Print the specified type info. This function can be used from a - debugger by typing "tif->dstr()" - - @param tif (C++: const tinfo_t *) - - -ida_hexrays.dummy_ptrtype(): - - dummy_ptrtype(ptrsize, isfp) -> tinfo_t - - - Generate a dummy pointer type - - @param ptrsize: size of pointed object (C++: int) - @param isfp: is floating point object? (C++: bool) - - -ida_hexrays.eamap_begin(): - - eamap_begin(map) -> eamap_iterator_t - - - Get iterator pointing to the beginning of eamap_t. - - - @param map (C++: const eamap_t *) - - -ida_hexrays.eamap_clear(): - - eamap_clear(map) - - - Clear eamap_t. - - - @param map (C++: eamap_t *) - - -ida_hexrays.eamap_end(): - - eamap_end(map) -> eamap_iterator_t - - - Get iterator pointing to the end of eamap_t. - - - @param map (C++: const eamap_t *) - - -ida_hexrays.eamap_erase(): - - eamap_erase(map, p) - - - Erase current element from eamap_t. - - - @param map (C++: eamap_t *) - @param p (C++: eamap_iterator_t) - - -ida_hexrays.eamap_find(): - - eamap_find(map, key) -> eamap_iterator_t - - - Find the specified key in eamap_t. - - - @param map (C++: const eamap_t *) - @param key (C++: const ea_t &) - - -ida_hexrays.eamap_first(): - - eamap_first(p) -> ea_t const & - - - Get reference to the current map key. - - - @param p (C++: eamap_iterator_t) - - -ida_hexrays.eamap_free(): - - eamap_free(map) - - - Delete eamap_t instance. - - - @param map (C++: eamap_t *) - - -ida_hexrays.eamap_insert(): - - eamap_insert(map, key, val) -> eamap_iterator_t - - - Insert new (ea_t, cinsnptrvec_t) pair into eamap_t. - - - @param map (C++: eamap_t *) - @param key (C++: const ea_t &) - @param val (C++: const cinsnptrvec_t &) - - -class ida_hexrays.eamap_iterator_t(): - - Proxy of C++ eamap_iterator_t class - - -ida_hexrays.eamap_iterator_t.x: - eamap_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.eamap_new(): - - eamap_new() -> eamap_t - - - Create a new eamap_t instance. - - -ida_hexrays.eamap_next(): - - eamap_next(p) -> eamap_iterator_t - - - Move to the next element. - - - @param p (C++: eamap_iterator_t) - - -ida_hexrays.eamap_prev(): - - eamap_prev(p) -> eamap_iterator_t - - - Move to the previous element. - - - @param p (C++: eamap_iterator_t) - - -ida_hexrays.eamap_second(): - - eamap_second(p) -> cinsnptrvec_t - - - Get reference to the current map value. - - - @param p (C++: eamap_iterator_t) - - -ida_hexrays.eamap_size(): - - eamap_size(map) -> size_t - - - Get size of eamap_t. - - - @param map (C++: eamap_t *) - - -class ida_hexrays.eamap_t(): - - Proxy of C++ std::map<(ea_t,cinsnptrvec_t)> class - - -ida_hexrays.eamap_t.at(): - - at(self, _Keyval) -> cinsnptrvec_t - - -ida_hexrays.eamap_t.keytype.bit_length(): - long.bit_length() -> int or long - - Number of bits necessary to represent self in binary. - >>> bin(37L) - '0b100101' - >>> (37L).bit_length() - 6 - -ida_hexrays.eamap_t.keytype.conjugate(): - Returns self, the complex conjugate of any long. - -ida_hexrays.eamap_t.keytype.denominator: - the denominator of a rational number in lowest terms - -ida_hexrays.eamap_t.keytype.imag: - the imaginary part of a complex number - -ida_hexrays.eamap_t.keytype.numerator: - the numerator of a rational number in lowest terms - -ida_hexrays.eamap_t.keytype.real: - the real part of a complex number - -ida_hexrays.eamap_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.eamap_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.eamap_t.setdefault(): - - Sets the value associated with the provided key. - - -class ida_hexrays.eamap_t.valuetype(): - - Proxy of C++ qvector<(p.cinsn_t)> class - - -ida_hexrays.eamap_t.valuetype.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.eamap_t.valuetype.append(): - - push_back(self, x) - push_back(self) -> cinsn_t *& - - -ida_hexrays.eamap_t.valuetype.at(): - - __getitem__(self, i) -> cinsn_t - - -ida_hexrays.eamap_t.valuetype.begin(): - - begin(self) -> qvector< cinsn_t * >::iterator - begin(self) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.eamap_t.valuetype.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.eamap_t.valuetype.clear(): - - clear(self) - - -ida_hexrays.eamap_t.valuetype.empty(): - - empty(self) -> bool - - -ida_hexrays.eamap_t.valuetype.end(): - - end(self) -> qvector< cinsn_t * >::iterator - end(self) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.eamap_t.valuetype.erase(): - - erase(self, it) -> qvector< cinsn_t * >::iterator - erase(self, first, last) -> qvector< cinsn_t * >::iterator - - -ida_hexrays.eamap_t.valuetype.extract(): - - extract(self) -> cinsn_t ** - - -ida_hexrays.eamap_t.valuetype.find(): - - find(self, x) -> qvector< cinsn_t * >::iterator - find(self, x) -> qvector< cinsn_t * >::const_iterator - - -ida_hexrays.eamap_t.valuetype.has(): - - has(self, x) -> bool - - -ida_hexrays.eamap_t.valuetype.inject(): - - inject(self, s, len) - - -ida_hexrays.eamap_t.valuetype.insert(): - - insert(self, it, x) -> qvector< cinsn_t * >::iterator - - -ida_hexrays.eamap_t.valuetype.pop_back(): - - pop_back(self) - - -ida_hexrays.eamap_t.valuetype.push_back(): - - push_back(self, x) - push_back(self) -> cinsn_t *& - - -ida_hexrays.eamap_t.valuetype.qclear(): - - qclear(self) - - -ida_hexrays.eamap_t.valuetype.reserve(): - - reserve(self, cnt) - - -ida_hexrays.eamap_t.valuetype.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.eamap_t.valuetype.size(): - - size(self) -> size_t - - -ida_hexrays.eamap_t.valuetype.swap(): - - swap(self, r) - - -ida_hexrays.eamap_t.valuetype.truncate(): - - truncate(self) - - -class ida_hexrays.fnum_array(): - - Proxy of C++ wrapped_array_t<(uint16,6)> class - - -ida_hexrays.fnum_array.data: - fnum_array_data_get(self) -> unsigned short (&)[6] - -class ida_hexrays.fnumber_t(): - - Proxy of C++ fnumber_t class - - -ida_hexrays.fnumber_t._print(): - - _print(self) - - -ida_hexrays.fnumber_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.fnumber_t.dereference_const_uint16(): - - dereference_const_uint16(self) -> uint16 const * - - -ida_hexrays.fnumber_t.dereference_uint16(): - - dereference_uint16(self) -> uint16 * - - -ida_hexrays.fnumber_t.fnum: - - __get_fnum(self) -> fnum_array - - -ida_hexrays.fnumber_t.nbytes: - fnumber_t_nbytes_get(self) -> int - -class ida_hexrays.gco_info_t(): - - Proxy of C++ gco_info_t class - - -ida_hexrays.gco_info_t.append_to_list(): - - append_to_list(self, list, mba) -> bool - - -ida_hexrays.gco_info_t.flags: - gco_info_t_flags_get(self) -> int - -ida_hexrays.gco_info_t.is_def(): - - is_def(self) -> bool - - -ida_hexrays.gco_info_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.gco_info_t.is_use(): - - is_use(self) -> bool - - -ida_hexrays.gco_info_t.name: - gco_info_t_name_get(self) -> qstring * - -ida_hexrays.gco_info_t.size: - gco_info_t_size_get(self) -> int - -ida_hexrays.gen_microcode(): - - gen_microcode(mbr, hf, retlist=None, flags=0, reqmat=MMAT_GLBOPT3) -> mbl_array_t - - - Generate microcode of an arbitrary code snippet - - @param mbr: snippet ranges (C++: const mba_ranges_t &) - @param hf: extended error information (if failed) (C++: - hexrays_failure_t *) - @param retlist: list of registers the snippet returns (C++: const - mlist_t *) - @param flags: bitwise combination of decompile() flags ... bits (C++: - int) - @param reqmat: required microcode maturity (C++: mba_maturity_t) - @return: pointer to the microcode, NULL if failed. - - -ida_hexrays.get_ctype_name(): - - get_ctype_name(op) -> char const * - - -ida_hexrays.get_current_operand(): - - get_current_operand(out) -> bool - - - Get the instruction operand under the cursor. This function determines - the operand that is under the cursor in the active disassembly - listing. If the operand refers to a register or stack variable, it - return true. - - @param out (C++: gco_info_t *) - - -ida_hexrays.get_float_type(): - - get_float_type(width) -> tinfo_t - - - Get a type of a floating point value with the specified width - - @param width: width of the desired type (C++: int) - @return: type info object - - -ida_hexrays.get_hexrays_version(): - - get_hexrays_version() -> char const * - - - Get decompiler version. The returned string is of the form - ... - - @return: pointer to version string. For example: "2.0.0.140605" - - -ida_hexrays.get_int_type_by_width_and_sign(): - - get_int_type_by_width_and_sign(srcwidth, sign) -> tinfo_t - - - Create a type info by width and sign. Returns a simple type (examples: - int, short) with the given width and sign. - - @param srcwidth: size of the type in bytes (C++: int) - @param sign: sign of the type (C++: type_sign_t) - - -ida_hexrays.get_member_type(): - - get_member_type(mptr, type) -> bool - - - Get type of a structure field. This function performs validity checks - of the field type. Wrong types are rejected. - - @param mptr: structure field (C++: const member_t *) - @param type: pointer to the variable where the type is returned. This - parameter can be NULL. (C++: tinfo_t *) - @return: false if failed - - -ida_hexrays.get_merror_desc(): - - get_merror_desc(code, mba) -> ea_t - - - Get textual description of an error code - - @param code: Microcode error codes (C++: merror_t) - @param mba: the microcode array (C++: mbl_array_t *) - @return: the error address - - -ida_hexrays.get_mreg_name(): - - get_mreg_name(bit, width, ud=None) -> int - - -ida_hexrays.get_op_signness(): - - get_op_signness(op) -> type_sign_t - - - Get operator sign. Meaningful for sign-dependent operators, like - cot_sdiv. - - - @param op (C++: ctype_t) - - -ida_hexrays.get_signed_mcode(): - - get_signed_mcode(code) -> mcode_t - - -ida_hexrays.get_temp_regs(): - - get_temp_regs() -> mlist_t - - - Get list of temporary registers. Tempregs are temporary registers that - are used during code generation. They do not map to regular processor - registers. They are used only to store temporary values during - execution of one instruction. Tempregs may not be used to pass a value - from one block to another. In other words, at the end of a block all - tempregs must be dead. - - -ida_hexrays.get_type(): - - get_type(id, tif, guess) -> bool - - - Get a global type. Global types are types of addressable objects and - struct/union/enum types - - @param id: address or id of the object (C++: uval_t) - @param tif: buffer for the answer (C++: tinfo_t *) - @param guess: what kind of types to consider (C++: type_source_t) - @return: success - - -ida_hexrays.get_unk_type(): - - get_unk_type(size) -> tinfo_t - - - Create a partial type info by width. Returns a partially defined type - (examples: _DWORD, _BYTE) with the given width. - - @param size: size of the type in bytes (C++: int) - - -ida_hexrays.get_unsigned_mcode(): - - get_unsigned_mcode(code) -> mcode_t - - -ida_hexrays.get_widget_vdui(): - - get_widget_vdui(f) -> vdui_t - - - Get the 'vdui_t' instance associated to the TWidget - - @param f: pointer to window (C++: TWidget *) - @return: a vdui_t *, or NULL - - -ida_hexrays.getb_reginsn(): - - getb_reginsn(ins) -> minsn_t - - - Skip assertions backward. - - - @param ins (C++: const minsn_t *) - - -ida_hexrays.getf_reginsn(): - - getf_reginsn(ins) -> minsn_t - - - Skip assertions forward. - - - @param ins (C++: const minsn_t *) - - -class ida_hexrays.graph_chains_t(): - - Proxy of C++ graph_chains_t class - - -ida_hexrays.graph_chains_t.acquire(): - - acquire(self) - - -ida_hexrays.graph_chains_t.at(): - - at(self, _idx) -> block_chains_t - - -ida_hexrays.graph_chains_t.begin(): - - begin(self) -> block_chains_t - begin(self) -> block_chains_t - - -ida_hexrays.graph_chains_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.graph_chains_t.clear(): - - clear(self) - - -ida_hexrays.graph_chains_t.empty(): - - empty(self) -> bool - - -ida_hexrays.graph_chains_t.end(): - - end(self) -> block_chains_t - end(self) -> block_chains_t - - -ida_hexrays.graph_chains_t.erase(): - - erase(self, it) -> block_chains_t - erase(self, first, last) -> block_chains_t - - -ida_hexrays.graph_chains_t.extract(): - - extract(self) -> block_chains_t - - -ida_hexrays.graph_chains_t.for_all_chains(): - - for_all_chains(self, cv, gca_flags) -> int - - -ida_hexrays.graph_chains_t.grow(): - - grow(self, x=block_chains_t()) - - -ida_hexrays.graph_chains_t.inject(): - - inject(self, s, len) - - -ida_hexrays.graph_chains_t.insert(): - - insert(self, it, x) -> block_chains_t - - -ida_hexrays.graph_chains_t.is_locked(): - - is_locked(self) -> bool - - -ida_hexrays.graph_chains_t.pop_back(): - - pop_back(self) - - -ida_hexrays.graph_chains_t.push_back(): - - push_back(self, x) - push_back(self) -> block_chains_t - - -ida_hexrays.graph_chains_t.qclear(): - - qclear(self) - - -ida_hexrays.graph_chains_t.release(): - - release(self) - - -ida_hexrays.graph_chains_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.graph_chains_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.graph_chains_t.size(): - - size(self) -> size_t - - -ida_hexrays.graph_chains_t.swap(): - - swap(self, r) - - -ida_hexrays.graph_chains_t.truncate(): - - truncate(self) - - -ida_hexrays.has_cached_cfunc(): - - has_cached_cfunc(ea) -> bool - - - Do we have a cached decompilation result for 'ea'? - - - @param ea (C++: ea_t) - - -ida_hexrays.hexrays_alloc(): - - hexrays_alloc(size) -> void * - - -class ida_hexrays.hexrays_failure_t(): - - Proxy of C++ hexrays_failure_t class - - -ida_hexrays.hexrays_failure_t.code: - hexrays_failure_t_code_get(self) -> merror_t - -ida_hexrays.hexrays_failure_t.desc(): - - desc(self) -> qstring - - -ida_hexrays.hexrays_failure_t.errea: - hexrays_failure_t_errea_get(self) -> ea_t - -ida_hexrays.hexrays_failure_t.str: - hexrays_failure_t_str_get(self) -> qstring * - -ida_hexrays.hexrays_free(): - - hexrays_free(ptr) - - -class ida_hexrays.hexwarn_t(): - - Proxy of C++ hexwarn_t class - - -ida_hexrays.hexwarn_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.hexwarn_t.ea: - hexwarn_t_ea_get(self) -> ea_t - -ida_hexrays.hexwarn_t.id: - hexwarn_t_id_get(self) -> warnid_t - -ida_hexrays.hexwarn_t.text: - hexwarn_t_text_get(self) -> qstring * - -class ida_hexrays.hexwarns_t(): - - Proxy of C++ qvector<(hexwarn_t)> class - - -ida_hexrays.hexwarns_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.hexwarns_t.append(): - - push_back(self, x) - push_back(self) -> hexwarn_t - - -ida_hexrays.hexwarns_t.at(): - - __getitem__(self, i) -> hexwarn_t - - -ida_hexrays.hexwarns_t.begin(): - - begin(self) -> hexwarn_t - begin(self) -> hexwarn_t - - -ida_hexrays.hexwarns_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.hexwarns_t.clear(): - - clear(self) - - -ida_hexrays.hexwarns_t.empty(): - - empty(self) -> bool - - -ida_hexrays.hexwarns_t.end(): - - end(self) -> hexwarn_t - end(self) -> hexwarn_t - - -ida_hexrays.hexwarns_t.erase(): - - erase(self, it) -> hexwarn_t - erase(self, first, last) -> hexwarn_t - - -ida_hexrays.hexwarns_t.extract(): - - extract(self) -> hexwarn_t - - -ida_hexrays.hexwarns_t.find(): - - find(self, x) -> hexwarn_t - find(self, x) -> hexwarn_t - - -ida_hexrays.hexwarns_t.grow(): - - grow(self, x=hexwarn_t()) - - -ida_hexrays.hexwarns_t.has(): - - has(self, x) -> bool - - -ida_hexrays.hexwarns_t.inject(): - - inject(self, s, len) - - -ida_hexrays.hexwarns_t.insert(): - - insert(self, it, x) -> hexwarn_t - - -ida_hexrays.hexwarns_t.pop_back(): - - pop_back(self) - - -ida_hexrays.hexwarns_t.push_back(): - - push_back(self, x) - push_back(self) -> hexwarn_t - - -ida_hexrays.hexwarns_t.qclear(): - - qclear(self) - - -ida_hexrays.hexwarns_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.hexwarns_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.hexwarns_t.size(): - - size(self) -> size_t - - -ida_hexrays.hexwarns_t.swap(): - - swap(self, r) - - -ida_hexrays.hexwarns_t.truncate(): - - truncate(self) - - -class ida_hexrays.history_item_t(): - - Proxy of C++ history_item_t class - - -ida_hexrays.history_item_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.history_item_t.ea: - history_item_t_ea_get(self) -> ea_t - -ida_hexrays.history_item_t.end: - history_item_t_end_get(self) -> ea_t - -ida_hexrays.history_item_t.in_ctree(): - - in_ctree(self, hdrlines) -> bool - - -ida_hexrays.history_item_t.lnnum: - ctext_position_t_lnnum_get(self) -> int - -ida_hexrays.history_item_t.x: - ctext_position_t_x_get(self) -> int - -ida_hexrays.history_item_t.y: - ctext_position_t_y_get(self) -> int - -class ida_hexrays.history_t(): - - Proxy of C++ qstack<(history_item_t)> class - - -ida_hexrays.history_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.history_t.append(): - - push_back(self, x) - push_back(self) -> history_item_t - - -ida_hexrays.history_t.at(): - - __getitem__(self, i) -> history_item_t - - -ida_hexrays.history_t.begin(): - - begin(self) -> history_item_t - begin(self) -> history_item_t - - -ida_hexrays.history_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.history_t.clear(): - - clear(self) - - -ida_hexrays.history_t.empty(): - - empty(self) -> bool - - -ida_hexrays.history_t.end(): - - end(self) -> history_item_t - end(self) -> history_item_t - - -ida_hexrays.history_t.erase(): - - erase(self, it) -> history_item_t - erase(self, first, last) -> history_item_t - - -ida_hexrays.history_t.extract(): - - extract(self) -> history_item_t - - -ida_hexrays.history_t.find(): - - find(self, x) -> history_item_t - find(self, x) -> history_item_t - - -ida_hexrays.history_t.grow(): - - grow(self, x=history_item_t()) - - -ida_hexrays.history_t.has(): - - has(self, x) -> bool - - -ida_hexrays.history_t.inject(): - - inject(self, s, len) - - -ida_hexrays.history_t.insert(): - - insert(self, it, x) -> history_item_t - - -ida_hexrays.history_t.pop(): - - pop(self) -> history_item_t - - -ida_hexrays.history_t.pop_back(): - - pop_back(self) - - -ida_hexrays.history_t.push(): - - push(self, v) - - -ida_hexrays.history_t.push_back(): - - push_back(self, x) - push_back(self) -> history_item_t - - -ida_hexrays.history_t.qclear(): - - qclear(self) - - -ida_hexrays.history_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.history_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.history_t.size(): - - size(self) -> size_t - - -ida_hexrays.history_t.swap(): - - swap(self, r) - - -ida_hexrays.history_t.top(): - - top(self) -> history_item_t - top(self) -> history_item_t - - -ida_hexrays.history_t.truncate(): - - truncate(self) - - -ida_hexrays.init_hexrays_plugin(): - - init_hexrays_plugin(flags=0) -> bool - - - Initialize your plugin for hex-rays decompiler. This function must be - called before calling any other decompiler function. It initializes - the pointer to the dispatcher. - - @param flags: reserved, must be 0 (C++: int) - @return: true if the decompiler exists and the dispatcher pointer is - ready to use. - - -ida_hexrays.install_hexrays_callback(): - Deprecated. Please use Hexrays_Hooks instead - -ida_hexrays.install_microcode_filter(): - - install_microcode_filter(filter, install=True) - - - register/unregister non-standard microcode generator - - @param filter: - microcode generator object (C++: microcode_filter_t - *) - @param install: - TRUE - register the object, FALSE - unregister (C++: - bool) - - -ida_hexrays.is_additive(): - - is_additive(op) -> bool - - - Is additive operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_allowed_on_small_struni(): - - accepts_small_udts(op) -> bool - - - Is the operator allowed on small structure or union? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_assignment(): - - is_assignment(op) -> bool - - - Is assignment operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_binary(): - - is_binary(op) -> bool - - - Is binary operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_bitop(): - - is_bitop(op) -> bool - - - Is bit related operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_bool_type(): - - is_bool_type(type) -> bool - - - Is a boolean type? - - @param type (C++: const tinfo_t &) - @return: true if the type is a boolean type - - -ida_hexrays.is_break_consumer(): - - is_break_consumer(op) -> bool - - - Does a break statement influence the specified statement code? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_commutative(): - - is_commutative(op) -> bool - - - Is commutative operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_inplace_def(): - - is_inplace_def(type) -> bool - - - Is struct/union/enum definition (not declaration)? - - - @param type (C++: const tinfo_t &) - - -ida_hexrays.is_kreg(): - - is_kreg(r) -> bool - - - Is a kernel register? - - - @param r (C++: mreg_t) - - -ida_hexrays.is_logical(): - - is_logical(op) -> bool - - - Is logical operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_loop(): - - is_loop(op) -> bool - - - Is loop statement code? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_lvalue(): - - is_lvalue(op) -> bool - - - Is Lvalue operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_may_access(): - - is_may_access(maymust) -> bool - - -ida_hexrays.is_mcode_addsub(): - - is_mcode_addsub(mcode) -> bool - - -ida_hexrays.is_mcode_call(): - - is_mcode_call(mcode) -> bool - - -ida_hexrays.is_mcode_commutative(): - - is_mcode_commutative(mcode) -> bool - - -ida_hexrays.is_mcode_convertible_to_jmp(): - - is_mcode_convertible_to_jmp(mcode) -> bool - - -ida_hexrays.is_mcode_convertible_to_set(): - - is_mcode_convertible_to_set(mcode) -> bool - - -ida_hexrays.is_mcode_divmod(): - - is_mcode_divmod(op) -> bool - - -ida_hexrays.is_mcode_fpu(): - - is_mcode_fpu(mcode) -> bool - - -ida_hexrays.is_mcode_j1(): - - is_mcode_j1(mcode) -> bool - - -ida_hexrays.is_mcode_jcond(): - - is_mcode_jcond(mcode) -> bool - - -ida_hexrays.is_mcode_propagatable(): - - is_mcode_propagatable(mcode) -> bool - - - May opcode be propagated? Such opcodes can be used in sub-instructions - (nested instructions) There is a handful of non-propagatable opcodes, - like jumps, ret, nop, etc All other regular opcodes are propagatable - and may appear in a nested instruction. - - @param mcode (C++: mcode_t) - - -ida_hexrays.is_mcode_set(): - - is_mcode_set(mcode) -> bool - - -ida_hexrays.is_mcode_set1(): - - is_mcode_set1(mcode) -> bool - - -ida_hexrays.is_mcode_shift(): - - is_mcode_shift(mcode) -> bool - - -ida_hexrays.is_mcode_xdsu(): - - is_mcode_xdsu(mcode) -> bool - - -ida_hexrays.is_multiplicative(): - - is_multiplicative(op) -> bool - - - Is multiplicative operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_nonbool_type(): - - is_nonbool_type(type) -> bool - - - Is definitely a non-boolean type? - - @param type (C++: const tinfo_t &) - @return: true if the type is a non-boolean type (non bool and well - defined) - - -ida_hexrays.is_paf(): - - is_paf(t) -> bool - - - Is a pointer, array, or function type? - - - @param t (C++: type_t) - - -ida_hexrays.is_prepost(): - - is_prepost(op) -> bool - - - Is pre/post increment/decrement operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_ptr_or_array(): - - is_ptr_or_array(t) -> bool - - - Is a pointer or array type? - - - @param t (C++: type_t) - - -ida_hexrays.is_relational(): - - is_relational(op) -> bool - - - Is comparison operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_signed_mcode(): - - is_signed_mcode(code) -> bool - - -ida_hexrays.is_small_struni(): - - is_small_udt(tif) -> bool - - - Is a small structure or union? - - @param tif (C++: const tinfo_t &) - @return: true if the type is a small UDT (user defined type). Small - UDTs fit into a register (or pair or registers) as a rule. - - -ida_hexrays.is_small_udt(): - - is_small_udt(tif) -> bool - - - Is a small structure or union? - - @param tif (C++: const tinfo_t &) - @return: true if the type is a small UDT (user defined type). Small - UDTs fit into a register (or pair or registers) as a rule. - - -ida_hexrays.is_type_correct(): - - is_type_correct(ptr) -> bool - - - Verify a type string. - - @param ptr (C++: const type_t *) - @return: true if type string is correct - - -ida_hexrays.is_unary(): - - is_unary(op) -> bool - - - Is unary operator? - - - @param op (C++: ctype_t) - - -ida_hexrays.is_unsigned_mcode(): - - is_unsigned_mcode(code) -> bool - - -class ida_hexrays.ivl_t(): - - Proxy of C++ ivl_t class - - -ida_hexrays.ivl_t.clear(): - - clear(self) - - -ida_hexrays.ivl_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.ivl_t.contains(): - - contains(self, off2) -> bool - - -ida_hexrays.ivl_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.ivl_t.empty(): - - empty(self) -> bool - - -ida_hexrays.ivl_t.end(): - - end(self) -> unsigned-ea-like-numeric-type - - -ida_hexrays.ivl_t.extend_to_cover(): - - extend_to_cover(self, r) -> bool - - -ida_hexrays.ivl_t.includes(): - - includes(self, ivl) -> bool - - -ida_hexrays.ivl_t.intersect(): - - intersect(self, r) - - -ida_hexrays.ivl_t.last(): - - last(self) -> unsigned-ea-like-numeric-type - - -ida_hexrays.ivl_t.off: - uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.ivl_t.overlap(): - - overlap(self, ivl) -> bool - - -ida_hexrays.ivl_t.size: - uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.ivl_t.valid(): - - valid(self) -> bool - - -class ida_hexrays.ivl_with_name_t(): - - Proxy of C++ ivl_with_name_t class - - -ida_hexrays.ivl_with_name_t.ivl: - ivl_with_name_t_ivl_get(self) -> ivl_t - -ida_hexrays.ivl_with_name_t.part: - ivl_with_name_t_part_get(self) -> char const * - -ida_hexrays.ivl_with_name_t.whole: - ivl_with_name_t_whole_get(self) -> char const * - -class ida_hexrays.ivlset_t(): - - Proxy of C++ ivlset_t class - - -ida_hexrays.ivlset_t._print(): - - _print(self) - - -ida_hexrays.ivlset_t.add(): - - add(self, ivl) -> bool - add(self, ea, size) -> bool - add(self, ivs) -> bool - - -ida_hexrays.ivlset_t.addmasked(): - - addmasked(self, ivs, mask) -> bool - - -ida_hexrays.ivlset_t.all_values(): - - all_values(self) -> bool - - -ida_hexrays.ivlset_t.begin(): - - begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator - begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.ivlset_t.clear(): - - clear(self) - - -ida_hexrays.ivlset_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.ivlset_t.contains(): - - contains(self, off) -> bool - - -ida_hexrays.ivlset_t.count(): - - count(self) -> asize_t - - -ida_hexrays.ivlset_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.ivlset_t.empty(): - - empty(self) -> bool - - -ida_hexrays.ivlset_t.end(): - - end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator - end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.ivlset_t.getivl(): - - getivl(self, idx) -> ivl_t - - -ida_hexrays.ivlset_t.has_common(): - - has_common(self, ivl, strict=False) -> bool - has_common(self, ivs) -> bool - - -ida_hexrays.ivlset_t.includes(): - - includes(self, ivs) -> bool - - -ida_hexrays.ivlset_t.intersect(): - - intersect(self, ivs) -> bool - - -ida_hexrays.ivlset_t.lastivl(): - - lastivl(self) -> ivl_t - - -ida_hexrays.ivlset_t.nivls(): - - nivls(self) -> size_t - - -ida_hexrays.ivlset_t.qclear(): - - qclear(self) - - -ida_hexrays.ivlset_t.set_all_values(): - - set_all_values(self) - - -ida_hexrays.ivlset_t.single_value(): - - single_value(self, v) -> bool - - -ida_hexrays.ivlset_t.sub(): - - sub(self, ivl) -> bool - sub(self, ea, size) -> bool - sub(self, ivs) -> bool - - -ida_hexrays.ivlset_t.swap(): - - swap(self, r) - - -ida_hexrays.jcnd2set(): - - jcnd2set(code) -> mcode_t - - -ida_hexrays.lexcompare(): - - lexcompare(a, b) -> int - - -class ida_hexrays.lvar_locator_t(): - - Proxy of C++ lvar_locator_t class - - -ida_hexrays.lvar_locator_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.lvar_locator_t.defea: - lvar_locator_t_defea_get(self) -> ea_t - -ida_hexrays.lvar_locator_t.get_reg1(): - - get_reg1(self) -> mreg_t - - -ida_hexrays.lvar_locator_t.get_reg2(): - - get_reg2(self) -> mreg_t - - -ida_hexrays.lvar_locator_t.get_scattered(): - - get_scattered(self) -> scattered_aloc_t - get_scattered(self) -> scattered_aloc_t - - -ida_hexrays.lvar_locator_t.get_stkoff(): - - get_stkoff(self) -> sval_t - - -ida_hexrays.lvar_locator_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_hexrays.lvar_locator_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_hexrays.lvar_locator_t.is_reg_var(): - - is_reg_var(self) -> bool - - -ida_hexrays.lvar_locator_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.lvar_locator_t.is_stk_var(): - - is_stk_var(self) -> bool - - -ida_hexrays.lvar_locator_t.location: - lvar_locator_t_location_get(self) -> vdloc_t - -ida_hexrays.lvar_mapping_begin(): - - lvar_mapping_begin(map) -> lvar_mapping_iterator_t - - - Get iterator pointing to the beginning of lvar_mapping_t. - - - @param map (C++: const lvar_mapping_t *) - - -ida_hexrays.lvar_mapping_clear(): - - lvar_mapping_clear(map) - - - Clear lvar_mapping_t. - - - @param map (C++: lvar_mapping_t *) - - -ida_hexrays.lvar_mapping_end(): - - lvar_mapping_end(map) -> lvar_mapping_iterator_t - - - Get iterator pointing to the end of lvar_mapping_t. - - - @param map (C++: const lvar_mapping_t *) - - -ida_hexrays.lvar_mapping_erase(): - - lvar_mapping_erase(map, p) - - - Erase current element from lvar_mapping_t. - - - @param map (C++: lvar_mapping_t *) - @param p (C++: lvar_mapping_iterator_t) - - -ida_hexrays.lvar_mapping_find(): - - lvar_mapping_find(map, key) -> lvar_mapping_iterator_t - - - Find the specified key in lvar_mapping_t. - - - @param map (C++: const lvar_mapping_t *) - @param key (C++: const lvar_locator_t &) - - -ida_hexrays.lvar_mapping_first(): - - lvar_mapping_first(p) -> lvar_locator_t - - - Get reference to the current map key. - - - @param p (C++: lvar_mapping_iterator_t) - - -ida_hexrays.lvar_mapping_free(): - - lvar_mapping_free(map) - - - Delete lvar_mapping_t instance. - - - @param map (C++: lvar_mapping_t *) - - -ida_hexrays.lvar_mapping_insert(): - - lvar_mapping_insert(map, key, val) -> lvar_mapping_iterator_t - - - Insert new ( 'lvar_locator_t' , 'lvar_locator_t' ) pair into - lvar_mapping_t. - - - @param map (C++: lvar_mapping_t *) - @param key (C++: const lvar_locator_t &) - @param val (C++: const lvar_locator_t &) - - -class ida_hexrays.lvar_mapping_iterator_t(): - - Proxy of C++ lvar_mapping_iterator_t class - - -ida_hexrays.lvar_mapping_iterator_t.x: - lvar_mapping_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.lvar_mapping_new(): - - lvar_mapping_new() -> lvar_mapping_t - - - Create a new lvar_mapping_t instance. - - -ida_hexrays.lvar_mapping_next(): - - lvar_mapping_next(p) -> lvar_mapping_iterator_t - - - Move to the next element. - - - @param p (C++: lvar_mapping_iterator_t) - - -ida_hexrays.lvar_mapping_prev(): - - lvar_mapping_prev(p) -> lvar_mapping_iterator_t - - - Move to the previous element. - - - @param p (C++: lvar_mapping_iterator_t) - - -ida_hexrays.lvar_mapping_second(): - - lvar_mapping_second(p) -> lvar_locator_t - - - Get reference to the current map value. - - - @param p (C++: lvar_mapping_iterator_t) - - -ida_hexrays.lvar_mapping_size(): - - lvar_mapping_size(map) -> size_t - - - Get size of lvar_mapping_t. - - - @param map (C++: lvar_mapping_t *) - - -class ida_hexrays.lvar_mapping_t(): - - Proxy of C++ std::map<(lvar_locator_t,lvar_locator_t)> class - - -ida_hexrays.lvar_mapping_t.at(): - - at(self, _Keyval) -> lvar_locator_t - - -ida_hexrays.lvar_mapping_t.size(): - - size(self) -> size_t - - -class ida_hexrays.lvar_ref_t(): - - Proxy of C++ lvar_ref_t class - - -ida_hexrays.lvar_ref_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.lvar_ref_t.idx: - lvar_ref_t_idx_get(self) -> int - -ida_hexrays.lvar_ref_t.mba: - lvar_ref_t_mba_get(self) -> mbl_array_t - -ida_hexrays.lvar_ref_t.off: - lvar_ref_t_off_get(self) -> sval_t - -ida_hexrays.lvar_ref_t.swap(): - - swap(self, r) - - -ida_hexrays.lvar_ref_t.var(): - - var(self) -> lvar_t - - -class ida_hexrays.lvar_saved_info_t(): - - Proxy of C++ lvar_saved_info_t class - - -ida_hexrays.lvar_saved_info_t.clear_keep(): - - clear_keep(self) - - -ida_hexrays.lvar_saved_info_t.clr_forced_lvar(): - - clr_forced_lvar(self) - - -ida_hexrays.lvar_saved_info_t.clr_noptr_lvar(): - - clr_noptr_lvar(self) - - -ida_hexrays.lvar_saved_info_t.cmt: - lvar_saved_info_t_cmt_get(self) -> qstring * - -ida_hexrays.lvar_saved_info_t.flags: - lvar_saved_info_t_flags_get(self) -> int - -ida_hexrays.lvar_saved_info_t.has_info(): - - has_info(self) -> bool - - -ida_hexrays.lvar_saved_info_t.is_forced_lvar(): - - is_forced_lvar(self) -> bool - - -ida_hexrays.lvar_saved_info_t.is_kept(): - - is_kept(self) -> bool - - -ida_hexrays.lvar_saved_info_t.is_noptr_lvar(): - - is_noptr_lvar(self) -> bool - - -ida_hexrays.lvar_saved_info_t.ll: - lvar_saved_info_t_ll_get(self) -> lvar_locator_t - -ida_hexrays.lvar_saved_info_t.name: - lvar_saved_info_t_name_get(self) -> qstring * - -ida_hexrays.lvar_saved_info_t.set_forced_lvar(): - - set_forced_lvar(self) - - -ida_hexrays.lvar_saved_info_t.set_keep(): - - set_keep(self) - - -ida_hexrays.lvar_saved_info_t.set_noptr_lvar(): - - set_noptr_lvar(self) - - -ida_hexrays.lvar_saved_info_t.size: - lvar_saved_info_t_size_get(self) -> ssize_t - -ida_hexrays.lvar_saved_info_t.type: - lvar_saved_info_t_type_get(self) -> tinfo_t - -class ida_hexrays.lvar_saved_infos_t(): - - Proxy of C++ qvector<(lvar_saved_info_t)> class - - -ida_hexrays.lvar_saved_infos_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.lvar_saved_infos_t.append(): - - push_back(self, x) - push_back(self) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.at(): - - __getitem__(self, i) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.begin(): - - begin(self) -> lvar_saved_info_t - begin(self) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.lvar_saved_infos_t.clear(): - - clear(self) - - -ida_hexrays.lvar_saved_infos_t.empty(): - - empty(self) -> bool - - -ida_hexrays.lvar_saved_infos_t.end(): - - end(self) -> lvar_saved_info_t - end(self) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.erase(): - - erase(self, it) -> lvar_saved_info_t - erase(self, first, last) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.extract(): - - extract(self) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.find(): - - find(self, x) -> lvar_saved_info_t - find(self, x) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.grow(): - - grow(self, x=lvar_saved_info_t()) - - -ida_hexrays.lvar_saved_infos_t.has(): - - has(self, x) -> bool - - -ida_hexrays.lvar_saved_infos_t.inject(): - - inject(self, s, len) - - -ida_hexrays.lvar_saved_infos_t.insert(): - - insert(self, it, x) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.pop_back(): - - pop_back(self) - - -ida_hexrays.lvar_saved_infos_t.push_back(): - - push_back(self, x) - push_back(self) -> lvar_saved_info_t - - -ida_hexrays.lvar_saved_infos_t.qclear(): - - qclear(self) - - -ida_hexrays.lvar_saved_infos_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.lvar_saved_infos_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.lvar_saved_infos_t.size(): - - size(self) -> size_t - - -ida_hexrays.lvar_saved_infos_t.swap(): - - swap(self, r) - - -ida_hexrays.lvar_saved_infos_t.truncate(): - - truncate(self) - - -class ida_hexrays.lvar_t(): - - Proxy of C++ lvar_t class - - -ida_hexrays.lvar_t.accepts_type(): - - accepts_type(self, t, may_change_thisarg=False) -> bool - - -ida_hexrays.lvar_t.append_list(): - - append_list(self, lst, pad_if_scattered=False) - - -ida_hexrays.lvar_t.clear_used(): - - clear_used(self) - - -ida_hexrays.lvar_t.clr_arg_var(): - - clr_arg_var(self) - - -ida_hexrays.lvar_t.clr_dummy_arg(): - - clr_dummy_arg(self) - - -ida_hexrays.lvar_t.clr_fake_var(): - - clr_fake_var(self) - - -ida_hexrays.lvar_t.clr_floating_var(): - - clr_floating_var(self) - - -ida_hexrays.lvar_t.clr_forced_var(): - - clr_forced_var(self) - - -ida_hexrays.lvar_t.clr_mapdst_var(): - - clr_mapdst_var(self) - - -ida_hexrays.lvar_t.clr_mreg_done(): - - clr_mreg_done(self) - - -ida_hexrays.lvar_t.clr_noptr_var(): - - clr_noptr_var(self) - - -ida_hexrays.lvar_t.clr_notarg(): - - clr_notarg(self) - - -ida_hexrays.lvar_t.clr_overlapped_var(): - - clr_overlapped_var(self) - - -ida_hexrays.lvar_t.clr_spoiled_var(): - - clr_spoiled_var(self) - - -ida_hexrays.lvar_t.clr_thisarg(): - - clr_thisarg(self) - - -ida_hexrays.lvar_t.clr_unknown_width(): - - clr_unknown_width(self) - - -ida_hexrays.lvar_t.clr_user_info(): - - clr_user_info(self) - - -ida_hexrays.lvar_t.clr_user_name(): - - clr_user_name(self) - - -ida_hexrays.lvar_t.clr_user_type(): - - clr_user_type(self) - - -ida_hexrays.lvar_t.cmt: - lvar_t_cmt_get(self) -> qstring * - -ida_hexrays.lvar_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.lvar_t.defblk: - lvar_t_defblk_get(self) -> int - -ida_hexrays.lvar_t.defea: - lvar_locator_t_defea_get(self) -> ea_t - -ida_hexrays.lvar_t.divisor: - lvar_t_divisor_get(self) -> uint64 - -ida_hexrays.lvar_t.get_reg1(): - - get_reg1(self) -> mreg_t - - -ida_hexrays.lvar_t.get_reg2(): - - get_reg2(self) -> mreg_t - - -ida_hexrays.lvar_t.get_scattered(): - - get_scattered(self) -> scattered_aloc_t - get_scattered(self) -> scattered_aloc_t - - -ida_hexrays.lvar_t.get_stkoff(): - - get_stkoff(self) -> sval_t - - -ida_hexrays.lvar_t.has_common(): - - has_common(self, v) -> bool - - -ida_hexrays.lvar_t.has_common_bit(): - - has_common_bit(self, loc, width2) -> bool - - -ida_hexrays.lvar_t.has_nice_name: - - has_nice_name(self) -> bool - - -ida_hexrays.lvar_t.has_regname(): - - has_regname(self) -> bool - - -ida_hexrays.lvar_t.has_user_info: - - has_user_info(self) -> bool - - -ida_hexrays.lvar_t.has_user_name: - - has_user_name(self) -> bool - - -ida_hexrays.lvar_t.has_user_type: - - has_user_type(self) -> bool - - -ida_hexrays.lvar_t.is_aliasable(): - - is_aliasable(self, mba) -> bool - - -ida_hexrays.lvar_t.is_arg_var: - - is_arg_var(self) -> bool - - -ida_hexrays.lvar_t.is_dummy_arg(): - - is_dummy_arg(self) -> bool - - -ida_hexrays.lvar_t.is_fake_var: - - is_fake_var(self) -> bool - - -ida_hexrays.lvar_t.is_floating_var: - - is_floating_var(self) -> bool - - -ida_hexrays.lvar_t.is_forced_var(): - - is_forced_var(self) -> bool - - -ida_hexrays.lvar_t.is_mapdst_var: - - is_mapdst_var(self) -> bool - - -ida_hexrays.lvar_t.is_noptr_var(): - - is_noptr_var(self) -> bool - - -ida_hexrays.lvar_t.is_notarg(): - - is_notarg(self) -> bool - - -ida_hexrays.lvar_t.is_overlapped_var: - - is_overlapped_var(self) -> bool - - -ida_hexrays.lvar_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_hexrays.lvar_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_hexrays.lvar_t.is_reg_var(): - - is_reg_var(self) -> bool - - -ida_hexrays.lvar_t.is_result_var: - - is_result_var(self) -> bool - - -ida_hexrays.lvar_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.lvar_t.is_spoiled_var: - - is_spoiled_var(self) -> bool - - -ida_hexrays.lvar_t.is_stk_var(): - - is_stk_var(self) -> bool - - -ida_hexrays.lvar_t.is_thisarg(): - - is_thisarg(self) -> bool - - -ida_hexrays.lvar_t.is_unknown_width: - - is_unknown_width(self) -> bool - - -ida_hexrays.lvar_t.location: - lvar_locator_t_location_get(self) -> vdloc_t - -ida_hexrays.lvar_t.mreg_done: - - mreg_done(self) -> bool - - -ida_hexrays.lvar_t.name: - lvar_t_name_get(self) -> qstring * - -ida_hexrays.lvar_t.set_arg_var(): - - set_arg_var(self) - - -ida_hexrays.lvar_t.set_dummy_arg(): - - set_dummy_arg(self) - - -ida_hexrays.lvar_t.set_fake_var(): - - set_fake_var(self) - - -ida_hexrays.lvar_t.set_final_lvar_type(): - - set_final_lvar_type(self, t) - - -ida_hexrays.lvar_t.set_floating_var(): - - set_floating_var(self) - - -ida_hexrays.lvar_t.set_forced_var(): - - set_forced_var(self) - - -ida_hexrays.lvar_t.set_lvar_type(): - - set_lvar_type(self, t, may_fail=False) -> bool - - -ida_hexrays.lvar_t.set_mapdst_var(): - - set_mapdst_var(self) - - -ida_hexrays.lvar_t.set_mreg_done(): - - set_mreg_done(self) - - -ida_hexrays.lvar_t.set_non_typed(): - - set_non_typed(self) - - -ida_hexrays.lvar_t.set_noptr_var(): - - set_noptr_var(self) - - -ida_hexrays.lvar_t.set_notarg(): - - set_notarg(self) - - -ida_hexrays.lvar_t.set_overlapped_var(): - - set_overlapped_var(self) - - -ida_hexrays.lvar_t.set_spoiled_var(): - - set_spoiled_var(self) - - -ida_hexrays.lvar_t.set_thisarg(): - - set_thisarg(self) - - -ida_hexrays.lvar_t.set_typed(): - - set_typed(self) - - -ida_hexrays.lvar_t.set_unknown_width(): - - set_unknown_width(self) - - -ida_hexrays.lvar_t.set_used(): - - set_used(self) - - -ida_hexrays.lvar_t.set_user_name(): - - set_user_name(self) - - -ida_hexrays.lvar_t.set_user_type(): - - set_user_type(self) - - -ida_hexrays.lvar_t.set_width(): - - set_width(self, w, svw_flags=0) -> bool - - -ida_hexrays.lvar_t.tif: - lvar_t_tif_get(self) -> tinfo_t - -ida_hexrays.lvar_t.type(): - - type(self) -> tinfo_t - type(self) -> tinfo_t - - -ida_hexrays.lvar_t.typed: - - typed(self) -> bool - - -ida_hexrays.lvar_t.used: - - used(self) -> bool - - -ida_hexrays.lvar_t.width: - lvar_t_width_get(self) -> int - -class ida_hexrays.lvar_uservec_t(): - - Proxy of C++ lvar_uservec_t class - - -ida_hexrays.lvar_uservec_t.clear(): - - clear(self) - - -ida_hexrays.lvar_uservec_t.find_info(): - - find_info(self, vloc) -> lvar_saved_info_t - - -ida_hexrays.lvar_uservec_t.keep_info(): - - keep_info(self, v) - - -ida_hexrays.lvar_uservec_t.lmaps: - lvar_uservec_t_lmaps_get(self) -> lvar_mapping_t - -ida_hexrays.lvar_uservec_t.lvvec: - lvar_uservec_t_lvvec_get(self) -> lvar_saved_infos_t - -ida_hexrays.lvar_uservec_t.stkoff_delta: - lvar_uservec_t_stkoff_delta_get(self) -> uval_t - -ida_hexrays.lvar_uservec_t.swap(): - - swap(self, r) - - -ida_hexrays.lvar_uservec_t.ulv_flags: - lvar_uservec_t_ulv_flags_get(self) -> int - -class ida_hexrays.lvars_t(): - - Proxy of C++ lvars_t class - - -ida_hexrays.lvars_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.lvars_t.append(): - - push_back(self, x) - push_back(self) -> lvar_t - - -ida_hexrays.lvars_t.at(): - - __getitem__(self, i) -> lvar_t - - -ida_hexrays.lvars_t.begin(): - - begin(self) -> lvar_t - begin(self) -> lvar_t - - -ida_hexrays.lvars_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.lvars_t.clear(): - - clear(self) - - -ida_hexrays.lvars_t.empty(): - - empty(self) -> bool - - -ida_hexrays.lvars_t.end(): - - end(self) -> lvar_t - end(self) -> lvar_t - - -ida_hexrays.lvars_t.erase(): - - erase(self, it) -> lvar_t - erase(self, first, last) -> lvar_t - - -ida_hexrays.lvars_t.extract(): - - extract(self) -> lvar_t - - -ida_hexrays.lvars_t.find(): - - find(self, ll) -> lvar_t - - -ida_hexrays.lvars_t.find_input_lvar(): - - find_input_lvar(self, argloc, _size) -> int - - -ida_hexrays.lvars_t.find_lvar(): - - find_lvar(self, location, width, defblk=-1) -> int - - -ida_hexrays.lvars_t.find_stkvar(): - - find_stkvar(self, spoff, width) -> int - - -ida_hexrays.lvars_t.grow(): - - grow(self, x=lvar_t()) - - -ida_hexrays.lvars_t.has(): - - has(self, x) -> bool - - -ida_hexrays.lvars_t.inject(): - - inject(self, s, len) - - -ida_hexrays.lvars_t.insert(): - - insert(self, it, x) -> lvar_t - - -ida_hexrays.lvars_t.pop_back(): - - pop_back(self) - - -ida_hexrays.lvars_t.push_back(): - - push_back(self, x) - push_back(self) -> lvar_t - - -ida_hexrays.lvars_t.qclear(): - - qclear(self) - - -ida_hexrays.lvars_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.lvars_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.lvars_t.size(): - - size(self) -> size_t - - -ida_hexrays.lvars_t.swap(): - - swap(self, r) - - -ida_hexrays.lvars_t.truncate(): - - truncate(self) - - -ida_hexrays.make_pointer(): - - make_pointer(type) -> tinfo_t - - - Create a pointer type. This function performs the following - conversion: "type" -> "type*" - - @param type: object type. (C++: const tinfo_t &) - @return: "type*". for example, if 'char' is passed as the argument, - - -ida_hexrays.mark_cfunc_dirty(): - - mark_cfunc_dirty(ea, close_views=False) -> bool - - - Flush the cached decompilation results. Erases a cache entry for the - specified function. - - @param ea: function to erase from the cache (C++: ea_t) - @param close_views: close pseudocode windows that show the function - (C++: bool) - @return: if a cache entry existed. - - -class ida_hexrays.mba_range_iterator_t(): - - Proxy of C++ mba_range_iterator_t class - - -ida_hexrays.mba_range_iterator_t.chunk(): - - chunk(self) -> range_t - - -ida_hexrays.mba_range_iterator_t.fii: - mba_range_iterator_t_fii_get(self) -> func_tail_iterator_t - -ida_hexrays.mba_range_iterator_t.is_snippet(): - - is_snippet(self) -> bool - - -ida_hexrays.mba_range_iterator_t.next(): - - next(self) -> bool - - -ida_hexrays.mba_range_iterator_t.rii: - mba_range_iterator_t_rii_get(self) -> range_chunk_iterator_t * - -ida_hexrays.mba_range_iterator_t.set(): - - set(self, mbr) -> bool - - -class ida_hexrays.mba_ranges_t(): - - Proxy of C++ mba_ranges_t class - - -ida_hexrays.mba_ranges_t.clear(): - - clear(self) - - -ida_hexrays.mba_ranges_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mba_ranges_t.is_fragmented(): - - is_fragmented(self) -> bool - - -ida_hexrays.mba_ranges_t.is_snippet(): - - is_snippet(self) -> bool - - -ida_hexrays.mba_ranges_t.pfn: - mba_ranges_t_pfn_get(self) -> func_t * - -ida_hexrays.mba_ranges_t.ranges: - mba_ranges_t_ranges_get(self) -> rangevec_t - -ida_hexrays.mba_ranges_t.start(): - - start(self) -> ea_t - - -class ida_hexrays.mbl_array_t(): - - Proxy of C++ mbl_array_t class - - -ida_hexrays.mbl_array_t._print(): - - _print(self, vp) - - -ida_hexrays.mbl_array_t.aliased_args: - mbl_array_t_aliased_args_get(self) -> ivl_t - -ida_hexrays.mbl_array_t.aliased_memory: - mbl_array_t_aliased_memory_get(self) -> ivlset_t - -ida_hexrays.mbl_array_t.aliased_vars: - mbl_array_t_aliased_vars_get(self) -> ivl_t - -ida_hexrays.mbl_array_t.alloc_lvars(): - - alloc_lvars(self) - - -ida_hexrays.mbl_array_t.analyze_calls(): - - analyze_calls(self, acflags) -> int - - -ida_hexrays.mbl_array_t.arg(): - - arg(self, n) -> lvar_t - arg(self, n) -> lvar_t - - -ida_hexrays.mbl_array_t.argbase(): - - argbase(self) -> sval_t - - -ida_hexrays.mbl_array_t.argidx: - mbl_array_t_argidx_get(self) -> intvec_t - -ida_hexrays.mbl_array_t.argidx_ok(): - - argidx_ok(self) -> bool - - -ida_hexrays.mbl_array_t.bad_call_sp_detected(): - - bad_call_sp_detected(self) -> bool - - -ida_hexrays.mbl_array_t.blocks: - mbl_array_t_blocks_get(self) -> mblock_t - -ida_hexrays.mbl_array_t.build_graph(): - - build_graph(self) -> merror_t - - -ida_hexrays.mbl_array_t.calc_shins_flags(): - - calc_shins_flags(self) -> int - - -ida_hexrays.mbl_array_t.callinfo_built(): - - callinfo_built(self) -> bool - - -ida_hexrays.mbl_array_t.cc: - mbl_array_t_cc_get(self) -> cm_t - -ida_hexrays.mbl_array_t.chain_varnums_ok(): - - chain_varnums_ok(self) -> bool - - -ida_hexrays.mbl_array_t.clr_cdtr(): - - clr_cdtr(self) - - -ida_hexrays.mbl_array_t.clr_mba_flags(): - - clr_mba_flags(self, f) - - -ida_hexrays.mbl_array_t.clr_mba_flags2(): - - clr_mba_flags2(self, f) - - -ida_hexrays.mbl_array_t.combine_blocks(): - - combine_blocks(self) -> bool - - -ida_hexrays.mbl_array_t.common_stkvars_stkargs(): - - common_stkvars_stkargs(self) -> bool - - -ida_hexrays.mbl_array_t.consumed_argregs: - mbl_array_t_consumed_argregs_get(self) -> rlist_t - -ida_hexrays.mbl_array_t.copy_block(): - - copy_block(self, blk, new_serial, cpblk_flags=3) -> mblock_t - - -ida_hexrays.mbl_array_t.deleted_pairs(): - - deleted_pairs(self) -> bool - - -ida_hexrays.mbl_array_t.deserialize(): - - deserialize(bytes, nbytes) -> mbl_array_t - - -ida_hexrays.mbl_array_t.display_numaddrs(): - - display_numaddrs(self) -> bool - - -ida_hexrays.mbl_array_t.display_valnums(): - - display_valnums(self) -> bool - - -ida_hexrays.mbl_array_t.dump(): - - dump(self) - - -ida_hexrays.mbl_array_t.dump_mba(): - - dump_mba(self, _verify, title) - - -ida_hexrays.mbl_array_t.entry_ea: - mbl_array_t_entry_ea_get(self) -> ea_t - -ida_hexrays.mbl_array_t.error_ea: - mbl_array_t_error_ea_get(self) -> ea_t - -ida_hexrays.mbl_array_t.error_strarg: - mbl_array_t_error_strarg_get(self) -> qstring * - -ida_hexrays.mbl_array_t.final_type: - mbl_array_t_final_type_get(self) -> bool - -ida_hexrays.mbl_array_t.find_mop(): - - find_mop(self, ctx, ea, is_dest, list) -> mop_t - - -ida_hexrays.mbl_array_t.first_epilog_ea: - mbl_array_t_first_epilog_ea_get(self) -> ea_t - -ida_hexrays.mbl_array_t.for_all_insns(): - - for_all_insns(self, mv) -> int - - -ida_hexrays.mbl_array_t.for_all_ops(): - - for_all_ops(self, mv) -> int - - -ida_hexrays.mbl_array_t.for_all_topinsns(): - - for_all_topinsns(self, mv) -> int - - -ida_hexrays.mbl_array_t.fpd: - mbl_array_t_fpd_get(self) -> sval_t - -ida_hexrays.mbl_array_t.frregs: - mbl_array_t_frregs_get(self) -> sval_t - -ida_hexrays.mbl_array_t.frsize: - mbl_array_t_frsize_get(self) -> sval_t - -ida_hexrays.mbl_array_t.fti_flags: - mbl_array_t_fti_flags_get(self) -> int - -ida_hexrays.mbl_array_t.fullsize: - mbl_array_t_fullsize_get(self) -> sval_t - -ida_hexrays.mbl_array_t.generated_asserts(): - - generated_asserts(self) -> bool - - -ida_hexrays.mbl_array_t.get_args_region(): - - get_args_region(self) -> ivl_t - - -ida_hexrays.mbl_array_t.get_curfunc(): - - get_curfunc(self) -> func_t * - - -ida_hexrays.mbl_array_t.get_graph(): - - get_graph(self) -> mbl_graph_t - - -ida_hexrays.mbl_array_t.get_ida_argloc(): - - get_ida_argloc(self, v) -> argloc_t - - -ida_hexrays.mbl_array_t.get_lvars_region(): - - get_lvars_region(self) -> ivl_t - - -ida_hexrays.mbl_array_t.get_mba_flags(): - - get_mba_flags(self) -> int - - -ida_hexrays.mbl_array_t.get_mba_flags2(): - - get_mba_flags2(self) -> int - - -ida_hexrays.mbl_array_t.get_mblock(): - - get_mblock(self, n) -> mblock_t - get_mblock(self, n) -> mblock_t - - -ida_hexrays.mbl_array_t.get_shadow_region(): - - get_shadow_region(self) -> ivl_t - - -ida_hexrays.mbl_array_t.get_stack_region(): - - get_stack_region(self) -> ivl_t - - -ida_hexrays.mbl_array_t.get_std_region(): - - get_std_region(self, idx) -> ivl_t - - -ida_hexrays.mbl_array_t.gotoff_stkvars: - mbl_array_t_gotoff_stkvars_get(self) -> ivlset_t - -ida_hexrays.mbl_array_t.graph_insns(): - - graph_insns(self) -> bool - - -ida_hexrays.mbl_array_t.has_bad_sp(): - - has_bad_sp(self) -> bool - - -ida_hexrays.mbl_array_t.has_over_chains(): - - has_over_chains(self) -> bool - - -ida_hexrays.mbl_array_t.has_overvars(): - - has_overvars(self) -> bool - - -ida_hexrays.mbl_array_t.has_passregs(): - - has_passregs(self) -> bool - - -ida_hexrays.mbl_array_t.idaloc2vd(): - - idaloc2vd(self, loc, width) -> vdloc_t - - -ida_hexrays.mbl_array_t.idb_node: - mbl_array_t_idb_node_get(self) -> netnode - -ida_hexrays.mbl_array_t.idb_spoiled: - mbl_array_t_idb_spoiled_get(self) -> reginfovec_t - -ida_hexrays.mbl_array_t.idb_type: - mbl_array_t_idb_type_get(self) -> tinfo_t - -ida_hexrays.mbl_array_t.inargoff: - mbl_array_t_inargoff_get(self) -> sval_t - -ida_hexrays.mbl_array_t.insert_block(): - - insert_block(self, bblk) -> mblock_t - - -ida_hexrays.mbl_array_t.is_cdtr(): - - is_cdtr(self) -> bool - - -ida_hexrays.mbl_array_t.is_ctr(): - - is_ctr(self) -> bool - - -ida_hexrays.mbl_array_t.is_dtr(): - - is_dtr(self) -> bool - - -ida_hexrays.mbl_array_t.is_pattern(): - - is_pattern(self) -> bool - - -ida_hexrays.mbl_array_t.is_snippet(): - - is_snippet(self) -> bool - - -ida_hexrays.mbl_array_t.is_stkarg(): - - is_stkarg(self, v) -> bool - - -ida_hexrays.mbl_array_t.is_thunk(): - - is_thunk(self) -> bool - - -ida_hexrays.mbl_array_t.label: - mbl_array_t_label_get(self) -> qstring * - -ida_hexrays.mbl_array_t.last_prolog_ea: - mbl_array_t_last_prolog_ea_get(self) -> ea_t - -ida_hexrays.mbl_array_t.loaded_gdl(): - - loaded_gdl(self) -> bool - - -ida_hexrays.mbl_array_t.lvar_names_ok(): - - lvar_names_ok(self) -> bool - - -ida_hexrays.mbl_array_t.lvars_allocated(): - - lvars_allocated(self) -> bool - - -ida_hexrays.mbl_array_t.lvars_renamed(): - - lvars_renamed(self) -> bool - - -ida_hexrays.mbl_array_t.mark_chains_dirty(): - - mark_chains_dirty(self) - - -ida_hexrays.mbl_array_t.maturity: - mbl_array_t_maturity_get(self) -> mba_maturity_t - -ida_hexrays.mbl_array_t.may_refine_rettype(): - - may_refine_rettype(self) -> bool - - -ida_hexrays.mbl_array_t.mbr: - mbl_array_t_mbr_get(self) -> mba_ranges_t - -ida_hexrays.mbl_array_t.minargref: - mbl_array_t_minargref_get(self) -> sval_t - -ida_hexrays.mbl_array_t.minstkref: - mbl_array_t_minstkref_get(self) -> sval_t - -ida_hexrays.mbl_array_t.minstkref_ea: - mbl_array_t_minstkref_ea_get(self) -> ea_t - -ida_hexrays.mbl_array_t.natural: - mbl_array_t_natural_get(self) -> mblock_t ** - -ida_hexrays.mbl_array_t.nodel_memory: - mbl_array_t_nodel_memory_get(self) -> mlist_t - -ida_hexrays.mbl_array_t.notes: - mbl_array_t_notes_get(self) -> hexwarns_t - -ida_hexrays.mbl_array_t.npurged: - mbl_array_t_npurged_get(self) -> int - -ida_hexrays.mbl_array_t.occurred_warns: - mbl_array_t_occurred_warns_get(self) -> uchar [32] - -ida_hexrays.mbl_array_t.optimize_global(): - - optimize_global(self) -> merror_t - - -ida_hexrays.mbl_array_t.optimize_local(): - - optimize_local(self, locopt_bits) -> int - - -ida_hexrays.mbl_array_t.optimized(): - - optimized(self) -> bool - - -ida_hexrays.mbl_array_t.pfn_flags: - mbl_array_t_pfn_flags_get(self) -> int - -ida_hexrays.mbl_array_t.precise_defeas(): - - precise_defeas(self) -> bool - - -ida_hexrays.mbl_array_t.propagated_asserts(): - - propagated_asserts(self) -> bool - - -ida_hexrays.mbl_array_t.qty: - mbl_array_t_qty_get(self) -> int - -ida_hexrays.mbl_array_t.really_alloc(): - - really_alloc(self) -> bool - - -ida_hexrays.mbl_array_t.regargs_is_not_aligned(): - - regargs_is_not_aligned(self) -> bool - - -ida_hexrays.mbl_array_t.remove_block(): - - remove_block(self, blk) -> bool - - -ida_hexrays.mbl_array_t.remove_empty_blocks(): - - remove_empty_blocks(self) -> bool - - -ida_hexrays.mbl_array_t.reqmat: - mbl_array_t_reqmat_get(self) -> mba_maturity_t - -ida_hexrays.mbl_array_t.restricted_memory: - mbl_array_t_restricted_memory_get(self) -> ivlset_t - -ida_hexrays.mbl_array_t.retsize: - mbl_array_t_retsize_get(self) -> int - -ida_hexrays.mbl_array_t.returns_fpval(): - - returns_fpval(self) -> bool - - -ida_hexrays.mbl_array_t.retvaridx: - mbl_array_t_retvaridx_get(self) -> int - -ida_hexrays.mbl_array_t.rtype_refined(): - - rtype_refined(self) -> bool - - -ida_hexrays.mbl_array_t.saverest_done(): - - saverest_done(self) -> bool - - -ida_hexrays.mbl_array_t.serialize(): - - serialize(self) - - -ida_hexrays.mbl_array_t.set_mba_flags(): - - set_mba_flags(self, f) - - -ida_hexrays.mbl_array_t.set_mba_flags2(): - - set_mba_flags2(self, f) - - -ida_hexrays.mbl_array_t.shadow_args: - mbl_array_t_shadow_args_get(self) -> int - -ida_hexrays.mbl_array_t.short_display(): - - short_display(self) -> bool - - -ida_hexrays.mbl_array_t.should_beautify(): - - should_beautify(self) -> bool - - -ida_hexrays.mbl_array_t.show_reduction(): - - show_reduction(self) -> bool - - -ida_hexrays.mbl_array_t.spd_adjust: - mbl_array_t_spd_adjust_get(self) -> sval_t - -ida_hexrays.mbl_array_t.spoiled_list: - mbl_array_t_spoiled_list_get(self) -> mlist_t - -ida_hexrays.mbl_array_t.stacksize: - mbl_array_t_stacksize_get(self) -> sval_t - -ida_hexrays.mbl_array_t.std_ivls: - mbl_array_t_std_ivls_get(self) -> ivl_with_name_t - -ida_hexrays.mbl_array_t.stkoff_ida2vd(): - - stkoff_ida2vd(self, off) -> sval_t - - -ida_hexrays.mbl_array_t.stkoff_vd2ida(): - - stkoff_vd2ida(self, off) -> sval_t - - -ida_hexrays.mbl_array_t.term(): - - term(self) - - -ida_hexrays.mbl_array_t.tmpstk_size: - mbl_array_t_tmpstk_size_get(self) -> sval_t - -ida_hexrays.mbl_array_t.use_frame(): - - use_frame(self) -> bool - - -ida_hexrays.mbl_array_t.use_wingraph32(): - - use_wingraph32(self) -> bool - - -ida_hexrays.mbl_array_t.valranges_done(): - - valranges_done(self) -> bool - - -ida_hexrays.mbl_array_t.vars: - mbl_array_t_vars_get(self) -> lvars_t - -ida_hexrays.mbl_array_t.vd2idaloc(): - - vd2idaloc(self, loc, width, spd) -> argloc_t - vd2idaloc(self, loc, width) -> argloc_t - - -ida_hexrays.mbl_array_t.verify(): - - verify(self, always) - - -ida_hexrays.mbl_array_t.write_to_const_detected(): - - write_to_const_detected(self) -> bool - - -ida_hexrays.mbl_array_t_deserialize(): - - mbl_array_t_deserialize(bytes, nbytes) -> mbl_array_t - - -class ida_hexrays.mbl_graph_t(): - - Proxy of C++ mbl_graph_t class - - -ida_hexrays.mbl_graph_t.colored_gdl_edges: - simple_graph_t_colored_gdl_edges_get(self) -> bool - -ida_hexrays.mbl_graph_t.get_chain_stamp(): - - get_chain_stamp(self) -> int - - -ida_hexrays.mbl_graph_t.get_du(): - - get_du(self, gctype) -> graph_chains_t - - -ida_hexrays.mbl_graph_t.get_mblock(): - - get_mblock(self, n) -> mblock_t - - -ida_hexrays.mbl_graph_t.get_ud(): - - get_ud(self, gctype) -> graph_chains_t - - -ida_hexrays.mbl_graph_t.is_du_chain_dirty(): - - is_du_chain_dirty(self, gctype) -> bool - - -ida_hexrays.mbl_graph_t.is_redefined_globally(): - - is_redefined_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool - - -ida_hexrays.mbl_graph_t.is_ud_chain_dirty(): - - is_ud_chain_dirty(self, gctype) -> bool - - -ida_hexrays.mbl_graph_t.is_used_globally(): - - is_used_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool - - -ida_hexrays.mbl_graph_t.title: - simple_graph_t_title_get(self) -> qstring * - -class ida_hexrays.mblock_t(): - - Proxy of C++ mblock_t class - - -ida_hexrays.mblock_t._print(): - - _print(self, vp) - - -ida_hexrays.mblock_t.append_def_list(): - - append_def_list(self, list, op, maymust) - - -ida_hexrays.mblock_t.append_use_list(): - - append_use_list(self, list, op, maymust, mask=bitrange_t(0, USHRT_MAX)) - - -ida_hexrays.mblock_t.build_def_list(): - - build_def_list(self, ins, maymust) -> mlist_t - - -ida_hexrays.mblock_t.build_lists(): - - build_lists(self, kill_deads) -> int - - -ida_hexrays.mblock_t.build_use_list(): - - build_use_list(self, ins, maymust) -> mlist_t - - -ida_hexrays.mblock_t.dead_at_start: - mblock_t_dead_at_start_get(self) -> mlist_t - -ida_hexrays.mblock_t.dnu: - mblock_t_dnu_get(self) -> mlist_t - -ida_hexrays.mblock_t.dump(): - - dump(self) - - -ida_hexrays.mblock_t.dump_block(): - - dump_block(self, title) - - -ida_hexrays.mblock_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mblock_t.end: - mblock_t_end_get(self) -> ea_t - -ida_hexrays.mblock_t.find_access(): - - find_access(self, op, parent, mend, fdflags) -> minsn_t - - -ida_hexrays.mblock_t.find_def(): - - find_def(self, op, p_i1, i2, fdflags) -> minsn_t - - -ida_hexrays.mblock_t.find_first_use(): - - find_first_use(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t - - -ida_hexrays.mblock_t.find_redefinition(): - - find_redefinition(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t - - -ida_hexrays.mblock_t.find_use(): - - find_use(self, op, p_i1, i2, fdflags) -> minsn_t - - -ida_hexrays.mblock_t.flags: - mblock_t_flags_get(self) -> uint32 - -ida_hexrays.mblock_t.for_all_insns(): - - for_all_insns(self, mv) -> int - - -ida_hexrays.mblock_t.for_all_ops(): - - for_all_ops(self, mv) -> int - - -ida_hexrays.mblock_t.for_all_uses(): - - for_all_uses(self, list, i1, i2, mmv) -> int - - -ida_hexrays.mblock_t.get_reginsn_qty(): - - get_reginsn_qty(self) -> size_t - - -ida_hexrays.mblock_t.get_valranges(): - - get_valranges(self, res, vivl, vrflags) -> bool - get_valranges(self, res, vivl, m, vrflags) -> bool - - -ida_hexrays.mblock_t.head: - mblock_t_head_get(self) -> minsn_t - -ida_hexrays.mblock_t.insert_into_block(): - - insert_into_block(self, nm, om) -> minsn_t - - -ida_hexrays.mblock_t.is_branch(): - - is_branch(self) -> bool - - -ida_hexrays.mblock_t.is_call_block(): - - is_call_block(self) -> bool - - -ida_hexrays.mblock_t.is_nway(): - - is_nway(self) -> bool - - -ida_hexrays.mblock_t.is_redefined(): - - is_redefined(self, list, i1, i2, maymust=MAY_ACCESS) -> bool - - -ida_hexrays.mblock_t.is_rhs_redefined(): - - is_rhs_redefined(self, ins, i1, i2) -> bool - - -ida_hexrays.mblock_t.is_simple_goto_block(): - - is_simple_goto_block(self) -> bool - - -ida_hexrays.mblock_t.is_simple_jcnd_block(): - - is_simple_jcnd_block(self) -> bool - - -ida_hexrays.mblock_t.is_unknown_call(): - - is_unknown_call(self) -> bool - - -ida_hexrays.mblock_t.is_used(): - - is_used(self, list, i1, i2, maymust=MAY_ACCESS) -> bool - - -ida_hexrays.mblock_t.lists_dirty(): - - lists_dirty(self) -> bool - - -ida_hexrays.mblock_t.lists_ready(): - - lists_ready(self) -> bool - - -ida_hexrays.mblock_t.make_lists_ready(): - - make_lists_ready(self) -> int - - -ida_hexrays.mblock_t.make_nop(): - - make_nop(self, m) - - -ida_hexrays.mblock_t.mark_lists_dirty(): - - mark_lists_dirty(self) - - -ida_hexrays.mblock_t.maxbsp: - mblock_t_maxbsp_get(self) -> sval_t - -ida_hexrays.mblock_t.maybdef: - mblock_t_maybdef_get(self) -> mlist_t - -ida_hexrays.mblock_t.maybuse: - mblock_t_maybuse_get(self) -> mlist_t - -ida_hexrays.mblock_t.mba: - mblock_t_mba_get(self) -> mbl_array_t - -ida_hexrays.mblock_t.minbargref: - mblock_t_minbargref_get(self) -> sval_t - -ida_hexrays.mblock_t.minbstkref: - mblock_t_minbstkref_get(self) -> sval_t - -ida_hexrays.mblock_t.mustbdef: - mblock_t_mustbdef_get(self) -> mlist_t - -ida_hexrays.mblock_t.mustbuse: - mblock_t_mustbuse_get(self) -> mlist_t - -ida_hexrays.mblock_t.needs_propagation(): - - needs_propagation(self) -> bool - - -ida_hexrays.mblock_t.nextb: - mblock_t_nextb_get(self) -> mblock_t - -ida_hexrays.mblock_t.npred(): - - npred(self) -> int - - -ida_hexrays.mblock_t.nsucc(): - - nsucc(self) -> int - - -ida_hexrays.mblock_t.optimize_block(): - - optimize_block(self) -> int - - -ida_hexrays.mblock_t.optimize_insn(): - - optimize_insn(self, m, optflags=0x0002|0x0004) -> int - - -ida_hexrays.mblock_t.optimize_useless_jump(): - - optimize_useless_jump(self) -> int - - -ida_hexrays.mblock_t.pred(): - - pred(self, n) -> int - - -ida_hexrays.mblock_t.preds(): - - Iterates the list of predecessor blocks - - -ida_hexrays.mblock_t.predset: - mblock_t_predset_get(self) -> intvec_t - -ida_hexrays.mblock_t.prevb: - mblock_t_prevb_get(self) -> mblock_t - -ida_hexrays.mblock_t.remove_from_block(): - - remove_from_block(self, m) -> minsn_t - - -ida_hexrays.mblock_t.request_demote64(): - - request_demote64(self) - - -ida_hexrays.mblock_t.request_propagation(): - - request_propagation(self) - - -ida_hexrays.mblock_t.serial: - mblock_t_serial_get(self) -> int - -ida_hexrays.mblock_t.start: - mblock_t_start_get(self) -> ea_t - -ida_hexrays.mblock_t.succ(): - - succ(self, n) -> int - - -ida_hexrays.mblock_t.succs(): - - Iterates the list of successor blocks - - -ida_hexrays.mblock_t.succset: - mblock_t_succset_get(self) -> intvec_t - -ida_hexrays.mblock_t.tail: - mblock_t_tail_get(self) -> minsn_t - -ida_hexrays.mblock_t.type: - mblock_t_type_get(self) -> mblock_type_t - -class ida_hexrays.mcallarg_t(): - - Proxy of C++ mcallarg_t class - - -ida_hexrays.mcallarg_t._print(): - - _print(self, shins_flags=0x04|0x02) - - -ida_hexrays.mcallarg_t.apply_ld_mcode(): - - apply_ld_mcode(self, mcode, ea, newsize) - - -ida_hexrays.mcallarg_t.apply_xds(): - - apply_xds(self, ea, newsize) - - -ida_hexrays.mcallarg_t.apply_xdu(): - - apply_xdu(self, ea, newsize) - - -ida_hexrays.mcallarg_t.argloc: - mcallarg_t_argloc_get(self) -> argloc_t - -ida_hexrays.mcallarg_t.assign(): - - assign(self, rop) -> mop_t - - -ida_hexrays.mcallarg_t.change_size(): - - change_size(self, nsize, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mcallarg_t.copy_mop(): - - copy_mop(self, op) - - -ida_hexrays.mcallarg_t.create_from_insn(): - - create_from_insn(self, m) - - -ida_hexrays.mcallarg_t.create_from_ivlset(): - - create_from_ivlset(self, mba, ivs, fullsize) -> bool - - -ida_hexrays.mcallarg_t.create_from_mlist(): - - create_from_mlist(self, mba, lst, fullsize) -> bool - - -ida_hexrays.mcallarg_t.create_from_scattered_vdloc(): - - create_from_scattered_vdloc(self, mba, name, type, loc) - - -ida_hexrays.mcallarg_t.create_from_vdloc(): - - create_from_vdloc(self, mba, loc, _size) - - -ida_hexrays.mcallarg_t.double_size(): - - double_size(self, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mcallarg_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mcallarg_t.ea: - mcallarg_t_ea_get(self) -> ea_t - -ida_hexrays.mcallarg_t.equal_mops(): - - equal_mops(self, rop, eqflags) -> bool - - -ida_hexrays.mcallarg_t.erase(): - - erase(self) - - -ida_hexrays.mcallarg_t.erase_but_keep_size(): - - erase_but_keep_size(self) - - -ida_hexrays.mcallarg_t.for_all_ops(): - - for_all_ops(self, mv, type=None, is_target=False) -> int - - -ida_hexrays.mcallarg_t.for_all_scattered_submops(): - - for_all_scattered_submops(self, sv) -> int - - -ida_hexrays.mcallarg_t.get_insn(): - - get_insn(self, code) -> minsn_t - get_insn(self, code) -> minsn_t - - -ida_hexrays.mcallarg_t.get_stkoff(): - - get_stkoff(self, p_off) -> bool - - -ida_hexrays.mcallarg_t.get_stkvar(): - - get_stkvar(self, p_off) -> member_t * - - -ida_hexrays.mcallarg_t.has_side_effects(): - - has_side_effects(self, include_ldx_and_divs=False) -> bool - - -ida_hexrays.mcallarg_t.is01(): - - is01(self) -> bool - - -ida_hexrays.mcallarg_t.is_bit_reg(): - - is_bit_reg(self, reg) -> bool - is_bit_reg(self) -> bool - - -ida_hexrays.mcallarg_t.is_cc(): - - is_cc(self) -> bool - - -ida_hexrays.mcallarg_t.is_ccflags(): - - is_ccflags(self) -> bool - - -ida_hexrays.mcallarg_t.is_constant(): - - is_constant(self, is_signed=True) -> bool - - -ida_hexrays.mcallarg_t.is_equal_to(): - - is_equal_to(self, n, is_signed=True) -> bool - - -ida_hexrays.mcallarg_t.is_extended_from(): - - is_extended_from(self, nbytes, is_signed) -> bool - - -ida_hexrays.mcallarg_t.is_glbaddr(): - - is_glbaddr(self) -> bool - is_glbaddr(self, ea) -> bool - - -ida_hexrays.mcallarg_t.is_impptr_done(): - - is_impptr_done(self) -> bool - - -ida_hexrays.mcallarg_t.is_insn(): - - is_insn(self) -> bool - is_insn(self, code) -> bool - - -ida_hexrays.mcallarg_t.is_kreg(): - - is_kreg(self) -> bool - - -ida_hexrays.mcallarg_t.is_mob(): - - is_mob(self, serial) -> bool - - -ida_hexrays.mcallarg_t.is_negative_constant(): - - is_negative_constant(self) -> bool - - -ida_hexrays.mcallarg_t.is_one(): - - is_one(self) -> bool - - -ida_hexrays.mcallarg_t.is_positive_constant(): - - is_positive_constant(self) -> bool - - -ida_hexrays.mcallarg_t.is_reg(): - - is_reg(self) -> bool - is_reg(self, _r) -> bool - is_reg(self, _r, _size) -> bool - - -ida_hexrays.mcallarg_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.mcallarg_t.is_sign_extended_from(): - - is_sign_extended_from(self, nbytes) -> bool - - -ida_hexrays.mcallarg_t.is_stkaddr(): - - is_stkaddr(self) -> bool - - -ida_hexrays.mcallarg_t.is_udt(): - - is_udt(self) -> bool - - -ida_hexrays.mcallarg_t.is_undef_val(): - - is_undef_val(self) -> bool - - -ida_hexrays.mcallarg_t.is_zero(): - - is_zero(self) -> bool - - -ida_hexrays.mcallarg_t.is_zero_extended_from(): - - is_zero_extended_from(self, nbytes) -> bool - - -ida_hexrays.mcallarg_t.lexcompare(): - - lexcompare(self, rop) -> int - - -ida_hexrays.mcallarg_t.make_blkref(): - - make_blkref(self, blknum) - - -ida_hexrays.mcallarg_t.make_first_half(): - - make_first_half(self, width) -> bool - - -ida_hexrays.mcallarg_t.make_fpnum(): - - make_fpnum(self, bytes, _size) -> bool - - -ida_hexrays.mcallarg_t.make_gvar(): - - make_gvar(self, ea) - - -ida_hexrays.mcallarg_t.make_helper(): - - make_helper(self, name) - - -ida_hexrays.mcallarg_t.make_high_half(): - - make_high_half(self, width) -> bool - - -ida_hexrays.mcallarg_t.make_insn(): - - make_insn(self, ins) - - -ida_hexrays.mcallarg_t.make_int(): - - make_int(self, val, val_ea, opno=0) - - -ida_hexrays.mcallarg_t.make_low_half(): - - make_low_half(self, width) -> bool - - -ida_hexrays.mcallarg_t.make_number(): - - make_number(self, _value, _size, _ea=BADADDR, opnum=0) - - -ida_hexrays.mcallarg_t.make_reg(): - - make_reg(self, reg) - make_reg(self, reg, _size) - - -ida_hexrays.mcallarg_t.make_reg_pair(): - - make_reg_pair(self, loreg, hireg, halfsize) - - -ida_hexrays.mcallarg_t.make_second_half(): - - make_second_half(self, width) -> bool - - -ida_hexrays.mcallarg_t.make_uint(): - - make_uint(self, val, val_ea, opno=0) - - -ida_hexrays.mcallarg_t.may_use_aliased_memory(): - - may_use_aliased_memory(self) -> bool - - -ida_hexrays.mcallarg_t.name: - mcallarg_t_name_get(self) -> qstring * - -ida_hexrays.mcallarg_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.mcallarg_t.oprops: - mop_t_oprops_get(self) -> uint8 - -ida_hexrays.mcallarg_t.preserve_side_effects(): - - preserve_side_effects(self, blk, top, moved_calls=None) -> bool - - -ida_hexrays.mcallarg_t.probably_floating(): - - probably_floating(self) -> bool - - -ida_hexrays.mcallarg_t.set_impptr_done(): - - set_impptr_done(self) - - -ida_hexrays.mcallarg_t.set_regarg(): - - set_regarg(self, mr, sz, tif) - set_regarg(self, mr, tif) - set_regarg(self, mr, dt, sign=type_unsigned) - - -ida_hexrays.mcallarg_t.set_udt(): - - set_udt(self) - - -ida_hexrays.mcallarg_t.set_undef_val(): - - set_undef_val(self) - - -ida_hexrays.mcallarg_t.shift_mop(): - - shift_mop(self, offset) -> bool - - -ida_hexrays.mcallarg_t.signed_value(): - - signed_value(self) -> int64 - - -ida_hexrays.mcallarg_t.size: - mop_t_size_get(self) -> int - -ida_hexrays.mcallarg_t.swap(): - - swap(self, rop) - - -ida_hexrays.mcallarg_t.t: - - _get_t(self) -> mopt_t - - -ida_hexrays.mcallarg_t.type: - mcallarg_t_type_get(self) -> tinfo_t - -ida_hexrays.mcallarg_t.unsigned_value(): - - unsigned_value(self) -> uint64 - - -ida_hexrays.mcallarg_t.valnum: - mop_t_valnum_get(self) -> uint16 - -ida_hexrays.mcallarg_t.value(): - - value(self, is_signed) -> uint64 - - -ida_hexrays.mcallarg_t.zero(): - - zero(self) - - -class ida_hexrays.mcallargs_t(): - - Proxy of C++ qvector<(mcallarg_t)> class - - -ida_hexrays.mcallargs_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.mcallargs_t.at(): - - at(self, _idx) -> mcallarg_t - - -ida_hexrays.mcallargs_t.begin(): - - begin(self) -> mcallarg_t - begin(self) -> mcallarg_t - - -ida_hexrays.mcallargs_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.mcallargs_t.clear(): - - clear(self) - - -ida_hexrays.mcallargs_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mcallargs_t.end(): - - end(self) -> mcallarg_t - end(self) -> mcallarg_t - - -ida_hexrays.mcallargs_t.erase(): - - erase(self, it) -> mcallarg_t - erase(self, first, last) -> mcallarg_t - - -ida_hexrays.mcallargs_t.extract(): - - extract(self) -> mcallarg_t - - -ida_hexrays.mcallargs_t.find(): - - find(self, x) -> mcallarg_t - find(self, x) -> mcallarg_t - - -ida_hexrays.mcallargs_t.grow(): - - grow(self, x=mcallarg_t()) - - -ida_hexrays.mcallargs_t.has(): - - has(self, x) -> bool - - -ida_hexrays.mcallargs_t.inject(): - - inject(self, s, len) - - -ida_hexrays.mcallargs_t.insert(): - - insert(self, it, x) -> mcallarg_t - - -ida_hexrays.mcallargs_t.pop_back(): - - pop_back(self) - - -ida_hexrays.mcallargs_t.push_back(): - - push_back(self, x) - push_back(self) -> mcallarg_t - - -ida_hexrays.mcallargs_t.qclear(): - - qclear(self) - - -ida_hexrays.mcallargs_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.mcallargs_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.mcallargs_t.size(): - - size(self) -> size_t - - -ida_hexrays.mcallargs_t.swap(): - - swap(self, r) - - -ida_hexrays.mcallargs_t.truncate(): - - truncate(self) - - -class ida_hexrays.mcallinfo_t(): - - Proxy of C++ mcallinfo_t class - - -ida_hexrays.mcallinfo_t._print(): - - _print(self, size=-1, shins_flags=0x04|0x02) - - -ida_hexrays.mcallinfo_t.args: - mcallinfo_t_args_get(self) -> mcallargs_t - -ida_hexrays.mcallinfo_t.call_spd: - mcallinfo_t_call_spd_get(self) -> int - -ida_hexrays.mcallinfo_t.callee: - mcallinfo_t_callee_get(self) -> ea_t - -ida_hexrays.mcallinfo_t.cc: - mcallinfo_t_cc_get(self) -> cm_t - -ida_hexrays.mcallinfo_t.dead_regs: - mcallinfo_t_dead_regs_get(self) -> mlist_t - -ida_hexrays.mcallinfo_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mcallinfo_t.flags: - mcallinfo_t_flags_get(self) -> int - -ida_hexrays.mcallinfo_t.get_type(): - - get_type(self) -> tinfo_t - - -ida_hexrays.mcallinfo_t.is_vararg(): - - is_vararg(self) -> bool - - -ida_hexrays.mcallinfo_t.lexcompare(): - - lexcompare(self, f) -> int - - -ida_hexrays.mcallinfo_t.pass_regs: - mcallinfo_t_pass_regs_get(self) -> mlist_t - -ida_hexrays.mcallinfo_t.retregs: - mcallinfo_t_retregs_get(self) -> mopvec_t - -ida_hexrays.mcallinfo_t.return_argloc: - mcallinfo_t_return_argloc_get(self) -> argloc_t - -ida_hexrays.mcallinfo_t.return_regs: - mcallinfo_t_return_regs_get(self) -> mlist_t - -ida_hexrays.mcallinfo_t.return_type: - mcallinfo_t_return_type_get(self) -> tinfo_t - -ida_hexrays.mcallinfo_t.role: - mcallinfo_t_role_get(self) -> funcrole_t - -ida_hexrays.mcallinfo_t.set_type(): - - set_type(self, type) -> bool - - -ida_hexrays.mcallinfo_t.solid_args: - mcallinfo_t_solid_args_get(self) -> int - -ida_hexrays.mcallinfo_t.spoiled: - mcallinfo_t_spoiled_get(self) -> mlist_t - -ida_hexrays.mcallinfo_t.stkargs_top: - mcallinfo_t_stkargs_top_get(self) -> int - -ida_hexrays.mcallinfo_t.visible_memory: - mcallinfo_t_visible_memory_get(self) -> ivlset_t - -class ida_hexrays.mcases_t(): - - Proxy of C++ mcases_t class - - -ida_hexrays.mcases_t._print(): - - _print(self) - - -ida_hexrays.mcases_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.mcases_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mcases_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mcases_t.resize(): - - resize(self, s) - - -ida_hexrays.mcases_t.size(): - - size(self) -> size_t - - -ida_hexrays.mcases_t.swap(): - - swap(self, r) - - -ida_hexrays.mcases_t.targets: - mcases_t_targets_get(self) -> intvec_t - -ida_hexrays.mcases_t.values: - mcases_t_values_get(self) -> casevec_t - -ida_hexrays.mcode_modifies_d(): - - mcode_modifies_d(mcode) -> bool - - -class ida_hexrays.microcode_filter_t(): - - Proxy of C++ microcode_filter_t class - - -ida_hexrays.microcode_filter_t.apply(): - - apply(self, cdg) -> merror_t - - -ida_hexrays.microcode_filter_t.match(): - - match(self, cdg) -> bool - - -class ida_hexrays.minsn_t(): - - Proxy of C++ minsn_t class - - -ida_hexrays.minsn_t._print(): - - _print(self, shins_flags=0x04|0x02) - - -ida_hexrays.minsn_t.clr_assert(): - - clr_assert(self) - - -ida_hexrays.minsn_t.clr_combinable(): - - clr_combinable(self) - - -ida_hexrays.minsn_t.clr_combined(): - - clr_combined(self) - - -ida_hexrays.minsn_t.clr_fpinsn(): - - clr_fpinsn(self) - - -ida_hexrays.minsn_t.clr_ignlowsrc(): - - clr_ignlowsrc(self) - - -ida_hexrays.minsn_t.clr_multimov(): - - clr_multimov(self) - - -ida_hexrays.minsn_t.clr_noret_icall(): - - clr_noret_icall(self) - - -ida_hexrays.minsn_t.clr_propagatable(): - - clr_propagatable(self) - - -ida_hexrays.minsn_t.clr_tailcall(): - - clr_tailcall(self) - - -ida_hexrays.minsn_t.contains_call(): - - contains_call(self, with_helpers=False) -> bool - - -ida_hexrays.minsn_t.contains_opcode(): - - contains_opcode(self, mcode) -> bool - - -ida_hexrays.minsn_t.d: - minsn_t_d_get(self) -> mop_t - -ida_hexrays.minsn_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.minsn_t.ea: - minsn_t_ea_get(self) -> ea_t - -ida_hexrays.minsn_t.equal_insns(): - - equal_insns(self, m, eqflags) -> bool - - -ida_hexrays.minsn_t.find_call(): - - find_call(self, with_helpers=False) -> minsn_t - - -ida_hexrays.minsn_t.find_ins_op(): - - find_ins_op(self, other, op=m_nop) -> minsn_t - - -ida_hexrays.minsn_t.find_num_op(): - - find_num_op(self, other) -> mop_t - - -ida_hexrays.minsn_t.find_opcode(): - - find_opcode(self, mcode) -> minsn_t - find_opcode(self, mcode) -> minsn_t - - -ida_hexrays.minsn_t.for_all_insns(): - - for_all_insns(self, mv) -> int - - -ida_hexrays.minsn_t.for_all_ops(): - - for_all_ops(self, mv) -> int - - -ida_hexrays.minsn_t.get_role(): - - get_role(self) -> funcrole_t - - -ida_hexrays.minsn_t.get_split_size(): - - get_split_size(self) -> int - - -ida_hexrays.minsn_t.has_side_effects(): - - has_side_effects(self, include_ldx_and_divs=False) -> bool - - -ida_hexrays.minsn_t.iprops: - minsn_t_iprops_get(self) -> int - -ida_hexrays.minsn_t.is_after(): - - is_after(self, m) -> bool - - -ida_hexrays.minsn_t.is_alloca(): - - is_alloca(self) -> bool - - -ida_hexrays.minsn_t.is_assert(): - - is_assert(self) -> bool - - -ida_hexrays.minsn_t.is_between(): - - is_between(self, m1, m2) -> bool - - -ida_hexrays.minsn_t.is_bswap(): - - is_bswap(self) -> bool - - -ida_hexrays.minsn_t.is_cleaning_pop(): - - is_cleaning_pop(self) -> bool - - -ida_hexrays.minsn_t.is_combinable(): - - is_combinable(self) -> bool - - -ida_hexrays.minsn_t.is_combined(): - - is_combined(self) -> bool - - -ida_hexrays.minsn_t.is_extstx(): - - is_extstx(self) -> bool - - -ida_hexrays.minsn_t.is_farcall(): - - is_farcall(self) -> bool - - -ida_hexrays.minsn_t.is_fpinsn(): - - is_fpinsn(self) -> bool - - -ida_hexrays.minsn_t.is_helper(): - - is_helper(self, name) -> bool - - -ida_hexrays.minsn_t.is_ignlowsrc(): - - is_ignlowsrc(self) -> bool - - -ida_hexrays.minsn_t.is_inverted_jx(): - - is_inverted_jx(self) -> bool - - -ida_hexrays.minsn_t.is_like_move(): - - is_like_move(self) -> bool - - -ida_hexrays.minsn_t.is_memcpy(): - - is_memcpy(self) -> bool - - -ida_hexrays.minsn_t.is_memset(): - - is_memset(self) -> bool - - -ida_hexrays.minsn_t.is_mov(): - - is_mov(self) -> bool - - -ida_hexrays.minsn_t.is_multimov(): - - is_multimov(self) -> bool - - -ida_hexrays.minsn_t.is_noret_call(): - - is_noret_call(self, ignore_noret_icall=False) -> bool - - -ida_hexrays.minsn_t.is_optional(): - - is_optional(self) -> bool - - -ida_hexrays.minsn_t.is_persistent(): - - is_persistent(self) -> bool - - -ida_hexrays.minsn_t.is_propagatable(): - - is_propagatable(self) -> bool - - -ida_hexrays.minsn_t.is_readflags(): - - is_readflags(self) -> bool - - -ida_hexrays.minsn_t.is_tailcall(): - - is_tailcall(self) -> bool - - -ida_hexrays.minsn_t.is_unknown_call(): - - is_unknown_call(self) -> bool - - -ida_hexrays.minsn_t.is_wild_match(): - - is_wild_match(self) -> bool - - -ida_hexrays.minsn_t.l: - minsn_t_l_get(self) -> mop_t - -ida_hexrays.minsn_t.lexcompare(): - - lexcompare(self, ri) -> int - - -ida_hexrays.minsn_t.may_use_aliased_memory(): - - may_use_aliased_memory(self) -> bool - - -ida_hexrays.minsn_t.modifes_d(): - - modifes_d(self) -> bool - - -ida_hexrays.minsn_t.modifies_pair_mop(): - - modifies_pair_mop(self) -> bool - - -ida_hexrays.minsn_t.next: - minsn_t_next_get(self) -> minsn_t - -ida_hexrays.minsn_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.minsn_t.opcode: - minsn_t_opcode_get(self) -> mcode_t - -ida_hexrays.minsn_t.optimize_solo(): - - optimize_solo(self, optflags=0) -> int - - -ida_hexrays.minsn_t.optimize_subtree(): - - optimize_subtree(self, blk, top, parent, converted_call, optflags=0x0002) -> int - - -ida_hexrays.minsn_t.prev: - minsn_t_prev_get(self) -> minsn_t - -ida_hexrays.minsn_t.r: - minsn_t_r_get(self) -> mop_t - -ida_hexrays.minsn_t.set_assert(): - - set_assert(self) - - -ida_hexrays.minsn_t.set_cleaning_pop(): - - set_cleaning_pop(self) - - -ida_hexrays.minsn_t.set_combinable(): - - set_combinable(self) - - -ida_hexrays.minsn_t.set_extstx(): - - set_extstx(self) - - -ida_hexrays.minsn_t.set_farcall(): - - set_farcall(self) - - -ida_hexrays.minsn_t.set_fpinsn(): - - set_fpinsn(self) - - -ida_hexrays.minsn_t.set_ignlowsrc(): - - set_ignlowsrc(self) - - -ida_hexrays.minsn_t.set_inverted_jx(): - - set_inverted_jx(self) - - -ida_hexrays.minsn_t.set_multimov(): - - set_multimov(self) - - -ida_hexrays.minsn_t.set_noret_icall(): - - set_noret_icall(self) - - -ida_hexrays.minsn_t.set_optional(): - - set_optional(self) - - -ida_hexrays.minsn_t.set_persistent(): - - set_persistent(self) - - -ida_hexrays.minsn_t.set_split_size(): - - set_split_size(self, s) - - -ida_hexrays.minsn_t.set_tailcall(): - - set_tailcall(self) - - -ida_hexrays.minsn_t.set_wild_match(): - - set_wild_match(self) - - -ida_hexrays.minsn_t.setaddr(): - - setaddr(self, new_ea) - - -ida_hexrays.minsn_t.swap(): - - swap(self, m) - - -ida_hexrays.minsn_t.was_noret_icall(): - - was_noret_icall(self) -> bool - - -ida_hexrays.minsn_t.was_split(): - - was_split(self) -> bool - - -class ida_hexrays.minsn_visitor_t(): - - Proxy of C++ minsn_visitor_t class - - -ida_hexrays.minsn_visitor_t.blk: - op_parent_info_t_blk_get(self) -> mblock_t - -ida_hexrays.minsn_visitor_t.curins: - op_parent_info_t_curins_get(self) -> minsn_t - -ida_hexrays.minsn_visitor_t.mba: - op_parent_info_t_mba_get(self) -> mbl_array_t - -ida_hexrays.minsn_visitor_t.topins: - op_parent_info_t_topins_get(self) -> minsn_t - -ida_hexrays.minsn_visitor_t.visit_minsn(): - - visit_minsn(self) -> int - - -class ida_hexrays.mlist_mop_visitor_t(): - - Proxy of C++ mlist_mop_visitor_t class - - -ida_hexrays.mlist_mop_visitor_t.changed: - mlist_mop_visitor_t_changed_get(self) -> bool - -ida_hexrays.mlist_mop_visitor_t.curins: - mlist_mop_visitor_t_curins_get(self) -> minsn_t - -ida_hexrays.mlist_mop_visitor_t.list: - mlist_mop_visitor_t_list_get(self) -> mlist_t - -ida_hexrays.mlist_mop_visitor_t.topins: - mlist_mop_visitor_t_topins_get(self) -> minsn_t - -ida_hexrays.mlist_mop_visitor_t.visit_mop(): - - visit_mop(self, op) -> int - - -class ida_hexrays.mlist_t(): - - Proxy of C++ mlist_t class - - -ida_hexrays.mlist_t._print(): - - _print(self) - - -ida_hexrays.mlist_t.add(): - - add(self, r, size) -> bool - add(self, r) -> bool - add(self, ivl) -> bool - add(self, lst) -> bool - - -ida_hexrays.mlist_t.addmem(): - - addmem(self, ea, size) -> bool - - -ida_hexrays.mlist_t.clear(): - - clear(self) - - -ida_hexrays.mlist_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.mlist_t.count(): - - count(self) -> asize_t - - -ida_hexrays.mlist_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mlist_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mlist_t.has(): - - has(self, r) -> bool - - -ida_hexrays.mlist_t.has_all(): - - has_all(self, r, size) -> bool - - -ida_hexrays.mlist_t.has_any(): - - has_any(self, r, size) -> bool - - -ida_hexrays.mlist_t.has_common(): - - has_common(self, lst) -> bool - - -ida_hexrays.mlist_t.has_memory(): - - has_memory(self) -> bool - - -ida_hexrays.mlist_t.includes(): - - includes(self, lst) -> bool - - -ida_hexrays.mlist_t.intersect(): - - intersect(self, lst) -> bool - - -ida_hexrays.mlist_t.is_subset_of(): - - is_subset_of(self, lst) -> bool - - -ida_hexrays.mlist_t.mem: - mlist_t_mem_get(self) -> ivlset_t - -ida_hexrays.mlist_t.reg: - mlist_t_reg_get(self) -> rlist_t - -ida_hexrays.mlist_t.sub(): - - sub(self, r, size) -> bool - sub(self, ivl) -> bool - sub(self, lst) -> bool - - -ida_hexrays.mlist_t.swap(): - - swap(self, r) - - -class ida_hexrays.mnumber_t(): - - Proxy of C++ mnumber_t class - - -ida_hexrays.mnumber_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.mnumber_t.ea: - operand_locator_t_ea_get(self) -> ea_t - -ida_hexrays.mnumber_t.opnum: - operand_locator_t_opnum_get(self) -> int - -ida_hexrays.mnumber_t.org_value: - mnumber_t_org_value_get(self) -> uint64 - -ida_hexrays.mnumber_t.update_value(): - - update_value(self, val64) - - -ida_hexrays.mnumber_t.value: - mnumber_t_value_get(self) -> uint64 - -ida_hexrays.modify_user_lvars(): - - modify_user_lvars(entry_ea, mlv) -> bool - - - Modify saved local variable settings. - - @param entry_ea: function start address (C++: ea_t) - @param mlv: local variable modifier (C++: user_lvar_modifier_t &) - @return: true if modified variables - - -class ida_hexrays.mop_addr_t(): - - Proxy of C++ mop_addr_t class - - -ida_hexrays.mop_addr_t._print(): - - _print(self, shins_flags=0x04|0x02) - - -ida_hexrays.mop_addr_t.apply_ld_mcode(): - - apply_ld_mcode(self, mcode, ea, newsize) - - -ida_hexrays.mop_addr_t.apply_xds(): - - apply_xds(self, ea, newsize) - - -ida_hexrays.mop_addr_t.apply_xdu(): - - apply_xdu(self, ea, newsize) - - -ida_hexrays.mop_addr_t.assign(): - - assign(self, rop) -> mop_t - - -ida_hexrays.mop_addr_t.change_size(): - - change_size(self, nsize, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mop_addr_t.create_from_insn(): - - create_from_insn(self, m) - - -ida_hexrays.mop_addr_t.create_from_ivlset(): - - create_from_ivlset(self, mba, ivs, fullsize) -> bool - - -ida_hexrays.mop_addr_t.create_from_mlist(): - - create_from_mlist(self, mba, lst, fullsize) -> bool - - -ida_hexrays.mop_addr_t.create_from_scattered_vdloc(): - - create_from_scattered_vdloc(self, mba, name, type, loc) - - -ida_hexrays.mop_addr_t.create_from_vdloc(): - - create_from_vdloc(self, mba, loc, _size) - - -ida_hexrays.mop_addr_t.double_size(): - - double_size(self, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mop_addr_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mop_addr_t.equal_mops(): - - equal_mops(self, rop, eqflags) -> bool - - -ida_hexrays.mop_addr_t.erase(): - - erase(self) - - -ida_hexrays.mop_addr_t.erase_but_keep_size(): - - erase_but_keep_size(self) - - -ida_hexrays.mop_addr_t.for_all_ops(): - - for_all_ops(self, mv, type=None, is_target=False) -> int - - -ida_hexrays.mop_addr_t.for_all_scattered_submops(): - - for_all_scattered_submops(self, sv) -> int - - -ida_hexrays.mop_addr_t.get_insn(): - - get_insn(self, code) -> minsn_t - get_insn(self, code) -> minsn_t - - -ida_hexrays.mop_addr_t.get_stkoff(): - - get_stkoff(self, p_off) -> bool - - -ida_hexrays.mop_addr_t.get_stkvar(): - - get_stkvar(self, p_off) -> member_t * - - -ida_hexrays.mop_addr_t.has_side_effects(): - - has_side_effects(self, include_ldx_and_divs=False) -> bool - - -ida_hexrays.mop_addr_t.insize: - mop_addr_t_insize_get(self) -> int - -ida_hexrays.mop_addr_t.is01(): - - is01(self) -> bool - - -ida_hexrays.mop_addr_t.is_bit_reg(): - - is_bit_reg(self, reg) -> bool - is_bit_reg(self) -> bool - - -ida_hexrays.mop_addr_t.is_cc(): - - is_cc(self) -> bool - - -ida_hexrays.mop_addr_t.is_ccflags(): - - is_ccflags(self) -> bool - - -ida_hexrays.mop_addr_t.is_constant(): - - is_constant(self, is_signed=True) -> bool - - -ida_hexrays.mop_addr_t.is_equal_to(): - - is_equal_to(self, n, is_signed=True) -> bool - - -ida_hexrays.mop_addr_t.is_extended_from(): - - is_extended_from(self, nbytes, is_signed) -> bool - - -ida_hexrays.mop_addr_t.is_glbaddr(): - - is_glbaddr(self) -> bool - is_glbaddr(self, ea) -> bool - - -ida_hexrays.mop_addr_t.is_impptr_done(): - - is_impptr_done(self) -> bool - - -ida_hexrays.mop_addr_t.is_insn(): - - is_insn(self) -> bool - is_insn(self, code) -> bool - - -ida_hexrays.mop_addr_t.is_kreg(): - - is_kreg(self) -> bool - - -ida_hexrays.mop_addr_t.is_mob(): - - is_mob(self, serial) -> bool - - -ida_hexrays.mop_addr_t.is_negative_constant(): - - is_negative_constant(self) -> bool - - -ida_hexrays.mop_addr_t.is_one(): - - is_one(self) -> bool - - -ida_hexrays.mop_addr_t.is_positive_constant(): - - is_positive_constant(self) -> bool - - -ida_hexrays.mop_addr_t.is_reg(): - - is_reg(self) -> bool - is_reg(self, _r) -> bool - is_reg(self, _r, _size) -> bool - - -ida_hexrays.mop_addr_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.mop_addr_t.is_sign_extended_from(): - - is_sign_extended_from(self, nbytes) -> bool - - -ida_hexrays.mop_addr_t.is_stkaddr(): - - is_stkaddr(self) -> bool - - -ida_hexrays.mop_addr_t.is_udt(): - - is_udt(self) -> bool - - -ida_hexrays.mop_addr_t.is_undef_val(): - - is_undef_val(self) -> bool - - -ida_hexrays.mop_addr_t.is_zero(): - - is_zero(self) -> bool - - -ida_hexrays.mop_addr_t.is_zero_extended_from(): - - is_zero_extended_from(self, nbytes) -> bool - - -ida_hexrays.mop_addr_t.lexcompare(): - - lexcompare(self, ra) -> int - - -ida_hexrays.mop_addr_t.make_blkref(): - - make_blkref(self, blknum) - - -ida_hexrays.mop_addr_t.make_first_half(): - - make_first_half(self, width) -> bool - - -ida_hexrays.mop_addr_t.make_fpnum(): - - make_fpnum(self, bytes, _size) -> bool - - -ida_hexrays.mop_addr_t.make_gvar(): - - make_gvar(self, ea) - - -ida_hexrays.mop_addr_t.make_helper(): - - make_helper(self, name) - - -ida_hexrays.mop_addr_t.make_high_half(): - - make_high_half(self, width) -> bool - - -ida_hexrays.mop_addr_t.make_insn(): - - make_insn(self, ins) - - -ida_hexrays.mop_addr_t.make_low_half(): - - make_low_half(self, width) -> bool - - -ida_hexrays.mop_addr_t.make_number(): - - make_number(self, _value, _size, _ea=BADADDR, opnum=0) - - -ida_hexrays.mop_addr_t.make_reg(): - - make_reg(self, reg) - make_reg(self, reg, _size) - - -ida_hexrays.mop_addr_t.make_reg_pair(): - - make_reg_pair(self, loreg, hireg, halfsize) - - -ida_hexrays.mop_addr_t.make_second_half(): - - make_second_half(self, width) -> bool - - -ida_hexrays.mop_addr_t.may_use_aliased_memory(): - - may_use_aliased_memory(self) -> bool - - -ida_hexrays.mop_addr_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.mop_addr_t.oprops: - mop_t_oprops_get(self) -> uint8 - -ida_hexrays.mop_addr_t.outsize: - mop_addr_t_outsize_get(self) -> int - -ida_hexrays.mop_addr_t.preserve_side_effects(): - - preserve_side_effects(self, blk, top, moved_calls=None) -> bool - - -ida_hexrays.mop_addr_t.probably_floating(): - - probably_floating(self) -> bool - - -ida_hexrays.mop_addr_t.set_impptr_done(): - - set_impptr_done(self) - - -ida_hexrays.mop_addr_t.set_udt(): - - set_udt(self) - - -ida_hexrays.mop_addr_t.set_undef_val(): - - set_undef_val(self) - - -ida_hexrays.mop_addr_t.shift_mop(): - - shift_mop(self, offset) -> bool - - -ida_hexrays.mop_addr_t.signed_value(): - - signed_value(self) -> int64 - - -ida_hexrays.mop_addr_t.size: - mop_t_size_get(self) -> int - -ida_hexrays.mop_addr_t.swap(): - - swap(self, rop) - - -ida_hexrays.mop_addr_t.t: - - _get_t(self) -> mopt_t - - -ida_hexrays.mop_addr_t.unsigned_value(): - - unsigned_value(self) -> uint64 - - -ida_hexrays.mop_addr_t.valnum: - mop_t_valnum_get(self) -> uint16 - -ida_hexrays.mop_addr_t.value(): - - value(self, is_signed) -> uint64 - - -ida_hexrays.mop_addr_t.zero(): - - zero(self) - - -class ida_hexrays.mop_pair_t(): - - Proxy of C++ mop_pair_t class - - -ida_hexrays.mop_pair_t.hop: - mop_pair_t_hop_get(self) -> mop_t - -ida_hexrays.mop_pair_t.lop: - mop_pair_t_lop_get(self) -> mop_t - -class ida_hexrays.mop_t(): - - Proxy of C++ mop_t class - - -ida_hexrays.mop_t._print(): - - _print(self, shins_flags=0x04|0x02) - - -ida_hexrays.mop_t.apply_ld_mcode(): - - apply_ld_mcode(self, mcode, ea, newsize) - - -ida_hexrays.mop_t.apply_xds(): - - apply_xds(self, ea, newsize) - - -ida_hexrays.mop_t.apply_xdu(): - - apply_xdu(self, ea, newsize) - - -ida_hexrays.mop_t.assign(): - - assign(self, rop) -> mop_t - - -ida_hexrays.mop_t.change_size(): - - change_size(self, nsize, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mop_t.create_from_insn(): - - create_from_insn(self, m) - - -ida_hexrays.mop_t.create_from_ivlset(): - - create_from_ivlset(self, mba, ivs, fullsize) -> bool - - -ida_hexrays.mop_t.create_from_mlist(): - - create_from_mlist(self, mba, lst, fullsize) -> bool - - -ida_hexrays.mop_t.create_from_scattered_vdloc(): - - create_from_scattered_vdloc(self, mba, name, type, loc) - - -ida_hexrays.mop_t.create_from_vdloc(): - - create_from_vdloc(self, mba, loc, _size) - - -ida_hexrays.mop_t.double_size(): - - double_size(self, sideff=WITH_SIDEFF) -> bool - - -ida_hexrays.mop_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.mop_t.equal_mops(): - - equal_mops(self, rop, eqflags) -> bool - - -ida_hexrays.mop_t.erase(): - - erase(self) - - -ida_hexrays.mop_t.erase_but_keep_size(): - - erase_but_keep_size(self) - - -ida_hexrays.mop_t.for_all_ops(): - - for_all_ops(self, mv, type=None, is_target=False) -> int - - -ida_hexrays.mop_t.for_all_scattered_submops(): - - for_all_scattered_submops(self, sv) -> int - - -ida_hexrays.mop_t.get_insn(): - - get_insn(self, code) -> minsn_t - get_insn(self, code) -> minsn_t - - -ida_hexrays.mop_t.get_stkoff(): - - get_stkoff(self, p_off) -> bool - - -ida_hexrays.mop_t.get_stkvar(): - - get_stkvar(self, p_off) -> member_t * - - -ida_hexrays.mop_t.has_side_effects(): - - has_side_effects(self, include_ldx_and_divs=False) -> bool - - -ida_hexrays.mop_t.is01(): - - is01(self) -> bool - - -ida_hexrays.mop_t.is_bit_reg(): - - is_bit_reg(self, reg) -> bool - is_bit_reg(self) -> bool - - -ida_hexrays.mop_t.is_cc(): - - is_cc(self) -> bool - - -ida_hexrays.mop_t.is_ccflags(): - - is_ccflags(self) -> bool - - -ida_hexrays.mop_t.is_constant(): - - is_constant(self, is_signed=True) -> bool - - -ida_hexrays.mop_t.is_equal_to(): - - is_equal_to(self, n, is_signed=True) -> bool - - -ida_hexrays.mop_t.is_extended_from(): - - is_extended_from(self, nbytes, is_signed) -> bool - - -ida_hexrays.mop_t.is_glbaddr(): - - is_glbaddr(self) -> bool - is_glbaddr(self, ea) -> bool - - -ida_hexrays.mop_t.is_impptr_done(): - - is_impptr_done(self) -> bool - - -ida_hexrays.mop_t.is_insn(): - - is_insn(self) -> bool - is_insn(self, code) -> bool - - -ida_hexrays.mop_t.is_kreg(): - - is_kreg(self) -> bool - - -ida_hexrays.mop_t.is_mob(): - - is_mob(self, serial) -> bool - - -ida_hexrays.mop_t.is_negative_constant(): - - is_negative_constant(self) -> bool - - -ida_hexrays.mop_t.is_one(): - - is_one(self) -> bool - - -ida_hexrays.mop_t.is_positive_constant(): - - is_positive_constant(self) -> bool - - -ida_hexrays.mop_t.is_reg(): - - is_reg(self) -> bool - is_reg(self, _r) -> bool - is_reg(self, _r, _size) -> bool - - -ida_hexrays.mop_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.mop_t.is_sign_extended_from(): - - is_sign_extended_from(self, nbytes) -> bool - - -ida_hexrays.mop_t.is_stkaddr(): - - is_stkaddr(self) -> bool - - -ida_hexrays.mop_t.is_udt(): - - is_udt(self) -> bool - - -ida_hexrays.mop_t.is_undef_val(): - - is_undef_val(self) -> bool - - -ida_hexrays.mop_t.is_zero(): - - is_zero(self) -> bool - - -ida_hexrays.mop_t.is_zero_extended_from(): - - is_zero_extended_from(self, nbytes) -> bool - - -ida_hexrays.mop_t.lexcompare(): - - lexcompare(self, rop) -> int - - -ida_hexrays.mop_t.make_blkref(): - - make_blkref(self, blknum) - - -ida_hexrays.mop_t.make_first_half(): - - make_first_half(self, width) -> bool - - -ida_hexrays.mop_t.make_fpnum(): - - make_fpnum(self, bytes, _size) -> bool - - -ida_hexrays.mop_t.make_gvar(): - - make_gvar(self, ea) - - -ida_hexrays.mop_t.make_helper(): - - make_helper(self, name) - - -ida_hexrays.mop_t.make_high_half(): - - make_high_half(self, width) -> bool - - -ida_hexrays.mop_t.make_insn(): - - make_insn(self, ins) - - -ida_hexrays.mop_t.make_low_half(): - - make_low_half(self, width) -> bool - - -ida_hexrays.mop_t.make_number(): - - make_number(self, _value, _size, _ea=BADADDR, opnum=0) - - -ida_hexrays.mop_t.make_reg(): - - make_reg(self, reg) - make_reg(self, reg, _size) - - -ida_hexrays.mop_t.make_reg_pair(): - - make_reg_pair(self, loreg, hireg, halfsize) - - -ida_hexrays.mop_t.make_second_half(): - - make_second_half(self, width) -> bool - - -ida_hexrays.mop_t.may_use_aliased_memory(): - - may_use_aliased_memory(self) -> bool - - -ida_hexrays.mop_t.obj_id: - - _obj_id(self) -> PyObject * - - -ida_hexrays.mop_t.oprops: - mop_t_oprops_get(self) -> uint8 - -ida_hexrays.mop_t.preserve_side_effects(): - - preserve_side_effects(self, blk, top, moved_calls=None) -> bool - - -ida_hexrays.mop_t.probably_floating(): - - probably_floating(self) -> bool - - -ida_hexrays.mop_t.set_impptr_done(): - - set_impptr_done(self) - - -ida_hexrays.mop_t.set_udt(): - - set_udt(self) - - -ida_hexrays.mop_t.set_undef_val(): - - set_undef_val(self) - - -ida_hexrays.mop_t.shift_mop(): - - shift_mop(self, offset) -> bool - - -ida_hexrays.mop_t.signed_value(): - - signed_value(self) -> int64 - - -ida_hexrays.mop_t.size: - mop_t_size_get(self) -> int - -ida_hexrays.mop_t.swap(): - - swap(self, rop) - - -ida_hexrays.mop_t.t: - - _get_t(self) -> mopt_t - - -ida_hexrays.mop_t.unsigned_value(): - - unsigned_value(self) -> uint64 - - -ida_hexrays.mop_t.valnum: - mop_t_valnum_get(self) -> uint16 - -ida_hexrays.mop_t.value(): - - value(self, is_signed) -> uint64 - - -ida_hexrays.mop_t.zero(): - - zero(self) - - -class ida_hexrays.mop_visitor_t(): - - Proxy of C++ mop_visitor_t class - - -ida_hexrays.mop_visitor_t.blk: - op_parent_info_t_blk_get(self) -> mblock_t - -ida_hexrays.mop_visitor_t.curins: - op_parent_info_t_curins_get(self) -> minsn_t - -ida_hexrays.mop_visitor_t.mba: - op_parent_info_t_mba_get(self) -> mbl_array_t - -ida_hexrays.mop_visitor_t.prune: - mop_visitor_t_prune_get(self) -> bool - -ida_hexrays.mop_visitor_t.topins: - op_parent_info_t_topins_get(self) -> minsn_t - -ida_hexrays.mop_visitor_t.visit_mop(): - - visit_mop(self, op, type, is_target) -> int - - -class ida_hexrays.mopvec_t(): - - Proxy of C++ qvector<(mop_t)> class - - -ida_hexrays.mopvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.mopvec_t.at(): - - at(self, _idx) -> mop_t - - -ida_hexrays.mopvec_t.begin(): - - begin(self) -> mop_t - begin(self) -> mop_t - - -ida_hexrays.mopvec_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.mopvec_t.clear(): - - clear(self) - - -ida_hexrays.mopvec_t.empty(): - - empty(self) -> bool - - -ida_hexrays.mopvec_t.end(): - - end(self) -> mop_t - end(self) -> mop_t - - -ida_hexrays.mopvec_t.erase(): - - erase(self, it) -> mop_t - erase(self, first, last) -> mop_t - - -ida_hexrays.mopvec_t.extract(): - - extract(self) -> mop_t - - -ida_hexrays.mopvec_t.find(): - - find(self, x) -> mop_t - find(self, x) -> mop_t - - -ida_hexrays.mopvec_t.grow(): - - grow(self, x=mop_t()) - - -ida_hexrays.mopvec_t.has(): - - has(self, x) -> bool - - -ida_hexrays.mopvec_t.inject(): - - inject(self, s, len) - - -ida_hexrays.mopvec_t.insert(): - - insert(self, it, x) -> mop_t - - -ida_hexrays.mopvec_t.pop_back(): - - pop_back(self) - - -ida_hexrays.mopvec_t.push_back(): - - push_back(self, x) - push_back(self) -> mop_t - - -ida_hexrays.mopvec_t.qclear(): - - qclear(self) - - -ida_hexrays.mopvec_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.mopvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.mopvec_t.size(): - - size(self) -> size_t - - -ida_hexrays.mopvec_t.swap(): - - swap(self, r) - - -ida_hexrays.mopvec_t.truncate(): - - truncate(self) - - -ida_hexrays.mreg2reg(): - - mreg2reg(reg, width) -> int - - - Map a microregister to processor register. - - @param reg: microregister number (C++: mreg_t) - @param width: size of microregister in bytes (C++: int) - @return: processor register id or -1 - - -ida_hexrays.must_mcode_close_block(): - - must_mcode_close_block(mcode, including_calls) -> bool - - - Must an instruction with the given opcode be the last one in a block? - Such opcodes are called closing opcodes. - - @param mcode: instruction opcode (C++: mcode_t) - @param including_calls: should m_call/m_icall be considered as the - closing opcodes? If this function returns - true, the opcode cannot appear in the middle - of a block. Calls are a special case because - before MMAT_CALLS they are closing opcodes. - Afteer MMAT_CALLS that are not considered as - closing opcodes. (C++: bool) - - -ida_hexrays.negate_mcode_relation(): - - negate_mcode_relation(code) -> mcode_t - - -ida_hexrays.negated_relation(): - - negated_relation(op) -> ctype_t - - - Negate a comparison operator. For example, cot_sge becomes cot_slt. - - - @param op (C++: ctype_t) - - -class ida_hexrays.number_format_t(): - - Proxy of C++ number_format_t class - - -ida_hexrays.number_format_t.flags: - number_format_t_flags_get(self) -> flags_t - -ida_hexrays.number_format_t.get_radix(): - - get_radix(self) -> int - - -ida_hexrays.number_format_t.is_char(): - - is_char(self) -> bool - - -ida_hexrays.number_format_t.is_dec(): - - is_dec(self) -> bool - - -ida_hexrays.number_format_t.is_enum(): - - is_enum(self) -> bool - - -ida_hexrays.number_format_t.is_fixed(): - - is_fixed(self) -> bool - - -ida_hexrays.number_format_t.is_hex(): - - is_hex(self) -> bool - - -ida_hexrays.number_format_t.is_numop(): - - is_numop(self) -> bool - - -ida_hexrays.number_format_t.is_oct(): - - is_oct(self) -> bool - - -ida_hexrays.number_format_t.is_stroff(): - - is_stroff(self) -> bool - - -ida_hexrays.number_format_t.needs_to_be_inverted(): - - needs_to_be_inverted(self) -> bool - - -ida_hexrays.number_format_t.opnum: - number_format_t_opnum_get(self) -> char - -ida_hexrays.number_format_t.org_nbytes: - number_format_t_org_nbytes_get(self) -> char - -ida_hexrays.number_format_t.props: - number_format_t_props_get(self) -> char - -ida_hexrays.number_format_t.serial: - number_format_t_serial_get(self) -> uchar - -ida_hexrays.number_format_t.type_name: - number_format_t_type_name_get(self) -> qstring * - -class ida_hexrays.op_parent_info_t(): - - Proxy of C++ op_parent_info_t class - - -ida_hexrays.op_parent_info_t.blk: - op_parent_info_t_blk_get(self) -> mblock_t - -ida_hexrays.op_parent_info_t.curins: - op_parent_info_t_curins_get(self) -> minsn_t - -ida_hexrays.op_parent_info_t.mba: - op_parent_info_t_mba_get(self) -> mbl_array_t - -ida_hexrays.op_parent_info_t.topins: - op_parent_info_t_topins_get(self) -> minsn_t - -ida_hexrays.op_uses_x(): - - op_uses_x(op) -> bool - - - Does operator use the 'x' field of 'cexpr_t' ? - - - @param op (C++: ctype_t) - - -ida_hexrays.op_uses_y(): - - op_uses_y(op) -> bool - - - Does operator use the 'y' field of 'cexpr_t' ? - - - @param op (C++: ctype_t) - - -ida_hexrays.op_uses_z(): - - op_uses_z(op) -> bool - - - Does operator use the 'z' field of 'cexpr_t' ? - - - @param op (C++: ctype_t) - - -ida_hexrays.open_pseudocode(): - - open_pseudocode(ea, new_window) -> vdui_t - - - Open pseudocode window. The specified function is decompiled and the - pseudocode window is opened. - - @param ea: function to decompile (C++: ea_t) - @param new_window: 0:reuse existing window; 1:open new window; -1: - reuse existing window if the current view is - pseudocode (C++: int) - @return: false if failed - - -class ida_hexrays.operand_locator_t(): - - Proxy of C++ operand_locator_t class - - -ida_hexrays.operand_locator_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.operand_locator_t.ea: - operand_locator_t_ea_get(self) -> ea_t - -ida_hexrays.operand_locator_t.opnum: - operand_locator_t_opnum_get(self) -> int - -class ida_hexrays.operator_info_t(): - - Proxy of C++ operator_info_t class - - -ida_hexrays.operator_info_t.fixtype: - operator_info_t_fixtype_get(self) -> uchar - -ida_hexrays.operator_info_t.flags: - operator_info_t_flags_get(self) -> uchar - -ida_hexrays.operator_info_t.precedence: - operator_info_t_precedence_get(self) -> uchar - -ida_hexrays.operator_info_t.text: - operator_info_t_text_get(self) -> char const * - -ida_hexrays.operator_info_t.valency: - operator_info_t_valency_get(self) -> uchar - -class ida_hexrays.optblock_t(): - - Proxy of C++ optblock_t class - - -ida_hexrays.optblock_t.func(): - - func(self, blk) -> int - - -ida_hexrays.optblock_t.install(): - - install(self) - - -ida_hexrays.optblock_t.remove(): - - remove(self) -> bool - - -class ida_hexrays.optinsn_t(): - - Proxy of C++ optinsn_t class - - -ida_hexrays.optinsn_t.func(): - - func(self, blk, ins) -> int - - -ida_hexrays.optinsn_t.install(): - - install(self) - - -ida_hexrays.optinsn_t.remove(): - - remove(self) -> bool - - -ida_hexrays.parse_user_call(): - - parse_user_call(udc, decl, silent) -> bool - - - Convert function type declaration into internal structure - - @param udc: - pointer to output structure (C++: udcall_t *) - @param decl: - function type declaration (C++: const char *) - @param silent: - if TRUE: do not show warning in case of incorrect - type (C++: bool) - @return: success - - -ida_hexrays.partial_type_num(): - - partial_type_num(type) -> int - - - Calculate number of partial subtypes. - - @param type (C++: const tinfo_t &) - @return: number of partial subtypes. The bigger is this number, the - uglier is the type. - - -ida_hexrays.print_vdloc(): - - print_vdloc(loc, nbytes) - - - Print vdloc. Since vdloc does not always carry the size info, we pass - it as NBYTES.. - - @param loc (C++: const vdloc_t &) - @param nbytes (C++: int) - - -class ida_hexrays.qlist_cinsn_t(): - - Proxy of C++ qlist<(cinsn_t)> class - - -ida_hexrays.qlist_cinsn_t.back(): - - back(self) -> cinsn_t - back(self) -> cinsn_t - - -ida_hexrays.qlist_cinsn_t.begin(): - - begin(self) -> qlist_cinsn_t_iterator - - -ida_hexrays.qlist_cinsn_t.clear(): - - clear(self) - - -ida_hexrays.qlist_cinsn_t.empty(): - - empty(self) -> bool - - -ida_hexrays.qlist_cinsn_t.end(): - - end(self) -> qlist_cinsn_t_iterator - - -ida_hexrays.qlist_cinsn_t.erase(): - - erase(self, p) -> qlist< cinsn_t >::iterator - erase(self, p1, p2) - erase(self, p) - - -ida_hexrays.qlist_cinsn_t.front(): - - front(self) -> cinsn_t - front(self) -> cinsn_t - - -ida_hexrays.qlist_cinsn_t.insert(): - - insert(self, p, x) -> qlist< cinsn_t >::iterator - insert(self, p) -> qlist< cinsn_t >::iterator - insert(self, p, x) -> qlist_cinsn_t_iterator - - -ida_hexrays.qlist_cinsn_t.pop_back(): - - pop_back(self) - - -ida_hexrays.qlist_cinsn_t.pop_front(): - - pop_front(self) - - -ida_hexrays.qlist_cinsn_t.push_back(): - - push_back(self, x) - push_back(self) -> cinsn_t - - -ida_hexrays.qlist_cinsn_t.push_front(): - - push_front(self, x) - - -ida_hexrays.qlist_cinsn_t.rbegin(): - - rbegin(self) -> qlist< cinsn_t >::reverse_iterator - rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator - - -ida_hexrays.qlist_cinsn_t.rend(): - - rend(self) -> qlist< cinsn_t >::reverse_iterator - rend(self) -> qlist< cinsn_t >::const_reverse_iterator - - -ida_hexrays.qlist_cinsn_t.size(): - - size(self) -> size_t - - -ida_hexrays.qlist_cinsn_t.swap(): - - swap(self, x) - - -class ida_hexrays.qlist_cinsn_t_iterator(): - - Proxy of C++ qlist_cinsn_t_iterator class - - -ida_hexrays.qlist_cinsn_t_iterator.cur: - qlist_cinsn_t_iterator_cur_get(self) -> cinsn_t - -ida_hexrays.qlist_cinsn_t_iterator.next(): - - next(self) - - -class ida_hexrays.qstring_printer_t(): - - Proxy of C++ qstring_printer_t class - - -ida_hexrays.qstring_printer_t._print(): - - _print(self, indent, format) -> int - - -ida_hexrays.qstring_printer_t.func: - vc_printer_t_func_get(self) -> cfunc_t - -ida_hexrays.qstring_printer_t.get_s(): - - get_s(self) -> qstring - - -ida_hexrays.qstring_printer_t.hdrlines: - vd_printer_t_hdrlines_get(self) -> int - -ida_hexrays.qstring_printer_t.lastchar: - vc_printer_t_lastchar_get(self) -> char - -ida_hexrays.qstring_printer_t.oneliner(): - - oneliner(self) -> bool - - -ida_hexrays.qstring_printer_t.tmpbuf: - vd_printer_t_tmpbuf_get(self) -> qstring * - -ida_hexrays.qstring_printer_t.with_tags: - qstring_printer_t_with_tags_get(self) -> bool - -ida_hexrays.qswap(): - - qswap(a, b) - - -class ida_hexrays.qvector_carg_t(): - - Proxy of C++ qvector<(carg_t)> class - - -ida_hexrays.qvector_carg_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.qvector_carg_t.append(): - - push_back(self, x) - push_back(self) -> carg_t - - -ida_hexrays.qvector_carg_t.at(): - - __getitem__(self, i) -> carg_t - - -ida_hexrays.qvector_carg_t.begin(): - - begin(self) -> carg_t - begin(self) -> carg_t - - -ida_hexrays.qvector_carg_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.qvector_carg_t.clear(): - - clear(self) - - -ida_hexrays.qvector_carg_t.empty(): - - empty(self) -> bool - - -ida_hexrays.qvector_carg_t.end(): - - end(self) -> carg_t - end(self) -> carg_t - - -ida_hexrays.qvector_carg_t.erase(): - - erase(self, it) -> carg_t - erase(self, first, last) -> carg_t - - -ida_hexrays.qvector_carg_t.extract(): - - extract(self) -> carg_t - - -ida_hexrays.qvector_carg_t.find(): - - find(self, x) -> carg_t - find(self, x) -> carg_t - - -ida_hexrays.qvector_carg_t.grow(): - - grow(self, x=carg_t()) - - -ida_hexrays.qvector_carg_t.has(): - - has(self, x) -> bool - - -ida_hexrays.qvector_carg_t.inject(): - - inject(self, s, len) - - -ida_hexrays.qvector_carg_t.insert(): - - insert(self, it, x) -> carg_t - - -ida_hexrays.qvector_carg_t.pop_back(): - - pop_back(self) - - -ida_hexrays.qvector_carg_t.push_back(): - - push_back(self, x) - push_back(self) -> carg_t - - -ida_hexrays.qvector_carg_t.qclear(): - - qclear(self) - - -ida_hexrays.qvector_carg_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.qvector_carg_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.qvector_carg_t.size(): - - size(self) -> size_t - - -ida_hexrays.qvector_carg_t.swap(): - - swap(self, r) - - -ida_hexrays.qvector_carg_t.truncate(): - - truncate(self) - - -class ida_hexrays.qvector_ccase_t(): - - Proxy of C++ qvector<(ccase_t)> class - - -ida_hexrays.qvector_ccase_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.qvector_ccase_t.append(): - - push_back(self, x) - push_back(self) -> ccase_t - - -ida_hexrays.qvector_ccase_t.at(): - - __getitem__(self, i) -> ccase_t - - -ida_hexrays.qvector_ccase_t.begin(): - - begin(self) -> ccase_t - begin(self) -> ccase_t - - -ida_hexrays.qvector_ccase_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.qvector_ccase_t.clear(): - - clear(self) - - -ida_hexrays.qvector_ccase_t.empty(): - - empty(self) -> bool - - -ida_hexrays.qvector_ccase_t.end(): - - end(self) -> ccase_t - end(self) -> ccase_t - - -ida_hexrays.qvector_ccase_t.erase(): - - erase(self, it) -> ccase_t - erase(self, first, last) -> ccase_t - - -ida_hexrays.qvector_ccase_t.extract(): - - extract(self) -> ccase_t - - -ida_hexrays.qvector_ccase_t.find(): - - find(self, x) -> ccase_t - find(self, x) -> ccase_t - - -ida_hexrays.qvector_ccase_t.grow(): - - grow(self, x=ccase_t()) - - -ida_hexrays.qvector_ccase_t.has(): - - has(self, x) -> bool - - -ida_hexrays.qvector_ccase_t.inject(): - - inject(self, s, len) - - -ida_hexrays.qvector_ccase_t.insert(): - - insert(self, it, x) -> ccase_t - - -ida_hexrays.qvector_ccase_t.pop_back(): - - pop_back(self) - - -ida_hexrays.qvector_ccase_t.push_back(): - - push_back(self, x) - push_back(self) -> ccase_t - - -ida_hexrays.qvector_ccase_t.qclear(): - - qclear(self) - - -ida_hexrays.qvector_ccase_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.qvector_ccase_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.qvector_ccase_t.size(): - - size(self) -> size_t - - -ida_hexrays.qvector_ccase_t.swap(): - - swap(self, r) - - -ida_hexrays.qvector_ccase_t.truncate(): - - truncate(self) - - -class ida_hexrays.qvector_history_t(): - - Proxy of C++ qvector<(history_item_t)> class - - -ida_hexrays.qvector_history_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.qvector_history_t.at(): - - at(self, _idx) -> history_item_t - - -ida_hexrays.qvector_history_t.begin(): - - begin(self) -> history_item_t - begin(self) -> history_item_t - - -ida_hexrays.qvector_history_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.qvector_history_t.clear(): - - clear(self) - - -ida_hexrays.qvector_history_t.empty(): - - empty(self) -> bool - - -ida_hexrays.qvector_history_t.end(): - - end(self) -> history_item_t - end(self) -> history_item_t - - -ida_hexrays.qvector_history_t.erase(): - - erase(self, it) -> history_item_t - erase(self, first, last) -> history_item_t - - -ida_hexrays.qvector_history_t.extract(): - - extract(self) -> history_item_t - - -ida_hexrays.qvector_history_t.find(): - - find(self, x) -> history_item_t - find(self, x) -> history_item_t - - -ida_hexrays.qvector_history_t.grow(): - - grow(self, x=history_item_t()) - - -ida_hexrays.qvector_history_t.has(): - - has(self, x) -> bool - - -ida_hexrays.qvector_history_t.inject(): - - inject(self, s, len) - - -ida_hexrays.qvector_history_t.insert(): - - insert(self, it, x) -> history_item_t - - -ida_hexrays.qvector_history_t.pop_back(): - - pop_back(self) - - -ida_hexrays.qvector_history_t.push_back(): - - push_back(self, x) - push_back(self) -> history_item_t - - -ida_hexrays.qvector_history_t.qclear(): - - qclear(self) - - -ida_hexrays.qvector_history_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.qvector_history_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.qvector_history_t.size(): - - size(self) -> size_t - - -ida_hexrays.qvector_history_t.swap(): - - swap(self, r) - - -ida_hexrays.qvector_history_t.truncate(): - - truncate(self) - - -class ida_hexrays.qvector_lvar_t(): - - Proxy of C++ qvector<(lvar_t)> class - - -ida_hexrays.qvector_lvar_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.qvector_lvar_t.append(): - - push_back(self, x) - push_back(self) -> lvar_t - - -ida_hexrays.qvector_lvar_t.at(): - - __getitem__(self, i) -> lvar_t - - -ida_hexrays.qvector_lvar_t.begin(): - - begin(self) -> lvar_t - begin(self) -> lvar_t - - -ida_hexrays.qvector_lvar_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.qvector_lvar_t.clear(): - - clear(self) - - -ida_hexrays.qvector_lvar_t.empty(): - - empty(self) -> bool - - -ida_hexrays.qvector_lvar_t.end(): - - end(self) -> lvar_t - end(self) -> lvar_t - - -ida_hexrays.qvector_lvar_t.erase(): - - erase(self, it) -> lvar_t - erase(self, first, last) -> lvar_t - - -ida_hexrays.qvector_lvar_t.extract(): - - extract(self) -> lvar_t - - -ida_hexrays.qvector_lvar_t.find(): - - find(self, x) -> lvar_t - find(self, x) -> lvar_t - - -ida_hexrays.qvector_lvar_t.grow(): - - grow(self, x=lvar_t()) - - -ida_hexrays.qvector_lvar_t.has(): - - has(self, x) -> bool - - -ida_hexrays.qvector_lvar_t.inject(): - - inject(self, s, len) - - -ida_hexrays.qvector_lvar_t.insert(): - - insert(self, it, x) -> lvar_t - - -ida_hexrays.qvector_lvar_t.pop_back(): - - pop_back(self) - - -ida_hexrays.qvector_lvar_t.push_back(): - - push_back(self, x) - push_back(self) -> lvar_t - - -ida_hexrays.qvector_lvar_t.qclear(): - - qclear(self) - - -ida_hexrays.qvector_lvar_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.qvector_lvar_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.qvector_lvar_t.size(): - - size(self) -> size_t - - -ida_hexrays.qvector_lvar_t.swap(): - - swap(self, r) - - -ida_hexrays.qvector_lvar_t.truncate(): - - truncate(self) - - -ida_hexrays.reg2mreg(): - - reg2mreg(reg) -> mreg_t - - - Map a processor register to microregister. - - @param reg: processor register number (C++: int) - @return: microregister register id or mr_none - - -ida_hexrays.remitem(): - - remitem(e) - - -ida_hexrays.remove_hexrays_callback(): - Deprecated. Please use Hexrays_Hooks instead - -ida_hexrays.restore_user_cmts(): - - restore_user_cmts(func_ea) -> user_cmts_t - - - Restore user defined comments from the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @return: collection of user defined comments. The returned object must - be deleted by the caller using delete_user_cmts() - - -ida_hexrays.restore_user_defined_calls(): - - restore_user_defined_calls(udcalls, func_ea) -> bool - - - Restore user defined function calls from the database. - - @param udcalls: ptr to output buffer (C++: udcall_map_t *) - @param func_ea: entry address of the function (C++: ea_t) - @return: success - - -ida_hexrays.restore_user_iflags(): - - restore_user_iflags(func_ea) -> user_iflags_t - - - Restore user defined citem iflags from the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @return: collection of user defined iflags. The returned object must - be deleted by the caller using delete_user_iflags() - - -ida_hexrays.restore_user_labels(): - - restore_user_labels(func_ea) -> user_labels_t - - - Restore user defined labels from the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @return: collection of user defined labels. The returned object must - be deleted by the caller using delete_user_labels() - - -ida_hexrays.restore_user_lvar_settings(): - - restore_user_lvar_settings(lvinf, func_ea) -> bool - - - Restore user defined local variable settings in the database. - - @param lvinf: ptr to output buffer (C++: lvar_uservec_t *) - @param func_ea: entry address of the function (C++: ea_t) - @return: success - - -ida_hexrays.restore_user_numforms(): - - restore_user_numforms(func_ea) -> user_numforms_t - - - Restore user defined number formats from the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @return: collection of user defined number formats. The returned - object must be deleted by the caller using - delete_user_numforms() - - -ida_hexrays.restore_user_unions(): - - restore_user_unions(func_ea) -> user_unions_t - - - Restore user defined union field selections from the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @return: collection of union field selections The returned object must - be deleted by the caller using delete_user_unions() - - -class ida_hexrays.rlist_t(): - - Proxy of C++ rlist_t class - - -ida_hexrays.rlist_t.add(): - - add(self, bit) -> bool - add(self, bit, width) -> bool - add(self, ml) -> bool - - -ida_hexrays.rlist_t.back(): - - back(self) -> int - - -ida_hexrays.rlist_t.begin(): - - begin(self) -> bitset_t::iterator - - -ida_hexrays.rlist_t.clear(): - - clear(self) - - -ida_hexrays.rlist_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.rlist_t.copy(): - - copy(self, m) -> bitset_t - - -ida_hexrays.rlist_t.count(): - - count(self) -> int - count(self, bit) -> int - - -ida_hexrays.rlist_t.cut_at(): - - cut_at(self, maxbit) -> bool - - -ida_hexrays.rlist_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.rlist_t.empty(): - - empty(self) -> bool - - -ida_hexrays.rlist_t.end(): - - end(self) -> bitset_t::iterator - - -ida_hexrays.rlist_t.fill_with_ones(): - - fill_with_ones(self, maxbit) - - -ida_hexrays.rlist_t.front(): - - front(self) -> int - - -ida_hexrays.rlist_t.has(): - - has(self, bit) -> bool - - -ida_hexrays.rlist_t.has_all(): - - has_all(self, bit, width) -> bool - - -ida_hexrays.rlist_t.has_any(): - - has_any(self, bit, width) -> bool - - -ida_hexrays.rlist_t.has_common(): - - has_common(self, ml) -> bool - - -ida_hexrays.rlist_t.inc(): - - inc(self, p, n=1) - - -ida_hexrays.rlist_t.includes(): - - includes(self, ml) -> bool - - -ida_hexrays.rlist_t.intersect(): - - intersect(self, ml) -> bool - - -ida_hexrays.rlist_t.is_subset_of(): - - is_subset_of(self, ml) -> bool - - -ida_hexrays.rlist_t.itat(): - - itat(self, n) -> bitset_t::iterator - - -ida_hexrays.rlist_t.itv(): - - itv(self, it) -> int - - -ida_hexrays.rlist_t.last(): - - last(self) -> int - - -ida_hexrays.rlist_t.shift_down(): - - shift_down(self, shift) - - -ida_hexrays.rlist_t.sub(): - - sub(self, bit) -> bool - sub(self, bit, width) -> bool - sub(self, ml) -> bool - - -ida_hexrays.rlist_t.swap(): - - swap(self, r) - - -ida_hexrays.save_user_cmts(): - - save_user_cmts(func_ea, user_cmts) - - - Save user defined comments into the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @param user_cmts: collection of user defined comments (C++: const - user_cmts_t *) - - -ida_hexrays.save_user_defined_calls(): - - save_user_defined_calls(func_ea, udcalls) - - - Save user defined local function calls into the database. - - @param func_ea: entry address of the function (C++: ea_t) - @param udcalls: user-specified info about user defined function calls - (C++: const udcall_map_t &) - - -ida_hexrays.save_user_iflags(): - - save_user_iflags(func_ea, iflags) - - - Save user defined citem iflags into the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @param iflags: collection of user defined citem iflags (C++: const - user_iflags_t *) - - -ida_hexrays.save_user_labels(): - - save_user_labels(func_ea, user_labels) - - - Save user defined labels into the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @param user_labels: collection of user defined labels (C++: const - user_labels_t *) - - -ida_hexrays.save_user_lvar_settings(): - - save_user_lvar_settings(func_ea, lvinf) - - - Save user defined local variable settings into the database. - - @param func_ea: entry address of the function (C++: ea_t) - @param lvinf: user-specified info about local variables (C++: const - lvar_uservec_t &) - - -ida_hexrays.save_user_numforms(): - - save_user_numforms(func_ea, numforms) - - - Save user defined number formats into the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @param numforms: collection of user defined comments (C++: const - user_numforms_t *) - - -ida_hexrays.save_user_unions(): - - save_user_unions(func_ea, unions) - - - Save user defined union field selections into the database. - - @param func_ea: the entry address of the function (C++: ea_t) - @param unions: collection of union field selections (C++: const - user_unions_t *) - - -class ida_hexrays.scif_t(): - - Proxy of C++ scif_t class - - -ida_hexrays.scif_t.advance(): - - advance(self, delta) -> bool - - -ida_hexrays.scif_t.atype(): - - atype(self) -> argloc_type_t - - -ida_hexrays.scif_t.calc_offset(): - - calc_offset(self) -> sval_t - - -ida_hexrays.scif_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.scif_t.consume_rrel(): - - consume_rrel(self, p) - - -ida_hexrays.scif_t.consume_scattered(): - - consume_scattered(self, p) - - -ida_hexrays.scif_t.get_biggest(): - - get_biggest(self) -> argloc_t::biggest_t - - -ida_hexrays.scif_t.get_custom(): - - get_custom(self) -> void * - - -ida_hexrays.scif_t.get_ea(): - - get_ea(self) -> ea_t - - -ida_hexrays.scif_t.get_reginfo(): - - get_reginfo(self) -> uint32 - - -ida_hexrays.scif_t.get_rrel(): - - get_rrel(self) -> rrel_t - get_rrel(self) -> rrel_t - - -ida_hexrays.scif_t.has_reg(): - - has_reg(self) -> bool - - -ida_hexrays.scif_t.has_stkoff(): - - has_stkoff(self) -> bool - - -ida_hexrays.scif_t.is_aliasable(): - - is_aliasable(self, mb, size) -> bool - - -ida_hexrays.scif_t.is_badloc(): - - is_badloc(self) -> bool - - -ida_hexrays.scif_t.is_custom(): - - is_custom(self) -> bool - - -ida_hexrays.scif_t.is_ea(): - - is_ea(self) -> bool - - -ida_hexrays.scif_t.is_fragmented(): - - is_fragmented(self) -> bool - - -ida_hexrays.scif_t.is_mixed_scattered(): - - is_mixed_scattered(self) -> bool - - -ida_hexrays.scif_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.scif_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_hexrays.scif_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_hexrays.scif_t.is_rrel(): - - is_rrel(self) -> bool - - -ida_hexrays.scif_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.scif_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_hexrays.scif_t.mba: - scif_t_mba_get(self) -> mbl_array_t - -ida_hexrays.scif_t.name: - scif_t_name_get(self) -> qstring * - -ida_hexrays.scif_t.reg1(): - - reg1(self) -> int - - -ida_hexrays.scif_t.reg2(): - - reg2(self) -> int - - -ida_hexrays.scif_t.regoff(): - - regoff(self) -> int - - -ida_hexrays.scif_t.scattered(): - - scattered(self) -> scattered_aloc_t - scattered(self) -> scattered_aloc_t - - -ida_hexrays.scif_t.set_badloc(): - - set_badloc(self) - - -ida_hexrays.scif_t.set_ea(): - - set_ea(self, _ea) - - -ida_hexrays.scif_t.set_reg1(): - - set_reg1(self, r1) - - -ida_hexrays.scif_t.set_reg2(): - - set_reg2(self, _reg1, _reg2) - - -ida_hexrays.scif_t.set_stkoff(): - - set_stkoff(self, off) - - -ida_hexrays.scif_t.stkoff(): - - stkoff(self) -> sval_t - - -ida_hexrays.scif_t.swap(): - - swap(self, r) - - -ida_hexrays.scif_t.type: - scif_t_type_get(self) -> tinfo_t - -class ida_hexrays.scif_visitor_t(): - - Proxy of C++ scif_visitor_t class - - -ida_hexrays.scif_visitor_t.visit_scif_mop(): - - visit_scif_mop(self, r, off) -> int - - -ida_hexrays.select_udt_by_offset(): - - select_udt_by_offset(udts, ops, applicator) -> int - - - Select UDT - - @param udts: list of UDT tinfo_t for the selection, if NULL or empty - then UDTs from the "Local types" will be used (C++: const - qvector < tinfo_t > *) - @param ops: operands (C++: const ui_stroff_ops_t &) - @param applicator (C++: ui_stroff_applicator_t &) - - -ida_hexrays.send_database(): - - send_database(err, silent) - - - Send the database to Hex-Rays. This function sends the current - database to the Hex-Rays server. The database is sent in the - compressed form over an encrypted (SSL) connection. - - @param err: failure description object. Empty hexrays_failure_t - object can be used if error information is not available. - (C++: const hexrays_failure_t &) - @param silent: if false, a dialog box will be displayed before sending - the database. (C++: bool) - - -ida_hexrays.set2jcnd(): - - set2jcnd(code) -> mcode_t - - -ida_hexrays.set_type(): - - set_type(id, tif, source, force=False) -> bool - - - Set a global type. - - @param id: address or id of the object (C++: uval_t) - @param tif: new type info (C++: const tinfo_t &) - @param source: where the type comes from (C++: type_source_t) - @param force: true means to set the type as is, false means to merge - the new type with the possibly existing old type info. - (C++: bool) - @return: success - - -class ida_hexrays.simple_graph_t(): - - Proxy of C++ simple_graph_t class - - -ida_hexrays.simple_graph_t.colored_gdl_edges: - simple_graph_t_colored_gdl_edges_get(self) -> bool - -ida_hexrays.simple_graph_t.title: - simple_graph_t_title_get(self) -> qstring * - -class ida_hexrays.stkvar_ref_t(): - - Proxy of C++ stkvar_ref_t class - - -ida_hexrays.stkvar_ref_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.stkvar_ref_t.get_stkvar(): - - get_stkvar(self, p_off=None) -> member_t * - - -ida_hexrays.stkvar_ref_t.mba: - stkvar_ref_t_mba_get(self) -> mbl_array_t - -ida_hexrays.stkvar_ref_t.off: - stkvar_ref_t_off_get(self) -> sval_t - -ida_hexrays.stkvar_ref_t.swap(): - - swap(self, r) - - -ida_hexrays.swap_mcode_relation(): - - swap_mcode_relation(code) -> mcode_t - - -ida_hexrays.swapped_relation(): - - swapped_relation(op) -> ctype_t - - - Swap a comparison operator. For example, cot_sge becomes cot_sle. - - - @param op (C++: ctype_t) - - -ida_hexrays.term_hexrays_plugin(): - - term_hexrays_plugin() - - - Stop working with hex-rays decompiler. - - -class ida_hexrays.treeloc_t(): - - Proxy of C++ treeloc_t class - - -ida_hexrays.treeloc_t.ea: - treeloc_t_ea_get(self) -> ea_t - -ida_hexrays.treeloc_t.itp: - treeloc_t_itp_get(self) -> item_preciser_t - -class ida_hexrays.udc_filter_t(): - - Proxy of C++ udc_filter_t class - - -ida_hexrays.udc_filter_t.apply(): - - apply(self, cdg) -> merror_t - - -ida_hexrays.udc_filter_t.init(): - - init(self, decl) -> bool - - -ida_hexrays.udc_filter_t.match(): - - match(self, cdg) -> bool - - -ida_hexrays.udcall_map_begin(): - - udcall_map_begin(map) -> udcall_map_iterator_t - - - Get iterator pointing to the beginning of udcall_map_t. - - - @param map (C++: const udcall_map_t *) - - -ida_hexrays.udcall_map_clear(): - - udcall_map_clear(map) - - - Clear udcall_map_t. - - - @param map (C++: udcall_map_t *) - - -ida_hexrays.udcall_map_end(): - - udcall_map_end(map) -> udcall_map_iterator_t - - - Get iterator pointing to the end of udcall_map_t. - - - @param map (C++: const udcall_map_t *) - - -ida_hexrays.udcall_map_erase(): - - udcall_map_erase(map, p) - - - Erase current element from udcall_map_t. - - - @param map (C++: udcall_map_t *) - @param p (C++: udcall_map_iterator_t) - - -ida_hexrays.udcall_map_find(): - - udcall_map_find(map, key) -> udcall_map_iterator_t - - - Find the specified key in udcall_map_t. - - - @param map (C++: const udcall_map_t *) - @param key (C++: const ea_t &) - - -ida_hexrays.udcall_map_first(): - - udcall_map_first(p) -> ea_t const & - - - Get reference to the current map key. - - - @param p (C++: udcall_map_iterator_t) - - -ida_hexrays.udcall_map_free(): - - udcall_map_free(map) - - - Delete udcall_map_t instance. - - - @param map (C++: udcall_map_t *) - - -ida_hexrays.udcall_map_insert(): - - udcall_map_insert(map, key, val) -> udcall_map_iterator_t - - - Insert new (ea_t, 'udcall_t' ) pair into udcall_map_t. - - - @param map (C++: udcall_map_t *) - @param key (C++: const ea_t &) - @param val (C++: const udcall_t &) - - -class ida_hexrays.udcall_map_iterator_t(): - - Proxy of C++ udcall_map_iterator_t class - - -ida_hexrays.udcall_map_iterator_t.x: - udcall_map_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.udcall_map_new(): - - udcall_map_new() -> udcall_map_t * - - - Create a new udcall_map_t instance. - - -ida_hexrays.udcall_map_next(): - - udcall_map_next(p) -> udcall_map_iterator_t - - - Move to the next element. - - - @param p (C++: udcall_map_iterator_t) - - -ida_hexrays.udcall_map_prev(): - - udcall_map_prev(p) -> udcall_map_iterator_t - - - Move to the previous element. - - - @param p (C++: udcall_map_iterator_t) - - -ida_hexrays.udcall_map_second(): - - udcall_map_second(p) -> udcall_t - - - Get reference to the current map value. - - - @param p (C++: udcall_map_iterator_t) - - -ida_hexrays.udcall_map_size(): - - udcall_map_size(map) -> size_t - - - Get size of udcall_map_t. - - - @param map (C++: udcall_map_t *) - - -class ida_hexrays.udcall_t(): - - Proxy of C++ udcall_t class - - -ida_hexrays.udcall_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.udcall_t.name: - udcall_t_name_get(self) -> qstring * - -ida_hexrays.udcall_t.tif: - udcall_t_tif_get(self) -> tinfo_t - -class ida_hexrays.ui_stroff_applicator_t(): - - Proxy of C++ ui_stroff_applicator_t class - - -ida_hexrays.ui_stroff_applicator_t.apply(): - - apply(self, opnum, path) -> bool - - -class ida_hexrays.ui_stroff_op_t(): - - Proxy of C++ ui_stroff_op_t class - - -ida_hexrays.ui_stroff_op_t.offset: - ui_stroff_op_t_offset_get(self) -> uval_t - -ida_hexrays.ui_stroff_op_t.text: - ui_stroff_op_t_text_get(self) -> qstring * - -class ida_hexrays.ui_stroff_ops_t(): - - Proxy of C++ qvector<(ui_stroff_op_t)> class - - -ida_hexrays.ui_stroff_ops_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.ui_stroff_ops_t.append(): - - push_back(self, x) - push_back(self) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.at(): - - __getitem__(self, i) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.begin(): - - begin(self) -> ui_stroff_op_t - begin(self) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.ui_stroff_ops_t.clear(): - - clear(self) - - -ida_hexrays.ui_stroff_ops_t.empty(): - - empty(self) -> bool - - -ida_hexrays.ui_stroff_ops_t.end(): - - end(self) -> ui_stroff_op_t - end(self) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.erase(): - - erase(self, it) -> ui_stroff_op_t - erase(self, first, last) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.extract(): - - extract(self) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.find(): - - find(self, x) -> ui_stroff_op_t - find(self, x) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.grow(): - - grow(self, x=ui_stroff_op_t()) - - -ida_hexrays.ui_stroff_ops_t.has(): - - has(self, x) -> bool - - -ida_hexrays.ui_stroff_ops_t.inject(): - - inject(self, s, len) - - -ida_hexrays.ui_stroff_ops_t.insert(): - - insert(self, it, x) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.pop_back(): - - pop_back(self) - - -ida_hexrays.ui_stroff_ops_t.push_back(): - - push_back(self, x) - push_back(self) -> ui_stroff_op_t - - -ida_hexrays.ui_stroff_ops_t.qclear(): - - qclear(self) - - -ida_hexrays.ui_stroff_ops_t.reserve(): - - reserve(self, cnt) - - -ida_hexrays.ui_stroff_ops_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.ui_stroff_ops_t.size(): - - size(self) -> size_t - - -ida_hexrays.ui_stroff_ops_t.swap(): - - swap(self, r) - - -ida_hexrays.ui_stroff_ops_t.truncate(): - - truncate(self) - - -ida_hexrays.user_cmts_begin(): - - user_cmts_begin(map) -> user_cmts_iterator_t - - - Get iterator pointing to the beginning of user_cmts_t. - - - @param map (C++: const user_cmts_t *) - - -ida_hexrays.user_cmts_clear(): - - user_cmts_clear(map) - - - Clear user_cmts_t. - - - @param map (C++: user_cmts_t *) - - -ida_hexrays.user_cmts_end(): - - user_cmts_end(map) -> user_cmts_iterator_t - - - Get iterator pointing to the end of user_cmts_t. - - - @param map (C++: const user_cmts_t *) - - -ida_hexrays.user_cmts_erase(): - - user_cmts_erase(map, p) - - - Erase current element from user_cmts_t. - - - @param map (C++: user_cmts_t *) - @param p (C++: user_cmts_iterator_t) - - -ida_hexrays.user_cmts_find(): - - user_cmts_find(map, key) -> user_cmts_iterator_t - - - Find the specified key in user_cmts_t. - - - @param map (C++: const user_cmts_t *) - @param key (C++: const treeloc_t &) - - -ida_hexrays.user_cmts_first(): - - user_cmts_first(p) -> treeloc_t - - - Get reference to the current map key. - - - @param p (C++: user_cmts_iterator_t) - - -ida_hexrays.user_cmts_free(): - - user_cmts_free(map) - - - Delete user_cmts_t instance. - - - @param map (C++: user_cmts_t *) - - -ida_hexrays.user_cmts_insert(): - - user_cmts_insert(map, key, val) -> user_cmts_iterator_t - - - Insert new ( 'treeloc_t' , 'citem_cmt_t' ) pair into user_cmts_t. - - - @param map (C++: user_cmts_t *) - @param key (C++: const treeloc_t &) - @param val (C++: const citem_cmt_t &) - - -class ida_hexrays.user_cmts_iterator_t(): - - Proxy of C++ user_cmts_iterator_t class - - -ida_hexrays.user_cmts_iterator_t.x: - user_cmts_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.user_cmts_new(): - - user_cmts_new() -> user_cmts_t - - - Create a new user_cmts_t instance. - - -ida_hexrays.user_cmts_next(): - - user_cmts_next(p) -> user_cmts_iterator_t - - - Move to the next element. - - - @param p (C++: user_cmts_iterator_t) - - -ida_hexrays.user_cmts_prev(): - - user_cmts_prev(p) -> user_cmts_iterator_t - - - Move to the previous element. - - - @param p (C++: user_cmts_iterator_t) - - -ida_hexrays.user_cmts_second(): - - user_cmts_second(p) -> citem_cmt_t - - - Get reference to the current map value. - - - @param p (C++: user_cmts_iterator_t) - - -ida_hexrays.user_cmts_size(): - - user_cmts_size(map) -> size_t - - - Get size of user_cmts_t. - - - @param map (C++: user_cmts_t *) - - -class ida_hexrays.user_cmts_t(): - - Proxy of C++ std::map<(treeloc_t,citem_cmt_t)> class - - -ida_hexrays.user_cmts_t.at(): - - at(self, _Keyval) -> citem_cmt_t - - -class ida_hexrays.user_cmts_t.keytype(): - - Proxy of C++ treeloc_t class - - -ida_hexrays.user_cmts_t.keytype.ea: - treeloc_t_ea_get(self) -> ea_t - -ida_hexrays.user_cmts_t.keytype.itp: - treeloc_t_itp_get(self) -> item_preciser_t - -ida_hexrays.user_cmts_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_cmts_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_cmts_t.setdefault(): - - Sets the value associated with the provided key. - - -class ida_hexrays.user_cmts_t.valuetype(): - - Proxy of C++ citem_cmt_t class - - -ida_hexrays.user_cmts_t.valuetype.c_str(): - - c_str(self) -> char const * - - -ida_hexrays.user_cmts_t.valuetype.used: - citem_cmt_t_used_get(self) -> bool - -ida_hexrays.user_iflags_begin(): - - user_iflags_begin(map) -> user_iflags_iterator_t - - - Get iterator pointing to the beginning of user_iflags_t. - - - @param map (C++: const user_iflags_t *) - - -ida_hexrays.user_iflags_clear(): - - user_iflags_clear(map) - - - Clear user_iflags_t. - - - @param map (C++: user_iflags_t *) - - -ida_hexrays.user_iflags_end(): - - user_iflags_end(map) -> user_iflags_iterator_t - - - Get iterator pointing to the end of user_iflags_t. - - - @param map (C++: const user_iflags_t *) - - -ida_hexrays.user_iflags_erase(): - - user_iflags_erase(map, p) - - - Erase current element from user_iflags_t. - - - @param map (C++: user_iflags_t *) - @param p (C++: user_iflags_iterator_t) - - -ida_hexrays.user_iflags_find(): - - user_iflags_find(map, key) -> user_iflags_iterator_t - - - Find the specified key in user_iflags_t. - - - @param map (C++: const user_iflags_t *) - @param key (C++: const citem_locator_t &) - - -ida_hexrays.user_iflags_first(): - - user_iflags_first(p) -> citem_locator_t - - - Get reference to the current map key. - - - @param p (C++: user_iflags_iterator_t) - - -ida_hexrays.user_iflags_free(): - - user_iflags_free(map) - - - Delete user_iflags_t instance. - - - @param map (C++: user_iflags_t *) - - -ida_hexrays.user_iflags_insert(): - - user_iflags_insert(map, key, val) -> user_iflags_iterator_t - - - Insert new ( 'citem_locator_t' , int32) pair into user_iflags_t. - - - @param map (C++: user_iflags_t *) - @param key (C++: const citem_locator_t &) - @param val (C++: const int32 &) - - -class ida_hexrays.user_iflags_iterator_t(): - - Proxy of C++ user_iflags_iterator_t class - - -ida_hexrays.user_iflags_iterator_t.x: - user_iflags_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.user_iflags_new(): - - user_iflags_new() -> user_iflags_t - - - Create a new user_iflags_t instance. - - -ida_hexrays.user_iflags_next(): - - user_iflags_next(p) -> user_iflags_iterator_t - - - Move to the next element. - - - @param p (C++: user_iflags_iterator_t) - - -ida_hexrays.user_iflags_prev(): - - user_iflags_prev(p) -> user_iflags_iterator_t - - - Move to the previous element. - - - @param p (C++: user_iflags_iterator_t) - - -ida_hexrays.user_iflags_second(): - - user_iflags_second(p) -> int32 const & - - - Get reference to the current map value. - - - @param p (C++: user_iflags_iterator_t) - - -ida_hexrays.user_iflags_size(): - - user_iflags_size(map) -> size_t - - - Get size of user_iflags_t. - - - @param map (C++: user_iflags_t *) - - -class ida_hexrays.user_iflags_t(): - - Proxy of C++ std::map<(citem_locator_t,int32)> class - - -ida_hexrays.user_iflags_t.at(): - - at(self, _Keyval) -> int & - - -class ida_hexrays.user_iflags_t.keytype(): - - Proxy of C++ citem_locator_t class - - -ida_hexrays.user_iflags_t.keytype.compare(): - - compare(self, r) -> int - - -ida_hexrays.user_iflags_t.keytype.ea: - citem_locator_t_ea_get(self) -> ea_t - -ida_hexrays.user_iflags_t.keytype.op: - citem_locator_t_op_get(self) -> ctype_t - -ida_hexrays.user_iflags_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_iflags_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_iflags_t.setdefault(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_iflags_t.valuetype.bit_length(): - int.bit_length() -> int - - Number of bits necessary to represent self in binary. - >>> bin(37) - '0b100101' - >>> (37).bit_length() - 6 - -ida_hexrays.user_iflags_t.valuetype.conjugate(): - Returns self, the complex conjugate of any int. - -ida_hexrays.user_iflags_t.valuetype.denominator: - the denominator of a rational number in lowest terms - -ida_hexrays.user_iflags_t.valuetype.imag: - the imaginary part of a complex number - -ida_hexrays.user_iflags_t.valuetype.numerator: - the numerator of a rational number in lowest terms - -ida_hexrays.user_iflags_t.valuetype.real: - the real part of a complex number - -ida_hexrays.user_labels_begin(): - - user_labels_begin(map) -> user_labels_iterator_t - - - Get iterator pointing to the beginning of user_labels_t. - - - @param map (C++: const user_labels_t *) - - -ida_hexrays.user_labels_clear(): - - user_labels_clear(map) - - - Clear user_labels_t. - - - @param map (C++: user_labels_t *) - - -ida_hexrays.user_labels_end(): - - user_labels_end(map) -> user_labels_iterator_t - - - Get iterator pointing to the end of user_labels_t. - - - @param map (C++: const user_labels_t *) - - -ida_hexrays.user_labels_erase(): - - user_labels_erase(map, p) - - - Erase current element from user_labels_t. - - - @param map (C++: user_labels_t *) - @param p (C++: user_labels_iterator_t) - - -ida_hexrays.user_labels_find(): - - user_labels_find(map, key) -> user_labels_iterator_t - - - Find the specified key in user_labels_t. - - - @param map (C++: const user_labels_t *) - @param key (C++: const int &) - - -ida_hexrays.user_labels_first(): - - user_labels_first(p) -> int const & - - - Get reference to the current map key. - - - @param p (C++: user_labels_iterator_t) - - -ida_hexrays.user_labels_free(): - - user_labels_free(map) - - - Delete user_labels_t instance. - - - @param map (C++: user_labels_t *) - - -ida_hexrays.user_labels_insert(): - - user_labels_insert(map, key, val) -> user_labels_iterator_t - - - Insert new (int, qstring) pair into user_labels_t. - - - @param map (C++: user_labels_t *) - @param key (C++: const int &) - @param val (C++: const qstring &) - - -class ida_hexrays.user_labels_iterator_t(): - - Proxy of C++ user_labels_iterator_t class - - -ida_hexrays.user_labels_iterator_t.x: - user_labels_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.user_labels_new(): - - user_labels_new() -> user_labels_t - - - Create a new user_labels_t instance. - - -ida_hexrays.user_labels_next(): - - user_labels_next(p) -> user_labels_iterator_t - - - Move to the next element. - - - @param p (C++: user_labels_iterator_t) - - -ida_hexrays.user_labels_prev(): - - user_labels_prev(p) -> user_labels_iterator_t - - - Move to the previous element. - - - @param p (C++: user_labels_iterator_t) - - -ida_hexrays.user_labels_second(): - - user_labels_second(p) -> qstring & - - - Get reference to the current map value. - - - @param p (C++: user_labels_iterator_t) - - -ida_hexrays.user_labels_size(): - - user_labels_size(map) -> size_t - - - Get size of user_labels_t. - - - @param map (C++: user_labels_t *) - - -class ida_hexrays.user_labels_t(): - - Proxy of C++ std::map<(int,qstring)> class - - -ida_hexrays.user_labels_t.at(): - - at(self, _Keyval) -> _qstring< char > & - - -ida_hexrays.user_labels_t.size(): - - size(self) -> size_t - - -class ida_hexrays.user_lvar_modifier_t(): - - Proxy of C++ user_lvar_modifier_t class - - -ida_hexrays.user_lvar_modifier_t.modify_lvars(): - - modify_lvars(self, lvinf) -> bool - - -ida_hexrays.user_numforms_begin(): - - user_numforms_begin(map) -> user_numforms_iterator_t - - - Get iterator pointing to the beginning of user_numforms_t. - - - @param map (C++: const user_numforms_t *) - - -ida_hexrays.user_numforms_clear(): - - user_numforms_clear(map) - - - Clear user_numforms_t. - - - @param map (C++: user_numforms_t *) - - -ida_hexrays.user_numforms_end(): - - user_numforms_end(map) -> user_numforms_iterator_t - - - Get iterator pointing to the end of user_numforms_t. - - - @param map (C++: const user_numforms_t *) - - -ida_hexrays.user_numforms_erase(): - - user_numforms_erase(map, p) - - - Erase current element from user_numforms_t. - - - @param map (C++: user_numforms_t *) - @param p (C++: user_numforms_iterator_t) - - -ida_hexrays.user_numforms_find(): - - user_numforms_find(map, key) -> user_numforms_iterator_t - - - Find the specified key in user_numforms_t. - - - @param map (C++: const user_numforms_t *) - @param key (C++: const operand_locator_t &) - - -ida_hexrays.user_numforms_first(): - - user_numforms_first(p) -> operand_locator_t - - - Get reference to the current map key. - - - @param p (C++: user_numforms_iterator_t) - - -ida_hexrays.user_numforms_free(): - - user_numforms_free(map) - - - Delete user_numforms_t instance. - - - @param map (C++: user_numforms_t *) - - -ida_hexrays.user_numforms_insert(): - - user_numforms_insert(map, key, val) -> user_numforms_iterator_t - - - Insert new ( 'operand_locator_t' , 'number_format_t' ) pair into - user_numforms_t. - - - @param map (C++: user_numforms_t *) - @param key (C++: const operand_locator_t &) - @param val (C++: const number_format_t &) - - -class ida_hexrays.user_numforms_iterator_t(): - - Proxy of C++ user_numforms_iterator_t class - - -ida_hexrays.user_numforms_iterator_t.x: - user_numforms_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.user_numforms_new(): - - user_numforms_new() -> user_numforms_t - - - Create a new user_numforms_t instance. - - -ida_hexrays.user_numforms_next(): - - user_numforms_next(p) -> user_numforms_iterator_t - - - Move to the next element. - - - @param p (C++: user_numforms_iterator_t) - - -ida_hexrays.user_numforms_prev(): - - user_numforms_prev(p) -> user_numforms_iterator_t - - - Move to the previous element. - - - @param p (C++: user_numforms_iterator_t) - - -ida_hexrays.user_numforms_second(): - - user_numforms_second(p) -> number_format_t - - - Get reference to the current map value. - - - @param p (C++: user_numforms_iterator_t) - - -ida_hexrays.user_numforms_size(): - - user_numforms_size(map) -> size_t - - - Get size of user_numforms_t. - - - @param map (C++: user_numforms_t *) - - -class ida_hexrays.user_numforms_t(): - - Proxy of C++ std::map<(operand_locator_t,number_format_t)> class - - -ida_hexrays.user_numforms_t.at(): - - at(self, _Keyval) -> number_format_t - - -class ida_hexrays.user_numforms_t.keytype(): - - Proxy of C++ operand_locator_t class - - -ida_hexrays.user_numforms_t.keytype.compare(): - - compare(self, r) -> int - - -ida_hexrays.user_numforms_t.keytype.ea: - operand_locator_t_ea_get(self) -> ea_t - -ida_hexrays.user_numforms_t.keytype.opnum: - operand_locator_t_opnum_get(self) -> int - -ida_hexrays.user_numforms_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_numforms_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_numforms_t.setdefault(): - - Sets the value associated with the provided key. - - -class ida_hexrays.user_numforms_t.valuetype(): - - Proxy of C++ number_format_t class - - -ida_hexrays.user_numforms_t.valuetype.flags: - number_format_t_flags_get(self) -> flags_t - -ida_hexrays.user_numforms_t.valuetype.get_radix(): - - get_radix(self) -> int - - -ida_hexrays.user_numforms_t.valuetype.is_char(): - - is_char(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_dec(): - - is_dec(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_enum(): - - is_enum(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_fixed(): - - is_fixed(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_hex(): - - is_hex(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_numop(): - - is_numop(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_oct(): - - is_oct(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.is_stroff(): - - is_stroff(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.needs_to_be_inverted(): - - needs_to_be_inverted(self) -> bool - - -ida_hexrays.user_numforms_t.valuetype.opnum: - number_format_t_opnum_get(self) -> char - -ida_hexrays.user_numforms_t.valuetype.org_nbytes: - number_format_t_org_nbytes_get(self) -> char - -ida_hexrays.user_numforms_t.valuetype.props: - number_format_t_props_get(self) -> char - -ida_hexrays.user_numforms_t.valuetype.serial: - number_format_t_serial_get(self) -> uchar - -ida_hexrays.user_numforms_t.valuetype.type_name: - number_format_t_type_name_get(self) -> qstring * - -ida_hexrays.user_unions_begin(): - - user_unions_begin(map) -> user_unions_iterator_t - - - Get iterator pointing to the beginning of user_unions_t. - - - @param map (C++: const user_unions_t *) - - -ida_hexrays.user_unions_clear(): - - user_unions_clear(map) - - - Clear user_unions_t. - - - @param map (C++: user_unions_t *) - - -ida_hexrays.user_unions_end(): - - user_unions_end(map) -> user_unions_iterator_t - - - Get iterator pointing to the end of user_unions_t. - - - @param map (C++: const user_unions_t *) - - -ida_hexrays.user_unions_erase(): - - user_unions_erase(map, p) - - - Erase current element from user_unions_t. - - - @param map (C++: user_unions_t *) - @param p (C++: user_unions_iterator_t) - - -ida_hexrays.user_unions_find(): - - user_unions_find(map, key) -> user_unions_iterator_t - - - Find the specified key in user_unions_t. - - - @param map (C++: const user_unions_t *) - @param key (C++: const ea_t &) - - -ida_hexrays.user_unions_first(): - - user_unions_first(p) -> ea_t const & - - - Get reference to the current map key. - - - @param p (C++: user_unions_iterator_t) - - -ida_hexrays.user_unions_free(): - - user_unions_free(map) - - - Delete user_unions_t instance. - - - @param map (C++: user_unions_t *) - - -ida_hexrays.user_unions_insert(): - - user_unions_insert(map, key, val) -> user_unions_iterator_t - - - Insert new (ea_t, intvec_t) pair into user_unions_t. - - - @param map (C++: user_unions_t *) - @param key (C++: const ea_t &) - @param val (C++: const intvec_t &) - - -class ida_hexrays.user_unions_iterator_t(): - - Proxy of C++ user_unions_iterator_t class - - -ida_hexrays.user_unions_iterator_t.x: - user_unions_iterator_t_x_get(self) -> iterator_word - -ida_hexrays.user_unions_new(): - - user_unions_new() -> user_unions_t - - - Create a new user_unions_t instance. - - -ida_hexrays.user_unions_next(): - - user_unions_next(p) -> user_unions_iterator_t - - - Move to the next element. - - - @param p (C++: user_unions_iterator_t) - - -ida_hexrays.user_unions_prev(): - - user_unions_prev(p) -> user_unions_iterator_t - - - Move to the previous element. - - - @param p (C++: user_unions_iterator_t) - - -ida_hexrays.user_unions_second(): - - user_unions_second(p) -> intvec_t - - - Get reference to the current map value. - - - @param p (C++: user_unions_iterator_t) - - -ida_hexrays.user_unions_size(): - - user_unions_size(map) -> size_t - - - Get size of user_unions_t. - - - @param map (C++: user_unions_t *) - - -class ida_hexrays.user_unions_t(): - - Proxy of C++ std::map<(ea_t,intvec_t)> class - - -ida_hexrays.user_unions_t.at(): - - at(self, _Keyval) -> intvec_t - - -ida_hexrays.user_unions_t.pop(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_unions_t.popitem(): - - Sets the value associated with the provided key. - - -ida_hexrays.user_unions_t.setdefault(): - - Sets the value associated with the provided key. - - -class ida_hexrays.user_unions_t.valuetype(): - - Proxy of C++ qvector<(int)> class - - -ida_hexrays.user_unions_t.valuetype.add_unique(): - - add_unique(self, x) -> bool - - -ida_hexrays.user_unions_t.valuetype.append(): - - push_back(self, x) - push_back(self) -> int & - - -ida_hexrays.user_unions_t.valuetype.at(): - - __getitem__(self, i) -> int const & - - -ida_hexrays.user_unions_t.valuetype.begin(): - - begin(self) -> qvector< int >::iterator - begin(self) -> qvector< int >::const_iterator - - -ida_hexrays.user_unions_t.valuetype.capacity(): - - capacity(self) -> size_t - - -ida_hexrays.user_unions_t.valuetype.clear(): - - clear(self) - - -ida_hexrays.user_unions_t.valuetype.empty(): - - empty(self) -> bool - - -ida_hexrays.user_unions_t.valuetype.end(): - - end(self) -> qvector< int >::iterator - end(self) -> qvector< int >::const_iterator - - -ida_hexrays.user_unions_t.valuetype.erase(): - - erase(self, it) -> qvector< int >::iterator - erase(self, first, last) -> qvector< int >::iterator - - -ida_hexrays.user_unions_t.valuetype.extract(): - - extract(self) -> int * - - -ida_hexrays.user_unions_t.valuetype.find(): - - find(self, x) -> qvector< int >::iterator - find(self, x) -> qvector< int >::const_iterator - - -ida_hexrays.user_unions_t.valuetype.has(): - - has(self, x) -> bool - - -ida_hexrays.user_unions_t.valuetype.inject(): - - inject(self, s, len) - - -ida_hexrays.user_unions_t.valuetype.insert(): - - insert(self, it, x) -> qvector< int >::iterator - - -ida_hexrays.user_unions_t.valuetype.pop_back(): - - pop_back(self) - - -ida_hexrays.user_unions_t.valuetype.push_back(): - - push_back(self, x) - push_back(self) -> int & - - -ida_hexrays.user_unions_t.valuetype.qclear(): - - qclear(self) - - -ida_hexrays.user_unions_t.valuetype.reserve(): - - reserve(self, cnt) - - -ida_hexrays.user_unions_t.valuetype.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_hexrays.user_unions_t.valuetype.size(): - - size(self) -> size_t - - -ida_hexrays.user_unions_t.valuetype.swap(): - - swap(self, r) - - -ida_hexrays.user_unions_t.valuetype.truncate(): - - truncate(self) - - -class ida_hexrays.uval_ivl_ivlset_t(): - - Proxy of C++ ivlset_tpl<(ivl_t,uval_t)> class - - -ida_hexrays.uval_ivl_ivlset_t.all_values(): - - all_values(self) -> bool - - -ida_hexrays.uval_ivl_ivlset_t.begin(): - - begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator - begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.uval_ivl_ivlset_t.clear(): - - clear(self) - - -ida_hexrays.uval_ivl_ivlset_t.empty(): - - empty(self) -> bool - - -ida_hexrays.uval_ivl_ivlset_t.end(): - - end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator - end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator - - -ida_hexrays.uval_ivl_ivlset_t.getivl(): - - getivl(self, idx) -> ivl_t - - -ida_hexrays.uval_ivl_ivlset_t.lastivl(): - - lastivl(self) -> ivl_t - - -ida_hexrays.uval_ivl_ivlset_t.nivls(): - - nivls(self) -> size_t - - -ida_hexrays.uval_ivl_ivlset_t.qclear(): - - qclear(self) - - -ida_hexrays.uval_ivl_ivlset_t.set_all_values(): - - set_all_values(self) - - -ida_hexrays.uval_ivl_ivlset_t.single_value(): - - single_value(self, v) -> bool - - -ida_hexrays.uval_ivl_ivlset_t.swap(): - - swap(self, r) - - -class ida_hexrays.uval_ivl_t(): - - Proxy of C++ ivl_tpl<(uval_t)> class - - -ida_hexrays.uval_ivl_t.end(): - - end(self) -> unsigned-ea-like-numeric-type - - -ida_hexrays.uval_ivl_t.last(): - - last(self) -> unsigned-ea-like-numeric-type - - -ida_hexrays.uval_ivl_t.off: - uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.uval_ivl_t.size: - uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.uval_ivl_t.valid(): - - valid(self) -> bool - - -class ida_hexrays.valrng_t(): - - Proxy of C++ valrng_t class - - -ida_hexrays.valrng_t._print(): - - _print(self) - - -ida_hexrays.valrng_t.all_values(): - - all_values(self) -> bool - - -ida_hexrays.valrng_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.valrng_t.cvt_to_cmp(): - - cvt_to_cmp(self, strict) -> bool - - -ida_hexrays.valrng_t.cvt_to_single_value(): - - cvt_to_single_value(self) -> bool - - -ida_hexrays.valrng_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.valrng_t.empty(): - - empty(self) -> bool - - -ida_hexrays.valrng_t.get_size(): - - get_size(self) -> int - - -ida_hexrays.valrng_t.has(): - - has(self, v) -> bool - - -ida_hexrays.valrng_t.intersect_with(): - - intersect_with(self, r) -> bool - - -ida_hexrays.valrng_t.inverse(): - - inverse(self) - - -ida_hexrays.valrng_t.is_unknown(): - - is_unknown(self) -> bool - - -ida_hexrays.valrng_t.max_svalue(): - - max_svalue(self, size_) -> uvlr_t - max_svalue(self) -> uvlr_t - - -ida_hexrays.valrng_t.max_value(): - - max_value(self, size_) -> uvlr_t - max_value(self) -> uvlr_t - - -ida_hexrays.valrng_t.min_svalue(): - - min_svalue(self, size_) -> uvlr_t - min_svalue(self) -> uvlr_t - - -ida_hexrays.valrng_t.reduce_size(): - - reduce_size(self, new_size) -> bool - - -ida_hexrays.valrng_t.set_all(): - - set_all(self) - - -ida_hexrays.valrng_t.set_cmp(): - - set_cmp(self, cmp, _value) - - -ida_hexrays.valrng_t.set_eq(): - - set_eq(self, v) - - -ida_hexrays.valrng_t.set_none(): - - set_none(self) - - -ida_hexrays.valrng_t.set_unk(): - - set_unk(self) - - -ida_hexrays.valrng_t.swap(): - - swap(self, r) - - -ida_hexrays.valrng_t.unite_with(): - - unite_with(self, r) -> bool - - -class ida_hexrays.var_ref_t(): - - Proxy of C++ var_ref_t class - - -ida_hexrays.var_ref_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.var_ref_t.idx: - var_ref_t_idx_get(self) -> int - -ida_hexrays.var_ref_t.mba: - var_ref_t_mba_get(self) -> mbl_array_t - -class ida_hexrays.vc_printer_t(): - - Proxy of C++ vc_printer_t class - - -ida_hexrays.vc_printer_t._print(): - - _print(self, indent, format) -> int - - -ida_hexrays.vc_printer_t.func: - vc_printer_t_func_get(self) -> cfunc_t - -ida_hexrays.vc_printer_t.hdrlines: - vd_printer_t_hdrlines_get(self) -> int - -ida_hexrays.vc_printer_t.lastchar: - vc_printer_t_lastchar_get(self) -> char - -ida_hexrays.vc_printer_t.oneliner(): - - oneliner(self) -> bool - - -ida_hexrays.vc_printer_t.tmpbuf: - vd_printer_t_tmpbuf_get(self) -> qstring * - -class ida_hexrays.vd_failure_t(): - - Proxy of C++ vd_failure_t class - - -ida_hexrays.vd_failure_t.desc(): - - desc(self) -> qstring - - -ida_hexrays.vd_failure_t.hf: - vd_failure_t_hf_get(self) -> hexrays_failure_t - -class ida_hexrays.vd_interr_t(): - - Proxy of C++ vd_interr_t class - - -ida_hexrays.vd_interr_t.desc(): - - desc(self) -> qstring - - -ida_hexrays.vd_interr_t.hf: - vd_failure_t_hf_get(self) -> hexrays_failure_t - -class ida_hexrays.vd_printer_t(): - - Proxy of C++ vd_printer_t class - - -ida_hexrays.vd_printer_t._print(): - - _print(self, indent, format) -> int - - -ida_hexrays.vd_printer_t.hdrlines: - vd_printer_t_hdrlines_get(self) -> int - -ida_hexrays.vd_printer_t.tmpbuf: - vd_printer_t_tmpbuf_get(self) -> qstring * - -class ida_hexrays.vdloc_t(): - - Proxy of C++ vdloc_t class - - -ida_hexrays.vdloc_t.advance(): - - advance(self, delta) -> bool - - -ida_hexrays.vdloc_t.atype(): - - atype(self) -> argloc_type_t - - -ida_hexrays.vdloc_t.calc_offset(): - - calc_offset(self) -> sval_t - - -ida_hexrays.vdloc_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.vdloc_t.consume_rrel(): - - consume_rrel(self, p) - - -ida_hexrays.vdloc_t.consume_scattered(): - - consume_scattered(self, p) - - -ida_hexrays.vdloc_t.get_biggest(): - - get_biggest(self) -> argloc_t::biggest_t - - -ida_hexrays.vdloc_t.get_custom(): - - get_custom(self) -> void * - - -ida_hexrays.vdloc_t.get_ea(): - - get_ea(self) -> ea_t - - -ida_hexrays.vdloc_t.get_reginfo(): - - get_reginfo(self) -> uint32 - - -ida_hexrays.vdloc_t.get_rrel(): - - get_rrel(self) -> rrel_t - get_rrel(self) -> rrel_t - - -ida_hexrays.vdloc_t.has_reg(): - - has_reg(self) -> bool - - -ida_hexrays.vdloc_t.has_stkoff(): - - has_stkoff(self) -> bool - - -ida_hexrays.vdloc_t.is_aliasable(): - - is_aliasable(self, mb, size) -> bool - - -ida_hexrays.vdloc_t.is_badloc(): - - is_badloc(self) -> bool - - -ida_hexrays.vdloc_t.is_custom(): - - is_custom(self) -> bool - - -ida_hexrays.vdloc_t.is_ea(): - - is_ea(self) -> bool - - -ida_hexrays.vdloc_t.is_fragmented(): - - is_fragmented(self) -> bool - - -ida_hexrays.vdloc_t.is_mixed_scattered(): - - is_mixed_scattered(self) -> bool - - -ida_hexrays.vdloc_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.vdloc_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_hexrays.vdloc_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_hexrays.vdloc_t.is_rrel(): - - is_rrel(self) -> bool - - -ida_hexrays.vdloc_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_hexrays.vdloc_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_hexrays.vdloc_t.reg1(): - - reg1(self) -> int - - -ida_hexrays.vdloc_t.reg2(): - - reg2(self) -> int - - -ida_hexrays.vdloc_t.regoff(): - - regoff(self) -> int - - -ida_hexrays.vdloc_t.scattered(): - - scattered(self) -> scattered_aloc_t - scattered(self) -> scattered_aloc_t - - -ida_hexrays.vdloc_t.set_badloc(): - - set_badloc(self) - - -ida_hexrays.vdloc_t.set_ea(): - - set_ea(self, _ea) - - -ida_hexrays.vdloc_t.set_reg1(): - - set_reg1(self, r1) - - -ida_hexrays.vdloc_t.set_reg2(): - - set_reg2(self, _reg1, _reg2) - - -ida_hexrays.vdloc_t.set_stkoff(): - - set_stkoff(self, off) - - -ida_hexrays.vdloc_t.stkoff(): - - stkoff(self) -> sval_t - - -ida_hexrays.vdloc_t.swap(): - - swap(self, r) - - -class ida_hexrays.vdui_t(): - - Proxy of C++ vdui_t class - - -ida_hexrays.vdui_t.calc_cmt_type(): - - calc_cmt_type(self, lnnum, cmttype) -> cmt_type_t - - -ida_hexrays.vdui_t.cfunc: - vdui_t_cfunc_get(self) -> cfuncptr_t - -ida_hexrays.vdui_t.clear(): - - clear(self) - - -ida_hexrays.vdui_t.collapse_item(): - - collapse_item(self, hide) -> bool - - -ida_hexrays.vdui_t.collapse_lvars(): - - collapse_lvars(self, hide) -> bool - - -ida_hexrays.vdui_t.cpos: - vdui_t_cpos_get(self) -> ctext_position_t - -ida_hexrays.vdui_t.ct: - vdui_t_ct_get(self) -> TWidget * - -ida_hexrays.vdui_t.ctree_to_disasm(): - - ctree_to_disasm(self) -> bool - - -ida_hexrays.vdui_t.del_orphan_cmts(): - - del_orphan_cmts(self) -> bool - - -ida_hexrays.vdui_t.edit_cmt(): - - edit_cmt(self, loc) -> bool - - -ida_hexrays.vdui_t.edit_func_cmt(): - - edit_func_cmt(self) -> bool - - -ida_hexrays.vdui_t.flags: - vdui_t_flags_get(self) -> int - -ida_hexrays.vdui_t.get_current_item(): - - get_current_item(self, idv) -> bool - - -ida_hexrays.vdui_t.get_current_label(): - - get_current_label(self) -> int - - -ida_hexrays.vdui_t.get_number(): - - get_number(self) -> cnumber_t - - -ida_hexrays.vdui_t.head: - vdui_t_head_get(self) -> ctree_item_t - -ida_hexrays.vdui_t.in_ctree(): - - in_ctree(self) -> bool - - -ida_hexrays.vdui_t.invert_bits(): - - invert_bits(self) -> bool - - -ida_hexrays.vdui_t.invert_sign(): - - invert_sign(self) -> bool - - -ida_hexrays.vdui_t.item: - vdui_t_item_get(self) -> ctree_item_t - -ida_hexrays.vdui_t.jump_enter(): - - jump_enter(self, idv, omflags) -> bool - - -ida_hexrays.vdui_t.last_code: - vdui_t_last_code_get(self) -> merror_t - -ida_hexrays.vdui_t.locked(): - - locked(self) -> bool - - -ida_hexrays.vdui_t.map_lvar(): - - map_lvar(self, frm, to) -> bool - - -ida_hexrays.vdui_t.mba: - vdui_t_mba_get(self) -> mbl_array_t - -ida_hexrays.vdui_t.refresh_cpos(): - - refresh_cpos(self, idv) -> bool - - -ida_hexrays.vdui_t.refresh_ctext(): - - refresh_ctext(self, activate=True) - - -ida_hexrays.vdui_t.refresh_view(): - - refresh_view(self, redo_mba) - - -ida_hexrays.vdui_t.rename_global(): - - rename_global(self, ea) -> bool - - -ida_hexrays.vdui_t.rename_label(): - - rename_label(self, label) -> bool - - -ida_hexrays.vdui_t.rename_lvar(): - - rename_lvar(self, v, name, is_user_name) -> bool - - -ida_hexrays.vdui_t.rename_strmem(): - - rename_strmem(self, sptr, mptr) -> bool - - -ida_hexrays.vdui_t.set_global_type(): - - set_global_type(self, ea) -> bool - - -ida_hexrays.vdui_t.set_locked(): - - set_locked(self, v) -> bool - - -ida_hexrays.vdui_t.set_lvar_cmt(): - - set_lvar_cmt(self, v, cmt) -> bool - - -ida_hexrays.vdui_t.set_lvar_type(): - - set_lvar_type(self, v, type) -> bool - - -ida_hexrays.vdui_t.set_noptr_lvar(): - - set_noptr_lvar(self, v) -> bool - - -ida_hexrays.vdui_t.set_num_enum(): - - set_num_enum(self) -> bool - - -ida_hexrays.vdui_t.set_num_radix(): - - set_num_radix(self, base) -> bool - - -ida_hexrays.vdui_t.set_num_stroff(): - - set_num_stroff(self) -> bool - - -ida_hexrays.vdui_t.set_strmem_type(): - - set_strmem_type(self, sptr, mptr) -> bool - - -ida_hexrays.vdui_t.set_valid(): - - set_valid(self, v) - - -ida_hexrays.vdui_t.set_visible(): - - set_visible(self, v) - - -ida_hexrays.vdui_t.split_item(): - - split_item(self, split) -> bool - - -ida_hexrays.vdui_t.switch_to(): - - switch_to(self, f, activate) - - -ida_hexrays.vdui_t.tail: - vdui_t_tail_get(self) -> ctree_item_t - -ida_hexrays.vdui_t.toplevel: - vdui_t_toplevel_get(self) -> TWidget * - -ida_hexrays.vdui_t.ui_edit_lvar_cmt(): - - ui_edit_lvar_cmt(self, v) -> bool - - -ida_hexrays.vdui_t.ui_map_lvar(): - - ui_map_lvar(self, v) -> bool - - -ida_hexrays.vdui_t.ui_rename_lvar(): - - ui_rename_lvar(self, v) -> bool - - -ida_hexrays.vdui_t.ui_set_call_type(): - - ui_set_call_type(self, e) -> bool - - -ida_hexrays.vdui_t.ui_set_lvar_type(): - - ui_set_lvar_type(self, v) -> bool - - -ida_hexrays.vdui_t.ui_unmap_lvar(): - - ui_unmap_lvar(self, v) -> bool - - -ida_hexrays.vdui_t.valid(): - - valid(self) -> bool - - -ida_hexrays.vdui_t.view_idx: - vdui_t_view_idx_get(self) -> int - -ida_hexrays.vdui_t.visible(): - - visible(self) -> bool - - -class ida_hexrays.vivl_t(): - - Proxy of C++ vivl_t class - - -ida_hexrays.vivl_t._print(): - - _print(self) - - -ida_hexrays.vivl_t.add(): - - add(self, width) -> voff_t - - -ida_hexrays.vivl_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.vivl_t.contains(): - - contains(self, voff2) -> bool - - -ida_hexrays.vivl_t.defined(): - - defined(self) -> bool - - -ida_hexrays.vivl_t.diff(): - - diff(self, r) -> sval_t - - -ida_hexrays.vivl_t.dstr(): - - dstr(self) -> char const * - - -ida_hexrays.vivl_t.extend_to_cover(): - - extend_to_cover(self, r) -> bool - - -ida_hexrays.vivl_t.get_reg(): - - get_reg(self) -> mreg_t - - -ida_hexrays.vivl_t.get_stkoff(): - - get_stkoff(self) -> sval_t - - -ida_hexrays.vivl_t.inc(): - - inc(self, delta) - - -ida_hexrays.vivl_t.includes(): - - includes(self, r) -> bool - - -ida_hexrays.vivl_t.intersect(): - - intersect(self, r) -> uval_t - - -ida_hexrays.vivl_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.vivl_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_hexrays.vivl_t.off: - voff_t_off_get(self) -> sval_t - -ida_hexrays.vivl_t.overlap(): - - overlap(self, r) -> bool - - -ida_hexrays.vivl_t.set(): - - set(self, _type, _off, _size=0) - set(self, voff, _size) - - -ida_hexrays.vivl_t.set_reg(): - - set_reg(self, mreg, sz=0) - - -ida_hexrays.vivl_t.set_stkoff(): - - set_stkoff(self, stkoff, sz=0) - - -ida_hexrays.vivl_t.size: - vivl_t_size_get(self) -> int - -ida_hexrays.vivl_t.type: - voff_t_type_get(self) -> mopt_t - -ida_hexrays.vivl_t.undef(): - - undef(self) - - -class ida_hexrays.voff_t(): - - Proxy of C++ voff_t class - - -ida_hexrays.voff_t.add(): - - add(self, width) -> voff_t - - -ida_hexrays.voff_t.compare(): - - compare(self, r) -> int - - -ida_hexrays.voff_t.defined(): - - defined(self) -> bool - - -ida_hexrays.voff_t.diff(): - - diff(self, r) -> sval_t - - -ida_hexrays.voff_t.get_reg(): - - get_reg(self) -> mreg_t - - -ida_hexrays.voff_t.get_stkoff(): - - get_stkoff(self) -> sval_t - - -ida_hexrays.voff_t.inc(): - - inc(self, delta) - - -ida_hexrays.voff_t.is_reg(): - - is_reg(self) -> bool - - -ida_hexrays.voff_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_hexrays.voff_t.off: - voff_t_off_get(self) -> sval_t - -ida_hexrays.voff_t.set(): - - set(self, _type, _off) - - -ida_hexrays.voff_t.set_reg(): - - set_reg(self, mreg) - - -ida_hexrays.voff_t.set_stkoff(): - - set_stkoff(self, stkoff) - - -ida_hexrays.voff_t.type: - voff_t_type_get(self) -> mopt_t - -ida_hexrays.voff_t.undef(): - - undef(self) - - - -=== ida_hexrays EPYDOC INJECTIONS === -ida_hexrays.ACFL_BLKOPT -""" -perform interblock transformations -""" - -ida_hexrays.ACFL_GLBDEL -""" -perform dead code eliminition -""" - -ida_hexrays.ACFL_GLBPROP -""" -perform global propagation -""" - -ida_hexrays.ACFL_GUESS -""" -may guess calling conventions -""" - -ida_hexrays.ACFL_LOCOPT -""" -perform local propagation (requires ACFL_BLKOPT) -""" - -ida_hexrays.ANCHOR_BLKCMT -""" -block comment (for ctree items) -""" - -ida_hexrays.ANCHOR_CITEM -""" -c-tree item -""" - -ida_hexrays.ANCHOR_ITP -""" -item type preciser -""" - -ida_hexrays.ANCHOR_LVAR -""" -declaration of local variable -""" - -ida_hexrays.CFL_FINAL -""" -call type is final, should not be changed -""" - -ida_hexrays.CFL_HELPER -""" -created from a decompiler helper function -""" - -ida_hexrays.CFS_BOUNDS -""" -'eamap' and 'boundaries' are ready -""" - -ida_hexrays.CFS_LVARS_HIDDEN -""" -local variable definitions are collapsed -""" - -ida_hexrays.CFS_TEXT -""" -'sv' is ready (and hdrlines) -""" - -ida_hexrays.CHF_FAKE -""" -fake chain created by widen_chains() -""" - -ida_hexrays.CHF_INITED -""" -is chain initialized? (valid only after lvar allocation) -""" - -ida_hexrays.CHF_OVER -""" -overlapped chain -""" - -ida_hexrays.CHF_PASSTHRU -""" -pass-thru chain, must use the input variable to the block -""" - -ida_hexrays.CHF_REPLACED -""" -chain operands have been replaced? -""" - -ida_hexrays.CHF_TERM -""" -terminating chain; the variable does not survive across the block -""" - -ida_hexrays.CIT_COLLAPSED -""" -display element in collapsed form -""" - -ida_hexrays.CPBLK_FAST -""" -do not update minbstkref and minbargref -""" - -ida_hexrays.CPBLK_MINREF -""" -update minbstkref and minbargref -""" - -ida_hexrays.CPBLK_OPTJMP -""" -if it becomes useless - -del the jump insn at the end of the block -""" - -ida_hexrays.CV_FAST -""" -do not maintain parent information -""" - -ida_hexrays.CV_INSNS -""" -visit only statements, prune all expressions do not use before the -final ctree maturity because expressions may contain statements at -intermediate stages (see cot_insn). Otherwise you risk missing -statements embedded into expressions. -""" - -ida_hexrays.CV_PARENTS -""" -maintain parent information -""" - -ida_hexrays.CV_POST -""" -call the leave...() functions -""" - -ida_hexrays.CV_PRUNE -""" -this bit is set by visit...() to prune the walk -""" - -ida_hexrays.CV_RESTART -""" -restart enumeration at the top expr (apply_to_exprs) -""" - -ida_hexrays.DECOMP_NO_CACHE -""" -do not use decompilation cache -""" - -ida_hexrays.DECOMP_NO_FRAME -""" -do not use function frame info (only snippet mode) -""" - -ida_hexrays.DECOMP_NO_WAIT -""" -do not display waitbox -""" - -ida_hexrays.DECOMP_WARNINGS -""" -display warnings in the output window -""" - -ida_hexrays.EQ_CMPDEST -""" -compare instruction destinations -""" - -ida_hexrays.EQ_IGNCODE -""" -ignore instruction opcodes -""" - -ida_hexrays.EQ_IGNSIZE -""" -ignore operand sizes -""" - -ida_hexrays.EQ_OPTINSN -""" -optimize mop_d operands -""" - -ida_hexrays.EXFL_ALL -""" -all currently defined bits -""" - -ida_hexrays.EXFL_ALONE -""" -standalone helper -""" - -ida_hexrays.EXFL_CPADONE -""" -pointer arithmetic correction done -""" - -ida_hexrays.EXFL_CSTR -""" -string literal -""" - -ida_hexrays.EXFL_FPOP -""" -floating point operation -""" - -ida_hexrays.EXFL_JUMPOUT -""" -jump out-of-function -""" - -ida_hexrays.EXFL_LVALUE -""" -expression is lvalue even if it doesn't look like it -""" - -ida_hexrays.EXFL_PARTIAL -""" -type of the expression is considered partial -""" - -ida_hexrays.EXFL_UNDEF -""" -expression uses undefined value -""" - -ida_hexrays.EXFL_VFTABLE -""" -is ptr to vftable (used for cot_memptr, cot_memref) -""" - -ida_hexrays.FCI_DEAD -""" -some return registers were determined dead -""" - -ida_hexrays.FCI_FINAL -""" -call type is final, should not be changed -""" - -ida_hexrays.FCI_HASCALL -""" -A function is an synthetic helper combined from several instructions -and at least one of them was a call to a real functions -""" - -ida_hexrays.FCI_HASFMT -""" -printf- or scanf-style format string - -A variadic function with recognized -""" - -ida_hexrays.FCI_NORET -""" -call does not return -""" - -ida_hexrays.FCI_NOSIDE -""" -call does not have side effects -""" - -ida_hexrays.FCI_PROP -""" -call has been propagated -""" - -ida_hexrays.FCI_PURE -""" -pure function -""" - -ida_hexrays.FCI_SPLOK -""" -spoiled/visible_memory lists have been optimized. for some functions -we can reduce them as soon as information about the arguments becomes -available. in order not to try optimize them again we use this bit. -""" - -ida_hexrays.FD_BACKWARD -""" -search direction -""" - -ida_hexrays.FD_DEF -""" -look for definition -""" - -ida_hexrays.FD_DIRTY -""" -by function calls and indirect memory access - -ignore possible implicit definitions -""" - -ida_hexrays.FD_FORWARD -""" -search direction -""" - -ida_hexrays.FD_USE -""" -look for use -""" - -ida_hexrays.GCA_ALLOC -""" -enumerate only allocated chains -""" - -ida_hexrays.GCA_EMPTY -""" -include empty chains -""" - -ida_hexrays.GCA_NALLOC -""" -enumerate only non-allocated chains -""" - -ida_hexrays.GCA_OFIRST -""" -consider only chains of the first block -""" - -ida_hexrays.GCA_OLAST -""" -consider only chains of the last block -""" - -ida_hexrays.GCA_SPEC -""" -include chains for special registers -""" - -ida_hexrays.GCO_DEF -""" -is destination operand? -""" - -ida_hexrays.GCO_REG -""" -is register? otherwise a stack variable -""" - -ida_hexrays.GCO_STK -""" -a stack variable -""" - -ida_hexrays.GCO_USE -""" -is source operand? -""" - -ida_hexrays.GLN_ALL -""" -get both -""" - -ida_hexrays.GLN_CURRENT -""" -get label of the current item -""" - -ida_hexrays.GLN_GOTO_TARGET -""" -get goto target -""" - -ida_hexrays.IPROP_ASSERT -""" -assertion: usually mov #val, op. assertions are used to help the -optimizer. assertions are ignored when generating ctree -""" - -ida_hexrays.IPROP_CLNPOP -""" -(e.g. "pop ecx" is often used for that) - -the purpose of the instruction is to clean stack -""" - -ida_hexrays.IPROP_COMBINED -""" -insn has been modified because of a partial reference -""" - -ida_hexrays.IPROP_DONT_COMB -""" -may not combine this instruction with others -""" - -ida_hexrays.IPROP_DONT_PROP -""" -may not propagate -""" - -ida_hexrays.IPROP_EXTSTX -""" -this is m_ext propagated into m_stx -""" - -ida_hexrays.IPROP_FARCALL -""" -call of a far function using push cs/call sequence -""" - -ida_hexrays.IPROP_FPINSN -""" -floating point insn -""" - -ida_hexrays.IPROP_IGNLOWSRC -""" -low part of the instruction source operand has been created -artificially (this bit is used only for 'and x, 80...') -""" - -ida_hexrays.IPROP_INV_JX -""" -inverted conditional jump -""" - -ida_hexrays.IPROP_MULTI_MOV -""" -(example: STM on ARM may transfer multiple registers) - -the minsn was generated as part of insn that moves multiple -registersbits that can be set by plugins: -""" - -ida_hexrays.IPROP_OPTIONAL -""" -optional instruction -""" - -ida_hexrays.IPROP_PERSIST -""" -persistent insn; they are not destroyed -""" - -ida_hexrays.IPROP_SPLIT -""" -the instruction has been split: -""" - -ida_hexrays.IPROP_SPLIT1 -""" -into 1 byte -""" - -ida_hexrays.IPROP_SPLIT2 -""" -into 2 bytes -""" - -ida_hexrays.IPROP_SPLIT4 -""" -into 4 bytes -""" - -ida_hexrays.IPROP_SPLIT8 -""" -into 8 bytes -""" - -ida_hexrays.IPROP_TAILCALL -""" -tail call -""" - -ida_hexrays.IPROP_WAS_NORET -""" -was noret icall -""" - -ida_hexrays.IPROP_WILDMATCH -""" -match multiple insns -""" - -ida_hexrays.LOCOPT_ALL -""" -is not set, only dirty blocks will be optimized - -redo optimization for all blocks. if this bit -""" - -ida_hexrays.LOCOPT_REFINE -""" -refine return type, ok to fail -""" - -ida_hexrays.LOCOPT_REFINE2 -""" -refine return type, try harder -""" - -ida_hexrays.LVINF_FORCE -""" -force allocation of a new variable. forces the decompiler to create a -new variable at ll.defea -""" - -ida_hexrays.LVINF_KEEP -""" -preserve saved user settings regardless of vars for example, if a var -loses all its user-defined attributes or even gets destroyed, keep its -'lvar_saved_info_t' . this is used for ephemeral variables that get -destroyed by macro recognition. -""" - -ida_hexrays.LVINF_NOPTR -""" -variable type should not be a pointer -""" - -ida_hexrays.MBA_ASRPROP -""" -assertion have been propagated -""" - -ida_hexrays.MBA_ASRTOK -""" -assertions have been generated -""" - -ida_hexrays.MBA_CALLS -""" -callinfo has been built -""" - -ida_hexrays.MBA_CHVARS -""" -can verify chain varnums -""" - -ida_hexrays.MBA_CMBBLK -""" -request to combine blocks -""" - -ida_hexrays.MBA_CMNSTK -""" -stkvars+stkargs should be considered as one area -""" - -ida_hexrays.MBA_COLGDL -""" -display graph after each reduction -""" - -ida_hexrays.MBA_DELPAIRS -""" -pairs have been deleted once -""" - -ida_hexrays.MBA_GLBOPT -""" -microcode has been optimized globally -""" - -ida_hexrays.MBA_INSGDL -""" -display instruction in graphs -""" - -ida_hexrays.MBA_LOADED -""" -loaded gdl, no instructions (debugging) -""" - -ida_hexrays.MBA_LVARS0 -""" -lvar pre-allocation has been performed -""" - -ida_hexrays.MBA_LVARS1 -""" -lvar real allocation has been performed -""" - -ida_hexrays.MBA_NICE -""" -apply transformations to c code -""" - -ida_hexrays.MBA_NOFUNC -""" -function is not present, addresses might be wrong -""" - -ida_hexrays.MBA_NUMADDR -""" -display definition addresses for numbers -""" - -ida_hexrays.MBA_OVERVAR -""" -an overlapped variable has been detected -""" - -ida_hexrays.MBA_PASSREGS -""" -has 'mcallinfo_t::pass_regs' -""" - -ida_hexrays.MBA_PATTERN -""" -microcode pattern, callinfo is present -""" - -ida_hexrays.MBA_PRCDEFS -""" -use precise defeas for chain-allocated lvars -""" - -ida_hexrays.MBA_PREOPT -""" -preoptimization stage complete -""" - -ida_hexrays.MBA_REFINE -""" -may refine return value size -""" - -ida_hexrays.MBA_RETFP -""" -function returns floating point value -""" - -ida_hexrays.MBA_RETREF -""" -return type has been refined -""" - -ida_hexrays.MBA_SAVRST -""" -save-restore analysis has been performed -""" - -ida_hexrays.MBA_SHORT -""" -use short display -""" - -ida_hexrays.MBA_SPLINFO -""" -(final_type ? idb_spoiled : spoiled_regs) is valid -""" - -ida_hexrays.MBA_THUNK -""" -thunk function -""" - -ida_hexrays.MBA_VALNUM -""" -display value numbers -""" - -ida_hexrays.MBA_WINGR32 -""" -use wingraph32 -""" - -ida_hexrays.MBL_BACKPROP -""" -performed backprop_cc -""" - -ida_hexrays.MBL_CALL -""" -call information has been built -""" - -ida_hexrays.MBL_COMB -""" -needs "combine" pass -""" - -ida_hexrays.MBL_DEAD -""" -needs "eliminate deads" pass -""" - -ida_hexrays.MBL_DMT64 -""" -needs "demote 64bits" -""" - -ida_hexrays.MBL_DSLOT -""" -block for delay slot -""" - -ida_hexrays.MBL_FAKE -""" -fake block (after a tail call) -""" - -ida_hexrays.MBL_GOTO -""" -this block is a goto target -""" - -ida_hexrays.MBL_INCONST -""" -inconsistent lists: we are building them -""" - -ida_hexrays.MBL_LIST -""" -use/def lists are ready (not dirty) -""" - -ida_hexrays.MBL_NONFAKE -""" -regular block -""" - -ida_hexrays.MBL_NORET -""" -dead end block: doesn't return execution control -""" - -ida_hexrays.MBL_PRIV -""" -the specified are accepted (used in patterns) - -private block - no instructions except -""" - -ida_hexrays.MBL_PROP -""" -needs 'propagation' pass -""" - -ida_hexrays.MBL_PUSH -""" -needs "convert push/pop instructions" -""" - -ida_hexrays.MBL_TCAL -""" -aritifical call block for tail calls -""" - -ida_hexrays.MBL_VALRANGES -""" -should optimize using value ranges -""" - -ida_hexrays.NALT_VD -""" -this index is not used by ida -""" - -ida_hexrays.NF_BINVDONE -""" -temporary internal bit: inverting bits is done -""" - -ida_hexrays.NF_BITNOT -""" -The user asked to invert bits of the constant. -""" - -ida_hexrays.NF_FIXED -""" -number format has been defined by the user -""" - -ida_hexrays.NF_NEGATE -""" -The user asked to negate the constant. -""" - -ida_hexrays.NF_NEGDONE -""" -temporary internal bit: negation has been performed -""" - -ida_hexrays.NF_STROFF -""" -internal bit: used as stroff, valid iff 'is_stroff()' -""" - -ida_hexrays.OPROP_CCFLAGS -""" -condition codes register value -""" - -ida_hexrays.OPROP_FLOAT -""" -possibly floating value -""" - -ida_hexrays.OPROP_IMPDONE -""" -imported operand (a pointer) has been dereferenced -""" - -ida_hexrays.OPROP_UDEFVAL -""" -uses undefined value -""" - -ida_hexrays.OPROP_UDT -""" -a struct or union -""" - -ida_hexrays.OPTI_ADDREXPRS -""" -optimize all address expressions (&x+N; &x-&y) -""" - -ida_hexrays.OPTI_COMBINSNS -""" -may combine insns (only for optimize_insn) -""" - -ida_hexrays.OPTI_MINSTKREF -""" -may update minstkref -""" - -ida_hexrays.OPTI_NO_LDXOPT -""" -do not optimize low/high(ldx) -""" - -ida_hexrays.SHINS_LDXEA -""" -display address of ldx expressions (not used) -""" - -ida_hexrays.SHINS_NUMADDR -""" -display definition addresses for numbers -""" - -ida_hexrays.SHINS_SHORT -""" -do not display use-def chains and other attrs -""" - -ida_hexrays.SHINS_VALNUM -""" -display value numbers -""" - -ida_hexrays.ULV_PRECISE_DEFEA -""" -Use precise defea's for lvar locations. -""" - -ida_hexrays.VDRUN_APPEND -""" -Create a new file or append to existing file. -""" - -ida_hexrays.VDRUN_CMDLINE -""" -called from ida's command line -""" - -ida_hexrays.VDRUN_LUMINA -""" -use lumina server -""" - -ida_hexrays.VDRUN_MAYSTOP -""" -the user can cancel decompilation -""" - -ida_hexrays.VDRUN_NEWFILE -""" -Create a new file or overwrite existing file. -""" - -ida_hexrays.VDRUN_ONLYNEW -""" -Fail if output file already exists. -""" - -ida_hexrays.VDRUN_SENDIDB -""" -Send problematic databases to hex-rays.com. -""" - -ida_hexrays.VDRUN_SILENT -""" -Silent decompilation. -""" - -ida_hexrays.VDRUN_STATS -""" -print statistics into vd_stats.txt -""" - -ida_hexrays.VDUI_LOCKED -""" -is locked? -""" - -ida_hexrays.VDUI_VALID -""" -is valid? -""" - -ida_hexrays.VDUI_VISIBLE -""" -is visible? -""" - -ida_hexrays.VR_AT_END -""" -get value ranges after the instruction or at the block end, just after -the last instruction (if M is NULL) -""" - -ida_hexrays.VR_AT_START -""" -at the block start (if M is NULL) - -get value ranges before the instruction or -""" - -ida_hexrays.VR_EXACT -""" -valrng size will be >= vivl.size - -find exact match. if not set, the returned -""" -=== ida_hexrays EPYDOC INJECTIONS END === -ida_ida.calc_default_idaplace_flags(): - - calc_default_idaplace_flags() -> int - - - Get default disassembly line options. - - -class ida_ida.compiler_info_t(): - - Proxy of C++ compiler_info_t class - - -ida_ida.compiler_info_t.cm: - compiler_info_t_cm_get(self) -> cm_t - -ida_ida.compiler_info_t.defalign: - compiler_info_t_defalign_get(self) -> uchar - -ida_ida.compiler_info_t.id: - compiler_info_t_id_get(self) -> comp_t - -ida_ida.compiler_info_t.size_b: - compiler_info_t_size_b_get(self) -> uchar - -ida_ida.compiler_info_t.size_e: - compiler_info_t_size_e_get(self) -> uchar - -ida_ida.compiler_info_t.size_i: - compiler_info_t_size_i_get(self) -> uchar - -ida_ida.compiler_info_t.size_l: - compiler_info_t_size_l_get(self) -> uchar - -ida_ida.compiler_info_t.size_ldbl: - compiler_info_t_size_ldbl_get(self) -> uchar - -ida_ida.compiler_info_t.size_ll: - compiler_info_t_size_ll_get(self) -> uchar - -ida_ida.compiler_info_t.size_s: - compiler_info_t_size_s_get(self) -> uchar - -class ida_ida.idainfo(): - - Proxy of C++ idainfo class - - -ida_ida.idainfo.abibits: - idainfo_abibits_get(self) -> uint32 - -ida_ida.idainfo.abiname: - - get_abiname(self) -> qstring - - -ida_ida.idainfo.af: - idainfo_af_get(self) -> uint32 - -ida_ida.idainfo.af2: - idainfo_af2_get(self) -> uint32 - -ida_ida.idainfo.appcall_options: - idainfo_appcall_options_get(self) -> uint32 - -ida_ida.idainfo.apptype: - idainfo_apptype_get(self) -> ushort - -ida_ida.idainfo.asmtype: - idainfo_asmtype_get(self) -> uchar - -ida_ida.idainfo.baseaddr: - idainfo_baseaddr_get(self) -> uval_t - -ida_ida.idainfo.bin_prefix_size: - idainfo_bin_prefix_size_get(self) -> short - -ida_ida.idainfo.cc: - idainfo_cc_get(self) -> compiler_info_t - -ida_ida.idainfo.comment: - idainfo_comment_get(self) -> uchar - -ida_ida.idainfo.database_change_count: - idainfo_database_change_count_get(self) -> uint32 - -ida_ida.idainfo.datatypes: - idainfo_datatypes_get(self) -> uval_t - -ida_ida.idainfo.demnames: - idainfo_demnames_get(self) -> uchar - -ida_ida.idainfo.filetype: - idainfo_filetype_get(self) -> ushort - -ida_ida.idainfo.get_abiname(): - - get_abiname(self) -> qstring - - -ida_ida.idainfo.get_maxEA(): - - get_maxEA(self) -> ea_t - - -ida_ida.idainfo.get_minEA(): - - get_minEA(self) -> ea_t - - -ida_ida.idainfo.get_procName(): - - get_procName(self) -> qstring - - -ida_ida.idainfo.highoff: - idainfo_highoff_get(self) -> ea_t - -ida_ida.idainfo.indent: - idainfo_indent_get(self) -> uchar - -ida_ida.idainfo.lenxref: - idainfo_lenxref_get(self) -> ushort - -ida_ida.idainfo.lflags: - idainfo_lflags_get(self) -> uint32 - -ida_ida.idainfo.listnames: - idainfo_listnames_get(self) -> uchar - -ida_ida.idainfo.long_demnames: - idainfo_long_demnames_get(self) -> uint32 - -ida_ida.idainfo.lowoff: - idainfo_lowoff_get(self) -> ea_t - -ida_ida.idainfo.main: - idainfo_main_get(self) -> ea_t - -ida_ida.idainfo.margin: - idainfo_margin_get(self) -> ushort - -ida_ida.idainfo.maxEA: - - get_maxEA(self) -> ea_t - - -ida_ida.idainfo.max_autoname_len: - idainfo_max_autoname_len_get(self) -> ushort - -ida_ida.idainfo.max_ea: - idainfo_max_ea_get(self) -> ea_t - -ida_ida.idainfo.maxref: - idainfo_maxref_get(self) -> uval_t - -ida_ida.idainfo.minEA: - - get_minEA(self) -> ea_t - - -ida_ida.idainfo.min_ea: - idainfo_min_ea_get(self) -> ea_t - -ida_ida.idainfo.nametype: - idainfo_nametype_get(self) -> char - -ida_ida.idainfo.omax_ea: - idainfo_omax_ea_get(self) -> ea_t - -ida_ida.idainfo.omin_ea: - idainfo_omin_ea_get(self) -> ea_t - -ida_ida.idainfo.ostype: - idainfo_ostype_get(self) -> ushort - -ida_ida.idainfo.outflags: - idainfo_outflags_get(self) -> uint32 - -ida_ida.idainfo.procName: - - get_procName(self) -> qstring - - -ida_ida.idainfo.procname: - idainfo_procname_get(self) -> char [16] - -ida_ida.idainfo.refcmtnum: - idainfo_refcmtnum_get(self) -> uchar - -ida_ida.idainfo.s_cmtflg: - idainfo_s_cmtflg_get(self) -> uchar - -ida_ida.idainfo.s_genflags: - idainfo_s_genflags_get(self) -> ushort - -ida_ida.idainfo.s_limiter: - idainfo_s_limiter_get(self) -> uchar - -ida_ida.idainfo.s_prefflag: - idainfo_s_prefflag_get(self) -> uchar - -ida_ida.idainfo.s_xrefflag: - idainfo_s_xrefflag_get(self) -> uchar - -ida_ida.idainfo.set_maxEA(): - - set_maxEA(self, ea) - - -ida_ida.idainfo.set_minEA(): - - set_minEA(self, ea) - - -ida_ida.idainfo.short_demnames: - idainfo_short_demnames_get(self) -> uint32 - -ida_ida.idainfo.specsegs: - idainfo_specsegs_get(self) -> uchar - -ida_ida.idainfo.start_cs: - idainfo_start_cs_get(self) -> sel_t - -ida_ida.idainfo.start_ea: - idainfo_start_ea_get(self) -> ea_t - -ida_ida.idainfo.start_ip: - idainfo_start_ip_get(self) -> ea_t - -ida_ida.idainfo.start_sp: - idainfo_start_sp_get(self) -> ea_t - -ida_ida.idainfo.start_ss: - idainfo_start_ss_get(self) -> sel_t - -ida_ida.idainfo.strlit_break: - idainfo_strlit_break_get(self) -> uchar - -ida_ida.idainfo.strlit_flags: - idainfo_strlit_flags_get(self) -> uchar - -ida_ida.idainfo.strlit_pref: - idainfo_strlit_pref_get(self) -> char [16] - -ida_ida.idainfo.strlit_sernum: - idainfo_strlit_sernum_get(self) -> uval_t - -ida_ida.idainfo.strlit_zeroes: - idainfo_strlit_zeroes_get(self) -> char - -ida_ida.idainfo.strtype: - idainfo_strtype_get(self) -> int32 - -ida_ida.idainfo.tag: - idainfo_tag_get(self) -> char [3] - -ida_ida.idainfo.type_xrefnum: - idainfo_type_xrefnum_get(self) -> uchar - -ida_ida.idainfo.version: - idainfo_version_get(self) -> ushort - -ida_ida.idainfo.xrefnum: - idainfo_xrefnum_get(self) -> uchar - -ida_ida.idainfo_big_arg_align(): - - inf_big_arg_align() -> bool - - -ida_ida.idainfo_gen_lzero(): - - inf_gen_lzero() -> bool - - -ida_ida.idainfo_gen_null(): - - inf_gen_null() -> bool - - -ida_ida.idainfo_gen_tryblks(): - - inf_gen_tryblks() -> bool - - -ida_ida.idainfo_get_demname_form(): - - inf_get_demname_form() -> uchar - - - Get 'DEMNAM_MASK' bits of #demnames. - - -ida_ida.idainfo_get_pack_mode(): - - inf_get_pack_mode() -> int - - -ida_ida.idainfo_is_32bit(): - - inf_is_32bit() -> bool - - -ida_ida.idainfo_is_64bit(): - - inf_is_64bit() -> bool - - -ida_ida.idainfo_is_auto_enabled(): - - inf_is_auto_enabled() -> bool - - -ida_ida.idainfo_is_be(): - - inf_is_be() -> bool - - -ida_ida.idainfo_is_dll(): - - inf_is_dll() -> bool - - -ida_ida.idainfo_is_flat_off32(): - - inf_is_flat_off32() -> bool - - -ida_ida.idainfo_is_graph_view(): - - inf_is_graph_view() -> bool - - -ida_ida.idainfo_is_hard_float(): - - inf_is_hard_float() -> bool - - -ida_ida.idainfo_is_kernel_mode(): - - inf_is_kernel_mode() -> bool - - -ida_ida.idainfo_is_mem_aligned4(): - - inf_is_mem_aligned4() -> bool - - -ida_ida.idainfo_is_snapshot(): - - inf_is_snapshot() -> bool - - -ida_ida.idainfo_is_wide_high_byte_first(): - - inf_is_wide_high_byte_first() -> bool - - -ida_ida.idainfo_like_binary(): - - inf_like_binary() -> bool - - -ida_ida.idainfo_line_pref_with_seg(): - - inf_line_pref_with_seg() -> bool - - -ida_ida.idainfo_loading_idc(): - - inf_loading_idc() -> bool - - -ida_ida.idainfo_map_stkargs(): - - inf_map_stkargs() -> bool - - -ida_ida.idainfo_pack_stkargs(): - - inf_pack_stkargs() -> bool - - -ida_ida.idainfo_readonly_idb(): - - inf_readonly_idb() -> bool - - -ida_ida.idainfo_set_64bit(): - - inf_set_64bit(_v=True) -> bool - - -ida_ida.idainfo_set_auto_enabled(): - - inf_set_auto_enabled(_v=True) -> bool - - -ida_ida.idainfo_set_be(): - - inf_set_be(_v=True) -> bool - - -ida_ida.idainfo_set_gen_lzero(): - - inf_set_gen_lzero(_v=True) -> bool - - -ida_ida.idainfo_set_gen_null(): - - inf_set_gen_null(_v=True) -> bool - - -ida_ida.idainfo_set_gen_tryblks(): - - inf_set_gen_tryblks(_v=True) -> bool - - -ida_ida.idainfo_set_graph_view(): - - inf_set_graph_view(_v=True) -> bool - - -ida_ida.idainfo_set_line_pref_with_seg(): - - inf_set_line_pref_with_seg(_v=True) -> bool - - -ida_ida.idainfo_set_pack_mode(): - - inf_set_pack_mode(pack_mode) -> int - - -ida_ida.idainfo_set_show_auto(): - - inf_set_show_auto(_v=True) -> bool - - -ida_ida.idainfo_set_show_line_pref(): - - inf_set_show_line_pref(_v=True) -> bool - - -ida_ida.idainfo_set_show_void(): - - inf_set_show_void(_v=True) -> bool - - -ida_ida.idainfo_set_wide_high_byte_first(): - - inf_set_wide_high_byte_first(_v=True) -> bool - - -ida_ida.idainfo_show_auto(): - - inf_show_auto() -> bool - - -ida_ida.idainfo_show_line_pref(): - - inf_show_line_pref() -> bool - - -ida_ida.idainfo_show_void(): - - inf_show_void() -> bool - - -ida_ida.idainfo_stack_ldbl(): - - inf_stack_ldbl() -> bool - - -ida_ida.idainfo_stack_varargs(): - - inf_stack_varargs() -> bool - - -ida_ida.idainfo_use_allasm(): - - inf_use_allasm() -> bool - - -ida_ida.idainfo_use_gcc_layout(): - - inf_use_gcc_layout() -> bool - - -ida_ida.inf_abi_set_by_user(): - - inf_abi_set_by_user() -> bool - - -ida_ida.inf_allow_non_matched_ops(): - - inf_allow_non_matched_ops() -> bool - - -ida_ida.inf_allow_sigmulti(): - - inf_allow_sigmulti() -> bool - - -ida_ida.inf_append_sigcmt(): - - inf_append_sigcmt() -> bool - - -ida_ida.inf_big_arg_align(): - - inf_big_arg_align() -> bool - - -ida_ida.inf_check_manual_ops(): - - inf_check_manual_ops() -> bool - - -ida_ida.inf_check_unicode_strlits(): - - inf_check_unicode_strlits() -> bool - - -ida_ida.inf_coagulate_code(): - - inf_coagulate_code() -> bool - - -ida_ida.inf_coagulate_data(): - - inf_coagulate_data() -> bool - - -ida_ida.inf_compress_idb(): - - inf_compress_idb() -> bool - - -ida_ida.inf_create_all_xrefs(): - - inf_create_all_xrefs() -> bool - - -ida_ida.inf_create_func_from_call(): - - inf_create_func_from_call() -> bool - - -ida_ida.inf_create_func_from_ptr(): - - inf_create_func_from_ptr() -> bool - - -ida_ida.inf_create_func_tails(): - - inf_create_func_tails() -> bool - - -ida_ida.inf_create_jump_tables(): - - inf_create_jump_tables() -> bool - - -ida_ida.inf_create_off_on_dref(): - - inf_create_off_on_dref() -> bool - - -ida_ida.inf_create_off_using_fixup(): - - inf_create_off_using_fixup() -> bool - - -ida_ida.inf_create_strlit_on_xref(): - - inf_create_strlit_on_xref() -> bool - - -ida_ida.inf_data_offset(): - - inf_data_offset() -> bool - - -ida_ida.inf_dbg_no_store_path(): - - inf_dbg_no_store_path() -> bool - - -ida_ida.inf_decode_fpp(): - - inf_decode_fpp() -> bool - - -ida_ida.inf_del_no_xref_insns(): - - inf_del_no_xref_insns() -> bool - - -ida_ida.inf_final_pass(): - - inf_final_pass() -> bool - - -ida_ida.inf_full_sp_ana(): - - inf_full_sp_ana() -> bool - - -ida_ida.inf_gen_assume(): - - inf_gen_assume() -> bool - - -ida_ida.inf_gen_lzero(): - - inf_gen_lzero() -> bool - - -ida_ida.inf_gen_null(): - - inf_gen_null() -> bool - - -ida_ida.inf_gen_org(): - - inf_gen_org() -> bool - - -ida_ida.inf_gen_tryblks(): - - inf_gen_tryblks() -> bool - - -ida_ida.inf_get_abibits(): - - inf_get_abibits() -> uint32 - - -ida_ida.inf_get_af(): - - inf_get_af() -> uint32 - - -ida_ida.inf_get_af2(): - - inf_get_af2() -> uint32 - - -ida_ida.inf_get_af2_low(): - - inf_get_af2_low() -> ushort - - - Get/set low 16bit half of inf.af2. - - -ida_ida.inf_get_af_high(): - - inf_get_af_high() -> ushort - - -ida_ida.inf_get_af_low(): - - inf_get_af_low() -> ushort - - - Get/set low/high 16bit halves of inf.af. - - -ida_ida.inf_get_appcall_options(): - - inf_get_appcall_options() -> uint32 - - -ida_ida.inf_get_apptype(): - - inf_get_apptype() -> ushort - - -ida_ida.inf_get_asmtype(): - - inf_get_asmtype() -> uchar - - -ida_ida.inf_get_baseaddr(): - - inf_get_baseaddr() -> uval_t - - -ida_ida.inf_get_bin_prefix_size(): - - inf_get_bin_prefix_size() -> short - - -ida_ida.inf_get_cc(): - - inf_get_cc(out) -> bool - - -ida_ida.inf_get_cc_cm(): - - inf_get_cc_cm() -> cm_t - - -ida_ida.inf_get_cc_defalign(): - - inf_get_cc_defalign() -> uchar - - -ida_ida.inf_get_cc_id(): - - inf_get_cc_id() -> comp_t - - -ida_ida.inf_get_cc_size_b(): - - inf_get_cc_size_b() -> uchar - - -ida_ida.inf_get_cc_size_e(): - - inf_get_cc_size_e() -> uchar - - -ida_ida.inf_get_cc_size_i(): - - inf_get_cc_size_i() -> uchar - - -ida_ida.inf_get_cc_size_l(): - - inf_get_cc_size_l() -> uchar - - -ida_ida.inf_get_cc_size_ldbl(): - - inf_get_cc_size_ldbl() -> uchar - - -ida_ida.inf_get_cc_size_ll(): - - inf_get_cc_size_ll() -> uchar - - -ida_ida.inf_get_cc_size_s(): - - inf_get_cc_size_s() -> uchar - - -ida_ida.inf_get_cmtflg(): - - inf_get_cmtflg() -> uchar - - -ida_ida.inf_get_comment(): - - inf_get_comment() -> uchar - - -ida_ida.inf_get_database_change_count(): - - inf_get_database_change_count() -> uint32 - - -ida_ida.inf_get_datatypes(): - - inf_get_datatypes() -> uval_t - - -ida_ida.inf_get_demname_form(): - - inf_get_demname_form() -> uchar - - - Get 'DEMNAM_MASK' bits of #demnames. - - -ida_ida.inf_get_demnames(): - - inf_get_demnames() -> uchar - - -ida_ida.inf_get_filetype(): - - inf_get_filetype() -> filetype_t - - -ida_ida.inf_get_genflags(): - - inf_get_genflags() -> ushort - - -ida_ida.inf_get_highoff(): - - inf_get_highoff() -> ea_t - - -ida_ida.inf_get_indent(): - - inf_get_indent() -> uchar - - -ida_ida.inf_get_lenxref(): - - inf_get_lenxref() -> ushort - - -ida_ida.inf_get_lflags(): - - inf_get_lflags() -> uint32 - - -ida_ida.inf_get_limiter(): - - inf_get_limiter() -> uchar - - -ida_ida.inf_get_listnames(): - - inf_get_listnames() -> uchar - - -ida_ida.inf_get_long_demnames(): - - inf_get_long_demnames() -> uint32 - - -ida_ida.inf_get_lowoff(): - - inf_get_lowoff() -> ea_t - - -ida_ida.inf_get_main(): - - inf_get_main() -> ea_t - - -ida_ida.inf_get_margin(): - - inf_get_margin() -> ushort - - -ida_ida.inf_get_max_autoname_len(): - - inf_get_max_autoname_len() -> ushort - - -ida_ida.inf_get_max_ea(): - - inf_get_max_ea() -> ea_t - - -ida_ida.inf_get_maxref(): - - inf_get_maxref() -> uval_t - - -ida_ida.inf_get_min_ea(): - - inf_get_min_ea() -> ea_t - - -ida_ida.inf_get_nametype(): - - inf_get_nametype() -> char - - -ida_ida.inf_get_netdelta(): - - inf_get_netdelta() -> sval_t - - -ida_ida.inf_get_omax_ea(): - - inf_get_omax_ea() -> ea_t - - -ida_ida.inf_get_omin_ea(): - - inf_get_omin_ea() -> ea_t - - -ida_ida.inf_get_ostype(): - - inf_get_ostype() -> ushort - - -ida_ida.inf_get_outflags(): - - inf_get_outflags() -> uint32 - - -ida_ida.inf_get_pack_mode(): - - inf_get_pack_mode() -> int - - -ida_ida.inf_get_prefflag(): - - inf_get_prefflag() -> uchar - - -ida_ida.inf_get_privrange(): - - inf_get_privrange(out) -> bool - inf_get_privrange() -> range_t - - -ida_ida.inf_get_privrange_end_ea(): - - inf_get_privrange_end_ea() -> ea_t - - -ida_ida.inf_get_privrange_start_ea(): - - inf_get_privrange_start_ea() -> ea_t - - -ida_ida.inf_get_procname(): - - inf_get_procname() -> bool - - -ida_ida.inf_get_refcmtnum(): - - inf_get_refcmtnum() -> uchar - - -ida_ida.inf_get_short_demnames(): - - inf_get_short_demnames() -> uint32 - - -ida_ida.inf_get_specsegs(): - - inf_get_specsegs() -> uchar - - -ida_ida.inf_get_start_cs(): - - inf_get_start_cs() -> sel_t - - -ida_ida.inf_get_start_ea(): - - inf_get_start_ea() -> ea_t - - -ida_ida.inf_get_start_ip(): - - inf_get_start_ip() -> ea_t - - -ida_ida.inf_get_start_sp(): - - inf_get_start_sp() -> ea_t - - -ida_ida.inf_get_start_ss(): - - inf_get_start_ss() -> sel_t - - -ida_ida.inf_get_strlit_break(): - - inf_get_strlit_break() -> uchar - - -ida_ida.inf_get_strlit_flags(): - - inf_get_strlit_flags() -> uchar - - -ida_ida.inf_get_strlit_pref(): - - inf_get_strlit_pref() -> bool - - -ida_ida.inf_get_strlit_sernum(): - - inf_get_strlit_sernum() -> uval_t - - -ida_ida.inf_get_strlit_zeroes(): - - inf_get_strlit_zeroes() -> char - - -ida_ida.inf_get_strtype(): - - inf_get_strtype() -> int32 - - -ida_ida.inf_get_type_xrefnum(): - - inf_get_type_xrefnum() -> uchar - - -ida_ida.inf_get_version(): - - inf_get_version() -> ushort - - -ida_ida.inf_get_xrefflag(): - - inf_get_xrefflag() -> uchar - - -ida_ida.inf_get_xrefnum(): - - inf_get_xrefnum() -> uchar - - -ida_ida.inf_guess_func_type(): - - inf_guess_func_type() -> bool - - -ida_ida.inf_handle_eh(): - - inf_handle_eh() -> bool - - -ida_ida.inf_handle_rtti(): - - inf_handle_rtti() -> bool - - -ida_ida.inf_hide_comments(): - - inf_hide_comments() -> bool - - -ida_ida.inf_hide_libfuncs(): - - inf_hide_libfuncs() -> bool - - -ida_ida.inf_inc_database_change_count(): - - inf_inc_database_change_count(cnt=1) - - -ida_ida.inf_is_32bit(): - - inf_is_32bit() -> bool - - -ida_ida.inf_is_64bit(): - - inf_is_64bit() -> bool - - -ida_ida.inf_is_auto_enabled(): - - inf_is_auto_enabled() -> bool - - -ida_ida.inf_is_be(): - - inf_is_be() -> bool - - -ida_ida.inf_is_dll(): - - inf_is_dll() -> bool - - -ida_ida.inf_is_flat_off32(): - - inf_is_flat_off32() -> bool - - -ida_ida.inf_is_graph_view(): - - inf_is_graph_view() -> bool - - -ida_ida.inf_is_hard_float(): - - inf_is_hard_float() -> bool - - -ida_ida.inf_is_kernel_mode(): - - inf_is_kernel_mode() -> bool - - -ida_ida.inf_is_limiter_empty(): - - inf_is_limiter_empty() -> bool - - -ida_ida.inf_is_limiter_thick(): - - inf_is_limiter_thick() -> bool - - -ida_ida.inf_is_limiter_thin(): - - inf_is_limiter_thin() -> bool - - -ida_ida.inf_is_mem_aligned4(): - - inf_is_mem_aligned4() -> bool - - -ida_ida.inf_is_snapshot(): - - inf_is_snapshot() -> bool - - -ida_ida.inf_is_wide_high_byte_first(): - - inf_is_wide_high_byte_first() -> bool - - -ida_ida.inf_like_binary(): - - inf_like_binary() -> bool - - -ida_ida.inf_line_pref_with_seg(): - - inf_line_pref_with_seg() -> bool - - -ida_ida.inf_loading_idc(): - - inf_loading_idc() -> bool - - -ida_ida.inf_macros_enabled(): - - inf_macros_enabled() -> bool - - -ida_ida.inf_map_stkargs(): - - inf_map_stkargs() -> bool - - -ida_ida.inf_mark_code(): - - inf_mark_code() -> bool - - -ida_ida.inf_no_store_user_info(): - - inf_no_store_user_info() -> bool - - -ida_ida.inf_noflow_to_data(): - - inf_noflow_to_data() -> bool - - -ida_ida.inf_noret_ana(): - - inf_noret_ana() -> bool - - -ida_ida.inf_op_offset(): - - inf_op_offset() -> bool - - -ida_ida.inf_pack_idb(): - - inf_pack_idb() -> bool - - -ida_ida.inf_pack_stkargs(): - - inf_pack_stkargs() -> bool - - -ida_ida.inf_postinc_strlit_sernum(): - - inf_postinc_strlit_sernum(cnt=1) -> uval_t - - -ida_ida.inf_prefix_show_funcoff(): - - inf_prefix_show_funcoff() -> bool - - -ida_ida.inf_prefix_show_segaddr(): - - inf_prefix_show_segaddr() -> bool - - -ida_ida.inf_prefix_show_stack(): - - inf_prefix_show_stack() -> bool - - -ida_ida.inf_propagate_regargs(): - - inf_propagate_regargs() -> bool - - -ida_ida.inf_propagate_stkargs(): - - inf_propagate_stkargs() -> bool - - -ida_ida.inf_readonly_idb(): - - inf_readonly_idb() -> bool - - -ida_ida.inf_rename_jumpfunc(): - - inf_rename_jumpfunc() -> bool - - -ida_ida.inf_rename_nullsub(): - - inf_rename_nullsub() -> bool - - -ida_ida.inf_set_32bit(): - - inf_set_32bit(_v=True) -> bool - - -ida_ida.inf_set_64bit(): - - inf_set_64bit(_v=True) -> bool - - -ida_ida.inf_set_abi_set_by_user(): - - inf_set_abi_set_by_user(_v=True) -> bool - - -ida_ida.inf_set_abibits(): - - inf_set_abibits(_v) -> bool - - -ida_ida.inf_set_af(): - - inf_set_af(_v) -> bool - - -ida_ida.inf_set_af2(): - - inf_set_af2(_v) -> bool - - -ida_ida.inf_set_af2_low(): - - inf_set_af2_low(saf) - - -ida_ida.inf_set_af_high(): - - inf_set_af_high(saf2) - - -ida_ida.inf_set_af_low(): - - inf_set_af_low(saf) - - -ida_ida.inf_set_allow_non_matched_ops(): - - inf_set_allow_non_matched_ops(_v=True) -> bool - - -ida_ida.inf_set_allow_sigmulti(): - - inf_set_allow_sigmulti(_v=True) -> bool - - -ida_ida.inf_set_appcall_options(): - - inf_set_appcall_options(_v) -> bool - - -ida_ida.inf_set_append_sigcmt(): - - inf_set_append_sigcmt(_v=True) -> bool - - -ida_ida.inf_set_apptype(): - - inf_set_apptype(_v) -> bool - - -ida_ida.inf_set_asmtype(): - - inf_set_asmtype(_v) -> bool - - -ida_ida.inf_set_auto_enabled(): - - inf_set_auto_enabled(_v=True) -> bool - - -ida_ida.inf_set_baseaddr(): - - inf_set_baseaddr(_v) -> bool - - -ida_ida.inf_set_be(): - - inf_set_be(_v=True) -> bool - - -ida_ida.inf_set_big_arg_align(): - - inf_set_big_arg_align(_v=True) -> bool - - -ida_ida.inf_set_bin_prefix_size(): - - inf_set_bin_prefix_size(_v) -> bool - - -ida_ida.inf_set_cc(): - - inf_set_cc(_v) -> bool - - -ida_ida.inf_set_cc_cm(): - - inf_set_cc_cm(_v) -> bool - - -ida_ida.inf_set_cc_defalign(): - - inf_set_cc_defalign(_v) -> bool - - -ida_ida.inf_set_cc_id(): - - inf_set_cc_id(_v) -> bool - - -ida_ida.inf_set_cc_size_b(): - - inf_set_cc_size_b(_v) -> bool - - -ida_ida.inf_set_cc_size_e(): - - inf_set_cc_size_e(_v) -> bool - - -ida_ida.inf_set_cc_size_i(): - - inf_set_cc_size_i(_v) -> bool - - -ida_ida.inf_set_cc_size_l(): - - inf_set_cc_size_l(_v) -> bool - - -ida_ida.inf_set_cc_size_ldbl(): - - inf_set_cc_size_ldbl(_v) -> bool - - -ida_ida.inf_set_cc_size_ll(): - - inf_set_cc_size_ll(_v) -> bool - - -ida_ida.inf_set_cc_size_s(): - - inf_set_cc_size_s(_v) -> bool - - -ida_ida.inf_set_check_manual_ops(): - - inf_set_check_manual_ops(_v=True) -> bool - - -ida_ida.inf_set_check_unicode_strlits(): - - inf_set_check_unicode_strlits(_v=True) -> bool - - -ida_ida.inf_set_cmtflg(): - - inf_set_cmtflg(_v) -> bool - - -ida_ida.inf_set_coagulate_code(): - - inf_set_coagulate_code(_v=True) -> bool - - -ida_ida.inf_set_coagulate_data(): - - inf_set_coagulate_data(_v=True) -> bool - - -ida_ida.inf_set_comment(): - - inf_set_comment(_v) -> bool - - -ida_ida.inf_set_compress_idb(): - - inf_set_compress_idb(_v=True) -> bool - - -ida_ida.inf_set_create_all_xrefs(): - - inf_set_create_all_xrefs(_v=True) -> bool - - -ida_ida.inf_set_create_func_from_call(): - - inf_set_create_func_from_call(_v=True) -> bool - - -ida_ida.inf_set_create_func_from_ptr(): - - inf_set_create_func_from_ptr(_v=True) -> bool - - -ida_ida.inf_set_create_func_tails(): - - inf_set_create_func_tails(_v=True) -> bool - - -ida_ida.inf_set_create_jump_tables(): - - inf_set_create_jump_tables(_v=True) -> bool - - -ida_ida.inf_set_create_off_on_dref(): - - inf_set_create_off_on_dref(_v=True) -> bool - - -ida_ida.inf_set_create_off_using_fixup(): - - inf_set_create_off_using_fixup(_v=True) -> bool - - -ida_ida.inf_set_create_strlit_on_xref(): - - inf_set_create_strlit_on_xref(_v=True) -> bool - - -ida_ida.inf_set_data_offset(): - - inf_set_data_offset(_v=True) -> bool - - -ida_ida.inf_set_database_change_count(): - - inf_set_database_change_count(_v) -> bool - - -ida_ida.inf_set_datatypes(): - - inf_set_datatypes(_v) -> bool - - -ida_ida.inf_set_dbg_no_store_path(): - - inf_set_dbg_no_store_path(_v=True) -> bool - - -ida_ida.inf_set_decode_fpp(): - - inf_set_decode_fpp(_v=True) -> bool - - -ida_ida.inf_set_del_no_xref_insns(): - - inf_set_del_no_xref_insns(_v=True) -> bool - - -ida_ida.inf_set_demnames(): - - inf_set_demnames(_v) -> bool - - -ida_ida.inf_set_dll(): - - inf_set_dll(_v=True) -> bool - - -ida_ida.inf_set_filetype(): - - inf_set_filetype(_v) -> bool - - -ida_ida.inf_set_final_pass(): - - inf_set_final_pass(_v=True) -> bool - - -ida_ida.inf_set_flat_off32(): - - inf_set_flat_off32(_v=True) -> bool - - -ida_ida.inf_set_full_sp_ana(): - - inf_set_full_sp_ana(_v=True) -> bool - - -ida_ida.inf_set_gen_assume(): - - inf_set_gen_assume(_v=True) -> bool - - -ida_ida.inf_set_gen_lzero(): - - inf_set_gen_lzero(_v=True) -> bool - - -ida_ida.inf_set_gen_null(): - - inf_set_gen_null(_v=True) -> bool - - -ida_ida.inf_set_gen_org(): - - inf_set_gen_org(_v=True) -> bool - - -ida_ida.inf_set_gen_tryblks(): - - inf_set_gen_tryblks(_v=True) -> bool - - -ida_ida.inf_set_genflags(): - - inf_set_genflags(_v) -> bool - - -ida_ida.inf_set_graph_view(): - - inf_set_graph_view(_v=True) -> bool - - -ida_ida.inf_set_guess_func_type(): - - inf_set_guess_func_type(_v=True) -> bool - - -ida_ida.inf_set_handle_eh(): - - inf_set_handle_eh(_v=True) -> bool - - -ida_ida.inf_set_handle_rtti(): - - inf_set_handle_rtti(_v=True) -> bool - - -ida_ida.inf_set_hard_float(): - - inf_set_hard_float(_v=True) -> bool - - -ida_ida.inf_set_hide_comments(): - - inf_set_hide_comments(_v=True) -> bool - - -ida_ida.inf_set_hide_libfuncs(): - - inf_set_hide_libfuncs(_v=True) -> bool - - -ida_ida.inf_set_highoff(): - - inf_set_highoff(_v) -> bool - - -ida_ida.inf_set_indent(): - - inf_set_indent(_v) -> bool - - -ida_ida.inf_set_kernel_mode(): - - inf_set_kernel_mode(_v=True) -> bool - - -ida_ida.inf_set_lenxref(): - - inf_set_lenxref(_v) -> bool - - -ida_ida.inf_set_lflags(): - - inf_set_lflags(_v) -> bool - - -ida_ida.inf_set_limiter(): - - inf_set_limiter(_v) -> bool - - -ida_ida.inf_set_limiter_empty(): - - inf_set_limiter_empty(_v=True) -> bool - - -ida_ida.inf_set_limiter_thick(): - - inf_set_limiter_thick(_v=True) -> bool - - -ida_ida.inf_set_limiter_thin(): - - inf_set_limiter_thin(_v=True) -> bool - - -ida_ida.inf_set_line_pref_with_seg(): - - inf_set_line_pref_with_seg(_v=True) -> bool - - -ida_ida.inf_set_listnames(): - - inf_set_listnames(_v) -> bool - - -ida_ida.inf_set_loading_idc(): - - inf_set_loading_idc(_v=True) -> bool - - -ida_ida.inf_set_long_demnames(): - - inf_set_long_demnames(_v) -> bool - - -ida_ida.inf_set_lowoff(): - - inf_set_lowoff(_v) -> bool - - -ida_ida.inf_set_macros_enabled(): - - inf_set_macros_enabled(_v=True) -> bool - - -ida_ida.inf_set_main(): - - inf_set_main(_v) -> bool - - -ida_ida.inf_set_map_stkargs(): - - inf_set_map_stkargs(_v=True) -> bool - - -ida_ida.inf_set_margin(): - - inf_set_margin(_v) -> bool - - -ida_ida.inf_set_mark_code(): - - inf_set_mark_code(_v=True) -> bool - - -ida_ida.inf_set_max_autoname_len(): - - inf_set_max_autoname_len(_v) -> bool - - -ida_ida.inf_set_max_ea(): - - inf_set_max_ea(_v) -> bool - - -ida_ida.inf_set_maxref(): - - inf_set_maxref(_v) -> bool - - -ida_ida.inf_set_mem_aligned4(): - - inf_set_mem_aligned4(_v=True) -> bool - - -ida_ida.inf_set_min_ea(): - - inf_set_min_ea(_v) -> bool - - -ida_ida.inf_set_nametype(): - - inf_set_nametype(_v) -> bool - - -ida_ida.inf_set_netdelta(): - - inf_set_netdelta(_v) -> bool - - -ida_ida.inf_set_no_store_user_info(): - - inf_set_no_store_user_info(_v=True) -> bool - - -ida_ida.inf_set_noflow_to_data(): - - inf_set_noflow_to_data(_v=True) -> bool - - -ida_ida.inf_set_noret_ana(): - - inf_set_noret_ana(_v=True) -> bool - - -ida_ida.inf_set_omax_ea(): - - inf_set_omax_ea(_v) -> bool - - -ida_ida.inf_set_omin_ea(): - - inf_set_omin_ea(_v) -> bool - - -ida_ida.inf_set_op_offset(): - - inf_set_op_offset(_v=True) -> bool - - -ida_ida.inf_set_ostype(): - - inf_set_ostype(_v) -> bool - - -ida_ida.inf_set_outflags(): - - inf_set_outflags(_v) -> bool - - -ida_ida.inf_set_pack_idb(): - - inf_set_pack_idb(_v=True) -> bool - - -ida_ida.inf_set_pack_mode(): - - inf_set_pack_mode(pack_mode) -> int - - -ida_ida.inf_set_pack_stkargs(): - - inf_set_pack_stkargs(_v=True) -> bool - - -ida_ida.inf_set_prefflag(): - - inf_set_prefflag(_v) -> bool - - -ida_ida.inf_set_prefix_show_funcoff(): - - inf_set_prefix_show_funcoff(_v=True) -> bool - - -ida_ida.inf_set_prefix_show_segaddr(): - - inf_set_prefix_show_segaddr(_v=True) -> bool - - -ida_ida.inf_set_prefix_show_stack(): - - inf_set_prefix_show_stack(_v=True) -> bool - - -ida_ida.inf_set_privrange(): - - inf_set_privrange(_v) -> bool - - -ida_ida.inf_set_privrange_end_ea(): - - inf_set_privrange_end_ea(_v) -> bool - - -ida_ida.inf_set_privrange_start_ea(): - - inf_set_privrange_start_ea(_v) -> bool - - -ida_ida.inf_set_procname(): - - inf_set_procname(_v, len=size_t(-1)) -> bool - - -ida_ida.inf_set_propagate_regargs(): - - inf_set_propagate_regargs(_v=True) -> bool - - -ida_ida.inf_set_propagate_stkargs(): - - inf_set_propagate_stkargs(_v=True) -> bool - - -ida_ida.inf_set_readonly_idb(): - - inf_set_readonly_idb(_v=True) -> bool - - -ida_ida.inf_set_refcmtnum(): - - inf_set_refcmtnum(_v) -> bool - - -ida_ida.inf_set_rename_jumpfunc(): - - inf_set_rename_jumpfunc(_v=True) -> bool - - -ida_ida.inf_set_rename_nullsub(): - - inf_set_rename_nullsub(_v=True) -> bool - - -ida_ida.inf_set_short_demnames(): - - inf_set_short_demnames(_v) -> bool - - -ida_ida.inf_set_should_create_stkvars(): - - inf_set_should_create_stkvars(_v=True) -> bool - - -ida_ida.inf_set_should_trace_sp(): - - inf_set_should_trace_sp(_v=True) -> bool - - -ida_ida.inf_set_show_all_comments(): - - inf_set_show_all_comments(_v=True) -> bool - - -ida_ida.inf_set_show_auto(): - - inf_set_show_auto(_v=True) -> bool - - -ida_ida.inf_set_show_hidden_funcs(): - - inf_set_show_hidden_funcs(_v=True) -> bool - - -ida_ida.inf_set_show_hidden_insns(): - - inf_set_show_hidden_insns(_v=True) -> bool - - -ida_ida.inf_set_show_hidden_segms(): - - inf_set_show_hidden_segms(_v=True) -> bool - - -ida_ida.inf_set_show_line_pref(): - - inf_set_show_line_pref(_v=True) -> bool - - -ida_ida.inf_set_show_repeatables(): - - inf_set_show_repeatables(_v=True) -> bool - - -ida_ida.inf_set_show_src_linnum(): - - inf_set_show_src_linnum(_v=True) -> bool - - -ida_ida.inf_set_show_void(): - - inf_set_show_void(_v=True) -> bool - - -ida_ida.inf_set_show_xref_fncoff(): - - inf_set_show_xref_fncoff(_v=True) -> bool - - -ida_ida.inf_set_show_xref_seg(): - - inf_set_show_xref_seg(_v=True) -> bool - - -ida_ida.inf_set_show_xref_tmarks(): - - inf_set_show_xref_tmarks(_v=True) -> bool - - -ida_ida.inf_set_show_xref_val(): - - inf_set_show_xref_val(_v=True) -> bool - - -ida_ida.inf_set_snapshot(): - - inf_set_snapshot(_v=True) -> bool - - -ida_ida.inf_set_specsegs(): - - inf_set_specsegs(_v) -> bool - - -ida_ida.inf_set_stack_ldbl(): - - inf_set_stack_ldbl(_v=True) -> bool - - -ida_ida.inf_set_stack_varargs(): - - inf_set_stack_varargs(_v=True) -> bool - - -ida_ida.inf_set_start_cs(): - - inf_set_start_cs(_v) -> bool - - -ida_ida.inf_set_start_ea(): - - inf_set_start_ea(_v) -> bool - - -ida_ida.inf_set_start_ip(): - - inf_set_start_ip(_v) -> bool - - -ida_ida.inf_set_start_sp(): - - inf_set_start_sp(_v) -> bool - - -ida_ida.inf_set_start_ss(): - - inf_set_start_ss(_v) -> bool - - -ida_ida.inf_set_strlit_autocmt(): - - inf_set_strlit_autocmt(_v=True) -> bool - - -ida_ida.inf_set_strlit_break(): - - inf_set_strlit_break(_v) -> bool - - -ida_ida.inf_set_strlit_flags(): - - inf_set_strlit_flags(_v) -> bool - - -ida_ida.inf_set_strlit_name_bit(): - - inf_set_strlit_name_bit(_v=True) -> bool - - -ida_ida.inf_set_strlit_names(): - - inf_set_strlit_names(_v=True) -> bool - - -ida_ida.inf_set_strlit_pref(): - - inf_set_strlit_pref(_v, len=size_t(-1)) -> bool - - -ida_ida.inf_set_strlit_savecase(): - - inf_set_strlit_savecase(_v=True) -> bool - - -ida_ida.inf_set_strlit_serial_names(): - - inf_set_strlit_serial_names(_v=True) -> bool - - -ida_ida.inf_set_strlit_sernum(): - - inf_set_strlit_sernum(_v) -> bool - - -ida_ida.inf_set_strlit_zeroes(): - - inf_set_strlit_zeroes(_v) -> bool - - -ida_ida.inf_set_strtype(): - - inf_set_strtype(_v) -> bool - - -ida_ida.inf_set_test_mode(): - - inf_set_test_mode(_v=True) -> bool - - -ida_ida.inf_set_trace_flow(): - - inf_set_trace_flow(_v=True) -> bool - - -ida_ida.inf_set_truncate_on_del(): - - inf_set_truncate_on_del(_v=True) -> bool - - -ida_ida.inf_set_type_xrefnum(): - - inf_set_type_xrefnum(_v) -> bool - - -ida_ida.inf_set_unicode_strlits(): - - inf_set_unicode_strlits(_v=True) -> bool - - -ida_ida.inf_set_use_allasm(): - - inf_set_use_allasm(_v=True) -> bool - - -ida_ida.inf_set_use_flirt(): - - inf_set_use_flirt(_v=True) -> bool - - -ida_ida.inf_set_use_gcc_layout(): - - inf_set_use_gcc_layout(_v=True) -> bool - - -ida_ida.inf_set_version(): - - inf_set_version(_v) -> bool - - -ida_ida.inf_set_wide_high_byte_first(): - - inf_set_wide_high_byte_first(_v=True) -> bool - - -ida_ida.inf_set_xrefflag(): - - inf_set_xrefflag(_v) -> bool - - -ida_ida.inf_set_xrefnum(): - - inf_set_xrefnum(_v) -> bool - - -ida_ida.inf_should_create_stkvars(): - - inf_should_create_stkvars() -> bool - - -ida_ida.inf_should_trace_sp(): - - inf_should_trace_sp() -> bool - - -ida_ida.inf_show_all_comments(): - - inf_show_all_comments() -> bool - - -ida_ida.inf_show_auto(): - - inf_show_auto() -> bool - - -ida_ida.inf_show_hidden_funcs(): - - inf_show_hidden_funcs() -> bool - - -ida_ida.inf_show_hidden_insns(): - - inf_show_hidden_insns() -> bool - - -ida_ida.inf_show_hidden_segms(): - - inf_show_hidden_segms() -> bool - - -ida_ida.inf_show_line_pref(): - - inf_show_line_pref() -> bool - - -ida_ida.inf_show_repeatables(): - - inf_show_repeatables() -> bool - - -ida_ida.inf_show_src_linnum(): - - inf_show_src_linnum() -> bool - - -ida_ida.inf_show_void(): - - inf_show_void() -> bool - - -ida_ida.inf_show_xref_fncoff(): - - inf_show_xref_fncoff() -> bool - - -ida_ida.inf_show_xref_seg(): - - inf_show_xref_seg() -> bool - - -ida_ida.inf_show_xref_tmarks(): - - inf_show_xref_tmarks() -> bool - - -ida_ida.inf_show_xref_val(): - - inf_show_xref_val() -> bool - - -ida_ida.inf_stack_ldbl(): - - inf_stack_ldbl() -> bool - - -ida_ida.inf_stack_varargs(): - - inf_stack_varargs() -> bool - - -ida_ida.inf_strlit_autocmt(): - - inf_strlit_autocmt() -> bool - - -ida_ida.inf_strlit_name_bit(): - - inf_strlit_name_bit() -> bool - - -ida_ida.inf_strlit_names(): - - inf_strlit_names() -> bool - - -ida_ida.inf_strlit_savecase(): - - inf_strlit_savecase() -> bool - - -ida_ida.inf_strlit_serial_names(): - - inf_strlit_serial_names() -> bool - - -ida_ida.inf_test_mode(): - - inf_test_mode() -> bool - - -ida_ida.inf_trace_flow(): - - inf_trace_flow() -> bool - - -ida_ida.inf_truncate_on_del(): - - inf_truncate_on_del() -> bool - - -ida_ida.inf_unicode_strlits(): - - inf_unicode_strlits() -> bool - - -ida_ida.inf_use_allasm(): - - inf_use_allasm() -> bool - - -ida_ida.inf_use_flirt(): - - inf_use_flirt() -> bool - - -ida_ida.inf_use_gcc_layout(): - - inf_use_gcc_layout() -> bool - - -ida_ida.is_filetype_like_binary(): - - is_filetype_like_binary(ft) -> bool - - - Is unstructured input file? - - - @param ft (C++: filetype_t) - - -ida_ida.macros_enabled(): - - inf_macros_enabled() -> bool - - -ida_ida.should_create_stkvars(): - - inf_should_create_stkvars() -> bool - - -ida_ida.should_trace_sp(): - - inf_should_trace_sp() -> bool - - -ida_ida.show_all_comments(): - - inf_show_all_comments() -> bool - - -ida_ida.show_repeatables(): - - inf_show_repeatables() -> bool - - -ida_ida.to_ea(): - - to_ea(reg_cs, reg_ip) -> ea_t - - - Convert (seg,off) value to a linear address. - - - @param reg_cs (C++: sel_t) - @param reg_ip (C++: ea_t) - - - -=== ida_ida EPYDOC INJECTIONS === -ida_ida.ABI_8ALIGN4 -""" -4 byte alignment for 8byte scalars (__int64/double) inside structures? -""" - -ida_ida.ABI_BIGARG_ALIGN -""" -(e.g. __int64 argument should be 8byte aligned on some 32bit -platforms) - -use natural type alignment for argument if the alignment exceeds -native word size -""" - -ida_ida.ABI_GCC_LAYOUT -""" -use gcc layout for udts (used for mingw) -""" - -ida_ida.ABI_HARD_FLOAT -""" -use the floating-point register set -""" - -ida_ida.ABI_MAP_STKARGS -""" -register arguments are mapped to stack area (and consume stack slots) -""" - -ida_ida.ABI_PACK_STKARGS -""" -do not align stack arguments to stack slots -""" - -ida_ida.ABI_SET_BY_USER -""" -compiler/abi were set by user flag and require SETCOMP_BY_USER flag to -be changed -""" - -ida_ida.ABI_STACK_LDBL -""" -long double arguments are passed on stack -""" - -ida_ida.ABI_STACK_VARARGS -""" -varargs are always passed on stack (even when there are free -registers) -""" - -ida_ida.AF2_DOEH -""" -Handle EH information. -""" - -ida_ida.AF2_DORTTI -""" -Handle RTTI information. -""" - -ida_ida.AF2_MACRO -""" -Try to combine several instructions into a macro instruction -""" - -ida_ida.AF_ANORET -""" -Perform 'no-return' analysis. -""" - -ida_ida.AF_CHKUNI -""" -Check for unicode strings. -""" - -ida_ida.AF_CODE -""" -Trace execution flow. -""" - -ida_ida.AF_DATOFF -""" -Automatically convert data to offsets. -""" - -ida_ida.AF_DOCODE -""" -Coagulate code segs at the final pass. -""" - -ida_ida.AF_DODATA -""" -Coagulate data segs at the final pass. -""" - -ida_ida.AF_DREFOFF -""" -Create offset if data xref to seg32 exists. -""" - -ida_ida.AF_FINAL -""" -Final pass of analysis. -""" - -ida_ida.AF_FIXUP -""" -Create offsets and segments using fixup info. -""" - -ida_ida.AF_FLIRT -""" -Use flirt signatures. -""" - -ida_ida.AF_FTAIL -""" -Create function tails. -""" - -ida_ida.AF_HFLIRT -""" -Automatically hide library functions. -""" - -ida_ida.AF_IMMOFF -""" -Convert 32bit instruction operand to offset. -""" - -ida_ida.AF_JFUNC -""" -Rename jump functions as j_... -""" - -ida_ida.AF_JUMPTBL -""" -Locate and create jump tables. -""" - -ida_ida.AF_LVAR -""" -Create stack variables. -""" - -ida_ida.AF_MARKCODE -""" -Mark typical code sequences as code. -""" - -ida_ida.AF_MEMFUNC -""" -Try to guess member function types. -""" - -ida_ida.AF_NULLSUB -""" -Rename empty functions as nullsub_... -""" - -ida_ida.AF_PROC -""" -Create functions if call is present. -""" - -ida_ida.AF_PROCPTR -""" -Create function if data xref data->code32 exists. -""" - -ida_ida.AF_PURDAT -""" -Control flow to data segment is ignored. -""" - -ida_ida.AF_REGARG -""" -Propagate register argument information. -""" - -ida_ida.AF_SIGCMT -""" -Append a signature name comment for recognized anonymous library -functions. -""" - -ida_ida.AF_SIGMLT -""" -Allow recognition of several copies of the same function. -""" - -ida_ida.AF_STKARG -""" -Propagate stack argument information. -""" - -ida_ida.AF_STRLIT -""" -Create string literal if data xref exists. -""" - -ida_ida.AF_TRACE -""" -Trace stack pointer. -""" - -ida_ida.AF_TRFUNC -""" -Truncate functions upon code deletion. -""" - -ida_ida.AF_UNK -""" -Delete instructions with no xrefs. -""" - -ida_ida.AF_USED -""" -Analyze and create all xrefs. -""" - -ida_ida.AF_VERSP -""" -Perform full SP-analysis. (\\ph{verify_sp}) -""" - -ida_ida.DEMNAM_CMNT -""" -display demangled names as comments -""" - -ida_ida.DEMNAM_FIRST -""" -override type info -""" - -ida_ida.DEMNAM_GCC3 -""" -assume gcc3 names (valid for gnu compiler) -""" - -ida_ida.DEMNAM_MASK -""" -mask for name form -""" - -ida_ida.DEMNAM_NAME -""" -display demangled names as regular names -""" - -ida_ida.DEMNAM_NONE -""" -don't display demangled names -""" - -ida_ida.IDAINFO_TAG_SIZE -""" -The database parameters. This structure is kept in the ida database. -It contains the essential parameters for the current program -""" - -ida_ida.IDB_COMPRESSED -""" -compress & pack database components -""" - -ida_ida.IDB_PACKED -""" -pack database components into .idb -""" - -ida_ida.IDB_UNPACKED -""" -leave database components unpacked -""" - -ida_ida.INFFL_ALLASM -""" -the target assembler - -may use constructs not supported by -""" - -ida_ida.INFFL_AUTO -""" -Autoanalysis is enabled? -""" - -ida_ida.INFFL_CHKOPS -""" -check manual operands? (unused) -""" - -ida_ida.INFFL_GRAPH_VIEW -""" -currently using graph options (\\dto{graph}) -""" - -ida_ida.INFFL_LOADIDC -""" -loading an idc file that contains database info -""" - -ida_ida.INFFL_NMOPS -""" -allow non-matched operands? (unused) -""" - -ida_ida.INFFL_NOUSER -""" -do not store user info in the database -""" - -ida_ida.INFFL_READONLY -""" -(internal) temporary interdiction to modify the database -""" - -ida_ida.LFLG_64BIT -""" -64-bit program? -""" - -ida_ida.LFLG_COMPRESS -""" -compress the database? -""" - -ida_ida.LFLG_DBG_NOPATH -""" -do not store input full path in debugger process options -""" - -ida_ida.LFLG_FLAT_OFF32 -""" -treat 'REF_OFF32' as 32-bit offset for 16bit segments (otherwise try -SEG16:OFF16) -""" - -ida_ida.LFLG_IS_DLL -""" -Is dynamic library? -""" - -ida_ida.LFLG_KERNMODE -""" -is kernel mode binary? -""" - -ida_ida.LFLG_MSF -""" -Byte order: is MSB first? -""" - -ida_ida.LFLG_PACK -""" -pack the database? -""" - -ida_ida.LFLG_PC_FLAT -""" -32-bit program? -""" - -ida_ida.LFLG_PC_FPP -""" -decode floating point processor instructions? -""" - -ida_ida.LFLG_SNAPSHOT -""" -memory snapshot was taken? -""" - -ida_ida.LFLG_WIDE_HBF -""" -(wide bytes: \\ph{dnbits} > 8) - -Bit order of wide bytes: high byte first? -""" - -ida_ida.LMT_EMPTY -""" -empty lines at the end of basic blocks -""" - -ida_ida.LMT_THICK -""" -thick borders -""" - -ida_ida.LMT_THIN -""" -thin borders -""" - -ida_ida.LN_AUTO -""" -include autogenerated names -""" - -ida_ida.LN_NORMAL -""" -include normal names -""" - -ida_ida.LN_PUBLIC -""" -include public names -""" - -ida_ida.LN_WEAK -""" -include weak names -""" - -ida_ida.OFLG_GEN_ASSUME -""" -Generate 'assume' directives? -""" - -ida_ida.OFLG_GEN_NULL -""" -Generate empty lines? -""" - -ida_ida.OFLG_GEN_ORG -""" -Generate 'org' directives? -""" - -ida_ida.OFLG_GEN_TRYBLKS -""" -Generate try/catch directives? -""" - -ida_ida.OFLG_LZERO -""" -generate leading zeroes in numbers -""" - -ida_ida.OFLG_PREF_SEG -""" -line prefixes with segment name? -""" - -ida_ida.OFLG_SHOW_AUTO -""" -Display autoanalysis indicator? -""" - -ida_ida.OFLG_SHOW_PREF -""" -Show line prefixes? -""" - -ida_ida.OFLG_SHOW_VOID -""" -Display void marks? -""" - -ida_ida.PREF_FNCOFF -""" -show function offsets? -""" - -ida_ida.PREF_SEGADR -""" -show segment addresses? -""" - -ida_ida.PREF_STACK -""" -show stack pointer? -""" - -ida_ida.SCF_ALLCMT -""" -comment all lines? -""" - -ida_ida.SCF_LINNUM -""" -show source line numbers -""" - -ida_ida.SCF_NOCMT -""" -no comments at all -""" - -ida_ida.SCF_RPTCMT -""" -show repeatable comments? -""" - -ida_ida.SCF_SHHID_FUNC -""" -show hidden functions -""" - -ida_ida.SCF_SHHID_ITEM -""" -show hidden instructions -""" - -ida_ida.SCF_SHHID_SEGM -""" -show hidden segments -""" - -ida_ida.SCF_TESTMODE -""" -testida.idc is running -""" - -ida_ida.STRF_AUTO -""" -names have 'autogenerated' bit? -""" - -ida_ida.STRF_COMMENT -""" -generate auto comment for string references? -""" - -ida_ida.STRF_GEN -""" -generate names? -""" - -ida_ida.STRF_SAVECASE -""" -preserve case of strings for identifiers -""" - -ida_ida.STRF_SERIAL -""" -generate serial names? -""" - -ida_ida.STRF_UNICODE -""" -unicode strings are present? -""" - -ida_ida.SW_SEGXRF -""" -show segments in xrefs? -""" - -ida_ida.SW_XRFFNC -""" -show function offsets? -""" - -ida_ida.SW_XRFMRK -""" -show xref type marks? -""" - -ida_ida.SW_XRFVAL -""" -show xref values? (otherwise-"...") -""" - -ida_ida.UA_MAXOP -""" -max number of operands allowed for an instruction -""" -=== ida_ida EPYDOC INJECTIONS END === -ida_idaapi.CustomIDAMemo.CreateGroups(): - - Send a request to modify the graph by creating a - (set of) group(s), and perform an animation. - - Each object in the 'groups_infos' list must be of the format: - { - "nodes" : [, , , ...] # The list of nodes to group - "text" : # The synthetic text for that group - } - - @param groups_infos: A list of objects that describe those groups. - @return: A [, , ...] list of group nodes, or None (failure). - - -ida_idaapi.CustomIDAMemo.DelNodesInfos(): - - Delete the properties for the given node(s). - - @param nodes: A list of node IDs - - -ida_idaapi.CustomIDAMemo.DeleteGroups(): - - Send a request to delete the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param new_current: A node to focus on after the groups have been deleted - @return: True on success, False otherwise. - - -ida_idaapi.CustomIDAMemo.GetNodeInfo(): - - Get the properties for the given node. - - @param node: The index of the node. - @return: A tuple (bg_color, frame_color, ea, text), or None. - - -ida_idaapi.CustomIDAMemo.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_idaapi.CustomIDAMemo.Refresh(): - - Refreshes the view. This causes the OnRefresh() to be called - - -ida_idaapi.CustomIDAMemo.SetCurrentRendererType(): - - Set the current view's renderer. - - @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. - - -ida_idaapi.CustomIDAMemo.SetGroupsVisibility(): - - Send a request to expand/collapse the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param expand: True to expand the group, False otherwise. - @param new_current: A node to focus on after the groups have been expanded/collapsed. - @return: True on success, False otherwise. - - -ida_idaapi.CustomIDAMemo.SetNodeInfo(): - - Set the properties for the given node. - - Example usage (set second nodes's bg color to red): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff0000 - inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) - - @param node_index: The node index. - @param node_info: An idaapi.node_info_t instance. - @param flags: An OR'ed value of NIF_* values. - - -ida_idaapi.CustomIDAMemo.SetNodesInfos(): - - Set the properties for the given nodes. - - Example usage (set first three nodes's bg color to purple): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff00ff - inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) - - @param values: A dictionary of 'int -> node_info_t' objects. - - -ida_idaapi.CustomIDAMemo.hook(): - - hook(self) -> bool - - -ida_idaapi.CustomIDAMemo.unhook(): - - unhook(self) -> bool - - -ida_idaapi.CustomIDAMemo.view_created(): - - view_created(self, view) - - -ida_idaapi.IDAPython_Completion(): - - Internal utility class for auto-completion support - - -ida_idaapi.IDAPython_ExecScript(): - - Run the specified script. - It also addresses http://code.google.com/p/idapython/issues/detail?id=42 - - This function is used by the low-level plugin code. - - -ida_idaapi.IDAPython_ExecSystem(): - - Executes a command with popen(). - - -ida_idaapi.IDAPython_FormatExc(): - - This function is used to format an exception given the - values returned by a PyErr_Fetch() - - -ida_idaapi.IDAPython_LoadProcMod(): - - Load processor module. - - -ida_idaapi.IDAPython_UnLoadProcMod(): - - Unload processor module. - - -class ida_idaapi.PyIdc_cvt_int64__(): - - Helper class for explicitly representing VT_INT64 values - - -class ida_idaapi.PyIdc_cvt_refclass__(): - - Helper class for representing references to immutable objects - - -ida_idaapi.PyIdc_cvt_refclass__.cstr(): - - Returns the string as a C string (up to the zero termination) - - -ida_idaapi.as_cstr(): - - Returns a C str from the passed value. The passed value can be of type refclass (returned by a call to buffer() or byref()) - It scans for the first and returns the string value up to that point. - - -ida_idaapi.as_int32(): - - Returns a number as a signed int32 number - - -ida_idaapi.as_signed(): - - Returns a number as signed. The number of bits are specified by the user. - The MSB holds the sign. - - -ida_idaapi.as_uint32(): - - Returns a number as an unsigned int32 number - - -ida_idaapi.as_unicode(): - - Convenience function to convert a string into appropriate unicode format - - -ida_idaapi.copy_bits(): - - Copy bits from a value - @param v: the value - @param s: starting bit (0-based) - @param e: ending bit - - -ida_idaapi.disable_script_timeout(): - - disable_script_timeout() - - - Disables the script timeout and hides the script wait box. - Calling L{set_script_timeout} will not have any effects until the script is compiled and executed again - - @return: None - - -ida_idaapi.enable_extlang_python(): - - enable_extlang_python(enable) - - - Enables or disables Python extlang. - When enabled, all expressions will be evaluated by Python. - @param enable: Set to True to enable, False otherwise - - -ida_idaapi.enable_python_cli(): - - enable_python_cli(enable) - - -ida_idaapi.format_basestring(): - - format_basestring(_in) -> PyObject * - - -ida_idaapi.get_inf_structure(): - - get_inf_structure() -> idainfo - - - Returns the global variable 'inf' (an instance of idainfo structure, see ida.hpp) - - -class ida_idaapi.loader_input_t(): - - Proxy of C++ loader_input_t class - - - A helper class to work with linput_t related functions. - This class is also used by file loaders scripts. - - -ida_idaapi.loader_input_t.close(): - - close(self) - - -ida_idaapi.loader_input_t.file2base(): - - file2base(self, pos, ea1, ea2, patchable) -> int - - - Load portion of file into the database - This function will include (ea1..ea2) into the addressing space of the - program (make it enabled) - @param li: pointer ot input source - @param pos: position in the file - @param (ea1..ea2): range of destination linear addresses - @param patchable: should the kernel remember correspondance of - file offsets to linear addresses. - @return: 1-ok,0-read error, a warning is displayed - - -ida_idaapi.loader_input_t.filename(): - - filename(self) -> PyObject * - - -ida_idaapi.loader_input_t.from_cobject(): - - from_cobject(pycobject) -> loader_input_t - - -ida_idaapi.loader_input_t.from_fp(): - - from_fp(fp) -> loader_input_t - - - A static method to construct an instance from a FILE* - - -ida_idaapi.loader_input_t.from_linput(): - - from_linput(linput) -> loader_input_t - - -ida_idaapi.loader_input_t.get_char(): - - get_char(self) -> PyObject * - - - Reads a single character from the file. Returns None if EOF or the read character - - -ida_idaapi.loader_input_t.get_linput(): - - get_linput(self) -> linput_t * - - -ida_idaapi.loader_input_t.gets(): - - gets(self, len) -> PyObject * - - - Reads a line from the input file. Returns the read line or None - - -ida_idaapi.loader_input_t.getz(): - - getz(self, sz, fpos=-1) -> PyObject * - - - Returns a zero terminated string at the given position - @param sz: maximum size of the string - @param fpos: if != -1 then seek will be performed before reading - @return: The string or None on failure. - - -ida_idaapi.loader_input_t.open(): - - open(self, filename, remote=False) -> bool - - - Opens a file (or a remote file) - @return: Boolean - - -ida_idaapi.loader_input_t.open_memory(): - - open_memory(self, start, size=0) -> bool - - - Create a linput for process memory (By internally calling idaapi.create_memory_linput()) - This linput will use dbg->read_memory() to read data - @param start: starting address of the input - @param size: size of the memory range to represent as linput - if unknown, may be passed as 0 - - -ida_idaapi.loader_input_t.opened(): - - opened(self) -> bool - - - Checks if the file is opened or not - - -ida_idaapi.loader_input_t.read(): - - read(self, size) -> PyObject * - - - Reads from the file. Returns the buffer or None - - -ida_idaapi.loader_input_t.readbytes(): - - readbytes(self, size, big_endian) -> PyObject * - - - Similar to read() but it respect the endianness - - -ida_idaapi.loader_input_t.seek(): - - seek(self, pos, whence=SEEK_SET) -> int64 - - - Set input source position - @return: the new position (not 0 as fseek!) - - -ida_idaapi.loader_input_t.set_linput(): - - set_linput(self, linput) - - - Links the current loader_input_t instance to a linput_t instance - - -ida_idaapi.loader_input_t.size(): - - size(self) -> int64 - - -ida_idaapi.loader_input_t.tell(): - - tell(self) -> int64 - - - Returns the current position - - -ida_idaapi.loader_input_t_from_cobject(): - - loader_input_t_from_cobject(pycobject) -> loader_input_t - - -ida_idaapi.loader_input_t_from_fp(): - - loader_input_t_from_fp(fp) -> loader_input_t - - -ida_idaapi.loader_input_t_from_linput(): - - loader_input_t_from_linput(linput) -> loader_input_t - - -ida_idaapi.notify_when(): - - Register a callback that will be called when an event happens. - @param when: one of NW_XXXX constants - @param callback: This callback prototype varies depending on the 'when' parameter: - The general callback format: - def notify_when_callback(nw_code) - In the case of NW_OPENIDB: - def notify_when_callback(nw_code, is_old_database) - @return: Boolean - - -class ida_idaapi.object_t(): - - Helper class used to initialize empty objects - - -ida_idaapi.parse_command_line3(): - - parse_command_line3(cmdline) -> PyObject * - - -class ida_idaapi.plugin_t(): - - Base class for all scripted plugins. - - -class ida_idaapi.py_clinked_object_t(): - - This is a utility and base class for C linked objects - - -ida_idaapi.py_clinked_object_t._free(): - - Explicitly delete the link (only if not static) - - -ida_idaapi.py_clinked_object_t.assign(): - - Overwrite me. - This method allows you to assign an instance contents to anothers - @return: Boolean - - -ida_idaapi.py_clinked_object_t.copy(): - - Returns a new copy of this class - - -ida_idaapi.pycim_get_tcustom_control(): - - pycim_get_widget(self) -> TWidget * - - -ida_idaapi.pycim_get_tform(): - - pycim_get_widget(self) -> TWidget * - - -ida_idaapi.pycim_get_widget(): - - pycim_get_widget(self) -> TWidget * - - -ida_idaapi.pycim_view_close(): - - pycim_view_close(self) - - -ida_idaapi.pygc_create_groups(): - - pygc_create_groups(self, groups_infos) -> PyObject * - - -ida_idaapi.pygc_del_nodes_infos(): - - pygc_del_nodes_infos(self, py_nodes) - - -ida_idaapi.pygc_delete_groups(): - - pygc_delete_groups(self, groups, new_current) -> PyObject * - - -ida_idaapi.pygc_get_current_renderer_type(): - - pygc_get_current_renderer_type(self) -> PyObject * - - -ida_idaapi.pygc_get_node_info(): - - pygc_get_node_info(self, py_node_idx) -> PyObject * - - -ida_idaapi.pygc_refresh(): - - pygc_refresh(self) - - -ida_idaapi.pygc_set_current_renderer_type(): - - pygc_set_current_renderer_type(self, py_rt) - - -ida_idaapi.pygc_set_groups_visibility(): - - pygc_set_groups_visibility(self, groups, expand, new_current) -> PyObject * - - -ida_idaapi.pygc_set_node_info(): - - pygc_set_node_info(self, py_node_idx, py_node_info, py_flags) - - -ida_idaapi.pygc_set_nodes_infos(): - - pygc_set_nodes_infos(self, values) - - -class ida_idaapi.pyidc_cvt_helper__(): - - This is a special helper object that helps detect which kind - of object is this python object wrapping and how to convert it - back and from IDC. - This object is characterized by its special attribute and its value - - -class ida_idaapi.pyidc_opaque_object_t(): - - This is the base class for all Python<->IDC opaque objects - - -ida_idaapi.require(): - - Load, or reload a module. - - When under heavy development, a user's tool might consist of multiple - modules. If those are imported using the standard 'import' mechanism, - there is no guarantee that the Python implementation will re-read - and re-evaluate the module's Python code. In fact, it usually doesn't. - What should be done instead is 'reload()'-ing that module. - - This is a simple helper function that will do just that: In case the - module doesn't exist, it 'import's it, and if it does exist, - 'reload()'s it. - - The importing module (i.e., the module calling require()) will have - the loaded module bound to its globals(), under the name 'modulename'. - (If require() is called from the command line, the importing module - will be '__main__'.) - - For more information, see: . - - -ida_idaapi.set_script_timeout(): - - set_script_timeout(timeout) -> int - - - Changes the script timeout value. The script wait box dialog will be hidden and shown again when the timeout elapses. - See also L{disable_script_timeout}. - - @param timeout: This value is in seconds. - If this value is set to zero then the script will never timeout. - @return: Returns the old timeout value - - -ida_idaapi.struct_unpack(): - - Unpack a buffer given its length and offset using struct.unpack_from(). - This function will know how to unpack the given buffer by using the lookup table '__struct_unpack_table' - If the buffer is of unknown length then None is returned. Otherwise the unpacked value is returned. - - -ida_idc.get_mark_comment(): - - get_mark_comment(slot) -> PyObject * - - -ida_idc.get_marked_pos(): - - get_marked_pos(slot) -> ea_t - - -ida_idc.mark_position(): - - mark_position(ea, lnnum, x, y, slot, comment) - - -ida_idd.Appcall__.array(): - - Defines an array type. Later you need to pack() / unpack() - - -ida_idd.Appcall__.buffer(): - - Creates a string buffer. The returned value (r) will be a byref object. - Use r.value to get the contents and r.size to get the buffer's size - - -ida_idd.Appcall__.byref(): - - Method to create references to immutable objects - Currently we support references to int/strings - Objects need not be passed by reference (this will be done automatically) - - -ida_idd.Appcall__.cleanup_appcall(): - - Equivalent to IDC's CleanupAppcall() - - -ida_idd.Appcall__.get_appcall_options(): - - Return the global Appcall options - - -ida_idd.Appcall__.int64(): - - Whenever a 64bit number is needed use this method to construct an object - - -ida_idd.Appcall__.obj(): - - Returns an empty object or objects with attributes as passed via its keywords arguments - - -ida_idd.Appcall__.proto(): - - Allows you to instantiate an appcall (callable object) with the desired prototype - @param name_or_ea: The name of the function (will be resolved with LocByName()) - @param proto_or_tinfo: function prototype as a string or type of the function as tinfo_t object - @return: - - On failure it raises an exception if the prototype could not be parsed - or the address is not resolvable - - Returns a callbable Appcall instance with the given prototypes and flags - - -ida_idd.Appcall__.set_appcall_options(): - - Method to change the Appcall options globally (not per Appcall) - - -ida_idd.Appcall__.typedobj(): - - Returns an appcall object for a type (can be given as tinfo_t object or - as a string declaration) - One can then use retrieve() member method - @param ea: Optional parameter that later can be used to retrieve the type - @return: Appcall object or raises ValueError exception - - -ida_idd.Appcall__.valueof(): - - Returns the numeric value of a given name string. - If the name could not be resolved then the default value will be returned - - -class ida_idd.Appcall_array__(): - - This class is used with Appcall.array() method - - -ida_idd.Appcall_array__.pack(): - - Packs a list or tuple into a byref buffer - - -ida_idd.Appcall_array__.try_to_convert_to_list(): - - Is this object a list? We check for the existance of attribute zero and attribute self.size-1 - - -ida_idd.Appcall_array__.unpack(): - - Unpacks an array back into a list or an object - - -class ida_idd.Appcall_callable__(): - - Helper class to issue appcalls using a natural syntax: - appcall.FunctionNameInTheDatabase(arguments, ....) - or - appcall["Function@8"](arguments, ...) - or - f8 = appcall["Function@8"] - f8(arg1, arg2, ...) - or - o = appcall.obj() - i = byref(5) - appcall.funcname(arg1, i, "hello", o) - - -ida_idd.Appcall_callable__.retrieve(): - - Unpacks a typed object from the database if an ea is given or from a string if a string was passed - @param src: the address of the object or a string - @return: Returns a tuple of boolean and object or error number (Bool, Error | Object). - - -ida_idd.Appcall_callable__.store(): - - Packs an object into a given ea if provided or into a string if no address was passed. - @param obj: The object to pack - @param dest_ea: If packing to idb this will be the store location - @param base_ea: If packing to a buffer, this will be the base that will be used to relocate the pointers - - @return: - - If packing to a string then a Tuple(Boolean, packed_string or error code) - - If packing to the database then a return code is returned (0 is success) - - -class ida_idd.Appcall_consts__(): - - Helper class used by Appcall.Consts attribute - It is used to retrieve constants via attribute access - - -ida_idd.appcall(): - - appcall(func_ea, tid, py_type, py_fields, arg_list) -> PyObject * - - -class ida_idd.bptaddr_t(): - - Proxy of C++ bptaddr_t class - - -ida_idd.bptaddr_t.hea: - bptaddr_t_hea_get(self) -> ea_t - -ida_idd.bptaddr_t.kea: - bptaddr_t_kea_get(self) -> ea_t - -class ida_idd.call_stack_info_t(): - - Proxy of C++ call_stack_info_t class - - -ida_idd.call_stack_info_t.callea: - call_stack_info_t_callea_get(self) -> ea_t - -ida_idd.call_stack_info_t.fp: - call_stack_info_t_fp_get(self) -> ea_t - -ida_idd.call_stack_info_t.funcea: - call_stack_info_t_funcea_get(self) -> ea_t - -ida_idd.call_stack_info_t.funcok: - call_stack_info_t_funcok_get(self) -> bool - -class ida_idd.call_stack_t(): - - Proxy of C++ qvector<(call_stack_info_t)> class - - -ida_idd.call_stack_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_idd.call_stack_t.at(): - - at(self, _idx) -> call_stack_info_t - - -ida_idd.call_stack_t.begin(): - - begin(self) -> call_stack_info_t - begin(self) -> call_stack_info_t - - -ida_idd.call_stack_t.capacity(): - - capacity(self) -> size_t - - -ida_idd.call_stack_t.clear(): - - clear(self) - - -ida_idd.call_stack_t.empty(): - - empty(self) -> bool - - -ida_idd.call_stack_t.end(): - - end(self) -> call_stack_info_t - end(self) -> call_stack_info_t - - -ida_idd.call_stack_t.erase(): - - erase(self, it) -> call_stack_info_t - erase(self, first, last) -> call_stack_info_t - - -ida_idd.call_stack_t.extract(): - - extract(self) -> call_stack_info_t - - -ida_idd.call_stack_t.find(): - - find(self, x) -> call_stack_info_t - find(self, x) -> call_stack_info_t - - -ida_idd.call_stack_t.grow(): - - grow(self, x=call_stack_info_t()) - - -ida_idd.call_stack_t.has(): - - has(self, x) -> bool - - -ida_idd.call_stack_t.inject(): - - inject(self, s, len) - - -ida_idd.call_stack_t.insert(): - - insert(self, it, x) -> call_stack_info_t - - -ida_idd.call_stack_t.pop_back(): - - pop_back(self) - - -ida_idd.call_stack_t.push_back(): - - push_back(self, x) - push_back(self) -> call_stack_info_t - - -ida_idd.call_stack_t.qclear(): - - qclear(self) - - -ida_idd.call_stack_t.reserve(): - - reserve(self, cnt) - - -ida_idd.call_stack_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_idd.call_stack_t.size(): - - size(self) -> size_t - - -ida_idd.call_stack_t.swap(): - - swap(self, r) - - -ida_idd.call_stack_t.truncate(): - - truncate(self) - - -ida_idd.can_exc_continue(): - - can_exc_continue(ev) -> bool - - -ida_idd.cleanup_appcall(): - - cleanup_appcall(tid) -> error_t - - - Cleanup after manual appcall. - - @param tid: thread to use. NO_THREAD means to use the current thread - The application state is restored as it was before calling - the last appcall(). Nested appcalls are supported. (C++: - thid_t) - @return: eOk if successful, otherwise an error code - - -ida_idd.dbg_appcall(): - - dbg_appcall(retval, func_ea, tid, ptif, argv, argnum) -> error_t - - - Call a function from the debugged application. - - @param retval (C++: idc_value_t *) - @param func_ea: address to call (C++: ea_t) - @param tid: thread to use. NO_THREAD means to use the current thread - (C++: thid_t) - @param ptif: pointer to type of the function to call (C++: const - tinfo_t *) - @param argv: array of arguments (C++: idc_value_t *) - @param argnum: number of actual arguments (C++: size_t) - @return: eOk if successful, otherwise an error code - - -ida_idd.dbg_can_query(): - dbg_can_query() -> bool - -ida_idd.dbg_get_memory_info(): - - dbg_get_memory_info() -> PyObject * - - - This function returns the memory configuration of a debugged process. - @return: - None if no debugger is active - tuple(start_ea, end_ea, name, sclass, sbase, bitness, perm) - - -ida_idd.dbg_get_name(): - - dbg_get_name() -> PyObject * - - - This function returns the current debugger's name. - @return: Debugger name or None if no debugger is active - - -ida_idd.dbg_get_registers(): - - dbg_get_registers() -> PyObject * - - - This function returns the register definition from the currently loaded debugger. - Basically, it returns an array of structure similar to to idd.hpp / register_info_t - @return: - None if no debugger is loaded - tuple(name, flags, class, dtype, bit_strings, default_bit_strings_mask) - The bit_strings can be a tuple of strings or None (if the register does not have bit_strings) - - -ida_idd.dbg_get_thread_sreg_base(): - - dbg_get_thread_sreg_base(py_tid, py_sreg_value) -> PyObject * - - - Returns the segment register base value - @param tid: thread id - @param sreg_value: segment register (selector) value - @return: - - The base as an 'ea' - - Or None on failure - - -ida_idd.dbg_read_memory(): - - dbg_read_memory(py_ea, py_sz) -> PyObject * - - - Reads from the debugee's memory at the specified ea - @return: - - The read buffer (as a string) - - Or None on failure - - -ida_idd.dbg_write_memory(): - - dbg_write_memory(py_ea, py_buf) -> PyObject * - - - Writes a buffer to the debugee's memory - @return: Boolean - - -class ida_idd.debapp_attrs_t(): - - Proxy of C++ debapp_attrs_t class - - -ida_idd.debapp_attrs_t.addrsize: - debapp_attrs_t_addrsize_get(self) -> int - -ida_idd.debapp_attrs_t.cbsize: - debapp_attrs_t_cbsize_get(self) -> int32 - -ida_idd.debapp_attrs_t.is_be: - debapp_attrs_t_is_be_get(self) -> int - -ida_idd.debapp_attrs_t.platform: - debapp_attrs_t_platform_get(self) -> qstring * - -class ida_idd.debug_event_t(): - - Proxy of C++ debug_event_t class - - -ida_idd.debug_event_t.bpt(): - - bpt(self) -> bptaddr_t - bpt(self) -> bptaddr_t - - -ida_idd.debug_event_t.bpt_ea(): - - bpt_ea(self) -> ea_t - - -ida_idd.debug_event_t.clear(): - - clear(self) - - -ida_idd.debug_event_t.clear_all(): - - clear_all(self) - - -ida_idd.debug_event_t.copy(): - - copy(self, r) -> debug_event_t - - -ida_idd.debug_event_t.ea: - debug_event_t_ea_get(self) -> ea_t - -ida_idd.debug_event_t.eid(): - - eid(self) -> event_id_t - - -ida_idd.debug_event_t.exc(): - - exc(self) -> excinfo_t - exc(self) -> excinfo_t - - -ida_idd.debug_event_t.exit_code(): - - exit_code(self) -> int const & - - -ida_idd.debug_event_t.handled: - debug_event_t_handled_get(self) -> bool - -ida_idd.debug_event_t.info(): - - info(self) -> qstring - info(self) -> qstring const & - - -ida_idd.debug_event_t.modinfo(): - - modinfo(self) -> modinfo_t - modinfo(self) -> modinfo_t - - -ida_idd.debug_event_t.pid: - debug_event_t_pid_get(self) -> pid_t - -ida_idd.debug_event_t.set_bpt(): - - set_bpt(self) -> bptaddr_t - - -ida_idd.debug_event_t.set_eid(): - - set_eid(self, id) - - -ida_idd.debug_event_t.set_exception(): - - set_exception(self) -> excinfo_t - - -ida_idd.debug_event_t.set_exit_code(): - - set_exit_code(self, id, code) - - -ida_idd.debug_event_t.set_info(): - - set_info(self, id) -> qstring & - - -ida_idd.debug_event_t.set_modinfo(): - - set_modinfo(self, id) -> modinfo_t - - -ida_idd.debug_event_t.tid: - debug_event_t_tid_get(self) -> thid_t - -class ida_idd.exception_info_t(): - - Proxy of C++ exception_info_t class - - -ida_idd.exception_info_t.break_on(): - - break_on(self) -> bool - - -ida_idd.exception_info_t.code: - exception_info_t_code_get(self) -> uint - -ida_idd.exception_info_t.desc: - exception_info_t_desc_get(self) -> qstring * - -ida_idd.exception_info_t.flags: - exception_info_t_flags_get(self) -> uint32 - -ida_idd.exception_info_t.handle(): - - handle(self) -> bool - - -ida_idd.exception_info_t.name: - exception_info_t_name_get(self) -> qstring * - -class ida_idd.excinfo_t(): - - Proxy of C++ excinfo_t class - - -ida_idd.excinfo_t.can_cont: - excinfo_t_can_cont_get(self) -> bool - -ida_idd.excinfo_t.code: - excinfo_t_code_get(self) -> uint32 - -ida_idd.excinfo_t.ea: - excinfo_t_ea_get(self) -> ea_t - -ida_idd.excinfo_t.info: - excinfo_t_info_get(self) -> qstring * - -class ida_idd.excvec_t(): - - Proxy of C++ qvector<(exception_info_t)> class - - -ida_idd.excvec_t.at(): - - at(self, _idx) -> exception_info_t - - -ida_idd.excvec_t.begin(): - - begin(self) -> exception_info_t - begin(self) -> exception_info_t - - -ida_idd.excvec_t.capacity(): - - capacity(self) -> size_t - - -ida_idd.excvec_t.clear(): - - clear(self) - - -ida_idd.excvec_t.empty(): - - empty(self) -> bool - - -ida_idd.excvec_t.end(): - - end(self) -> exception_info_t - end(self) -> exception_info_t - - -ida_idd.excvec_t.erase(): - - erase(self, it) -> exception_info_t - erase(self, first, last) -> exception_info_t - - -ida_idd.excvec_t.extract(): - - extract(self) -> exception_info_t - - -ida_idd.excvec_t.grow(): - - grow(self, x=exception_info_t()) - - -ida_idd.excvec_t.inject(): - - inject(self, s, len) - - -ida_idd.excvec_t.insert(): - - insert(self, it, x) -> exception_info_t - - -ida_idd.excvec_t.pop_back(): - - pop_back(self) - - -ida_idd.excvec_t.push_back(): - - push_back(self, x) - push_back(self) -> exception_info_t - - -ida_idd.excvec_t.qclear(): - - qclear(self) - - -ida_idd.excvec_t.reserve(): - - reserve(self, cnt) - - -ida_idd.excvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_idd.excvec_t.size(): - - size(self) -> size_t - - -ida_idd.excvec_t.swap(): - - swap(self, r) - - -ida_idd.excvec_t.truncate(): - - truncate(self) - - -ida_idd.get_event_bpt_hea(): - - get_event_bpt_hea(ev) -> ea_t - - -ida_idd.get_event_exc_code(): - - get_event_exc_code(ev) -> uint - - -ida_idd.get_event_exc_ea(): - - get_event_exc_ea(ev) -> ea_t - - -ida_idd.get_event_exc_info(): - - get_event_exc_info(ev) -> char - - -ida_idd.get_event_info(): - - get_event_info(ev) -> char - - -ida_idd.get_event_module_base(): - - get_event_module_base(ev) -> ea_t - - -ida_idd.get_event_module_name(): - - get_event_module_name(ev) -> char - - -ida_idd.get_event_module_size(): - - get_event_module_size(ev) -> asize_t - - -class ida_idd.meminfo_vec_t(): - - Proxy of C++ qvector<(memory_info_t)> class - - -ida_idd.meminfo_vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_idd.meminfo_vec_t.at(): - - at(self, _idx) -> memory_info_t - - -ida_idd.meminfo_vec_t.begin(): - - begin(self) -> memory_info_t - begin(self) -> memory_info_t - - -ida_idd.meminfo_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_idd.meminfo_vec_t.clear(): - - clear(self) - - -ida_idd.meminfo_vec_t.empty(): - - empty(self) -> bool - - -ida_idd.meminfo_vec_t.end(): - - end(self) -> memory_info_t - end(self) -> memory_info_t - - -ida_idd.meminfo_vec_t.erase(): - - erase(self, it) -> memory_info_t - erase(self, first, last) -> memory_info_t - - -ida_idd.meminfo_vec_t.extract(): - - extract(self) -> memory_info_t - - -ida_idd.meminfo_vec_t.find(): - - find(self, x) -> memory_info_t - find(self, x) -> memory_info_t - - -ida_idd.meminfo_vec_t.grow(): - - grow(self, x=memory_info_t()) - - -ida_idd.meminfo_vec_t.has(): - - has(self, x) -> bool - - -ida_idd.meminfo_vec_t.inject(): - - inject(self, s, len) - - -ida_idd.meminfo_vec_t.insert(): - - insert(self, it, x) -> memory_info_t - - -ida_idd.meminfo_vec_t.pop_back(): - - pop_back(self) - - -ida_idd.meminfo_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> memory_info_t - - -ida_idd.meminfo_vec_t.qclear(): - - qclear(self) - - -ida_idd.meminfo_vec_t.reserve(): - - reserve(self, cnt) - - -ida_idd.meminfo_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_idd.meminfo_vec_t.size(): - - size(self) -> size_t - - -ida_idd.meminfo_vec_t.swap(): - - swap(self, r) - - -ida_idd.meminfo_vec_t.truncate(): - - truncate(self) - - -class ida_idd.memory_info_t(): - - Proxy of C++ memory_info_t class - - -ida_idd.memory_info_t._print(): - - _print(self) -> size_t - - -ida_idd.memory_info_t.bitness: - memory_info_t_bitness_get(self) -> uchar - -ida_idd.memory_info_t.clear(): - - clear(self) - - -ida_idd.memory_info_t.compare(): - - compare(self, r) -> int - - -ida_idd.memory_info_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_idd.memory_info_t.empty(): - - empty(self) -> bool - - -ida_idd.memory_info_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_idd.memory_info_t.extend(): - - extend(self, ea) - - -ida_idd.memory_info_t.intersect(): - - intersect(self, r) - - -ida_idd.memory_info_t.name: - memory_info_t_name_get(self) -> qstring * - -ida_idd.memory_info_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_idd.memory_info_t.perm: - memory_info_t_perm_get(self) -> uchar - -ida_idd.memory_info_t.sbase: - memory_info_t_sbase_get(self) -> ea_t - -ida_idd.memory_info_t.sclass: - memory_info_t_sclass_get(self) -> qstring * - -ida_idd.memory_info_t.size(): - - size(self) -> asize_t - - -ida_idd.memory_info_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -class ida_idd.modinfo_t(): - - Proxy of C++ modinfo_t class - - -ida_idd.modinfo_t.base: - modinfo_t_base_get(self) -> ea_t - -ida_idd.modinfo_t.name: - modinfo_t_name_get(self) -> qstring * - -ida_idd.modinfo_t.rebase_to: - modinfo_t_rebase_to_get(self) -> ea_t - -ida_idd.modinfo_t.size: - modinfo_t_size_get(self) -> asize_t - -class ida_idd.process_info_t(): - - Proxy of C++ process_info_t class - - -ida_idd.process_info_t.name: - process_info_t_name_get(self) -> qstring * - -ida_idd.process_info_t.pid: - process_info_t_pid_get(self) -> pid_t - -class ida_idd.procinfo_vec_t(): - - Proxy of C++ qvector<(process_info_t)> class - - -ida_idd.procinfo_vec_t.at(): - - at(self, _idx) -> process_info_t - - -ida_idd.procinfo_vec_t.begin(): - - begin(self) -> process_info_t - begin(self) -> process_info_t - - -ida_idd.procinfo_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_idd.procinfo_vec_t.clear(): - - clear(self) - - -ida_idd.procinfo_vec_t.empty(): - - empty(self) -> bool - - -ida_idd.procinfo_vec_t.end(): - - end(self) -> process_info_t - end(self) -> process_info_t - - -ida_idd.procinfo_vec_t.erase(): - - erase(self, it) -> process_info_t - erase(self, first, last) -> process_info_t - - -ida_idd.procinfo_vec_t.extract(): - - extract(self) -> process_info_t - - -ida_idd.procinfo_vec_t.grow(): - - grow(self, x=process_info_t()) - - -ida_idd.procinfo_vec_t.inject(): - - inject(self, s, len) - - -ida_idd.procinfo_vec_t.insert(): - - insert(self, it, x) -> process_info_t - - -ida_idd.procinfo_vec_t.pop_back(): - - pop_back(self) - - -ida_idd.procinfo_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> process_info_t - - -ida_idd.procinfo_vec_t.qclear(): - - qclear(self) - - -ida_idd.procinfo_vec_t.reserve(): - - reserve(self, cnt) - - -ida_idd.procinfo_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_idd.procinfo_vec_t.size(): - - size(self) -> size_t - - -ida_idd.procinfo_vec_t.swap(): - - swap(self, r) - - -ida_idd.procinfo_vec_t.truncate(): - - truncate(self) - - -class ida_idd.register_info_t(): - - Proxy of C++ register_info_t class - - -ida_idd.register_info_t.bit_strings: - register_info_t_bit_strings_get(self) -> char const *const * - -ida_idd.register_info_t.default_bit_strings_mask: - register_info_t_default_bit_strings_mask_get(self) -> uval_t - -ida_idd.register_info_t.dtype: - register_info_t_dtype_get(self) -> op_dtype_t - -ida_idd.register_info_t.flags: - register_info_t_flags_get(self) -> uint32 - -ida_idd.register_info_t.name: - register_info_t_name_get(self) -> char const * - -ida_idd.register_info_t.register_class: - register_info_t_register_class_get(self) -> register_class_t - -class ida_idd.regval_t(): - - Proxy of C++ regval_t class - - -ida_idd.regval_t.bytes(): - - bytes(self) -> bytevec_t - bytes(self) -> bytevec_t const & - - -ida_idd.regval_t.clear(): - - clear(self) - - -ida_idd.regval_t.fval: - regval_t_fval_get(self) -> uint16 [6] - -ida_idd.regval_t.get_data(): - - get_data(self) - get_data(self) -> void const * - - -ida_idd.regval_t.get_data_size(): - - get_data_size(self) -> size_t - - -ida_idd.regval_t.ival: - regval_t_ival_get(self) -> uint64 - -ida_idd.regval_t.rvtype: - regval_t_rvtype_get(self) -> int32 - -ida_idd.regval_t.set_bytes(): - - set_bytes(self, data, size) - set_bytes(self, v) - set_bytes(self) -> bytevec_t & - - -ida_idd.regval_t.set_float(): - - set_float(self, x) - - -ida_idd.regval_t.set_int(): - - set_int(self, x) - - -ida_idd.regval_t.set_unavailable(): - - set_unavailable(self) - - -ida_idd.regval_t.swap(): - - swap(self, r) - - -class ida_idd.scattered_segm_t(): - - Proxy of C++ scattered_segm_t class - - -ida_idd.scattered_segm_t._print(): - - _print(self) -> size_t - - -ida_idd.scattered_segm_t.clear(): - - clear(self) - - -ida_idd.scattered_segm_t.compare(): - - compare(self, r) -> int - - -ida_idd.scattered_segm_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_idd.scattered_segm_t.empty(): - - empty(self) -> bool - - -ida_idd.scattered_segm_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_idd.scattered_segm_t.extend(): - - extend(self, ea) - - -ida_idd.scattered_segm_t.intersect(): - - intersect(self, r) - - -ida_idd.scattered_segm_t.name: - scattered_segm_t_name_get(self) -> qstring * - -ida_idd.scattered_segm_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_idd.scattered_segm_t.size(): - - size(self) -> asize_t - - -ida_idd.scattered_segm_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_idd.set_debug_event_code(): - - set_debug_event_code(ev, id) - - -class ida_idd.thread_name_t(): - - Proxy of C++ thread_name_t class - - -ida_idd.thread_name_t.name: - thread_name_t_name_get(self) -> qstring * - -ida_idd.thread_name_t.tid: - thread_name_t_tid_get(self) -> thid_t - - -=== ida_idd EPYDOC INJECTIONS === -ida_idd.EXC_BREAK -""" -break on the exception -""" - -ida_idd.EXC_HANDLE -""" -should be handled by the debugger? -""" - -ida_idd.EXC_MSG -""" -instead of a warning, log the exception to the output window -""" - -ida_idd.EXC_SILENT -""" -do not warn or log to the output window -""" - -ida_idd.IDD_INTERFACE_VERSION -""" -The IDD interface version number. -""" - -ida_idd.NO_PROCESS -""" -No process. -""" - -ida_idd.NO_THREAD -""" -No thread. in 'PROCESS_STARTED' this value can be used to specify that -the main thread has not been created. It will be initialized later by -a 'THREAD_STARTED' event. -""" - -ida_idd.REGISTER_ADDRESS -""" -may contain an address -""" - -ida_idd.REGISTER_CS -""" -code segment -""" - -ida_idd.REGISTER_CUSTFMT -""" -register should be displayed using a custom data format. the format -name is in bit_strings[0] the corresponding 'regval_t' will use -'bytevec_t' -""" - -ida_idd.REGISTER_FP -""" -frame pointer -""" - -ida_idd.REGISTER_IP -""" -instruction pointer -""" - -ida_idd.REGISTER_NOLF -""" -allowing the next register to be displayed to its right (on the same -line) - -displays this register without returning to the next line -""" - -ida_idd.REGISTER_READONLY -""" -the user can't modify the current value of this register -""" - -ida_idd.REGISTER_SP -""" -stack pointer -""" - -ida_idd.REGISTER_SS -""" -stack segment -""" - -ida_idd.RVT_FLOAT -""" -floating point -""" - -ida_idd.RVT_INT -""" -integer -""" - -ida_idd.RVT_UNAVAILABLE -""" -other values mean custom data type - -unavailable -""" -=== ida_idd EPYDOC INJECTIONS END === -ida_idp.AssembleLine(): - - AssembleLine(ea, cs, ip, use32, nonnul_line) -> PyObject * - - - Assemble an instruction to a string (display a warning if an error is found) - - @param ea: linear address of instruction - @param cs: cs of instruction - @param ip: ip of instruction - @param use32: is 32bit segment - @param line: line to assemble - @return: - - None on failure - - or a string containing the assembled instruction - - -class ida_idp.IDB_Hooks(): - - Proxy of C++ IDB_Hooks class - - -ida_idp.IDB_Hooks.allsegs_moved(): - - allsegs_moved(self, info) - - -ida_idp.IDB_Hooks.auto_empty(): - - auto_empty(self) - - -ida_idp.IDB_Hooks.auto_empty_finally(): - - auto_empty_finally(self) - - -ida_idp.IDB_Hooks.bookmark_changed(): - - bookmark_changed(self, index, pos, desc) - - -ida_idp.IDB_Hooks.byte_patched(): - - byte_patched(self, ea, old_value) - - -ida_idp.IDB_Hooks.callee_addr_changed(): - - callee_addr_changed(self, ea, callee) - - -ida_idp.IDB_Hooks.changing_cmt(): - - changing_cmt(self, ea, repeatable_cmt, newcmt) - - -ida_idp.IDB_Hooks.changing_enum_bf(): - - changing_enum_bf(self, id, new_bf) - - -ida_idp.IDB_Hooks.changing_enum_cmt(): - - changing_enum_cmt(self, id, repeatable, newcmt) - - -ida_idp.IDB_Hooks.changing_op_ti(): - - changing_op_ti(self, ea, n, new_type, new_fnames) - - -ida_idp.IDB_Hooks.changing_op_type(): - - changing_op_type(self, ea, n, opinfo) - - -ida_idp.IDB_Hooks.changing_range_cmt(): - - changing_range_cmt(self, kind, a, cmt, repeatable) - - -ida_idp.IDB_Hooks.changing_segm_class(): - - changing_segm_class(self, s) - - -ida_idp.IDB_Hooks.changing_segm_end(): - - changing_segm_end(self, s, new_end, segmod_flags) - - -ida_idp.IDB_Hooks.changing_segm_name(): - - changing_segm_name(self, s, oldname) - - -ida_idp.IDB_Hooks.changing_segm_start(): - - changing_segm_start(self, s, new_start, segmod_flags) - - -ida_idp.IDB_Hooks.changing_struc_align(): - - changing_struc_align(self, sptr) - - -ida_idp.IDB_Hooks.changing_struc_cmt(): - - changing_struc_cmt(self, struc_id, repeatable, newcmt) - - -ida_idp.IDB_Hooks.changing_struc_member(): - - changing_struc_member(self, sptr, mptr, flag, ti, nbytes) - - -ida_idp.IDB_Hooks.changing_ti(): - - changing_ti(self, ea, new_type, new_fnames) - - -ida_idp.IDB_Hooks.closebase(): - - closebase(self) - - -ida_idp.IDB_Hooks.cmt_changed(): - - cmt_changed(self, ea, repeatable_cmt) - - -ida_idp.IDB_Hooks.compiler_changed(): - - compiler_changed(self) - - -ida_idp.IDB_Hooks.deleting_enum(): - - deleting_enum(self, id) - - -ida_idp.IDB_Hooks.deleting_enum_member(): - - deleting_enum_member(self, id, cid) - - -ida_idp.IDB_Hooks.deleting_func(): - - deleting_func(self, pfn) - - -ida_idp.IDB_Hooks.deleting_func_tail(): - - deleting_func_tail(self, pfn, tail) - - -ida_idp.IDB_Hooks.deleting_segm(): - - deleting_segm(self, start_ea) - - -ida_idp.IDB_Hooks.deleting_struc(): - - deleting_struc(self, sptr) - - -ida_idp.IDB_Hooks.deleting_struc_member(): - - deleting_struc_member(self, sptr, mptr) - - -ida_idp.IDB_Hooks.deleting_tryblks(): - - deleting_tryblks(self, range) - - -ida_idp.IDB_Hooks.destroyed_items(): - - destroyed_items(self, ea1, ea2, will_disable_range) - - -ida_idp.IDB_Hooks.determined_main(): - - determined_main(self, main) - - -ida_idp.IDB_Hooks.enum_bf_changed(): - - enum_bf_changed(self, id) - - -ida_idp.IDB_Hooks.enum_cmt_changed(): - - enum_cmt_changed(self, id, repeatable) - - -ida_idp.IDB_Hooks.enum_created(): - - enum_created(self, id) - - -ida_idp.IDB_Hooks.enum_deleted(): - - enum_deleted(self, id) - - -ida_idp.IDB_Hooks.enum_member_created(): - - enum_member_created(self, id, cid) - - -ida_idp.IDB_Hooks.enum_member_deleted(): - - enum_member_deleted(self, id, cid) - - -ida_idp.IDB_Hooks.enum_renamed(): - - enum_renamed(self, id) - - -ida_idp.IDB_Hooks.expanding_struc(): - - expanding_struc(self, sptr, offset, delta) - - -ida_idp.IDB_Hooks.extlang_changed(): - - extlang_changed(self, kind, el, idx) - - -ida_idp.IDB_Hooks.extra_cmt_changed(): - - extra_cmt_changed(self, ea, line_idx, cmt) - - -ida_idp.IDB_Hooks.flow_chart_created(): - - flow_chart_created(self, fc) - - -ida_idp.IDB_Hooks.frame_deleted(): - - frame_deleted(self, pfn) - - -ida_idp.IDB_Hooks.func_added(): - - func_added(self, pfn) - - -ida_idp.IDB_Hooks.func_noret_changed(): - - func_noret_changed(self, pfn) - - -ida_idp.IDB_Hooks.func_tail_appended(): - - func_tail_appended(self, pfn, tail) - - -ida_idp.IDB_Hooks.func_tail_deleted(): - - func_tail_deleted(self, pfn, tail_ea) - - -ida_idp.IDB_Hooks.func_updated(): - - func_updated(self, pfn) - - -ida_idp.IDB_Hooks.hook(): - - hook(self) -> bool - - -ida_idp.IDB_Hooks.idasgn_loaded(): - - idasgn_loaded(self, short_sig_name) - - -ida_idp.IDB_Hooks.item_color_changed(): - - item_color_changed(self, ea, color) - - -ida_idp.IDB_Hooks.kernel_config_loaded(): - - kernel_config_loaded(self) - - -ida_idp.IDB_Hooks.loader_finished(): - - loader_finished(self, li, neflags, filetypename) - - -ida_idp.IDB_Hooks.local_types_changed(): - - local_types_changed(self) - - -ida_idp.IDB_Hooks.make_code(): - - make_code(self, insn) - - -ida_idp.IDB_Hooks.make_data(): - - make_data(self, ea, flags, tid, len) - - -ida_idp.IDB_Hooks.op_ti_changed(): - - op_ti_changed(self, ea, n, type, fnames) - - -ida_idp.IDB_Hooks.op_type_changed(): - - op_type_changed(self, ea, n) - - -ida_idp.IDB_Hooks.range_cmt_changed(): - - range_cmt_changed(self, kind, a, cmt, repeatable) - - -ida_idp.IDB_Hooks.renamed(): - - renamed(self, ea, new_name, local_name) - - -ida_idp.IDB_Hooks.renaming_enum(): - - renaming_enum(self, id, is_enum, newname) - - -ida_idp.IDB_Hooks.renaming_struc(): - - renaming_struc(self, id, oldname, newname) - - -ida_idp.IDB_Hooks.renaming_struc_member(): - - renaming_struc_member(self, sptr, mptr, newname) - - -ida_idp.IDB_Hooks.savebase(): - - savebase(self) - - -ida_idp.IDB_Hooks.segm_added(): - - segm_added(self, s) - - -ida_idp.IDB_Hooks.segm_attrs_updated(): - - segm_attrs_updated(self, s) - - -ida_idp.IDB_Hooks.segm_class_changed(): - - segm_class_changed(self, s, sclass) - - -ida_idp.IDB_Hooks.segm_deleted(): - - segm_deleted(self, start_ea, end_ea) - - -ida_idp.IDB_Hooks.segm_end_changed(): - - segm_end_changed(self, s, oldend) - - -ida_idp.IDB_Hooks.segm_moved(): - - segm_moved(self, _from, to, size, changed_netmap) - - -ida_idp.IDB_Hooks.segm_name_changed(): - - segm_name_changed(self, s, name) - - -ida_idp.IDB_Hooks.segm_start_changed(): - - segm_start_changed(self, s, oldstart) - - -ida_idp.IDB_Hooks.set_func_end(): - - set_func_end(self, pfn, new_end) - - -ida_idp.IDB_Hooks.set_func_start(): - - set_func_start(self, pfn, new_start) - - -ida_idp.IDB_Hooks.sgr_changed(): - - sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) - - -ida_idp.IDB_Hooks.sgr_deleted(): - - sgr_deleted(self, start_ea, end_ea, regnum) - - -ida_idp.IDB_Hooks.stkpnts_changed(): - - stkpnts_changed(self, pfn) - - -ida_idp.IDB_Hooks.struc_align_changed(): - - struc_align_changed(self, sptr) - - -ida_idp.IDB_Hooks.struc_cmt_changed(): - - struc_cmt_changed(self, struc_id, repeatable_cmt) - - -ida_idp.IDB_Hooks.struc_created(): - - struc_created(self, struc_id) - - -ida_idp.IDB_Hooks.struc_deleted(): - - struc_deleted(self, struc_id) - - -ida_idp.IDB_Hooks.struc_expanded(): - - struc_expanded(self, sptr) - - -ida_idp.IDB_Hooks.struc_member_changed(): - - struc_member_changed(self, sptr, mptr) - - -ida_idp.IDB_Hooks.struc_member_created(): - - struc_member_created(self, sptr, mptr) - - -ida_idp.IDB_Hooks.struc_member_deleted(): - - struc_member_deleted(self, sptr, member_id, offset) - - -ida_idp.IDB_Hooks.struc_member_renamed(): - - struc_member_renamed(self, sptr, mptr) - - -ida_idp.IDB_Hooks.struc_renamed(): - - struc_renamed(self, sptr) - - -ida_idp.IDB_Hooks.tail_owner_changed(): - - tail_owner_changed(self, tail, owner_func, old_owner) - - -ida_idp.IDB_Hooks.thunk_func_created(): - - thunk_func_created(self, pfn) - - -ida_idp.IDB_Hooks.ti_changed(): - - ti_changed(self, ea, type, fnames) - - -ida_idp.IDB_Hooks.tryblks_updated(): - - tryblks_updated(self, tbv) - - -ida_idp.IDB_Hooks.unhook(): - - unhook(self) -> bool - - -ida_idp.IDB_Hooks.updating_tryblks(): - - updating_tryblks(self, tbv) - - -ida_idp.IDB_Hooks.upgraded(): - - upgraded(self, _from) - - -class ida_idp.IDP_Hooks(): - - Proxy of C++ IDP_Hooks class - - -ida_idp.IDP_Hooks.ev_add_cref(): - - ev_add_cref(self, _from, to, type) -> int - - -ida_idp.IDP_Hooks.ev_add_dref(): - - ev_add_dref(self, _from, to, type) -> int - - -ida_idp.IDP_Hooks.ev_adjust_argloc(): - - ev_adjust_argloc(self, argloc, optional_type, size) -> int - - -ida_idp.IDP_Hooks.ev_adjust_libfunc_ea(): - - ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int - - -ida_idp.IDP_Hooks.ev_adjust_refinfo(): - - ev_adjust_refinfo(self, ri, ea, n, fd) -> int - - -ida_idp.IDP_Hooks.ev_ana_insn(): - - ev_ana_insn(self, out) -> bool - - - Analyzes and decodes an instruction at insn.ea - - insn.itype must be set >= idaapi.CUSTOM_CMD_ITYPE - - insn.size must be set to the instruction length - - @return: Boolean - - False if the instruction is not recognized - - True if the instruction was decoded. 'insn' should be filled in that case. - - -ida_idp.IDP_Hooks.ev_analyze_prolog(): - - ev_analyze_prolog(self, ea) -> int - - -ida_idp.IDP_Hooks.ev_arg_addrs_ready(): - - ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int - - -ida_idp.IDP_Hooks.ev_assemble(): - - ev_assemble(self, ea, cs, ip, use32, line) -> PyObject * - - - Assembles an instruction - - @param ea: linear address of instruction - @param cs: cs of instruction - @param ip: ip of instruction - @param use32: is 32bit segment? - @param line: line to assemble - - @return: - None to let the underlying processor module assemble the line - - or a string containing the assembled buffer - - -ida_idp.IDP_Hooks.ev_auto_queue_empty(): - - ev_auto_queue_empty(self, type) - - -ida_idp.IDP_Hooks.ev_calc_arglocs(): - - ev_calc_arglocs(self, fti) -> int - - -ida_idp.IDP_Hooks.ev_calc_cdecl_purged_bytes(): - - ev_calc_cdecl_purged_bytes(self, ea) -> int - - -ida_idp.IDP_Hooks.ev_calc_next_eas(): - - ev_calc_next_eas(self, res, insn, over) -> int - - -ida_idp.IDP_Hooks.ev_calc_purged_bytes(): - - ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int - - -ida_idp.IDP_Hooks.ev_calc_retloc(): - - ev_calc_retloc(self, retloc, rettype, cc) -> int - - -ida_idp.IDP_Hooks.ev_calc_spdelta(): - - ev_calc_spdelta(self, spdelta, insn) -> int - - -ida_idp.IDP_Hooks.ev_calc_step_over(): - - ev_calc_step_over(self, target, ip) -> int - - -ida_idp.IDP_Hooks.ev_calc_switch_cases(): - - ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int - - -ida_idp.IDP_Hooks.ev_calc_varglocs(): - - ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int - - -ida_idp.IDP_Hooks.ev_calcrel(): - - ev_calcrel(self) -> int - - -ida_idp.IDP_Hooks.ev_can_have_type(): - - ev_can_have_type(self, op) -> int - - -ida_idp.IDP_Hooks.ev_clean_tbit(): - - ev_clean_tbit(self, ea, getreg, regvalues) -> int - - -ida_idp.IDP_Hooks.ev_cmp_operands(): - - ev_cmp_operands(self, op1, op2) -> int - - -ida_idp.IDP_Hooks.ev_coagulate(): - - ev_coagulate(self, start_ea) -> int - - -ida_idp.IDP_Hooks.ev_coagulate_dref(): - - ev_coagulate_dref(self, _from, to, may_define, code_ea) -> int - - -ida_idp.IDP_Hooks.ev_create_flat_group(): - - ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int - - -ida_idp.IDP_Hooks.ev_create_func_frame(): - - ev_create_func_frame(self, pfn) -> int - - -ida_idp.IDP_Hooks.ev_create_switch_xrefs(): - - ev_create_switch_xrefs(self, jumpea, si) -> int - - -ida_idp.IDP_Hooks.ev_creating_segm(): - - ev_creating_segm(self, seg) -> int - - -ida_idp.IDP_Hooks.ev_decorate_name(): - - ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * - - -ida_idp.IDP_Hooks.ev_del_cref(): - - ev_del_cref(self, _from, to, expand) -> int - - -ida_idp.IDP_Hooks.ev_del_dref(): - - ev_del_dref(self, _from, to) -> int - - -ida_idp.IDP_Hooks.ev_delay_slot_insn(): - - ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * - - -ida_idp.IDP_Hooks.ev_demangle_name(): - - ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * - - -ida_idp.IDP_Hooks.ev_emu_insn(): - - ev_emu_insn(self, insn) -> bool - - - Emulate instruction, create cross-references, plan to analyze - subsequent instructions, modify flags etc. Upon entrance to this function - all information about the instruction is in 'insn' structure. - - @return: Boolean (whether this instruction has been emulated or not) - - -ida_idp.IDP_Hooks.ev_endbinary(): - - ev_endbinary(self, ok) -> int - - -ida_idp.IDP_Hooks.ev_ending_undo(): - - ev_ending_undo(self, action_name, is_undo) -> int - - -ida_idp.IDP_Hooks.ev_equal_reglocs(): - - ev_equal_reglocs(self, a1, a2) -> int - - -ida_idp.IDP_Hooks.ev_extract_address(): - - ev_extract_address(self, out_ea, screen_ea, string, position) -> int - - -ida_idp.IDP_Hooks.ev_find_op_value(): - - ev_find_op_value(self, pinsn, opn) -> PyObject * - - -ida_idp.IDP_Hooks.ev_find_reg_value(): - - ev_find_reg_value(self, pinsn, reg) -> PyObject * - - -ida_idp.IDP_Hooks.ev_func_bounds(): - - ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea) - - -ida_idp.IDP_Hooks.ev_gen_asm_or_lst(): - - ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) - - -ida_idp.IDP_Hooks.ev_gen_map_file(): - - ev_gen_map_file(self, nlines, fp) -> int - - -ida_idp.IDP_Hooks.ev_gen_regvar_def(): - - ev_gen_regvar_def(self, outctx, v) -> int - - -ida_idp.IDP_Hooks.ev_gen_src_file_lnnum(): - - ev_gen_src_file_lnnum(self, outctx, file, lnnum) -> int - - -ida_idp.IDP_Hooks.ev_gen_stkvar_def(): - - ev_gen_stkvar_def(self, outctx, mptr, v) -> int - - -ida_idp.IDP_Hooks.ev_get_abi_info(): - - ev_get_abi_info(self, abi_names, abi_opts, comp) -> int - - -ida_idp.IDP_Hooks.ev_get_autocmt(): - - ev_get_autocmt(self, insn) -> PyObject * - - -ida_idp.IDP_Hooks.ev_get_bg_color(): - - ev_get_bg_color(self, ea) -> int or None - - -ida_idp.IDP_Hooks.ev_get_cc_regs(): - - ev_get_cc_regs(self, regs, cc) -> int - - -ida_idp.IDP_Hooks.ev_get_dbr_opnum(): - - ev_get_dbr_opnum(self, opnum, insn) -> int - - -ida_idp.IDP_Hooks.ev_get_default_enum_size(): - - ev_get_default_enum_size(self, cm) -> int - - -ida_idp.IDP_Hooks.ev_get_frame_retsize(): - - ev_get_frame_retsize(self, frsize, pfn) -> int - - -ida_idp.IDP_Hooks.ev_get_macro_insn_head(): - - ev_get_macro_insn_head(self, head, ip) -> int - - -ida_idp.IDP_Hooks.ev_get_operand_string(): - - ev_get_operand_string(self, insn, opnum) -> PyObject * - - -ida_idp.IDP_Hooks.ev_get_reg_info(): - - ev_get_reg_info(self, main_regname, bitrange, regname) -> int - - -ida_idp.IDP_Hooks.ev_get_reg_name(): - - ev_get_reg_name(self, reg, width, reghi) -> PyObject * - - -ida_idp.IDP_Hooks.ev_get_simd_types(): - - ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int - - -ida_idp.IDP_Hooks.ev_get_stkarg_offset(): - - ev_get_stkarg_offset(self) -> int - - -ida_idp.IDP_Hooks.ev_get_stkvar_scale_factor(): - - ev_get_stkvar_scale_factor(self) -> int - - -ida_idp.IDP_Hooks.ev_getreg(): - - ev_getreg(self, regval, regnum) -> int - - -ida_idp.IDP_Hooks.ev_init(): - - ev_init(self, idp_modname) -> int - - -ida_idp.IDP_Hooks.ev_insn_reads_tbit(): - - ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int - - -ida_idp.IDP_Hooks.ev_is_align_insn(): - - ev_is_align_insn(self, ea) -> int - - -ida_idp.IDP_Hooks.ev_is_alloca_probe(): - - ev_is_alloca_probe(self, ea) -> int - - -ida_idp.IDP_Hooks.ev_is_basic_block_end(): - - ev_is_basic_block_end(self, insn, call_insn_stops_block) -> int - - -ida_idp.IDP_Hooks.ev_is_call_insn(): - - ev_is_call_insn(self, insn) -> int - - - Is the instruction a "call"? - - @param insn: instruction - @return: 0-unknown, 1-yes, -1-no - - -ida_idp.IDP_Hooks.ev_is_cond_insn(): - - ev_is_cond_insn(self, insn) -> int - - -ida_idp.IDP_Hooks.ev_is_far_jump(): - - ev_is_far_jump(self, icode) -> int - - -ida_idp.IDP_Hooks.ev_is_indirect_jump(): - - ev_is_indirect_jump(self, insn) -> int - - -ida_idp.IDP_Hooks.ev_is_insn_table_jump(): - - ev_is_insn_table_jump(self, insn) -> int - - -ida_idp.IDP_Hooks.ev_is_jump_func(): - - ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int - - -ida_idp.IDP_Hooks.ev_is_ret_insn(): - - ev_is_ret_insn(self, insn, strict) -> int - - - Is the instruction a "return"? - - @param insn: instruction - @param strict: - True: report only ret instructions - False: include instructions like "leave" which begins the function epilog - @return: 0-unknown, 1-yes, -1-no - - -ida_idp.IDP_Hooks.ev_is_sane_insn(): - - ev_is_sane_insn(self, insn, no_crefs) -> int - - - is the instruction sane for the current file type? - @param insn: the instruction - @param no_crefs: - - 1: the instruction has no code refs to it. - ida just tries to convert unexplored bytes - to an instruction (but there is no other - reason to convert them into an instruction) - - 0: the instruction is created because - of some coderef, user request or another - weighty reason. - @return: >=0-ok, <0-no, the instruction isn't likely to appear in the program - - -ida_idp.IDP_Hooks.ev_is_sp_based(): - - ev_is_sp_based(self, mode, insn, op) -> int - - -ida_idp.IDP_Hooks.ev_is_switch(): - - ev_is_switch(self, si, insn) -> int - - -ida_idp.IDP_Hooks.ev_last_cb_before_loader(): - - ev_last_cb_before_loader(self) -> int - - -ida_idp.IDP_Hooks.ev_loader(): - - ev_loader(self) -> int - - -ida_idp.IDP_Hooks.ev_lower_func_type(): - - ev_lower_func_type(self, argnums, fti) -> int - - -ida_idp.IDP_Hooks.ev_max_ptr_size(): - - ev_max_ptr_size(self) -> int - - -ida_idp.IDP_Hooks.ev_may_be_func(): - - ev_may_be_func(self, insn, state) -> int - - - Can a function start here? - @param insn: the instruction - @param state: autoanalysis phase - 0: creating functions - 1: creating chunks - - @return: integer (probability 0..100) - - -ida_idp.IDP_Hooks.ev_may_show_sreg(): - - ev_may_show_sreg(self, current_ea) -> int - - -ida_idp.IDP_Hooks.ev_moving_segm(): - - ev_moving_segm(self, seg, to, flags) -> int - - -ida_idp.IDP_Hooks.ev_newasm(): - - ev_newasm(self, asmnum) -> int - - -ida_idp.IDP_Hooks.ev_newbinary(): - - ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes) -> int - - -ida_idp.IDP_Hooks.ev_newfile(): - - ev_newfile(self, fname) -> int - - -ida_idp.IDP_Hooks.ev_newprc(): - - ev_newprc(self, pnum, keep_cfg) -> int - - -ida_idp.IDP_Hooks.ev_next_exec_insn(): - - ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int - - -ida_idp.IDP_Hooks.ev_oldfile(): - - ev_oldfile(self, fname) -> int - - -ida_idp.IDP_Hooks.ev_out_assumes(): - - ev_out_assumes(self, outctx) -> int - - -ida_idp.IDP_Hooks.ev_out_data(): - - ev_out_data(self, outctx, analyze_only) -> int - - -ida_idp.IDP_Hooks.ev_out_footer(): - - ev_out_footer(self, outctx) - - -ida_idp.IDP_Hooks.ev_out_header(): - - ev_out_header(self, outctx) - - -ida_idp.IDP_Hooks.ev_out_insn(): - - ev_out_insn(self, outctx) -> bool - - - Outputs the instruction defined in 'ctx.insn' - - @return: Boolean (whether this instruction can be outputted or not) - - -ida_idp.IDP_Hooks.ev_out_label(): - - ev_out_label(self, outctx, colored_name) -> int - - -ida_idp.IDP_Hooks.ev_out_mnem(): - - ev_out_mnem(self, outctx) -> int - - -ida_idp.IDP_Hooks.ev_out_operand(): - - ev_out_operand(self, outctx, op) -> bool - - - Notification to generate operand text. - If False was returned, then the standard operand output function will be called. - - this notification may use out_...() functions to form the operand text - - @return: Boolean (whether the operand has been outputted or not) - - -ida_idp.IDP_Hooks.ev_out_segend(): - - ev_out_segend(self, outctx, seg) -> int - - -ida_idp.IDP_Hooks.ev_out_segstart(): - - ev_out_segstart(self, outctx, seg) -> int - - -ida_idp.IDP_Hooks.ev_out_special_item(): - - ev_out_special_item(self, outctx, segtype) -> int - - -ida_idp.IDP_Hooks.ev_realcvt(): - - ev_realcvt(self, m, e, swt) -> int - - -ida_idp.IDP_Hooks.ev_rename(): - - ev_rename(self, ea, new_name) -> int - - - The kernel is going to rename a byte. - - @param ea: Address - @param new_name: The new name - - @return: - - If returns value <0, then the kernel should - not rename it. See also the 'renamed' event - - -ida_idp.IDP_Hooks.ev_replaying_undo(): - - ev_replaying_undo(self, action_name, vec, is_undo) -> int - - -ida_idp.IDP_Hooks.ev_set_idp_options(): - - ev_set_idp_options(self, keyword, value_type, value, errbuf, idb_loaded) -> int - - -ida_idp.IDP_Hooks.ev_set_proc_options(): - - ev_set_proc_options(self, options, confidence) -> int - - -ida_idp.IDP_Hooks.ev_setup_til(): - - ev_setup_til(self) - - -ida_idp.IDP_Hooks.ev_shadow_args_size(): - - ev_shadow_args_size(self, shadow_args_size, pfn) -> int - - -ida_idp.IDP_Hooks.ev_str2reg(): - - ev_str2reg(self, regname) -> int - - -ida_idp.IDP_Hooks.ev_term(): - - ev_term(self) -> int - - -ida_idp.IDP_Hooks.ev_treat_hindering_item(): - - ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> int - - -ida_idp.IDP_Hooks.ev_undefine(): - - ev_undefine(self, ea) -> int - - - An item in the database (insn or data) is being deleted - @param ea: Address - @return: - - 1 - do not delete srranges at the item end - - 0 - srranges can be deleted - - -ida_idp.IDP_Hooks.ev_use_arg_types(): - - ev_use_arg_types(self, ea, fti, rargs) -> int - - -ida_idp.IDP_Hooks.ev_use_regarg_type(): - - ev_use_regarg_type(self, ea, rargs) -> PyObject * - - -ida_idp.IDP_Hooks.ev_use_stkarg_type(): - - ev_use_stkarg_type(self, ea, arg) -> int - - -ida_idp.IDP_Hooks.ev_validate_flirt_func(): - - ev_validate_flirt_func(self, start_ea, funcname) -> int - - -ida_idp.IDP_Hooks.ev_verify_noreturn(): - - ev_verify_noreturn(self, pfn) -> int - - -ida_idp.IDP_Hooks.ev_verify_sp(): - - ev_verify_sp(self, pfn) -> int - - -ida_idp.IDP_Hooks.hook(): - - hook(self) -> bool - - - Creates an IDP hook - - @return: Boolean true on success - - -ida_idp.IDP_Hooks.unhook(): - - unhook(self) -> bool - - - Removes the IDP hook - @return: Boolean true on success - - -class ida_idp.asm_t(): - - Proxy of C++ asm_t class - - -ida_idp.asm_t.a_align: - asm_t_a_align_get(self) -> char const * - -ida_idp.asm_t.a_ascii: - asm_t_a_ascii_get(self) -> char const * - -ida_idp.asm_t.a_band: - asm_t_a_band_get(self) -> char const * - -ida_idp.asm_t.a_bnot: - asm_t_a_bnot_get(self) -> char const * - -ida_idp.asm_t.a_bor: - asm_t_a_bor_get(self) -> char const * - -ida_idp.asm_t.a_bss: - asm_t_a_bss_get(self) -> char const * - -ida_idp.asm_t.a_byte: - asm_t_a_byte_get(self) -> char const * - -ida_idp.asm_t.a_comdef: - asm_t_a_comdef_get(self) -> char const * - -ida_idp.asm_t.a_curip: - asm_t_a_curip_get(self) -> char const * - -ida_idp.asm_t.a_double: - asm_t_a_double_get(self) -> char const * - -ida_idp.asm_t.a_dups: - asm_t_a_dups_get(self) -> char const * - -ida_idp.asm_t.a_dword: - asm_t_a_dword_get(self) -> char const * - -ida_idp.asm_t.a_equ: - asm_t_a_equ_get(self) -> char const * - -ida_idp.asm_t.a_extrn: - asm_t_a_extrn_get(self) -> char const * - -ida_idp.asm_t.a_float: - asm_t_a_float_get(self) -> char const * - -ida_idp.asm_t.a_include_fmt: - asm_t_a_include_fmt_get(self) -> char const * - -ida_idp.asm_t.a_mod: - asm_t_a_mod_get(self) -> char const * - -ida_idp.asm_t.a_oword: - asm_t_a_oword_get(self) -> char const * - -ida_idp.asm_t.a_packreal: - asm_t_a_packreal_get(self) -> char const * - -ida_idp.asm_t.a_public: - asm_t_a_public_get(self) -> char const * - -ida_idp.asm_t.a_qword: - asm_t_a_qword_get(self) -> char const * - -ida_idp.asm_t.a_rva: - asm_t_a_rva_get(self) -> char const * - -ida_idp.asm_t.a_seg: - asm_t_a_seg_get(self) -> char const * - -ida_idp.asm_t.a_shl: - asm_t_a_shl_get(self) -> char const * - -ida_idp.asm_t.a_shr: - asm_t_a_shr_get(self) -> char const * - -ida_idp.asm_t.a_sizeof_fmt: - asm_t_a_sizeof_fmt_get(self) -> char const * - -ida_idp.asm_t.a_tbyte: - asm_t_a_tbyte_get(self) -> char const * - -ida_idp.asm_t.a_vstruc_fmt: - asm_t_a_vstruc_fmt_get(self) -> char const * - -ida_idp.asm_t.a_weak: - asm_t_a_weak_get(self) -> char const * - -ida_idp.asm_t.a_word: - asm_t_a_word_get(self) -> char const * - -ida_idp.asm_t.a_xor: - asm_t_a_xor_get(self) -> char const * - -ida_idp.asm_t.a_yword: - asm_t_a_yword_get(self) -> char const * - -ida_idp.asm_t.accsep: - asm_t_accsep_get(self) -> char - -ida_idp.asm_t.ascsep: - asm_t_ascsep_get(self) -> char - -ida_idp.asm_t.cmnt: - asm_t_cmnt_get(self) -> char const * - -ida_idp.asm_t.cmnt2: - asm_t_cmnt2_get(self) -> char const * - -ida_idp.asm_t.end: - asm_t_end_get(self) -> char const * - -ida_idp.asm_t.esccodes: - asm_t_esccodes_get(self) -> char const * - -ida_idp.asm_t.flag: - asm_t_flag_get(self) -> uint32 - -ida_idp.asm_t.flag2: - asm_t_flag2_get(self) -> uint32 - -ida_idp.asm_t.header: - asm_t_header_get(self) -> char const *const * - -ida_idp.asm_t.help: - asm_t_help_get(self) -> help_t - -ida_idp.asm_t.high16: - asm_t_high16_get(self) -> char const * - -ida_idp.asm_t.high8: - asm_t_high8_get(self) -> char const * - -ida_idp.asm_t.lbrace: - asm_t_lbrace_get(self) -> char - -ida_idp.asm_t.low16: - asm_t_low16_get(self) -> char const * - -ida_idp.asm_t.low8: - asm_t_low8_get(self) -> char const * - -ida_idp.asm_t.name: - asm_t_name_get(self) -> char const * - -ida_idp.asm_t.origin: - asm_t_origin_get(self) -> char const * - -ida_idp.asm_t.rbrace: - asm_t_rbrace_get(self) -> char - -ida_idp.asm_t.uflag: - asm_t_uflag_get(self) -> uint16 - -ida_idp.assemble(): - - assemble(ea, cs, ip, use32, line) -> bool - - - Assemble an instruction into the database (display a warning if an error is found) - @param ea: linear address of instruction - @param cs: cs of instruction - @param ip: ip of instruction - @param use32: is 32bit segment? - @param line: line to assemble - - @return: Boolean. True on success. - - -ida_idp.cfg_get_cc_header_path(): - - cfg_get_cc_header_path(compid) -> char const * - - -ida_idp.cfg_get_cc_parm(): - - cfg_get_cc_parm(compid, name) -> char const * - - -ida_idp.cfg_get_cc_predefined_macros(): - - cfg_get_cc_predefined_macros(compid) -> char const * - - -ida_idp.delay_slot_insn(): - - delay_slot_insn(ea, bexec, fexec) -> bool - - - Helper function to get the delay slot instruction. - - - @param ea (C++: ea_t *) - @param bexec (C++: bool *) - @param fexec (C++: bool *) - - -ida_idp.gen_idb_event(): - - gen_idb_event(code) - - - the kernel will use this function to generate idb_events - - - @param code (C++: idb_event::event_code_t) - - -ida_idp.get_idb_notifier_addr(): - - get_idb_notifier_addr(arg1) -> PyObject * - - -ida_idp.get_idb_notifier_ud_addr(): - - get_idb_notifier_ud_addr(hooks) -> PyObject * - - -ida_idp.get_idp_name(): - - get_idp_name() -> char * - - - Get name of the current processor module. The name is derived from the - file name. For example, for IBM PC the module is named "pc.w32" - (windows version), then the module name is "PC" (uppercase). If no - processor module is loaded, this function will return NULL - - -ida_idp.get_idp_notifier_addr(): - - get_idp_notifier_addr(arg1) -> PyObject * - - -ida_idp.get_idp_notifier_ud_addr(): - - get_idp_notifier_ud_addr(hooks) -> PyObject * - - -ida_idp.get_reg_info(): - - get_reg_info(regname, bitrange) -> char const * - - - Get register information - useful for registers like al, ah, dil, etc. - - @param regname (C++: const char *) - @param bitrange (C++: bitrange_t *) - @return: NULL no such register - - -ida_idp.get_reg_name(): - - get_reg_name(reg, width, reghi=-1) -> ssize_t - - - Get text representation of a register. For most processors this - function will just return \ph{reg_names}[reg]. If the processor module - has implemented processor_t::get_reg_name, it will be used instead - - @param reg: internal register number as defined in the processor - module (C++: int) - @param width: register width in bytes (C++: size_t) - @param reghi: if specified, then this function will return the - register pair (C++: int) - @return: length of register name in bytes or -1 if failure - - -ida_idp.has_cf_chg(): - - has_cf_chg(feature, opnum) -> bool - - - Does an instruction with the specified feature modify the i-th - operand? - - - @param feature (C++: uint32) - @param opnum (C++: uint) - - -ida_idp.has_cf_use(): - - has_cf_use(feature, opnum) -> bool - - - Does an instruction with the specified feature use a value of the i-th - operand? - - - @param feature (C++: uint32) - @param opnum (C++: uint) - - -ida_idp.has_insn_feature(): - - has_insn_feature(icode, bit) -> bool - - - Does the specified instruction have the specified feature? - - - @param icode (C++: int) - @param bit (C++: uint32) - - -ida_idp.is_align_insn(): - - is_align_insn(ea) -> int - - - If the instruction at 'ea' looks like an alignment instruction, return - its length in bytes. Otherwise return 0. - - @param ea (C++: ea_t) - - -ida_idp.is_basic_block_end(): - - is_basic_block_end(insn, call_insn_stops_block) -> bool - - - Is the instruction the end of a basic block? - - - @param insn (C++: const insn_t &) - @param call_insn_stops_block (C++: bool) - - -ida_idp.is_call_insn(): - - is_call_insn(insn) -> bool - - - Is the instruction a "call"? - - - @param insn (C++: const insn_t &) - - -ida_idp.is_indirect_jump_insn(): - - is_indirect_jump_insn(insn) -> bool - - - Is the instruction an indirect jump? - - - @param insn (C++: const insn_t &) - - -ida_idp.is_ret_insn(): - - is_ret_insn(insn, strict=True) -> bool - - - Is the instruction a "return"? - - - @param insn (C++: const insn_t &) - @param strict (C++: bool) - - -ida_idp.parse_reg_name(): - - parse_reg_name(ri, regname) -> bool - - - Get register info by name. - - @param ri: result (C++: reg_info_t *) - @param regname: name of register (C++: const char *) - @return: success - - -ida_idp.ph_calcrel(): - - ph_calcrel(ea) - - -ida_idp.ph_find_op_value(): - - ph_find_op_value(insn, op) -> ssize_t - - -ida_idp.ph_find_reg_value(): - - ph_find_reg_value(insn, reg) -> ssize_t - - -ida_idp.ph_get_cnbits(): - - ph_get_cnbits() -> size_t - - - Returns the 'ph.cnbits' - - -ida_idp.ph_get_dnbits(): - - ph_get_dnbits() -> size_t - - - Returns the 'ph.dnbits' - - -ida_idp.ph_get_flag(): - - ph_get_flag() -> size_t - - - Returns the 'ph.flag' - - -ida_idp.ph_get_icode_return(): - - ph_get_icode_return() -> size_t - - - Returns the 'ph.icode_return' - - -ida_idp.ph_get_id(): - - ph_get_id() -> size_t - - - Returns the 'ph.id' field - - -ida_idp.ph_get_instruc(): - - ph_get_instruc() -> PyObject * - - - Returns a list of tuples (instruction_name, instruction_feature) containing the - instructions list as defined in he processor module - - -ida_idp.ph_get_instruc_end(): - - ph_get_instruc_end() -> size_t - - - Returns the 'ph.instruc_end' - - -ida_idp.ph_get_instruc_start(): - - ph_get_instruc_start() -> size_t - - - Returns the 'ph.instruc_start' - - -ida_idp.ph_get_operand_info(): - - ph_get_operand_info(ea, n) -> PyObject * - - - Returns the operand information given an ea and operand number. - - @param ea: address - @param n: operand number - - @return: Returns an idd_opinfo_t as a tuple: (modified, ea, reg_ival, regidx, value_size). - Please refer to idd_opinfo_t structure in the SDK. - - -ida_idp.ph_get_reg_code_sreg(): - - ph_get_reg_code_sreg() -> size_t - - - Returns the 'ph.reg_code_sreg' - - -ida_idp.ph_get_reg_data_sreg(): - - ph_get_reg_data_sreg() -> size_t - - - Returns the 'ph.reg_data_sreg' - - -ida_idp.ph_get_reg_first_sreg(): - - ph_get_reg_first_sreg() -> size_t - - - Returns the 'ph.reg_first_sreg' - - -ida_idp.ph_get_reg_last_sreg(): - - ph_get_reg_last_sreg() -> size_t - - - Returns the 'ph.reg_last_sreg' - - -ida_idp.ph_get_regnames(): - - ph_get_regnames() -> PyObject * - - - Returns the list of register names as defined in the processor module - - -ida_idp.ph_get_segreg_size(): - - ph_get_segreg_size() -> size_t - - - Returns the 'ph.segreg_size' - - -ida_idp.ph_get_tbyte_size(): - - ph_get_tbyte_size() -> size_t - - - Returns the 'ph.tbyte_size' field as defined in he processor module - - -ida_idp.ph_get_version(): - - ph_get_version() -> size_t - - - Returns the 'ph.version' - - -ida_idp.processor_t.ev_add_cref(): - - ev_add_cref(self, _from, to, type) -> int - - -ida_idp.processor_t.ev_add_dref(): - - ev_add_dref(self, _from, to, type) -> int - - -ida_idp.processor_t.ev_adjust_argloc(): - - ev_adjust_argloc(self, argloc, optional_type, size) -> int - - -ida_idp.processor_t.ev_adjust_libfunc_ea(): - - ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int - - -ida_idp.processor_t.ev_adjust_refinfo(): - - ev_adjust_refinfo(self, ri, ea, n, fd) -> int - - -ida_idp.processor_t.ev_analyze_prolog(): - - ev_analyze_prolog(self, ea) -> int - - -ida_idp.processor_t.ev_arg_addrs_ready(): - - ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int - - -ida_idp.processor_t.ev_calc_arglocs(): - - ev_calc_arglocs(self, fti) -> int - - -ida_idp.processor_t.ev_calc_cdecl_purged_bytes(): - - ev_calc_cdecl_purged_bytes(self, ea) -> int - - -ida_idp.processor_t.ev_calc_next_eas(): - - ev_calc_next_eas(self, res, insn, over) -> int - - -ida_idp.processor_t.ev_calc_purged_bytes(): - - ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int - - -ida_idp.processor_t.ev_calc_retloc(): - - ev_calc_retloc(self, retloc, rettype, cc) -> int - - -ida_idp.processor_t.ev_calc_spdelta(): - - ev_calc_spdelta(self, spdelta, insn) -> int - - -ida_idp.processor_t.ev_calc_switch_cases(): - - ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int - - -ida_idp.processor_t.ev_calc_varglocs(): - - ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int - - -ida_idp.processor_t.ev_calcrel(): - - ev_calcrel(self) -> int - - -ida_idp.processor_t.ev_clean_tbit(): - - ev_clean_tbit(self, ea, getreg, regvalues) -> int - - -ida_idp.processor_t.ev_create_flat_group(): - - ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int - - -ida_idp.processor_t.ev_decorate_name(): - - ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * - - -ida_idp.processor_t.ev_del_cref(): - - ev_del_cref(self, _from, to, expand) -> int - - -ida_idp.processor_t.ev_del_dref(): - - ev_del_dref(self, _from, to) -> int - - -ida_idp.processor_t.ev_delay_slot_insn(): - - ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * - - -ida_idp.processor_t.ev_demangle_name(): - - ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * - - -ida_idp.processor_t.ev_ending_undo(): - - ev_ending_undo(self, action_name, is_undo) -> int - - -ida_idp.processor_t.ev_equal_reglocs(): - - ev_equal_reglocs(self, a1, a2) -> int - - -ida_idp.processor_t.ev_extract_address(): - - ev_extract_address(self, out_ea, screen_ea, string, position) -> int - - -ida_idp.processor_t.ev_find_op_value(): - - ev_find_op_value(self, pinsn, opn) -> PyObject * - - -ida_idp.processor_t.ev_find_reg_value(): - - ev_find_reg_value(self, pinsn, reg) -> PyObject * - - -ida_idp.processor_t.ev_gen_asm_or_lst(): - - ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) - - -ida_idp.processor_t.ev_gen_stkvar_def(): - - ev_gen_stkvar_def(self, outctx, mptr, v) -> int - - -ida_idp.processor_t.ev_get_abi_info(): - - ev_get_abi_info(self, abi_names, abi_opts, comp) -> int - - -ida_idp.processor_t.ev_get_bg_color(): - - ev_get_bg_color(self, ea) -> int or None - - -ida_idp.processor_t.ev_get_cc_regs(): - - ev_get_cc_regs(self, regs, cc) -> int - - -ida_idp.processor_t.ev_get_dbr_opnum(): - - ev_get_dbr_opnum(self, opnum, insn) -> int - - -ida_idp.processor_t.ev_get_default_enum_size(): - - ev_get_default_enum_size(self, cm) -> int - - -ida_idp.processor_t.ev_get_macro_insn_head(): - - ev_get_macro_insn_head(self, head, ip) -> int - - -ida_idp.processor_t.ev_get_reg_info(): - - ev_get_reg_info(self, main_regname, bitrange, regname) -> int - - -ida_idp.processor_t.ev_get_reg_name(): - - ev_get_reg_name(self, reg, width, reghi) -> PyObject * - - -ida_idp.processor_t.ev_get_simd_types(): - - ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int - - -ida_idp.processor_t.ev_get_stkarg_offset(): - - ev_get_stkarg_offset(self) -> int - - -ida_idp.processor_t.ev_get_stkvar_scale_factor(): - - ev_get_stkvar_scale_factor(self) -> int - - -ida_idp.processor_t.ev_getreg(): - - ev_getreg(self, regval, regnum) -> int - - -ida_idp.processor_t.ev_init(): - - ev_init(self, idp_modname) -> int - - -ida_idp.processor_t.ev_insn_reads_tbit(): - - ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int - - -ida_idp.processor_t.ev_is_cond_insn(): - - ev_is_cond_insn(self, insn) -> int - - -ida_idp.processor_t.ev_is_jump_func(): - - ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int - - -ida_idp.processor_t.ev_last_cb_before_loader(): - - ev_last_cb_before_loader(self) -> int - - -ida_idp.processor_t.ev_loader(): - - ev_loader(self) -> int - - -ida_idp.processor_t.ev_lower_func_type(): - - ev_lower_func_type(self, argnums, fti) -> int - - -ida_idp.processor_t.ev_max_ptr_size(): - - ev_max_ptr_size(self) -> int - - -ida_idp.processor_t.ev_newasm(): - - ev_newasm(self, asmnum) -> int - - -ida_idp.processor_t.ev_next_exec_insn(): - - ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int - - -ida_idp.processor_t.ev_realcvt(): - - ev_realcvt(self, m, e, swt) -> int - - -ida_idp.processor_t.ev_replaying_undo(): - - ev_replaying_undo(self, action_name, vec, is_undo) -> int - - -ida_idp.processor_t.ev_setup_til(): - - ev_setup_til(self) - - -ida_idp.processor_t.ev_shadow_args_size(): - - ev_shadow_args_size(self, shadow_args_size, pfn) -> int - - -ida_idp.processor_t.ev_term(): - - ev_term(self) -> int - - -ida_idp.processor_t.ev_use_arg_types(): - - ev_use_arg_types(self, ea, fti, rargs) -> int - - -ida_idp.processor_t.ev_use_regarg_type(): - - ev_use_regarg_type(self, ea, rargs) -> PyObject * - - -ida_idp.processor_t.ev_use_stkarg_type(): - - ev_use_stkarg_type(self, ea, arg) -> int - - -ida_idp.processor_t.get_auxpref(): - - This function returns insn.auxpref value - - -ida_idp.processor_t.get_idpdesc(): - - This function must be present and should return the list of - short processor names similar to the one in ph.psnames. - This method can be overridden to return to the kernel a different IDP description. - - -ida_idp.processor_t.get_uFlag(): - - Use this utility function to retrieve the 'uFlag' global variable - - -ida_idp.processor_t.hook(): - - hook(self) -> bool - - - Creates an IDP hook - - @return: Boolean true on success - - -ida_idp.processor_t.unhook(): - - unhook(self) -> bool - - - Removes the IDP hook - @return: Boolean true on success - - -class ida_idp.reg_info_t(): - - Proxy of C++ reg_info_t class - - -ida_idp.reg_info_t.compare(): - - compare(self, r) -> int - - -ida_idp.reg_info_t.reg: - reg_info_t_reg_get(self) -> int - -ida_idp.reg_info_t.size: - reg_info_t_size_get(self) -> int - -ida_idp.set_processor_type(): - - set_processor_type(procname, level) -> bool - - - Set target processor type. Once a processor module is loaded, it - cannot be replaced until we close the idb. - - @param procname: name of processor type (one of names present in - \ph{psnames}) (C++: const char *) - @param level: SETPROC_ (C++: setproc_level_t) - @return: success - - -ida_idp.set_target_assembler(): - - set_target_assembler(asmnum) -> bool - - - Set target assembler. - - @param asmnum: number of assembler in the current processor module - (C++: int) - @return: success - - -ida_idp.sizeof_ldbl(): - - sizeof_ldbl() -> size_t - - - Get size of long double. - - -ida_idp.str2reg(): - - str2reg(p) -> int - - - Get any reg number (-1 on error) - - - @param p (C++: const char *) - - - -=== ida_idp EPYDOC INJECTIONS === -ida_idp.AS2_BRACE -""" -Use braces for all expressions. -""" - -ida_idp.AS2_BYTE1CHAR -""" -Meaningful only for wide byte processors. - -One symbol per processor byte -""" - -ida_idp.AS2_COLONSUF -""" -addresses may have ":xx" suffix this suffix must be ignored when -extracting the address under the cursor -""" - -ida_idp.AS2_IDEALDSCR -""" -Description of struc/union is in the 'reverse' form (keyword before -name) the same as in borland tasm ideal -""" - -ida_idp.AS2_STRINV -""" -(For processors with bytes bigger than 8 bits) - -Invert meaning of \\inf{wide_high_byte_first} for text strings -""" - -ida_idp.AS2_TERSESTR -""" -NAME is supported. - -'terse' structure initialization form -""" - -ida_idp.AS2_YWORD -""" -a_yword field is present and valid -""" - -ida_idp.ASB_BINF0 -""" -010101b -""" - -ida_idp.ASB_BINF1 -""" -^B010101 -""" - -ida_idp.ASB_BINF2 -""" -%010101 -""" - -ida_idp.ASB_BINF3 -""" -0b1010101 -""" - -ida_idp.ASB_BINF4 -""" -b'1010101 -""" - -ida_idp.ASB_BINF5 -""" -b'1010101' -""" - -ida_idp.ASD_DECF0 -""" -34 -""" - -ida_idp.ASD_DECF1 -""" -#34 -""" - -ida_idp.ASD_DECF3 -""" -.34 -""" - -ida_idp.ASH_HEXF0 -""" -34h -""" - -ida_idp.ASH_HEXF1 -""" -h'34 -""" - -ida_idp.ASH_HEXF2 -""" -34 -""" - -ida_idp.ASH_HEXF3 -""" -0x34 -""" - -ida_idp.ASH_HEXF4 -""" -$34 -""" - -ida_idp.ASH_HEXF5 -""" -<^R > (radix) -""" - -ida_idp.ASO_OCTF0 -""" -123o -""" - -ida_idp.ASO_OCTF1 -""" -0123 -""" - -ida_idp.ASO_OCTF2 -""" -123 -""" - -ida_idp.ASO_OCTF3 -""" -@123 -""" - -ida_idp.ASO_OCTF4 -""" -o'123 -""" - -ida_idp.ASO_OCTF5 -""" -123q -""" - -ida_idp.ASO_OCTF6 -""" -~123 -""" - -ida_idp.ASO_OCTF7 -""" -q'123 -""" - -ida_idp.AS_1TEXT -""" -1 text per line, no bytes -""" - -ida_idp.AS_2CHRE -""" -double char constants are: "xy -""" - -ida_idp.AS_ALIGN2 -""" -(.align 5 means to align at 32byte boundary) - -.align directive expects an exponent rather than a power of 2 -""" - -ida_idp.AS_ASCIIC -""" -(\\n,\\x01 and similar) - -ascii directive accepts C-like escape sequences -""" - -ida_idp.AS_ASCIIZ -""" -ascii directive inserts implicit zero byte at the end -""" - -ida_idp.AS_BINFM -""" -mask - binary number format -""" - -ida_idp.AS_COLON -""" -create colons after data names ? -""" - -ida_idp.AS_DECFM -""" -mask - decimal number format -""" - -ida_idp.AS_HEXFM -""" -mask - hex number format -""" - -ida_idp.AS_LALIGN -""" -Labels at "align" keyword are supported. -""" - -ida_idp.AS_N2CHR -""" -can't have 2 byte char consts -""" - -ida_idp.AS_NCHRE -""" -char constants are: 'x -""" - -ida_idp.AS_NCMAS -""" -no commas in ascii directives -""" - -ida_idp.AS_NHIAS -""" -no characters with high bit -""" - -ida_idp.AS_NOCODECLN -""" -don't create colons after code names -""" - -ida_idp.AS_NOSPACE -""" -No spaces in expressions. -""" - -ida_idp.AS_NOXRF -""" -Disable xrefs during the output file generation. -""" - -ida_idp.AS_OCTFM -""" -mask - octal number format -""" - -ida_idp.AS_OFFST -""" -offsets are 'offset xxx' ? -""" - -ida_idp.AS_ONEDUP -""" -One array definition per line. -""" - -ida_idp.AS_RELSUP -""" -Checkarg: 'and','or','xor' operations with addresses are possible. -""" - -ida_idp.AS_UDATA -""" -can use '?' in data directives -""" - -ida_idp.AS_UNEQU -""" -replace undefined data items with EQU (for ANTA's A80) -""" - -ida_idp.AS_XTRNTYPE -""" -Assembler understands type of extern symbols as ":type" suffix. -""" - -ida_idp.CF_CALL -""" -CALL instruction (should make a procedure here) -""" - -ida_idp.CF_CHG1 -""" -The instruction modifies the first operand. -""" - -ida_idp.CF_CHG2 -""" -The instruction modifies the second operand. -""" - -ida_idp.CF_CHG3 -""" -The instruction modifies the third operand. -""" - -ida_idp.CF_CHG4 -""" -The instruction modifies 4 operand. -""" - -ida_idp.CF_CHG5 -""" -The instruction modifies 5 operand. -""" - -ida_idp.CF_CHG6 -""" -The instruction modifies 6 operand. -""" - -ida_idp.CF_HLL -""" -language function. - -Instruction may be present in a high level -""" - -ida_idp.CF_JUMP -""" -jump or call (thus needs additional analysis) - -The instruction passes execution using indirect -""" - -ida_idp.CF_SHFT -""" -Bit-shift instruction (shl,shr...) -""" - -ida_idp.CF_STOP -""" -next instruction - -Instruction doesn't pass execution to the -""" - -ida_idp.CF_USE1 -""" -The instruction uses value of the first operand. -""" - -ida_idp.CF_USE2 -""" -The instruction uses value of the second operand. -""" - -ida_idp.CF_USE3 -""" -The instruction uses value of the third operand. -""" - -ida_idp.CF_USE4 -""" -The instruction uses value of the 4 operand. -""" - -ida_idp.CF_USE5 -""" -The instruction uses value of the 5 operand. -""" - -ida_idp.CF_USE6 -""" -The instruction uses value of the 6 operand. -""" - -ida_idp.CUSTOM_INSN_ITYPE -""" -Custom instruction codes defined by processor extension plugins must -be greater than or equal to this -""" - -ida_idp.IDP_INTERFACE_VERSION -""" -The interface version number.see also 'IDA_SDK_VERSION' from 'pro.h' -""" - -ida_idp.OP_FP_BASED -""" -operand is FP based -""" - -ida_idp.OP_SP_ADD -""" -operand value is added to the pointer -""" - -ida_idp.OP_SP_BASED -""" -operand is SP based -""" - -ida_idp.OP_SP_SUB -""" -operand value is subtracted from the pointer -""" - -ida_idp.PLFM_386 -""" -Intel 80x86. -""" - -ida_idp.PLFM_6502 -""" -6502 -""" - -ida_idp.PLFM_65C816 -""" -65802/65816 -""" - -ida_idp.PLFM_6800 -""" -Motorola 68xx. -""" - -ida_idp.PLFM_68K -""" -Motorola 680x0. -""" - -ida_idp.PLFM_80196 -""" -Intel 80196. -""" - -ida_idp.PLFM_8051 -""" -8051 -""" - -ida_idp.PLFM_AD2106X -""" -Analog Devices ADSP 2106X. -""" - -ida_idp.PLFM_AD218X -""" -Analog Devices ADSP 218X. -""" - -ida_idp.PLFM_ALPHA -""" -DEC Alpha. -""" - -ida_idp.PLFM_ARC -""" -Argonaut RISC Core. -""" - -ida_idp.PLFM_ARM -""" -Advanced RISC Machines. -""" - -ida_idp.PLFM_AVR -""" -Atmel 8-bit RISC processor(s) -""" - -ida_idp.PLFM_C166 -""" -Siemens C166 family. -""" - -ida_idp.PLFM_C39 -""" -Rockwell C39. -""" - -ida_idp.PLFM_CR16 -""" -NSC CR16. -""" - -ida_idp.PLFM_DALVIK -""" -Android Dalvik Virtual Machine. -""" - -ida_idp.PLFM_DSP56K -""" -Motorola DSP5600x. -""" - -ida_idp.PLFM_DSP96K -""" -Motorola DSP96000. -""" - -ida_idp.PLFM_EBC -""" -EFI Bytecode. -""" - -ida_idp.PLFM_F2MC -""" -Fujistu F2MC-16. -""" - -ida_idp.PLFM_FR -""" -Fujitsu FR Family. -""" - -ida_idp.PLFM_H8 -""" -Hitachi H8/300, H8/2000. -""" - -ida_idp.PLFM_H8500 -""" -Hitachi H8/500. -""" - -ida_idp.PLFM_HPPA -""" -Hewlett-Packard PA-RISC. -""" - -ida_idp.PLFM_I860 -""" -Intel 860. -""" - -ida_idp.PLFM_I960 -""" -Intel 960. -""" - -ida_idp.PLFM_IA64 -""" -Intel Itanium IA64. -""" - -ida_idp.PLFM_JAVA -""" -Java. -""" - -ida_idp.PLFM_KR1878 -""" -Angstrem KR1878. -""" - -ida_idp.PLFM_M16C -""" -Renesas M16C. -""" - -ida_idp.PLFM_M32R -""" -Mitsubishi 32bit RISC. -""" - -ida_idp.PLFM_M740 -""" -Mitsubishi 8bit. -""" - -ida_idp.PLFM_M7700 -""" -Mitsubishi 16bit. -""" - -ida_idp.PLFM_M7900 -""" -Mitsubishi 7900. -""" - -ida_idp.PLFM_MC6812 -""" -Motorola 68HC12. -""" - -ida_idp.PLFM_MC6816 -""" -Motorola 68HC16. -""" - -ida_idp.PLFM_MIPS -""" -MIPS. -""" - -ida_idp.PLFM_MN102L00 -""" -Panasonic MN10200. -""" - -ida_idp.PLFM_MSP430 -""" -Texas Instruments MSP430. -""" - -ida_idp.PLFM_NEC_78K0 -""" -NEC 78K0. -""" - -ida_idp.PLFM_NEC_78K0S -""" -NEC 78K0S. -""" - -ida_idp.PLFM_NEC_V850X -""" -NEC V850 and V850ES/E1/E2. -""" - -ida_idp.PLFM_NET -""" -Microsoft Visual Studio.Net. -""" - -ida_idp.PLFM_OAKDSP -""" -Atmel OAK DSP. -""" - -ida_idp.PLFM_PDP -""" -PDP11. -""" - -ida_idp.PLFM_PIC -""" -Microchip's PIC. -""" - -ida_idp.PLFM_PIC16 -""" -Microchip's 16-bit PIC. -""" - -ida_idp.PLFM_PPC -""" -PowerPC. -""" - -ida_idp.PLFM_SCR_ADPT -""" -Processor module adapter for processor modules written in scripting -languages. -""" - -ida_idp.PLFM_SH -""" -Renesas (formerly Hitachi) SuperH. -""" - -ida_idp.PLFM_SPARC -""" -SPARC. -""" - -ida_idp.PLFM_SPC700 -""" -Sony SPC700. -""" - -ida_idp.PLFM_SPU -""" -Cell Broadband Engine Synergistic Processor Unit. -""" - -ida_idp.PLFM_ST20 -""" -SGS-Thomson ST20. -""" - -ida_idp.PLFM_ST7 -""" -SGS-Thomson ST7. -""" - -ida_idp.PLFM_ST9 -""" -ST9+. -""" - -ida_idp.PLFM_TLCS900 -""" -Toshiba TLCS-900. -""" - -ida_idp.PLFM_TMS -""" -Texas Instruments TMS320C5x. -""" - -ida_idp.PLFM_TMS320C1X -""" -Texas Instruments TMS320C1x. -""" - -ida_idp.PLFM_TMS320C28 -""" -Texas Instruments TMS320C28x. -""" - -ida_idp.PLFM_TMS320C3 -""" -Texas Instruments TMS320C3. -""" - -ida_idp.PLFM_TMS320C54 -""" -Texas Instruments TMS320C54xx. -""" - -ida_idp.PLFM_TMS320C55 -""" -Texas Instruments TMS320C55xx. -""" - -ida_idp.PLFM_TMSC6 -""" -Texas Instruments TMS320C6x. -""" - -ida_idp.PLFM_TRICORE -""" -Tasking Tricore. -""" - -ida_idp.PLFM_TRIMEDIA -""" -Trimedia. -""" - -ida_idp.PLFM_UNSP -""" -SunPlus unSP. -""" - -ida_idp.PLFM_Z8 -""" -Z8. -""" - -ida_idp.PLFM_Z80 -""" -8085, Z80 -""" - -ida_idp.PRN_BIN -""" -binary -""" - -ida_idp.PRN_DEC -""" -decimal -""" - -ida_idp.PRN_HEX -""" -hex -""" - -ida_idp.PRN_OCT -""" -octal -""" - -ida_idp.PR_ADJSEGS -""" -IDA may adjust segments' starting/ending addresses. -""" - -ida_idp.PR_ALIGN -""" -All data items should be aligned properly. -""" - -ida_idp.PR_ALIGN_INSN -""" -allow ida to create alignment instructions arbitrarily. Since these -instructions might lead to other wrong instructions and spoil the -listing, IDA does not create them by default anymore -""" - -ida_idp.PR_ASSEMBLE -""" -Module has a built-in assembler and will react to ev_assemble. -""" - -ida_idp.PR_BINMEM -""" -the processor module provides correct segmentation for binary files -(i.e. it creates additional segments) The kernel will not ask the user -to specify the RAM/ROM sizes -""" - -ida_idp.PR_CHK_XREF -""" -don't allow near xrefs between segments with different bases -""" - -ida_idp.PR_CNDINSNS -""" -has conditional instructions -""" - -ida_idp.PR_DEFNUM -""" -mask - default number representation -""" - -ida_idp.PR_DEFSEG32 -""" -segments are 32-bit by default -""" - -ida_idp.PR_DEFSEG64 -""" -segments are 64-bit by default -""" - -ida_idp.PR_DELAYED -""" -has delayed jumps and calls if this flag is set, -\\ph{is_basic_block_end}, \\ph{has_delay_slot} should be implemented -""" - -ida_idp.PR_NOCHANGE -""" -(display only) - -The user can't change segments and code/data attributes -""" - -ida_idp.PR_NO_SEGMOVE -""" -(i.e. the user can't move segments) - -the processor module doesn't support 'move_segm()' -""" - -ida_idp.PR_PURGING -""" -there are calling conventions which may purge bytes from the stack -""" - -ida_idp.PR_RNAMESOK -""" -allow user register names for location names -""" - -ida_idp.PR_SCALE_STKVARS -""" -use \\ph{get_stkvar_scale} callback -""" - -ida_idp.PR_SEGS -""" -has segment registers? -""" - -ida_idp.PR_SEGTRANS -""" -the processor module supports the segment translation feature (meaning -it calculates the code addresses using the 'map_code_ea()' function) -""" - -ida_idp.PR_SGROTHER -""" -the segment registers don't contain the segment selectors. -""" - -ida_idp.PR_STACK_UP -""" -the stack grows up -""" - -ida_idp.PR_TYPEINFO -""" -ALL OF THEM SHOULD BE IMPLEMENTED! - -the processor module supports type information callbacks -""" - -ida_idp.PR_USE32 -""" -supports 32-bit addressing? -""" - -ida_idp.PR_USE64 -""" -supports 64-bit addressing? -""" - -ida_idp.PR_USE_ARG_TYPES -""" -use \\ph{use_arg_types} callback -""" - -ida_idp.PR_USE_TBYTE -""" - 'BTMT_SPECFLT' means _TBYTE type -""" - -ida_idp.PR_WORD_INS -""" -instruction codes are grouped 2bytes in binary line prefix -""" - -ida_idp.REG_SPOIL -""" -processor_t::use_regarg_type uses this bit in the return value to -indicate that the register value has been spoiled -""" -=== ida_idp EPYDOC INJECTIONS END === -class ida_kernwin.Choose(): - - Chooser wrapper class. - - Some constants are defined in this class. - Please refer to kernwin.hpp for more information. - - -ida_kernwin.Choose.Activate(): - - Activates a visible chooser - - -ida_kernwin.Choose.Close(): - - Closes the chooser - - -ida_kernwin.Choose.Embedded(): - - Creates an embedded chooser (as opposed to Show()) - @return: Returns 0 on success or NO_ATTR - - -ida_kernwin.Choose.GetEmbSelection(): - - Deprecated. For embedded choosers, the selection is - available through 'Form.EmbeddedChooserControl.selection' - - -ida_kernwin.Choose.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_kernwin.Choose.Refresh(): - - Causes the refresh callback to trigger - - -ida_kernwin.Choose.Show(): - - Activates or creates a chooser window - @param modal: Display as modal dialog - @return: For all choosers it will return NO_ATTR if some mandatory - attribute is missing. The mandatory attributes are: flags, - title, cols, OnGetSize(), OnGetLine(); - For modal choosers it will return the selected item index (0-based), - or NO_SELECTION if no selection, - or EMPTY_CHOOSER if the OnRefresh() callback returns EMPTY_CHOOSER; - For non-modal choosers it will return 0 - or ALREADY_EXISTS if the chooser was already open and is active now; - - -ida_kernwin.Choose.UI_Hooks_Trampoline.create_desktop_widget(): - - create_desktop_widget(self, title, cfg) -> PyObject * - - -ida_kernwin.Choose.UI_Hooks_Trampoline.current_widget_changed(): - - current_widget_changed(self, widget, prev_widget) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.database_inited(): - - database_inited(self, is_new_database, idc_script) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.debugger_menu_change(): - - debugger_menu_change(self, enable) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.finish_populating_widget_popup(): - - finish_populating_widget_popup(self, widget, popup_handle, ctx=None) - - - The UI is about to be done populating the TWidget's popup menu. - Now is a good time to call idaapi.attach_action_to_popup() - - @param widget: The widget - @param popup: The popup menu. - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.get_chooser_item_attrs(): - - get_chooser_item_attrs(self, chooser, n, attrs) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.get_custom_viewer_hint(): - - get_custom_viewer_hint(self, viewer, place) -> PyObject * - - -ida_kernwin.Choose.UI_Hooks_Trampoline.get_ea_hint(): - - get_ea_hint(self, ea) -> PyObject * - - - The UI wants to display a simple hint for an address in the navigation band - - @param ea: The address - @return: String with the hint or None - - -ida_kernwin.Choose.UI_Hooks_Trampoline.get_item_hint(): - - get_item_hint(self, ea, max_lines) -> PyObject * - - -ida_kernwin.Choose.UI_Hooks_Trampoline.get_widget_config(): - - get_widget_config(self, widget, cfg) -> PyObject * - - -ida_kernwin.Choose.UI_Hooks_Trampoline.hook(): - - hook(self) -> bool - - - Creates an UI hook - - @return: Boolean true on success - - -ida_kernwin.Choose.UI_Hooks_Trampoline.idcstart(): - - idcstart(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.idcstop(): - - idcstop(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.plugin_loaded(): - - plugin_loaded(self, plugin_info) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.plugin_unloading(): - - plugin_unloading(self, plugin_info) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.postprocess_action(): - - postprocess_action(self) - - - An ida ui action has been handled - - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.preprocess_action(): - - preprocess_action(self, name) - - - IDA ui is about to handle a user action - - @param name: ui action name - (these names can be looked up in ida[tg]ui.cfg) - @return: 0-ok, nonzero - a plugin has handled the action - - -ida_kernwin.Choose.UI_Hooks_Trampoline.range(): - - range(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.ready_to_run(): - - ready_to_run(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.resume(): - - resume(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.saved(): - - saved(self) - - - The kernel has saved the database. - - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.saving(): - - saving(self) - - - The kernel is saving the database. - - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.screen_ea_changed(): - - screen_ea_changed(self, ea, prev_ea) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.set_widget_config(): - - set_widget_config(self, widget, cfg) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.suspend(): - - suspend(self) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.term(): - - term(self) - - - IDA is terminated and the database is already closed. - The UI may close its windows in this callback. - - -ida_kernwin.Choose.UI_Hooks_Trampoline.unhook(): - - unhook(self) -> bool - - - Removes the UI hook - @return: Boolean true on success - - -ida_kernwin.Choose.UI_Hooks_Trampoline.updated_actions(): - - updated_actions(self) - - - The UI is done updating actions. - - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.updating_actions(): - - updating_actions(self, ctx) - - - The UI is about to batch-update some actions. - - @param ctx: The action_update_ctx_t instance - @return: Ignored - - -ida_kernwin.Choose.UI_Hooks_Trampoline.widget_closing(): - - widget_closing(self, widget) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.widget_invisible(): - - widget_invisible(self, widget) - - -ida_kernwin.Choose.UI_Hooks_Trampoline.widget_visible(): - - widget_visible(self, widget) - - -ida_kernwin.Choose.adjust_last_item(): - - Helper for OnDeleteLine() and OnRefresh() callbacks. - They can be finished by the following line: - return [Choose.ALL_CHANGED] + self.adjust_last_item(n) - @param: line number of the remaining select item - @return: list of selected lines numbers (one element or empty) - - -ida_kernwin.CustomIDAMemo.CreateGroups(): - - Send a request to modify the graph by creating a - (set of) group(s), and perform an animation. - - Each object in the 'groups_infos' list must be of the format: - { - "nodes" : [, , , ...] # The list of nodes to group - "text" : # The synthetic text for that group - } - - @param groups_infos: A list of objects that describe those groups. - @return: A [, , ...] list of group nodes, or None (failure). - - -ida_kernwin.CustomIDAMemo.DelNodesInfos(): - - Delete the properties for the given node(s). - - @param nodes: A list of node IDs - - -ida_kernwin.CustomIDAMemo.DeleteGroups(): - - Send a request to delete the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param new_current: A node to focus on after the groups have been deleted - @return: True on success, False otherwise. - - -ida_kernwin.CustomIDAMemo.GetNodeInfo(): - - Get the properties for the given node. - - @param node: The index of the node. - @return: A tuple (bg_color, frame_color, ea, text), or None. - - -ida_kernwin.CustomIDAMemo.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_kernwin.CustomIDAMemo.Refresh(): - - Refreshes the view. This causes the OnRefresh() to be called - - -ida_kernwin.CustomIDAMemo.SetCurrentRendererType(): - - Set the current view's renderer. - - @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. - - -ida_kernwin.CustomIDAMemo.SetGroupsVisibility(): - - Send a request to expand/collapse the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param expand: True to expand the group, False otherwise. - @param new_current: A node to focus on after the groups have been expanded/collapsed. - @return: True on success, False otherwise. - - -ida_kernwin.CustomIDAMemo.SetNodeInfo(): - - Set the properties for the given node. - - Example usage (set second nodes's bg color to red): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff0000 - inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) - - @param node_index: The node index. - @param node_info: An idaapi.node_info_t instance. - @param flags: An OR'ed value of NIF_* values. - - -ida_kernwin.CustomIDAMemo.SetNodesInfos(): - - Set the properties for the given nodes. - - Example usage (set first three nodes's bg color to purple): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff00ff - inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) - - @param values: A dictionary of 'int -> node_info_t' objects. - - -ida_kernwin.CustomIDAMemo.hook(): - - hook(self) -> bool - - -ida_kernwin.CustomIDAMemo.unhook(): - - unhook(self) -> bool - - -ida_kernwin.CustomIDAMemo.view_created(): - - view_created(self, view) - - -ida_kernwin.Form.Add(): - - Low level function. Prefer AddControls() to this function. - This function adds one control to the form. - - @param name: Control name - @param ctrl: Control object - @param mkattr: Create control name / control object as a form attribute - - -ida_kernwin.Form.AddControls(): - - Adds controls from a dictionary. - The dictionary key is the control name and the value is a Form.Control object - @param controls: The control dictionary - - -class ida_kernwin.Form.ButtonInput(): - - Button control. - A handler along with a 'code' (numeric value) can be associated with the button. - This way one handler can handle many buttons based on the button code (or in other terms id or tag) - - -ida_kernwin.Form.ButtonInput.free(): - - Free the control - - -ida_kernwin.Form.ButtonInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.ChkGroupControl(): - - Checkbox group control class. - It holds a set of checkbox controls - - -ida_kernwin.Form.ChkGroupControl.free(): - - Free the control - - -ida_kernwin.Form.ChkGroupControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.ChkGroupControl.is_input_field(): - - Return True if this field acts as an input - - -class ida_kernwin.Form.ChkGroupItemControl(): - - Checkbox group item control - - -ida_kernwin.Form.ChkGroupItemControl.free(): - - Free the control - - -ida_kernwin.Form.ChkGroupItemControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.Close(): - - Close the form - @param close_normally: - 1: form is closed normally as if the user pressed Enter - 0: form is closed abnormally as if the user pressed Esc - @return: None - - -class ida_kernwin.Form.ColorInput(): - - Color button input control - - -ida_kernwin.Form.ColorInput.free(): - - Free the control - - -ida_kernwin.Form.ColorInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.Compile(): - - Compiles a form and returns the form object (self) and the argument list. - The form object will contain object names corresponding to the form elements - - @return: It will raise an exception on failure. Otherwise the return value is ignored - - -ida_kernwin.Form.CompileEx(): - - Low level function. - Compiles (parses the form syntax and adds the control) the form string and - returns the argument list to be passed the argument list to ask_form(). - - The form controls are wrapped inside curly braces: {ControlName}. - - A special operator can be used to return the index of a given control by its name: {id:ControlName}. - This is useful when you use the STARTITEM form keyword to set the initially focused control. - (note that, technically, the index is not the same as the ID; that's because STARTITEM - uses raw, 0-based indexes rather than control IDs to determine the focused widget.) - - @param form: Compiles the form and returns the arguments needed to be passed to ask_form() - - -ida_kernwin.Form.Compiled(): - - Checks if the form has already been compiled - - @return: Boolean - - -ida_kernwin.Form.Control.free(): - - Free the control - - -ida_kernwin.Form.Control.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.Control.get_tag(): - - Control tag character. One of Form.FT_XXXX. - The form class will expand the {} notation and replace them with the tags - - -ida_kernwin.Form.Control.is_input_field(): - - Return True if this field acts as an input - - -ida_kernwin.Form.ControlToFieldTypeIdAndSize(): - - Converts a control object to a tuple containing the field id - and the associated buffer size - - -class ida_kernwin.Form.DirInput(): - - Directory browsing control - - -ida_kernwin.Form.DirInput.free(): - - Free the control - - -ida_kernwin.Form.DirInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.DropdownListControl(): - - Dropdown control - This control allows manipulating a dropdown control - - -ida_kernwin.Form.DropdownListControl._free(): - - Explicitly delete the link (only if not static) - - -ida_kernwin.Form.DropdownListControl.add(): - - Add a string to the vector - - -ida_kernwin.Form.DropdownListControl.addressof(): - - Returns the address (as number) of the qstring at the given index - - -ida_kernwin.Form.DropdownListControl.assign(): - - Copies the contents of 'other' to 'self' - - -ida_kernwin.Form.DropdownListControl.clear(): - - Clears all strings from the vector. - @param qclear: Just reset the size but do not actually free the memory - - -ida_kernwin.Form.DropdownListControl.copy(): - - Returns a new copy of this class - - -ida_kernwin.Form.DropdownListControl.from_list(): - - Populates the vector from a Python string list - - -ida_kernwin.Form.DropdownListControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.DropdownListControl.insert(): - - Insert a string into the vector - - -ida_kernwin.Form.DropdownListControl.remove(): - - Removes a string from the vector - - -ida_kernwin.Form.DropdownListControl.set_items(): - - Sets the dropdown list items - - -class ida_kernwin.Form.EmbeddedChooserControl(): - - Embedded chooser control. - This control links to a Chooser2 control created with the 'embedded=True' - - -ida_kernwin.Form.EmbeddedChooserControl.free(): - - Frees the embedded chooser data - - -ida_kernwin.Form.EmbeddedChooserControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.EnableField(): - - Enable or disable an input field - @return: False - no such control - - -ida_kernwin.Form.Execute(): - - Displays a modal dialog containing the compiled form. - @return: 1 - ok ; 0 - cancel - - -class ida_kernwin.Form.FileInput(): - - File Open/Save input control - - -ida_kernwin.Form.FileInput.free(): - - Free the control - - -ida_kernwin.Form.FileInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.FindControlById(): - - Finds a control instance given its id - - -class ida_kernwin.Form.FormChangeCb(): - - Form change handler. - This can be thought of like a dialog procedure. - Everytime a form action occurs, this handler will be called along with the control id. - The programmer can then call various form actions accordingly: - - EnableField - - ShowField - - MoveField - - GetFieldValue - - etc... - - Special control IDs: -1 (The form is initialized) and -2 (Ok has been clicked) - - - -ida_kernwin.Form.FormChangeCb.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.FormChangeCb.is_input_field(): - - Return True if this field acts as an input - - -ida_kernwin.Form.Free(): - - Frees all resources associated with a compiled form. - Make sure you call this function when you finish using the form. - - -ida_kernwin.Form.GetControlValue(): - - Returns the control's value depending on its type - @param ctrl: Form control instance - @return: - - color button, radio controls: integer - - file/dir input, string input and string label: string - - embedded chooser control (0-based indices of selected items): integer list - - for multilinetext control: textctrl_info_t - - dropdown list controls: string (when editable) or index (when readonly) - - None: on failure - - -ida_kernwin.Form.GetFocusedField(): - - Get currently focused input field. - @return: None if no field is selected otherwise the control ID - - -class ida_kernwin.Form.GroupControl(): - - Base class for group controls - - -ida_kernwin.Form.GroupControl.free(): - - Free the control - - -ida_kernwin.Form.GroupControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.GroupControl.is_input_field(): - - Return True if this field acts as an input - - -class ida_kernwin.Form.GroupItemControl(): - - Base class for group control items - - -ida_kernwin.Form.GroupItemControl.free(): - - Free the control - - -ida_kernwin.Form.GroupItemControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.InputControl(): - - Generic form input control. - It could be numeric control, string control, directory/file browsing, etc... - - -ida_kernwin.Form.InputControl.free(): - - Free the control - - -ida_kernwin.Form.InputControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.LabelControl(): - - Base class for static label control - - -ida_kernwin.Form.LabelControl.free(): - - Free the control - - -ida_kernwin.Form.LabelControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.LabelControl.is_input_field(): - - Return True if this field acts as an input - - -ida_kernwin.Form.MoveField(): - - Move/resize an input field - - @return: False - no such fiel - - -class ida_kernwin.Form.MultiLineTextControl(): - - Multi line text control. - This class inherits from textctrl_info_t. Thus the attributes are also inherited - This control allows manipulating a multilinetext control - - -ida_kernwin.Form.MultiLineTextControl._free(): - - Explicitly delete the link (only if not static) - - -ida_kernwin.Form.MultiLineTextControl.assign(): - - Copies the contents of 'other' to 'self' - - -ida_kernwin.Form.MultiLineTextControl.copy(): - - Returns a new copy of this class - - -ida_kernwin.Form.MultiLineTextControl.flags: - - Returns the flags value - - -ida_kernwin.Form.MultiLineTextControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.MultiLineTextControl.tabsize: - - Returns the tabsize value - - -ida_kernwin.Form.MultiLineTextControl.text: - - Sets the text value - - -ida_kernwin.Form.MultiLineTextControl.value: - - Sets the text value - - -class ida_kernwin.Form.NumericArgument(): - - Argument representing various integer arguments (ushort, uint32, uint64, etc...) - @param tp: One of Form.FT_XXX - - -class ida_kernwin.Form.NumericInput(): - - A composite class serving as a base numeric input control class - - -ida_kernwin.Form.NumericInput.free(): - - Free the control - - -ida_kernwin.Form.NumericInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.NumericLabel(): - - Numeric label control - - -ida_kernwin.Form.NumericLabel.free(): - - Free the control - - -ida_kernwin.Form.NumericLabel.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.NumericLabel.is_input_field(): - - Return True if this field acts as an input - - -ida_kernwin.Form.Open(): - - Opens a widget containing the compiled form. - - -class ida_kernwin.Form.RadGroupControl(): - - Radiobox group control class. - It holds a set of radiobox controls - - -ida_kernwin.Form.RadGroupControl.free(): - - Free the control - - -ida_kernwin.Form.RadGroupControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.RadGroupControl.is_input_field(): - - Return True if this field acts as an input - - -class ida_kernwin.Form.RadGroupItemControl(): - - Radiobox group item control - - -ida_kernwin.Form.RadGroupItemControl.free(): - - Free the control - - -ida_kernwin.Form.RadGroupItemControl.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.RefreshField(): - - Refresh a field - @return: False - no such control - - -ida_kernwin.Form.SetControlValue(): - - Set the control's value depending on its type - @param ctrl: Form control instance - @param value: - - embedded chooser: a 0-base indices list to select embedded chooser items - - multilinetext: a textctrl_info_t - - dropdown list: an integer designating the selection index if readonly - a string designating the edit control value if not readonly - @return: Boolean true on success - - -ida_kernwin.Form.SetFocusedField(): - - Set currently focused input field - @return: False - no such control - - -ida_kernwin.Form.ShowField(): - - Show or hide an input field - @return: False - no such control - - -class ida_kernwin.Form.StringArgument(): - - Argument representing a character buffer - - -class ida_kernwin.Form.StringInput(): - - Base string input control class. - This class also constructs a StringArgument - - -ida_kernwin.Form.StringInput.free(): - - Free the control - - -ida_kernwin.Form.StringInput.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -class ida_kernwin.Form.StringLabel(): - - String label control - - -ida_kernwin.Form.StringLabel.free(): - - Free the control - - -ida_kernwin.Form.StringLabel.get_arg(): - - Control returns the parameter to be pushed on the stack - (Of ask_form()) - - -ida_kernwin.Form.StringLabel.is_input_field(): - - Return True if this field acts as an input - - -ida_kernwin.Form.fieldtype_to_ctype(): - - Factory method returning a ctype class corresponding to the field type string - - -class ida_kernwin.IDAViewWrapper(): - - Deprecated. Use View_Hooks instead. - - Because the lifecycle of an IDAView is not trivial to track (e.g., a user - might close, then re-open the same disassembly view), this wrapper doesn't - bring anything superior to the View_Hooks: quite the contrary, as the - latter is much more generic (and better maps IDA's internal model.) - - -ida_kernwin.IDAViewWrapper.CreateGroups(): - - Send a request to modify the graph by creating a - (set of) group(s), and perform an animation. - - Each object in the 'groups_infos' list must be of the format: - { - "nodes" : [, , , ...] # The list of nodes to group - "text" : # The synthetic text for that group - } - - @param groups_infos: A list of objects that describe those groups. - @return: A [, , ...] list of group nodes, or None (failure). - - -ida_kernwin.IDAViewWrapper.DelNodesInfos(): - - Delete the properties for the given node(s). - - @param nodes: A list of node IDs - - -ida_kernwin.IDAViewWrapper.DeleteGroups(): - - Send a request to delete the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param new_current: A node to focus on after the groups have been deleted - @return: True on success, False otherwise. - - -ida_kernwin.IDAViewWrapper.GetNodeInfo(): - - Get the properties for the given node. - - @param node: The index of the node. - @return: A tuple (bg_color, frame_color, ea, text), or None. - - -ida_kernwin.IDAViewWrapper.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_kernwin.IDAViewWrapper.Refresh(): - - Refreshes the view. This causes the OnRefresh() to be called - - -ida_kernwin.IDAViewWrapper.SetCurrentRendererType(): - - Set the current view's renderer. - - @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. - - -ida_kernwin.IDAViewWrapper.SetGroupsVisibility(): - - Send a request to expand/collapse the specified groups in the graph, - and perform an animation. - - @param groups: A list of group node numbers. - @param expand: True to expand the group, False otherwise. - @param new_current: A node to focus on after the groups have been expanded/collapsed. - @return: True on success, False otherwise. - - -ida_kernwin.IDAViewWrapper.SetNodeInfo(): - - Set the properties for the given node. - - Example usage (set second nodes's bg color to red): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff0000 - inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) - - @param node_index: The node index. - @param node_info: An idaapi.node_info_t instance. - @param flags: An OR'ed value of NIF_* values. - - -ida_kernwin.IDAViewWrapper.SetNodesInfos(): - - Set the properties for the given nodes. - - Example usage (set first three nodes's bg color to purple): - inst = ... - p = idaapi.node_info_t() - p.bg_color = 0x00ff00ff - inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) - - @param values: A dictionary of 'int -> node_info_t' objects. - - -ida_kernwin.IDAViewWrapper.hook(): - - hook(self) -> bool - - -ida_kernwin.IDAViewWrapper.unhook(): - - unhook(self) -> bool - - -ida_kernwin.IDAViewWrapper.view_created(): - - view_created(self, view) - - -class ida_kernwin.PluginForm(): - - PluginForm class. - - This form can be used to host additional controls. Please check the PyQt example. - - -ida_kernwin.PluginForm.Close(): - - Closes the form. - - @param options: Close options (WCLS_SAVE, WCLS_NO_CONTEXT, ...) - - @return: None - - -ida_kernwin.PluginForm.FormToPyQtWidget(): - - 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 - - -ida_kernwin.PluginForm.FormToPySideWidget(): - - 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 - - -ida_kernwin.PluginForm.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_kernwin.PluginForm.OnClose(): - - Called when the plugin form is closed - - @return: None - - -ida_kernwin.PluginForm.OnCreate(): - - This event is called when the plugin form is created. - The programmer should populate the form when this event is triggered. - - @return: None - - -ida_kernwin.PluginForm.QtWidgetToTWidget(): - - 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 - - -ida_kernwin.PluginForm.Show(): - - Creates the form if not was not created or brings to front if it was already created - - @param caption: The form caption - @param options: One of PluginForm.WOPN_ constants - - -ida_kernwin.PluginForm.TWidgetToPyQtWidget(): - - 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 - - -ida_kernwin.PluginForm.TWidgetToPySideWidget(): - - 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 - - -ida_kernwin.TWidget__from_ptrval__(): - - TWidget__from_ptrval__(ptrval) -> TWidget * - - -class ida_kernwin.UI_Hooks(): - - Proxy of C++ UI_Hooks class - - -ida_kernwin.UI_Hooks.create_desktop_widget(): - - create_desktop_widget(self, title, cfg) -> PyObject * - - -ida_kernwin.UI_Hooks.current_widget_changed(): - - current_widget_changed(self, widget, prev_widget) - - -ida_kernwin.UI_Hooks.database_inited(): - - database_inited(self, is_new_database, idc_script) - - -ida_kernwin.UI_Hooks.debugger_menu_change(): - - debugger_menu_change(self, enable) - - -ida_kernwin.UI_Hooks.finish_populating_widget_popup(): - - finish_populating_widget_popup(self, widget, popup_handle, ctx=None) - - - The UI is about to be done populating the TWidget's popup menu. - Now is a good time to call idaapi.attach_action_to_popup() - - @param widget: The widget - @param popup: The popup menu. - @return: Ignored - - -ida_kernwin.UI_Hooks.get_chooser_item_attrs(): - - get_chooser_item_attrs(self, chooser, n, attrs) - - -ida_kernwin.UI_Hooks.get_custom_viewer_hint(): - - get_custom_viewer_hint(self, viewer, place) -> PyObject * - - -ida_kernwin.UI_Hooks.get_ea_hint(): - - get_ea_hint(self, ea) -> PyObject * - - - The UI wants to display a simple hint for an address in the navigation band - - @param ea: The address - @return: String with the hint or None - - -ida_kernwin.UI_Hooks.get_item_hint(): - - get_item_hint(self, ea, max_lines) -> PyObject * - - -ida_kernwin.UI_Hooks.get_widget_config(): - - get_widget_config(self, widget, cfg) -> PyObject * - - -ida_kernwin.UI_Hooks.hook(): - - hook(self) -> bool - - - Creates an UI hook - - @return: Boolean true on success - - -ida_kernwin.UI_Hooks.idcstart(): - - idcstart(self) - - -ida_kernwin.UI_Hooks.idcstop(): - - idcstop(self) - - -ida_kernwin.UI_Hooks.plugin_loaded(): - - plugin_loaded(self, plugin_info) - - -ida_kernwin.UI_Hooks.plugin_unloading(): - - plugin_unloading(self, plugin_info) - - -ida_kernwin.UI_Hooks.populating_widget_popup(): - - populating_widget_popup(self, widget, popup_handle, ctx=None) - - - The UI is populating the TWidget's popup menu. - Now is a good time to call idaapi.attach_action_to_popup() - - @param widget: The widget - @param popup: The popup menu. - @return: Ignored - - -ida_kernwin.UI_Hooks.postprocess_action(): - - postprocess_action(self) - - - An ida ui action has been handled - - @return: Ignored - - -ida_kernwin.UI_Hooks.preprocess_action(): - - preprocess_action(self, name) - - - IDA ui is about to handle a user action - - @param name: ui action name - (these names can be looked up in ida[tg]ui.cfg) - @return: 0-ok, nonzero - a plugin has handled the action - - -ida_kernwin.UI_Hooks.range(): - - range(self) - - -ida_kernwin.UI_Hooks.ready_to_run(): - - ready_to_run(self) - - -ida_kernwin.UI_Hooks.resume(): - - resume(self) - - -ida_kernwin.UI_Hooks.saved(): - - saved(self) - - - The kernel has saved the database. - - @return: Ignored - - -ida_kernwin.UI_Hooks.saving(): - - saving(self) - - - The kernel is saving the database. - - @return: Ignored - - -ida_kernwin.UI_Hooks.screen_ea_changed(): - - screen_ea_changed(self, ea, prev_ea) - - -ida_kernwin.UI_Hooks.set_widget_config(): - - set_widget_config(self, widget, cfg) - - -ida_kernwin.UI_Hooks.suspend(): - - suspend(self) - - -ida_kernwin.UI_Hooks.term(): - - term(self) - - - IDA is terminated and the database is already closed. - The UI may close its windows in this callback. - - -ida_kernwin.UI_Hooks.unhook(): - - unhook(self) -> bool - - - Removes the UI hook - @return: Boolean true on success - - -ida_kernwin.UI_Hooks.updated_actions(): - - updated_actions(self) - - - The UI is done updating actions. - - @return: Ignored - - -ida_kernwin.UI_Hooks.updating_actions(): - - updating_actions(self, ctx) - - - The UI is about to batch-update some actions. - - @param ctx: The action_update_ctx_t instance - @return: Ignored - - -ida_kernwin.UI_Hooks.widget_closing(): - - widget_closing(self, widget) - - -ida_kernwin.UI_Hooks.widget_invisible(): - - widget_invisible(self, widget) - - -ida_kernwin.UI_Hooks.widget_visible(): - - widget_visible(self, widget) - - -class ida_kernwin.View_Hooks(): - - Proxy of C++ View_Hooks class - - -ida_kernwin.View_Hooks.hook(): - - hook(self) -> bool - - -ida_kernwin.View_Hooks.unhook(): - - unhook(self) -> bool - - -ida_kernwin.View_Hooks.view_activated(): - - view_activated(self, view) - - -ida_kernwin.View_Hooks.view_click(): - - view_click(self, view, event) - - -ida_kernwin.View_Hooks.view_close(): - - view_close(self, view) - - -ida_kernwin.View_Hooks.view_created(): - - view_created(self, view) - - -ida_kernwin.View_Hooks.view_curpos(): - - view_curpos(self, view) - - -ida_kernwin.View_Hooks.view_dblclick(): - - view_dblclick(self, view, event) - - -ida_kernwin.View_Hooks.view_deactivated(): - - view_deactivated(self, view) - - -ida_kernwin.View_Hooks.view_keydown(): - - view_keydown(self, view, key, state) - - -ida_kernwin.View_Hooks.view_loc_changed(): - - view_loc_changed(self, view, now, was) - - -ida_kernwin.View_Hooks.view_mouse_moved(): - - view_mouse_moved(self, view, event) - - -ida_kernwin.View_Hooks.view_mouse_over(): - - view_mouse_over(self, view, event) - - -ida_kernwin.View_Hooks.view_switched(): - - view_switched(self, view, rt) - - -class ida_kernwin.action_ctx_base_t(): - - Proxy of C++ action_ctx_base_t class - - -ida_kernwin.action_ctx_base_t.action: - action_ctx_base_t_action_get(self) -> char const * - -ida_kernwin.action_ctx_base_t.chooser_selection: - action_ctx_base_t_chooser_selection_get(self) -> sizevec_t * - -ida_kernwin.action_ctx_base_t.cur_ea: - action_ctx_base_t_cur_ea_get(self) -> ea_t - -ida_kernwin.action_ctx_base_t.cur_enum: - action_ctx_base_t_cur_enum_get(self) -> enum_t - -ida_kernwin.action_ctx_base_t.cur_extracted_ea: - action_ctx_base_t_cur_value_get(self) -> uval_t - -ida_kernwin.action_ctx_base_t.cur_fchunk: - action_ctx_base_t_cur_fchunk_get(self) -> func_t * - -ida_kernwin.action_ctx_base_t.cur_flags: - action_ctx_base_t_cur_flags_get(self) -> uint32 - -ida_kernwin.action_ctx_base_t.cur_func: - action_ctx_base_t_cur_func_get(self) -> func_t * - -ida_kernwin.action_ctx_base_t.cur_seg: - action_ctx_base_t_cur_seg_get(self) -> segment_t * - -ida_kernwin.action_ctx_base_t.cur_strmem: - action_ctx_base_t_cur_strmem_get(self) -> member_t * - -ida_kernwin.action_ctx_base_t.cur_struc: - action_ctx_base_t_cur_struc_get(self) -> struc_t * - -ida_kernwin.action_ctx_base_t.cur_value: - action_ctx_base_t_cur_value_get(self) -> uval_t - -ida_kernwin.action_ctx_base_t.focus: - action_ctx_base_t_focus_get(self) -> TWidget * - -ida_kernwin.action_ctx_base_t.form: - - _get_form(self) -> TWidget * - - -ida_kernwin.action_ctx_base_t.form_title: - - _get_form_title(self) -> qstring - - -ida_kernwin.action_ctx_base_t.form_type: - - _get_form_type(self) -> twidget_type_t - - -ida_kernwin.action_ctx_base_t.has_flag(): - - has_flag(self, flag) -> bool - - -ida_kernwin.action_ctx_base_t.regname: - action_ctx_base_t_regname_get(self) -> char const * - -ida_kernwin.action_ctx_base_t.reserved: - action_ctx_base_t_reserved_get(self) -> void * - -ida_kernwin.action_ctx_base_t.reset(): - - reset(self) - - -ida_kernwin.action_ctx_base_t.widget: - action_ctx_base_t_widget_get(self) -> TWidget * - -ida_kernwin.action_ctx_base_t.widget_title: - action_ctx_base_t_widget_title_get(self) -> qstring * - -ida_kernwin.action_ctx_base_t.widget_type: - action_ctx_base_t_widget_type_get(self) -> twidget_type_t - -class ida_kernwin.action_desc_t(): - - Proxy of C++ action_desc_t class - - -ida_kernwin.action_desc_t.cb: - action_desc_t_cb_get(self) -> int - -ida_kernwin.action_desc_t.flags: - action_desc_t_flags_get(self) -> int - -ida_kernwin.action_desc_t.icon: - action_desc_t_icon_get(self) -> int - -ida_kernwin.action_desc_t.label: - action_desc_t_label_get(self) -> char const * - -ida_kernwin.action_desc_t.name: - action_desc_t_name_get(self) -> char const * - -ida_kernwin.action_desc_t.owner: - action_desc_t_owner_get(self) -> plugin_t const * - -ida_kernwin.action_desc_t.shortcut: - action_desc_t_shortcut_get(self) -> char const * - -ida_kernwin.action_desc_t.tooltip: - action_desc_t_tooltip_get(self) -> char const * - -ida_kernwin.activate_widget(): - - activate_widget(widget, take_focus) - - - Activate widget (only gui version) ( 'ui_activate_widget' ). - - @param widget: existing widget to display (C++: TWidget *) - @param take_focus: give focus to given widget (C++: bool) - - -ida_kernwin.add_hotkey(): - - add_hotkey(hotkey, pyfunc) -> PyObject * - - - Associates a function call with a hotkey. - Callable pyfunc will be called each time the hotkey is pressed - - @param hotkey: The hotkey - @param pyfunc: Callable - - @return: Context object on success or None on failure. - - -ida_kernwin.add_idc_hotkey(): - - add_idc_hotkey(hotkey, idcfunc) -> int - - - Add hotkey for IDC function ( 'ui_add_idckey' ). - - @param hotkey: hotkey name (C++: const char *) - @param idcfunc: IDC function name (C++: const char *) - @return: IDC hotkey error codes - - -ida_kernwin.add_spaces(): - - add_spaces(s, len) -> PyObject * - - - Add space characters to the colored string so that its length will be - at least 'len' characters. Don't trim the string if it is longer than - 'len'. - - @param len: the desired length of the string (C++: ssize_t) - @return: pointer to the end of input string - - -ida_kernwin.addon_count(): - - addon_count() -> int - - - Get number of installed addons. - - -class ida_kernwin.addon_info_t(): - - Proxy of C++ addon_info_t class - - -ida_kernwin.addon_info_t.cb: - addon_info_t_cb_get(self) -> size_t - -ida_kernwin.addon_info_t.custom_data: - addon_info_t_custom_data_get(self) -> void const * - -ida_kernwin.addon_info_t.custom_size: - addon_info_t_custom_size_get(self) -> size_t - -ida_kernwin.addon_info_t.freeform: - addon_info_t_freeform_get(self) -> char const * - -ida_kernwin.addon_info_t.id: - addon_info_t_id_get(self) -> char const * - -ida_kernwin.addon_info_t.name: - addon_info_t_name_get(self) -> char const * - -ida_kernwin.addon_info_t.producer: - addon_info_t_producer_get(self) -> char const * - -ida_kernwin.addon_info_t.url: - addon_info_t_url_get(self) -> char const * - -ida_kernwin.addon_info_t.version: - addon_info_t_version_get(self) -> char const * - -ida_kernwin.analyzer_options(): - - analyzer_options() - - - Allow the user to set analyzer options. (show a dialog box) ( - 'ui_analyzer_options' ) - - -ida_kernwin.ask_buttons(): - - ask_buttons(Yes, No, Cancel, deflt, format) -> int - - - Display a dialog box and get choice from maximum three possibilities ( - 'ui_ask_buttons' ).for all buttons:use "" or NULL to take the default - name for the button.use 'format' to hide the cancel button - - @param Yes: text for the first button (C++: const char *) - @param No: text for the second button (C++: const char *) - @param Cancel: text for the third button (C++: const char *) - @param deflt: default choice: one of Button IDs (C++: int) - @param format: printf-style format string for question. It may have - some prefixes, see below. (C++: const char *) - @return: one of Button IDs specifying the selected button (Esc key - returns Cancel/3rd button value) - - -ida_kernwin.ask_file(): - - ask_file(for_saving, defval, format) -> char * - - -ida_kernwin.ask_for_feedback(): - - ask_for_feedback(format) - - - Show a message box asking to send the input file tosupport@hex- - rays.com. - - @param format: the reason why the input file is bad (C++: const char - *) - - -ida_kernwin.ask_str(): - - ask_str(defval, hist, prompt) -> PyObject * - - - Asks for a long text - - @param hist: history id - @param defval: The default value - @param prompt: The prompt value - @return: None or the entered string - - -ida_kernwin.ask_text(): - - ask_text(max_size, defval, prompt) -> PyObject * - - - Asks for a long text - - @param max_size: Maximum text length, 0 for unlimited - @param defval: The default value - @param prompt: The prompt value - @return: None or the entered string - - -ida_kernwin.ask_yn(): - - ask_yn(deflt, format) -> int - - - Display a dialog box and get choice from "Yes", "No", "Cancel". - - @param deflt: default choice: one of Button IDs (C++: int) - @param format: The question in printf() style format (C++: const char - *) - @return: the selected button (one of Button IDs ). Esc key returns - ASKBTN_CANCEL . - - -ida_kernwin.attach_action_to_menu(): - - attach_action_to_menu(menupath, name, flags) -> bool - - - Attach a previously-registered action to the menu ( - 'ui_attach_action_to_menu' ).You should not change top level menu, or - the Edit,Plugins submenus If you want to modify the debugger menu, do - it at the ui_debugger_menu_change event (ida might destroy your menu - item if you do it elsewhere). - - @param menupath: path to the menu item after or before which the - insertion will take place. Example: - Debug/StartProcess Whitespace, punctuation are - ignored. It is allowed to specify only the prefix - of the menu item. Comparison is case insensitive. - menupath may start with the following prefixes: [S] - - modify the main menu of the structure window [E] - - modify the main menu of the enum window (C++: const - char *) - @param name: the action name (C++: const char *) - @param flags: a combination of Set menu flags , to determine menu - item position (C++: int) - @return: success - - -ida_kernwin.attach_action_to_popup(): - - attach_action_to_popup(widget, popup_handle, name, popuppath=None, flags=0) -> bool - - - Insert a previously-registered action into the widget's popup menu ( - 'ui_attach_action_to_popup' ). This function has two "modes": 'single- - shot', and 'permanent'. - - @param widget: target widget (C++: TWidget *) - @param popup_handle: target popup menu if non-NULL, the action is - added to this popup menu invocation (i.e., - 'single-shot') if NULL, the action is added to - a list of actions that should always be present - in context menus for this widget (i.e., - 'permanent'.) (C++: TPopupMenu *) - @param name: action name (C++: const char *) - @param popuppath: can be NULL (C++: const char *) - @param flags: a combination of SETMENU_ flags (see Set menu flags ) - (C++: int) - @return: success - - -ida_kernwin.attach_action_to_toolbar(): - - attach_action_to_toolbar(toolbar_name, name) -> bool - - - Attach an action to an existing toolbar ( - 'ui_attach_action_to_toolbar' ). - - @param toolbar_name: the name of the toolbar (C++: const char *) - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.attach_dynamic_action_to_popup(): - - attach_dynamic_action_to_popup(widget, popup_handle, desc, popuppath=None, flags=0) -> bool - - - Create & insert an action into the widget's popup menu ( - 'ui_attach_dynamic_action_to_popup' ). 'action_desc_t::handler' for - 'desc' must be instantiated using 'new', as it will be 'delete'd when - the action is unregistered. - - @param widget: target widget (C++: TWidget *) - @param popup_handle: target popup (C++: TPopupMenu *) - @param desc: created with DYNACTION_DESC_LITERAL (C++: const - action_desc_t &) - @param popuppath: can be NULL (C++: const char *) - @param flags: a combination of SETMENU_ constants (see Set menu flags - ) (C++: int) - @return: success - - -ida_kernwin.banner(): - - banner(wait) -> bool - - - Show a banner dialog box ( 'ui_banner' ). - - @param wait: time to wait before closing (C++: int) - - -ida_kernwin.beep(): - - beep(beep_type=beep_default) - - - Issue a beeping sound ( 'ui_beep' ). - - @param beep_type: beep_t (C++: beep_t) - - -ida_kernwin.call_nav_colorizer(): - - call_nav_colorizer(dict, ea, nbytes) -> uint32 - - - To be used with the IDA-provided colorizer, that is - returned as result of the first call to set_nav_colorizer(). - - -ida_kernwin.cancel_exec_request(): - - cancel_exec_request(req_id) -> bool - - - Try to cancel an asynchronous exec request ( 'ui_cancel_exec_request' - ). - - @param req_id: request id (C++: int) - - -ida_kernwin.choose_activate(): - - choose_activate(self) - - -ida_kernwin.choose_choose(): - - choose_choose(self) -> int - - -ida_kernwin.choose_close(): - - choose_close(self) - - -ida_kernwin.choose_create_embedded_chobj(): - - choose_create_embedded_chobj(self) -> uint64 - - -ida_kernwin.choose_entry(): - - choose_entry(title) -> ea_t - - - Choose an entry point ( 'ui_choose' , 'chtype_entry' ). - - @param title: chooser title (C++: const char *) - @return: ea of selected entry point, BADADDR if none selected - - -ida_kernwin.choose_enum(): - - choose_enum(title, default_id) -> enum_t - - - Choose an enum ( 'ui_choose' , 'chtype_enum' ). - - @param title: chooser title (C++: const char *) - @param default_id: id of enum to select by default (C++: enum_t) - @return: enum id of selected enum, BADNODE if none selected - - -ida_kernwin.choose_enum_by_value(): - - choose_enum_by_value(title, default_id, value, nbytes) -> enum_t - - - Choose an enum, restricted by value & size ( 'ui_choose' , - 'chtype_enum_by_value_and_size' ). If the given value cannot be found - initially, this function will ask if the user would like to import a - standard enum. - - @param title: chooser title (C++: const char *) - @param default_id: id of enum to select by default (C++: enum_t) - @param value: value to search for (C++: uval_t) - @param nbytes: size of value (C++: int) - @return: enum id of selected (or imported) enum, BADNODE if none was - found - - -ida_kernwin.choose_find(): - - choose_find(title) -> PyObject * - - -ida_kernwin.choose_func(): - - choose_func(title, default_ea) -> func_t * - - - Choose a function ( 'ui_choose' , 'chtype_func' ). - - @param title: chooser title (C++: const char *) - @param default_ea: ea of function to select by default (C++: ea_t) - @return: pointer to function that was selected, NULL if none selected - - -ida_kernwin.choose_get_widget(): - - choose_get_widget(self) -> TWidget * - - -ida_kernwin.choose_idasgn(): - - choose_idasgn() -> PyObject * - - - Opens the signature chooser - - @return: None or the selected signature name - - -ida_kernwin.choose_name(): - - choose_name(title) -> ea_t - - - Choose a name ( 'ui_choose' , 'chtype_name' ). - - @param title: chooser title (C++: const char *) - @return: ea of selected name, BADADDR if none selected - - -ida_kernwin.choose_refresh(): - - choose_refresh(self) - - -ida_kernwin.choose_segm(): - - choose_segm(title, default_ea) -> segment_t * - - - Choose a segment ( 'ui_choose' , 'chtype_segm' ). - - @param title: chooser title (C++: const char *) - @param default_ea: ea of segment to select by default (C++: ea_t) - @return: pointer to segment that was selected, NULL if none selected - - -ida_kernwin.choose_srcp(): - - choose_srcp(title) -> sreg_range_t * - - - Choose a segment register change point ( 'ui_choose' , 'chtype_srcp' - ). - - @param title: chooser title (C++: const char *) - @return: pointer to segment register range of selected change point, - NULL if none selected - - -ida_kernwin.choose_stkvar_xref(): - - choose_stkvar_xref(pfn, mptr) -> ea_t - - - Choose an xref to a stack variable ( 'ui_choose' , 'chtype_name' ). - - @param pfn: function (C++: func_t *) - @param mptr: variable (C++: member_t *) - @return: ea of the selected xref, BADADDR if none selected - - -ida_kernwin.choose_struc(): - - choose_struc(title) -> struc_t * - - - Choose a structure ( 'ui_choose' , 'chtype_segm' ). - - @param title: chooser title; (C++: const char *) - @return: pointer to structure that was selected, NULL if none selected - - -ida_kernwin.choose_til(): - - choose_til() -> bool - - - Choose a type library ( 'ui_choose' , 'chtype_idatil' ). - - -ida_kernwin.choose_xref(): - - choose_xref(to) -> ea_t - - - Choose an xref to an address ( 'ui_choose' , 'chtype_xref' ). - - @param to: referenced address (C++: ea_t) - @return: ea of selected xref, BADADDR if none selected - - -class ida_kernwin.chooser_item_attrs_t(): - - Proxy of C++ chooser_item_attrs_t class - - -ida_kernwin.chooser_item_attrs_t.color: - chooser_item_attrs_t_color_get(self) -> bgcolor_t - -ida_kernwin.chooser_item_attrs_t.flags: - chooser_item_attrs_t_flags_get(self) -> int - -ida_kernwin.chooser_item_attrs_t.reset(): - - reset(self) - - -ida_kernwin.clear_refresh_request(): - - clear_refresh_request(mask) - - -class ida_kernwin.cli_t(): - - cli_t wrapper class. - - This class allows you to implement your own command line interface handlers. - - -ida_kernwin.cli_t.register(): - - Registers the CLI. - - @param flags: Feature bits. No bits are defined yet, must be 0 - @param sname: Short name (displayed on the button) - @param lname: Long name (displayed in the menu) - @param hint: Hint for the input line - - @return Boolean: True-Success, False-Failed - - -ida_kernwin.cli_t.unregister(): - - Unregisters the CLI (if it was registered) - - -ida_kernwin.close_chooser(): - - close_chooser(title) -> bool - - - Close a non-modal chooser ( 'ui_close_chooser' ). - - @param title: window title of chooser to close (C++: const char *) - @return: success - - -ida_kernwin.close_widget(): - - close_widget(widget, options) - - - Close widget ( 'ui_close_widget' , only gui version). - - @param widget: pointer to the widget to close (C++: TWidget *) - @param options: Form close flags (C++: int) - - -ida_kernwin.clr_cancelled(): - - clr_cancelled() - - - Clear "Cancelled" flag ( 'ui_clr_cancelled' ) - - -ida_kernwin.create_code_viewer(): - - create_code_viewer(custview, flags=0, parent=None) -> TWidget * - - - Create a code viewer ( 'ui_create_code_viewer' ). A code viewer - contains on the left side a widget representing the line numbers, and - on the right side, the child widget passed as parameter. It will - inherit its title from the child widget. - - @param custview: the custom view to be added (C++: TWidget *) - @param flags: Code viewer flags (C++: int) - @param parent: widget to contain the new code viewer (C++: TWidget *) - - -ida_kernwin.create_empty_widget(): - - create_empty_widget(title, icon=-1) -> TWidget * - - - Create an empty widget, serving as a container for custom user widgets - - @param title (C++: const char *) - @param icon (C++: int) - - -ida_kernwin.create_menu(): - - create_menu(name, label, menupath=None) -> bool - - - Create a menu with the given name, label and optional position, either - in the menubar, or as a submenu. If 'menupath' is non-NULL, it - provides information about where the menu should be positioned. First, - IDA will try and resolve the corresponding menu by its name. If such - an existing menu is found and is present in the menubar, then the new - menu will be inserted in the menubar before it. Otherwise, IDA will - try to resolve 'menupath' as it would for 'attach_action_to_menu()' - and, if found, add the new menu like so: - - // The new 'My menu' submenu will appear in the 'Comments' submenu - // before the 'Enter comment..." command - create_menu("(...)", "My menu", "Edit/Comments/Enter comment..."); - - or - - // The new 'My menu' submenu will appear at the end of the - // 'Comments' submenu. - create_menu("(...)", "My menu", "Edit/Comments/"); - - If the above fails, the new menu will be appended to the menubar. - - @param name: name of menu (must be unique) (C++: const char *) - @param label: label of menu (C++: const char *) - @param menupath: where should the menu be inserted (C++: const char *) - @return: success - - -ida_kernwin.create_toolbar(): - - create_toolbar(name, label, before=None, flags=0) -> bool - - - Create a toolbar with the given name, label and optional position - - @param name: name of toolbar (must be unique) (C++: const char *) - @param label: label of toolbar (C++: const char *) - @param before: if non-NULL, the toolbar before which the new toolbar - will be inserted (C++: const char *) - @param flags: a combination of create toolbar flags , to determine - toolbar position (C++: int) - @return: success - - -ida_kernwin.custom_viewer_jump(): - - custom_viewer_jump(v, loc, flags) -> bool - - - Append 'loc' to the viewer's history, and cause the viewer to display - it. - - @param v: (TWidget *) (C++: TWidget *) - @param loc: (const lochist_entry_t &) (C++: const lochist_entry_t - &) - @param flags: (uint32) or'ed combination of CVNF_* values (C++: - uint32) - @return: success - - -ida_kernwin.del_hotkey(): - - del_hotkey(pyctx) -> bool - - - Deletes a previously registered function hotkey - - @param ctx: Hotkey context previously returned by add_hotkey() - - @return: Boolean. - - -ida_kernwin.del_idc_hotkey(): - - del_idc_hotkey(hotkey) -> bool - - - Delete IDC function hotkey ( 'ui_del_idckey' ). - - @param hotkey: hotkey name (C++: const char *) - - -ida_kernwin.delete_menu(): - - delete_menu(name) -> bool - - - Delete an existing menu - - @param name: name of menu (C++: const char *) - @return: success - - -ida_kernwin.delete_toolbar(): - - delete_toolbar(name) -> bool - - - Delete an existing toolbar - - @param name: name of toolbar (C++: const char *) - @return: success - - -ida_kernwin.detach_action_from_menu(): - - detach_action_from_menu(menupath, name) -> bool - - - Detach an action from the menu ( 'ui_detach_action_from_menu' ). - - @param menupath: path to the menu item (C++: const char *) - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.detach_action_from_popup(): - - detach_action_from_popup(widget, name) -> bool - - - Remove a previously-registered action, from the list of 'permanent' - context menu actions for this widget ( 'ui_detach_action_from_popup' - ). This only makes sense if the action has been added to 'widget's - list of permanent popup actions by calling attach_action_to_popup in - 'permanent' mode. - - @param widget: target widget (C++: TWidget *) - @param name: action name (C++: const char *) - - -ida_kernwin.detach_action_from_toolbar(): - - detach_action_from_toolbar(toolbar_name, name) -> bool - - - Detach an action from the toolbar ( 'ui_detach_action_from_toolbar' ). - - @param toolbar_name: the name of the toolbar (C++: const char *) - @param name: the action name (C++: const char *) - @return: success - - -class ida_kernwin.disasm_line_t(): - - Proxy of C++ disasm_line_t class - - -ida_kernwin.disasm_line_t.at: - disasm_line_t_at_get(self) -> place_t - -ida_kernwin.disasm_line_t.bg_color: - disasm_line_t_bg_color_get(self) -> bgcolor_t - -ida_kernwin.disasm_line_t.is_default: - disasm_line_t_is_default_get(self) -> bool - -ida_kernwin.disasm_line_t.line: - disasm_line_t_line_get(self) -> qstring * - -ida_kernwin.disasm_line_t.prefix_color: - disasm_line_t_prefix_color_get(self) -> color_t - -class ida_kernwin.disasm_text_t(): - - Proxy of C++ qvector<(disasm_line_t)> class - - -ida_kernwin.disasm_text_t.at(): - - at(self, _idx) -> disasm_line_t - - -ida_kernwin.disasm_text_t.begin(): - - begin(self) -> disasm_line_t - begin(self) -> disasm_line_t - - -ida_kernwin.disasm_text_t.capacity(): - - capacity(self) -> size_t - - -ida_kernwin.disasm_text_t.clear(): - - clear(self) - - -ida_kernwin.disasm_text_t.empty(): - - empty(self) -> bool - - -ida_kernwin.disasm_text_t.end(): - - end(self) -> disasm_line_t - end(self) -> disasm_line_t - - -ida_kernwin.disasm_text_t.erase(): - - erase(self, it) -> disasm_line_t - erase(self, first, last) -> disasm_line_t - - -ida_kernwin.disasm_text_t.extract(): - - extract(self) -> disasm_line_t - - -ida_kernwin.disasm_text_t.grow(): - - grow(self, x=disasm_line_t()) - - -ida_kernwin.disasm_text_t.inject(): - - inject(self, s, len) - - -ida_kernwin.disasm_text_t.insert(): - - insert(self, it, x) -> disasm_line_t - - -ida_kernwin.disasm_text_t.pop_back(): - - pop_back(self) - - -ida_kernwin.disasm_text_t.push_back(): - - push_back(self, x) - push_back(self) -> disasm_line_t - - -ida_kernwin.disasm_text_t.qclear(): - - qclear(self) - - -ida_kernwin.disasm_text_t.reserve(): - - reserve(self, cnt) - - -ida_kernwin.disasm_text_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_kernwin.disasm_text_t.size(): - - size(self) -> size_t - - -ida_kernwin.disasm_text_t.swap(): - - swap(self, r) - - -ida_kernwin.disasm_text_t.truncate(): - - truncate(self) - - -ida_kernwin.display_copyright_warning(): - - display_copyright_warning() -> bool - - - Display copyright warning ( 'ui_copywarn' ). - - @return: yes/no - - -ida_kernwin.display_widget(): - - display_widget(widget, options, dest_ctrl=None) - - - Display a widget, dock it if not done before - - @param widget: widget to display (C++: TWidget *) - @param options: Widget open flags (C++: uint32) - @param dest_ctrl: where to dock: if NULL or invalid then use the - active docker if there is not create a new tab - relative to current active tab (C++: const char *) - - -ida_kernwin.ea2str(): - - ea2str(ea) -> size_t - - - Convert linear address to UTF-8 string. - - - @param ea (C++: ea_t) - - -ida_kernwin.ea_viewer_history_push_and_jump(): - - ea_viewer_history_push_and_jump(v, ea, x, y, lnnum) -> bool - - - Push current location in the history and jump to the given location ( - 'ui_ea_viewer_history_push_and_jump' ). This will jump in the given ea - viewer and also in other synchronized views. - - @param v: ea viewer (C++: TWidget *) - @param ea: jump destination (C++: ea_t) - @param x: coords on screen (C++: int) - @param y: coords on screen (C++: int) - @param lnnum: desired line number of given address (C++: int) - - -ida_kernwin.enable_chooser_item_attrs(): - - enable_chooser_item_attrs(chooser_caption, enable) -> bool - - - Enable item-specific attributes for chooser items ( - 'ui_enable_chooser_item_attrs' ). For example: color list items - differently depending on a criterium.If enabled, the chooser will - generate ui_get_chooser_item_attrsevents that can be intercepted by a - plugin to modify the item attributes.This event is generated only in - the GUI version of IDA.Specifying 'CH_ATTRS' bit at the chooser - creation time has the same effect. - - @param chooser_caption (C++: const char *) - @param enable (C++: bool) - @return: success - - -class ida_kernwin.enumplace_t(): - - Proxy of C++ enumplace_t class - - -ida_kernwin.enumplace_t._print(): - - _print(self, out_buf, ud) - - -ida_kernwin.enumplace_t.adjust(): - - adjust(self, ud) - - -ida_kernwin.enumplace_t.as_enumplace_t(): - - as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.enumplace_t.as_idaplace_t(): - - as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.enumplace_t.as_simpleline_place_t(): - - as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.enumplace_t.as_structplace_t(): - - as_structplace_t(p) -> structplace_t - - -ida_kernwin.enumplace_t.beginning(): - - beginning(self, ud) -> bool - - -ida_kernwin.enumplace_t.bmask: - enumplace_t_bmask_get(self) -> bmask_t - -ida_kernwin.enumplace_t.clone(): - - clone(self) -> place_t - - -ida_kernwin.enumplace_t.compare(): - - compare(self, t2) -> int - - -ida_kernwin.enumplace_t.copyfrom(): - - copyfrom(self, _from) - - -ida_kernwin.enumplace_t.ending(): - - ending(self, ud) -> bool - - -ida_kernwin.enumplace_t.enter(): - - enter(self, arg2) -> place_t - - -ida_kernwin.enumplace_t.generate(): - - generate(self, ud, maxsize) -> PyObject * - - -ida_kernwin.enumplace_t.id(): - - id(self) -> int - - -ida_kernwin.enumplace_t.idx: - enumplace_t_idx_get(self) -> size_t - -ida_kernwin.enumplace_t.leave(): - - leave(self, arg2) - - -ida_kernwin.enumplace_t.lnnum: - place_t_lnnum_get(self) -> int - -ida_kernwin.enumplace_t.makeplace(): - - makeplace(self, ud, x, lnnum) -> place_t - - -ida_kernwin.enumplace_t.name(): - - name(self) -> char const * - - -ida_kernwin.enumplace_t.next(): - - next(self, ud) -> bool - - -ida_kernwin.enumplace_t.prev(): - - prev(self, ud) -> bool - - -ida_kernwin.enumplace_t.rebase(): - - rebase(self, arg2) -> bool - - -ida_kernwin.enumplace_t.serial: - enumplace_t_serial_get(self) -> uchar - -ida_kernwin.enumplace_t.toea(): - - toea(self) -> ea_t - - -ida_kernwin.enumplace_t.touval(): - - touval(self, ud) -> uval_t - - -ida_kernwin.enumplace_t.value: - enumplace_t_value_get(self) -> uval_t - -ida_kernwin.error(): - - error(format) - - - Display a fatal message in a message box and quit IDA - - @param format: message to print - - -ida_kernwin.execute_sync(): - - execute_sync(py_callable, reqf) -> int - - - Executes a function in the context of the main thread. - If the current thread not the main thread, then the call is queued and - executed afterwards. - - @param callable: A python callable object, must return an integer value - @param reqf: one of MFF_ flags - @return: -1 or the return value of the callable - - -ida_kernwin.execute_ui_requests(): - - execute_ui_requests(py_list) -> bool - - - Inserts a list of callables into the UI message processing queue. - When the UI is ready it will call one callable. - A callable can request to be called more than once if it returns True. - - @param callable_list: A list of python callable objects. - @note: A callable should return True if it wants to be called more than once. - @return: Boolean. False if the list contains a non callabale item - - -ida_kernwin.find_widget(): - - find_widget(caption) -> TWidget * - - - Find widget with the specified caption (only gui version) ( - 'ui_find_widget' ). NB: this callback works only with the tabbed - widgets! - - @param caption: title of tab, or window title if widget is not tabbed - (C++: const char *) - @return: pointer to the TWidget, NULL if none is found - - -ida_kernwin.formchgcbfa_close(): - - formchgcbfa_close(p_fa, close_normally) - - -ida_kernwin.formchgcbfa_enable_field(): - - formchgcbfa_enable_field(p_fa, fid, enable) -> bool - - -ida_kernwin.formchgcbfa_get_field_value(): - - formchgcbfa_get_field_value(p_fa, fid, ft, sz) -> PyObject * - - -ida_kernwin.formchgcbfa_get_focused_field(): - - formchgcbfa_get_focused_field(p_fa) -> int - - -ida_kernwin.formchgcbfa_move_field(): - - formchgcbfa_move_field(p_fa, fid, x, y, w, h) -> bool - - -ida_kernwin.formchgcbfa_refresh_field(): - - formchgcbfa_refresh_field(p_fa, fid) - - -ida_kernwin.formchgcbfa_set_field_value(): - - formchgcbfa_set_field_value(p_fa, fid, ft, py_val) -> bool - - -ida_kernwin.formchgcbfa_set_focused_field(): - - formchgcbfa_set_focused_field(p_fa, fid) -> bool - - -ida_kernwin.formchgcbfa_show_field(): - - formchgcbfa_show_field(p_fa, fid, show) -> bool - - -ida_kernwin.free_custom_icon(): - - free_custom_icon(icon_id) - - - Frees an icon loaded with load_custom_icon() - - -ida_kernwin.gen_disasm_text(): - - gen_disasm_text(text, ea1, ea2, truncate_lines) - - - Generate disassembly text for a range. - - @param text: result (C++: text_t &) - @param ea1: start address (C++: ea_t) - @param ea2: end address (C++: ea_t) - @param truncate_lines: (on idainfo::margin ) (C++: bool) - - -ida_kernwin.get_action_checkable(): - - get_action_checkable(name) -> bool - - - Get an action's checkability ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_checked(): - - get_action_checked(name) -> bool - - - Get an action's checked state ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_icon(): - - get_action_icon(name) -> bool - - - Get an action's icon ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_label(): - - get_action_label(name) -> bool - - - Get an action's label ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_shortcut(): - - get_action_shortcut(name) -> bool - - - Get an action's shortcut ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_state(): - - get_action_state(name) -> bool - - - Get an action's state ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_tooltip(): - - get_action_tooltip(name) -> bool - - - Get an action's tooltip ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_action_visibility(): - - get_action_visibility(name) -> bool - - - Get an action's visibility ( 'ui_get_action_attr' ). - - @param name: the action name (C++: const char *) - @return: success - - -ida_kernwin.get_active_modal_widget(): - - get_active_modal_widget() -> TWidget * - - - Get the current, active modal TWidget instance. Note that in this - context, the "wait dialog" is not considered: this function will - return NULL even if it is currently shown. - - @return: TWidget * the active modal widget, or NULL - - -ida_kernwin.get_addon_info(): - - get_addon_info(id, info) -> bool - - - Get info about a registered addon with a given product code. info->cb - must be valid! NB: all pointers are invalidated by next call to - register_addon or get_addon_info - - @param id (C++: const char *) - @param info (C++: addon_info_t *) - @return: false if not found - - -ida_kernwin.get_addon_info_idx(): - - get_addon_info_idx(index, info) -> bool - - - Get info about a registered addon with specific index. info->cb must - be valid! NB: all pointers are invalidated by next call to - register_addon or get_addon_info - - @param index (C++: int) - @param info (C++: addon_info_t *) - @return: false if index is out of range - - -ida_kernwin.get_chooser_data(): - - get_chooser_data(chooser_caption, n) -> PyObject * - - - Get the text corresponding to the index N in the chooser data. Use -1 - to get the header. - - @param chooser_caption (C++: const char *) - @param n (C++: int) - - -ida_kernwin.get_chooser_obj(): - - get_chooser_obj(chooser_caption) -> void * - - - Get the underlying object of the specified chooser ( - 'ui_get_chooser_obj' ).This is object is chooser-specific. - - @param chooser_caption (C++: const char *) - @return: the object that was used to create the chooser - - -ida_kernwin.get_curline(): - - get_curline() -> char const * - - - Get current line from the disassemble window ( 'ui_get_curline' ). - - @return: cptr current line with the color codes (use tag_remove() to - remove the color codes) - - -ida_kernwin.get_current_viewer(): - - get_current_viewer() -> TWidget * - - - Get current ida viewer (idaview or custom viewer) ( - 'ui_get_current_viewer' ) - - -ida_kernwin.get_current_widget(): - - get_current_widget() -> TWidget * - - - Get a pointer to the current widget ( 'ui_get_current_widget' ). - - -ida_kernwin.get_cursor(): - - get_cursor() -> bool - - - Get the cursor position on the screen ( 'ui_get_cursor' ).coordinates - are 0-based - - -ida_kernwin.get_custom_viewer_curline(): - - get_custom_viewer_curline(custom_viewer, mouse) -> char const * - - - Get current line of custom viewer ( 'ui_get_custom_viewer_curline' ). - The returned line contains color codes - - @param custom_viewer: view (C++: TWidget *) - @param mouse: mouse position (otherwise cursor position) (C++: bool) - @return: pointer to contents of current line - - -ida_kernwin.get_custom_viewer_place(): - - get_custom_viewer_place(custom_viewer, mouse) -> place_t - - - Get current place in a custom viewer ( 'ui_get_curplace' ). - - @param custom_viewer: view (C++: TWidget *) - @param mouse: mouse position (otherwise cursor position) (C++: bool) - - -ida_kernwin.get_ea_viewer_history_info(): - - get_ea_viewer_history_info(nback, nfwd, v) -> bool - - - Get information about what's in the history ( - 'ui_ea_viewer_history_info' ). - - @param nback: number of available back steps (C++: int *) - @param nfwd: number of available forward steps (C++: int *) - @param v: ea viewer (C++: TWidget *) - - -ida_kernwin.get_hexdump_ea(): - - get_hexdump_ea(hexdump_num) -> ea_t - - - Get the current address in a hex view. - - @param hexdump_num: number of hexview window (C++: int) - - -ida_kernwin.get_highlight(): - - get_highlight(v) -> PyObject * - - - Returns the currently highlighted identifier and flags - - @return: a tuple (text, flags), or None if nothing - is highlighted or in case of error. - - -ida_kernwin.get_kernel_version(): - - get_kernel_version() -> ssize_t - - - Get IDA kernel version (in a string like "5.1"). - - -ida_kernwin.get_key_code(): - - get_key_code(keyname) -> ushort - - - Get keyboard key code by its name ( 'ui_get_key_code' ) - - - @param keyname (C++: const char *) - - -ida_kernwin.get_navband_ea(): - - get_navband_ea(pixel) -> ea_t - - - Translate the pixel position on the navigation band, into an address. - - - @param pixel (C++: int) - - -ida_kernwin.get_navband_pixel(): - - get_navband_pixel(ea) -> int - - - Maps an address, onto a pixel coordinate within the navband - - @param ea: The address to map - @return: a list [pixel, is_vertical] - - -ida_kernwin.get_opnum(): - - get_opnum() -> int - - - Get current operand number, -1 means no operand ( 'ui_get_opnum' ) - - -ida_kernwin.get_output_curline(): - - get_output_curline(mouse) -> bool - - - Get current line of output window ( 'ui_get_output_curline' ). - - @param mouse: current for mouse pointer? (C++: bool) - @return: false if output contains no text - - -ida_kernwin.get_output_cursor(): - - get_output_cursor() -> bool - - - Get coordinates of the output window's cursor ( 'ui_get_output_cursor' - ).coordinates are 0-basedthis function will succeed even if the output - window is not visible - - -ida_kernwin.get_output_selected_text(): - - get_output_selected_text() -> bool - - - Returns selected text from output window ( - 'ui_get_output_selected_text' ). - - @return: true if there is a selection - - -ida_kernwin.get_place_class(): - - get_place_class(out_flags, out_sdk_version, id) -> place_t - - - Get information about a previously-registered 'place_t' class. See - also 'register_place_class()' . - - @param out_flags: output flags (can be NULL) (C++: int *) - @param out_sdk_version: sdk version the place was created with (can be - NULL) (C++: int *) - @param id: place class ID (C++: int) - @return: the place_t template, or NULL if not found - - -ida_kernwin.get_place_class_id(): - - get_place_class_id(name) -> int - - - Get the place class ID for the place that has been registered as - 'name'. - - @param name: the class name (C++: const char *) - @return: the place class ID, or -1 if not found - - -ida_kernwin.get_place_class_template(): - - get_place_class_template(id) -> place_t - - - See 'get_place_class()' - - - @param id (C++: int) - - -ida_kernwin.get_registered_actions(): - - get_registered_actions() -> PyObject * - - - Get a list of all currently-registered actions - - -ida_kernwin.get_screen_ea(): - - get_screen_ea() -> ea_t - - - Get the address at the screen cursor ( 'ui_screenea' ) - - -ida_kernwin.get_tab_size(): - - get_tab_size(path) -> int - - - Get the size of a tab in spaces ( 'ui_get_tab_size' ). - - @param path: the path of the source view for which the tab size is - requested. if NULL, the default size is returned. (C++: - const char *) - - -ida_kernwin.get_user_strlist_options(): - - get_user_strlist_options(out) - - -ida_kernwin.get_view_renderer_type(): - - get_view_renderer_type(v) -> tcc_renderer_type_t - - - Get the type of renderer currently in use in the given view ( - 'ui_get_renderer_type' ) - - - @param v (C++: TWidget *) - - -ida_kernwin.get_viewer_place_type(): - - get_viewer_place_type(viewer) -> tcc_place_type_t - - - Get the type of 'place_t' instances a viewer uses & creates ( - 'ui_get_viewer_place_type' ). - - - @param viewer (C++: TWidget *) - - -ida_kernwin.get_viewer_user_data(): - - get_viewer_user_data(viewer) -> void * - - - Get the user data from a custom viewer ( 'ui_get_viewer_user_data' ) - - - @param viewer (C++: TWidget *) - - -ida_kernwin.get_widget_title(): - - get_widget_title(widget) -> bool - - - Get the TWidget's title ( 'ui_get_widget_title' ). - - - @param widget (C++: TWidget *) - - -ida_kernwin.get_widget_type(): - - get_widget_type(widget) -> twidget_type_t - - - Get the type of the TWidget * ( 'ui_get_widget_type' ). - - - @param widget (C++: TWidget *) - - -ida_kernwin.get_window_id(): - - get_window_id(name=None) -> void * - - - Get the system-specific window ID (GUI version only) - - @param name (C++: const char *) - @return: the low-level window ID - - -ida_kernwin.hide_wait_box(): - - hide_wait_box() - - - Hide the "Please wait dialog box". - - -class ida_kernwin.idaplace_t(): - - Proxy of C++ idaplace_t class - - -ida_kernwin.idaplace_t._print(): - - _print(self, out_buf, ud) - - -ida_kernwin.idaplace_t.adjust(): - - adjust(self, ud) - - -ida_kernwin.idaplace_t.as_enumplace_t(): - - as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.idaplace_t.as_idaplace_t(): - - as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.idaplace_t.as_simpleline_place_t(): - - as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.idaplace_t.as_structplace_t(): - - as_structplace_t(p) -> structplace_t - - -ida_kernwin.idaplace_t.beginning(): - - beginning(self, ud) -> bool - - -ida_kernwin.idaplace_t.clone(): - - clone(self) -> place_t - - -ida_kernwin.idaplace_t.compare(): - - compare(self, t2) -> int - - -ida_kernwin.idaplace_t.copyfrom(): - - copyfrom(self, _from) - - -ida_kernwin.idaplace_t.ea: - idaplace_t_ea_get(self) -> ea_t - -ida_kernwin.idaplace_t.ending(): - - ending(self, ud) -> bool - - -ida_kernwin.idaplace_t.enter(): - - enter(self, arg2) -> place_t - - -ida_kernwin.idaplace_t.generate(): - - generate(self, ud, maxsize) -> PyObject * - - -ida_kernwin.idaplace_t.id(): - - id(self) -> int - - -ida_kernwin.idaplace_t.leave(): - - leave(self, arg2) - - -ida_kernwin.idaplace_t.lnnum: - place_t_lnnum_get(self) -> int - -ida_kernwin.idaplace_t.makeplace(): - - makeplace(self, ud, x, lnnum) -> place_t - - -ida_kernwin.idaplace_t.name(): - - name(self) -> char const * - - -ida_kernwin.idaplace_t.next(): - - next(self, ud) -> bool - - -ida_kernwin.idaplace_t.prev(): - - prev(self, ud) -> bool - - -ida_kernwin.idaplace_t.rebase(): - - rebase(self, arg2) -> bool - - -ida_kernwin.idaplace_t.toea(): - - toea(self) -> ea_t - - -ida_kernwin.idaplace_t.touval(): - - touval(self, ud) -> uval_t - - -ida_kernwin.info(): - - info(format) - - -ida_kernwin.install_command_interpreter(): - - install_command_interpreter(py_obj) -> int - - - Install command line interpreter ( 'ui_install_cli' ) - - -ida_kernwin.internal_register_place_class(): - - internal_register_place_class(tmplate, flags, owner, sdk_version) -> int - - -ida_kernwin.is_action_enabled(): - - is_action_enabled(s) -> bool - - - Check if the given action state is one of AST_ENABLE*. - - - @param s (C++: action_state_t) - - -ida_kernwin.is_chooser_widget(): - - is_chooser_widget(t) -> bool - - - Does the given widget type specify a chooser widget? - - - @param t (C++: twidget_type_t) - - -ida_kernwin.is_idaq(): - - is_idaq() -> bool - - - Returns True or False depending if IDAPython is hosted by IDAQ - - -ida_kernwin.is_msg_inited(): - - is_msg_inited() -> bool - - - Can we use msg() functions? - - -ida_kernwin.is_place_class_ea_capable(): - - is_place_class_ea_capable(id) -> bool - - - See 'get_place_class()' - - - @param id (C++: int) - - -ida_kernwin.is_refresh_requested(): - - is_refresh_requested(mask) -> bool - - - Get a refresh request state - - @param mask: Window refresh flags (C++: uint64) - @return: the state (set or cleared) - - -class ida_kernwin.jobj_wrapper_t(): - - Proxy of C++ jobj_wrapper_t class - - -ida_kernwin.jobj_wrapper_t.get_dict(): - - get_dict(self) -> PyObject * - - -ida_kernwin.jumpto(): - - jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool - jumpto(custom_viewer, place, x, y) -> bool - - - Jump to the specified address ( 'ui_jumpto' ). - - @param ea: destination (C++: ea_t) - @param opnum: -1: don't change x coord (C++: int) - @param uijmp_flags: Jump flags (C++: int) - @return: success - - -ida_kernwin.load_custom_icon(): - - Loads a custom icon and returns an identifier that can be used with other APIs - - If file_name is passed then the other two arguments are ignored. - - @param file_name: The icon file name - @param data: The icon data - @param format: The icon data format - - @return: Icon id or 0 on failure. - Use free_custom_icon() to free it - - - Load an icon from a file ( 'ui_load_custom_icon_file' ). Also see - 'load_custom_icon(const void *, unsigned int, const char *)' - - @return: icon id - - -ida_kernwin.load_dbg_dbginfo(): - - load_dbg_dbginfo(path, li=None, base=BADADDR, verbose=False) -> bool - - - Load debugging information from a file. - - @param path: path to file (C++: const char *) - @param li: loader input. if NULL, check DBG_NAME_KEY (C++: linput_t *) - @param base: loading address (C++: ea_t) - @param verbose: dump status to message window (C++: bool) - - -ida_kernwin.lookup_key_code(): - - lookup_key_code(key, shift, is_qt) -> ushort - - - Get shortcut code previously created by 'ui_get_key_code' . - - @param key: key constant (C++: int) - @param shift: modifiers (C++: int) - @param is_qt: are we using gui version? (C++: bool) - - -ida_kernwin.msg(): - - msg(o) -> PyObject * - - - Display an UTF-8 string in the message window - - The result of the stringification of the arguments - will be treated as an UTF-8 string. - - @param message: message to print (formatting is done in Python) - - This function can be used to debug IDAPython scripts - - -ida_kernwin.msg_clear(): - - msg_clear() - - - Clear the "Output window". - - -ida_kernwin.msg_get_lines(): - - msg_get_lines(count=-1) -> PyObject * - - - Retrieve the last 'count' lines from the output window, in reverse - order (from most recent, to least recent) - - @param count: The number of lines to retrieve. -1 means: all (C++: - int) - - -ida_kernwin.msg_save(): - - msg_save(path) -> bool - - - Save the "Output window" contents into a file - - @param path: The path of the file to save the contents into. An empty - path means that the user will be prompted for the - destination and, if the file already exists, the user - will be asked to confirm before overriding its contents. - Upon return, 'path' will contain the path that the user - chose. (C++: qstring &) - @return: success - - -ida_kernwin.nomem(): - - nomem(format) - - -ida_kernwin.open_bpts_window(): - - open_bpts_window(ea) -> TWidget * - - - Open the breakpoints window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_calls_window(): - - open_calls_window(ea) -> TWidget * - - - Open the function calls window ( 'ui_open_builtin' ). - - @param ea (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_disasm_window(): - - open_disasm_window(window_title, ranges=None) -> TWidget * - - - Open a disassembly view ( 'ui_open_builtin' ). - - @param window_title: title of view to open (C++: const char *) - @param ranges: if != NULL, then display a flow chart with the - specified ranges (C++: const rangevec_t *) - @return: pointer to resulting window - - -ida_kernwin.open_enums_window(): - - open_enums_window(const_id=BADADDR) -> TWidget * - - - Open the enums window ( 'ui_open_builtin' ). - - @param const_id: index of entry to select by default (C++: tid_t) - @return: pointer to resulting window - - -ida_kernwin.open_exports_window(): - - open_exports_window(ea) -> TWidget * - - - Open the exports window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_frame_window(): - - open_frame_window(pfn, offset) -> TWidget * - - - Open the frame window for the given function ( 'ui_open_builtin' ). - - @param pfn: function to analyze (C++: func_t *) - @param offset: offset where the cursor is placed (C++: uval_t) - @return: pointer to resulting window if 'pfn' is a valid function and - the window was displayed, NULL otherwise - - -ida_kernwin.open_funcs_window(): - - open_funcs_window(ea) -> TWidget * - - - Open the functions window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_hexdump_window(): - - open_hexdump_window(window_title) -> TWidget * - - - Open a hexdump view ( 'ui_open_builtin' ). - - @param window_title: title of view to open (C++: const char *) - @return: pointer to resulting window - - -ida_kernwin.open_imports_window(): - - open_imports_window(ea) -> TWidget * - - - Open the exports window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_loctypes_window(): - - open_loctypes_window(ordinal) -> TWidget * - - - Open the local types window ( 'ui_open_builtin' ). - - @param ordinal: ordinal of type to select by default (C++: int) - @return: pointer to resulting window - - -ida_kernwin.open_modules_window(): - - open_modules_window() -> TWidget * - - - Open the modules window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_names_window(): - - open_names_window(ea) -> TWidget * - - - Open the names window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_navband_window(): - - open_navband_window(ea, zoom) -> TWidget * - - - Open the navigation band window ( 'ui_open_builtin' ). - - @param ea: sets the address of the navband arrow (C++: ea_t) - @param zoom: sets the navband zoom level (C++: int) - @return: pointer to resulting window - - -ida_kernwin.open_notepad_window(): - - open_notepad_window() -> TWidget * - - - Open the notepad window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_problems_window(): - - open_problems_window(ea) -> TWidget * - - - Open the problems window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_segments_window(): - - open_segments_window(ea) -> TWidget * - - - Open the segments window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_segregs_window(): - - open_segregs_window(ea) -> TWidget * - - - Open the segment registers window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_selectors_window(): - - open_selectors_window() -> TWidget * - - - Open the selectors window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_signatures_window(): - - open_signatures_window() -> TWidget * - - - Open the signatures window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_stack_window(): - - open_stack_window() -> TWidget * - - - Open the call stack window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_strings_window(): - - open_strings_window(ea, selstart=BADADDR, selend=BADADDR) -> TWidget * - - - Open the strings window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @param selstart: only display strings that occur within this range - (C++: ea_t) - @param selend: only display strings that occur within this range (C++: - ea_t) - @return: pointer to resulting window - - -ida_kernwin.open_structs_window(): - - open_structs_window(id=BADADDR, offset=0) -> TWidget * - - - Open the structs window ( 'ui_open_builtin' ). - - @param id: index of entry to select by default (C++: tid_t) - @param offset: offset where the cursor is placed (C++: uval_t) - @return: pointer to resulting window - - -ida_kernwin.open_threads_window(): - - open_threads_window() -> TWidget * - - - Open the threads window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_tils_window(): - - open_tils_window() -> TWidget * - - - Open the type libraries window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_trace_window(): - - open_trace_window() -> TWidget * - - - Open the trace window ( 'ui_open_builtin' ). - - @return: pointer to resulting window - - -ida_kernwin.open_url(): - - open_url(url) - - - Open the given url ( 'ui_open_url' ) - - - @param url (C++: const char *) - - -ida_kernwin.open_xrefs_window(): - - open_xrefs_window(ea) -> TWidget * - - - Open the cross references window ( 'ui_open_builtin' ). - - @param ea: index of entry to select by default (C++: ea_t) - @return: pointer to resulting window - - -class ida_kernwin.place_t(): - - Proxy of C++ place_t class - - -ida_kernwin.place_t._print(): - - _print(self, out_buf, ud) - - -ida_kernwin.place_t.adjust(): - - adjust(self, ud) - - -ida_kernwin.place_t.as_enumplace_t(): - - as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.place_t.as_idaplace_t(): - - as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.place_t.as_simpleline_place_t(): - - as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.place_t.as_structplace_t(): - - as_structplace_t(p) -> structplace_t - - -ida_kernwin.place_t.beginning(): - - beginning(self, ud) -> bool - - -ida_kernwin.place_t.clone(): - - clone(self) -> place_t - - -ida_kernwin.place_t.compare(): - - compare(self, t2) -> int - - -ida_kernwin.place_t.copyfrom(): - - copyfrom(self, _from) - - -ida_kernwin.place_t.ending(): - - ending(self, ud) -> bool - - -ida_kernwin.place_t.enter(): - - enter(self, arg2) -> place_t - - -ida_kernwin.place_t.generate(): - - generate(self, ud, maxsize) -> PyObject * - - -ida_kernwin.place_t.id(): - - id(self) -> int - - -ida_kernwin.place_t.leave(): - - leave(self, arg2) - - -ida_kernwin.place_t.lnnum: - place_t_lnnum_get(self) -> int - -ida_kernwin.place_t.makeplace(): - - makeplace(self, ud, x, lnnum) -> place_t - - -ida_kernwin.place_t.name(): - - name(self) -> char const * - - -ida_kernwin.place_t.next(): - - next(self, ud) -> bool - - -ida_kernwin.place_t.prev(): - - prev(self, ud) -> bool - - -ida_kernwin.place_t.rebase(): - - rebase(self, arg2) -> bool - - -ida_kernwin.place_t.toea(): - - toea(self) -> ea_t - - -ida_kernwin.place_t.touval(): - - touval(self, ud) -> uval_t - - -ida_kernwin.place_t_as_enumplace_t(): - - place_t_as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.place_t_as_idaplace_t(): - - place_t_as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.place_t_as_simpleline_place_t(): - - place_t_as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.place_t_as_structplace_t(): - - place_t_as_structplace_t(p) -> structplace_t - - -ida_kernwin.plgform_close(): - - plgform_close(py_link, options) - - -ida_kernwin.plgform_get_widget(): - - plgform_get_widget(py_link) -> TWidget * - - -ida_kernwin.plgform_new(): - - plgform_new() -> PyObject * - - -ida_kernwin.plgform_show(): - - plgform_show(py_link, py_obj, caption, options=WOPN_DP_TAB|WOPN_RESTORE) -> bool - - -ida_kernwin.process_ui_action(): - - process_ui_action(name, flags=0) -> bool - - - Invokes an IDA UI action by name - - @param name: action name - @return: Boolean - - -ida_kernwin.py_get_ask_form(): - - py_get_ask_form() -> size_t - - -ida_kernwin.py_get_open_form(): - - py_get_open_form() -> size_t - - -ida_kernwin.py_load_custom_icon_data(): - - py_load_custom_icon_data(data, format) -> int - - -ida_kernwin.py_load_custom_icon_fn(): - - py_load_custom_icon_fn(filename) -> int - - -ida_kernwin.py_register_compiled_form(): - - py_register_compiled_form(py_form) - - -ida_kernwin.py_ss_restore_callback(): - - py_ss_restore_callback(err_msg, userdata) - - -ida_kernwin.py_unregister_compiled_form(): - - py_unregister_compiled_form(py_form) - - -ida_kernwin.pyidag_bind(): - - pyidag_bind(self) -> bool - - -ida_kernwin.pyidag_unbind(): - - pyidag_unbind(self) -> bool - - -ida_kernwin.pyscv_add_line(): - - pyscv_add_line(py_this, py_sl) -> bool - - -ida_kernwin.pyscv_clear_lines(): - - pyscv_clear_lines(py_this) -> PyObject * - - -ida_kernwin.pyscv_close(): - - pyscv_close(py_this) - - -ida_kernwin.pyscv_count(): - - pyscv_count(py_this) -> size_t - - -ida_kernwin.pyscv_del_line(): - - pyscv_del_line(py_this, nline) -> bool - - -ida_kernwin.pyscv_edit_line(): - - pyscv_edit_line(py_this, nline, py_sl) -> bool - - -ida_kernwin.pyscv_get_current_line(): - - pyscv_get_current_line(py_this, mouse, notags) -> PyObject * - - -ida_kernwin.pyscv_get_current_word(): - - pyscv_get_current_word(py_this, mouse) -> PyObject * - - -ida_kernwin.pyscv_get_line(): - - pyscv_get_line(py_this, nline) -> PyObject * - - -ida_kernwin.pyscv_get_pos(): - - pyscv_get_pos(py_this, mouse) -> PyObject * - - -ida_kernwin.pyscv_get_selection(): - - pyscv_get_selection(py_this) -> PyObject * - - -ida_kernwin.pyscv_get_widget(): - - pyscv_get_widget(py_this) -> TWidget * - - -ida_kernwin.pyscv_init(): - - pyscv_init(py_link, title) -> PyObject * - - -ida_kernwin.pyscv_insert_line(): - - pyscv_insert_line(py_this, nline, py_sl) -> bool - - -ida_kernwin.pyscv_is_focused(): - - pyscv_is_focused(py_this) -> bool - - -ida_kernwin.pyscv_jumpto(): - - pyscv_jumpto(py_this, ln, x, y) -> bool - - -ida_kernwin.pyscv_patch_line(): - - pyscv_patch_line(py_this, nline, offs, value) -> bool - - -ida_kernwin.pyscv_refresh(): - - pyscv_refresh(py_this) -> bool - - -ida_kernwin.pyscv_show(): - - pyscv_show(py_this) -> bool - - -ida_kernwin.qcleanline(): - - qcleanline(cmt_char='', flags=((1 << 0)|(1 << 1))|(1 << 2)) -> ssize_t - - - Performs some cleanup operations to a line. - - @param cmt_char: character that denotes the start of a comment: the - entire text is removed if the line begins with this - character (ignoring leading spaces) all text after - (and including) this character is removed if flag - CLNL_FINDCMT is set (C++: char) - @param flags: a combination of line cleanup flags . defaults to - CLNL_TRIM (C++: uint32) - @return: length of line - - -ida_kernwin.read_range_selection(): - - read_range_selection(v) -> bool - - - Get the address range for the selected range boundaries, this is the - convenient function for 'read_selection()' - - @param v: view, NULL means the last active window containing addresses - (C++: TWidget *) - - -ida_kernwin.read_selection(): - - read_selection(v, p1, p2) -> bool - - - Read the user selection, and store its information in p0 (from) and p1 (to). - - This can be used as follows: - - - >>> p0 = idaapi.twinpos_t() - p1 = idaapi.twinpos_t() - view = idaapi.get_current_viewer() - idaapi.read_selection(view, p0, p1) - - - At that point, p0 and p1 hold information for the selection. - But, the 'at' property of p0 and p1 is not properly typed. - To specialize it, call #place() on it, passing it the view - they were retrieved from. Like so: - - - >>> place0 = p0.place(view) - place1 = p1.place(view) - - - This will effectively "cast" the place into a specialized type, - holding proper information, depending on the view type (e.g., - disassembly, structures, enums, ...) - - @param view: The view to retrieve the selection for. - @param p0: Storage for the "from" part of the selection. - @param p1: Storage for the "to" part of the selection. - @return: a bool value indicating success. - - -ida_kernwin.refresh_chooser(): - - refresh_chooser(title) -> bool - - - Mark a non-modal custom chooser for a refresh ( 'ui_refresh_chooser' - ). - - @param title: title of chooser (C++: const char *) - @return: success - - -ida_kernwin.refresh_choosers(): - - refresh_choosers() - - -ida_kernwin.refresh_idaview(): - - refresh_idaview() - - - Refresh marked windows ( 'ui_refreshmarked' ) - - -ida_kernwin.refresh_idaview_anyway(): - - refresh_idaview_anyway() - - - Refresh all disassembly views ( 'ui_refresh' ), forces an immediate - refresh. Please consider 'request_refresh()' instead - - -ida_kernwin.refresh_navband(): - - refresh_navband(force) - - - Refresh navigation band if changed ( 'ui_refresh_navband' ). - - @param force: refresh regardless (C++: bool) - - -ida_kernwin.register_action(): - - register_action(desc) -> bool - - - Create a new action ( 'ui_register_action' ). After an action has been - created, it is possible to attach it to menu items ( - 'attach_action_to_menu()' ), or to popup menus ( - 'attach_action_to_popup()' ).Because the actions will need to call the - handler's activate() and update() methods at any time, you shouldn't - build your action handler on the stack.Please see the SDK's "ht_view" - plugin for an example how to register actions. - - @param desc: action to register (C++: const action_desc_t &) - @return: success - - -ida_kernwin.register_addon(): - - register_addon(info) -> int - - - Register an add-on. Show its info in the About box. For plugins, - should be called from init() function (repeated calls with the same - product code overwrite previous entries) returns: index of the add-on - in the list, or -1 on error - - @param info (C++: const addon_info_t *) - - -ida_kernwin.register_and_attach_to_menu(): - - register_and_attach_to_menu(menupath, name, label, shortcut, flags, handler, owner) -> bool - - - Helper.You are not encouraged to use this, as it mixes flags for both - 'register_action()' , and 'attach_action_to_menu()' .The only reason - for its existence is to make it simpler to port existing plugins to - the new actions API. - - @param menupath (C++: const char *) - @param name (C++: const char *) - @param label (C++: const char *) - @param shortcut (C++: const char *) - @param flags (C++: int) - @param handler (C++: action_handler_t *) - @param owner (C++: const plugin_t *) - - -ida_kernwin.register_timer(): - - register_timer(interval, py_callback) -> PyObject * - - - Register a timer - - @param interval: Interval in milliseconds - @param callback: A Python callable that takes no parameters and returns an integer. - The callback may return: - -1 : to unregister the timer - >= 0 : the new or same timer interval - @return: None or a timer object - - -ida_kernwin.remove_command_interpreter(): - - remove_command_interpreter(cli_idx) - - - Remove command line interpreter ( 'ui_install_cli' ) - - -class ida_kernwin.renderer_pos_info_t(): - - Proxy of C++ renderer_pos_info_t class - - -ida_kernwin.renderer_pos_info_t.cx: - renderer_pos_info_t_cx_get(self) -> short - -ida_kernwin.renderer_pos_info_t.cy: - renderer_pos_info_t_cy_get(self) -> short - -ida_kernwin.renderer_pos_info_t.node: - renderer_pos_info_t_node_get(self) -> int - -ida_kernwin.renderer_pos_info_t.sx: - renderer_pos_info_t_sx_get(self) -> short - -ida_kernwin.repaint_custom_viewer(): - - repaint_custom_viewer(custom_viewer) - - - Repaint the given widget immediately ( 'ui_repaint_qwidget' ) - - - @param custom_viewer (C++: TWidget *) - - -ida_kernwin.replace_wait_box(): - - replace_wait_box(format) - - - Replace the label of "Please wait dialog box". - - - @param format (C++: const char *) - - -ida_kernwin.request_refresh(): - - request_refresh(mask, cnd=True) - - - Request a refresh of a builtin window. - - @param mask: Window refresh flags (C++: uint64) - @param cnd: set if true or clear flag otherwise (C++: bool) - - -ida_kernwin.restore_database_snapshot(): - - restore_database_snapshot(ss, pyfunc_or_none, pytuple_or_none) -> PyObject * - - - Restore a database snapshot. Note: This call is asynchronous. When it - is completed, the callback will be triggered. - - @param ss: snapshot instance (see build_snapshot_tree() ) (C++: const - snapshot_t *) - @return: false if restoration could not be started (snapshot file was - not found). If the returned value is True then check if - the operation succeeded from the callback. - - -ida_kernwin.set_cancelled(): - - set_cancelled() - - - Set "Cancelled" flag ( 'ui_set_cancelled' ) - - -ida_kernwin.set_code_viewer_handler(): - - set_code_viewer_handler(code_viewer, handler_id, handler_or_data) -> void * - - - Set a handler for a code viewer event ( 'ui_set_custom_viewer_handler' - ). - - @param code_viewer: the code viewer (C++: TWidget *) - @param handler_id: one of CDVH_ in custom_viewer_handler_id_t (C++: - custom_viewer_handler_id_t) - @param handler_or_data: can be a handler or data. see examples in - Functions: custom viewer handlers (C++: void - *) - @return: old value of the handler or data - - -ida_kernwin.set_code_viewer_is_source(): - - set_code_viewer_is_source(code_viewer) -> bool - - - Specify that the given code viewer is used to display source code ( - 'ui_set_custom_viewer_handler' ). - - - @param code_viewer (C++: TWidget *) - - -ida_kernwin.set_code_viewer_line_handlers(): - - set_code_viewer_line_handlers(code_viewer, click_handler, popup_handler, dblclick_handler, drawicon_handler, linenum_handler) - - - Set handlers for code viewer line events. Any of these handlers may be - NULL - - @param code_viewer (C++: TWidget *) - @param click_handler (C++: code_viewer_lines_click_t *) - @param popup_handler (C++: code_viewer_lines_click_t *) - @param dblclick_handler (C++: code_viewer_lines_click_t *) - @param drawicon_handler (C++: code_viewer_lines_icon_t *) - @param linenum_handler (C++: code_viewer_lines_linenum_t *) - - -ida_kernwin.set_code_viewer_lines_alignment(): - - set_code_viewer_lines_alignment(code_viewer, align) -> bool - - - Set alignment for lines in a code viewer ( - 'ui_set_custom_viewer_handler' ). - - - @param code_viewer (C++: TWidget *) - @param align (C++: int) - - -ida_kernwin.set_code_viewer_lines_icon_margin(): - - set_code_viewer_lines_icon_margin(code_viewer, margin) -> bool - - - Set space allowed for icons in the margin of a code viewer ( - 'ui_set_custom_viewer_handler' ). - - - @param code_viewer (C++: TWidget *) - @param margin (C++: int) - - -ida_kernwin.set_code_viewer_lines_radix(): - - set_code_viewer_lines_radix(code_viewer, radix) -> bool - - - Set radix for values displayed in a code viewer ( - 'ui_set_custom_viewer_handler' ). - - - @param code_viewer (C++: TWidget *) - @param radix (C++: int) - - -ida_kernwin.set_code_viewer_user_data(): - - set_code_viewer_user_data(code_viewer, ud) -> bool - - - Set the user data on a code viewer ( 'ui_set_custom_viewer_handler' ). - - - @param code_viewer (C++: TWidget *) - @param ud (C++: void *) - - -ida_kernwin.set_custom_viewer_qt_aware(): - - set_custom_viewer_qt_aware(custom_viewer) -> bool - - - Allow the given viewer to interpret Qt events ( - 'ui_set_custom_viewer_handler' ) - - - @param custom_viewer (C++: TWidget *) - - -ida_kernwin.set_dock_pos(): - - set_dock_pos(src_ctrl, dest_ctrl, orient, left=0, top=0, right=0, bottom=0) -> bool - - - Sets the dock orientation of a window relatively to another window. - - @param src: Source docking control - @param dest: Destination docking control - @param orient: One of DOR_XXXX constants - @param left, top, right, bottom: These parameter if DOR_FLOATING is used, or if you want to specify the width of docked windows - @return: Boolean - - Example: - set_dock_pos('Structures', 'Enums', DOR_RIGHT) <- docks the Structures window to the right of Enums window - - -ida_kernwin.set_highlight(): - - set_highlight(viewer, str, flags) -> bool - - - Set the highlighted identifier in the viewer ( 'ui_set_highlight' ). - - @param viewer: the viewer (C++: TWidget *) - @param str: the text to match, or NULL to remove current (C++: const - char *) - @param flags: combination of HIF_... bits (see set_highlightr flags ) - (C++: int) - @return: false if an error occurred - - -ida_kernwin.set_nav_colorizer(): - - set_nav_colorizer(new_py_colorizer) -> PyObject * - - - Set a new colorizer for the navigation band. - - The 'callback' is a function of 2 arguments: - - ea (the EA to colorize for) - - nbytes (the number of bytes at that EA) - and must return a 'long' value. - - The previous colorizer is returned, allowing - the new 'callback' to use 'call_nav_colorizer' - with it. - - Note that the previous colorizer is returned - only the first time set_nav_colorizer() is called: - due to the way the colorizers API is defined in C, - it is impossible to chain more than 2 colorizers - in IDAPython: the original, IDA-provided colorizer, - and a user-provided one. - - Example: colorizer inverting the color provided by the IDA colorizer: - def my_colorizer(ea, nbytes): - global ida_colorizer - orig = idaapi.call_nav_colorizer(ida_colorizer, ea, nbytes) - return long(~orig) - - ida_colorizer = idaapi.set_nav_colorizer(my_colorizer) - - -ida_kernwin.set_view_renderer_type(): - - set_view_renderer_type(v, rt) - - - Set the type of renderer to use in a view ( 'ui_set_renderer_type' ) - - - @param v (C++: TWidget *) - @param rt (C++: tcc_renderer_type_t) - - -ida_kernwin.show_wait_box(): - - show_wait_box(format) - - - Display a dialog box with "Please wait...". If the text message starts - with "HIDECANCEL - ", the cancel buttonwon't be displayed in the dialog - box and you don't need to checkfor cancellations with - 'user_cancelled()' . Plugins must call 'hide_wait_box()' to close the - dialog box, otherwise the user interface will be disabled.Note that, - if the wait dialog is already visible, 'show_wait_box()' will1) push - the currently-displayed text on a stack2) display the new textThen, - when 'hide_wait_box()' is called, if that stack isn't empty its - toplabel will be popped and restored in the wait dialog.This implies - that a plugin should call 'hide_wait_box()' exactly as manytimes as it - called 'show_wait_box()' , or the wait dialog might remainvisible and - block the UI.Also, in case the plugin knows the wait dialog is - currently displayed,alternatively it can call 'replace_wait_box()' , - to replace the text of thedialog without pushing the currently- - displayed text on the stack. - - @param format (C++: const char *) - - -class ida_kernwin.simplecustviewer_t(): - - The base class for implementing simple custom viewers - - -ida_kernwin.simplecustviewer_t.AddLine(): - - Adds a colored line to the view - @return: Boolean - - -ida_kernwin.simplecustviewer_t.ClearLines(): - - Clears all the lines - - -ida_kernwin.simplecustviewer_t.Close(): - - Destroys the view. - One has to call Create() afterwards. - Show() can be called and it will call Create() internally. - @return: Boolean - - -ida_kernwin.simplecustviewer_t.Count(): - - Returns the number of lines in the view - - -ida_kernwin.simplecustviewer_t.Create(): - - Creates the custom view. This should be the first method called after instantiation - - @param title: The title of the view - @return: Boolean whether it succeeds or fails. It may fail if a window with the same title is already open. - In this case better close existing windows - - -ida_kernwin.simplecustviewer_t.DelLine(): - - Deletes an existing line - @return: Boolean - - -ida_kernwin.simplecustviewer_t.EditLine(): - - Edits an existing line. - @return: Boolean - - -ida_kernwin.simplecustviewer_t.GetCurrentLine(): - - Returns the current line. - @param mouse: Current line at mouse pos - @param notags: If True then tag_remove() will be called before returning the line - @return: Returns the current line (colored or uncolored) or None on failure - - -ida_kernwin.simplecustviewer_t.GetCurrentWord(): - - Returns the current word - @param mouse: Use mouse position or cursor position - @return: None if failed or a String containing the current word at mouse or cursor - - -ida_kernwin.simplecustviewer_t.GetLine(): - - Returns a line - @param lineno: The line number - @return: - Returns a tuple (colored_line, fgcolor, bgcolor) or None - - -ida_kernwin.simplecustviewer_t.GetLineNo(): - - Calls GetPos() and returns the current line number or -1 on failure - - -ida_kernwin.simplecustviewer_t.GetPos(): - - Returns the current cursor or mouse position. - @param mouse: return mouse position - @return: Returns a tuple (lineno, x, y) - - -ida_kernwin.simplecustviewer_t.GetSelection(): - - Returns the selected range or None - @return: - - tuple(x1, y1, x2, y2) - - None if no selection - - -ida_kernwin.simplecustviewer_t.GetWidget(): - - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - - -ida_kernwin.simplecustviewer_t.InsertLine(): - - Inserts a line in the given position - @return: Boolean - - -ida_kernwin.simplecustviewer_t.IsFocused(): - - Returns True if the current view is the focused view - - -ida_kernwin.simplecustviewer_t.OnPopup(): - - Context menu popup is about to be shown. Create items dynamically if you wish - @return: Boolean. True if you handled the event - - -ida_kernwin.simplecustviewer_t.PatchLine(): - - Patches an existing line character at the given offset. This is a low level function. You must know what you're doing - - -ida_kernwin.simplecustviewer_t.RefreshCurrent(): - - Refreshes the current line only - - -ida_kernwin.simplecustviewer_t.Show(): - - Shows an already created view. It the view was close, then it will call Create() for you - @return: Boolean - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.create_desktop_widget(): - - create_desktop_widget(self, title, cfg) -> PyObject * - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.current_widget_changed(): - - current_widget_changed(self, widget, prev_widget) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.database_inited(): - - database_inited(self, is_new_database, idc_script) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.debugger_menu_change(): - - debugger_menu_change(self, enable) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.finish_populating_widget_popup(): - - finish_populating_widget_popup(self, widget, popup_handle, ctx=None) - - - The UI is about to be done populating the TWidget's popup menu. - Now is a good time to call idaapi.attach_action_to_popup() - - @param widget: The widget - @param popup: The popup menu. - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.get_chooser_item_attrs(): - - get_chooser_item_attrs(self, chooser, n, attrs) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.get_custom_viewer_hint(): - - get_custom_viewer_hint(self, viewer, place) -> PyObject * - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.get_ea_hint(): - - get_ea_hint(self, ea) -> PyObject * - - - The UI wants to display a simple hint for an address in the navigation band - - @param ea: The address - @return: String with the hint or None - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.get_item_hint(): - - get_item_hint(self, ea, max_lines) -> PyObject * - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.get_widget_config(): - - get_widget_config(self, widget, cfg) -> PyObject * - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.hook(): - - hook(self) -> bool - - - Creates an UI hook - - @return: Boolean true on success - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.idcstart(): - - idcstart(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.idcstop(): - - idcstop(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.plugin_loaded(): - - plugin_loaded(self, plugin_info) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.plugin_unloading(): - - plugin_unloading(self, plugin_info) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.postprocess_action(): - - postprocess_action(self) - - - An ida ui action has been handled - - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.preprocess_action(): - - preprocess_action(self, name) - - - IDA ui is about to handle a user action - - @param name: ui action name - (these names can be looked up in ida[tg]ui.cfg) - @return: 0-ok, nonzero - a plugin has handled the action - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.range(): - - range(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.ready_to_run(): - - ready_to_run(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.resume(): - - resume(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.saved(): - - saved(self) - - - The kernel has saved the database. - - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.saving(): - - saving(self) - - - The kernel is saving the database. - - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.screen_ea_changed(): - - screen_ea_changed(self, ea, prev_ea) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.set_widget_config(): - - set_widget_config(self, widget, cfg) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.suspend(): - - suspend(self) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.term(): - - term(self) - - - IDA is terminated and the database is already closed. - The UI may close its windows in this callback. - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.unhook(): - - unhook(self) -> bool - - - Removes the UI hook - @return: Boolean true on success - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.updated_actions(): - - updated_actions(self) - - - The UI is done updating actions. - - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.updating_actions(): - - updating_actions(self, ctx) - - - The UI is about to batch-update some actions. - - @param ctx: The action_update_ctx_t instance - @return: Ignored - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.widget_closing(): - - widget_closing(self, widget) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.widget_invisible(): - - widget_invisible(self, widget) - - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.widget_visible(): - - widget_visible(self, widget) - - -class ida_kernwin.simpleline_place_t(): - - Proxy of C++ simpleline_place_t class - - -ida_kernwin.simpleline_place_t._print(): - - _print(self, out_buf, ud) - - -ida_kernwin.simpleline_place_t.adjust(): - - adjust(self, ud) - - -ida_kernwin.simpleline_place_t.as_enumplace_t(): - - as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.simpleline_place_t.as_idaplace_t(): - - as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.simpleline_place_t.as_simpleline_place_t(): - - as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.simpleline_place_t.as_structplace_t(): - - as_structplace_t(p) -> structplace_t - - -ida_kernwin.simpleline_place_t.beginning(): - - beginning(self, ud) -> bool - - -ida_kernwin.simpleline_place_t.clone(): - - clone(self) -> place_t - - -ida_kernwin.simpleline_place_t.compare(): - - compare(self, t2) -> int - - -ida_kernwin.simpleline_place_t.copyfrom(): - - copyfrom(self, _from) - - -ida_kernwin.simpleline_place_t.ending(): - - ending(self, ud) -> bool - - -ida_kernwin.simpleline_place_t.enter(): - - enter(self, arg2) -> place_t - - -ida_kernwin.simpleline_place_t.generate(): - - generate(self, ud, maxsize) -> PyObject * - - -ida_kernwin.simpleline_place_t.id(): - - id(self) -> int - - -ida_kernwin.simpleline_place_t.leave(): - - leave(self, arg2) - - -ida_kernwin.simpleline_place_t.lnnum: - place_t_lnnum_get(self) -> int - -ida_kernwin.simpleline_place_t.makeplace(): - - makeplace(self, ud, x, lnnum) -> place_t - - -ida_kernwin.simpleline_place_t.n: - simpleline_place_t_n_get(self) -> uint32 - -ida_kernwin.simpleline_place_t.name(): - - name(self) -> char const * - - -ida_kernwin.simpleline_place_t.next(): - - next(self, ud) -> bool - - -ida_kernwin.simpleline_place_t.prev(): - - prev(self, ud) -> bool - - -ida_kernwin.simpleline_place_t.rebase(): - - rebase(self, arg2) -> bool - - -ida_kernwin.simpleline_place_t.toea(): - - toea(self) -> ea_t - - -ida_kernwin.simpleline_place_t.touval(): - - touval(self, ud) -> uval_t - - -class ida_kernwin.simpleline_t(): - - Proxy of C++ simpleline_t class - - -ida_kernwin.simpleline_t.bgcolor: - simpleline_t_bgcolor_get(self) -> bgcolor_t - -ida_kernwin.simpleline_t.color: - simpleline_t_color_get(self) -> color_t - -ida_kernwin.simpleline_t.line: - simpleline_t_line_get(self) -> qstring * - -ida_kernwin.str2ea(): - - str2ea(str, screenEA=BADADDR) -> ea_t - - - Converts a string express to EA. The expression evaluator may be called as well. - - @return: BADADDR or address value - - -ida_kernwin.str2user(): - - str2user(str) -> PyObject * - - - Insert C-style escape characters to string - - @return: new string with escape characters inserted - - -ida_kernwin.strarray(): - - strarray(array, array_size, code) -> char const * - - - Find a line with the specified code in the 'strarray_t' array. If the - last element of the array has code==0 then it is considered as the - default entry.If no default entry exists and the code is not found, - 'strarray()' returns "". - - @param array (C++: const strarray_t *) - @param array_size (C++: size_t) - @param code (C++: int) - - -class ida_kernwin.strarray_t(): - - Proxy of C++ strarray_t class - - -ida_kernwin.strarray_t.code: - strarray_t_code_get(self) -> int - -ida_kernwin.strarray_t.text: - strarray_t_text_get(self) -> char const * - -class ida_kernwin.structplace_t(): - - Proxy of C++ structplace_t class - - -ida_kernwin.structplace_t._print(): - - _print(self, out_buf, ud) - - -ida_kernwin.structplace_t.adjust(): - - adjust(self, ud) - - -ida_kernwin.structplace_t.as_enumplace_t(): - - as_enumplace_t(p) -> enumplace_t - - -ida_kernwin.structplace_t.as_idaplace_t(): - - as_idaplace_t(p) -> idaplace_t - - -ida_kernwin.structplace_t.as_simpleline_place_t(): - - as_simpleline_place_t(p) -> simpleline_place_t - - -ida_kernwin.structplace_t.as_structplace_t(): - - as_structplace_t(p) -> structplace_t - - -ida_kernwin.structplace_t.beginning(): - - beginning(self, ud) -> bool - - -ida_kernwin.structplace_t.clone(): - - clone(self) -> place_t - - -ida_kernwin.structplace_t.compare(): - - compare(self, t2) -> int - - -ida_kernwin.structplace_t.copyfrom(): - - copyfrom(self, _from) - - -ida_kernwin.structplace_t.ending(): - - ending(self, ud) -> bool - - -ida_kernwin.structplace_t.enter(): - - enter(self, arg2) -> place_t - - -ida_kernwin.structplace_t.generate(): - - generate(self, ud, maxsize) -> PyObject * - - -ida_kernwin.structplace_t.id(): - - id(self) -> int - - -ida_kernwin.structplace_t.idx: - structplace_t_idx_get(self) -> uval_t - -ida_kernwin.structplace_t.leave(): - - leave(self, arg2) - - -ida_kernwin.structplace_t.lnnum: - place_t_lnnum_get(self) -> int - -ida_kernwin.structplace_t.makeplace(): - - makeplace(self, ud, x, lnnum) -> place_t - - -ida_kernwin.structplace_t.name(): - - name(self) -> char const * - - -ida_kernwin.structplace_t.next(): - - next(self, ud) -> bool - - -ida_kernwin.structplace_t.offset: - structplace_t_offset_get(self) -> uval_t - -ida_kernwin.structplace_t.prev(): - - prev(self, ud) -> bool - - -ida_kernwin.structplace_t.rebase(): - - rebase(self, arg2) -> bool - - -ida_kernwin.structplace_t.toea(): - - toea(self) -> ea_t - - -ida_kernwin.structplace_t.touval(): - - touval(self, ud) -> uval_t - - -class ida_kernwin.sync_source_t(): - - Proxy of C++ sync_source_t class - - -ida_kernwin.sync_source_t.get_register(): - - get_register(self) -> char const * - - -ida_kernwin.sync_source_t.get_widget(): - - get_widget(self) -> TWidget const * - - -ida_kernwin.sync_source_t.is_register(): - - is_register(self) -> bool - - -ida_kernwin.sync_source_t.is_widget(): - - is_widget(self) -> bool - - -ida_kernwin.sync_sources(): - - sync_sources(what, with, sync) -> bool - - - [Un]synchronize sources - - @param what (C++: const sync_source_t &) - @param with (C++: const sync_source_t &) - @param sync (C++: bool) - @return: success - - -ida_kernwin.take_database_snapshot(): - - take_database_snapshot(ss) -> PyObject * - - - Take a database snapshot ( 'ui_take_database_snapshot' ). - - @param ss: in/out parameter. in: description, flags out: filename, - id (C++: snapshot_t *) - @return: success - - -class ida_kernwin.textctrl_info_t(): - - Class representing textctrl_info_t - - -ida_kernwin.textctrl_info_t._free(): - - Explicitly delete the link (only if not static) - - -ida_kernwin.textctrl_info_t.assign(): - - Copies the contents of 'other' to 'self' - - -ida_kernwin.textctrl_info_t.copy(): - - Returns a new copy of this class - - -ida_kernwin.textctrl_info_t.flags: - - Returns the flags value - - -ida_kernwin.textctrl_info_t.tabsize: - - Returns the tabsize value - - -ida_kernwin.textctrl_info_t.text: - - Sets the text value - - -ida_kernwin.textctrl_info_t.value: - - Sets the text value - - -ida_kernwin.textctrl_info_t_assign(): - - textctrl_info_t_assign(self, other) -> bool - - -ida_kernwin.textctrl_info_t_create(): - - textctrl_info_t_create() -> PyObject * - - -ida_kernwin.textctrl_info_t_destroy(): - - textctrl_info_t_destroy(py_obj) -> bool - - -ida_kernwin.textctrl_info_t_get_clink(): - - textctrl_info_t_get_clink(self) -> textctrl_info_t * - - -ida_kernwin.textctrl_info_t_get_clink_ptr(): - - textctrl_info_t_get_clink_ptr(self) -> PyObject * - - -ida_kernwin.textctrl_info_t_get_flags(): - - textctrl_info_t_get_flags(self) -> unsigned int - - -ida_kernwin.textctrl_info_t_get_tabsize(): - - textctrl_info_t_get_tabsize(self) -> unsigned int - - -ida_kernwin.textctrl_info_t_get_text(): - - textctrl_info_t_get_text(self) -> char const * - - -ida_kernwin.textctrl_info_t_set_flags(): - - textctrl_info_t_set_flags(self, flags) -> bool - - -ida_kernwin.textctrl_info_t_set_tabsize(): - - textctrl_info_t_set_tabsize(self, tabsize) -> bool - - -ida_kernwin.textctrl_info_t_set_text(): - - textctrl_info_t_set_text(self, s) -> bool - - -class ida_kernwin.twinpos_t(): - - Proxy of C++ twinpos_t class - - -ida_kernwin.twinpos_t.at: - twinpos_t_at_get(self) -> place_t - -ida_kernwin.twinpos_t.x: - twinpos_t_x_get(self) -> int - -ida_kernwin.ui_load_new_file(): - - ui_load_new_file(temp_file, filename, pli, neflags, ploaders) -> bool - - - Display a load file dialog and load file ( 'ui_load_file' ). - - @param temp_file: name of the file with the extracted archive member. - (C++: qstring *) - @param filename: the name of input file as is, library or archive name - (C++: qstring *) - @param pli: loader input source, may be changed to point to temp_file - (C++: linput_t **) - @param neflags: combination of NEF_... bits (see Load file flags ) - (C++: ushort) - @param ploaders: list of loaders which accept file, may be changed for - loaders of temp_file (C++: load_info_t **) - - -class ida_kernwin.ui_requests_t(): - - Proxy of C++ ui_requests_t class - - -ida_kernwin.ui_run_debugger(): - - ui_run_debugger(dbgopts, exename, argc, argv) -> bool - - - Load a debugger plugin and run the specified program ( 'ui_run_dbg' ). - - @param dbgopts: value of the -r command line switch (C++: const char - *) - @param exename: name of the file to run (C++: const char *) - @param argc: number of arguments for the executable (C++: int) - @param argv: argument vector (C++: const char *const *) - @return: success - - -ida_kernwin.unmark_selection(): - - unmark_selection() - - - Unmark selection ( 'ui_unmarksel' ) - - -ida_kernwin.unregister_action(): - - unregister_action(name) -> bool - - - Delete a previously-registered action ( 'ui_unregister_action' ). - - @param name: name of action (C++: const char *) - @return: success - - -ida_kernwin.unregister_timer(): - - unregister_timer(py_timerctx) -> PyObject * - - - Unregister a timer - - @param timer_obj: a timer object previously returned by a register_timer() - @return: Boolean - @note: After the timer has been deleted, the timer_obj will become invalid. - - -ida_kernwin.update_action_checkable(): - - update_action_checkable(name, checkable) -> bool - - - Update an action's checkability ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param checkable: new checkability (C++: bool) - @return: success - - -ida_kernwin.update_action_checked(): - - update_action_checked(name, checked) -> bool - - - Update an action's checked state ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param checked: new checked state (C++: bool) - @return: success - - -ida_kernwin.update_action_icon(): - - update_action_icon(name, icon) -> bool - - - Update an action's icon ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param icon: new icon id (C++: int) - @return: success - - -ida_kernwin.update_action_label(): - - update_action_label(name, label) -> bool - - - Update an action's label ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param label: new label (C++: const char *) - @return: success - - -ida_kernwin.update_action_shortcut(): - - update_action_shortcut(name, shortcut) -> bool - - - Update an action's shortcut ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param shortcut: new shortcut (C++: const char *) - @return: success - - -ida_kernwin.update_action_state(): - - update_action_state(name, state) -> bool - - - Update an action's state ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param state: new state (C++: action_state_t) - @return: success - - -ida_kernwin.update_action_tooltip(): - - update_action_tooltip(name, tooltip) -> bool - - - Update an action's tooltip ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param tooltip: new tooltip (C++: const char *) - @return: success - - -ida_kernwin.update_action_visibility(): - - update_action_visibility(name, visible) -> bool - - - Update an action's visibility ( 'ui_update_action_attr' ). - - @param name: action name (C++: const char *) - @param visible: new visibility (C++: bool) - @return: success - - -ida_kernwin.user_cancelled(): - - user_cancelled() -> bool - - - Test the ctrl-break flag ( 'ui_test_cancelled' ). - - -class ida_kernwin.view_mouse_event_location_t(): - - Proxy of C++ view_mouse_event_location_t class - - -ida_kernwin.view_mouse_event_location_t.ea: - view_mouse_event_location_t_ea_get(self) -> ea_t - -ida_kernwin.view_mouse_event_location_t.item: - view_mouse_event_location_t_item_get(self) -> selection_item_t const * - -class ida_kernwin.view_mouse_event_t(): - - Proxy of C++ view_mouse_event_t class - - -ida_kernwin.view_mouse_event_t.button: - view_mouse_event_t_button_get(self) -> vme_button_t - -ida_kernwin.view_mouse_event_t.location: - view_mouse_event_t_location_get(self) -> view_mouse_event_location_t - -ida_kernwin.view_mouse_event_t.renderer_pos: - view_mouse_event_t_renderer_pos_get(self) -> renderer_pos_info_t - -ida_kernwin.view_mouse_event_t.rtype: - view_mouse_event_t_rtype_get(self) -> tcc_renderer_type_t - -ida_kernwin.view_mouse_event_t.state: - view_mouse_event_t_state_get(self) -> view_event_state_t - -ida_kernwin.view_mouse_event_t.x: - view_mouse_event_t_x_get(self) -> uint32 - -ida_kernwin.view_mouse_event_t.y: - view_mouse_event_t_y_get(self) -> uint32 - -ida_kernwin.warning(): - - warning(format) - - - Display a message in a message box - - @param message: message to print (formatting is done in Python) - - This function can be used to debug IDAPython scripts - The user will be able to hide messages if they appear twice in a row on - the screen - - - -=== ida_kernwin EPYDOC INJECTIONS === -ida_kernwin.ACF_HAS_SELECTION -""" -there is currently a valid selection -""" - -ida_kernwin.ACF_XTRN_EA -""" -cur_ea is in 'externs' segment -""" - -ida_kernwin.ADF_NO_UNDO -""" -useful for actions that do not modify the database. - -the action does not create an undo point. -""" - -ida_kernwin.ADF_OWN_HANDLER -""" -handler is owned by the action; it'll be destroyed when the action is -unregistered. You shouldn't have to use this. -""" - -ida_kernwin.AHF_VERSION -""" -action handler version (used by 'action_handler_t::flags' ) -""" - -ida_kernwin.AHF_VERSION_MASK -""" -mask for 'action_handler_t::flags' -""" - -ida_kernwin.ASKBTN_BTN1 -""" -First (Yes) button. -""" - -ida_kernwin.ASKBTN_BTN2 -""" -Second (No) button. -""" - -ida_kernwin.ASKBTN_BTN3 -""" -Third (Cancel) button. -""" - -ida_kernwin.ASKBTN_CANCEL -""" -Cancel button. -""" - -ida_kernwin.ASKBTN_NO -""" -No button. -""" - -ida_kernwin.ASKBTN_YES -""" -Yes button. -""" - -ida_kernwin.BWN_ADDRWATCH -""" -the 'Watch List' window -""" - -ida_kernwin.BWN_BPTS -""" -breakpoints -""" - -ida_kernwin.BWN_CALLS -""" -function calls -""" - -ida_kernwin.BWN_CALLS_CALLEES -""" -function calls, callees -""" - -ida_kernwin.BWN_CALLS_CALLERS -""" -function calls, callers -""" - -ida_kernwin.BWN_CALL_STACK -""" -call stack -""" - -ida_kernwin.BWN_CHOOSER -""" -a non-builtin chooser -""" - -ida_kernwin.BWN_CLI -""" -the command-line, in the output window -""" - -ida_kernwin.BWN_CMDPALCSR -""" -the command palette chooser (Qt version only) -""" - -ida_kernwin.BWN_CMDPALWIN -""" -the command palette window (Qt version only) -""" - -ida_kernwin.BWN_CPUREGS -""" -one of the 'General registers', 'FPU register', ... debugger windows -""" - -ida_kernwin.BWN_CUSTVIEW -""" -custom viewers -""" - -ida_kernwin.BWN_CV_LINE_INFOS -""" -custom viewers' lineinfo widget -""" - -ida_kernwin.BWN_DISASM -""" -disassembly views -""" - -ida_kernwin.BWN_DISASMS -""" -Alias. Some BWN_* were confusing, and thus have been renamed. This is -to ensure bw-compat. -""" - -ida_kernwin.BWN_DISASM_ARROWS -""" -disassembly arrows widget -""" - -ida_kernwin.BWN_DUMP -""" -hex dumps -""" - -ida_kernwin.BWN_DUMPS -""" -Alias. Some BWN_* were confusing, and thus have been renamed. This is -to ensure bw-compat. -""" - -ida_kernwin.BWN_ENUMS -""" -enumerations -""" - -ida_kernwin.BWN_EXPORTS -""" -exports -""" - -ida_kernwin.BWN_FRAME -""" -function frame -""" - -ida_kernwin.BWN_FUNCS -""" -functions -""" - -ida_kernwin.BWN_IMPORTS -""" -imports -""" - -ida_kernwin.BWN_LOCALS -""" -the 'locals' debugger window -""" - -ida_kernwin.BWN_LOCTYPS -""" -local types -""" - -ida_kernwin.BWN_MDVIEWCSR -""" -lumina metadata view chooser -""" - -ida_kernwin.BWN_MODULES -""" -modules -""" - -ida_kernwin.BWN_NAMES -""" -names -""" - -ida_kernwin.BWN_NAVBAND -""" -navigation band -""" - -ida_kernwin.BWN_NOTEPAD -""" -notepad -""" - -ida_kernwin.BWN_OUTPUT -""" -the text area, in the output window -""" - -ida_kernwin.BWN_PROBS -""" -problems -""" - -ida_kernwin.BWN_PSEUDOCODE -""" -hexrays decompiler views -""" - -ida_kernwin.BWN_SEARCH -""" -search results -""" - -ida_kernwin.BWN_SEARCHS -""" -Alias. Some BWN_* were confusing, and thus have been renamed. This is -to ensure bw-compat. -""" - -ida_kernwin.BWN_SEGREGS -""" -segment registers -""" - -ida_kernwin.BWN_SEGS -""" -segments -""" - -ida_kernwin.BWN_SELS -""" -selectors -""" - -ida_kernwin.BWN_SHORTCUTCSR -""" -the shortcuts chooser (Qt version only) -""" - -ida_kernwin.BWN_SHORTCUTWIN -""" -the shortcuts window (Qt version only) -""" - -ida_kernwin.BWN_SIGNS -""" -signatures -""" - -ida_kernwin.BWN_SNIPPETS -""" -the 'Execute script' window -""" - -ida_kernwin.BWN_SO_OFFSETS -""" -the 'Structure offsets' dialog's offset panel -""" - -ida_kernwin.BWN_SO_STRUCTS -""" -the 'Structure offsets' dialog's 'Structures and Unions' panel -""" - -ida_kernwin.BWN_SRCPTHMAP_CSR -""" -"Source paths..."'s path mappings chooser -""" - -ida_kernwin.BWN_SRCPTHUND_CSR -""" -"Source paths..."'s undesired paths chooser -""" - -ida_kernwin.BWN_STACK -""" -Alias. Some BWN_* were confusing, and thus have been renamed. This is -to ensure bw-compat. -""" - -ida_kernwin.BWN_STKVIEW -""" -the 'Stack view' debugger window -""" - -ida_kernwin.BWN_STRINGS -""" -strings -""" - -ida_kernwin.BWN_STRUCTS -""" -structures -""" - -ida_kernwin.BWN_THREADS -""" -threads -""" - -ida_kernwin.BWN_TILS -""" -type libraries -""" - -ida_kernwin.BWN_TRACE -""" -trace view -""" - -ida_kernwin.BWN_UNDOHIST -""" -Undo history. -""" - -ida_kernwin.BWN_UNKNOWN -""" -unknown window -""" - -ida_kernwin.BWN_WATCH -""" -the 'watches' debugger window -""" - -ida_kernwin.BWN_XREFS -""" -xrefs -""" - -ida_kernwin.CHCOL_DEC -""" -decimal number -""" - -ida_kernwin.CHCOL_DEFHIDDEN -""" -column should be hidden by default -""" - -ida_kernwin.CHCOL_EA -""" -address -""" - -ida_kernwin.CHCOL_FNAME -""" -function name -""" - -ida_kernwin.CHCOL_FORMAT -""" -column format mask -""" - -ida_kernwin.CHCOL_HEX -""" -hexadecimal number -""" - -ida_kernwin.CHCOL_PATH -""" -file path -""" - -ida_kernwin.CHCOL_PLAIN -""" -plain string -""" - -ida_kernwin.CHITEM_BOLD -""" -display the item in bold -""" - -ida_kernwin.CHITEM_GRAY -""" -gray out the item -""" - -ida_kernwin.CHITEM_ITALIC -""" -display the item in italic -""" - -ida_kernwin.CHITEM_STRIKE -""" -strikeout the item -""" - -ida_kernwin.CHITEM_UNDER -""" -underline the item -""" - -ida_kernwin.CHOOSER_MENU_EDIT -""" -Values of the 'menu_index' parameter. - -Obsolete. Please don't use -""" - -ida_kernwin.CHOOSER_MENU_JUMP -""" -Obsolete. Please don't use. -""" - -ida_kernwin.CHOOSER_MENU_SEARCH -""" -Obsolete. Please don't use. -""" - -ida_kernwin.CHOOSER_MULTI_SELECTION -""" -enable for multiple selections. A callback of type -'chooser_multi_cb_t' will be called for all selected items. -""" - -ida_kernwin.CHOOSER_NO_SELECTION -""" -Flags. - -enable even if there's no selected item. 'n' will be NO_SELECTION for -a callback. -""" - -ida_kernwin.CHOOSER_POPUP_MENU -""" -Add command to the popup menu. -""" - -ida_kernwin.CH_ATTRS -""" -generate ui_get_chooser_item_attrs (gui only) -""" - -ida_kernwin.CH_BUILTIN_MASK -""" -Mask for builtin chooser numbers. Plugins should not use them. -""" - -ida_kernwin.CH_CAN_DEL -""" -allow to delete existing item(s) -""" - -ida_kernwin.CH_CAN_EDIT -""" -allow to edit existing item(s) -""" - -ida_kernwin.CH_CAN_INS -""" -allow to insert new items -""" - -ida_kernwin.CH_CAN_REFRESH -""" -allow to refresh chooser -""" - -ida_kernwin.CH_FORCE_DEFAULT -""" -if a non-modal chooser was already open, change selection to the -default one -""" - -ida_kernwin.CH_KEEP -""" -The chooser instance's lifecycle is not tied to the lifecycle of the -widget showing its contents. Closing the widget will not destroy the -chooser structure. This allows for, e.g., static global chooser -instances that don't need to be allocated on the heap. Also stack- -allocated chooser instances must set this bit. -""" - -ida_kernwin.CH_MODAL -""" -Modal chooser. -""" - -ida_kernwin.CH_MULTI -""" -Obsolete. - -The chooser will allow multi-selection (only for GUI choosers). This -bit is set when using the 'chooser_multi_t' structure. -""" - -ida_kernwin.CH_NOBTNS -""" -do not display ok/cancel/help/search buttons. Meaningful only for gui -modal windows because non-modal windows do not have any buttons -anyway. Text mode does not have them neither. -""" - -ida_kernwin.CH_NOIDB -""" -use the chooser before opening the database -""" - -ida_kernwin.CH_NO_STATUS_BAR -""" -don't show a status bar -""" - -ida_kernwin.CH_QFLT -""" -open with quick filter enabled and focused -""" - -ida_kernwin.CH_QFTYP_DEFAULT -""" -set quick filtering type to the possible existing default for this -chooser -""" - -ida_kernwin.CH_QFTYP_FUZZY -""" -fuzzy search quick filter type -""" - -ida_kernwin.CH_QFTYP_NORMAL -""" -normal (i.e., lexicographical) quick filter type -""" - -ida_kernwin.CH_QFTYP_REGEX -""" -regex quick filter type -""" - -ida_kernwin.CH_QFTYP_WHOLE_WORDS -""" -whole words quick filter type -""" - -ida_kernwin.CH_RESTORE -""" -restore floating position if present (equivalent of WOPN_RESTORE) (GUI -version only) -""" - -ida_kernwin.CLNL_FINDCMT -""" -Search for the comment symbol everywhere in the line, not only at the -beginning. -""" - -ida_kernwin.CLNL_LTRIM -""" -Remove leading space characters. -""" - -ida_kernwin.CLNL_RTRIM -""" -Remove trailing space characters. -""" - -ida_kernwin.CREATETB_ADV -""" -toolbar is for 'advanced mode' only -""" - -ida_kernwin.DP_BEFORE -""" -used with 'DP_INSIDE' . - -place src_form before dst_form in the tab bar instead of after -""" - -ida_kernwin.DP_BOTTOM -""" -Dock src_form below dest_form. -""" - -ida_kernwin.DP_FLOATING -""" -Make src_form floating. -""" - -ida_kernwin.DP_INSIDE -""" -Create a new tab bar with both src_form and dest_form. -""" - -ida_kernwin.DP_LEFT -""" -Dock src_form to the left of dest_form. -""" - -ida_kernwin.DP_RIGHT -""" -Dock src_form to the right of dest_form. -""" - -ida_kernwin.DP_TAB -""" -Place src_form into a tab next to dest_form, if dest_form is in a tab -bar (otherwise the same as 'DP_INSIDE' ) -""" - -ida_kernwin.DP_TOP -""" -Dock src_form above dest_form. -""" - -ida_kernwin.HIF_IDENTIFIER -""" -text is an identifier (i.e., when searching for the current highlight, -SEARCH_IDENT will be used) -""" - -ida_kernwin.HIF_LOCKED -""" -locked; clicking/moving the cursor around doesn't change the highlight -""" - -ida_kernwin.HIF_REGISTER -""" -text represents a register (aliases/subregisters will be highlit as -well) -""" - -ida_kernwin.HIST_CMD -""" -commands -""" - -ida_kernwin.HIST_CMT -""" -comments -""" - -ida_kernwin.HIST_DIR -""" -directory names (text version only) -""" - -ida_kernwin.HIST_FILE -""" -file names -""" - -ida_kernwin.HIST_IDENT -""" -names -""" - -ida_kernwin.HIST_SEG -""" -segment names -""" - -ida_kernwin.HIST_SRCH -""" -search substrings -""" - -ida_kernwin.HIST_TYPE -""" -type declarations -""" - -ida_kernwin.IWID_ADDRWATCH -""" -address watches (47) -""" - -ida_kernwin.IWID_ALL -""" -mask -""" - -ida_kernwin.IWID_BPTS -""" -breakpoints (13) -""" - -ida_kernwin.IWID_CALLS -""" -function calls (11) -""" - -ida_kernwin.IWID_CALLS_CALLEES -""" -funcalls, callees (50) -""" - -ida_kernwin.IWID_CALLS_CALLERS -""" -funcalls, callers (49) -""" - -ida_kernwin.IWID_CALL_STACK -""" -call stack (17) -""" - -ida_kernwin.IWID_CHOOSER -""" -chooser (37) -""" - -ida_kernwin.IWID_CLI -""" -input line (33) -""" - -ida_kernwin.IWID_CMDPALCSR -""" -command palette (43) -""" - -ida_kernwin.IWID_CMDPALWIN -""" -command palette (44) -""" - -ida_kernwin.IWID_CPUREGS -""" -registers (40) -""" - -ida_kernwin.IWID_CUSTVIEW -""" -custom viewers (46) -""" - -ida_kernwin.IWID_CV_LINE_INFOS -""" -lineinfo widget (53) -""" - -ida_kernwin.IWID_DISASM -""" -disassembly views (29) -""" - -ida_kernwin.IWID_DISASM_ARROWS -""" -arrows widget (52) -""" - -ida_kernwin.IWID_DUMP -""" -hex dumps (30) -""" - -ida_kernwin.IWID_ENUMS -""" -enumerations (27) -""" - -ida_kernwin.IWID_EXPORTS -""" -exports (0) -""" - -ida_kernwin.IWID_FRAME -""" -function frame (25) -""" - -ida_kernwin.IWID_FUNCS -""" -functions (3) -""" - -ida_kernwin.IWID_IMPORTS -""" -imports (1) -""" - -ida_kernwin.IWID_LOCALS -""" -locals (35) -""" - -ida_kernwin.IWID_LOCTYPS -""" -local types (10) -""" - -ida_kernwin.IWID_MDVIEWCSR -""" -lumina md view (51) -""" - -ida_kernwin.IWID_MODULES -""" -modules (15) -""" - -ida_kernwin.IWID_NAMES -""" -names (2) -""" - -ida_kernwin.IWID_NAVBAND -""" -navigation band (26) -""" - -ida_kernwin.IWID_NOTEPAD -""" -notepad (31) -""" - -ida_kernwin.IWID_OUTPUT -""" -output (32) -""" - -ida_kernwin.IWID_PROBS -""" -problems (12) -""" - -ida_kernwin.IWID_PSEUDOCODE -""" -decompiler (48) -""" - -ida_kernwin.IWID_SEARCH -""" -search results (19) -""" - -ida_kernwin.IWID_SEGREGS -""" -segment registers (6) -""" - -ida_kernwin.IWID_SEGS -""" -segments (5) -""" - -ida_kernwin.IWID_SELS -""" -selectors (7) -""" - -ida_kernwin.IWID_SHORTCUTCSR -""" -shortcuts chooser (38) -""" - -ida_kernwin.IWID_SHORTCUTWIN -""" -shortcuts window (39) -""" - -ida_kernwin.IWID_SIGNS -""" -signatures (8) -""" - -ida_kernwin.IWID_SNIPPETS -""" -snippets (45) -""" - -ida_kernwin.IWID_SO_OFFSETS -""" -stroff (42) -""" - -ida_kernwin.IWID_SO_STRUCTS -""" -stroff (41) -""" - -ida_kernwin.IWID_SRCPTHMAP_CSR -""" -mappings chooser (54) -""" - -ida_kernwin.IWID_SRCPTHUND_CSR -""" -undesired chooser (55) -""" - -ida_kernwin.IWID_STACK -""" -Alias. Some IWID_* were confusing, and thus have been renamed. This is -to ensure bw-compat. -""" - -ida_kernwin.IWID_STKVIEW -""" -stack view (36) -""" - -ida_kernwin.IWID_STRINGS -""" -strings (4) -""" - -ida_kernwin.IWID_STRUCTS -""" -structures (28) -""" - -ida_kernwin.IWID_THREADS -""" -threads (14) -""" - -ida_kernwin.IWID_TILS -""" -type libraries (9) -""" - -ida_kernwin.IWID_TRACE -""" -trace view (16) -""" - -ida_kernwin.IWID_UNDOHIST -""" -Undo history (56) -""" - -ida_kernwin.IWID_WATCH -""" -watches (34) -""" - -ida_kernwin.IWID_XREFS -""" -xrefs (18) -""" - -ida_kernwin.MFF_FAST -""" -Execute code as soon as possible. this mode is ok for calling ui -related functions that do not query the database. -""" - -ida_kernwin.MFF_NOWAIT -""" -Do not wait for the request to be executed. the caller should ensure -that the request is not destroyed until the execution completes. if -not, the request will be ignored. 'execute_sync()' returns the request -id in this case. it can be used in 'cancel_exec_request()' . This flag -can be used to delay the code execution until the next UI loop run -even from the main thread. -""" - -ida_kernwin.MFF_READ -""" -Execute code only when ida is idle and it is safe to query the -database. this mode is recommended only for code that does not modify -the database. (nb: ida may be in the middle of executing another user -request, for example it may be waiting for him to enter values into a -modal dialog box) -""" - -ida_kernwin.MFF_WRITE -""" -Execute code only when ida is idle and it is safe to modify the -database. in particular, this flag will suspend execution if there is -a modal dialog box on the screen this mode can be used to call any ida -api function 'MFF_WRITE' implies 'MFF_READ' -""" - -ida_kernwin.SETMENU_APP -""" -add menu item after the specified path -""" - -ida_kernwin.SETMENU_FIRST -""" -add item to the beginning of menu -""" - -ida_kernwin.SETMENU_INS -""" -add menu item before the specified path (default) -""" - -ida_kernwin.UIJMP_ACTIVATE -""" -activate the new window -""" - -ida_kernwin.UIJMP_DONTPUSH -""" -in the navigation history - -do not remember the current address -""" - -ida_kernwin.UIJMP_IDAVIEW -""" -jump in idaview (by default any eaview is good) -""" - -ida_kernwin.VES_SHIFT -""" -state & 1 => Shift is pressedstate & 2 => Alt is pressedstate & 4 => -Ctrl is pressedstate & 8 => Mouse left button is pressedstate & 16 => -Mouse right button is pressedstate & 32 => Mouse middle button is -pressedstate & 128 => Meta is pressed (OSX only) -""" -=== ida_kernwin EPYDOC INJECTIONS END === -ida_lines.COLSTR(): - - Utility function to create a colored line - @param str: The string - @param tag: Color tag constant. One of SCOLOR_XXXX - - -ida_lines.add_extra_cmt(): - - add_extra_cmt(ea, isprev, format) -> bool - - - Add anterior/posterior comment line(s). - - @param ea: linear address (C++: ea_t) - @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) - @param format: printf() style format string. may contain - to denote - new lines. The resulting string should not contain - comment characters (;), the kernel will add them - automatically. (C++: const char *) - @return: true if success - - -ida_lines.add_extra_line(): - - add_extra_line(ea, isprev, format) -> bool - - - Add anterior/posterior non-comment line(s). - - @param ea: linear address (C++: ea_t) - @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) - @param format: printf() style format string. may contain - to denote - new lines. (C++: const char *) - @return: true if success - - -ida_lines.add_pgm_cmt(): - - add_pgm_cmt(format) -> bool - - - Add anterior comment line(s) at the start of program. - - @param format: printf() style format string. may contain - to denote - new lines. The resulting string should not contain - comment characters (;), the kernel will add them - automatically. (C++: const char *) - @return: true if success - - -ida_lines.add_sourcefile(): - - add_sourcefile(ea1, ea2, filename) -> bool - - - Mark a range of address as belonging to a source file. An address - range may belong only to one source file. A source file may be - represented by several address ranges. - - @param ea1: linear address of start of the address range (C++: ea_t) - @param ea2: linear address of end of the address range (excluded) - (C++: ea_t) - @param filename: name of source file. (C++: const char *) - @return: success - - -class ida_lines.bgcolors_t(): - - Proxy of C++ bgcolors_t class - - -ida_lines.bgcolors_t.epilog_color: - bgcolors_t_epilog_color_get(self) -> bgcolor_t - -ida_lines.bgcolors_t.prolog_color: - bgcolors_t_prolog_color_get(self) -> bgcolor_t - -ida_lines.bgcolors_t.switch_color: - bgcolors_t_switch_color_get(self) -> bgcolor_t - -ida_lines.calc_bg_color(): - - calc_bg_color(ea) -> bgcolor_t - - - Get background color for line at 'ea' - - @param ea (C++: ea_t) - @return: RGB color - - -ida_lines.calc_prefix_color(): - - calc_prefix_color(ea) -> color_t - - - Get prefix color for line at 'ea' - - @param ea (C++: ea_t) - @return: Line prefix colors - - -ida_lines.create_encoding_helper(): - - create_encoding_helper(encidx=-1, nr=nr_once) -> encoder_t * - - -ida_lines.del_extra_cmt(): - - del_extra_cmt(ea, what) - - -ida_lines.del_sourcefile(): - - del_sourcefile(ea) -> bool - - - Delete information about the source file. - - @param ea: linear address (C++: ea_t) - @return: success - - -ida_lines.delete_extra_cmts(): - - delete_extra_cmts(ea, what) - - -ida_lines.generate_disasm_line(): - - generate_disasm_line(ea, flags=0) -> bool - - -ida_lines.generate_disassembly(): - - generate_disassembly(ea, max_lines, as_stack, notags) -> PyObject * - - - Generate disassembly lines (many lines) and put them into a buffer - - @param ea: address to generate disassembly for - @param max_lines: how many lines max to generate - @param as_stack: Display undefined items as 2/4/8 bytes - @return: - - None on failure - - tuple(most_important_line_number, tuple(lines)) : Returns a tuple containing - the most important line number and a tuple of generated lines - - -ida_lines.get_extra_cmt(): - - get_extra_cmt(ea, what) -> ssize_t - - -ida_lines.get_first_free_extra_cmtidx(): - - get_first_free_extra_cmtidx(ea, start) -> int - - -ida_lines.get_sourcefile(): - - get_sourcefile(ea, bounds=None) -> char const * - - - Get name of source file occupying the given address. - - @param ea: linear address (C++: ea_t) - @param bounds: pointer to the output buffer with the address range for - the current file. May be NULL. (C++: range_t *) - @return: NULL if source file information is not found, otherwise - returns pointer to file name - - -ida_lines.requires_color_esc(): - - Checks if the given character requires escaping - @param c: character (string of one char) - @return: Boolean - - - Is the given char a color escape character? - - -ida_lines.set_user_defined_prefix(): - - set_user_defined_prefix(width, pycb) -> PyObject * - - - User-defined line-prefixes are displayed just after the autogenerated - line prefixes. In order to use them, the plugin should call the - following function to specify its width and contents. - @param width: the width of the user-defined prefix - @param callback: a get_user_defined_prefix callback to get the contents of the prefix. - Its arguments: - ea - linear address - lnnum - line number - indent - indent of the line contents (-1 means the default instruction) - indent and is used for instruction itself. see explanations for printf_line() - line - the line to be generated. the line usually contains color tags this argument - can be examined to decide whether to generated the prefix - It returns a buffer of size < bufsize - - In order to remove the callback before unloading the plugin, specify the width = 0 or the callback = None - - -ida_lines.tag_addr(): - - tag_addr(ea) -> PyObject * - - - Insert an address mark into a string. - - @param ea: address to include (C++: ea_t) - - -ida_lines.tag_advance(): - - tag_advance(line, cnt) -> int - - - Move pointer to a 'line' to 'cnt' positions right. Take into account - escape sequences. - - @param line: pointer to string (C++: const char *) - @param cnt: number of positions to move right (C++: int) - @return: moved pointer - - -ida_lines.tag_remove(): - - tag_remove(nonnul_instr) -> PyObject * - - - Remove color escape sequences from a string - @param colstr: the colored string with embedded tags - @return: a new string w/o the tags - - -ida_lines.tag_skipcode(): - - tag_skipcode(line) -> int - - - Skip one color code. This function should be used if you are - interested in color codes and want to analyze all of them. Otherwise - 'tag_skipcodes()' function is better since it will skip all colors at - once. This function will skip the current color code if there is one. - If the current symbol is not a color code, it will return the input. - - @param line (C++: const char *) - @return: moved pointer - - -ida_lines.tag_skipcodes(): - - tag_skipcodes(line) -> int - - - Move the pointer past all color codes. - - @param line: can't be NULL (C++: const char *) - @return: moved pointer, can't be NULL - - -ida_lines.tag_strlen(): - - tag_strlen(line) -> ssize_t - - - Calculate length of a colored string This function computes the length - in unicode codepoints of a line - - @param line (C++: const char *) - @return: the number of codepoints in the line, or -1 on error - - -ida_lines.update_extra_cmt(): - - update_extra_cmt(ea, what, str) - - - -=== ida_lines EPYDOC INJECTIONS === -ida_lines.COLOR_ADDR_SIZE -""" -Size of a tagged address (see 'COLOR_ADDR' ) -""" - -ida_lines.COLOR_BG_MAX -""" -Max color number. -""" - -ida_lines.COLOR_CODE -""" -Single instruction. -""" - -ida_lines.COLOR_CURITEM -""" -Current item. -""" - -ida_lines.COLOR_CURLINE -""" -Current line. -""" - -ida_lines.COLOR_DATA -""" -Data bytes. -""" - -ida_lines.COLOR_DEFAULT -""" -Default. -""" - -ida_lines.COLOR_ESC -""" -Escape character (Quote next character). This is needed to output '\\1' -and '\\2' characters. -""" - -ida_lines.COLOR_EXTERN -""" -External name definition segment. -""" - -ida_lines.COLOR_HIDLINE -""" -Hidden line. -""" - -ida_lines.COLOR_INV -""" -Escape character (Inverse foreground and background colors). This -escape character has no corresponding 'COLOR_OFF' . Its action -continues until the next 'COLOR_INV' or end of line. -""" - -ida_lines.COLOR_LIBFUNC -""" -Library function. -""" - -ida_lines.COLOR_LUMFUNC -""" -Lumina function. -""" - -ida_lines.COLOR_OFF -""" -Followed by a color code ( 'color_t' ). - -Escape character (OFF). -""" - -ida_lines.COLOR_ON -""" -Followed by a color code ( 'color_t' ). - -Escape character (ON). -""" - -ida_lines.COLOR_REGFUNC -""" -Regular function. -""" - -ida_lines.COLOR_SELECTED -""" -Selected. -""" - -ida_lines.COLOR_UNKNOWN -""" -Unexplored byte. -""" - -ida_lines.SCOLOR_ADDR -""" -Hidden address mark. -""" - -ida_lines.SCOLOR_ALTOP -""" -Alternative operand. -""" - -ida_lines.SCOLOR_ASMDIR -""" -Assembler directive. -""" - -ida_lines.SCOLOR_AUTOCMT -""" -Automatic comment. -""" - -ida_lines.SCOLOR_BINPREF -""" -Binary line prefix bytes. -""" - -ida_lines.SCOLOR_CHAR -""" -Char constant in instruction. -""" - -ida_lines.SCOLOR_CNAME -""" -Regular code name. -""" - -ida_lines.SCOLOR_CODNAME -""" -Dummy code name. -""" - -ida_lines.SCOLOR_COLLAPSED -""" -Collapsed line. -""" - -ida_lines.SCOLOR_CREF -""" -Code reference. -""" - -ida_lines.SCOLOR_CREFTAIL -""" -Code reference to tail byte. -""" - -ida_lines.SCOLOR_DATNAME -""" -Dummy Data Name. -""" - -ida_lines.SCOLOR_DCHAR -""" -Char constant in data directive. -""" - -ida_lines.SCOLOR_DEFAULT -""" -Default. -""" - -ida_lines.SCOLOR_DEMNAME -""" -Demangled Name. -""" - -ida_lines.SCOLOR_DNAME -""" -Regular Data Name. -""" - -ida_lines.SCOLOR_DNUM -""" -Numeric constant in data directive. -""" - -ida_lines.SCOLOR_DREF -""" -Data reference. -""" - -ida_lines.SCOLOR_DREFTAIL -""" -Data reference to tail byte. -""" - -ida_lines.SCOLOR_DSTR -""" -String constant in data directive. -""" - -ida_lines.SCOLOR_ERROR -""" -Error or problem. -""" - -ida_lines.SCOLOR_ESC -""" -Escape character (Quote next character) -""" - -ida_lines.SCOLOR_EXTRA -""" -Extra line. -""" - -ida_lines.SCOLOR_HIDNAME -""" -Hidden name. -""" - -ida_lines.SCOLOR_IMPNAME -""" -Imported name. -""" - -ida_lines.SCOLOR_INSN -""" -Instruction. -""" - -ida_lines.SCOLOR_INV -""" -Escape character (Inverse colors) -""" - -ida_lines.SCOLOR_KEYWORD -""" -Keywords. -""" - -ida_lines.SCOLOR_LIBNAME -""" -Library function name. -""" - -ida_lines.SCOLOR_LOCNAME -""" -Local variable name. -""" - -ida_lines.SCOLOR_MACRO -""" -Macro. -""" - -ida_lines.SCOLOR_NUMBER -""" -Numeric constant in instruction. -""" - -ida_lines.SCOLOR_OFF -""" -Escape character (OFF) -""" - -ida_lines.SCOLOR_ON -""" -Escape character (ON) -""" - -ida_lines.SCOLOR_PREFIX -""" -Line prefix. -""" - -ida_lines.SCOLOR_REG -""" -Register name. -""" - -ida_lines.SCOLOR_REGCMT -""" -Regular comment. -""" - -ida_lines.SCOLOR_RPTCMT -""" -Repeatable comment (defined not here) -""" - -ida_lines.SCOLOR_SEGNAME -""" -Segment name. -""" - -ida_lines.SCOLOR_STRING -""" -String constant in instruction. -""" - -ida_lines.SCOLOR_SYMBOL -""" -Punctuation. -""" - -ida_lines.SCOLOR_UNAME -""" -Regular unknown name. -""" - -ida_lines.SCOLOR_UNKNAME -""" -Dummy unknown name. -""" - -ida_lines.SCOLOR_VOIDOP -""" -Void operand. -""" -=== ida_lines EPYDOC INJECTIONS END === -ida_loader.base2file(): - - base2file(fp, pos, ea1, ea2) -> int - - - Unload database to a binary file. This function works for wide byte - processors too. - - @param fp: pointer to file (C++: FILE *) - @param pos: position in the file (C++: qoff64_t) - @param ea1: range of source linear addresses (C++: ea_t) - @param ea2: range of source linear addresses (C++: ea_t) - @return: 1-ok(always), write error leads to immediate exit - - -ida_loader.build_snapshot_tree(): - - build_snapshot_tree(root) -> bool - - - Build the snapshot tree. - - @param root: snapshot root that will contain the snapshot tree - elements. (C++: snapshot_t *) - @return: success - - -ida_loader.clr_database_flag(): - - clr_database_flag(dbfl) - - -ida_loader.extract_module_from_archive(): - - extract_module_from_archive(fname, is_remote=False) -> PyObject * - - - Extract a module for an archive file. Parse an archive file, show the - list of modules to the user, allow him to select a module, extract the - selected module to a file (if the extract module is an archive, repeat - the process). This function can handle ZIP, AR, AIXAR, OMFLIB files. - The temporary file will be automatically deleted by IDA at the end. - - @param is_remote: is the input file remote? (C++: bool) - - -ida_loader.file2base(): - - file2base(li, pos, ea1, ea2, patchable) -> int - - - Load portion of file into the database. This function will include - (ea1..ea2) into the addressing space of the program (make it enabled) - - @param li: pointer of input source (C++: linput_t *) - @param pos: position in the file (C++: qoff64_t) - @param ea1: range of destination linear addresses (C++: ea_t) - @param ea2: range of destination linear addresses (C++: ea_t) - @param patchable: should the kernel remember correspondence of file - offsets to linear addresses. (C++: int) - - -ida_loader.find_plugin(): - - find_plugin(name, load_if_needed=False) -> plugin_t * - - - Find a user-defined plugin and optionally load it. - - @param name: short plugin name without path and extension, or absolute - path to the file name (C++: const char *) - @param load_if_needed: if the plugin is not present in the memory, try - to load it (C++: bool) - @return: pointer to plugin description block - - -ida_loader.flush_buffers(): - - flush_buffers() -> int - - - Flush buffers to the disk. - - -ida_loader.gen_exe_file(): - - gen_exe_file(fp) -> int - - - Generate an exe file (unload the database in binary form). - - @param fp (C++: FILE *) - @return: fp the output file handle. if fp == NULL then return: 1: - can generate an executable file 0: can't generate an - executable file - - -ida_loader.gen_file(): - - gen_file(otype, fp, ea1, ea2, flags) -> int - - - Generate an output file. 'OFILE_EXE' : - - @param otype: type of output file. (C++: ofile_type_t) - @param fp: the output file handle (C++: FILE *) - @param ea1: start address. For some file types this argument is - ignored (C++: ea_t) - @param ea2: end address. For some file types this argument is ignored - as usual in ida, the end address of the range is not - included (C++: ea_t) - @param flags: Generate file flags (C++: int) - @return: number of the generated lines. -1 if an error occurred - - -ida_loader.get_basic_file_type(): - - get_basic_file_type(li) -> filetype_t - - - Get the input file type. This function can recognize libraries and zip - files. - - @param li (C++: linput_t *) - - -ida_loader.get_elf_debug_file_directory(): - - get_elf_debug_file_directory() -> char const * - - - Get the value of the ELF_DEBUG_FILE_DIRECTORY configuration directive. - - -ida_loader.get_file_type_name(): - - get_file_type_name() -> size_t - - - Get name of the current file type. The current file type is kept in - \inf{filetype}. - - @return: size of answer, this function always succeeds - - -ida_loader.get_fileregion_ea(): - - get_fileregion_ea(offset) -> ea_t - - - Get linear address which corresponds to the specified input file - offset. If can't be found, return 'BADADDR' - - @param offset (C++: qoff64_t) - - -ida_loader.get_fileregion_offset(): - - get_fileregion_offset(ea) -> qoff64_t - - - Get offset in the input file which corresponds to the given ea. If the - specified ea can't be mapped into the input file offset, return -1. - - @param ea (C++: ea_t) - - -ida_loader.get_path(): - - get_path(pt) -> char const * - - - Get the file path - - @param pt: file path type Types of the file pathes (C++: path_type_t) - @return: file path, never returns NULL - - -ida_loader.get_plugin_options(): - - get_plugin_options(plugin) -> char const * - - - Get plugin options from the command line. If the user has specified - the options in the -Oplugin_name:options format, them this function - will return the 'options' part of it The 'plugin' parameter should - denote the plugin name Returns NULL if there we no options specified - - @param plugin (C++: const char *) - - -class ida_loader.idp_desc_t(): - - Proxy of C++ idp_desc_t class - - -ida_loader.idp_desc_t.checked: - idp_desc_t_checked_get(self) -> bool - -ida_loader.idp_desc_t.family: - idp_desc_t_family_get(self) -> qstring * - -ida_loader.idp_desc_t.is_script: - idp_desc_t_is_script_get(self) -> bool - -ida_loader.idp_desc_t.mtime: - idp_desc_t_mtime_get(self) -> time_t - -ida_loader.idp_desc_t.names: - idp_desc_t_names_get(self) -> idp_names_t * - -ida_loader.idp_desc_t.path: - idp_desc_t_path_get(self) -> qstring * - -class ida_loader.idp_name_t(): - - Proxy of C++ idp_name_t class - - -ida_loader.idp_name_t.hidden: - idp_name_t_hidden_get(self) -> bool - -ida_loader.idp_name_t.lname: - idp_name_t_lname_get(self) -> qstring * - -ida_loader.idp_name_t.sname: - idp_name_t_sname_get(self) -> qstring * - -ida_loader.is_database_flag(): - - is_database_flag(dbfl) -> bool - - - Get the current database flag - - @param dbfl: flag Database flags (C++: uint32) - @return: the state of the flag (set or cleared) - - -ida_loader.is_trusted_idb(): - - is_trusted_idb() -> bool - - - Is the database considered as trusted? - - -ida_loader.load_and_run_plugin(): - - load_and_run_plugin(name, arg) -> bool - - - Load & run a plugin. - - - @param name (C++: const char *) - @param arg (C++: size_t) - - -ida_loader.load_binary_file(): - - load_binary_file(filename, li, _neflags, fileoff, basepara, binoff, nbytes) -> bool - - - Load a binary file into the database. This function usually is called - from ui. - - @param filename: the name of input file as is (if the input file is - from library, then this is the name from the library) - (C++: const char *) - @param li: loader input source (C++: linput_t *) - @param _neflags: Load file flags . For the first file, the flag - NEF_FIRST must be set. (C++: ushort) - @param fileoff: Offset in the input file (C++: qoff64_t) - @param basepara: Load address in paragraphs (C++: ea_t) - @param binoff: Load offset (load_address=(basepara<<4)+binoff) (C++: - ea_t) - @param nbytes: Number of bytes to load from the file. 0: up to the - end of the file (C++: uint64) - - -ida_loader.load_ids_module(): - - load_ids_module(fname) -> int - - - Load and apply IDS file. This function loads the specified IDS file - and applies it to the database. If the program imports functions from - a module with the same name as the name of the ids file being loaded, - then only functions from this module will be affected. Otherwise (i.e. - when the program does not import a module with this name) any function - in the program may be affected. - - @param fname: name of file to apply (C++: char *) - - -ida_loader.load_plugin(): - - load_plugin(name) -> PyObject * - - - Loads a plugin - @return: - - None if plugin could not be loaded - - An opaque object representing the loaded plugin - - -class ida_loader.loader_t(): - - Proxy of C++ loader_t class - - -ida_loader.loader_t.flags: - loader_t_flags_get(self) -> uint32 - -ida_loader.loader_t.version: - loader_t_version_get(self) -> uint32 - -ida_loader.mem2base(): - - mem2base(py_mem, ea, fpos=-1) -> int - - - Load database from the memory. - @param mem: the buffer - @param ea: start linear addresses - @param fpos: position in the input file the data is taken from. - if == -1, then no file position correspond to the data. - @return: - - Returns zero if the passed buffer was not a string - - Otherwise 1 is returned - - -class ida_loader.plugin_info_t(): - - Proxy of C++ plugin_info_t class - - -ida_loader.plugin_info_t.arg: - plugin_info_t_arg_get(self) -> size_t - -ida_loader.plugin_info_t.comment: - plugin_info_t_comment_get(self) -> char * - -ida_loader.plugin_info_t.dllmem: - plugin_info_t_dllmem_get(self) -> idadll_t * - -ida_loader.plugin_info_t.entry: - plugin_info_t_entry_get(self) -> plugin_t * - -ida_loader.plugin_info_t.flags: - plugin_info_t_flags_get(self) -> int - -ida_loader.plugin_info_t.hotkey: - plugin_info_t_hotkey_get(self) -> ushort - -ida_loader.plugin_info_t.name: - plugin_info_t_name_get(self) -> char * - -ida_loader.plugin_info_t.next: - plugin_info_t_next_get(self) -> plugin_info_t - -ida_loader.plugin_info_t.org_hotkey: - plugin_info_t_org_hotkey_get(self) -> ushort - -ida_loader.plugin_info_t.org_name: - plugin_info_t_org_name_get(self) -> char * - -ida_loader.plugin_info_t.path: - plugin_info_t_path_get(self) -> char * - -ida_loader.process_archive(): - - process_archive(temp_file, li, module_name, neflags, defmember, loader) -> int - - - Calls 'loader_t::process_archive()' For parameters and return value - description look at 'loader_t::process_archive()' . Additional - parameter: - - @param temp_file (C++: qstring *) - @param li (C++: linput_t *) - @param module_name (C++: qstring *) - @param neflags (C++: ushort *) - @param defmember (C++: const char *) - @param loader: pointer to load_info_t structure. (C++: const - load_info_t *) - - -class ida_loader.qvector_snapshotvec_t(): - - Proxy of C++ qvector<(p.snapshot_t)> class - - -ida_loader.qvector_snapshotvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_loader.qvector_snapshotvec_t.at(): - - at(self, n) -> snapshot_t - - -ida_loader.qvector_snapshotvec_t.begin(): - - begin(self) -> qvector< snapshot_t * >::iterator - begin(self) -> qvector< snapshot_t * >::const_iterator - - -ida_loader.qvector_snapshotvec_t.capacity(): - - capacity(self) -> size_t - - -ida_loader.qvector_snapshotvec_t.clear(): - - clear(self) - - -ida_loader.qvector_snapshotvec_t.empty(): - - empty(self) -> bool - - -ida_loader.qvector_snapshotvec_t.end(): - - end(self) -> qvector< snapshot_t * >::iterator - end(self) -> qvector< snapshot_t * >::const_iterator - - -ida_loader.qvector_snapshotvec_t.erase(): - - erase(self, it) -> qvector< snapshot_t * >::iterator - erase(self, first, last) -> qvector< snapshot_t * >::iterator - - -ida_loader.qvector_snapshotvec_t.extract(): - - extract(self) -> snapshot_t ** - - -ida_loader.qvector_snapshotvec_t.find(): - - find(self, x) -> qvector< snapshot_t * >::iterator - find(self, x) -> qvector< snapshot_t * >::const_iterator - - -ida_loader.qvector_snapshotvec_t.has(): - - has(self, x) -> bool - - -ida_loader.qvector_snapshotvec_t.inject(): - - inject(self, s, len) - - -ida_loader.qvector_snapshotvec_t.insert(): - - insert(self, it, x) -> qvector< snapshot_t * >::iterator - - -ida_loader.qvector_snapshotvec_t.pop_back(): - - pop_back(self) - - -ida_loader.qvector_snapshotvec_t.push_back(): - - push_back(self, x) - push_back(self) -> snapshot_t *& - - -ida_loader.qvector_snapshotvec_t.qclear(): - - qclear(self) - - -ida_loader.qvector_snapshotvec_t.reserve(): - - reserve(self, cnt) - - -ida_loader.qvector_snapshotvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_loader.qvector_snapshotvec_t.size(): - - size(self) -> size_t - - -ida_loader.qvector_snapshotvec_t.swap(): - - swap(self, r) - - -ida_loader.qvector_snapshotvec_t.truncate(): - - truncate(self) - - -ida_loader.reload_file(): - - reload_file(file, is_remote) -> int - - - Reload the input file. This function reloads the byte values from the - input file. It doesn't modify the segmentation, names, comments, etc. - - @param file: name of the input file. if file == NULL then returns: - 1: can reload the input file 0: can't reload the input - file (C++: const char *) - @param is_remote: is the file located on a remote computer with the - debugger server? (C++: bool) - - -ida_loader.run_plugin(): - - run_plugin(plg, arg) -> bool - - - Runs a plugin - @param plg: A plugin object (returned by load_plugin()) - @return: Boolean - - -ida_loader.save_database(): - - save_database(outfile, flags, root=None, attr=None) -> bool - - - Save current database using a new file name.when both root and attr - are not NULL then the snapshot attributes will be updated, otherwise - the snapshot attributes will be inherited from the current database. - - @param outfile: output database file name (C++: const char *) - @param flags: Database flags (C++: uint32) - @param root: optional: snapshot tree root. (C++: const snapshot_t *) - @param attr: optional: snapshot attributes (C++: const snapshot_t *) - @return: success - - -ida_loader.set_database_flag(): - - set_database_flag(dbfl, cnd=True) - - - Set or clear database flag - - @param dbfl: flag Database flags (C++: uint32) - @param cnd: set if true or clear flag otherwise (C++: bool) - - -ida_loader.set_path(): - - set_path(pt, path) - - - Set the file path - - @param pt: file path type Types of the file pathes (C++: path_type_t) - @param path: new file path, use NULL or empty string to clear the file - path (C++: const char *) - - -class ida_loader.snapshot_t(): - - Proxy of C++ snapshot_t class - - -ida_loader.snapshot_t.children: - snapshot_t_children_get(self) -> qvector_snapshotvec_t - -ida_loader.snapshot_t.clear(): - - clear(self) - - -ida_loader.snapshot_t.desc: - snapshot_t_desc_get(self) -> char [128] - -ida_loader.snapshot_t.filename: - snapshot_t_filename_get(self) -> char [QMAXPATH] - -ida_loader.snapshot_t.flags: - snapshot_t_flags_get(self) -> uint16 - -ida_loader.snapshot_t.id: - snapshot_t_id_get(self) -> qtime64_t - - -=== ida_loader EPYDOC INJECTIONS === -ida_loader.ACCEPT_ARCHIVE -""" -Specify that a file format is served by archive loader See -'loader_t::accept_file' -""" - -ida_loader.ACCEPT_CONTINUE -""" -Specify that the function must be called another time See -'loader_t::accept_file' -""" - -ida_loader.ACCEPT_FIRST -""" -Specify that a file format should be place first in "load file" dialog -box. See 'loader_t::accept_file' -""" - -ida_loader.DBFL_BAK -""" -create backup file (if !DBFL_KILL) -""" - -ida_loader.DBFL_COMP -""" -collect garbage -""" - -ida_loader.DBFL_KILL -""" -delete unpacked database -""" - -ida_loader.DBFL_TEMP -""" -temporary database -""" - -ida_loader.FILEREG_NOTPATCHABLE -""" -form in the file. - -the data is kept in some encoded -""" - -ida_loader.FILEREG_PATCHABLE -""" -means that the input file may be patched (i.e. no compression, no -iterated data, etc) -""" - -ida_loader.GENFLG_ASMINC -""" - 'OFILE_ASM' , 'OFILE_LST' : gen information only about types -""" - -ida_loader.GENFLG_ASMTYPE -""" - 'OFILE_ASM' , 'OFILE_LST' : gen information about types too -""" - -ida_loader.GENFLG_GENHTML -""" - 'OFILE_ASM' , 'OFILE_LST' : generate html ( 'ui_genfile_callback' -will be used) -""" - -ida_loader.GENFLG_IDCTYPE -""" - 'OFILE_IDC' : gen only information about types -""" - -ida_loader.GENFLG_MAPDMNG -""" - 'OFILE_MAP' : demangle names -""" - -ida_loader.GENFLG_MAPLOC -""" - 'OFILE_MAP' : include local names -""" - -ida_loader.GENFLG_MAPNAME -""" - 'OFILE_MAP' : include dummy names -""" - -ida_loader.GENFLG_MAPSEG -""" - 'OFILE_MAP' : generate map of segments -""" - -ida_loader.LDRF_RELOAD -""" -loader recognizes 'NEF_RELOAD' flag -""" - -ida_loader.LDRF_REQ_PROC -""" -Requires a processor to be set. if this bit is not set, load_file() -must call set_processor_type(..., SETPROC_LOADER) -""" - -ida_loader.MAX_DATABASE_DESCRIPTION -""" -Maximum database snapshot description length. -""" - -ida_loader.NEF_CODE -""" -load as a code segment - -for 'load_binary_file()' : -""" - -ida_loader.NEF_FILL -""" -Fill segment gaps. -""" - -ida_loader.NEF_FIRST -""" -into the database. - -This is the first file loaded -""" - -ida_loader.NEF_FLAT -""" -Autocreate FLAT group (PE) -""" - -ida_loader.NEF_IMPS -""" -Create import segment. -""" - -ida_loader.NEF_LALL -""" -Load all segments without questions. -""" - -ida_loader.NEF_LOPT -""" -Display additional loader options dialog. -""" - -ida_loader.NEF_MAN -""" -Manual load. -""" - -ida_loader.NEF_MINI -""" -Create mini database (do not copy segment bytes from the input file; -use only the file header metadata) -""" - -ida_loader.NEF_NAME -""" -Rename entries. -""" - -ida_loader.NEF_RELOAD -""" -reload the file at the same place: - don't create segmentsdon't create -fixup infodon't import segmentsetc load only the bytes into the base. -a loader should have 'LDRF_RELOAD' bit set -""" - -ida_loader.NEF_RSCS -""" -Load resources. -""" - -ida_loader.NEF_SEGS -""" -Create segments. -""" - -ida_loader.PLUGIN_DLL -""" -Pattern to find plugin files. -""" - -ida_loader.SSF_AUTOMATIC -""" -automatic snapshot -""" - -ida_loader.SSUF_DESC -""" -Update the description. -""" - -ida_loader.SSUF_FLAGS -""" -Update the flags. -""" - -ida_loader.SSUF_PATH -""" -Update the path. -""" -=== ida_loader EPYDOC INJECTIONS END === -class ida_moves.bookmarks_t(): - - Proxy of C++ bookmarks_t class - - -ida_moves.bookmarks_t.erase(): - - erase(e, index, ud) -> bool - - -ida_moves.bookmarks_t.find_index(): - - find_index(e, ud) -> uint32 - - -ida_moves.bookmarks_t.get(): - - get(out_entry, out_desc, index, ud) -> bool - - -ida_moves.bookmarks_t.get_desc(): - - get_desc(e, index, ud) -> bool - - -ida_moves.bookmarks_t.mark(): - - mark(e, index, title, desc, ud) -> uint32 - - -ida_moves.bookmarks_t.size(): - - size(e, ud) -> uint32 - - -ida_moves.bookmarks_t_erase(): - - bookmarks_t_erase(e, index, ud) -> bool - - -ida_moves.bookmarks_t_find_index(): - - bookmarks_t_find_index(e, ud) -> uint32 - - -ida_moves.bookmarks_t_get(): - - bookmarks_t_get(out_entry, out_desc, index, ud) -> bool - - -ida_moves.bookmarks_t_get_desc(): - - bookmarks_t_get_desc(e, index, ud) -> bool - - -ida_moves.bookmarks_t_mark(): - - bookmarks_t_mark(e, index, title, desc, ud) -> uint32 - - -ida_moves.bookmarks_t_size(): - - bookmarks_t_size(e, ud) -> uint32 - - -class ida_moves.graph_location_info_t(): - - Proxy of C++ graph_location_info_t class - - -ida_moves.graph_location_info_t.orgx: - graph_location_info_t_orgx_get(self) -> double - -ida_moves.graph_location_info_t.orgy: - graph_location_info_t_orgy_get(self) -> double - -ida_moves.graph_location_info_t.zoom: - graph_location_info_t_zoom_get(self) -> double - -class ida_moves.lochist_entry_t(): - - Proxy of C++ lochist_entry_t class - - -ida_moves.lochist_entry_t.acquire_place(): - - acquire_place(self, p) - - -ida_moves.lochist_entry_t.is_valid(): - - is_valid(self) -> bool - - -ida_moves.lochist_entry_t.place(): - - place(self) -> place_t - place(self) -> place_t - - -ida_moves.lochist_entry_t.plce: - lochist_entry_t_plce_get(self) -> place_t - -ida_moves.lochist_entry_t.renderer_info(): - - renderer_info(self) -> renderer_info_t - renderer_info(self) -> renderer_info_t - - -ida_moves.lochist_entry_t.rinfo: - lochist_entry_t_rinfo_get(self) -> renderer_info_t - -ida_moves.lochist_entry_t.set_place(): - - set_place(self, p) - - -class ida_moves.lochist_t(): - - Proxy of C++ lochist_t class - - -ida_moves.lochist_t.back(): - - back(self, cnt, try_to_unhide) -> bool - - -ida_moves.lochist_t.clear(): - - clear(self) - - -ida_moves.lochist_t.current_index(): - - current_index(self) -> uint32 - - -ida_moves.lochist_t.fwd(): - - fwd(self, cnt, try_to_unhide) -> bool - - -ida_moves.lochist_t.get(): - - get(self, out, index) -> bool - - -ida_moves.lochist_t.get_current(): - - get_current(self) -> lochist_entry_t - - -ida_moves.lochist_t.get_place_id(): - - get_place_id(self) -> int - - -ida_moves.lochist_t.get_template_place(): - - get_template_place(self) -> place_t - - -ida_moves.lochist_t.init(): - - init(self, stream_name, _defpos, _ud, _flags) -> bool - - -ida_moves.lochist_t.is_history_enabled(): - - is_history_enabled(self) -> bool - - -ida_moves.lochist_t.jump(): - - jump(self, try_to_unhide, e) - - -ida_moves.lochist_t.netcode(): - - netcode(self) -> nodeidx_t - - -ida_moves.lochist_t.save(): - - save(self) - - -ida_moves.lochist_t.seek(): - - seek(self, index, try_to_unhide) -> bool - - -ida_moves.lochist_t.set(): - - set(self, index, e) - - -ida_moves.lochist_t.set_current(): - - set_current(self, e) - - -ida_moves.lochist_t.size(): - - size(self) -> uint32 - - -class ida_moves.renderer_info_pos_t(): - - Proxy of C++ renderer_info_pos_t class - - -ida_moves.renderer_info_pos_t.cx: - renderer_info_pos_t_cx_get(self) -> short - -ida_moves.renderer_info_pos_t.cy: - renderer_info_pos_t_cy_get(self) -> short - -ida_moves.renderer_info_pos_t.node: - renderer_info_pos_t_node_get(self) -> int - -class ida_moves.renderer_info_t(): - - Proxy of C++ renderer_info_t class - - -ida_moves.renderer_info_t.clear(): - - clear(self) - - -ida_moves.renderer_info_t.gli: - renderer_info_t_gli_get(self) -> graph_location_info_t - -ida_moves.renderer_info_t.pos: - renderer_info_t_pos_get(self) -> renderer_info_pos_t - -ida_moves.renderer_info_t.rtype: - renderer_info_t_rtype_get(self) -> tcc_renderer_type_t - -class ida_moves.segm_move_info_t(): - - Proxy of C++ segm_move_info_t class - - -ida_moves.segm_move_info_t.size: - segm_move_info_t_size_get(self) -> size_t - -ida_moves.segm_move_info_t.to: - segm_move_info_t_to_get(self) -> ea_t - -class ida_moves.segm_move_info_vec_t(): - - Proxy of C++ qvector<(segm_move_info_t)> class - - -ida_moves.segm_move_info_vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_moves.segm_move_info_vec_t.at(): - - at(self, _idx) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.begin(): - - begin(self) -> segm_move_info_t - begin(self) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_moves.segm_move_info_vec_t.clear(): - - clear(self) - - -ida_moves.segm_move_info_vec_t.empty(): - - empty(self) -> bool - - -ida_moves.segm_move_info_vec_t.end(): - - end(self) -> segm_move_info_t - end(self) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.erase(): - - erase(self, it) -> segm_move_info_t - erase(self, first, last) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.extract(): - - extract(self) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.find(): - - find(self, x) -> segm_move_info_t - find(self, x) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.grow(): - - grow(self, x=segm_move_info_t()) - - -ida_moves.segm_move_info_vec_t.has(): - - has(self, x) -> bool - - -ida_moves.segm_move_info_vec_t.inject(): - - inject(self, s, len) - - -ida_moves.segm_move_info_vec_t.insert(): - - insert(self, it, x) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.pop_back(): - - pop_back(self) - - -ida_moves.segm_move_info_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> segm_move_info_t - - -ida_moves.segm_move_info_vec_t.qclear(): - - qclear(self) - - -ida_moves.segm_move_info_vec_t.reserve(): - - reserve(self, cnt) - - -ida_moves.segm_move_info_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_moves.segm_move_info_vec_t.size(): - - size(self) -> size_t - - -ida_moves.segm_move_info_vec_t.swap(): - - swap(self, r) - - -ida_moves.segm_move_info_vec_t.truncate(): - - truncate(self) - - -class ida_moves.segm_move_infos_t(): - - Proxy of C++ segm_move_infos_t class - - -ida_moves.segm_move_infos_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_moves.segm_move_infos_t.at(): - - at(self, _idx) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.begin(): - - begin(self) -> segm_move_info_t - begin(self) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.capacity(): - - capacity(self) -> size_t - - -ida_moves.segm_move_infos_t.clear(): - - clear(self) - - -ida_moves.segm_move_infos_t.empty(): - - empty(self) -> bool - - -ida_moves.segm_move_infos_t.end(): - - end(self) -> segm_move_info_t - end(self) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.erase(): - - erase(self, it) -> segm_move_info_t - erase(self, first, last) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.extract(): - - extract(self) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.find(): - - find(self, ea) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.grow(): - - grow(self, x=segm_move_info_t()) - - -ida_moves.segm_move_infos_t.has(): - - has(self, x) -> bool - - -ida_moves.segm_move_infos_t.inject(): - - inject(self, s, len) - - -ida_moves.segm_move_infos_t.insert(): - - insert(self, it, x) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.pop_back(): - - pop_back(self) - - -ida_moves.segm_move_infos_t.push_back(): - - push_back(self, x) - push_back(self) -> segm_move_info_t - - -ida_moves.segm_move_infos_t.qclear(): - - qclear(self) - - -ida_moves.segm_move_infos_t.reserve(): - - reserve(self, cnt) - - -ida_moves.segm_move_infos_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_moves.segm_move_infos_t.size(): - - size(self) -> size_t - - -ida_moves.segm_move_infos_t.swap(): - - swap(self, r) - - -ida_moves.segm_move_infos_t.truncate(): - - truncate(self) - - -ida_nalt.add_encoding(): - - add_encoding(encoding) -> int - - - Add a new encoding (e.g. "UTF-8"). - - @param encoding (C++: const char *) - @return: its index (1-based) if it's already in the list, return its - index - - -class ida_nalt.array_parameters_t(): - - Proxy of C++ array_parameters_t class - - -ida_nalt.array_parameters_t.alignment: - array_parameters_t_alignment_get(self) -> int32 - -ida_nalt.array_parameters_t.flags: - array_parameters_t_flags_get(self) -> int32 - -ida_nalt.array_parameters_t.lineitems: - array_parameters_t_lineitems_get(self) -> int32 - -ida_nalt.clr__bnot0(): - - clr__bnot0(ea) - - -ida_nalt.clr__bnot1(): - - clr__bnot1(ea) - - -ida_nalt.clr__invsign0(): - - clr__invsign0(ea) - - -ida_nalt.clr__invsign1(): - - clr__invsign1(ea) - - -ida_nalt.clr_abits(): - - clr_abits(ea, bits) - - -ida_nalt.clr_align_flow(): - - clr_align_flow(ea) - - -ida_nalt.clr_colored_item(): - - clr_colored_item(ea) - - -ida_nalt.clr_fixed_spd(): - - clr_fixed_spd(ea) - - -ida_nalt.clr_has_lname(): - - clr_has_lname(ea) - - -ida_nalt.clr_has_ti(): - - clr_has_ti(ea) - - -ida_nalt.clr_has_ti0(): - - clr_has_ti0(ea) - - -ida_nalt.clr_has_ti1(): - - clr_has_ti1(ea) - - -ida_nalt.clr_libitem(): - - clr_libitem(ea) - - -ida_nalt.clr_lzero0(): - - clr_lzero0(ea) - - -ida_nalt.clr_lzero1(): - - clr_lzero1(ea) - - -ida_nalt.clr_noret(): - - clr_noret(ea) - - -ida_nalt.clr_notcode(): - - clr_notcode(ea) - - - Clear not-code mark. - - - @param ea (C++: ea_t) - - -ida_nalt.clr_notproc(): - - clr_notproc(ea) - - -ida_nalt.clr_retfp(): - - clr_retfp(ea) - - -ida_nalt.clr_terse_struc(): - - clr_terse_struc(ea) - - -ida_nalt.clr_tilcmt(): - - clr_tilcmt(ea) - - -ida_nalt.clr_usemodsp(): - - clr_usemodsp(ea) - - -ida_nalt.clr_usersp(): - - clr_usersp(ea) - - -ida_nalt.clr_userti(): - - clr_userti(ea) - - -ida_nalt.clr_zstroff(): - - clr_zstroff(ea) - - -class ida_nalt.custom_data_type_ids_fids_array(): - - Proxy of C++ wrapped_array_t<(int16,8)> class - - -ida_nalt.custom_data_type_ids_fids_array.data: - custom_data_type_ids_fids_array_data_get(self) -> short (&)[8] - -class ida_nalt.custom_data_type_ids_t(): - - Proxy of C++ custom_data_type_ids_t class - - -ida_nalt.custom_data_type_ids_t.dtid: - custom_data_type_ids_t_dtid_get(self) -> int16 - -ida_nalt.custom_data_type_ids_t.fids: - - __getFids(self) -> custom_data_type_ids_fids_array - - -ida_nalt.dbg_get_input_path(): - - dbg_get_input_path() -> ssize_t - - - Get debugger input file name/path (see 'LFLG_DBG_NOPATH' ) - - -ida_nalt.del_absbase(): - - del_absbase(ea) - - -ida_nalt.del_aflags(): - - del_aflags(ea) - - -ida_nalt.del_alignment(): - - del_alignment(ea) - - -ida_nalt.del_array_parameters(): - - del_array_parameters(ea) - - -ida_nalt.del_custom_data_type_ids(): - - del_custom_data_type_ids(ea) - - -ida_nalt.del_encoding(): - - del_encoding(idx) -> bool - - - Delete an encoding (1-based) - - - @param idx (C++: int) - - -ida_nalt.del_ind_purged(): - - del_ind_purged(ea) - - -ida_nalt.del_item_color(): - - del_item_color(ea) -> bool - - -ida_nalt.del_op_tinfo(): - - del_op_tinfo(ea, n) - - -ida_nalt.del_refinfo(): - - del_refinfo(ea, n) -> bool - - -ida_nalt.del_source_linnum(): - - del_source_linnum(ea) - - -ida_nalt.del_str_type(): - - del_str_type(ea) - - -ida_nalt.del_switch_info(): - - del_switch_info(ea) - - -ida_nalt.del_switch_parent(): - - del_switch_parent(ea) - - -ida_nalt.del_tinfo(): - - del_tinfo(ea) - - -ida_nalt.delete_imports(): - - delete_imports() - - - Delete all imported modules information. - - -ida_nalt.ea2node(): - - ea2node(ea) -> nodeidx_t - - - Get netnode for the specified address. - - - @param ea (C++: ea_t) - - -ida_nalt.encoding_from_strtype(): - - encoding_from_strtype(strtype) -> char const * - - - Get encoding name for this strtype. - - - @param strtype (C++: int32) - - -class ida_nalt.enum_const_t(): - - Proxy of C++ enum_const_t class - - -ida_nalt.enum_const_t.serial: - enum_const_t_serial_get(self) -> uchar - -ida_nalt.enum_const_t.tid: - enum_const_t_tid_get(self) -> tid_t - -ida_nalt.enum_import_names(): - - enum_import_names(mod_index, py_cb) -> int - - - Enumerate imports from a specific module. - Please refer to ex_imports.py example. - - @param mod_index: The module index - @param callback: A callable object that will be invoked with an ea, name (could be None) and ordinal. - @return: 1-finished ok, -1 on error, otherwise callback return value (<=0) - - -ida_nalt.find_custom_refinfo(): - - find_custom_refinfo(name) -> int - - - Get id of a custom refinfo type. - - - @param name (C++: const char *) - - -ida_nalt.get_absbase(): - - get_absbase(ea) -> ea_t - - -ida_nalt.get_aflags(): - - get_aflags(ea) -> uint32 - - -ida_nalt.get_alignment(): - - get_alignment(ea) -> uint32 - - -ida_nalt.get_archive_path(): - - get_archive_path() -> ssize_t - - - Get archive file path from which input file was extracted. - - -ida_nalt.get_array_parameters(): - - get_array_parameters(out, ea) -> ssize_t - - -ida_nalt.get_asm_inc_file(): - - get_asm_inc_file() -> ssize_t - - - Get name of the include file. - - -ida_nalt.get_custom_data_type_ids(): - - get_custom_data_type_ids(cdis, ea) -> int - - -ida_nalt.get_custom_refinfo(): - - get_custom_refinfo(crid) -> custom_refinfo_handler_t const * - - - Get definition of a registered custom refinfo type. - - - @param crid (C++: int) - - -ida_nalt.get_default_encoding_idx(): - - get_default_encoding_idx(bpu) -> int - - - Get default encoding index for a specific string type. - - @param bpu: the amount of bytes per unit (e.g., 1 for ASCII, CP1252, - UTF-8..., 2 for UTF-16, 4 for UTF-32) 0 means no specific - encoding is set - byte values are displayed without - conversion. (C++: int) - - -ida_nalt.get_encoding_bpu(): - - get_encoding_bpu(idx) -> int - - - Get the amount of bytes per unit (e.g., 2 for UTF-16, 4 for UTF-32) - for the encoding with the given index. - - @param idx: the encoding index (C++: int) - @return: the number of bytes per units (1/2/4); -1 means error - - -ida_nalt.get_encoding_name(): - - get_encoding_name(idx) -> char const * - - - Get encoding name for specific index (1-based). - - @param idx (C++: int) - @return: NULL if idx is out of bounds - - -ida_nalt.get_encoding_qty(): - - get_encoding_qty() -> int - - - Get total number of encodings (counted from 0) - - -ida_nalt.get_gotea(): - - get_gotea() -> ea_t - - -ida_nalt.get_ids_modnode(): - - get_ids_modnode() -> netnode - - - Get ids modnode. - - -ida_nalt.get_imagebase(): - - get_imagebase() -> ea_t - - - Get image base address. - - -ida_nalt.get_import_module_name(): - - get_import_module_name(mod_index) -> PyObject * - - - Returns the name of an imported module given its index - @return: None or the module name - - -ida_nalt.get_import_module_qty(): - - get_import_module_qty() -> uint - - - Get number of import modules. - - -ida_nalt.get_ind_purged(): - - get_ind_purged(ea) -> ea_t - - -ida_nalt.get_input_file_path(): - - get_input_file_path() -> ssize_t - - - Get full path of the input file. - - -ida_nalt.get_item_color(): - - get_item_color(ea) -> bgcolor_t - - -ida_nalt.get_op_tinfo(): - - get_op_tinfo(tif, ea, n) -> bool - - -ida_nalt.get_outfile_encoding_idx(): - - get_outfile_encoding_idx() -> int - - - Get the index of the encoding used when producing files 0 means no - that the IDB's default 1 byte-per-unit encoding is used - - -ida_nalt.get_refinfo(): - - get_refinfo(ri, ea, n) -> bool - - -ida_nalt.get_reftype_by_size(): - - get_reftype_by_size(size) -> reftype_t - - - Get REF_... constant from size Supported sizes: 1,2,4,8,16 For other - sizes returns reftype_t(-1) - - @param size (C++: size_t) - - -ida_nalt.get_root_filename(): - - get_root_filename() -> ssize_t - - - Get file name only of the input file. - - -ida_nalt.get_source_linnum(): - - get_source_linnum(ea) -> uval_t - - -ida_nalt.get_str_encoding_idx(): - - get_str_encoding_idx(strtype) -> uchar - - - Get index of the string encoding for this string. - - - @param strtype (C++: int32) - - -ida_nalt.get_str_term1(): - - get_str_term1(strtype) -> char - - -ida_nalt.get_str_term2(): - - get_str_term2(strtype) -> char - - -ida_nalt.get_str_type(): - - get_str_type(ea) -> uint32 - - -ida_nalt.get_str_type_code(): - - get_str_type_code(strtype) -> uchar - - -ida_nalt.get_strtype_bpu(): - - get_strtype_bpu(strtype) -> int - - -ida_nalt.get_switch_parent(): - - get_switch_parent(ea) -> ea_t - - -ida_nalt.get_tinfo(): - - get_tinfo(tif, ea) -> bool - - -ida_nalt.getnode(): - - getnode(ea) -> netnode - - -ida_nalt.has_lname(): - - has_lname(ea) -> bool - - -ida_nalt.has_ti(): - - has_ti(ea) -> bool - - -ida_nalt.has_ti0(): - - has_ti0(ea) -> bool - - -ida_nalt.has_ti1(): - - has_ti1(ea) -> bool - - -ida_nalt.hide_border(): - - hide_border(ea) - - -ida_nalt.hide_item(): - - hide_item(ea) - - -ida_nalt.is__bnot0(): - - is__bnot0(ea) -> bool - - -ida_nalt.is__bnot1(): - - is__bnot1(ea) -> bool - - -ida_nalt.is__invsign0(): - - is__invsign0(ea) -> bool - - -ida_nalt.is__invsign1(): - - is__invsign1(ea) -> bool - - -ida_nalt.is_align_flow(): - - is_align_flow(ea) -> bool - - -ida_nalt.is_colored_item(): - - is_colored_item(ea) -> bool - - -ida_nalt.is_finally_visible_item(): - - is_finally_visible_item(ea) -> bool - - - Is instruction visible? - - - @param ea (C++: ea_t) - - -ida_nalt.is_fixed_spd(): - - is_fixed_spd(ea) -> bool - - -ida_nalt.is_hidden_border(): - - is_hidden_border(ea) -> bool - - -ida_nalt.is_hidden_item(): - - is_hidden_item(ea) -> bool - - -ida_nalt.is_libitem(): - - is_libitem(ea) -> bool - - -ida_nalt.is_lzero0(): - - is_lzero0(ea) -> bool - - -ida_nalt.is_lzero1(): - - is_lzero1(ea) -> bool - - -ida_nalt.is_noret(): - - is_noret(ea) -> bool - - -ida_nalt.is_notcode(): - - is_notcode(ea) -> bool - - - Is the address marked as not-code? - - - @param ea (C++: ea_t) - - -ida_nalt.is_notproc(): - - is_notproc(ea) -> bool - - -ida_nalt.is_pascal(): - - is_pascal(strtype) -> bool - - -ida_nalt.is_reftype_target_optional(): - - is_reftype_target_optional(type) -> bool - - - Can the target be calculated using operand value? - - - @param type (C++: reftype_t) - - -ida_nalt.is_retfp(): - - is_retfp(ea) -> bool - - -ida_nalt.is_terse_struc(): - - is_terse_struc(ea) -> bool - - -ida_nalt.is_tilcmt(): - - is_tilcmt(ea) -> bool - - -ida_nalt.is_usersp(): - - is_usersp(ea) -> bool - - -ida_nalt.is_userti(): - - is_userti(ea) -> bool - - -ida_nalt.is_visible_item(): - - is_visible_item(ea) -> bool - - - Test visibility of item at given ea. - - - @param ea (C++: ea_t) - - -ida_nalt.is_zstroff(): - - is_zstroff(ea) -> bool - - -ida_nalt.node2ea(): - - node2ea(ndx) -> ea_t - - -class ida_nalt.opinfo_t(): - - Proxy of C++ opinfo_t class - - -ida_nalt.opinfo_t.cd: - opinfo_t_cd_get(self) -> custom_data_type_ids_t - -ida_nalt.opinfo_t.ec: - opinfo_t_ec_get(self) -> enum_const_t - -ida_nalt.opinfo_t.path: - opinfo_t_path_get(self) -> strpath_t - -ida_nalt.opinfo_t.ri: - opinfo_t_ri_get(self) -> refinfo_t - -ida_nalt.opinfo_t.strtype: - opinfo_t_strtype_get(self) -> int32 - -ida_nalt.opinfo_t.tid: - opinfo_t_tid_get(self) -> tid_t - -class ida_nalt.printop_t(): - - Proxy of C++ printop_t class - - -ida_nalt.printop_t.flags: - printop_t_flags_get(self) -> flags_t - -ida_nalt.printop_t.get_ti(): - - get_ti(self) -> opinfo_t - - -ida_nalt.printop_t.is_ti_valid: - printop_t_is_ti_valid_get(self) -> bool - -ida_nalt.printop_t.suspop: - printop_t_suspop_get(self) -> int - -ida_nalt.printop_t.ti: - printop_t_ti_get(self) -> opinfo_t - -class ida_nalt.refinfo_t(): - - Proxy of C++ refinfo_t class - - -ida_nalt.refinfo_t.base: - refinfo_t_base_get(self) -> ea_t - -ida_nalt.refinfo_t.flags: - refinfo_t_flags_get(self) -> uint32 - -ida_nalt.refinfo_t.init(): - - init(self, reft_and_flags, _base=0, _target=BADADDR, _tdelta=0) - - -ida_nalt.refinfo_t.is_custom(): - - is_custom(self) -> bool - - -ida_nalt.refinfo_t.is_pastend(): - - is_pastend(self) -> bool - - -ida_nalt.refinfo_t.is_rvaoff(): - - is_rvaoff(self) -> bool - - -ida_nalt.refinfo_t.is_signed(): - - is_signed(self) -> bool - - -ida_nalt.refinfo_t.is_subtract(): - - is_subtract(self) -> bool - - -ida_nalt.refinfo_t.is_target_optional(): - - is_target_optional(self) -> bool - - -ida_nalt.refinfo_t.no_base_xref(): - - no_base_xref(self) -> bool - - -ida_nalt.refinfo_t.set_type(): - - set_type(self, t) - - -ida_nalt.refinfo_t.target: - refinfo_t_target_get(self) -> ea_t - -ida_nalt.refinfo_t.tdelta: - refinfo_t_tdelta_get(self) -> adiff_t - -ida_nalt.refinfo_t.type(): - - type(self) -> reftype_t - - -ida_nalt.rename_encoding(): - - rename_encoding(idx, encoding) -> bool - - - Change name for an encoding (1-based) - - - @param idx (C++: int) - @param encoding (C++: const char *) - - -ida_nalt.retrieve_input_file_crc32(): - - retrieve_input_file_crc32() -> uint32 - - - Get input file crc32 stored in the database. it can be used to check - that the input file has not been changed. - - -ida_nalt.retrieve_input_file_md5(): - - retrieve_input_file_md5() -> bool - - - Get input file md5. - - -ida_nalt.retrieve_input_file_sha256(): - - retrieve_input_file_sha256() -> bool - - - Get input file sha256. - - -ida_nalt.retrieve_input_file_size(): - - retrieve_input_file_size() -> uint32 - - - Get size of input file in bytes. - - -ida_nalt.set__bnot0(): - - set__bnot0(ea) - - -ida_nalt.set__bnot1(): - - set__bnot1(ea) - - -ida_nalt.set__invsign0(): - - set__invsign0(ea) - - -ida_nalt.set__invsign1(): - - set__invsign1(ea) - - -ida_nalt.set_abits(): - - set_abits(ea, bits) - - -ida_nalt.set_absbase(): - - set_absbase(ea, x) - - -ida_nalt.set_aflags(): - - set_aflags(ea, flags) - - -ida_nalt.set_align_flow(): - - set_align_flow(ea) - - -ida_nalt.set_alignment(): - - set_alignment(ea, x) - - -ida_nalt.set_archive_path(): - - set_archive_path(file) -> bool - - - Set archive file path from which input file was extracted. - - - @param file (C++: const char *) - - -ida_nalt.set_array_parameters(): - - set_array_parameters(ea, _in) - - -ida_nalt.set_asm_inc_file(): - - set_asm_inc_file(file) -> bool - - - Set name of the include file. - - - @param file (C++: const char *) - - -ida_nalt.set_colored_item(): - - set_colored_item(ea) - - -ida_nalt.set_custom_data_type_ids(): - - set_custom_data_type_ids(ea, cdis) - - -ida_nalt.set_default_encoding_idx(): - - set_default_encoding_idx(bpu, idx) -> bool - - - set default encoding for a string type - - @param bpu: the amount of bytes per unit (C++: int) - @param idx: the encoding index idx can be 0 to disable encoding - conversion (C++: int) - - -ida_nalt.set_fixed_spd(): - - set_fixed_spd(ea) - - -ida_nalt.set_gotea(): - - set_gotea(gotea) - - -ida_nalt.set_has_lname(): - - set_has_lname(ea) - - -ida_nalt.set_has_ti(): - - set_has_ti(ea) - - -ida_nalt.set_has_ti0(): - - set_has_ti0(ea) - - -ida_nalt.set_has_ti1(): - - set_has_ti1(ea) - - -ida_nalt.set_ids_modnode(): - - set_ids_modnode(id) - - - Set ids modnode. - - - @param id (C++: netnode) - - -ida_nalt.set_imagebase(): - - set_imagebase(base) - - - Set image base address. - - - @param base (C++: ea_t) - - -ida_nalt.set_item_color(): - - set_item_color(ea, color) - - -ida_nalt.set_libitem(): - - set_libitem(ea) - - -ida_nalt.set_lzero0(): - - set_lzero0(ea) - - -ida_nalt.set_lzero1(): - - set_lzero1(ea) - - -ida_nalt.set_noret(): - - set_noret(ea) - - -ida_nalt.set_notcode(): - - set_notcode(ea) - - - Mark address so that it cannot be converted to instruction. - - - @param ea (C++: ea_t) - - -ida_nalt.set_notproc(): - - set_notproc(ea) - - -ida_nalt.set_op_tinfo(): - - set_op_tinfo(ea, n, tif) -> bool - - -ida_nalt.set_outfile_encoding_idx(): - - set_outfile_encoding_idx(idx) -> bool - - - set encoding to be used when producing files - - @param idx: the encoding index idx can be 0 to use the IDB's default 1 - -byte-per-unit encoding (C++: int) - - -ida_nalt.set_refinfo(): - - set_refinfo(ea, n, type, target=BADADDR, base=0, tdelta=0) -> bool - - -ida_nalt.set_refinfo_ex(): - - set_refinfo_ex(ea, n, ri) -> bool - - -ida_nalt.set_retfp(): - - set_retfp(ea) - - -ida_nalt.set_root_filename(): - - set_root_filename(file) - - - Set full path of the input file. - - - @param file (C++: const char *) - - -ida_nalt.set_source_linnum(): - - set_source_linnum(ea, lnnum) - - -ida_nalt.set_str_type(): - - set_str_type(ea, x) - - -ida_nalt.set_switch_info(): - - set_switch_info(ea, _in) - - -ida_nalt.set_switch_parent(): - - set_switch_parent(ea, x) - - -ida_nalt.set_terse_struc(): - - set_terse_struc(ea) - - -ida_nalt.set_tilcmt(): - - set_tilcmt(ea) - - -ida_nalt.set_tinfo(): - - set_tinfo(ea, tif) -> bool - - -ida_nalt.set_usemodsp(): - - set_usemodsp(ea) - - -ida_nalt.set_usersp(): - - set_usersp(ea) - - -ida_nalt.set_userti(): - - set_userti(ea) - - -ida_nalt.set_visible_item(): - - set_visible_item(ea, visible) - - - Change visibility of item at given ea. - - - @param ea (C++: ea_t) - @param visible (C++: bool) - - -ida_nalt.set_zstroff(): - - set_zstroff(ea) - - -class ida_nalt.strpath_ids_array(): - - Proxy of C++ wrapped_array_t<(tid_t,32)> class - - -class ida_nalt.strpath_t(): - - Proxy of C++ strpath_t class - - -ida_nalt.strpath_t.delta: - strpath_t_delta_get(self) -> adiff_t - -ida_nalt.strpath_t.ids: - - __getIds(self) -> strpath_ids_array - - -ida_nalt.strpath_t.len: - strpath_t_len_get(self) -> int - -class ida_nalt.switch_info_t(): - - Proxy of C++ switch_info_t class - - -ida_nalt.switch_info_t.assign(): - - assign(self, other) - - -ida_nalt.switch_info_t.clear(): - - clear(self) - - -ida_nalt.switch_info_t.custom: - switch_info_t_custom_get(self) -> uval_t - -ida_nalt.switch_info_t.defjump: - switch_info_t_defjump_get(self) -> ea_t - -ida_nalt.switch_info_t.elbase: - switch_info_t_elbase_get(self) -> ea_t - -ida_nalt.switch_info_t.expr_ea: - switch_info_t_expr_ea_get(self) -> ea_t - -ida_nalt.switch_info_t.flags: - switch_info_t_flags_get(self) -> uint32 - -ida_nalt.switch_info_t.get_jrange_vrange(): - - get_jrange_vrange(self, jrange=None, vrange=None) -> bool - - -ida_nalt.switch_info_t.get_jtable_element_size(): - - get_jtable_element_size(self) -> int - - -ida_nalt.switch_info_t.get_jtable_size(): - - get_jtable_size(self) -> int - - -ida_nalt.switch_info_t.get_lowcase(): - - get_lowcase(self) -> sval_t - - -ida_nalt.switch_info_t.get_shift(): - - get_shift(self) -> int - - -ida_nalt.switch_info_t.get_version(): - - get_version(self) -> int - - -ida_nalt.switch_info_t.get_vtable_element_size(): - - get_vtable_element_size(self) -> int - - -ida_nalt.switch_info_t.has_default(): - - has_default(self) -> bool - - -ida_nalt.switch_info_t.has_elbase(): - - has_elbase(self) -> bool - - -ida_nalt.switch_info_t.ind_lowcase: - switch_info_t_ind_lowcase_get(self) -> sval_t - -ida_nalt.switch_info_t.is_custom(): - - is_custom(self) -> bool - - -ida_nalt.switch_info_t.is_indirect(): - - is_indirect(self) -> bool - - -ida_nalt.switch_info_t.is_nolowcase(): - - is_nolowcase(self) -> bool - - -ida_nalt.switch_info_t.is_sparse(): - - is_sparse(self) -> bool - - -ida_nalt.switch_info_t.is_subtract(): - - is_subtract(self) -> bool - - -ida_nalt.switch_info_t.jcases: - switch_info_t_jcases_get(self) -> int - -ida_nalt.switch_info_t.jumps: - switch_info_t_jumps_get(self) -> ea_t - -ida_nalt.switch_info_t.lowcase: - - _get_values_lowcase(self) -> ea_t - - -ida_nalt.switch_info_t.marks: - switch_info_t_marks_get(self) -> eavec_t * - -ida_nalt.switch_info_t.ncases: - switch_info_t_ncases_get(self) -> ushort - -ida_nalt.switch_info_t.regdtype: - switch_info_t_regdtype_get(self) -> op_dtype_t - -ida_nalt.switch_info_t.regnum: - switch_info_t_regnum_get(self) -> int - -ida_nalt.switch_info_t.set_expr(): - - set_expr(self, r, dt) - - -ida_nalt.switch_info_t.set_jtable_element_size(): - - set_jtable_element_size(self, size) - - -ida_nalt.switch_info_t.set_jtable_size(): - - set_jtable_size(self, size) - - -ida_nalt.switch_info_t.set_shift(): - - set_shift(self, shift) - - -ida_nalt.switch_info_t.set_vtable_element_size(): - - set_vtable_element_size(self, size) - - -ida_nalt.switch_info_t.startea: - switch_info_t_startea_get(self) -> ea_t - -ida_nalt.switch_info_t.use_std_table(): - - use_std_table(self) -> bool - - -ida_nalt.switch_info_t.values: - - _get_values_lowcase(self) -> ea_t - - -ida_nalt.switch_info_t__from_ptrval__(): - - switch_info_t__from_ptrval__(ptrval) -> switch_info_t - - -ida_nalt.unhide_border(): - - unhide_border(ea) - - -ida_nalt.unhide_item(): - - unhide_item(ea) - - -ida_nalt.uses_modsp(): - - uses_modsp(ea) -> bool - - -ida_nalt.validate_idb_names(): - - validate_idb_names(do_repair) -> int - - - -=== ida_nalt EPYDOC INJECTIONS === -ida_nalt.AFL_ALIGNFLOW -""" -the previous insn was created for alignment purposes only -""" - -ida_nalt.AFL_BNOT0 -""" -the 1st operand is bitwise negated -""" - -ida_nalt.AFL_BNOT1 -""" -the 2nd operand is bitwise negated -""" - -ida_nalt.AFL_COLORED -""" -has user defined instruction color? -""" - -ida_nalt.AFL_FIXEDSPD -""" -should not be modified by modules - -sp delta value is fixed by analysis. -""" - -ida_nalt.AFL_HIDDEN -""" -the item is hidden completely -""" - -ida_nalt.AFL_LIB -""" -item from the standard library. low level flag, is used to set -'FUNC_LIB' of 'func_t' -""" - -ida_nalt.AFL_LINNUM -""" -has line number info -""" - -ida_nalt.AFL_LNAME -""" -has local name too ( 'FF_NAME' should be set) -""" - -ida_nalt.AFL_LZERO0 -""" -toggle leading zeroes for the 1st operand -""" - -ida_nalt.AFL_LZERO1 -""" -toggle leading zeroes for the 2nd operand -""" - -ida_nalt.AFL_MANUAL -""" -the instruction/data is specified by the user -""" - -ida_nalt.AFL_NOBRD -""" -the code/data border is hidden -""" - -ida_nalt.AFL_NORET -""" -for imported function pointers: doesn't return. this flag can also be -used for any instruction which halts or finishes the program execution -""" - -ida_nalt.AFL_NOTCODE -""" -autoanalysis should not create code here -""" - -ida_nalt.AFL_NOTPROC -""" -autoanalysis should not create proc here -""" - -ida_nalt.AFL_PUBNAM -""" -name is public (inter-file linkage) -""" - -ida_nalt.AFL_RETFP -""" -function returns a floating point value -""" - -ida_nalt.AFL_SIGN0 -""" -code: toggle sign of the 1st operand -""" - -ida_nalt.AFL_SIGN1 -""" -code: toggle sign of the 2nd operand -""" - -ida_nalt.AFL_TERSESTR -""" -terse structure variable display? -""" - -ida_nalt.AFL_TI -""" -has typeinfo? ( 'NSUP_TYPEINFO' ) -""" - -ida_nalt.AFL_TI0 -""" -has typeinfo for operand 0? ( 'NSUP_OPTYPES' ) -""" - -ida_nalt.AFL_TI1 -""" -has typeinfo for operand 1? ( 'NSUP_OPTYPES' +1) -""" - -ida_nalt.AFL_TILCMT -""" -has type comment? (such a comment may be changed by IDA) -""" - -ida_nalt.AFL_USEMODSP -""" -example: pop [rsp+N] - -insn modifes SP and uses the modified value -""" - -ida_nalt.AFL_USERSP -""" -user-defined SP value -""" - -ida_nalt.AFL_USERTI -""" -(comes from the user or type library) - -the type information is definitive. -""" - -ida_nalt.AFL_WEAKNAM -""" -name is weak -""" - -ida_nalt.AFL_ZSTROFF -""" -display struct field name at 0 offset when displaying an offset. -example: \\v{offset somestruct.field_0} if this flag is clear, then -\\v{offset somestruct} -""" - -ida_nalt.AP_ALLOWDUPS -""" -use 'dup' construct -""" - -ida_nalt.AP_ARRAY -""" -create as array (this flag is not stored in database) -""" - -ida_nalt.AP_IDXBASEMASK -""" -mask for number base of the indexes -""" - -ida_nalt.AP_IDXBIN -""" -display indexes in binary -""" - -ida_nalt.AP_IDXDEC -""" -display indexes in decimal -""" - -ida_nalt.AP_IDXHEX -""" -display indexes in hex -""" - -ida_nalt.AP_IDXOCT -""" -display indexes in octal -""" - -ida_nalt.AP_INDEX -""" -display array element indexes as comments -""" - -ida_nalt.AP_SIGNED -""" -treats numbers as signed -""" - -ida_nalt.MAXSTRUCPATH -""" -maximal inclusion depth of unions -""" - -ida_nalt.NALT_ABSBASE -""" -absolute segment location -""" - -ida_nalt.NALT_AFLAGS -""" -additional flags for an item -""" - -ida_nalt.NALT_ALIGN -""" -(should by equal to power of 2) - -alignment value if the item is 'FF_ALIGN' -""" - -ida_nalt.NALT_COLOR -""" -instruction/data background color -""" - -ida_nalt.NALT_CREF_FROM -""" -code xref from, idx: source address -""" - -ida_nalt.NALT_CREF_TO -""" -code xref to, idx: target address -""" - -ida_nalt.NALT_DREF_FROM -""" -data xref from, idx: source address -""" - -ida_nalt.NALT_DREF_TO -""" -data xref to, idx: target address -""" - -ida_nalt.NALT_ENUM0 -""" -enum id for the first operand -""" - -ida_nalt.NALT_ENUM1 -""" -enum id for the second operand -""" - -ida_nalt.NALT_GR_LAYX -""" -group layout ptrs, hash: md5 of 'belongs' -""" - -ida_nalt.NALT_LINNUM -""" -source line number -""" - -ida_nalt.NALT_PURGE -""" -number of bytes purged from the stack when a function is called -indirectly -""" - -ida_nalt.NALT_STRTYPE -""" -type of string item -""" - -ida_nalt.NALT_STRUCT -""" -struct id -""" - -ida_nalt.NALT_SWITCH -""" -switch idiom address (used at jump targets) -""" - -ida_nalt.NSUP_ARGEAS -""" -instructions that initialize call arguments -""" - -ida_nalt.NSUP_ARRAY -""" -array parameters -""" - -ida_nalt.NSUP_CMT -""" -regular comment -""" - -ida_nalt.NSUP_CUSTDT -""" -custom data type id -""" - -ida_nalt.NSUP_FOP1 -""" -forced operand 1 -""" - -ida_nalt.NSUP_FOP2 -""" -forced operand 2 -""" - -ida_nalt.NSUP_FOP3 -""" -forced operand 3 -""" - -ida_nalt.NSUP_FOP4 -""" -forced operand 4 -""" - -ida_nalt.NSUP_FOP5 -""" -forced operand 5 -""" - -ida_nalt.NSUP_FOP6 -""" -forced operand 6 -""" - -ida_nalt.NSUP_FOP7 -""" -forced operand 7 -""" - -ida_nalt.NSUP_FOP8 -""" -forced operand 8 -""" - -ida_nalt.NSUP_FTAILS -""" -function tails or tail referers values NSUP_FTAILS..NSUP_FTAILS+0x1000 -are reserved -""" - -ida_nalt.NSUP_GROUP -""" -graph group information values NSUP_GROUP..NSUP_GROUP+0x1000 are -reserved -""" - -ida_nalt.NSUP_GROUPS -""" -SEG_GRP: pack_dd encoded list of selectors. -""" - -ida_nalt.NSUP_GR_INFO -""" -group node info: color, ea, text -""" - -ida_nalt.NSUP_GR_LAYT -""" -group layouts, idx: layout pointer -""" - -ida_nalt.NSUP_JINFO -""" -jump table info -""" - -ida_nalt.NSUP_LLABEL -""" -local labels. values NSUP_LLABEL..NSUP_LLABEL+0x1000 are reserved -""" - -ida_nalt.NSUP_MANUAL -""" -manual instruction. values NSUP_MANUAL..NSUP_MANUAL+0x1000 are -reserved -""" - -ida_nalt.NSUP_OMFGRP -""" -OMF: group of segments (not used anymore) -""" - -ida_nalt.NSUP_OPTYPES -""" -operand type information. values NSUP_OPTYPES..NSUP_OPTYPES+0x100000 -are reserved -""" - -ida_nalt.NSUP_OREF0 -""" -outer complex reference information for operand 1 -""" - -ida_nalt.NSUP_OREF1 -""" -outer complex reference information for operand 2 -""" - -ida_nalt.NSUP_OREF2 -""" -outer complex reference information for operand 3 -""" - -ida_nalt.NSUP_OREF3 -""" -outer complex reference information for operand 4 -""" - -ida_nalt.NSUP_OREF4 -""" -outer complex reference information for operand 5 -""" - -ida_nalt.NSUP_OREF5 -""" -outer complex reference information for operand 6 -""" - -ida_nalt.NSUP_OREF6 -""" -outer complex reference information for operand 7 -""" - -ida_nalt.NSUP_OREF7 -""" -outer complex reference information for operand 8 -""" - -ida_nalt.NSUP_ORIGFMD -""" -function metadata before lumina information was applied values -NSUP_ORIGFMD..NSUP_ORIGFMD+0x1000 are reserved -""" - -ida_nalt.NSUP_POINTS -""" -SP change points blob (see funcs.cpp). values -NSUP_POINTS..NSUP_POINTS+0x1000 are reserved -""" - -ida_nalt.NSUP_REF0 -""" -complex reference information for operand 1 -""" - -ida_nalt.NSUP_REF1 -""" -complex reference information for operand 2 -""" - -ida_nalt.NSUP_REF2 -""" -complex reference information for operand 3 -""" - -ida_nalt.NSUP_REF3 -""" -complex reference information for operand 4 -""" - -ida_nalt.NSUP_REF4 -""" -complex reference information for operand 5 -""" - -ida_nalt.NSUP_REF5 -""" -complex reference information for operand 6 -""" - -ida_nalt.NSUP_REF6 -""" -complex reference information for operand 7 -""" - -ida_nalt.NSUP_REF7 -""" -complex reference information for operand 8 -""" - -ida_nalt.NSUP_REGARG -""" -register argument type/name descriptions values -NSUP_REGARG..NSUP_REGARG+0x1000 are reserved -""" - -ida_nalt.NSUP_REGVAR -""" -register variables. values NSUP_REGVAR..NSUP_REGVAR+0x1000 are -reserved -""" - -ida_nalt.NSUP_REPCMT -""" -repeatable comment -""" - -ida_nalt.NSUP_SEGTRANS -""" -segment translations -""" - -ida_nalt.NSUP_STROFF0 -""" -stroff: struct path for the first operand -""" - -ida_nalt.NSUP_STROFF1 -""" -stroff: struct path for the second operand -""" - -ida_nalt.NSUP_SWITCH -""" -switch information -""" - -ida_nalt.NSUP_TYPEINFO -""" -type information. values NSUP_TYPEINFO..NSUP_TYPEINFO+0x1000 are -reserved -""" - -ida_nalt.NSUP_XREFPOS -""" -saved xref address and type in the xrefs window -""" - -ida_nalt.PATCH_TAG -""" -Patch netnode tag. -""" - -ida_nalt.REFINFO_CUSTOM -""" -a custom reference the kernel will call \\ph{notify}(ph.custom_offset, -.... that can change all arguments used for calculations. This flag is -useful for custom fixups -""" - -ida_nalt.REFINFO_NOBASE -""" -don't create the base xref implies that the base can be any value nb: -base xrefs are created only if the offset base points to the middle of -a segment -""" - -ida_nalt.REFINFO_PASTEND -""" -reference past an item it may point to an nonexistent address do not -destroy alignment dirs -""" - -ida_nalt.REFINFO_RVAOFF -""" -based reference (rva) 'refinfo_t::base' will be forced to -'get_imagebase()' such a reference is displayed with the \\ash{a_rva} -keyword -""" - -ida_nalt.REFINFO_SIGNEDOP -""" -the operand value is sign-extended (only supported for -REF_OFF8/16/32/64) -""" - -ida_nalt.REFINFO_SUBTRACT -""" -the reference value is subtracted from the base value instead of (as -usual) being added to it -""" - -ida_nalt.REFINFO_TYPE -""" -reference type -""" - -ida_nalt.RIDX_ABINAME -""" -ABI name (processor specific) -""" - -ida_nalt.RIDX_ARCHIVE_PATH -""" -archive file path -""" - -ida_nalt.RIDX_C_MACROS -""" -C predefined macros. -""" - -ida_nalt.RIDX_DBG_BINPATHS -""" -unused (20 indexes) -""" - -ida_nalt.RIDX_DUALOP_GRAPH -""" -Graph text representation options. -""" - -ida_nalt.RIDX_DUALOP_TEXT -""" -Text text representation options. -""" - -ida_nalt.RIDX_FILE_FORMAT_NAME -""" -file format name for loader modules -""" - -ida_nalt.RIDX_GROUPS -""" -segment group information (see init_groups()) -""" - -ida_nalt.RIDX_H_PATH -""" -C header path. -""" - -ida_nalt.RIDX_IDA_VERSION -""" -version of ida which created the database -""" - -ida_nalt.RIDX_INCLUDE -""" -assembler include file name -""" - -ida_nalt.RIDX_MD5 -""" -MD5 of the input file. -""" - -ida_nalt.RIDX_NOTEPAD -""" -notepad blob, occupies 1000 indexes (1MB of text) -""" - -ida_nalt.RIDX_PROBLEMS -""" -problem lists -""" - -ida_nalt.RIDX_SELECTED_EXTLANG -""" -last selected extlang name (from the execute script box) -""" - -ida_nalt.RIDX_SELECTORS -""" -2..63 are for selector_t blob (see init_selectors()) -""" - -ida_nalt.RIDX_SHA256 -""" -SHA256 of the input file. -""" - -ida_nalt.RIDX_SMALL_IDC -""" -Instant IDC statements, blob. -""" - -ida_nalt.RIDX_SMALL_IDC_OLD -""" -Instant IDC statements (obsolete) -""" - -ida_nalt.RIDX_SRCDBG_PATHS -""" -source debug paths, occupies 20 indexes -""" - -ida_nalt.RIDX_SRCDBG_UNDESIRED -""" -user-closed source files, occupies 20 indexes -""" - -ida_nalt.RIDX_STR_ENCODINGS -""" -a list of encodings for the program strings -""" - -ida_nalt.STRENC_DEFAULT -""" -use default encoding for this type (see 'get_default_encoding_idx()' ) -""" - -ida_nalt.STRENC_NONE -""" -force no-conversion encoding -""" - -ida_nalt.STRTYPE_C -""" -Zero-terminated 16bit chars. -""" - -ida_nalt.STRTYPE_C_16 -""" -Zero-terminated 32bit chars. -""" - -ida_nalt.STRTYPE_C_32 -""" -Pascal-style, one-byte length prefix. -""" - -ida_nalt.STRTYPE_LEN2 -""" -Pascal-style, 16bit chars, two-byte length prefix. -""" - -ida_nalt.STRTYPE_LEN2_16 -""" -Pascal-style, four-byte length prefix. -""" - -ida_nalt.STRTYPE_LEN4 -""" -Pascal-style, 16bit chars, four-byte length prefix. -""" - -ida_nalt.STRTYPE_PASCAL -""" -Pascal-style, 16bit chars, one-byte length prefix. -""" - -ida_nalt.STRTYPE_PASCAL_16 -""" -Pascal-style, two-byte length prefix. -""" - -ida_nalt.STRTYPE_TERMCHR -""" -C-style string. - -< Character-terminated string. The termination characters are kept in -the next bytes of string type. -""" - -ida_nalt.SWI_CUSTOM -""" -custom jump table. \\ph{create_switch_xrefs} will be called to create -code xrefs for the table. Custom jump table must be created by the -module (see also 'SWI_STDTBL' ) -""" - -ida_nalt.SWI_DEFRET -""" -return in the default case (defjump==BADADDR) -""" - -ida_nalt.SWI_DEF_IN_TBL -""" -default case is an entry in the jump table. This flag is applicable in -2 cases:The sparse indirect switch (i.e. a switch with a values table) -=""> ==+ 1. The default case entry is the last one -in the table (or the first one in the case of an inversed jump -table).The switch with insns in the jump table. The default case entry -is before the first entry of the table. See also the -find_defjump_from_table() helper function. -""" - -ida_nalt.SWI_ELBASE -""" -segment will be used) - -elbase is present (otherwise the base of the switch -""" - -ida_nalt.SWI_HXNOLOWCASE -""" -lowcase value should not be used by the decompiler (internal flag) -""" - -ida_nalt.SWI_INDIRECT -""" -(for sparse switches) - -value table elements are used as indexes into the jump table -""" - -ida_nalt.SWI_J32 -""" -32-bit jump offsets -""" - -ida_nalt.SWI_JMPINSN -""" -jump table entries are insns. For such entries SHIFT has a different -meaning. It denotes the number of insns in the entry. For example, 0 - -the entry contains the jump to the case, 1 - the entry contains one -insn like a 'mov' and jump to the end of case, and so on. -""" - -ida_nalt.SWI_JMP_INV -""" -for first entry in values table) - -jumptable is inversed. (last entry is -""" - -ida_nalt.SWI_JSIZE -""" -jump offset expansion bit -""" - -ida_nalt.SWI_RESERVED -""" -was: SWI_DEFAULT -""" - -ida_nalt.SWI_SELFREL -""" -jump address is relative to the element not to ELBASE -""" - -ida_nalt.SWI_SEPARATE -""" -create an array of individual elements (otherwise separate items) -""" - -ida_nalt.SWI_SHIFT_MASK -""" -use formula (element< flags_t - - - Append names of struct fields to a name if the name is a struct name. - - @param disp: displacement from the name (C++: adiff_t *) - @param n: number of operand n which the name appears (C++: int) - @param path: 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 (if any). (C++: const tid_t - *) - @param flags: the input flags. they will be returned if the struct - cannot be found. (C++: flags_t) - @param delta: delta to add to displacement (C++: adiff_t) - @param appzero: should append a struct field name if the displacement - is zero? (C++: bool) - @return: flags of the innermost struct member or the input flags - - -ida_name.calc_gtn_flags(): - - Calculate flags for get_ea_name() function - - @param fromaddr: the referring address. May be BADADDR. - @param ea: linear address - - @return: flags - - -ida_name.cleanup_name(): - - cleanup_name(ea, name, flags=0) -> bool - - -ida_name.del_debug_names(): - - del_debug_names(ea1, ea2) - - -ida_name.del_global_name(): - - del_global_name(ea) -> bool - - -ida_name.del_local_name(): - - del_local_name(ea) -> bool - - -ida_name.demangle_name(): - - demangle_name(name, disable_mask, demreq=DQT_FULL) -> int32 - - - Demangle a name. - - @param name: name to demangle (C++: const char *) - @param disable_mask: bits to inhibit parts of demangled name (see - MNG_). by the M_COMPILER bits a specific compiler - can be selected (see MT_). (C++: uint32) - @param demreq (C++: demreq_type_t) - @return: ME_... or MT__ bitmasks from demangle.hpp - - -class ida_name.ea_name_t(): - - Proxy of C++ ea_name_t class - - -ida_name.ea_name_t.ea: - ea_name_t_ea_get(self) -> ea_t - -ida_name.ea_name_t.name: - ea_name_t_name_get(self) -> qstring * - -class ida_name.ea_name_vec_t(): - - Proxy of C++ qvector<(ea_name_t)> class - - -ida_name.ea_name_vec_t.at(): - - at(self, _idx) -> ea_name_t - - -ida_name.ea_name_vec_t.begin(): - - begin(self) -> ea_name_t - begin(self) -> ea_name_t - - -ida_name.ea_name_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_name.ea_name_vec_t.clear(): - - clear(self) - - -ida_name.ea_name_vec_t.empty(): - - empty(self) -> bool - - -ida_name.ea_name_vec_t.end(): - - end(self) -> ea_name_t - end(self) -> ea_name_t - - -ida_name.ea_name_vec_t.erase(): - - erase(self, it) -> ea_name_t - erase(self, first, last) -> ea_name_t - - -ida_name.ea_name_vec_t.extract(): - - extract(self) -> ea_name_t - - -ida_name.ea_name_vec_t.grow(): - - grow(self, x=ea_name_t()) - - -ida_name.ea_name_vec_t.inject(): - - inject(self, s, len) - - -ida_name.ea_name_vec_t.insert(): - - insert(self, it, x) -> ea_name_t - - -ida_name.ea_name_vec_t.pop_back(): - - pop_back(self) - - -ida_name.ea_name_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> ea_name_t - - -ida_name.ea_name_vec_t.qclear(): - - qclear(self) - - -ida_name.ea_name_vec_t.reserve(): - - reserve(self, cnt) - - -ida_name.ea_name_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_name.ea_name_vec_t.size(): - - size(self) -> size_t - - -ida_name.ea_name_vec_t.swap(): - - swap(self, r) - - -ida_name.ea_name_vec_t.truncate(): - - truncate(self) - - -ida_name.extract_name(): - - extract_name(line, x) -> ssize_t - - - Extract a name or address from the specified string. - - @param line: input string (C++: const char *) - @param x: x coordinate of cursor (C++: int) - @return: -1 if cannot extract. otherwise length of the name - - -ida_name.force_name(): - - force_name(ea, name, flags=0) -> bool - - -ida_name.get_colored_demangled_name(): - - get_colored_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring - - -ida_name.get_colored_long_name(): - - get_colored_long_name(ea, gtn_flags=0) -> qstring - - -ida_name.get_colored_name(): - - get_colored_name(ea) -> qstring - - -ida_name.get_colored_short_name(): - - get_colored_short_name(ea, gtn_flags=0) -> qstring - - -ida_name.get_debug_name(): - - get_debug_name(ea_ptr, how) -> ssize_t - - -ida_name.get_debug_name_ea(): - - get_debug_name_ea(name) -> ea_t - - -ida_name.get_debug_names(): - - get_debug_names(names, ea1, ea2) - get_debug_names(ea1, ea2, return_list=False) -> PyObject * - - -ida_name.get_demangled_name(): - - get_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring - - -ida_name.get_ea_name(): - - get_ea_name(ea, gtn_flags=0) -> qstring - - - Get name at the specified address. - - @param ea: linear address (C++: ea_t) - @param gtn_flags: how exactly the name should be retrieved. - combination of bits for get_ea_name() function. - There is a convenience bits (C++: int) - @return: success - - -ida_name.get_long_name(): - - get_long_name(ea, gtn_flags=0) -> qstring - - -ida_name.get_name(): - - get_name(ea) -> qstring - - -ida_name.get_name_base_ea(): - - get_name_base_ea(_from, to) -> ea_t - - - Get address of the name used in the expression for the address - - @param _from: address of the operand which references to the address - (C++: ea_t) - @param to: the referenced address (C++: ea_t) - @return: address of the name used to represent the operand - - -ida_name.get_name_color(): - - get_name_color(_from, ea) -> color_t - - - Calculate flags for 'get_ea_name()' function. - - Get name color. - - @param _from: linear address where the name is used. if not - applicable, then should be BADADDR . The kernel returns - a local name color if the reference is within a - function, i.e. 'from' and 'ea' belong to the same - function. (C++: ea_t) - @param ea: linear address (C++: ea_t) - - -ida_name.get_name_ea(): - - get_name_ea(_from, name) -> ea_t - - - Get address of the name. Dummy names (like byte_xxxx where xxxx are - hex digits) are parsed by this function to obtain the address. The - database is not consulted for them. This function works only with - regular names. - - @param _from: linear address where the name is used. if not - applicable, then should be BADADDR . (C++: ea_t) - @param name: any name in the program or NULL (C++: const char *) - @return: address of the name or BADADDR - - -ida_name.get_name_expr(): - - get_name_expr(_from, n, ea, off, flags=0x0001) -> ssize_t - - - Convert address to name expression (name with a displacement). This - function takes into account fixup information and returns a colored - name expression (in the form +/- ). It also knows about - structure members and arrays. If the specified address doesn't have a - name, a dummy name is generated. - - @param _from: 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 the - operand in the instruction. (C++: ea_t) - @param n: number of referencing operand. for data items specify 0 - (C++: int) - @param ea: address to convert to name expression (C++: ea_t) - @param off: the value of name expression. this parameter is used only - to check that the name expression will have the wanted - value. 'off' may be equal to BADADDR but this is - discouraged because it prohibits checks. (C++: uval_t) - @param flags: Name expression flags (C++: int) - @return: < 0 if address is not valid, no segment or other failure. - otherwise the length of the name expression in characters. - - -ida_name.get_name_value(): - - get_name_value(_from, name) -> int - - - Get value of the name. This function knows about: regular names, - enums, special segments, etc. - - @param _from: linear address where the name is used if not applicable, - then should be BADADDR (C++: ea_t) - @param name: any name in the program or NULL (C++: const char *) - @return: Name value result codes - - -ida_name.get_nice_colored_name(): - - get_nice_colored_name(ea, flags=0) -> ssize_t - - - Get a nice colored name at the specified address. Ex:segment:sub+offse - tsegment:sub:local_labelsegment:labelsegment:addresssegment:address+of - fset - - @param ea (C++: ea_t) - @param flags (C++: int) - @return: the length of the generated name in bytes. - - -ida_name.get_nlist_ea(): - - get_nlist_ea(idx) -> ea_t - - - Get address from the list at 'idx'. - - - @param idx (C++: size_t) - - -ida_name.get_nlist_idx(): - - get_nlist_idx(ea) -> size_t - - - Get index of the name in the listreturns the closest match. may return - idx >= size. - - @param ea (C++: ea_t) - - -ida_name.get_nlist_name(): - - get_nlist_name(idx) -> char const * - - - Get name using idx. - - - @param idx (C++: size_t) - - -ida_name.get_nlist_size(): - - get_nlist_size() -> size_t - - - Get number of names in the list. - - -ida_name.get_short_name(): - - get_short_name(ea, gtn_flags=0) -> qstring - - -ida_name.get_visible_name(): - - get_visible_name(ea, gtn_flags=0) -> qstring - - -ida_name.hide_name(): - - hide_name(ea) - - - Remove name from the list of names - - @param ea: address of the name (C++: ea_t) - - -ida_name.is_ident(): - - is_ident(name) -> bool - - - Is a valid name? (including ::MangleChars) - - - @param name (C++: const char *) - - -ida_name.is_ident_cp(): - - is_ident_cp(cp) -> bool - - - Can a character appear in a name? (present in ::NameChars or - ::MangleChars) - - - @param cp (C++: wchar32_t) - - -ida_name.is_in_nlist(): - - is_in_nlist(ea) -> bool - - - Is name included into names list? - - - @param ea (C++: ea_t) - - -ida_name.is_name_defined_locally(): - - is_name_defined_locally(pfn, name, ignore_name_def, ea1=BADADDR, ea2=BADADDR) -> bool - - - Is the name defined locally in the specified function? - - @param pfn: pointer to function (C++: func_t *) - @param name: name to check (C++: const char *) - @param ignore_name_def: which names to ignore when checking (C++: - ignore_name_def_t) - @param ea1: the starting address of the range inside the function - (optional) (C++: ea_t) - @param ea2: the ending address of the range inside the function - (optional) (C++: ea_t) - @return: true if the name has been defined - - -ida_name.is_public_name(): - - is_public_name(ea) -> bool - - -ida_name.is_strlit_cp(): - - is_strlit_cp(cp, specific_ranges=None) -> bool - - - Can a character appear in a string literal (present in ::StrlitChars) - If 'specific_ranges' are specified, those will be used instead of the - ones corresponding to the current culture (only if ::StrlitChars is - configured to use the current culture) - - @param cp (C++: wchar32_t) - @param specific_ranges (C++: const rangeset_crefvec_t *) - - -ida_name.is_uname(): - - is_uname(name) -> bool - - - Is valid user-specified name? (valid name & !dummy prefix). - - @param name: name to test. may be NULL. (C++: const char *) - - -ida_name.is_valid_cp(): - - is_valid_cp(cp, kind, data=None) -> bool - - - Is the given codepoint acceptable in the given context? - - - @param cp (C++: wchar32_t) - @param kind (C++: nametype_t) - @param data (C++: void *) - - -ida_name.is_valid_typename(): - - is_valid_typename(name) -> bool - - - Is valid type name? - - @param name: name to test. may be NULL. (C++: const char *) - - -ida_name.is_visible_cp(): - - is_visible_cp(cp) -> bool - - - Can a character be displayed in a name? (present in ::NameChars) - - - @param cp (C++: wchar32_t) - - -ida_name.is_weak_name(): - - is_weak_name(ea) -> bool - - -ida_name.make_name_auto(): - - make_name_auto(ea) -> bool - - -ida_name.make_name_non_public(): - - make_name_non_public(ea) - - -ida_name.make_name_non_weak(): - - make_name_non_weak(ea) - - -ida_name.make_name_public(): - - make_name_public(ea) - - -ida_name.make_name_user(): - - make_name_user(ea) -> bool - - -ida_name.make_name_weak(): - - make_name_weak(ea) - - -ida_name.rebuild_nlist(): - - rebuild_nlist() - - - Rebuild names list. - - -ida_name.reorder_dummy_names(): - - reorder_dummy_names() - - - Renumber dummy names. - - -ida_name.set_cp_validity(): - - set_cp_validity(kind, cp, endcp=wchar32_t(-1), valid=True) - - - Mark the given codepoint (or range) as acceptable or unacceptable in - the given context If 'endcp' is not BADCP, it is considered to be the - end of the range: [cp, endcp), and is not included in the range - - @param kind (C++: ucdr_kind_t) - @param cp (C++: wchar32_t) - @param endcp (C++: wchar32_t) - @param valid (C++: bool) - - -ida_name.set_debug_name(): - - set_debug_name(ea, name) -> bool - - -ida_name.set_dummy_name(): - - set_dummy_name(_from, ea) -> bool - - - Give an autogenerated (dummy) name. Autogenerated names have special - prefixes (loc_...). - - @param _from: linear address of the operand which references to the - address (C++: ea_t) - @param ea: linear address (C++: ea_t) - - -ida_name.set_name(): - - set_name(ea, name, flags=0) -> bool - - - Set or delete name of an item at the specified address. An item can be - anything: instruction, function, data byte, word, string, structure, - etc... Include name into the list of names. - - @param ea: linear address. do nothing if ea is not valid (return 0). - tail bytes can't have names. (C++: ea_t) - @param name: new name. NULL: do nothing (return 0). "" : delete - name. otherwise this is a new name. (C++: const char *) - @param flags: Set name flags . If a bit is not specified, then the - corresponding action is not performed and the name will - retain the same bits as before calling this function. - For new names, default is: non-public, non-weak, non- - auto. (C++: int) - - -ida_name.show_name(): - - show_name(ea) - - - Insert name to the list of names. - - - @param ea (C++: ea_t) - - -ida_name.validate_name(): - - validate_name(name, type, flags=0) -> PyObject * - - - Validate a name. This function replaces all invalid characters in the - name with SUBSTCHAR. However, it will return false if name is valid - but not allowed to be an identifier (is a register name). - - @param name: ptr to name. the name will be modified (C++: qstring *) - @param type: the type of name we want to validate (C++: nametype_t) - @param flags: see SN_* . Only SN_IDBENC is currently considered (C++: - int) - @return: success - - - -=== ida_name EPYDOC INJECTIONS === -ida_name.FUNC_IMPORT_PREFIX -""" -Name prefix used by IDA for the imported functions. -""" - -ida_name.GETN_APPZERO -""" -append a struct field name if the field offset is zero? - -meaningful only if the name refers to a structure. -""" - -ida_name.GETN_NODUMMY -""" -do not create a new dummy name but pretend it exists -""" - -ida_name.GETN_NOFIXUP -""" -ignore the fixup information when producing the name -""" - -ida_name.GNCN_NOCOLOR -""" -generate an uncolored name -""" - -ida_name.GNCN_NODBGNM -""" -don't use debug names -""" - -ida_name.GNCN_NOFUNC -""" -don't generate funcname+... expressions -""" - -ida_name.GNCN_NOLABEL -""" -don't generate labels -""" - -ida_name.GNCN_NOSEG -""" -ignore the segment prefix when producing the name -""" - -ida_name.GNCN_PREFDBG -""" -if using debug names, prefer debug names over function names -""" - -ida_name.GNCN_REQFUNC -""" -return 0 if the address does not belong to a function -""" - -ida_name.GNCN_REQNAME -""" -return 0 if the address can only be represented as a hex number -""" - -ida_name.GNCN_SEGNUM -""" -segment part is displayed as a hex number -""" - -ida_name.GNCN_SEG_FUNC -""" -generate both segment and function names (default is to omit segment -name if a function name is present) -""" - -ida_name.GN_COLORED -""" -return colored name -""" - -ida_name.GN_DEMANGLED -""" -return demangled name -""" - -ida_name.GN_ISRET -""" -for dummy names: use retloc -""" - -ida_name.GN_LOCAL -""" -try to get local name first; if failed, get global -""" - -ida_name.GN_LONG -""" -use long form of demangled name -""" - -ida_name.GN_NOT_DUMMY -""" -do not return a dummy name -""" - -ida_name.GN_NOT_ISRET -""" -for dummy names: do not use retloc -""" - -ida_name.GN_SHORT -""" -use short form of demangled name -""" - -ida_name.GN_STRICT -""" -fail if cannot demangle -""" - -ida_name.GN_VISIBLE -""" -replace forbidden characters by SUBSTCHAR -""" - -ida_name.MAXNAMELEN -""" -Maximum length of a name in IDA (with the trailing zero) -""" - -ida_name.NT_ABS -""" -name is absolute symbol ( 'SEG_ABSSYM' ) -""" - -ida_name.NT_BMASK -""" -name is a bit group mask name -""" - -ida_name.NT_BYTE -""" -name is byte name (regular name) -""" - -ida_name.NT_ENUM -""" -name is symbolic constant -""" - -ida_name.NT_LOCAL -""" -name is local label -""" - -ida_name.NT_NONE -""" -name doesn't exist or has no value -""" - -ida_name.NT_REGVAR -""" -name is a renamed register (*value is idx into pfn->regvars) -""" - -ida_name.NT_SEG -""" -name is segment or segment register name -""" - -ida_name.NT_STKVAR -""" -name is stack variable name -""" - -ida_name.NT_STROFF -""" -name is structure member -""" - -ida_name.SN_AUTO -""" -if set, make name autogenerated -""" - -ida_name.SN_DELTAIL -""" -delete the hindering item - -if name cannot be set because of a tail byte, -""" - -ida_name.SN_FORCE -""" -if the specified name is already present in the database, try -variations with a numerical suffix like "_123" -""" - -ida_name.SN_IDBENC -""" -the name is given in the IDB encoding; non-ASCII bytes will be decoded -accordingly. Specifying SN_IDBENC also implies SN_NODUMMY -""" - -ida_name.SN_LOCAL -""" -create local name. a function should exist. local names can't be -public or weak. also they are not included into the list of names they -can't have dummy prefixes. -""" - -ida_name.SN_NOCHECK -""" -Don't fail if the name contains invalid characters. If this bit is -clear, all invalid chars (those !is_ident_cp()) will be replaced by -SUBSTCHAR List of valid characters is defined in ida.cfg -""" - -ida_name.SN_NODUMMY -""" -automatically prepend the name with '_' if it begins with a dummy -suffix such as 'sub_'. See also SN_IDBENC -""" - -ida_name.SN_NOLIST -""" -if set, exclude name from the list. if not set, then include the name -into the list (however, if other bits are set, the name might be -immediately excluded from the list). -""" - -ida_name.SN_NON_AUTO -""" -if set, make name non-autogenerated -""" - -ida_name.SN_NON_PUBLIC -""" -if set, make name non-public -""" - -ida_name.SN_NON_WEAK -""" -if set, make name non-weak -""" - -ida_name.SN_NOWARN -""" -don't display a warning if failed -""" - -ida_name.SN_PUBLIC -""" -if set, make name public -""" - -ida_name.SN_WEAK -""" -if set, make name weak -""" -=== ida_name EPYDOC INJECTIONS END === -ida_netnode.exist(): - - exist(n) -> bool - - -class ida_netnode.netnode(): - - Proxy of C++ netnode class - - -ida_netnode.netnode.altdel(): - - altdel(self, alt, tag=atag) -> bool - altdel(self) -> bool - - -ida_netnode.netnode.altdel_all(): - - altdel_all(self, tag) -> bool - - -ida_netnode.netnode.altdel_ea(): - - altdel_ea(self, ea, tag=atag) -> bool - - -ida_netnode.netnode.altdel_idx8(): - - altdel_idx8(self, alt, tag) -> bool - - -ida_netnode.netnode.altfirst(): - - altfirst(self, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altfirst_idx8(): - - altfirst_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.altlast(): - - altlast(self, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altlast_idx8(): - - altlast_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.altnext(): - - altnext(self, cur, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altnext_idx8(): - - altnext_idx8(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.altprev(): - - altprev(self, cur, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altprev_idx8(): - - altprev_idx8(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.altset(): - - altset(self, alt, value, tag=atag) -> bool - - -ida_netnode.netnode.altset_ea(): - - altset_ea(self, ea, value, tag=atag) -> bool - - -ida_netnode.netnode.altset_idx8(): - - altset_idx8(self, alt, val, tag) -> bool - - -ida_netnode.netnode.altshift(): - - altshift(self, _from, to, size, tag=atag) -> size_t - - -ida_netnode.netnode.altval(): - - altval(self, alt, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altval_ea(): - - altval_ea(self, ea, tag=atag) -> nodeidx_t - - -ida_netnode.netnode.altval_idx8(): - - altval_idx8(self, alt, tag) -> nodeidx_t - - -ida_netnode.netnode.blobsize(): - - blobsize(self, _start, tag) -> size_t - - -ida_netnode.netnode.blobsize_ea(): - - blobsize_ea(self, ea, tag) -> size_t - - -ida_netnode.netnode.chardel(): - - chardel(self, alt, tag) -> bool - - -ida_netnode.netnode.chardel_ea(): - - chardel_ea(self, ea, tag) -> bool - - -ida_netnode.netnode.chardel_idx8(): - - chardel_idx8(self, alt, tag) -> bool - - -ida_netnode.netnode.charfirst(): - - charfirst(self, tag) -> nodeidx_t - - -ida_netnode.netnode.charfirst_idx8(): - - charfirst_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.charlast(): - - charlast(self, tag) -> nodeidx_t - - -ida_netnode.netnode.charlast_idx8(): - - charlast_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.charnext(): - - charnext(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.charnext_idx8(): - - charnext_idx8(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.charprev(): - - charprev(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.charprev_idx8(): - - charprev_idx8(self, cur, tag) -> nodeidx_t - - -ida_netnode.netnode.charset(): - - charset(self, alt, val, tag) -> bool - - -ida_netnode.netnode.charset_ea(): - - charset_ea(self, ea, val, tag) -> bool - - -ida_netnode.netnode.charset_idx8(): - - charset_idx8(self, alt, val, tag) -> bool - - -ida_netnode.netnode.charshift(): - - charshift(self, _from, to, size, tag) -> size_t - - -ida_netnode.netnode.charval(): - - charval(self, alt, tag) -> uchar - - -ida_netnode.netnode.charval_ea(): - - charval_ea(self, ea, tag) -> uchar - - -ida_netnode.netnode.charval_idx8(): - - charval_idx8(self, alt, tag) -> uchar - - -ida_netnode.netnode.copyto(): - - copyto(self, target, count=1) -> size_t - - -ida_netnode.netnode.create(): - - create(self, _name, namlen=0) -> bool - create(self) -> bool - - -ida_netnode.netnode.delblob(): - - delblob(self, _start, tag) -> int - - -ida_netnode.netnode.delblob_ea(): - - delblob_ea(self, ea, tag) -> int - - -ida_netnode.netnode.delvalue(): - - delvalue(self) -> bool - - -ida_netnode.netnode.eadel(): - - eadel(self, ea, tag) -> bool - - -ida_netnode.netnode.eadel_idx8(): - - eadel_idx8(self, idx, tag) -> bool - - -ida_netnode.netnode.eaget(): - - eaget(self, ea, tag) -> ea_t - - -ida_netnode.netnode.eaget_idx(): - - eaget_idx(self, idx, tag) -> ea_t - - -ida_netnode.netnode.eaget_idx8(): - - eaget_idx8(self, idx, tag) -> ea_t - - -ida_netnode.netnode.easet(): - - easet(self, ea, addr, tag) -> bool - - -ida_netnode.netnode.easet_idx(): - - easet_idx(self, idx, addr, tag) -> bool - - -ida_netnode.netnode.easet_idx8(): - - easet_idx8(self, idx, addr, tag) -> bool - - -ida_netnode.netnode.end(): - - end(self) -> bool - - -ida_netnode.netnode.get_name(): - - get_name(self) -> ssize_t - - -ida_netnode.netnode.getblob(): - - getblob(self, start, tag) -> PyObject * - - -ida_netnode.netnode.getblob_ea(): - - getblob_ea(self, ea, tag) -> PyObject * - - -ida_netnode.netnode.getclob(): - - getclob(self, start, tag) -> PyObject * - - -ida_netnode.netnode.hashdel(): - - hashdel(self, idx, tag=htag) -> bool - - -ida_netnode.netnode.hashdel_all(): - - hashdel_all(self, tag=htag) -> bool - - -ida_netnode.netnode.hashfirst(): - - hashfirst(self, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashlast(): - - hashlast(self, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashnext(): - - hashnext(self, idx, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashprev(): - - hashprev(self, idx, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashset(): - - hashset(self, idx, value, tag=htag) -> bool - - -ida_netnode.netnode.hashset_buf(): - - hashset_buf(self, idx, py_str, tag=htag) -> bool - - -ida_netnode.netnode.hashset_idx(): - - hashset_idx(self, idx, value, tag=htag) -> bool - - -ida_netnode.netnode.hashstr(): - - hashstr(self, idx, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashstr_buf(): - - hashstr_buf(self, idx, tag=htag) -> PyObject * - - -ida_netnode.netnode.hashval(): - - hashval(self, idx, tag=htag) -> ssize_t - - -ida_netnode.netnode.hashval_long(): - - hashval_long(self, idx, tag=htag) -> nodeidx_t - - -ida_netnode.netnode.index(): - - index(self) -> nodeidx_t - - -ida_netnode.netnode.kill(): - - kill(self) - - -ida_netnode.netnode.long_value(): - - long_value(self) -> nodeidx_t - - -ida_netnode.netnode.lower_bound(): - - lower_bound(self, cur, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.lower_bound_ea(): - - lower_bound_ea(self, ea, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.lower_bound_idx8(): - - lower_bound_idx8(self, alt, tag) -> nodeidx_t - - -ida_netnode.netnode.moveto(): - - moveto(self, target, count=1) -> size_t - - -ida_netnode.netnode.next(): - - next(self) -> bool - - -ida_netnode.netnode.prev(): - - prev(self) -> bool - - -ida_netnode.netnode.rename(): - - rename(self, newname, namlen=0) -> bool - - -ida_netnode.netnode.set(): - - set(self, value) -> bool - - -ida_netnode.netnode.set_long(): - - set_long(self, x) -> bool - - -ida_netnode.netnode.setblob(): - - setblob(self, buf, _start, tag) -> bool - - -ida_netnode.netnode.setblob_ea(): - - setblob_ea(self, buf, ea, tag) -> bool - - -ida_netnode.netnode.start(): - - start(self) -> bool - - -ida_netnode.netnode.supdel(): - - supdel(self, alt, tag=stag) -> bool - supdel(self) -> bool - - -ida_netnode.netnode.supdel_all(): - - supdel_all(self, tag) -> bool - - -ida_netnode.netnode.supdel_ea(): - - supdel_ea(self, ea, tag=stag) -> bool - - -ida_netnode.netnode.supdel_idx8(): - - supdel_idx8(self, alt, tag) -> bool - - -ida_netnode.netnode.supdel_range(): - - supdel_range(self, idx1, idx2, tag) -> int - - -ida_netnode.netnode.supdel_range_idx8(): - - supdel_range_idx8(self, idx1, idx2, tag) -> int - - -ida_netnode.netnode.supfirst(): - - supfirst(self, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.supfirst_idx8(): - - supfirst_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.suplast(): - - suplast(self, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.suplast_idx8(): - - suplast_idx8(self, tag) -> nodeidx_t - - -ida_netnode.netnode.supnext(): - - supnext(self, cur, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.supnext_idx8(): - - supnext_idx8(self, alt, tag) -> nodeidx_t - - -ida_netnode.netnode.supprev(): - - supprev(self, cur, tag=stag) -> nodeidx_t - - -ida_netnode.netnode.supprev_idx8(): - - supprev_idx8(self, alt, tag) -> nodeidx_t - - -ida_netnode.netnode.supset(): - - supset(self, alt, value, tag=stag) -> bool - - -ida_netnode.netnode.supset_ea(): - - supset_ea(self, ea, value, tag=stag) -> bool - - -ida_netnode.netnode.supset_idx8(): - - supset_idx8(self, alt, value, tag) -> bool - - -ida_netnode.netnode.supshift(): - - supshift(self, _from, to, size, tag=stag) -> size_t - - -ida_netnode.netnode.supstr(): - - supstr(self, alt, tag=stag) -> ssize_t - - -ida_netnode.netnode.supstr_ea(): - - supstr_ea(self, ea, tag=stag) -> ssize_t - - -ida_netnode.netnode.supstr_idx8(): - - supstr_idx8(self, alt, tag) -> ssize_t - - -ida_netnode.netnode.supval(): - - supval(self, alt, tag=stag) -> ssize_t - - -ida_netnode.netnode.supval_ea(): - - supval_ea(self, ea, tag=stag) -> ssize_t - - -ida_netnode.netnode.supval_idx8(): - - supval_idx8(self, alt, tag) -> ssize_t - - -ida_netnode.netnode.valobj(): - - valobj(self) -> ssize_t - - -ida_netnode.netnode.valstr(): - - valstr(self) -> ssize_t - - -ida_netnode.netnode.value_exists(): - - value_exists(self) -> bool - - - -=== ida_netnode EPYDOC INJECTIONS === -ida_netnode.BADNODE -""" -A number to represent a bad netnode reference. -""" -=== ida_netnode EPYDOC INJECTIONS END === -ida_offset.add_refinfo_dref(): - - add_refinfo_dref(insn, _from, ri, opval, type, opoff) -> ea_t - - - Add xrefs for a reference from the given instruction (\insn_t{ea}). - This function creates a cross references to the target and the base. - 'insn_t::add_off_drefs()' calls this function to create xrefs for - 'offset' operand. - - @param insn: the referencing instruction (C++: const insn_t &) - @param _from: the referencing instruction/data address (C++: ea_t) - @param ri: reference info block from the database (C++: const - refinfo_t &) - @param opval: operand value (usually op_t::value or op_t::addr ) - (C++: adiff_t) - @param type: type of xref (C++: dref_t) - @param opoff: offset of the operand from the start of instruction - (C++: int) - @return: the target address of the reference - - -ida_offset.calc_basevalue(): - - calc_basevalue(target, base) -> ea_t - - - Calculate the value of the reference base. - - - @param target (C++: ea_t) - @param base (C++: ea_t) - - -ida_offset.calc_offset_base(): - - calc_offset_base(ea, n) -> ea_t - - - Try to calculate the offset base This function takes into account the - fixup information, current ds and cs values. - - @param ea: the referencing instruction/data address (C++: ea_t) - @param n: operand number 0: first operand 1: other operand (C++: - int) - @return: output base address or BADADDR - - -ida_offset.calc_probable_base_by_value(): - - calc_probable_base_by_value(ea, off) -> ea_t - - - Try to calculate the offset base. 2 bases are checked: current ds and - cs. If fails, return 'BADADDR' - - @param ea (C++: ea_t) - @param off (C++: uval_t) - - -ida_offset.calc_reference_data(): - - calc_reference_data(target, base, _from, ri, opval) -> bool - - - Calculate the target and base addresses of an offset expression. The - calculated target and base addresses are returned in the locations - pointed by 'base' and 'target'. In case 'ri.base' is 'BADADDR' , the - function calculates the offset base address from the referencing - instruction/data address. The target address is copied from ri.target. - If ri.target is 'BADADDR' then the target is calculated using the base - address and 'opval'. This function also checks if 'opval' matches the - full value of the reference and takes in account the memory-mapping. - - @param target: output target address (C++: ea_t *) - @param base: output base address (C++: ea_t *) - @param _from: the referencing instruction/data address (C++: ea_t) - @param ri: reference info block from the database (C++: const - refinfo_t &) - @param opval: operand value (usually op_t::value or op_t::addr ) - (C++: adiff_t) - @return: success - - -ida_offset.calc_target(): - - calc_target(_from, opval, ri) -> ea_t - calc_target(_from, ea, n, opval) -> ea_t - - - Calculates the target, using the provided 'refinfo_t' . - - - @param _from (C++: ea_t) - @param opval (C++: adiff_t) - @param ri (C++: const refinfo_t &) - - -ida_offset.can_be_off32(): - - can_be_off32(ea) -> ea_t - - - Does the specified address contain a valid OFF32 value?. For symbols - in special segments the displacement is not taken into account. If - yes, then the target address of OFF32 will be returned. If not, then - 'BADADDR' is returned. - - @param ea (C++: ea_t) - - -ida_offset.get_default_reftype(): - - get_default_reftype(ea) -> reftype_t - - - Get default reference type depending on the segment. - - @param ea (C++: ea_t) - @return: one of REF_OFF8 , REF_OFF16 , REF_OFF32 - - -ida_offset.get_offbase(): - - get_offbase(ea, n) -> ea_t - - - Get offset base value - - @param ea: linear address (C++: ea_t) - @param n: number of operand (C++: int) - @return: offset base or BADADDR - - -ida_offset.get_offset_expr(): - - get_offset_expr(ea, n, ri, _from, offset, getn_flags=0) -> int - - - See 'get_offset_expression()' - - - @param ea (C++: ea_t) - @param n (C++: int) - @param ri (C++: const refinfo_t &) - @param _from (C++: ea_t) - @param offset (C++: adiff_t) - @param getn_flags (C++: int) - - -ida_offset.get_offset_expression(): - - get_offset_expression(ea, n, _from, offset, getn_flags=0) -> int - - - Get offset expression (in the form "offset name+displ"). This function - uses offset translation function (\ph{translate}) if your IDP module - has such a function. Translation function is used to map linear - addresses in the program (only for offsets).Example: suppose we have - instruction at linear address 0x00011000: {mov ax, [bx+7422h]} and - at ds:7422h: {array dw ...} We want to represent the second operand - with an offset expression, so then we call: { - get_offset_expresion(0x001100, 1, 0x001102, 0x7422, buf); | | | | | | - | | | +output buffer | | | +value of offset expression | | +address - offset value in the instruction | +the second operand +address of - instruction } and the function will return a colored string: {offset - array} - - @param ea: start of instruction or data with the offset expression - (C++: ea_t) - @param n: number of operand (may be ORed with OPND_OUTER ) 0: first - operand 1: second operand (C++: int) - @param _from: 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. (C++: ea_t) - @param offset: value of operand or its part. The function will return - text representation of this value as offset expression. - (C++: adiff_t) - @param getn_flags: combination of: GETN_APPZERO : meaningful only if - the name refers to a structure. appends the struct - field name if the field offset is zero - GETN_NODUMMY : do not generate dummy names for the - expression but pretend they already exist (useful - to verify that the offset expression can be - represented) (C++: int) - - -ida_offset.op_offset(): - - op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int - - - See 'op_offset_ex()' - - - @param ea (C++: ea_t) - @param n (C++: int) - @param type (C++: reftype_t) - @param target (C++: ea_t) - @param base (C++: ea_t) - @param tdelta (C++: adiff_t) - - -ida_offset.op_offset_ex(): - - op_offset_ex(ea, n, ri) -> int - - - Convert operand to a reference. To delete an offset, use - 'clr_op_type()' function. - - @param ea: linear address. if 'ea' has unexplored bytes, try to - convert them to no segment: fail 16bit segment: to - 16bit word data 32bit segment: to dword (C++: ea_t) - @param n: number of operand (may be ORed with OPND_OUTER ) 0: first - 1: second 2: third OPND_MASK : all operands (C++: int) - @param ri: reference information (C++: const refinfo_t *) - @return: success - - -ida_offset.op_plain_offset(): - - op_plain_offset(ea, n, base) -> bool - - - Convert operand to a reference with the default reference type. - - - @param ea (C++: ea_t) - @param n (C++: int) - @param base (C++: ea_t) - - -class ida_pro.boolvec_t(): - - Proxy of C++ qvector<(bool)> class - - -ida_pro.boolvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.boolvec_t.append(): - - push_back(self, x) - push_back(self) -> bool & - - -ida_pro.boolvec_t.at(): - - __getitem__(self, i) -> bool const & - - -ida_pro.boolvec_t.begin(): - - begin(self) -> qvector< bool >::iterator - begin(self) -> qvector< bool >::const_iterator - - -ida_pro.boolvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.boolvec_t.clear(): - - clear(self) - - -ida_pro.boolvec_t.empty(): - - empty(self) -> bool - - -ida_pro.boolvec_t.end(): - - end(self) -> qvector< bool >::iterator - end(self) -> qvector< bool >::const_iterator - - -ida_pro.boolvec_t.erase(): - - erase(self, it) -> qvector< bool >::iterator - erase(self, first, last) -> qvector< bool >::iterator - - -ida_pro.boolvec_t.extract(): - - extract(self) -> bool * - - -ida_pro.boolvec_t.find(): - - find(self, x) -> qvector< bool >::iterator - find(self, x) -> qvector< bool >::const_iterator - - -ida_pro.boolvec_t.grow(): - - grow(self, x=bool()) - - -ida_pro.boolvec_t.has(): - - has(self, x) -> bool - - -ida_pro.boolvec_t.inject(): - - inject(self, s, len) - - -ida_pro.boolvec_t.insert(): - - insert(self, it, x) -> qvector< bool >::iterator - - -ida_pro.boolvec_t.pop_back(): - - pop_back(self) - - -ida_pro.boolvec_t.push_back(): - - push_back(self, x) - push_back(self) -> bool & - - -ida_pro.boolvec_t.qclear(): - - qclear(self) - - -ida_pro.boolvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.boolvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.boolvec_t.size(): - - size(self) -> size_t - - -ida_pro.boolvec_t.swap(): - - swap(self, r) - - -ida_pro.boolvec_t.truncate(): - - truncate(self) - - -class ida_pro.channel_redir_t(): - - Proxy of C++ channel_redir_t class - - -ida_pro.channel_redir_t.fd: - channel_redir_t_fd_get(self) -> int - -ida_pro.channel_redir_t.file: - channel_redir_t_file_get(self) -> qstring * - -ida_pro.channel_redir_t.flags: - channel_redir_t_flags_get(self) -> int - -ida_pro.channel_redir_t.is_append(): - - is_append(self) -> bool - - -ida_pro.channel_redir_t.is_input(): - - is_input(self) -> bool - - -ida_pro.channel_redir_t.is_output(): - - is_output(self) -> bool - - -ida_pro.channel_redir_t.is_quoted(): - - is_quoted(self) -> bool - - -ida_pro.channel_redir_t.length: - channel_redir_t_length_get(self) -> int - -ida_pro.channel_redir_t.start: - channel_redir_t_start_get(self) -> int - -ida_pro.check_process_exit(): - - check_process_exit(handle, exit_code, msecs=-1) -> int - - - Check whether process has terminated or not. - - @param handle: process handle to wait for (C++: void *) - @param exit_code: pointer to the buffer for the exit code (C++: int *) - - -ida_pro.clear_bits(): - - clear_bits(bitmap, low, high) - - - Clear bits between [low, high) in 'bitmap'. - - - @param bitmap (C++: uchar *) - @param low (C++: size_t) - @param high (C++: size_t) - - -class ida_pro.ea_array(): - - Proxy of C++ ea_array class - - -ida_pro.ea_array.cast(): - - cast(self) -> ea_t * - - -ida_pro.ea_array.frompointer(): - - frompointer(t) -> ea_array - - -ida_pro.ea_array_frompointer(): - - ea_array_frompointer(t) -> ea_array - - -class ida_pro.ea_pointer(): - - Proxy of C++ ea_pointer class - - -ida_pro.ea_pointer.assign(): - - assign(self, value) - - -ida_pro.ea_pointer.cast(): - - cast(self) -> ea_t * - - -ida_pro.ea_pointer.frompointer(): - - frompointer(t) -> ea_pointer - - -ida_pro.ea_pointer.value(): - - value(self) -> ea_t - - -ida_pro.ea_pointer_frompointer(): - - ea_pointer_frompointer(t) -> ea_pointer - - -class ida_pro.eavec_t(): - - Proxy of C++ qvector<(unsigned-ea-like-numeric-type)> class - - -ida_pro.eavec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.eavec_t.append(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_pro.eavec_t.at(): - - __getitem__(self, i) -> unsigned-ea-like-numeric-type & - - -ida_pro.eavec_t.begin(): - - begin(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - begin(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.eavec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.eavec_t.clear(): - - clear(self) - - -ida_pro.eavec_t.empty(): - - empty(self) -> bool - - -ida_pro.eavec_t.end(): - - end(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - end(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.eavec_t.erase(): - - erase(self, it) -> qvector< unsigned-ea-like-numeric-type >::iterator - erase(self, first, last) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_pro.eavec_t.extract(): - - extract(self) -> unsigned-ea-like-numeric-type * - - -ida_pro.eavec_t.find(): - - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.eavec_t.has(): - - has(self, x) -> bool - - -ida_pro.eavec_t.inject(): - - inject(self, s, len) - - -ida_pro.eavec_t.insert(): - - insert(self, it, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_pro.eavec_t.pop_back(): - - pop_back(self) - - -ida_pro.eavec_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_pro.eavec_t.qclear(): - - qclear(self) - - -ida_pro.eavec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.eavec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.eavec_t.size(): - - size(self) -> size_t - - -ida_pro.eavec_t.swap(): - - swap(self, r) - - -ida_pro.eavec_t.truncate(): - - truncate(self) - - -ida_pro.extend_sign(): - - extend_sign(v, nbytes, sign_extend) -> uint64 - - - Sign-, or zero-extend the value 'v' to occupy 64 bits. The value 'v' - is considered to be of size 'nbytes'. - - @param v (C++: uint64) - @param nbytes (C++: int) - @param sign_extend (C++: bool) - - -class ida_pro.instant_dbgopts_t(): - - Proxy of C++ instant_dbgopts_t class - - -ida_pro.instant_dbgopts_t.attach: - instant_dbgopts_t_attach_get(self) -> bool - -ida_pro.instant_dbgopts_t.debmod: - instant_dbgopts_t_debmod_get(self) -> qstring * - -ida_pro.instant_dbgopts_t.env: - instant_dbgopts_t_env_get(self) -> qstring * - -ida_pro.instant_dbgopts_t.event_id: - instant_dbgopts_t_event_id_get(self) -> int - -ida_pro.instant_dbgopts_t.host: - instant_dbgopts_t_host_get(self) -> qstring * - -ida_pro.instant_dbgopts_t.pid: - instant_dbgopts_t_pid_get(self) -> int - -ida_pro.instant_dbgopts_t.port: - instant_dbgopts_t_port_get(self) -> int - -class ida_pro.int64vec_t(): - - Proxy of C++ qvector<(long long)> class - - -ida_pro.int64vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.int64vec_t.append(): - - push_back(self, x) - push_back(self) -> long long & - - -ida_pro.int64vec_t.at(): - - __getitem__(self, i) -> long long const & - - -ida_pro.int64vec_t.begin(): - - begin(self) -> qvector< long long >::iterator - begin(self) -> qvector< long long >::const_iterator - - -ida_pro.int64vec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.int64vec_t.clear(): - - clear(self) - - -ida_pro.int64vec_t.empty(): - - empty(self) -> bool - - -ida_pro.int64vec_t.end(): - - end(self) -> qvector< long long >::iterator - end(self) -> qvector< long long >::const_iterator - - -ida_pro.int64vec_t.erase(): - - erase(self, it) -> qvector< long long >::iterator - erase(self, first, last) -> qvector< long long >::iterator - - -ida_pro.int64vec_t.extract(): - - extract(self) -> long long * - - -ida_pro.int64vec_t.find(): - - find(self, x) -> qvector< long long >::iterator - find(self, x) -> qvector< long long >::const_iterator - - -ida_pro.int64vec_t.has(): - - has(self, x) -> bool - - -ida_pro.int64vec_t.inject(): - - inject(self, s, len) - - -ida_pro.int64vec_t.insert(): - - insert(self, it, x) -> qvector< long long >::iterator - - -ida_pro.int64vec_t.pop_back(): - - pop_back(self) - - -ida_pro.int64vec_t.push_back(): - - push_back(self, x) - push_back(self) -> long long & - - -ida_pro.int64vec_t.qclear(): - - qclear(self) - - -ida_pro.int64vec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.int64vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.int64vec_t.size(): - - size(self) -> size_t - - -ida_pro.int64vec_t.swap(): - - swap(self, r) - - -ida_pro.int64vec_t.truncate(): - - truncate(self) - - -class ida_pro.int_pointer(): - - Proxy of C++ int_pointer class - - -ida_pro.int_pointer.assign(): - - assign(self, value) - - -ida_pro.int_pointer.cast(): - - cast(self) -> int * - - -ida_pro.int_pointer.frompointer(): - - frompointer(t) -> int_pointer - - -ida_pro.int_pointer.value(): - - value(self) -> int - - -ida_pro.int_pointer_frompointer(): - - int_pointer_frompointer(t) -> int_pointer - - -class ida_pro.intvec_t(): - - Proxy of C++ qvector<(int)> class - - -ida_pro.intvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.intvec_t.append(): - - push_back(self, x) - push_back(self) -> int & - - -ida_pro.intvec_t.at(): - - __getitem__(self, i) -> int const & - - -ida_pro.intvec_t.begin(): - - begin(self) -> qvector< int >::iterator - begin(self) -> qvector< int >::const_iterator - - -ida_pro.intvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.intvec_t.clear(): - - clear(self) - - -ida_pro.intvec_t.empty(): - - empty(self) -> bool - - -ida_pro.intvec_t.end(): - - end(self) -> qvector< int >::iterator - end(self) -> qvector< int >::const_iterator - - -ida_pro.intvec_t.erase(): - - erase(self, it) -> qvector< int >::iterator - erase(self, first, last) -> qvector< int >::iterator - - -ida_pro.intvec_t.extract(): - - extract(self) -> int * - - -ida_pro.intvec_t.find(): - - find(self, x) -> qvector< int >::iterator - find(self, x) -> qvector< int >::const_iterator - - -ida_pro.intvec_t.has(): - - has(self, x) -> bool - - -ida_pro.intvec_t.inject(): - - inject(self, s, len) - - -ida_pro.intvec_t.insert(): - - insert(self, it, x) -> qvector< int >::iterator - - -ida_pro.intvec_t.pop_back(): - - pop_back(self) - - -ida_pro.intvec_t.push_back(): - - push_back(self, x) - push_back(self) -> int & - - -ida_pro.intvec_t.qclear(): - - qclear(self) - - -ida_pro.intvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.intvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.intvec_t.size(): - - size(self) -> size_t - - -ida_pro.intvec_t.swap(): - - swap(self, r) - - -ida_pro.intvec_t.truncate(): - - truncate(self) - - -ida_pro.is_control_tty(): - - is_control_tty(fd) -> enum tty_control_t - - - Check if the current process is the owner of the TTY specified by 'fd' - (typically an opened descriptor to /dev/tty). - - @param fd (C++: int) - - -ida_pro.is_main_thread(): - - is_main_thread() -> bool - - - Are we running in the main thread? - - -ida_pro.log2ceil(): - - log2ceil(d64) -> int - - - calculate ceil(log2(d64)) or floor(log2(d64)), it returns 0 if d64 == - 0 - - @param d64 (C++: uint64) - - -ida_pro.log2floor(): - - log2floor(d64) -> int - - -class ida_pro.longlongvec_t(): - - Proxy of C++ qvector<(long long)> class - - -ida_pro.longlongvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.longlongvec_t.append(): - - push_back(self, x) - push_back(self) -> long long & - - -ida_pro.longlongvec_t.at(): - - __getitem__(self, i) -> long long const & - - -ida_pro.longlongvec_t.begin(): - - begin(self) -> qvector< long long >::iterator - begin(self) -> qvector< long long >::const_iterator - - -ida_pro.longlongvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.longlongvec_t.clear(): - - clear(self) - - -ida_pro.longlongvec_t.empty(): - - empty(self) -> bool - - -ida_pro.longlongvec_t.end(): - - end(self) -> qvector< long long >::iterator - end(self) -> qvector< long long >::const_iterator - - -ida_pro.longlongvec_t.erase(): - - erase(self, it) -> qvector< long long >::iterator - erase(self, first, last) -> qvector< long long >::iterator - - -ida_pro.longlongvec_t.extract(): - - extract(self) -> long long * - - -ida_pro.longlongvec_t.find(): - - find(self, x) -> qvector< long long >::iterator - find(self, x) -> qvector< long long >::const_iterator - - -ida_pro.longlongvec_t.has(): - - has(self, x) -> bool - - -ida_pro.longlongvec_t.inject(): - - inject(self, s, len) - - -ida_pro.longlongvec_t.insert(): - - insert(self, it, x) -> qvector< long long >::iterator - - -ida_pro.longlongvec_t.pop_back(): - - pop_back(self) - - -ida_pro.longlongvec_t.push_back(): - - push_back(self, x) - push_back(self) -> long long & - - -ida_pro.longlongvec_t.qclear(): - - qclear(self) - - -ida_pro.longlongvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.longlongvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.longlongvec_t.size(): - - size(self) -> size_t - - -ida_pro.longlongvec_t.swap(): - - swap(self, r) - - -ida_pro.longlongvec_t.truncate(): - - truncate(self) - - -ida_pro.parse_dbgopts(): - - parse_dbgopts(ido, r_switch) -> bool - - - Parse the -r command line switch (for instant debugging). r_switch - points to the value of the -r switch. Example: win32@localhost+ - - @param ido (C++: struct instant_dbgopts_t *) - @param r_switch (C++: const char *) - @return: true-ok, false-parse error - - -ida_pro.qatoll(): - - qatoll(nptr) -> int64 - - -ida_pro.qcontrol_tty(): - - qcontrol_tty() - - - Make the current terminal the controlling terminal of the calling - process.The current terminal is supposed to be /dev/tty - - -ida_pro.qdetach_tty(): - - qdetach_tty() - - - If the current terminal is the controlling terminal of the calling - process, give up this controlling terminal.The current terminal is - supposed to be /dev/tty - - -ida_pro.qexit(): - - qexit(code) - - - Call qatexit functions, shut down UI and kernel, and exit. - - @param code: exit code (C++: int) - - -class ida_pro.qmutex_locker_t(): - - Proxy of C++ qmutex_locker_t class - - -class ida_pro.qrefcnt_obj_t(): - - Proxy of C++ qrefcnt_obj_t class - - -ida_pro.qrefcnt_obj_t.refcnt: - qrefcnt_obj_t_refcnt_get(self) -> int - -ida_pro.qrefcnt_obj_t.release(): - - release(self) - - -ida_pro.qstrvec_t_add(): - - qstrvec_t_add(self, s) -> bool - - -ida_pro.qstrvec_t_addressof(): - - qstrvec_t_addressof(self, idx) -> PyObject * - - -ida_pro.qstrvec_t_assign(): - - qstrvec_t_assign(self, other) -> bool - - -ida_pro.qstrvec_t_clear(): - - qstrvec_t_clear(self, qclear) -> bool - - -ida_pro.qstrvec_t_create(): - - qstrvec_t_create() -> PyObject * - - -ida_pro.qstrvec_t_destroy(): - - qstrvec_t_destroy(py_obj) -> bool - - -ida_pro.qstrvec_t_from_list(): - - qstrvec_t_from_list(self, py_list) -> bool - - -ida_pro.qstrvec_t_get(): - - qstrvec_t_get(self, idx) -> PyObject * - - -ida_pro.qstrvec_t_get_clink(): - - qstrvec_t_get_clink(self) -> qstrvec_t * - - -ida_pro.qstrvec_t_get_clink_ptr(): - - qstrvec_t_get_clink_ptr(self) -> PyObject * - - -ida_pro.qstrvec_t_insert(): - - qstrvec_t_insert(self, idx, s) -> bool - - -ida_pro.qstrvec_t_remove(): - - qstrvec_t_remove(self, idx) -> bool - - -ida_pro.qstrvec_t_set(): - - qstrvec_t_set(self, idx, s) -> bool - - -ida_pro.qstrvec_t_size(): - - qstrvec_t_size(self) -> size_t - - -ida_pro.quote_cmdline_arg(): - - quote_cmdline_arg(arg) -> bool - - - Quote a command line argument if it contains escape characters. For - example, *.c will be converted into "*.c" because * may be - inadvertently expanded by the shell - - @param arg (C++: qstring *) - @return: true: modified 'arg' - - -ida_pro.qvector_reserve(): - - qvector_reserve(vec, old, cnt, elsize) -> void * - - - Change capacity of given qvector. - - @param vec: a pointer to a qvector (C++: void *) - @param old: a pointer to the qvector's array (C++: void *) - @param cnt: number of elements to reserve (C++: size_t) - @param elsize: size of each element (C++: size_t) - @return: a pointer to the newly allocated array - - -ida_pro.readbytes(): - - readbytes(h, res, size, mf) -> int - - - Read at most 4 bytes from file. - - @param h: file handle (C++: int) - @param res: value read from file (C++: uint32 *) - @param size: size of value in bytes (1,2,4) (C++: int) - @param mf: is MSB first? (C++: bool) - @return: 0 on success, nonzero otherwise - - -ida_pro.reloc_value(): - - reloc_value(value, size, delta, mf) - - -ida_pro.relocate_relobj(): - - relocate_relobj(_relobj, ea, mf) -> bool - - -class ida_pro.sel_array(): - - Proxy of C++ sel_array class - - -ida_pro.sel_array.cast(): - - cast(self) -> sel_t * - - -ida_pro.sel_array.frompointer(): - - frompointer(t) -> sel_array - - -ida_pro.sel_array_frompointer(): - - sel_array_frompointer(t) -> sel_array - - -class ida_pro.sel_pointer(): - - Proxy of C++ sel_pointer class - - -ida_pro.sel_pointer.assign(): - - assign(self, value) - - -ida_pro.sel_pointer.cast(): - - cast(self) -> sel_t * - - -ida_pro.sel_pointer.frompointer(): - - frompointer(t) -> sel_pointer - - -ida_pro.sel_pointer.value(): - - value(self) -> sel_t - - -ida_pro.sel_pointer_frompointer(): - - sel_pointer_frompointer(t) -> sel_pointer - - -ida_pro.set_bits(): - - set_bits(bitmap, low, high) - - - Set bits between [low, high) in 'bitmap'. - - - @param bitmap (C++: uchar *) - @param low (C++: size_t) - @param high (C++: size_t) - - -class ida_pro.sizevec_t(): - - Proxy of C++ qvector<(size_t)> class - - -ida_pro.sizevec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.sizevec_t.at(): - - at(self, _idx) -> size_t const & - - -ida_pro.sizevec_t.begin(): - - begin(self) -> qvector< size_t >::iterator - begin(self) -> qvector< size_t >::const_iterator - - -ida_pro.sizevec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.sizevec_t.clear(): - - clear(self) - - -ida_pro.sizevec_t.empty(): - - empty(self) -> bool - - -ida_pro.sizevec_t.end(): - - end(self) -> qvector< size_t >::iterator - end(self) -> qvector< size_t >::const_iterator - - -ida_pro.sizevec_t.erase(): - - erase(self, it) -> qvector< size_t >::iterator - erase(self, first, last) -> qvector< size_t >::iterator - - -ida_pro.sizevec_t.extract(): - - extract(self) -> size_t * - - -ida_pro.sizevec_t.find(): - - find(self, x) -> qvector< size_t >::iterator - find(self, x) -> qvector< size_t >::const_iterator - - -ida_pro.sizevec_t.grow(): - - grow(self, x=size_t()) - - -ida_pro.sizevec_t.has(): - - has(self, x) -> bool - - -ida_pro.sizevec_t.inject(): - - inject(self, s, len) - - -ida_pro.sizevec_t.insert(): - - insert(self, it, x) -> qvector< size_t >::iterator - - -ida_pro.sizevec_t.pop_back(): - - pop_back(self) - - -ida_pro.sizevec_t.push_back(): - - push_back(self, x) - push_back(self) -> size_t & - - -ida_pro.sizevec_t.qclear(): - - qclear(self) - - -ida_pro.sizevec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.sizevec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.sizevec_t.size(): - - size(self) -> size_t - - -ida_pro.sizevec_t.swap(): - - swap(self, r) - - -ida_pro.sizevec_t.truncate(): - - truncate(self) - - -ida_pro.str2user(): - - str2user(str) -> PyObject * - - - Insert C-style escape characters to string - - @return: new string with escape characters inserted - - -class ida_pro.strvec_t(): - - Proxy of C++ qvector<(simpleline_t)> class - - -ida_pro.strvec_t.append(): - - push_back(self, x) - push_back(self) -> simpleline_t & - - -ida_pro.strvec_t.at(): - - __getitem__(self, i) -> simpleline_t const & - - -ida_pro.strvec_t.begin(): - - begin(self) -> qvector< simpleline_t >::iterator - begin(self) -> qvector< simpleline_t >::const_iterator - - -ida_pro.strvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.strvec_t.clear(): - - clear(self) - - -ida_pro.strvec_t.empty(): - - empty(self) -> bool - - -ida_pro.strvec_t.end(): - - end(self) -> qvector< simpleline_t >::iterator - end(self) -> qvector< simpleline_t >::const_iterator - - -ida_pro.strvec_t.erase(): - - erase(self, it) -> qvector< simpleline_t >::iterator - erase(self, first, last) -> qvector< simpleline_t >::iterator - - -ida_pro.strvec_t.extract(): - - extract(self) -> simpleline_t * - - -ida_pro.strvec_t.grow(): - - grow(self, x=simpleline_t()) - - -ida_pro.strvec_t.inject(): - - inject(self, s, len) - - -ida_pro.strvec_t.insert(): - - insert(self, it, x) -> qvector< simpleline_t >::iterator - - -ida_pro.strvec_t.pop_back(): - - pop_back(self) - - -ida_pro.strvec_t.push_back(): - - push_back(self, x) - push_back(self) -> simpleline_t & - - -ida_pro.strvec_t.qclear(): - - qclear(self) - - -ida_pro.strvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.strvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.strvec_t.size(): - - size(self) -> size_t - - -ida_pro.strvec_t.swap(): - - swap(self, r) - - -ida_pro.strvec_t.truncate(): - - truncate(self) - - -class ida_pro.sval_pointer(): - - Proxy of C++ sval_pointer class - - -ida_pro.sval_pointer.assign(): - - assign(self, value) - - -ida_pro.sval_pointer.cast(): - - cast(self) -> sval_t * - - -ida_pro.sval_pointer.frompointer(): - - frompointer(t) -> sval_pointer - - -ida_pro.sval_pointer.value(): - - value(self) -> sval_t - - -ida_pro.sval_pointer_frompointer(): - - sval_pointer_frompointer(t) -> sval_pointer - - -class ida_pro.svalvec_t(): - - Proxy of C++ qvector<(signed-ea-like-numeric-type)> class - - -ida_pro.svalvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.svalvec_t.append(): - - push_back(self, x) - push_back(self) -> signed-ea-like-numeric-type & - - -ida_pro.svalvec_t.at(): - - __getitem__(self, i) -> signed-ea-like-numeric-type & - - -ida_pro.svalvec_t.begin(): - - begin(self) -> qvector< signed-ea-like-numeric-type >::iterator - begin(self) -> qvector< signed-ea-like-numeric-type >::const_iterator - - -ida_pro.svalvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.svalvec_t.clear(): - - clear(self) - - -ida_pro.svalvec_t.empty(): - - empty(self) -> bool - - -ida_pro.svalvec_t.end(): - - end(self) -> qvector< signed-ea-like-numeric-type >::iterator - end(self) -> qvector< signed-ea-like-numeric-type >::const_iterator - - -ida_pro.svalvec_t.erase(): - - erase(self, it) -> qvector< signed-ea-like-numeric-type >::iterator - erase(self, first, last) -> qvector< signed-ea-like-numeric-type >::iterator - - -ida_pro.svalvec_t.extract(): - - extract(self) -> signed-ea-like-numeric-type * - - -ida_pro.svalvec_t.find(): - - find(self, x) -> qvector< signed-ea-like-numeric-type >::iterator - find(self, x) -> qvector< signed-ea-like-numeric-type >::const_iterator - - -ida_pro.svalvec_t.has(): - - has(self, x) -> bool - - -ida_pro.svalvec_t.inject(): - - inject(self, s, len) - - -ida_pro.svalvec_t.insert(): - - insert(self, it, x) -> qvector< signed-ea-like-numeric-type >::iterator - - -ida_pro.svalvec_t.pop_back(): - - pop_back(self) - - -ida_pro.svalvec_t.push_back(): - - push_back(self, x) - push_back(self) -> signed-ea-like-numeric-type & - - -ida_pro.svalvec_t.qclear(): - - qclear(self) - - -ida_pro.svalvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.svalvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.svalvec_t.size(): - - size(self) -> size_t - - -ida_pro.svalvec_t.swap(): - - swap(self, r) - - -ida_pro.svalvec_t.truncate(): - - truncate(self) - - -class ida_pro.tid_array(): - - Proxy of C++ tid_array class - - -ida_pro.tid_array.cast(): - - cast(self) -> tid_t * - - -ida_pro.tid_array.frompointer(): - - frompointer(t) -> tid_array - - -ida_pro.tid_array_frompointer(): - - tid_array_frompointer(t) -> tid_array - - -class ida_pro.uchar_array(): - - Proxy of C++ uchar_array class - - -ida_pro.uchar_array.cast(): - - cast(self) -> uchar * - - -ida_pro.uchar_array.frompointer(): - - frompointer(t) -> uchar_array - - -ida_pro.uchar_array_frompointer(): - - uchar_array_frompointer(t) -> uchar_array - - -class ida_pro.uint64vec_t(): - - Proxy of C++ qvector<(unsigned long long)> class - - -ida_pro.uint64vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.uint64vec_t.append(): - - push_back(self, x) - push_back(self) -> unsigned long long & - - -ida_pro.uint64vec_t.at(): - - __getitem__(self, i) -> unsigned long long const & - - -ida_pro.uint64vec_t.begin(): - - begin(self) -> qvector< unsigned long long >::iterator - begin(self) -> qvector< unsigned long long >::const_iterator - - -ida_pro.uint64vec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.uint64vec_t.clear(): - - clear(self) - - -ida_pro.uint64vec_t.empty(): - - empty(self) -> bool - - -ida_pro.uint64vec_t.end(): - - end(self) -> qvector< unsigned long long >::iterator - end(self) -> qvector< unsigned long long >::const_iterator - - -ida_pro.uint64vec_t.erase(): - - erase(self, it) -> qvector< unsigned long long >::iterator - erase(self, first, last) -> qvector< unsigned long long >::iterator - - -ida_pro.uint64vec_t.extract(): - - extract(self) -> unsigned long long * - - -ida_pro.uint64vec_t.find(): - - find(self, x) -> qvector< unsigned long long >::iterator - find(self, x) -> qvector< unsigned long long >::const_iterator - - -ida_pro.uint64vec_t.has(): - - has(self, x) -> bool - - -ida_pro.uint64vec_t.inject(): - - inject(self, s, len) - - -ida_pro.uint64vec_t.insert(): - - insert(self, it, x) -> qvector< unsigned long long >::iterator - - -ida_pro.uint64vec_t.pop_back(): - - pop_back(self) - - -ida_pro.uint64vec_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned long long & - - -ida_pro.uint64vec_t.qclear(): - - qclear(self) - - -ida_pro.uint64vec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.uint64vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.uint64vec_t.size(): - - size(self) -> size_t - - -ida_pro.uint64vec_t.swap(): - - swap(self, r) - - -ida_pro.uint64vec_t.truncate(): - - truncate(self) - - -class ida_pro.uintvec_t(): - - Proxy of C++ qvector<(unsigned int)> class - - -ida_pro.uintvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.uintvec_t.append(): - - push_back(self, x) - push_back(self) -> unsigned int & - - -ida_pro.uintvec_t.at(): - - __getitem__(self, i) -> unsigned int const & - - -ida_pro.uintvec_t.begin(): - - begin(self) -> qvector< unsigned int >::iterator - begin(self) -> qvector< unsigned int >::const_iterator - - -ida_pro.uintvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.uintvec_t.clear(): - - clear(self) - - -ida_pro.uintvec_t.empty(): - - empty(self) -> bool - - -ida_pro.uintvec_t.end(): - - end(self) -> qvector< unsigned int >::iterator - end(self) -> qvector< unsigned int >::const_iterator - - -ida_pro.uintvec_t.erase(): - - erase(self, it) -> qvector< unsigned int >::iterator - erase(self, first, last) -> qvector< unsigned int >::iterator - - -ida_pro.uintvec_t.extract(): - - extract(self) -> unsigned int * - - -ida_pro.uintvec_t.find(): - - find(self, x) -> qvector< unsigned int >::iterator - find(self, x) -> qvector< unsigned int >::const_iterator - - -ida_pro.uintvec_t.has(): - - has(self, x) -> bool - - -ida_pro.uintvec_t.inject(): - - inject(self, s, len) - - -ida_pro.uintvec_t.insert(): - - insert(self, it, x) -> qvector< unsigned int >::iterator - - -ida_pro.uintvec_t.pop_back(): - - pop_back(self) - - -ida_pro.uintvec_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned int & - - -ida_pro.uintvec_t.qclear(): - - qclear(self) - - -ida_pro.uintvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.uintvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.uintvec_t.size(): - - size(self) -> size_t - - -ida_pro.uintvec_t.swap(): - - swap(self, r) - - -ida_pro.uintvec_t.truncate(): - - truncate(self) - - -class ida_pro.ulonglongvec_t(): - - Proxy of C++ qvector<(unsigned long long)> class - - -ida_pro.ulonglongvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.ulonglongvec_t.append(): - - push_back(self, x) - push_back(self) -> unsigned long long & - - -ida_pro.ulonglongvec_t.at(): - - __getitem__(self, i) -> unsigned long long const & - - -ida_pro.ulonglongvec_t.begin(): - - begin(self) -> qvector< unsigned long long >::iterator - begin(self) -> qvector< unsigned long long >::const_iterator - - -ida_pro.ulonglongvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.ulonglongvec_t.clear(): - - clear(self) - - -ida_pro.ulonglongvec_t.empty(): - - empty(self) -> bool - - -ida_pro.ulonglongvec_t.end(): - - end(self) -> qvector< unsigned long long >::iterator - end(self) -> qvector< unsigned long long >::const_iterator - - -ida_pro.ulonglongvec_t.erase(): - - erase(self, it) -> qvector< unsigned long long >::iterator - erase(self, first, last) -> qvector< unsigned long long >::iterator - - -ida_pro.ulonglongvec_t.extract(): - - extract(self) -> unsigned long long * - - -ida_pro.ulonglongvec_t.find(): - - find(self, x) -> qvector< unsigned long long >::iterator - find(self, x) -> qvector< unsigned long long >::const_iterator - - -ida_pro.ulonglongvec_t.has(): - - has(self, x) -> bool - - -ida_pro.ulonglongvec_t.inject(): - - inject(self, s, len) - - -ida_pro.ulonglongvec_t.insert(): - - insert(self, it, x) -> qvector< unsigned long long >::iterator - - -ida_pro.ulonglongvec_t.pop_back(): - - pop_back(self) - - -ida_pro.ulonglongvec_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned long long & - - -ida_pro.ulonglongvec_t.qclear(): - - qclear(self) - - -ida_pro.ulonglongvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.ulonglongvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.ulonglongvec_t.size(): - - size(self) -> size_t - - -ida_pro.ulonglongvec_t.swap(): - - swap(self, r) - - -ida_pro.ulonglongvec_t.truncate(): - - truncate(self) - - -class ida_pro.uval_array(): - - Proxy of C++ uval_array class - - -ida_pro.uval_array.cast(): - - cast(self) -> uval_t * - - -ida_pro.uval_array.frompointer(): - - frompointer(t) -> uval_array - - -ida_pro.uval_array_frompointer(): - - uval_array_frompointer(t) -> uval_array - - -class ida_pro.uvalvec_t(): - - Proxy of C++ qvector<(unsigned-ea-like-numeric-type)> class - - -ida_pro.uvalvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_pro.uvalvec_t.append(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_pro.uvalvec_t.at(): - - __getitem__(self, i) -> unsigned-ea-like-numeric-type & - - -ida_pro.uvalvec_t.begin(): - - begin(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - begin(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.uvalvec_t.capacity(): - - capacity(self) -> size_t - - -ida_pro.uvalvec_t.clear(): - - clear(self) - - -ida_pro.uvalvec_t.empty(): - - empty(self) -> bool - - -ida_pro.uvalvec_t.end(): - - end(self) -> qvector< unsigned-ea-like-numeric-type >::iterator - end(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.uvalvec_t.erase(): - - erase(self, it) -> qvector< unsigned-ea-like-numeric-type >::iterator - erase(self, first, last) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_pro.uvalvec_t.extract(): - - extract(self) -> unsigned-ea-like-numeric-type * - - -ida_pro.uvalvec_t.find(): - - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - find(self, x) -> qvector< unsigned-ea-like-numeric-type >::const_iterator - - -ida_pro.uvalvec_t.has(): - - has(self, x) -> bool - - -ida_pro.uvalvec_t.inject(): - - inject(self, s, len) - - -ida_pro.uvalvec_t.insert(): - - insert(self, it, x) -> qvector< unsigned-ea-like-numeric-type >::iterator - - -ida_pro.uvalvec_t.pop_back(): - - pop_back(self) - - -ida_pro.uvalvec_t.push_back(): - - push_back(self, x) - push_back(self) -> unsigned-ea-like-numeric-type & - - -ida_pro.uvalvec_t.qclear(): - - qclear(self) - - -ida_pro.uvalvec_t.reserve(): - - reserve(self, cnt) - - -ida_pro.uvalvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_pro.uvalvec_t.size(): - - size(self) -> size_t - - -ida_pro.uvalvec_t.swap(): - - swap(self, r) - - -ida_pro.uvalvec_t.truncate(): - - truncate(self) - - -ida_pro.writebytes(): - - writebytes(h, l, size, mf) -> int - - - Write at most 4 bytes to file. - - @param h: file handle (C++: int) - @param l: value to write (C++: uint32) - @param size: size of value in bytes (1,2,4) (C++: int) - @param mf: is MSB first? (C++: bool) - @return: 0 on success, nonzero otherwise - - - -=== ida_pro EPYDOC INJECTIONS === -ida_pro.CP_UTF16 -""" -UTF-16 codepage. -""" - -ida_pro.IDA_SDK_VERSION -""" -IDA SDK v7.3. -""" - -ida_pro.IDBDEC_ESCAPE -""" -convert non-printable characters to C escapes (, \\xNN, \\uNNNN) -""" - -ida_pro.IOREDIR_APPEND -""" -append, do not overwrite the output file -""" - -ida_pro.IOREDIR_INPUT -""" -input redirection -""" - -ida_pro.IOREDIR_OUTPUT -""" -output redirection -""" - -ida_pro.IOREDIR_QUOTED -""" -the file name was quoted -""" - -ida_pro.MAXSTR -""" -maximum string size -""" - -ida_pro.SUBSTCHAR -""" -default char, used if a char cannot be represented in a codepage -""" - -ida_pro.__MF__ -""" -byte sex of our platform (Most significant byte First). 0: little -endian (Intel 80x86). 1: big endian (PowerPC). -""" -=== ida_pro EPYDOC INJECTIONS END === -ida_problems.forget_problem(): - - forget_problem(type, ea) -> bool - - - Remove an address from a problem list - - @param type: problem list type (C++: problist_id_t) - @param ea: linear address (C++: ea_t) - @return: success - - -ida_problems.get_problem(): - - get_problem(type, lowea) -> ea_t - - - Get an address from the specified problem list. The address is not - removed from the list. - - @param type: problem list type (C++: problist_id_t) - @param lowea: the returned address will be higher or equal than the - specified address (C++: ea_t) - @return: linear address or BADADDR - - -ida_problems.get_problem_desc(): - - get_problem_desc(t, ea) -> ssize_t - - - Get the human-friendly description of the problem, if one was provided - to remember_problem. - - @param t: problem list type. (C++: problist_id_t) - @param ea: linear address. (C++: ea_t) - @return: the message length or -1 if none - - -ida_problems.get_problem_name(): - - get_problem_name(type, longname=True) -> char const * - - - Get problem list description. - - - @param type (C++: problist_id_t) - @param longname (C++: bool) - - -ida_problems.is_problem_present(): - - is_problem_present(t, ea) -> bool - - - Check if the specified address is present in the problem list. - - - @param t (C++: problist_id_t) - @param ea (C++: ea_t) - - -ida_problems.remember_problem(): - - remember_problem(type, ea, msg=None) - - - Insert an address to a list of problems. Display a message saying - about the problem (except of 'PR_ATTN' , 'PR_FINAL' ) 'PR_JUMP' is - temporarily ignored. - - @param type: problem list type (C++: problist_id_t) - @param ea: linear address (C++: ea_t) - @param msg: a user-friendly message to be displayed instead of the - default more generic one associated with the type of - problem. Defaults to NULL. (C++: const char *) - - -ida_problems.was_ida_decision(): - - was_ida_decision(ea) -> bool - - -class ida_range.array_of_rangesets(): - - Proxy of C++ qvector<(rangeset_t)> class - - -ida_range.array_of_rangesets.add_unique(): - - add_unique(self, x) -> bool - - -ida_range.array_of_rangesets.at(): - - at(self, _idx) -> rangeset_t - - -ida_range.array_of_rangesets.begin(): - - begin(self) -> rangeset_t - begin(self) -> rangeset_t - - -ida_range.array_of_rangesets.capacity(): - - capacity(self) -> size_t - - -ida_range.array_of_rangesets.clear(): - - clear(self) - - -ida_range.array_of_rangesets.empty(): - - empty(self) -> bool - - -ida_range.array_of_rangesets.end(): - - end(self) -> rangeset_t - end(self) -> rangeset_t - - -ida_range.array_of_rangesets.erase(): - - erase(self, it) -> rangeset_t - erase(self, first, last) -> rangeset_t - - -ida_range.array_of_rangesets.extract(): - - extract(self) -> rangeset_t - - -ida_range.array_of_rangesets.find(): - - find(self, x) -> rangeset_t - find(self, x) -> rangeset_t - - -ida_range.array_of_rangesets.grow(): - - grow(self, x=rangeset_t()) - - -ida_range.array_of_rangesets.has(): - - has(self, x) -> bool - - -ida_range.array_of_rangesets.inject(): - - inject(self, s, len) - - -ida_range.array_of_rangesets.insert(): - - insert(self, it, x) -> rangeset_t - - -ida_range.array_of_rangesets.pop_back(): - - pop_back(self) - - -ida_range.array_of_rangesets.push_back(): - - push_back(self, x) - push_back(self) -> rangeset_t - - -ida_range.array_of_rangesets.qclear(): - - qclear(self) - - -ida_range.array_of_rangesets.reserve(): - - reserve(self, cnt) - - -ida_range.array_of_rangesets.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_range.array_of_rangesets.size(): - - size(self) -> size_t - - -ida_range.array_of_rangesets.swap(): - - swap(self, r) - - -ida_range.array_of_rangesets.truncate(): - - truncate(self) - - -class ida_range.range_t(): - - Proxy of C++ range_t class - - -ida_range.range_t._print(): - - _print(self) -> size_t - - -ida_range.range_t.clear(): - - clear(self) - - -ida_range.range_t.compare(): - - compare(self, r) -> int - - -ida_range.range_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_range.range_t.empty(): - - empty(self) -> bool - - -ida_range.range_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_range.range_t.extend(): - - extend(self, ea) - - -ida_range.range_t.intersect(): - - intersect(self, r) - - -ida_range.range_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_range.range_t.size(): - - size(self) -> asize_t - - -ida_range.range_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_range.range_t_print(): - - range_t_print(cb) -> size_t - - - Helper function. Should not be called directly! - - -class ida_range.rangeset_t(): - - Proxy of C++ rangeset_t class - - -ida_range.rangeset_t._print(): - - _print(self) -> size_t - - -ida_range.rangeset_t.add(): - - add(self, range) -> bool - add(self, start, _end) -> bool - add(self, aset) -> bool - - -ida_range.rangeset_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_range.rangeset_t.cached_range(): - - cached_range(self) -> range_t - - -ida_range.rangeset_t.clear(): - - clear(self) - - -ida_range.rangeset_t.contains(): - - contains(self, ea) -> bool - contains(self, aset) -> bool - - -ida_range.rangeset_t.empty(): - - empty(self) -> bool - - -ida_range.rangeset_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_range.rangeset_t.find_range(): - - find_range(self, ea) -> range_t - - -ida_range.rangeset_t.getrange(): - - getrange(self, idx) -> range_t - - -ida_range.rangeset_t.has_common(): - - has_common(self, range) -> bool - has_common(self, aset) -> bool - - -ida_range.rangeset_t.includes(): - - includes(self, range) -> bool - - -ida_range.rangeset_t.intersect(): - - intersect(self, aset) -> bool - - -ida_range.rangeset_t.is_equal(): - - is_equal(self, aset) -> bool - - -ida_range.rangeset_t.is_subset_of(): - - is_subset_of(self, aset) -> bool - - -ida_range.rangeset_t.lastrange(): - - lastrange(self) -> range_t - - -ida_range.rangeset_t.next_addr(): - - next_addr(self, ea) -> ea_t - - -ida_range.rangeset_t.next_range(): - - next_range(self, ea) -> ea_t - - -ida_range.rangeset_t.nranges(): - - nranges(self) -> size_t - - -ida_range.rangeset_t.prev_addr(): - - prev_addr(self, ea) -> ea_t - - -ida_range.rangeset_t.prev_range(): - - prev_range(self, ea) -> ea_t - - -ida_range.rangeset_t.sub(): - - sub(self, range) -> bool - sub(self, ea) -> bool - sub(self, aset) -> bool - - -ida_range.rangeset_t.swap(): - - swap(self, r) - - -class ida_range.rangevec_base_t(): - - Proxy of C++ qvector<(range_t)> class - - -ida_range.rangevec_base_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_range.rangevec_base_t.at(): - - at(self, _idx) -> range_t - - -ida_range.rangevec_base_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_range.rangevec_base_t.capacity(): - - capacity(self) -> size_t - - -ida_range.rangevec_base_t.clear(): - - clear(self) - - -ida_range.rangevec_base_t.empty(): - - empty(self) -> bool - - -ida_range.rangevec_base_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_range.rangevec_base_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_range.rangevec_base_t.extract(): - - extract(self) -> range_t - - -ida_range.rangevec_base_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_range.rangevec_base_t.grow(): - - grow(self, x=range_t()) - - -ida_range.rangevec_base_t.has(): - - has(self, x) -> bool - - -ida_range.rangevec_base_t.inject(): - - inject(self, s, len) - - -ida_range.rangevec_base_t.insert(): - - insert(self, it, x) -> range_t - - -ida_range.rangevec_base_t.pop_back(): - - pop_back(self) - - -ida_range.rangevec_base_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_range.rangevec_base_t.qclear(): - - qclear(self) - - -ida_range.rangevec_base_t.reserve(): - - reserve(self, cnt) - - -ida_range.rangevec_base_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_range.rangevec_base_t.size(): - - size(self) -> size_t - - -ida_range.rangevec_base_t.swap(): - - swap(self, r) - - -ida_range.rangevec_base_t.truncate(): - - truncate(self) - - -class ida_range.rangevec_t(): - - Proxy of C++ rangevec_t class - - -ida_range.rangevec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_range.rangevec_t.at(): - - at(self, _idx) -> range_t - - -ida_range.rangevec_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_range.rangevec_t.capacity(): - - capacity(self) -> size_t - - -ida_range.rangevec_t.clear(): - - clear(self) - - -ida_range.rangevec_t.empty(): - - empty(self) -> bool - - -ida_range.rangevec_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_range.rangevec_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_range.rangevec_t.extract(): - - extract(self) -> range_t - - -ida_range.rangevec_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_range.rangevec_t.grow(): - - grow(self, x=range_t()) - - -ida_range.rangevec_t.has(): - - has(self, x) -> bool - - -ida_range.rangevec_t.inject(): - - inject(self, s, len) - - -ida_range.rangevec_t.insert(): - - insert(self, it, x) -> range_t - - -ida_range.rangevec_t.pop_back(): - - pop_back(self) - - -ida_range.rangevec_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_range.rangevec_t.qclear(): - - qclear(self) - - -ida_range.rangevec_t.reserve(): - - reserve(self, cnt) - - -ida_range.rangevec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_range.rangevec_t.size(): - - size(self) -> size_t - - -ida_range.rangevec_t.swap(): - - swap(self, r) - - -ida_range.rangevec_t.truncate(): - - truncate(self) - - -ida_registry.reg_data_type(): - - reg_data_type(name, subkey=None) -> regval_type_t - - - Get data type of a given value. - - @param name: value name (C++: const char *) - @param subkey: key name (C++: const char *) - @return: false if the [key+]value doesn't exist - - -ida_registry.reg_delete(): - - reg_delete(name, subkey=None) -> bool - - - Delete a value from the registry. - - @param name: value name (C++: const char *) - @param subkey: parent key (C++: const char *) - @return: success - - -ida_registry.reg_delete_subkey(): - - reg_delete_subkey(name) -> bool - - - Delete a key from the registry. - - - @param name (C++: const char *) - - -ida_registry.reg_delete_tree(): - - reg_delete_tree(name) -> bool - - - Delete a subtree from the registry. - - - @param name (C++: const char *) - - -ida_registry.reg_exists(): - - reg_exists(name, subkey=None) -> bool - - - Is there already a value with the given name? - - @param name: value name (C++: const char *) - @param subkey: parent key (C++: const char *) - - -ida_registry.reg_flush(): - - reg_flush() - - -ida_registry.reg_load(): - - reg_load() - - -ida_registry.reg_read_binary(): - - reg_read_binary(name, subkey=None) -> PyObject * - - - Read binary data from the registry. - - @param name: value name (C++: const char *) - @param subkey: key name (C++: const char *) - @return: false if 'data' is not large enough to hold all data present. - in this case 'data' is left untouched. - - -ida_registry.reg_read_bool(): - - reg_read_bool(name, defval, subkey=None) -> bool - - - Read boolean value from the registry. - - @param name: value name (C++: const char *) - @param defval: default value (C++: bool) - @param subkey: key name (C++: const char *) - @return: boolean read from registry, or 'defval' if the read failed - - -ida_registry.reg_read_int(): - - reg_read_int(name, defval, subkey=None) -> int - - - Read integer value from the registry. - - @param name: value name (C++: const char *) - @param defval: default value (C++: int) - @param subkey: key name (C++: const char *) - @return: the value read from the registry, or 'defval' if the read - failed - - -ida_registry.reg_read_string(): - - reg_read_string(name, subkey=None, _def=None) -> PyObject * - - - Read a string from the registry. - - @param name: value name (C++: const char *) - @param subkey: key name (C++: const char *) - @return: success - - -ida_registry.reg_read_strlist(): - - reg_read_strlist(subkey) - - - Retrieve all string values associated with the given key. Also see - 'reg_update_strlist()' . - - @param subkey (C++: const char *) - - -ida_registry.reg_subkey_exists(): - - reg_subkey_exists(name) -> bool - - - Is there already a key with the given name? - - - @param name (C++: const char *) - - -ida_registry.reg_subkey_subkeys(): - - reg_subkey_subkeys(name) -> PyObject * - - - Get all subkey names of given key. - - - @param name (C++: const char *) - - -ida_registry.reg_subkey_values(): - - reg_subkey_values(name) -> PyObject * - - - Get all value names under given key. - - - @param name (C++: const char *) - - -ida_registry.reg_update_filestrlist(): - - reg_update_filestrlist(subkey, add, maxrecs, rem=None) - - - Update registry with a file list. Case sensitivity will vary depending - on the target OS.'add' and 'rem' must be UTF-8, just like for regular - string operations. - - @param subkey (C++: const char *) - @param add (C++: const char *) - @param maxrecs (C++: size_t) - @param rem (C++: const char *) - - -ida_registry.reg_update_strlist(): - - reg_update_strlist(subkey, add, maxrecs, rem=None, ignorecase=False) - - - Update list of strings associated with given key. - - @param subkey: key name (C++: const char *) - @param add: string to be added to list, can be NULL (C++: const char - *) - @param maxrecs: limit list to this size (C++: size_t) - @param rem: string to be removed from list, can be NULL (C++: const - char *) - @param ignorecase: ignore case for 'add' and 'rem' (C++: bool) - - -ida_registry.reg_write_binary(): - - reg_write_binary(name, py_bytes, subkey=None) - - - Write binary data to the registry. - - @param name: value name (C++: const char *) - @param subkey: key name (C++: const char *) - - -ida_registry.reg_write_bool(): - - reg_write_bool(name, value, subkey=None) - - - Write boolean value to the registry. - - @param name: value name (C++: const char *) - @param value: boolean to write (nonzero = true) (C++: int) - @param subkey: key name (C++: const char *) - - -ida_registry.reg_write_int(): - - reg_write_int(name, value, subkey=None) - - - Write integer value to the registry. - - @param name: value name (C++: const char *) - @param value: value to write (C++: int) - @param subkey: key name (C++: const char *) - - -ida_registry.reg_write_string(): - - reg_write_string(name, utf8, subkey=None) - - - Write a string to the registry. - - @param name: value name (C++: const char *) - @param utf8: utf8-encoded string (C++: const char *) - @param subkey: key name (C++: const char *) - - - -=== ida_registry EPYDOC INJECTIONS === -ida_registry.ROOT_KEY_NAME -""" -Key used to store IDA settings in registry (Windows version).this name -is automatically prepended to all key names passed to functions in -this file. -""" -=== ida_registry EPYDOC INJECTIONS END === -ida_search.find_binary(): - - find_binary(arg1, arg2, arg3, arg4, arg5) -> ea_t - - -ida_search.find_code(): - - find_code(ea, sflag) -> ea_t - - - Find next code address. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_data(): - - find_data(ea, sflag) -> ea_t - - - Find next data address. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_defined(): - - find_defined(ea, sflag) -> ea_t - - - Find next ea that is the start of an instruction or data. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_error(): - - find_error(ea, sflag) -> ea_t - - - Find next error or problem. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_imm(): - - find_imm(newEA, sflag, srchValue) -> ea_t - - - Find next immediate operand with the given value. - - - @param newEA (C++: ea_t) - @param sflag (C++: int) - @param srchValue (C++: uval_t) - - -ida_search.find_not_func(): - - find_not_func(ea, sflag) -> ea_t - - - Find next code address that does not belong to a function. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_notype(): - - find_notype(ea, sflag) -> ea_t - - - Find next operand without any type info. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_suspop(): - - find_suspop(ea, sflag) -> ea_t - - - Find next suspicious operand. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.find_text(): - - find_text(start_ea, y, x, ustr, sflag) -> ea_t - - - See 'search()' - - - @param start_ea (C++: ea_t) - @param y (C++: int) - @param x (C++: int) - @param ustr (C++: const char *) - @param sflag (C++: int) - - -ida_search.find_unknown(): - - find_unknown(ea, sflag) -> ea_t - - - Find next unexplored address. - - - @param ea (C++: ea_t) - @param sflag (C++: int) - - -ida_search.search_down(): - - search_down(sflag) -> bool - - - Is the 'SEARCH_DOWN' bit set? - - - @param sflag (C++: int) - - - -=== ida_search EPYDOC INJECTIONS === -ida_search.SEARCH_BRK -""" -return 'BADADDR' if Ctrl-Break wass pressed during search -""" - -ida_search.SEARCH_CASE -""" -case-sensitive search (case-insensitive otherwise) -""" - -ida_search.SEARCH_DOWN -""" -search towards higher addresses -""" - -ida_search.SEARCH_IDENT -""" -search for an identifier (text search). it means that the characters -before and after the match cannot be is_visible_char(). -""" - -ida_search.SEARCH_NEXT -""" -for other find_.. functions it is implicitly set - -useful only for 'search()' and find_binary(). -""" - -ida_search.SEARCH_NOBRK -""" -don't test for ctrl-break to interrupt the search -""" - -ida_search.SEARCH_NOSHOW -""" -don't display the search progress/refresh screen -""" - -ida_search.SEARCH_REGEX -""" -regular expressions in search string (only supported for txt search) -""" - -ida_search.SEARCH_UP -""" -search towards lower addresses -""" -=== ida_search EPYDOC INJECTIONS END === -ida_segment.add_segm(): - - add_segm(para, start, end, name, sclass, flags=0) -> bool - - - Add a new segment, second form. Segment alignment is set to - 'saRelByte' . Segment combination is "public" or "stack" (if segment - class is "STACK"). Addressing mode of segment is taken as default - (16bit or 32bit). Default segment registers are set to 'BADSEL' . If a - segment already exists at the specified range of addresses, this - segment will be truncated. Instructions and data in the old segment - will be deleted if the new segment has another addressing mode or - another segment base address. - - @param para: segment base paragraph. if paragraph can't fit in 16bit, - then a new selector is allocated and mapped to the - paragraph. (C++: ea_t) - @param start: start address of the segment. if start== BADADDR then - start <- to_ea(para,0). (C++: ea_t) - @param end: end address of the segment. end address should be higher - than start address. For emulate empty segments, use - SEG_NULL segment type. If the end address is lower than - start address, then fail. If end== BADADDR , then a - segment up to the next segment will be created (if the - next segment doesn't exist, then 1 byte segment will be - created). If 'end' is too high and the new segment would - overlap the next segment, 'end' is adjusted properly. - (C++: ea_t) - @param name: name of new segment. may be NULL (C++: const char *) - @param sclass: class of the segment. may be NULL. type of the new - segment is modified if class is one of predefined - names: "CODE" -> SEG_CODE "DATA" -> SEG_DATA - "CONST" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> - SEG_BSS "XTRN" -> SEG_XTRN "COMM" -> SEG_COMM - "ABS" -> SEG_ABSSYM (C++: const char *) - @param flags (C++: int) - - -ida_segment.add_segm_ex(): - - add_segm_ex(s, name, sclass, flags) -> bool - - - Add a new segment. If a segment already exists at the specified range - of addresses, this segment will be truncated. Instructions and data in - the old segment will be deleted if the new segment has another - addressing mode or another segment base address. - - @param s: pointer to filled segment structure. segment selector should - have proper mapping (see set_selector() ). if - s.start_ea== BADADDR then s.start_ea <- get_segm_base(&s) - if s.end_ea== BADADDR , then a segment up to the next - segment will be created (if the next segment doesn't exist, - then 1 byte segment will be created). if the s.end_ea < - s.start_ea, then fail. if s.end_ea is too high and the new - segment would overlap the next segment, s.end_ea is adjusted - properly. (C++: segment_t *) - @param name: name of new segment. may be NULL. if specified, the - segment is immediately renamed (C++: const char *) - @param sclass: class of the segment. may be NULL. if specified, the - segment class is immediately changed (C++: const char - *) - @param flags: Add segment flags (C++: int) - - -ida_segment.add_segment_translation(): - - add_segment_translation(segstart, mappedseg) -> bool - - - Add segment translation. - - @param segstart: start address of the segment to add translation to - (C++: ea_t) - @param mappedseg: start address of the overlayed segment (C++: ea_t) - - -ida_segment.allocate_selector(): - - allocate_selector(segbase) -> sel_t - - - Allocate a selector for a segment unconditionally. You must call this - function before calling 'add_segm_ex()' . 'add_segm()' calls this - function itself, so you don't need to allocate a selector. This - function will allocate a new free selector and setup its mapping using - 'find_free_selector()' and 'set_selector()' functions. - - @param segbase: a new segment base paragraph (C++: ea_t) - @return: the allocated selector number - - -ida_segment.change_segment_status(): - - change_segment_status(s, is_deb_segm) -> int - - - Convert a debugger segment to a regular segment and vice versa. When - converting debug->regular, the memory contents will be copied to the - database. - - @param s: segment to modify (C++: segment_t *) - @param is_deb_segm: new status of the segment (C++: bool) - @return: Change segment status result codes - - -ida_segment.del_segm(): - - del_segm(ea, flags) -> bool - - - Delete a segment. - - @param ea: any address belonging to the segment (C++: ea_t) - @param flags: Segment modification flags (C++: int) - - -ida_segment.del_segment_translations(): - - del_segment_translations(segstart) - - - Delete the translation list - - @param segstart: start address of the segment to delete translation - list (C++: ea_t) - - -ida_segment.del_selector(): - - del_selector(selector) - - - Delete mapping of a selector. Be wary of deleting selectors that are - being used in the program, this can make a mess in the segments. - - @param selector: number of selector to remove from the translation - table (C++: sel_t) - - -ida_segment.find_free_selector(): - - find_free_selector() -> sel_t - - - Find first unused selector. - - @return: a number >= 1 - - -ida_segment.find_selector(): - - find_selector(base) -> sel_t - - - Find a selector that has mapping to the specified paragraph. - - @param base: paragraph to search in the translation table (C++: ea_t) - @return: selector value or base - - -ida_segment.get_defsr(): - - get_defsr(s, reg) -> sel_t - - -ida_segment.get_first_seg(): - - get_first_seg() -> segment_t - - - Get pointer to the first segment. - - -ida_segment.get_group_selector(): - - get_group_selector(grpsel) -> sel_t - - - Get common selector for a group of segments. - - @param grpsel: selector of group segment (C++: sel_t) - @return: common selector of the group or 'grpsel' if no such group is - found - - -ida_segment.get_last_seg(): - - get_last_seg() -> segment_t - - - Get pointer to the last segment. - - -ida_segment.get_next_seg(): - - get_next_seg(ea) -> segment_t - - - Get pointer to the next segment. - - - @param ea (C++: ea_t) - - -ida_segment.get_prev_seg(): - - get_prev_seg(ea) -> segment_t - - - Get pointer to the previous segment. - - - @param ea (C++: ea_t) - - -ida_segment.get_segm_base(): - - get_segm_base(s) -> ea_t - - - Get segment base linear address. Segment base linear address is used - to calculate virtual addresses. The virtual address of the first byte - of the segment will be (start address of segment - segment base linear - address) - - @param s: pointer to segment (C++: const segment_t *) - @return: 0 if s == NULL, otherwise segment base linear address - - -ida_segment.get_segm_by_name(): - - get_segm_by_name(name) -> segment_t - - - Get pointer to segment by its name. If there are several segments with - the same name, returns the first of them. - - @param name: segment name. may be NULL. (C++: const char *) - @return: NULL or pointer to segment structure - - -ida_segment.get_segm_by_sel(): - - get_segm_by_sel(selector) -> segment_t - - - Get pointer to segment structure. This function finds a segment by its - selector. If there are several segments with the same selectors, the - last one will be returned. - - @param selector: a segment with the specified selector will be - returned (C++: sel_t) - @return: pointer to segment or NULL - - -ida_segment.get_segm_class(): - - get_segm_class(s) -> ssize_t - - - Get segment class. Segment class is arbitrary text (max 8 characters). - - @param s: pointer to segment (C++: const segment_t *) - @return: size of segment class (-1 if s==NULL or bufsize<=0) - - -ida_segment.get_segm_name(): - - get_segm_name(s, flags=0) -> ssize_t - - - Get true segment name by pointer to segment. - - @param s: pointer to segment (C++: const segment_t *) - @param flags: 0-return name as is; 1-substitute bad symbols with _ 1 - corresponds to GN_VISIBLE (C++: int) - @return: size of segment name (-1 if s==NULL) - - -ida_segment.get_segm_num(): - - get_segm_num(ea) -> int - - - Get number of segment by address. - - @param ea: linear address belonging to the segment (C++: ea_t) - @return: -1 if no segment occupies the specified address. otherwise - returns number of the specified segment (0.. get_segm_qty() - -1) - - -ida_segment.get_segm_para(): - - get_segm_para(s) -> ea_t - - - Get segment base paragraph. Segment base paragraph may be converted to - segment base linear address using 'to_ea()' function. In fact, - to_ea(get_segm_para(s), 0) == get_segm_base(s). - - @param s: pointer to segment (C++: const segment_t *) - @return: 0 if s == NULL, the segment base paragraph - - -ida_segment.get_segm_qty(): - - get_segm_qty() -> int - - - Get number of segments. - - -ida_segment.get_segment_alignment(): - - get_segment_alignment(align) -> char const * - - - Get text representation of segment alignment code. - - @param align (C++: uchar) - @return: text digestable by IBM PC assembler. - - -ida_segment.get_segment_cmt(): - - get_segment_cmt(s, repeatable) -> ssize_t - - - Get segment comment. - - @param s: pointer to segment structure (C++: const segment_t *) - @param repeatable: 0: get regular comment. 1: get repeatable comment. - (C++: bool) - @return: size of comment or -1 - - -ida_segment.get_segment_combination(): - - get_segment_combination(comb) -> char const * - - - Get text representation of segment combination code. - - @param comb (C++: uchar) - @return: text digestable by IBM PC assembler. - - -ida_segment.get_segment_translations(): - - get_segment_translations(transmap, segstart) -> ssize_t - - - Get segment translation list. - - @param transmap: vector of segment start addresses for the translation - list (C++: eavec_t *) - @param segstart: start address of the segment to get information about - (C++: ea_t) - @return: -1 if no translation list or bad segstart. otherwise returns - size of translation list. - - -ida_segment.get_selector_qty(): - - get_selector_qty() -> int - - - Get number of defined selectors. - - -ida_segment.get_visible_segm_name(): - - get_visible_segm_name(s) -> ssize_t - - - Get segment name by pointer to segment. - - @param s: pointer to segment (C++: const segment_t *) - @return: size of segment name (-1 if s==NULL) - - -ida_segment.getn_selector(): - - getn_selector(n) -> bool - - - Get description of selector (0.. 'get_selector_qty()' -1) - - - @param n (C++: int) - - -ida_segment.getnseg(): - - getnseg(n) -> segment_t - - - Get pointer to segment by its number.Obsoleted because it can slow - down the debugger (it has to refresh the whole memory segmentation to - calculate the correct answer) - - @param n: segment number in the range (0.. get_segm_qty() -1) (C++: - int) - @return: NULL or pointer to segment structure - - -ida_segment.getseg(): - - getseg(ea) -> segment_t - - - Get pointer to segment by linear address. - - @param ea: linear address belonging to the segment (C++: ea_t) - @return: NULL or pointer to segment structure - - -ida_segment.is_finally_visible_segm(): - - is_finally_visible_segm(s) -> bool - - - See 'SFL_HIDDEN' , 'SCF_SHHID_SEGM' . - - - @param s (C++: segment_t *) - - -ida_segment.is_miniidb(): - - is_miniidb() -> bool - - - Is the database a miniidb created by the debugger?. - - @return: true if the database contains no segments or only debugger - segments - - -ida_segment.is_segm_locked(): - - is_segm_locked(segm) -> bool - - - Is a segment pointer locked? - - - @param segm (C++: const segment_t *) - - -ida_segment.is_spec_ea(): - - is_spec_ea(ea) -> bool - - - Does the address belong to a segment with a special type?. ( - 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , 'SEG_COMM' ) - - @param ea: linear address (C++: ea_t) - - -ida_segment.is_spec_segm(): - - is_spec_segm(seg_type) -> bool - - - Has segment a special type?. ( 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , - 'SEG_COMM' ) - - @param seg_type (C++: uchar) - - -ida_segment.is_visible_segm(): - - is_visible_segm(s) -> bool - - - See 'SFL_HIDDEN' . - - - @param s (C++: segment_t *) - - -ida_segment.lock_segm(): - - lock_segm(segm, lock) - - - Lock segment pointer Locked pointers are guaranteed to remain valid - until they are unlocked. Ranges with locked pointers cannot be deleted - or moved. - - @param segm (C++: const segment_t *) - @param lock (C++: bool) - - -class ida_segment.lock_segment(): - - Proxy of C++ lock_segment class - - -ida_segment.move_segm(): - - 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. - - @param s: segment to move (C++: segment_t *) - @param to: new segment start address (C++: ea_t) - @param flags: Move segment flags (C++: int) - @return: Move segment result codes - - -ida_segment.move_segm_start(): - - move_segm_start(ea, newstart, mode) -> bool - - - Move segment start. The main difference between this function and - 'set_segm_start()' is that this function may expand the previous - segment while 'set_segm_start()' never does it. So, this function - allows to change bounds of two segments simultaneously. If the - previous segment and the specified segment have the same addressing - mode and segment base, then instructions and data are not destroyed - - they simply move from one segment to another. Otherwise all - instructions/data which migrate from one segment to another are - destroyed.this function never disables addresses. - - @param ea: any address belonging to the segment (C++: ea_t) - @param newstart: new start address of the segment note that segment - start address should be higher than segment base - linear address. (C++: ea_t) - @param mode: policy for destroying defined items 0: if it is - necessary to destroy defined items, display a dialog box - and ask confirmation 1: if it is necessary to destroy - defined items, just destroy them without asking the user - -1: if it is necessary to destroy defined items, don't - destroy them (i.e. function will fail) -2: don't - destroy defined items (function will succeed) (C++: int) - - -ida_segment.rebase_program(): - - rebase_program(delta, flags) -> int - - - Rebase the whole program by 'delta' bytes. - - @param delta: number of bytes to move the program (C++: adiff_t) - @param flags: Move segment flags it is recommended to use - MSF_FIXONCE so that the loader takes care of global - variables it stored in the database (C++: int) - @return: Move segment result codes - - -ida_segment.segm_adjust_diff(): - - segm_adjust_diff(s, delta) -> adiff_t - - - Truncate and sign extend a delta depending on the segment. - - - @param s (C++: const segment_t *) - @param delta (C++: adiff_t) - - -ida_segment.segm_adjust_ea(): - - segm_adjust_ea(s, ea) -> ea_t - - - Truncate an address depending on the segment. - - - @param s (C++: const segment_t *) - @param ea (C++: ea_t) - - -class ida_segment.segment_t(): - - Proxy of C++ segment_t class - - -ida_segment.segment_t._print(): - - _print(self) -> size_t - - -ida_segment.segment_t.abits(): - - abits(self) -> int - - -ida_segment.segment_t.abytes(): - - abytes(self) -> int - - -ida_segment.segment_t.align: - segment_t_align_get(self) -> uchar - -ida_segment.segment_t.bitness: - segment_t_bitness_get(self) -> uchar - -ida_segment.segment_t.clear(): - - clear(self) - - -ida_segment.segment_t.clr_comorg(): - - clr_comorg(self) - - -ida_segment.segment_t.clr_ob_ok(): - - clr_ob_ok(self) - - -ida_segment.segment_t.color: - segment_t_color_get(self) -> bgcolor_t - -ida_segment.segment_t.comb: - segment_t_comb_get(self) -> uchar - -ida_segment.segment_t.comorg(): - - comorg(self) -> bool - - -ida_segment.segment_t.compare(): - - compare(self, r) -> int - - -ida_segment.segment_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_segment.segment_t.defsr: - segment_t_defsr_get(self) -> sel_t [16] - -ida_segment.segment_t.empty(): - - empty(self) -> bool - - -ida_segment.segment_t.end_ea: - segment_t_end_ea_get(self) -> ea_t - -ida_segment.segment_t.extend(): - - extend(self, ea) - - -ida_segment.segment_t.flags: - segment_t_flags_get(self) -> ushort - -ida_segment.segment_t.intersect(): - - intersect(self, r) - - -ida_segment.segment_t.is_header_segm(): - - is_header_segm(self) -> bool - - -ida_segment.segment_t.is_hidden_segtype(): - - is_hidden_segtype(self) -> bool - - -ida_segment.segment_t.is_loader_segm(): - - is_loader_segm(self) -> bool - - -ida_segment.segment_t.is_visible_segm(): - - is_visible_segm(self) -> bool - - -ida_segment.segment_t.name: - segment_t_name_get(self) -> uval_t - -ida_segment.segment_t.ob_ok(): - - ob_ok(self) -> bool - - -ida_segment.segment_t.orgbase: - segment_t_orgbase_get(self) -> uval_t - -ida_segment.segment_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_segment.segment_t.perm: - segment_t_perm_get(self) -> uchar - -ida_segment.segment_t.sclass: - segment_t_sclass_get(self) -> uval_t - -ida_segment.segment_t.sel: - segment_t_sel_get(self) -> sel_t - -ida_segment.segment_t.set_comorg(): - - set_comorg(self) - - -ida_segment.segment_t.set_debugger_segm(): - - set_debugger_segm(self, debseg) - - -ida_segment.segment_t.set_header_segm(): - - set_header_segm(self, on) - - -ida_segment.segment_t.set_hidden_segtype(): - - set_hidden_segtype(self, hide) - - -ida_segment.segment_t.set_loader_segm(): - - set_loader_segm(self, ldrseg) - - -ida_segment.segment_t.set_ob_ok(): - - set_ob_ok(self) - - -ida_segment.segment_t.set_visible_segm(): - - set_visible_segm(self, visible) - - -ida_segment.segment_t.size(): - - size(self) -> asize_t - - -ida_segment.segment_t.start_ea: - segment_t_start_ea_get(self) -> ea_t - -ida_segment.segment_t.type: - segment_t_type_get(self) -> uchar - -ida_segment.segment_t.update(): - - update(self) -> bool - - -ida_segment.segment_t.use32(): - - use32(self) -> bool - - -ida_segment.segment_t.use64(): - - use64(self) -> bool - - -ida_segment.segtype(): - - segtype(ea) -> uchar - - - Get segment type. - - @param ea: any linear address within the segment (C++: ea_t) - @return: Segment types , SEG_UNDF if no segment found at 'ea' - - -ida_segment.sel2ea(): - - sel2ea(selector) -> ea_t - - - Get mapping of a selector as a linear address. - - @param selector: number of selector to translate to linear address - (C++: sel_t) - @return: linear address the specified selector is mapped to. if there - is no mapping, returns to_ea(selector,0); - - -ida_segment.sel2para(): - - sel2para(selector) -> ea_t - - - Get mapping of a selector. - - @param selector: number of selector to translate (C++: sel_t) - @return: paragraph the specified selector is mapped to. if there is no - mapping, returns 'selector'. - - -ida_segment.set_defsr(): - - set_defsr(s, reg, value) - - -ida_segment.set_group_selector(): - - set_group_selector(grp, sel) -> int - - - Initialize groups. The kernel calls this function at the start of - work.Create a new group of segments (used OMF files). - - @param grp: selector of group segment (segment type is SEG_GRP ) You - should create an 'empty' (1 byte) group segment It won't - contain anything and will be used to redirect references - to the group of segments to the common selector. (C++: - sel_t) - @param sel: common selector of all segments belonging to the segment - You should create all segments within the group with the - same selector value. (C++: sel_t) - @return: 1 ok - - -ida_segment.set_segm_addressing(): - - set_segm_addressing(s, bitness) -> bool - - - Change segment addressing mode (16, 32, 64 bits). You must use this - function to change segment addressing, never change the 'bitness' - field directly. This function will delete all instructions, comments - and names in the segment - - @param s: pointer to segment (C++: segment_t *) - @param bitness: new addressing mode of segment 2: 64bit segment 1: - 32bit segment 0: 16bit segment (C++: size_t) - @return: success - - -ida_segment.set_segm_base(): - - set_segm_base(s, newbase) -> bool - - - Internal function. - - - @param s (C++: segment_t *) - @param newbase (C++: ea_t) - - -ida_segment.set_segm_class(): - - set_segm_class(s, sclass, flags=0) -> int - - - Set segment class. - - @param s: pointer to segment (may be NULL) (C++: segment_t *) - @param sclass: segment class (may be NULL). If segment type is - SEG_NORM and segment class is one of predefined names, - then segment type is changed to: "CODE" -> SEG_CODE - "DATA" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> - SEG_BSS if "UNK" then segment type is reset to - SEG_NORM . (C++: const char *) - @param flags (C++: int) - - -ida_segment.set_segm_end(): - - set_segm_end(ea, newend, flags) -> bool - - - Set segment end address. The next segment is shrinked to allow - expansion of the specified segment. The kernel might even delete the - next segment if necessary. The kernel will ask the user for a - permission to destroy instructions or data going out of segment scope - if such instructions exist. - - @param ea: any address belonging to the segment (C++: ea_t) - @param newend: new end address of the segment (C++: ea_t) - @param flags: Segment modification flags (C++: int) - - -ida_segment.set_segm_name(): - - set_segm_name(s, name, flags=0) -> int - - - Rename segment. The new name is validated (see validate_name). A - segment always has a name. If you hadn't specified a name, the kernel - will assign it "seg###" name where ### is segment number. - - @param s: pointer to segment (may be NULL) (C++: segment_t *) - @param name: new segment name (C++: const char *) - @param flags: ADDSEG_IDBENC or 0 (C++: int) - - -ida_segment.set_segm_start(): - - set_segm_start(ea, newstart, flags) -> bool - - - Set segment start address. The previous segment is trimmed to allow - expansion of the specified segment. The kernel might even delete the - previous segment if necessary. The kernel will ask the user for a - permission to destroy instructions or data going out of segment scope - if such instructions exist. - - @param ea: any address belonging to the segment (C++: ea_t) - @param newstart: new start address of the segment note that segment - start address should be higher than segment base - linear address. (C++: ea_t) - @param flags: Segment modification flags (C++: int) - - -ida_segment.set_segment_cmt(): - - set_segment_cmt(s, cmt, repeatable) - - - Set segment comment. - - @param s: pointer to segment structure (C++: const segment_t *) - @param cmt: comment string, may be multiline (with ' '). maximal size - is 4096 bytes. Use empty str ("") to delete comment (C++: - const char *) - @param repeatable: 0: set regular comment. 1: set repeatable comment. - (C++: bool) - - -ida_segment.set_segment_translations(): - - set_segment_translations(segstart, transmap) -> bool - - - Set new translation list. - - @param segstart: start address of the segment to add translation to - (C++: ea_t) - @param transmap: vector of segment start addresses for the translation - list. If transmap is empty, the translation list is - deleted. (C++: const eavec_t &) - - -ida_segment.set_selector(): - - set_selector(selector, paragraph) -> int - - - Set mapping of selector to a paragraph. You should call this - functionbeforecreating a segment which uses the selector, otherwise - the creation of the segment will fail. - - @param selector: number of selector to map if selector == BADSEL , - then return 0 (fail) if the selector has had a - mapping, old mapping is destroyed if the selector - number is equal to paragraph value, then the mapping - is destroyed because we don't need to keep trivial - mappings. (C++: sel_t) - @param paragraph: paragraph to map selector (C++: ea_t) - - -ida_segment.set_visible_segm(): - - set_visible_segm(s, visible) - - - See 'SFL_HIDDEN' . - - - @param s (C++: segment_t *) - @param visible (C++: bool) - - -ida_segment.setup_selector(): - - setup_selector(segbase) -> sel_t - - - Allocate a selector for a segment if necessary. You must call this - function before calling 'add_segm_ex()' . 'add_segm()' calls this - function itself, so you don't need to allocate a selector. This - function will allocate a selector if 'segbase' requires more than 16 - bits and the current processor is IBM PC. Otherwise it will return the - segbase value. - - @param segbase: a new segment base paragraph (C++: ea_t) - @return: the allocated selector number - - -ida_segment.std_out_segm_footer(): - - std_out_segm_footer(ctx, seg) - - - Generate segment footer line as a comment line. This function may be - used in IDP modules to generate segment footer if the target assembler - doesn't have 'ends' directive. - - @param ctx (C++: struct outctx_t &) - @param seg (C++: segment_t *) - - -ida_segment.take_memory_snapshot(): - - take_memory_snapshot(only_loader_segs) -> bool - - - Take a memory snapshot of the running process. - - @param only_loader_segs: only is_loader_segm() segments will be - affected (C++: bool) - @return: success - - -ida_segment.update_segm(): - - update_segm(s) -> bool - - - -=== ida_segment EPYDOC INJECTIONS === -ida_segment.ADDSEG_FILLGAP -""" -fill gap between new segment and previous one. i.e. if such a gap -exists, and this gap is less than 64K, then fill the gap by extending -the previous segment and adding .align directive to it. This way we -avoid gaps between segments. too many gaps lead to a virtual array -failure. it cannot hold more than ~1000 gaps. -""" - -ida_segment.ADDSEG_IDBENC -""" -non-ASCII bytes will be decoded accordingly - -'name' and 'sclass' are given in the IDB encoding; -""" - -ida_segment.ADDSEG_NOAA -""" -do not mark new segment for auto-analysis -""" - -ida_segment.ADDSEG_NOSREG -""" -(undefine all default segment registers) - -set all default segment register values to 'BADSEL' -""" - -ida_segment.ADDSEG_NOTRUNC -""" -destroy/truncate old segments instead. - -don't truncate the new segment at the beginning of the next segment if -they overlap. -""" - -ida_segment.ADDSEG_OR_DIE -""" - 'qexit()' if can't add a segment -""" - -ida_segment.ADDSEG_QUIET -""" -silent mode, no "Adding segment..." in the messages window -""" - -ida_segment.ADDSEG_SPARSE -""" -use sparse storage method for the new segment -""" - -ida_segment.CSS_BREAK -""" -memory reading process stopped by user -""" - -ida_segment.CSS_NODBG -""" -debugger is not running -""" - -ida_segment.CSS_NOMEM -""" -is too big) - -not enough memory (might be because the segment -""" - -ida_segment.CSS_NORANGE -""" -could not find corresponding memory range -""" - -ida_segment.CSS_OK -""" -ok -""" - -ida_segment.MAX_GROUPS -""" -max number of segment groups -""" - -ida_segment.MAX_SEGM_TRANSLATIONS -""" -max number of segment translations -""" - -ida_segment.MOVE_SEGM_CHUNK -""" -Too many chunks are defined, can't move. -""" - -ida_segment.MOVE_SEGM_DEBUG -""" -Debugger segments cannot be moved. -""" - -ida_segment.MOVE_SEGM_IDP -""" -IDP module forbids moving the segment. -""" - -ida_segment.MOVE_SEGM_LOADER -""" -The segment has been moved but the loader complained. -""" - -ida_segment.MOVE_SEGM_ODD -""" -Cannot move segments by an odd number of bytes. -""" - -ida_segment.MOVE_SEGM_OK -""" -all ok -""" - -ida_segment.MOVE_SEGM_ORPHAN -""" -Orphan bytes hinder segment movement. -""" - -ida_segment.MOVE_SEGM_PARAM -""" -The specified segment does not exist. -""" - -ida_segment.MOVE_SEGM_ROOM -""" -Not enough free room at the target address. -""" - -ida_segment.MSF_FIXONCE -""" -valid for 'rebase_program()' . see 'loader_t::move_segm' . - -call loader only once with the special calling method. -""" - -ida_segment.MSF_LDKEEP -""" -keep the loader in the memory (optimization) -""" - -ida_segment.MSF_NETNODES -""" -valid for 'rebase_program()' - -move netnodes instead of changing inf.netdelta (this is slower) -""" - -ida_segment.MSF_NOFIX -""" -don't call the loader to fix relocations -""" - -ida_segment.MSF_PRIORITY -""" -valid for 'move_segm()' - -loader segments will overwrite any existing debugger segments when -moved. -""" - -ida_segment.MSF_SILENT -""" -don't display a "please wait" box on the screen -""" - -ida_segment.SEGMOD_KEEP -""" -keep information (code & data, etc) -""" - -ida_segment.SEGMOD_KEEP0 -""" -flag for internal use, don't set -""" - -ida_segment.SEGMOD_KEEPSEL -""" -do not try to delete unused selector -""" - -ida_segment.SEGMOD_KILL -""" -disable addresses if segment gets shrinked or deleted -""" - -ida_segment.SEGMOD_NOMOVE -""" -(for 'set_segm_start()' ) - -don't move info from the start of segment to the new start address -""" - -ida_segment.SEGMOD_SILENT -""" -be silent -""" - -ida_segment.SEGMOD_SPARSE -""" -(for 'set_segm_start()' , 'set_segm_end()' ) - -use sparse storage if extending the segment -""" - -ida_segment.SEGPERM_EXEC -""" -Execute. -""" - -ida_segment.SEGPERM_READ -""" -Read. -""" - -ida_segment.SEGPERM_WRITE -""" -Write. -""" - -ida_segment.SEG_ABSSYM -""" -segment with definitions of absolute symbols -""" - -ida_segment.SEG_BSS -""" -uninitialized segment -""" - -ida_segment.SEG_CODE -""" -code segment -""" - -ida_segment.SEG_COMM -""" -segment with communal definitions -""" - -ida_segment.SEG_DATA -""" -data segment -""" - -ida_segment.SEG_GRP -""" -group of segments -""" - -ida_segment.SEG_IMEM -""" -internal processor memory & sfr (8051) -""" - -ida_segment.SEG_IMP -""" -java: implementation segment -""" - -ida_segment.SEG_NORM -""" -unknown type, no assumptions -""" - -ida_segment.SEG_NULL -""" -zero-length segment -""" - -ida_segment.SEG_UNDF -""" -undefined segment type (not used) -""" - -ida_segment.SEG_XTRN -""" -no instructions are allowed - -segment with 'extern' definitions. -""" - -ida_segment.SFL_COMORG -""" -IDP dependent field (IBM PC: if set, ORG directive is not commented -out) -""" - -ida_segment.SFL_DEBUG -""" -Is the segment created for the debugger?. Such segments are temporary -and do not have permanent flags. -""" - -ida_segment.SFL_HEADER -""" -Header segment (do not create offsets to it in the disassembly) -""" - -ida_segment.SFL_HIDDEN -""" -Is the segment hidden? -""" - -ida_segment.SFL_HIDETYPE -""" -Hide segment type (do not print it in the listing) -""" - -ida_segment.SFL_LOADER -""" -Is the segment created by the loader? -""" - -ida_segment.SFL_OBOK -""" -Orgbase is present? (IDP dependent field) -""" - -ida_segment.SREG_NUM -""" -Maximum number of segment registers is 16 (see 'segregs.hpp' ) -""" - -ida_segment.saAbs -""" -Absolute segment. -""" - -ida_segment.saGroup -""" -Segment group. -""" - -ida_segment.saRel1024Bytes -""" -1024 bytes -""" - -ida_segment.saRel128Bytes -""" -128 bytes -""" - -ida_segment.saRel2048Bytes -""" -2048 bytes -""" - -ida_segment.saRel32Bytes -""" -32 bytes -""" - -ida_segment.saRel4K -""" -alignment. It is not supported by LINK. - -This value is used by the PharLap OMF for page (4K) -""" - -ida_segment.saRel512Bytes -""" -512 bytes -""" - -ida_segment.saRel64Bytes -""" -64 bytes -""" - -ida_segment.saRelByte -""" -Relocatable, byte aligned. -""" - -ida_segment.saRelDble -""" -boundary. - -Relocatable, aligned on a double word (4-byte) -""" - -ida_segment.saRelPage -""" -Relocatable, aligned on 256-byte boundary. -""" - -ida_segment.saRelPara -""" -Relocatable, paragraph (16-byte) aligned. -""" - -ida_segment.saRelQword -""" -8 bytes -""" - -ida_segment.saRelWord -""" -Relocatable, word (2-byte) aligned. -""" - -ida_segment.scCommon -""" -Common. Combine by overlay using maximum size. -""" - -ida_segment.scGroup -""" -Segment group. -""" - -ida_segment.scPriv -""" -segment. - -Private. Do not combine with any other program -""" - -ida_segment.scPub -""" -the alignment requirement. - -Public. Combine by appending at an offset that meets -""" - -ida_segment.scPub2 -""" -As defined by Microsoft, same as C=2 (public). -""" - -ida_segment.scPub3 -""" -As defined by Microsoft, same as C=2 (public). -""" - -ida_segment.scStack -""" -byte alignment. - -Stack. Combine as for C=2. This combine type forces -""" -=== ida_segment EPYDOC INJECTIONS END === -ida_segregs.copy_sreg_ranges(): - - copy_sreg_ranges(dst_rg, src_rg, map_selector=False) - - - Duplicate segment register ranges. - - @param dst_rg: number of destination segment register (C++: int) - @param src_rg: copy ranges from (C++: int) - @param map_selector: map selectors to linear addresses using sel2ea() - (C++: bool) - - -ida_segregs.del_sreg_range(): - - del_sreg_range(ea, rg) -> bool - - - Delete segment register range started at ea. When a segment register - range is deleted, the previous range is extended to cover the empty - space. The segment register range at the beginning of a segment cannot - be deleted. - - @param ea: start_ea of the deleted range (C++: ea_t) - @param rg: the segment register number (C++: int) - @return: success - - -ida_segregs.get_prev_sreg_range(): - - get_prev_sreg_range(out, ea, rg) -> bool - - - Get segment register range previous to one with address.more efficient - then get_sreg_range(reg, ea-1) - - @param out: segment register range (C++: sreg_range_t *) - @param ea: any linear address in the program (C++: ea_t) - @param rg: the segment register number (C++: int) - @return: success - - -ida_segregs.get_sreg(): - - get_sreg(ea, rg) -> sel_t - - - Get value of a segment register. This function uses segment register - range and default segment register values stored in the segment - structure. - - @param ea: linear address in the program (C++: ea_t) - @param rg: number of the segment register (C++: int) - @return: value of the segment register, BADSEL if value is unknown. - - -ida_segregs.get_sreg_range(): - - get_sreg_range(out, ea, rg) -> bool - - - Get segment register range by linear address. - - @param out: segment register range (C++: sreg_range_t *) - @param ea: any linear address in the program (C++: ea_t) - @param rg: the segment register number (C++: int) - @return: success - - -ida_segregs.get_sreg_range_num(): - - get_sreg_range_num(ea, rg) -> int - - - Get number of segment register range by address. - - @param ea: any address in the range (C++: ea_t) - @param rg: the segment register number (C++: int) - @return: -1 if no range occupies the specified address. otherwise - returns number of the specified range - (0..get_srranges_qty()-1) - - -ida_segregs.get_sreg_ranges_qty(): - - get_sreg_ranges_qty(rg) -> size_t - - - Get number of segment register ranges. - - @param rg: the segment register number (C++: int) - - -ida_segregs.getn_sreg_range(): - - getn_sreg_range(out, rg, n) -> bool - - - Get segment register range by its number. - - @param out: segment register range (C++: sreg_range_t *) - @param rg: the segment register number (C++: int) - @param n: number of range (0..qty()-1) (C++: int) - @return: success - - -ida_segregs.set_default_dataseg(): - - set_default_dataseg(ds_sel) - - - Set default value of DS register for all segments. - - - @param ds_sel (C++: sel_t) - - -ida_segregs.set_default_sreg_value(): - - set_default_sreg_value(sg, rg, value) -> bool - - - Set default value of a segment register for a segment. - - @param sg: pointer to segment structure if NULL, then set the register - for all segments (C++: segment_t *) - @param rg: number of segment register (C++: int) - @param value: its default value. this value will be used by - get_sreg() if value of the register is unknown at the - specified address. (C++: sel_t) - @return: success - - -ida_segregs.set_sreg_at_next_code(): - - set_sreg_at_next_code(ea1, ea2, rg, value) - - - Set the segment register value at the next instruction. This function - is designed to be called from 'idb_event::sgr_changed' handler in - order to contain the effect of changing a segment register value only - until the next instruction.It is useful, for example, in the ARM - module: the modification of the T register does not affect existing - instructions later in the code. - - @param ea1: address to start to search for an instruction (C++: ea_t) - @param ea2: the maximal address (C++: ea_t) - @param rg: the segment register number (C++: int) - @param value: the segment register value (C++: sel_t) - - -ida_segregs.split_sreg_range(): - - split_sreg_range(ea, rg, v, tag, silent=False) -> bool - - - Create a new segment register range. This function is used when the - IDP emulator detects that a segment register changes its value. - - @param ea: linear address where the segment register will have a new - value. if ea== BADADDR , nothing to do. (C++: ea_t) - @param rg: the number of the segment register (C++: int) - @param v: the new value of the segment register. If the value is - unknown, you should specify BADSEL . (C++: sel_t) - @param tag: the register info tag. see Segment register range tags - (C++: uchar) - @param silent: if false, display a warning() in the case of failure - (C++: bool) - @return: success - - -class ida_segregs.sreg_range_t(): - - Proxy of C++ sreg_range_t class - - -ida_segregs.sreg_range_t._print(): - - _print(self) -> size_t - - -ida_segregs.sreg_range_t.clear(): - - clear(self) - - -ida_segregs.sreg_range_t.compare(): - - compare(self, r) -> int - - -ida_segregs.sreg_range_t.contains(): - - contains(self, ea) -> bool - contains(self, r) -> bool - - -ida_segregs.sreg_range_t.empty(): - - empty(self) -> bool - - -ida_segregs.sreg_range_t.end_ea: - range_t_end_ea_get(self) -> ea_t - -ida_segregs.sreg_range_t.extend(): - - extend(self, ea) - - -ida_segregs.sreg_range_t.intersect(): - - intersect(self, r) - - -ida_segregs.sreg_range_t.overlaps(): - - overlaps(self, r) -> bool - - -ida_segregs.sreg_range_t.size(): - - size(self) -> asize_t - - -ida_segregs.sreg_range_t.start_ea: - range_t_start_ea_get(self) -> ea_t - -ida_segregs.sreg_range_t.tag: - sreg_range_t_tag_get(self) -> uchar - -ida_segregs.sreg_range_t.val: - sreg_range_t_val_get(self) -> sel_t - - -=== ida_segregs EPYDOC INJECTIONS === -ida_segregs.SR_auto -""" -the value is determined by IDA -""" - -ida_segregs.SR_autostart -""" -used as 'SR_auto' for segment starting address -""" - -ida_segregs.SR_inherit -""" -the value is inherited from the previous range -""" - -ida_segregs.SR_user -""" -the value is specified by the user -""" -=== ida_segregs EPYDOC INJECTIONS END === -ida_strlist.build_strlist(): - - build_strlist() - - - Build the string list. You should initialize options before this call - using the restore_config() or setup_strings_window() methods. - - -ida_strlist.clear_strlist(): - - clear_strlist() - - - Clear the string list. - - -ida_strlist.get_strlist_item(): - - get_strlist_item(si, n) -> bool - - - Get nth element of the string list (n=0.. 'get_strlist_qty()' -1) - - - @param si (C++: string_info_t *) - @param n (C++: size_t) - - -ida_strlist.get_strlist_options(): - - get_strlist_options() -> strwinsetup_t - - - Get access to the static string list options. - - -ida_strlist.get_strlist_qty(): - - get_strlist_qty() -> size_t - - - Get number of elements in the string list. - - -class ida_strlist.string_info_t(): - - Proxy of C++ string_info_t class - - -ida_strlist.string_info_t.ea: - string_info_t_ea_get(self) -> ea_t - -ida_strlist.string_info_t.length: - string_info_t_length_get(self) -> int - -ida_strlist.string_info_t.type: - string_info_t_type_get(self) -> int - -class ida_strlist.strwinsetup_t(): - - Proxy of C++ strwinsetup_t class - - -ida_strlist.strwinsetup_t.display_only_existing_strings: - strwinsetup_t_display_only_existing_strings_get(self) -> uchar - -ida_strlist.strwinsetup_t.ignore_heads: - strwinsetup_t_ignore_heads_get(self) -> uchar - -ida_strlist.strwinsetup_t.is_initialized(): - - is_initialized(self) -> bool - - -ida_strlist.strwinsetup_t.minlen: - strwinsetup_t_minlen_get(self) -> sval_t - -ida_strlist.strwinsetup_t.only_7bit: - strwinsetup_t_only_7bit_get(self) -> uchar - -ida_strlist.strwinsetup_t.strtypes: - - _get_strtypes(self) -> PyObject * - - -ida_struct.add_struc(): - - add_struc(idx, name, is_union=False) -> tid_t - - - Create a structure type. if idx== 'BADADDR' then add as the last idx. - if name==NULL then a name will be generated "struct_%d". - - @param idx (C++: uval_t) - @param name (C++: const char *) - @param is_union (C++: bool) - - -ida_struct.add_struc_member(): - - add_struc_member(sptr, fieldname, offset, flag, mt, nbytes) -> struc_error_t - - - Add member to existing structure. - - @param sptr: structure to modify (C++: struc_t *) - @param fieldname: if NULL, then "anonymous_#" name will be generated - (C++: const char *) - @param offset: BADADDR means add to the end of structure (C++: ea_t) - @param flag: type + representation bits (C++: flags_t) - @param mt: additional info about member type. must be present for - structs, offsets, enums, strings, struct offsets. (C++: - const opinfo_t *) - @param nbytes: if == 0 then the structure will be a varstruct. in this - case the member should be the last member in the - structure (C++: asize_t) - - -ida_struct.del_member_tinfo(): - - del_member_tinfo(sptr, mptr) -> bool - - - Delete tinfo for given member. - - - @param sptr (C++: struc_t *) - @param mptr (C++: member_t *) - - -ida_struct.del_struc(): - - del_struc(sptr) -> bool - - - Delete a structure type. - - - @param sptr (C++: struc_t *) - - -ida_struct.del_struc_member(): - - del_struc_member(sptr, offset) -> bool - - - Delete member at given offset. - - - @param sptr (C++: struc_t *) - @param offset (C++: ea_t) - - -ida_struct.del_struc_members(): - - del_struc_members(sptr, off1, off2) -> int - - - Delete members which occupy range of offsets (off1..off2). - - @param sptr (C++: struc_t *) - @param off1 (C++: ea_t) - @param off2 (C++: ea_t) - @return: number of deleted members or -1 on error - - -ida_struct.expand_struc(): - - expand_struc(sptr, offset, delta, recalc=True) -> bool - - - Expand/Shrink structure type. - - - @param sptr (C++: struc_t *) - @param offset (C++: ea_t) - @param delta (C++: adiff_t) - @param recalc (C++: bool) - - -ida_struct.get_best_fit_member(): - - get_best_fit_member(sptr, offset) -> member_t - - - Get member that is most likely referenced by the specified offset. - Useful for offsets > sizeof(struct). - - @param sptr (C++: const struc_t *) - @param offset (C++: asize_t) - - -ida_struct.get_first_struc_idx(): - - get_first_struc_idx() -> uval_t - - - Get index of first structure. - - @return: BADADDR if no known structures, 0 otherwise - - -ida_struct.get_last_struc_idx(): - - get_last_struc_idx() -> uval_t - - - Get index of last structure. - - @return: BADADDR if no known structures, get_struc_qty() -1 - otherwise - - -ida_struct.get_max_offset(): - - get_max_offset(sptr) -> ea_t - - - For unions: returns number of members, for structs: returns size of - structure. - - - @param sptr (C++: struc_t *) - - -ida_struct.get_member(): - - get_member(sptr, offset) -> member_t - - - Get member at given offset. - - - @param sptr (C++: const struc_t *) - @param offset (C++: asize_t) - - -ida_struct.get_member_by_fullname(): - - get_member_by_fullname(fullname) -> member_t - - - Get a member by its fully qualified name, "struct.field". - - - @param fullname (C++: const char *) - - -ida_struct.get_member_by_id(): - - get_member_by_id(mid) -> member_t - - - Check if the specified member id points to a struct member. - - - @param mid (C++: tid_t) - - -ida_struct.get_member_by_name(): - - get_member_by_name(sptr, membername) -> member_t - - - Get a member by its name, like "field44". - - - @param sptr (C++: const struc_t *) - @param membername (C++: const char *) - - -ida_struct.get_member_cmt(): - - get_member_cmt(mid, repeatable) -> ssize_t - - - Get comment of structure member. - - - @param mid (C++: tid_t) - @param repeatable (C++: bool) - - -ida_struct.get_member_fullname(): - - get_member_fullname(mid) -> ssize_t - - - Get a member's fully qualified name, "struct.field". - - - @param mid (C++: tid_t) - - -ida_struct.get_member_id(): - - get_member_id(sptr, offset) -> tid_t - - - Get member id at given offset. - - - @param sptr (C++: const struc_t *) - @param offset (C++: asize_t) - - -ida_struct.get_member_name(): - - get_member_name(mid) -> ssize_t - - - Get name of structure member. - - - @param mid (C++: tid_t) - - -ida_struct.get_member_size(): - - get_member_size(nonnul_mptr) -> asize_t - - - Get size of structure member. May return 0 for the last member of - varstruct. For union members, returns 'member_t::eoff' . - - -ida_struct.get_member_struc(): - - get_member_struc(fullname) -> struc_t - - - Get containing structure of member by its full name "struct.field". - - - @param fullname (C++: const char *) - - -ida_struct.get_member_tinfo(): - - get_member_tinfo(tif, mptr) -> bool - - - Get tinfo for given member. - - - @param tif (C++: tinfo_t *) - @param mptr (C++: const member_t *) - - -ida_struct.get_next_member_idx(): - - get_next_member_idx(sptr, off) -> ssize_t - - - Get the next member idx, if it does not exist, return -1. - - - @param sptr (C++: const struc_t *) - @param off (C++: asize_t) - - -ida_struct.get_next_struc_idx(): - - get_next_struc_idx(idx) -> uval_t - - - Get next struct index. - - @param idx (C++: uval_t) - @return: BADADDR if resulting index is out of bounds, otherwise idx++ - - -ida_struct.get_or_guess_member_tinfo(): - - get_or_guess_member_tinfo(tif, mptr) -> bool - - - Try to get tinfo for given member - if failed, generate a tinfo using - information about the member id from the disassembly - - @param tif (C++: tinfo_t *) - @param mptr (C++: const member_t *) - - -ida_struct.get_prev_member_idx(): - - get_prev_member_idx(sptr, off) -> ssize_t - - - Get the prev member idx, if it does not exist, return -1. - - - @param sptr (C++: const struc_t *) - @param off (C++: asize_t) - - -ida_struct.get_prev_struc_idx(): - - get_prev_struc_idx(idx) -> uval_t - - - Get previous struct index. - - @param idx (C++: uval_t) - @return: BADADDR if resulting index is negative, otherwise idx - 1 - - -ida_struct.get_sptr(): - - get_sptr(mptr) -> struc_t - - - Get child struct if member is a struct. - - - @param mptr (C++: const member_t *) - - -ida_struct.get_struc(): - - get_struc(id) -> struc_t - - - Get pointer to struct type info. - - - @param id (C++: tid_t) - - -ida_struct.get_struc_by_idx(): - - get_struc_by_idx(idx) -> tid_t - - - Get struct id by struct number. - - - @param idx (C++: uval_t) - - -ida_struct.get_struc_cmt(): - - get_struc_cmt(id, repeatable) -> ssize_t - - - Get struct comment. - - - @param id (C++: tid_t) - @param repeatable (C++: bool) - - -ida_struct.get_struc_first_offset(): - - get_struc_first_offset(sptr) -> ea_t - - - Get offset of first member. - - @param sptr (C++: const struc_t *) - @return: BADADDR if memqty == 0 - - -ida_struct.get_struc_id(): - - get_struc_id(name) -> tid_t - - - Get struct id by name. - - - @param name (C++: const char *) - - -ida_struct.get_struc_idx(): - - get_struc_idx(id) -> uval_t - - - Get internal number of the structure. - - - @param id (C++: tid_t) - - -ida_struct.get_struc_last_offset(): - - get_struc_last_offset(sptr) -> ea_t - - - Get offset of last member. - - @param sptr (C++: const struc_t *) - @return: BADADDR if memqty == 0 - - -ida_struct.get_struc_name(): - - get_struc_name(id) -> ssize_t - - - Get struct name by id. - - - @param id (C++: tid_t) - - -ida_struct.get_struc_next_offset(): - - get_struc_next_offset(sptr, offset) -> ea_t - - - Get offset of member with smallest offset larger than 'offset'. - - @param sptr (C++: const struc_t *) - @param offset (C++: ea_t) - @return: BADADDR if no next offset - - -ida_struct.get_struc_prev_offset(): - - get_struc_prev_offset(sptr, offset) -> ea_t - - - Get offset of member with largest offset less than 'offset'. - - @param sptr (C++: const struc_t *) - @param offset (C++: ea_t) - @return: BADADDR if no prev offset - - -ida_struct.get_struc_qty(): - - get_struc_qty() -> size_t - - - Get number of known structures. - - -ida_struct.get_struc_size(): - - get_struc_size(sptr) -> asize_t - get_struc_size(id) -> asize_t - - - Get struct size (also see 'get_struc_size(tid_t)' ) - - - @param sptr (C++: const struc_t *) - - -ida_struct.is_anonymous_member_name(): - - is_anonymous_member_name(name) -> bool - - - Is member name prefixed with "anonymous"? - - - @param name (C++: const char *) - - -ida_struct.is_dummy_member_name(): - - is_dummy_member_name(name) -> bool - - - Is member name an auto-generated name? - - - @param name (C++: const char *) - - -ida_struct.is_member_id(): - - is_member_id(mid) -> bool - - - Is a member id? - - - @param mid (C++: tid_t) - - -ida_struct.is_special_member(): - - is_special_member(id) -> bool - - - Is a special member with the name beginning with ' '? - - - @param id (C++: tid_t) - - -ida_struct.is_union(): - - is_union(id) -> bool - - - Is a union? - - - @param id (C++: tid_t) - - -ida_struct.is_varmember(): - - is_varmember(mptr) -> bool - - - Is variable size member? - - - @param mptr (C++: const member_t *) - - -ida_struct.is_varstr(): - - is_varstr(id) -> bool - - - Is variable size structure? - - - @param id (C++: tid_t) - - -class ida_struct.member_t(): - - Proxy of C++ member_t class - - -ida_struct.member_t.by_til(): - - by_til(self) -> bool - - -ida_struct.member_t.eoff: - member_t_eoff_get(self) -> ea_t - -ida_struct.member_t.flag: - member_t_flag_get(self) -> flags_t - -ida_struct.member_t.get_soff(): - - get_soff(self) -> ea_t - - -ida_struct.member_t.has_ti(): - - has_ti(self) -> bool - - -ida_struct.member_t.has_union(): - - has_union(self) -> bool - - -ida_struct.member_t.id: - member_t_id_get(self) -> tid_t - -ida_struct.member_t.is_baseclass(): - - is_baseclass(self) -> bool - - -ida_struct.member_t.is_destructor(): - - is_destructor(self) -> bool - - -ida_struct.member_t.is_dupname(): - - is_dupname(self) -> bool - - -ida_struct.member_t.props: - member_t_props_get(self) -> uint32 - -ida_struct.member_t.soff: - member_t_soff_get(self) -> ea_t - -ida_struct.member_t.unimem(): - - unimem(self) -> bool - - -ida_struct.retrieve_member_info(): - - retrieve_member_info(buf, mptr) -> opinfo_t - - - Get operand type info for member. - - - @param buf (C++: opinfo_t *) - @param mptr (C++: const member_t *) - - -ida_struct.save_struc(): - - save_struc(sptr, may_update_ltypes=True) - - - Update struct information in the database (internal function) - - - @param sptr (C++: struc_t *) - @param may_update_ltypes (C++: bool) - - -ida_struct.set_member_cmt(): - - set_member_cmt(mptr, cmt, repeatable) -> bool - - - Set member comment. - - - @param mptr (C++: member_t *) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -ida_struct.set_member_name(): - - set_member_name(sptr, offset, name) -> bool - - - Set name of member at given offset. - - - @param sptr (C++: struc_t *) - @param offset (C++: ea_t) - @param name (C++: const char *) - - -ida_struct.set_member_tinfo(): - - set_member_tinfo(sptr, mptr, memoff, tif, flags) -> smt_code_t - - - Set tinfo for given member. - - @param sptr: containing struct (C++: struc_t *) - @param mptr: target member (C++: member_t *) - @param memoff: offset within member (C++: uval_t) - @param tif: type info (C++: const tinfo_t &) - @param flags: Set member tinfo flags (C++: int) - - -ida_struct.set_member_type(): - - set_member_type(sptr, offset, flag, mt, nbytes) -> bool - - - Set type of member at given offset (also see 'add_struc_member()' ) - - - @param sptr (C++: struc_t *) - @param offset (C++: ea_t) - @param flag (C++: flags_t) - @param mt (C++: const opinfo_t *) - @param nbytes (C++: asize_t) - - -ida_struct.set_struc_align(): - - set_struc_align(sptr, shift) -> bool - - - Set structure alignment ( 'SF_ALIGN' ) - - - @param sptr (C++: struc_t *) - @param shift (C++: int) - - -ida_struct.set_struc_cmt(): - - set_struc_cmt(id, cmt, repeatable) -> bool - - - Set structure comment. - - - @param id (C++: tid_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -ida_struct.set_struc_hidden(): - - set_struc_hidden(sptr, is_hidden) - - - Hide/unhide a struct type. - - - @param sptr (C++: struc_t *) - @param is_hidden (C++: bool) - - -ida_struct.set_struc_idx(): - - set_struc_idx(sptr, idx) -> bool - - - Set internal number of struct. Also see 'get_struc_idx()' , - 'get_struc_by_idx()' . - - @param sptr (C++: const struc_t *) - @param idx (C++: uval_t) - - -ida_struct.set_struc_listed(): - - set_struc_listed(sptr, is_listed) - - - Add/remove a struct type from the struct list. - - - @param sptr (C++: struc_t *) - @param is_listed (C++: bool) - - -ida_struct.set_struc_name(): - - set_struc_name(id, name) -> bool - - - Set structure name. - - - @param id (C++: tid_t) - @param name (C++: const char *) - - -ida_struct.stroff_as_size(): - - stroff_as_size(plen, sptr, value) -> bool - - - Should display a structure offset expression as the structure size? - - - @param plen (C++: int) - @param sptr (C++: const struc_t *) - @param value (C++: asize_t) - - -class ida_struct.struc_t(): - - Proxy of C++ struc_t class - - -ida_struct.struc_t.age: - struc_t_age_get(self) -> ushort - -ida_struct.struc_t.from_til(): - - from_til(self) -> bool - - -ida_struct.struc_t.get_alignment(): - - get_alignment(self) -> int - - -ida_struct.struc_t.get_member(): - - get_member(self, index) -> member_t - - -ida_struct.struc_t.has_union(): - - has_union(self) -> bool - - -ida_struct.struc_t.id: - struc_t_id_get(self) -> tid_t - -ida_struct.struc_t.is_choosable(): - - is_choosable(self) -> bool - - -ida_struct.struc_t.is_frame(): - - is_frame(self) -> bool - - -ida_struct.struc_t.is_ghost(): - - is_ghost(self) -> bool - - -ida_struct.struc_t.is_hidden(): - - is_hidden(self) -> bool - - -ida_struct.struc_t.is_union(): - - is_union(self) -> bool - - -ida_struct.struc_t.is_varstr(): - - is_varstr(self) -> bool - - -ida_struct.struc_t.members: - struc_t_members_get(self) -> member_t - -ida_struct.struc_t.memqty: - struc_t_memqty_get(self) -> uint32 - -ida_struct.struc_t.ordinal: - struc_t_ordinal_get(self) -> int32 - -ida_struct.struc_t.props: - struc_t_props_get(self) -> uint32 - -ida_struct.struc_t.set_alignment(): - - set_alignment(self, shift) - - -ida_struct.struc_t.set_ghost(): - - set_ghost(self, _is_ghost) - - -class ida_struct.struct_field_visitor_t(): - - Proxy of C++ struct_field_visitor_t class - - -ida_struct.struct_field_visitor_t.visit_field(): - - visit_field(self, sptr, mptr) -> int - - -ida_struct.visit_stroff_fields(): - - visit_stroff_fields(sfv, path, disp, appzero) -> flags_t - - - Visit structure fields in a stroff expression or in a reference to a - struct data variable. This function can be used to enumerate all - components of an expression like 'a.b.c'. - - @param sfv: visitor object (C++: struct_field_visitor_t &) - @param path: struct path (path[0] contains the initial struct id) - (C++: const tid_t *) - @param disp: offset into structure (C++: adiff_t *) - @param appzero: should visit field at offset zero? (C++: bool) - - - -=== ida_struct EPYDOC INJECTIONS === -ida_struct.MF_BASECLASS -""" -a special member representing base class -""" - -ida_struct.MF_BYTIL -""" -the member was created due to the type system -""" - -ida_struct.MF_DTOR -""" -a special member representing destructor -""" - -ida_struct.MF_DUPNAME -""" -duplicate name resolved with _N suffix (N==soff) -""" - -ida_struct.MF_HASTI -""" -has type information? -""" - -ida_struct.MF_HASUNI -""" -has members of type "union"? -""" - -ida_struct.MF_OK -""" -is the member ok? (always yes) -""" - -ida_struct.MF_UNIMEM -""" -is a member of a union? -""" - -ida_struct.SET_MEMTI_BYTIL -""" -new type was created by the type subsystem -""" - -ida_struct.SET_MEMTI_COMPATIBLE -""" -new type must be compatible with the old -""" - -ida_struct.SET_MEMTI_FUNCARG -""" -mptr is function argument (cannot create arrays) -""" - -ida_struct.SET_MEMTI_MAY_DESTROY -""" -may destroy other members -""" - -ida_struct.SET_MEMTI_USERTI -""" -user-specified type -""" - -ida_struct.SF_ALIGN -""" -alignment (shift amount: 0..31) -""" - -ida_struct.SF_FRAME -""" -the structure is a function frame -""" - -ida_struct.SF_GHOST -""" -ghost copy of a local type -""" - -ida_struct.SF_HASUNI -""" -has members of type "union"? -""" - -ida_struct.SF_HIDDEN -""" -the structure is collapsed -""" - -ida_struct.SF_NOLIST -""" -don't include in the chooser list -""" - -ida_struct.SF_TYPLIB -""" -the structure comes from type library -""" - -ida_struct.SF_UNION -""" -varunions are prohibited! - -is a union? -""" - -ida_struct.SF_VAR -""" -is variable size structure (varstruct)? a variable size structure is -one with the zero size last member. if the last member is a varstruct, -then the current structure is a varstruct too. -""" - -ida_struct.STRUC_SEPARATOR -""" -structname.fieldname -""" -=== ida_struct EPYDOC INJECTIONS END === -ida_tryblks.add_tryblk(): - - add_tryblk(tb) -> int - - - Add one try block information. - - @param tb: try block to add. (C++: const tryblk_t &) - @return: error code; 0 means good - - -class ida_tryblks.catch_t(): - - Proxy of C++ catch_t class - - -ida_tryblks.catch_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.catch_t.at(): - - at(self, _idx) -> range_t - - -ida_tryblks.catch_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_tryblks.catch_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.catch_t.clear(): - - clear(self) - - -ida_tryblks.catch_t.disp: - try_handler_t_disp_get(self) -> sval_t - -ida_tryblks.catch_t.empty(): - - empty(self) -> bool - - -ida_tryblks.catch_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_tryblks.catch_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_tryblks.catch_t.extract(): - - extract(self) -> range_t - - -ida_tryblks.catch_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_tryblks.catch_t.fpreg: - try_handler_t_fpreg_get(self) -> int - -ida_tryblks.catch_t.grow(): - - grow(self, x=range_t()) - - -ida_tryblks.catch_t.has(): - - has(self, x) -> bool - - -ida_tryblks.catch_t.inject(): - - inject(self, s, len) - - -ida_tryblks.catch_t.insert(): - - insert(self, it, x) -> range_t - - -ida_tryblks.catch_t.obj: - catch_t_obj_get(self) -> sval_t - -ida_tryblks.catch_t.pop_back(): - - pop_back(self) - - -ida_tryblks.catch_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_tryblks.catch_t.qclear(): - - qclear(self) - - -ida_tryblks.catch_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.catch_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.catch_t.size(): - - size(self) -> size_t - - -ida_tryblks.catch_t.swap(): - - swap(self, r) - - -ida_tryblks.catch_t.truncate(): - - truncate(self) - - -ida_tryblks.catch_t.type_id: - catch_t_type_id_get(self) -> sval_t - -class ida_tryblks.catchvec_t(): - - Proxy of C++ qvector<(catch_t)> class - - -ida_tryblks.catchvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.catchvec_t.at(): - - at(self, _idx) -> catch_t - - -ida_tryblks.catchvec_t.begin(): - - begin(self) -> catch_t - begin(self) -> catch_t - - -ida_tryblks.catchvec_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.catchvec_t.clear(): - - clear(self) - - -ida_tryblks.catchvec_t.empty(): - - empty(self) -> bool - - -ida_tryblks.catchvec_t.end(): - - end(self) -> catch_t - end(self) -> catch_t - - -ida_tryblks.catchvec_t.erase(): - - erase(self, it) -> catch_t - erase(self, first, last) -> catch_t - - -ida_tryblks.catchvec_t.extract(): - - extract(self) -> catch_t - - -ida_tryblks.catchvec_t.find(): - - find(self, x) -> catch_t - find(self, x) -> catch_t - - -ida_tryblks.catchvec_t.grow(): - - grow(self, x=catch_t()) - - -ida_tryblks.catchvec_t.has(): - - has(self, x) -> bool - - -ida_tryblks.catchvec_t.inject(): - - inject(self, s, len) - - -ida_tryblks.catchvec_t.insert(): - - insert(self, it, x) -> catch_t - - -ida_tryblks.catchvec_t.pop_back(): - - pop_back(self) - - -ida_tryblks.catchvec_t.push_back(): - - push_back(self, x) - push_back(self) -> catch_t - - -ida_tryblks.catchvec_t.qclear(): - - qclear(self) - - -ida_tryblks.catchvec_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.catchvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.catchvec_t.size(): - - size(self) -> size_t - - -ida_tryblks.catchvec_t.swap(): - - swap(self, r) - - -ida_tryblks.catchvec_t.truncate(): - - truncate(self) - - -ida_tryblks.del_tryblks(): - - del_tryblks(range) - - - Delete try block information in the specified range. - - @param range: the range to be cleared (C++: const range_t &) - - -ida_tryblks.find_syseh(): - - find_syseh(ea) -> ea_t - - - Find the start address of the system eh region including the argument. - - @param ea: search address (C++: ea_t) - @return: start address of surrounding tryblk, otherwise BADADDR - - -ida_tryblks.get_tryblks(): - - get_tryblks(tbv, range) -> size_t - - - Retrieve try block information from the specified address range. Try - blocks are sorted by starting address and their nest levels - calculated. - - @param tbv: output buffer; may be NULL (C++: tryblks_t *) - @param range: address range to change (C++: const range_t &) - @return: number of found try blocks - - -class ida_tryblks.seh_t(): - - Proxy of C++ seh_t class - - -ida_tryblks.seh_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.seh_t.at(): - - at(self, _idx) -> range_t - - -ida_tryblks.seh_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_tryblks.seh_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.seh_t.clear(): - - clear(self) - - -ida_tryblks.seh_t.disp: - try_handler_t_disp_get(self) -> sval_t - -ida_tryblks.seh_t.empty(): - - empty(self) -> bool - - -ida_tryblks.seh_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_tryblks.seh_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_tryblks.seh_t.extract(): - - extract(self) -> range_t - - -ida_tryblks.seh_t.filter: - seh_t_filter_get(self) -> rangevec_t - -ida_tryblks.seh_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_tryblks.seh_t.fpreg: - try_handler_t_fpreg_get(self) -> int - -ida_tryblks.seh_t.grow(): - - grow(self, x=range_t()) - - -ida_tryblks.seh_t.has(): - - has(self, x) -> bool - - -ida_tryblks.seh_t.inject(): - - inject(self, s, len) - - -ida_tryblks.seh_t.insert(): - - insert(self, it, x) -> range_t - - -ida_tryblks.seh_t.pop_back(): - - pop_back(self) - - -ida_tryblks.seh_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_tryblks.seh_t.qclear(): - - qclear(self) - - -ida_tryblks.seh_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.seh_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.seh_t.seh_code: - seh_t_seh_code_get(self) -> ea_t - -ida_tryblks.seh_t.size(): - - size(self) -> size_t - - -ida_tryblks.seh_t.swap(): - - swap(self, r) - - -ida_tryblks.seh_t.truncate(): - - truncate(self) - - -class ida_tryblks.try_handler_t(): - - Proxy of C++ try_handler_t class - - -ida_tryblks.try_handler_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.try_handler_t.at(): - - at(self, _idx) -> range_t - - -ida_tryblks.try_handler_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_tryblks.try_handler_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.try_handler_t.clear(): - - clear(self) - - -ida_tryblks.try_handler_t.disp: - try_handler_t_disp_get(self) -> sval_t - -ida_tryblks.try_handler_t.empty(): - - empty(self) -> bool - - -ida_tryblks.try_handler_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_tryblks.try_handler_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_tryblks.try_handler_t.extract(): - - extract(self) -> range_t - - -ida_tryblks.try_handler_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_tryblks.try_handler_t.fpreg: - try_handler_t_fpreg_get(self) -> int - -ida_tryblks.try_handler_t.grow(): - - grow(self, x=range_t()) - - -ida_tryblks.try_handler_t.has(): - - has(self, x) -> bool - - -ida_tryblks.try_handler_t.inject(): - - inject(self, s, len) - - -ida_tryblks.try_handler_t.insert(): - - insert(self, it, x) -> range_t - - -ida_tryblks.try_handler_t.pop_back(): - - pop_back(self) - - -ida_tryblks.try_handler_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_tryblks.try_handler_t.qclear(): - - qclear(self) - - -ida_tryblks.try_handler_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.try_handler_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.try_handler_t.size(): - - size(self) -> size_t - - -ida_tryblks.try_handler_t.swap(): - - swap(self, r) - - -ida_tryblks.try_handler_t.truncate(): - - truncate(self) - - -class ida_tryblks.tryblk_t(): - - Proxy of C++ tryblk_t class - - -ida_tryblks.tryblk_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.tryblk_t.at(): - - at(self, _idx) -> range_t - - -ida_tryblks.tryblk_t.begin(): - - begin(self) -> range_t - begin(self) -> range_t - - -ida_tryblks.tryblk_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.tryblk_t.clear(): - - clear(self) - - -ida_tryblks.tryblk_t.cpp(): - - cpp(self) -> catchvec_t - - -ida_tryblks.tryblk_t.empty(): - - empty(self) -> bool - - -ida_tryblks.tryblk_t.end(): - - end(self) -> range_t - end(self) -> range_t - - -ida_tryblks.tryblk_t.erase(): - - erase(self, it) -> range_t - erase(self, first, last) -> range_t - - -ida_tryblks.tryblk_t.extract(): - - extract(self) -> range_t - - -ida_tryblks.tryblk_t.find(): - - find(self, x) -> range_t - find(self, x) -> range_t - - -ida_tryblks.tryblk_t.get_kind(): - - get_kind(self) -> uchar - - -ida_tryblks.tryblk_t.grow(): - - grow(self, x=range_t()) - - -ida_tryblks.tryblk_t.has(): - - has(self, x) -> bool - - -ida_tryblks.tryblk_t.inject(): - - inject(self, s, len) - - -ida_tryblks.tryblk_t.insert(): - - insert(self, it, x) -> range_t - - -ida_tryblks.tryblk_t.is_cpp(): - - is_cpp(self) -> bool - - -ida_tryblks.tryblk_t.is_seh(): - - is_seh(self) -> bool - - -ida_tryblks.tryblk_t.level: - tryblk_t_level_get(self) -> uchar - -ida_tryblks.tryblk_t.pop_back(): - - pop_back(self) - - -ida_tryblks.tryblk_t.push_back(): - - push_back(self, x) - push_back(self) -> range_t - - -ida_tryblks.tryblk_t.qclear(): - - qclear(self) - - -ida_tryblks.tryblk_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.tryblk_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.tryblk_t.seh(): - - seh(self) -> seh_t - - -ida_tryblks.tryblk_t.set_cpp(): - - set_cpp(self) -> catchvec_t - - -ida_tryblks.tryblk_t.set_seh(): - - set_seh(self) -> seh_t - - -ida_tryblks.tryblk_t.size(): - - size(self) -> size_t - - -ida_tryblks.tryblk_t.swap(): - - swap(self, r) - - -ida_tryblks.tryblk_t.truncate(): - - truncate(self) - - -class ida_tryblks.tryblks_t(): - - Proxy of C++ qvector<(tryblk_t)> class - - -ida_tryblks.tryblks_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_tryblks.tryblks_t.at(): - - at(self, _idx) -> tryblk_t - - -ida_tryblks.tryblks_t.begin(): - - begin(self) -> tryblk_t - begin(self) -> tryblk_t - - -ida_tryblks.tryblks_t.capacity(): - - capacity(self) -> size_t - - -ida_tryblks.tryblks_t.clear(): - - clear(self) - - -ida_tryblks.tryblks_t.empty(): - - empty(self) -> bool - - -ida_tryblks.tryblks_t.end(): - - end(self) -> tryblk_t - end(self) -> tryblk_t - - -ida_tryblks.tryblks_t.erase(): - - erase(self, it) -> tryblk_t - erase(self, first, last) -> tryblk_t - - -ida_tryblks.tryblks_t.extract(): - - extract(self) -> tryblk_t - - -ida_tryblks.tryblks_t.find(): - - find(self, x) -> tryblk_t - find(self, x) -> tryblk_t - - -ida_tryblks.tryblks_t.grow(): - - grow(self, x=tryblk_t()) - - -ida_tryblks.tryblks_t.has(): - - has(self, x) -> bool - - -ida_tryblks.tryblks_t.inject(): - - inject(self, s, len) - - -ida_tryblks.tryblks_t.insert(): - - insert(self, it, x) -> tryblk_t - - -ida_tryblks.tryblks_t.pop_back(): - - pop_back(self) - - -ida_tryblks.tryblks_t.push_back(): - - push_back(self, x) - push_back(self) -> tryblk_t - - -ida_tryblks.tryblks_t.qclear(): - - qclear(self) - - -ida_tryblks.tryblks_t.reserve(): - - reserve(self, cnt) - - -ida_tryblks.tryblks_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_tryblks.tryblks_t.size(): - - size(self) -> size_t - - -ida_tryblks.tryblks_t.swap(): - - swap(self, r) - - -ida_tryblks.tryblks_t.truncate(): - - truncate(self) - - - -=== ida_tryblks EPYDOC INJECTIONS === -ida_tryblks.TBERR_EMPTY -""" -empty try block -""" - -ida_tryblks.TBERR_END -""" -bad end address -""" - -ida_tryblks.TBERR_INTERSECT -""" -range would intersect inner tryblk -""" - -ida_tryblks.TBERR_KIND -""" -illegal try block kind -""" - -ida_tryblks.TBERR_NO_CATCHES -""" -no catch blocks at all -""" - -ida_tryblks.TBERR_OK -""" -ok -""" - -ida_tryblks.TBERR_ORDER -""" -bad address order -""" - -ida_tryblks.TBERR_START -""" -bad start address -""" -=== ida_tryblks EPYDOC INJECTIONS END === -ida_typeinf.add_til(): - - add_til(name, flags) -> int - - - Load a til file. - - @param name: til name (C++: const char *) - @param flags: combination of Load TIL flags (C++: int) - @return: one of Load TIL result codes - - -ida_typeinf.alloc_type_ordinal(): - - alloc_type_ordinal(ti) -> uint32 - - - \call2{alloc_type_ordinals,ti,1} - - - @param ti (C++: til_t *) - - -ida_typeinf.alloc_type_ordinals(): - - alloc_type_ordinals(ti, qty) -> uint32 - - - Allocate a range of ordinal numbers for new types. - - @param ti: type library (C++: til_t *) - @param qty: number of ordinals to allocate (C++: int) - @return: the first ordinal. 0 means failure. - - -class ida_typeinf.aloc_visitor_t(): - - Proxy of C++ aloc_visitor_t class - - -ida_typeinf.aloc_visitor_t.visit_location(): - - visit_location(self, v, off, size) -> int - - -ida_typeinf.append_abi_opts(): - - append_abi_opts(abi_opts, user_level=False) -> bool - - - Add/remove/check ABI option General form of full abi name: abiname- - opt1-opt2-... or -opt1-opt2-... - - @param abi_opts: - ABI options to add/remove in form opt1-opt2-... - (C++: const char *) - @param user_level: - initiated by user if TRUE (==SETCOMP_BY_USER) - (C++: bool) - @return: success - - -ida_typeinf.append_argloc(): - - append_argloc(out, vloc) -> bool - - - Serialize argument location. - - - @param out (C++: qtype *) - @param vloc (C++: const argloc_t &) - - -ida_typeinf.append_tinfo_covered(): - - append_tinfo_covered(out, typid, offset) -> bool - - -ida_typeinf.apply_callee_tinfo(): - - apply_callee_tinfo(caller, tif) -> bool - - - Apply the type of the called function to the calling instruction. This - function will append parameter comments and rename the local variables - of the calling function. It also stores information about the - instructions that initialize call arguments in the database. Use - 'get_arg_addrs()' to retrieve it if necessary. Alternatively it is - possible to hook to processor_t::arg_addrs_ready event. - - @param caller: linear address of the calling instruction. must belong - to a function. (C++: ea_t) - @param tif: type info (C++: const tinfo_t &) - @return: success - - -ida_typeinf.apply_cdecl(): - - apply_cdecl(til, ea, decl, flags=0) -> bool - - - Apply the specified type to the address. This function parses the - declaration and calls 'apply_tinfo()' - - @param til: type library (C++: til_t *) - @param ea: linear address (C++: ea_t) - @param decl: type declaration in C form (C++: const char *) - @param flags: flags to pass to apply_tinfo ( TINFO_DEFINITE is always - passed) (C++: int) - @return: success - - -ida_typeinf.apply_named_type(): - - apply_named_type(ea, name) -> bool - - - Apply the specified named type to the address. - - @param ea: linear address (C++: ea_t) - @param name: the type name, e.g. "FILE" (C++: const char *) - @return: success - - -ida_typeinf.apply_once_tinfo_and_name(): - - apply_once_tinfo_and_name(dea, tif, name) -> bool - - - Apply the specified type and name to the address. This function checks - if the address already has a type. If the old typedoes not exist or - the new type is 'better' than the old type, then thenew type will be - applied. A type is considered better if it has moreinformation (e.g. - 'BTMT_STRUCT' is better than 'BT_INT' ).The same logic is with the - name: if the address already have a meaningfulname, it will be - preserved. Only if the old name does not exist or itis a dummy name - like byte_123, it will be replaced by the new name. - - @param dea: linear address (C++: ea_t) - @param tif: type string in the internal format (C++: const tinfo_t - &) - @param name: new name for the address (C++: const char *) - @return: success - - -ida_typeinf.apply_tinfo(): - - apply_tinfo(ea, tif, flags) -> bool - - - Apply the specified type to the specified address. This function sets - the type and tries to convert the item at the specified address to - conform the type. - - @param ea: linear address (C++: ea_t) - @param tif: type string in internal format (C++: const tinfo_t &) - @param flags: combination of Apply tinfo flags (C++: uint32) - @return: success - - -ida_typeinf.apply_tinfo_to_stkarg(): - - apply_tinfo_to_stkarg(insn, x, v, tif, name) -> bool - - - Helper function for the processor modules. to be called from - \ph{use_stkarg_type} - - @param insn (C++: const insn_t &) - @param x (C++: const op_t &) - @param v (C++: uval_t) - @param tif (C++: const tinfo_t &) - @param name (C++: const char *) - - -ida_typeinf.apply_type(): - - apply_type(ti, py_type, py_fields, ea, flags) -> bool - - - Apply the specified type to the address - @param ti: Type info library. 'None' can be used. - @param py_type: type string - @param py_fields: fields string (may be empty or None) - @param ea: the address of the object - @param flags: combination of TINFO_... constants or 0 - @return: Boolean - - -class ida_typeinf.argloc_t(): - - Proxy of C++ argloc_t class - - -ida_typeinf.argloc_t.advance(): - - advance(self, delta) -> bool - - -ida_typeinf.argloc_t.atype(): - - atype(self) -> argloc_type_t - - -ida_typeinf.argloc_t.calc_offset(): - - calc_offset(self) -> sval_t - - -ida_typeinf.argloc_t.compare(): - - compare(self, r) -> int - - -ida_typeinf.argloc_t.consume_rrel(): - - consume_rrel(self, p) - - -ida_typeinf.argloc_t.consume_scattered(): - - consume_scattered(self, p) - - -ida_typeinf.argloc_t.get_biggest(): - - get_biggest(self) -> argloc_t::biggest_t - - -ida_typeinf.argloc_t.get_custom(): - - get_custom(self) -> void * - - -ida_typeinf.argloc_t.get_ea(): - - get_ea(self) -> ea_t - - -ida_typeinf.argloc_t.get_reginfo(): - - get_reginfo(self) -> uint32 - - -ida_typeinf.argloc_t.get_rrel(): - - get_rrel(self) -> rrel_t - get_rrel(self) -> rrel_t - - -ida_typeinf.argloc_t.has_reg(): - - has_reg(self) -> bool - - -ida_typeinf.argloc_t.has_stkoff(): - - has_stkoff(self) -> bool - - -ida_typeinf.argloc_t.is_badloc(): - - is_badloc(self) -> bool - - -ida_typeinf.argloc_t.is_custom(): - - is_custom(self) -> bool - - -ida_typeinf.argloc_t.is_ea(): - - is_ea(self) -> bool - - -ida_typeinf.argloc_t.is_fragmented(): - - is_fragmented(self) -> bool - - -ida_typeinf.argloc_t.is_mixed_scattered(): - - is_mixed_scattered(self) -> bool - - -ida_typeinf.argloc_t.is_reg(): - - is_reg(self) -> bool - - -ida_typeinf.argloc_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_typeinf.argloc_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_typeinf.argloc_t.is_rrel(): - - is_rrel(self) -> bool - - -ida_typeinf.argloc_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_typeinf.argloc_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_typeinf.argloc_t.reg1(): - - reg1(self) -> int - - -ida_typeinf.argloc_t.reg2(): - - reg2(self) -> int - - -ida_typeinf.argloc_t.regoff(): - - regoff(self) -> int - - -ida_typeinf.argloc_t.scattered(): - - scattered(self) -> scattered_aloc_t - scattered(self) -> scattered_aloc_t - - -ida_typeinf.argloc_t.set_badloc(): - - set_badloc(self) - - -ida_typeinf.argloc_t.set_ea(): - - set_ea(self, _ea) - - -ida_typeinf.argloc_t.set_reg1(): - - set_reg1(self, reg, off=0) - - -ida_typeinf.argloc_t.set_reg2(): - - set_reg2(self, _reg1, _reg2) - - -ida_typeinf.argloc_t.set_stkoff(): - - set_stkoff(self, off) - - -ida_typeinf.argloc_t.stkoff(): - - stkoff(self) -> sval_t - - -ida_typeinf.argloc_t.swap(): - - swap(self, r) - - -class ida_typeinf.argpart_t(): - - Proxy of C++ argpart_t class - - -ida_typeinf.argpart_t.advance(): - - advance(self, delta) -> bool - - -ida_typeinf.argpart_t.atype(): - - atype(self) -> argloc_type_t - - -ida_typeinf.argpart_t.bad_offset(): - - bad_offset(self) -> bool - - -ida_typeinf.argpart_t.bad_size(): - - bad_size(self) -> bool - - -ida_typeinf.argpart_t.calc_offset(): - - calc_offset(self) -> sval_t - - -ida_typeinf.argpart_t.compare(): - - compare(self, r) -> int - - -ida_typeinf.argpart_t.consume_rrel(): - - consume_rrel(self, p) - - -ida_typeinf.argpart_t.consume_scattered(): - - consume_scattered(self, p) - - -ida_typeinf.argpart_t.get_biggest(): - - get_biggest(self) -> argloc_t::biggest_t - - -ida_typeinf.argpart_t.get_custom(): - - get_custom(self) -> void * - - -ida_typeinf.argpart_t.get_ea(): - - get_ea(self) -> ea_t - - -ida_typeinf.argpart_t.get_reginfo(): - - get_reginfo(self) -> uint32 - - -ida_typeinf.argpart_t.get_rrel(): - - get_rrel(self) -> rrel_t - get_rrel(self) -> rrel_t - - -ida_typeinf.argpart_t.has_reg(): - - has_reg(self) -> bool - - -ida_typeinf.argpart_t.has_stkoff(): - - has_stkoff(self) -> bool - - -ida_typeinf.argpart_t.is_badloc(): - - is_badloc(self) -> bool - - -ida_typeinf.argpart_t.is_custom(): - - is_custom(self) -> bool - - -ida_typeinf.argpart_t.is_ea(): - - is_ea(self) -> bool - - -ida_typeinf.argpart_t.is_fragmented(): - - is_fragmented(self) -> bool - - -ida_typeinf.argpart_t.is_mixed_scattered(): - - is_mixed_scattered(self) -> bool - - -ida_typeinf.argpart_t.is_reg(): - - is_reg(self) -> bool - - -ida_typeinf.argpart_t.is_reg1(): - - is_reg1(self) -> bool - - -ida_typeinf.argpart_t.is_reg2(): - - is_reg2(self) -> bool - - -ida_typeinf.argpart_t.is_rrel(): - - is_rrel(self) -> bool - - -ida_typeinf.argpart_t.is_scattered(): - - is_scattered(self) -> bool - - -ida_typeinf.argpart_t.is_stkoff(): - - is_stkoff(self) -> bool - - -ida_typeinf.argpart_t.off: - argpart_t_off_get(self) -> ushort - -ida_typeinf.argpart_t.reg1(): - - reg1(self) -> int - - -ida_typeinf.argpart_t.reg2(): - - reg2(self) -> int - - -ida_typeinf.argpart_t.regoff(): - - regoff(self) -> int - - -ida_typeinf.argpart_t.scattered(): - - scattered(self) -> scattered_aloc_t - scattered(self) -> scattered_aloc_t - - -ida_typeinf.argpart_t.set_badloc(): - - set_badloc(self) - - -ida_typeinf.argpart_t.set_ea(): - - set_ea(self, _ea) - - -ida_typeinf.argpart_t.set_reg1(): - - set_reg1(self, reg, off=0) - - -ida_typeinf.argpart_t.set_reg2(): - - set_reg2(self, _reg1, _reg2) - - -ida_typeinf.argpart_t.set_stkoff(): - - set_stkoff(self, off) - - -ida_typeinf.argpart_t.size: - argpart_t_size_get(self) -> ushort - -ida_typeinf.argpart_t.stkoff(): - - stkoff(self) -> sval_t - - -ida_typeinf.argpart_t.swap(): - - swap(self, r) - - -class ida_typeinf.argpartvec_t(): - - Proxy of C++ qvector<(argpart_t)> class - - -ida_typeinf.argpartvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.argpartvec_t.at(): - - at(self, _idx) -> argpart_t - - -ida_typeinf.argpartvec_t.begin(): - - begin(self) -> argpart_t - begin(self) -> argpart_t - - -ida_typeinf.argpartvec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.argpartvec_t.clear(): - - clear(self) - - -ida_typeinf.argpartvec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.argpartvec_t.end(): - - end(self) -> argpart_t - end(self) -> argpart_t - - -ida_typeinf.argpartvec_t.erase(): - - erase(self, it) -> argpart_t - erase(self, first, last) -> argpart_t - - -ida_typeinf.argpartvec_t.extract(): - - extract(self) -> argpart_t - - -ida_typeinf.argpartvec_t.find(): - - find(self, x) -> argpart_t - find(self, x) -> argpart_t - - -ida_typeinf.argpartvec_t.grow(): - - grow(self, x=argpart_t()) - - -ida_typeinf.argpartvec_t.has(): - - has(self, x) -> bool - - -ida_typeinf.argpartvec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.argpartvec_t.insert(): - - insert(self, it, x) -> argpart_t - - -ida_typeinf.argpartvec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.argpartvec_t.push_back(): - - push_back(self, x) - push_back(self) -> argpart_t - - -ida_typeinf.argpartvec_t.qclear(): - - qclear(self) - - -ida_typeinf.argpartvec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.argpartvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.argpartvec_t.size(): - - size(self) -> size_t - - -ida_typeinf.argpartvec_t.swap(): - - swap(self, r) - - -ida_typeinf.argpartvec_t.truncate(): - - truncate(self) - - -class ida_typeinf.array_type_data_t(): - - Proxy of C++ array_type_data_t class - - -ida_typeinf.array_type_data_t.base: - array_type_data_t_base_get(self) -> uint32 - -ida_typeinf.array_type_data_t.elem_type: - array_type_data_t_elem_type_get(self) -> tinfo_t - -ida_typeinf.array_type_data_t.nelems: - array_type_data_t_nelems_get(self) -> uint32 - -ida_typeinf.array_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.begin_type_updating(): - - begin_type_updating(utp) - - - Mark the beginning of a large update operation on the types. Can be - used with 'add_enum_member()' , add_struc_member, etc... Also see - 'end_type_updating()' - - @param utp (C++: update_type_t) - - -class ida_typeinf.bitfield_type_data_t(): - - Proxy of C++ bitfield_type_data_t class - - -ida_typeinf.bitfield_type_data_t.compare(): - - compare(self, r) -> int - - -ida_typeinf.bitfield_type_data_t.is_unsigned: - bitfield_type_data_t_is_unsigned_get(self) -> bool - -ida_typeinf.bitfield_type_data_t.nbytes: - bitfield_type_data_t_nbytes_get(self) -> uchar - -ida_typeinf.bitfield_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.bitfield_type_data_t.width: - bitfield_type_data_t_width_get(self) -> uchar - -ida_typeinf.calc_c_cpp_name(): - - calc_c_cpp_name(name, type, ccn_flags) -> ssize_t - - - Get C or C++ form of the name. - - @param name: original (mangled or decorated) name (C++: const char *) - @param type: name type if known, otherwise NULL (C++: const tinfo_t - *) - @param ccn_flags: one of C/C++ naming flags (C++: int) - - -ida_typeinf.calc_number_of_children(): - - calc_number_of_children(loc, tif, dont_deref_ptr=False) -> int - - - Calculate max number of lines of a formatted c data, when expanded ( - 'PTV_EXPAND' ). - - @param loc: location of the data ( ALOC_STATIC or ALOC_CUSTOM ) - (C++: const argloc_t &) - @param tif: type info (C++: const tinfo_t &) - @param dont_deref_ptr: consider 'ea' as the ptr value (C++: bool) - - -ida_typeinf.calc_tinfo_gaps(): - - calc_tinfo_gaps(out, typid) -> bool - - -ida_typeinf.calc_type_size(): - - calc_type_size(ti, tp) -> PyObject * - - - Returns the size of a type - @param ti: Type info. 'None' can be passed. - @param tp: type string - @return: - - None on failure - - The size of the type - - -class ida_typeinf.callregs_t(): - - Proxy of C++ callregs_t class - - -ida_typeinf.callregs_t.fpregs: - callregs_t_fpregs_get(self) -> intvec_t * - -ida_typeinf.callregs_t.gpregs: - callregs_t_gpregs_get(self) -> intvec_t * - -ida_typeinf.callregs_t.init_regs(): - - init_regs(self, cc) - - -ida_typeinf.callregs_t.nregs: - callregs_t_nregs_get(self) -> int - -ida_typeinf.callregs_t.policy: - callregs_t_policy_get(self) -> argreg_policy_t - -ida_typeinf.callregs_t.regcount(): - - regcount(cc) -> int - - -ida_typeinf.callregs_t.reginds(): - - reginds(self, gp_ind, fp_ind, r) -> bool - - -ida_typeinf.callregs_t.reset(): - - reset(self) - - -ida_typeinf.callregs_t.set(): - - set(self, _policy, gprs, fprs) - - -ida_typeinf.callregs_t_regcount(): - - callregs_t_regcount(cc) -> int - - -ida_typeinf.choose_local_tinfo(): - - choose_local_tinfo(ti, title, func=None, def_ord=0, ud=None) -> uint32 - - - Choose a type from the local type library. - - @param ti: pointer to til (C++: const til_t *) - @param title: title of listbox to display (C++: const char *) - @param func: predicate to select types to display (maybe NULL) (C++: - local_tinfo_predicate_t *) - @param def_ord: ordinal to position cursor before choose (C++: uint32) - @param ud: user data (C++: void *) - @return: == 0 means nothing is chosen, otherwise an ordinal number - - -ida_typeinf.choose_named_type(): - - choose_named_type(out_sym, root_til, title, ntf_flags, predicate=None) -> bool - - - Choose a type from a type library. - - @param out_sym: pointer to be filled with the chosen type (C++: - til_symbol_t *) - @param root_til: pointer to starting til (the function will inspect - the base tils if allowed by flags) (C++: const til_t - *) - @param title: title of listbox to display (C++: const char *) - @param ntf_flags: combination of Flags for named types (C++: int) - @param predicate: predicate to select types to display (maybe NULL) - (C++: predicate_t *) - @return: false if nothing is chosen, otherwise true - - -ida_typeinf.clear_tinfo_t(): - - clear_tinfo_t(_this) - - -ida_typeinf.compact_til(): - - compact_til(ti) -> bool - - - Collect garbage in til. Must be called before storing the til. - - @param ti (C++: til_t *) - @return: true if any memory was freed - - -ida_typeinf.compare_tinfo(): - - compare_tinfo(t1, t2, tcflags) -> bool - - -class ida_typeinf.const_aloc_visitor_t(): - - Proxy of C++ const_aloc_visitor_t class - - -ida_typeinf.const_aloc_visitor_t.visit_location(): - - visit_location(self, v, off, size) -> int - - -ida_typeinf.convert_pt_flags_to_hti(): - - convert_pt_flags_to_hti(pt_flags) -> int - - - Convert 'Type parsing flags' to 'Type formatting flags' . Type parsing - flags lesser than 0x10 don't have stable meaning and will be ignored - (more on these flags can be seen in idc.idc) - - @param pt_flags (C++: int) - - -ida_typeinf.copy_named_type(): - - copy_named_type(dsttil, srctil, name) -> uint32 - - - Copy a named type from one til to another. This function will copy the - specified type and all dependent types from the source type library to - the destination library. - - @param dsttil: Destination til. It must have orginal types enabled - (C++: til_t *) - @param srctil: Source til. (C++: const til_t *) - @param name: name of the type to copy (C++: const char *) - @return: ordinal number of the copied type. 0 means error - - -ida_typeinf.copy_tinfo_t(): - - copy_tinfo_t(_this, r) - - -ida_typeinf.create_numbered_type_name(): - - create_numbered_type_name(ord) -> ssize_t - - - Create anonymous name for numbered type. This name can be used to - reference a numbered type by its ordinal Ordinal names have the - following format: '#' + set_de(ord) Returns: -1 if error, otherwise - the name length - - @param ord (C++: int32) - - -ida_typeinf.create_tinfo(): - - create_tinfo(_this, bt, bt2, ptr) -> bool - - -ida_typeinf.default_compiler(): - - default_compiler() -> comp_t - - - Get compiler specified by armem{inf,idainfo,cc}. - - -ida_typeinf.del_named_type(): - - del_named_type(ti, name, ntf_flags) -> bool - - - Delete information about a symbol. - - @param ti: type library (C++: til_t *) - @param name: name of symbol (C++: const char *) - @param ntf_flags: combination of Flags for named types (C++: int) - @return: success - - -ida_typeinf.del_numbered_type(): - - del_numbered_type(ti, ordinal) -> bool - - - Delete a numbered type. - - - @param ti (C++: til_t *) - @param ordinal (C++: uint32) - - -ida_typeinf.del_til(): - - del_til(name) -> bool - - - Unload a til file. - - - @param name (C++: const char *) - - -ida_typeinf.del_tinfo_attr(): - - del_tinfo_attr(tif, key, make_copy) -> bool - - -ida_typeinf.deref_ptr(): - - deref_ptr(ptr_ea, tif, closure_obj=None) -> bool - - - Dereference a pointer. - - @param ptr_ea: in/out parameter in: address of the pointer out: - the pointed address (C++: ea_t *) - @param tif: type of the pointer (C++: const tinfo_t &) - @param closure_obj: closure object (not used yet) (C++: ea_t *) - @return: success - - -ida_typeinf.deserialize_tinfo(): - - deserialize_tinfo(tif, til, ptype, pfields, pfldcmts) -> bool - - -ida_typeinf.dstr_tinfo(): - - dstr_tinfo(tif) -> char const * - - -ida_typeinf.dump_func_type_data(): - - dump_func_type_data(fti, praloc_bits) -> bool - - - Use 'func_type_data_t::dump()' - - - @param fti (C++: const func_type_data_t &) - @param praloc_bits (C++: int) - - -ida_typeinf.end_type_updating(): - - end_type_updating(utp) - - - Mark the end of a large update operation on the types (see - 'begin_type_updating()' ) - - - @param utp (C++: update_type_t) - - -class ida_typeinf.enum_member_t(): - - Proxy of C++ enum_member_t class - - -ida_typeinf.enum_member_t.cmt: - enum_member_t_cmt_get(self) -> qstring * - -ida_typeinf.enum_member_t.name: - enum_member_t_name_get(self) -> qstring * - -ida_typeinf.enum_member_t.swap(): - - swap(self, r) - - -ida_typeinf.enum_member_t.value: - enum_member_t_value_get(self) -> uint64 - -class ida_typeinf.enum_member_vec_t(): - - Proxy of C++ qvector<(enum_member_t)> class - - -ida_typeinf.enum_member_vec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.enum_member_vec_t.at(): - - at(self, _idx) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.begin(): - - begin(self) -> enum_member_t - begin(self) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.enum_member_vec_t.clear(): - - clear(self) - - -ida_typeinf.enum_member_vec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.enum_member_vec_t.end(): - - end(self) -> enum_member_t - end(self) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.erase(): - - erase(self, it) -> enum_member_t - erase(self, first, last) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.extract(): - - extract(self) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.find(): - - find(self, x) -> enum_member_t - find(self, x) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.grow(): - - grow(self, x=enum_member_t()) - - -ida_typeinf.enum_member_vec_t.has(): - - has(self, x) -> bool - - -ida_typeinf.enum_member_vec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.enum_member_vec_t.insert(): - - insert(self, it, x) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.enum_member_vec_t.push_back(): - - push_back(self, x) - push_back(self) -> enum_member_t - - -ida_typeinf.enum_member_vec_t.qclear(): - - qclear(self) - - -ida_typeinf.enum_member_vec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.enum_member_vec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.enum_member_vec_t.size(): - - size(self) -> size_t - - -ida_typeinf.enum_member_vec_t.swap(): - - swap(self, r) - - -ida_typeinf.enum_member_vec_t.truncate(): - - truncate(self) - - -class ida_typeinf.enum_type_data_t(): - - Proxy of C++ enum_type_data_t class - - -ida_typeinf.enum_type_data_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.enum_type_data_t.at(): - - at(self, _idx) -> enum_member_t - - -ida_typeinf.enum_type_data_t.begin(): - - begin(self) -> enum_member_t - begin(self) -> enum_member_t - - -ida_typeinf.enum_type_data_t.bte: - enum_type_data_t_bte_get(self) -> bte_t - -ida_typeinf.enum_type_data_t.calc_mask(): - - calc_mask(self) -> uint64 - - -ida_typeinf.enum_type_data_t.calc_nbytes(): - - calc_nbytes(self) -> int - - -ida_typeinf.enum_type_data_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.enum_type_data_t.clear(): - - clear(self) - - -ida_typeinf.enum_type_data_t.empty(): - - empty(self) -> bool - - -ida_typeinf.enum_type_data_t.end(): - - end(self) -> enum_member_t - end(self) -> enum_member_t - - -ida_typeinf.enum_type_data_t.erase(): - - erase(self, it) -> enum_member_t - erase(self, first, last) -> enum_member_t - - -ida_typeinf.enum_type_data_t.extract(): - - extract(self) -> enum_member_t - - -ida_typeinf.enum_type_data_t.find(): - - find(self, x) -> enum_member_t - find(self, x) -> enum_member_t - - -ida_typeinf.enum_type_data_t.group_sizes: - enum_type_data_t_group_sizes_get(self) -> intvec_t * - -ida_typeinf.enum_type_data_t.grow(): - - grow(self, x=enum_member_t()) - - -ida_typeinf.enum_type_data_t.has(): - - has(self, x) -> bool - - -ida_typeinf.enum_type_data_t.inject(): - - inject(self, s, len) - - -ida_typeinf.enum_type_data_t.insert(): - - insert(self, it, x) -> enum_member_t - - -ida_typeinf.enum_type_data_t.is_64bit(): - - is_64bit(self) -> bool - - -ida_typeinf.enum_type_data_t.is_char(): - - is_char(self) -> bool - - -ida_typeinf.enum_type_data_t.is_hex(): - - is_hex(self) -> bool - - -ida_typeinf.enum_type_data_t.is_sdec(): - - is_sdec(self) -> bool - - -ida_typeinf.enum_type_data_t.is_udec(): - - is_udec(self) -> bool - - -ida_typeinf.enum_type_data_t.pop_back(): - - pop_back(self) - - -ida_typeinf.enum_type_data_t.push_back(): - - push_back(self, x) - push_back(self) -> enum_member_t - - -ida_typeinf.enum_type_data_t.qclear(): - - qclear(self) - - -ida_typeinf.enum_type_data_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.enum_type_data_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.enum_type_data_t.size(): - - size(self) -> size_t - - -ida_typeinf.enum_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.enum_type_data_t.taenum_bits: - enum_type_data_t_taenum_bits_get(self) -> uint32 - -ida_typeinf.enum_type_data_t.truncate(): - - truncate(self) - - -ida_typeinf.extract_argloc(): - - extract_argloc(vloc, ptype, is_retval) -> bool - - - Deserialize argument location. - - - @param vloc (C++: argloc_t *) - @param ptype (C++: const type_t **) - @param is_retval (C++: bool) - - -ida_typeinf.find_tinfo_udt_member(): - - find_tinfo_udt_member(udm, typid, strmem_flags) -> int - - -ida_typeinf.first_named_type(): - - first_named_type(ti, ntf_flags) -> char const * - - - Enumerate types. Returns mangled names. Never returns anonymous types. - To include it, enumerate types by ordinals. - - @param ti (C++: const til_t *) - @param ntf_flags (C++: int) - - -ida_typeinf.for_all_arglocs(): - - for_all_arglocs(vv, vloc, size, off=0) -> int - - - Compress larger argloc types and initiate the aloc visitor. - - - @param vv (C++: aloc_visitor_t &) - @param vloc (C++: argloc_t &) - @param size (C++: int) - @param off (C++: int) - - -ida_typeinf.for_all_const_arglocs(): - - for_all_const_arglocs(vv, vloc, size, off=0) -> int - - - See 'for_all_arglocs()' - - - @param vv (C++: const_aloc_visitor_t &) - @param vloc (C++: const argloc_t &) - @param size (C++: int) - @param off (C++: int) - - -ida_typeinf.free_til(): - - free_til(ti) - - - Free memory allocated by til. - - - @param ti (C++: til_t *) - - -ida_typeinf.func_has_stkframe_hole(): - - func_has_stkframe_hole(ea, fti) -> bool - - - Looks for a hole at the beginning of the stack arguments. Will make - use of the IDB's 'func_t' function at that place (if present) to help - determine the presence of such a hole. - - @param ea (C++: ea_t) - @param fti (C++: const func_type_data_t &) - - -class ida_typeinf.func_type_data_t(): - - Proxy of C++ func_type_data_t class - - -ida_typeinf.func_type_data_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.func_type_data_t.at(): - - at(self, _idx) -> funcarg_t - - -ida_typeinf.func_type_data_t.begin(): - - begin(self) -> funcarg_t - begin(self) -> funcarg_t - - -ida_typeinf.func_type_data_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.func_type_data_t.cc: - func_type_data_t_cc_get(self) -> cm_t - -ida_typeinf.func_type_data_t.clear(): - - clear(self) - - -ida_typeinf.func_type_data_t.dump(): - - dump(self, praloc_bits=0x02) -> bool - - -ida_typeinf.func_type_data_t.empty(): - - empty(self) -> bool - - -ida_typeinf.func_type_data_t.end(): - - end(self) -> funcarg_t - end(self) -> funcarg_t - - -ida_typeinf.func_type_data_t.erase(): - - erase(self, it) -> funcarg_t - erase(self, first, last) -> funcarg_t - - -ida_typeinf.func_type_data_t.extract(): - - extract(self) -> funcarg_t - - -ida_typeinf.func_type_data_t.find(): - - find(self, x) -> funcarg_t - find(self, x) -> funcarg_t - - -ida_typeinf.func_type_data_t.flags: - func_type_data_t_flags_get(self) -> int - -ida_typeinf.func_type_data_t.get_call_method(): - - get_call_method(self) -> int - - -ida_typeinf.func_type_data_t.grow(): - - grow(self, x=funcarg_t()) - - -ida_typeinf.func_type_data_t.guess_cc(): - - guess_cc(self, purged, cc_flags) -> cm_t - - -ida_typeinf.func_type_data_t.has(): - - has(self, x) -> bool - - -ida_typeinf.func_type_data_t.inject(): - - inject(self, s, len) - - -ida_typeinf.func_type_data_t.insert(): - - insert(self, it, x) -> funcarg_t - - -ida_typeinf.func_type_data_t.is_high(): - - is_high(self) -> bool - - -ida_typeinf.func_type_data_t.is_noret(): - - is_noret(self) -> bool - - -ida_typeinf.func_type_data_t.is_pure(): - - is_pure(self) -> bool - - -ida_typeinf.func_type_data_t.is_vararg_cc(): - - is_vararg_cc(self) -> bool - - -ida_typeinf.func_type_data_t.pop_back(): - - pop_back(self) - - -ida_typeinf.func_type_data_t.push_back(): - - push_back(self, x) - push_back(self) -> funcarg_t - - -ida_typeinf.func_type_data_t.qclear(): - - qclear(self) - - -ida_typeinf.func_type_data_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.func_type_data_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.func_type_data_t.retloc: - func_type_data_t_retloc_get(self) -> argloc_t - -ida_typeinf.func_type_data_t.rettype: - func_type_data_t_rettype_get(self) -> tinfo_t - -ida_typeinf.func_type_data_t.size(): - - size(self) -> size_t - - -ida_typeinf.func_type_data_t.spoiled: - func_type_data_t_spoiled_get(self) -> reginfovec_t - -ida_typeinf.func_type_data_t.stkargs: - func_type_data_t_stkargs_get(self) -> uval_t - -ida_typeinf.func_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.func_type_data_t.truncate(): - - truncate(self) - - -class ida_typeinf.funcarg_t(): - - Proxy of C++ funcarg_t class - - -ida_typeinf.funcarg_t.argloc: - funcarg_t_argloc_get(self) -> argloc_t - -ida_typeinf.funcarg_t.cmt: - funcarg_t_cmt_get(self) -> qstring * - -ida_typeinf.funcarg_t.flags: - funcarg_t_flags_get(self) -> uint32 - -ida_typeinf.funcarg_t.name: - funcarg_t_name_get(self) -> qstring * - -ida_typeinf.funcarg_t.type: - funcarg_t_type_get(self) -> tinfo_t - -class ida_typeinf.funcargvec_t(): - - Proxy of C++ qvector<(funcarg_t)> class - - -ida_typeinf.funcargvec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.funcargvec_t.at(): - - at(self, _idx) -> funcarg_t - - -ida_typeinf.funcargvec_t.begin(): - - begin(self) -> funcarg_t - begin(self) -> funcarg_t - - -ida_typeinf.funcargvec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.funcargvec_t.clear(): - - clear(self) - - -ida_typeinf.funcargvec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.funcargvec_t.end(): - - end(self) -> funcarg_t - end(self) -> funcarg_t - - -ida_typeinf.funcargvec_t.erase(): - - erase(self, it) -> funcarg_t - erase(self, first, last) -> funcarg_t - - -ida_typeinf.funcargvec_t.extract(): - - extract(self) -> funcarg_t - - -ida_typeinf.funcargvec_t.find(): - - find(self, x) -> funcarg_t - find(self, x) -> funcarg_t - - -ida_typeinf.funcargvec_t.grow(): - - grow(self, x=funcarg_t()) - - -ida_typeinf.funcargvec_t.has(): - - has(self, x) -> bool - - -ida_typeinf.funcargvec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.funcargvec_t.insert(): - - insert(self, it, x) -> funcarg_t - - -ida_typeinf.funcargvec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.funcargvec_t.push_back(): - - push_back(self, x) - push_back(self) -> funcarg_t - - -ida_typeinf.funcargvec_t.qclear(): - - qclear(self) - - -ida_typeinf.funcargvec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.funcargvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.funcargvec_t.size(): - - size(self) -> size_t - - -ida_typeinf.funcargvec_t.swap(): - - swap(self, r) - - -ida_typeinf.funcargvec_t.truncate(): - - truncate(self) - - -ida_typeinf.gcc_layout(): - - gcc_layout() -> bool - - - Should use the struct/union layout as done by gcc? - - -ida_typeinf.gen_decorate_name(): - - gen_decorate_name(name, mangle, cc, type) -> bool - - - Generic function for 'decorate_name()' (may be used in IDP modules) - - - @param name (C++: const char *) - @param mangle (C++: bool) - @param cc (C++: cm_t) - @param type (C++: const tinfo_t *) - - -ida_typeinf.gen_use_arg_tinfos(): - - gen_use_arg_tinfos(caller, fti, rargs, set_optype, is_stkarg_load, has_delay_slot) - - - The main function using these callbacks: - - - @param caller (C++: ea_t) - @param fti (C++: func_type_data_t *) - @param rargs (C++: funcargvec_t *) - @param set_optype (C++: set_op_tinfo_t *) - @param is_stkarg_load (C++: is_stkarg_load_t *) - @param has_delay_slot (C++: has_delay_slot_t *) - - -ida_typeinf.get_abi_name(): - - get_abi_name() -> ssize_t - - - Get ABI name. - - @return: length of the name (>=0) - - -ida_typeinf.get_alias_target(): - - get_alias_target(ti, ordinal) -> uint32 - - - Find the final alias destination. If the ordinal has not been aliased, - return the specified ordinal itself If failed, returns 0. - - @param ti (C++: const til_t *) - @param ordinal (C++: uint32) - - -ida_typeinf.get_arg_addrs(): - - get_arg_addrs(caller) -> PyObject * - - - Retrieve addresses of argument initialization instructions - - @param caller: the address of the call instruction - @return: list of instruction addresses - - -ida_typeinf.get_base_type(): - - get_base_type(t) -> type_t - - - Get get basic type bits ( 'TYPE_BASE_MASK' ) - - - @param t (C++: type_t) - - -ida_typeinf.get_c_header_path(): - - get_c_header_path() -> ssize_t - - - Get the include directory path of the target compiler. - - -ida_typeinf.get_c_macros(): - - get_c_macros() -> ssize_t - - - Get predefined macros for the target compiler. - - -ida_typeinf.get_comp(): - - get_comp(comp) -> comp_t - - - Get compiler bits. - - - @param comp (C++: comp_t) - - -ida_typeinf.get_compiler_abbr(): - - get_compiler_abbr(id) -> char const * - - - Get abbreviated compiler name. - - - @param id (C++: comp_t) - - -ida_typeinf.get_compiler_name(): - - get_compiler_name(id) -> char const * - - - Get full compiler name. - - - @param id (C++: comp_t) - - -ida_typeinf.get_compilers(): - - get_compilers(ids, names, abbrs) - - - Get names of all built-in compilers. - - - @param ids (C++: compvec_t *) - @param names (C++: qstrvec_t *) - @param abbrs (C++: qstrvec_t *) - - -ida_typeinf.get_enum_member_expr(): - - get_enum_member_expr(tif, serial, value) -> bool - - - Return a C expression that can be used to represent an enum member. If - the value does not correspond to any single enum member, this function - tries to find a bitwise combination of enum members that correspond to - it. If more than half of value bits do not match any enum members, it - fails. - - @param tif: enumeration type (C++: const tinfo_t &) - @param serial: which enumeration member to use (0 means the first with - the given value) (C++: int) - @param value: value to search in the enumeration type. only 32-bit - number can be handled yet (C++: uint64) - @return: success - - -ida_typeinf.get_full_type(): - - get_full_type(t) -> type_t - - - Get basic type bits + type flags ( 'TYPE_FULL_MASK' ) - - - @param t (C++: type_t) - - -ida_typeinf.get_idainfo_by_type(): - - get_idainfo_by_type(tif) -> bool - - - Extract information from a 'tinfo_t' . - - @param tif: the type to inspect (C++: const tinfo_t &) - - -ida_typeinf.get_idati(): - - get_idati() -> til_t - - - Pointer to the local type library - this til is private for each IDB - file Function that accepts til_t* uses local type library instead of - NULL. - - -ida_typeinf.get_named_type(): - - get_named_type(til, name, ntf_flags) -> PyObject * - - - Get a type data by its name. - @param til: the type library - @param name: the type name - @param ntf_flags: a combination of NTF_* constants - @return: - None on failure - tuple(code, type_str, fields_str, cmt, field_cmts, sclass, value) on success - - -ida_typeinf.get_named_type64(): - - get_named_type64(til, name, ntf_flags) -> PyObject * - - - See 'get_named_type()' above.If the value in the 'ti' library is - 32-bit, it will be sign-extended before being stored in the 'value' - pointer. - - @param name (C++: const char *) - @param ntf_flags (C++: int) - - -ida_typeinf.get_numbered_type(): - - get_numbered_type(til, ordinal) -> PyObject * - - - Retrieve a type by its ordinal number. - - - @param ordinal (C++: uint32) - - -ida_typeinf.get_numbered_type_name(): - - get_numbered_type_name(ti, ordinal) -> char const * - - - Get type name (if exists) by its ordinal. If the type is anonymous, - returns "". If failed, returns NULL - - @param ti (C++: const til_t *) - @param ordinal (C++: uint32) - - -ida_typeinf.get_ordinal_from_idb_type(): - - get_ordinal_from_idb_type(name, type) -> int - - - Get ordinal number of an idb type (struct/enum). The 'type' parameter - is used only to determine the kind of the type (struct or enum) Use - this function to find out the correspondence between idb types and til - types - - @param name (C++: const char *) - @param type (C++: const type_t *) - - -ida_typeinf.get_ordinal_qty(): - - get_ordinal_qty(ti) -> uint32 - - - Get number of allocated ordinals. - - @param ti (C++: const til_t *) - @return: uint32(-1) if failed - - -ida_typeinf.get_scalar_bt(): - - get_scalar_bt(size) -> type_t - - -ida_typeinf.get_stock_tinfo(): - - get_stock_tinfo(tif, id) -> bool - - -ida_typeinf.get_tinfo_attr(): - - get_tinfo_attr(typid, key, bv, all_attrs) -> bool - - -ida_typeinf.get_tinfo_attrs(): - - get_tinfo_attrs(typid, tav, include_ref_attrs) -> bool - - -ida_typeinf.get_tinfo_details(): - - get_tinfo_details(typid, bt2, buf) -> bool - - -ida_typeinf.get_tinfo_pdata(): - - get_tinfo_pdata(outptr, typid, what) -> size_t - - -ida_typeinf.get_tinfo_property(): - - get_tinfo_property(typid, gta_prop) -> size_t - - -ida_typeinf.get_tinfo_size(): - - get_tinfo_size(p_effalign, typid, gts_code) -> size_t - - -ida_typeinf.get_type_flags(): - - get_type_flags(t) -> type_t - - - Get type flags ( 'TYPE_FLAGS_MASK' ) - - - @param t (C++: type_t) - - -ida_typeinf.get_type_ordinal(): - - get_type_ordinal(ti, name) -> int32 - - - Get type ordinal by its name. - - - @param ti (C++: const til_t *) - @param name (C++: const char *) - - -ida_typeinf.guess_func_cc(): - - guess_func_cc(fti, npurged, cc_flags) -> cm_t - - - Use 'func_type_data_t::guess_cc()' - - - @param fti (C++: const func_type_data_t &) - @param npurged (C++: int) - @param cc_flags (C++: int) - - -ida_typeinf.guess_tinfo(): - - guess_tinfo(tif, id) -> int - - - Generate a type information about the id from the disassembly. id can - be a structure/union/enum id or an address. - - @param tif (C++: tinfo_t *) - @param id (C++: tid_t) - @return: one of Guess tinfo codes - - -class ida_typeinf.ida_lowertype_helper_t(): - - Proxy of C++ ida_lowertype_helper_t class - - -ida_typeinf.ida_lowertype_helper_t.func_has_stkframe_hole(): - - func_has_stkframe_hole(self, candidate, candidate_data) -> bool - - -ida_typeinf.ida_lowertype_helper_t.get_func_purged_bytes(): - - get_func_purged_bytes(self, candidate, arg3) -> int - - -ida_typeinf.idc_get_local_type(): - - idc_get_local_type(ordinal, flags, buf, maxsize) -> int - - -ida_typeinf.idc_get_local_type_name(): - - idc_get_local_type_name(ordinal) -> char - - -ida_typeinf.idc_get_local_type_raw(): - - idc_get_local_type_raw(ordinal) -> PyObject * - - -ida_typeinf.idc_get_type(): - - idc_get_type(ea) -> char * - - -ida_typeinf.idc_get_type_raw(): - - idc_get_type_raw(ea) -> PyObject * - - -ida_typeinf.idc_guess_type(): - - idc_guess_type(ea) -> char * - - -ida_typeinf.idc_parse_decl(): - - idc_parse_decl(ti, decl, flags) -> PyObject * - - -ida_typeinf.idc_parse_types(): - - idc_parse_types(input, flags) -> int - - -ida_typeinf.idc_print_type(): - - idc_print_type(py_type, py_fields, name, flags) -> PyObject * - - -ida_typeinf.idc_set_local_type(): - - idc_set_local_type(ordinal, dcl, flags) -> int - - -ida_typeinf.import_type(): - - import_type(til, idx, name, flags=0) -> tid_t - - - Copy a named type from til to idb. - - @param til: type library (C++: const til_t *) - @param idx: the position of the new type in the list of types - (structures or enums). -1 means at the end of the list - (C++: int) - @param name: the type name (C++: const char *) - @param flags: combination of Import type flags (C++: int) - @return: BADNODE on error - - -ida_typeinf.is_autosync(): - - is_autosync(name, type) -> bool - is_autosync(name, tif) -> bool - - - Is the specified idb type automatically synchronized? - - - @param name (C++: const char *) - @param type (C++: const type_t *) - - -ida_typeinf.is_code_far(): - - is_code_far(cm) -> bool - - - Does the given model specify far code?. - - - @param cm (C++: cm_t) - - -ida_typeinf.is_comp_unsure(): - - is_comp_unsure(comp) -> comp_t - - - See 'COMP_UNSURE' . - - - @param comp (C++: comp_t) - - -ida_typeinf.is_data_far(): - - is_data_far(cm) -> bool - - - Does the given model specify far data?. - - - @param cm (C++: cm_t) - - -ida_typeinf.is_gcc(): - - is_gcc() -> bool - - - Is the target compiler 'COMP_GNU' ? - - -ida_typeinf.is_gcc32(): - - is_gcc32() -> bool - - - Is the target compiler 32 bit gcc? - - -ida_typeinf.is_gcc64(): - - is_gcc64() -> bool - - - Is the target compiler 64 bit gcc? - - -ida_typeinf.is_ordinal_name(): - - is_ordinal_name(name, ord=None) -> bool - - - Check if the name is an ordinal name. Ordinal names have the following - format: '#' + set_de(ord) - - @param name (C++: const char *) - @param ord (C++: uint32 *) - - -ida_typeinf.is_purging_cc(): - - is_purging_cc(cm) -> bool - - - Does the calling convention clean the stack arguments upon - return?.this function is valid only for x86 code - - @param cm (C++: cm_t) - - -ida_typeinf.is_restype_enum(): - - is_restype_enum(til, type) -> bool - - -ida_typeinf.is_restype_struct(): - - is_restype_struct(til, type) -> bool - - -ida_typeinf.is_restype_struni(): - - is_restype_struni(til, type) -> bool - - -ida_typeinf.is_restype_void(): - - is_restype_void(til, type) -> bool - - -ida_typeinf.is_sdacl_byte(): - - is_sdacl_byte(t) -> bool - - - Identify an sdacl byte. The first sdacl byte has the following format: - 11xx000x. The sdacl bytes are appended to udt fields. They indicate - the start of type attributes (as the tah-bytes do). The sdacl bytes - are used in the udt headers instead of the tah-byte. This is done for - compatibility with old databases, they were already using sdacl bytes - in udt headers and as udt field postfixes. (see "sdacl-typeattrs" in - the type bit definitions) - - @param t (C++: type_t) - - -ida_typeinf.is_tah_byte(): - - is_tah_byte(t) -> bool - - - The TAH byte (type attribute header byte) denotes the start of type - attributes. (see "tah-typeattrs" in the type bit definitions) - - @param t (C++: type_t) - - -ida_typeinf.is_type_arithmetic(): - - is_type_arithmetic(t) -> bool - - - Is the type an arithmetic type? (floating or integral) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_array(): - - is_type_array(t) -> bool - - - See 'BT_ARRAY' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_bitfld(): - - is_type_bitfld(t) -> bool - - - See 'BT_BITFIELD' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_bool(): - - is_type_bool(t) -> bool - - - See 'BTF_BOOL' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_char(): - - is_type_char(t) -> bool - - - Does the type specify a char value? (signed or unsigned, see 'Basic - type: integer' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_complex(): - - is_type_complex(t) -> bool - - - See 'BT_COMPLEX' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_const(): - - is_type_const(t) -> bool - - - See 'BTM_CONST' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_double(): - - is_type_double(t) -> bool - - - See 'BTF_DOUBLE' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_enum(): - - is_type_enum(t) -> bool - - - See 'BTF_ENUM' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_ext_arithmetic(): - - is_type_ext_arithmetic(t) -> bool - - - Is the type an extended arithmetic type? (arithmetic or enum) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_ext_integral(): - - is_type_ext_integral(t) -> bool - - - Is the type an extended integral type? (integral or enum) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_float(): - - is_type_float(t) -> bool - - - See 'BTF_FLOAT' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_floating(): - - is_type_floating(t) -> bool - - - Is the type a floating point type? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_func(): - - is_type_func(t) -> bool - - - See 'BT_FUNC' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_int(): - - is_type_int(bt) -> bool - - - Does the type_t specify one of the basic types in 'Basic type: - integer' ? - - - @param bt (C++: type_t) - - -ida_typeinf.is_type_int128(): - - is_type_int128(t) -> bool - - - Does the type specify a 128-bit value? (signed or unsigned, see 'Basic - type: integer' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_int16(): - - is_type_int16(t) -> bool - - - Does the type specify a 16-bit value? (signed or unsigned, see 'Basic - type: integer' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_int32(): - - is_type_int32(t) -> bool - - - Does the type specify a 32-bit value? (signed or unsigned, see 'Basic - type: integer' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_int64(): - - is_type_int64(t) -> bool - - - Does the type specify a 64-bit value? (signed or unsigned, see 'Basic - type: integer' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_integral(): - - is_type_integral(t) -> bool - - - Is the type an integral type (char/short/int/long/bool)? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_ldouble(): - - is_type_ldouble(t) -> bool - - - See 'BTF_LDOUBLE' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_paf(): - - is_type_paf(t) -> bool - - - Is the type a pointer, array, or function type? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_partial(): - - is_type_partial(t) -> bool - - - Identifies an unknown or void type with a known size (see 'Basic type: - unknown & void' ) - - - @param t (C++: type_t) - - -ida_typeinf.is_type_ptr(): - - is_type_ptr(t) -> bool - - - See 'BT_PTR' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_ptr_or_array(): - - is_type_ptr_or_array(t) -> bool - - - Is the type a pointer or array type? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_struct(): - - is_type_struct(t) -> bool - - - See 'BTF_STRUCT' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_struni(): - - is_type_struni(t) -> bool - - - Is the type a struct or union? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_sue(): - - is_type_sue(t) -> bool - - - Is the type a struct/union/enum? - - - @param t (C++: type_t) - - -ida_typeinf.is_type_tbyte(): - - is_type_tbyte(t) -> bool - - - See 'BTF_FLOAT' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_typedef(): - - is_type_typedef(t) -> bool - - - See 'BTF_TYPEDEF' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uchar(): - - is_type_uchar(t) -> bool - - - See 'BTF_UCHAR' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uint(): - - is_type_uint(t) -> bool - - - See 'BTF_UINT' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uint128(): - - is_type_uint128(t) -> bool - - - See 'BTF_UINT128' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uint16(): - - is_type_uint16(t) -> bool - - - See 'BTF_UINT16' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uint32(): - - is_type_uint32(t) -> bool - - - See 'BTF_UINT32' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_uint64(): - - is_type_uint64(t) -> bool - - - See 'BTF_UINT64' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_union(): - - is_type_union(t) -> bool - - - See 'BTF_UNION' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_unknown(): - - is_type_unknown(t) -> bool - - - See 'BT_UNKNOWN' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_void(): - - is_type_void(t) -> bool - - - See 'BTF_VOID' . - - - @param t (C++: type_t) - - -ida_typeinf.is_type_volatile(): - - is_type_volatile(t) -> bool - - - See 'BTM_VOLATILE' . - - - @param t (C++: type_t) - - -ida_typeinf.is_typeid_last(): - - is_typeid_last(t) -> bool - - - Is the type_t the last byte of type declaration? (there are no - additional bytes after a basic type, see '_BT_LAST_BASIC' ) - - @param t (C++: type_t) - - -ida_typeinf.is_user_cc(): - - is_user_cc(cm) -> bool - - - Does the calling convention specify argument locations explicitly? - - - @param cm (C++: cm_t) - - -ida_typeinf.is_vararg_cc(): - - is_vararg_cc(cm) -> bool - - - Does the calling convention use ellipsis? - - - @param cm (C++: cm_t) - - -ida_typeinf.lexcompare_tinfo(): - - lexcompare_tinfo(t1, t2, arg3) -> int - - -ida_typeinf.load_til(): - - load_til(name, tildir) -> til_t - - - Load til from a file. Failure to load base tils are reported into - 'errbuf'. They do not prevent loading of the main til. - - @param name: filename of the til. If it's an absolute path, tildir is - ignored. NB: the file extension is forced to .til (C++: - const char *) - @param tildir: directory where to load the til from. NULL means - default til subdirectories. (C++: const char *) - @return: pointer to resulting til, NULL if failed and error message is - in errbuf - - -ida_typeinf.load_til_header(): - - load_til_header(tildir, name) -> til_t - - - Get human-readable til description. - - - @param tildir (C++: const char *) - @param name (C++: const char *) - - -ida_typeinf.lower_type(): - - lower_type(til, tif, name=None, _helper=None) -> int - - - Lower type. Inspect the type and lower all function subtypes using - lower_func_type().We call the prototypes usually encountered in source - files "high level"They may have implicit arguments, array arguments, - big structure retvals, etcWe introduce explicit arguments (i.e. 'this' - pointer) and call the result"low level prototype". See 'FTI_HIGH' .In - order to improve heuristics for recognition of big structure - retvals,it is recommended to pass a helper that will be used to make - decisions.That helper will be used only for lowering 'tif', and not - for the childrentypes walked through by recursion. - - @param til (C++: til_t *) - @param tif (C++: tinfo_t *) - @param name (C++: const char *) - @param _helper (C++: lowertype_helper_t *) - - -class ida_typeinf.lowertype_helper_t(): - - Proxy of C++ lowertype_helper_t class - - -ida_typeinf.lowertype_helper_t.func_has_stkframe_hole(): - - func_has_stkframe_hole(self, candidate, candidate_data) -> bool - - -ida_typeinf.lowertype_helper_t.get_func_purged_bytes(): - - get_func_purged_bytes(self, candidate, candidate_data) -> int - - -ida_typeinf.new_til(): - - new_til(name, desc) -> til_t - - - Initialize a til. - - - @param name (C++: const char *) - @param desc (C++: const char *) - - -ida_typeinf.next_named_type(): - - next_named_type(ti, name, ntf_flags) -> char const * - - - Enumerate types. Returns mangled names. Never returns anonymous types. - To include it, enumerate types by ordinals. - - @param ti (C++: const til_t *) - @param name (C++: const char *) - @param ntf_flags (C++: int) - - -ida_typeinf.optimize_argloc(): - - optimize_argloc(vloc, size, gaps) -> bool - - - Verify and optimize scattered argloc into simple form. All new arglocs - must be processed by this function. - - @param vloc (C++: argloc_t *) - @param size (C++: int) - @param gaps (C++: const rangeset_t *) - - -ida_typeinf.pack_idcobj_to_bv(): - - pack_idcobj_to_bv(obj, tif, bytes, objoff, pio_flags=0) -> error_t - - - Write a typed idc object to the byte vector. Byte vector may be non- - empty, this function will append data to it - - @param obj (C++: const idc_value_t *) - @param tif (C++: const tinfo_t &) - @param bytes (C++: relobj_t *) - @param objoff (C++: void *) - @param pio_flags (C++: int) - - -ida_typeinf.pack_idcobj_to_idb(): - - pack_idcobj_to_idb(obj, tif, ea, pio_flags=0) -> error_t - - - Write a typed idc object to the database. - - - @param obj (C++: const idc_value_t *) - @param tif (C++: const tinfo_t &) - @param ea (C++: ea_t) - @param pio_flags (C++: int) - - -ida_typeinf.pack_object_to_bv(): - - pack_object_to_bv(py_obj, ti, py_type, py_fields, base_ea, pio_flags=0) -> PyObject * - - - Packs a typed object to a string - @param ti: Type info. 'None' can be passed. - @param tp: type string - @param fields: fields string (may be empty or None) - @param base_ea: base ea used to relocate the pointers in the packed object - @param pio_flags: flags used while unpacking - @return: - tuple(0, err_code) on failure - tuple(1, packed_buf) on success - - -ida_typeinf.pack_object_to_idb(): - - pack_object_to_idb(py_obj, ti, py_type, py_fields, ea, pio_flags=0) -> PyObject * - - - Write a typed object to the database. - Raises an exception if wrong parameters were passed or conversion fails - Returns the error_t returned by idaapi.pack_object_to_idb - @param ti: Type info. 'None' can be passed. - @param tp: type string - @param fields: fields string (may be empty or None) - @param ea: ea to be used while packing - @param pio_flags: flags used while unpacking - - -ida_typeinf.parse_decl(): - - parse_decl(tif, til, decl, flags) -> bool - - - Parse ONE declaration. If the input string contains more than one - declaration, the first complete type declaration ( 'PT_TYP' ) or the - last variable declaration ( 'PT_VAR' ) will be used.name & tif may be - empty after the call! - - @param tif: type info (C++: tinfo_t *) - @param til: type library to use. may be NULL (C++: til_t *) - @param decl: C declaration to parse (C++: const char *) - @param flags: combination of Type parsing flags bits (C++: int) - - -ida_typeinf.parse_decls(): - - parse_decls(til, input, printer, hti_flags) -> int - - - Parse many declarations and store them in a til. If there are any - errors, they will be printed using 'printer'. This function uses - default include path and predefined macros from the database settings. - It always uses the 'HTI_DCL' bit. - - @param til: type library to store the result (C++: til_t *) - @param input: input string or file name (see hti_flags) (C++: const - char *) - @param printer: function to output error messages (use msg or NULL or - your own callback) (C++: printer_t *) - @param hti_flags: combination of Type formatting flags (C++: int) - @return: number of errors, 0 means ok. - - -class ida_typeinf.predicate_t(): - - Proxy of C++ predicate_t class - - -ida_typeinf.predicate_t.should_display(): - - should_display(self, til, name, type, fields) -> bool - - -ida_typeinf.print_argloc(): - - print_argloc(vloc, size=0, vflags=0) -> size_t - - - Convert an argloc to human readable form. - - - @param vloc (C++: const argloc_t &) - @param size (C++: int) - @param vflags (C++: int) - - -ida_typeinf.print_decls(): - - print_decls(printer, til, py_ordinals, flags) -> int - - - Print types (and possibly their dependencies) in a format suitable for - use in a header file. This is the reverse 'parse_decls()' . - - @param printer: a handler for printing text (C++: text_sink_t &) - @param til: the type library holding the ordinals (C++: til_t *) - @param flags: flags for the algorithm. A combination of PDF_* - constants (C++: uint32) - - -ida_typeinf.print_tinfo(): - - print_tinfo(prefix, indent, cmtindent, flags, tif, name, cmt) -> bool - - -ida_typeinf.print_type(): - - print_type(ea, prtype_flags) -> bool - - - Get type declaration for the specified address. - - @param ea: address (C++: ea_t) - @param prtype_flags: combination of Type printing flags (C++: int) - @return: success - - -class ida_typeinf.ptr_type_data_t(): - - Proxy of C++ ptr_type_data_t class - - -ida_typeinf.ptr_type_data_t.based_ptr_size: - ptr_type_data_t_based_ptr_size_get(self) -> uchar - -ida_typeinf.ptr_type_data_t.closure: - ptr_type_data_t_closure_get(self) -> tinfo_t - -ida_typeinf.ptr_type_data_t.delta: - ptr_type_data_t_delta_get(self) -> int32 - -ida_typeinf.ptr_type_data_t.is_code_ptr(): - - is_code_ptr(self) -> bool - - -ida_typeinf.ptr_type_data_t.is_shifted(): - - is_shifted(self) -> bool - - -ida_typeinf.ptr_type_data_t.obj_type: - ptr_type_data_t_obj_type_get(self) -> tinfo_t - -ida_typeinf.ptr_type_data_t.parent: - ptr_type_data_t_parent_get(self) -> tinfo_t - -ida_typeinf.ptr_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.ptr_type_data_t.taptr_bits: - ptr_type_data_t_taptr_bits_get(self) -> uchar - -ida_typeinf.read_tinfo_bitfield_value(): - - read_tinfo_bitfield_value(typid, v, bitoff) -> uint64 - - -class ida_typeinf.reginfovec_t(): - - Proxy of C++ qvector<(reg_info_t)> class - - -ida_typeinf.reginfovec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.reginfovec_t.append(): - - push_back(self, x) - push_back(self) -> reg_info_t - - -ida_typeinf.reginfovec_t.at(): - - __getitem__(self, i) -> reg_info_t - - -ida_typeinf.reginfovec_t.begin(): - - begin(self) -> reg_info_t - begin(self) -> reg_info_t - - -ida_typeinf.reginfovec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.reginfovec_t.clear(): - - clear(self) - - -ida_typeinf.reginfovec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.reginfovec_t.end(): - - end(self) -> reg_info_t - end(self) -> reg_info_t - - -ida_typeinf.reginfovec_t.erase(): - - erase(self, it) -> reg_info_t - erase(self, first, last) -> reg_info_t - - -ida_typeinf.reginfovec_t.extract(): - - extract(self) -> reg_info_t - - -ida_typeinf.reginfovec_t.find(): - - find(self, x) -> reg_info_t - find(self, x) -> reg_info_t - - -ida_typeinf.reginfovec_t.grow(): - - grow(self, x=reg_info_t()) - - -ida_typeinf.reginfovec_t.has(): - - has(self, x) -> bool - - -ida_typeinf.reginfovec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.reginfovec_t.insert(): - - insert(self, it, x) -> reg_info_t - - -ida_typeinf.reginfovec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.reginfovec_t.push_back(): - - push_back(self, x) - push_back(self) -> reg_info_t - - -ida_typeinf.reginfovec_t.qclear(): - - qclear(self) - - -ida_typeinf.reginfovec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.reginfovec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.reginfovec_t.size(): - - size(self) -> size_t - - -ida_typeinf.reginfovec_t.swap(): - - swap(self, r) - - -ida_typeinf.reginfovec_t.truncate(): - - truncate(self) - - -class ida_typeinf.regobj_t(): - - Proxy of C++ regobj_t class - - -ida_typeinf.regobj_t.regidx: - regobj_t_regidx_get(self) -> int - -ida_typeinf.regobj_t.relocate: - regobj_t_relocate_get(self) -> int - -ida_typeinf.regobj_t.size(): - - size(self) -> size_t - - -ida_typeinf.regobj_t.value: - regobj_t_value_get(self) -> bytevec_t * - -class ida_typeinf.regobjs_t(): - - Proxy of C++ regobjs_t class - - -ida_typeinf.regobjs_t.at(): - - at(self, _idx) -> regobj_t - - -ida_typeinf.regobjs_t.begin(): - - begin(self) -> regobj_t - begin(self) -> regobj_t - - -ida_typeinf.regobjs_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.regobjs_t.clear(): - - clear(self) - - -ida_typeinf.regobjs_t.empty(): - - empty(self) -> bool - - -ida_typeinf.regobjs_t.end(): - - end(self) -> regobj_t - end(self) -> regobj_t - - -ida_typeinf.regobjs_t.erase(): - - erase(self, it) -> regobj_t - erase(self, first, last) -> regobj_t - - -ida_typeinf.regobjs_t.extract(): - - extract(self) -> regobj_t - - -ida_typeinf.regobjs_t.grow(): - - grow(self, x=regobj_t()) - - -ida_typeinf.regobjs_t.inject(): - - inject(self, s, len) - - -ida_typeinf.regobjs_t.insert(): - - insert(self, it, x) -> regobj_t - - -ida_typeinf.regobjs_t.pop_back(): - - pop_back(self) - - -ida_typeinf.regobjs_t.push_back(): - - push_back(self, x) - push_back(self) -> regobj_t - - -ida_typeinf.regobjs_t.qclear(): - - qclear(self) - - -ida_typeinf.regobjs_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.regobjs_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.regobjs_t.size(): - - size(self) -> size_t - - -ida_typeinf.regobjs_t.swap(): - - swap(self, r) - - -ida_typeinf.regobjs_t.truncate(): - - truncate(self) - - -class ida_typeinf.regobjvec_t(): - - Proxy of C++ qvector<(regobj_t)> class - - -ida_typeinf.regobjvec_t.at(): - - at(self, _idx) -> regobj_t - - -ida_typeinf.regobjvec_t.begin(): - - begin(self) -> regobj_t - begin(self) -> regobj_t - - -ida_typeinf.regobjvec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.regobjvec_t.clear(): - - clear(self) - - -ida_typeinf.regobjvec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.regobjvec_t.end(): - - end(self) -> regobj_t - end(self) -> regobj_t - - -ida_typeinf.regobjvec_t.erase(): - - erase(self, it) -> regobj_t - erase(self, first, last) -> regobj_t - - -ida_typeinf.regobjvec_t.extract(): - - extract(self) -> regobj_t - - -ida_typeinf.regobjvec_t.grow(): - - grow(self, x=regobj_t()) - - -ida_typeinf.regobjvec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.regobjvec_t.insert(): - - insert(self, it, x) -> regobj_t - - -ida_typeinf.regobjvec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.regobjvec_t.push_back(): - - push_back(self, x) - push_back(self) -> regobj_t - - -ida_typeinf.regobjvec_t.qclear(): - - qclear(self) - - -ida_typeinf.regobjvec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.regobjvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.regobjvec_t.size(): - - size(self) -> size_t - - -ida_typeinf.regobjvec_t.swap(): - - swap(self, r) - - -ida_typeinf.regobjvec_t.truncate(): - - truncate(self) - - -ida_typeinf.remove_abi_opts(): - - remove_abi_opts(abi_opts, user_level=False) -> bool - - -ida_typeinf.remove_pointer(): - - remove_pointer(tif) -> tinfo_t - - - 'BT_PTR' : If the current type is a pointer, return the pointed - object. If the current type is not a pointer, return the current type. - See also get_ptrarr_object() and get_pointed_object() - - @param tif (C++: const tinfo_t &) - - -ida_typeinf.remove_tinfo_pointer(): - - remove_tinfo_pointer(tif, name, til) -> PyObject * - - - Remove pointer of a type. (i.e. convert "char *" into "char"). - Optionally remove the "lp" (or similar) prefix of the input name. If - the input type is not a pointer, then fail. - - @param tif (C++: tinfo_t *) - @param til (C++: const til_t *) - - -ida_typeinf.replace_ordinal_typerefs(): - - replace_ordinal_typerefs(til, tif) -> int - - - Replace references to ordinal types by name references. This function - 'unties' the type from the current local type library and makes it - easier to export it. - - @param til: type library to use. may be NULL. (C++: til_t *) - @param tif: type to modify (in/out) (C++: tinfo_t *) - - -ida_typeinf.resolve_typedef(): - - resolve_typedef(til, type) -> type_t const * - - -class ida_typeinf.rrel_t(): - - Proxy of C++ rrel_t class - - -ida_typeinf.rrel_t.off: - rrel_t_off_get(self) -> sval_t - -ida_typeinf.rrel_t.reg: - rrel_t_reg_get(self) -> int - -ida_typeinf.save_tinfo(): - - save_tinfo(tif, til, ord, name, ntf_flags) -> tinfo_code_t - - -class ida_typeinf.scattered_aloc_t(): - - Proxy of C++ scattered_aloc_t class - - -ida_typeinf.scattered_aloc_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.scattered_aloc_t.at(): - - at(self, _idx) -> argpart_t - - -ida_typeinf.scattered_aloc_t.begin(): - - begin(self) -> argpart_t - begin(self) -> argpart_t - - -ida_typeinf.scattered_aloc_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.scattered_aloc_t.clear(): - - clear(self) - - -ida_typeinf.scattered_aloc_t.empty(): - - empty(self) -> bool - - -ida_typeinf.scattered_aloc_t.end(): - - end(self) -> argpart_t - end(self) -> argpart_t - - -ida_typeinf.scattered_aloc_t.erase(): - - erase(self, it) -> argpart_t - erase(self, first, last) -> argpart_t - - -ida_typeinf.scattered_aloc_t.extract(): - - extract(self) -> argpart_t - - -ida_typeinf.scattered_aloc_t.find(): - - find(self, x) -> argpart_t - find(self, x) -> argpart_t - - -ida_typeinf.scattered_aloc_t.grow(): - - grow(self, x=argpart_t()) - - -ida_typeinf.scattered_aloc_t.has(): - - has(self, x) -> bool - - -ida_typeinf.scattered_aloc_t.inject(): - - inject(self, s, len) - - -ida_typeinf.scattered_aloc_t.insert(): - - insert(self, it, x) -> argpart_t - - -ida_typeinf.scattered_aloc_t.pop_back(): - - pop_back(self) - - -ida_typeinf.scattered_aloc_t.push_back(): - - push_back(self, x) - push_back(self) -> argpart_t - - -ida_typeinf.scattered_aloc_t.qclear(): - - qclear(self) - - -ida_typeinf.scattered_aloc_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.scattered_aloc_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.scattered_aloc_t.size(): - - size(self) -> size_t - - -ida_typeinf.scattered_aloc_t.swap(): - - swap(self, r) - - -ida_typeinf.scattered_aloc_t.truncate(): - - truncate(self) - - -ida_typeinf.score_tinfo(): - - score_tinfo(tif) -> uint32 - - -ida_typeinf.serialize_tinfo(): - - serialize_tinfo(type, fields, fldcmts, tif, sudt_flags) -> bool - - -ida_typeinf.set_abi_name(): - - set_abi_name(abiname, user_level=False) -> bool - - - Set abi name (see 'Compiler IDs' ) - - - @param abiname (C++: const char *) - @param user_level (C++: bool) - - -ida_typeinf.set_c_header_path(): - - set_c_header_path(incdir) - - - Set include directory path the target compiler. - - - @param incdir (C++: const char *) - - -ida_typeinf.set_c_macros(): - - set_c_macros(macros) - - - Set predefined macros for the target compiler. - - - @param macros (C++: const char *) - - -ida_typeinf.set_compiler(): - - set_compiler(cc, flags, abiname=None) -> bool - - - Change current compiler. - - @param cc: compiler to switch to (C++: const compiler_info_t &) - @param flags: Set compiler flags (C++: int) - @param abiname: ABI name (C++: const char *) - @return: success - - -ida_typeinf.set_compiler_id(): - - set_compiler_id(id, abiname=None) -> bool - - - Set the compiler id (see 'Compiler IDs' ) - - - @param id (C++: comp_t) - @param abiname (C++: const char *) - - -ida_typeinf.set_compiler_string(): - - set_compiler_string(compstr, user_level) -> bool - - -ida_typeinf.set_numbered_type(): - - set_numbered_type(ti, ordinal, ntf_flags, name, type, fields=None, cmt=None, fldcmts=None, sclass=None) -> tinfo_code_t - - - Store a type in the til. 'name' may be NULL for anonymous types. The - specified ordinal must be free (no other type is using it). For - ntf_flags, only 'NTF_REPLACE' is consulted. - - @param ti (C++: til_t *) - @param ordinal (C++: uint32) - @param ntf_flags (C++: int) - @param name (C++: const char *) - @param type (C++: const type_t *) - @param fields (C++: const p_list *) - @param cmt (C++: const char *) - @param fldcmts (C++: const p_list *) - @param sclass (C++: const sclass_t *) - - -ida_typeinf.set_tinfo_attr(): - - set_tinfo_attr(tif, ta, may_overwrite) -> bool - - -ida_typeinf.set_tinfo_attrs(): - - set_tinfo_attrs(tif, ta) -> bool - - -ida_typeinf.set_tinfo_property(): - - set_tinfo_property(tif, sta_prop, x) -> size_t - - -ida_typeinf.set_type_alias(): - - set_type_alias(ti, src_ordinal, dst_ordinal) -> bool - - - Create a type alias. Redirects all references to source type to the - destination type. This is equivalent to instantaneous replacement all - reference to srctype by dsttype. - - @param ti (C++: til_t *) - @param src_ordinal (C++: uint32) - @param dst_ordinal (C++: uint32) - - -class ida_typeinf.simd_info_t(): - - Proxy of C++ simd_info_t class - - -ida_typeinf.simd_info_t.match_pattern(): - - match_pattern(self, pattern) -> bool - - -ida_typeinf.simd_info_t.memtype: - simd_info_t_memtype_get(self) -> type_t - -ida_typeinf.simd_info_t.name: - simd_info_t_name_get(self) -> char const * - -ida_typeinf.simd_info_t.size: - simd_info_t_size_get(self) -> uint16 - -ida_typeinf.simd_info_t.tif: - simd_info_t_tif_get(self) -> tinfo_t - -ida_typeinf.store_til(): - - store_til(ti, tildir, name) -> bool - - - Store til to a file. If the til contains garbage, it will be collected - before storing the til. Your plugin should call 'compact_til()' before - calling 'store_til()' . - - @param ti: type library to store (C++: til_t *) - @param tildir: directory where to store the til. NULL means current - directory. (C++: const char *) - @param name: filename of the til. If it's an absolute path, tildir is - ignored. NB: the file extension is forced to .til (C++: - const char *) - @return: success - - -class ida_typeinf.text_sink_t(): - - Proxy of C++ text_sink_t class - - -ida_typeinf.text_sink_t._print(): - - _print(self, str) -> int - - -class ida_typeinf.til_symbol_t(): - - Proxy of C++ til_symbol_t class - - -ida_typeinf.til_symbol_t.name: - til_symbol_t_name_get(self) -> char const * - -ida_typeinf.til_symbol_t.til: - til_symbol_t_til_get(self) -> til_t - -class ida_typeinf.til_t(): - - Proxy of C++ til_t class - - -ida_typeinf.til_t.base(): - - base(self, n) -> til_t - - -ida_typeinf.til_t.cc: - til_t_cc_get(self) -> compiler_info_t - -ida_typeinf.til_t.desc: - til_t_desc_get(self) -> char * - -ida_typeinf.til_t.flags: - til_t_flags_get(self) -> uint32 - -ida_typeinf.til_t.is_dirty(): - - is_dirty(self) -> bool - - -ida_typeinf.til_t.name: - til_t_name_get(self) -> char * - -ida_typeinf.til_t.nbases: - til_t_nbases_get(self) -> int - -ida_typeinf.til_t.nrefs: - til_t_nrefs_get(self) -> int - -ida_typeinf.til_t.nstreams: - til_t_nstreams_get(self) -> int - -ida_typeinf.til_t.set_dirty(): - - set_dirty(self) - - -ida_typeinf.til_t.streams: - til_t_streams_get(self) -> til_stream_t ** - -class ida_typeinf.tinfo_t(): - - Proxy of C++ tinfo_t class - - -ida_typeinf.tinfo_t._print(): - - _print(self, name=None, prtype_flags=0x0000, indent=0, cmtindent=0, prefix=None, cmt=None) -> bool - - -ida_typeinf.tinfo_t.append_covered(): - - append_covered(self, out, offset=0) -> bool - - -ida_typeinf.tinfo_t.calc_gaps(): - - calc_gaps(self, out) -> bool - - -ida_typeinf.tinfo_t.calc_purged_bytes(): - - calc_purged_bytes(self) -> int - - -ida_typeinf.tinfo_t.calc_score(): - - calc_score(self) -> uint32 - - -ida_typeinf.tinfo_t.calc_udt_aligns(): - - calc_udt_aligns(self, sudt_flags=0x0004) -> bool - - -ida_typeinf.tinfo_t.change_sign(): - - change_sign(self, sign) -> bool - - -ida_typeinf.tinfo_t.clear(): - - clear(self) - - -ida_typeinf.tinfo_t.clr_const(): - - clr_const(self) - - -ida_typeinf.tinfo_t.clr_const_volatile(): - - clr_const_volatile(self) - - -ida_typeinf.tinfo_t.clr_volatile(): - - clr_volatile(self) - - -ida_typeinf.tinfo_t.compare(): - - compare(self, r) -> int - - -ida_typeinf.tinfo_t.compare_with(): - - compare_with(self, r, tcflags=0) -> bool - - -ida_typeinf.tinfo_t.convert_array_to_ptr(): - - convert_array_to_ptr(self) -> bool - - -ida_typeinf.tinfo_t.copy(): - - copy(self) -> tinfo_t - - -ida_typeinf.tinfo_t.create_array(): - - create_array(self, p, decl_type=BT_ARRAY) -> bool - create_array(self, tif, nelems=0, base=0, decl_type=BT_ARRAY) -> bool - - -ida_typeinf.tinfo_t.create_bitfield(): - - create_bitfield(self, p, decl_type=BT_BITFIELD) -> bool - create_bitfield(self, nbytes, width, is_unsigned=False, decl_type=BT_BITFIELD) -> bool - - -ida_typeinf.tinfo_t.create_enum(): - - create_enum(self, p, decl_type=BTF_ENUM) -> bool - - -ida_typeinf.tinfo_t.create_forward_decl(): - - create_forward_decl(self, til, decl_type, name, ntf_flags=0) -> tinfo_code_t - - -ida_typeinf.tinfo_t.create_func(): - - create_func(self, p, decl_type=BT_FUNC) -> bool - - -ida_typeinf.tinfo_t.create_ptr(): - - create_ptr(self, p, decl_type=BT_PTR) -> bool - create_ptr(self, tif, bps=0, decl_type=BT_PTR) -> bool - - -ida_typeinf.tinfo_t.create_simple_type(): - - create_simple_type(self, decl_type) -> bool - - -ida_typeinf.tinfo_t.create_typedef(): - - create_typedef(self, p, decl_type=BTF_TYPEDEF, try_ordinal=True) -> bool - create_typedef(self, til, name, decl_type=BTF_TYPEDEF, try_ordinal=True) - create_typedef(self, til, ord, decl_type=BTF_TYPEDEF) - - -ida_typeinf.tinfo_t.create_udt(): - - create_udt(self, p, decl_type) -> bool - - -ida_typeinf.tinfo_t.del_attr(): - - del_attr(self, key, make_copy=True) -> bool - - -ida_typeinf.tinfo_t.del_attrs(): - - del_attrs(self) - - -ida_typeinf.tinfo_t.deserialize(): - - deserialize(self, til, ptype, pfields=None, pfldcmts=None) -> bool - deserialize(self, til, type, fields, cmts=None) -> bool - - -ida_typeinf.tinfo_t.dstr(): - - dstr(self) -> char const * - - -ida_typeinf.tinfo_t.empty(): - - empty(self) -> bool - - -ida_typeinf.tinfo_t.equals_to(): - - equals_to(self, r) -> bool - - -ida_typeinf.tinfo_t.find_udt_member(): - - find_udt_member(self, udm, strmem_flags) -> int - - -ida_typeinf.tinfo_t.get_array_details(): - - get_array_details(self, ai) -> bool - - -ida_typeinf.tinfo_t.get_array_element(): - - get_array_element(self) -> tinfo_t - - -ida_typeinf.tinfo_t.get_array_nelems(): - - get_array_nelems(self) -> int - - -ida_typeinf.tinfo_t.get_attr(): - - get_attr(self, key, all_attrs=True) -> PyObject * - - -ida_typeinf.tinfo_t.get_attrs(): - - get_attrs(self, tav, all_attrs=False) -> bool - - -ida_typeinf.tinfo_t.get_bitfield_details(): - - get_bitfield_details(self, bi) -> bool - - -ida_typeinf.tinfo_t.get_declalign(): - - get_declalign(self) -> uchar - - -ida_typeinf.tinfo_t.get_decltype(): - - get_decltype(self) -> type_t - - -ida_typeinf.tinfo_t.get_enum_base_type(): - - get_enum_base_type(self) -> type_t - - -ida_typeinf.tinfo_t.get_enum_details(): - - get_enum_details(self, ei) -> bool - - -ida_typeinf.tinfo_t.get_final_ordinal(): - - get_final_ordinal(self) -> uint32 - - -ida_typeinf.tinfo_t.get_final_type_name(): - - get_final_type_name(self) -> bool - - -ida_typeinf.tinfo_t.get_func_details(): - - get_func_details(self, fi, gtd=GTD_CALC_ARGLOCS) -> bool - - -ida_typeinf.tinfo_t.get_modifiers(): - - get_modifiers(self) -> type_t - - -ida_typeinf.tinfo_t.get_named_type(): - - get_named_type(self, til, name, decl_type=BTF_TYPEDEF, resolve=True, try_ordinal=True) -> bool - - -ida_typeinf.tinfo_t.get_nargs(): - - get_nargs(self) -> int - - -ida_typeinf.tinfo_t.get_next_type_name(): - - get_next_type_name(self) -> bool - - -ida_typeinf.tinfo_t.get_nth_arg(): - - get_nth_arg(self, n) -> tinfo_t - - -ida_typeinf.tinfo_t.get_numbered_type(): - - get_numbered_type(self, til, ordinal, decl_type=BTF_TYPEDEF, resolve=True) -> bool - - -ida_typeinf.tinfo_t.get_onemember_type(): - - get_onemember_type(self) -> tinfo_t - - -ida_typeinf.tinfo_t.get_ordinal(): - - get_ordinal(self) -> uint32 - - -ida_typeinf.tinfo_t.get_pointed_object(): - - get_pointed_object(self) -> tinfo_t - - -ida_typeinf.tinfo_t.get_ptr_details(): - - get_ptr_details(self, pi) -> bool - - -ida_typeinf.tinfo_t.get_ptrarr_object(): - - get_ptrarr_object(self) -> tinfo_t - - -ida_typeinf.tinfo_t.get_ptrarr_objsize(): - - get_ptrarr_objsize(self) -> int - - -ida_typeinf.tinfo_t.get_realtype(): - - get_realtype(self, full=False) -> type_t - - -ida_typeinf.tinfo_t.get_rettype(): - - get_rettype(self) -> tinfo_t - - -ida_typeinf.tinfo_t.get_sign(): - - get_sign(self) -> type_sign_t - - -ida_typeinf.tinfo_t.get_size(): - - get_size(self, p_effalign=None, gts_code=0) -> size_t - - -ida_typeinf.tinfo_t.get_stock(): - - get_stock(id) -> tinfo_t - - -ida_typeinf.tinfo_t.get_til(): - - get_til(self) -> til_t - - -ida_typeinf.tinfo_t.get_type_name(): - - get_type_name(self) -> bool - - -ida_typeinf.tinfo_t.get_udt_details(): - - get_udt_details(self, udt, gtd=GTD_CALC_LAYOUT) -> bool - - -ida_typeinf.tinfo_t.get_udt_nmembers(): - - get_udt_nmembers(self) -> int - - -ida_typeinf.tinfo_t.get_unpadded_size(): - - get_unpadded_size(self) -> size_t - - -ida_typeinf.tinfo_t.has_details(): - - has_details(self) -> bool - - -ida_typeinf.tinfo_t.has_vftable(): - - has_vftable(self) -> bool - - -ida_typeinf.tinfo_t.is_anonymous_udt(): - - is_anonymous_udt(self) -> bool - - -ida_typeinf.tinfo_t.is_arithmetic(): - - is_arithmetic(self) -> bool - - -ida_typeinf.tinfo_t.is_array(): - - is_array(self) -> bool - - -ida_typeinf.tinfo_t.is_bitfield(): - - is_bitfield(self) -> bool - - -ida_typeinf.tinfo_t.is_bool(): - - is_bool(self) -> bool - - -ida_typeinf.tinfo_t.is_castable_to(): - - is_castable_to(self, target) -> bool - - -ida_typeinf.tinfo_t.is_char(): - - is_char(self) -> bool - - -ida_typeinf.tinfo_t.is_complex(): - - is_complex(self) -> bool - - -ida_typeinf.tinfo_t.is_const(): - - is_const(self) -> bool - - -ida_typeinf.tinfo_t.is_correct(): - - is_correct(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_array(): - - is_decl_array(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_bitfield(): - - is_decl_bitfield(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_bool(): - - is_decl_bool(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_char(): - - is_decl_char(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_complex(): - - is_decl_complex(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_const(): - - is_decl_const(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_double(): - - is_decl_double(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_enum(): - - is_decl_enum(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_float(): - - is_decl_float(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_floating(): - - is_decl_floating(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_func(): - - is_decl_func(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_int(): - - is_decl_int(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_int128(): - - is_decl_int128(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_int16(): - - is_decl_int16(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_int32(): - - is_decl_int32(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_int64(): - - is_decl_int64(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_last(): - - is_decl_last(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_ldouble(): - - is_decl_ldouble(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_paf(): - - is_decl_paf(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_partial(): - - is_decl_partial(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_ptr(): - - is_decl_ptr(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_struct(): - - is_decl_struct(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_sue(): - - is_decl_sue(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_tbyte(): - - is_decl_tbyte(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_typedef(): - - is_decl_typedef(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uchar(): - - is_decl_uchar(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_udt(): - - is_decl_udt(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uint(): - - is_decl_uint(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uint128(): - - is_decl_uint128(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uint16(): - - is_decl_uint16(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uint32(): - - is_decl_uint32(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_uint64(): - - is_decl_uint64(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_union(): - - is_decl_union(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_unknown(): - - is_decl_unknown(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_void(): - - is_decl_void(self) -> bool - - -ida_typeinf.tinfo_t.is_decl_volatile(): - - is_decl_volatile(self) -> bool - - -ida_typeinf.tinfo_t.is_double(): - - is_double(self) -> bool - - -ida_typeinf.tinfo_t.is_empty_udt(): - - is_empty_udt(self) -> bool - - -ida_typeinf.tinfo_t.is_enum(): - - is_enum(self) -> bool - - -ida_typeinf.tinfo_t.is_ext_arithmetic(): - - is_ext_arithmetic(self) -> bool - - -ida_typeinf.tinfo_t.is_ext_integral(): - - is_ext_integral(self) -> bool - - -ida_typeinf.tinfo_t.is_float(): - - is_float(self) -> bool - - -ida_typeinf.tinfo_t.is_floating(): - - is_floating(self) -> bool - - -ida_typeinf.tinfo_t.is_forward_decl(): - - is_forward_decl(self) -> bool - - -ida_typeinf.tinfo_t.is_from_subtil(): - - is_from_subtil(self) -> bool - - -ida_typeinf.tinfo_t.is_func(): - - is_func(self) -> bool - - -ida_typeinf.tinfo_t.is_funcptr(): - - is_funcptr(self) -> bool - - -ida_typeinf.tinfo_t.is_high_func(): - - is_high_func(self) -> bool - - -ida_typeinf.tinfo_t.is_int(): - - is_int(self) -> bool - - -ida_typeinf.tinfo_t.is_int128(): - - is_int128(self) -> bool - - -ida_typeinf.tinfo_t.is_int16(): - - is_int16(self) -> bool - - -ida_typeinf.tinfo_t.is_int32(): - - is_int32(self) -> bool - - -ida_typeinf.tinfo_t.is_int64(): - - is_int64(self) -> bool - - -ida_typeinf.tinfo_t.is_integral(): - - is_integral(self) -> bool - - -ida_typeinf.tinfo_t.is_ldouble(): - - is_ldouble(self) -> bool - - -ida_typeinf.tinfo_t.is_manually_castable_to(): - - is_manually_castable_to(self, target) -> bool - - -ida_typeinf.tinfo_t.is_one_fpval(): - - is_one_fpval(self) -> bool - - -ida_typeinf.tinfo_t.is_paf(): - - is_paf(self) -> bool - - -ida_typeinf.tinfo_t.is_partial(): - - is_partial(self) -> bool - - -ida_typeinf.tinfo_t.is_ptr(): - - is_ptr(self) -> bool - - -ida_typeinf.tinfo_t.is_ptr_or_array(): - - is_ptr_or_array(self) -> bool - - -ida_typeinf.tinfo_t.is_purging_cc(): - - is_purging_cc(self) -> bool - - -ida_typeinf.tinfo_t.is_pvoid(): - - is_pvoid(self) -> bool - - -ida_typeinf.tinfo_t.is_scalar(): - - is_scalar(self) -> bool - - -ida_typeinf.tinfo_t.is_shifted_ptr(): - - is_shifted_ptr(self) -> bool - - -ida_typeinf.tinfo_t.is_signed(): - - is_signed(self) -> bool - - -ida_typeinf.tinfo_t.is_small_udt(): - - is_small_udt(self) -> bool - - -ida_typeinf.tinfo_t.is_sse_type(): - - is_sse_type(self) -> bool - - -ida_typeinf.tinfo_t.is_struct(): - - is_struct(self) -> bool - - -ida_typeinf.tinfo_t.is_sue(): - - is_sue(self) -> bool - - -ida_typeinf.tinfo_t.is_tbyte(): - - is_tbyte(self) -> bool - - -ida_typeinf.tinfo_t.is_typeref(): - - is_typeref(self) -> bool - - -ida_typeinf.tinfo_t.is_uchar(): - - is_uchar(self) -> bool - - -ida_typeinf.tinfo_t.is_udt(): - - is_udt(self) -> bool - - -ida_typeinf.tinfo_t.is_uint(): - - is_uint(self) -> bool - - -ida_typeinf.tinfo_t.is_uint128(): - - is_uint128(self) -> bool - - -ida_typeinf.tinfo_t.is_uint16(): - - is_uint16(self) -> bool - - -ida_typeinf.tinfo_t.is_uint32(): - - is_uint32(self) -> bool - - -ida_typeinf.tinfo_t.is_uint64(): - - is_uint64(self) -> bool - - -ida_typeinf.tinfo_t.is_union(): - - is_union(self) -> bool - - -ida_typeinf.tinfo_t.is_unknown(): - - is_unknown(self) -> bool - - -ida_typeinf.tinfo_t.is_unsigned(): - - is_unsigned(self) -> bool - - -ida_typeinf.tinfo_t.is_user_cc(): - - is_user_cc(self) -> bool - - -ida_typeinf.tinfo_t.is_vararg_cc(): - - is_vararg_cc(self) -> bool - - -ida_typeinf.tinfo_t.is_varstruct(): - - is_varstruct(self) -> bool - - -ida_typeinf.tinfo_t.is_vftable(): - - is_vftable(self) -> bool - - -ida_typeinf.tinfo_t.is_void(): - - is_void(self) -> bool - - -ida_typeinf.tinfo_t.is_volatile(): - - is_volatile(self) -> bool - - -ida_typeinf.tinfo_t.is_well_defined(): - - is_well_defined(self) -> bool - - -ida_typeinf.tinfo_t.present(): - - present(self) -> bool - - -ida_typeinf.tinfo_t.read_bitfield_value(): - - read_bitfield_value(self, v, bitoff) -> uint64 - - -ida_typeinf.tinfo_t.remove_ptr_or_array(): - - remove_ptr_or_array(self) -> bool - - -ida_typeinf.tinfo_t.requires_qualifier(): - - requires_qualifier(self, name, offset) -> bool - - -ida_typeinf.tinfo_t.serialize(): - - serialize(self, sudt_flags=SUDT_FAST|SUDT_TRUNC) -> PyObject * - - -ida_typeinf.tinfo_t.set_attr(): - - set_attr(self, ta, may_overwrite=True) -> bool - - -ida_typeinf.tinfo_t.set_attrs(): - - set_attrs(self, tav) -> bool - - -ida_typeinf.tinfo_t.set_const(): - - set_const(self) - - -ida_typeinf.tinfo_t.set_declalign(): - - set_declalign(self, declalign) -> bool - - -ida_typeinf.tinfo_t.set_modifiers(): - - set_modifiers(self, mod) - - -ida_typeinf.tinfo_t.set_named_type(): - - set_named_type(self, til, name, ntf_flags=0) -> tinfo_code_t - - -ida_typeinf.tinfo_t.set_numbered_type(): - - set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t - - -ida_typeinf.tinfo_t.set_symbol_type(): - - set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t - - -ida_typeinf.tinfo_t.set_volatile(): - - set_volatile(self) - - -ida_typeinf.tinfo_t.swap(): - - swap(self, r) - - -ida_typeinf.tinfo_t.write_bitfield_value(): - - write_bitfield_value(self, dst, v, bitoff) -> uint64 - - -ida_typeinf.tinfo_t_get_stock(): - - tinfo_t_get_stock(id) -> tinfo_t - - -class ida_typeinf.tinfo_visitor_t(): - - Proxy of C++ tinfo_visitor_t class - - -ida_typeinf.tinfo_visitor_t.apply_to(): - - apply_to(self, tif, out=None, name=None, cmt=None) -> int - - -ida_typeinf.tinfo_visitor_t.prune_now(): - - prune_now(self) - - -ida_typeinf.tinfo_visitor_t.state: - tinfo_visitor_t_state_get(self) -> int - -ida_typeinf.tinfo_visitor_t.visit_type(): - - visit_type(self, out, tif, name, cmt) -> int - - -class ida_typeinf.type_attr_t(): - - Proxy of C++ type_attr_t class - - -ida_typeinf.type_attr_t.key: - type_attr_t_key_get(self) -> qstring * - -ida_typeinf.type_attr_t.value: - type_attr_t_value_get(self) -> bytevec_t * - -class ida_typeinf.type_attrs_t(): - - Proxy of C++ qvector<(type_attr_t)> class - - -ida_typeinf.type_attrs_t.at(): - - at(self, _idx) -> type_attr_t - - -ida_typeinf.type_attrs_t.begin(): - - begin(self) -> type_attr_t - begin(self) -> type_attr_t - - -ida_typeinf.type_attrs_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.type_attrs_t.clear(): - - clear(self) - - -ida_typeinf.type_attrs_t.empty(): - - empty(self) -> bool - - -ida_typeinf.type_attrs_t.end(): - - end(self) -> type_attr_t - end(self) -> type_attr_t - - -ida_typeinf.type_attrs_t.erase(): - - erase(self, it) -> type_attr_t - erase(self, first, last) -> type_attr_t - - -ida_typeinf.type_attrs_t.extract(): - - extract(self) -> type_attr_t - - -ida_typeinf.type_attrs_t.grow(): - - grow(self, x=type_attr_t()) - - -ida_typeinf.type_attrs_t.inject(): - - inject(self, s, len) - - -ida_typeinf.type_attrs_t.insert(): - - insert(self, it, x) -> type_attr_t - - -ida_typeinf.type_attrs_t.pop_back(): - - pop_back(self) - - -ida_typeinf.type_attrs_t.push_back(): - - push_back(self, x) - push_back(self) -> type_attr_t - - -ida_typeinf.type_attrs_t.qclear(): - - qclear(self) - - -ida_typeinf.type_attrs_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.type_attrs_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.type_attrs_t.size(): - - size(self) -> size_t - - -ida_typeinf.type_attrs_t.swap(): - - swap(self, r) - - -ida_typeinf.type_attrs_t.truncate(): - - truncate(self) - - -class ida_typeinf.type_mods_t(): - - Proxy of C++ type_mods_t class - - -ida_typeinf.type_mods_t.clear(): - - clear(self) - - -ida_typeinf.type_mods_t.cmt: - type_mods_t_cmt_get(self) -> qstring * - -ida_typeinf.type_mods_t.flags: - type_mods_t_flags_get(self) -> int - -ida_typeinf.type_mods_t.has_cmt(): - - has_cmt(self) -> bool - - -ida_typeinf.type_mods_t.has_info(): - - has_info(self) -> bool - - -ida_typeinf.type_mods_t.has_name(): - - has_name(self) -> bool - - -ida_typeinf.type_mods_t.has_type(): - - has_type(self) -> bool - - -ida_typeinf.type_mods_t.name: - type_mods_t_name_get(self) -> qstring * - -ida_typeinf.type_mods_t.set_new_cmt(): - - set_new_cmt(self, c) - - -ida_typeinf.type_mods_t.set_new_name(): - - set_new_name(self, n) - - -ida_typeinf.type_mods_t.set_new_type(): - - set_new_type(self, t) - - -ida_typeinf.type_mods_t.type: - type_mods_t_type_get(self) -> tinfo_t - -class ida_typeinf.typedef_type_data_t(): - - Proxy of C++ typedef_type_data_t class - - -ida_typeinf.typedef_type_data_t.is_ordref: - typedef_type_data_t_is_ordref_get(self) -> bool - -ida_typeinf.typedef_type_data_t.resolve: - typedef_type_data_t_resolve_get(self) -> bool - -ida_typeinf.typedef_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.typedef_type_data_t.til: - typedef_type_data_t_til_get(self) -> til_t - -class ida_typeinf.udt_member_t(): - - Proxy of C++ udt_member_t class - - -ida_typeinf.udt_member_t.begin(): - - begin(self) -> uint64 - - -ida_typeinf.udt_member_t.clr_baseclass(): - - clr_baseclass(self) - - -ida_typeinf.udt_member_t.clr_unaligned(): - - clr_unaligned(self) - - -ida_typeinf.udt_member_t.clr_vftable(): - - clr_vftable(self) - - -ida_typeinf.udt_member_t.clr_virtbase(): - - clr_virtbase(self) - - -ida_typeinf.udt_member_t.cmt: - udt_member_t_cmt_get(self) -> qstring * - -ida_typeinf.udt_member_t.effalign: - udt_member_t_effalign_get(self) -> int - -ida_typeinf.udt_member_t.end(): - - end(self) -> uint64 - - -ida_typeinf.udt_member_t.fda: - udt_member_t_fda_get(self) -> uchar - -ida_typeinf.udt_member_t.is_anonymous_udm(): - - is_anonymous_udm(self) -> bool - - -ida_typeinf.udt_member_t.is_baseclass(): - - is_baseclass(self) -> bool - - -ida_typeinf.udt_member_t.is_bitfield(): - - is_bitfield(self) -> bool - - -ida_typeinf.udt_member_t.is_unaligned(): - - is_unaligned(self) -> bool - - -ida_typeinf.udt_member_t.is_vftable(): - - is_vftable(self) -> bool - - -ida_typeinf.udt_member_t.is_virtbase(): - - is_virtbase(self) -> bool - - -ida_typeinf.udt_member_t.is_zero_bitfield(): - - is_zero_bitfield(self) -> bool - - -ida_typeinf.udt_member_t.name: - udt_member_t_name_get(self) -> qstring * - -ida_typeinf.udt_member_t.offset: - udt_member_t_offset_get(self) -> uint64 - -ida_typeinf.udt_member_t.set_baseclass(): - - set_baseclass(self) - - -ida_typeinf.udt_member_t.set_unaligned(): - - set_unaligned(self) - - -ida_typeinf.udt_member_t.set_vftable(): - - set_vftable(self) - - -ida_typeinf.udt_member_t.set_virtbase(): - - set_virtbase(self) - - -ida_typeinf.udt_member_t.size: - udt_member_t_size_get(self) -> uint64 - -ida_typeinf.udt_member_t.swap(): - - swap(self, r) - - -ida_typeinf.udt_member_t.tafld_bits: - udt_member_t_tafld_bits_get(self) -> uint32 - -ida_typeinf.udt_member_t.type: - udt_member_t_type_get(self) -> tinfo_t - -class ida_typeinf.udt_type_data_t(): - - Proxy of C++ udt_type_data_t class - - -ida_typeinf.udt_type_data_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.udt_type_data_t.at(): - - at(self, _idx) -> udt_member_t - - -ida_typeinf.udt_type_data_t.begin(): - - begin(self) -> udt_member_t - begin(self) -> udt_member_t - - -ida_typeinf.udt_type_data_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.udt_type_data_t.clear(): - - clear(self) - - -ida_typeinf.udt_type_data_t.effalign: - udt_type_data_t_effalign_get(self) -> uint32 - -ida_typeinf.udt_type_data_t.empty(): - - empty(self) -> bool - - -ida_typeinf.udt_type_data_t.end(): - - end(self) -> udt_member_t - end(self) -> udt_member_t - - -ida_typeinf.udt_type_data_t.erase(): - - erase(self, it) -> udt_member_t - erase(self, first, last) -> udt_member_t - - -ida_typeinf.udt_type_data_t.extract(): - - extract(self) -> udt_member_t - - -ida_typeinf.udt_type_data_t.find(): - - find(self, x) -> udt_member_t - find(self, x) -> udt_member_t - - -ida_typeinf.udt_type_data_t.grow(): - - grow(self, x=udt_member_t()) - - -ida_typeinf.udt_type_data_t.has(): - - has(self, x) -> bool - - -ida_typeinf.udt_type_data_t.inject(): - - inject(self, s, len) - - -ida_typeinf.udt_type_data_t.insert(): - - insert(self, it, x) -> udt_member_t - - -ida_typeinf.udt_type_data_t.is_cppobj(): - - is_cppobj(self) -> bool - - -ida_typeinf.udt_type_data_t.is_last_baseclass(): - - is_last_baseclass(self, idx) -> bool - - -ida_typeinf.udt_type_data_t.is_msstruct(): - - is_msstruct(self) -> bool - - -ida_typeinf.udt_type_data_t.is_unaligned(): - - is_unaligned(self) -> bool - - -ida_typeinf.udt_type_data_t.is_union: - udt_type_data_t_is_union_get(self) -> bool - -ida_typeinf.udt_type_data_t.is_vftable(): - - is_vftable(self) -> bool - - -ida_typeinf.udt_type_data_t.pack: - udt_type_data_t_pack_get(self) -> uchar - -ida_typeinf.udt_type_data_t.pop_back(): - - pop_back(self) - - -ida_typeinf.udt_type_data_t.push_back(): - - push_back(self, x) - push_back(self) -> udt_member_t - - -ida_typeinf.udt_type_data_t.qclear(): - - qclear(self) - - -ida_typeinf.udt_type_data_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.udt_type_data_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.udt_type_data_t.sda: - udt_type_data_t_sda_get(self) -> uchar - -ida_typeinf.udt_type_data_t.size(): - - size(self) -> size_t - - -ida_typeinf.udt_type_data_t.swap(): - - swap(self, r) - - -ida_typeinf.udt_type_data_t.taudt_bits: - udt_type_data_t_taudt_bits_get(self) -> uint32 - -ida_typeinf.udt_type_data_t.total_size: - udt_type_data_t_total_size_get(self) -> size_t - -ida_typeinf.udt_type_data_t.truncate(): - - truncate(self) - - -ida_typeinf.udt_type_data_t.unpadded_size: - udt_type_data_t_unpadded_size_get(self) -> size_t - -class ida_typeinf.udtmembervec_t(): - - Proxy of C++ qvector<(udt_member_t)> class - - -ida_typeinf.udtmembervec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_typeinf.udtmembervec_t.at(): - - at(self, _idx) -> udt_member_t - - -ida_typeinf.udtmembervec_t.begin(): - - begin(self) -> udt_member_t - begin(self) -> udt_member_t - - -ida_typeinf.udtmembervec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.udtmembervec_t.clear(): - - clear(self) - - -ida_typeinf.udtmembervec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.udtmembervec_t.end(): - - end(self) -> udt_member_t - end(self) -> udt_member_t - - -ida_typeinf.udtmembervec_t.erase(): - - erase(self, it) -> udt_member_t - erase(self, first, last) -> udt_member_t - - -ida_typeinf.udtmembervec_t.extract(): - - extract(self) -> udt_member_t - - -ida_typeinf.udtmembervec_t.find(): - - find(self, x) -> udt_member_t - find(self, x) -> udt_member_t - - -ida_typeinf.udtmembervec_t.grow(): - - grow(self, x=udt_member_t()) - - -ida_typeinf.udtmembervec_t.has(): - - has(self, x) -> bool - - -ida_typeinf.udtmembervec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.udtmembervec_t.insert(): - - insert(self, it, x) -> udt_member_t - - -ida_typeinf.udtmembervec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.udtmembervec_t.push_back(): - - push_back(self, x) - push_back(self) -> udt_member_t - - -ida_typeinf.udtmembervec_t.qclear(): - - qclear(self) - - -ida_typeinf.udtmembervec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.udtmembervec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.udtmembervec_t.size(): - - size(self) -> size_t - - -ida_typeinf.udtmembervec_t.swap(): - - swap(self, r) - - -ida_typeinf.udtmembervec_t.truncate(): - - truncate(self) - - -ida_typeinf.unpack_idcobj_from_bv(): - - unpack_idcobj_from_bv(obj, tif, bytes, pio_flags=0) -> error_t - - - Read a typed idc object from the byte vector. - - - @param obj (C++: idc_value_t *) - @param tif (C++: const tinfo_t &) - @param bytes (C++: const bytevec_t &) - @param pio_flags (C++: int) - - -ida_typeinf.unpack_idcobj_from_idb(): - - unpack_idcobj_from_idb(obj, tif, ea, off0, pio_flags=0) -> error_t - - - Collection of register objects. - - Read a typed idc object from the database - - @param obj (C++: idc_value_t *) - @param tif (C++: const tinfo_t &) - @param ea (C++: ea_t) - @param off0 (C++: const bytevec_t *) - @param pio_flags (C++: int) - - -ida_typeinf.unpack_object_from_bv(): - - unpack_object_from_bv(ti, py_type, py_fields, py_bytes, pio_flags=0) -> PyObject * - - - Unpacks a buffer into an object. - Returns the error_t returned by idaapi.pack_object_to_idb - @param ti: Type info. 'None' can be passed. - @param tp: type string - @param fields: fields string (may be empty or None) - @param bytes: the bytes to unpack - @param pio_flags: flags used while unpacking - @return: - - tuple(0, err) on failure - - tuple(1, obj) on success - - -ida_typeinf.unpack_object_from_idb(): - - unpack_object_from_idb(ti, py_type, py_fields, ea, pio_flags=0) -> PyObject * - - -class ida_typeinf.valstr_t(): - - Proxy of C++ valstr_t class - - -ida_typeinf.valstr_t.info: - valstr_t_info_get(self) -> valinfo_t * - -ida_typeinf.valstr_t.length: - valstr_t_length_get(self) -> size_t - -ida_typeinf.valstr_t.members: - valstr_t_members_get(self) -> valstrs_t - -ida_typeinf.valstr_t.oneline: - valstr_t_oneline_get(self) -> qstring * - -ida_typeinf.valstr_t.props: - valstr_t_props_get(self) -> int - -class ida_typeinf.valstrs_t(): - - Proxy of C++ valstrs_t class - - -ida_typeinf.valstrs_t.at(): - - at(self, _idx) -> valstr_t - - -ida_typeinf.valstrs_t.begin(): - - begin(self) -> valstr_t - begin(self) -> valstr_t - - -ida_typeinf.valstrs_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.valstrs_t.clear(): - - clear(self) - - -ida_typeinf.valstrs_t.empty(): - - empty(self) -> bool - - -ida_typeinf.valstrs_t.end(): - - end(self) -> valstr_t - end(self) -> valstr_t - - -ida_typeinf.valstrs_t.erase(): - - erase(self, it) -> valstr_t - erase(self, first, last) -> valstr_t - - -ida_typeinf.valstrs_t.extract(): - - extract(self) -> valstr_t - - -ida_typeinf.valstrs_t.grow(): - - grow(self, x=valstr_t()) - - -ida_typeinf.valstrs_t.inject(): - - inject(self, s, len) - - -ida_typeinf.valstrs_t.insert(): - - insert(self, it, x) -> valstr_t - - -ida_typeinf.valstrs_t.pop_back(): - - pop_back(self) - - -ida_typeinf.valstrs_t.push_back(): - - push_back(self, x) - push_back(self) -> valstr_t - - -ida_typeinf.valstrs_t.qclear(): - - qclear(self) - - -ida_typeinf.valstrs_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.valstrs_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.valstrs_t.size(): - - size(self) -> size_t - - -ida_typeinf.valstrs_t.swap(): - - swap(self, r) - - -ida_typeinf.valstrs_t.truncate(): - - truncate(self) - - -class ida_typeinf.valstrvec_t(): - - Proxy of C++ qvector<(valstr_t)> class - - -ida_typeinf.valstrvec_t.at(): - - at(self, _idx) -> valstr_t - - -ida_typeinf.valstrvec_t.begin(): - - begin(self) -> valstr_t - begin(self) -> valstr_t - - -ida_typeinf.valstrvec_t.capacity(): - - capacity(self) -> size_t - - -ida_typeinf.valstrvec_t.clear(): - - clear(self) - - -ida_typeinf.valstrvec_t.empty(): - - empty(self) -> bool - - -ida_typeinf.valstrvec_t.end(): - - end(self) -> valstr_t - end(self) -> valstr_t - - -ida_typeinf.valstrvec_t.erase(): - - erase(self, it) -> valstr_t - erase(self, first, last) -> valstr_t - - -ida_typeinf.valstrvec_t.extract(): - - extract(self) -> valstr_t - - -ida_typeinf.valstrvec_t.grow(): - - grow(self, x=valstr_t()) - - -ida_typeinf.valstrvec_t.inject(): - - inject(self, s, len) - - -ida_typeinf.valstrvec_t.insert(): - - insert(self, it, x) -> valstr_t - - -ida_typeinf.valstrvec_t.pop_back(): - - pop_back(self) - - -ida_typeinf.valstrvec_t.push_back(): - - push_back(self, x) - push_back(self) -> valstr_t - - -ida_typeinf.valstrvec_t.qclear(): - - qclear(self) - - -ida_typeinf.valstrvec_t.reserve(): - - reserve(self, cnt) - - -ida_typeinf.valstrvec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_typeinf.valstrvec_t.size(): - - size(self) -> size_t - - -ida_typeinf.valstrvec_t.swap(): - - swap(self, r) - - -ida_typeinf.valstrvec_t.truncate(): - - truncate(self) - - -ida_typeinf.verify_argloc(): - - verify_argloc(vloc, size, gaps) -> int - - - Verify 'argloc_t' . - - @param vloc (C++: const argloc_t &) - @param size: total size of the variable (C++: int) - @param gaps: if not NULL, specifies gaps in structure definition. - these gaps should not map to any argloc, but everything - else must be covered (C++: const rangeset_t *) - @return: 0 if ok, otherwise an interr code. - - -ida_typeinf.verify_tinfo(): - - verify_tinfo(typid) -> int - - -ida_typeinf.visit_subtypes(): - - visit_subtypes(visitor, out, tif, name, cmt) -> int - - -ida_typeinf.write_tinfo_bitfield_value(): - - write_tinfo_bitfield_value(typid, dst, v, bitoff) -> uint64 - - - -=== ida_typeinf EPYDOC INJECTIONS === -ida_typeinf.ADDTIL_ABORTED -""" -til was not loaded (incompatible til rejected by user) -""" - -ida_typeinf.ADDTIL_COMP -""" -ok, but til is not compatible with the current compiler -""" - -ida_typeinf.ADDTIL_DEFAULT -""" -default behavior -""" - -ida_typeinf.ADDTIL_FAILED -""" -something bad, the warning is displayed -""" - -ida_typeinf.ADDTIL_INCOMP -""" -load incompatible tils -""" - -ida_typeinf.ADDTIL_OK -""" -ok, til is loaded -""" - -ida_typeinf.ADDTIL_SILENT -""" -do not ask any questions -""" - -ida_typeinf.CC_ALLOW_ARGPERM -""" -disregard argument order? -""" - -ida_typeinf.CC_ALLOW_REGHOLES -""" -allow holes in register argument list? -""" - -ida_typeinf.CC_CDECL_OK -""" -can use __cdecl calling convention? -""" - -ida_typeinf.CC_HAS_ELLIPSIS -""" -function has a variable list of arguments? -""" - -ida_typeinf.FAH_BYTE -""" -function argument attribute header byte -""" - -ida_typeinf.FAI_ARRAY -""" -was initially an array see "__org_typedef" or "__org_arrdim" type -attributes to determine the original type -""" - -ida_typeinf.FAI_HIDDEN -""" -hidden argument -""" - -ida_typeinf.FAI_RETPTR -""" -pointer to return value. implies hidden -""" - -ida_typeinf.FAI_STRUCT -""" -was initially a structure -""" - -ida_typeinf.FTI_ALL -""" -all defined bits -""" - -ida_typeinf.FTI_ARGLOCS -""" -(stkargs and retloc too) - -info about argument locations has been calculated -""" - -ida_typeinf.FTI_CALLTYPE -""" -mask for FTI_*CALL -""" - -ida_typeinf.FTI_DEFCALL -""" -default call -""" - -ida_typeinf.FTI_FARCALL -""" -far call -""" - -ida_typeinf.FTI_HIGH -""" -high level prototype (with possibly hidden args) -""" - -ida_typeinf.FTI_INTCALL -""" -interrupt call -""" - -ida_typeinf.FTI_NEARCALL -""" -near call -""" - -ida_typeinf.FTI_NORET -""" -noreturn -""" - -ida_typeinf.FTI_PURE -""" -__pure -""" - -ida_typeinf.FTI_SPOILED -""" -information about spoiled registers is present -""" - -ida_typeinf.FTI_STATIC -""" -static -""" - -ida_typeinf.FTI_VIRTUAL -""" -virtual -""" - -ida_typeinf.GUESS_FUNC_FAILED -""" -couldn't guess the function type -""" - -ida_typeinf.GUESS_FUNC_OK -""" -ok, some non-trivial information is gathered -""" - -ida_typeinf.GUESS_FUNC_TRIVIAL -""" -the function type doesn't have interesting info -""" - -ida_typeinf.HTI_CPP -""" -C++ mode (not implemented) -""" - -ida_typeinf.HTI_DCL -""" -don't complain about redeclarations -""" - -ida_typeinf.HTI_EXT -""" -debug: print external representation of types -""" - -ida_typeinf.HTI_FIL -""" -otherwise "input" contains a C declaration - -"input" is file name, -""" - -ida_typeinf.HTI_HIGH -""" -(with hidden args, etc) - -assume high level prototypes -""" - -ida_typeinf.HTI_INT -""" -debug: print internal representation of types -""" - -ida_typeinf.HTI_LEX -""" -debug: print tokens -""" - -ida_typeinf.HTI_LOWER -""" -lower the function prototypes -""" - -ida_typeinf.HTI_MAC -""" -define macros from the base tils -""" - -ida_typeinf.HTI_NDC -""" -don't decorate names -""" - -ida_typeinf.HTI_NER -""" -ignore all errors but display them -""" - -ida_typeinf.HTI_NWR -""" -no warning messages -""" - -ida_typeinf.HTI_PAK -""" -explicit structure pack value (#pragma pack) -""" - -ida_typeinf.HTI_PAK1 -""" -#pragma pack(1) -""" - -ida_typeinf.HTI_PAK16 -""" -#pragma pack(16) -""" - -ida_typeinf.HTI_PAK2 -""" -#pragma pack(2) -""" - -ida_typeinf.HTI_PAK4 -""" -#pragma pack(4) -""" - -ida_typeinf.HTI_PAK8 -""" -#pragma pack(8) -""" - -ida_typeinf.HTI_PAKDEF -""" -default pack value -""" - -ida_typeinf.HTI_PAK_SHIFT -""" -shift for 'HTI_PAK' . This field should be used if you want to -remember an explicit pack value for each structure/union type. See -'HTI_PAK' ... definitions -""" - -ida_typeinf.HTI_RAWARGS -""" -leave argument names unchanged (do not remove underscores) -""" - -ida_typeinf.HTI_TST -""" -test mode: discard the result -""" - -ida_typeinf.HTI_UNP -""" -debug: check the result by unpacking it -""" - -ida_typeinf.IMPTYPE_LOCAL -""" -the type is local, the struct/enum won't be marked as til type. there -is no need to specify this bit if til==idati, the kernel will set it -automatically -""" - -ida_typeinf.IMPTYPE_OVERRIDE -""" -override existing type -""" - -ida_typeinf.IMPTYPE_VERBOSE -""" -more verbose output (dialog boxes may appear) -""" - -ida_typeinf.MAX_FUNC_ARGS -""" -max number of function arguments -""" - -ida_typeinf.NTF_64BIT -""" -value is 64bit -""" - -ida_typeinf.NTF_CHKSYNC -""" -(set_numbered_type, set_named_type) - -check that synchronization to IDB passed OK -""" - -ida_typeinf.NTF_FIXNAME -""" -(set_named_type, set_numbered_type only) - -force-validate the name of the type when setting -""" - -ida_typeinf.NTF_IDBENC -""" -the name is given in the IDB encoding; non-ASCII bytes will be decoded -accordingly (set_named_type, set_numbered_type only) -""" - -ida_typeinf.NTF_NOBASE -""" -don't inspect base tils (for get_named_type) -""" - -ida_typeinf.NTF_NOCUR -""" -don't inspect current til file (for get_named_type) -""" - -ida_typeinf.NTF_REPLACE -""" -replace original type (for set_named_type) -""" - -ida_typeinf.NTF_SYMM -""" -only one of 'NTF_TYPE' and 'NTF_SYMU' , 'NTF_SYMM' can be used - -symbol, name is mangled ('_func') -""" - -ida_typeinf.NTF_SYMU -""" -symbol, name is unmangled ('func') -""" - -ida_typeinf.NTF_TYPE -""" -type name -""" - -ida_typeinf.NTF_UMANGLED -""" -name is unmangled (don't use this flag) -""" - -ida_typeinf.PCN_CHR -""" -character -""" - -ida_typeinf.PCN_DEC -""" -decimal -""" - -ida_typeinf.PCN_DECSEXT -""" -automatically extend sign of signed decimal numbers -""" - -ida_typeinf.PCN_HEX -""" -hexadecimal -""" - -ida_typeinf.PCN_LZHEX -""" -print leading zeroes for hexdecimal number -""" - -ida_typeinf.PCN_NEGSIGN -""" -print negated value (-N) for negative numbers -""" - -ida_typeinf.PCN_OCT -""" -octal -""" - -ida_typeinf.PCN_RADIX -""" -number base to use -""" - -ida_typeinf.PCN_UNSIGNED -""" -add 'u' suffix -""" - -ida_typeinf.PDF_DEF_BASE -""" -Include base types: __int8, __int16, etc.. -""" - -ida_typeinf.PDF_DEF_FWD -""" -Allow forward declarations. -""" - -ida_typeinf.PDF_HEADER_CMT -""" -Prepend output with a descriptive comment. -""" - -ida_typeinf.PDF_INCL_DEPS -""" -Include all type dependencies. -""" - -ida_typeinf.PIO_IGNORE_PTRS -""" -do not follow pointers -""" - -ida_typeinf.PIO_NOATTR_FAIL -""" -missing attributes are not ok -""" - -ida_typeinf.PRALOC_STKOFF -""" -print stack offsets -""" - -ida_typeinf.PRALOC_VERIFY -""" -interr if illegal argloc -""" - -ida_typeinf.PRTYPE_1LINE -""" -print to one line -""" - -ida_typeinf.PRTYPE_CPP -""" -use c++ name (only for 'print_type()' ) -""" - -ida_typeinf.PRTYPE_DEF -""" - 'tinfo_t' : print definition, if available -""" - -ida_typeinf.PRTYPE_MULTI -""" -print to many lines -""" - -ida_typeinf.PRTYPE_NOARGS -""" - 'tinfo_t' : do not print function argument names -""" - -ida_typeinf.PRTYPE_NOARRS -""" - 'tinfo_t' : print arguments with 'FAI_ARRAY' as pointers -""" - -ida_typeinf.PRTYPE_NORES -""" - 'tinfo_t' : never resolve types (meaningful with PRTYPE_DEF) -""" - -ida_typeinf.PRTYPE_PRAGMA -""" -print pragmas for alignment -""" - -ida_typeinf.PRTYPE_RESTORE -""" - 'tinfo_t' : print restored types for 'FAI_ARRAY' and 'FAI_STRUCT' -""" - -ida_typeinf.PRTYPE_SEMI -""" -append ; to the end -""" - -ida_typeinf.PRTYPE_TYPE -""" -print type declaration (not variable declaration) -""" - -ida_typeinf.PT_HIGH -""" -(with hidden args, etc) - -assume high level prototypes -""" - -ida_typeinf.PT_LOWER -""" -lower the function prototypes -""" - -ida_typeinf.PT_NDC -""" -don't decorate names -""" - -ida_typeinf.PT_PACKMASK -""" -mask for pack alignment values -""" - -ida_typeinf.PT_RAWARGS -""" -leave argument names unchanged (do not remove underscores) -""" - -ida_typeinf.PT_REPLACE -""" -replace the old type (used in idc) -""" - -ida_typeinf.PT_SIL -""" -silent, no messages -""" - -ida_typeinf.PT_TYP -""" -return declared type information -""" - -ida_typeinf.PT_VAR -""" -return declared object information -""" - -ida_typeinf.RESERVED_BYTE -""" -multifunctional purpose -""" - -ida_typeinf.SETCOMP_BY_USER -""" -invoked by user, cannot be replaced by module/loader -""" - -ida_typeinf.SETCOMP_ONLY_ABI -""" -ignore cc field complete, use only abiname -""" - -ida_typeinf.SETCOMP_ONLY_ID -""" -cc has only 'id' field the rest will be set to defaults corresponding -to the program bitness -""" - -ida_typeinf.SETCOMP_OVERRIDE -""" -may override old compiler info -""" - -ida_typeinf.STRMEM_ANON -""" -can be combined with 'STRMEM_NAME' : look inside anonymous members -too. -""" - -ida_typeinf.STRMEM_AUTO -""" -get member by offset if struct, or get member by index if union - nb: -union: index is stored in the udm->offset field!nb: struct: offset is -in bytes (not in bits)! -""" - -ida_typeinf.STRMEM_CASTABLE_TO -""" -can be combined with 'STRMEM_TYPE' : member type must be castable to -the specified type -""" - -ida_typeinf.STRMEM_INDEX -""" -get member by number- in: udm->offset - is a member number -""" - -ida_typeinf.STRMEM_MAXS -""" -get biggest member by size. -""" - -ida_typeinf.STRMEM_MINS -""" -get smallest member by size. -""" - -ida_typeinf.STRMEM_NAME -""" -get member by name- in: udm->name - the desired member name. -""" - -ida_typeinf.STRMEM_OFFSET -""" -get member by offset- in: udm->offset - is a member offset in bits -""" - -ida_typeinf.STRMEM_SIZE -""" -get member by size.- in: udm->size - the desired member size. -""" - -ida_typeinf.STRMEM_SKIP_EMPTY -""" -can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' skip empty -members (i.e. having zero size) only last empty member can be returned -""" - -ida_typeinf.STRMEM_TYPE -""" -get member by type. - in: udm->type - the desired member type. member -types are compared with tinfo_t::equals_to() -""" - -ida_typeinf.STRMEM_VFTABLE -""" -can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' get vftable -instead of the base class -""" - -ida_typeinf.SUDT_ALIGN -""" -to match the offsets and size info - -recalculate field alignments, struct packing, etc -""" - -ida_typeinf.SUDT_CONST -""" -only for serialize_udt: make type const -""" - -ida_typeinf.SUDT_FAST -""" -serialize without verifying offsets and alignments -""" - -ida_typeinf.SUDT_GAPS -""" -allow to fill gaps with additional members (_BYTE[]) -""" - -ida_typeinf.SUDT_SORT -""" -fields are not sorted by offset, sort them first -""" - -ida_typeinf.SUDT_TRUNC -""" -serialize: truncate useless strings from fields, fldcmts -""" - -ida_typeinf.SUDT_UNEX -""" -references to nonexistent member types are acceptable in this case it -is better to set the corresponding 'udt_member_t::fda' field to the -type alignment. if this field is not set, ida will try to guess the -alignment. -""" - -ida_typeinf.SUDT_VOLATILE -""" -only for serialize_udt: make type volatile -""" - -ida_typeinf.TAENUM_64BIT -""" -enum: store 64-bit values -""" - -ida_typeinf.TAENUM_SIGNED -""" -enum: signed -""" - -ida_typeinf.TAENUM_UNSIGNED -""" -enum: unsigned -""" - -ida_typeinf.TAFLD_BASECLASS -""" -field: do not include but inherit from the current field -""" - -ida_typeinf.TAFLD_UNALIGNED -""" -field: unaligned field -""" - -ida_typeinf.TAFLD_VFTABLE -""" -field: ptr to virtual function table -""" - -ida_typeinf.TAFLD_VIRTBASE -""" -field: virtual base (not supported yet) -""" - -ida_typeinf.TAH_ALL -""" -all defined bits -""" - -ida_typeinf.TAH_BYTE -""" -type attribute header byte -""" - -ida_typeinf.TAH_HASATTRS -""" -has extended attributes -""" - -ida_typeinf.TAPTR_PTR32 -""" -ptr: __ptr32 -""" - -ida_typeinf.TAPTR_PTR64 -""" -ptr: __ptr64 -""" - -ida_typeinf.TAPTR_RESTRICT -""" -ptr: __restrict -""" - -ida_typeinf.TAPTR_SHIFTED -""" -ptr: __shifted(parent_struct, delta) -""" - -ida_typeinf.TAUDT_CPPOBJ -""" -struct: a c++ object, not simple pod type -""" - -ida_typeinf.TAUDT_MSSTRUCT -""" -struct: gcc msstruct attribute -""" - -ida_typeinf.TAUDT_UNALIGNED -""" -struct: unaligned struct -""" - -ida_typeinf.TAUDT_VFTABLE -""" -struct: is virtual function table -""" - -ida_typeinf.TA_FORMAT -""" -info about the 'format' argument 3 times pack_dd: 'format_functype_t' -, argument number of 'format', argument number of '...' -""" - -ida_typeinf.TA_ORG_ARRDIM -""" -the original array dimension (pack_dd) -""" - -ida_typeinf.TA_ORG_TYPEDEF -""" -the original typedef name (simple string) -""" - -ida_typeinf.TCMP_ANYBASE -""" -accept any base class when casting -""" - -ida_typeinf.TCMP_AUTOCAST -""" -can t1 be cast into t2 automatically? -""" - -ida_typeinf.TCMP_CALL -""" -can t1 be called with t2 type? -""" - -ida_typeinf.TCMP_DECL -""" -compare declarations without resolving them -""" - -ida_typeinf.TCMP_DELPTR -""" -remove pointer from types before comparing -""" - -ida_typeinf.TCMP_EQUAL -""" -are types equal? -""" - -ida_typeinf.TCMP_IGNMODS -""" -ignore const/volatile modifiers -""" - -ida_typeinf.TCMP_MANCAST -""" -can t1 be cast into t2 manually? -""" - -ida_typeinf.TCMP_SKIPTHIS -""" -skip the first function argument in comparison -""" - -ida_typeinf.TIL_ADD_ALREADY -""" -the base til was already added -""" - -ida_typeinf.TIL_ADD_FAILED -""" -see errbuf -""" - -ida_typeinf.TIL_ADD_OK -""" -some tils were added -""" - -ida_typeinf.TIL_ALI -""" -type aliases are present (this bit is used only on the disk) -""" - -ida_typeinf.TIL_ESI -""" -extended sizeof info (short, long, longlong) -""" - -ida_typeinf.TIL_MAC -""" -til has macro table -""" - -ida_typeinf.TIL_MOD -""" -til has been modified, should be saved -""" - -ida_typeinf.TIL_ORD -""" -type ordinal numbers are present -""" - -ida_typeinf.TIL_SLD -""" -sizeof(long double) -""" - -ida_typeinf.TIL_STM -""" -til has extra streams -""" - -ida_typeinf.TIL_UNI -""" -universal til for any compiler -""" - -ida_typeinf.TIL_ZIP -""" -pack buckets using zip -""" - -ida_typeinf.TINFO_DEFINITE -""" -this is a definite type -""" - -ida_typeinf.TINFO_DELAYFUNC -""" -if type is a function and no function exists at ea, schedule its -creation and argument renaming to auto-analysis otherwise try to -create it immediately -""" - -ida_typeinf.TINFO_GUESSED -""" -this is a guessed type -""" - -ida_typeinf.TINFO_STRICT -""" -never convert given type to another one before applying -""" - -ida_typeinf.TVIS_CMT -""" -new comment is present -""" - -ida_typeinf.TVIS_NAME -""" -new name is present -""" - -ida_typeinf.TVIS_TYPE -""" -new type info is present -""" - -ida_typeinf.TVST_DEF -""" -visit type definition (meaningful for typerefs) -""" - -ida_typeinf.TVST_PRUNE -""" -don't visit children of current type -""" - -ida_typeinf.VALSTR_OPEN -""" -printed opening curly brace '{' -""" -=== ida_typeinf EPYDOC INJECTIONS END === -ida_ua.calc_dataseg(): - - calc_dataseg(insn, n=-1, rgnum=-1) -> ea_t - - - Get data segment for the instruction operand. 'opnum' and 'rgnum' are - meaningful only if the processor has segment registers. - - @param insn (C++: const insn_t &) - @param n (C++: int) - @param rgnum (C++: int) - - -ida_ua.can_decode(): - - can_decode(ea) -> bool - - - Can the bytes at address 'ea' be decoded as instruction? - - @param ea: linear address (C++: ea_t) - @return: whether or not the contents at that address could be a valid - instruction - - -ida_ua.construct_macro(): - - construct_macro(insn, enable, build_macro) -> bool - - - See ua.hpp's construct_macro(). - - -ida_ua.create_insn(): - - create_insn(ea, out=None) -> int - - - Create an instruction at the specified address. This function checks - if an instruction is present at the specified address and will try to - create one if there is none. It will fail if there is a data item or - other items hindering the creation of the new instruction. This - function will also fill the 'out' structure. - - @param ea: linear address (C++: ea_t) - @param out: the resulting instruction (C++: insn_t *) - @return: the length of the instruction or 0 - - -ida_ua.create_outctx(): - - create_outctx(ea, F=0, suspop=0) -> outctx_base_t - - - Create a new output context. To delete it, just use "delete pctx" - - @param ea (C++: ea_t) - @param F (C++: flags_t) - @param suspop (C++: int) - - -ida_ua.decode_insn(): - - decode_insn(out, ea) -> int - - - Analyze the specified address and fill 'out'. This function does not - modify the database. It just tries to interpret the specified address - as an instruction and fills the 'out' structure. - - @param out: the resulting instruction (C++: insn_t *) - @param ea: linear address (C++: ea_t) - @return: the length of the (possible) instruction or 0 - - -ida_ua.decode_preceding_insn(): - - decode_preceding_insn(out, ea) -> PyObject * - - - Decodes the preceding instruction. Please check ua.hpp / decode_preceding_insn() - @param ea: current ea - @param out: instruction storage - @return: tuple(preceeding_ea or BADADDR, farref = Boolean) - - -ida_ua.decode_prev_insn(): - - decode_prev_insn(out, ea) -> ea_t - - - Decode previous instruction if it exists, fill 'out'. - - @param out: the resulting instruction (C++: insn_t *) - @param ea: the address to decode the previous instruction from (C++: - ea_t) - @return: the previous instruction address ( BADADDR -no such insn) - - -ida_ua.get_dtype_by_size(): - - get_dtype_by_size(size) -> int - - - Get 'op_t::dtype' from size. - - - @param size (C++: asize_t) - - -ida_ua.get_dtype_flag(): - - get_dtype_flag(dtype) -> flags_t - - - Get flags for 'op_t::dtype' field. - - - @param dtype (C++: op_dtype_t) - - -ida_ua.get_dtype_size(): - - get_dtype_size(dtype) -> size_t - - - Get size of opt_::dtype field. - - - @param dtype (C++: op_dtype_t) - - -ida_ua.get_immvals(): - - get_immvals(ea, n, F=0) -> PyObject * - - - Get immediate values at the specified address. This function decodes - instruction at the specified address or inspects the data item. It - finds immediate values and copies them to 'out'. This function will - store the original value of the operands in 'out', unless the last - bits of 'F' are "...0 11111111", in which case the transformed values - (as needed for printing) will be stored instead. - - @param ea: address to analyze (C++: ea_t) - @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands - (C++: int) - @param F: flags for the specified address (C++: flags_t) - @return: number of immediate values (0..2* UA_MAXOP ) - - -ida_ua.get_lookback(): - - get_lookback() -> int - - - Number of instructions to look back. This variable is not used by the - kernel. Its value may be specified in ida.cfg: LOOKBACK = . - IDP may use it as you like it. (TMS module uses it) - - -ida_ua.get_printable_immvals(): - - get_printable_immvals(ea, n, F=0) -> PyObject * - - - Get immediate ready-to-print values at the specified address - - @param ea: address to analyze (C++: ea_t) - @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands - (C++: int) - @param F: flags for the specified address (C++: flags_t) - @return: number of immediate values (0..2* UA_MAXOP ) - - -ida_ua.guess_table_address(): - - guess_table_address(insn) -> ea_t - - - Guess the jump table address (ibm pc specific) - - - @param insn (C++: const insn_t &) - - -ida_ua.guess_table_size(): - - guess_table_size(insn, jump_table) -> asize_t - - - Guess the jump table size. - - - @param insn (C++: const insn_t &) - @param jump_table (C++: ea_t) - - -ida_ua.insn_add_cref(): - - insn_add_cref(insn, to, opoff, type) - - -ida_ua.insn_add_dref(): - - insn_add_dref(insn, to, opoff, type) - - -ida_ua.insn_add_off_drefs(): - - insn_add_off_drefs(insn, x, type, outf) -> ea_t - - -ida_ua.insn_create_stkvar(): - - insn_create_stkvar(insn, x, v, flags) -> bool - - -class ida_ua.insn_t(): - - Proxy of C++ insn_t class - - -ida_ua.insn_t.add_cref(): - - add_cref(self, to, opoff, type) - - -ida_ua.insn_t.add_dref(): - - add_dref(self, to, opoff, type) - - -ida_ua.insn_t.add_off_drefs(): - - add_off_drefs(self, x, type, outf) -> ea_t - - -ida_ua.insn_t.assign(): - - assign(self, other) - - -ida_ua.insn_t.auxpref: - - __get_auxpref__(self) -> uint16 - - -ida_ua.insn_t.create_op_data(): - - create_op_data(self, ea_, opoff, dtype) -> bool - create_op_data(self, ea_, op) -> bool - - -ida_ua.insn_t.create_stkvar(): - - create_stkvar(self, x, v, flags_) -> bool - - -ida_ua.insn_t.cs: - insn_t_cs_get(self) -> ea_t - -ida_ua.insn_t.ea: - insn_t_ea_get(self) -> ea_t - -ida_ua.insn_t.flags: - insn_t_flags_get(self) -> int16 - -ida_ua.insn_t.get_canon_feature(): - - get_canon_feature(self) -> uint32 - - -ida_ua.insn_t.get_canon_mnem(): - - get_canon_mnem(self) -> char const * - - -ida_ua.insn_t.get_next_byte(): - - get_next_byte(self) -> uint8 - - -ida_ua.insn_t.get_next_dword(): - - get_next_dword(self) -> uint32 - - -ida_ua.insn_t.get_next_qword(): - - get_next_qword(self) -> uint64 - - -ida_ua.insn_t.get_next_word(): - - get_next_word(self) -> uint16 - - -ida_ua.insn_t.insnpref: - insn_t_insnpref_get(self) -> char - -ida_ua.insn_t.ip: - insn_t_ip_get(self) -> ea_t - -ida_ua.insn_t.is_64bit(): - - is_64bit(self) -> bool - - -ida_ua.insn_t.is_canon_insn(): - - is_canon_insn(self) -> bool - - -ida_ua.insn_t.is_macro(): - - is_macro(self) -> bool - - -ida_ua.insn_t.itype: - insn_t_itype_get(self) -> uint16 - -ida_ua.insn_t.ops: - - __get_ops__(self) -> operands_array - - -ida_ua.insn_t.segpref: - insn_t_segpref_get(self) -> char - -ida_ua.insn_t.size: - insn_t_size_get(self) -> uint16 - -ida_ua.insn_t__from_ptrval__(): - - insn_t__from_ptrval__(ptrval) -> insn_t - - -ida_ua.map_code_ea(): - - map_code_ea(insn, addr, opnum) -> ea_t - map_code_ea(insn, op) -> ea_t - - - Map a code address. This function takes into account the segment - translations. - - @param insn: the current instruction (C++: const insn_t &) - @param addr: the referenced address to map (C++: ea_t) - @param opnum: operand number (C++: int) - - -ida_ua.map_data_ea(): - - map_data_ea(insn, addr, opnum=-1) -> ea_t - map_data_ea(insn, op) -> ea_t - - - Map a data address. - - @param insn: the current instruction (C++: const insn_t &) - @param addr: the referenced address to map (C++: ea_t) - @param opnum: operand number (C++: int) - - -ida_ua.map_ea(): - - map_ea(insn, op, iscode) -> ea_t - map_ea(insn, addr, opnum, iscode) -> ea_t - - -class ida_ua.op_t(): - - Proxy of C++ op_t class - - -ida_ua.op_t.addr: - - __get_addr__(self) -> ea_t - - -ida_ua.op_t.assign(): - - assign(self, other) - - -ida_ua.op_t.clr_shown(): - - clr_shown(self) - - -ida_ua.op_t.dtype: - op_t_dtype_get(self) -> op_dtype_t - -ida_ua.op_t.flags: - op_t_flags_get(self) -> uchar - -ida_ua.op_t.has_reg(): - - Checks if the operand accesses the given processor register - - -ida_ua.op_t.is_imm(): - - is_imm(self, v) -> bool - - -ida_ua.op_t.is_reg(): - - is_reg(self, r) -> bool - - -ida_ua.op_t.n: - op_t_n_get(self) -> uchar - -ida_ua.op_t.offb: - op_t_offb_get(self) -> char - -ida_ua.op_t.offo: - op_t_offo_get(self) -> char - -ida_ua.op_t.phrase: - - __get_reg_phrase__(self) -> uint16 - - -ida_ua.op_t.reg: - - __get_reg_phrase__(self) -> uint16 - - -ida_ua.op_t.set_shown(): - - set_shown(self) - - -ida_ua.op_t.shown(): - - shown(self) -> bool - - -ida_ua.op_t.specflag1: - op_t_specflag1_get(self) -> char - -ida_ua.op_t.specflag2: - op_t_specflag2_get(self) -> char - -ida_ua.op_t.specflag3: - op_t_specflag3_get(self) -> char - -ida_ua.op_t.specflag4: - op_t_specflag4_get(self) -> char - -ida_ua.op_t.specval: - - __get_specval__(self) -> ea_t - - -ida_ua.op_t.type: - op_t_type_get(self) -> optype_t - -ida_ua.op_t.value: - - __get_value__(self) -> ea_t - - -ida_ua.op_t__from_ptrval__(): - - op_t__from_ptrval__(ptrval) -> op_t - - -class ida_ua.operands_array(): - - Proxy of C++ wrapped_array_t<(op_t,8)> class - - -ida_ua.operands_array.data: - operands_array_data_get(self) -> op_t (&)[8] - -class ida_ua.outctx_base_t(): - - Proxy of C++ outctx_base_t class - - -ida_ua.outctx_base_t.close_comment(): - - close_comment(self) - - -ida_ua.outctx_base_t.clr_gen_label(): - - clr_gen_label(self) - - -ida_ua.outctx_base_t.default_lnnum: - outctx_base_t_default_lnnum_get(self) -> int - -ida_ua.outctx_base_t.display_voids(): - - display_voids(self) -> bool - - -ida_ua.outctx_base_t.flush_buf(): - - flush_buf(self, buf, indent=-1) -> bool - - -ida_ua.outctx_base_t.flush_outbuf(): - - flush_outbuf(self, indent=-1) -> bool - - -ida_ua.outctx_base_t.forbid_annotations(): - - forbid_annotations(self) -> int - - -ida_ua.outctx_base_t.force_code(): - - force_code(self) -> bool - - -ida_ua.outctx_base_t.gen_block_cmt(): - - gen_block_cmt(self, cmt, color) -> bool - - -ida_ua.outctx_base_t.gen_border_line(): - - gen_border_line(self, solid=False) -> bool - - -ida_ua.outctx_base_t.gen_cmt_line(): - - gen_cmt_line(self, format) -> bool - - -ida_ua.outctx_base_t.gen_collapsed_line(): - - gen_collapsed_line(self, format) -> bool - - -ida_ua.outctx_base_t.gen_empty_line(): - - gen_empty_line(self) -> bool - - -ida_ua.outctx_base_t.gen_empty_line_without_annotations(): - - gen_empty_line_without_annotations(self) - - -ida_ua.outctx_base_t.gen_printf(): - - gen_printf(self, indent, format) -> bool - - -ida_ua.outctx_base_t.gen_xref_lines(): - - gen_xref_lines(self) -> bool - - -ida_ua.outctx_base_t.get_stkvar(): - - get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * - - -ida_ua.outctx_base_t.init_lines_array(): - - init_lines_array(self, answers, maxsize) - - -ida_ua.outctx_base_t.insn_ea: - outctx_base_t_insn_ea_get(self) -> ea_t - -ida_ua.outctx_base_t.multiline(): - - multiline(self) -> bool - - -ida_ua.outctx_base_t.only_main_line(): - - only_main_line(self) -> bool - - -ida_ua.outctx_base_t.out_addr_tag(): - - out_addr_tag(self, ea) - - -ida_ua.outctx_base_t.out_btoa(): - - out_btoa(self, Word, radix=0) - - -ida_ua.outctx_base_t.out_char(): - - out_char(self, c) - - -ida_ua.outctx_base_t.out_chars(): - - out_chars(self, c, n) - - -ida_ua.outctx_base_t.out_colored_register_line(): - - out_colored_register_line(self, str) - - -ida_ua.outctx_base_t.out_keyword(): - - out_keyword(self, str) - - -ida_ua.outctx_base_t.out_line(): - - out_line(self, str, color=0) - - -ida_ua.outctx_base_t.out_long(): - - out_long(self, v, radix) - - -ida_ua.outctx_base_t.out_name_expr(): - - out_name_expr(self, x, ea, off=BADADDR) -> bool - - -ida_ua.outctx_base_t.out_printf(): - - out_printf(self, format) - - -ida_ua.outctx_base_t.out_register(): - - out_register(self, str) - - -ida_ua.outctx_base_t.out_spaces(): - - out_spaces(self, len) - - -ida_ua.outctx_base_t.out_symbol(): - - out_symbol(self, c) - - -ida_ua.outctx_base_t.out_tagoff(): - - out_tagoff(self, tag) - - -ida_ua.outctx_base_t.out_tagon(): - - out_tagon(self, tag) - - -ida_ua.outctx_base_t.out_value(): - - out_value(self, x, outf=0) -> flags_t - - -ida_ua.outctx_base_t.outbuf: - outctx_base_t_outbuf_get(self) -> qstring * - -ida_ua.outctx_base_t.print_label_now(): - - print_label_now(self) -> bool - - -ida_ua.outctx_base_t.restore_ctxflags(): - - restore_ctxflags(self, saved_flags) - - -ida_ua.outctx_base_t.retrieve_cmt(): - - retrieve_cmt(self) -> ssize_t - - -ida_ua.outctx_base_t.retrieve_name(): - - retrieve_name(self, arg2, arg3) -> ssize_t - - -ida_ua.outctx_base_t.set_comment_addr(): - - set_comment_addr(self, ea) - - -ida_ua.outctx_base_t.set_dlbind_opnd(): - - set_dlbind_opnd(self) - - -ida_ua.outctx_base_t.set_gen_cmt(): - - set_gen_cmt(self, on=True) - - -ida_ua.outctx_base_t.set_gen_demangled_label(): - - set_gen_demangled_label(self) - - -ida_ua.outctx_base_t.set_gen_label(): - - set_gen_label(self) - - -ida_ua.outctx_base_t.set_gen_xrefs(): - - set_gen_xrefs(self, on=True) - - -ida_ua.outctx_base_t.setup_outctx(): - - setup_outctx(self, prefix, makeline_flags) - - -ida_ua.outctx_base_t.stack_view(): - - stack_view(self) -> bool - - -ida_ua.outctx_base_t.term_outctx(): - - term_outctx(self, prefix=None) -> int - - -ida_ua.outctx_base_t__from_ptrval__(): - - outctx_base_t__from_ptrval__(ptrval) -> outctx_base_t - - -class ida_ua.outctx_t(): - - Proxy of C++ outctx_t class - - -ida_ua.outctx_t.bin_ea: - outctx_t_bin_ea_get(self) -> ea_t - -ida_ua.outctx_t.bin_state: - outctx_t_bin_state_get(self) -> char - -ida_ua.outctx_t.bin_width: - outctx_t_bin_width_get(self) -> int - -ida_ua.outctx_t.close_comment(): - - close_comment(self) - - -ida_ua.outctx_t.clr_gen_label(): - - clr_gen_label(self) - - -ida_ua.outctx_t.curlabel: - outctx_t_curlabel_get(self) -> qstring * - -ida_ua.outctx_t.default_lnnum: - outctx_base_t_default_lnnum_get(self) -> int - -ida_ua.outctx_t.display_voids(): - - display_voids(self) -> bool - - -ida_ua.outctx_t.flush_buf(): - - flush_buf(self, buf, indent=-1) -> bool - - -ida_ua.outctx_t.flush_outbuf(): - - flush_outbuf(self, indent=-1) -> bool - - -ida_ua.outctx_t.forbid_annotations(): - - forbid_annotations(self) -> int - - -ida_ua.outctx_t.force_code(): - - force_code(self) -> bool - - -ida_ua.outctx_t.gen_block_cmt(): - - gen_block_cmt(self, cmt, color) -> bool - - -ida_ua.outctx_t.gen_border_line(): - - gen_border_line(self, solid=False) -> bool - - -ida_ua.outctx_t.gen_cmt_line(): - - gen_cmt_line(self, format) -> bool - - -ida_ua.outctx_t.gen_collapsed_line(): - - gen_collapsed_line(self, format) -> bool - - -ida_ua.outctx_t.gen_empty_line(): - - gen_empty_line(self) -> bool - - -ida_ua.outctx_t.gen_empty_line_without_annotations(): - - gen_empty_line_without_annotations(self) - - -ida_ua.outctx_t.gen_func_footer(): - - gen_func_footer(self, pfn) - - -ida_ua.outctx_t.gen_func_header(): - - gen_func_header(self, pfn) - - -ida_ua.outctx_t.gen_header(): - - gen_header(self, flags=((1 << 0)|(1 << 1)), proc_name=None, proc_flavour=None) - - -ida_ua.outctx_t.gen_header_extra(): - - gen_header_extra(self) - - -ida_ua.outctx_t.gen_printf(): - - gen_printf(self, indent, format) -> bool - - -ida_ua.outctx_t.gen_xref_lines(): - - gen_xref_lines(self) -> bool - - -ida_ua.outctx_t.get_stkvar(): - - get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * - - -ida_ua.outctx_t.gl_bpsize: - outctx_t_gl_bpsize_get(self) -> int - -ida_ua.outctx_t.init_lines_array(): - - init_lines_array(self, answers, maxsize) - - -ida_ua.outctx_t.insn: - outctx_t_insn_get(self) -> insn_t - -ida_ua.outctx_t.insn_ea: - outctx_base_t_insn_ea_get(self) -> ea_t - -ida_ua.outctx_t.multiline(): - - multiline(self) -> bool - - -ida_ua.outctx_t.only_main_line(): - - only_main_line(self) -> bool - - -ida_ua.outctx_t.out_addr_tag(): - - out_addr_tag(self, ea) - - -ida_ua.outctx_t.out_btoa(): - - out_btoa(self, Word, radix=0) - - -ida_ua.outctx_t.out_char(): - - out_char(self, c) - - -ida_ua.outctx_t.out_chars(): - - out_chars(self, c, n) - - -ida_ua.outctx_t.out_colored_register_line(): - - out_colored_register_line(self, str) - - -ida_ua.outctx_t.out_custom_mnem(): - - out_custom_mnem(self, mnem, width=8, postfix=None) - - -ida_ua.outctx_t.out_data(): - - out_data(self, analyze_only) - - -ida_ua.outctx_t.out_immchar_cmts(): - - out_immchar_cmts(self) - - -ida_ua.outctx_t.out_keyword(): - - out_keyword(self, str) - - -ida_ua.outctx_t.out_line(): - - out_line(self, str, color=0) - - -ida_ua.outctx_t.out_long(): - - out_long(self, v, radix) - - -ida_ua.outctx_t.out_mnem(): - - out_mnem(self, width=8, postfix=None) - - -ida_ua.outctx_t.out_mnemonic(): - - out_mnemonic(self) - - -ida_ua.outctx_t.out_name_expr(): - - out_name_expr(self, x, ea, off=BADADDR) -> bool - - -ida_ua.outctx_t.out_one_operand(): - - out_one_operand(self, n) -> bool - - -ida_ua.outctx_t.out_printf(): - - out_printf(self, format) - - -ida_ua.outctx_t.out_register(): - - out_register(self, str) - - -ida_ua.outctx_t.out_spaces(): - - out_spaces(self, len) - - -ida_ua.outctx_t.out_specea(): - - out_specea(self, segtype) -> bool - - -ida_ua.outctx_t.out_symbol(): - - out_symbol(self, c) - - -ida_ua.outctx_t.out_tagoff(): - - out_tagoff(self, tag) - - -ida_ua.outctx_t.out_tagon(): - - out_tagon(self, tag) - - -ida_ua.outctx_t.out_value(): - - out_value(self, x, outf=0) -> flags_t - - -ida_ua.outctx_t.outbuf: - outctx_base_t_outbuf_get(self) -> qstring * - -ida_ua.outctx_t.print_label_now(): - - print_label_now(self) -> bool - - -ida_ua.outctx_t.restore_ctxflags(): - - restore_ctxflags(self, saved_flags) - - -ida_ua.outctx_t.retrieve_cmt(): - - retrieve_cmt(self) -> ssize_t - - -ida_ua.outctx_t.retrieve_name(): - - retrieve_name(self, arg2, arg3) -> ssize_t - - -ida_ua.outctx_t.set_bin_state(): - - set_bin_state(self, value) - - -ida_ua.outctx_t.set_comment_addr(): - - set_comment_addr(self, ea) - - -ida_ua.outctx_t.set_dlbind_opnd(): - - set_dlbind_opnd(self) - - -ida_ua.outctx_t.set_gen_cmt(): - - set_gen_cmt(self, on=True) - - -ida_ua.outctx_t.set_gen_demangled_label(): - - set_gen_demangled_label(self) - - -ida_ua.outctx_t.set_gen_label(): - - set_gen_label(self) - - -ida_ua.outctx_t.set_gen_xrefs(): - - set_gen_xrefs(self, on=True) - - -ida_ua.outctx_t.setup_outctx(): - - setup_outctx(self, prefix, flags) - - -ida_ua.outctx_t.stack_view(): - - stack_view(self) -> bool - - -ida_ua.outctx_t.term_outctx(): - - term_outctx(self, prefix=None) -> int - - -ida_ua.outctx_t.wif: - outctx_t_wif_get(self) -> printop_t - -ida_ua.outctx_t__from_ptrval__(): - - outctx_t__from_ptrval__(ptrval) -> outctx_t - - -ida_ua.print_insn_mnem(): - - print_insn_mnem(ea) -> bool - - - Print instruction mnemonics. - - @param ea: linear address of the instruction (C++: ea_t) - @return: success - - -ida_ua.print_operand(): - - print_operand(ea, n, getn_flags=0, newtype=None) -> bool - - - Generate text representation for operand #n. This function will - generate the text representation of the specified operand (includes - color codes.) - - @param ea: the item address (instruction or data) (C++: ea_t) - @param n: operand number (0,1,2...). meaningful only for instructions - (C++: int) - @param getn_flags (C++: int) - @param newtype: if specified, print the operand using the specified - type (C++: struct printop_t *) - @return: success - - -ida_ua.ua_mnem(): - - print_insn_mnem(ea) -> bool - - - Print instruction mnemonics. - - @param ea: linear address of the instruction (C++: ea_t) - @return: success - - - -=== ida_ua EPYDOC INJECTIONS === -ida_ua.FCBF_CONT -""" -don't stop on decoding, or any other kind of error -""" - -ida_ua.FCBF_DELIM -""" -add the 'ash'-specified delimiters around the generated data. Note: if -those are not defined and the INFFL_ALLASM is not set, -'format_charlit()' will return an error -""" - -ida_ua.FCBF_ERR_REPL -""" -of a hex representation of the problematic byte - -in case of an error, use a CP_REPLCHAR instead -""" - -ida_ua.FCBF_FF_LIT -""" -in case of codepoints == 0xFF, use it as-is (i.e., LATIN SMALL LETTER -Y WITH DIAERESIS) If both this, and FCBF_REPL are specified, this will -take precedence -""" - -ida_ua.INSN_64BIT -""" -belongs to 64bit segment? -""" - -ida_ua.INSN_MACRO -""" -macro instruction -""" - -ida_ua.INSN_MODMAC -""" -may modify the database to make room for the macro insn -""" - -ida_ua.OF_NO_BASE_DISP -""" -base displacement doesn't exist. meaningful only for 'o_displ' type. -if set, base displacement ( 'op_t::addr' ) doesn't exist. -""" - -ida_ua.OF_NUMBER -""" -the operand can be converted to a number only -""" - -ida_ua.OF_OUTER_DISP -""" -outer displacement exists. meaningful only for 'o_displ' type. if set, -outer displacement ( 'op_t::value' ) exists. -""" - -ida_ua.OF_SHOW -""" -should the operand be displayed? -""" - -ida_ua.OOFS_IFSIGN -""" -output sign if needed -""" - -ida_ua.OOFS_NEEDSIGN -""" -always out sign (+-) -""" - -ida_ua.OOFS_NOSIGN -""" -don't output sign, forbid the user to change the sign -""" - -ida_ua.OOFW_16 -""" -16 bit width -""" - -ida_ua.OOFW_24 -""" -24 bit width -""" - -ida_ua.OOFW_32 -""" -32 bit width -""" - -ida_ua.OOFW_64 -""" -64 bit width -""" - -ida_ua.OOFW_8 -""" -8 bit width -""" - -ida_ua.OOFW_IMM -""" -take from x.dtype -""" - -ida_ua.OOF_ADDR -""" -output x.addr, otherwise x.value -""" - -ida_ua.OOF_ANYSERIAL -""" -if enum: select first available serial -""" - -ida_ua.OOF_NOBNOT -""" -prohibit use of binary not -""" - -ida_ua.OOF_NUMBER -""" -always as a number -""" - -ida_ua.OOF_OUTER -""" -output outer operand -""" - -ida_ua.OOF_SIGNED -""" -output as signed if < 0 -""" - -ida_ua.OOF_SIGNMASK -""" -sign symbol (+/-) output -""" - -ida_ua.OOF_SPACES -""" -currently works only for floating point numbers - -do not suppress leading spaces -""" - -ida_ua.OOF_WIDTHMASK -""" -width of value in bits -""" - -ida_ua.OOF_ZSTROFF -""" -meaningful only if is_stroff(uFlag) append a struct field name if the -field offset is zero? if 'AFL_ZSTROFF' is set, then this flag is -ignored. -""" - -ida_ua.PACK_FORM_DEF -""" -(! 'o_reg' + 'dt_packreal' ) - -packed factor defined. -""" - -ida_ua.dt_bitfild -""" -bit field (mc680x0) -""" - -ida_ua.dt_byte -""" -8 bit -""" - -ida_ua.dt_byte16 -""" -128 bit -""" - -ida_ua.dt_byte32 -""" -256 bit -""" - -ida_ua.dt_byte64 -""" -512 bit -""" - -ida_ua.dt_code -""" -ptr to code (not used?) -""" - -ida_ua.dt_double -""" -8 byte -""" - -ida_ua.dt_dword -""" -32 bit -""" - -ida_ua.dt_float -""" -4 byte -""" - -ida_ua.dt_fword -""" -48 bit -""" - -ida_ua.dt_ldbl -""" -long double (which may be different from tbyte) -""" - -ida_ua.dt_packreal -""" -packed real format for mc68040 -""" - -ida_ua.dt_qword -""" -64 bit -""" - -ida_ua.dt_string -""" -pointer to asciiz string -""" - -ida_ua.dt_tbyte -""" -variable size (\\ph{tbyte_size}) -""" - -ida_ua.dt_unicode -""" -pointer to unicode string -""" - -ida_ua.dt_void -""" -none -""" - -ida_ua.dt_word -""" -16 bit -""" -=== ida_ua EPYDOC INJECTIONS END === -ida_xref.add_cref(): - - add_cref(frm, to, type) -> bool - - - Create a code cross-reference. - - @param to: linear address of referenced instruction (C++: ea_t) - @param type: cross-reference type (C++: cref_t) - @return: success - - -ida_xref.add_dref(): - - add_dref(frm, to, type) -> bool - - - Create a data cross-reference. - - @param to: linear address of referenced data (C++: ea_t) - @param type: cross-reference type (C++: dref_t) - @return: success (may fail if user-defined xref exists from->to) - - -ida_xref.calc_switch_cases(): - - calc_switch_cases(ea, si) -> cases_and_targets_t - - - Get information about a switch's cases. - - The returned information can be used as follows: - - for idx in xrange(len(results.cases)): - cur_case = results.cases[idx] - for cidx in xrange(len(cur_case)): - print "case: %d" % cur_case[cidx] - print " goto 0x%x" % results.targets[idx] - - @param ea: address of the 'indirect jump' instruction - @param si: switch information - - @return: a structure with 2 members: 'cases', and 'targets'. - - -class ida_xref.cases_and_targets_t(): - - Proxy of C++ cases_and_targets_t class - - -ida_xref.cases_and_targets_t.cases: - cases_and_targets_t_cases_get(self) -> casevec_t - -ida_xref.cases_and_targets_t.targets: - cases_and_targets_t_targets_get(self) -> eavec_t * - -class ida_xref.casevec_t(): - - Proxy of C++ qvector<(qvector<(sval_t)>)> class - - -ida_xref.casevec_t.add_unique(): - - add_unique(self, x) -> bool - - -ida_xref.casevec_t.append(): - - push_back(self, x) - push_back(self) -> qvector< signed-ea-like-numeric-type > & - - -ida_xref.casevec_t.at(): - - __getitem__(self, i) -> qvector< signed-ea-like-numeric-type > const & - - -ida_xref.casevec_t.begin(): - - begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator - - -ida_xref.casevec_t.capacity(): - - capacity(self) -> size_t - - -ida_xref.casevec_t.clear(): - - clear(self) - - -ida_xref.casevec_t.empty(): - - empty(self) -> bool - - -ida_xref.casevec_t.end(): - - end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator - - -ida_xref.casevec_t.erase(): - - erase(self, it) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - erase(self, first, last) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - -ida_xref.casevec_t.extract(): - - extract(self) -> qvector< signed-ea-like-numeric-type > * - - -ida_xref.casevec_t.find(): - - find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator - - -ida_xref.casevec_t.grow(): - - grow(self, x=qvector< signed-ea-like-numeric-type >()) - - -ida_xref.casevec_t.has(): - - has(self, x) -> bool - - -ida_xref.casevec_t.inject(): - - inject(self, s, len) - - -ida_xref.casevec_t.insert(): - - insert(self, it, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - -ida_xref.casevec_t.pop_back(): - - pop_back(self) - - -ida_xref.casevec_t.push_back(): - - push_back(self, x) - push_back(self) -> qvector< signed-ea-like-numeric-type > & - - -ida_xref.casevec_t.qclear(): - - qclear(self) - - -ida_xref.casevec_t.reserve(): - - reserve(self, cnt) - - -ida_xref.casevec_t.resize(): - - resize(self, _newsize, x) - resize(self, _newsize) - - -ida_xref.casevec_t.size(): - - size(self) -> size_t - - -ida_xref.casevec_t.swap(): - - swap(self, r) - - -ida_xref.casevec_t.truncate(): - - truncate(self) - - -ida_xref.create_switch_table(): - - create_switch_table(ea, si) -> bool - - - Create switch table from the switch information - - @param ea: address of the 'indirect jump' instruction - @param si: switch information - - @return: Boolean - - -ida_xref.create_switch_xrefs(): - - create_switch_xrefs(ea, si) -> bool - - - This function creates xrefs from the indirect jump. - - Usually there is no need to call this function directly because the kernel - will call it for switch tables - - Note: Custom switch information are not supported yet. - - @param ea: address of the 'indirect jump' instruction - @param si: switch information - - @return: Boolean - - -ida_xref.del_cref(): - - del_cref(frm, to, expand) -> int - - - Delete a code cross-reference. - - @param to: linear address of referenced instruction (C++: ea_t) - @param expand: policy to delete the referenced instruction 1: plan - to delete the referenced instruction if it has no more - references. 0: don't delete the referenced - instruction even if no more cross-references point to - it (C++: bool) - - -ida_xref.del_dref(): - - del_dref(frm, to) - - - Delete a data cross-reference. - - @param to: linear address of referenced data (C++: ea_t) - - -ida_xref.delete_switch_table(): - - delete_switch_table(jump_ea, si) - - -ida_xref.get_first_cref_from(): - - get_first_cref_from(frm) -> ea_t - - - Get first instruction referenced from the specified instruction. If - the specified instruction passes execution to the next instruction - then the next instruction is returned. Otherwise the lowest referenced - address is returned (remember that xrefs are kept sorted!). - - @return: first referenced address. The lastXR variable contains type - of the reference. If the specified instruction doesn't - reference to other instructions then returns BADADDR . - - -ida_xref.get_first_cref_to(): - - get_first_cref_to(to) -> ea_t - - - Get first instruction referencing to the specified instruction. If the - specified instruction may be executed immediately after its previous - instruction then the previous instruction is returned. Otherwise the - lowest referencing address is returned. (remember that xrefs are kept - sorted!). - - @param to: linear address of referenced instruction (C++: ea_t) - @return: linear address of the first referencing instruction or - BADADDR . The lastXR variable contains type of the - reference. - - -ida_xref.get_first_dref_from(): - - get_first_dref_from(frm) -> ea_t - - - Get first data referenced from the specified address. - - @return: linear address of first (lowest) data referenced from the - specified address. The lastXR variable contains type of the - reference. Return BADADDR if the specified instruction/data - doesn't reference to anything. - - -ida_xref.get_first_dref_to(): - - get_first_dref_to(to) -> ea_t - - - Get address of instruction/data referencing to the specified data. - - @param to: linear address of referencing instruction or data (C++: - ea_t) - @return: BADADDR if nobody refers to the specified data. The lastXR - variable contains type of the reference. - - -ida_xref.get_first_fcref_from(): - - get_first_fcref_from(frm) -> ea_t - - -ida_xref.get_first_fcref_to(): - - get_first_fcref_to(to) -> ea_t - - -ida_xref.get_next_cref_from(): - - get_next_cref_from(frm, current) -> ea_t - - - Get next instruction referenced from the specified instruction. - - @param current: linear address of current referenced instruction This - value is returned by get_first_cref_from() or - previous call to get_next_cref_from() functions. - (C++: ea_t) - @return: next referenced address or BADADDR . The lastXR variable - contains type of the reference. - - -ida_xref.get_next_cref_to(): - - get_next_cref_to(to, current) -> ea_t - - - Get next instruction referencing to the specified instruction. - - @param to: linear address of referenced instruction (C++: ea_t) - @param current: linear address of current referenced instruction This - value is returned by get_first_cref_to() or previous - call to get_next_cref_to() functions. (C++: ea_t) - @return: linear address of the next referencing instruction or - BADADDR . The lastXR variable contains type of the - reference. - - -ida_xref.get_next_dref_from(): - - get_next_dref_from(frm, current) -> ea_t - - - Get next data referenced from the specified address. - - @param current: linear address of current referenced data. This value - is returned by get_first_dref_from() or previous - call to get_next_dref_from() functions. (C++: ea_t) - @return: linear address of next data or BADADDR . The lastXR - variable contains type of the reference - - -ida_xref.get_next_dref_to(): - - get_next_dref_to(to, current) -> ea_t - - - Get address of instruction/data referencing to the specified data - - @param to: linear address of referencing instruction or data (C++: - ea_t) - @param current: current linear address. This value is returned by - get_first_dref_to() or previous call to - get_next_dref_to() functions. (C++: ea_t) - @return: BADADDR if nobody refers to the specified data. The lastXR - variable contains type of the reference. - - -ida_xref.get_next_fcref_from(): - - get_next_fcref_from(frm, current) -> ea_t - - -ida_xref.get_next_fcref_to(): - - get_next_fcref_to(to, current) -> ea_t - - -ida_xref.has_external_refs(): - - has_external_refs(pfn, ea) -> bool - - - Has a location external to the function references? - - - @param pfn (C++: func_t *) - @param ea (C++: ea_t) - - -class ida_xref.xrefblk_t(): - - Proxy of C++ xrefblk_t class - - -ida_xref.xrefblk_t.first_from(): - - first_from(self, _from, flags) -> bool - - -ida_xref.xrefblk_t.first_to(): - - first_to(self, _to, flags) -> bool - - -ida_xref.xrefblk_t.frm: - xrefblk_t_frm_get(self) -> ea_t - -ida_xref.xrefblk_t.iscode: - xrefblk_t_iscode_get(self) -> uchar - -ida_xref.xrefblk_t.next_from(): - - next_from(self) -> bool - next_from(self, _from, _to, flags) -> bool - - -ida_xref.xrefblk_t.next_to(): - - next_to(self) -> bool - next_to(self, _from, _to, flags) -> bool - - -ida_xref.xrefblk_t.to: - xrefblk_t_to_get(self) -> ea_t - -ida_xref.xrefblk_t.type: - xrefblk_t_type_get(self) -> uchar - -ida_xref.xrefblk_t.user: - xrefblk_t_user_get(self) -> uchar - -ida_xref.xrefchar(): - - xrefchar(xrtype) -> char - - - Get character describing the xref type. - - @param xrtype: combination of Cross-Reference type flags and a - cref_t of dref_t value (C++: char) - - - -=== ida_xref EPYDOC INJECTIONS === -ida_xref.XREF_ALL -""" -return all references -""" - -ida_xref.XREF_BASE -""" -Reference to the base part of an offset. -""" - -ida_xref.XREF_DATA -""" -return data references only -""" - -ida_xref.XREF_FAR -""" -don't return ordinary flow xrefs -""" - -ida_xref.XREF_MASK -""" -Mask to get xref type. -""" - -ida_xref.XREF_PASTEND -""" -Reference is past item. This bit may be passed to 'add_dref()' -functions but it won't be saved in the database. It will prevent the -destruction of eventual alignment directives. -""" - -ida_xref.XREF_TAIL -""" -Reference to tail byte in extrn symbols. -""" - -ida_xref.XREF_USER -""" -User specified xref. This xref will not be deleted by IDA. This bit -should be combined with the existing xref types ( 'cref_t' & 'dref_t' -) Cannot be used for fl_F xrefs -""" -=== ida_xref EPYDOC INJECTIONS END === -idc.AutoMark(): - - Plan to analyze an address - - -class idc.DeprecatedIDCError(): - - Exception for deprecated function calls - - -idc.EVAL_FAILURE(): - - Check the result of eval_idc() for evaluation failures - - @param code: result of eval_idc() - - @return: True if there was an evaluation error - - -idc.GetCommentEx(): - - get_cmt(ea, rptble) -> ssize_t - - - Get an indented comment. - - @param ea: linear address. may point to tail byte, the function will - find start of the item (C++: ea_t) - @param rptble: get repeatable comment? (C++: bool) - @return: size of comment or -1 - - -idc.GetDisasm(): - - Get disassembly line - - @param ea: linear address of instruction - - @return: "" - could not decode instruction at the specified location - - @note: this function may not return exactly the same mnemonics - as you see on the screen. - - -idc.GetDouble(): - - Get value of a floating point number (8 bytes) - This function assumes number stored using IEEE format - and in the same endianness as integers. - - @param ea: linear address - - @return: double - - -idc.GetFloat(): - - Get value of a floating point number (4 bytes) - This function assumes number stored using IEEE format - and in the same endianness as integers. - - @param ea: linear address - - @return: float - - -idc.GetLocalType(): - - Retrieve a local type declaration - @param flags: any of PRTYPE_* constants - @return: local type as a C declaration or "" - - -idc.LoadFile(): - - Load file into IDA database - - @param filepath: path to input file - @param pos: position in the file - @param ea: linear address to load - @param size: number of bytes to load - - @return: 0 - error, 1 - ok - - -idc.MakeVar(): - - Mark the location as "variable" - - @param ea: address to mark - - @return: None - - @note: All that IDA does is to mark the location as "variable". - Nothing else, no additional analysis is performed. - This function may disappear in the future. - - -idc.SaveFile(): - - Save from IDA database to file - - @param filepath: path to output file - @param pos: position in the file - @param ea: linear address to save from - @param size: number of bytes to save - - @return: 0 - error, 1 - ok - - -idc.SetType(): - - Set type of function/variable - - @param ea: the address of the object - @param newtype: the type string in C declaration form. - Must contain the closing ';' - if specified as an empty string, then the - item associated with 'ea' will be deleted. - - @return: 1-ok, 0-failed. - - -idc.SizeOf(): - - Returns the size of the type. It is equivalent to IDC's sizeof(). - Use name, tp, fld = idc.parse_decl() ; SizeOf(tp) to retrieve the size - @return: -1 if typestring is not valid otherwise the size of the type - - -idc.add_auto_stkpnt(): - - Add automatical SP register change point - @param func_ea: function start - @param ea: linear address where SP changes - usually this is the end of the instruction which - modifies the stack pointer (insn.ea+insn.size) - @param delta: difference between old and new values of SP - @return: 1-ok, 0-failed - - -idc.add_bpt(): - - Add a new breakpoint - - @param ea: any address in the process memory space: - @param size: size of the breakpoint (irrelevant for software breakpoints): - @param bpttype: type of the breakpoint (one of BPT_... constants) - - @return: success - - @note: Only one breakpoint can exist at a given address. - - -idc.add_cref(): - - add_cref(frm, to, type) -> bool - - - Create a code cross-reference. - - @param to: linear address of referenced instruction (C++: ea_t) - @param type: cross-reference type (C++: cref_t) - @return: success - - -idc.add_default_til(): - - Load a type library - - @param name: name of type library. - @return: 1-ok, 0-failed. - - -idc.add_dref(): - - add_dref(frm, to, type) -> bool - - - Create a data cross-reference. - - @param to: linear address of referenced data (C++: ea_t) - @param type: cross-reference type (C++: dref_t) - @return: success (may fail if user-defined xref exists from->to) - - -idc.add_entry(): - - add_entry(ord, ea, name, makecode, flags=0x0) -> bool - - - Add an entry point to the list of entry points. - - @param ord: ordinal number if ordinal number is equal to 'ea' then - ordinal is not used (C++: uval_t) - @param ea: linear address (C++: ea_t) - @param name: name of entry point. If the specified location already - has a name, the old name will be appended to the regular - comment. If name == NULL, then the old name will be - retained. (C++: const char *) - @param makecode: should the kernel convert bytes at the entry point to - instruction(s) (C++: bool) - @param flags: See AEF_* (C++: int) - @return: success (currently always true) - - -idc.add_enum(): - - Add a new enum type - - @param idx: serial number of the new enum. - If another enum with the same serial number - exists, then all enums with serial - numbers >= the specified idx get their - serial numbers incremented (in other words, - the new enum is put in the middle of the list of enums). - - If idx >= get_enum_qty() or idx == idaapi.BADNODE - then the new enum is created at the end of - the list of enums. - - @param name: name of the enum. - @param flag: flags for representation of numeric constants - in the definition of enum. - - @return: id of new enum or BADADDR - - -idc.add_enum_member(): - - Add a member of enum - a symbolic constant - - @param enum_id: id of enum - @param name: name of symbolic constant. Must be unique in the program. - @param value: value of symbolic constant. - @param bmask: bitmask of the constant - ordinary enums accept only ida_enum.DEFMASK as a bitmask - all bits set in value should be set in bmask too - - @return: 0-ok, otherwise error code (one of ENUM_MEMBER_ERROR_*) - - -idc.add_func(): - - Create a function - - @param start: function bounds - @param end: function bounds - - If the function end address is BADADDR, then - IDA will try to determine the function bounds - automatically. IDA will define all necessary - instructions to determine the function bounds. - - @return: !=0 - ok - - @note: an instruction should be present at the start address - - -idc.add_hidden_range(): - - add_hidden_range(ea1, ea2, description, header, footer, color) -> bool - - - Mark a range of addresses as hidden. The range will be created in the - invisible state with the default color - - @param ea1: linear address of start of the address range (C++: ea_t) - @param ea2: linear address of end of the address range (C++: ea_t) - @param description: range parameters (C++: const char *) - @param header: range parameters (C++: const char *) - @param footer: range parameters (C++: const char *) - @param color (C++: bgcolor_t) - @return: success - - -idc.add_idc_hotkey(): - - add_idc_hotkey(hotkey, idcfunc) -> int - - - Add hotkey for IDC function ( 'ui_add_idckey' ). - - @param hotkey: hotkey name (C++: const char *) - @param idcfunc: IDC function name (C++: const char *) - @return: IDC hotkey error codes - - -idc.add_segm_ex(): - - Create a new segment - - @param startea: linear address of the start of the segment - @param endea: linear address of the end of the segment - this address will not belong to the segment - 'endea' should be higher than 'startea' - @param base: base paragraph or selector of the segment. - a paragraph is 16byte memory chunk. - If a selector value is specified, the selector should be - already defined. - @param use32: 0: 16bit segment, 1: 32bit segment, 2: 64bit segment - @param align: segment alignment. see below for alignment values - @param comb: segment combination. see below for combination values. - @param flags: combination of ADDSEG_... bits - - @return: 0-failed, 1-ok - - -idc.add_sourcefile(): - - add_sourcefile(ea1, ea2, filename) -> bool - - - Mark a range of address as belonging to a source file. An address - range may belong only to one source file. A source file may be - represented by several address ranges. - - @param ea1: linear address of start of the address range (C++: ea_t) - @param ea2: linear address of end of the address range (excluded) - (C++: ea_t) - @param filename: name of source file. (C++: const char *) - @return: success - - -idc.add_struc(): - - Define a new structure type - - @param index: index of new structure type - If another structure has the specified index, - then index of that structure and all other - structures will be incremented, freeing the specifed - index. If index is == -1, then the biggest index - number will be used. - See get_first_struc_idx() for the explanation of - structure indices and IDs. - @param name: name of the new structure type. - @param is_union: 0: structure - 1: union - - @return: -1 if can't define structure type because of - bad structure name: the name is ill-formed or is - already used in the program. - otherwise returns ID of the new structure type - - -idc.add_struc_member(): - - Add structure member - - @param sid: structure type ID - @param name: name of the new member - @param offset: offset of the new member - -1 means to add at the end of the structure - @param flag: type of the new member. Should be one of - FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA - @param typeid: if is_struct(flag) then typeid specifies the structure id for the member - if is_off0(flag) then typeid specifies the offset base. - if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). - if is_stroff(flag) then typeid specifies the structure id - if is_enum(flag) then typeid specifies the enum id - if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) - Otherwise typeid should be -1. - @param nbytes: number of bytes in the new member - - @param target: target address of the offset expr. You may specify it as - -1, ida will calculate it itself - @param tdelta: offset target delta. usually 0 - @param reftype: see REF_... definitions - - @note: The remaining arguments are allowed only if is_off0(flag) and you want - to specify a complex offset expression - - @return: 0 - ok, otherwise error code (one of STRUC_ERROR_*) - - - -idc.add_user_stkpnt(): - - add_user_stkpnt(ea, delta) -> bool - - - Add user-defined SP register change point. - - @param ea: linear address where SP changes (C++: ea_t) - @param delta: difference between old and new values of SP (C++: - sval_t) - @return: success - - -idc.append_func_tail(): - - Append a function chunk to the function - - @param funcea: any address in the function - @param ea1: start of function tail - @param ea2: end of function tail - @return: 0 if failed, 1 if success - - @note: If a chunk exists at the specified addresses, it must have exactly - the specified boundaries - - -idc.apply_type(): - - Apply the specified type to the address - - @param ea: the address of the object - @param py_type: typeinfo tuple (type, fields) as get_tinfo() returns - or tuple (name, type, fields) as parse_decl() returns - or None - if specified as None, then the - item associated with 'ea' will be deleted. - @param flags: combination of TINFO_... constants or 0 - @return: Boolean - - -idc.ask_yn(): - - ask_yn(deflt, format) -> int - - - Display a dialog box and get choice from "Yes", "No", "Cancel". - - @param deflt: default choice: one of Button IDs (C++: int) - @param format: The question in printf() style format (C++: const char - *) - @return: the selected button (one of Button IDs ). Esc key returns - ASKBTN_CANCEL . - - -idc.atoa(): - - Convert address value to a string - Return address in the form 'seg000:1234' - (the same as in line prefixes) - - @param ea: address to format - - -idc.attach_process(): - - attach_process(pid=pid_t(-1), event_id=-1) -> int - - - Attach the debugger to a running process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_attach' - }This function shouldn't be called as a request if 'NO_PROCESS' is - used. - - @param pid: PID of the process to attach to. If NO_PROCESS , a dialog - box will interactively ask the user for the process to - attach to. (C++: pid_t) - @param event_id (C++: int) - - -idc.auto_mark_range(): - - auto_mark_range(start, end, type) - - - Put range of addresses into a queue. 'start' may be higher than 'end', - the kernel will swap them in this case. 'end' doesn't belong to the - range. - - @param start (C++: ea_t) - @param end (C++: ea_t) - @param type (C++: atype_t) - - -idc.auto_unmark(): - - auto_unmark(start, end, type) - - - Remove range of addresses from a queue. 'start' may be higher than - 'end', the kernel will swap them in this case. 'end' doesn't belong to - the range. - - @param start (C++: ea_t) - @param end (C++: ea_t) - @param type (C++: atype_t) - - -idc.auto_wait(): - - auto_wait() -> bool - - - Process everything in the queues and return true. - - @return: false if the user clicked cancel. (the wait box must be - displayed by the caller if desired) - - -idc.batch(): - - Enable/disable batch mode of operation - - @param batch: batch mode - 0 - ida will display dialog boxes and wait for the user input - 1 - ida will not display dialog boxes, warnings, etc. - - @return: old balue of batch flag - - -idc.byte_value(): - - Get byte value from flags - Get value of byte provided that the byte is initialized. - This macro works ok only for 8-bit byte machines. - - -idc.calc_gtn_flags(): - - Calculate flags for get_ea_name() function - - @param fromaddr: the referring address. May be BADADDR. - @param ea: linear address - - @return: flags - - -idc.call_system(): - - Execute an OS command. - - @param command: command line to execute - - @return: error code from OS - - @note: - IDA will wait for the started program to finish. - In order to start the command in parallel, use OS methods. - For example, you may start another program in parallel using - "start" command. - - -idc.can_exc_continue(): - - Can it continue after EXCEPTION event? - - @return: boolean - - -idc.check_bpt(): - - check_bpt(ea) -> int - - - Check the breakpoint at the specified address. - - @param ea (C++: ea_t) - @return: one of Breakpoint status codes - - -idc.choose_func(): - - Ask the user to select a function - - Arguments: - - @param title: title of the dialog box - - @return: -1 - user refused to select a function - otherwise returns the selected function start address - - -idc.clear_trace(): - - Clear the current trace buffer - - -idc.create_align(): - - create_align(ea, length, alignment) -> bool - - - Alignment: 0 or 2..32. If it is 0, is will be calculated. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param alignment (C++: int) - - -idc.create_array(): - - Create array. - - @param name: The array name. - - @return: -1 in case of failure, a valid array_id otherwise. - - -idc.create_byte(): - - Convert the current item to a byte - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_custom_data(): - - create_custdata(ea, length, dtid, fid, force=False) -> bool - - - Convert to custom data type. - - - @param ea (C++: ea_t) - @param length (C++: asize_t) - @param dtid (C++: int) - @param fid (C++: int) - @param force (C++: bool) - - -idc.create_data(): - - create_data(ea, dataflag, size, tid) -> bool - - - Convert to data (byte, word, dword, etc). This function may be used to - create arrays. - - @param ea: linear address (C++: ea_t) - @param dataflag: type of data. Value of function byte_flag() , - word_flag() , etc. (C++: flags_t) - @param size: size of array in bytes. should be divisible by the size - of one item of the specified type. for variable sized - items it can be specified as 0, and the kernel will try - to calculate the size. (C++: asize_t) - @param tid: type id. If the specified type is a structure, then tid is - structure id. Otherwise should be BADNODE . (C++: tid_t) - @return: success - - -idc.create_double(): - - Convert the current item to a double floating point (8 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_dword(): - - Convert the current item to a double word (4 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_float(): - - Convert the current item to a floating point (4 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_insn(): - - create_insn(ea, out=None) -> int - - - Create an instruction at the specified address. This function checks - if an instruction is present at the specified address and will try to - create one if there is none. It will fail if there is a data item or - other items hindering the creation of the new instruction. This - function will also fill the 'out' structure. - - @param ea: linear address (C++: ea_t) - @param out: the resulting instruction (C++: insn_t *) - @return: the length of the instruction or 0 - - -idc.create_oword(): - - Convert the current item to an octa word (16 bytes/128 bits) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_pack_real(): - - Convert the current item to a packed real (10 or 12 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_qword(): - - Convert the current item to a quadro word (8 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_strlit(): - - Create a string. - - This function creates a string (the string type is determined by the - value of get_inf_attr(INF_STRTYPE)) - - @param ea: linear address - @param endea: ending address of the string (excluded) - if endea == BADADDR, then length of string will be calculated - by the kernel - - @return: 1-ok, 0-failure - - @note: The type of an existing string is returned by get_str_type() - - -idc.create_struct(): - - Convert the current item to a structure instance - - @param ea: linear address - @param size: structure size in bytes. -1 means that the size - will be calculated automatically - @param strname: name of a structure type - - @return: 1-ok, 0-failure - - -idc.create_tbyte(): - - Convert the current item to a tbyte (10 or 12 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_word(): - - Convert the current item to a word (2 bytes) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.create_yword(): - - Convert the current item to a ymm word (32 bytes/256 bits) - - @param ea: linear address - - @return: 1-ok, 0-failure - - -idc.define_exception(): - - define_exception(code, name, desc, flags) -> char const * - - - Convenience function: define new exception code. - - @param code: exception code (cannot be 0) (C++: uint) - @param name: exception name (cannot be empty or NULL) (C++: const char - *) - @param desc: exception description (maybe NULL) (C++: const char *) - @param flags: combination of Exception info flags (C++: int) - @return: failure message or NULL. You must call store_exceptions() - if this function succeeds - - -idc.define_local_var(): - - Create a local variable - - @param start: start of address range for the local variable - @param end: end of address range for the local variable - @param location: the variable location in the "[bp+xx]" form where xx is - a number. The location can also be specified as a - register name. - @param name: name of the local variable - - @return: 1-ok, 0-failure - - @note: For the stack variables the end address is ignored. - If there is no function at 'start' then this function. - will fail. - - -idc.del_array_element(): - - Delete an array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - @param idx: Index of an element. - - @return: 1 in case of success, 0 otherwise. - - -idc.del_bpt(): - - Delete breakpoint - - @param ea: any address in the process memory space: - - @return: success - - -idc.del_cref(): - - del_cref(frm, to, expand) -> int - - - Delete a code cross-reference. - - @param to: linear address of referenced instruction (C++: ea_t) - @param expand: policy to delete the referenced instruction 1: plan - to delete the referenced instruction if it has no more - references. 0: don't delete the referenced - instruction even if no more cross-references point to - it (C++: bool) - - -idc.del_dref(): - - del_dref(frm, to) - - - Delete a data cross-reference. - - @param to: linear address of referenced data (C++: ea_t) - - -idc.del_enum(): - - del_enum(id) - - - Delete an enum type. - - - @param id (C++: enum_t) - - -idc.del_enum_member(): - - Delete a member of enum - a symbolic constant - - @param enum_id: id of enum - @param value: value of symbolic constant. - @param serial: serial number of the constant in the - enumeration. See op_enum() for for details. - @param bmask: bitmask of the constant ordinary enums accept - only ida_enum.DEFMASK as a bitmask - - @return: 1-ok, 0-failed - - -idc.del_extra_cmt(): - - del_extra_cmt(ea, what) - - -idc.del_fixup(): - - del_fixup(source) - - - Delete fixup information. - - - @param source (C++: ea_t) - - -idc.del_func(): - - del_func(ea) -> bool - - - Delete a function. - - @param ea: any address in the function entry chunk (C++: ea_t) - @return: success - - -idc.del_hash_string(): - - Delete a hash element. - - @param hash_id: The hash ID. - @param key: Key of an element - - @return: 1 upon success, 0 otherwise. - - -idc.del_hidden_range(): - - del_hidden_range(ea) -> bool - - - Delete hidden range. - - @param ea: any address in the hidden range (C++: ea_t) - @return: success - - -idc.del_idc_hotkey(): - - del_idc_hotkey(hotkey) -> bool - - - Delete IDC function hotkey ( 'ui_del_idckey' ). - - @param hotkey: hotkey name (C++: const char *) - - -idc.del_items(): - - Convert the current item to an explored item - - @param ea: linear address - @param flags: combination of DELIT_* constants - @param size: size of the range to undefine - - @return: None - - -idc.del_segm(): - - Delete a segment - - @param ea: any address in the segment - @param flags: combination of SEGMOD_* flags - - @return: boolean success - - -idc.del_selector(): - - del_selector(selector) - - - Delete mapping of a selector. Be wary of deleting selectors that are - being used in the program, this can make a mess in the segments. - - @param selector: number of selector to remove from the translation - table (C++: sel_t) - - -idc.del_source_linnum(): - - del_source_linnum(ea) - - -idc.del_sourcefile(): - - del_sourcefile(ea) -> bool - - - Delete information about the source file. - - @param ea: linear address (C++: ea_t) - @return: success - - -idc.del_stkpnt(): - - Delete SP register change point - - @param func_ea: function start - @param ea: linear address - @return: 1-ok, 0-failed - - -idc.del_struc(): - - Delete a structure type - - @param sid: structure type ID - - @return: 0 if bad structure type ID is passed - 1 otherwise the structure type is deleted. All data - and other structure types referencing to the - deleted structure type will be displayed as array - of bytes. - - -idc.del_struc_member(): - - Delete structure member - - @param sid: structure type ID - @param member_offset: offset of the member - - @return: != 0 - ok. - - @note: IDA allows 'holes' between members of a - structure. It treats these 'holes' - as unnamed arrays of bytes. - - -idc.delete_all_segments(): - - Delete all segments, instructions, comments, i.e. everything - except values of bytes. - - -idc.delete_array(): - - Delete array, by its ID. - - @param array_id: The ID of the array to delete. - - -idc.demangle_name(): - - demangle_name a name - - @param name: name to demangle - @param disable_mask: a mask that tells how to demangle the name - it is a good idea to get this mask using - get_inf_attr(INF_SHORT_DN) or get_inf_attr(INF_LONG_DN) - - @return: a demangled name - If the input name cannot be demangled, returns None - - -idc.detach_process(): - - detach_process() -> bool - - - Detach the debugger from the debugged process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_detach' } - - -idc.diff_trace_file(): - - diff_trace_file(nonnul_filename) -> bool - - - Show difference between the current trace and the one from 'filename'. - - -idc.enable_bpt(): - - enable_bpt(ea, enable=True) -> bool - enable_bpt(bptloc, enable=True) -> bool - - -idc.enable_tracing(): - - Enable step tracing - - @param trace_level: what kind of trace to modify - @param enable: 0: turn off, 1: turn on - - @return: success - - -idc.error(): - - error(format) - - - Display a fatal message in a message box and quit IDA - - @param format: message to print - - -idc.eval_idc(): - - Evaluate an IDC expression - - @param expr: an expression - - @return: the expression value. If there are problems, the returned value will be "IDC_FAILURE: xxx" - where xxx is the error description - - @note: Python implementation evaluates IDC only, while IDC can call other registered languages - - -idc.exit_process(): - - exit_process() -> bool - - - Terminate the debugging of the current process. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_process_exit' } - - -idc.expand_struc(): - - Expand or shrink a structure type - @param id: structure type ID - @param offset: offset in the structure - @param delta: how many bytes to add or remove - @param recalc: recalculate the locations where the structure - type is used - @return: != 0 - ok - - -idc.find_func_end(): - - Determine a new function boundaries - - @param ea: starting address of a new function - - @return: if a function already exists, then return its end address. - If a function end cannot be determined, the return BADADDR - otherwise return the end address of the new function - - -idc.find_selector(): - - Find a selector which has the specifed value - - @param val: value to search for - - @return: the selector number if found, - otherwise the input value (val & 0xFFFF) - - @note: selector values are always in paragraphs - - -idc.first_func_chunk(): - - Get the first function chunk of the specified function - - @param funcea: any address in the function - - @return: the function entry point or BADADDR - - @note: This function returns the first (main) chunk of the specified function - - -idc.force_bl_call(): - - Force BL instruction to be a call - - @param ea: address of the BL instruction - - @return: 1-ok, 0-failed - - -idc.force_bl_jump(): - - Some ARM compilers in Thumb mode use BL (branch-and-link) - instead of B (branch) for long jumps, since BL has more range. - By default, IDA tries to determine if BL is a jump or a call. - You can override IDA's decision using commands in Edit/Other menu - (Force BL call/Force BL jump) or the following two functions. - - Force BL instruction to be a jump - - @param ea: address of the BL instruction - - @return: 1-ok, 0-failed - - -idc.func_contains(): - - Does the given function contain the given address? - - @param func_ea: any address belonging to the function - @param ea: linear address - - @return: success - - -idc.gen_file(): - - Generate an output file - - @param filetype: type of output file. One of OFILE_... symbols. See below. - @param path: the output file path (will be overwritten!) - @param ea1: start address. For some file types this argument is ignored - @param ea2: end address. For some file types this argument is ignored - @param flags: bit combination of GENFLG_... - - @returns: number of the generated lines. - -1 if an error occurred - OFILE_EXE: 0-can't generate exe file, 1-ok - - -idc.gen_flow_graph(): - - Generate a flow chart GDL file - - @param outfile: output file name. GDL extension will be used - @param title: graph title - @param ea1: beginning of the range to flow chart - @param ea2: end of the range to flow chart. - @param flags: combination of CHART_... constants - - @note: If ea2 == BADADDR then ea1 is treated as an address within a function. - That function will be flow charted. - - -idc.gen_simple_call_chart(): - - Generate a function call graph GDL file - - @param outfile: output file name. GDL extension will be used - @param title: graph title - @param flags: combination of CHART_GEN_GDL, CHART_WINGRAPH, CHART_NOLIBFUNCS - - -idc.generate_disasm_line(): - - Get disassembly line - - @param ea: linear address of instruction - - @param flags: combination of the GENDSM_ flags, or 0 - - @return: "" - could not decode instruction at the specified location - - @note: this function may not return exactly the same mnemonics - as you see on the screen. - - -idc.get_array_element(): - - Get value of array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - @param idx: Index of an element. - - @return: Value of the specified array element. Note that - this function may return char or long result. Unexistent - array elements give zero as a result. - - -idc.get_array_id(): - - Get array array_id, by name. - - @param name: The array name. - - @return: -1 in case of failure (i.e., no array with that - name exists), a valid array_id otherwise. - - -idc.get_bmask_cmt(): - - Get bitmask comment (only for bitfields) - - @param enum_id: id of enum - @param bmask: bitmask of the constant - @param repeatable: type of comment, 0-regular, 1-repeatable - - @return: comment attached to bitmask or None - - -idc.get_bmask_name(): - - Get bitmask name (only for bitfields) - - @param enum_id: id of enum - @param bmask: bitmask of the constant - - @return: name of bitmask or None - - -idc.get_bookmark(): - - get_marked_pos(slot) -> ea_t - - -idc.get_bookmark_desc(): - - get_mark_comment(slot) -> PyObject * - - -idc.get_bpt_attr(): - - Get the characteristics of a breakpoint - - @param ea: any address in the breakpoint range - @param bptattr: the desired attribute code, one of BPTATTR_... constants - - @return: the desired attribute value or -1 - - -idc.get_bpt_ea(): - - Get breakpoint address - - @param n: number of breakpoint, is in range 0..get_bpt_qty()-1 - - @return: address of the breakpoint or BADADDR - - -idc.get_bpt_qty(): - - Get number of breakpoints. - - @return: number of breakpoints - - -idc.get_bpt_tev_ea(): - - get_bpt_tev_ea(n) -> ea_t - - - Get the address associated to a read, read/write or execution trace - event. \sq{Type, Synchronous function, Notification, none (synchronous - function)}Usually, a breakpoint is associated with a read, read/write - or execution trace event. However, the returned address could be any - address in the range of this breakpoint. If the breakpoint was deleted - after the trace event, the address no longer corresponds to a valid - breakpoint. - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a read, read/write or execution trace event. - - -idc.get_bytes(): - - Return the specified number of bytes of the program - - @param ea: linear address - - @param size: size of buffer in normal 8-bit bytes - - @param use_dbg: if True, use debugger memory, otherwise just the database - - @return: None on failure - otherwise a string containing the read bytes - - -idc.get_call_tev_callee(): - - get_call_tev_callee(n) -> ea_t - - - Get the called function from a function call trace event. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a function call event. - - -idc.get_cmt(): - - get_cmt(ea, rptble) -> ssize_t - - - Get an indented comment. - - @param ea: linear address. may point to tail byte, the function will - find start of the item (C++: ea_t) - @param rptble: get repeatable comment? (C++: bool) - @return: size of comment or -1 - - -idc.get_color(): - - Get item color - - @param ea: address of the item - @param what: type of the item (one of CIC_* constants) - - @return: color code in RGB (hex 0xBBGGRR) - - -idc.get_curline(): - - Get the disassembly line at the cursor - - @return: string - - -idc.get_current_thread(): - - get_current_thread() -> thid_t - - - Get current thread ID. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - -idc.get_db_byte(): - - get_db_byte(ea) -> uchar - - - Get one byte (8-bit) of the program at 'ea' from the database. Works - even if the debugger is active. See also 'get_dbg_byte()' to read the - process memory directly. This function works only for 8bit byte - processors. - - @param ea (C++: ea_t) - - -idc.get_debugger_event_cond(): - - get_debugger_event_cond() -> char const * - - -idc.get_entry(): - - get_entry(ord) -> ea_t - - - Get entry point address by its ordinal - - @param ord: ordinal number of entry point (C++: uval_t) - @return: address or BADADDR - - -idc.get_entry_name(): - - get_entry_name(ord) -> ssize_t - - - Get name of the entry point by its ordinal. - - @param ord: ordinal number of entry point (C++: uval_t) - @return: size of entry name or -1 - - -idc.get_entry_ordinal(): - - get_entry_ordinal(idx) -> uval_t - - - Get ordinal number of an entry point. - - @param idx: internal number of entry point. Should be in the range 0.. - get_entry_qty() -1 (C++: size_t) - @return: ordinal number or 0. - - -idc.get_entry_qty(): - - get_entry_qty() -> size_t - - - Get number of entry points. - - -idc.get_enum(): - - get_enum(name) -> enum_t - - - Get enum by name. - - - @param name (C++: const char *) - - -idc.get_enum_cmt(): - - get_enum_cmt(id, repeatable) -> ssize_t - - - Get enum comment. - - - @param id (C++: enum_t) - @param repeatable (C++: bool) - - -idc.get_enum_flag(): - - get_enum_flag(id) -> flags_t - - - Get flags determining the representation of the enum. (currently they - define the numeric base: octal, decimal, hex, bin) and signness. - - @param id (C++: enum_t) - - -idc.get_enum_idx(): - - get_enum_idx(id) -> uval_t - - - Get serial number of enum. The serial number determines the place of - the enum in the enum window. - - @param id (C++: enum_t) - - -idc.get_enum_member(): - - Get id of constant - - @param enum_id: id of enum - @param value: value of constant - @param serial: serial number of the constant in the - enumeration. See op_enum() for details. - @param bmask: bitmask of the constant - ordinary enums accept only ida_enum.DEFMASK as a bitmask - - @return: id of constant or -1 if error - - -idc.get_enum_member_bmask(): - - get_enum_member_bmask(id) -> bmask_t - - - Get bitmask of an enum member. - - - @param id (C++: const_t) - - -idc.get_enum_member_by_name(): - - get_enum_member_by_name(name) -> const_t - - - Get a reference to an enum member by its name. - - - @param name (C++: const char *) - - -idc.get_enum_member_cmt(): - - Get comment of a constant - - @param const_id: id of const - @param repeatable: 0:get regular comment, 1:get repeatable comment - - @return: comment string - - -idc.get_enum_member_enum(): - - get_enum_member_enum(id) -> enum_t - - - Get the parent enum of an enum member. - - - @param id (C++: const_t) - - -idc.get_enum_member_name(): - - Get name of a constant - - @param const_id: id of const - - Returns: name of constant - - -idc.get_enum_member_value(): - - get_enum_member_value(id) -> uval_t - - - Get value of an enum member. - - - @param id (C++: const_t) - - -idc.get_enum_name(): - - get_enum_name(id) -> ssize_t - - - Get name of enum. - - - @param id (C++: enum_t) - - -idc.get_enum_qty(): - - get_enum_qty() -> size_t - - - Get number of declared 'enum_t' types. - - -idc.get_enum_size(): - - get_enum_size(id) -> size_t - - - Get the number of the members of the enum. - - - @param id (C++: enum_t) - - -idc.get_enum_width(): - - get_enum_width(id) -> size_t - - - Get the width of a enum element allowed values: 0 - (unspecified),1,2,4,8,16,32,64 - - @param id (C++: enum_t) - - -idc.get_event_bpt_hea(): - - Get hardware address for BREAKPOINT event - - @return: hardware address - - -idc.get_event_ea(): - - Get ea for debug event - - @return: ea - - -idc.get_event_exc_code(): - - Get exception code for EXCEPTION event - - @return: exception code - - -idc.get_event_exc_ea(): - - Get address for EXCEPTION event - - @return: adress of exception - - -idc.get_event_exc_info(): - - Get info for EXCEPTION event - - @return: info string - - -idc.get_event_exit_code(): - - Get exit code for debug event - - @return: exit code for PROCESS_EXITED, THREAD_EXITED events - - -idc.get_event_id(): - - Get ID of debug event - - @return: event ID - - -idc.get_event_info(): - - Get debug event info - - @return: event info: for THREAD_STARTED (thread name) - for LIB_UNLOADED (unloaded library name) - for INFORMATION (message to display) - - -idc.get_event_module_base(): - - Get module base for debug event - - @return: module base - - -idc.get_event_module_name(): - - Get module name for debug event - - @return: module name - - -idc.get_event_module_size(): - - Get module size for debug event - - @return: module size - - -idc.get_event_pid(): - - Get process ID for debug event - - @return: process ID - - -idc.get_event_tid(): - - Get type ID for debug event - - @return: type ID - - -idc.get_extra_cmt(): - - get_extra_cmt(ea, what) -> ssize_t - - -idc.get_fchunk_attr(): - - Get a function chunk attribute - - @param ea: any address in the chunk - @param attr: one of: FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER, FUNCATTR_REFQTY - - @return: desired attribute or -1 - - -idc.get_fchunk_referer(): - - Get a function chunk referer - - @param ea: any address in the chunk - @param idx: referer index (0..get_fchunk_attr(FUNCATTR_REFQTY)) - - @return: referer address or BADADDR - - -idc.get_first_bmask(): - - get_first_bmask(id) -> bmask_t - - - Get first bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @return: the smallest bitmask for enum, or DEFMASK - - -idc.get_first_cref_from(): - - get_first_cref_from(frm) -> ea_t - - - Get first instruction referenced from the specified instruction. If - the specified instruction passes execution to the next instruction - then the next instruction is returned. Otherwise the lowest referenced - address is returned (remember that xrefs are kept sorted!). - - @return: first referenced address. The lastXR variable contains type - of the reference. If the specified instruction doesn't - reference to other instructions then returns BADADDR . - - -idc.get_first_cref_to(): - - get_first_cref_to(to) -> ea_t - - - Get first instruction referencing to the specified instruction. If the - specified instruction may be executed immediately after its previous - instruction then the previous instruction is returned. Otherwise the - lowest referencing address is returned. (remember that xrefs are kept - sorted!). - - @param to: linear address of referenced instruction (C++: ea_t) - @return: linear address of the first referencing instruction or - BADADDR . The lastXR variable contains type of the - reference. - - -idc.get_first_dref_from(): - - get_first_dref_from(frm) -> ea_t - - - Get first data referenced from the specified address. - - @return: linear address of first (lowest) data referenced from the - specified address. The lastXR variable contains type of the - reference. Return BADADDR if the specified instruction/data - doesn't reference to anything. - - -idc.get_first_dref_to(): - - get_first_dref_to(to) -> ea_t - - - Get address of instruction/data referencing to the specified data. - - @param to: linear address of referencing instruction or data (C++: - ea_t) - @return: BADADDR if nobody refers to the specified data. The lastXR - variable contains type of the reference. - - -idc.get_first_enum_member(): - - Get first constant in the enum - - @param enum_id: id of enum - @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) - - @return: value of constant or idaapi.BADNODE no constants are defined - All constants are sorted by their values as unsigned longs. - - -idc.get_first_fcref_from(): - - get_first_fcref_from(frm) -> ea_t - - -idc.get_first_fcref_to(): - - get_first_fcref_to(to) -> ea_t - - -idc.get_first_hash_key(): - - Get the first key in the hash. - - @param hash_id: The hash ID. - - @return: the key, 0 otherwise. - - -idc.get_first_index(): - - Get index of the first existing array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - - @return: -1 if the array is empty, otherwise index of first array - element of given type. - - -idc.get_first_member(): - - Get offset of the first member of a structure - - @param sid: structure type ID - - @return: -1 if bad structure type ID is passed, - ida_idaapi.BADADDR if structure has no members, - otherwise returns offset of the first member. - - @note: IDA allows 'holes' between members of a - structure. It treats these 'holes' - as unnamed arrays of bytes. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_first_module(): - - Enumerate process modules - - @return: first module's base address or None on failure - - -idc.get_first_seg(): - - Get first segment - - @return: address of the start of the first segment - BADADDR - no segments are defined - - -idc.get_first_struc_idx(): - - get_first_struc_idx() -> uval_t - - - Get index of first structure. - - @return: BADADDR if no known structures, 0 otherwise - - -idc.get_fixup_target_dis(): - - Get fixup target displacement - - @param ea: address to get information about - - @return: 0 - no fixup at the specified address - otherwise returns fixup target displacement - - -idc.get_fixup_target_flags(): - - Get fixup target flags - - @param ea: address to get information about - - @return: 0 - no fixup at the specified address - otherwise returns fixup target flags - - -idc.get_fixup_target_off(): - - Get fixup target offset - - @param ea: address to get information about - - @return: BADADDR - no fixup at the specified address - otherwise returns fixup target offset - - -idc.get_fixup_target_sel(): - - Get fixup target selector - - @param ea: address to get information about - - @return: BADSEL - no fixup at the specified address - otherwise returns fixup target selector - - -idc.get_fixup_target_type(): - - Get fixup target type - - @param ea: address to get information about - - @return: 0 - no fixup at the specified address - otherwise returns fixup type - - -idc.get_forced_operand(): - - get_forced_operand(ea, n) -> ssize_t - - - Get forced operand. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, 2) (C++: int) - @return: size of forced operand or -1 - - -idc.get_frame_args_size(): - - Get size of arguments in function frame which are purged upon return - - @param ea: any address belonging to the function - - @return: Size of function arguments in bytes. - If the function doesn't have a frame, return 0 - If the function does't exist, return -1 - - -idc.get_frame_id(): - - Get ID of function frame structure - - @param ea: any address belonging to the function - - @return: ID of function frame or None In order to access stack variables - you need to use structure member manipulaion functions with the - obtained ID. - - -idc.get_frame_lvar_size(): - - Get size of local variables in function frame - - @param ea: any address belonging to the function - - @return: Size of local variables in bytes. - If the function doesn't have a frame, return 0 - If the function does't exist, return None - - -idc.get_frame_regs_size(): - - Get size of saved registers in function frame - - @param ea: any address belonging to the function - - @return: Size of saved registers in bytes. - If the function doesn't have a frame, return 0 - This value is used as offset for BP (if FUNC_FRAME is set) - If the function does't exist, return None - - -idc.get_frame_size(): - - Get full size of function frame - - @param ea: any address belonging to the function - @returns: Size of function frame in bytes. - This function takes into account size of local - variables + size of saved registers + size of - return address + size of function arguments - If the function doesn't have a frame, return size of - function return address in the stack. - If the function does't exist, return 0 - - -idc.get_full_flags(): - - get_full_flags(ea) -> flags_t - - - Get flags value for address 'ea'. - - @param ea (C++: ea_t) - @return: 0 if address is not present in the program - - -idc.get_func_attr(): - - Get a function attribute - - @param ea: any address belonging to the function - @param attr: one of FUNCATTR_... constants - - @return: BADADDR - error otherwise returns the attribute value - - -idc.get_func_cmt(): - - Retrieve function comment - - @param ea: any address belonging to the function - @param repeatable: 1: get repeatable comment - 0: get regular comment - - @return: function comment string - - -idc.get_func_flags(): - - Retrieve function flags - - @param ea: any address belonging to the function - - @return: -1 - function doesn't exist otherwise returns the flags - - -idc.get_func_name(): - - Retrieve function name - - @param ea: any address belonging to the function - - @return: null string - function doesn't exist - otherwise returns function name - - -idc.get_func_off_str(): - - Convert address to 'funcname+offset' string - - @param ea: address to convert - - @return: if the address belongs to a function then return a string - formed as 'name+offset' where 'name' is a function name - 'offset' is offset within the function else return null string - - -idc.get_hash_long(): - - Gets the long value of a hash element. - - @param hash_id: The hash ID. - @param key: Key of an element. - - @return: the 32bit or 64bit value of the element, or 0 if no such - element. - - -idc.get_hash_string(): - - Gets the string value of a hash element. - - @param hash_id: The hash ID. - @param key: Key of an element. - - @return: the string value of the element, or None if no such - element. - - -idc.get_idb_path(): - - Get IDB full path - - This function returns full path of the current IDB database - - -idc.get_inf_attr(): - - - -idc.get_input_file_path(): - - get_input_file_path() -> ssize_t - - - Get full path of the input file. - - -idc.get_item_end(): - - get_item_end(ea) -> ea_t - - - Get the end address of the item at 'ea'. The returned address doesn't - belong to the current item. Unexplored bytes are counted as 1 byte - entities. - - @param ea (C++: ea_t) - - -idc.get_item_head(): - - get_item_head(ea) -> ea_t - - - Get the start address of the item at 'ea'. If there is no current - item, then 'ea' will be returned (see definition at the end of - 'bytes.hpp' source) - - @param ea (C++: ea_t) - - -idc.get_item_size(): - - Get size of instruction or data item in bytes - - @param ea: linear address - - @return: 1..n - - -idc.get_last_bmask(): - - get_last_bmask(id) -> bmask_t - - - Get last bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @return: the biggest bitmask for enum, or DEFMASK - - -idc.get_last_enum_member(): - - Get last constant in the enum - - @param enum_id: id of enum - @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) - - @return: value of constant or idaapi.BADNODE no constants are defined - All constants are sorted by their values - as unsigned longs. - - -idc.get_last_hash_key(): - - Get the last key in the hash. - - @param hash_id: The hash ID. - - @return: the key, 0 otherwise. - - -idc.get_last_index(): - - Get index of last existing array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - - @return: -1 if the array is empty, otherwise index of first array - element of given type. - - -idc.get_last_member(): - - Get offset of the last member of a structure - - @param sid: structure type ID - - @return: -1 if bad structure type ID is passed, - ida_idaapi.BADADDR if structure has no members, - otherwise returns offset of the last member. - - @note: IDA allows 'holes' between members of a - structure. It treats these 'holes' - as unnamed arrays of bytes. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_last_struc_idx(): - - get_last_struc_idx() -> uval_t - - - Get index of last structure. - - @return: BADADDR if no known structures, get_struc_qty() -1 - otherwise - - -idc.get_local_tinfo(): - - Get local type information as 'typeinfo' object - - @param ordinal: slot number (1...NumberOfLocalTypes) - @return: None on failure, or (type, fields) tuple. - - -idc.get_manual_insn(): - - get_manual_insn(ea) -> ssize_t - - - Retrieve the user-specified string for the manual instruction. - - @param ea: linear address of the instruction or data item (C++: ea_t) - @return: size of manual instruction or -1 - - -idc.get_member_cmt(): - - Get comment of a member - - @param sid: structure type ID - @param member_offset: member offset. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - @param repeatable: 1: get repeatable comment - 0: get regular comment - - @return: None if bad structure type ID is passed - or no such member in the structure - otherwise returns comment of the specified member. - - -idc.get_member_flag(): - - Get type of a member - - @param sid: structure type ID - @param member_offset: member offset. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - - @return: -1 if bad structure type ID is passed - or no such member in the structure - otherwise returns type of the member, see bit - definitions above. If the member type is a structure - then function GetMemberStrid() should be used to - get the structure type id. - - -idc.get_member_id(): - - @param sid: structure type ID - @param member_offset:. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - - @return: -1 if bad structure type ID is passed or there is - no member at the specified offset. - otherwise returns the member id. - - -idc.get_member_name(): - - Get name of a member of a structure - - @param sid: structure type ID - @param member_offset: member offset. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - - @return: None if bad structure type ID is passed - or no such member in the structure - otherwise returns name of the specified member. - - -idc.get_member_offset(): - - Get offset of a member of a structure by the member name - - @param sid: structure type ID - @param member_name: name of structure member - - @return: -1 if bad structure type ID is passed - or no such member in the structure - otherwise returns offset of the specified member. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_member_qty(): - - Get number of members of a structure - - @param sid: structure type ID - - @return: -1 if bad structure type ID is passed otherwise - returns number of members. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_member_size(): - - Get size of a member - - @param sid: structure type ID - @param member_offset: member offset. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - - @return: None if bad structure type ID is passed, - or no such member in the structure - otherwise returns size of the specified - member in bytes. - - -idc.get_member_strid(): - - Get structure id of a member - - @param sid: structure type ID - @param member_offset: member offset. The offset can be - any offset in the member. For example, - is a member is 4 bytes long and starts - at offset 2, then 2,3,4,5 denote - the same structure member. - @return: -1 if bad structure type ID is passed - or no such member in the structure - otherwise returns structure id of the member. - If the current member is not a structure, returns -1. - - -idc.get_min_spd_ea(): - - Return the address with the minimal spd (stack pointer delta) - If there are no SP change points, then return BADADDR. - - @param func_ea: function start - @return: BADDADDR - no such function - - -idc.get_module_name(): - - Get process module name - - @param base: the base address of the module - - @return: required info or None - - -idc.get_module_size(): - - Get process module size - - @param base: the base address of the module - - @return: required info or -1 - - -idc.get_name(): - - Get name at the specified address - - @param ea: linear address - @param gtn_flags: how exactly the name should be retrieved. - combination of GN_ bits - - @return: "" - byte has no name - - -idc.get_name_ea(): - - get_name_ea(_from, name) -> ea_t - - - Get address of the name. Dummy names (like byte_xxxx where xxxx are - hex digits) are parsed by this function to obtain the address. The - database is not consulted for them. This function works only with - regular names. - - @param _from: linear address where the name is used. if not - applicable, then should be BADADDR . (C++: ea_t) - @param name: any name in the program or NULL (C++: const char *) - @return: address of the name or BADADDR - - -idc.get_name_ea_simple(): - - Get linear address of a name - - @param name: name of program byte - - @return: address of the name - BADADDR - No such name - - -idc.get_next_bmask(): - - get_next_bmask(id, bmask) -> bmask_t - - - Get next bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @param bmask (C++: bmask_t) - @return: value of a bitmask with value higher than the specified - value, or DEFMASK - - -idc.get_next_cref_from(): - - get_next_cref_from(frm, current) -> ea_t - - - Get next instruction referenced from the specified instruction. - - @param current: linear address of current referenced instruction This - value is returned by get_first_cref_from() or - previous call to get_next_cref_from() functions. - (C++: ea_t) - @return: next referenced address or BADADDR . The lastXR variable - contains type of the reference. - - -idc.get_next_cref_to(): - - get_next_cref_to(to, current) -> ea_t - - - Get next instruction referencing to the specified instruction. - - @param to: linear address of referenced instruction (C++: ea_t) - @param current: linear address of current referenced instruction This - value is returned by get_first_cref_to() or previous - call to get_next_cref_to() functions. (C++: ea_t) - @return: linear address of the next referencing instruction or - BADADDR . The lastXR variable contains type of the - reference. - - -idc.get_next_dref_from(): - - get_next_dref_from(frm, current) -> ea_t - - - Get next data referenced from the specified address. - - @param current: linear address of current referenced data. This value - is returned by get_first_dref_from() or previous - call to get_next_dref_from() functions. (C++: ea_t) - @return: linear address of next data or BADADDR . The lastXR - variable contains type of the reference - - -idc.get_next_dref_to(): - - get_next_dref_to(to, current) -> ea_t - - - Get address of instruction/data referencing to the specified data - - @param to: linear address of referencing instruction or data (C++: - ea_t) - @param current: current linear address. This value is returned by - get_first_dref_to() or previous call to - get_next_dref_to() functions. (C++: ea_t) - @return: BADADDR if nobody refers to the specified data. The lastXR - variable contains type of the reference. - - -idc.get_next_enum_member(): - - Get next constant in the enum - - @param enum_id: id of enum - @param bmask: bitmask of the constant ordinary enums accept only ida_enum.DEFMASK as a bitmask - @param value: value of the current constant - - @return: value of a constant with value higher than the specified - value. idaapi.BADNODE no such constants exist. - All constants are sorted by their values as unsigned longs. - - -idc.get_next_fchunk(): - - Get next function chunk - - @param ea: any address - - @return: the starting address of the next function chunk or BADADDR - - @note: This function enumerates all chunks of all functions in the database - - -idc.get_next_fcref_from(): - - get_next_fcref_from(frm, current) -> ea_t - - -idc.get_next_fcref_to(): - - get_next_fcref_to(to, current) -> ea_t - - -idc.get_next_fixup_ea(): - - get_next_fixup_ea(ea) -> ea_t - - - Find next address with fixup information - - @param ea: current address (C++: ea_t) - @return: the next address with fixup information, or BADADDR - - -idc.get_next_func(): - - Find next function - - @param ea: any address belonging to the function - - @return: BADADDR - no more functions - otherwise returns the next function start address - - -idc.get_next_hash_key(): - - Get the next key in the hash. - - @param hash_id: The hash ID. - @param key: The current key. - - @return: the next key, 0 otherwise - - -idc.get_next_index(): - - Get index of the next existing array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - @param idx: Index of the current element. - - @return: -1 if no more elements, otherwise returns index of the - next array element of given type. - - -idc.get_next_module(): - - Enumerate process modules - - @param base: previous module's base address - - @return: next module's base address or None on failure - - -idc.get_next_offset(): - - Get next offset in a structure - - @param sid: structure type ID - @param offset: current offset - - @return: -1 if bad structure type ID is passed, - ida_idaapi.BADADDR if no (more) offsets in the structure, - otherwise returns next offset in a structure. - - @note: IDA allows 'holes' between members of a - structure. It treats these 'holes' - as unnamed arrays of bytes. - This function returns a member offset or a hole offset. - It will return size of the structure if input - 'offset' belongs to the last member of the structure. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_next_seg(): - - Get next segment - - @param ea: linear address - - @return: start of the next segment - BADADDR - no next segment - - -idc.get_next_struc_idx(): - - get_next_struc_idx(idx) -> uval_t - - - Get next struct index. - - @param idx (C++: uval_t) - @return: BADADDR if resulting index is out of bounds, otherwise idx++ - - -idc.get_numbered_type_name(): - - Retrieve a local type name - - @param ordinal: slot number (1...NumberOfLocalTypes) - - returns: local type name or None - - -idc.get_operand_type(): - - Get type of instruction operand - - @param ea: linear address of instruction - @param n: number of operand: - 0 - the first operand - 1 - the second operand - - @return: any of o_* constants or -1 on error - - -idc.get_operand_value(): - - Get number used in the operand - - This function returns an immediate number used in the operand - - @param ea: linear address of instruction - @param n: the operand number - - @return: value - operand is an immediate value => immediate value - operand has a displacement => displacement - operand is a direct memory ref => memory address - operand is a register => register number - operand is a register phrase => phrase number - otherwise => -1 - - -idc.get_ordinal_qty(): - - Get number of local types + 1 - - @return: value >= 1. 1 means that there are no local types. - - -idc.get_original_byte(): - - get_original_byte(ea) -> uint64 - - - Get original byte value (that was before patching). This function - works for wide byte processors too. - - @param ea (C++: ea_t) - - -idc.get_prev_bmask(): - - get_prev_bmask(id, bmask) -> bmask_t - - - Get prev bitmask in the enum (bitfield) - - @param id (C++: enum_t) - @param bmask (C++: bmask_t) - @return: value of a bitmask with value lower than the specified value, - or DEFMASK - - -idc.get_prev_enum_member(): - - Get prev constant in the enum - - @param enum_id: id of enum - @param bmask : bitmask of the constant - ordinary enums accept only ida_enum.DEFMASK as a bitmask - @param value: value of the current constant - - @return: value of a constant with value lower than the specified - value. idaapi.BADNODE no such constants exist. - All constants are sorted by their values as unsigned longs. - - -idc.get_prev_fchunk(): - - Get previous function chunk - - @param ea: any address - - @return: the starting address of the function chunk or BADADDR - - @note: This function enumerates all chunks of all functions in the database - - -idc.get_prev_fixup_ea(): - - get_prev_fixup_ea(ea) -> ea_t - - - Find previous address with fixup information - - @param ea: current address (C++: ea_t) - @return: the previous address with fixup information, or BADADDR - - -idc.get_prev_func(): - - Find previous function - - @param ea: any address belonging to the function - - @return: BADADDR - no more functions - otherwise returns the previous function start address - - -idc.get_prev_hash_key(): - - Get the previous key in the hash. - - @param hash_id: The hash ID. - @param key: The current key. - - @return: the previous key, 0 otherwise - - -idc.get_prev_index(): - - Get index of the previous existing array element. - - @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR - @param array_id: The array ID. - @param idx: Index of the current element. - - @return: -1 if no more elements, otherwise returns index of the - previous array element of given type. - - -idc.get_prev_offset(): - - Get previous offset in a structure - - @param sid: structure type ID - @param offset: current offset - - @return: -1 if bad structure type ID is passed, - ida_idaapi.BADADDR if no (more) offsets in the structure, - otherwise returns previous offset in a structure. - - @note: IDA allows 'holes' between members of a - structure. It treats these 'holes' - as unnamed arrays of bytes. - This function returns a member offset or a hole offset. - It will return size of the structure if input - 'offset' is bigger than the structure size. - - @note: Union members are, in IDA's internals, located - at subsequent byte offsets: member 0 -> offset 0x0, - member 1 -> offset 0x1, etc... - - -idc.get_prev_struc_idx(): - - get_prev_struc_idx(idx) -> uval_t - - - Get previous struct index. - - @param idx (C++: uval_t) - @return: BADADDR if resulting index is negative, otherwise idx - 1 - - -idc.get_process_state(): - - get_process_state() -> int - - - Return the state of the currently debugged process. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @return: one of Debugged process states - - -idc.get_processes(): - - get_processes(proclist) -> ssize_t - - - Take a snapshot of running processes and return their description. - \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - @param proclist (C++: procinfo_vec_t *) - @return: number of processes or -1 on error - - -idc.get_qword(): - - get_qword(ea) -> uint64 - - - Get one qword (64-bit) of the program at 'ea'. This function takes - into account order of bytes specified in \inf{is_be()} This function - works only for 8bit byte processors. - - @param ea (C++: ea_t) - - -idc.get_reg_value(): - - Get register value - - @param name: the register name - - @note: The debugger should be running. otherwise the function fails - the register name should be valid. - It is not necessary to use this function to get register values - because a register name in the script will do too. - - @return: register value (integer or floating point) - - -idc.get_ret_tev_return(): - - get_ret_tev_return(n) -> ea_t - - - Get the return address from a function return trace event. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 - represents the latest added trace event. (C++: int) - @return: BADADDR if not a function return event. - - -idc.get_root_filename(): - - get_root_filename() -> ssize_t - - - Get file name only of the input file. - - -idc.get_screen_ea(): - - get_screen_ea() -> ea_t - - - Get the address at the screen cursor ( 'ui_screenea' ) - - -idc.get_segm_attr(): - - Get segment attribute - - @param segea: any address within segment - @param attr: one of SEGATTR_... constants - - -idc.get_segm_by_sel(): - - Get segment by segment base - - @param base: segment base paragraph or selector - - @return: linear address of the start of the segment or BADADDR - if no such segment - - -idc.get_segm_end(): - - Get end address of a segment - - @param ea: any address in the segment - - @return: end of segment (an address past end of the segment) - BADADDR - the specified address doesn't belong to any segment - - -idc.get_segm_name(): - - Get name of a segment - - @param ea: any address in the segment - - @return: "" - no segment at the specified address - - -idc.get_segm_start(): - - Get start address of a segment - - @param ea: any address in the segment - - @return: start of segment - BADADDR - the specified address doesn't belong to any segment - - -idc.get_source_linnum(): - - get_source_linnum(ea) -> uval_t - - -idc.get_sourcefile(): - - get_sourcefile(ea, bounds=None) -> char const * - - - Get name of source file occupying the given address. - - @param ea: linear address (C++: ea_t) - @param bounds: pointer to the output buffer with the address range for - the current file. May be NULL. (C++: range_t *) - @return: NULL if source file information is not found, otherwise - returns pointer to file name - - -idc.get_sp_delta(): - - Get modification of SP made by the instruction - - @param ea: end address of the instruction - i.e.the last address of the instruction+1 - - @return: Get modification of SP made at the specified location - If the specified location doesn't contain a SP change point, return 0 - Otherwise return delta of SP modification - - -idc.get_spd(): - - Get current delta for the stack pointer - - @param ea: end address of the instruction - i.e.the last address of the instruction+1 - - @return: The difference between the original SP upon - entering the function and SP for the specified address - - -idc.get_sreg(): - - Get value of segment register at the specified address - - @param ea: linear address - @param reg: name of segment register - - @return: the value of the segment register or -1 on error - - @note: The segment registers in 32bit program usually contain selectors, - so to get paragraph pointed to by the segment register you need to - call sel2para() function. - - -idc.get_step_trace_options(): - - get_step_trace_options() -> int - - - Get current step tracing options. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @return: Step trace options - - -idc.get_str_type(): - - Get string type - - @param ea: linear address - - @return: One of STRTYPE_... constants - - -idc.get_strlit_contents(): - - Get string contents - @param ea: linear address - @param length: string length. -1 means to calculate the max string length - @param strtype: the string type (one of STRTYPE_... constants) - - @return: string contents or empty string - - -idc.get_struc_by_idx(): - - get_struc_by_idx(idx) -> tid_t - - - Get struct id by struct number. - - - @param idx (C++: uval_t) - - -idc.get_struc_cmt(): - - get_struc_cmt(id, repeatable) -> ssize_t - - - Get struct comment. - - - @param id (C++: tid_t) - @param repeatable (C++: bool) - - -idc.get_struc_id(): - - get_struc_id(name) -> tid_t - - - Get struct id by name. - - - @param name (C++: const char *) - - -idc.get_struc_idx(): - - get_struc_idx(id) -> uval_t - - - Get internal number of the structure. - - - @param id (C++: tid_t) - - -idc.get_struc_name(): - - get_struc_name(id) -> ssize_t - - - Get struct name by id. - - - @param id (C++: tid_t) - - -idc.get_struc_qty(): - - get_struc_qty() -> size_t - - - Get number of known structures. - - -idc.get_struc_size(): - - get_struc_size(sptr) -> asize_t - get_struc_size(id) -> asize_t - - - Get struct size (also see 'get_struc_size(tid_t)' ) - - - @param sptr (C++: const struc_t *) - - -idc.get_tev_ea(): - - get_tev_ea(n) -> ea_t - - -idc.get_tev_qty(): - - get_tev_qty() -> int - - - Get number of trace events available in trace buffer. \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - -idc.get_tev_tid(): - - get_tev_tid(n) -> int - - -idc.get_tev_type(): - - get_tev_type(n) -> int - - -idc.get_thread_qty(): - - get_thread_qty() -> int - - - Get number of threads. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - -idc.get_tinfo(): - - Get type information of function/variable as 'typeinfo' object - - @param ea: the address of the object - @return: None on failure, or (type, fields) tuple. - - -idc.get_trace_file_desc(): - - get_trace_file_desc(filename) -> bool - - - Get the file header of the specified trace file. - - - @param filename (C++: const char *) - - -idc.get_type(): - - Get type of function/variable - - @param ea: the address of the object - - @return: type string or None if failed - - -idc.get_wide_byte(): - - get_wide_byte(ea) -> uint64 - - - Get one wide byte of the program at 'ea'. Some processors may access - more than 8bit quantity at an address. These processors have 32-bit - byte organization from the IDA's point of view. - - @param ea (C++: ea_t) - - -idc.get_wide_dword(): - - get_wide_dword(ea) -> uint64 - - - Get two wide words (4 'bytes') of the program at 'ea'. Some processors - may access more than 8bit quantity at an address. These processors - have 32-bit byte organization from the IDA's point of view. This - function takes into account order of bytes specified in - \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 - - @param ea (C++: ea_t) - - -idc.get_wide_word(): - - get_wide_word(ea) -> uint64 - - - Get one wide word (2 'byte') of the program at 'ea'. Some processors - may access more than 8bit quantity at an address. These processors - have 32-bit byte organization from the IDA's point of view. This - function takes into account order of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - - -idc.get_xref_type(): - - Return type of the last xref obtained by - [RD]first/next[B0] functions. - - @return: constants fl_* or dr_* - - -idc.getn_enum(): - - getn_enum(n) -> enum_t - - - Get enum by its ordinal number (0..n). - - - @param n (C++: size_t) - - -idc.getn_thread(): - - getn_thread(n) -> thid_t - - - Get the ID of a thread. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: - int) - @return: NO_THREAD if the thread doesn't exist. - - -idc.getn_thread_name(): - - getn_thread_name(n) -> char const * - - - Get the NAME of a thread \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 - for the current thread (C++: int) - @return: thread name or NULL if the thread doesn't exist. - - -idc.guess_type(): - - Guess type of function/variable - - @param ea: the address of the object, can be the structure member id too - - @return: type string or None if failed - - -idc.idadir(): - - Get IDA directory - - This function returns the directory where IDA.EXE resides - - -idc.import_type(): - - Copy information from type library to database - Copy structure, union, or enum definition from the type library - to the IDA database. - - @param idx: the position of the new type in the list of - types (structures or enums) -1 means at the end of the list - @param type_name: name of type to copy - - @return: BADNODE-failed, otherwise the type id (structure id or enum id) - - -idc.is_bf(): - - is_bf(id) -> bool - - - Is enum a bitfield? (otherwise - plain enum, no bitmasks except for - 'DEFMASK' are allowed) - - @param id (C++: enum_t) - - -idc.is_event_handled(): - - Is the debug event handled? - - @return: boolean - - -idc.is_loaded(): - Is the byte initialized? - -idc.is_union(): - - Is a structure a union? - - @param sid: structure type ID - - @return: 1: yes, this is a union id - 0: no - - @note: Unions are a special kind of structures - - -idc.is_valid_trace_file(): - - is_valid_trace_file(filename) -> bool - - - Is the specified file a valid trace file for the current database? - - - @param filename (C++: const char *) - - -idc.jumpto(): - - jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool - jumpto(custom_viewer, place, x, y) -> bool - - - Jump to the specified address ( 'ui_jumpto' ). - - @param ea: destination (C++: ea_t) - @param opnum: -1: don't change x coord (C++: int) - @param uijmp_flags: Jump flags (C++: int) - @return: success - - -idc.load_and_run_plugin(): - - load_and_run_plugin(name, arg) -> bool - - - Load & run a plugin. - - - @param name (C++: const char *) - @param arg (C++: size_t) - - -idc.load_debugger(): - - load_debugger(dbgname, use_remote) -> bool - - -idc.load_trace_file(): - - load_trace_file(filename) -> bool - - - Load a recorded trace file in the trace window. If the call succeeds - and 'buf' is not null, the description of the trace stored in the - binary trace file will be returned in 'buf' - - @param filename (C++: const char *) - - -idc.make_array(): - - Create an array. - - @param ea: linear address - @param nitems: size of array in items - - @note: This function will create an array of the items with the same type as - the type of the item at 'ea'. If the byte at 'ea' is undefined, then - this function will create an array of bytes. - - -idc.move_segm(): - - 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 - - @param ea: any address within the segment to move - @param to: new segment start address - @param flags: combination MFS_... constants - - @returns: MOVE_SEGM_... error code - - -idc.msg(): - - msg(o) -> PyObject * - - - Display an UTF-8 string in the message window - - The result of the stringification of the arguments - will be treated as an UTF-8 string. - - @param message: message to print (formatting is done in Python) - - This function can be used to debug IDAPython scripts - - -idc.next_addr(): - - next_addr(ea) -> ea_t - - - Get next address in the program (i.e. next address which has flags). - - @param ea (C++: ea_t) - @return: BADADDR if no such address exist. - - -idc.next_func_chunk(): - - Get the next function chunk of the specified function - - @param funcea: any address in the function - @param tailea: any address in the current chunk - - @return: the starting address of the next function chunk or BADADDR - - @note: This function returns the next chunk of the specified function - - -idc.next_head(): - - Get next defined item (instruction or data) in the program - - @param ea: linear address to start search from - @param maxea: the search will stop at the address - maxea is not included in the search range - - @return: BADADDR - no (more) defined items - - -idc.next_not_tail(): - - next_not_tail(ea) -> ea_t - - - Get address of next non-tail byte. - - @param ea (C++: ea_t) - @return: BADADDR if none exists. - - -idc.op_bin(): - - op_bin(ea, n) -> bool - - - set op type to 'bin_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_chr(): - - op_chr(ea, n) -> bool - - - set op type to 'char_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_dec(): - - op_dec(ea, n) -> bool - - - set op type to 'dec_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_enum(): - - op_enum(ea, n, id, serial) -> bool - - - Set operand representation to be 'enum_t'. If applied to unexplored - bytes, converts them to 16/32bit word data - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @param id: id of enum (C++: enum_t) - @param serial: the serial number of the constant in the enumeration, - usually 0. the serial numbers are used if the - enumeration contains several constants with the same - value (C++: uchar) - @return: success - - -idc.op_flt(): - - op_flt(ea, n) -> bool - - - set op type to 'flt_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_hex(): - - op_hex(ea, n) -> bool - - - set op type to 'hex_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_man(): - - set_forced_operand(ea, n, op) -> bool - - - Set forced operand. - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, 2) (C++: int) - @param op: text of operand NULL: do nothing (return 0) "" : delete - forced operand (C++: const char *) - @return: success - - -idc.op_num(): - - op_num(ea, n) -> bool - - - set op type to 'num_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_oct(): - - op_oct(ea, n) -> bool - - - set op type to 'oct_flag()' - - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.op_offset(): - - op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int - - - See 'op_offset_ex()' - - - @param ea (C++: ea_t) - @param n (C++: int) - @param type (C++: reftype_t) - @param target (C++: ea_t) - @param base (C++: ea_t) - @param tdelta (C++: adiff_t) - - -idc.op_offset_high16(): - - Convert operand to a high offset - High offset is the upper 16bits of an offset. - This type is used by TMS320C6 processors (and probably by other - RISC processors too) - - @param ea: linear address - @param n: number of operand - - 0 - the first operand - - 1 - the second, third and all other operands - - -1 - all operands - @param target: the full value (all 32bits) of the offset - - -idc.op_plain_offset(): - - Convert operand to an offset - (for the explanations of 'ea' and 'n' please see op_bin()) - - Example: - ======== - - seg000:2000 dw 1234h - - and there is a segment at paragraph 0x1000 and there is a data item - within the segment at 0x1234: - - seg000:1234 MyString db 'Hello, world!',0 - - Then you need to specify a linear address of the segment base to - create a proper offset: - - op_plain_offset(["seg000",0x2000],0,0x10000); - - and you will have: - - seg000:2000 dw offset MyString - - Motorola 680x0 processor have a concept of "outer offsets". - If you want to create an outer offset, you need to combine number - of the operand with the following bit: - - Please note that the outer offsets are meaningful only for - Motorola 680x0. - - @param ea: linear address - @param n: number of operand - - 0 - the first operand - - 1 - the second, third and all other operands - - -1 - all operands - @param base: base of the offset as a linear address - If base == BADADDR then the current operand becomes non-offset - - -idc.op_seg(): - - op_seg(ea, n) -> bool - - - Set operand representation to be 'segment'. If applied to unexplored - bytes, converts them to 16/32bit word data - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: success - - -idc.op_stkvar(): - - op_stkvar(ea, n) -> bool - - - Set operand representation to be 'stack variable'. Should be applied - to an instruction within a function. Should be applied after creating - a stack var using 'insn_t::create_stkvar()' . - - @param ea: linear address (C++: ea_t) - @param n: number of operand (0, 1, -1) (C++: int) - @return: success - - -idc.op_stroff(): - - Convert operand to an offset in a structure - - @param ea: linear address - @param n: number of operand - - 0 - the first operand - - 1 - the second, third and all other operands - - -1 - all operands - @param strid: id of a structure type - @param delta: struct offset delta. usually 0. denotes the difference - between the structure base and the pointer into the structure. - - - -idc.parse_decl(): - - Parse type declaration - - @param inputtype: file name or C declarations (depending on the flags) - @param flags: combination of PT_... constants or 0 - - @return: None on failure or (name, type, fields) tuple - - -idc.parse_decls(): - - Parse type declarations - - @param inputtype: file name or C declarations (depending on the flags) - @param flags: combination of PT_... constants or 0 - - @return: number of parsing errors (0 no errors) - - -idc.patch_byte(): - - patch_byte(ea, x) -> bool - - - Patch a byte of the program. The original value of the byte is saved - and can be obtained by 'get_original_byte()' . This function works for - wide byte processors too. - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -idc.patch_dbg_byte(): - - put_dbg_byte(ea, x) -> bool - - - Change one byte of the debugged process memory. - - @param ea: linear address (C++: ea_t) - @param x: byte value (C++: uint32) - @return: true if the process memory has been modified - - -idc.patch_dword(): - - patch_dword(ea, x) -> bool - - - Patch a dword of the program. The original value of the dword is saved - and can be obtained by 'get_original_dword()' . This function DOESN'T - work for wide byte processors. This function takes into account order - of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -idc.patch_qword(): - - patch_qword(ea, x) -> bool - - - Patch a qword of the program. The original value of the qword is saved - and can be obtained by 'get_original_qword()' . This function DOESN'T - work for wide byte processors. This function takes into account order - of bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -idc.patch_word(): - - patch_word(ea, x) -> bool - - - Patch a word of the program. The original value of the word is saved - and can be obtained by 'get_original_word()' . This function works for - wide byte processors too. This function takes into account order of - bytes specified in \inf{is_be()} - - @param ea (C++: ea_t) - @param x (C++: uint64) - - -idc.plan_and_wait(): - - Perform full analysis of the range - - @param sEA: starting linear address - @param eEA: ending linear address (excluded) - @param final_pass: make the final pass over the specified range - - @return: 1-ok, 0-Ctrl-Break was pressed. - - -idc.plan_to_apply_idasgn(): - - plan_to_apply_idasgn(fname) -> int - - - Add a signature file to the list of planned signature files. - - @param fname: file name. should not contain directory part. (C++: - const char *) - @return: 0 if failed, otherwise number of planned (and applied) - signatures - - -idc.prev_addr(): - - prev_addr(ea) -> ea_t - - - Get previous address in the program. - - @param ea (C++: ea_t) - @return: BADADDR if no such address exist. - - -idc.prev_head(): - - Get previous defined item (instruction or data) in the program - - @param ea: linear address to start search from - @param minea: the search will stop at the address - minea is included in the search range - - @return: BADADDR - no (more) defined items - - -idc.prev_not_tail(): - - prev_not_tail(ea) -> ea_t - - - Get address of previous non-tail byte. - - @param ea (C++: ea_t) - @return: BADADDR if none exists. - - -idc.print_decls(): - - Print types in a format suitable for use in a header file - - @param ordinals: comma-separated list of type ordinals - @param flags: combination of PDF_... constants or 0 - - @return: string containing the type definitions - - -idc.print_insn_mnem(): - - Get instruction mnemonics - - @param ea: linear address of instruction - - @return: "" - no instruction at the specified location - - @note: this function may not return exactly the same mnemonics - as you see on the screen. - - -idc.print_operand(): - - Get operand of an instruction or data - - @param ea: linear address of the item - @param n: number of operand: - 0 - the first operand - 1 - the second operand - - @return: the current text representation of operand or "" - - -idc.process_config_line(): - - Parse one or more ida.cfg config directives - @param directive: directives to process, for example: PACK_DATABASE=2 - - @note: If the directives are erroneous, a fatal error will be generated. - The settings are permanent: effective for the current session and the next ones - - -idc.process_ui_action(): - - Invokes an IDA UI action by name - - @param name: Command name - @param flags: Reserved. Must be zero - @return: Boolean - - -idc.put_bookmark(): - - mark_position(ea, lnnum, x, y, slot, comment) - - -idc.qexit(): - - qexit(code) - - - Call qatexit functions, shut down UI and kernel, and exit. - - @param code: exit code (C++: int) - - -idc.qsleep(): - - qsleep the specified number of milliseconds - This function suspends IDA for the specified amount of time - - @param milliseconds: time to sleep - - -idc.read_dbg_byte(): - - Get value of program byte using the debugger memory - - @param ea: linear address - @return: The value or None on failure. - - -idc.read_dbg_dword(): - - Get value of program double-word using the debugger memory - - @param ea: linear address - @return: The value or None on failure. - - -idc.read_dbg_memory(): - - dbg_read_memory(py_ea, py_sz) -> PyObject * - - - Reads from the debugee's memory at the specified ea - @return: - - The read buffer (as a string) - - Or None on failure - - -idc.read_dbg_qword(): - - Get value of program quadro-word using the debugger memory - - @param ea: linear address - @return: The value or None on failure. - - -idc.read_dbg_word(): - - Get value of program word using the debugger memory - - @param ea: linear address - @return: The value or None on failure. - - -idc.read_selection_end(): - - Get end address of the selected range - - @return: BADADDR - the user has not selected an range - - -idc.read_selection_start(): - - Get start address of the selected range - returns BADADDR - the user has not selected an range - - -idc.rebase_program(): - - rebase_program(delta, flags) -> int - - - Rebase the whole program by 'delta' bytes. - - @param delta: number of bytes to move the program (C++: adiff_t) - @param flags: Move segment flags it is recommended to use - MSF_FIXONCE so that the loader takes care of global - variables it stored in the database (C++: int) - @return: Move segment result codes - - -idc.recalc_spd(): - - recalc_spd(cur_ea) -> bool - - - Recalculate SP delta for an instruction that stops execution. The next - instruction is not reached from the current instruction. We need to - recalculate SP for the next instruction.This function will create a - new automatic SP register change point if necessary. It should be - called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the - current instruction doesn't pass the execution flow to the next - instruction. - - @param cur_ea: linear address of the current instruction (C++: ea_t) - - -idc.refresh_debugger_memory(): - - refresh_debugger_memory() -> PyObject * - - - Refreshes the debugger memory - @return: Nothing - - -idc.refresh_idaview_anyway(): - - refresh_idaview_anyway() - - - Refresh all disassembly views ( 'ui_refresh' ), forces an immediate - refresh. Please consider 'request_refresh()' instead - - -idc.refresh_lists(): - - refresh_choosers() - - -idc.remove_fchunk(): - - Remove a function chunk from the function - - @param funcea: any address in the function - @param tailea: any address in the function chunk to remove - - @return: 0 if failed, 1 if success - - -idc.rename_array(): - - Rename array, by its ID. - - @param id: The ID of the array to rename. - @param newname: The new name of the array. - - @return: 1 in case of success, 0 otherwise - - -idc.rename_entry(): - - rename_entry(ord, name, flags=0x0) -> bool - - - Rename entry point. - - @param ord: ordinal number of the entry point (C++: uval_t) - @param name: name of entry point. If the specified location already - has a name, the old name will be appended to a repeatable - comment. (C++: const char *) - @param flags: See AEF_* (C++: int) - @return: success - - -idc.resume_thread(): - - resume_thread(tid) -> int - - - Resume thread. \sq{Type, Synchronous function - available as request, - Notification, none (synchronous function)} - - @param tid: thread id (C++: thid_t) - - -idc.retrieve_input_file_md5(): - - retrieve_input_file_md5() -> bool - - - Get input file md5. - - -idc.rotate_left(): - - Rotate a value to the left (or right) - - @param value: value to rotate - @param count: number of times to rotate. negative counter means - rotate to the right - @param nbits: number of bits to rotate - @param offset: offset of the first bit to rotate - - @return: the value with the specified field rotated - all other bits are not modified - - -idc.run_to(): - - run_to(ea, pid=pid_t(-1), tid=0) -> bool - - - Execute the process until the given address is reached. If no process - is active, a new process is started. Technically, the debugger sets up - a temporary breakpoint at the given address, and continues (or starts) - the execution of the whole process. So, all threads continue their - execution! \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_run_to' } - - @param ea: target address (C++: ea_t) - @param pid: not used yet. please do not specify this parameter. (C++: - pid_t) - @param tid: not used yet. please do not specify this parameter. (C++: - thid_t) - - -idc.save_database(): - - Save current database to the specified idb file - - @param idbname: name of the idb file. if empty, the current idb - file will be used. - @param flags: combination of ida_loader.DBFL_... bits or 0 - - -idc.save_trace_file(): - - save_trace_file(filename, description) -> bool - - - Save the current trace in the specified file. - - - @param filename (C++: const char *) - @param description (C++: const char *) - - -idc.sel2para(): - - Get a selector value - - @param sel: the selector number - - @return: selector value if found - otherwise the input value (sel) - - @note: selector values are always in paragraphs - - -idc.select_thread(): - - select_thread(tid) -> bool - - - Select the given thread as the current debugged thread. All thread - related execution functions will work on this thread. The process must - be suspended to select a new thread. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param tid: ID of the thread to select (C++: thid_t) - @return: false if the thread doesn't exist. - - -idc.selector_by_name(): - - Get segment selector by name - - @param segname: name of segment - - @return: segment selector or BADADDR - - -idc.send_dbg_command(): - Sends a command to the debugger module and returns the output string. - An exception will be raised if the debugger is not running or the current debugger does not export - the 'send_dbg_command' IDC command. - - -idc.set_array_long(): - - Sets the long value of an array element. - - @param array_id: The array ID. - @param idx: Index of an element. - @param value: 32bit or 64bit value to store in the array - - @return: 1 in case of success, 0 otherwise - - -idc.set_array_params(): - - Set array representation format - - @param ea: linear address - @param flags: combination of AP_... constants or 0 - @param litems: number of items per line. 0 means auto - @param align: element alignment - - -1: do not align - - 0: automatic alignment - - other values: element width - - @return: 1-ok, 0-failure - - -idc.set_array_string(): - - Sets the string value of an array element. - - @param array_id: The array ID. - @param idx: Index of an element. - @param value: String value to store in the array - - @return: 1 in case of success, 0 otherwise - - -idc.set_bmask_cmt(): - - Set bitmask comment (only for bitfields) - - @param enum_id: id of enum - @param bmask: bitmask of the constant - @param cmt: comment - repeatable - type of comment, 0-regular, 1-repeatable - - @return: 1-ok, 0-failed - - -idc.set_bmask_name(): - - Set bitmask name (only for bitfields) - - @param enum_id: id of enum - @param bmask: bitmask of the constant - @param name: name of bitmask - - @return: 1-ok, 0-failed - - -idc.set_bpt_attr(): - - modifiable characteristics of a breakpoint - - @param address: any address in the breakpoint range - @param bptattr: the attribute code, one of BPTATTR_* constants - BPTATTR_CND is not allowed, see set_bpt_cond() - @param value: the attibute value - - @return: success - - -idc.set_bpt_cond(): - - Set breakpoint condition - - @param ea: any address in the breakpoint range - @param cnd: breakpoint condition - @param is_lowcnd: 0 - regular condition, 1 - low level condition - - @return: success - - -idc.set_cmt(): - - set_cmt(ea, comm, rptble) -> bool - - - Set an indented comment. - - @param ea: linear address (C++: ea_t) - @param comm: comment string NULL: do nothing (return 0) "" : - delete comment (C++: const char *) - @param rptble: is repeatable? (C++: bool) - @return: success - - -idc.set_color(): - - Set item color - - @param ea: address of the item - @param what: type of the item (one of CIC_* constants) - @param color: new color code in RGB (hex 0xBBGGRR) - - @return: success (True or False) - - -idc.set_debugger_event_cond(): - - set_debugger_event_cond(nonnul_cond) - - -idc.set_debugger_options(): - - set_debugger_options(options) -> uint - - - Set debugger options. Replaces debugger options with the specification - combination 'Debugger options' - - @param options (C++: uint) - @return: the old debugger options - - -idc.set_default_sreg_value(): - - Set default segment register value for a segment - - @param ea: any address in the segment - if no segment is present at the specified address - then all segments will be affected - @param reg: name of segment register - @param value: default value of the segment register. -1-undefined. - - -idc.set_enum_bf(): - - set_enum_bf(id, bf) -> bool - - - Set 'bitfield' bit of enum (i.e. convert it to a bitfield) - - - @param id (C++: enum_t) - @param bf (C++: bool) - - -idc.set_enum_cmt(): - - set_enum_cmt(id, cmt, repeatable) -> bool - - - Set comment for enum type. - - - @param id (C++: enum_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -idc.set_enum_flag(): - - set_enum_flag(id, flag) -> bool - - - Set data representation flags. - - - @param id (C++: enum_t) - @param flag (C++: flags_t) - - -idc.set_enum_idx(): - - set_enum_idx(id, idx) -> bool - - - Set serial number of enum. Also see 'get_enum_idx()' . - - @param id (C++: enum_t) - @param idx (C++: size_t) - - -idc.set_enum_member_cmt(): - - set_enum_member_cmt(id, cmt, repeatable) -> bool - - - Set comment for enum member. - - - @param id (C++: const_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -idc.set_enum_member_name(): - - set_enum_member_name(id, name) -> bool - - - Set name of enum member. - - - @param id (C++: const_t) - @param name (C++: const char *) - - -idc.set_enum_name(): - - set_enum_name(id, name) -> bool - - - Set name of enum type. - - - @param id (C++: enum_t) - @param name (C++: const char *) - - -idc.set_enum_width(): - - set_enum_width(id, width) -> bool - - - See comment for 'get_enum_width()' - - - @param id (C++: enum_t) - @param width (C++: int) - - -idc.set_fchunk_attr(): - - Set a function chunk attribute - - @param ea: any address in the chunk - @param attr: only FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER - @param value: desired value - - @return: 0 if failed, 1 if success - - -idc.set_fixup(): - - Set fixup information - - @param ea: address to set fixup information about - @param fixuptype: fixup type. see get_fixup_target_type() - for possible fixup types. - @param fixupflags: fixup flags. see get_fixup_target_flags() - for possible fixup types. - @param targetsel: target selector - @param targetoff: target offset - @param displ: displacement - - @return: none - - -idc.set_frame_size(): - - Make function frame - - @param ea: any address belonging to the function - @param lvsize: size of function local variables - @param frregs: size of saved registers - @param argsize: size of function arguments - - @return: ID of function frame or -1 - If the function did not have a frame, the frame - will be created. Otherwise the frame will be modified - - -idc.set_func_attr(): - - Set a function attribute - - @param ea: any address belonging to the function - @param attr: one of FUNCATTR_... constants - @param value: new value of the attribute - - @return: 1-ok, 0-failed - - -idc.set_func_cmt(): - - Set function comment - - @param ea: any address belonging to the function - @param cmt: a function comment line - @param repeatable: 1: get repeatable comment - 0: get regular comment - - -idc.set_func_end(): - - set_func_end(ea, newend) -> bool - - - Move function chunk end address. - - @param ea: any address in the function (C++: ea_t) - @param newend: new end address of the function (C++: ea_t) - @return: success - - -idc.set_func_flags(): - - Change function flags - - @param ea: any address belonging to the function - @param flags: see get_func_flags() for explanations - - @return: !=0 - ok - - -idc.set_hash_long(): - - Sets the long value of a hash element. - - @param hash_id: The hash ID. - @param key: Key of an element. - @param value: 32bit or 64bit value to store in the hash - - @return: 1 in case of success, 0 otherwise - - -idc.set_hash_string(): - - Sets the string value of a hash element. - - @param hash_id: The hash ID. - @param key: Key of an element. - @param value: string value to store in the hash - - @return: 1 in case of success, 0 otherwise - - -idc.set_ida_state(): - - set_ida_state(st) -> idastate_t - - - Change IDA status indicator value - - @param st: - new indicator status (C++: idastate_t) - @return: old indicator status - - -idc.set_local_type(): - - Parse one type declaration and store it in the specified slot - - @param ordinal: slot number (1...NumberOfLocalTypes) - -1 means allocate new slot or reuse the slot - of the existing named type - @param input: C declaration. Empty input empties the slot - @param flags: combination of PT_... constants or 0 - - @return: slot number or 0 if error - - -idc.set_manual_insn(): - - set_manual_insn(ea, manual_insn) - - - Set manual instruction string. - - @param ea: linear address of the instruction or data item (C++: ea_t) - @param manual_insn: "" - delete manual string. NULL - do nothing (C++: - const char *) - - -idc.set_member_cmt(): - - Change structure member comment - - @param sid: structure type ID - @param member_offset: offset of the member - @param comment: new comment of the structure member - @param repeatable: 1: change repeatable comment - 0: change regular comment - - @return: != 0 - ok - - -idc.set_member_name(): - - Change structure member name - - @param sid: structure type ID - @param member_offset: offset of the member - @param name: new name of the member - - @return: != 0 - ok. - - -idc.set_member_type(): - - Change structure member type - - @param sid: structure type ID - @param member_offset: offset of the member - @param flag: new type of the member. Should be one of - FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA - @param typeid: if is_struct(flag) then typeid specifies the structure id for the member - if is_off0(flag) then typeid specifies the offset base. - if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). - if is_stroff(flag) then typeid specifies the structure id - if is_enum(flag) then typeid specifies the enum id - if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) - Otherwise typeid should be -1. - @param nitems: number of items in the member - - @param target: target address of the offset expr. You may specify it as - -1, ida will calculate it itself - @param tdelta: offset target delta. usually 0 - @param reftype: see REF_... definitions - - @note: The remaining arguments are allowed only if is_off0(flag) and you want - to specify a complex offset expression - - @return: !=0 - ok. - - -idc.set_name(): - - Rename an address - - @param ea: linear address - @param name: new name of address. If name == "", then delete old name - @param flags: combination of SN_... constants - - @return: 1-ok, 0-failure - - -idc.set_processor_type(): - - set_processor_type(procname, level) -> bool - - - Set target processor type. Once a processor module is loaded, it - cannot be replaced until we close the idb. - - @param procname: name of processor type (one of names present in - \ph{psnames}) (C++: const char *) - @param level: SETPROC_ (C++: setproc_level_t) - @return: success - - -idc.set_reg_value(): - - Set register value - - @param name: the register name - @param value: new register value - - @note: The debugger should be running - It is not necessary to use this function to set register values. - A register name in the left side of an assignment will do too. - - -idc.set_remote_debugger(): - - set_remote_debugger(host, _pass, port=-1) - - - Set remote debugging options. Should be used before starting the - debugger. - - @param host: If empty, IDA will use local debugger. If NULL, the host - will not be set. (C++: const char *) - @param port: If -1, the default port number will be used (C++: int) - - -idc.set_root_filename(): - - set_root_filename(file) - - - Set full path of the input file. - - - @param file (C++: const char *) - - -idc.set_segm_addressing(): - - Change segment addressing - - @param ea: any address in the segment - @param bitness: 0: 16bit, 1: 32bit, 2: 64bit - - @return: success (boolean) - - -idc.set_segm_alignment(): - - Change alignment of the segment - - @param ea: any address in the segment - @param alignment: new alignment of the segment (one of the sa... constants) - - @return: success (boolean) - - -idc.set_segm_attr(): - - Set segment attribute - - @param segea: any address within segment - @param attr: one of SEGATTR_... constants - - @note: Please note that not all segment attributes are modifiable. - Also some of them should be modified using special functions - like set_segm_addressing, etc. - - -idc.set_segm_class(): - - Change class of the segment - - @param ea: any address in the segment - @param segclass: new class of the segment - - @return: success (boolean) - - -idc.set_segm_combination(): - - Change combination of the segment - - @param segea: any address in the segment - @param comb: new combination of the segment (one of the sc... constants) - - @return: success (boolean) - - -idc.set_segm_name(): - - Change name of the segment - - @param ea: any address in the segment - @param name: new name of the segment - - @return: success (boolean) - - -idc.set_segm_type(): - - Set segment type - - @param segea: any address within segment - @param segtype: new segment type: - - @return: !=0 - ok - - -idc.set_segment_bounds(): - - Change segment boundaries - - @param ea: any address in the segment - @param startea: new start address of the segment - @param endea: new end address of the segment - @param flags: combination of SEGMOD_... flags - - @return: boolean success - - -idc.set_selector(): - - set_selector(selector, paragraph) -> int - - - Set mapping of selector to a paragraph. You should call this - functionbeforecreating a segment which uses the selector, otherwise - the creation of the segment will fail. - - @param selector: number of selector to map if selector == BADSEL , - then return 0 (fail) if the selector has had a - mapping, old mapping is destroyed if the selector - number is equal to paragraph value, then the mapping - is destroyed because we don't need to keep trivial - mappings. (C++: sel_t) - @param paragraph: paragraph to map selector (C++: ea_t) - - -idc.set_source_linnum(): - - set_source_linnum(ea, lnnum) - - -idc.set_step_trace_options(): - - set_step_trace_options(options) - - - Modify step tracing options. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param options (C++: int) - - -idc.set_storage_type(): - - change_storage_type(start_ea, end_ea, stt) -> error_t - - - Change flag storage type for address range. - - @param start_ea: should be lower than end_ea. (C++: ea_t) - @param end_ea: does not belong to the range. (C++: ea_t) - @param stt: storage_type_t (C++: storage_type_t) - @return: error code - - -idc.set_struc_cmt(): - - set_struc_cmt(id, cmt, repeatable) -> bool - - - Set structure comment. - - - @param id (C++: tid_t) - @param cmt (C++: const char *) - @param repeatable (C++: bool) - - -idc.set_struc_idx(): - - Change structure index - - @param sid: structure type ID - @param index: new index of the structure - - @return: != 0 - ok - - @note: See get_first_struc_idx() for the explanation of - structure indices and IDs. - - -idc.set_struc_name(): - - set_struc_name(id, name) -> bool - - - Set structure name. - - - @param id (C++: tid_t) - @param name (C++: const char *) - - -idc.set_tail_owner(): - - Change the function chunk owner - - @param tailea: any address in the function chunk - @param funcea: the starting address of the new owner - - @return: False if failed, True if success - - @note: The new owner must already have the chunk appended before the call - - -idc.set_target_assembler(): - - set_target_assembler(asmnum) -> bool - - - Set target assembler. - - @param asmnum: number of assembler in the current processor module - (C++: int) - @return: success - - -idc.set_trace_file_desc(): - - set_trace_file_desc(filename, description) -> bool - - - Change the description of the specified trace file. - - - @param filename (C++: const char *) - @param description (C++: const char *) - - -idc.split_sreg_range(): - - Set value of a segment register. - - @param ea: linear address - @param reg: name of a register, like "cs", "ds", "es", etc. - @param value: new value of the segment register. - @param tag: of SR_... constants - - @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. - - -idc.start_process(): - - start_process(path=None, args=None, sdir=None) -> int - - - Start a process in the debugger. \sq{Type, Asynchronous function - - available as Request, Notification, 'dbg_process_start' }You can also - use the 'run_to()' function to easily start the execution of a process - until a given address is reached.For all parameters, a NULL value - indicates the debugger will take the value from the defined Process - Options. - - @param path: path to the executable to start (C++: const char *) - @param args: arguments to pass to process (C++: const char *) - @param sdir: starting directory for the process (C++: const char *) - - -idc.step_into(): - - step_into() -> bool - - - Execute one instruction in the current thread. Other threads are kept - suspended. \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_step_into' } - - -idc.step_over(): - - step_over() -> bool - - - Execute one instruction in the current thread, but without entering - into functions. Others threads keep suspended. \sq{Type, Asynchronous - function - available as Request, Notification, 'dbg_step_over' } - - -idc.step_until_ret(): - - step_until_ret() -> bool - - - Execute instructions in the current thread until a function return - instruction is executed (aka "step out"). Other threads are kept - suspended. \sq{Type, Asynchronous function - available as Request, - Notification, 'dbg_step_until_ret' } - - -idc.suspend_process(): - - suspend_process() -> bool - - - Suspend the process in the debugger. \sq{ Type,Synchronous function - (if in a notification handler)Asynchronous function (everywhere - else)available as Request, Notification,none (if in a notification - handler) 'dbg_suspend_process' (everywhere else) }The - 'suspend_process()' function can be called from a notification handler - to force the stopping of the process. In this case, no notification - will be generated. When you suspend a process, the running command is - always aborted. - - -idc.suspend_thread(): - - suspend_thread(tid) -> int - - - Suspend thread. Suspending a thread may deadlock the whole application - if the suspended was owning some synchronization objects. \sq{Type, - Synchronous function - available as request, Notification, none - (synchronous function)} - - @param tid: thread id (C++: thid_t) - - -idc.take_memory_snapshot(): - - take_memory_snapshot(only_loader_segs) -> bool - - - Take a memory snapshot of the running process. - - @param only_loader_segs: only is_loader_segm() segments will be - affected (C++: bool) - @return: success - - -idc.to_ea(): - - Return value of expression: ((seg<<4) + off) - - -idc.toggle_bnot(): - - Toggle the bitwise not operator for the operand - - @param ea: linear address - @param n: number of operand - - 0 - the first operand - - 1 - the second, third and all other operands - - -1 - all operands - - -idc.toggle_sign(): - - toggle_sign(ea, n) -> bool - - - Toggle sign of n-th operand. allowed values of n: 0-first operand, - 1-other operands - - @param ea (C++: ea_t) - @param n (C++: int) - - -idc.update_extra_cmt(): - - update_extra_cmt(ea, what, str) - - -idc.update_hidden_range(): - - Set hidden range state - - @param ea: any address belonging to the hidden range - @param visible: new state of the range - - @return: != 0 - ok - - -idc.validate_idb_names(): - - check consistency of IDB name records - @param do_repair: try to repair netnode header it TRUE - @return: number of inconsistent name records - - -idc.wait_for_next_event(): - - wait_for_next_event(wfne, timeout) -> dbg_event_code_t - - - Wait for the next event.This function (optionally) resumes the process - execution, and waits for a debugger event until a possible timeout - occurs. - - @param wfne: combination of Wait for debugger event flags constants - (C++: int) - @param timeout: number of seconds to wait, -1-infinity (C++: int) - @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= - 0) - - -idc.warning(): - - warning(format) - - - Display a message in a message box - - @param message: message to print (formatting is done in Python) - - This function can be used to debug IDAPython scripts - The user will be able to hide messages if they appear twice in a row on - the screen - - -idc.write_dbg_memory(): - - Write to debugger memory. - - @param ea: linear address - @param data: string to write - @return: number of written bytes (-1 - network/debugger error) - - Thread-safe function (may be called only from the main thread and debthread) - - diff --git a/release_pydoc_injections2.txt b/release_pydoc_injections2.txt new file mode 100644 index 0000000..db4f426 --- /dev/null +++ b/release_pydoc_injections2.txt @@ -0,0 +1,78888 @@ +Help on function auto_apply_tail in module ida_auto: + +auto_apply_tail(*args) + auto_apply_tail(tail_ea, parent_ea) + + + Plan to apply the tail_ea chunk to the parent + + @param tail_ea: linear address of start of tail (C++: ea_t) + @param parent_ea: linear address within parent. If BADADDR, + automatically try to find parent via xrefs. (C++: + ea_t) + +Help on function auto_apply_type in module ida_auto: + +auto_apply_type(*args) + auto_apply_type(caller, callee) + + + Plan to apply the callee's type to the calling point. + + + @param caller (C++: ea_t) + @param callee (C++: ea_t) + +Help on function auto_cancel in module ida_auto: + +auto_cancel(*args) + auto_cancel(ea1, ea2) + + + Remove an address range (ea1..ea2) from queues 'AU_CODE' , 'AU_PROC' , + 'AU_USED' . To remove an address range from other queues use + 'auto_unmark()' function. 'ea1' may be higher than 'ea2', the kernel + will swap them in this case. 'ea2' doesn't belong to the range. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on class auto_display_t in module ida_auto: + +class auto_display_t(__builtin__.object) + | Proxy of C++ auto_display_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> auto_display_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | auto_display_t_ea_get(self) -> ea_t + | + | state + | auto_display_t_state_get(self) -> idastate_t + | + | thisown + | The membership flag + | + | type + | auto_display_t_type_get(self) -> atype_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_auto_display_t(self) + +Help on function auto_get in module ida_auto: + +auto_get(*args) + auto_get(type, lowEA, highEA) -> ea_t + + + Retrieve an address from queues regarding their priority. Returns + 'BADADDR' if no addresses not lower than 'lowEA' and less than + 'highEA' are found in the queues. Otherwise *type will have queue + type. + + @param type (C++: atype_t *) + @param lowEA (C++: ea_t) + @param highEA (C++: ea_t) + +Help on function auto_is_ok in module ida_auto: + +auto_is_ok(*args) + auto_is_ok() -> bool + + + Are all queues empty? (i.e. has autoanalysis finished?). + +Help on function auto_make_code in module ida_auto: + +auto_make_code(*args) + auto_make_code(ea) + + + Plan to make code. + + + @param ea (C++: ea_t) + +Help on function auto_make_proc in module ida_auto: + +auto_make_proc(*args) + auto_make_proc(ea) + + + Plan to make code&function. + + + @param ea (C++: ea_t) + +Help on function auto_mark in module ida_auto: + +auto_mark(*args) + auto_mark(ea, type) + + + Put single address into a queue. Queues keep addresses sorted. + + + @param ea (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_mark_range in module ida_auto: + +auto_mark_range(*args) + auto_mark_range(start, end, type) + + + Put range of addresses into a queue. 'start' may be higher than 'end', + the kernel will swap them in this case. 'end' doesn't belong to the + range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_recreate_insn in module ida_auto: + +auto_recreate_insn(*args) + auto_recreate_insn(ea) -> int + + + Try to create instruction + + @param ea: linear address of callee (C++: ea_t) + @return: the length of the instruction or 0 + +Help on function auto_unmark in module ida_auto: + +auto_unmark(*args) + auto_unmark(start, end, type) + + + Remove range of addresses from a queue. 'start' may be higher than + 'end', the kernel will swap them in this case. 'end' doesn't belong to + the range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_wait in module ida_auto: + +auto_wait(*args) + auto_wait() -> bool + + + Process everything in the queues and return true. + + @return: false if the user clicked cancel. (the wait box must be + displayed by the caller if desired) + +Help on function auto_wait_range in module ida_auto: + +auto_wait_range(*args) + auto_wait_range(ea1, ea2) -> ssize_t + + + Process everything in the specified range and return true. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + @return: number of autoanalysis steps made. -1 if the user clicked + cancel. (the wait box must be displayed by the caller if + desired) + +Help on function enable_auto in module ida_auto: + +enable_auto(*args) + enable_auto(enable) -> bool + + + Temporarily enable/disable autoanalyzer. Not user-facing, but rather + because IDA sometimes need to turn AA on/off regardless of + inf.s_genflags:INFFL_AUTO + + @param enable (C++: bool) + @return: old state + +Help on function get_auto_display in module ida_auto: + +get_auto_display(*args) + get_auto_display(auto_display) + + + Get structure which holds the autoanalysis indicator contents. + + + @param auto_display (C++: auto_display_t *) + +Help on function get_auto_state in module ida_auto: + +get_auto_state(*args) + get_auto_state() -> atype_t + + + Get current state of autoanalyzer. If auto_state == 'AU_NONE' , IDA is + currently not running the analysis (it could be temporarily + interrupted to perform the user's requests, for example). + +Help on function is_auto_enabled in module ida_auto: + +is_auto_enabled(*args) + is_auto_enabled() -> bool + + + Get autoanalyzer state. + +Help on function may_create_stkvars in module ida_auto: + +may_create_stkvars(*args) + may_create_stkvars() -> bool + + + Is it allowed to create stack variables automatically?. This function + should be used by IDP modules before creating stack vars. + +Help on function may_trace_sp in module ida_auto: + +may_trace_sp(*args) + may_trace_sp() -> bool + + + Is it allowed to trace stack pointer automatically?. This function + should be used by IDP modules before tracing sp. + +Help on function peek_auto_queue in module ida_auto: + +peek_auto_queue(*args) + peek_auto_queue(low_ea, type) -> ea_t + + + Peek into a queue 'type' for an address not lower than 'low_ea'. Do + not remove address from the queue. + + @param low_ea (C++: ea_t) + @param type (C++: atype_t) + @return: the address or BADADDR + +Help on function plan_and_wait in module ida_auto: + +plan_and_wait(*args) + plan_and_wait(ea1, ea2, final_pass=True) -> int + + + Analyze the specified range. Try to create instructions where + possible. Make the final pass over the specified range if specified. + This function doesn't return until the range is analyzed. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + @param final_pass (C++: bool) + +Help on function plan_ea in module ida_auto: + +plan_ea(*args) + plan_ea(ea) + + + Plan to perform reanalysis. + + + @param ea (C++: ea_t) + +Help on function plan_range in module ida_auto: + +plan_range(*args) + plan_range(sEA, eEA) + + + Plan to perform reanalysis. + + + @param sEA (C++: ea_t) + @param eEA (C++: ea_t) + +Help on function reanalyze_callers in module ida_auto: + +reanalyze_callers(*args) + reanalyze_callers(ea, noret) + + + Plan to reanalyze callers of the specified address. This function will + add to 'AU_USED' queue all instructions that call (not jump to) the + specified address. + + @param ea: linear address of callee (C++: ea_t) + @param noret: !=0: the callee doesn't return, mark to undefine + subsequent instructions in the caller. 0: do nothing. + (C++: bool) + +Help on function revert_ida_decisions in module ida_auto: + +revert_ida_decisions(*args) + revert_ida_decisions(ea1, ea2) + + + Delete all analysis info that IDA generated for for the given range. + + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on function set_auto_state in module ida_auto: + +set_auto_state(*args) + set_auto_state(new_state) -> atype_t + + + Set current state of autoanalyzer. + + @param new_state: new state of autoanalyzer (C++: atype_t) + @return: previous state + +Help on function set_ida_state in module ida_auto: + +set_ida_state(*args) + set_ida_state(st) -> idastate_t + + + Change IDA status indicator value + + @param st: - new indicator status (C++: idastate_t) + @return: old indicator status + +Help on function show_addr in module ida_auto: + +show_addr(*args) + show_addr(ea) + + + Show an address on the autoanalysis indicator. The address is + displayed in the form " @:12345678". + + @param ea: - linear address to display (C++: ea_t) + +Help on function show_auto in module ida_auto: + +show_auto(*args) + show_auto(ea, type=AU_NONE) + + + Change autoanalysis indicator value. + + @param ea: linear address being analyzed (C++: ea_t) + @param type: autoanalysis type (see Autoanalysis queues ) (C++: + atype_t) + +Help on function __walk_types_and_formats in module ida_bytes: + +__walk_types_and_formats(formats, type_action, format_action, installing) + # ----------------------------------------------------------------------- + +Help on function add_byte in module ida_bytes: + +add_byte(*args) + add_byte(ea, value) + + + Add a value to one byte of the program. This function works for wide + byte processors too. + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint32) + +Help on function add_dword in module ida_bytes: + +add_dword(*args) + add_dword(ea, value) + + + Add a value to one dword of the program. This function works for wide + byte processors too. This function takes into account order of bytes + specified in \inf{is_be()}this function works incorrectly if + \ph{nbits} > 16 + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function add_hidden_range in module ida_bytes: + +add_hidden_range(*args) + add_hidden_range(ea1, ea2, description, header, footer, color) -> bool + + + Mark a range of addresses as hidden. The range will be created in the + invisible state with the default color + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (C++: ea_t) + @param description: range parameters (C++: const char *) + @param header: range parameters (C++: const char *) + @param footer: range parameters (C++: const char *) + @param color (C++: bgcolor_t) + @return: success + +Help on function add_mapping in module ida_bytes: + +add_mapping(*args) + add_mapping(_from, to, size) -> bool + + + IDA supports memory mapping. References to the addresses from the + mapped range use data and meta-data from the mapping range.You should + set flag PR2_MAPPING in ph.flag2 to use memory mapping Add memory + mapping range. + + @param _from: start of the mapped range (nonexistent address) (C++: + ea_t) + @param to: start of the mapping range (existent address) (C++: ea_t) + @param size: size of the range (C++: asize_t) + @return: success + +Help on function add_qword in module ida_bytes: + +add_qword(*args) + add_qword(ea, value) + + + Add a value to one qword of the program. This function does not work + for wide byte processors. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function add_word in module ida_bytes: + +add_word(*args) + add_word(ea, value) + + + Add a value to one word of the program. This function works for wide + byte processors too. This function takes into account order of bytes + specified in \inf{is_be()} + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function align_flag in module ida_bytes: + +align_flag(*args) + align_flag() -> flags_t + + + Get a flags_t representing an alignment directive. + +Help on function append_cmt in module ida_bytes: + +append_cmt(*args) + append_cmt(ea, str, rptble) -> bool + + + Append to an indented comment. Creates a new comment if none exists. + Appends a newline character and the specified string otherwise. + + @param ea: linear address (C++: ea_t) + @param str: comment string to append (C++: const char *) + @param rptble: append to repeatable comment? (C++: bool) + @return: success + +Help on function attach_custom_data_format in module ida_bytes: + +attach_custom_data_format(*args) + attach_custom_data_format(dtid, dfid) -> bool + + + Attach the data format to the data type. + + @param dtid: data type id that can use the data format. 0 means all + standard data types. Such data formats can be applied to + any data item or instruction operands. For instruction + operands, the data_format_t::value_size check is not + performed by the kernel. (C++: int) + @param dfid: data format id (C++: int) + +Help on function bin_flag in module ida_bytes: + +bin_flag(*args) + bin_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function bin_search in module ida_bytes: + +bin_search(*args) + bin_search(start_ea, end_ea, image, imask, step, flags) -> ea_t + +Help on function byte_flag in module ida_bytes: + +byte_flag(*args) + byte_flag() -> flags_t + + + Get a flags_t representing a byte. + +Help on function bytesize in module ida_bytes: + +bytesize(*args) + bytesize(ea) -> int + + + Get number of bytes required to store a byte at the given address. + + + @param ea (C++: ea_t) + +Help on function calc_def_align in module ida_bytes: + +calc_def_align(*args) + calc_def_align(ea, mina, maxa) -> int + + + Calculate default alignment. + + + @param ea (C++: ea_t) + @param mina (C++: int) + @param maxa (C++: int) + +Help on function calc_dflags in module ida_bytes: + +calc_dflags(*args) + calc_dflags(f, force) -> flags_t + +Help on function calc_max_align in module ida_bytes: + +calc_max_align(*args) + calc_max_align(endea) -> int + + + Returns: 0..32. + + + @param endea (C++: ea_t) + +Help on function calc_max_item_end in module ida_bytes: + +calc_max_item_end(*args) + calc_max_item_end(ea, how=15) -> ea_t + + + Calculate maximal reasonable end address of a new item. This function + will limit the item with the current segment bounds. + + @param ea: linear address (C++: ea_t) + @param how: when to stop the search. A combination of Item end search + flags (C++: int) + @return: end of new item. If it is not possible to create an item, it + will return 'ea'. + +Help on function calc_min_align in module ida_bytes: + +calc_min_align(*args) + calc_min_align(length) -> int + + + Returns: 1..32. + + + @param length (C++: asize_t) + +Help on function can_define_item in module ida_bytes: + +can_define_item(*args) + can_define_item(ea, length, flags) -> bool + + + Can define item (instruction/data) of the specified 'length', starting + at 'ea'?if there is an item starting at 'ea', this function ignores + itthis function converts to unexplored all encountered data items with + fixup information. Should be fixed in the future.a new item would + cross segment boundariesa new item would overlap with existing items + (except items specified by 'flags') + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param flags: if not 0, then the kernel will ignore the data types + specified by the flags and destroy them. For example: + 1000 dw 5 1002 db 5 ; undef + 1003 db 5 ; undef 1004 dw 5 + 1006 dd 5 can_define_item(1000, 6, 0) + - false because of dw at 1004 can_define_item(1000, + 6, word_flag()) - true, word at 1004 is destroyed (C++: + flags_t) + @return: 1-yes, 0-no + +Help on function change_storage_type in module ida_bytes: + +change_storage_type(*args) + change_storage_type(start_ea, end_ea, stt) -> error_t + + + Change flag storage type for address range. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: error code + +Help on function char_flag in module ida_bytes: + +char_flag(*args) + char_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function chunk_size in module ida_bytes: + +chunk_size(*args) + chunk_size(ea) -> asize_t + + + Get size of the contiguous address block containing 'ea'. + + @param ea (C++: ea_t) + @return: 0 if 'ea' doesn't belong to the program. + +Help on function chunk_start in module ida_bytes: + +chunk_start(*args) + chunk_start(ea) -> ea_t + + + Get start of the contiguous address block containing 'ea'. + + @param ea (C++: ea_t) + @return: BADADDR if 'ea' doesn't belong to the program. + +Help on function clr_lzero in module ida_bytes: + +clr_lzero(*args) + clr_lzero(ea, n) -> bool + + + Clear lzero bit. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function clr_op_type in module ida_bytes: + +clr_op_type(*args) + clr_op_type(ea, n) -> bool + + + Remove operand representation information. (set operand representation + to be 'undefined') + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function code_flag in module ida_bytes: + +code_flag(*args) + code_flag() -> flags_t + + + 'FF_CODE' + +Help on function create_16bit_data in module ida_bytes: + +create_16bit_data(*args) + create_16bit_data(ea, length) -> bool + + + Convert to 16-bit quantity (take byte size into account) + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + +Help on function create_32bit_data in module ida_bytes: + +create_32bit_data(*args) + create_32bit_data(ea, length) -> bool + + + Convert to 32-bit quantity (take byte size into account) + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + +Help on function create_align in module ida_bytes: + +create_align(*args) + create_align(ea, length, alignment) -> bool + + + Alignment: 0 or 2..32. If it is 0, is will be calculated. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param alignment (C++: int) + +Help on function create_byte in module ida_bytes: + +create_byte(*args) + create_byte(ea, length, force=False) -> bool + + + Convert to byte. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_custdata in module ida_bytes: + +create_custdata(*args) + create_custdata(ea, length, dtid, fid, force=False) -> bool + + + Convert to custom data type. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param dtid (C++: int) + @param fid (C++: int) + @param force (C++: bool) + +Help on function create_data in module ida_bytes: + +create_data(*args) + create_data(ea, dataflag, size, tid) -> bool + + + Convert to data (byte, word, dword, etc). This function may be used to + create arrays. + + @param ea: linear address (C++: ea_t) + @param dataflag: type of data. Value of function byte_flag() , + word_flag() , etc. (C++: flags_t) + @param size: size of array in bytes. should be divisible by the size + of one item of the specified type. for variable sized + items it can be specified as 0, and the kernel will try + to calculate the size. (C++: asize_t) + @param tid: type id. If the specified type is a structure, then tid is + structure id. Otherwise should be BADNODE . (C++: tid_t) + @return: success + +Help on function create_double in module ida_bytes: + +create_double(*args) + create_double(ea, length, force=False) -> bool + + + Convert to double. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_dword in module ida_bytes: + +create_dword(*args) + create_dword(ea, length, force=False) -> bool + + + Convert to dword. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_float in module ida_bytes: + +create_float(*args) + create_float(ea, length, force=False) -> bool + + + Convert to float. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_oword in module ida_bytes: + +create_oword(*args) + create_oword(ea, length, force=False) -> bool + + + Convert to octaword/xmm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_packed_real in module ida_bytes: + +create_packed_real(*args) + create_packed_real(ea, length, force=False) -> bool + + + Convert to packed decimal real. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_qword in module ida_bytes: + +create_qword(*args) + create_qword(ea, length, force=False) -> bool + + + Convert to quadword. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_strlit in module ida_bytes: + +create_strlit(*args) + create_strlit(start, len, strtype) -> bool + + + Convert to string literal and give a meaningful name. 'start' may be + higher than 'end', the kernel will swap them in this case + + @param start: starting address (C++: ea_t) + @param len: length of the string in bytes. if 0, then + get_max_strlit_length() will be used to determine the + length (C++: size_t) + @param strtype: string type. one of String type codes (C++: int32) + @return: success + +Help on function create_struct in module ida_bytes: + +create_struct(*args) + create_struct(ea, length, tid, force=False) -> bool + + + Convert to struct. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param tid (C++: tid_t) + @param force (C++: bool) + +Help on function create_tbyte in module ida_bytes: + +create_tbyte(*args) + create_tbyte(ea, length, force=False) -> bool + + + Convert to tbyte. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_word in module ida_bytes: + +create_word(*args) + create_word(ea, length, force=False) -> bool + + + Convert to word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_yword in module ida_bytes: + +create_yword(*args) + create_yword(ea, length, force=False) -> bool + + + Convert to ymm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_zword in module ida_bytes: + +create_zword(*args) + create_zword(ea, length, force=False) -> bool + + + Convert to zmm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function cust_flag in module ida_bytes: + +cust_flag(*args) + cust_flag() -> flags_t + + + Get a flags_t representing custom type data. + +Help on function custfmt_flag in module ida_bytes: + +custfmt_flag(*args) + custfmt_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on class data_format_t in module ida_bytes: + +class data_format_t(__builtin__.object) + | Proxy of C++ data_format_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | + | __real__init__ = __init__(self, *args) + | __init__(self, _self, name, value_size=0, menu_name=None, props=0, hotkey=None, text_width=0) -> data_format_t + | + | __repr__ = _swig_repr(self) + | + | _data_format_t__get_id = __get_id(self, *args) + | __get_id(self) -> int + | + | is_present_in_menus(self, *args) + | is_present_in_menus(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hotkey + | data_format_t_hotkey_get(self) -> char const * + | + | id + | __get_id(self) -> int + | + | menu_name + | data_format_t_menu_name_get(self) -> char const * + | + | name + | data_format_t_name_get(self) -> char const * + | + | props + | data_format_t_props_get(self) -> int + | + | text_width + | data_format_t_text_width_get(self) -> int32 + | + | thisown + | The membership flag + | + | value_size + | data_format_t_value_size_get(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_data_format_t(self) + +Help on class data_type_t in module ida_bytes: + +class data_type_t(__builtin__.object) + | Proxy of C++ data_type_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | + | __real__init__ = __init__(self, *args) + | __init__(self, _self, name, value_size=0, menu_name=None, hotkey=None, asm_keyword=None, props=0) -> data_type_t + | + | __repr__ = _swig_repr(self) + | + | _data_type_t__get_id = __get_id(self, *args) + | __get_id(self) -> int + | + | is_present_in_menus(self, *args) + | is_present_in_menus(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | asm_keyword + | data_type_t_asm_keyword_get(self) -> char const * + | + | hotkey + | data_type_t_hotkey_get(self) -> char const * + | + | id + | __get_id(self) -> int + | + | menu_name + | data_type_t_menu_name_get(self) -> char const * + | + | name + | data_type_t_name_get(self) -> char const * + | + | props + | data_type_t_props_get(self) -> int + | + | thisown + | The membership flag + | + | value_size + | data_type_t_value_size_get(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_data_type_t(self) + +Help on function dec_flag in module ida_bytes: + +dec_flag(*args) + dec_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function del_hidden_range in module ida_bytes: + +del_hidden_range(*args) + del_hidden_range(ea) -> bool + + + Delete hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: success + +Help on function del_items in module ida_bytes: + +del_items(*args) + del_items(ea, flags=0, nbytes=1, may_destroy=None) -> bool + + + Convert item (instruction/data) to unexplored bytes. The whole item + (including the head and tail bytes) will be destroyed. It is allowed + to pass any address in the item to this function + + @param ea: any address within the first item to delete (C++: ea_t) + @param flags: combination of Unexplored byte conversion flags (C++: + int) + @param nbytes: number of bytes in the range to be undefined (C++: + asize_t) + @param may_destroy: optional routine invoked before deleting a head + item. If callback returns false then item has not + to be deleted and operation fails (C++: + may_destroy_cb_t *) + @return: true on sucessful operation, otherwise false + +Help on function del_mapping in module ida_bytes: + +del_mapping(*args) + del_mapping(ea) + + + Delete memory mapping range. + + @param ea: any address in the mapped range (C++: ea_t) + +Help on function del_value in module ida_bytes: + +del_value(*args) + del_value(ea) + + + Delete byte value from flags. The corresponding byte becomes + uninitialized. + + @param ea (C++: ea_t) + +Help on function detach_custom_data_format in module ida_bytes: + +detach_custom_data_format(*args) + detach_custom_data_format(dtid, dfid) -> bool + + + Detach the data format from the data type. Unregistering a custom data + type detaches all attached data formats, no need to detach them + explicitly. You still need unregister them. Unregistering a custom + data format detaches it from all attached data types. + + @param dtid: data type id to detach data format from (C++: int) + @param dfid: data format id to detach (C++: int) + +Help on function disable_flags in module ida_bytes: + +disable_flags(*args) + disable_flags(start_ea, end_ea) -> error_t + + + Deallocate flags for address range. Exit with an error message if not + enough disk space (this may occur too). + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @return: 0 if ok, otherwise return error code + +Help on function double_flag in module ida_bytes: + +double_flag(*args) + double_flag() -> flags_t + + + Get a flags_t representing a double. + +Help on function dword_flag in module ida_bytes: + +dword_flag(*args) + dword_flag() -> flags_t + + + Get a flags_t representing a double word. + +Help on function enable_flags in module ida_bytes: + +enable_flags(*args) + enable_flags(start_ea, end_ea, stt) -> error_t + + + Allocate flags for address range. This function does not change the + storage type of existing ranges. Exit with an error message if not + enough disk space. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: 0 if ok, otherwise an error code + +Help on function enum_flag in module ida_bytes: + +enum_flag(*args) + enum_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function equal_bytes in module ida_bytes: + +equal_bytes(*args) + equal_bytes(ea, image, mask, len, sense_case) -> bool + + + Compare 'len' bytes of the program starting from 'ea' with 'image'. + + @param ea: linear address (C++: ea_t) + @param image: bytes to compare with (C++: const uchar *) + @param mask: array of 1/0 bytes, it's length is 'len'. 1 means to + perform the comparison of the corresponding byte. 0 means + not to perform. if mask == NULL, then all bytes of + 'image' will be compared. if mask == SKIP_FF_MASK then + 0xFF bytes will be skipped (C++: const uchar *) + @param len: length of block to compare in bytes. (C++: size_t) + @param sense_case: case-sensitive comparison? (C++: bool) + +Help on function f_has_cmt in module ida_bytes: + +f_has_cmt(*args) + f_has_cmt(f, arg2) -> bool + +Help on function f_has_dummy_name in module ida_bytes: + +f_has_dummy_name(*args) + f_has_dummy_name(f, arg2) -> bool + + + Does the current byte have dummy (auto-generated, with special prefix) + name? + + + @param f (C++: flags_t) + +Help on function f_has_extra_cmts in module ida_bytes: + +f_has_extra_cmts(*args) + f_has_extra_cmts(f, arg2) -> bool + +Help on function f_has_name in module ida_bytes: + +f_has_name(*args) + f_has_name(f, arg2) -> bool + + + Does the current byte have non-trivial (non-dummy) name? + + + @param f (C++: flags_t) + +Help on function f_has_user_name in module ida_bytes: + +f_has_user_name(*args) + f_has_user_name(F, arg2) -> bool + + + Does the current byte have user-specified name? + + + @param F (C++: flags_t) + +Help on function f_has_xref in module ida_bytes: + +f_has_xref(*args) + f_has_xref(f, arg2) -> bool + + + Does the current byte have cross-references to it? + + + @param f (C++: flags_t) + +Help on function f_is_align in module ida_bytes: + +f_is_align(*args) + f_is_align(F, arg2) -> bool + + + See 'is_align()' + + + @param F (C++: flags_t) + +Help on function f_is_byte in module ida_bytes: + +f_is_byte(*args) + f_is_byte(F, arg2) -> bool + + + See 'is_byte()' + + + @param F (C++: flags_t) + +Help on function f_is_code in module ida_bytes: + +f_is_code(*args) + f_is_code(F, arg2) -> bool + + + Does flag denote start of an instruction? + + + @param F (C++: flags_t) + +Help on function f_is_custom in module ida_bytes: + +f_is_custom(*args) + f_is_custom(F, arg2) -> bool + + + See 'is_custom()' + + + @param F (C++: flags_t) + +Help on function f_is_data in module ida_bytes: + +f_is_data(*args) + f_is_data(F, arg2) -> bool + + + Does flag denote start of data? + + + @param F (C++: flags_t) + +Help on function f_is_double in module ida_bytes: + +f_is_double(*args) + f_is_double(F, arg2) -> bool + + + See 'is_double()' + + + @param F (C++: flags_t) + +Help on function f_is_dword in module ida_bytes: + +f_is_dword(*args) + f_is_dword(F, arg2) -> bool + + + See 'is_dword()' + + + @param F (C++: flags_t) + +Help on function f_is_float in module ida_bytes: + +f_is_float(*args) + f_is_float(F, arg2) -> bool + + + See 'is_float()' + + + @param F (C++: flags_t) + +Help on function f_is_head in module ida_bytes: + +f_is_head(*args) + f_is_head(F, arg2) -> bool + + + Does flag denote start of instruction OR data? + + + @param F (C++: flags_t) + +Help on function f_is_not_tail in module ida_bytes: + +f_is_not_tail(*args) + f_is_not_tail(F, arg2) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function f_is_oword in module ida_bytes: + +f_is_oword(*args) + f_is_oword(F, arg2) -> bool + + + See 'is_oword()' + + + @param F (C++: flags_t) + +Help on function f_is_pack_real in module ida_bytes: + +f_is_pack_real(*args) + f_is_pack_real(F, arg2) -> bool + + + See 'is_pack_real()' + + + @param F (C++: flags_t) + +Help on function f_is_qword in module ida_bytes: + +f_is_qword(*args) + f_is_qword(F, arg2) -> bool + + + See 'is_qword()' + + + @param F (C++: flags_t) + +Help on function f_is_strlit in module ida_bytes: + +f_is_strlit(*args) + f_is_strlit(F, arg2) -> bool + + + See 'is_strlit()' + + + @param F (C++: flags_t) + +Help on function f_is_struct in module ida_bytes: + +f_is_struct(*args) + f_is_struct(F, arg2) -> bool + + + See 'is_struct()' + + + @param F (C++: flags_t) + +Help on function f_is_tail in module ida_bytes: + +f_is_tail(*args) + f_is_tail(F, arg2) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function f_is_tbyte in module ida_bytes: + +f_is_tbyte(*args) + f_is_tbyte(F, arg2) -> bool + + + See 'is_tbyte()' + + + @param F (C++: flags_t) + +Help on function f_is_word in module ida_bytes: + +f_is_word(*args) + f_is_word(F, arg2) -> bool + + + See 'is_word()' + + + @param F (C++: flags_t) + +Help on function f_is_yword in module ida_bytes: + +f_is_yword(*args) + f_is_yword(F, arg2) -> bool + + + See 'is_yword()' + + + @param F (C++: flags_t) + +Help on function find_byte in module ida_bytes: + +find_byte(*args) + find_byte(sEA, size, value, bin_search_flags) -> ea_t + + + Find forward a byte with the specified value (only 8-bit value from + the database). example: ea=4 size=3 will inspect addresses 4, 5, and 6 + + @param sEA: linear address (C++: ea_t) + @param size: number of bytes to inspect (C++: asize_t) + @param value: value to find (C++: uchar) + @param bin_search_flags: combination of Search flags (C++: int) + @return: address of byte or BADADDR + +Help on function find_byter in module ida_bytes: + +find_byter(*args) + find_byter(sEA, size, value, bin_search_flags) -> ea_t + + + Find reverse a byte with the specified value (only 8-bit value from + the database). example: ea=4 size=3 will inspect addresses 6, 5, and 4 + + @param sEA: the lower address of the search range (C++: ea_t) + @param size: number of bytes to inspect (C++: asize_t) + @param value: value to find (C++: uchar) + @param bin_search_flags: combination of Search flags (C++: int) + @return: address of byte or BADADDR + +Help on function find_custom_data_format in module ida_bytes: + +find_custom_data_format(*args) + find_custom_data_format(name) -> int + + + Get id of a custom data format. + + @param name: name of the custom data format (C++: const char *) + @return: id or -1 + +Help on function find_custom_data_type in module ida_bytes: + +find_custom_data_type(*args) + find_custom_data_type(name) -> int + + + Get id of a custom data type. + + @param name: name of the custom data type (C++: const char *) + @return: id or -1 + +Help on function float_flag in module ida_bytes: + +float_flag(*args) + float_flag() -> flags_t + + + Get a flags_t representing a float. + +Help on function flt_flag in module ida_bytes: + +flt_flag(*args) + flt_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function free_chunk in module ida_bytes: + +free_chunk(*args) + free_chunk(bottom, size, step) -> ea_t + + + Search for a hole in the addressing space of the program. + + @param bottom: address to start searching (C++: ea_t) + @param size: size of desired block (C++: asize_t) + @param step: bit mask for the start of hole (0xF would align hole to a + paragraph). if 'step' is negative, the bottom address + with be aligned. otherwise the kernel will try to use it + as is and align it only when the hole is too small. (C++: + int32) + @return: start of the hole or BADADDR + +Help on function get_16bit in module ida_bytes: + +get_16bit(*args) + get_16bit(ea) -> uint32 + + + Get 16bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 1 byte (getFullByte()) if the current processor has 16-bit + byte, otherwise return get_word() + +Help on function get_32bit in module ida_bytes: + +get_32bit(*args) + get_32bit(ea) -> uint32 + + + Get not more than 32bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 32 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) + return get_dword(ea); if ( nbits <= 16) return + get_wide_word(ea); return get_wide_byte(ea); + +Help on function get_64bit in module ida_bytes: + +get_64bit(*args) + get_64bit(ea) -> uint64 + + + Get not more than 64bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 64 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) + return get_qword(ea); if ( nbits <= 16) return + get_wide_dword(ea); return get_wide_byte(ea); + +Help on function get_8bit in module ida_bytes: + +get_8bit(*args) + get_8bit(ea, v, nbit) -> PyObject * + +Help on function get_byte in module ida_bytes: + +get_byte(*args) + get_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea'. This function works only + for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_bytes in module ida_bytes: + +get_bytes(*args) + get_bytes(ea, size, gmb_flags=0x01) -> PyObject * + + + Get the specified number of bytes of the program. + @param ea: program address + @param size: number of bytes to return + @return: the bytes (as a str), or None in case of failure + +Help on function get_bytes_and_mask in module ida_bytes: + +get_bytes_and_mask(*args) + get_bytes_and_mask(ea, size, gmb_flags=0x01) -> PyObject * + + + Get the specified number of bytes of the program, and a bitmask + specifying what bytes are defined and what bytes are not. + @param ea: program address + @param size: number of bytes to return + @return: a tuple (bytes, mask), or None in case of failure. + Both 'bytes' and 'mask' are 'str' instances. + +Help on function get_cmt in module ida_bytes: + +get_cmt(*args) + get_cmt(ea, rptble) -> str + + + Get an indented comment. + + @param ea: linear address. may point to tail byte, the function will + find start of the item (C++: ea_t) + @param rptble: get repeatable comment? (C++: bool) + @return: size of comment or -1 + +Help on function get_custom_data_format in module ida_bytes: + +get_custom_data_format(*args) + get_custom_data_format(dfid) -> data_format_t + + + Get definition of a registered custom data format. + + @param dfid: data format id (C++: int) + @return: data format definition or NULL + +Help on function get_custom_data_formats in module ida_bytes: + +get_custom_data_formats(*args) + get_custom_data_formats(out, dtid) -> int + + + Get list of attached custom data formats for the specified data type. + + @param out: buffer for the output. may be NULL (C++: intvec_t *) + @param dtid: data type id (C++: int) + @return: number of returned custom data formats. if error, returns -1 + +Help on function get_custom_data_type in module ida_bytes: + +get_custom_data_type(*args) + get_custom_data_type(dtid) -> data_type_t + + + Get definition of a registered custom data type. + + @param dtid: data type id (C++: int) + @return: data type definition or NULL + +Help on function get_custom_data_types in module ida_bytes: + +get_custom_data_types(*args) + get_custom_data_types(out, min_size=0, max_size=BADADDR) -> int + + + Get list of registered custom data type ids. + + @param out: buffer for the output. may be NULL (C++: intvec_t *) + @param min_size: minimum value size (C++: asize_t) + @param max_size: maximum value size (C++: asize_t) + @return: number of custom data types with the specified size limits + +Help on function get_data_elsize in module ida_bytes: + +get_data_elsize(*args) + get_data_elsize(ea, F, ti=None) -> asize_t + + + Get size of data type specified in flags 'F'. + + @param ea: linear address of the item (C++: ea_t) + @param F: flags (C++: flags_t) + @param ti: additional information about the data type. For example, if + the current item is a structure instance, then ti->tid is + structure id. Otherwise is ignored (may be NULL). If + specified as NULL, will be automatically retrieved from the + database (C++: const opinfo_t *) + @return: byte : 1 word : 2 etc... + +Help on function get_data_value in module ida_bytes: + +get_data_value(*args) + get_data_value(v, ea, size) -> bool + + + Get the value at of the item at 'ea'. This function works with + entities up to sizeof(ea_t) (bytes, word, etc) + + @param v: pointer to the result. may be NULL (C++: uval_t *) + @param ea: linear address (C++: ea_t) + @param size: size of data to read. If 0, then the item type at 'ea' + will be used (C++: asize_t) + @return: success + +Help on function get_db_byte in module ida_bytes: + +get_db_byte(*args) + get_db_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea' from the database. Works + even if the debugger is active. See also 'get_dbg_byte()' to read the + process memory directly. This function works only for 8bit byte + processors. + + @param ea (C++: ea_t) + +Help on function get_default_radix in module ida_bytes: + +get_default_radix(*args) + get_default_radix() -> int + + + Get default base of number for the current processor. + + @return: 2, 8, 10, 16 + +Help on function get_dword in module ida_bytes: + +get_dword(*args) + get_dword(ea) -> uint32 + + + Get one dword (32-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_enum_id in module ida_bytes: + +get_enum_id(*args) + get_enum_id(ea, n) -> enum_t + + + Get enum id of 'enum' operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: id of enum or BADNODE + +Help on function get_first_hidden_range in module ida_bytes: + +get_first_hidden_range(*args) + get_first_hidden_range() -> hidden_range_t + + + Get pointer to the first hidden range. + + @return: ptr to hidden range or NULL + +Help on function get_flags in module ida_bytes: + +get_flags(*args) + get_flags(ea) -> flags_t + + + get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote + debugging because the kernel needs to read the process memory. + + @param ea (C++: ea_t) + +Help on function get_flags_by_size in module ida_bytes: + +get_flags_by_size(*args) + get_flags_by_size(size) -> flags_t + + + Get flags from size (in bytes). Supported sizes: 1, 2, 4, 8, 16, 32. + For other sizes returns 0 + + @param size (C++: size_t) + +Help on function get_flags_ex in module ida_bytes: + +get_flags_ex(*args) + get_flags_ex(ea, how) -> flags_t + + + Get flags for the specified address, extended form. + + + @param ea (C++: ea_t) + @param how (C++: int) + +Help on function get_forced_operand in module ida_bytes: + +get_forced_operand(*args) + get_forced_operand(ea, n) -> str + + + Get forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @return: size of forced operand or -1 + +Help on function get_full_data_elsize in module ida_bytes: + +get_full_data_elsize(*args) + get_full_data_elsize(ea, F, ti=None) -> asize_t + + + Get full size of data type specified in flags 'F'. takes into account + processors with wide bytes e.g. returns 2 for a byte element with + 16-bit bytes + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param ti (C++: const opinfo_t *) + +Help on function get_full_flags in module ida_bytes: + +get_full_flags(*args) + get_full_flags(ea) -> flags_t + + + Get flags value for address 'ea'. + + @param ea (C++: ea_t) + @return: 0 if address is not present in the program + +Help on function get_hidden_range in module ida_bytes: + +get_hidden_range(*args) + get_hidden_range(ea) -> hidden_range_t + + + Get pointer to hidden range structure, in: linear address. + + @param ea: any address in the hidden range (C++: ea_t) + +Help on function get_hidden_range_num in module ida_bytes: + +get_hidden_range_num(*args) + get_hidden_range_num(ea) -> int + + + Get number of a hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: number of hidden range (0.. get_hidden_range_qty() -1) + +Help on function get_hidden_range_qty in module ida_bytes: + +get_hidden_range_qty(*args) + get_hidden_range_qty() -> int + + + Get number of hidden ranges. + +Help on function get_item_end in module ida_bytes: + +get_item_end(*args) + get_item_end(ea) -> ea_t + + + Get the end address of the item at 'ea'. The returned address doesn't + belong to the current item. Unexplored bytes are counted as 1 byte + entities. + + @param ea (C++: ea_t) + +Help on function get_item_flag in module ida_bytes: + +get_item_flag(*args) + get_item_flag(_from, n, ea, appzero) -> flags_t + + + Get flag of the item at 'ea' even if it is a tail byte of some array + or structure. This function is used to get flags of structure members + or array elements. + + @param _from: linear address of the instruction which refers to 'ea' + (C++: ea_t) + @param n: number of operand which refers to 'ea' (C++: int) + @param ea: the referenced address (C++: ea_t) + @param appzero: append a struct field name if the field offset is + zero? meaningful only if the name refers to a + structure. (C++: bool) + @return: flags or 0 (if failed) + +Help on function get_item_head in module ida_bytes: + +get_item_head(*args) + get_item_head(ea) -> ea_t + + + Get the start address of the item at 'ea'. If there is no current + item, then 'ea' will be returned (see definition at the end of + 'bytes.hpp' source) + + @param ea (C++: ea_t) + +Help on function get_item_size in module ida_bytes: + +get_item_size(*args) + 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. + + @param ea (C++: ea_t) + +Help on function get_last_hidden_range in module ida_bytes: + +get_last_hidden_range(*args) + get_last_hidden_range() -> hidden_range_t + + + Get pointer to the last hidden range. + + @return: ptr to hidden range or NULL + +Help on function get_manual_insn in module ida_bytes: + +get_manual_insn(*args) + get_manual_insn(ea) -> str + + + Retrieve the user-specified string for the manual instruction. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @return: size of manual instruction or -1 + +Help on function get_mapping in module ida_bytes: + +get_mapping(*args) + get_mapping(n) -> bool + + + Get memory mapping range by its number. + + @param n: number of mapping range (0.. get_mappings_qty() -1) (C++: + size_t) + @return: false if the specified range doesn't exist, otherwise returns + from , to , size + +Help on function get_mappings_qty in module ida_bytes: + +get_mappings_qty(*args) + get_mappings_qty() -> size_t + + + Get number of mappings. + +Help on function get_max_strlit_length in module ida_bytes: + +get_max_strlit_length(*args) + get_max_strlit_length(ea, strtype, options=0) -> size_t + + + Determine maximum length of string literal. + + @param ea: starting address (C++: ea_t) + @param strtype: string type. one of String type codes (C++: int32) + @param options: combination of string literal length options (C++: + int) + @return: length of the string in octets (octet==8bit) + +Help on function get_next_hidden_range in module ida_bytes: + +get_next_hidden_range(*args) + get_next_hidden_range(ea) -> hidden_range_t + + + Get pointer to next hidden range. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to hidden range or NULL if next hidden range doesn't + exist + +Help on function get_octet in module ida_bytes: + +get_octet(*args) + get_octet(ea, v, nbit) -> PyObject * + + + Get 8 bits of the program at 'ea'. The main usage of this function is + to iterate range of bytes. Here is an example: + + uint64 v; + int nbit = 0; + for ( ... ) { + uchar byte = get_octet(&ea, &v, &nbit); + ... + } + + 'ea' is incremented each time when a new byte is read. In the above + example, it will be incremented in the first loop iteration. + + @param ea (C++: ea_t *) + @param v (C++: uint64 *) + @param nbit (C++: int *) + +Help on function get_opinfo in module ida_bytes: + +get_opinfo(*args) + get_opinfo(buf, ea, n, flags) -> opinfo_t + + + Get additional information about an operand representation. + + @param buf: buffer to receive the result. may not be NULL (C++: + opinfo_t *) + @param ea: linear address of item (C++: ea_t) + @param n: number of operand, 0 or 1 (C++: int) + @param flags: flags of the item (C++: flags_t) + @return: NULL if no additional representation information + +Help on function get_optype_flags0 in module ida_bytes: + +get_optype_flags0(*args) + get_optype_flags0(F) -> flags_t + + + Get flags for first operand. + + + @param F (C++: flags_t) + +Help on function get_optype_flags1 in module ida_bytes: + +get_optype_flags1(*args) + get_optype_flags1(F) -> flags_t + + + Get flags for second operand. + + + @param F (C++: flags_t) + +Help on function get_original_byte in module ida_bytes: + +get_original_byte(*args) + get_original_byte(ea) -> uint64 + + + Get original byte value (that was before patching). This function + works for wide byte processors too. + + @param ea (C++: ea_t) + +Help on function get_original_dword in module ida_bytes: + +get_original_dword(*args) + get_original_dword(ea) -> uint64 + + + Get original dword (that was before patching) This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_original_qword in module ida_bytes: + +get_original_qword(*args) + get_original_qword(ea) -> uint64 + + + Get original qword value (that was before patching) This function + DOESN'T work for wide byte processors too. This function takes into + account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_original_word in module ida_bytes: + +get_original_word(*args) + get_original_word(ea) -> uint64 + + + Get original word value (that was before patching). This function + works for wide byte processors too. This function takes into account + order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_predef_insn_cmt in module ida_bytes: + +get_predef_insn_cmt(*args) + get_predef_insn_cmt(ins) -> str + + + Get predefined comment. + + @param ins: current instruction information (C++: const insn_t &) + @return: size of comment or -1 + +Help on function get_prev_hidden_range in module ida_bytes: + +get_prev_hidden_range(*args) + get_prev_hidden_range(ea) -> hidden_range_t + + + Get pointer to previous hidden range. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to hidden range or NULL if previous hidden range doesn't + exist + +Help on function get_qword in module ida_bytes: + +get_qword(*args) + get_qword(ea) -> uint64 + + + Get one qword (64-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_radix in module ida_bytes: + +get_radix(*args) + get_radix(F, n) -> int + + + Get radix of the operand, in: flags. If the operand is not a number, + returns 'get_default_radix()' + + @param F: flags (C++: flags_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: 2, 8, 10, 16 + +Help on function get_strlit_contents in module ida_bytes: + +get_strlit_contents(*args) + get_strlit_contents(ea, py_len, type, flags=0) -> PyObject * + + + Get bytes contents at location, possibly converted. + It works even if the string has not been created in the database yet. + + Note that this will always return a simple string of bytes + (i.e., a 'str' instance), and not a string of unicode characters. + + If you want auto-conversion to unicode strings (that is: real strings), + you should probably be using the idautils.Strings class. + + @param ea: linear address of the string + @param len: length of the string in bytes (including terminating 0) + @param type: type of the string. Represents both the character encoding, + and the 'type' of string at the given location. + @param flags: combination of STRCONV_..., to perform output conversion. + @return: a bytes-filled str object. + +Help on function get_stroff_path in module ida_bytes: + +get_stroff_path(*args) + get_stroff_path(path, delta, ea, n) -> int + + + Get struct path of operand. + + @param path: buffer for structure path (strpath). see nalt.hpp for + more info. (C++: tid_t *) + @param delta: struct offset delta (C++: adiff_t *) + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: length of strpath + +Help on function get_wide_byte in module ida_bytes: + +get_wide_byte(*args) + get_wide_byte(ea) -> uint64 + + + Get one wide byte of the program at 'ea'. Some processors may access + more than 8bit quantity at an address. These processors have 32-bit + byte organization from the IDA's point of view. + + @param ea (C++: ea_t) + +Help on function get_wide_dword in module ida_bytes: + +get_wide_dword(*args) + get_wide_dword(ea) -> uint64 + + + Get two wide words (4 'bytes') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in + \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 + + @param ea (C++: ea_t) + +Help on function get_wide_word in module ida_bytes: + +get_wide_word(*args) + get_wide_word(ea) -> uint64 + + + Get one wide word (2 'byte') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_word in module ida_bytes: + +get_word(*args) + get_word(ea) -> ushort + + + Get one word (16-bit) of the program at 'ea'. This function takes into + account order of bytes specified in \inf{is_be()} This function works + only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_zero_ranges in module ida_bytes: + +get_zero_ranges(*args) + get_zero_ranges(zranges, range) -> bool + + + Return set of ranges with zero initialized bytes. The returned set + includes only big zero initialized ranges (at least >1KB). Some zero + initialized byte ranges may be not included. Only zero bytes that use + the sparse storage method (STT_MM) are reported. + + @param zranges: pointer to the return value. cannot be NULL (C++: + rangeset_t *) + @param range: the range of addresses to verify. can be NULL - means + all ranges (C++: const range_t *) + @return: true if the result is a non-empty set + +Help on function getn_hidden_range in module ida_bytes: + +getn_hidden_range(*args) + getn_hidden_range(n) -> hidden_range_t + + + Get pointer to hidden range structure, in: number of hidden range. + + @param n: number of hidden range, is in range 0.. + get_hidden_range_qty() -1 (C++: int) + +Help on function has_any_name in module ida_bytes: + +has_any_name(*args) + has_any_name(F) -> bool + + + Does the current byte have any name? + + + @param F (C++: flags_t) + +Help on function has_auto_name in module ida_bytes: + +has_auto_name(*args) + has_auto_name(F) -> bool + + + Does the current byte have auto-generated (no special prefix) name? + + + @param F (C++: flags_t) + +Help on function has_cmt in module ida_bytes: + +has_cmt(*args) + has_cmt(F) -> bool + + + Does the current byte have an indented comment? + + + @param F (C++: flags_t) + +Help on function has_dummy_name in module ida_bytes: + +has_dummy_name(*args) + has_dummy_name(F) -> bool + + + Does the current byte have dummy (auto-generated, with special prefix) + name? + + + @param F (C++: flags_t) + +Help on function has_extra_cmts in module ida_bytes: + +has_extra_cmts(*args) + has_extra_cmts(F) -> bool + + + Does the current byte have additional anterior or posterior lines? + + + @param F (C++: flags_t) + +Help on function has_immd in module ida_bytes: + +has_immd(*args) + has_immd(F) -> bool + + + Has immediate value? + + + @param F (C++: flags_t) + +Help on function has_name in module ida_bytes: + +has_name(*args) + has_name(F) -> bool + + + Does the current byte have non-trivial (non-dummy) name? + + + @param F (C++: flags_t) + +Help on function has_user_name in module ida_bytes: + +has_user_name(*args) + has_user_name(F) -> bool + + + Does the current byte have user-specified name? + + + @param F (C++: flags_t) + +Help on function has_value in module ida_bytes: + +has_value(*args) + has_value(F) -> bool + + + Do flags contain byte value? + + + @param F (C++: flags_t) + +Help on function has_xref in module ida_bytes: + +has_xref(*args) + has_xref(F) -> bool + + + Does the current byte have cross-references to it? + + + @param F (C++: flags_t) + +Help on function hex_flag in module ida_bytes: + +hex_flag(*args) + hex_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on class hidden_range_t in module ida_bytes: + +class hidden_range_t(ida_range.range_t) + | Proxy of C++ hidden_range_t class. + | + | Method resolution order: + | hidden_range_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> hidden_range_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | color + | hidden_range_t_color_get(self) -> bgcolor_t + | + | description + | hidden_range_t_description_get(self) -> char * + | + | footer + | hidden_range_t_footer_get(self) -> char * + | + | header + | hidden_range_t_header_get(self) -> char * + | + | thisown + | The membership flag + | + | visible + | hidden_range_t_visible_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_hidden_range_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on function is_align in module ida_bytes: + +is_align(*args) + is_align(F) -> bool + + + 'FF_ALIGN' + + + @param F (C++: flags_t) + +Help on function is_attached_custom_data_format in module ida_bytes: + +is_attached_custom_data_format(*args) + is_attached_custom_data_format(dtid, dfid) -> bool + +Help on function is_bnot in module ida_bytes: + +is_bnot(*args) + is_bnot(ea, F, n) -> bool + + + Should we negate the operand?. \ash{a_bnot} should be defined in the + idp module in order to work with this function + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_byte in module ida_bytes: + +is_byte(*args) + is_byte(F) -> bool + + + 'FF_BYTE' + + + @param F (C++: flags_t) + +Help on function is_char in module ida_bytes: + +is_char(*args) + is_char(F, n) -> bool + + + is character constant? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_char0 in module ida_bytes: + +is_char0(*args) + is_char0(F) -> bool + + + Is the first operand character constant? (example: push 'a') + + + @param F (C++: flags_t) + +Help on function is_char1 in module ida_bytes: + +is_char1(*args) + is_char1(F) -> bool + + + Is the second operand character constant? (example: mov al, 'a') + + + @param F (C++: flags_t) + +Help on function is_code in module ida_bytes: + +is_code(*args) + is_code(F) -> bool + + + Does flag denote start of an instruction? + + + @param F (C++: flags_t) + +Help on function is_custfmt in module ida_bytes: + +is_custfmt(*args) + is_custfmt(F, n) -> bool + + + is custom data format? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_custfmt0 in module ida_bytes: + +is_custfmt0(*args) + is_custfmt0(F) -> bool + + + Does the first operand use a custom data representation? + + + @param F (C++: flags_t) + +Help on function is_custfmt1 in module ida_bytes: + +is_custfmt1(*args) + is_custfmt1(F) -> bool + + + Does the second operand use a custom data representation? + + + @param F (C++: flags_t) + +Help on function is_custom in module ida_bytes: + +is_custom(*args) + is_custom(F) -> bool + + + 'FF_CUSTOM' + + + @param F (C++: flags_t) + +Help on function is_data in module ida_bytes: + +is_data(*args) + is_data(F) -> bool + + + Does flag denote start of data? + + + @param F (C++: flags_t) + +Help on function is_defarg in module ida_bytes: + +is_defarg(*args) + is_defarg(F, n) -> bool + + + is defined? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_defarg0 in module ida_bytes: + +is_defarg0(*args) + is_defarg0(F) -> bool + + + Is the first operand defined? Initially operand has no defined + representation. + + + @param F (C++: flags_t) + +Help on function is_defarg1 in module ida_bytes: + +is_defarg1(*args) + is_defarg1(F) -> bool + + + Is the second operand defined? Initially operand has no defined + representation. + + + @param F (C++: flags_t) + +Help on function is_double in module ida_bytes: + +is_double(*args) + is_double(F) -> bool + + + 'FF_DOUBLE' + + + @param F (C++: flags_t) + +Help on function is_dword in module ida_bytes: + +is_dword(*args) + is_dword(F) -> bool + + + 'FF_DWORD' + + + @param F (C++: flags_t) + +Help on function is_enum in module ida_bytes: + +is_enum(*args) + is_enum(F, n) -> bool + + + is enum? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_enum0 in module ida_bytes: + +is_enum0(*args) + is_enum0(F) -> bool + + + Is the first operand a symbolic constant (enum member)? + + + @param F (C++: flags_t) + +Help on function is_enum1 in module ida_bytes: + +is_enum1(*args) + is_enum1(F) -> bool + + + Is the second operand a symbolic constant (enum member)? + + + @param F (C++: flags_t) + +Help on function is_float in module ida_bytes: + +is_float(*args) + is_float(F) -> bool + + + 'FF_FLOAT' + + + @param F (C++: flags_t) + +Help on function is_float0 in module ida_bytes: + +is_float0(*args) + is_float0(F) -> bool + + + Is the first operand a floating point number? + + + @param F (C++: flags_t) + +Help on function is_float1 in module ida_bytes: + +is_float1(*args) + is_float1(F) -> bool + + + Is the second operand a floating point number? + + + @param F (C++: flags_t) + +Help on function is_flow in module ida_bytes: + +is_flow(*args) + is_flow(F) -> bool + + + Does the previous instruction exist and pass execution flow to the + current byte? + + + @param F (C++: flags_t) + +Help on function is_fltnum in module ida_bytes: + +is_fltnum(*args) + is_fltnum(F, n) -> bool + + + is floating point number? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_forced_operand in module ida_bytes: + +is_forced_operand(*args) + is_forced_operand(ea, n) -> bool + + + Is operand manually defined?. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + +Help on function is_func in module ida_bytes: + +is_func(*args) + is_func(F) -> bool + + + Is function start? + + + @param F (C++: flags_t) + +Help on function is_head in module ida_bytes: + +is_head(*args) + is_head(F) -> bool + + + Does flag denote start of instruction OR data? + + + @param F (C++: flags_t) + +Help on function is_invsign in module ida_bytes: + +is_invsign(*args) + is_invsign(ea, F, n) -> bool + + + Should sign of n-th operand inverted during output?. allowed values of + n: 0-first operand, 1-other operands + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_loaded in module ida_bytes: + +is_loaded(*args) + is_loaded(ea) -> bool + + + Does the specified address have a byte value (is initialized?) + + + @param ea (C++: ea_t) + +Help on function is_lzero in module ida_bytes: + +is_lzero(*args) + is_lzero(ea, n) -> bool + + + Display leading zeroes in operands. The global switch for the leading + zeroes is in \inf{s_genflags} The leading zeroes doesn't work if the + octal numbers start with 0 Display leading zeroes? (takes into account + \inf{s_genflags}) + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function is_manual in module ida_bytes: + +is_manual(*args) + is_manual(F, n) -> bool + + + is forced operand? (use 'is_forced_operand()' ) + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_manual_insn in module ida_bytes: + +is_manual_insn(*args) + is_manual_insn(ea) -> bool + + + Is the instruction overridden? + + @param ea: linear address of the instruction or data item (C++: ea_t) + +Help on function is_mapped in module ida_bytes: + +is_mapped(*args) + is_mapped(ea) -> bool + + + Is the specified address 'ea' present in the program? + + + @param ea (C++: ea_t) + +Help on function is_not_tail in module ida_bytes: + +is_not_tail(*args) + is_not_tail(F) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function is_numop in module ida_bytes: + +is_numop(*args) + is_numop(F, n) -> bool + + + is number (bin, oct, dec, hex)? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_numop0 in module ida_bytes: + +is_numop0(*args) + is_numop0(F) -> bool + + + Is the first operand a number (i.e. binary, octal, decimal or hex?) + + + @param F (C++: flags_t) + +Help on function is_numop1 in module ida_bytes: + +is_numop1(*args) + is_numop1(F) -> bool + + + Is the second operand a number (i.e. binary, octal, decimal or hex?) + + + @param F (C++: flags_t) + +Help on function is_off in module ida_bytes: + +is_off(*args) + is_off(F, n) -> bool + + + is offset? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_off0 in module ida_bytes: + +is_off0(*args) + is_off0(F) -> bool + + + Is the first operand offset? (example: push offset xxx) + + + @param F (C++: flags_t) + +Help on function is_off1 in module ida_bytes: + +is_off1(*args) + is_off1(F) -> bool + + + Is the second operand offset? (example: mov ax, offset xxx) + + + @param F (C++: flags_t) + +Help on function is_oword in module ida_bytes: + +is_oword(*args) + is_oword(F) -> bool + + + 'FF_OWORD' + + + @param F (C++: flags_t) + +Help on function is_pack_real in module ida_bytes: + +is_pack_real(*args) + is_pack_real(F) -> bool + + + 'FF_PACKREAL' + + + @param F (C++: flags_t) + +Help on function is_qword in module ida_bytes: + +is_qword(*args) + is_qword(F) -> bool + + + 'FF_QWORD' + + + @param F (C++: flags_t) + +Help on function is_same_data_type in module ida_bytes: + +is_same_data_type(*args) + is_same_data_type(F1, F2) -> bool + + + Do the given flags specify the same data type? + + + @param F1 (C++: flags_t) + @param F2 (C++: flags_t) + +Help on function is_seg in module ida_bytes: + +is_seg(*args) + is_seg(F, n) -> bool + + + is segment? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_seg0 in module ida_bytes: + +is_seg0(*args) + is_seg0(F) -> bool + + + Is the first operand segment selector? (example: push seg seg001) + + + @param F (C++: flags_t) + +Help on function is_seg1 in module ida_bytes: + +is_seg1(*args) + is_seg1(F) -> bool + + + Is the second operand segment selector? (example: mov dx, seg dseg) + + + @param F (C++: flags_t) + +Help on function is_stkvar in module ida_bytes: + +is_stkvar(*args) + is_stkvar(F, n) -> bool + + + is stack variable? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_stkvar0 in module ida_bytes: + +is_stkvar0(*args) + is_stkvar0(F) -> bool + + + Is the first operand a stack variable? + + + @param F (C++: flags_t) + +Help on function is_stkvar1 in module ida_bytes: + +is_stkvar1(*args) + is_stkvar1(F) -> bool + + + Is the second operand a stack variable? + + + @param F (C++: flags_t) + +Help on function is_strlit in module ida_bytes: + +is_strlit(*args) + is_strlit(F) -> bool + + + 'FF_STRLIT' + + + @param F (C++: flags_t) + +Help on function is_stroff in module ida_bytes: + +is_stroff(*args) + is_stroff(F, n) -> bool + + + is struct offset? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_stroff0 in module ida_bytes: + +is_stroff0(*args) + is_stroff0(F) -> bool + + + Is the first operand an offset within a struct? + + + @param F (C++: flags_t) + +Help on function is_stroff1 in module ida_bytes: + +is_stroff1(*args) + is_stroff1(F) -> bool + + + Is the second operand an offset within a struct? + + + @param F (C++: flags_t) + +Help on function is_struct in module ida_bytes: + +is_struct(*args) + is_struct(F) -> bool + + + 'FF_STRUCT' + + + @param F (C++: flags_t) + +Help on function is_suspop in module ida_bytes: + +is_suspop(*args) + is_suspop(ea, F, n) -> bool + + + is suspicious operand? + + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_tail in module ida_bytes: + +is_tail(*args) + is_tail(F) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function is_tbyte in module ida_bytes: + +is_tbyte(*args) + is_tbyte(F) -> bool + + + 'FF_TBYTE' + + + @param F (C++: flags_t) + +Help on function is_unknown in module ida_bytes: + +is_unknown(*args) + is_unknown(F) -> bool + + + Does flag denote unexplored byte? + + + @param F (C++: flags_t) + +Help on function is_varsize_item in module ida_bytes: + +is_varsize_item(*args) + is_varsize_item(ea, F, ti=None, itemsize=None) -> int + + + Is the item at 'ea' variable size?. + + @param ea: linear address of the item (C++: ea_t) + @param F: flags (C++: flags_t) + @param ti: additional information about the data type. For example, if + the current item is a structure instance, then ti->tid is + structure id. Otherwise is ignored (may be NULL). If + specified as NULL, will be automatically retrieved from the + database (C++: const opinfo_t *) + @param itemsize: if not NULL and the item is varsize, itemsize will + contain the calculated item size (for struct types, + the minimal size is returned) (C++: asize_t *) + +Help on function is_word in module ida_bytes: + +is_word(*args) + is_word(F) -> bool + + + 'FF_WORD' + + + @param F (C++: flags_t) + +Help on function is_yword in module ida_bytes: + +is_yword(*args) + is_yword(F) -> bool + + + 'FF_YWORD' + + + @param F (C++: flags_t) + +Help on function is_zword in module ida_bytes: + +is_zword(*args) + is_zword(F) -> bool + + + 'FF_ZWORD' + + + @param F (C++: flags_t) + +Help on function leading_zero_important in module ida_bytes: + +leading_zero_important(*args) + leading_zero_important(ea, n) -> bool + + + Check if leading zeroes are important. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function nbits in module ida_bytes: + +nbits(*args) + nbits(ea) -> int + + + Get number of bits in a byte at the given address. + + @param ea (C++: ea_t) + @return: \ph{dnbits()} if the address doesn't belong to a segment, + otherwise the result depends on the segment type + +Help on function next_addr in module ida_bytes: + +next_addr(*args) + next_addr(ea) -> ea_t + + + Get next address in the program (i.e. next address which has flags). + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function next_chunk in module ida_bytes: + +next_chunk(*args) + next_chunk(ea) -> ea_t + + + Get the first address of next contiguous chunk in the program. + + @param ea (C++: ea_t) + @return: BADADDR if next chunk doesn't exist. + +Help on function next_head in module ida_bytes: + +next_head(*args) + next_head(ea, maxea) -> ea_t + + + Get start of next defined item. + + @param ea: begin search at this address (C++: ea_t) + @param maxea: not included in the search range (C++: ea_t) + @return: BADADDR if none exists. + +Help on function next_inited in module ida_bytes: + +next_inited(*args) + next_inited(ea, maxea) -> ea_t + + + Find the next initialized address. + + + @param ea (C++: ea_t) + @param maxea (C++: ea_t) + +Help on function next_not_tail in module ida_bytes: + +next_not_tail(*args) + next_not_tail(ea) -> ea_t + + + Get address of next non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function next_that in module ida_bytes: + +next_that(*args) + next_that(ea, maxea, callable) -> ea_t + + + Find next address with a flag satisfying the function 'testf'. + Start searching from address 'ea'+1 and inspect bytes up to 'maxea'. + maxea is not included in the search range. + + @param callable: a Python callable with the following prototype: + callable(flags). Return True to stop enumeration. + @return: the found address or BADADDR. + +Help on function next_unknown in module ida_bytes: + +next_unknown(*args) + next_unknown(ea, maxea) -> ea_t + + + Similar to 'next_that()' , but will find the next address that is + unexplored. + + + @param ea (C++: ea_t) + @param maxea (C++: ea_t) + +Help on function num_flag in module ida_bytes: + +num_flag(*args) + num_flag() -> flags_t + + + Get number of default base (bin, oct, dec, hex) + +Help on function oct_flag in module ida_bytes: + +oct_flag(*args) + oct_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function off_flag in module ida_bytes: + +off_flag(*args) + off_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function op_adds_xrefs in module ida_bytes: + +op_adds_xrefs(*args) + op_adds_xrefs(F, n) -> bool + + + Should processor module create xrefs from the operand?. Currently + 'offset' and 'structure offset' operands create xrefs + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function op_bin in module ida_bytes: + +op_bin(*args) + op_bin(ea, n) -> bool + + + set op type to 'bin_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_chr in module ida_bytes: + +op_chr(*args) + op_chr(ea, n) -> bool + + + set op type to 'char_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_custfmt in module ida_bytes: + +op_custfmt(*args) + op_custfmt(ea, n, fid) -> bool + + + Set custom data format for operand (fid-custom data format id) + + + @param ea (C++: ea_t) + @param n (C++: int) + @param fid (C++: int) + +Help on function op_dec in module ida_bytes: + +op_dec(*args) + op_dec(ea, n) -> bool + + + set op type to 'dec_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_enum in module ida_bytes: + +op_enum(*args) + op_enum(ea, n, id, serial) -> bool + + + Set operand representation to be 'enum_t'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @param id: id of enum (C++: enum_t) + @param serial: the serial number of the constant in the enumeration, + usually 0. the serial numbers are used if the + enumeration contains several constants with the same + value (C++: uchar) + @return: success + +Help on function op_flt in module ida_bytes: + +op_flt(*args) + op_flt(ea, n) -> bool + + + set op type to 'flt_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_hex in module ida_bytes: + +op_hex(*args) + op_hex(ea, n) -> bool + + + set op type to 'hex_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_num in module ida_bytes: + +op_num(*args) + op_num(ea, n) -> bool + + + set op type to 'num_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_oct in module ida_bytes: + +op_oct(*args) + op_oct(ea, n) -> bool + + + set op type to 'oct_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_seg in module ida_bytes: + +op_seg(*args) + op_seg(ea, n) -> bool + + + Set operand representation to be 'segment'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stkvar in module ida_bytes: + +op_stkvar(*args) + op_stkvar(ea, n) -> bool + + + Set operand representation to be 'stack variable'. Should be applied + to an instruction within a function. Should be applied after creating + a stack var using 'insn_t::create_stkvar()' . + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stroff in module ida_bytes: + +op_stroff(*args) + op_stroff(insn, n, path, path_len, delta) -> bool + + + Set operand representation to be 'struct offset'. If applied to + unexplored bytes, converts them to 16/32bit word data + + @param insn: the instruction (C++: const insn_t &) + @param n: number of operand (0, 1, -1) (C++: int) + @param path: structure path (strpath). see nalt.hpp for more info. + (C++: const tid_t *) + @param path_len: length of the structure path (C++: int) + @param delta: struct offset delta. usually 0. denotes the difference + between the structure base and the pointer into the + structure. (C++: adiff_t) + @return: success + + Example: + Python> + Python> ins = ida_ua.insn_t() + Python> if ida_ua.decode_insn(ins, some_address): + Python> path_len = 1 + Python> path = ida_pro.tid_array(path_len) + Python> path[0] = ida_struct.get_struc_id("my_stucture_t") + Python> ida_bytes.op_stroff(ins, 0, path.cast(), path_len, 0) + Python> + +Help on function oword_flag in module ida_bytes: + +oword_flag(*args) + oword_flag() -> flags_t + + + Get a flags_t representing a octaword. + +Help on function packreal_flag in module ida_bytes: + +packreal_flag(*args) + packreal_flag() -> flags_t + + + Get a flags_t representing a packed decimal real. + +Help on function patch_byte in module ida_bytes: + +patch_byte(*args) + patch_byte(ea, x) -> bool + + + Patch a byte of the program. The original value of the byte is saved + and can be obtained by 'get_original_byte()' . This function works for + wide byte processors too. + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_bytes in module ida_bytes: + +patch_bytes(*args) + patch_bytes(ea, buf) + + + Patch the specified number of bytes of the program. Original values of + bytes are saved and are available with get_original...() functions. + See also 'put_bytes()' . + + @param ea: linear address (C++: ea_t) + @param buf: buffer with new values of bytes (C++: const void *) + +Help on function patch_dword in module ida_bytes: + +patch_dword(*args) + patch_dword(ea, x) -> bool + + + Patch a dword of the program. The original value of the dword is saved + and can be obtained by 'get_original_dword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_qword in module ida_bytes: + +patch_qword(*args) + patch_qword(ea, x) -> bool + + + Patch a qword of the program. The original value of the qword is saved + and can be obtained by 'get_original_qword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_word in module ida_bytes: + +patch_word(*args) + patch_word(ea, x) -> bool + + + Patch a word of the program. The original value of the word is saved + and can be obtained by 'get_original_word()' . This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function prev_addr in module ida_bytes: + +prev_addr(*args) + prev_addr(ea) -> ea_t + + + Get previous address in the program. + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function prev_chunk in module ida_bytes: + +prev_chunk(*args) + prev_chunk(ea) -> ea_t + + + Get the last address of previous contiguous chunk in the program. + + @param ea (C++: ea_t) + @return: BADADDR if previous chunk doesn't exist. + +Help on function prev_head in module ida_bytes: + +prev_head(*args) + prev_head(ea, minea) -> ea_t + + + Get start of previous defined item. + + @param ea: begin search at this address (C++: ea_t) + @param minea: included in the search range (C++: ea_t) + @return: BADADDR if none exists. + +Help on function prev_inited in module ida_bytes: + +prev_inited(*args) + prev_inited(ea, minea) -> ea_t + + + Find the previous initialized address. + + + @param ea (C++: ea_t) + @param minea (C++: ea_t) + +Help on function prev_not_tail in module ida_bytes: + +prev_not_tail(*args) + prev_not_tail(ea) -> ea_t + + + Get address of previous non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function prev_that in module ida_bytes: + +prev_that(*args) + prev_that(ea, minea, callable) -> ea_t + + + Find previous address with a flag satisfying the function 'testf'.do + not pass 'is_unknown()' to this function to find unexplored bytes It + will fail under the debugger. To find unexplored bytes, use + 'prev_unknown()' . + + @param ea: start searching from this address - 1. (C++: ea_t) + @param minea: included in the search range. (C++: ea_t) + @return: the found address or BADADDR . + +Help on function prev_unknown in module ida_bytes: + +prev_unknown(*args) + prev_unknown(ea, minea) -> ea_t + + + Similar to 'prev_that()' , but will find the previous address that is + unexplored. + + + @param ea (C++: ea_t) + @param minea (C++: ea_t) + +Help on function print_strlit_type in module ida_bytes: + +print_strlit_type(*args) + print_strlit_type(strtype, flags=0) -> PyObject * + + + Get string type information: the string type name (possibly decorated + with hotkey markers), and the tooltip. + + @param strtype: the string type (C++: int32) + @param flags: or'ed PSTF_* constants (C++: int) + @return: length of generated text + +Help on function put_byte in module ida_bytes: + +put_byte(*args) + put_byte(ea, x) -> bool + + + Set value of one byte of the program. This function modifies the + database. If the debugger is active then the debugged process memory + is patched too.The original value of the byte is completely lost and + can't be recovered by the 'get_original_byte()' function. See also + 'put_dbg_byte()' to write to the process memory directly when the + debugger is active. This function can handle wide byte processors. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint64) + @return: true if the database has been modified + +Help on function put_bytes in module ida_bytes: + +put_bytes(*args) + put_bytes(ea, buf) + + + Modify the specified number of bytes of the program. This function + does not save the original values of bytes. See also 'patch_bytes()' . + + @param ea: linear address (C++: ea_t) + @param buf: buffer with new values of bytes (C++: const void *) + +Help on function put_dword in module ida_bytes: + +put_dword(*args) + put_dword(ea, x) + + + Set value of one dword of the program. This function takes into + account order of bytes specified in \inf{is_be()} This function works + for wide byte processors too.the original value of the dword is + completely lost and can't be recovered by the 'get_original_dword()' + function. + + @param ea: linear address (C++: ea_t) + @param x: dword value (C++: uint64) + +Help on function put_qword in module ida_bytes: + +put_qword(*args) + put_qword(ea, x) + + + Set value of one qword (8 bytes) of the program. This function takes + into account order of bytes specified in \inf{is_be()} This function + DOESN'T works for wide byte processors. + + @param ea: linear address (C++: ea_t) + @param x: qword value (C++: uint64) + +Help on function put_word in module ida_bytes: + +put_word(*args) + put_word(ea, x) + + + Set value of one word of the program. This function takes into account + order of bytes specified in \inf{is_be()} This function works for wide + byte processors too.The original value of the word is completely lost + and can't be recovered by the 'get_original_word()' function. ea - + linear address x - word value + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function qword_flag in module ida_bytes: + +qword_flag(*args) + qword_flag() -> flags_t + + + Get a flags_t representing a quad word. + +Help on function register_custom_data_format in module ida_bytes: + +register_custom_data_format(*args) + register_custom_data_format(py_df) -> int + + + Registers a custom data format with a given data type. + @param df: an instance of data_format_t + @return: + < 0 if failed to register + > 0 data format id + +Help on function register_custom_data_type in module ida_bytes: + +register_custom_data_type(*args) + register_custom_data_type(py_dt) -> int + + + Registers a custom data type. + @param dt: an instance of the data_type_t class + @return: + < 0 if failed to register + > 0 data type id + +Help on function register_data_types_and_formats in module ida_bytes: + +register_data_types_and_formats(formats) + Registers multiple data types and formats at once. + To register one type/format at a time use register_custom_data_type/register_custom_data_format + + It employs a special table of types and formats described below: + + The 'formats' is a list of tuples. If a tuple has one element then it is the format to be registered with dtid=0 + If the tuple has more than one element, then tuple[0] is the data type and tuple[1:] are the data formats. For example: + many_formats = [ + (pascal_data_type(), pascal_data_format()), + (simplevm_data_type(), simplevm_data_format()), + (makedword_data_format(),), + (simplevm_data_format(),) + ] + The first two tuples describe data types and their associated formats. + The last two tuples describe two data formats to be used with built-in data types. + The data format may be attached to several data types. The id of the + data format is stored in the first data_format_t object. For example: + assert many_formats[1][1] != -1 + assert many_formats[2][0] != -1 + assert many_formats[3][0] == -1 + +Help on function revert_byte in module ida_bytes: + +revert_byte(*args) + revert_byte(ea) -> bool + + + Revert patched byte + + @param ea (C++: ea_t) + +Help on function seg_flag in module ida_bytes: + +seg_flag(*args) + seg_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function set_cmt in module ida_bytes: + +set_cmt(*args) + set_cmt(ea, comm, rptble) -> bool + + + Set an indented comment. + + @param ea: linear address (C++: ea_t) + @param comm: comment string NULL: do nothing (return 0) "" : + delete comment (C++: const char *) + @param rptble: is repeatable? (C++: bool) + @return: success + +Help on function set_forced_operand in module ida_bytes: + +set_forced_operand(*args) + set_forced_operand(ea, n, op) -> bool + + + Set forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @param op: text of operand NULL: do nothing (return 0) "" : delete + forced operand (C++: const char *) + @return: success + +Help on function set_immd in module ida_bytes: + +set_immd(*args) + set_immd(ea) -> bool + + + Set 'has immediate operand' flag. Returns true if the 'FF_IMMD' bit + was not set and now is set + + @param ea (C++: ea_t) + +Help on function set_lzero in module ida_bytes: + +set_lzero(*args) + set_lzero(ea, n) -> bool + + + Set toggle lzero bit. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function set_manual_insn in module ida_bytes: + +set_manual_insn(*args) + set_manual_insn(ea, manual_insn) + + + Set manual instruction string. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @param manual_insn: "" - delete manual string. NULL - do nothing (C++: + const char *) + +Help on function set_op_type in module ida_bytes: + +set_op_type(*args) + set_op_type(ea, type, n) -> bool + + + (internal function) change representation of operand(s). + + @param ea: linear address (C++: ea_t) + @param type: new flag value (should be obtained from char_flag() , + num_flag() and similar functions) (C++: flags_t) + @param n: number of operand (0, 1, -1) (C++: int) + +Help on function set_opinfo in module ida_bytes: + +set_opinfo(*args) + set_opinfo(ea, n, flag, ti, suppress_events=False) -> bool + + + Set additional information about an operand representation. This + function is a low level one. Only the kernel should use it. + + @param ea: linear address of the item (C++: ea_t) + @param n: number of operand, 0 or 1 (C++: int) + @param flag: flags of the item (C++: flags_t) + @param ti: additional representation information (C++: const opinfo_t + *) + @param suppress_events: do not generate changing_op_type and + op_type_changed events (C++: bool) + @return: success + +Help on function stkvar_flag in module ida_bytes: + +stkvar_flag(*args) + stkvar_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function strlit_flag in module ida_bytes: + +strlit_flag(*args) + strlit_flag() -> flags_t + + + Get a flags_t representing a string literal. + +Help on function stroff_flag in module ida_bytes: + +stroff_flag(*args) + stroff_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function stru_flag in module ida_bytes: + +stru_flag(*args) + stru_flag() -> flags_t + + + Get a flags_t representing a struct. + +Help on function tbyte_flag in module ida_bytes: + +tbyte_flag(*args) + tbyte_flag() -> flags_t + + + Get a flags_t representing a tbyte. + +Help on function toggle_bnot in module ida_bytes: + +toggle_bnot(*args) + toggle_bnot(ea, n) -> bool + + + Toggle binary negation of operand. also see 'is_bnot()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function toggle_lzero in module ida_bytes: + +toggle_lzero(*args) + toggle_lzero(ea, n) -> bool + +Help on function toggle_sign in module ida_bytes: + +toggle_sign(*args) + toggle_sign(ea, n) -> bool + + + Toggle sign of n-th operand. allowed values of n: 0-first operand, + 1-other operands + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function unregister_custom_data_format in module ida_bytes: + +unregister_custom_data_format(*args) + unregister_custom_data_format(dfid) -> bool + + + Unregisters a custom data format + @param dfid: data format id + @return: Boolean + +Help on function unregister_custom_data_type in module ida_bytes: + +unregister_custom_data_type(*args) + unregister_custom_data_type(dtid) -> bool + + + Unregisters a custom data type. + @param dtid: the data type id + @return: Boolean + +Help on function unregister_data_types_and_formats in module ida_bytes: + +unregister_data_types_and_formats(formats) + As opposed to register_data_types_and_formats(), this function + unregisters multiple data types and formats at once. + +Help on function update_hidden_range in module ida_bytes: + +update_hidden_range(*args) + update_hidden_range(ha) -> bool + + + Update hidden range information in the database. You cannot use this + function to change the range boundaries + + @param ha: range to update (C++: const hidden_range_t *) + @return: success + +Help on function use_mapping in module ida_bytes: + +use_mapping(*args) + use_mapping(ea) -> ea_t + + + Translate address according to current mappings. + + @param ea: address to translate (C++: ea_t) + @return: translated address + +Help on function visit_patched_bytes in module ida_bytes: + +visit_patched_bytes(*args) + visit_patched_bytes(ea1, ea2, py_callable) -> int + + + Enumerates patched bytes in the given range and invokes a callable + @param ea1: start address + @param ea2: end address + @param callable: a Python callable with the following prototype: + callable(ea, fpos, org_val, patch_val). + If the callable returns non-zero then that value will be + returned to the caller and the enumeration will be + interrupted. + @return: Zero if the enumeration was successful or the return + value of the callback if enumeration was interrupted. + +Help on function word_flag in module ida_bytes: + +word_flag(*args) + word_flag() -> flags_t + + + Get a flags_t representing a word. + +Help on function yword_flag in module ida_bytes: + +yword_flag(*args) + yword_flag() -> flags_t + + + Get a flags_t representing a ymm word. + +Help on function zword_flag in module ida_bytes: + +zword_flag(*args) + zword_flag() -> flags_t + + + Get a flags_t representing a zmm word. + +=== ida_bytes EPYDOC INJECTIONS === +ida_bytes.ALOPT_IGNCLT +""" +if set, don't stop at codepoints that are not part of the current +'culture'; accept all those that are graphical (this is typically used +used by user-initiated actions creating string literals.) +""" + +ida_bytes.ALOPT_IGNHEADS +""" +don't stop if another data item is encountered. only the byte values +will be used to determine the string length. if not set, a defined +data item or instruction will truncate the string +""" + +ida_bytes.ALOPT_IGNPRINT +""" +if set, don't stop at non-printable codepoints, but only at the +terminating character (or not unicode-mapped character (e.g., 0x8f in +CP1252)) +""" + +ida_bytes.ALOPT_MAX4K +""" +accumulated length + +if string length is more than 4K, return the +""" + +ida_bytes.BIN_SEARCH_BACKWARD +""" +search backward for bytes +""" + +ida_bytes.BIN_SEARCH_CASE +""" +case sensitive +""" + +ida_bytes.BIN_SEARCH_FORWARD +""" +search forward for bytes +""" + +ida_bytes.BIN_SEARCH_INITED +""" +find_byte, find_byter: any initilized value +""" + +ida_bytes.BIN_SEARCH_NOBREAK +""" +don't check for Ctrl-Break +""" + +ida_bytes.BIN_SEARCH_NOCASE +""" +case insensitive +""" + +ida_bytes.BIN_SEARCH_NOSHOW +""" +don't show search progress or update screen +""" + +ida_bytes.DELIT_DELNAMES +""" +delete any names at the specified address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_EXPAND +""" +propagate undefined items; for example if removing an instruction +removes all references to the next instruction, then plan to convert +to unexplored the next instruction too. +""" + +ida_bytes.DELIT_KEEPFUNC +""" +Just delete xrefs, ops e.t.c. + +do not undefine the function start. +""" + +ida_bytes.DELIT_NOCMT +""" +reject to delete if a comment is in address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_NOTRUNC +""" +even if 'AF_TRFUNC' is set + +don't truncate the current function +""" + +ida_bytes.DELIT_NOUNAME +""" +reject to delete if a user name is in address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_SIMPLE +""" +simply undefine the specified item(s) +""" + +ida_bytes.DTP_NODUP +""" +do not use dup construct +""" + +ida_bytes.DT_TYPE +""" +Mask for DATA typing. +""" + +ida_bytes.FF_0CHAR +""" +Char ('x')? +""" + +ida_bytes.FF_0CUST +""" +Custom representation? +""" + +ida_bytes.FF_0ENUM +""" +Enumeration? +""" + +ida_bytes.FF_0FLT +""" +Floating point number? +""" + +ida_bytes.FF_0FOP +""" +Forced operand? +""" + +ida_bytes.FF_0NUMB +""" +Binary number? +""" + +ida_bytes.FF_0NUMD +""" +Decimal number? +""" + +ida_bytes.FF_0NUMH +""" +Hexadecimal number? +""" + +ida_bytes.FF_0NUMO +""" +Octal number? +""" + +ida_bytes.FF_0OFF +""" +Offset? +""" + +ida_bytes.FF_0SEG +""" +Segment? +""" + +ida_bytes.FF_0STK +""" +Stack variable? +""" + +ida_bytes.FF_0STRO +""" +Struct offset? +""" + +ida_bytes.FF_0VOID +""" +Void (unknown)? +""" + +ida_bytes.FF_1CHAR +""" +Char ('x')? +""" + +ida_bytes.FF_1CUST +""" +Custom representation? +""" + +ida_bytes.FF_1ENUM +""" +Enumeration? +""" + +ida_bytes.FF_1FLT +""" +Floating point number? +""" + +ida_bytes.FF_1FOP +""" +Forced operand? +""" + +ida_bytes.FF_1NUMB +""" +Binary number? +""" + +ida_bytes.FF_1NUMD +""" +Decimal number? +""" + +ida_bytes.FF_1NUMH +""" +Hexadecimal number? +""" + +ida_bytes.FF_1NUMO +""" +Octal number? +""" + +ida_bytes.FF_1OFF +""" +Offset? +""" + +ida_bytes.FF_1SEG +""" +Segment? +""" + +ida_bytes.FF_1STK +""" +Stack variable? +""" + +ida_bytes.FF_1STRO +""" +Struct offset? +""" + +ida_bytes.FF_1VOID +""" +Void (unknown)? +""" + +ida_bytes.FF_ALIGN +""" +alignment directive +""" + +ida_bytes.FF_BNOT +""" +Bitwise negation of operands. +""" + +ida_bytes.FF_BYTE +""" +byte +""" + +ida_bytes.FF_CODE +""" +Code ? +""" + +ida_bytes.FF_COMM +""" +Has comment ? +""" + +ida_bytes.FF_CUSTOM +""" +custom data type +""" + +ida_bytes.FF_DATA +""" +Data ? +""" + +ida_bytes.FF_DOUBLE +""" +double +""" + +ida_bytes.FF_DWORD +""" +double word +""" + +ida_bytes.FF_FLOAT +""" +float +""" + +ida_bytes.FF_FLOW +""" +Exec flow from prev instruction. +""" + +ida_bytes.FF_FUNC +""" +function start? +""" + +ida_bytes.FF_IMMD +""" +Has Immediate value ? +""" + +ida_bytes.FF_IVL +""" +Byte has value ? +""" + +ida_bytes.FF_JUMP +""" +Has jump table or switch_info? +""" + +ida_bytes.FF_LABL +""" +Has dummy name? +""" + +ida_bytes.FF_LINE +""" +Has next or prev lines ? +""" + +ida_bytes.FF_NAME +""" +Has name ? +""" + +ida_bytes.FF_OWORD +""" +octaword/xmm word (16 bytes/128 bits) +""" + +ida_bytes.FF_PACKREAL +""" +packed decimal real +""" + +ida_bytes.FF_QWORD +""" +quadro word +""" + +ida_bytes.FF_REF +""" +has references +""" + +ida_bytes.FF_SIGN +""" +Inverted sign of operands. +""" + +ida_bytes.FF_STRLIT +""" +string literal +""" + +ida_bytes.FF_STRUCT +""" +struct variable +""" + +ida_bytes.FF_TAIL +""" +Tail ? +""" + +ida_bytes.FF_TBYTE +""" +tbyte +""" + +ida_bytes.FF_UNK +""" +Unknown ? +""" + +ida_bytes.FF_UNUSED +""" +unused bit (was used for variable bytes) +""" + +ida_bytes.FF_WORD +""" +word +""" + +ida_bytes.FF_YWORD +""" +ymm word (32 bytes/256 bits) +""" + +ida_bytes.FF_ZWORD +""" +zmm word (64 bytes/512 bits) +""" + +ida_bytes.GFE_VALUE +""" +get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote +debugging because the kernel needs to read the process memory. +""" + +ida_bytes.GMB_READALL +""" +if this bit is not set, fail at first uninited byte + +try to read all bytes +""" + +ida_bytes.GMB_WAITBOX +""" +show wait box (may return -1 in this case) +""" + +ida_bytes.ITEM_END_FIXUP +""" +stop at the first fixup +""" + +ida_bytes.ITEM_END_INITED +""" +stop when initialization changes i.e.if is_loaded(ea): stop if +uninitialized byte is encounteredif !is_loaded(ea): stop if +initialized byte is encountered +""" + +ida_bytes.ITEM_END_NAME +""" +stop at the first named location +""" + +ida_bytes.ITEM_END_XREF +""" +stop at the first referenced location +""" + +ida_bytes.MS_0TYPE +""" +Mask for 1st arg typing. +""" + +ida_bytes.MS_1TYPE +""" +Mask for the type of other operands. +""" + +ida_bytes.MS_CLS +""" +Mask for typing. +""" + +ida_bytes.MS_CODE +""" +Mask for code bits. +""" + +ida_bytes.MS_COMM +""" +Mask of common bits. +""" + +ida_bytes.MS_VAL +""" +Mask for byte value. +""" + +ida_bytes.OPND_ALL +""" +all operands +""" + +ida_bytes.OPND_MASK +""" +mask for operand number +""" + +ida_bytes.OPND_OUTER +""" +used only in set, get, del_offset() functions + +outer offset base (combined with operand number). +""" + +ida_bytes.PSTF_ENC +""" +if encoding is specified, append it +""" + +ida_bytes.PSTF_HOTKEY +""" +have hotkey markers part of the name +""" + +ida_bytes.PSTF_TBRIEF +""" +use brief name (e.g., in the 'Strings window') +""" + +ida_bytes.PSTF_TINLIN +""" +use 'inline' name (e.g., in the structures comments) +""" + +ida_bytes.PSTF_TMASK +""" +type mask +""" + +ida_bytes.PSTF_TNORM +""" +use normal name +""" + +ida_bytes.STRCONV_ESCAPE +""" +convert non-printable characters to C escapes (, \\xNN, \\uNNNN) +""" + +ida_bytes.STRCONV_INCLLEN +""" +for Pascal-style strings, include the prefixing length byte(s) as +C-escaped sequence +""" + +ida_bytes.STRCONV_REPLCHAR +""" +convert non-printable characters to the Unicode replacement character +(U+FFFD) +""" +=== ida_bytes EPYDOC INJECTIONS END === +Help on class DBG_Hooks in module ida_dbg: + +class DBG_Hooks(__builtin__.object) + | Proxy of C++ DBG_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> DBG_Hooks + | + | __repr__ = _swig_repr(self) + | + | dbg_bpt(self, *args) + | dbg_bpt(self, tid, bptea) -> int + | + | dbg_bpt_changed(self, *args) + | dbg_bpt_changed(self, bptev_code, bpt) + | + | dbg_exception(self, *args) + | dbg_exception(self, pid, tid, ea, exc_code, exc_can_cont, exc_ea, exc_info) -> int + | + | dbg_finished_loading_bpts(self, *args) + | dbg_finished_loading_bpts(self) + | + | dbg_information(self, *args) + | dbg_information(self, pid, tid, ea, info) + | + | dbg_library_load(self, *args) + | dbg_library_load(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_library_unload(self, *args) + | dbg_library_unload(self, pid, tid, ea, info) + | + | dbg_process_attach(self, *args) + | dbg_process_attach(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_process_detach(self, *args) + | dbg_process_detach(self, pid, tid, ea) + | + | dbg_process_exit(self, *args) + | dbg_process_exit(self, pid, tid, ea, exit_code) + | + | dbg_process_start(self, *args) + | dbg_process_start(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_request_error(self, *args) + | dbg_request_error(self, failed_command, failed_dbg_notification) + | + | dbg_run_to(self, *args) + | dbg_run_to(self, pid, tid, ea) + | + | dbg_started_loading_bpts(self, *args) + | dbg_started_loading_bpts(self) + | + | dbg_step_into(self, *args) + | dbg_step_into(self) + | + | dbg_step_over(self, *args) + | dbg_step_over(self) + | + | dbg_step_until_ret(self, *args) + | dbg_step_until_ret(self) + | + | dbg_suspend_process(self, *args) + | dbg_suspend_process(self) + | + | dbg_thread_exit(self, *args) + | dbg_thread_exit(self, pid, tid, ea, exit_code) + | + | dbg_thread_start(self, *args) + | dbg_thread_start(self, pid, tid, ea) + | + | dbg_trace(self, *args) + | dbg_trace(self, tid, ip) -> int + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_DBG_Hooks(self) + +Help on function add_bpt in module ida_dbg: + +add_bpt(*args) + add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + add_bpt(bpt) -> bool + + + Add a new breakpoint in the debugged process. \sq{Type, Synchronous + function - available as request, Notification, none (synchronous + function)}Only one breakpoint can exist at a given address. + + @param ea: any address in the process memory space. Depending on the + architecture, hardware breakpoints always be setup at + random address. For example, on x86, hardware breakpoints + should be aligned depending on their size. Moreover, on the + x86 architecture, it is impossible to setup more than 4 + hardware breakpoints. (C++: ea_t) + @param size: size of the breakpoint (irrelevant for software + breakpoints): As for the address, hardware breakpoints + can't always be setup with random size. (C++: asize_t) + @param type: type of the breakpoint ( BPT_SOFT for software + breakpoint) special case BPT_DEFAULT ( BPT_SOFT | + BPT_EXEC ): try to add instruction breakpoint of the + appropriate type as follows: software bpt if supported, + hwbpt otherwise (C++: bpttype_t) + +Help on function add_path_mapping in module ida_dbg: + +add_path_mapping(*args) + add_path_mapping(src, dst) + +Help on function add_virt_module in module ida_dbg: + +add_virt_module(*args) + add_virt_module(mod) -> bool + +Help on function attach_process in module ida_dbg: + +attach_process(*args) + attach_process(pid=pid_t(-1), event_id=-1) -> int + + + Attach the debugger to a running process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_attach' + }This function shouldn't be called as a request if 'NO_PROCESS' is + used. + + @param pid: PID of the process to attach to. If NO_PROCESS , a dialog + box will interactively ask the user for the process to + attach to. (C++: pid_t) + @param event_id (C++: int) + +Help on class bpt_location_t in module ida_dbg: + +class bpt_location_t(__builtin__.object) + | Proxy of C++ bpt_location_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> bpt_location_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ea(self, *args) + | ea(self) -> ea_t + | + | is_empty_path(self, *args) + | is_empty_path(self) -> bool + | + | lineno(self, *args) + | lineno(self) -> int + | + | offset(self, *args) + | offset(self) -> uval_t + | + | path(self, *args) + | path(self) -> char const * + | + | set_abs_bpt(self, *args) + | set_abs_bpt(self, a) + | + | set_rel_bpt(self, *args) + | set_rel_bpt(self, mod, _offset) + | + | set_src_bpt(self, *args) + | set_src_bpt(self, fn, _lineno) + | + | set_sym_bpt(self, *args) + | set_sym_bpt(self, _symbol, _offset=0) + | + | symbol(self, *args) + | symbol(self) -> char const * + | + | type(self, *args) + | type(self) -> bpt_loctype_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | index + | bpt_location_t_index_get(self) -> int + | + | info + | bpt_location_t_info_get(self) -> ea_t + | + | loctype + | bpt_location_t_loctype_get(self) -> bpt_loctype_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bpt_location_t(self) + +Help on class bpt_t in module ida_dbg: + +class bpt_t(__builtin__.object) + | Proxy of C++ bpt_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bpt_t + | + | __repr__ = _swig_repr(self) + | + | badbpt(self, *args) + | badbpt(self) -> bool + | + | enabled(self, *args) + | enabled(self) -> bool + | + | get_cnd_elang_idx(self, *args) + | get_cnd_elang_idx(self) -> size_t + | + | get_size(self, *args) + | get_size(self) -> int + | + | is_absbpt(self, *args) + | is_absbpt(self) -> bool + | + | is_active(self, *args) + | is_active(self) -> bool + | + | is_compiled(self, *args) + | is_compiled(self) -> bool + | + | is_hwbpt(self, *args) + | is_hwbpt(self) -> bool + | + | is_inactive(self, *args) + | is_inactive(self) -> bool + | + | is_low_level(self, *args) + | is_low_level(self) -> bool + | + | is_page_bpt(self, *args) + | is_page_bpt(self) -> bool + | + | is_partially_active(self, *args) + | is_partially_active(self) -> bool + | + | is_relbpt(self, *args) + | is_relbpt(self) -> bool + | + | is_srcbpt(self, *args) + | is_srcbpt(self) -> bool + | + | is_symbpt(self, *args) + | is_symbpt(self) -> bool + | + | is_tracemodebpt(self, *args) + | is_tracemodebpt(self) -> bool + | + | is_traceoffbpt(self, *args) + | is_traceoffbpt(self) -> bool + | + | is_traceonbpt(self, *args) + | is_traceonbpt(self) -> bool + | + | listbpt(self, *args) + | listbpt(self) -> bool + | + | set_abs_bpt(self, *args) + | set_abs_bpt(self, a) + | + | set_rel_bpt(self, *args) + | set_rel_bpt(self, mod, o) + | + | set_src_bpt(self, *args) + | set_src_bpt(self, fn, lineno) + | + | set_sym_bpt(self, *args) + | set_sym_bpt(self, sym, o) + | + | set_trace_action(self, *args) + | set_trace_action(self, enable, trace_types) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | bpt_t_cb_get(self) -> size_t + | + | cndidx + | bpt_t_cndidx_get(self) -> int + | + | condition + | bpt_t_condition_get(self) -> PyObject * + | + | ea + | bpt_t_ea_get(self) -> ea_t + | + | elang + | bpt_t_elang_get(self) -> PyObject * + | + | flags + | bpt_t_flags_get(self) -> uint32 + | + | loc + | bpt_t_loc_get(self) -> bpt_location_t + | + | pass_count + | bpt_t_pass_count_get(self) -> int + | + | pid + | bpt_t_pid_get(self) -> pid_t + | + | props + | bpt_t_props_get(self) -> uint32 + | + | size + | bpt_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | tid + | bpt_t_tid_get(self) -> thid_t + | + | type + | bpt_t_type_get(self) -> bpttype_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bpt_t(self) + +Help on class bpt_vec_t in module ida_dbg: + +class bpt_vec_t(__builtin__.object) + | Proxy of C++ qvector< bpt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> bpt_t + | + | __init__(self, *args) + | __init__(self) -> bpt_vec_t + | __init__(self, x) -> bpt_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> bpt_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> bpt_t + | begin(self) -> bpt_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> bpt_t + | end(self) -> bpt_t + | + | erase(self, *args) + | erase(self, it) -> bpt_t + | erase(self, first, last) -> bpt_t + | + | extract(self, *args) + | extract(self) -> bpt_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=bpt_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> bpt_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> bpt_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bpt_vec_t(self) + +Help on function bring_debugger_to_front in module ida_dbg: + +bring_debugger_to_front(*args) + bring_debugger_to_front() + +Help on function check_bpt in module ida_dbg: + +check_bpt(*args) + check_bpt(ea) -> int + + + Check the breakpoint at the specified address. + + @param ea (C++: ea_t) + @return: one of Breakpoint status codes + +Help on function choose_trace_file in module ida_dbg: + +choose_trace_file(*args) + choose_trace_file() -> str + + + Show the choose trace dialog. + +Help on function clear_requests_queue in module ida_dbg: + +clear_requests_queue(*args) + clear_requests_queue() + + + Clear the queue of waiting requests. \sq{Type, Synchronous function, + Notification, none (synchronous function)}If a request is currently + running, this one isn't stopped. + +Help on function clear_trace in module ida_dbg: + +clear_trace(*args) + clear_trace() + + + Clear all events in the trace buffer. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + +Help on function collect_stack_trace in module ida_dbg: + +collect_stack_trace(*args) + collect_stack_trace(tid, trace) -> bool + +Help on function continue_process in module ida_dbg: + +continue_process(*args) + continue_process() -> bool + + + Continue the execution of the process in the debugger. \sq{Type, + Synchronous function - available as Request, Notification, none + (synchronous function)}The 'continue_process()' function can be called + from a notification handler to force the continuation of the process. + In this case the request queue will not be examined, IDA will simply + resume execution. Usually it makes sense to call + 'request_continue_process()' followed by 'run_requests()' , so that + IDA will first start a queued request (if any) and then resume the + application. + +Help on function create_source_viewer in module ida_dbg: + +create_source_viewer(*args) + create_source_viewer(out_ccv, parent, custview, sf, lines, lnnum, colnum, flags) -> source_view_t * + + + Create a source code view. + + + @param out_ccv (C++: TWidget **) + @param parent (C++: TWidget *) + @param custview (C++: TWidget *) + @param sf (C++: source_file_ptr) + @param lines (C++: strvec_t *) + @param lnnum (C++: int) + @param colnum (C++: int) + @param flags (C++: int) + +Help on function dbg_add_bpt_tev in module ida_dbg: + +dbg_add_bpt_tev(*args) + dbg_add_bpt_tev(tid, ea, bp) -> bool + + + Add a new breakpoint trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ea (C++: ea_t) + @param bp (C++: ea_t) + @return: false if the operation failed, true otherwise + +Help on function dbg_add_call_tev in module ida_dbg: + +dbg_add_call_tev(*args) + dbg_add_call_tev(tid, caller, callee) + + + Add a new call trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param caller (C++: ea_t) + @param callee (C++: ea_t) + +Help on function dbg_add_debug_event in module ida_dbg: + +dbg_add_debug_event(*args) + dbg_add_debug_event(event) + + + Add a new debug event to the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param event (C++: debug_event_t *) + +Help on function dbg_add_insn_tev in module ida_dbg: + +dbg_add_insn_tev(*args) + dbg_add_insn_tev(tid, ea, save=SAVE_DIFF) -> bool + + + Add a new instruction trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ea (C++: ea_t) + @param save (C++: save_reg_values_t) + @return: false if the operation failed, true otherwise + +Help on function dbg_add_many_tevs in module ida_dbg: + +dbg_add_many_tevs(*args) + dbg_add_many_tevs(new_tevs) -> bool + + + Add many new trace elements to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param new_tevs (C++: tevinforeg_vec_t *) + @return: false if the operation failed for any tev_info_t object + +Help on function dbg_add_ret_tev in module ida_dbg: + +dbg_add_ret_tev(*args) + dbg_add_ret_tev(tid, ret_insn, return_to) + + + Add a new return trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ret_insn (C++: ea_t) + @param return_to (C++: ea_t) + +Help on function dbg_add_tev in module ida_dbg: + +dbg_add_tev(*args) + dbg_add_tev(type, tid, address) + + + Add a new trace element to the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param type (C++: tev_type_t) + @param tid (C++: thid_t) + @param address (C++: ea_t) + +Help on function dbg_add_thread in module ida_dbg: + +dbg_add_thread(*args) + dbg_add_thread(tid) + + + Add a thread to the current trace. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @param tid (C++: thid_t) + +Help on function dbg_bin_search in module ida_dbg: + +dbg_bin_search(*args) + dbg_bin_search(start_ea, end_ea, data, srch_flags) -> str + +Help on function dbg_can_query in module ida_dbg: + +dbg_can_query(*args) + dbg_can_query() -> bool + + + This function can be used to check if the debugger can be queried: + - debugger is loaded + - process is suspended + - process is not suspended but can take requests. In this case some requests like + memory read/write, bpt management succeed and register querying will fail. + Check if idaapi.get_process_state() < 0 to tell if the process is suspended + @return: Boolean + +Help on function dbg_del_thread in module ida_dbg: + +dbg_del_thread(*args) + dbg_del_thread(tid) + + + Delete a thread from the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + +Help on function dbg_is_loaded in module ida_dbg: + +dbg_is_loaded(*args) + dbg_is_loaded() -> bool + + + Checks if a debugger is loaded + @return: Boolean + +Help on function define_exception in module ida_dbg: + +define_exception(*args) + define_exception(code, name, desc, flags) -> char const * + + + Convenience function: define new exception code. + + @param code: exception code (cannot be 0) (C++: uint) + @param name: exception name (cannot be empty or NULL) (C++: const char + *) + @param desc: exception description (maybe NULL) (C++: const char *) + @param flags: combination of Exception info flags (C++: int) + @return: failure message or NULL. You must call store_exceptions() + if this function succeeds + +Help on function del_bpt in module ida_dbg: + +del_bpt(*args) + del_bpt(ea) -> bool + del_bpt(bptloc) -> bool + + + Delete an existing breakpoint in the debugged process. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + +Help on function del_bptgrp in module ida_dbg: + +del_bptgrp(*args) + del_bptgrp(name) -> bool + +Help on function del_virt_module in module ida_dbg: + +del_virt_module(*args) + del_virt_module(base) -> bool + +Help on function detach_process in module ida_dbg: + +detach_process(*args) + detach_process() -> bool + + + Detach the debugger from the debugged process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_detach' } + +Help on function diff_trace_file in module ida_dbg: + +diff_trace_file(*args) + diff_trace_file(nonnul_filename) -> bool + + + Show difference between the current trace and the one from 'filename'. + +Help on function disable_bblk_trace in module ida_dbg: + +disable_bblk_trace(*args) + disable_bblk_trace() -> bool + +Help on function disable_bpt in module ida_dbg: + +disable_bpt(*args) + disable_bpt(ea) -> bool + disable_bpt(bptloc) -> bool + +Help on function disable_func_trace in module ida_dbg: + +disable_func_trace(*args) + disable_func_trace() -> bool + +Help on function disable_insn_trace in module ida_dbg: + +disable_insn_trace(*args) + disable_insn_trace() -> bool + +Help on function disable_step_trace in module ida_dbg: + +disable_step_trace(*args) + disable_step_trace() -> bool + +Help on function edit_manual_regions in module ida_dbg: + +edit_manual_regions(*args) + edit_manual_regions() + +Help on function enable_bblk_trace in module ida_dbg: + +enable_bblk_trace(*args) + enable_bblk_trace(enable=True) -> bool + +Help on function enable_bpt in module ida_dbg: + +enable_bpt(*args) + enable_bpt(ea, enable=True) -> bool + enable_bpt(bptloc, enable=True) -> bool + +Help on function enable_func_trace in module ida_dbg: + +enable_func_trace(*args) + enable_func_trace(enable=True) -> bool + +Help on function enable_insn_trace in module ida_dbg: + +enable_insn_trace(*args) + enable_insn_trace(enable=True) -> bool + +Help on function enable_manual_regions in module ida_dbg: + +enable_manual_regions(*args) + enable_manual_regions(enable) + +Help on function enable_step_trace in module ida_dbg: + +enable_step_trace(*args) + enable_step_trace(enable=True) -> bool + +Help on class eval_ctx_t in module ida_dbg: + +class eval_ctx_t(__builtin__.object) + | Proxy of C++ eval_ctx_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea) -> eval_ctx_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | eval_ctx_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_eval_ctx_t(self) + +Help on function exist_bpt in module ida_dbg: + +exist_bpt(*args) + exist_bpt(ea) -> bool + + + Does a breakpoint exist at the given location? + + + @param ea (C++: ea_t) + +Help on function exit_process in module ida_dbg: + +exit_process(*args) + exit_process() -> bool + + + Terminate the debugging of the current process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_exit' } + +Help on function find_bpt in module ida_dbg: + +find_bpt(*args) + find_bpt(bptloc, bpt) -> bool + + + Find a breakpoint by location. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param bptloc: Breakpoint location (C++: const bpt_location_t &) + @param bpt: bpt is filled if the breakpoint was found (C++: bpt_t *) + +Help on function get_bblk_trace_options in module ida_dbg: + +get_bblk_trace_options(*args) + get_bblk_trace_options() -> int + + + Get current basic block tracing options. Also see 'BT_LOG_INSTS' + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + +Help on function get_bpt in module ida_dbg: + +get_bpt(*args) + get_bpt(ea, bpt) -> bool + + + Get the characteristics of a breakpoint. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + @param bpt: if not NULL, is filled with the characteristics. (C++: + bpt_t *) + @return: false if no breakpoint exists + +Help on function get_bpt_group in module ida_dbg: + +get_bpt_group(*args) + get_bpt_group(bptloc) -> str + +Help on function get_bpt_qty in module ida_dbg: + +get_bpt_qty(*args) + get_bpt_qty() -> int + + + Get number of breakpoints. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function get_bpt_tev_ea in module ida_dbg: + +get_bpt_tev_ea(*args) + get_bpt_tev_ea(n) -> ea_t + + + Get the address associated to a read, read/write or execution trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)}Usually, a breakpoint is associated with a read, read/write + or execution trace event. However, the returned address could be any + address in the range of this breakpoint. If the breakpoint was deleted + after the trace event, the address no longer corresponds to a valid + breakpoint. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a read, read/write or execution trace event. + +Help on function get_bptloc_string in module ida_dbg: + +get_bptloc_string(*args) + get_bptloc_string(i) -> char const * + + + Helper function for 'bpt_location_t' . + + + @param i (C++: int) + +Help on function get_call_tev_callee in module ida_dbg: + +get_call_tev_callee(*args) + get_call_tev_callee(n) -> ea_t + + + Get the called function from a function call trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function call event. + +Help on function get_current_source_file in module ida_dbg: + +get_current_source_file(*args) + get_current_source_file(path) -> bool + +Help on function get_current_source_line in module ida_dbg: + +get_current_source_line(*args) + get_current_source_line() -> int + +Help on function get_current_thread in module ida_dbg: + +get_current_thread(*args) + get_current_thread() -> thid_t + + + Get current thread ID. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_dbg_byte in module ida_dbg: + +get_dbg_byte(*args) + get_dbg_byte(x, ea) -> bool + + + Get one byte of the debugged process memory. + + @param x: pointer to byte value (C++: uint32 *) + @param ea: linear address (C++: ea_t) + @return: true success + +Help on function get_dbg_memory_info in module ida_dbg: + +get_dbg_memory_info(*args) + get_dbg_memory_info(ranges) -> int + +Help on function get_dbg_reg_info in module ida_dbg: + +get_dbg_reg_info(*args) + get_dbg_reg_info(regname, ri) -> bool + + + Get register information \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param regname (C++: const char *) + @param ri (C++: register_info_t *) + +Help on function get_debug_event in module ida_dbg: + +get_debug_event(*args) + get_debug_event() -> debug_event_t + + + Get the current debugger event. + +Help on function get_debugger_event_cond in module ida_dbg: + +get_debugger_event_cond(*args) + get_debugger_event_cond() -> char const * + +Help on function get_first_module in module ida_dbg: + +get_first_module(*args) + get_first_module(modinfo) -> bool + +Help on function get_func_trace_options in module ida_dbg: + +get_func_trace_options(*args) + get_func_trace_options() -> int + + + Get current function tracing options. Also see 'FT_LOG_RET' \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_global_var in module ida_dbg: + +get_global_var(*args) + get_global_var(prov, ea, name, out) -> bool + +Help on function get_grp_bpts in module ida_dbg: + +get_grp_bpts(*args) + get_grp_bpts(bpts, grp_name) -> ssize_t + +Help on function get_insn_tev_reg_mem in module ida_dbg: + +get_insn_tev_reg_mem(*args) + get_insn_tev_reg_mem(n, memmap) -> bool + + + Read the memory pointed by register values from an instruction trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param memmap: result (C++: memreg_infos_t *) + @return: false if not an instruction event or no memory is available + +Help on function get_insn_tev_reg_result in module ida_dbg: + +get_insn_tev_reg_result(*args) + get_insn_tev_reg_result(n, regname, regval) -> bool + + + Read the resulting register value from an instruction trace event. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param regname: name of desired register (C++: const char *) + @param regval: result (C++: regval_t *) + @return: false if not an instruction trace event or register wasn't + modified. + +Help on function get_insn_tev_reg_val in module ida_dbg: + +get_insn_tev_reg_val(*args) + get_insn_tev_reg_val(n, regname, regval) -> bool + + + Read a register value from an instruction trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)}This + is the value of the register before the execution of the instruction. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param regname: name of desired register (C++: const char *) + @param regval: result (C++: regval_t *) + @return: false if not an instruction event. + +Help on function get_insn_trace_options in module ida_dbg: + +get_insn_trace_options(*args) + get_insn_trace_options() -> int + + + Get current instruction tracing options. Also see 'IT_LOG_SAME_IP' + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + +Help on function get_ip_val in module ida_dbg: + +get_ip_val(*args) + get_ip_val() -> bool + + + Get value of the IP (program counter) register for the current thread. + Requires a suspended debugger. + +Help on function get_local_var in module ida_dbg: + +get_local_var(*args) + get_local_var(prov, ea, name, out) -> bool + +Help on function get_local_vars in module ida_dbg: + +get_local_vars(*args) + get_local_vars(prov, ea, out) -> bool + +Help on function get_manual_regions in module ida_dbg: + +get_manual_regions(*args) + get_manual_regions(ranges) + get_manual_regions() -> PyObject * + + + Returns the manual memory regions + @return: list(start_ea, end_ea, name, sclass, sbase, bitness, perm) + +Help on function get_module_info in module ida_dbg: + +get_module_info(*args) + get_module_info(ea, modinfo) -> bool + +Help on function get_next_module in module ida_dbg: + +get_next_module(*args) + get_next_module(modinfo) -> bool + +Help on function get_process_options in module ida_dbg: + +get_process_options(*args) + get_process_options(path, args, sdir, host, _pass, port) + + + Get process options. Any of the arguments may be NULL + + @param path (C++: qstring *) + @param args (C++: qstring *) + @param sdir (C++: qstring *) + @param host (C++: qstring *) + @param port (C++: int *) + +Help on function get_process_state in module ida_dbg: + +get_process_state(*args) + get_process_state() -> int + + + Return the state of the currently debugged process. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @return: one of Debugged process states + +Help on function get_processes in module ida_dbg: + +get_processes(*args) + get_processes(proclist) -> ssize_t + + + Take a snapshot of running processes and return their description. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param proclist (C++: procinfo_vec_t *) + @return: number of processes or -1 on error + +Help on function get_reg_val in module ida_dbg: + +get_reg_val(*args) + get_reg_val(regname, regval) -> bool + get_reg_val(regname, ival) -> bool + get_reg_val(regname) -> PyObject * + + + Read a register value from the current thread. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + @param regval (C++: regval_t *) + +Help on function get_reg_vals in module ida_dbg: + +get_reg_vals(*args) + get_reg_vals(tid, clsmask, values) -> int + +Help on function get_ret_tev_return in module ida_dbg: + +get_ret_tev_return(*args) + get_ret_tev_return(n) -> ea_t + + + Get the return address from a function return trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function return event. + +Help on function get_running_notification in module ida_dbg: + +get_running_notification(*args) + get_running_notification() -> dbg_notification_t + + + Get the notification associated (if any) with the current running + request. \sq{Type, Synchronous function, Notification, none + (synchronous function)} + + @return: dbg_null if no running request + +Help on function get_running_request in module ida_dbg: + +get_running_request(*args) + get_running_request() -> ui_notification_t + + + Get the current running request. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: ui_null if no running request + +Help on function get_sp_val in module ida_dbg: + +get_sp_val(*args) + get_sp_val() -> bool + + + Get value of the SP register for the current thread. Requires a + suspended debugger. + +Help on function get_srcinfo_provider in module ida_dbg: + +get_srcinfo_provider(*args) + get_srcinfo_provider(name) -> srcinfo_provider_t * + +Help on function get_step_trace_options in module ida_dbg: + +get_step_trace_options(*args) + get_step_trace_options() -> int + + + Get current step tracing options. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: Step trace options + +Help on function get_tev_ea in module ida_dbg: + +get_tev_ea(*args) + get_tev_ea(n) -> ea_t + +Help on function get_tev_event in module ida_dbg: + +get_tev_event(*args) + get_tev_event(n, d) -> bool + + + Get the corresponding debug event, if any, for the specified tev + object. \sq{Type, Synchronous function, Notification, none + (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param d: result (C++: debug_event_t *) + @return: false if the tev_t object doesn't have any associated debug + event, true otherwise, with the debug event in "d". + +Help on function get_tev_info in module ida_dbg: + +get_tev_info(*args) + get_tev_info(n, tev_info) -> bool + + + Get main information about a trace event. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param tev_info: result (C++: tev_info_t *) + @return: success + +Help on function get_tev_memory_info in module ida_dbg: + +get_tev_memory_info(*args) + get_tev_memory_info(n, mi) -> bool + + + Get the memory layout, if any, for the specified tev object. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param mi: result (C++: meminfo_vec_t *) + @return: false if the tev_t object is not of type tev_mem , true + otherwise, with the new memory layout in "mi". + +Help on function get_tev_qty in module ida_dbg: + +get_tev_qty(*args) + get_tev_qty() -> int + + + Get number of trace events available in trace buffer. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_tev_reg_mem in module ida_dbg: + +get_tev_reg_mem(tev, idx) + +Help on function get_tev_reg_mem_ea in module ida_dbg: + +get_tev_reg_mem_ea(tev, idx) + +Help on function get_tev_reg_mem_qty in module ida_dbg: + +get_tev_reg_mem_qty(tev) + +Help on function get_tev_reg_val in module ida_dbg: + +get_tev_reg_val(tev, reg) + +Help on function get_tev_tid in module ida_dbg: + +get_tev_tid(*args) + get_tev_tid(n) -> int + +Help on function get_tev_type in module ida_dbg: + +get_tev_type(*args) + get_tev_type(n) -> int + +Help on function get_thread_qty in module ida_dbg: + +get_thread_qty(*args) + get_thread_qty() -> int + + + Get number of threads. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_trace_base_address in module ida_dbg: + +get_trace_base_address(*args) + get_trace_base_address() -> ea_t + + + Get the base address of the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @return: the base address of the currently loaded trace + +Help on function get_trace_file_desc in module ida_dbg: + +get_trace_file_desc(*args) + get_trace_file_desc(filename) -> str + + + Get the file header of the specified trace file. + + + @param filename (C++: const char *) + +Help on function get_trace_platform in module ida_dbg: + +get_trace_platform(*args) + get_trace_platform() -> char const * + + + Get platform name of current trace. + +Help on function getn_bpt in module ida_dbg: + +getn_bpt(*args) + getn_bpt(n, bpt) -> bool + + + Get the characteristics of a breakpoint. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param n: number of breakpoint, is in range 0.. get_bpt_qty() -1 (C++: + int) + @param bpt: filled with the characteristics. (C++: bpt_t *) + @return: false if no breakpoint exists + +Help on function getn_thread in module ida_dbg: + +getn_thread(*args) + getn_thread(n) -> thid_t + + + Get the ID of a thread. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: + int) + @return: NO_THREAD if the thread doesn't exist. + +Help on function getn_thread_name in module ida_dbg: + +getn_thread_name(*args) + getn_thread_name(n) -> char const * + + + Get the NAME of a thread \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 + for the current thread (C++: int) + @return: thread name or NULL if the thread doesn't exist. + +Help on function graph_trace in module ida_dbg: + +graph_trace(*args) + graph_trace() -> bool + + + Show the trace callgraph. + +Help on function handle_debug_event in module ida_dbg: + +handle_debug_event(*args) + handle_debug_event(ev, rqflags) -> int + +Help on function hide_all_bpts in module ida_dbg: + +hide_all_bpts(*args) + hide_all_bpts() -> int + +Help on function internal_get_sreg_base in module ida_dbg: + +internal_get_sreg_base(*args) + internal_get_sreg_base(tid, sreg_value) -> ea_t + + + Get the sreg base, for the given thread. + + @return: The sreg base, or BADADDR on failure. + +Help on function internal_ioctl in module ida_dbg: + +internal_ioctl(*args) + internal_ioctl(fn, buf, poutbuf, poutsize) -> int + +Help on function invalidate_dbg_state in module ida_dbg: + +invalidate_dbg_state(*args) + invalidate_dbg_state(dbginv) -> int + + + Invalidate cached debugger information. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param dbginv: Debugged process invalidation options (C++: int) + @return: current debugger state (one of Debugged process states ) + +Help on function invalidate_dbgmem_config in module ida_dbg: + +invalidate_dbgmem_config(*args) + invalidate_dbgmem_config() + + + Invalidate the debugged process memory configuration. Call this + function if the debugged process might have changed its memory layout + (allocated more memory, for example) + +Help on function invalidate_dbgmem_contents in module ida_dbg: + +invalidate_dbgmem_contents(*args) + invalidate_dbgmem_contents(ea, size) + + + Invalidate the debugged process memory contents. Call this function + each time the process has been stopped or the process memory is + modified. If ea == 'BADADDR' , then the whole memory contents will be + invalidated + + @param ea (C++: ea_t) + @param size (C++: asize_t) + +Help on function is_bblk_trace_enabled in module ida_dbg: + +is_bblk_trace_enabled(*args) + is_bblk_trace_enabled() -> bool + +Help on function is_debugger_busy in module ida_dbg: + +is_debugger_busy(*args) + is_debugger_busy() -> bool + + + Is the debugger busy?. Some debuggers do not accept any commands while + the debugged application is running. For such a debugger, it is unsafe + to do anything with the database (even simple queries like get_byte + may lead to undesired consequences). Returns: true if the debugged + application is running under such a debugger + +Help on function is_debugger_memory in module ida_dbg: + +is_debugger_memory(*args) + is_debugger_memory(ea) -> bool + + + Is the address mapped to debugger memory? + + + @param ea (C++: ea_t) + +Help on function is_debugger_on in module ida_dbg: + +is_debugger_on(*args) + is_debugger_on() -> bool + + + Is the debugger currently running? + +Help on function is_func_trace_enabled in module ida_dbg: + +is_func_trace_enabled(*args) + is_func_trace_enabled() -> bool + + + Get current state of functions tracing. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + +Help on function is_insn_trace_enabled in module ida_dbg: + +is_insn_trace_enabled(*args) + is_insn_trace_enabled() -> bool + + + Get current state of instructions tracing. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + +Help on function is_reg_custom in module ida_dbg: + +is_reg_custom(*args) + is_reg_custom(regname) -> bool + + + Does a register contain a value of a custom data type? \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_reg_float in module ida_dbg: + +is_reg_float(*args) + is_reg_float(regname) -> bool + + + Does a register contain a floating point value? \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_reg_integer in module ida_dbg: + +is_reg_integer(*args) + is_reg_integer(regname) -> bool + + + Does a register contain an integer value? \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_request_running in module ida_dbg: + +is_request_running(*args) + is_request_running() -> bool + + + Is a request currently running? + +Help on function is_step_trace_enabled in module ida_dbg: + +is_step_trace_enabled(*args) + is_step_trace_enabled() -> bool + + + Get current state of step tracing. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function is_valid_trace_file in module ida_dbg: + +is_valid_trace_file(*args) + is_valid_trace_file(filename) -> bool + + + Is the specified file a valid trace file for the current database? + + + @param filename (C++: const char *) + +Help on function list_bptgrps in module ida_dbg: + +list_bptgrps(*args) + list_bptgrps(bptgrps) -> size_t + list_bptgrps() -> PyObject * + +Help on function load_debugger in module ida_dbg: + +load_debugger(*args) + load_debugger(dbgname, use_remote) -> bool + +Help on function load_trace_file in module ida_dbg: + +load_trace_file(*args) + load_trace_file(filename) -> str + + + Load a recorded trace file in the trace window. If the call succeeds + and 'buf' is not null, the description of the trace stored in the + binary trace file will be returned in 'buf' + + @param filename (C++: const char *) + +Help on class memreg_info_t in module ida_dbg: + +class memreg_info_t(__builtin__.object) + | Proxy of C++ memreg_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> memreg_info_t + | + | __repr__ = _swig_repr(self) + | + | get_bytes(self, *args) + | get_bytes(self) -> PyObject * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bytes + | get_bytes(self) -> PyObject * + | + | ea + | memreg_info_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_memreg_info_t(self) + +Help on class memreg_infos_t in module ida_dbg: + +class memreg_infos_t(__builtin__.object) + | Proxy of C++ qvector< memreg_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> memreg_info_t + | + | __init__(self, *args) + | __init__(self) -> memreg_infos_t + | __init__(self, x) -> memreg_infos_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> memreg_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> memreg_info_t + | begin(self) -> memreg_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> memreg_info_t + | end(self) -> memreg_info_t + | + | erase(self, *args) + | erase(self, it) -> memreg_info_t + | erase(self, first, last) -> memreg_info_t + | + | extract(self, *args) + | extract(self) -> memreg_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=memreg_info_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> memreg_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> memreg_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_memreg_infos_t(self) + +Help on function move_bpt_to_grp in module ida_dbg: + +move_bpt_to_grp(*args) + move_bpt_to_grp(bpt, grp_name) + + + Sets new group for the breakpoint + +Help on function put_dbg_byte in module ida_dbg: + +put_dbg_byte(*args) + put_dbg_byte(ea, x) -> bool + + + Change one byte of the debugged process memory. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint32) + @return: true if the process memory has been modified + +Help on function read_dbg_memory in module ida_dbg: + +read_dbg_memory(*args) + read_dbg_memory(ea, buffer, size) -> ssize_t + +Help on function refresh_debugger_memory in module ida_dbg: + +refresh_debugger_memory(*args) + refresh_debugger_memory() -> PyObject * + + + Refreshes the debugger memory + @return: Nothing + +Help on function rename_bptgrp in module ida_dbg: + +rename_bptgrp(*args) + rename_bptgrp(old_name, new_name) -> bool + +Help on function request_add_bpt in module ida_dbg: + +request_add_bpt(*args) + request_add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + request_add_bpt(bpt) -> bool + + + Post an 'add_bpt(ea_t, asize_t, bpttype_t)' request. + + + @param ea (C++: ea_t) + @param size (C++: asize_t) + @param type (C++: bpttype_t) + +Help on function request_attach_process in module ida_dbg: + +request_attach_process(*args) + request_attach_process(pid, event_id) -> int + + + Post an 'attach_process()' request. + + + @param pid (C++: pid_t) + @param event_id (C++: int) + +Help on function request_clear_trace in module ida_dbg: + +request_clear_trace(*args) + request_clear_trace() + + + Post a 'clear_trace()' request. + +Help on function request_continue_process in module ida_dbg: + +request_continue_process(*args) + request_continue_process() -> bool + + + Post a 'continue_process()' request.This requires an explicit call to + 'run_requests()' + +Help on function request_del_bpt in module ida_dbg: + +request_del_bpt(*args) + request_del_bpt(ea) -> bool + request_del_bpt(bptloc) -> bool + + + Post a 'del_bpt(ea_t)' request. + + + @param ea (C++: ea_t) + +Help on function request_detach_process in module ida_dbg: + +request_detach_process(*args) + request_detach_process() -> bool + + + Post a 'detach_process()' request. + +Help on function request_disable_bblk_trace in module ida_dbg: + +request_disable_bblk_trace(*args) + request_disable_bblk_trace() -> bool + +Help on function request_disable_bpt in module ida_dbg: + +request_disable_bpt(*args) + request_disable_bpt(ea) -> bool + request_disable_bpt(bptloc) -> bool + +Help on function request_disable_func_trace in module ida_dbg: + +request_disable_func_trace(*args) + request_disable_func_trace() -> bool + +Help on function request_disable_insn_trace in module ida_dbg: + +request_disable_insn_trace(*args) + request_disable_insn_trace() -> bool + +Help on function request_disable_step_trace in module ida_dbg: + +request_disable_step_trace(*args) + request_disable_step_trace() -> bool + +Help on function request_enable_bblk_trace in module ida_dbg: + +request_enable_bblk_trace(*args) + request_enable_bblk_trace(enable=True) -> bool + +Help on function request_enable_bpt in module ida_dbg: + +request_enable_bpt(*args) + request_enable_bpt(ea, enable=True) -> bool + request_enable_bpt(bptloc, enable=True) -> bool + +Help on function request_enable_func_trace in module ida_dbg: + +request_enable_func_trace(*args) + request_enable_func_trace(enable=True) -> bool + +Help on function request_enable_insn_trace in module ida_dbg: + +request_enable_insn_trace(*args) + request_enable_insn_trace(enable=True) -> bool + +Help on function request_enable_step_trace in module ida_dbg: + +request_enable_step_trace(*args) + request_enable_step_trace(enable=True) -> bool + +Help on function request_exit_process in module ida_dbg: + +request_exit_process(*args) + request_exit_process() -> bool + + + Post an 'exit_process()' request. + +Help on function request_resume_thread in module ida_dbg: + +request_resume_thread(*args) + request_resume_thread(tid) -> int + + + Post a 'resume_thread()' request. + + + @param tid (C++: thid_t) + +Help on function request_run_to in module ida_dbg: + +request_run_to(*args) + request_run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Post a 'run_to()' request. + + + @param ea (C++: ea_t) + @param pid (C++: pid_t) + @param tid (C++: thid_t) + +Help on function request_select_thread in module ida_dbg: + +request_select_thread(*args) + request_select_thread(tid) -> bool + + + Post a 'select_thread()' request. + + + @param tid (C++: thid_t) + +Help on function request_set_bblk_trace_options in module ida_dbg: + +request_set_bblk_trace_options(*args) + request_set_bblk_trace_options(options) + + + Post a 'set_bblk_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_func_trace_options in module ida_dbg: + +request_set_func_trace_options(*args) + request_set_func_trace_options(options) + + + Post a 'set_func_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_insn_trace_options in module ida_dbg: + +request_set_insn_trace_options(*args) + request_set_insn_trace_options(options) + + + Post a 'set_insn_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_reg_val in module ida_dbg: + +request_set_reg_val(*args) + request_set_reg_val(regname, o) -> PyObject * + + + Post a 'set_reg_val()' request. + + + @param regname (C++: const char *) + +Help on function request_set_resume_mode in module ida_dbg: + +request_set_resume_mode(*args) + request_set_resume_mode(tid, mode) -> bool + + + Post a 'set_resume_mode()' request. + + + @param tid (C++: thid_t) + @param mode (C++: resume_mode_t) + +Help on function request_set_step_trace_options in module ida_dbg: + +request_set_step_trace_options(*args) + request_set_step_trace_options(options) + + + Post a 'set_step_trace_options()' request. + + + @param options (C++: int) + +Help on function request_start_process in module ida_dbg: + +request_start_process(*args) + request_start_process(path=None, args=None, sdir=None) -> int + + + Post a 'start_process()' request. + + + @param path (C++: const char *) + @param args (C++: const char *) + @param sdir (C++: const char *) + +Help on function request_step_into in module ida_dbg: + +request_step_into(*args) + request_step_into() -> bool + + + Post a 'step_into()' request. + +Help on function request_step_over in module ida_dbg: + +request_step_over(*args) + request_step_over() -> bool + + + Post a 'step_over()' request. + +Help on function request_step_until_ret in module ida_dbg: + +request_step_until_ret(*args) + request_step_until_ret() -> bool + + + Post a 'step_until_ret()' request. + +Help on function request_suspend_process in module ida_dbg: + +request_suspend_process(*args) + request_suspend_process() -> bool + + + Post a 'suspend_process()' request. + +Help on function request_suspend_thread in module ida_dbg: + +request_suspend_thread(*args) + request_suspend_thread(tid) -> int + + + Post a 'suspend_thread()' request. + + + @param tid (C++: thid_t) + +Help on function resume_thread in module ida_dbg: + +resume_thread(*args) + resume_thread(tid) -> int + + + Resume thread. \sq{Type, Synchronous function - available as request, + Notification, none (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function retrieve_exceptions in module ida_dbg: + +retrieve_exceptions(*args) + retrieve_exceptions() -> excvec_t + + + Retrieve the exception information. You may freely modify the returned + vector and add/edit/delete exceptions You must call + 'store_exceptions()' after any modifications Note: exceptions with + code zero, multiple exception codes or names are prohibited + +Help on function run_requests in module ida_dbg: + +run_requests(*args) + run_requests() -> bool + + + Execute requests until all requests are processed or an asynchronous + function is called. \sq{Type, Synchronous function, Notification, none + (synchronous function)}If called from a notification handler, the + execution of requests will be postponed to the end of the execution of + all notification handlers. + + @return: false if not all requests could be processed (indicates an + asynchronous function was started) + +Help on function run_to in module ida_dbg: + +run_to(*args) + run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Execute the process until the given address is reached. If no process + is active, a new process is started. Technically, the debugger sets up + a temporary breakpoint at the given address, and continues (or starts) + the execution of the whole process. So, all threads continue their + execution! \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_run_to' } + + @param ea: target address (C++: ea_t) + @param pid: not used yet. please do not specify this parameter. (C++: + pid_t) + @param tid: not used yet. please do not specify this parameter. (C++: + thid_t) + +Help on function save_trace_file in module ida_dbg: + +save_trace_file(*args) + save_trace_file(filename, description) -> bool + + + Save the current trace in the specified file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function select_thread in module ida_dbg: + +select_thread(*args) + select_thread(tid) -> bool + + + Select the given thread as the current debugged thread. All thread + related execution functions will work on this thread. The process must + be suspended to select a new thread. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param tid: ID of the thread to select (C++: thid_t) + @return: false if the thread doesn't exist. + +Help on function send_dbg_command in module ida_dbg: + +send_dbg_command(command) + Send a direct command to the debugger backend, and + retrieve the result as a string. + + Note: any double-quotes in 'command' must be backslash-escaped. + Note: this only works with some debugger backends: Bochs, WinDbg, GDB. + + Returns: (True, ) on success, or (False, ) on failure + +Help on function set_bblk_trace_options in module ida_dbg: + +set_bblk_trace_options(*args) + set_bblk_trace_options(options) + + + Modify basic block tracing options (see 'BT_LOG_INSTS' ) + + + @param options (C++: int) + +Help on function set_bpt_group in module ida_dbg: + +set_bpt_group(*args) + set_bpt_group(bpt, grp_name) + +Help on function set_bptloc_group in module ida_dbg: + +set_bptloc_group(*args) + set_bptloc_group(bptloc, grp_name) -> bool + +Help on function set_bptloc_string in module ida_dbg: + +set_bptloc_string(*args) + set_bptloc_string(s) -> int + + + Helper function for 'bpt_location_t' . + + + @param s (C++: const char *) + +Help on function set_debugger_event_cond in module ida_dbg: + +set_debugger_event_cond(*args) + set_debugger_event_cond(nonnul_cond) + +Help on function set_debugger_options in module ida_dbg: + +set_debugger_options(*args) + set_debugger_options(options) -> uint + + + Set debugger options. Replaces debugger options with the specification + combination 'Debugger options' + + @param options (C++: uint) + @return: the old debugger options + +Help on function set_func_trace_options in module ida_dbg: + +set_func_trace_options(*args) + set_func_trace_options(options) + + + Modify function tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_highlight_trace_options in module ida_dbg: + +set_highlight_trace_options(*args) + set_highlight_trace_options(hilight, color, diff) + + + Set highlight trace parameters. + + + @param hilight (C++: bool) + @param color (C++: bgcolor_t) + @param diff (C++: bgcolor_t) + +Help on function set_insn_trace_options in module ida_dbg: + +set_insn_trace_options(*args) + set_insn_trace_options(options) + + + Modify instruction tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_manual_regions in module ida_dbg: + +set_manual_regions(*args) + set_manual_regions(ranges) + +Help on function set_process_options in module ida_dbg: + +set_process_options(*args) + set_process_options(path, args, sdir, host, _pass, port) + + + Set process options. Any of the arguments may be NULL, which means 'do + not modify' + + @param path (C++: const char *) + @param args (C++: const char *) + @param sdir (C++: const char *) + @param host (C++: const char *) + @param port (C++: int) + +Help on function set_process_state in module ida_dbg: + +set_process_state(*args) + set_process_state(newstate, p_thid, dbginv) -> int + + + Set new state for the debugged process. Notifies the IDA kernel about + the change of the debugged process state. For example, a debugger + module could call this function when it knows that the process is + suspended for a short period of time. Some IDA API calls can be made + only when the process is suspended. The process state is usually + restored before returning control to the caller. You must know that it + is ok to change the process state, doing it at arbitrary moments may + crash the application or IDA. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @param newstate: new process state (one of Debugged process states ) + if DSTATE_NOTASK is passed then the state is not + changed (C++: int) + @param p_thid: ptr to new thread id. may be NULL or pointer to + NO_THREAD . the pointed variable will contain the old + thread id upon return (C++: thid_t *) + @param dbginv: Debugged process invalidation options (C++: int) + @return: old debugger state (one of Debugged process states ) + +Help on function set_reg_val in module ida_dbg: + +set_reg_val(*args) + set_reg_val(regname, o) -> PyObject + set_reg_val(tid, regidx, o) -> PyObject * + + + Write a register value to the current thread. \sq{Type, Synchronous + function - available as Request, Notification, none (synchronous + function)} + + @param regname (C++: const char *) + +Help on function set_remote_debugger in module ida_dbg: + +set_remote_debugger(*args) + set_remote_debugger(host, _pass, port=-1) + + + Set remote debugging options. Should be used before starting the + debugger. + + @param host: If empty, IDA will use local debugger. If NULL, the host + will not be set. (C++: const char *) + @param port: If -1, the default port number will be used (C++: int) + +Help on function set_resume_mode in module ida_dbg: + +set_resume_mode(*args) + set_resume_mode(tid, mode) -> bool + + + How to resume the application. Set resume mode but do not resume + process. + + @param tid (C++: thid_t) + @param mode (C++: resume_mode_t) + +Help on function set_step_trace_options in module ida_dbg: + +set_step_trace_options(*args) + set_step_trace_options(options) + + + Modify step tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_trace_base_address in module ida_dbg: + +set_trace_base_address(*args) + set_trace_base_address(ea) + + + Set the base address of the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param ea (C++: ea_t) + +Help on function set_trace_file_desc in module ida_dbg: + +set_trace_file_desc(*args) + set_trace_file_desc(filename, description) -> bool + + + Change the description of the specified trace file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function set_trace_platform in module ida_dbg: + +set_trace_platform(*args) + set_trace_platform(platform) + + + Set platform name of current trace. + + + @param platform (C++: const char *) + +Help on function set_trace_size in module ida_dbg: + +set_trace_size(*args) + set_trace_size(size) -> bool + + + Specify the new size of the circular buffer. \sq{Type, Synchronous + function, Notification, none (synchronous function)}If you specify 0, + all available memory can be quickly used !!! + + @param size: if 0, buffer isn't circular and events are never removed. + If the new size is smaller than the existing number of + trace events, a corresponding number of trace events are + removed. (C++: int) + +Help on function srcdbg_request_step_into in module ida_dbg: + +srcdbg_request_step_into(*args) + srcdbg_request_step_into() -> bool + +Help on function srcdbg_request_step_over in module ida_dbg: + +srcdbg_request_step_over(*args) + srcdbg_request_step_over() -> bool + +Help on function srcdbg_request_step_until_ret in module ida_dbg: + +srcdbg_request_step_until_ret(*args) + srcdbg_request_step_until_ret() -> bool + +Help on function srcdbg_step_into in module ida_dbg: + +srcdbg_step_into(*args) + srcdbg_step_into() -> bool + +Help on function srcdbg_step_over in module ida_dbg: + +srcdbg_step_over(*args) + srcdbg_step_over() -> bool + +Help on function srcdbg_step_until_ret in module ida_dbg: + +srcdbg_step_until_ret(*args) + srcdbg_step_until_ret() -> bool + +Help on function start_process in module ida_dbg: + +start_process(*args) + start_process(path=None, args=None, sdir=None) -> int + + + Start a process in the debugger. \sq{Type, Asynchronous function - + available as Request, Notification, 'dbg_process_start' }You can also + use the 'run_to()' function to easily start the execution of a process + until a given address is reached.For all parameters, a NULL value + indicates the debugger will take the value from the defined Process + Options. + + @param path: path to the executable to start (C++: const char *) + @param args: arguments to pass to process (C++: const char *) + @param sdir: starting directory for the process (C++: const char *) + +Help on function step_into in module ida_dbg: + +step_into(*args) + step_into() -> bool + + + Execute one instruction in the current thread. Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_into' } + +Help on function step_over in module ida_dbg: + +step_over(*args) + step_over() -> bool + + + Execute one instruction in the current thread, but without entering + into functions. Others threads keep suspended. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_step_over' } + +Help on function step_until_ret in module ida_dbg: + +step_until_ret(*args) + step_until_ret() -> bool + + + Execute instructions in the current thread until a function return + instruction is executed (aka "step out"). Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_until_ret' } + +Help on function store_exceptions in module ida_dbg: + +store_exceptions(*args) + store_exceptions() -> bool + + + Update the exception information stored in the debugger module by + invoking its dbg->set_exception_info callback + +Help on function suspend_process in module ida_dbg: + +suspend_process(*args) + suspend_process() -> bool + + + Suspend the process in the debugger. \sq{ Type,Synchronous function + (if in a notification handler)Asynchronous function (everywhere + else)available as Request, Notification,none (if in a notification + handler) 'dbg_suspend_process' (everywhere else) }The + 'suspend_process()' function can be called from a notification handler + to force the stopping of the process. In this case, no notification + will be generated. When you suspend a process, the running command is + always aborted. + +Help on function suspend_thread in module ida_dbg: + +suspend_thread(*args) + suspend_thread(tid) -> int + + + Suspend thread. Suspending a thread may deadlock the whole application + if the suspended was owning some synchronization objects. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on class tev_info_reg_t in module ida_dbg: + +class tev_info_reg_t(__builtin__.object) + | Proxy of C++ tev_info_reg_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tev_info_reg_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | info + | tev_info_reg_t_info_get(self) -> tev_info_t + | + | registers + | tev_info_reg_t_registers_get(self) -> tev_reg_values_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tev_info_reg_t(self) + +Help on class tev_info_t in module ida_dbg: + +class tev_info_t(__builtin__.object) + | Proxy of C++ tev_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tev_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | tev_info_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | tid + | tev_info_t_tid_get(self) -> thid_t + | + | type + | tev_info_t_type_get(self) -> tev_type_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tev_info_t(self) + +Help on class tev_reg_value_t in module ida_dbg: + +class tev_reg_value_t(__builtin__.object) + | Proxy of C++ tev_reg_value_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _reg_idx=-1, _value=uint64(-1)) -> tev_reg_value_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | reg_idx + | tev_reg_value_t_reg_idx_get(self) -> int + | + | thisown + | The membership flag + | + | value + | tev_reg_value_t_value_get(self) -> regval_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tev_reg_value_t(self) + +Help on class tev_reg_values_t in module ida_dbg: + +class tev_reg_values_t(__builtin__.object) + | Proxy of C++ qvector< tev_reg_value_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> tev_reg_value_t + | + | __init__(self, *args) + | __init__(self) -> tev_reg_values_t + | __init__(self, x) -> tev_reg_values_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> tev_reg_value_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> tev_reg_value_t + | begin(self) -> tev_reg_value_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> tev_reg_value_t + | end(self) -> tev_reg_value_t + | + | erase(self, *args) + | erase(self, it) -> tev_reg_value_t + | erase(self, first, last) -> tev_reg_value_t + | + | extract(self, *args) + | extract(self) -> tev_reg_value_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=tev_reg_value_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> tev_reg_value_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> tev_reg_value_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tev_reg_values_t(self) + +Help on class tevinforeg_vec_t in module ida_dbg: + +class tevinforeg_vec_t(__builtin__.object) + | Proxy of C++ qvector< tev_info_reg_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> tev_info_reg_t + | + | __init__(self, *args) + | __init__(self) -> tevinforeg_vec_t + | __init__(self, x) -> tevinforeg_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> tev_info_reg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> tev_info_reg_t + | begin(self) -> tev_info_reg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> tev_info_reg_t + | end(self) -> tev_info_reg_t + | + | erase(self, *args) + | erase(self, it) -> tev_info_reg_t + | erase(self, first, last) -> tev_info_reg_t + | + | extract(self, *args) + | extract(self) -> tev_info_reg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=tev_info_reg_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> tev_info_reg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> tev_info_reg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tevinforeg_vec_t(self) + +Help on function update_bpt in module ida_dbg: + +update_bpt(*args) + update_bpt(bpt) -> bool + + + Update modifiable characteristics of an existing breakpoint. To update + the breakpoint location, use 'change_bptlocs()' \sq{Type, Synchronous + function, Notification, none (synchronous function)}Only the following + fields can be modified: 'bpt_t::cndbody' 'bpt_t::pass_count' + 'bpt_t::flags' 'bpt_t::size' 'bpt_t::type' Changing some properties + will require removing and then re-adding the breakpoint to the process + memory (or the debugger backend), which can lead to race conditions + (i.e., breakpoint(s) can be missed) in case the process is not + suspended. Here are a list of scenarios that will require the + breakpoint to be removed & then re-added: 'bpt_t::size' is modified + 'bpt_t::type' is modified 'bpt_t::flags' 's BPT_ENABLED is modified + 'bpt_t::flags' 's BPT_LOWCND is changed 'bpt_t::flags' 's BPT_LOWCND + remains set, but cndbody changed + + @param bpt (C++: const bpt_t *) + +Help on function wait_for_next_event in module ida_dbg: + +wait_for_next_event(*args) + wait_for_next_event(wfne, timeout) -> dbg_event_code_t + + + Wait for the next event.This function (optionally) resumes the process + execution, and waits for a debugger event until a possible timeout + occurs. + + @param wfne: combination of Wait for debugger event flags constants + (C++: int) + @param timeout: number of seconds to wait, -1-infinity (C++: int) + @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= + 0) + +Help on function write_dbg_memory in module ida_dbg: + +write_dbg_memory(*args) + write_dbg_memory(ea, py_buf, size=size_t(-1)) -> ssize_t + +=== ida_dbg EPYDOC INJECTIONS === +ida_dbg.BKPT_ACTIVE +""" +active? +""" + +ida_dbg.BKPT_BADBPT +""" +failed to write the bpt to the process memory (at least one location) +""" + +ida_dbg.BKPT_CNDREADY +""" +condition has been compiled +""" + +ida_dbg.BKPT_FAKEPEND +""" +bpt of the same type is active at the same address(es) + +fake pending bpt: it is inactive but another +""" + +ida_dbg.BKPT_LISTBPT +""" +include in bpt list (user-defined bpt) +""" + +ida_dbg.BKPT_PAGE +""" +only after writing the bpt to the process. + +written to the process as a page bpt. is available +""" + +ida_dbg.BKPT_PARTIAL +""" +partially active? (some locations were not written yet) +""" + +ida_dbg.BKPT_TRACE +""" +trace bpt; should not be deleted when the process gets suspended +""" + +ida_dbg.BPTCK_ACT +""" +breakpoint is active (written to the process) +""" + +ida_dbg.BPTCK_NO +""" +breakpoint is disabled +""" + +ida_dbg.BPTCK_NONE +""" +breakpoint does not exist +""" + +ida_dbg.BPTCK_YES +""" +breakpoint is enabled +""" + +ida_dbg.BPTEV_ADDED +""" +Breakpoint has been added. +""" + +ida_dbg.BPTEV_CHANGED +""" +Breakpoint has been modified. +""" + +ida_dbg.BPTEV_REMOVED +""" +Breakpoint has been removed. +""" + +ida_dbg.BPT_BRK +""" +suspend execution upon hit +""" + +ida_dbg.BPT_ELANG_SHIFT +""" +index of the extlang (scripting language) of the condition +""" + +ida_dbg.BPT_ENABLED +""" +enabled? +""" + +ida_dbg.BPT_LOWCND +""" +condition is calculated at low level (on the server side) +""" + +ida_dbg.BPT_TRACE +""" +add trace information upon hit +""" + +ida_dbg.BPT_TRACEON +""" +enable tracing when the breakpoint is reached +""" + +ida_dbg.BPT_TRACE_BBLK +""" +basic block tracing +""" + +ida_dbg.BPT_TRACE_FUNC +""" +function tracing +""" + +ida_dbg.BPT_TRACE_INSN +""" +instruction tracing +""" + +ida_dbg.BPT_TRACE_TYPES +""" +trace insns, functions, and basic blocks. if any of 'BPT_TRACE_TYPES' +bits are set but 'BPT_TRACEON' is clear, then turn off tracing for the +specified trace types +""" + +ida_dbg.BPT_UPDMEM +""" +refresh the memory layout and contents before evaluating bpt condition +""" + +ida_dbg.BT_LOG_INSTS +""" +log all instructions in the current basic block +""" + +ida_dbg.DBGINV_ALL +""" +invalidate everything +""" + +ida_dbg.DBGINV_MEMCFG +""" +invalidate cached process segmentation +""" + +ida_dbg.DBGINV_MEMORY +""" +invalidate cached memory contents +""" + +ida_dbg.DBGINV_NONE +""" +invalidate nothing +""" + +ida_dbg.DBGINV_REDRAW +""" +refresh the screen +""" + +ida_dbg.DBGINV_REGS +""" +invalidate cached register values +""" + +ida_dbg.DOPT_BPT_MSGS +""" +log breakpoints +""" + +ida_dbg.DOPT_END_BPT +""" +evaluate event condition on process end +""" + +ida_dbg.DOPT_ENTRY_BPT +""" +break on program entry point +""" + +ida_dbg.DOPT_EXCDLG +""" +exception dialogs: +""" + +ida_dbg.DOPT_INFO_BPT +""" +break on debugging information +""" + +ida_dbg.DOPT_INFO_MSGS +""" +log debugging info events +""" + +ida_dbg.DOPT_LIB_BPT +""" +break on library load/unload +""" + +ida_dbg.DOPT_LIB_MSGS +""" +log library loads/unloads +""" + +ida_dbg.DOPT_LOAD_DINFO +""" +automatically load debug files (pdb) +""" + +ida_dbg.DOPT_REAL_MEMORY +""" +do not hide breakpoint instructions +""" + +ida_dbg.DOPT_REDO_STACK +""" +reconstruct the stack +""" + +ida_dbg.DOPT_SEGM_MSGS +""" +log debugger segments modifications +""" + +ida_dbg.DOPT_START_BPT +""" +break on process start +""" + +ida_dbg.DOPT_TEMP_HWBPT +""" +when possible use hardware bpts for temp bpts +""" + +ida_dbg.DOPT_THREAD_BPT +""" +break on thread start/exit +""" + +ida_dbg.DOPT_THREAD_MSGS +""" +log thread starts/exits +""" + +ida_dbg.DSTATE_NOTASK +""" +no process is currently debugged +""" + +ida_dbg.DSTATE_RUN +""" +process is running +""" + +ida_dbg.DSTATE_SUSP +""" +process is suspended and will not continue +""" + +ida_dbg.EXCDLG_ALWAYS +""" +always display +""" + +ida_dbg.EXCDLG_NEVER +""" +never display exception dialogs +""" + +ida_dbg.EXCDLG_UNKNOWN +""" +display for unknown exceptions +""" + +ida_dbg.FT_LOG_RET +""" +function tracing will log returning instructions +""" + +ida_dbg.IT_LOG_SAME_IP +""" +instruction tracing will log instructions whose IP doesn't change +""" + +ida_dbg.ST_ALREADY_LOGGED +""" +step tracing will be disabled when IP is already logged +""" + +ida_dbg.ST_DIFFERENTIAL +""" +tracing: log only new instructions +""" + +ida_dbg.ST_OPTIONS_MASK +""" +mask of available options, to ensure compatibility with newer IDA +versions +""" + +ida_dbg.ST_OVER_DEBUG_SEG +""" +step tracing will be disabled when IP is in a debugger segment +""" + +ida_dbg.ST_OVER_LIB_FUNC +""" +step tracing will be disabled when IP is in a library function +""" + +ida_dbg.ST_SKIP_LOOPS +""" +step tracing will try to skip loops already recorded +""" + +ida_dbg.WFNE_ANY +""" +return the first event (even if it doesn't suspend the process) +""" + +ida_dbg.WFNE_CONT +""" +continue from the suspended state +""" + +ida_dbg.WFNE_NOWAIT +""" +(to be used with 'WFNE_CONT' ) + +do not wait for any event, immediately return 'DEC_TIMEOUT' +""" + +ida_dbg.WFNE_SILENT +""" +1: be slient, 0:display modal boxes if necessary +""" + +ida_dbg.WFNE_SUSP +""" +wait until the process gets suspended +""" + +ida_dbg.WFNE_USEC +""" +(minimum non-zero timeout is 40000us) + +timeout is specified in microseconds +""" +=== ida_dbg EPYDOC INJECTIONS END === +Help on function close_linput in module ida_diskio: + +close_linput(*args) + close_linput(li) + + + Close loader input. + + + @param li (C++: linput_t *) + +Help on function create_bytearray_linput in module ida_diskio: + +create_bytearray_linput(*args) + create_bytearray_linput(s) -> linput_t * + + + Trivial memory linput. + +Help on function create_generic_linput in module ida_diskio: + +create_generic_linput(*args) + create_generic_linput(gl) -> linput_t * + + + Create a generic linput + + @param gl: linput description. this object will be destroyed by + close_linput() using "delete gl;" (C++: generic_linput_t + *) + +Help on function create_memory_linput in module ida_diskio: + +create_memory_linput(*args) + create_memory_linput(start, size) -> linput_t * + + + Create a linput for process memory. This linput will use + read_dbg_memory() to read data. + + @param start: starting address of the input (C++: ea_t) + @param size: size of the memory area to represent as linput if + unknown, may be passed as 0 (C++: asize_t) + +Help on function eclose in module ida_diskio: + +eclose(*args) + eclose(fp) + +Help on function enumerate_files in module ida_diskio: + +enumerate_files(*args) + enumerate_files(path, fname, callback) -> PyObject * + + + Enumerate files in the specified directory while the callback returns 0. + @param path: directory to enumerate files in + @param fname: mask of file names to enumerate + @param callback: a callable object that takes the filename as + its first argument and it returns 0 to continue + enumeration or non-zero to stop enumeration. + @return: + None in case of script errors + tuple(code, fname) : If the callback returns non-zero + +Help on function fopenA in module ida_diskio: + +fopenA(*args) + fopenA(file) -> FILE * + + + Open a file for append in text mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenM in module ida_diskio: + +fopenM(*args) + fopenM(file) -> FILE * + + + Open a file for read/write in binary mode, deny write. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenRB in module ida_diskio: + +fopenRB(*args) + fopenRB(file) -> FILE * + + + Open a file for read in binary mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenRT in module ida_diskio: + +fopenRT(*args) + fopenRT(file) -> FILE * + + + Open a file for read in text mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenWB in module ida_diskio: + +fopenWB(*args) + fopenWB(file) -> FILE * + + + Open a new file for write in binary mode, deny read/write. If a file + exists, it will be removed. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenWT in module ida_diskio: + +fopenWT(*args) + fopenWT(file) -> FILE * + + + Open a new file for write in text mode, deny write. If a file exists, + it will be removed. + + @param file (C++: const char *) + @return: NULL if failure + +Help on class generic_linput_t in module ida_diskio: + +class generic_linput_t(__builtin__.object) + | Proxy of C++ generic_linput_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | read(self, *args) + | read(self, off, buffer, nbytes) -> ssize_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blocksize + | generic_linput_t_blocksize_get(self) -> uint32 + | + | filesize + | generic_linput_t_filesize_get(self) -> uint64 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_generic_linput_t(self) + +Help on function get_ida_subdirs in module ida_diskio: + +get_ida_subdirs(*args) + get_ida_subdirs(subdir, flags=0) -> int + + + Get list of directories in which to find a specific IDA resource (see + 'IDA subdirectories' ). The order of the resulting list is as follows: + + - [$IDAUSR/subdir (0..N entries)] + - $IDADIR/subdir + + @param subdir: name of the resource to list (C++: const char *) + @param flags: Subdirectory modification flags bits (C++: int) + @return: number of directories appended to 'dirs' + +Help on function get_linput_type in module ida_diskio: + +get_linput_type(*args) + get_linput_type(li) -> linput_type_t + + + Get linput type. + + + @param li (C++: linput_t *) + +Help on function get_special_folder in module ida_diskio: + +get_special_folder(*args) + get_special_folder(csidl) -> str + + + Get a folder location by CSIDL (see 'Common CSIDLs' ). Path should be + of at least MAX_PATH size + + @param csidl (C++: int) + +Help on function get_user_idadir in module ida_diskio: + +get_user_idadir(*args) + get_user_idadir() -> char const * + + + Get user ida related directory. + + - if $IDAUSR is defined: + - the first element in $IDAUSR + - else + - default user directory ($HOME/.idapro or %APPDATA%Hex-Rays/IDA Pro) + +Help on function getsysfile in module ida_diskio: + +getsysfile(*args) + getsysfile(filename, subdir) -> str + + + Search for IDA system file. This function searches for a file in:each + directory specified by IDAUSR%ida directory [+ subdir] and returns the + first match. + + @param filename (C++: const char *) + @param subdir (C++: const char *) + @return: NULL if not found, otherwise a pointer to full file name. + +Help on function idadir in module ida_diskio: + +idadir(*args) + idadir(subdir) -> char const * + + + Get IDA directory (if subdir==NULL) or the specified subdirectory (see + 'IDA subdirectories' ) + + @param subdir (C++: const char *) + +Help on function open_linput in module ida_diskio: + +open_linput(*args) + open_linput(file, remote) -> linput_t * + + + Open loader input. + + + @param file (C++: const char *) + @param remote (C++: bool) + +Help on function qlgetz in module ida_diskio: + +qlgetz(*args) + qlgetz(li, fpos) -> str + + + Read a zero-terminated string from the input. If fpos == -1 then no + seek will be performed. + + @param li (C++: linput_t *) + @param fpos (C++: int64) + +=== ida_diskio EPYDOC INJECTIONS === +ida_diskio.IDA_SUBDIR_IDADIR_FIRST +""" +$IDADIR/subdir will be first, not last +""" + +ida_diskio.IDA_SUBDIR_IDP +""" +append the processor name as a subdirectory +""" + +ida_diskio.IDA_SUBDIR_ONLY_EXISTING +""" +only existing directories will be present +""" +=== ida_diskio EPYDOC INJECTIONS END === +Help on function add_entry in module ida_entry: + +add_entry(*args) + add_entry(ord, ea, name, makecode, flags=0) -> bool + + + Add an entry point to the list of entry points. + + @param ord: ordinal number if ordinal number is equal to 'ea' then + ordinal is not used (C++: uval_t) + @param ea: linear address (C++: ea_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to the regular + comment. If name == NULL, then the old name will be + retained. (C++: const char *) + @param makecode: should the kernel convert bytes at the entry point to + instruction(s) (C++: bool) + @param flags: See AEF_* (C++: int) + @return: success (currently always true) + +Help on function get_entry in module ida_entry: + +get_entry(*args) + get_entry(ord) -> ea_t + + + Get entry point address by its ordinal + + @param ord: ordinal number of entry point (C++: uval_t) + @return: address or BADADDR + +Help on function get_entry_forwarder in module ida_entry: + +get_entry_forwarder(*args) + get_entry_forwarder(ord) -> str + + + Get forwarder name for the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry forwarder name or -1 + +Help on function get_entry_name in module ida_entry: + +get_entry_name(*args) + get_entry_name(ord) -> str + + + Get name of the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry name or -1 + +Help on function get_entry_ordinal in module ida_entry: + +get_entry_ordinal(*args) + get_entry_ordinal(idx) -> uval_t + + + Get ordinal number of an entry point. + + @param idx: internal number of entry point. Should be in the range 0.. + get_entry_qty() -1 (C++: size_t) + @return: ordinal number or 0. + +Help on function get_entry_qty in module ida_entry: + +get_entry_qty(*args) + get_entry_qty() -> size_t + + + Get number of entry points. + +Help on function rename_entry in module ida_entry: + +rename_entry(*args) + rename_entry(ord, name, flags=0) -> bool + + + Rename entry point. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to a repeatable + comment. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +Help on function set_entry_forwarder in module ida_entry: + +set_entry_forwarder(*args) + set_entry_forwarder(ord, name, flags=0) -> bool + + + Set forwarder name for ordinal. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: forwarder name for entry point. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +=== ida_entry EPYDOC INJECTIONS === +ida_entry.AEF_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly Specifying AEF_IDBENC also implies AEF_NODUMMY +""" + +ida_entry.AEF_NODUMMY +""" +it begins with a dummy suffix. See also AEF_IDBENC + +automatically prepend the name with '_' if +""" + +ida_entry.AEF_UTF8 +""" +the name is given in UTF-8 (default) +""" +=== ida_entry EPYDOC INJECTIONS END === +Help on function add_enum in module ida_enum: + +add_enum(*args) + add_enum(idx, name, flag) -> enum_t + + + Add new enum type.if idx== 'BADADDR' then add as the last idxif + name==NULL then generate a unique name "enum_%d" + + @param idx (C++: size_t) + @param name (C++: const char *) + @param flag (C++: flags_t) + +Help on function add_enum_member in module ida_enum: + +add_enum_member(*args) + add_enum_member(id, name, value, bmask=(bmask_t(-1))) -> int + + + Add member to enum type. + + @param id (C++: enum_t) + @param name (C++: const char *) + @param value (C++: uval_t) + @param bmask (C++: bmask_t) + @return: 0 if ok, otherwise one of Add enum member result codes + +Help on function del_enum in module ida_enum: + +del_enum(*args) + del_enum(id) + + + Delete an enum type. + + + @param id (C++: enum_t) + +Help on function del_enum_member in module ida_enum: + +del_enum_member(*args) + del_enum_member(id, value, serial, bmask) -> bool + + + Delete member of enum type. + + + @param id (C++: enum_t) + @param value (C++: uval_t) + @param serial (C++: uchar) + @param bmask (C++: bmask_t) + +Help on class enum_member_visitor_t in module ida_enum: + +class enum_member_visitor_t(__builtin__.object) + | Proxy of C++ enum_member_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> enum_member_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_enum_member(self, *args) + | visit_enum_member(self, cid, value) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enum_member_visitor_t(self) + +Help on function for_all_enum_members in module ida_enum: + +for_all_enum_members(*args) + for_all_enum_members(id, cv) -> int + + + Visit all members of a given enum. + + + @param id (C++: enum_t) + @param cv (C++: enum_member_visitor_t &) + +Help on function get_bmask_cmt in module ida_enum: + +get_bmask_cmt(*args) + get_bmask_cmt(id, bmask, repeatable) -> str + +Help on function get_bmask_name in module ida_enum: + +get_bmask_name(*args) + get_bmask_name(id, bmask) -> str + +Help on function get_enum in module ida_enum: + +get_enum(*args) + get_enum(name) -> enum_t + + + Get enum by name. + + + @param name (C++: const char *) + +Help on function get_enum_cmt in module ida_enum: + +get_enum_cmt(*args) + get_enum_cmt(id, repeatable) -> str + + + Get enum comment. + + + @param id (C++: enum_t) + @param repeatable (C++: bool) + +Help on function get_enum_flag in module ida_enum: + +get_enum_flag(*args) + get_enum_flag(id) -> flags_t + + + Get flags determining the representation of the enum. (currently they + define the numeric base: octal, decimal, hex, bin) and signness. + + @param id (C++: enum_t) + +Help on function get_enum_idx in module ida_enum: + +get_enum_idx(*args) + get_enum_idx(id) -> uval_t + + + Get serial number of enum. The serial number determines the place of + the enum in the enum window. + + @param id (C++: enum_t) + +Help on function get_enum_member in module ida_enum: + +get_enum_member(*args) + get_enum_member(id, value, serial, mask) -> const_t + + + Find an enum member by enum, value and bitmaskif serial -1, return a + member with any serial + + @param id (C++: enum_t) + @param value (C++: uval_t) + @param serial (C++: int) + @param mask (C++: bmask_t) + +Help on function get_enum_member_bmask in module ida_enum: + +get_enum_member_bmask(*args) + get_enum_member_bmask(id) -> bmask_t + + + Get bitmask of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_by_name in module ida_enum: + +get_enum_member_by_name(*args) + get_enum_member_by_name(name) -> const_t + + + Get a reference to an enum member by its name. + + + @param name (C++: const char *) + +Help on function get_enum_member_cmt in module ida_enum: + +get_enum_member_cmt(*args) + get_enum_member_cmt(id, repeatable) -> str + + + Get enum member's comment. + + + @param id (C++: const_t) + @param repeatable (C++: bool) + +Help on function get_enum_member_enum in module ida_enum: + +get_enum_member_enum(*args) + get_enum_member_enum(id) -> enum_t + + + Get the parent enum of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_name in module ida_enum: + +get_enum_member_name(*args) + get_enum_member_name(id) -> str + + + Get name of an enum member by const_t. + + + @param id (C++: const_t) + +Help on function get_enum_member_serial in module ida_enum: + +get_enum_member_serial(*args) + get_enum_member_serial(cid) -> uchar + + + Get serial number of an enum member. + + + @param cid (C++: const_t) + +Help on function get_enum_member_value in module ida_enum: + +get_enum_member_value(*args) + get_enum_member_value(id) -> uval_t + + + Get value of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_name in module ida_enum: + +get_enum_name(*args) + get_enum_name(id) -> str + + + Get name of enum. + + + @param id (C++: enum_t) + +Help on function get_enum_name2 in module ida_enum: + +get_enum_name2(*args) + get_enum_name2(id, flags=0) -> str + + + Get name of enum + + @param id: enum id (C++: enum_t) + @param flags: Enum name flags (C++: int) + +Help on function get_enum_qty in module ida_enum: + +get_enum_qty(*args) + get_enum_qty() -> size_t + + + Get number of declared 'enum_t' types. + +Help on function get_enum_size in module ida_enum: + +get_enum_size(*args) + get_enum_size(id) -> size_t + + + Get the number of the members of the enum. + + + @param id (C++: enum_t) + +Help on function get_enum_type_ordinal in module ida_enum: + +get_enum_type_ordinal(*args) + get_enum_type_ordinal(id) -> int32 + + + Get corresponding type ordinal number. + + + @param id (C++: enum_t) + +Help on function get_enum_width in module ida_enum: + +get_enum_width(*args) + get_enum_width(id) -> size_t + + + Get the width of a enum element allowed values: 0 + (unspecified),1,2,4,8,16,32,64 + + @param id (C++: enum_t) + +Help on function get_first_bmask in module ida_enum: + +get_first_bmask(*args) + get_first_bmask(id) -> bmask_t + + + Get first bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the smallest bitmask for enum, or DEFMASK + +Help on function get_first_enum_member in module ida_enum: + +get_first_enum_member(*args) + get_first_enum_member(id, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_first_serial_enum_member in module ida_enum: + +get_first_serial_enum_member(*args) + get_first_serial_enum_member(id, value, bmask) -> const_t + +Help on function get_last_bmask in module ida_enum: + +get_last_bmask(*args) + get_last_bmask(id) -> bmask_t + + + Get last bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the biggest bitmask for enum, or DEFMASK + +Help on function get_last_enum_member in module ida_enum: + +get_last_enum_member(*args) + get_last_enum_member(id, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_last_serial_enum_member in module ida_enum: + +get_last_serial_enum_member(*args) + get_last_serial_enum_member(id, value, bmask) -> const_t + +Help on function get_next_bmask in module ida_enum: + +get_next_bmask(*args) + get_next_bmask(id, bmask) -> bmask_t + + + Get next bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value higher than the specified + value, or DEFMASK + +Help on function get_next_enum_member in module ida_enum: + +get_next_enum_member(*args) + get_next_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_next_serial_enum_member in module ida_enum: + +get_next_serial_enum_member(*args) + get_next_serial_enum_member(in_out_serial, first_cid) -> const_t + +Help on function get_prev_bmask in module ida_enum: + +get_prev_bmask(*args) + get_prev_bmask(id, bmask) -> bmask_t + + + Get prev bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value lower than the specified value, + or DEFMASK + +Help on function get_prev_enum_member in module ida_enum: + +get_prev_enum_member(*args) + get_prev_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_prev_serial_enum_member in module ida_enum: + +get_prev_serial_enum_member(*args) + get_prev_serial_enum_member(in_out_serial, first_cid) -> const_t + +Help on function getn_enum in module ida_enum: + +getn_enum(*args) + getn_enum(n) -> enum_t + + + Get enum by its ordinal number (0..n). + + + @param n (C++: size_t) + +Help on function is_bf in module ida_enum: + +is_bf(*args) + is_bf(id) -> bool + + + Is enum a bitfield? (otherwise - plain enum, no bitmasks except for + 'DEFMASK' are allowed) + + @param id (C++: enum_t) + +Help on function is_enum_fromtil in module ida_enum: + +is_enum_fromtil(*args) + is_enum_fromtil(id) -> bool + + + Does enum come from type library? + + + @param id (C++: enum_t) + +Help on function is_enum_hidden in module ida_enum: + +is_enum_hidden(*args) + is_enum_hidden(id) -> bool + + + Is enum collapsed? + + + @param id (C++: enum_t) + +Help on function is_ghost_enum in module ida_enum: + +is_ghost_enum(*args) + is_ghost_enum(id) -> bool + + + Is a ghost copy of a local type? + + + @param id (C++: enum_t) + +Help on function is_one_bit_mask in module ida_enum: + +is_one_bit_mask(*args) + is_one_bit_mask(mask) -> bool + + + Is bitmask one bit? + + + @param mask (C++: bmask_t) + +Help on function set_bmask_cmt in module ida_enum: + +set_bmask_cmt(*args) + set_bmask_cmt(id, bmask, cmt, repeatable) -> bool + +Help on function set_bmask_name in module ida_enum: + +set_bmask_name(*args) + set_bmask_name(id, bmask, name) -> bool + +Help on function set_enum_bf in module ida_enum: + +set_enum_bf(*args) + set_enum_bf(id, bf) -> bool + + + Set 'bitfield' bit of enum (i.e. convert it to a bitfield) + + + @param id (C++: enum_t) + @param bf (C++: bool) + +Help on function set_enum_cmt in module ida_enum: + +set_enum_cmt(*args) + set_enum_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum type. + + + @param id (C++: enum_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_flag in module ida_enum: + +set_enum_flag(*args) + set_enum_flag(id, flag) -> bool + + + Set data representation flags. + + + @param id (C++: enum_t) + @param flag (C++: flags_t) + +Help on function set_enum_fromtil in module ida_enum: + +set_enum_fromtil(*args) + set_enum_fromtil(id, fromtil) -> bool + + + Specify that enum comes from a type library. + + + @param id (C++: enum_t) + @param fromtil (C++: bool) + +Help on function set_enum_ghost in module ida_enum: + +set_enum_ghost(*args) + set_enum_ghost(id, ghost) -> bool + + + Specify that enum is a ghost copy of a local type. + + + @param id (C++: enum_t) + @param ghost (C++: bool) + +Help on function set_enum_hidden in module ida_enum: + +set_enum_hidden(*args) + set_enum_hidden(id, hidden) -> bool + + + Collapse enum. + + + @param id (C++: enum_t) + @param hidden (C++: bool) + +Help on function set_enum_idx in module ida_enum: + +set_enum_idx(*args) + set_enum_idx(id, idx) -> bool + + + Set serial number of enum. Also see 'get_enum_idx()' . + + @param id (C++: enum_t) + @param idx (C++: size_t) + +Help on function set_enum_member_cmt in module ida_enum: + +set_enum_member_cmt(*args) + set_enum_member_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum member. + + + @param id (C++: const_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_member_name in module ida_enum: + +set_enum_member_name(*args) + set_enum_member_name(id, name) -> bool + + + Set name of enum member. + + + @param id (C++: const_t) + @param name (C++: const char *) + +Help on function set_enum_name in module ida_enum: + +set_enum_name(*args) + set_enum_name(id, name) -> bool + + + Set name of enum type. + + + @param id (C++: enum_t) + @param name (C++: const char *) + +Help on function set_enum_type_ordinal in module ida_enum: + +set_enum_type_ordinal(*args) + set_enum_type_ordinal(id, ord) + + + Set corresponding type ordinal number. + + + @param id (C++: enum_t) + @param ord (C++: int32) + +Help on function set_enum_width in module ida_enum: + +set_enum_width(*args) + set_enum_width(id, width) -> bool + + + See comment for 'get_enum_width()' + + + @param id (C++: enum_t) + @param width (C++: int) + +=== ida_enum EPYDOC INJECTIONS === +ida_enum.DEFMASK +""" +default bitmask +""" + +ida_enum.ENFL_REGEX +""" +apply regular expressions to beautify the name +""" + +ida_enum.ENUM_MEMBER_ERROR_ENUM +""" +bad enum id +""" + +ida_enum.ENUM_MEMBER_ERROR_ILLV +""" +bad bmask and value combination (~bmask & value != 0) +""" + +ida_enum.ENUM_MEMBER_ERROR_MASK +""" +bad bmask +""" + +ida_enum.ENUM_MEMBER_ERROR_NAME +""" +already have member with this name (bad name) +""" + +ida_enum.ENUM_MEMBER_ERROR_VALUE +""" +already have 256 members with this value +""" +=== ida_enum EPYDOC INJECTIONS END === +Help on class _IdcFunction in module ida_expr: + +class _IdcFunction(__builtin__.object) + | Internal class that calls pyw_call_idc_func() with a context + | + | Methods defined here: + | + | __call__(self, args, res) + | + | __init__(self, ctxptr) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fp_ptr + +Help on function add_idc_class in module ida_expr: + +add_idc_class(*args) + add_idc_class(name, super=None) -> idc_class_t * + + + Create a new IDC class. + + @param name: name of the new class (C++: const char *) + @param super: the base class for the new class. if the new class is + not based on any other class, pass NULL (C++: const + idc_class_t *) + @return: pointer to the created class. If such a class already exists, + a pointer to it will be returned. Pointers to other existing + classes may be invalidated by this call. + +Help on function add_idc_func in module ida_expr: + +add_idc_func(name, fp, args, defvals=None, flags=0) + Extends the IDC language by exposing a new IDC function that is backed up by a Python function + + @param name: IDC function name to expose + @param fp: Python callable that will receive the arguments and return a tuple. + @param args: Arguments. A tuple of idaapi.VT_XXX constants + @param flags: IDC function flags. A combination of EXTFUN_XXX constants + + @return: Boolean + + + Add an IDC function. This function does not modify the predefined + kernel functions. Example: + + static error_t idaapi myfunc5(idc_value_t *argv, idc_value_t *res) + { + msg("myfunc is called with arg0=%a and arg1=%s + ", argv[0].num, argv[1].str); + res->num = 5; // let's return 5 + return eOk; + } + static const char myfunc5_args[] = { VT_LONG, VT_STR, 0 }; + static const ext_idcfunc_t myfunc_desc = { "MyFunc5", myfunc5, myfunc5_args, NULL, 0, EXTFUN_BASE }; + + // after this: + add_idc_func(myfunc_desc); + + // there is a new IDC function which can be called like this: + MyFunc5(0x123, "test"); + + If the function already exists, it will be replaced by the new + function + + @return: success + +Help on function add_idc_gvar in module ida_expr: + +add_idc_gvar(*args) + add_idc_gvar(name) -> idc_value_t + + + Add global IDC variable. + + @param name: name of the global variable (C++: const char *) + @return: pointer to the created variable or existing variable. NB: the + returned pointer is valid until a new global var is added. + +Help on function compile_idc_file in module ida_expr: + +compile_idc_file(*args) + compile_idc_file(nonnul_line) -> str + +Help on function compile_idc_snippet in module ida_expr: + +compile_idc_snippet(*args) + compile_idc_snippet(func, text, resolver=None, only_safe_funcs=False) -> str + + + Compile text with IDC statements. + + @param func: name of the function to create out of the snippet (C++: + const char *) + @param text: text to compile (C++: const char *) + @param resolver: callback object to get values of undefined variables + This object will be called if IDC function contains + references to undefined variables. May be NULL. (C++: + idc_resolver_t *) + @param only_safe_funcs: if true, any calls to functions without + EXTFUN_SAFE flag will lead to a compilation + error. (C++: bool) + +Help on function compile_idc_text in module ida_expr: + +compile_idc_text(*args) + compile_idc_text(nonnul_line) -> str + +Help on function copy_idcv in module ida_expr: + +copy_idcv(*args) + copy_idcv(dst, src) -> error_t + + + Copy 'src' to 'dst'. For idc objects only a reference is copied. + + @param dst (C++: idc_value_t *) + @param src (C++: const idc_value_t &) + +Help on function create_idcv_ref in module ida_expr: + +create_idcv_ref(*args) + create_idcv_ref(ref, v) -> bool + + + Create a variable reference. Currently only references to global + variables can be created. + + @param ref: ptr to the result (C++: idc_value_t *) + @param v: variable to reference (C++: const idc_value_t *) + @return: success + +Help on function deep_copy_idcv in module ida_expr: + +deep_copy_idcv(*args) + deep_copy_idcv(dst, src) -> error_t + + + Deep copy an IDC object. This function performs deep copy of idc + objects. If 'src' is not an object, 'copy_idcv()' will be called + + @param dst (C++: idc_value_t *) + @param src (C++: const idc_value_t &) + +Help on function del_idc_func in module ida_expr: + +del_idc_func(name) + Unregisters the specified IDC function + + @param name: IDC function name to unregister + + @return: Boolean + + + Delete an IDC function + +Help on function del_idcv_attr in module ida_expr: + +del_idcv_attr(*args) + del_idcv_attr(obj, attr) -> error_t + + + Delete an object attribute. + + @param obj: variable that holds an object reference (C++: idc_value_t + *) + @param attr: attribute name (C++: const char *) + @return: error code, eOk on success + +Help on function deref_idcv in module ida_expr: + +deref_idcv(*args) + deref_idcv(v, vref_flags) -> idc_value_t + + + Dereference a 'VT_REF' variable. + + @param v: variable to dereference (C++: idc_value_t *) + @param vref_flags: Dereference IDC variable flags (C++: int) + @return: pointer to the dereference result or NULL. If returns NULL, + qerrno is set to eExecBadRef "Illegal variable reference" + +Help on function eval_expr in module ida_expr: + +eval_expr(*args) + eval_expr(rv, where, line) -> str + + + Compile and calculate an expression. + + @param rv: pointer to the result (C++: idc_value_t *) + @param where: the current linear address in the addressing space of + the program being disassembled. If will be used to + resolve names of local variables etc. if not applicable, + then should be BADADDR . (C++: ea_t) + @param line: the expression to evaluate (C++: const char *) + +Help on function eval_idc_expr in module ida_expr: + +eval_idc_expr(*args) + eval_idc_expr(rv, where, line) -> str + + + Same as 'eval_expr()' , but will always use the IDC interpreter + regardless of the currently installed extlang. + + @param rv (C++: idc_value_t *) + @param where (C++: ea_t) + +Help on function exec_idc_script in module ida_expr: + +exec_idc_script(*args) + exec_idc_script(result, path, func, args, argsnum) -> str + + + Compile and execute IDC function(s) from file. + + @param result: ptr to idc_value_t to hold result of the function. If + execution fails, this variable will contain the + exception information. You may pass NULL if you are not + interested in the returned value. (C++: idc_value_t *) + @param path: text file containing text of IDC functions (C++: const + char *) + @param func: function name to execute (C++: const char *) + @param args: array of parameters (C++: const idc_value_t) + @param argsnum: number of parameters to pass to 'fname' This number + should be equal to number of parameters the function + expects. (C++: size_t) + +Help on function exec_system_script in module ida_expr: + +exec_system_script(*args) + exec_system_script(file, complain_if_no_file=True) -> bool + + + Compile and execute "main" function from system file. + + @param file: file name with IDC function(s). The file will be searched + in the idc subdir of ida (C++: const char *) + @param complain_if_no_file: 1: display warning if the file is not + found 0: don't complain if file doesn't + exist (C++: bool) + +Help on function find_idc_class in module ida_expr: + +find_idc_class(*args) + find_idc_class(name) -> idc_class_t * + + + Find an existing IDC class by its name. + + @param name: name of the class (C++: const char *) + @return: pointer to the class or NULL. The returned pointer is valid + until a new call to add_idc_class() + +Help on function find_idc_func in module ida_expr: + +find_idc_func(*args) + find_idc_func(prefix, n=0) -> str + +Help on function find_idc_gvar in module ida_expr: + +find_idc_gvar(*args) + find_idc_gvar(name) -> idc_value_t + + + Find an existing global IDC variable by its name. + + @param name: name of the global variable (C++: const char *) + @return: pointer to the variable or NULL. NB: the returned pointer is + valid until a new global var is added. FIXME: it is difficult + to use this function in a thread safe manner + +Help on function first_idcv_attr in module ida_expr: + +first_idcv_attr(*args) + first_idcv_attr(obj) -> char const * + +Help on function free_idcv in module ida_expr: + +free_idcv(*args) + free_idcv(v) + + + Free storage used by 'VT_STR' / 'VT_OBJ' IDC variables. After this + call the variable has a numeric value 0 + + @param v (C++: idc_value_t *) + +Help on function get_idc_filename in module ida_expr: + +get_idc_filename(*args) + get_idc_filename(file) -> str + + + Get full name of IDC file name. Search for file in list of include + directories, IDCPATH directory and the current directory. + + @param file: file name without full path (C++: const char *) + @return: NULL is file not found. otherwise returns pointer to buf + +Help on function get_idcv_attr in module ida_expr: + +get_idcv_attr(*args) + get_idcv_attr(res, obj, attr, may_use_getattr=False) -> error_t + + + Get an object attribute. + + @param res: buffer for the attribute value (C++: idc_value_t *) + @param obj: variable that holds an object reference. if obj is NULL it + searches global variables, then user functions (C++: const + idc_value_t *) + @param attr: attribute name (C++: const char *) + @param may_use_getattr: may call getattr functions to calculate the + attribute if it does not exist (C++: bool) + @return: error code, eOk on success + +Help on function get_idcv_class_name in module ida_expr: + +get_idcv_class_name(*args) + get_idcv_class_name(obj) -> str + + + Retrieves the IDC object class name. + + @param obj: class instance variable (C++: const idc_value_t *) + @return: error code, eOk on success + +Help on function get_idcv_slice in module ida_expr: + +get_idcv_slice(*args) + get_idcv_slice(res, v, i1, i2, flags=0) -> error_t + + + Get slice. + + @param res: output variable that will contain the slice (C++: + idc_value_t *) + @param v: input variable (string or object) (C++: const idc_value_t + *) + @param i1: slice start index (C++: uval_t) + @param i2: slice end index (excluded) (C++: uval_t) + @param flags: IDC variable slice flags or 0 (C++: int) + @return: eOk if success + +Help on class highlighter_cbs_t in module ida_expr: + +class highlighter_cbs_t(__builtin__.object) + | Proxy of C++ highlighter_cbs_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> highlighter_cbs_t + | + | __repr__ = _swig_repr(self) + | + | cur_block_state(self, *args) + | cur_block_state(self) -> int32 + | + | prev_block_state(self, *args) + | prev_block_state(self) -> int32 + | + | set_block_state(self, *args) + | set_block_state(self, arg0) + | + | set_style(self, *args) + | set_style(self, arg0, arg1, arg2) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_highlighter_cbs_t(self) + +Help on class idc_global_t in module ida_expr: + +class idc_global_t(__builtin__.object) + | Proxy of C++ idc_global_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idc_global_t + | __init__(self, n) -> idc_global_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | idc_global_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | idc_global_t_value_get(self) -> idc_value_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idc_global_t(self) + +Help on class idc_value_t in module ida_expr: + +class idc_value_t(__builtin__.object) + | Proxy of C++ idc_value_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=0) -> idc_value_t + | __init__(self, r) -> idc_value_t + | __init__(self, _str) -> idc_value_t + | + | __repr__ = _swig_repr(self) + | + | _create_empty_string(self, *args) + | _create_empty_string(self) + | + | _idc_value_t__get_e = __get_e(self, *args) + | __get_e(self) -> wrapped_array_t< ushort,6 > + | + | c_str(self, *args) + | c_str(self) -> char const * + | + | clear(self, *args) + | clear(self) + | + | create_empty_string(self, *args) + | create_empty_string(self) + | + | is_convertible(self, *args) + | is_convertible(self) -> bool + | + | is_integral(self, *args) + | is_integral(self) -> bool + | + | is_zero(self, *args) + | is_zero(self) -> bool + | + | qstr(self, *args) + | qstr(self) -> qstring + | qstr(self) -> qstring const & + | + | set_float(self, *args) + | set_float(self, f) + | + | set_int64(self, *args) + | set_int64(self, v) + | + | set_long(self, *args) + | set_long(self, v) + | + | set_pvoid(self, *args) + | set_pvoid(self, p) + | + | set_string(self, *args) + | set_string(self, _str, len) + | set_string(self, _str) + | + | swap(self, *args) + | swap(self, v) + | + | u_str(self, *args) + | u_str(self) -> uchar const * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | __get_e(self) -> wrapped_array_t< ushort,6 > + | + | funcidx + | idc_value_t_funcidx_get(self) -> int + | + | i64 + | idc_value_t_i64_get(self) -> int64 + | + | num + | idc_value_t_num_get(self) -> sval_t + | + | obj + | idc_value_t_obj_get(self) -> idc_object_t * + | + | pvoid + | idc_value_t_pvoid_get(self) -> void * + | + | reserve + | idc_value_t_reserve_get(self) -> uchar [sizeof(qstring)] + | + | str + | + | thisown + | The membership flag + | + | vtype + | idc_value_t_vtype_get(self) -> char + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idc_value_t(self) + +Help on class idc_values_t in module ida_expr: + +class idc_values_t(__builtin__.object) + | Proxy of C++ qvector< idc_value_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> idc_value_t + | + | __init__(self, *args) + | __init__(self) -> idc_values_t + | __init__(self, x) -> idc_values_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> idc_value_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> idc_value_t + | begin(self) -> idc_value_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> idc_value_t + | end(self) -> idc_value_t + | + | erase(self, *args) + | erase(self, it) -> idc_value_t + | erase(self, first, last) -> idc_value_t + | + | extract(self, *args) + | extract(self) -> idc_value_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=idc_value_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> idc_value_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> idc_value_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idc_values_t(self) + +Help on function idcv_float in module ida_expr: + +idcv_float(*args) + idcv_float(v) -> error_t + + + Convert IDC variable to a floating point. + + + @param v (C++: idc_value_t *) + +Help on function idcv_int64 in module ida_expr: + +idcv_int64(*args) + idcv_int64(v) -> error_t + + + Convert IDC variable to a 64bit number. + + @param v (C++: idc_value_t *) + @return: v = 0 if impossible to convert to int64 + +Help on function idcv_long in module ida_expr: + +idcv_long(*args) + idcv_long(v) -> error_t + + + Convert IDC variable to a long (32/64bit) number. + + @param v (C++: idc_value_t *) + @return: v = 0 if impossible to convert to long + +Help on function idcv_num in module ida_expr: + +idcv_num(*args) + idcv_num(v) -> error_t + + + Convert IDC variable to a long number. + + @param v (C++: idc_value_t *) + @return: v = 0 if IDC variable = "false" string v = 1 if IDC + variable = "true" string v = number if IDC variable is + number or string containing a number eTypeConflict if IDC + variable = empty string + +Help on function idcv_object in module ida_expr: + +idcv_object(*args) + idcv_object(v, icls=None) -> error_t + + + Create an IDC object. The original value of 'v' is discarded (freed). + + @param v: variable to hold the object. any previous value will be + cleaned (C++: idc_value_t *) + @param icls: ptr to the desired class. NULL means "object" class this + ptr must be returned by add_idc_class() or + find_idc_class() (C++: const idc_class_t *) + @return: always eOk + +Help on function idcv_string in module ida_expr: + +idcv_string(*args) + idcv_string(v) -> error_t + + + Convert IDC variable to a text string. + + + @param v (C++: idc_value_t *) + +Help on function last_idcv_attr in module ida_expr: + +last_idcv_attr(*args) + last_idcv_attr(obj) -> char const * + +Help on function move_idcv in module ida_expr: + +move_idcv(*args) + move_idcv(dst, src) -> error_t + + + Move 'src' to 'dst'. This function is more effective than copy_idcv + since it never copies big amounts of data. + + @param dst (C++: idc_value_t *) + @param src (C++: idc_value_t *) + +Help on function next_idcv_attr in module ida_expr: + +next_idcv_attr(*args) + next_idcv_attr(obj, attr) -> char const * + +Help on function prev_idcv_attr in module ida_expr: + +prev_idcv_attr(*args) + prev_idcv_attr(obj, attr) -> char const * + +Help on function print_idcv in module ida_expr: + +print_idcv(*args) + print_idcv(v, name=None, indent=0) -> str + + + Get text representation of 'idc_value_t' . + + + @param v (C++: const idc_value_t &) + @param name (C++: const char *) + @param indent (C++: int) + +Help on function py_add_idc_func in module ida_expr: + +py_add_idc_func(*args) + py_add_idc_func(name, fp_ptr, args, defvals, flags) -> bool + +Help on function py_get_call_idc_func in module ida_expr: + +py_get_call_idc_func(*args) + py_get_call_idc_func() -> size_t + +Help on function pyw_convert_defvals in module ida_expr: + +pyw_convert_defvals(*args) + pyw_convert_defvals(out, py_seq) -> bool + +Help on function pyw_register_idc_func in module ida_expr: + +pyw_register_idc_func(*args) + pyw_register_idc_func(name, args, py_fp) -> size_t + +Help on function pyw_unregister_idc_func in module ida_expr: + +pyw_unregister_idc_func(*args) + pyw_unregister_idc_func(ctxptr) -> bool + +Help on function set_header_path in module ida_expr: + +set_header_path(*args) + set_header_path(path, add) -> bool + + + Set or append a header path. IDA looks for the include files in the + appended header paths, then in the ida executable directory. + + @param path: list of directories to add (separated by ';') may be + NULL, in this case nothing is added (C++: const char *) + @param add: true: append. false: remove old paths. (C++: bool) + +Help on function set_idcv_attr in module ida_expr: + +set_idcv_attr(*args) + set_idcv_attr(obj, attr, value, may_use_setattr=False) -> error_t + + + Set an object attribute. + + @param obj: variable that holds an object reference. if obj is NULL + then it tries to modify a global variable with the + attribute name (C++: idc_value_t *) + @param attr: attribute name (C++: const char *) + @param value: new attribute value (C++: const idc_value_t &) + @param may_use_setattr: may call setattr functions for the class (C++: + bool) + @return: error code, eOk on success + +Help on function set_idcv_slice in module ida_expr: + +set_idcv_slice(*args) + set_idcv_slice(v, i1, i2, _in, flags=0) -> error_t + + + Set slice. + + @param v: variable to modify (string or object) (C++: idc_value_t *) + @param i1: slice start index (C++: uval_t) + @param i2: slice end index (excluded) (C++: uval_t) + @param flags: IDC variable slice flags or 0 (C++: int) + @return: eOk on success + +Help on function swap_idcvs in module ida_expr: + +swap_idcvs(*args) + swap_idcvs(v1, v2) + + + Swap 2 variables. + + + @param v1 (C++: idc_value_t *) + @param v2 (C++: idc_value_t *) + +Help on function throw_idc_exception in module ida_expr: + +throw_idc_exception(*args) + throw_idc_exception(r, desc) -> error_t + + + Create an idc execution exception object. This helper function can be + used to return an exception from C++ code to IDC. In other words this + function can be called from 'idc_func_t()' callbacks. Sample usage: if + ( !ok ) return throw_idc_exception(r, "detailed error msg"); + + @param r: object to hold the exception object (C++: idc_value_t *) + @param desc: exception description (C++: const char *) + @return: eExecThrow + +=== ida_expr EPYDOC INJECTIONS === +ida_expr.CPL_DEL_MACROS +""" +delete macros at the end of compilation +""" + +ida_expr.CPL_ONLY_SAFE +""" +allow calls of only thread-safe functions +""" + +ida_expr.CPL_USE_LABELS +""" +allow program labels in the script +""" + +ida_expr.IDC_LANG_EXT +""" +IDC script extension. +""" + +ida_expr.VARSLICE_SINGLE +""" +return single index (i2 is ignored) +""" + +ida_expr.VREF_COPY +""" +copy the result to the input var (v) +""" + +ida_expr.VREF_LOOP +""" +dereference until we get a non 'VT_REF' +""" + +ida_expr.VREF_ONCE +""" +dereference only once, do not loop +""" + +ida_expr.VT_FLOAT +""" +Floating point (see 'idc_value_t::e' ) +""" + +ida_expr.VT_FUNC +""" +Function (see 'idc_value_t::funcidx' ) +""" + +ida_expr.VT_INT64 +""" +i64 +""" + +ida_expr.VT_LONG +""" +Integer (see 'idc_value_t::num' ) +""" + +ida_expr.VT_OBJ +""" +Object (see idc_value_t::obj) +""" + +ida_expr.VT_PVOID +""" +void * +""" + +ida_expr.VT_REF +""" +Reference. +""" + +ida_expr.VT_STR +""" +String (see qstr() and similar functions) +""" + +ida_expr.VT_WILD +""" +Function with arbitrary number of arguments. The actual number of +arguments will be passed in 'idc_value_t::num' . This value should not +be used for 'idc_value_t' . +""" + +ida_expr.eExecThrow +""" +See return value of 'idc_func_t' . +""" +=== ida_expr EPYDOC INJECTIONS END === +Help on function calc_fixup_size in module ida_fixup: + +calc_fixup_size(*args) + calc_fixup_size(type) -> int + + + Calculate size of fixup in bytes (the number of bytes the fixup + patches) + + @param type (C++: fixup_type_t) + +Help on function contains_fixups in module ida_fixup: + +contains_fixups(*args) + contains_fixups(ea, size) -> bool + + + Does the specified address range contain any fixup information? + + + @param ea (C++: ea_t) + @param size (C++: asize_t) + +Help on function del_fixup in module ida_fixup: + +del_fixup(*args) + del_fixup(source) + + + Delete fixup information. + + + @param source (C++: ea_t) + +Help on function exists_fixup in module ida_fixup: + +exists_fixup(*args) + exists_fixup(source) -> bool + + + Check that a fixup exists at the given address. + + + @param source (C++: ea_t) + +Help on function find_custom_fixup in module ida_fixup: + +find_custom_fixup(*args) + find_custom_fixup(name) -> fixup_type_t + + + Get id of a custom fixup handler. + + @param name: name of the custom fixup handler (C++: const char *) + @return: id with FIXUP_CUSTOM bit set or 0 + +Help on class fixup_data_t in module ida_fixup: + +class fixup_data_t(__builtin__.object) + | Proxy of C++ fixup_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> fixup_data_t + | __init__(self, type_, flags_=0) -> fixup_data_t + | + | __repr__ = _swig_repr(self) + | + | calc_size(self, *args) + | calc_size(self) -> int + | + | clr_extdef(self, *args) + | clr_extdef(self) + | + | clr_unused(self, *args) + | clr_unused(self) + | + | get(self, *args) + | get(self, source) -> bool + | + | get_base(self, *args) + | get_base(self) -> ea_t + | + | get_desc(self, *args) + | get_desc(self, source) -> char const * + | + | get_flags(self, *args) + | get_flags(self) -> uint32 + | + | get_handler(self, *args) + | get_handler(self) -> fixup_handler_t const * + | + | get_type(self, *args) + | get_type(self) -> fixup_type_t + | + | get_value(self, *args) + | get_value(self, ea) -> uval_t + | + | has_base(self, *args) + | has_base(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_extdef(self, *args) + | is_extdef(self) -> bool + | + | is_unused(self, *args) + | is_unused(self) -> bool + | + | patch_value(self, *args) + | patch_value(self, ea) -> bool + | + | set(self, *args) + | set(self, source) + | + | set_base(self, *args) + | set_base(self, new_base) + | + | set_extdef(self, *args) + | set_extdef(self) + | + | set_sel(self, *args) + | set_sel(self, seg) + | + | set_target_sel(self, *args) + | set_target_sel(self) + | + | set_type(self, *args) + | set_type(self, type_) + | + | set_type_and_flags(self, *args) + | set_type_and_flags(self, type_, flags_=0) + | + | set_unused(self, *args) + | set_unused(self) + | + | was_created(self, *args) + | was_created(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | displacement + | fixup_data_t_displacement_get(self) -> adiff_t + | + | off + | fixup_data_t_off_get(self) -> ea_t + | + | sel + | fixup_data_t_sel_get(self) -> sel_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_fixup_data_t(self) + +Help on class fixup_info_t in module ida_fixup: + +class fixup_info_t(__builtin__.object) + | Proxy of C++ fixup_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> fixup_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | fixup_info_t_ea_get(self) -> ea_t + | + | fd + | fixup_info_t_fd_get(self) -> fixup_data_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_fixup_info_t(self) + +Help on function gen_fix_fixups in module ida_fixup: + +gen_fix_fixups(*args) + gen_fix_fixups(_from, to, size) + + + Relocate the bytes with fixup information once more (generic + function). This function may be called from 'loader_t::move_segm()' if + it suits the goal. If 'loader_t::move_segm' is not defined then this + function will be called automatically when moving segments or rebasing + the entire program. Special parameter values (from = BADADDR, size = + 0, to = delta) are used when the function is called from + rebase_program(delta). + + @param _from (C++: ea_t) + @param to (C++: ea_t) + @param size (C++: asize_t) + +Help on function get_first_fixup_ea in module ida_fixup: + +get_first_fixup_ea(*args) + get_first_fixup_ea() -> ea_t + + + Get the first address with fixup information + + @return: the first address with fixup information, or BADADDR + +Help on function get_fixup in module ida_fixup: + +get_fixup(*args) + get_fixup(fd, source) -> bool + + + Get fixup information. + + + @param fd (C++: fixup_data_t *) + @param source (C++: ea_t) + +Help on function get_fixup_desc in module ida_fixup: + +get_fixup_desc(*args) + get_fixup_desc(source, fd) -> str + + + Get FIXUP description comment. + + + @param source (C++: ea_t) + @param fd (C++: const fixup_data_t &) + +Help on function get_fixup_handler in module ida_fixup: + +get_fixup_handler(*args) + get_fixup_handler(type) -> fixup_handler_t const * + + + Get handler of standard or custom fixup. + + + @param type (C++: fixup_type_t) + +Help on function get_fixup_value in module ida_fixup: + +get_fixup_value(*args) + get_fixup_value(ea, type) -> uval_t + + + Get the operand value. This function get fixup bytes from data or an + instruction at `ea' and convert them to the operand value (maybe + partially). It is opposite in meaning to the 'patch_fixup_value()' . + For example, FIXUP_HI8 read a byte at 'patch_fixup_value()' `ea' and + shifts it left by 8 bits, or AArch64's custom fixup BRANCH26 get low + 26 bits of the insn at `ea' and shifts it left by 2 bits. This + function is mainly used to get a relocation addend. + 'fixup_handler_t::size' + + @param ea: address to get fixup bytes from, the size of the fixup + bytes depends on the fixup type. (C++: ea_t) + @param type (C++: fixup_type_t) + +Help on function get_fixups in module ida_fixup: + +get_fixups(*args) + get_fixups(out, ea, size) -> bool + +Help on function get_next_fixup_ea in module ida_fixup: + +get_next_fixup_ea(*args) + get_next_fixup_ea(ea) -> ea_t + + + Find next address with fixup information + + @param ea: current address (C++: ea_t) + @return: the next address with fixup information, or BADADDR + +Help on function get_prev_fixup_ea in module ida_fixup: + +get_prev_fixup_ea(*args) + get_prev_fixup_ea(ea) -> ea_t + + + Find previous address with fixup information + + @param ea: current address (C++: ea_t) + @return: the previous address with fixup information, or BADADDR + +Help on function is_fixup_custom in module ida_fixup: + +is_fixup_custom(*args) + is_fixup_custom(type) -> bool + + + Is fixup processed by processor module? + + + @param type (C++: fixup_type_t) + +Help on function patch_fixup_value in module ida_fixup: + +patch_fixup_value(*args) + patch_fixup_value(ea, fd) -> bool + + + Patch the fixup bytes. This function updates data or an instruction at + `ea' to the fixup bytes. For example, FIXUP_HI8 updates a byte at `ea' + to the high byte of `fd->off' , or AArch64's custom fixup BRANCH26 + updates low 26 bits of the insn at `ea' to the value of `fd->off' + shifted right by 2. 'fixup_handler_t::size' + + @param ea: address where data are changed, the size of the changed + data depends on the fixup type. (C++: ea_t) + @param fd (C++: const fixup_data_t &) + +Help on function set_fixup in module ida_fixup: + +set_fixup(*args) + set_fixup(source, fd) + + + Set fixup information. You should fill 'fixup_data_t' and call this + function and the kernel will remember information in the database. + + @param source: the fixup source address, i.e. the address modified by + the fixup (C++: ea_t) + @param fd: fixup data (C++: const fixup_data_t &) + +=== ida_fixup EPYDOC INJECTIONS === +ida_fixup.FIXUPF_CREATED +""" +fixup was not present in the input file +""" + +ida_fixup.FIXUPF_EXTDEF +""" +target is a location (otherwise - segment). Use this bit if the target +is a symbol rather than an offset from the beginning of a segment. +""" + +ida_fixup.FIXUPF_LOADER_MASK +""" +additional flags. The bits from this mask are not stored in the +database and can be used by the loader at its discretion. +""" + +ida_fixup.FIXUPF_REL +""" +fixup is relative to the linear address `base' . Otherwise fixup is +relative to the start of the segment with `sel' selector. +""" + +ida_fixup.FIXUPF_UNUSED +""" +fixup is ignored by IDAdisallows the kernel to convert operandsthis +fixup is not used during output +""" +=== ida_fixup EPYDOC INJECTIONS END === +Help on class qfile_t in module ida_fpro: + +class qfile_t(__builtin__.object) + | Proxy of C++ qfile_t class. + | + | + | A helper class to work with FILE related functions. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, rhs) -> qfile_t + | __init__(self, pycapsule=None) -> qfile_t + | + | + | Closes the file + | + | __repr__ = _swig_repr(self) + | + | close(self, *args) + | close(self) + | + | filename(self, *args) + | filename(self) -> PyObject * + | + | flush(self, *args) + | flush(self) -> int + | + | + | Reads a single byte from the file. Returns None if EOF or the read byte + | + | get_char(self, *args) + | get_char(self) -> PyObject * + | + | get_fp(self, *args) + | get_fp(self) -> FILE * + | + | gets(self, *args) + | gets(self, size) -> PyObject * + | + | + | Reads a line from the input file. Returns the read line or None + | + | open(self, *args) + | open(self, filename, mode) -> bool + | + | + | Opens a file + | + | @param filename: the file name + | @param mode: The mode string, ala fopen() style + | @return: Boolean + | + | opened(self, *args) + | opened(self) -> bool + | + | + | Checks if the file is opened or not + | + | put_char(self, *args) + | put_char(self, chr) -> int + | + | puts(self, *args) + | puts(self, str) -> int + | + | read(self, *args) + | read(self, size) -> PyObject * + | + | + | Reads from the file. Returns the buffer or None + | + | readbytes(self, *args) + | readbytes(self, size, big_endian) -> PyObject * + | + | + | Similar to read() but it respect the endianness + | + | seek(self, *args) + | seek(self, offset, whence=SEEK_SET) -> int + | + | + | Set input source position + | @return: the new position (not 0 as fseek!) + | + | size(self, *args) + | size(self) -> int64 + | + | tell(self, *args) + | tell(self) -> int64 + | + | + | Returns the current position + | + | write(self, *args) + | write(self, py_buf) -> int + | + | + | Writes to the file. Returns 0 or the number of bytes written + | + | writebytes(self, *args) + | writebytes(self, py_buf, big_endian) -> int + | + | + | Similar to write() but it respect the endianness + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | from_capsule(*args) + | from_capsule(pycapsule) -> qfile_t + | + | from_fp(*args) + | from_fp(fp) -> qfile_t + | + | tmpfile(*args) + | tmpfile() -> qfile_t + | + | + | A static method to construct an instance using a temporary file + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __idc_cvt_id__ + | qfile_t___idc_cvt_id___get(self) -> int + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qfile_t(self) + +Help on function qfile_t_from_capsule in module ida_fpro: + +qfile_t_from_capsule(*args) + qfile_t_from_capsule(pycapsule) -> qfile_t + +Help on function qfile_t_from_fp in module ida_fpro: + +qfile_t_from_fp(*args) + qfile_t_from_fp(fp) -> qfile_t + +Help on function qfile_t_tmpfile in module ida_fpro: + +qfile_t_tmpfile(*args) + qfile_t_tmpfile() -> qfile_t + +Help on function add_auto_stkpnt in module ida_frame: + +add_auto_stkpnt(*args) + add_auto_stkpnt(pfn, ea, delta) -> bool + + + Add automatic SP register change point. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address where SP changes. usually this is the end of + the instruction which modifies the stack pointer + (\cmd{ea}+\cmd{size}) (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function add_frame in module ida_frame: + +add_frame(*args) + add_frame(pfn, frsize, frregs, argsize) -> bool + + + Add function frame. + + @param pfn: pointer to function structure (C++: func_t *) + @param frsize: size of function local variables (C++: sval_t) + @param frregs: size of saved registers (C++: ushort) + @param argsize: size of function arguments range which will be purged + upon return. this parameter is used for __stdcall and + __pascal calling conventions. for other calling + conventions please pass 0. (C++: asize_t) + +Help on function add_regvar in module ida_frame: + +add_regvar(*args) + add_regvar(pfn, ea1, ea2, canon, user, cmt) -> int + + + Define a register variable. + + @param pfn: function in which the definition will be created (C++: + func_t *) + @param ea1: range of addresses within the function where the + definition will be used (C++: ea_t) + @param ea2: range of addresses within the function where the + definition will be used (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @param user: user-defined name for the register (C++: const char *) + @param cmt: comment for the definition (C++: const char *) + @return: Register variable error codes + +Help on function add_user_stkpnt in module ida_frame: + +add_user_stkpnt(*args) + add_user_stkpnt(ea, delta) -> bool + + + Add user-defined SP register change point. + + @param ea: linear address where SP changes (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function build_stkvar_name in module ida_frame: + +build_stkvar_name(*args) + build_stkvar_name(pfn, v) -> str + + + Build automatic stack variable name. + + @param pfn: pointer to function (can't be NULL!) (C++: const func_t + *) + @param v: value of variable offset (C++: sval_t) + @return: length of stack variable name or -1 + +Help on function build_stkvar_xrefs in module ida_frame: + +build_stkvar_xrefs(*args) + build_stkvar_xrefs(out, pfn, mptr) + + + Fill 'out' with a list of all the xrefs made from function 'pfn', to + the argument or variable 'mptr' in 'pfn's stack frame. + + @param out: the list of xrefs to fill. (C++: xreflist_t *) + @param pfn: the function to scan. (C++: func_t *) + @param mptr: the argument/variable in pfn's stack frame. (C++: const + member_t *) + +Help on function calc_stkvar_struc_offset in module ida_frame: + +calc_stkvar_struc_offset(*args) + calc_stkvar_struc_offset(pfn, insn, n) -> ea_t + + + Calculate offset of stack variable in the frame structure. + + @param pfn: pointer to function (can't be NULL!) (C++: func_t *) + @param insn: the instruction (C++: const insn_t &) + @param n: number of operand: (0.. UA_MAXOP -1) -1 if error, return + BADADDR (C++: int) + @return: BADADDR if some error (issue a warning if stack frame is + bad) + +Help on function define_stkvar in module ida_frame: + +define_stkvar(*args) + define_stkvar(pfn, name, off, flags, ti, nbytes) -> bool + + + Define/redefine a stack variable. + + @param pfn: pointer to function (C++: func_t *) + @param name: variable name, NULL means autogenerate a name (C++: const + char *) + @param off: offset of the stack variable in the frame. negative values + denote local variables, positive - function arguments. + (C++: sval_t) + @param flags: variable type flags ( byte_flag() for a byte variable, + for example) (C++: flags_t) + @param ti: additional type information (like offsets, structs, etc) + (C++: const opinfo_t *) + @param nbytes: number of bytes occupied by the variable (C++: asize_t) + @return: success + +Help on function del_frame in module ida_frame: + +del_frame(*args) + del_frame(pfn) -> bool + + + Delete a function frame. + + @param pfn: pointer to function structure (C++: func_t *) + @return: success + +Help on function del_regvar in module ida_frame: + +del_regvar(*args) + del_regvar(pfn, ea1, ea2, canon) -> int + + + Delete a register variable definition. + + @param pfn: function in question (C++: func_t *) + @param ea1: range of addresses within the function where the + definition holds (C++: ea_t) + @param ea2: range of addresses within the function where the + definition holds (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @return: Register variable error codes + +Help on function del_stkpnt in module ida_frame: + +del_stkpnt(*args) + del_stkpnt(pfn, ea) -> bool + + + Delete SP register change point. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: success + +Help on function delete_unreferenced_stkvars in module ida_frame: + +delete_unreferenced_stkvars(*args) + delete_unreferenced_stkvars(pfn) -> int + +Help on function delete_wrong_stkvar_ops in module ida_frame: + +delete_wrong_stkvar_ops(*args) + delete_wrong_stkvar_ops(pfn) -> int + +Help on function find_regvar in module ida_frame: + +find_regvar(*args) + find_regvar(pfn, ea1, ea2, canon, user) -> regvar_t + find_regvar(pfn, ea, canon) -> regvar_t + + + Find a register variable definition (powerful version). One of 'canon' + and 'user' should be NULL. If both 'canon' and 'user' are NULL it + returns the first regvar definition in the range. + + @param pfn: function in question (C++: func_t *) + @param ea1: range of addresses to search. ea1==BADADDR means the + entire function (C++: ea_t) + @param ea2: range of addresses to search. ea1==BADADDR means the + entire function (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @param user: user-defined name for the register (C++: const char *) + @return: NULL-not found, otherwise ptr to regvar_t + +Help on function frame_off_args in module ida_frame: + +frame_off_args(*args) + frame_off_args(pfn) -> ea_t + + + Get starting address of arguments section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_lvars in module ida_frame: + +frame_off_lvars(*args) + frame_off_lvars(pfn) -> ea_t + + + Get start address of local variables section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_retaddr in module ida_frame: + +frame_off_retaddr(*args) + frame_off_retaddr(pfn) -> ea_t + + + Get starting address of return address section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_savregs in module ida_frame: + +frame_off_savregs(*args) + frame_off_savregs(pfn) -> ea_t + + + Get starting address of saved registers section. + + + @param pfn (C++: const func_t *) + +Help on function get_effective_spd in module ida_frame: + +get_effective_spd(*args) + get_effective_spd(pfn, ea) -> sval_t + + + Get effective difference between the initial and current values of + ESP. This function returns the sp-diff used by the instruction. The + difference between 'get_spd()' and 'get_effective_spd()' is present + only for instructions like "pop [esp+N]": they modify sp and use the + modified value. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: 0 or the difference, usually a negative number + +Help on function get_frame in module ida_frame: + +get_frame(*args) + get_frame(pfn) -> struc_t + get_frame(ea) -> struc_t * + + + Get pointer to function frame. + + @param pfn: pointer to function structure (C++: const func_t *) + +Help on function get_frame_part in module ida_frame: + +get_frame_part(*args) + get_frame_part(range, pfn, part) + + + Get offsets of the frame part in the frame. + + @param range: pointer to the output buffer with the frame part + start/end(exclusive) offsets, can't be NULL (C++: + range_t *) + @param pfn: pointer to function structure, can't be NULL (C++: const + func_t *) + @param part: frame part (C++: frame_part_t) + +Help on function get_frame_retsize in module ida_frame: + +get_frame_retsize(*args) + get_frame_retsize(pfn) -> int + + + Get size of function return address. + + @param pfn: pointer to function structure, can't be NULL (C++: const + func_t *) + +Help on function get_frame_size in module ida_frame: + +get_frame_size(*args) + get_frame_size(pfn) -> asize_t + + + Get full size of a function frame. This function takes into account + size of local variables + size of saved registers + size of return + address + number of purged bytes. The purged bytes correspond to the + arguments of the functions with __stdcall and __fastcall calling + conventions. + + @param pfn: pointer to function structure, may be NULL (C++: const + func_t *) + @return: size of frame in bytes or zero + +Help on function get_func_by_frame in module ida_frame: + +get_func_by_frame(*args) + get_func_by_frame(frame_id) -> ea_t + + + Get function by its frame id.this function works only with databases + created by IDA > 5.6 + + @param frame_id: id of the function frame (C++: tid_t) + @return: start address of the function or BADADDR + +Help on function get_min_spd_ea in module ida_frame: + +get_min_spd_ea(*args) + get_min_spd_ea(pfn) -> ea_t + +Help on function get_sp_delta in module ida_frame: + +get_sp_delta(*args) + get_sp_delta(pfn, ea) -> sval_t + + + Get modification of SP made at the specified location + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: 0 if the specified location doesn't contain a SP change + point. otherwise return delta of SP modification. + +Help on function get_spd in module ida_frame: + +get_spd(*args) + get_spd(pfn, ea) -> sval_t + + + Get difference between the initial and current values of ESP. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address of an instruction (C++: ea_t) + @return: 0 or the difference, usually a negative number. returns the + sp-diff before executing the instruction. + +Help on function get_stkvar in module ida_frame: + +get_stkvar(*args) + get_stkvar(insn, op, v) -> PyObject * + + + Get pointer to stack variable + @param op: reference to instruction operand + @param v: immediate value in the operand (usually op.addr) + @return: + - None on failure + - tuple(member_t, actval) + where actval: actual value used to fetch stack variable + +Help on function has_regvar in module ida_frame: + +has_regvar(*args) + has_regvar(pfn, ea) -> bool + + + Is there a register variable definition? + + @param pfn: function in question (C++: func_t *) + @param ea: current address (C++: ea_t) + +Help on function is_funcarg_off in module ida_frame: + +is_funcarg_off(*args) + is_funcarg_off(pfn, frameoff) -> bool + + + Does the given offset lie within the arguments section? + + + @param pfn (C++: const func_t *) + @param frameoff (C++: uval_t) + +Help on class llabel_t in module ida_frame: + +class llabel_t(__builtin__.object) + | Proxy of C++ llabel_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> llabel_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | llabel_t_ea_get(self) -> ea_t + | + | name + | llabel_t_name_get(self) -> char * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_llabel_t(self) + +Help on function lvar_off in module ida_frame: + +lvar_off(*args) + lvar_off(pfn, frameoff) -> sval_t + + + Does the given offset lie within the local variables section? + + + @param pfn (C++: const func_t *) + @param frameoff (C++: uval_t) + +Help on function recalc_spd in module ida_frame: + +recalc_spd(*args) + recalc_spd(cur_ea) -> bool + + + Recalculate SP delta for an instruction that stops execution. The next + instruction is not reached from the current instruction. We need to + recalculate SP for the next instruction.This function will create a + new automatic SP register change point if necessary. It should be + called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the + current instruction doesn't pass the execution flow to the next + instruction. + + @param cur_ea: linear address of the current instruction (C++: ea_t) + +Help on class regvar_t in module ida_frame: + +class regvar_t(ida_range.range_t) + | Proxy of C++ regvar_t class. + | + | Method resolution order: + | regvar_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regvar_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | canon + | regvar_t_canon_get(self) -> char * + | + | cmt + | regvar_t_cmt_get(self) -> char * + | + | thisown + | The membership flag + | + | user + | regvar_t_user_get(self) -> char * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regvar_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on function rename_regvar in module ida_frame: + +rename_regvar(*args) + rename_regvar(pfn, v, user) -> int + + + Rename a register variable. + + @param pfn: function in question (C++: func_t *) + @param v: variable to rename (C++: regvar_t *) + @param user: new user-defined name for the register (C++: const char + *) + @return: Register variable error codes + +Help on function set_frame_size in module ida_frame: + +set_frame_size(*args) + set_frame_size(pfn, frsize, frregs, argsize) -> bool + + + Set size of function frame. Note: The returned size may not include + all stack arguments. It does so only for __stdcall and __fastcall + calling conventions. To get the entire frame size for all cases use + get_struc_size(get_frame(pfn)). + + @param pfn: pointer to function structure (C++: func_t *) + @param frsize: size of function local variables (C++: asize_t) + @param frregs: size of saved registers (C++: ushort) + @param argsize: size of function arguments that will be purged from + the stack upon return (C++: asize_t) + @return: success + +Help on function set_purged in module ida_frame: + +set_purged(*args) + set_purged(ea, nbytes, override_old_value) -> bool + + + Set the number of purged bytes for a function or data item (funcptr). + This function will update the database and plan to reanalyze items + referencing the specified address. It works only for processors with + 'PR_PURGING' bit in 16 and 32 bit modes. + + @param ea: address of the function of item (C++: ea_t) + @param nbytes: number of purged bytes (C++: int) + @param override_old_value: may overwrite old information about purged + bytes (C++: bool) + @return: success + +Help on function set_regvar_cmt in module ida_frame: + +set_regvar_cmt(*args) + set_regvar_cmt(pfn, v, cmt) -> int + + + Set comment for a register variable. + + @param pfn: function in question (C++: func_t *) + @param v: variable to rename (C++: regvar_t *) + @param cmt: new comment (C++: const char *) + @return: Register variable error codes + +Help on function soff_to_fpoff in module ida_frame: + +soff_to_fpoff(*args) + soff_to_fpoff(pfn, soff) -> sval_t + + + Convert struct offsets into fp-relative offsets. This function + converts the offsets inside the 'struc_t' object into the frame + pointer offsets (for example, EBP-relative). + + @param pfn (C++: func_t *) + @param soff (C++: uval_t) + +Help on class stkpnt_t in module ida_frame: + +class stkpnt_t(__builtin__.object) + | Proxy of C++ stkpnt_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> stkpnt_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | stkpnt_t_ea_get(self) -> ea_t + | + | spd + | stkpnt_t_spd_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_stkpnt_t(self) + +Help on class stkpnts_t in module ida_frame: + +class stkpnts_t(__builtin__.object) + | Proxy of C++ stkpnts_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> stkpnts_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_stkpnts_t(self) + +Help on function update_fpd in module ida_frame: + +update_fpd(*args) + update_fpd(pfn, fpd) -> bool + + + Update frame pointer delta. + + @param pfn: pointer to function structure (C++: func_t *) + @param fpd: new fpd value. cannot be bigger than the local variable + range size. (C++: asize_t) + @return: success + +Help on class xreflist_entry_t in module ida_frame: + +class xreflist_entry_t(__builtin__.object) + | Proxy of C++ xreflist_entry_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> xreflist_entry_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | xreflist_entry_t_ea_get(self) -> ea_t + | + | opnum + | xreflist_entry_t_opnum_get(self) -> uchar + | + | thisown + | The membership flag + | + | type + | xreflist_entry_t_type_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_xreflist_entry_t(self) + +Help on class xreflist_t in module ida_frame: + +class xreflist_t(__builtin__.object) + | Proxy of C++ qvector< xreflist_entry_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> xreflist_entry_t + | + | __init__(self, *args) + | __init__(self) -> xreflist_t + | __init__(self, x) -> xreflist_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> xreflist_entry_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> xreflist_entry_t + | begin(self) -> xreflist_entry_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> xreflist_entry_t + | end(self) -> xreflist_entry_t + | + | erase(self, *args) + | erase(self, it) -> xreflist_entry_t + | erase(self, first, last) -> xreflist_entry_t + | + | extract(self, *args) + | extract(self) -> xreflist_entry_t + | + | find(self, *args) + | find(self, x) -> xreflist_entry_t + | find(self, x) -> xreflist_entry_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=xreflist_entry_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> xreflist_entry_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> xreflist_entry_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_xreflist_t(self) + +=== ida_frame EPYDOC INJECTIONS === +ida_frame.REGVAR_ERROR_ARG +""" +function arguments are bad +""" + +ida_frame.REGVAR_ERROR_NAME +""" +the provided name(s) can't be accepted +""" + +ida_frame.REGVAR_ERROR_OK +""" +all ok +""" + +ida_frame.REGVAR_ERROR_RANGE +""" +the definition range is bad +""" + +ida_frame.STKVAR_VALID_SIZE +""" +x.dtyp contains correct variable type (for insns like 'lea' this bit +must be off) in general, dr_O references do not allow to determine the +variable size +""" +=== ida_frame EPYDOC INJECTIONS END === +Help on function add_func in module ida_funcs: + +add_func(*args) + add_func(ea1, ea2=BADADDR) -> bool + + + Add a new function. If the function end address is 'BADADDR' , then + IDA will try to determine the function bounds by calling + find_func_bounds(..., 'FIND_FUNC_DEFINE' ). + + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @return: success + +Help on function add_func_ex in module ida_funcs: + +add_func_ex(*args) + add_func_ex(pfn) -> bool + + + Add a new function. If the fn->end_ea is 'BADADDR' , then IDA will try + to determine the function bounds by calling find_func_bounds(..., + 'FIND_FUNC_DEFINE' ). + + @param pfn: ptr to filled function structure (C++: func_t *) + @return: success + +Help on function add_regarg in module ida_funcs: + +add_regarg(*args) + add_regarg(pfn, reg, tif, name) + +Help on function append_func_tail in module ida_funcs: + +append_func_tail(*args) + append_func_tail(pfn, ea1, ea2) -> bool + + + Append a new tail chunk to the function definition. If the tail + already exists, then it will simply be added to the function tail list + Otherwise a new tail will be created and its owner will be set to be + our function If a new tail cannot be created, then this function will + fail. + + @param pfn (C++: func_t *) + @param ea1: start of the tail. If a tail already exists at the + specified address it must start at 'ea1' (C++: ea_t) + @param ea2: end of the tail. If a tail already exists at the specified + address it must end at 'ea2'. If specified as BADADDR, IDA + will determine the end address itself. (C++: ea_t) + +Help on function apply_idasgn_to in module ida_funcs: + +apply_idasgn_to(*args) + apply_idasgn_to(signame, ea, is_startup) -> int + + + Apply a signature file to the specified address. + + @param signame: short name of signature file (the file name without + path) (C++: const char *) + @param ea: address to apply the signature (C++: ea_t) + @param is_startup: if set, then the signature is treated as a startup + one for startup signature ida doesn't rename the + first function of the applied module. (C++: bool) + @return: Library function codes + +Help on function apply_startup_sig in module ida_funcs: + +apply_startup_sig(*args) + apply_startup_sig(ea, startup) -> bool + + + Apply a startup signature file to the specified address. + + @param ea: address to apply the signature to; usually \inf{start_ea} + (C++: ea_t) + @param startup: the name of the signature file without path and + extension (C++: const char *) + @return: true if successfully applied the signature + +Help on function calc_func_size in module ida_funcs: + +calc_func_size(*args) + calc_func_size(pfn) -> asize_t + + + Calculate function size. This function takes into account all + fragments of the function. + + @param pfn: ptr to function structure (C++: func_t *) + +Help on function calc_idasgn_state in module ida_funcs: + +calc_idasgn_state(*args) + calc_idasgn_state(n) -> int + + + Get state of a signature in the list of planned signatures + + @param n: number of signature in the list (0.. get_idasgn_qty() -1) + (C++: int) + @return: state of signature or IDASGN_BADARG + +Help on function calc_thunk_func_target in module ida_funcs: + +calc_thunk_func_target(*args) + calc_thunk_func_target(pfn) -> ea_t + + + Calculate target of a thunk function. + + @param pfn: pointer to function (may not be NULL) (C++: func_t *) + @return: the target function or BADADDR + +Help on function del_func in module ida_funcs: + +del_func(*args) + del_func(ea) -> bool + + + Delete a function. + + @param ea: any address in the function entry chunk (C++: ea_t) + @return: success + +Help on function del_idasgn in module ida_funcs: + +del_idasgn(*args) + del_idasgn(n) -> int + + + Remove signature from the list of planned signatures. + + @param n: number of signature in the list (0.. get_idasgn_qty() -1) + (C++: int) + @return: IDASGN_OK , IDASGN_BADARG , IDASGN_APPLIED + +Help on function f_any in module ida_funcs: + +f_any(*args) + f_any(arg1, arg2) -> bool + + + Helper function to accept any address. + +Help on function find_func_bounds in module ida_funcs: + +find_func_bounds(*args) + find_func_bounds(nfn, flags) -> int + + + Determine the boundaries of a new function. This function tries to + find the start and end addresses of a new function. It calls the + module with \ph{func_bounds} in order to fine tune the function + boundaries. + + @param nfn: structure to fill with information \ nfn->start_ea points + to the start address of the new function. (C++: func_t *) + @param flags: Find function bounds flags (C++: int) + @return: Find function bounds result codes + +Help on function func_contains in module ida_funcs: + +func_contains(*args) + func_contains(pfn, ea) -> bool + + + Does the given function contain the given address? + + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on function func_does_return in module ida_funcs: + +func_does_return(*args) + func_does_return(callee) -> bool + + + Does the function return?. To calculate the answer, 'FUNC_NORET' flag + and is_noret() are consulted The latter is required for imported + functions in the .idata section. Since in .idata we have only function + pointers but not functions, we have to introduce a special flag for + them. + + @param callee (C++: ea_t) + +Help on function func_item_iterator_decode_preceding_insn in module ida_funcs: + +func_item_iterator_decode_preceding_insn(*args) + func_item_iterator_decode_preceding_insn(fii, visited, p_farref, out) -> bool + +Help on function func_item_iterator_decode_prev_insn in module ida_funcs: + +func_item_iterator_decode_prev_insn(*args) + func_item_iterator_decode_prev_insn(fii, out) -> bool + +Help on function func_item_iterator_next in module ida_funcs: + +func_item_iterator_next(*args) + func_item_iterator_next(fii, testf, ud) -> bool + +Help on function func_item_iterator_prev in module ida_funcs: + +func_item_iterator_prev(*args) + func_item_iterator_prev(fii, testf, ud) -> bool + +Help on class func_item_iterator_t in module ida_funcs: + +class func_item_iterator_t(__builtin__.object) + | Proxy of C++ func_item_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_item_iterator_t + | __init__(self, pfn, _ea=BADADDR) -> func_item_iterator_t + | + | __next__(self, *args) + | __next__(self, func, ud) -> bool + | + | __repr__ = _swig_repr(self) + | + | chunk(self, *args) + | chunk(self) -> range_t + | + | current(self, *args) + | current(self) -> ea_t + | + | decode_preceding_insn(self, *args) + | decode_preceding_insn(self, visited, p_farref, out) -> bool + | + | decode_prev_insn(self, *args) + | decode_prev_insn(self, out) -> bool + | + | first(self, *args) + | first(self) -> bool + | + | last(self, *args) + | last(self) -> bool + | + | next = __next__(self, *args) + | + | next_addr(self, *args) + | next_addr(self) -> bool + | + | next_code(self, *args) + | next_code(self) -> bool + | + | next_data(self, *args) + | next_data(self) -> bool + | + | next_head(self, *args) + | next_head(self) -> bool + | + | next_not_tail(self, *args) + | next_not_tail(self) -> bool + | + | prev(self, *args) + | prev(self, func, ud) -> bool + | + | prev_addr(self, *args) + | prev_addr(self) -> bool + | + | prev_code(self, *args) + | prev_code(self) -> bool + | + | prev_data(self, *args) + | prev_data(self) -> bool + | + | prev_head(self, *args) + | prev_head(self) -> bool + | + | prev_not_tail(self, *args) + | prev_not_tail(self) -> bool + | + | set(self, *args) + | set(self, pfn, _ea=BADADDR) -> bool + | + | set_range(self, *args) + | set_range(self, ea1, ea2) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_item_iterator_t(self) + +Help on function func_parent_iterator_set in module ida_funcs: + +func_parent_iterator_set(*args) + func_parent_iterator_set(fpi, pfn) -> bool + +Help on class func_parent_iterator_t in module ida_funcs: + +class func_parent_iterator_t(__builtin__.object) + | Proxy of C++ func_parent_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_parent_iterator_t + | __init__(self, _fnt) -> func_parent_iterator_t + | + | __next__(self, *args) + | __next__(self) -> bool + | + | __repr__ = _swig_repr(self) + | + | first(self, *args) + | first(self) -> bool + | + | last(self, *args) + | last(self) -> bool + | + | next = __next__(self, *args) + | + | parent(self, *args) + | parent(self) -> ea_t + | + | prev(self, *args) + | prev(self) -> bool + | + | reset_fnt(self, *args) + | reset_fnt(self, _fnt) + | + | set(self, *args) + | set(self, _fnt) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_parent_iterator_t(self) + +Help on class func_t in module ida_funcs: + +class func_t(ida_range.range_t) + | Proxy of C++ func_t class. + | + | Method resolution order: + | func_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __get_points__(self, *args) + | __get_points__(self) -> stkpnt_array + | + | __get_regvars__(self, *args) + | __get_regvars__(self) -> regvar_array + | + | __get_tails__(self, *args) + | __get_tails__(self) -> range_array + | + | __init__(self, *args) + | __init__(self, start=0, end=0, f=0) -> func_t + | + | __repr__ = _swig_repr(self) + | + | analyzed_sp(self, *args) + | analyzed_sp(self) -> bool + | + | does_return(self, *args) + | does_return(self) -> bool + | + | is_far(self, *args) + | is_far(self) -> bool + | + | need_prolog_analysis(self, *args) + | need_prolog_analysis(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | argsize + | func_t_argsize_get(self) -> asize_t + | + | color + | func_t_color_get(self) -> bgcolor_t + | + | flags + | func_t_flags_get(self) -> uint64 + | + | fpd + | func_t_fpd_get(self) -> asize_t + | + | frame + | func_t_frame_get(self) -> uval_t + | + | frregs + | func_t_frregs_get(self) -> ushort + | + | frsize + | func_t_frsize_get(self) -> asize_t + | + | llabelqty + | func_t_llabelqty_get(self) -> int + | + | llabels + | func_t_llabels_get(self) -> llabel_t * + | + | owner + | func_t_owner_get(self) -> ea_t + | + | pntqty + | func_t_pntqty_get(self) -> uint32 + | + | points + | __get_points__(self) -> stkpnt_array + | + | referers + | func_t_referers_get(self) -> ea_t * + | + | refqty + | func_t_refqty_get(self) -> int + | + | regargqty + | func_t_regargqty_get(self) -> int + | + | regargs + | func_t_regargs_get(self) -> regarg_t + | + | regvarqty + | func_t_regvarqty_get(self) -> int + | + | regvars + | __get_regvars__(self) -> regvar_array + | + | tailqty + | func_t_tailqty_get(self) -> int + | + | tails + | __get_tails__(self) -> range_array + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on function func_t__from_ptrval__ in module ida_funcs: + +func_t__from_ptrval__(*args) + func_t__from_ptrval__(ptrval) -> func_t + +Help on function func_tail_iterator_set in module ida_funcs: + +func_tail_iterator_set(*args) + func_tail_iterator_set(fti, pfn, ea) -> bool + +Help on function func_tail_iterator_set_ea in module ida_funcs: + +func_tail_iterator_set_ea(*args) + func_tail_iterator_set_ea(fti, ea) -> bool + +Help on class func_tail_iterator_t in module ida_funcs: + +class func_tail_iterator_t(__builtin__.object) + | Proxy of C++ func_tail_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_tail_iterator_t + | __init__(self, _pfn, ea=BADADDR) -> func_tail_iterator_t + | + | __next__(self, *args) + | __next__(self) -> bool + | + | __repr__ = _swig_repr(self) + | + | chunk(self, *args) + | chunk(self) -> range_t + | + | first(self, *args) + | first(self) -> bool + | + | last(self, *args) + | last(self) -> bool + | + | main(self, *args) + | main(self) -> bool + | + | next = __next__(self, *args) + | + | prev(self, *args) + | prev(self) -> bool + | + | set(self, *args) + | set(self, _pfn, ea=BADADDR) -> bool + | + | set_ea(self, *args) + | set_ea(self, ea) -> bool + | + | set_range(self, *args) + | set_range(self, ea1, ea2) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_tail_iterator_t(self) + +Help on function get_current_idasgn in module ida_funcs: + +get_current_idasgn(*args) + get_current_idasgn() -> int + + + Get number of the the current signature. + + @return: 0..n-1 + +Help on function get_fchunk in module ida_funcs: + +get_fchunk(*args) + get_fchunk(ea) -> func_t + + + Get pointer to function chunk structure by address. + + @param ea: any address in a function chunk (C++: ea_t) + @return: ptr to a function chunk or NULL. This function may return a + function entry as well as a function tail. + +Help on function get_fchunk_num in module ida_funcs: + +get_fchunk_num(*args) + get_fchunk_num(ea) -> int + + + Get ordinal number of a function chunk in the global list of function + chunks. + + @param ea: any address in the function chunk (C++: ea_t) + @return: number of function chunk (0.. get_fchunk_qty() -1). -1 means + 'no function chunk at the specified address'. + +Help on function get_fchunk_qty in module ida_funcs: + +get_fchunk_qty(*args) + get_fchunk_qty() -> size_t + + + Get total number of function chunks in the program. + +Help on function get_fchunk_referer in module ida_funcs: + +get_fchunk_referer(*args) + get_fchunk_referer(ea, idx) -> ea_t + +Help on function get_func in module ida_funcs: + +get_func(*args) + get_func(ea) -> func_t + + + Get pointer to function structure by address. + + @param ea: any address in a function (C++: ea_t) + @return: ptr to a function or NULL. This function returns a function + entry chunk. + +Help on function get_func_bitness in module ida_funcs: + +get_func_bitness(*args) + get_func_bitness(pfn) -> int + + + Get function bitness (which is equal to the function segment bitness). + pfn==NULL => returns 0 + + @param pfn (C++: const func_t *) + +Help on function get_func_bits in module ida_funcs: + +get_func_bits(*args) + get_func_bits(pfn) -> int + + + Get number of bits in the function addressing. + + + @param pfn (C++: const func_t *) + +Help on function get_func_bytes in module ida_funcs: + +get_func_bytes(*args) + get_func_bytes(pfn) -> int + + + Get number of bytes in the function addressing. + + + @param pfn (C++: const func_t *) + +Help on function get_func_chunknum in module ida_funcs: + +get_func_chunknum(*args) + get_func_chunknum(pfn, ea) -> int + + + Get the containing tail chunk of 'ea'. + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on function get_func_cmt in module ida_funcs: + +get_func_cmt(*args) + get_func_cmt(pfn, repeatable) -> str + + + Get function comment. + + @param pfn: ptr to function structure (C++: const func_t *) + @param repeatable: get repeatable comment? (C++: bool) + @return: size of comment or -1 In fact this function works with + function chunks too. + +Help on function get_func_name in module ida_funcs: + +get_func_name(*args) + get_func_name(ea) -> str + + + Get function name. + + @param ea: any address in the function (C++: ea_t) + @return: length of the function name + +Help on function get_func_num in module ida_funcs: + +get_func_num(*args) + get_func_num(ea) -> int + + + Get ordinal number of a function. + + @param ea: any address in the function (C++: ea_t) + @return: number of function (0.. get_func_qty() -1). -1 means 'no + function at the specified address'. + +Help on function get_func_qty in module ida_funcs: + +get_func_qty(*args) + get_func_qty() -> size_t + + + Get total number of functions in the program. + +Help on function get_func_ranges in module ida_funcs: + +get_func_ranges(*args) + get_func_ranges(ranges, pfn) -> ea_t + + + Get function ranges. + + @param ranges: buffer to receive the range info (C++: rangeset_t *) + @param pfn: ptr to function structure (C++: func_t *) + @return: end address of the last function range (BADADDR-error) + +Help on function get_idasgn_desc in module ida_funcs: + +get_idasgn_desc(*args) + get_idasgn_desc(n) -> PyObject * + + + Get information about a signature in the list. + It returns: (name of signature, names of optional libraries) + + See also: get_idasgn_desc_with_matches + + @param n: number of signature in the list (0..get_idasgn_qty()-1) + @return: None on failure or tuple(signame, optlibs) + +Help on function get_idasgn_desc_with_matches in module ida_funcs: + +get_idasgn_desc_with_matches(*args) + get_idasgn_desc_with_matches(n) -> PyObject * + + + Get information about a signature in the list. + It returns: (name of signature, names of optional libraries, number of matches) + + @param n: number of signature in the list (0..get_idasgn_qty()-1) + @return: None on failure or tuple(signame, optlibs, nmatches) + +Help on function get_idasgn_qty in module ida_funcs: + +get_idasgn_qty(*args) + get_idasgn_qty() -> int + + + Get number of signatures in the list of planned and applied + signatures. + + @return: 0..n + +Help on function get_idasgn_title in module ida_funcs: + +get_idasgn_title(*args) + get_idasgn_title(name) -> str + + + Get full description of the signature by its short name. + + @param name: short name of a signature (C++: const char *) + @return: size of signature description or -1 + +Help on function get_next_fchunk in module ida_funcs: + +get_next_fchunk(*args) + get_next_fchunk(ea) -> func_t + + + Get pointer to the next function chunk in the global list. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function chunk or NULL if next function chunk doesn't + exist + +Help on function get_next_func in module ida_funcs: + +get_next_func(*args) + get_next_func(ea) -> func_t + + + Get pointer to the next function. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function or NULL if next function doesn't exist + +Help on function get_next_func_addr in module ida_funcs: + +get_next_func_addr(*args) + get_next_func_addr(pfn, ea) -> ea_t + +Help on function get_prev_fchunk in module ida_funcs: + +get_prev_fchunk(*args) + get_prev_fchunk(ea) -> func_t + + + Get pointer to the previous function chunk in the global list. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function chunk or NULL if previous function chunk + doesn't exist + +Help on function get_prev_func in module ida_funcs: + +get_prev_func(*args) + get_prev_func(ea) -> func_t + + + Get pointer to the previous function. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function or NULL if previous function doesn't exist + +Help on function get_prev_func_addr in module ida_funcs: + +get_prev_func_addr(*args) + get_prev_func_addr(pfn, ea) -> ea_t + +Help on function getn_fchunk in module ida_funcs: + +getn_fchunk(*args) + getn_fchunk(n) -> func_t + + + Get pointer to function chunk structure by number. + + @param n: number of function chunk, is in range 0.. get_fchunk_qty() + -1 (C++: int) + @return: ptr to a function chunk or NULL. This function may return a + function entry as well as a function tail. + +Help on function getn_func in module ida_funcs: + +getn_func(*args) + getn_func(n) -> func_t + + + Get pointer to function structure by number. + + @param n: number of function, is in range 0.. get_func_qty() -1 (C++: + size_t) + @return: ptr to a function or NULL. This function returns a function + entry chunk. + +Help on function is_finally_visible_func in module ida_funcs: + +is_finally_visible_func(*args) + is_finally_visible_func(pfn) -> bool + + + Is the function visible (event after considering 'SCF_SHHID_FUNC' )? + + + @param pfn (C++: func_t *) + +Help on function is_func_entry in module ida_funcs: + +is_func_entry(*args) + is_func_entry(pfn) -> bool + + + Does function describe a function entry chunk? + + + @param pfn (C++: const func_t *) + +Help on function is_func_locked in module ida_funcs: + +is_func_locked(*args) + is_func_locked(pfn) -> bool + + + Is the function pointer locked? + + + @param pfn (C++: const func_t *) + +Help on function is_func_tail in module ida_funcs: + +is_func_tail(*args) + is_func_tail(pfn) -> bool + + + Does function describe a function tail chunk? + + + @param pfn (C++: const func_t *) + +Help on function is_same_func in module ida_funcs: + +is_same_func(*args) + is_same_func(ea1, ea2) -> bool + + + Do two addresses belong to the same function? + + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on function is_visible_func in module ida_funcs: + +is_visible_func(*args) + is_visible_func(pfn) -> bool + + + Is the function visible (not hidden)? + + + @param pfn (C++: func_t *) + +Help on class lock_func in module ida_funcs: + +class lock_func(__builtin__.object) + | Proxy of C++ lock_func class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _pfn) -> lock_func + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lock_func(self) + +Help on function lock_func_range in module ida_funcs: + +lock_func_range(*args) + lock_func_range(pfn, lock) + + + Lock function pointer Locked pointers are guaranteed to remain valid + until they are unlocked. Ranges with locked pointers cannot be deleted + or moved. + + @param pfn (C++: const func_t *) + @param lock (C++: bool) + +Help on function plan_to_apply_idasgn in module ida_funcs: + +plan_to_apply_idasgn(*args) + plan_to_apply_idasgn(fname) -> int + + + Add a signature file to the list of planned signature files. + + @param fname: file name. should not contain directory part. (C++: + const char *) + @return: 0 if failed, otherwise number of planned (and applied) + signatures + +Help on class range_array in module ida_funcs: + +class range_array(__builtin__.object) + | Proxy of C++ dynamic_wrapped_array_t< range_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __init__(self, *args) + | __init__(self, _data, _count) -> range_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | range_array_count_get(self) -> size_t + | + | data + | range_array_data_get(self) -> range_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_range_array(self) + +Help on function read_regargs in module ida_funcs: + +read_regargs(*args) + read_regargs(pfn) + +Help on function reanalyze_function in module ida_funcs: + +reanalyze_function(*args) + reanalyze_function(pfn, ea1=0, ea2=BADADDR, analyze_parents=False) + + + Reanalyze a function. This function plans to analyzes all chunks of + the given function. Optional parameters (ea1, ea2) may be used to + narrow the analyzed range. + + @param pfn: pointer to a function (C++: func_t *) + @param ea1: start of the range to analyze (C++: ea_t) + @param ea2: end of range to analyze (C++: ea_t) + @param analyze_parents: meaningful only if pfn points to a function + tail. if true, all tail parents will be + reanalyzed. if false, only the given tail will + be reanalyzed. (C++: bool) + +Help on function reanalyze_noret_flag in module ida_funcs: + +reanalyze_noret_flag(*args) + reanalyze_noret_flag(ea) -> bool + + + Plan to reanalyze noret flag. This function does not remove FUNC_NORET + if it is already present. It just plans to reanalysis. + + @param ea (C++: ea_t) + +Help on class regarg_t in module ida_funcs: + +class regarg_t(__builtin__.object) + | Proxy of C++ regarg_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regarg_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | regarg_t_name_get(self) -> char * + | + | reg + | regarg_t_reg_get(self) -> int + | + | thisown + | The membership flag + | + | type + | regarg_t_type_get(self) -> type_t * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regarg_t(self) + +Help on class regvar_array in module ida_funcs: + +class regvar_array(__builtin__.object) + | Proxy of C++ dynamic_wrapped_array_t< regvar_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> regvar_t const & + | + | __init__(self, *args) + | __init__(self, _data, _count) -> regvar_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | regvar_array_count_get(self) -> size_t + | + | data + | regvar_array_data_get(self) -> regvar_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regvar_array(self) + +Help on function remove_func_tail in module ida_funcs: + +remove_func_tail(*args) + remove_func_tail(pfn, tail_ea) -> bool + + + Remove a function tail. If the tail belongs only to one function, it + will be completely removed. Otherwise if the function was the tail + owner, the first function using this tail becomes the owner of the + tail. + + @param pfn (C++: func_t *) + @param tail_ea (C++: ea_t) + +Help on function set_func_cmt in module ida_funcs: + +set_func_cmt(*args) + set_func_cmt(pfn, cmt, repeatable) -> bool + + + Set function comment. This function works with function chunks too. + + @param pfn: ptr to function structure (C++: const func_t *) + @param cmt: comment string, may be multiline (with ' '). Use empty + str ("") to delete comment (C++: const char *) + @param repeatable: set repeatable comment? (C++: bool) + +Help on function set_func_end in module ida_funcs: + +set_func_end(*args) + set_func_end(ea, newend) -> bool + + + Move function chunk end address. + + @param ea: any address in the function (C++: ea_t) + @param newend: new end address of the function (C++: ea_t) + @return: success + +Help on function set_func_name_if_jumpfunc in module ida_funcs: + +set_func_name_if_jumpfunc(*args) + set_func_name_if_jumpfunc(pfn, oldname) -> int + + + Give a meaningful name to function if it consists of only 'jump' + instruction. + + @param pfn: pointer to function (may be NULL) (C++: func_t *) + @param oldname: old name of function. if old name was in "j_..." form, + then we may discard it and set a new name. if oldname + is not known, you may pass NULL. (C++: const char *) + @return: success + +Help on function set_func_start in module ida_funcs: + +set_func_start(*args) + set_func_start(ea, newstart) -> int + + + Move function chunk start address. + + @param ea: any address in the function (C++: ea_t) + @param newstart: new end address of the function (C++: ea_t) + @return: Function move result codes + +Help on function set_noret_insn in module ida_funcs: + +set_noret_insn(*args) + set_noret_insn(insn_ea, noret) -> bool + + + Signal a non-returning instruction. This function can be used by the + processor module to tell the kernel about non-returning instructions + (like call exit). The kernel will perform the global function analysis + and find out if the function returns at all. This analysis will be + done at the first call to 'func_does_return()' + + @param insn_ea (C++: ea_t) + @param noret (C++: bool) + @return: true if the instruction 'noret' flag has been changed + +Help on function set_tail_owner in module ida_funcs: + +set_tail_owner(*args) + set_tail_owner(fnt, func_start) -> bool + + + Set a function as the possessing function of a function tail. The + function should already refer to the tail (after append_func_tail). + + @param fnt (C++: func_t *) + @param func_start (C++: ea_t) + +Help on function set_visible_func in module ida_funcs: + +set_visible_func(*args) + set_visible_func(pfn, visible) + + + Set visibility of function. + + + @param pfn (C++: func_t *) + @param visible (C++: bool) + +Help on class stkpnt_array in module ida_funcs: + +class stkpnt_array(__builtin__.object) + | Proxy of C++ dynamic_wrapped_array_t< stkpnt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> stkpnt_t const & + | + | __init__(self, *args) + | __init__(self, _data, _count) -> stkpnt_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | stkpnt_array_count_get(self) -> size_t + | + | data + | stkpnt_array_data_get(self) -> stkpnt_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_stkpnt_array(self) + +Help on function try_to_add_libfunc in module ida_funcs: + +try_to_add_libfunc(*args) + try_to_add_libfunc(ea) -> int + + + Apply the currently loaded signature file to the specified address. If + a library function is found, then create a function and name it + accordingly. + + @param ea: any address in the program (C++: ea_t) + @return: Library function codes + +Help on function update_func in module ida_funcs: + +update_func(*args) + update_func(pfn) -> bool + + + Update information about a function in the database ( 'func_t' ). You + must not change the function start and end addresses using this + function. Use 'set_func_start()' and 'set_func_end()' for it. + + @param pfn: ptr to function structure (C++: func_t *) + @return: success + +=== ida_funcs EPYDOC INJECTIONS === +ida_funcs.FIND_FUNC_DEFINE +""" +create instruction if undefined byte is encountered +""" + +ida_funcs.FIND_FUNC_EXIST +""" +its bounds are returned in 'nfn'. + +function exists already. +""" + +ida_funcs.FIND_FUNC_IGNOREFN +""" +ignore existing function boundaries. by default the function returns +function boundaries if ea belongs to a function. +""" + +ida_funcs.FIND_FUNC_KEEPBD +""" +just create instructions inside the boundaries. + +do not modify incoming function boundaries, +""" + +ida_funcs.FIND_FUNC_NORMAL +""" +stop processing if undefined byte is encountered +""" + +ida_funcs.FIND_FUNC_OK +""" +ok, 'nfn' is ready for 'add_func()' +""" + +ida_funcs.FIND_FUNC_UNDEF +""" +nfn->end_ea will have the address of the unexplored byte. + +function has instructions that pass execution flow to unexplored +bytes. +""" + +ida_funcs.FUNC_BOTTOMBP +""" +BP points to the bottom of the stack frame. +""" + +ida_funcs.FUNC_FAR +""" +Far function. +""" + +ida_funcs.FUNC_FRAME +""" +Function uses frame pointer (BP) +""" + +ida_funcs.FUNC_FUZZY_SP +""" +for example: and esp, 0FFFFFFF0h + +Function changes SP in untraceable way, +""" + +ida_funcs.FUNC_HIDDEN +""" +A hidden function chunk. +""" + +ida_funcs.FUNC_LIB +""" +Library function. +""" + +ida_funcs.FUNC_LUMINA +""" +Function info is provided by Lumina. +""" + +ida_funcs.FUNC_NORET +""" +Function doesn't return. +""" + +ida_funcs.FUNC_NORET_PENDING +""" +This flag is verified upon 'func_does_return()' + +Function 'non-return' analysis must be performed. +""" + +ida_funcs.FUNC_PROLOG_OK +""" +by last SP-analysis + +Prolog analysis has be performed +""" + +ida_funcs.FUNC_PURGED_OK +""" +'argsize' field has been validated. If this bit is clear and 'argsize' +is 0, then we do not known the real number of bytes removed from the +stack. This bit is handled by the processor module. +""" + +ida_funcs.FUNC_SP_READY +""" +SP-analysis has been performed. If this flag is on, the stack change +points should not be not modified anymore. Currently this analysis is +performed only for PC +""" + +ida_funcs.FUNC_STATICDEF +""" +Static function. +""" + +ida_funcs.FUNC_TAIL +""" +This is a function tail. Other bits must be clear (except +'FUNC_HIDDEN' ). +""" + +ida_funcs.FUNC_THUNK +""" +Thunk (jump) function. +""" + +ida_funcs.FUNC_USERFAR +""" +of the function + +User has specified far-ness +""" + +ida_funcs.IDASGN_APPLIED +""" +signature is already applied +""" + +ida_funcs.IDASGN_BADARG +""" +bad number of signature +""" + +ida_funcs.IDASGN_CURRENT +""" +signature is currently being applied +""" + +ida_funcs.IDASGN_OK +""" +ok +""" + +ida_funcs.IDASGN_PLANNED +""" +signature is planned to be applied +""" + +ida_funcs.LIBFUNC_DELAY +""" +no decision because of lack of information +""" + +ida_funcs.LIBFUNC_FOUND +""" +ok, library function is found +""" + +ida_funcs.LIBFUNC_NONE +""" +no, this is not a library function +""" + +ida_funcs.MOVE_FUNC_BADSTART +""" +bad new start address +""" + +ida_funcs.MOVE_FUNC_NOCODE +""" +no instruction at 'newstart' +""" + +ida_funcs.MOVE_FUNC_NOFUNC +""" +no function at 'ea' +""" + +ida_funcs.MOVE_FUNC_OK +""" +ok +""" + +ida_funcs.MOVE_FUNC_REFUSED +""" +a plugin refused the action +""" +=== ida_funcs EPYDOC INJECTIONS END === +Help on class BasicBlock in module ida_gdl: + +class BasicBlock(__builtin__.object) + | Basic block class. It is returned by the Flowchart class + | + | Methods defined here: + | + | __init__(self, id, bb, fc) + | + | preds(self) + | Iterates the predecessors list + | + | succs(self) + | Iterates the successors list + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | startEA + +Help on class FlowChart in module ida_gdl: + +class FlowChart(__builtin__.object) + | Flowchart class used to determine basic blocks. + | Check ex_gdl_qflow_chart.py for sample usage. + | + | Methods defined here: + | + | __getitem__(self, index) + | Returns a basic block + | + | @return: BasicBlock + | + | __init__(self, f=None, bounds=None, flags=0) + | Constructor + | @param f: A func_t type, use get_func(ea) to get a reference + | @param bounds: A tuple of the form (start, end). Used if "f" is None + | @param flags: one of the FC_xxxx flags. One interesting flag is FC_PREDS + | + | __iter__(self) + | + | _getitem(self, index) + | + | refresh(self) + | Refreshes the flow chart + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | size + +Help on function display_gdl in module ida_gdl: + +display_gdl(*args) + display_gdl(fname) -> int + + + Display GDL file by calling wingraph32. The exact name of the grapher + is taken from the configuration file and set up by + 'setup_graph_subsystem()' . + + @param fname (C++: const char *) + @return: error code from os, 0 if ok + +Help on function gen_complex_call_chart in module ida_gdl: + +gen_complex_call_chart(*args) + gen_complex_call_chart(filename, wait, title, ea1, ea2, flags, recursion_depth=-1) -> bool + + + Build and display a complex xref graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param wait: message to display during graph building (C++: const char + *) + @param title: graph title (C++: const char *) + @param ea1: address range (C++: ea_t) + @param ea2: address range (C++: ea_t) + @param flags: combination of Call chart building flags and Flow + graph building flags . if none of CHART_GEN_DOT , + CHART_GEN_GDL , CHART_WINGRAPH is specified, the + function will return false. (C++: int) + @param recursion_depth: optional limit of recursion (C++: int32) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function gen_flow_graph in module ida_gdl: + +gen_flow_graph(*args) + gen_flow_graph(filename, title, pfn, ea1, ea2, gflags) -> bool + + + Build and display a flow graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param title: graph title (C++: const char *) + @param pfn: function to graph (C++: func_t *) + @param ea1: if pfn == NULL, then the address range (C++: ea_t) + @param ea2: if pfn == NULL, then the address range (C++: ea_t) + @param gflags: combination of Flow graph building flags . if none of + CHART_GEN_DOT , CHART_GEN_GDL , CHART_WINGRAPH is + specified, the function will return false (C++: int) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function gen_gdl in module ida_gdl: + +gen_gdl(*args) + gen_gdl(g, fname) + + + Create GDL file for graph. + + + @param g (C++: const gdl_graph_t *) + @param fname (C++: const char *) + +Help on function gen_simple_call_chart in module ida_gdl: + +gen_simple_call_chart(*args) + gen_simple_call_chart(filename, wait, title, gflags) -> bool + + + Build and display a simple function call graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param wait: message to display during graph building (C++: const char + *) + @param title: graph title (C++: const char *) + @param gflags: combination of CHART_NOLIBFUNCS and Flow graph + building flags . if none of CHART_GEN_DOT , + CHART_GEN_GDL , CHART_WINGRAPH is specified, the + function will return false. (C++: int) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function is_noret_block in module ida_gdl: + +is_noret_block(*args) + is_noret_block(btype) -> bool + + + Does this block never return? + + + @param btype (C++: fc_block_type_t) + +Help on function is_ret_block in module ida_gdl: + +is_ret_block(*args) + is_ret_block(btype) -> bool + + + Does this block return? + + + @param btype (C++: fc_block_type_t) + +Help on class node_iterator in module ida_gdl: + +class node_iterator(__builtin__.object) + | Proxy of C++ node_iterator class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, n) -> bool + | + | __init__(self, *args) + | __init__(self, _g, n) -> node_iterator + | + | __ne__(self, *args) + | __ne__(self, n) -> bool + | + | __ref__(self, *args) + | __ref__(self) -> int + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_node_iterator(self) + +Help on class qbasic_block_t in module ida_gdl: + +class qbasic_block_t(ida_range.range_t) + | Proxy of C++ qbasic_block_t class. + | + | Method resolution order: + | qbasic_block_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> qbasic_block_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qbasic_block_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on class qflow_chart_t in module ida_gdl: + +class qflow_chart_t(__builtin__.object) + | Proxy of C++ qflow_chart_t class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, n) -> qbasic_block_t + | + | __init__(self, *args) + | __init__(self) -> qflow_chart_t + | __init__(self, _title, _pfn, _ea1, _ea2, _flags) -> qflow_chart_t + | + | __repr__ = _swig_repr(self) + | + | append_to_flowchart(self, *args) + | append_to_flowchart(self, ea1, ea2) + | + | calc_block_type(self, *args) + | calc_block_type(self, blknum) -> fc_block_type_t + | + | create(self, *args) + | create(self, _title, _pfn, _ea1, _ea2, _flags) + | create(self, _title, ranges, _flags) + | + | get_node_label(self, *args) + | get_node_label(self, arg2, arg3, arg4) -> char * + | + | is_noret_block(self, *args) + | is_noret_block(self, blknum) -> bool + | + | is_ret_block(self, *args) + | is_ret_block(self, blknum) -> bool + | + | npred(self, *args) + | npred(self, node) -> int + | + | nsucc(self, *args) + | nsucc(self, node) -> int + | + | pred(self, *args) + | pred(self, node, i) -> int + | + | print_names(self, *args) + | print_names(self) -> bool + | + | print_node_attributes(self, *args) + | print_node_attributes(self, arg2, arg3) + | + | refresh(self, *args) + | refresh(self) + | + | size(self, *args) + | size(self) -> int + | + | succ(self, *args) + | succ(self, node, i) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bounds + | qflow_chart_t_bounds_get(self) -> range_t + | + | flags + | qflow_chart_t_flags_get(self) -> int + | + | nproper + | qflow_chart_t_nproper_get(self) -> int + | + | pfn + | qflow_chart_t_pfn_get(self) -> func_t * + | + | thisown + | The membership flag + | + | title + | qflow_chart_t_title_get(self) -> qstring * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qflow_chart_t(self) + +=== ida_gdl EPYDOC INJECTIONS === +ida_gdl.CHART_FOLLOW_DIRECTION +""" +analyze references to added blocks only in the direction of the +reference who discovered the current block +""" + +ida_gdl.CHART_GEN_DOT +""" +generate .dot file (file extension is forced to .dot) +""" + +ida_gdl.CHART_GEN_GDL +""" +generate .gdl file (file extension is forced to .gdl) +""" + +ida_gdl.CHART_IGNORE_LIB_FROM +""" +ignore references from library functions +""" + +ida_gdl.CHART_IGNORE_LIB_TO +""" +ignore references to library functions +""" + +ida_gdl.CHART_NOLIBFUNCS +""" +don't include library functions in the graph +""" + +ida_gdl.CHART_PRINT_DOTS +""" +print dots if xrefs exist outside of the range recursion depth +""" + +ida_gdl.CHART_PRINT_NAMES +""" +print labels for each block? +""" + +ida_gdl.CHART_RECURSIVE +""" +analyze added blocks +""" + +ida_gdl.CHART_REFERENCED +""" +references from the addresses in the list +""" + +ida_gdl.CHART_REFERENCING +""" +references to the addresses in the list +""" + +ida_gdl.CHART_WINGRAPH +""" +call grapher to display the graph +""" + +ida_gdl.FC_APPND +""" +multirange flowchart (set by append_to_flowchart) +""" + +ida_gdl.FC_CHKBREAK +""" +build_qflow_chart() may be aborted by user +""" + +ida_gdl.FC_NOEXT +""" +do not compute external blocks. Use this to prevent jumps leaving the +function from appearing in the flow chart. Unless specified, the +targets of those outgoing jumps will be present in the flow chart +under the form of one-instruction blocks +""" + +ida_gdl.FC_PREDS +""" +compute predecessor lists +""" + +ida_gdl.FC_PRINT +""" +print names (used only by display_flow_chart()) +""" +=== ida_gdl EPYDOC INJECTIONS END === +Help on class GraphViewer in module ida_graph: + +class GraphViewer(ida_kernwin.CustomIDAMemo) + | Method resolution order: + | GraphViewer + | ida_kernwin.CustomIDAMemo + | ida_kernwin.View_Hooks + | __builtin__.object + | + | Methods defined here: + | + | AddCommand(self, title, shortcut) + | + | AddEdge(self, src_node, dest_node) + | Creates an edge between two given node ids + | + | AddNode(self, obj) + | Creates a node associated with the given object and returns the node id + | + | Clear(self) + | Clears all the nodes and edges + | + | Close(self) + | Closes the graph. + | It is possible to call Show() again (which will recreate the graph) + | + | Count(self) + | Returns the node count + | + | OnCommand(self, cmd_id) + | + | OnPopup(self, widget, popup_handle) + | + | OnRefresh(self) + | Event called when the graph is refreshed or first created. + | From this event you are supposed to create nodes and edges. + | This callback is mandatory. + | + | @note: ***It is important to clear previous nodes before adding nodes.*** + | @return: Returning True tells the graph viewer to use the items. Otherwise old items will be used. + | + | Select(self, node_id) + | Selects a node on the graph + | + | Show(self) + | Shows an existing graph or creates a new one + | + | @return: Boolean + | + | __getitem__(self, idx) + | Returns a reference to the object associated with this node id + | + | __init__(self, title, close_open=False) + | Constructs the GraphView object. + | Please do not remove or rename the private fields + | + | @param title: The title of the graph window + | @param close_open: Should it attempt to close an existing graph (with same title) before creating this graph? + | + | __iter__(self) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | UI_Hooks_Trampoline = + | + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_kernwin.CustomIDAMemo: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | + | view_click(self, view, ve) + | + | view_close(self, view, *args) + | + | view_curpos(self, view, *args) + | + | view_dblclick(self, view, ve) + | + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | + | view_mouse_over(self, view, ve) + | + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods inherited from ida_kernwin.CustomIDAMemo: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_kernwin.View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | view_created(self, *args) + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_kernwin.View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_kernwin.View_Hooks: + | + | __swig_destroy__ = + | delete_View_Hooks(self) + +Help on class TPointDouble in module ida_graph: + +class TPointDouble(__builtin__.object) + | Proxy of C++ TPointDouble class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> TPointDouble + | __init__(self, a, b) -> TPointDouble + | __init__(self, r) -> TPointDouble + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | add(self, *args) + | add(self, r) + | + | negate(self, *args) + | negate(self) + | + | sub(self, *args) + | sub(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | x + | TPointDouble_x_get(self) -> double + | + | y + | TPointDouble_y_get(self) -> double + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_TPointDouble(self) + +Help on function calc_dist in module ida_graph: + +calc_dist(*args) + calc_dist(p, q) -> double + + + Calculate distance between p and q. + + + @param p (C++: point_t) + @param q (C++: point_t) + +Help on function clr_node_info in module ida_graph: + +clr_node_info(*args) + clr_node_info(gid, node, flags) + + + Clear node info for the given node. + + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @param flags: combination of Node info flags , identifying which + fields of node_info_t will be cleared (C++: uint32) + +Help on function create_disasm_graph in module ida_graph: + +create_disasm_graph(*args) + create_disasm_graph(ea) -> mutable_graph_t + create_disasm_graph(ranges) -> mutable_graph_t + + + Create a graph for the function that contains 'ea'. + + + @param ea (C++: ea_t) + +Help on function create_graph_viewer in module ida_graph: + +create_graph_viewer(*args) + create_graph_viewer(title, id, callback, ud, title_height, parent=None) -> graph_viewer_t * + + + Create a custom graph viewer. + + @param title: the widget title (C++: const char *) + @param id: graph id (C++: uval_t) + @param callback: callback to handle graph notifications ( + graph_notification_t ) (C++: hook_cb_t *) + @param ud: user data passed to callback (C++: void *) + @param title_height: node title height (C++: int) + @param parent (C++: TWidget *) + @return: new viewer + +Help on function create_mutable_graph in module ida_graph: + +create_mutable_graph(*args) + create_mutable_graph(id) -> mutable_graph_t + + + Create a new empty graph with given id. + + + @param id (C++: uval_t) + +Help on function create_user_graph_place in module ida_graph: + +create_user_graph_place(*args) + create_user_graph_place(node, lnnum) -> user_graph_place_t + + + Get a copy of a 'user_graph_place_t' (returns a pointer to static + storage) + + + @param node (C++: int) + @param lnnum (C++: int) + +Help on function del_node_info in module ida_graph: + +del_node_info(*args) + del_node_info(gid, node) + + + Delete the 'node_info_t' for the given node. + + + @param gid (C++: graph_id_t) + @param node (C++: int) + +Help on function delete_mutable_graph in module ida_graph: + +delete_mutable_graph(*args) + delete_mutable_graph(g) + + + Delete graph object.use this only if you are dealing with + 'mutable_graph_t' instances that have not been used together with a + 'graph_viewer_t' . If you have called 'set_viewer_graph()' with your + graph, the graph's lifecycle will be managed by the viewer, and you + shouldn't interfere with it + + @param g (C++: mutable_graph_t *) + +Help on class edge_info_t in module ida_graph: + +class edge_info_t(__builtin__.object) + | Proxy of C++ edge_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> edge_info_t + | + | __repr__ = _swig_repr(self) + | + | reverse_layout(self, *args) + | reverse_layout(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | color + | edge_info_t_color_get(self) -> bgcolor_t + | + | dstoff + | edge_info_t_dstoff_get(self) -> int + | + | layout + | edge_info_t_layout_get(self) -> pointseq_t + | + | srcoff + | edge_info_t_srcoff_get(self) -> int + | + | thisown + | The membership flag + | + | width + | edge_info_t_width_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_edge_info_t(self) + +Help on class edge_infos_wrapper_t in module ida_graph: + +class edge_infos_wrapper_t(__builtin__.object) + | Proxy of C++ edge_infos_wrapper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ptr + | edge_infos_wrapper_t_ptr_get(self) -> edge_infos_t * + | + | thisown + | The membership flag + +Help on class edge_layout_point_t in module ida_graph: + +class edge_layout_point_t(__builtin__.object) + | Proxy of C++ edge_layout_point_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> edge_layout_point_t + | __init__(self, r) -> edge_layout_point_t + | __init__(self, _e, _pidx) -> edge_layout_point_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | edge_layout_point_t_e_get(self) -> edge_t + | + | pidx + | edge_layout_point_t_pidx_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_edge_layout_point_t(self) + +Help on class edge_segment_t in module ida_graph: + +class edge_segment_t(__builtin__.object) + | Proxy of C++ edge_segment_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> edge_segment_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | length(self, *args) + | length(self) -> size_t + | + | toright(self, *args) + | toright(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | edge_segment_t_e_get(self) -> edge_t + | + | nseg + | edge_segment_t_nseg_get(self) -> int + | + | thisown + | The membership flag + | + | x0 + | edge_segment_t_x0_get(self) -> int + | + | x1 + | edge_segment_t_x1_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_edge_segment_t(self) + +Help on class edge_t in module ida_graph: + +class edge_t(__builtin__.object) + | Proxy of C++ edge_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, y) -> bool + | + | __init__(self, *args) + | __init__(self) -> edge_t + | __init__(self, x, y) -> edge_t + | + | __lt__(self, *args) + | __lt__(self, y) -> bool + | + | __ne__(self, *args) + | __ne__(self, y) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dst + | edge_t_dst_get(self) -> int + | + | src + | edge_t_src_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_edge_t(self) + +Help on function get_graph_viewer in module ida_graph: + +get_graph_viewer(*args) + get_graph_viewer(parent) -> graph_viewer_t * + + + Get custom graph viewer for given form. + + + @param parent (C++: TWidget *) + +Help on function get_node_info in module ida_graph: + +get_node_info(*args) + get_node_info(out, gid, node) -> bool + + + Get node info. + + @param out: result (C++: node_info_t *) + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @return: success + +Help on function get_viewer_graph in module ida_graph: + +get_viewer_graph(*args) + get_viewer_graph(gv) -> mutable_graph_t + + + Get graph object for given custom graph viewer. + + + @param gv (C++: graph_viewer_t *) + +Help on class graph_item_t in module ida_graph: + +class graph_item_t(__builtin__.object) + | Proxy of C++ graph_item_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> graph_item_t + | + | __repr__ = _swig_repr(self) + | + | is_edge(self, *args) + | is_edge(self) -> bool + | + | is_node(self, *args) + | is_node(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | b + | graph_item_t_b_get(self) -> int + | + | e + | graph_item_t_e_get(self) -> edge_t + | + | elp + | graph_item_t_elp_get(self) -> edge_layout_point_t + | + | n + | graph_item_t_n_get(self) -> int + | + | p + | graph_item_t_p_get(self) -> point_t + | + | thisown + | The membership flag + | + | type + | graph_item_t_type_get(self) -> graph_item_type_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_item_t(self) + +Help on class graph_node_visitor_t in module ida_graph: + +class graph_node_visitor_t(__builtin__.object) + | Proxy of C++ graph_node_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_node_visitor_t + | + | __repr__ = _swig_repr(self) + | + | is_forbidden_edge(self, *args) + | is_forbidden_edge(self, arg0, arg1) -> bool + | + | is_visited(self, *args) + | is_visited(self, n) -> bool + | + | reinit(self, *args) + | reinit(self) + | + | set_visited(self, *args) + | set_visited(self, n) + | + | visit_node(self, *args) + | visit_node(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_node_visitor_t(self) + +Help on class graph_path_visitor_t in module ida_graph: + +class graph_path_visitor_t(__builtin__.object) + | Proxy of C++ graph_path_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_path_visitor_t + | + | __repr__ = _swig_repr(self) + | + | walk_backward(self, *args) + | walk_backward(self, arg0) -> int + | + | walk_forward(self, *args) + | walk_forward(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | path + | graph_path_visitor_t_path_get(self) -> intvec_t * + | + | prune + | graph_path_visitor_t_prune_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_path_visitor_t(self) + +Help on class graph_visitor_t in module ida_graph: + +class graph_visitor_t(__builtin__.object) + | Proxy of C++ graph_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_edge(self, *args) + | visit_edge(self, arg2, arg3) -> int + | + | visit_node(self, *args) + | visit_node(self, arg2, arg3) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_visitor_t(self) + +Help on class group_crinfo_t in module ida_graph: + +class group_crinfo_t(__builtin__.object) + | Proxy of C++ group_crinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> group_crinfo_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | nodes + | group_crinfo_t_nodes_get(self) -> intvec_t * + | + | text + | group_crinfo_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_group_crinfo_t(self) + +Help on class interval_t in module ida_graph: + +class interval_t(__builtin__.object) + | Proxy of C++ interval_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> interval_t + | __init__(self, y0, y1) -> interval_t + | __init__(self, s) -> interval_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | contains(self, *args) + | contains(self, x) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | intersect(self, *args) + | intersect(self, r) + | + | length(self, *args) + | length(self) -> int + | + | make_union(self, *args) + | make_union(self, r) + | + | move_by(self, *args) + | move_by(self, shift) + | + | ---------------------------------------------------------------------- + | 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 + | + | x0 + | interval_t_x0_get(self) -> int + | + | x1 + | interval_t_x1_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_interval_t(self) + +Help on class mutable_graph_t in module ida_graph: + +class mutable_graph_t(__builtin__.object) + | Proxy of C++ mutable_graph_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | calc_group_ea(self, *args) + | calc_group_ea(self, arg0) -> ea_t + | + | change_group_visibility(self, *args) + | change_group_visibility(self, group, expand) -> bool + | + | clear(self, *args) + | clear(self) + | + | create_digraph_layout(self, *args) + | create_digraph_layout(self) -> bool + | + | create_group(self, *args) + | create_group(self, nodes) -> int + | + | del_custom_layout(self, *args) + | del_custom_layout(self) + | + | delete_group(self, *args) + | delete_group(self, group) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | exists(self, *args) + | exists(self, node) -> bool + | + | get_custom_layout(self, *args) + | get_custom_layout(self) -> bool + | + | get_edge(self, *args) + | get_edge(self, e) -> edge_info_t + | + | get_first_subgraph_node(self, *args) + | get_first_subgraph_node(self, group) -> int + | + | get_graph_groups(self, *args) + | get_graph_groups(self) -> bool + | + | get_next_subgraph_node(self, *args) + | get_next_subgraph_node(self, group, current) -> int + | + | get_node_group(self, *args) + | get_node_group(self, node) -> int + | + | get_node_representative(self, *args) + | get_node_representative(self, node) -> int + | + | is_collapsed_node(self, *args) + | is_collapsed_node(self, node) -> bool + | + | is_deleted_node(self, *args) + | is_deleted_node(self, node) -> bool + | + | is_displayable_node(self, *args) + | is_displayable_node(self, node) -> bool + | + | is_dot_node(self, *args) + | is_dot_node(self, node) -> bool + | + | is_group_node(self, *args) + | is_group_node(self, node) -> bool + | + | is_simple_node(self, *args) + | is_simple_node(self, node) -> bool + | + | is_subgraph_node(self, *args) + | is_subgraph_node(self, node) -> bool + | + | is_uncollapsed_node(self, *args) + | is_uncollapsed_node(self, node) -> bool + | + | is_user_graph(self, *args) + | is_user_graph(self) -> bool + | + | is_visible_node(self, *args) + | is_visible_node(self, node) -> bool + | + | node_qty(self, *args) + | node_qty(self) -> int + | + | npred(self, *args) + | npred(self, b) -> int + | + | nrect(self, *args) + | nrect(self, n) -> rect_t + | nrect(self, n) -> rect_t + | + | nsucc(self, *args) + | nsucc(self, b) -> int + | + | pred(self, *args) + | pred(self, b, i) -> int + | + | predset(self, *args) + | predset(self, b) -> intvec_t const & + | + | reset(self, *args) + | reset(self) + | + | set_custom_layout(self, *args) + | set_custom_layout(self) + | + | set_deleted_node(self, *args) + | set_deleted_node(self, node) + | + | set_edge(self, *args) + | set_edge(self, e, ei) -> bool + | + | set_graph_groups(self, *args) + | set_graph_groups(self) + | + | set_node_group(self, *args) + | set_node_group(self, node, group) + | + | size(self, *args) + | size(self) -> int + | + | succ(self, *args) + | succ(self, b, i) -> int + | + | succset(self, *args) + | succset(self, b) -> intvec_t const & + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | belongs + | mutable_graph_t_belongs_get(self) -> intvec_t * + | + | edges + | mutable_graph_t_edges_get(self) -> edge_infos_wrapper_t + | + | gid + | mutable_graph_t_gid_get(self) -> uval_t + | + | node_flags + | mutable_graph_t_node_flags_get(self) -> bytevec_t * + | + | nodes + | mutable_graph_t_nodes_get(self) -> node_layout_t + | + | org_preds + | mutable_graph_t_org_preds_get(self) -> array_of_intvec_t + | + | org_succs + | mutable_graph_t_org_succs_get(self) -> array_of_intvec_t + | + | preds + | mutable_graph_t_preds_get(self) -> array_of_intvec_t + | + | succs + | mutable_graph_t_succs_get(self) -> array_of_intvec_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mutable_graph_t(self) + +Help on class node_info_t in module ida_graph: + +class node_info_t(__builtin__.object) + | Proxy of C++ node_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> node_info_t + | + | __repr__ = _swig_repr(self) + | + | get_flags_for_valid(self, *args) + | get_flags_for_valid(self) -> uint32 + | + | valid_bg_color(self, *args) + | valid_bg_color(self) -> bool + | + | valid_ea(self, *args) + | valid_ea(self) -> bool + | + | valid_flags(self, *args) + | valid_flags(self) -> bool + | + | valid_frame_color(self, *args) + | valid_frame_color(self) -> bool + | + | valid_text(self, *args) + | valid_text(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bg_color + | node_info_t_bg_color_get(self) -> bgcolor_t + | + | ea + | node_info_t_ea_get(self) -> ea_t + | + | flags + | node_info_t_flags_get(self) -> uint32 + | + | frame_color + | node_info_t_frame_color_get(self) -> bgcolor_t + | + | text + | node_info_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_node_info_t(self) + +Help on class node_layout_t in module ida_graph: + +class node_layout_t(__builtin__.object) + | Proxy of C++ qvector< rect_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> rect_t + | + | __init__(self, *args) + | __init__(self) -> node_layout_t + | __init__(self, x) -> node_layout_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> rect_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> rect_t + | begin(self) -> rect_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> rect_t + | end(self) -> rect_t + | + | erase(self, *args) + | erase(self, it) -> rect_t + | erase(self, first, last) -> rect_t + | + | extract(self, *args) + | extract(self) -> rect_t + | + | find(self, *args) + | find(self, x) -> rect_t + | find(self, x) -> rect_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=rect_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> rect_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> rect_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_node_layout_t(self) + +Help on class node_ordering_t in module ida_graph: + +class node_ordering_t(__builtin__.object) + | Proxy of C++ node_ordering_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> node_ordering_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | node(self, *args) + | node(self, _order) -> int + | + | resize(self, *args) + | resize(self, n) + | + | set(self, *args) + | set(self, _node, num) + | + | size(self, *args) + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_node_ordering_t(self) + +Help on class point_t in module ida_graph: + +class point_t(__builtin__.object) + | Proxy of C++ point_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> point_t + | __init__(self, _x, _y) -> point_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | add(self, *args) + | add(self, r) -> point_t + | + | negate(self, *args) + | negate(self) + | + | sub(self, *args) + | sub(self, r) -> point_t + | + | ---------------------------------------------------------------------- + | 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 + | + | x + | point_t_x_get(self) -> int + | + | y + | point_t_y_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_point_t(self) + +Help on class pointseq_t in module ida_graph: + +class pointseq_t(pointvec_t) + | Proxy of C++ pointseq_t class. + | + | Method resolution order: + | pointseq_t + | pointvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pointseq_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pointseq_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from pointvec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> point_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> point_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> point_t + | begin(self) -> point_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> point_t + | end(self) -> point_t + | + | erase(self, *args) + | erase(self, it) -> point_t + | erase(self, first, last) -> point_t + | + | extract(self, *args) + | extract(self) -> point_t + | + | find(self, *args) + | find(self, x) -> point_t + | find(self, x) -> point_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=point_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> point_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> point_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from pointvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class pointvec_t in module ida_graph: + +class pointvec_t(__builtin__.object) + | Proxy of C++ qvector< point_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> point_t + | + | __init__(self, *args) + | __init__(self) -> pointvec_t + | __init__(self, x) -> pointvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> point_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> point_t + | begin(self) -> point_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> point_t + | end(self) -> point_t + | + | erase(self, *args) + | erase(self, it) -> point_t + | erase(self, first, last) -> point_t + | + | extract(self, *args) + | extract(self) -> point_t + | + | find(self, *args) + | find(self, x) -> point_t + | find(self, x) -> point_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=point_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> point_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> point_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_pointvec_t(self) + +Help on function pyg_close in module ida_graph: + +pyg_close(*args) + pyg_close(_self) + +Help on function pyg_select_node in module ida_graph: + +pyg_select_node(*args) + pyg_select_node(_self, nid) + +Help on function pyg_show in module ida_graph: + +pyg_show(*args) + pyg_show(_self) -> bool + +Help on class rect_t in module ida_graph: + +class rect_t(__builtin__.object) + | Proxy of C++ rect_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> rect_t + | __init__(self, l, t, r, b) -> rect_t + | __init__(self, p0, p1) -> rect_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | area(self, *args) + | area(self) -> int + | + | bottomright(self, *args) + | bottomright(self) -> point_t + | + | center(self, *args) + | center(self) -> point_t + | + | contains(self, *args) + | contains(self, p) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | grow(self, *args) + | grow(self, delta) + | + | height(self, *args) + | height(self) -> int + | + | intersect(self, *args) + | intersect(self, r) + | + | is_intersection_empty(self, *args) + | is_intersection_empty(self, r) -> bool + | + | make_union(self, *args) + | make_union(self, r) + | + | move_by(self, *args) + | move_by(self, p) + | + | move_to(self, *args) + | move_to(self, p) + | + | topleft(self, *args) + | topleft(self) -> point_t + | + | width(self, *args) + | width(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bottom + | rect_t_bottom_get(self) -> int + | + | left + | rect_t_left_get(self) -> int + | + | right + | rect_t_right_get(self) -> int + | + | thisown + | The membership flag + | + | top + | rect_t_top_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rect_t(self) + +Help on function refresh_viewer in module ida_graph: + +refresh_viewer(*args) + refresh_viewer(gv) + + + Redraw the graph in the given view. + + + @param gv (C++: graph_viewer_t *) + +Help on class row_info_t in module ida_graph: + +class row_info_t(__builtin__.object) + | Proxy of C++ row_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> row_info_t + | + | __repr__ = _swig_repr(self) + | + | height(self, *args) + | height(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bottom + | row_info_t_bottom_get(self) -> int + | + | nodes + | row_info_t_nodes_get(self) -> intvec_t * + | + | thisown + | The membership flag + | + | top + | row_info_t_top_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_row_info_t(self) + +Help on class screen_graph_selection_base_t in module ida_graph: + +class screen_graph_selection_base_t(__builtin__.object) + | Proxy of C++ qvector< selection_item_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> selection_item_t + | + | __init__(self, *args) + | __init__(self) -> screen_graph_selection_base_t + | __init__(self, x) -> screen_graph_selection_base_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> selection_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> selection_item_t + | begin(self) -> selection_item_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> selection_item_t + | end(self) -> selection_item_t + | + | erase(self, *args) + | erase(self, it) -> selection_item_t + | erase(self, first, last) -> selection_item_t + | + | extract(self, *args) + | extract(self) -> selection_item_t + | + | find(self, *args) + | find(self, x) -> selection_item_t + | find(self, x) -> selection_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=selection_item_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> selection_item_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> selection_item_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = screen_graph_selection_t + | + | __repr__ = _swig_repr(self) + | + | add(self, *args) + | add(self, s) + | + | add_node(self, *args) + | add_node(self, node) + | + | add_point(self, *args) + | add_point(self, e, idx) + | + | del_node(self, *args) + | del_node(self, node) + | + | del_point(self, *args) + | del_point(self, e, idx) + | + | has(self, *args) + | has(self, item) -> bool + | + | items_count(self, *args) + | items_count(self, look_for_nodes) -> size_t + | + | nodes_count(self, *args) + | nodes_count(self) -> size_t + | + | points_count(self, *args) + | points_count(self) -> size_t + | + | sub(self, *args) + | sub(self, s) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_screen_graph_selection_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from screen_graph_selection_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> selection_item_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> selection_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> selection_item_t + | begin(self) -> selection_item_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> selection_item_t + | end(self) -> selection_item_t + | + | erase(self, *args) + | erase(self, it) -> selection_item_t + | erase(self, first, last) -> selection_item_t + | + | extract(self, *args) + | extract(self) -> selection_item_t + | + | find(self, *args) + | find(self, x) -> selection_item_t + | find(self, x) -> selection_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=selection_item_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> selection_item_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> selection_item_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from screen_graph_selection_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class selection_item_t in module ida_graph: + +class selection_item_t(__builtin__.object) + | Proxy of C++ selection_item_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> selection_item_t + | __init__(self, n) -> selection_item_t + | __init__(self, _elp) -> selection_item_t + | __init__(self, e, idx) -> selection_item_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | elp + | selection_item_t_elp_get(self) -> edge_layout_point_t + | + | is_node + | selection_item_t_is_node_get(self) -> bool + | + | node + | selection_item_t_node_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_selection_item_t(self) + +Help on function set_node_info in module ida_graph: + +set_node_info(*args) + set_node_info(gid, node, ni, flags) + + + Set node info. + + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @param ni: node info to use (C++: const node_info_t &) + @param flags: combination of Node info flags , identifying which + fields of 'ni' will be used (C++: uint32) + +Help on function set_viewer_graph in module ida_graph: + +set_viewer_graph(*args) + set_viewer_graph(gv, g) + + + Set the underlying graph object for the given viewer. + + + @param gv (C++: graph_viewer_t *) + @param g (C++: mutable_graph_t *) + +Help on class user_graph_place_t in module ida_graph: + +class user_graph_place_t(__builtin__.object) + | Proxy of C++ user_graph_place_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | node + | user_graph_place_t_node_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_graph_place_t(self) + +Help on function viewer_attach_menu_item in module ida_graph: + +viewer_attach_menu_item(*args) + viewer_attach_menu_item(g, name) -> bool + + + Attach a previously-registered action to the view's context menu. See + 'kernwin.hpp' for how to register actions. + + @param g (C++: graph_viewer_t *) + @param name: action name (C++: const char *) + @return: success + +Help on function viewer_center_on in module ida_graph: + +viewer_center_on(*args) + viewer_center_on(gv, node) + + + Center the graph view on the given node. + + + @param gv (C++: graph_viewer_t *) + @param node (C++: int) + +Help on function viewer_create_groups in module ida_graph: + +viewer_create_groups(*args) + viewer_create_groups(gv, out_group_nodes, gi) -> bool + + + This will perform an operation similar to what happens when a user + manually selects a set of nodes, right-clicks and selects "Create + group". This is a wrapper around mutable_graph_t::create_group that + will, in essence:clone the current graphfor each 'group_crinfo_t' , + attempt creating group in that new graphif all were successful, + animate to that new graph.this accepts parameters that allow creating + of multiple groups at once; which means only one graph animation will + be triggered. + + @param gv (C++: graph_viewer_t *) + @param out_group_nodes (C++: intvec_t *) + @param gi (C++: const groups_crinfos_t &) + +Help on function viewer_del_node_info in module ida_graph: + +viewer_del_node_info(*args) + viewer_del_node_info(gv, n) + + + Delete node info for node in given viewer (see 'del_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param n (C++: int) + +Help on function viewer_delete_groups in module ida_graph: + +viewer_delete_groups(*args) + viewer_delete_groups(gv, groups, new_current=-1) -> bool + + + Wrapper around mutable_graph_t::delete_group. This function will:clone + the current graphattempt deleting the groups in that new graphif + successful, animate to that new graph. + + @param gv (C++: graph_viewer_t *) + @param groups (C++: const intvec_t &) + @param new_current (C++: int) + +Help on function viewer_fit_window in module ida_graph: + +viewer_fit_window(*args) + viewer_fit_window(gv) + + + Fit graph viewer to its parent form. + + + @param gv (C++: graph_viewer_t *) + +Help on function viewer_get_curnode in module ida_graph: + +viewer_get_curnode(*args) + viewer_get_curnode(gv) -> int + + + Get number of currently selected node (-1 if none) + + + @param gv (C++: graph_viewer_t *) + +Help on function viewer_get_gli in module ida_graph: + +viewer_get_gli(*args) + viewer_get_gli(out, gv, flags=0) -> bool + + + Get location info for given graph view If flags contains + GLICTL_CENTER, then the gli that will be retrieved, will be the one at + the center of the view. Otherwise it will be the top-left. + + @param out (C++: graph_location_info_t *) + @param gv (C++: graph_viewer_t *) + @param flags (C++: uint32) + +Help on function viewer_get_node_info in module ida_graph: + +viewer_get_node_info(*args) + viewer_get_node_info(gv, out, n) -> bool + + + Get node info for node in given viewer (see 'get_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param out (C++: node_info_t *) + @param n (C++: int) + +Help on function viewer_get_selection in module ida_graph: + +viewer_get_selection(*args) + viewer_get_selection(gv, sgs) -> bool + + + Get currently selected items for graph viewer. + + + @param gv (C++: graph_viewer_t *) + @param sgs (C++: screen_graph_selection_t *) + +Help on function viewer_set_gli in module ida_graph: + +viewer_set_gli(*args) + viewer_set_gli(gv, gli, flags=0) + + + Set location info for given graph view If flags contains + GLICTL_CENTER, then the gli will be set to be the center of the view. + Otherwise it will be the top-left. + + @param gv (C++: graph_viewer_t *) + @param gli (C++: const graph_location_info_t *) + @param flags (C++: uint32) + +Help on function viewer_set_groups_visibility in module ida_graph: + +viewer_set_groups_visibility(*args) + viewer_set_groups_visibility(gv, groups, expand, new_current=-1) -> bool + + + Wrapper around mutable_graph_t::change_visibility. This function + will:clone the current graphattempt changing visibility of the groups + in that new graphif successful, animate to that new graph. + + @param gv (C++: graph_viewer_t *) + @param groups (C++: const intvec_t &) + @param expand (C++: bool) + @param new_current (C++: int) + +Help on function viewer_set_node_info in module ida_graph: + +viewer_set_node_info(*args) + viewer_set_node_info(gv, n, ni, flags) + + + Set node info for node in given viewer (see 'set_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param n (C++: int) + @param ni (C++: const node_info_t &) + @param flags (C++: uint32) + +Help on function viewer_set_titlebar_height in module ida_graph: + +viewer_set_titlebar_height(*args) + viewer_set_titlebar_height(gv, height) -> int + + + Set height of node title bars ( 'grcode_set_titlebar_height' ) + + + @param gv (C++: graph_viewer_t *) + @param height (C++: int) + +=== ida_graph EPYDOC INJECTIONS === +ida_graph.GLICTL_CENTER +""" +the gli should be set/get as center +""" + +ida_graph.MTG_DOT_NODE +""" +is dot node? +""" + +ida_graph.MTG_GROUP_NODE +""" +is group node? +""" + +ida_graph.MTG_NON_DISPLAYABLE_NODE +""" +for disassembly graphs - non-displayable nodes have a visible area +that is too large to generate disassembly lines for without IDA +slowing down significantly (see MAX_VISIBLE_NODE_AREA) +""" + +ida_graph.NIF_BG_COLOR +""" + 'node_info_t::bg_color' +""" + +ida_graph.NIF_EA +""" + 'node_info_t::ea' +""" + +ida_graph.NIF_FLAGS +""" + 'node_info_t::flags' +""" + +ida_graph.NIF_FRAME_COLOR +""" + 'node_info_t::frame_color' +""" + +ida_graph.NIF_TEXT +""" + 'node_info_t::text' +""" +=== ida_graph EPYDOC INJECTIONS END === +Help on class DecompilationFailure in module ida_hexrays: + +class DecompilationFailure(exceptions.Exception) + | Raised on a decompilation error. + | + | The associated hexrays_failure_t object is stored in the + | 'info' member of this exception. + | + | Method resolution order: + | DecompilationFailure + | exceptions.Exception + | exceptions.BaseException + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, info) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from exceptions.Exception: + | + | __new__ = + | T.__new__(S, ...) -> a new object with type S, a subtype of T + | + | ---------------------------------------------------------------------- + | Methods inherited from exceptions.BaseException: + | + | __delattr__(...) + | x.__delattr__('name') <==> del x.name + | + | __getattribute__(...) + | x.__getattribute__('name') <==> x.name + | + | __getitem__(...) + | x.__getitem__(y) <==> x[y] + | + | __getslice__(...) + | x.__getslice__(i, j) <==> x[i:j] + | + | Use of negative indices is not supported. + | + | __reduce__(...) + | + | __repr__(...) + | x.__repr__() <==> repr(x) + | + | __setattr__(...) + | x.__setattr__('name', value) <==> x.name = value + | + | __setstate__(...) + | + | __str__(...) + | x.__str__() <==> str(x) + | + | __unicode__(...) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from exceptions.BaseException: + | + | __dict__ + | + | args + | + | message + +Help on class Hexrays_Hooks in module ida_hexrays: + +class Hexrays_Hooks(__builtin__.object) + | Proxy of C++ Hexrays_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> Hexrays_Hooks + | + | __repr__ = _swig_repr(self) + | + | close_pseudocode(self, *args) + | close_pseudocode(self, vu) -> int + | + | cmt_changed(self, *args) + | cmt_changed(self, cfunc, loc, cmt) -> int + | + | combine(self, *args) + | combine(self, blk, insn) -> int + | + | create_hint(self, *args) + | create_hint(self, vu) -> PyObject * + | + | curpos(self, *args) + | curpos(self, vu) -> int + | + | double_click(self, *args) + | double_click(self, vu, shift_state) -> int + | + | flowchart(self, *args) + | flowchart(self, fc) -> int + | + | func_printed(self, *args) + | func_printed(self, cfunc) -> int + | + | glbopt(self, *args) + | glbopt(self, mba) -> int + | + | hook(self, *args) + | hook(self) -> bool + | + | interr(self, *args) + | interr(self, errcode) -> int + | + | keyboard(self, *args) + | keyboard(self, vu, key_code, shift_state) -> int + | + | locopt(self, *args) + | locopt(self, mba) -> int + | + | lvar_cmt_changed(self, *args) + | lvar_cmt_changed(self, vu, v, cmt) -> int + | + | lvar_mapping_changed(self, *args) + | lvar_mapping_changed(self, vu, frm, to) -> int + | + | lvar_name_changed(self, *args) + | lvar_name_changed(self, vu, v, name, is_user_name) -> int + | + | lvar_type_changed(self, *args) + | lvar_type_changed(self, vu, v, tinfo) -> int + | + | maturity(self, *args) + | maturity(self, cfunc, new_maturity) -> int + | + | microcode(self, *args) + | microcode(self, mba) -> int + | + | open_pseudocode(self, *args) + | open_pseudocode(self, vu) -> int + | + | populating_popup(self, *args) + | populating_popup(self, widget, popup_handle, vu) -> int + | + | prealloc(self, *args) + | prealloc(self, mba) -> int + | + | preoptimized(self, *args) + | preoptimized(self, mba) -> int + | + | print_func(self, *args) + | print_func(self, cfunc, vp) -> int + | + | prolog(self, *args) + | prolog(self, mba, fc, reachable_blocks, decomp_flags) -> int + | + | refresh_pseudocode(self, *args) + | refresh_pseudocode(self, vu) -> int + | + | resolve_stkaddrs(self, *args) + | resolve_stkaddrs(self, mba) -> int + | + | right_click(self, *args) + | right_click(self, vu) -> int + | + | stkpnts(self, *args) + | stkpnts(self, mba, _sps) -> int + | + | structural(self, *args) + | structural(self, ct) -> int + | + | switch_pseudocode(self, *args) + | switch_pseudocode(self, vu) -> int + | + | text_ready(self, *args) + | text_ready(self, vu) -> int + | + | unhook(self, *args) + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_Hexrays_Hooks(self) + +Help on class __cbhooks_t in module ida_hexrays: + +class __cbhooks_t(Hexrays_Hooks) + | Method resolution order: + | __cbhooks_t + | Hexrays_Hooks + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, callback) + | + | close_pseudocode(self, *args) + | + | create_hint(self, *args) + | + | curpos(self, *args) + | + | double_click(self, *args) + | + | func_printed(self, *args) + | + | interr(self, *args) + | + | keyboard(self, *args) + | + | maturity(self, *args) + | + | open_pseudocode(self, *args) + | + | populating_popup(self, *args) + | + | print_func(self, *args) + | + | refresh_pseudocode(self, *args) + | + | right_click(self, *args) + | + | switch_pseudocode(self, *args) + | + | text_ready(self, *args) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | instances = [] + | + | ---------------------------------------------------------------------- + | Methods inherited from Hexrays_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | cmt_changed(self, *args) + | cmt_changed(self, cfunc, loc, cmt) -> int + | + | combine(self, *args) + | combine(self, blk, insn) -> int + | + | flowchart(self, *args) + | flowchart(self, fc) -> int + | + | glbopt(self, *args) + | glbopt(self, mba) -> int + | + | hook(self, *args) + | hook(self) -> bool + | + | locopt(self, *args) + | locopt(self, mba) -> int + | + | lvar_cmt_changed(self, *args) + | lvar_cmt_changed(self, vu, v, cmt) -> int + | + | lvar_mapping_changed(self, *args) + | lvar_mapping_changed(self, vu, frm, to) -> int + | + | lvar_name_changed(self, *args) + | lvar_name_changed(self, vu, v, name, is_user_name) -> int + | + | lvar_type_changed(self, *args) + | lvar_type_changed(self, vu, v, tinfo) -> int + | + | microcode(self, *args) + | microcode(self, mba) -> int + | + | prealloc(self, *args) + | prealloc(self, mba) -> int + | + | preoptimized(self, *args) + | preoptimized(self, mba) -> int + | + | prolog(self, *args) + | prolog(self, mba, fc, reachable_blocks, decomp_flags) -> int + | + | resolve_stkaddrs(self, *args) + | resolve_stkaddrs(self, mba) -> int + | + | stkpnts(self, *args) + | stkpnts(self, mba, _sps) -> int + | + | structural(self, *args) + | structural(self, ct) -> int + | + | unhook(self, *args) + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from Hexrays_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from Hexrays_Hooks: + | + | __swig_destroy__ = + | delete_Hexrays_Hooks(self) + +Help on function _call_with_transferrable_ownership in module ida_hexrays: + +_call_with_transferrable_ownership(fun, *args) + # Object ownership + +Help on function _kludge_use_TPopupMenu in module ida_hexrays: + +_kludge_use_TPopupMenu(*args) + _kludge_use_TPopupMenu(m) + +Help on function _ll_call_helper in module ida_hexrays: + +_ll_call_helper(*args) + _ll_call_helper(rettype, args, format) -> cexpr_t + +Help on function _ll_create_helper in module ida_hexrays: + +_ll_create_helper(*args) + _ll_create_helper(standalone, type, format) -> cexpr_t + +Help on function _ll_dereference in module ida_hexrays: + +_ll_dereference(*args) + _ll_dereference(e, ptrsize, is_flt=False) -> cexpr_t + +Help on function _ll_lnot in module ida_hexrays: + +_ll_lnot(*args) + _ll_lnot(e) -> cexpr_t + +Help on function _ll_make_num in module ida_hexrays: + +_ll_make_num(*args) + _ll_make_num(n, func=None, ea=BADADDR, opnum=0, sign=no_sign, size=0) -> cexpr_t + +Help on function _ll_make_ref in module ida_hexrays: + +_ll_make_ref(*args) + _ll_make_ref(e) -> cexpr_t + +Help on function _ll_new_block in module ida_hexrays: + +_ll_new_block(*args) + _ll_new_block() -> cinsn_t + +Help on function _map_as_dict in module ida_hexrays: + +_map_as_dict(maptype, name, keytype, valuetype) + # dictify all dict-like types + +Help on function accepts_small_udts in module ida_hexrays: + +accepts_small_udts(*args) + accepts_small_udts(op) -> bool + + + Is the operator allowed on small structure or union? + + + @param op (C++: ctype_t) + +Help on function accepts_udts in module ida_hexrays: + +accepts_udts(*args) + accepts_udts(op) -> bool + +Help on function arglocs_overlap in module ida_hexrays: + +arglocs_overlap(*args) + arglocs_overlap(loc1, w1, loc2, w2) -> bool + + + Do two arglocs overlap? + + + @param loc1 (C++: const vdloc_t &) + @param w1 (C++: size_t) + @param loc2 (C++: const vdloc_t &) + @param w2 (C++: size_t) + +Help on class array_of_bitsets in module ida_hexrays: + +class array_of_bitsets(__builtin__.object) + | Proxy of C++ qvector< bitset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> bitset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_bitsets + | __init__(self, x) -> array_of_bitsets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> bitset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> bitset_t + | begin(self) -> bitset_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> bitset_t + | end(self) -> bitset_t + | + | erase(self, *args) + | erase(self, it) -> bitset_t + | erase(self, first, last) -> bitset_t + | + | extract(self, *args) + | extract(self) -> bitset_t + | + | find(self, *args) + | find(self, x) -> bitset_t + | find(self, x) -> bitset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=bitset_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> bitset_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> bitset_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_array_of_bitsets(self) + +Help on class array_of_ivlsets in module ida_hexrays: + +class array_of_ivlsets(__builtin__.object) + | Proxy of C++ qvector< ivlset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> ivlset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_ivlsets + | __init__(self, x) -> array_of_ivlsets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> ivlset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> ivlset_t + | begin(self) -> ivlset_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ivlset_t + | end(self) -> ivlset_t + | + | erase(self, *args) + | erase(self, it) -> ivlset_t + | erase(self, first, last) -> ivlset_t + | + | extract(self, *args) + | extract(self) -> ivlset_t + | + | find(self, *args) + | find(self, x) -> ivlset_t + | find(self, x) -> ivlset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=ivlset_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> ivlset_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ivlset_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_array_of_ivlsets(self) + +Help on function asgop in module ida_hexrays: + +asgop(*args) + asgop(cop) -> ctype_t + + + Convert plain operator into assignment operator. For example, cot_add + returns cot_asgadd. + + + @param cop (C++: ctype_t) + +Help on function asgop_revert in module ida_hexrays: + +asgop_revert(*args) + asgop_revert(cop) -> ctype_t + + + Convert assignment operator into plain operator. For example, + cot_asgadd returns cot_add + + @param cop (C++: ctype_t) + @return: cot_empty is the input operator is not an assignment + operator. + +Help on class bit_bound_t in module ida_hexrays: + +class bit_bound_t(__builtin__.object) + | Proxy of C++ bit_bound_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=0, s=0) -> bit_bound_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | nbits + | bit_bound_t_nbits_get(self) -> int16 + | + | sbits + | bit_bound_t_sbits_get(self) -> int16 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bit_bound_t(self) + +Help on class bitset_t in module ida_hexrays: + +class bitset_t(__builtin__.object) + | Proxy of C++ bitset_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> bitset_t + | __init__(self, m) -> bitset_t + | + | __iter__(self) + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __len__ = count(self, *args) + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | add(self, *args) + | add(self, bit) -> bool + | add(self, bit, width) -> bool + | add(self, ml) -> bool + | + | back(self, *args) + | back(self) -> int + | + | begin(self, *args) + | begin(self) -> bitset_t::iterator + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | copy(self, *args) + | copy(self, m) -> bitset_t + | + | count(self, *args) + | count(self) -> int + | count(self, bit) -> int + | + | cut_at(self, *args) + | cut_at(self, maxbit) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> bitset_t::iterator + | + | fill_with_ones(self, *args) + | fill_with_ones(self, maxbit) + | + | front(self, *args) + | front(self) -> int + | + | has(self, *args) + | has(self, bit) -> bool + | + | has_all(self, *args) + | has_all(self, bit, width) -> bool + | + | has_any(self, *args) + | has_any(self, bit, width) -> bool + | + | has_common(self, *args) + | has_common(self, ml) -> bool + | + | inc(self, *args) + | inc(self, p, n=1) + | + | includes(self, *args) + | includes(self, ml) -> bool + | + | intersect(self, *args) + | intersect(self, ml) -> bool + | + | is_subset_of(self, *args) + | is_subset_of(self, ml) -> bool + | + | itat(self, *args) + | itat(self, n) -> bitset_t::iterator + | + | itv(self, *args) + | itv(self, it) -> int + | + | last(self, *args) + | last(self) -> int + | + | shift_down(self, *args) + | shift_down(self, shift) + | + | sub(self, *args) + | sub(self, bit) -> bool + | sub(self, bit, width) -> bool + | sub(self, ml) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bitset_t(self) + +Help on function block_chains_begin in module ida_hexrays: + +block_chains_begin(*args) + block_chains_begin(set) -> block_chains_iterator_t + + + Get iterator pointing to the beginning of 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + +Help on function block_chains_clear in module ida_hexrays: + +block_chains_clear(*args) + block_chains_clear(set) + + + Clear 'block_chains_t' . + + + @param set (C++: block_chains_t *) + +Help on function block_chains_end in module ida_hexrays: + +block_chains_end(*args) + block_chains_end(set) -> block_chains_iterator_t + + + Get iterator pointing to the end of 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + +Help on function block_chains_erase in module ida_hexrays: + +block_chains_erase(*args) + block_chains_erase(set, p) + + + Erase current element from 'block_chains_t' . + + + @param set (C++: block_chains_t *) + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_find in module ida_hexrays: + +block_chains_find(*args) + block_chains_find(set, val) -> block_chains_iterator_t + + + Find the specified key in set 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + @param val (C++: const chain_t &) + +Help on function block_chains_free in module ida_hexrays: + +block_chains_free(*args) + block_chains_free(set) + + + Delete 'block_chains_t' instance. + + + @param set (C++: block_chains_t *) + +Help on function block_chains_get in module ida_hexrays: + +block_chains_get(*args) + block_chains_get(p) -> chain_t + + + Get reference to the current set value. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_insert in module ida_hexrays: + +block_chains_insert(*args) + block_chains_insert(set, val) -> block_chains_iterator_t + + + Insert new ( 'chain_t' ) into set 'block_chains_t' . + + + @param set (C++: block_chains_t *) + @param val (C++: const chain_t &) + +Help on class block_chains_iterator_t in module ida_hexrays: + +class block_chains_iterator_t(__builtin__.object) + | Proxy of C++ block_chains_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> block_chains_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | block_chains_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_block_chains_iterator_t(self) + +Help on function block_chains_new in module ida_hexrays: + +block_chains_new(*args) + block_chains_new() -> block_chains_t + + + Create a new 'block_chains_t' instance. + +Help on function block_chains_next in module ida_hexrays: + +block_chains_next(*args) + block_chains_next(p) -> block_chains_iterator_t + + + Move to the next element. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_prev in module ida_hexrays: + +block_chains_prev(*args) + block_chains_prev(p) -> block_chains_iterator_t + + + Move to the previous element. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_size in module ida_hexrays: + +block_chains_size(*args) + block_chains_size(set) -> size_t + + + Get size of 'block_chains_t' . + + + @param set (C++: block_chains_t *) + +Help on class block_chains_t in module ida_hexrays: + +class block_chains_t(__builtin__.object) + | Proxy of C++ block_chains_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> block_chains_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | get_chain(self, *args) + | get_chain(self, k, width=1) -> chain_t + | get_chain(self, k, width=1) -> chain_t + | get_chain(self, ch) -> chain_t + | get_chain(self, ch) -> chain_t + | + | get_reg_chain(self, *args) + | get_reg_chain(self, reg, width=1) -> chain_t + | get_reg_chain(self, reg, width=1) -> chain_t + | + | get_stk_chain(self, *args) + | get_stk_chain(self, off, width=1) -> chain_t + | get_stk_chain(self, off, width=1) -> chain_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_block_chains_t(self) + +Help on class block_chains_vec_t in module ida_hexrays: + +class block_chains_vec_t(__builtin__.object) + | Proxy of C++ qvector< block_chains_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> block_chains_t + | + | __init__(self, *args) + | __init__(self) -> block_chains_vec_t + | __init__(self, x) -> block_chains_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> block_chains_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> block_chains_t + | begin(self) -> block_chains_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> block_chains_t + | end(self) -> block_chains_t + | + | erase(self, *args) + | erase(self, it) -> block_chains_t + | erase(self, first, last) -> block_chains_t + | + | extract(self, *args) + | extract(self) -> block_chains_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=block_chains_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> block_chains_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> block_chains_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_block_chains_vec_t(self) + +Help on function boundaries_begin in module ida_hexrays: + +boundaries_begin(*args) + boundaries_begin(map) -> boundaries_iterator_t + + + Get iterator pointing to the beginning of boundaries_t. + + + @param map (C++: const boundaries_t *) + +Help on function boundaries_clear in module ida_hexrays: + +boundaries_clear(*args) + boundaries_clear(map) + + + Clear boundaries_t. + + + @param map (C++: boundaries_t *) + +Help on function boundaries_end in module ida_hexrays: + +boundaries_end(*args) + boundaries_end(map) -> boundaries_iterator_t + + + Get iterator pointing to the end of boundaries_t. + + + @param map (C++: const boundaries_t *) + +Help on function boundaries_erase in module ida_hexrays: + +boundaries_erase(*args) + boundaries_erase(map, p) + + + Erase current element from boundaries_t. + + + @param map (C++: boundaries_t *) + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_find in module ida_hexrays: + +boundaries_find(*args) + boundaries_find(map, key) -> boundaries_iterator_t + + + Find the specified key in boundaries_t. + + + @param map (C++: const boundaries_t *) + @param key (C++: const cinsn_t *&) + +Help on function boundaries_first in module ida_hexrays: + +boundaries_first(*args) + boundaries_first(p) -> cinsn_t + + + Get reference to the current map key. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_free in module ida_hexrays: + +boundaries_free(*args) + boundaries_free(map) + + + Delete boundaries_t instance. + + + @param map (C++: boundaries_t *) + +Help on function boundaries_insert in module ida_hexrays: + +boundaries_insert(*args) + boundaries_insert(map, key, val) -> boundaries_iterator_t + + + Insert new ( 'cinsn_t' *, 'rangeset_t' ) pair into boundaries_t. + + + @param map (C++: boundaries_t *) + @param key (C++: const cinsn_t *&) + @param val (C++: const rangeset_t &) + +Help on class boundaries_iterator_t in module ida_hexrays: + +class boundaries_iterator_t(__builtin__.object) + | Proxy of C++ boundaries_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> boundaries_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | boundaries_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_boundaries_iterator_t(self) + +Help on function boundaries_new in module ida_hexrays: + +boundaries_new(*args) + boundaries_new() -> boundaries_t + + + Create a new boundaries_t instance. + +Help on function boundaries_next in module ida_hexrays: + +boundaries_next(*args) + boundaries_next(p) -> boundaries_iterator_t + + + Move to the next element. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_prev in module ida_hexrays: + +boundaries_prev(*args) + boundaries_prev(p) -> boundaries_iterator_t + + + Move to the previous element. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_second in module ida_hexrays: + +boundaries_second(*args) + boundaries_second(p) -> rangeset_t + + + Get reference to the current map value. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_size in module ida_hexrays: + +boundaries_size(*args) + boundaries_size(map) -> size_t + + + Get size of boundaries_t. + + + @param map (C++: boundaries_t *) + +Help on class boundaries_t in module ida_hexrays: + +class boundaries_t(__builtin__.object) + | Proxy of C++ std::map< cinsn_t *,rangeset_t > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> boundaries_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> rangeset_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | boundaries_begin(map) -> boundaries_iterator_t + | + | __clear = + | boundaries_clear(map) + | + | __end = + | boundaries_end(map) -> boundaries_iterator_t + | + | __erase = + | boundaries_erase(map, p) + | + | __find = + | boundaries_find(map, key) -> boundaries_iterator_t + | + | __first = + | boundaries_first(p) -> cinsn_t + | + | __insert = + | boundaries_insert(map, key, val) -> boundaries_iterator_t + | + | __next = + | boundaries_next(p) -> boundaries_iterator_t + | + | __second = + | boundaries_second(p) -> rangeset_t + | + | __size = + | boundaries_size(map) -> size_t + | + | __swig_destroy__ = + | delete_boundaries_t(self) + | + | keytype = + | Proxy of C++ cinsn_t class. + | + | valuetype = + | Proxy of C++ rangeset_t class. + +Help on function call_helper in module ida_hexrays: + +call_helper(rettype, args, *rest) + +Help on class carg_t in module ida_hexrays: + +class carg_t(cexpr_t) + | Proxy of C++ carg_t class. + | + | Method resolution order: + | carg_t + | cexpr_t + | citem_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> carg_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | consume_cexpr(self, *args) + | consume_cexpr(self, e) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | formal_type + | carg_t_formal_type_get(self) -> tinfo_t + | + | is_vararg + | carg_t_is_vararg_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_carg_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from cexpr_t: + | + | _deregister(self, *args) + | _deregister(self) + | + | _get_a(self, *args) + | _get_a(self) -> carglist_t + | + | _get_fpc(self, *args) + | _get_fpc(self) -> fnumber_t + | + | _get_helper(self, *args) + | _get_helper(self) -> char * + | + | _get_insn(self, *args) + | _get_insn(self) -> cinsn_t + | + | _get_m(self, *args) + | _get_m(self) -> int + | + | _get_n(self, *args) + | _get_n(self) -> cnumber_t + | + | _get_obj_ea(self, *args) + | _get_obj_ea(self) -> ea_t + | + | _get_ptrsize(self, *args) + | _get_ptrsize(self) -> int + | + | _get_refwidth(self, *args) + | _get_refwidth(self) -> int + | + | _get_string(self, *args) + | _get_string(self) -> char * + | + | _get_x(self, *args) + | _get_x(self) -> cexpr_t + | + | _get_y(self, *args) + | _get_y(self) -> cexpr_t + | + | _get_z(self, *args) + | _get_z(self) -> cexpr_t + | + | _register(self, *args) + | _register(self) + | + | _replace_by(self, *args) + | _replace_by(self, r) + | + | _set_a(self, *args) + | _set_a(self, _v) + | + | _set_fpc(self, *args) + | _set_fpc(self, _v) + | + | _set_helper(self, *args) + | _set_helper(self, _v) + | + | _set_insn(self, *args) + | _set_insn(self, _v) + | + | _set_m(self, *args) + | _set_m(self, _v) + | + | _set_n(self, *args) + | _set_n(self, _v) + | + | _set_obj_ea(self, *args) + | _set_obj_ea(self, _v) + | + | _set_ptrsize(self, *args) + | _set_ptrsize(self, _v) + | + | _set_refwidth(self, *args) + | _set_refwidth(self, _v) + | + | _set_string(self, *args) + | _set_string(self, _v) + | + | _set_x(self, *args) + | _set_x(self, _v) + | + | _set_y(self, *args) + | _set_y(self, _v) + | + | _set_z(self, *args) + | _set_z(self, _v) + | + | assign(self, *args) + | assign(self, r) -> cexpr_t + | + | calc_type(self, *args) + | calc_type(self, recursive) + | + | cleanup(self, *args) + | cleanup(self) + | + | contains_comma(self, *args) + | contains_comma(self, times=1) -> bool + | + | contains_comma_or_insn_or_label(self, *args) + | contains_comma_or_insn_or_label(self, maxcommas=1) -> bool + | + | contains_insn(self, *args) + | contains_insn(self, times=1) -> bool + | + | contains_insn_or_label(self, *args) + | contains_insn_or_label(self) -> bool + | + | contains_operator(self, *args) + | contains_operator(self, needed_op, times=1) -> bool + | + | cpadone(self, *args) + | cpadone(self) -> bool + | + | equal_effect(self, *args) + | equal_effect(self, r) -> bool + | + | find_num_op(self, *args) + | find_num_op(self) -> cexpr_t + | find_num_op(self) -> cexpr_t + | + | find_op(self, *args) + | find_op(self, _op) -> cexpr_t + | find_op(self, _op) -> cexpr_t + | + | get_1num_op(self, *args) + | get_1num_op(self, o1, o2) -> bool + | + | get_const_value(self, *args) + | get_const_value(self) -> bool + | + | get_high_nbit_bound(self, *args) + | get_high_nbit_bound(self) -> bit_bound_t + | + | get_low_nbit_bound(self, *args) + | get_low_nbit_bound(self) -> int + | + | get_ptr_or_array(self, *args) + | get_ptr_or_array(self) -> cexpr_t + | + | get_type_sign(self, *args) + | get_type_sign(self) -> type_sign_t + | + | get_v(self, *args) + | get_v(self) -> var_ref_t + | + | has_side_effects(self, *args) + | has_side_effects(self) -> bool + | + | is_call_arg_of(self, *args) + | is_call_arg_of(self, parent) -> bool + | + | is_call_object_of(self, *args) + | is_call_object_of(self, parent) -> bool + | + | is_child_of(self, *args) + | is_child_of(self, parent) -> bool + | + | is_const_value(self, *args) + | is_const_value(self, _v) -> bool + | + | is_cstr(self, *args) + | is_cstr(self) -> bool + | + | is_fpop(self, *args) + | is_fpop(self) -> bool + | + | is_jumpout(self, *args) + | is_jumpout(self) -> bool + | + | is_negative_const(self, *args) + | is_negative_const(self) -> bool + | + | is_nice_cond(self, *args) + | is_nice_cond(self) -> bool + | + | is_nice_expr(self, *args) + | is_nice_expr(self) -> bool + | + | is_non_negative_const(self, *args) + | is_non_negative_const(self) -> bool + | + | is_non_zero_const(self, *args) + | is_non_zero_const(self) -> bool + | + | is_odd_lvalue(self, *args) + | is_odd_lvalue(self) -> bool + | + | is_type_signed(self, *args) + | is_type_signed(self) -> bool + | + | is_type_unsigned(self, *args) + | is_type_unsigned(self) -> bool + | + | is_undef_val(self, *args) + | is_undef_val(self) -> bool + | + | is_vftable(self, *args) + | is_vftable(self) -> bool + | + | is_zero_const(self, *args) + | is_zero_const(self) -> bool + | + | maybe_ptr(self, *args) + | maybe_ptr(self) -> bool + | + | numval(self, *args) + | numval(self) -> uint64 + | + | print1(self, *args) + | print1(self, func) + | + | put_number(self, *args) + | put_number(self, func, value, nbytes, sign=no_sign) + | + | requires_lvalue(self, *args) + | requires_lvalue(self, child) -> bool + | + | set_cpadone(self, *args) + | set_cpadone(self) + | + | set_v(self, *args) + | set_v(self, v) + | + | set_vftable(self, *args) + | set_vftable(self) + | + | swap(self, *args) + | swap(self, r) + | + | theother(self, *args) + | theother(self, what) -> cexpr_t + | theother(self, what) -> cexpr_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cexpr_t: + | + | a + | + | exflags + | cexpr_t_exflags_get(self) -> uint32 + | + | fpc + | + | helper + | + | insn + | + | m + | + | n + | + | obj_ea + | + | operands + | return a dictionary with the operands of a cexpr_t. + | + | opname + | + | ptrsize + | + | refwidth + | + | string + | + | type + | cexpr_t_type_get(self) -> tinfo_t + | + | v + | + | x + | + | y + | + | z + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from cexpr_t: + | + | op_to_typename = {0: 'empty', 1: 'comma', 2: 'asg', 3: 'asgbor', 4: 'a... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) + | _set_op(self, v) + | + | contains_expr(self, *args) + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class carglist_t in module ida_hexrays: + +class carglist_t(qvector_carg_t) + | Proxy of C++ carglist_t class. + | + | Method resolution order: + | carglist_t + | qvector_carg_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> carglist_t + | __init__(self, ftype, fl=0) -> carglist_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | carglist_t_flags_get(self) -> int + | + | functype + | carglist_t_functype_get(self) -> tinfo_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_carglist_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_carg_t: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> carg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> carg_t + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> carg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> carg_t + | begin(self) -> carg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> carg_t + | end(self) -> carg_t + | + | erase(self, *args) + | erase(self, it) -> carg_t + | erase(self, first, last) -> carg_t + | + | extract(self, *args) + | extract(self) -> carg_t + | + | find(self, *args) + | find(self, x) -> carg_t + | find(self, x) -> carg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=carg_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> carg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> carg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_carg_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class casm_t in module ida_hexrays: + +class casm_t(ida_pro.eavec_t)↗ + | Proxy of C++ casm_t class. + | + | Method resolution order: + | casm_t + | ida_pro.eavec_t↗ + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, ea) -> casm_t + | __init__(self, r) -> casm_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | one_insn(self, *args) + | one_insn(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_casm_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_pro.eavec_t:↗ + | + | __getitem__(self, *args) + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> unsigned-ea-like-numeric-type &↗ + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | begin(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | end(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | erase(self, *args) + | erase(self, it) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | erase(self, first, last) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | + | extract(self, *args) + | extract(self) -> unsigned-ea-like-numeric-type *↗ + | + | find(self, *args) + | find(self, x) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | find(self, x) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> unsigned-ea-like-numeric-type &↗ + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_pro.eavec_t:↗ + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function cblock_at in module ida_hexrays: + +cblock_at(self, index) + # cblock.at(int) -> returns the item at the given index index + +Help on function cblock_find in module ida_hexrays: + +cblock_find(self, item) + # cblock.find(cinsn_t) -> returns the iterator positioned at the given item + +Help on function cblock_index in module ida_hexrays: + +cblock_index(self, item) + # cblock.index(cinsn_t) -> returns the index of the given item + +Help on function cblock_insert in module ida_hexrays: + +cblock_insert(self, index, item) + # cblock.insert(index, cinsn_t) + +Help on function cblock_iter in module ida_hexrays: + +cblock_iter(self) + +Help on function cblock_remove in module ida_hexrays: + +cblock_remove(self, item) + # cblock.remove(cinsn_t) + +Help on class cblock_t in module ida_hexrays: + +class cblock_t(qlist_cinsn_t) + | Proxy of C++ cblock_t class. + | + | Method resolution order: + | cblock_t + | qlist_cinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cblock_t + | + | __iter__ = cblock_iter(self) + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _deregister(self, *args) + | _deregister(self) + | + | at = cblock_at(self, index) + | # cblock.at(int) -> returns the item at the given index index + | + | compare(self, *args) + | compare(self, r) -> int + | + | find = cblock_find(self, item) + | # cblock.find(cinsn_t) -> returns the iterator positioned at the given item + | + | index = cblock_index(self, item) + | # cblock.index(cinsn_t) -> returns the index of the given item + | + | insert = cblock_insert(self, index, item) + | # cblock.insert(index, cinsn_t) + | + | remove = cblock_remove(self, item) + | # cblock.remove(cinsn_t) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cblock_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from qlist_cinsn_t: + | + | back(self, *args) + | back(self) -> cinsn_t + | back(self) -> cinsn_t + | + | begin(self, *args) + | begin(self) -> qlist_cinsn_t_iterator + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qlist_cinsn_t_iterator + | + | erase(self, *args) + | erase(self, p) -> qlist< cinsn_t >::iterator + | erase(self, p1, p2) + | erase(self, p) + | + | front(self, *args) + | front(self) -> cinsn_t + | front(self) -> cinsn_t + | + | pop_back(self, *args) + | pop_back(self) + | + | pop_front(self, *args) + | pop_front(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> cinsn_t + | + | push_front(self, *args) + | push_front(self, x) + | + | rbegin(self, *args) + | rbegin(self) -> qlist< cinsn_t >::reverse_iterator + | rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | rend(self, *args) + | rend(self) -> qlist< cinsn_t >::reverse_iterator + | rend(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, x) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qlist_cinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class ccase_t in module ida_hexrays: + +class ccase_t(cinsn_t) + | Proxy of C++ ccase_t class. + | + | Method resolution order: + | ccase_t + | cinsn_t + | citem_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ccase_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | size(self, *args) + | size(self) -> size_t + | + | value(self, *args) + | value(self, i) -> uint64 const & + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | values + | ccase_t_values_get(self) -> ulonglongvec_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ccase_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from cinsn_t: + | + | _deregister(self, *args) + | _deregister(self) + | + | _get_casm(self, *args) + | _get_casm(self) -> casm_t + | + | _get_cblock(self, *args) + | _get_cblock(self) -> cblock_t + | + | _get_cdo(self, *args) + | _get_cdo(self) -> cdo_t + | + | _get_cexpr(self, *args) + | _get_cexpr(self) -> cexpr_t + | + | _get_cfor(self, *args) + | _get_cfor(self) -> cfor_t + | + | _get_cgoto(self, *args) + | _get_cgoto(self) -> cgoto_t + | + | _get_cif(self, *args) + | _get_cif(self) -> cif_t + | + | _get_creturn(self, *args) + | _get_creturn(self) -> creturn_t + | + | _get_cswitch(self, *args) + | _get_cswitch(self) -> cswitch_t + | + | _get_cwhile(self, *args) + | _get_cwhile(self) -> cwhile_t + | + | _print(self, *args) + | _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) + | + | _register(self, *args) + | _register(self) + | + | _replace_by(self, *args) + | _replace_by(self, r) + | + | _set_casm(self, *args) + | _set_casm(self, _v) + | + | _set_cblock(self, *args) + | _set_cblock(self, _v) + | + | _set_cdo(self, *args) + | _set_cdo(self, _v) + | + | _set_cexpr(self, *args) + | _set_cexpr(self, _v) + | + | _set_cfor(self, *args) + | _set_cfor(self, _v) + | + | _set_cgoto(self, *args) + | _set_cgoto(self, _v) + | + | _set_cif(self, *args) + | _set_cif(self, _v) + | + | _set_creturn(self, *args) + | _set_creturn(self, _v) + | + | _set_cswitch(self, *args) + | _set_cswitch(self, _v) + | + | _set_cwhile(self, *args) + | _set_cwhile(self, _v) + | + | assign(self, *args) + | assign(self, r) -> cinsn_t + | + | cleanup(self, *args) + | cleanup(self) + | + | collect_free_breaks(self, *args) + | collect_free_breaks(self, breaks) -> bool + | + | collect_free_continues(self, *args) + | collect_free_continues(self, continues) -> bool + | + | contains_free_break(self, *args) + | contains_free_break(self) -> bool + | + | contains_free_continue(self, *args) + | contains_free_continue(self) -> bool + | + | contains_insn(self, *args) + | contains_insn(self, type, times=1) -> bool + | + | create_if(self, *args) + | create_if(self, cnd) -> cif_t + | + | is_epilog(self) + | + | is_ordinary_flow(self, *args) + | is_ordinary_flow(self) -> bool + | + | new_insn(self, *args) + | new_insn(self, insn_ea) -> cinsn_t + | + | print1(self, *args) + | print1(self, func) + | + | swap(self, *args) + | swap(self, r) + | + | zero(self, *args) + | zero(self) + | + | ---------------------------------------------------------------------- + | Static methods inherited from cinsn_t: + | + | insn_is_epilog(*args) + | insn_is_epilog(insn) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cinsn_t: + | + | casm + | + | cblock + | + | cdo + | + | cexpr + | + | cfor + | + | cgoto + | + | cif + | + | creturn + | + | cswitch + | + | cwhile + | + | details + | return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + | + | opname + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from cinsn_t: + | + | op_to_typename = {70: 'empty', 71: 'block', 72: 'expr', 73: 'if', 74: ... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) + | _set_op(self, v) + | + | contains_expr(self, *args) + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class ccases_t in module ida_hexrays: + +class ccases_t(qvector_ccase_t) + | Proxy of C++ ccases_t class. + | + | Method resolution order: + | ccases_t + | qvector_ccase_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ccases_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ccases_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_ccase_t: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> ccase_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ccase_t + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> ccase_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> ccase_t + | begin(self) -> ccase_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ccase_t + | end(self) -> ccase_t + | + | erase(self, *args) + | erase(self, it) -> ccase_t + | erase(self, first, last) -> ccase_t + | + | extract(self, *args) + | extract(self) -> ccase_t + | + | find(self, *args) + | find(self, x) -> ccase_t + | find(self, x) -> ccase_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=ccase_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> ccase_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ccase_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_ccase_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class cdg_insn_iterator_t in module ida_hexrays: + +class cdg_insn_iterator_t(__builtin__.object) + | Proxy of C++ cdg_insn_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cdg_insn_iterator_t + | __init__(self, r) -> cdg_insn_iterator_t + | + | __repr__ = _swig_repr(self) + | + | dslot_with_xrefs(self, *args) + | dslot_with_xrefs(self) -> bool + | + | has_dslot(self, *args) + | has_dslot(self) -> bool + | + | next(self, *args) + | next(self, ins) -> merror_t + | + | ok(self, *args) + | ok(self) -> bool + | + | start(self, *args) + | start(self, rng) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dslot + | cdg_insn_iterator_t_dslot_get(self) -> ea_t + | + | dslot_insn + | cdg_insn_iterator_t_dslot_insn_get(self) -> insn_t * + | + | ea + | cdg_insn_iterator_t_ea_get(self) -> ea_t + | + | end + | cdg_insn_iterator_t_end_get(self) -> ea_t + | + | is_likely_dslot + | cdg_insn_iterator_t_is_likely_dslot_get(self) -> bool + | + | is_separate_dslot + | cdg_insn_iterator_t_is_separate_dslot_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cdg_insn_iterator_t(self) + +Help on class cdo_t in module ida_hexrays: + +class cdo_t(cloop_t) + | Proxy of C++ cdo_t class. + | + | Method resolution order: + | cdo_t + | cloop_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cdo_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cdo_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class ceinsn_t in module ida_hexrays: + +class ceinsn_t(__builtin__.object) + | Proxy of C++ ceinsn_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ceinsn_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ceinsn_t(self) + +Help on function cexpr_operands in module ida_hexrays: + +cexpr_operands(self) + return a dictionary with the operands of a cexpr_t. + +Help on class cexpr_t in module ida_hexrays: + +class cexpr_t(citem_t) + | Proxy of C++ cexpr_t class. + | + | Method resolution order: + | cexpr_t + | citem_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cexpr_t + | __init__(self, cop, _x) -> cexpr_t + | __init__(self, cop, _x, _y) -> cexpr_t + | __init__(self, cop, _x, _y, _z) -> cexpr_t + | __init__(self, r) -> cexpr_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _deregister(self, *args) + | _deregister(self) + | + | _get_a(self, *args) + | _get_a(self) -> carglist_t + | + | _get_fpc(self, *args) + | _get_fpc(self) -> fnumber_t + | + | _get_helper(self, *args) + | _get_helper(self) -> char * + | + | _get_insn(self, *args) + | _get_insn(self) -> cinsn_t + | + | _get_m(self, *args) + | _get_m(self) -> int + | + | _get_n(self, *args) + | _get_n(self) -> cnumber_t + | + | _get_obj_ea(self, *args) + | _get_obj_ea(self) -> ea_t + | + | _get_ptrsize(self, *args) + | _get_ptrsize(self) -> int + | + | _get_refwidth(self, *args) + | _get_refwidth(self) -> int + | + | _get_string(self, *args) + | _get_string(self) -> char * + | + | _get_x(self, *args) + | _get_x(self) -> cexpr_t + | + | _get_y(self, *args) + | _get_y(self) -> cexpr_t + | + | _get_z(self, *args) + | _get_z(self) -> cexpr_t + | + | _register(self, *args) + | _register(self) + | + | _replace_by(self, *args) + | _replace_by(self, r) + | + | _set_a(self, *args) + | _set_a(self, _v) + | + | _set_fpc(self, *args) + | _set_fpc(self, _v) + | + | _set_helper(self, *args) + | _set_helper(self, _v) + | + | _set_insn(self, *args) + | _set_insn(self, _v) + | + | _set_m(self, *args) + | _set_m(self, _v) + | + | _set_n(self, *args) + | _set_n(self, _v) + | + | _set_obj_ea(self, *args) + | _set_obj_ea(self, _v) + | + | _set_ptrsize(self, *args) + | _set_ptrsize(self, _v) + | + | _set_refwidth(self, *args) + | _set_refwidth(self, _v) + | + | _set_string(self, *args) + | _set_string(self, _v) + | + | _set_x(self, *args) + | _set_x(self, _v) + | + | _set_y(self, *args) + | _set_y(self, _v) + | + | _set_z(self, *args) + | _set_z(self, _v) + | + | assign(self, *args) + | assign(self, r) -> cexpr_t + | + | calc_type(self, *args) + | calc_type(self, recursive) + | + | cleanup(self, *args) + | cleanup(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains_comma(self, *args) + | contains_comma(self, times=1) -> bool + | + | contains_comma_or_insn_or_label(self, *args) + | contains_comma_or_insn_or_label(self, maxcommas=1) -> bool + | + | contains_insn(self, *args) + | contains_insn(self, times=1) -> bool + | + | contains_insn_or_label(self, *args) + | contains_insn_or_label(self) -> bool + | + | contains_operator(self, *args) + | contains_operator(self, needed_op, times=1) -> bool + | + | cpadone(self, *args) + | cpadone(self) -> bool + | + | equal_effect(self, *args) + | equal_effect(self, r) -> bool + | + | find_num_op(self, *args) + | find_num_op(self) -> cexpr_t + | find_num_op(self) -> cexpr_t + | + | find_op(self, *args) + | find_op(self, _op) -> cexpr_t + | find_op(self, _op) -> cexpr_t + | + | get_1num_op(self, *args) + | get_1num_op(self, o1, o2) -> bool + | + | get_const_value(self, *args) + | get_const_value(self) -> bool + | + | get_high_nbit_bound(self, *args) + | get_high_nbit_bound(self) -> bit_bound_t + | + | get_low_nbit_bound(self, *args) + | get_low_nbit_bound(self) -> int + | + | get_ptr_or_array(self, *args) + | get_ptr_or_array(self) -> cexpr_t + | + | get_type_sign(self, *args) + | get_type_sign(self) -> type_sign_t + | + | get_v(self, *args) + | get_v(self) -> var_ref_t + | + | has_side_effects(self, *args) + | has_side_effects(self) -> bool + | + | is_call_arg_of(self, *args) + | is_call_arg_of(self, parent) -> bool + | + | is_call_object_of(self, *args) + | is_call_object_of(self, parent) -> bool + | + | is_child_of(self, *args) + | is_child_of(self, parent) -> bool + | + | is_const_value(self, *args) + | is_const_value(self, _v) -> bool + | + | is_cstr(self, *args) + | is_cstr(self) -> bool + | + | is_fpop(self, *args) + | is_fpop(self) -> bool + | + | is_jumpout(self, *args) + | is_jumpout(self) -> bool + | + | is_negative_const(self, *args) + | is_negative_const(self) -> bool + | + | is_nice_cond(self, *args) + | is_nice_cond(self) -> bool + | + | is_nice_expr(self, *args) + | is_nice_expr(self) -> bool + | + | is_non_negative_const(self, *args) + | is_non_negative_const(self) -> bool + | + | is_non_zero_const(self, *args) + | is_non_zero_const(self) -> bool + | + | is_odd_lvalue(self, *args) + | is_odd_lvalue(self) -> bool + | + | is_type_signed(self, *args) + | is_type_signed(self) -> bool + | + | is_type_unsigned(self, *args) + | is_type_unsigned(self) -> bool + | + | is_undef_val(self, *args) + | is_undef_val(self) -> bool + | + | is_vftable(self, *args) + | is_vftable(self) -> bool + | + | is_zero_const(self, *args) + | is_zero_const(self) -> bool + | + | maybe_ptr(self, *args) + | maybe_ptr(self) -> bool + | + | numval(self, *args) + | numval(self) -> uint64 + | + | print1(self, *args) + | print1(self, func) + | + | put_number(self, *args) + | put_number(self, func, value, nbytes, sign=no_sign) + | + | requires_lvalue(self, *args) + | requires_lvalue(self, child) -> bool + | + | set_cpadone(self, *args) + | set_cpadone(self) + | + | set_v(self, *args) + | set_v(self, v) + | + | set_vftable(self, *args) + | set_vftable(self) + | + | swap(self, *args) + | swap(self, r) + | + | theother(self, *args) + | theother(self, what) -> cexpr_t + | theother(self, what) -> cexpr_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | a + | + | exflags + | cexpr_t_exflags_get(self) -> uint32 + | + | fpc + | + | helper + | + | insn + | + | m + | + | n + | + | obj_ea + | + | operands + | return a dictionary with the operands of a cexpr_t. + | + | opname + | + | ptrsize + | + | refwidth + | + | string + | + | thisown + | The membership flag + | + | type + | cexpr_t_type_get(self) -> tinfo_t + | + | v + | + | x + | + | y + | + | z + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cexpr_t(self) + | + | op_to_typename = {0: 'empty', 1: 'comma', 2: 'asg', 3: 'asgbor', 4: 'a... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) + | _set_op(self, v) + | + | contains_expr(self, *args) + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class cfor_t in module ida_hexrays: + +class cfor_t(cloop_t) + | Proxy of C++ cfor_t class. + | + | Method resolution order: + | cfor_t + | cloop_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cfor_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | init + | cfor_t_init_get(self) -> cexpr_t + | + | step + | cfor_t_step_get(self) -> cexpr_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cfor_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class cfunc_parentee_t in module ida_hexrays: + +class cfunc_parentee_t(ctree_parentee_t) + | Proxy of C++ cfunc_parentee_t class. + | + | Method resolution order: + | cfunc_parentee_t + | ctree_parentee_t + | ctree_visitor_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, f, post=False) -> cfunc_parentee_t + | + | __repr__ = _swig_repr(self) + | + | calc_rvalue_type(self, *args) + | calc_rvalue_type(self, target, e) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | func + | cfunc_parentee_t_func_get(self) -> cfunc_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cfunc_parentee_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_parentee_t: + | + | recalc_parent_types(self, *args) + | recalc_parent_types(self) -> bool + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_visitor_t: + | + | apply_to(self, *args) + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) + | clr_prune(self) + | + | clr_restart(self, *args) + | clr_restart(self) + | + | is_postorder(self, *args) + | is_postorder(self) -> bool + | + | leave_expr(self, *args) + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) + | maintain_parents(self) -> bool + | + | must_prune(self, *args) + | must_prune(self) -> bool + | + | must_restart(self, *args) + | must_restart(self) -> bool + | + | only_insns(self, *args) + | only_insns(self) -> bool + | + | parent_expr(self, *args) + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) + | prune_now(self) + | + | set_restart(self, *args) + | set_restart(self) + | + | visit_expr(self, *args) + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctree_visitor_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + +Help on class cfunc_t in module ida_hexrays: + +class cfunc_t(__builtin__.object) + | Proxy of C++ cfunc_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) + | __str__(self) -> qstring + | + | build_c_tree(self, *args) + | build_c_tree(self) + | + | del_orphan_cmts(self, *args) + | del_orphan_cmts(self) -> int + | + | find_item_coords(self, *args) + | find_item_coords(self, item, px, py) -> bool + | find_item_coords(self, item) -> PyObject * + | + | find_label(self, *args) + | find_label(self, label) -> citem_t + | + | gather_derefs(self, *args) + | gather_derefs(self, ci, udm=None) -> bool + | + | get_boundaries(self, *args) + | get_boundaries(self) -> boundaries_t + | + | get_eamap(self, *args) + | get_eamap(self) -> eamap_t + | + | get_func_type(self, *args) + | get_func_type(self, type) -> bool + | + | get_line_item(self, *args) + | get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool + | + | get_lvars(self, *args) + | get_lvars(self) -> lvars_t + | + | get_pseudocode(self, *args) + | get_pseudocode(self) -> strvec_t + | + | get_stkoff_delta(self, *args) + | get_stkoff_delta(self) -> sval_t + | + | get_user_cmt(self, *args) + | get_user_cmt(self, loc, rt) -> char const * + | + | get_user_iflags(self, *args) + | get_user_iflags(self, loc) -> int32 + | + | get_user_union_selection(self, *args) + | get_user_union_selection(self, ea, path) -> bool + | + | get_warnings(self, *args) + | get_warnings(self) -> hexwarns_t + | + | has_orphan_cmts(self, *args) + | has_orphan_cmts(self) -> bool + | + | print_dcl(self, *args) + | print_dcl(self) + | + | print_func(self, *args) + | print_func(self, vp) + | + | refresh_func_ctext(self, *args) + | refresh_func_ctext(self) + | + | release(self, *args) + | release(self) + | + | remove_unused_labels(self, *args) + | remove_unused_labels(self) + | + | save_user_cmts(self, *args) + | save_user_cmts(self) + | + | save_user_iflags(self, *args) + | save_user_iflags(self) + | + | save_user_labels(self, *args) + | save_user_labels(self) + | + | save_user_numforms(self, *args) + | save_user_numforms(self) + | + | save_user_unions(self, *args) + | save_user_unions(self) + | + | set_user_cmt(self, *args) + | set_user_cmt(self, loc, cmt) + | + | set_user_iflags(self, *args) + | set_user_iflags(self, loc, iflags) + | + | set_user_union_selection(self, *args) + | set_user_union_selection(self, ea, path) + | + | verify(self, *args) + | verify(self, aul, even_without_debugger) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argidx + | cfunc_t_argidx_get(self) -> intvec_t + | + | arguments + | + | body + | cfunc_t_body_get(self) -> cinsn_t + | + | boundaries + | get_boundaries(self) -> boundaries_t + | + | eamap + | get_eamap(self) -> eamap_t + | + | entry_ea + | cfunc_t_entry_ea_get(self) -> ea_t + | + | hdrlines + | cfunc_t_hdrlines_get(self) -> int + | + | lvars + | get_lvars(self) -> lvars_t + | + | maturity + | cfunc_t_maturity_get(self) -> ctree_maturity_t + | + | mba + | cfunc_t_mba_get(self) -> mbl_array_t + | + | numforms + | cfunc_t_numforms_get(self) -> user_numforms_t + | + | pseudocode + | get_pseudocode(self) -> strvec_t + | + | refcnt + | cfunc_t_refcnt_get(self) -> int + | + | statebits + | cfunc_t_statebits_get(self) -> int + | + | thisown + | The membership flag + | + | treeitems + | cfunc_t_treeitems_get(self) -> ctree_items_t + | + | type + | Get the function's return type tinfo_t object. + | + | user_cmts + | cfunc_t_user_cmts_get(self) -> user_cmts_t + | + | user_iflags + | cfunc_t_user_iflags_get(self) -> user_iflags_t + | + | user_labels + | cfunc_t_user_labels_get(self) -> user_labels_t + | + | user_unions + | cfunc_t_user_unions_get(self) -> user_unions_t + | + | warnings + | get_warnings(self) -> hexwarns_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cfunc_t(self) + +Help on function cfunc_type in module ida_hexrays: + +cfunc_type(self) + Get the function's return type tinfo_t object. + +Help on class cfuncptr_t in module ida_hexrays: + +class cfuncptr_t(__builtin__.object) + | Proxy of C++ qrefcnt_t< cfunc_t > class. + | + | Methods defined here: + | + | __deref__(self, *args) + | __deref__(self) -> cfunc_t + | + | __eq__ lambda self, other + | + | __init__(self, *args) + | __init__(self, p) -> cfuncptr_t + | __init__(self, r) -> cfuncptr_t + | + | __ptrval__(self, *args) + | __ptrval__(self) -> size_t + | + | __ref__(self, *args) + | __ref__(self) -> cfunc_t + | + | __repr__ = _swig_repr(self) + | + | __str__ lambda self + | + | build_c_tree(self, *args) + | build_c_tree(self) + | + | del_orphan_cmts(self, *args) + | del_orphan_cmts(self) -> int + | + | find_item_coords(self, *args) + | find_item_coords(self, item, px, py) -> bool + | find_item_coords(self, item) -> PyObject * + | + | find_label(self, *args) + | find_label(self, label) -> citem_t + | + | gather_derefs(self, *args) + | gather_derefs(self, ci, udm=None) -> bool + | + | get_boundaries(self, *args) + | get_boundaries(self) -> boundaries_t + | + | get_eamap(self, *args) + | get_eamap(self) -> eamap_t + | + | get_func_type(self, *args) + | get_func_type(self, type) -> bool + | + | get_line_item(self, *args) + | get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool + | + | get_lvars(self, *args) + | get_lvars(self) -> lvars_t + | + | get_pseudocode(self, *args) + | get_pseudocode(self) -> strvec_t + | + | get_stkoff_delta(self, *args) + | get_stkoff_delta(self) -> sval_t + | + | get_user_cmt(self, *args) + | get_user_cmt(self, loc, rt) -> char const * + | + | get_user_iflags(self, *args) + | get_user_iflags(self, loc) -> int32 + | + | get_user_union_selection(self, *args) + | get_user_union_selection(self, ea, path) -> bool + | + | get_warnings(self, *args) + | get_warnings(self) -> hexwarns_t + | + | has_orphan_cmts(self, *args) + | has_orphan_cmts(self) -> bool + | + | print_dcl(self, *args) + | print_dcl(self) + | + | print_func(self, *args) + | print_func(self, vp) + | + | refresh_func_ctext(self, *args) + | refresh_func_ctext(self) + | + | release(self, *args) + | release(self) + | + | remove_unused_labels(self, *args) + | remove_unused_labels(self) + | + | reset(self, *args) + | reset(self) + | + | save_user_cmts(self, *args) + | save_user_cmts(self) + | + | save_user_iflags(self, *args) + | save_user_iflags(self) + | + | save_user_labels(self, *args) + | save_user_labels(self) + | + | save_user_numforms(self, *args) + | save_user_numforms(self) + | + | save_user_unions(self, *args) + | save_user_unions(self) + | + | set_user_cmt(self, *args) + | set_user_cmt(self, loc, cmt) + | + | set_user_iflags(self, *args) + | set_user_iflags(self, loc, iflags) + | + | set_user_union_selection(self, *args) + | set_user_union_selection(self, ea, path) + | + | verify(self, *args) + | verify(self, aul, even_without_debugger) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argidx + | cfuncptr_t_argidx_get(self) -> intvec_t + | + | arguments + | + | body + | cfuncptr_t_body_get(self) -> cinsn_t + | + | boundaries + | + | eamap + | + | entry_ea + | cfuncptr_t_entry_ea_get(self) -> ea_t + | + | hdrlines + | cfuncptr_t_hdrlines_get(self) -> int + | + | lvars + | + | maturity + | cfuncptr_t_maturity_get(self) -> ctree_maturity_t + | + | mba + | cfuncptr_t_mba_get(self) -> mbl_array_t + | + | numforms + | cfuncptr_t_numforms_get(self) -> user_numforms_t + | + | pseudocode + | + | refcnt + | cfuncptr_t_refcnt_get(self) -> int + | + | statebits + | cfuncptr_t_statebits_get(self) -> int + | + | thisown + | The membership flag + | + | treeitems + | cfuncptr_t_treeitems_get(self) -> ctree_items_t + | + | type + | + | user_cmts + | cfuncptr_t_user_cmts_get(self) -> user_cmts_t + | + | user_iflags + | cfuncptr_t_user_iflags_get(self) -> user_iflags_t + | + | user_labels + | cfuncptr_t_user_labels_get(self) -> user_labels_t + | + | user_unions + | cfuncptr_t_user_unions_get(self) -> user_unions_t + | + | warnings + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cfuncptr_t(self) + +Help on class cgoto_t in module ida_hexrays: + +class cgoto_t(__builtin__.object) + | Proxy of C++ cgoto_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cgoto_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | label_num + | cgoto_t_label_num_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cgoto_t(self) + +Help on class chain_keeper_t in module ida_hexrays: + +class chain_keeper_t(__builtin__.object) + | Proxy of C++ chain_keeper_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _gc) -> chain_keeper_t + | + | __repr__ = _swig_repr(self) + | + | back(self, *args) + | back(self) -> block_chains_t + | + | for_all_chains(self, *args) + | for_all_chains(self, cv, gca) -> int + | + | front(self, *args) + | front(self) -> block_chains_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_chain_keeper_t(self) + +Help on class chain_t in module ida_hexrays: + +class chain_t(ida_pro.intvec_t) + | Proxy of C++ chain_t class. + | + | Method resolution order: + | chain_t + | ida_pro.intvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> chain_t + | __init__(self, t, off, w=1, v=-1) -> chain_t + | __init__(self, _k, w=1) -> chain_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | append_list(self, *args) + | append_list(self, list) + | + | clear_varnum(self, *args) + | clear_varnum(self) + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | endoff(self, *args) + | endoff(self) -> voff_t + | + | get_reg(self, *args) + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) + | get_stkoff(self) -> sval_t + | + | includes(self, *args) + | includes(self, r) -> bool + | + | is_fake(self, *args) + | is_fake(self) -> bool + | + | is_inited(self, *args) + | is_inited(self) -> bool + | + | is_overlapped(self, *args) + | is_overlapped(self) -> bool + | + | is_passreg(self, *args) + | is_passreg(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_replaced(self, *args) + | is_replaced(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | is_term(self, *args) + | is_term(self) -> bool + | + | key(self, *args) + | key(self) -> voff_t + | + | overlap(self, *args) + | overlap(self, r) -> bool + | + | set_inited(self, *args) + | set_inited(self, b) + | + | set_overlapped(self, *args) + | set_overlapped(self, b) + | + | set_replaced(self, *args) + | set_replaced(self, b) + | + | set_term(self, *args) + | set_term(self, b) + | + | set_value(self, *args) + | set_value(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | chain_t_flags_get(self) -> uchar + | + | thisown + | The membership flag + | + | varnum + | chain_t_varnum_get(self) -> int + | + | width + | chain_t_width_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_chain_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_pro.intvec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> int const & + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> int & + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> int const & + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< int >::iterator + | begin(self) -> qvector< int >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< int >::iterator + | end(self) -> qvector< int >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< int >::iterator + | erase(self, first, last) -> qvector< int >::iterator + | + | extract(self, *args) + | extract(self) -> int * + | + | find(self, *args) + | find(self, x) -> qvector< int >::iterator + | find(self, x) -> qvector< int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< int >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> int & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_pro.intvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class chain_visitor_t in module ida_hexrays: + +class chain_visitor_t(__builtin__.object) + | Proxy of C++ chain_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> chain_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_chain(self, *args) + | visit_chain(self, nblock, ch) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | parent + | chain_visitor_t_parent_get(self) -> block_chains_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_chain_visitor_t(self) + +Help on function checkout_hexrays_license in module ida_hexrays: + +checkout_hexrays_license(*args) + checkout_hexrays_license(silent) -> bool + + + Check out a floating decompiler license. This function will display a + dialog box if the license is not available. For non-floating licenses + this function is effectively no-op. It is not necessary to call this + function before decompiling. If the license was not checked out, the + decompiler will automatically do it. This function can be used to + check out a license in advance and ensure that a license is available. + + @param silent: silently fail if the license can not be checked out. + (C++: bool) + @return: false if failed + +Help on class cif_t in module ida_hexrays: + +class cif_t(ceinsn_t) + | Proxy of C++ cif_t class. + | + | Method resolution order: + | cif_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cif_t + | __init__(self, r) -> cif_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, r) -> cif_t + | + | cleanup(self, *args) + | cleanup(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ielse + | cif_t_ielse_get(self) -> cinsn_t + | + | ithen + | cif_t_ithen_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cif_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function cinsn_details in module ida_hexrays: + +cinsn_details(self) + return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + +Help on class cinsn_t in module ida_hexrays: + +class cinsn_t(citem_t) + | Proxy of C++ cinsn_t class. + | + | Method resolution order: + | cinsn_t + | citem_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cinsn_t + | __init__(self, r) -> cinsn_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _deregister(self, *args) + | _deregister(self) + | + | _get_casm(self, *args) + | _get_casm(self) -> casm_t + | + | _get_cblock(self, *args) + | _get_cblock(self) -> cblock_t + | + | _get_cdo(self, *args) + | _get_cdo(self) -> cdo_t + | + | _get_cexpr(self, *args) + | _get_cexpr(self) -> cexpr_t + | + | _get_cfor(self, *args) + | _get_cfor(self) -> cfor_t + | + | _get_cgoto(self, *args) + | _get_cgoto(self) -> cgoto_t + | + | _get_cif(self, *args) + | _get_cif(self) -> cif_t + | + | _get_creturn(self, *args) + | _get_creturn(self) -> creturn_t + | + | _get_cswitch(self, *args) + | _get_cswitch(self) -> cswitch_t + | + | _get_cwhile(self, *args) + | _get_cwhile(self) -> cwhile_t + | + | _print(self, *args) + | _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) + | + | _register(self, *args) + | _register(self) + | + | _replace_by(self, *args) + | _replace_by(self, r) + | + | _set_casm(self, *args) + | _set_casm(self, _v) + | + | _set_cblock(self, *args) + | _set_cblock(self, _v) + | + | _set_cdo(self, *args) + | _set_cdo(self, _v) + | + | _set_cexpr(self, *args) + | _set_cexpr(self, _v) + | + | _set_cfor(self, *args) + | _set_cfor(self, _v) + | + | _set_cgoto(self, *args) + | _set_cgoto(self, _v) + | + | _set_cif(self, *args) + | _set_cif(self, _v) + | + | _set_creturn(self, *args) + | _set_creturn(self, _v) + | + | _set_cswitch(self, *args) + | _set_cswitch(self, _v) + | + | _set_cwhile(self, *args) + | _set_cwhile(self, _v) + | + | assign(self, *args) + | assign(self, r) -> cinsn_t + | + | cleanup(self, *args) + | cleanup(self) + | + | collect_free_breaks(self, *args) + | collect_free_breaks(self, breaks) -> bool + | + | collect_free_continues(self, *args) + | collect_free_continues(self, continues) -> bool + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains_free_break(self, *args) + | contains_free_break(self) -> bool + | + | contains_free_continue(self, *args) + | contains_free_continue(self) -> bool + | + | contains_insn(self, *args) + | contains_insn(self, type, times=1) -> bool + | + | create_if(self, *args) + | create_if(self, cnd) -> cif_t + | + | is_epilog(self) + | + | is_ordinary_flow(self, *args) + | is_ordinary_flow(self) -> bool + | + | new_insn(self, *args) + | new_insn(self, insn_ea) -> cinsn_t + | + | print1(self, *args) + | print1(self, func) + | + | swap(self, *args) + | swap(self, r) + | + | zero(self, *args) + | zero(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | insn_is_epilog(*args) + | insn_is_epilog(insn) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | casm + | + | cblock + | + | cdo + | + | cexpr + | + | cfor + | + | cgoto + | + | cif + | + | creturn + | + | cswitch + | + | cwhile + | + | details + | return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + | + | opname + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cinsn_t(self) + | + | op_to_typename = {70: 'empty', 71: 'block', 72: 'expr', 73: 'if', 74: ... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) + | _set_op(self, v) + | + | contains_expr(self, *args) + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on function cinsn_t_insn_is_epilog in module ida_hexrays: + +cinsn_t_insn_is_epilog(*args) + cinsn_t_insn_is_epilog(insn) -> bool + +Help on class cinsnptrvec_t in module ida_hexrays: + +class cinsnptrvec_t(__builtin__.object) + | Proxy of C++ qvector< cinsn_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> cinsn_t + | + | __init__(self, *args) + | __init__(self) -> cinsnptrvec_t + | __init__(self, x) -> cinsnptrvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< cinsn_t * >::iterator + | begin(self) -> qvector< cinsn_t * >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< cinsn_t * >::iterator + | end(self) -> qvector< cinsn_t * >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< cinsn_t * >::iterator + | erase(self, first, last) -> qvector< cinsn_t * >::iterator + | + | extract(self, *args) + | extract(self) -> cinsn_t ** + | + | find(self, *args) + | find(self, x) -> qvector< cinsn_t * >::iterator + | find(self, x) -> qvector< cinsn_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< cinsn_t * >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> cinsn_t *& + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cinsnptrvec_t(self) + +Help on class citem_cmt_t in module ida_hexrays: + +class citem_cmt_t(__builtin__.object) + | Proxy of C++ citem_cmt_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> citem_cmt_t + | __init__(self, s) -> citem_cmt_t + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) + | __str__(self) -> char const * + | + | c_str(self, *args) + | c_str(self) -> char const * + | + | ---------------------------------------------------------------------- + | 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 + | + | used + | citem_cmt_t_used_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_citem_cmt_t(self) + +Help on class citem_locator_t in module ida_hexrays: + +class citem_locator_t(__builtin__.object) + | Proxy of C++ citem_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _ea, _op) -> citem_locator_t + | __init__(self, i) -> citem_locator_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | citem_locator_t_ea_get(self) -> ea_t + | + | op + | citem_locator_t_op_get(self) -> ctype_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_citem_locator_t(self) + +Help on class citem_t in module ida_hexrays: + +class citem_t(__builtin__.object) + | Proxy of C++ citem_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> citem_t + | __init__(self, o) -> citem_t + | + | __repr__ = _swig_repr(self) + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) + | _set_op(self, v) + | + | contains_expr(self, *args) + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) + | is_expr(self) -> bool + | + | print1(self, *args) + | print1(self, func) + | + | replace_by(self, o) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | thisown + | The membership flag + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_citem_t(self) + +Help on function citem_to_specific_type in module ida_hexrays: + +citem_to_specific_type(self) + cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on function clear_cached_cfuncs in module ida_hexrays: + +clear_cached_cfuncs(*args) + clear_cached_cfuncs() + + + Flush all cached decompilation results. + +Help on class cloop_t in module ida_hexrays: + +class cloop_t(ceinsn_t) + | Proxy of C++ cloop_t class. + | + | Method resolution order: + | cloop_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cloop_t + | __init__(self, b) -> cloop_t + | __init__(self, r) -> cloop_t + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cloop_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function close_pseudocode in module ida_hexrays: + +close_pseudocode(*args) + close_pseudocode(f) -> bool + + + Close pseudocode window. + + @param f: pointer to window (C++: TWidget *) + @return: false if failed + +Help on class cnumber_t in module ida_hexrays: + +class cnumber_t(__builtin__.object) + | Proxy of C++ cnumber_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _opnum=0) -> cnumber_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, type, parent=None, nice_stroff=None) + | + | assign(self, *args) + | assign(self, v, nbytes, sign) + | + | compare(self, *args) + | compare(self, r) -> int + | + | value(self, *args) + | value(self, type) -> uint64 + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _value + | cnumber_t__value_get(self) -> uint64 + | + | nf + | cnumber_t_nf_get(self) -> number_format_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cnumber_t(self) + +Help on class codegen_t in module ida_hexrays: + +class codegen_t(__builtin__.object) + | Proxy of C++ codegen_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, m) -> codegen_t + | + | __repr__ = _swig_repr(self) + | + | analyze_prolog(self, *args) + | analyze_prolog(self, fc, reachable) -> merror_t + | + | emit(self, *args) + | emit(self, code, width, l, r, d, offsize) -> minsn_t + | emit(self, code, l, r, d) -> minsn_t + | + | emit_micro_mvm(self, *args) + | emit_micro_mvm(self, code, dtype, l, r, d, offsize) -> minsn_t + | + | gen_micro(self, *args) + | gen_micro(self) -> merror_t + | + | load_operand(self, *args) + | load_operand(self, opnum) -> mreg_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ignore_micro + | codegen_t_ignore_micro_get(self) -> char + | + | ii + | codegen_t_ii_get(self) -> cdg_insn_iterator_t + | + | insn + | codegen_t_insn_get(self) -> insn_t * + | + | mb + | codegen_t_mb_get(self) -> mblock_t + | + | mba + | codegen_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_codegen_t(self) + +Help on function convert_to_user_call in module ida_hexrays: + +convert_to_user_call(*args) + convert_to_user_call(udc, cdg) -> merror_t + + + try to generate user-defined call for an instruction + + @param udc (C++: const udcall_t &) + @param cdg (C++: codegen_t &) + @return: Microcode error codes code: MERR_OK - user-defined call + generated else - error (MERR_INSN == inacceptable udc.tif) + +Help on function create_field_name in module ida_hexrays: + +create_field_name(*args) + create_field_name(type, offset=BADADDR) -> qstring + +Help on function create_helper in module ida_hexrays: + +create_helper(*args) + +Help on function create_typedef in module ida_hexrays: + +create_typedef(*args) + create_typedef(name) -> tinfo_t + create_typedef(n) -> tinfo_t + + + Create a reference to a named type. + + @param name: type name (C++: const char *) + @return: type which refers to the specified name. For example, if name + is "DWORD", the type info which refers to "DWORD" is created. + +Help on class creturn_t in module ida_hexrays: + +class creturn_t(ceinsn_t) + | Proxy of C++ creturn_t class. + | + | Method resolution order: + | creturn_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> creturn_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_creturn_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class cswitch_t in module ida_hexrays: + +class cswitch_t(ceinsn_t) + | Proxy of C++ cswitch_t class. + | + | Method resolution order: + | cswitch_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cswitch_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cases + | cswitch_t_cases_get(self) -> ccases_t + | + | mvnf + | cswitch_t_mvnf_get(self) -> cnumber_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cswitch_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class ctext_position_t in module ida_hexrays: + +class ctext_position_t(__builtin__.object) + | Proxy of C++ ctext_position_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _lnnum=-1, _x=0, _y=0) -> ctext_position_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | in_ctree(self, *args) + | in_ctree(self, hdrlines) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | ctext_position_t_lnnum_get(self) -> int + | + | thisown + | The membership flag + | + | x + | ctext_position_t_x_get(self) -> int + | + | y + | ctext_position_t_y_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctext_position_t(self) + +Help on class ctree_anchor_t in module ida_hexrays: + +class ctree_anchor_t(__builtin__.object) + | Proxy of C++ ctree_anchor_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ctree_anchor_t + | + | __repr__ = _swig_repr(self) + | + | get_index(self, *args) + | get_index(self) -> int + | + | get_itp(self, *args) + | get_itp(self) -> item_preciser_t + | + | is_blkcmt_anchor(self, *args) + | is_blkcmt_anchor(self) -> bool + | + | is_citem_anchor(self, *args) + | is_citem_anchor(self) -> bool + | + | is_itp_anchor(self, *args) + | is_itp_anchor(self) -> bool + | + | is_lvar_anchor(self, *args) + | is_lvar_anchor(self) -> bool + | + | is_valid_anchor(self, *args) + | is_valid_anchor(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | value + | ctree_anchor_t_value_get(self) -> uval_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctree_anchor_t(self) + +Help on class ctree_item_t in module ida_hexrays: + +class ctree_item_t(__builtin__.object) + | Proxy of C++ ctree_item_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ctree_item_t + | + | __repr__ = _swig_repr(self) + | + | _get_e(self, *args) + | _get_e(self) -> cexpr_t + | + | _get_f(self, *args) + | _get_f(self) -> cfunc_t + | + | _get_i(self, *args) + | _get_i(self) -> cinsn_t + | + | _get_it(self, *args) + | _get_it(self) -> citem_t + | + | _get_l(self, *args) + | _get_l(self) -> lvar_t + | + | get_ea(self, *args) + | get_ea(self) -> ea_t + | + | get_label_num(self, *args) + | get_label_num(self, gln_flags) -> int + | + | get_lvar(self, *args) + | get_lvar(self) -> lvar_t + | + | get_memptr(self, *args) + | get_memptr(self, p_sptr=None) -> member_t * + | + | is_citem(self, *args) + | is_citem(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | citype + | ctree_item_t_citype_get(self) -> cursor_item_type_t + | + | e + | + | f + | + | i + | + | it + | + | l + | + | loc + | ctree_item_t_loc_get(self) -> treeloc_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctree_item_t(self) + +Help on class ctree_items_t in module ida_hexrays: + +class ctree_items_t(__builtin__.object) + | Proxy of C++ qvector< citem_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> citem_t + | + | __init__(self, *args) + | __init__(self) -> ctree_items_t + | __init__(self, x) -> ctree_items_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< citem_t * >::iterator + | begin(self) -> qvector< citem_t * >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< citem_t * >::iterator + | end(self) -> qvector< citem_t * >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< citem_t * >::iterator + | erase(self, first, last) -> qvector< citem_t * >::iterator + | + | extract(self, *args) + | extract(self) -> citem_t ** + | + | find(self, *args) + | find(self, x) -> qvector< citem_t * >::iterator + | find(self, x) -> qvector< citem_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< citem_t * >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> citem_t *& + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctree_items_t(self) + +Help on class ctree_parentee_t in module ida_hexrays: + +class ctree_parentee_t(ctree_visitor_t) + | Proxy of C++ ctree_parentee_t class. + | + | Method resolution order: + | ctree_parentee_t + | ctree_visitor_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, post=False) -> ctree_parentee_t + | + | __repr__ = _swig_repr(self) + | + | recalc_parent_types(self, *args) + | recalc_parent_types(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctree_parentee_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_visitor_t: + | + | apply_to(self, *args) + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) + | clr_prune(self) + | + | clr_restart(self, *args) + | clr_restart(self) + | + | is_postorder(self, *args) + | is_postorder(self) -> bool + | + | leave_expr(self, *args) + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) + | maintain_parents(self) -> bool + | + | must_prune(self, *args) + | must_prune(self) -> bool + | + | must_restart(self, *args) + | must_restart(self) -> bool + | + | only_insns(self, *args) + | only_insns(self) -> bool + | + | parent_expr(self, *args) + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) + | prune_now(self) + | + | set_restart(self, *args) + | set_restart(self) + | + | visit_expr(self, *args) + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctree_visitor_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + +Help on class ctree_visitor_t in module ida_hexrays: + +class ctree_visitor_t(__builtin__.object) + | Proxy of C++ ctree_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags) -> ctree_visitor_t + | + | __repr__ = _swig_repr(self) + | + | apply_to(self, *args) + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) + | clr_prune(self) + | + | clr_restart(self, *args) + | clr_restart(self) + | + | is_postorder(self, *args) + | is_postorder(self) -> bool + | + | leave_expr(self, *args) + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) + | maintain_parents(self) -> bool + | + | must_prune(self, *args) + | must_prune(self) -> bool + | + | must_restart(self, *args) + | must_restart(self) -> bool + | + | only_insns(self, *args) + | only_insns(self) -> bool + | + | parent_expr(self, *args) + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) + | prune_now(self) + | + | set_restart(self, *args) + | set_restart(self) + | + | visit_expr(self, *args) + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ctree_visitor_t(self) + +Help on class cwhile_t in module ida_hexrays: + +class cwhile_t(cloop_t) + | Proxy of C++ cwhile_t class. + | + | Method resolution order: + | cwhile_t + | cloop_t + | ceinsn_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cwhile_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cwhile_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function debug_hexrays_ctree in module ida_hexrays: + +debug_hexrays_ctree(*args) + debug_hexrays_ctree(msg) + +Help on function decompile in module ida_hexrays: + +decompile(ea, hf=None, flags=0) + # --------------------------------------------------------------------- + +Help on function decompile_func in module ida_hexrays: + +decompile_func(*args) + decompile_func(pfn, hf, flags=0) -> cfuncptr_t + + + Decompile a function. Multiple decompilations of the same function + return the same object. + + @param pfn: pointer to function to decompile (C++: func_t *) + @param hf: extended error information (if failed) (C++: + hexrays_failure_t *) + @param flags: bitwise combination of decompile() flags ... bits (C++: + int) + @return: pointer to the decompilation result (a reference counted + pointer). NULL if failed. + +Help on function decompile_many in module ida_hexrays: + +decompile_many(*args) + decompile_many(outfile, funcaddrs, flags) -> bool + + + Batch decompilation. Decompile all or the specified functions + + @param outfile: name of the output file (C++: const char *) + @param funcaddrs: list of functions to decompile. If NULL or empty, + then decompile all nonlib functions (C++: const + eavec_t *) + @param flags: Batch decompilation bits (C++: int) + @return: true if no internal error occurred and the user has not + cancelled decompilation + +Help on function dereference in module ida_hexrays: + +dereference(e, ptrsize, is_float=False) + +Help on function dstr in module ida_hexrays: + +dstr(*args) + dstr(tif) -> char const * + + + Print the specified type info. This function can be used from a + debugger by typing "tif->dstr()" + + @param tif (C++: const tinfo_t *) + +Help on function dummy_ptrtype in module ida_hexrays: + +dummy_ptrtype(*args) + dummy_ptrtype(ptrsize, isfp) -> tinfo_t + + + Generate a dummy pointer type + + @param ptrsize: size of pointed object (C++: int) + @param isfp: is floating point object? (C++: bool) + +Help on function eamap_begin in module ida_hexrays: + +eamap_begin(*args) + eamap_begin(map) -> eamap_iterator_t + + + Get iterator pointing to the beginning of eamap_t. + + + @param map (C++: const eamap_t *) + +Help on function eamap_clear in module ida_hexrays: + +eamap_clear(*args) + eamap_clear(map) + + + Clear eamap_t. + + + @param map (C++: eamap_t *) + +Help on function eamap_end in module ida_hexrays: + +eamap_end(*args) + eamap_end(map) -> eamap_iterator_t + + + Get iterator pointing to the end of eamap_t. + + + @param map (C++: const eamap_t *) + +Help on function eamap_erase in module ida_hexrays: + +eamap_erase(*args) + eamap_erase(map, p) + + + Erase current element from eamap_t. + + + @param map (C++: eamap_t *) + @param p (C++: eamap_iterator_t) + +Help on function eamap_find in module ida_hexrays: + +eamap_find(*args) + eamap_find(map, key) -> eamap_iterator_t + + + Find the specified key in eamap_t. + + + @param map (C++: const eamap_t *) + @param key (C++: const ea_t &) + +Help on function eamap_first in module ida_hexrays: + +eamap_first(*args) + eamap_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_free in module ida_hexrays: + +eamap_free(*args) + eamap_free(map) + + + Delete eamap_t instance. + + + @param map (C++: eamap_t *) + +Help on function eamap_insert in module ida_hexrays: + +eamap_insert(*args) + eamap_insert(map, key, val) -> eamap_iterator_t + + + Insert new (ea_t, cinsnptrvec_t) pair into eamap_t. + + + @param map (C++: eamap_t *) + @param key (C++: const ea_t &) + @param val (C++: const cinsnptrvec_t &) + +Help on class eamap_iterator_t in module ida_hexrays: + +class eamap_iterator_t(__builtin__.object) + | Proxy of C++ eamap_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> eamap_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | eamap_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_eamap_iterator_t(self) + +Help on function eamap_new in module ida_hexrays: + +eamap_new(*args) + eamap_new() -> eamap_t + + + Create a new eamap_t instance. + +Help on function eamap_next in module ida_hexrays: + +eamap_next(*args) + eamap_next(p) -> eamap_iterator_t + + + Move to the next element. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_prev in module ida_hexrays: + +eamap_prev(*args) + eamap_prev(p) -> eamap_iterator_t + + + Move to the previous element. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_second in module ida_hexrays: + +eamap_second(*args) + eamap_second(p) -> cinsnptrvec_t + + + Get reference to the current map value. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_size in module ida_hexrays: + +eamap_size(*args) + eamap_size(map) -> size_t + + + Get size of eamap_t. + + + @param map (C++: eamap_t *) + +Help on class eamap_t in module ida_hexrays: + +class eamap_t(__builtin__.object) + | Proxy of C++ std::map< ea_t,cinsnptrvec_t > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> eamap_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> cinsnptrvec_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | eamap_begin(map) -> eamap_iterator_t + | + | __clear = + | eamap_clear(map) + | + | __end = + | eamap_end(map) -> eamap_iterator_t + | + | __erase = + | eamap_erase(map, p) + | + | __find = + | eamap_find(map, key) -> eamap_iterator_t + | + | __first = + | eamap_first(p) -> ea_t const & + | + | __insert = + | eamap_insert(map, key, val) -> eamap_iterator_t + | + | __next = + | eamap_next(p) -> eamap_iterator_t + | + | __second = + | eamap_second(p) -> cinsnptrvec_t + | + | __size = + | eamap_size(map) -> size_t + | + | __swig_destroy__ = + | delete_eamap_t(self) + | + | keytype = + | long(x=0) -> long + | long(x, base=10) -> long + | + | Convert a number or string to a long integer, or return 0L if no arguments + | are given. If x is floating point, the conversion truncates towards zero. + | + | If x is not a number or if base is given, then x must be a string or + | Unicode object representing an integer literal in the given base. The + | literal can be preceded by '+' or '-' and be surrounded by whitespace. + | The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to + | interpret the base from the string as an integer literal. + | >>> int('0b100', base=0) + | 4L + | + | valuetype = + | Proxy of C++ qvector< cinsn_t * > class. + +Help on class fnum_array in module ida_hexrays: + +class fnum_array(__builtin__.object) + | Proxy of C++ wrapped_array_t< uint16,6 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> unsigned short const & + | + | __init__(self, *args) + | __init__(self, data) -> fnum_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | fnum_array_data_get(self) -> unsigned short (&)[6] + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_fnum_array(self) + +Help on class fnumber_t in module ida_hexrays: + +class fnumber_t(__builtin__.object) + | Proxy of C++ fnumber_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> fnumber_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _fnumber_t__get_fnum = __get_fnum(self, *args) + | __get_fnum(self) -> fnum_array + | + | _print(self, *args) + | _print(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | dereference_const_uint16(self, *args) + | dereference_const_uint16(self) -> uint16 const * + | + | dereference_uint16(self, *args) + | dereference_uint16(self) -> uint16 * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fnum + | __get_fnum(self) -> fnum_array + | + | nbytes + | fnumber_t_nbytes_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_fnumber_t(self) + +Help on class gco_info_t in module ida_hexrays: + +class gco_info_t(__builtin__.object) + | Proxy of C++ gco_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> gco_info_t + | + | __repr__ = _swig_repr(self) + | + | append_to_list(self, *args) + | append_to_list(self, list, mba) -> bool + | + | is_def(self, *args) + | is_def(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_use(self, *args) + | is_use(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | gco_info_t_flags_get(self) -> int + | + | name + | gco_info_t_name_get(self) -> qstring * + | + | size + | gco_info_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_gco_info_t(self) + +Help on function gen_microcode in module ida_hexrays: + +gen_microcode(*args) + gen_microcode(mbr, hf, retlist=None, flags=0, reqmat=MMAT_GLBOPT3) -> mbl_array_t + + + Generate microcode of an arbitrary code snippet + + @param mbr: snippet ranges (C++: const mba_ranges_t &) + @param hf: extended error information (if failed) (C++: + hexrays_failure_t *) + @param retlist: list of registers the snippet returns (C++: const + mlist_t *) + @param flags: bitwise combination of decompile() flags ... bits (C++: + int) + @param reqmat: required microcode maturity (C++: mba_maturity_t) + @return: pointer to the microcode, NULL if failed. + +Help on function get_ctype_name in module ida_hexrays: + +get_ctype_name(*args) + get_ctype_name(op) -> char const * + +Help on function get_current_operand in module ida_hexrays: + +get_current_operand(*args) + get_current_operand(out) -> bool + + + Get the instruction operand under the cursor. This function determines + the operand that is under the cursor in the active disassembly + listing. If the operand refers to a register or stack variable, it + return true. + + @param out (C++: gco_info_t *) + +Help on function get_float_type in module ida_hexrays: + +get_float_type(*args) + get_float_type(width) -> tinfo_t + + + Get a type of a floating point value with the specified width + + @param width: width of the desired type (C++: int) + @return: type info object + +Help on function get_hexrays_version in module ida_hexrays: + +get_hexrays_version(*args) + get_hexrays_version() -> char const * + + + Get decompiler version. The returned string is of the form + ... + + @return: pointer to version string. For example: "2.0.0.140605" + +Help on function get_int_type_by_width_and_sign in module ida_hexrays: + +get_int_type_by_width_and_sign(*args) + get_int_type_by_width_and_sign(srcwidth, sign) -> tinfo_t + + + Create a type info by width and sign. Returns a simple type (examples: + int, short) with the given width and sign. + + @param srcwidth: size of the type in bytes (C++: int) + @param sign: sign of the type (C++: type_sign_t) + +Help on function get_member_type in module ida_hexrays: + +get_member_type(*args) + get_member_type(mptr, type) -> bool + + + Get type of a structure field. This function performs validity checks + of the field type. Wrong types are rejected. + + @param mptr: structure field (C++: const member_t *) + @param type: pointer to the variable where the type is returned. This + parameter can be NULL. (C++: tinfo_t *) + @return: false if failed + +Help on function get_merror_desc in module ida_hexrays: + +get_merror_desc(*args) + get_merror_desc(code, mba) -> str + + + Get textual description of an error code + + @param code: Microcode error codes (C++: merror_t) + @param mba: the microcode array (C++: mbl_array_t *) + @return: the error address + +Help on function get_mreg_name in module ida_hexrays: + +get_mreg_name(*args) + get_mreg_name(reg, width, ud=None) -> str + + + Get the microregister name + + @param reg (C++: mreg_t) + @param width: size of microregister in bytes. may be bigger than the + real register size. (C++: int) + @param ud: reserved, must be nullptr (C++: void *) + @return: width of the printed register. this value may be less than + the WIDTH argument. + +Help on function get_op_signness in module ida_hexrays: + +get_op_signness(*args) + get_op_signness(op) -> type_sign_t + + + Get operator sign. Meaningful for sign-dependent operators, like + cot_sdiv. + + + @param op (C++: ctype_t) + +Help on function get_signed_mcode in module ida_hexrays: + +get_signed_mcode(*args) + get_signed_mcode(code) -> mcode_t + +Help on function get_temp_regs in module ida_hexrays: + +get_temp_regs(*args) + get_temp_regs() -> mlist_t + + + Get list of temporary registers. Tempregs are temporary registers that + are used during code generation. They do not map to regular processor + registers. They are used only to store temporary values during + execution of one instruction. Tempregs may not be used to pass a value + from one block to another. In other words, at the end of a block all + tempregs must be dead. + +Help on function get_type in module ida_hexrays: + +get_type(*args) + get_type(id, tif, guess) -> bool + + + Get a global type. Global types are types of addressable objects and + struct/union/enum types + + @param id: address or id of the object (C++: uval_t) + @param tif: buffer for the answer (C++: tinfo_t *) + @param guess: what kind of types to consider (C++: type_source_t) + @return: success + +Help on function get_unk_type in module ida_hexrays: + +get_unk_type(*args) + get_unk_type(size) -> tinfo_t + + + Create a partial type info by width. Returns a partially defined type + (examples: _DWORD, _BYTE) with the given width. + + @param size: size of the type in bytes (C++: int) + +Help on function get_unsigned_mcode in module ida_hexrays: + +get_unsigned_mcode(*args) + get_unsigned_mcode(code) -> mcode_t + +Help on function get_widget_vdui in module ida_hexrays: + +get_widget_vdui(*args) + get_widget_vdui(f) -> vdui_t + + + Get the 'vdui_t' instance associated to the TWidget + + @param f: pointer to window (C++: TWidget *) + @return: a vdui_t *, or NULL + +Help on function getb_reginsn in module ida_hexrays: + +getb_reginsn(*args) + getb_reginsn(ins) -> minsn_t + + + Skip assertions backward. + + + @param ins (C++: const minsn_t *) + +Help on function getf_reginsn in module ida_hexrays: + +getf_reginsn(*args) + getf_reginsn(ins) -> minsn_t + + + Skip assertions forward. + + + @param ins (C++: const minsn_t *) + +Help on class graph_chains_t in module ida_hexrays: + +class graph_chains_t(block_chains_vec_t) + | Proxy of C++ graph_chains_t class. + | + | Method resolution order: + | graph_chains_t + | block_chains_vec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> graph_chains_t + | + | __repr__ = _swig_repr(self) + | + | acquire(self, *args) + | acquire(self) + | + | for_all_chains(self, *args) + | for_all_chains(self, cv, gca_flags) -> int + | + | is_locked(self, *args) + | is_locked(self) -> bool + | + | release(self, *args) + | release(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_chains_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from block_chains_vec_t: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> block_chains_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> block_chains_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> block_chains_t + | begin(self) -> block_chains_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> block_chains_t + | end(self) -> block_chains_t + | + | erase(self, *args) + | erase(self, it) -> block_chains_t + | erase(self, first, last) -> block_chains_t + | + | extract(self, *args) + | extract(self) -> block_chains_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=block_chains_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> block_chains_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> block_chains_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from block_chains_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function has_cached_cfunc in module ida_hexrays: + +has_cached_cfunc(*args) + has_cached_cfunc(ea) -> bool + + + Do we have a cached decompilation result for 'ea'? + + + @param ea (C++: ea_t) + +Help on function hexrays_alloc in module ida_hexrays: + +hexrays_alloc(*args) + hexrays_alloc(size) -> void * + +Help on class hexrays_failure_t in module ida_hexrays: + +class hexrays_failure_t(__builtin__.object) + | Proxy of C++ hexrays_failure_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> hexrays_failure_t + | __init__(self, c, ea, buf=None) -> hexrays_failure_t + | __init__(self, c, ea, buf) -> hexrays_failure_t + | + | __repr__ = _swig_repr(self) + | + | __str__ lambda self + | + | desc(self, *args) + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | hexrays_failure_t_code_get(self) -> merror_t + | + | errea + | hexrays_failure_t_errea_get(self) -> ea_t + | + | str + | hexrays_failure_t_str_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_hexrays_failure_t(self) + +Help on function hexrays_free in module ida_hexrays: + +hexrays_free(*args) + hexrays_free(ptr) + +Help on class hexwarn_t in module ida_hexrays: + +class hexwarn_t(__builtin__.object) + | Proxy of C++ hexwarn_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> hexwarn_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | hexwarn_t_ea_get(self) -> ea_t + | + | id + | hexwarn_t_id_get(self) -> warnid_t + | + | text + | hexwarn_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_hexwarn_t(self) + +Help on class hexwarns_t in module ida_hexrays: + +class hexwarns_t(__builtin__.object) + | Proxy of C++ qvector< hexwarn_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> hexwarn_t + | + | __init__(self, *args) + | __init__(self) -> hexwarns_t + | __init__(self, x) -> hexwarns_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> hexwarn_t + | begin(self) -> hexwarn_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> hexwarn_t + | end(self) -> hexwarn_t + | + | erase(self, *args) + | erase(self, it) -> hexwarn_t + | erase(self, first, last) -> hexwarn_t + | + | extract(self, *args) + | extract(self) -> hexwarn_t + | + | find(self, *args) + | find(self, x) -> hexwarn_t + | find(self, x) -> hexwarn_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=hexwarn_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> hexwarn_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> hexwarn_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_hexwarns_t(self) + +Help on class history_item_t in module ida_hexrays: + +class history_item_t(ctext_position_t) + | Proxy of C++ history_item_t class. + | + | Method resolution order: + | history_item_t + | ctext_position_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea=BADADDR, _lnnum=-1, _x=0, _y=0) -> history_item_t + | __init__(self, _ea, p) -> history_item_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ea + | history_item_t_ea_get(self) -> ea_t + | + | end + | history_item_t_end_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_history_item_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ctext_position_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | compare(self, *args) + | compare(self, r) -> int + | + | in_ctree(self, *args) + | in_ctree(self, hdrlines) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctext_position_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | ctext_position_t_lnnum_get(self) -> int + | + | x + | ctext_position_t_x_get(self) -> int + | + | y + | ctext_position_t_y_get(self) -> int + +Help on class history_t in module ida_hexrays: + +class history_t(qvector_history_t) + | Proxy of C++ qstack< history_item_t > class. + | + | Method resolution order: + | history_t + | qvector_history_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> history_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> history_item_t + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> history_item_t + | + | pop(self, *args) + | pop(self) -> history_item_t + | + | push(self, *args) + | push(self, v) + | + | top(self, *args) + | top(self) -> history_item_t + | top(self) -> history_item_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_history_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_history_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> history_item_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> history_item_t + | begin(self) -> history_item_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> history_item_t + | end(self) -> history_item_t + | + | erase(self, *args) + | erase(self, it) -> history_item_t + | erase(self, first, last) -> history_item_t + | + | extract(self, *args) + | extract(self) -> history_item_t + | + | find(self, *args) + | find(self, x) -> history_item_t + | find(self, x) -> history_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=history_item_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> history_item_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> history_item_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_history_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function init_hexrays_plugin in module ida_hexrays: + +init_hexrays_plugin(*args) + init_hexrays_plugin(flags=0) -> bool + + + Initialize your plugin for hex-rays decompiler. This function must be + called before calling any other decompiler function. It initializes + the pointer to the dispatcher. + + @param flags: reserved, must be 0 (C++: int) + @return: true if the decompiler exists and the dispatcher pointer is + ready to use. + +Help on function install_hexrays_callback in module ida_hexrays: + +install_hexrays_callback(callback) + Deprecated. Please use Hexrays_Hooks instead + +Help on function install_microcode_filter in module ida_hexrays: + +install_microcode_filter(*args) + install_microcode_filter(filter, install=True) + + + register/unregister non-standard microcode generator + + @param filter: - microcode generator object (C++: microcode_filter_t + *) + @param install: - TRUE - register the object, FALSE - unregister (C++: + bool) + +Help on function is_additive in module ida_hexrays: + +is_additive(*args) + is_additive(op) -> bool + + + Is additive operator? + + + @param op (C++: ctype_t) + +Help on function is_assignment in module ida_hexrays: + +is_assignment(*args) + is_assignment(op) -> bool + + + Is assignment operator? + + + @param op (C++: ctype_t) + +Help on function is_binary in module ida_hexrays: + +is_binary(*args) + is_binary(op) -> bool + + + Is binary operator? + + + @param op (C++: ctype_t) + +Help on function is_bitop in module ida_hexrays: + +is_bitop(*args) + is_bitop(op) -> bool + + + Is bit related operator? + + + @param op (C++: ctype_t) + +Help on function is_bool_type in module ida_hexrays: + +is_bool_type(*args) + is_bool_type(type) -> bool + + + Is a boolean type? + + @param type (C++: const tinfo_t &) + @return: true if the type is a boolean type + +Help on function is_break_consumer in module ida_hexrays: + +is_break_consumer(*args) + is_break_consumer(op) -> bool + + + Does a break statement influence the specified statement code? + + + @param op (C++: ctype_t) + +Help on function is_commutative in module ida_hexrays: + +is_commutative(*args) + is_commutative(op) -> bool + + + Is commutative operator? + + + @param op (C++: ctype_t) + +Help on function is_inplace_def in module ida_hexrays: + +is_inplace_def(*args) + is_inplace_def(type) -> bool + + + Is struct/union/enum definition (not declaration)? + + + @param type (C++: const tinfo_t &) + +Help on function is_kreg in module ida_hexrays: + +is_kreg(*args) + is_kreg(r) -> bool + + + Is a kernel register? + + + @param r (C++: mreg_t) + +Help on function is_logical in module ida_hexrays: + +is_logical(*args) + is_logical(op) -> bool + + + Is logical operator? + + + @param op (C++: ctype_t) + +Help on function is_loop in module ida_hexrays: + +is_loop(*args) + is_loop(op) -> bool + + + Is loop statement code? + + + @param op (C++: ctype_t) + +Help on function is_lvalue in module ida_hexrays: + +is_lvalue(*args) + is_lvalue(op) -> bool + + + Is Lvalue operator? + + + @param op (C++: ctype_t) + +Help on function is_may_access in module ida_hexrays: + +is_may_access(*args) + is_may_access(maymust) -> bool + +Help on function is_mcode_addsub in module ida_hexrays: + +is_mcode_addsub(*args) + is_mcode_addsub(mcode) -> bool + +Help on function is_mcode_call in module ida_hexrays: + +is_mcode_call(*args) + is_mcode_call(mcode) -> bool + +Help on function is_mcode_commutative in module ida_hexrays: + +is_mcode_commutative(*args) + is_mcode_commutative(mcode) -> bool + +Help on function is_mcode_convertible_to_jmp in module ida_hexrays: + +is_mcode_convertible_to_jmp(*args) + is_mcode_convertible_to_jmp(mcode) -> bool + +Help on function is_mcode_convertible_to_set in module ida_hexrays: + +is_mcode_convertible_to_set(*args) + is_mcode_convertible_to_set(mcode) -> bool + +Help on function is_mcode_divmod in module ida_hexrays: + +is_mcode_divmod(*args) + is_mcode_divmod(op) -> bool + +Help on function is_mcode_fpu in module ida_hexrays: + +is_mcode_fpu(*args) + is_mcode_fpu(mcode) -> bool + +Help on function is_mcode_j1 in module ida_hexrays: + +is_mcode_j1(*args) + is_mcode_j1(mcode) -> bool + +Help on function is_mcode_jcond in module ida_hexrays: + +is_mcode_jcond(*args) + is_mcode_jcond(mcode) -> bool + +Help on function is_mcode_propagatable in module ida_hexrays: + +is_mcode_propagatable(*args) + is_mcode_propagatable(mcode) -> bool + + + May opcode be propagated? Such opcodes can be used in sub-instructions + (nested instructions) There is a handful of non-propagatable opcodes, + like jumps, ret, nop, etc All other regular opcodes are propagatable + and may appear in a nested instruction. + + @param mcode (C++: mcode_t) + +Help on function is_mcode_set in module ida_hexrays: + +is_mcode_set(*args) + is_mcode_set(mcode) -> bool + +Help on function is_mcode_set1 in module ida_hexrays: + +is_mcode_set1(*args) + is_mcode_set1(mcode) -> bool + +Help on function is_mcode_shift in module ida_hexrays: + +is_mcode_shift(*args) + is_mcode_shift(mcode) -> bool + +Help on function is_mcode_xdsu in module ida_hexrays: + +is_mcode_xdsu(*args) + is_mcode_xdsu(mcode) -> bool + +Help on function is_multiplicative in module ida_hexrays: + +is_multiplicative(*args) + is_multiplicative(op) -> bool + + + Is multiplicative operator? + + + @param op (C++: ctype_t) + +Help on function is_nonbool_type in module ida_hexrays: + +is_nonbool_type(*args) + is_nonbool_type(type) -> bool + + + Is definitely a non-boolean type? + + @param type (C++: const tinfo_t &) + @return: true if the type is a non-boolean type (non bool and well + defined) + +Help on function is_paf in module ida_hexrays: + +is_paf(*args) + is_paf(t) -> bool + + + Is a pointer, array, or function type? + + + @param t (C++: type_t) + +Help on function is_prepost in module ida_hexrays: + +is_prepost(*args) + is_prepost(op) -> bool + + + Is pre/post increment/decrement operator? + + + @param op (C++: ctype_t) + +Help on function is_ptr_or_array in module ida_hexrays: + +is_ptr_or_array(*args) + is_ptr_or_array(t) -> bool + + + Is a pointer or array type? + + + @param t (C++: type_t) + +Help on function is_relational in module ida_hexrays: + +is_relational(*args) + is_relational(op) -> bool + + + Is comparison operator? + + + @param op (C++: ctype_t) + +Help on function is_signed_mcode in module ida_hexrays: + +is_signed_mcode(*args) + is_signed_mcode(code) -> bool + +Help on function is_small_udt in module ida_hexrays: + +is_small_udt(*args) + is_small_udt(tif) -> bool + + + Is a small structure or union? + + @param tif (C++: const tinfo_t &) + @return: true if the type is a small UDT (user defined type). Small + UDTs fit into a register (or pair or registers) as a rule. + +Help on function is_type_correct in module ida_hexrays: + +is_type_correct(*args) + is_type_correct(ptr) -> bool + + + Verify a type string. + + @param ptr (C++: const type_t *) + @return: true if type string is correct + +Help on function is_unary in module ida_hexrays: + +is_unary(*args) + is_unary(op) -> bool + + + Is unary operator? + + + @param op (C++: ctype_t) + +Help on function is_unsigned_mcode in module ida_hexrays: + +is_unsigned_mcode(*args) + is_unsigned_mcode(code) -> bool + +Help on class ivl_t in module ida_hexrays: + +class ivl_t(uval_ivl_t) + | Proxy of C++ ivl_t class. + | + | Method resolution order: + | ivl_t + | uval_ivl_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _off, _size) -> ivl_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, off2) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | extend_to_cover(self, *args) + | extend_to_cover(self, r) -> bool + | + | includes(self, *args) + | includes(self, ivl) -> bool + | + | intersect(self, *args) + | intersect(self, r) + | + | overlap(self, *args) + | overlap(self, ivl) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ivl_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from uval_ivl_t: + | + | end(self, *args) + | end(self) -> unsigned-ea-like-numeric-type↗ + | + | last(self, *args) + | last(self) -> unsigned-ea-like-numeric-type↗ + | + | valid(self, *args) + | valid(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from uval_ivl_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type↗ + | + | size + | uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type↗ + +Help on class ivl_with_name_t in module ida_hexrays: + +class ivl_with_name_t(__builtin__.object) + | Proxy of C++ ivl_with_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ivl_with_name_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ivl + | ivl_with_name_t_ivl_get(self) -> ivl_t + | + | part + | ivl_with_name_t_part_get(self) -> char const * + | + | thisown + | The membership flag + | + | whole + | ivl_with_name_t_whole_get(self) -> char const * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ivl_with_name_t(self) + +Help on class ivlset_t in module ida_hexrays: + +class ivlset_t(uval_ivl_ivlset_t) + | Proxy of C++ ivlset_t class. + | + | Method resolution order: + | ivlset_t + | uval_ivl_ivlset_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ivlset_t + | __init__(self, ivl) -> ivlset_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | add(self, *args) + | add(self, ivl) -> bool + | add(self, ea, size) -> bool + | add(self, ivs) -> bool + | + | addmasked(self, *args) + | addmasked(self, ivs, mask) -> bool + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, off) -> bool + | + | count(self, *args) + | count(self) -> asize_t + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | has_common(self, *args) + | has_common(self, ivl, strict=False) -> bool + | has_common(self, ivs) -> bool + | + | includes(self, *args) + | includes(self, ivs) -> bool + | + | intersect(self, *args) + | intersect(self, ivs) -> bool + | + | sub(self, *args) + | sub(self, ivl) -> bool + | sub(self, ea, size) -> bool + | sub(self, ivs) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ivlset_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from uval_ivl_ivlset_t: + | + | all_values(self, *args) + | all_values(self) -> bool + | + | begin(self, *args) + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | getivl(self, *args) + | getivl(self, idx) -> ivl_t + | + | lastivl(self, *args) + | lastivl(self) -> ivl_t + | + | nivls(self, *args) + | nivls(self) -> size_t + | + | qclear(self, *args) + | qclear(self) + | + | set_all_values(self, *args) + | set_all_values(self) + | + | single_value(self, *args) + | single_value(self, v) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from uval_ivl_ivlset_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function jcnd2set in module ida_hexrays: + +jcnd2set(*args) + jcnd2set(code) -> mcode_t + +Help on function lexcompare in module ida_hexrays: + +lexcompare(*args) + lexcompare(a, b) -> int + +Help on function lnot in module ida_hexrays: + +lnot(e) + +Help on class lvar_locator_t in module ida_hexrays: + +class lvar_locator_t(__builtin__.object) + | Proxy of C++ lvar_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_locator_t + | __init__(self, loc, ea) -> lvar_locator_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | get_reg1(self, *args) + | get_reg1(self) -> mreg_t + | + | get_reg2(self, *args) + | get_reg2(self) -> mreg_t + | + | get_scattered(self, *args) + | get_scattered(self) -> scattered_aloc_t + | get_scattered(self) -> scattered_aloc_t + | + | get_stkoff(self, *args) + | get_stkoff(self) -> sval_t + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_reg_var(self, *args) + | is_reg_var(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stk_var(self, *args) + | is_stk_var(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | defea + | lvar_locator_t_defea_get(self) -> ea_t + | + | location + | lvar_locator_t_location_get(self) -> vdloc_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_locator_t(self) + +Help on function lvar_mapping_begin in module ida_hexrays: + +lvar_mapping_begin(*args) + lvar_mapping_begin(map) -> lvar_mapping_iterator_t + + + Get iterator pointing to the beginning of lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + +Help on function lvar_mapping_clear in module ida_hexrays: + +lvar_mapping_clear(*args) + lvar_mapping_clear(map) + + + Clear lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + +Help on function lvar_mapping_end in module ida_hexrays: + +lvar_mapping_end(*args) + lvar_mapping_end(map) -> lvar_mapping_iterator_t + + + Get iterator pointing to the end of lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + +Help on function lvar_mapping_erase in module ida_hexrays: + +lvar_mapping_erase(*args) + lvar_mapping_erase(map, p) + + + Erase current element from lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_find in module ida_hexrays: + +lvar_mapping_find(*args) + lvar_mapping_find(map, key) -> lvar_mapping_iterator_t + + + Find the specified key in lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + @param key (C++: const lvar_locator_t &) + +Help on function lvar_mapping_first in module ida_hexrays: + +lvar_mapping_first(*args) + lvar_mapping_first(p) -> lvar_locator_t + + + Get reference to the current map key. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_free in module ida_hexrays: + +lvar_mapping_free(*args) + lvar_mapping_free(map) + + + Delete lvar_mapping_t instance. + + + @param map (C++: lvar_mapping_t *) + +Help on function lvar_mapping_insert in module ida_hexrays: + +lvar_mapping_insert(*args) + lvar_mapping_insert(map, key, val) -> lvar_mapping_iterator_t + + + Insert new ( 'lvar_locator_t' , 'lvar_locator_t' ) pair into + lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + @param key (C++: const lvar_locator_t &) + @param val (C++: const lvar_locator_t &) + +Help on class lvar_mapping_iterator_t in module ida_hexrays: + +class lvar_mapping_iterator_t(__builtin__.object) + | Proxy of C++ lvar_mapping_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_mapping_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | lvar_mapping_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_mapping_iterator_t(self) + +Help on function lvar_mapping_new in module ida_hexrays: + +lvar_mapping_new(*args) + lvar_mapping_new() -> lvar_mapping_t + + + Create a new lvar_mapping_t instance. + +Help on function lvar_mapping_next in module ida_hexrays: + +lvar_mapping_next(*args) + lvar_mapping_next(p) -> lvar_mapping_iterator_t + + + Move to the next element. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_prev in module ida_hexrays: + +lvar_mapping_prev(*args) + lvar_mapping_prev(p) -> lvar_mapping_iterator_t + + + Move to the previous element. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_second in module ida_hexrays: + +lvar_mapping_second(*args) + lvar_mapping_second(p) -> lvar_locator_t + + + Get reference to the current map value. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_size in module ida_hexrays: + +lvar_mapping_size(*args) + lvar_mapping_size(map) -> size_t + + + Get size of lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + +Help on class lvar_mapping_t in module ida_hexrays: + +class lvar_mapping_t(__builtin__.object) + | Proxy of C++ std::map< lvar_locator_t,lvar_locator_t > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvar_mapping_t + | + | __repr__ = _swig_repr(self) + | + | at(self, *args) + | at(self, _Keyval) -> lvar_locator_t + | + | size(self, *args) + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_mapping_t(self) + +Help on class lvar_ref_t in module ida_hexrays: + +class lvar_ref_t(__builtin__.object) + | Proxy of C++ lvar_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, m, i, o=0) -> lvar_ref_t + | __init__(self, r) -> lvar_ref_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | swap(self, *args) + | swap(self, r) + | + | var(self, *args) + | var(self) -> lvar_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | idx + | lvar_ref_t_idx_get(self) -> int + | + | mba + | lvar_ref_t_mba_get(self) -> mbl_array_t + | + | off + | lvar_ref_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_ref_t(self) + +Help on class lvar_saved_info_t in module ida_hexrays: + +class lvar_saved_info_t(__builtin__.object) + | Proxy of C++ lvar_saved_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_saved_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | clear_keep(self, *args) + | clear_keep(self) + | + | clr_forced_lvar(self, *args) + | clr_forced_lvar(self) + | + | clr_nomap_lvar(self, *args) + | clr_nomap_lvar(self) + | + | clr_noptr_lvar(self, *args) + | clr_noptr_lvar(self) + | + | has_info(self, *args) + | has_info(self) -> bool + | + | is_forced_lvar(self, *args) + | is_forced_lvar(self) -> bool + | + | is_kept(self, *args) + | is_kept(self) -> bool + | + | is_nomap_lvar(self, *args) + | is_nomap_lvar(self) -> bool + | + | is_noptr_lvar(self, *args) + | is_noptr_lvar(self) -> bool + | + | set_forced_lvar(self, *args) + | set_forced_lvar(self) + | + | set_keep(self, *args) + | set_keep(self) + | + | set_nomap_lvar(self, *args) + | set_nomap_lvar(self) + | + | set_noptr_lvar(self, *args) + | set_noptr_lvar(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | lvar_saved_info_t_cmt_get(self) -> qstring * + | + | flags + | lvar_saved_info_t_flags_get(self) -> int + | + | ll + | lvar_saved_info_t_ll_get(self) -> lvar_locator_t + | + | name + | lvar_saved_info_t_name_get(self) -> qstring * + | + | size + | lvar_saved_info_t_size_get(self) -> ssize_t + | + | thisown + | The membership flag + | + | type + | lvar_saved_info_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_saved_info_t(self) + +Help on class lvar_saved_infos_t in module ida_hexrays: + +class lvar_saved_infos_t(__builtin__.object) + | Proxy of C++ qvector< lvar_saved_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> lvar_saved_info_t + | + | __init__(self, *args) + | __init__(self) -> lvar_saved_infos_t + | __init__(self, x) -> lvar_saved_infos_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> lvar_saved_info_t + | begin(self) -> lvar_saved_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> lvar_saved_info_t + | end(self) -> lvar_saved_info_t + | + | erase(self, *args) + | erase(self, it) -> lvar_saved_info_t + | erase(self, first, last) -> lvar_saved_info_t + | + | extract(self, *args) + | extract(self) -> lvar_saved_info_t + | + | find(self, *args) + | find(self, x) -> lvar_saved_info_t + | find(self, x) -> lvar_saved_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=lvar_saved_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> lvar_saved_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> lvar_saved_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_saved_infos_t(self) + +Help on class lvar_t in module ida_hexrays: + +class lvar_t(lvar_locator_t) + | Proxy of C++ lvar_t class. + | + | Method resolution order: + | lvar_t + | lvar_locator_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | accepts_type(self, *args) + | accepts_type(self, t, may_change_thisarg=False) -> bool + | + | append_list(self, *args) + | append_list(self, lst, pad_if_scattered=False) + | + | clear_used(self, *args) + | clear_used(self) + | + | clr_arg_var(self, *args) + | clr_arg_var(self) + | + | clr_automapped(self, *args) + | clr_automapped(self) + | + | clr_dummy_arg(self, *args) + | clr_dummy_arg(self) + | + | clr_fake_var(self, *args) + | clr_fake_var(self) + | + | clr_floating_var(self, *args) + | clr_floating_var(self) + | + | clr_forced_var(self, *args) + | clr_forced_var(self) + | + | clr_mapdst_var(self, *args) + | clr_mapdst_var(self) + | + | clr_mreg_done(self, *args) + | clr_mreg_done(self) + | + | clr_noptr_var(self, *args) + | clr_noptr_var(self) + | + | clr_notarg(self, *args) + | clr_notarg(self) + | + | clr_overlapped_var(self, *args) + | clr_overlapped_var(self) + | + | clr_spoiled_var(self, *args) + | clr_spoiled_var(self) + | + | clr_thisarg(self, *args) + | clr_thisarg(self) + | + | clr_unknown_width(self, *args) + | clr_unknown_width(self) + | + | clr_user_info(self, *args) + | clr_user_info(self) + | + | clr_user_name(self, *args) + | clr_user_name(self) + | + | clr_user_type(self, *args) + | clr_user_type(self) + | + | has_common(self, *args) + | has_common(self, v) -> bool + | + | has_common_bit(self, *args) + | has_common_bit(self, loc, width2) -> bool + | + | has_regname(self, *args) + | has_regname(self) -> bool + | + | is_aliasable(self, *args) + | is_aliasable(self, mba) -> bool + | + | is_automapped(self, *args) + | is_automapped(self) -> bool + | + | is_dummy_arg(self, *args) + | is_dummy_arg(self) -> bool + | + | is_forced_var(self, *args) + | is_forced_var(self) -> bool + | + | is_noptr_var(self, *args) + | is_noptr_var(self) -> bool + | + | is_notarg(self, *args) + | is_notarg(self) -> bool + | + | is_thisarg(self, *args) + | is_thisarg(self) -> bool + | + | set_arg_var(self, *args) + | set_arg_var(self) + | + | set_automapped(self, *args) + | set_automapped(self) + | + | set_dummy_arg(self, *args) + | set_dummy_arg(self) + | + | set_fake_var(self, *args) + | set_fake_var(self) + | + | set_final_lvar_type(self, *args) + | set_final_lvar_type(self, t) + | + | set_floating_var(self, *args) + | set_floating_var(self) + | + | set_forced_var(self, *args) + | set_forced_var(self) + | + | set_lvar_type(self, *args) + | set_lvar_type(self, t, may_fail=False) -> bool + | + | set_mapdst_var(self, *args) + | set_mapdst_var(self) + | + | set_mreg_done(self, *args) + | set_mreg_done(self) + | + | set_non_typed(self, *args) + | set_non_typed(self) + | + | set_noptr_var(self, *args) + | set_noptr_var(self) + | + | set_notarg(self, *args) + | set_notarg(self) + | + | set_overlapped_var(self, *args) + | set_overlapped_var(self) + | + | set_spoiled_var(self, *args) + | set_spoiled_var(self) + | + | set_thisarg(self, *args) + | set_thisarg(self) + | + | set_typed(self, *args) + | set_typed(self) + | + | set_unknown_width(self, *args) + | set_unknown_width(self) + | + | set_used(self, *args) + | set_used(self) + | + | set_user_name(self, *args) + | set_user_name(self) + | + | set_user_type(self, *args) + | set_user_type(self) + | + | set_width(self, *args) + | set_width(self, w, svw_flags=0) -> bool + | + | type(self, *args) + | type(self) -> tinfo_t + | type(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cmt + | lvar_t_cmt_get(self) -> qstring * + | + | defblk + | lvar_t_defblk_get(self) -> int + | + | divisor + | lvar_t_divisor_get(self) -> uint64 + | + | has_nice_name + | has_nice_name(self) -> bool + | + | has_user_info + | has_user_info(self) -> bool + | + | has_user_name + | has_user_name(self) -> bool + | + | has_user_type + | has_user_type(self) -> bool + | + | is_arg_var + | is_arg_var(self) -> bool + | + | is_fake_var + | is_fake_var(self) -> bool + | + | is_floating_var + | is_floating_var(self) -> bool + | + | is_mapdst_var + | is_mapdst_var(self) -> bool + | + | is_overlapped_var + | is_overlapped_var(self) -> bool + | + | is_result_var + | is_result_var(self) -> bool + | + | is_spoiled_var + | is_spoiled_var(self) -> bool + | + | is_unknown_width + | is_unknown_width(self) -> bool + | + | mreg_done + | mreg_done(self) -> bool + | + | name + | lvar_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tif + | lvar_t_tif_get(self) -> tinfo_t + | + | typed + | typed(self) -> bool + | + | used + | used(self) -> bool + | + | width + | lvar_t_width_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from lvar_locator_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | compare(self, *args) + | compare(self, r) -> int + | + | get_reg1(self, *args) + | get_reg1(self) -> mreg_t + | + | get_reg2(self, *args) + | get_reg2(self) -> mreg_t + | + | get_scattered(self, *args) + | get_scattered(self) -> scattered_aloc_t + | get_scattered(self) -> scattered_aloc_t + | + | get_stkoff(self, *args) + | get_stkoff(self) -> sval_t + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_reg_var(self, *args) + | is_reg_var(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stk_var(self, *args) + | is_stk_var(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from lvar_locator_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | defea + | lvar_locator_t_defea_get(self) -> ea_t + | + | location + | lvar_locator_t_location_get(self) -> vdloc_t + +Help on class lvar_uservec_t in module ida_hexrays: + +class lvar_uservec_t(__builtin__.object) + | Proxy of C++ lvar_uservec_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvar_uservec_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | find_info(self, *args) + | find_info(self, vloc) -> lvar_saved_info_t + | + | keep_info(self, *args) + | keep_info(self, v) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lmaps + | lvar_uservec_t_lmaps_get(self) -> lvar_mapping_t + | + | lvvec + | lvar_uservec_t_lvvec_get(self) -> lvar_saved_infos_t + | + | stkoff_delta + | lvar_uservec_t_stkoff_delta_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ulv_flags + | lvar_uservec_t_ulv_flags_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvar_uservec_t(self) + +Help on class lvars_t in module ida_hexrays: + +class lvars_t(qvector_lvar_t) + | Proxy of C++ lvars_t class. + | + | Method resolution order: + | lvars_t + | qvector_lvar_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvars_t + | + | __repr__ = _swig_repr(self) + | + | find(self, *args) + | find(self, ll) -> lvar_t + | + | find_input_lvar(self, *args) + | find_input_lvar(self, argloc, _size) -> int + | + | find_lvar(self, *args) + | find_lvar(self, location, width, defblk=-1) -> int + | + | find_stkvar(self, *args) + | find_stkvar(self, spoff, width) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lvars_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_lvar_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> lvar_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | push_back(self, x) + | push_back(self) -> lvar_t + | + | at = __getitem__(self, *args) + | __getitem__(self, i) -> lvar_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> lvar_t + | begin(self) -> lvar_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> lvar_t + | end(self) -> lvar_t + | + | erase(self, *args) + | erase(self, it) -> lvar_t + | erase(self, first, last) -> lvar_t + | + | extract(self, *args) + | extract(self) -> lvar_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=lvar_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> lvar_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> lvar_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_lvar_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function make_num in module ida_hexrays: + +make_num(*args) + +Help on function make_pointer in module ida_hexrays: + +make_pointer(*args) + make_pointer(type) -> tinfo_t + + + Create a pointer type. This function performs the following + conversion: "type" -> "type*" + + @param type: object type. (C++: const tinfo_t &) + @return: "type*". for example, if 'char' is passed as the argument, + +Help on function make_ref in module ida_hexrays: + +make_ref(e) + +Help on function mark_cfunc_dirty in module ida_hexrays: + +mark_cfunc_dirty(*args) + mark_cfunc_dirty(ea, close_views=False) -> bool + + + Flush the cached decompilation results. Erases a cache entry for the + specified function. + + @param ea: function to erase from the cache (C++: ea_t) + @param close_views: close pseudocode windows that show the function + (C++: bool) + @return: if a cache entry existed. + +Help on class mba_range_iterator_t in module ida_hexrays: + +class mba_range_iterator_t(__builtin__.object) + | Proxy of C++ mba_range_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mba_range_iterator_t + | + | __repr__ = _swig_repr(self) + | + | chunk(self, *args) + | chunk(self) -> range_t + | + | is_snippet(self, *args) + | is_snippet(self) -> bool + | + | next(self, *args) + | next(self) -> bool + | + | set(self, *args) + | set(self, mbr) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fii + | mba_range_iterator_t_fii_get(self) -> func_tail_iterator_t + | + | rii + | mba_range_iterator_t_rii_get(self) -> range_chunk_iterator_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mba_range_iterator_t(self) + +Help on class mba_ranges_t in module ida_hexrays: + +class mba_ranges_t(__builtin__.object) + | Proxy of C++ mba_ranges_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _pfn=None) -> mba_ranges_t + | __init__(self, r) -> mba_ranges_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | is_fragmented(self, *args) + | is_fragmented(self) -> bool + | + | is_snippet(self, *args) + | is_snippet(self) -> bool + | + | start(self, *args) + | start(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | pfn + | mba_ranges_t_pfn_get(self) -> func_t * + | + | ranges + | mba_ranges_t_ranges_get(self) -> rangevec_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mba_ranges_t(self) + +Help on class mbl_array_t in module ida_hexrays: + +class mbl_array_t(__builtin__.object) + | Proxy of C++ mbl_array_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | _deregister(self, *args) + | _deregister(self) + | + | _print(self, *args) + | _print(self, vp) + | + | _register(self, *args) + | _register(self) + | + | alloc_lvars(self, *args) + | alloc_lvars(self) + | + | analyze_calls(self, *args) + | analyze_calls(self, acflags) -> int + | + | arg(self, *args) + | arg(self, n) -> lvar_t + | arg(self, n) -> lvar_t + | + | argbase(self, *args) + | argbase(self) -> sval_t + | + | argidx_ok(self, *args) + | argidx_ok(self) -> bool + | + | bad_call_sp_detected(self, *args) + | bad_call_sp_detected(self) -> bool + | + | build_graph(self, *args) + | build_graph(self) -> merror_t + | + | calc_shins_flags(self, *args) + | calc_shins_flags(self) -> int + | + | callinfo_built(self, *args) + | callinfo_built(self) -> bool + | + | chain_varnums_ok(self, *args) + | chain_varnums_ok(self) -> bool + | + | clr_cdtr(self, *args) + | clr_cdtr(self) + | + | clr_mba_flags(self, *args) + | clr_mba_flags(self, f) + | + | clr_mba_flags2(self, *args) + | clr_mba_flags2(self, f) + | + | combine_blocks(self, *args) + | combine_blocks(self) -> bool + | + | common_stkvars_stkargs(self, *args) + | common_stkvars_stkargs(self) -> bool + | + | copy_block(self, *args) + | copy_block(self, blk, new_serial, cpblk_flags=3) -> mblock_t + | + | deleted_pairs(self, *args) + | deleted_pairs(self) -> bool + | + | display_numaddrs(self, *args) + | display_numaddrs(self) -> bool + | + | display_valnums(self, *args) + | display_valnums(self) -> bool + | + | dump(self, *args) + | dump(self) + | + | dump_mba(self, *args) + | dump_mba(self, _verify, title) + | + | find_mop(self, *args) + | find_mop(self, ctx, ea, is_dest, list) -> mop_t + | + | for_all_insns(self, *args) + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) + | for_all_ops(self, mv) -> int + | + | for_all_topinsns(self, *args) + | for_all_topinsns(self, mv) -> int + | + | generated_asserts(self, *args) + | generated_asserts(self) -> bool + | + | get_args_region(self, *args) + | get_args_region(self) -> ivl_t + | + | get_curfunc(self, *args) + | get_curfunc(self) -> func_t * + | + | get_graph(self, *args) + | get_graph(self) -> mbl_graph_t + | + | get_ida_argloc(self, *args) + | get_ida_argloc(self, v) -> argloc_t + | + | get_lvars_region(self, *args) + | get_lvars_region(self) -> ivl_t + | + | get_mba_flags(self, *args) + | get_mba_flags(self) -> int + | + | get_mba_flags2(self, *args) + | get_mba_flags2(self) -> int + | + | get_mblock(self, *args) + | get_mblock(self, n) -> mblock_t + | get_mblock(self, n) -> mblock_t + | + | get_shadow_region(self, *args) + | get_shadow_region(self) -> ivl_t + | + | get_stack_region(self, *args) + | get_stack_region(self) -> ivl_t + | + | get_std_region(self, *args) + | get_std_region(self, idx) -> ivl_t + | + | graph_insns(self, *args) + | graph_insns(self) -> bool + | + | has_bad_sp(self, *args) + | has_bad_sp(self) -> bool + | + | has_over_chains(self, *args) + | has_over_chains(self) -> bool + | + | has_passregs(self, *args) + | has_passregs(self) -> bool + | + | idaloc2vd(self, *args) + | idaloc2vd(self, loc, width) -> vdloc_t + | + | insert_block(self, *args) + | insert_block(self, bblk) -> mblock_t + | + | is_cdtr(self, *args) + | is_cdtr(self) -> bool + | + | is_ctr(self, *args) + | is_ctr(self) -> bool + | + | is_dtr(self, *args) + | is_dtr(self) -> bool + | + | is_pattern(self, *args) + | is_pattern(self) -> bool + | + | is_snippet(self, *args) + | is_snippet(self) -> bool + | + | is_stkarg(self, *args) + | is_stkarg(self, v) -> bool + | + | is_thunk(self, *args) + | is_thunk(self) -> bool + | + | loaded_gdl(self, *args) + | loaded_gdl(self) -> bool + | + | lvar_names_ok(self, *args) + | lvar_names_ok(self) -> bool + | + | lvars_allocated(self, *args) + | lvars_allocated(self) -> bool + | + | lvars_renamed(self, *args) + | lvars_renamed(self) -> bool + | + | mark_chains_dirty(self, *args) + | mark_chains_dirty(self) + | + | may_refine_rettype(self, *args) + | may_refine_rettype(self) -> bool + | + | optimize_global(self, *args) + | optimize_global(self) -> merror_t + | + | optimize_local(self, *args) + | optimize_local(self, locopt_bits) -> int + | + | optimized(self, *args) + | optimized(self) -> bool + | + | precise_defeas(self, *args) + | precise_defeas(self) -> bool + | + | propagated_asserts(self, *args) + | propagated_asserts(self) -> bool + | + | really_alloc(self, *args) + | really_alloc(self) -> bool + | + | regargs_is_not_aligned(self, *args) + | regargs_is_not_aligned(self) -> bool + | + | remove_block(self, *args) + | remove_block(self, blk) -> bool + | + | remove_empty_blocks(self, *args) + | remove_empty_blocks(self) -> bool + | + | returns_fpval(self, *args) + | returns_fpval(self) -> bool + | + | rtype_refined(self, *args) + | rtype_refined(self) -> bool + | + | saverest_done(self, *args) + | saverest_done(self) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | set_mba_flags(self, *args) + | set_mba_flags(self, f) + | + | set_mba_flags2(self, *args) + | set_mba_flags2(self, f) + | + | short_display(self, *args) + | short_display(self) -> bool + | + | should_beautify(self, *args) + | should_beautify(self) -> bool + | + | show_reduction(self, *args) + | show_reduction(self) -> bool + | + | stkoff_ida2vd(self, *args) + | stkoff_ida2vd(self, off) -> sval_t + | + | stkoff_vd2ida(self, *args) + | stkoff_vd2ida(self, off) -> sval_t + | + | term(self, *args) + | term(self) + | + | use_frame(self, *args) + | use_frame(self) -> bool + | + | use_wingraph32(self, *args) + | use_wingraph32(self) -> bool + | + | valranges_done(self, *args) + | valranges_done(self) -> bool + | + | vd2idaloc(self, *args) + | vd2idaloc(self, loc, width, spd) -> argloc_t + | vd2idaloc(self, loc, width) -> argloc_t + | + | verify(self, *args) + | verify(self, always) + | + | write_to_const_detected(self, *args) + | write_to_const_detected(self) -> bool + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | deserialize(*args) + | deserialize(bytes) -> mbl_array_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | aliased_args + | mbl_array_t_aliased_args_get(self) -> ivl_t + | + | aliased_memory + | mbl_array_t_aliased_memory_get(self) -> ivlset_t + | + | aliased_vars + | mbl_array_t_aliased_vars_get(self) -> ivl_t + | + | argidx + | mbl_array_t_argidx_get(self) -> intvec_t + | + | blocks + | mbl_array_t_blocks_get(self) -> mblock_t + | + | cc + | mbl_array_t_cc_get(self) -> cm_t + | + | consumed_argregs + | mbl_array_t_consumed_argregs_get(self) -> rlist_t + | + | entry_ea + | mbl_array_t_entry_ea_get(self) -> ea_t + | + | error_ea + | mbl_array_t_error_ea_get(self) -> ea_t + | + | error_strarg + | mbl_array_t_error_strarg_get(self) -> qstring * + | + | final_type + | mbl_array_t_final_type_get(self) -> bool + | + | first_epilog_ea + | mbl_array_t_first_epilog_ea_get(self) -> ea_t + | + | fpd + | mbl_array_t_fpd_get(self) -> sval_t + | + | frregs + | mbl_array_t_frregs_get(self) -> sval_t + | + | frsize + | mbl_array_t_frsize_get(self) -> sval_t + | + | fti_flags + | mbl_array_t_fti_flags_get(self) -> int + | + | fullsize + | mbl_array_t_fullsize_get(self) -> sval_t + | + | gotoff_stkvars + | mbl_array_t_gotoff_stkvars_get(self) -> ivlset_t + | + | idb_node + | mbl_array_t_idb_node_get(self) -> netnode + | + | idb_spoiled + | mbl_array_t_idb_spoiled_get(self) -> reginfovec_t + | + | idb_type + | mbl_array_t_idb_type_get(self) -> tinfo_t + | + | inargoff + | mbl_array_t_inargoff_get(self) -> sval_t + | + | label + | mbl_array_t_label_get(self) -> qstring * + | + | last_prolog_ea + | mbl_array_t_last_prolog_ea_get(self) -> ea_t + | + | maturity + | mbl_array_t_maturity_get(self) -> mba_maturity_t + | + | mbr + | mbl_array_t_mbr_get(self) -> mba_ranges_t + | + | minargref + | mbl_array_t_minargref_get(self) -> sval_t + | + | minstkref + | mbl_array_t_minstkref_get(self) -> sval_t + | + | minstkref_ea + | mbl_array_t_minstkref_ea_get(self) -> ea_t + | + | natural + | mbl_array_t_natural_get(self) -> mblock_t ** + | + | nodel_memory + | mbl_array_t_nodel_memory_get(self) -> mlist_t + | + | notes + | mbl_array_t_notes_get(self) -> hexwarns_t + | + | npurged + | mbl_array_t_npurged_get(self) -> int + | + | occurred_warns + | mbl_array_t_occurred_warns_get(self) -> uchar [32] + | + | pfn_flags + | mbl_array_t_pfn_flags_get(self) -> int + | + | qty + | mbl_array_t_qty_get(self) -> int + | + | reqmat + | mbl_array_t_reqmat_get(self) -> mba_maturity_t + | + | restricted_memory + | mbl_array_t_restricted_memory_get(self) -> ivlset_t + | + | retsize + | mbl_array_t_retsize_get(self) -> int + | + | retvaridx + | mbl_array_t_retvaridx_get(self) -> int + | + | shadow_args + | mbl_array_t_shadow_args_get(self) -> int + | + | spd_adjust + | mbl_array_t_spd_adjust_get(self) -> sval_t + | + | spoiled_list + | mbl_array_t_spoiled_list_get(self) -> mlist_t + | + | stacksize + | mbl_array_t_stacksize_get(self) -> sval_t + | + | std_ivls + | mbl_array_t_std_ivls_get(self) -> ivl_with_name_t + | + | thisown + | The membership flag + | + | tmpstk_size + | mbl_array_t_tmpstk_size_get(self) -> sval_t + | + | vars + | mbl_array_t_vars_get(self) -> lvars_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mbl_array_t(self) + +Help on function mbl_array_t_deserialize in module ida_hexrays: + +mbl_array_t_deserialize(*args) + mbl_array_t_deserialize(bytes) -> mbl_array_t + +Help on class mbl_graph_t in module ida_hexrays: + +class mbl_graph_t(simple_graph_t) + | Proxy of C++ mbl_graph_t class. + | + | Method resolution order: + | mbl_graph_t + | simple_graph_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | get_chain_stamp(self, *args) + | get_chain_stamp(self) -> int + | + | get_du(self, *args) + | get_du(self, gctype) -> graph_chains_t + | + | get_mblock(self, *args) + | get_mblock(self, n) -> mblock_t + | + | get_ud(self, *args) + | get_ud(self, gctype) -> graph_chains_t + | + | is_du_chain_dirty(self, *args) + | is_du_chain_dirty(self, gctype) -> bool + | + | is_redefined_globally(self, *args) + | is_redefined_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool + | + | is_ud_chain_dirty(self, *args) + | is_ud_chain_dirty(self, gctype) -> bool + | + | is_used_globally(self, *args) + | is_used_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from simple_graph_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | colored_gdl_edges + | simple_graph_t_colored_gdl_edges_get(self) -> bool + | + | title + | simple_graph_t_title_get(self) -> qstring * + +Help on class mblock_t in module ida_hexrays: + +class mblock_t(__builtin__.object) + | Proxy of C++ mblock_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, vp) + | + | append_def_list(self, *args) + | append_def_list(self, list, op, maymust) + | + | append_use_list(self, *args) + | append_use_list(self, list, op, maymust, mask=bitrange_t(0, USHRT_MAX)) + | + | build_def_list(self, *args) + | build_def_list(self, ins, maymust) -> mlist_t + | + | build_lists(self, *args) + | build_lists(self, kill_deads) -> int + | + | build_use_list(self, *args) + | build_use_list(self, ins, maymust) -> mlist_t + | + | dump(self, *args) + | dump(self) + | + | dump_block(self, *args) + | dump_block(self, title) + | + | empty(self, *args) + | empty(self) -> bool + | + | find_access(self, *args) + | find_access(self, op, parent, mend, fdflags) -> minsn_t + | + | find_def(self, *args) + | find_def(self, op, p_i1, i2, fdflags) -> minsn_t + | + | find_first_use(self, *args) + | find_first_use(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t + | + | find_redefinition(self, *args) + | find_redefinition(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t + | + | find_use(self, *args) + | find_use(self, op, p_i1, i2, fdflags) -> minsn_t + | + | for_all_insns(self, *args) + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) + | for_all_ops(self, mv) -> int + | + | for_all_uses(self, *args) + | for_all_uses(self, list, i1, i2, mmv) -> int + | + | get_reginsn_qty(self, *args) + | get_reginsn_qty(self) -> size_t + | + | get_valranges(self, *args) + | get_valranges(self, res, vivl, vrflags) -> bool + | get_valranges(self, res, vivl, m, vrflags) -> bool + | + | insert_into_block(self, *args) + | insert_into_block(self, nm, om) -> minsn_t + | + | is_branch(self, *args) + | is_branch(self) -> bool + | + | is_call_block(self, *args) + | is_call_block(self) -> bool + | + | is_nway(self, *args) + | is_nway(self) -> bool + | + | is_redefined(self, *args) + | is_redefined(self, list, i1, i2, maymust=MAY_ACCESS) -> bool + | + | is_rhs_redefined(self, *args) + | is_rhs_redefined(self, ins, i1, i2) -> bool + | + | is_simple_goto_block(self, *args) + | is_simple_goto_block(self) -> bool + | + | is_simple_jcnd_block(self, *args) + | is_simple_jcnd_block(self) -> bool + | + | is_unknown_call(self, *args) + | is_unknown_call(self) -> bool + | + | is_used(self, *args) + | is_used(self, list, i1, i2, maymust=MAY_ACCESS) -> bool + | + | lists_dirty(self, *args) + | lists_dirty(self) -> bool + | + | lists_ready(self, *args) + | lists_ready(self) -> bool + | + | make_lists_ready(self, *args) + | make_lists_ready(self) -> int + | + | make_nop(self, *args) + | make_nop(self, m) + | + | mark_lists_dirty(self, *args) + | mark_lists_dirty(self) + | + | needs_propagation(self, *args) + | needs_propagation(self) -> bool + | + | npred(self, *args) + | npred(self) -> int + | + | nsucc(self, *args) + | nsucc(self) -> int + | + | optimize_block(self, *args) + | optimize_block(self) -> int + | + | optimize_insn(self, *args) + | optimize_insn(self, m, optflags=0x0002|0x0004) -> int + | + | optimize_useless_jump(self, *args) + | optimize_useless_jump(self) -> int + | + | pred(self, *args) + | pred(self, n) -> int + | + | preds(self) + | Iterates the list of predecessor blocks + | + | remove_from_block(self, *args) + | remove_from_block(self, m) -> minsn_t + | + | request_demote64(self, *args) + | request_demote64(self) + | + | request_propagation(self, *args) + | request_propagation(self) + | + | succ(self, *args) + | succ(self, n) -> int + | + | succs(self) + | Iterates the list of successor blocks + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dead_at_start + | mblock_t_dead_at_start_get(self) -> mlist_t + | + | dnu + | mblock_t_dnu_get(self) -> mlist_t + | + | end + | mblock_t_end_get(self) -> ea_t + | + | flags + | mblock_t_flags_get(self) -> uint32 + | + | head + | mblock_t_head_get(self) -> minsn_t + | + | maxbsp + | mblock_t_maxbsp_get(self) -> sval_t + | + | maybdef + | mblock_t_maybdef_get(self) -> mlist_t + | + | maybuse + | mblock_t_maybuse_get(self) -> mlist_t + | + | mba + | mblock_t_mba_get(self) -> mbl_array_t + | + | minbargref + | mblock_t_minbargref_get(self) -> sval_t + | + | minbstkref + | mblock_t_minbstkref_get(self) -> sval_t + | + | mustbdef + | mblock_t_mustbdef_get(self) -> mlist_t + | + | mustbuse + | mblock_t_mustbuse_get(self) -> mlist_t + | + | nextb + | mblock_t_nextb_get(self) -> mblock_t + | + | predset + | mblock_t_predset_get(self) -> intvec_t + | + | prevb + | mblock_t_prevb_get(self) -> mblock_t + | + | serial + | mblock_t_serial_get(self) -> int + | + | start + | mblock_t_start_get(self) -> ea_t + | + | succset + | mblock_t_succset_get(self) -> intvec_t + | + | tail + | mblock_t_tail_get(self) -> minsn_t + | + | thisown + | The membership flag + | + | type + | mblock_t_type_get(self) -> mblock_type_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mblock_t(self) + +Help on class mcallarg_t in module ida_hexrays: + +class mcallarg_t(mop_t) + | Proxy of C++ mcallarg_t class. + | + | Method resolution order: + | mcallarg_t + | mop_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mcallarg_t + | __init__(self, rarg) -> mcallarg_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, shins_flags=0x04|0x02) + | + | copy_mop(self, *args) + | copy_mop(self, op) + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | make_int(self, *args) + | make_int(self, val, val_ea, opno=0) + | + | make_uint(self, *args) + | make_uint(self, val, val_ea, opno=0) + | + | set_regarg(self, *args) + | set_regarg(self, mr, sz, tif) + | set_regarg(self, mr, tif) + | set_regarg(self, mr, dt, sign=type_unsigned) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | argloc + | mcallarg_t_argloc_get(self) -> argloc_t + | + | ea + | mcallarg_t_ea_get(self) -> ea_t + | + | name + | mcallarg_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | mcallarg_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mcallarg_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from mop_t: + | + | __eq__(self, *args) + | __eq__(self, rop) -> bool + | + | __lt__(self, *args) + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) + | __ne__(self, rop) -> bool + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) + | _get_b(self) -> int + | + | _get_c(self, *args) + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) + | _get_helper(self) -> char const * + | + | _get_l(self, *args) + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) + | _make_gvar(self, ea) + | + | _make_insn(self, *args) + | _make_insn(self, ins) + | + | _make_lvar(self, *args) + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) + | _make_pair(self, _pair) + | + | _make_reg(self, *args) + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _register(self, *args) + | _register(self) + | + | _set_a(self, *args) + | _set_a(self, _v) + | + | _set_b(self, *args) + | _set_b(self, _v) + | + | _set_c(self, *args) + | _set_c(self, _v) + | + | _set_cstr(self, *args) + | _set_cstr(self, _v) + | + | _set_d(self, *args) + | _set_d(self, _v) + | + | _set_f(self, *args) + | _set_f(self, _v) + | + | _set_fpc(self, *args) + | _set_fpc(self, _v) + | + | _set_g(self, *args) + | _set_g(self, _v) + | + | _set_helper(self, *args) + | _set_helper(self, _v) + | + | _set_l(self, *args) + | _set_l(self, _v) + | + | _set_nnn(self, *args) + | _set_nnn(self, _v) + | + | _set_pair(self, *args) + | _set_pair(self, _v) + | + | _set_r(self, *args) + | _set_r(self, _v) + | + | _set_s(self, *args) + | _set_s(self, _v) + | + | _set_scif(self, *args) + | _set_scif(self, _v) + | + | _set_t(self, *args) + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) + | assign(self, rop) -> mop_t + | + | change_size(self, *args) + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | equal_mops(self, *args) + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) + | erase(self) + | + | erase_but_keep_size(self, *args) + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) + | is01(self) -> bool + | + | is_arglist(self, *args) + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) + | is_cc(self) -> bool + | + | is_ccflags(self, *args) + | is_ccflags(self) -> bool + | + | is_constant(self, *args) + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) + | is_kreg(self) -> bool + | + | is_mob(self, *args) + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) + | is_negative_constant(self) -> bool + | + | is_one(self, *args) + | is_one(self) -> bool + | + | is_positive_constant(self, *args) + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) + | is_udt(self) -> bool + | + | is_undef_val(self, *args) + | is_undef_val(self) -> bool + | + | is_zero(self, *args) + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) + | is_zero_extended_from(self, nbytes) -> bool + | + | lexcompare(self, *args) + | lexcompare(self, rop) -> int + | + | make_blkref(self, *args) + | make_blkref(self, blknum) + | + | make_first_half(self, *args) + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) + | make_gvar(self, ea) + | + | make_helper(self, *args) + | make_helper(self, name) + | + | make_high_half(self, *args) + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) + | make_insn(self, ins) + | + | make_low_half(self, *args) + | make_low_half(self, width) -> bool + | + | make_number(self, *args) + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) + | set_impptr_done(self) + | + | set_udt(self, *args) + | set_udt(self) + | + | set_undef_val(self, *args) + | set_undef_val(self) + | + | shift_mop(self, *args) + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) + | signed_value(self) -> int64 + | + | swap(self, *args) + | swap(self, rop) + | + | unsigned_value(self, *args) + | unsigned_value(self) -> uint64 + | + | value(self, *args) + | value(self, is_signed) -> uint64 + | + | zero(self, *args) + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from mop_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | valnum + | mop_t_valnum_get(self) -> uint16 + +Help on class mcallargs_t in module ida_hexrays: + +class mcallargs_t(__builtin__.object) + | Proxy of C++ qvector< mcallarg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> mcallarg_t + | + | __init__(self, *args) + | __init__(self) -> mcallargs_t + | __init__(self, x) -> mcallargs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> mcallarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> mcallarg_t + | begin(self) -> mcallarg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> mcallarg_t + | end(self) -> mcallarg_t + | + | erase(self, *args) + | erase(self, it) -> mcallarg_t + | erase(self, first, last) -> mcallarg_t + | + | extract(self, *args) + | extract(self) -> mcallarg_t + | + | find(self, *args) + | find(self, x) -> mcallarg_t + | find(self, x) -> mcallarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=mcallarg_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> mcallarg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> mcallarg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mcallargs_t(self) + +Help on class mcallinfo_t in module ida_hexrays: + +class mcallinfo_t(__builtin__.object) + | Proxy of C++ mcallinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _callee=BADADDR, _sargs=0) -> mcallinfo_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, size=-1, shins_flags=0x04|0x02) + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | get_type(self, *args) + | get_type(self) -> tinfo_t + | + | is_vararg(self, *args) + | is_vararg(self) -> bool + | + | lexcompare(self, *args) + | lexcompare(self, f) -> int + | + | set_type(self, *args) + | set_type(self, type) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | args + | mcallinfo_t_args_get(self) -> mcallargs_t + | + | call_spd + | mcallinfo_t_call_spd_get(self) -> int + | + | callee + | mcallinfo_t_callee_get(self) -> ea_t + | + | cc + | mcallinfo_t_cc_get(self) -> cm_t + | + | dead_regs + | mcallinfo_t_dead_regs_get(self) -> mlist_t + | + | flags + | mcallinfo_t_flags_get(self) -> int + | + | fti_attrs + | mcallinfo_t_fti_attrs_get(self) -> type_attrs_t + | + | pass_regs + | mcallinfo_t_pass_regs_get(self) -> mlist_t + | + | retregs + | mcallinfo_t_retregs_get(self) -> mopvec_t + | + | return_argloc + | mcallinfo_t_return_argloc_get(self) -> argloc_t + | + | return_regs + | mcallinfo_t_return_regs_get(self) -> mlist_t + | + | return_type + | mcallinfo_t_return_type_get(self) -> tinfo_t + | + | role + | mcallinfo_t_role_get(self) -> funcrole_t + | + | solid_args + | mcallinfo_t_solid_args_get(self) -> int + | + | spoiled + | mcallinfo_t_spoiled_get(self) -> mlist_t + | + | stkargs_top + | mcallinfo_t_stkargs_top_get(self) -> int + | + | thisown + | The membership flag + | + | visible_memory + | mcallinfo_t_visible_memory_get(self) -> ivlset_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mcallinfo_t(self) + +Help on class mcases_t in module ida_hexrays: + +class mcases_t(__builtin__.object) + | Proxy of C++ mcases_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> mcases_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | resize(self, *args) + | resize(self, s) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | targets + | mcases_t_targets_get(self) -> intvec_t + | + | thisown + | The membership flag + | + | values + | mcases_t_values_get(self) -> casevec_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mcases_t(self) + +Help on function mcode_modifies_d in module ida_hexrays: + +mcode_modifies_d(*args) + mcode_modifies_d(mcode) -> bool + +Help on class microcode_filter_t in module ida_hexrays: + +class microcode_filter_t(__builtin__.object) + | Proxy of C++ microcode_filter_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> microcode_filter_t + | + | __repr__ = _swig_repr(self) + | + | apply(self, *args) + | apply(self, cdg) -> merror_t + | + | match(self, *args) + | match(self, cdg) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_microcode_filter_t(self) + +Help on class minsn_t in module ida_hexrays: + +class minsn_t(__builtin__.object) + | Proxy of C++ minsn_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea) -> minsn_t + | __init__(self, m) -> minsn_t + | + | __lt__(self, *args) + | __lt__(self, ri) -> bool + | + | __repr__ = _swig_repr(self) + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _make_nop(self, *args) + | _make_nop(self) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _minsn_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _minsn_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) + | _register(self) + | + | clr_assert(self, *args) + | clr_assert(self) + | + | clr_combinable(self, *args) + | clr_combinable(self) + | + | clr_combined(self, *args) + | clr_combined(self) + | + | clr_fpinsn(self, *args) + | clr_fpinsn(self) + | + | clr_ignlowsrc(self, *args) + | clr_ignlowsrc(self) + | + | clr_multimov(self, *args) + | clr_multimov(self) + | + | clr_noret_icall(self, *args) + | clr_noret_icall(self) + | + | clr_propagatable(self, *args) + | clr_propagatable(self) + | + | clr_tailcall(self, *args) + | clr_tailcall(self) + | + | contains_call(self, *args) + | contains_call(self, with_helpers=False) -> bool + | + | contains_opcode(self, *args) + | contains_opcode(self, mcode) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | equal_insns(self, *args) + | equal_insns(self, m, eqflags) -> bool + | + | find_call(self, *args) + | find_call(self, with_helpers=False) -> minsn_t + | + | find_ins_op(self, *args) + | find_ins_op(self, op=m_nop) -> minsn_t + | + | find_num_op(self, *args) + | find_num_op(self) -> mop_t + | + | find_opcode(self, *args) + | find_opcode(self, mcode) -> minsn_t + | find_opcode(self, mcode) -> minsn_t + | + | for_all_insns(self, *args) + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) + | for_all_ops(self, mv) -> int + | + | get_role(self, *args) + | get_role(self) -> funcrole_t + | + | get_split_size(self, *args) + | get_split_size(self) -> int + | + | has_side_effects(self, *args) + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is_after(self, *args) + | is_after(self, m) -> bool + | + | is_alloca(self, *args) + | is_alloca(self) -> bool + | + | is_assert(self, *args) + | is_assert(self) -> bool + | + | is_between(self, *args) + | is_between(self, m1, m2) -> bool + | + | is_bswap(self, *args) + | is_bswap(self) -> bool + | + | is_cleaning_pop(self, *args) + | is_cleaning_pop(self) -> bool + | + | is_combinable(self, *args) + | is_combinable(self) -> bool + | + | is_combined(self, *args) + | is_combined(self) -> bool + | + | is_extstx(self, *args) + | is_extstx(self) -> bool + | + | is_farcall(self, *args) + | is_farcall(self) -> bool + | + | is_fpinsn(self, *args) + | is_fpinsn(self) -> bool + | + | is_helper(self, *args) + | is_helper(self, name) -> bool + | + | is_ignlowsrc(self, *args) + | is_ignlowsrc(self) -> bool + | + | is_inverted_jx(self, *args) + | is_inverted_jx(self) -> bool + | + | is_like_move(self, *args) + | is_like_move(self) -> bool + | + | is_mbarrier(self, *args) + | is_mbarrier(self) -> bool + | + | is_memcpy(self, *args) + | is_memcpy(self) -> bool + | + | is_memset(self, *args) + | is_memset(self) -> bool + | + | is_mov(self, *args) + | is_mov(self) -> bool + | + | is_multimov(self, *args) + | is_multimov(self) -> bool + | + | is_noret_call(self, *args) + | is_noret_call(self, ignore_noret_icall=False) -> bool + | + | is_optional(self, *args) + | is_optional(self) -> bool + | + | is_persistent(self, *args) + | is_persistent(self) -> bool + | + | is_propagatable(self, *args) + | is_propagatable(self) -> bool + | + | is_readflags(self, *args) + | is_readflags(self) -> bool + | + | is_tailcall(self, *args) + | is_tailcall(self) -> bool + | + | is_unknown_call(self, *args) + | is_unknown_call(self) -> bool + | + | is_wild_match(self, *args) + | is_wild_match(self) -> bool + | + | lexcompare(self, *args) + | lexcompare(self, ri) -> int + | + | may_use_aliased_memory(self, *args) + | may_use_aliased_memory(self) -> bool + | + | modifes_d(self, *args) + | modifes_d(self) -> bool + | + | modifies_pair_mop(self, *args) + | modifies_pair_mop(self) -> bool + | + | optimize_solo(self, *args) + | optimize_solo(self, optflags=0) -> int + | + | optimize_subtree(self, *args) + | optimize_subtree(self, blk, top, parent, converted_call, optflags=0x0002) -> int + | + | replace_by(self, o) + | + | set_assert(self, *args) + | set_assert(self) + | + | set_cleaning_pop(self, *args) + | set_cleaning_pop(self) + | + | set_combinable(self, *args) + | set_combinable(self) + | + | set_extstx(self, *args) + | set_extstx(self) + | + | set_farcall(self, *args) + | set_farcall(self) + | + | set_fpinsn(self, *args) + | set_fpinsn(self) + | + | set_ignlowsrc(self, *args) + | set_ignlowsrc(self) + | + | set_inverted_jx(self, *args) + | set_inverted_jx(self) + | + | set_mbarrier(self, *args) + | set_mbarrier(self) + | + | set_multimov(self, *args) + | set_multimov(self) + | + | set_noret_icall(self, *args) + | set_noret_icall(self) + | + | set_optional(self, *args) + | set_optional(self) + | + | set_persistent(self, *args) + | set_persistent(self) + | + | set_split_size(self, *args) + | set_split_size(self, s) + | + | set_tailcall(self, *args) + | set_tailcall(self) + | + | set_wild_match(self, *args) + | set_wild_match(self) + | + | setaddr(self, *args) + | setaddr(self, new_ea) + | + | swap(self, *args) + | swap(self, m) + | + | was_noret_icall(self, *args) + | was_noret_icall(self) -> bool + | + | was_split(self, *args) + | was_split(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | d + | minsn_t_d_get(self) -> mop_t + | + | ea + | minsn_t_ea_get(self) -> ea_t + | + | iprops + | minsn_t_iprops_get(self) -> int + | + | l + | minsn_t_l_get(self) -> mop_t + | + | meminfo + | + | next + | minsn_t_next_get(self) -> minsn_t + | + | obj_id + | _obj_id(self) -> PyObject * + | + | opcode + | minsn_t_opcode_get(self) -> mcode_t + | + | prev + | minsn_t_prev_get(self) -> minsn_t + | + | r + | minsn_t_r_get(self) -> mop_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_minsn_t(self) + +Help on class minsn_visitor_t in module ida_hexrays: + +class minsn_visitor_t(op_parent_info_t) + | Proxy of C++ minsn_visitor_t class. + | + | Method resolution order: + | minsn_visitor_t + | op_parent_info_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> minsn_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_minsn(self, *args) + | visit_minsn(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_minsn_visitor_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from op_parent_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + +Help on class mlist_mop_visitor_t in module ida_hexrays: + +class mlist_mop_visitor_t(__builtin__.object) + | Proxy of C++ mlist_mop_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> mlist_mop_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_mop(self, *args) + | visit_mop(self, op) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | changed + | mlist_mop_visitor_t_changed_get(self) -> bool + | + | curins + | mlist_mop_visitor_t_curins_get(self) -> minsn_t + | + | list + | mlist_mop_visitor_t_list_get(self) -> mlist_t + | + | thisown + | The membership flag + | + | topins + | mlist_mop_visitor_t_topins_get(self) -> minsn_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mlist_mop_visitor_t(self) + +Help on class mlist_t in module ida_hexrays: + +class mlist_t(__builtin__.object) + | Proxy of C++ mlist_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> mlist_t + | __init__(self, ivl) -> mlist_t + | __init__(self, r, size) -> mlist_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | add(self, *args) + | add(self, r, size) -> bool + | add(self, r) -> bool + | add(self, ivl) -> bool + | add(self, lst) -> bool + | + | addmem(self, *args) + | addmem(self, ea, size) -> bool + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | count(self, *args) + | count(self) -> asize_t + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | has(self, *args) + | has(self, r) -> bool + | + | has_all(self, *args) + | has_all(self, r, size) -> bool + | + | has_any(self, *args) + | has_any(self, r, size) -> bool + | + | has_common(self, *args) + | has_common(self, lst) -> bool + | + | has_memory(self, *args) + | has_memory(self) -> bool + | + | includes(self, *args) + | includes(self, lst) -> bool + | + | intersect(self, *args) + | intersect(self, lst) -> bool + | + | is_subset_of(self, *args) + | is_subset_of(self, lst) -> bool + | + | sub(self, *args) + | sub(self, r, size) -> bool + | sub(self, ivl) -> bool + | sub(self, lst) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | mem + | mlist_t_mem_get(self) -> ivlset_t + | + | reg + | mlist_t_reg_get(self) -> rlist_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mlist_t(self) + +Help on class mnumber_t in module ida_hexrays: + +class mnumber_t(operand_locator_t) + | Proxy of C++ mnumber_t class. + | + | Method resolution order: + | mnumber_t + | operand_locator_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, v, _ea=BADADDR, n=0) -> mnumber_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | update_value(self, *args) + | update_value(self, val64) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | org_value + | mnumber_t_org_value_get(self) -> uint64 + | + | thisown + | The membership flag + | + | value + | mnumber_t_value_get(self) -> uint64 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mnumber_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from operand_locator_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | operand_locator_t_ea_get(self) -> ea_t + | + | opnum + | operand_locator_t_opnum_get(self) -> int + +Help on function modify_user_lvar_info in module ida_hexrays: + +modify_user_lvar_info(*args) + modify_user_lvar_info(func_ea, mli_flags, info) -> bool + + + Modify saved local variable settings. + + @param func_ea (C++: ea_t) + @param mli_flags: bits that specify which attrs defined by INFO are to + be set (C++: uint) + @param info: local variable info attrs (C++: const lvar_saved_info_t + &) + @return: true if modified, false if invalid MLI_FLAGS passed + +Help on function modify_user_lvars in module ida_hexrays: + +modify_user_lvars(*args) + modify_user_lvars(entry_ea, mlv) -> bool + + + Modify saved local variable settings. + + @param entry_ea: function start address (C++: ea_t) + @param mlv: local variable modifier (C++: user_lvar_modifier_t &) + @return: true if modified variables + +Help on class mop_addr_t in module ida_hexrays: + +class mop_addr_t(mop_t) + | Proxy of C++ mop_addr_t class. + | + | Method resolution order: + | mop_addr_t + | mop_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mop_addr_t + | __init__(self, ra) -> mop_addr_t + | __init__(self, ra, isz, osz) -> mop_addr_t + | + | __repr__ = _swig_repr(self) + | + | lexcompare(self, *args) + | lexcompare(self, ra) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | insize + | mop_addr_t_insize_get(self) -> int + | + | outsize + | mop_addr_t_outsize_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mop_addr_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from mop_t: + | + | __eq__(self, *args) + | __eq__(self, rop) -> bool + | + | __lt__(self, *args) + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) + | __ne__(self, rop) -> bool + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) + | _get_b(self) -> int + | + | _get_c(self, *args) + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) + | _get_helper(self) -> char const * + | + | _get_l(self, *args) + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) + | _make_gvar(self, ea) + | + | _make_insn(self, *args) + | _make_insn(self, ins) + | + | _make_lvar(self, *args) + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) + | _make_pair(self, _pair) + | + | _make_reg(self, *args) + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) + | _register(self) + | + | _set_a(self, *args) + | _set_a(self, _v) + | + | _set_b(self, *args) + | _set_b(self, _v) + | + | _set_c(self, *args) + | _set_c(self, _v) + | + | _set_cstr(self, *args) + | _set_cstr(self, _v) + | + | _set_d(self, *args) + | _set_d(self, _v) + | + | _set_f(self, *args) + | _set_f(self, _v) + | + | _set_fpc(self, *args) + | _set_fpc(self, _v) + | + | _set_g(self, *args) + | _set_g(self, _v) + | + | _set_helper(self, *args) + | _set_helper(self, _v) + | + | _set_l(self, *args) + | _set_l(self, _v) + | + | _set_nnn(self, *args) + | _set_nnn(self, _v) + | + | _set_pair(self, *args) + | _set_pair(self, _v) + | + | _set_r(self, *args) + | _set_r(self, _v) + | + | _set_s(self, *args) + | _set_s(self, _v) + | + | _set_scif(self, *args) + | _set_scif(self, _v) + | + | _set_t(self, *args) + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) + | assign(self, rop) -> mop_t + | + | change_size(self, *args) + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | equal_mops(self, *args) + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) + | erase(self) + | + | erase_but_keep_size(self, *args) + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) + | is01(self) -> bool + | + | is_arglist(self, *args) + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) + | is_cc(self) -> bool + | + | is_ccflags(self, *args) + | is_ccflags(self) -> bool + | + | is_constant(self, *args) + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) + | is_kreg(self) -> bool + | + | is_mob(self, *args) + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) + | is_negative_constant(self) -> bool + | + | is_one(self, *args) + | is_one(self) -> bool + | + | is_positive_constant(self, *args) + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) + | is_udt(self) -> bool + | + | is_undef_val(self, *args) + | is_undef_val(self) -> bool + | + | is_zero(self, *args) + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) + | is_zero_extended_from(self, nbytes) -> bool + | + | make_blkref(self, *args) + | make_blkref(self, blknum) + | + | make_first_half(self, *args) + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) + | make_gvar(self, ea) + | + | make_helper(self, *args) + | make_helper(self, name) + | + | make_high_half(self, *args) + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) + | make_insn(self, ins) + | + | make_low_half(self, *args) + | make_low_half(self, width) -> bool + | + | make_number(self, *args) + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) + | set_impptr_done(self) + | + | set_udt(self, *args) + | set_udt(self) + | + | set_undef_val(self, *args) + | set_undef_val(self) + | + | shift_mop(self, *args) + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) + | signed_value(self) -> int64 + | + | swap(self, *args) + | swap(self, rop) + | + | unsigned_value(self, *args) + | unsigned_value(self) -> uint64 + | + | value(self, *args) + | value(self, is_signed) -> uint64 + | + | zero(self, *args) + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from mop_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | valnum + | mop_t_valnum_get(self) -> uint16 + +Help on class mop_pair_t in module ida_hexrays: + +class mop_pair_t(__builtin__.object) + | Proxy of C++ mop_pair_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mop_pair_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hop + | mop_pair_t_hop_get(self) -> mop_t + | + | lop + | mop_pair_t_lop_get(self) -> mop_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mop_pair_t(self) + +Help on class mop_t in module ida_hexrays: + +class mop_t(__builtin__.object) + | Proxy of C++ mop_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, rop) -> bool + | + | __init__(self, *args) + | __init__(self) -> mop_t + | __init__(self, rop) -> mop_t + | __init__(self, _r, _s) -> mop_t + | + | __lt__(self, *args) + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) + | __ne__(self, rop) -> bool + | + | __repr__ = _swig_repr(self) + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) + | _get_b(self) -> int + | + | _get_c(self, *args) + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) + | _get_helper(self) -> char const * + | + | _get_l(self, *args) + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) + | _make_gvar(self, ea) + | + | _make_insn(self, *args) + | _make_insn(self, ins) + | + | _make_lvar(self, *args) + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) + | _make_pair(self, _pair) + | + | _make_reg(self, *args) + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) + | _register(self) + | + | _set_a(self, *args) + | _set_a(self, _v) + | + | _set_b(self, *args) + | _set_b(self, _v) + | + | _set_c(self, *args) + | _set_c(self, _v) + | + | _set_cstr(self, *args) + | _set_cstr(self, _v) + | + | _set_d(self, *args) + | _set_d(self, _v) + | + | _set_f(self, *args) + | _set_f(self, _v) + | + | _set_fpc(self, *args) + | _set_fpc(self, _v) + | + | _set_g(self, *args) + | _set_g(self, _v) + | + | _set_helper(self, *args) + | _set_helper(self, _v) + | + | _set_l(self, *args) + | _set_l(self, _v) + | + | _set_nnn(self, *args) + | _set_nnn(self, _v) + | + | _set_pair(self, *args) + | _set_pair(self, _v) + | + | _set_r(self, *args) + | _set_r(self, _v) + | + | _set_s(self, *args) + | _set_s(self, _v) + | + | _set_scif(self, *args) + | _set_scif(self, _v) + | + | _set_t(self, *args) + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) + | assign(self, rop) -> mop_t + | + | change_size(self, *args) + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | equal_mops(self, *args) + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) + | erase(self) + | + | erase_but_keep_size(self, *args) + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) + | is01(self) -> bool + | + | is_arglist(self, *args) + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) + | is_cc(self) -> bool + | + | is_ccflags(self, *args) + | is_ccflags(self) -> bool + | + | is_constant(self, *args) + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) + | is_kreg(self) -> bool + | + | is_mob(self, *args) + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) + | is_negative_constant(self) -> bool + | + | is_one(self, *args) + | is_one(self) -> bool + | + | is_positive_constant(self, *args) + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) + | is_udt(self) -> bool + | + | is_undef_val(self, *args) + | is_undef_val(self) -> bool + | + | is_zero(self, *args) + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) + | is_zero_extended_from(self, nbytes) -> bool + | + | lexcompare(self, *args) + | lexcompare(self, rop) -> int + | + | make_blkref(self, *args) + | make_blkref(self, blknum) + | + | make_first_half(self, *args) + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) + | make_gvar(self, ea) + | + | make_helper(self, *args) + | make_helper(self, name) + | + | make_high_half(self, *args) + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) + | make_insn(self, ins) + | + | make_low_half(self, *args) + | make_low_half(self, width) -> bool + | + | make_number(self, *args) + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) + | set_impptr_done(self) + | + | set_udt(self, *args) + | set_udt(self) + | + | set_undef_val(self, *args) + | set_undef_val(self) + | + | shift_mop(self, *args) + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) + | signed_value(self) -> int64 + | + | swap(self, *args) + | swap(self, rop) + | + | unsigned_value(self, *args) + | unsigned_value(self) -> uint64 + | + | value(self, *args) + | value(self, is_signed) -> uint64 + | + | zero(self, *args) + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | thisown + | The membership flag + | + | valnum + | mop_t_valnum_get(self) -> uint16 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mop_t(self) + +Help on class mop_visitor_t in module ida_hexrays: + +class mop_visitor_t(op_parent_info_t) + | Proxy of C++ mop_visitor_t class. + | + | Method resolution order: + | mop_visitor_t + | op_parent_info_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> mop_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_mop(self, *args) + | visit_mop(self, op, type, is_target) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | prune + | mop_visitor_t_prune_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mop_visitor_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from op_parent_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + +Help on class mopvec_t in module ida_hexrays: + +class mopvec_t(__builtin__.object) + | Proxy of C++ qvector< mop_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> mop_t + | + | __init__(self, *args) + | __init__(self) -> mopvec_t + | __init__(self, x) -> mopvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> mop_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> mop_t + | begin(self) -> mop_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> mop_t + | end(self) -> mop_t + | + | erase(self, *args) + | erase(self, it) -> mop_t + | erase(self, first, last) -> mop_t + | + | extract(self, *args) + | extract(self) -> mop_t + | + | find(self, *args) + | find(self, x) -> mop_t + | find(self, x) -> mop_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=mop_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> mop_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> mop_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_mopvec_t(self) + +Help on function mreg2reg in module ida_hexrays: + +mreg2reg(*args) + mreg2reg(reg, width) -> int + + + Map a microregister to a processor register. + + @param reg: microregister number (C++: mreg_t) + @param width: size of microregister in bytes (C++: int) + @return: processor register id or -1 + +Help on function must_mcode_close_block in module ida_hexrays: + +must_mcode_close_block(*args) + must_mcode_close_block(mcode, including_calls) -> bool + + + Must an instruction with the given opcode be the last one in a block? + Such opcodes are called closing opcodes. + + @param mcode: instruction opcode (C++: mcode_t) + @param including_calls: should m_call/m_icall be considered as the + closing opcodes? If this function returns + true, the opcode cannot appear in the middle + of a block. Calls are a special case because + before MMAT_CALLS they are closing opcodes. + Afteer MMAT_CALLS that are not considered as + closing opcodes. (C++: bool) + +Help on function negate_mcode_relation in module ida_hexrays: + +negate_mcode_relation(*args) + negate_mcode_relation(code) -> mcode_t + +Help on function negated_relation in module ida_hexrays: + +negated_relation(*args) + negated_relation(op) -> ctype_t + + + Negate a comparison operator. For example, cot_sge becomes cot_slt. + + + @param op (C++: ctype_t) + +Help on function new_block in module ida_hexrays: + +new_block() + +Help on class number_format_t in module ida_hexrays: + +class number_format_t(__builtin__.object) + | Proxy of C++ number_format_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _opnum=0) -> number_format_t + | + | __repr__ = _swig_repr(self) + | + | get_radix(self, *args) + | get_radix(self) -> int + | + | is_char(self, *args) + | is_char(self) -> bool + | + | is_dec(self, *args) + | is_dec(self) -> bool + | + | is_enum(self, *args) + | is_enum(self) -> bool + | + | is_fixed(self, *args) + | is_fixed(self) -> bool + | + | is_hex(self, *args) + | is_hex(self) -> bool + | + | is_numop(self, *args) + | is_numop(self) -> bool + | + | is_oct(self, *args) + | is_oct(self) -> bool + | + | is_stroff(self, *args) + | is_stroff(self) -> bool + | + | needs_to_be_inverted(self, *args) + | needs_to_be_inverted(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | number_format_t_flags_get(self) -> flags_t + | + | opnum + | number_format_t_opnum_get(self) -> char + | + | org_nbytes + | number_format_t_org_nbytes_get(self) -> char + | + | props + | number_format_t_props_get(self) -> char + | + | serial + | number_format_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | type_name + | number_format_t_type_name_get(self) -> qstring * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_number_format_t(self) + +Help on class op_parent_info_t in module ida_hexrays: + +class op_parent_info_t(__builtin__.object) + | Proxy of C++ op_parent_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> op_parent_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_op_parent_info_t(self) + +Help on function op_uses_x in module ida_hexrays: + +op_uses_x(*args) + op_uses_x(op) -> bool + + + Does operator use the 'x' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function op_uses_y in module ida_hexrays: + +op_uses_y(*args) + op_uses_y(op) -> bool + + + Does operator use the 'y' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function op_uses_z in module ida_hexrays: + +op_uses_z(*args) + op_uses_z(op) -> bool + + + Does operator use the 'z' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function open_pseudocode in module ida_hexrays: + +open_pseudocode(*args) + open_pseudocode(ea, new_window) -> vdui_t + + + Open pseudocode window. The specified function is decompiled and the + pseudocode window is opened. + + @param ea: function to decompile (C++: ea_t) + @param new_window: 0:reuse existing window; 1:open new window; -1: + reuse existing window if the current view is + pseudocode (C++: int) + @return: false if failed + +Help on class operand_locator_t in module ida_hexrays: + +class operand_locator_t(__builtin__.object) + | Proxy of C++ operand_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _ea, _opnum) -> operand_locator_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | operand_locator_t_ea_get(self) -> ea_t + | + | opnum + | operand_locator_t_opnum_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_operand_locator_t(self) + +Help on class operator_info_t in module ida_hexrays: + +class operator_info_t(__builtin__.object) + | Proxy of C++ operator_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> operator_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fixtype + | operator_info_t_fixtype_get(self) -> uchar + | + | flags + | operator_info_t_flags_get(self) -> uchar + | + | precedence + | operator_info_t_precedence_get(self) -> uchar + | + | text + | operator_info_t_text_get(self) -> char const * + | + | thisown + | The membership flag + | + | valency + | operator_info_t_valency_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_operator_info_t(self) + +Help on class optblock_t in module ida_hexrays: + +class optblock_t(__builtin__.object) + | Proxy of C++ optblock_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> optblock_t + | + | __repr__ = _swig_repr(self) + | + | func(self, *args) + | func(self, blk) -> int + | + | install(self, *args) + | install(self) + | + | remove(self, *args) + | remove(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_optblock_t(self) + +Help on class optinsn_t in module ida_hexrays: + +class optinsn_t(__builtin__.object) + | Proxy of C++ optinsn_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> optinsn_t + | + | __repr__ = _swig_repr(self) + | + | func(self, *args) + | func(self, blk, ins) -> int + | + | install(self, *args) + | install(self) + | + | remove(self, *args) + | remove(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_optinsn_t(self) + +Help on function parse_user_call in module ida_hexrays: + +parse_user_call(*args) + parse_user_call(udc, decl, silent) -> bool + + + Convert function type declaration into internal structure + + @param udc: - pointer to output structure (C++: udcall_t *) + @param decl: - function type declaration (C++: const char *) + @param silent: - if TRUE: do not show warning in case of incorrect + type (C++: bool) + @return: success + +Help on function partial_type_num in module ida_hexrays: + +partial_type_num(*args) + partial_type_num(type) -> int + + + Calculate number of partial subtypes. + + @param type (C++: const tinfo_t &) + @return: number of partial subtypes. The bigger is this number, the + uglier is the type. + +Help on function print_vdloc in module ida_hexrays: + +print_vdloc(*args) + print_vdloc(loc, nbytes) + + + Print vdloc. Since vdloc does not always carry the size info, we pass + it as NBYTES.. + + @param loc (C++: const vdloc_t &) + @param nbytes (C++: int) + +Help on function property_op_to_typename in module ida_hexrays: + +property_op_to_typename(self) + +Help on class qlist_cinsn_t in module ida_hexrays: + +class qlist_cinsn_t(__builtin__.object) + | Proxy of C++ qlist< cinsn_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> qlist_cinsn_t + | __init__(self, x) -> qlist_cinsn_t + | + | __ne__(self, *args) + | __ne__(self, x) -> bool + | + | __repr__ = _swig_repr(self) + | + | back(self, *args) + | back(self) -> cinsn_t + | back(self) -> cinsn_t + | + | begin(self, *args) + | begin(self) -> qlist_cinsn_t_iterator + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qlist_cinsn_t_iterator + | + | erase(self, *args) + | erase(self, p) -> qlist< cinsn_t >::iterator + | erase(self, p1, p2) + | erase(self, p) + | + | front(self, *args) + | front(self) -> cinsn_t + | front(self) -> cinsn_t + | + | insert(self, *args) + | insert(self, p, x) -> qlist< cinsn_t >::iterator + | insert(self, p) -> qlist< cinsn_t >::iterator + | insert(self, p, x) -> qlist_cinsn_t_iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | pop_front(self, *args) + | pop_front(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> cinsn_t + | + | push_front(self, *args) + | push_front(self, x) + | + | rbegin(self, *args) + | rbegin(self) -> qlist< cinsn_t >::reverse_iterator + | rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | rend(self, *args) + | rend(self) -> qlist< cinsn_t >::reverse_iterator + | rend(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, x) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qlist_cinsn_t(self) + +Help on class qlist_cinsn_t_iterator in module ida_hexrays: + +class qlist_cinsn_t_iterator(__builtin__.object) + | Proxy of C++ qlist_cinsn_t_iterator class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> qlist_cinsn_t_iterator + | + | __ne__(self, *args) + | __ne__(self, x) -> bool + | + | __next__(self, *args) + | __next__(self) + | + | __repr__ = _swig_repr(self) + | + | next = __next__(self, *args) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cur + | qlist_cinsn_t_iterator_cur_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qlist_cinsn_t_iterator(self) + +Help on class qstring_printer_t in module ida_hexrays: + +class qstring_printer_t(vc_printer_t) + | Proxy of C++ qstring_printer_t class. + | + | Method resolution order: + | qstring_printer_t + | vc_printer_t + | vd_printer_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, f, tags) -> qstring_printer_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, indent, format) -> int + | + | get_s(self, *args) + | get_s(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | s + | + | thisown + | The membership flag + | + | with_tags + | qstring_printer_t_with_tags_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Methods inherited from vc_printer_t: + | + | __disown__(self) + | + | oneliner(self, *args) + | oneliner(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vc_printer_t: + | + | func + | vc_printer_t_func_get(self) -> cfunc_t + | + | lastchar + | vc_printer_t_lastchar_get(self) -> char + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from vc_printer_t: + | + | __swig_destroy__ = + | delete_vc_printer_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_printer_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + +Help on function qswap in module ida_hexrays: + +qswap(*args) + qswap(a, b) + +Help on class qvector_carg_t in module ida_hexrays: + +class qvector_carg_t(__builtin__.object) + | Proxy of C++ qvector< carg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> carg_t + | + | __init__(self, *args) + | __init__(self) -> qvector_carg_t + | __init__(self, x) -> qvector_carg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> carg_t + | begin(self) -> carg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> carg_t + | end(self) -> carg_t + | + | erase(self, *args) + | erase(self, it) -> carg_t + | erase(self, first, last) -> carg_t + | + | extract(self, *args) + | extract(self) -> carg_t + | + | find(self, *args) + | find(self, x) -> carg_t + | find(self, x) -> carg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=carg_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> carg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> carg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qvector_carg_t(self) + +Help on class qvector_ccase_t in module ida_hexrays: + +class qvector_ccase_t(__builtin__.object) + | Proxy of C++ qvector< ccase_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> ccase_t + | + | __init__(self, *args) + | __init__(self) -> qvector_ccase_t + | __init__(self, x) -> qvector_ccase_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> ccase_t + | begin(self) -> ccase_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ccase_t + | end(self) -> ccase_t + | + | erase(self, *args) + | erase(self, it) -> ccase_t + | erase(self, first, last) -> ccase_t + | + | extract(self, *args) + | extract(self) -> ccase_t + | + | find(self, *args) + | find(self, x) -> ccase_t + | find(self, x) -> ccase_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=ccase_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> ccase_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ccase_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qvector_ccase_t(self) + +Help on class qvector_history_t in module ida_hexrays: + +class qvector_history_t(__builtin__.object) + | Proxy of C++ qvector< history_item_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> history_item_t + | + | __init__(self, *args) + | __init__(self) -> qvector_history_t + | __init__(self, x) -> qvector_history_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> history_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> history_item_t + | begin(self) -> history_item_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> history_item_t + | end(self) -> history_item_t + | + | erase(self, *args) + | erase(self, it) -> history_item_t + | erase(self, first, last) -> history_item_t + | + | extract(self, *args) + | extract(self) -> history_item_t + | + | find(self, *args) + | find(self, x) -> history_item_t + | find(self, x) -> history_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=history_item_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> history_item_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> history_item_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qvector_history_t(self) + +Help on class qvector_lvar_t in module ida_hexrays: + +class qvector_lvar_t(__builtin__.object) + | Proxy of C++ qvector< lvar_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> lvar_t + | + | __init__(self, *args) + | __init__(self) -> qvector_lvar_t + | __init__(self, x) -> qvector_lvar_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> lvar_t + | begin(self) -> lvar_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> lvar_t + | end(self) -> lvar_t + | + | erase(self, *args) + | erase(self, it) -> lvar_t + | erase(self, first, last) -> lvar_t + | + | extract(self, *args) + | extract(self) -> lvar_t + | + | find(self, *args) + | find(self, x) -> lvar_t + | find(self, x) -> lvar_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=lvar_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> lvar_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> lvar_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qvector_lvar_t(self) + +Help on function reg2mreg in module ida_hexrays: + +reg2mreg(*args) + reg2mreg(reg) -> mreg_t + + + Map a processor register to a microregister. + + @param reg: processor register number (C++: int) + @return: microregister register id or mr_none + +Help on function remitem in module ida_hexrays: + +remitem(*args) + remitem(e) + +Help on function remove_hexrays_callback in module ida_hexrays: + +remove_hexrays_callback(callback) + Deprecated. Please use Hexrays_Hooks instead + +Help on function restore_user_cmts in module ida_hexrays: + +restore_user_cmts(*args) + restore_user_cmts(func_ea) -> user_cmts_t + + + Restore user defined comments from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined comments. The returned object must + be deleted by the caller using delete_user_cmts() + +Help on function restore_user_defined_calls in module ida_hexrays: + +restore_user_defined_calls(*args) + restore_user_defined_calls(udcalls, func_ea) -> bool + + + Restore user defined function calls from the database. + + @param udcalls: ptr to output buffer (C++: udcall_map_t *) + @param func_ea: entry address of the function (C++: ea_t) + @return: success + +Help on function restore_user_iflags in module ida_hexrays: + +restore_user_iflags(*args) + restore_user_iflags(func_ea) -> user_iflags_t + + + Restore user defined citem iflags from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined iflags. The returned object must + be deleted by the caller using delete_user_iflags() + +Help on function restore_user_labels in module ida_hexrays: + +restore_user_labels(*args) + restore_user_labels(func_ea) -> user_labels_t + + + Restore user defined labels from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined labels. The returned object must + be deleted by the caller using delete_user_labels() + +Help on function restore_user_lvar_settings in module ida_hexrays: + +restore_user_lvar_settings(*args) + restore_user_lvar_settings(lvinf, func_ea) -> bool + + + Restore user defined local variable settings in the database. + + @param lvinf: ptr to output buffer (C++: lvar_uservec_t *) + @param func_ea: entry address of the function (C++: ea_t) + @return: success + +Help on function restore_user_numforms in module ida_hexrays: + +restore_user_numforms(*args) + restore_user_numforms(func_ea) -> user_numforms_t + + + Restore user defined number formats from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined number formats. The returned + object must be deleted by the caller using + delete_user_numforms() + +Help on function restore_user_unions in module ida_hexrays: + +restore_user_unions(*args) + restore_user_unions(func_ea) -> user_unions_t + + + Restore user defined union field selections from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of union field selections The returned object must + be deleted by the caller using delete_user_unions() + +Help on class rlist_t in module ida_hexrays: + +class rlist_t(bitset_t) + | Proxy of C++ rlist_t class. + | + | Method resolution order: + | rlist_t + | bitset_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rlist_t + | __init__(self, m) -> rlist_t + | __init__(self, reg, width) -> rlist_t + | + | __repr__ = _swig_repr(self) + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rlist_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from bitset_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __iter__(self) + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __len__ = count(self, *args) + | count(self) -> int + | count(self, bit) -> int + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | add(self, *args) + | add(self, bit) -> bool + | add(self, bit, width) -> bool + | add(self, ml) -> bool + | + | back(self, *args) + | back(self) -> int + | + | begin(self, *args) + | begin(self) -> bitset_t::iterator + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | copy(self, *args) + | copy(self, m) -> bitset_t + | + | count(self, *args) + | count(self) -> int + | count(self, bit) -> int + | + | cut_at(self, *args) + | cut_at(self, maxbit) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> bitset_t::iterator + | + | fill_with_ones(self, *args) + | fill_with_ones(self, maxbit) + | + | front(self, *args) + | front(self) -> int + | + | has(self, *args) + | has(self, bit) -> bool + | + | has_all(self, *args) + | has_all(self, bit, width) -> bool + | + | has_any(self, *args) + | has_any(self, bit, width) -> bool + | + | has_common(self, *args) + | has_common(self, ml) -> bool + | + | inc(self, *args) + | inc(self, p, n=1) + | + | includes(self, *args) + | includes(self, ml) -> bool + | + | intersect(self, *args) + | intersect(self, ml) -> bool + | + | is_subset_of(self, *args) + | is_subset_of(self, ml) -> bool + | + | itat(self, *args) + | itat(self, n) -> bitset_t::iterator + | + | itv(self, *args) + | itv(self, it) -> int + | + | last(self, *args) + | last(self) -> int + | + | shift_down(self, *args) + | shift_down(self, shift) + | + | sub(self, *args) + | sub(self, bit) -> bool + | sub(self, bit, width) -> bool + | sub(self, ml) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from bitset_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function save_user_cmts in module ida_hexrays: + +save_user_cmts(*args) + save_user_cmts(func_ea, user_cmts) + + + Save user defined comments into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param user_cmts: collection of user defined comments (C++: const + user_cmts_t *) + +Help on function save_user_defined_calls in module ida_hexrays: + +save_user_defined_calls(*args) + save_user_defined_calls(func_ea, udcalls) + + + Save user defined local function calls into the database. + + @param func_ea: entry address of the function (C++: ea_t) + @param udcalls: user-specified info about user defined function calls + (C++: const udcall_map_t &) + +Help on function save_user_iflags in module ida_hexrays: + +save_user_iflags(*args) + save_user_iflags(func_ea, iflags) + + + Save user defined citem iflags into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param iflags: collection of user defined citem iflags (C++: const + user_iflags_t *) + +Help on function save_user_labels in module ida_hexrays: + +save_user_labels(*args) + save_user_labels(func_ea, user_labels) + + + Save user defined labels into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param user_labels: collection of user defined labels (C++: const + user_labels_t *) + +Help on function save_user_lvar_settings in module ida_hexrays: + +save_user_lvar_settings(*args) + save_user_lvar_settings(func_ea, lvinf) + + + Save user defined local variable settings into the database. + + @param func_ea: entry address of the function (C++: ea_t) + @param lvinf: user-specified info about local variables (C++: const + lvar_uservec_t &) + +Help on function save_user_numforms in module ida_hexrays: + +save_user_numforms(*args) + save_user_numforms(func_ea, numforms) + + + Save user defined number formats into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param numforms: collection of user defined comments (C++: const + user_numforms_t *) + +Help on function save_user_unions in module ida_hexrays: + +save_user_unions(*args) + save_user_unions(func_ea, unions) + + + Save user defined union field selections into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param unions: collection of union field selections (C++: const + user_unions_t *) + +Help on class scif_t in module ida_hexrays: + +class scif_t(vdloc_t) + | Proxy of C++ scif_t class. + | + | Method resolution order: + | scif_t + | vdloc_t + | ida_typeinf.argloc_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _mba, n, tif) -> scif_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | mba + | scif_t_mba_get(self) -> mbl_array_t + | + | name + | scif_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | scif_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_scif_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from vdloc_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _set_reg1(self, *args) + | _set_reg1(self, r1) + | + | compare(self, *args) + | compare(self, r) -> int + | + | is_aliasable(self, *args) + | is_aliasable(self, mb, size) -> bool + | + | reg1(self, *args) + | reg1(self) -> int + | + | set_reg1(self, *args) + | set_reg1(self, r1) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_typeinf.argloc_t: + | + | _consume_rrel(self, *args) + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) + | _set_badloc(self) + | + | _set_biggest(self, *args) + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) + | _set_ea(self, _ea) + | + | _set_reg2(self, *args) + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) + | _set_stkoff(self, off) + | + | advance(self, *args) + | advance(self, delta) -> bool + | + | atype(self, *args) + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) + | calc_offset(self) -> sval_t + | + | consume_rrel(self, *args) + | consume_rrel(self, p) + | + | consume_scattered(self, *args) + | consume_scattered(self, p) + | + | get_biggest(self, *args) + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) + | get_custom(self) -> void * + | + | get_ea(self, *args) + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) + | has_reg(self) -> bool + | + | has_stkoff(self, *args) + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) + | is_badloc(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_ea(self, *args) + | is_ea(self) -> bool + | + | is_fragmented(self, *args) + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_rrel(self, *args) + | is_rrel(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) + | justify_stkoff_right(self, size, _slotsize) + | + | reg2(self, *args) + | reg2(self) -> int + | + | regoff(self, *args) + | regoff(self) -> int + | + | scattered(self, *args) + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) + | set_badloc(self) + | + | set_ea(self, *args) + | set_ea(self, _ea) + | + | set_reg2(self, *args) + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) + | set_stkoff(self, off) + | + | stkoff(self, *args) + | stkoff(self) -> sval_t + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_typeinf.argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class scif_visitor_t in module ida_hexrays: + +class scif_visitor_t(__builtin__.object) + | Proxy of C++ scif_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> scif_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_scif_mop(self, *args) + | visit_scif_mop(self, r, off) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_scif_visitor_t(self) + +Help on function select_udt_by_offset in module ida_hexrays: + +select_udt_by_offset(*args) + select_udt_by_offset(udts, ops, applicator) -> int + + + Select UDT + + @param udts: list of UDT tinfo_t for the selection, if NULL or empty + then UDTs from the "Local types" will be used (C++: const + qvector < tinfo_t > *) + @param ops: operands (C++: const ui_stroff_ops_t &) + @param applicator (C++: ui_stroff_applicator_t &) + +Help on function send_database in module ida_hexrays: + +send_database(*args) + send_database(err, silent) + + + Send the database to Hex-Rays. This function sends the current + database to the Hex-Rays server. The database is sent in the + compressed form over an encrypted (SSL) connection. + + @param err: failure description object. Empty hexrays_failure_t + object can be used if error information is not available. + (C++: const hexrays_failure_t &) + @param silent: if false, a dialog box will be displayed before sending + the database. (C++: bool) + +Help on function set2jcnd in module ida_hexrays: + +set2jcnd(*args) + set2jcnd(code) -> mcode_t + +Help on function set_type in module ida_hexrays: + +set_type(*args) + set_type(id, tif, source, force=False) -> bool + + + Set a global type. + + @param id: address or id of the object (C++: uval_t) + @param tif: new type info (C++: const tinfo_t &) + @param source: where the type comes from (C++: type_source_t) + @param force: true means to set the type as is, false means to merge + the new type with the possibly existing old type info. + (C++: bool) + @return: success + +Help on class simple_graph_t in module ida_hexrays: + +class simple_graph_t(__builtin__.object) + | Proxy of C++ simple_graph_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | colored_gdl_edges + | simple_graph_t_colored_gdl_edges_get(self) -> bool + | + | thisown + | The membership flag + | + | title + | simple_graph_t_title_get(self) -> qstring * + +Help on class stkvar_ref_t in module ida_hexrays: + +class stkvar_ref_t(__builtin__.object) + | Proxy of C++ stkvar_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, m, o) -> stkvar_ref_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | get_stkvar(self, *args) + | get_stkvar(self, p_off=None) -> member_t * + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | mba + | stkvar_ref_t_mba_get(self) -> mbl_array_t + | + | off + | stkvar_ref_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_stkvar_ref_t(self) + +Help on function swap_mcode_relation in module ida_hexrays: + +swap_mcode_relation(*args) + swap_mcode_relation(code) -> mcode_t + +Help on function swapped_relation in module ida_hexrays: + +swapped_relation(*args) + swapped_relation(op) -> ctype_t + + + Swap a comparison operator. For example, cot_sge becomes cot_sle. + + + @param op (C++: ctype_t) + +Help on function term_hexrays_plugin in module ida_hexrays: + +term_hexrays_plugin(*args) + term_hexrays_plugin() + + + Stop working with hex-rays decompiler. + +Help on class treeloc_t in module ida_hexrays: + +class treeloc_t(__builtin__.object) + | Proxy of C++ treeloc_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> treeloc_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | treeloc_t_ea_get(self) -> ea_t + | + | itp + | treeloc_t_itp_get(self) -> item_preciser_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_treeloc_t(self) + +Help on class udc_filter_t in module ida_hexrays: + +class udc_filter_t(microcode_filter_t) + | Proxy of C++ udc_filter_t class. + | + | Method resolution order: + | udc_filter_t + | microcode_filter_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> udc_filter_t + | + | __repr__ = _swig_repr(self) + | + | apply(self, *args) + | apply(self, cdg) -> merror_t + | + | init(self, *args) + | init(self, decl) -> bool + | + | match(self, *args) + | match(self, cdg) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udc_filter_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from microcode_filter_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function udcall_map_begin in module ida_hexrays: + +udcall_map_begin(*args) + udcall_map_begin(map) -> udcall_map_iterator_t + + + Get iterator pointing to the beginning of udcall_map_t. + + + @param map (C++: const udcall_map_t *) + +Help on function udcall_map_clear in module ida_hexrays: + +udcall_map_clear(*args) + udcall_map_clear(map) + + + Clear udcall_map_t. + + + @param map (C++: udcall_map_t *) + +Help on function udcall_map_end in module ida_hexrays: + +udcall_map_end(*args) + udcall_map_end(map) -> udcall_map_iterator_t + + + Get iterator pointing to the end of udcall_map_t. + + + @param map (C++: const udcall_map_t *) + +Help on function udcall_map_erase in module ida_hexrays: + +udcall_map_erase(*args) + udcall_map_erase(map, p) + + + Erase current element from udcall_map_t. + + + @param map (C++: udcall_map_t *) + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_find in module ida_hexrays: + +udcall_map_find(*args) + udcall_map_find(map, key) -> udcall_map_iterator_t + + + Find the specified key in udcall_map_t. + + + @param map (C++: const udcall_map_t *) + @param key (C++: const ea_t &) + +Help on function udcall_map_first in module ida_hexrays: + +udcall_map_first(*args) + udcall_map_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_free in module ida_hexrays: + +udcall_map_free(*args) + udcall_map_free(map) + + + Delete udcall_map_t instance. + + + @param map (C++: udcall_map_t *) + +Help on function udcall_map_insert in module ida_hexrays: + +udcall_map_insert(*args) + udcall_map_insert(map, key, val) -> udcall_map_iterator_t + + + Insert new (ea_t, 'udcall_t' ) pair into udcall_map_t. + + + @param map (C++: udcall_map_t *) + @param key (C++: const ea_t &) + @param val (C++: const udcall_t &) + +Help on class udcall_map_iterator_t in module ida_hexrays: + +class udcall_map_iterator_t(__builtin__.object) + | Proxy of C++ udcall_map_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> udcall_map_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | udcall_map_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udcall_map_iterator_t(self) + +Help on function udcall_map_new in module ida_hexrays: + +udcall_map_new(*args) + udcall_map_new() -> udcall_map_t * + + + Create a new udcall_map_t instance. + +Help on function udcall_map_next in module ida_hexrays: + +udcall_map_next(*args) + udcall_map_next(p) -> udcall_map_iterator_t + + + Move to the next element. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_prev in module ida_hexrays: + +udcall_map_prev(*args) + udcall_map_prev(p) -> udcall_map_iterator_t + + + Move to the previous element. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_second in module ida_hexrays: + +udcall_map_second(*args) + udcall_map_second(p) -> udcall_t + + + Get reference to the current map value. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_size in module ida_hexrays: + +udcall_map_size(*args) + udcall_map_size(map) -> size_t + + + Get size of udcall_map_t. + + + @param map (C++: udcall_map_t *) + +Help on class udcall_t in module ida_hexrays: + +class udcall_t(__builtin__.object) + | Proxy of C++ udcall_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> udcall_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | udcall_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tif + | udcall_t_tif_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udcall_t(self) + +Help on class ui_stroff_applicator_t in module ida_hexrays: + +class ui_stroff_applicator_t(__builtin__.object) + | Proxy of C++ ui_stroff_applicator_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_applicator_t + | + | __repr__ = _swig_repr(self) + | + | apply(self, *args) + | apply(self, opnum, path) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ui_stroff_applicator_t(self) + +Help on class ui_stroff_op_t in module ida_hexrays: + +class ui_stroff_op_t(__builtin__.object) + | Proxy of C++ ui_stroff_op_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_op_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | offset + | ui_stroff_op_t_offset_get(self) -> uval_t + | + | text + | ui_stroff_op_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ui_stroff_op_t(self) + +Help on class ui_stroff_ops_t in module ida_hexrays: + +class ui_stroff_ops_t(__builtin__.object) + | Proxy of C++ qvector< ui_stroff_op_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> ui_stroff_op_t + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_ops_t + | __init__(self, x) -> ui_stroff_ops_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> ui_stroff_op_t + | begin(self) -> ui_stroff_op_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ui_stroff_op_t + | end(self) -> ui_stroff_op_t + | + | erase(self, *args) + | erase(self, it) -> ui_stroff_op_t + | erase(self, first, last) -> ui_stroff_op_t + | + | extract(self, *args) + | extract(self) -> ui_stroff_op_t + | + | find(self, *args) + | find(self, x) -> ui_stroff_op_t + | find(self, x) -> ui_stroff_op_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=ui_stroff_op_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> ui_stroff_op_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ui_stroff_op_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ui_stroff_ops_t(self) + +Help on function user_cmts_begin in module ida_hexrays: + +user_cmts_begin(*args) + user_cmts_begin(map) -> user_cmts_iterator_t + + + Get iterator pointing to the beginning of user_cmts_t. + + + @param map (C++: const user_cmts_t *) + +Help on function user_cmts_clear in module ida_hexrays: + +user_cmts_clear(*args) + user_cmts_clear(map) + + + Clear user_cmts_t. + + + @param map (C++: user_cmts_t *) + +Help on function user_cmts_end in module ida_hexrays: + +user_cmts_end(*args) + user_cmts_end(map) -> user_cmts_iterator_t + + + Get iterator pointing to the end of user_cmts_t. + + + @param map (C++: const user_cmts_t *) + +Help on function user_cmts_erase in module ida_hexrays: + +user_cmts_erase(*args) + user_cmts_erase(map, p) + + + Erase current element from user_cmts_t. + + + @param map (C++: user_cmts_t *) + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_find in module ida_hexrays: + +user_cmts_find(*args) + user_cmts_find(map, key) -> user_cmts_iterator_t + + + Find the specified key in user_cmts_t. + + + @param map (C++: const user_cmts_t *) + @param key (C++: const treeloc_t &) + +Help on function user_cmts_first in module ida_hexrays: + +user_cmts_first(*args) + user_cmts_first(p) -> treeloc_t + + + Get reference to the current map key. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_free in module ida_hexrays: + +user_cmts_free(*args) + user_cmts_free(map) + + + Delete user_cmts_t instance. + + + @param map (C++: user_cmts_t *) + +Help on function user_cmts_insert in module ida_hexrays: + +user_cmts_insert(*args) + user_cmts_insert(map, key, val) -> user_cmts_iterator_t + + + Insert new ( 'treeloc_t' , 'citem_cmt_t' ) pair into user_cmts_t. + + + @param map (C++: user_cmts_t *) + @param key (C++: const treeloc_t &) + @param val (C++: const citem_cmt_t &) + +Help on class user_cmts_iterator_t in module ida_hexrays: + +class user_cmts_iterator_t(__builtin__.object) + | Proxy of C++ user_cmts_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_cmts_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | user_cmts_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_cmts_iterator_t(self) + +Help on function user_cmts_new in module ida_hexrays: + +user_cmts_new(*args) + user_cmts_new() -> user_cmts_t + + + Create a new user_cmts_t instance. + +Help on function user_cmts_next in module ida_hexrays: + +user_cmts_next(*args) + user_cmts_next(p) -> user_cmts_iterator_t + + + Move to the next element. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_prev in module ida_hexrays: + +user_cmts_prev(*args) + user_cmts_prev(p) -> user_cmts_iterator_t + + + Move to the previous element. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_second in module ida_hexrays: + +user_cmts_second(*args) + user_cmts_second(p) -> citem_cmt_t + + + Get reference to the current map value. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_size in module ida_hexrays: + +user_cmts_size(*args) + user_cmts_size(map) -> size_t + + + Get size of user_cmts_t. + + + @param map (C++: user_cmts_t *) + +Help on class user_cmts_t in module ida_hexrays: + +class user_cmts_t(__builtin__.object) + | Proxy of C++ std::map< treeloc_t,citem_cmt_t > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_cmts_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> citem_cmt_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | user_cmts_begin(map) -> user_cmts_iterator_t + | + | __clear = + | user_cmts_clear(map) + | + | __end = + | user_cmts_end(map) -> user_cmts_iterator_t + | + | __erase = + | user_cmts_erase(map, p) + | + | __find = + | user_cmts_find(map, key) -> user_cmts_iterator_t + | + | __first = + | user_cmts_first(p) -> treeloc_t + | + | __insert = + | user_cmts_insert(map, key, val) -> user_cmts_iterator_t + | + | __next = + | user_cmts_next(p) -> user_cmts_iterator_t + | + | __second = + | user_cmts_second(p) -> citem_cmt_t + | + | __size = + | user_cmts_size(map) -> size_t + | + | __swig_destroy__ = + | delete_user_cmts_t(self) + | + | keytype = + | Proxy of C++ treeloc_t class. + | + | valuetype = + | Proxy of C++ citem_cmt_t class. + +Help on function user_iflags_begin in module ida_hexrays: + +user_iflags_begin(*args) + user_iflags_begin(map) -> user_iflags_iterator_t + + + Get iterator pointing to the beginning of user_iflags_t. + + + @param map (C++: const user_iflags_t *) + +Help on function user_iflags_clear in module ida_hexrays: + +user_iflags_clear(*args) + user_iflags_clear(map) + + + Clear user_iflags_t. + + + @param map (C++: user_iflags_t *) + +Help on function user_iflags_end in module ida_hexrays: + +user_iflags_end(*args) + user_iflags_end(map) -> user_iflags_iterator_t + + + Get iterator pointing to the end of user_iflags_t. + + + @param map (C++: const user_iflags_t *) + +Help on function user_iflags_erase in module ida_hexrays: + +user_iflags_erase(*args) + user_iflags_erase(map, p) + + + Erase current element from user_iflags_t. + + + @param map (C++: user_iflags_t *) + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_find in module ida_hexrays: + +user_iflags_find(*args) + user_iflags_find(map, key) -> user_iflags_iterator_t + + + Find the specified key in user_iflags_t. + + + @param map (C++: const user_iflags_t *) + @param key (C++: const citem_locator_t &) + +Help on function user_iflags_first in module ida_hexrays: + +user_iflags_first(*args) + user_iflags_first(p) -> citem_locator_t + + + Get reference to the current map key. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_free in module ida_hexrays: + +user_iflags_free(*args) + user_iflags_free(map) + + + Delete user_iflags_t instance. + + + @param map (C++: user_iflags_t *) + +Help on function user_iflags_insert in module ida_hexrays: + +user_iflags_insert(*args) + user_iflags_insert(map, key, val) -> user_iflags_iterator_t + + + Insert new ( 'citem_locator_t' , int32) pair into user_iflags_t. + + + @param map (C++: user_iflags_t *) + @param key (C++: const citem_locator_t &) + @param val (C++: const int32 &) + +Help on class user_iflags_iterator_t in module ida_hexrays: + +class user_iflags_iterator_t(__builtin__.object) + | Proxy of C++ user_iflags_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_iflags_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | user_iflags_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_iflags_iterator_t(self) + +Help on function user_iflags_new in module ida_hexrays: + +user_iflags_new(*args) + user_iflags_new() -> user_iflags_t + + + Create a new user_iflags_t instance. + +Help on function user_iflags_next in module ida_hexrays: + +user_iflags_next(*args) + user_iflags_next(p) -> user_iflags_iterator_t + + + Move to the next element. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_prev in module ida_hexrays: + +user_iflags_prev(*args) + user_iflags_prev(p) -> user_iflags_iterator_t + + + Move to the previous element. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_second in module ida_hexrays: + +user_iflags_second(*args) + user_iflags_second(p) -> int32 const & + + + Get reference to the current map value. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_size in module ida_hexrays: + +user_iflags_size(*args) + user_iflags_size(map) -> size_t + + + Get size of user_iflags_t. + + + @param map (C++: user_iflags_t *) + +Help on class user_iflags_t in module ida_hexrays: + +class user_iflags_t(__builtin__.object) + | Proxy of C++ std::map< citem_locator_t,int32 > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_iflags_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> int & + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | user_iflags_begin(map) -> user_iflags_iterator_t + | + | __clear = + | user_iflags_clear(map) + | + | __end = + | user_iflags_end(map) -> user_iflags_iterator_t + | + | __erase = + | user_iflags_erase(map, p) + | + | __find = + | user_iflags_find(map, key) -> user_iflags_iterator_t + | + | __first = + | user_iflags_first(p) -> citem_locator_t + | + | __insert = + | user_iflags_insert(map, key, val) -> user_iflags_iterator_t + | + | __next = + | user_iflags_next(p) -> user_iflags_iterator_t + | + | __second = + | user_iflags_second(p) -> int32 const & + | + | __size = + | user_iflags_size(map) -> size_t + | + | __swig_destroy__ = + | delete_user_iflags_t(self) + | + | keytype = + | Proxy of C++ citem_locator_t class. + | + | valuetype = + | int(x=0) -> int or long + | int(x, base=10) -> int or long + | + | Convert a number or string to an integer, or return 0 if no arguments + | are given. If x is floating point, the conversion truncates towards zero. + | If x is outside the integer range, the function returns a long instead. + | + | If x is not a number or if base is given, then x must be a string or + | Unicode object representing an integer literal in the given base. The + | literal can be preceded by '+' or '-' and be surrounded by whitespace. + | The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to + | interpret the base from the string as an integer literal. + | >>> int('0b100', base=0) + | 4 + +Help on function user_labels_begin in module ida_hexrays: + +user_labels_begin(*args) + user_labels_begin(map) -> user_labels_iterator_t + + + Get iterator pointing to the beginning of user_labels_t. + + + @param map (C++: const user_labels_t *) + +Help on function user_labels_clear in module ida_hexrays: + +user_labels_clear(*args) + user_labels_clear(map) + + + Clear user_labels_t. + + + @param map (C++: user_labels_t *) + +Help on function user_labels_end in module ida_hexrays: + +user_labels_end(*args) + user_labels_end(map) -> user_labels_iterator_t + + + Get iterator pointing to the end of user_labels_t. + + + @param map (C++: const user_labels_t *) + +Help on function user_labels_erase in module ida_hexrays: + +user_labels_erase(*args) + user_labels_erase(map, p) + + + Erase current element from user_labels_t. + + + @param map (C++: user_labels_t *) + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_find in module ida_hexrays: + +user_labels_find(*args) + user_labels_find(map, key) -> user_labels_iterator_t + + + Find the specified key in user_labels_t. + + + @param map (C++: const user_labels_t *) + @param key (C++: const int &) + +Help on function user_labels_first in module ida_hexrays: + +user_labels_first(*args) + user_labels_first(p) -> int const & + + + Get reference to the current map key. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_free in module ida_hexrays: + +user_labels_free(*args) + user_labels_free(map) + + + Delete user_labels_t instance. + + + @param map (C++: user_labels_t *) + +Help on function user_labels_insert in module ida_hexrays: + +user_labels_insert(*args) + user_labels_insert(map, key, val) -> user_labels_iterator_t + + + Insert new (int, qstring) pair into user_labels_t. + + + @param map (C++: user_labels_t *) + @param key (C++: const int &) + @param val (C++: const qstring &) + +Help on class user_labels_iterator_t in module ida_hexrays: + +class user_labels_iterator_t(__builtin__.object) + | Proxy of C++ user_labels_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_labels_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | user_labels_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_labels_iterator_t(self) + +Help on function user_labels_new in module ida_hexrays: + +user_labels_new(*args) + user_labels_new() -> user_labels_t + + + Create a new user_labels_t instance. + +Help on function user_labels_next in module ida_hexrays: + +user_labels_next(*args) + user_labels_next(p) -> user_labels_iterator_t + + + Move to the next element. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_prev in module ida_hexrays: + +user_labels_prev(*args) + user_labels_prev(p) -> user_labels_iterator_t + + + Move to the previous element. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_second in module ida_hexrays: + +user_labels_second(*args) + user_labels_second(p) -> qstring & + + + Get reference to the current map value. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_size in module ida_hexrays: + +user_labels_size(*args) + user_labels_size(map) -> size_t + + + Get size of user_labels_t. + + + @param map (C++: user_labels_t *) + +Help on class user_labels_t in module ida_hexrays: + +class user_labels_t(__builtin__.object) + | Proxy of C++ std::map< int,qstring > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> user_labels_t + | + | __repr__ = _swig_repr(self) + | + | at(self, *args) + | at(self, _Keyval) -> _qstring< char > & + | + | size(self, *args) + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_labels_t(self) + +Help on class user_lvar_modifier_t in module ida_hexrays: + +class user_lvar_modifier_t(__builtin__.object) + | Proxy of C++ user_lvar_modifier_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> user_lvar_modifier_t + | + | __repr__ = _swig_repr(self) + | + | modify_lvars(self, *args) + | modify_lvars(self, lvinf) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_lvar_modifier_t(self) + +Help on function user_numforms_begin in module ida_hexrays: + +user_numforms_begin(*args) + user_numforms_begin(map) -> user_numforms_iterator_t + + + Get iterator pointing to the beginning of user_numforms_t. + + + @param map (C++: const user_numforms_t *) + +Help on function user_numforms_clear in module ida_hexrays: + +user_numforms_clear(*args) + user_numforms_clear(map) + + + Clear user_numforms_t. + + + @param map (C++: user_numforms_t *) + +Help on function user_numforms_end in module ida_hexrays: + +user_numforms_end(*args) + user_numforms_end(map) -> user_numforms_iterator_t + + + Get iterator pointing to the end of user_numforms_t. + + + @param map (C++: const user_numforms_t *) + +Help on function user_numforms_erase in module ida_hexrays: + +user_numforms_erase(*args) + user_numforms_erase(map, p) + + + Erase current element from user_numforms_t. + + + @param map (C++: user_numforms_t *) + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_find in module ida_hexrays: + +user_numforms_find(*args) + user_numforms_find(map, key) -> user_numforms_iterator_t + + + Find the specified key in user_numforms_t. + + + @param map (C++: const user_numforms_t *) + @param key (C++: const operand_locator_t &) + +Help on function user_numforms_first in module ida_hexrays: + +user_numforms_first(*args) + user_numforms_first(p) -> operand_locator_t + + + Get reference to the current map key. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_free in module ida_hexrays: + +user_numforms_free(*args) + user_numforms_free(map) + + + Delete user_numforms_t instance. + + + @param map (C++: user_numforms_t *) + +Help on function user_numforms_insert in module ida_hexrays: + +user_numforms_insert(*args) + user_numforms_insert(map, key, val) -> user_numforms_iterator_t + + + Insert new ( 'operand_locator_t' , 'number_format_t' ) pair into + user_numforms_t. + + + @param map (C++: user_numforms_t *) + @param key (C++: const operand_locator_t &) + @param val (C++: const number_format_t &) + +Help on class user_numforms_iterator_t in module ida_hexrays: + +class user_numforms_iterator_t(__builtin__.object) + | Proxy of C++ user_numforms_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_numforms_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | user_numforms_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_numforms_iterator_t(self) + +Help on function user_numforms_new in module ida_hexrays: + +user_numforms_new(*args) + user_numforms_new() -> user_numforms_t + + + Create a new user_numforms_t instance. + +Help on function user_numforms_next in module ida_hexrays: + +user_numforms_next(*args) + user_numforms_next(p) -> user_numforms_iterator_t + + + Move to the next element. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_prev in module ida_hexrays: + +user_numforms_prev(*args) + user_numforms_prev(p) -> user_numforms_iterator_t + + + Move to the previous element. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_second in module ida_hexrays: + +user_numforms_second(*args) + user_numforms_second(p) -> number_format_t + + + Get reference to the current map value. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_size in module ida_hexrays: + +user_numforms_size(*args) + user_numforms_size(map) -> size_t + + + Get size of user_numforms_t. + + + @param map (C++: user_numforms_t *) + +Help on class user_numforms_t in module ida_hexrays: + +class user_numforms_t(__builtin__.object) + | Proxy of C++ std::map< operand_locator_t,number_format_t > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_numforms_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> number_format_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | user_numforms_begin(map) -> user_numforms_iterator_t + | + | __clear = + | user_numforms_clear(map) + | + | __end = + | user_numforms_end(map) -> user_numforms_iterator_t + | + | __erase = + | user_numforms_erase(map, p) + | + | __find = + | user_numforms_find(map, key) -> user_numforms_iterator_t + | + | __first = + | user_numforms_first(p) -> operand_locator_t + | + | __insert = + | user_numforms_insert(map, key, val) -> user_numforms_iterator_t + | + | __next = + | user_numforms_next(p) -> user_numforms_iterator_t + | + | __second = + | user_numforms_second(p) -> number_format_t + | + | __size = + | user_numforms_size(map) -> size_t + | + | __swig_destroy__ = + | delete_user_numforms_t(self) + | + | keytype = + | Proxy of C++ operand_locator_t class. + | + | valuetype = + | Proxy of C++ number_format_t class. + +Help on function user_unions_begin in module ida_hexrays: + +user_unions_begin(*args) + user_unions_begin(map) -> user_unions_iterator_t + + + Get iterator pointing to the beginning of user_unions_t. + + + @param map (C++: const user_unions_t *) + +Help on function user_unions_clear in module ida_hexrays: + +user_unions_clear(*args) + user_unions_clear(map) + + + Clear user_unions_t. + + + @param map (C++: user_unions_t *) + +Help on function user_unions_end in module ida_hexrays: + +user_unions_end(*args) + user_unions_end(map) -> user_unions_iterator_t + + + Get iterator pointing to the end of user_unions_t. + + + @param map (C++: const user_unions_t *) + +Help on function user_unions_erase in module ida_hexrays: + +user_unions_erase(*args) + user_unions_erase(map, p) + + + Erase current element from user_unions_t. + + + @param map (C++: user_unions_t *) + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_find in module ida_hexrays: + +user_unions_find(*args) + user_unions_find(map, key) -> user_unions_iterator_t + + + Find the specified key in user_unions_t. + + + @param map (C++: const user_unions_t *) + @param key (C++: const ea_t &) + +Help on function user_unions_first in module ida_hexrays: + +user_unions_first(*args) + user_unions_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_free in module ida_hexrays: + +user_unions_free(*args) + user_unions_free(map) + + + Delete user_unions_t instance. + + + @param map (C++: user_unions_t *) + +Help on function user_unions_insert in module ida_hexrays: + +user_unions_insert(*args) + user_unions_insert(map, key, val) -> user_unions_iterator_t + + + Insert new (ea_t, intvec_t) pair into user_unions_t. + + + @param map (C++: user_unions_t *) + @param key (C++: const ea_t &) + @param val (C++: const intvec_t &) + +Help on class user_unions_iterator_t in module ida_hexrays: + +class user_unions_iterator_t(__builtin__.object) + | Proxy of C++ user_unions_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_unions_iterator_t + | + | __ne__(self, *args) + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(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 + | + | x + | user_unions_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_user_unions_iterator_t(self) + +Help on function user_unions_new in module ida_hexrays: + +user_unions_new(*args) + user_unions_new() -> user_unions_t + + + Create a new user_unions_t instance. + +Help on function user_unions_next in module ida_hexrays: + +user_unions_next(*args) + user_unions_next(p) -> user_unions_iterator_t + + + Move to the next element. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_prev in module ida_hexrays: + +user_unions_prev(*args) + user_unions_prev(p) -> user_unions_iterator_t + + + Move to the previous element. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_second in module ida_hexrays: + +user_unions_second(*args) + user_unions_second(p) -> intvec_t + + + Get reference to the current map value. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_size in module ida_hexrays: + +user_unions_size(*args) + user_unions_size(map) -> size_t + + + Get size of user_unions_t. + + + @param map (C++: user_unions_t *) + +Help on class user_unions_t in module ida_hexrays: + +class user_unions_t(__builtin__.object) + | Proxy of C++ std::map< ea_t,intvec_t > class. + | + | Methods defined here: + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_unions_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | at(self, *args) + | at(self, _Keyval) -> intvec_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __begin = + | user_unions_begin(map) -> user_unions_iterator_t + | + | __clear = + | user_unions_clear(map) + | + | __end = + | user_unions_end(map) -> user_unions_iterator_t + | + | __erase = + | user_unions_erase(map, p) + | + | __find = + | user_unions_find(map, key) -> user_unions_iterator_t + | + | __first = + | user_unions_first(p) -> ea_t const & + | + | __insert = + | user_unions_insert(map, key, val) -> user_unions_iterator_t + | + | __next = + | user_unions_next(p) -> user_unions_iterator_t + | + | __second = + | user_unions_second(p) -> intvec_t + | + | __size = + | user_unions_size(map) -> size_t + | + | __swig_destroy__ = + | delete_user_unions_t(self) + | + | keytype = (, ) + | + | valuetype = + | Proxy of C++ qvector< int > class. + +Help on class uval_ivl_ivlset_t in module ida_hexrays: + +class uval_ivl_ivlset_t(__builtin__.object) + | Proxy of C++ ivlset_tpl< ivl_t,uval_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, v) -> bool + | + | __init__(self, *args) + | __init__(self) -> uval_ivl_ivlset_t + | __init__(self, ivl) -> uval_ivl_ivlset_t + | + | __ne__(self, *args) + | __ne__(self, v) -> bool + | + | __repr__ = _swig_repr(self) + | + | all_values(self, *args) + | all_values(self) -> bool + | + | begin(self, *args) + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | getivl(self, *args) + | getivl(self, idx) -> ivl_t + | + | lastivl(self, *args) + | lastivl(self) -> ivl_t + | + | nivls(self, *args) + | nivls(self) -> size_t + | + | qclear(self, *args) + | qclear(self) + | + | set_all_values(self, *args) + | set_all_values(self) + | + | single_value(self, *args) + | single_value(self, v) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_uval_ivl_ivlset_t(self) + +Help on class uval_ivl_t in module ida_hexrays: + +class uval_ivl_t(__builtin__.object) + | Proxy of C++ ivl_tpl< uval_t > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _off, _size) -> uval_ivl_t + | + | __repr__ = _swig_repr(self) + | + | end(self, *args) + | end(self) -> unsigned-ea-like-numeric-type↗ + | + | last(self, *args) + | last(self) -> unsigned-ea-like-numeric-type↗ + | + | valid(self, *args) + | valid(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type↗ + | + | size + | uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type↗ + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_uval_ivl_t(self) + +Help on class valrng_t in module ida_hexrays: + +class valrng_t(__builtin__.object) + | Proxy of C++ valrng_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, size_=MAX_VLR_SIZE) -> valrng_t + | __init__(self, r) -> valrng_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _deregister(self, *args) + | _deregister(self) + | + | _print(self, *args) + | _print(self) + | + | _register(self, *args) + | _register(self) + | + | all_values(self, *args) + | all_values(self) -> bool + | + | compare(self, *args) + | compare(self, r) -> int + | + | cvt_to_cmp(self, *args) + | cvt_to_cmp(self, strict) -> bool + | + | cvt_to_single_value(self, *args) + | cvt_to_single_value(self) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | get_size(self, *args) + | get_size(self) -> int + | + | has(self, *args) + | has(self, v) -> bool + | + | intersect_with(self, *args) + | intersect_with(self, r) -> bool + | + | inverse(self, *args) + | inverse(self) + | + | is_unknown(self, *args) + | is_unknown(self) -> bool + | + | max_svalue(self, *args) + | max_svalue(self, size_) -> uvlr_t + | max_svalue(self) -> uvlr_t + | + | max_value(self, *args) + | max_value(self, size_) -> uvlr_t + | max_value(self) -> uvlr_t + | + | min_svalue(self, *args) + | min_svalue(self, size_) -> uvlr_t + | min_svalue(self) -> uvlr_t + | + | reduce_size(self, *args) + | reduce_size(self, new_size) -> bool + | + | set_all(self, *args) + | set_all(self) + | + | set_cmp(self, *args) + | set_cmp(self, cmp, _value) + | + | set_eq(self, *args) + | set_eq(self, v) + | + | set_none(self, *args) + | set_none(self) + | + | set_unk(self, *args) + | set_unk(self) + | + | swap(self, *args) + | swap(self, r) + | + | unite_with(self, *args) + | unite_with(self, r) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_valrng_t(self) + +Help on class var_ref_t in module ida_hexrays: + +class var_ref_t(__builtin__.object) + | Proxy of C++ var_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> var_ref_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | idx + | var_ref_t_idx_get(self) -> int + | + | mba + | var_ref_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_var_ref_t(self) + +Help on class vc_printer_t in module ida_hexrays: + +class vc_printer_t(vd_printer_t) + | Proxy of C++ vc_printer_t class. + | + | Method resolution order: + | vc_printer_t + | vd_printer_t + | __builtin__.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, f) -> vc_printer_t + | + | __repr__ = _swig_repr(self) + | + | oneliner(self, *args) + | oneliner(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | func + | vc_printer_t_func_get(self) -> cfunc_t + | + | lastchar + | vc_printer_t_lastchar_get(self) -> char + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vc_printer_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from vd_printer_t: + | + | _print(self, *args) + | _print(self, indent, format) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_printer_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + +Help on class vd_failure_t in module ida_hexrays: + +class vd_failure_t(__builtin__.object) + | Proxy of C++ vd_failure_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> vd_failure_t + | __init__(self, code, ea, buf=None) -> vd_failure_t + | __init__(self, code, ea, buf) -> vd_failure_t + | __init__(self, _hf) -> vd_failure_t + | + | __repr__ = _swig_repr(self) + | + | desc(self, *args) + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hf + | vd_failure_t_hf_get(self) -> hexrays_failure_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vd_failure_t(self) + +Help on class vd_interr_t in module ida_hexrays: + +class vd_interr_t(vd_failure_t) + | Proxy of C++ vd_interr_t class. + | + | Method resolution order: + | vd_interr_t + | vd_failure_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, ea, buf) -> vd_interr_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vd_interr_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from vd_failure_t: + | + | desc(self, *args) + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_failure_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hf + | vd_failure_t_hf_get(self) -> hexrays_failure_t + +Help on class vd_printer_t in module ida_hexrays: + +class vd_printer_t(__builtin__.object) + | Proxy of C++ vd_printer_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> vd_printer_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, indent, format) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | thisown + | The membership flag + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vd_printer_t(self) + +Help on class vdloc_t in module ida_hexrays: + +class vdloc_t(ida_typeinf.argloc_t) + | Proxy of C++ vdloc_t class. + | + | Method resolution order: + | vdloc_t + | ida_typeinf.argloc_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> vdloc_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _set_reg1(self, *args) + | _set_reg1(self, r1) + | + | compare(self, *args) + | compare(self, r) -> int + | + | is_aliasable(self, *args) + | is_aliasable(self, mb, size) -> bool + | + | reg1(self, *args) + | reg1(self) -> int + | + | set_reg1(self, *args) + | set_reg1(self, r1) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vdloc_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_typeinf.argloc_t: + | + | _consume_rrel(self, *args) + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) + | _set_badloc(self) + | + | _set_biggest(self, *args) + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) + | _set_ea(self, _ea) + | + | _set_reg2(self, *args) + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) + | _set_stkoff(self, off) + | + | advance(self, *args) + | advance(self, delta) -> bool + | + | atype(self, *args) + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) + | calc_offset(self) -> sval_t + | + | consume_rrel(self, *args) + | consume_rrel(self, p) + | + | consume_scattered(self, *args) + | consume_scattered(self, p) + | + | get_biggest(self, *args) + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) + | get_custom(self) -> void * + | + | get_ea(self, *args) + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) + | has_reg(self) -> bool + | + | has_stkoff(self, *args) + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) + | is_badloc(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_ea(self, *args) + | is_ea(self) -> bool + | + | is_fragmented(self, *args) + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_rrel(self, *args) + | is_rrel(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) + | justify_stkoff_right(self, size, _slotsize) + | + | reg2(self, *args) + | reg2(self) -> int + | + | regoff(self, *args) + | regoff(self) -> int + | + | scattered(self, *args) + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) + | set_badloc(self) + | + | set_ea(self, *args) + | set_ea(self, _ea) + | + | set_reg2(self, *args) + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) + | set_stkoff(self, off) + | + | stkoff(self, *args) + | stkoff(self) -> sval_t + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_typeinf.argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class vdui_t in module ida_hexrays: + +class vdui_t(__builtin__.object) + | Proxy of C++ vdui_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | calc_cmt_type(self, *args) + | calc_cmt_type(self, lnnum, cmttype) -> cmt_type_t + | + | clear(self, *args) + | clear(self) + | + | collapse_item(self, *args) + | collapse_item(self, hide) -> bool + | + | collapse_lvars(self, *args) + | collapse_lvars(self, hide) -> bool + | + | ctree_to_disasm(self, *args) + | ctree_to_disasm(self) -> bool + | + | del_orphan_cmts(self, *args) + | del_orphan_cmts(self) -> bool + | + | edit_cmt(self, *args) + | edit_cmt(self, loc) -> bool + | + | edit_func_cmt(self, *args) + | edit_func_cmt(self) -> bool + | + | get_current_item(self, *args) + | get_current_item(self, idv) -> bool + | + | get_current_label(self, *args) + | get_current_label(self) -> int + | + | get_number(self, *args) + | get_number(self) -> cnumber_t + | + | in_ctree(self, *args) + | in_ctree(self) -> bool + | + | invert_bits(self, *args) + | invert_bits(self) -> bool + | + | invert_sign(self, *args) + | invert_sign(self) -> bool + | + | jump_enter(self, *args) + | jump_enter(self, idv, omflags) -> bool + | + | locked(self, *args) + | locked(self) -> bool + | + | map_lvar(self, *args) + | map_lvar(self, frm, to) -> bool + | + | refresh_cpos(self, *args) + | refresh_cpos(self, idv) -> bool + | + | refresh_ctext(self, *args) + | refresh_ctext(self, activate=True) + | + | refresh_view(self, *args) + | refresh_view(self, redo_mba) + | + | rename_global(self, *args) + | rename_global(self, ea) -> bool + | + | rename_label(self, *args) + | rename_label(self, label) -> bool + | + | rename_lvar(self, *args) + | rename_lvar(self, v, name, is_user_name) -> bool + | + | rename_strmem(self, *args) + | rename_strmem(self, sptr, mptr) -> bool + | + | set_global_type(self, *args) + | set_global_type(self, ea) -> bool + | + | set_locked(self, *args) + | set_locked(self, v) -> bool + | + | set_lvar_cmt(self, *args) + | set_lvar_cmt(self, v, cmt) -> bool + | + | set_lvar_type(self, *args) + | set_lvar_type(self, v, type) -> bool + | + | set_noptr_lvar(self, *args) + | set_noptr_lvar(self, v) -> bool + | + | set_num_enum(self, *args) + | set_num_enum(self) -> bool + | + | set_num_radix(self, *args) + | set_num_radix(self, base) -> bool + | + | set_num_stroff(self, *args) + | set_num_stroff(self) -> bool + | + | set_strmem_type(self, *args) + | set_strmem_type(self, sptr, mptr) -> bool + | + | set_valid(self, *args) + | set_valid(self, v) + | + | set_visible(self, *args) + | set_visible(self, v) + | + | split_item(self, *args) + | split_item(self, split) -> bool + | + | switch_to(self, *args) + | switch_to(self, f, activate) + | + | ui_edit_lvar_cmt(self, *args) + | ui_edit_lvar_cmt(self, v) -> bool + | + | ui_map_lvar(self, *args) + | ui_map_lvar(self, v) -> bool + | + | ui_rename_lvar(self, *args) + | ui_rename_lvar(self, v) -> bool + | + | ui_set_call_type(self, *args) + | ui_set_call_type(self, e) -> bool + | + | ui_set_lvar_type(self, *args) + | ui_set_lvar_type(self, v) -> bool + | + | ui_unmap_lvar(self, *args) + | ui_unmap_lvar(self, v) -> bool + | + | valid(self, *args) + | valid(self) -> bool + | + | visible(self, *args) + | visible(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cfunc + | vdui_t_cfunc_get(self) -> cfuncptr_t + | + | cpos + | vdui_t_cpos_get(self) -> ctext_position_t + | + | ct + | vdui_t_ct_get(self) -> TWidget * + | + | flags + | vdui_t_flags_get(self) -> int + | + | head + | vdui_t_head_get(self) -> ctree_item_t + | + | item + | vdui_t_item_get(self) -> ctree_item_t + | + | last_code + | vdui_t_last_code_get(self) -> merror_t + | + | mba + | vdui_t_mba_get(self) -> mbl_array_t + | + | tail + | vdui_t_tail_get(self) -> ctree_item_t + | + | thisown + | The membership flag + | + | toplevel + | vdui_t_toplevel_get(self) -> TWidget * + | + | view_idx + | vdui_t_view_idx_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vdui_t(self) + +Help on class vivl_t in module ida_hexrays: + +class vivl_t(voff_t) + | Proxy of C++ vivl_t class. + | + | Method resolution order: + | vivl_t + | voff_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | __eq__(self, mop) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _type=mop_z, _off=-1, _size=0) -> vivl_t + | __init__(self, ch) -> vivl_t + | __init__(self, op) -> vivl_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, voff2) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | extend_to_cover(self, *args) + | extend_to_cover(self, r) -> bool + | + | includes(self, *args) + | includes(self, r) -> bool + | + | intersect(self, *args) + | intersect(self, r) -> uval_t + | + | overlap(self, *args) + | overlap(self, r) -> bool + | + | set(self, *args) + | set(self, _type, _off, _size=0) + | set(self, voff, _size) + | + | set_reg(self, *args) + | set_reg(self, mreg, sz=0) + | + | set_stkoff(self, *args) + | set_stkoff(self, stkoff, sz=0) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | size + | vivl_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_vivl_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from voff_t: + | + | add(self, *args) + | add(self, width) -> voff_t + | + | defined(self, *args) + | defined(self) -> bool + | + | diff(self, *args) + | diff(self, r) -> sval_t + | + | get_reg(self, *args) + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) + | get_stkoff(self) -> sval_t + | + | inc(self, *args) + | inc(self, delta) + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | undef(self, *args) + | undef(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from voff_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | voff_t_off_get(self) -> sval_t + | + | type + | voff_t_type_get(self) -> mopt_t + +Help on class voff_t in module ida_hexrays: + +class voff_t(__builtin__.object) + | Proxy of C++ voff_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> voff_t + | __init__(self, _type, _off) -> voff_t + | __init__(self, op) -> voff_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | add(self, *args) + | add(self, width) -> voff_t + | + | compare(self, *args) + | compare(self, r) -> int + | + | defined(self, *args) + | defined(self) -> bool + | + | diff(self, *args) + | diff(self, r) -> sval_t + | + | get_reg(self, *args) + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) + | get_stkoff(self) -> sval_t + | + | inc(self, *args) + | inc(self, delta) + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | set(self, *args) + | set(self, _type, _off) + | + | set_reg(self, *args) + | set_reg(self, mreg) + | + | set_stkoff(self, *args) + | set_stkoff(self, stkoff) + | + | undef(self, *args) + | undef(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | voff_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | type + | voff_t_type_get(self) -> mopt_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_voff_t(self) + +=== ida_hexrays EPYDOC INJECTIONS === +ida_hexrays.ACFL_BLKOPT +""" +perform interblock transformations +""" + +ida_hexrays.ACFL_GLBDEL +""" +perform dead code eliminition +""" + +ida_hexrays.ACFL_GLBPROP +""" +perform global propagation +""" + +ida_hexrays.ACFL_GUESS +""" +may guess calling conventions +""" + +ida_hexrays.ACFL_LOCOPT +""" +perform local propagation (requires ACFL_BLKOPT) +""" + +ida_hexrays.ANCHOR_BLKCMT +""" +block comment (for ctree items) +""" + +ida_hexrays.ANCHOR_CITEM +""" +c-tree item +""" + +ida_hexrays.ANCHOR_ITP +""" +item type preciser +""" + +ida_hexrays.ANCHOR_LVAR +""" +declaration of local variable +""" + +ida_hexrays.CFL_FINAL +""" +call type is final, should not be changed +""" + +ida_hexrays.CFL_HELPER +""" +created from a decompiler helper function +""" + +ida_hexrays.CFS_BOUNDS +""" +'eamap' and 'boundaries' are ready +""" + +ida_hexrays.CFS_LVARS_HIDDEN +""" +local variable definitions are collapsed +""" + +ida_hexrays.CFS_TEXT +""" +'sv' is ready (and hdrlines) +""" + +ida_hexrays.CHF_FAKE +""" +fake chain created by widen_chains() +""" + +ida_hexrays.CHF_INITED +""" +is chain initialized? (valid only after lvar allocation) +""" + +ida_hexrays.CHF_OVER +""" +overlapped chain +""" + +ida_hexrays.CHF_PASSTHRU +""" +pass-thru chain, must use the input variable to the block +""" + +ida_hexrays.CHF_REPLACED +""" +chain operands have been replaced? +""" + +ida_hexrays.CHF_TERM +""" +terminating chain; the variable does not survive across the block +""" + +ida_hexrays.CIT_COLLAPSED +""" +display element in collapsed form +""" + +ida_hexrays.CPBLK_FAST +""" +do not update minbstkref and minbargref +""" + +ida_hexrays.CPBLK_MINREF +""" +update minbstkref and minbargref +""" + +ida_hexrays.CPBLK_OPTJMP +""" +if it becomes useless + +del the jump insn at the end of the block +""" + +ida_hexrays.CV_FAST +""" +do not maintain parent information +""" + +ida_hexrays.CV_INSNS +""" +visit only statements, prune all expressions do not use before the +final ctree maturity because expressions may contain statements at +intermediate stages (see cot_insn). Otherwise you risk missing +statements embedded into expressions. +""" + +ida_hexrays.CV_PARENTS +""" +maintain parent information +""" + +ida_hexrays.CV_POST +""" +call the leave...() functions +""" + +ida_hexrays.CV_PRUNE +""" +this bit is set by visit...() to prune the walk +""" + +ida_hexrays.CV_RESTART +""" +restart enumeration at the top expr (apply_to_exprs) +""" + +ida_hexrays.DECOMP_ALL_BLKS +""" +generate microcode for unreachable blocks +""" + +ida_hexrays.DECOMP_NO_CACHE +""" +do not use decompilation cache +""" + +ida_hexrays.DECOMP_NO_FRAME +""" +do not use function frame info (only snippet mode) +""" + +ida_hexrays.DECOMP_NO_WAIT +""" +do not display waitbox +""" + +ida_hexrays.DECOMP_WARNINGS +""" +display warnings in the output window +""" + +ida_hexrays.EQ_CMPDEST +""" +compare instruction destinations +""" + +ida_hexrays.EQ_IGNCODE +""" +ignore instruction opcodes +""" + +ida_hexrays.EQ_IGNSIZE +""" +ignore operand sizes +""" + +ida_hexrays.EQ_OPTINSN +""" +optimize mop_d operands +""" + +ida_hexrays.EXFL_ALL +""" +all currently defined bits +""" + +ida_hexrays.EXFL_ALONE +""" +standalone helper +""" + +ida_hexrays.EXFL_CPADONE +""" +pointer arithmetic correction done +""" + +ida_hexrays.EXFL_CSTR +""" +string literal +""" + +ida_hexrays.EXFL_FPOP +""" +floating point operation +""" + +ida_hexrays.EXFL_JUMPOUT +""" +jump out-of-function +""" + +ida_hexrays.EXFL_LVALUE +""" +expression is lvalue even if it doesn't look like it +""" + +ida_hexrays.EXFL_PARTIAL +""" +type of the expression is considered partial +""" + +ida_hexrays.EXFL_UNDEF +""" +expression uses undefined value +""" + +ida_hexrays.EXFL_VFTABLE +""" +is ptr to vftable (used for cot_memptr, cot_memref) +""" + +ida_hexrays.FCI_DEAD +""" +some return registers were determined dead +""" + +ida_hexrays.FCI_FINAL +""" +call type is final, should not be changed +""" + +ida_hexrays.FCI_HASCALL +""" +A function is an synthetic helper combined from several instructions +and at least one of them was a call to a real functions +""" + +ida_hexrays.FCI_HASFMT +""" +printf- or scanf-style format string + +A variadic function with recognized +""" + +ida_hexrays.FCI_NORET +""" +call does not return +""" + +ida_hexrays.FCI_NOSIDE +""" +call does not have side effects +""" + +ida_hexrays.FCI_PROP +""" +call has been propagated +""" + +ida_hexrays.FCI_PURE +""" +pure function +""" + +ida_hexrays.FCI_SPLOK +""" +spoiled/visible_memory lists have been optimized. for some functions +we can reduce them as soon as information about the arguments becomes +available. in order not to try optimize them again we use this bit. +""" + +ida_hexrays.FD_BACKWARD +""" +search direction +""" + +ida_hexrays.FD_DEF +""" +look for definition +""" + +ida_hexrays.FD_DIRTY +""" +by function calls and indirect memory access + +ignore possible implicit definitions +""" + +ida_hexrays.FD_FORWARD +""" +search direction +""" + +ida_hexrays.FD_USE +""" +look for use +""" + +ida_hexrays.GCA_ALLOC +""" +enumerate only allocated chains +""" + +ida_hexrays.GCA_EMPTY +""" +include empty chains +""" + +ida_hexrays.GCA_NALLOC +""" +enumerate only non-allocated chains +""" + +ida_hexrays.GCA_OFIRST +""" +consider only chains of the first block +""" + +ida_hexrays.GCA_OLAST +""" +consider only chains of the last block +""" + +ida_hexrays.GCA_SPEC +""" +include chains for special registers +""" + +ida_hexrays.GCO_DEF +""" +is destination operand? +""" + +ida_hexrays.GCO_REG +""" +is register? otherwise a stack variable +""" + +ida_hexrays.GCO_STK +""" +a stack variable +""" + +ida_hexrays.GCO_USE +""" +is source operand? +""" + +ida_hexrays.GLN_ALL +""" +get both +""" + +ida_hexrays.GLN_CURRENT +""" +get label of the current item +""" + +ida_hexrays.GLN_GOTO_TARGET +""" +get goto target +""" + +ida_hexrays.IPROP_ASSERT +""" +assertion: usually mov #val, op. assertions are used to help the +optimizer. assertions are ignored when generating ctree +""" + +ida_hexrays.IPROP_CLNPOP +""" +(e.g. "pop ecx" is often used for that) + +the purpose of the instruction is to clean stack +""" + +ida_hexrays.IPROP_COMBINED +""" +insn has been modified because of a partial reference +""" + +ida_hexrays.IPROP_DONT_COMB +""" +may not combine this instruction with others +""" + +ida_hexrays.IPROP_DONT_PROP +""" +may not propagate +""" + +ida_hexrays.IPROP_EXTSTX +""" +this is m_ext propagated into m_stx +""" + +ida_hexrays.IPROP_FARCALL +""" +call of a far function using push cs/call sequence +""" + +ida_hexrays.IPROP_FPINSN +""" +floating point insn +""" + +ida_hexrays.IPROP_IGNLOWSRC +""" +low part of the instruction source operand has been created +artificially (this bit is used only for 'and x, 80...') +""" + +ida_hexrays.IPROP_INV_JX +""" +inverted conditional jump +""" + +ida_hexrays.IPROP_MBARRIER +""" +(instructions accessing memory may not be reordered past it) + +this instruction acts as a memory barrier +""" + +ida_hexrays.IPROP_MULTI_MOV +""" +(example: STM on ARM may transfer multiple registers) + +the minsn was generated as part of insn that moves multiple +registersbits that can be set by plugins: +""" + +ida_hexrays.IPROP_OPTIONAL +""" +optional instruction +""" + +ida_hexrays.IPROP_PERSIST +""" +persistent insn; they are not destroyed +""" + +ida_hexrays.IPROP_SPLIT +""" +the instruction has been split: +""" + +ida_hexrays.IPROP_SPLIT1 +""" +into 1 byte +""" + +ida_hexrays.IPROP_SPLIT2 +""" +into 2 bytes +""" + +ida_hexrays.IPROP_SPLIT4 +""" +into 4 bytes +""" + +ida_hexrays.IPROP_SPLIT8 +""" +into 8 bytes +""" + +ida_hexrays.IPROP_TAILCALL +""" +tail call +""" + +ida_hexrays.IPROP_WAS_NORET +""" +was noret icall +""" + +ida_hexrays.IPROP_WILDMATCH +""" +match multiple insns +""" + +ida_hexrays.LOCOPT_ALL +""" +is not set, only dirty blocks will be optimized + +redo optimization for all blocks. if this bit +""" + +ida_hexrays.LOCOPT_REFINE +""" +refine return type, ok to fail +""" + +ida_hexrays.LOCOPT_REFINE2 +""" +refine return type, try harder +""" + +ida_hexrays.LVINF_FORCE +""" +force allocation of a new variable. forces the decompiler to create a +new variable at ll.defea +""" + +ida_hexrays.LVINF_KEEP +""" +preserve saved user settings regardless of vars for example, if a var +loses all its user-defined attributes or even gets destroyed, keep its +'lvar_saved_info_t' . this is used for ephemeral variables that get +destroyed by macro recognition. +""" + +ida_hexrays.LVINF_NOMAP +""" +forbid automatic mapping of the variable +""" + +ida_hexrays.LVINF_NOPTR +""" +variable type should not be a pointer +""" + +ida_hexrays.MBA_ASRPROP +""" +assertion have been propagated +""" + +ida_hexrays.MBA_ASRTOK +""" +assertions have been generated +""" + +ida_hexrays.MBA_CALLS +""" +callinfo has been built +""" + +ida_hexrays.MBA_CHVARS +""" +can verify chain varnums +""" + +ida_hexrays.MBA_CMBBLK +""" +request to combine blocks +""" + +ida_hexrays.MBA_CMNSTK +""" +stkvars+stkargs should be considered as one area +""" + +ida_hexrays.MBA_COLGDL +""" +display graph after each reduction +""" + +ida_hexrays.MBA_DELPAIRS +""" +pairs have been deleted once +""" + +ida_hexrays.MBA_GLBOPT +""" +microcode has been optimized globally +""" + +ida_hexrays.MBA_INSGDL +""" +display instruction in graphs +""" + +ida_hexrays.MBA_LOADED +""" +loaded gdl, no instructions (debugging) +""" + +ida_hexrays.MBA_LVARS0 +""" +lvar pre-allocation has been performed +""" + +ida_hexrays.MBA_LVARS1 +""" +lvar real allocation has been performed +""" + +ida_hexrays.MBA_NICE +""" +apply transformations to c code +""" + +ida_hexrays.MBA_NOFUNC +""" +function is not present, addresses might be wrong +""" + +ida_hexrays.MBA_NUMADDR +""" +display definition addresses for numbers +""" + +ida_hexrays.MBA_PASSREGS +""" +has 'mcallinfo_t::pass_regs' +""" + +ida_hexrays.MBA_PATTERN +""" +microcode pattern, callinfo is present +""" + +ida_hexrays.MBA_PRCDEFS +""" +use precise defeas for chain-allocated lvars +""" + +ida_hexrays.MBA_PREOPT +""" +preoptimization stage complete +""" + +ida_hexrays.MBA_REFINE +""" +may refine return value size +""" + +ida_hexrays.MBA_RETFP +""" +function returns floating point value +""" + +ida_hexrays.MBA_RETREF +""" +return type has been refined +""" + +ida_hexrays.MBA_SAVRST +""" +save-restore analysis has been performed +""" + +ida_hexrays.MBA_SHORT +""" +use short display +""" + +ida_hexrays.MBA_SPLINFO +""" +(final_type ? idb_spoiled : spoiled_regs) is valid +""" + +ida_hexrays.MBA_THUNK +""" +thunk function +""" + +ida_hexrays.MBA_VALNUM +""" +display value numbers +""" + +ida_hexrays.MBA_WINGR32 +""" +use wingraph32 +""" + +ida_hexrays.MBL_BACKPROP +""" +performed backprop_cc +""" + +ida_hexrays.MBL_CALL +""" +call information has been built +""" + +ida_hexrays.MBL_COMB +""" +needs "combine" pass +""" + +ida_hexrays.MBL_DEAD +""" +needs "eliminate deads" pass +""" + +ida_hexrays.MBL_DMT64 +""" +needs "demote 64bits" +""" + +ida_hexrays.MBL_DSLOT +""" +block for delay slot +""" + +ida_hexrays.MBL_FAKE +""" +fake block (after a tail call) +""" + +ida_hexrays.MBL_GOTO +""" +this block is a goto target +""" + +ida_hexrays.MBL_INCONST +""" +inconsistent lists: we are building them +""" + +ida_hexrays.MBL_LIST +""" +use/def lists are ready (not dirty) +""" + +ida_hexrays.MBL_NONFAKE +""" +regular block +""" + +ida_hexrays.MBL_NORET +""" +dead end block: doesn't return execution control +""" + +ida_hexrays.MBL_PRIV +""" +the specified are accepted (used in patterns) + +private block - no instructions except +""" + +ida_hexrays.MBL_PROP +""" +needs 'propagation' pass +""" + +ida_hexrays.MBL_PUSH +""" +needs "convert push/pop instructions" +""" + +ida_hexrays.MBL_TCAL +""" +aritifical call block for tail calls +""" + +ida_hexrays.MBL_VALRANGES +""" +should optimize using value ranges +""" + +ida_hexrays.MLI_CLR_FLAGS +""" +clear LVINF_... bits +""" + +ida_hexrays.MLI_CMT +""" +apply lvar comment +""" + +ida_hexrays.MLI_NAME +""" +apply lvar name +""" + +ida_hexrays.MLI_SET_FLAGS +""" +set LVINF_... bits +""" + +ida_hexrays.MLI_TYPE +""" +apply lvar type +""" + +ida_hexrays.NALT_VD +""" +this index is not used by ida +""" + +ida_hexrays.NF_BINVDONE +""" +temporary internal bit: inverting bits is done +""" + +ida_hexrays.NF_BITNOT +""" +The user asked to invert bits of the constant. +""" + +ida_hexrays.NF_FIXED +""" +number format has been defined by the user +""" + +ida_hexrays.NF_NEGATE +""" +The user asked to negate the constant. +""" + +ida_hexrays.NF_NEGDONE +""" +temporary internal bit: negation has been performed +""" + +ida_hexrays.NF_STROFF +""" +internal bit: used as stroff, valid iff 'is_stroff()' +""" + +ida_hexrays.OPROP_CCFLAGS +""" +condition codes register value +""" + +ida_hexrays.OPROP_FLOAT +""" +possibly floating value +""" + +ida_hexrays.OPROP_IMPDONE +""" +imported operand (a pointer) has been dereferenced +""" + +ida_hexrays.OPROP_UDEFVAL +""" +uses undefined value +""" + +ida_hexrays.OPROP_UDT +""" +a struct or union +""" + +ida_hexrays.OPTI_ADDREXPRS +""" +optimize all address expressions (&x+N; &x-&y) +""" + +ida_hexrays.OPTI_COMBINSNS +""" +may combine insns (only for optimize_insn) +""" + +ida_hexrays.OPTI_MINSTKREF +""" +may update minstkref +""" + +ida_hexrays.OPTI_NO_LDXOPT +""" +do not optimize low/high(ldx) +""" + +ida_hexrays.SHINS_LDXEA +""" +display address of ldx expressions (not used) +""" + +ida_hexrays.SHINS_NUMADDR +""" +display definition addresses for numbers +""" + +ida_hexrays.SHINS_SHORT +""" +do not display use-def chains and other attrs +""" + +ida_hexrays.SHINS_VALNUM +""" +display value numbers +""" + +ida_hexrays.ULV_PRECISE_DEFEA +""" +Use precise defea's for lvar locations. +""" + +ida_hexrays.VDRUN_APPEND +""" +Create a new file or append to existing file. +""" + +ida_hexrays.VDRUN_CMDLINE +""" +Called from ida's command line. +""" + +ida_hexrays.VDRUN_LUMINA +""" +Use lumina server. +""" + +ida_hexrays.VDRUN_MAYSTOP +""" +The user can cancel decompilation. +""" + +ida_hexrays.VDRUN_NEWFILE +""" +Create a new file or overwrite existing file. +""" + +ida_hexrays.VDRUN_ONLYNEW +""" +Fail if output file already exists. +""" + +ida_hexrays.VDRUN_SENDIDB +""" +Send problematic databases to hex-rays.com. +""" + +ida_hexrays.VDRUN_SILENT +""" +Silent decompilation. +""" + +ida_hexrays.VDRUN_STATS +""" +Print statistics into vd_stats.txt. +""" + +ida_hexrays.VDUI_LOCKED +""" +is locked? +""" + +ida_hexrays.VDUI_VALID +""" +is valid? +""" + +ida_hexrays.VDUI_VISIBLE +""" +is visible? +""" + +ida_hexrays.VR_AT_END +""" +get value ranges after the instruction or at the block end, just after +the last instruction (if M is NULL) +""" + +ida_hexrays.VR_AT_START +""" +at the block start (if M is NULL) + +get value ranges before the instruction or +""" + +ida_hexrays.VR_EXACT +""" +valrng size will be >= vivl.size + +find exact match. if not set, the returned +""" +=== ida_hexrays EPYDOC INJECTIONS END === +Help on function __make_idainfo_accessors in module ida_ida: + +__make_idainfo_accessors(attr, getter_name=None, setter_name=None) + +Help on function __make_idainfo_bound in module ida_ida: + +__make_idainfo_bound(func, attr) + # + +Help on function __make_idainfo_getter in module ida_ida: + +__make_idainfo_getter(name) + +Help on function calc_default_idaplace_flags in module ida_ida: + +calc_default_idaplace_flags(*args) + calc_default_idaplace_flags() -> int + + + Get default disassembly line options. + +Help on class compiler_info_t in module ida_ida: + +class compiler_info_t(__builtin__.object) + | Proxy of C++ compiler_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> compiler_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cm + | compiler_info_t_cm_get(self) -> cm_t + | + | defalign + | compiler_info_t_defalign_get(self) -> uchar + | + | id + | compiler_info_t_id_get(self) -> comp_t + | + | size_b + | compiler_info_t_size_b_get(self) -> uchar + | + | size_e + | compiler_info_t_size_e_get(self) -> uchar + | + | size_i + | compiler_info_t_size_i_get(self) -> uchar + | + | size_l + | compiler_info_t_size_l_get(self) -> uchar + | + | size_ldbl + | compiler_info_t_size_ldbl_get(self) -> uchar + | + | size_ll + | compiler_info_t_size_ll_get(self) -> uchar + | + | size_s + | compiler_info_t_size_s_get(self) -> uchar + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_compiler_info_t(self) + +Help on class idainfo in module ida_ida: + +class idainfo(__builtin__.object) + | Proxy of C++ idainfo class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | big_arg_align = __func(self, *args) + | + | gen_lzero = __func(self, *args) + | + | gen_null = __func(self, *args) + | + | gen_tryblks = __func(self, *args) + | + | get_abiname(self, *args) + | get_abiname(self) -> qstring + | + | get_demname_form = __func(self, *args) + | + | get_maxEA(self, *args) + | get_maxEA(self) -> ea_t + | + | get_minEA(self, *args) + | get_minEA(self) -> ea_t + | + | get_pack_mode = __func(self, *args) + | + | get_procName(self, *args) + | get_procName(self) -> qstring + | + | is_32bit = __func(self, *args) + | + | is_64bit = __func(self, *args) + | + | is_auto_enabled = __func(self, *args) + | + | is_be = __func(self, *args) + | + | is_dll = __func(self, *args) + | + | is_flat_off32 = __func(self, *args) + | + | is_graph_view = __func(self, *args) + | + | is_hard_float = __func(self, *args) + | + | is_kernel_mode = __func(self, *args) + | + | is_mem_aligned4 = __func(self, *args) + | + | is_snapshot = __func(self, *args) + | + | is_wide_high_byte_first = __func(self, *args) + | + | like_binary = __func(self, *args) + | + | line_pref_with_seg = __func(self, *args) + | + | loading_idc = __func(self, *args) + | + | map_stkargs = __func(self, *args) + | + | pack_stkargs = __func(self, *args) + | + | readonly_idb = __func(self, *args) + | + | set_64bit = __func(self, *args) + | + | set_auto_enabled = __func(self, *args) + | + | set_be = __func(self, *args) + | + | set_gen_lzero = __func(self, *args) + | + | set_gen_null = __func(self, *args) + | + | set_gen_tryblks = __func(self, *args) + | + | set_graph_view = __func(self, *args) + | + | set_line_pref_with_seg = __func(self, *args) + | + | set_maxEA(self, *args) + | set_maxEA(self, ea) + | + | set_minEA(self, *args) + | set_minEA(self, ea) + | + | set_pack_mode = __func(self, *args) + | + | set_show_auto = __func(self, *args) + | + | set_show_line_pref = __func(self, *args) + | + | set_show_void = __func(self, *args) + | + | set_wide_high_byte_first = __func(self, *args) + | + | show_auto = __func(self, *args) + | + | show_line_pref = __func(self, *args) + | + | show_void = __func(self, *args) + | + | stack_ldbl = __func(self, *args) + | + | stack_varargs = __func(self, *args) + | + | use_allasm = __func(self, *args) + | + | use_gcc_layout = __func(self, *args) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | abibits + | idainfo_abibits_get(self) -> uint32 + | + | abiname + | get_abiname(self) -> qstring + | + | af + | idainfo_af_get(self) -> uint32 + | + | af2 + | idainfo_af2_get(self) -> uint32 + | + | appcall_options + | idainfo_appcall_options_get(self) -> uint32 + | + | apptype + | idainfo_apptype_get(self) -> ushort + | + | asmtype + | idainfo_asmtype_get(self) -> uchar + | + | baseaddr + | idainfo_baseaddr_get(self) -> uval_t + | + | bin_prefix_size + | idainfo_bin_prefix_size_get(self) -> short + | + | cc + | idainfo_cc_get(self) -> compiler_info_t + | + | comment + | idainfo_comment_get(self) -> uchar + | + | database_change_count + | idainfo_database_change_count_get(self) -> uint32 + | + | datatypes + | idainfo_datatypes_get(self) -> uval_t + | + | demnames + | idainfo_demnames_get(self) -> uchar + | + | filetype + | idainfo_filetype_get(self) -> ushort + | + | highoff + | idainfo_highoff_get(self) -> ea_t + | + | indent + | idainfo_indent_get(self) -> uchar + | + | lenxref + | idainfo_lenxref_get(self) -> ushort + | + | lflags + | idainfo_lflags_get(self) -> uint32 + | + | listnames + | idainfo_listnames_get(self) -> uchar + | + | long_demnames + | idainfo_long_demnames_get(self) -> uint32 + | + | lowoff + | idainfo_lowoff_get(self) -> ea_t + | + | main + | idainfo_main_get(self) -> ea_t + | + | margin + | idainfo_margin_get(self) -> ushort + | + | maxEA + | get_maxEA(self) -> ea_t + | + | max_autoname_len + | idainfo_max_autoname_len_get(self) -> ushort + | + | max_ea + | idainfo_max_ea_get(self) -> ea_t + | + | maxref + | idainfo_maxref_get(self) -> uval_t + | + | minEA + | get_minEA(self) -> ea_t + | + | min_ea + | idainfo_min_ea_get(self) -> ea_t + | + | nametype + | idainfo_nametype_get(self) -> char + | + | omax_ea + | idainfo_omax_ea_get(self) -> ea_t + | + | omin_ea + | idainfo_omin_ea_get(self) -> ea_t + | + | ostype + | idainfo_ostype_get(self) -> ushort + | + | outflags + | idainfo_outflags_get(self) -> uint32 + | + | procName + | get_procName(self) -> qstring + | + | procname + | idainfo_procname_get(self) -> char [16] + | + | refcmtnum + | idainfo_refcmtnum_get(self) -> uchar + | + | s_cmtflg + | idainfo_s_cmtflg_get(self) -> uchar + | + | s_genflags + | idainfo_s_genflags_get(self) -> ushort + | + | s_limiter + | idainfo_s_limiter_get(self) -> uchar + | + | s_prefflag + | idainfo_s_prefflag_get(self) -> uchar + | + | s_xrefflag + | idainfo_s_xrefflag_get(self) -> uchar + | + | short_demnames + | idainfo_short_demnames_get(self) -> uint32 + | + | specsegs + | idainfo_specsegs_get(self) -> uchar + | + | start_cs + | idainfo_start_cs_get(self) -> sel_t + | + | start_ea + | idainfo_start_ea_get(self) -> ea_t + | + | start_ip + | idainfo_start_ip_get(self) -> ea_t + | + | start_sp + | idainfo_start_sp_get(self) -> ea_t + | + | start_ss + | idainfo_start_ss_get(self) -> sel_t + | + | strlit_break + | idainfo_strlit_break_get(self) -> uchar + | + | strlit_flags + | idainfo_strlit_flags_get(self) -> uchar + | + | strlit_pref + | idainfo_strlit_pref_get(self) -> char [16] + | + | strlit_sernum + | idainfo_strlit_sernum_get(self) -> uval_t + | + | strlit_zeroes + | idainfo_strlit_zeroes_get(self) -> char + | + | strtype + | idainfo_strtype_get(self) -> int32 + | + | tag + | idainfo_tag_get(self) -> char [3] + | + | thisown + | The membership flag + | + | type_xrefnum + | idainfo_type_xrefnum_get(self) -> uchar + | + | version + | idainfo_version_get(self) -> ushort + | + | xrefnum + | idainfo_xrefnum_get(self) -> uchar + +Help on function inf_big_arg_align in module ida_ida: + +inf_big_arg_align(*args) + inf_big_arg_align() -> bool + +Help on function inf_gen_lzero in module ida_ida: + +inf_gen_lzero(*args) + inf_gen_lzero() -> bool + +Help on function inf_gen_null in module ida_ida: + +inf_gen_null(*args) + inf_gen_null() -> bool + +Help on function inf_gen_tryblks in module ida_ida: + +inf_gen_tryblks(*args) + inf_gen_tryblks() -> bool + +Help on function inf_get_demname_form in module ida_ida: + +inf_get_demname_form(*args) + inf_get_demname_form() -> uchar + + + Get 'DEMNAM_MASK' bits of #demnames. + +Help on function inf_get_pack_mode in module ida_ida: + +inf_get_pack_mode(*args) + inf_get_pack_mode() -> int + +Help on function inf_is_32bit in module ida_ida: + +inf_is_32bit(*args) + inf_is_32bit() -> bool + +Help on function inf_is_64bit in module ida_ida: + +inf_is_64bit(*args) + inf_is_64bit() -> bool + +Help on function inf_is_auto_enabled in module ida_ida: + +inf_is_auto_enabled(*args) + inf_is_auto_enabled() -> bool + +Help on function inf_is_be in module ida_ida: + +inf_is_be(*args) + inf_is_be() -> bool + +Help on function inf_is_dll in module ida_ida: + +inf_is_dll(*args) + inf_is_dll() -> bool + +Help on function inf_is_flat_off32 in module ida_ida: + +inf_is_flat_off32(*args) + inf_is_flat_off32() -> bool + +Help on function inf_is_graph_view in module ida_ida: + +inf_is_graph_view(*args) + inf_is_graph_view() -> bool + +Help on function inf_is_hard_float in module ida_ida: + +inf_is_hard_float(*args) + inf_is_hard_float() -> bool + +Help on function inf_is_kernel_mode in module ida_ida: + +inf_is_kernel_mode(*args) + inf_is_kernel_mode() -> bool + +Help on function inf_is_mem_aligned4 in module ida_ida: + +inf_is_mem_aligned4(*args) + inf_is_mem_aligned4() -> bool + +Help on function inf_is_snapshot in module ida_ida: + +inf_is_snapshot(*args) + inf_is_snapshot() -> bool + +Help on function inf_is_wide_high_byte_first in module ida_ida: + +inf_is_wide_high_byte_first(*args) + inf_is_wide_high_byte_first() -> bool + +Help on function inf_like_binary in module ida_ida: + +inf_like_binary(*args) + inf_like_binary() -> bool + +Help on function inf_line_pref_with_seg in module ida_ida: + +inf_line_pref_with_seg(*args) + inf_line_pref_with_seg() -> bool + +Help on function inf_loading_idc in module ida_ida: + +inf_loading_idc(*args) + inf_loading_idc() -> bool + +Help on function inf_map_stkargs in module ida_ida: + +inf_map_stkargs(*args) + inf_map_stkargs() -> bool + +Help on function inf_pack_stkargs in module ida_ida: + +inf_pack_stkargs(*args) + inf_pack_stkargs() -> bool + +Help on function inf_readonly_idb in module ida_ida: + +inf_readonly_idb(*args) + inf_readonly_idb() -> bool + +Help on function inf_set_64bit in module ida_ida: + +inf_set_64bit(*args) + inf_set_64bit(_v=True) -> bool + +Help on function inf_set_auto_enabled in module ida_ida: + +inf_set_auto_enabled(*args) + inf_set_auto_enabled(_v=True) -> bool + +Help on function inf_set_be in module ida_ida: + +inf_set_be(*args) + inf_set_be(_v=True) -> bool + +Help on function inf_set_gen_lzero in module ida_ida: + +inf_set_gen_lzero(*args) + inf_set_gen_lzero(_v=True) -> bool + +Help on function inf_set_gen_null in module ida_ida: + +inf_set_gen_null(*args) + inf_set_gen_null(_v=True) -> bool + +Help on function inf_set_gen_tryblks in module ida_ida: + +inf_set_gen_tryblks(*args) + inf_set_gen_tryblks(_v=True) -> bool + +Help on function inf_set_graph_view in module ida_ida: + +inf_set_graph_view(*args) + inf_set_graph_view(_v=True) -> bool + +Help on function inf_set_line_pref_with_seg in module ida_ida: + +inf_set_line_pref_with_seg(*args) + inf_set_line_pref_with_seg(_v=True) -> bool + +Help on function inf_set_pack_mode in module ida_ida: + +inf_set_pack_mode(*args) + inf_set_pack_mode(pack_mode) -> int + +Help on function inf_set_show_auto in module ida_ida: + +inf_set_show_auto(*args) + inf_set_show_auto(_v=True) -> bool + +Help on function inf_set_show_line_pref in module ida_ida: + +inf_set_show_line_pref(*args) + inf_set_show_line_pref(_v=True) -> bool + +Help on function inf_set_show_void in module ida_ida: + +inf_set_show_void(*args) + inf_set_show_void(_v=True) -> bool + +Help on function in module ida_ida: + + lambda *args + +Help on function inf_set_wide_high_byte_first in module ida_ida: + +inf_set_wide_high_byte_first(*args) + inf_set_wide_high_byte_first(_v=True) -> bool + +Help on function inf_show_auto in module ida_ida: + +inf_show_auto(*args) + inf_show_auto() -> bool + +Help on function inf_show_line_pref in module ida_ida: + +inf_show_line_pref(*args) + inf_show_line_pref() -> bool + +Help on function inf_show_void in module ida_ida: + +inf_show_void(*args) + inf_show_void() -> bool + +Help on function inf_stack_ldbl in module ida_ida: + +inf_stack_ldbl(*args) + inf_stack_ldbl() -> bool + +Help on function inf_stack_varargs in module ida_ida: + +inf_stack_varargs(*args) + inf_stack_varargs() -> bool + +Help on function inf_use_allasm in module ida_ida: + +inf_use_allasm(*args) + inf_use_allasm() -> bool + +Help on function inf_use_gcc_layout in module ida_ida: + +inf_use_gcc_layout(*args) + inf_use_gcc_layout() -> bool + +Help on function inf_abi_set_by_user in module ida_ida: + +inf_abi_set_by_user(*args) + inf_abi_set_by_user() -> bool + +Help on function inf_allow_non_matched_ops in module ida_ida: + +inf_allow_non_matched_ops(*args) + inf_allow_non_matched_ops() -> bool + +Help on function inf_allow_sigmulti in module ida_ida: + +inf_allow_sigmulti(*args) + inf_allow_sigmulti() -> bool + +Help on function inf_append_sigcmt in module ida_ida: + +inf_append_sigcmt(*args) + inf_append_sigcmt() -> bool + +Help on function inf_check_manual_ops in module ida_ida: + +inf_check_manual_ops(*args) + inf_check_manual_ops() -> bool + +Help on function inf_check_unicode_strlits in module ida_ida: + +inf_check_unicode_strlits(*args) + inf_check_unicode_strlits() -> bool + +Help on function inf_coagulate_code in module ida_ida: + +inf_coagulate_code(*args) + inf_coagulate_code() -> bool + +Help on function inf_coagulate_data in module ida_ida: + +inf_coagulate_data(*args) + inf_coagulate_data() -> bool + +Help on function inf_compress_idb in module ida_ida: + +inf_compress_idb(*args) + inf_compress_idb() -> bool + +Help on function inf_create_all_xrefs in module ida_ida: + +inf_create_all_xrefs(*args) + inf_create_all_xrefs() -> bool + +Help on function inf_create_func_from_call in module ida_ida: + +inf_create_func_from_call(*args) + inf_create_func_from_call() -> bool + +Help on function inf_create_func_from_ptr in module ida_ida: + +inf_create_func_from_ptr(*args) + inf_create_func_from_ptr() -> bool + +Help on function inf_create_func_tails in module ida_ida: + +inf_create_func_tails(*args) + inf_create_func_tails() -> bool + +Help on function inf_create_jump_tables in module ida_ida: + +inf_create_jump_tables(*args) + inf_create_jump_tables() -> bool + +Help on function inf_create_off_on_dref in module ida_ida: + +inf_create_off_on_dref(*args) + inf_create_off_on_dref() -> bool + +Help on function inf_create_off_using_fixup in module ida_ida: + +inf_create_off_using_fixup(*args) + inf_create_off_using_fixup() -> bool + +Help on function inf_create_strlit_on_xref in module ida_ida: + +inf_create_strlit_on_xref(*args) + inf_create_strlit_on_xref() -> bool + +Help on function inf_data_offset in module ida_ida: + +inf_data_offset(*args) + inf_data_offset() -> bool + +Help on function inf_dbg_no_store_path in module ida_ida: + +inf_dbg_no_store_path(*args) + inf_dbg_no_store_path() -> bool + +Help on function inf_decode_fpp in module ida_ida: + +inf_decode_fpp(*args) + inf_decode_fpp() -> bool + +Help on function inf_del_no_xref_insns in module ida_ida: + +inf_del_no_xref_insns(*args) + inf_del_no_xref_insns() -> bool + +Help on function inf_final_pass in module ida_ida: + +inf_final_pass(*args) + inf_final_pass() -> bool + +Help on function inf_full_sp_ana in module ida_ida: + +inf_full_sp_ana(*args) + inf_full_sp_ana() -> bool + +Help on function inf_gen_assume in module ida_ida: + +inf_gen_assume(*args) + inf_gen_assume() -> bool + +Help on function inf_gen_org in module ida_ida: + +inf_gen_org(*args) + inf_gen_org() -> bool + +Help on function inf_get_abibits in module ida_ida: + +inf_get_abibits(*args) + inf_get_abibits() -> uint32 + +Help on function inf_get_af in module ida_ida: + +inf_get_af(*args) + inf_get_af() -> uint32 + +Help on function inf_get_af2 in module ida_ida: + +inf_get_af2(*args) + inf_get_af2() -> uint32 + +Help on function inf_get_af2_low in module ida_ida: + +inf_get_af2_low(*args) + inf_get_af2_low() -> ushort + + + Get/set low 16bit half of inf.af2. + +Help on function inf_get_af_high in module ida_ida: + +inf_get_af_high(*args) + inf_get_af_high() -> ushort + +Help on function inf_get_af_low in module ida_ida: + +inf_get_af_low(*args) + inf_get_af_low() -> ushort + + + Get/set low/high 16bit halves of inf.af. + +Help on function inf_get_appcall_options in module ida_ida: + +inf_get_appcall_options(*args) + inf_get_appcall_options() -> uint32 + +Help on function inf_get_apptype in module ida_ida: + +inf_get_apptype(*args) + inf_get_apptype() -> ushort + +Help on function inf_get_asmtype in module ida_ida: + +inf_get_asmtype(*args) + inf_get_asmtype() -> uchar + +Help on function inf_get_baseaddr in module ida_ida: + +inf_get_baseaddr(*args) + inf_get_baseaddr() -> uval_t + +Help on function inf_get_bin_prefix_size in module ida_ida: + +inf_get_bin_prefix_size(*args) + inf_get_bin_prefix_size() -> short + +Help on function inf_get_cc in module ida_ida: + +inf_get_cc(*args) + inf_get_cc(out) -> bool + +Help on function inf_get_cc_cm in module ida_ida: + +inf_get_cc_cm(*args) + inf_get_cc_cm() -> cm_t + +Help on function inf_get_cc_defalign in module ida_ida: + +inf_get_cc_defalign(*args) + inf_get_cc_defalign() -> uchar + +Help on function inf_get_cc_id in module ida_ida: + +inf_get_cc_id(*args) + inf_get_cc_id() -> comp_t + +Help on function inf_get_cc_size_b in module ida_ida: + +inf_get_cc_size_b(*args) + inf_get_cc_size_b() -> uchar + +Help on function inf_get_cc_size_e in module ida_ida: + +inf_get_cc_size_e(*args) + inf_get_cc_size_e() -> uchar + +Help on function inf_get_cc_size_i in module ida_ida: + +inf_get_cc_size_i(*args) + inf_get_cc_size_i() -> uchar + +Help on function inf_get_cc_size_l in module ida_ida: + +inf_get_cc_size_l(*args) + inf_get_cc_size_l() -> uchar + +Help on function inf_get_cc_size_ldbl in module ida_ida: + +inf_get_cc_size_ldbl(*args) + inf_get_cc_size_ldbl() -> uchar + +Help on function inf_get_cc_size_ll in module ida_ida: + +inf_get_cc_size_ll(*args) + inf_get_cc_size_ll() -> uchar + +Help on function inf_get_cc_size_s in module ida_ida: + +inf_get_cc_size_s(*args) + inf_get_cc_size_s() -> uchar + +Help on function inf_get_cmtflg in module ida_ida: + +inf_get_cmtflg(*args) + inf_get_cmtflg() -> uchar + +Help on function inf_get_comment in module ida_ida: + +inf_get_comment(*args) + inf_get_comment() -> uchar + +Help on function inf_get_database_change_count in module ida_ida: + +inf_get_database_change_count(*args) + inf_get_database_change_count() -> uint32 + +Help on function inf_get_datatypes in module ida_ida: + +inf_get_datatypes(*args) + inf_get_datatypes() -> uval_t + +Help on function inf_get_demnames in module ida_ida: + +inf_get_demnames(*args) + inf_get_demnames() -> uchar + +Help on function inf_get_filetype in module ida_ida: + +inf_get_filetype(*args) + inf_get_filetype() -> filetype_t + +Help on function inf_get_genflags in module ida_ida: + +inf_get_genflags(*args) + inf_get_genflags() -> ushort + +Help on function inf_get_highoff in module ida_ida: + +inf_get_highoff(*args) + inf_get_highoff() -> ea_t + +Help on function inf_get_indent in module ida_ida: + +inf_get_indent(*args) + inf_get_indent() -> uchar + +Help on function inf_get_lenxref in module ida_ida: + +inf_get_lenxref(*args) + inf_get_lenxref() -> ushort + +Help on function inf_get_lflags in module ida_ida: + +inf_get_lflags(*args) + inf_get_lflags() -> uint32 + +Help on function inf_get_limiter in module ida_ida: + +inf_get_limiter(*args) + inf_get_limiter() -> uchar + +Help on function inf_get_listnames in module ida_ida: + +inf_get_listnames(*args) + inf_get_listnames() -> uchar + +Help on function inf_get_long_demnames in module ida_ida: + +inf_get_long_demnames(*args) + inf_get_long_demnames() -> uint32 + +Help on function inf_get_lowoff in module ida_ida: + +inf_get_lowoff(*args) + inf_get_lowoff() -> ea_t + +Help on function inf_get_main in module ida_ida: + +inf_get_main(*args) + inf_get_main() -> ea_t + +Help on function inf_get_margin in module ida_ida: + +inf_get_margin(*args) + inf_get_margin() -> ushort + +Help on function inf_get_max_autoname_len in module ida_ida: + +inf_get_max_autoname_len(*args) + inf_get_max_autoname_len() -> ushort + +Help on function inf_get_max_ea in module ida_ida: + +inf_get_max_ea(*args) + inf_get_max_ea() -> ea_t + +Help on function inf_get_maxref in module ida_ida: + +inf_get_maxref(*args) + inf_get_maxref() -> uval_t + +Help on function inf_get_min_ea in module ida_ida: + +inf_get_min_ea(*args) + inf_get_min_ea() -> ea_t + +Help on function inf_get_nametype in module ida_ida: + +inf_get_nametype(*args) + inf_get_nametype() -> char + +Help on function inf_get_netdelta in module ida_ida: + +inf_get_netdelta(*args) + inf_get_netdelta() -> sval_t + +Help on function inf_get_omax_ea in module ida_ida: + +inf_get_omax_ea(*args) + inf_get_omax_ea() -> ea_t + +Help on function inf_get_omin_ea in module ida_ida: + +inf_get_omin_ea(*args) + inf_get_omin_ea() -> ea_t + +Help on function inf_get_ostype in module ida_ida: + +inf_get_ostype(*args) + inf_get_ostype() -> ushort + +Help on function inf_get_outflags in module ida_ida: + +inf_get_outflags(*args) + inf_get_outflags() -> uint32 + +Help on function inf_get_prefflag in module ida_ida: + +inf_get_prefflag(*args) + inf_get_prefflag() -> uchar + +Help on function inf_get_privrange in module ida_ida: + +inf_get_privrange(*args) + inf_get_privrange(out) -> bool + inf_get_privrange() -> range_t + +Help on function inf_get_privrange_end_ea in module ida_ida: + +inf_get_privrange_end_ea(*args) + inf_get_privrange_end_ea() -> ea_t + +Help on function inf_get_privrange_start_ea in module ida_ida: + +inf_get_privrange_start_ea(*args) + inf_get_privrange_start_ea() -> ea_t + +Help on function inf_get_procname in module ida_ida: + +inf_get_procname(*args) + inf_get_procname() -> str + +Help on function inf_get_refcmtnum in module ida_ida: + +inf_get_refcmtnum(*args) + inf_get_refcmtnum() -> uchar + +Help on function inf_get_short_demnames in module ida_ida: + +inf_get_short_demnames(*args) + inf_get_short_demnames() -> uint32 + +Help on function inf_get_specsegs in module ida_ida: + +inf_get_specsegs(*args) + inf_get_specsegs() -> uchar + +Help on function inf_get_start_cs in module ida_ida: + +inf_get_start_cs(*args) + inf_get_start_cs() -> sel_t + +Help on function inf_get_start_ea in module ida_ida: + +inf_get_start_ea(*args) + inf_get_start_ea() -> ea_t + +Help on function inf_get_start_ip in module ida_ida: + +inf_get_start_ip(*args) + inf_get_start_ip() -> ea_t + +Help on function inf_get_start_sp in module ida_ida: + +inf_get_start_sp(*args) + inf_get_start_sp() -> ea_t + +Help on function inf_get_start_ss in module ida_ida: + +inf_get_start_ss(*args) + inf_get_start_ss() -> sel_t + +Help on function inf_get_strlit_break in module ida_ida: + +inf_get_strlit_break(*args) + inf_get_strlit_break() -> uchar + +Help on function inf_get_strlit_flags in module ida_ida: + +inf_get_strlit_flags(*args) + inf_get_strlit_flags() -> uchar + +Help on function inf_get_strlit_pref in module ida_ida: + +inf_get_strlit_pref(*args) + inf_get_strlit_pref() -> str + +Help on function inf_get_strlit_sernum in module ida_ida: + +inf_get_strlit_sernum(*args) + inf_get_strlit_sernum() -> uval_t + +Help on function inf_get_strlit_zeroes in module ida_ida: + +inf_get_strlit_zeroes(*args) + inf_get_strlit_zeroes() -> char + +Help on function inf_get_strtype in module ida_ida: + +inf_get_strtype(*args) + inf_get_strtype() -> int32 + +Help on function inf_get_type_xrefnum in module ida_ida: + +inf_get_type_xrefnum(*args) + inf_get_type_xrefnum() -> uchar + +Help on function inf_get_version in module ida_ida: + +inf_get_version(*args) + inf_get_version() -> ushort + +Help on function inf_get_xrefflag in module ida_ida: + +inf_get_xrefflag(*args) + inf_get_xrefflag() -> uchar + +Help on function inf_get_xrefnum in module ida_ida: + +inf_get_xrefnum(*args) + inf_get_xrefnum() -> uchar + +Help on function inf_guess_func_type in module ida_ida: + +inf_guess_func_type(*args) + inf_guess_func_type() -> bool + +Help on function inf_handle_eh in module ida_ida: + +inf_handle_eh(*args) + inf_handle_eh() -> bool + +Help on function inf_handle_rtti in module ida_ida: + +inf_handle_rtti(*args) + inf_handle_rtti() -> bool + +Help on function inf_hide_comments in module ida_ida: + +inf_hide_comments(*args) + inf_hide_comments() -> bool + +Help on function inf_hide_libfuncs in module ida_ida: + +inf_hide_libfuncs(*args) + inf_hide_libfuncs() -> bool + +Help on function inf_huge_arg_align in module ida_ida: + +inf_huge_arg_align(*args) + inf_huge_arg_align() -> bool + +Help on function inf_inc_database_change_count in module ida_ida: + +inf_inc_database_change_count(*args) + inf_inc_database_change_count(cnt=1) + +Help on function inf_is_limiter_empty in module ida_ida: + +inf_is_limiter_empty(*args) + inf_is_limiter_empty() -> bool + +Help on function inf_is_limiter_thick in module ida_ida: + +inf_is_limiter_thick(*args) + inf_is_limiter_thick() -> bool + +Help on function inf_is_limiter_thin in module ida_ida: + +inf_is_limiter_thin(*args) + inf_is_limiter_thin() -> bool + +Help on function inf_macros_enabled in module ida_ida: + +inf_macros_enabled(*args) + inf_macros_enabled() -> bool + +Help on function inf_mark_code in module ida_ida: + +inf_mark_code(*args) + inf_mark_code() -> bool + +Help on function inf_no_store_user_info in module ida_ida: + +inf_no_store_user_info(*args) + inf_no_store_user_info() -> bool + +Help on function inf_noflow_to_data in module ida_ida: + +inf_noflow_to_data(*args) + inf_noflow_to_data() -> bool + +Help on function inf_noret_ana in module ida_ida: + +inf_noret_ana(*args) + inf_noret_ana() -> bool + +Help on function inf_op_offset in module ida_ida: + +inf_op_offset(*args) + inf_op_offset() -> bool + +Help on function inf_pack_idb in module ida_ida: + +inf_pack_idb(*args) + inf_pack_idb() -> bool + +Help on function inf_postinc_strlit_sernum in module ida_ida: + +inf_postinc_strlit_sernum(*args) + inf_postinc_strlit_sernum(cnt=1) -> uval_t + +Help on function inf_prefix_show_funcoff in module ida_ida: + +inf_prefix_show_funcoff(*args) + inf_prefix_show_funcoff() -> bool + +Help on function inf_prefix_show_segaddr in module ida_ida: + +inf_prefix_show_segaddr(*args) + inf_prefix_show_segaddr() -> bool + +Help on function inf_prefix_show_stack in module ida_ida: + +inf_prefix_show_stack(*args) + inf_prefix_show_stack() -> bool + +Help on function inf_prefix_truncate_opcode_bytes in module ida_ida: + +inf_prefix_truncate_opcode_bytes(*args) + inf_prefix_truncate_opcode_bytes() -> bool + +Help on function inf_propagate_regargs in module ida_ida: + +inf_propagate_regargs(*args) + inf_propagate_regargs() -> bool + +Help on function inf_propagate_stkargs in module ida_ida: + +inf_propagate_stkargs(*args) + inf_propagate_stkargs() -> bool + +Help on function inf_rename_jumpfunc in module ida_ida: + +inf_rename_jumpfunc(*args) + inf_rename_jumpfunc() -> bool + +Help on function inf_rename_nullsub in module ida_ida: + +inf_rename_nullsub(*args) + inf_rename_nullsub() -> bool + +Help on function inf_set_32bit in module ida_ida: + +inf_set_32bit(*args) + inf_set_32bit(_v=True) -> bool + +Help on function inf_set_abi_set_by_user in module ida_ida: + +inf_set_abi_set_by_user(*args) + inf_set_abi_set_by_user(_v=True) -> bool + +Help on function inf_set_abibits in module ida_ida: + +inf_set_abibits(*args) + inf_set_abibits(_v) -> bool + +Help on function inf_set_af in module ida_ida: + +inf_set_af(*args) + inf_set_af(_v) -> bool + +Help on function inf_set_af2 in module ida_ida: + +inf_set_af2(*args) + inf_set_af2(_v) -> bool + +Help on function inf_set_af2_low in module ida_ida: + +inf_set_af2_low(*args) + inf_set_af2_low(saf) + +Help on function inf_set_af_high in module ida_ida: + +inf_set_af_high(*args) + inf_set_af_high(saf2) + +Help on function inf_set_af_low in module ida_ida: + +inf_set_af_low(*args) + inf_set_af_low(saf) + +Help on function inf_set_allow_non_matched_ops in module ida_ida: + +inf_set_allow_non_matched_ops(*args) + inf_set_allow_non_matched_ops(_v=True) -> bool + +Help on function inf_set_allow_sigmulti in module ida_ida: + +inf_set_allow_sigmulti(*args) + inf_set_allow_sigmulti(_v=True) -> bool + +Help on function inf_set_appcall_options in module ida_ida: + +inf_set_appcall_options(*args) + inf_set_appcall_options(_v) -> bool + +Help on function inf_set_append_sigcmt in module ida_ida: + +inf_set_append_sigcmt(*args) + inf_set_append_sigcmt(_v=True) -> bool + +Help on function inf_set_apptype in module ida_ida: + +inf_set_apptype(*args) + inf_set_apptype(_v) -> bool + +Help on function inf_set_asmtype in module ida_ida: + +inf_set_asmtype(*args) + inf_set_asmtype(_v) -> bool + +Help on function inf_set_baseaddr in module ida_ida: + +inf_set_baseaddr(*args) + inf_set_baseaddr(_v) -> bool + +Help on function inf_set_big_arg_align in module ida_ida: + +inf_set_big_arg_align(*args) + inf_set_big_arg_align(_v=True) -> bool + +Help on function inf_set_bin_prefix_size in module ida_ida: + +inf_set_bin_prefix_size(*args) + inf_set_bin_prefix_size(_v) -> bool + +Help on function inf_set_cc in module ida_ida: + +inf_set_cc(*args) + inf_set_cc(_v) -> bool + +Help on function inf_set_cc_cm in module ida_ida: + +inf_set_cc_cm(*args) + inf_set_cc_cm(_v) -> bool + +Help on function inf_set_cc_defalign in module ida_ida: + +inf_set_cc_defalign(*args) + inf_set_cc_defalign(_v) -> bool + +Help on function inf_set_cc_id in module ida_ida: + +inf_set_cc_id(*args) + inf_set_cc_id(_v) -> bool + +Help on function inf_set_cc_size_b in module ida_ida: + +inf_set_cc_size_b(*args) + inf_set_cc_size_b(_v) -> bool + +Help on function inf_set_cc_size_e in module ida_ida: + +inf_set_cc_size_e(*args) + inf_set_cc_size_e(_v) -> bool + +Help on function inf_set_cc_size_i in module ida_ida: + +inf_set_cc_size_i(*args) + inf_set_cc_size_i(_v) -> bool + +Help on function inf_set_cc_size_l in module ida_ida: + +inf_set_cc_size_l(*args) + inf_set_cc_size_l(_v) -> bool + +Help on function inf_set_cc_size_ldbl in module ida_ida: + +inf_set_cc_size_ldbl(*args) + inf_set_cc_size_ldbl(_v) -> bool + +Help on function inf_set_cc_size_ll in module ida_ida: + +inf_set_cc_size_ll(*args) + inf_set_cc_size_ll(_v) -> bool + +Help on function inf_set_cc_size_s in module ida_ida: + +inf_set_cc_size_s(*args) + inf_set_cc_size_s(_v) -> bool + +Help on function inf_set_check_manual_ops in module ida_ida: + +inf_set_check_manual_ops(*args) + inf_set_check_manual_ops(_v=True) -> bool + +Help on function inf_set_check_unicode_strlits in module ida_ida: + +inf_set_check_unicode_strlits(*args) + inf_set_check_unicode_strlits(_v=True) -> bool + +Help on function inf_set_cmtflg in module ida_ida: + +inf_set_cmtflg(*args) + inf_set_cmtflg(_v) -> bool + +Help on function inf_set_coagulate_code in module ida_ida: + +inf_set_coagulate_code(*args) + inf_set_coagulate_code(_v=True) -> bool + +Help on function inf_set_coagulate_data in module ida_ida: + +inf_set_coagulate_data(*args) + inf_set_coagulate_data(_v=True) -> bool + +Help on function inf_set_comment in module ida_ida: + +inf_set_comment(*args) + inf_set_comment(_v) -> bool + +Help on function inf_set_compress_idb in module ida_ida: + +inf_set_compress_idb(*args) + inf_set_compress_idb(_v=True) -> bool + +Help on function inf_set_create_all_xrefs in module ida_ida: + +inf_set_create_all_xrefs(*args) + inf_set_create_all_xrefs(_v=True) -> bool + +Help on function inf_set_create_func_from_call in module ida_ida: + +inf_set_create_func_from_call(*args) + inf_set_create_func_from_call(_v=True) -> bool + +Help on function inf_set_create_func_from_ptr in module ida_ida: + +inf_set_create_func_from_ptr(*args) + inf_set_create_func_from_ptr(_v=True) -> bool + +Help on function inf_set_create_func_tails in module ida_ida: + +inf_set_create_func_tails(*args) + inf_set_create_func_tails(_v=True) -> bool + +Help on function inf_set_create_jump_tables in module ida_ida: + +inf_set_create_jump_tables(*args) + inf_set_create_jump_tables(_v=True) -> bool + +Help on function inf_set_create_off_on_dref in module ida_ida: + +inf_set_create_off_on_dref(*args) + inf_set_create_off_on_dref(_v=True) -> bool + +Help on function inf_set_create_off_using_fixup in module ida_ida: + +inf_set_create_off_using_fixup(*args) + inf_set_create_off_using_fixup(_v=True) -> bool + +Help on function inf_set_create_strlit_on_xref in module ida_ida: + +inf_set_create_strlit_on_xref(*args) + inf_set_create_strlit_on_xref(_v=True) -> bool + +Help on function inf_set_data_offset in module ida_ida: + +inf_set_data_offset(*args) + inf_set_data_offset(_v=True) -> bool + +Help on function inf_set_database_change_count in module ida_ida: + +inf_set_database_change_count(*args) + inf_set_database_change_count(_v) -> bool + +Help on function inf_set_datatypes in module ida_ida: + +inf_set_datatypes(*args) + inf_set_datatypes(_v) -> bool + +Help on function inf_set_dbg_no_store_path in module ida_ida: + +inf_set_dbg_no_store_path(*args) + inf_set_dbg_no_store_path(_v=True) -> bool + +Help on function inf_set_decode_fpp in module ida_ida: + +inf_set_decode_fpp(*args) + inf_set_decode_fpp(_v=True) -> bool + +Help on function inf_set_del_no_xref_insns in module ida_ida: + +inf_set_del_no_xref_insns(*args) + inf_set_del_no_xref_insns(_v=True) -> bool + +Help on function inf_set_demnames in module ida_ida: + +inf_set_demnames(*args) + inf_set_demnames(_v) -> bool + +Help on function inf_set_dll in module ida_ida: + +inf_set_dll(*args) + inf_set_dll(_v=True) -> bool + +Help on function inf_set_filetype in module ida_ida: + +inf_set_filetype(*args) + inf_set_filetype(_v) -> bool + +Help on function inf_set_final_pass in module ida_ida: + +inf_set_final_pass(*args) + inf_set_final_pass(_v=True) -> bool + +Help on function inf_set_flat_off32 in module ida_ida: + +inf_set_flat_off32(*args) + inf_set_flat_off32(_v=True) -> bool + +Help on function inf_set_full_sp_ana in module ida_ida: + +inf_set_full_sp_ana(*args) + inf_set_full_sp_ana(_v=True) -> bool + +Help on function inf_set_gen_assume in module ida_ida: + +inf_set_gen_assume(*args) + inf_set_gen_assume(_v=True) -> bool + +Help on function inf_set_gen_org in module ida_ida: + +inf_set_gen_org(*args) + inf_set_gen_org(_v=True) -> bool + +Help on function inf_set_genflags in module ida_ida: + +inf_set_genflags(*args) + inf_set_genflags(_v) -> bool + +Help on function inf_set_guess_func_type in module ida_ida: + +inf_set_guess_func_type(*args) + inf_set_guess_func_type(_v=True) -> bool + +Help on function inf_set_handle_eh in module ida_ida: + +inf_set_handle_eh(*args) + inf_set_handle_eh(_v=True) -> bool + +Help on function inf_set_handle_rtti in module ida_ida: + +inf_set_handle_rtti(*args) + inf_set_handle_rtti(_v=True) -> bool + +Help on function inf_set_hard_float in module ida_ida: + +inf_set_hard_float(*args) + inf_set_hard_float(_v=True) -> bool + +Help on function inf_set_hide_comments in module ida_ida: + +inf_set_hide_comments(*args) + inf_set_hide_comments(_v=True) -> bool + +Help on function inf_set_hide_libfuncs in module ida_ida: + +inf_set_hide_libfuncs(*args) + inf_set_hide_libfuncs(_v=True) -> bool + +Help on function inf_set_highoff in module ida_ida: + +inf_set_highoff(*args) + inf_set_highoff(_v) -> bool + +Help on function inf_set_huge_arg_align in module ida_ida: + +inf_set_huge_arg_align(*args) + inf_set_huge_arg_align(_v=True) -> bool + +Help on function inf_set_indent in module ida_ida: + +inf_set_indent(*args) + inf_set_indent(_v) -> bool + +Help on function inf_set_kernel_mode in module ida_ida: + +inf_set_kernel_mode(*args) + inf_set_kernel_mode(_v=True) -> bool + +Help on function inf_set_lenxref in module ida_ida: + +inf_set_lenxref(*args) + inf_set_lenxref(_v) -> bool + +Help on function inf_set_lflags in module ida_ida: + +inf_set_lflags(*args) + inf_set_lflags(_v) -> bool + +Help on function inf_set_limiter in module ida_ida: + +inf_set_limiter(*args) + inf_set_limiter(_v) -> bool + +Help on function inf_set_limiter_empty in module ida_ida: + +inf_set_limiter_empty(*args) + inf_set_limiter_empty(_v=True) -> bool + +Help on function inf_set_limiter_thick in module ida_ida: + +inf_set_limiter_thick(*args) + inf_set_limiter_thick(_v=True) -> bool + +Help on function inf_set_limiter_thin in module ida_ida: + +inf_set_limiter_thin(*args) + inf_set_limiter_thin(_v=True) -> bool + +Help on function inf_set_listnames in module ida_ida: + +inf_set_listnames(*args) + inf_set_listnames(_v) -> bool + +Help on function inf_set_loading_idc in module ida_ida: + +inf_set_loading_idc(*args) + inf_set_loading_idc(_v=True) -> bool + +Help on function inf_set_long_demnames in module ida_ida: + +inf_set_long_demnames(*args) + inf_set_long_demnames(_v) -> bool + +Help on function inf_set_lowoff in module ida_ida: + +inf_set_lowoff(*args) + inf_set_lowoff(_v) -> bool + +Help on function inf_set_macros_enabled in module ida_ida: + +inf_set_macros_enabled(*args) + inf_set_macros_enabled(_v=True) -> bool + +Help on function inf_set_main in module ida_ida: + +inf_set_main(*args) + inf_set_main(_v) -> bool + +Help on function inf_set_map_stkargs in module ida_ida: + +inf_set_map_stkargs(*args) + inf_set_map_stkargs(_v=True) -> bool + +Help on function inf_set_margin in module ida_ida: + +inf_set_margin(*args) + inf_set_margin(_v) -> bool + +Help on function inf_set_mark_code in module ida_ida: + +inf_set_mark_code(*args) + inf_set_mark_code(_v=True) -> bool + +Help on function inf_set_max_autoname_len in module ida_ida: + +inf_set_max_autoname_len(*args) + inf_set_max_autoname_len(_v) -> bool + +Help on function inf_set_max_ea in module ida_ida: + +inf_set_max_ea(*args) + inf_set_max_ea(_v) -> bool + +Help on function inf_set_maxref in module ida_ida: + +inf_set_maxref(*args) + inf_set_maxref(_v) -> bool + +Help on function inf_set_mem_aligned4 in module ida_ida: + +inf_set_mem_aligned4(*args) + inf_set_mem_aligned4(_v=True) -> bool + +Help on function inf_set_min_ea in module ida_ida: + +inf_set_min_ea(*args) + inf_set_min_ea(_v) -> bool + +Help on function inf_set_nametype in module ida_ida: + +inf_set_nametype(*args) + inf_set_nametype(_v) -> bool + +Help on function inf_set_netdelta in module ida_ida: + +inf_set_netdelta(*args) + inf_set_netdelta(_v) -> bool + +Help on function inf_set_no_store_user_info in module ida_ida: + +inf_set_no_store_user_info(*args) + inf_set_no_store_user_info(_v=True) -> bool + +Help on function inf_set_noflow_to_data in module ida_ida: + +inf_set_noflow_to_data(*args) + inf_set_noflow_to_data(_v=True) -> bool + +Help on function inf_set_noret_ana in module ida_ida: + +inf_set_noret_ana(*args) + inf_set_noret_ana(_v=True) -> bool + +Help on function inf_set_omax_ea in module ida_ida: + +inf_set_omax_ea(*args) + inf_set_omax_ea(_v) -> bool + +Help on function inf_set_omin_ea in module ida_ida: + +inf_set_omin_ea(*args) + inf_set_omin_ea(_v) -> bool + +Help on function inf_set_op_offset in module ida_ida: + +inf_set_op_offset(*args) + inf_set_op_offset(_v=True) -> bool + +Help on function inf_set_ostype in module ida_ida: + +inf_set_ostype(*args) + inf_set_ostype(_v) -> bool + +Help on function inf_set_outflags in module ida_ida: + +inf_set_outflags(*args) + inf_set_outflags(_v) -> bool + +Help on function inf_set_pack_idb in module ida_ida: + +inf_set_pack_idb(*args) + inf_set_pack_idb(_v=True) -> bool + +Help on function inf_set_pack_stkargs in module ida_ida: + +inf_set_pack_stkargs(*args) + inf_set_pack_stkargs(_v=True) -> bool + +Help on function inf_set_prefflag in module ida_ida: + +inf_set_prefflag(*args) + inf_set_prefflag(_v) -> bool + +Help on function inf_set_prefix_show_funcoff in module ida_ida: + +inf_set_prefix_show_funcoff(*args) + inf_set_prefix_show_funcoff(_v=True) -> bool + +Help on function inf_set_prefix_show_segaddr in module ida_ida: + +inf_set_prefix_show_segaddr(*args) + inf_set_prefix_show_segaddr(_v=True) -> bool + +Help on function inf_set_prefix_show_stack in module ida_ida: + +inf_set_prefix_show_stack(*args) + inf_set_prefix_show_stack(_v=True) -> bool + +Help on function inf_set_prefix_truncate_opcode_bytes in module ida_ida: + +inf_set_prefix_truncate_opcode_bytes(*args) + inf_set_prefix_truncate_opcode_bytes(_v=True) -> bool + +Help on function inf_set_privrange in module ida_ida: + +inf_set_privrange(*args) + inf_set_privrange(_v) -> bool + +Help on function inf_set_privrange_end_ea in module ida_ida: + +inf_set_privrange_end_ea(*args) + inf_set_privrange_end_ea(_v) -> bool + +Help on function inf_set_privrange_start_ea in module ida_ida: + +inf_set_privrange_start_ea(*args) + inf_set_privrange_start_ea(_v) -> bool + +Help on function inf_set_procname in module ida_ida: + +inf_set_procname(*args) + inf_set_procname(_v, len=size_t(-1)) -> bool + +Help on function inf_set_propagate_regargs in module ida_ida: + +inf_set_propagate_regargs(*args) + inf_set_propagate_regargs(_v=True) -> bool + +Help on function inf_set_propagate_stkargs in module ida_ida: + +inf_set_propagate_stkargs(*args) + inf_set_propagate_stkargs(_v=True) -> bool + +Help on function inf_set_readonly_idb in module ida_ida: + +inf_set_readonly_idb(*args) + inf_set_readonly_idb(_v=True) -> bool + +Help on function inf_set_refcmtnum in module ida_ida: + +inf_set_refcmtnum(*args) + inf_set_refcmtnum(_v) -> bool + +Help on function inf_set_rename_jumpfunc in module ida_ida: + +inf_set_rename_jumpfunc(*args) + inf_set_rename_jumpfunc(_v=True) -> bool + +Help on function inf_set_rename_nullsub in module ida_ida: + +inf_set_rename_nullsub(*args) + inf_set_rename_nullsub(_v=True) -> bool + +Help on function inf_set_short_demnames in module ida_ida: + +inf_set_short_demnames(*args) + inf_set_short_demnames(_v) -> bool + +Help on function inf_set_should_create_stkvars in module ida_ida: + +inf_set_should_create_stkvars(*args) + inf_set_should_create_stkvars(_v=True) -> bool + +Help on function inf_set_should_trace_sp in module ida_ida: + +inf_set_should_trace_sp(*args) + inf_set_should_trace_sp(_v=True) -> bool + +Help on function inf_set_show_all_comments in module ida_ida: + +inf_set_show_all_comments(*args) + inf_set_show_all_comments(_v=True) -> bool + +Help on function inf_set_show_hidden_funcs in module ida_ida: + +inf_set_show_hidden_funcs(*args) + inf_set_show_hidden_funcs(_v=True) -> bool + +Help on function inf_set_show_hidden_insns in module ida_ida: + +inf_set_show_hidden_insns(*args) + inf_set_show_hidden_insns(_v=True) -> bool + +Help on function inf_set_show_hidden_segms in module ida_ida: + +inf_set_show_hidden_segms(*args) + inf_set_show_hidden_segms(_v=True) -> bool + +Help on function inf_set_show_repeatables in module ida_ida: + +inf_set_show_repeatables(*args) + inf_set_show_repeatables(_v=True) -> bool + +Help on function inf_set_show_src_linnum in module ida_ida: + +inf_set_show_src_linnum(*args) + inf_set_show_src_linnum(_v=True) -> bool + +Help on function inf_set_show_xref_fncoff in module ida_ida: + +inf_set_show_xref_fncoff(*args) + inf_set_show_xref_fncoff(_v=True) -> bool + +Help on function inf_set_show_xref_seg in module ida_ida: + +inf_set_show_xref_seg(*args) + inf_set_show_xref_seg(_v=True) -> bool + +Help on function inf_set_show_xref_tmarks in module ida_ida: + +inf_set_show_xref_tmarks(*args) + inf_set_show_xref_tmarks(_v=True) -> bool + +Help on function inf_set_show_xref_val in module ida_ida: + +inf_set_show_xref_val(*args) + inf_set_show_xref_val(_v=True) -> bool + +Help on function inf_set_snapshot in module ida_ida: + +inf_set_snapshot(*args) + inf_set_snapshot(_v=True) -> bool + +Help on function inf_set_specsegs in module ida_ida: + +inf_set_specsegs(*args) + inf_set_specsegs(_v) -> bool + +Help on function inf_set_stack_ldbl in module ida_ida: + +inf_set_stack_ldbl(*args) + inf_set_stack_ldbl(_v=True) -> bool + +Help on function inf_set_stack_varargs in module ida_ida: + +inf_set_stack_varargs(*args) + inf_set_stack_varargs(_v=True) -> bool + +Help on function inf_set_start_cs in module ida_ida: + +inf_set_start_cs(*args) + inf_set_start_cs(_v) -> bool + +Help on function inf_set_start_ea in module ida_ida: + +inf_set_start_ea(*args) + inf_set_start_ea(_v) -> bool + +Help on function inf_set_start_ip in module ida_ida: + +inf_set_start_ip(*args) + inf_set_start_ip(_v) -> bool + +Help on function inf_set_start_sp in module ida_ida: + +inf_set_start_sp(*args) + inf_set_start_sp(_v) -> bool + +Help on function inf_set_start_ss in module ida_ida: + +inf_set_start_ss(*args) + inf_set_start_ss(_v) -> bool + +Help on function inf_set_strlit_autocmt in module ida_ida: + +inf_set_strlit_autocmt(*args) + inf_set_strlit_autocmt(_v=True) -> bool + +Help on function inf_set_strlit_break in module ida_ida: + +inf_set_strlit_break(*args) + inf_set_strlit_break(_v) -> bool + +Help on function inf_set_strlit_flags in module ida_ida: + +inf_set_strlit_flags(*args) + inf_set_strlit_flags(_v) -> bool + +Help on function inf_set_strlit_name_bit in module ida_ida: + +inf_set_strlit_name_bit(*args) + inf_set_strlit_name_bit(_v=True) -> bool + +Help on function inf_set_strlit_names in module ida_ida: + +inf_set_strlit_names(*args) + inf_set_strlit_names(_v=True) -> bool + +Help on function inf_set_strlit_pref in module ida_ida: + +inf_set_strlit_pref(*args) + inf_set_strlit_pref(_v, len=size_t(-1)) -> bool + +Help on function inf_set_strlit_savecase in module ida_ida: + +inf_set_strlit_savecase(*args) + inf_set_strlit_savecase(_v=True) -> bool + +Help on function inf_set_strlit_serial_names in module ida_ida: + +inf_set_strlit_serial_names(*args) + inf_set_strlit_serial_names(_v=True) -> bool + +Help on function inf_set_strlit_sernum in module ida_ida: + +inf_set_strlit_sernum(*args) + inf_set_strlit_sernum(_v) -> bool + +Help on function inf_set_strlit_zeroes in module ida_ida: + +inf_set_strlit_zeroes(*args) + inf_set_strlit_zeroes(_v) -> bool + +Help on function inf_set_strtype in module ida_ida: + +inf_set_strtype(*args) + inf_set_strtype(_v) -> bool + +Help on function inf_set_test_mode in module ida_ida: + +inf_set_test_mode(*args) + inf_set_test_mode(_v=True) -> bool + +Help on function inf_set_trace_flow in module ida_ida: + +inf_set_trace_flow(*args) + inf_set_trace_flow(_v=True) -> bool + +Help on function inf_set_truncate_on_del in module ida_ida: + +inf_set_truncate_on_del(*args) + inf_set_truncate_on_del(_v=True) -> bool + +Help on function inf_set_type_xrefnum in module ida_ida: + +inf_set_type_xrefnum(*args) + inf_set_type_xrefnum(_v) -> bool + +Help on function inf_set_unicode_strlits in module ida_ida: + +inf_set_unicode_strlits(*args) + inf_set_unicode_strlits(_v=True) -> bool + +Help on function inf_set_use_allasm in module ida_ida: + +inf_set_use_allasm(*args) + inf_set_use_allasm(_v=True) -> bool + +Help on function inf_set_use_flirt in module ida_ida: + +inf_set_use_flirt(*args) + inf_set_use_flirt(_v=True) -> bool + +Help on function inf_set_use_gcc_layout in module ida_ida: + +inf_set_use_gcc_layout(*args) + inf_set_use_gcc_layout(_v=True) -> bool + +Help on function inf_set_version in module ida_ida: + +inf_set_version(*args) + inf_set_version(_v) -> bool + +Help on function inf_set_xrefflag in module ida_ida: + +inf_set_xrefflag(*args) + inf_set_xrefflag(_v) -> bool + +Help on function inf_set_xrefnum in module ida_ida: + +inf_set_xrefnum(*args) + inf_set_xrefnum(_v) -> bool + +Help on function inf_should_create_stkvars in module ida_ida: + +inf_should_create_stkvars(*args) + inf_should_create_stkvars() -> bool + +Help on function inf_should_trace_sp in module ida_ida: + +inf_should_trace_sp(*args) + inf_should_trace_sp() -> bool + +Help on function inf_show_all_comments in module ida_ida: + +inf_show_all_comments(*args) + inf_show_all_comments() -> bool + +Help on function inf_show_hidden_funcs in module ida_ida: + +inf_show_hidden_funcs(*args) + inf_show_hidden_funcs() -> bool + +Help on function inf_show_hidden_insns in module ida_ida: + +inf_show_hidden_insns(*args) + inf_show_hidden_insns() -> bool + +Help on function inf_show_hidden_segms in module ida_ida: + +inf_show_hidden_segms(*args) + inf_show_hidden_segms() -> bool + +Help on function inf_show_repeatables in module ida_ida: + +inf_show_repeatables(*args) + inf_show_repeatables() -> bool + +Help on function inf_show_src_linnum in module ida_ida: + +inf_show_src_linnum(*args) + inf_show_src_linnum() -> bool + +Help on function inf_show_xref_fncoff in module ida_ida: + +inf_show_xref_fncoff(*args) + inf_show_xref_fncoff() -> bool + +Help on function inf_show_xref_seg in module ida_ida: + +inf_show_xref_seg(*args) + inf_show_xref_seg() -> bool + +Help on function inf_show_xref_tmarks in module ida_ida: + +inf_show_xref_tmarks(*args) + inf_show_xref_tmarks() -> bool + +Help on function inf_show_xref_val in module ida_ida: + +inf_show_xref_val(*args) + inf_show_xref_val() -> bool + +Help on function inf_strlit_autocmt in module ida_ida: + +inf_strlit_autocmt(*args) + inf_strlit_autocmt() -> bool + +Help on function inf_strlit_name_bit in module ida_ida: + +inf_strlit_name_bit(*args) + inf_strlit_name_bit() -> bool + +Help on function inf_strlit_names in module ida_ida: + +inf_strlit_names(*args) + inf_strlit_names() -> bool + +Help on function inf_strlit_savecase in module ida_ida: + +inf_strlit_savecase(*args) + inf_strlit_savecase() -> bool + +Help on function inf_strlit_serial_names in module ida_ida: + +inf_strlit_serial_names(*args) + inf_strlit_serial_names() -> bool + +Help on function inf_test_mode in module ida_ida: + +inf_test_mode(*args) + inf_test_mode() -> bool + +Help on function inf_trace_flow in module ida_ida: + +inf_trace_flow(*args) + inf_trace_flow() -> bool + +Help on function inf_truncate_on_del in module ida_ida: + +inf_truncate_on_del(*args) + inf_truncate_on_del() -> bool + +Help on function inf_unicode_strlits in module ida_ida: + +inf_unicode_strlits(*args) + inf_unicode_strlits() -> bool + +Help on function inf_use_flirt in module ida_ida: + +inf_use_flirt(*args) + inf_use_flirt() -> bool + +Help on function is_filetype_like_binary in module ida_ida: + +is_filetype_like_binary(*args) + is_filetype_like_binary(ft) -> bool + + + Is unstructured input file? + + + @param ft (C++: filetype_t) + +Help on function in module ida_ida: + + lambda *args + +Help on function to_ea in module ida_ida: + +to_ea(*args) + to_ea(reg_cs, reg_ip) -> ea_t + + + Convert (sel,off) value to a linear address. + + + @param reg_cs (C++: sel_t) + @param reg_ip (C++: uval_t) + +=== ida_ida EPYDOC INJECTIONS === +ida_ida.ABI_8ALIGN4 +""" +4 byte alignment for 8byte scalars (__int64/double) inside structures? +""" + +ida_ida.ABI_BIGARG_ALIGN +""" +(e.g. __int64 argument should be 8byte aligned on some 32bit +platforms) + +use natural type alignment for argument if the alignment exceeds +native word size +""" + +ida_ida.ABI_GCC_LAYOUT +""" +use gcc layout for udts (used for mingw) +""" + +ida_ida.ABI_HARD_FLOAT +""" +use the floating-point register set +""" + +ida_ida.ABI_HUGEARG_ALIGN +""" +use natural type alignment for an argument even if its alignment +exceeds double native word size (the default is to use double word +max). e.g. if this bit is set, __int128 has 16-byte alignment +""" + +ida_ida.ABI_MAP_STKARGS +""" +register arguments are mapped to stack area (and consume stack slots) +""" + +ida_ida.ABI_PACK_STKARGS +""" +do not align stack arguments to stack slots +""" + +ida_ida.ABI_SET_BY_USER +""" +compiler/abi were set by user flag and require SETCOMP_BY_USER flag to +be changed +""" + +ida_ida.ABI_STACK_LDBL +""" +long double arguments are passed on stack +""" + +ida_ida.ABI_STACK_VARARGS +""" +varargs are always passed on stack (even when there are free +registers) +""" + +ida_ida.AF2_DOEH +""" +Handle EH information. +""" + +ida_ida.AF2_DORTTI +""" +Handle RTTI information. +""" + +ida_ida.AF2_MACRO +""" +Try to combine several instructions into a macro instruction +""" + +ida_ida.AF_ANORET +""" +Perform 'no-return' analysis. +""" + +ida_ida.AF_CHKUNI +""" +Check for unicode strings. +""" + +ida_ida.AF_CODE +""" +Trace execution flow. +""" + +ida_ida.AF_DATOFF +""" +Automatically convert data to offsets. +""" + +ida_ida.AF_DOCODE +""" +Coagulate code segs at the final pass. +""" + +ida_ida.AF_DODATA +""" +Coagulate data segs at the final pass. +""" + +ida_ida.AF_DREFOFF +""" +Create offset if data xref to seg32 exists. +""" + +ida_ida.AF_FINAL +""" +Final pass of analysis. +""" + +ida_ida.AF_FIXUP +""" +Create offsets and segments using fixup info. +""" + +ida_ida.AF_FLIRT +""" +Use flirt signatures. +""" + +ida_ida.AF_FTAIL +""" +Create function tails. +""" + +ida_ida.AF_HFLIRT +""" +Automatically hide library functions. +""" + +ida_ida.AF_IMMOFF +""" +Convert 32bit instruction operand to offset. +""" + +ida_ida.AF_JFUNC +""" +Rename jump functions as j_... +""" + +ida_ida.AF_JUMPTBL +""" +Locate and create jump tables. +""" + +ida_ida.AF_LVAR +""" +Create stack variables. +""" + +ida_ida.AF_MARKCODE +""" +Mark typical code sequences as code. +""" + +ida_ida.AF_MEMFUNC +""" +Try to guess member function types. +""" + +ida_ida.AF_NULLSUB +""" +Rename empty functions as nullsub_... +""" + +ida_ida.AF_PROC +""" +Create functions if call is present. +""" + +ida_ida.AF_PROCPTR +""" +Create function if data xref data->code32 exists. +""" + +ida_ida.AF_PURDAT +""" +Control flow to data segment is ignored. +""" + +ida_ida.AF_REGARG +""" +Propagate register argument information. +""" + +ida_ida.AF_SIGCMT +""" +Append a signature name comment for recognized anonymous library +functions. +""" + +ida_ida.AF_SIGMLT +""" +Allow recognition of several copies of the same function. +""" + +ida_ida.AF_STKARG +""" +Propagate stack argument information. +""" + +ida_ida.AF_STRLIT +""" +Create string literal if data xref exists. +""" + +ida_ida.AF_TRACE +""" +Trace stack pointer. +""" + +ida_ida.AF_TRFUNC +""" +Truncate functions upon code deletion. +""" + +ida_ida.AF_UNK +""" +Delete instructions with no xrefs. +""" + +ida_ida.AF_USED +""" +Analyze and create all xrefs. +""" + +ida_ida.AF_VERSP +""" +Perform full SP-analysis. (\\ph{verify_sp}) +""" + +ida_ida.DEMNAM_CMNT +""" +display demangled names as comments +""" + +ida_ida.DEMNAM_FIRST +""" +override type info +""" + +ida_ida.DEMNAM_GCC3 +""" +assume gcc3 names (valid for gnu compiler) +""" + +ida_ida.DEMNAM_MASK +""" +mask for name form +""" + +ida_ida.DEMNAM_NAME +""" +display demangled names as regular names +""" + +ida_ida.DEMNAM_NONE +""" +don't display demangled names +""" + +ida_ida.IDAINFO_TAG_SIZE +""" +The database parameters. This structure is kept in the ida database. +It contains the essential parameters for the current program +""" + +ida_ida.IDB_COMPRESSED +""" +compress & pack database components +""" + +ida_ida.IDB_PACKED +""" +pack database components into .idb +""" + +ida_ida.IDB_UNPACKED +""" +leave database components unpacked +""" + +ida_ida.INFFL_ALLASM +""" +the target assembler + +may use constructs not supported by +""" + +ida_ida.INFFL_AUTO +""" +Autoanalysis is enabled? +""" + +ida_ida.INFFL_CHKOPS +""" +check manual operands? (unused) +""" + +ida_ida.INFFL_GRAPH_VIEW +""" +currently using graph options (\\dto{graph}) +""" + +ida_ida.INFFL_LOADIDC +""" +loading an idc file that contains database info +""" + +ida_ida.INFFL_NMOPS +""" +allow non-matched operands? (unused) +""" + +ida_ida.INFFL_NOUSER +""" +do not store user info in the database +""" + +ida_ida.INFFL_READONLY +""" +(internal) temporary interdiction to modify the database +""" + +ida_ida.LFLG_64BIT +""" +64-bit program? +""" + +ida_ida.LFLG_COMPRESS +""" +compress the database? +""" + +ida_ida.LFLG_DBG_NOPATH +""" +do not store input full path in debugger process options +""" + +ida_ida.LFLG_FLAT_OFF32 +""" +treat 'REF_OFF32' as 32-bit offset for 16bit segments (otherwise try +SEG16:OFF16) +""" + +ida_ida.LFLG_IS_DLL +""" +Is dynamic library? +""" + +ida_ida.LFLG_KERNMODE +""" +is kernel mode binary? +""" + +ida_ida.LFLG_MSF +""" +Byte order: is MSB first? +""" + +ida_ida.LFLG_PACK +""" +pack the database? +""" + +ida_ida.LFLG_PC_FLAT +""" +32-bit program? +""" + +ida_ida.LFLG_PC_FPP +""" +decode floating point processor instructions? +""" + +ida_ida.LFLG_SNAPSHOT +""" +memory snapshot was taken? +""" + +ida_ida.LFLG_WIDE_HBF +""" +(wide bytes: \\ph{dnbits} > 8) + +Bit order of wide bytes: high byte first? +""" + +ida_ida.LMT_EMPTY +""" +empty lines at the end of basic blocks +""" + +ida_ida.LMT_THICK +""" +thick borders +""" + +ida_ida.LMT_THIN +""" +thin borders +""" + +ida_ida.LN_AUTO +""" +include autogenerated names +""" + +ida_ida.LN_NORMAL +""" +include normal names +""" + +ida_ida.LN_PUBLIC +""" +include public names +""" + +ida_ida.LN_WEAK +""" +include weak names +""" + +ida_ida.OFLG_GEN_ASSUME +""" +Generate 'assume' directives? +""" + +ida_ida.OFLG_GEN_NULL +""" +Generate empty lines? +""" + +ida_ida.OFLG_GEN_ORG +""" +Generate 'org' directives? +""" + +ida_ida.OFLG_GEN_TRYBLKS +""" +Generate try/catch directives? +""" + +ida_ida.OFLG_LZERO +""" +generate leading zeroes in numbers +""" + +ida_ida.OFLG_PREF_SEG +""" +line prefixes with segment name? +""" + +ida_ida.OFLG_SHOW_AUTO +""" +Display autoanalysis indicator? +""" + +ida_ida.OFLG_SHOW_PREF +""" +Show line prefixes? +""" + +ida_ida.OFLG_SHOW_VOID +""" +Display void marks? +""" + +ida_ida.PREF_FNCOFF +""" +show function offsets? +""" + +ida_ida.PREF_PFXTRUNC +""" +truncate instruction bytes if they would need more than 1 line +""" + +ida_ida.PREF_SEGADR +""" +show segment addresses? +""" + +ida_ida.PREF_STACK +""" +show stack pointer? +""" + +ida_ida.SCF_ALLCMT +""" +comment all lines? +""" + +ida_ida.SCF_LINNUM +""" +show source line numbers +""" + +ida_ida.SCF_NOCMT +""" +no comments at all +""" + +ida_ida.SCF_RPTCMT +""" +show repeatable comments? +""" + +ida_ida.SCF_SHHID_FUNC +""" +show hidden functions +""" + +ida_ida.SCF_SHHID_ITEM +""" +show hidden instructions +""" + +ida_ida.SCF_SHHID_SEGM +""" +show hidden segments +""" + +ida_ida.SCF_TESTMODE +""" +testida.idc is running +""" + +ida_ida.STRF_AUTO +""" +names have 'autogenerated' bit? +""" + +ida_ida.STRF_COMMENT +""" +generate auto comment for string references? +""" + +ida_ida.STRF_GEN +""" +generate names? +""" + +ida_ida.STRF_SAVECASE +""" +preserve case of strings for identifiers +""" + +ida_ida.STRF_SERIAL +""" +generate serial names? +""" + +ida_ida.STRF_UNICODE +""" +unicode strings are present? +""" + +ida_ida.SW_SEGXRF +""" +show segments in xrefs? +""" + +ida_ida.SW_XRFFNC +""" +show function offsets? +""" + +ida_ida.SW_XRFMRK +""" +show xref type marks? +""" + +ida_ida.SW_XRFVAL +""" +show xref values? (otherwise-"...") +""" + +ida_ida.UA_MAXOP +""" +max number of operands allowed for an instruction +""" +=== ida_ida EPYDOC INJECTIONS END === +Help on class CustomIDAMemo in module ida_kernwin: + +class CustomIDAMemo(View_Hooks) + | # + | # ----------------------------------------------------------------------- + | # CustomIDAMemo + | # ----------------------------------------------------------------------- + | + | Method resolution order: + | CustomIDAMemo + | View_Hooks + | __builtin__.object + | + | Methods defined here: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | __init__(self) + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | + | view_click(self, view, ve) + | + | view_close(self, view, *args) + | + | view_curpos(self, view, *args) + | + | view_dblclick(self, view, ve) + | + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | + | view_mouse_over(self, view, ve) + | + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | view_created(self, *args) + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from View_Hooks: + | + | __swig_destroy__ = + | delete_View_Hooks(self) + +Help on __IDAPython_Completion_Util in module ida_idaapi object: + +class __IDAPython_Completion_Util(__builtin__.object) + | Internal utility class for auto-completion support + | + | Methods defined here: + | + | __call__(self, line, x) + | + | __init__(self) + | + | debug(self, *args) + | + | dir_namespace(self, m, prefix) + | + | get_candidates(self, qname, line, match_syntax_char) + | + | maybe_extend_syntactically(self, ns, name, line, syntax_char) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | QNAME_PAT = <_sre.SRE_Pattern object> + +Help on function IDAPython_ExecScript in module ida_idaapi: + +IDAPython_ExecScript(script, g, print_error=True) + Run the specified script. + It also addresses http://code.google.com/p/idapython/issues/detail?id=42 + + This function is used by the low-level plugin code. + +Help on function IDAPython_ExecSystem in module ida_idaapi: + +IDAPython_ExecSystem(cmd) + Executes a command with popen(). + +Help on function IDAPython_FormatExc in module ida_idaapi: + +IDAPython_FormatExc(etype, value=None, tb=None, limit=None) + This function is used to format an exception given the + values returned by a PyErr_Fetch() + +Help on function IDAPython_LoadProcMod in module ida_idaapi: + +IDAPython_LoadProcMod(script, g, print_error=True) + Load processor module. + +Help on function IDAPython_UnLoadProcMod in module ida_idaapi: + +IDAPython_UnLoadProcMod(script, g, print_error=True) + Unload processor module. + +Help on class IDAPython_displayhook in module ida_idaapi: + +class IDAPython_displayhook + | # ------------------------------------------------------------ + | + | Methods defined here: + | + | __init__(self) + | + | _print_hex(self, x) + | + | displayhook(self, item) + | + | format_item(self, num_printer, storage, item) + | + | format_seq(self, num_printer, storage, item, opn, cls) + +Help on class PyIdc_cvt_int64__ in module ida_idaapi: + +class PyIdc_cvt_int64__(pyidc_cvt_helper__) + | Helper class for explicitly representing VT_INT64 values + | + | Method resolution order: + | PyIdc_cvt_int64__ + | pyidc_cvt_helper__ + | __builtin__.object + | + | Methods defined here: + | + | _PyIdc_cvt_int64____op = __op(self, op_n, other, rev=False) + | + | __add__(self, other) + | + | __div__(self, other) + | + | __init__(self, v) + | + | __mul__(self, other) + | + | __radd__(self, other) + | + | __rdiv__(self, other) + | + | __rmul__(self, other) + | + | __rsub__(self, other) + | + | __sub__(self, other) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _PyIdc_cvt_int64____op_table = {0: >, 1: + +Help on function __install_excepthook in module ida_idaapi: + +__install_excepthook() + # Since version 5.5, PyQt5 doesn't simply print the PyQt exceptions by default + # anymore: https://github.com/baoboa/pyqt5/commit/1e1d8a3ba677ef3e47b916b8a5b9c281d0f8e4b5#diff-848704a82f6a6e3a13112145ce32ac69L63 + # The default behavior now is that qFatal() is called, causing the application + # to abort(). + # We do not want that to happen in IDA, and simply having a sys.excepthook + # that is different from sys.__excepthook__ is enough for PyQt5 to return + # to the previous behavior + +Help on function _bounded_getitem_iterator in module ida_idaapi: + +_bounded_getitem_iterator(self) + Helper function, to be set as __iter__ method for qvector-, or array-based classes. + +Help on function _listify_types in module ida_idaapi: + +_listify_types(*classes) + +Help on function _qvector_back in module ida_idaapi: + +_qvector_back(self) + # ----------------------------------------------------------------------- + +Help on function _qvector_front in module ida_idaapi: + +_qvector_front(self) + # ----------------------------------------------------------------------- + +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) + Convenience function to convert a string into appropriate unicode format + +Help on function as_cstr in module ida_idaapi: + +as_cstr(val) + Returns a C str from the passed value. The passed value can be of type refclass (returned by a call to buffer() or byref()) + It scans for the first and returns the string value up to that point. + +Help on function as_int32 in module ida_idaapi: + +as_int32(v) + Returns a number as a signed int32 number + +Help on function as_signed in module ida_idaapi: + +as_signed(v, nbits=32) + Returns a number as signed. The number of bits are specified by the user. + The MSB holds the sign. + +Help on function as_uint32 in module ida_idaapi: + +as_uint32(v) + Returns a number as an unsigned int32 number + +Help on function copy_bits in module ida_idaapi: + +copy_bits(v, s, e=-1) + Copy bits from a value + @param v: the value + @param s: starting bit (0-based) + @param e: ending bit + +Help on function disable_script_timeout in module ida_idaapi: + +disable_script_timeout(*args) + disable_script_timeout() + + + Disables the script timeout and hides the script wait box. + Calling L{set_script_timeout} will not have any effects until the script is compiled and executed again + + @return: None + +Help on function enable_extlang_python in module ida_idaapi: + +enable_extlang_python(*args) + enable_extlang_python(enable) + + + Enables or disables Python extlang. + When enabled, all expressions will be evaluated by Python. + @param enable: Set to True to enable, False otherwise + +Help on function enable_python_cli in module ida_idaapi: + +enable_python_cli(*args) + enable_python_cli(enable) + +Help on function format_basestring in module ida_idaapi: + +format_basestring(*args) + format_basestring(_in) -> PyObject * + +Help on function get_inf_structure in module ida_idaapi: + +get_inf_structure(*args) + get_inf_structure() -> idainfo + + + Returns the global variable 'inf' (an instance of idainfo structure, see ida.hpp) + +Help on class loader_input_t in module ida_idaapi: + +class loader_input_t(__builtin__.object) + | Proxy of C++ loader_input_t class. + | + | + | A helper class to work with linput_t related functions. + | This class is also used by file loaders scripts. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, pycapsule=None) -> loader_input_t + | + | + | Closes the file + | + | __repr__ = _swig_repr(self) + | + | close(self, *args) + | close(self) + | + | file2base(self, *args) + | file2base(self, pos, ea1, ea2, patchable) -> int + | + | + | Load portion of file into the database + | This function will include (ea1..ea2) into the addressing space of the + | program (make it enabled) + | @param li: pointer ot input source + | @param pos: position in the file + | @param (ea1..ea2): range of destination linear addresses + | @param patchable: should the kernel remember correspondance of + | file offsets to linear addresses. + | @return: 1-ok,0-read error, a warning is displayed + | + | filename(self, *args) + | filename(self) -> PyObject * + | + | get_char(self, *args) + | get_char(self) -> PyObject * + | + | get_linput(self, *args) + | get_linput(self) -> linput_t * + | + | gets(self, *args) + | gets(self, len) -> PyObject * + | + | + | Reads a line from the input file. Returns the read line or None + | + | getz(self, *args) + | getz(self, sz, fpos=-1) -> PyObject * + | + | + | Returns a zero terminated string at the given position + | @param sz: maximum size of the string + | @param fpos: if != -1 then seek will be performed before reading + | @return: The string or None on failure. + | + | open(self, *args) + | open(self, filename, remote=False) -> bool + | + | + | Opens a file (or a remote file) + | @return: Boolean + | + | open_memory(self, *args) + | open_memory(self, start, size=0) -> bool + | + | + | Create a linput for process memory (By internally calling idaapi.create_memory_linput()) + | This linput will use dbg->read_memory() to read data + | @param start: starting address of the input + | @param size: size of the memory range to represent as linput + | if unknown, may be passed as 0 + | + | opened(self, *args) + | opened(self) -> bool + | + | + | Checks if the file is opened or not + | + | read(self, *args) + | read(self, size) -> PyObject * + | + | + | Reads from the file. Returns the buffer or None + | + | readbytes(self, *args) + | readbytes(self, size, big_endian) -> PyObject * + | + | + | Similar to read() but it respect the endianness + | + | seek(self, *args) + | seek(self, pos, whence=SEEK_SET) -> int64 + | + | + | Set input source position + | @return: the new position (not 0 as fseek!) + | + | set_linput(self, *args) + | set_linput(self, linput) + | + | + | Links the current loader_input_t instance to a linput_t instance + | + | size(self, *args) + | size(self) -> int64 + | + | tell(self, *args) + | tell(self) -> int64 + | + | + | Returns the current position + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | from_capsule(*args) + | from_capsule(pycapsule) -> loader_input_t + | + | from_fp(*args) + | from_fp(fp) -> loader_input_t + | + | + | A static method to construct an instance from a FILE* + | + | from_linput(*args) + | from_linput(linput) -> loader_input_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __idc_cvt_id__ + | loader_input_t___idc_cvt_id___get(self) -> int + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_loader_input_t(self) + +Help on function loader_input_t_from_capsule in module ida_idaapi: + +loader_input_t_from_capsule(*args) + loader_input_t_from_capsule(pycapsule) -> loader_input_t + +Help on function loader_input_t_from_fp in module ida_idaapi: + +loader_input_t_from_fp(*args) + loader_input_t_from_fp(fp) -> loader_input_t + +Help on function loader_input_t_from_linput in module ida_idaapi: + +loader_input_t_from_linput(*args) + loader_input_t_from_linput(linput) -> loader_input_t + +Help on function notify_when in module ida_idaapi: + +notify_when(when, callback) + Register a callback that will be called when an event happens. + @param when: one of NW_XXXX constants + @param callback: This callback prototype varies depending on the 'when' parameter: + The general callback format: + def notify_when_callback(nw_code) + In the case of NW_OPENIDB: + def notify_when_callback(nw_code, is_old_database) + @return: Boolean + +Help on class object_t in module ida_idaapi: + +class object_t(__builtin__.object) + | Helper class used to initialize empty objects + | + | Methods defined here: + | + | __getitem__(self, idx) + | Allow access to object attributes by index (like dictionaries) + | + | __init__(self, **kwds) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function parse_command_line3 in module ida_idaapi: + +parse_command_line3(*args) + parse_command_line3(cmdline) -> PyObject * + +Help on class plugin_t in module ida_idaapi: + +class plugin_t(pyidc_opaque_object_t) + | Base class for all scripted plugins. + | + | Method resolution order: + | plugin_t + | pyidc_opaque_object_t + | __builtin__.object + | + | Data descriptors inherited from pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on class py_clinked_object_t in module ida_idaapi: + +class py_clinked_object_t(pyidc_opaque_object_t) + | This is a utility and base class for C linked objects + | + | Method resolution order: + | py_clinked_object_t + | pyidc_opaque_object_t + | __builtin__.object + | + | Methods defined here: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | __init__(self, lnk=None) + | + | _create_clink(self) + | Overwrite me. + | Creates a new clink + | @return: PyCapsule representing the C link + | + | _del_clink(self, lnk) + | Overwrite me. + | This method deletes the link + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | _get_clink_ptr(self) + | Overwrite me. + | Returns the C link pointer as a 64bit number + | + | assign(self, other) + | Overwrite me. + | This method allows you to assign an instance contents to anothers + | @return: Boolean + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function pycim_get_widget in module ida_idaapi: + +pycim_get_widget(*args) + pycim_get_widget(_self) -> TWidget * + +Help on function pycim_view_close in module ida_idaapi: + +pycim_view_close(*args) + pycim_view_close(_self) + +Help on function pygc_create_groups in module ida_idaapi: + +pygc_create_groups(*args) + pygc_create_groups(_self, groups_infos) -> PyObject * + +Help on function pygc_delete_groups in module ida_idaapi: + +pygc_delete_groups(*args) + pygc_delete_groups(_self, groups, new_current) -> PyObject * + +Help on function pygc_refresh in module ida_idaapi: + +pygc_refresh(*args) + pygc_refresh(_self) + +Help on function pygc_set_groups_visibility in module ida_idaapi: + +pygc_set_groups_visibility(*args) + pygc_set_groups_visibility(_self, groups, expand, new_current) -> PyObject * + +Help on class pyidc_cvt_helper__ in module ida_idaapi: + +class pyidc_cvt_helper__(__builtin__.object) + | This is a special helper object that helps detect which kind + | of object is this python object wrapping and how to convert it + | back and from IDC. + | This object is characterized by its special attribute and its value + | + | Methods defined here: + | + | __init__(self, cvt_id, value) + | + | _pyidc_cvt_helper____get_value = __get_value(self) + | + | _pyidc_cvt_helper____set_value = __set_value(self, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | value + +Help on class pyidc_opaque_object_t in module ida_idaapi: + +class pyidc_opaque_object_t(__builtin__.object) + | This is the base class for all Python<->IDC opaque objects + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __idc_cvt_id__ = 2 + +Help on function replfun in module ida_idaapi: + +replfun(func) + +Help on function require in module ida_idaapi: + +require(modulename, package=None) + Load, or reload a module. + + When under heavy development, a user's tool might consist of multiple + modules. If those are imported using the standard 'import' mechanism, + there is no guarantee that the Python implementation will re-read + and re-evaluate the module's Python code. In fact, it usually doesn't. + What should be done instead is 'reload()'-ing that module. + + This is a simple helper function that will do just that: In case the + module doesn't exist, it 'import's it, and if it does exist, + 'reload()'s it. + + The importing module (i.e., the module calling require()) will have + the loaded module bound to its globals(), under the name 'modulename'. + (If require() is called from the command line, the importing module + will be '__main__'.) + + For more information, see: . + +Help on function set_script_timeout in module ida_idaapi: + +set_script_timeout(*args) + set_script_timeout(timeout) -> int + + + Changes the script timeout value. The script wait box dialog will be hidden and shown again when the timeout elapses. + See also L{disable_script_timeout}. + + @param timeout: This value is in seconds. + If this value is set to zero then the script will never timeout. + @return: Returns the old timeout value + +Help on function struct_unpack in module ida_idaapi: + +struct_unpack(buffer, signed=False, offs=0) + Unpack a buffer given its length and offset using struct.unpack_from(). + This function will know how to unpack the given buffer by using the lookup table '__struct_unpack_table' + If the buffer is of unknown length then None is returned. Otherwise the unpacked value is returned. + +Help on function get_mark_comment in module ida_idc: + +get_mark_comment(*args) + get_mark_comment(slot) -> PyObject * + +Help on function get_marked_pos in module ida_idc: + +get_marked_pos(*args) + get_marked_pos(slot) -> ea_t + +Help on function mark_position in module ida_idc: + +mark_position(*args) + mark_position(ea, lnnum, x, y, slot, comment) + +Help on Appcall__ in module ida_idd object: + +class Appcall__(__builtin__.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | _Appcall____get_consts = __get_consts(self) + | + | __getattr__(self, name_or_ea) + | Allows you to call functions as if they were member functions (by returning a callable object) + | + | __getitem__(self, idx) + | Use self[func_name] syntax if the function name contains invalid characters for an attribute name + | See __getattr___ + | + | __init__(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | UTF16(s) + | + | _Appcall____name_or_ea = __name_or_ea(name_or_ea) + | Function that accepts a name or an ea and checks if the address is enabled. + | If a name is passed then idaapi.get_name_ea() is applied to retrieve the name + | @return: + | - Returns the resolved EA or + | - Raises an exception if the address is not enabled + | + | _Appcall____typedecl_or_tinfo = __typedecl_or_tinfo(typedecl_or_tinfo, flags=None) + | Function that accepts a tinfo_t object or type declaration as a string + | If a type declaration is passed then ida_typeinf.parse_decl() is applied to prepare tinfo_t object + | @return: + | - Returns the tinfo_t object + | - Raises an exception if the declaration cannot be parsed + | + | array(type_name) + | Defines an array type. Later you need to pack() / unpack() + | + | buffer(str=None, size=0, fill='\x00') + | Creates a string buffer. The returned value (r) will be a byref object. + | Use r.value to get the contents and r.size to get the buffer's size + | + | byref(val) + | Method to create references to immutable objects + | Currently we support references to int/strings + | Objects need not be passed by reference (this will be done automatically) + | + | cleanup_appcall(tid=0) + | Equivalent to IDC's CleanupAppcall() + | + | cstr(val) + | + | get_appcall_options() + | Return the global Appcall options + | + | int64(v) + | Whenever a 64bit number is needed use this method to construct an object + | + | obj(**kwds) + | Returns an empty object or objects with attributes as passed via its keywords arguments + | + | proto(name_or_ea, proto_or_tinfo, flags=None) + | Allows you to instantiate an appcall (callable object) with the desired prototype + | @param name_or_ea: The name of the function (will be resolved with LocByName()) + | @param proto_or_tinfo: function prototype as a string or type of the function as tinfo_t object + | @return: + | - On failure it raises an exception if the prototype could not be parsed + | or the address is not resolvable + | - Returns a callbable Appcall instance with the given prototypes and flags + | + | set_appcall_options(opt) + | Method to change the Appcall options globally (not per Appcall) + | + | typedobj(typedecl_or_tinfo, ea=None) + | Returns an appcall object for a type (can be given as tinfo_t object or + | as a string declaration) + | One can then use retrieve() member method + | @param ea: Optional parameter that later can be used to retrieve the type + | @return: Appcall object or raises ValueError exception + | + | unicode = UTF16(s) + | + | valueof(name, default=0) + | Returns the numeric value of a given name string. + | If the name could not be resolved then the default value will be returned + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Consts + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | APPCALL_DEBEV = 2 + | + | APPCALL_MANUAL = 1 + | + | APPCALL_TIMEOUT = 4 + | + | __name__ = 'Appcall__' + +Help on class Appcall__ in module ida_idd: + +class Appcall__(__builtin__.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | _Appcall____get_consts = __get_consts(self) + | + | __getattr__(self, name_or_ea) + | Allows you to call functions as if they were member functions (by returning a callable object) + | + | __getitem__(self, idx) + | Use self[func_name] syntax if the function name contains invalid characters for an attribute name + | See __getattr___ + | + | __init__(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | UTF16(s) + | + | _Appcall____name_or_ea = __name_or_ea(name_or_ea) + | Function that accepts a name or an ea and checks if the address is enabled. + | If a name is passed then idaapi.get_name_ea() is applied to retrieve the name + | @return: + | - Returns the resolved EA or + | - Raises an exception if the address is not enabled + | + | _Appcall____typedecl_or_tinfo = __typedecl_or_tinfo(typedecl_or_tinfo, flags=None) + | Function that accepts a tinfo_t object or type declaration as a string + | If a type declaration is passed then ida_typeinf.parse_decl() is applied to prepare tinfo_t object + | @return: + | - Returns the tinfo_t object + | - Raises an exception if the declaration cannot be parsed + | + | array(type_name) + | Defines an array type. Later you need to pack() / unpack() + | + | buffer(str=None, size=0, fill='\x00') + | Creates a string buffer. The returned value (r) will be a byref object. + | Use r.value to get the contents and r.size to get the buffer's size + | + | byref(val) + | Method to create references to immutable objects + | Currently we support references to int/strings + | Objects need not be passed by reference (this will be done automatically) + | + | cleanup_appcall(tid=0) + | Equivalent to IDC's CleanupAppcall() + | + | cstr(val) + | + | get_appcall_options() + | Return the global Appcall options + | + | int64(v) + | Whenever a 64bit number is needed use this method to construct an object + | + | obj(**kwds) + | Returns an empty object or objects with attributes as passed via its keywords arguments + | + | proto(name_or_ea, proto_or_tinfo, flags=None) + | Allows you to instantiate an appcall (callable object) with the desired prototype + | @param name_or_ea: The name of the function (will be resolved with LocByName()) + | @param proto_or_tinfo: function prototype as a string or type of the function as tinfo_t object + | @return: + | - On failure it raises an exception if the prototype could not be parsed + | or the address is not resolvable + | - Returns a callbable Appcall instance with the given prototypes and flags + | + | set_appcall_options(opt) + | Method to change the Appcall options globally (not per Appcall) + | + | typedobj(typedecl_or_tinfo, ea=None) + | Returns an appcall object for a type (can be given as tinfo_t object or + | as a string declaration) + | One can then use retrieve() member method + | @param ea: Optional parameter that later can be used to retrieve the type + | @return: Appcall object or raises ValueError exception + | + | unicode = UTF16(s) + | + | valueof(name, default=0) + | Returns the numeric value of a given name string. + | If the name could not be resolved then the default value will be returned + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Consts + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | APPCALL_DEBEV = 2 + | + | APPCALL_MANUAL = 1 + | + | APPCALL_TIMEOUT = 4 + | + | __name__ = 'Appcall__' + +Help on class Appcall_array__ in module ida_idd: + +class Appcall_array__(__builtin__.object) + | This class is used with Appcall.array() method + | + | Methods defined here: + | + | __init__(self, tp) + | + | pack(self, L) + | Packs a list or tuple into a byref buffer + | + | try_to_convert_to_list(self, obj) + | Is this object a list? We check for the existance of attribute zero and attribute self.size-1 + | + | unpack(self, buf, as_list=True) + | Unpacks an array back into a list or an object + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class Appcall_callable__ in module ida_idd: + +class Appcall_callable__(__builtin__.object) + | Helper class to issue appcalls using a natural syntax: + | appcall.FunctionNameInTheDatabase(arguments, ....) + | or + | appcall["Function@8"](arguments, ...) + | or + | f8 = appcall["Function@8"] + | f8(arg1, arg2, ...) + | or + | o = appcall.obj() + | i = byref(5) + | appcall.funcname(arg1, i, "hello", o) + | + | Methods defined here: + | + | _Appcall_callable____get_ea = __get_ea(self) + | + | _Appcall_callable____get_fields = __get_fields(self) + | + | _Appcall_callable____get_options = __get_options(self) + | + | _Appcall_callable____get_size = __get_size(self) + | + | _Appcall_callable____get_tif = __get_tif(self) + | + | _Appcall_callable____get_timeout = __get_timeout(self) + | + | _Appcall_callable____get_type = __get_type(self) + | + | _Appcall_callable____set_ea = __set_ea(self, val) + | + | _Appcall_callable____set_options = __set_options(self, v) + | + | _Appcall_callable____set_timeout = __set_timeout(self, v) + | + | __call__(self, *args) + | Make object callable. We redirect execution to idaapi.appcall() + | + | __init__(self, ea, tinfo_or_typestr=None, fields=None) + | Initializes an appcall with a given function ea + | + | retrieve(self, src=None, flags=0) + | Unpacks a typed object from the database if an ea is given or from a string if a string was passed + | @param src: the address of the object or a string + | @return: Returns a tuple of boolean and object or error number (Bool, Error | Object). + | + | store(self, obj, dest_ea=None, base_ea=0, flags=0) + | Packs an object into a given ea if provided or into a string if no address was passed. + | @param obj: The object to pack + | @param dest_ea: If packing to idb this will be the store location + | @param base_ea: If packing to a buffer, this will be the base that will be used to relocate the pointers + | + | @return: + | - If packing to a string then a Tuple(Boolean, packed_string or error code) + | - If packing to the database then a return code is returned (0 is success) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | + | fields + | + | options + | + | size + | + | tif + | + | timeout + | + | type + +Help on class Appcall_consts__ in module ida_idd: + +class Appcall_consts__(__builtin__.object) + | Helper class used by Appcall.Consts attribute + | It is used to retrieve constants via attribute access + | + | Methods defined here: + | + | __getattr__(self, attr) + | + | __init__(self, default=None) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function appcall in module ida_idd: + +appcall(*args) + appcall(func_ea, tid, _type_or_none, _fields, arg_list) -> PyObject * + +Help on class bptaddr_t in module ida_idd: + +class bptaddr_t(__builtin__.object) + | Proxy of C++ bptaddr_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bptaddr_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hea + | bptaddr_t_hea_get(self) -> ea_t + | + | kea + | bptaddr_t_kea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bptaddr_t(self) + +Help on class call_stack_info_t in module ida_idd: + +class call_stack_info_t(__builtin__.object) + | Proxy of C++ call_stack_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> call_stack_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | callea + | call_stack_info_t_callea_get(self) -> ea_t + | + | fp + | call_stack_info_t_fp_get(self) -> ea_t + | + | funcea + | call_stack_info_t_funcea_get(self) -> ea_t + | + | funcok + | call_stack_info_t_funcok_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_call_stack_info_t(self) + +Help on class call_stack_t in module ida_idd: + +class call_stack_t(__builtin__.object) + | Proxy of C++ qvector< call_stack_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> call_stack_info_t + | + | __init__(self, *args) + | __init__(self) -> call_stack_t + | __init__(self, x) -> call_stack_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> call_stack_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> call_stack_info_t + | begin(self) -> call_stack_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> call_stack_info_t + | end(self) -> call_stack_info_t + | + | erase(self, *args) + | erase(self, it) -> call_stack_info_t + | erase(self, first, last) -> call_stack_info_t + | + | extract(self, *args) + | extract(self) -> call_stack_info_t + | + | find(self, *args) + | find(self, x) -> call_stack_info_t + | find(self, x) -> call_stack_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=call_stack_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> call_stack_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> call_stack_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_call_stack_t(self) + +Help on function can_exc_continue in module ida_idd: + +can_exc_continue(*args) + can_exc_continue(ev) -> bool + +Help on function cleanup_appcall in module ida_idd: + +cleanup_appcall(*args) + cleanup_appcall(tid) -> error_t + + + Cleanup after manual appcall. + + @param tid: thread to use. NO_THREAD means to use the current thread + The application state is restored as it was before calling + the last appcall(). Nested appcalls are supported. (C++: + thid_t) + @return: eOk if successful, otherwise an error code + +Help on function dbg_appcall in module ida_idd: + +dbg_appcall(*args) + dbg_appcall(retval, func_ea, tid, ptif, argv, argnum) -> error_t + + + Call a function from the debugged application. + + @param retval (C++: idc_value_t *) + @param func_ea: address to call (C++: ea_t) + @param tid: thread to use. NO_THREAD means to use the current thread + (C++: thid_t) + @param ptif: pointer to type of the function to call (C++: const + tinfo_t *) + @param argv: array of arguments (C++: idc_value_t *) + @param argnum: number of actual arguments (C++: size_t) + @return: eOk if successful, otherwise an error code + +Help on built-in function dbg_can_query in module _ida_dbg: + +dbg_can_query(...) + dbg_can_query() -> bool + +Help on function dbg_get_memory_info in module ida_idd: + +dbg_get_memory_info(*args) + dbg_get_memory_info() -> PyObject * + + + This function returns the memory configuration of a debugged process. + @return: + None if no debugger is active + tuple(start_ea, end_ea, name, sclass, sbase, bitness, perm) + +Help on function dbg_get_name in module ida_idd: + +dbg_get_name(*args) + dbg_get_name() -> PyObject * + + + This function returns the current debugger's name. + @return: Debugger name or None if no debugger is active + +Help on function dbg_get_registers in module ida_idd: + +dbg_get_registers(*args) + dbg_get_registers() -> PyObject * + + + This function returns the register definition from the currently loaded debugger. + Basically, it returns an array of structure similar to to idd.hpp / register_info_t + @return: + None if no debugger is loaded + tuple(name, flags, class, dtype, bit_strings, default_bit_strings_mask) + The bit_strings can be a tuple of strings or None (if the register does not have bit_strings) + +Help on function dbg_get_thread_sreg_base in module ida_idd: + +dbg_get_thread_sreg_base(*args) + dbg_get_thread_sreg_base(tid, sreg_value) -> PyObject * + + + Returns the segment register base value + @param tid: thread id + @param sreg_value: segment register (selector) value + @return: + - The base as an 'ea' + - Or None on failure + +Help on function dbg_read_memory in module ida_idd: + +dbg_read_memory(*args) + dbg_read_memory(ea, sz) -> PyObject * + + + Reads from the debugee's memory at the specified ea + @return: + - The read buffer (as a string) + - Or None on failure + +Help on function dbg_write_memory in module ida_idd: + +dbg_write_memory(*args) + dbg_write_memory(ea, buf) -> PyObject * + + + Writes a buffer to the debugee's memory + @return: Boolean + +Help on class debapp_attrs_t in module ida_idd: + +class debapp_attrs_t(__builtin__.object) + | Proxy of C++ debapp_attrs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> debapp_attrs_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | addrsize + | debapp_attrs_t_addrsize_get(self) -> int + | + | cbsize + | debapp_attrs_t_cbsize_get(self) -> int32 + | + | is_be + | debapp_attrs_t_is_be_get(self) -> int + | + | platform + | debapp_attrs_t_platform_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_debapp_attrs_t(self) + +Help on class debug_event_t in module ida_idd: + +class debug_event_t(__builtin__.object) + | Proxy of C++ debug_event_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> debug_event_t + | __init__(self, r) -> debug_event_t + | + | __repr__ = _swig_repr(self) + | + | bpt(self, *args) + | bpt(self) -> bptaddr_t + | bpt(self) -> bptaddr_t + | + | bpt_ea(self, *args) + | bpt_ea(self) -> ea_t + | + | clear(self, *args) + | clear(self) + | + | clear_all(self, *args) + | clear_all(self) + | + | copy(self, *args) + | copy(self, r) -> debug_event_t + | + | eid(self, *args) + | eid(self) -> event_id_t + | + | exc(self, *args) + | exc(self) -> excinfo_t + | exc(self) -> excinfo_t + | + | exit_code(self, *args) + | exit_code(self) -> int const & + | + | info(self, *args) + | info(self) -> qstring + | info(self) -> qstring const & + | + | modinfo(self, *args) + | modinfo(self) -> modinfo_t + | modinfo(self) -> modinfo_t + | + | set_bpt(self, *args) + | set_bpt(self) -> bptaddr_t + | + | set_eid(self, *args) + | set_eid(self, id) + | + | set_exception(self, *args) + | set_exception(self) -> excinfo_t + | + | set_exit_code(self, *args) + | set_exit_code(self, id, code) + | + | set_info(self, *args) + | set_info(self, id) -> qstring & + | + | set_modinfo(self, *args) + | set_modinfo(self, id) -> modinfo_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | debug_event_t_ea_get(self) -> ea_t + | + | handled + | debug_event_t_handled_get(self) -> bool + | + | pid + | debug_event_t_pid_get(self) -> pid_t + | + | thisown + | The membership flag + | + | tid + | debug_event_t_tid_get(self) -> thid_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_debug_event_t(self) + +Help on class exception_info_t in module ida_idd: + +class exception_info_t(__builtin__.object) + | Proxy of C++ exception_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> exception_info_t + | __init__(self, _code, _flags, _name, _desc) -> exception_info_t + | + | __repr__ = _swig_repr(self) + | + | break_on(self, *args) + | break_on(self) -> bool + | + | handle(self, *args) + | handle(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | exception_info_t_code_get(self) -> uint + | + | desc + | exception_info_t_desc_get(self) -> qstring * + | + | flags + | exception_info_t_flags_get(self) -> uint32 + | + | name + | exception_info_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_exception_info_t(self) + +Help on class excinfo_t in module ida_idd: + +class excinfo_t(__builtin__.object) + | Proxy of C++ excinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> excinfo_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | can_cont + | excinfo_t_can_cont_get(self) -> bool + | + | code + | excinfo_t_code_get(self) -> uint32 + | + | ea + | excinfo_t_ea_get(self) -> ea_t + | + | info + | excinfo_t_info_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_excinfo_t(self) + +Help on class excvec_t in module ida_idd: + +class excvec_t(__builtin__.object) + | Proxy of C++ qvector< exception_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> exception_info_t + | + | __init__(self, *args) + | __init__(self) -> excvec_t + | __init__(self, x) -> excvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> exception_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> exception_info_t + | begin(self) -> exception_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> exception_info_t + | end(self) -> exception_info_t + | + | erase(self, *args) + | erase(self, it) -> exception_info_t + | erase(self, first, last) -> exception_info_t + | + | extract(self, *args) + | extract(self) -> exception_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=exception_info_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> exception_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> exception_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_excvec_t(self) + +Help on function get_event_bpt_hea in module ida_idd: + +get_event_bpt_hea(*args) + get_event_bpt_hea(ev) -> ea_t + +Help on function get_event_exc_code in module ida_idd: + +get_event_exc_code(*args) + get_event_exc_code(ev) -> uint + +Help on function get_event_exc_ea in module ida_idd: + +get_event_exc_ea(*args) + get_event_exc_ea(ev) -> ea_t + +Help on function get_event_exc_info in module ida_idd: + +get_event_exc_info(*args) + get_event_exc_info(ev) -> str + +Help on function get_event_info in module ida_idd: + +get_event_info(*args) + get_event_info(ev) -> str + +Help on function get_event_module_base in module ida_idd: + +get_event_module_base(*args) + get_event_module_base(ev) -> ea_t + +Help on function get_event_module_name in module ida_idd: + +get_event_module_name(*args) + get_event_module_name(ev) -> str + +Help on function get_event_module_size in module ida_idd: + +get_event_module_size(*args) + get_event_module_size(ev) -> asize_t + +Help on class meminfo_vec_t in module ida_idd: + +class meminfo_vec_t(__builtin__.object) + | Proxy of C++ qvector< memory_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> memory_info_t + | + | __init__(self, *args) + | __init__(self) -> meminfo_vec_t + | __init__(self, x) -> meminfo_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> memory_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> memory_info_t + | begin(self) -> memory_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> memory_info_t + | end(self) -> memory_info_t + | + | erase(self, *args) + | erase(self, it) -> memory_info_t + | erase(self, first, last) -> memory_info_t + | + | extract(self, *args) + | extract(self) -> memory_info_t + | + | find(self, *args) + | find(self, x) -> memory_info_t + | find(self, x) -> memory_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=memory_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> memory_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> memory_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_meminfo_vec_t(self) + +Help on class memory_info_t in module ida_idd: + +class memory_info_t(ida_range.range_t) + | Proxy of C++ memory_info_t class. + | + | Method resolution order: + | memory_info_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> memory_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bitness + | memory_info_t_bitness_get(self) -> uchar + | + | name + | memory_info_t_name_get(self) -> qstring * + | + | perm + | memory_info_t_perm_get(self) -> uchar + | + | sbase + | memory_info_t_sbase_get(self) -> ea_t + | + | sclass + | memory_info_t_sclass_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_memory_info_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on class modinfo_t in module ida_idd: + +class modinfo_t(__builtin__.object) + | Proxy of C++ modinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> modinfo_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | modinfo_t_base_get(self) -> ea_t + | + | name + | modinfo_t_name_get(self) -> qstring * + | + | rebase_to + | modinfo_t_rebase_to_get(self) -> ea_t + | + | size + | modinfo_t_size_get(self) -> asize_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_modinfo_t(self) + +Help on class process_info_t in module ida_idd: + +class process_info_t(__builtin__.object) + | Proxy of C++ process_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> process_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | process_info_t_name_get(self) -> qstring * + | + | pid + | process_info_t_pid_get(self) -> pid_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_process_info_t(self) + +Help on class procinfo_vec_t in module ida_idd: + +class procinfo_vec_t(__builtin__.object) + | Proxy of C++ qvector< process_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> process_info_t + | + | __init__(self, *args) + | __init__(self) -> procinfo_vec_t + | __init__(self, x) -> procinfo_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> process_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> process_info_t + | begin(self) -> process_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> process_info_t + | end(self) -> process_info_t + | + | erase(self, *args) + | erase(self, it) -> process_info_t + | erase(self, first, last) -> process_info_t + | + | extract(self, *args) + | extract(self) -> process_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=process_info_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> process_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> process_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_procinfo_vec_t(self) + +Help on class register_info_t in module ida_idd: + +class register_info_t(__builtin__.object) + | Proxy of C++ register_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> register_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bit_strings + | register_info_t_bit_strings_get(self) -> char const *const * + | + | default_bit_strings_mask + | register_info_t_default_bit_strings_mask_get(self) -> uval_t + | + | dtype + | register_info_t_dtype_get(self) -> op_dtype_t + | + | flags + | register_info_t_flags_get(self) -> uint32 + | + | name + | register_info_t_name_get(self) -> char const * + | + | register_class + | register_info_t_register_class_get(self) -> register_class_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_register_info_t(self) + +Help on class regval_t in module ida_idd: + +class regval_t(__builtin__.object) + | Proxy of C++ regval_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> regval_t + | __init__(self, r) -> regval_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | bytes(self, *args) + | bytes(self) -> bytevec_t + | bytes(self) -> bytevec_t const & + | + | clear(self, *args) + | clear(self) + | + | get_data(self, *args) + | get_data(self) + | get_data(self) -> void const * + | + | get_data_size(self, *args) + | get_data_size(self) -> size_t + | + | set_bytes(self, *args) + | set_bytes(self, data, size) + | set_bytes(self, v) + | set_bytes(self) -> bytevec_t & + | + | set_float(self, *args) + | set_float(self, x) + | + | set_int(self, *args) + | set_int(self, x) + | + | set_unavailable(self, *args) + | set_unavailable(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fval + | regval_t_fval_get(self) -> uint16 [6] + | + | ival + | regval_t_ival_get(self) -> uint64 + | + | rvtype + | regval_t_rvtype_get(self) -> int32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regval_t(self) + +Help on class scattered_segm_t in module ida_idd: + +class scattered_segm_t(ida_range.range_t) + | Proxy of C++ scattered_segm_t class. + | + | Method resolution order: + | scattered_segm_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> scattered_segm_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | name + | scattered_segm_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_scattered_segm_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on function set_debug_event_code in module ida_idd: + +set_debug_event_code(*args) + set_debug_event_code(ev, id) + +Help on class thread_name_t in module ida_idd: + +class thread_name_t(__builtin__.object) + | Proxy of C++ thread_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> thread_name_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | thread_name_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tid + | thread_name_t_tid_get(self) -> thid_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_thread_name_t(self) + +=== ida_idd EPYDOC INJECTIONS === +ida_idd.EXC_BREAK +""" +break on the exception +""" + +ida_idd.EXC_HANDLE +""" +should be handled by the debugger? +""" + +ida_idd.EXC_MSG +""" +instead of a warning, log the exception to the output window +""" + +ida_idd.EXC_SILENT +""" +do not warn or log to the output window +""" + +ida_idd.IDD_INTERFACE_VERSION +""" +The IDD interface version number. +""" + +ida_idd.NO_PROCESS +""" +No process. +""" + +ida_idd.NO_THREAD +""" +No thread. in 'PROCESS_STARTED' this value can be used to specify that +the main thread has not been created. It will be initialized later by +a 'THREAD_STARTED' event. +""" + +ida_idd.REGISTER_ADDRESS +""" +may contain an address +""" + +ida_idd.REGISTER_CS +""" +code segment +""" + +ida_idd.REGISTER_CUSTFMT +""" +register should be displayed using a custom data format. the format +name is in bit_strings[0] the corresponding 'regval_t' will use +'bytevec_t' +""" + +ida_idd.REGISTER_FP +""" +frame pointer +""" + +ida_idd.REGISTER_IP +""" +instruction pointer +""" + +ida_idd.REGISTER_NOLF +""" +allowing the next register to be displayed to its right (on the same +line) + +displays this register without returning to the next line +""" + +ida_idd.REGISTER_READONLY +""" +the user can't modify the current value of this register +""" + +ida_idd.REGISTER_SP +""" +stack pointer +""" + +ida_idd.REGISTER_SS +""" +stack segment +""" + +ida_idd.RVT_FLOAT +""" +floating point +""" + +ida_idd.RVT_INT +""" +integer +""" + +ida_idd.RVT_UNAVAILABLE +""" +other values mean custom data type + +unavailable +""" +=== ida_idd EPYDOC INJECTIONS END === +Help on function AssembleLine in module ida_idp: + +AssembleLine(*args) + AssembleLine(ea, cs, ip, use32, nonnul_line) -> PyObject * + + + Assemble an instruction to a string (display a warning if an error is found) + + @param ea: linear address of instruction + @param cs: cs of instruction + @param ip: ip of instruction + @param use32: is 32bit segment + @param line: line to assemble + @return: + - None on failure + - or a string containing the assembled instruction + +Help on class IDB_Hooks in module ida_idp: + +class IDB_Hooks(__builtin__.object) + | Proxy of C++ IDB_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> IDB_Hooks + | + | __repr__ = _swig_repr(self) + | + | allsegs_moved(self, *args) + | allsegs_moved(self, info) + | + | auto_empty(self, *args) + | auto_empty(self) + | + | auto_empty_finally(self, *args) + | auto_empty_finally(self) + | + | bookmark_changed(self, *args) + | bookmark_changed(self, index, pos, desc) + | + | byte_patched(self, *args) + | byte_patched(self, ea, old_value) + | + | callee_addr_changed(self, *args) + | callee_addr_changed(self, ea, callee) + | + | changing_cmt(self, *args) + | changing_cmt(self, ea, repeatable_cmt, newcmt) + | + | changing_enum_bf(self, *args) + | changing_enum_bf(self, id, new_bf) + | + | changing_enum_cmt(self, *args) + | changing_enum_cmt(self, id, repeatable, newcmt) + | + | changing_op_ti(self, *args) + | changing_op_ti(self, ea, n, new_type, new_fnames) + | + | changing_op_type(self, *args) + | changing_op_type(self, ea, n, opinfo) + | + | changing_range_cmt(self, *args) + | changing_range_cmt(self, kind, a, cmt, repeatable) + | + | changing_segm_class(self, *args) + | changing_segm_class(self, s) + | + | changing_segm_end(self, *args) + | changing_segm_end(self, s, new_end, segmod_flags) + | + | changing_segm_name(self, *args) + | changing_segm_name(self, s, oldname) + | + | changing_segm_start(self, *args) + | changing_segm_start(self, s, new_start, segmod_flags) + | + | changing_struc_align(self, *args) + | changing_struc_align(self, sptr) + | + | changing_struc_cmt(self, *args) + | changing_struc_cmt(self, struc_id, repeatable, newcmt) + | + | changing_struc_member(self, *args) + | changing_struc_member(self, sptr, mptr, flag, ti, nbytes) + | + | changing_ti(self, *args) + | changing_ti(self, ea, new_type, new_fnames) + | + | closebase(self, *args) + | closebase(self) + | + | cmt_changed(self, *args) + | cmt_changed(self, ea, repeatable_cmt) + | + | compiler_changed(self, *args) + | compiler_changed(self) + | + | deleting_enum(self, *args) + | deleting_enum(self, id) + | + | deleting_enum_member(self, *args) + | deleting_enum_member(self, id, cid) + | + | deleting_func(self, *args) + | deleting_func(self, pfn) + | + | deleting_func_tail(self, *args) + | deleting_func_tail(self, pfn, tail) + | + | deleting_segm(self, *args) + | deleting_segm(self, start_ea) + | + | deleting_struc(self, *args) + | deleting_struc(self, sptr) + | + | deleting_struc_member(self, *args) + | deleting_struc_member(self, sptr, mptr) + | + | deleting_tryblks(self, *args) + | deleting_tryblks(self, range) + | + | destroyed_items(self, *args) + | destroyed_items(self, ea1, ea2, will_disable_range) + | + | determined_main(self, *args) + | determined_main(self, main) + | + | enum_bf_changed(self, *args) + | enum_bf_changed(self, id) + | + | enum_cmt_changed(self, *args) + | enum_cmt_changed(self, id, repeatable) + | + | enum_created(self, *args) + | enum_created(self, id) + | + | enum_deleted(self, *args) + | enum_deleted(self, id) + | + | enum_member_created(self, *args) + | enum_member_created(self, id, cid) + | + | enum_member_deleted(self, *args) + | enum_member_deleted(self, id, cid) + | + | enum_renamed(self, *args) + | enum_renamed(self, id) + | + | expanding_struc(self, *args) + | expanding_struc(self, sptr, offset, delta) + | + | extlang_changed(self, *args) + | extlang_changed(self, kind, el, idx) + | + | extra_cmt_changed(self, *args) + | extra_cmt_changed(self, ea, line_idx, cmt) + | + | flow_chart_created(self, *args) + | flow_chart_created(self, fc) + | + | frame_deleted(self, *args) + | frame_deleted(self, pfn) + | + | func_added(self, *args) + | func_added(self, pfn) + | + | func_noret_changed(self, *args) + | func_noret_changed(self, pfn) + | + | func_tail_appended(self, *args) + | func_tail_appended(self, pfn, tail) + | + | func_tail_deleted(self, *args) + | func_tail_deleted(self, pfn, tail_ea) + | + | func_updated(self, *args) + | func_updated(self, pfn) + | + | hook(self, *args) + | hook(self) -> bool + | + | idasgn_loaded(self, *args) + | idasgn_loaded(self, short_sig_name) + | + | item_color_changed(self, *args) + | item_color_changed(self, ea, color) + | + | kernel_config_loaded(self, *args) + | kernel_config_loaded(self) + | + | loader_finished(self, *args) + | loader_finished(self, li, neflags, filetypename) + | + | local_types_changed(self, *args) + | local_types_changed(self) + | + | make_code(self, *args) + | make_code(self, insn) + | + | make_data(self, *args) + | make_data(self, ea, flags, tid, len) + | + | op_ti_changed(self, *args) + | op_ti_changed(self, ea, n, type, fnames) + | + | op_type_changed(self, *args) + | op_type_changed(self, ea, n) + | + | range_cmt_changed(self, *args) + | range_cmt_changed(self, kind, a, cmt, repeatable) + | + | renamed(self, *args) + | renamed(self, ea, new_name, local_name) + | + | renaming_enum(self, *args) + | renaming_enum(self, id, is_enum, newname) + | + | renaming_struc(self, *args) + | renaming_struc(self, id, oldname, newname) + | + | renaming_struc_member(self, *args) + | renaming_struc_member(self, sptr, mptr, newname) + | + | savebase(self, *args) + | savebase(self) + | + | segm_added(self, *args) + | segm_added(self, s) + | + | segm_attrs_updated(self, *args) + | segm_attrs_updated(self, s) + | + | segm_class_changed(self, *args) + | segm_class_changed(self, s, sclass) + | + | segm_deleted(self, *args) + | segm_deleted(self, start_ea, end_ea) + | + | segm_end_changed(self, *args) + | segm_end_changed(self, s, oldend) + | + | segm_moved(self, *args) + | segm_moved(self, _from, to, size, changed_netmap) + | + | segm_name_changed(self, *args) + | segm_name_changed(self, s, name) + | + | segm_start_changed(self, *args) + | segm_start_changed(self, s, oldstart) + | + | set_func_end(self, *args) + | set_func_end(self, pfn, new_end) + | + | set_func_start(self, *args) + | set_func_start(self, pfn, new_start) + | + | sgr_changed(self, *args) + | sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) + | + | sgr_deleted(self, *args) + | sgr_deleted(self, start_ea, end_ea, regnum) + | + | stkpnts_changed(self, *args) + | stkpnts_changed(self, pfn) + | + | struc_align_changed(self, *args) + | struc_align_changed(self, sptr) + | + | struc_cmt_changed(self, *args) + | struc_cmt_changed(self, struc_id, repeatable_cmt) + | + | struc_created(self, *args) + | struc_created(self, struc_id) + | + | struc_deleted(self, *args) + | struc_deleted(self, struc_id) + | + | struc_expanded(self, *args) + | struc_expanded(self, sptr) + | + | struc_member_changed(self, *args) + | struc_member_changed(self, sptr, mptr) + | + | struc_member_created(self, *args) + | struc_member_created(self, sptr, mptr) + | + | struc_member_deleted(self, *args) + | struc_member_deleted(self, sptr, member_id, offset) + | + | struc_member_renamed(self, *args) + | struc_member_renamed(self, sptr, mptr) + | + | struc_renamed(self, *args) + | struc_renamed(self, sptr) + | + | tail_owner_changed(self, *args) + | tail_owner_changed(self, tail, owner_func, old_owner) + | + | thunk_func_created(self, *args) + | thunk_func_created(self, pfn) + | + | ti_changed(self, *args) + | ti_changed(self, ea, type, fnames) + | + | tryblks_updated(self, *args) + | tryblks_updated(self, tbv) + | + | unhook(self, *args) + | unhook(self) -> bool + | + | updating_tryblks(self, *args) + | updating_tryblks(self, tbv) + | + | upgraded(self, *args) + | upgraded(self, _from) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_IDB_Hooks(self) + +Help on class IDP_Hooks in module ida_idp: + +class IDP_Hooks(__builtin__.object) + | Proxy of C++ IDP_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> IDP_Hooks + | + | __repr__ = _swig_repr(self) + | + | ev_add_cref(self, *args) + | ev_add_cref(self, _from, to, type) -> int + | + | ev_add_dref(self, *args) + | ev_add_dref(self, _from, to, type) -> int + | + | ev_adjust_argloc(self, *args) + | ev_adjust_argloc(self, argloc, optional_type, size) -> int + | + | ev_adjust_libfunc_ea(self, *args) + | ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int + | + | ev_adjust_refinfo(self, *args) + | ev_adjust_refinfo(self, ri, ea, n, fd) -> int + | + | ev_ana_insn(self, *args) + | ev_ana_insn(self, out) -> bool + | + | + | Analyzes and decodes an instruction at insn.ea + | - insn.itype must be set >= idaapi.CUSTOM_CMD_ITYPE + | - insn.size must be set to the instruction length + | + | @return: Boolean + | - False if the instruction is not recognized + | - True if the instruction was decoded. 'insn' should be filled in that case. + | + | ev_analyze_prolog(self, *args) + | ev_analyze_prolog(self, ea) -> int + | + | ev_arg_addrs_ready(self, *args) + | ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int + | + | ev_assemble(self, *args) + | ev_assemble(self, ea, cs, ip, use32, line) -> PyObject * + | + | + | Assembles an instruction + | + | @param ea: linear address of instruction + | @param cs: cs of instruction + | @param ip: ip of instruction + | @param use32: is 32bit segment? + | @param line: line to assemble + | + | @return: - None to let the underlying processor module assemble the line + | - or a string containing the assembled buffer + | + | ev_auto_queue_empty(self, *args) + | ev_auto_queue_empty(self, type) + | + | ev_calc_arglocs(self, *args) + | ev_calc_arglocs(self, fti) -> int + | + | ev_calc_cdecl_purged_bytes(self, *args) + | ev_calc_cdecl_purged_bytes(self, ea) -> int + | + | ev_calc_next_eas(self, *args) + | ev_calc_next_eas(self, res, insn, over) -> int + | + | ev_calc_purged_bytes(self, *args) + | ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int + | + | ev_calc_retloc(self, *args) + | ev_calc_retloc(self, retloc, rettype, cc) -> int + | + | ev_calc_spdelta(self, *args) + | ev_calc_spdelta(self, spdelta, insn) -> int + | + | ev_calc_step_over(self, *args) + | ev_calc_step_over(self, target, ip) -> int + | + | ev_calc_switch_cases(self, *args) + | ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int + | + | ev_calc_varglocs(self, *args) + | ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int + | + | ev_calcrel(self, *args) + | ev_calcrel(self) -> int + | + | ev_can_have_type(self, *args) + | ev_can_have_type(self, op) -> int + | + | ev_clean_tbit(self, *args) + | ev_clean_tbit(self, ea, getreg, regvalues) -> int + | + | ev_cmp_operands(self, *args) + | ev_cmp_operands(self, op1, op2) -> int + | + | ev_coagulate(self, *args) + | ev_coagulate(self, start_ea) -> int + | + | ev_coagulate_dref(self, *args) + | ev_coagulate_dref(self, _from, to, may_define, code_ea) -> int + | + | ev_create_flat_group(self, *args) + | ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int + | + | ev_create_func_frame(self, *args) + | ev_create_func_frame(self, pfn) -> int + | + | ev_create_switch_xrefs(self, *args) + | ev_create_switch_xrefs(self, jumpea, si) -> int + | + | ev_creating_segm(self, *args) + | ev_creating_segm(self, seg) -> int + | + | ev_decorate_name(self, *args) + | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * + | + | ev_del_cref(self, *args) + | ev_del_cref(self, _from, to, expand) -> int + | + | ev_del_dref(self, *args) + | ev_del_dref(self, _from, to) -> int + | + | ev_delay_slot_insn(self, *args) + | ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * + | + | ev_demangle_name(self, *args) + | ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * + | + | ev_emu_insn(self, *args) + | ev_emu_insn(self, insn) -> bool + | + | + | Emulate instruction, create cross-references, plan to analyze + | subsequent instructions, modify flags etc. Upon entrance to this function + | all information about the instruction is in 'insn' structure. + | + | @return: Boolean (whether this instruction has been emulated or not) + | + | ev_endbinary(self, *args) + | ev_endbinary(self, ok) -> int + | + | ev_ending_undo(self, *args) + | ev_ending_undo(self, action_name, is_undo) -> int + | + | ev_equal_reglocs(self, *args) + | ev_equal_reglocs(self, a1, a2) -> int + | + | ev_extract_address(self, *args) + | ev_extract_address(self, out_ea, screen_ea, string, position) -> int + | + | ev_find_op_value(self, *args) + | ev_find_op_value(self, pinsn, opn) -> PyObject * + | + | ev_find_reg_value(self, *args) + | ev_find_reg_value(self, pinsn, reg) -> PyObject * + | + | ev_func_bounds(self, *args) + | ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea) + | + | ev_gen_asm_or_lst(self, *args) + | ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) + | + | ev_gen_map_file(self, *args) + | ev_gen_map_file(self, nlines, fp) -> int + | + | ev_gen_regvar_def(self, *args) + | ev_gen_regvar_def(self, outctx, v) -> int + | + | ev_gen_src_file_lnnum(self, *args) + | ev_gen_src_file_lnnum(self, outctx, file, lnnum) -> int + | + | ev_gen_stkvar_def(self, *args) + | ev_gen_stkvar_def(self, outctx, mptr, v) -> int + | + | ev_get_abi_info(self, *args) + | ev_get_abi_info(self, abi_names, abi_opts, comp) -> int + | + | ev_get_autocmt(self, *args) + | ev_get_autocmt(self, insn) -> PyObject * + | + | ev_get_bg_color(self, *args) + | ev_get_bg_color(self, ea) -> int or None + | + | ev_get_cc_regs(self, *args) + | ev_get_cc_regs(self, regs, cc) -> int + | + | ev_get_code16_mode(self, *args) + | ev_get_code16_mode(self, ea) -> int + | + | ev_get_dbr_opnum(self, *args) + | ev_get_dbr_opnum(self, opnum, insn) -> int + | + | ev_get_default_enum_size(self, *args) + | ev_get_default_enum_size(self, cm) -> int + | + | ev_get_frame_retsize(self, *args) + | ev_get_frame_retsize(self, frsize, pfn) -> int + | + | ev_get_macro_insn_head(self, *args) + | ev_get_macro_insn_head(self, head, ip) -> int + | + | ev_get_operand_string(self, *args) + | ev_get_operand_string(self, insn, opnum) -> PyObject * + | + | ev_get_reg_info(self, *args) + | ev_get_reg_info(self, main_regname, bitrange, regname) -> int + | + | ev_get_reg_name(self, *args) + | ev_get_reg_name(self, reg, width, reghi) -> PyObject * + | + | ev_get_simd_types(self, *args) + | ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int + | + | ev_get_stkarg_offset(self, *args) + | ev_get_stkarg_offset(self) -> int + | + | ev_get_stkvar_scale_factor(self, *args) + | ev_get_stkvar_scale_factor(self) -> int + | + | ev_getreg(self, *args) + | ev_getreg(self, regval, regnum) -> int + | + | ev_init(self, *args) + | ev_init(self, idp_modname) -> int + | + | ev_insn_reads_tbit(self, *args) + | ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int + | + | ev_is_align_insn(self, *args) + | ev_is_align_insn(self, ea) -> int + | + | ev_is_alloca_probe(self, *args) + | ev_is_alloca_probe(self, ea) -> int + | + | ev_is_basic_block_end(self, *args) + | ev_is_basic_block_end(self, insn, call_insn_stops_block) -> int + | + | ev_is_call_insn(self, *args) + | ev_is_call_insn(self, insn) -> int + | + | + | Is the instruction a "call"? + | + | @param insn: instruction + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_cond_insn(self, *args) + | ev_is_cond_insn(self, insn) -> int + | + | ev_is_far_jump(self, *args) + | ev_is_far_jump(self, icode) -> int + | + | ev_is_indirect_jump(self, *args) + | ev_is_indirect_jump(self, insn) -> int + | + | ev_is_insn_table_jump(self, *args) + | ev_is_insn_table_jump(self, insn) -> int + | + | ev_is_jump_func(self, *args) + | ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int + | + | ev_is_ret_insn(self, *args) + | ev_is_ret_insn(self, insn, strict) -> int + | + | + | Is the instruction a "return"? + | + | @param insn: instruction + | @param strict: - True: report only ret instructions + | False: include instructions like "leave" which begins the function epilog + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_sane_insn(self, *args) + | ev_is_sane_insn(self, insn, no_crefs) -> int + | + | + | is the instruction sane for the current file type? + | @param insn: the instruction + | @param no_crefs: + | - 1: the instruction has no code refs to it. + | ida just tries to convert unexplored bytes + | to an instruction (but there is no other + | reason to convert them into an instruction) + | - 0: the instruction is created because + | of some coderef, user request or another + | weighty reason. + | @return: >=0-ok, <0-no, the instruction isn't likely to appear in the program + | + | ev_is_sp_based(self, *args) + | ev_is_sp_based(self, mode, insn, op) -> int + | + | ev_is_switch(self, *args) + | ev_is_switch(self, si, insn) -> int + | + | ev_last_cb_before_loader(self, *args) + | ev_last_cb_before_loader(self) -> int + | + | ev_loader(self, *args) + | ev_loader(self) -> int + | + | ev_lower_func_type(self, *args) + | ev_lower_func_type(self, argnums, fti) -> int + | + | ev_max_ptr_size(self, *args) + | ev_max_ptr_size(self) -> int + | + | ev_may_be_func(self, *args) + | ev_may_be_func(self, insn, state) -> int + | + | + | Can a function start here? + | @param insn: the instruction + | @param state: autoanalysis phase + | 0: creating functions + | 1: creating chunks + | + | @return: integer (probability 0..100) + | + | ev_may_show_sreg(self, *args) + | ev_may_show_sreg(self, current_ea) -> int + | + | ev_moving_segm(self, *args) + | ev_moving_segm(self, seg, to, flags) -> int + | + | ev_newasm(self, *args) + | ev_newasm(self, asmnum) -> int + | + | ev_newbinary(self, *args) + | ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes) -> int + | + | ev_newfile(self, *args) + | ev_newfile(self, fname) -> int + | + | ev_newprc(self, *args) + | ev_newprc(self, pnum, keep_cfg) -> int + | + | ev_next_exec_insn(self, *args) + | ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int + | + | ev_oldfile(self, *args) + | ev_oldfile(self, fname) -> int + | + | ev_out_assumes(self, *args) + | ev_out_assumes(self, outctx) -> int + | + | ev_out_data(self, *args) + | ev_out_data(self, outctx, analyze_only) -> int + | + | ev_out_footer(self, *args) + | ev_out_footer(self, outctx) + | + | ev_out_header(self, *args) + | ev_out_header(self, outctx) + | + | ev_out_insn(self, *args) + | ev_out_insn(self, outctx) -> bool + | + | + | Outputs the instruction defined in 'ctx.insn' + | + | @return: Boolean (whether this instruction can be outputted or not) + | + | ev_out_label(self, *args) + | ev_out_label(self, outctx, colored_name) -> int + | + | ev_out_mnem(self, *args) + | ev_out_mnem(self, outctx) -> int + | + | ev_out_operand(self, *args) + | ev_out_operand(self, outctx, op) -> bool + | + | + | Notification to generate operand text. + | If False was returned, then the standard operand output function will be called. + | + | this notification may use out_...() functions to form the operand text + | + | @return: Boolean (whether the operand has been outputted or not) + | + | ev_out_segend(self, *args) + | ev_out_segend(self, outctx, seg) -> int + | + | ev_out_segstart(self, *args) + | ev_out_segstart(self, outctx, seg) -> int + | + | ev_out_special_item(self, *args) + | ev_out_special_item(self, outctx, segtype) -> int + | + | ev_realcvt(self, *args) + | ev_realcvt(self, m, e, swt) -> int + | + | ev_rename(self, *args) + | ev_rename(self, ea, new_name) -> int + | + | + | The kernel is going to rename a byte. + | + | @param ea: Address + | @param new_name: The new name + | + | @return: + | - If returns value <0, then the kernel should + | not rename it. See also the 'renamed' event + | + | ev_replaying_undo(self, *args) + | ev_replaying_undo(self, action_name, vec, is_undo) -> int + | + | ev_set_code16_mode(self, *args) + | ev_set_code16_mode(self, ea, code16) -> int + | + | ev_set_idp_options(self, *args) + | ev_set_idp_options(self, keyword, value_type, value, errbuf, idb_loaded) -> int + | + | ev_set_proc_options(self, *args) + | ev_set_proc_options(self, options, confidence) -> int + | + | ev_setup_til(self, *args) + | ev_setup_til(self) + | + | ev_shadow_args_size(self, *args) + | ev_shadow_args_size(self, shadow_args_size, pfn) -> int + | + | ev_str2reg(self, *args) + | ev_str2reg(self, regname) -> int + | + | ev_term(self, *args) + | ev_term(self) -> int + | + | ev_treat_hindering_item(self, *args) + | ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> int + | + | ev_undefine(self, *args) + | ev_undefine(self, ea) -> int + | + | + | An item in the database (insn or data) is being deleted + | @param ea: Address + | @return: + | - 1 - do not delete srranges at the item end + | - 0 - srranges can be deleted + | + | ev_use_arg_types(self, *args) + | ev_use_arg_types(self, ea, fti, rargs) -> int + | + | ev_use_regarg_type(self, *args) + | ev_use_regarg_type(self, ea, rargs) -> PyObject * + | + | ev_use_stkarg_type(self, *args) + | ev_use_stkarg_type(self, ea, arg) -> int + | + | ev_validate_flirt_func(self, *args) + | ev_validate_flirt_func(self, start_ea, funcname) -> int + | + | ev_verify_noreturn(self, *args) + | ev_verify_noreturn(self, pfn) -> int + | + | ev_verify_sp(self, *args) + | ev_verify_sp(self, pfn) -> int + | + | hook(self, *args) + | hook(self) -> bool + | + | + | Creates an IDP hook + | + | @return: Boolean true on success + | + | unhook(self, *args) + | unhook(self) -> bool + | + | + | Removes the IDP hook + | @return: Boolean true on success + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_IDP_Hooks(self) + +Help on class __ph in module ida_idp: + +class __ph(__builtin__.object) + | # ---------------------------------------------------------------------- + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cnbits + | + | dnbits + | + | flag + | + | icode_return + | + | id + | + | instruc + | + | instruc_end + | + | instruc_start + | + | reg_code_sreg + | + | reg_data_sreg + | + | reg_first_sreg + | + | reg_last_sreg + | + | regnames + | + | segreg_size + | + | tbyte_size + | + | version + +Help on class _notify_when_dispatcher_t in module ida_idp: + +class _notify_when_dispatcher_t + | Methods defined here: + | + | __init__(self) + | + | _find(self, fun) + | + | dispatch(self, slot, *args) + | + | notify_when(self, when, fun) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _IDB_Hooks = + | + | + | _IDP_Hooks = + | + | + | _callback_t = + +Help on class _processor_t_Trampoline_IDB_Hooks in module ida_idp: + +class _processor_t_Trampoline_IDB_Hooks(IDB_Hooks) + | Method resolution order: + | _processor_t_Trampoline_IDB_Hooks + | IDB_Hooks + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, proc) + | + | _processor_t_Trampoline_IDB_Hooks__dummy = __dummy(self, *args) + | + | _processor_t_Trampoline_IDB_Hooks__make_parent_caller = __make_parent_caller(self, key) + | + | ---------------------------------------------------------------------- + | Methods inherited from IDB_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | allsegs_moved(self, *args) + | allsegs_moved(self, info) + | + | auto_empty(self, *args) + | auto_empty(self) + | + | auto_empty_finally(self, *args) + | auto_empty_finally(self) + | + | bookmark_changed(self, *args) + | bookmark_changed(self, index, pos, desc) + | + | byte_patched(self, *args) + | byte_patched(self, ea, old_value) + | + | callee_addr_changed(self, *args) + | callee_addr_changed(self, ea, callee) + | + | changing_cmt(self, *args) + | changing_cmt(self, ea, repeatable_cmt, newcmt) + | + | changing_enum_bf(self, *args) + | changing_enum_bf(self, id, new_bf) + | + | changing_enum_cmt(self, *args) + | changing_enum_cmt(self, id, repeatable, newcmt) + | + | changing_op_ti(self, *args) + | changing_op_ti(self, ea, n, new_type, new_fnames) + | + | changing_op_type(self, *args) + | changing_op_type(self, ea, n, opinfo) + | + | changing_range_cmt(self, *args) + | changing_range_cmt(self, kind, a, cmt, repeatable) + | + | changing_segm_class(self, *args) + | changing_segm_class(self, s) + | + | changing_segm_end(self, *args) + | changing_segm_end(self, s, new_end, segmod_flags) + | + | changing_segm_name(self, *args) + | changing_segm_name(self, s, oldname) + | + | changing_segm_start(self, *args) + | changing_segm_start(self, s, new_start, segmod_flags) + | + | changing_struc_align(self, *args) + | changing_struc_align(self, sptr) + | + | changing_struc_cmt(self, *args) + | changing_struc_cmt(self, struc_id, repeatable, newcmt) + | + | changing_struc_member(self, *args) + | changing_struc_member(self, sptr, mptr, flag, ti, nbytes) + | + | changing_ti(self, *args) + | changing_ti(self, ea, new_type, new_fnames) + | + | closebase(self, *args) + | closebase(self) + | + | cmt_changed(self, *args) + | cmt_changed(self, ea, repeatable_cmt) + | + | compiler_changed(self, *args) + | compiler_changed(self) + | + | deleting_enum(self, *args) + | deleting_enum(self, id) + | + | deleting_enum_member(self, *args) + | deleting_enum_member(self, id, cid) + | + | deleting_func(self, *args) + | deleting_func(self, pfn) + | + | deleting_func_tail(self, *args) + | deleting_func_tail(self, pfn, tail) + | + | deleting_segm(self, *args) + | deleting_segm(self, start_ea) + | + | deleting_struc(self, *args) + | deleting_struc(self, sptr) + | + | deleting_struc_member(self, *args) + | deleting_struc_member(self, sptr, mptr) + | + | deleting_tryblks(self, *args) + | deleting_tryblks(self, range) + | + | destroyed_items(self, *args) + | destroyed_items(self, ea1, ea2, will_disable_range) + | + | determined_main(self, *args) + | determined_main(self, main) + | + | enum_bf_changed(self, *args) + | enum_bf_changed(self, id) + | + | enum_cmt_changed(self, *args) + | enum_cmt_changed(self, id, repeatable) + | + | enum_created(self, *args) + | enum_created(self, id) + | + | enum_deleted(self, *args) + | enum_deleted(self, id) + | + | enum_member_created(self, *args) + | enum_member_created(self, id, cid) + | + | enum_member_deleted(self, *args) + | enum_member_deleted(self, id, cid) + | + | enum_renamed(self, *args) + | enum_renamed(self, id) + | + | expanding_struc(self, *args) + | expanding_struc(self, sptr, offset, delta) + | + | extlang_changed(self, *args) + | extlang_changed(self, kind, el, idx) + | + | extra_cmt_changed(self, *args) + | extra_cmt_changed(self, ea, line_idx, cmt) + | + | flow_chart_created(self, *args) + | flow_chart_created(self, fc) + | + | frame_deleted(self, *args) + | frame_deleted(self, pfn) + | + | func_added(self, *args) + | func_added(self, pfn) + | + | func_noret_changed(self, *args) + | func_noret_changed(self, pfn) + | + | func_tail_appended(self, *args) + | func_tail_appended(self, pfn, tail) + | + | func_tail_deleted(self, *args) + | func_tail_deleted(self, pfn, tail_ea) + | + | func_updated(self, *args) + | func_updated(self, pfn) + | + | hook(self, *args) + | hook(self) -> bool + | + | idasgn_loaded(self, *args) + | idasgn_loaded(self, short_sig_name) + | + | item_color_changed(self, *args) + | item_color_changed(self, ea, color) + | + | kernel_config_loaded(self, *args) + | kernel_config_loaded(self) + | + | loader_finished(self, *args) + | loader_finished(self, li, neflags, filetypename) + | + | local_types_changed(self, *args) + | local_types_changed(self) + | + | make_code(self, *args) + | make_code(self, insn) + | + | make_data(self, *args) + | make_data(self, ea, flags, tid, len) + | + | op_ti_changed(self, *args) + | op_ti_changed(self, ea, n, type, fnames) + | + | op_type_changed(self, *args) + | op_type_changed(self, ea, n) + | + | range_cmt_changed(self, *args) + | range_cmt_changed(self, kind, a, cmt, repeatable) + | + | renamed(self, *args) + | renamed(self, ea, new_name, local_name) + | + | renaming_enum(self, *args) + | renaming_enum(self, id, is_enum, newname) + | + | renaming_struc(self, *args) + | renaming_struc(self, id, oldname, newname) + | + | renaming_struc_member(self, *args) + | renaming_struc_member(self, sptr, mptr, newname) + | + | savebase(self, *args) + | savebase(self) + | + | segm_added(self, *args) + | segm_added(self, s) + | + | segm_attrs_updated(self, *args) + | segm_attrs_updated(self, s) + | + | segm_class_changed(self, *args) + | segm_class_changed(self, s, sclass) + | + | segm_deleted(self, *args) + | segm_deleted(self, start_ea, end_ea) + | + | segm_end_changed(self, *args) + | segm_end_changed(self, s, oldend) + | + | segm_moved(self, *args) + | segm_moved(self, _from, to, size, changed_netmap) + | + | segm_name_changed(self, *args) + | segm_name_changed(self, s, name) + | + | segm_start_changed(self, *args) + | segm_start_changed(self, s, oldstart) + | + | set_func_end(self, *args) + | set_func_end(self, pfn, new_end) + | + | set_func_start(self, *args) + | set_func_start(self, pfn, new_start) + | + | sgr_changed(self, *args) + | sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) + | + | sgr_deleted(self, *args) + | sgr_deleted(self, start_ea, end_ea, regnum) + | + | stkpnts_changed(self, *args) + | stkpnts_changed(self, pfn) + | + | struc_align_changed(self, *args) + | struc_align_changed(self, sptr) + | + | struc_cmt_changed(self, *args) + | struc_cmt_changed(self, struc_id, repeatable_cmt) + | + | struc_created(self, *args) + | struc_created(self, struc_id) + | + | struc_deleted(self, *args) + | struc_deleted(self, struc_id) + | + | struc_expanded(self, *args) + | struc_expanded(self, sptr) + | + | struc_member_changed(self, *args) + | struc_member_changed(self, sptr, mptr) + | + | struc_member_created(self, *args) + | struc_member_created(self, sptr, mptr) + | + | struc_member_deleted(self, *args) + | struc_member_deleted(self, sptr, member_id, offset) + | + | struc_member_renamed(self, *args) + | struc_member_renamed(self, sptr, mptr) + | + | struc_renamed(self, *args) + | struc_renamed(self, sptr) + | + | tail_owner_changed(self, *args) + | tail_owner_changed(self, tail, owner_func, old_owner) + | + | thunk_func_created(self, *args) + | thunk_func_created(self, pfn) + | + | ti_changed(self, *args) + | ti_changed(self, ea, type, fnames) + | + | tryblks_updated(self, *args) + | tryblks_updated(self, tbv) + | + | unhook(self, *args) + | unhook(self) -> bool + | + | updating_tryblks(self, *args) + | updating_tryblks(self, tbv) + | + | upgraded(self, *args) + | upgraded(self, _from) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from IDB_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from IDB_Hooks: + | + | __swig_destroy__ = + | delete_IDB_Hooks(self) + +Help on class asm_t in module ida_idp: + +class asm_t(__builtin__.object) + | Proxy of C++ asm_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> asm_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a_align + | asm_t_a_align_get(self) -> char const * + | + | a_ascii + | asm_t_a_ascii_get(self) -> char const * + | + | a_band + | asm_t_a_band_get(self) -> char const * + | + | a_bnot + | asm_t_a_bnot_get(self) -> char const * + | + | a_bor + | asm_t_a_bor_get(self) -> char const * + | + | a_bss + | asm_t_a_bss_get(self) -> char const * + | + | a_byte + | asm_t_a_byte_get(self) -> char const * + | + | a_comdef + | asm_t_a_comdef_get(self) -> char const * + | + | a_curip + | asm_t_a_curip_get(self) -> char const * + | + | a_double + | asm_t_a_double_get(self) -> char const * + | + | a_dups + | asm_t_a_dups_get(self) -> char const * + | + | a_dword + | asm_t_a_dword_get(self) -> char const * + | + | a_equ + | asm_t_a_equ_get(self) -> char const * + | + | a_extrn + | asm_t_a_extrn_get(self) -> char const * + | + | a_float + | asm_t_a_float_get(self) -> char const * + | + | a_include_fmt + | asm_t_a_include_fmt_get(self) -> char const * + | + | a_mod + | asm_t_a_mod_get(self) -> char const * + | + | a_oword + | asm_t_a_oword_get(self) -> char const * + | + | a_packreal + | asm_t_a_packreal_get(self) -> char const * + | + | a_public + | asm_t_a_public_get(self) -> char const * + | + | a_qword + | asm_t_a_qword_get(self) -> char const * + | + | a_rva + | asm_t_a_rva_get(self) -> char const * + | + | a_seg + | asm_t_a_seg_get(self) -> char const * + | + | a_shl + | asm_t_a_shl_get(self) -> char const * + | + | a_shr + | asm_t_a_shr_get(self) -> char const * + | + | a_sizeof_fmt + | asm_t_a_sizeof_fmt_get(self) -> char const * + | + | a_tbyte + | asm_t_a_tbyte_get(self) -> char const * + | + | a_vstruc_fmt + | asm_t_a_vstruc_fmt_get(self) -> char const * + | + | a_weak + | asm_t_a_weak_get(self) -> char const * + | + | a_word + | asm_t_a_word_get(self) -> char const * + | + | a_xor + | asm_t_a_xor_get(self) -> char const * + | + | a_yword + | asm_t_a_yword_get(self) -> char const * + | + | accsep + | asm_t_accsep_get(self) -> char + | + | ascsep + | asm_t_ascsep_get(self) -> char + | + | cmnt + | asm_t_cmnt_get(self) -> char const * + | + | cmnt2 + | asm_t_cmnt2_get(self) -> char const * + | + | end + | asm_t_end_get(self) -> char const * + | + | esccodes + | asm_t_esccodes_get(self) -> char const * + | + | flag + | asm_t_flag_get(self) -> uint32 + | + | flag2 + | asm_t_flag2_get(self) -> uint32 + | + | header + | asm_t_header_get(self) -> char const *const * + | + | help + | asm_t_help_get(self) -> help_t + | + | high16 + | asm_t_high16_get(self) -> char const * + | + | high8 + | asm_t_high8_get(self) -> char const * + | + | lbrace + | asm_t_lbrace_get(self) -> char + | + | low16 + | asm_t_low16_get(self) -> char const * + | + | low8 + | asm_t_low8_get(self) -> char const * + | + | name + | asm_t_name_get(self) -> char const * + | + | origin + | asm_t_origin_get(self) -> char const * + | + | rbrace + | asm_t_rbrace_get(self) -> char + | + | thisown + | The membership flag + | + | uflag + | asm_t_uflag_get(self) -> uint16 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_asm_t(self) + +Help on function assemble in module ida_idp: + +assemble(*args) + assemble(ea, cs, ip, use32, line) -> bool + + + Assemble an instruction into the database (display a warning if an error is found) + @param ea: linear address of instruction + @param cs: cs of instruction + @param ip: ip of instruction + @param use32: is 32bit segment? + @param line: line to assemble + + @return: Boolean. True on success. + +Help on function cfg_get_cc_header_path in module ida_idp: + +cfg_get_cc_header_path(*args) + cfg_get_cc_header_path(compid) -> char const * + +Help on function cfg_get_cc_parm in module ida_idp: + +cfg_get_cc_parm(*args) + cfg_get_cc_parm(compid, name) -> char const * + +Help on function cfg_get_cc_predefined_macros in module ida_idp: + +cfg_get_cc_predefined_macros(*args) + cfg_get_cc_predefined_macros(compid) -> char const * + +Help on function delay_slot_insn in module ida_idp: + +delay_slot_insn(*args) + delay_slot_insn(ea, bexec, fexec) -> bool + + + Helper function to get the delay slot instruction. + + + @param ea (C++: ea_t *) + @param bexec (C++: bool *) + @param fexec (C++: bool *) + +Help on function gen_idb_event in module ida_idp: + +gen_idb_event(*args) + gen_idb_event(code) + + + the kernel will use this function to generate idb_events + + + @param code (C++: idb_event::event_code_t) + +Help on function get_idb_notifier_addr in module ida_idp: + +get_idb_notifier_addr(*args) + get_idb_notifier_addr(arg1) -> PyObject * + +Help on function get_idb_notifier_ud_addr in module ida_idp: + +get_idb_notifier_ud_addr(*args) + get_idb_notifier_ud_addr(hooks) -> PyObject * + +Help on function get_idp_name in module ida_idp: + +get_idp_name(*args) + get_idp_name() -> str + + + Get name of the current processor module. The name is derived from the + file name. For example, for IBM PC the module is named "pc.w32" + (windows version), then the module name is "PC" (uppercase). If no + processor module is loaded, this function will return NULL + +Help on function get_idp_notifier_addr in module ida_idp: + +get_idp_notifier_addr(*args) + get_idp_notifier_addr(arg1) -> PyObject * + +Help on function get_idp_notifier_ud_addr in module ida_idp: + +get_idp_notifier_ud_addr(*args) + get_idp_notifier_ud_addr(hooks) -> PyObject * + +Help on function get_reg_info in module ida_idp: + +get_reg_info(*args) + get_reg_info(regname, bitrange) -> char const * + + + Get register information - useful for registers like al, ah, dil, etc. + + @param regname (C++: const char *) + @param bitrange (C++: bitrange_t *) + @return: NULL no such register + +Help on function get_reg_name in module ida_idp: + +get_reg_name(*args) + get_reg_name(reg, width, reghi=-1) -> str + + + Get text representation of a register. For most processors this + function will just return \ph{reg_names}[reg]. If the processor module + has implemented processor_t::get_reg_name, it will be used instead + + @param reg: internal register number as defined in the processor + module (C++: int) + @param width: register width in bytes (C++: size_t) + @param reghi: if specified, then this function will return the + register pair (C++: int) + @return: length of register name in bytes or -1 if failure + +Help on function has_cf_chg in module ida_idp: + +has_cf_chg(*args) + has_cf_chg(feature, opnum) -> bool + + + Does an instruction with the specified feature modify the i-th + operand? + + + @param feature (C++: uint32) + @param opnum (C++: uint) + +Help on function has_cf_use in module ida_idp: + +has_cf_use(*args) + has_cf_use(feature, opnum) -> bool + + + Does an instruction with the specified feature use a value of the i-th + operand? + + + @param feature (C++: uint32) + @param opnum (C++: uint) + +Help on function has_insn_feature in module ida_idp: + +has_insn_feature(*args) + has_insn_feature(icode, bit) -> bool + + + Does the specified instruction have the specified feature? + + + @param icode (C++: int) + @param bit (C++: uint32) + +Help on function is_align_insn in module ida_idp: + +is_align_insn(*args) + is_align_insn(ea) -> int + + + If the instruction at 'ea' looks like an alignment instruction, return + its length in bytes. Otherwise return 0. + + @param ea (C++: ea_t) + +Help on function is_basic_block_end in module ida_idp: + +is_basic_block_end(*args) + is_basic_block_end(insn, call_insn_stops_block) -> bool + + + Is the instruction the end of a basic block? + + + @param insn (C++: const insn_t &) + @param call_insn_stops_block (C++: bool) + +Help on function is_call_insn in module ida_idp: + +is_call_insn(*args) + is_call_insn(insn) -> bool + + + Is the instruction a "call"? + + + @param insn (C++: const insn_t &) + +Help on function is_indirect_jump_insn in module ida_idp: + +is_indirect_jump_insn(*args) + is_indirect_jump_insn(insn) -> bool + + + Is the instruction an indirect jump? + + + @param insn (C++: const insn_t &) + +Help on function is_ret_insn in module ida_idp: + +is_ret_insn(*args) + is_ret_insn(insn, strict=True) -> bool + + + Is the instruction a "return"? + + + @param insn (C++: const insn_t &) + @param strict (C++: bool) + +Help on function parse_reg_name in module ida_idp: + +parse_reg_name(*args) + parse_reg_name(ri, regname) -> bool + + + Get register info by name. + + @param ri: result (C++: reg_info_t *) + @param regname: name of register (C++: const char *) + @return: success + +Help on __ph in module ida_idp object: + +class __ph(__builtin__.object) + | # ---------------------------------------------------------------------- + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cnbits + | + | dnbits + | + | flag + | + | icode_return + | + | id + | + | instruc + | + | instruc_end + | + | instruc_start + | + | reg_code_sreg + | + | reg_data_sreg + | + | reg_first_sreg + | + | reg_last_sreg + | + | regnames + | + | segreg_size + | + | tbyte_size + | + | version + +Help on function ph_calcrel in module ida_idp: + +ph_calcrel(*args) + ph_calcrel(ea) + +Help on function ph_find_op_value in module ida_idp: + +ph_find_op_value(*args) + ph_find_op_value(insn, op) -> ssize_t + +Help on function ph_find_reg_value in module ida_idp: + +ph_find_reg_value(*args) + ph_find_reg_value(insn, reg) -> ssize_t + +Help on function ph_get_cnbits in module ida_idp: + +ph_get_cnbits(*args) + ph_get_cnbits() -> size_t + + + Returns the 'ph.cnbits' + +Help on function ph_get_dnbits in module ida_idp: + +ph_get_dnbits(*args) + ph_get_dnbits() -> size_t + + + Returns the 'ph.dnbits' + +Help on function ph_get_flag in module ida_idp: + +ph_get_flag(*args) + ph_get_flag() -> size_t + + + Returns the 'ph.flag' + +Help on function ph_get_icode_return in module ida_idp: + +ph_get_icode_return(*args) + ph_get_icode_return() -> size_t + + + Returns the 'ph.icode_return' + +Help on function ph_get_id in module ida_idp: + +ph_get_id(*args) + ph_get_id() -> size_t + + + Returns the 'ph.id' field + +Help on function ph_get_instruc in module ida_idp: + +ph_get_instruc(*args) + ph_get_instruc() -> PyObject * + + + Returns a list of tuples (instruction_name, instruction_feature) containing the + instructions list as defined in he processor module + +Help on function ph_get_instruc_end in module ida_idp: + +ph_get_instruc_end(*args) + ph_get_instruc_end() -> size_t + + + Returns the 'ph.instruc_end' + +Help on function ph_get_instruc_start in module ida_idp: + +ph_get_instruc_start(*args) + ph_get_instruc_start() -> size_t + + + Returns the 'ph.instruc_start' + +Help on function ph_get_operand_info in module ida_idp: + +ph_get_operand_info(*args) + ph_get_operand_info(ea, n) -> PyObject * + + + Returns the operand information given an ea and operand number. + + @param ea: address + @param n: operand number + + @return: Returns an idd_opinfo_t as a tuple: (modified, ea, reg_ival, regidx, value_size). + Please refer to idd_opinfo_t structure in the SDK. + +Help on function ph_get_reg_code_sreg in module ida_idp: + +ph_get_reg_code_sreg(*args) + ph_get_reg_code_sreg() -> size_t + + + Returns the 'ph.reg_code_sreg' + +Help on function ph_get_reg_data_sreg in module ida_idp: + +ph_get_reg_data_sreg(*args) + ph_get_reg_data_sreg() -> size_t + + + Returns the 'ph.reg_data_sreg' + +Help on function ph_get_reg_first_sreg in module ida_idp: + +ph_get_reg_first_sreg(*args) + ph_get_reg_first_sreg() -> size_t + + + Returns the 'ph.reg_first_sreg' + +Help on function ph_get_reg_last_sreg in module ida_idp: + +ph_get_reg_last_sreg(*args) + ph_get_reg_last_sreg() -> size_t + + + Returns the 'ph.reg_last_sreg' + +Help on function ph_get_regnames in module ida_idp: + +ph_get_regnames(*args) + ph_get_regnames() -> PyObject * + + + Returns the list of register names as defined in the processor module + +Help on function ph_get_segreg_size in module ida_idp: + +ph_get_segreg_size(*args) + ph_get_segreg_size() -> size_t + + + Returns the 'ph.segreg_size' + +Help on function ph_get_tbyte_size in module ida_idp: + +ph_get_tbyte_size(*args) + ph_get_tbyte_size() -> size_t + + + Returns the 'ph.tbyte_size' field as defined in he processor module + +Help on function ph_get_version in module ida_idp: + +ph_get_version(*args) + ph_get_version() -> size_t + + + Returns the 'ph.version' + +Help on class processor_t in module ida_idp: + +class processor_t(IDP_Hooks) + | Method resolution order: + | processor_t + | IDP_Hooks + | __builtin__.object + | + | Methods defined here: + | + | __init__(self) + | + | _get_idb_notifier_addr(self) + | + | _get_idb_notifier_ud_addr(self) + | + | _get_idp_notifier_addr(self) + | + | _get_idp_notifier_ud_addr(self) + | + | _get_notify(self, what, unimp_val=0, imp_forced_val=None, add_prefix=True, mandatory_impl=None) + | This helper is used to implement backward-compatibility + | of pre IDA 7.3 processor_t interfaces. + | + | _make_forced_value_wrapper(self, val, meth=None) + | + | _make_int_returning_wrapper(self, meth, intval=0) + | + | auto_empty(self, *args) + | + | auto_empty_finally(self, *args) + | + | closebase(self, *args) + | + | compiler_changed(self, *args) + | + | deleting_func(self, pfn) + | + | determined_main(self, *args) + | + | ev_ana_insn(self, *args) + | + | ev_assemble(self, *args) + | + | ev_auto_queue_empty(self, *args) + | + | ev_calc_step_over(self, target, ip) + | + | ev_can_have_type(self, *args) + | + | ev_cmp_operands(self, *args) + | + | ev_coagulate(self, *args) + | + | ev_coagulate_dref(self, from_ea, to_ea, may_define, _code_ea) + | + | ev_create_func_frame(self, pfn) + | + | ev_create_switch_xrefs(self, *args) + | + | ev_creating_segm(self, s) + | + | ev_emu_insn(self, *args) + | + | ev_endbinary(self, *args) + | + | ev_func_bounds(self, _possible_return_code, pfn, max_func_end_ea) + | + | ev_gen_map_file(self, nlines, fp) + | + | ev_gen_regvar_def(self, ctx, v) + | + | ev_gen_src_file_lnnum(self, *args) + | + | ev_get_autocmt(self, *args) + | + | ev_get_frame_retsize(self, frsize, pfn) + | + | ev_get_operand_string(self, buf, insn, opnum) + | + | ev_is_align_insn(self, *args) + | + | ev_is_alloca_probe(self, *args) + | + | ev_is_basic_block_end(self, *args) + | + | ev_is_call_insn(self, *args) + | + | ev_is_far_jump(self, *args) + | + | ev_is_indirect_jump(self, *args) + | + | ev_is_insn_table_jump(self, *args) + | + | ev_is_ret_insn(self, *args) + | + | ev_is_sane_insn(self, *args) + | + | ev_is_sp_based(self, mode, insn, op) + | + | ev_is_switch(self, *args) + | + | ev_may_be_func(self, *args) + | + | ev_may_show_sreg(self, *args) + | + | ev_moving_segm(self, s, to_ea, flags) + | + | ev_newbinary(self, *args) + | + | ev_newfile(self, *args) + | + | ev_newprc(self, *args) + | + | ev_oldfile(self, *args) + | + | ev_out_assumes(self, *args) + | + | ev_out_data(self, *args) + | + | ev_out_footer(self, *args) + | + | ev_out_header(self, *args) + | + | ev_out_insn(self, *args) + | + | ev_out_label(self, *args) + | + | ev_out_mnem(self, *args) + | + | ev_out_operand(self, *args) + | + | ev_out_segend(self, ctx, s) + | + | ev_out_segstart(self, ctx, s) + | + | ev_out_special_item(self, *args) + | + | ev_rename(self, *args) + | + | ev_set_idp_options(self, keyword, value_type, value) + | + | ev_set_proc_options(self, *args) + | + | ev_str2reg(self, *args) + | + | ev_treat_hindering_item(self, *args) + | + | ev_undefine(self, *args) + | + | ev_validate_flirt_func(self, *args) + | + | ev_verify_noreturn(self, pfn) + | + | ev_verify_sp(self, pfn) + | + | func_added(self, pfn) + | + | get_auxpref(self, insn) + | This function returns insn.auxpref value + | + | get_idpdesc(self) + | This function must be present and should return the list of + | short processor names similar to the one in ph.psnames. + | This method can be overridden to return to the kernel a different IDP description. + | + | get_uFlag(self) + | Use this utility function to retrieve the 'uFlag' global variable + | + | idasgn_loaded(self, *args) + | + | kernel_config_loaded(self, *args) + | + | make_code(self, *args) + | + | make_data(self, *args) + | + | renamed(self, *args) + | + | savebase(self, *args) + | + | segm_moved(self, from_ea, to_ea, size, changed_netmap) + | + | set_func_end(self, *args) + | + | set_func_start(self, *args) + | + | sgr_changed(self, *args) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __idc_cvt_id__ = 2 + | + | ---------------------------------------------------------------------- + | Methods inherited from IDP_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | ev_add_cref(self, *args) + | ev_add_cref(self, _from, to, type) -> int + | + | ev_add_dref(self, *args) + | ev_add_dref(self, _from, to, type) -> int + | + | ev_adjust_argloc(self, *args) + | ev_adjust_argloc(self, argloc, optional_type, size) -> int + | + | ev_adjust_libfunc_ea(self, *args) + | ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int + | + | ev_adjust_refinfo(self, *args) + | ev_adjust_refinfo(self, ri, ea, n, fd) -> int + | + | ev_analyze_prolog(self, *args) + | ev_analyze_prolog(self, ea) -> int + | + | ev_arg_addrs_ready(self, *args) + | ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int + | + | ev_calc_arglocs(self, *args) + | ev_calc_arglocs(self, fti) -> int + | + | ev_calc_cdecl_purged_bytes(self, *args) + | ev_calc_cdecl_purged_bytes(self, ea) -> int + | + | ev_calc_next_eas(self, *args) + | ev_calc_next_eas(self, res, insn, over) -> int + | + | ev_calc_purged_bytes(self, *args) + | ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int + | + | ev_calc_retloc(self, *args) + | ev_calc_retloc(self, retloc, rettype, cc) -> int + | + | ev_calc_spdelta(self, *args) + | ev_calc_spdelta(self, spdelta, insn) -> int + | + | ev_calc_switch_cases(self, *args) + | ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int + | + | ev_calc_varglocs(self, *args) + | ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int + | + | ev_calcrel(self, *args) + | ev_calcrel(self) -> int + | + | ev_clean_tbit(self, *args) + | ev_clean_tbit(self, ea, getreg, regvalues) -> int + | + | ev_create_flat_group(self, *args) + | ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int + | + | ev_decorate_name(self, *args) + | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * + | + | ev_del_cref(self, *args) + | ev_del_cref(self, _from, to, expand) -> int + | + | ev_del_dref(self, *args) + | ev_del_dref(self, _from, to) -> int + | + | ev_delay_slot_insn(self, *args) + | ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * + | + | ev_demangle_name(self, *args) + | ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * + | + | ev_ending_undo(self, *args) + | ev_ending_undo(self, action_name, is_undo) -> int + | + | ev_equal_reglocs(self, *args) + | ev_equal_reglocs(self, a1, a2) -> int + | + | ev_extract_address(self, *args) + | ev_extract_address(self, out_ea, screen_ea, string, position) -> int + | + | ev_find_op_value(self, *args) + | ev_find_op_value(self, pinsn, opn) -> PyObject * + | + | ev_find_reg_value(self, *args) + | ev_find_reg_value(self, pinsn, reg) -> PyObject * + | + | ev_gen_asm_or_lst(self, *args) + | ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) + | + | ev_gen_stkvar_def(self, *args) + | ev_gen_stkvar_def(self, outctx, mptr, v) -> int + | + | ev_get_abi_info(self, *args) + | ev_get_abi_info(self, abi_names, abi_opts, comp) -> int + | + | ev_get_bg_color(self, *args) + | ev_get_bg_color(self, ea) -> int or None + | + | ev_get_cc_regs(self, *args) + | ev_get_cc_regs(self, regs, cc) -> int + | + | ev_get_code16_mode(self, *args) + | ev_get_code16_mode(self, ea) -> int + | + | ev_get_dbr_opnum(self, *args) + | ev_get_dbr_opnum(self, opnum, insn) -> int + | + | ev_get_default_enum_size(self, *args) + | ev_get_default_enum_size(self, cm) -> int + | + | ev_get_macro_insn_head(self, *args) + | ev_get_macro_insn_head(self, head, ip) -> int + | + | ev_get_reg_info(self, *args) + | ev_get_reg_info(self, main_regname, bitrange, regname) -> int + | + | ev_get_reg_name(self, *args) + | ev_get_reg_name(self, reg, width, reghi) -> PyObject * + | + | ev_get_simd_types(self, *args) + | ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int + | + | ev_get_stkarg_offset(self, *args) + | ev_get_stkarg_offset(self) -> int + | + | ev_get_stkvar_scale_factor(self, *args) + | ev_get_stkvar_scale_factor(self) -> int + | + | ev_getreg(self, *args) + | ev_getreg(self, regval, regnum) -> int + | + | ev_init(self, *args) + | ev_init(self, idp_modname) -> int + | + | ev_insn_reads_tbit(self, *args) + | ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int + | + | ev_is_cond_insn(self, *args) + | ev_is_cond_insn(self, insn) -> int + | + | ev_is_jump_func(self, *args) + | ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int + | + | ev_last_cb_before_loader(self, *args) + | ev_last_cb_before_loader(self) -> int + | + | ev_loader(self, *args) + | ev_loader(self) -> int + | + | ev_lower_func_type(self, *args) + | ev_lower_func_type(self, argnums, fti) -> int + | + | ev_max_ptr_size(self, *args) + | ev_max_ptr_size(self) -> int + | + | ev_newasm(self, *args) + | ev_newasm(self, asmnum) -> int + | + | ev_next_exec_insn(self, *args) + | ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int + | + | ev_realcvt(self, *args) + | ev_realcvt(self, m, e, swt) -> int + | + | ev_replaying_undo(self, *args) + | ev_replaying_undo(self, action_name, vec, is_undo) -> int + | + | ev_set_code16_mode(self, *args) + | ev_set_code16_mode(self, ea, code16) -> int + | + | ev_setup_til(self, *args) + | ev_setup_til(self) + | + | ev_shadow_args_size(self, *args) + | ev_shadow_args_size(self, shadow_args_size, pfn) -> int + | + | ev_term(self, *args) + | ev_term(self) -> int + | + | ev_use_arg_types(self, *args) + | ev_use_arg_types(self, ea, fti, rargs) -> int + | + | ev_use_regarg_type(self, *args) + | ev_use_regarg_type(self, ea, rargs) -> PyObject * + | + | ev_use_stkarg_type(self, *args) + | ev_use_stkarg_type(self, ea, arg) -> int + | + | hook(self, *args) + | hook(self) -> bool + | + | + | Creates an IDP hook + | + | @return: Boolean true on success + | + | unhook(self, *args) + | unhook(self) -> bool + | + | + | Removes the IDP hook + | @return: Boolean true on success + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from IDP_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from IDP_Hooks: + | + | __swig_destroy__ = + | delete_IDP_Hooks(self) + +Help on class reg_info_t in module ida_idp: + +class reg_info_t(__builtin__.object) + | Proxy of C++ reg_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> reg_info_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | reg + | reg_info_t_reg_get(self) -> int + | + | size + | reg_info_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_reg_info_t(self) + +Help on function set_processor_type in module ida_idp: + +set_processor_type(*args) + set_processor_type(procname, level) -> bool + + + Set target processor type. Once a processor module is loaded, it + cannot be replaced until we close the idb. + + @param procname: name of processor type (one of names present in + \ph{psnames}) (C++: const char *) + @param level: SETPROC_ (C++: setproc_level_t) + @return: success + +Help on function set_target_assembler in module ida_idp: + +set_target_assembler(*args) + set_target_assembler(asmnum) -> bool + + + Set target assembler. + + @param asmnum: number of assembler in the current processor module + (C++: int) + @return: success + +Help on function sizeof_ldbl in module ida_idp: + +sizeof_ldbl(*args) + sizeof_ldbl() -> size_t + + + Get size of long double. + +Help on function str2reg in module ida_idp: + +str2reg(*args) + str2reg(p) -> int + + + Get any reg number (-1 on error) + + + @param p (C++: const char *) + +=== ida_idp EPYDOC INJECTIONS === +ida_idp.AS2_BRACE +""" +Use braces for all expressions. +""" + +ida_idp.AS2_BYTE1CHAR +""" +Meaningful only for wide byte processors. + +One symbol per processor byte +""" + +ida_idp.AS2_COLONSUF +""" +addresses may have ":xx" suffix this suffix must be ignored when +extracting the address under the cursor +""" + +ida_idp.AS2_IDEALDSCR +""" +Description of struc/union is in the 'reverse' form (keyword before +name) the same as in borland tasm ideal +""" + +ida_idp.AS2_STRINV +""" +(For processors with bytes bigger than 8 bits) + +Invert meaning of \\inf{wide_high_byte_first} for text strings +""" + +ida_idp.AS2_TERSESTR +""" +NAME is supported. + +'terse' structure initialization form +""" + +ida_idp.AS2_YWORD +""" +a_yword field is present and valid +""" + +ida_idp.ASB_BINF0 +""" +010101b +""" + +ida_idp.ASB_BINF1 +""" +^B010101 +""" + +ida_idp.ASB_BINF2 +""" +%010101 +""" + +ida_idp.ASB_BINF3 +""" +0b1010101 +""" + +ida_idp.ASB_BINF4 +""" +b'1010101 +""" + +ida_idp.ASB_BINF5 +""" +b'1010101' +""" + +ida_idp.ASD_DECF0 +""" +34 +""" + +ida_idp.ASD_DECF1 +""" +#34 +""" + +ida_idp.ASD_DECF3 +""" +.34 +""" + +ida_idp.ASH_HEXF0 +""" +34h +""" + +ida_idp.ASH_HEXF1 +""" +h'34 +""" + +ida_idp.ASH_HEXF2 +""" +34 +""" + +ida_idp.ASH_HEXF3 +""" +0x34 +""" + +ida_idp.ASH_HEXF4 +""" +$34 +""" + +ida_idp.ASH_HEXF5 +""" +<^R > (radix) +""" + +ida_idp.ASO_OCTF0 +""" +123o +""" + +ida_idp.ASO_OCTF1 +""" +0123 +""" + +ida_idp.ASO_OCTF2 +""" +123 +""" + +ida_idp.ASO_OCTF3 +""" +@123 +""" + +ida_idp.ASO_OCTF4 +""" +o'123 +""" + +ida_idp.ASO_OCTF5 +""" +123q +""" + +ida_idp.ASO_OCTF6 +""" +~123 +""" + +ida_idp.ASO_OCTF7 +""" +q'123 +""" + +ida_idp.AS_1TEXT +""" +1 text per line, no bytes +""" + +ida_idp.AS_2CHRE +""" +double char constants are: "xy +""" + +ida_idp.AS_ALIGN2 +""" +(.align 5 means to align at 32byte boundary) + +.align directive expects an exponent rather than a power of 2 +""" + +ida_idp.AS_ASCIIC +""" +(\\n,\\x01 and similar) + +ascii directive accepts C-like escape sequences +""" + +ida_idp.AS_ASCIIZ +""" +ascii directive inserts implicit zero byte at the end +""" + +ida_idp.AS_BINFM +""" +mask - binary number format +""" + +ida_idp.AS_COLON +""" +create colons after data names ? +""" + +ida_idp.AS_DECFM +""" +mask - decimal number format +""" + +ida_idp.AS_HEXFM +""" +mask - hex number format +""" + +ida_idp.AS_LALIGN +""" +Labels at "align" keyword are supported. +""" + +ida_idp.AS_N2CHR +""" +can't have 2 byte char consts +""" + +ida_idp.AS_NCHRE +""" +char constants are: 'x +""" + +ida_idp.AS_NCMAS +""" +no commas in ascii directives +""" + +ida_idp.AS_NHIAS +""" +no characters with high bit +""" + +ida_idp.AS_NOCODECLN +""" +don't create colons after code names +""" + +ida_idp.AS_NOSPACE +""" +No spaces in expressions. +""" + +ida_idp.AS_NOXRF +""" +Disable xrefs during the output file generation. +""" + +ida_idp.AS_OCTFM +""" +mask - octal number format +""" + +ida_idp.AS_OFFST +""" +offsets are 'offset xxx' ? +""" + +ida_idp.AS_ONEDUP +""" +One array definition per line. +""" + +ida_idp.AS_RELSUP +""" +Checkarg: 'and','or','xor' operations with addresses are possible. +""" + +ida_idp.AS_UDATA +""" +can use '?' in data directives +""" + +ida_idp.AS_UNEQU +""" +replace undefined data items with EQU (for ANTA's A80) +""" + +ida_idp.AS_XTRNTYPE +""" +Assembler understands type of extern symbols as ":type" suffix. +""" + +ida_idp.CF_CALL +""" +CALL instruction (should make a procedure here) +""" + +ida_idp.CF_CHG1 +""" +The instruction modifies the first operand. +""" + +ida_idp.CF_CHG2 +""" +The instruction modifies the second operand. +""" + +ida_idp.CF_CHG3 +""" +The instruction modifies the third operand. +""" + +ida_idp.CF_CHG4 +""" +The instruction modifies 4 operand. +""" + +ida_idp.CF_CHG5 +""" +The instruction modifies 5 operand. +""" + +ida_idp.CF_CHG6 +""" +The instruction modifies 6 operand. +""" + +ida_idp.CF_HLL +""" +language function. + +Instruction may be present in a high level +""" + +ida_idp.CF_JUMP +""" +jump or call (thus needs additional analysis) + +The instruction passes execution using indirect +""" + +ida_idp.CF_SHFT +""" +Bit-shift instruction (shl,shr...) +""" + +ida_idp.CF_STOP +""" +next instruction + +Instruction doesn't pass execution to the +""" + +ida_idp.CF_USE1 +""" +The instruction uses value of the first operand. +""" + +ida_idp.CF_USE2 +""" +The instruction uses value of the second operand. +""" + +ida_idp.CF_USE3 +""" +The instruction uses value of the third operand. +""" + +ida_idp.CF_USE4 +""" +The instruction uses value of the 4 operand. +""" + +ida_idp.CF_USE5 +""" +The instruction uses value of the 5 operand. +""" + +ida_idp.CF_USE6 +""" +The instruction uses value of the 6 operand. +""" + +ida_idp.CUSTOM_INSN_ITYPE +""" +Custom instruction codes defined by processor extension plugins must +be greater than or equal to this +""" + +ida_idp.IDP_INTERFACE_VERSION +""" +The interface version number.see also 'IDA_SDK_VERSION' from 'pro.h' +""" + +ida_idp.OP_FP_BASED +""" +operand is FP based +""" + +ida_idp.OP_SP_ADD +""" +operand value is added to the pointer +""" + +ida_idp.OP_SP_BASED +""" +operand is SP based +""" + +ida_idp.OP_SP_SUB +""" +operand value is subtracted from the pointer +""" + +ida_idp.PLFM_386 +""" +Intel 80x86. +""" + +ida_idp.PLFM_6502 +""" +6502 +""" + +ida_idp.PLFM_65C816 +""" +65802/65816 +""" + +ida_idp.PLFM_6800 +""" +Motorola 68xx. +""" + +ida_idp.PLFM_68K +""" +Motorola 680x0. +""" + +ida_idp.PLFM_80196 +""" +Intel 80196. +""" + +ida_idp.PLFM_8051 +""" +8051 +""" + +ida_idp.PLFM_AD2106X +""" +Analog Devices ADSP 2106X. +""" + +ida_idp.PLFM_AD218X +""" +Analog Devices ADSP 218X. +""" + +ida_idp.PLFM_ALPHA +""" +DEC Alpha. +""" + +ida_idp.PLFM_ARC +""" +Argonaut RISC Core. +""" + +ida_idp.PLFM_ARM +""" +Advanced RISC Machines. +""" + +ida_idp.PLFM_AVR +""" +Atmel 8-bit RISC processor(s) +""" + +ida_idp.PLFM_C166 +""" +Siemens C166 family. +""" + +ida_idp.PLFM_C39 +""" +Rockwell C39. +""" + +ida_idp.PLFM_CR16 +""" +NSC CR16. +""" + +ida_idp.PLFM_DALVIK +""" +Android Dalvik Virtual Machine. +""" + +ida_idp.PLFM_DSP56K +""" +Motorola DSP5600x. +""" + +ida_idp.PLFM_DSP96K +""" +Motorola DSP96000. +""" + +ida_idp.PLFM_EBC +""" +EFI Bytecode. +""" + +ida_idp.PLFM_F2MC +""" +Fujistu F2MC-16. +""" + +ida_idp.PLFM_FR +""" +Fujitsu FR Family. +""" + +ida_idp.PLFM_H8 +""" +Hitachi H8/300, H8/2000. +""" + +ida_idp.PLFM_H8500 +""" +Hitachi H8/500. +""" + +ida_idp.PLFM_HPPA +""" +Hewlett-Packard PA-RISC. +""" + +ida_idp.PLFM_I860 +""" +Intel 860. +""" + +ida_idp.PLFM_I960 +""" +Intel 960. +""" + +ida_idp.PLFM_IA64 +""" +Intel Itanium IA64. +""" + +ida_idp.PLFM_JAVA +""" +Java. +""" + +ida_idp.PLFM_KR1878 +""" +Angstrem KR1878. +""" + +ida_idp.PLFM_M16C +""" +Renesas M16C. +""" + +ida_idp.PLFM_M32R +""" +Mitsubishi 32bit RISC. +""" + +ida_idp.PLFM_M740 +""" +Mitsubishi 8bit. +""" + +ida_idp.PLFM_M7700 +""" +Mitsubishi 16bit. +""" + +ida_idp.PLFM_M7900 +""" +Mitsubishi 7900. +""" + +ida_idp.PLFM_MC6812 +""" +Motorola 68HC12. +""" + +ida_idp.PLFM_MC6816 +""" +Motorola 68HC16. +""" + +ida_idp.PLFM_MIPS +""" +MIPS. +""" + +ida_idp.PLFM_MN102L00 +""" +Panasonic MN10200. +""" + +ida_idp.PLFM_MSP430 +""" +Texas Instruments MSP430. +""" + +ida_idp.PLFM_NEC_78K0 +""" +NEC 78K0. +""" + +ida_idp.PLFM_NEC_78K0S +""" +NEC 78K0S. +""" + +ida_idp.PLFM_NEC_V850X +""" +NEC V850 and V850ES/E1/E2. +""" + +ida_idp.PLFM_NET +""" +Microsoft Visual Studio.Net. +""" + +ida_idp.PLFM_OAKDSP +""" +Atmel OAK DSP. +""" + +ida_idp.PLFM_PDP +""" +PDP11. +""" + +ida_idp.PLFM_PIC +""" +Microchip's PIC. +""" + +ida_idp.PLFM_PIC16 +""" +Microchip's 16-bit PIC. +""" + +ida_idp.PLFM_PPC +""" +PowerPC. +""" + +ida_idp.PLFM_S390 +""" +IBM's S390. +""" + +ida_idp.PLFM_SCR_ADPT +""" +Processor module adapter for processor modules written in scripting +languages. +""" + +ida_idp.PLFM_SH +""" +Renesas (formerly Hitachi) SuperH. +""" + +ida_idp.PLFM_SPARC +""" +SPARC. +""" + +ida_idp.PLFM_SPC700 +""" +Sony SPC700. +""" + +ida_idp.PLFM_SPU +""" +Cell Broadband Engine Synergistic Processor Unit. +""" + +ida_idp.PLFM_ST20 +""" +SGS-Thomson ST20. +""" + +ida_idp.PLFM_ST7 +""" +SGS-Thomson ST7. +""" + +ida_idp.PLFM_ST9 +""" +ST9+. +""" + +ida_idp.PLFM_TLCS900 +""" +Toshiba TLCS-900. +""" + +ida_idp.PLFM_TMS +""" +Texas Instruments TMS320C5x. +""" + +ida_idp.PLFM_TMS320C1X +""" +Texas Instruments TMS320C1x. +""" + +ida_idp.PLFM_TMS320C28 +""" +Texas Instruments TMS320C28x. +""" + +ida_idp.PLFM_TMS320C3 +""" +Texas Instruments TMS320C3. +""" + +ida_idp.PLFM_TMS320C54 +""" +Texas Instruments TMS320C54xx. +""" + +ida_idp.PLFM_TMS320C55 +""" +Texas Instruments TMS320C55xx. +""" + +ida_idp.PLFM_TMSC6 +""" +Texas Instruments TMS320C6x. +""" + +ida_idp.PLFM_TRICORE +""" +Tasking Tricore. +""" + +ida_idp.PLFM_TRIMEDIA +""" +Trimedia. +""" + +ida_idp.PLFM_UNSP +""" +SunPlus unSP. +""" + +ida_idp.PLFM_Z8 +""" +Z8. +""" + +ida_idp.PLFM_Z80 +""" +8085, Z80 +""" + +ida_idp.PRN_BIN +""" +binary +""" + +ida_idp.PRN_DEC +""" +decimal +""" + +ida_idp.PRN_HEX +""" +hex +""" + +ida_idp.PRN_OCT +""" +octal +""" + +ida_idp.PR_ADJSEGS +""" +IDA may adjust segments' starting/ending addresses. +""" + +ida_idp.PR_ALIGN +""" +All data items should be aligned properly. +""" + +ida_idp.PR_ALIGN_INSN +""" +allow ida to create alignment instructions arbitrarily. Since these +instructions might lead to other wrong instructions and spoil the +listing, IDA does not create them by default anymore +""" + +ida_idp.PR_ASSEMBLE +""" +Module has a built-in assembler and will react to ev_assemble. +""" + +ida_idp.PR_BINMEM +""" +the processor module provides correct segmentation for binary files +(i.e. it creates additional segments) The kernel will not ask the user +to specify the RAM/ROM sizes +""" + +ida_idp.PR_CHK_XREF +""" +don't allow near xrefs between segments with different bases +""" + +ida_idp.PR_CNDINSNS +""" +has conditional instructions +""" + +ida_idp.PR_DEFNUM +""" +mask - default number representation +""" + +ida_idp.PR_DEFSEG32 +""" +segments are 32-bit by default +""" + +ida_idp.PR_DEFSEG64 +""" +segments are 64-bit by default +""" + +ida_idp.PR_DELAYED +""" +has delayed jumps and calls if this flag is set, +\\ph{is_basic_block_end}, \\ph{has_delay_slot} should be implemented +""" + +ida_idp.PR_NOCHANGE +""" +(display only) + +The user can't change segments and code/data attributes +""" + +ida_idp.PR_NO_SEGMOVE +""" +(i.e. the user can't move segments) + +the processor module doesn't support 'move_segm()' +""" + +ida_idp.PR_PURGING +""" +there are calling conventions which may purge bytes from the stack +""" + +ida_idp.PR_RNAMESOK +""" +allow user register names for location names +""" + +ida_idp.PR_SCALE_STKVARS +""" +use \\ph{get_stkvar_scale} callback +""" + +ida_idp.PR_SEGS +""" +has segment registers? +""" + +ida_idp.PR_SEGTRANS +""" +the processor module supports the segment translation feature (meaning +it calculates the code addresses using the 'map_code_ea()' function) +""" + +ida_idp.PR_SGROTHER +""" +the segment registers don't contain the segment selectors. +""" + +ida_idp.PR_STACK_UP +""" +the stack grows up +""" + +ida_idp.PR_TYPEINFO +""" +ALL OF THEM SHOULD BE IMPLEMENTED! + +the processor module supports type information callbacks +""" + +ida_idp.PR_USE32 +""" +supports 32-bit addressing? +""" + +ida_idp.PR_USE64 +""" +supports 64-bit addressing? +""" + +ida_idp.PR_USE_ARG_TYPES +""" +use \\ph{use_arg_types} callback +""" + +ida_idp.PR_USE_TBYTE +""" + 'BTMT_SPECFLT' means _TBYTE type +""" + +ida_idp.PR_WORD_INS +""" +instruction codes are grouped 2bytes in binary line prefix +""" + +ida_idp.REG_SPOIL +""" +processor_t::use_regarg_type uses this bit in the return value to +indicate that the register value has been spoiled +""" +=== ida_idp EPYDOC INJECTIONS END === +Help on class Choose in module ida_kernwin: + +class Choose(__builtin__.object) + | Chooser wrapper class. + | + | Some constants are defined in this class. + | Please refer to kernwin.hpp for more information. + | + | Methods defined here: + | + | Activate(self) + | Activates a visible chooser + | + | AddCommand(self, caption, flags=4, menu_index=-1, icon=-1, emb=None, shortcut=None) + | + | Close(self) + | Closes the chooser + | + | Embedded(self, create_chobj=False) + | Creates an embedded chooser (as opposed to Show()) + | @return: Returns 0 on success or NO_ATTR + | + | GetEmbSelection(self) + | Deprecated. For embedded choosers, the selection is + | available through 'Form.EmbeddedChooserControl.selection' + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | OnPopup(self, widget, popup_handle) + | + | Refresh(self) + | Causes the refresh callback to trigger + | + | Show(self, modal=False) + | Activates or creates a chooser window + | @param modal: Display as modal dialog + | @return: For all choosers it will return NO_ATTR if some mandatory + | attribute is missing. The mandatory attributes are: flags, + | title, cols, OnGetSize(), OnGetLine(); + | For modal choosers it will return the selected item index (0-based), + | or NO_SELECTION if no selection, + | or EMPTY_CHOOSER if the OnRefresh() callback returns EMPTY_CHOOSER; + | For non-modal choosers it will return 0 + | or ALREADY_EXISTS if the chooser was already open and is active now; + | + | __init__(self, title, cols, flags=0, popup_names=None, icon=-1, x1=-1, y1=-1, x2=-1, y2=-1, deflt=None, embedded=False, width=None, height=None, forbidden_cb=0) + | Constructs a chooser window. + | @param title: The chooser title + | @param cols: a list of colums; each list item is a list of two items + | example: [ ["Address", 10 | Choose.CHCOL_HEX], + | ["Name", 30 | Choose.CHCOL_PLAIN] ] + | @param flags: One of CH_XXXX constants + | @param deflt: The index of the default item (0-based) for single + | selection choosers or the list of indexes for multi selection + | chooser + | @param popup_names: List of new captions to replace this list + | ["Insert", "Delete", "Edit", "Refresh"] + | @param icon: Icon index (the icon should exist in ida resources or + | an index to a custom loaded icon) + | @param x1, y1, x2, y2: The default location (for txt-version) + | @param embedded: Create as embedded chooser + | @param width: Embedded chooser width + | @param height: Embedded chooser height + | @param forbidden_cb: Explicitly forbidden callbacks + | + | adjust_last_item(self, n) + | Helper for OnDeleteLine() and OnRefresh() callbacks. + | They can be finished by the following line: + | return [Choose.ALL_CHANGED] + self.adjust_last_item(n) + | @param: line number of the remaining select item + | @return: list of selected lines numbers (one element or empty) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | ALL_CHANGED = 1 + | + | ALREADY_EXISTS = -3 + | + | CHCOL_DEC = 196608 + | + | CHCOL_EA = 262144 + | + | CHCOL_FNAME = 327680 + | + | CHCOL_FORMAT = 458752 + | + | CHCOL_HEX = 131072 + | + | CHCOL_PATH = 65536 + | + | CHCOL_PLAIN = 0 + | + | CHOOSE_HAVE_DEL = 16 + | + | CHOOSE_HAVE_EDIT = 32 + | + | CHOOSE_HAVE_ENTER = 64 + | + | CHOOSE_HAVE_GETATTR = 4 + | + | CHOOSE_HAVE_GETICON = 2 + | + | CHOOSE_HAVE_INIT = 1 + | + | CHOOSE_HAVE_INS = 8 + | + | CHOOSE_HAVE_ONCLOSE = 512 + | + | CHOOSE_HAVE_REFRESH = 128 + | + | CHOOSE_HAVE_SELECT = 256 + | + | CH_ATTRS = 32 + | + | CH_BUILTIN_MASK = 33030144 + | + | CH_BUILTIN_SHIFT = 19 + | + | CH_CAN_DEL = 512 + | + | CH_CAN_EDIT = 1024 + | + | CH_CAN_INS = 256 + | + | CH_CAN_REFRESH = 2048 + | + | CH_FORCE_DEFAULT = 128 + | + | CH_MODAL = 1 + | + | CH_MULTI = 4 + | + | CH_NOBTNS = 16 + | + | CH_NOIDB = 64 + | + | CH_NO_STATUS_BAR = 65536 + | + | CH_QFLT = 4096 + | + | CH_QFTYP_DEFAULT = 0 + | + | CH_QFTYP_FUZZY = 32768 + | + | CH_QFTYP_MASK = 57344 + | + | CH_QFTYP_NORMAL = 8192 + | + | CH_QFTYP_REGEX = 24576 + | + | CH_QFTYP_SHIFT = 13 + | + | CH_QFTYP_WHOLE_WORDS = 16384 + | + | CH_RESTORE = 131072 + | + | EMPTY_CHOOSER = -2 + | + | NOTHING_CHANGED = 0 + | + | NO_ATTR = -4 + | + | NO_SELECTION = -1 + | + | SELECTION_CHANGED = 2 + | + | UI_Hooks_Trampoline = + +Help on class CustomIDAMemo in module ida_kernwin: + +class CustomIDAMemo(View_Hooks) + | # + | # ----------------------------------------------------------------------- + | # CustomIDAMemo + | # ----------------------------------------------------------------------- + | + | Method resolution order: + | CustomIDAMemo + | View_Hooks + | __builtin__.object + | + | Methods defined here: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | __init__(self) + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | + | view_click(self, view, ve) + | + | view_close(self, view, *args) + | + | view_curpos(self, view, *args) + | + | view_dblclick(self, view, ve) + | + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | + | view_mouse_over(self, view, ve) + | + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | view_created(self, *args) + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from View_Hooks: + | + | __swig_destroy__ = + | delete_View_Hooks(self) + +Help on class Form in module ida_kernwin: + +class Form(__builtin__.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | Add(self, name, ctrl, mkattr=True) + | Low level function. Prefer AddControls() to this function. + | This function adds one control to the form. + | + | @param name: Control name + | @param ctrl: Control object + | @param mkattr: Create control name / control object as a form attribute + | + | AddControls(self, controls, mkattr=True) + | Adds controls from a dictionary. + | The dictionary key is the control name and the value is a Form.Control object + | @param controls: The control dictionary + | + | Close(self, close_normally) + | Close the form + | @param close_normally: + | 1: form is closed normally as if the user pressed Enter + | 0: form is closed abnormally as if the user pressed Esc + | @return: None + | + | Compile(self) + | Compiles a form and returns the form object (self) and the argument list. + | The form object will contain object names corresponding to the form elements + | + | @return: It will raise an exception on failure. Otherwise the return value is ignored + | + | CompileEx(self, form) + | Low level function. + | Compiles (parses the form syntax and adds the control) the form string and + | returns the argument list to be passed the argument list to ask_form(). + | + | The form controls are wrapped inside curly braces: {ControlName}. + | + | A special operator can be used to return the index of a given control by its name: {id:ControlName}. + | This is useful when you use the STARTITEM form keyword to set the initially focused control. + | (note that, technically, the index is not the same as the ID; that's because STARTITEM + | uses raw, 0-based indexes rather than control IDs to determine the focused widget.) + | + | @param form: Compiles the form and returns the arguments needed to be passed to ask_form() + | + | Compiled(self) + | Checks if the form has already been compiled + | + | @return: Boolean + | + | EnableField(self, ctrl, enable) + | Enable or disable an input field + | @return: False - no such control + | + | Execute(self) + | Displays a modal dialog containing the compiled form. + | @return: 1 - ok ; 0 - cancel + | + | FindControlById(self, id) + | Finds a control instance given its id + | + | Free(self) + | Frees all resources associated with a compiled form. + | Make sure you call this function when you finish using the form. + | + | GetControlValue(self, ctrl) + | Returns the control's value depending on its type + | @param ctrl: Form control instance + | @return: + | - color button, radio controls: integer + | - file/dir input, string input and string label: string + | - embedded chooser control (0-based indices of selected items): integer list + | - for multilinetext control: textctrl_info_t + | - dropdown list controls: string (when editable) or index (when readonly) + | - None: on failure + | + | GetFocusedField(self) + | Get currently focused input field. + | @return: None if no field is selected otherwise the control ID + | + | MoveField(self, ctrl, x, y, w, h) + | Move/resize an input field + | + | @return: False - no such fiel + | + | Open(self) + | Opens a widget containing the compiled form. + | + | RefreshField(self, ctrl) + | Refresh a field + | @return: False - no such control + | + | SetControlValue(self, ctrl, value) + | Set the control's value depending on its type + | @param ctrl: Form control instance + | @param value: + | - embedded chooser: a 0-base indices list to select embedded chooser items + | - multilinetext: a textctrl_info_t + | - dropdown list: an integer designating the selection index if readonly + | a string designating the edit control value if not readonly + | @return: Boolean true on success + | + | SetFocusedField(self, ctrl) + | Set currently focused input field + | @return: False - no such control + | + | ShowField(self, ctrl, show) + | Show or hide an input field + | @return: False - no such control + | + | _AddGroup(self, Group, mkattr=True) + | Internal function. + | This function expands the group item names and creates individual group item controls + | + | @param Group: The group class (checkbox or radio group class) + | + | _ChkCompiled(self) + | + | __getitem__(self, name) + | Returns a control object by name + | + | __init__(self, form, controls) + | Contruct a Form class. + | This class wraps around ask_form() or open_form() and provides an easier / alternative syntax for describing forms. + | The form control names are wrapped inside the opening and closing curly braces and the control themselves are + | defined and instantiated via various form controls (subclasses of Form). + | + | @param form: The form string + | @param controls: A dictionary containing the control name as a _key_ and control object as _value_ + | + | _reset(self) + | Resets the Form class state variables + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | ControlToFieldTypeIdAndSize(ctrl) + | Converts a control object to a tuple containing the field id + | and the associated buffer size + | + | _ParseFormTitle(form) + | Parses the form's title from the form text + | + | create_string_buffer(value, size=None) + | + | fieldtype_to_ctype(tp, i64=False) + | Factory method returning a ctype class corresponding to the field type string + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | ButtonInput = + | Button control. + | A handler along with a 'code' (numeric value) can be associated with the button. + | This way one handler can handle many buttons based on the button code (or in other terms id or tag) + | + | ChkGroupControl = + | Checkbox group control class. + | It holds a set of checkbox controls + | + | ChkGroupItemControl = + | Checkbox group item control + | + | ColorInput = + | Color button input control + | + | Control = + | + | + | DirInput = + | Directory browsing control + | + | DropdownListControl = + | Dropdown control + | This control allows manipulating a dropdown control + | + | EmbeddedChooserControl = + | Embedded chooser control. + | This control links to a Chooser2 control created with the 'embedded=True' + | + | FT_ADDR = '$' + | + | FT_ASCII = 'A' + | + | FT_BIN = 'Y' + | + | FT_BUTTON = 'B' + | + | FT_CHAR = 'H' + | + | FT_CHKGRP = 'C' + | + | FT_CHKGRP2 = 'c' + | + | FT_COLOR = 'K' + | + | FT_DEC = 'D' + | + | FT_DIR = 'F' + | + | FT_DROPDOWN_LIST = 'b' + | + | FT_ECHOOSER = 'E' + | + | FT_FILE = 'f' + | + | FT_FORMCHG = '%/' + | + | FT_HEX = 'N' + | + | FT_HTML_LABEL = 'h' + | + | FT_IDENT = 'I' + | + | FT_INT64 = 'l' + | + | FT_MULTI_LINE_TEXT = 't' + | + | FT_OCT = 'O' + | + | FT_RADGRP = 'R' + | + | FT_RADGRP2 = 'r' + | + | FT_RAWHEX = 'M' + | + | FT_SEG = 'S' + | + | FT_SHEX = 'n' + | + | FT_TYPE = 'T' + | + | FT_UINT64 = 'L' + | + | FileInput = + | File Open/Save input control + | + | FormChangeCb = + | Form change handler. + | This can be thought of like a dialog procedure. + | Everytime a form action occurs, this handler will be called along with the control id. + | The programmer can then call various form actions accordingly: + | - EnableField + | - ShowField + | - MoveField + | - GetFieldValue + | - etc... + | + | Special control IDs: -1 (The form is initialized) and -2 (Ok has been clicked) + | + | GroupControl = + | Base class for group controls + | + | GroupItemControl = + | Base class for group control items + | + | InputControl = + | Generic form input control. + | It could be numeric control, string control, directory/file browsing, etc... + | + | LabelControl = + | Base class for static label control + | + | MultiLineTextControl = + | Multi line text control. + | This class inherits from textctrl_info_t. Thus the attributes are also inherited + | This control allows manipulating a multilinetext control + | + | NumericArgument = + | Argument representing various integer arguments (ushort, uint32, uint64, etc...) + | @param tp: One of Form.FT_XXX + | + | NumericInput = + | A composite class serving as a base numeric input control class + | + | NumericLabel = + | Numeric label control + | + | RadGroupControl = + | Radiobox group control class. + | It holds a set of radiobox controls + | + | RadGroupItemControl = + | Radiobox group item control + | + | StringArgument = + | Argument representing a character buffer + | + | StringInput = + | Base string input control class. + | This class also constructs a StringArgument + | + | StringLabel = + | String label control + | + | _FT_USHORT = '_US' + +Help on class IDAViewWrapper in module ida_kernwin: + +class IDAViewWrapper(CustomIDAMemo) + | Deprecated. Use View_Hooks instead. + | + | Because the lifecycle of an IDAView is not trivial to track (e.g., a user + | might close, then re-open the same disassembly view), this wrapper doesn't + | bring anything superior to the View_Hooks: quite the contrary, as the + | latter is much more generic (and better maps IDA's internal model.) + | + | Method resolution order: + | IDAViewWrapper + | CustomIDAMemo + | View_Hooks + | __builtin__.object + | + | Methods defined here: + | + | Bind(self) + | + | Unbind(self) + | + | __init__(self, title) + | + | ---------------------------------------------------------------------- + | Methods inherited from CustomIDAMemo: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | + | view_click(self, view, ve) + | + | view_close(self, view, *args) + | + | view_curpos(self, view, *args) + | + | view_dblclick(self, view, ve) + | + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | + | view_mouse_over(self, view, ve) + | + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods inherited from CustomIDAMemo: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | view_created(self, *args) + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from View_Hooks: + | + | __swig_destroy__ = + | delete_View_Hooks(self) + +Help on class PluginForm in module ida_kernwin: + +class PluginForm(__builtin__.object) + | PluginForm class. + | + | This form can be used to host additional controls. Please check the PyQt example. + | + | Methods defined here: + | + | Close(self, options) + | Closes the form. + | + | @param options: Close options (WCLS_SAVE, WCLS_NO_CONTEXT, ...) + | + | @return: None + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | OnClose(self, form) + | Called when the plugin form is closed + | + | @return: None + | + | OnCreate(self, form) + | This event is called when the plugin form is created. + | The programmer should populate the form when this event is triggered. + | + | @return: None + | + | Show(self, caption, options=0) + | Creates the form if not was not created or brings to front if it was already created + | + | @param caption: The form caption + | @param options: One of PluginForm.WOPN_ constants + | + | __init__(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | 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=) + | 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=) + | 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=) + | 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=) + | 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 + | + | _ensure_widget_deps(ctx) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | VALID_CAPSULE_NAME = '$valid$' + | + | WCLS_CLOSE_LATER = 8 + | + | WCLS_DONT_SAVE_SIZE = 4 + | + | WCLS_NO_CONTEXT = 2 + | + | WCLS_SAVE = 1 + | + | WOPN_CENTERED = 32 + | + | WOPN_CREATE_ONLY = {} + | + | WOPN_DP_BEFORE = 2097152 + | + | WOPN_DP_BOTTOM = 524288 + | + | WOPN_DP_FLOATING = 8388608 + | + | WOPN_DP_INSIDE = 1048576 + | + | WOPN_DP_INSIDE_BEFORE = 3145728 + | + | WOPN_DP_LEFT = 65536 + | + | WOPN_DP_RIGHT = 262144 + | + | WOPN_DP_TAB = 4194304 + | + | WOPN_DP_TAB_BEFORE = 6291456 + | + | WOPN_DP_TOP = 131072 + | + | WOPN_MDI = 1 + | + | WOPN_MENU = 16 + | + | WOPN_ONTOP = 8 + | + | WOPN_PERSIST = 64 + | + | WOPN_RESTORE = 4 + | + | WOPN_TAB = 2 + +Help on function TWidget__from_ptrval__ in module ida_kernwin: + +TWidget__from_ptrval__(*args) + TWidget__from_ptrval__(ptrval) -> TWidget * + +Help on class UI_Hooks in module ida_kernwin: + +class UI_Hooks(__builtin__.object) + | Proxy of C++ UI_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> UI_Hooks + | + | __repr__ = _swig_repr(self) + | + | create_desktop_widget(self, *args) + | create_desktop_widget(self, title, cfg) -> PyObject * + | + | current_widget_changed(self, *args) + | current_widget_changed(self, widget, prev_widget) + | + | database_inited(self, *args) + | database_inited(self, is_new_database, idc_script) + | + | debugger_menu_change(self, *args) + | debugger_menu_change(self, enable) + | + | finish_populating_widget_popup(self, *args) + | finish_populating_widget_popup(self, widget, popup_handle, ctx=None) + | + | + | The UI is about to be done populating the TWidget's popup menu. + | Now is a good time to call idaapi.attach_action_to_popup() + | + | @param widget: The widget + | @param popup: The popup menu. + | @return: Ignored + | + | get_chooser_item_attrs(self, *args) + | get_chooser_item_attrs(self, chooser, n, attrs) + | + | get_custom_viewer_hint(self, *args) + | get_custom_viewer_hint(self, viewer, place) -> PyObject * + | + | get_ea_hint(self, *args) + | get_ea_hint(self, ea) -> PyObject * + | + | + | The UI wants to display a simple hint for an address in the navigation band + | + | @param ea: The address + | @return: String with the hint or None + | + | get_item_hint(self, *args) + | get_item_hint(self, ea, max_lines) -> PyObject * + | + | get_widget_config(self, *args) + | get_widget_config(self, widget, cfg) -> PyObject * + | + | hook(self, *args) + | hook(self) -> bool + | + | + | Creates an UI hook + | + | @return: Boolean true on success + | + | idcstart(self, *args) + | idcstart(self) + | + | idcstop(self, *args) + | idcstop(self) + | + | plugin_loaded(self, *args) + | plugin_loaded(self, plugin_info) + | + | plugin_unloading(self, *args) + | plugin_unloading(self, plugin_info) + | + | populating_widget_popup(self, *args) + | populating_widget_popup(self, widget, popup_handle, ctx=None) + | + | + | The UI is populating the TWidget's popup menu. + | Now is a good time to call idaapi.attach_action_to_popup() + | + | @param widget: The widget + | @param popup: The popup menu. + | @return: Ignored + | + | postprocess_action(self, *args) + | postprocess_action(self) + | + | + | An ida ui action has been handled + | + | @return: Ignored + | + | preprocess_action(self, *args) + | preprocess_action(self, name) + | + | + | IDA ui is about to handle a user action + | + | @param name: ui action name + | (these names can be looked up in ida[tg]ui.cfg) + | @return: 0-ok, nonzero - a plugin has handled the action + | + | range(self, *args) + | range(self) + | + | ready_to_run(self, *args) + | ready_to_run(self) + | + | resume(self, *args) + | resume(self) + | + | saved(self, *args) + | saved(self) + | + | + | The kernel has saved the database. + | + | @return: Ignored + | + | saving(self, *args) + | saving(self) + | + | + | The kernel is saving the database. + | + | @return: Ignored + | + | screen_ea_changed(self, *args) + | screen_ea_changed(self, ea, prev_ea) + | + | set_widget_config(self, *args) + | set_widget_config(self, widget, cfg) + | + | suspend(self, *args) + | suspend(self) + | + | term(self, *args) + | term(self) + | + | + | IDA is terminated and the database is already closed. + | The UI may close its windows in this callback. + | + | unhook(self, *args) + | unhook(self) -> bool + | + | + | Removes the UI hook + | @return: Boolean true on success + | + | updated_actions(self, *args) + | updated_actions(self) + | + | + | The UI is done updating actions. + | + | @return: Ignored + | + | updating_actions(self, *args) + | updating_actions(self, ctx) + | + | + | The UI is about to batch-update some actions. + | + | @param ctx: The action_update_ctx_t instance + | @return: Ignored + | + | widget_closing(self, *args) + | widget_closing(self, widget) + | + | widget_invisible(self, *args) + | widget_invisible(self, widget) + | + | widget_visible(self, *args) + | widget_visible(self, widget) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_UI_Hooks(self) + +Help on class View_Hooks in module ida_kernwin: + +class View_Hooks(__builtin__.object) + | Proxy of C++ View_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> View_Hooks + | + | __repr__ = _swig_repr(self) + | + | hook(self, *args) + | hook(self) -> bool + | + | unhook(self, *args) + | unhook(self) -> bool + | + | view_activated(self, *args) + | view_activated(self, view) + | + | view_click(self, *args) + | view_click(self, view, event) + | + | view_close(self, *args) + | view_close(self, view) + | + | view_created(self, *args) + | view_created(self, view) + | + | view_curpos(self, *args) + | view_curpos(self, view) + | + | view_dblclick(self, *args) + | view_dblclick(self, view, event) + | + | view_deactivated(self, *args) + | view_deactivated(self, view) + | + | view_keydown(self, *args) + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, *args) + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, *args) + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, *args) + | view_mouse_over(self, view, event) + | + | view_switched(self, *args) + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_View_Hooks(self) + +Help on class __qtimer_t in module ida_kernwin: + +class __qtimer_t(__builtin__.object) + | Proxy of C++ __qtimer_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qtimer_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete___qtimer_t(self) + +Help on function _ask_addr in module ida_kernwin: + +_ask_addr(*args) + _ask_addr(addr, format) -> bool + +Help on function _ask_long in module ida_kernwin: + +_ask_long(*args) + _ask_long(value, format) -> bool + +Help on function _ask_seg in module ida_kernwin: + +_ask_seg(*args) + _ask_seg(sel, format) -> bool + +Help on function _call_ask_form in module ida_kernwin: + +_call_ask_form(*args) + +Help on function _call_open_form in module ida_kernwin: + +_call_open_form(*args) + +Help on class action_ctx_base_t in module ida_kernwin: + +class action_ctx_base_t(__builtin__.object) + | Proxy of C++ action_ctx_base_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> action_ctx_base_t + | + | __repr__ = _swig_repr(self) + | + | _get_form(self, *args) + | _get_form(self) -> TWidget * + | + | _get_form_title(self, *args) + | _get_form_title(self) -> qstring + | + | _get_form_type(self, *args) + | _get_form_type(self) -> twidget_type_t + | + | has_flag(self, *args) + | has_flag(self, flag) -> bool + | + | reset(self, *args) + | reset(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | action + | action_ctx_base_t_action_get(self) -> char const * + | + | chooser_selection + | action_ctx_base_t_chooser_selection_get(self) -> sizevec_t * + | + | cur_ea + | action_ctx_base_t_cur_ea_get(self) -> ea_t + | + | cur_enum + | action_ctx_base_t_cur_enum_get(self) -> enum_t + | + | cur_extracted_ea + | action_ctx_base_t_cur_value_get(self) -> uval_t + | + | cur_fchunk + | action_ctx_base_t_cur_fchunk_get(self) -> func_t * + | + | cur_flags + | action_ctx_base_t_cur_flags_get(self) -> uint32 + | + | cur_func + | action_ctx_base_t_cur_func_get(self) -> func_t * + | + | cur_seg + | action_ctx_base_t_cur_seg_get(self) -> segment_t * + | + | cur_strmem + | action_ctx_base_t_cur_strmem_get(self) -> member_t * + | + | cur_struc + | action_ctx_base_t_cur_struc_get(self) -> struc_t * + | + | cur_value + | action_ctx_base_t_cur_value_get(self) -> uval_t + | + | focus + | action_ctx_base_t_focus_get(self) -> TWidget * + | + | form + | _get_form(self) -> TWidget * + | + | form_title + | _get_form_title(self) -> qstring + | + | form_type + | _get_form_type(self) -> twidget_type_t + | + | graph_selection + | action_ctx_base_t_graph_selection_get(self) -> screen_graph_selection_t * + | + | regname + | action_ctx_base_t_regname_get(self) -> char const * + | + | thisown + | The membership flag + | + | widget + | action_ctx_base_t_widget_get(self) -> TWidget * + | + | widget_title + | action_ctx_base_t_widget_title_get(self) -> qstring * + | + | widget_type + | action_ctx_base_t_widget_type_get(self) -> twidget_type_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_action_ctx_base_t(self) + +Help on class action_desc_t in module ida_kernwin: + +class action_desc_t(__builtin__.object) + | Proxy of C++ action_desc_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, name, label, handler, shortcut=None, tooltip=None, icon=-1, flags=0) -> action_desc_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | action_desc_t_cb_get(self) -> int + | + | flags + | action_desc_t_flags_get(self) -> int + | + | icon + | action_desc_t_icon_get(self) -> int + | + | label + | action_desc_t_label_get(self) -> char const * + | + | name + | action_desc_t_name_get(self) -> char const * + | + | owner + | action_desc_t_owner_get(self) -> plugin_t const * + | + | shortcut + | action_desc_t_shortcut_get(self) -> char const * + | + | thisown + | The membership flag + | + | tooltip + | action_desc_t_tooltip_get(self) -> char const * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_action_desc_t(self) + +Help on class action_handler_t in module ida_kernwin: + +class action_handler_t(__builtin__.object) + | # ---------------------------------------------------------------------- + | + | Methods defined here: + | + | __init__(self) + | + | activate(self, ctx) + | + | update(self, ctx) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function activate_widget in module ida_kernwin: + +activate_widget(*args) + activate_widget(widget, take_focus) + + + Activate widget (only gui version) ( 'ui_activate_widget' ). + + @param widget: existing widget to display (C++: TWidget *) + @param take_focus: give focus to given widget (C++: bool) + +Help on function add_hotkey in module ida_kernwin: + +add_hotkey(*args) + add_hotkey(hotkey, pyfunc) -> PyObject * + + + Associates a function call with a hotkey. + Callable pyfunc will be called each time the hotkey is pressed + + @param hotkey: The hotkey + @param pyfunc: Callable + + @return: Context object on success or None on failure. + +Help on function add_idc_hotkey in module ida_kernwin: + +add_idc_hotkey(*args) + add_idc_hotkey(hotkey, idcfunc) -> int + + + Add hotkey for IDC function ( 'ui_add_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + @param idcfunc: IDC function name (C++: const char *) + @return: IDC hotkey error codes + +Help on function add_spaces in module ida_kernwin: + +add_spaces(*args) + add_spaces(s, len) -> PyObject * + + + Add space characters to the colored string so that its length will be + at least 'len' characters. Don't trim the string if it is longer than + 'len'. + + @param len: the desired length of the string (C++: ssize_t) + @return: pointer to the end of input string + +Help on function addon_count in module ida_kernwin: + +addon_count(*args) + addon_count() -> int + + + Get number of installed addons. + +Help on class addon_info_t in module ida_kernwin: + +class addon_info_t(__builtin__.object) + | Proxy of C++ addon_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> addon_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | addon_info_t_cb_get(self) -> size_t + | + | custom_data + | addon_info_t_custom_data_get(self) -> void const * + | + | custom_size + | addon_info_t_custom_size_get(self) -> size_t + | + | freeform + | addon_info_t_freeform_get(self) -> char const * + | + | id + | addon_info_t_id_get(self) -> char const * + | + | name + | addon_info_t_name_get(self) -> char const * + | + | producer + | addon_info_t_producer_get(self) -> char const * + | + | thisown + | The membership flag + | + | url + | addon_info_t_url_get(self) -> char const * + | + | version + | addon_info_t_version_get(self) -> char const * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_addon_info_t(self) + +Help on function analyzer_options in module ida_kernwin: + +analyzer_options(*args) + analyzer_options() + + + Allow the user to set analyzer options. (show a dialog box) ( + 'ui_analyzer_options' ) + +Help on function ask_addr in module ida_kernwin: + +ask_addr(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_buttons in module ida_kernwin: + +ask_buttons(*args) + ask_buttons(Yes, No, Cancel, deflt, format) -> int + + + Display a dialog box and get choice from maximum three possibilities ( + 'ui_ask_buttons' ).for all buttons:use "" or NULL to take the default + name for the button.use 'format' to hide the cancel button + + @param Yes: text for the first button (C++: const char *) + @param No: text for the second button (C++: const char *) + @param Cancel: text for the third button (C++: const char *) + @param deflt: default choice: one of Button IDs (C++: int) + @param format: printf-style format string for question. It may have + some prefixes, see below. (C++: const char *) + @return: one of Button IDs specifying the selected button (Esc key + returns Cancel/3rd button value) + +Help on function ask_file in module ida_kernwin: + +ask_file(*args) + ask_file(for_saving, defval, format) -> char * + +Help on function ask_for_feedback in module ida_kernwin: + +ask_for_feedback(*args) + ask_for_feedback(format) + + + Show a message box asking to send the input file tosupport@hex- + rays.com. + + @param format: the reason why the input file is bad (C++: const char + *) + +Help on function ask_ident in module ida_kernwin: + +ask_ident(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_long in module ida_kernwin: + +ask_long(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_seg in module ida_kernwin: + +ask_seg(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_str in module ida_kernwin: + +ask_str(*args) + ask_str(defval, hist, prompt) -> PyObject * + + + Asks for a long text + + @param hist: history id + @param defval: The default value + @param prompt: The prompt value + @return: None or the entered string + +Help on function ask_text in module ida_kernwin: + +ask_text(*args) + ask_text(max_size, defval, prompt) -> PyObject * + + + Asks for a long text + + @param max_size: Maximum text length, 0 for unlimited + @param defval: The default value + @param prompt: The prompt value + @return: None or the entered string + +Help on function ask_yn in module ida_kernwin: + +ask_yn(*args) + ask_yn(deflt, format) -> int + + + Display a dialog box and get choice from "Yes", "No", "Cancel". + + @param deflt: default choice: one of Button IDs (C++: int) + @param format: The question in printf() style format (C++: const char + *) + @return: the selected button (one of Button IDs ). Esc key returns + ASKBTN_CANCEL . + +Help on function attach_action_to_menu in module ida_kernwin: + +attach_action_to_menu(*args) + attach_action_to_menu(menupath, name, flags) -> bool + + + Attach a previously-registered action to the menu ( + 'ui_attach_action_to_menu' ).You should not change top level menu, or + the Edit,Plugins submenus If you want to modify the debugger menu, do + it at the ui_debugger_menu_change event (ida might destroy your menu + item if you do it elsewhere). + + @param menupath: path to the menu item after or before which the + insertion will take place. Example: + Debug/StartProcess Whitespace, punctuation are + ignored. It is allowed to specify only the prefix + of the menu item. Comparison is case insensitive. + menupath may start with the following prefixes: [S] + - modify the main menu of the structure window [E] + - modify the main menu of the enum window (C++: const + char *) + @param name: the action name (C++: const char *) + @param flags: a combination of Set menu flags , to determine menu + item position (C++: int) + @return: success + +Help on function attach_action_to_popup in module ida_kernwin: + +attach_action_to_popup(*args) + attach_action_to_popup(widget, popup_handle, name, popuppath=None, flags=0) -> bool + + + Insert a previously-registered action into the widget's popup menu ( + 'ui_attach_action_to_popup' ). This function has two "modes": 'single- + shot', and 'permanent'. + + @param widget: target widget (C++: TWidget *) + @param popup_handle: target popup menu if non-NULL, the action is + added to this popup menu invocation (i.e., + 'single-shot') if NULL, the action is added to + a list of actions that should always be present + in context menus for this widget (i.e., + 'permanent'.) (C++: TPopupMenu *) + @param name: action name (C++: const char *) + @param popuppath: can be NULL (C++: const char *) + @param flags: a combination of SETMENU_ flags (see Set menu flags ) + (C++: int) + @return: success + +Help on function attach_action_to_toolbar in module ida_kernwin: + +attach_action_to_toolbar(*args) + attach_action_to_toolbar(toolbar_name, name) -> bool + + + Attach an action to an existing toolbar ( + 'ui_attach_action_to_toolbar' ). + + @param toolbar_name: the name of the toolbar (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on function attach_dynamic_action_to_popup in module ida_kernwin: + +attach_dynamic_action_to_popup(*args) + attach_dynamic_action_to_popup(widget, popup_handle, desc, popuppath=None, flags=0) -> bool + + + Create & insert an action into the widget's popup menu ( + 'ui_attach_dynamic_action_to_popup' ). 'action_desc_t::handler' for + 'desc' must be instantiated using 'new', as it will be 'delete'd when + the action is unregistered. + + @param widget: target widget (C++: TWidget *) + @param popup_handle: target popup (C++: TPopupMenu *) + @param desc: created with DYNACTION_DESC_LITERAL (C++: const + action_desc_t &) + @param popuppath: can be NULL (C++: const char *) + @param flags: a combination of SETMENU_ constants (see Set menu flags + ) (C++: int) + @return: success + +Help on function banner in module ida_kernwin: + +banner(*args) + banner(wait) -> bool + + + Show a banner dialog box ( 'ui_banner' ). + + @param wait: time to wait before closing (C++: int) + +Help on function beep in module ida_kernwin: + +beep(*args) + beep(beep_type=beep_default) + + + Issue a beeping sound ( 'ui_beep' ). + + @param beep_type: beep_t (C++: beep_t) + +Help on function call_nav_colorizer in module ida_kernwin: + +call_nav_colorizer(*args) + call_nav_colorizer(dict, ea, nbytes) -> uint32 + + + To be used with the IDA-provided colorizer, that is + returned as result of the first call to set_nav_colorizer(). + +Help on function cancel_exec_request in module ida_kernwin: + +cancel_exec_request(*args) + cancel_exec_request(req_id) -> bool + + + Try to cancel an asynchronous exec request ( 'ui_cancel_exec_request' + ). + + @param req_id: request id (C++: int) + +Help on function choose_activate in module ida_kernwin: + +choose_activate(*args) + choose_activate(_self) + +Help on function choose_choose in module ida_kernwin: + +choose_choose(*args) + choose_choose(_self) -> PyObject * + +Help on function choose_close in module ida_kernwin: + +choose_close(*args) + choose_close(_self) + +Help on function choose_create_embedded_chobj in module ida_kernwin: + +choose_create_embedded_chobj(*args) + choose_create_embedded_chobj(_self) -> PyObject * + +Help on function choose_entry in module ida_kernwin: + +choose_entry(*args) + choose_entry(title) -> ea_t + + + Choose an entry point ( 'ui_choose' , 'chtype_entry' ). + + @param title: chooser title (C++: const char *) + @return: ea of selected entry point, BADADDR if none selected + +Help on function choose_enum in module ida_kernwin: + +choose_enum(*args) + choose_enum(title, default_id) -> enum_t + + + Choose an enum ( 'ui_choose' , 'chtype_enum' ). + + @param title: chooser title (C++: const char *) + @param default_id: id of enum to select by default (C++: enum_t) + @return: enum id of selected enum, BADNODE if none selected + +Help on function choose_enum_by_value in module ida_kernwin: + +choose_enum_by_value(*args) + choose_enum_by_value(title, default_id, value, nbytes) -> enum_t + + + Choose an enum, restricted by value & size ( 'ui_choose' , + 'chtype_enum_by_value_and_size' ). If the given value cannot be found + initially, this function will ask if the user would like to import a + standard enum. + + @param title: chooser title (C++: const char *) + @param default_id: id of enum to select by default (C++: enum_t) + @param value: value to search for (C++: uval_t) + @param nbytes: size of value (C++: int) + @return: enum id of selected (or imported) enum, BADNODE if none was + found + +Help on function choose_find in module ida_kernwin: + +choose_find(*args) + choose_find(title) -> PyObject * + +Help on function choose_func in module ida_kernwin: + +choose_func(*args) + choose_func(title, default_ea) -> func_t * + + + Choose a function ( 'ui_choose' , 'chtype_func' ). + + @param title: chooser title (C++: const char *) + @param default_ea: ea of function to select by default (C++: ea_t) + @return: pointer to function that was selected, NULL if none selected + +Help on function choose_get_widget in module ida_kernwin: + +choose_get_widget(*args) + choose_get_widget(_self) -> TWidget * + +Help on function choose_idasgn in module ida_kernwin: + +choose_idasgn(*args) + choose_idasgn() -> PyObject * + + + Opens the signature chooser + + @return: None or the selected signature name + +Help on function choose_name in module ida_kernwin: + +choose_name(*args) + choose_name(title) -> ea_t + + + Choose a name ( 'ui_choose' , 'chtype_name' ). + + @param title: chooser title (C++: const char *) + @return: ea of selected name, BADADDR if none selected + +Help on function choose_refresh in module ida_kernwin: + +choose_refresh(*args) + choose_refresh(_self) + +Help on function choose_segm in module ida_kernwin: + +choose_segm(*args) + choose_segm(title, default_ea) -> segment_t * + + + Choose a segment ( 'ui_choose' , 'chtype_segm' ). + + @param title: chooser title (C++: const char *) + @param default_ea: ea of segment to select by default (C++: ea_t) + @return: pointer to segment that was selected, NULL if none selected + +Help on function choose_srcp in module ida_kernwin: + +choose_srcp(*args) + choose_srcp(title) -> sreg_range_t * + + + Choose a segment register change point ( 'ui_choose' , 'chtype_srcp' + ). + + @param title: chooser title (C++: const char *) + @return: pointer to segment register range of selected change point, + NULL if none selected + +Help on function choose_stkvar_xref in module ida_kernwin: + +choose_stkvar_xref(*args) + choose_stkvar_xref(pfn, mptr) -> ea_t + + + Choose an xref to a stack variable ( 'ui_choose' , 'chtype_name' ). + + @param pfn: function (C++: func_t *) + @param mptr: variable (C++: member_t *) + @return: ea of the selected xref, BADADDR if none selected + +Help on function choose_struc in module ida_kernwin: + +choose_struc(*args) + choose_struc(title) -> struc_t * + + + Choose a structure ( 'ui_choose' , 'chtype_segm' ). + + @param title: chooser title; (C++: const char *) + @return: pointer to structure that was selected, NULL if none selected + +Help on function choose_til in module ida_kernwin: + +choose_til(*args) + choose_til() -> str + + + Choose a type library ( 'ui_choose' , 'chtype_idatil' ). + +Help on function choose_xref in module ida_kernwin: + +choose_xref(*args) + choose_xref(to) -> ea_t + + + Choose an xref to an address ( 'ui_choose' , 'chtype_xref' ). + + @param to: referenced address (C++: ea_t) + @return: ea of selected xref, BADADDR if none selected + +Help on class chooser_item_attrs_t in module ida_kernwin: + +class chooser_item_attrs_t(__builtin__.object) + | Proxy of C++ chooser_item_attrs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> chooser_item_attrs_t + | + | __repr__ = _swig_repr(self) + | + | reset(self, *args) + | reset(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | color + | chooser_item_attrs_t_color_get(self) -> bgcolor_t + | + | flags + | chooser_item_attrs_t_flags_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_chooser_item_attrs_t(self) + +Help on function clear_refresh_request in module ida_kernwin: + +clear_refresh_request(*args) + clear_refresh_request(mask) + +Help on class cli_t in module ida_kernwin: + +class cli_t(ida_idaapi.pyidc_opaque_object_t) + | cli_t wrapper class. + | + | This class allows you to implement your own command line interface handlers. + | + | Method resolution order: + | cli_t + | ida_idaapi.pyidc_opaque_object_t + | __builtin__.object + | + | Methods defined here: + | + | __del__(self) + | + | __init__(self) + | + | register(self, flags=0, sname=None, lname=None, hint=None) + | Registers the CLI. + | + | @param flags: Feature bits. No bits are defined yet, must be 0 + | @param sname: Short name (displayed on the button) + | @param lname: Long name (displayed in the menu) + | @param hint: Hint for the input line + | + | @return Boolean: True-Success, False-Failed + | + | unregister(self) + | Unregisters the CLI (if it was registered) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function close_chooser in module ida_kernwin: + +close_chooser(*args) + close_chooser(title) -> bool + + + Close a non-modal chooser ( 'ui_close_chooser' ). + + @param title: window title of chooser to close (C++: const char *) + @return: success + +Help on function close_widget in module ida_kernwin: + +close_widget(*args) + close_widget(widget, options) + + + Close widget ( 'ui_close_widget' , only gui version). + + @param widget: pointer to the widget to close (C++: TWidget *) + @param options: Form close flags (C++: int) + +Help on function clr_cancelled in module ida_kernwin: + +clr_cancelled(*args) + clr_cancelled() + + + Clear "Cancelled" flag ( 'ui_clr_cancelled' ) + +Help on function create_code_viewer in module ida_kernwin: + +create_code_viewer(*args) + create_code_viewer(custview, flags=0, parent=None) -> TWidget * + + + Create a code viewer ( 'ui_create_code_viewer' ). A code viewer + contains on the left side a widget representing the line numbers, and + on the right side, the child widget passed as parameter. It will + inherit its title from the child widget. + + @param custview: the custom view to be added (C++: TWidget *) + @param flags: Code viewer flags (C++: int) + @param parent: widget to contain the new code viewer (C++: TWidget *) + +Help on function create_empty_widget in module ida_kernwin: + +create_empty_widget(*args) + create_empty_widget(title, icon=-1) -> TWidget * + + + Create an empty widget, serving as a container for custom user widgets + + @param title (C++: const char *) + @param icon (C++: int) + +Help on function create_menu in module ida_kernwin: + +create_menu(*args) + create_menu(name, label, menupath=None) -> bool + + + Create a menu with the given name, label and optional position, either + in the menubar, or as a submenu. If 'menupath' is non-NULL, it + provides information about where the menu should be positioned. First, + IDA will try and resolve the corresponding menu by its name. If such + an existing menu is found and is present in the menubar, then the new + menu will be inserted in the menubar before it. Otherwise, IDA will + try to resolve 'menupath' as it would for 'attach_action_to_menu()' + and, if found, add the new menu like so: + + // The new 'My menu' submenu will appear in the 'Comments' submenu + // before the 'Enter comment..." command + create_menu("(...)", "My menu", "Edit/Comments/Enter comment..."); + + or + + // The new 'My menu' submenu will appear at the end of the + // 'Comments' submenu. + create_menu("(...)", "My menu", "Edit/Comments/"); + + If the above fails, the new menu will be appended to the menubar. + + @param name: name of menu (must be unique) (C++: const char *) + @param label: label of menu (C++: const char *) + @param menupath: where should the menu be inserted (C++: const char *) + @return: success + +Help on function create_toolbar in module ida_kernwin: + +create_toolbar(*args) + create_toolbar(name, label, before=None, flags=0) -> bool + + + Create a toolbar with the given name, label and optional position + + @param name: name of toolbar (must be unique) (C++: const char *) + @param label: label of toolbar (C++: const char *) + @param before: if non-NULL, the toolbar before which the new toolbar + will be inserted (C++: const char *) + @param flags: a combination of create toolbar flags , to determine + toolbar position (C++: int) + @return: success + +Help on function custom_viewer_jump in module ida_kernwin: + +custom_viewer_jump(*args) + custom_viewer_jump(v, loc, flags=0) -> bool + + + Append 'loc' to the viewer's history, and cause the viewer to display + it. + + @param v: (TWidget *) (C++: TWidget *) + @param loc: (const lochist_entry_t &) (C++: const lochist_entry_t + &) + @param flags: (uint32) or'ed combination of CVNF_* values (C++: + uint32) + @return: success + +Help on function del_hotkey in module ida_kernwin: + +del_hotkey(*args) + del_hotkey(pyctx) -> bool + + + Deletes a previously registered function hotkey + + @param ctx: Hotkey context previously returned by add_hotkey() + + @return: Boolean. + +Help on function del_idc_hotkey in module ida_kernwin: + +del_idc_hotkey(*args) + del_idc_hotkey(hotkey) -> bool + + + Delete IDC function hotkey ( 'ui_del_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + +Help on function delete_menu in module ida_kernwin: + +delete_menu(*args) + delete_menu(name) -> bool + + + Delete an existing menu + + @param name: name of menu (C++: const char *) + @return: success + +Help on function delete_toolbar in module ida_kernwin: + +delete_toolbar(*args) + delete_toolbar(name) -> bool + + + Delete an existing toolbar + + @param name: name of toolbar (C++: const char *) + @return: success + +Help on function detach_action_from_menu in module ida_kernwin: + +detach_action_from_menu(*args) + detach_action_from_menu(menupath, name) -> bool + + + Detach an action from the menu ( 'ui_detach_action_from_menu' ). + + @param menupath: path to the menu item (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on function detach_action_from_popup in module ida_kernwin: + +detach_action_from_popup(*args) + detach_action_from_popup(widget, name) -> bool + + + Remove a previously-registered action, from the list of 'permanent' + context menu actions for this widget ( 'ui_detach_action_from_popup' + ). This only makes sense if the action has been added to 'widget's + list of permanent popup actions by calling attach_action_to_popup in + 'permanent' mode. + + @param widget: target widget (C++: TWidget *) + @param name: action name (C++: const char *) + +Help on function detach_action_from_toolbar in module ida_kernwin: + +detach_action_from_toolbar(*args) + detach_action_from_toolbar(toolbar_name, name) -> bool + + + Detach an action from the toolbar ( 'ui_detach_action_from_toolbar' ). + + @param toolbar_name: the name of the toolbar (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on class disasm_line_t in module ida_kernwin: + +class disasm_line_t(__builtin__.object) + | Proxy of C++ disasm_line_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> disasm_line_t + | __init__(self, other) -> disasm_line_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | at + | disasm_line_t_at_get(self) -> place_t + | + | bg_color + | disasm_line_t_bg_color_get(self) -> bgcolor_t + | + | is_default + | disasm_line_t_is_default_get(self) -> bool + | + | line + | disasm_line_t_line_get(self) -> qstring * + | + | prefix_color + | disasm_line_t_prefix_color_get(self) -> color_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_disasm_line_t(self) + +Help on class disasm_text_t in module ida_kernwin: + +class disasm_text_t(__builtin__.object) + | Proxy of C++ qvector< disasm_line_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> disasm_line_t + | + | __init__(self, *args) + | __init__(self) -> disasm_text_t + | __init__(self, x) -> disasm_text_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> disasm_line_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> disasm_line_t + | begin(self) -> disasm_line_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> disasm_line_t + | end(self) -> disasm_line_t + | + | erase(self, *args) + | erase(self, it) -> disasm_line_t + | erase(self, first, last) -> disasm_line_t + | + | extract(self, *args) + | extract(self) -> disasm_line_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=disasm_line_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> disasm_line_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> disasm_line_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_disasm_text_t(self) + +Help on function display_copyright_warning in module ida_kernwin: + +display_copyright_warning(*args) + display_copyright_warning() -> bool + + + Display copyright warning ( 'ui_copywarn' ). + + @return: yes/no + +Help on function display_widget in module ida_kernwin: + +display_widget(*args) + display_widget(widget, options, dest_ctrl=None) + + + Display a widget, dock it if not done before + + @param widget: widget to display (C++: TWidget *) + @param options: Widget open flags (C++: uint32) + @param dest_ctrl: where to dock: if NULL or invalid then use the + active docker if there is not create a new tab + relative to current active tab (C++: const char *) + +Help on function ea2str in module ida_kernwin: + +ea2str(*args) + ea2str(ea) -> str + + + Convert linear address to UTF-8 string. + + + @param ea (C++: ea_t) + +Help on function ea_viewer_history_push_and_jump in module ida_kernwin: + +ea_viewer_history_push_and_jump(*args) + ea_viewer_history_push_and_jump(v, ea, x, y, lnnum) -> bool + + + Push current location in the history and jump to the given location ( + 'ui_ea_viewer_history_push_and_jump' ). This will jump in the given ea + viewer and also in other synchronized views. + + @param v: ea viewer (C++: TWidget *) + @param ea: jump destination (C++: ea_t) + @param x: coords on screen (C++: int) + @param y: coords on screen (C++: int) + @param lnnum: desired line number of given address (C++: int) + +Help on function enable_chooser_item_attrs in module ida_kernwin: + +enable_chooser_item_attrs(*args) + enable_chooser_item_attrs(chooser_caption, enable) -> bool + + + Enable item-specific attributes for chooser items ( + 'ui_enable_chooser_item_attrs' ). For example: color list items + differently depending on a criterium.If enabled, the chooser will + generate ui_get_chooser_item_attrsevents that can be intercepted by a + plugin to modify the item attributes.This event is generated only in + the GUI version of IDA.Specifying 'CH_ATTRS' bit at the chooser + creation time has the same effect. + + @param chooser_caption (C++: const char *) + @param enable (C++: bool) + @return: success + +Help on class enumplace_t in module ida_kernwin: + +class enumplace_t(place_t) + | Proxy of C++ enumplace_t class. + | + | Method resolution order: + | enumplace_t + | place_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bmask + | enumplace_t_bmask_get(self) -> bmask_t + | + | idx + | enumplace_t_idx_get(self) -> size_t + | + | serial + | enumplace_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | value + | enumplace_t_value_get(self) -> uval_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enumplace_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) + | _print(self, out_buf, ud) + | + | adjust(self, *args) + | adjust(self, ud) + | + | beginning(self, *args) + | beginning(self, ud) -> bool + | + | clone(self, *args) + | clone(self) -> place_t + | + | compare(self, *args) + | compare(self, t2) -> int + | + | copyfrom(self, *args) + | copyfrom(self, _from) + | + | deserialize(self, *args) + | deserialize(self, _in) -> bool + | + | ending(self, *args) + | ending(self, ud) -> bool + | + | enter(self, *args) + | enter(self, arg2) -> place_t + | + | generate(self, *args) + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) + | id(self) -> int + | + | leave(self, *args) + | leave(self, arg2) + | + | makeplace(self, *args) + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) + | name(self) -> char const * + | + | next(self, *args) + | next(self, ud) -> bool + | + | prev(self, *args) + | prev(self, ud) -> bool + | + | rebase(self, *args) + | rebase(self, arg2) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | toea(self, *args) + | toea(self) -> ea_t + | + | touval(self, *args) + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on function error in module ida_kernwin: + +error(*args) + error(format) + + + Display a fatal message in a message box and quit IDA + + @param format: message to print + +Help on function execute_sync in module ida_kernwin: + +execute_sync(*args) + execute_sync(py_callable, reqf) -> int + + + Executes a function in the context of the main thread. + If the current thread not the main thread, then the call is queued and + executed afterwards. + + @param callable: A python callable object, must return an integer value + @param reqf: one of MFF_ flags + @return: -1 or the return value of the callable + +Help on function execute_ui_requests in module ida_kernwin: + +execute_ui_requests(*args) + execute_ui_requests(py_list) -> bool + + + Inserts a list of callables into the UI message processing queue. + When the UI is ready it will call one callable. + A callable can request to be called more than once if it returns True. + + @param callable_list: A list of python callable objects. + @note: A callable should return True if it wants to be called more than once. + @return: Boolean. False if the list contains a non callabale item + +Help on function find_widget in module ida_kernwin: + +find_widget(*args) + find_widget(caption) -> TWidget * + + + Find widget with the specified caption (only gui version) ( + 'ui_find_widget' ). NB: this callback works only with the tabbed + widgets! + + @param caption: title of tab, or window title if widget is not tabbed + (C++: const char *) + @return: pointer to the TWidget, NULL if none is found + +Help on function formchgcbfa_close in module ida_kernwin: + +formchgcbfa_close(*args) + formchgcbfa_close(p_fa, close_normally) + +Help on function formchgcbfa_enable_field in module ida_kernwin: + +formchgcbfa_enable_field(*args) + formchgcbfa_enable_field(p_fa, fid, enable) -> bool + +Help on function formchgcbfa_get_field_value in module ida_kernwin: + +formchgcbfa_get_field_value(*args) + formchgcbfa_get_field_value(p_fa, fid, ft, sz) -> PyObject * + +Help on function formchgcbfa_get_focused_field in module ida_kernwin: + +formchgcbfa_get_focused_field(*args) + formchgcbfa_get_focused_field(p_fa) -> int + +Help on function formchgcbfa_move_field in module ida_kernwin: + +formchgcbfa_move_field(*args) + formchgcbfa_move_field(p_fa, fid, x, y, w, h) -> bool + +Help on function formchgcbfa_refresh_field in module ida_kernwin: + +formchgcbfa_refresh_field(*args) + formchgcbfa_refresh_field(p_fa, fid) + +Help on function formchgcbfa_set_field_value in module ida_kernwin: + +formchgcbfa_set_field_value(*args) + formchgcbfa_set_field_value(p_fa, fid, ft, py_val) -> bool + +Help on function formchgcbfa_set_focused_field in module ida_kernwin: + +formchgcbfa_set_focused_field(*args) + formchgcbfa_set_focused_field(p_fa, fid) -> bool + +Help on function formchgcbfa_show_field in module ida_kernwin: + +formchgcbfa_show_field(*args) + formchgcbfa_show_field(p_fa, fid, show) -> bool + +Help on function free_custom_icon in module ida_kernwin: + +free_custom_icon(*args) + free_custom_icon(icon_id) + + + Frees an icon loaded with load_custom_icon() + +Help on function gen_disasm_text in module ida_kernwin: + +gen_disasm_text(*args) + gen_disasm_text(text, ea1, ea2, truncate_lines) + + + Generate disassembly text for a range. + + @param text: result (C++: text_t &) + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @param truncate_lines: (on idainfo::margin ) (C++: bool) + +Help on function get_action_checkable in module ida_kernwin: + +get_action_checkable(*args) + get_action_checkable(name) -> bool + + + Get an action's checkability ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_checked in module ida_kernwin: + +get_action_checked(*args) + get_action_checked(name) -> bool + + + Get an action's checked state ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_icon in module ida_kernwin: + +get_action_icon(*args) + get_action_icon(name) -> bool + + + Get an action's icon ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_label in module ida_kernwin: + +get_action_label(*args) + get_action_label(name) -> str + + + Get an action's label ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_shortcut in module ida_kernwin: + +get_action_shortcut(*args) + get_action_shortcut(name) -> str + + + Get an action's shortcut ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_state in module ida_kernwin: + +get_action_state(*args) + get_action_state(name) -> bool + + + Get an action's state ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_tooltip in module ida_kernwin: + +get_action_tooltip(*args) + get_action_tooltip(name) -> str + + + Get an action's tooltip ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_visibility in module ida_kernwin: + +get_action_visibility(*args) + get_action_visibility(name) -> bool + + + Get an action's visibility ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_active_modal_widget in module ida_kernwin: + +get_active_modal_widget(*args) + get_active_modal_widget() -> TWidget * + + + Get the current, active modal TWidget instance. Note that in this + context, the "wait dialog" is not considered: this function will + return NULL even if it is currently shown. + + @return: TWidget * the active modal widget, or NULL + +Help on function get_addon_info in module ida_kernwin: + +get_addon_info(*args) + get_addon_info(id, info) -> bool + + + Get info about a registered addon with a given product code. info->cb + must be valid! NB: all pointers are invalidated by next call to + register_addon or get_addon_info + + @param id (C++: const char *) + @param info (C++: addon_info_t *) + @return: false if not found + +Help on function get_addon_info_idx in module ida_kernwin: + +get_addon_info_idx(*args) + get_addon_info_idx(index, info) -> bool + + + Get info about a registered addon with specific index. info->cb must + be valid! NB: all pointers are invalidated by next call to + register_addon or get_addon_info + + @param index (C++: int) + @param info (C++: addon_info_t *) + @return: false if index is out of range + +Help on function get_chooser_data in module ida_kernwin: + +get_chooser_data(*args) + get_chooser_data(chooser_caption, n) -> PyObject * + + + Get the text corresponding to the index N in the chooser data. Use -1 + to get the header. + + @param chooser_caption (C++: const char *) + @param n (C++: int) + +Help on function get_chooser_obj in module ida_kernwin: + +get_chooser_obj(*args) + get_chooser_obj(chooser_caption) -> void * + + + Get the underlying object of the specified chooser ( + 'ui_get_chooser_obj' ).This is object is chooser-specific. + + @param chooser_caption (C++: const char *) + @return: the object that was used to create the chooser + +Help on function get_curline in module ida_kernwin: + +get_curline(*args) + get_curline() -> char const * + + + Get current line from the disassemble window ( 'ui_get_curline' ). + + @return: cptr current line with the color codes (use tag_remove() to + remove the color codes) + +Help on function get_current_viewer in module ida_kernwin: + +get_current_viewer(*args) + get_current_viewer() -> TWidget * + + + Get current ida viewer (idaview or custom viewer) ( + 'ui_get_current_viewer' ) + +Help on function get_current_widget in module ida_kernwin: + +get_current_widget(*args) + get_current_widget() -> TWidget * + + + Get a pointer to the current widget ( 'ui_get_current_widget' ). + +Help on function get_cursor in module ida_kernwin: + +get_cursor(*args) + get_cursor() -> bool + + + Get the cursor position on the screen ( 'ui_get_cursor' ).coordinates + are 0-based + +Help on function get_custom_viewer_curline in module ida_kernwin: + +get_custom_viewer_curline(*args) + get_custom_viewer_curline(custom_viewer, mouse) -> char const * + + + Get current line of custom viewer ( 'ui_get_custom_viewer_curline' ). + The returned line contains color codes + + @param custom_viewer: view (C++: TWidget *) + @param mouse: mouse position (otherwise cursor position) (C++: bool) + @return: pointer to contents of current line + +Help on function get_custom_viewer_location in module ida_kernwin: + +get_custom_viewer_location(*args) + get_custom_viewer_location(out, custom_viewer, mouse=False) -> bool + + + Get the current location in a custom viewer ( + 'ui_get_custom_viewer_location' ). + + + @param out (C++: lochist_entry_t *) + @param custom_viewer (C++: TWidget *) + @param mouse (C++: bool) + +Help on function get_custom_viewer_place in module ida_kernwin: + +get_custom_viewer_place(*args) + get_custom_viewer_place(custom_viewer, mouse) -> place_t + + + Get current place in a custom viewer ( 'ui_get_curplace' ).See also + the more complete 'get_custom_viewer_location()' + + @param custom_viewer: view (C++: TWidget *) + @param mouse: mouse position (otherwise cursor position) (C++: bool) + +Help on function get_ea_viewer_history_info in module ida_kernwin: + +get_ea_viewer_history_info(*args) + get_ea_viewer_history_info(nback, nfwd, v) -> bool + + + Get information about what's in the history ( + 'ui_ea_viewer_history_info' ). + + @param nback: number of available back steps (C++: int *) + @param nfwd: number of available forward steps (C++: int *) + @param v: ea viewer (C++: TWidget *) + +Help on function get_hexdump_ea in module ida_kernwin: + +get_hexdump_ea(*args) + get_hexdump_ea(hexdump_num) -> ea_t + + + Get the current address in a hex view. + + @param hexdump_num: number of hexview window (C++: int) + +Help on function get_highlight in module ida_kernwin: + +get_highlight(*args) + get_highlight(v) -> PyObject * + + + Returns the currently highlighted identifier and flags + + @return: a tuple (text, flags), or None if nothing + is highlighted or in case of error. + +Help on function get_kernel_version in module ida_kernwin: + +get_kernel_version(*args) + get_kernel_version() -> str + + + Get IDA kernel version (in a string like "5.1"). + +Help on function get_key_code in module ida_kernwin: + +get_key_code(*args) + get_key_code(keyname) -> ushort + + + Get keyboard key code by its name ( 'ui_get_key_code' ) + + + @param keyname (C++: const char *) + +Help on function get_navband_ea in module ida_kernwin: + +get_navband_ea(*args) + get_navband_ea(pixel) -> ea_t + + + Translate the pixel position on the navigation band, into an address. + + + @param pixel (C++: int) + +Help on function get_navband_pixel in module ida_kernwin: + +get_navband_pixel(*args) + get_navband_pixel(ea) -> int + + + Maps an address, onto a pixel coordinate within the navband + + @param ea: The address to map + @return: a list [pixel, is_vertical] + +Help on function get_opnum in module ida_kernwin: + +get_opnum(*args) + get_opnum() -> int + + + Get current operand number, -1 means no operand ( 'ui_get_opnum' ) + +Help on function get_output_curline in module ida_kernwin: + +get_output_curline(*args) + get_output_curline(mouse) -> str + + + Get current line of output window ( 'ui_get_output_curline' ). + + @param mouse: current for mouse pointer? (C++: bool) + @return: false if output contains no text + +Help on function get_output_cursor in module ida_kernwin: + +get_output_cursor(*args) + get_output_cursor() -> bool + + + Get coordinates of the output window's cursor ( 'ui_get_output_cursor' + ).coordinates are 0-basedthis function will succeed even if the output + window is not visible + +Help on function get_output_selected_text in module ida_kernwin: + +get_output_selected_text(*args) + get_output_selected_text() -> str + + + Returns selected text from output window ( + 'ui_get_output_selected_text' ). + + @return: true if there is a selection + +Help on function get_place_class in module ida_kernwin: + +get_place_class(*args) + get_place_class(out_flags, out_sdk_version, id) -> place_t + + + Get information about a previously-registered 'place_t' class. See + also 'register_place_class()' . + + @param out_flags: output flags (can be NULL) (C++: int *) + @param out_sdk_version: sdk version the place was created with (can be + NULL) (C++: int *) + @param id: place class ID (C++: int) + @return: the place_t template, or NULL if not found + +Help on function get_place_class_id in module ida_kernwin: + +get_place_class_id(*args) + get_place_class_id(name) -> int + + + Get the place class ID for the place that has been registered as + 'name'. + + @param name: the class name (C++: const char *) + @return: the place class ID, or -1 if not found + +Help on function get_place_class_template in module ida_kernwin: + +get_place_class_template(*args) + get_place_class_template(id) -> place_t + + + See 'get_place_class()' + + + @param id (C++: int) + +Help on function get_registered_actions in module ida_kernwin: + +get_registered_actions(*args) + get_registered_actions() -> PyObject * + + + Get a list of all currently-registered actions + +Help on function get_screen_ea in module ida_kernwin: + +get_screen_ea(*args) + get_screen_ea() -> ea_t + + + Get the address at the screen cursor ( 'ui_screenea' ) + +Help on function get_tab_size in module ida_kernwin: + +get_tab_size(*args) + get_tab_size(path) -> int + + + Get the size of a tab in spaces ( 'ui_get_tab_size' ). + + @param path: the path of the source view for which the tab size is + requested. if NULL, the default size is returned. (C++: + const char *) + +Help on function get_user_strlist_options in module ida_kernwin: + +get_user_strlist_options(*args) + get_user_strlist_options(out) + +Help on function get_view_renderer_type in module ida_kernwin: + +get_view_renderer_type(*args) + get_view_renderer_type(v) -> tcc_renderer_type_t + + + Get the type of renderer currently in use in the given view ( + 'ui_get_renderer_type' ) + + + @param v (C++: TWidget *) + +Help on function get_viewer_place_type in module ida_kernwin: + +get_viewer_place_type(*args) + get_viewer_place_type(viewer) -> tcc_place_type_t + + + Get the type of 'place_t' instances a viewer uses & creates ( + 'ui_get_viewer_place_type' ). + + + @param viewer (C++: TWidget *) + +Help on function get_viewer_user_data in module ida_kernwin: + +get_viewer_user_data(*args) + get_viewer_user_data(viewer) -> void * + + + Get the user data from a custom viewer ( 'ui_get_viewer_user_data' ) + + + @param viewer (C++: TWidget *) + +Help on function get_widget_title in module ida_kernwin: + +get_widget_title(*args) + get_widget_title(widget) -> str + + + Get the TWidget's title ( 'ui_get_widget_title' ). + + + @param widget (C++: TWidget *) + +Help on function get_widget_type in module ida_kernwin: + +get_widget_type(*args) + get_widget_type(widget) -> twidget_type_t + + + Get the type of the TWidget * ( 'ui_get_widget_type' ). + + + @param widget (C++: TWidget *) + +Help on function get_window_id in module ida_kernwin: + +get_window_id(*args) + get_window_id(name=None) -> void * + + + Get the system-specific window ID (GUI version only) + + @param name (C++: const char *) + @return: the low-level window ID + +Help on function hide_wait_box in module ida_kernwin: + +hide_wait_box(*args) + hide_wait_box() + + + Hide the "Please wait dialog box". + +Help on class idaplace_t in module ida_kernwin: + +class idaplace_t(place_t) + | Proxy of C++ idaplace_t class. + | + | Method resolution order: + | idaplace_t + | place_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ea + | idaplace_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idaplace_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) + | _print(self, out_buf, ud) + | + | adjust(self, *args) + | adjust(self, ud) + | + | beginning(self, *args) + | beginning(self, ud) -> bool + | + | clone(self, *args) + | clone(self) -> place_t + | + | compare(self, *args) + | compare(self, t2) -> int + | + | copyfrom(self, *args) + | copyfrom(self, _from) + | + | deserialize(self, *args) + | deserialize(self, _in) -> bool + | + | ending(self, *args) + | ending(self, ud) -> bool + | + | enter(self, *args) + | enter(self, arg2) -> place_t + | + | generate(self, *args) + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) + | id(self) -> int + | + | leave(self, *args) + | leave(self, arg2) + | + | makeplace(self, *args) + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) + | name(self) -> char const * + | + | next(self, *args) + | next(self, ud) -> bool + | + | prev(self, *args) + | prev(self, ud) -> bool + | + | rebase(self, *args) + | rebase(self, arg2) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | toea(self, *args) + | toea(self) -> ea_t + | + | touval(self, *args) + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on function info in module ida_kernwin: + +info(*args) + info(format) + +Help on function install_command_interpreter in module ida_kernwin: + +install_command_interpreter(*args) + install_command_interpreter(py_obj) -> int + + + Install command line interpreter ( 'ui_install_cli' ) + +Help on function internal_register_place_class in module ida_kernwin: + +internal_register_place_class(*args) + internal_register_place_class(tmplate, flags, owner, sdk_version) -> int + +Help on function is_action_enabled in module ida_kernwin: + +is_action_enabled(*args) + is_action_enabled(s) -> bool + + + Check if the given action state is one of AST_ENABLE*. + + + @param s (C++: action_state_t) + +Help on function is_chooser_widget in module ida_kernwin: + +is_chooser_widget(*args) + is_chooser_widget(t) -> bool + + + Does the given widget type specify a chooser widget? + + + @param t (C++: twidget_type_t) + +Help on function is_idaq in module ida_kernwin: + +is_idaq(*args) + is_idaq() -> bool + + + Returns True or False depending if IDAPython is hosted by IDAQ + +Help on function is_msg_inited in module ida_kernwin: + +is_msg_inited(*args) + is_msg_inited() -> bool + + + Can we use msg() functions? + +Help on function is_place_class_ea_capable in module ida_kernwin: + +is_place_class_ea_capable(*args) + is_place_class_ea_capable(id) -> bool + + + See 'get_place_class()' + + + @param id (C++: int) + +Help on function is_refresh_requested in module ida_kernwin: + +is_refresh_requested(*args) + is_refresh_requested(mask) -> bool + + + Get a refresh request state + + @param mask: Window refresh flags (C++: uint64) + @return: the state (set or cleared) + +Help on class jobj_wrapper_t in module ida_kernwin: + +class jobj_wrapper_t(__builtin__.object) + | Proxy of C++ jobj_wrapper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | get_dict(self, *args) + | get_dict(self) -> PyObject * + | + | ---------------------------------------------------------------------- + | 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 + +Help on function jumpto in module ida_kernwin: + +jumpto(*args) + jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool + jumpto(custom_viewer, place, x, y) -> bool + + + Jump to the specified address ( 'ui_jumpto' ). + + @param ea: destination (C++: ea_t) + @param opnum: -1: don't change x coord (C++: int) + @param uijmp_flags: Jump flags (C++: int) + @return: success + +Help on function load_custom_icon in module ida_kernwin: + +load_custom_icon(file_name=None, data=None, format=None) + Loads a custom icon and returns an identifier that can be used with other APIs + + If file_name is passed then the other two arguments are ignored. + + @param file_name: The icon file name + @param data: The icon data + @param format: The icon data format + + @return: Icon id or 0 on failure. + Use free_custom_icon() to free it + + + Load an icon from a file ( 'ui_load_custom_icon_file' ). Also see + 'load_custom_icon(const void *, unsigned int, const char *)' + + @return: icon id + +Help on function load_dbg_dbginfo in module ida_kernwin: + +load_dbg_dbginfo(*args) + load_dbg_dbginfo(path, li=None, base=BADADDR, verbose=False) -> bool + + + Load debugging information from a file. + + @param path: path to file (C++: const char *) + @param li: loader input. if NULL, check DBG_NAME_KEY (C++: linput_t *) + @param base: loading address (C++: ea_t) + @param verbose: dump status to message window (C++: bool) + +Help on function lookup_key_code in module ida_kernwin: + +lookup_key_code(*args) + lookup_key_code(key, shift, is_qt) -> ushort + + + Get shortcut code previously created by 'ui_get_key_code' . + + @param key: key constant (C++: int) + @param shift: modifiers (C++: int) + @param is_qt: are we using gui version? (C++: bool) + +Help on function msg in module ida_kernwin: + +msg(*args) + msg(o) -> PyObject * + + + Display an UTF-8 string in the message window + + The result of the stringification of the arguments + will be treated as an UTF-8 string. + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + +Help on function msg_clear in module ida_kernwin: + +msg_clear(*args) + msg_clear() + + + Clear the "Output window". + +Help on function msg_get_lines in module ida_kernwin: + +msg_get_lines(*args) + msg_get_lines(count=-1) -> PyObject * + + + Retrieve the last 'count' lines from the output window, in reverse + order (from most recent, to least recent) + + @param count: The number of lines to retrieve. -1 means: all (C++: + int) + +Help on function msg_save in module ida_kernwin: + +msg_save(*args) + msg_save(path) -> bool + + + Save the "Output window" contents into a file + + @param path: The path of the file to save the contents into. An empty + path means that the user will be prompted for the + destination and, if the file already exists, the user + will be asked to confirm before overriding its contents. + Upon return, 'path' will contain the path that the user + chose. (C++: qstring &) + @return: success + +Help on function nomem in module ida_kernwin: + +nomem(*args) + nomem(format) + +Help on function open_bpts_window in module ida_kernwin: + +open_bpts_window(*args) + open_bpts_window(ea) -> TWidget * + + + Open the breakpoints window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_calls_window in module ida_kernwin: + +open_calls_window(*args) + open_calls_window(ea) -> TWidget * + + + Open the function calls window ( 'ui_open_builtin' ). + + @param ea (C++: ea_t) + @return: pointer to resulting window + +Help on function open_disasm_window in module ida_kernwin: + +open_disasm_window(*args) + open_disasm_window(window_title, ranges=None) -> TWidget * + + + Open a disassembly view ( 'ui_open_builtin' ). + + @param window_title: title of view to open (C++: const char *) + @param ranges: if != NULL, then display a flow chart with the + specified ranges (C++: const rangevec_t *) + @return: pointer to resulting window + +Help on function open_enums_window in module ida_kernwin: + +open_enums_window(*args) + open_enums_window(const_id=BADADDR) -> TWidget * + + + Open the enums window ( 'ui_open_builtin' ). + + @param const_id: index of entry to select by default (C++: tid_t) + @return: pointer to resulting window + +Help on function open_exports_window in module ida_kernwin: + +open_exports_window(*args) + open_exports_window(ea) -> TWidget * + + + Open the exports window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_frame_window in module ida_kernwin: + +open_frame_window(*args) + open_frame_window(pfn, offset) -> TWidget * + + + Open the frame window for the given function ( 'ui_open_builtin' ). + + @param pfn: function to analyze (C++: func_t *) + @param offset: offset where the cursor is placed (C++: uval_t) + @return: pointer to resulting window if 'pfn' is a valid function and + the window was displayed, NULL otherwise + +Help on function open_funcs_window in module ida_kernwin: + +open_funcs_window(*args) + open_funcs_window(ea) -> TWidget * + + + Open the functions window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_hexdump_window in module ida_kernwin: + +open_hexdump_window(*args) + open_hexdump_window(window_title) -> TWidget * + + + Open a hexdump view ( 'ui_open_builtin' ). + + @param window_title: title of view to open (C++: const char *) + @return: pointer to resulting window + +Help on function open_imports_window in module ida_kernwin: + +open_imports_window(*args) + open_imports_window(ea) -> TWidget * + + + Open the exports window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_loctypes_window in module ida_kernwin: + +open_loctypes_window(*args) + open_loctypes_window(ordinal) -> TWidget * + + + Open the local types window ( 'ui_open_builtin' ). + + @param ordinal: ordinal of type to select by default (C++: int) + @return: pointer to resulting window + +Help on function open_modules_window in module ida_kernwin: + +open_modules_window(*args) + open_modules_window() -> TWidget * + + + Open the modules window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_names_window in module ida_kernwin: + +open_names_window(*args) + open_names_window(ea) -> TWidget * + + + Open the names window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_navband_window in module ida_kernwin: + +open_navband_window(*args) + open_navband_window(ea, zoom) -> TWidget * + + + Open the navigation band window ( 'ui_open_builtin' ). + + @param ea: sets the address of the navband arrow (C++: ea_t) + @param zoom: sets the navband zoom level (C++: int) + @return: pointer to resulting window + +Help on function open_notepad_window in module ida_kernwin: + +open_notepad_window(*args) + open_notepad_window() -> TWidget * + + + Open the notepad window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_problems_window in module ida_kernwin: + +open_problems_window(*args) + open_problems_window(ea) -> TWidget * + + + Open the problems window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_segments_window in module ida_kernwin: + +open_segments_window(*args) + open_segments_window(ea) -> TWidget * + + + Open the segments window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_segregs_window in module ida_kernwin: + +open_segregs_window(*args) + open_segregs_window(ea) -> TWidget * + + + Open the segment registers window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_selectors_window in module ida_kernwin: + +open_selectors_window(*args) + open_selectors_window() -> TWidget * + + + Open the selectors window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_signatures_window in module ida_kernwin: + +open_signatures_window(*args) + open_signatures_window() -> TWidget * + + + Open the signatures window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_stack_window in module ida_kernwin: + +open_stack_window(*args) + open_stack_window() -> TWidget * + + + Open the call stack window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_strings_window in module ida_kernwin: + +open_strings_window(*args) + open_strings_window(ea, selstart=BADADDR, selend=BADADDR) -> TWidget * + + + Open the strings window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @param selstart: only display strings that occur within this range + (C++: ea_t) + @param selend: only display strings that occur within this range (C++: + ea_t) + @return: pointer to resulting window + +Help on function open_structs_window in module ida_kernwin: + +open_structs_window(*args) + open_structs_window(id=BADADDR, offset=0) -> TWidget * + + + Open the structs window ( 'ui_open_builtin' ). + + @param id: index of entry to select by default (C++: tid_t) + @param offset: offset where the cursor is placed (C++: uval_t) + @return: pointer to resulting window + +Help on function open_threads_window in module ida_kernwin: + +open_threads_window(*args) + open_threads_window() -> TWidget * + + + Open the threads window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_tils_window in module ida_kernwin: + +open_tils_window(*args) + open_tils_window() -> TWidget * + + + Open the type libraries window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_trace_window in module ida_kernwin: + +open_trace_window(*args) + open_trace_window() -> TWidget * + + + Open the trace window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_url in module ida_kernwin: + +open_url(*args) + open_url(url) + + + Open the given url ( 'ui_open_url' ) + + + @param url (C++: const char *) + +Help on function open_xrefs_window in module ida_kernwin: + +open_xrefs_window(*args) + open_xrefs_window(ea) -> TWidget * + + + Open the cross references window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on class place_t in module ida_kernwin: + +class place_t(__builtin__.object) + | Proxy of C++ place_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, out_buf, ud) + | + | adjust(self, *args) + | adjust(self, ud) + | + | beginning(self, *args) + | beginning(self, ud) -> bool + | + | clone(self, *args) + | clone(self) -> place_t + | + | compare(self, *args) + | compare(self, t2) -> int + | + | copyfrom(self, *args) + | copyfrom(self, _from) + | + | deserialize(self, *args) + | deserialize(self, _in) -> bool + | + | ending(self, *args) + | ending(self, ud) -> bool + | + | enter(self, *args) + | enter(self, arg2) -> place_t + | + | generate(self, *args) + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) + | id(self) -> int + | + | leave(self, *args) + | leave(self, arg2) + | + | makeplace(self, *args) + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) + | name(self) -> char const * + | + | next(self, *args) + | next(self, ud) -> bool + | + | prev(self, *args) + | prev(self, ud) -> bool + | + | rebase(self, *args) + | rebase(self, arg2) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | toea(self, *args) + | toea(self) -> ea_t + | + | touval(self, *args) + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | as_enumplace_t(*args) + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_place_t(self) + +Help on function place_t_as_enumplace_t in module ida_kernwin: + +place_t_as_enumplace_t(*args) + place_t_as_enumplace_t(p) -> enumplace_t + +Help on function place_t_as_idaplace_t in module ida_kernwin: + +place_t_as_idaplace_t(*args) + place_t_as_idaplace_t(p) -> idaplace_t + +Help on function place_t_as_simpleline_place_t in module ida_kernwin: + +place_t_as_simpleline_place_t(*args) + place_t_as_simpleline_place_t(p) -> simpleline_place_t + +Help on function place_t_as_structplace_t in module ida_kernwin: + +place_t_as_structplace_t(*args) + place_t_as_structplace_t(p) -> structplace_t + +Help on function plgform_close in module ida_kernwin: + +plgform_close(*args) + plgform_close(py_link, options) + +Help on function plgform_get_widget in module ida_kernwin: + +plgform_get_widget(*args) + plgform_get_widget(py_link) -> TWidget * + +Help on function plgform_new in module ida_kernwin: + +plgform_new(*args) + plgform_new() -> PyObject * + +Help on function plgform_show in module ida_kernwin: + +plgform_show(*args) + plgform_show(py_link, py_obj, caption, options=WOPN_DP_TAB|WOPN_RESTORE) -> bool + +Help on function process_ui_action in module ida_kernwin: + +process_ui_action(*args) + process_ui_action(name, flags=0) -> bool + + + Invokes an IDA UI action by name + + @param name: action name + @return: Boolean + +Help on function py_get_ask_form in module ida_kernwin: + +py_get_ask_form(*args) + py_get_ask_form() -> size_t + +Help on function py_get_open_form in module ida_kernwin: + +py_get_open_form(*args) + py_get_open_form() -> size_t + +Help on function py_load_custom_icon_data in module ida_kernwin: + +py_load_custom_icon_data(*args) + py_load_custom_icon_data(data, format) -> int + +Help on function py_load_custom_icon_fn in module ida_kernwin: + +py_load_custom_icon_fn(*args) + py_load_custom_icon_fn(filename) -> int + +Help on function py_register_compiled_form in module ida_kernwin: + +py_register_compiled_form(*args) + py_register_compiled_form(py_form) + +Help on function py_ss_restore_callback in module ida_kernwin: + +py_ss_restore_callback(*args) + py_ss_restore_callback(err_msg, userdata) + +Help on function py_unregister_compiled_form in module ida_kernwin: + +py_unregister_compiled_form(*args) + py_unregister_compiled_form(py_form) + +Help on function pyidag_bind in module ida_kernwin: + +pyidag_bind(*args) + pyidag_bind(_self) -> bool + +Help on function pyidag_unbind in module ida_kernwin: + +pyidag_unbind(*args) + pyidag_unbind(_self) -> bool + +Help on function pyscv_add_line in module ida_kernwin: + +pyscv_add_line(*args) + pyscv_add_line(py_this, py_sl) -> bool + +Help on function pyscv_clear_lines in module ida_kernwin: + +pyscv_clear_lines(*args) + pyscv_clear_lines(py_this) -> PyObject * + +Help on function pyscv_close in module ida_kernwin: + +pyscv_close(*args) + pyscv_close(py_this) + +Help on function pyscv_count in module ida_kernwin: + +pyscv_count(*args) + pyscv_count(py_this) -> size_t + +Help on function pyscv_del_line in module ida_kernwin: + +pyscv_del_line(*args) + pyscv_del_line(py_this, nline) -> bool + +Help on function pyscv_edit_line in module ida_kernwin: + +pyscv_edit_line(*args) + pyscv_edit_line(py_this, nline, py_sl) -> bool + +Help on function pyscv_get_current_line in module ida_kernwin: + +pyscv_get_current_line(*args) + pyscv_get_current_line(py_this, mouse, notags) -> PyObject * + +Help on function pyscv_get_current_word in module ida_kernwin: + +pyscv_get_current_word(*args) + pyscv_get_current_word(py_this, mouse) -> PyObject * + +Help on function pyscv_get_line in module ida_kernwin: + +pyscv_get_line(*args) + pyscv_get_line(py_this, nline) -> PyObject * + +Help on function pyscv_get_pos in module ida_kernwin: + +pyscv_get_pos(*args) + pyscv_get_pos(py_this, mouse) -> PyObject * + +Help on function pyscv_get_selection in module ida_kernwin: + +pyscv_get_selection(*args) + pyscv_get_selection(py_this) -> PyObject * + +Help on function pyscv_get_widget in module ida_kernwin: + +pyscv_get_widget(*args) + pyscv_get_widget(py_this) -> TWidget * + +Help on function pyscv_init in module ida_kernwin: + +pyscv_init(*args) + pyscv_init(py_link, title) -> PyObject * + +Help on function pyscv_insert_line in module ida_kernwin: + +pyscv_insert_line(*args) + pyscv_insert_line(py_this, nline, py_sl) -> bool + +Help on function pyscv_is_focused in module ida_kernwin: + +pyscv_is_focused(*args) + pyscv_is_focused(py_this) -> bool + +Help on function pyscv_jumpto in module ida_kernwin: + +pyscv_jumpto(*args) + pyscv_jumpto(py_this, ln, x, y) -> bool + +Help on function pyscv_patch_line in module ida_kernwin: + +pyscv_patch_line(*args) + pyscv_patch_line(py_this, nline, offs, value) -> bool + +Help on function pyscv_refresh in module ida_kernwin: + +pyscv_refresh(*args) + pyscv_refresh(py_this) -> bool + +Help on function pyscv_show in module ida_kernwin: + +pyscv_show(*args) + pyscv_show(py_this) -> bool + +Help on function qcleanline in module ida_kernwin: + +qcleanline(*args) + qcleanline(cmt_char='\0', flags=((1 << 0)|(1 << 1))|(1 << 2)) -> str + + + Performs some cleanup operations to a line. + + @param cmt_char: character that denotes the start of a comment: the + entire text is removed if the line begins with this + character (ignoring leading spaces) all text after + (and including) this character is removed if flag + CLNL_FINDCMT is set (C++: char) + @param flags: a combination of line cleanup flags . defaults to + CLNL_TRIM (C++: uint32) + @return: length of line + +Help on class quick_widget_commands_t in module ida_kernwin: + +class quick_widget_commands_t + | # ---------------------------------------------------------------------- + | # This provides an alternative to register_action()+attach_action_to_popup_menu() + | + | Methods defined here: + | + | __init__(self, callback) + | + | add(self, caption, flags, menu_index, icon, emb, shortcut) + | + | populate_popup(self, widget, popup) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _ah_t = + | + | + | _cmd_t = + +Help on function read_range_selection in module ida_kernwin: + +read_range_selection(*args) + read_range_selection(v) -> bool + + + Get the address range for the selected range boundaries, this is the + convenient function for 'read_selection()' + + @param v: view, NULL means the last active window containing addresses + (C++: TWidget *) + +Help on function read_selection in module ida_kernwin: + +read_selection(*args) + read_selection(v, p1, p2) -> bool + + + Read the user selection, and store its information in p0 (from) and p1 (to). + + This can be used as follows: + + + >>> p0 = idaapi.twinpos_t() + p1 = idaapi.twinpos_t() + view = idaapi.get_current_viewer() + idaapi.read_selection(view, p0, p1) + + + At that point, p0 and p1 hold information for the selection. + But, the 'at' property of p0 and p1 is not properly typed. + To specialize it, call #place() on it, passing it the view + they were retrieved from. Like so: + + + >>> place0 = p0.place(view) + place1 = p1.place(view) + + + This will effectively "cast" the place into a specialized type, + holding proper information, depending on the view type (e.g., + disassembly, structures, enums, ...) + + @param view: The view to retrieve the selection for. + @param p0: Storage for the "from" part of the selection. + @param p1: Storage for the "to" part of the selection. + @return: a bool value indicating success. + +Help on function refresh_chooser in module ida_kernwin: + +refresh_chooser(*args) + refresh_chooser(title) -> bool + + + Mark a non-modal custom chooser for a refresh ( 'ui_refresh_chooser' + ). + + @param title: title of chooser (C++: const char *) + @return: success + +Help on function refresh_choosers in module ida_kernwin: + +refresh_choosers(*args) + refresh_choosers() + +Help on function refresh_idaview in module ida_kernwin: + +refresh_idaview(*args) + refresh_idaview() + + + Refresh marked windows ( 'ui_refreshmarked' ) + +Help on function refresh_idaview_anyway in module ida_kernwin: + +refresh_idaview_anyway(*args) + refresh_idaview_anyway() + + + Refresh all disassembly views ( 'ui_refresh' ), forces an immediate + refresh. Please consider 'request_refresh()' instead + +Help on function refresh_navband in module ida_kernwin: + +refresh_navband(*args) + refresh_navband(force) + + + Refresh navigation band if changed ( 'ui_refresh_navband' ). + + @param force: refresh regardless (C++: bool) + +Help on function register_action in module ida_kernwin: + +register_action(*args) + register_action(desc) -> bool + + + Create a new action ( 'ui_register_action' ). After an action has been + created, it is possible to attach it to menu items ( + 'attach_action_to_menu()' ), or to popup menus ( + 'attach_action_to_popup()' ).Because the actions will need to call the + handler's activate() and update() methods at any time, you shouldn't + build your action handler on the stack.Please see the SDK's "ht_view" + plugin for an example how to register actions. + + @param desc: action to register (C++: const action_desc_t &) + @return: success + +Help on function register_addon in module ida_kernwin: + +register_addon(*args) + register_addon(info) -> int + + + Register an add-on. Show its info in the About box. For plugins, + should be called from init() function (repeated calls with the same + product code overwrite previous entries) returns: index of the add-on + in the list, or -1 on error + + @param info (C++: const addon_info_t *) + +Help on function register_and_attach_to_menu in module ida_kernwin: + +register_and_attach_to_menu(*args) + register_and_attach_to_menu(menupath, name, label, shortcut, flags, handler, owner) -> bool + + + Helper.You are not encouraged to use this, as it mixes flags for both + 'register_action()' , and 'attach_action_to_menu()' .The only reason + for its existence is to make it simpler to port existing plugins to + the new actions API. + + @param menupath (C++: const char *) + @param name (C++: const char *) + @param label (C++: const char *) + @param shortcut (C++: const char *) + @param flags (C++: int) + @param handler (C++: action_handler_t *) + @param owner (C++: const plugin_t *) + +Help on function register_timer in module ida_kernwin: + +register_timer(*args) + register_timer(interval, py_callback) -> PyObject * + + + Register a timer + + @param interval: Interval in milliseconds + @param callback: A Python callable that takes no parameters and returns an integer. + The callback may return: + -1 : to unregister the timer + >= 0 : the new or same timer interval + @return: None or a timer object + +Help on function remove_command_interpreter in module ida_kernwin: + +remove_command_interpreter(*args) + remove_command_interpreter(cli_idx) + + + Remove command line interpreter ( 'ui_install_cli' ) + +Help on class renderer_pos_info_t in module ida_kernwin: + +class renderer_pos_info_t(__builtin__.object) + | Proxy of C++ renderer_pos_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_pos_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cx + | renderer_pos_info_t_cx_get(self) -> short + | + | cy + | renderer_pos_info_t_cy_get(self) -> short + | + | node + | renderer_pos_info_t_node_get(self) -> int + | + | sx + | renderer_pos_info_t_sx_get(self) -> short + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_renderer_pos_info_t(self) + +Help on function repaint_custom_viewer in module ida_kernwin: + +repaint_custom_viewer(*args) + repaint_custom_viewer(custom_viewer) + + + Repaint the given widget immediately ( 'ui_repaint_qwidget' ) + + + @param custom_viewer (C++: TWidget *) + +Help on function replace_wait_box in module ida_kernwin: + +replace_wait_box(*args) + replace_wait_box(format) + + + Replace the label of "Please wait dialog box". + + + @param format (C++: const char *) + +Help on function request_refresh in module ida_kernwin: + +request_refresh(*args) + request_refresh(mask, cnd=True) + + + Request a refresh of a builtin window. + + @param mask: Window refresh flags (C++: uint64) + @param cnd: set if true or clear flag otherwise (C++: bool) + +Help on function restore_database_snapshot in module ida_kernwin: + +restore_database_snapshot(*args) + restore_database_snapshot(ss, pyfunc_or_none, pytuple_or_none) -> PyObject * + + + Restore a database snapshot. Note: This call is asynchronous. When it + is completed, the callback will be triggered. + + @param ss: snapshot instance (see build_snapshot_tree() ) (C++: const + snapshot_t *) + @return: false if restoration could not be started (snapshot file was + not found). If the returned value is True then check if + the operation succeeded from the callback. + +Help on function set_cancelled in module ida_kernwin: + +set_cancelled(*args) + set_cancelled() + + + Set "Cancelled" flag ( 'ui_set_cancelled' ) + +Help on function set_code_viewer_handler in module ida_kernwin: + +set_code_viewer_handler(*args) + set_code_viewer_handler(code_viewer, handler_id, handler_or_data) -> void * + + + Set a handler for a code viewer event ( 'ui_set_custom_viewer_handler' + ). + + @param code_viewer: the code viewer (C++: TWidget *) + @param handler_id: one of CDVH_ in custom_viewer_handler_id_t (C++: + custom_viewer_handler_id_t) + @param handler_or_data: can be a handler or data. see examples in + Functions: custom viewer handlers (C++: void + *) + @return: old value of the handler or data + +Help on function set_code_viewer_is_source in module ida_kernwin: + +set_code_viewer_is_source(*args) + set_code_viewer_is_source(code_viewer) -> bool + + + Specify that the given code viewer is used to display source code ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + +Help on function set_code_viewer_line_handlers in module ida_kernwin: + +set_code_viewer_line_handlers(*args) + set_code_viewer_line_handlers(code_viewer, click_handler, popup_handler, dblclick_handler, drawicon_handler, linenum_handler) + + + Set handlers for code viewer line events. Any of these handlers may be + NULL + + @param code_viewer (C++: TWidget *) + @param click_handler (C++: code_viewer_lines_click_t *) + @param popup_handler (C++: code_viewer_lines_click_t *) + @param dblclick_handler (C++: code_viewer_lines_click_t *) + @param drawicon_handler (C++: code_viewer_lines_icon_t *) + @param linenum_handler (C++: code_viewer_lines_linenum_t *) + +Help on function set_code_viewer_lines_alignment in module ida_kernwin: + +set_code_viewer_lines_alignment(*args) + set_code_viewer_lines_alignment(code_viewer, align) -> bool + + + Set alignment for lines in a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param align (C++: int) + +Help on function set_code_viewer_lines_icon_margin in module ida_kernwin: + +set_code_viewer_lines_icon_margin(*args) + set_code_viewer_lines_icon_margin(code_viewer, margin) -> bool + + + Set space allowed for icons in the margin of a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param margin (C++: int) + +Help on function set_code_viewer_lines_radix in module ida_kernwin: + +set_code_viewer_lines_radix(*args) + set_code_viewer_lines_radix(code_viewer, radix) -> bool + + + Set radix for values displayed in a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param radix (C++: int) + +Help on function set_code_viewer_user_data in module ida_kernwin: + +set_code_viewer_user_data(*args) + set_code_viewer_user_data(code_viewer, ud) -> bool + + + Set the user data on a code viewer ( 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param ud (C++: void *) + +Help on function set_custom_viewer_qt_aware in module ida_kernwin: + +set_custom_viewer_qt_aware(*args) + set_custom_viewer_qt_aware(custom_viewer) -> bool + + + Allow the given viewer to interpret Qt events ( + 'ui_set_custom_viewer_handler' ) + + + @param custom_viewer (C++: TWidget *) + +Help on function set_dock_pos in module ida_kernwin: + +set_dock_pos(*args) + set_dock_pos(src_ctrl, dest_ctrl, orient, left=0, top=0, right=0, bottom=0) -> bool + + + Sets the dock orientation of a window relatively to another window. + + @param src: Source docking control + @param dest: Destination docking control + @param orient: One of DOR_XXXX constants + @param left, top, right, bottom: These parameter if DOR_FLOATING is used, or if you want to specify the width of docked windows + @return: Boolean + + Example: + set_dock_pos('Structures', 'Enums', DOR_RIGHT) <- docks the Structures window to the right of Enums window + +Help on function set_highlight in module ida_kernwin: + +set_highlight(*args) + set_highlight(viewer, str, flags) -> bool + + + Set the highlighted identifier in the viewer ( 'ui_set_highlight' ). + + @param viewer: the viewer (C++: TWidget *) + @param str: the text to match, or NULL to remove current (C++: const + char *) + @param flags: combination of HIF_... bits (see set_highlightr flags ) + (C++: int) + @return: false if an error occurred + +Help on function set_nav_colorizer in module ida_kernwin: + +set_nav_colorizer(*args) + set_nav_colorizer(new_py_colorizer) -> PyObject * + + + Set a new colorizer for the navigation band. + + The 'callback' is a function of 2 arguments: + - ea (the EA to colorize for) + - nbytes (the number of bytes at that EA) + and must return a 'long' value. + + The previous colorizer is returned, allowing + the new 'callback' to use 'call_nav_colorizer' + with it. + + Note that the previous colorizer is returned + only the first time set_nav_colorizer() is called: + due to the way the colorizers API is defined in C, + it is impossible to chain more than 2 colorizers + in IDAPython: the original, IDA-provided colorizer, + and a user-provided one. + + Example: colorizer inverting the color provided by the IDA colorizer: + def my_colorizer(ea, nbytes): + global ida_colorizer + orig = idaapi.call_nav_colorizer(ida_colorizer, ea, nbytes) + return long(~orig) + + ida_colorizer = idaapi.set_nav_colorizer(my_colorizer) + +Help on function set_view_renderer_type in module ida_kernwin: + +set_view_renderer_type(*args) + set_view_renderer_type(v, rt) + + + Set the type of renderer to use in a view ( 'ui_set_renderer_type' ) + + + @param v (C++: TWidget *) + @param rt (C++: tcc_renderer_type_t) + +Help on function show_wait_box in module ida_kernwin: + +show_wait_box(*args) + show_wait_box(message) + + + Display a dialog box with "Please wait...". If the text message starts + with "HIDECANCEL\n", the cancel buttonwon't be displayed in the dialog + box and you don't need to checkfor cancellations with + 'user_cancelled()' . Plugins must call 'hide_wait_box()' to close the + dialog box, otherwise the user interface will be disabled.Note that, + if the wait dialog is already visible, 'show_wait_box()' will1) push + the currently-displayed text on a stack2) display the new textThen, + when 'hide_wait_box()' is called, if that stack isn't empty its + toplabel will be popped and restored in the wait dialog.This implies + that a plugin should call 'hide_wait_box()' exactly as manytimes as it + called 'show_wait_box()' , or the wait dialog might remainvisible and + block the UI.Also, in case the plugin knows the wait dialog is + currently displayed,alternatively it can call 'replace_wait_box()' , + to replace the text of thedialog without pushing the currently- + displayed text on the stack. + +Help on class simplecustviewer_t in module ida_kernwin: + +class simplecustviewer_t(__builtin__.object) + | The base class for implementing simple custom viewers + | + | Methods defined here: + | + | AddLine(self, line, fgcolor=None, bgcolor=None) + | Adds a colored line to the view + | @return: Boolean + | + | ClearLines(self) + | Clears all the lines + | + | Close(self) + | Destroys the view. + | One has to call Create() afterwards. + | Show() can be called and it will call Create() internally. + | @return: Boolean + | + | Count(self) + | Returns the number of lines in the view + | + | Create(self, title) + | Creates the custom view. This should be the first method called after instantiation + | + | @param title: The title of the view + | @return: Boolean whether it succeeds or fails. It may fail if a window with the same title is already open. + | In this case better close existing windows + | + | DelLine(self, lineno) + | Deletes an existing line + | @return: Boolean + | + | EditLine(self, lineno, line, fgcolor=None, bgcolor=None) + | Edits an existing line. + | @return: Boolean + | + | GetCurrentLine(self, mouse=0, notags=0) + | Returns the current line. + | @param mouse: Current line at mouse pos + | @param notags: If True then tag_remove() will be called before returning the line + | @return: Returns the current line (colored or uncolored) or None on failure + | + | GetCurrentWord(self, mouse=0) + | Returns the current word + | @param mouse: Use mouse position or cursor position + | @return: None if failed or a String containing the current word at mouse or cursor + | + | GetLine(self, lineno) + | Returns a line + | @param lineno: The line number + | @return: + | Returns a tuple (colored_line, fgcolor, bgcolor) or None + | + | GetLineNo(self, mouse=0) + | Calls GetPos() and returns the current line number or -1 on failure + | + | GetPos(self, mouse=0) + | Returns the current cursor or mouse position. + | @param mouse: return mouse position + | @return: Returns a tuple (lineno, x, y) + | + | GetSelection(self) + | Returns the selected range or None + | @return: + | - tuple(x1, y1, x2, y2) + | - None if no selection + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | InsertLine(self, lineno, line, fgcolor=None, bgcolor=None) + | Inserts a line in the given position + | @return: Boolean + | + | IsFocused(self) + | Returns True if the current view is the focused view + | + | Jump(self, lineno, x=0, y=0) + | + | OnPopup(self, form, popup_handle) + | Context menu popup is about to be shown. Create items dynamically if you wish + | @return: Boolean. True if you handled the event + | + | PatchLine(self, lineno, offs, value) + | Patches an existing line character at the given offset. This is a low level function. You must know what you're doing + | + | Refresh(self) + | + | RefreshCurrent(self) + | Refreshes the current line only + | + | Show(self) + | Shows an already created view. It the view was close, then it will call Create() for you + | @return: Boolean + | + | __init__(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _simplecustviewer_t__make_sl_arg = __make_sl_arg(line, fgcolor=None, bgcolor=None) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | UI_Hooks_Trampoline = + +Help on class simpleline_place_t in module ida_kernwin: + +class simpleline_place_t(place_t) + | Proxy of C++ simpleline_place_t class. + | + | Method resolution order: + | simpleline_place_t + | place_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | n + | simpleline_place_t_n_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_simpleline_place_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) + | _print(self, out_buf, ud) + | + | adjust(self, *args) + | adjust(self, ud) + | + | beginning(self, *args) + | beginning(self, ud) -> bool + | + | clone(self, *args) + | clone(self) -> place_t + | + | compare(self, *args) + | compare(self, t2) -> int + | + | copyfrom(self, *args) + | copyfrom(self, _from) + | + | deserialize(self, *args) + | deserialize(self, _in) -> bool + | + | ending(self, *args) + | ending(self, ud) -> bool + | + | enter(self, *args) + | enter(self, arg2) -> place_t + | + | generate(self, *args) + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) + | id(self) -> int + | + | leave(self, *args) + | leave(self, arg2) + | + | makeplace(self, *args) + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) + | name(self) -> char const * + | + | next(self, *args) + | next(self, ud) -> bool + | + | prev(self, *args) + | prev(self, ud) -> bool + | + | rebase(self, *args) + | rebase(self, arg2) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | toea(self, *args) + | toea(self) -> ea_t + | + | touval(self, *args) + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on class simpleline_t in module ida_kernwin: + +class simpleline_t(__builtin__.object) + | Proxy of C++ simpleline_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> simpleline_t + | __init__(self, c, str) -> simpleline_t + | __init__(self, str) -> simpleline_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bgcolor + | simpleline_t_bgcolor_get(self) -> bgcolor_t + | + | color + | simpleline_t_color_get(self) -> color_t + | + | line + | simpleline_t_line_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_simpleline_t(self) + +Help on function str2ea in module ida_kernwin: + +str2ea(*args) + str2ea(str, screenEA=BADADDR) -> ea_t + + + Converts a string express to EA. The expression evaluator may be called as well. + + @return: BADADDR or address value + +Help on function str2user in module ida_pro: + +str2user(*args) + str2user(str) -> PyObject * + + + Insert C-style escape characters to string + + @return: new string with escape characters inserted + +Help on function strarray in module ida_kernwin: + +strarray(*args) + strarray(array, array_size, code) -> char const * + + + Find a line with the specified code in the 'strarray_t' array. If the + last element of the array has code==0 then it is considered as the + default entry.If no default entry exists and the code is not found, + 'strarray()' returns "". + + @param array (C++: const strarray_t *) + @param array_size (C++: size_t) + @param code (C++: int) + +Help on class strarray_t in module ida_kernwin: + +class strarray_t(__builtin__.object) + | Proxy of C++ strarray_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strarray_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | strarray_t_code_get(self) -> int + | + | text + | strarray_t_text_get(self) -> char const * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_strarray_t(self) + +Help on class structplace_t in module ida_kernwin: + +class structplace_t(place_t) + | Proxy of C++ structplace_t class. + | + | Method resolution order: + | structplace_t + | place_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | idx + | structplace_t_idx_get(self) -> uval_t + | + | offset + | structplace_t_offset_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_structplace_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) + | _print(self, out_buf, ud) + | + | adjust(self, *args) + | adjust(self, ud) + | + | beginning(self, *args) + | beginning(self, ud) -> bool + | + | clone(self, *args) + | clone(self) -> place_t + | + | compare(self, *args) + | compare(self, t2) -> int + | + | copyfrom(self, *args) + | copyfrom(self, _from) + | + | deserialize(self, *args) + | deserialize(self, _in) -> bool + | + | ending(self, *args) + | ending(self, ud) -> bool + | + | enter(self, *args) + | enter(self, arg2) -> place_t + | + | generate(self, *args) + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) + | id(self) -> int + | + | leave(self, *args) + | leave(self, arg2) + | + | makeplace(self, *args) + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) + | name(self) -> char const * + | + | next(self, *args) + | next(self, ud) -> bool + | + | prev(self, *args) + | prev(self, ud) -> bool + | + | rebase(self, *args) + | rebase(self, arg2) -> bool + | + | serialize(self, *args) + | serialize(self) + | + | toea(self, *args) + | toea(self) -> ea_t + | + | touval(self, *args) + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on class sync_source_t in module ida_kernwin: + +class sync_source_t(__builtin__.object) + | Proxy of C++ sync_source_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, _o) -> bool + | + | __init__(self, *args) + | __init__(self, _view) -> sync_source_t + | __init__(self, _regname) -> sync_source_t + | + | __ne__(self, *args) + | __ne__(self, _o) -> bool + | + | __repr__ = _swig_repr(self) + | + | get_register(self, *args) + | get_register(self) -> char const * + | + | get_widget(self, *args) + | get_widget(self) -> TWidget const * + | + | is_register(self, *args) + | is_register(self) -> bool + | + | is_widget(self, *args) + | is_widget(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sync_source_t(self) + +Help on function sync_sources in module ida_kernwin: + +sync_sources(*args) + sync_sources(what, _with, sync) -> bool + + + [Un]synchronize sources + + @param what (C++: const sync_source_t &) + @param _with (C++: const sync_source_t &) + @param sync (C++: bool) + @return: success + +Help on function take_database_snapshot in module ida_kernwin: + +take_database_snapshot(*args) + take_database_snapshot(ss) -> PyObject * + + + Take a database snapshot ( 'ui_take_database_snapshot' ). + + @param ss: in/out parameter. in: description, flags out: filename, + id (C++: snapshot_t *) + @return: success + +Help on class textctrl_info_t in module ida_kernwin: + +class textctrl_info_t(ida_idaapi.py_clinked_object_t) + | Class representing textctrl_info_t + | + | Method resolution order: + | textctrl_info_t + | ida_idaapi.py_clinked_object_t + | ida_idaapi.pyidc_opaque_object_t + | __builtin__.object + | + | Methods defined here: + | + | __get_flags__(self) + | Returns the flags value + | + | __get_tabsize__(self) + | Returns the tabsize value + | + | __init__(self, text='', flags=0, tabsize=0) + | + | __set_flags__(self, flags) + | Sets the flags value + | + | __set_tabsize__(self, tabsize) + | Sets the tabsize value + | + | _create_clink(self) + | + | _del_clink(self, lnk) + | + | _get_clink_ptr(self) + | + | _textctrl_info_t__get_text = __get_text(self) + | Sets the text value + | + | _textctrl_info_t__set_text = __set_text(self, s) + | Sets the text value + | + | assign(self, other) + | Copies the contents of 'other' to 'self' + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | Returns the flags value + | + | tabsize + | Returns the tabsize value + | + | text + | Sets the text value + | + | value + | Sets the text value + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | TXTF_ACCEPTTABS = 2 + | + | TXTF_AUTOINDENT = 1 + | + | TXTF_FIXEDFONT = 32 + | + | TXTF_MODIFIED = 16 + | + | TXTF_READONLY = 4 + | + | TXTF_SELECTED = 8 + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_idaapi.py_clinked_object_t: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.py_clinked_object_t: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function textctrl_info_t_assign in module ida_kernwin: + +textctrl_info_t_assign(*args) + textctrl_info_t_assign(_self, other) -> bool + +Help on function textctrl_info_t_create in module ida_kernwin: + +textctrl_info_t_create(*args) + textctrl_info_t_create() -> PyObject * + +Help on function textctrl_info_t_destroy in module ida_kernwin: + +textctrl_info_t_destroy(*args) + textctrl_info_t_destroy(py_obj) -> bool + +Help on function textctrl_info_t_get_clink in module ida_kernwin: + +textctrl_info_t_get_clink(*args) + textctrl_info_t_get_clink(_self) -> textctrl_info_t * + +Help on function textctrl_info_t_get_clink_ptr in module ida_kernwin: + +textctrl_info_t_get_clink_ptr(*args) + textctrl_info_t_get_clink_ptr(_self) -> PyObject * + +Help on function textctrl_info_t_get_flags in module ida_kernwin: + +textctrl_info_t_get_flags(*args) + textctrl_info_t_get_flags(_self) -> unsigned int + +Help on function textctrl_info_t_get_tabsize in module ida_kernwin: + +textctrl_info_t_get_tabsize(*args) + textctrl_info_t_get_tabsize(_self) -> unsigned int + +Help on function textctrl_info_t_get_text in module ida_kernwin: + +textctrl_info_t_get_text(*args) + textctrl_info_t_get_text(_self) -> char const * + +Help on function textctrl_info_t_set_flags in module ida_kernwin: + +textctrl_info_t_set_flags(*args) + textctrl_info_t_set_flags(_self, flags) -> bool + +Help on function textctrl_info_t_set_tabsize in module ida_kernwin: + +textctrl_info_t_set_tabsize(*args) + textctrl_info_t_set_tabsize(_self, tabsize) -> bool + +Help on function textctrl_info_t_set_text in module ida_kernwin: + +textctrl_info_t_set_text(*args) + textctrl_info_t_set_text(_self, s) -> bool + +Help on class twinpos_t in module ida_kernwin: + +class twinpos_t(__builtin__.object) + | Proxy of C++ twinpos_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> twinpos_t + | __init__(self, t) -> twinpos_t + | __init__(self, t, x0) -> twinpos_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | place(self, view) + | + | place_as_enumplace_t(self) + | + | place_as_idaplace_t(self) + | + | place_as_simpleline_place_t(self) + | + | place_as_structplace_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | at + | twinpos_t_at_get(self) -> place_t + | + | thisown + | The membership flag + | + | x + | twinpos_t_x_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_twinpos_t(self) + +Help on function ui_load_new_file in module ida_kernwin: + +ui_load_new_file(*args) + ui_load_new_file(temp_file, filename, pli, neflags, ploaders) -> bool + + + Display a load file dialog and load file ( 'ui_load_file' ). + + @param temp_file: name of the file with the extracted archive member. + (C++: qstring *) + @param filename: the name of input file as is, library or archive name + (C++: qstring *) + @param pli: loader input source, may be changed to point to temp_file + (C++: linput_t **) + @param neflags: combination of NEF_... bits (see Load file flags ) + (C++: ushort) + @param ploaders: list of loaders which accept file, may be changed for + loaders of temp_file (C++: load_info_t **) + +Help on class ui_requests_t in module ida_kernwin: + +class ui_requests_t(__builtin__.object) + | Proxy of C++ ui_requests_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ui_requests_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ui_requests_t(self) + +Help on function ui_run_debugger in module ida_kernwin: + +ui_run_debugger(*args) + ui_run_debugger(dbgopts, exename, argc, argv) -> bool + + + Load a debugger plugin and run the specified program ( 'ui_run_dbg' ). + + @param dbgopts: value of the -r command line switch (C++: const char + *) + @param exename: name of the file to run (C++: const char *) + @param argc: number of arguments for the executable (C++: int) + @param argv: argument vector (C++: const char *const *) + @return: success + +Help on function unmark_selection in module ida_kernwin: + +unmark_selection(*args) + unmark_selection() + + + Unmark selection ( 'ui_unmarksel' ) + +Help on function unregister_action in module ida_kernwin: + +unregister_action(*args) + unregister_action(name) -> bool + + + Delete a previously-registered action ( 'ui_unregister_action' ). + + @param name: name of action (C++: const char *) + @return: success + +Help on function unregister_timer in module ida_kernwin: + +unregister_timer(*args) + unregister_timer(py_timerctx) -> bool + + + Unregister a timer + + @param timer_obj: a timer object previously returned by a register_timer() + @return: Boolean + @note: After the timer has been deleted, the timer_obj will become invalid. + +Help on function update_action_checkable in module ida_kernwin: + +update_action_checkable(*args) + update_action_checkable(name, checkable) -> bool + + + Update an action's checkability ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param checkable: new checkability (C++: bool) + @return: success + +Help on function update_action_checked in module ida_kernwin: + +update_action_checked(*args) + update_action_checked(name, checked) -> bool + + + Update an action's checked state ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param checked: new checked state (C++: bool) + @return: success + +Help on function update_action_icon in module ida_kernwin: + +update_action_icon(*args) + update_action_icon(name, icon) -> bool + + + Update an action's icon ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param icon: new icon id (C++: int) + @return: success + +Help on function update_action_label in module ida_kernwin: + +update_action_label(*args) + update_action_label(name, label) -> bool + + + Update an action's label ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param label: new label (C++: const char *) + @return: success + +Help on function update_action_shortcut in module ida_kernwin: + +update_action_shortcut(*args) + update_action_shortcut(name, shortcut) -> bool + + + Update an action's shortcut ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param shortcut: new shortcut (C++: const char *) + @return: success + +Help on function update_action_state in module ida_kernwin: + +update_action_state(*args) + update_action_state(name, state) -> bool + + + Update an action's state ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param state: new state (C++: action_state_t) + @return: success + +Help on function update_action_tooltip in module ida_kernwin: + +update_action_tooltip(*args) + update_action_tooltip(name, tooltip) -> bool + + + Update an action's tooltip ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param tooltip: new tooltip (C++: const char *) + @return: success + +Help on function update_action_visibility in module ida_kernwin: + +update_action_visibility(*args) + update_action_visibility(name, visible) -> bool + + + Update an action's visibility ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param visible: new visibility (C++: bool) + @return: success + +Help on function user_cancelled in module ida_kernwin: + +user_cancelled(*args) + user_cancelled() -> bool + + + Test the ctrl-break flag ( 'ui_test_cancelled' ). + +Help on class view_mouse_event_location_t in module ida_kernwin: + +class view_mouse_event_location_t(__builtin__.object) + | Proxy of C++ view_mouse_event_location_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> view_mouse_event_location_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | view_mouse_event_location_t_ea_get(self) -> ea_t + | + | item + | view_mouse_event_location_t_item_get(self) -> selection_item_t const * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = view_mouse_event_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | button + | view_mouse_event_t_button_get(self) -> vme_button_t + | + | location + | view_mouse_event_t_location_get(self) -> view_mouse_event_location_t + | + | renderer_pos + | view_mouse_event_t_renderer_pos_get(self) -> renderer_pos_info_t + | + | rtype + | view_mouse_event_t_rtype_get(self) -> tcc_renderer_type_t + | + | state + | view_mouse_event_t_state_get(self) -> view_event_state_t + | + | thisown + | The membership flag + | + | x + | view_mouse_event_t_x_get(self) -> uint32 + | + | y + | view_mouse_event_t_y_get(self) -> uint32 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_view_mouse_event_t(self) + +Help on function warning in module ida_kernwin: + +warning(*args) + warning(format) + + + Display a message in a message box + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + The user will be able to hide messages if they appear twice in a row on + the screen + +=== ida_kernwin EPYDOC INJECTIONS === +ida_kernwin.ACF_HAS_SELECTION +""" +there is currently a valid selection +""" + +ida_kernwin.ACF_XTRN_EA +""" +cur_ea is in 'externs' segment +""" + +ida_kernwin.ADF_NO_UNDO +""" +useful for actions that do not modify the database. + +the action does not create an undo point. +""" + +ida_kernwin.ADF_OWN_HANDLER +""" +handler is owned by the action; it'll be destroyed when the action is +unregistered. You shouldn't have to use this. +""" + +ida_kernwin.AHF_VERSION +""" +action handler version (used by 'action_handler_t::flags' ) +""" + +ida_kernwin.AHF_VERSION_MASK +""" +mask for 'action_handler_t::flags' +""" + +ida_kernwin.ASKBTN_BTN1 +""" +First (Yes) button. +""" + +ida_kernwin.ASKBTN_BTN2 +""" +Second (No) button. +""" + +ida_kernwin.ASKBTN_BTN3 +""" +Third (Cancel) button. +""" + +ida_kernwin.ASKBTN_CANCEL +""" +Cancel button. +""" + +ida_kernwin.ASKBTN_NO +""" +No button. +""" + +ida_kernwin.ASKBTN_YES +""" +Yes button. +""" + +ida_kernwin.BWN_ADDRWATCH +""" +the 'Watch List' window +""" + +ida_kernwin.BWN_BPTS +""" +breakpoints +""" + +ida_kernwin.BWN_CALLS +""" +function calls +""" + +ida_kernwin.BWN_CALLS_CALLEES +""" +function calls, callees +""" + +ida_kernwin.BWN_CALLS_CALLERS +""" +function calls, callers +""" + +ida_kernwin.BWN_CALL_STACK +""" +call stack +""" + +ida_kernwin.BWN_CHOOSER +""" +a non-builtin chooser +""" + +ida_kernwin.BWN_CLI +""" +the command-line, in the output window +""" + +ida_kernwin.BWN_CMDPALCSR +""" +the command palette chooser (Qt version only) +""" + +ida_kernwin.BWN_CMDPALWIN +""" +the command palette window (Qt version only) +""" + +ida_kernwin.BWN_CPUREGS +""" +one of the 'General registers', 'FPU register', ... debugger windows +""" + +ida_kernwin.BWN_CUSTVIEW +""" +custom viewers +""" + +ida_kernwin.BWN_CV_LINE_INFOS +""" +custom viewers' lineinfo widget +""" + +ida_kernwin.BWN_DISASM +""" +disassembly views +""" + +ida_kernwin.BWN_DISASMS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_DISASM_ARROWS +""" +disassembly arrows widget +""" + +ida_kernwin.BWN_DUMP +""" +hex dumps +""" + +ida_kernwin.BWN_DUMPS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_ENUMS +""" +enumerations +""" + +ida_kernwin.BWN_EXPORTS +""" +exports +""" + +ida_kernwin.BWN_FRAME +""" +function frame +""" + +ida_kernwin.BWN_FUNCS +""" +functions +""" + +ida_kernwin.BWN_IMPORTS +""" +imports +""" + +ida_kernwin.BWN_LOCALS +""" +the 'locals' debugger window +""" + +ida_kernwin.BWN_LOCTYPS +""" +local types +""" + +ida_kernwin.BWN_MDVIEWCSR +""" +lumina metadata view chooser +""" + +ida_kernwin.BWN_MODULES +""" +modules +""" + +ida_kernwin.BWN_NAMES +""" +names +""" + +ida_kernwin.BWN_NAVBAND +""" +navigation band +""" + +ida_kernwin.BWN_NOTEPAD +""" +notepad +""" + +ida_kernwin.BWN_OUTPUT +""" +the text area, in the output window +""" + +ida_kernwin.BWN_PROBS +""" +problems +""" + +ida_kernwin.BWN_PSEUDOCODE +""" +hexrays decompiler views +""" + +ida_kernwin.BWN_SCRIPTS_CSR +""" +the "Recent scripts" chooser +""" + +ida_kernwin.BWN_SEARCH +""" +search results +""" + +ida_kernwin.BWN_SEARCHS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_SEGREGS +""" +segment registers +""" + +ida_kernwin.BWN_SEGS +""" +segments +""" + +ida_kernwin.BWN_SELS +""" +selectors +""" + +ida_kernwin.BWN_SHORTCUTCSR +""" +the shortcuts chooser (Qt version only) +""" + +ida_kernwin.BWN_SHORTCUTWIN +""" +the shortcuts window (Qt version only) +""" + +ida_kernwin.BWN_SIGNS +""" +signatures +""" + +ida_kernwin.BWN_SNIPPETS +""" +the 'Execute script' window +""" + +ida_kernwin.BWN_SNIPPETS_CSR +""" +the list of snippets in the 'Execute script' window +""" + +ida_kernwin.BWN_SO_OFFSETS +""" +the 'Structure offsets' dialog's offset panel +""" + +ida_kernwin.BWN_SO_STRUCTS +""" +the 'Structure offsets' dialog's 'Structures and Unions' panel +""" + +ida_kernwin.BWN_SRCPTHMAP_CSR +""" +"Source paths..."'s path mappings chooser +""" + +ida_kernwin.BWN_SRCPTHUND_CSR +""" +"Source paths..."'s undesired paths chooser +""" + +ida_kernwin.BWN_STACK +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_STKVIEW +""" +the 'Stack view' debugger window +""" + +ida_kernwin.BWN_STRINGS +""" +strings +""" + +ida_kernwin.BWN_STRUCTS +""" +structures +""" + +ida_kernwin.BWN_THREADS +""" +threads +""" + +ida_kernwin.BWN_TILS +""" +type libraries +""" + +ida_kernwin.BWN_TRACE +""" +trace view +""" + +ida_kernwin.BWN_UNDOHIST +""" +Undo history. +""" + +ida_kernwin.BWN_UNKNOWN +""" +unknown window +""" + +ida_kernwin.BWN_WATCH +""" +the 'watches' debugger window +""" + +ida_kernwin.BWN_XREFS +""" +xrefs +""" + +ida_kernwin.CHCOL_DEC +""" +decimal number +""" + +ida_kernwin.CHCOL_DEFHIDDEN +""" +column should be hidden by default +""" + +ida_kernwin.CHCOL_EA +""" +address +""" + +ida_kernwin.CHCOL_FNAME +""" +function name +""" + +ida_kernwin.CHCOL_FORMAT +""" +column format mask +""" + +ida_kernwin.CHCOL_HEX +""" +hexadecimal number +""" + +ida_kernwin.CHCOL_PATH +""" +file path +""" + +ida_kernwin.CHCOL_PLAIN +""" +plain string +""" + +ida_kernwin.CHITEM_BOLD +""" +display the item in bold +""" + +ida_kernwin.CHITEM_GRAY +""" +gray out the item +""" + +ida_kernwin.CHITEM_ITALIC +""" +display the item in italic +""" + +ida_kernwin.CHITEM_STRIKE +""" +strikeout the item +""" + +ida_kernwin.CHITEM_UNDER +""" +underline the item +""" + +ida_kernwin.CHOOSER_MENU_EDIT +""" +Values of the 'menu_index' parameter. + +Obsolete. Please don't use +""" + +ida_kernwin.CHOOSER_MENU_JUMP +""" +Obsolete. Please don't use. +""" + +ida_kernwin.CHOOSER_MENU_SEARCH +""" +Obsolete. Please don't use. +""" + +ida_kernwin.CHOOSER_MULTI_SELECTION +""" +enable for multiple selections. A callback of type +'chooser_multi_cb_t' will be called for all selected items. +""" + +ida_kernwin.CHOOSER_NO_SELECTION +""" +Flags. + +enable even if there's no selected item. 'n' will be NO_SELECTION for +a callback. +""" + +ida_kernwin.CHOOSER_POPUP_MENU +""" +Add command to the popup menu. +""" + +ida_kernwin.CH_ATTRS +""" +generate ui_get_chooser_item_attrs (gui only) +""" + +ida_kernwin.CH_BUILTIN_MASK +""" +Mask for builtin chooser numbers. Plugins should not use them. +""" + +ida_kernwin.CH_CAN_DEL +""" +allow to delete existing item(s) +""" + +ida_kernwin.CH_CAN_EDIT +""" +allow to edit existing item(s) +""" + +ida_kernwin.CH_CAN_INS +""" +allow to insert new items +""" + +ida_kernwin.CH_CAN_REFRESH +""" +allow to refresh chooser +""" + +ida_kernwin.CH_FORCE_DEFAULT +""" +if a non-modal chooser was already open, change selection to the +default one +""" + +ida_kernwin.CH_KEEP +""" +The chooser instance's lifecycle is not tied to the lifecycle of the +widget showing its contents. Closing the widget will not destroy the +chooser structure. This allows for, e.g., static global chooser +instances that don't need to be allocated on the heap. Also stack- +allocated chooser instances must set this bit. +""" + +ida_kernwin.CH_MODAL +""" +Modal chooser. +""" + +ida_kernwin.CH_MULTI +""" +Obsolete. + +The chooser will allow multi-selection (only for GUI choosers). This +bit is set when using the 'chooser_multi_t' structure. +""" + +ida_kernwin.CH_NOBTNS +""" +do not display ok/cancel/help/search buttons. Meaningful only for gui +modal windows because non-modal windows do not have any buttons +anyway. Text mode does not have them neither. +""" + +ida_kernwin.CH_NOIDB +""" +use the chooser before opening the database +""" + +ida_kernwin.CH_NO_STATUS_BAR +""" +don't show a status bar +""" + +ida_kernwin.CH_QFLT +""" +open with quick filter enabled and focused +""" + +ida_kernwin.CH_QFTYP_DEFAULT +""" +set quick filtering type to the possible existing default for this +chooser +""" + +ida_kernwin.CH_QFTYP_FUZZY +""" +fuzzy search quick filter type +""" + +ida_kernwin.CH_QFTYP_NORMAL +""" +normal (i.e., lexicographical) quick filter type +""" + +ida_kernwin.CH_QFTYP_REGEX +""" +regex quick filter type +""" + +ida_kernwin.CH_QFTYP_WHOLE_WORDS +""" +whole words quick filter type +""" + +ida_kernwin.CH_RESTORE +""" +restore floating position if present (equivalent of WOPN_RESTORE) (GUI +version only) +""" + +ida_kernwin.CLNL_FINDCMT +""" +Search for the comment symbol everywhere in the line, not only at the +beginning. +""" + +ida_kernwin.CLNL_LTRIM +""" +Remove leading space characters. +""" + +ida_kernwin.CLNL_RTRIM +""" +Remove trailing space characters. +""" + +ida_kernwin.CREATETB_ADV +""" +toolbar is for 'advanced mode' only +""" + +ida_kernwin.DP_BEFORE +""" +used with 'DP_INSIDE' . + +place src_form before dst_form in the tab bar instead of after +""" + +ida_kernwin.DP_BOTTOM +""" +Dock src_form below dest_form. +""" + +ida_kernwin.DP_FLOATING +""" +Make src_form floating. +""" + +ida_kernwin.DP_INSIDE +""" +Create a new tab bar with both src_form and dest_form. +""" + +ida_kernwin.DP_LEFT +""" +Dock src_form to the left of dest_form. +""" + +ida_kernwin.DP_RIGHT +""" +Dock src_form to the right of dest_form. +""" + +ida_kernwin.DP_TAB +""" +Place src_form into a tab next to dest_form, if dest_form is in a tab +bar (otherwise the same as 'DP_INSIDE' ) +""" + +ida_kernwin.DP_TOP +""" +Dock src_form above dest_form. +""" + +ida_kernwin.HIF_IDENTIFIER +""" +text is an identifier (i.e., when searching for the current highlight, +SEARCH_IDENT will be used) +""" + +ida_kernwin.HIF_LOCKED +""" +locked; clicking/moving the cursor around doesn't change the highlight +""" + +ida_kernwin.HIF_NOCASE +""" +case insensitive +""" + +ida_kernwin.HIF_REGISTER +""" +text represents a register (aliases/subregisters will be highlit as +well) +""" + +ida_kernwin.HIST_CMD +""" +commands +""" + +ida_kernwin.HIST_CMT +""" +comments +""" + +ida_kernwin.HIST_DIR +""" +directory names (text version only) +""" + +ida_kernwin.HIST_FILE +""" +file names +""" + +ida_kernwin.HIST_IDENT +""" +names +""" + +ida_kernwin.HIST_SEG +""" +segment names +""" + +ida_kernwin.HIST_SRCH +""" +search substrings +""" + +ida_kernwin.HIST_TYPE +""" +type declarations +""" + +ida_kernwin.IWID_ADDRWATCH +""" +address watches (47) +""" + +ida_kernwin.IWID_ALL +""" +mask +""" + +ida_kernwin.IWID_BPTS +""" +breakpoints (13) +""" + +ida_kernwin.IWID_CALLS +""" +function calls (11) +""" + +ida_kernwin.IWID_CALLS_CALLEES +""" +funcalls, callees (50) +""" + +ida_kernwin.IWID_CALLS_CALLERS +""" +funcalls, callers (49) +""" + +ida_kernwin.IWID_CALL_STACK +""" +call stack (17) +""" + +ida_kernwin.IWID_CHOOSER +""" +chooser (37) +""" + +ida_kernwin.IWID_CLI +""" +input line (33) +""" + +ida_kernwin.IWID_CMDPALCSR +""" +command palette (43) +""" + +ida_kernwin.IWID_CMDPALWIN +""" +command palette (44) +""" + +ida_kernwin.IWID_CPUREGS +""" +registers (40) +""" + +ida_kernwin.IWID_CUSTVIEW +""" +custom viewers (46) +""" + +ida_kernwin.IWID_CV_LINE_INFOS +""" +lineinfo widget (53) +""" + +ida_kernwin.IWID_DISASM +""" +disassembly views (29) +""" + +ida_kernwin.IWID_DISASM_ARROWS +""" +arrows widget (52) +""" + +ida_kernwin.IWID_DUMP +""" +hex dumps (30) +""" + +ida_kernwin.IWID_ENUMS +""" +enumerations (27) +""" + +ida_kernwin.IWID_EXPORTS +""" +exports (0) +""" + +ida_kernwin.IWID_FRAME +""" +function frame (25) +""" + +ida_kernwin.IWID_FUNCS +""" +functions (3) +""" + +ida_kernwin.IWID_IMPORTS +""" +imports (1) +""" + +ida_kernwin.IWID_LOCALS +""" +locals (35) +""" + +ida_kernwin.IWID_LOCTYPS +""" +local types (10) +""" + +ida_kernwin.IWID_MDVIEWCSR +""" +lumina md view (51) +""" + +ida_kernwin.IWID_MODULES +""" +modules (15) +""" + +ida_kernwin.IWID_NAMES +""" +names (2) +""" + +ida_kernwin.IWID_NAVBAND +""" +navigation band (26) +""" + +ida_kernwin.IWID_NOTEPAD +""" +notepad (31) +""" + +ida_kernwin.IWID_OUTPUT +""" +output (32) +""" + +ida_kernwin.IWID_PROBS +""" +problems (12) +""" + +ida_kernwin.IWID_PSEUDOCODE +""" +decompiler (48) +""" + +ida_kernwin.IWID_SCRIPTS_CSR +""" +recent scripts (58) +""" + +ida_kernwin.IWID_SEARCH +""" +search results (19) +""" + +ida_kernwin.IWID_SEGREGS +""" +segment registers (6) +""" + +ida_kernwin.IWID_SEGS +""" +segments (5) +""" + +ida_kernwin.IWID_SELS +""" +selectors (7) +""" + +ida_kernwin.IWID_SHORTCUTCSR +""" +shortcuts chooser (38) +""" + +ida_kernwin.IWID_SHORTCUTWIN +""" +shortcuts window (39) +""" + +ida_kernwin.IWID_SIGNS +""" +signatures (8) +""" + +ida_kernwin.IWID_SNIPPETS +""" +snippets (45) +""" + +ida_kernwin.IWID_SNIPPETS_CSR +""" +snippets chooser (57) +""" + +ida_kernwin.IWID_SO_OFFSETS +""" +stroff (42) +""" + +ida_kernwin.IWID_SO_STRUCTS +""" +stroff (41) +""" + +ida_kernwin.IWID_SRCPTHMAP_CSR +""" +mappings chooser (54) +""" + +ida_kernwin.IWID_SRCPTHUND_CSR +""" +undesired chooser (55) +""" + +ida_kernwin.IWID_STACK +""" +Alias. Some IWID_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.IWID_STKVIEW +""" +stack view (36) +""" + +ida_kernwin.IWID_STRINGS +""" +strings (4) +""" + +ida_kernwin.IWID_STRUCTS +""" +structures (28) +""" + +ida_kernwin.IWID_THREADS +""" +threads (14) +""" + +ida_kernwin.IWID_TILS +""" +type libraries (9) +""" + +ida_kernwin.IWID_TRACE +""" +trace view (16) +""" + +ida_kernwin.IWID_UNDOHIST +""" +Undo history (56) +""" + +ida_kernwin.IWID_WATCH +""" +watches (34) +""" + +ida_kernwin.IWID_XREFS +""" +xrefs (18) +""" + +ida_kernwin.MFF_FAST +""" +Execute code as soon as possible. this mode is ok for calling ui +related functions that do not query the database. +""" + +ida_kernwin.MFF_NOWAIT +""" +Do not wait for the request to be executed. the caller should ensure +that the request is not destroyed until the execution completes. if +not, the request will be ignored. 'execute_sync()' returns the request +id in this case. it can be used in 'cancel_exec_request()' . This flag +can be used to delay the code execution until the next UI loop run +even from the main thread. +""" + +ida_kernwin.MFF_READ +""" +Execute code only when ida is idle and it is safe to query the +database. this mode is recommended only for code that does not modify +the database. (nb: ida may be in the middle of executing another user +request, for example it may be waiting for him to enter values into a +modal dialog box) +""" + +ida_kernwin.MFF_WRITE +""" +Execute code only when ida is idle and it is safe to modify the +database. in particular, this flag will suspend execution if there is +a modal dialog box on the screen this mode can be used to call any ida +api function 'MFF_WRITE' implies 'MFF_READ' +""" + +ida_kernwin.SETMENU_APP +""" +add menu item after the specified path +""" + +ida_kernwin.SETMENU_FIRST +""" +add item to the beginning of menu +""" + +ida_kernwin.SETMENU_INS +""" +add menu item before the specified path (default) +""" + +ida_kernwin.UIJMP_ACTIVATE +""" +activate the new window +""" + +ida_kernwin.UIJMP_ANYVIEW +""" +jump in any ea_t-capable view +""" + +ida_kernwin.UIJMP_DONTPUSH +""" +in the navigation history + +do not remember the current address +""" + +ida_kernwin.UIJMP_IDAVIEW +""" +jump in idaview +""" + +ida_kernwin.UIJMP_IDAVIEW_NEW +""" +jump in new idaview +""" + +ida_kernwin.VES_SHIFT +""" +state & 1 => Shift is pressedstate & 2 => Alt is pressedstate & 4 => +Ctrl is pressedstate & 8 => Mouse left button is pressedstate & 16 => +Mouse right button is pressedstate & 32 => Mouse middle button is +pressedstate & 128 => Meta is pressed (OSX only) +""" +=== ida_kernwin EPYDOC INJECTIONS END === +Help on function COLSTR in module ida_lines: + +COLSTR(str, tag) + Utility function to create a colored line + @param str: The string + @param tag: Color tag constant. One of SCOLOR_XXXX + +Help on function add_extra_cmt in module ida_lines: + +add_extra_cmt(*args) + add_extra_cmt(ea, isprev, format) -> bool + + + Add anterior/posterior comment line(s). + + @param ea: linear address (C++: ea_t) + @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) + @param format: printf() style format string. may contain \n to denote + new lines. The resulting string should not contain + comment characters (;), the kernel will add them + automatically. (C++: const char *) + @return: true if success + +Help on function add_extra_line in module ida_lines: + +add_extra_line(*args) + add_extra_line(ea, isprev, format) -> bool + + + Add anterior/posterior non-comment line(s). + + @param ea: linear address (C++: ea_t) + @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) + @param format: printf() style format string. may contain \n to denote + new lines. (C++: const char *) + @return: true if success + +Help on function add_pgm_cmt in module ida_lines: + +add_pgm_cmt(*args) + add_pgm_cmt(format) -> bool + + + Add anterior comment line(s) at the start of program. + + @param format: printf() style format string. may contain \n to denote + new lines. The resulting string should not contain + comment characters (;), the kernel will add them + automatically. (C++: const char *) + @return: true if success + +Help on function add_sourcefile in module ida_lines: + +add_sourcefile(*args) + add_sourcefile(ea1, ea2, filename) -> bool + + + Mark a range of address as belonging to a source file. An address + range may belong only to one source file. A source file may be + represented by several address ranges. + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (excluded) + (C++: ea_t) + @param filename: name of source file. (C++: const char *) + @return: success + +Help on class bgcolors_t in module ida_lines: + +class bgcolors_t(__builtin__.object) + | Proxy of C++ bgcolors_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bgcolors_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | epilog_color + | bgcolors_t_epilog_color_get(self) -> bgcolor_t + | + | prolog_color + | bgcolors_t_prolog_color_get(self) -> bgcolor_t + | + | switch_color + | bgcolors_t_switch_color_get(self) -> bgcolor_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bgcolors_t(self) + +Help on function calc_bg_color in module ida_lines: + +calc_bg_color(*args) + calc_bg_color(ea) -> bgcolor_t + + + Get background color for line at 'ea' + + @param ea (C++: ea_t) + @return: RGB color + +Help on function calc_prefix_color in module ida_lines: + +calc_prefix_color(*args) + calc_prefix_color(ea) -> color_t + + + Get prefix color for line at 'ea' + + @param ea (C++: ea_t) + @return: Line prefix colors + +Help on function create_encoding_helper in module ida_lines: + +create_encoding_helper(*args) + create_encoding_helper(encidx=-1, nr=nr_once) -> encoder_t * + +Help on function del_extra_cmt in module ida_lines: + +del_extra_cmt(*args) + del_extra_cmt(ea, what) + +Help on function del_sourcefile in module ida_lines: + +del_sourcefile(*args) + del_sourcefile(ea) -> bool + + + Delete information about the source file. + + @param ea: linear address (C++: ea_t) + @return: success + +Help on function delete_extra_cmts in module ida_lines: + +delete_extra_cmts(*args) + delete_extra_cmts(ea, what) + +Help on function generate_disasm_line in module ida_lines: + +generate_disasm_line(*args) + generate_disasm_line(ea, flags=0) -> str + +Help on function generate_disassembly in module ida_lines: + +generate_disassembly(*args) + generate_disassembly(ea, max_lines, as_stack, notags) -> PyObject * + + + Generate disassembly lines (many lines) and put them into a buffer + + @param ea: address to generate disassembly for + @param max_lines: how many lines max to generate + @param as_stack: Display undefined items as 2/4/8 bytes + @return: + - None on failure + - tuple(most_important_line_number, tuple(lines)) : Returns a tuple containing + the most important line number and a tuple of generated lines + +Help on function get_extra_cmt in module ida_lines: + +get_extra_cmt(*args) + get_extra_cmt(ea, what) -> ssize_t + +Help on function get_first_free_extra_cmtidx in module ida_lines: + +get_first_free_extra_cmtidx(*args) + get_first_free_extra_cmtidx(ea, start) -> int + +Help on function get_sourcefile in module ida_lines: + +get_sourcefile(*args) + get_sourcefile(ea, bounds=None) -> char const * + + + Get name of source file occupying the given address. + + @param ea: linear address (C++: ea_t) + @param bounds: pointer to the output buffer with the address range for + the current file. May be NULL. (C++: range_t *) + @return: NULL if source file information is not found, otherwise + returns pointer to file name + +Help on function requires_color_esc in module ida_lines: + +requires_color_esc(c) + Checks if the given character requires escaping + @param c: character (string of one char) + @return: Boolean + + + Is the given char a color escape character? + +Help on function set_user_defined_prefix in module ida_lines: + +set_user_defined_prefix(*args) + set_user_defined_prefix(width, pycb) -> PyObject * + + + User-defined line-prefixes are displayed just after the autogenerated + line prefixes. In order to use them, the plugin should call the + following function to specify its width and contents. + @param width: the width of the user-defined prefix + @param callback: a get_user_defined_prefix callback to get the contents of the prefix. + Its arguments: + ea - linear address + lnnum - line number + indent - indent of the line contents (-1 means the default instruction) + indent and is used for instruction itself. see explanations for printf_line() + line - the line to be generated. the line usually contains color tags this argument + can be examined to decide whether to generated the prefix + It returns a buffer of size < bufsize + + In order to remove the callback before unloading the plugin, specify the width = 0 or the callback = None + +Help on function tag_addr in module ida_lines: + +tag_addr(*args) + tag_addr(ea) -> PyObject * + + + Insert an address mark into a string. + + @param ea: address to include (C++: ea_t) + +Help on function tag_advance in module ida_lines: + +tag_advance(*args) + tag_advance(line, cnt) -> int + + + Move pointer to a 'line' to 'cnt' positions right. Take into account + escape sequences. + + @param line: pointer to string (C++: const char *) + @param cnt: number of positions to move right (C++: int) + @return: moved pointer + +Help on function tag_remove in module ida_lines: + +tag_remove(*args) + tag_remove(nonnul_instr) -> PyObject * + + + Remove color escape sequences from a string + @param colstr: the colored string with embedded tags + @return: a new string w/o the tags + +Help on function tag_skipcode in module ida_lines: + +tag_skipcode(*args) + tag_skipcode(line) -> int + + + Skip one color code. This function should be used if you are + interested in color codes and want to analyze all of them. Otherwise + 'tag_skipcodes()' function is better since it will skip all colors at + once. This function will skip the current color code if there is one. + If the current symbol is not a color code, it will return the input. + + @param line (C++: const char *) + @return: moved pointer + +Help on function tag_skipcodes in module ida_lines: + +tag_skipcodes(*args) + tag_skipcodes(line) -> int + + + Move the pointer past all color codes. + + @param line: can't be NULL (C++: const char *) + @return: moved pointer, can't be NULL + +Help on function tag_strlen in module ida_lines: + +tag_strlen(*args) + tag_strlen(line) -> ssize_t + + + Calculate length of a colored string This function computes the length + in unicode codepoints of a line + + @param line (C++: const char *) + @return: the number of codepoints in the line, or -1 on error + +Help on function update_extra_cmt in module ida_lines: + +update_extra_cmt(*args) + update_extra_cmt(ea, what, str) + +=== ida_lines EPYDOC INJECTIONS === +ida_lines.COLOR_ADDR_SIZE +""" +Size of a tagged address (see 'COLOR_ADDR' ) +""" + +ida_lines.COLOR_BG_MAX +""" +Max color number. +""" + +ida_lines.COLOR_CODE +""" +Single instruction. +""" + +ida_lines.COLOR_CURITEM +""" +Current item. +""" + +ida_lines.COLOR_CURLINE +""" +Current line. +""" + +ida_lines.COLOR_DATA +""" +Data bytes. +""" + +ida_lines.COLOR_DEFAULT +""" +Default. +""" + +ida_lines.COLOR_ESC +""" +Escape character (Quote next character). This is needed to output '\\1' +and '\\2' characters. +""" + +ida_lines.COLOR_EXTERN +""" +External name definition segment. +""" + +ida_lines.COLOR_HIDLINE +""" +Hidden line. +""" + +ida_lines.COLOR_INV +""" +Escape character (Inverse foreground and background colors). This +escape character has no corresponding 'COLOR_OFF' . Its action +continues until the next 'COLOR_INV' or end of line. +""" + +ida_lines.COLOR_LIBFUNC +""" +Library function. +""" + +ida_lines.COLOR_LUMFUNC +""" +Lumina function. +""" + +ida_lines.COLOR_OFF +""" +Followed by a color code ( 'color_t' ). + +Escape character (OFF). +""" + +ida_lines.COLOR_ON +""" +Followed by a color code ( 'color_t' ). + +Escape character (ON). +""" + +ida_lines.COLOR_REGFUNC +""" +Regular function. +""" + +ida_lines.COLOR_SELECTED +""" +Selected. +""" + +ida_lines.COLOR_UNKNOWN +""" +Unexplored byte. +""" + +ida_lines.SCOLOR_ADDR +""" +Hidden address mark. +""" + +ida_lines.SCOLOR_ALTOP +""" +Alternative operand. +""" + +ida_lines.SCOLOR_ASMDIR +""" +Assembler directive. +""" + +ida_lines.SCOLOR_AUTOCMT +""" +Automatic comment. +""" + +ida_lines.SCOLOR_BINPREF +""" +Binary line prefix bytes. +""" + +ida_lines.SCOLOR_CHAR +""" +Char constant in instruction. +""" + +ida_lines.SCOLOR_CNAME +""" +Regular code name. +""" + +ida_lines.SCOLOR_CODNAME +""" +Dummy code name. +""" + +ida_lines.SCOLOR_COLLAPSED +""" +Collapsed line. +""" + +ida_lines.SCOLOR_CREF +""" +Code reference. +""" + +ida_lines.SCOLOR_CREFTAIL +""" +Code reference to tail byte. +""" + +ida_lines.SCOLOR_DATNAME +""" +Dummy Data Name. +""" + +ida_lines.SCOLOR_DCHAR +""" +Char constant in data directive. +""" + +ida_lines.SCOLOR_DEFAULT +""" +Default. +""" + +ida_lines.SCOLOR_DEMNAME +""" +Demangled Name. +""" + +ida_lines.SCOLOR_DNAME +""" +Regular Data Name. +""" + +ida_lines.SCOLOR_DNUM +""" +Numeric constant in data directive. +""" + +ida_lines.SCOLOR_DREF +""" +Data reference. +""" + +ida_lines.SCOLOR_DREFTAIL +""" +Data reference to tail byte. +""" + +ida_lines.SCOLOR_DSTR +""" +String constant in data directive. +""" + +ida_lines.SCOLOR_ERROR +""" +Error or problem. +""" + +ida_lines.SCOLOR_ESC +""" +Escape character (Quote next character) +""" + +ida_lines.SCOLOR_EXTRA +""" +Extra line. +""" + +ida_lines.SCOLOR_HIDNAME +""" +Hidden name. +""" + +ida_lines.SCOLOR_IMPNAME +""" +Imported name. +""" + +ida_lines.SCOLOR_INSN +""" +Instruction. +""" + +ida_lines.SCOLOR_INV +""" +Escape character (Inverse colors) +""" + +ida_lines.SCOLOR_KEYWORD +""" +Keywords. +""" + +ida_lines.SCOLOR_LIBNAME +""" +Library function name. +""" + +ida_lines.SCOLOR_LOCNAME +""" +Local variable name. +""" + +ida_lines.SCOLOR_MACRO +""" +Macro. +""" + +ida_lines.SCOLOR_NUMBER +""" +Numeric constant in instruction. +""" + +ida_lines.SCOLOR_OFF +""" +Escape character (OFF) +""" + +ida_lines.SCOLOR_ON +""" +Escape character (ON) +""" + +ida_lines.SCOLOR_PREFIX +""" +Line prefix. +""" + +ida_lines.SCOLOR_REG +""" +Register name. +""" + +ida_lines.SCOLOR_REGCMT +""" +Regular comment. +""" + +ida_lines.SCOLOR_RPTCMT +""" +Repeatable comment (defined not here) +""" + +ida_lines.SCOLOR_SEGNAME +""" +Segment name. +""" + +ida_lines.SCOLOR_STRING +""" +String constant in instruction. +""" + +ida_lines.SCOLOR_SYMBOL +""" +Punctuation. +""" + +ida_lines.SCOLOR_UNAME +""" +Regular unknown name. +""" + +ida_lines.SCOLOR_UNKNAME +""" +Dummy unknown name. +""" + +ida_lines.SCOLOR_VOIDOP +""" +Void operand. +""" +=== ida_lines EPYDOC INJECTIONS END === +Help on function base2file in module ida_loader: + +base2file(*args) + base2file(fp, pos, ea1, ea2) -> int + + + Unload database to a binary file. This function works for wide byte + processors too. + + @param fp: pointer to file (C++: FILE *) + @param pos: position in the file (C++: qoff64_t) + @param ea1: range of source linear addresses (C++: ea_t) + @param ea2: range of source linear addresses (C++: ea_t) + @return: 1-ok(always), write error leads to immediate exit + +Help on function build_snapshot_tree in module ida_loader: + +build_snapshot_tree(*args) + build_snapshot_tree(root) -> bool + + + Build the snapshot tree. + + @param root: snapshot root that will contain the snapshot tree + elements. (C++: snapshot_t *) + @return: success + +Help on function clr_database_flag in module ida_loader: + +clr_database_flag(*args) + clr_database_flag(dbfl) + +Help on function extract_module_from_archive in module ida_loader: + +extract_module_from_archive(*args) + extract_module_from_archive(fname, is_remote=False) -> PyObject * + + + Extract a module for an archive file. Parse an archive file, show the + list of modules to the user, allow him to select a module, extract the + selected module to a file (if the extract module is an archive, repeat + the process). This function can handle ZIP, AR, AIXAR, OMFLIB files. + The temporary file will be automatically deleted by IDA at the end. + + @param is_remote: is the input file remote? (C++: bool) + +Help on function file2base in module ida_loader: + +file2base(*args) + file2base(li, pos, ea1, ea2, patchable) -> int + + + Load portion of file into the database. This function will include + (ea1..ea2) into the addressing space of the program (make it enabled) + + @param li: pointer of input source (C++: linput_t *) + @param pos: position in the file (C++: qoff64_t) + @param ea1: range of destination linear addresses (C++: ea_t) + @param ea2: range of destination linear addresses (C++: ea_t) + @param patchable: should the kernel remember correspondence of file + offsets to linear addresses. (C++: int) + +Help on function find_plugin in module ida_loader: + +find_plugin(*args) + find_plugin(name, load_if_needed=False) -> plugin_t * + + + Find a user-defined plugin and optionally load it. + + @param name: short plugin name without path and extension, or absolute + path to the file name (C++: const char *) + @param load_if_needed: if the plugin is not present in the memory, try + to load it (C++: bool) + @return: pointer to plugin description block + +Help on function flush_buffers in module ida_loader: + +flush_buffers(*args) + flush_buffers() -> int + + + Flush buffers to the disk. + +Help on function gen_exe_file in module ida_loader: + +gen_exe_file(*args) + gen_exe_file(fp) -> int + + + Generate an exe file (unload the database in binary form). + + @param fp (C++: FILE *) + @return: fp the output file handle. if fp == NULL then return: 1: + can generate an executable file 0: can't generate an + executable file + +Help on function gen_file in module ida_loader: + +gen_file(*args) + gen_file(otype, fp, ea1, ea2, flags) -> int + + + Generate an output file. 'OFILE_EXE' : + + @param otype: type of output file. (C++: ofile_type_t) + @param fp: the output file handle (C++: FILE *) + @param ea1: start address. For some file types this argument is + ignored (C++: ea_t) + @param ea2: end address. For some file types this argument is ignored + as usual in ida, the end address of the range is not + included (C++: ea_t) + @param flags: Generate file flags (C++: int) + @return: number of the generated lines. -1 if an error occurred + +Help on function get_basic_file_type in module ida_loader: + +get_basic_file_type(*args) + get_basic_file_type(li) -> filetype_t + + + Get the input file type. This function can recognize libraries and zip + files. + + @param li (C++: linput_t *) + +Help on function get_elf_debug_file_directory in module ida_loader: + +get_elf_debug_file_directory(*args) + get_elf_debug_file_directory() -> char const * + + + Get the value of the ELF_DEBUG_FILE_DIRECTORY configuration directive. + +Help on function get_file_type_name in module ida_loader: + +get_file_type_name(*args) + get_file_type_name() -> str + + + Get name of the current file type. The current file type is kept in + \inf{filetype}. + + @return: size of answer, this function always succeeds + +Help on function get_fileregion_ea in module ida_loader: + +get_fileregion_ea(*args) + get_fileregion_ea(offset) -> ea_t + + + Get linear address which corresponds to the specified input file + offset. If can't be found, return 'BADADDR' + + @param offset (C++: qoff64_t) + +Help on function get_fileregion_offset in module ida_loader: + +get_fileregion_offset(*args) + get_fileregion_offset(ea) -> qoff64_t + + + Get offset in the input file which corresponds to the given ea. If the + specified ea can't be mapped into the input file offset, return -1. + + @param ea (C++: ea_t) + +Help on function get_path in module ida_loader: + +get_path(*args) + get_path(pt) -> char const * + + + Get the file path + + @param pt: file path type Types of the file pathes (C++: path_type_t) + @return: file path, never returns NULL + +Help on function get_plugin_options in module ida_loader: + +get_plugin_options(*args) + get_plugin_options(plugin) -> char const * + + + Get plugin options from the command line. If the user has specified + the options in the -Oplugin_name:options format, them this function + will return the 'options' part of it The 'plugin' parameter should + denote the plugin name Returns NULL if there we no options specified + + @param plugin (C++: const char *) + +Help on class idp_desc_t in module ida_loader: + +class idp_desc_t(__builtin__.object) + | Proxy of C++ idp_desc_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idp_desc_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | checked + | idp_desc_t_checked_get(self) -> bool + | + | family + | idp_desc_t_family_get(self) -> qstring * + | + | is_script + | idp_desc_t_is_script_get(self) -> bool + | + | mtime + | idp_desc_t_mtime_get(self) -> time_t + | + | names + | idp_desc_t_names_get(self) -> idp_names_t * + | + | path + | idp_desc_t_path_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idp_desc_t(self) + +Help on class idp_name_t in module ida_loader: + +class idp_name_t(__builtin__.object) + | Proxy of C++ idp_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idp_name_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hidden + | idp_name_t_hidden_get(self) -> bool + | + | lname + | idp_name_t_lname_get(self) -> qstring * + | + | sname + | idp_name_t_sname_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_idp_name_t(self) + +Help on function is_database_flag in module ida_loader: + +is_database_flag(*args) + is_database_flag(dbfl) -> bool + + + Get the current database flag + + @param dbfl: flag Database flags (C++: uint32) + @return: the state of the flag (set or cleared) + +Help on function is_trusted_idb in module ida_loader: + +is_trusted_idb(*args) + is_trusted_idb() -> bool + + + Is the database considered as trusted? + +Help on function load_and_run_plugin in module ida_loader: + +load_and_run_plugin(*args) + load_and_run_plugin(name, arg) -> bool + + + Load & run a plugin. + + + @param name (C++: const char *) + @param arg (C++: size_t) + +Help on function load_binary_file in module ida_loader: + +load_binary_file(*args) + load_binary_file(filename, li, _neflags, fileoff, basepara, binoff, nbytes) -> bool + + + Load a binary file into the database. This function usually is called + from ui. + + @param filename: the name of input file as is (if the input file is + from library, then this is the name from the library) + (C++: const char *) + @param li: loader input source (C++: linput_t *) + @param _neflags: Load file flags . For the first file, the flag + NEF_FIRST must be set. (C++: ushort) + @param fileoff: Offset in the input file (C++: qoff64_t) + @param basepara: Load address in paragraphs (C++: ea_t) + @param binoff: Load offset (load_address=(basepara<<4)+binoff) (C++: + ea_t) + @param nbytes: Number of bytes to load from the file. 0: up to the + end of the file (C++: uint64) + +Help on function load_ids_module in module ida_loader: + +load_ids_module(*args) + load_ids_module(fname) -> int + + + Load and apply IDS file. This function loads the specified IDS file + and applies it to the database. If the program imports functions from + a module with the same name as the name of the ids file being loaded, + then only functions from this module will be affected. Otherwise (i.e. + when the program does not import a module with this name) any function + in the program may be affected. + + @param fname: name of file to apply (C++: char *) + +Help on function load_plugin in module ida_loader: + +load_plugin(*args) + load_plugin(name) -> PyObject * + + + Loads a plugin + @return: + - None if plugin could not be loaded + - An opaque object representing the loaded plugin + +Help on class loader_t in module ida_loader: + +class loader_t(__builtin__.object) + | Proxy of C++ loader_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> loader_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | loader_t_flags_get(self) -> uint32 + | + | thisown + | The membership flag + | + | version + | loader_t_version_get(self) -> uint32 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_loader_t(self) + +Help on function mem2base in module ida_loader: + +mem2base(*args) + mem2base(py_mem, ea, fpos=-1) -> int + + + Load database from the memory. + @param mem: the buffer + @param ea: start linear addresses + @param fpos: position in the input file the data is taken from. + if == -1, then no file position correspond to the data. + @return: + - Returns zero if the passed buffer was not a string + - Otherwise 1 is returned + +Help on class plugin_info_t in module ida_loader: + +class plugin_info_t(__builtin__.object) + | Proxy of C++ plugin_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> plugin_info_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | arg + | plugin_info_t_arg_get(self) -> size_t + | + | comment + | plugin_info_t_comment_get(self) -> char * + | + | dllmem + | plugin_info_t_dllmem_get(self) -> idadll_t * + | + | entry + | plugin_info_t_entry_get(self) -> plugin_t * + | + | flags + | plugin_info_t_flags_get(self) -> int + | + | hotkey + | plugin_info_t_hotkey_get(self) -> ushort + | + | name + | plugin_info_t_name_get(self) -> char * + | + | next + | plugin_info_t_next_get(self) -> plugin_info_t + | + | org_hotkey + | plugin_info_t_org_hotkey_get(self) -> ushort + | + | org_name + | plugin_info_t_org_name_get(self) -> char * + | + | path + | plugin_info_t_path_get(self) -> char * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_plugin_info_t(self) + +Help on function process_archive in module ida_loader: + +process_archive(*args) + process_archive(temp_file, li, module_name, neflags, defmember, loader) -> str + + + Calls 'loader_t::process_archive()' For parameters and return value + description look at 'loader_t::process_archive()' . Additional + parameter: + + @param temp_file (C++: qstring *) + @param li (C++: linput_t *) + @param module_name (C++: qstring *) + @param neflags (C++: ushort *) + @param defmember (C++: const char *) + @param loader: pointer to load_info_t structure. (C++: const + load_info_t *) + +Help on class qvector_snapshotvec_t in module ida_loader: + +class qvector_snapshotvec_t(__builtin__.object) + | Proxy of C++ qvector< snapshot_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> snapshot_t + | + | __init__(self, *args) + | __init__(self) -> qvector_snapshotvec_t + | __init__(self, x) -> qvector_snapshotvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> snapshot_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< snapshot_t * >::iterator + | begin(self) -> qvector< snapshot_t * >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< snapshot_t * >::iterator + | end(self) -> qvector< snapshot_t * >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< snapshot_t * >::iterator + | erase(self, first, last) -> qvector< snapshot_t * >::iterator + | + | extract(self, *args) + | extract(self) -> snapshot_t ** + | + | find(self, *args) + | find(self, x) -> qvector< snapshot_t * >::iterator + | find(self, x) -> qvector< snapshot_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< snapshot_t * >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> snapshot_t *& + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qvector_snapshotvec_t(self) + +Help on function reload_file in module ida_loader: + +reload_file(*args) + reload_file(file, is_remote) -> bool + + + Reload the input file. This function reloads the byte values from the + input file. It doesn't modify the segmentation, names, comments, etc. + + @param file: name of the input file. if file == NULL then returns: + 1: can reload the input file 0: can't reload the input + file (C++: const char *) + @param is_remote: is the file located on a remote computer with the + debugger server? (C++: bool) + @return: success + +Help on function run_plugin in module ida_loader: + +run_plugin(*args) + run_plugin(plg, arg) -> bool + + + Runs a plugin + @param plg: A plugin object (returned by load_plugin()) + @return: Boolean + +Help on function save_database in module ida_loader: + +save_database(*args) + save_database(outfile, flags, root=None, attr=None) -> bool + + + Save current database using a new file name.when both root and attr + are not NULL then the snapshot attributes will be updated, otherwise + the snapshot attributes will be inherited from the current database. + + @param outfile: output database file name (C++: const char *) + @param flags: Database flags (C++: uint32) + @param root: optional: snapshot tree root. (C++: const snapshot_t *) + @param attr: optional: snapshot attributes (C++: const snapshot_t *) + @return: success + +Help on function set_database_flag in module ida_loader: + +set_database_flag(*args) + set_database_flag(dbfl, cnd=True) + + + Set or clear database flag + + @param dbfl: flag Database flags (C++: uint32) + @param cnd: set if true or clear flag otherwise (C++: bool) + +Help on function set_path in module ida_loader: + +set_path(*args) + set_path(pt, path) + + + Set the file path + + @param pt: file path type Types of the file pathes (C++: path_type_t) + @param path: new file path, use NULL or empty string to clear the file + path (C++: const char *) + +Help on class snapshot_t in module ida_loader: + +class snapshot_t(__builtin__.object) + | Proxy of C++ snapshot_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> snapshot_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | children + | snapshot_t_children_get(self) -> qvector_snapshotvec_t + | + | desc + | snapshot_t_desc_get(self) -> char [128] + | + | filename + | snapshot_t_filename_get(self) -> char [QMAXPATH] + | + | flags + | snapshot_t_flags_get(self) -> uint16 + | + | id + | snapshot_t_id_get(self) -> qtime64_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_snapshot_t(self) + +=== ida_loader EPYDOC INJECTIONS === +ida_loader.ACCEPT_ARCHIVE +""" +Specify that a file format is served by archive loader See +'loader_t::accept_file' +""" + +ida_loader.ACCEPT_CONTINUE +""" +Specify that the function must be called another time See +'loader_t::accept_file' +""" + +ida_loader.ACCEPT_FIRST +""" +Specify that a file format should be place first in "load file" dialog +box. See 'loader_t::accept_file' +""" + +ida_loader.DBFL_BAK +""" +create backup file (if !DBFL_KILL) +""" + +ida_loader.DBFL_COMP +""" +collect garbage +""" + +ida_loader.DBFL_KILL +""" +delete unpacked database +""" + +ida_loader.DBFL_TEMP +""" +temporary database +""" + +ida_loader.FILEREG_NOTPATCHABLE +""" +form in the file. + +the data is kept in some encoded +""" + +ida_loader.FILEREG_PATCHABLE +""" +means that the input file may be patched (i.e. no compression, no +iterated data, etc) +""" + +ida_loader.GENFLG_ASMINC +""" + 'OFILE_ASM' , 'OFILE_LST' : gen information only about types +""" + +ida_loader.GENFLG_ASMTYPE +""" + 'OFILE_ASM' , 'OFILE_LST' : gen information about types too +""" + +ida_loader.GENFLG_GENHTML +""" + 'OFILE_ASM' , 'OFILE_LST' : generate html ( 'ui_genfile_callback' +will be used) +""" + +ida_loader.GENFLG_IDCTYPE +""" + 'OFILE_IDC' : gen only information about types +""" + +ida_loader.GENFLG_MAPDMNG +""" + 'OFILE_MAP' : demangle names +""" + +ida_loader.GENFLG_MAPLOC +""" + 'OFILE_MAP' : include local names +""" + +ida_loader.GENFLG_MAPNAME +""" + 'OFILE_MAP' : include dummy names +""" + +ida_loader.GENFLG_MAPSEG +""" + 'OFILE_MAP' : generate map of segments +""" + +ida_loader.LDRF_RELOAD +""" +loader recognizes 'NEF_RELOAD' flag +""" + +ida_loader.LDRF_REQ_PROC +""" +Requires a processor to be set. if this bit is not set, load_file() +must call set_processor_type(..., SETPROC_LOADER) +""" + +ida_loader.MAX_DATABASE_DESCRIPTION +""" +Maximum database snapshot description length. +""" + +ida_loader.NEF_CODE +""" +load as a code segment + +for 'load_binary_file()' : +""" + +ida_loader.NEF_FILL +""" +Fill segment gaps. +""" + +ida_loader.NEF_FIRST +""" +into the database. + +This is the first file loaded +""" + +ida_loader.NEF_FLAT +""" +Autocreate FLAT group (PE) +""" + +ida_loader.NEF_IMPS +""" +Create import segment. +""" + +ida_loader.NEF_LALL +""" +Load all segments without questions. +""" + +ida_loader.NEF_LOPT +""" +Display additional loader options dialog. +""" + +ida_loader.NEF_MAN +""" +Manual load. +""" + +ida_loader.NEF_MINI +""" +Create mini database (do not copy segment bytes from the input file; +use only the file header metadata) +""" + +ida_loader.NEF_NAME +""" +Rename entries. +""" + +ida_loader.NEF_RELOAD +""" +reload the file at the same place: - don't create segmentsdon't create +fixup infodon't import segmentsetc load only the bytes into the base. +a loader should have 'LDRF_RELOAD' bit set +""" + +ida_loader.NEF_RSCS +""" +Load resources. +""" + +ida_loader.NEF_SEGS +""" +Create segments. +""" + +ida_loader.PLUGIN_DLL +""" +Pattern to find plugin files. +""" + +ida_loader.SSF_AUTOMATIC +""" +automatic snapshot +""" + +ida_loader.SSUF_DESC +""" +Update the description. +""" + +ida_loader.SSUF_FLAGS +""" +Update the flags. +""" + +ida_loader.SSUF_PATH +""" +Update the path. +""" +=== ida_loader EPYDOC INJECTIONS END === +Help on class bookmarks_t in module ida_moves: + +class bookmarks_t(__builtin__.object) + | Proxy of C++ bookmarks_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | erase(*args) + | erase(e, index, ud) -> bool + | + | find_index(*args) + | find_index(e, ud) -> uint32 + | + | get(*args) + | get(out_entry, out_desc, index, ud) -> bool + | + | get_desc(*args) + | get_desc(e, index, ud) -> bool + | + | mark(*args) + | mark(e, index, title, desc, ud) -> uint32 + | + | size(*args) + | size(e, ud) -> uint32 + | + | ---------------------------------------------------------------------- + | 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 + +Help on function bookmarks_t_erase in module ida_moves: + +bookmarks_t_erase(*args) + bookmarks_t_erase(e, index, ud) -> bool + +Help on function bookmarks_t_find_index in module ida_moves: + +bookmarks_t_find_index(*args) + bookmarks_t_find_index(e, ud) -> uint32 + +Help on function bookmarks_t_get in module ida_moves: + +bookmarks_t_get(*args) + bookmarks_t_get(out_entry, out_desc, index, ud) -> bool + +Help on function bookmarks_t_get_desc in module ida_moves: + +bookmarks_t_get_desc(*args) + bookmarks_t_get_desc(e, index, ud) -> str + +Help on function bookmarks_t_mark in module ida_moves: + +bookmarks_t_mark(*args) + bookmarks_t_mark(e, index, title, desc, ud) -> uint32 + +Help on function bookmarks_t_size in module ida_moves: + +bookmarks_t_size(*args) + bookmarks_t_size(e, ud) -> uint32 + +Help on class graph_location_info_t in module ida_moves: + +class graph_location_info_t(__builtin__.object) + | Proxy of C++ graph_location_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> graph_location_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | orgx + | graph_location_info_t_orgx_get(self) -> double + | + | orgy + | graph_location_info_t_orgy_get(self) -> double + | + | thisown + | The membership flag + | + | zoom + | graph_location_info_t_zoom_get(self) -> double + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_graph_location_info_t(self) + +Help on class lochist_entry_t in module ida_moves: + +class lochist_entry_t(__builtin__.object) + | Proxy of C++ lochist_entry_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lochist_entry_t + | __init__(self, p, r) -> lochist_entry_t + | __init__(self, other) -> lochist_entry_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | acquire_place(self, *args) + | acquire_place(self, in_p) + | + | is_valid(self, *args) + | is_valid(self) -> bool + | + | place(self, *args) + | place(self) -> place_t + | place(self) -> place_t + | + | renderer_info(self, *args) + | renderer_info(self) -> renderer_info_t + | renderer_info(self) -> renderer_info_t + | + | set_place(self, *args) + | set_place(self, p) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | plce + | lochist_entry_t_plce_get(self) -> place_t + | + | rinfo + | lochist_entry_t_rinfo_get(self) -> renderer_info_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lochist_entry_t(self) + +Help on class lochist_t in module ida_moves: + +class lochist_t(__builtin__.object) + | Proxy of C++ lochist_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lochist_t + | + | __repr__ = _swig_repr(self) + | + | back(self, *args) + | back(self, cnt, try_to_unhide) -> bool + | + | clear(self, *args) + | clear(self) + | + | current_index(self, *args) + | current_index(self) -> uint32 + | + | fwd(self, *args) + | fwd(self, cnt, try_to_unhide) -> bool + | + | get(self, *args) + | get(self, out, index) -> bool + | + | get_current(self, *args) + | get_current(self) -> lochist_entry_t + | + | get_place_id(self, *args) + | get_place_id(self) -> int + | + | get_template_place(self, *args) + | get_template_place(self) -> place_t + | + | init(self, *args) + | init(self, stream_name, _defpos, _ud, _flags) -> bool + | + | is_history_enabled(self, *args) + | is_history_enabled(self) -> bool + | + | jump(self, *args) + | jump(self, try_to_unhide, e) + | + | netcode(self, *args) + | netcode(self) -> nodeidx_t + | + | save(self, *args) + | save(self) + | + | seek(self, *args) + | seek(self, index, try_to_unhide) -> bool + | + | set(self, *args) + | set(self, index, e) + | + | set_current(self, *args) + | set_current(self, e) + | + | size(self, *args) + | size(self) -> uint32 + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lochist_t(self) + +Help on class renderer_info_pos_t in module ida_moves: + +class renderer_info_pos_t(__builtin__.object) + | Proxy of C++ renderer_info_pos_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_info_pos_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cx + | renderer_info_pos_t_cx_get(self) -> short + | + | cy + | renderer_info_pos_t_cy_get(self) -> short + | + | node + | renderer_info_pos_t_node_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_renderer_info_pos_t(self) + +Help on class renderer_info_t in module ida_moves: + +class renderer_info_t(__builtin__.object) + | Proxy of C++ renderer_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | gli + | renderer_info_t_gli_get(self) -> graph_location_info_t + | + | pos + | renderer_info_t_pos_get(self) -> renderer_info_pos_t + | + | rtype + | renderer_info_t_rtype_get(self) -> tcc_renderer_type_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_renderer_info_t(self) + +Help on class segm_move_info_t in module ida_moves: + +class segm_move_info_t(__builtin__.object) + | Proxy of C++ segm_move_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _from=0, _to=0, _sz=0) -> segm_move_info_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _from + | segm_move_info_t__from_get(self) -> ea_t + | + | size + | segm_move_info_t_size_get(self) -> size_t + | + | thisown + | The membership flag + | + | to + | segm_move_info_t_to_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_segm_move_info_t(self) + +Help on class segm_move_info_vec_t in module ida_moves: + +class segm_move_info_vec_t(__builtin__.object) + | Proxy of C++ qvector< segm_move_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> segm_move_info_t + | + | __init__(self, *args) + | __init__(self) -> segm_move_info_vec_t + | __init__(self, x) -> segm_move_info_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> segm_move_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> segm_move_info_t + | begin(self) -> segm_move_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> segm_move_info_t + | end(self) -> segm_move_info_t + | + | erase(self, *args) + | erase(self, it) -> segm_move_info_t + | erase(self, first, last) -> segm_move_info_t + | + | extract(self, *args) + | extract(self) -> segm_move_info_t + | + | find(self, *args) + | find(self, x) -> segm_move_info_t + | find(self, x) -> segm_move_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=segm_move_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> segm_move_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> segm_move_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_segm_move_info_vec_t(self) + +Help on class segm_move_infos_t in module ida_moves: + +class segm_move_infos_t(segm_move_info_vec_t) + | Proxy of C++ segm_move_infos_t class. + | + | Method resolution order: + | segm_move_infos_t + | segm_move_info_vec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> segm_move_infos_t + | + | __repr__ = _swig_repr(self) + | + | find(self, *args) + | find(self, ea) -> segm_move_info_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_segm_move_infos_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from segm_move_info_vec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> segm_move_info_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> segm_move_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> segm_move_info_t + | begin(self) -> segm_move_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> segm_move_info_t + | end(self) -> segm_move_info_t + | + | erase(self, *args) + | erase(self, it) -> segm_move_info_t + | erase(self, first, last) -> segm_move_info_t + | + | extract(self, *args) + | extract(self) -> segm_move_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=segm_move_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> segm_move_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> segm_move_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from segm_move_info_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function get_switch_info in module ida_nalt: + +get_switch_info(*args) + get_switch_info(out, ea) -> ssize_t + +Help on function add_encoding in module ida_nalt: + +add_encoding(*args) + add_encoding(encoding) -> int + + + Add a new encoding (e.g. "UTF-8"). + + @param encoding (C++: const char *) + @return: its index (1-based) if it's already in the list, return its + index + +Help on class array_parameters_t in module ida_nalt: + +class array_parameters_t(__builtin__.object) + | Proxy of C++ array_parameters_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> array_parameters_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | alignment + | array_parameters_t_alignment_get(self) -> int32 + | + | flags + | array_parameters_t_flags_get(self) -> int32 + | + | lineitems + | array_parameters_t_lineitems_get(self) -> int32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_array_parameters_t(self) + +Help on function clr__bnot0 in module ida_nalt: + +clr__bnot0(*args) + clr__bnot0(ea) + +Help on function clr__bnot1 in module ida_nalt: + +clr__bnot1(*args) + clr__bnot1(ea) + +Help on function clr__invsign0 in module ida_nalt: + +clr__invsign0(*args) + clr__invsign0(ea) + +Help on function clr__invsign1 in module ida_nalt: + +clr__invsign1(*args) + clr__invsign1(ea) + +Help on function clr_abits in module ida_nalt: + +clr_abits(*args) + clr_abits(ea, bits) + +Help on function clr_align_flow in module ida_nalt: + +clr_align_flow(*args) + clr_align_flow(ea) + +Help on function clr_colored_item in module ida_nalt: + +clr_colored_item(*args) + clr_colored_item(ea) + +Help on function clr_fixed_spd in module ida_nalt: + +clr_fixed_spd(*args) + clr_fixed_spd(ea) + +Help on function clr_has_lname in module ida_nalt: + +clr_has_lname(*args) + clr_has_lname(ea) + +Help on function clr_has_ti in module ida_nalt: + +clr_has_ti(*args) + clr_has_ti(ea) + +Help on function clr_has_ti0 in module ida_nalt: + +clr_has_ti0(*args) + clr_has_ti0(ea) + +Help on function clr_has_ti1 in module ida_nalt: + +clr_has_ti1(*args) + clr_has_ti1(ea) + +Help on function clr_libitem in module ida_nalt: + +clr_libitem(*args) + clr_libitem(ea) + +Help on function clr_lzero0 in module ida_nalt: + +clr_lzero0(*args) + clr_lzero0(ea) + +Help on function clr_lzero1 in module ida_nalt: + +clr_lzero1(*args) + clr_lzero1(ea) + +Help on function clr_noret in module ida_nalt: + +clr_noret(*args) + clr_noret(ea) + +Help on function clr_notcode in module ida_nalt: + +clr_notcode(*args) + clr_notcode(ea) + + + Clear not-code mark. + + + @param ea (C++: ea_t) + +Help on function clr_notproc in module ida_nalt: + +clr_notproc(*args) + clr_notproc(ea) + +Help on function clr_retfp in module ida_nalt: + +clr_retfp(*args) + clr_retfp(ea) + +Help on function clr_terse_struc in module ida_nalt: + +clr_terse_struc(*args) + clr_terse_struc(ea) + +Help on function clr_tilcmt in module ida_nalt: + +clr_tilcmt(*args) + clr_tilcmt(ea) + +Help on function clr_usemodsp in module ida_nalt: + +clr_usemodsp(*args) + clr_usemodsp(ea) + +Help on function clr_usersp in module ida_nalt: + +clr_usersp(*args) + clr_usersp(ea) + +Help on function clr_userti in module ida_nalt: + +clr_userti(*args) + clr_userti(ea) + +Help on function clr_zstroff in module ida_nalt: + +clr_zstroff(*args) + clr_zstroff(ea) + +Help on class custom_data_type_ids_fids_array in module ida_nalt: + +class custom_data_type_ids_fids_array(__builtin__.object) + | Proxy of C++ wrapped_array_t< int16,8 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> short const & + | + | __init__(self, *args) + | __init__(self, data) -> custom_data_type_ids_fids_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | custom_data_type_ids_fids_array_data_get(self) -> short (&)[8] + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = custom_data_type_ids_t + | + | __repr__ = _swig_repr(self) + | + | _custom_data_type_ids_t__getFids = __getFids(self, *args) + | __getFids(self) -> custom_data_type_ids_fids_array + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dtid + | custom_data_type_ids_t_dtid_get(self) -> int16 + | + | fids + | __getFids(self) -> custom_data_type_ids_fids_array + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_custom_data_type_ids_t(self) + +Help on function dbg_get_input_path in module ida_nalt: + +dbg_get_input_path(*args) + dbg_get_input_path() -> str + + + Get debugger input file name/path (see 'LFLG_DBG_NOPATH' ) + +Help on function del_absbase in module ida_nalt: + +del_absbase(*args) + del_absbase(ea) + +Help on function del_aflags in module ida_nalt: + +del_aflags(*args) + del_aflags(ea) + +Help on function del_alignment in module ida_nalt: + +del_alignment(*args) + del_alignment(ea) + +Help on function del_array_parameters in module ida_nalt: + +del_array_parameters(*args) + del_array_parameters(ea) + +Help on function del_custom_data_type_ids in module ida_nalt: + +del_custom_data_type_ids(*args) + del_custom_data_type_ids(ea) + +Help on function del_encoding in module ida_nalt: + +del_encoding(*args) + del_encoding(idx) -> bool + + + Delete an encoding (1-based) + + + @param idx (C++: int) + +Help on function del_ind_purged in module ida_nalt: + +del_ind_purged(*args) + del_ind_purged(ea) + +Help on function del_item_color in module ida_nalt: + +del_item_color(*args) + del_item_color(ea) -> bool + +Help on function del_op_tinfo in module ida_nalt: + +del_op_tinfo(*args) + del_op_tinfo(ea, n) + +Help on function del_refinfo in module ida_nalt: + +del_refinfo(*args) + del_refinfo(ea, n) -> bool + +Help on function del_source_linnum in module ida_nalt: + +del_source_linnum(*args) + del_source_linnum(ea) + +Help on function del_str_type in module ida_nalt: + +del_str_type(*args) + del_str_type(ea) + +Help on function del_switch_info in module ida_nalt: + +del_switch_info(*args) + del_switch_info(ea) + +Help on function del_switch_parent in module ida_nalt: + +del_switch_parent(*args) + del_switch_parent(ea) + +Help on function del_tinfo in module ida_nalt: + +del_tinfo(*args) + del_tinfo(ea) + +Help on function delete_imports in module ida_nalt: + +delete_imports(*args) + delete_imports() + + + Delete all imported modules information. + +Help on function ea2node in module ida_nalt: + +ea2node(*args) + ea2node(ea) -> nodeidx_t + + + Get netnode for the specified address. + + + @param ea (C++: ea_t) + +Help on function encoding_from_strtype in module ida_nalt: + +encoding_from_strtype(*args) + encoding_from_strtype(strtype) -> char const * + + + Get encoding name for this strtype. + + + @param strtype (C++: int32) + +Help on class enum_const_t in module ida_nalt: + +class enum_const_t(__builtin__.object) + | Proxy of C++ enum_const_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> enum_const_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | serial + | enum_const_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | tid + | enum_const_t_tid_get(self) -> tid_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enum_const_t(self) + +Help on function enum_import_names in module ida_nalt: + +enum_import_names(*args) + enum_import_names(mod_index, py_cb) -> int + + + Enumerate imports from a specific module. + Please refer to ex_imports.py example. + + @param mod_index: The module index + @param callback: A callable object that will be invoked with an ea, name (could be None) and ordinal. + @return: 1-finished ok, -1 on error, otherwise callback return value (<=0) + +Help on function find_custom_refinfo in module ida_nalt: + +find_custom_refinfo(*args) + find_custom_refinfo(name) -> int + + + Get id of a custom refinfo type. + + + @param name (C++: const char *) + +Help on function get_abi_name in module ida_nalt: + +get_abi_name(*args) + +Help on function get_absbase in module ida_nalt: + +get_absbase(*args) + get_absbase(ea) -> ea_t + +Help on function get_aflags in module ida_nalt: + +get_aflags(*args) + get_aflags(ea) -> uint32 + +Help on function get_alignment in module ida_nalt: + +get_alignment(*args) + get_alignment(ea) -> uint32 + +Help on function get_archive_path in module ida_nalt: + +get_archive_path(*args) + get_archive_path() -> str + + + Get archive file path from which input file was extracted. + +Help on function get_array_parameters in module ida_nalt: + +get_array_parameters(*args) + get_array_parameters(out, ea) -> ssize_t + +Help on function get_asm_inc_file in module ida_nalt: + +get_asm_inc_file(*args) + get_asm_inc_file() -> str + + + Get name of the include file. + +Help on function get_custom_data_type_ids in module ida_nalt: + +get_custom_data_type_ids(*args) + get_custom_data_type_ids(cdis, ea) -> int + +Help on function get_custom_refinfo in module ida_nalt: + +get_custom_refinfo(*args) + get_custom_refinfo(crid) -> custom_refinfo_handler_t const * + + + Get definition of a registered custom refinfo type. + + + @param crid (C++: int) + +Help on function get_default_encoding_idx in module ida_nalt: + +get_default_encoding_idx(*args) + get_default_encoding_idx(bpu) -> int + + + Get default encoding index for a specific string type. + + @param bpu: the amount of bytes per unit (e.g., 1 for ASCII, CP1252, + UTF-8..., 2 for UTF-16, 4 for UTF-32) 0 means no specific + encoding is set - byte values are displayed without + conversion. (C++: int) + +Help on function get_encoding_bpu in module ida_nalt: + +get_encoding_bpu(*args) + get_encoding_bpu(idx) -> int + + + Get the amount of bytes per unit (e.g., 2 for UTF-16, 4 for UTF-32) + for the encoding with the given index. + + @param idx: the encoding index (C++: int) + @return: the number of bytes per units (1/2/4); -1 means error + +Help on function get_encoding_name in module ida_nalt: + +get_encoding_name(*args) + get_encoding_name(idx) -> char const * + + + Get encoding name for specific index (1-based). + + @param idx (C++: int) + @return: NULL if idx is out of bounds + +Help on function get_encoding_qty in module ida_nalt: + +get_encoding_qty(*args) + get_encoding_qty() -> int + + + Get total number of encodings (counted from 0) + +Help on function get_gotea in module ida_nalt: + +get_gotea(*args) + get_gotea() -> ea_t + +Help on function get_ids_modnode in module ida_nalt: + +get_ids_modnode(*args) + get_ids_modnode() -> netnode + + + Get ids modnode. + +Help on function get_imagebase in module ida_nalt: + +get_imagebase(*args) + get_imagebase() -> ea_t + + + Get image base address. + +Help on function get_import_module_name in module ida_nalt: + +get_import_module_name(*args) + get_import_module_name(mod_index) -> PyObject * + + + Returns the name of an imported module given its index + @return: None or the module name + +Help on function get_import_module_qty in module ida_nalt: + +get_import_module_qty(*args) + get_import_module_qty() -> uint + + + Get number of import modules. + +Help on function get_ind_purged in module ida_nalt: + +get_ind_purged(*args) + get_ind_purged(ea) -> ea_t + +Help on function get_input_file_path in module ida_nalt: + +get_input_file_path(*args) + get_input_file_path() -> str + + + Get full path of the input file. + +Help on function get_item_color in module ida_nalt: + +get_item_color(*args) + get_item_color(ea) -> bgcolor_t + +Help on function get_op_tinfo in module ida_nalt: + +get_op_tinfo(*args) + get_op_tinfo(tif, ea, n) -> bool + +Help on function get_outfile_encoding_idx in module ida_nalt: + +get_outfile_encoding_idx(*args) + get_outfile_encoding_idx() -> int + + + Get the index of the encoding used when producing files 0 means no + that the IDB's default 1 byte-per-unit encoding is used + +Help on function get_refinfo in module ida_nalt: + +get_refinfo(*args) + get_refinfo(ri, ea, n) -> bool + +Help on function get_reftype_by_size in module ida_nalt: + +get_reftype_by_size(*args) + get_reftype_by_size(size) -> reftype_t + + + Get REF_... constant from size Supported sizes: 1,2,4,8,16 For other + sizes returns reftype_t(-1) + + @param size (C++: size_t) + +Help on function get_root_filename in module ida_nalt: + +get_root_filename(*args) + get_root_filename() -> str + + + Get file name only of the input file. + +Help on function get_source_linnum in module ida_nalt: + +get_source_linnum(*args) + get_source_linnum(ea) -> uval_t + +Help on function get_str_encoding_idx in module ida_nalt: + +get_str_encoding_idx(*args) + get_str_encoding_idx(strtype) -> uchar + + + Get index of the string encoding for this string. + + + @param strtype (C++: int32) + +Help on function get_str_term1 in module ida_nalt: + +get_str_term1(*args) + get_str_term1(strtype) -> char + +Help on function get_str_term2 in module ida_nalt: + +get_str_term2(*args) + get_str_term2(strtype) -> char + +Help on function get_str_type in module ida_nalt: + +get_str_type(*args) + get_str_type(ea) -> uint32 + +Help on function get_str_type_code in module ida_nalt: + +get_str_type_code(*args) + get_str_type_code(strtype) -> uchar + +Help on function get_strtype_bpu in module ida_nalt: + +get_strtype_bpu(*args) + get_strtype_bpu(strtype) -> int + +Help on function get_switch_info in module ida_nalt: + +get_switch_info(*args) + +Help on function get_switch_parent in module ida_nalt: + +get_switch_parent(*args) + get_switch_parent(ea) -> ea_t + +Help on function get_tinfo in module ida_nalt: + +get_tinfo(*args) + get_tinfo(tif, ea) -> bool + +Help on function getnode in module ida_nalt: + +getnode(*args) + getnode(ea) -> netnode + +Help on function has_lname in module ida_nalt: + +has_lname(*args) + has_lname(ea) -> bool + +Help on function has_ti in module ida_nalt: + +has_ti(*args) + has_ti(ea) -> bool + +Help on function has_ti0 in module ida_nalt: + +has_ti0(*args) + has_ti0(ea) -> bool + +Help on function has_ti1 in module ida_nalt: + +has_ti1(*args) + has_ti1(ea) -> bool + +Help on function hide_border in module ida_nalt: + +hide_border(*args) + hide_border(ea) + +Help on function hide_item in module ida_nalt: + +hide_item(*args) + hide_item(ea) + +Help on function is__bnot0 in module ida_nalt: + +is__bnot0(*args) + is__bnot0(ea) -> bool + +Help on function is__bnot1 in module ida_nalt: + +is__bnot1(*args) + is__bnot1(ea) -> bool + +Help on function is__invsign0 in module ida_nalt: + +is__invsign0(*args) + is__invsign0(ea) -> bool + +Help on function is__invsign1 in module ida_nalt: + +is__invsign1(*args) + is__invsign1(ea) -> bool + +Help on function is_align_flow in module ida_nalt: + +is_align_flow(*args) + is_align_flow(ea) -> bool + +Help on function is_colored_item in module ida_nalt: + +is_colored_item(*args) + is_colored_item(ea) -> bool + +Help on function is_finally_visible_item in module ida_nalt: + +is_finally_visible_item(*args) + is_finally_visible_item(ea) -> bool + + + Is instruction visible? + + + @param ea (C++: ea_t) + +Help on function is_fixed_spd in module ida_nalt: + +is_fixed_spd(*args) + is_fixed_spd(ea) -> bool + +Help on function is_hidden_border in module ida_nalt: + +is_hidden_border(*args) + is_hidden_border(ea) -> bool + +Help on function is_hidden_item in module ida_nalt: + +is_hidden_item(*args) + is_hidden_item(ea) -> bool + +Help on function is_libitem in module ida_nalt: + +is_libitem(*args) + is_libitem(ea) -> bool + +Help on function is_lzero0 in module ida_nalt: + +is_lzero0(*args) + is_lzero0(ea) -> bool + +Help on function is_lzero1 in module ida_nalt: + +is_lzero1(*args) + is_lzero1(ea) -> bool + +Help on function is_noret in module ida_nalt: + +is_noret(*args) + is_noret(ea) -> bool + +Help on function is_notcode in module ida_nalt: + +is_notcode(*args) + is_notcode(ea) -> bool + + + Is the address marked as not-code? + + + @param ea (C++: ea_t) + +Help on function is_notproc in module ida_nalt: + +is_notproc(*args) + is_notproc(ea) -> bool + +Help on function is_pascal in module ida_nalt: + +is_pascal(*args) + is_pascal(strtype) -> bool + +Help on function is_reftype_target_optional in module ida_nalt: + +is_reftype_target_optional(*args) + is_reftype_target_optional(type) -> bool + + + Can the target be calculated using operand value? + + + @param type (C++: reftype_t) + +Help on function is_retfp in module ida_nalt: + +is_retfp(*args) + is_retfp(ea) -> bool + +Help on function is_terse_struc in module ida_nalt: + +is_terse_struc(*args) + is_terse_struc(ea) -> bool + +Help on function is_tilcmt in module ida_nalt: + +is_tilcmt(*args) + is_tilcmt(ea) -> bool + +Help on function is_usersp in module ida_nalt: + +is_usersp(*args) + is_usersp(ea) -> bool + +Help on function is_userti in module ida_nalt: + +is_userti(*args) + is_userti(ea) -> bool + +Help on function is_visible_item in module ida_nalt: + +is_visible_item(*args) + is_visible_item(ea) -> bool + + + Test visibility of item at given ea. + + + @param ea (C++: ea_t) + +Help on function is_zstroff in module ida_nalt: + +is_zstroff(*args) + is_zstroff(ea) -> bool + +Help on function node2ea in module ida_nalt: + +node2ea(*args) + node2ea(ndx) -> ea_t + +Help on class opinfo_t in module ida_nalt: + +class opinfo_t(__builtin__.object) + | Proxy of C++ opinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> opinfo_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cd + | opinfo_t_cd_get(self) -> custom_data_type_ids_t + | + | ec + | opinfo_t_ec_get(self) -> enum_const_t + | + | path + | opinfo_t_path_get(self) -> strpath_t + | + | ri + | opinfo_t_ri_get(self) -> refinfo_t + | + | strtype + | opinfo_t_strtype_get(self) -> int32 + | + | thisown + | The membership flag + | + | tid + | opinfo_t_tid_get(self) -> tid_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_opinfo_t(self) + +Help on class printop_t in module ida_nalt: + +class printop_t(__builtin__.object) + | Proxy of C++ printop_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> printop_t + | + | __repr__ = _swig_repr(self) + | + | get_ti(self, *args) + | get_ti(self) -> opinfo_t + | + | is_aflags_initialized(self, *args) + | is_aflags_initialized(self) -> bool + | + | is_ti_initialized(self, *args) + | is_ti_initialized(self) -> bool + | + | set_aflags_initialized(self, *args) + | set_aflags_initialized(self, v=True) + | + | set_ti_initialized(self, *args) + | set_ti_initialized(self, v=True) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | aflags + | printop_t_aflags_get(self) -> flags_t + | + | features + | printop_t_features_get(self) -> uchar + | + | flags + | printop_t_flags_get(self) -> flags_t + | + | is_ti_valid + | is_ti_initialized(self) -> bool + | + | suspop + | printop_t_suspop_get(self) -> int + | + | thisown + | The membership flag + | + | ti + | printop_t_ti_get(self) -> opinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_printop_t(self) + +Help on class refinfo_t in module ida_nalt: + +class refinfo_t(__builtin__.object) + | Proxy of C++ refinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> refinfo_t + | + | __repr__ = _swig_repr(self) + | + | init(self, *args) + | init(self, reft_and_flags, _base=0, _target=BADADDR, _tdelta=0) + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_pastend(self, *args) + | is_pastend(self) -> bool + | + | is_rvaoff(self, *args) + | is_rvaoff(self) -> bool + | + | is_signed(self, *args) + | is_signed(self) -> bool + | + | is_subtract(self, *args) + | is_subtract(self) -> bool + | + | is_target_optional(self, *args) + | is_target_optional(self) -> bool + | + | no_base_xref(self, *args) + | no_base_xref(self) -> bool + | + | set_type(self, *args) + | set_type(self, t) + | + | type(self, *args) + | type(self) -> reftype_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | refinfo_t_base_get(self) -> ea_t + | + | flags + | refinfo_t_flags_get(self) -> uint32 + | + | target + | refinfo_t_target_get(self) -> ea_t + | + | tdelta + | refinfo_t_tdelta_get(self) -> adiff_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_refinfo_t(self) + +Help on function rename_encoding in module ida_nalt: + +rename_encoding(*args) + rename_encoding(idx, encoding) -> bool + + + Change name for an encoding (1-based) + + + @param idx (C++: int) + @param encoding (C++: const char *) + +Help on function retrieve_input_file_crc32 in module ida_nalt: + +retrieve_input_file_crc32(*args) + retrieve_input_file_crc32() -> uint32 + + + Get input file crc32 stored in the database. it can be used to check + that the input file has not been changed. + +Help on function retrieve_input_file_md5 in module ida_nalt: + +retrieve_input_file_md5(*args) + retrieve_input_file_md5() -> str + + + Get input file md5. + +Help on function retrieve_input_file_sha256 in module ida_nalt: + +retrieve_input_file_sha256(*args) + retrieve_input_file_sha256() -> str + + + Get input file sha256. + +Help on function retrieve_input_file_size in module ida_nalt: + +retrieve_input_file_size(*args) + retrieve_input_file_size() -> uint32 + + + Get size of input file in bytes. + +Help on function set__bnot0 in module ida_nalt: + +set__bnot0(*args) + set__bnot0(ea) + +Help on function set__bnot1 in module ida_nalt: + +set__bnot1(*args) + set__bnot1(ea) + +Help on function set__invsign0 in module ida_nalt: + +set__invsign0(*args) + set__invsign0(ea) + +Help on function set__invsign1 in module ida_nalt: + +set__invsign1(*args) + set__invsign1(ea) + +Help on function set_abits in module ida_nalt: + +set_abits(*args) + set_abits(ea, bits) + +Help on function set_absbase in module ida_nalt: + +set_absbase(*args) + set_absbase(ea, x) + +Help on function set_aflags in module ida_nalt: + +set_aflags(*args) + set_aflags(ea, flags) + +Help on function set_align_flow in module ida_nalt: + +set_align_flow(*args) + set_align_flow(ea) + +Help on function set_alignment in module ida_nalt: + +set_alignment(*args) + set_alignment(ea, x) + +Help on function set_archive_path in module ida_nalt: + +set_archive_path(*args) + set_archive_path(file) -> bool + + + Set archive file path from which input file was extracted. + + + @param file (C++: const char *) + +Help on function set_array_parameters in module ida_nalt: + +set_array_parameters(*args) + set_array_parameters(ea, _in) + +Help on function set_asm_inc_file in module ida_nalt: + +set_asm_inc_file(*args) + set_asm_inc_file(file) -> bool + + + Set name of the include file. + + + @param file (C++: const char *) + +Help on function set_colored_item in module ida_nalt: + +set_colored_item(*args) + set_colored_item(ea) + +Help on function set_custom_data_type_ids in module ida_nalt: + +set_custom_data_type_ids(*args) + set_custom_data_type_ids(ea, cdis) + +Help on function set_default_encoding_idx in module ida_nalt: + +set_default_encoding_idx(*args) + set_default_encoding_idx(bpu, idx) -> bool + + + set default encoding for a string type + + @param bpu: the amount of bytes per unit (C++: int) + @param idx: the encoding index idx can be 0 to disable encoding + conversion (C++: int) + +Help on function set_fixed_spd in module ida_nalt: + +set_fixed_spd(*args) + set_fixed_spd(ea) + +Help on function set_gotea in module ida_nalt: + +set_gotea(*args) + set_gotea(gotea) + +Help on function set_has_lname in module ida_nalt: + +set_has_lname(*args) + set_has_lname(ea) + +Help on function set_has_ti in module ida_nalt: + +set_has_ti(*args) + set_has_ti(ea) + +Help on function set_has_ti0 in module ida_nalt: + +set_has_ti0(*args) + set_has_ti0(ea) + +Help on function set_has_ti1 in module ida_nalt: + +set_has_ti1(*args) + set_has_ti1(ea) + +Help on function set_ids_modnode in module ida_nalt: + +set_ids_modnode(*args) + set_ids_modnode(id) + + + Set ids modnode. + + + @param id (C++: netnode) + +Help on function set_imagebase in module ida_nalt: + +set_imagebase(*args) + set_imagebase(base) + + + Set image base address. + + + @param base (C++: ea_t) + +Help on function set_item_color in module ida_nalt: + +set_item_color(*args) + set_item_color(ea, color) + +Help on function set_libitem in module ida_nalt: + +set_libitem(*args) + set_libitem(ea) + +Help on function set_lzero0 in module ida_nalt: + +set_lzero0(*args) + set_lzero0(ea) + +Help on function set_lzero1 in module ida_nalt: + +set_lzero1(*args) + set_lzero1(ea) + +Help on function set_noret in module ida_nalt: + +set_noret(*args) + set_noret(ea) + +Help on function set_notcode in module ida_nalt: + +set_notcode(*args) + set_notcode(ea) + + + Mark address so that it cannot be converted to instruction. + + + @param ea (C++: ea_t) + +Help on function set_notproc in module ida_nalt: + +set_notproc(*args) + set_notproc(ea) + +Help on function set_op_tinfo in module ida_nalt: + +set_op_tinfo(*args) + set_op_tinfo(ea, n, tif) -> bool + +Help on function set_outfile_encoding_idx in module ida_nalt: + +set_outfile_encoding_idx(*args) + set_outfile_encoding_idx(idx) -> bool + + + set encoding to be used when producing files + + @param idx: the encoding index idx can be 0 to use the IDB's default 1 + -byte-per-unit encoding (C++: int) + +Help on function set_refinfo in module ida_nalt: + +set_refinfo(*args) + set_refinfo(ea, n, type, target=BADADDR, base=0, tdelta=0) -> bool + +Help on function set_refinfo_ex in module ida_nalt: + +set_refinfo_ex(*args) + set_refinfo_ex(ea, n, ri) -> bool + +Help on function set_retfp in module ida_nalt: + +set_retfp(*args) + set_retfp(ea) + +Help on function set_root_filename in module ida_nalt: + +set_root_filename(*args) + set_root_filename(file) + + + Set full path of the input file. + + + @param file (C++: const char *) + +Help on function set_source_linnum in module ida_nalt: + +set_source_linnum(*args) + set_source_linnum(ea, lnnum) + +Help on function set_str_type in module ida_nalt: + +set_str_type(*args) + set_str_type(ea, x) + +Help on function set_switch_info in module ida_nalt: + +set_switch_info(*args) + set_switch_info(ea, _in) + +Help on function set_switch_parent in module ida_nalt: + +set_switch_parent(*args) + set_switch_parent(ea, x) + +Help on function set_terse_struc in module ida_nalt: + +set_terse_struc(*args) + set_terse_struc(ea) + +Help on function set_tilcmt in module ida_nalt: + +set_tilcmt(*args) + set_tilcmt(ea) + +Help on function set_tinfo in module ida_nalt: + +set_tinfo(*args) + set_tinfo(ea, tif) -> bool + +Help on function set_usemodsp in module ida_nalt: + +set_usemodsp(*args) + set_usemodsp(ea) + +Help on function set_usersp in module ida_nalt: + +set_usersp(*args) + set_usersp(ea) + +Help on function set_userti in module ida_nalt: + +set_userti(*args) + set_userti(ea) + +Help on function set_visible_item in module ida_nalt: + +set_visible_item(*args) + set_visible_item(ea, visible) + + + Change visibility of item at given ea. + + + @param ea (C++: ea_t) + @param visible (C++: bool) + +Help on function set_zstroff in module ida_nalt: + +set_zstroff(*args) + set_zstroff(ea) + +Help on class strpath_ids_array in module ida_nalt: + +class strpath_ids_array(__builtin__.object) + | Proxy of C++ wrapped_array_t< tid_t,32 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | __init__(self, *args) + | __init__(self, data) -> strpath_ids_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | strpath_ids_array_data_get(self) -> unsigned-ea-like-numeric-type (&)[32]↗ + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_strpath_ids_array(self) + +Help on class strpath_t in module ida_nalt: + +class strpath_t(__builtin__.object) + | Proxy of C++ strpath_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strpath_t + | + | __repr__ = _swig_repr(self) + | + | _strpath_t__getIds = __getIds(self, *args) + | __getIds(self) -> strpath_ids_array + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | delta + | strpath_t_delta_get(self) -> adiff_t + | + | ids + | __getIds(self) -> strpath_ids_array + | + | len + | strpath_t_len_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_strpath_t(self) + +Help on class switch_info_t in module ida_nalt: + +class switch_info_t(__builtin__.object) + | Proxy of C++ switch_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> switch_info_t + | + | __repr__ = _swig_repr(self) + | + | _get_values_lowcase(self, *args) + | _get_values_lowcase(self) -> ea_t + | + | _set_values_lowcase(self, *args) + | _set_values_lowcase(self, values) + | + | assign(self, *args) + | assign(self, other) + | + | clear(self, *args) + | clear(self) + | + | get_jrange_vrange(self, *args) + | get_jrange_vrange(self, jrange=None, vrange=None) -> bool + | + | get_jtable_element_size(self, *args) + | get_jtable_element_size(self) -> int + | + | get_jtable_size(self, *args) + | get_jtable_size(self) -> int + | + | get_lowcase(self, *args) + | get_lowcase(self) -> sval_t + | + | get_shift(self, *args) + | get_shift(self) -> int + | + | get_version(self, *args) + | get_version(self) -> int + | + | get_vtable_element_size(self, *args) + | get_vtable_element_size(self) -> int + | + | has_default(self, *args) + | has_default(self) -> bool + | + | has_elbase(self, *args) + | has_elbase(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_indirect(self, *args) + | is_indirect(self) -> bool + | + | is_nolowcase(self, *args) + | is_nolowcase(self) -> bool + | + | is_sparse(self, *args) + | is_sparse(self) -> bool + | + | is_subtract(self, *args) + | is_subtract(self) -> bool + | + | set_elbase(self, *args) + | set_elbase(self, base) + | + | set_expr(self, *args) + | set_expr(self, r, dt) + | + | set_jtable_element_size(self, *args) + | set_jtable_element_size(self, size) + | + | set_jtable_size(self, *args) + | set_jtable_size(self, size) + | + | set_shift(self, *args) + | set_shift(self, shift) + | + | set_vtable_element_size(self, *args) + | set_vtable_element_size(self, size) + | + | use_std_table(self, *args) + | use_std_table(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | custom + | switch_info_t_custom_get(self) -> uval_t + | + | defjump + | switch_info_t_defjump_get(self) -> ea_t + | + | elbase + | switch_info_t_elbase_get(self) -> ea_t + | + | expr_ea + | switch_info_t_expr_ea_get(self) -> ea_t + | + | flags + | switch_info_t_flags_get(self) -> uint32 + | + | ind_lowcase + | switch_info_t_ind_lowcase_get(self) -> sval_t + | + | jcases + | switch_info_t_jcases_get(self) -> int + | + | jumps + | switch_info_t_jumps_get(self) -> ea_t + | + | lowcase + | _get_values_lowcase(self) -> ea_t + | + | marks + | switch_info_t_marks_get(self) -> eavec_t * + | + | ncases + | switch_info_t_ncases_get(self) -> ushort + | + | regdtype + | switch_info_t_regdtype_get(self) -> op_dtype_t + | + | regnum + | switch_info_t_regnum_get(self) -> int + | + | startea + | switch_info_t_startea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | values + | _get_values_lowcase(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | SWITCH_INFO_VERSION = 2 + | + | __swig_destroy__ = + | delete_switch_info_t(self) + +Help on function switch_info_t__from_ptrval__ in module ida_nalt: + +switch_info_t__from_ptrval__(*args) + switch_info_t__from_ptrval__(ptrval) -> switch_info_t + +Help on function unhide_border in module ida_nalt: + +unhide_border(*args) + unhide_border(ea) + +Help on function unhide_item in module ida_nalt: + +unhide_item(*args) + unhide_item(ea) + +Help on function uses_modsp in module ida_nalt: + +uses_modsp(*args) + uses_modsp(ea) -> bool + +Help on function validate_idb_names in module ida_nalt: + +validate_idb_names(*args) + validate_idb_names(do_repair) -> int + +=== ida_nalt EPYDOC INJECTIONS === +ida_nalt.AFL_ALIGNFLOW +""" +the previous insn was created for alignment purposes only +""" + +ida_nalt.AFL_BNOT0 +""" +the 1st operand is bitwise negated +""" + +ida_nalt.AFL_BNOT1 +""" +the 2nd operand is bitwise negated +""" + +ida_nalt.AFL_COLORED +""" +has user defined instruction color? +""" + +ida_nalt.AFL_FIXEDSPD +""" +should not be modified by modules + +sp delta value is fixed by analysis. +""" + +ida_nalt.AFL_HIDDEN +""" +the item is hidden completely +""" + +ida_nalt.AFL_LIB +""" +item from the standard library. low level flag, is used to set +'FUNC_LIB' of 'func_t' +""" + +ida_nalt.AFL_LINNUM +""" +has line number info +""" + +ida_nalt.AFL_LNAME +""" +has local name too ( 'FF_NAME' should be set) +""" + +ida_nalt.AFL_LZERO0 +""" +toggle leading zeroes for the 1st operand +""" + +ida_nalt.AFL_LZERO1 +""" +toggle leading zeroes for the 2nd operand +""" + +ida_nalt.AFL_MANUAL +""" +the instruction/data is specified by the user +""" + +ida_nalt.AFL_NOBRD +""" +the code/data border is hidden +""" + +ida_nalt.AFL_NORET +""" +for imported function pointers: doesn't return. this flag can also be +used for any instruction which halts or finishes the program execution +""" + +ida_nalt.AFL_NOTCODE +""" +autoanalysis should not create code here +""" + +ida_nalt.AFL_NOTPROC +""" +autoanalysis should not create proc here +""" + +ida_nalt.AFL_PUBNAM +""" +name is public (inter-file linkage) +""" + +ida_nalt.AFL_RETFP +""" +function returns a floating point value +""" + +ida_nalt.AFL_SIGN0 +""" +code: toggle sign of the 1st operand +""" + +ida_nalt.AFL_SIGN1 +""" +code: toggle sign of the 2nd operand +""" + +ida_nalt.AFL_TERSESTR +""" +terse structure variable display? +""" + +ida_nalt.AFL_TI +""" +has typeinfo? ( 'NSUP_TYPEINFO' ) +""" + +ida_nalt.AFL_TI0 +""" +has typeinfo for operand 0? ( 'NSUP_OPTYPES' ) +""" + +ida_nalt.AFL_TI1 +""" +has typeinfo for operand 1? ( 'NSUP_OPTYPES' +1) +""" + +ida_nalt.AFL_TILCMT +""" +has type comment? (such a comment may be changed by IDA) +""" + +ida_nalt.AFL_USEMODSP +""" +example: pop [rsp+N] + +insn modifes SP and uses the modified value +""" + +ida_nalt.AFL_USERSP +""" +user-defined SP value +""" + +ida_nalt.AFL_USERTI +""" +(comes from the user or type library) + +the type information is definitive. +""" + +ida_nalt.AFL_WEAKNAM +""" +name is weak +""" + +ida_nalt.AFL_ZSTROFF +""" +display struct field name at 0 offset when displaying an offset. +example: \\v{offset somestruct.field_0} if this flag is clear, then +\\v{offset somestruct} +""" + +ida_nalt.AP_ALLOWDUPS +""" +use 'dup' construct +""" + +ida_nalt.AP_ARRAY +""" +create as array (this flag is not stored in database) +""" + +ida_nalt.AP_IDXBASEMASK +""" +mask for number base of the indexes +""" + +ida_nalt.AP_IDXBIN +""" +display indexes in binary +""" + +ida_nalt.AP_IDXDEC +""" +display indexes in decimal +""" + +ida_nalt.AP_IDXHEX +""" +display indexes in hex +""" + +ida_nalt.AP_IDXOCT +""" +display indexes in octal +""" + +ida_nalt.AP_INDEX +""" +display array element indexes as comments +""" + +ida_nalt.AP_SIGNED +""" +treats numbers as signed +""" + +ida_nalt.MAXSTRUCPATH +""" +maximal inclusion depth of unions +""" + +ida_nalt.NALT_ABSBASE +""" +absolute segment location +""" + +ida_nalt.NALT_AFLAGS +""" +additional flags for an item +""" + +ida_nalt.NALT_ALIGN +""" +(should by equal to power of 2) + +alignment value if the item is 'FF_ALIGN' +""" + +ida_nalt.NALT_COLOR +""" +instruction/data background color +""" + +ida_nalt.NALT_CREF_FROM +""" +code xref from, idx: source address +""" + +ida_nalt.NALT_CREF_TO +""" +code xref to, idx: target address +""" + +ida_nalt.NALT_DREF_FROM +""" +data xref from, idx: source address +""" + +ida_nalt.NALT_DREF_TO +""" +data xref to, idx: target address +""" + +ida_nalt.NALT_ENUM0 +""" +enum id for the first operand +""" + +ida_nalt.NALT_ENUM1 +""" +enum id for the second operand +""" + +ida_nalt.NALT_GR_LAYX +""" +group layout ptrs, hash: md5 of 'belongs' +""" + +ida_nalt.NALT_LINNUM +""" +source line number +""" + +ida_nalt.NALT_PURGE +""" +number of bytes purged from the stack when a function is called +indirectly +""" + +ida_nalt.NALT_STRTYPE +""" +type of string item +""" + +ida_nalt.NALT_STRUCT +""" +struct id +""" + +ida_nalt.NALT_SWITCH +""" +switch idiom address (used at jump targets) +""" + +ida_nalt.NSUP_ARGEAS +""" +instructions that initialize call arguments +""" + +ida_nalt.NSUP_ARRAY +""" +array parameters +""" + +ida_nalt.NSUP_CMT +""" +regular comment +""" + +ida_nalt.NSUP_CUSTDT +""" +custom data type id +""" + +ida_nalt.NSUP_FOP1 +""" +forced operand 1 +""" + +ida_nalt.NSUP_FOP2 +""" +forced operand 2 +""" + +ida_nalt.NSUP_FOP3 +""" +forced operand 3 +""" + +ida_nalt.NSUP_FOP4 +""" +forced operand 4 +""" + +ida_nalt.NSUP_FOP5 +""" +forced operand 5 +""" + +ida_nalt.NSUP_FOP6 +""" +forced operand 6 +""" + +ida_nalt.NSUP_FOP7 +""" +forced operand 7 +""" + +ida_nalt.NSUP_FOP8 +""" +forced operand 8 +""" + +ida_nalt.NSUP_FTAILS +""" +function tails or tail referers values NSUP_FTAILS..NSUP_FTAILS+0x1000 +are reserved +""" + +ida_nalt.NSUP_GROUP +""" +graph group information values NSUP_GROUP..NSUP_GROUP+0x1000 are +reserved +""" + +ida_nalt.NSUP_GROUPS +""" +SEG_GRP: pack_dd encoded list of selectors. +""" + +ida_nalt.NSUP_GR_INFO +""" +group node info: color, ea, text +""" + +ida_nalt.NSUP_GR_LAYT +""" +group layouts, idx: layout pointer +""" + +ida_nalt.NSUP_JINFO +""" +jump table info +""" + +ida_nalt.NSUP_LLABEL +""" +local labels. values NSUP_LLABEL..NSUP_LLABEL+0x1000 are reserved +""" + +ida_nalt.NSUP_MANUAL +""" +manual instruction. values NSUP_MANUAL..NSUP_MANUAL+0x1000 are +reserved +""" + +ida_nalt.NSUP_OMFGRP +""" +OMF: group of segments (not used anymore) +""" + +ida_nalt.NSUP_OPTYPES +""" +operand type information. values NSUP_OPTYPES..NSUP_OPTYPES+0x100000 +are reserved +""" + +ida_nalt.NSUP_OREF0 +""" +outer complex reference information for operand 1 +""" + +ida_nalt.NSUP_OREF1 +""" +outer complex reference information for operand 2 +""" + +ida_nalt.NSUP_OREF2 +""" +outer complex reference information for operand 3 +""" + +ida_nalt.NSUP_OREF3 +""" +outer complex reference information for operand 4 +""" + +ida_nalt.NSUP_OREF4 +""" +outer complex reference information for operand 5 +""" + +ida_nalt.NSUP_OREF5 +""" +outer complex reference information for operand 6 +""" + +ida_nalt.NSUP_OREF6 +""" +outer complex reference information for operand 7 +""" + +ida_nalt.NSUP_OREF7 +""" +outer complex reference information for operand 8 +""" + +ida_nalt.NSUP_ORIGFMD +""" +function metadata before lumina information was applied values +NSUP_ORIGFMD..NSUP_ORIGFMD+0x1000 are reserved +""" + +ida_nalt.NSUP_POINTS +""" +SP change points blob (see funcs.cpp). values +NSUP_POINTS..NSUP_POINTS+0x1000 are reserved +""" + +ida_nalt.NSUP_REF0 +""" +complex reference information for operand 1 +""" + +ida_nalt.NSUP_REF1 +""" +complex reference information for operand 2 +""" + +ida_nalt.NSUP_REF2 +""" +complex reference information for operand 3 +""" + +ida_nalt.NSUP_REF3 +""" +complex reference information for operand 4 +""" + +ida_nalt.NSUP_REF4 +""" +complex reference information for operand 5 +""" + +ida_nalt.NSUP_REF5 +""" +complex reference information for operand 6 +""" + +ida_nalt.NSUP_REF6 +""" +complex reference information for operand 7 +""" + +ida_nalt.NSUP_REF7 +""" +complex reference information for operand 8 +""" + +ida_nalt.NSUP_REGARG +""" +register argument type/name descriptions values +NSUP_REGARG..NSUP_REGARG+0x1000 are reserved +""" + +ida_nalt.NSUP_REGVAR +""" +register variables. values NSUP_REGVAR..NSUP_REGVAR+0x1000 are +reserved +""" + +ida_nalt.NSUP_REPCMT +""" +repeatable comment +""" + +ida_nalt.NSUP_SEGTRANS +""" +segment translations +""" + +ida_nalt.NSUP_STROFF0 +""" +stroff: struct path for the first operand +""" + +ida_nalt.NSUP_STROFF1 +""" +stroff: struct path for the second operand +""" + +ida_nalt.NSUP_SWITCH +""" +switch information +""" + +ida_nalt.NSUP_TYPEINFO +""" +type information. values NSUP_TYPEINFO..NSUP_TYPEINFO+0x1000 are +reserved +""" + +ida_nalt.NSUP_XREFPOS +""" +saved xref address and type in the xrefs window +""" + +ida_nalt.PATCH_TAG +""" +Patch netnode tag. +""" + +ida_nalt.REFINFO_CUSTOM +""" +a custom reference the kernel will call \\ph{notify}(ph.custom_offset, +.... that can change all arguments used for calculations. This flag is +useful for custom fixups +""" + +ida_nalt.REFINFO_NOBASE +""" +don't create the base xref implies that the base can be any value nb: +base xrefs are created only if the offset base points to the middle of +a segment +""" + +ida_nalt.REFINFO_PASTEND +""" +reference past an item it may point to an nonexistent address do not +destroy alignment dirs +""" + +ida_nalt.REFINFO_RVAOFF +""" +based reference (rva) 'refinfo_t::base' will be forced to +'get_imagebase()' such a reference is displayed with the \\ash{a_rva} +keyword +""" + +ida_nalt.REFINFO_SIGNEDOP +""" +the operand value is sign-extended (only supported for +REF_OFF8/16/32/64) +""" + +ida_nalt.REFINFO_SUBTRACT +""" +the reference value is subtracted from the base value instead of (as +usual) being added to it +""" + +ida_nalt.REFINFO_TYPE +""" +reference type +""" + +ida_nalt.RIDX_ABINAME +""" +ABI name (processor specific) +""" + +ida_nalt.RIDX_ARCHIVE_PATH +""" +archive file path +""" + +ida_nalt.RIDX_C_MACROS +""" +C predefined macros. +""" + +ida_nalt.RIDX_DBG_BINPATHS +""" +unused (20 indexes) +""" + +ida_nalt.RIDX_DUALOP_GRAPH +""" +Graph text representation options. +""" + +ida_nalt.RIDX_DUALOP_TEXT +""" +Text text representation options. +""" + +ida_nalt.RIDX_FILE_FORMAT_NAME +""" +file format name for loader modules +""" + +ida_nalt.RIDX_GROUPS +""" +segment group information (see init_groups()) +""" + +ida_nalt.RIDX_H_PATH +""" +C header path. +""" + +ida_nalt.RIDX_IDA_VERSION +""" +version of ida which created the database +""" + +ida_nalt.RIDX_INCLUDE +""" +assembler include file name +""" + +ida_nalt.RIDX_MD5 +""" +MD5 of the input file. +""" + +ida_nalt.RIDX_NOTEPAD +""" +notepad blob, occupies 1000 indexes (1MB of text) +""" + +ida_nalt.RIDX_PROBLEMS +""" +problem lists +""" + +ida_nalt.RIDX_SELECTED_EXTLANG +""" +last selected extlang name (from the execute script box) +""" + +ida_nalt.RIDX_SELECTORS +""" +2..63 are for selector_t blob (see init_selectors()) +""" + +ida_nalt.RIDX_SHA256 +""" +SHA256 of the input file. +""" + +ida_nalt.RIDX_SMALL_IDC +""" +Instant IDC statements, blob. +""" + +ida_nalt.RIDX_SMALL_IDC_OLD +""" +Instant IDC statements (obsolete) +""" + +ida_nalt.RIDX_SRCDBG_PATHS +""" +source debug paths, occupies 20 indexes +""" + +ida_nalt.RIDX_SRCDBG_UNDESIRED +""" +user-closed source files, occupies 20 indexes +""" + +ida_nalt.RIDX_STR_ENCODINGS +""" +a list of encodings for the program strings +""" + +ida_nalt.STRENC_DEFAULT +""" +use default encoding for this type (see 'get_default_encoding_idx()' ) +""" + +ida_nalt.STRENC_NONE +""" +force no-conversion encoding +""" + +ida_nalt.STRTYPE_C +""" +Zero-terminated 16bit chars. +""" + +ida_nalt.STRTYPE_C_16 +""" +Zero-terminated 32bit chars. +""" + +ida_nalt.STRTYPE_C_32 +""" +Pascal-style, one-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN2 +""" +Pascal-style, 16bit chars, two-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN2_16 +""" +Pascal-style, four-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN4 +""" +Pascal-style, 16bit chars, four-byte length prefix. +""" + +ida_nalt.STRTYPE_PASCAL +""" +Pascal-style, 16bit chars, one-byte length prefix. +""" + +ida_nalt.STRTYPE_PASCAL_16 +""" +Pascal-style, two-byte length prefix. +""" + +ida_nalt.STRTYPE_TERMCHR +""" +C-style string. + +< Character-terminated string. The termination characters are kept in +the next bytes of string type. +""" + +ida_nalt.SWI_CUSTOM +""" +custom jump table. \\ph{create_switch_xrefs} will be called to create +code xrefs for the table. Custom jump table must be created by the +module (see also 'SWI_STDTBL' ) +""" + +ida_nalt.SWI_DEFRET +""" +return in the default case (defjump==BADADDR) +""" + +ida_nalt.SWI_DEF_IN_TBL +""" +default case is an entry in the jump table. This flag is applicable in +2 cases:The sparse indirect switch (i.e. a switch with a values table) +=""> ==+ 1. The default case entry is the last one +in the table (or the first one in the case of an inversed jump +table).The switch with insns in the jump table. The default case entry +is before the first entry of the table. See also the +find_defjump_from_table() helper function. +""" + +ida_nalt.SWI_ELBASE +""" +segment will be used) + +elbase is present (otherwise the base of the switch +""" + +ida_nalt.SWI_HXNOLOWCASE +""" +lowcase value should not be used by the decompiler (internal flag) +""" + +ida_nalt.SWI_INDIRECT +""" +(for sparse switches) + +value table elements are used as indexes into the jump table +""" + +ida_nalt.SWI_J32 +""" +32-bit jump offsets +""" + +ida_nalt.SWI_JMPINSN +""" +jump table entries are insns. For such entries SHIFT has a different +meaning. It denotes the number of insns in the entry. For example, 0 - +the entry contains the jump to the case, 1 - the entry contains one +insn like a 'mov' and jump to the end of case, and so on. +""" + +ida_nalt.SWI_JMP_INV +""" +for first entry in values table) + +jumptable is inversed. (last entry is +""" + +ida_nalt.SWI_JSIZE +""" +jump offset expansion bit +""" + +ida_nalt.SWI_RESERVED +""" +was: SWI_DEFAULT +""" + +ida_nalt.SWI_SELFREL +""" +jump address is relative to the element not to ELBASE +""" + +ida_nalt.SWI_SEPARATE +""" +create an array of individual elements (otherwise separate items) +""" + +ida_nalt.SWI_SHIFT_MASK +""" +use formula (element< str + + + Append names of struct fields to a name if the name is a struct name. + + @param disp: displacement from the name (C++: adiff_t *) + @param n: number of operand n which the name appears (C++: int) + @param path: 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 (if any). (C++: const tid_t + *) + @param flags: the input flags. they will be returned if the struct + cannot be found. (C++: flags_t) + @param delta: delta to add to displacement (C++: adiff_t) + @param appzero: should append a struct field name if the displacement + is zero? (C++: bool) + @return: flags of the innermost struct member or the input flags + +Help on function calc_gtn_flags in module ida_name: + +calc_gtn_flags(fromaddr, ea) + Calculate flags for get_ea_name() function + + @param fromaddr: the referring address. May be BADADDR. + @param ea: linear address + + @return: flags + +Help on function cleanup_name in module ida_name: + +cleanup_name(*args) + cleanup_name(ea, name, flags=0) -> str + +Help on function del_debug_names in module ida_name: + +del_debug_names(*args) + del_debug_names(ea1, ea2) + +Help on function del_global_name in module ida_name: + +del_global_name(*args) + del_global_name(ea) -> bool + +Help on function del_local_name in module ida_name: + +del_local_name(*args) + del_local_name(ea) -> bool + +Help on function demangle_name in module ida_name: + +demangle_name(*args) + demangle_name(name, disable_mask, demreq=DQT_FULL) -> str + + + Demangle a name. + + @param name: name to demangle (C++: const char *) + @param disable_mask: bits to inhibit parts of demangled name (see + MNG_). by the M_COMPILER bits a specific compiler + can be selected (see MT_). (C++: uint32) + @param demreq (C++: demreq_type_t) + @return: ME_... or MT__ bitmasks from demangle.hpp + +Help on class ea_name_t in module ida_name: + +class ea_name_t(__builtin__.object) + | Proxy of C++ ea_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ea_name_t + | __init__(self, _ea, _name) -> ea_name_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | ea_name_t_ea_get(self) -> ea_t + | + | name + | ea_name_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ea_name_t(self) + +Help on class ea_name_vec_t in module ida_name: + +class ea_name_vec_t(__builtin__.object) + | Proxy of C++ qvector< ea_name_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> ea_name_t + | + | __init__(self, *args) + | __init__(self) -> ea_name_vec_t + | __init__(self, x) -> ea_name_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> ea_name_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> ea_name_t + | begin(self) -> ea_name_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> ea_name_t + | end(self) -> ea_name_t + | + | erase(self, *args) + | erase(self, it) -> ea_name_t + | erase(self, first, last) -> ea_name_t + | + | extract(self, *args) + | extract(self) -> ea_name_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=ea_name_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> ea_name_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> ea_name_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ea_name_vec_t(self) + +Help on function extract_name in module ida_name: + +extract_name(*args) + extract_name(line, x) -> str + + + Extract a name or address from the specified string. + + @param line: input string (C++: const char *) + @param x: x coordinate of cursor (C++: int) + @return: -1 if cannot extract. otherwise length of the name + +Help on function force_name in module ida_name: + +force_name(*args) + force_name(ea, name, flags=0) -> bool + +Help on function get_colored_demangled_name in module ida_name: + +get_colored_demangled_name(*args) + get_colored_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring + +Help on function get_colored_long_name in module ida_name: + +get_colored_long_name(*args) + get_colored_long_name(ea, gtn_flags=0) -> qstring + +Help on function get_colored_name in module ida_name: + +get_colored_name(*args) + get_colored_name(ea) -> qstring + +Help on function get_colored_short_name in module ida_name: + +get_colored_short_name(*args) + get_colored_short_name(ea, gtn_flags=0) -> qstring + +Help on function get_cp_validity in module ida_name: + +get_cp_validity(*args) + get_cp_validity(kind, cp, endcp=wchar32_t(-1)) -> bool + + + Is the given codepoint (or range) acceptable in the given context? If + 'endcp' is not BADCP, it is considered to be the end of the range: + [cp, endcp), and is not included in the range + + @param kind (C++: ucdr_kind_t) + @param cp (C++: wchar32_t) + @param endcp (C++: wchar32_t) + +Help on function get_debug_name in module ida_name: + +get_debug_name(*args) + get_debug_name(ea_ptr, how) -> str + +Help on function get_debug_name_ea in module ida_name: + +get_debug_name_ea(*args) + get_debug_name_ea(name) -> ea_t + +Help on function get_debug_names in module ida_name: + +get_debug_names(*args) + get_debug_names(names, ea1, ea2) + get_debug_names(ea1, ea2, return_list=False) -> PyObject * + +Help on function get_demangled_name in module ida_name: + +get_demangled_name(*args) + get_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring + +Help on function get_ea_name in module ida_name: + +get_ea_name(*args) + get_ea_name(ea, gtn_flags=0) -> qstring + + + Get name at the specified address. + + @param ea: linear address (C++: ea_t) + @param gtn_flags: how exactly the name should be retrieved. + combination of bits for get_ea_name() function. + There is a convenience bits (C++: int) + @return: success + +Help on function get_long_name in module ida_name: + +get_long_name(*args) + get_long_name(ea, gtn_flags=0) -> qstring + +Help on function get_name in module ida_name: + +get_name(*args) + get_name(ea) -> qstring + +Help on function get_name_base_ea in module ida_name: + +get_name_base_ea(*args) + get_name_base_ea(_from, to) -> ea_t + + + Get address of the name used in the expression for the address + + @param _from: address of the operand which references to the address + (C++: ea_t) + @param to: the referenced address (C++: ea_t) + @return: address of the name used to represent the operand + +Help on function get_name_color in module ida_name: + +get_name_color(*args) + get_name_color(_from, ea) -> color_t + + + Calculate flags for 'get_ea_name()' function. + + Get name color. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . The kernel returns + a local name color if the reference is within a + function, i.e. 'from' and 'ea' belong to the same + function. (C++: ea_t) + @param ea: linear address (C++: ea_t) + +Help on function get_name_ea in module ida_name: + +get_name_ea(*args) + get_name_ea(_from, name) -> ea_t + + + Get address of the name. Dummy names (like byte_xxxx where xxxx are + hex digits) are parsed by this function to obtain the address. The + database is not consulted for them. This function works only with + regular names. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: address of the name or BADADDR + +Help on function get_name_expr in module ida_name: + +get_name_expr(*args) + get_name_expr(_from, n, ea, off, flags=0x0001) -> str + + + Convert address to name expression (name with a displacement). This + function takes into account fixup information and returns a colored + name expression (in the form +/- ). It also knows about + structure members and arrays. If the specified address doesn't have a + name, a dummy name is generated. + + @param _from: 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 the + operand in the instruction. (C++: ea_t) + @param n: number of referencing operand. for data items specify 0 + (C++: int) + @param ea: address to convert to name expression (C++: ea_t) + @param off: the value of name expression. this parameter is used only + to check that the name expression will have the wanted + value. 'off' may be equal to BADADDR but this is + discouraged because it prohibits checks. (C++: uval_t) + @param flags: Name expression flags (C++: int) + @return: < 0 if address is not valid, no segment or other failure. + otherwise the length of the name expression in characters. + +Help on function get_name_value in module ida_name: + +get_name_value(*args) + get_name_value(_from, name) -> int + + + Get value of the name. This function knows about: regular names, + enums, special segments, etc. + + @param _from: linear address where the name is used if not applicable, + then should be BADADDR (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: Name value result codes + +Help on function get_nice_colored_name in module ida_name: + +get_nice_colored_name(*args) + get_nice_colored_name(ea, flags=0) -> str + + + Get a nice colored name at the specified address. Ex:segment:sub+offse + tsegment:sub:local_labelsegment:labelsegment:addresssegment:address+of + fset + + @param ea (C++: ea_t) + @param flags (C++: int) + @return: the length of the generated name in bytes. + +Help on function get_nlist_ea in module ida_name: + +get_nlist_ea(*args) + get_nlist_ea(idx) -> ea_t + + + Get address from the list at 'idx'. + + + @param idx (C++: size_t) + +Help on function get_nlist_idx in module ida_name: + +get_nlist_idx(*args) + get_nlist_idx(ea) -> size_t + + + Get index of the name in the listreturns the closest match. may return + idx >= size. + + @param ea (C++: ea_t) + +Help on function get_nlist_name in module ida_name: + +get_nlist_name(*args) + get_nlist_name(idx) -> char const * + + + Get name using idx. + + + @param idx (C++: size_t) + +Help on function get_nlist_size in module ida_name: + +get_nlist_size(*args) + get_nlist_size() -> size_t + + + Get number of names in the list. + +Help on function get_short_name in module ida_name: + +get_short_name(*args) + get_short_name(ea, gtn_flags=0) -> qstring + +Help on function get_visible_name in module ida_name: + +get_visible_name(*args) + get_visible_name(ea, gtn_flags=0) -> qstring + +Help on function hide_name in module ida_name: + +hide_name(*args) + hide_name(ea) + + + Remove name from the list of names + + @param ea: address of the name (C++: ea_t) + +Help on function is_ident in module ida_name: + +is_ident(*args) + is_ident(name) -> bool + + + Is a valid name? (including ::MangleChars) + + + @param name (C++: const char *) + +Help on function is_ident_cp in module ida_name: + +is_ident_cp(*args) + is_ident_cp(cp) -> bool + + + Can a character appear in a name? (present in ::NameChars or + ::MangleChars) + + + @param cp (C++: wchar32_t) + +Help on function is_in_nlist in module ida_name: + +is_in_nlist(*args) + is_in_nlist(ea) -> bool + + + Is name included into names list? + + + @param ea (C++: ea_t) + +Help on function is_name_defined_locally in module ida_name: + +is_name_defined_locally(*args) + is_name_defined_locally(pfn, name, ignore_name_def, ea1=BADADDR, ea2=BADADDR) -> bool + + + Is the name defined locally in the specified function? + + @param pfn: pointer to function (C++: func_t *) + @param name: name to check (C++: const char *) + @param ignore_name_def: which names to ignore when checking (C++: + ignore_name_def_t) + @param ea1: the starting address of the range inside the function + (optional) (C++: ea_t) + @param ea2: the ending address of the range inside the function + (optional) (C++: ea_t) + @return: true if the name has been defined + +Help on function is_public_name in module ida_name: + +is_public_name(*args) + is_public_name(ea) -> bool + +Help on function is_strlit_cp in module ida_name: + +is_strlit_cp(*args) + is_strlit_cp(cp, specific_ranges=None) -> bool + + + Can a character appear in a string literal (present in ::StrlitChars) + If 'specific_ranges' are specified, those will be used instead of the + ones corresponding to the current culture (only if ::StrlitChars is + configured to use the current culture) + + @param cp (C++: wchar32_t) + @param specific_ranges (C++: const rangeset_crefvec_t *) + +Help on function is_uname in module ida_name: + +is_uname(*args) + is_uname(name) -> bool + + + Is valid user-specified name? (valid name & !dummy prefix). + + @param name: name to test. may be NULL. (C++: const char *) + +Help on function is_valid_cp in module ida_name: + +is_valid_cp(*args) + is_valid_cp(cp, kind, data=None) -> bool + + + Is the given codepoint acceptable in the given context? + + + @param cp (C++: wchar32_t) + @param kind (C++: nametype_t) + @param data (C++: void *) + +Help on function is_valid_typename in module ida_name: + +is_valid_typename(*args) + is_valid_typename(name) -> bool + + + Is valid type name? + + @param name: name to test. may be NULL. (C++: const char *) + +Help on function is_visible_cp in module ida_name: + +is_visible_cp(*args) + is_visible_cp(cp) -> bool + + + Can a character be displayed in a name? (present in ::NameChars) + + + @param cp (C++: wchar32_t) + +Help on function is_weak_name in module ida_name: + +is_weak_name(*args) + is_weak_name(ea) -> bool + +Help on function make_name_auto in module ida_name: + +make_name_auto(*args) + make_name_auto(ea) -> bool + +Help on function make_name_non_public in module ida_name: + +make_name_non_public(*args) + make_name_non_public(ea) + +Help on function make_name_non_weak in module ida_name: + +make_name_non_weak(*args) + make_name_non_weak(ea) + +Help on function make_name_public in module ida_name: + +make_name_public(*args) + make_name_public(ea) + +Help on function make_name_user in module ida_name: + +make_name_user(*args) + make_name_user(ea) -> bool + +Help on function make_name_weak in module ida_name: + +make_name_weak(*args) + make_name_weak(ea) + +Help on function rebuild_nlist in module ida_name: + +rebuild_nlist(*args) + rebuild_nlist() + + + Rebuild names list. + +Help on function reorder_dummy_names in module ida_name: + +reorder_dummy_names(*args) + reorder_dummy_names() + + + Renumber dummy names. + +Help on function set_cp_validity in module ida_name: + +set_cp_validity(*args) + set_cp_validity(kind, cp, endcp=wchar32_t(-1), valid=True) + + + Mark the given codepoint (or range) as acceptable or unacceptable in + the given context If 'endcp' is not BADCP, it is considered to be the + end of the range: [cp, endcp), and is not included in the range + + @param kind (C++: ucdr_kind_t) + @param cp (C++: wchar32_t) + @param endcp (C++: wchar32_t) + @param valid (C++: bool) + +Help on function set_debug_name in module ida_name: + +set_debug_name(*args) + set_debug_name(ea, name) -> bool + +Help on function set_dummy_name in module ida_name: + +set_dummy_name(*args) + set_dummy_name(_from, ea) -> bool + + + Give an autogenerated (dummy) name. Autogenerated names have special + prefixes (loc_...). + + @param _from: linear address of the operand which references to the + address (C++: ea_t) + @param ea: linear address (C++: ea_t) + +Help on function set_name in module ida_name: + +set_name(*args) + set_name(ea, name, flags=0) -> bool + + + Set or delete name of an item at the specified address. An item can be + anything: instruction, function, data byte, word, string, structure, + etc... Include name into the list of names. + + @param ea: linear address. do nothing if ea is not valid (return 0). + tail bytes can't have names. (C++: ea_t) + @param name: new name. NULL: do nothing (return 0). "" : delete + name. otherwise this is a new name. (C++: const char *) + @param flags: Set name flags . If a bit is not specified, then the + corresponding action is not performed and the name will + retain the same bits as before calling this function. + For new names, default is: non-public, non-weak, non- + auto. (C++: int) + +Help on function show_name in module ida_name: + +show_name(*args) + show_name(ea) + + + Insert name to the list of names. + + + @param ea (C++: ea_t) + +Help on function validate_name in module ida_name: + +validate_name(*args) + validate_name(name, type, flags=0) -> PyObject * + + + Validate a name. This function replaces all invalid characters in the + name with SUBSTCHAR. However, it will return false if name is valid + but not allowed to be an identifier (is a register name). + + @param name: ptr to name. the name will be modified (C++: qstring *) + @param type: the type of name we want to validate (C++: nametype_t) + @param flags: see SN_* . Only SN_IDBENC is currently considered (C++: + int) + @return: success + +=== ida_name EPYDOC INJECTIONS === +ida_name.FUNC_IMPORT_PREFIX +""" +Name prefix used by IDA for the imported functions. +""" + +ida_name.GETN_APPZERO +""" +append a struct field name if the field offset is zero? + +meaningful only if the name refers to a structure. +""" + +ida_name.GETN_NODUMMY +""" +do not create a new dummy name but pretend it exists +""" + +ida_name.GETN_NOFIXUP +""" +ignore the fixup information when producing the name +""" + +ida_name.GNCN_NOCOLOR +""" +generate an uncolored name +""" + +ida_name.GNCN_NODBGNM +""" +don't use debug names +""" + +ida_name.GNCN_NOFUNC +""" +don't generate funcname+... expressions +""" + +ida_name.GNCN_NOLABEL +""" +don't generate labels +""" + +ida_name.GNCN_NOSEG +""" +ignore the segment prefix when producing the name +""" + +ida_name.GNCN_PREFDBG +""" +if using debug names, prefer debug names over function names +""" + +ida_name.GNCN_REQFUNC +""" +return 0 if the address does not belong to a function +""" + +ida_name.GNCN_REQNAME +""" +return 0 if the address can only be represented as a hex number +""" + +ida_name.GNCN_SEGNUM +""" +segment part is displayed as a hex number +""" + +ida_name.GNCN_SEG_FUNC +""" +generate both segment and function names (default is to omit segment +name if a function name is present) +""" + +ida_name.GN_COLORED +""" +return colored name +""" + +ida_name.GN_DEMANGLED +""" +return demangled name +""" + +ida_name.GN_ISRET +""" +for dummy names: use retloc +""" + +ida_name.GN_LOCAL +""" +try to get local name first; if failed, get global +""" + +ida_name.GN_LONG +""" +use long form of demangled name +""" + +ida_name.GN_NOT_DUMMY +""" +do not return a dummy name +""" + +ida_name.GN_NOT_ISRET +""" +for dummy names: do not use retloc +""" + +ida_name.GN_SHORT +""" +use short form of demangled name +""" + +ida_name.GN_STRICT +""" +fail if cannot demangle +""" + +ida_name.GN_VISIBLE +""" +replace forbidden characters by SUBSTCHAR +""" + +ida_name.MAXNAMELEN +""" +Maximum length of a name in IDA (with the trailing zero) +""" + +ida_name.NT_ABS +""" +name is absolute symbol ( 'SEG_ABSSYM' ) +""" + +ida_name.NT_BMASK +""" +name is a bit group mask name +""" + +ida_name.NT_BYTE +""" +name is byte name (regular name) +""" + +ida_name.NT_ENUM +""" +name is symbolic constant +""" + +ida_name.NT_LOCAL +""" +name is local label +""" + +ida_name.NT_NONE +""" +name doesn't exist or has no value +""" + +ida_name.NT_REGVAR +""" +name is a renamed register (*value is idx into pfn->regvars) +""" + +ida_name.NT_SEG +""" +name is segment or segment register name +""" + +ida_name.NT_STKVAR +""" +name is stack variable name +""" + +ida_name.NT_STROFF +""" +name is structure member +""" + +ida_name.SN_AUTO +""" +if set, make name autogenerated +""" + +ida_name.SN_DELTAIL +""" +delete the hindering item + +if name cannot be set because of a tail byte, +""" + +ida_name.SN_FORCE +""" +if the specified name is already present in the database, try +variations with a numerical suffix like "_123" +""" + +ida_name.SN_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly. Specifying SN_IDBENC also implies SN_NODUMMY +""" + +ida_name.SN_LOCAL +""" +create local name. a function should exist. local names can't be +public or weak. also they are not included into the list of names they +can't have dummy prefixes. +""" + +ida_name.SN_NOCHECK +""" +Don't fail if the name contains invalid characters. If this bit is +clear, all invalid chars (those !is_ident_cp()) will be replaced by +SUBSTCHAR List of valid characters is defined in ida.cfg +""" + +ida_name.SN_NODUMMY +""" +automatically prepend the name with '_' if it begins with a dummy +suffix such as 'sub_'. See also SN_IDBENC +""" + +ida_name.SN_NOLIST +""" +if set, exclude name from the list. if not set, then include the name +into the list (however, if other bits are set, the name might be +immediately excluded from the list). +""" + +ida_name.SN_NON_AUTO +""" +if set, make name non-autogenerated +""" + +ida_name.SN_NON_PUBLIC +""" +if set, make name non-public +""" + +ida_name.SN_NON_WEAK +""" +if set, make name non-weak +""" + +ida_name.SN_NOWARN +""" +don't display a warning if failed +""" + +ida_name.SN_PUBLIC +""" +if set, make name public +""" + +ida_name.SN_WEAK +""" +if set, make name weak +""" +=== ida_name EPYDOC INJECTIONS END === +Help on function exist in module ida_netnode: + +exist(*args) + exist(n) -> bool + +Help on class netnode in module ida_netnode: + +class netnode(__builtin__.object) + | Proxy of C++ netnode class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, n) -> bool + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> netnode + | __init__(self, num) -> netnode + | __init__(self, _name, namlen=0, do_create=False) -> netnode + | + | __ne__(self, *args) + | __ne__(self, n) -> bool + | __ne__(self, x) -> bool + | + | __repr__ = _swig_repr(self) + | + | altdel(self, *args) + | altdel(self, alt, tag=atag) -> bool + | altdel(self) -> bool + | + | altdel_all(self, *args) + | altdel_all(self, tag) -> bool + | + | altdel_ea(self, *args) + | altdel_ea(self, ea, tag=atag) -> bool + | + | altdel_idx8(self, *args) + | altdel_idx8(self, alt, tag) -> bool + | + | altfirst(self, *args) + | altfirst(self, tag=atag) -> nodeidx_t + | + | altfirst_idx8(self, *args) + | altfirst_idx8(self, tag) -> nodeidx_t + | + | altlast(self, *args) + | altlast(self, tag=atag) -> nodeidx_t + | + | altlast_idx8(self, *args) + | altlast_idx8(self, tag) -> nodeidx_t + | + | altnext(self, *args) + | altnext(self, cur, tag=atag) -> nodeidx_t + | + | altnext_idx8(self, *args) + | altnext_idx8(self, cur, tag) -> nodeidx_t + | + | altprev(self, *args) + | altprev(self, cur, tag=atag) -> nodeidx_t + | + | altprev_idx8(self, *args) + | altprev_idx8(self, cur, tag) -> nodeidx_t + | + | altset(self, *args) + | altset(self, alt, value, tag=atag) -> bool + | + | altset_ea(self, *args) + | altset_ea(self, ea, value, tag=atag) -> bool + | + | altset_idx8(self, *args) + | altset_idx8(self, alt, val, tag) -> bool + | + | altshift(self, *args) + | altshift(self, _from, to, size, tag=atag) -> size_t + | + | altval(self, *args) + | altval(self, alt, tag=atag) -> nodeidx_t + | + | altval_ea(self, *args) + | altval_ea(self, ea, tag=atag) -> nodeidx_t + | + | altval_idx8(self, *args) + | altval_idx8(self, alt, tag) -> nodeidx_t + | + | blobsize(self, *args) + | blobsize(self, _start, tag) -> size_t + | + | blobsize_ea(self, *args) + | blobsize_ea(self, ea, tag) -> size_t + | + | chardel(self, *args) + | chardel(self, alt, tag) -> bool + | + | chardel_ea(self, *args) + | chardel_ea(self, ea, tag) -> bool + | + | chardel_idx8(self, *args) + | chardel_idx8(self, alt, tag) -> bool + | + | charfirst(self, *args) + | charfirst(self, tag) -> nodeidx_t + | + | charfirst_idx8(self, *args) + | charfirst_idx8(self, tag) -> nodeidx_t + | + | charlast(self, *args) + | charlast(self, tag) -> nodeidx_t + | + | charlast_idx8(self, *args) + | charlast_idx8(self, tag) -> nodeidx_t + | + | charnext(self, *args) + | charnext(self, cur, tag) -> nodeidx_t + | + | charnext_idx8(self, *args) + | charnext_idx8(self, cur, tag) -> nodeidx_t + | + | charprev(self, *args) + | charprev(self, cur, tag) -> nodeidx_t + | + | charprev_idx8(self, *args) + | charprev_idx8(self, cur, tag) -> nodeidx_t + | + | charset(self, *args) + | charset(self, alt, val, tag) -> bool + | + | charset_ea(self, *args) + | charset_ea(self, ea, val, tag) -> bool + | + | charset_idx8(self, *args) + | charset_idx8(self, alt, val, tag) -> bool + | + | charshift(self, *args) + | charshift(self, _from, to, size, tag) -> size_t + | + | charval(self, *args) + | charval(self, alt, tag) -> uchar + | + | charval_ea(self, *args) + | charval_ea(self, ea, tag) -> uchar + | + | charval_idx8(self, *args) + | charval_idx8(self, alt, tag) -> uchar + | + | copyto(self, *args) + | copyto(self, target, count=1) -> size_t + | + | create(self, *args) + | create(self, _name, namlen=0) -> bool + | create(self) -> bool + | + | delblob(self, *args) + | delblob(self, _start, tag) -> int + | + | delblob_ea(self, *args) + | delblob_ea(self, ea, tag) -> int + | + | delvalue(self, *args) + | delvalue(self) -> bool + | + | eadel(self, *args) + | eadel(self, ea, tag) -> bool + | + | eadel_idx8(self, *args) + | eadel_idx8(self, idx, tag) -> bool + | + | eaget(self, *args) + | eaget(self, ea, tag) -> ea_t + | + | eaget_idx(self, *args) + | eaget_idx(self, idx, tag) -> ea_t + | + | eaget_idx8(self, *args) + | eaget_idx8(self, idx, tag) -> ea_t + | + | easet(self, *args) + | easet(self, ea, addr, tag) -> bool + | + | easet_idx(self, *args) + | easet_idx(self, idx, addr, tag) -> bool + | + | easet_idx8(self, *args) + | easet_idx8(self, idx, addr, tag) -> bool + | + | end(self, *args) + | end(self) -> bool + | + | get_name(self, *args) + | get_name(self) -> ssize_t + | + | getblob(self, *args) + | getblob(self, start, tag) -> PyObject * + | + | getblob_ea(self, *args) + | getblob_ea(self, ea, tag) -> PyObject * + | + | getclob(self, *args) + | getclob(self, start, tag) -> PyObject * + | + | hashdel(self, *args) + | hashdel(self, idx, tag=htag) -> bool + | + | hashdel_all(self, *args) + | hashdel_all(self, tag=htag) -> bool + | + | hashfirst(self, *args) + | hashfirst(self, tag=htag) -> ssize_t + | + | hashlast(self, *args) + | hashlast(self, tag=htag) -> ssize_t + | + | hashnext(self, *args) + | hashnext(self, idx, tag=htag) -> ssize_t + | + | hashprev(self, *args) + | hashprev(self, idx, tag=htag) -> ssize_t + | + | hashset(self, *args) + | hashset(self, idx, value, tag=htag) -> bool + | + | hashset_buf(self, *args) + | hashset_buf(self, idx, py_str, tag=htag) -> bool + | + | hashset_idx(self, *args) + | hashset_idx(self, idx, value, tag=htag) -> bool + | + | hashstr(self, *args) + | hashstr(self, idx, tag=htag) -> ssize_t + | + | hashstr_buf(self, *args) + | hashstr_buf(self, idx, tag=htag) -> PyObject * + | + | hashval(self, *args) + | hashval(self, idx, tag=htag) -> ssize_t + | + | hashval_long(self, *args) + | hashval_long(self, idx, tag=htag) -> nodeidx_t + | + | index(self, *args) + | index(self) -> nodeidx_t + | + | kill(self, *args) + | kill(self) + | + | long_value(self, *args) + | long_value(self) -> nodeidx_t + | + | lower_bound(self, *args) + | lower_bound(self, cur, tag=stag) -> nodeidx_t + | + | lower_bound_ea(self, *args) + | lower_bound_ea(self, ea, tag=stag) -> nodeidx_t + | + | lower_bound_idx8(self, *args) + | lower_bound_idx8(self, alt, tag) -> nodeidx_t + | + | moveto(self, *args) + | moveto(self, target, count=1) -> size_t + | + | next(self, *args) + | next(self) -> bool + | + | prev(self, *args) + | prev(self) -> bool + | + | rename(self, *args) + | rename(self, newname, namlen=0) -> bool + | + | set(self, *args) + | set(self, value) -> bool + | + | set_long(self, *args) + | set_long(self, x) -> bool + | + | setblob(self, *args) + | setblob(self, buf, _start, tag) -> bool + | + | setblob_ea(self, *args) + | setblob_ea(self, buf, ea, tag) -> bool + | + | start(self, *args) + | start(self) -> bool + | + | supdel(self, *args) + | supdel(self, alt, tag=stag) -> bool + | supdel(self) -> bool + | + | supdel_all(self, *args) + | supdel_all(self, tag) -> bool + | + | supdel_ea(self, *args) + | supdel_ea(self, ea, tag=stag) -> bool + | + | supdel_idx8(self, *args) + | supdel_idx8(self, alt, tag) -> bool + | + | supdel_range(self, *args) + | supdel_range(self, idx1, idx2, tag) -> int + | + | supdel_range_idx8(self, *args) + | supdel_range_idx8(self, idx1, idx2, tag) -> int + | + | supfirst(self, *args) + | supfirst(self, tag=stag) -> nodeidx_t + | + | supfirst_idx8(self, *args) + | supfirst_idx8(self, tag) -> nodeidx_t + | + | suplast(self, *args) + | suplast(self, tag=stag) -> nodeidx_t + | + | suplast_idx8(self, *args) + | suplast_idx8(self, tag) -> nodeidx_t + | + | supnext(self, *args) + | supnext(self, cur, tag=stag) -> nodeidx_t + | + | supnext_idx8(self, *args) + | supnext_idx8(self, alt, tag) -> nodeidx_t + | + | supprev(self, *args) + | supprev(self, cur, tag=stag) -> nodeidx_t + | + | supprev_idx8(self, *args) + | supprev_idx8(self, alt, tag) -> nodeidx_t + | + | supset(self, *args) + | supset(self, alt, value, tag=stag) -> bool + | + | supset_ea(self, *args) + | supset_ea(self, ea, value, tag=stag) -> bool + | + | supset_idx8(self, *args) + | supset_idx8(self, alt, value, tag) -> bool + | + | supshift(self, *args) + | supshift(self, _from, to, size, tag=stag) -> size_t + | + | supstr(self, *args) + | supstr(self, alt, tag=stag) -> ssize_t + | + | supstr_ea(self, *args) + | supstr_ea(self, ea, tag=stag) -> ssize_t + | + | supstr_idx8(self, *args) + | supstr_idx8(self, alt, tag) -> ssize_t + | + | supval(self, *args) + | supval(self, alt, tag=stag) -> ssize_t + | + | supval_ea(self, *args) + | supval_ea(self, ea, tag=stag) -> ssize_t + | + | supval_idx8(self, *args) + | supval_idx8(self, alt, tag) -> ssize_t + | + | valobj(self, *args) + | valobj(self) -> ssize_t + | + | valstr(self, *args) + | valstr(self) -> ssize_t + | + | value_exists(self, *args) + | value_exists(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_netnode(self) + +=== ida_netnode EPYDOC INJECTIONS === +ida_netnode.BADNODE +""" +A number to represent a bad netnode reference. +""" +=== ida_netnode EPYDOC INJECTIONS END === +Help on function add_refinfo_dref in module ida_offset: + +add_refinfo_dref(*args) + add_refinfo_dref(insn, _from, ri, opval, type, opoff) -> ea_t + + + Add xrefs for a reference from the given instruction (\insn_t{ea}). + This function creates a cross references to the target and the base. + 'insn_t::add_off_drefs()' calls this function to create xrefs for + 'offset' operand. + + @param insn: the referencing instruction (C++: const insn_t &) + @param _from: the referencing instruction/data address (C++: ea_t) + @param ri: reference info block from the database (C++: const + refinfo_t &) + @param opval: operand value (usually op_t::value or op_t::addr ) + (C++: adiff_t) + @param type: type of xref (C++: dref_t) + @param opoff: offset of the operand from the start of instruction + (C++: int) + @return: the target address of the reference + +Help on function calc_basevalue in module ida_offset: + +calc_basevalue(*args) + calc_basevalue(target, base) -> ea_t + + + Calculate the value of the reference base. + + + @param target (C++: ea_t) + @param base (C++: ea_t) + +Help on function calc_offset_base in module ida_offset: + +calc_offset_base(*args) + calc_offset_base(ea, n) -> ea_t + + + Try to calculate the offset base This function takes into account the + fixup information, current ds and cs values. + + @param ea: the referencing instruction/data address (C++: ea_t) + @param n: operand number 0: first operand 1: other operand (C++: + int) + @return: output base address or BADADDR + +Help on function calc_probable_base_by_value in module ida_offset: + +calc_probable_base_by_value(*args) + calc_probable_base_by_value(ea, off) -> ea_t + + + Try to calculate the offset base. 2 bases are checked: current ds and + cs. If fails, return 'BADADDR' + + @param ea (C++: ea_t) + @param off (C++: uval_t) + +Help on function calc_reference_data in module ida_offset: + +calc_reference_data(*args) + calc_reference_data(target, base, _from, ri, opval) -> bool + + + Calculate the target and base addresses of an offset expression. The + calculated target and base addresses are returned in the locations + pointed by 'base' and 'target'. In case 'ri.base' is 'BADADDR' , the + function calculates the offset base address from the referencing + instruction/data address. The target address is copied from ri.target. + If ri.target is 'BADADDR' then the target is calculated using the base + address and 'opval'. This function also checks if 'opval' matches the + full value of the reference and takes in account the memory-mapping. + + @param target: output target address (C++: ea_t *) + @param base: output base address (C++: ea_t *) + @param _from: the referencing instruction/data address (C++: ea_t) + @param ri: reference info block from the database (C++: const + refinfo_t &) + @param opval: operand value (usually op_t::value or op_t::addr ) + (C++: adiff_t) + @return: success + +Help on function calc_target in module ida_offset: + +calc_target(*args) + calc_target(_from, opval, ri) -> ea_t + calc_target(_from, ea, n, opval) -> ea_t + + + Calculates the target, using the provided 'refinfo_t' . + + + @param _from (C++: ea_t) + @param opval (C++: adiff_t) + @param ri (C++: const refinfo_t &) + +Help on function can_be_off32 in module ida_offset: + +can_be_off32(*args) + can_be_off32(ea) -> ea_t + + + Does the specified address contain a valid OFF32 value?. For symbols + in special segments the displacement is not taken into account. If + yes, then the target address of OFF32 will be returned. If not, then + 'BADADDR' is returned. + + @param ea (C++: ea_t) + +Help on function get_default_reftype in module ida_offset: + +get_default_reftype(*args) + get_default_reftype(ea) -> reftype_t + + + Get default reference type depending on the segment. + + @param ea (C++: ea_t) + @return: one of REF_OFF8 , REF_OFF16 , REF_OFF32 + +Help on function get_offbase in module ida_offset: + +get_offbase(*args) + get_offbase(ea, n) -> ea_t + + + Get offset base value + + @param ea: linear address (C++: ea_t) + @param n: number of operand (C++: int) + @return: offset base or BADADDR + +Help on function get_offset_expr in module ida_offset: + +get_offset_expr(*args) + get_offset_expr(ea, n, ri, _from, offset, getn_flags=0) -> str + + + See 'get_offset_expression()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param ri (C++: const refinfo_t &) + @param _from (C++: ea_t) + @param offset (C++: adiff_t) + @param getn_flags (C++: int) + +Help on function get_offset_expression in module ida_offset: + +get_offset_expression(*args) + get_offset_expression(ea, n, _from, offset, getn_flags=0) -> str + + + Get offset expression (in the form "offset name+displ"). This function + uses offset translation function (\ph{translate}) if your IDP module + has such a function. Translation function is used to map linear + addresses in the program (only for offsets).Example: suppose we have + instruction at linear address 0x00011000: \v{mov ax, [bx+7422h]} and + at ds:7422h: \v{array dw ...} We want to represent the second operand + with an offset expression, so then we call: \v{ + get_offset_expresion(0x001100, 1, 0x001102, 0x7422, buf); | | | | | | + | | | +output buffer | | | +value of offset expression | | +address + offset value in the instruction | +the second operand +address of + instruction } and the function will return a colored string: \v{offset + array} + + @param ea: start of instruction or data with the offset expression + (C++: ea_t) + @param n: number of operand (may be ORed with OPND_OUTER ) 0: first + operand 1: second operand (C++: int) + @param _from: 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. (C++: ea_t) + @param offset: value of operand or its part. The function will return + text representation of this value as offset expression. + (C++: adiff_t) + @param getn_flags: combination of: GETN_APPZERO : meaningful only if + the name refers to a structure. appends the struct + field name if the field offset is zero + GETN_NODUMMY : do not generate dummy names for the + expression but pretend they already exist (useful + to verify that the offset expression can be + represented) (C++: int) + +Help on function op_offset in module ida_offset: + +op_offset(*args) + op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int + + + See 'op_offset_ex()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param type (C++: reftype_t) + @param target (C++: ea_t) + @param base (C++: ea_t) + @param tdelta (C++: adiff_t) + +Help on function op_offset_ex in module ida_offset: + +op_offset_ex(*args) + op_offset_ex(ea, n, ri) -> int + + + Convert operand to a reference. To delete an offset, use + 'clr_op_type()' function. + + @param ea: linear address. if 'ea' has unexplored bytes, try to + convert them to no segment: fail 16bit segment: to + 16bit word data 32bit segment: to dword (C++: ea_t) + @param n: number of operand (may be ORed with OPND_OUTER ) 0: first + 1: second 2: third OPND_MASK : all operands (C++: int) + @param ri: reference information (C++: const refinfo_t *) + @return: success + +Help on function op_plain_offset in module ida_offset: + +op_plain_offset(*args) + op_plain_offset(ea, n, base) -> bool + + + Convert operand to a reference with the default reference type. + + + @param ea (C++: ea_t) + @param n (C++: int) + @param base (C++: ea_t) + +Help on class __qmutex_t in module ida_pro: + +class __qmutex_t(__builtin__.object) + | Proxy of C++ __qmutex_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qmutex_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete___qmutex_t(self) + +Help on class __qsemaphore_t in module ida_pro: + +class __qsemaphore_t(__builtin__.object) + | Proxy of C++ __qsemaphore_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qsemaphore_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete___qsemaphore_t(self) + +Help on class __qthread_t in module ida_pro: + +class __qthread_t(__builtin__.object) + | Proxy of C++ __qthread_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qthread_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete___qthread_t(self) + +Help on class _qstrvec_t in module ida_pro: + +class _qstrvec_t(ida_idaapi.py_clinked_object_t) + | WARNING: It is very unlikely an IDAPython user should ever, ever + | have to use this type. It should only be used for IDAPython internals. + | + | For example, in py_askusingform.py, we ctypes-expose to the IDA + | kernel & UI a qstrvec instance, in case a DropdownListControl is + | constructed. + | That's because that's what ask_form expects, and we have no + | choice but to make a DropdownListControl hold a qstrvec_t. + | This is, afaict, the only situation where a Python + | _qstrvec_t is required. + | + | Method resolution order: + | _qstrvec_t + | ida_idaapi.py_clinked_object_t + | ida_idaapi.pyidc_opaque_object_t + | __builtin__.object + | + | Methods defined here: + | + | __getitem__(self, idx) + | Gets the string at the given index + | + | __init__(self, items=None) + | + | __setitem__(self, idx, s) + | Sets string at the given index + | + | _create_clink(self) + | + | _del_clink(self, lnk) + | + | _get_clink_ptr(self) + | + | _qstrvec_t__get_size = __get_size(self) + | + | add(self, s) + | Add a string to the vector + | + | addressof(self, idx) + | Returns the address (as number) of the qstring at the given index + | + | assign(self, other) + | Copies the contents of 'other' to 'self' + | + | clear(self, qclear=False) + | Clears all strings from the vector. + | @param qclear: Just reset the size but do not actually free the memory + | + | from_list(self, lst) + | Populates the vector from a Python string list + | + | insert(self, idx, s) + | Insert a string into the vector + | + | remove(self, idx) + | Removes a string from the vector + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | size + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_idaapi.py_clinked_object_t: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.py_clinked_object_t: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on class boolvec_t in module ida_pro: + +class boolvec_t(__builtin__.object) + | Proxy of C++ qvector< bool > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> bool const & + | + | __init__(self, *args) + | __init__(self) -> boolvec_t + | __init__(self, x) -> boolvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< bool >::iterator + | begin(self) -> qvector< bool >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< bool >::iterator + | end(self) -> qvector< bool >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< bool >::iterator + | erase(self, first, last) -> qvector< bool >::iterator + | + | extract(self, *args) + | extract(self) -> bool * + | + | find(self, *args) + | find(self, x) -> qvector< bool >::iterator + | find(self, x) -> qvector< bool >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=bool()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< bool >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> bool & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_boolvec_t(self) + +Help on class channel_redir_t in module ida_pro: + +class channel_redir_t(__builtin__.object) + | Proxy of C++ channel_redir_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> channel_redir_t + | + | __repr__ = _swig_repr(self) + | + | is_append(self, *args) + | is_append(self) -> bool + | + | is_input(self, *args) + | is_input(self) -> bool + | + | is_output(self, *args) + | is_output(self) -> bool + | + | is_quoted(self, *args) + | is_quoted(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fd + | channel_redir_t_fd_get(self) -> int + | + | file + | channel_redir_t_file_get(self) -> qstring * + | + | flags + | channel_redir_t_flags_get(self) -> int + | + | length + | channel_redir_t_length_get(self) -> int + | + | start + | channel_redir_t_start_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_channel_redir_t(self) + +Help on function check_process_exit in module ida_pro: + +check_process_exit(*args) + check_process_exit(handle, exit_code, msecs=-1) -> int + + + Check whether process has terminated or not. + + @param handle: process handle to wait for (C++: void *) + @param exit_code: pointer to the buffer for the exit code (C++: int *) + +Help on function clear_bits in module ida_pro: + +clear_bits(*args) + clear_bits(bitmap, low, high) + + + Clear bits between [low, high) in 'bitmap'. + + + @param bitmap (C++: uchar *) + @param low (C++: size_t) + @param high (C++: size_t) + +Help on class ea_array in module ida_pro: + +class ea_array(__builtin__.object) + | Proxy of C++ ea_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, index) -> ea_t + | + | __init__(self, *args) + | __init__(self, nelements) -> ea_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, index, value) + | + | cast(self, *args) + | cast(self) -> ea_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> ea_array + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ea_array(self) + +Help on function ea_array_frompointer in module ida_pro: + +ea_array_frompointer(*args) + ea_array_frompointer(t) -> ea_array + +Help on class ea_pointer in module ida_pro: + +class ea_pointer(__builtin__.object) + | Proxy of C++ ea_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ea_pointer + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, value) + | + | cast(self, *args) + | cast(self) -> ea_t * + | + | value(self, *args) + | value(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> ea_pointer + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ea_pointer(self) + +Help on function ea_pointer_frompointer in module ida_pro: + +ea_pointer_frompointer(*args) + ea_pointer_frompointer(t) -> ea_pointer + +Help on function extend_sign in module ida_pro: + +extend_sign(*args) + extend_sign(v, nbytes, sign_extend) -> uint64 + + + Sign-, or zero-extend the value 'v' to occupy 64 bits. The value 'v' + is considered to be of size 'nbytes'. + + @param v (C++: uint64) + @param nbytes (C++: int) + @param sign_extend (C++: bool) + +Help on class instant_dbgopts_t in module ida_pro: + +class instant_dbgopts_t(__builtin__.object) + | Proxy of C++ instant_dbgopts_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> instant_dbgopts_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _pass + | instant_dbgopts_t__pass_get(self) -> qstring * + | + | attach + | instant_dbgopts_t_attach_get(self) -> bool + | + | debmod + | instant_dbgopts_t_debmod_get(self) -> qstring * + | + | env + | instant_dbgopts_t_env_get(self) -> qstring * + | + | event_id + | instant_dbgopts_t_event_id_get(self) -> int + | + | host + | instant_dbgopts_t_host_get(self) -> qstring * + | + | pid + | instant_dbgopts_t_pid_get(self) -> int + | + | port + | instant_dbgopts_t_port_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_instant_dbgopts_t(self) + +Help on class longlongvec_t in module ida_pro: + +class longlongvec_t(__builtin__.object) + | Proxy of C++ qvector< long long > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> long long const & + | + | __init__(self, *args) + | __init__(self) -> longlongvec_t + | __init__(self, x) -> longlongvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< long long >::iterator + | begin(self) -> qvector< long long >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< long long >::iterator + | end(self) -> qvector< long long >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< long long >::iterator + | erase(self, first, last) -> qvector< long long >::iterator + | + | extract(self, *args) + | extract(self) -> long long * + | + | find(self, *args) + | find(self, x) -> qvector< long long >::iterator + | find(self, x) -> qvector< long long >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< long long >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> long long & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_longlongvec_t(self) + +Help on class int_pointer in module ida_pro: + +class int_pointer(__builtin__.object) + | Proxy of C++ int_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> int_pointer + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, value) + | + | cast(self, *args) + | cast(self) -> int * + | + | value(self, *args) + | value(self) -> int + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> int_pointer + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_int_pointer(self) + +Help on function int_pointer_frompointer in module ida_pro: + +int_pointer_frompointer(*args) + int_pointer_frompointer(t) -> int_pointer + +Help on class intvec_t in module ida_pro: + +class intvec_t(__builtin__.object) + | Proxy of C++ qvector< int > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> int const & + | + | __init__(self, *args) + | __init__(self) -> intvec_t + | __init__(self, x) -> intvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< int >::iterator + | begin(self) -> qvector< int >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< int >::iterator + | end(self) -> qvector< int >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< int >::iterator + | erase(self, first, last) -> qvector< int >::iterator + | + | extract(self, *args) + | extract(self) -> int * + | + | find(self, *args) + | find(self, x) -> qvector< int >::iterator + | find(self, x) -> qvector< int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< int >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> int & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_intvec_t(self) + +Help on function is_control_tty in module ida_pro: + +is_control_tty(*args) + is_control_tty(fd) -> enum tty_control_t + + + Check if the current process is the owner of the TTY specified by 'fd' + (typically an opened descriptor to /dev/tty). + + @param fd (C++: int) + +Help on function is_main_thread in module ida_pro: + +is_main_thread(*args) + is_main_thread() -> bool + + + Are we running in the main thread? + +Help on function log2ceil in module ida_pro: + +log2ceil(*args) + log2ceil(d64) -> int + + + calculate ceil(log2(d64)) or floor(log2(d64)), it returns 0 if d64 == + 0 + + @param d64 (C++: uint64) + +Help on function log2floor in module ida_pro: + +log2floor(*args) + log2floor(d64) -> int + +Help on function parse_dbgopts in module ida_pro: + +parse_dbgopts(*args) + parse_dbgopts(ido, r_switch) -> bool + + + Parse the -r command line switch (for instant debugging). r_switch + points to the value of the -r switch. Example: win32@localhost+ + + @param ido (C++: struct instant_dbgopts_t *) + @param r_switch (C++: const char *) + @return: true-ok, false-parse error + +Help on function qatoll in module ida_pro: + +qatoll(*args) + qatoll(nptr) -> int64 + +Help on function qcontrol_tty in module ida_pro: + +qcontrol_tty(*args) + qcontrol_tty() + + + Make the current terminal the controlling terminal of the calling + process.The current terminal is supposed to be /dev/tty + +Help on function qdetach_tty in module ida_pro: + +qdetach_tty(*args) + qdetach_tty() + + + If the current terminal is the controlling terminal of the calling + process, give up this controlling terminal.The current terminal is + supposed to be /dev/tty + +Help on function qexit in module ida_pro: + +qexit(*args) + qexit(code) + + + Call qatexit functions, shut down UI and kernel, and exit. + + @param code: exit code (C++: int) + +Help on class qmutex_locker_t in module ida_pro: + +class qmutex_locker_t(__builtin__.object) + | Proxy of C++ qmutex_locker_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _lock) -> qmutex_locker_t + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qmutex_locker_t(self) + +Help on class qrefcnt_obj_t in module ida_pro: + +class qrefcnt_obj_t(__builtin__.object) + | Proxy of C++ qrefcnt_obj_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | release(self, *args) + | release(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | refcnt + | qrefcnt_obj_t_refcnt_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_qrefcnt_obj_t(self) + +Help on function qstrvec_t_add in module ida_pro: + +qstrvec_t_add(*args) + qstrvec_t_add(_self, s) -> bool + +Help on function qstrvec_t_addressof in module ida_pro: + +qstrvec_t_addressof(*args) + qstrvec_t_addressof(_self, idx) -> PyObject * + +Help on function qstrvec_t_assign in module ida_pro: + +qstrvec_t_assign(*args) + qstrvec_t_assign(_self, other) -> bool + +Help on function qstrvec_t_clear in module ida_pro: + +qstrvec_t_clear(*args) + qstrvec_t_clear(_self, qclear) -> bool + +Help on function qstrvec_t_create in module ida_pro: + +qstrvec_t_create(*args) + qstrvec_t_create() -> PyObject * + +Help on function qstrvec_t_destroy in module ida_pro: + +qstrvec_t_destroy(*args) + qstrvec_t_destroy(py_obj) -> bool + +Help on function qstrvec_t_from_list in module ida_pro: + +qstrvec_t_from_list(*args) + qstrvec_t_from_list(_self, py_list) -> bool + +Help on function qstrvec_t_get in module ida_pro: + +qstrvec_t_get(*args) + qstrvec_t_get(_self, idx) -> PyObject * + +Help on function qstrvec_t_get_clink in module ida_pro: + +qstrvec_t_get_clink(*args) + qstrvec_t_get_clink(_self) -> qstrvec_t * + +Help on function qstrvec_t_get_clink_ptr in module ida_pro: + +qstrvec_t_get_clink_ptr(*args) + qstrvec_t_get_clink_ptr(_self) -> PyObject * + +Help on function qstrvec_t_insert in module ida_pro: + +qstrvec_t_insert(*args) + qstrvec_t_insert(_self, idx, s) -> bool + +Help on function qstrvec_t_remove in module ida_pro: + +qstrvec_t_remove(*args) + qstrvec_t_remove(_self, idx) -> bool + +Help on function qstrvec_t_set in module ida_pro: + +qstrvec_t_set(*args) + qstrvec_t_set(_self, idx, s) -> bool + +Help on function qstrvec_t_size in module ida_pro: + +qstrvec_t_size(*args) + qstrvec_t_size(_self) -> size_t + +Help on function quote_cmdline_arg in module ida_pro: + +quote_cmdline_arg(*args) + quote_cmdline_arg(arg) -> bool + + + Quote a command line argument if it contains escape characters. For + example, *.c will be converted into "*.c" because * may be + inadvertently expanded by the shell + + @param arg (C++: qstring *) + @return: true: modified 'arg' + +Help on function qvector_reserve in module ida_pro: + +qvector_reserve(*args) + qvector_reserve(vec, old, cnt, elsize) -> void * + + + Change capacity of given qvector. + + @param vec: a pointer to a qvector (C++: void *) + @param old: a pointer to the qvector's array (C++: void *) + @param cnt: number of elements to reserve (C++: size_t) + @param elsize: size of each element (C++: size_t) + @return: a pointer to the newly allocated array + +Help on function readbytes in module ida_pro: + +readbytes(*args) + readbytes(h, res, size, mf) -> int + + + Read at most 4 bytes from file. + + @param h: file handle (C++: int) + @param res: value read from file (C++: uint32 *) + @param size: size of value in bytes (1,2,4) (C++: int) + @param mf: is MSB first? (C++: bool) + @return: 0 on success, nonzero otherwise + +Help on function reloc_value in module ida_pro: + +reloc_value(*args) + reloc_value(value, size, delta, mf) + +Help on function relocate_relobj in module ida_pro: + +relocate_relobj(*args) + relocate_relobj(_relobj, ea, mf) -> bool + +Help on class sel_array in module ida_pro: + +class sel_array(__builtin__.object) + | Proxy of C++ sel_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, index) -> sel_t + | + | __init__(self, *args) + | __init__(self, nelements) -> sel_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, index, value) + | + | cast(self, *args) + | cast(self) -> sel_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> sel_array + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sel_array(self) + +Help on function sel_array_frompointer in module ida_pro: + +sel_array_frompointer(*args) + sel_array_frompointer(t) -> sel_array + +Help on class sel_pointer in module ida_pro: + +class sel_pointer(__builtin__.object) + | Proxy of C++ sel_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sel_pointer + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, value) + | + | cast(self, *args) + | cast(self) -> sel_t * + | + | value(self, *args) + | value(self) -> sel_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> sel_pointer + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sel_pointer(self) + +Help on function sel_pointer_frompointer in module ida_pro: + +sel_pointer_frompointer(*args) + sel_pointer_frompointer(t) -> sel_pointer + +Help on function set_bits in module ida_pro: + +set_bits(*args) + set_bits(bitmap, low, high) + + + Set bits between [low, high) in 'bitmap'. + + + @param bitmap (C++: uchar *) + @param low (C++: size_t) + @param high (C++: size_t) + +Help on class sizevec_t in module ida_pro: + +class sizevec_t(__builtin__.object) + | Proxy of C++ qvector< size_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> size_t const & + | + | __init__(self, *args) + | __init__(self) -> sizevec_t + | __init__(self, x) -> sizevec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> size_t const & + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< size_t >::iterator + | begin(self) -> qvector< size_t >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< size_t >::iterator + | end(self) -> qvector< size_t >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< size_t >::iterator + | erase(self, first, last) -> qvector< size_t >::iterator + | + | extract(self, *args) + | extract(self) -> size_t * + | + | find(self, *args) + | find(self, x) -> qvector< size_t >::iterator + | find(self, x) -> qvector< size_t >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=size_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< size_t >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> size_t & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sizevec_t(self) + +Help on function str2user in module ida_pro: + +str2user(*args) + str2user(str) -> PyObject * + + + Insert C-style escape characters to string + + @return: new string with escape characters inserted + +Help on class strvec_t in module ida_pro: + +class strvec_t(__builtin__.object) + | Proxy of C++ qvector< simpleline_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> simpleline_t const & + | + | __init__(self, *args) + | __init__(self) -> strvec_t + | __init__(self, x) -> strvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< simpleline_t >::iterator + | begin(self) -> qvector< simpleline_t >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< simpleline_t >::iterator + | end(self) -> qvector< simpleline_t >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< simpleline_t >::iterator + | erase(self, first, last) -> qvector< simpleline_t >::iterator + | + | extract(self, *args) + | extract(self) -> simpleline_t * + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=simpleline_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< simpleline_t >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> simpleline_t & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_strvec_t(self) + +Help on class sval_pointer in module ida_pro: + +class sval_pointer(__builtin__.object) + | Proxy of C++ sval_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sval_pointer + | + | __repr__ = _swig_repr(self) + | + | assign(self, *args) + | assign(self, value) + | + | cast(self, *args) + | cast(self) -> sval_t * + | + | value(self, *args) + | value(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> sval_pointer + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sval_pointer(self) + +Help on function sval_pointer_frompointer in module ida_pro: + +sval_pointer_frompointer(*args) + sval_pointer_frompointer(t) -> sval_pointer + +Help on class tid_array in module ida_pro: + +class tid_array(__builtin__.object) + | Proxy of C++ tid_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, index) -> tid_t + | + | __init__(self, *args) + | __init__(self, nelements) -> tid_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, index, value) + | + | cast(self, *args) + | cast(self) -> tid_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> tid_array + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tid_array(self) + +Help on function tid_array_frompointer in module ida_pro: + +tid_array_frompointer(*args) + tid_array_frompointer(t) -> tid_array + +Help on class uchar_array in module ida_pro: + +class uchar_array(__builtin__.object) + | Proxy of C++ uchar_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, index) -> uchar + | + | __init__(self, *args) + | __init__(self, nelements) -> uchar_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, index, value) + | + | cast(self, *args) + | cast(self) -> uchar * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> uchar_array + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_uchar_array(self) + +Help on function uchar_array_frompointer in module ida_pro: + +uchar_array_frompointer(*args) + uchar_array_frompointer(t) -> uchar_array + +Help on class ulonglongvec_t in module ida_pro: + +class ulonglongvec_t(__builtin__.object) + | Proxy of C++ qvector< unsigned long long > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> unsigned long long const & + | + | __init__(self, *args) + | __init__(self) -> ulonglongvec_t + | __init__(self, x) -> ulonglongvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< unsigned long long >::iterator + | begin(self) -> qvector< unsigned long long >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< unsigned long long >::iterator + | end(self) -> qvector< unsigned long long >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< unsigned long long >::iterator + | erase(self, first, last) -> qvector< unsigned long long >::iterator + | + | extract(self, *args) + | extract(self) -> unsigned long long * + | + | find(self, *args) + | find(self, x) -> qvector< unsigned long long >::iterator + | find(self, x) -> qvector< unsigned long long >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< unsigned long long >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> unsigned long long & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ulonglongvec_t(self) + +Help on class uintvec_t in module ida_pro: + +class uintvec_t(__builtin__.object) + | Proxy of C++ qvector< unsigned int > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> unsigned int const & + | + | __init__(self, *args) + | __init__(self) -> uintvec_t + | __init__(self, x) -> uintvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< unsigned int >::iterator + | begin(self) -> qvector< unsigned int >::const_iterator + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< unsigned int >::iterator + | end(self) -> qvector< unsigned int >::const_iterator + | + | erase(self, *args) + | erase(self, it) -> qvector< unsigned int >::iterator + | erase(self, first, last) -> qvector< unsigned int >::iterator + | + | extract(self, *args) + | extract(self) -> unsigned int * + | + | find(self, *args) + | find(self, x) -> qvector< unsigned int >::iterator + | find(self, x) -> qvector< unsigned int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< unsigned int >::iterator + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> unsigned int & + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_uintvec_t(self) + +Help on class uval_array in module ida_pro: + +class uval_array(__builtin__.object) + | Proxy of C++ uval_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, index) -> uval_t + | + | __init__(self, *args) + | __init__(self, nelements) -> uval_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, index, value) + | + | cast(self, *args) + | cast(self) -> uval_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) + | frompointer(t) -> uval_array + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_uval_array(self) + +Help on function uval_array_frompointer in module ida_pro: + +uval_array_frompointer(*args) + uval_array_frompointer(t) -> uval_array + +Help on function writebytes in module ida_pro: + +writebytes(*args) + writebytes(h, l, size, mf) -> int + + + Write at most 4 bytes to file. + + @param h: file handle (C++: int) + @param l: value to write (C++: uint32) + @param size: size of value in bytes (1,2,4) (C++: int) + @param mf: is MSB first? (C++: bool) + @return: 0 on success, nonzero otherwise + +=== ida_pro EPYDOC INJECTIONS === +ida_pro.CP_UTF16 +""" +UTF-16 codepage. +""" + +ida_pro.IDA_SDK_VERSION +""" +IDA SDK v7.4. +""" + +ida_pro.IDBDEC_ESCAPE +""" +convert non-printable characters to C escapes (, \\xNN, \\uNNNN) +""" + +ida_pro.IOREDIR_APPEND +""" +append, do not overwrite the output file +""" + +ida_pro.IOREDIR_INPUT +""" +input redirection +""" + +ida_pro.IOREDIR_OUTPUT +""" +output redirection +""" + +ida_pro.IOREDIR_QUOTED +""" +the file name was quoted +""" + +ida_pro.MAXSTR +""" +maximum string size +""" + +ida_pro.SUBSTCHAR +""" +default char, used if a char cannot be represented in a codepage +""" + +ida_pro.__MF__ +""" +byte sex of our platform (Most significant byte First). 0: little +endian (Intel 80x86). 1: big endian (PowerPC). +""" +=== ida_pro EPYDOC INJECTIONS END === +Help on function forget_problem in module ida_problems: + +forget_problem(*args) + forget_problem(type, ea) -> bool + + + Remove an address from a problem list + + @param type: problem list type (C++: problist_id_t) + @param ea: linear address (C++: ea_t) + @return: success + +Help on function get_problem in module ida_problems: + +get_problem(*args) + get_problem(type, lowea) -> ea_t + + + Get an address from the specified problem list. The address is not + removed from the list. + + @param type: problem list type (C++: problist_id_t) + @param lowea: the returned address will be higher or equal than the + specified address (C++: ea_t) + @return: linear address or BADADDR + +Help on function get_problem_desc in module ida_problems: + +get_problem_desc(*args) + get_problem_desc(t, ea) -> str + + + Get the human-friendly description of the problem, if one was provided + to remember_problem. + + @param t: problem list type. (C++: problist_id_t) + @param ea: linear address. (C++: ea_t) + @return: the message length or -1 if none + +Help on function get_problem_name in module ida_problems: + +get_problem_name(*args) + get_problem_name(type, longname=True) -> char const * + + + Get problem list description. + + + @param type (C++: problist_id_t) + @param longname (C++: bool) + +Help on function is_problem_present in module ida_problems: + +is_problem_present(*args) + is_problem_present(t, ea) -> bool + + + Check if the specified address is present in the problem list. + + + @param t (C++: problist_id_t) + @param ea (C++: ea_t) + +Help on function remember_problem in module ida_problems: + +remember_problem(*args) + remember_problem(type, ea, msg=None) + + + Insert an address to a list of problems. Display a message saying + about the problem (except of 'PR_ATTN' , 'PR_FINAL' ) 'PR_JUMP' is + temporarily ignored. + + @param type: problem list type (C++: problist_id_t) + @param ea: linear address (C++: ea_t) + @param msg: a user-friendly message to be displayed instead of the + default more generic one associated with the type of + problem. Defaults to NULL. (C++: const char *) + +Help on function was_ida_decision in module ida_problems: + +was_ida_decision(*args) + was_ida_decision(ea) -> bool + +Help on class array_of_rangesets in module ida_range: + +class array_of_rangesets(__builtin__.object) + | Proxy of C++ qvector< rangeset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> rangeset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_rangesets + | __init__(self, x) -> array_of_rangesets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> rangeset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> rangeset_t + | begin(self) -> rangeset_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> rangeset_t + | end(self) -> rangeset_t + | + | erase(self, *args) + | erase(self, it) -> rangeset_t + | erase(self, first, last) -> rangeset_t + | + | extract(self, *args) + | extract(self) -> rangeset_t + | + | find(self, *args) + | find(self, x) -> rangeset_t + | find(self, x) -> rangeset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=rangeset_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> rangeset_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> rangeset_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_array_of_rangesets(self) + +Help on class range_t in module ida_range: + +class range_t(__builtin__.object) + | Proxy of C++ range_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> range_t + | __init__(self, ea1, ea2) -> range_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_range_t(self) + +Help on function range_t_print in module ida_range: + +range_t_print(*args) + range_t_print(cb) -> str + + + Helper function. Should not be called directly! + +Help on class rangeset_t in module ida_range: + +class rangeset_t(__builtin__.object) + | Proxy of C++ rangeset_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, aset) -> bool + | + | __getitem__(self, idx) + | + | __init__(self, *args) + | __init__(self) -> rangeset_t + | __init__(self, range) -> rangeset_t + | __init__(self, ivs) -> rangeset_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = nranges(self, *args) + | + | __ne__(self, *args) + | __ne__(self, aset) -> bool + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self) -> size_t + | + | add(self, *args) + | add(self, range) -> bool + | add(self, start, _end) -> bool + | add(self, aset) -> bool + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | cached_range(self, *args) + | cached_range(self) -> range_t + | + | clear(self, *args) + | clear(self) + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, aset) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | find_range(self, *args) + | find_range(self, ea) -> range_t + | + | getrange(self, *args) + | getrange(self, idx) -> range_t + | + | has_common(self, *args) + | has_common(self, range) -> bool + | has_common(self, aset) -> bool + | + | includes(self, *args) + | includes(self, range) -> bool + | + | intersect(self, *args) + | intersect(self, aset) -> bool + | + | is_equal(self, *args) + | is_equal(self, aset) -> bool + | + | is_subset_of(self, *args) + | is_subset_of(self, aset) -> bool + | + | lastrange(self, *args) + | lastrange(self) -> range_t + | + | next_addr(self, *args) + | next_addr(self, ea) -> ea_t + | + | next_range(self, *args) + | next_range(self, ea) -> ea_t + | + | nranges(self, *args) + | nranges(self) -> size_t + | + | prev_addr(self, *args) + | prev_addr(self, ea) -> ea_t + | + | prev_range(self, *args) + | prev_range(self, ea) -> ea_t + | + | sub(self, *args) + | sub(self, range) -> bool + | sub(self, ea) -> bool + | sub(self, aset) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rangeset_t(self) + +Help on class rangevec_base_t in module ida_range: + +class rangevec_base_t(__builtin__.object) + | Proxy of C++ qvector< range_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __init__(self, *args) + | __init__(self) -> rangevec_base_t + | __init__(self, x) -> rangevec_base_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rangevec_base_t(self) + +Help on class rangevec_t in module ida_range: + +class rangevec_t(rangevec_base_t) + | Proxy of C++ rangevec_t class. + | + | Method resolution order: + | rangevec_t + | rangevec_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rangevec_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rangevec_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from rangevec_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function reg_data_type in module ida_registry: + +reg_data_type(*args) + reg_data_type(name, subkey=None) -> regval_type_t + + + Get data type of a given value. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: false if the [key+]value doesn't exist + +Help on function reg_delete in module ida_registry: + +reg_delete(*args) + reg_delete(name, subkey=None) -> bool + + + Delete a value from the registry. + + @param name: value name (C++: const char *) + @param subkey: parent key (C++: const char *) + @return: success + +Help on function reg_delete_subkey in module ida_registry: + +reg_delete_subkey(*args) + reg_delete_subkey(name) -> bool + + + Delete a key from the registry. + + + @param name (C++: const char *) + +Help on function reg_delete_tree in module ida_registry: + +reg_delete_tree(*args) + reg_delete_tree(name) -> bool + + + Delete a subtree from the registry. + + + @param name (C++: const char *) + +Help on function reg_exists in module ida_registry: + +reg_exists(*args) + reg_exists(name, subkey=None) -> bool + + + Is there already a value with the given name? + + @param name: value name (C++: const char *) + @param subkey: parent key (C++: const char *) + +Help on function reg_flush in module ida_registry: + +reg_flush(*args) + reg_flush() + +Help on function reg_load in module ida_registry: + +reg_load(*args) + reg_load() + +Help on function reg_read_binary in module ida_registry: + +reg_read_binary(*args) + reg_read_binary(name, subkey=None) -> PyObject * + + + Read binary data from the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: false if 'data' is not large enough to hold all data present. + in this case 'data' is left untouched. + +Help on function reg_read_bool in module ida_registry: + +reg_read_bool(*args) + reg_read_bool(name, defval, subkey=None) -> bool + + + Read boolean value from the registry. + + @param name: value name (C++: const char *) + @param defval: default value (C++: bool) + @param subkey: key name (C++: const char *) + @return: boolean read from registry, or 'defval' if the read failed + +Help on function reg_read_int in module ida_registry: + +reg_read_int(*args) + reg_read_int(name, defval, subkey=None) -> int + + + Read integer value from the registry. + + @param name: value name (C++: const char *) + @param defval: default value (C++: int) + @param subkey: key name (C++: const char *) + @return: the value read from the registry, or 'defval' if the read + failed + +Help on function reg_read_string in module ida_registry: + +reg_read_string(*args) + reg_read_string(name, subkey=None, _def=None) -> PyObject * + + + Read a string from the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: success + +Help on function reg_read_strlist in module ida_registry: + +reg_read_strlist(*args) + reg_read_strlist(subkey) + + + Retrieve all string values associated with the given key. Also see + 'reg_update_strlist()' . + + @param subkey (C++: const char *) + +Help on function reg_subkey_exists in module ida_registry: + +reg_subkey_exists(*args) + reg_subkey_exists(name) -> bool + + + Is there already a key with the given name? + + + @param name (C++: const char *) + +Help on function reg_subkey_subkeys in module ida_registry: + +reg_subkey_subkeys(*args) + reg_subkey_subkeys(name) -> PyObject * + + + Get all subkey names of given key. + + + @param name (C++: const char *) + +Help on function reg_subkey_values in module ida_registry: + +reg_subkey_values(*args) + reg_subkey_values(name) -> PyObject * + + + Get all value names under given key. + + + @param name (C++: const char *) + +Help on function reg_update_filestrlist in module ida_registry: + +reg_update_filestrlist(*args) + reg_update_filestrlist(subkey, add, maxrecs, rem=None) + + + Update registry with a file list. Case sensitivity will vary depending + on the target OS.'add' and 'rem' must be UTF-8, just like for regular + string operations. + + @param subkey (C++: const char *) + @param add (C++: const char *) + @param maxrecs (C++: size_t) + @param rem (C++: const char *) + +Help on function reg_update_strlist in module ida_registry: + +reg_update_strlist(*args) + reg_update_strlist(subkey, add, maxrecs, rem=None, ignorecase=False) + + + Update list of strings associated with given key. + + @param subkey: key name (C++: const char *) + @param add: string to be added to list, can be NULL (C++: const char + *) + @param maxrecs: limit list to this size (C++: size_t) + @param rem: string to be removed from list, can be NULL (C++: const + char *) + @param ignorecase: ignore case for 'add' and 'rem' (C++: bool) + +Help on function reg_write_binary in module ida_registry: + +reg_write_binary(*args) + reg_write_binary(name, py_bytes, subkey=None) -> PyObject * + + + Write binary data to the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + +Help on function reg_write_bool in module ida_registry: + +reg_write_bool(*args) + reg_write_bool(name, value, subkey=None) + + + Write boolean value to the registry. + + @param name: value name (C++: const char *) + @param value: boolean to write (nonzero = true) (C++: int) + @param subkey: key name (C++: const char *) + +Help on function reg_write_int in module ida_registry: + +reg_write_int(*args) + reg_write_int(name, value, subkey=None) + + + Write integer value to the registry. + + @param name: value name (C++: const char *) + @param value: value to write (C++: int) + @param subkey: key name (C++: const char *) + +Help on function reg_write_string in module ida_registry: + +reg_write_string(*args) + reg_write_string(name, utf8, subkey=None) + + + Write a string to the registry. + + @param name: value name (C++: const char *) + @param utf8: utf8-encoded string (C++: const char *) + @param subkey: key name (C++: const char *) + +=== ida_registry EPYDOC INJECTIONS === +ida_registry.ROOT_KEY_NAME +""" +Key used to store IDA settings in registry (Windows version).this name +is automatically prepended to all key names passed to functions in +this file. +""" +=== ida_registry EPYDOC INJECTIONS END === +Help on function find_binary in module ida_search: + +find_binary(*args) + find_binary(arg1, arg2, arg3, arg4, arg5) -> ea_t + +Help on function find_code in module ida_search: + +find_code(*args) + find_code(ea, sflag) -> ea_t + + + Find next code address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_data in module ida_search: + +find_data(*args) + find_data(ea, sflag) -> ea_t + + + Find next data address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_defined in module ida_search: + +find_defined(*args) + find_defined(ea, sflag) -> ea_t + + + Find next ea that is the start of an instruction or data. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_error in module ida_search: + +find_error(*args) + find_error(ea, sflag) -> ea_t + + + Find next error or problem. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_imm in module ida_search: + +find_imm(*args) + find_imm(newEA, sflag, srchValue) -> ea_t + + + Find next immediate operand with the given value. + + + @param newEA (C++: ea_t) + @param sflag (C++: int) + @param srchValue (C++: uval_t) + +Help on function find_not_func in module ida_search: + +find_not_func(*args) + find_not_func(ea, sflag) -> ea_t + + + Find next code address that does not belong to a function. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_notype in module ida_search: + +find_notype(*args) + find_notype(ea, sflag) -> ea_t + + + Find next operand without any type info. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_suspop in module ida_search: + +find_suspop(*args) + find_suspop(ea, sflag) -> ea_t + + + Find next suspicious operand. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_text in module ida_search: + +find_text(*args) + find_text(start_ea, y, x, ustr, sflag) -> ea_t + + + See 'search()' + + + @param start_ea (C++: ea_t) + @param y (C++: int) + @param x (C++: int) + @param ustr (C++: const char *) + @param sflag (C++: int) + +Help on function find_unknown in module ida_search: + +find_unknown(*args) + find_unknown(ea, sflag) -> ea_t + + + Find next unexplored address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function search_down in module ida_search: + +search_down(*args) + search_down(sflag) -> bool + + + Is the 'SEARCH_DOWN' bit set? + + + @param sflag (C++: int) + +=== ida_search EPYDOC INJECTIONS === +ida_search.SEARCH_BRK +""" +return 'BADADDR' if Ctrl-Break wass pressed during search +""" + +ida_search.SEARCH_CASE +""" +case-sensitive search (case-insensitive otherwise) +""" + +ida_search.SEARCH_DOWN +""" +search towards higher addresses +""" + +ida_search.SEARCH_IDENT +""" +search for an identifier (text search). it means that the characters +before and after the match cannot be is_visible_char(). +""" + +ida_search.SEARCH_NEXT +""" +for other find_.. functions it is implicitly set + +useful only for 'search()' and find_binary(). +""" + +ida_search.SEARCH_NOBRK +""" +don't test for ctrl-break to interrupt the search +""" + +ida_search.SEARCH_NOSHOW +""" +don't display the search progress/refresh screen +""" + +ida_search.SEARCH_REGEX +""" +regular expressions in search string (only supported for txt search) +""" + +ida_search.SEARCH_UP +""" +search towards lower addresses +""" +=== ida_search EPYDOC INJECTIONS END === +Help on function add_segm in module ida_segment: + +add_segm(*args) + add_segm(para, start, end, name, sclass, flags=0) -> bool + + + Add a new segment, second form. Segment alignment is set to + 'saRelByte' . Segment combination is "public" or "stack" (if segment + class is "STACK"). Addressing mode of segment is taken as default + (16bit or 32bit). Default segment registers are set to 'BADSEL' . If a + segment already exists at the specified range of addresses, this + segment will be truncated. Instructions and data in the old segment + will be deleted if the new segment has another addressing mode or + another segment base address. + + @param para: segment base paragraph. if paragraph can't fit in 16bit, + then a new selector is allocated and mapped to the + paragraph. (C++: ea_t) + @param start: start address of the segment. if start== BADADDR then + start <- to_ea(para,0). (C++: ea_t) + @param end: end address of the segment. end address should be higher + than start address. For emulate empty segments, use + SEG_NULL segment type. If the end address is lower than + start address, then fail. If end== BADADDR , then a + segment up to the next segment will be created (if the + next segment doesn't exist, then 1 byte segment will be + created). If 'end' is too high and the new segment would + overlap the next segment, 'end' is adjusted properly. + (C++: ea_t) + @param name: name of new segment. may be NULL (C++: const char *) + @param sclass: class of the segment. may be NULL. type of the new + segment is modified if class is one of predefined + names: "CODE" -> SEG_CODE "DATA" -> SEG_DATA + "CONST" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> + SEG_BSS "XTRN" -> SEG_XTRN "COMM" -> SEG_COMM + "ABS" -> SEG_ABSSYM (C++: const char *) + @param flags (C++: int) + +Help on function add_segm_ex in module ida_segment: + +add_segm_ex(*args) + add_segm_ex(s, name, sclass, flags) -> bool + + + Add a new segment. If a segment already exists at the specified range + of addresses, this segment will be truncated. Instructions and data in + the old segment will be deleted if the new segment has another + addressing mode or another segment base address. + + @param s: pointer to filled segment structure. segment selector should + have proper mapping (see set_selector() ). if + s.start_ea== BADADDR then s.start_ea <- get_segm_base(&s) + if s.end_ea== BADADDR , then a segment up to the next + segment will be created (if the next segment doesn't exist, + then 1 byte segment will be created). if the s.end_ea < + s.start_ea, then fail. if s.end_ea is too high and the new + segment would overlap the next segment, s.end_ea is adjusted + properly. (C++: segment_t *) + @param name: name of new segment. may be NULL. if specified, the + segment is immediately renamed (C++: const char *) + @param sclass: class of the segment. may be NULL. if specified, the + segment class is immediately changed (C++: const char + *) + @param flags: Add segment flags (C++: int) + +Help on function add_segment_translation in module ida_segment: + +add_segment_translation(*args) + add_segment_translation(segstart, mappedseg) -> bool + + + Add segment translation. + + @param segstart: start address of the segment to add translation to + (C++: ea_t) + @param mappedseg: start address of the overlayed segment (C++: ea_t) + +Help on function allocate_selector in module ida_segment: + +allocate_selector(*args) + allocate_selector(segbase) -> sel_t + + + Allocate a selector for a segment unconditionally. You must call this + function before calling 'add_segm_ex()' . 'add_segm()' calls this + function itself, so you don't need to allocate a selector. This + function will allocate a new free selector and setup its mapping using + 'find_free_selector()' and 'set_selector()' functions. + + @param segbase: a new segment base paragraph (C++: ea_t) + @return: the allocated selector number + +Help on function change_segment_status in module ida_segment: + +change_segment_status(*args) + change_segment_status(s, is_deb_segm) -> int + + + Convert a debugger segment to a regular segment and vice versa. When + converting debug->regular, the memory contents will be copied to the + database. + + @param s: segment to modify (C++: segment_t *) + @param is_deb_segm: new status of the segment (C++: bool) + @return: Change segment status result codes + +Help on function del_segm in module ida_segment: + +del_segm(*args) + del_segm(ea, flags) -> bool + + + Delete a segment. + + @param ea: any address belonging to the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function del_segment_translations in module ida_segment: + +del_segment_translations(*args) + del_segment_translations(segstart) + + + Delete the translation list + + @param segstart: start address of the segment to delete translation + list (C++: ea_t) + +Help on function del_selector in module ida_segment: + +del_selector(*args) + del_selector(selector) + + + Delete mapping of a selector. Be wary of deleting selectors that are + being used in the program, this can make a mess in the segments. + + @param selector: number of selector to remove from the translation + table (C++: sel_t) + +Help on function find_free_selector in module ida_segment: + +find_free_selector(*args) + find_free_selector() -> sel_t + + + Find first unused selector. + + @return: a number >= 1 + +Help on function find_selector in module ida_segment: + +find_selector(*args) + find_selector(base) -> sel_t + + + Find a selector that has mapping to the specified paragraph. + + @param base: paragraph to search in the translation table (C++: ea_t) + @return: selector value or base + +Help on function get_defsr in module ida_segment: + +get_defsr(*args) + get_defsr(s, reg) -> sel_t + +Help on function get_first_seg in module ida_segment: + +get_first_seg(*args) + get_first_seg() -> segment_t + + + Get pointer to the first segment. + +Help on function get_group_selector in module ida_segment: + +get_group_selector(*args) + get_group_selector(grpsel) -> sel_t + + + Get common selector for a group of segments. + + @param grpsel: selector of group segment (C++: sel_t) + @return: common selector of the group or 'grpsel' if no such group is + found + +Help on function get_last_seg in module ida_segment: + +get_last_seg(*args) + get_last_seg() -> segment_t + + + Get pointer to the last segment. + +Help on function get_next_seg in module ida_segment: + +get_next_seg(*args) + get_next_seg(ea) -> segment_t + + + Get pointer to the next segment. + + + @param ea (C++: ea_t) + +Help on function get_prev_seg in module ida_segment: + +get_prev_seg(*args) + get_prev_seg(ea) -> segment_t + + + Get pointer to the previous segment. + + + @param ea (C++: ea_t) + +Help on function get_segm_base in module ida_segment: + +get_segm_base(*args) + get_segm_base(s) -> ea_t + + + Get segment base linear address. Segment base linear address is used + to calculate virtual addresses. The virtual address of the first byte + of the segment will be (start address of segment - segment base linear + address) + + @param s: pointer to segment (C++: const segment_t *) + @return: 0 if s == NULL, otherwise segment base linear address + +Help on function get_segm_by_name in module ida_segment: + +get_segm_by_name(*args) + get_segm_by_name(name) -> segment_t + + + Get pointer to segment by its name. If there are several segments with + the same name, returns the first of them. + + @param name: segment name. may be NULL. (C++: const char *) + @return: NULL or pointer to segment structure + +Help on function get_segm_by_sel in module ida_segment: + +get_segm_by_sel(*args) + get_segm_by_sel(selector) -> segment_t + + + Get pointer to segment structure. This function finds a segment by its + selector. If there are several segments with the same selectors, the + last one will be returned. + + @param selector: a segment with the specified selector will be + returned (C++: sel_t) + @return: pointer to segment or NULL + +Help on function get_segm_class in module ida_segment: + +get_segm_class(*args) + get_segm_class(s) -> str + + + Get segment class. Segment class is arbitrary text (max 8 characters). + + @param s: pointer to segment (C++: const segment_t *) + @return: size of segment class (-1 if s==NULL or bufsize<=0) + +Help on function get_segm_name in module ida_segment: + +get_segm_name(*args) + get_segm_name(s, flags=0) -> str + + + Get true segment name by pointer to segment. + + @param s: pointer to segment (C++: const segment_t *) + @param flags: 0-return name as is; 1-substitute bad symbols with _ 1 + corresponds to GN_VISIBLE (C++: int) + @return: size of segment name (-1 if s==NULL) + +Help on function get_segm_num in module ida_segment: + +get_segm_num(*args) + get_segm_num(ea) -> int + + + Get number of segment by address. + + @param ea: linear address belonging to the segment (C++: ea_t) + @return: -1 if no segment occupies the specified address. otherwise + returns number of the specified segment (0.. get_segm_qty() + -1) + +Help on function get_segm_para in module ida_segment: + +get_segm_para(*args) + get_segm_para(s) -> ea_t + + + Get segment base paragraph. Segment base paragraph may be converted to + segment base linear address using 'to_ea()' function. In fact, + to_ea(get_segm_para(s), 0) == get_segm_base(s). + + @param s: pointer to segment (C++: const segment_t *) + @return: 0 if s == NULL, the segment base paragraph + +Help on function get_segm_qty in module ida_segment: + +get_segm_qty(*args) + get_segm_qty() -> int + + + Get number of segments. + +Help on function get_segment_alignment in module ida_segment: + +get_segment_alignment(*args) + get_segment_alignment(align) -> char const * + + + Get text representation of segment alignment code. + + @param align (C++: uchar) + @return: text digestable by IBM PC assembler. + +Help on function get_segment_cmt in module ida_segment: + +get_segment_cmt(*args) + get_segment_cmt(s, repeatable) -> str + + + Get segment comment. + + @param s: pointer to segment structure (C++: const segment_t *) + @param repeatable: 0: get regular comment. 1: get repeatable comment. + (C++: bool) + @return: size of comment or -1 + +Help on function get_segment_combination in module ida_segment: + +get_segment_combination(*args) + get_segment_combination(comb) -> char const * + + + Get text representation of segment combination code. + + @param comb (C++: uchar) + @return: text digestable by IBM PC assembler. + +Help on function get_segment_translations in module ida_segment: + +get_segment_translations(*args) + get_segment_translations(transmap, segstart) -> ssize_t + + + Get segment translation list. + + @param transmap: vector of segment start addresses for the translation + list (C++: eavec_t *) + @param segstart: start address of the segment to get information about + (C++: ea_t) + @return: -1 if no translation list or bad segstart. otherwise returns + size of translation list. + +Help on function get_selector_qty in module ida_segment: + +get_selector_qty(*args) + get_selector_qty() -> int + + + Get number of defined selectors. + +Help on function get_visible_segm_name in module ida_segment: + +get_visible_segm_name(*args) + get_visible_segm_name(s) -> str + + + Get segment name by pointer to segment. + + @param s: pointer to segment (C++: const segment_t *) + @return: size of segment name (-1 if s==NULL) + +Help on function getn_selector in module ida_segment: + +getn_selector(*args) + getn_selector(n) -> bool + + + Get description of selector (0.. 'get_selector_qty()' -1) + + + @param n (C++: int) + +Help on function getnseg in module ida_segment: + +getnseg(*args) + getnseg(n) -> segment_t + + + Get pointer to segment by its number.Obsoleted because it can slow + down the debugger (it has to refresh the whole memory segmentation to + calculate the correct answer) + + @param n: segment number in the range (0.. get_segm_qty() -1) (C++: + int) + @return: NULL or pointer to segment structure + +Help on function getseg in module ida_segment: + +getseg(*args) + getseg(ea) -> segment_t + + + Get pointer to segment by linear address. + + @param ea: linear address belonging to the segment (C++: ea_t) + @return: NULL or pointer to segment structure + +Help on function is_finally_visible_segm in module ida_segment: + +is_finally_visible_segm(*args) + is_finally_visible_segm(s) -> bool + + + See 'SFL_HIDDEN' , 'SCF_SHHID_SEGM' . + + + @param s (C++: segment_t *) + +Help on function is_miniidb in module ida_segment: + +is_miniidb(*args) + is_miniidb() -> bool + + + Is the database a miniidb created by the debugger?. + + @return: true if the database contains no segments or only debugger + segments + +Help on function is_segm_locked in module ida_segment: + +is_segm_locked(*args) + is_segm_locked(segm) -> bool + + + Is a segment pointer locked? + + + @param segm (C++: const segment_t *) + +Help on function is_spec_ea in module ida_segment: + +is_spec_ea(*args) + is_spec_ea(ea) -> bool + + + Does the address belong to a segment with a special type?. ( + 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , 'SEG_COMM' ) + + @param ea: linear address (C++: ea_t) + +Help on function is_spec_segm in module ida_segment: + +is_spec_segm(*args) + is_spec_segm(seg_type) -> bool + + + Has segment a special type?. ( 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , + 'SEG_COMM' ) + + @param seg_type (C++: uchar) + +Help on function is_visible_segm in module ida_segment: + +is_visible_segm(*args) + is_visible_segm(s) -> bool + + + See 'SFL_HIDDEN' . + + + @param s (C++: segment_t *) + +Help on function lock_segm in module ida_segment: + +lock_segm(*args) + lock_segm(segm, lock) + + + Lock segment pointer Locked pointers are guaranteed to remain valid + until they are unlocked. Ranges with locked pointers cannot be deleted + or moved. + + @param segm (C++: const segment_t *) + @param lock (C++: bool) + +Help on class lock_segment in module ida_segment: + +class lock_segment(__builtin__.object) + | Proxy of C++ lock_segment class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _segm) -> lock_segment + | + | __repr__ = _swig_repr(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lock_segment(self) + +Help on function move_segm in module ida_segment: + +move_segm(*args) + 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. + + @param s: segment to move (C++: segment_t *) + @param to: new segment start address (C++: ea_t) + @param flags: Move segment flags (C++: int) + @return: Move segment result codes + +Help on function move_segm_start in module ida_segment: + +move_segm_start(*args) + move_segm_start(ea, newstart, mode) -> bool + + + Move segment start. The main difference between this function and + 'set_segm_start()' is that this function may expand the previous + segment while 'set_segm_start()' never does it. So, this function + allows to change bounds of two segments simultaneously. If the + previous segment and the specified segment have the same addressing + mode and segment base, then instructions and data are not destroyed - + they simply move from one segment to another. Otherwise all + instructions/data which migrate from one segment to another are + destroyed.this function never disables addresses. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newstart: new start address of the segment note that segment + start address should be higher than segment base + linear address. (C++: ea_t) + @param mode: policy for destroying defined items 0: if it is + necessary to destroy defined items, display a dialog box + and ask confirmation 1: if it is necessary to destroy + defined items, just destroy them without asking the user + -1: if it is necessary to destroy defined items, don't + destroy them (i.e. function will fail) -2: don't + destroy defined items (function will succeed) (C++: int) + +Help on function rebase_program in module ida_segment: + +rebase_program(*args) + rebase_program(delta, flags) -> int + + + Rebase the whole program by 'delta' bytes. + + @param delta: number of bytes to move the program (C++: adiff_t) + @param flags: Move segment flags it is recommended to use + MSF_FIXONCE so that the loader takes care of global + variables it stored in the database (C++: int) + @return: Move segment result codes + +Help on function segm_adjust_diff in module ida_segment: + +segm_adjust_diff(*args) + segm_adjust_diff(s, delta) -> adiff_t + + + Truncate and sign extend a delta depending on the segment. + + + @param s (C++: const segment_t *) + @param delta (C++: adiff_t) + +Help on function segm_adjust_ea in module ida_segment: + +segm_adjust_ea(*args) + segm_adjust_ea(s, ea) -> ea_t + + + Truncate an address depending on the segment. + + + @param s (C++: const segment_t *) + @param ea (C++: ea_t) + +Help on class segment_t in module ida_segment: + +class segment_t(ida_range.range_t) + | Proxy of C++ segment_t class. + | + | Method resolution order: + | segment_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> segment_t + | + | __repr__ = _swig_repr(self) + | + | abits(self, *args) + | abits(self) -> int + | + | abytes(self, *args) + | abytes(self) -> int + | + | clr_comorg(self, *args) + | clr_comorg(self) + | + | clr_ob_ok(self, *args) + | clr_ob_ok(self) + | + | comorg(self, *args) + | comorg(self) -> bool + | + | is_header_segm(self, *args) + | is_header_segm(self) -> bool + | + | is_hidden_segtype(self, *args) + | is_hidden_segtype(self) -> bool + | + | is_loader_segm(self, *args) + | is_loader_segm(self) -> bool + | + | is_visible_segm(self, *args) + | is_visible_segm(self) -> bool + | + | ob_ok(self, *args) + | ob_ok(self) -> bool + | + | set_comorg(self, *args) + | set_comorg(self) + | + | set_debugger_segm(self, *args) + | set_debugger_segm(self, debseg) + | + | set_header_segm(self, *args) + | set_header_segm(self, on) + | + | set_hidden_segtype(self, *args) + | set_hidden_segtype(self, hide) + | + | set_loader_segm(self, *args) + | set_loader_segm(self, ldrseg) + | + | set_ob_ok(self, *args) + | set_ob_ok(self) + | + | set_visible_segm(self, *args) + | set_visible_segm(self, visible) + | + | update(self, *args) + | update(self) -> bool + | + | use32(self, *args) + | use32(self) -> bool + | + | use64(self, *args) + | use64(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | align + | segment_t_align_get(self) -> uchar + | + | bitness + | segment_t_bitness_get(self) -> uchar + | + | color + | segment_t_color_get(self) -> bgcolor_t + | + | comb + | segment_t_comb_get(self) -> uchar + | + | defsr + | segment_t_defsr_get(self) -> sel_t [16] + | + | end_ea + | segment_t_end_ea_get(self) -> ea_t + | + | flags + | segment_t_flags_get(self) -> ushort + | + | name + | segment_t_name_get(self) -> uval_t + | + | orgbase + | segment_t_orgbase_get(self) -> uval_t + | + | perm + | segment_t_perm_get(self) -> uchar + | + | sclass + | segment_t_sclass_get(self) -> uval_t + | + | sel + | segment_t_sel_get(self) -> sel_t + | + | start_ea + | segment_t_start_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | type + | segment_t_type_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_segment_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | startEA + +Help on function segtype in module ida_segment: + +segtype(*args) + segtype(ea) -> uchar + + + Get segment type. + + @param ea: any linear address within the segment (C++: ea_t) + @return: Segment types , SEG_UNDF if no segment found at 'ea' + +Help on function sel2ea in module ida_segment: + +sel2ea(*args) + sel2ea(selector) -> ea_t + + + Get mapping of a selector as a linear address. + + @param selector: number of selector to translate to linear address + (C++: sel_t) + @return: linear address the specified selector is mapped to. if there + is no mapping, returns to_ea(selector,0); + +Help on function sel2para in module ida_segment: + +sel2para(*args) + sel2para(selector) -> ea_t + + + Get mapping of a selector. + + @param selector: number of selector to translate (C++: sel_t) + @return: paragraph the specified selector is mapped to. if there is no + mapping, returns 'selector'. + +Help on function set_defsr in module ida_segment: + +set_defsr(*args) + set_defsr(s, reg, value) + +Help on function set_group_selector in module ida_segment: + +set_group_selector(*args) + set_group_selector(grp, sel) -> int + + + Initialize groups. The kernel calls this function at the start of + work.Create a new group of segments (used OMF files). + + @param grp: selector of group segment (segment type is SEG_GRP ) You + should create an 'empty' (1 byte) group segment It won't + contain anything and will be used to redirect references + to the group of segments to the common selector. (C++: + sel_t) + @param sel: common selector of all segments belonging to the segment + You should create all segments within the group with the + same selector value. (C++: sel_t) + @return: 1 ok + +Help on function set_segm_addressing in module ida_segment: + +set_segm_addressing(*args) + set_segm_addressing(s, bitness) -> bool + + + Change segment addressing mode (16, 32, 64 bits). You must use this + function to change segment addressing, never change the 'bitness' + field directly. This function will delete all instructions, comments + and names in the segment + + @param s: pointer to segment (C++: segment_t *) + @param bitness: new addressing mode of segment 2: 64bit segment 1: + 32bit segment 0: 16bit segment (C++: size_t) + @return: success + +Help on function set_segm_base in module ida_segment: + +set_segm_base(*args) + set_segm_base(s, newbase) -> bool + + + Internal function. + + + @param s (C++: segment_t *) + @param newbase (C++: ea_t) + +Help on function set_segm_class in module ida_segment: + +set_segm_class(*args) + set_segm_class(s, sclass, flags=0) -> int + + + Set segment class. + + @param s: pointer to segment (may be NULL) (C++: segment_t *) + @param sclass: segment class (may be NULL). If segment type is + SEG_NORM and segment class is one of predefined names, + then segment type is changed to: "CODE" -> SEG_CODE + "DATA" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> + SEG_BSS if "UNK" then segment type is reset to + SEG_NORM . (C++: const char *) + @param flags (C++: int) + +Help on function set_segm_end in module ida_segment: + +set_segm_end(*args) + set_segm_end(ea, newend, flags) -> bool + + + Set segment end address. The next segment is shrinked to allow + expansion of the specified segment. The kernel might even delete the + next segment if necessary. The kernel will ask the user for a + permission to destroy instructions or data going out of segment scope + if such instructions exist. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newend: new end address of the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function set_segm_name in module ida_segment: + +set_segm_name(*args) + set_segm_name(s, name, flags=0) -> int + + + Rename segment. The new name is validated (see validate_name). A + segment always has a name. If you hadn't specified a name, the kernel + will assign it "seg###" name where ### is segment number. + + @param s: pointer to segment (may be NULL) (C++: segment_t *) + @param name: new segment name (C++: const char *) + @param flags: ADDSEG_IDBENC or 0 (C++: int) + +Help on function set_segm_start in module ida_segment: + +set_segm_start(*args) + set_segm_start(ea, newstart, flags) -> bool + + + Set segment start address. The previous segment is trimmed to allow + expansion of the specified segment. The kernel might even delete the + previous segment if necessary. The kernel will ask the user for a + permission to destroy instructions or data going out of segment scope + if such instructions exist. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newstart: new start address of the segment note that segment + start address should be higher than segment base + linear address. (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function set_segment_cmt in module ida_segment: + +set_segment_cmt(*args) + set_segment_cmt(s, cmt, repeatable) + + + Set segment comment. + + @param s: pointer to segment structure (C++: const segment_t *) + @param cmt: comment string, may be multiline (with ' '). maximal size + is 4096 bytes. Use empty str ("") to delete comment (C++: + const char *) + @param repeatable: 0: set regular comment. 1: set repeatable comment. + (C++: bool) + +Help on function set_segment_translations in module ida_segment: + +set_segment_translations(*args) + set_segment_translations(segstart, transmap) -> bool + + + Set new translation list. + + @param segstart: start address of the segment to add translation to + (C++: ea_t) + @param transmap: vector of segment start addresses for the translation + list. If transmap is empty, the translation list is + deleted. (C++: const eavec_t &) + +Help on function set_selector in module ida_segment: + +set_selector(*args) + set_selector(selector, paragraph) -> int + + + Set mapping of selector to a paragraph. You should call this + functionbeforecreating a segment which uses the selector, otherwise + the creation of the segment will fail. + + @param selector: number of selector to map if selector == BADSEL , + then return 0 (fail) if the selector has had a + mapping, old mapping is destroyed if the selector + number is equal to paragraph value, then the mapping + is destroyed because we don't need to keep trivial + mappings. (C++: sel_t) + @param paragraph: paragraph to map selector (C++: ea_t) + +Help on function set_visible_segm in module ida_segment: + +set_visible_segm(*args) + set_visible_segm(s, visible) + + + See 'SFL_HIDDEN' . + + + @param s (C++: segment_t *) + @param visible (C++: bool) + +Help on function setup_selector in module ida_segment: + +setup_selector(*args) + setup_selector(segbase) -> sel_t + + + Allocate a selector for a segment if necessary. You must call this + function before calling 'add_segm_ex()' . 'add_segm()' calls this + function itself, so you don't need to allocate a selector. This + function will allocate a selector if 'segbase' requires more than 16 + bits and the current processor is IBM PC. Otherwise it will return the + segbase value. + + @param segbase: a new segment base paragraph (C++: ea_t) + @return: the allocated selector number + +Help on function std_out_segm_footer in module ida_segment: + +std_out_segm_footer(*args) + std_out_segm_footer(ctx, seg) + + + Generate segment footer line as a comment line. This function may be + used in IDP modules to generate segment footer if the target assembler + doesn't have 'ends' directive. + + @param ctx (C++: struct outctx_t &) + @param seg (C++: segment_t *) + +Help on function take_memory_snapshot in module ida_segment: + +take_memory_snapshot(*args) + take_memory_snapshot(only_loader_segs) -> bool + + + Take a memory snapshot of the running process. + + @param only_loader_segs: only is_loader_segm() segments will be + affected (C++: bool) + @return: success + +Help on function update_segm in module ida_segment: + +update_segm(*args) + update_segm(s) -> bool + +=== ida_segment EPYDOC INJECTIONS === +ida_segment.ADDSEG_FILLGAP +""" +fill gap between new segment and previous one. i.e. if such a gap +exists, and this gap is less than 64K, then fill the gap by extending +the previous segment and adding .align directive to it. This way we +avoid gaps between segments. too many gaps lead to a virtual array +failure. it cannot hold more than ~1000 gaps. +""" + +ida_segment.ADDSEG_IDBENC +""" +non-ASCII bytes will be decoded accordingly + +'name' and 'sclass' are given in the IDB encoding; +""" + +ida_segment.ADDSEG_NOAA +""" +do not mark new segment for auto-analysis +""" + +ida_segment.ADDSEG_NOSREG +""" +(undefine all default segment registers) + +set all default segment register values to 'BADSEL' +""" + +ida_segment.ADDSEG_NOTRUNC +""" +destroy/truncate old segments instead. + +don't truncate the new segment at the beginning of the next segment if +they overlap. +""" + +ida_segment.ADDSEG_OR_DIE +""" + 'qexit()' if can't add a segment +""" + +ida_segment.ADDSEG_QUIET +""" +silent mode, no "Adding segment..." in the messages window +""" + +ida_segment.ADDSEG_SPARSE +""" +use sparse storage method for the new segment +""" + +ida_segment.CSS_BREAK +""" +memory reading process stopped by user +""" + +ida_segment.CSS_NODBG +""" +debugger is not running +""" + +ida_segment.CSS_NOMEM +""" +is too big) + +not enough memory (might be because the segment +""" + +ida_segment.CSS_NORANGE +""" +could not find corresponding memory range +""" + +ida_segment.CSS_OK +""" +ok +""" + +ida_segment.MAX_GROUPS +""" +max number of segment groups +""" + +ida_segment.MAX_SEGM_TRANSLATIONS +""" +max number of segment translations +""" + +ida_segment.MOVE_SEGM_CHUNK +""" +Too many chunks are defined, can't move. +""" + +ida_segment.MOVE_SEGM_DEBUG +""" +Debugger segments cannot be moved. +""" + +ida_segment.MOVE_SEGM_IDP +""" +IDP module forbids moving the segment. +""" + +ida_segment.MOVE_SEGM_LOADER +""" +The segment has been moved but the loader complained. +""" + +ida_segment.MOVE_SEGM_ODD +""" +Cannot move segments by an odd number of bytes. +""" + +ida_segment.MOVE_SEGM_OK +""" +all ok +""" + +ida_segment.MOVE_SEGM_ORPHAN +""" +Orphan bytes hinder segment movement. +""" + +ida_segment.MOVE_SEGM_PARAM +""" +The specified segment does not exist. +""" + +ida_segment.MOVE_SEGM_ROOM +""" +Not enough free room at the target address. +""" + +ida_segment.MSF_FIXONCE +""" +valid for 'rebase_program()' . see 'loader_t::move_segm' . + +call loader only once with the special calling method. +""" + +ida_segment.MSF_LDKEEP +""" +keep the loader in the memory (optimization) +""" + +ida_segment.MSF_NETNODES +""" +valid for 'rebase_program()' + +move netnodes instead of changing inf.netdelta (this is slower) +""" + +ida_segment.MSF_NOFIX +""" +don't call the loader to fix relocations +""" + +ida_segment.MSF_PRIORITY +""" +valid for 'move_segm()' + +loader segments will overwrite any existing debugger segments when +moved. +""" + +ida_segment.MSF_SILENT +""" +don't display a "please wait" box on the screen +""" + +ida_segment.SEGMOD_KEEP +""" +keep information (code & data, etc) +""" + +ida_segment.SEGMOD_KEEP0 +""" +flag for internal use, don't set +""" + +ida_segment.SEGMOD_KEEPSEL +""" +do not try to delete unused selector +""" + +ida_segment.SEGMOD_KILL +""" +disable addresses if segment gets shrinked or deleted +""" + +ida_segment.SEGMOD_NOMOVE +""" +(for 'set_segm_start()' ) + +don't move info from the start of segment to the new start address +""" + +ida_segment.SEGMOD_SILENT +""" +be silent +""" + +ida_segment.SEGMOD_SPARSE +""" +(for 'set_segm_start()' , 'set_segm_end()' ) + +use sparse storage if extending the segment +""" + +ida_segment.SEGPERM_EXEC +""" +Execute. +""" + +ida_segment.SEGPERM_READ +""" +Read. +""" + +ida_segment.SEGPERM_WRITE +""" +Write. +""" + +ida_segment.SEG_ABSSYM +""" +segment with definitions of absolute symbols +""" + +ida_segment.SEG_BSS +""" +uninitialized segment +""" + +ida_segment.SEG_CODE +""" +code segment +""" + +ida_segment.SEG_COMM +""" +segment with communal definitions +""" + +ida_segment.SEG_DATA +""" +data segment +""" + +ida_segment.SEG_GRP +""" +group of segments +""" + +ida_segment.SEG_IMEM +""" +internal processor memory & sfr (8051) +""" + +ida_segment.SEG_IMP +""" +java: implementation segment +""" + +ida_segment.SEG_NORM +""" +unknown type, no assumptions +""" + +ida_segment.SEG_NULL +""" +zero-length segment +""" + +ida_segment.SEG_UNDF +""" +undefined segment type (not used) +""" + +ida_segment.SEG_XTRN +""" +no instructions are allowed + +segment with 'extern' definitions. +""" + +ida_segment.SFL_COMORG +""" +IDP dependent field (IBM PC: if set, ORG directive is not commented +out) +""" + +ida_segment.SFL_DEBUG +""" +Is the segment created for the debugger?. Such segments are temporary +and do not have permanent flags. +""" + +ida_segment.SFL_HEADER +""" +Header segment (do not create offsets to it in the disassembly) +""" + +ida_segment.SFL_HIDDEN +""" +Is the segment hidden? +""" + +ida_segment.SFL_HIDETYPE +""" +Hide segment type (do not print it in the listing) +""" + +ida_segment.SFL_LOADER +""" +Is the segment created by the loader? +""" + +ida_segment.SFL_OBOK +""" +Orgbase is present? (IDP dependent field) +""" + +ida_segment.SREG_NUM +""" +Maximum number of segment registers is 16 (see 'segregs.hpp' ) +""" + +ida_segment.saAbs +""" +Absolute segment. +""" + +ida_segment.saGroup +""" +Segment group. +""" + +ida_segment.saRel1024Bytes +""" +1024 bytes +""" + +ida_segment.saRel128Bytes +""" +128 bytes +""" + +ida_segment.saRel2048Bytes +""" +2048 bytes +""" + +ida_segment.saRel32Bytes +""" +32 bytes +""" + +ida_segment.saRel4K +""" +alignment. It is not supported by LINK. + +This value is used by the PharLap OMF for page (4K) +""" + +ida_segment.saRel512Bytes +""" +512 bytes +""" + +ida_segment.saRel64Bytes +""" +64 bytes +""" + +ida_segment.saRelByte +""" +Relocatable, byte aligned. +""" + +ida_segment.saRelDble +""" +boundary. + +Relocatable, aligned on a double word (4-byte) +""" + +ida_segment.saRelPage +""" +Relocatable, aligned on 256-byte boundary. +""" + +ida_segment.saRelPara +""" +Relocatable, paragraph (16-byte) aligned. +""" + +ida_segment.saRelQword +""" +8 bytes +""" + +ida_segment.saRelWord +""" +Relocatable, word (2-byte) aligned. +""" + +ida_segment.scCommon +""" +Common. Combine by overlay using maximum size. +""" + +ida_segment.scGroup +""" +Segment group. +""" + +ida_segment.scPriv +""" +segment. + +Private. Do not combine with any other program +""" + +ida_segment.scPub +""" +the alignment requirement. + +Public. Combine by appending at an offset that meets +""" + +ida_segment.scPub2 +""" +As defined by Microsoft, same as C=2 (public). +""" + +ida_segment.scPub3 +""" +As defined by Microsoft, same as C=2 (public). +""" + +ida_segment.scStack +""" +byte alignment. + +Stack. Combine as for C=2. This combine type forces +""" +=== ida_segment EPYDOC INJECTIONS END === +Help on function copy_sreg_ranges in module ida_segregs: + +copy_sreg_ranges(*args) + copy_sreg_ranges(dst_rg, src_rg, map_selector=False) + + + Duplicate segment register ranges. + + @param dst_rg: number of destination segment register (C++: int) + @param src_rg: copy ranges from (C++: int) + @param map_selector: map selectors to linear addresses using sel2ea() + (C++: bool) + +Help on function del_sreg_range in module ida_segregs: + +del_sreg_range(*args) + del_sreg_range(ea, rg) -> bool + + + Delete segment register range started at ea. When a segment register + range is deleted, the previous range is extended to cover the empty + space. The segment register range at the beginning of a segment cannot + be deleted. + + @param ea: start_ea of the deleted range (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_prev_sreg_range in module ida_segregs: + +get_prev_sreg_range(*args) + get_prev_sreg_range(out, ea, rg) -> bool + + + Get segment register range previous to one with address.more efficient + then get_sreg_range(reg, ea-1) + + @param out: segment register range (C++: sreg_range_t *) + @param ea: any linear address in the program (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_sreg in module ida_segregs: + +get_sreg(*args) + get_sreg(ea, rg) -> sel_t + + + Get value of a segment register. This function uses segment register + range and default segment register values stored in the segment + structure. + + @param ea: linear address in the program (C++: ea_t) + @param rg: number of the segment register (C++: int) + @return: value of the segment register, BADSEL if value is unknown. + +Help on function get_sreg_range in module ida_segregs: + +get_sreg_range(*args) + get_sreg_range(out, ea, rg) -> bool + + + Get segment register range by linear address. + + @param out: segment register range (C++: sreg_range_t *) + @param ea: any linear address in the program (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_sreg_range_num in module ida_segregs: + +get_sreg_range_num(*args) + get_sreg_range_num(ea, rg) -> int + + + Get number of segment register range by address. + + @param ea: any address in the range (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: -1 if no range occupies the specified address. otherwise + returns number of the specified range + (0..get_srranges_qty()-1) + +Help on function get_sreg_ranges_qty in module ida_segregs: + +get_sreg_ranges_qty(*args) + get_sreg_ranges_qty(rg) -> size_t + + + Get number of segment register ranges. + + @param rg: the segment register number (C++: int) + +Help on function getn_sreg_range in module ida_segregs: + +getn_sreg_range(*args) + getn_sreg_range(out, rg, n) -> bool + + + Get segment register range by its number. + + @param out: segment register range (C++: sreg_range_t *) + @param rg: the segment register number (C++: int) + @param n: number of range (0..qty()-1) (C++: int) + @return: success + +Help on function set_default_dataseg in module ida_segregs: + +set_default_dataseg(*args) + set_default_dataseg(ds_sel) + + + Set default value of DS register for all segments. + + + @param ds_sel (C++: sel_t) + +Help on function set_default_sreg_value in module ida_segregs: + +set_default_sreg_value(*args) + set_default_sreg_value(sg, rg, value) -> bool + + + Set default value of a segment register for a segment. + + @param sg: pointer to segment structure if NULL, then set the register + for all segments (C++: segment_t *) + @param rg: number of segment register (C++: int) + @param value: its default value. this value will be used by + get_sreg() if value of the register is unknown at the + specified address. (C++: sel_t) + @return: success + +Help on function set_sreg_at_next_code in module ida_segregs: + +set_sreg_at_next_code(*args) + set_sreg_at_next_code(ea1, ea2, rg, value) + + + Set the segment register value at the next instruction. This function + is designed to be called from 'idb_event::sgr_changed' handler in + order to contain the effect of changing a segment register value only + until the next instruction.It is useful, for example, in the ARM + module: the modification of the T register does not affect existing + instructions later in the code. + + @param ea1: address to start to search for an instruction (C++: ea_t) + @param ea2: the maximal address (C++: ea_t) + @param rg: the segment register number (C++: int) + @param value: the segment register value (C++: sel_t) + +Help on function split_sreg_range in module ida_segregs: + +split_sreg_range(*args) + split_sreg_range(ea, rg, v, tag, silent=False) -> bool + + + Create a new segment register range. This function is used when the + IDP emulator detects that a segment register changes its value. + + @param ea: linear address where the segment register will have a new + value. if ea== BADADDR , nothing to do. (C++: ea_t) + @param rg: the number of the segment register (C++: int) + @param v: the new value of the segment register. If the value is + unknown, you should specify BADSEL . (C++: sel_t) + @param tag: the register info tag. see Segment register range tags + (C++: uchar) + @param silent: if false, display a warning() in the case of failure + (C++: bool) + @return: success + +Help on class sreg_range_t in module ida_segregs: + +class sreg_range_t(ida_range.range_t) + | Proxy of C++ sreg_range_t class. + | + | Method resolution order: + | sreg_range_t + | ida_range.range_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sreg_range_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | tag + | sreg_range_t_tag_get(self) -> uchar + | + | thisown + | The membership flag + | + | val + | sreg_range_t_val_get(self) -> sel_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_sreg_range_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _print(self, *args) + | _print(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | contains(self, *args) + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) + | empty(self) -> bool + | + | extend(self, *args) + | extend(self, ea) + | + | intersect(self, *args) + | intersect(self, r) + | + | overlaps(self, *args) + | overlaps(self, r) -> bool + | + | size(self, *args) + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +=== ida_segregs EPYDOC INJECTIONS === +ida_segregs.SR_auto +""" +the value is determined by IDA +""" + +ida_segregs.SR_autostart +""" +used as 'SR_auto' for segment starting address +""" + +ida_segregs.SR_inherit +""" +the value is inherited from the previous range +""" + +ida_segregs.SR_user +""" +the value is specified by the user +""" +=== ida_segregs EPYDOC INJECTIONS END === +Help on function build_strlist in module ida_strlist: + +build_strlist(*args) + build_strlist() + + + Build the string list. You should initialize options before this call + using the restore_config() or setup_strings_window() methods. + +Help on function clear_strlist in module ida_strlist: + +clear_strlist(*args) + clear_strlist() + + + Clear the string list. + +Help on function get_strlist_item in module ida_strlist: + +get_strlist_item(*args) + get_strlist_item(si, n) -> bool + + + Get nth element of the string list (n=0.. 'get_strlist_qty()' -1) + + + @param si (C++: string_info_t *) + @param n (C++: size_t) + +Help on function get_strlist_options in module ida_strlist: + +get_strlist_options(*args) + get_strlist_options() -> strwinsetup_t + + + Get access to the static string list options. + +Help on function get_strlist_qty in module ida_strlist: + +get_strlist_qty(*args) + get_strlist_qty() -> size_t + + + Get number of elements in the string list. + +Help on class string_info_t in module ida_strlist: + +class string_info_t(__builtin__.object) + | Proxy of C++ string_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> string_info_t + | __init__(self, _ea) -> string_info_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | string_info_t_ea_get(self) -> ea_t + | + | length + | string_info_t_length_get(self) -> int + | + | thisown + | The membership flag + | + | type + | string_info_t_type_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_string_info_t(self) + +Help on class strwinsetup_t in module ida_strlist: + +class strwinsetup_t(__builtin__.object) + | Proxy of C++ strwinsetup_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strwinsetup_t + | + | __repr__ = _swig_repr(self) + | + | _get_strtypes(self, *args) + | _get_strtypes(self) -> PyObject * + | + | _set_strtypes(self, *args) + | _set_strtypes(self, py_t) -> PyObject * + | + | is_initialized(self, *args) + | is_initialized(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | display_only_existing_strings + | strwinsetup_t_display_only_existing_strings_get(self) -> uchar + | + | ignore_heads + | strwinsetup_t_ignore_heads_get(self) -> uchar + | + | minlen + | strwinsetup_t_minlen_get(self) -> sval_t + | + | only_7bit + | strwinsetup_t_only_7bit_get(self) -> uchar + | + | strtypes + | _get_strtypes(self) -> PyObject * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_strwinsetup_t(self) + +Help on function add_struc in module ida_struct: + +add_struc(*args) + add_struc(idx, name, is_union=False) -> tid_t + + + Create a structure type. if idx== 'BADADDR' then add as the last idx. + if name==NULL then a name will be generated "struct_%d". + + @param idx (C++: uval_t) + @param name (C++: const char *) + @param is_union (C++: bool) + +Help on function add_struc_member in module ida_struct: + +add_struc_member(*args) + add_struc_member(sptr, fieldname, offset, flag, mt, nbytes) -> struc_error_t + + + Add member to existing structure. + + @param sptr: structure to modify (C++: struc_t *) + @param fieldname: if NULL, then "anonymous_#" name will be generated + (C++: const char *) + @param offset: BADADDR means add to the end of structure (C++: ea_t) + @param flag: type + representation bits (C++: flags_t) + @param mt: additional info about member type. must be present for + structs, offsets, enums, strings, struct offsets. (C++: + const opinfo_t *) + @param nbytes: if == 0 then the structure will be a varstruct. in this + case the member should be the last member in the + structure (C++: asize_t) + +Help on function del_member_tinfo in module ida_struct: + +del_member_tinfo(*args) + del_member_tinfo(sptr, mptr) -> bool + + + Delete tinfo for given member. + + + @param sptr (C++: struc_t *) + @param mptr (C++: member_t *) + +Help on function del_struc in module ida_struct: + +del_struc(*args) + del_struc(sptr) -> bool + + + Delete a structure type. + + + @param sptr (C++: struc_t *) + +Help on function del_struc_member in module ida_struct: + +del_struc_member(*args) + del_struc_member(sptr, offset) -> bool + + + Delete member at given offset. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + +Help on function del_struc_members in module ida_struct: + +del_struc_members(*args) + del_struc_members(sptr, off1, off2) -> int + + + Delete members which occupy range of offsets (off1..off2). + + @param sptr (C++: struc_t *) + @param off1 (C++: ea_t) + @param off2 (C++: ea_t) + @return: number of deleted members or -1 on error + +Help on function expand_struc in module ida_struct: + +expand_struc(*args) + expand_struc(sptr, offset, delta, recalc=True) -> bool + + + Expand/Shrink structure type. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param delta (C++: adiff_t) + @param recalc (C++: bool) + +Help on function get_best_fit_member in module ida_struct: + +get_best_fit_member(*args) + get_best_fit_member(sptr, offset) -> member_t + + + Get member that is most likely referenced by the specified offset. + Useful for offsets > sizeof(struct). + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_first_struc_idx in module ida_struct: + +get_first_struc_idx(*args) + get_first_struc_idx() -> uval_t + + + Get index of first structure. + + @return: BADADDR if no known structures, 0 otherwise + +Help on function get_last_struc_idx in module ida_struct: + +get_last_struc_idx(*args) + get_last_struc_idx() -> uval_t + + + Get index of last structure. + + @return: BADADDR if no known structures, get_struc_qty() -1 + otherwise + +Help on function get_max_offset in module ida_struct: + +get_max_offset(*args) + get_max_offset(sptr) -> ea_t + + + For unions: returns number of members, for structs: returns size of + structure. + + + @param sptr (C++: struc_t *) + +Help on function get_member in module ida_struct: + +get_member(*args) + get_member(sptr, offset) -> member_t + + + Get member at given offset. + + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_member_by_fullname in module ida_struct: + +get_member_by_fullname(*args) + get_member_by_fullname(fullname) -> member_t + + + Get a member by its fully qualified name, "struct.field". + + + @param fullname (C++: const char *) + +Help on function get_member_by_id in module ida_struct: + +get_member_by_id(*args) + get_member_by_id(mid) -> member_t + + + Check if the specified member id points to a struct member. + + + @param mid (C++: tid_t) + +Help on function get_member_by_name in module ida_struct: + +get_member_by_name(*args) + get_member_by_name(sptr, membername) -> member_t + + + Get a member by its name, like "field44". + + + @param sptr (C++: const struc_t *) + @param membername (C++: const char *) + +Help on function get_member_cmt in module ida_struct: + +get_member_cmt(*args) + get_member_cmt(mid, repeatable) -> str + + + Get comment of structure member. + + + @param mid (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_member_fullname in module ida_struct: + +get_member_fullname(*args) + get_member_fullname(mid) -> str + + + Get a member's fully qualified name, "struct.field". + + + @param mid (C++: tid_t) + +Help on function get_member_id in module ida_struct: + +get_member_id(*args) + get_member_id(sptr, offset) -> tid_t + + + Get member id at given offset. + + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_member_name in module ida_struct: + +get_member_name(*args) + get_member_name(mid) -> str + + + Get name of structure member. + + + @param mid (C++: tid_t) + +Help on function get_member_size in module ida_struct: + +get_member_size(*args) + get_member_size(nonnul_mptr) -> asize_t + + + Get size of structure member. May return 0 for the last member of + varstruct. For union members, returns 'member_t::eoff' . + +Help on function get_member_struc in module ida_struct: + +get_member_struc(*args) + get_member_struc(fullname) -> struc_t + + + Get containing structure of member by its full name "struct.field". + + + @param fullname (C++: const char *) + +Help on function get_member_tinfo in module ida_struct: + +get_member_tinfo(*args) + get_member_tinfo(tif, mptr) -> bool + + + Get tinfo for given member. + + + @param tif (C++: tinfo_t *) + @param mptr (C++: const member_t *) + +Help on function get_next_member_idx in module ida_struct: + +get_next_member_idx(*args) + get_next_member_idx(sptr, off) -> ssize_t + + + Get the next member idx, if it does not exist, return -1. + + + @param sptr (C++: const struc_t *) + @param off (C++: asize_t) + +Help on function get_next_struc_idx in module ida_struct: + +get_next_struc_idx(*args) + get_next_struc_idx(idx) -> uval_t + + + Get next struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is out of bounds, otherwise idx++ + +Help on function get_or_guess_member_tinfo in module ida_struct: + +get_or_guess_member_tinfo(*args) + get_or_guess_member_tinfo(tif, mptr) -> bool + + + Try to get tinfo for given member - if failed, generate a tinfo using + information about the member id from the disassembly + + @param tif (C++: tinfo_t *) + @param mptr (C++: const member_t *) + +Help on function get_prev_member_idx in module ida_struct: + +get_prev_member_idx(*args) + get_prev_member_idx(sptr, off) -> ssize_t + + + Get the prev member idx, if it does not exist, return -1. + + + @param sptr (C++: const struc_t *) + @param off (C++: asize_t) + +Help on function get_prev_struc_idx in module ida_struct: + +get_prev_struc_idx(*args) + get_prev_struc_idx(idx) -> uval_t + + + Get previous struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is negative, otherwise idx - 1 + +Help on function get_sptr in module ida_struct: + +get_sptr(*args) + get_sptr(mptr) -> struc_t + + + Get child struct if member is a struct. + + + @param mptr (C++: const member_t *) + +Help on function get_struc in module ida_struct: + +get_struc(*args) + get_struc(id) -> struc_t + + + Get pointer to struct type info. + + + @param id (C++: tid_t) + +Help on function get_struc_by_idx in module ida_struct: + +get_struc_by_idx(*args) + get_struc_by_idx(idx) -> tid_t + + + Get struct id by struct number. + + + @param idx (C++: uval_t) + +Help on function get_struc_cmt in module ida_struct: + +get_struc_cmt(*args) + get_struc_cmt(id, repeatable) -> str + + + Get struct comment. + + + @param id (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_struc_first_offset in module ida_struct: + +get_struc_first_offset(*args) + get_struc_first_offset(sptr) -> ea_t + + + Get offset of first member. + + @param sptr (C++: const struc_t *) + @return: BADADDR if memqty == 0 + +Help on function get_struc_id in module ida_struct: + +get_struc_id(*args) + get_struc_id(name) -> tid_t + + + Get struct id by name. + + + @param name (C++: const char *) + +Help on function get_struc_idx in module ida_struct: + +get_struc_idx(*args) + get_struc_idx(id) -> uval_t + + + Get internal number of the structure. + + + @param id (C++: tid_t) + +Help on function get_struc_last_offset in module ida_struct: + +get_struc_last_offset(*args) + get_struc_last_offset(sptr) -> ea_t + + + Get offset of last member. + + @param sptr (C++: const struc_t *) + @return: BADADDR if memqty == 0 + +Help on function get_struc_name in module ida_struct: + +get_struc_name(*args) + get_struc_name(id, flags=0) -> str + + + Get struct name by id + + @param id: struct id (C++: tid_t) + @param flags: Struct name flags (C++: int) + +Help on function get_struc_next_offset in module ida_struct: + +get_struc_next_offset(*args) + get_struc_next_offset(sptr, offset) -> ea_t + + + Get offset of member with smallest offset larger than 'offset'. + + @param sptr (C++: const struc_t *) + @param offset (C++: ea_t) + @return: BADADDR if no next offset + +Help on function get_struc_prev_offset in module ida_struct: + +get_struc_prev_offset(*args) + get_struc_prev_offset(sptr, offset) -> ea_t + + + Get offset of member with largest offset less than 'offset'. + + @param sptr (C++: const struc_t *) + @param offset (C++: ea_t) + @return: BADADDR if no prev offset + +Help on function get_struc_qty in module ida_struct: + +get_struc_qty(*args) + get_struc_qty() -> size_t + + + Get number of known structures. + +Help on function get_struc_size in module ida_struct: + +get_struc_size(*args) + get_struc_size(sptr) -> asize_t + get_struc_size(id) -> asize_t + + + Get struct size (also see 'get_struc_size(tid_t)' ) + + + @param sptr (C++: const struc_t *) + +Help on function is_anonymous_member_name in module ida_struct: + +is_anonymous_member_name(*args) + is_anonymous_member_name(name) -> bool + + + Is member name prefixed with "anonymous"? + + + @param name (C++: const char *) + +Help on function is_dummy_member_name in module ida_struct: + +is_dummy_member_name(*args) + is_dummy_member_name(name) -> bool + + + Is member name an auto-generated name? + + + @param name (C++: const char *) + +Help on function is_member_id in module ida_struct: + +is_member_id(*args) + is_member_id(mid) -> bool + + + Is a member id? + + + @param mid (C++: tid_t) + +Help on function is_special_member in module ida_struct: + +is_special_member(*args) + is_special_member(id) -> bool + + + Is a special member with the name beginning with ' '? + + + @param id (C++: tid_t) + +Help on function is_union in module ida_struct: + +is_union(*args) + is_union(id) -> bool + + + Is a union? + + + @param id (C++: tid_t) + +Help on function is_varmember in module ida_struct: + +is_varmember(*args) + is_varmember(mptr) -> bool + + + Is variable size member? + + + @param mptr (C++: const member_t *) + +Help on function is_varstr in module ida_struct: + +is_varstr(*args) + is_varstr(id) -> bool + + + Is variable size structure? + + + @param id (C++: tid_t) + +Help on class member_t in module ida_struct: + +class member_t(__builtin__.object) + | Proxy of C++ member_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> member_t + | + | __repr__ = _swig_repr(self) + | + | by_til(self, *args) + | by_til(self) -> bool + | + | get_soff(self, *args) + | get_soff(self) -> ea_t + | + | has_ti(self, *args) + | has_ti(self) -> bool + | + | has_union(self, *args) + | has_union(self) -> bool + | + | is_baseclass(self, *args) + | is_baseclass(self) -> bool + | + | is_destructor(self, *args) + | is_destructor(self) -> bool + | + | is_dupname(self, *args) + | is_dupname(self) -> bool + | + | unimem(self, *args) + | unimem(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | eoff + | member_t_eoff_get(self) -> ea_t + | + | flag + | member_t_flag_get(self) -> flags_t + | + | id + | member_t_id_get(self) -> tid_t + | + | props + | member_t_props_get(self) -> uint32 + | + | soff + | member_t_soff_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_member_t(self) + +Help on function retrieve_member_info in module ida_struct: + +retrieve_member_info(*args) + retrieve_member_info(buf, mptr) -> opinfo_t + + + Get operand type info for member. + + + @param buf (C++: opinfo_t *) + @param mptr (C++: const member_t *) + +Help on function save_struc in module ida_struct: + +save_struc(*args) + save_struc(sptr, may_update_ltypes=True) + + + Update struct information in the database (internal function) + + + @param sptr (C++: struc_t *) + @param may_update_ltypes (C++: bool) + +Help on function set_member_cmt in module ida_struct: + +set_member_cmt(*args) + set_member_cmt(mptr, cmt, repeatable) -> bool + + + Set member comment. + + + @param mptr (C++: member_t *) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_member_name in module ida_struct: + +set_member_name(*args) + set_member_name(sptr, offset, name) -> bool + + + Set name of member at given offset. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param name (C++: const char *) + +Help on function set_member_tinfo in module ida_struct: + +set_member_tinfo(*args) + set_member_tinfo(sptr, mptr, memoff, tif, flags) -> smt_code_t + + + Set tinfo for given member. + + @param sptr: containing struct (C++: struc_t *) + @param mptr: target member (C++: member_t *) + @param memoff: offset within member (C++: uval_t) + @param tif: type info (C++: const tinfo_t &) + @param flags: Set member tinfo flags (C++: int) + +Help on function set_member_type in module ida_struct: + +set_member_type(*args) + set_member_type(sptr, offset, flag, mt, nbytes) -> bool + + + Set type of member at given offset (also see 'add_struc_member()' ) + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param flag (C++: flags_t) + @param mt (C++: const opinfo_t *) + @param nbytes (C++: asize_t) + +Help on function set_struc_align in module ida_struct: + +set_struc_align(*args) + set_struc_align(sptr, shift) -> bool + + + Set structure alignment ( 'SF_ALIGN' ) + + + @param sptr (C++: struc_t *) + @param shift (C++: int) + +Help on function set_struc_cmt in module ida_struct: + +set_struc_cmt(*args) + set_struc_cmt(id, cmt, repeatable) -> bool + + + Set structure comment. + + + @param id (C++: tid_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_struc_hidden in module ida_struct: + +set_struc_hidden(*args) + set_struc_hidden(sptr, is_hidden) + + + Hide/unhide a struct type. + + + @param sptr (C++: struc_t *) + @param is_hidden (C++: bool) + +Help on function set_struc_idx in module ida_struct: + +set_struc_idx(*args) + set_struc_idx(sptr, idx) -> bool + + + Set internal number of struct. Also see 'get_struc_idx()' , + 'get_struc_by_idx()' . + + @param sptr (C++: const struc_t *) + @param idx (C++: uval_t) + +Help on function set_struc_listed in module ida_struct: + +set_struc_listed(*args) + set_struc_listed(sptr, is_listed) + + + Add/remove a struct type from the struct list. + + + @param sptr (C++: struc_t *) + @param is_listed (C++: bool) + +Help on function set_struc_name in module ida_struct: + +set_struc_name(*args) + set_struc_name(id, name) -> bool + + + Set structure name. + + + @param id (C++: tid_t) + @param name (C++: const char *) + +Help on function stroff_as_size in module ida_struct: + +stroff_as_size(*args) + stroff_as_size(plen, sptr, value) -> bool + + + Should display a structure offset expression as the structure size? + + + @param plen (C++: int) + @param sptr (C++: const struc_t *) + @param value (C++: asize_t) + +Help on class struc_t in module ida_struct: + +class struc_t(__builtin__.object) + | Proxy of C++ struc_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | from_til(self, *args) + | from_til(self) -> bool + | + | get_alignment(self, *args) + | get_alignment(self) -> int + | + | get_member(self, *args) + | get_member(self, index) -> member_t + | + | has_union(self, *args) + | has_union(self) -> bool + | + | is_choosable(self, *args) + | is_choosable(self) -> bool + | + | is_frame(self, *args) + | is_frame(self) -> bool + | + | is_ghost(self, *args) + | is_ghost(self) -> bool + | + | is_hidden(self, *args) + | is_hidden(self) -> bool + | + | is_union(self, *args) + | is_union(self) -> bool + | + | is_varstr(self, *args) + | is_varstr(self) -> bool + | + | set_alignment(self, *args) + | set_alignment(self, shift) + | + | set_ghost(self, *args) + | set_ghost(self, _is_ghost) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | age + | struc_t_age_get(self) -> ushort + | + | id + | struc_t_id_get(self) -> tid_t + | + | members + | struc_t_members_get(self) -> member_t + | + | memqty + | struc_t_memqty_get(self) -> uint32 + | + | ordinal + | struc_t_ordinal_get(self) -> int32 + | + | props + | struc_t_props_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_struc_t(self) + +Help on class struct_field_visitor_t in module ida_struct: + +class struct_field_visitor_t(__builtin__.object) + | Proxy of C++ struct_field_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> struct_field_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_field(self, *args) + | visit_field(self, sptr, mptr) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_struct_field_visitor_t(self) + +Help on function visit_stroff_fields in module ida_struct: + +visit_stroff_fields(*args) + visit_stroff_fields(sfv, path, disp, appzero) -> flags_t + + + Visit structure fields in a stroff expression or in a reference to a + struct data variable. This function can be used to enumerate all + components of an expression like 'a.b.c'. + + @param sfv: visitor object (C++: struct_field_visitor_t &) + @param path: struct path (path[0] contains the initial struct id) + (C++: const tid_t *) + @param disp: offset into structure (C++: adiff_t *) + @param appzero: should visit field at offset zero? (C++: bool) + +=== ida_struct EPYDOC INJECTIONS === +ida_struct.MF_BASECLASS +""" +a special member representing base class +""" + +ida_struct.MF_BYTIL +""" +the member was created due to the type system +""" + +ida_struct.MF_DTOR +""" +a special member representing destructor +""" + +ida_struct.MF_DUPNAME +""" +duplicate name resolved with _N suffix (N==soff) +""" + +ida_struct.MF_HASTI +""" +has type information? +""" + +ida_struct.MF_HASUNI +""" +has members of type "union"? +""" + +ida_struct.MF_OK +""" +is the member ok? (always yes) +""" + +ida_struct.MF_UNIMEM +""" +is a member of a union? +""" + +ida_struct.SET_MEMTI_BYTIL +""" +new type was created by the type subsystem +""" + +ida_struct.SET_MEMTI_COMPATIBLE +""" +new type must be compatible with the old +""" + +ida_struct.SET_MEMTI_FUNCARG +""" +mptr is function argument (cannot create arrays) +""" + +ida_struct.SET_MEMTI_MAY_DESTROY +""" +may destroy other members +""" + +ida_struct.SET_MEMTI_USERTI +""" +user-specified type +""" + +ida_struct.SF_ALIGN +""" +alignment (shift amount: 0..31) +""" + +ida_struct.SF_FRAME +""" +the structure is a function frame +""" + +ida_struct.SF_GHOST +""" +ghost copy of a local type +""" + +ida_struct.SF_HASUNI +""" +has members of type "union"? +""" + +ida_struct.SF_HIDDEN +""" +the structure is collapsed +""" + +ida_struct.SF_NOLIST +""" +don't include in the chooser list +""" + +ida_struct.SF_TYPLIB +""" +the structure comes from type library +""" + +ida_struct.SF_UNION +""" +varunions are prohibited! + +is a union? +""" + +ida_struct.SF_VAR +""" +is variable size structure (varstruct)? a variable size structure is +one with the zero size last member. if the last member is a varstruct, +then the current structure is a varstruct too. +""" + +ida_struct.STRNFL_REGEX +""" +apply regular expressions to beautify the name +""" + +ida_struct.STRUC_SEPARATOR +""" +structname.fieldname +""" +=== ida_struct EPYDOC INJECTIONS END === +Help on function add_tryblk in module ida_tryblks: + +add_tryblk(*args) + add_tryblk(tb) -> int + + + Add one try block information. + + @param tb: try block to add. (C++: const tryblk_t &) + @return: error code; 0 means good + +Help on class catch_t in module ida_tryblks: + +class catch_t(try_handler_t) + | Proxy of C++ catch_t class. + | + | Method resolution order: + | catch_t + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> catch_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | obj + | catch_t_obj_get(self) -> sval_t + | + | thisown + | The membership flag + | + | type_id + | catch_t_type_id_get(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_catch_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from try_handler_t: + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from try_handler_t: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class catchvec_t in module ida_tryblks: + +class catchvec_t(__builtin__.object) + | Proxy of C++ qvector< catch_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> catch_t + | + | __init__(self, *args) + | __init__(self) -> catchvec_t + | __init__(self, x) -> catchvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> catch_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> catch_t + | begin(self) -> catch_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> catch_t + | end(self) -> catch_t + | + | erase(self, *args) + | erase(self, it) -> catch_t + | erase(self, first, last) -> catch_t + | + | extract(self, *args) + | extract(self) -> catch_t + | + | find(self, *args) + | find(self, x) -> catch_t + | find(self, x) -> catch_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=catch_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> catch_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> catch_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_catchvec_t(self) + +Help on function del_tryblks in module ida_tryblks: + +del_tryblks(*args) + del_tryblks(range) + + + Delete try block information in the specified range. + + @param range: the range to be cleared (C++: const range_t &) + +Help on function find_syseh in module ida_tryblks: + +find_syseh(*args) + find_syseh(ea) -> ea_t + + + Find the start address of the system eh region including the argument. + + @param ea: search address (C++: ea_t) + @return: start address of surrounding tryblk, otherwise BADADDR + +Help on function get_tryblks in module ida_tryblks: + +get_tryblks(*args) + get_tryblks(tbv, range) -> size_t + + + Retrieve try block information from the specified address range. Try + blocks are sorted by starting address and their nest levels + calculated. + + @param tbv: output buffer; may be NULL (C++: tryblks_t *) + @param range: address range to change (C++: const range_t &) + @return: number of found try blocks + +Help on class seh_t in module ida_tryblks: + +class seh_t(try_handler_t) + | Proxy of C++ seh_t class. + | + | Method resolution order: + | seh_t + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> seh_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | filter + | seh_t_filter_get(self) -> rangevec_t + | + | seh_code + | seh_t_seh_code_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_seh_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from try_handler_t: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class try_handler_t in module ida_tryblks: + +class try_handler_t(ida_range.rangevec_t) + | Proxy of C++ try_handler_t class. + | + | Method resolution order: + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> try_handler_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_try_handler_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class tryblk_t in module ida_tryblks: + +class tryblk_t(ida_range.rangevec_t) + | Proxy of C++ tryblk_t class. + | + | Method resolution order: + | tryblk_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tryblk_t + | __init__(self, r) -> tryblk_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | cpp(self, *args) + | cpp(self) -> catchvec_t + | + | empty(self, *args) + | empty(self) -> bool + | + | get_kind(self, *args) + | get_kind(self) -> uchar + | + | is_cpp(self, *args) + | is_cpp(self) -> bool + | + | is_seh(self, *args) + | is_seh(self) -> bool + | + | seh(self, *args) + | seh(self) -> seh_t + | + | set_cpp(self, *args) + | set_cpp(self) -> catchvec_t + | + | set_seh(self, *args) + | set_seh(self) -> seh_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | level + | tryblk_t_level_get(self) -> uchar + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tryblk_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | end(self, *args) + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) + | extract(self) -> range_t + | + | find(self, *args) + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=range_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class tryblks_t in module ida_tryblks: + +class tryblks_t(__builtin__.object) + | Proxy of C++ qvector< tryblk_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> tryblk_t + | + | __init__(self, *args) + | __init__(self) -> tryblks_t + | __init__(self, x) -> tryblks_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> tryblk_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> tryblk_t + | begin(self) -> tryblk_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> tryblk_t + | end(self) -> tryblk_t + | + | erase(self, *args) + | erase(self, it) -> tryblk_t + | erase(self, first, last) -> tryblk_t + | + | extract(self, *args) + | extract(self) -> tryblk_t + | + | find(self, *args) + | find(self, x) -> tryblk_t + | find(self, x) -> tryblk_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=tryblk_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> tryblk_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> tryblk_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tryblks_t(self) + +=== ida_tryblks EPYDOC INJECTIONS === +ida_tryblks.TBERR_EMPTY +""" +empty try block +""" + +ida_tryblks.TBERR_END +""" +bad end address +""" + +ida_tryblks.TBERR_INTERSECT +""" +range would intersect inner tryblk +""" + +ida_tryblks.TBERR_KIND +""" +illegal try block kind +""" + +ida_tryblks.TBERR_NO_CATCHES +""" +no catch blocks at all +""" + +ida_tryblks.TBERR_OK +""" +ok +""" + +ida_tryblks.TBERR_ORDER +""" +bad address order +""" + +ida_tryblks.TBERR_START +""" +bad start address +""" +=== ida_tryblks EPYDOC INJECTIONS END === +Help on function add_til in module ida_typeinf: + +add_til(*args) + add_til(name, flags) -> int + + + Load a til file. + + @param name: til name (C++: const char *) + @param flags: combination of Load TIL flags (C++: int) + @return: one of Load TIL result codes + +Help on function alloc_type_ordinal in module ida_typeinf: + +alloc_type_ordinal(*args) + alloc_type_ordinal(ti) -> uint32 + + + \call2{alloc_type_ordinals,ti,1} + + + @param ti (C++: til_t *) + +Help on function alloc_type_ordinals in module ida_typeinf: + +alloc_type_ordinals(*args) + alloc_type_ordinals(ti, qty) -> uint32 + + + Allocate a range of ordinal numbers for new types. + + @param ti: type library (C++: til_t *) + @param qty: number of ordinals to allocate (C++: int) + @return: the first ordinal. 0 means failure. + +Help on class aloc_visitor_t in module ida_typeinf: + +class aloc_visitor_t(__builtin__.object) + | Proxy of C++ aloc_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> aloc_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_location(self, *args) + | visit_location(self, v, off, size) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_aloc_visitor_t(self) + +Help on function append_abi_opts in module ida_typeinf: + +append_abi_opts(*args) + append_abi_opts(abi_opts, user_level=False) -> bool + + + Add/remove/check ABI option General form of full abi name: abiname- + opt1-opt2-... or -opt1-opt2-... + + @param abi_opts: - ABI options to add/remove in form opt1-opt2-... + (C++: const char *) + @param user_level: - initiated by user if TRUE (==SETCOMP_BY_USER) + (C++: bool) + @return: success + +Help on function append_argloc in module ida_typeinf: + +append_argloc(*args) + append_argloc(out, vloc) -> bool + + + Serialize argument location. + + + @param out (C++: qtype *) + @param vloc (C++: const argloc_t &) + +Help on function append_tinfo_covered in module ida_typeinf: + +append_tinfo_covered(*args) + append_tinfo_covered(out, typid, offset) -> bool + +Help on function apply_callee_tinfo in module ida_typeinf: + +apply_callee_tinfo(*args) + apply_callee_tinfo(caller, tif) -> bool + + + Apply the type of the called function to the calling instruction. This + function will append parameter comments and rename the local variables + of the calling function. It also stores information about the + instructions that initialize call arguments in the database. Use + 'get_arg_addrs()' to retrieve it if necessary. Alternatively it is + possible to hook to processor_t::arg_addrs_ready event. + + @param caller: linear address of the calling instruction. must belong + to a function. (C++: ea_t) + @param tif: type info (C++: const tinfo_t &) + @return: success + +Help on function apply_cdecl in module ida_typeinf: + +apply_cdecl(*args) + apply_cdecl(til, ea, decl, flags=0) -> bool + + + Apply the specified type to the address. This function parses the + declaration and calls 'apply_tinfo()' + + @param til: type library (C++: til_t *) + @param ea: linear address (C++: ea_t) + @param decl: type declaration in C form (C++: const char *) + @param flags: flags to pass to apply_tinfo ( TINFO_DEFINITE is always + passed) (C++: int) + @return: success + +Help on function apply_named_type in module ida_typeinf: + +apply_named_type(*args) + apply_named_type(ea, name) -> bool + + + Apply the specified named type to the address. + + @param ea: linear address (C++: ea_t) + @param name: the type name, e.g. "FILE" (C++: const char *) + @return: success + +Help on function apply_once_tinfo_and_name in module ida_typeinf: + +apply_once_tinfo_and_name(*args) + apply_once_tinfo_and_name(dea, tif, name) -> bool + + + Apply the specified type and name to the address. This function checks + if the address already has a type. If the old typedoes not exist or + the new type is 'better' than the old type, then thenew type will be + applied. A type is considered better if it has moreinformation (e.g. + 'BTMT_STRUCT' is better than 'BT_INT' ).The same logic is with the + name: if the address already have a meaningfulname, it will be + preserved. Only if the old name does not exist or itis a dummy name + like byte_123, it will be replaced by the new name. + + @param dea: linear address (C++: ea_t) + @param tif: type string in the internal format (C++: const tinfo_t + &) + @param name: new name for the address (C++: const char *) + @return: success + +Help on function apply_tinfo in module ida_typeinf: + +apply_tinfo(*args) + apply_tinfo(ea, tif, flags) -> bool + + + Apply the specified type to the specified address. This function sets + the type and tries to convert the item at the specified address to + conform the type. + + @param ea: linear address (C++: ea_t) + @param tif: type string in internal format (C++: const tinfo_t &) + @param flags: combination of Apply tinfo flags (C++: uint32) + @return: success + +Help on function apply_tinfo_to_stkarg in module ida_typeinf: + +apply_tinfo_to_stkarg(*args) + apply_tinfo_to_stkarg(insn, x, v, tif, name) -> bool + + + Helper function for the processor modules. to be called from + \ph{use_stkarg_type} + + @param insn (C++: const insn_t &) + @param x (C++: const op_t &) + @param v (C++: uval_t) + @param tif (C++: const tinfo_t &) + @param name (C++: const char *) + +Help on function apply_type in module ida_typeinf: + +apply_type(*args) + apply_type(ti, _type, _fields, ea, flags) -> bool + + + Apply the specified type to the address + @param ti: Type info library. 'None' can be used. + @param py_type: type string + @param py_fields: fields string (may be empty or None) + @param ea: the address of the object + @param flags: combination of TINFO_... constants or 0 + @return: Boolean + +Help on class argloc_t in module ida_typeinf: + +class argloc_t(__builtin__.object) + | Proxy of C++ argloc_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> argloc_t + | __init__(self, r) -> argloc_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | _consume_rrel(self, *args) + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) + | _set_badloc(self) + | + | _set_biggest(self, *args) + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) + | _set_ea(self, _ea) + | + | _set_reg1(self, *args) + | _set_reg1(self, reg, off=0) + | + | _set_reg2(self, *args) + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) + | _set_stkoff(self, off) + | + | advance(self, *args) + | advance(self, delta) -> bool + | + | atype(self, *args) + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) + | calc_offset(self) -> sval_t + | + | compare(self, *args) + | compare(self, r) -> int + | + | consume_rrel(self, *args) + | consume_rrel(self, p) + | + | consume_scattered(self, *args) + | consume_scattered(self, p) + | + | get_biggest(self, *args) + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) + | get_custom(self) -> void * + | + | get_ea(self, *args) + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) + | has_reg(self) -> bool + | + | has_stkoff(self, *args) + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) + | is_badloc(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_ea(self, *args) + | is_ea(self) -> bool + | + | is_fragmented(self, *args) + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_rrel(self, *args) + | is_rrel(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) + | justify_stkoff_right(self, size, _slotsize) + | + | reg1(self, *args) + | reg1(self) -> int + | + | reg2(self, *args) + | reg2(self) -> int + | + | regoff(self, *args) + | regoff(self) -> int + | + | scattered(self, *args) + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) + | set_badloc(self) + | + | set_ea(self, *args) + | set_ea(self, _ea) + | + | set_reg1(self, *args) + | set_reg1(self, reg, off=0) + | + | set_reg2(self, *args) + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) + | set_stkoff(self, off) + | + | stkoff(self, *args) + | stkoff(self) -> sval_t + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_argloc_t(self) + +Help on class argpart_t in module ida_typeinf: + +class argpart_t(argloc_t) + | Proxy of C++ argpart_t class. + | + | Method resolution order: + | argpart_t + | argloc_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, a) -> argpart_t + | __init__(self) -> argpart_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | bad_offset(self, *args) + | bad_offset(self) -> bool + | + | bad_size(self, *args) + | bad_size(self) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | off + | argpart_t_off_get(self) -> ushort + | + | size + | argpart_t_size_get(self) -> ushort + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_argpart_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from argloc_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | _consume_rrel(self, *args) + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) + | _set_badloc(self) + | + | _set_biggest(self, *args) + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) + | _set_ea(self, _ea) + | + | _set_reg1(self, *args) + | _set_reg1(self, reg, off=0) + | + | _set_reg2(self, *args) + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) + | _set_stkoff(self, off) + | + | advance(self, *args) + | advance(self, delta) -> bool + | + | atype(self, *args) + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) + | calc_offset(self) -> sval_t + | + | compare(self, *args) + | compare(self, r) -> int + | + | consume_rrel(self, *args) + | consume_rrel(self, p) + | + | consume_scattered(self, *args) + | consume_scattered(self, p) + | + | get_biggest(self, *args) + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) + | get_custom(self) -> void * + | + | get_ea(self, *args) + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) + | has_reg(self) -> bool + | + | has_stkoff(self, *args) + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) + | is_badloc(self) -> bool + | + | is_custom(self, *args) + | is_custom(self) -> bool + | + | is_ea(self, *args) + | is_ea(self) -> bool + | + | is_fragmented(self, *args) + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) + | is_reg(self) -> bool + | + | is_reg1(self, *args) + | is_reg1(self) -> bool + | + | is_reg2(self, *args) + | is_reg2(self) -> bool + | + | is_rrel(self, *args) + | is_rrel(self) -> bool + | + | is_scattered(self, *args) + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) + | justify_stkoff_right(self, size, _slotsize) + | + | reg1(self, *args) + | reg1(self) -> int + | + | reg2(self, *args) + | reg2(self) -> int + | + | regoff(self, *args) + | regoff(self) -> int + | + | scattered(self, *args) + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) + | set_badloc(self) + | + | set_ea(self, *args) + | set_ea(self, _ea) + | + | set_reg1(self, *args) + | set_reg1(self, reg, off=0) + | + | set_reg2(self, *args) + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) + | set_stkoff(self, off) + | + | stkoff(self, *args) + | stkoff(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class argpartvec_t in module ida_typeinf: + +class argpartvec_t(__builtin__.object) + | Proxy of C++ qvector< argpart_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> argpart_t + | + | __init__(self, *args) + | __init__(self) -> argpartvec_t + | __init__(self, x) -> argpartvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> argpart_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> argpart_t + | begin(self) -> argpart_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> argpart_t + | end(self) -> argpart_t + | + | erase(self, *args) + | erase(self, it) -> argpart_t + | erase(self, first, last) -> argpart_t + | + | extract(self, *args) + | extract(self) -> argpart_t + | + | find(self, *args) + | find(self, x) -> argpart_t + | find(self, x) -> argpart_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=argpart_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> argpart_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> argpart_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_argpartvec_t(self) + +Help on class array_type_data_t in module ida_typeinf: + +class array_type_data_t(__builtin__.object) + | Proxy of C++ array_type_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, b=0, n=0) -> array_type_data_t + | + | __repr__ = _swig_repr(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | array_type_data_t_base_get(self) -> uint32 + | + | elem_type + | array_type_data_t_elem_type_get(self) -> tinfo_t + | + | nelems + | array_type_data_t_nelems_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_array_type_data_t(self) + +Help on function begin_type_updating in module ida_typeinf: + +begin_type_updating(*args) + begin_type_updating(utp) + + + Mark the beginning of a large update operation on the types. Can be + used with 'add_enum_member()' , add_struc_member, etc... Also see + 'end_type_updating()' + + @param utp (C++: update_type_t) + +Help on class bitfield_type_data_t in module ida_typeinf: + +class bitfield_type_data_t(__builtin__.object) + | Proxy of C++ bitfield_type_data_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _nbytes=0, _width=0, _is_unsigned=False) -> bitfield_type_data_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | is_unsigned + | bitfield_type_data_t_is_unsigned_get(self) -> bool + | + | nbytes + | bitfield_type_data_t_nbytes_get(self) -> uchar + | + | thisown + | The membership flag + | + | width + | bitfield_type_data_t_width_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_bitfield_type_data_t(self) + +Help on function calc_c_cpp_name in module ida_typeinf: + +calc_c_cpp_name(*args) + calc_c_cpp_name(name, type, ccn_flags) -> str + + + Get C or C++ form of the name. + + @param name: original (mangled or decorated) name (C++: const char *) + @param type: name type if known, otherwise NULL (C++: const tinfo_t + *) + @param ccn_flags: one of C/C++ naming flags (C++: int) + +Help on function calc_number_of_children in module ida_typeinf: + +calc_number_of_children(*args) + calc_number_of_children(loc, tif, dont_deref_ptr=False) -> int + + + Calculate max number of lines of a formatted c data, when expanded ( + 'PTV_EXPAND' ). + + @param loc: location of the data ( ALOC_STATIC or ALOC_CUSTOM ) + (C++: const argloc_t &) + @param tif: type info (C++: const tinfo_t &) + @param dont_deref_ptr: consider 'ea' as the ptr value (C++: bool) + +Help on function calc_tinfo_gaps in module ida_typeinf: + +calc_tinfo_gaps(*args) + calc_tinfo_gaps(out, typid) -> bool + +Help on function calc_type_size in module ida_typeinf: + +calc_type_size(*args) + calc_type_size(ti, tp) -> PyObject * + + + Returns the size of a type + @param ti: Type info. 'None' can be passed. + @param tp: type string + @return: + - None on failure + - The size of the type + +Help on class callregs_t in module ida_typeinf: + +class callregs_t(__builtin__.object) + | Proxy of C++ callregs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> callregs_t + | __init__(self, cc) -> callregs_t + | + | __repr__ = _swig_repr(self) + | + | init_regs(self, *args) + | init_regs(self, cc) + | + | reginds(self, *args) + | reginds(self, gp_ind, fp_ind, r) -> bool + | + | reset(self, *args) + | reset(self) + | + | set(self, *args) + | set(self, _policy, gprs, fprs) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | regcount(*args) + | regcount(cc) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fpregs + | callregs_t_fpregs_get(self) -> intvec_t * + | + | gpregs + | callregs_t_gpregs_get(self) -> intvec_t * + | + | nregs + | callregs_t_nregs_get(self) -> int + | + | policy + | callregs_t_policy_get(self) -> argreg_policy_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_callregs_t(self) + +Help on function callregs_t_regcount in module ida_typeinf: + +callregs_t_regcount(*args) + callregs_t_regcount(cc) -> int + +Help on function choose_local_tinfo in module ida_typeinf: + +choose_local_tinfo(*args) + choose_local_tinfo(ti, title, func=None, def_ord=0, ud=None) -> uint32 + + + Choose a type from the local type library. + + @param ti: pointer to til (C++: const til_t *) + @param title: title of listbox to display (C++: const char *) + @param func: predicate to select types to display (maybe NULL) (C++: + local_tinfo_predicate_t *) + @param def_ord: ordinal to position cursor before choose (C++: uint32) + @param ud: user data (C++: void *) + @return: == 0 means nothing is chosen, otherwise an ordinal number + +Help on function choose_local_tinfo_and_delta in module ida_typeinf: + +choose_local_tinfo_and_delta(*args) + choose_local_tinfo_and_delta(delta, ti, title, func=None, def_ord=0, ud=None) -> uint32 + + + Choose a type from the local type library and specify the pointer + shift value. + + @param delta: pointer shift value (C++: int32 *) + @param ti: pointer to til (C++: const til_t *) + @param title: title of listbox to display (C++: const char *) + @param func: predicate to select types to display (maybe NULL) (C++: + local_tinfo_predicate_t *) + @param def_ord: ordinal to position cursor before choose (C++: uint32) + @param ud: user data (C++: void *) + @return: == 0 means nothing is chosen, otherwise an ordinal number + +Help on function choose_named_type in module ida_typeinf: + +choose_named_type(*args) + choose_named_type(out_sym, root_til, title, ntf_flags, predicate=None) -> bool + + + Choose a type from a type library. + + @param out_sym: pointer to be filled with the chosen type (C++: + til_symbol_t *) + @param root_til: pointer to starting til (the function will inspect + the base tils if allowed by flags) (C++: const til_t + *) + @param title: title of listbox to display (C++: const char *) + @param ntf_flags: combination of Flags for named types (C++: int) + @param predicate: predicate to select types to display (maybe NULL) + (C++: predicate_t *) + @return: false if nothing is chosen, otherwise true + +Help on function clear_tinfo_t in module ida_typeinf: + +clear_tinfo_t(*args) + clear_tinfo_t(_this) + +Help on function compact_til in module ida_typeinf: + +compact_til(*args) + compact_til(ti) -> bool + + + Collect garbage in til. Must be called before storing the til. + + @param ti (C++: til_t *) + @return: true if any memory was freed + +Help on function compare_tinfo in module ida_typeinf: + +compare_tinfo(*args) + compare_tinfo(t1, t2, tcflags) -> bool + +Help on class const_aloc_visitor_t in module ida_typeinf: + +class const_aloc_visitor_t(__builtin__.object) + | Proxy of C++ const_aloc_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> const_aloc_visitor_t + | + | __repr__ = _swig_repr(self) + | + | visit_location(self, *args) + | visit_location(self, v, off, size) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_const_aloc_visitor_t(self) + +Help on function convert_pt_flags_to_hti in module ida_typeinf: + +convert_pt_flags_to_hti(*args) + convert_pt_flags_to_hti(pt_flags) -> int + + + Convert 'Type parsing flags' to 'Type formatting flags' . Type parsing + flags lesser than 0x10 don't have stable meaning and will be ignored + (more on these flags can be seen in idc.idc) + + @param pt_flags (C++: int) + +Help on function copy_named_type in module ida_typeinf: + +copy_named_type(*args) + copy_named_type(dsttil, srctil, name) -> uint32 + + + Copy a named type from one til to another. This function will copy the + specified type and all dependent types from the source type library to + the destination library. + + @param dsttil: Destination til. It must have orginal types enabled + (C++: til_t *) + @param srctil: Source til. (C++: const til_t *) + @param name: name of the type to copy (C++: const char *) + @return: ordinal number of the copied type. 0 means error + +Help on function copy_tinfo_t in module ida_typeinf: + +copy_tinfo_t(*args) + copy_tinfo_t(_this, r) + +Help on function create_numbered_type_name in module ida_typeinf: + +create_numbered_type_name(*args) + create_numbered_type_name(ord) -> str + + + Create anonymous name for numbered type. This name can be used to + reference a numbered type by its ordinal Ordinal names have the + following format: '#' + set_de(ord) Returns: -1 if error, otherwise + the name length + + @param ord (C++: int32) + +Help on function create_tinfo in module ida_typeinf: + +create_tinfo(*args) + create_tinfo(_this, bt, bt2, ptr) -> bool + +Help on function default_compiler in module ida_typeinf: + +default_compiler(*args) + default_compiler() -> comp_t + + + Get compiler specified by \varmem{inf,idainfo,cc}. + +Help on function del_named_type in module ida_typeinf: + +del_named_type(*args) + del_named_type(ti, name, ntf_flags) -> bool + + + Delete information about a symbol. + + @param ti: type library (C++: til_t *) + @param name: name of symbol (C++: const char *) + @param ntf_flags: combination of Flags for named types (C++: int) + @return: success + +Help on function del_numbered_type in module ida_typeinf: + +del_numbered_type(*args) + del_numbered_type(ti, ordinal) -> bool + + + Delete a numbered type. + + + @param ti (C++: til_t *) + @param ordinal (C++: uint32) + +Help on function del_til in module ida_typeinf: + +del_til(*args) + del_til(name) -> bool + + + Unload a til file. + + + @param name (C++: const char *) + +Help on function del_tinfo_attr in module ida_typeinf: + +del_tinfo_attr(*args) + del_tinfo_attr(tif, key, make_copy) -> bool + +Help on function deref_ptr in module ida_typeinf: + +deref_ptr(*args) + deref_ptr(ptr_ea, tif, closure_obj=None) -> bool + + + Dereference a pointer. + + @param ptr_ea: in/out parameter in: address of the pointer out: + the pointed address (C++: ea_t *) + @param tif: type of the pointer (C++: const tinfo_t &) + @param closure_obj: closure object (not used yet) (C++: ea_t *) + @return: success + +Help on function deserialize_tinfo in module ida_typeinf: + +deserialize_tinfo(*args) + deserialize_tinfo(tif, til, ptype, pfields, pfldcmts) -> bool + +Help on function dstr_tinfo in module ida_typeinf: + +dstr_tinfo(*args) + dstr_tinfo(tif) -> char const * + +Help on function dump_func_type_data in module ida_typeinf: + +dump_func_type_data(*args) + dump_func_type_data(fti, praloc_bits) -> str + + + Use 'func_type_data_t::dump()' + + + @param fti (C++: const func_type_data_t &) + @param praloc_bits (C++: int) + +Help on function end_type_updating in module ida_typeinf: + +end_type_updating(*args) + end_type_updating(utp) + + + Mark the end of a large update operation on the types (see + 'begin_type_updating()' ) + + + @param utp (C++: update_type_t) + +Help on class enum_member_t in module ida_typeinf: + +class enum_member_t(__builtin__.object) + | Proxy of C++ enum_member_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> enum_member_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | enum_member_t_cmt_get(self) -> qstring * + | + | name + | enum_member_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | enum_member_t_value_get(self) -> uint64 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enum_member_t(self) + +Help on class enum_member_vec_t in module ida_typeinf: + +class enum_member_vec_t(__builtin__.object) + | Proxy of C++ qvector< enum_member_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> enum_member_t + | + | __init__(self, *args) + | __init__(self) -> enum_member_vec_t + | __init__(self, x) -> enum_member_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> enum_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> enum_member_t + | begin(self) -> enum_member_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> enum_member_t + | end(self) -> enum_member_t + | + | erase(self, *args) + | erase(self, it) -> enum_member_t + | erase(self, first, last) -> enum_member_t + | + | extract(self, *args) + | extract(self) -> enum_member_t + | + | find(self, *args) + | find(self, x) -> enum_member_t + | find(self, x) -> enum_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=enum_member_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> enum_member_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> enum_member_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enum_member_vec_t(self) + +Help on class enum_type_data_t in module ida_typeinf: + +class enum_type_data_t(enum_member_vec_t) + | Proxy of C++ enum_type_data_t class. + | + | Method resolution order: + | enum_type_data_t + | enum_member_vec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _bte=BTE_ALWAYS|BTE_HEX) -> enum_type_data_t + | + | __repr__ = _swig_repr(self) + | + | calc_mask(self, *args) + | calc_mask(self) -> uint64 + | + | calc_nbytes(self, *args) + | calc_nbytes(self) -> int + | + | is_64bit(self, *args) + | is_64bit(self) -> bool + | + | is_char(self, *args) + | is_char(self) -> bool + | + | is_hex(self, *args) + | is_hex(self) -> bool + | + | is_sdec(self, *args) + | is_sdec(self) -> bool + | + | is_udec(self, *args) + | is_udec(self) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bte + | enum_type_data_t_bte_get(self) -> bte_t + | + | group_sizes + | enum_type_data_t_group_sizes_get(self) -> intvec_t * + | + | taenum_bits + | enum_type_data_t_taenum_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_enum_type_data_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from enum_member_vec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> enum_member_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> enum_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> enum_member_t + | begin(self) -> enum_member_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> enum_member_t + | end(self) -> enum_member_t + | + | erase(self, *args) + | erase(self, it) -> enum_member_t + | erase(self, first, last) -> enum_member_t + | + | extract(self, *args) + | extract(self) -> enum_member_t + | + | find(self, *args) + | find(self, x) -> enum_member_t + | find(self, x) -> enum_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=enum_member_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> enum_member_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> enum_member_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from enum_member_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function extract_argloc in module ida_typeinf: + +extract_argloc(*args) + extract_argloc(vloc, ptype, is_retval) -> bool + + + Deserialize argument location. + + + @param vloc (C++: argloc_t *) + @param ptype (C++: const type_t **) + @param is_retval (C++: bool) + +Help on function find_tinfo_udt_member in module ida_typeinf: + +find_tinfo_udt_member(*args) + find_tinfo_udt_member(udm, typid, strmem_flags) -> int + +Help on function first_named_type in module ida_typeinf: + +first_named_type(*args) + first_named_type(ti, ntf_flags) -> char const * + + + Enumerate types. Returns mangled names. Never returns anonymous types. + To include it, enumerate types by ordinals. + + @param ti (C++: const til_t *) + @param ntf_flags (C++: int) + +Help on function for_all_arglocs in module ida_typeinf: + +for_all_arglocs(*args) + for_all_arglocs(vv, vloc, size, off=0) -> int + + + Compress larger argloc types and initiate the aloc visitor. + + + @param vv (C++: aloc_visitor_t &) + @param vloc (C++: argloc_t &) + @param size (C++: int) + @param off (C++: int) + +Help on function for_all_const_arglocs in module ida_typeinf: + +for_all_const_arglocs(*args) + for_all_const_arglocs(vv, vloc, size, off=0) -> int + + + See 'for_all_arglocs()' + + + @param vv (C++: const_aloc_visitor_t &) + @param vloc (C++: const argloc_t &) + @param size (C++: int) + @param off (C++: int) + +Help on function free_til in module ida_typeinf: + +free_til(*args) + free_til(ti) + + + Free memory allocated by til. + + + @param ti (C++: til_t *) + +Help on function func_has_stkframe_hole in module ida_typeinf: + +func_has_stkframe_hole(*args) + func_has_stkframe_hole(ea, fti) -> bool + + + Looks for a hole at the beginning of the stack arguments. Will make + use of the IDB's 'func_t' function at that place (if present) to help + determine the presence of such a hole. + + @param ea (C++: ea_t) + @param fti (C++: const func_type_data_t &) + +Help on class func_type_data_t in module ida_typeinf: + +class func_type_data_t(funcargvec_t) + | Proxy of C++ func_type_data_t class. + | + | Method resolution order: + | func_type_data_t + | funcargvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_type_data_t + | + | __repr__ = _swig_repr(self) + | + | dump(self, *args) + | dump(self, praloc_bits=0x02) -> bool + | + | get_call_method(self, *args) + | get_call_method(self) -> int + | + | guess_cc(self, *args) + | guess_cc(self, purged, cc_flags) -> cm_t + | + | is_high(self, *args) + | is_high(self) -> bool + | + | is_noret(self, *args) + | is_noret(self) -> bool + | + | is_pure(self, *args) + | is_pure(self) -> bool + | + | is_vararg_cc(self, *args) + | is_vararg_cc(self) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cc + | func_type_data_t_cc_get(self) -> cm_t + | + | flags + | func_type_data_t_flags_get(self) -> int + | + | retloc + | func_type_data_t_retloc_get(self) -> argloc_t + | + | rettype + | func_type_data_t_rettype_get(self) -> tinfo_t + | + | spoiled + | func_type_data_t_spoiled_get(self) -> reginfovec_t + | + | stkargs + | func_type_data_t_stkargs_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_func_type_data_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from funcargvec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> funcarg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> funcarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> funcarg_t + | begin(self) -> funcarg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> funcarg_t + | end(self) -> funcarg_t + | + | erase(self, *args) + | erase(self, it) -> funcarg_t + | erase(self, first, last) -> funcarg_t + | + | extract(self, *args) + | extract(self) -> funcarg_t + | + | find(self, *args) + | find(self, x) -> funcarg_t + | find(self, x) -> funcarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=funcarg_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> funcarg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> funcarg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from funcargvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class funcarg_t in module ida_typeinf: + +class funcarg_t(__builtin__.object) + | Proxy of C++ funcarg_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> funcarg_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argloc + | funcarg_t_argloc_get(self) -> argloc_t + | + | cmt + | funcarg_t_cmt_get(self) -> qstring * + | + | flags + | funcarg_t_flags_get(self) -> uint32 + | + | name + | funcarg_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | funcarg_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_funcarg_t(self) + +Help on class funcargvec_t in module ida_typeinf: + +class funcargvec_t(__builtin__.object) + | Proxy of C++ qvector< funcarg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> funcarg_t + | + | __init__(self, *args) + | __init__(self) -> funcargvec_t + | __init__(self, x) -> funcargvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> funcarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> funcarg_t + | begin(self) -> funcarg_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> funcarg_t + | end(self) -> funcarg_t + | + | erase(self, *args) + | erase(self, it) -> funcarg_t + | erase(self, first, last) -> funcarg_t + | + | extract(self, *args) + | extract(self) -> funcarg_t + | + | find(self, *args) + | find(self, x) -> funcarg_t + | find(self, x) -> funcarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=funcarg_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> funcarg_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> funcarg_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_funcargvec_t(self) + +Help on function gcc_layout in module ida_typeinf: + +gcc_layout(*args) + gcc_layout() -> bool + + + Should use the struct/union layout as done by gcc? + +Help on function gen_decorate_name in module ida_typeinf: + +gen_decorate_name(*args) + gen_decorate_name(name, mangle, cc, type) -> str + + + Generic function for 'decorate_name()' (may be used in IDP modules) + + + @param name (C++: const char *) + @param mangle (C++: bool) + @param cc (C++: cm_t) + @param type (C++: const tinfo_t *) + +Help on function gen_use_arg_tinfos in module ida_typeinf: + +gen_use_arg_tinfos(*args) + gen_use_arg_tinfos(caller, fti, rargs, set_optype, is_stkarg_load, has_delay_slot) + + + The main function using these callbacks: + + + @param caller (C++: ea_t) + @param fti (C++: func_type_data_t *) + @param rargs (C++: funcargvec_t *) + @param set_optype (C++: set_op_tinfo_t *) + @param is_stkarg_load (C++: is_stkarg_load_t *) + @param has_delay_slot (C++: has_delay_slot_t *) + +Help on function get_abi_name in module ida_typeinf: + +get_abi_name(*args) + get_abi_name() -> str + + + Get ABI name. + + @return: length of the name (>=0) + +Help on function get_alias_target in module ida_typeinf: + +get_alias_target(*args) + get_alias_target(ti, ordinal) -> uint32 + + + Find the final alias destination. If the ordinal has not been aliased, + return the specified ordinal itself If failed, returns 0. + + @param ti (C++: const til_t *) + @param ordinal (C++: uint32) + +Help on function get_arg_addrs in module ida_typeinf: + +get_arg_addrs(*args) + get_arg_addrs(caller) -> PyObject * + + + Retrieve addresses of argument initialization instructions + + @param caller: the address of the call instruction + @return: list of instruction addresses + +Help on function get_base_type in module ida_typeinf: + +get_base_type(*args) + get_base_type(t) -> type_t + + + Get get basic type bits ( 'TYPE_BASE_MASK' ) + + + @param t (C++: type_t) + +Help on function get_c_header_path in module ida_typeinf: + +get_c_header_path(*args) + get_c_header_path() -> str + + + Get the include directory path of the target compiler. + +Help on function get_c_macros in module ida_typeinf: + +get_c_macros(*args) + get_c_macros() -> str + + + Get predefined macros for the target compiler. + +Help on function get_comp in module ida_typeinf: + +get_comp(*args) + get_comp(comp) -> comp_t + + + Get compiler bits. + + + @param comp (C++: comp_t) + +Help on function get_compiler_abbr in module ida_typeinf: + +get_compiler_abbr(*args) + get_compiler_abbr(id) -> char const * + + + Get abbreviated compiler name. + + + @param id (C++: comp_t) + +Help on function get_compiler_name in module ida_typeinf: + +get_compiler_name(*args) + get_compiler_name(id) -> char const * + + + Get full compiler name. + + + @param id (C++: comp_t) + +Help on function get_compilers in module ida_typeinf: + +get_compilers(*args) + get_compilers(ids, names, abbrs) + + + Get names of all built-in compilers. + + + @param ids (C++: compvec_t *) + @param names (C++: qstrvec_t *) + @param abbrs (C++: qstrvec_t *) + +Help on function get_enum_member_expr in module ida_typeinf: + +get_enum_member_expr(*args) + get_enum_member_expr(tif, serial, value) -> str + + + Return a C expression that can be used to represent an enum member. If + the value does not correspond to any single enum member, this function + tries to find a bitwise combination of enum members that correspond to + it. If more than half of value bits do not match any enum members, it + fails. + + @param tif: enumeration type (C++: const tinfo_t &) + @param serial: which enumeration member to use (0 means the first with + the given value) (C++: int) + @param value: value to search in the enumeration type. only 32-bit + number can be handled yet (C++: uint64) + @return: success + +Help on function get_full_type in module ida_typeinf: + +get_full_type(*args) + get_full_type(t) -> type_t + + + Get basic type bits + type flags ( 'TYPE_FULL_MASK' ) + + + @param t (C++: type_t) + +Help on function get_idainfo_by_type in module ida_typeinf: + +get_idainfo_by_type(*args) + get_idainfo_by_type(tif) -> bool + + + Extract information from a 'tinfo_t' . + + @param tif: the type to inspect (C++: const tinfo_t &) + +Help on function get_idati in module ida_typeinf: + +get_idati(*args) + get_idati() -> til_t + + + Pointer to the local type library - this til is private for each IDB + file Function that accepts til_t* uses local type library instead of + NULL. + +Help on function get_named_type in module ida_typeinf: + +get_named_type(*args) + get_named_type(til, name, ntf_flags) -> PyObject * + + + Get a type data by its name. + @param til: the type library + @param name: the type name + @param ntf_flags: a combination of NTF_* constants + @return: + None on failure + tuple(code, type_str, fields_str, cmt, field_cmts, sclass, value) on success + +Help on function get_named_type64 in module ida_typeinf: + +get_named_type64(*args) + get_named_type64(til, name, ntf_flags) -> PyObject * + + + See 'get_named_type()' above.If the value in the 'ti' library is + 32-bit, it will be sign-extended before being stored in the 'value' + pointer. + + @param name (C++: const char *) + @param ntf_flags (C++: int) + +Help on function get_numbered_type in module ida_typeinf: + +get_numbered_type(*args) + get_numbered_type(til, ordinal) -> PyObject * + + + Retrieve a type by its ordinal number. + + + @param ordinal (C++: uint32) + +Help on function get_numbered_type_name in module ida_typeinf: + +get_numbered_type_name(*args) + get_numbered_type_name(ti, ordinal) -> char const * + + + Get type name (if exists) by its ordinal. If the type is anonymous, + returns "". If failed, returns NULL + + @param ti (C++: const til_t *) + @param ordinal (C++: uint32) + +Help on function get_ordinal_from_idb_type in module ida_typeinf: + +get_ordinal_from_idb_type(*args) + get_ordinal_from_idb_type(name, type) -> int + + + Get ordinal number of an idb type (struct/enum). The 'type' parameter + is used only to determine the kind of the type (struct or enum) Use + this function to find out the correspondence between idb types and til + types + + @param name (C++: const char *) + @param type (C++: const type_t *) + +Help on function get_ordinal_qty in module ida_typeinf: + +get_ordinal_qty(*args) + get_ordinal_qty(ti) -> uint32 + + + Get number of allocated ordinals. + + @param ti (C++: const til_t *) + @return: uint32(-1) if failed + +Help on function get_scalar_bt in module ida_typeinf: + +get_scalar_bt(*args) + get_scalar_bt(size) -> type_t + +Help on function get_stock_tinfo in module ida_typeinf: + +get_stock_tinfo(*args) + get_stock_tinfo(tif, id) -> bool + +Help on function get_tinfo_attr in module ida_typeinf: + +get_tinfo_attr(*args) + get_tinfo_attr(typid, key, bv, all_attrs) -> bool + +Help on function get_tinfo_attrs in module ida_typeinf: + +get_tinfo_attrs(*args) + get_tinfo_attrs(typid, tav, include_ref_attrs) -> bool + +Help on function get_tinfo_details in module ida_typeinf: + +get_tinfo_details(*args) + get_tinfo_details(typid, bt2, buf) -> bool + +Help on function get_tinfo_pdata in module ida_typeinf: + +get_tinfo_pdata(*args) + get_tinfo_pdata(outptr, typid, what) -> size_t + +Help on function get_tinfo_property in module ida_typeinf: + +get_tinfo_property(*args) + get_tinfo_property(typid, gta_prop) -> size_t + +Help on function get_tinfo_size in module ida_typeinf: + +get_tinfo_size(*args) + get_tinfo_size(p_effalign, typid, gts_code) -> size_t + +Help on function get_type_flags in module ida_typeinf: + +get_type_flags(*args) + get_type_flags(t) -> type_t + + + Get type flags ( 'TYPE_FLAGS_MASK' ) + + + @param t (C++: type_t) + +Help on function get_type_ordinal in module ida_typeinf: + +get_type_ordinal(*args) + get_type_ordinal(ti, name) -> int32 + + + Get type ordinal by its name. + + + @param ti (C++: const til_t *) + @param name (C++: const char *) + +Help on function guess_func_cc in module ida_typeinf: + +guess_func_cc(*args) + guess_func_cc(fti, npurged, cc_flags) -> cm_t + + + Use 'func_type_data_t::guess_cc()' + + + @param fti (C++: const func_type_data_t &) + @param npurged (C++: int) + @param cc_flags (C++: int) + +Help on function guess_tinfo in module ida_typeinf: + +guess_tinfo(*args) + guess_tinfo(tif, id) -> int + + + Generate a type information about the id from the disassembly. id can + be a structure/union/enum id or an address. + + @param tif (C++: tinfo_t *) + @param id (C++: tid_t) + @return: one of Guess tinfo codes + +Help on class ida_lowertype_helper_t in module ida_typeinf: + +class ida_lowertype_helper_t(lowertype_helper_t) + | Proxy of C++ ida_lowertype_helper_t class. + | + | Method resolution order: + | ida_lowertype_helper_t + | lowertype_helper_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _tif, _ea, _pb) -> ida_lowertype_helper_t + | + | __repr__ = _swig_repr(self) + | + | func_has_stkframe_hole(self, *args) + | func_has_stkframe_hole(self, candidate, candidate_data) -> bool + | + | get_func_purged_bytes(self, *args) + | get_func_purged_bytes(self, candidate, arg3) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ida_lowertype_helper_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from lowertype_helper_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function idc_get_local_type in module ida_typeinf: + +idc_get_local_type(*args) + idc_get_local_type(ordinal, flags, buf, maxsize) -> int + +Help on function idc_get_local_type_name in module ida_typeinf: + +idc_get_local_type_name(*args) + idc_get_local_type_name(ordinal) -> str + +Help on function idc_get_local_type_raw in module ida_typeinf: + +idc_get_local_type_raw(*args) + idc_get_local_type_raw(ordinal) -> PyObject * + +Help on function idc_get_type in module ida_typeinf: + +idc_get_type(*args) + idc_get_type(ea) -> str + +Help on function idc_get_type_raw in module ida_typeinf: + +idc_get_type_raw(*args) + idc_get_type_raw(ea) -> PyObject * + +Help on function idc_guess_type in module ida_typeinf: + +idc_guess_type(*args) + idc_guess_type(ea) -> str + +Help on function idc_parse_decl in module ida_typeinf: + +idc_parse_decl(*args) + idc_parse_decl(ti, decl, flags) -> PyObject * + +Help on function idc_parse_types in module ida_typeinf: + +idc_parse_types(*args) + idc_parse_types(input, flags) -> int + +Help on function idc_print_type in module ida_typeinf: + +idc_print_type(*args) + idc_print_type(_type, _fields, name, flags) -> PyObject * + +Help on function idc_set_local_type in module ida_typeinf: + +idc_set_local_type(*args) + idc_set_local_type(ordinal, dcl, flags) -> int + +Help on function import_type in module ida_typeinf: + +import_type(*args) + import_type(til, idx, name, flags=0) -> tid_t + + + Copy a named type from til to idb. + + @param til: type library (C++: const til_t *) + @param idx: the position of the new type in the list of types + (structures or enums). -1 means at the end of the list + (C++: int) + @param name: the type name (C++: const char *) + @param flags: combination of Import type flags (C++: int) + @return: BADNODE on error + +Help on function is_autosync in module ida_typeinf: + +is_autosync(*args) + is_autosync(name, type) -> bool + is_autosync(name, tif) -> bool + + + Is the specified idb type automatically synchronized? + + + @param name (C++: const char *) + @param type (C++: const type_t *) + +Help on function is_code_far in module ida_typeinf: + +is_code_far(*args) + is_code_far(cm) -> bool + + + Does the given model specify far code?. + + + @param cm (C++: cm_t) + +Help on function is_comp_unsure in module ida_typeinf: + +is_comp_unsure(*args) + is_comp_unsure(comp) -> comp_t + + + See 'COMP_UNSURE' . + + + @param comp (C++: comp_t) + +Help on function is_data_far in module ida_typeinf: + +is_data_far(*args) + is_data_far(cm) -> bool + + + Does the given model specify far data?. + + + @param cm (C++: cm_t) + +Help on function is_gcc in module ida_typeinf: + +is_gcc(*args) + is_gcc() -> bool + + + Is the target compiler 'COMP_GNU' ? + +Help on function is_gcc32 in module ida_typeinf: + +is_gcc32(*args) + is_gcc32() -> bool + + + Is the target compiler 32 bit gcc? + +Help on function is_gcc64 in module ida_typeinf: + +is_gcc64(*args) + is_gcc64() -> bool + + + Is the target compiler 64 bit gcc? + +Help on function is_ordinal_name in module ida_typeinf: + +is_ordinal_name(*args) + is_ordinal_name(name, ord=None) -> bool + + + Check if the name is an ordinal name. Ordinal names have the following + format: '#' + set_de(ord) + + @param name (C++: const char *) + @param ord (C++: uint32 *) + +Help on function is_purging_cc in module ida_typeinf: + +is_purging_cc(*args) + is_purging_cc(cm) -> bool + + + Does the calling convention clean the stack arguments upon + return?.this function is valid only for x86 code + + @param cm (C++: cm_t) + +Help on function is_restype_enum in module ida_typeinf: + +is_restype_enum(*args) + is_restype_enum(til, type) -> bool + +Help on function is_restype_struct in module ida_typeinf: + +is_restype_struct(*args) + is_restype_struct(til, type) -> bool + +Help on function is_restype_struni in module ida_typeinf: + +is_restype_struni(*args) + is_restype_struni(til, type) -> bool + +Help on function is_restype_void in module ida_typeinf: + +is_restype_void(*args) + is_restype_void(til, type) -> bool + +Help on function is_sdacl_byte in module ida_typeinf: + +is_sdacl_byte(*args) + is_sdacl_byte(t) -> bool + + + Identify an sdacl byte. The first sdacl byte has the following format: + 11xx000x. The sdacl bytes are appended to udt fields. They indicate + the start of type attributes (as the tah-bytes do). The sdacl bytes + are used in the udt headers instead of the tah-byte. This is done for + compatibility with old databases, they were already using sdacl bytes + in udt headers and as udt field postfixes. (see "sdacl-typeattrs" in + the type bit definitions) + + @param t (C++: type_t) + +Help on function is_tah_byte in module ida_typeinf: + +is_tah_byte(*args) + is_tah_byte(t) -> bool + + + The TAH byte (type attribute header byte) denotes the start of type + attributes. (see "tah-typeattrs" in the type bit definitions) + + @param t (C++: type_t) + +Help on function is_type_arithmetic in module ida_typeinf: + +is_type_arithmetic(*args) + is_type_arithmetic(t) -> bool + + + Is the type an arithmetic type? (floating or integral) + + + @param t (C++: type_t) + +Help on function is_type_array in module ida_typeinf: + +is_type_array(*args) + is_type_array(t) -> bool + + + See 'BT_ARRAY' . + + + @param t (C++: type_t) + +Help on function is_type_bitfld in module ida_typeinf: + +is_type_bitfld(*args) + is_type_bitfld(t) -> bool + + + See 'BT_BITFIELD' . + + + @param t (C++: type_t) + +Help on function is_type_bool in module ida_typeinf: + +is_type_bool(*args) + is_type_bool(t) -> bool + + + See 'BTF_BOOL' . + + + @param t (C++: type_t) + +Help on function is_type_char in module ida_typeinf: + +is_type_char(*args) + is_type_char(t) -> bool + + + Does the type specify a char value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_complex in module ida_typeinf: + +is_type_complex(*args) + is_type_complex(t) -> bool + + + See 'BT_COMPLEX' . + + + @param t (C++: type_t) + +Help on function is_type_const in module ida_typeinf: + +is_type_const(*args) + is_type_const(t) -> bool + + + See 'BTM_CONST' . + + + @param t (C++: type_t) + +Help on function is_type_double in module ida_typeinf: + +is_type_double(*args) + is_type_double(t) -> bool + + + See 'BTF_DOUBLE' . + + + @param t (C++: type_t) + +Help on function is_type_enum in module ida_typeinf: + +is_type_enum(*args) + is_type_enum(t) -> bool + + + See 'BTF_ENUM' . + + + @param t (C++: type_t) + +Help on function is_type_ext_arithmetic in module ida_typeinf: + +is_type_ext_arithmetic(*args) + is_type_ext_arithmetic(t) -> bool + + + Is the type an extended arithmetic type? (arithmetic or enum) + + + @param t (C++: type_t) + +Help on function is_type_ext_integral in module ida_typeinf: + +is_type_ext_integral(*args) + is_type_ext_integral(t) -> bool + + + Is the type an extended integral type? (integral or enum) + + + @param t (C++: type_t) + +Help on function is_type_float in module ida_typeinf: + +is_type_float(*args) + is_type_float(t) -> bool + + + See 'BTF_FLOAT' . + + + @param t (C++: type_t) + +Help on function is_type_floating in module ida_typeinf: + +is_type_floating(*args) + is_type_floating(t) -> bool + + + Is the type a floating point type? + + + @param t (C++: type_t) + +Help on function is_type_func in module ida_typeinf: + +is_type_func(*args) + is_type_func(t) -> bool + + + See 'BT_FUNC' . + + + @param t (C++: type_t) + +Help on function is_type_int in module ida_typeinf: + +is_type_int(*args) + is_type_int(bt) -> bool + + + Does the type_t specify one of the basic types in 'Basic type: + integer' ? + + + @param bt (C++: type_t) + +Help on function is_type_int128 in module ida_typeinf: + +is_type_int128(*args) + is_type_int128(t) -> bool + + + Does the type specify a 128-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int16 in module ida_typeinf: + +is_type_int16(*args) + is_type_int16(t) -> bool + + + Does the type specify a 16-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int32 in module ida_typeinf: + +is_type_int32(*args) + is_type_int32(t) -> bool + + + Does the type specify a 32-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int64 in module ida_typeinf: + +is_type_int64(*args) + is_type_int64(t) -> bool + + + Does the type specify a 64-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_integral in module ida_typeinf: + +is_type_integral(*args) + is_type_integral(t) -> bool + + + Is the type an integral type (char/short/int/long/bool)? + + + @param t (C++: type_t) + +Help on function is_type_ldouble in module ida_typeinf: + +is_type_ldouble(*args) + is_type_ldouble(t) -> bool + + + See 'BTF_LDOUBLE' . + + + @param t (C++: type_t) + +Help on function is_type_paf in module ida_typeinf: + +is_type_paf(*args) + is_type_paf(t) -> bool + + + Is the type a pointer, array, or function type? + + + @param t (C++: type_t) + +Help on function is_type_partial in module ida_typeinf: + +is_type_partial(*args) + is_type_partial(t) -> bool + + + Identifies an unknown or void type with a known size (see 'Basic type: + unknown & void' ) + + + @param t (C++: type_t) + +Help on function is_type_ptr in module ida_typeinf: + +is_type_ptr(*args) + is_type_ptr(t) -> bool + + + See 'BT_PTR' . + + + @param t (C++: type_t) + +Help on function is_type_ptr_or_array in module ida_typeinf: + +is_type_ptr_or_array(*args) + is_type_ptr_or_array(t) -> bool + + + Is the type a pointer or array type? + + + @param t (C++: type_t) + +Help on function is_type_struct in module ida_typeinf: + +is_type_struct(*args) + is_type_struct(t) -> bool + + + See 'BTF_STRUCT' . + + + @param t (C++: type_t) + +Help on function is_type_struni in module ida_typeinf: + +is_type_struni(*args) + is_type_struni(t) -> bool + + + Is the type a struct or union? + + + @param t (C++: type_t) + +Help on function is_type_sue in module ida_typeinf: + +is_type_sue(*args) + is_type_sue(t) -> bool + + + Is the type a struct/union/enum? + + + @param t (C++: type_t) + +Help on function is_type_tbyte in module ida_typeinf: + +is_type_tbyte(*args) + is_type_tbyte(t) -> bool + + + See 'BTF_FLOAT' . + + + @param t (C++: type_t) + +Help on function is_type_typedef in module ida_typeinf: + +is_type_typedef(*args) + is_type_typedef(t) -> bool + + + See 'BTF_TYPEDEF' . + + + @param t (C++: type_t) + +Help on function is_type_uchar in module ida_typeinf: + +is_type_uchar(*args) + is_type_uchar(t) -> bool + + + See 'BTF_UCHAR' . + + + @param t (C++: type_t) + +Help on function is_type_uint in module ida_typeinf: + +is_type_uint(*args) + is_type_uint(t) -> bool + + + See 'BTF_UINT' . + + + @param t (C++: type_t) + +Help on function is_type_uint128 in module ida_typeinf: + +is_type_uint128(*args) + is_type_uint128(t) -> bool + + + See 'BTF_UINT128' . + + + @param t (C++: type_t) + +Help on function is_type_uint16 in module ida_typeinf: + +is_type_uint16(*args) + is_type_uint16(t) -> bool + + + See 'BTF_UINT16' . + + + @param t (C++: type_t) + +Help on function is_type_uint32 in module ida_typeinf: + +is_type_uint32(*args) + is_type_uint32(t) -> bool + + + See 'BTF_UINT32' . + + + @param t (C++: type_t) + +Help on function is_type_uint64 in module ida_typeinf: + +is_type_uint64(*args) + is_type_uint64(t) -> bool + + + See 'BTF_UINT64' . + + + @param t (C++: type_t) + +Help on function is_type_union in module ida_typeinf: + +is_type_union(*args) + is_type_union(t) -> bool + + + See 'BTF_UNION' . + + + @param t (C++: type_t) + +Help on function is_type_unknown in module ida_typeinf: + +is_type_unknown(*args) + is_type_unknown(t) -> bool + + + See 'BT_UNKNOWN' . + + + @param t (C++: type_t) + +Help on function is_type_void in module ida_typeinf: + +is_type_void(*args) + is_type_void(t) -> bool + + + See 'BTF_VOID' . + + + @param t (C++: type_t) + +Help on function is_type_volatile in module ida_typeinf: + +is_type_volatile(*args) + is_type_volatile(t) -> bool + + + See 'BTM_VOLATILE' . + + + @param t (C++: type_t) + +Help on function is_typeid_last in module ida_typeinf: + +is_typeid_last(*args) + is_typeid_last(t) -> bool + + + Is the type_t the last byte of type declaration? (there are no + additional bytes after a basic type, see '_BT_LAST_BASIC' ) + + @param t (C++: type_t) + +Help on function is_user_cc in module ida_typeinf: + +is_user_cc(*args) + is_user_cc(cm) -> bool + + + Does the calling convention specify argument locations explicitly? + + + @param cm (C++: cm_t) + +Help on function is_vararg_cc in module ida_typeinf: + +is_vararg_cc(*args) + is_vararg_cc(cm) -> bool + + + Does the calling convention use ellipsis? + + + @param cm (C++: cm_t) + +Help on function lexcompare_tinfo in module ida_typeinf: + +lexcompare_tinfo(*args) + lexcompare_tinfo(t1, t2, arg3) -> int + +Help on function load_til in module ida_typeinf: + +load_til(*args) + load_til(name, tildir=None) -> til_t + + + Load til from a file. Failure to load base tils are reported into + 'errbuf'. They do not prevent loading of the main til. + + @param name: filename of the til. If it's an absolute path, tildir is + ignored. NB: the file extension is forced to .til (C++: + const char *) + @param tildir: directory where to load the til from. NULL means + default til subdirectories. (C++: const char *) + @return: pointer to resulting til, NULL if failed and error message is + in errbuf + +Help on function load_til_header in module ida_typeinf: + +load_til_header(*args) + load_til_header(tildir, name) -> til_t + + + Get human-readable til description. + + + @param tildir (C++: const char *) + @param name (C++: const char *) + +Help on function lower_type in module ida_typeinf: + +lower_type(*args) + lower_type(til, tif, name=None, _helper=None) -> int + + + Lower type. Inspect the type and lower all function subtypes using + lower_func_type().We call the prototypes usually encountered in source + files "high level"They may have implicit arguments, array arguments, + big structure retvals, etcWe introduce explicit arguments (i.e. 'this' + pointer) and call the result"low level prototype". See 'FTI_HIGH' .In + order to improve heuristics for recognition of big structure + retvals,it is recommended to pass a helper that will be used to make + decisions.That helper will be used only for lowering 'tif', and not + for the childrentypes walked through by recursion. + + @param til (C++: til_t *) + @param tif (C++: tinfo_t *) + @param name (C++: const char *) + @param _helper (C++: lowertype_helper_t *) + +Help on class lowertype_helper_t in module ida_typeinf: + +class lowertype_helper_t(__builtin__.object) + | Proxy of C++ lowertype_helper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | func_has_stkframe_hole(self, *args) + | func_has_stkframe_hole(self, candidate, candidate_data) -> bool + | + | get_func_purged_bytes(self, *args) + | get_func_purged_bytes(self, candidate, candidate_data) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_lowertype_helper_t(self) + +Help on function new_til in module ida_typeinf: + +new_til(*args) + new_til(name, desc) -> til_t + + + Initialize a til. + + + @param name (C++: const char *) + @param desc (C++: const char *) + +Help on function next_named_type in module ida_typeinf: + +next_named_type(*args) + next_named_type(ti, name, ntf_flags) -> char const * + + + Enumerate types. Returns mangled names. Never returns anonymous types. + To include it, enumerate types by ordinals. + + @param ti (C++: const til_t *) + @param name (C++: const char *) + @param ntf_flags (C++: int) + +Help on function optimize_argloc in module ida_typeinf: + +optimize_argloc(*args) + optimize_argloc(vloc, size, gaps) -> bool + + + Verify and optimize scattered argloc into simple form. All new arglocs + must be processed by this function. + + @param vloc (C++: argloc_t *) + @param size (C++: int) + @param gaps (C++: const rangeset_t *) + +Help on function pack_idcobj_to_bv in module ida_typeinf: + +pack_idcobj_to_bv(*args) + pack_idcobj_to_bv(obj, tif, bytes, objoff, pio_flags=0) -> error_t + + + Write a typed idc object to the byte vector. Byte vector may be non- + empty, this function will append data to it + + @param obj (C++: const idc_value_t *) + @param tif (C++: const tinfo_t &) + @param bytes (C++: relobj_t *) + @param objoff (C++: void *) + @param pio_flags (C++: int) + +Help on function pack_idcobj_to_idb in module ida_typeinf: + +pack_idcobj_to_idb(*args) + pack_idcobj_to_idb(obj, tif, ea, pio_flags=0) -> error_t + + + Write a typed idc object to the database. + + + @param obj (C++: const idc_value_t *) + @param tif (C++: const tinfo_t &) + @param ea (C++: ea_t) + @param pio_flags (C++: int) + +Help on function pack_object_to_bv in module ida_typeinf: + +pack_object_to_bv(*args) + pack_object_to_bv(py_obj, ti, _type, _fields, base_ea, pio_flags=0) -> PyObject * + + + Packs a typed object to a string + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param base_ea: base ea used to relocate the pointers in the packed object + @param pio_flags: flags used while unpacking + @return: + tuple(0, err_code) on failure + tuple(1, packed_buf) on success + +Help on function pack_object_to_idb in module ida_typeinf: + +pack_object_to_idb(*args) + pack_object_to_idb(py_obj, ti, _type, _fields, ea, pio_flags=0) -> PyObject * + + + Write a typed object to the database. + Raises an exception if wrong parameters were passed or conversion fails + Returns the error_t returned by idaapi.pack_object_to_idb + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param ea: ea to be used while packing + @param pio_flags: flags used while unpacking + +Help on function parse_decl in module ida_typeinf: + +parse_decl(*args) + parse_decl(tif, til, decl, flags) -> str + + + Parse ONE declaration. If the input string contains more than one + declaration, the first complete type declaration ( 'PT_TYP' ) or the + last variable declaration ( 'PT_VAR' ) will be used.name & tif may be + empty after the call! + + @param tif: type info (C++: tinfo_t *) + @param til: type library to use. may be NULL (C++: til_t *) + @param decl: C declaration to parse (C++: const char *) + @param flags: combination of Type parsing flags bits (C++: int) + +Help on function parse_decls in module ida_typeinf: + +parse_decls(*args) + parse_decls(til, input, printer, hti_flags) -> int + + + Parse many declarations and store them in a til. If there are any + errors, they will be printed using 'printer'. This function uses + default include path and predefined macros from the database settings. + It always uses the 'HTI_DCL' bit. + + @param til: type library to store the result (C++: til_t *) + @param input: input string or file name (see hti_flags) (C++: const + char *) + @param printer: function to output error messages (use msg or NULL or + your own callback) (C++: printer_t *) + @param hti_flags: combination of Type formatting flags (C++: int) + @return: number of errors, 0 means ok. + +Help on class predicate_t in module ida_typeinf: + +class predicate_t(__builtin__.object) + | Proxy of C++ predicate_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> predicate_t + | + | __repr__ = _swig_repr(self) + | + | should_display(self, *args) + | should_display(self, til, name, type, fields) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_predicate_t(self) + +Help on function print_argloc in module ida_typeinf: + +print_argloc(*args) + print_argloc(vloc, size=0, vflags=0) -> str + + + Convert an argloc to human readable form. + + + @param vloc (C++: const argloc_t &) + @param size (C++: int) + @param vflags (C++: int) + +Help on function print_decls in module ida_typeinf: + +print_decls(*args) + print_decls(printer, til, py_ordinals, flags) -> PyObject * + + + Print types (and possibly their dependencies) in a format suitable for + use in a header file. This is the reverse 'parse_decls()' . + + @param printer: a handler for printing text (C++: text_sink_t &) + @param til: the type library holding the ordinals (C++: til_t *) + @param flags: flags for the algorithm. A combination of PDF_* + constants (C++: uint32) + +Help on function print_tinfo in module ida_typeinf: + +print_tinfo(*args) + print_tinfo(prefix, indent, cmtindent, flags, tif, name, cmt) -> str + +Help on function print_type in module ida_typeinf: + +print_type(*args) + print_type(ea, prtype_flags) -> str + + + Get type declaration for the specified address. + + @param ea: address (C++: ea_t) + @param prtype_flags: combination of Type printing flags (C++: int) + @return: success + +Help on class ptr_type_data_t in module ida_typeinf: + +class ptr_type_data_t(__builtin__.object) + | Proxy of C++ ptr_type_data_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, c=tinfo_t(), bps=0, p=tinfo_t(), d=0) -> ptr_type_data_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | is_code_ptr(self, *args) + | is_code_ptr(self) -> bool + | + | is_shifted(self, *args) + | is_shifted(self) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | based_ptr_size + | ptr_type_data_t_based_ptr_size_get(self) -> uchar + | + | closure + | ptr_type_data_t_closure_get(self) -> tinfo_t + | + | delta + | ptr_type_data_t_delta_get(self) -> int32 + | + | obj_type + | ptr_type_data_t_obj_type_get(self) -> tinfo_t + | + | parent + | ptr_type_data_t_parent_get(self) -> tinfo_t + | + | taptr_bits + | ptr_type_data_t_taptr_bits_get(self) -> uchar + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_ptr_type_data_t(self) + +Help on function read_tinfo_bitfield_value in module ida_typeinf: + +read_tinfo_bitfield_value(*args) + read_tinfo_bitfield_value(typid, v, bitoff) -> uint64 + +Help on class reginfovec_t in module ida_typeinf: + +class reginfovec_t(__builtin__.object) + | Proxy of C++ qvector< reg_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> reg_info_t + | + | __init__(self, *args) + | __init__(self) -> reginfovec_t + | __init__(self, x) -> reginfovec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> reg_info_t + | begin(self) -> reg_info_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> reg_info_t + | end(self) -> reg_info_t + | + | erase(self, *args) + | erase(self, it) -> reg_info_t + | erase(self, first, last) -> reg_info_t + | + | extract(self, *args) + | extract(self) -> reg_info_t + | + | find(self, *args) + | find(self, x) -> reg_info_t + | find(self, x) -> reg_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=reg_info_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> reg_info_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> reg_info_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_reginfovec_t(self) + +Help on class regobj_t in module ida_typeinf: + +class regobj_t(__builtin__.object) + | Proxy of C++ regobj_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regobj_t + | + | __repr__ = _swig_repr(self) + | + | size(self, *args) + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | regidx + | regobj_t_regidx_get(self) -> int + | + | relocate + | regobj_t_relocate_get(self) -> int + | + | thisown + | The membership flag + | + | value + | regobj_t_value_get(self) -> bytevec_t * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regobj_t(self) + +Help on class regobjs_t in module ida_typeinf: + +class regobjs_t(regobjvec_t) + | Proxy of C++ regobjs_t class. + | + | Method resolution order: + | regobjs_t + | regobjvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regobjs_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regobjs_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from regobjvec_t: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> regobj_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> regobj_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> regobj_t + | begin(self) -> regobj_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> regobj_t + | end(self) -> regobj_t + | + | erase(self, *args) + | erase(self, it) -> regobj_t + | erase(self, first, last) -> regobj_t + | + | extract(self, *args) + | extract(self) -> regobj_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=regobj_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> regobj_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> regobj_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from regobjvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class regobjvec_t in module ida_typeinf: + +class regobjvec_t(__builtin__.object) + | Proxy of C++ qvector< regobj_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> regobj_t + | + | __init__(self, *args) + | __init__(self) -> regobjvec_t + | __init__(self, x) -> regobjvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> regobj_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> regobj_t + | begin(self) -> regobj_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> regobj_t + | end(self) -> regobj_t + | + | erase(self, *args) + | erase(self, it) -> regobj_t + | erase(self, first, last) -> regobj_t + | + | extract(self, *args) + | extract(self) -> regobj_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=regobj_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> regobj_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> regobj_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_regobjvec_t(self) + +Help on function remove_abi_opts in module ida_typeinf: + +remove_abi_opts(*args) + remove_abi_opts(abi_opts, user_level=False) -> bool + +Help on function remove_pointer in module ida_typeinf: + +remove_pointer(*args) + remove_pointer(tif) -> tinfo_t + + + 'BT_PTR' : If the current type is a pointer, return the pointed + object. If the current type is not a pointer, return the current type. + See also get_ptrarr_object() and get_pointed_object() + + @param tif (C++: const tinfo_t &) + +Help on function remove_tinfo_pointer in module ida_typeinf: + +remove_tinfo_pointer(*args) + remove_tinfo_pointer(tif, name, til) -> PyObject * + + + Remove pointer of a type. (i.e. convert "char *" into "char"). + Optionally remove the "lp" (or similar) prefix of the input name. If + the input type is not a pointer, then fail. + + @param tif (C++: tinfo_t *) + @param til (C++: const til_t *) + +Help on function replace_ordinal_typerefs in module ida_typeinf: + +replace_ordinal_typerefs(*args) + replace_ordinal_typerefs(til, tif) -> int + + + Replace references to ordinal types by name references. This function + 'unties' the type from the current local type library and makes it + easier to export it. + + @param til: type library to use. may be NULL. (C++: til_t *) + @param tif: type to modify (in/out) (C++: tinfo_t *) + +Help on function resolve_typedef in module ida_typeinf: + +resolve_typedef(*args) + resolve_typedef(til, type) -> type_t const * + +Help on class rrel_t in module ida_typeinf: + +class rrel_t(__builtin__.object) + | Proxy of C++ rrel_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rrel_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | rrel_t_off_get(self) -> sval_t + | + | reg + | rrel_t_reg_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_rrel_t(self) + +Help on function save_tinfo in module ida_typeinf: + +save_tinfo(*args) + save_tinfo(tif, til, ord, name, ntf_flags) -> tinfo_code_t + +Help on class scattered_aloc_t in module ida_typeinf: + +class scattered_aloc_t(argpartvec_t) + | Proxy of C++ scattered_aloc_t class. + | + | Method resolution order: + | scattered_aloc_t + | argpartvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> scattered_aloc_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_scattered_aloc_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from argpartvec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> argpart_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> argpart_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> argpart_t + | begin(self) -> argpart_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> argpart_t + | end(self) -> argpart_t + | + | erase(self, *args) + | erase(self, it) -> argpart_t + | erase(self, first, last) -> argpart_t + | + | extract(self, *args) + | extract(self) -> argpart_t + | + | find(self, *args) + | find(self, x) -> argpart_t + | find(self, x) -> argpart_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=argpart_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> argpart_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> argpart_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from argpartvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function score_tinfo in module ida_typeinf: + +score_tinfo(*args) + score_tinfo(tif) -> uint32 + +Help on function serialize_tinfo in module ida_typeinf: + +serialize_tinfo(*args) + serialize_tinfo(type, fields, fldcmts, tif, sudt_flags) -> bool + +Help on function set_abi_name in module ida_typeinf: + +set_abi_name(*args) + set_abi_name(abiname, user_level=False) -> bool + + + Set abi name (see 'Compiler IDs' ) + + + @param abiname (C++: const char *) + @param user_level (C++: bool) + +Help on function set_c_header_path in module ida_typeinf: + +set_c_header_path(*args) + set_c_header_path(incdir) + + + Set include directory path the target compiler. + + + @param incdir (C++: const char *) + +Help on function set_c_macros in module ida_typeinf: + +set_c_macros(*args) + set_c_macros(macros) + + + Set predefined macros for the target compiler. + + + @param macros (C++: const char *) + +Help on function set_compiler in module ida_typeinf: + +set_compiler(*args) + set_compiler(cc, flags, abiname=None) -> bool + + + Change current compiler. + + @param cc: compiler to switch to (C++: const compiler_info_t &) + @param flags: Set compiler flags (C++: int) + @param abiname: ABI name (C++: const char *) + @return: success + +Help on function set_compiler_id in module ida_typeinf: + +set_compiler_id(*args) + set_compiler_id(id, abiname=None) -> bool + + + Set the compiler id (see 'Compiler IDs' ) + + + @param id (C++: comp_t) + @param abiname (C++: const char *) + +Help on function set_compiler_string in module ida_typeinf: + +set_compiler_string(*args) + set_compiler_string(compstr, user_level) -> bool + +Help on function set_numbered_type in module ida_typeinf: + +set_numbered_type(*args) + set_numbered_type(ti, ordinal, ntf_flags, name, type, fields=None, cmt=None, fldcmts=None, sclass=None) -> tinfo_code_t + + + Store a type in the til. 'name' may be NULL for anonymous types. The + specified ordinal must be free (no other type is using it). For + ntf_flags, only 'NTF_REPLACE' is consulted. + + @param ti (C++: til_t *) + @param ordinal (C++: uint32) + @param ntf_flags (C++: int) + @param name (C++: const char *) + @param type (C++: const type_t *) + @param fields (C++: const p_list *) + @param cmt (C++: const char *) + @param fldcmts (C++: const p_list *) + @param sclass (C++: const sclass_t *) + +Help on function set_tinfo_attr in module ida_typeinf: + +set_tinfo_attr(*args) + set_tinfo_attr(tif, ta, may_overwrite) -> bool + +Help on function set_tinfo_attrs in module ida_typeinf: + +set_tinfo_attrs(*args) + set_tinfo_attrs(tif, ta) -> bool + +Help on function set_tinfo_property in module ida_typeinf: + +set_tinfo_property(*args) + set_tinfo_property(tif, sta_prop, x) -> size_t + +Help on function set_type_alias in module ida_typeinf: + +set_type_alias(*args) + set_type_alias(ti, src_ordinal, dst_ordinal) -> bool + + + Create a type alias. Redirects all references to source type to the + destination type. This is equivalent to instantaneous replacement all + reference to srctype by dsttype. + + @param ti (C++: til_t *) + @param src_ordinal (C++: uint32) + @param dst_ordinal (C++: uint32) + +Help on class simd_info_t in module ida_typeinf: + +class simd_info_t(__builtin__.object) + | Proxy of C++ simd_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, nm=None, sz=0, memt=BTF_UNK) -> simd_info_t + | + | __repr__ = _swig_repr(self) + | + | match_pattern(self, *args) + | match_pattern(self, pattern) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | memtype + | simd_info_t_memtype_get(self) -> type_t + | + | name + | simd_info_t_name_get(self) -> char const * + | + | size + | simd_info_t_size_get(self) -> uint16 + | + | thisown + | The membership flag + | + | tif + | simd_info_t_tif_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_simd_info_t(self) + +Help on function store_til in module ida_typeinf: + +store_til(*args) + store_til(ti, tildir, name) -> bool + + + Store til to a file. If the til contains garbage, it will be collected + before storing the til. Your plugin should call 'compact_til()' before + calling 'store_til()' . + + @param ti: type library to store (C++: til_t *) + @param tildir: directory where to store the til. NULL means current + directory. (C++: const char *) + @param name: filename of the til. If it's an absolute path, tildir is + ignored. NB: the file extension is forced to .til (C++: + const char *) + @return: success + +Help on class text_sink_t in module ida_typeinf: + +class text_sink_t(__builtin__.object) + | Proxy of C++ text_sink_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> text_sink_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) + | _print(self, str) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_text_sink_t(self) + +Help on class til_symbol_t in module ida_typeinf: + +class til_symbol_t(__builtin__.object) + | Proxy of C++ til_symbol_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=None, t=None) -> til_symbol_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | til_symbol_t_name_get(self) -> char const * + | + | thisown + | The membership flag + | + | til + | til_symbol_t_til_get(self) -> til_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_til_symbol_t(self) + +Help on class til_t in module ida_typeinf: + +class til_t(__builtin__.object) + | Proxy of C++ til_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> til_t + | + | __repr__ = _swig_repr(self) + | + | base(self, *args) + | base(self, n) -> til_t + | + | is_dirty(self, *args) + | is_dirty(self) -> bool + | + | set_dirty(self, *args) + | set_dirty(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cc + | til_t_cc_get(self) -> compiler_info_t + | + | desc + | til_t_desc_get(self) -> char * + | + | flags + | til_t_flags_get(self) -> uint32 + | + | name + | til_t_name_get(self) -> char * + | + | nbases + | til_t_nbases_get(self) -> int + | + | nrefs + | til_t_nrefs_get(self) -> int + | + | nstreams + | til_t_nstreams_get(self) -> int + | + | streams + | til_t_streams_get(self) -> til_stream_t ** + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_til_t(self) + +Help on class tinfo_t in module ida_typeinf: + +class tinfo_t(__builtin__.object) + | Proxy of C++ tinfo_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __gt__(self, *args) + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> tinfo_t + | __init__(self, decl_type) -> tinfo_t + | __init__(self, r) -> tinfo_t + | + | __le__(self, *args) + | __le__(self, r) -> bool + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) + | __str__(self) -> qstring + | + | _print(self, *args) + | _print(self, name=None, prtype_flags=0, indent=0, cmtindent=0, prefix=None, cmt=None) -> bool + | + | append_covered(self, *args) + | append_covered(self, out, offset=0) -> bool + | + | calc_gaps(self, *args) + | calc_gaps(self, out) -> bool + | + | calc_purged_bytes(self, *args) + | calc_purged_bytes(self) -> int + | + | calc_score(self, *args) + | calc_score(self) -> uint32 + | + | calc_udt_aligns(self, *args) + | calc_udt_aligns(self, sudt_flags=0x0004) -> bool + | + | change_sign(self, *args) + | change_sign(self, sign) -> bool + | + | clear(self, *args) + | clear(self) + | + | clr_const(self, *args) + | clr_const(self) + | + | clr_const_volatile(self, *args) + | clr_const_volatile(self) + | + | clr_volatile(self, *args) + | clr_volatile(self) + | + | compare(self, *args) + | compare(self, r) -> int + | + | compare_with(self, *args) + | compare_with(self, r, tcflags=0) -> bool + | + | convert_array_to_ptr(self, *args) + | convert_array_to_ptr(self) -> bool + | + | copy(self, *args) + | copy(self) -> tinfo_t + | + | create_array(self, *args) + | create_array(self, p, decl_type=BT_ARRAY) -> bool + | create_array(self, tif, nelems=0, base=0, decl_type=BT_ARRAY) -> bool + | + | create_bitfield(self, *args) + | create_bitfield(self, p, decl_type=BT_BITFIELD) -> bool + | create_bitfield(self, nbytes, width, is_unsigned=False, decl_type=BT_BITFIELD) -> bool + | + | create_enum(self, *args) + | create_enum(self, p, decl_type=BTF_ENUM) -> bool + | + | create_forward_decl(self, *args) + | create_forward_decl(self, til, decl_type, name, ntf_flags=0) -> tinfo_code_t + | + | create_func(self, *args) + | create_func(self, p, decl_type=BT_FUNC) -> bool + | + | create_ptr(self, *args) + | create_ptr(self, p, decl_type=BT_PTR) -> bool + | create_ptr(self, tif, bps=0, decl_type=BT_PTR) -> bool + | + | create_simple_type(self, *args) + | create_simple_type(self, decl_type) -> bool + | + | create_typedef(self, *args) + | create_typedef(self, p, decl_type=BTF_TYPEDEF, try_ordinal=True) -> bool + | create_typedef(self, til, name, decl_type=BTF_TYPEDEF, try_ordinal=True) + | create_typedef(self, til, ord, decl_type=BTF_TYPEDEF) + | + | create_udt(self, *args) + | create_udt(self, p, decl_type) -> bool + | + | del_attr(self, *args) + | del_attr(self, key, make_copy=True) -> bool + | + | del_attrs(self, *args) + | del_attrs(self) + | + | deserialize(self, *args) + | deserialize(self, til, ptype, pfields=None, pfldcmts=None) -> bool + | deserialize(self, til, type, fields, cmts=None) -> bool + | + | dstr(self, *args) + | dstr(self) -> char const * + | + | empty(self, *args) + | empty(self) -> bool + | + | equals_to(self, *args) + | equals_to(self, r) -> bool + | + | find_udt_member(self, *args) + | find_udt_member(self, udm, strmem_flags) -> int + | + | get_array_details(self, *args) + | get_array_details(self, ai) -> bool + | + | get_array_element(self, *args) + | get_array_element(self) -> tinfo_t + | + | get_array_nelems(self, *args) + | get_array_nelems(self) -> int + | + | get_attr(self, *args) + | get_attr(self, key, all_attrs=True) -> PyObject * + | + | get_attrs(self, *args) + | get_attrs(self, tav, all_attrs=False) -> bool + | + | get_bitfield_details(self, *args) + | get_bitfield_details(self, bi) -> bool + | + | get_declalign(self, *args) + | get_declalign(self) -> uchar + | + | get_decltype(self, *args) + | get_decltype(self) -> type_t + | + | get_enum_base_type(self, *args) + | get_enum_base_type(self) -> type_t + | + | get_enum_details(self, *args) + | get_enum_details(self, ei) -> bool + | + | get_final_ordinal(self, *args) + | get_final_ordinal(self) -> uint32 + | + | get_final_type_name(self, *args) + | get_final_type_name(self) -> bool + | + | get_func_details(self, *args) + | get_func_details(self, fi, gtd=GTD_CALC_ARGLOCS) -> bool + | + | get_modifiers(self, *args) + | get_modifiers(self) -> type_t + | + | get_named_type(self, *args) + | get_named_type(self, til, name, decl_type=BTF_TYPEDEF, resolve=True, try_ordinal=True) -> bool + | + | get_nargs(self, *args) + | get_nargs(self) -> int + | + | get_next_type_name(self, *args) + | get_next_type_name(self) -> bool + | + | get_nth_arg(self, *args) + | get_nth_arg(self, n) -> tinfo_t + | + | get_numbered_type(self, *args) + | get_numbered_type(self, til, ordinal, decl_type=BTF_TYPEDEF, resolve=True) -> bool + | + | get_onemember_type(self, *args) + | get_onemember_type(self) -> tinfo_t + | + | get_ordinal(self, *args) + | get_ordinal(self) -> uint32 + | + | get_pointed_object(self, *args) + | get_pointed_object(self) -> tinfo_t + | + | get_ptr_details(self, *args) + | get_ptr_details(self, pi) -> bool + | + | get_ptrarr_object(self, *args) + | get_ptrarr_object(self) -> tinfo_t + | + | get_ptrarr_objsize(self, *args) + | get_ptrarr_objsize(self) -> int + | + | get_realtype(self, *args) + | get_realtype(self, full=False) -> type_t + | + | get_rettype(self, *args) + | get_rettype(self) -> tinfo_t + | + | get_sign(self, *args) + | get_sign(self) -> type_sign_t + | + | get_size(self, *args) + | get_size(self, p_effalign=None, gts_code=0) -> size_t + | + | get_til(self, *args) + | get_til(self) -> til_t + | + | get_type_name(self, *args) + | get_type_name(self) -> bool + | + | get_udt_details(self, *args) + | get_udt_details(self, udt, gtd=GTD_CALC_LAYOUT) -> bool + | + | get_udt_nmembers(self, *args) + | get_udt_nmembers(self) -> int + | + | get_unpadded_size(self, *args) + | get_unpadded_size(self) -> size_t + | + | has_details(self, *args) + | has_details(self) -> bool + | + | has_vftable(self, *args) + | has_vftable(self) -> bool + | + | is_anonymous_udt(self, *args) + | is_anonymous_udt(self) -> bool + | + | is_arithmetic(self, *args) + | is_arithmetic(self) -> bool + | + | is_array(self, *args) + | is_array(self) -> bool + | + | is_bitfield(self, *args) + | is_bitfield(self) -> bool + | + | is_bool(self, *args) + | is_bool(self) -> bool + | + | is_castable_to(self, *args) + | is_castable_to(self, target) -> bool + | + | is_char(self, *args) + | is_char(self) -> bool + | + | is_complex(self, *args) + | is_complex(self) -> bool + | + | is_const(self, *args) + | is_const(self) -> bool + | + | is_correct(self, *args) + | is_correct(self) -> bool + | + | is_decl_array(self, *args) + | is_decl_array(self) -> bool + | + | is_decl_bitfield(self, *args) + | is_decl_bitfield(self) -> bool + | + | is_decl_bool(self, *args) + | is_decl_bool(self) -> bool + | + | is_decl_char(self, *args) + | is_decl_char(self) -> bool + | + | is_decl_complex(self, *args) + | is_decl_complex(self) -> bool + | + | is_decl_const(self, *args) + | is_decl_const(self) -> bool + | + | is_decl_double(self, *args) + | is_decl_double(self) -> bool + | + | is_decl_enum(self, *args) + | is_decl_enum(self) -> bool + | + | is_decl_float(self, *args) + | is_decl_float(self) -> bool + | + | is_decl_floating(self, *args) + | is_decl_floating(self) -> bool + | + | is_decl_func(self, *args) + | is_decl_func(self) -> bool + | + | is_decl_int(self, *args) + | is_decl_int(self) -> bool + | + | is_decl_int128(self, *args) + | is_decl_int128(self) -> bool + | + | is_decl_int16(self, *args) + | is_decl_int16(self) -> bool + | + | is_decl_int32(self, *args) + | is_decl_int32(self) -> bool + | + | is_decl_int64(self, *args) + | is_decl_int64(self) -> bool + | + | is_decl_last(self, *args) + | is_decl_last(self) -> bool + | + | is_decl_ldouble(self, *args) + | is_decl_ldouble(self) -> bool + | + | is_decl_paf(self, *args) + | is_decl_paf(self) -> bool + | + | is_decl_partial(self, *args) + | is_decl_partial(self) -> bool + | + | is_decl_ptr(self, *args) + | is_decl_ptr(self) -> bool + | + | is_decl_struct(self, *args) + | is_decl_struct(self) -> bool + | + | is_decl_sue(self, *args) + | is_decl_sue(self) -> bool + | + | is_decl_tbyte(self, *args) + | is_decl_tbyte(self) -> bool + | + | is_decl_typedef(self, *args) + | is_decl_typedef(self) -> bool + | + | is_decl_uchar(self, *args) + | is_decl_uchar(self) -> bool + | + | is_decl_udt(self, *args) + | is_decl_udt(self) -> bool + | + | is_decl_uint(self, *args) + | is_decl_uint(self) -> bool + | + | is_decl_uint128(self, *args) + | is_decl_uint128(self) -> bool + | + | is_decl_uint16(self, *args) + | is_decl_uint16(self) -> bool + | + | is_decl_uint32(self, *args) + | is_decl_uint32(self) -> bool + | + | is_decl_uint64(self, *args) + | is_decl_uint64(self) -> bool + | + | is_decl_union(self, *args) + | is_decl_union(self) -> bool + | + | is_decl_unknown(self, *args) + | is_decl_unknown(self) -> bool + | + | is_decl_void(self, *args) + | is_decl_void(self) -> bool + | + | is_decl_volatile(self, *args) + | is_decl_volatile(self) -> bool + | + | is_double(self, *args) + | is_double(self) -> bool + | + | is_empty_udt(self, *args) + | is_empty_udt(self) -> bool + | + | is_enum(self, *args) + | is_enum(self) -> bool + | + | is_ext_arithmetic(self, *args) + | is_ext_arithmetic(self) -> bool + | + | is_ext_integral(self, *args) + | is_ext_integral(self) -> bool + | + | is_float(self, *args) + | is_float(self) -> bool + | + | is_floating(self, *args) + | is_floating(self) -> bool + | + | is_forward_decl(self, *args) + | is_forward_decl(self) -> bool + | + | is_from_subtil(self, *args) + | is_from_subtil(self) -> bool + | + | is_func(self, *args) + | is_func(self) -> bool + | + | is_funcptr(self, *args) + | is_funcptr(self) -> bool + | + | is_high_func(self, *args) + | is_high_func(self) -> bool + | + | is_int(self, *args) + | is_int(self) -> bool + | + | is_int128(self, *args) + | is_int128(self) -> bool + | + | is_int16(self, *args) + | is_int16(self) -> bool + | + | is_int32(self, *args) + | is_int32(self) -> bool + | + | is_int64(self, *args) + | is_int64(self) -> bool + | + | is_integral(self, *args) + | is_integral(self) -> bool + | + | is_ldouble(self, *args) + | is_ldouble(self) -> bool + | + | is_manually_castable_to(self, *args) + | is_manually_castable_to(self, target) -> bool + | + | is_one_fpval(self, *args) + | is_one_fpval(self) -> bool + | + | is_paf(self, *args) + | is_paf(self) -> bool + | + | is_partial(self, *args) + | is_partial(self) -> bool + | + | is_ptr(self, *args) + | is_ptr(self) -> bool + | + | is_ptr_or_array(self, *args) + | is_ptr_or_array(self) -> bool + | + | is_purging_cc(self, *args) + | is_purging_cc(self) -> bool + | + | is_pvoid(self, *args) + | is_pvoid(self) -> bool + | + | is_scalar(self, *args) + | is_scalar(self) -> bool + | + | is_shifted_ptr(self, *args) + | is_shifted_ptr(self) -> bool + | + | is_signed(self, *args) + | is_signed(self) -> bool + | + | is_small_udt(self, *args) + | is_small_udt(self) -> bool + | + | is_sse_type(self, *args) + | is_sse_type(self) -> bool + | + | is_struct(self, *args) + | is_struct(self) -> bool + | + | is_sue(self, *args) + | is_sue(self) -> bool + | + | is_tbyte(self, *args) + | is_tbyte(self) -> bool + | + | is_typeref(self, *args) + | is_typeref(self) -> bool + | + | is_uchar(self, *args) + | is_uchar(self) -> bool + | + | is_udt(self, *args) + | is_udt(self) -> bool + | + | is_uint(self, *args) + | is_uint(self) -> bool + | + | is_uint128(self, *args) + | is_uint128(self) -> bool + | + | is_uint16(self, *args) + | is_uint16(self) -> bool + | + | is_uint32(self, *args) + | is_uint32(self) -> bool + | + | is_uint64(self, *args) + | is_uint64(self) -> bool + | + | is_union(self, *args) + | is_union(self) -> bool + | + | is_unknown(self, *args) + | is_unknown(self) -> bool + | + | is_unsigned(self, *args) + | is_unsigned(self) -> bool + | + | is_user_cc(self, *args) + | is_user_cc(self) -> bool + | + | is_vararg_cc(self, *args) + | is_vararg_cc(self) -> bool + | + | is_varstruct(self, *args) + | is_varstruct(self) -> bool + | + | is_vftable(self, *args) + | is_vftable(self) -> bool + | + | is_void(self, *args) + | is_void(self) -> bool + | + | is_volatile(self, *args) + | is_volatile(self) -> bool + | + | is_well_defined(self, *args) + | is_well_defined(self) -> bool + | + | present(self, *args) + | present(self) -> bool + | + | read_bitfield_value(self, *args) + | read_bitfield_value(self, v, bitoff) -> uint64 + | + | remove_ptr_or_array(self, *args) + | remove_ptr_or_array(self) -> bool + | + | requires_qualifier(self, *args) + | requires_qualifier(self, name, offset) -> bool + | + | serialize(self, *args) + | serialize(self, sudt_flags=SUDT_FAST|SUDT_TRUNC) -> PyObject * + | + | set_attr(self, *args) + | set_attr(self, ta, may_overwrite=True) -> bool + | + | set_attrs(self, *args) + | set_attrs(self, tav) -> bool + | + | set_const(self, *args) + | set_const(self) + | + | set_declalign(self, *args) + | set_declalign(self, declalign) -> bool + | + | set_modifiers(self, *args) + | set_modifiers(self, mod) + | + | set_named_type(self, *args) + | set_named_type(self, til, name, ntf_flags=0) -> tinfo_code_t + | + | set_numbered_type(self, *args) + | set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t + | + | set_symbol_type(self, *args) + | set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t + | + | set_volatile(self, *args) + | set_volatile(self) + | + | swap(self, *args) + | swap(self, r) + | + | write_bitfield_value(self, *args) + | write_bitfield_value(self, dst, v, bitoff) -> uint64 + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | get_stock(*args) + | get_stock(id) -> tinfo_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tinfo_t(self) + +Help on function tinfo_t_get_stock in module ida_typeinf: + +tinfo_t_get_stock(*args) + tinfo_t_get_stock(id) -> tinfo_t + +Help on class tinfo_visitor_t in module ida_typeinf: + +class tinfo_visitor_t(__builtin__.object) + | Proxy of C++ tinfo_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, s=0) -> tinfo_visitor_t + | + | __repr__ = _swig_repr(self) + | + | apply_to(self, *args) + | apply_to(self, tif, out=None, name=None, cmt=None) -> int + | + | prune_now(self, *args) + | prune_now(self) + | + | visit_type(self, *args) + | visit_type(self, out, tif, name, cmt) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | state + | tinfo_visitor_t_state_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_tinfo_visitor_t(self) + +Help on class type_attr_t in module ida_typeinf: + +class type_attr_t(__builtin__.object) + | Proxy of C++ type_attr_t class. + | + | Methods defined here: + | + | __ge__(self, *args) + | __ge__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> type_attr_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | key + | type_attr_t_key_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | type_attr_t_value_get(self) -> bytevec_t * + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_type_attr_t(self) + +Help on class type_attrs_t in module ida_typeinf: + +class type_attrs_t(__builtin__.object) + | Proxy of C++ qvector< type_attr_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> type_attr_t + | + | __init__(self, *args) + | __init__(self) -> type_attrs_t + | __init__(self, x) -> type_attrs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> type_attr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> type_attr_t + | begin(self) -> type_attr_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> type_attr_t + | end(self) -> type_attr_t + | + | erase(self, *args) + | erase(self, it) -> type_attr_t + | erase(self, first, last) -> type_attr_t + | + | extract(self, *args) + | extract(self) -> type_attr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=type_attr_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> type_attr_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> type_attr_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_type_attrs_t(self) + +Help on class type_mods_t in module ida_typeinf: + +class type_mods_t(__builtin__.object) + | Proxy of C++ type_mods_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> type_mods_t + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) + | clear(self) + | + | has_cmt(self, *args) + | has_cmt(self) -> bool + | + | has_info(self, *args) + | has_info(self) -> bool + | + | has_name(self, *args) + | has_name(self) -> bool + | + | has_type(self, *args) + | has_type(self) -> bool + | + | set_new_cmt(self, *args) + | set_new_cmt(self, c) + | + | set_new_name(self, *args) + | set_new_name(self, n) + | + | set_new_type(self, *args) + | set_new_type(self, t) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | type_mods_t_cmt_get(self) -> qstring * + | + | flags + | type_mods_t_flags_get(self) -> int + | + | name + | type_mods_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | type_mods_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_type_mods_t(self) + +Help on class typedef_type_data_t in module ida_typeinf: + +class typedef_type_data_t(__builtin__.object) + | Proxy of C++ typedef_type_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _til, _name, _resolve=False) -> typedef_type_data_t + | __init__(self, _til, ord, _resolve=False) -> typedef_type_data_t + | + | __repr__ = _swig_repr(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | is_ordref + | typedef_type_data_t_is_ordref_get(self) -> bool + | + | resolve + | typedef_type_data_t_resolve_get(self) -> bool + | + | thisown + | The membership flag + | + | til + | typedef_type_data_t_til_get(self) -> til_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_typedef_type_data_t(self) + +Help on class udt_member_t in module ida_typeinf: + +class udt_member_t(__builtin__.object) + | Proxy of C++ udt_member_t class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> udt_member_t + | + | __lt__(self, *args) + | __lt__(self, r) -> bool + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | begin(self, *args) + | begin(self) -> uint64 + | + | clr_baseclass(self, *args) + | clr_baseclass(self) + | + | clr_unaligned(self, *args) + | clr_unaligned(self) + | + | clr_vftable(self, *args) + | clr_vftable(self) + | + | clr_virtbase(self, *args) + | clr_virtbase(self) + | + | end(self, *args) + | end(self) -> uint64 + | + | is_anonymous_udm(self, *args) + | is_anonymous_udm(self) -> bool + | + | is_baseclass(self, *args) + | is_baseclass(self) -> bool + | + | is_bitfield(self, *args) + | is_bitfield(self) -> bool + | + | is_unaligned(self, *args) + | is_unaligned(self) -> bool + | + | is_vftable(self, *args) + | is_vftable(self) -> bool + | + | is_virtbase(self, *args) + | is_virtbase(self) -> bool + | + | is_zero_bitfield(self, *args) + | is_zero_bitfield(self) -> bool + | + | set_baseclass(self, *args) + | set_baseclass(self) + | + | set_unaligned(self, *args) + | set_unaligned(self) + | + | set_vftable(self, *args) + | set_vftable(self) + | + | set_virtbase(self, *args) + | set_virtbase(self) + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | udt_member_t_cmt_get(self) -> qstring * + | + | effalign + | udt_member_t_effalign_get(self) -> int + | + | fda + | udt_member_t_fda_get(self) -> uchar + | + | name + | udt_member_t_name_get(self) -> qstring * + | + | offset + | udt_member_t_offset_get(self) -> uint64 + | + | size + | udt_member_t_size_get(self) -> uint64 + | + | tafld_bits + | udt_member_t_tafld_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | type + | udt_member_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udt_member_t(self) + +Help on class udt_type_data_t in module ida_typeinf: + +class udt_type_data_t(udtmembervec_t) + | Proxy of C++ udt_type_data_t class. + | + | Method resolution order: + | udt_type_data_t + | udtmembervec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> udt_type_data_t + | + | __repr__ = _swig_repr(self) + | + | is_cppobj(self, *args) + | is_cppobj(self) -> bool + | + | is_last_baseclass(self, *args) + | is_last_baseclass(self, idx) -> bool + | + | is_msstruct(self, *args) + | is_msstruct(self) -> bool + | + | is_unaligned(self, *args) + | is_unaligned(self) -> bool + | + | is_vftable(self, *args) + | is_vftable(self) -> bool + | + | swap(self, *args) + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | effalign + | udt_type_data_t_effalign_get(self) -> uint32 + | + | is_union + | udt_type_data_t_is_union_get(self) -> bool + | + | pack + | udt_type_data_t_pack_get(self) -> uchar + | + | sda + | udt_type_data_t_sda_get(self) -> uchar + | + | taudt_bits + | udt_type_data_t_taudt_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | total_size + | udt_type_data_t_total_size_get(self) -> size_t + | + | unpadded_size + | udt_type_data_t_unpadded_size_get(self) -> size_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udt_type_data_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from udtmembervec_t: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> udt_member_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> udt_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> udt_member_t + | begin(self) -> udt_member_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> udt_member_t + | end(self) -> udt_member_t + | + | erase(self, *args) + | erase(self, it) -> udt_member_t + | erase(self, first, last) -> udt_member_t + | + | extract(self, *args) + | extract(self) -> udt_member_t + | + | find(self, *args) + | find(self, x) -> udt_member_t + | find(self, x) -> udt_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=udt_member_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> udt_member_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> udt_member_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from udtmembervec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class udtmembervec_t in module ida_typeinf: + +class udtmembervec_t(__builtin__.object) + | Proxy of C++ qvector< udt_member_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> udt_member_t + | + | __init__(self, *args) + | __init__(self) -> udtmembervec_t + | __init__(self, x) -> udtmembervec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | at(self, *args) + | at(self, _idx) -> udt_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> udt_member_t + | begin(self) -> udt_member_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> udt_member_t + | end(self) -> udt_member_t + | + | erase(self, *args) + | erase(self, it) -> udt_member_t + | erase(self, first, last) -> udt_member_t + | + | extract(self, *args) + | extract(self) -> udt_member_t + | + | find(self, *args) + | find(self, x) -> udt_member_t + | find(self, x) -> udt_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=udt_member_t()) + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> udt_member_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> udt_member_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_udtmembervec_t(self) + +Help on function unpack_idcobj_from_bv in module ida_typeinf: + +unpack_idcobj_from_bv(*args) + unpack_idcobj_from_bv(obj, tif, bytes, pio_flags=0) -> error_t + + + Read a typed idc object from the byte vector. + + + @param obj (C++: idc_value_t *) + @param tif (C++: const tinfo_t &) + @param bytes (C++: const bytevec_t &) + @param pio_flags (C++: int) + +Help on function unpack_idcobj_from_idb in module ida_typeinf: + +unpack_idcobj_from_idb(*args) + unpack_idcobj_from_idb(obj, tif, ea, off0, pio_flags=0) -> error_t + + + Collection of register objects. + + Read a typed idc object from the database + + @param obj (C++: idc_value_t *) + @param tif (C++: const tinfo_t &) + @param ea (C++: ea_t) + @param off0 (C++: const bytevec_t *) + @param pio_flags (C++: int) + +Help on function unpack_object_from_bv in module ida_typeinf: + +unpack_object_from_bv(*args) + unpack_object_from_bv(ti, _type, _fields, bytes, pio_flags=0) -> PyObject * + + + Unpacks a buffer into an object. + Returns the error_t returned by idaapi.pack_object_to_idb + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param bytes: the bytes to unpack + @param pio_flags: flags used while unpacking + @return: + - tuple(0, err) on failure + - tuple(1, obj) on success + +Help on function unpack_object_from_idb in module ida_typeinf: + +unpack_object_from_idb(*args) + unpack_object_from_idb(ti, _type, _fields, ea, pio_flags=0) -> PyObject * + +Help on class valstr_t in module ida_typeinf: + +class valstr_t(__builtin__.object) + | Proxy of C++ valstr_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> valstr_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | info + | valstr_t_info_get(self) -> valinfo_t * + | + | length + | valstr_t_length_get(self) -> size_t + | + | members + | valstr_t_members_get(self) -> valstrs_t + | + | oneline + | valstr_t_oneline_get(self) -> qstring * + | + | props + | valstr_t_props_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_valstr_t(self) + +Help on class valstrs_t in module ida_typeinf: + +class valstrs_t(valstrvec_t) + | Proxy of C++ valstrs_t class. + | + | Method resolution order: + | valstrs_t + | valstrvec_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> valstrs_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_valstrs_t(self) + | + | ---------------------------------------------------------------------- + | Methods inherited from valstrvec_t: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> valstr_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> valstr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> valstr_t + | begin(self) -> valstr_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> valstr_t + | end(self) -> valstr_t + | + | erase(self, *args) + | erase(self, it) -> valstr_t + | erase(self, first, last) -> valstr_t + | + | extract(self, *args) + | extract(self) -> valstr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=valstr_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> valstr_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> valstr_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from valstrvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class valstrvec_t in module ida_typeinf: + +class valstrvec_t(__builtin__.object) + | Proxy of C++ qvector< valstr_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> valstr_t + | + | __init__(self, *args) + | __init__(self) -> valstrvec_t + | __init__(self, x) -> valstrvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | at(self, *args) + | at(self, _idx) -> valstr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> valstr_t + | begin(self) -> valstr_t + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> valstr_t + | end(self) -> valstr_t + | + | erase(self, *args) + | erase(self, it) -> valstr_t + | erase(self, first, last) -> valstr_t + | + | extract(self, *args) + | extract(self) -> valstr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=valstr_t()) + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> valstr_t + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> valstr_t + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_valstrvec_t(self) + +Help on function verify_argloc in module ida_typeinf: + +verify_argloc(*args) + verify_argloc(vloc, size, gaps) -> int + + + Verify 'argloc_t' . + + @param vloc (C++: const argloc_t &) + @param size: total size of the variable (C++: int) + @param gaps: if not NULL, specifies gaps in structure definition. + these gaps should not map to any argloc, but everything + else must be covered (C++: const rangeset_t *) + @return: 0 if ok, otherwise an interr code. + +Help on function verify_tinfo in module ida_typeinf: + +verify_tinfo(*args) + verify_tinfo(typid) -> int + +Help on function visit_subtypes in module ida_typeinf: + +visit_subtypes(*args) + visit_subtypes(visitor, out, tif, name, cmt) -> int + +Help on function write_tinfo_bitfield_value in module ida_typeinf: + +write_tinfo_bitfield_value(*args) + write_tinfo_bitfield_value(typid, dst, v, bitoff) -> uint64 + +=== ida_typeinf EPYDOC INJECTIONS === +ida_typeinf.ADDTIL_ABORTED +""" +til was not loaded (incompatible til rejected by user) +""" + +ida_typeinf.ADDTIL_COMP +""" +ok, but til is not compatible with the current compiler +""" + +ida_typeinf.ADDTIL_DEFAULT +""" +default behavior +""" + +ida_typeinf.ADDTIL_FAILED +""" +something bad, the warning is displayed +""" + +ida_typeinf.ADDTIL_INCOMP +""" +load incompatible tils +""" + +ida_typeinf.ADDTIL_OK +""" +ok, til is loaded +""" + +ida_typeinf.ADDTIL_SILENT +""" +do not ask any questions +""" + +ida_typeinf.CC_ALLOW_ARGPERM +""" +disregard argument order? +""" + +ida_typeinf.CC_ALLOW_REGHOLES +""" +allow holes in register argument list? +""" + +ida_typeinf.CC_CDECL_OK +""" +can use __cdecl calling convention? +""" + +ida_typeinf.CC_HAS_ELLIPSIS +""" +function has a variable list of arguments? +""" + +ida_typeinf.FAH_BYTE +""" +function argument attribute header byte +""" + +ida_typeinf.FAI_ARRAY +""" +was initially an array see "__org_typedef" or "__org_arrdim" type +attributes to determine the original type +""" + +ida_typeinf.FAI_HIDDEN +""" +hidden argument +""" + +ida_typeinf.FAI_RETPTR +""" +pointer to return value. implies hidden +""" + +ida_typeinf.FAI_STRUCT +""" +was initially a structure +""" + +ida_typeinf.FTI_ALL +""" +all defined bits +""" + +ida_typeinf.FTI_ARGLOCS +""" +(stkargs and retloc too) + +info about argument locations has been calculated +""" + +ida_typeinf.FTI_CALLTYPE +""" +mask for FTI_*CALL +""" + +ida_typeinf.FTI_DEFCALL +""" +default call +""" + +ida_typeinf.FTI_FARCALL +""" +far call +""" + +ida_typeinf.FTI_HIGH +""" +high level prototype (with possibly hidden args) +""" + +ida_typeinf.FTI_INTCALL +""" +interrupt call +""" + +ida_typeinf.FTI_NEARCALL +""" +near call +""" + +ida_typeinf.FTI_NORET +""" +noreturn +""" + +ida_typeinf.FTI_PURE +""" +__pure +""" + +ida_typeinf.FTI_SPOILED +""" +information about spoiled registers is present +""" + +ida_typeinf.FTI_STATIC +""" +static +""" + +ida_typeinf.FTI_VIRTUAL +""" +virtual +""" + +ida_typeinf.GUESS_FUNC_FAILED +""" +couldn't guess the function type +""" + +ida_typeinf.GUESS_FUNC_OK +""" +ok, some non-trivial information is gathered +""" + +ida_typeinf.GUESS_FUNC_TRIVIAL +""" +the function type doesn't have interesting info +""" + +ida_typeinf.HTI_CPP +""" +C++ mode (not implemented) +""" + +ida_typeinf.HTI_DCL +""" +don't complain about redeclarations +""" + +ida_typeinf.HTI_EXT +""" +debug: print external representation of types +""" + +ida_typeinf.HTI_FIL +""" +otherwise "input" contains a C declaration + +"input" is file name, +""" + +ida_typeinf.HTI_HIGH +""" +(with hidden args, etc) + +assume high level prototypes +""" + +ida_typeinf.HTI_INT +""" +debug: print internal representation of types +""" + +ida_typeinf.HTI_LEX +""" +debug: print tokens +""" + +ida_typeinf.HTI_LOWER +""" +lower the function prototypes +""" + +ida_typeinf.HTI_MAC +""" +define macros from the base tils +""" + +ida_typeinf.HTI_NDC +""" +don't decorate names +""" + +ida_typeinf.HTI_NER +""" +ignore all errors but display them +""" + +ida_typeinf.HTI_NWR +""" +no warning messages +""" + +ida_typeinf.HTI_PAK +""" +explicit structure pack value (#pragma pack) +""" + +ida_typeinf.HTI_PAK1 +""" +#pragma pack(1) +""" + +ida_typeinf.HTI_PAK16 +""" +#pragma pack(16) +""" + +ida_typeinf.HTI_PAK2 +""" +#pragma pack(2) +""" + +ida_typeinf.HTI_PAK4 +""" +#pragma pack(4) +""" + +ida_typeinf.HTI_PAK8 +""" +#pragma pack(8) +""" + +ida_typeinf.HTI_PAKDEF +""" +default pack value +""" + +ida_typeinf.HTI_PAK_SHIFT +""" +shift for 'HTI_PAK' . This field should be used if you want to +remember an explicit pack value for each structure/union type. See +'HTI_PAK' ... definitions +""" + +ida_typeinf.HTI_RAWARGS +""" +leave argument names unchanged (do not remove underscores) +""" + +ida_typeinf.HTI_TST +""" +test mode: discard the result +""" + +ida_typeinf.HTI_UNP +""" +debug: check the result by unpacking it +""" + +ida_typeinf.IMPTYPE_LOCAL +""" +the type is local, the struct/enum won't be marked as til type. there +is no need to specify this bit if til==idati, the kernel will set it +automatically +""" + +ida_typeinf.IMPTYPE_OVERRIDE +""" +override existing type +""" + +ida_typeinf.IMPTYPE_VERBOSE +""" +more verbose output (dialog boxes may appear) +""" + +ida_typeinf.MAX_FUNC_ARGS +""" +max number of function arguments +""" + +ida_typeinf.NTF_64BIT +""" +value is 64bit +""" + +ida_typeinf.NTF_CHKSYNC +""" +(set_numbered_type, set_named_type) + +check that synchronization to IDB passed OK +""" + +ida_typeinf.NTF_FIXNAME +""" +(set_named_type, set_numbered_type only) + +force-validate the name of the type when setting +""" + +ida_typeinf.NTF_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly (set_named_type, set_numbered_type only) +""" + +ida_typeinf.NTF_NOBASE +""" +don't inspect base tils (for get_named_type) +""" + +ida_typeinf.NTF_NOCUR +""" +don't inspect current til file (for get_named_type) +""" + +ida_typeinf.NTF_REPLACE +""" +replace original type (for set_named_type) +""" + +ida_typeinf.NTF_SYMM +""" +only one of 'NTF_TYPE' and 'NTF_SYMU' , 'NTF_SYMM' can be used + +symbol, name is mangled ('_func') +""" + +ida_typeinf.NTF_SYMU +""" +symbol, name is unmangled ('func') +""" + +ida_typeinf.NTF_TYPE +""" +type name +""" + +ida_typeinf.NTF_UMANGLED +""" +name is unmangled (don't use this flag) +""" + +ida_typeinf.PCN_CHR +""" +character +""" + +ida_typeinf.PCN_DEC +""" +decimal +""" + +ida_typeinf.PCN_DECSEXT +""" +automatically extend sign of signed decimal numbers +""" + +ida_typeinf.PCN_HEX +""" +hexadecimal +""" + +ida_typeinf.PCN_LZHEX +""" +print leading zeroes for hexdecimal number +""" + +ida_typeinf.PCN_NEGSIGN +""" +print negated value (-N) for negative numbers +""" + +ida_typeinf.PCN_OCT +""" +octal +""" + +ida_typeinf.PCN_RADIX +""" +number base to use +""" + +ida_typeinf.PCN_UNSIGNED +""" +add 'u' suffix +""" + +ida_typeinf.PDF_DEF_BASE +""" +Include base types: __int8, __int16, etc.. +""" + +ida_typeinf.PDF_DEF_FWD +""" +Allow forward declarations. +""" + +ida_typeinf.PDF_HEADER_CMT +""" +Prepend output with a descriptive comment. +""" + +ida_typeinf.PDF_INCL_DEPS +""" +Include all type dependencies. +""" + +ida_typeinf.PIO_IGNORE_PTRS +""" +do not follow pointers +""" + +ida_typeinf.PIO_NOATTR_FAIL +""" +missing attributes are not ok +""" + +ida_typeinf.PRALOC_STKOFF +""" +print stack offsets +""" + +ida_typeinf.PRALOC_VERIFY +""" +interr if illegal argloc +""" + +ida_typeinf.PRTYPE_1LINE +""" +print to one line +""" + +ida_typeinf.PRTYPE_COLORED +""" +add color tag COLOR_SYMBOL for any parentheses, commas and colons +""" + +ida_typeinf.PRTYPE_CPP +""" +use c++ name (only for 'print_type()' ) +""" + +ida_typeinf.PRTYPE_DEF +""" + 'tinfo_t' : print definition, if available +""" + +ida_typeinf.PRTYPE_MULTI +""" +print to many lines +""" + +ida_typeinf.PRTYPE_NOARGS +""" + 'tinfo_t' : do not print function argument names +""" + +ida_typeinf.PRTYPE_NOARRS +""" + 'tinfo_t' : print arguments with 'FAI_ARRAY' as pointers +""" + +ida_typeinf.PRTYPE_NOREGEX +""" +do not apply regular expressions to beautify name +""" + +ida_typeinf.PRTYPE_NORES +""" + 'tinfo_t' : never resolve types (meaningful with PRTYPE_DEF) +""" + +ida_typeinf.PRTYPE_PRAGMA +""" +print pragmas for alignment +""" + +ida_typeinf.PRTYPE_RESTORE +""" + 'tinfo_t' : print restored types for 'FAI_ARRAY' and 'FAI_STRUCT' +""" + +ida_typeinf.PRTYPE_SEMI +""" +append ; to the end +""" + +ida_typeinf.PRTYPE_TYPE +""" +print type declaration (not variable declaration) +""" + +ida_typeinf.PT_HIGH +""" +(with hidden args, etc) + +assume high level prototypes +""" + +ida_typeinf.PT_LOWER +""" +lower the function prototypes +""" + +ida_typeinf.PT_NDC +""" +don't decorate names +""" + +ida_typeinf.PT_PACKMASK +""" +mask for pack alignment values +""" + +ida_typeinf.PT_RAWARGS +""" +leave argument names unchanged (do not remove underscores) +""" + +ida_typeinf.PT_REPLACE +""" +replace the old type (used in idc) +""" + +ida_typeinf.PT_SIL +""" +silent, no messages +""" + +ida_typeinf.PT_TYP +""" +return declared type information +""" + +ida_typeinf.PT_VAR +""" +return declared object information +""" + +ida_typeinf.RESERVED_BYTE +""" +multifunctional purpose +""" + +ida_typeinf.SETCOMP_BY_USER +""" +invoked by user, cannot be replaced by module/loader +""" + +ida_typeinf.SETCOMP_ONLY_ABI +""" +ignore cc field complete, use only abiname +""" + +ida_typeinf.SETCOMP_ONLY_ID +""" +cc has only 'id' field the rest will be set to defaults corresponding +to the program bitness +""" + +ida_typeinf.SETCOMP_OVERRIDE +""" +may override old compiler info +""" + +ida_typeinf.STRMEM_ANON +""" +can be combined with 'STRMEM_NAME' : look inside anonymous members +too. +""" + +ida_typeinf.STRMEM_AUTO +""" +get member by offset if struct, or get member by index if union - nb: +union: index is stored in the udm->offset field!nb: struct: offset is +in bytes (not in bits)! +""" + +ida_typeinf.STRMEM_CASTABLE_TO +""" +can be combined with 'STRMEM_TYPE' : member type must be castable to +the specified type +""" + +ida_typeinf.STRMEM_INDEX +""" +get member by number- in: udm->offset - is a member number +""" + +ida_typeinf.STRMEM_MAXS +""" +get biggest member by size. +""" + +ida_typeinf.STRMEM_MINS +""" +get smallest member by size. +""" + +ida_typeinf.STRMEM_NAME +""" +get member by name- in: udm->name - the desired member name. +""" + +ida_typeinf.STRMEM_OFFSET +""" +get member by offset- in: udm->offset - is a member offset in bits +""" + +ida_typeinf.STRMEM_SIZE +""" +get member by size.- in: udm->size - the desired member size. +""" + +ida_typeinf.STRMEM_SKIP_EMPTY +""" +can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' skip empty +members (i.e. having zero size) only last empty member can be returned +""" + +ida_typeinf.STRMEM_TYPE +""" +get member by type. - in: udm->type - the desired member type. member +types are compared with tinfo_t::equals_to() +""" + +ida_typeinf.STRMEM_VFTABLE +""" +can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' get vftable +instead of the base class +""" + +ida_typeinf.SUDT_ALIGN +""" +to match the offsets and size info + +recalculate field alignments, struct packing, etc +""" + +ida_typeinf.SUDT_CONST +""" +only for serialize_udt: make type const +""" + +ida_typeinf.SUDT_FAST +""" +serialize without verifying offsets and alignments +""" + +ida_typeinf.SUDT_GAPS +""" +allow to fill gaps with additional members (_BYTE[]) +""" + +ida_typeinf.SUDT_SORT +""" +fields are not sorted by offset, sort them first +""" + +ida_typeinf.SUDT_TRUNC +""" +serialize: truncate useless strings from fields, fldcmts +""" + +ida_typeinf.SUDT_UNEX +""" +references to nonexistent member types are acceptable in this case it +is better to set the corresponding 'udt_member_t::fda' field to the +type alignment. if this field is not set, ida will try to guess the +alignment. +""" + +ida_typeinf.SUDT_VOLATILE +""" +only for serialize_udt: make type volatile +""" + +ida_typeinf.TAENUM_64BIT +""" +enum: store 64-bit values +""" + +ida_typeinf.TAENUM_SIGNED +""" +enum: signed +""" + +ida_typeinf.TAENUM_UNSIGNED +""" +enum: unsigned +""" + +ida_typeinf.TAFLD_BASECLASS +""" +field: do not include but inherit from the current field +""" + +ida_typeinf.TAFLD_UNALIGNED +""" +field: unaligned field +""" + +ida_typeinf.TAFLD_VFTABLE +""" +field: ptr to virtual function table +""" + +ida_typeinf.TAFLD_VIRTBASE +""" +field: virtual base (not supported yet) +""" + +ida_typeinf.TAH_ALL +""" +all defined bits +""" + +ida_typeinf.TAH_BYTE +""" +type attribute header byte +""" + +ida_typeinf.TAH_HASATTRS +""" +has extended attributes +""" + +ida_typeinf.TAPTR_PTR32 +""" +ptr: __ptr32 +""" + +ida_typeinf.TAPTR_PTR64 +""" +ptr: __ptr64 +""" + +ida_typeinf.TAPTR_RESTRICT +""" +ptr: __restrict +""" + +ida_typeinf.TAPTR_SHIFTED +""" +ptr: __shifted(parent_struct, delta) +""" + +ida_typeinf.TAUDT_CPPOBJ +""" +struct: a c++ object, not simple pod type +""" + +ida_typeinf.TAUDT_MSSTRUCT +""" +struct: gcc msstruct attribute +""" + +ida_typeinf.TAUDT_UNALIGNED +""" +struct: unaligned struct +""" + +ida_typeinf.TAUDT_VFTABLE +""" +struct: is virtual function table +""" + +ida_typeinf.TA_FORMAT +""" +info about the 'format' argument 3 times pack_dd: 'format_functype_t' +, argument number of 'format', argument number of '...' +""" + +ida_typeinf.TA_ORG_ARRDIM +""" +the original array dimension (pack_dd) +""" + +ida_typeinf.TA_ORG_TYPEDEF +""" +the original typedef name (simple string) +""" + +ida_typeinf.TCMP_ANYBASE +""" +accept any base class when casting +""" + +ida_typeinf.TCMP_AUTOCAST +""" +can t1 be cast into t2 automatically? +""" + +ida_typeinf.TCMP_CALL +""" +can t1 be called with t2 type? +""" + +ida_typeinf.TCMP_DECL +""" +compare declarations without resolving them +""" + +ida_typeinf.TCMP_DELPTR +""" +remove pointer from types before comparing +""" + +ida_typeinf.TCMP_EQUAL +""" +are types equal? +""" + +ida_typeinf.TCMP_IGNMODS +""" +ignore const/volatile modifiers +""" + +ida_typeinf.TCMP_MANCAST +""" +can t1 be cast into t2 manually? +""" + +ida_typeinf.TCMP_SKIPTHIS +""" +skip the first function argument in comparison +""" + +ida_typeinf.TIL_ADD_ALREADY +""" +the base til was already added +""" + +ida_typeinf.TIL_ADD_FAILED +""" +see errbuf +""" + +ida_typeinf.TIL_ADD_OK +""" +some tils were added +""" + +ida_typeinf.TIL_ALI +""" +type aliases are present (this bit is used only on the disk) +""" + +ida_typeinf.TIL_ESI +""" +extended sizeof info (short, long, longlong) +""" + +ida_typeinf.TIL_MAC +""" +til has macro table +""" + +ida_typeinf.TIL_MOD +""" +til has been modified, should be saved +""" + +ida_typeinf.TIL_ORD +""" +type ordinal numbers are present +""" + +ida_typeinf.TIL_SLD +""" +sizeof(long double) +""" + +ida_typeinf.TIL_STM +""" +til has extra streams +""" + +ida_typeinf.TIL_UNI +""" +universal til for any compiler +""" + +ida_typeinf.TIL_ZIP +""" +pack buckets using zip +""" + +ida_typeinf.TINFO_DEFINITE +""" +this is a definite type +""" + +ida_typeinf.TINFO_DELAYFUNC +""" +if type is a function and no function exists at ea, schedule its +creation and argument renaming to auto-analysis otherwise try to +create it immediately +""" + +ida_typeinf.TINFO_GUESSED +""" +this is a guessed type +""" + +ida_typeinf.TINFO_STRICT +""" +never convert given type to another one before applying +""" + +ida_typeinf.TVIS_CMT +""" +new comment is present +""" + +ida_typeinf.TVIS_NAME +""" +new name is present +""" + +ida_typeinf.TVIS_TYPE +""" +new type info is present +""" + +ida_typeinf.TVST_DEF +""" +visit type definition (meaningful for typerefs) +""" + +ida_typeinf.TVST_PRUNE +""" +don't visit children of current type +""" + +ida_typeinf.VALSTR_OPEN +""" +printed opening curly brace '{' +""" +=== ida_typeinf EPYDOC INJECTIONS END === +Help on function calc_dataseg in module ida_ua: + +calc_dataseg(*args) + calc_dataseg(insn, n=-1, rgnum=-1) -> ea_t + + + Get data segment for the instruction operand. 'opnum' and 'rgnum' are + meaningful only if the processor has segment registers. + + @param insn (C++: const insn_t &) + @param n (C++: int) + @param rgnum (C++: int) + +Help on function can_decode in module ida_ua: + +can_decode(*args) + can_decode(ea) -> bool + + + Can the bytes at address 'ea' be decoded as instruction? + + @param ea: linear address (C++: ea_t) + @return: whether or not the contents at that address could be a valid + instruction + +Help on function construct_macro in module ida_ua: + +construct_macro(*args) + construct_macro(insn, enable, build_macro) -> bool + + + See ua.hpp's construct_macro(). + +Help on function create_insn in module ida_ua: + +create_insn(*args) + create_insn(ea, out=None) -> int + + + Create an instruction at the specified address. This function checks + if an instruction is present at the specified address and will try to + create one if there is none. It will fail if there is a data item or + other items hindering the creation of the new instruction. This + function will also fill the 'out' structure. + + @param ea: linear address (C++: ea_t) + @param out: the resulting instruction (C++: insn_t *) + @return: the length of the instruction or 0 + +Help on function create_outctx in module ida_ua: + +create_outctx(*args) + create_outctx(ea, F=0, suspop=0) -> outctx_base_t + + + Create a new output context. To delete it, just use "delete pctx" + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param suspop (C++: int) + +Help on function decode_insn in module ida_ua: + +decode_insn(*args) + decode_insn(out, ea) -> int + + + Analyze the specified address and fill 'out'. This function does not + modify the database. It just tries to interpret the specified address + as an instruction and fills the 'out' structure. + + @param out: the resulting instruction (C++: insn_t *) + @param ea: linear address (C++: ea_t) + @return: the length of the (possible) instruction or 0 + +Help on function decode_preceding_insn in module ida_ua: + +decode_preceding_insn(*args) + decode_preceding_insn(out, ea) -> PyObject * + + + Decodes the preceding instruction. Please check ua.hpp / decode_preceding_insn() + @param ea: current ea + @param out: instruction storage + @return: tuple(preceeding_ea or BADADDR, farref = Boolean) + +Help on function decode_prev_insn in module ida_ua: + +decode_prev_insn(*args) + decode_prev_insn(out, ea) -> ea_t + + + Decode previous instruction if it exists, fill 'out'. + + @param out: the resulting instruction (C++: insn_t *) + @param ea: the address to decode the previous instruction from (C++: + ea_t) + @return: the previous instruction address ( BADADDR -no such insn) + +Help on function get_dtype_by_size in module ida_ua: + +get_dtype_by_size(*args) + get_dtype_by_size(size) -> int + + + Get 'op_t::dtype' from size. + + + @param size (C++: asize_t) + +Help on function get_dtype_flag in module ida_ua: + +get_dtype_flag(*args) + get_dtype_flag(dtype) -> flags_t + + + Get flags for 'op_t::dtype' field. + + + @param dtype (C++: op_dtype_t) + +Help on function get_dtype_size in module ida_ua: + +get_dtype_size(*args) + get_dtype_size(dtype) -> size_t + + + Get size of opt_::dtype field. + + + @param dtype (C++: op_dtype_t) + +Help on function get_immvals in module ida_ua: + +get_immvals(*args) + get_immvals(ea, n, F=0) -> PyObject * + + + Get immediate values at the specified address. This function decodes + instruction at the specified address or inspects the data item. It + finds immediate values and copies them to 'out'. This function will + store the original value of the operands in 'out', unless the last + bits of 'F' are "...0 11111111", in which case the transformed values + (as needed for printing) will be stored instead. + + @param ea: address to analyze (C++: ea_t) + @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands + (C++: int) + @param F: flags for the specified address (C++: flags_t) + @return: number of immediate values (0..2* UA_MAXOP ) + +Help on function get_lookback in module ida_ua: + +get_lookback(*args) + get_lookback() -> int + + + Number of instructions to look back. This variable is not used by the + kernel. Its value may be specified in ida.cfg: LOOKBACK = . + IDP may use it as you like it. (TMS module uses it) + +Help on function get_printable_immvals in module ida_ua: + +get_printable_immvals(*args) + get_printable_immvals(ea, n, F=0) -> PyObject * + + + Get immediate ready-to-print values at the specified address + + @param ea: address to analyze (C++: ea_t) + @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands + (C++: int) + @param F: flags for the specified address (C++: flags_t) + @return: number of immediate values (0..2* UA_MAXOP ) + +Help on function guess_table_address in module ida_ua: + +guess_table_address(*args) + guess_table_address(insn) -> ea_t + + + Guess the jump table address (ibm pc specific) + + + @param insn (C++: const insn_t &) + +Help on function guess_table_size in module ida_ua: + +guess_table_size(*args) + guess_table_size(insn, jump_table) -> asize_t + + + Guess the jump table size. + + + @param insn (C++: const insn_t &) + @param jump_table (C++: ea_t) + +Help on function insn_add_cref in module ida_ua: + +insn_add_cref(*args) + insn_add_cref(insn, to, opoff, type) + +Help on function insn_add_dref in module ida_ua: + +insn_add_dref(*args) + insn_add_dref(insn, to, opoff, type) + +Help on function insn_add_off_drefs in module ida_ua: + +insn_add_off_drefs(*args) + insn_add_off_drefs(insn, x, type, outf) -> ea_t + +Help on function insn_create_stkvar in module ida_ua: + +insn_create_stkvar(*args) + insn_create_stkvar(insn, x, v, flags) -> bool + +Help on class insn_t in module ida_ua: + +class insn_t(__builtin__.object) + | Proxy of C++ insn_t class. + | + | Methods defined here: + | + | __get_auxpref__(self, *args) + | __get_auxpref__(self) -> uint16 + | + | __get_operand__(self, *args) + | __get_operand__(self, n) -> op_t + | + | __get_ops__(self, *args) + | __get_ops__(self) -> operands_array + | + | __getitem__(self, idx) + | Operands can be accessed directly as indexes + | @return op_t: Returns an operand of type op_t + | + | __init__(self, *args) + | __init__(self) -> insn_t + | + | __iter__(self) + | + | __repr__ = _swig_repr(self) + | + | __set_auxpref__(self, *args) + | __set_auxpref__(self, v) + | + | add_cref(self, *args) + | add_cref(self, to, opoff, type) + | + | add_dref(self, *args) + | add_dref(self, to, opoff, type) + | + | add_off_drefs(self, *args) + | add_off_drefs(self, x, type, outf) -> ea_t + | + | assign(self, *args) + | assign(self, other) + | + | create_op_data(self, *args) + | create_op_data(self, ea_, opoff, dtype) -> bool + | create_op_data(self, ea_, op) -> bool + | + | create_stkvar(self, *args) + | create_stkvar(self, x, v, flags_) -> bool + | + | get_canon_feature(self, *args) + | get_canon_feature(self) -> uint32 + | + | get_canon_mnem(self, *args) + | get_canon_mnem(self) -> char const * + | + | get_next_byte(self, *args) + | get_next_byte(self) -> uint8 + | + | get_next_dword(self, *args) + | get_next_dword(self) -> uint32 + | + | get_next_qword(self, *args) + | get_next_qword(self) -> uint64 + | + | get_next_word(self, *args) + | get_next_word(self) -> uint16 + | + | is_64bit(self, *args) + | is_64bit(self) -> bool + | + | is_canon_insn(self, *args) + | is_canon_insn(self) -> bool + | + | is_macro(self, *args) + | is_macro(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Op1 + | + | Op2 + | + | Op3 + | + | Op4 + | + | Op5 + | + | Op6 + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | auxpref + | __get_auxpref__(self) -> uint16 + | + | cs + | insn_t_cs_get(self) -> ea_t + | + | ea + | insn_t_ea_get(self) -> ea_t + | + | flags + | insn_t_flags_get(self) -> int16 + | + | insnpref + | insn_t_insnpref_get(self) -> char + | + | ip + | insn_t_ip_get(self) -> ea_t + | + | itype + | insn_t_itype_get(self) -> uint16 + | + | ops + | __get_ops__(self) -> operands_array + | + | segpref + | insn_t_segpref_get(self) -> char + | + | size + | insn_t_size_get(self) -> uint16 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_insn_t(self) + +Help on function insn_t__from_ptrval__ in module ida_ua: + +insn_t__from_ptrval__(*args) + insn_t__from_ptrval__(ptrval) -> insn_t + +Help on function is_floating_dtype in module ida_ua: + +is_floating_dtype(*args) + is_floating_dtype(dtype) -> bool + + + Is a floating type operand? + + + @param dtype (C++: op_dtype_t) + +Help on function map_code_ea in module ida_ua: + +map_code_ea(*args) + map_code_ea(insn, addr, opnum) -> ea_t + map_code_ea(insn, op) -> ea_t + + + Map a code address. This function takes into account the segment + translations. + + @param insn: the current instruction (C++: const insn_t &) + @param addr: the referenced address to map (C++: ea_t) + @param opnum: operand number (C++: int) + +Help on function map_data_ea in module ida_ua: + +map_data_ea(*args) + map_data_ea(insn, addr, opnum=-1) -> ea_t + map_data_ea(insn, op) -> ea_t + + + Map a data address. + + @param insn: the current instruction (C++: const insn_t &) + @param addr: the referenced address to map (C++: ea_t) + @param opnum: operand number (C++: int) + +Help on function map_ea in module ida_ua: + +map_ea(*args) + map_ea(insn, op, iscode) -> ea_t + map_ea(insn, addr, opnum, iscode) -> ea_t + +Help on class op_t in module ida_ua: + +class op_t(__builtin__.object) + | Proxy of C++ op_t class. + | + | Methods defined here: + | + | __get_addr__(self, *args) + | __get_addr__(self) -> ea_t + | + | __get_reg_phrase__(self, *args) + | __get_reg_phrase__(self) -> uint16 + | + | __get_specval__(self, *args) + | __get_specval__(self) -> ea_t + | + | __get_value__(self, *args) + | __get_value__(self) -> ea_t + | + | __init__(self, *args) + | __init__(self) -> op_t + | + | __repr__ = _swig_repr(self) + | + | __set_addr__(self, *args) + | __set_addr__(self, v) + | + | __set_reg_phrase__(self, *args) + | __set_reg_phrase__(self, r) + | + | __set_specval__(self, *args) + | __set_specval__(self, v) + | + | __set_value__(self, *args) + | __set_value__(self, v) + | + | assign(self, *args) + | assign(self, other) + | + | clr_shown(self, *args) + | clr_shown(self) + | + | has_reg(self, r) + | Checks if the operand accesses the given processor register + | + | is_imm(self, *args) + | is_imm(self, v) -> bool + | + | is_reg(self, *args) + | is_reg(self, r) -> bool + | + | set_shown(self, *args) + | set_shown(self) + | + | shown(self, *args) + | shown(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | addr + | __get_addr__(self) -> ea_t + | + | dtype + | op_t_dtype_get(self) -> op_dtype_t + | + | flags + | op_t_flags_get(self) -> uchar + | + | n + | op_t_n_get(self) -> uchar + | + | offb + | op_t_offb_get(self) -> char + | + | offo + | op_t_offo_get(self) -> char + | + | phrase + | __get_reg_phrase__(self) -> uint16 + | + | reg + | __get_reg_phrase__(self) -> uint16 + | + | specflag1 + | op_t_specflag1_get(self) -> char + | + | specflag2 + | op_t_specflag2_get(self) -> char + | + | specflag3 + | op_t_specflag3_get(self) -> char + | + | specflag4 + | op_t_specflag4_get(self) -> char + | + | specval + | __get_specval__(self) -> ea_t + | + | thisown + | The membership flag + | + | type + | op_t_type_get(self) -> optype_t + | + | value + | __get_value__(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_op_t(self) + +Help on function op_t__from_ptrval__ in module ida_ua: + +op_t__from_ptrval__(*args) + op_t__from_ptrval__(ptrval) -> op_t + +Help on class operands_array in module ida_ua: + +class operands_array(__builtin__.object) + | Proxy of C++ wrapped_array_t< op_t,8 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) + | __getitem__(self, i) -> op_t + | + | __init__(self, *args) + | __init__(self, data) -> operands_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | operands_array_data_get(self) -> op_t (&)[8] + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_operands_array(self) + +Help on class outctx_base_t in module ida_ua: + +class outctx_base_t(__builtin__.object) + | Proxy of C++ outctx_base_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | close_comment(self, *args) + | close_comment(self) + | + | clr_gen_label(self, *args) + | clr_gen_label(self) + | + | display_voids(self, *args) + | display_voids(self) -> bool + | + | flush_buf(self, *args) + | flush_buf(self, buf, indent=-1) -> bool + | + | flush_outbuf(self, *args) + | flush_outbuf(self, indent=-1) -> bool + | + | forbid_annotations(self, *args) + | forbid_annotations(self) -> int + | + | force_code(self, *args) + | force_code(self) -> bool + | + | gen_block_cmt(self, *args) + | gen_block_cmt(self, cmt, color) -> bool + | + | gen_border_line(self, *args) + | gen_border_line(self, solid=False) -> bool + | + | gen_cmt_line(self, *args) + | gen_cmt_line(self, format) -> bool + | + | gen_collapsed_line(self, *args) + | gen_collapsed_line(self, format) -> bool + | + | gen_empty_line(self, *args) + | gen_empty_line(self) -> bool + | + | gen_empty_line_without_annotations(self, *args) + | gen_empty_line_without_annotations(self) + | + | gen_printf(self, *args) + | gen_printf(self, indent, format) -> bool + | + | gen_xref_lines(self, *args) + | gen_xref_lines(self) -> bool + | + | get_stkvar(self, *args) + | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * + | + | init_lines_array(self, *args) + | init_lines_array(self, answers, maxsize) + | + | multiline(self, *args) + | multiline(self) -> bool + | + | only_main_line(self, *args) + | only_main_line(self) -> bool + | + | out_addr_tag(self, *args) + | out_addr_tag(self, ea) + | + | out_btoa(self, *args) + | out_btoa(self, Word, radix=0) + | + | out_char(self, *args) + | out_char(self, c) + | + | out_chars(self, *args) + | out_chars(self, c, n) + | + | out_colored_register_line(self, *args) + | out_colored_register_line(self, str) + | + | out_keyword(self, *args) + | out_keyword(self, str) + | + | out_line(self, *args) + | out_line(self, str, color=0) + | + | out_long(self, *args) + | out_long(self, v, radix) + | + | out_name_expr(self, *args) + | out_name_expr(self, x, ea, off=BADADDR) -> bool + | + | out_printf(self, *args) + | out_printf(self, format) + | + | out_register(self, *args) + | out_register(self, str) + | + | out_spaces(self, *args) + | out_spaces(self, len) + | + | out_symbol(self, *args) + | out_symbol(self, c) + | + | out_tagoff(self, *args) + | out_tagoff(self, tag) + | + | out_tagon(self, *args) + | out_tagon(self, tag) + | + | out_value(self, *args) + | out_value(self, x, outf=0) -> flags_t + | + | print_label_now(self, *args) + | print_label_now(self) -> bool + | + | restore_ctxflags(self, *args) + | restore_ctxflags(self, saved_flags) + | + | retrieve_cmt(self, *args) + | retrieve_cmt(self) -> ssize_t + | + | retrieve_name(self, *args) + | retrieve_name(self, arg2, arg3) -> ssize_t + | + | set_comment_addr(self, *args) + | set_comment_addr(self, ea) + | + | set_dlbind_opnd(self, *args) + | set_dlbind_opnd(self) + | + | set_gen_cmt(self, *args) + | set_gen_cmt(self, on=True) + | + | set_gen_demangled_label(self, *args) + | set_gen_demangled_label(self) + | + | set_gen_label(self, *args) + | set_gen_label(self) + | + | set_gen_xrefs(self, *args) + | set_gen_xrefs(self, on=True) + | + | setup_outctx(self, *args) + | setup_outctx(self, prefix, makeline_flags) + | + | stack_view(self, *args) + | stack_view(self) -> bool + | + | term_outctx(self, *args) + | term_outctx(self, prefix=None) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | default_lnnum + | outctx_base_t_default_lnnum_get(self) -> int + | + | insn_ea + | outctx_base_t_insn_ea_get(self) -> ea_t + | + | outbuf + | outctx_base_t_outbuf_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on function outctx_base_t__from_ptrval__ in module ida_ua: + +outctx_base_t__from_ptrval__(*args) + outctx_base_t__from_ptrval__(ptrval) -> outctx_base_t + +Help on class outctx_t in module ida_ua: + +class outctx_t(outctx_base_t) + | Proxy of C++ outctx_t class. + | + | Method resolution order: + | outctx_t + | outctx_base_t + | __builtin__.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | + | __repr__ = _swig_repr(self) + | + | gen_func_footer(self, *args) + | gen_func_footer(self, pfn) + | + | gen_func_header(self, *args) + | gen_func_header(self, pfn) + | + | gen_header(self, *args) + | gen_header(self, flags=((1 << 0)|(1 << 1)), proc_name=None, proc_flavour=None) + | + | gen_header_extra(self, *args) + | gen_header_extra(self) + | + | gen_xref_lines(self, *args) + | gen_xref_lines(self) -> bool + | + | out_custom_mnem(self, *args) + | out_custom_mnem(self, mnem, width=8, postfix=None) + | + | out_data(self, *args) + | out_data(self, analyze_only) + | + | out_immchar_cmts(self, *args) + | out_immchar_cmts(self) + | + | out_mnem(self, *args) + | out_mnem(self, width=8, postfix=None) + | + | out_mnemonic(self, *args) + | out_mnemonic(self) + | + | out_one_operand(self, *args) + | out_one_operand(self, n) -> bool + | + | out_specea(self, *args) + | out_specea(self, segtype) -> bool + | + | retrieve_cmt(self, *args) + | retrieve_cmt(self) -> ssize_t + | + | retrieve_name(self, *args) + | retrieve_name(self, arg2, arg3) -> ssize_t + | + | set_bin_state(self, *args) + | set_bin_state(self, value) + | + | setup_outctx(self, *args) + | setup_outctx(self, prefix, flags) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bin_ea + | outctx_t_bin_ea_get(self) -> ea_t + | + | bin_state + | outctx_t_bin_state_get(self) -> char + | + | bin_width + | outctx_t_bin_width_get(self) -> int + | + | curlabel + | outctx_t_curlabel_get(self) -> qstring * + | + | gl_bpsize + | outctx_t_gl_bpsize_get(self) -> int + | + | insn + | outctx_t_insn_get(self) -> insn_t + | + | thisown + | The membership flag + | + | wif + | outctx_t_wif_get(self) -> printop_t + | + | ---------------------------------------------------------------------- + | Methods inherited from outctx_base_t: + | + | close_comment(self, *args) + | close_comment(self) + | + | clr_gen_label(self, *args) + | clr_gen_label(self) + | + | display_voids(self, *args) + | display_voids(self) -> bool + | + | flush_buf(self, *args) + | flush_buf(self, buf, indent=-1) -> bool + | + | flush_outbuf(self, *args) + | flush_outbuf(self, indent=-1) -> bool + | + | forbid_annotations(self, *args) + | forbid_annotations(self) -> int + | + | force_code(self, *args) + | force_code(self) -> bool + | + | gen_block_cmt(self, *args) + | gen_block_cmt(self, cmt, color) -> bool + | + | gen_border_line(self, *args) + | gen_border_line(self, solid=False) -> bool + | + | gen_cmt_line(self, *args) + | gen_cmt_line(self, format) -> bool + | + | gen_collapsed_line(self, *args) + | gen_collapsed_line(self, format) -> bool + | + | gen_empty_line(self, *args) + | gen_empty_line(self) -> bool + | + | gen_empty_line_without_annotations(self, *args) + | gen_empty_line_without_annotations(self) + | + | gen_printf(self, *args) + | gen_printf(self, indent, format) -> bool + | + | get_stkvar(self, *args) + | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * + | + | init_lines_array(self, *args) + | init_lines_array(self, answers, maxsize) + | + | multiline(self, *args) + | multiline(self) -> bool + | + | only_main_line(self, *args) + | only_main_line(self) -> bool + | + | out_addr_tag(self, *args) + | out_addr_tag(self, ea) + | + | out_btoa(self, *args) + | out_btoa(self, Word, radix=0) + | + | out_char(self, *args) + | out_char(self, c) + | + | out_chars(self, *args) + | out_chars(self, c, n) + | + | out_colored_register_line(self, *args) + | out_colored_register_line(self, str) + | + | out_keyword(self, *args) + | out_keyword(self, str) + | + | out_line(self, *args) + | out_line(self, str, color=0) + | + | out_long(self, *args) + | out_long(self, v, radix) + | + | out_name_expr(self, *args) + | out_name_expr(self, x, ea, off=BADADDR) -> bool + | + | out_printf(self, *args) + | out_printf(self, format) + | + | out_register(self, *args) + | out_register(self, str) + | + | out_spaces(self, *args) + | out_spaces(self, len) + | + | out_symbol(self, *args) + | out_symbol(self, c) + | + | out_tagoff(self, *args) + | out_tagoff(self, tag) + | + | out_tagon(self, *args) + | out_tagon(self, tag) + | + | out_value(self, *args) + | out_value(self, x, outf=0) -> flags_t + | + | print_label_now(self, *args) + | print_label_now(self) -> bool + | + | restore_ctxflags(self, *args) + | restore_ctxflags(self, saved_flags) + | + | set_comment_addr(self, *args) + | set_comment_addr(self, ea) + | + | set_dlbind_opnd(self, *args) + | set_dlbind_opnd(self) + | + | set_gen_cmt(self, *args) + | set_gen_cmt(self, on=True) + | + | set_gen_demangled_label(self, *args) + | set_gen_demangled_label(self) + | + | set_gen_label(self, *args) + | set_gen_label(self) + | + | set_gen_xrefs(self, *args) + | set_gen_xrefs(self, on=True) + | + | stack_view(self, *args) + | stack_view(self) -> bool + | + | term_outctx(self, *args) + | term_outctx(self, prefix=None) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from outctx_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | default_lnnum + | outctx_base_t_default_lnnum_get(self) -> int + | + | insn_ea + | outctx_base_t_insn_ea_get(self) -> ea_t + | + | outbuf + | outctx_base_t_outbuf_get(self) -> qstring * + +Help on function outctx_t__from_ptrval__ in module ida_ua: + +outctx_t__from_ptrval__(*args) + outctx_t__from_ptrval__(ptrval) -> outctx_t + +Help on function print_insn_mnem in module ida_ua: + +print_insn_mnem(*args) + print_insn_mnem(ea) -> str + + + Print instruction mnemonics. + + @param ea: linear address of the instruction (C++: ea_t) + @return: success + +Help on function print_operand in module ida_ua: + +print_operand(*args) + print_operand(ea, n, getn_flags=0, newtype=None) -> str + + + Generate text representation for operand #n. This function will + generate the text representation of the specified operand (includes + color codes.) + + @param ea: the item address (instruction or data) (C++: ea_t) + @param n: operand number (0,1,2...). meaningful only for instructions + (C++: int) + @param getn_flags (C++: int) + @param newtype: if specified, print the operand using the specified + type (C++: struct printop_t *) + @return: success + +=== ida_ua EPYDOC INJECTIONS === +ida_ua.FCBF_CONT +""" +don't stop on decoding, or any other kind of error +""" + +ida_ua.FCBF_DELIM +""" +add the 'ash'-specified delimiters around the generated data. Note: if +those are not defined and the INFFL_ALLASM is not set, +'format_charlit()' will return an error +""" + +ida_ua.FCBF_ERR_REPL +""" +of a hex representation of the problematic byte + +in case of an error, use a CP_REPLCHAR instead +""" + +ida_ua.FCBF_FF_LIT +""" +in case of codepoints == 0xFF, use it as-is (i.e., LATIN SMALL LETTER +Y WITH DIAERESIS) If both this, and FCBF_REPL are specified, this will +take precedence +""" + +ida_ua.INSN_64BIT +""" +belongs to 64bit segment? +""" + +ida_ua.INSN_MACRO +""" +macro instruction +""" + +ida_ua.INSN_MODMAC +""" +may modify the database to make room for the macro insn +""" + +ida_ua.OF_NO_BASE_DISP +""" +base displacement doesn't exist. meaningful only for 'o_displ' type. +if set, base displacement ( 'op_t::addr' ) doesn't exist. +""" + +ida_ua.OF_NUMBER +""" +the operand can be converted to a number only +""" + +ida_ua.OF_OUTER_DISP +""" +outer displacement exists. meaningful only for 'o_displ' type. if set, +outer displacement ( 'op_t::value' ) exists. +""" + +ida_ua.OF_SHOW +""" +should the operand be displayed? +""" + +ida_ua.OOFS_IFSIGN +""" +output sign if needed +""" + +ida_ua.OOFS_NEEDSIGN +""" +always out sign (+-) +""" + +ida_ua.OOFS_NOSIGN +""" +don't output sign, forbid the user to change the sign +""" + +ida_ua.OOFW_16 +""" +16 bit width +""" + +ida_ua.OOFW_24 +""" +24 bit width +""" + +ida_ua.OOFW_32 +""" +32 bit width +""" + +ida_ua.OOFW_64 +""" +64 bit width +""" + +ida_ua.OOFW_8 +""" +8 bit width +""" + +ida_ua.OOFW_IMM +""" +take from x.dtype +""" + +ida_ua.OOF_ADDR +""" +output x.addr, otherwise x.value +""" + +ida_ua.OOF_ANYSERIAL +""" +if enum: select first available serial +""" + +ida_ua.OOF_NOBNOT +""" +prohibit use of binary not +""" + +ida_ua.OOF_NUMBER +""" +always as a number +""" + +ida_ua.OOF_OUTER +""" +output outer operand +""" + +ida_ua.OOF_SIGNED +""" +output as signed if < 0 +""" + +ida_ua.OOF_SIGNMASK +""" +sign symbol (+/-) output +""" + +ida_ua.OOF_SPACES +""" +currently works only for floating point numbers + +do not suppress leading spaces +""" + +ida_ua.OOF_WIDTHMASK +""" +width of value in bits +""" + +ida_ua.OOF_ZSTROFF +""" +meaningful only if is_stroff(uFlag) append a struct field name if the +field offset is zero? if 'AFL_ZSTROFF' is set, then this flag is +ignored. +""" + +ida_ua.PACK_FORM_DEF +""" +(! 'o_reg' + 'dt_packreal' ) + +packed factor defined. +""" + +ida_ua.dt_bitfild +""" +bit field (mc680x0) +""" + +ida_ua.dt_byte +""" +8 bit integer +""" + +ida_ua.dt_byte16 +""" +128 bit integer +""" + +ida_ua.dt_byte32 +""" +256 bit integer +""" + +ida_ua.dt_byte64 +""" +512 bit integer +""" + +ida_ua.dt_code +""" +ptr to code (not used?) +""" + +ida_ua.dt_double +""" +8 byte floating point +""" + +ida_ua.dt_dword +""" +32 bit integer +""" + +ida_ua.dt_float +""" +4 byte floating point +""" + +ida_ua.dt_fword +""" +48 bit +""" + +ida_ua.dt_half +""" +2-byte floating point +""" + +ida_ua.dt_ldbl +""" +long double (which may be different from tbyte) +""" + +ida_ua.dt_packreal +""" +packed real format for mc68040 +""" + +ida_ua.dt_qword +""" +64 bit integer +""" + +ida_ua.dt_string +""" +pointer to asciiz string +""" + +ida_ua.dt_tbyte +""" +variable size (\\ph{tbyte_size}) floating point +""" + +ida_ua.dt_unicode +""" +pointer to unicode string +""" + +ida_ua.dt_void +""" +none +""" + +ida_ua.dt_word +""" +16 bit integer +""" +=== ida_ua EPYDOC INJECTIONS END === +Help on function add_cref in module ida_xref: + +add_cref(*args) + add_cref(frm, to, type) -> bool + + + Create a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param type: cross-reference type (C++: cref_t) + @return: success + +Help on function add_dref in module ida_xref: + +add_dref(*args) + add_dref(frm, to, type) -> bool + + + Create a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + @param type: cross-reference type (C++: dref_t) + @return: success (may fail if user-defined xref exists from->to) + +Help on function calc_switch_cases in module ida_xref: + +calc_switch_cases(*args) + calc_switch_cases(ea, si) -> cases_and_targets_t + + + Get information about a switch's cases. + + The returned information can be used as follows: + + for idx in range(len(results.cases)): + cur_case = results.cases[idx] + for cidx in range(len(cur_case)): + print("case: %d" % cur_case[cidx]) + print(" goto 0x%x" % results.targets[idx]) + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: a structure with 2 members: 'cases', and 'targets'. + +Help on class cases_and_targets_t in module ida_xref: + +class cases_and_targets_t(__builtin__.object) + | Proxy of C++ cases_and_targets_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cases_and_targets_t + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cases + | cases_and_targets_t_cases_get(self) -> casevec_t + | + | targets + | cases_and_targets_t_targets_get(self) -> eavec_t * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_cases_and_targets_t(self) + +Help on class casevec_t in module ida_xref: + +class casevec_t(__builtin__.object) + | Proxy of C++ qvector< qvector< sval_t > > class. + | + | Methods defined here: + | + | __eq__(self, *args) + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) + | __getitem__(self, i) -> qvector< signed-ea-like-numeric-type > const &↗ + | + | __init__(self, *args) + | __init__(self) -> casevec_t + | __init__(self, x) -> casevec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) + | + | __ne__(self, *args) + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) + | __setitem__(self, i, v) + | + | _del(self, *args) + | _del(self, x) -> bool + | + | add_unique(self, *args) + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) + | + | at = __getitem__(self, *args) + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) + | begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | capacity(self, *args) + | capacity(self) -> size_t + | + | clear(self, *args) + | clear(self) + | + | empty(self, *args) + | empty(self) -> bool + | + | end(self, *args) + | end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | erase(self, *args) + | erase(self, it) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | erase(self, first, last) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | + | extract(self, *args) + | extract(self) -> qvector< signed-ea-like-numeric-type > *↗ + | + | find(self, *args) + | find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) + | grow(self, x=qvector< signed-ea-like-numeric-type >())↗ + | + | has(self, *args) + | has(self, x) -> bool + | + | inject(self, *args) + | inject(self, s, len) + | + | insert(self, *args) + | insert(self, it, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | + | pop_back(self, *args) + | pop_back(self) + | + | push_back(self, *args) + | push_back(self, x) + | push_back(self) -> qvector< signed-ea-like-numeric-type > &↗ + | + | qclear(self, *args) + | qclear(self) + | + | reserve(self, *args) + | reserve(self, cnt) + | + | resize(self, *args) + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) + | size(self) -> size_t + | + | swap(self, *args) + | swap(self, r) + | + | truncate(self, *args) + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_casevec_t(self) + +Help on function create_switch_table in module ida_xref: + +create_switch_table(*args) + create_switch_table(ea, si) -> bool + + + Create switch table from the switch information + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: Boolean + +Help on function create_switch_xrefs in module ida_xref: + +create_switch_xrefs(*args) + create_switch_xrefs(ea, si) -> bool + + + This function creates xrefs from the indirect jump. + + Usually there is no need to call this function directly because the kernel + will call it for switch tables + + Note: Custom switch information are not supported yet. + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: Boolean + +Help on function del_cref in module ida_xref: + +del_cref(*args) + del_cref(frm, to, expand) -> int + + + Delete a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param expand: policy to delete the referenced instruction 1: plan + to delete the referenced instruction if it has no more + references. 0: don't delete the referenced + instruction even if no more cross-references point to + it (C++: bool) + +Help on function del_dref in module ida_xref: + +del_dref(*args) + del_dref(frm, to) + + + Delete a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + +Help on function delete_switch_table in module ida_xref: + +delete_switch_table(*args) + delete_switch_table(jump_ea, si) + +Help on function get_first_cref_from in module ida_xref: + +get_first_cref_from(*args) + get_first_cref_from(frm) -> ea_t + + + Get first instruction referenced from the specified instruction. If + the specified instruction passes execution to the next instruction + then the next instruction is returned. Otherwise the lowest referenced + address is returned (remember that xrefs are kept sorted!). + + @return: first referenced address. The lastXR variable contains type + of the reference. If the specified instruction doesn't + reference to other instructions then returns BADADDR . + +Help on function get_first_cref_to in module ida_xref: + +get_first_cref_to(*args) + get_first_cref_to(to) -> ea_t + + + Get first instruction referencing to the specified instruction. If the + specified instruction may be executed immediately after its previous + instruction then the previous instruction is returned. Otherwise the + lowest referencing address is returned. (remember that xrefs are kept + sorted!). + + @param to: linear address of referenced instruction (C++: ea_t) + @return: linear address of the first referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_first_dref_from in module ida_xref: + +get_first_dref_from(*args) + get_first_dref_from(frm) -> ea_t + + + Get first data referenced from the specified address. + + @return: linear address of first (lowest) data referenced from the + specified address. The lastXR variable contains type of the + reference. Return BADADDR if the specified instruction/data + doesn't reference to anything. + +Help on function get_first_dref_to in module ida_xref: + +get_first_dref_to(*args) + get_first_dref_to(to) -> ea_t + + + Get address of instruction/data referencing to the specified data. + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_first_fcref_from in module ida_xref: + +get_first_fcref_from(*args) + get_first_fcref_from(frm) -> ea_t + +Help on function get_first_fcref_to in module ida_xref: + +get_first_fcref_to(*args) + get_first_fcref_to(to) -> ea_t + +Help on function get_next_cref_from in module ida_xref: + +get_next_cref_from(*args) + get_next_cref_from(frm, current) -> ea_t + + + Get next instruction referenced from the specified instruction. + + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_from() or + previous call to get_next_cref_from() functions. + (C++: ea_t) + @return: next referenced address or BADADDR . The lastXR variable + contains type of the reference. + +Help on function get_next_cref_to in module ida_xref: + +get_next_cref_to(*args) + get_next_cref_to(to, current) -> ea_t + + + Get next instruction referencing to the specified instruction. + + @param to: linear address of referenced instruction (C++: ea_t) + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_to() or previous + call to get_next_cref_to() functions. (C++: ea_t) + @return: linear address of the next referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_next_dref_from in module ida_xref: + +get_next_dref_from(*args) + get_next_dref_from(frm, current) -> ea_t + + + Get next data referenced from the specified address. + + @param current: linear address of current referenced data. This value + is returned by get_first_dref_from() or previous + call to get_next_dref_from() functions. (C++: ea_t) + @return: linear address of next data or BADADDR . The lastXR + variable contains type of the reference + +Help on function get_next_dref_to in module ida_xref: + +get_next_dref_to(*args) + get_next_dref_to(to, current) -> ea_t + + + Get address of instruction/data referencing to the specified data + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @param current: current linear address. This value is returned by + get_first_dref_to() or previous call to + get_next_dref_to() functions. (C++: ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_next_fcref_from in module ida_xref: + +get_next_fcref_from(*args) + get_next_fcref_from(frm, current) -> ea_t + +Help on function get_next_fcref_to in module ida_xref: + +get_next_fcref_to(*args) + get_next_fcref_to(to, current) -> ea_t + +Help on function has_external_refs in module ida_xref: + +has_external_refs(*args) + has_external_refs(pfn, ea) -> bool + + + Has a location external to the function references? + + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on class xrefblk_t in module ida_xref: + +class xrefblk_t(__builtin__.object) + | Proxy of C++ xrefblk_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> xrefblk_t + | + | __repr__ = _swig_repr(self) + | + | first_from(self, *args) + | first_from(self, _from, flags) -> bool + | + | first_to(self, *args) + | first_to(self, _to, flags) -> bool + | + | next_from(self, *args) + | next_from(self) -> bool + | next_from(self, _from, _to, flags) -> bool + | + | next_to(self, *args) + | next_to(self) -> bool + | next_to(self, _from, _to, flags) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | frm + | xrefblk_t_frm_get(self) -> ea_t + | + | iscode + | xrefblk_t_iscode_get(self) -> uchar + | + | thisown + | The membership flag + | + | to + | xrefblk_t_to_get(self) -> ea_t + | + | type + | xrefblk_t_type_get(self) -> uchar + | + | user + | xrefblk_t_user_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __swig_destroy__ = + | delete_xrefblk_t(self) + +Help on function xrefchar in module ida_xref: + +xrefchar(*args) + xrefchar(xrtype) -> char + + + Get character describing the xref type. + + @param xrtype: combination of Cross-Reference type flags and a + cref_t of dref_t value (C++: char) + +=== ida_xref EPYDOC INJECTIONS === +ida_xref.XREF_ALL +""" +return all references +""" + +ida_xref.XREF_BASE +""" +Reference to the base part of an offset. +""" + +ida_xref.XREF_DATA +""" +return data references only +""" + +ida_xref.XREF_FAR +""" +don't return ordinary flow xrefs +""" + +ida_xref.XREF_MASK +""" +Mask to get xref type. +""" + +ida_xref.XREF_PASTEND +""" +Reference is past item. This bit may be passed to 'add_dref()' +functions but it won't be saved in the database. It will prevent the +destruction of eventual alignment directives. +""" + +ida_xref.XREF_TAIL +""" +Reference to tail byte in extrn symbols. +""" + +ida_xref.XREF_USER +""" +User specified xref. This xref will not be deleted by IDA. This bit +should be combined with the existing xref types ( 'cref_t' & 'dref_t' +) Cannot be used for fl_F xrefs +""" +=== ida_xref EPYDOC INJECTIONS END === +Help on function AddSeg in module idc: + +AddSeg(startea, endea, base, use32, align, comb) + +Help on function AutoMark in module idc: + +AutoMark(ea, qtype) + Plan to analyze an address + +Help on class DeprecatedIDCError in module idc: + +class DeprecatedIDCError(exceptions.Exception) + | Exception for deprecated function calls + | + | Method resolution order: + | DeprecatedIDCError + | exceptions.Exception + | exceptions.BaseException + | __builtin__.object + | + | Data descriptors defined here: + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Methods inherited from exceptions.Exception: + | + | __init__(...) + | x.__init__(...) initializes x; see help(type(x)) for signature + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from exceptions.Exception: + | + | __new__ = + | T.__new__(S, ...) -> a new object with type S, a subtype of T + | + | ---------------------------------------------------------------------- + | Methods inherited from exceptions.BaseException: + | + | __delattr__(...) + | x.__delattr__('name') <==> del x.name + | + | __getattribute__(...) + | x.__getattribute__('name') <==> x.name + | + | __getitem__(...) + | x.__getitem__(y) <==> x[y] + | + | __getslice__(...) + | x.__getslice__(i, j) <==> x[i:j] + | + | Use of negative indices is not supported. + | + | __reduce__(...) + | + | __repr__(...) + | x.__repr__() <==> repr(x) + | + | __setattr__(...) + | x.__setattr__('name', value) <==> x.name = value + | + | __setstate__(...) + | + | __str__(...) + | x.__str__() <==> str(x) + | + | __unicode__(...) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from exceptions.BaseException: + | + | __dict__ + | + | args + | + | message + +Help on function EVAL_FAILURE in module idc: + +EVAL_FAILURE(code) + Check the result of eval_idc() for evaluation failures + + @param code: result of eval_idc() + + @return: True if there was an evaluation error + +Help on function get_cmt in module ida_bytes: + +get_cmt(*args) + get_cmt(ea, rptble) -> str + + + Get an indented comment. + + @param ea: linear address. may point to tail byte, the function will + find start of the item (C++: ea_t) + @param rptble: get repeatable comment? (C++: bool) + @return: size of comment or -1 + +Help on function GetDisasm in module idc: + +GetDisasm(ea) + Get disassembly line + + @param ea: linear address of instruction + + @return: "" - could not decode instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function GetDouble in module idc: + +GetDouble(ea) + Get value of a floating point number (8 bytes) + This function assumes number stored using IEEE format + and in the same endianness as integers. + + @param ea: linear address + + @return: double + +Help on function GetFloat in module idc: + +GetFloat(ea) + Get value of a floating point number (4 bytes) + This function assumes number stored using IEEE format + and in the same endianness as integers. + + @param ea: linear address + + @return: float + +Help on function GetLocalType in module idc: + +GetLocalType(ordinal, flags) + Retrieve a local type declaration + @param flags: any of PRTYPE_* constants + @return: local type as a C declaration or "" + +Help on function LoadFile in module idc: + +LoadFile(filepath, pos, ea, size) + Load file into IDA database + + @param filepath: path to input file + @param pos: position in the file + @param ea: linear address to load + @param size: number of bytes to load + + @return: 0 - error, 1 - ok + +Help on function MakeVar in module idc: + +MakeVar(ea) + Mark the location as "variable" + + @param ea: address to mark + + @return: None + + @note: All that IDA does is to mark the location as "variable". + Nothing else, no additional analysis is performed. + This function may disappear in the future. + +Help on function SaveFile in module idc: + +SaveFile(filepath, pos, ea, size) + Save from IDA database to file + + @param filepath: path to output file + @param pos: position in the file + @param ea: linear address to save from + @param size: number of bytes to save + + @return: 0 - error, 1 - ok + +Help on function SetPrcsr in module idc: + +SetPrcsr(processor) + +Help on function SetType in module idc: + +SetType(ea, newtype) + Set type of function/variable + + @param ea: the address of the object + @param newtype: the type string in C declaration form. + Must contain the closing ';' + if specified as an empty string, then the + item associated with 'ea' will be deleted. + + @return: 1-ok, 0-failed. + +Help on function SizeOf in module idc: + +SizeOf(typestr) + Returns the size of the type. It is equivalent to IDC's sizeof(). + Use name, tp, fld = idc.parse_decl() ; SizeOf(tp) to retrieve the size + @return: -1 if typestring is not valid otherwise the size of the type + +Help on function _IDC_GetAttr in module idc: + +_IDC_GetAttr(obj, attrmap, attroffs) + Internal function to generically get object attributes + Do not use unless you know what you are doing + +Help on function _IDC_SetAttr in module idc: + +_IDC_SetAttr(obj, attrmap, attroffs, value) + Internal function to generically set object attributes + Do not use unless you know what you are doing + +Help on function __DbgValue in module idc: + +__DbgValue(ea, len) + +Help on function __GetArrayById in module idc: + +__GetArrayById(array_id) + Get an array, by its ID. + + This (internal) wrapper around 'idaaip.netnode(array_id)' + will ensure a certain safety around the retrieval of + arrays (by catching quite unexpect[ed|able] exceptions, + and making sure we don't create & use `transient' netnodes). + + @param array_id: A positive, valid array ID. + +Help on class __dummy_netnode in module idc: + +class __dummy_netnode(__builtin__.object) + | Implements, in an "always failing" fashion, the + | netnode functions that are necessary for the + | array-related functions. + | + | The sole purpose of this singleton class is to + | serve as a placeholder for netnode-manipulating + | functions, that don't want to each have to perform + | checks on the existence of the netnode. + | (..in other words: it avoids a bunch of if/else's). + | + | See __GetArrayById() for more info. + | + | Methods defined here: + | + | altdel(self, *args) + | + | altfirst(self, *args) + | + | altlast(self, *args) + | + | altnext(self, *args) + | + | altprev(self, *args) + | + | altset(self, *args) + | + | altval(self, *args) + | + | hashdel(self, *args) + | + | hashfirst(self, *args) + | + | hashlast(self, *args) + | + | hashnext(self, *args) + | + | hashprev(self, *args) + | + | hashset(self, *args) + | + | hashset_buf(self, *args) + | + | hashset_idx(self, *args) + | + | hashstr(self, *args) + | + | hashstr_buf(self, *args) + | + | hashval(self, *args) + | + | hashval_long(self, *args) + | + | index(self, *args) + | + | kill(self, *args) + | + | rename(self, *args) + | + | supdel(self, *args) + | + | supfirst(self, *args) + | + | suplast(self, *args) + | + | supnext(self, *args) + | + | supprev(self, *args) + | + | supset(self, *args) + | + | supval(self, *args) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | instance = + +Help on function __l2m1 in module idc: + +__l2m1(v) + Long to minus 1: If the 'v' appears to be the + 'signed long' version of -1, then return -1. + Otherwise, return 'v'. + +Help on function __warn_once_deprecated_proto_confusion in module idc: + +__warn_once_deprecated_proto_confusion(what, alternative) + +Help on function _get_modules in module idc: + +_get_modules() + INTERNAL: Enumerate process modules + +Help on function add_auto_stkpnt in module idc: + +add_auto_stkpnt(func_ea, ea, delta) + Add automatical SP register change point + @param func_ea: function start + @param ea: linear address where SP changes + usually this is the end of the instruction which + modifies the stack pointer (insn.ea+insn.size) + @param delta: difference between old and new values of SP + @return: 1-ok, 0-failed + +Help on function add_bpt in module ida_dbg: + +add_bpt(*args) + add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + add_bpt(bpt) -> bool + + + Add a new breakpoint in the debugged process. \sq{Type, Synchronous + function - available as request, Notification, none (synchronous + function)}Only one breakpoint can exist at a given address. + + @param ea: any address in the process memory space. Depending on the + architecture, hardware breakpoints always be setup at + random address. For example, on x86, hardware breakpoints + should be aligned depending on their size. Moreover, on the + x86 architecture, it is impossible to setup more than 4 + hardware breakpoints. (C++: ea_t) + @param size: size of the breakpoint (irrelevant for software + breakpoints): As for the address, hardware breakpoints + can't always be setup with random size. (C++: asize_t) + @param type: type of the breakpoint ( BPT_SOFT for software + breakpoint) special case BPT_DEFAULT ( BPT_SOFT | + BPT_EXEC ): try to add instruction breakpoint of the + appropriate type as follows: software bpt if supported, + hwbpt otherwise (C++: bpttype_t) + +Help on function add_cref in module ida_xref: + +add_cref(*args) + add_cref(frm, to, type) -> bool + + + Create a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param type: cross-reference type (C++: cref_t) + @return: success + +Help on function add_default_til in module idc: + +add_default_til(name) + Load a type library + + @param name: name of type library. + @return: 1-ok, 0-failed. + +Help on function add_dref in module ida_xref: + +add_dref(*args) + add_dref(frm, to, type) -> bool + + + Create a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + @param type: cross-reference type (C++: dref_t) + @return: success (may fail if user-defined xref exists from->to) + +Help on function add_entry in module ida_entry: + +add_entry(*args) + add_entry(ord, ea, name, makecode, flags=0) -> bool + + + Add an entry point to the list of entry points. + + @param ord: ordinal number if ordinal number is equal to 'ea' then + ordinal is not used (C++: uval_t) + @param ea: linear address (C++: ea_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to the regular + comment. If name == NULL, then the old name will be + retained. (C++: const char *) + @param makecode: should the kernel convert bytes at the entry point to + instruction(s) (C++: bool) + @param flags: See AEF_* (C++: int) + @return: success (currently always true) + +Help on function add_enum in module idc: + +add_enum(idx, name, flag) + Add a new enum type + + @param idx: serial number of the new enum. + If another enum with the same serial number + exists, then all enums with serial + numbers >= the specified idx get their + serial numbers incremented (in other words, + the new enum is put in the middle of the list of enums). + + If idx >= get_enum_qty() or idx == idaapi.BADNODE + then the new enum is created at the end of + the list of enums. + + @param name: name of the enum. + @param flag: flags for representation of numeric constants + in the definition of enum. + + @return: id of new enum or BADADDR + +Help on function add_enum_member in module idc: + +add_enum_member(enum_id, name, value, bmask) + Add a member of enum - a symbolic constant + + @param enum_id: id of enum + @param name: name of symbolic constant. Must be unique in the program. + @param value: value of symbolic constant. + @param bmask: bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + all bits set in value should be set in bmask too + + @return: 0-ok, otherwise error code (one of ENUM_MEMBER_ERROR_*) + +Help on function add_func in module ida_funcs: + +add_func(*args) + add_func(ea1, ea2=BADADDR) -> bool + + + Add a new function. If the function end address is 'BADADDR' , then + IDA will try to determine the function bounds by calling + find_func_bounds(..., 'FIND_FUNC_DEFINE' ). + + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @return: success + +Help on function add_hidden_range in module ida_bytes: + +add_hidden_range(*args) + add_hidden_range(ea1, ea2, description, header, footer, color) -> bool + + + Mark a range of addresses as hidden. The range will be created in the + invisible state with the default color + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (C++: ea_t) + @param description: range parameters (C++: const char *) + @param header: range parameters (C++: const char *) + @param footer: range parameters (C++: const char *) + @param color (C++: bgcolor_t) + @return: success + +Help on function add_idc_hotkey in module ida_kernwin: + +add_idc_hotkey(*args) + add_idc_hotkey(hotkey, idcfunc) -> int + + + Add hotkey for IDC function ( 'ui_add_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + @param idcfunc: IDC function name (C++: const char *) + @return: IDC hotkey error codes + +Help on function add_segm_ex in module idc: + +add_segm_ex(startea, endea, base, use32, align, comb, flags) + Create a new segment + + @param startea: linear address of the start of the segment + @param endea: linear address of the end of the segment + this address will not belong to the segment + 'endea' should be higher than 'startea' + @param base: base paragraph or selector of the segment. + a paragraph is 16byte memory chunk. + If a selector value is specified, the selector should be + already defined. + @param use32: 0: 16bit segment, 1: 32bit segment, 2: 64bit segment + @param align: segment alignment. see below for alignment values + @param comb: segment combination. see below for combination values. + @param flags: combination of ADDSEG_... bits + + @return: 0-failed, 1-ok + +Help on function add_sourcefile in module ida_lines: + +add_sourcefile(*args) + add_sourcefile(ea1, ea2, filename) -> bool + + + Mark a range of address as belonging to a source file. An address + range may belong only to one source file. A source file may be + represented by several address ranges. + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (excluded) + (C++: ea_t) + @param filename: name of source file. (C++: const char *) + @return: success + +Help on function add_struc in module idc: + +add_struc(index, name, is_union) + Define a new structure type + + @param index: index of new structure type + If another structure has the specified index, + then index of that structure and all other + structures will be incremented, freeing the specifed + index. If index is == -1, then the biggest index + number will be used. + See get_first_struc_idx() for the explanation of + structure indices and IDs. + @param name: name of the new structure type. + @param is_union: 0: structure + 1: union + + @return: -1 if can't define structure type because of + bad structure name: the name is ill-formed or is + already used in the program. + otherwise returns ID of the new structure type + +Help on function add_struc_member in module idc: + +add_struc_member(sid, name, offset, flag, typeid, nbytes, target=-1, tdelta=0, reftype=2) + Add structure member + + @param sid: structure type ID + @param name: name of the new member + @param offset: offset of the new member + -1 means to add at the end of the structure + @param flag: type of the new member. Should be one of + FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA + @param typeid: if is_struct(flag) then typeid specifies the structure id for the member + if is_off0(flag) then typeid specifies the offset base. + if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). + if is_stroff(flag) then typeid specifies the structure id + if is_enum(flag) then typeid specifies the enum id + if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) + Otherwise typeid should be -1. + @param nbytes: number of bytes in the new member + + @param target: target address of the offset expr. You may specify it as + -1, ida will calculate it itself + @param tdelta: offset target delta. usually 0 + @param reftype: see REF_... definitions + + @note: The remaining arguments are allowed only if is_off0(flag) and you want + to specify a complex offset expression + + @return: 0 - ok, otherwise error code (one of STRUC_ERROR_*) + +Help on function add_user_stkpnt in module ida_frame: + +add_user_stkpnt(*args) + add_user_stkpnt(ea, delta) -> bool + + + Add user-defined SP register change point. + + @param ea: linear address where SP changes (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function append_func_tail in module idc: + +append_func_tail(funcea, ea1, ea2) + Append a function chunk to the function + + @param funcea: any address in the function + @param ea1: start of function tail + @param ea2: end of function tail + @return: 0 if failed, 1 if success + + @note: If a chunk exists at the specified addresses, it must have exactly + the specified boundaries + +Help on function apply_type in module idc: + +apply_type(ea, py_type, flags=1) + Apply the specified type to the address + + @param ea: the address of the object + @param py_type: typeinfo tuple (type, fields) as get_tinfo() returns + or tuple (name, type, fields) as parse_decl() returns + or None + if specified as None, then the + item associated with 'ea' will be deleted. + @param flags: combination of TINFO_... constants or 0 + @return: Boolean + +Help on function ask_seg in module ida_kernwin: + +ask_seg(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_yn in module ida_kernwin: + +ask_yn(*args) + ask_yn(deflt, format) -> int + + + Display a dialog box and get choice from "Yes", "No", "Cancel". + + @param deflt: default choice: one of Button IDs (C++: int) + @param format: The question in printf() style format (C++: const char + *) + @return: the selected button (one of Button IDs ). Esc key returns + ASKBTN_CANCEL . + +Help on function atoa in module idc: + +atoa(ea) + Convert address value to a string + Return address in the form 'seg000:1234' + (the same as in line prefixes) + + @param ea: address to format + +Help on function atol in module idc: + +atol(s) + +Help on function attach_process in module ida_dbg: + +attach_process(*args) + attach_process(pid=pid_t(-1), event_id=-1) -> int + + + Attach the debugger to a running process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_attach' + }This function shouldn't be called as a request if 'NO_PROCESS' is + used. + + @param pid: PID of the process to attach to. If NO_PROCESS , a dialog + box will interactively ask the user for the process to + attach to. (C++: pid_t) + @param event_id (C++: int) + +Help on function auto_mark_range in module ida_auto: + +auto_mark_range(*args) + auto_mark_range(start, end, type) + + + Put range of addresses into a queue. 'start' may be higher than 'end', + the kernel will swap them in this case. 'end' doesn't belong to the + range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_unmark in module ida_auto: + +auto_unmark(*args) + auto_unmark(start, end, type) + + + Remove range of addresses from a queue. 'start' may be higher than + 'end', the kernel will swap them in this case. 'end' doesn't belong to + the range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_wait in module ida_auto: + +auto_wait(*args) + auto_wait() -> bool + + + Process everything in the queues and return true. + + @return: false if the user clicked cancel. (the wait box must be + displayed by the caller if desired) + +Help on function batch in module idc: + +batch(batch) + Enable/disable batch mode of operation + + @param batch: batch mode + 0 - ida will display dialog boxes and wait for the user input + 1 - ida will not display dialog boxes, warnings, etc. + + @return: old balue of batch flag + +Help on function byte_value in module idc: + +byte_value(F) + Get byte value from flags + Get value of byte provided that the byte is initialized. + This macro works ok only for 8-bit byte machines. + +Help on function calc_gtn_flags in module ida_name: + +calc_gtn_flags(fromaddr, ea) + Calculate flags for get_ea_name() function + + @param fromaddr: the referring address. May be BADADDR. + @param ea: linear address + + @return: flags + +Help on function call_system in module idc: + +call_system(command) + Execute an OS command. + + @param command: command line to execute + + @return: error code from OS + + @note: + IDA will wait for the started program to finish. + In order to start the command in parallel, use OS methods. + For example, you may start another program in parallel using + "start" command. + +Help on function can_exc_continue in module idc: + +can_exc_continue() + Can it continue after EXCEPTION event? + + @return: boolean + +Help on function check_bpt in module ida_dbg: + +check_bpt(*args) + check_bpt(ea) -> int + + + Check the breakpoint at the specified address. + + @param ea (C++: ea_t) + @return: one of Breakpoint status codes + +Help on function choose_func in module idc: + +choose_func(title) + Ask the user to select a function + + Arguments: + + @param title: title of the dialog box + + @return: -1 - user refused to select a function + otherwise returns the selected function start address + +Help on function clear_trace in module idc: + +clear_trace(filename) + Clear the current trace buffer + +Help on function create_align in module ida_bytes: + +create_align(*args) + create_align(ea, length, alignment) -> bool + + + Alignment: 0 or 2..32. If it is 0, is will be calculated. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param alignment (C++: int) + +Help on function create_array in module idc: + +create_array(name) + Create array. + + @param name: The array name. + + @return: -1 in case of failure, a valid array_id otherwise. + +Help on function create_byte in module idc: + +create_byte(ea) + Convert the current item to a byte + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_custdata in module ida_bytes: + +create_custdata(*args) + create_custdata(ea, length, dtid, fid, force=False) -> bool + + + Convert to custom data type. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param dtid (C++: int) + @param fid (C++: int) + @param force (C++: bool) + +Help on function create_data in module ida_bytes: + +create_data(*args) + create_data(ea, dataflag, size, tid) -> bool + + + Convert to data (byte, word, dword, etc). This function may be used to + create arrays. + + @param ea: linear address (C++: ea_t) + @param dataflag: type of data. Value of function byte_flag() , + word_flag() , etc. (C++: flags_t) + @param size: size of array in bytes. should be divisible by the size + of one item of the specified type. for variable sized + items it can be specified as 0, and the kernel will try + to calculate the size. (C++: asize_t) + @param tid: type id. If the specified type is a structure, then tid is + structure id. Otherwise should be BADNODE . (C++: tid_t) + @return: success + +Help on function create_double in module idc: + +create_double(ea) + Convert the current item to a double floating point (8 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_dword in module idc: + +create_dword(ea) + Convert the current item to a double word (4 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_float in module idc: + +create_float(ea) + Convert the current item to a floating point (4 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_insn in module ida_ua: + +create_insn(*args) + create_insn(ea, out=None) -> int + + + Create an instruction at the specified address. This function checks + if an instruction is present at the specified address and will try to + create one if there is none. It will fail if there is a data item or + other items hindering the creation of the new instruction. This + function will also fill the 'out' structure. + + @param ea: linear address (C++: ea_t) + @param out: the resulting instruction (C++: insn_t *) + @return: the length of the instruction or 0 + +Help on function create_oword in module idc: + +create_oword(ea) + Convert the current item to an octa word (16 bytes/128 bits) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_pack_real in module idc: + +create_pack_real(ea) + Convert the current item to a packed real (10 or 12 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_qword in module idc: + +create_qword(ea) + Convert the current item to a quadro word (8 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_strlit in module idc: + +create_strlit(ea, endea) + Create a string. + + This function creates a string (the string type is determined by the + value of get_inf_attr(INF_STRTYPE)) + + @param ea: linear address + @param endea: ending address of the string (excluded) + if endea == BADADDR, then length of string will be calculated + by the kernel + + @return: 1-ok, 0-failure + + @note: The type of an existing string is returned by get_str_type() + +Help on function create_struct in module idc: + +create_struct(ea, size, strname) + Convert the current item to a structure instance + + @param ea: linear address + @param size: structure size in bytes. -1 means that the size + will be calculated automatically + @param strname: name of a structure type + + @return: 1-ok, 0-failure + +Help on function create_tbyte in module idc: + +create_tbyte(ea) + Convert the current item to a tbyte (10 or 12 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_word in module idc: + +create_word(ea) + Convert the current item to a word (2 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_yword in module idc: + +create_yword(ea) + Convert the current item to a ymm word (32 bytes/256 bits) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function define_exception in module ida_dbg: + +define_exception(*args) + define_exception(code, name, desc, flags) -> char const * + + + Convenience function: define new exception code. + + @param code: exception code (cannot be 0) (C++: uint) + @param name: exception name (cannot be empty or NULL) (C++: const char + *) + @param desc: exception description (maybe NULL) (C++: const char *) + @param flags: combination of Exception info flags (C++: int) + @return: failure message or NULL. You must call store_exceptions() + if this function succeeds + +Help on function define_local_var in module idc: + +define_local_var(start, end, location, name) + Create a local variable + + @param start: start of address range for the local variable + @param end: end of address range for the local variable + @param location: the variable location in the "[bp+xx]" form where xx is + a number. The location can also be specified as a + register name. + @param name: name of the local variable + + @return: 1-ok, 0-failure + + @note: For the stack variables the end address is ignored. + If there is no function at 'start' then this function. + will fail. + +Help on function del_array_element in module idc: + +del_array_element(tag, array_id, idx) + Delete an array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of an element. + + @return: 1 in case of success, 0 otherwise. + +Help on function del_bpt in module ida_dbg: + +del_bpt(*args) + del_bpt(ea) -> bool + del_bpt(bptloc) -> bool + + + Delete an existing breakpoint in the debugged process. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + +Help on function del_cref in module ida_xref: + +del_cref(*args) + del_cref(frm, to, expand) -> int + + + Delete a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param expand: policy to delete the referenced instruction 1: plan + to delete the referenced instruction if it has no more + references. 0: don't delete the referenced + instruction even if no more cross-references point to + it (C++: bool) + +Help on function del_dref in module ida_xref: + +del_dref(*args) + del_dref(frm, to) + + + Delete a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + +Help on function del_enum in module ida_enum: + +del_enum(*args) + del_enum(id) + + + Delete an enum type. + + + @param id (C++: enum_t) + +Help on function del_enum_member in module idc: + +del_enum_member(enum_id, value, serial, bmask) + Delete a member of enum - a symbolic constant + + @param enum_id: id of enum + @param value: value of symbolic constant. + @param serial: serial number of the constant in the + enumeration. See op_enum() for for details. + @param bmask: bitmask of the constant ordinary enums accept + only ida_enum.DEFMASK as a bitmask + + @return: 1-ok, 0-failed + +Help on function del_extra_cmt in module ida_lines: + +del_extra_cmt(*args) + del_extra_cmt(ea, what) + +Help on function del_fixup in module ida_fixup: + +del_fixup(*args) + del_fixup(source) + + + Delete fixup information. + + + @param source (C++: ea_t) + +Help on function del_func in module ida_funcs: + +del_func(*args) + del_func(ea) -> bool + + + Delete a function. + + @param ea: any address in the function entry chunk (C++: ea_t) + @return: success + +Help on function del_hash_string in module idc: + +del_hash_string(hash_id, key) + Delete a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element + + @return: 1 upon success, 0 otherwise. + +Help on function del_hidden_range in module ida_bytes: + +del_hidden_range(*args) + del_hidden_range(ea) -> bool + + + Delete hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: success + +Help on function del_idc_hotkey in module ida_kernwin: + +del_idc_hotkey(*args) + del_idc_hotkey(hotkey) -> bool + + + Delete IDC function hotkey ( 'ui_del_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + +Help on function del_items in module ida_bytes: + +del_items(*args) + del_items(ea, flags=0, nbytes=1, may_destroy=None) -> bool + + + Convert item (instruction/data) to unexplored bytes. The whole item + (including the head and tail bytes) will be destroyed. It is allowed + to pass any address in the item to this function + + @param ea: any address within the first item to delete (C++: ea_t) + @param flags: combination of Unexplored byte conversion flags (C++: + int) + @param nbytes: number of bytes in the range to be undefined (C++: + asize_t) + @param may_destroy: optional routine invoked before deleting a head + item. If callback returns false then item has not + to be deleted and operation fails (C++: + may_destroy_cb_t *) + @return: true on sucessful operation, otherwise false + +Help on function del_segm in module ida_segment: + +del_segm(*args) + del_segm(ea, flags) -> bool + + + Delete a segment. + + @param ea: any address belonging to the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function del_selector in module ida_segment: + +del_selector(*args) + del_selector(selector) + + + Delete mapping of a selector. Be wary of deleting selectors that are + being used in the program, this can make a mess in the segments. + + @param selector: number of selector to remove from the translation + table (C++: sel_t) + +Help on function del_source_linnum in module ida_nalt: + +del_source_linnum(*args) + del_source_linnum(ea) + +Help on function del_sourcefile in module ida_lines: + +del_sourcefile(*args) + del_sourcefile(ea) -> bool + + + Delete information about the source file. + + @param ea: linear address (C++: ea_t) + @return: success + +Help on function del_stkpnt in module idc: + +del_stkpnt(func_ea, ea) + Delete SP register change point + + @param func_ea: function start + @param ea: linear address + @return: 1-ok, 0-failed + +Help on function del_struc in module idc: + +del_struc(sid) + Delete a structure type + + @param sid: structure type ID + + @return: 0 if bad structure type ID is passed + 1 otherwise the structure type is deleted. All data + and other structure types referencing to the + deleted structure type will be displayed as array + of bytes. + +Help on function del_struc_member in module idc: + +del_struc_member(sid, member_offset) + Delete structure member + + @param sid: structure type ID + @param member_offset: offset of the member + + @return: != 0 - ok. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + +Help on function delete_all_segments in module idc: + +delete_all_segments() + Delete all segments, instructions, comments, i.e. everything + except values of bytes. + +Help on function delete_array in module idc: + +delete_array(array_id) + Delete array, by its ID. + + @param array_id: The ID of the array to delete. + +Help on function demangle_name in module idc: + +demangle_name(name, disable_mask) + demangle_name a name + + @param name: name to demangle + @param disable_mask: a mask that tells how to demangle the name + it is a good idea to get this mask using + get_inf_attr(INF_SHORT_DN) or get_inf_attr(INF_LONG_DN) + + @return: a demangled name + If the input name cannot be demangled, returns None + +Help on function detach_process in module ida_dbg: + +detach_process(*args) + detach_process() -> bool + + + Detach the debugger from the debugged process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_detach' } + +Help on function diff_trace_file in module ida_dbg: + +diff_trace_file(*args) + diff_trace_file(nonnul_filename) -> bool + + + Show difference between the current trace and the one from 'filename'. + +Help on function enable_bpt in module ida_dbg: + +enable_bpt(*args) + enable_bpt(ea, enable=True) -> bool + enable_bpt(bptloc, enable=True) -> bool + +Help on function enable_tracing in module idc: + +enable_tracing(trace_level, enable) + Enable step tracing + + @param trace_level: what kind of trace to modify + @param enable: 0: turn off, 1: turn on + + @return: success + +Help on function error in module ida_kernwin: + +error(*args) + error(format) + + + Display a fatal message in a message box and quit IDA + + @param format: message to print + +Help on function eval_idc in module idc: + +eval_idc(expr) + Evaluate an IDC expression + + @param expr: an expression + + @return: the expression value. If there are problems, the returned value will be "IDC_FAILURE: xxx" + where xxx is the error description + + @note: Python implementation evaluates IDC only, while IDC can call other registered languages + +Help on function exit_process in module ida_dbg: + +exit_process(*args) + exit_process() -> bool + + + Terminate the debugging of the current process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_exit' } + +Help on function expand_struc in module idc: + +expand_struc(sid, offset, delta, recalc) + Expand or shrink a structure type + @param id: structure type ID + @param offset: offset in the structure + @param delta: how many bytes to add or remove + @param recalc: recalculate the locations where the structure + type is used + @return: != 0 - ok + +Help on function fclose in module idc: + +fclose(handle) + +Help on function fgetc in module idc: + +fgetc(handle) + +Help on function filelength in module idc: + +filelength(handle) + +Help on function find_binary in module idc: + +find_binary(ea, flag, searchstr, radix=16, from_bc695=False) + +Help on function find_code in module ida_search: + +find_code(*args) + find_code(ea, sflag) -> ea_t + + + Find next code address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_data in module ida_search: + +find_data(*args) + find_data(ea, sflag) -> ea_t + + + Find next data address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_defined in module ida_search: + +find_defined(*args) + find_defined(ea, sflag) -> ea_t + + + Find next ea that is the start of an instruction or data. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_func_end in module idc: + +find_func_end(ea) + Determine a new function boundaries + + @param ea: starting address of a new function + + @return: if a function already exists, then return its end address. + If a function end cannot be determined, the return BADADDR + otherwise return the end address of the new function + +Help on function find_imm in module ida_search: + +find_imm(*args) + find_imm(newEA, sflag, srchValue) -> ea_t + + + Find next immediate operand with the given value. + + + @param newEA (C++: ea_t) + @param sflag (C++: int) + @param srchValue (C++: uval_t) + +Help on function find_selector in module idc: + +find_selector(val) + Find a selector which has the specifed value + + @param val: value to search for + + @return: the selector number if found, + otherwise the input value (val & 0xFFFF) + + @note: selector values are always in paragraphs + +Help on function find_suspop in module ida_search: + +find_suspop(*args) + find_suspop(ea, sflag) -> ea_t + + + Find next suspicious operand. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_text in module idc: + +find_text(ea, flag, y, x, searchstr, from_bc695=False) + +Help on function find_unknown in module ida_search: + +find_unknown(*args) + find_unknown(ea, sflag) -> ea_t + + + Find next unexplored address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function first_func_chunk in module idc: + +first_func_chunk(funcea) + Get the first function chunk of the specified function + + @param funcea: any address in the function + + @return: the function entry point or BADADDR + + @note: This function returns the first (main) chunk of the specified function + +Help on function fopen in module idc: + +fopen(f, mode) + #---------------------------------------------------------------------------- + # F I L E I / O + #---------------------------------------------------------------------------- + +Help on function force_bl_call in module idc: + +force_bl_call(ea) + Force BL instruction to be a call + + @param ea: address of the BL instruction + + @return: 1-ok, 0-failed + +Help on function force_bl_jump in module idc: + +force_bl_jump(ea) + Some ARM compilers in Thumb mode use BL (branch-and-link) + instead of B (branch) for long jumps, since BL has more range. + By default, IDA tries to determine if BL is a jump or a call. + You can override IDA's decision using commands in Edit/Other menu + (Force BL call/Force BL jump) or the following two functions. + + Force BL instruction to be a jump + + @param ea: address of the BL instruction + + @return: 1-ok, 0-failed + +Help on function form in module idc: + +form(format, *args) + +Help on function fprintf in module idc: + +fprintf(handle, format, *args) + +Help on function fputc in module idc: + +fputc(byte, handle) + +Help on function fseek in module idc: + +fseek(handle, offset, origin) + +Help on function ftell in module idc: + +ftell(handle) + +Help on function func_contains in module idc: + +func_contains(func_ea, ea) + Does the given function contain the given address? + + @param func_ea: any address belonging to the function + @param ea: linear address + + @return: success + +Help on function gen_file in module idc: + +gen_file(filetype, path, ea1, ea2, flags) + Generate an output file + + @param filetype: type of output file. One of OFILE_... symbols. See below. + @param path: the output file path (will be overwritten!) + @param ea1: start address. For some file types this argument is ignored + @param ea2: end address. For some file types this argument is ignored + @param flags: bit combination of GENFLG_... + + @returns: number of the generated lines. + -1 if an error occurred + OFILE_EXE: 0-can't generate exe file, 1-ok + +Help on function gen_flow_graph in module idc: + +gen_flow_graph(outfile, title, ea1, ea2, flags) + Generate a flow chart GDL file + + @param outfile: output file name. GDL extension will be used + @param title: graph title + @param ea1: beginning of the range to flow chart + @param ea2: end of the range to flow chart. + @param flags: combination of CHART_... constants + + @note: If ea2 == BADADDR then ea1 is treated as an address within a function. + That function will be flow charted. + +Help on function gen_simple_call_chart in module idc: + +gen_simple_call_chart(outfile, title, flags) + Generate a function call graph GDL file + + @param outfile: output file name. GDL extension will be used + @param title: graph title + @param flags: combination of CHART_GEN_GDL, CHART_WINGRAPH, CHART_NOLIBFUNCS + +Help on function generate_disasm_line in module idc: + +generate_disasm_line(ea, flags) + Get disassembly line + + @param ea: linear address of instruction + + @param flags: combination of the GENDSM_ flags, or 0 + + @return: "" - could not decode instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function get_array_element in module idc: + +get_array_element(tag, array_id, idx) + Get value of array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of an element. + + @return: Value of the specified array element. Note that + this function may return char or long result. Unexistent + array elements give zero as a result. + +Help on function get_array_id in module idc: + +get_array_id(name) + Get array array_id, by name. + + @param name: The array name. + + @return: -1 in case of failure (i.e., no array with that + name exists), a valid array_id otherwise. + +Help on function get_bmask_cmt in module idc: + +get_bmask_cmt(enum_id, bmask, repeatable) + Get bitmask comment (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param repeatable: type of comment, 0-regular, 1-repeatable + + @return: comment attached to bitmask or None + +Help on function get_bmask_name in module idc: + +get_bmask_name(enum_id, bmask) + Get bitmask name (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + + @return: name of bitmask or None + +Help on function get_marked_pos in module ida_idc: + +get_marked_pos(*args) + get_marked_pos(slot) -> ea_t + +Help on function get_mark_comment in module ida_idc: + +get_mark_comment(*args) + get_mark_comment(slot) -> PyObject * + +Help on function get_bpt_attr in module idc: + +get_bpt_attr(ea, bptattr) + Get the characteristics of a breakpoint + + @param ea: any address in the breakpoint range + @param bptattr: the desired attribute code, one of BPTATTR_... constants + + @return: the desired attribute value or -1 + +Help on function get_bpt_ea in module idc: + +get_bpt_ea(n) + Get breakpoint address + + @param n: number of breakpoint, is in range 0..get_bpt_qty()-1 + + @return: address of the breakpoint or BADADDR + +Help on function get_bpt_qty in module ida_dbg: + +get_bpt_qty(*args) + get_bpt_qty() -> int + + + Get number of breakpoints. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function get_bpt_tev_ea in module ida_dbg: + +get_bpt_tev_ea(*args) + get_bpt_tev_ea(n) -> ea_t + + + Get the address associated to a read, read/write or execution trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)}Usually, a breakpoint is associated with a read, read/write + or execution trace event. However, the returned address could be any + address in the range of this breakpoint. If the breakpoint was deleted + after the trace event, the address no longer corresponds to a valid + breakpoint. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a read, read/write or execution trace event. + +Help on function get_bytes in module idc: + +get_bytes(ea, size, use_dbg=False) + Return the specified number of bytes of the program + + @param ea: linear address + + @param size: size of buffer in normal 8-bit bytes + + @param use_dbg: if True, use debugger memory, otherwise just the database + + @return: None on failure + otherwise a string containing the read bytes + +Help on function get_call_tev_callee in module ida_dbg: + +get_call_tev_callee(*args) + get_call_tev_callee(n) -> ea_t + + + Get the called function from a function call trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function call event. + +Help on function get_color in module idc: + +get_color(ea, what) + Get item color + + @param ea: address of the item + @param what: type of the item (one of CIC_* constants) + + @return: color code in RGB (hex 0xBBGGRR) + +Help on function get_curline in module idc: + +get_curline() + Get the disassembly line at the cursor + + @return: string + +Help on function get_current_thread in module ida_dbg: + +get_current_thread(*args) + get_current_thread() -> thid_t + + + Get current thread ID. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_db_byte in module ida_bytes: + +get_db_byte(*args) + get_db_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea' from the database. Works + even if the debugger is active. See also 'get_dbg_byte()' to read the + process memory directly. This function works only for 8bit byte + processors. + + @param ea (C++: ea_t) + +Help on function get_debugger_event_cond in module ida_dbg: + +get_debugger_event_cond(*args) + get_debugger_event_cond() -> char const * + +Help on function get_entry in module ida_entry: + +get_entry(*args) + get_entry(ord) -> ea_t + + + Get entry point address by its ordinal + + @param ord: ordinal number of entry point (C++: uval_t) + @return: address or BADADDR + +Help on function get_entry_name in module ida_entry: + +get_entry_name(*args) + get_entry_name(ord) -> str + + + Get name of the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry name or -1 + +Help on function get_entry_ordinal in module ida_entry: + +get_entry_ordinal(*args) + get_entry_ordinal(idx) -> uval_t + + + Get ordinal number of an entry point. + + @param idx: internal number of entry point. Should be in the range 0.. + get_entry_qty() -1 (C++: size_t) + @return: ordinal number or 0. + +Help on function get_entry_qty in module ida_entry: + +get_entry_qty(*args) + get_entry_qty() -> size_t + + + Get number of entry points. + +Help on function get_enum in module ida_enum: + +get_enum(*args) + get_enum(name) -> enum_t + + + Get enum by name. + + + @param name (C++: const char *) + +Help on function get_enum_cmt in module ida_enum: + +get_enum_cmt(*args) + get_enum_cmt(id, repeatable) -> str + + + Get enum comment. + + + @param id (C++: enum_t) + @param repeatable (C++: bool) + +Help on function get_enum_flag in module ida_enum: + +get_enum_flag(*args) + get_enum_flag(id) -> flags_t + + + Get flags determining the representation of the enum. (currently they + define the numeric base: octal, decimal, hex, bin) and signness. + + @param id (C++: enum_t) + +Help on function get_enum_idx in module ida_enum: + +get_enum_idx(*args) + get_enum_idx(id) -> uval_t + + + Get serial number of enum. The serial number determines the place of + the enum in the enum window. + + @param id (C++: enum_t) + +Help on function get_enum_member in module idc: + +get_enum_member(enum_id, value, serial, bmask) + Get id of constant + + @param enum_id: id of enum + @param value: value of constant + @param serial: serial number of the constant in the + enumeration. See op_enum() for details. + @param bmask: bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + + @return: id of constant or -1 if error + +Help on function get_enum_member_bmask in module ida_enum: + +get_enum_member_bmask(*args) + get_enum_member_bmask(id) -> bmask_t + + + Get bitmask of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_by_name in module ida_enum: + +get_enum_member_by_name(*args) + get_enum_member_by_name(name) -> const_t + + + Get a reference to an enum member by its name. + + + @param name (C++: const char *) + +Help on function get_enum_member_cmt in module idc: + +get_enum_member_cmt(const_id, repeatable) + Get comment of a constant + + @param const_id: id of const + @param repeatable: 0:get regular comment, 1:get repeatable comment + + @return: comment string + +Help on function get_enum_member_enum in module ida_enum: + +get_enum_member_enum(*args) + get_enum_member_enum(id) -> enum_t + + + Get the parent enum of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_name in module idc: + +get_enum_member_name(const_id) + Get name of a constant + + @param const_id: id of const + + Returns: name of constant + +Help on function get_enum_member_value in module ida_enum: + +get_enum_member_value(*args) + get_enum_member_value(id) -> uval_t + + + Get value of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_name in module ida_enum: + +get_enum_name(*args) + get_enum_name(id) -> str + + + Get name of enum. + + + @param id (C++: enum_t) + +Help on function get_enum_qty in module ida_enum: + +get_enum_qty(*args) + get_enum_qty() -> size_t + + + Get number of declared 'enum_t' types. + +Help on function get_enum_size in module ida_enum: + +get_enum_size(*args) + get_enum_size(id) -> size_t + + + Get the number of the members of the enum. + + + @param id (C++: enum_t) + +Help on function get_enum_width in module ida_enum: + +get_enum_width(*args) + get_enum_width(id) -> size_t + + + Get the width of a enum element allowed values: 0 + (unspecified),1,2,4,8,16,32,64 + + @param id (C++: enum_t) + +Help on function get_event_bpt_hea in module idc: + +get_event_bpt_hea() + Get hardware address for BREAKPOINT event + + @return: hardware address + +Help on function get_event_ea in module idc: + +get_event_ea() + Get ea for debug event + + @return: ea + +Help on function get_event_exc_code in module idc: + +get_event_exc_code() + Get exception code for EXCEPTION event + + @return: exception code + +Help on function get_event_exc_ea in module idc: + +get_event_exc_ea() + Get address for EXCEPTION event + + @return: adress of exception + +Help on function get_event_exc_info in module idc: + +get_event_exc_info() + Get info for EXCEPTION event + + @return: info string + +Help on function get_event_exit_code in module idc: + +get_event_exit_code() + Get exit code for debug event + + @return: exit code for PROCESS_EXITED, THREAD_EXITED events + +Help on function get_event_id in module idc: + +get_event_id() + Get ID of debug event + + @return: event ID + +Help on function get_event_info in module idc: + +get_event_info() + Get debug event info + + @return: event info: for THREAD_STARTED (thread name) + for LIB_UNLOADED (unloaded library name) + for INFORMATION (message to display) + +Help on function get_event_module_base in module idc: + +get_event_module_base() + Get module base for debug event + + @return: module base + +Help on function get_event_module_name in module idc: + +get_event_module_name() + Get module name for debug event + + @return: module name + +Help on function get_event_module_size in module idc: + +get_event_module_size() + Get module size for debug event + + @return: module size + +Help on function get_event_pid in module idc: + +get_event_pid() + Get process ID for debug event + + @return: process ID + +Help on function get_event_tid in module idc: + +get_event_tid() + Get type ID for debug event + + @return: type ID + +Help on function get_extra_cmt in module ida_lines: + +get_extra_cmt(*args) + get_extra_cmt(ea, what) -> ssize_t + +Help on function get_fchunk_attr in module idc: + +get_fchunk_attr(ea, attr) + Get a function chunk attribute + + @param ea: any address in the chunk + @param attr: one of: FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER, FUNCATTR_REFQTY + + @return: desired attribute or -1 + +Help on function get_fchunk_referer in module ida_funcs: + +get_fchunk_referer(*args) + get_fchunk_referer(ea, idx) -> ea_t + +Help on function get_first_bmask in module ida_enum: + +get_first_bmask(*args) + get_first_bmask(id) -> bmask_t + + + Get first bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the smallest bitmask for enum, or DEFMASK + +Help on function get_first_cref_from in module ida_xref: + +get_first_cref_from(*args) + get_first_cref_from(frm) -> ea_t + + + Get first instruction referenced from the specified instruction. If + the specified instruction passes execution to the next instruction + then the next instruction is returned. Otherwise the lowest referenced + address is returned (remember that xrefs are kept sorted!). + + @return: first referenced address. The lastXR variable contains type + of the reference. If the specified instruction doesn't + reference to other instructions then returns BADADDR . + +Help on function get_first_cref_to in module ida_xref: + +get_first_cref_to(*args) + get_first_cref_to(to) -> ea_t + + + Get first instruction referencing to the specified instruction. If the + specified instruction may be executed immediately after its previous + instruction then the previous instruction is returned. Otherwise the + lowest referencing address is returned. (remember that xrefs are kept + sorted!). + + @param to: linear address of referenced instruction (C++: ea_t) + @return: linear address of the first referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_first_dref_from in module ida_xref: + +get_first_dref_from(*args) + get_first_dref_from(frm) -> ea_t + + + Get first data referenced from the specified address. + + @return: linear address of first (lowest) data referenced from the + specified address. The lastXR variable contains type of the + reference. Return BADADDR if the specified instruction/data + doesn't reference to anything. + +Help on function get_first_dref_to in module ida_xref: + +get_first_dref_to(*args) + get_first_dref_to(to) -> ea_t + + + Get address of instruction/data referencing to the specified data. + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_first_enum_member in module idc: + +get_first_enum_member(enum_id, bmask) + Get first constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) + + @return: value of constant or idaapi.BADNODE no constants are defined + All constants are sorted by their values as unsigned longs. + +Help on function get_first_fcref_from in module ida_xref: + +get_first_fcref_from(*args) + get_first_fcref_from(frm) -> ea_t + +Help on function get_first_fcref_to in module ida_xref: + +get_first_fcref_to(*args) + get_first_fcref_to(to) -> ea_t + +Help on function get_first_hash_key in module idc: + +get_first_hash_key(hash_id) + Get the first key in the hash. + + @param hash_id: The hash ID. + + @return: the key, 0 otherwise. + +Help on function get_first_index in module idc: + +get_first_index(tag, array_id) + Get index of the first existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + + @return: -1 if the array is empty, otherwise index of first array + element of given type. + +Help on function get_first_member in module idc: + +get_first_member(sid) + Get offset of the first member of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if structure has no members, + otherwise returns offset of the first member. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_first_module in module idc: + +get_first_module() + Enumerate process modules + + @return: first module's base address or None on failure + +Help on function get_first_seg in module idc: + +get_first_seg() + Get first segment + + @return: address of the start of the first segment + BADADDR - no segments are defined + +Help on function get_first_struc_idx in module ida_struct: + +get_first_struc_idx(*args) + get_first_struc_idx() -> uval_t + + + Get index of first structure. + + @return: BADADDR if no known structures, 0 otherwise + +Help on function get_fixup_target_dis in module idc: + +get_fixup_target_dis(ea) + Get fixup target displacement + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup target displacement + +Help on function get_fixup_target_flags in module idc: + +get_fixup_target_flags(ea) + Get fixup target flags + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup target flags + +Help on function get_fixup_target_off in module idc: + +get_fixup_target_off(ea) + Get fixup target offset + + @param ea: address to get information about + + @return: BADADDR - no fixup at the specified address + otherwise returns fixup target offset + +Help on function get_fixup_target_sel in module idc: + +get_fixup_target_sel(ea) + Get fixup target selector + + @param ea: address to get information about + + @return: BADSEL - no fixup at the specified address + otherwise returns fixup target selector + +Help on function get_fixup_target_type in module idc: + +get_fixup_target_type(ea) + Get fixup target type + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup type + +Help on function get_forced_operand in module ida_bytes: + +get_forced_operand(*args) + get_forced_operand(ea, n) -> str + + + Get forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @return: size of forced operand or -1 + +Help on function get_frame_args_size in module idc: + +get_frame_args_size(ea) + Get size of arguments in function frame which are purged upon return + + @param ea: any address belonging to the function + + @return: Size of function arguments in bytes. + If the function doesn't have a frame, return 0 + If the function does't exist, return -1 + +Help on function get_frame_id in module idc: + +get_frame_id(ea) + Get ID of function frame structure + + @param ea: any address belonging to the function + + @return: ID of function frame or None In order to access stack variables + you need to use structure member manipulaion functions with the + obtained ID. + +Help on function get_frame_lvar_size in module idc: + +get_frame_lvar_size(ea) + Get size of local variables in function frame + + @param ea: any address belonging to the function + + @return: Size of local variables in bytes. + If the function doesn't have a frame, return 0 + If the function does't exist, return None + +Help on function get_frame_regs_size in module idc: + +get_frame_regs_size(ea) + Get size of saved registers in function frame + + @param ea: any address belonging to the function + + @return: Size of saved registers in bytes. + If the function doesn't have a frame, return 0 + This value is used as offset for BP (if FUNC_FRAME is set) + If the function does't exist, return None + +Help on function get_frame_size in module idc: + +get_frame_size(ea) + Get full size of function frame + + @param ea: any address belonging to the function + @returns: Size of function frame in bytes. + This function takes into account size of local + variables + size of saved registers + size of + return address + size of function arguments + If the function doesn't have a frame, return size of + function return address in the stack. + If the function does't exist, return 0 + +Help on function get_full_flags in module ida_bytes: + +get_full_flags(*args) + get_full_flags(ea) -> flags_t + + + Get flags value for address 'ea'. + + @param ea (C++: ea_t) + @return: 0 if address is not present in the program + +Help on function get_func_attr in module idc: + +get_func_attr(ea, attr) + Get a function attribute + + @param ea: any address belonging to the function + @param attr: one of FUNCATTR_... constants + + @return: BADADDR - error otherwise returns the attribute value + +Help on function get_func_cmt in module idc: + +get_func_cmt(ea, repeatable) + Retrieve function comment + + @param ea: any address belonging to the function + @param repeatable: 1: get repeatable comment + 0: get regular comment + + @return: function comment string + +Help on function get_func_flags in module idc: + +get_func_flags(ea) + Retrieve function flags + + @param ea: any address belonging to the function + + @return: -1 - function doesn't exist otherwise returns the flags + +Help on function get_func_name in module idc: + +get_func_name(ea) + Retrieve function name + + @param ea: any address belonging to the function + + @return: null string - function doesn't exist + otherwise returns function name + +Help on function get_func_off_str in module idc: + +get_func_off_str(ea) + Convert address to 'funcname+offset' string + + @param ea: address to convert + + @return: if the address belongs to a function then return a string + formed as 'name+offset' where 'name' is a function name + 'offset' is offset within the function else return null string + +Help on function get_hash_long in module idc: + +get_hash_long(hash_id, key) + Gets the long value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + + @return: the 32bit or 64bit value of the element, or 0 if no such + element. + +Help on function get_hash_string in module idc: + +get_hash_string(hash_id, key) + Gets the string value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + + @return: the string value of the element, or None if no such + element. + +Help on function get_idb_path in module idc: + +get_idb_path() + Get IDB full path + + This function returns full path of the current IDB database + +Help on function get_inf_attr in module idc: + +get_inf_attr(attr) + +Help on function get_input_file_path in module ida_nalt: + +get_input_file_path(*args) + get_input_file_path() -> str + + + Get full path of the input file. + +Help on function get_item_end in module ida_bytes: + +get_item_end(*args) + get_item_end(ea) -> ea_t + + + Get the end address of the item at 'ea'. The returned address doesn't + belong to the current item. Unexplored bytes are counted as 1 byte + entities. + + @param ea (C++: ea_t) + +Help on function get_item_head in module ida_bytes: + +get_item_head(*args) + get_item_head(ea) -> ea_t + + + Get the start address of the item at 'ea'. If there is no current + item, then 'ea' will be returned (see definition at the end of + 'bytes.hpp' source) + + @param ea (C++: ea_t) + +Help on function get_item_size in module idc: + +get_item_size(ea) + Get size of instruction or data item in bytes + + @param ea: linear address + + @return: 1..n + +Help on function get_last_bmask in module ida_enum: + +get_last_bmask(*args) + get_last_bmask(id) -> bmask_t + + + Get last bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the biggest bitmask for enum, or DEFMASK + +Help on function get_last_enum_member in module idc: + +get_last_enum_member(enum_id, bmask) + Get last constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) + + @return: value of constant or idaapi.BADNODE no constants are defined + All constants are sorted by their values + as unsigned longs. + +Help on function get_last_hash_key in module idc: + +get_last_hash_key(hash_id) + Get the last key in the hash. + + @param hash_id: The hash ID. + + @return: the key, 0 otherwise. + +Help on function get_last_index in module idc: + +get_last_index(tag, array_id) + Get index of last existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + + @return: -1 if the array is empty, otherwise index of first array + element of given type. + +Help on function get_last_member in module idc: + +get_last_member(sid) + Get offset of the last member of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if structure has no members, + otherwise returns offset of the last member. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_last_struc_idx in module ida_struct: + +get_last_struc_idx(*args) + get_last_struc_idx() -> uval_t + + + Get index of last structure. + + @return: BADADDR if no known structures, get_struc_qty() -1 + otherwise + +Help on function get_local_tinfo in module idc: + +get_local_tinfo(ordinal) + Get local type information as 'typeinfo' object + + @param ordinal: slot number (1...NumberOfLocalTypes) + @return: None on failure, or (type, fields) tuple. + +Help on function get_manual_insn in module ida_bytes: + +get_manual_insn(*args) + get_manual_insn(ea) -> str + + + Retrieve the user-specified string for the manual instruction. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @return: size of manual instruction or -1 + +Help on function get_member_cmt in module idc: + +get_member_cmt(sid, member_offset, repeatable) + Get comment of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + @param repeatable: 1: get repeatable comment + 0: get regular comment + + @return: None if bad structure type ID is passed + or no such member in the structure + otherwise returns comment of the specified member. + +Help on function get_member_flag in module idc: + +get_member_flag(sid, member_offset) + Get type of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns type of the member, see bit + definitions above. If the member type is a structure + then function GetMemberStrid() should be used to + get the structure type id. + +Help on function get_member_id in module idc: + +get_member_id(sid, member_offset) + @param sid: structure type ID + @param member_offset:. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: -1 if bad structure type ID is passed or there is + no member at the specified offset. + otherwise returns the member id. + +Help on function get_member_name in module idc: + +get_member_name(sid, member_offset) + Get name of a member of a structure + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: None if bad structure type ID is passed + or no such member in the structure + otherwise returns name of the specified member. + +Help on function get_member_offset in module idc: + +get_member_offset(sid, member_name) + Get offset of a member of a structure by the member name + + @param sid: structure type ID + @param member_name: name of structure member + + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns offset of the specified member. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_member_qty in module idc: + +get_member_qty(sid) + Get number of members of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed otherwise + returns number of members. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_member_size in module idc: + +get_member_size(sid, member_offset) + Get size of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: None if bad structure type ID is passed, + or no such member in the structure + otherwise returns size of the specified + member in bytes. + +Help on function get_member_strid in module idc: + +get_member_strid(sid, member_offset) + Get structure id of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns structure id of the member. + If the current member is not a structure, returns -1. + +Help on function get_min_spd_ea in module idc: + +get_min_spd_ea(func_ea) + Return the address with the minimal spd (stack pointer delta) + If there are no SP change points, then return BADADDR. + + @param func_ea: function start + @return: BADDADDR - no such function + +Help on function get_module_name in module idc: + +get_module_name(base) + Get process module name + + @param base: the base address of the module + + @return: required info or None + +Help on function get_module_size in module idc: + +get_module_size(base) + Get process module size + + @param base: the base address of the module + + @return: required info or -1 + +Help on function get_name in module idc: + +get_name(ea, gtn_flags=0) + Get name at the specified address + + @param ea: linear address + @param gtn_flags: how exactly the name should be retrieved. + combination of GN_ bits + + @return: "" - byte has no name + +Help on function get_name_ea in module ida_name: + +get_name_ea(*args) + get_name_ea(_from, name) -> ea_t + + + Get address of the name. Dummy names (like byte_xxxx where xxxx are + hex digits) are parsed by this function to obtain the address. The + database is not consulted for them. This function works only with + regular names. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: address of the name or BADADDR + +Help on function get_name_ea_simple in module idc: + +get_name_ea_simple(name) + Get linear address of a name + + @param name: name of program byte + + @return: address of the name + BADADDR - No such name + +Help on function get_next_bmask in module ida_enum: + +get_next_bmask(*args) + get_next_bmask(id, bmask) -> bmask_t + + + Get next bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value higher than the specified + value, or DEFMASK + +Help on function get_next_cref_from in module ida_xref: + +get_next_cref_from(*args) + get_next_cref_from(frm, current) -> ea_t + + + Get next instruction referenced from the specified instruction. + + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_from() or + previous call to get_next_cref_from() functions. + (C++: ea_t) + @return: next referenced address or BADADDR . The lastXR variable + contains type of the reference. + +Help on function get_next_cref_to in module ida_xref: + +get_next_cref_to(*args) + get_next_cref_to(to, current) -> ea_t + + + Get next instruction referencing to the specified instruction. + + @param to: linear address of referenced instruction (C++: ea_t) + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_to() or previous + call to get_next_cref_to() functions. (C++: ea_t) + @return: linear address of the next referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_next_dref_from in module ida_xref: + +get_next_dref_from(*args) + get_next_dref_from(frm, current) -> ea_t + + + Get next data referenced from the specified address. + + @param current: linear address of current referenced data. This value + is returned by get_first_dref_from() or previous + call to get_next_dref_from() functions. (C++: ea_t) + @return: linear address of next data or BADADDR . The lastXR + variable contains type of the reference + +Help on function get_next_dref_to in module ida_xref: + +get_next_dref_to(*args) + get_next_dref_to(to, current) -> ea_t + + + Get address of instruction/data referencing to the specified data + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @param current: current linear address. This value is returned by + get_first_dref_to() or previous call to + get_next_dref_to() functions. (C++: ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_next_enum_member in module idc: + +get_next_enum_member(enum_id, value, bmask) + Get next constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant ordinary enums accept only ida_enum.DEFMASK as a bitmask + @param value: value of the current constant + + @return: value of a constant with value higher than the specified + value. idaapi.BADNODE no such constants exist. + All constants are sorted by their values as unsigned longs. + +Help on function get_next_fchunk in module idc: + +get_next_fchunk(ea) + Get next function chunk + + @param ea: any address + + @return: the starting address of the next function chunk or BADADDR + + @note: This function enumerates all chunks of all functions in the database + +Help on function get_next_fcref_from in module ida_xref: + +get_next_fcref_from(*args) + get_next_fcref_from(frm, current) -> ea_t + +Help on function get_next_fcref_to in module ida_xref: + +get_next_fcref_to(*args) + get_next_fcref_to(to, current) -> ea_t + +Help on function get_next_fixup_ea in module ida_fixup: + +get_next_fixup_ea(*args) + get_next_fixup_ea(ea) -> ea_t + + + Find next address with fixup information + + @param ea: current address (C++: ea_t) + @return: the next address with fixup information, or BADADDR + +Help on function get_next_func in module idc: + +get_next_func(ea) + Find next function + + @param ea: any address belonging to the function + + @return: BADADDR - no more functions + otherwise returns the next function start address + +Help on function get_next_hash_key in module idc: + +get_next_hash_key(hash_id, key) + Get the next key in the hash. + + @param hash_id: The hash ID. + @param key: The current key. + + @return: the next key, 0 otherwise + +Help on function get_next_index in module idc: + +get_next_index(tag, array_id, idx) + Get index of the next existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of the current element. + + @return: -1 if no more elements, otherwise returns index of the + next array element of given type. + +Help on function get_next_module in module idc: + +get_next_module(base) + Enumerate process modules + + @param base: previous module's base address + + @return: next module's base address or None on failure + +Help on function get_next_offset in module idc: + +get_next_offset(sid, offset) + Get next offset in a structure + + @param sid: structure type ID + @param offset: current offset + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if no (more) offsets in the structure, + otherwise returns next offset in a structure. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + This function returns a member offset or a hole offset. + It will return size of the structure if input + 'offset' belongs to the last member of the structure. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_next_seg in module idc: + +get_next_seg(ea) + Get next segment + + @param ea: linear address + + @return: start of the next segment + BADADDR - no next segment + +Help on function get_next_struc_idx in module ida_struct: + +get_next_struc_idx(*args) + get_next_struc_idx(idx) -> uval_t + + + Get next struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is out of bounds, otherwise idx++ + +Help on function get_numbered_type_name in module idc: + +get_numbered_type_name(ordinal) + Retrieve a local type name + + @param ordinal: slot number (1...NumberOfLocalTypes) + + returns: local type name or None + +Help on function get_operand_type in module idc: + +get_operand_type(ea, n) + Get type of instruction operand + + @param ea: linear address of instruction + @param n: number of operand: + 0 - the first operand + 1 - the second operand + + @return: any of o_* constants or -1 on error + +Help on function get_operand_value in module idc: + +get_operand_value(ea, n) + Get number used in the operand + + This function returns an immediate number used in the operand + + @param ea: linear address of instruction + @param n: the operand number + + @return: value + operand is an immediate value => immediate value + operand has a displacement => displacement + operand is a direct memory ref => memory address + operand is a register => register number + operand is a register phrase => phrase number + otherwise => -1 + +Help on function get_ordinal_qty in module idc: + +get_ordinal_qty() + Get number of local types + 1 + + @return: value >= 1. 1 means that there are no local types. + +Help on function get_original_byte in module ida_bytes: + +get_original_byte(*args) + get_original_byte(ea) -> uint64 + + + Get original byte value (that was before patching). This function + works for wide byte processors too. + + @param ea (C++: ea_t) + +Help on function get_prev_bmask in module ida_enum: + +get_prev_bmask(*args) + get_prev_bmask(id, bmask) -> bmask_t + + + Get prev bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value lower than the specified value, + or DEFMASK + +Help on function get_prev_enum_member in module idc: + +get_prev_enum_member(enum_id, value, bmask) + Get prev constant in the enum + + @param enum_id: id of enum + @param bmask : bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + @param value: value of the current constant + + @return: value of a constant with value lower than the specified + value. idaapi.BADNODE no such constants exist. + All constants are sorted by their values as unsigned longs. + +Help on function get_prev_fchunk in module idc: + +get_prev_fchunk(ea) + Get previous function chunk + + @param ea: any address + + @return: the starting address of the function chunk or BADADDR + + @note: This function enumerates all chunks of all functions in the database + +Help on function get_prev_fixup_ea in module ida_fixup: + +get_prev_fixup_ea(*args) + get_prev_fixup_ea(ea) -> ea_t + + + Find previous address with fixup information + + @param ea: current address (C++: ea_t) + @return: the previous address with fixup information, or BADADDR + +Help on function get_prev_func in module idc: + +get_prev_func(ea) + Find previous function + + @param ea: any address belonging to the function + + @return: BADADDR - no more functions + otherwise returns the previous function start address + +Help on function get_prev_hash_key in module idc: + +get_prev_hash_key(hash_id, key) + Get the previous key in the hash. + + @param hash_id: The hash ID. + @param key: The current key. + + @return: the previous key, 0 otherwise + +Help on function get_prev_index in module idc: + +get_prev_index(tag, array_id, idx) + Get index of the previous existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of the current element. + + @return: -1 if no more elements, otherwise returns index of the + previous array element of given type. + +Help on function get_prev_offset in module idc: + +get_prev_offset(sid, offset) + Get previous offset in a structure + + @param sid: structure type ID + @param offset: current offset + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if no (more) offsets in the structure, + otherwise returns previous offset in a structure. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + This function returns a member offset or a hole offset. + It will return size of the structure if input + 'offset' is bigger than the structure size. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_prev_struc_idx in module ida_struct: + +get_prev_struc_idx(*args) + get_prev_struc_idx(idx) -> uval_t + + + Get previous struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is negative, otherwise idx - 1 + +Help on function get_process_state in module ida_dbg: + +get_process_state(*args) + get_process_state() -> int + + + Return the state of the currently debugged process. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @return: one of Debugged process states + +Help on function get_processes in module ida_dbg: + +get_processes(*args) + get_processes(proclist) -> ssize_t + + + Take a snapshot of running processes and return their description. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param proclist (C++: procinfo_vec_t *) + @return: number of processes or -1 on error + +Help on function get_qword in module ida_bytes: + +get_qword(*args) + get_qword(ea) -> uint64 + + + Get one qword (64-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_reg_value in module idc: + +get_reg_value(name) + Get register value + + @param name: the register name + + @note: The debugger should be running. otherwise the function fails + the register name should be valid. + It is not necessary to use this function to get register values + because a register name in the script will do too. + + @return: register value (integer or floating point) + +Help on function get_ret_tev_return in module ida_dbg: + +get_ret_tev_return(*args) + get_ret_tev_return(n) -> ea_t + + + Get the return address from a function return trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function return event. + +Help on function get_root_filename in module ida_nalt: + +get_root_filename(*args) + get_root_filename() -> str + + + Get file name only of the input file. + +Help on function get_screen_ea in module ida_kernwin: + +get_screen_ea(*args) + get_screen_ea() -> ea_t + + + Get the address at the screen cursor ( 'ui_screenea' ) + +Help on function get_segm_attr in module idc: + +get_segm_attr(segea, attr) + Get segment attribute + + @param segea: any address within segment + @param attr: one of SEGATTR_... constants + +Help on function get_segm_by_sel in module idc: + +get_segm_by_sel(base) + Get segment by segment base + + @param base: segment base paragraph or selector + + @return: linear address of the start of the segment or BADADDR + if no such segment + +Help on function get_segm_end in module idc: + +get_segm_end(ea) + Get end address of a segment + + @param ea: any address in the segment + + @return: end of segment (an address past end of the segment) + BADADDR - the specified address doesn't belong to any segment + +Help on function get_segm_name in module idc: + +get_segm_name(ea) + Get name of a segment + + @param ea: any address in the segment + + @return: "" - no segment at the specified address + +Help on function get_segm_start in module idc: + +get_segm_start(ea) + Get start address of a segment + + @param ea: any address in the segment + + @return: start of segment + BADADDR - the specified address doesn't belong to any segment + +Help on function get_source_linnum in module ida_nalt: + +get_source_linnum(*args) + get_source_linnum(ea) -> uval_t + +Help on function get_sourcefile in module ida_lines: + +get_sourcefile(*args) + get_sourcefile(ea, bounds=None) -> char const * + + + Get name of source file occupying the given address. + + @param ea: linear address (C++: ea_t) + @param bounds: pointer to the output buffer with the address range for + the current file. May be NULL. (C++: range_t *) + @return: NULL if source file information is not found, otherwise + returns pointer to file name + +Help on function get_sp_delta in module idc: + +get_sp_delta(ea) + Get modification of SP made by the instruction + + @param ea: end address of the instruction + i.e.the last address of the instruction+1 + + @return: Get modification of SP made at the specified location + If the specified location doesn't contain a SP change point, return 0 + Otherwise return delta of SP modification + +Help on function get_spd in module idc: + +get_spd(ea) + Get current delta for the stack pointer + + @param ea: end address of the instruction + i.e.the last address of the instruction+1 + + @return: The difference between the original SP upon + entering the function and SP for the specified address + +Help on function get_sreg in module idc: + +get_sreg(ea, reg) + Get value of segment register at the specified address + + @param ea: linear address + @param reg: name of segment register + + @return: the value of the segment register or -1 on error + + @note: The segment registers in 32bit program usually contain selectors, + so to get paragraph pointed to by the segment register you need to + call sel2para() function. + +Help on function get_step_trace_options in module ida_dbg: + +get_step_trace_options(*args) + get_step_trace_options() -> int + + + Get current step tracing options. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: Step trace options + +Help on function get_str_type in module idc: + +get_str_type(ea) + Get string type + + @param ea: linear address + + @return: One of STRTYPE_... constants + +Help on function get_strlit_contents in module idc: + +get_strlit_contents(ea, length=-1, strtype=0) + Get string contents + @param ea: linear address + @param length: string length. -1 means to calculate the max string length + @param strtype: the string type (one of STRTYPE_... constants) + + @return: string contents or empty string + +Help on function get_struc_by_idx in module ida_struct: + +get_struc_by_idx(*args) + get_struc_by_idx(idx) -> tid_t + + + Get struct id by struct number. + + + @param idx (C++: uval_t) + +Help on function get_struc_cmt in module ida_struct: + +get_struc_cmt(*args) + get_struc_cmt(id, repeatable) -> str + + + Get struct comment. + + + @param id (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_struc_id in module ida_struct: + +get_struc_id(*args) + get_struc_id(name) -> tid_t + + + Get struct id by name. + + + @param name (C++: const char *) + +Help on function get_struc_idx in module ida_struct: + +get_struc_idx(*args) + get_struc_idx(id) -> uval_t + + + Get internal number of the structure. + + + @param id (C++: tid_t) + +Help on function get_struc_name in module ida_struct: + +get_struc_name(*args) + get_struc_name(id, flags=0) -> str + + + Get struct name by id + + @param id: struct id (C++: tid_t) + @param flags: Struct name flags (C++: int) + +Help on function get_struc_qty in module ida_struct: + +get_struc_qty(*args) + get_struc_qty() -> size_t + + + Get number of known structures. + +Help on function get_struc_size in module ida_struct: + +get_struc_size(*args) + get_struc_size(sptr) -> asize_t + get_struc_size(id) -> asize_t + + + Get struct size (also see 'get_struc_size(tid_t)' ) + + + @param sptr (C++: const struc_t *) + +Help on function get_tev_ea in module ida_dbg: + +get_tev_ea(*args) + get_tev_ea(n) -> ea_t + +Help on function get_tev_reg_mem in module ida_dbg: + +get_tev_reg_mem(tev, idx) + +Help on function get_tev_reg_mem_ea in module ida_dbg: + +get_tev_reg_mem_ea(tev, idx) + +Help on function get_tev_reg_mem_qty in module ida_dbg: + +get_tev_reg_mem_qty(tev) + +Help on function get_tev_qty in module ida_dbg: + +get_tev_qty(*args) + get_tev_qty() -> int + + + Get number of trace events available in trace buffer. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_tev_reg_val in module ida_dbg: + +get_tev_reg_val(tev, reg) + +Help on function get_tev_tid in module ida_dbg: + +get_tev_tid(*args) + get_tev_tid(n) -> int + +Help on function get_tev_type in module ida_dbg: + +get_tev_type(*args) + get_tev_type(n) -> int + +Help on function get_thread_qty in module ida_dbg: + +get_thread_qty(*args) + get_thread_qty() -> int + + + Get number of threads. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_tinfo in module idc: + +get_tinfo(ea) + Get type information of function/variable as 'typeinfo' object + + @param ea: the address of the object + @return: None on failure, or (type, fields) tuple. + +Help on function get_trace_file_desc in module ida_dbg: + +get_trace_file_desc(*args) + get_trace_file_desc(filename) -> str + + + Get the file header of the specified trace file. + + + @param filename (C++: const char *) + +Help on function get_type in module idc: + +get_type(ea) + Get type of function/variable + + @param ea: the address of the object + + @return: type string or None if failed + +Help on function get_wide_byte in module ida_bytes: + +get_wide_byte(*args) + get_wide_byte(ea) -> uint64 + + + Get one wide byte of the program at 'ea'. Some processors may access + more than 8bit quantity at an address. These processors have 32-bit + byte organization from the IDA's point of view. + + @param ea (C++: ea_t) + +Help on function get_wide_dword in module ida_bytes: + +get_wide_dword(*args) + get_wide_dword(ea) -> uint64 + + + Get two wide words (4 'bytes') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in + \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 + + @param ea (C++: ea_t) + +Help on function get_wide_word in module ida_bytes: + +get_wide_word(*args) + get_wide_word(ea) -> uint64 + + + Get one wide word (2 'byte') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_xref_type in module idc: + +get_xref_type() + Return type of the last xref obtained by + [RD]first/next[B0] functions. + + @return: constants fl_* or dr_* + +Help on function getn_enum in module ida_enum: + +getn_enum(*args) + getn_enum(n) -> enum_t + + + Get enum by its ordinal number (0..n). + + + @param n (C++: size_t) + +Help on function getn_thread in module ida_dbg: + +getn_thread(*args) + getn_thread(n) -> thid_t + + + Get the ID of a thread. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: + int) + @return: NO_THREAD if the thread doesn't exist. + +Help on function getn_thread_name in module ida_dbg: + +getn_thread_name(*args) + getn_thread_name(n) -> char const * + + + Get the NAME of a thread \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 + for the current thread (C++: int) + @return: thread name or NULL if the thread doesn't exist. + +Help on function guess_type in module idc: + +guess_type(ea) + Guess type of function/variable + + @param ea: the address of the object, can be the structure member id too + + @return: type string or None if failed + +Help on function hasName in module idc: + +hasName(F) + +Help on function hasUserName in module idc: + +hasUserName(F) + +Help on function has_value in module idc: + +has_value(F) + +Help on function here in module idc: + +here() + # Convenience functions: + +Help on function idadir in module idc: + +idadir() + Get IDA directory + + This function returns the directory where IDA.EXE resides + +Help on function import_type in module idc: + +import_type(idx, type_name) + Copy information from type library to database + Copy structure, union, or enum definition from the type library + to the IDA database. + + @param idx: the position of the new type in the list of + types (structures or enums) -1 means at the end of the list + @param type_name: name of type to copy + + @return: BADNODE-failed, otherwise the type id (structure id or enum id) + +Help on function isBin0 in module idc: + +isBin0(F) + +Help on function isBin1 in module idc: + +isBin1(F) + +Help on function isDec0 in module idc: + +isDec0(F) + +Help on function isDec1 in module idc: + +isDec1(F) + +Help on function isExtra in module idc: + +isExtra(F) + +Help on function isHex0 in module idc: + +isHex0(F) + +Help on function isHex1 in module idc: + +isHex1(F) + +Help on function isOct0 in module idc: + +isOct0(F) + +Help on function isOct1 in module idc: + +isOct1(F) + +Help on function isRef in module idc: + +isRef(F) + +Help on function is_align in module idc: + +is_align(F) + +Help on function is_bf in module ida_enum: + +is_bf(*args) + is_bf(id) -> bool + + + Is enum a bitfield? (otherwise - plain enum, no bitmasks except for + 'DEFMASK' are allowed) + + @param id (C++: enum_t) + +Help on function is_byte in module idc: + +is_byte(F) + +Help on function is_char0 in module idc: + +is_char0(F) + +Help on function is_char1 in module idc: + +is_char1(F) + +Help on function is_code in module idc: + +is_code(F) + +Help on function is_data in module idc: + +is_data(F) + +Help on function is_defarg0 in module idc: + +is_defarg0(F) + +Help on function is_defarg1 in module idc: + +is_defarg1(F) + +Help on function is_double in module idc: + +is_double(F) + +Help on function is_dword in module idc: + +is_dword(F) + +Help on function is_enum0 in module idc: + +is_enum0(F) + +Help on function is_enum1 in module idc: + +is_enum1(F) + +Help on function is_event_handled in module idc: + +is_event_handled() + Is the debug event handled? + + @return: boolean + +Help on function is_float in module idc: + +is_float(F) + +Help on function is_flow in module idc: + +is_flow(F) + +Help on function is_head in module idc: + +is_head(F) + +Help on function is_loaded in module idc: + +is_loaded(ea) + Is the byte initialized? + +Help on function is_manual0 in module idc: + +is_manual0(F) + +Help on function is_manual1 in module idc: + +is_manual1(F) + +Help on function is_mapped in module idc: + +is_mapped(ea) + +Help on function is_off0 in module idc: + +is_off0(F) + +Help on function is_off1 in module idc: + +is_off1(F) + +Help on function is_oword in module idc: + +is_oword(F) + +Help on function is_pack_real in module idc: + +is_pack_real(F) + +Help on function is_qword in module idc: + +is_qword(F) + +Help on function is_seg0 in module idc: + +is_seg0(F) + +Help on function is_seg1 in module idc: + +is_seg1(F) + +Help on function is_stkvar0 in module idc: + +is_stkvar0(F) + +Help on function is_stkvar1 in module idc: + +is_stkvar1(F) + +Help on function is_strlit in module idc: + +is_strlit(F) + +Help on function is_stroff0 in module idc: + +is_stroff0(F) + +Help on function is_stroff1 in module idc: + +is_stroff1(F) + +Help on function is_struct in module idc: + +is_struct(F) + +Help on function is_tail in module idc: + +is_tail(F) + +Help on function is_tbyte in module idc: + +is_tbyte(F) + +Help on function is_union in module idc: + +is_union(sid) + Is a structure a union? + + @param sid: structure type ID + + @return: 1: yes, this is a union id + 0: no + + @note: Unions are a special kind of structures + +Help on function is_unknown in module idc: + +is_unknown(F) + +Help on function is_valid_trace_file in module ida_dbg: + +is_valid_trace_file(*args) + is_valid_trace_file(filename) -> bool + + + Is the specified file a valid trace file for the current database? + + + @param filename (C++: const char *) + +Help on function is_word in module idc: + +is_word(F) + +Help on function jumpto in module ida_kernwin: + +jumpto(*args) + jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool + jumpto(custom_viewer, place, x, y) -> bool + + + Jump to the specified address ( 'ui_jumpto' ). + + @param ea: destination (C++: ea_t) + @param opnum: -1: don't change x coord (C++: int) + @param uijmp_flags: Jump flags (C++: int) + @return: success + +Help on function load_and_run_plugin in module ida_loader: + +load_and_run_plugin(*args) + load_and_run_plugin(name, arg) -> bool + + + Load & run a plugin. + + + @param name (C++: const char *) + @param arg (C++: size_t) + +Help on function load_debugger in module ida_dbg: + +load_debugger(*args) + load_debugger(dbgname, use_remote) -> bool + +Help on function load_trace_file in module ida_dbg: + +load_trace_file(*args) + load_trace_file(filename) -> str + + + Load a recorded trace file in the trace window. If the call succeeds + and 'buf' is not null, the description of the trace stored in the + binary trace file will be returned in 'buf' + + @param filename (C++: const char *) + +Help on function loadfile in module idc: + +loadfile(filepath, pos, ea, size) + +Help on function ltoa in module idc: + +ltoa(n, radix) + +Help on function make_array in module idc: + +make_array(ea, nitems) + Create an array. + + @param ea: linear address + @param nitems: size of array in items + + @note: This function will create an array of the items with the same type as + the type of the item at 'ea'. If the byte at 'ea' is undefined, then + this function will create an array of bytes. + +Help on function move_segm in module idc: + +move_segm(ea, to, flags) + 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 + + @param ea: any address within the segment to move + @param to: new segment start address + @param flags: combination MFS_... constants + + @returns: MOVE_SEGM_... error code + +Help on function msg in module ida_kernwin: + +msg(*args) + msg(o) -> PyObject * + + + Display an UTF-8 string in the message window + + The result of the stringification of the arguments + will be treated as an UTF-8 string. + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + +Help on function next_addr in module ida_bytes: + +next_addr(*args) + next_addr(ea) -> ea_t + + + Get next address in the program (i.e. next address which has flags). + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function next_func_chunk in module idc: + +next_func_chunk(funcea, tailea) + Get the next function chunk of the specified function + + @param funcea: any address in the function + @param tailea: any address in the current chunk + + @return: the starting address of the next function chunk or BADADDR + + @note: This function returns the next chunk of the specified function + +Help on function next_head in module idc: + +next_head(ea, maxea=BADADDR)↗ + Get next defined item (instruction or data) in the program + + @param ea: linear address to start search from + @param maxea: the search will stop at the address + maxea is not included in the search range + + @return: BADADDR - no (more) defined items + +Help on function next_not_tail in module ida_bytes: + +next_not_tail(*args) + next_not_tail(ea) -> ea_t + + + Get address of next non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function op_bin in module ida_bytes: + +op_bin(*args) + op_bin(ea, n) -> bool + + + set op type to 'bin_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_chr in module ida_bytes: + +op_chr(*args) + op_chr(ea, n) -> bool + + + set op type to 'char_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_dec in module ida_bytes: + +op_dec(*args) + op_dec(ea, n) -> bool + + + set op type to 'dec_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_enum in module ida_bytes: + +op_enum(*args) + op_enum(ea, n, id, serial) -> bool + + + Set operand representation to be 'enum_t'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @param id: id of enum (C++: enum_t) + @param serial: the serial number of the constant in the enumeration, + usually 0. the serial numbers are used if the + enumeration contains several constants with the same + value (C++: uchar) + @return: success + +Help on function op_flt in module ida_bytes: + +op_flt(*args) + op_flt(ea, n) -> bool + + + set op type to 'flt_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_hex in module ida_bytes: + +op_hex(*args) + op_hex(ea, n) -> bool + + + set op type to 'hex_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function set_forced_operand in module ida_bytes: + +set_forced_operand(*args) + set_forced_operand(ea, n, op) -> bool + + + Set forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @param op: text of operand NULL: do nothing (return 0) "" : delete + forced operand (C++: const char *) + @return: success + +Help on function op_num in module ida_bytes: + +op_num(*args) + op_num(ea, n) -> bool + + + set op type to 'num_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_oct in module ida_bytes: + +op_oct(*args) + op_oct(ea, n) -> bool + + + set op type to 'oct_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_offset in module ida_offset: + +op_offset(*args) + op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int + + + See 'op_offset_ex()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param type (C++: reftype_t) + @param target (C++: ea_t) + @param base (C++: ea_t) + @param tdelta (C++: adiff_t) + +Help on function op_offset_high16 in module idc: + +op_offset_high16(ea, n, target) + Convert operand to a high offset + High offset is the upper 16bits of an offset. + This type is used by TMS320C6 processors (and probably by other + RISC processors too) + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param target: the full value (all 32bits) of the offset + +Help on function op_plain_offset in module idc: + +op_plain_offset(ea, n, base) + Convert operand to an offset + (for the explanations of 'ea' and 'n' please see op_bin()) + + Example: + ======== + + seg000:2000 dw 1234h + + and there is a segment at paragraph 0x1000 and there is a data item + within the segment at 0x1234: + + seg000:1234 MyString db 'Hello, world!',0 + + Then you need to specify a linear address of the segment base to + create a proper offset: + + op_plain_offset(["seg000",0x2000],0,0x10000); + + and you will have: + + seg000:2000 dw offset MyString + + Motorola 680x0 processor have a concept of "outer offsets". + If you want to create an outer offset, you need to combine number + of the operand with the following bit: + + Please note that the outer offsets are meaningful only for + Motorola 680x0. + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param base: base of the offset as a linear address + If base == BADADDR then the current operand becomes non-offset + +Help on function op_seg in module ida_bytes: + +op_seg(*args) + op_seg(ea, n) -> bool + + + Set operand representation to be 'segment'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stkvar in module ida_bytes: + +op_stkvar(*args) + op_stkvar(ea, n) -> bool + + + Set operand representation to be 'stack variable'. Should be applied + to an instruction within a function. Should be applied after creating + a stack var using 'insn_t::create_stkvar()' . + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stroff in module idc: + +op_stroff(ea, n, strid, delta) + Convert operand to an offset in a structure + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param strid: id of a structure type + @param delta: struct offset delta. usually 0. denotes the difference + between the structure base and the pointer into the structure. + +Help on function parse_decl in module idc: + +parse_decl(inputtype, flags) + Parse type declaration + + @param inputtype: file name or C declarations (depending on the flags) + @param flags: combination of PT_... constants or 0 + + @return: None on failure or (name, type, fields) tuple + +Help on function parse_decls in module idc: + +parse_decls(inputtype, flags=0) + Parse type declarations + + @param inputtype: file name or C declarations (depending on the flags) + @param flags: combination of PT_... constants or 0 + + @return: number of parsing errors (0 no errors) + +Help on function patch_byte in module ida_bytes: + +patch_byte(*args) + patch_byte(ea, x) -> bool + + + Patch a byte of the program. The original value of the byte is saved + and can be obtained by 'get_original_byte()' . This function works for + wide byte processors too. + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function put_dbg_byte in module ida_dbg: + +put_dbg_byte(*args) + put_dbg_byte(ea, x) -> bool + + + Change one byte of the debugged process memory. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint32) + @return: true if the process memory has been modified + +Help on function patch_dword in module ida_bytes: + +patch_dword(*args) + patch_dword(ea, x) -> bool + + + Patch a dword of the program. The original value of the dword is saved + and can be obtained by 'get_original_dword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_qword in module ida_bytes: + +patch_qword(*args) + patch_qword(ea, x) -> bool + + + Patch a qword of the program. The original value of the qword is saved + and can be obtained by 'get_original_qword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_word in module ida_bytes: + +patch_word(*args) + patch_word(ea, x) -> bool + + + Patch a word of the program. The original value of the word is saved + and can be obtained by 'get_original_word()' . This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function plan_and_wait in module idc: + +plan_and_wait(sEA, eEA, final_pass=True) + Perform full analysis of the range + + @param sEA: starting linear address + @param eEA: ending linear address (excluded) + @param final_pass: make the final pass over the specified range + + @return: 1-ok, 0-Ctrl-Break was pressed. + +Help on function plan_to_apply_idasgn in module ida_funcs: + +plan_to_apply_idasgn(*args) + plan_to_apply_idasgn(fname) -> int + + + Add a signature file to the list of planned signature files. + + @param fname: file name. should not contain directory part. (C++: + const char *) + @return: 0 if failed, otherwise number of planned (and applied) + signatures + +Help on function prev_addr in module ida_bytes: + +prev_addr(*args) + prev_addr(ea) -> ea_t + + + Get previous address in the program. + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function prev_head in module idc: + +prev_head(ea, minea=0) + Get previous defined item (instruction or data) in the program + + @param ea: linear address to start search from + @param minea: the search will stop at the address + minea is included in the search range + + @return: BADADDR - no (more) defined items + +Help on function prev_not_tail in module ida_bytes: + +prev_not_tail(*args) + prev_not_tail(ea) -> ea_t + + + Get address of previous non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function print_decls in module idc: + +print_decls(ordinals, flags) + Print types in a format suitable for use in a header file + + @param ordinals: comma-separated list of type ordinals + @param flags: combination of PDF_... constants or 0 + + @return: string containing the type definitions + +Help on instance of _Feature in module __future__: + +class _Feature + | Methods defined here: + | + | __init__(self, optionalRelease, mandatoryRelease, compiler_flag) + | + | __repr__(self) + | + | getMandatoryRelease(self) + | Return release in which this feature will become mandatory. + | + | This is a 5-tuple, of the same form as sys.version_info, or, if + | the feature was dropped, is None. + | + | getOptionalRelease(self) + | Return first release in which this feature was recognized. + | + | This is a 5-tuple, of the same form as sys.version_info. + +Help on function print_insn_mnem in module idc: + +print_insn_mnem(ea) + Get instruction mnemonics + + @param ea: linear address of instruction + + @return: "" - no instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function print_operand in module idc: + +print_operand(ea, n) + Get operand of an instruction or data + + @param ea: linear address of the item + @param n: number of operand: + 0 - the first operand + 1 - the second operand + + @return: the current text representation of operand or "" + +Help on function process_config_line in module idc: + +process_config_line(directive) + Parse one or more ida.cfg config directives + @param directive: directives to process, for example: PACK_DATABASE=2 + + @note: If the directives are erroneous, a fatal error will be generated. + The settings are permanent: effective for the current session and the next ones + +Help on function process_ui_action in module idc: + +process_ui_action(name, flags=0) + Invokes an IDA UI action by name + + @param name: Command name + @param flags: Reserved. Must be zero + @return: Boolean + +Help on function mark_position in module ida_idc: + +mark_position(*args) + mark_position(ea, lnnum, x, y, slot, comment) + +Help on function qexit in module ida_pro: + +qexit(*args) + qexit(code) + + + Call qatexit functions, shut down UI and kernel, and exit. + + @param code: exit code (C++: int) + +Help on function qsleep in module idc: + +qsleep(milliseconds) + qsleep the specified number of milliseconds + This function suspends IDA for the specified amount of time + + @param milliseconds: time to sleep + +Help on function read_dbg_byte in module idc: + +read_dbg_byte(ea) + Get value of program byte using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_dbg_dword in module idc: + +read_dbg_dword(ea) + Get value of program double-word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function dbg_read_memory in module ida_idd: + +dbg_read_memory(*args) + dbg_read_memory(ea, sz) -> PyObject * + + + Reads from the debugee's memory at the specified ea + @return: + - The read buffer (as a string) + - Or None on failure + +Help on function read_dbg_qword in module idc: + +read_dbg_qword(ea) + Get value of program quadro-word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_dbg_word in module idc: + +read_dbg_word(ea) + Get value of program word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_selection_end in module idc: + +read_selection_end() + Get end address of the selected range + + @return: BADADDR - the user has not selected an range + +Help on function read_selection_start in module idc: + +read_selection_start() + Get start address of the selected range + returns BADADDR - the user has not selected an range + +Help on function readlong in module idc: + +readlong(handle, mostfirst) + +Help on function readshort in module idc: + +readshort(handle, mostfirst) + +Help on function readstr in module idc: + +readstr(handle) + +Help on function rebase_program in module ida_segment: + +rebase_program(*args) + rebase_program(delta, flags) -> int + + + Rebase the whole program by 'delta' bytes. + + @param delta: number of bytes to move the program (C++: adiff_t) + @param flags: Move segment flags it is recommended to use + MSF_FIXONCE so that the loader takes care of global + variables it stored in the database (C++: int) + @return: Move segment result codes + +Help on function recalc_spd in module ida_frame: + +recalc_spd(*args) + recalc_spd(cur_ea) -> bool + + + Recalculate SP delta for an instruction that stops execution. The next + instruction is not reached from the current instruction. We need to + recalculate SP for the next instruction.This function will create a + new automatic SP register change point if necessary. It should be + called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the + current instruction doesn't pass the execution flow to the next + instruction. + + @param cur_ea: linear address of the current instruction (C++: ea_t) + +Help on function refresh_debugger_memory in module ida_dbg: + +refresh_debugger_memory(*args) + refresh_debugger_memory() -> PyObject * + + + Refreshes the debugger memory + @return: Nothing + +Help on function refresh_idaview_anyway in module ida_kernwin: + +refresh_idaview_anyway(*args) + refresh_idaview_anyway() + + + Refresh all disassembly views ( 'ui_refresh' ), forces an immediate + refresh. Please consider 'request_refresh()' instead + +Help on function refresh_choosers in module ida_kernwin: + +refresh_choosers(*args) + refresh_choosers() + +Help on function remove_fchunk in module idc: + +remove_fchunk(funcea, tailea) + Remove a function chunk from the function + + @param funcea: any address in the function + @param tailea: any address in the function chunk to remove + + @return: 0 if failed, 1 if success + +Help on function rename_array in module idc: + +rename_array(array_id, newname) + Rename array, by its ID. + + @param id: The ID of the array to rename. + @param newname: The new name of the array. + + @return: 1 in case of success, 0 otherwise + +Help on function rename_entry in module ida_entry: + +rename_entry(*args) + rename_entry(ord, name, flags=0) -> bool + + + Rename entry point. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to a repeatable + comment. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +Help on function resume_process in module idc: + +resume_process() + +Help on function resume_thread in module ida_dbg: + +resume_thread(*args) + resume_thread(tid) -> int + + + Resume thread. \sq{Type, Synchronous function - available as request, + Notification, none (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function retrieve_input_file_md5 in module ida_nalt: + +retrieve_input_file_md5(*args) + retrieve_input_file_md5() -> str + + + Get input file md5. + +Help on function rotate_byte in module idc: + +rotate_byte(x, count) + +Help on function rotate_dword in module idc: + +rotate_dword(x, count) + +Help on function rotate_left in module idc: + +rotate_left(value, count, nbits, offset) + Rotate a value to the left (or right) + + @param value: value to rotate + @param count: number of times to rotate. negative counter means + rotate to the right + @param nbits: number of bits to rotate + @param offset: offset of the first bit to rotate + + @return: the value with the specified field rotated + all other bits are not modified + +Help on function rotate_word in module idc: + +rotate_word(x, count) + +Help on function run_to in module ida_dbg: + +run_to(*args) + run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Execute the process until the given address is reached. If no process + is active, a new process is started. Technically, the debugger sets up + a temporary breakpoint at the given address, and continues (or starts) + the execution of the whole process. So, all threads continue their + execution! \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_run_to' } + + @param ea: target address (C++: ea_t) + @param pid: not used yet. please do not specify this parameter. (C++: + pid_t) + @param tid: not used yet. please do not specify this parameter. (C++: + thid_t) + +Help on function save_database in module idc: + +save_database(idbname, flags=0) + Save current database to the specified idb file + + @param idbname: name of the idb file. if empty, the current idb + file will be used. + @param flags: combination of ida_loader.DBFL_... bits or 0 + +Help on function save_trace_file in module ida_dbg: + +save_trace_file(*args) + save_trace_file(filename, description) -> bool + + + Save the current trace in the specified file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function savefile in module idc: + +savefile(filepath, pos, ea, size) + +Help on function sel2para in module idc: + +sel2para(sel) + Get a selector value + + @param sel: the selector number + + @return: selector value if found + otherwise the input value (sel) + + @note: selector values are always in paragraphs + +Help on function select_thread in module ida_dbg: + +select_thread(*args) + select_thread(tid) -> bool + + + Select the given thread as the current debugged thread. All thread + related execution functions will work on this thread. The process must + be suspended to select a new thread. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param tid: ID of the thread to select (C++: thid_t) + @return: false if the thread doesn't exist. + +Help on function selector_by_name in module idc: + +selector_by_name(segname) + Get segment selector by name + + @param segname: name of segment + + @return: segment selector or BADADDR + +Help on function send_dbg_command in module idc: + +send_dbg_command(cmd) + Sends a command to the debugger module and returns the output string. + An exception will be raised if the debugger is not running or the current debugger does not export + the 'send_dbg_command' IDC command. + +Help on function set_array_long in module idc: + +set_array_long(array_id, idx, value) + Sets the long value of an array element. + + @param array_id: The array ID. + @param idx: Index of an element. + @param value: 32bit or 64bit value to store in the array + + @return: 1 in case of success, 0 otherwise + +Help on function set_array_params in module idc: + +set_array_params(ea, flags, litems, align) + Set array representation format + + @param ea: linear address + @param flags: combination of AP_... constants or 0 + @param litems: number of items per line. 0 means auto + @param align: element alignment + - -1: do not align + - 0: automatic alignment + - other values: element width + + @return: 1-ok, 0-failure + +Help on function set_array_string in module idc: + +set_array_string(array_id, idx, value) + Sets the string value of an array element. + + @param array_id: The array ID. + @param idx: Index of an element. + @param value: String value to store in the array + + @return: 1 in case of success, 0 otherwise + +Help on function set_bmask_cmt in module idc: + +set_bmask_cmt(enum_id, bmask, cmt, repeatable) + Set bitmask comment (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param cmt: comment + repeatable - type of comment, 0-regular, 1-repeatable + + @return: 1-ok, 0-failed + +Help on function set_bmask_name in module idc: + +set_bmask_name(enum_id, bmask, name) + Set bitmask name (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param name: name of bitmask + + @return: 1-ok, 0-failed + +Help on function set_bpt_attr in module idc: + +set_bpt_attr(address, bptattr, value) + modifiable characteristics of a breakpoint + + @param address: any address in the breakpoint range + @param bptattr: the attribute code, one of BPTATTR_* constants + BPTATTR_CND is not allowed, see set_bpt_cond() + @param value: the attibute value + + @return: success + +Help on function set_bpt_cond in module idc: + +set_bpt_cond(ea, cnd, is_lowcnd=0) + Set breakpoint condition + + @param ea: any address in the breakpoint range + @param cnd: breakpoint condition + @param is_lowcnd: 0 - regular condition, 1 - low level condition + + @return: success + +Help on function set_cmt in module ida_bytes: + +set_cmt(*args) + set_cmt(ea, comm, rptble) -> bool + + + Set an indented comment. + + @param ea: linear address (C++: ea_t) + @param comm: comment string NULL: do nothing (return 0) "" : + delete comment (C++: const char *) + @param rptble: is repeatable? (C++: bool) + @return: success + +Help on function set_color in module idc: + +set_color(ea, what, color) + Set item color + + @param ea: address of the item + @param what: type of the item (one of CIC_* constants) + @param color: new color code in RGB (hex 0xBBGGRR) + + @return: success (True or False) + +Help on function set_debugger_event_cond in module ida_dbg: + +set_debugger_event_cond(*args) + set_debugger_event_cond(nonnul_cond) + +Help on function set_debugger_options in module ida_dbg: + +set_debugger_options(*args) + set_debugger_options(options) -> uint + + + Set debugger options. Replaces debugger options with the specification + combination 'Debugger options' + + @param options (C++: uint) + @return: the old debugger options + +Help on function set_default_sreg_value in module idc: + +set_default_sreg_value(ea, reg, value) + Set default segment register value for a segment + + @param ea: any address in the segment + if no segment is present at the specified address + then all segments will be affected + @param reg: name of segment register + @param value: default value of the segment register. -1-undefined. + +Help on function set_enum_bf in module ida_enum: + +set_enum_bf(*args) + set_enum_bf(id, bf) -> bool + + + Set 'bitfield' bit of enum (i.e. convert it to a bitfield) + + + @param id (C++: enum_t) + @param bf (C++: bool) + +Help on function set_enum_cmt in module ida_enum: + +set_enum_cmt(*args) + set_enum_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum type. + + + @param id (C++: enum_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_flag in module ida_enum: + +set_enum_flag(*args) + set_enum_flag(id, flag) -> bool + + + Set data representation flags. + + + @param id (C++: enum_t) + @param flag (C++: flags_t) + +Help on function set_enum_idx in module ida_enum: + +set_enum_idx(*args) + set_enum_idx(id, idx) -> bool + + + Set serial number of enum. Also see 'get_enum_idx()' . + + @param id (C++: enum_t) + @param idx (C++: size_t) + +Help on function set_enum_member_cmt in module ida_enum: + +set_enum_member_cmt(*args) + set_enum_member_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum member. + + + @param id (C++: const_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_member_name in module ida_enum: + +set_enum_member_name(*args) + set_enum_member_name(id, name) -> bool + + + Set name of enum member. + + + @param id (C++: const_t) + @param name (C++: const char *) + +Help on function set_enum_name in module ida_enum: + +set_enum_name(*args) + set_enum_name(id, name) -> bool + + + Set name of enum type. + + + @param id (C++: enum_t) + @param name (C++: const char *) + +Help on function set_enum_width in module ida_enum: + +set_enum_width(*args) + set_enum_width(id, width) -> bool + + + See comment for 'get_enum_width()' + + + @param id (C++: enum_t) + @param width (C++: int) + +Help on function set_fchunk_attr in module idc: + +set_fchunk_attr(ea, attr, value) + Set a function chunk attribute + + @param ea: any address in the chunk + @param attr: only FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER + @param value: desired value + + @return: 0 if failed, 1 if success + +Help on function set_fixup in module idc: + +set_fixup(ea, fixuptype, fixupflags, targetsel, targetoff, displ) + Set fixup information + + @param ea: address to set fixup information about + @param fixuptype: fixup type. see get_fixup_target_type() + for possible fixup types. + @param fixupflags: fixup flags. see get_fixup_target_flags() + for possible fixup types. + @param targetsel: target selector + @param targetoff: target offset + @param displ: displacement + + @return: none + +Help on function set_flag in module idc: + +set_flag(off, bit, value) + #-------------------------------------------------------------------------- + +Help on function set_frame_size in module idc: + +set_frame_size(ea, lvsize, frregs, argsize) + Make function frame + + @param ea: any address belonging to the function + @param lvsize: size of function local variables + @param frregs: size of saved registers + @param argsize: size of function arguments + + @return: ID of function frame or -1 + If the function did not have a frame, the frame + will be created. Otherwise the frame will be modified + +Help on function set_func_attr in module idc: + +set_func_attr(ea, attr, value) + Set a function attribute + + @param ea: any address belonging to the function + @param attr: one of FUNCATTR_... constants + @param value: new value of the attribute + + @return: 1-ok, 0-failed + +Help on function set_func_cmt in module idc: + +set_func_cmt(ea, cmt, repeatable) + Set function comment + + @param ea: any address belonging to the function + @param cmt: a function comment line + @param repeatable: 1: get repeatable comment + 0: get regular comment + +Help on function set_func_end in module ida_funcs: + +set_func_end(*args) + set_func_end(ea, newend) -> bool + + + Move function chunk end address. + + @param ea: any address in the function (C++: ea_t) + @param newend: new end address of the function (C++: ea_t) + @return: success + +Help on function set_func_flags in module idc: + +set_func_flags(ea, flags) + Change function flags + + @param ea: any address belonging to the function + @param flags: see get_func_flags() for explanations + + @return: !=0 - ok + +Help on function set_hash_long in module idc: + +set_hash_long(hash_id, key, value) + Sets the long value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + @param value: 32bit or 64bit value to store in the hash + + @return: 1 in case of success, 0 otherwise + +Help on function set_hash_string in module idc: + +set_hash_string(hash_id, key, value) + Sets the string value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + @param value: string value to store in the hash + + @return: 1 in case of success, 0 otherwise + +Help on function set_ida_state in module ida_auto: + +set_ida_state(*args) + set_ida_state(st) -> idastate_t + + + Change IDA status indicator value + + @param st: - new indicator status (C++: idastate_t) + @return: old indicator status + +Help on function set_inf_attr in module idc: + +set_inf_attr(attr, value) + +Help on function set_local_type in module idc: + +set_local_type(ordinal, input, flags) + Parse one type declaration and store it in the specified slot + + @param ordinal: slot number (1...NumberOfLocalTypes) + -1 means allocate new slot or reuse the slot + of the existing named type + @param input: C declaration. Empty input empties the slot + @param flags: combination of PT_... constants or 0 + + @return: slot number or 0 if error + +Help on function set_manual_insn in module ida_bytes: + +set_manual_insn(*args) + set_manual_insn(ea, manual_insn) + + + Set manual instruction string. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @param manual_insn: "" - delete manual string. NULL - do nothing (C++: + const char *) + +Help on function set_member_cmt in module idc: + +set_member_cmt(sid, member_offset, comment, repeatable) + Change structure member comment + + @param sid: structure type ID + @param member_offset: offset of the member + @param comment: new comment of the structure member + @param repeatable: 1: change repeatable comment + 0: change regular comment + + @return: != 0 - ok + +Help on function set_member_name in module idc: + +set_member_name(sid, member_offset, name) + Change structure member name + + @param sid: structure type ID + @param member_offset: offset of the member + @param name: new name of the member + + @return: != 0 - ok. + +Help on function set_member_type in module idc: + +set_member_type(sid, member_offset, flag, typeid, nitems, target=-1, tdelta=0, reftype=2) + Change structure member type + + @param sid: structure type ID + @param member_offset: offset of the member + @param flag: new type of the member. Should be one of + FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA + @param typeid: if is_struct(flag) then typeid specifies the structure id for the member + if is_off0(flag) then typeid specifies the offset base. + if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). + if is_stroff(flag) then typeid specifies the structure id + if is_enum(flag) then typeid specifies the enum id + if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) + Otherwise typeid should be -1. + @param nitems: number of items in the member + + @param target: target address of the offset expr. You may specify it as + -1, ida will calculate it itself + @param tdelta: offset target delta. usually 0 + @param reftype: see REF_... definitions + + @note: The remaining arguments are allowed only if is_off0(flag) and you want + to specify a complex offset expression + + @return: !=0 - ok. + +Help on function set_name in module idc: + +set_name(ea, name, flags=0) + Rename an address + + @param ea: linear address + @param name: new name of address. If name == "", then delete old name + @param flags: combination of SN_... constants + + @return: 1-ok, 0-failure + +Help on function set_processor_type in module ida_idp: + +set_processor_type(*args) + set_processor_type(procname, level) -> bool + + + Set target processor type. Once a processor module is loaded, it + cannot be replaced until we close the idb. + + @param procname: name of processor type (one of names present in + \ph{psnames}) (C++: const char *) + @param level: SETPROC_ (C++: setproc_level_t) + @return: success + +Help on function set_reg_value in module idc: + +set_reg_value(value, name) + Set register value + + @param name: the register name + @param value: new register value + + @note: The debugger should be running + It is not necessary to use this function to set register values. + A register name in the left side of an assignment will do too. + +Help on function set_remote_debugger in module ida_dbg: + +set_remote_debugger(*args) + set_remote_debugger(host, _pass, port=-1) + + + Set remote debugging options. Should be used before starting the + debugger. + + @param host: If empty, IDA will use local debugger. If NULL, the host + will not be set. (C++: const char *) + @param port: If -1, the default port number will be used (C++: int) + +Help on function set_root_filename in module ida_nalt: + +set_root_filename(*args) + set_root_filename(file) + + + Set full path of the input file. + + + @param file (C++: const char *) + +Help on function set_segm_addressing in module idc: + +set_segm_addressing(ea, bitness) + Change segment addressing + + @param ea: any address in the segment + @param bitness: 0: 16bit, 1: 32bit, 2: 64bit + + @return: success (boolean) + +Help on function set_segm_alignment in module idc: + +set_segm_alignment(ea, alignment) + Change alignment of the segment + + @param ea: any address in the segment + @param alignment: new alignment of the segment (one of the sa... constants) + + @return: success (boolean) + +Help on function set_segm_attr in module idc: + +set_segm_attr(segea, attr, value) + Set segment attribute + + @param segea: any address within segment + @param attr: one of SEGATTR_... constants + + @note: Please note that not all segment attributes are modifiable. + Also some of them should be modified using special functions + like set_segm_addressing, etc. + +Help on function set_segm_class in module idc: + +set_segm_class(ea, segclass) + Change class of the segment + + @param ea: any address in the segment + @param segclass: new class of the segment + + @return: success (boolean) + +Help on function set_segm_combination in module idc: + +set_segm_combination(segea, comb) + Change combination of the segment + + @param segea: any address in the segment + @param comb: new combination of the segment (one of the sc... constants) + + @return: success (boolean) + +Help on function set_segm_name in module idc: + +set_segm_name(ea, name) + Change name of the segment + + @param ea: any address in the segment + @param name: new name of the segment + + @return: success (boolean) + +Help on function set_segm_type in module idc: + +set_segm_type(segea, segtype) + Set segment type + + @param segea: any address within segment + @param segtype: new segment type: + + @return: !=0 - ok + +Help on function set_segment_bounds in module idc: + +set_segment_bounds(ea, startea, endea, flags) + Change segment boundaries + + @param ea: any address in the segment + @param startea: new start address of the segment + @param endea: new end address of the segment + @param flags: combination of SEGMOD_... flags + + @return: boolean success + +Help on function set_selector in module ida_segment: + +set_selector(*args) + set_selector(selector, paragraph) -> int + + + Set mapping of selector to a paragraph. You should call this + functionbeforecreating a segment which uses the selector, otherwise + the creation of the segment will fail. + + @param selector: number of selector to map if selector == BADSEL , + then return 0 (fail) if the selector has had a + mapping, old mapping is destroyed if the selector + number is equal to paragraph value, then the mapping + is destroyed because we don't need to keep trivial + mappings. (C++: sel_t) + @param paragraph: paragraph to map selector (C++: ea_t) + +Help on function set_source_linnum in module ida_nalt: + +set_source_linnum(*args) + set_source_linnum(ea, lnnum) + +Help on function set_step_trace_options in module ida_dbg: + +set_step_trace_options(*args) + set_step_trace_options(options) + + + Modify step tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function change_storage_type in module ida_bytes: + +change_storage_type(*args) + change_storage_type(start_ea, end_ea, stt) -> error_t + + + Change flag storage type for address range. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: error code + +Help on function set_struc_cmt in module ida_struct: + +set_struc_cmt(*args) + set_struc_cmt(id, cmt, repeatable) -> bool + + + Set structure comment. + + + @param id (C++: tid_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_struc_idx in module idc: + +set_struc_idx(sid, index) + Change structure index + + @param sid: structure type ID + @param index: new index of the structure + + @return: != 0 - ok + + @note: See get_first_struc_idx() for the explanation of + structure indices and IDs. + +Help on function set_struc_name in module ida_struct: + +set_struc_name(*args) + set_struc_name(id, name) -> bool + + + Set structure name. + + + @param id (C++: tid_t) + @param name (C++: const char *) + +Help on function set_tail_owner in module idc: + +set_tail_owner(tailea, funcea) + Change the function chunk owner + + @param tailea: any address in the function chunk + @param funcea: the starting address of the new owner + + @return: False if failed, True if success + + @note: The new owner must already have the chunk appended before the call + +Help on function set_target_assembler in module ida_idp: + +set_target_assembler(*args) + set_target_assembler(asmnum) -> bool + + + Set target assembler. + + @param asmnum: number of assembler in the current processor module + (C++: int) + @return: success + +Help on function set_trace_file_desc in module ida_dbg: + +set_trace_file_desc(*args) + set_trace_file_desc(filename, description) -> bool + + + Change the description of the specified trace file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function split_sreg_range in module idc: + +split_sreg_range(ea, reg, value, tag=2) + Set value of a segment register. + + @param ea: linear address + @param reg: name of a register, like "cs", "ds", "es", etc. + @param value: new value of the segment register. + @param tag: of SR_... constants + + @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. + +Help on function start_process in module ida_dbg: + +start_process(*args) + start_process(path=None, args=None, sdir=None) -> int + + + Start a process in the debugger. \sq{Type, Asynchronous function - + available as Request, Notification, 'dbg_process_start' }You can also + use the 'run_to()' function to easily start the execution of a process + until a given address is reached.For all parameters, a NULL value + indicates the debugger will take the value from the defined Process + Options. + + @param path: path to the executable to start (C++: const char *) + @param args: arguments to pass to process (C++: const char *) + @param sdir: starting directory for the process (C++: const char *) + +Help on function step_into in module ida_dbg: + +step_into(*args) + step_into() -> bool + + + Execute one instruction in the current thread. Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_into' } + +Help on function step_over in module ida_dbg: + +step_over(*args) + step_over() -> bool + + + Execute one instruction in the current thread, but without entering + into functions. Others threads keep suspended. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_step_over' } + +Help on function step_until_ret in module ida_dbg: + +step_until_ret(*args) + step_until_ret() -> bool + + + Execute instructions in the current thread until a function return + instruction is executed (aka "step out"). Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_until_ret' } + +Help on function strlen in module idc: + +strlen(s) + +Help on function strstr in module idc: + +strstr(s1, s2) + +Help on function substr in module idc: + +substr(s, x1, x2) + +Help on function suspend_process in module ida_dbg: + +suspend_process(*args) + suspend_process() -> bool + + + Suspend the process in the debugger. \sq{ Type,Synchronous function + (if in a notification handler)Asynchronous function (everywhere + else)available as Request, Notification,none (if in a notification + handler) 'dbg_suspend_process' (everywhere else) }The + 'suspend_process()' function can be called from a notification handler + to force the stopping of the process. In this case, no notification + will be generated. When you suspend a process, the running command is + always aborted. + +Help on function suspend_thread in module ida_dbg: + +suspend_thread(*args) + suspend_thread(tid) -> int + + + Suspend thread. Suspending a thread may deadlock the whole application + if the suspended was owning some synchronization objects. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function take_memory_snapshot in module ida_segment: + +take_memory_snapshot(*args) + take_memory_snapshot(only_loader_segs) -> bool + + + Take a memory snapshot of the running process. + + @param only_loader_segs: only is_loader_segm() segments will be + affected (C++: bool) + @return: success + +Help on function to_ea in module idc: + +to_ea(seg, off) + Return value of expression: ((seg<<4) + off) + +Help on function toggle_bnot in module idc: + +toggle_bnot(ea, n) + Toggle the bitwise not operator for the operand + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + +Help on function toggle_sign in module ida_bytes: + +toggle_sign(*args) + toggle_sign(ea, n) -> bool + + + Toggle sign of n-th operand. allowed values of n: 0-first operand, + 1-other operands + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function update_extra_cmt in module ida_lines: + +update_extra_cmt(*args) + update_extra_cmt(ea, what, str) + +Help on function update_hidden_range in module idc: + +update_hidden_range(ea, visible) + Set hidden range state + + @param ea: any address belonging to the hidden range + @param visible: new state of the range + + @return: != 0 - ok + +Help on function validate_idb_names in module idc: + +validate_idb_names(do_repair=0) + check consistency of IDB name records + @param do_repair: try to repair netnode header it TRUE + @return: number of inconsistent name records + +Help on function value_is_float in module idc: + +value_is_float(var) + +Help on function value_is_func in module idc: + +value_is_func(var) + +Help on function value_is_int64 in module idc: + +value_is_int64(var) + +Help on function value_is_long in module idc: + +value_is_long(var) + +Help on function value_is_pvoid in module idc: + +value_is_pvoid(var) + +Help on function value_is_string in module idc: + +value_is_string(var) + # List of built-in functions + # -------------------------- + # + # The following conventions are used in this list: + # 'ea' is a linear address + # 'success' is 0 if a function failed, 1 otherwise + # 'void' means that function returns no meaningful value (always 0) + # + # All function parameter conversions are made automatically. + # + # ---------------------------------------------------------------------------- + # M I S C E L L A N E O U S + # ---------------------------------------------------------------------------- + +Help on function wait_for_next_event in module ida_dbg: + +wait_for_next_event(*args) + wait_for_next_event(wfne, timeout) -> dbg_event_code_t + + + Wait for the next event.This function (optionally) resumes the process + execution, and waits for a debugger event until a possible timeout + occurs. + + @param wfne: combination of Wait for debugger event flags constants + (C++: int) + @param timeout: number of seconds to wait, -1-infinity (C++: int) + @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= + 0) + +Help on function warning in module ida_kernwin: + +warning(*args) + warning(format) + + + Display a message in a message box + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + The user will be able to hide messages if they appear twice in a row on + the screen + +Help on function write_dbg_memory in module idc: + +write_dbg_memory(ea, data) + Write to debugger memory. + + @param ea: linear address + @param data: string to write + @return: number of written bytes (-1 - network/debugger error) + + Thread-safe function (may be called only from the main thread and debthread) + +Help on function writelong in module idc: + +writelong(handle, dword, mostfirst) + +Help on function writeshort in module idc: + +writeshort(handle, word, mostfirst) + +Help on function writestr in module idc: + +writestr(handle, s) + +Help on function xtol in module idc: + +xtol(s) + diff --git a/release_pydoc_injections3.txt b/release_pydoc_injections3.txt new file mode 100644 index 0000000..8b6ade0 --- /dev/null +++ b/release_pydoc_injections3.txt @@ -0,0 +1,78937 @@ +Help on function auto_apply_tail in module ida_auto: + +auto_apply_tail(*args) -> 'void' + auto_apply_tail(tail_ea, parent_ea) + + + Plan to apply the tail_ea chunk to the parent + + @param tail_ea: linear address of start of tail (C++: ea_t) + @param parent_ea: linear address within parent. If BADADDR, + automatically try to find parent via xrefs. (C++: + ea_t) + +Help on function auto_apply_type in module ida_auto: + +auto_apply_type(*args) -> 'void' + auto_apply_type(caller, callee) + + + Plan to apply the callee's type to the calling point. + + + @param caller (C++: ea_t) + @param callee (C++: ea_t) + +Help on function auto_cancel in module ida_auto: + +auto_cancel(*args) -> 'void' + auto_cancel(ea1, ea2) + + + Remove an address range (ea1..ea2) from queues 'AU_CODE' , 'AU_PROC' , + 'AU_USED' . To remove an address range from other queues use + 'auto_unmark()' function. 'ea1' may be higher than 'ea2', the kernel + will swap them in this case. 'ea2' doesn't belong to the range. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on class auto_display_t in module ida_auto: + +class auto_display_t(builtins.object) + | Proxy of C++ auto_display_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> auto_display_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_auto_display_t(...) + | delete_auto_display_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | auto_display_t_ea_get(self) -> ea_t + | + | state + | auto_display_t_state_get(self) -> idastate_t + | + | thisown + | The membership flag + | + | type + | auto_display_t_type_get(self) -> atype_t + +Help on function auto_get in module ida_auto: + +auto_get(*args) -> 'ea_t' + auto_get(type, lowEA, highEA) -> ea_t + + + Retrieve an address from queues regarding their priority. Returns + 'BADADDR' if no addresses not lower than 'lowEA' and less than + 'highEA' are found in the queues. Otherwise *type will have queue + type. + + @param type (C++: atype_t *) + @param lowEA (C++: ea_t) + @param highEA (C++: ea_t) + +Help on function auto_is_ok in module ida_auto: + +auto_is_ok(*args) -> 'bool' + auto_is_ok() -> bool + + + Are all queues empty? (i.e. has autoanalysis finished?). + +Help on function auto_make_code in module ida_auto: + +auto_make_code(*args) -> 'void' + auto_make_code(ea) + + + Plan to make code. + + + @param ea (C++: ea_t) + +Help on function auto_make_proc in module ida_auto: + +auto_make_proc(*args) -> 'void' + auto_make_proc(ea) + + + Plan to make code&function. + + + @param ea (C++: ea_t) + +Help on function auto_mark in module ida_auto: + +auto_mark(*args) -> 'void' + auto_mark(ea, type) + + + Put single address into a queue. Queues keep addresses sorted. + + + @param ea (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_mark_range in module ida_auto: + +auto_mark_range(*args) -> 'void' + auto_mark_range(start, end, type) + + + Put range of addresses into a queue. 'start' may be higher than 'end', + the kernel will swap them in this case. 'end' doesn't belong to the + range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_recreate_insn in module ida_auto: + +auto_recreate_insn(*args) -> 'int' + auto_recreate_insn(ea) -> int + + + Try to create instruction + + @param ea: linear address of callee (C++: ea_t) + @return: the length of the instruction or 0 + +Help on function auto_unmark in module ida_auto: + +auto_unmark(*args) -> 'void' + auto_unmark(start, end, type) + + + Remove range of addresses from a queue. 'start' may be higher than + 'end', the kernel will swap them in this case. 'end' doesn't belong to + the range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_wait in module ida_auto: + +auto_wait(*args) -> 'bool' + auto_wait() -> bool + + + Process everything in the queues and return true. + + @return: false if the user clicked cancel. (the wait box must be + displayed by the caller if desired) + +Help on function auto_wait_range in module ida_auto: + +auto_wait_range(*args) -> 'ssize_t' + auto_wait_range(ea1, ea2) -> ssize_t + + + Process everything in the specified range and return true. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + @return: number of autoanalysis steps made. -1 if the user clicked + cancel. (the wait box must be displayed by the caller if + desired) + +Help on function enable_auto in module ida_auto: + +enable_auto(*args) -> 'bool' + enable_auto(enable) -> bool + + + Temporarily enable/disable autoanalyzer. Not user-facing, but rather + because IDA sometimes need to turn AA on/off regardless of + inf.s_genflags:INFFL_AUTO + + @param enable (C++: bool) + @return: old state + +Help on function get_auto_display in module ida_auto: + +get_auto_display(*args) -> 'void' + get_auto_display(auto_display) + + + Get structure which holds the autoanalysis indicator contents. + + + @param auto_display (C++: auto_display_t *) + +Help on function get_auto_state in module ida_auto: + +get_auto_state(*args) -> 'atype_t' + get_auto_state() -> atype_t + + + Get current state of autoanalyzer. If auto_state == 'AU_NONE' , IDA is + currently not running the analysis (it could be temporarily + interrupted to perform the user's requests, for example). + +Help on function is_auto_enabled in module ida_auto: + +is_auto_enabled(*args) -> 'bool' + is_auto_enabled() -> bool + + + Get autoanalyzer state. + +Help on function may_create_stkvars in module ida_auto: + +may_create_stkvars(*args) -> 'bool' + may_create_stkvars() -> bool + + + Is it allowed to create stack variables automatically?. This function + should be used by IDP modules before creating stack vars. + +Help on function may_trace_sp in module ida_auto: + +may_trace_sp(*args) -> 'bool' + may_trace_sp() -> bool + + + Is it allowed to trace stack pointer automatically?. This function + should be used by IDP modules before tracing sp. + +Help on function peek_auto_queue in module ida_auto: + +peek_auto_queue(*args) -> 'ea_t' + peek_auto_queue(low_ea, type) -> ea_t + + + Peek into a queue 'type' for an address not lower than 'low_ea'. Do + not remove address from the queue. + + @param low_ea (C++: ea_t) + @param type (C++: atype_t) + @return: the address or BADADDR + +Help on function plan_and_wait in module ida_auto: + +plan_and_wait(*args) -> 'int' + plan_and_wait(ea1, ea2, final_pass=True) -> int + + + Analyze the specified range. Try to create instructions where + possible. Make the final pass over the specified range if specified. + This function doesn't return until the range is analyzed. + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + @param final_pass (C++: bool) + +Help on function plan_ea in module ida_auto: + +plan_ea(*args) -> 'void' + plan_ea(ea) + + + Plan to perform reanalysis. + + + @param ea (C++: ea_t) + +Help on function plan_range in module ida_auto: + +plan_range(*args) -> 'void' + plan_range(sEA, eEA) + + + Plan to perform reanalysis. + + + @param sEA (C++: ea_t) + @param eEA (C++: ea_t) + +Help on function reanalyze_callers in module ida_auto: + +reanalyze_callers(*args) -> 'void' + reanalyze_callers(ea, noret) + + + Plan to reanalyze callers of the specified address. This function will + add to 'AU_USED' queue all instructions that call (not jump to) the + specified address. + + @param ea: linear address of callee (C++: ea_t) + @param noret: !=0: the callee doesn't return, mark to undefine + subsequent instructions in the caller. 0: do nothing. + (C++: bool) + +Help on function revert_ida_decisions in module ida_auto: + +revert_ida_decisions(*args) -> 'void' + revert_ida_decisions(ea1, ea2) + + + Delete all analysis info that IDA generated for for the given range. + + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on function set_auto_state in module ida_auto: + +set_auto_state(*args) -> 'atype_t' + set_auto_state(new_state) -> atype_t + + + Set current state of autoanalyzer. + + @param new_state: new state of autoanalyzer (C++: atype_t) + @return: previous state + +Help on function set_ida_state in module ida_auto: + +set_ida_state(*args) -> 'idastate_t' + set_ida_state(st) -> idastate_t + + + Change IDA status indicator value + + @param st: - new indicator status (C++: idastate_t) + @return: old indicator status + +Help on function show_addr in module ida_auto: + +show_addr(*args) -> 'void' + show_addr(ea) + + + Show an address on the autoanalysis indicator. The address is + displayed in the form " @:12345678". + + @param ea: - linear address to display (C++: ea_t) + +Help on function show_auto in module ida_auto: + +show_auto(*args) -> 'void' + show_auto(ea, type=AU_NONE) + + + Change autoanalysis indicator value. + + @param ea: linear address being analyzed (C++: ea_t) + @param type: autoanalysis type (see Autoanalysis queues ) (C++: + atype_t) + +Help on function __walk_types_and_formats in module ida_bytes: + +__walk_types_and_formats(formats, type_action, format_action, installing) + # ----------------------------------------------------------------------- + +Help on function add_byte in module ida_bytes: + +add_byte(*args) -> 'void' + add_byte(ea, value) + + + Add a value to one byte of the program. This function works for wide + byte processors too. + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint32) + +Help on function add_dword in module ida_bytes: + +add_dword(*args) -> 'void' + add_dword(ea, value) + + + Add a value to one dword of the program. This function works for wide + byte processors too. This function takes into account order of bytes + specified in \inf{is_be()}this function works incorrectly if + \ph{nbits} > 16 + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function add_hidden_range in module ida_bytes: + +add_hidden_range(*args) -> 'bool' + add_hidden_range(ea1, ea2, description, header, footer, color) -> bool + + + Mark a range of addresses as hidden. The range will be created in the + invisible state with the default color + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (C++: ea_t) + @param description: range parameters (C++: const char *) + @param header: range parameters (C++: const char *) + @param footer: range parameters (C++: const char *) + @param color (C++: bgcolor_t) + @return: success + +Help on function add_mapping in module ida_bytes: + +add_mapping(*args) -> 'bool' + add_mapping(_from, to, size) -> bool + + + IDA supports memory mapping. References to the addresses from the + mapped range use data and meta-data from the mapping range.You should + set flag PR2_MAPPING in ph.flag2 to use memory mapping Add memory + mapping range. + + @param _from: start of the mapped range (nonexistent address) (C++: + ea_t) + @param to: start of the mapping range (existent address) (C++: ea_t) + @param size: size of the range (C++: asize_t) + @return: success + +Help on function add_qword in module ida_bytes: + +add_qword(*args) -> 'void' + add_qword(ea, value) + + + Add a value to one qword of the program. This function does not work + for wide byte processors. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function add_word in module ida_bytes: + +add_word(*args) -> 'void' + add_word(ea, value) + + + Add a value to one word of the program. This function works for wide + byte processors too. This function takes into account order of bytes + specified in \inf{is_be()} + + @param ea: linear address (C++: ea_t) + @param value: byte value (C++: uint64) + +Help on function align_flag in module ida_bytes: + +align_flag(*args) -> 'flags_t' + align_flag() -> flags_t + + + Get a flags_t representing an alignment directive. + +Help on function append_cmt in module ida_bytes: + +append_cmt(*args) -> 'bool' + append_cmt(ea, str, rptble) -> bool + + + Append to an indented comment. Creates a new comment if none exists. + Appends a newline character and the specified string otherwise. + + @param ea: linear address (C++: ea_t) + @param str: comment string to append (C++: const char *) + @param rptble: append to repeatable comment? (C++: bool) + @return: success + +Help on function attach_custom_data_format in module ida_bytes: + +attach_custom_data_format(*args) -> 'bool' + attach_custom_data_format(dtid, dfid) -> bool + + + Attach the data format to the data type. + + @param dtid: data type id that can use the data format. 0 means all + standard data types. Such data formats can be applied to + any data item or instruction operands. For instruction + operands, the data_format_t::value_size check is not + performed by the kernel. (C++: int) + @param dfid: data format id (C++: int) + +Help on function bin_flag in module ida_bytes: + +bin_flag(*args) -> 'flags_t' + bin_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function bin_search in module ida_bytes: + +bin_search(*args) -> 'ea_t' + bin_search(start_ea, end_ea, image, imask, step, flags) -> ea_t + +Help on function byte_flag in module ida_bytes: + +byte_flag(*args) -> 'flags_t' + byte_flag() -> flags_t + + + Get a flags_t representing a byte. + +Help on function bytesize in module ida_bytes: + +bytesize(*args) -> 'int' + bytesize(ea) -> int + + + Get number of bytes required to store a byte at the given address. + + + @param ea (C++: ea_t) + +Help on function calc_def_align in module ida_bytes: + +calc_def_align(*args) -> 'int' + calc_def_align(ea, mina, maxa) -> int + + + Calculate default alignment. + + + @param ea (C++: ea_t) + @param mina (C++: int) + @param maxa (C++: int) + +Help on function calc_dflags in module ida_bytes: + +calc_dflags(*args) -> 'flags_t' + calc_dflags(f, force) -> flags_t + +Help on function calc_max_align in module ida_bytes: + +calc_max_align(*args) -> 'int' + calc_max_align(endea) -> int + + + Returns: 0..32. + + + @param endea (C++: ea_t) + +Help on function calc_max_item_end in module ida_bytes: + +calc_max_item_end(*args) -> 'ea_t' + calc_max_item_end(ea, how=15) -> ea_t + + + Calculate maximal reasonable end address of a new item. This function + will limit the item with the current segment bounds. + + @param ea: linear address (C++: ea_t) + @param how: when to stop the search. A combination of Item end search + flags (C++: int) + @return: end of new item. If it is not possible to create an item, it + will return 'ea'. + +Help on function calc_min_align in module ida_bytes: + +calc_min_align(*args) -> 'int' + calc_min_align(length) -> int + + + Returns: 1..32. + + + @param length (C++: asize_t) + +Help on function can_define_item in module ida_bytes: + +can_define_item(*args) -> 'bool' + can_define_item(ea, length, flags) -> bool + + + Can define item (instruction/data) of the specified 'length', starting + at 'ea'?if there is an item starting at 'ea', this function ignores + itthis function converts to unexplored all encountered data items with + fixup information. Should be fixed in the future.a new item would + cross segment boundariesa new item would overlap with existing items + (except items specified by 'flags') + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param flags: if not 0, then the kernel will ignore the data types + specified by the flags and destroy them. For example: + 1000 dw 5 1002 db 5 ; undef + 1003 db 5 ; undef 1004 dw 5 + 1006 dd 5 can_define_item(1000, 6, 0) + - false because of dw at 1004 can_define_item(1000, + 6, word_flag()) - true, word at 1004 is destroyed (C++: + flags_t) + @return: 1-yes, 0-no + +Help on function change_storage_type in module ida_bytes: + +change_storage_type(*args) -> 'error_t' + change_storage_type(start_ea, end_ea, stt) -> error_t + + + Change flag storage type for address range. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: error code + +Help on function char_flag in module ida_bytes: + +char_flag(*args) -> 'flags_t' + char_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function chunk_size in module ida_bytes: + +chunk_size(*args) -> 'asize_t' + chunk_size(ea) -> asize_t + + + Get size of the contiguous address block containing 'ea'. + + @param ea (C++: ea_t) + @return: 0 if 'ea' doesn't belong to the program. + +Help on function chunk_start in module ida_bytes: + +chunk_start(*args) -> 'ea_t' + chunk_start(ea) -> ea_t + + + Get start of the contiguous address block containing 'ea'. + + @param ea (C++: ea_t) + @return: BADADDR if 'ea' doesn't belong to the program. + +Help on function clr_lzero in module ida_bytes: + +clr_lzero(*args) -> 'bool' + clr_lzero(ea, n) -> bool + + + Clear lzero bit. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function clr_op_type in module ida_bytes: + +clr_op_type(*args) -> 'bool' + clr_op_type(ea, n) -> bool + + + Remove operand representation information. (set operand representation + to be 'undefined') + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function code_flag in module ida_bytes: + +code_flag(*args) -> 'flags_t' + code_flag() -> flags_t + + + 'FF_CODE' + +Help on function create_16bit_data in module ida_bytes: + +create_16bit_data(*args) -> 'bool' + create_16bit_data(ea, length) -> bool + + + Convert to 16-bit quantity (take byte size into account) + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + +Help on function create_32bit_data in module ida_bytes: + +create_32bit_data(*args) -> 'bool' + create_32bit_data(ea, length) -> bool + + + Convert to 32-bit quantity (take byte size into account) + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + +Help on function create_align in module ida_bytes: + +create_align(*args) -> 'bool' + create_align(ea, length, alignment) -> bool + + + Alignment: 0 or 2..32. If it is 0, is will be calculated. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param alignment (C++: int) + +Help on function create_byte in module ida_bytes: + +create_byte(*args) -> 'bool' + create_byte(ea, length, force=False) -> bool + + + Convert to byte. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_custdata in module ida_bytes: + +create_custdata(*args) -> 'bool' + create_custdata(ea, length, dtid, fid, force=False) -> bool + + + Convert to custom data type. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param dtid (C++: int) + @param fid (C++: int) + @param force (C++: bool) + +Help on function create_data in module ida_bytes: + +create_data(*args) -> 'bool' + create_data(ea, dataflag, size, tid) -> bool + + + Convert to data (byte, word, dword, etc). This function may be used to + create arrays. + + @param ea: linear address (C++: ea_t) + @param dataflag: type of data. Value of function byte_flag() , + word_flag() , etc. (C++: flags_t) + @param size: size of array in bytes. should be divisible by the size + of one item of the specified type. for variable sized + items it can be specified as 0, and the kernel will try + to calculate the size. (C++: asize_t) + @param tid: type id. If the specified type is a structure, then tid is + structure id. Otherwise should be BADNODE . (C++: tid_t) + @return: success + +Help on function create_double in module ida_bytes: + +create_double(*args) -> 'bool' + create_double(ea, length, force=False) -> bool + + + Convert to double. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_dword in module ida_bytes: + +create_dword(*args) -> 'bool' + create_dword(ea, length, force=False) -> bool + + + Convert to dword. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_float in module ida_bytes: + +create_float(*args) -> 'bool' + create_float(ea, length, force=False) -> bool + + + Convert to float. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_oword in module ida_bytes: + +create_oword(*args) -> 'bool' + create_oword(ea, length, force=False) -> bool + + + Convert to octaword/xmm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_packed_real in module ida_bytes: + +create_packed_real(*args) -> 'bool' + create_packed_real(ea, length, force=False) -> bool + + + Convert to packed decimal real. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_qword in module ida_bytes: + +create_qword(*args) -> 'bool' + create_qword(ea, length, force=False) -> bool + + + Convert to quadword. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_strlit in module ida_bytes: + +create_strlit(*args) -> 'bool' + create_strlit(start, len, strtype) -> bool + + + Convert to string literal and give a meaningful name. 'start' may be + higher than 'end', the kernel will swap them in this case + + @param start: starting address (C++: ea_t) + @param len: length of the string in bytes. if 0, then + get_max_strlit_length() will be used to determine the + length (C++: size_t) + @param strtype: string type. one of String type codes (C++: int32) + @return: success + +Help on function create_struct in module ida_bytes: + +create_struct(*args) -> 'bool' + create_struct(ea, length, tid, force=False) -> bool + + + Convert to struct. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param tid (C++: tid_t) + @param force (C++: bool) + +Help on function create_tbyte in module ida_bytes: + +create_tbyte(*args) -> 'bool' + create_tbyte(ea, length, force=False) -> bool + + + Convert to tbyte. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_word in module ida_bytes: + +create_word(*args) -> 'bool' + create_word(ea, length, force=False) -> bool + + + Convert to word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_yword in module ida_bytes: + +create_yword(*args) -> 'bool' + create_yword(ea, length, force=False) -> bool + + + Convert to ymm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function create_zword in module ida_bytes: + +create_zword(*args) -> 'bool' + create_zword(ea, length, force=False) -> bool + + + Convert to zmm word. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param force (C++: bool) + +Help on function cust_flag in module ida_bytes: + +cust_flag(*args) -> 'flags_t' + cust_flag() -> flags_t + + + Get a flags_t representing custom type data. + +Help on function custfmt_flag in module ida_bytes: + +custfmt_flag(*args) -> 'flags_t' + custfmt_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on class data_format_t in module ida_bytes: + +class data_format_t(builtins.object) + | Proxy of C++ data_format_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | Initialize self. See help(type(self)) for accurate signature. + | + | __real__init__ = __init__(self, *args) + | __init__(self, _self, name, value_size=0, menu_name=None, props=0, hotkey=None, text_width=0) -> data_format_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_data_format_t(...) + | delete_data_format_t(self) + | + | _data_format_t__get_id = __get_id(self, *args) -> 'int' + | __get_id(self) -> int + | + | is_present_in_menus(self, *args) -> 'bool' + | is_present_in_menus(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hotkey + | data_format_t_hotkey_get(self) -> char const * + | + | id + | __get_id(self) -> int + | + | menu_name + | data_format_t_menu_name_get(self) -> char const * + | + | name + | data_format_t_name_get(self) -> char const * + | + | props + | data_format_t_props_get(self) -> int + | + | text_width + | data_format_t_text_width_get(self) -> int32 + | + | thisown + | The membership flag + | + | value_size + | data_format_t_value_size_get(self) -> asize_t + +Help on class data_type_t in module ida_bytes: + +class data_type_t(builtins.object) + | Proxy of C++ data_type_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | Initialize self. See help(type(self)) for accurate signature. + | + | __real__init__ = __init__(self, *args) + | __init__(self, _self, name, value_size=0, menu_name=None, hotkey=None, asm_keyword=None, props=0) -> data_type_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_data_type_t(...) + | delete_data_type_t(self) + | + | _data_type_t__get_id = __get_id(self, *args) -> 'int' + | __get_id(self) -> int + | + | is_present_in_menus(self, *args) -> 'bool' + | is_present_in_menus(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | asm_keyword + | data_type_t_asm_keyword_get(self) -> char const * + | + | hotkey + | data_type_t_hotkey_get(self) -> char const * + | + | id + | __get_id(self) -> int + | + | menu_name + | data_type_t_menu_name_get(self) -> char const * + | + | name + | data_type_t_name_get(self) -> char const * + | + | props + | data_type_t_props_get(self) -> int + | + | thisown + | The membership flag + | + | value_size + | data_type_t_value_size_get(self) -> asize_t + +Help on function dec_flag in module ida_bytes: + +dec_flag(*args) -> 'flags_t' + dec_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function del_hidden_range in module ida_bytes: + +del_hidden_range(*args) -> 'bool' + del_hidden_range(ea) -> bool + + + Delete hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: success + +Help on function del_items in module ida_bytes: + +del_items(*args) -> 'bool' + del_items(ea, flags=0, nbytes=1, may_destroy=None) -> bool + + + Convert item (instruction/data) to unexplored bytes. The whole item + (including the head and tail bytes) will be destroyed. It is allowed + to pass any address in the item to this function + + @param ea: any address within the first item to delete (C++: ea_t) + @param flags: combination of Unexplored byte conversion flags (C++: + int) + @param nbytes: number of bytes in the range to be undefined (C++: + asize_t) + @param may_destroy: optional routine invoked before deleting a head + item. If callback returns false then item has not + to be deleted and operation fails (C++: + may_destroy_cb_t *) + @return: true on sucessful operation, otherwise false + +Help on function del_mapping in module ida_bytes: + +del_mapping(*args) -> 'void' + del_mapping(ea) + + + Delete memory mapping range. + + @param ea: any address in the mapped range (C++: ea_t) + +Help on function del_value in module ida_bytes: + +del_value(*args) -> 'void' + del_value(ea) + + + Delete byte value from flags. The corresponding byte becomes + uninitialized. + + @param ea (C++: ea_t) + +Help on function detach_custom_data_format in module ida_bytes: + +detach_custom_data_format(*args) -> 'bool' + detach_custom_data_format(dtid, dfid) -> bool + + + Detach the data format from the data type. Unregistering a custom data + type detaches all attached data formats, no need to detach them + explicitly. You still need unregister them. Unregistering a custom + data format detaches it from all attached data types. + + @param dtid: data type id to detach data format from (C++: int) + @param dfid: data format id to detach (C++: int) + +Help on function disable_flags in module ida_bytes: + +disable_flags(*args) -> 'error_t' + disable_flags(start_ea, end_ea) -> error_t + + + Deallocate flags for address range. Exit with an error message if not + enough disk space (this may occur too). + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @return: 0 if ok, otherwise return error code + +Help on function double_flag in module ida_bytes: + +double_flag(*args) -> 'flags_t' + double_flag() -> flags_t + + + Get a flags_t representing a double. + +Help on function dword_flag in module ida_bytes: + +dword_flag(*args) -> 'flags_t' + dword_flag() -> flags_t + + + Get a flags_t representing a double word. + +Help on function enable_flags in module ida_bytes: + +enable_flags(*args) -> 'error_t' + enable_flags(start_ea, end_ea, stt) -> error_t + + + Allocate flags for address range. This function does not change the + storage type of existing ranges. Exit with an error message if not + enough disk space. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: 0 if ok, otherwise an error code + +Help on function enum_flag in module ida_bytes: + +enum_flag(*args) -> 'flags_t' + enum_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function equal_bytes in module ida_bytes: + +equal_bytes(*args) -> 'bool' + equal_bytes(ea, image, mask, len, sense_case) -> bool + + + Compare 'len' bytes of the program starting from 'ea' with 'image'. + + @param ea: linear address (C++: ea_t) + @param image: bytes to compare with (C++: const uchar *) + @param mask: array of 1/0 bytes, it's length is 'len'. 1 means to + perform the comparison of the corresponding byte. 0 means + not to perform. if mask == NULL, then all bytes of + 'image' will be compared. if mask == SKIP_FF_MASK then + 0xFF bytes will be skipped (C++: const uchar *) + @param len: length of block to compare in bytes. (C++: size_t) + @param sense_case: case-sensitive comparison? (C++: bool) + +Help on function f_has_cmt in module ida_bytes: + +f_has_cmt(*args) -> 'bool' + f_has_cmt(f, arg2) -> bool + +Help on function f_has_dummy_name in module ida_bytes: + +f_has_dummy_name(*args) -> 'bool' + f_has_dummy_name(f, arg2) -> bool + + + Does the current byte have dummy (auto-generated, with special prefix) + name? + + + @param f (C++: flags_t) + +Help on function f_has_extra_cmts in module ida_bytes: + +f_has_extra_cmts(*args) -> 'bool' + f_has_extra_cmts(f, arg2) -> bool + +Help on function f_has_name in module ida_bytes: + +f_has_name(*args) -> 'bool' + f_has_name(f, arg2) -> bool + + + Does the current byte have non-trivial (non-dummy) name? + + + @param f (C++: flags_t) + +Help on function f_has_user_name in module ida_bytes: + +f_has_user_name(*args) -> 'bool' + f_has_user_name(F, arg2) -> bool + + + Does the current byte have user-specified name? + + + @param F (C++: flags_t) + +Help on function f_has_xref in module ida_bytes: + +f_has_xref(*args) -> 'bool' + f_has_xref(f, arg2) -> bool + + + Does the current byte have cross-references to it? + + + @param f (C++: flags_t) + +Help on function f_is_align in module ida_bytes: + +f_is_align(*args) -> 'bool' + f_is_align(F, arg2) -> bool + + + See 'is_align()' + + + @param F (C++: flags_t) + +Help on function f_is_byte in module ida_bytes: + +f_is_byte(*args) -> 'bool' + f_is_byte(F, arg2) -> bool + + + See 'is_byte()' + + + @param F (C++: flags_t) + +Help on function f_is_code in module ida_bytes: + +f_is_code(*args) -> 'bool' + f_is_code(F, arg2) -> bool + + + Does flag denote start of an instruction? + + + @param F (C++: flags_t) + +Help on function f_is_custom in module ida_bytes: + +f_is_custom(*args) -> 'bool' + f_is_custom(F, arg2) -> bool + + + See 'is_custom()' + + + @param F (C++: flags_t) + +Help on function f_is_data in module ida_bytes: + +f_is_data(*args) -> 'bool' + f_is_data(F, arg2) -> bool + + + Does flag denote start of data? + + + @param F (C++: flags_t) + +Help on function f_is_double in module ida_bytes: + +f_is_double(*args) -> 'bool' + f_is_double(F, arg2) -> bool + + + See 'is_double()' + + + @param F (C++: flags_t) + +Help on function f_is_dword in module ida_bytes: + +f_is_dword(*args) -> 'bool' + f_is_dword(F, arg2) -> bool + + + See 'is_dword()' + + + @param F (C++: flags_t) + +Help on function f_is_float in module ida_bytes: + +f_is_float(*args) -> 'bool' + f_is_float(F, arg2) -> bool + + + See 'is_float()' + + + @param F (C++: flags_t) + +Help on function f_is_head in module ida_bytes: + +f_is_head(*args) -> 'bool' + f_is_head(F, arg2) -> bool + + + Does flag denote start of instruction OR data? + + + @param F (C++: flags_t) + +Help on function f_is_not_tail in module ida_bytes: + +f_is_not_tail(*args) -> 'bool' + f_is_not_tail(F, arg2) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function f_is_oword in module ida_bytes: + +f_is_oword(*args) -> 'bool' + f_is_oword(F, arg2) -> bool + + + See 'is_oword()' + + + @param F (C++: flags_t) + +Help on function f_is_pack_real in module ida_bytes: + +f_is_pack_real(*args) -> 'bool' + f_is_pack_real(F, arg2) -> bool + + + See 'is_pack_real()' + + + @param F (C++: flags_t) + +Help on function f_is_qword in module ida_bytes: + +f_is_qword(*args) -> 'bool' + f_is_qword(F, arg2) -> bool + + + See 'is_qword()' + + + @param F (C++: flags_t) + +Help on function f_is_strlit in module ida_bytes: + +f_is_strlit(*args) -> 'bool' + f_is_strlit(F, arg2) -> bool + + + See 'is_strlit()' + + + @param F (C++: flags_t) + +Help on function f_is_struct in module ida_bytes: + +f_is_struct(*args) -> 'bool' + f_is_struct(F, arg2) -> bool + + + See 'is_struct()' + + + @param F (C++: flags_t) + +Help on function f_is_tail in module ida_bytes: + +f_is_tail(*args) -> 'bool' + f_is_tail(F, arg2) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function f_is_tbyte in module ida_bytes: + +f_is_tbyte(*args) -> 'bool' + f_is_tbyte(F, arg2) -> bool + + + See 'is_tbyte()' + + + @param F (C++: flags_t) + +Help on function f_is_word in module ida_bytes: + +f_is_word(*args) -> 'bool' + f_is_word(F, arg2) -> bool + + + See 'is_word()' + + + @param F (C++: flags_t) + +Help on function f_is_yword in module ida_bytes: + +f_is_yword(*args) -> 'bool' + f_is_yword(F, arg2) -> bool + + + See 'is_yword()' + + + @param F (C++: flags_t) + +Help on function find_byte in module ida_bytes: + +find_byte(*args) -> 'ea_t' + find_byte(sEA, size, value, bin_search_flags) -> ea_t + + + Find forward a byte with the specified value (only 8-bit value from + the database). example: ea=4 size=3 will inspect addresses 4, 5, and 6 + + @param sEA: linear address (C++: ea_t) + @param size: number of bytes to inspect (C++: asize_t) + @param value: value to find (C++: uchar) + @param bin_search_flags: combination of Search flags (C++: int) + @return: address of byte or BADADDR + +Help on function find_byter in module ida_bytes: + +find_byter(*args) -> 'ea_t' + find_byter(sEA, size, value, bin_search_flags) -> ea_t + + + Find reverse a byte with the specified value (only 8-bit value from + the database). example: ea=4 size=3 will inspect addresses 6, 5, and 4 + + @param sEA: the lower address of the search range (C++: ea_t) + @param size: number of bytes to inspect (C++: asize_t) + @param value: value to find (C++: uchar) + @param bin_search_flags: combination of Search flags (C++: int) + @return: address of byte or BADADDR + +Help on function find_custom_data_format in module ida_bytes: + +find_custom_data_format(*args) -> 'int' + find_custom_data_format(name) -> int + + + Get id of a custom data format. + + @param name: name of the custom data format (C++: const char *) + @return: id or -1 + +Help on function find_custom_data_type in module ida_bytes: + +find_custom_data_type(*args) -> 'int' + find_custom_data_type(name) -> int + + + Get id of a custom data type. + + @param name: name of the custom data type (C++: const char *) + @return: id or -1 + +Help on function float_flag in module ida_bytes: + +float_flag(*args) -> 'flags_t' + float_flag() -> flags_t + + + Get a flags_t representing a float. + +Help on function flt_flag in module ida_bytes: + +flt_flag(*args) -> 'flags_t' + flt_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function free_chunk in module ida_bytes: + +free_chunk(*args) -> 'ea_t' + free_chunk(bottom, size, step) -> ea_t + + + Search for a hole in the addressing space of the program. + + @param bottom: address to start searching (C++: ea_t) + @param size: size of desired block (C++: asize_t) + @param step: bit mask for the start of hole (0xF would align hole to a + paragraph). if 'step' is negative, the bottom address + with be aligned. otherwise the kernel will try to use it + as is and align it only when the hole is too small. (C++: + int32) + @return: start of the hole or BADADDR + +Help on function get_16bit in module ida_bytes: + +get_16bit(*args) -> 'uint32' + get_16bit(ea) -> uint32 + + + Get 16bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 1 byte (getFullByte()) if the current processor has 16-bit + byte, otherwise return get_word() + +Help on function get_32bit in module ida_bytes: + +get_32bit(*args) -> 'uint32' + get_32bit(ea) -> uint32 + + + Get not more than 32bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 32 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) + return get_dword(ea); if ( nbits <= 16) return + get_wide_word(ea); return get_wide_byte(ea); + +Help on function get_64bit in module ida_bytes: + +get_64bit(*args) -> 'uint64' + get_64bit(ea) -> uint64 + + + Get not more than 64bits of the program at 'ea'. + + @param ea (C++: ea_t) + @return: 64 bit value, depending on \ph{nbits}: if ( nbits <= 8 ) + return get_qword(ea); if ( nbits <= 16) return + get_wide_dword(ea); return get_wide_byte(ea); + +Help on function get_8bit in module ida_bytes: + +get_8bit(*args) -> 'PyObject *' + get_8bit(ea, v, nbit) -> PyObject * + +Help on function get_byte in module ida_bytes: + +get_byte(*args) -> 'uchar' + get_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea'. This function works only + for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_bytes in module ida_bytes: + +get_bytes(*args) -> 'PyObject *' + get_bytes(ea, size, gmb_flags=0x01) -> PyObject * + + + Get the specified number of bytes of the program. + @param ea: program address + @param size: number of bytes to return + @return: the bytes (as a str), or None in case of failure + +Help on function get_bytes_and_mask in module ida_bytes: + +get_bytes_and_mask(*args) -> 'PyObject *' + get_bytes_and_mask(ea, size, gmb_flags=0x01) -> PyObject * + + + Get the specified number of bytes of the program, and a bitmask + specifying what bytes are defined and what bytes are not. + @param ea: program address + @param size: number of bytes to return + @return: a tuple (bytes, mask), or None in case of failure. + Both 'bytes' and 'mask' are 'str' instances. + +Help on function get_cmt in module ida_bytes: + +get_cmt(*args) -> 'qstring *' + get_cmt(ea, rptble) -> str + + + Get an indented comment. + + @param ea: linear address. may point to tail byte, the function will + find start of the item (C++: ea_t) + @param rptble: get repeatable comment? (C++: bool) + @return: size of comment or -1 + +Help on function get_custom_data_format in module ida_bytes: + +get_custom_data_format(*args) -> 'data_format_t const *' + get_custom_data_format(dfid) -> data_format_t + + + Get definition of a registered custom data format. + + @param dfid: data format id (C++: int) + @return: data format definition or NULL + +Help on function get_custom_data_formats in module ida_bytes: + +get_custom_data_formats(*args) -> 'int' + get_custom_data_formats(out, dtid) -> int + + + Get list of attached custom data formats for the specified data type. + + @param out: buffer for the output. may be NULL (C++: intvec_t *) + @param dtid: data type id (C++: int) + @return: number of returned custom data formats. if error, returns -1 + +Help on function get_custom_data_type in module ida_bytes: + +get_custom_data_type(*args) -> 'data_type_t const *' + get_custom_data_type(dtid) -> data_type_t + + + Get definition of a registered custom data type. + + @param dtid: data type id (C++: int) + @return: data type definition or NULL + +Help on function get_custom_data_types in module ida_bytes: + +get_custom_data_types(*args) -> 'int' + get_custom_data_types(out, min_size=0, max_size=BADADDR) -> int + + + Get list of registered custom data type ids. + + @param out: buffer for the output. may be NULL (C++: intvec_t *) + @param min_size: minimum value size (C++: asize_t) + @param max_size: maximum value size (C++: asize_t) + @return: number of custom data types with the specified size limits + +Help on function get_data_elsize in module ida_bytes: + +get_data_elsize(*args) -> 'asize_t' + get_data_elsize(ea, F, ti=None) -> asize_t + + + Get size of data type specified in flags 'F'. + + @param ea: linear address of the item (C++: ea_t) + @param F: flags (C++: flags_t) + @param ti: additional information about the data type. For example, if + the current item is a structure instance, then ti->tid is + structure id. Otherwise is ignored (may be NULL). If + specified as NULL, will be automatically retrieved from the + database (C++: const opinfo_t *) + @return: byte : 1 word : 2 etc... + +Help on function get_data_value in module ida_bytes: + +get_data_value(*args) -> 'bool' + get_data_value(v, ea, size) -> bool + + + Get the value at of the item at 'ea'. This function works with + entities up to sizeof(ea_t) (bytes, word, etc) + + @param v: pointer to the result. may be NULL (C++: uval_t *) + @param ea: linear address (C++: ea_t) + @param size: size of data to read. If 0, then the item type at 'ea' + will be used (C++: asize_t) + @return: success + +Help on function get_db_byte in module ida_bytes: + +get_db_byte(*args) -> 'uchar' + get_db_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea' from the database. Works + even if the debugger is active. See also 'get_dbg_byte()' to read the + process memory directly. This function works only for 8bit byte + processors. + + @param ea (C++: ea_t) + +Help on function get_default_radix in module ida_bytes: + +get_default_radix(*args) -> 'int' + get_default_radix() -> int + + + Get default base of number for the current processor. + + @return: 2, 8, 10, 16 + +Help on function get_dword in module ida_bytes: + +get_dword(*args) -> 'uint32' + get_dword(ea) -> uint32 + + + Get one dword (32-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_enum_id in module ida_bytes: + +get_enum_id(*args) -> 'uchar *' + get_enum_id(ea, n) -> enum_t + + + Get enum id of 'enum' operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: id of enum or BADNODE + +Help on function get_first_hidden_range in module ida_bytes: + +get_first_hidden_range(*args) -> 'hidden_range_t *' + get_first_hidden_range() -> hidden_range_t + + + Get pointer to the first hidden range. + + @return: ptr to hidden range or NULL + +Help on function get_flags in module ida_bytes: + +get_flags(*args) -> 'flags_t' + get_flags(ea) -> flags_t + + + get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote + debugging because the kernel needs to read the process memory. + + @param ea (C++: ea_t) + +Help on function get_flags_by_size in module ida_bytes: + +get_flags_by_size(*args) -> 'flags_t' + get_flags_by_size(size) -> flags_t + + + Get flags from size (in bytes). Supported sizes: 1, 2, 4, 8, 16, 32. + For other sizes returns 0 + + @param size (C++: size_t) + +Help on function get_flags_ex in module ida_bytes: + +get_flags_ex(*args) -> 'flags_t' + get_flags_ex(ea, how) -> flags_t + + + Get flags for the specified address, extended form. + + + @param ea (C++: ea_t) + @param how (C++: int) + +Help on function get_forced_operand in module ida_bytes: + +get_forced_operand(*args) -> 'qstring *' + get_forced_operand(ea, n) -> str + + + Get forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @return: size of forced operand or -1 + +Help on function get_full_data_elsize in module ida_bytes: + +get_full_data_elsize(*args) -> 'asize_t' + get_full_data_elsize(ea, F, ti=None) -> asize_t + + + Get full size of data type specified in flags 'F'. takes into account + processors with wide bytes e.g. returns 2 for a byte element with + 16-bit bytes + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param ti (C++: const opinfo_t *) + +Help on function get_full_flags in module ida_bytes: + +get_full_flags(*args) -> 'flags_t' + get_full_flags(ea) -> flags_t + + + Get flags value for address 'ea'. + + @param ea (C++: ea_t) + @return: 0 if address is not present in the program + +Help on function get_hidden_range in module ida_bytes: + +get_hidden_range(*args) -> 'hidden_range_t *' + get_hidden_range(ea) -> hidden_range_t + + + Get pointer to hidden range structure, in: linear address. + + @param ea: any address in the hidden range (C++: ea_t) + +Help on function get_hidden_range_num in module ida_bytes: + +get_hidden_range_num(*args) -> 'int' + get_hidden_range_num(ea) -> int + + + Get number of a hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: number of hidden range (0.. get_hidden_range_qty() -1) + +Help on function get_hidden_range_qty in module ida_bytes: + +get_hidden_range_qty(*args) -> 'int' + get_hidden_range_qty() -> int + + + Get number of hidden ranges. + +Help on function get_item_end in module ida_bytes: + +get_item_end(*args) -> 'ea_t' + get_item_end(ea) -> ea_t + + + Get the end address of the item at 'ea'. The returned address doesn't + belong to the current item. Unexplored bytes are counted as 1 byte + entities. + + @param ea (C++: ea_t) + +Help on function get_item_flag in module ida_bytes: + +get_item_flag(*args) -> 'flags_t' + get_item_flag(_from, n, ea, appzero) -> flags_t + + + Get flag of the item at 'ea' even if it is a tail byte of some array + or structure. This function is used to get flags of structure members + or array elements. + + @param _from: linear address of the instruction which refers to 'ea' + (C++: ea_t) + @param n: number of operand which refers to 'ea' (C++: int) + @param ea: the referenced address (C++: ea_t) + @param appzero: append a struct field name if the field offset is + zero? meaningful only if the name refers to a + structure. (C++: bool) + @return: flags or 0 (if failed) + +Help on function get_item_head in module ida_bytes: + +get_item_head(*args) -> 'ea_t' + get_item_head(ea) -> ea_t + + + Get the start address of the item at 'ea'. If there is no current + item, then 'ea' will be returned (see definition at the end of + 'bytes.hpp' source) + + @param ea (C++: ea_t) + +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. + + @param ea (C++: ea_t) + +Help on function get_last_hidden_range in module ida_bytes: + +get_last_hidden_range(*args) -> 'hidden_range_t *' + get_last_hidden_range() -> hidden_range_t + + + Get pointer to the last hidden range. + + @return: ptr to hidden range or NULL + +Help on function get_manual_insn in module ida_bytes: + +get_manual_insn(*args) -> 'qstring *' + get_manual_insn(ea) -> str + + + Retrieve the user-specified string for the manual instruction. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @return: size of manual instruction or -1 + +Help on function get_mapping in module ida_bytes: + +get_mapping(*args) -> 'ea_t *, ea_t *, asize_t *' + get_mapping(n) -> bool + + + Get memory mapping range by its number. + + @param n: number of mapping range (0.. get_mappings_qty() -1) (C++: + size_t) + @return: false if the specified range doesn't exist, otherwise returns + from , to , size + +Help on function get_mappings_qty in module ida_bytes: + +get_mappings_qty(*args) -> 'size_t' + get_mappings_qty() -> size_t + + + Get number of mappings. + +Help on function get_max_strlit_length in module ida_bytes: + +get_max_strlit_length(*args) -> 'size_t' + get_max_strlit_length(ea, strtype, options=0) -> size_t + + + Determine maximum length of string literal. + + @param ea: starting address (C++: ea_t) + @param strtype: string type. one of String type codes (C++: int32) + @param options: combination of string literal length options (C++: + int) + @return: length of the string in octets (octet==8bit) + +Help on function get_next_hidden_range in module ida_bytes: + +get_next_hidden_range(*args) -> 'hidden_range_t *' + get_next_hidden_range(ea) -> hidden_range_t + + + Get pointer to next hidden range. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to hidden range or NULL if next hidden range doesn't + exist + +Help on function get_octet in module ida_bytes: + +get_octet(*args) -> 'PyObject *' + get_octet(ea, v, nbit) -> PyObject * + + + Get 8 bits of the program at 'ea'. The main usage of this function is + to iterate range of bytes. Here is an example: + + uint64 v; + int nbit = 0; + for ( ... ) { + uchar byte = get_octet(&ea, &v, &nbit); + ... + } + + 'ea' is incremented each time when a new byte is read. In the above + example, it will be incremented in the first loop iteration. + + @param ea (C++: ea_t *) + @param v (C++: uint64 *) + @param nbit (C++: int *) + +Help on function get_opinfo in module ida_bytes: + +get_opinfo(*args) -> 'opinfo_t *' + get_opinfo(buf, ea, n, flags) -> opinfo_t + + + Get additional information about an operand representation. + + @param buf: buffer to receive the result. may not be NULL (C++: + opinfo_t *) + @param ea: linear address of item (C++: ea_t) + @param n: number of operand, 0 or 1 (C++: int) + @param flags: flags of the item (C++: flags_t) + @return: NULL if no additional representation information + +Help on function get_optype_flags0 in module ida_bytes: + +get_optype_flags0(*args) -> 'flags_t' + get_optype_flags0(F) -> flags_t + + + Get flags for first operand. + + + @param F (C++: flags_t) + +Help on function get_optype_flags1 in module ida_bytes: + +get_optype_flags1(*args) -> 'flags_t' + get_optype_flags1(F) -> flags_t + + + Get flags for second operand. + + + @param F (C++: flags_t) + +Help on function get_original_byte in module ida_bytes: + +get_original_byte(*args) -> 'uint64' + get_original_byte(ea) -> uint64 + + + Get original byte value (that was before patching). This function + works for wide byte processors too. + + @param ea (C++: ea_t) + +Help on function get_original_dword in module ida_bytes: + +get_original_dword(*args) -> 'uint64' + get_original_dword(ea) -> uint64 + + + Get original dword (that was before patching) This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_original_qword in module ida_bytes: + +get_original_qword(*args) -> 'uint64' + get_original_qword(ea) -> uint64 + + + Get original qword value (that was before patching) This function + DOESN'T work for wide byte processors too. This function takes into + account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_original_word in module ida_bytes: + +get_original_word(*args) -> 'uint64' + get_original_word(ea) -> uint64 + + + Get original word value (that was before patching). This function + works for wide byte processors too. This function takes into account + order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_predef_insn_cmt in module ida_bytes: + +get_predef_insn_cmt(*args) -> 'qstring *' + get_predef_insn_cmt(ins) -> str + + + Get predefined comment. + + @param ins: current instruction information (C++: const insn_t &) + @return: size of comment or -1 + +Help on function get_prev_hidden_range in module ida_bytes: + +get_prev_hidden_range(*args) -> 'hidden_range_t *' + get_prev_hidden_range(ea) -> hidden_range_t + + + Get pointer to previous hidden range. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to hidden range or NULL if previous hidden range doesn't + exist + +Help on function get_qword in module ida_bytes: + +get_qword(*args) -> 'uint64' + get_qword(ea) -> uint64 + + + Get one qword (64-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_radix in module ida_bytes: + +get_radix(*args) -> 'int' + get_radix(F, n) -> int + + + Get radix of the operand, in: flags. If the operand is not a number, + returns 'get_default_radix()' + + @param F: flags (C++: flags_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: 2, 8, 10, 16 + +Help on function get_strlit_contents in module ida_bytes: + +get_strlit_contents(*args) -> 'PyObject *' + get_strlit_contents(ea, py_len, type, flags=0) -> PyObject * + + + Get bytes contents at location, possibly converted. + It works even if the string has not been created in the database yet. + + Note that this will always return a simple string of bytes + (i.e., a 'str' instance), and not a string of unicode characters. + + If you want auto-conversion to unicode strings (that is: real strings), + you should probably be using the idautils.Strings class. + + @param ea: linear address of the string + @param len: length of the string in bytes (including terminating 0) + @param type: type of the string. Represents both the character encoding, + and the 'type' of string at the given location. + @param flags: combination of STRCONV_..., to perform output conversion. + @return: a bytes-filled str object. + +Help on function get_stroff_path in module ida_bytes: + +get_stroff_path(*args) -> 'int' + get_stroff_path(path, delta, ea, n) -> int + + + Get struct path of operand. + + @param path: buffer for structure path (strpath). see nalt.hpp for + more info. (C++: tid_t *) + @param delta: struct offset delta (C++: adiff_t *) + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: length of strpath + +Help on function get_wide_byte in module ida_bytes: + +get_wide_byte(*args) -> 'uint64' + get_wide_byte(ea) -> uint64 + + + Get one wide byte of the program at 'ea'. Some processors may access + more than 8bit quantity at an address. These processors have 32-bit + byte organization from the IDA's point of view. + + @param ea (C++: ea_t) + +Help on function get_wide_dword in module ida_bytes: + +get_wide_dword(*args) -> 'uint64' + get_wide_dword(ea) -> uint64 + + + Get two wide words (4 'bytes') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in + \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 + + @param ea (C++: ea_t) + +Help on function get_wide_word in module ida_bytes: + +get_wide_word(*args) -> 'uint64' + get_wide_word(ea) -> uint64 + + + Get one wide word (2 'byte') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_word in module ida_bytes: + +get_word(*args) -> 'ushort' + get_word(ea) -> ushort + + + Get one word (16-bit) of the program at 'ea'. This function takes into + account order of bytes specified in \inf{is_be()} This function works + only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_zero_ranges in module ida_bytes: + +get_zero_ranges(*args) -> 'bool' + get_zero_ranges(zranges, range) -> bool + + + Return set of ranges with zero initialized bytes. The returned set + includes only big zero initialized ranges (at least >1KB). Some zero + initialized byte ranges may be not included. Only zero bytes that use + the sparse storage method (STT_MM) are reported. + + @param zranges: pointer to the return value. cannot be NULL (C++: + rangeset_t *) + @param range: the range of addresses to verify. can be NULL - means + all ranges (C++: const range_t *) + @return: true if the result is a non-empty set + +Help on function getn_hidden_range in module ida_bytes: + +getn_hidden_range(*args) -> 'hidden_range_t *' + getn_hidden_range(n) -> hidden_range_t + + + Get pointer to hidden range structure, in: number of hidden range. + + @param n: number of hidden range, is in range 0.. + get_hidden_range_qty() -1 (C++: int) + +Help on function has_any_name in module ida_bytes: + +has_any_name(*args) -> 'bool' + has_any_name(F) -> bool + + + Does the current byte have any name? + + + @param F (C++: flags_t) + +Help on function has_auto_name in module ida_bytes: + +has_auto_name(*args) -> 'bool' + has_auto_name(F) -> bool + + + Does the current byte have auto-generated (no special prefix) name? + + + @param F (C++: flags_t) + +Help on function has_cmt in module ida_bytes: + +has_cmt(*args) -> 'bool' + has_cmt(F) -> bool + + + Does the current byte have an indented comment? + + + @param F (C++: flags_t) + +Help on function has_dummy_name in module ida_bytes: + +has_dummy_name(*args) -> 'bool' + has_dummy_name(F) -> bool + + + Does the current byte have dummy (auto-generated, with special prefix) + name? + + + @param F (C++: flags_t) + +Help on function has_extra_cmts in module ida_bytes: + +has_extra_cmts(*args) -> 'bool' + has_extra_cmts(F) -> bool + + + Does the current byte have additional anterior or posterior lines? + + + @param F (C++: flags_t) + +Help on function has_immd in module ida_bytes: + +has_immd(*args) -> 'bool' + has_immd(F) -> bool + + + Has immediate value? + + + @param F (C++: flags_t) + +Help on function has_name in module ida_bytes: + +has_name(*args) -> 'bool' + has_name(F) -> bool + + + Does the current byte have non-trivial (non-dummy) name? + + + @param F (C++: flags_t) + +Help on function has_user_name in module ida_bytes: + +has_user_name(*args) -> 'bool' + has_user_name(F) -> bool + + + Does the current byte have user-specified name? + + + @param F (C++: flags_t) + +Help on function has_value in module ida_bytes: + +has_value(*args) -> 'bool' + has_value(F) -> bool + + + Do flags contain byte value? + + + @param F (C++: flags_t) + +Help on function has_xref in module ida_bytes: + +has_xref(*args) -> 'bool' + has_xref(F) -> bool + + + Does the current byte have cross-references to it? + + + @param F (C++: flags_t) + +Help on function hex_flag in module ida_bytes: + +hex_flag(*args) -> 'flags_t' + hex_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on class hidden_range_t in module ida_bytes: + +class hidden_range_t(ida_range.range_t) + | Proxy of C++ hidden_range_t class. + | + | Method resolution order: + | hidden_range_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> hidden_range_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_hidden_range_t(...) + | delete_hidden_range_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | color + | hidden_range_t_color_get(self) -> bgcolor_t + | + | description + | hidden_range_t_description_get(self) -> char * + | + | footer + | hidden_range_t_footer_get(self) -> char * + | + | header + | hidden_range_t_header_get(self) -> char * + | + | thisown + | The membership flag + | + | visible + | hidden_range_t_visible_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on function is_align in module ida_bytes: + +is_align(*args) -> 'bool' + is_align(F) -> bool + + + 'FF_ALIGN' + + + @param F (C++: flags_t) + +Help on function is_attached_custom_data_format in module ida_bytes: + +is_attached_custom_data_format(*args) -> 'bool' + is_attached_custom_data_format(dtid, dfid) -> bool + +Help on function is_bnot in module ida_bytes: + +is_bnot(*args) -> 'bool' + is_bnot(ea, F, n) -> bool + + + Should we negate the operand?. \ash{a_bnot} should be defined in the + idp module in order to work with this function + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_byte in module ida_bytes: + +is_byte(*args) -> 'bool' + is_byte(F) -> bool + + + 'FF_BYTE' + + + @param F (C++: flags_t) + +Help on function is_char in module ida_bytes: + +is_char(*args) -> 'bool' + is_char(F, n) -> bool + + + is character constant? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_char0 in module ida_bytes: + +is_char0(*args) -> 'bool' + is_char0(F) -> bool + + + Is the first operand character constant? (example: push 'a') + + + @param F (C++: flags_t) + +Help on function is_char1 in module ida_bytes: + +is_char1(*args) -> 'bool' + is_char1(F) -> bool + + + Is the second operand character constant? (example: mov al, 'a') + + + @param F (C++: flags_t) + +Help on function is_code in module ida_bytes: + +is_code(*args) -> 'bool' + is_code(F) -> bool + + + Does flag denote start of an instruction? + + + @param F (C++: flags_t) + +Help on function is_custfmt in module ida_bytes: + +is_custfmt(*args) -> 'bool' + is_custfmt(F, n) -> bool + + + is custom data format? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_custfmt0 in module ida_bytes: + +is_custfmt0(*args) -> 'bool' + is_custfmt0(F) -> bool + + + Does the first operand use a custom data representation? + + + @param F (C++: flags_t) + +Help on function is_custfmt1 in module ida_bytes: + +is_custfmt1(*args) -> 'bool' + is_custfmt1(F) -> bool + + + Does the second operand use a custom data representation? + + + @param F (C++: flags_t) + +Help on function is_custom in module ida_bytes: + +is_custom(*args) -> 'bool' + is_custom(F) -> bool + + + 'FF_CUSTOM' + + + @param F (C++: flags_t) + +Help on function is_data in module ida_bytes: + +is_data(*args) -> 'bool' + is_data(F) -> bool + + + Does flag denote start of data? + + + @param F (C++: flags_t) + +Help on function is_defarg in module ida_bytes: + +is_defarg(*args) -> 'bool' + is_defarg(F, n) -> bool + + + is defined? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_defarg0 in module ida_bytes: + +is_defarg0(*args) -> 'bool' + is_defarg0(F) -> bool + + + Is the first operand defined? Initially operand has no defined + representation. + + + @param F (C++: flags_t) + +Help on function is_defarg1 in module ida_bytes: + +is_defarg1(*args) -> 'bool' + is_defarg1(F) -> bool + + + Is the second operand defined? Initially operand has no defined + representation. + + + @param F (C++: flags_t) + +Help on function is_double in module ida_bytes: + +is_double(*args) -> 'bool' + is_double(F) -> bool + + + 'FF_DOUBLE' + + + @param F (C++: flags_t) + +Help on function is_dword in module ida_bytes: + +is_dword(*args) -> 'bool' + is_dword(F) -> bool + + + 'FF_DWORD' + + + @param F (C++: flags_t) + +Help on function is_enum in module ida_bytes: + +is_enum(*args) -> 'bool' + is_enum(F, n) -> bool + + + is enum? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_enum0 in module ida_bytes: + +is_enum0(*args) -> 'bool' + is_enum0(F) -> bool + + + Is the first operand a symbolic constant (enum member)? + + + @param F (C++: flags_t) + +Help on function is_enum1 in module ida_bytes: + +is_enum1(*args) -> 'bool' + is_enum1(F) -> bool + + + Is the second operand a symbolic constant (enum member)? + + + @param F (C++: flags_t) + +Help on function is_float in module ida_bytes: + +is_float(*args) -> 'bool' + is_float(F) -> bool + + + 'FF_FLOAT' + + + @param F (C++: flags_t) + +Help on function is_float0 in module ida_bytes: + +is_float0(*args) -> 'bool' + is_float0(F) -> bool + + + Is the first operand a floating point number? + + + @param F (C++: flags_t) + +Help on function is_float1 in module ida_bytes: + +is_float1(*args) -> 'bool' + is_float1(F) -> bool + + + Is the second operand a floating point number? + + + @param F (C++: flags_t) + +Help on function is_flow in module ida_bytes: + +is_flow(*args) -> 'bool' + is_flow(F) -> bool + + + Does the previous instruction exist and pass execution flow to the + current byte? + + + @param F (C++: flags_t) + +Help on function is_fltnum in module ida_bytes: + +is_fltnum(*args) -> 'bool' + is_fltnum(F, n) -> bool + + + is floating point number? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_forced_operand in module ida_bytes: + +is_forced_operand(*args) -> 'bool' + is_forced_operand(ea, n) -> bool + + + Is operand manually defined?. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + +Help on function is_func in module ida_bytes: + +is_func(*args) -> 'bool' + is_func(F) -> bool + + + Is function start? + + + @param F (C++: flags_t) + +Help on function is_head in module ida_bytes: + +is_head(*args) -> 'bool' + is_head(F) -> bool + + + Does flag denote start of instruction OR data? + + + @param F (C++: flags_t) + +Help on function is_invsign in module ida_bytes: + +is_invsign(*args) -> 'bool' + is_invsign(ea, F, n) -> bool + + + Should sign of n-th operand inverted during output?. allowed values of + n: 0-first operand, 1-other operands + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_loaded in module ida_bytes: + +is_loaded(*args) -> 'bool' + is_loaded(ea) -> bool + + + Does the specified address have a byte value (is initialized?) + + + @param ea (C++: ea_t) + +Help on function is_lzero in module ida_bytes: + +is_lzero(*args) -> 'bool' + is_lzero(ea, n) -> bool + + + Display leading zeroes in operands. The global switch for the leading + zeroes is in \inf{s_genflags} The leading zeroes doesn't work if the + octal numbers start with 0 Display leading zeroes? (takes into account + \inf{s_genflags}) + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function is_manual in module ida_bytes: + +is_manual(*args) -> 'bool' + is_manual(F, n) -> bool + + + is forced operand? (use 'is_forced_operand()' ) + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_manual_insn in module ida_bytes: + +is_manual_insn(*args) -> 'bool' + is_manual_insn(ea) -> bool + + + Is the instruction overridden? + + @param ea: linear address of the instruction or data item (C++: ea_t) + +Help on function is_mapped in module ida_bytes: + +is_mapped(*args) -> 'bool' + is_mapped(ea) -> bool + + + Is the specified address 'ea' present in the program? + + + @param ea (C++: ea_t) + +Help on function is_not_tail in module ida_bytes: + +is_not_tail(*args) -> 'bool' + is_not_tail(F) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function is_numop in module ida_bytes: + +is_numop(*args) -> 'bool' + is_numop(F, n) -> bool + + + is number (bin, oct, dec, hex)? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_numop0 in module ida_bytes: + +is_numop0(*args) -> 'bool' + is_numop0(F) -> bool + + + Is the first operand a number (i.e. binary, octal, decimal or hex?) + + + @param F (C++: flags_t) + +Help on function is_numop1 in module ida_bytes: + +is_numop1(*args) -> 'bool' + is_numop1(F) -> bool + + + Is the second operand a number (i.e. binary, octal, decimal or hex?) + + + @param F (C++: flags_t) + +Help on function is_off in module ida_bytes: + +is_off(*args) -> 'bool' + is_off(F, n) -> bool + + + is offset? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_off0 in module ida_bytes: + +is_off0(*args) -> 'bool' + is_off0(F) -> bool + + + Is the first operand offset? (example: push offset xxx) + + + @param F (C++: flags_t) + +Help on function is_off1 in module ida_bytes: + +is_off1(*args) -> 'bool' + is_off1(F) -> bool + + + Is the second operand offset? (example: mov ax, offset xxx) + + + @param F (C++: flags_t) + +Help on function is_oword in module ida_bytes: + +is_oword(*args) -> 'bool' + is_oword(F) -> bool + + + 'FF_OWORD' + + + @param F (C++: flags_t) + +Help on function is_pack_real in module ida_bytes: + +is_pack_real(*args) -> 'bool' + is_pack_real(F) -> bool + + + 'FF_PACKREAL' + + + @param F (C++: flags_t) + +Help on function is_qword in module ida_bytes: + +is_qword(*args) -> 'bool' + is_qword(F) -> bool + + + 'FF_QWORD' + + + @param F (C++: flags_t) + +Help on function is_same_data_type in module ida_bytes: + +is_same_data_type(*args) -> 'bool' + is_same_data_type(F1, F2) -> bool + + + Do the given flags specify the same data type? + + + @param F1 (C++: flags_t) + @param F2 (C++: flags_t) + +Help on function is_seg in module ida_bytes: + +is_seg(*args) -> 'bool' + is_seg(F, n) -> bool + + + is segment? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_seg0 in module ida_bytes: + +is_seg0(*args) -> 'bool' + is_seg0(F) -> bool + + + Is the first operand segment selector? (example: push seg seg001) + + + @param F (C++: flags_t) + +Help on function is_seg1 in module ida_bytes: + +is_seg1(*args) -> 'bool' + is_seg1(F) -> bool + + + Is the second operand segment selector? (example: mov dx, seg dseg) + + + @param F (C++: flags_t) + +Help on function is_stkvar in module ida_bytes: + +is_stkvar(*args) -> 'bool' + is_stkvar(F, n) -> bool + + + is stack variable? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_stkvar0 in module ida_bytes: + +is_stkvar0(*args) -> 'bool' + is_stkvar0(F) -> bool + + + Is the first operand a stack variable? + + + @param F (C++: flags_t) + +Help on function is_stkvar1 in module ida_bytes: + +is_stkvar1(*args) -> 'bool' + is_stkvar1(F) -> bool + + + Is the second operand a stack variable? + + + @param F (C++: flags_t) + +Help on function is_strlit in module ida_bytes: + +is_strlit(*args) -> 'bool' + is_strlit(F) -> bool + + + 'FF_STRLIT' + + + @param F (C++: flags_t) + +Help on function is_stroff in module ida_bytes: + +is_stroff(*args) -> 'bool' + is_stroff(F, n) -> bool + + + is struct offset? + + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_stroff0 in module ida_bytes: + +is_stroff0(*args) -> 'bool' + is_stroff0(F) -> bool + + + Is the first operand an offset within a struct? + + + @param F (C++: flags_t) + +Help on function is_stroff1 in module ida_bytes: + +is_stroff1(*args) -> 'bool' + is_stroff1(F) -> bool + + + Is the second operand an offset within a struct? + + + @param F (C++: flags_t) + +Help on function is_struct in module ida_bytes: + +is_struct(*args) -> 'bool' + is_struct(F) -> bool + + + 'FF_STRUCT' + + + @param F (C++: flags_t) + +Help on function is_suspop in module ida_bytes: + +is_suspop(*args) -> 'bool' + is_suspop(ea, F, n) -> bool + + + is suspicious operand? + + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param n (C++: int) + +Help on function is_tail in module ida_bytes: + +is_tail(*args) -> 'bool' + is_tail(F) -> bool + + + Does flag denote tail byte? + + + @param F (C++: flags_t) + +Help on function is_tbyte in module ida_bytes: + +is_tbyte(*args) -> 'bool' + is_tbyte(F) -> bool + + + 'FF_TBYTE' + + + @param F (C++: flags_t) + +Help on function is_unknown in module ida_bytes: + +is_unknown(*args) -> 'bool' + is_unknown(F) -> bool + + + Does flag denote unexplored byte? + + + @param F (C++: flags_t) + +Help on function is_varsize_item in module ida_bytes: + +is_varsize_item(*args) -> 'int' + is_varsize_item(ea, F, ti=None, itemsize=None) -> int + + + Is the item at 'ea' variable size?. + + @param ea: linear address of the item (C++: ea_t) + @param F: flags (C++: flags_t) + @param ti: additional information about the data type. For example, if + the current item is a structure instance, then ti->tid is + structure id. Otherwise is ignored (may be NULL). If + specified as NULL, will be automatically retrieved from the + database (C++: const opinfo_t *) + @param itemsize: if not NULL and the item is varsize, itemsize will + contain the calculated item size (for struct types, + the minimal size is returned) (C++: asize_t *) + +Help on function is_word in module ida_bytes: + +is_word(*args) -> 'bool' + is_word(F) -> bool + + + 'FF_WORD' + + + @param F (C++: flags_t) + +Help on function is_yword in module ida_bytes: + +is_yword(*args) -> 'bool' + is_yword(F) -> bool + + + 'FF_YWORD' + + + @param F (C++: flags_t) + +Help on function is_zword in module ida_bytes: + +is_zword(*args) -> 'bool' + is_zword(F) -> bool + + + 'FF_ZWORD' + + + @param F (C++: flags_t) + +Help on function leading_zero_important in module ida_bytes: + +leading_zero_important(*args) -> 'bool' + leading_zero_important(ea, n) -> bool + + + Check if leading zeroes are important. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function nbits in module ida_bytes: + +nbits(*args) -> 'int' + nbits(ea) -> int + + + Get number of bits in a byte at the given address. + + @param ea (C++: ea_t) + @return: \ph{dnbits()} if the address doesn't belong to a segment, + otherwise the result depends on the segment type + +Help on function next_addr in module ida_bytes: + +next_addr(*args) -> 'ea_t' + next_addr(ea) -> ea_t + + + Get next address in the program (i.e. next address which has flags). + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function next_chunk in module ida_bytes: + +next_chunk(*args) -> 'ea_t' + next_chunk(ea) -> ea_t + + + Get the first address of next contiguous chunk in the program. + + @param ea (C++: ea_t) + @return: BADADDR if next chunk doesn't exist. + +Help on function next_head in module ida_bytes: + +next_head(*args) -> 'ea_t' + next_head(ea, maxea) -> ea_t + + + Get start of next defined item. + + @param ea: begin search at this address (C++: ea_t) + @param maxea: not included in the search range (C++: ea_t) + @return: BADADDR if none exists. + +Help on function next_inited in module ida_bytes: + +next_inited(*args) -> 'ea_t' + next_inited(ea, maxea) -> ea_t + + + Find the next initialized address. + + + @param ea (C++: ea_t) + @param maxea (C++: ea_t) + +Help on function next_not_tail in module ida_bytes: + +next_not_tail(*args) -> 'ea_t' + next_not_tail(ea) -> ea_t + + + Get address of next non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function next_that in module ida_bytes: + +next_that(*args) -> 'ea_t' + next_that(ea, maxea, callable) -> ea_t + + + Find next address with a flag satisfying the function 'testf'. + Start searching from address 'ea'+1 and inspect bytes up to 'maxea'. + maxea is not included in the search range. + + @param callable: a Python callable with the following prototype: + callable(flags). Return True to stop enumeration. + @return: the found address or BADADDR. + +Help on function next_unknown in module ida_bytes: + +next_unknown(*args) -> 'ea_t' + next_unknown(ea, maxea) -> ea_t + + + Similar to 'next_that()' , but will find the next address that is + unexplored. + + + @param ea (C++: ea_t) + @param maxea (C++: ea_t) + +Help on function num_flag in module ida_bytes: + +num_flag(*args) -> 'flags_t' + num_flag() -> flags_t + + + Get number of default base (bin, oct, dec, hex) + +Help on function oct_flag in module ida_bytes: + +oct_flag(*args) -> 'flags_t' + oct_flag() -> flags_t + + + Get number flag of the base, regardless of current processor - better + to use 'num_flag()' + +Help on function off_flag in module ida_bytes: + +off_flag(*args) -> 'flags_t' + off_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function op_adds_xrefs in module ida_bytes: + +op_adds_xrefs(*args) -> 'bool' + op_adds_xrefs(F, n) -> bool + + + Should processor module create xrefs from the operand?. Currently + 'offset' and 'structure offset' operands create xrefs + + @param F (C++: flags_t) + @param n (C++: int) + +Help on function op_bin in module ida_bytes: + +op_bin(*args) -> 'bool' + op_bin(ea, n) -> bool + + + set op type to 'bin_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_chr in module ida_bytes: + +op_chr(*args) -> 'bool' + op_chr(ea, n) -> bool + + + set op type to 'char_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_custfmt in module ida_bytes: + +op_custfmt(*args) -> 'bool' + op_custfmt(ea, n, fid) -> bool + + + Set custom data format for operand (fid-custom data format id) + + + @param ea (C++: ea_t) + @param n (C++: int) + @param fid (C++: int) + +Help on function op_dec in module ida_bytes: + +op_dec(*args) -> 'bool' + op_dec(ea, n) -> bool + + + set op type to 'dec_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_enum in module ida_bytes: + +op_enum(*args) -> 'bool' + op_enum(ea, n, id, serial) -> bool + + + Set operand representation to be 'enum_t'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @param id: id of enum (C++: enum_t) + @param serial: the serial number of the constant in the enumeration, + usually 0. the serial numbers are used if the + enumeration contains several constants with the same + value (C++: uchar) + @return: success + +Help on function op_flt in module ida_bytes: + +op_flt(*args) -> 'bool' + op_flt(ea, n) -> bool + + + set op type to 'flt_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_hex in module ida_bytes: + +op_hex(*args) -> 'bool' + op_hex(ea, n) -> bool + + + set op type to 'hex_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_num in module ida_bytes: + +op_num(*args) -> 'bool' + op_num(ea, n) -> bool + + + set op type to 'num_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_oct in module ida_bytes: + +op_oct(*args) -> 'bool' + op_oct(ea, n) -> bool + + + set op type to 'oct_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_seg in module ida_bytes: + +op_seg(*args) -> 'bool' + op_seg(ea, n) -> bool + + + Set operand representation to be 'segment'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stkvar in module ida_bytes: + +op_stkvar(*args) -> 'bool' + op_stkvar(ea, n) -> bool + + + Set operand representation to be 'stack variable'. Should be applied + to an instruction within a function. Should be applied after creating + a stack var using 'insn_t::create_stkvar()' . + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stroff in module ida_bytes: + +op_stroff(*args) -> 'bool' + op_stroff(insn, n, path, path_len, delta) -> bool + + + Set operand representation to be 'struct offset'. If applied to + unexplored bytes, converts them to 16/32bit word data + + @param insn: the instruction (C++: const insn_t &) + @param n: number of operand (0, 1, -1) (C++: int) + @param path: structure path (strpath). see nalt.hpp for more info. + (C++: const tid_t *) + @param path_len: length of the structure path (C++: int) + @param delta: struct offset delta. usually 0. denotes the difference + between the structure base and the pointer into the + structure. (C++: adiff_t) + @return: success + + Example: + Python> + Python> ins = ida_ua.insn_t() + Python> if ida_ua.decode_insn(ins, some_address): + Python> path_len = 1 + Python> path = ida_pro.tid_array(path_len) + Python> path[0] = ida_struct.get_struc_id("my_stucture_t") + Python> ida_bytes.op_stroff(ins, 0, path.cast(), path_len, 0) + Python> + +Help on function oword_flag in module ida_bytes: + +oword_flag(*args) -> 'flags_t' + oword_flag() -> flags_t + + + Get a flags_t representing a octaword. + +Help on function packreal_flag in module ida_bytes: + +packreal_flag(*args) -> 'flags_t' + packreal_flag() -> flags_t + + + Get a flags_t representing a packed decimal real. + +Help on function patch_byte in module ida_bytes: + +patch_byte(*args) -> 'bool' + patch_byte(ea, x) -> bool + + + Patch a byte of the program. The original value of the byte is saved + and can be obtained by 'get_original_byte()' . This function works for + wide byte processors too. + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_bytes in module ida_bytes: + +patch_bytes(*args) -> 'void' + patch_bytes(ea, buf) + + + Patch the specified number of bytes of the program. Original values of + bytes are saved and are available with get_original...() functions. + See also 'put_bytes()' . + + @param ea: linear address (C++: ea_t) + @param buf: buffer with new values of bytes (C++: const void *) + +Help on function patch_dword in module ida_bytes: + +patch_dword(*args) -> 'bool' + patch_dword(ea, x) -> bool + + + Patch a dword of the program. The original value of the dword is saved + and can be obtained by 'get_original_dword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_qword in module ida_bytes: + +patch_qword(*args) -> 'bool' + patch_qword(ea, x) -> bool + + + Patch a qword of the program. The original value of the qword is saved + and can be obtained by 'get_original_qword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_word in module ida_bytes: + +patch_word(*args) -> 'bool' + patch_word(ea, x) -> bool + + + Patch a word of the program. The original value of the word is saved + and can be obtained by 'get_original_word()' . This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function prev_addr in module ida_bytes: + +prev_addr(*args) -> 'ea_t' + prev_addr(ea) -> ea_t + + + Get previous address in the program. + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function prev_chunk in module ida_bytes: + +prev_chunk(*args) -> 'ea_t' + prev_chunk(ea) -> ea_t + + + Get the last address of previous contiguous chunk in the program. + + @param ea (C++: ea_t) + @return: BADADDR if previous chunk doesn't exist. + +Help on function prev_head in module ida_bytes: + +prev_head(*args) -> 'ea_t' + prev_head(ea, minea) -> ea_t + + + Get start of previous defined item. + + @param ea: begin search at this address (C++: ea_t) + @param minea: included in the search range (C++: ea_t) + @return: BADADDR if none exists. + +Help on function prev_inited in module ida_bytes: + +prev_inited(*args) -> 'ea_t' + prev_inited(ea, minea) -> ea_t + + + Find the previous initialized address. + + + @param ea (C++: ea_t) + @param minea (C++: ea_t) + +Help on function prev_not_tail in module ida_bytes: + +prev_not_tail(*args) -> 'ea_t' + prev_not_tail(ea) -> ea_t + + + Get address of previous non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function prev_that in module ida_bytes: + +prev_that(*args) -> 'ea_t' + prev_that(ea, minea, callable) -> ea_t + + + Find previous address with a flag satisfying the function 'testf'.do + not pass 'is_unknown()' to this function to find unexplored bytes It + will fail under the debugger. To find unexplored bytes, use + 'prev_unknown()' . + + @param ea: start searching from this address - 1. (C++: ea_t) + @param minea: included in the search range. (C++: ea_t) + @return: the found address or BADADDR . + +Help on function prev_unknown in module ida_bytes: + +prev_unknown(*args) -> 'ea_t' + prev_unknown(ea, minea) -> ea_t + + + Similar to 'prev_that()' , but will find the previous address that is + unexplored. + + + @param ea (C++: ea_t) + @param minea (C++: ea_t) + +Help on function print_strlit_type in module ida_bytes: + +print_strlit_type(*args) -> 'PyObject *' + print_strlit_type(strtype, flags=0) -> PyObject * + + + Get string type information: the string type name (possibly decorated + with hotkey markers), and the tooltip. + + @param strtype: the string type (C++: int32) + @param flags: or'ed PSTF_* constants (C++: int) + @return: length of generated text + +Help on function put_byte in module ida_bytes: + +put_byte(*args) -> 'bool' + put_byte(ea, x) -> bool + + + Set value of one byte of the program. This function modifies the + database. If the debugger is active then the debugged process memory + is patched too.The original value of the byte is completely lost and + can't be recovered by the 'get_original_byte()' function. See also + 'put_dbg_byte()' to write to the process memory directly when the + debugger is active. This function can handle wide byte processors. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint64) + @return: true if the database has been modified + +Help on function put_bytes in module ida_bytes: + +put_bytes(*args) -> 'void' + put_bytes(ea, buf) + + + Modify the specified number of bytes of the program. This function + does not save the original values of bytes. See also 'patch_bytes()' . + + @param ea: linear address (C++: ea_t) + @param buf: buffer with new values of bytes (C++: const void *) + +Help on function put_dword in module ida_bytes: + +put_dword(*args) -> 'void' + put_dword(ea, x) + + + Set value of one dword of the program. This function takes into + account order of bytes specified in \inf{is_be()} This function works + for wide byte processors too.the original value of the dword is + completely lost and can't be recovered by the 'get_original_dword()' + function. + + @param ea: linear address (C++: ea_t) + @param x: dword value (C++: uint64) + +Help on function put_qword in module ida_bytes: + +put_qword(*args) -> 'void' + put_qword(ea, x) + + + Set value of one qword (8 bytes) of the program. This function takes + into account order of bytes specified in \inf{is_be()} This function + DOESN'T works for wide byte processors. + + @param ea: linear address (C++: ea_t) + @param x: qword value (C++: uint64) + +Help on function put_word in module ida_bytes: + +put_word(*args) -> 'void' + put_word(ea, x) + + + Set value of one word of the program. This function takes into account + order of bytes specified in \inf{is_be()} This function works for wide + byte processors too.The original value of the word is completely lost + and can't be recovered by the 'get_original_word()' function. ea - + linear address x - word value + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function qword_flag in module ida_bytes: + +qword_flag(*args) -> 'flags_t' + qword_flag() -> flags_t + + + Get a flags_t representing a quad word. + +Help on function register_custom_data_format in module ida_bytes: + +register_custom_data_format(*args) -> 'int' + register_custom_data_format(py_df) -> int + + + Registers a custom data format with a given data type. + @param df: an instance of data_format_t + @return: + < 0 if failed to register + > 0 data format id + +Help on function register_custom_data_type in module ida_bytes: + +register_custom_data_type(*args) -> 'int' + register_custom_data_type(py_dt) -> int + + + Registers a custom data type. + @param dt: an instance of the data_type_t class + @return: + < 0 if failed to register + > 0 data type id + +Help on function register_data_types_and_formats in module ida_bytes: + +register_data_types_and_formats(formats) + Registers multiple data types and formats at once. + To register one type/format at a time use register_custom_data_type/register_custom_data_format + + It employs a special table of types and formats described below: + + The 'formats' is a list of tuples. If a tuple has one element then it is the format to be registered with dtid=0 + If the tuple has more than one element, then tuple[0] is the data type and tuple[1:] are the data formats. For example: + many_formats = [ + (pascal_data_type(), pascal_data_format()), + (simplevm_data_type(), simplevm_data_format()), + (makedword_data_format(),), + (simplevm_data_format(),) + ] + The first two tuples describe data types and their associated formats. + The last two tuples describe two data formats to be used with built-in data types. + The data format may be attached to several data types. The id of the + data format is stored in the first data_format_t object. For example: + assert many_formats[1][1] != -1 + assert many_formats[2][0] != -1 + assert many_formats[3][0] == -1 + +Help on function revert_byte in module ida_bytes: + +revert_byte(*args) -> 'bool' + revert_byte(ea) -> bool + + + Revert patched byte + + @param ea (C++: ea_t) + +Help on function seg_flag in module ida_bytes: + +seg_flag(*args) -> 'flags_t' + seg_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function set_cmt in module ida_bytes: + +set_cmt(*args) -> 'bool' + set_cmt(ea, comm, rptble) -> bool + + + Set an indented comment. + + @param ea: linear address (C++: ea_t) + @param comm: comment string NULL: do nothing (return 0) "" : + delete comment (C++: const char *) + @param rptble: is repeatable? (C++: bool) + @return: success + +Help on function set_forced_operand in module ida_bytes: + +set_forced_operand(*args) -> 'bool' + set_forced_operand(ea, n, op) -> bool + + + Set forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @param op: text of operand NULL: do nothing (return 0) "" : delete + forced operand (C++: const char *) + @return: success + +Help on function set_immd in module ida_bytes: + +set_immd(*args) -> 'bool' + set_immd(ea) -> bool + + + Set 'has immediate operand' flag. Returns true if the 'FF_IMMD' bit + was not set and now is set + + @param ea (C++: ea_t) + +Help on function set_lzero in module ida_bytes: + +set_lzero(*args) -> 'bool' + set_lzero(ea, n) -> bool + + + Set toggle lzero bit. + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function set_manual_insn in module ida_bytes: + +set_manual_insn(*args) -> 'void' + set_manual_insn(ea, manual_insn) + + + Set manual instruction string. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @param manual_insn: "" - delete manual string. NULL - do nothing (C++: + const char *) + +Help on function set_op_type in module ida_bytes: + +set_op_type(*args) -> 'bool' + set_op_type(ea, type, n) -> bool + + + (internal function) change representation of operand(s). + + @param ea: linear address (C++: ea_t) + @param type: new flag value (should be obtained from char_flag() , + num_flag() and similar functions) (C++: flags_t) + @param n: number of operand (0, 1, -1) (C++: int) + +Help on function set_opinfo in module ida_bytes: + +set_opinfo(*args) -> 'bool' + set_opinfo(ea, n, flag, ti, suppress_events=False) -> bool + + + Set additional information about an operand representation. This + function is a low level one. Only the kernel should use it. + + @param ea: linear address of the item (C++: ea_t) + @param n: number of operand, 0 or 1 (C++: int) + @param flag: flags of the item (C++: flags_t) + @param ti: additional representation information (C++: const opinfo_t + *) + @param suppress_events: do not generate changing_op_type and + op_type_changed events (C++: bool) + @return: success + +Help on function stkvar_flag in module ida_bytes: + +stkvar_flag(*args) -> 'flags_t' + stkvar_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function strlit_flag in module ida_bytes: + +strlit_flag(*args) -> 'flags_t' + strlit_flag() -> flags_t + + + Get a flags_t representing a string literal. + +Help on function stroff_flag in module ida_bytes: + +stroff_flag(*args) -> 'flags_t' + stroff_flag() -> flags_t + + + see 'Bits: instruction operand types' + +Help on function stru_flag in module ida_bytes: + +stru_flag(*args) -> 'flags_t' + stru_flag() -> flags_t + + + Get a flags_t representing a struct. + +Help on function tbyte_flag in module ida_bytes: + +tbyte_flag(*args) -> 'flags_t' + tbyte_flag() -> flags_t + + + Get a flags_t representing a tbyte. + +Help on function toggle_bnot in module ida_bytes: + +toggle_bnot(*args) -> 'bool' + toggle_bnot(ea, n) -> bool + + + Toggle binary negation of operand. also see 'is_bnot()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function toggle_lzero in module ida_bytes: + +toggle_lzero(*args) -> 'bool' + toggle_lzero(ea, n) -> bool + +Help on function toggle_sign in module ida_bytes: + +toggle_sign(*args) -> 'bool' + toggle_sign(ea, n) -> bool + + + Toggle sign of n-th operand. allowed values of n: 0-first operand, + 1-other operands + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function unregister_custom_data_format in module ida_bytes: + +unregister_custom_data_format(*args) -> 'bool' + unregister_custom_data_format(dfid) -> bool + + + Unregisters a custom data format + @param dfid: data format id + @return: Boolean + +Help on function unregister_custom_data_type in module ida_bytes: + +unregister_custom_data_type(*args) -> 'bool' + unregister_custom_data_type(dtid) -> bool + + + Unregisters a custom data type. + @param dtid: the data type id + @return: Boolean + +Help on function unregister_data_types_and_formats in module ida_bytes: + +unregister_data_types_and_formats(formats) + As opposed to register_data_types_and_formats(), this function + unregisters multiple data types and formats at once. + +Help on function update_hidden_range in module ida_bytes: + +update_hidden_range(*args) -> 'bool' + update_hidden_range(ha) -> bool + + + Update hidden range information in the database. You cannot use this + function to change the range boundaries + + @param ha: range to update (C++: const hidden_range_t *) + @return: success + +Help on function use_mapping in module ida_bytes: + +use_mapping(*args) -> 'ea_t' + use_mapping(ea) -> ea_t + + + Translate address according to current mappings. + + @param ea: address to translate (C++: ea_t) + @return: translated address + +Help on function visit_patched_bytes in module ida_bytes: + +visit_patched_bytes(*args) -> 'int' + visit_patched_bytes(ea1, ea2, py_callable) -> int + + + Enumerates patched bytes in the given range and invokes a callable + @param ea1: start address + @param ea2: end address + @param callable: a Python callable with the following prototype: + callable(ea, fpos, org_val, patch_val). + If the callable returns non-zero then that value will be + returned to the caller and the enumeration will be + interrupted. + @return: Zero if the enumeration was successful or the return + value of the callback if enumeration was interrupted. + +Help on function word_flag in module ida_bytes: + +word_flag(*args) -> 'flags_t' + word_flag() -> flags_t + + + Get a flags_t representing a word. + +Help on function yword_flag in module ida_bytes: + +yword_flag(*args) -> 'flags_t' + yword_flag() -> flags_t + + + Get a flags_t representing a ymm word. + +Help on function zword_flag in module ida_bytes: + +zword_flag(*args) -> 'flags_t' + zword_flag() -> flags_t + + + Get a flags_t representing a zmm word. + +=== ida_bytes EPYDOC INJECTIONS === +ida_bytes.ALOPT_IGNCLT +""" +if set, don't stop at codepoints that are not part of the current +'culture'; accept all those that are graphical (this is typically used +used by user-initiated actions creating string literals.) +""" + +ida_bytes.ALOPT_IGNHEADS +""" +don't stop if another data item is encountered. only the byte values +will be used to determine the string length. if not set, a defined +data item or instruction will truncate the string +""" + +ida_bytes.ALOPT_IGNPRINT +""" +if set, don't stop at non-printable codepoints, but only at the +terminating character (or not unicode-mapped character (e.g., 0x8f in +CP1252)) +""" + +ida_bytes.ALOPT_MAX4K +""" +accumulated length + +if string length is more than 4K, return the +""" + +ida_bytes.BIN_SEARCH_BACKWARD +""" +search backward for bytes +""" + +ida_bytes.BIN_SEARCH_CASE +""" +case sensitive +""" + +ida_bytes.BIN_SEARCH_FORWARD +""" +search forward for bytes +""" + +ida_bytes.BIN_SEARCH_INITED +""" +find_byte, find_byter: any initilized value +""" + +ida_bytes.BIN_SEARCH_NOBREAK +""" +don't check for Ctrl-Break +""" + +ida_bytes.BIN_SEARCH_NOCASE +""" +case insensitive +""" + +ida_bytes.BIN_SEARCH_NOSHOW +""" +don't show search progress or update screen +""" + +ida_bytes.DELIT_DELNAMES +""" +delete any names at the specified address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_EXPAND +""" +propagate undefined items; for example if removing an instruction +removes all references to the next instruction, then plan to convert +to unexplored the next instruction too. +""" + +ida_bytes.DELIT_KEEPFUNC +""" +Just delete xrefs, ops e.t.c. + +do not undefine the function start. +""" + +ida_bytes.DELIT_NOCMT +""" +reject to delete if a comment is in address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_NOTRUNC +""" +even if 'AF_TRFUNC' is set + +don't truncate the current function +""" + +ida_bytes.DELIT_NOUNAME +""" +reject to delete if a user name is in address range (except for the +starting address). this bit is valid if nbytes > 1 +""" + +ida_bytes.DELIT_SIMPLE +""" +simply undefine the specified item(s) +""" + +ida_bytes.DTP_NODUP +""" +do not use dup construct +""" + +ida_bytes.DT_TYPE +""" +Mask for DATA typing. +""" + +ida_bytes.FF_0CHAR +""" +Char ('x')? +""" + +ida_bytes.FF_0CUST +""" +Custom representation? +""" + +ida_bytes.FF_0ENUM +""" +Enumeration? +""" + +ida_bytes.FF_0FLT +""" +Floating point number? +""" + +ida_bytes.FF_0FOP +""" +Forced operand? +""" + +ida_bytes.FF_0NUMB +""" +Binary number? +""" + +ida_bytes.FF_0NUMD +""" +Decimal number? +""" + +ida_bytes.FF_0NUMH +""" +Hexadecimal number? +""" + +ida_bytes.FF_0NUMO +""" +Octal number? +""" + +ida_bytes.FF_0OFF +""" +Offset? +""" + +ida_bytes.FF_0SEG +""" +Segment? +""" + +ida_bytes.FF_0STK +""" +Stack variable? +""" + +ida_bytes.FF_0STRO +""" +Struct offset? +""" + +ida_bytes.FF_0VOID +""" +Void (unknown)? +""" + +ida_bytes.FF_1CHAR +""" +Char ('x')? +""" + +ida_bytes.FF_1CUST +""" +Custom representation? +""" + +ida_bytes.FF_1ENUM +""" +Enumeration? +""" + +ida_bytes.FF_1FLT +""" +Floating point number? +""" + +ida_bytes.FF_1FOP +""" +Forced operand? +""" + +ida_bytes.FF_1NUMB +""" +Binary number? +""" + +ida_bytes.FF_1NUMD +""" +Decimal number? +""" + +ida_bytes.FF_1NUMH +""" +Hexadecimal number? +""" + +ida_bytes.FF_1NUMO +""" +Octal number? +""" + +ida_bytes.FF_1OFF +""" +Offset? +""" + +ida_bytes.FF_1SEG +""" +Segment? +""" + +ida_bytes.FF_1STK +""" +Stack variable? +""" + +ida_bytes.FF_1STRO +""" +Struct offset? +""" + +ida_bytes.FF_1VOID +""" +Void (unknown)? +""" + +ida_bytes.FF_ALIGN +""" +alignment directive +""" + +ida_bytes.FF_BNOT +""" +Bitwise negation of operands. +""" + +ida_bytes.FF_BYTE +""" +byte +""" + +ida_bytes.FF_CODE +""" +Code ? +""" + +ida_bytes.FF_COMM +""" +Has comment ? +""" + +ida_bytes.FF_CUSTOM +""" +custom data type +""" + +ida_bytes.FF_DATA +""" +Data ? +""" + +ida_bytes.FF_DOUBLE +""" +double +""" + +ida_bytes.FF_DWORD +""" +double word +""" + +ida_bytes.FF_FLOAT +""" +float +""" + +ida_bytes.FF_FLOW +""" +Exec flow from prev instruction. +""" + +ida_bytes.FF_FUNC +""" +function start? +""" + +ida_bytes.FF_IMMD +""" +Has Immediate value ? +""" + +ida_bytes.FF_IVL +""" +Byte has value ? +""" + +ida_bytes.FF_JUMP +""" +Has jump table or switch_info? +""" + +ida_bytes.FF_LABL +""" +Has dummy name? +""" + +ida_bytes.FF_LINE +""" +Has next or prev lines ? +""" + +ida_bytes.FF_NAME +""" +Has name ? +""" + +ida_bytes.FF_OWORD +""" +octaword/xmm word (16 bytes/128 bits) +""" + +ida_bytes.FF_PACKREAL +""" +packed decimal real +""" + +ida_bytes.FF_QWORD +""" +quadro word +""" + +ida_bytes.FF_REF +""" +has references +""" + +ida_bytes.FF_SIGN +""" +Inverted sign of operands. +""" + +ida_bytes.FF_STRLIT +""" +string literal +""" + +ida_bytes.FF_STRUCT +""" +struct variable +""" + +ida_bytes.FF_TAIL +""" +Tail ? +""" + +ida_bytes.FF_TBYTE +""" +tbyte +""" + +ida_bytes.FF_UNK +""" +Unknown ? +""" + +ida_bytes.FF_UNUSED +""" +unused bit (was used for variable bytes) +""" + +ida_bytes.FF_WORD +""" +word +""" + +ida_bytes.FF_YWORD +""" +ymm word (32 bytes/256 bits) +""" + +ida_bytes.FF_ZWORD +""" +zmm word (64 bytes/512 bits) +""" + +ida_bytes.GFE_VALUE +""" +get flags with 'FF_IVL' & 'MS_VAL' . It is much slower under remote +debugging because the kernel needs to read the process memory. +""" + +ida_bytes.GMB_READALL +""" +if this bit is not set, fail at first uninited byte + +try to read all bytes +""" + +ida_bytes.GMB_WAITBOX +""" +show wait box (may return -1 in this case) +""" + +ida_bytes.ITEM_END_FIXUP +""" +stop at the first fixup +""" + +ida_bytes.ITEM_END_INITED +""" +stop when initialization changes i.e.if is_loaded(ea): stop if +uninitialized byte is encounteredif !is_loaded(ea): stop if +initialized byte is encountered +""" + +ida_bytes.ITEM_END_NAME +""" +stop at the first named location +""" + +ida_bytes.ITEM_END_XREF +""" +stop at the first referenced location +""" + +ida_bytes.MS_0TYPE +""" +Mask for 1st arg typing. +""" + +ida_bytes.MS_1TYPE +""" +Mask for the type of other operands. +""" + +ida_bytes.MS_CLS +""" +Mask for typing. +""" + +ida_bytes.MS_CODE +""" +Mask for code bits. +""" + +ida_bytes.MS_COMM +""" +Mask of common bits. +""" + +ida_bytes.MS_VAL +""" +Mask for byte value. +""" + +ida_bytes.OPND_ALL +""" +all operands +""" + +ida_bytes.OPND_MASK +""" +mask for operand number +""" + +ida_bytes.OPND_OUTER +""" +used only in set, get, del_offset() functions + +outer offset base (combined with operand number). +""" + +ida_bytes.PSTF_ENC +""" +if encoding is specified, append it +""" + +ida_bytes.PSTF_HOTKEY +""" +have hotkey markers part of the name +""" + +ida_bytes.PSTF_TBRIEF +""" +use brief name (e.g., in the 'Strings window') +""" + +ida_bytes.PSTF_TINLIN +""" +use 'inline' name (e.g., in the structures comments) +""" + +ida_bytes.PSTF_TMASK +""" +type mask +""" + +ida_bytes.PSTF_TNORM +""" +use normal name +""" + +ida_bytes.STRCONV_ESCAPE +""" +convert non-printable characters to C escapes (, \\xNN, \\uNNNN) +""" + +ida_bytes.STRCONV_INCLLEN +""" +for Pascal-style strings, include the prefixing length byte(s) as +C-escaped sequence +""" + +ida_bytes.STRCONV_REPLCHAR +""" +convert non-printable characters to the Unicode replacement character +(U+FFFD) +""" +=== ida_bytes EPYDOC INJECTIONS END === +Help on class DBG_Hooks in module ida_dbg: + +class DBG_Hooks(builtins.object) + | Proxy of C++ DBG_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> DBG_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_DBG_Hooks(...) + | delete_DBG_Hooks(self) + | + | dbg_bpt(self, *args) -> 'int' + | dbg_bpt(self, tid, bptea) -> int + | + | dbg_bpt_changed(self, *args) -> 'void' + | dbg_bpt_changed(self, bptev_code, bpt) + | + | dbg_exception(self, *args) -> 'int' + | dbg_exception(self, pid, tid, ea, exc_code, exc_can_cont, exc_ea, exc_info) -> int + | + | dbg_finished_loading_bpts(self, *args) -> 'void' + | dbg_finished_loading_bpts(self) + | + | dbg_information(self, *args) -> 'void' + | dbg_information(self, pid, tid, ea, info) + | + | dbg_library_load(self, *args) -> 'void' + | dbg_library_load(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_library_unload(self, *args) -> 'void' + | dbg_library_unload(self, pid, tid, ea, info) + | + | dbg_process_attach(self, *args) -> 'void' + | dbg_process_attach(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_process_detach(self, *args) -> 'void' + | dbg_process_detach(self, pid, tid, ea) + | + | dbg_process_exit(self, *args) -> 'void' + | dbg_process_exit(self, pid, tid, ea, exit_code) + | + | dbg_process_start(self, *args) -> 'void' + | dbg_process_start(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) + | + | dbg_request_error(self, *args) -> 'void' + | dbg_request_error(self, failed_command, failed_dbg_notification) + | + | dbg_run_to(self, *args) -> 'void' + | dbg_run_to(self, pid, tid, ea) + | + | dbg_started_loading_bpts(self, *args) -> 'void' + | dbg_started_loading_bpts(self) + | + | dbg_step_into(self, *args) -> 'void' + | dbg_step_into(self) + | + | dbg_step_over(self, *args) -> 'void' + | dbg_step_over(self) + | + | dbg_step_until_ret(self, *args) -> 'void' + | dbg_step_until_ret(self) + | + | dbg_suspend_process(self, *args) -> 'void' + | dbg_suspend_process(self) + | + | dbg_thread_exit(self, *args) -> 'void' + | dbg_thread_exit(self, pid, tid, ea, exit_code) + | + | dbg_thread_start(self, *args) -> 'void' + | dbg_thread_start(self, pid, tid, ea) + | + | dbg_trace(self, *args) -> 'int' + | dbg_trace(self, tid, ip) -> int + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function add_bpt in module ida_dbg: + +add_bpt(*args) -> 'bool' + add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + add_bpt(bpt) -> bool + + + Add a new breakpoint in the debugged process. \sq{Type, Synchronous + function - available as request, Notification, none (synchronous + function)}Only one breakpoint can exist at a given address. + + @param ea: any address in the process memory space. Depending on the + architecture, hardware breakpoints always be setup at + random address. For example, on x86, hardware breakpoints + should be aligned depending on their size. Moreover, on the + x86 architecture, it is impossible to setup more than 4 + hardware breakpoints. (C++: ea_t) + @param size: size of the breakpoint (irrelevant for software + breakpoints): As for the address, hardware breakpoints + can't always be setup with random size. (C++: asize_t) + @param type: type of the breakpoint ( BPT_SOFT for software + breakpoint) special case BPT_DEFAULT ( BPT_SOFT | + BPT_EXEC ): try to add instruction breakpoint of the + appropriate type as follows: software bpt if supported, + hwbpt otherwise (C++: bpttype_t) + +Help on function add_path_mapping in module ida_dbg: + +add_path_mapping(*args) -> 'void' + add_path_mapping(src, dst) + +Help on function add_virt_module in module ida_dbg: + +add_virt_module(*args) -> 'bool' + add_virt_module(mod) -> bool + +Help on function attach_process in module ida_dbg: + +attach_process(*args) -> 'int' + attach_process(pid=pid_t(-1), event_id=-1) -> int + + + Attach the debugger to a running process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_attach' + }This function shouldn't be called as a request if 'NO_PROCESS' is + used. + + @param pid: PID of the process to attach to. If NO_PROCESS , a dialog + box will interactively ask the user for the process to + attach to. (C++: pid_t) + @param event_id (C++: int) + +Help on class bpt_location_t in module ida_dbg: + +class bpt_location_t(builtins.object) + | Proxy of C++ bpt_location_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> bpt_location_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bpt_location_t(...) + | delete_bpt_location_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ea(self, *args) -> 'ea_t' + | ea(self) -> ea_t + | + | is_empty_path(self, *args) -> 'bool' + | is_empty_path(self) -> bool + | + | lineno(self, *args) -> 'int' + | lineno(self) -> int + | + | offset(self, *args) -> 'uval_t' + | offset(self) -> uval_t + | + | path(self, *args) -> 'char const *' + | path(self) -> char const * + | + | set_abs_bpt(self, *args) -> 'void' + | set_abs_bpt(self, a) + | + | set_rel_bpt(self, *args) -> 'void' + | set_rel_bpt(self, mod, _offset) + | + | set_src_bpt(self, *args) -> 'void' + | set_src_bpt(self, fn, _lineno) + | + | set_sym_bpt(self, *args) -> 'void' + | set_sym_bpt(self, _symbol, _offset=0) + | + | symbol(self, *args) -> 'char const *' + | symbol(self) -> char const * + | + | type(self, *args) -> 'bpt_loctype_t' + | type(self) -> bpt_loctype_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | index + | bpt_location_t_index_get(self) -> int + | + | info + | bpt_location_t_info_get(self) -> ea_t + | + | loctype + | bpt_location_t_loctype_get(self) -> bpt_loctype_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class bpt_t in module ida_dbg: + +class bpt_t(builtins.object) + | Proxy of C++ bpt_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bpt_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bpt_t(...) + | delete_bpt_t(self) + | + | badbpt(self, *args) -> 'bool' + | badbpt(self) -> bool + | + | enabled(self, *args) -> 'bool' + | enabled(self) -> bool + | + | get_cnd_elang_idx(self, *args) -> 'size_t' + | get_cnd_elang_idx(self) -> size_t + | + | get_size(self, *args) -> 'int' + | get_size(self) -> int + | + | is_absbpt(self, *args) -> 'bool' + | is_absbpt(self) -> bool + | + | is_active(self, *args) -> 'bool' + | is_active(self) -> bool + | + | is_compiled(self, *args) -> 'bool' + | is_compiled(self) -> bool + | + | is_hwbpt(self, *args) -> 'bool' + | is_hwbpt(self) -> bool + | + | is_inactive(self, *args) -> 'bool' + | is_inactive(self) -> bool + | + | is_low_level(self, *args) -> 'bool' + | is_low_level(self) -> bool + | + | is_page_bpt(self, *args) -> 'bool' + | is_page_bpt(self) -> bool + | + | is_partially_active(self, *args) -> 'bool' + | is_partially_active(self) -> bool + | + | is_relbpt(self, *args) -> 'bool' + | is_relbpt(self) -> bool + | + | is_srcbpt(self, *args) -> 'bool' + | is_srcbpt(self) -> bool + | + | is_symbpt(self, *args) -> 'bool' + | is_symbpt(self) -> bool + | + | is_tracemodebpt(self, *args) -> 'bool' + | is_tracemodebpt(self) -> bool + | + | is_traceoffbpt(self, *args) -> 'bool' + | is_traceoffbpt(self) -> bool + | + | is_traceonbpt(self, *args) -> 'bool' + | is_traceonbpt(self) -> bool + | + | listbpt(self, *args) -> 'bool' + | listbpt(self) -> bool + | + | set_abs_bpt(self, *args) -> 'void' + | set_abs_bpt(self, a) + | + | set_rel_bpt(self, *args) -> 'void' + | set_rel_bpt(self, mod, o) + | + | set_src_bpt(self, *args) -> 'void' + | set_src_bpt(self, fn, lineno) + | + | set_sym_bpt(self, *args) -> 'void' + | set_sym_bpt(self, sym, o) + | + | set_trace_action(self, *args) -> 'bool' + | set_trace_action(self, enable, trace_types) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | bpt_t_cb_get(self) -> size_t + | + | cndidx + | bpt_t_cndidx_get(self) -> int + | + | condition + | bpt_t_condition_get(self) -> PyObject * + | + | ea + | bpt_t_ea_get(self) -> ea_t + | + | elang + | bpt_t_elang_get(self) -> PyObject * + | + | flags + | bpt_t_flags_get(self) -> uint32 + | + | loc + | bpt_t_loc_get(self) -> bpt_location_t + | + | pass_count + | bpt_t_pass_count_get(self) -> int + | + | pid + | bpt_t_pid_get(self) -> pid_t + | + | props + | bpt_t_props_get(self) -> uint32 + | + | size + | bpt_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | tid + | bpt_t_tid_get(self) -> thid_t + | + | type + | bpt_t_type_get(self) -> bpttype_t + +Help on class bpt_vec_t in module ida_dbg: + +class bpt_vec_t(builtins.object) + | Proxy of C++ qvector< bpt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'bpt_t const &' + | __getitem__(self, i) -> bpt_t + | + | __init__(self, *args) + | __init__(self) -> bpt_vec_t + | __init__(self, x) -> bpt_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_bpt_vec_t(...) + | delete_bpt_vec_t(self) + | + | at(self, *args) -> 'bpt_t const &' + | at(self, _idx) -> bpt_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< bpt_t >::const_iterator' + | begin(self) -> bpt_t + | begin(self) -> bpt_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< bpt_t >::const_iterator' + | end(self) -> bpt_t + | end(self) -> bpt_t + | + | erase(self, *args) -> 'qvector< bpt_t >::iterator' + | erase(self, it) -> bpt_t + | erase(self, first, last) -> bpt_t + | + | extract(self, *args) -> 'bpt_t *' + | extract(self) -> bpt_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=bpt_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< bpt_t >::iterator' + | insert(self, it, x) -> bpt_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'bpt_t &' + | push_back(self, x) + | push_back(self) -> bpt_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function bring_debugger_to_front in module ida_dbg: + +bring_debugger_to_front(*args) -> 'void' + bring_debugger_to_front() + +Help on function check_bpt in module ida_dbg: + +check_bpt(*args) -> 'int' + check_bpt(ea) -> int + + + Check the breakpoint at the specified address. + + @param ea (C++: ea_t) + @return: one of Breakpoint status codes + +Help on function choose_trace_file in module ida_dbg: + +choose_trace_file(*args) -> 'qstring *' + choose_trace_file() -> str + + + Show the choose trace dialog. + +Help on function clear_requests_queue in module ida_dbg: + +clear_requests_queue(*args) -> 'void' + clear_requests_queue() + + + Clear the queue of waiting requests. \sq{Type, Synchronous function, + Notification, none (synchronous function)}If a request is currently + running, this one isn't stopped. + +Help on function clear_trace in module ida_dbg: + +clear_trace(*args) -> 'void' + clear_trace() + + + Clear all events in the trace buffer. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + +Help on function collect_stack_trace in module ida_dbg: + +collect_stack_trace(*args) -> 'bool' + collect_stack_trace(tid, trace) -> bool + +Help on function continue_process in module ida_dbg: + +continue_process(*args) -> 'bool' + continue_process() -> bool + + + Continue the execution of the process in the debugger. \sq{Type, + Synchronous function - available as Request, Notification, none + (synchronous function)}The 'continue_process()' function can be called + from a notification handler to force the continuation of the process. + In this case the request queue will not be examined, IDA will simply + resume execution. Usually it makes sense to call + 'request_continue_process()' followed by 'run_requests()' , so that + IDA will first start a queued request (if any) and then resume the + application. + +Help on function create_source_viewer in module ida_dbg: + +create_source_viewer(*args) -> 'source_view_t *' + create_source_viewer(out_ccv, parent, custview, sf, lines, lnnum, colnum, flags) -> source_view_t * + + + Create a source code view. + + + @param out_ccv (C++: TWidget **) + @param parent (C++: TWidget *) + @param custview (C++: TWidget *) + @param sf (C++: source_file_ptr) + @param lines (C++: strvec_t *) + @param lnnum (C++: int) + @param colnum (C++: int) + @param flags (C++: int) + +Help on function dbg_add_bpt_tev in module ida_dbg: + +dbg_add_bpt_tev(*args) -> 'bool' + dbg_add_bpt_tev(tid, ea, bp) -> bool + + + Add a new breakpoint trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ea (C++: ea_t) + @param bp (C++: ea_t) + @return: false if the operation failed, true otherwise + +Help on function dbg_add_call_tev in module ida_dbg: + +dbg_add_call_tev(*args) -> 'void' + dbg_add_call_tev(tid, caller, callee) + + + Add a new call trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param caller (C++: ea_t) + @param callee (C++: ea_t) + +Help on function dbg_add_debug_event in module ida_dbg: + +dbg_add_debug_event(*args) -> 'void' + dbg_add_debug_event(event) + + + Add a new debug event to the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param event (C++: debug_event_t *) + +Help on function dbg_add_insn_tev in module ida_dbg: + +dbg_add_insn_tev(*args) -> 'bool' + dbg_add_insn_tev(tid, ea, save=SAVE_DIFF) -> bool + + + Add a new instruction trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ea (C++: ea_t) + @param save (C++: save_reg_values_t) + @return: false if the operation failed, true otherwise + +Help on function dbg_add_many_tevs in module ida_dbg: + +dbg_add_many_tevs(*args) -> 'bool' + dbg_add_many_tevs(new_tevs) -> bool + + + Add many new trace elements to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param new_tevs (C++: tevinforeg_vec_t *) + @return: false if the operation failed for any tev_info_t object + +Help on function dbg_add_ret_tev in module ida_dbg: + +dbg_add_ret_tev(*args) -> 'void' + dbg_add_ret_tev(tid, ret_insn, return_to) + + + Add a new return trace element to the current trace. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + @param ret_insn (C++: ea_t) + @param return_to (C++: ea_t) + +Help on function dbg_add_tev in module ida_dbg: + +dbg_add_tev(*args) -> 'void' + dbg_add_tev(type, tid, address) + + + Add a new trace element to the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param type (C++: tev_type_t) + @param tid (C++: thid_t) + @param address (C++: ea_t) + +Help on function dbg_add_thread in module ida_dbg: + +dbg_add_thread(*args) -> 'void' + dbg_add_thread(tid) + + + Add a thread to the current trace. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @param tid (C++: thid_t) + +Help on function dbg_bin_search in module ida_dbg: + +dbg_bin_search(*args) -> 'unsigned-ea-like-numeric-type *, qstring *'↗ + dbg_bin_search(start_ea, end_ea, data, srch_flags) -> str + +Help on function dbg_can_query in module ida_dbg: + +dbg_can_query(*args) -> 'bool' + dbg_can_query() -> bool + + + This function can be used to check if the debugger can be queried: + - debugger is loaded + - process is suspended + - process is not suspended but can take requests. In this case some requests like + memory read/write, bpt management succeed and register querying will fail. + Check if idaapi.get_process_state() < 0 to tell if the process is suspended + @return: Boolean + +Help on function dbg_del_thread in module ida_dbg: + +dbg_del_thread(*args) -> 'void' + dbg_del_thread(tid) + + + Delete a thread from the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param tid (C++: thid_t) + +Help on function dbg_is_loaded in module ida_dbg: + +dbg_is_loaded(*args) -> 'bool' + dbg_is_loaded() -> bool + + + Checks if a debugger is loaded + @return: Boolean + +Help on function define_exception in module ida_dbg: + +define_exception(*args) -> 'char const *' + define_exception(code, name, desc, flags) -> char const * + + + Convenience function: define new exception code. + + @param code: exception code (cannot be 0) (C++: uint) + @param name: exception name (cannot be empty or NULL) (C++: const char + *) + @param desc: exception description (maybe NULL) (C++: const char *) + @param flags: combination of Exception info flags (C++: int) + @return: failure message or NULL. You must call store_exceptions() + if this function succeeds + +Help on function del_bpt in module ida_dbg: + +del_bpt(*args) -> 'bool' + del_bpt(ea) -> bool + del_bpt(bptloc) -> bool + + + Delete an existing breakpoint in the debugged process. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + +Help on function del_bptgrp in module ida_dbg: + +del_bptgrp(*args) -> 'bool' + del_bptgrp(name) -> bool + +Help on function del_virt_module in module ida_dbg: + +del_virt_module(*args) -> 'bool' + del_virt_module(base) -> bool + +Help on function detach_process in module ida_dbg: + +detach_process(*args) -> 'bool' + detach_process() -> bool + + + Detach the debugger from the debugged process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_detach' } + +Help on function diff_trace_file in module ida_dbg: + +diff_trace_file(*args) -> 'bool' + diff_trace_file(nonnul_filename) -> bool + + + Show difference between the current trace and the one from 'filename'. + +Help on function disable_bblk_trace in module ida_dbg: + +disable_bblk_trace(*args) -> 'bool' + disable_bblk_trace() -> bool + +Help on function disable_bpt in module ida_dbg: + +disable_bpt(*args) -> 'bool' + disable_bpt(ea) -> bool + disable_bpt(bptloc) -> bool + +Help on function disable_func_trace in module ida_dbg: + +disable_func_trace(*args) -> 'bool' + disable_func_trace() -> bool + +Help on function disable_insn_trace in module ida_dbg: + +disable_insn_trace(*args) -> 'bool' + disable_insn_trace() -> bool + +Help on function disable_step_trace in module ida_dbg: + +disable_step_trace(*args) -> 'bool' + disable_step_trace() -> bool + +Help on function edit_manual_regions in module ida_dbg: + +edit_manual_regions(*args) -> 'void' + edit_manual_regions() + +Help on function enable_bblk_trace in module ida_dbg: + +enable_bblk_trace(*args) -> 'bool' + enable_bblk_trace(enable=True) -> bool + +Help on function enable_bpt in module ida_dbg: + +enable_bpt(*args) -> 'bool' + enable_bpt(ea, enable=True) -> bool + enable_bpt(bptloc, enable=True) -> bool + +Help on function enable_func_trace in module ida_dbg: + +enable_func_trace(*args) -> 'bool' + enable_func_trace(enable=True) -> bool + +Help on function enable_insn_trace in module ida_dbg: + +enable_insn_trace(*args) -> 'bool' + enable_insn_trace(enable=True) -> bool + +Help on function enable_manual_regions in module ida_dbg: + +enable_manual_regions(*args) -> 'void' + enable_manual_regions(enable) + +Help on function enable_step_trace in module ida_dbg: + +enable_step_trace(*args) -> 'bool' + enable_step_trace(enable=True) -> bool + +Help on class eval_ctx_t in module ida_dbg: + +class eval_ctx_t(builtins.object) + | Proxy of C++ eval_ctx_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea) -> eval_ctx_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_eval_ctx_t(...) + | delete_eval_ctx_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | eval_ctx_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + +Help on function exist_bpt in module ida_dbg: + +exist_bpt(*args) -> 'bool' + exist_bpt(ea) -> bool + + + Does a breakpoint exist at the given location? + + + @param ea (C++: ea_t) + +Help on function exit_process in module ida_dbg: + +exit_process(*args) -> 'bool' + exit_process() -> bool + + + Terminate the debugging of the current process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_exit' } + +Help on function find_bpt in module ida_dbg: + +find_bpt(*args) -> 'bool' + find_bpt(bptloc, bpt) -> bool + + + Find a breakpoint by location. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param bptloc: Breakpoint location (C++: const bpt_location_t &) + @param bpt: bpt is filled if the breakpoint was found (C++: bpt_t *) + +Help on function get_bblk_trace_options in module ida_dbg: + +get_bblk_trace_options(*args) -> 'int' + get_bblk_trace_options() -> int + + + Get current basic block tracing options. Also see 'BT_LOG_INSTS' + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + +Help on function get_bpt in module ida_dbg: + +get_bpt(*args) -> 'bool' + get_bpt(ea, bpt) -> bool + + + Get the characteristics of a breakpoint. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + @param bpt: if not NULL, is filled with the characteristics. (C++: + bpt_t *) + @return: false if no breakpoint exists + +Help on function get_bpt_group in module ida_dbg: + +get_bpt_group(*args) -> 'qstring *' + get_bpt_group(bptloc) -> str + +Help on function get_bpt_qty in module ida_dbg: + +get_bpt_qty(*args) -> 'int' + get_bpt_qty() -> int + + + Get number of breakpoints. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function get_bpt_tev_ea in module ida_dbg: + +get_bpt_tev_ea(*args) -> 'ea_t' + get_bpt_tev_ea(n) -> ea_t + + + Get the address associated to a read, read/write or execution trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)}Usually, a breakpoint is associated with a read, read/write + or execution trace event. However, the returned address could be any + address in the range of this breakpoint. If the breakpoint was deleted + after the trace event, the address no longer corresponds to a valid + breakpoint. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a read, read/write or execution trace event. + +Help on function get_bptloc_string in module ida_dbg: + +get_bptloc_string(*args) -> 'char const *' + get_bptloc_string(i) -> char const * + + + Helper function for 'bpt_location_t' . + + + @param i (C++: int) + +Help on function get_call_tev_callee in module ida_dbg: + +get_call_tev_callee(*args) -> 'ea_t' + get_call_tev_callee(n) -> ea_t + + + Get the called function from a function call trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function call event. + +Help on function get_current_source_file in module ida_dbg: + +get_current_source_file(*args) -> 'bool' + get_current_source_file(path) -> bool + +Help on function get_current_source_line in module ida_dbg: + +get_current_source_line(*args) -> 'int' + get_current_source_line() -> int + +Help on function get_current_thread in module ida_dbg: + +get_current_thread(*args) -> 'thid_t' + get_current_thread() -> thid_t + + + Get current thread ID. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_dbg_byte in module ida_dbg: + +get_dbg_byte(*args) -> 'bool' + get_dbg_byte(x, ea) -> bool + + + Get one byte of the debugged process memory. + + @param x: pointer to byte value (C++: uint32 *) + @param ea: linear address (C++: ea_t) + @return: true success + +Help on function get_dbg_memory_info in module ida_dbg: + +get_dbg_memory_info(*args) -> 'int' + get_dbg_memory_info(ranges) -> int + +Help on function get_dbg_reg_info in module ida_dbg: + +get_dbg_reg_info(*args) -> 'bool' + get_dbg_reg_info(regname, ri) -> bool + + + Get register information \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param regname (C++: const char *) + @param ri (C++: register_info_t *) + +Help on function get_debug_event in module ida_dbg: + +get_debug_event(*args) -> 'debug_event_t const *' + get_debug_event() -> debug_event_t + + + Get the current debugger event. + +Help on function get_debugger_event_cond in module ida_dbg: + +get_debugger_event_cond(*args) -> 'char const *' + get_debugger_event_cond() -> char const * + +Help on function get_first_module in module ida_dbg: + +get_first_module(*args) -> 'bool' + get_first_module(modinfo) -> bool + +Help on function get_func_trace_options in module ida_dbg: + +get_func_trace_options(*args) -> 'int' + get_func_trace_options() -> int + + + Get current function tracing options. Also see 'FT_LOG_RET' \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_global_var in module ida_dbg: + +get_global_var(*args) -> 'bool' + get_global_var(prov, ea, name, out) -> bool + +Help on function get_grp_bpts in module ida_dbg: + +get_grp_bpts(*args) -> 'ssize_t' + get_grp_bpts(bpts, grp_name) -> ssize_t + +Help on function get_insn_tev_reg_mem in module ida_dbg: + +get_insn_tev_reg_mem(*args) -> 'bool' + get_insn_tev_reg_mem(n, memmap) -> bool + + + Read the memory pointed by register values from an instruction trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param memmap: result (C++: memreg_infos_t *) + @return: false if not an instruction event or no memory is available + +Help on function get_insn_tev_reg_result in module ida_dbg: + +get_insn_tev_reg_result(*args) -> 'bool' + get_insn_tev_reg_result(n, regname, regval) -> bool + + + Read the resulting register value from an instruction trace event. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param regname: name of desired register (C++: const char *) + @param regval: result (C++: regval_t *) + @return: false if not an instruction trace event or register wasn't + modified. + +Help on function get_insn_tev_reg_val in module ida_dbg: + +get_insn_tev_reg_val(*args) -> 'bool' + get_insn_tev_reg_val(n, regname, regval) -> bool + + + Read a register value from an instruction trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)}This + is the value of the register before the execution of the instruction. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param regname: name of desired register (C++: const char *) + @param regval: result (C++: regval_t *) + @return: false if not an instruction event. + +Help on function get_insn_trace_options in module ida_dbg: + +get_insn_trace_options(*args) -> 'int' + get_insn_trace_options() -> int + + + Get current instruction tracing options. Also see 'IT_LOG_SAME_IP' + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + +Help on function get_ip_val in module ida_dbg: + +get_ip_val(*args) -> 'unsigned-ea-like-numeric-type *'↗ + get_ip_val() -> bool + + + Get value of the IP (program counter) register for the current thread. + Requires a suspended debugger. + +Help on function get_local_var in module ida_dbg: + +get_local_var(*args) -> 'bool' + get_local_var(prov, ea, name, out) -> bool + +Help on function get_local_vars in module ida_dbg: + +get_local_vars(*args) -> 'bool' + get_local_vars(prov, ea, out) -> bool + +Help on function get_manual_regions in module ida_dbg: + +get_manual_regions(*args) -> 'PyObject *' + get_manual_regions(ranges) + get_manual_regions() -> PyObject * + + + Returns the manual memory regions + @return: list(start_ea, end_ea, name, sclass, sbase, bitness, perm) + +Help on function get_module_info in module ida_dbg: + +get_module_info(*args) -> 'bool' + get_module_info(ea, modinfo) -> bool + +Help on function get_next_module in module ida_dbg: + +get_next_module(*args) -> 'bool' + get_next_module(modinfo) -> bool + +Help on function get_process_options in module ida_dbg: + +get_process_options(*args) -> 'void' + get_process_options(path, args, sdir, host, _pass, port) + + + Get process options. Any of the arguments may be NULL + + @param path (C++: qstring *) + @param args (C++: qstring *) + @param sdir (C++: qstring *) + @param host (C++: qstring *) + @param port (C++: int *) + +Help on function get_process_state in module ida_dbg: + +get_process_state(*args) -> 'int' + get_process_state() -> int + + + Return the state of the currently debugged process. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @return: one of Debugged process states + +Help on function get_processes in module ida_dbg: + +get_processes(*args) -> 'ssize_t' + get_processes(proclist) -> ssize_t + + + Take a snapshot of running processes and return their description. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param proclist (C++: procinfo_vec_t *) + @return: number of processes or -1 on error + +Help on function get_reg_val in module ida_dbg: + +get_reg_val(*args) -> 'PyObject *' + get_reg_val(regname, regval) -> bool + get_reg_val(regname, ival) -> bool + get_reg_val(regname) -> PyObject * + + + Read a register value from the current thread. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + @param regval (C++: regval_t *) + +Help on function get_reg_vals in module ida_dbg: + +get_reg_vals(*args) -> 'int' + get_reg_vals(tid, clsmask, values) -> int + +Help on function get_ret_tev_return in module ida_dbg: + +get_ret_tev_return(*args) -> 'ea_t' + get_ret_tev_return(n) -> ea_t + + + Get the return address from a function return trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function return event. + +Help on function get_running_notification in module ida_dbg: + +get_running_notification(*args) -> 'dbg_notification_t' + get_running_notification() -> dbg_notification_t + + + Get the notification associated (if any) with the current running + request. \sq{Type, Synchronous function, Notification, none + (synchronous function)} + + @return: dbg_null if no running request + +Help on function get_running_request in module ida_dbg: + +get_running_request(*args) -> 'ui_notification_t' + get_running_request() -> ui_notification_t + + + Get the current running request. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: ui_null if no running request + +Help on function get_sp_val in module ida_dbg: + +get_sp_val(*args) -> 'unsigned-ea-like-numeric-type *'↗ + get_sp_val() -> bool + + + Get value of the SP register for the current thread. Requires a + suspended debugger. + +Help on function get_srcinfo_provider in module ida_dbg: + +get_srcinfo_provider(*args) -> 'srcinfo_provider_t *' + get_srcinfo_provider(name) -> srcinfo_provider_t * + +Help on function get_step_trace_options in module ida_dbg: + +get_step_trace_options(*args) -> 'int' + get_step_trace_options() -> int + + + Get current step tracing options. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: Step trace options + +Help on function get_tev_ea in module ida_dbg: + +get_tev_ea(*args) -> 'ea_t' + get_tev_ea(n) -> ea_t + +Help on function get_tev_event in module ida_dbg: + +get_tev_event(*args) -> 'bool' + get_tev_event(n, d) -> bool + + + Get the corresponding debug event, if any, for the specified tev + object. \sq{Type, Synchronous function, Notification, none + (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param d: result (C++: debug_event_t *) + @return: false if the tev_t object doesn't have any associated debug + event, true otherwise, with the debug event in "d". + +Help on function get_tev_info in module ida_dbg: + +get_tev_info(*args) -> 'bool' + get_tev_info(n, tev_info) -> bool + + + Get main information about a trace event. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param tev_info: result (C++: tev_info_t *) + @return: success + +Help on function get_tev_memory_info in module ida_dbg: + +get_tev_memory_info(*args) -> 'bool' + get_tev_memory_info(n, mi) -> bool + + + Get the memory layout, if any, for the specified tev object. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @param mi: result (C++: meminfo_vec_t *) + @return: false if the tev_t object is not of type tev_mem , true + otherwise, with the new memory layout in "mi". + +Help on function get_tev_qty in module ida_dbg: + +get_tev_qty(*args) -> 'int' + get_tev_qty() -> int + + + Get number of trace events available in trace buffer. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_tev_reg_mem in module ida_dbg: + +get_tev_reg_mem(tev, idx) + +Help on function get_tev_reg_mem_ea in module ida_dbg: + +get_tev_reg_mem_ea(tev, idx) + +Help on function get_tev_reg_mem_qty in module ida_dbg: + +get_tev_reg_mem_qty(tev) + +Help on function get_tev_reg_val in module ida_dbg: + +get_tev_reg_val(tev, reg) + +Help on function get_tev_tid in module ida_dbg: + +get_tev_tid(*args) -> 'int' + get_tev_tid(n) -> int + +Help on function get_tev_type in module ida_dbg: + +get_tev_type(*args) -> 'int' + get_tev_type(n) -> int + +Help on function get_thread_qty in module ida_dbg: + +get_thread_qty(*args) -> 'int' + get_thread_qty() -> int + + + Get number of threads. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_trace_base_address in module ida_dbg: + +get_trace_base_address(*args) -> 'ea_t' + get_trace_base_address() -> ea_t + + + Get the base address of the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @return: the base address of the currently loaded trace + +Help on function get_trace_file_desc in module ida_dbg: + +get_trace_file_desc(*args) -> 'qstring *' + get_trace_file_desc(filename) -> str + + + Get the file header of the specified trace file. + + + @param filename (C++: const char *) + +Help on function get_trace_platform in module ida_dbg: + +get_trace_platform(*args) -> 'char const *' + get_trace_platform() -> char const * + + + Get platform name of current trace. + +Help on function getn_bpt in module ida_dbg: + +getn_bpt(*args) -> 'bool' + getn_bpt(n, bpt) -> bool + + + Get the characteristics of a breakpoint. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param n: number of breakpoint, is in range 0.. get_bpt_qty() -1 (C++: + int) + @param bpt: filled with the characteristics. (C++: bpt_t *) + @return: false if no breakpoint exists + +Help on function getn_thread in module ida_dbg: + +getn_thread(*args) -> 'thid_t' + getn_thread(n) -> thid_t + + + Get the ID of a thread. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: + int) + @return: NO_THREAD if the thread doesn't exist. + +Help on function getn_thread_name in module ida_dbg: + +getn_thread_name(*args) -> 'char const *' + getn_thread_name(n) -> char const * + + + Get the NAME of a thread \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 + for the current thread (C++: int) + @return: thread name or NULL if the thread doesn't exist. + +Help on function graph_trace in module ida_dbg: + +graph_trace(*args) -> 'bool' + graph_trace() -> bool + + + Show the trace callgraph. + +Help on function handle_debug_event in module ida_dbg: + +handle_debug_event(*args) -> 'int' + handle_debug_event(ev, rqflags) -> int + +Help on function hide_all_bpts in module ida_dbg: + +hide_all_bpts(*args) -> 'int' + hide_all_bpts() -> int + +Help on function internal_get_sreg_base in module ida_dbg: + +internal_get_sreg_base(*args) -> 'ea_t' + internal_get_sreg_base(tid, sreg_value) -> ea_t + + + Get the sreg base, for the given thread. + + @return: The sreg base, or BADADDR on failure. + +Help on function internal_ioctl in module ida_dbg: + +internal_ioctl(*args) -> 'int' + internal_ioctl(fn, buf, poutbuf, poutsize) -> int + +Help on function invalidate_dbg_state in module ida_dbg: + +invalidate_dbg_state(*args) -> 'int' + invalidate_dbg_state(dbginv) -> int + + + Invalidate cached debugger information. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param dbginv: Debugged process invalidation options (C++: int) + @return: current debugger state (one of Debugged process states ) + +Help on function invalidate_dbgmem_config in module ida_dbg: + +invalidate_dbgmem_config(*args) -> 'void' + invalidate_dbgmem_config() + + + Invalidate the debugged process memory configuration. Call this + function if the debugged process might have changed its memory layout + (allocated more memory, for example) + +Help on function invalidate_dbgmem_contents in module ida_dbg: + +invalidate_dbgmem_contents(*args) -> 'void' + invalidate_dbgmem_contents(ea, size) + + + Invalidate the debugged process memory contents. Call this function + each time the process has been stopped or the process memory is + modified. If ea == 'BADADDR' , then the whole memory contents will be + invalidated + + @param ea (C++: ea_t) + @param size (C++: asize_t) + +Help on function is_bblk_trace_enabled in module ida_dbg: + +is_bblk_trace_enabled(*args) -> 'bool' + is_bblk_trace_enabled() -> bool + +Help on function is_debugger_busy in module ida_dbg: + +is_debugger_busy(*args) -> 'bool' + is_debugger_busy() -> bool + + + Is the debugger busy?. Some debuggers do not accept any commands while + the debugged application is running. For such a debugger, it is unsafe + to do anything with the database (even simple queries like get_byte + may lead to undesired consequences). Returns: true if the debugged + application is running under such a debugger + +Help on function is_debugger_memory in module ida_dbg: + +is_debugger_memory(*args) -> 'bool' + is_debugger_memory(ea) -> bool + + + Is the address mapped to debugger memory? + + + @param ea (C++: ea_t) + +Help on function is_debugger_on in module ida_dbg: + +is_debugger_on(*args) -> 'bool' + is_debugger_on() -> bool + + + Is the debugger currently running? + +Help on function is_func_trace_enabled in module ida_dbg: + +is_func_trace_enabled(*args) -> 'bool' + is_func_trace_enabled() -> bool + + + Get current state of functions tracing. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + +Help on function is_insn_trace_enabled in module ida_dbg: + +is_insn_trace_enabled(*args) -> 'bool' + is_insn_trace_enabled() -> bool + + + Get current state of instructions tracing. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + +Help on function is_reg_custom in module ida_dbg: + +is_reg_custom(*args) -> 'bool' + is_reg_custom(regname) -> bool + + + Does a register contain a value of a custom data type? \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_reg_float in module ida_dbg: + +is_reg_float(*args) -> 'bool' + is_reg_float(regname) -> bool + + + Does a register contain a floating point value? \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_reg_integer in module ida_dbg: + +is_reg_integer(*args) -> 'bool' + is_reg_integer(regname) -> bool + + + Does a register contain an integer value? \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param regname (C++: const char *) + +Help on function is_request_running in module ida_dbg: + +is_request_running(*args) -> 'bool' + is_request_running() -> bool + + + Is a request currently running? + +Help on function is_step_trace_enabled in module ida_dbg: + +is_step_trace_enabled(*args) -> 'bool' + is_step_trace_enabled() -> bool + + + Get current state of step tracing. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function is_valid_trace_file in module ida_dbg: + +is_valid_trace_file(*args) -> 'bool' + is_valid_trace_file(filename) -> bool + + + Is the specified file a valid trace file for the current database? + + + @param filename (C++: const char *) + +Help on function list_bptgrps in module ida_dbg: + +list_bptgrps(*args) -> 'PyObject *' + list_bptgrps(bptgrps) -> size_t + list_bptgrps() -> PyObject * + +Help on function load_debugger in module ida_dbg: + +load_debugger(*args) -> 'bool' + load_debugger(dbgname, use_remote) -> bool + +Help on function load_trace_file in module ida_dbg: + +load_trace_file(*args) -> 'qstring *' + load_trace_file(filename) -> str + + + Load a recorded trace file in the trace window. If the call succeeds + and 'buf' is not null, the description of the trace stored in the + binary trace file will be returned in 'buf' + + @param filename (C++: const char *) + +Help on class memreg_info_t in module ida_dbg: + +class memreg_info_t(builtins.object) + | Proxy of C++ memreg_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> memreg_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_memreg_info_t(...) + | delete_memreg_info_t(self) + | + | get_bytes(self, *args) -> 'PyObject *' + | get_bytes(self) -> PyObject * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bytes + | get_bytes(self) -> PyObject * + | + | ea + | memreg_info_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + +Help on class memreg_infos_t in module ida_dbg: + +class memreg_infos_t(builtins.object) + | Proxy of C++ qvector< memreg_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'memreg_info_t const &' + | __getitem__(self, i) -> memreg_info_t + | + | __init__(self, *args) + | __init__(self) -> memreg_infos_t + | __init__(self, x) -> memreg_infos_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_memreg_infos_t(...) + | delete_memreg_infos_t(self) + | + | at(self, *args) -> 'memreg_info_t const &' + | at(self, _idx) -> memreg_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< memreg_info_t >::const_iterator' + | begin(self) -> memreg_info_t + | begin(self) -> memreg_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< memreg_info_t >::const_iterator' + | end(self) -> memreg_info_t + | end(self) -> memreg_info_t + | + | erase(self, *args) -> 'qvector< memreg_info_t >::iterator' + | erase(self, it) -> memreg_info_t + | erase(self, first, last) -> memreg_info_t + | + | extract(self, *args) -> 'memreg_info_t *' + | extract(self) -> memreg_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=memreg_info_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< memreg_info_t >::iterator' + | insert(self, it, x) -> memreg_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'memreg_info_t &' + | push_back(self, x) + | push_back(self) -> memreg_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function move_bpt_to_grp in module ida_dbg: + +move_bpt_to_grp(*args) -> 'void' + move_bpt_to_grp(bpt, grp_name) + + + Sets new group for the breakpoint + +Help on function put_dbg_byte in module ida_dbg: + +put_dbg_byte(*args) -> 'bool' + put_dbg_byte(ea, x) -> bool + + + Change one byte of the debugged process memory. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint32) + @return: true if the process memory has been modified + +Help on function read_dbg_memory in module ida_dbg: + +read_dbg_memory(*args) -> 'ssize_t' + read_dbg_memory(ea, buffer, size) -> ssize_t + +Help on function refresh_debugger_memory in module ida_dbg: + +refresh_debugger_memory(*args) -> 'PyObject *' + refresh_debugger_memory() -> PyObject * + + + Refreshes the debugger memory + @return: Nothing + +Help on function rename_bptgrp in module ida_dbg: + +rename_bptgrp(*args) -> 'bool' + rename_bptgrp(old_name, new_name) -> bool + +Help on function request_add_bpt in module ida_dbg: + +request_add_bpt(*args) -> 'bool' + request_add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + request_add_bpt(bpt) -> bool + + + Post an 'add_bpt(ea_t, asize_t, bpttype_t)' request. + + + @param ea (C++: ea_t) + @param size (C++: asize_t) + @param type (C++: bpttype_t) + +Help on function request_attach_process in module ida_dbg: + +request_attach_process(*args) -> 'int' + request_attach_process(pid, event_id) -> int + + + Post an 'attach_process()' request. + + + @param pid (C++: pid_t) + @param event_id (C++: int) + +Help on function request_clear_trace in module ida_dbg: + +request_clear_trace(*args) -> 'void' + request_clear_trace() + + + Post a 'clear_trace()' request. + +Help on function request_continue_process in module ida_dbg: + +request_continue_process(*args) -> 'bool' + request_continue_process() -> bool + + + Post a 'continue_process()' request.This requires an explicit call to + 'run_requests()' + +Help on function request_del_bpt in module ida_dbg: + +request_del_bpt(*args) -> 'bool' + request_del_bpt(ea) -> bool + request_del_bpt(bptloc) -> bool + + + Post a 'del_bpt(ea_t)' request. + + + @param ea (C++: ea_t) + +Help on function request_detach_process in module ida_dbg: + +request_detach_process(*args) -> 'bool' + request_detach_process() -> bool + + + Post a 'detach_process()' request. + +Help on function request_disable_bblk_trace in module ida_dbg: + +request_disable_bblk_trace(*args) -> 'bool' + request_disable_bblk_trace() -> bool + +Help on function request_disable_bpt in module ida_dbg: + +request_disable_bpt(*args) -> 'bool' + request_disable_bpt(ea) -> bool + request_disable_bpt(bptloc) -> bool + +Help on function request_disable_func_trace in module ida_dbg: + +request_disable_func_trace(*args) -> 'bool' + request_disable_func_trace() -> bool + +Help on function request_disable_insn_trace in module ida_dbg: + +request_disable_insn_trace(*args) -> 'bool' + request_disable_insn_trace() -> bool + +Help on function request_disable_step_trace in module ida_dbg: + +request_disable_step_trace(*args) -> 'bool' + request_disable_step_trace() -> bool + +Help on function request_enable_bblk_trace in module ida_dbg: + +request_enable_bblk_trace(*args) -> 'bool' + request_enable_bblk_trace(enable=True) -> bool + +Help on function request_enable_bpt in module ida_dbg: + +request_enable_bpt(*args) -> 'bool' + request_enable_bpt(ea, enable=True) -> bool + request_enable_bpt(bptloc, enable=True) -> bool + +Help on function request_enable_func_trace in module ida_dbg: + +request_enable_func_trace(*args) -> 'bool' + request_enable_func_trace(enable=True) -> bool + +Help on function request_enable_insn_trace in module ida_dbg: + +request_enable_insn_trace(*args) -> 'bool' + request_enable_insn_trace(enable=True) -> bool + +Help on function request_enable_step_trace in module ida_dbg: + +request_enable_step_trace(*args) -> 'bool' + request_enable_step_trace(enable=True) -> bool + +Help on function request_exit_process in module ida_dbg: + +request_exit_process(*args) -> 'bool' + request_exit_process() -> bool + + + Post an 'exit_process()' request. + +Help on function request_resume_thread in module ida_dbg: + +request_resume_thread(*args) -> 'int' + request_resume_thread(tid) -> int + + + Post a 'resume_thread()' request. + + + @param tid (C++: thid_t) + +Help on function request_run_to in module ida_dbg: + +request_run_to(*args) -> 'bool' + request_run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Post a 'run_to()' request. + + + @param ea (C++: ea_t) + @param pid (C++: pid_t) + @param tid (C++: thid_t) + +Help on function request_select_thread in module ida_dbg: + +request_select_thread(*args) -> 'bool' + request_select_thread(tid) -> bool + + + Post a 'select_thread()' request. + + + @param tid (C++: thid_t) + +Help on function request_set_bblk_trace_options in module ida_dbg: + +request_set_bblk_trace_options(*args) -> 'void' + request_set_bblk_trace_options(options) + + + Post a 'set_bblk_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_func_trace_options in module ida_dbg: + +request_set_func_trace_options(*args) -> 'void' + request_set_func_trace_options(options) + + + Post a 'set_func_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_insn_trace_options in module ida_dbg: + +request_set_insn_trace_options(*args) -> 'void' + request_set_insn_trace_options(options) + + + Post a 'set_insn_trace_options()' request. + + + @param options (C++: int) + +Help on function request_set_reg_val in module ida_dbg: + +request_set_reg_val(*args) -> 'PyObject *' + request_set_reg_val(regname, o) -> PyObject * + + + Post a 'set_reg_val()' request. + + + @param regname (C++: const char *) + +Help on function request_set_resume_mode in module ida_dbg: + +request_set_resume_mode(*args) -> 'bool' + request_set_resume_mode(tid, mode) -> bool + + + Post a 'set_resume_mode()' request. + + + @param tid (C++: thid_t) + @param mode (C++: resume_mode_t) + +Help on function request_set_step_trace_options in module ida_dbg: + +request_set_step_trace_options(*args) -> 'void' + request_set_step_trace_options(options) + + + Post a 'set_step_trace_options()' request. + + + @param options (C++: int) + +Help on function request_start_process in module ida_dbg: + +request_start_process(*args) -> 'int' + request_start_process(path=None, args=None, sdir=None) -> int + + + Post a 'start_process()' request. + + + @param path (C++: const char *) + @param args (C++: const char *) + @param sdir (C++: const char *) + +Help on function request_step_into in module ida_dbg: + +request_step_into(*args) -> 'bool' + request_step_into() -> bool + + + Post a 'step_into()' request. + +Help on function request_step_over in module ida_dbg: + +request_step_over(*args) -> 'bool' + request_step_over() -> bool + + + Post a 'step_over()' request. + +Help on function request_step_until_ret in module ida_dbg: + +request_step_until_ret(*args) -> 'bool' + request_step_until_ret() -> bool + + + Post a 'step_until_ret()' request. + +Help on function request_suspend_process in module ida_dbg: + +request_suspend_process(*args) -> 'bool' + request_suspend_process() -> bool + + + Post a 'suspend_process()' request. + +Help on function request_suspend_thread in module ida_dbg: + +request_suspend_thread(*args) -> 'int' + request_suspend_thread(tid) -> int + + + Post a 'suspend_thread()' request. + + + @param tid (C++: thid_t) + +Help on function resume_thread in module ida_dbg: + +resume_thread(*args) -> 'int' + resume_thread(tid) -> int + + + Resume thread. \sq{Type, Synchronous function - available as request, + Notification, none (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function retrieve_exceptions in module ida_dbg: + +retrieve_exceptions(*args) -> 'excvec_t *' + retrieve_exceptions() -> excvec_t + + + Retrieve the exception information. You may freely modify the returned + vector and add/edit/delete exceptions You must call + 'store_exceptions()' after any modifications Note: exceptions with + code zero, multiple exception codes or names are prohibited + +Help on function run_requests in module ida_dbg: + +run_requests(*args) -> 'bool' + run_requests() -> bool + + + Execute requests until all requests are processed or an asynchronous + function is called. \sq{Type, Synchronous function, Notification, none + (synchronous function)}If called from a notification handler, the + execution of requests will be postponed to the end of the execution of + all notification handlers. + + @return: false if not all requests could be processed (indicates an + asynchronous function was started) + +Help on function run_to in module ida_dbg: + +run_to(*args) -> 'bool' + run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Execute the process until the given address is reached. If no process + is active, a new process is started. Technically, the debugger sets up + a temporary breakpoint at the given address, and continues (or starts) + the execution of the whole process. So, all threads continue their + execution! \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_run_to' } + + @param ea: target address (C++: ea_t) + @param pid: not used yet. please do not specify this parameter. (C++: + pid_t) + @param tid: not used yet. please do not specify this parameter. (C++: + thid_t) + +Help on function save_trace_file in module ida_dbg: + +save_trace_file(*args) -> 'bool' + save_trace_file(filename, description) -> bool + + + Save the current trace in the specified file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function select_thread in module ida_dbg: + +select_thread(*args) -> 'bool' + select_thread(tid) -> bool + + + Select the given thread as the current debugged thread. All thread + related execution functions will work on this thread. The process must + be suspended to select a new thread. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param tid: ID of the thread to select (C++: thid_t) + @return: false if the thread doesn't exist. + +Help on function send_dbg_command in module ida_dbg: + +send_dbg_command(command) + Send a direct command to the debugger backend, and + retrieve the result as a string. + + Note: any double-quotes in 'command' must be backslash-escaped. + Note: this only works with some debugger backends: Bochs, WinDbg, GDB. + + Returns: (True, ) on success, or (False, ) on failure + +Help on function set_bblk_trace_options in module ida_dbg: + +set_bblk_trace_options(*args) -> 'void' + set_bblk_trace_options(options) + + + Modify basic block tracing options (see 'BT_LOG_INSTS' ) + + + @param options (C++: int) + +Help on function set_bpt_group in module ida_dbg: + +set_bpt_group(*args) -> 'void' + set_bpt_group(bpt, grp_name) + +Help on function set_bptloc_group in module ida_dbg: + +set_bptloc_group(*args) -> 'bool' + set_bptloc_group(bptloc, grp_name) -> bool + +Help on function set_bptloc_string in module ida_dbg: + +set_bptloc_string(*args) -> 'int' + set_bptloc_string(s) -> int + + + Helper function for 'bpt_location_t' . + + + @param s (C++: const char *) + +Help on function set_debugger_event_cond in module ida_dbg: + +set_debugger_event_cond(*args) -> 'void' + set_debugger_event_cond(nonnul_cond) + +Help on function set_debugger_options in module ida_dbg: + +set_debugger_options(*args) -> 'uint' + set_debugger_options(options) -> uint + + + Set debugger options. Replaces debugger options with the specification + combination 'Debugger options' + + @param options (C++: uint) + @return: the old debugger options + +Help on function set_func_trace_options in module ida_dbg: + +set_func_trace_options(*args) -> 'void' + set_func_trace_options(options) + + + Modify function tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_highlight_trace_options in module ida_dbg: + +set_highlight_trace_options(*args) -> 'void' + set_highlight_trace_options(hilight, color, diff) + + + Set highlight trace parameters. + + + @param hilight (C++: bool) + @param color (C++: bgcolor_t) + @param diff (C++: bgcolor_t) + +Help on function set_insn_trace_options in module ida_dbg: + +set_insn_trace_options(*args) -> 'void' + set_insn_trace_options(options) + + + Modify instruction tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_manual_regions in module ida_dbg: + +set_manual_regions(*args) -> 'void' + set_manual_regions(ranges) + +Help on function set_process_options in module ida_dbg: + +set_process_options(*args) -> 'void' + set_process_options(path, args, sdir, host, _pass, port) + + + Set process options. Any of the arguments may be NULL, which means 'do + not modify' + + @param path (C++: const char *) + @param args (C++: const char *) + @param sdir (C++: const char *) + @param host (C++: const char *) + @param port (C++: int) + +Help on function set_process_state in module ida_dbg: + +set_process_state(*args) -> 'int' + set_process_state(newstate, p_thid, dbginv) -> int + + + Set new state for the debugged process. Notifies the IDA kernel about + the change of the debugged process state. For example, a debugger + module could call this function when it knows that the process is + suspended for a short period of time. Some IDA API calls can be made + only when the process is suspended. The process state is usually + restored before returning control to the caller. You must know that it + is ok to change the process state, doing it at arbitrary moments may + crash the application or IDA. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @param newstate: new process state (one of Debugged process states ) + if DSTATE_NOTASK is passed then the state is not + changed (C++: int) + @param p_thid: ptr to new thread id. may be NULL or pointer to + NO_THREAD . the pointed variable will contain the old + thread id upon return (C++: thid_t *) + @param dbginv: Debugged process invalidation options (C++: int) + @return: old debugger state (one of Debugged process states ) + +Help on function set_reg_val in module ida_dbg: + +set_reg_val(*args) -> 'PyObject *' + set_reg_val(regname, o) -> PyObject + set_reg_val(tid, regidx, o) -> PyObject * + + + Write a register value to the current thread. \sq{Type, Synchronous + function - available as Request, Notification, none (synchronous + function)} + + @param regname (C++: const char *) + +Help on function set_remote_debugger in module ida_dbg: + +set_remote_debugger(*args) -> 'void' + set_remote_debugger(host, _pass, port=-1) + + + Set remote debugging options. Should be used before starting the + debugger. + + @param host: If empty, IDA will use local debugger. If NULL, the host + will not be set. (C++: const char *) + @param port: If -1, the default port number will be used (C++: int) + +Help on function set_resume_mode in module ida_dbg: + +set_resume_mode(*args) -> 'bool' + set_resume_mode(tid, mode) -> bool + + + How to resume the application. Set resume mode but do not resume + process. + + @param tid (C++: thid_t) + @param mode (C++: resume_mode_t) + +Help on function set_step_trace_options in module ida_dbg: + +set_step_trace_options(*args) -> 'void' + set_step_trace_options(options) + + + Modify step tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function set_trace_base_address in module ida_dbg: + +set_trace_base_address(*args) -> 'void' + set_trace_base_address(ea) + + + Set the base address of the current trace. \sq{Type, Synchronous + function, Notification, none (synchronous function)} + + @param ea (C++: ea_t) + +Help on function set_trace_file_desc in module ida_dbg: + +set_trace_file_desc(*args) -> 'bool' + set_trace_file_desc(filename, description) -> bool + + + Change the description of the specified trace file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function set_trace_platform in module ida_dbg: + +set_trace_platform(*args) -> 'void' + set_trace_platform(platform) + + + Set platform name of current trace. + + + @param platform (C++: const char *) + +Help on function set_trace_size in module ida_dbg: + +set_trace_size(*args) -> 'bool' + set_trace_size(size) -> bool + + + Specify the new size of the circular buffer. \sq{Type, Synchronous + function, Notification, none (synchronous function)}If you specify 0, + all available memory can be quickly used !!! + + @param size: if 0, buffer isn't circular and events are never removed. + If the new size is smaller than the existing number of + trace events, a corresponding number of trace events are + removed. (C++: int) + +Help on function srcdbg_request_step_into in module ida_dbg: + +srcdbg_request_step_into(*args) -> 'bool' + srcdbg_request_step_into() -> bool + +Help on function srcdbg_request_step_over in module ida_dbg: + +srcdbg_request_step_over(*args) -> 'bool' + srcdbg_request_step_over() -> bool + +Help on function srcdbg_request_step_until_ret in module ida_dbg: + +srcdbg_request_step_until_ret(*args) -> 'bool' + srcdbg_request_step_until_ret() -> bool + +Help on function srcdbg_step_into in module ida_dbg: + +srcdbg_step_into(*args) -> 'bool' + srcdbg_step_into() -> bool + +Help on function srcdbg_step_over in module ida_dbg: + +srcdbg_step_over(*args) -> 'bool' + srcdbg_step_over() -> bool + +Help on function srcdbg_step_until_ret in module ida_dbg: + +srcdbg_step_until_ret(*args) -> 'bool' + srcdbg_step_until_ret() -> bool + +Help on function start_process in module ida_dbg: + +start_process(*args) -> 'int' + start_process(path=None, args=None, sdir=None) -> int + + + Start a process in the debugger. \sq{Type, Asynchronous function - + available as Request, Notification, 'dbg_process_start' }You can also + use the 'run_to()' function to easily start the execution of a process + until a given address is reached.For all parameters, a NULL value + indicates the debugger will take the value from the defined Process + Options. + + @param path: path to the executable to start (C++: const char *) + @param args: arguments to pass to process (C++: const char *) + @param sdir: starting directory for the process (C++: const char *) + +Help on function step_into in module ida_dbg: + +step_into(*args) -> 'bool' + step_into() -> bool + + + Execute one instruction in the current thread. Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_into' } + +Help on function step_over in module ida_dbg: + +step_over(*args) -> 'bool' + step_over() -> bool + + + Execute one instruction in the current thread, but without entering + into functions. Others threads keep suspended. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_step_over' } + +Help on function step_until_ret in module ida_dbg: + +step_until_ret(*args) -> 'bool' + step_until_ret() -> bool + + + Execute instructions in the current thread until a function return + instruction is executed (aka "step out"). Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_until_ret' } + +Help on function store_exceptions in module ida_dbg: + +store_exceptions(*args) -> 'bool' + store_exceptions() -> bool + + + Update the exception information stored in the debugger module by + invoking its dbg->set_exception_info callback + +Help on function suspend_process in module ida_dbg: + +suspend_process(*args) -> 'bool' + suspend_process() -> bool + + + Suspend the process in the debugger. \sq{ Type,Synchronous function + (if in a notification handler)Asynchronous function (everywhere + else)available as Request, Notification,none (if in a notification + handler) 'dbg_suspend_process' (everywhere else) }The + 'suspend_process()' function can be called from a notification handler + to force the stopping of the process. In this case, no notification + will be generated. When you suspend a process, the running command is + always aborted. + +Help on function suspend_thread in module ida_dbg: + +suspend_thread(*args) -> 'int' + suspend_thread(tid) -> int + + + Suspend thread. Suspending a thread may deadlock the whole application + if the suspended was owning some synchronization objects. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on class tev_info_reg_t in module ida_dbg: + +class tev_info_reg_t(builtins.object) + | Proxy of C++ tev_info_reg_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tev_info_reg_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_tev_info_reg_t(...) + | delete_tev_info_reg_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | info + | tev_info_reg_t_info_get(self) -> tev_info_t + | + | registers + | tev_info_reg_t_registers_get(self) -> tev_reg_values_t + | + | thisown + | The membership flag + +Help on class tev_info_t in module ida_dbg: + +class tev_info_t(builtins.object) + | Proxy of C++ tev_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tev_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_tev_info_t(...) + | delete_tev_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | tev_info_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | tid + | tev_info_t_tid_get(self) -> thid_t + | + | type + | tev_info_t_type_get(self) -> tev_type_t + +Help on class tev_reg_value_t in module ida_dbg: + +class tev_reg_value_t(builtins.object) + | Proxy of C++ tev_reg_value_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _reg_idx=-1, _value=uint64(-1)) -> tev_reg_value_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_tev_reg_value_t(...) + | delete_tev_reg_value_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | reg_idx + | tev_reg_value_t_reg_idx_get(self) -> int + | + | thisown + | The membership flag + | + | value + | tev_reg_value_t_value_get(self) -> regval_t + +Help on class tev_reg_values_t in module ida_dbg: + +class tev_reg_values_t(builtins.object) + | Proxy of C++ qvector< tev_reg_value_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'tev_reg_value_t const &' + | __getitem__(self, i) -> tev_reg_value_t + | + | __init__(self, *args) + | __init__(self) -> tev_reg_values_t + | __init__(self, x) -> tev_reg_values_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_tev_reg_values_t(...) + | delete_tev_reg_values_t(self) + | + | at(self, *args) -> 'tev_reg_value_t const &' + | at(self, _idx) -> tev_reg_value_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< tev_reg_value_t >::const_iterator' + | begin(self) -> tev_reg_value_t + | begin(self) -> tev_reg_value_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< tev_reg_value_t >::const_iterator' + | end(self) -> tev_reg_value_t + | end(self) -> tev_reg_value_t + | + | erase(self, *args) -> 'qvector< tev_reg_value_t >::iterator' + | erase(self, it) -> tev_reg_value_t + | erase(self, first, last) -> tev_reg_value_t + | + | extract(self, *args) -> 'tev_reg_value_t *' + | extract(self) -> tev_reg_value_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=tev_reg_value_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< tev_reg_value_t >::iterator' + | insert(self, it, x) -> tev_reg_value_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'tev_reg_value_t &' + | push_back(self, x) + | push_back(self) -> tev_reg_value_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class tevinforeg_vec_t in module ida_dbg: + +class tevinforeg_vec_t(builtins.object) + | Proxy of C++ qvector< tev_info_reg_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'tev_info_reg_t const &' + | __getitem__(self, i) -> tev_info_reg_t + | + | __init__(self, *args) + | __init__(self) -> tevinforeg_vec_t + | __init__(self, x) -> tevinforeg_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_tevinforeg_vec_t(...) + | delete_tevinforeg_vec_t(self) + | + | at(self, *args) -> 'tev_info_reg_t const &' + | at(self, _idx) -> tev_info_reg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< tev_info_reg_t >::const_iterator' + | begin(self) -> tev_info_reg_t + | begin(self) -> tev_info_reg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< tev_info_reg_t >::const_iterator' + | end(self) -> tev_info_reg_t + | end(self) -> tev_info_reg_t + | + | erase(self, *args) -> 'qvector< tev_info_reg_t >::iterator' + | erase(self, it) -> tev_info_reg_t + | erase(self, first, last) -> tev_info_reg_t + | + | extract(self, *args) -> 'tev_info_reg_t *' + | extract(self) -> tev_info_reg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=tev_info_reg_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< tev_info_reg_t >::iterator' + | insert(self, it, x) -> tev_info_reg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'tev_info_reg_t &' + | push_back(self, x) + | push_back(self) -> tev_info_reg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function update_bpt in module ida_dbg: + +update_bpt(*args) -> 'bool' + update_bpt(bpt) -> bool + + + Update modifiable characteristics of an existing breakpoint. To update + the breakpoint location, use 'change_bptlocs()' \sq{Type, Synchronous + function, Notification, none (synchronous function)}Only the following + fields can be modified: 'bpt_t::cndbody' 'bpt_t::pass_count' + 'bpt_t::flags' 'bpt_t::size' 'bpt_t::type' Changing some properties + will require removing and then re-adding the breakpoint to the process + memory (or the debugger backend), which can lead to race conditions + (i.e., breakpoint(s) can be missed) in case the process is not + suspended. Here are a list of scenarios that will require the + breakpoint to be removed & then re-added: 'bpt_t::size' is modified + 'bpt_t::type' is modified 'bpt_t::flags' 's BPT_ENABLED is modified + 'bpt_t::flags' 's BPT_LOWCND is changed 'bpt_t::flags' 's BPT_LOWCND + remains set, but cndbody changed + + @param bpt (C++: const bpt_t *) + +Help on function wait_for_next_event in module ida_dbg: + +wait_for_next_event(*args) -> 'dbg_event_code_t' + wait_for_next_event(wfne, timeout) -> dbg_event_code_t + + + Wait for the next event.This function (optionally) resumes the process + execution, and waits for a debugger event until a possible timeout + occurs. + + @param wfne: combination of Wait for debugger event flags constants + (C++: int) + @param timeout: number of seconds to wait, -1-infinity (C++: int) + @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= + 0) + +Help on function write_dbg_memory in module ida_dbg: + +write_dbg_memory(*args) -> 'ssize_t' + write_dbg_memory(ea, py_buf, size=size_t(-1)) -> ssize_t + +=== ida_dbg EPYDOC INJECTIONS === +ida_dbg.BKPT_ACTIVE +""" +active? +""" + +ida_dbg.BKPT_BADBPT +""" +failed to write the bpt to the process memory (at least one location) +""" + +ida_dbg.BKPT_CNDREADY +""" +condition has been compiled +""" + +ida_dbg.BKPT_FAKEPEND +""" +bpt of the same type is active at the same address(es) + +fake pending bpt: it is inactive but another +""" + +ida_dbg.BKPT_LISTBPT +""" +include in bpt list (user-defined bpt) +""" + +ida_dbg.BKPT_PAGE +""" +only after writing the bpt to the process. + +written to the process as a page bpt. is available +""" + +ida_dbg.BKPT_PARTIAL +""" +partially active? (some locations were not written yet) +""" + +ida_dbg.BKPT_TRACE +""" +trace bpt; should not be deleted when the process gets suspended +""" + +ida_dbg.BPTCK_ACT +""" +breakpoint is active (written to the process) +""" + +ida_dbg.BPTCK_NO +""" +breakpoint is disabled +""" + +ida_dbg.BPTCK_NONE +""" +breakpoint does not exist +""" + +ida_dbg.BPTCK_YES +""" +breakpoint is enabled +""" + +ida_dbg.BPTEV_ADDED +""" +Breakpoint has been added. +""" + +ida_dbg.BPTEV_CHANGED +""" +Breakpoint has been modified. +""" + +ida_dbg.BPTEV_REMOVED +""" +Breakpoint has been removed. +""" + +ida_dbg.BPT_BRK +""" +suspend execution upon hit +""" + +ida_dbg.BPT_ELANG_SHIFT +""" +index of the extlang (scripting language) of the condition +""" + +ida_dbg.BPT_ENABLED +""" +enabled? +""" + +ida_dbg.BPT_LOWCND +""" +condition is calculated at low level (on the server side) +""" + +ida_dbg.BPT_TRACE +""" +add trace information upon hit +""" + +ida_dbg.BPT_TRACEON +""" +enable tracing when the breakpoint is reached +""" + +ida_dbg.BPT_TRACE_BBLK +""" +basic block tracing +""" + +ida_dbg.BPT_TRACE_FUNC +""" +function tracing +""" + +ida_dbg.BPT_TRACE_INSN +""" +instruction tracing +""" + +ida_dbg.BPT_TRACE_TYPES +""" +trace insns, functions, and basic blocks. if any of 'BPT_TRACE_TYPES' +bits are set but 'BPT_TRACEON' is clear, then turn off tracing for the +specified trace types +""" + +ida_dbg.BPT_UPDMEM +""" +refresh the memory layout and contents before evaluating bpt condition +""" + +ida_dbg.BT_LOG_INSTS +""" +log all instructions in the current basic block +""" + +ida_dbg.DBGINV_ALL +""" +invalidate everything +""" + +ida_dbg.DBGINV_MEMCFG +""" +invalidate cached process segmentation +""" + +ida_dbg.DBGINV_MEMORY +""" +invalidate cached memory contents +""" + +ida_dbg.DBGINV_NONE +""" +invalidate nothing +""" + +ida_dbg.DBGINV_REDRAW +""" +refresh the screen +""" + +ida_dbg.DBGINV_REGS +""" +invalidate cached register values +""" + +ida_dbg.DOPT_BPT_MSGS +""" +log breakpoints +""" + +ida_dbg.DOPT_END_BPT +""" +evaluate event condition on process end +""" + +ida_dbg.DOPT_ENTRY_BPT +""" +break on program entry point +""" + +ida_dbg.DOPT_EXCDLG +""" +exception dialogs: +""" + +ida_dbg.DOPT_INFO_BPT +""" +break on debugging information +""" + +ida_dbg.DOPT_INFO_MSGS +""" +log debugging info events +""" + +ida_dbg.DOPT_LIB_BPT +""" +break on library load/unload +""" + +ida_dbg.DOPT_LIB_MSGS +""" +log library loads/unloads +""" + +ida_dbg.DOPT_LOAD_DINFO +""" +automatically load debug files (pdb) +""" + +ida_dbg.DOPT_REAL_MEMORY +""" +do not hide breakpoint instructions +""" + +ida_dbg.DOPT_REDO_STACK +""" +reconstruct the stack +""" + +ida_dbg.DOPT_SEGM_MSGS +""" +log debugger segments modifications +""" + +ida_dbg.DOPT_START_BPT +""" +break on process start +""" + +ida_dbg.DOPT_TEMP_HWBPT +""" +when possible use hardware bpts for temp bpts +""" + +ida_dbg.DOPT_THREAD_BPT +""" +break on thread start/exit +""" + +ida_dbg.DOPT_THREAD_MSGS +""" +log thread starts/exits +""" + +ida_dbg.DSTATE_NOTASK +""" +no process is currently debugged +""" + +ida_dbg.DSTATE_RUN +""" +process is running +""" + +ida_dbg.DSTATE_SUSP +""" +process is suspended and will not continue +""" + +ida_dbg.EXCDLG_ALWAYS +""" +always display +""" + +ida_dbg.EXCDLG_NEVER +""" +never display exception dialogs +""" + +ida_dbg.EXCDLG_UNKNOWN +""" +display for unknown exceptions +""" + +ida_dbg.FT_LOG_RET +""" +function tracing will log returning instructions +""" + +ida_dbg.IT_LOG_SAME_IP +""" +instruction tracing will log instructions whose IP doesn't change +""" + +ida_dbg.ST_ALREADY_LOGGED +""" +step tracing will be disabled when IP is already logged +""" + +ida_dbg.ST_DIFFERENTIAL +""" +tracing: log only new instructions +""" + +ida_dbg.ST_OPTIONS_MASK +""" +mask of available options, to ensure compatibility with newer IDA +versions +""" + +ida_dbg.ST_OVER_DEBUG_SEG +""" +step tracing will be disabled when IP is in a debugger segment +""" + +ida_dbg.ST_OVER_LIB_FUNC +""" +step tracing will be disabled when IP is in a library function +""" + +ida_dbg.ST_SKIP_LOOPS +""" +step tracing will try to skip loops already recorded +""" + +ida_dbg.WFNE_ANY +""" +return the first event (even if it doesn't suspend the process) +""" + +ida_dbg.WFNE_CONT +""" +continue from the suspended state +""" + +ida_dbg.WFNE_NOWAIT +""" +(to be used with 'WFNE_CONT' ) + +do not wait for any event, immediately return 'DEC_TIMEOUT' +""" + +ida_dbg.WFNE_SILENT +""" +1: be slient, 0:display modal boxes if necessary +""" + +ida_dbg.WFNE_SUSP +""" +wait until the process gets suspended +""" + +ida_dbg.WFNE_USEC +""" +(minimum non-zero timeout is 40000us) + +timeout is specified in microseconds +""" +=== ida_dbg EPYDOC INJECTIONS END === +Help on function close_linput in module ida_diskio: + +close_linput(*args) -> 'void' + close_linput(li) + + + Close loader input. + + + @param li (C++: linput_t *) + +Help on function create_bytearray_linput in module ida_diskio: + +create_bytearray_linput(*args) -> 'linput_t *' + create_bytearray_linput(s) -> linput_t * + + + Trivial memory linput. + +Help on function create_generic_linput in module ida_diskio: + +create_generic_linput(*args) -> 'linput_t *' + create_generic_linput(gl) -> linput_t * + + + Create a generic linput + + @param gl: linput description. this object will be destroyed by + close_linput() using "delete gl;" (C++: generic_linput_t + *) + +Help on function create_memory_linput in module ida_diskio: + +create_memory_linput(*args) -> 'linput_t *' + create_memory_linput(start, size) -> linput_t * + + + Create a linput for process memory. This linput will use + read_dbg_memory() to read data. + + @param start: starting address of the input (C++: ea_t) + @param size: size of the memory area to represent as linput if + unknown, may be passed as 0 (C++: asize_t) + +Help on function eclose in module ida_diskio: + +eclose(*args) -> 'void' + eclose(fp) + +Help on function enumerate_files in module ida_diskio: + +enumerate_files(*args) -> 'PyObject *' + enumerate_files(path, fname, callback) -> PyObject * + + + Enumerate files in the specified directory while the callback returns 0. + @param path: directory to enumerate files in + @param fname: mask of file names to enumerate + @param callback: a callable object that takes the filename as + its first argument and it returns 0 to continue + enumeration or non-zero to stop enumeration. + @return: + None in case of script errors + tuple(code, fname) : If the callback returns non-zero + +Help on function fopenA in module ida_diskio: + +fopenA(*args) -> 'FILE *' + fopenA(file) -> FILE * + + + Open a file for append in text mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenM in module ida_diskio: + +fopenM(*args) -> 'FILE *' + fopenM(file) -> FILE * + + + Open a file for read/write in binary mode, deny write. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenRB in module ida_diskio: + +fopenRB(*args) -> 'FILE *' + fopenRB(file) -> FILE * + + + Open a file for read in binary mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenRT in module ida_diskio: + +fopenRT(*args) -> 'FILE *' + fopenRT(file) -> FILE * + + + Open a file for read in text mode, deny none. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenWB in module ida_diskio: + +fopenWB(*args) -> 'FILE *' + fopenWB(file) -> FILE * + + + Open a new file for write in binary mode, deny read/write. If a file + exists, it will be removed. + + @param file (C++: const char *) + @return: NULL if failure + +Help on function fopenWT in module ida_diskio: + +fopenWT(*args) -> 'FILE *' + fopenWT(file) -> FILE * + + + Open a new file for write in text mode, deny write. If a file exists, + it will be removed. + + @param file (C++: const char *) + @return: NULL if failure + +Help on class generic_linput_t in module ida_diskio: + +class generic_linput_t(builtins.object) + | Proxy of C++ generic_linput_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_generic_linput_t(...) + | delete_generic_linput_t(self) + | + | read(self, *args) -> 'ssize_t' + | read(self, off, buffer, nbytes) -> ssize_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blocksize + | generic_linput_t_blocksize_get(self) -> uint32 + | + | filesize + | generic_linput_t_filesize_get(self) -> uint64 + | + | thisown + | The membership flag + +Help on function get_ida_subdirs in module ida_diskio: + +get_ida_subdirs(*args) -> 'qstrvec_t *' + get_ida_subdirs(subdir, flags=0) -> int + + + Get list of directories in which to find a specific IDA resource (see + 'IDA subdirectories' ). The order of the resulting list is as follows: + + - [$IDAUSR/subdir (0..N entries)] + - $IDADIR/subdir + + @param subdir: name of the resource to list (C++: const char *) + @param flags: Subdirectory modification flags bits (C++: int) + @return: number of directories appended to 'dirs' + +Help on function get_linput_type in module ida_diskio: + +get_linput_type(*args) -> 'linput_type_t' + get_linput_type(li) -> linput_type_t + + + Get linput type. + + + @param li (C++: linput_t *) + +Help on function get_special_folder in module ida_diskio: + +get_special_folder(*args) -> 'size_t' + get_special_folder(csidl) -> str + + + Get a folder location by CSIDL (see 'Common CSIDLs' ). Path should be + of at least MAX_PATH size + + @param csidl (C++: int) + +Help on function get_user_idadir in module ida_diskio: + +get_user_idadir(*args) -> 'char const *' + get_user_idadir() -> char const * + + + Get user ida related directory. + + - if $IDAUSR is defined: + - the first element in $IDAUSR + - else + - default user directory ($HOME/.idapro or %APPDATA%Hex-Rays/IDA Pro) + +Help on function getsysfile in module ida_diskio: + +getsysfile(*args) -> 'char const *' + getsysfile(filename, subdir) -> str + + + Search for IDA system file. This function searches for a file in:each + directory specified by IDAUSR%ida directory [+ subdir] and returns the + first match. + + @param filename (C++: const char *) + @param subdir (C++: const char *) + @return: NULL if not found, otherwise a pointer to full file name. + +Help on function idadir in module ida_diskio: + +idadir(*args) -> 'char const *' + idadir(subdir) -> char const * + + + Get IDA directory (if subdir==NULL) or the specified subdirectory (see + 'IDA subdirectories' ) + + @param subdir (C++: const char *) + +Help on function open_linput in module ida_diskio: + +open_linput(*args) -> 'linput_t *' + open_linput(file, remote) -> linput_t * + + + Open loader input. + + + @param file (C++: const char *) + @param remote (C++: bool) + +Help on function qlgetz in module ida_diskio: + +qlgetz(*args) -> 'size_t' + qlgetz(li, fpos) -> str + + + Read a zero-terminated string from the input. If fpos == -1 then no + seek will be performed. + + @param li (C++: linput_t *) + @param fpos (C++: int64) + +=== ida_diskio EPYDOC INJECTIONS === +ida_diskio.IDA_SUBDIR_IDADIR_FIRST +""" +$IDADIR/subdir will be first, not last +""" + +ida_diskio.IDA_SUBDIR_IDP +""" +append the processor name as a subdirectory +""" + +ida_diskio.IDA_SUBDIR_ONLY_EXISTING +""" +only existing directories will be present +""" +=== ida_diskio EPYDOC INJECTIONS END === +Help on function add_entry in module ida_entry: + +add_entry(*args) -> 'bool' + add_entry(ord, ea, name, makecode, flags=0) -> bool + + + Add an entry point to the list of entry points. + + @param ord: ordinal number if ordinal number is equal to 'ea' then + ordinal is not used (C++: uval_t) + @param ea: linear address (C++: ea_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to the regular + comment. If name == NULL, then the old name will be + retained. (C++: const char *) + @param makecode: should the kernel convert bytes at the entry point to + instruction(s) (C++: bool) + @param flags: See AEF_* (C++: int) + @return: success (currently always true) + +Help on function get_entry in module ida_entry: + +get_entry(*args) -> 'ea_t' + get_entry(ord) -> ea_t + + + Get entry point address by its ordinal + + @param ord: ordinal number of entry point (C++: uval_t) + @return: address or BADADDR + +Help on function get_entry_forwarder in module ida_entry: + +get_entry_forwarder(*args) -> 'qstring *' + get_entry_forwarder(ord) -> str + + + Get forwarder name for the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry forwarder name or -1 + +Help on function get_entry_name in module ida_entry: + +get_entry_name(*args) -> 'qstring *' + get_entry_name(ord) -> str + + + Get name of the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry name or -1 + +Help on function get_entry_ordinal in module ida_entry: + +get_entry_ordinal(*args) -> 'uval_t' + get_entry_ordinal(idx) -> uval_t + + + Get ordinal number of an entry point. + + @param idx: internal number of entry point. Should be in the range 0.. + get_entry_qty() -1 (C++: size_t) + @return: ordinal number or 0. + +Help on function get_entry_qty in module ida_entry: + +get_entry_qty(*args) -> 'size_t' + get_entry_qty() -> size_t + + + Get number of entry points. + +Help on function rename_entry in module ida_entry: + +rename_entry(*args) -> 'bool' + rename_entry(ord, name, flags=0) -> bool + + + Rename entry point. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to a repeatable + comment. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +Help on function set_entry_forwarder in module ida_entry: + +set_entry_forwarder(*args) -> 'bool' + set_entry_forwarder(ord, name, flags=0) -> bool + + + Set forwarder name for ordinal. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: forwarder name for entry point. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +=== ida_entry EPYDOC INJECTIONS === +ida_entry.AEF_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly Specifying AEF_IDBENC also implies AEF_NODUMMY +""" + +ida_entry.AEF_NODUMMY +""" +it begins with a dummy suffix. See also AEF_IDBENC + +automatically prepend the name with '_' if +""" + +ida_entry.AEF_UTF8 +""" +the name is given in UTF-8 (default) +""" +=== ida_entry EPYDOC INJECTIONS END === +Help on function add_enum in module ida_enum: + +add_enum(*args) -> 'enum_t' + add_enum(idx, name, flag) -> enum_t + + + Add new enum type.if idx== 'BADADDR' then add as the last idxif + name==NULL then generate a unique name "enum_%d" + + @param idx (C++: size_t) + @param name (C++: const char *) + @param flag (C++: flags_t) + +Help on function add_enum_member in module ida_enum: + +add_enum_member(*args) -> 'int' + add_enum_member(id, name, value, bmask=(bmask_t(-1))) -> int + + + Add member to enum type. + + @param id (C++: enum_t) + @param name (C++: const char *) + @param value (C++: uval_t) + @param bmask (C++: bmask_t) + @return: 0 if ok, otherwise one of Add enum member result codes + +Help on function del_enum in module ida_enum: + +del_enum(*args) -> 'void' + del_enum(id) + + + Delete an enum type. + + + @param id (C++: enum_t) + +Help on function del_enum_member in module ida_enum: + +del_enum_member(*args) -> 'bool' + del_enum_member(id, value, serial, bmask) -> bool + + + Delete member of enum type. + + + @param id (C++: enum_t) + @param value (C++: uval_t) + @param serial (C++: uchar) + @param bmask (C++: bmask_t) + +Help on class enum_member_visitor_t in module ida_enum: + +class enum_member_visitor_t(builtins.object) + | Proxy of C++ enum_member_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> enum_member_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_enum_member_visitor_t(...) + | delete_enum_member_visitor_t(self) + | + | visit_enum_member(self, *args) -> 'int' + | visit_enum_member(self, cid, value) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function for_all_enum_members in module ida_enum: + +for_all_enum_members(*args) -> 'int' + for_all_enum_members(id, cv) -> int + + + Visit all members of a given enum. + + + @param id (C++: enum_t) + @param cv (C++: enum_member_visitor_t &) + +Help on function get_bmask_cmt in module ida_enum: + +get_bmask_cmt(*args) -> 'qstring *' + get_bmask_cmt(id, bmask, repeatable) -> str + +Help on function get_bmask_name in module ida_enum: + +get_bmask_name(*args) -> 'qstring *' + get_bmask_name(id, bmask) -> str + +Help on function get_enum in module ida_enum: + +get_enum(*args) -> 'enum_t' + get_enum(name) -> enum_t + + + Get enum by name. + + + @param name (C++: const char *) + +Help on function get_enum_cmt in module ida_enum: + +get_enum_cmt(*args) -> 'qstring *' + get_enum_cmt(id, repeatable) -> str + + + Get enum comment. + + + @param id (C++: enum_t) + @param repeatable (C++: bool) + +Help on function get_enum_flag in module ida_enum: + +get_enum_flag(*args) -> 'flags_t' + get_enum_flag(id) -> flags_t + + + Get flags determining the representation of the enum. (currently they + define the numeric base: octal, decimal, hex, bin) and signness. + + @param id (C++: enum_t) + +Help on function get_enum_idx in module ida_enum: + +get_enum_idx(*args) -> 'uval_t' + get_enum_idx(id) -> uval_t + + + Get serial number of enum. The serial number determines the place of + the enum in the enum window. + + @param id (C++: enum_t) + +Help on function get_enum_member in module ida_enum: + +get_enum_member(*args) -> 'const_t' + get_enum_member(id, value, serial, mask) -> const_t + + + Find an enum member by enum, value and bitmaskif serial -1, return a + member with any serial + + @param id (C++: enum_t) + @param value (C++: uval_t) + @param serial (C++: int) + @param mask (C++: bmask_t) + +Help on function get_enum_member_bmask in module ida_enum: + +get_enum_member_bmask(*args) -> 'bmask_t' + get_enum_member_bmask(id) -> bmask_t + + + Get bitmask of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_by_name in module ida_enum: + +get_enum_member_by_name(*args) -> 'const_t' + get_enum_member_by_name(name) -> const_t + + + Get a reference to an enum member by its name. + + + @param name (C++: const char *) + +Help on function get_enum_member_cmt in module ida_enum: + +get_enum_member_cmt(*args) -> 'qstring *' + get_enum_member_cmt(id, repeatable) -> str + + + Get enum member's comment. + + + @param id (C++: const_t) + @param repeatable (C++: bool) + +Help on function get_enum_member_enum in module ida_enum: + +get_enum_member_enum(*args) -> 'enum_t' + get_enum_member_enum(id) -> enum_t + + + Get the parent enum of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_name in module ida_enum: + +get_enum_member_name(*args) -> 'qstring *' + get_enum_member_name(id) -> str + + + Get name of an enum member by const_t. + + + @param id (C++: const_t) + +Help on function get_enum_member_serial in module ida_enum: + +get_enum_member_serial(*args) -> 'uchar' + get_enum_member_serial(cid) -> uchar + + + Get serial number of an enum member. + + + @param cid (C++: const_t) + +Help on function get_enum_member_value in module ida_enum: + +get_enum_member_value(*args) -> 'uval_t' + get_enum_member_value(id) -> uval_t + + + Get value of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_name in module ida_enum: + +get_enum_name(*args) -> 'qstring *' + get_enum_name(id) -> str + + + Get name of enum. + + + @param id (C++: enum_t) + +Help on function get_enum_name2 in module ida_enum: + +get_enum_name2(*args) -> 'qstring *' + get_enum_name2(id, flags=0) -> str + + + Get name of enum + + @param id: enum id (C++: enum_t) + @param flags: Enum name flags (C++: int) + +Help on function get_enum_qty in module ida_enum: + +get_enum_qty(*args) -> 'size_t' + get_enum_qty() -> size_t + + + Get number of declared 'enum_t' types. + +Help on function get_enum_size in module ida_enum: + +get_enum_size(*args) -> 'size_t' + get_enum_size(id) -> size_t + + + Get the number of the members of the enum. + + + @param id (C++: enum_t) + +Help on function get_enum_type_ordinal in module ida_enum: + +get_enum_type_ordinal(*args) -> 'int32' + get_enum_type_ordinal(id) -> int32 + + + Get corresponding type ordinal number. + + + @param id (C++: enum_t) + +Help on function get_enum_width in module ida_enum: + +get_enum_width(*args) -> 'size_t' + get_enum_width(id) -> size_t + + + Get the width of a enum element allowed values: 0 + (unspecified),1,2,4,8,16,32,64 + + @param id (C++: enum_t) + +Help on function get_first_bmask in module ida_enum: + +get_first_bmask(*args) -> 'bmask_t' + get_first_bmask(id) -> bmask_t + + + Get first bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the smallest bitmask for enum, or DEFMASK + +Help on function get_first_enum_member in module ida_enum: + +get_first_enum_member(*args) -> 'uval_t' + get_first_enum_member(id, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_first_serial_enum_member in module ida_enum: + +get_first_serial_enum_member(*args) -> 'uchar *' + get_first_serial_enum_member(id, value, bmask) -> const_t + +Help on function get_last_bmask in module ida_enum: + +get_last_bmask(*args) -> 'bmask_t' + get_last_bmask(id) -> bmask_t + + + Get last bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the biggest bitmask for enum, or DEFMASK + +Help on function get_last_enum_member in module ida_enum: + +get_last_enum_member(*args) -> 'uval_t' + get_last_enum_member(id, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_last_serial_enum_member in module ida_enum: + +get_last_serial_enum_member(*args) -> 'uchar *' + get_last_serial_enum_member(id, value, bmask) -> const_t + +Help on function get_next_bmask in module ida_enum: + +get_next_bmask(*args) -> 'bmask_t' + get_next_bmask(id, bmask) -> bmask_t + + + Get next bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value higher than the specified + value, or DEFMASK + +Help on function get_next_enum_member in module ida_enum: + +get_next_enum_member(*args) -> 'uval_t' + get_next_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_next_serial_enum_member in module ida_enum: + +get_next_serial_enum_member(*args) -> 'uchar *' + get_next_serial_enum_member(in_out_serial, first_cid) -> const_t + +Help on function get_prev_bmask in module ida_enum: + +get_prev_bmask(*args) -> 'bmask_t' + get_prev_bmask(id, bmask) -> bmask_t + + + Get prev bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value lower than the specified value, + or DEFMASK + +Help on function get_prev_enum_member in module ida_enum: + +get_prev_enum_member(*args) -> 'uval_t' + get_prev_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t + +Help on function get_prev_serial_enum_member in module ida_enum: + +get_prev_serial_enum_member(*args) -> 'uchar *' + get_prev_serial_enum_member(in_out_serial, first_cid) -> const_t + +Help on function getn_enum in module ida_enum: + +getn_enum(*args) -> 'enum_t' + getn_enum(n) -> enum_t + + + Get enum by its ordinal number (0..n). + + + @param n (C++: size_t) + +Help on function is_bf in module ida_enum: + +is_bf(*args) -> 'bool' + is_bf(id) -> bool + + + Is enum a bitfield? (otherwise - plain enum, no bitmasks except for + 'DEFMASK' are allowed) + + @param id (C++: enum_t) + +Help on function is_enum_fromtil in module ida_enum: + +is_enum_fromtil(*args) -> 'bool' + is_enum_fromtil(id) -> bool + + + Does enum come from type library? + + + @param id (C++: enum_t) + +Help on function is_enum_hidden in module ida_enum: + +is_enum_hidden(*args) -> 'bool' + is_enum_hidden(id) -> bool + + + Is enum collapsed? + + + @param id (C++: enum_t) + +Help on function is_ghost_enum in module ida_enum: + +is_ghost_enum(*args) -> 'bool' + is_ghost_enum(id) -> bool + + + Is a ghost copy of a local type? + + + @param id (C++: enum_t) + +Help on function is_one_bit_mask in module ida_enum: + +is_one_bit_mask(*args) -> 'bool' + is_one_bit_mask(mask) -> bool + + + Is bitmask one bit? + + + @param mask (C++: bmask_t) + +Help on function set_bmask_cmt in module ida_enum: + +set_bmask_cmt(*args) -> 'bool' + set_bmask_cmt(id, bmask, cmt, repeatable) -> bool + +Help on function set_bmask_name in module ida_enum: + +set_bmask_name(*args) -> 'bool' + set_bmask_name(id, bmask, name) -> bool + +Help on function set_enum_bf in module ida_enum: + +set_enum_bf(*args) -> 'bool' + set_enum_bf(id, bf) -> bool + + + Set 'bitfield' bit of enum (i.e. convert it to a bitfield) + + + @param id (C++: enum_t) + @param bf (C++: bool) + +Help on function set_enum_cmt in module ida_enum: + +set_enum_cmt(*args) -> 'bool' + set_enum_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum type. + + + @param id (C++: enum_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_flag in module ida_enum: + +set_enum_flag(*args) -> 'bool' + set_enum_flag(id, flag) -> bool + + + Set data representation flags. + + + @param id (C++: enum_t) + @param flag (C++: flags_t) + +Help on function set_enum_fromtil in module ida_enum: + +set_enum_fromtil(*args) -> 'bool' + set_enum_fromtil(id, fromtil) -> bool + + + Specify that enum comes from a type library. + + + @param id (C++: enum_t) + @param fromtil (C++: bool) + +Help on function set_enum_ghost in module ida_enum: + +set_enum_ghost(*args) -> 'bool' + set_enum_ghost(id, ghost) -> bool + + + Specify that enum is a ghost copy of a local type. + + + @param id (C++: enum_t) + @param ghost (C++: bool) + +Help on function set_enum_hidden in module ida_enum: + +set_enum_hidden(*args) -> 'bool' + set_enum_hidden(id, hidden) -> bool + + + Collapse enum. + + + @param id (C++: enum_t) + @param hidden (C++: bool) + +Help on function set_enum_idx in module ida_enum: + +set_enum_idx(*args) -> 'bool' + set_enum_idx(id, idx) -> bool + + + Set serial number of enum. Also see 'get_enum_idx()' . + + @param id (C++: enum_t) + @param idx (C++: size_t) + +Help on function set_enum_member_cmt in module ida_enum: + +set_enum_member_cmt(*args) -> 'bool' + set_enum_member_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum member. + + + @param id (C++: const_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_member_name in module ida_enum: + +set_enum_member_name(*args) -> 'bool' + set_enum_member_name(id, name) -> bool + + + Set name of enum member. + + + @param id (C++: const_t) + @param name (C++: const char *) + +Help on function set_enum_name in module ida_enum: + +set_enum_name(*args) -> 'bool' + set_enum_name(id, name) -> bool + + + Set name of enum type. + + + @param id (C++: enum_t) + @param name (C++: const char *) + +Help on function set_enum_type_ordinal in module ida_enum: + +set_enum_type_ordinal(*args) -> 'void' + set_enum_type_ordinal(id, ord) + + + Set corresponding type ordinal number. + + + @param id (C++: enum_t) + @param ord (C++: int32) + +Help on function set_enum_width in module ida_enum: + +set_enum_width(*args) -> 'bool' + set_enum_width(id, width) -> bool + + + See comment for 'get_enum_width()' + + + @param id (C++: enum_t) + @param width (C++: int) + +=== ida_enum EPYDOC INJECTIONS === +ida_enum.DEFMASK +""" +default bitmask +""" + +ida_enum.ENFL_REGEX +""" +apply regular expressions to beautify the name +""" + +ida_enum.ENUM_MEMBER_ERROR_ENUM +""" +bad enum id +""" + +ida_enum.ENUM_MEMBER_ERROR_ILLV +""" +bad bmask and value combination (~bmask & value != 0) +""" + +ida_enum.ENUM_MEMBER_ERROR_MASK +""" +bad bmask +""" + +ida_enum.ENUM_MEMBER_ERROR_NAME +""" +already have member with this name (bad name) +""" + +ida_enum.ENUM_MEMBER_ERROR_VALUE +""" +already have 256 members with this value +""" +=== ida_enum EPYDOC INJECTIONS END === +Help on class _IdcFunction in module ida_expr: + +class _IdcFunction(builtins.object) + | Internal class that calls pyw_call_idc_func() with a context + | + | Methods defined here: + | + | __call__(self, args, res) + | Call self as a function. + | + | __init__(self, ctxptr) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fp_ptr + +Help on function add_idc_class in module ida_expr: + +add_idc_class(*args) -> 'idc_class_t *' + add_idc_class(name, super=None) -> idc_class_t * + + + Create a new IDC class. + + @param name: name of the new class (C++: const char *) + @param super: the base class for the new class. if the new class is + not based on any other class, pass NULL (C++: const + idc_class_t *) + @return: pointer to the created class. If such a class already exists, + a pointer to it will be returned. Pointers to other existing + classes may be invalidated by this call. + +Help on function add_idc_func in module ida_expr: + +add_idc_func(name, fp, args, defvals=None, flags=0) + Extends the IDC language by exposing a new IDC function that is backed up by a Python function + + @param name: IDC function name to expose + @param fp: Python callable that will receive the arguments and return a tuple. + @param args: Arguments. A tuple of idaapi.VT_XXX constants + @param flags: IDC function flags. A combination of EXTFUN_XXX constants + + @return: Boolean + + + Add an IDC function. This function does not modify the predefined + kernel functions. Example: + + static error_t idaapi myfunc5(idc_value_t *argv, idc_value_t *res) + { + msg("myfunc is called with arg0=%a and arg1=%s + ", argv[0].num, argv[1].str); + res->num = 5; // let's return 5 + return eOk; + } + static const char myfunc5_args[] = { VT_LONG, VT_STR, 0 }; + static const ext_idcfunc_t myfunc_desc = { "MyFunc5", myfunc5, myfunc5_args, NULL, 0, EXTFUN_BASE }; + + // after this: + add_idc_func(myfunc_desc); + + // there is a new IDC function which can be called like this: + MyFunc5(0x123, "test"); + + If the function already exists, it will be replaced by the new + function + + @return: success + +Help on function add_idc_gvar in module ida_expr: + +add_idc_gvar(*args) -> 'idc_value_t *' + add_idc_gvar(name) -> idc_value_t + + + Add global IDC variable. + + @param name: name of the global variable (C++: const char *) + @return: pointer to the created variable or existing variable. NB: the + returned pointer is valid until a new global var is added. + +Help on function compile_idc_file in module ida_expr: + +compile_idc_file(*args) -> 'qstring *' + compile_idc_file(nonnul_line) -> str + +Help on function compile_idc_snippet in module ida_expr: + +compile_idc_snippet(*args) -> 'qstring *' + compile_idc_snippet(func, text, resolver=None, only_safe_funcs=False) -> str + + + Compile text with IDC statements. + + @param func: name of the function to create out of the snippet (C++: + const char *) + @param text: text to compile (C++: const char *) + @param resolver: callback object to get values of undefined variables + This object will be called if IDC function contains + references to undefined variables. May be NULL. (C++: + idc_resolver_t *) + @param only_safe_funcs: if true, any calls to functions without + EXTFUN_SAFE flag will lead to a compilation + error. (C++: bool) + +Help on function compile_idc_text in module ida_expr: + +compile_idc_text(*args) -> 'qstring *' + compile_idc_text(nonnul_line) -> str + +Help on function copy_idcv in module ida_expr: + +copy_idcv(*args) -> 'error_t' + copy_idcv(dst, src) -> error_t + + + Copy 'src' to 'dst'. For idc objects only a reference is copied. + + @param dst (C++: idc_value_t *) + @param src (C++: const idc_value_t &) + +Help on function create_idcv_ref in module ida_expr: + +create_idcv_ref(*args) -> 'bool' + create_idcv_ref(ref, v) -> bool + + + Create a variable reference. Currently only references to global + variables can be created. + + @param ref: ptr to the result (C++: idc_value_t *) + @param v: variable to reference (C++: const idc_value_t *) + @return: success + +Help on function deep_copy_idcv in module ida_expr: + +deep_copy_idcv(*args) -> 'error_t' + deep_copy_idcv(dst, src) -> error_t + + + Deep copy an IDC object. This function performs deep copy of idc + objects. If 'src' is not an object, 'copy_idcv()' will be called + + @param dst (C++: idc_value_t *) + @param src (C++: const idc_value_t &) + +Help on function del_idc_func in module ida_expr: + +del_idc_func(name) + Unregisters the specified IDC function + + @param name: IDC function name to unregister + + @return: Boolean + + + Delete an IDC function + +Help on function del_idcv_attr in module ida_expr: + +del_idcv_attr(*args) -> 'error_t' + del_idcv_attr(obj, attr) -> error_t + + + Delete an object attribute. + + @param obj: variable that holds an object reference (C++: idc_value_t + *) + @param attr: attribute name (C++: const char *) + @return: error code, eOk on success + +Help on function deref_idcv in module ida_expr: + +deref_idcv(*args) -> 'idc_value_t *' + deref_idcv(v, vref_flags) -> idc_value_t + + + Dereference a 'VT_REF' variable. + + @param v: variable to dereference (C++: idc_value_t *) + @param vref_flags: Dereference IDC variable flags (C++: int) + @return: pointer to the dereference result or NULL. If returns NULL, + qerrno is set to eExecBadRef "Illegal variable reference" + +Help on function eval_expr in module ida_expr: + +eval_expr(*args) -> 'qstring *' + eval_expr(rv, where, line) -> str + + + Compile and calculate an expression. + + @param rv: pointer to the result (C++: idc_value_t *) + @param where: the current linear address in the addressing space of + the program being disassembled. If will be used to + resolve names of local variables etc. if not applicable, + then should be BADADDR . (C++: ea_t) + @param line: the expression to evaluate (C++: const char *) + +Help on function eval_idc_expr in module ida_expr: + +eval_idc_expr(*args) -> 'qstring *' + eval_idc_expr(rv, where, line) -> str + + + Same as 'eval_expr()' , but will always use the IDC interpreter + regardless of the currently installed extlang. + + @param rv (C++: idc_value_t *) + @param where (C++: ea_t) + +Help on function exec_idc_script in module ida_expr: + +exec_idc_script(*args) -> 'qstring *' + exec_idc_script(result, path, func, args, argsnum) -> str + + + Compile and execute IDC function(s) from file. + + @param result: ptr to idc_value_t to hold result of the function. If + execution fails, this variable will contain the + exception information. You may pass NULL if you are not + interested in the returned value. (C++: idc_value_t *) + @param path: text file containing text of IDC functions (C++: const + char *) + @param func: function name to execute (C++: const char *) + @param args: array of parameters (C++: const idc_value_t) + @param argsnum: number of parameters to pass to 'fname' This number + should be equal to number of parameters the function + expects. (C++: size_t) + +Help on function exec_system_script in module ida_expr: + +exec_system_script(*args) -> 'bool' + exec_system_script(file, complain_if_no_file=True) -> bool + + + Compile and execute "main" function from system file. + + @param file: file name with IDC function(s). The file will be searched + in the idc subdir of ida (C++: const char *) + @param complain_if_no_file: 1: display warning if the file is not + found 0: don't complain if file doesn't + exist (C++: bool) + +Help on function find_idc_class in module ida_expr: + +find_idc_class(*args) -> 'idc_class_t *' + find_idc_class(name) -> idc_class_t * + + + Find an existing IDC class by its name. + + @param name: name of the class (C++: const char *) + @return: pointer to the class or NULL. The returned pointer is valid + until a new call to add_idc_class() + +Help on function find_idc_func in module ida_expr: + +find_idc_func(*args) -> 'qstring *' + find_idc_func(prefix, n=0) -> str + +Help on function find_idc_gvar in module ida_expr: + +find_idc_gvar(*args) -> 'idc_value_t *' + find_idc_gvar(name) -> idc_value_t + + + Find an existing global IDC variable by its name. + + @param name: name of the global variable (C++: const char *) + @return: pointer to the variable or NULL. NB: the returned pointer is + valid until a new global var is added. FIXME: it is difficult + to use this function in a thread safe manner + +Help on function first_idcv_attr in module ida_expr: + +first_idcv_attr(*args) -> 'char const *' + first_idcv_attr(obj) -> char const * + +Help on function free_idcv in module ida_expr: + +free_idcv(*args) -> 'void' + free_idcv(v) + + + Free storage used by 'VT_STR' / 'VT_OBJ' IDC variables. After this + call the variable has a numeric value 0 + + @param v (C++: idc_value_t *) + +Help on function get_idc_filename in module ida_expr: + +get_idc_filename(*args) -> 'char const *' + get_idc_filename(file) -> str + + + Get full name of IDC file name. Search for file in list of include + directories, IDCPATH directory and the current directory. + + @param file: file name without full path (C++: const char *) + @return: NULL is file not found. otherwise returns pointer to buf + +Help on function get_idcv_attr in module ida_expr: + +get_idcv_attr(*args) -> 'error_t' + get_idcv_attr(res, obj, attr, may_use_getattr=False) -> error_t + + + Get an object attribute. + + @param res: buffer for the attribute value (C++: idc_value_t *) + @param obj: variable that holds an object reference. if obj is NULL it + searches global variables, then user functions (C++: const + idc_value_t *) + @param attr: attribute name (C++: const char *) + @param may_use_getattr: may call getattr functions to calculate the + attribute if it does not exist (C++: bool) + @return: error code, eOk on success + +Help on function get_idcv_class_name in module ida_expr: + +get_idcv_class_name(*args) -> 'qstring *' + get_idcv_class_name(obj) -> str + + + Retrieves the IDC object class name. + + @param obj: class instance variable (C++: const idc_value_t *) + @return: error code, eOk on success + +Help on function get_idcv_slice in module ida_expr: + +get_idcv_slice(*args) -> 'error_t' + get_idcv_slice(res, v, i1, i2, flags=0) -> error_t + + + Get slice. + + @param res: output variable that will contain the slice (C++: + idc_value_t *) + @param v: input variable (string or object) (C++: const idc_value_t + *) + @param i1: slice start index (C++: uval_t) + @param i2: slice end index (excluded) (C++: uval_t) + @param flags: IDC variable slice flags or 0 (C++: int) + @return: eOk if success + +Help on class highlighter_cbs_t in module ida_expr: + +class highlighter_cbs_t(builtins.object) + | Proxy of C++ highlighter_cbs_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> highlighter_cbs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_highlighter_cbs_t(...) + | delete_highlighter_cbs_t(self) + | + | cur_block_state(self, *args) -> 'int32' + | cur_block_state(self) -> int32 + | + | prev_block_state(self, *args) -> 'int32' + | prev_block_state(self) -> int32 + | + | set_block_state(self, *args) -> 'void' + | set_block_state(self, arg0) + | + | set_style(self, *args) -> 'void' + | set_style(self, arg0, arg1, arg2) + | + | ---------------------------------------------------------------------- + | 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 + +Help on class idc_global_t in module ida_expr: + +class idc_global_t(builtins.object) + | Proxy of C++ idc_global_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idc_global_t + | __init__(self, n) -> idc_global_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_idc_global_t(...) + | delete_idc_global_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | idc_global_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | idc_global_t_value_get(self) -> idc_value_t + +Help on class idc_value_t in module ida_expr: + +class idc_value_t(builtins.object) + | Proxy of C++ idc_value_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=0) -> idc_value_t + | __init__(self, r) -> idc_value_t + | __init__(self, _str) -> idc_value_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_idc_value_t(...) + | delete_idc_value_t(self) + | + | _create_empty_string(self, *args) -> 'void' + | _create_empty_string(self) + | + | _idc_value_t__get_e = __get_e(self, *args) -> 'wrapped_array_t< ushort,6 >' + | __get_e(self) -> wrapped_array_t< ushort,6 > + | + | c_str(self, *args) -> 'char const *' + | c_str(self) -> char const * + | + | clear(self, *args) -> 'void' + | clear(self) + | + | create_empty_string(self, *args) -> 'void' + | create_empty_string(self) + | + | is_convertible(self, *args) -> 'bool' + | is_convertible(self) -> bool + | + | is_integral(self, *args) -> 'bool' + | is_integral(self) -> bool + | + | is_zero(self, *args) -> 'bool' + | is_zero(self) -> bool + | + | qstr(self, *args) -> 'qstring const &' + | qstr(self) -> qstring + | qstr(self) -> qstring const & + | + | set_float(self, *args) -> 'void' + | set_float(self, f) + | + | set_int64(self, *args) -> 'void' + | set_int64(self, v) + | + | set_long(self, *args) -> 'void' + | set_long(self, v) + | + | set_pvoid(self, *args) -> 'void' + | set_pvoid(self, p) + | + | set_string(self, *args) -> 'void' + | set_string(self, _str, len) + | set_string(self, _str) + | + | swap(self, *args) -> 'void' + | swap(self, v) + | + | u_str(self, *args) -> 'uchar const *' + | u_str(self) -> uchar const * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | __get_e(self) -> wrapped_array_t< ushort,6 > + | + | funcidx + | idc_value_t_funcidx_get(self) -> int + | + | i64 + | idc_value_t_i64_get(self) -> int64 + | + | num + | idc_value_t_num_get(self) -> sval_t + | + | obj + | idc_value_t_obj_get(self) -> idc_object_t * + | + | pvoid + | idc_value_t_pvoid_get(self) -> void * + | + | reserve + | idc_value_t_reserve_get(self) -> uchar [sizeof(qstring)] + | + | str + | + | thisown + | The membership flag + | + | vtype + | idc_value_t_vtype_get(self) -> char + +Help on class idc_values_t in module ida_expr: + +class idc_values_t(builtins.object) + | Proxy of C++ qvector< idc_value_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'idc_value_t const &' + | __getitem__(self, i) -> idc_value_t + | + | __init__(self, *args) + | __init__(self) -> idc_values_t + | __init__(self, x) -> idc_values_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_idc_values_t(...) + | delete_idc_values_t(self) + | + | at(self, *args) -> 'idc_value_t const &' + | at(self, _idx) -> idc_value_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< idc_value_t >::const_iterator' + | begin(self) -> idc_value_t + | begin(self) -> idc_value_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< idc_value_t >::const_iterator' + | end(self) -> idc_value_t + | end(self) -> idc_value_t + | + | erase(self, *args) -> 'qvector< idc_value_t >::iterator' + | erase(self, it) -> idc_value_t + | erase(self, first, last) -> idc_value_t + | + | extract(self, *args) -> 'idc_value_t *' + | extract(self) -> idc_value_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=idc_value_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< idc_value_t >::iterator' + | insert(self, it, x) -> idc_value_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'idc_value_t &' + | push_back(self, x) + | push_back(self) -> idc_value_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function idcv_float in module ida_expr: + +idcv_float(*args) -> 'error_t' + idcv_float(v) -> error_t + + + Convert IDC variable to a floating point. + + + @param v (C++: idc_value_t *) + +Help on function idcv_int64 in module ida_expr: + +idcv_int64(*args) -> 'error_t' + idcv_int64(v) -> error_t + + + Convert IDC variable to a 64bit number. + + @param v (C++: idc_value_t *) + @return: v = 0 if impossible to convert to int64 + +Help on function idcv_long in module ida_expr: + +idcv_long(*args) -> 'error_t' + idcv_long(v) -> error_t + + + Convert IDC variable to a long (32/64bit) number. + + @param v (C++: idc_value_t *) + @return: v = 0 if impossible to convert to long + +Help on function idcv_num in module ida_expr: + +idcv_num(*args) -> 'error_t' + idcv_num(v) -> error_t + + + Convert IDC variable to a long number. + + @param v (C++: idc_value_t *) + @return: v = 0 if IDC variable = "false" string v = 1 if IDC + variable = "true" string v = number if IDC variable is + number or string containing a number eTypeConflict if IDC + variable = empty string + +Help on function idcv_object in module ida_expr: + +idcv_object(*args) -> 'error_t' + idcv_object(v, icls=None) -> error_t + + + Create an IDC object. The original value of 'v' is discarded (freed). + + @param v: variable to hold the object. any previous value will be + cleaned (C++: idc_value_t *) + @param icls: ptr to the desired class. NULL means "object" class this + ptr must be returned by add_idc_class() or + find_idc_class() (C++: const idc_class_t *) + @return: always eOk + +Help on function idcv_string in module ida_expr: + +idcv_string(*args) -> 'error_t' + idcv_string(v) -> error_t + + + Convert IDC variable to a text string. + + + @param v (C++: idc_value_t *) + +Help on function last_idcv_attr in module ida_expr: + +last_idcv_attr(*args) -> 'char const *' + last_idcv_attr(obj) -> char const * + +Help on function move_idcv in module ida_expr: + +move_idcv(*args) -> 'error_t' + move_idcv(dst, src) -> error_t + + + Move 'src' to 'dst'. This function is more effective than copy_idcv + since it never copies big amounts of data. + + @param dst (C++: idc_value_t *) + @param src (C++: idc_value_t *) + +Help on function next_idcv_attr in module ida_expr: + +next_idcv_attr(*args) -> 'char const *' + next_idcv_attr(obj, attr) -> char const * + +Help on function prev_idcv_attr in module ida_expr: + +prev_idcv_attr(*args) -> 'char const *' + prev_idcv_attr(obj, attr) -> char const * + +Help on function print_idcv in module ida_expr: + +print_idcv(*args) -> 'qstring *' + print_idcv(v, name=None, indent=0) -> str + + + Get text representation of 'idc_value_t' . + + + @param v (C++: const idc_value_t &) + @param name (C++: const char *) + @param indent (C++: int) + +Help on function py_add_idc_func in module ida_expr: + +py_add_idc_func(*args) -> 'bool' + py_add_idc_func(name, fp_ptr, args, defvals, flags) -> bool + +Help on function py_get_call_idc_func in module ida_expr: + +py_get_call_idc_func(*args) -> 'size_t' + py_get_call_idc_func() -> size_t + +Help on function pyw_convert_defvals in module ida_expr: + +pyw_convert_defvals(*args) -> 'bool' + pyw_convert_defvals(out, py_seq) -> bool + +Help on function pyw_register_idc_func in module ida_expr: + +pyw_register_idc_func(*args) -> 'size_t' + pyw_register_idc_func(name, args, py_fp) -> size_t + +Help on function pyw_unregister_idc_func in module ida_expr: + +pyw_unregister_idc_func(*args) -> 'bool' + pyw_unregister_idc_func(ctxptr) -> bool + +Help on function set_header_path in module ida_expr: + +set_header_path(*args) -> 'bool' + set_header_path(path, add) -> bool + + + Set or append a header path. IDA looks for the include files in the + appended header paths, then in the ida executable directory. + + @param path: list of directories to add (separated by ';') may be + NULL, in this case nothing is added (C++: const char *) + @param add: true: append. false: remove old paths. (C++: bool) + +Help on function set_idcv_attr in module ida_expr: + +set_idcv_attr(*args) -> 'error_t' + set_idcv_attr(obj, attr, value, may_use_setattr=False) -> error_t + + + Set an object attribute. + + @param obj: variable that holds an object reference. if obj is NULL + then it tries to modify a global variable with the + attribute name (C++: idc_value_t *) + @param attr: attribute name (C++: const char *) + @param value: new attribute value (C++: const idc_value_t &) + @param may_use_setattr: may call setattr functions for the class (C++: + bool) + @return: error code, eOk on success + +Help on function set_idcv_slice in module ida_expr: + +set_idcv_slice(*args) -> 'error_t' + set_idcv_slice(v, i1, i2, _in, flags=0) -> error_t + + + Set slice. + + @param v: variable to modify (string or object) (C++: idc_value_t *) + @param i1: slice start index (C++: uval_t) + @param i2: slice end index (excluded) (C++: uval_t) + @param flags: IDC variable slice flags or 0 (C++: int) + @return: eOk on success + +Help on function swap_idcvs in module ida_expr: + +swap_idcvs(*args) -> 'void' + swap_idcvs(v1, v2) + + + Swap 2 variables. + + + @param v1 (C++: idc_value_t *) + @param v2 (C++: idc_value_t *) + +Help on function throw_idc_exception in module ida_expr: + +throw_idc_exception(*args) -> 'error_t' + throw_idc_exception(r, desc) -> error_t + + + Create an idc execution exception object. This helper function can be + used to return an exception from C++ code to IDC. In other words this + function can be called from 'idc_func_t()' callbacks. Sample usage: if + ( !ok ) return throw_idc_exception(r, "detailed error msg"); + + @param r: object to hold the exception object (C++: idc_value_t *) + @param desc: exception description (C++: const char *) + @return: eExecThrow + +=== ida_expr EPYDOC INJECTIONS === +ida_expr.CPL_DEL_MACROS +""" +delete macros at the end of compilation +""" + +ida_expr.CPL_ONLY_SAFE +""" +allow calls of only thread-safe functions +""" + +ida_expr.CPL_USE_LABELS +""" +allow program labels in the script +""" + +ida_expr.IDC_LANG_EXT +""" +IDC script extension. +""" + +ida_expr.VARSLICE_SINGLE +""" +return single index (i2 is ignored) +""" + +ida_expr.VREF_COPY +""" +copy the result to the input var (v) +""" + +ida_expr.VREF_LOOP +""" +dereference until we get a non 'VT_REF' +""" + +ida_expr.VREF_ONCE +""" +dereference only once, do not loop +""" + +ida_expr.VT_FLOAT +""" +Floating point (see 'idc_value_t::e' ) +""" + +ida_expr.VT_FUNC +""" +Function (see 'idc_value_t::funcidx' ) +""" + +ida_expr.VT_INT64 +""" +i64 +""" + +ida_expr.VT_LONG +""" +Integer (see 'idc_value_t::num' ) +""" + +ida_expr.VT_OBJ +""" +Object (see idc_value_t::obj) +""" + +ida_expr.VT_PVOID +""" +void * +""" + +ida_expr.VT_REF +""" +Reference. +""" + +ida_expr.VT_STR +""" +String (see qstr() and similar functions) +""" + +ida_expr.VT_WILD +""" +Function with arbitrary number of arguments. The actual number of +arguments will be passed in 'idc_value_t::num' . This value should not +be used for 'idc_value_t' . +""" + +ida_expr.eExecThrow +""" +See return value of 'idc_func_t' . +""" +=== ida_expr EPYDOC INJECTIONS END === +Help on function calc_fixup_size in module ida_fixup: + +calc_fixup_size(*args) -> 'int' + calc_fixup_size(type) -> int + + + Calculate size of fixup in bytes (the number of bytes the fixup + patches) + + @param type (C++: fixup_type_t) + +Help on function contains_fixups in module ida_fixup: + +contains_fixups(*args) -> 'bool' + contains_fixups(ea, size) -> bool + + + Does the specified address range contain any fixup information? + + + @param ea (C++: ea_t) + @param size (C++: asize_t) + +Help on function del_fixup in module ida_fixup: + +del_fixup(*args) -> 'void' + del_fixup(source) + + + Delete fixup information. + + + @param source (C++: ea_t) + +Help on function exists_fixup in module ida_fixup: + +exists_fixup(*args) -> 'bool' + exists_fixup(source) -> bool + + + Check that a fixup exists at the given address. + + + @param source (C++: ea_t) + +Help on function find_custom_fixup in module ida_fixup: + +find_custom_fixup(*args) -> 'fixup_type_t' + find_custom_fixup(name) -> fixup_type_t + + + Get id of a custom fixup handler. + + @param name: name of the custom fixup handler (C++: const char *) + @return: id with FIXUP_CUSTOM bit set or 0 + +Help on class fixup_data_t in module ida_fixup: + +class fixup_data_t(builtins.object) + | Proxy of C++ fixup_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> fixup_data_t + | __init__(self, type_, flags_=0) -> fixup_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_fixup_data_t(...) + | delete_fixup_data_t(self) + | + | calc_size(self, *args) -> 'int' + | calc_size(self) -> int + | + | clr_extdef(self, *args) -> 'void' + | clr_extdef(self) + | + | clr_unused(self, *args) -> 'void' + | clr_unused(self) + | + | get(self, *args) -> 'bool' + | get(self, source) -> bool + | + | get_base(self, *args) -> 'ea_t' + | get_base(self) -> ea_t + | + | get_desc(self, *args) -> 'char const *' + | get_desc(self, source) -> char const * + | + | get_flags(self, *args) -> 'uint32' + | get_flags(self) -> uint32 + | + | get_handler(self, *args) -> 'fixup_handler_t const *' + | get_handler(self) -> fixup_handler_t const * + | + | get_type(self, *args) -> 'fixup_type_t' + | get_type(self) -> fixup_type_t + | + | get_value(self, *args) -> 'uval_t' + | get_value(self, ea) -> uval_t + | + | has_base(self, *args) -> 'bool' + | has_base(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_extdef(self, *args) -> 'bool' + | is_extdef(self) -> bool + | + | is_unused(self, *args) -> 'bool' + | is_unused(self) -> bool + | + | patch_value(self, *args) -> 'bool' + | patch_value(self, ea) -> bool + | + | set(self, *args) -> 'void' + | set(self, source) + | + | set_base(self, *args) -> 'void' + | set_base(self, new_base) + | + | set_extdef(self, *args) -> 'void' + | set_extdef(self) + | + | set_sel(self, *args) -> 'void' + | set_sel(self, seg) + | + | set_target_sel(self, *args) -> 'void' + | set_target_sel(self) + | + | set_type(self, *args) -> 'void' + | set_type(self, type_) + | + | set_type_and_flags(self, *args) -> 'void' + | set_type_and_flags(self, type_, flags_=0) + | + | set_unused(self, *args) -> 'void' + | set_unused(self) + | + | was_created(self, *args) -> 'bool' + | was_created(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | displacement + | fixup_data_t_displacement_get(self) -> adiff_t + | + | off + | fixup_data_t_off_get(self) -> ea_t + | + | sel + | fixup_data_t_sel_get(self) -> sel_t + | + | thisown + | The membership flag + +Help on class fixup_info_t in module ida_fixup: + +class fixup_info_t(builtins.object) + | Proxy of C++ fixup_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> fixup_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_fixup_info_t(...) + | delete_fixup_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | fixup_info_t_ea_get(self) -> ea_t + | + | fd + | fixup_info_t_fd_get(self) -> fixup_data_t + | + | thisown + | The membership flag + +Help on function gen_fix_fixups in module ida_fixup: + +gen_fix_fixups(*args) -> 'void' + gen_fix_fixups(_from, to, size) + + + Relocate the bytes with fixup information once more (generic + function). This function may be called from 'loader_t::move_segm()' if + it suits the goal. If 'loader_t::move_segm' is not defined then this + function will be called automatically when moving segments or rebasing + the entire program. Special parameter values (from = BADADDR, size = + 0, to = delta) are used when the function is called from + rebase_program(delta). + + @param _from (C++: ea_t) + @param to (C++: ea_t) + @param size (C++: asize_t) + +Help on function get_first_fixup_ea in module ida_fixup: + +get_first_fixup_ea(*args) -> 'ea_t' + get_first_fixup_ea() -> ea_t + + + Get the first address with fixup information + + @return: the first address with fixup information, or BADADDR + +Help on function get_fixup in module ida_fixup: + +get_fixup(*args) -> 'bool' + get_fixup(fd, source) -> bool + + + Get fixup information. + + + @param fd (C++: fixup_data_t *) + @param source (C++: ea_t) + +Help on function get_fixup_desc in module ida_fixup: + +get_fixup_desc(*args) -> 'fixup_data_t const &' + get_fixup_desc(source, fd) -> str + + + Get FIXUP description comment. + + + @param source (C++: ea_t) + @param fd (C++: const fixup_data_t &) + +Help on function get_fixup_handler in module ida_fixup: + +get_fixup_handler(*args) -> 'fixup_handler_t const *' + get_fixup_handler(type) -> fixup_handler_t const * + + + Get handler of standard or custom fixup. + + + @param type (C++: fixup_type_t) + +Help on function get_fixup_value in module ida_fixup: + +get_fixup_value(*args) -> 'uval_t' + get_fixup_value(ea, type) -> uval_t + + + Get the operand value. This function get fixup bytes from data or an + instruction at `ea' and convert them to the operand value (maybe + partially). It is opposite in meaning to the 'patch_fixup_value()' . + For example, FIXUP_HI8 read a byte at 'patch_fixup_value()' `ea' and + shifts it left by 8 bits, or AArch64's custom fixup BRANCH26 get low + 26 bits of the insn at `ea' and shifts it left by 2 bits. This + function is mainly used to get a relocation addend. + 'fixup_handler_t::size' + + @param ea: address to get fixup bytes from, the size of the fixup + bytes depends on the fixup type. (C++: ea_t) + @param type (C++: fixup_type_t) + +Help on function get_fixups in module ida_fixup: + +get_fixups(*args) -> 'bool' + get_fixups(out, ea, size) -> bool + +Help on function get_next_fixup_ea in module ida_fixup: + +get_next_fixup_ea(*args) -> 'ea_t' + get_next_fixup_ea(ea) -> ea_t + + + Find next address with fixup information + + @param ea: current address (C++: ea_t) + @return: the next address with fixup information, or BADADDR + +Help on function get_prev_fixup_ea in module ida_fixup: + +get_prev_fixup_ea(*args) -> 'ea_t' + get_prev_fixup_ea(ea) -> ea_t + + + Find previous address with fixup information + + @param ea: current address (C++: ea_t) + @return: the previous address with fixup information, or BADADDR + +Help on function is_fixup_custom in module ida_fixup: + +is_fixup_custom(*args) -> 'bool' + is_fixup_custom(type) -> bool + + + Is fixup processed by processor module? + + + @param type (C++: fixup_type_t) + +Help on function patch_fixup_value in module ida_fixup: + +patch_fixup_value(*args) -> 'bool' + patch_fixup_value(ea, fd) -> bool + + + Patch the fixup bytes. This function updates data or an instruction at + `ea' to the fixup bytes. For example, FIXUP_HI8 updates a byte at `ea' + to the high byte of `fd->off' , or AArch64's custom fixup BRANCH26 + updates low 26 bits of the insn at `ea' to the value of `fd->off' + shifted right by 2. 'fixup_handler_t::size' + + @param ea: address where data are changed, the size of the changed + data depends on the fixup type. (C++: ea_t) + @param fd (C++: const fixup_data_t &) + +Help on function set_fixup in module ida_fixup: + +set_fixup(*args) -> 'void' + set_fixup(source, fd) + + + Set fixup information. You should fill 'fixup_data_t' and call this + function and the kernel will remember information in the database. + + @param source: the fixup source address, i.e. the address modified by + the fixup (C++: ea_t) + @param fd: fixup data (C++: const fixup_data_t &) + +=== ida_fixup EPYDOC INJECTIONS === +ida_fixup.FIXUPF_CREATED +""" +fixup was not present in the input file +""" + +ida_fixup.FIXUPF_EXTDEF +""" +target is a location (otherwise - segment). Use this bit if the target +is a symbol rather than an offset from the beginning of a segment. +""" + +ida_fixup.FIXUPF_LOADER_MASK +""" +additional flags. The bits from this mask are not stored in the +database and can be used by the loader at its discretion. +""" + +ida_fixup.FIXUPF_REL +""" +fixup is relative to the linear address `base' . Otherwise fixup is +relative to the start of the segment with `sel' selector. +""" + +ida_fixup.FIXUPF_UNUSED +""" +fixup is ignored by IDAdisallows the kernel to convert operandsthis +fixup is not used during output +""" +=== ida_fixup EPYDOC INJECTIONS END === +Help on class qfile_t in module ida_fpro: + +class qfile_t(builtins.object) + | Proxy of C++ qfile_t class. + | + | + | A helper class to work with FILE related functions. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, rhs) -> qfile_t + | __init__(self, pycapsule=None) -> qfile_t + | + | + | Closes the file + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qfile_t(...) + | delete_qfile_t(self) + | + | close(self, *args) -> 'void' + | close(self) + | + | filename(self, *args) -> 'PyObject *' + | filename(self) -> PyObject * + | + | flush(self, *args) -> 'int' + | flush(self) -> int + | + | + | Reads a single byte from the file. Returns None if EOF or the read byte + | + | get_byte(self, *args) -> 'PyObject *' + | get_byte(self) -> PyObject * + | + | get_fp(self, *args) -> 'FILE *' + | get_fp(self) -> FILE * + | + | gets(self, *args) -> 'PyObject *' + | gets(self, size) -> PyObject * + | + | + | Reads a line from the input file. Returns the read line or None + | + | open(self, *args) -> 'bool' + | open(self, filename, mode) -> bool + | + | + | Opens a file + | + | @param filename: the file name + | @param mode: The mode string, ala fopen() style + | @return: Boolean + | + | opened(self, *args) -> 'bool' + | opened(self) -> bool + | + | + | Checks if the file is opened or not + | + | put_byte(self, *args) -> 'int' + | put_byte(self, chr) -> int + | + | + | Writes a single byte to the file + | + | puts(self, *args) -> 'int' + | puts(self, str) -> int + | + | read(self, *args) -> 'PyObject *' + | read(self, size) -> PyObject * + | + | + | Reads from the file. Returns the buffer or None + | + | readbytes(self, *args) -> 'PyObject *' + | readbytes(self, size, big_endian) -> PyObject * + | + | + | Similar to read() but it respect the endianness + | + | seek(self, *args) -> 'int' + | seek(self, offset, whence=SEEK_SET) -> int + | + | + | Set input source position + | @return: the new position (not 0 as fseek!) + | + | size(self, *args) -> 'int64' + | size(self) -> int64 + | + | tell(self, *args) -> 'int64' + | tell(self) -> int64 + | + | + | Returns the current position + | + | write(self, *args) -> 'int' + | write(self, py_buf) -> int + | + | + | Writes to the file. Returns 0 or the number of bytes written + | + | writebytes(self, *args) -> 'int' + | writebytes(self, py_buf, big_endian) -> int + | + | + | Similar to write() but it respect the endianness + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | from_capsule(*args) -> 'qfile_t *' + | from_capsule(pycapsule) -> qfile_t + | + | from_fp(*args) -> 'qfile_t *' + | from_fp(fp) -> qfile_t + | + | tmpfile(*args) -> 'qfile_t *' + | tmpfile() -> qfile_t + | + | + | A static method to construct an instance using a temporary file + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __idc_cvt_id__ + | qfile_t___idc_cvt_id___get(self) -> int + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on function qfile_t_from_capsule in module ida_fpro: + +qfile_t_from_capsule(*args) -> 'qfile_t *' + qfile_t_from_capsule(pycapsule) -> qfile_t + +Help on function qfile_t_from_fp in module ida_fpro: + +qfile_t_from_fp(*args) -> 'qfile_t *' + qfile_t_from_fp(fp) -> qfile_t + +Help on function qfile_t_tmpfile in module ida_fpro: + +qfile_t_tmpfile(*args) -> 'qfile_t *' + qfile_t_tmpfile() -> qfile_t + +Help on function add_auto_stkpnt in module ida_frame: + +add_auto_stkpnt(*args) -> 'bool' + add_auto_stkpnt(pfn, ea, delta) -> bool + + + Add automatic SP register change point. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address where SP changes. usually this is the end of + the instruction which modifies the stack pointer + (\cmd{ea}+\cmd{size}) (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function add_frame in module ida_frame: + +add_frame(*args) -> 'bool' + add_frame(pfn, frsize, frregs, argsize) -> bool + + + Add function frame. + + @param pfn: pointer to function structure (C++: func_t *) + @param frsize: size of function local variables (C++: sval_t) + @param frregs: size of saved registers (C++: ushort) + @param argsize: size of function arguments range which will be purged + upon return. this parameter is used for __stdcall and + __pascal calling conventions. for other calling + conventions please pass 0. (C++: asize_t) + +Help on function add_regvar in module ida_frame: + +add_regvar(*args) -> 'int' + add_regvar(pfn, ea1, ea2, canon, user, cmt) -> int + + + Define a register variable. + + @param pfn: function in which the definition will be created (C++: + func_t *) + @param ea1: range of addresses within the function where the + definition will be used (C++: ea_t) + @param ea2: range of addresses within the function where the + definition will be used (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @param user: user-defined name for the register (C++: const char *) + @param cmt: comment for the definition (C++: const char *) + @return: Register variable error codes + +Help on function add_user_stkpnt in module ida_frame: + +add_user_stkpnt(*args) -> 'bool' + add_user_stkpnt(ea, delta) -> bool + + + Add user-defined SP register change point. + + @param ea: linear address where SP changes (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function build_stkvar_name in module ida_frame: + +build_stkvar_name(*args) -> 'qstring *' + build_stkvar_name(pfn, v) -> str + + + Build automatic stack variable name. + + @param pfn: pointer to function (can't be NULL!) (C++: const func_t + *) + @param v: value of variable offset (C++: sval_t) + @return: length of stack variable name or -1 + +Help on function build_stkvar_xrefs in module ida_frame: + +build_stkvar_xrefs(*args) -> 'void' + build_stkvar_xrefs(out, pfn, mptr) + + + Fill 'out' with a list of all the xrefs made from function 'pfn', to + the argument or variable 'mptr' in 'pfn's stack frame. + + @param out: the list of xrefs to fill. (C++: xreflist_t *) + @param pfn: the function to scan. (C++: func_t *) + @param mptr: the argument/variable in pfn's stack frame. (C++: const + member_t *) + +Help on function calc_stkvar_struc_offset in module ida_frame: + +calc_stkvar_struc_offset(*args) -> 'ea_t' + calc_stkvar_struc_offset(pfn, insn, n) -> ea_t + + + Calculate offset of stack variable in the frame structure. + + @param pfn: pointer to function (can't be NULL!) (C++: func_t *) + @param insn: the instruction (C++: const insn_t &) + @param n: number of operand: (0.. UA_MAXOP -1) -1 if error, return + BADADDR (C++: int) + @return: BADADDR if some error (issue a warning if stack frame is + bad) + +Help on function define_stkvar in module ida_frame: + +define_stkvar(*args) -> 'bool' + define_stkvar(pfn, name, off, flags, ti, nbytes) -> bool + + + Define/redefine a stack variable. + + @param pfn: pointer to function (C++: func_t *) + @param name: variable name, NULL means autogenerate a name (C++: const + char *) + @param off: offset of the stack variable in the frame. negative values + denote local variables, positive - function arguments. + (C++: sval_t) + @param flags: variable type flags ( byte_flag() for a byte variable, + for example) (C++: flags_t) + @param ti: additional type information (like offsets, structs, etc) + (C++: const opinfo_t *) + @param nbytes: number of bytes occupied by the variable (C++: asize_t) + @return: success + +Help on function del_frame in module ida_frame: + +del_frame(*args) -> 'bool' + del_frame(pfn) -> bool + + + Delete a function frame. + + @param pfn: pointer to function structure (C++: func_t *) + @return: success + +Help on function del_regvar in module ida_frame: + +del_regvar(*args) -> 'int' + del_regvar(pfn, ea1, ea2, canon) -> int + + + Delete a register variable definition. + + @param pfn: function in question (C++: func_t *) + @param ea1: range of addresses within the function where the + definition holds (C++: ea_t) + @param ea2: range of addresses within the function where the + definition holds (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @return: Register variable error codes + +Help on function del_stkpnt in module ida_frame: + +del_stkpnt(*args) -> 'bool' + del_stkpnt(pfn, ea) -> bool + + + Delete SP register change point. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: success + +Help on function delete_unreferenced_stkvars in module ida_frame: + +delete_unreferenced_stkvars(*args) -> 'int' + delete_unreferenced_stkvars(pfn) -> int + +Help on function delete_wrong_stkvar_ops in module ida_frame: + +delete_wrong_stkvar_ops(*args) -> 'int' + delete_wrong_stkvar_ops(pfn) -> int + +Help on function find_regvar in module ida_frame: + +find_regvar(*args) -> 'regvar_t *' + find_regvar(pfn, ea1, ea2, canon, user) -> regvar_t + find_regvar(pfn, ea, canon) -> regvar_t + + + Find a register variable definition (powerful version). One of 'canon' + and 'user' should be NULL. If both 'canon' and 'user' are NULL it + returns the first regvar definition in the range. + + @param pfn: function in question (C++: func_t *) + @param ea1: range of addresses to search. ea1==BADADDR means the + entire function (C++: ea_t) + @param ea2: range of addresses to search. ea1==BADADDR means the + entire function (C++: ea_t) + @param canon: name of a general register (C++: const char *) + @param user: user-defined name for the register (C++: const char *) + @return: NULL-not found, otherwise ptr to regvar_t + +Help on function frame_off_args in module ida_frame: + +frame_off_args(*args) -> 'ea_t' + frame_off_args(pfn) -> ea_t + + + Get starting address of arguments section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_lvars in module ida_frame: + +frame_off_lvars(*args) -> 'ea_t' + frame_off_lvars(pfn) -> ea_t + + + Get start address of local variables section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_retaddr in module ida_frame: + +frame_off_retaddr(*args) -> 'ea_t' + frame_off_retaddr(pfn) -> ea_t + + + Get starting address of return address section. + + + @param pfn (C++: const func_t *) + +Help on function frame_off_savregs in module ida_frame: + +frame_off_savregs(*args) -> 'ea_t' + frame_off_savregs(pfn) -> ea_t + + + Get starting address of saved registers section. + + + @param pfn (C++: const func_t *) + +Help on function get_effective_spd in module ida_frame: + +get_effective_spd(*args) -> 'sval_t' + get_effective_spd(pfn, ea) -> sval_t + + + Get effective difference between the initial and current values of + ESP. This function returns the sp-diff used by the instruction. The + difference between 'get_spd()' and 'get_effective_spd()' is present + only for instructions like "pop [esp+N]": they modify sp and use the + modified value. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: 0 or the difference, usually a negative number + +Help on function get_frame in module ida_frame: + +get_frame(*args) -> 'struc_t *' + get_frame(pfn) -> struc_t + get_frame(ea) -> struc_t * + + + Get pointer to function frame. + + @param pfn: pointer to function structure (C++: const func_t *) + +Help on function get_frame_part in module ida_frame: + +get_frame_part(*args) -> 'void' + get_frame_part(range, pfn, part) + + + Get offsets of the frame part in the frame. + + @param range: pointer to the output buffer with the frame part + start/end(exclusive) offsets, can't be NULL (C++: + range_t *) + @param pfn: pointer to function structure, can't be NULL (C++: const + func_t *) + @param part: frame part (C++: frame_part_t) + +Help on function get_frame_retsize in module ida_frame: + +get_frame_retsize(*args) -> 'int' + get_frame_retsize(pfn) -> int + + + Get size of function return address. + + @param pfn: pointer to function structure, can't be NULL (C++: const + func_t *) + +Help on function get_frame_size in module ida_frame: + +get_frame_size(*args) -> 'asize_t' + get_frame_size(pfn) -> asize_t + + + Get full size of a function frame. This function takes into account + size of local variables + size of saved registers + size of return + address + number of purged bytes. The purged bytes correspond to the + arguments of the functions with __stdcall and __fastcall calling + conventions. + + @param pfn: pointer to function structure, may be NULL (C++: const + func_t *) + @return: size of frame in bytes or zero + +Help on function get_func_by_frame in module ida_frame: + +get_func_by_frame(*args) -> 'ea_t' + get_func_by_frame(frame_id) -> ea_t + + + Get function by its frame id.this function works only with databases + created by IDA > 5.6 + + @param frame_id: id of the function frame (C++: tid_t) + @return: start address of the function or BADADDR + +Help on function get_min_spd_ea in module ida_frame: + +get_min_spd_ea(*args) -> 'ea_t' + get_min_spd_ea(pfn) -> ea_t + +Help on function get_sp_delta in module ida_frame: + +get_sp_delta(*args) -> 'sval_t' + get_sp_delta(pfn, ea) -> sval_t + + + Get modification of SP made at the specified location + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address (C++: ea_t) + @return: 0 if the specified location doesn't contain a SP change + point. otherwise return delta of SP modification. + +Help on function get_spd in module ida_frame: + +get_spd(*args) -> 'sval_t' + get_spd(pfn, ea) -> sval_t + + + Get difference between the initial and current values of ESP. + + @param pfn: pointer to function. may be NULL. (C++: func_t *) + @param ea: linear address of an instruction (C++: ea_t) + @return: 0 or the difference, usually a negative number. returns the + sp-diff before executing the instruction. + +Help on function get_stkvar in module ida_frame: + +get_stkvar(*args) -> 'PyObject *' + get_stkvar(insn, op, v) -> PyObject * + + + Get pointer to stack variable + @param op: reference to instruction operand + @param v: immediate value in the operand (usually op.addr) + @return: + - None on failure + - tuple(member_t, actval) + where actval: actual value used to fetch stack variable + +Help on function has_regvar in module ida_frame: + +has_regvar(*args) -> 'bool' + has_regvar(pfn, ea) -> bool + + + Is there a register variable definition? + + @param pfn: function in question (C++: func_t *) + @param ea: current address (C++: ea_t) + +Help on function is_funcarg_off in module ida_frame: + +is_funcarg_off(*args) -> 'bool' + is_funcarg_off(pfn, frameoff) -> bool + + + Does the given offset lie within the arguments section? + + + @param pfn (C++: const func_t *) + @param frameoff (C++: uval_t) + +Help on class llabel_t in module ida_frame: + +class llabel_t(builtins.object) + | Proxy of C++ llabel_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> llabel_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_llabel_t(...) + | delete_llabel_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | llabel_t_ea_get(self) -> ea_t + | + | name + | llabel_t_name_get(self) -> char * + | + | thisown + | The membership flag + +Help on function lvar_off in module ida_frame: + +lvar_off(*args) -> 'sval_t' + lvar_off(pfn, frameoff) -> sval_t + + + Does the given offset lie within the local variables section? + + + @param pfn (C++: const func_t *) + @param frameoff (C++: uval_t) + +Help on function recalc_spd in module ida_frame: + +recalc_spd(*args) -> 'bool' + recalc_spd(cur_ea) -> bool + + + Recalculate SP delta for an instruction that stops execution. The next + instruction is not reached from the current instruction. We need to + recalculate SP for the next instruction.This function will create a + new automatic SP register change point if necessary. It should be + called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the + current instruction doesn't pass the execution flow to the next + instruction. + + @param cur_ea: linear address of the current instruction (C++: ea_t) + +Help on class regvar_t in module ida_frame: + +class regvar_t(ida_range.range_t) + | Proxy of C++ regvar_t class. + | + | Method resolution order: + | regvar_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regvar_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_regvar_t(...) + | delete_regvar_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | canon + | regvar_t_canon_get(self) -> char * + | + | cmt + | regvar_t_cmt_get(self) -> char * + | + | thisown + | The membership flag + | + | user + | regvar_t_user_get(self) -> char * + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on function rename_regvar in module ida_frame: + +rename_regvar(*args) -> 'int' + rename_regvar(pfn, v, user) -> int + + + Rename a register variable. + + @param pfn: function in question (C++: func_t *) + @param v: variable to rename (C++: regvar_t *) + @param user: new user-defined name for the register (C++: const char + *) + @return: Register variable error codes + +Help on function set_frame_size in module ida_frame: + +set_frame_size(*args) -> 'bool' + set_frame_size(pfn, frsize, frregs, argsize) -> bool + + + Set size of function frame. Note: The returned size may not include + all stack arguments. It does so only for __stdcall and __fastcall + calling conventions. To get the entire frame size for all cases use + get_struc_size(get_frame(pfn)). + + @param pfn: pointer to function structure (C++: func_t *) + @param frsize: size of function local variables (C++: asize_t) + @param frregs: size of saved registers (C++: ushort) + @param argsize: size of function arguments that will be purged from + the stack upon return (C++: asize_t) + @return: success + +Help on function set_purged in module ida_frame: + +set_purged(*args) -> 'bool' + set_purged(ea, nbytes, override_old_value) -> bool + + + Set the number of purged bytes for a function or data item (funcptr). + This function will update the database and plan to reanalyze items + referencing the specified address. It works only for processors with + 'PR_PURGING' bit in 16 and 32 bit modes. + + @param ea: address of the function of item (C++: ea_t) + @param nbytes: number of purged bytes (C++: int) + @param override_old_value: may overwrite old information about purged + bytes (C++: bool) + @return: success + +Help on function set_regvar_cmt in module ida_frame: + +set_regvar_cmt(*args) -> 'int' + set_regvar_cmt(pfn, v, cmt) -> int + + + Set comment for a register variable. + + @param pfn: function in question (C++: func_t *) + @param v: variable to rename (C++: regvar_t *) + @param cmt: new comment (C++: const char *) + @return: Register variable error codes + +Help on function soff_to_fpoff in module ida_frame: + +soff_to_fpoff(*args) -> 'sval_t' + soff_to_fpoff(pfn, soff) -> sval_t + + + Convert struct offsets into fp-relative offsets. This function + converts the offsets inside the 'struc_t' object into the frame + pointer offsets (for example, EBP-relative). + + @param pfn (C++: func_t *) + @param soff (C++: uval_t) + +Help on class stkpnt_t in module ida_frame: + +class stkpnt_t(builtins.object) + | Proxy of C++ stkpnt_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> stkpnt_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_stkpnt_t(...) + | delete_stkpnt_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | stkpnt_t_ea_get(self) -> ea_t + | + | spd + | stkpnt_t_spd_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class stkpnts_t in module ida_frame: + +class stkpnts_t(builtins.object) + | Proxy of C++ stkpnts_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> stkpnts_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_stkpnts_t(...) + | delete_stkpnts_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function update_fpd in module ida_frame: + +update_fpd(*args) -> 'bool' + update_fpd(pfn, fpd) -> bool + + + Update frame pointer delta. + + @param pfn: pointer to function structure (C++: func_t *) + @param fpd: new fpd value. cannot be bigger than the local variable + range size. (C++: asize_t) + @return: success + +Help on class xreflist_entry_t in module ida_frame: + +class xreflist_entry_t(builtins.object) + | Proxy of C++ xreflist_entry_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> xreflist_entry_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_xreflist_entry_t(...) + | delete_xreflist_entry_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | xreflist_entry_t_ea_get(self) -> ea_t + | + | opnum + | xreflist_entry_t_opnum_get(self) -> uchar + | + | thisown + | The membership flag + | + | type + | xreflist_entry_t_type_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class xreflist_t in module ida_frame: + +class xreflist_t(builtins.object) + | Proxy of C++ qvector< xreflist_entry_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'xreflist_entry_t const &' + | __getitem__(self, i) -> xreflist_entry_t + | + | __init__(self, *args) + | __init__(self) -> xreflist_t + | __init__(self, x) -> xreflist_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_xreflist_t(...) + | delete_xreflist_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'xreflist_entry_t const &' + | at(self, _idx) -> xreflist_entry_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< xreflist_entry_t >::const_iterator' + | begin(self) -> xreflist_entry_t + | begin(self) -> xreflist_entry_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< xreflist_entry_t >::const_iterator' + | end(self) -> xreflist_entry_t + | end(self) -> xreflist_entry_t + | + | erase(self, *args) -> 'qvector< xreflist_entry_t >::iterator' + | erase(self, it) -> xreflist_entry_t + | erase(self, first, last) -> xreflist_entry_t + | + | extract(self, *args) -> 'xreflist_entry_t *' + | extract(self) -> xreflist_entry_t + | + | find(self, *args) -> 'qvector< xreflist_entry_t >::const_iterator' + | find(self, x) -> xreflist_entry_t + | find(self, x) -> xreflist_entry_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=xreflist_entry_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< xreflist_entry_t >::iterator' + | insert(self, it, x) -> xreflist_entry_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'xreflist_entry_t &' + | push_back(self, x) + | push_back(self) -> xreflist_entry_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +=== ida_frame EPYDOC INJECTIONS === +ida_frame.REGVAR_ERROR_ARG +""" +function arguments are bad +""" + +ida_frame.REGVAR_ERROR_NAME +""" +the provided name(s) can't be accepted +""" + +ida_frame.REGVAR_ERROR_OK +""" +all ok +""" + +ida_frame.REGVAR_ERROR_RANGE +""" +the definition range is bad +""" + +ida_frame.STKVAR_VALID_SIZE +""" +x.dtyp contains correct variable type (for insns like 'lea' this bit +must be off) in general, dr_O references do not allow to determine the +variable size +""" +=== ida_frame EPYDOC INJECTIONS END === +Help on function add_func in module ida_funcs: + +add_func(*args) -> 'bool' + add_func(ea1, ea2=BADADDR) -> bool + + + Add a new function. If the function end address is 'BADADDR' , then + IDA will try to determine the function bounds by calling + find_func_bounds(..., 'FIND_FUNC_DEFINE' ). + + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @return: success + +Help on function add_func_ex in module ida_funcs: + +add_func_ex(*args) -> 'bool' + add_func_ex(pfn) -> bool + + + Add a new function. If the fn->end_ea is 'BADADDR' , then IDA will try + to determine the function bounds by calling find_func_bounds(..., + 'FIND_FUNC_DEFINE' ). + + @param pfn: ptr to filled function structure (C++: func_t *) + @return: success + +Help on function add_regarg in module ida_funcs: + +add_regarg(*args) -> 'void' + add_regarg(pfn, reg, tif, name) + +Help on function append_func_tail in module ida_funcs: + +append_func_tail(*args) -> 'bool' + append_func_tail(pfn, ea1, ea2) -> bool + + + Append a new tail chunk to the function definition. If the tail + already exists, then it will simply be added to the function tail list + Otherwise a new tail will be created and its owner will be set to be + our function If a new tail cannot be created, then this function will + fail. + + @param pfn (C++: func_t *) + @param ea1: start of the tail. If a tail already exists at the + specified address it must start at 'ea1' (C++: ea_t) + @param ea2: end of the tail. If a tail already exists at the specified + address it must end at 'ea2'. If specified as BADADDR, IDA + will determine the end address itself. (C++: ea_t) + +Help on function apply_idasgn_to in module ida_funcs: + +apply_idasgn_to(*args) -> 'int' + apply_idasgn_to(signame, ea, is_startup) -> int + + + Apply a signature file to the specified address. + + @param signame: short name of signature file (the file name without + path) (C++: const char *) + @param ea: address to apply the signature (C++: ea_t) + @param is_startup: if set, then the signature is treated as a startup + one for startup signature ida doesn't rename the + first function of the applied module. (C++: bool) + @return: Library function codes + +Help on function apply_startup_sig in module ida_funcs: + +apply_startup_sig(*args) -> 'bool' + apply_startup_sig(ea, startup) -> bool + + + Apply a startup signature file to the specified address. + + @param ea: address to apply the signature to; usually \inf{start_ea} + (C++: ea_t) + @param startup: the name of the signature file without path and + extension (C++: const char *) + @return: true if successfully applied the signature + +Help on function calc_func_size in module ida_funcs: + +calc_func_size(*args) -> 'asize_t' + calc_func_size(pfn) -> asize_t + + + Calculate function size. This function takes into account all + fragments of the function. + + @param pfn: ptr to function structure (C++: func_t *) + +Help on function calc_idasgn_state in module ida_funcs: + +calc_idasgn_state(*args) -> 'int' + calc_idasgn_state(n) -> int + + + Get state of a signature in the list of planned signatures + + @param n: number of signature in the list (0.. get_idasgn_qty() -1) + (C++: int) + @return: state of signature or IDASGN_BADARG + +Help on function calc_thunk_func_target in module ida_funcs: + +calc_thunk_func_target(*args) + calc_thunk_func_target(pfn) -> ea_t + + + Calculate target of a thunk function. + + @param pfn: pointer to function (may not be NULL) (C++: func_t *) + @return: the target function or BADADDR + +Help on function del_func in module ida_funcs: + +del_func(*args) -> 'bool' + del_func(ea) -> bool + + + Delete a function. + + @param ea: any address in the function entry chunk (C++: ea_t) + @return: success + +Help on function del_idasgn in module ida_funcs: + +del_idasgn(*args) -> 'int' + del_idasgn(n) -> int + + + Remove signature from the list of planned signatures. + + @param n: number of signature in the list (0.. get_idasgn_qty() -1) + (C++: int) + @return: IDASGN_OK , IDASGN_BADARG , IDASGN_APPLIED + +Help on function f_any in module ida_funcs: + +f_any(*args) -> 'bool' + f_any(arg1, arg2) -> bool + + + Helper function to accept any address. + +Help on function find_func_bounds in module ida_funcs: + +find_func_bounds(*args) -> 'int' + find_func_bounds(nfn, flags) -> int + + + Determine the boundaries of a new function. This function tries to + find the start and end addresses of a new function. It calls the + module with \ph{func_bounds} in order to fine tune the function + boundaries. + + @param nfn: structure to fill with information \ nfn->start_ea points + to the start address of the new function. (C++: func_t *) + @param flags: Find function bounds flags (C++: int) + @return: Find function bounds result codes + +Help on function func_contains in module ida_funcs: + +func_contains(*args) -> 'bool' + func_contains(pfn, ea) -> bool + + + Does the given function contain the given address? + + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on function func_does_return in module ida_funcs: + +func_does_return(*args) -> 'bool' + func_does_return(callee) -> bool + + + Does the function return?. To calculate the answer, 'FUNC_NORET' flag + and is_noret() are consulted The latter is required for imported + functions in the .idata section. Since in .idata we have only function + pointers but not functions, we have to introduce a special flag for + them. + + @param callee (C++: ea_t) + +Help on function func_item_iterator_decode_preceding_insn in module ida_funcs: + +func_item_iterator_decode_preceding_insn(*args) -> 'bool' + func_item_iterator_decode_preceding_insn(fii, visited, p_farref, out) -> bool + +Help on function func_item_iterator_decode_prev_insn in module ida_funcs: + +func_item_iterator_decode_prev_insn(*args) -> 'bool' + func_item_iterator_decode_prev_insn(fii, out) -> bool + +Help on function func_item_iterator_next in module ida_funcs: + +func_item_iterator_next(*args) -> 'bool' + func_item_iterator_next(fii, testf, ud) -> bool + +Help on function func_item_iterator_prev in module ida_funcs: + +func_item_iterator_prev(*args) -> 'bool' + func_item_iterator_prev(fii, testf, ud) -> bool + +Help on class func_item_iterator_t in module ida_funcs: + +class func_item_iterator_t(builtins.object) + | Proxy of C++ func_item_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_item_iterator_t + | __init__(self, pfn, _ea=BADADDR) -> func_item_iterator_t + | + | __next__(self, *args) -> 'bool' + | __next__(self, func, ud) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_item_iterator_t(...) + | delete_func_item_iterator_t(self) + | + | chunk(self, *args) -> 'range_t const &' + | chunk(self) -> range_t + | + | current(self, *args) -> 'ea_t' + | current(self) -> ea_t + | + | decode_preceding_insn(self, *args) -> 'bool' + | decode_preceding_insn(self, visited, p_farref, out) -> bool + | + | decode_prev_insn(self, *args) -> 'bool' + | decode_prev_insn(self, out) -> bool + | + | first(self, *args) -> 'bool' + | first(self) -> bool + | + | last(self, *args) -> 'bool' + | last(self) -> bool + | + | next = __next__(self, *args) -> 'bool' + | + | next_addr(self, *args) -> 'bool' + | next_addr(self) -> bool + | + | next_code(self, *args) -> 'bool' + | next_code(self) -> bool + | + | next_data(self, *args) -> 'bool' + | next_data(self) -> bool + | + | next_head(self, *args) -> 'bool' + | next_head(self) -> bool + | + | next_not_tail(self, *args) -> 'bool' + | next_not_tail(self) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, func, ud) -> bool + | + | prev_addr(self, *args) -> 'bool' + | prev_addr(self) -> bool + | + | prev_code(self, *args) -> 'bool' + | prev_code(self) -> bool + | + | prev_data(self, *args) -> 'bool' + | prev_data(self) -> bool + | + | prev_head(self, *args) -> 'bool' + | prev_head(self) -> bool + | + | prev_not_tail(self, *args) -> 'bool' + | prev_not_tail(self) -> bool + | + | set(self, *args) -> 'bool' + | set(self, pfn, _ea=BADADDR) -> bool + | + | set_range(self, *args) -> 'bool' + | set_range(self, ea1, ea2) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function func_parent_iterator_set in module ida_funcs: + +func_parent_iterator_set(*args) -> 'bool' + func_parent_iterator_set(fpi, pfn) -> bool + +Help on class func_parent_iterator_t in module ida_funcs: + +class func_parent_iterator_t(builtins.object) + | Proxy of C++ func_parent_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_parent_iterator_t + | __init__(self, _fnt) -> func_parent_iterator_t + | + | __next__(self, *args) -> 'bool' + | __next__(self) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_parent_iterator_t(...) + | delete_func_parent_iterator_t(self) + | + | first(self, *args) -> 'bool' + | first(self) -> bool + | + | last(self, *args) -> 'bool' + | last(self) -> bool + | + | next = __next__(self, *args) -> 'bool' + | + | parent(self, *args) -> 'ea_t' + | parent(self) -> ea_t + | + | prev(self, *args) -> 'bool' + | prev(self) -> bool + | + | reset_fnt(self, *args) -> 'void' + | reset_fnt(self, _fnt) + | + | set(self, *args) -> 'bool' + | set(self, _fnt) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on class func_t in module ida_funcs: + +class func_t(ida_range.range_t) + | Proxy of C++ func_t class. + | + | Method resolution order: + | func_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __get_points__(self, *args) -> 'dynamic_wrapped_array_t< stkpnt_t >' + | __get_points__(self) -> stkpnt_array + | + | __get_regvars__(self, *args) -> 'dynamic_wrapped_array_t< regvar_t >' + | __get_regvars__(self) -> regvar_array + | + | __get_tails__(self, *args) -> 'dynamic_wrapped_array_t< range_t >' + | __get_tails__(self) -> range_array + | + | __init__(self, *args) + | __init__(self, start=0, end=0, f=0) -> func_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_t(...) + | delete_func_t(self) + | + | analyzed_sp(self, *args) -> 'bool' + | analyzed_sp(self) -> bool + | + | does_return(self, *args) -> 'bool' + | does_return(self) -> bool + | + | is_far(self, *args) -> 'bool' + | is_far(self) -> bool + | + | need_prolog_analysis(self, *args) -> 'bool' + | need_prolog_analysis(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | argsize + | func_t_argsize_get(self) -> asize_t + | + | color + | func_t_color_get(self) -> bgcolor_t + | + | flags + | func_t_flags_get(self) -> uint64 + | + | fpd + | func_t_fpd_get(self) -> asize_t + | + | frame + | func_t_frame_get(self) -> uval_t + | + | frregs + | func_t_frregs_get(self) -> ushort + | + | frsize + | func_t_frsize_get(self) -> asize_t + | + | llabelqty + | func_t_llabelqty_get(self) -> int + | + | llabels + | func_t_llabels_get(self) -> llabel_t * + | + | owner + | func_t_owner_get(self) -> ea_t + | + | pntqty + | func_t_pntqty_get(self) -> uint32 + | + | points + | __get_points__(self) -> stkpnt_array + | + | referers + | func_t_referers_get(self) -> ea_t * + | + | refqty + | func_t_refqty_get(self) -> int + | + | regargqty + | func_t_regargqty_get(self) -> int + | + | regargs + | func_t_regargs_get(self) -> regarg_t + | + | regvarqty + | func_t_regvarqty_get(self) -> int + | + | regvars + | __get_regvars__(self) -> regvar_array + | + | tailqty + | func_t_tailqty_get(self) -> int + | + | tails + | __get_tails__(self) -> range_array + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on function func_t__from_ptrval__ in module ida_funcs: + +func_t__from_ptrval__(*args) -> 'func_t *' + func_t__from_ptrval__(ptrval) -> func_t + +Help on function func_tail_iterator_set in module ida_funcs: + +func_tail_iterator_set(*args) -> 'bool' + func_tail_iterator_set(fti, pfn, ea) -> bool + +Help on function func_tail_iterator_set_ea in module ida_funcs: + +func_tail_iterator_set_ea(*args) -> 'bool' + func_tail_iterator_set_ea(fti, ea) -> bool + +Help on class func_tail_iterator_t in module ida_funcs: + +class func_tail_iterator_t(builtins.object) + | Proxy of C++ func_tail_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_tail_iterator_t + | __init__(self, _pfn, ea=BADADDR) -> func_tail_iterator_t + | + | __next__(self, *args) -> 'bool' + | __next__(self) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_tail_iterator_t(...) + | delete_func_tail_iterator_t(self) + | + | chunk(self, *args) -> 'range_t const &' + | chunk(self) -> range_t + | + | first(self, *args) -> 'bool' + | first(self) -> bool + | + | last(self, *args) -> 'bool' + | last(self) -> bool + | + | main(self, *args) -> 'bool' + | main(self) -> bool + | + | next = __next__(self, *args) -> 'bool' + | + | prev(self, *args) -> 'bool' + | prev(self) -> bool + | + | set(self, *args) -> 'bool' + | set(self, _pfn, ea=BADADDR) -> bool + | + | set_ea(self, *args) -> 'bool' + | set_ea(self, ea) -> bool + | + | set_range(self, *args) -> 'bool' + | set_range(self, ea1, ea2) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function get_current_idasgn in module ida_funcs: + +get_current_idasgn(*args) -> 'int' + get_current_idasgn() -> int + + + Get number of the the current signature. + + @return: 0..n-1 + +Help on function get_fchunk in module ida_funcs: + +get_fchunk(*args) -> 'func_t *' + get_fchunk(ea) -> func_t + + + Get pointer to function chunk structure by address. + + @param ea: any address in a function chunk (C++: ea_t) + @return: ptr to a function chunk or NULL. This function may return a + function entry as well as a function tail. + +Help on function get_fchunk_num in module ida_funcs: + +get_fchunk_num(*args) -> 'int' + get_fchunk_num(ea) -> int + + + Get ordinal number of a function chunk in the global list of function + chunks. + + @param ea: any address in the function chunk (C++: ea_t) + @return: number of function chunk (0.. get_fchunk_qty() -1). -1 means + 'no function chunk at the specified address'. + +Help on function get_fchunk_qty in module ida_funcs: + +get_fchunk_qty(*args) -> 'size_t' + get_fchunk_qty() -> size_t + + + Get total number of function chunks in the program. + +Help on function get_fchunk_referer in module ida_funcs: + +get_fchunk_referer(*args) -> 'ea_t' + get_fchunk_referer(ea, idx) -> ea_t + +Help on function get_func in module ida_funcs: + +get_func(*args) -> 'func_t *' + get_func(ea) -> func_t + + + Get pointer to function structure by address. + + @param ea: any address in a function (C++: ea_t) + @return: ptr to a function or NULL. This function returns a function + entry chunk. + +Help on function get_func_bitness in module ida_funcs: + +get_func_bitness(*args) -> 'int' + get_func_bitness(pfn) -> int + + + Get function bitness (which is equal to the function segment bitness). + pfn==NULL => returns 0 + + @param pfn (C++: const func_t *) + +Help on function get_func_bits in module ida_funcs: + +get_func_bits(*args) -> 'int' + get_func_bits(pfn) -> int + + + Get number of bits in the function addressing. + + + @param pfn (C++: const func_t *) + +Help on function get_func_bytes in module ida_funcs: + +get_func_bytes(*args) -> 'int' + get_func_bytes(pfn) -> int + + + Get number of bytes in the function addressing. + + + @param pfn (C++: const func_t *) + +Help on function get_func_chunknum in module ida_funcs: + +get_func_chunknum(*args) -> 'int' + get_func_chunknum(pfn, ea) -> int + + + Get the containing tail chunk of 'ea'. + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on function get_func_cmt in module ida_funcs: + +get_func_cmt(*args) -> 'qstring *' + get_func_cmt(pfn, repeatable) -> str + + + Get function comment. + + @param pfn: ptr to function structure (C++: const func_t *) + @param repeatable: get repeatable comment? (C++: bool) + @return: size of comment or -1 In fact this function works with + function chunks too. + +Help on function get_func_name in module ida_funcs: + +get_func_name(*args) -> 'qstring *' + get_func_name(ea) -> str + + + Get function name. + + @param ea: any address in the function (C++: ea_t) + @return: length of the function name + +Help on function get_func_num in module ida_funcs: + +get_func_num(*args) -> 'int' + get_func_num(ea) -> int + + + Get ordinal number of a function. + + @param ea: any address in the function (C++: ea_t) + @return: number of function (0.. get_func_qty() -1). -1 means 'no + function at the specified address'. + +Help on function get_func_qty in module ida_funcs: + +get_func_qty(*args) -> 'size_t' + get_func_qty() -> size_t + + + Get total number of functions in the program. + +Help on function get_func_ranges in module ida_funcs: + +get_func_ranges(*args) -> 'ea_t' + get_func_ranges(ranges, pfn) -> ea_t + + + Get function ranges. + + @param ranges: buffer to receive the range info (C++: rangeset_t *) + @param pfn: ptr to function structure (C++: func_t *) + @return: end address of the last function range (BADADDR-error) + +Help on function get_idasgn_desc in module ida_funcs: + +get_idasgn_desc(*args) -> 'PyObject *' + get_idasgn_desc(n) -> PyObject * + + + Get information about a signature in the list. + It returns: (name of signature, names of optional libraries) + + See also: get_idasgn_desc_with_matches + + @param n: number of signature in the list (0..get_idasgn_qty()-1) + @return: None on failure or tuple(signame, optlibs) + +Help on function get_idasgn_desc_with_matches in module ida_funcs: + +get_idasgn_desc_with_matches(*args) -> 'PyObject *' + get_idasgn_desc_with_matches(n) -> PyObject * + + + Get information about a signature in the list. + It returns: (name of signature, names of optional libraries, number of matches) + + @param n: number of signature in the list (0..get_idasgn_qty()-1) + @return: None on failure or tuple(signame, optlibs, nmatches) + +Help on function get_idasgn_qty in module ida_funcs: + +get_idasgn_qty(*args) -> 'int' + get_idasgn_qty() -> int + + + Get number of signatures in the list of planned and applied + signatures. + + @return: 0..n + +Help on function get_idasgn_title in module ida_funcs: + +get_idasgn_title(*args) -> 'qstring *' + get_idasgn_title(name) -> str + + + Get full description of the signature by its short name. + + @param name: short name of a signature (C++: const char *) + @return: size of signature description or -1 + +Help on function get_next_fchunk in module ida_funcs: + +get_next_fchunk(*args) -> 'func_t *' + get_next_fchunk(ea) -> func_t + + + Get pointer to the next function chunk in the global list. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function chunk or NULL if next function chunk doesn't + exist + +Help on function get_next_func in module ida_funcs: + +get_next_func(*args) -> 'func_t *' + get_next_func(ea) -> func_t + + + Get pointer to the next function. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function or NULL if next function doesn't exist + +Help on function get_next_func_addr in module ida_funcs: + +get_next_func_addr(*args) -> 'ea_t' + get_next_func_addr(pfn, ea) -> ea_t + +Help on function get_prev_fchunk in module ida_funcs: + +get_prev_fchunk(*args) -> 'func_t *' + get_prev_fchunk(ea) -> func_t + + + Get pointer to the previous function chunk in the global list. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function chunk or NULL if previous function chunk + doesn't exist + +Help on function get_prev_func in module ida_funcs: + +get_prev_func(*args) -> 'func_t *' + get_prev_func(ea) -> func_t + + + Get pointer to the previous function. + + @param ea: any address in the program (C++: ea_t) + @return: ptr to function or NULL if previous function doesn't exist + +Help on function get_prev_func_addr in module ida_funcs: + +get_prev_func_addr(*args) -> 'ea_t' + get_prev_func_addr(pfn, ea) -> ea_t + +Help on function getn_fchunk in module ida_funcs: + +getn_fchunk(*args) -> 'func_t *' + getn_fchunk(n) -> func_t + + + Get pointer to function chunk structure by number. + + @param n: number of function chunk, is in range 0.. get_fchunk_qty() + -1 (C++: int) + @return: ptr to a function chunk or NULL. This function may return a + function entry as well as a function tail. + +Help on function getn_func in module ida_funcs: + +getn_func(*args) -> 'func_t *' + getn_func(n) -> func_t + + + Get pointer to function structure by number. + + @param n: number of function, is in range 0.. get_func_qty() -1 (C++: + size_t) + @return: ptr to a function or NULL. This function returns a function + entry chunk. + +Help on function is_finally_visible_func in module ida_funcs: + +is_finally_visible_func(*args) -> 'bool' + is_finally_visible_func(pfn) -> bool + + + Is the function visible (event after considering 'SCF_SHHID_FUNC' )? + + + @param pfn (C++: func_t *) + +Help on function is_func_entry in module ida_funcs: + +is_func_entry(*args) -> 'bool' + is_func_entry(pfn) -> bool + + + Does function describe a function entry chunk? + + + @param pfn (C++: const func_t *) + +Help on function is_func_locked in module ida_funcs: + +is_func_locked(*args) -> 'bool' + is_func_locked(pfn) -> bool + + + Is the function pointer locked? + + + @param pfn (C++: const func_t *) + +Help on function is_func_tail in module ida_funcs: + +is_func_tail(*args) -> 'bool' + is_func_tail(pfn) -> bool + + + Does function describe a function tail chunk? + + + @param pfn (C++: const func_t *) + +Help on function is_same_func in module ida_funcs: + +is_same_func(*args) -> 'bool' + is_same_func(ea1, ea2) -> bool + + + Do two addresses belong to the same function? + + + @param ea1 (C++: ea_t) + @param ea2 (C++: ea_t) + +Help on function is_visible_func in module ida_funcs: + +is_visible_func(*args) -> 'bool' + is_visible_func(pfn) -> bool + + + Is the function visible (not hidden)? + + + @param pfn (C++: func_t *) + +Help on class lock_func in module ida_funcs: + +class lock_func(builtins.object) + | Proxy of C++ lock_func class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _pfn) -> lock_func + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lock_func(...) + | delete_lock_func(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 + +Help on function lock_func_range in module ida_funcs: + +lock_func_range(*args) -> 'void' + lock_func_range(pfn, lock) + + + Lock function pointer Locked pointers are guaranteed to remain valid + until they are unlocked. Ranges with locked pointers cannot be deleted + or moved. + + @param pfn (C++: const func_t *) + @param lock (C++: bool) + +Help on function plan_to_apply_idasgn in module ida_funcs: + +plan_to_apply_idasgn(*args) -> 'int' + plan_to_apply_idasgn(fname) -> int + + + Add a signature file to the list of planned signature files. + + @param fname: file name. should not contain directory part. (C++: + const char *) + @return: 0 if failed, otherwise number of planned (and applied) + signatures + +Help on class range_array in module ida_funcs: + +class range_array(builtins.object) + | Proxy of C++ dynamic_wrapped_array_t< range_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __init__(self, *args) + | __init__(self, _data, _count) -> range_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_range_array(...) + | delete_range_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | range_array_count_get(self) -> size_t + | + | data + | range_array_data_get(self) -> range_t + | + | thisown + | The membership flag + +Help on function read_regargs in module ida_funcs: + +read_regargs(*args) -> 'void' + read_regargs(pfn) + +Help on function reanalyze_function in module ida_funcs: + +reanalyze_function(*args) -> 'void' + reanalyze_function(pfn, ea1=0, ea2=BADADDR, analyze_parents=False) + + + Reanalyze a function. This function plans to analyzes all chunks of + the given function. Optional parameters (ea1, ea2) may be used to + narrow the analyzed range. + + @param pfn: pointer to a function (C++: func_t *) + @param ea1: start of the range to analyze (C++: ea_t) + @param ea2: end of range to analyze (C++: ea_t) + @param analyze_parents: meaningful only if pfn points to a function + tail. if true, all tail parents will be + reanalyzed. if false, only the given tail will + be reanalyzed. (C++: bool) + +Help on function reanalyze_noret_flag in module ida_funcs: + +reanalyze_noret_flag(*args) -> 'bool' + reanalyze_noret_flag(ea) -> bool + + + Plan to reanalyze noret flag. This function does not remove FUNC_NORET + if it is already present. It just plans to reanalysis. + + @param ea (C++: ea_t) + +Help on class regarg_t in module ida_funcs: + +class regarg_t(builtins.object) + | Proxy of C++ regarg_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regarg_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_regarg_t(...) + | delete_regarg_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | regarg_t_name_get(self) -> char * + | + | reg + | regarg_t_reg_get(self) -> int + | + | thisown + | The membership flag + | + | type + | regarg_t_type_get(self) -> type_t * + +Help on class regvar_array in module ida_funcs: + +class regvar_array(builtins.object) + | Proxy of C++ dynamic_wrapped_array_t< regvar_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'regvar_t const &' + | __getitem__(self, i) -> regvar_t const & + | + | __init__(self, *args) + | __init__(self, _data, _count) -> regvar_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_regvar_array(...) + | delete_regvar_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | regvar_array_count_get(self) -> size_t + | + | data + | regvar_array_data_get(self) -> regvar_t * + | + | thisown + | The membership flag + +Help on function remove_func_tail in module ida_funcs: + +remove_func_tail(*args) -> 'bool' + remove_func_tail(pfn, tail_ea) -> bool + + + Remove a function tail. If the tail belongs only to one function, it + will be completely removed. Otherwise if the function was the tail + owner, the first function using this tail becomes the owner of the + tail. + + @param pfn (C++: func_t *) + @param tail_ea (C++: ea_t) + +Help on function set_func_cmt in module ida_funcs: + +set_func_cmt(*args) -> 'bool' + set_func_cmt(pfn, cmt, repeatable) -> bool + + + Set function comment. This function works with function chunks too. + + @param pfn: ptr to function structure (C++: const func_t *) + @param cmt: comment string, may be multiline (with ' '). Use empty + str ("") to delete comment (C++: const char *) + @param repeatable: set repeatable comment? (C++: bool) + +Help on function set_func_end in module ida_funcs: + +set_func_end(*args) -> 'bool' + set_func_end(ea, newend) -> bool + + + Move function chunk end address. + + @param ea: any address in the function (C++: ea_t) + @param newend: new end address of the function (C++: ea_t) + @return: success + +Help on function set_func_name_if_jumpfunc in module ida_funcs: + +set_func_name_if_jumpfunc(*args) -> 'int' + set_func_name_if_jumpfunc(pfn, oldname) -> int + + + Give a meaningful name to function if it consists of only 'jump' + instruction. + + @param pfn: pointer to function (may be NULL) (C++: func_t *) + @param oldname: old name of function. if old name was in "j_..." form, + then we may discard it and set a new name. if oldname + is not known, you may pass NULL. (C++: const char *) + @return: success + +Help on function set_func_start in module ida_funcs: + +set_func_start(*args) -> 'int' + set_func_start(ea, newstart) -> int + + + Move function chunk start address. + + @param ea: any address in the function (C++: ea_t) + @param newstart: new end address of the function (C++: ea_t) + @return: Function move result codes + +Help on function set_noret_insn in module ida_funcs: + +set_noret_insn(*args) -> 'bool' + set_noret_insn(insn_ea, noret) -> bool + + + Signal a non-returning instruction. This function can be used by the + processor module to tell the kernel about non-returning instructions + (like call exit). The kernel will perform the global function analysis + and find out if the function returns at all. This analysis will be + done at the first call to 'func_does_return()' + + @param insn_ea (C++: ea_t) + @param noret (C++: bool) + @return: true if the instruction 'noret' flag has been changed + +Help on function set_tail_owner in module ida_funcs: + +set_tail_owner(*args) -> 'bool' + set_tail_owner(fnt, func_start) -> bool + + + Set a function as the possessing function of a function tail. The + function should already refer to the tail (after append_func_tail). + + @param fnt (C++: func_t *) + @param func_start (C++: ea_t) + +Help on function set_visible_func in module ida_funcs: + +set_visible_func(*args) -> 'void' + set_visible_func(pfn, visible) + + + Set visibility of function. + + + @param pfn (C++: func_t *) + @param visible (C++: bool) + +Help on class stkpnt_array in module ida_funcs: + +class stkpnt_array(builtins.object) + | Proxy of C++ dynamic_wrapped_array_t< stkpnt_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'stkpnt_t const &' + | __getitem__(self, i) -> stkpnt_t const & + | + | __init__(self, *args) + | __init__(self, _data, _count) -> stkpnt_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_stkpnt_array(...) + | delete_stkpnt_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | count + | stkpnt_array_count_get(self) -> size_t + | + | data + | stkpnt_array_data_get(self) -> stkpnt_t * + | + | thisown + | The membership flag + +Help on function try_to_add_libfunc in module ida_funcs: + +try_to_add_libfunc(*args) -> 'int' + try_to_add_libfunc(ea) -> int + + + Apply the currently loaded signature file to the specified address. If + a library function is found, then create a function and name it + accordingly. + + @param ea: any address in the program (C++: ea_t) + @return: Library function codes + +Help on function update_func in module ida_funcs: + +update_func(*args) -> 'bool' + update_func(pfn) -> bool + + + Update information about a function in the database ( 'func_t' ). You + must not change the function start and end addresses using this + function. Use 'set_func_start()' and 'set_func_end()' for it. + + @param pfn: ptr to function structure (C++: func_t *) + @return: success + +=== ida_funcs EPYDOC INJECTIONS === +ida_funcs.FIND_FUNC_DEFINE +""" +create instruction if undefined byte is encountered +""" + +ida_funcs.FIND_FUNC_EXIST +""" +its bounds are returned in 'nfn'. + +function exists already. +""" + +ida_funcs.FIND_FUNC_IGNOREFN +""" +ignore existing function boundaries. by default the function returns +function boundaries if ea belongs to a function. +""" + +ida_funcs.FIND_FUNC_KEEPBD +""" +just create instructions inside the boundaries. + +do not modify incoming function boundaries, +""" + +ida_funcs.FIND_FUNC_NORMAL +""" +stop processing if undefined byte is encountered +""" + +ida_funcs.FIND_FUNC_OK +""" +ok, 'nfn' is ready for 'add_func()' +""" + +ida_funcs.FIND_FUNC_UNDEF +""" +nfn->end_ea will have the address of the unexplored byte. + +function has instructions that pass execution flow to unexplored +bytes. +""" + +ida_funcs.FUNC_BOTTOMBP +""" +BP points to the bottom of the stack frame. +""" + +ida_funcs.FUNC_FAR +""" +Far function. +""" + +ida_funcs.FUNC_FRAME +""" +Function uses frame pointer (BP) +""" + +ida_funcs.FUNC_FUZZY_SP +""" +for example: and esp, 0FFFFFFF0h + +Function changes SP in untraceable way, +""" + +ida_funcs.FUNC_HIDDEN +""" +A hidden function chunk. +""" + +ida_funcs.FUNC_LIB +""" +Library function. +""" + +ida_funcs.FUNC_LUMINA +""" +Function info is provided by Lumina. +""" + +ida_funcs.FUNC_NORET +""" +Function doesn't return. +""" + +ida_funcs.FUNC_NORET_PENDING +""" +This flag is verified upon 'func_does_return()' + +Function 'non-return' analysis must be performed. +""" + +ida_funcs.FUNC_PROLOG_OK +""" +by last SP-analysis + +Prolog analysis has be performed +""" + +ida_funcs.FUNC_PURGED_OK +""" +'argsize' field has been validated. If this bit is clear and 'argsize' +is 0, then we do not known the real number of bytes removed from the +stack. This bit is handled by the processor module. +""" + +ida_funcs.FUNC_SP_READY +""" +SP-analysis has been performed. If this flag is on, the stack change +points should not be not modified anymore. Currently this analysis is +performed only for PC +""" + +ida_funcs.FUNC_STATICDEF +""" +Static function. +""" + +ida_funcs.FUNC_TAIL +""" +This is a function tail. Other bits must be clear (except +'FUNC_HIDDEN' ). +""" + +ida_funcs.FUNC_THUNK +""" +Thunk (jump) function. +""" + +ida_funcs.FUNC_USERFAR +""" +of the function + +User has specified far-ness +""" + +ida_funcs.IDASGN_APPLIED +""" +signature is already applied +""" + +ida_funcs.IDASGN_BADARG +""" +bad number of signature +""" + +ida_funcs.IDASGN_CURRENT +""" +signature is currently being applied +""" + +ida_funcs.IDASGN_OK +""" +ok +""" + +ida_funcs.IDASGN_PLANNED +""" +signature is planned to be applied +""" + +ida_funcs.LIBFUNC_DELAY +""" +no decision because of lack of information +""" + +ida_funcs.LIBFUNC_FOUND +""" +ok, library function is found +""" + +ida_funcs.LIBFUNC_NONE +""" +no, this is not a library function +""" + +ida_funcs.MOVE_FUNC_BADSTART +""" +bad new start address +""" + +ida_funcs.MOVE_FUNC_NOCODE +""" +no instruction at 'newstart' +""" + +ida_funcs.MOVE_FUNC_NOFUNC +""" +no function at 'ea' +""" + +ida_funcs.MOVE_FUNC_OK +""" +ok +""" + +ida_funcs.MOVE_FUNC_REFUSED +""" +a plugin refused the action +""" +=== ida_funcs EPYDOC INJECTIONS END === +Help on class BasicBlock in module ida_gdl: + +class BasicBlock(builtins.object) + | Basic block class. It is returned by the Flowchart class + | + | Methods defined here: + | + | __init__(self, id, bb, fc) + | Initialize self. See help(type(self)) for accurate signature. + | + | preds(self) + | Iterates the predecessors list + | + | succs(self) + | Iterates the successors list + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | startEA + +Help on class FlowChart in module ida_gdl: + +class FlowChart(builtins.object) + | Flowchart class used to determine basic blocks. + | Check ex_gdl_qflow_chart.py for sample usage. + | + | Methods defined here: + | + | __getitem__(self, index) + | Returns a basic block + | + | @return: BasicBlock + | + | __init__(self, f=None, bounds=None, flags=0) + | Constructor + | @param f: A func_t type, use get_func(ea) to get a reference + | @param bounds: A tuple of the form (start, end). Used if "f" is None + | @param flags: one of the FC_xxxx flags. One interesting flag is FC_PREDS + | + | __iter__(self) + | + | _getitem(self, index) + | + | refresh(self) + | Refreshes the flow chart + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | size + +Help on function display_gdl in module ida_gdl: + +display_gdl(*args) -> 'int' + display_gdl(fname) -> int + + + Display GDL file by calling wingraph32. The exact name of the grapher + is taken from the configuration file and set up by + 'setup_graph_subsystem()' . + + @param fname (C++: const char *) + @return: error code from os, 0 if ok + +Help on function gen_complex_call_chart in module ida_gdl: + +gen_complex_call_chart(*args) -> 'bool' + gen_complex_call_chart(filename, wait, title, ea1, ea2, flags, recursion_depth=-1) -> bool + + + Build and display a complex xref graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param wait: message to display during graph building (C++: const char + *) + @param title: graph title (C++: const char *) + @param ea1: address range (C++: ea_t) + @param ea2: address range (C++: ea_t) + @param flags: combination of Call chart building flags and Flow + graph building flags . if none of CHART_GEN_DOT , + CHART_GEN_GDL , CHART_WINGRAPH is specified, the + function will return false. (C++: int) + @param recursion_depth: optional limit of recursion (C++: int32) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function gen_flow_graph in module ida_gdl: + +gen_flow_graph(*args) -> 'bool' + gen_flow_graph(filename, title, pfn, ea1, ea2, gflags) -> bool + + + Build and display a flow graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param title: graph title (C++: const char *) + @param pfn: function to graph (C++: func_t *) + @param ea1: if pfn == NULL, then the address range (C++: ea_t) + @param ea2: if pfn == NULL, then the address range (C++: ea_t) + @param gflags: combination of Flow graph building flags . if none of + CHART_GEN_DOT , CHART_GEN_GDL , CHART_WINGRAPH is + specified, the function will return false (C++: int) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function gen_gdl in module ida_gdl: + +gen_gdl(*args) -> 'void' + gen_gdl(g, fname) + + + Create GDL file for graph. + + + @param g (C++: const gdl_graph_t *) + @param fname (C++: const char *) + +Help on function gen_simple_call_chart in module ida_gdl: + +gen_simple_call_chart(*args) -> 'bool' + gen_simple_call_chart(filename, wait, title, gflags) -> bool + + + Build and display a simple function call graph. + + @param filename: output file name. the file extension is not used. + maybe NULL. (C++: const char *) + @param wait: message to display during graph building (C++: const char + *) + @param title: graph title (C++: const char *) + @param gflags: combination of CHART_NOLIBFUNCS and Flow graph + building flags . if none of CHART_GEN_DOT , + CHART_GEN_GDL , CHART_WINGRAPH is specified, the + function will return false. (C++: int) + @return: success. if fails, a warning message is displayed on the + screen + +Help on function is_noret_block in module ida_gdl: + +is_noret_block(*args) -> 'bool' + is_noret_block(btype) -> bool + + + Does this block never return? + + + @param btype (C++: fc_block_type_t) + +Help on function is_ret_block in module ida_gdl: + +is_ret_block(*args) -> 'bool' + is_ret_block(btype) -> bool + + + Does this block return? + + + @param btype (C++: fc_block_type_t) + +Help on class node_iterator in module ida_gdl: + +class node_iterator(builtins.object) + | Proxy of C++ node_iterator class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, n) -> bool + | + | __init__(self, *args) + | __init__(self, _g, n) -> node_iterator + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, n) -> bool + | + | __ref__(self, *args) -> 'int' + | __ref__(self) -> int + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_node_iterator(...) + | delete_node_iterator(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qbasic_block_t in module ida_gdl: + +class qbasic_block_t(ida_range.range_t) + | Proxy of C++ qbasic_block_t class. + | + | Method resolution order: + | qbasic_block_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> qbasic_block_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qbasic_block_t(...) + | delete_qbasic_block_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on class qflow_chart_t in module ida_gdl: + +class qflow_chart_t(builtins.object) + | Proxy of C++ qflow_chart_t class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'qbasic_block_t *' + | __getitem__(self, n) -> qbasic_block_t + | + | __init__(self, *args) + | __init__(self) -> qflow_chart_t + | __init__(self, _title, _pfn, _ea1, _ea2, _flags) -> qflow_chart_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qflow_chart_t(...) + | delete_qflow_chart_t(self) + | + | append_to_flowchart(self, *args) -> 'void' + | append_to_flowchart(self, ea1, ea2) + | + | calc_block_type(self, *args) -> 'fc_block_type_t' + | calc_block_type(self, blknum) -> fc_block_type_t + | + | create(self, *args) -> 'void' + | create(self, _title, _pfn, _ea1, _ea2, _flags) + | create(self, _title, ranges, _flags) + | + | get_node_label(self, *args) -> 'char *' + | get_node_label(self, arg2, arg3, arg4) -> char * + | + | is_noret_block(self, *args) -> 'bool' + | is_noret_block(self, blknum) -> bool + | + | is_ret_block(self, *args) -> 'bool' + | is_ret_block(self, blknum) -> bool + | + | npred(self, *args) -> 'int' + | npred(self, node) -> int + | + | nsucc(self, *args) -> 'int' + | nsucc(self, node) -> int + | + | pred(self, *args) -> 'int' + | pred(self, node, i) -> int + | + | print_names(self, *args) -> 'bool' + | print_names(self) -> bool + | + | print_node_attributes(self, *args) -> 'void' + | print_node_attributes(self, arg2, arg3) + | + | refresh(self, *args) -> 'void' + | refresh(self) + | + | size(self, *args) -> 'int' + | size(self) -> int + | + | succ(self, *args) -> 'int' + | succ(self, node, i) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bounds + | qflow_chart_t_bounds_get(self) -> range_t + | + | flags + | qflow_chart_t_flags_get(self) -> int + | + | nproper + | qflow_chart_t_nproper_get(self) -> int + | + | pfn + | qflow_chart_t_pfn_get(self) -> func_t * + | + | thisown + | The membership flag + | + | title + | qflow_chart_t_title_get(self) -> qstring * + +=== ida_gdl EPYDOC INJECTIONS === +ida_gdl.CHART_FOLLOW_DIRECTION +""" +analyze references to added blocks only in the direction of the +reference who discovered the current block +""" + +ida_gdl.CHART_GEN_DOT +""" +generate .dot file (file extension is forced to .dot) +""" + +ida_gdl.CHART_GEN_GDL +""" +generate .gdl file (file extension is forced to .gdl) +""" + +ida_gdl.CHART_IGNORE_LIB_FROM +""" +ignore references from library functions +""" + +ida_gdl.CHART_IGNORE_LIB_TO +""" +ignore references to library functions +""" + +ida_gdl.CHART_NOLIBFUNCS +""" +don't include library functions in the graph +""" + +ida_gdl.CHART_PRINT_DOTS +""" +print dots if xrefs exist outside of the range recursion depth +""" + +ida_gdl.CHART_PRINT_NAMES +""" +print labels for each block? +""" + +ida_gdl.CHART_RECURSIVE +""" +analyze added blocks +""" + +ida_gdl.CHART_REFERENCED +""" +references from the addresses in the list +""" + +ida_gdl.CHART_REFERENCING +""" +references to the addresses in the list +""" + +ida_gdl.CHART_WINGRAPH +""" +call grapher to display the graph +""" + +ida_gdl.FC_APPND +""" +multirange flowchart (set by append_to_flowchart) +""" + +ida_gdl.FC_CHKBREAK +""" +build_qflow_chart() may be aborted by user +""" + +ida_gdl.FC_NOEXT +""" +do not compute external blocks. Use this to prevent jumps leaving the +function from appearing in the flow chart. Unless specified, the +targets of those outgoing jumps will be present in the flow chart +under the form of one-instruction blocks +""" + +ida_gdl.FC_PREDS +""" +compute predecessor lists +""" + +ida_gdl.FC_PRINT +""" +print names (used only by display_flow_chart()) +""" +=== ida_gdl EPYDOC INJECTIONS END === +Help on class GraphViewer in module ida_graph: + +class GraphViewer(ida_kernwin.CustomIDAMemo) + | Proxy of C++ View_Hooks class. + | + | Method resolution order: + | GraphViewer + | ida_kernwin.CustomIDAMemo + | ida_kernwin.View_Hooks + | builtins.object + | + | Methods defined here: + | + | AddCommand(self, title, shortcut) + | + | AddEdge(self, src_node, dest_node) + | Creates an edge between two given node ids + | + | AddNode(self, obj) + | Creates a node associated with the given object and returns the node id + | + | Clear(self) + | Clears all the nodes and edges + | + | Close(self) + | Closes the graph. + | It is possible to call Show() again (which will recreate the graph) + | + | Count(self) + | Returns the node count + | + | OnCommand(self, cmd_id) + | + | OnPopup(self, widget, popup_handle) + | + | OnRefresh(self) + | Event called when the graph is refreshed or first created. + | From this event you are supposed to create nodes and edges. + | This callback is mandatory. + | + | @note: ***It is important to clear previous nodes before adding nodes.*** + | @return: Returning True tells the graph viewer to use the items. Otherwise old items will be used. + | + | Select(self, node_id) + | Selects a node on the graph + | + | Show(self) + | Shows an existing graph or creates a new one + | + | @return: Boolean + | + | __getitem__(self, idx) + | Returns a reference to the object associated with this node id + | + | __init__(self, title, close_open=False) + | Constructs the GraphView object. + | Please do not remove or rename the private fields + | + | @param title: The title of the graph window + | @param close_open: Should it attempt to close an existing graph (with same title) before creating this graph? + | + | __iter__(self) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | UI_Hooks_Trampoline = , , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | view_activated(self, view) + | + | view_click(self, view, ve) + | view_click(self, view, event) + | + | view_close(self, view, *args) + | view_close(self, view) + | + | view_curpos(self, view, *args) + | view_curpos(self, view) + | + | view_dblclick(self, view, ve) + | view_dblclick(self, view, event) + | + | view_deactivated(self, view) + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, view, ve) + | view_mouse_over(self, view, event) + | + | view_switched(self, view, rt) + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods inherited from ida_kernwin.CustomIDAMemo: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_kernwin.View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_View_Hooks(...) + | delete_View_Hooks(self) + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | view_created(self, *args) -> 'void' + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_kernwin.View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on class TPointDouble in module ida_graph: + +class TPointDouble(builtins.object) + | Proxy of C++ TPointDouble class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> TPointDouble + | __init__(self, a, b) -> TPointDouble + | __init__(self, r) -> TPointDouble + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_TPointDouble(...) + | delete_TPointDouble(self) + | + | add(self, *args) -> 'void' + | add(self, r) + | + | negate(self, *args) -> 'void' + | negate(self) + | + | sub(self, *args) -> 'void' + | sub(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | x + | TPointDouble_x_get(self) -> double + | + | y + | TPointDouble_y_get(self) -> double + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function calc_dist in module ida_graph: + +calc_dist(*args) -> 'double' + calc_dist(p, q) -> double + + + Calculate distance between p and q. + + + @param p (C++: point_t) + @param q (C++: point_t) + +Help on function clr_node_info in module ida_graph: + +clr_node_info(*args) -> 'void' + clr_node_info(gid, node, flags) + + + Clear node info for the given node. + + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @param flags: combination of Node info flags , identifying which + fields of node_info_t will be cleared (C++: uint32) + +Help on function create_disasm_graph in module ida_graph: + +create_disasm_graph(*args) -> 'mutable_graph_t *' + create_disasm_graph(ea) -> mutable_graph_t + create_disasm_graph(ranges) -> mutable_graph_t + + + Create a graph for the function that contains 'ea'. + + + @param ea (C++: ea_t) + +Help on function create_graph_viewer in module ida_graph: + +create_graph_viewer(*args) -> 'graph_viewer_t *' + create_graph_viewer(title, id, callback, ud, title_height, parent=None) -> graph_viewer_t * + + + Create a custom graph viewer. + + @param title: the widget title (C++: const char *) + @param id: graph id (C++: uval_t) + @param callback: callback to handle graph notifications ( + graph_notification_t ) (C++: hook_cb_t *) + @param ud: user data passed to callback (C++: void *) + @param title_height: node title height (C++: int) + @param parent (C++: TWidget *) + @return: new viewer + +Help on function create_mutable_graph in module ida_graph: + +create_mutable_graph(*args) -> 'mutable_graph_t *' + create_mutable_graph(id) -> mutable_graph_t + + + Create a new empty graph with given id. + + + @param id (C++: uval_t) + +Help on function create_user_graph_place in module ida_graph: + +create_user_graph_place(*args) -> 'user_graph_place_t *' + create_user_graph_place(node, lnnum) -> user_graph_place_t + + + Get a copy of a 'user_graph_place_t' (returns a pointer to static + storage) + + + @param node (C++: int) + @param lnnum (C++: int) + +Help on function del_node_info in module ida_graph: + +del_node_info(*args) -> 'void' + del_node_info(gid, node) + + + Delete the 'node_info_t' for the given node. + + + @param gid (C++: graph_id_t) + @param node (C++: int) + +Help on function delete_mutable_graph in module ida_graph: + +delete_mutable_graph(*args) -> 'void' + delete_mutable_graph(g) + + + Delete graph object.use this only if you are dealing with + 'mutable_graph_t' instances that have not been used together with a + 'graph_viewer_t' . If you have called 'set_viewer_graph()' with your + graph, the graph's lifecycle will be managed by the viewer, and you + shouldn't interfere with it + + @param g (C++: mutable_graph_t *) + +Help on class edge_info_t in module ida_graph: + +class edge_info_t(builtins.object) + | Proxy of C++ edge_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> edge_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_edge_info_t(...) + | delete_edge_info_t(self) + | + | reverse_layout(self, *args) -> 'void' + | reverse_layout(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | color + | edge_info_t_color_get(self) -> bgcolor_t + | + | dstoff + | edge_info_t_dstoff_get(self) -> int + | + | layout + | edge_info_t_layout_get(self) -> pointseq_t + | + | srcoff + | edge_info_t_srcoff_get(self) -> int + | + | thisown + | The membership flag + | + | width + | edge_info_t_width_get(self) -> int + +Help on class edge_infos_wrapper_t in module ida_graph: + +class edge_infos_wrapper_t(builtins.object) + | Proxy of C++ edge_infos_wrapper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ptr + | edge_infos_wrapper_t_ptr_get(self) -> edge_infos_t * + | + | thisown + | The membership flag + +Help on class edge_layout_point_t in module ida_graph: + +class edge_layout_point_t(builtins.object) + | Proxy of C++ edge_layout_point_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> edge_layout_point_t + | __init__(self, r) -> edge_layout_point_t + | __init__(self, _e, _pidx) -> edge_layout_point_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_edge_layout_point_t(...) + | delete_edge_layout_point_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | edge_layout_point_t_e_get(self) -> edge_t + | + | pidx + | edge_layout_point_t_pidx_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class edge_segment_t in module ida_graph: + +class edge_segment_t(builtins.object) + | Proxy of C++ edge_segment_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> edge_segment_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_edge_segment_t(...) + | delete_edge_segment_t(self) + | + | length(self, *args) -> 'size_t' + | length(self) -> size_t + | + | toright(self, *args) -> 'bool' + | toright(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | e + | edge_segment_t_e_get(self) -> edge_t + | + | nseg + | edge_segment_t_nseg_get(self) -> int + | + | thisown + | The membership flag + | + | x0 + | edge_segment_t_x0_get(self) -> int + | + | x1 + | edge_segment_t_x1_get(self) -> int + +Help on class edge_t in module ida_graph: + +class edge_t(builtins.object) + | Proxy of C++ edge_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, y) -> bool + | + | __init__(self, *args) + | __init__(self) -> edge_t + | __init__(self, x, y) -> edge_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, y) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, y) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_edge_t(...) + | delete_edge_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dst + | edge_t_dst_get(self) -> int + | + | src + | edge_t_src_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function get_graph_viewer in module ida_graph: + +get_graph_viewer(*args) -> 'graph_viewer_t *' + get_graph_viewer(parent) -> graph_viewer_t * + + + Get custom graph viewer for given form. + + + @param parent (C++: TWidget *) + +Help on function get_node_info in module ida_graph: + +get_node_info(*args) -> 'bool' + get_node_info(out, gid, node) -> bool + + + Get node info. + + @param out: result (C++: node_info_t *) + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @return: success + +Help on function get_viewer_graph in module ida_graph: + +get_viewer_graph(*args) -> 'mutable_graph_t *' + get_viewer_graph(gv) -> mutable_graph_t + + + Get graph object for given custom graph viewer. + + + @param gv (C++: graph_viewer_t *) + +Help on class graph_item_t in module ida_graph: + +class graph_item_t(builtins.object) + | Proxy of C++ graph_item_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> graph_item_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_item_t(...) + | delete_graph_item_t(self) + | + | is_edge(self, *args) -> 'bool' + | is_edge(self) -> bool + | + | is_node(self, *args) -> 'bool' + | is_node(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | b + | graph_item_t_b_get(self) -> int + | + | e + | graph_item_t_e_get(self) -> edge_t + | + | elp + | graph_item_t_elp_get(self) -> edge_layout_point_t + | + | n + | graph_item_t_n_get(self) -> int + | + | p + | graph_item_t_p_get(self) -> point_t + | + | thisown + | The membership flag + | + | type + | graph_item_t_type_get(self) -> graph_item_type_t + +Help on class graph_node_visitor_t in module ida_graph: + +class graph_node_visitor_t(builtins.object) + | Proxy of C++ graph_node_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_node_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_node_visitor_t(...) + | delete_graph_node_visitor_t(self) + | + | is_forbidden_edge(self, *args) -> 'bool' + | is_forbidden_edge(self, arg0, arg1) -> bool + | + | is_visited(self, *args) -> 'bool' + | is_visited(self, n) -> bool + | + | reinit(self, *args) -> 'void' + | reinit(self) + | + | set_visited(self, *args) -> 'void' + | set_visited(self, n) + | + | visit_node(self, *args) -> 'int' + | visit_node(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on class graph_path_visitor_t in module ida_graph: + +class graph_path_visitor_t(builtins.object) + | Proxy of C++ graph_path_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_path_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_path_visitor_t(...) + | delete_graph_path_visitor_t(self) + | + | walk_backward(self, *args) -> 'int' + | walk_backward(self, arg0) -> int + | + | walk_forward(self, *args) -> 'int' + | walk_forward(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | path + | graph_path_visitor_t_path_get(self) -> intvec_t * + | + | prune + | graph_path_visitor_t_prune_get(self) -> bool + | + | thisown + | The membership flag + +Help on class graph_visitor_t in module ida_graph: + +class graph_visitor_t(builtins.object) + | Proxy of C++ graph_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> graph_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_visitor_t(...) + | delete_graph_visitor_t(self) + | + | visit_edge(self, *args) -> 'int' + | visit_edge(self, arg2, arg3) -> int + | + | visit_node(self, *args) -> 'int' + | visit_node(self, arg2, arg3) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on class group_crinfo_t in module ida_graph: + +class group_crinfo_t(builtins.object) + | Proxy of C++ group_crinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> group_crinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_group_crinfo_t(...) + | delete_group_crinfo_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | nodes + | group_crinfo_t_nodes_get(self) -> intvec_t * + | + | text + | group_crinfo_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class interval_t in module ida_graph: + +class interval_t(builtins.object) + | Proxy of C++ interval_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> interval_t + | __init__(self, y0, y1) -> interval_t + | __init__(self, s) -> interval_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_interval_t(...) + | delete_interval_t(self) + | + | contains(self, *args) -> 'bool' + | contains(self, x) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | length(self, *args) -> 'int' + | length(self) -> int + | + | make_union(self, *args) -> 'void' + | make_union(self, r) + | + | move_by(self, *args) -> 'void' + | move_by(self, shift) + | + | ---------------------------------------------------------------------- + | 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 + | + | x0 + | interval_t_x0_get(self) -> int + | + | x1 + | interval_t_x1_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class mutable_graph_t in module ida_graph: + +class mutable_graph_t(builtins.object) + | Proxy of C++ mutable_graph_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mutable_graph_t(...) + | delete_mutable_graph_t(self) + | + | calc_group_ea(self, *args) -> 'ea_t' + | calc_group_ea(self, arg0) -> ea_t + | + | change_group_visibility(self, *args) -> 'bool' + | change_group_visibility(self, group, expand) -> bool + | + | clear(self, *args) -> 'void' + | clear(self) + | + | create_digraph_layout(self, *args) -> 'bool' + | create_digraph_layout(self) -> bool + | + | create_group(self, *args) -> 'int' + | create_group(self, nodes) -> int + | + | del_custom_layout(self, *args) -> 'void' + | del_custom_layout(self) + | + | delete_group(self, *args) -> 'bool' + | delete_group(self, group) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | exists(self, *args) -> 'bool' + | exists(self, node) -> bool + | + | get_custom_layout(self, *args) -> 'bool' + | get_custom_layout(self) -> bool + | + | get_edge(self, *args) -> 'edge_info_t' + | get_edge(self, e) -> edge_info_t + | + | get_first_subgraph_node(self, *args) -> 'int' + | get_first_subgraph_node(self, group) -> int + | + | get_graph_groups(self, *args) -> 'bool' + | get_graph_groups(self) -> bool + | + | get_next_subgraph_node(self, *args) -> 'int' + | get_next_subgraph_node(self, group, current) -> int + | + | get_node_group(self, *args) -> 'int' + | get_node_group(self, node) -> int + | + | get_node_representative(self, *args) -> 'int' + | get_node_representative(self, node) -> int + | + | is_collapsed_node(self, *args) -> 'bool' + | is_collapsed_node(self, node) -> bool + | + | is_deleted_node(self, *args) -> 'bool' + | is_deleted_node(self, node) -> bool + | + | is_displayable_node(self, *args) -> 'bool' + | is_displayable_node(self, node) -> bool + | + | is_dot_node(self, *args) -> 'bool' + | is_dot_node(self, node) -> bool + | + | is_group_node(self, *args) -> 'bool' + | is_group_node(self, node) -> bool + | + | is_simple_node(self, *args) -> 'bool' + | is_simple_node(self, node) -> bool + | + | is_subgraph_node(self, *args) -> 'bool' + | is_subgraph_node(self, node) -> bool + | + | is_uncollapsed_node(self, *args) -> 'bool' + | is_uncollapsed_node(self, node) -> bool + | + | is_user_graph(self, *args) -> 'bool' + | is_user_graph(self) -> bool + | + | is_visible_node(self, *args) -> 'bool' + | is_visible_node(self, node) -> bool + | + | node_qty(self, *args) -> 'int' + | node_qty(self) -> int + | + | npred(self, *args) -> 'int' + | npred(self, b) -> int + | + | nrect(self, *args) -> 'rect_t &' + | nrect(self, n) -> rect_t + | nrect(self, n) -> rect_t + | + | nsucc(self, *args) -> 'int' + | nsucc(self, b) -> int + | + | pred(self, *args) -> 'int' + | pred(self, b, i) -> int + | + | predset(self, *args) -> 'intvec_t const &' + | predset(self, b) -> intvec_t const & + | + | reset(self, *args) -> 'void' + | reset(self) + | + | set_custom_layout(self, *args) -> 'void' + | set_custom_layout(self) + | + | set_deleted_node(self, *args) -> 'void' + | set_deleted_node(self, node) + | + | set_edge(self, *args) -> 'bool' + | set_edge(self, e, ei) -> bool + | + | set_graph_groups(self, *args) -> 'void' + | set_graph_groups(self) + | + | set_node_group(self, *args) -> 'void' + | set_node_group(self, node, group) + | + | size(self, *args) -> 'int' + | size(self) -> int + | + | succ(self, *args) -> 'int' + | succ(self, b, i) -> int + | + | succset(self, *args) -> 'intvec_t const &' + | succset(self, b) -> intvec_t const & + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | belongs + | mutable_graph_t_belongs_get(self) -> intvec_t * + | + | edges + | mutable_graph_t_edges_get(self) -> edge_infos_wrapper_t + | + | gid + | mutable_graph_t_gid_get(self) -> uval_t + | + | node_flags + | mutable_graph_t_node_flags_get(self) -> bytevec_t * + | + | nodes + | mutable_graph_t_nodes_get(self) -> node_layout_t + | + | org_preds + | mutable_graph_t_org_preds_get(self) -> array_of_intvec_t + | + | org_succs + | mutable_graph_t_org_succs_get(self) -> array_of_intvec_t + | + | preds + | mutable_graph_t_preds_get(self) -> array_of_intvec_t + | + | succs + | mutable_graph_t_succs_get(self) -> array_of_intvec_t + | + | thisown + | The membership flag + +Help on class node_info_t in module ida_graph: + +class node_info_t(builtins.object) + | Proxy of C++ node_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> node_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_node_info_t(...) + | delete_node_info_t(self) + | + | get_flags_for_valid(self, *args) -> 'uint32' + | get_flags_for_valid(self) -> uint32 + | + | valid_bg_color(self, *args) -> 'bool' + | valid_bg_color(self) -> bool + | + | valid_ea(self, *args) -> 'bool' + | valid_ea(self) -> bool + | + | valid_flags(self, *args) -> 'bool' + | valid_flags(self) -> bool + | + | valid_frame_color(self, *args) -> 'bool' + | valid_frame_color(self) -> bool + | + | valid_text(self, *args) -> 'bool' + | valid_text(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bg_color + | node_info_t_bg_color_get(self) -> bgcolor_t + | + | ea + | node_info_t_ea_get(self) -> ea_t + | + | flags + | node_info_t_flags_get(self) -> uint32 + | + | frame_color + | node_info_t_frame_color_get(self) -> bgcolor_t + | + | text + | node_info_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class node_layout_t in module ida_graph: + +class node_layout_t(builtins.object) + | Proxy of C++ qvector< rect_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'rect_t const &' + | __getitem__(self, i) -> rect_t + | + | __init__(self, *args) + | __init__(self) -> node_layout_t + | __init__(self, x) -> node_layout_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_node_layout_t(...) + | delete_node_layout_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'rect_t const &' + | at(self, _idx) -> rect_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< rect_t >::const_iterator' + | begin(self) -> rect_t + | begin(self) -> rect_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< rect_t >::const_iterator' + | end(self) -> rect_t + | end(self) -> rect_t + | + | erase(self, *args) -> 'qvector< rect_t >::iterator' + | erase(self, it) -> rect_t + | erase(self, first, last) -> rect_t + | + | extract(self, *args) -> 'rect_t *' + | extract(self) -> rect_t + | + | find(self, *args) -> 'qvector< rect_t >::const_iterator' + | find(self, x) -> rect_t + | find(self, x) -> rect_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=rect_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< rect_t >::iterator' + | insert(self, it, x) -> rect_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'rect_t &' + | push_back(self, x) + | push_back(self) -> rect_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class node_ordering_t in module ida_graph: + +class node_ordering_t(builtins.object) + | Proxy of C++ node_ordering_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> node_ordering_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_node_ordering_t(...) + | delete_node_ordering_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | node(self, *args) -> 'int' + | node(self, _order) -> int + | + | resize(self, *args) -> 'void' + | resize(self, n) + | + | set(self, *args) -> 'void' + | set(self, _node, num) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + +Help on class point_t in module ida_graph: + +class point_t(builtins.object) + | Proxy of C++ point_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> point_t + | __init__(self, _x, _y) -> point_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_point_t(...) + | delete_point_t(self) + | + | add(self, *args) -> 'point_t &' + | add(self, r) -> point_t + | + | negate(self, *args) -> 'void' + | negate(self) + | + | sub(self, *args) -> 'point_t &' + | sub(self, r) -> point_t + | + | ---------------------------------------------------------------------- + | 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 + | + | x + | point_t_x_get(self) -> int + | + | y + | point_t_y_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class pointseq_t in module ida_graph: + +class pointseq_t(pointvec_t) + | Proxy of C++ pointseq_t class. + | + | Method resolution order: + | pointseq_t + | pointvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pointseq_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pointseq_t(...) + | delete_pointseq_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from pointvec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'point_t const &' + | __getitem__(self, i) -> point_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'point_t const &' + | at(self, _idx) -> point_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< point_t >::const_iterator' + | begin(self) -> point_t + | begin(self) -> point_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< point_t >::const_iterator' + | end(self) -> point_t + | end(self) -> point_t + | + | erase(self, *args) -> 'qvector< point_t >::iterator' + | erase(self, it) -> point_t + | erase(self, first, last) -> point_t + | + | extract(self, *args) -> 'point_t *' + | extract(self) -> point_t + | + | find(self, *args) -> 'qvector< point_t >::const_iterator' + | find(self, x) -> point_t + | find(self, x) -> point_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=point_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< point_t >::iterator' + | insert(self, it, x) -> point_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'point_t &' + | push_back(self, x) + | push_back(self) -> point_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from pointvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from pointvec_t: + | + | __hash__ = None + +Help on class pointvec_t in module ida_graph: + +class pointvec_t(builtins.object) + | Proxy of C++ qvector< point_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'point_t const &' + | __getitem__(self, i) -> point_t + | + | __init__(self, *args) + | __init__(self) -> pointvec_t + | __init__(self, x) -> pointvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_pointvec_t(...) + | delete_pointvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'point_t const &' + | at(self, _idx) -> point_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< point_t >::const_iterator' + | begin(self) -> point_t + | begin(self) -> point_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< point_t >::const_iterator' + | end(self) -> point_t + | end(self) -> point_t + | + | erase(self, *args) -> 'qvector< point_t >::iterator' + | erase(self, it) -> point_t + | erase(self, first, last) -> point_t + | + | extract(self, *args) -> 'point_t *' + | extract(self) -> point_t + | + | find(self, *args) -> 'qvector< point_t >::const_iterator' + | find(self, x) -> point_t + | find(self, x) -> point_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=point_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< point_t >::iterator' + | insert(self, it, x) -> point_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'point_t &' + | push_back(self, x) + | push_back(self) -> point_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function pyg_close in module ida_graph: + +pyg_close(*args) -> 'void' + pyg_close(_self) + +Help on function pyg_select_node in module ida_graph: + +pyg_select_node(*args) -> 'void' + pyg_select_node(_self, nid) + +Help on function pyg_show in module ida_graph: + +pyg_show(*args) -> 'bool' + pyg_show(_self) -> bool + +Help on class rect_t in module ida_graph: + +class rect_t(builtins.object) + | Proxy of C++ rect_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> rect_t + | __init__(self, l, t, r, b) -> rect_t + | __init__(self, p0, p1) -> rect_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_rect_t(...) + | delete_rect_t(self) + | + | area(self, *args) -> 'int' + | area(self) -> int + | + | bottomright(self, *args) -> 'point_t' + | bottomright(self) -> point_t + | + | center(self, *args) -> 'point_t' + | center(self) -> point_t + | + | contains(self, *args) -> 'bool' + | contains(self, p) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | grow(self, *args) -> 'void' + | grow(self, delta) + | + | height(self, *args) -> 'int' + | height(self) -> int + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | is_intersection_empty(self, *args) -> 'bool' + | is_intersection_empty(self, r) -> bool + | + | make_union(self, *args) -> 'void' + | make_union(self, r) + | + | move_by(self, *args) -> 'void' + | move_by(self, p) + | + | move_to(self, *args) -> 'void' + | move_to(self, p) + | + | topleft(self, *args) -> 'point_t' + | topleft(self) -> point_t + | + | width(self, *args) -> 'int' + | width(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bottom + | rect_t_bottom_get(self) -> int + | + | left + | rect_t_left_get(self) -> int + | + | right + | rect_t_right_get(self) -> int + | + | thisown + | The membership flag + | + | top + | rect_t_top_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function refresh_viewer in module ida_graph: + +refresh_viewer(*args) -> 'void' + refresh_viewer(gv) + + + Redraw the graph in the given view. + + + @param gv (C++: graph_viewer_t *) + +Help on class row_info_t in module ida_graph: + +class row_info_t(builtins.object) + | Proxy of C++ row_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> row_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_row_info_t(...) + | delete_row_info_t(self) + | + | height(self, *args) -> 'int' + | height(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bottom + | row_info_t_bottom_get(self) -> int + | + | nodes + | row_info_t_nodes_get(self) -> intvec_t * + | + | thisown + | The membership flag + | + | top + | row_info_t_top_get(self) -> int + +Help on class screen_graph_selection_base_t in module ida_graph: + +class screen_graph_selection_base_t(builtins.object) + | Proxy of C++ qvector< selection_item_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'selection_item_t const &' + | __getitem__(self, i) -> selection_item_t + | + | __init__(self, *args) + | __init__(self) -> screen_graph_selection_base_t + | __init__(self, x) -> screen_graph_selection_base_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_screen_graph_selection_base_t(...) + | delete_screen_graph_selection_base_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'selection_item_t const &' + | at(self, _idx) -> selection_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | begin(self) -> selection_item_t + | begin(self) -> selection_item_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | end(self) -> selection_item_t + | end(self) -> selection_item_t + | + | erase(self, *args) -> 'qvector< selection_item_t >::iterator' + | erase(self, it) -> selection_item_t + | erase(self, first, last) -> selection_item_t + | + | extract(self, *args) -> 'selection_item_t *' + | extract(self) -> selection_item_t + | + | find(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | find(self, x) -> selection_item_t + | find(self, x) -> selection_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=selection_item_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< selection_item_t >::iterator' + | insert(self, it, x) -> selection_item_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'selection_item_t &' + | push_back(self, x) + | push_back(self) -> selection_item_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class screen_graph_selection_t in module ida_graph: + +class screen_graph_selection_t(screen_graph_selection_base_t) + | Proxy of C++ screen_graph_selection_t class. + | + | Method resolution order: + | screen_graph_selection_t + | screen_graph_selection_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> screen_graph_selection_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_screen_graph_selection_t(...) + | delete_screen_graph_selection_t(self) + | + | add(self, *args) -> 'void' + | add(self, s) + | + | add_node(self, *args) -> 'void' + | add_node(self, node) + | + | add_point(self, *args) -> 'void' + | add_point(self, e, idx) + | + | del_node(self, *args) -> 'void' + | del_node(self, node) + | + | del_point(self, *args) -> 'void' + | del_point(self, e, idx) + | + | has(self, *args) -> 'bool' + | has(self, item) -> bool + | + | items_count(self, *args) -> 'size_t' + | items_count(self, look_for_nodes) -> size_t + | + | nodes_count(self, *args) -> 'size_t' + | nodes_count(self) -> size_t + | + | points_count(self, *args) -> 'size_t' + | points_count(self) -> size_t + | + | sub(self, *args) -> 'void' + | sub(self, s) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from screen_graph_selection_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'selection_item_t const &' + | __getitem__(self, i) -> selection_item_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'selection_item_t const &' + | at(self, _idx) -> selection_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | begin(self) -> selection_item_t + | begin(self) -> selection_item_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | end(self) -> selection_item_t + | end(self) -> selection_item_t + | + | erase(self, *args) -> 'qvector< selection_item_t >::iterator' + | erase(self, it) -> selection_item_t + | erase(self, first, last) -> selection_item_t + | + | extract(self, *args) -> 'selection_item_t *' + | extract(self) -> selection_item_t + | + | find(self, *args) -> 'qvector< selection_item_t >::const_iterator' + | find(self, x) -> selection_item_t + | find(self, x) -> selection_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=selection_item_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< selection_item_t >::iterator' + | insert(self, it, x) -> selection_item_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'selection_item_t &' + | push_back(self, x) + | push_back(self) -> selection_item_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from screen_graph_selection_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from screen_graph_selection_base_t: + | + | __hash__ = None + +Help on class selection_item_t in module ida_graph: + +class selection_item_t(builtins.object) + | Proxy of C++ selection_item_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> selection_item_t + | __init__(self, n) -> selection_item_t + | __init__(self, _elp) -> selection_item_t + | __init__(self, e, idx) -> selection_item_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_selection_item_t(...) + | delete_selection_item_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | elp + | selection_item_t_elp_get(self) -> edge_layout_point_t + | + | is_node + | selection_item_t_is_node_get(self) -> bool + | + | node + | selection_item_t_node_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function set_node_info in module ida_graph: + +set_node_info(*args) -> 'void' + set_node_info(gid, node, ni, flags) + + + Set node info. + + @param gid: id of desired graph (C++: graph_id_t) + @param node: node number (C++: int) + @param ni: node info to use (C++: const node_info_t &) + @param flags: combination of Node info flags , identifying which + fields of 'ni' will be used (C++: uint32) + +Help on function set_viewer_graph in module ida_graph: + +set_viewer_graph(*args) -> 'void' + set_viewer_graph(gv, g) + + + Set the underlying graph object for the given viewer. + + + @param gv (C++: graph_viewer_t *) + @param g (C++: mutable_graph_t *) + +Help on class user_graph_place_t in module ida_graph: + +class user_graph_place_t(builtins.object) + | Proxy of C++ user_graph_place_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_graph_place_t(...) + | delete_user_graph_place_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | node + | user_graph_place_t_node_get(self) -> int + | + | thisown + | The membership flag + +Help on function viewer_attach_menu_item in module ida_graph: + +viewer_attach_menu_item(*args) -> 'bool' + viewer_attach_menu_item(g, name) -> bool + + + Attach a previously-registered action to the view's context menu. See + 'kernwin.hpp' for how to register actions. + + @param g (C++: graph_viewer_t *) + @param name: action name (C++: const char *) + @return: success + +Help on function viewer_center_on in module ida_graph: + +viewer_center_on(*args) -> 'void' + viewer_center_on(gv, node) + + + Center the graph view on the given node. + + + @param gv (C++: graph_viewer_t *) + @param node (C++: int) + +Help on function viewer_create_groups in module ida_graph: + +viewer_create_groups(*args) -> 'bool' + viewer_create_groups(gv, out_group_nodes, gi) -> bool + + + This will perform an operation similar to what happens when a user + manually selects a set of nodes, right-clicks and selects "Create + group". This is a wrapper around mutable_graph_t::create_group that + will, in essence:clone the current graphfor each 'group_crinfo_t' , + attempt creating group in that new graphif all were successful, + animate to that new graph.this accepts parameters that allow creating + of multiple groups at once; which means only one graph animation will + be triggered. + + @param gv (C++: graph_viewer_t *) + @param out_group_nodes (C++: intvec_t *) + @param gi (C++: const groups_crinfos_t &) + +Help on function viewer_del_node_info in module ida_graph: + +viewer_del_node_info(*args) -> 'void' + viewer_del_node_info(gv, n) + + + Delete node info for node in given viewer (see 'del_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param n (C++: int) + +Help on function viewer_delete_groups in module ida_graph: + +viewer_delete_groups(*args) -> 'bool' + viewer_delete_groups(gv, groups, new_current=-1) -> bool + + + Wrapper around mutable_graph_t::delete_group. This function will:clone + the current graphattempt deleting the groups in that new graphif + successful, animate to that new graph. + + @param gv (C++: graph_viewer_t *) + @param groups (C++: const intvec_t &) + @param new_current (C++: int) + +Help on function viewer_fit_window in module ida_graph: + +viewer_fit_window(*args) -> 'void' + viewer_fit_window(gv) + + + Fit graph viewer to its parent form. + + + @param gv (C++: graph_viewer_t *) + +Help on function viewer_get_curnode in module ida_graph: + +viewer_get_curnode(*args) -> 'int' + viewer_get_curnode(gv) -> int + + + Get number of currently selected node (-1 if none) + + + @param gv (C++: graph_viewer_t *) + +Help on function viewer_get_gli in module ida_graph: + +viewer_get_gli(*args) -> 'bool' + viewer_get_gli(out, gv, flags=0) -> bool + + + Get location info for given graph view If flags contains + GLICTL_CENTER, then the gli that will be retrieved, will be the one at + the center of the view. Otherwise it will be the top-left. + + @param out (C++: graph_location_info_t *) + @param gv (C++: graph_viewer_t *) + @param flags (C++: uint32) + +Help on function viewer_get_node_info in module ida_graph: + +viewer_get_node_info(*args) -> 'bool' + viewer_get_node_info(gv, out, n) -> bool + + + Get node info for node in given viewer (see 'get_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param out (C++: node_info_t *) + @param n (C++: int) + +Help on function viewer_get_selection in module ida_graph: + +viewer_get_selection(*args) -> 'bool' + viewer_get_selection(gv, sgs) -> bool + + + Get currently selected items for graph viewer. + + + @param gv (C++: graph_viewer_t *) + @param sgs (C++: screen_graph_selection_t *) + +Help on function viewer_set_gli in module ida_graph: + +viewer_set_gli(*args) -> 'void' + viewer_set_gli(gv, gli, flags=0) + + + Set location info for given graph view If flags contains + GLICTL_CENTER, then the gli will be set to be the center of the view. + Otherwise it will be the top-left. + + @param gv (C++: graph_viewer_t *) + @param gli (C++: const graph_location_info_t *) + @param flags (C++: uint32) + +Help on function viewer_set_groups_visibility in module ida_graph: + +viewer_set_groups_visibility(*args) -> 'bool' + viewer_set_groups_visibility(gv, groups, expand, new_current=-1) -> bool + + + Wrapper around mutable_graph_t::change_visibility. This function + will:clone the current graphattempt changing visibility of the groups + in that new graphif successful, animate to that new graph. + + @param gv (C++: graph_viewer_t *) + @param groups (C++: const intvec_t &) + @param expand (C++: bool) + @param new_current (C++: int) + +Help on function viewer_set_node_info in module ida_graph: + +viewer_set_node_info(*args) -> 'void' + viewer_set_node_info(gv, n, ni, flags) + + + Set node info for node in given viewer (see 'set_node_info()' ) + + + @param gv (C++: graph_viewer_t *) + @param n (C++: int) + @param ni (C++: const node_info_t &) + @param flags (C++: uint32) + +Help on function viewer_set_titlebar_height in module ida_graph: + +viewer_set_titlebar_height(*args) -> 'int' + viewer_set_titlebar_height(gv, height) -> int + + + Set height of node title bars ( 'grcode_set_titlebar_height' ) + + + @param gv (C++: graph_viewer_t *) + @param height (C++: int) + +=== ida_graph EPYDOC INJECTIONS === +ida_graph.GLICTL_CENTER +""" +the gli should be set/get as center +""" + +ida_graph.MTG_DOT_NODE +""" +is dot node? +""" + +ida_graph.MTG_GROUP_NODE +""" +is group node? +""" + +ida_graph.MTG_NON_DISPLAYABLE_NODE +""" +for disassembly graphs - non-displayable nodes have a visible area +that is too large to generate disassembly lines for without IDA +slowing down significantly (see MAX_VISIBLE_NODE_AREA) +""" + +ida_graph.NIF_BG_COLOR +""" + 'node_info_t::bg_color' +""" + +ida_graph.NIF_EA +""" + 'node_info_t::ea' +""" + +ida_graph.NIF_FLAGS +""" + 'node_info_t::flags' +""" + +ida_graph.NIF_FRAME_COLOR +""" + 'node_info_t::frame_color' +""" + +ida_graph.NIF_TEXT +""" + 'node_info_t::text' +""" +=== ida_graph EPYDOC INJECTIONS END === +Help on class DecompilationFailure in module ida_hexrays: + +class DecompilationFailure(builtins.Exception) + | Raised on a decompilation error. + | + | The associated hexrays_failure_t object is stored in the + | 'info' member of this exception. + | + | Method resolution order: + | DecompilationFailure + | builtins.Exception + | builtins.BaseException + | builtins.object + | + | Methods defined here: + | + | __init__(self, info) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Methods inherited from builtins.Exception: + | + | __new__(*args, **kwargs) from builtins.type + | Create and return a new object. See help(type) for accurate signature. + | + | ---------------------------------------------------------------------- + | Methods inherited from builtins.BaseException: + | + | __delattr__(self, name, /) + | Implement delattr(self, name). + | + | __getattribute__(self, name, /) + | Return getattr(self, name). + | + | __reduce__(...) + | helper for pickle + | + | __repr__(self, /) + | Return repr(self). + | + | __setattr__(self, name, value, /) + | Implement setattr(self, name, value). + | + | __setstate__(...) + | + | __str__(self, /) + | Return str(self). + | + | with_traceback(...) + | Exception.with_traceback(tb) -- + | set self.__traceback__ to tb and return self. + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from builtins.BaseException: + | + | __cause__ + | exception cause + | + | __context__ + | exception context + | + | __dict__ + | + | __suppress_context__ + | + | __traceback__ + | + | args + +Help on class Hexrays_Hooks in module ida_hexrays: + +class Hexrays_Hooks(builtins.object) + | Proxy of C++ Hexrays_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> Hexrays_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_Hexrays_Hooks(...) + | delete_Hexrays_Hooks(self) + | + | close_pseudocode(self, *args) -> 'int' + | close_pseudocode(self, vu) -> int + | + | cmt_changed(self, *args) -> 'int' + | cmt_changed(self, cfunc, loc, cmt) -> int + | + | combine(self, *args) -> 'int' + | combine(self, blk, insn) -> int + | + | create_hint(self, *args) -> 'PyObject *' + | create_hint(self, vu) -> PyObject * + | + | curpos(self, *args) -> 'int' + | curpos(self, vu) -> int + | + | double_click(self, *args) -> 'int' + | double_click(self, vu, shift_state) -> int + | + | flowchart(self, *args) -> 'int' + | flowchart(self, fc) -> int + | + | func_printed(self, *args) -> 'int' + | func_printed(self, cfunc) -> int + | + | glbopt(self, *args) -> 'int' + | glbopt(self, mba) -> int + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | interr(self, *args) -> 'int' + | interr(self, errcode) -> int + | + | keyboard(self, *args) -> 'int' + | keyboard(self, vu, key_code, shift_state) -> int + | + | locopt(self, *args) -> 'int' + | locopt(self, mba) -> int + | + | lvar_cmt_changed(self, *args) -> 'int' + | lvar_cmt_changed(self, vu, v, cmt) -> int + | + | lvar_mapping_changed(self, *args) -> 'int' + | lvar_mapping_changed(self, vu, frm, to) -> int + | + | lvar_name_changed(self, *args) -> 'int' + | lvar_name_changed(self, vu, v, name, is_user_name) -> int + | + | lvar_type_changed(self, *args) -> 'int' + | lvar_type_changed(self, vu, v, tinfo) -> int + | + | maturity(self, *args) -> 'int' + | maturity(self, cfunc, new_maturity) -> int + | + | microcode(self, *args) -> 'int' + | microcode(self, mba) -> int + | + | open_pseudocode(self, *args) -> 'int' + | open_pseudocode(self, vu) -> int + | + | populating_popup(self, *args) -> 'int' + | populating_popup(self, widget, popup_handle, vu) -> int + | + | prealloc(self, *args) -> 'int' + | prealloc(self, mba) -> int + | + | preoptimized(self, *args) -> 'int' + | preoptimized(self, mba) -> int + | + | print_func(self, *args) -> 'int' + | print_func(self, cfunc, vp) -> int + | + | prolog(self, *args) -> 'int' + | prolog(self, mba, fc, reachable_blocks, decomp_flags) -> int + | + | refresh_pseudocode(self, *args) -> 'int' + | refresh_pseudocode(self, vu) -> int + | + | resolve_stkaddrs(self, *args) -> 'int' + | resolve_stkaddrs(self, mba) -> int + | + | right_click(self, *args) -> 'int' + | right_click(self, vu) -> int + | + | stkpnts(self, *args) -> 'int' + | stkpnts(self, mba, _sps) -> int + | + | structural(self, *args) -> 'int' + | structural(self, ct) -> int + | + | switch_pseudocode(self, *args) -> 'int' + | switch_pseudocode(self, vu) -> int + | + | text_ready(self, *args) -> 'int' + | text_ready(self, vu) -> int + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on class __cbhooks_t in module ida_hexrays: + +class __cbhooks_t(Hexrays_Hooks) + | Proxy of C++ Hexrays_Hooks class. + | + | Method resolution order: + | __cbhooks_t + | Hexrays_Hooks + | builtins.object + | + | Methods defined here: + | + | __init__(self, callback) + | __init__(self, _flags=0) -> Hexrays_Hooks + | + | close_pseudocode(self, *args) + | close_pseudocode(self, vu) -> int + | + | create_hint(self, *args) + | create_hint(self, vu) -> PyObject * + | + | curpos(self, *args) + | curpos(self, vu) -> int + | + | double_click(self, *args) + | double_click(self, vu, shift_state) -> int + | + | func_printed(self, *args) + | func_printed(self, cfunc) -> int + | + | interr(self, *args) + | interr(self, errcode) -> int + | + | keyboard(self, *args) + | keyboard(self, vu, key_code, shift_state) -> int + | + | maturity(self, *args) + | maturity(self, cfunc, new_maturity) -> int + | + | open_pseudocode(self, *args) + | open_pseudocode(self, vu) -> int + | + | populating_popup(self, *args) + | populating_popup(self, widget, popup_handle, vu) -> int + | + | print_func(self, *args) + | print_func(self, cfunc, vp) -> int + | + | refresh_pseudocode(self, *args) + | refresh_pseudocode(self, vu) -> int + | + | right_click(self, *args) + | right_click(self, vu) -> int + | + | switch_pseudocode(self, *args) + | switch_pseudocode(self, vu) -> int + | + | text_ready(self, *args) + | text_ready(self, vu) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | instances = [] + | + | ---------------------------------------------------------------------- + | Methods inherited from Hexrays_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_Hexrays_Hooks(...) + | delete_Hexrays_Hooks(self) + | + | cmt_changed(self, *args) -> 'int' + | cmt_changed(self, cfunc, loc, cmt) -> int + | + | combine(self, *args) -> 'int' + | combine(self, blk, insn) -> int + | + | flowchart(self, *args) -> 'int' + | flowchart(self, fc) -> int + | + | glbopt(self, *args) -> 'int' + | glbopt(self, mba) -> int + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | locopt(self, *args) -> 'int' + | locopt(self, mba) -> int + | + | lvar_cmt_changed(self, *args) -> 'int' + | lvar_cmt_changed(self, vu, v, cmt) -> int + | + | lvar_mapping_changed(self, *args) -> 'int' + | lvar_mapping_changed(self, vu, frm, to) -> int + | + | lvar_name_changed(self, *args) -> 'int' + | lvar_name_changed(self, vu, v, name, is_user_name) -> int + | + | lvar_type_changed(self, *args) -> 'int' + | lvar_type_changed(self, vu, v, tinfo) -> int + | + | microcode(self, *args) -> 'int' + | microcode(self, mba) -> int + | + | prealloc(self, *args) -> 'int' + | prealloc(self, mba) -> int + | + | preoptimized(self, *args) -> 'int' + | preoptimized(self, mba) -> int + | + | prolog(self, *args) -> 'int' + | prolog(self, mba, fc, reachable_blocks, decomp_flags) -> int + | + | resolve_stkaddrs(self, *args) -> 'int' + | resolve_stkaddrs(self, mba) -> int + | + | stkpnts(self, *args) -> 'int' + | stkpnts(self, mba, _sps) -> int + | + | structural(self, *args) -> 'int' + | structural(self, ct) -> int + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from Hexrays_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on function _call_with_transferrable_ownership in module ida_hexrays: + +_call_with_transferrable_ownership(fun, *args) + # Object ownership + +Help on function _kludge_use_TPopupMenu in module ida_hexrays: + +_kludge_use_TPopupMenu(*args) -> 'void' + _kludge_use_TPopupMenu(m) + +Help on function _ll_call_helper in module ida_hexrays: + +_ll_call_helper(*args) -> 'cexpr_t *' + _ll_call_helper(rettype, args, format) -> cexpr_t + +Help on function _ll_create_helper in module ida_hexrays: + +_ll_create_helper(*args) -> 'cexpr_t *' + _ll_create_helper(standalone, type, format) -> cexpr_t + +Help on function _ll_dereference in module ida_hexrays: + +_ll_dereference(*args) -> 'cexpr_t *' + _ll_dereference(e, ptrsize, is_flt=False) -> cexpr_t + +Help on function _ll_lnot in module ida_hexrays: + +_ll_lnot(*args) -> 'cexpr_t *' + _ll_lnot(e) -> cexpr_t + +Help on function _ll_make_num in module ida_hexrays: + +_ll_make_num(*args) -> 'cexpr_t *' + _ll_make_num(n, func=None, ea=BADADDR, opnum=0, sign=no_sign, size=0) -> cexpr_t + +Help on function _ll_make_ref in module ida_hexrays: + +_ll_make_ref(*args) -> 'cexpr_t *' + _ll_make_ref(e) -> cexpr_t + +Help on function _ll_new_block in module ida_hexrays: + +_ll_new_block(*args) -> 'cinsn_t *' + _ll_new_block() -> cinsn_t + +Help on function _map_as_dict in module ida_hexrays: + +_map_as_dict(maptype, name, keytype, valuetype) + # dictify all dict-like types + +Help on function accepts_small_udts in module ida_hexrays: + +accepts_small_udts(*args) -> 'bool' + accepts_small_udts(op) -> bool + + + Is the operator allowed on small structure or union? + + + @param op (C++: ctype_t) + +Help on function accepts_udts in module ida_hexrays: + +accepts_udts(*args) -> 'bool' + accepts_udts(op) -> bool + +Help on function arglocs_overlap in module ida_hexrays: + +arglocs_overlap(*args) -> 'bool' + arglocs_overlap(loc1, w1, loc2, w2) -> bool + + + Do two arglocs overlap? + + + @param loc1 (C++: const vdloc_t &) + @param w1 (C++: size_t) + @param loc2 (C++: const vdloc_t &) + @param w2 (C++: size_t) + +Help on class array_of_bitsets in module ida_hexrays: + +class array_of_bitsets(builtins.object) + | Proxy of C++ qvector< bitset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'bitset_t const &' + | __getitem__(self, i) -> bitset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_bitsets + | __init__(self, x) -> array_of_bitsets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_array_of_bitsets(...) + | delete_array_of_bitsets(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'bitset_t const &' + | at(self, _idx) -> bitset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< bitset_t >::const_iterator' + | begin(self) -> bitset_t + | begin(self) -> bitset_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< bitset_t >::const_iterator' + | end(self) -> bitset_t + | end(self) -> bitset_t + | + | erase(self, *args) -> 'qvector< bitset_t >::iterator' + | erase(self, it) -> bitset_t + | erase(self, first, last) -> bitset_t + | + | extract(self, *args) -> 'bitset_t *' + | extract(self) -> bitset_t + | + | find(self, *args) -> 'qvector< bitset_t >::const_iterator' + | find(self, x) -> bitset_t + | find(self, x) -> bitset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=bitset_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< bitset_t >::iterator' + | insert(self, it, x) -> bitset_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'bitset_t &' + | push_back(self, x) + | push_back(self) -> bitset_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class array_of_ivlsets in module ida_hexrays: + +class array_of_ivlsets(builtins.object) + | Proxy of C++ qvector< ivlset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'ivlset_t const &' + | __getitem__(self, i) -> ivlset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_ivlsets + | __init__(self, x) -> array_of_ivlsets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_array_of_ivlsets(...) + | delete_array_of_ivlsets(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'ivlset_t const &' + | at(self, _idx) -> ivlset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< ivlset_t >::const_iterator' + | begin(self) -> ivlset_t + | begin(self) -> ivlset_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< ivlset_t >::const_iterator' + | end(self) -> ivlset_t + | end(self) -> ivlset_t + | + | erase(self, *args) -> 'qvector< ivlset_t >::iterator' + | erase(self, it) -> ivlset_t + | erase(self, first, last) -> ivlset_t + | + | extract(self, *args) -> 'ivlset_t *' + | extract(self) -> ivlset_t + | + | find(self, *args) -> 'qvector< ivlset_t >::const_iterator' + | find(self, x) -> ivlset_t + | find(self, x) -> ivlset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=ivlset_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< ivlset_t >::iterator' + | insert(self, it, x) -> ivlset_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'ivlset_t &' + | push_back(self, x) + | push_back(self) -> ivlset_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function asgop in module ida_hexrays: + +asgop(*args) -> 'ctype_t' + asgop(cop) -> ctype_t + + + Convert plain operator into assignment operator. For example, cot_add + returns cot_asgadd. + + + @param cop (C++: ctype_t) + +Help on function asgop_revert in module ida_hexrays: + +asgop_revert(*args) -> 'ctype_t' + asgop_revert(cop) -> ctype_t + + + Convert assignment operator into plain operator. For example, + cot_asgadd returns cot_add + + @param cop (C++: ctype_t) + @return: cot_empty is the input operator is not an assignment + operator. + +Help on class bit_bound_t in module ida_hexrays: + +class bit_bound_t(builtins.object) + | Proxy of C++ bit_bound_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=0, s=0) -> bit_bound_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bit_bound_t(...) + | delete_bit_bound_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | nbits + | bit_bound_t_nbits_get(self) -> int16 + | + | sbits + | bit_bound_t_sbits_get(self) -> int16 + | + | thisown + | The membership flag + +Help on class bitset_t in module ida_hexrays: + +class bitset_t(builtins.object) + | Proxy of C++ bitset_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> bitset_t + | __init__(self, m) -> bitset_t + | + | __iter__(self) + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __len__ = count(self, *args) -> 'int' + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bitset_t(...) + | delete_bitset_t(self) + | + | add(self, *args) -> 'bool' + | add(self, bit) -> bool + | add(self, bit, width) -> bool + | add(self, ml) -> bool + | + | back(self, *args) -> 'int' + | back(self) -> int + | + | begin(self, *args) -> 'bitset_t::iterator' + | begin(self) -> bitset_t::iterator + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | copy(self, *args) -> 'bitset_t &' + | copy(self, m) -> bitset_t + | + | count(self, *args) -> 'int' + | count(self) -> int + | count(self, bit) -> int + | + | cut_at(self, *args) -> 'bool' + | cut_at(self, maxbit) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'bitset_t::iterator' + | end(self) -> bitset_t::iterator + | + | fill_with_ones(self, *args) -> 'void' + | fill_with_ones(self, maxbit) + | + | front(self, *args) -> 'int' + | front(self) -> int + | + | has(self, *args) -> 'bool' + | has(self, bit) -> bool + | + | has_all(self, *args) -> 'bool' + | has_all(self, bit, width) -> bool + | + | has_any(self, *args) -> 'bool' + | has_any(self, bit, width) -> bool + | + | has_common(self, *args) -> 'bool' + | has_common(self, ml) -> bool + | + | inc(self, *args) -> 'void' + | inc(self, p, n=1) + | + | includes(self, *args) -> 'bool' + | includes(self, ml) -> bool + | + | intersect(self, *args) -> 'bool' + | intersect(self, ml) -> bool + | + | is_subset_of(self, *args) -> 'bool' + | is_subset_of(self, ml) -> bool + | + | itat(self, *args) -> 'bitset_t::iterator' + | itat(self, n) -> bitset_t::iterator + | + | itv(self, *args) -> 'int' + | itv(self, it) -> int + | + | last(self, *args) -> 'int' + | last(self) -> int + | + | shift_down(self, *args) -> 'void' + | shift_down(self, shift) + | + | sub(self, *args) -> 'bool' + | sub(self, bit) -> bool + | sub(self, bit, width) -> bool + | sub(self, ml) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function block_chains_begin in module ida_hexrays: + +block_chains_begin(*args) -> 'block_chains_iterator_t' + block_chains_begin(set) -> block_chains_iterator_t + + + Get iterator pointing to the beginning of 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + +Help on function block_chains_clear in module ida_hexrays: + +block_chains_clear(*args) -> 'void' + block_chains_clear(set) + + + Clear 'block_chains_t' . + + + @param set (C++: block_chains_t *) + +Help on function block_chains_end in module ida_hexrays: + +block_chains_end(*args) -> 'block_chains_iterator_t' + block_chains_end(set) -> block_chains_iterator_t + + + Get iterator pointing to the end of 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + +Help on function block_chains_erase in module ida_hexrays: + +block_chains_erase(*args) -> 'void' + block_chains_erase(set, p) + + + Erase current element from 'block_chains_t' . + + + @param set (C++: block_chains_t *) + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_find in module ida_hexrays: + +block_chains_find(*args) -> 'block_chains_iterator_t' + block_chains_find(set, val) -> block_chains_iterator_t + + + Find the specified key in set 'block_chains_t' . + + + @param set (C++: const block_chains_t *) + @param val (C++: const chain_t &) + +Help on function block_chains_free in module ida_hexrays: + +block_chains_free(*args) -> 'void' + block_chains_free(set) + + + Delete 'block_chains_t' instance. + + + @param set (C++: block_chains_t *) + +Help on function block_chains_get in module ida_hexrays: + +block_chains_get(*args) -> 'chain_t &' + block_chains_get(p) -> chain_t + + + Get reference to the current set value. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_insert in module ida_hexrays: + +block_chains_insert(*args) -> 'block_chains_iterator_t' + block_chains_insert(set, val) -> block_chains_iterator_t + + + Insert new ( 'chain_t' ) into set 'block_chains_t' . + + + @param set (C++: block_chains_t *) + @param val (C++: const chain_t &) + +Help on class block_chains_iterator_t in module ida_hexrays: + +class block_chains_iterator_t(builtins.object) + | Proxy of C++ block_chains_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> block_chains_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_block_chains_iterator_t(...) + | delete_block_chains_iterator_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 + | + | x + | block_chains_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function block_chains_new in module ida_hexrays: + +block_chains_new(*args) -> 'block_chains_t *' + block_chains_new() -> block_chains_t + + + Create a new 'block_chains_t' instance. + +Help on function block_chains_next in module ida_hexrays: + +block_chains_next(*args) -> 'block_chains_iterator_t' + block_chains_next(p) -> block_chains_iterator_t + + + Move to the next element. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_prev in module ida_hexrays: + +block_chains_prev(*args) -> 'block_chains_iterator_t' + block_chains_prev(p) -> block_chains_iterator_t + + + Move to the previous element. + + + @param p (C++: block_chains_iterator_t) + +Help on function block_chains_size in module ida_hexrays: + +block_chains_size(*args) -> 'size_t' + block_chains_size(set) -> size_t + + + Get size of 'block_chains_t' . + + + @param set (C++: block_chains_t *) + +Help on class block_chains_t in module ida_hexrays: + +class block_chains_t(builtins.object) + | Proxy of C++ block_chains_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> block_chains_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_block_chains_t(...) + | delete_block_chains_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | get_chain(self, *args) -> 'chain_t *' + | get_chain(self, k, width=1) -> chain_t + | get_chain(self, k, width=1) -> chain_t + | get_chain(self, ch) -> chain_t + | get_chain(self, ch) -> chain_t + | + | get_reg_chain(self, *args) -> 'chain_t *' + | get_reg_chain(self, reg, width=1) -> chain_t + | get_reg_chain(self, reg, width=1) -> chain_t + | + | get_stk_chain(self, *args) -> 'chain_t *' + | get_stk_chain(self, off, width=1) -> chain_t + | get_stk_chain(self, off, width=1) -> chain_t + | + | ---------------------------------------------------------------------- + | 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 + +Help on class block_chains_vec_t in module ida_hexrays: + +class block_chains_vec_t(builtins.object) + | Proxy of C++ qvector< block_chains_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'block_chains_t const &' + | __getitem__(self, i) -> block_chains_t + | + | __init__(self, *args) + | __init__(self) -> block_chains_vec_t + | __init__(self, x) -> block_chains_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_block_chains_vec_t(...) + | delete_block_chains_vec_t(self) + | + | at(self, *args) -> 'block_chains_t const &' + | at(self, _idx) -> block_chains_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< block_chains_t >::const_iterator' + | begin(self) -> block_chains_t + | begin(self) -> block_chains_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< block_chains_t >::const_iterator' + | end(self) -> block_chains_t + | end(self) -> block_chains_t + | + | erase(self, *args) -> 'qvector< block_chains_t >::iterator' + | erase(self, it) -> block_chains_t + | erase(self, first, last) -> block_chains_t + | + | extract(self, *args) -> 'block_chains_t *' + | extract(self) -> block_chains_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=block_chains_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< block_chains_t >::iterator' + | insert(self, it, x) -> block_chains_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'block_chains_t &' + | push_back(self, x) + | push_back(self) -> block_chains_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function boundaries_begin in module ida_hexrays: + +boundaries_begin(*args) -> 'boundaries_iterator_t' + boundaries_begin(map) -> boundaries_iterator_t + + + Get iterator pointing to the beginning of boundaries_t. + + + @param map (C++: const boundaries_t *) + +Help on function boundaries_clear in module ida_hexrays: + +boundaries_clear(*args) -> 'void' + boundaries_clear(map) + + + Clear boundaries_t. + + + @param map (C++: boundaries_t *) + +Help on function boundaries_end in module ida_hexrays: + +boundaries_end(*args) -> 'boundaries_iterator_t' + boundaries_end(map) -> boundaries_iterator_t + + + Get iterator pointing to the end of boundaries_t. + + + @param map (C++: const boundaries_t *) + +Help on function boundaries_erase in module ida_hexrays: + +boundaries_erase(*args) -> 'void' + boundaries_erase(map, p) + + + Erase current element from boundaries_t. + + + @param map (C++: boundaries_t *) + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_find in module ida_hexrays: + +boundaries_find(*args) -> 'boundaries_iterator_t' + boundaries_find(map, key) -> boundaries_iterator_t + + + Find the specified key in boundaries_t. + + + @param map (C++: const boundaries_t *) + @param key (C++: const cinsn_t *&) + +Help on function boundaries_first in module ida_hexrays: + +boundaries_first(*args) -> 'cinsn_t *const &' + boundaries_first(p) -> cinsn_t + + + Get reference to the current map key. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_free in module ida_hexrays: + +boundaries_free(*args) -> 'void' + boundaries_free(map) + + + Delete boundaries_t instance. + + + @param map (C++: boundaries_t *) + +Help on function boundaries_insert in module ida_hexrays: + +boundaries_insert(*args) -> 'boundaries_iterator_t' + boundaries_insert(map, key, val) -> boundaries_iterator_t + + + Insert new ( 'cinsn_t' *, 'rangeset_t' ) pair into boundaries_t. + + + @param map (C++: boundaries_t *) + @param key (C++: const cinsn_t *&) + @param val (C++: const rangeset_t &) + +Help on class boundaries_iterator_t in module ida_hexrays: + +class boundaries_iterator_t(builtins.object) + | Proxy of C++ boundaries_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> boundaries_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_boundaries_iterator_t(...) + | delete_boundaries_iterator_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 + | + | x + | boundaries_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function boundaries_new in module ida_hexrays: + +boundaries_new(*args) -> 'boundaries_t *' + boundaries_new() -> boundaries_t + + + Create a new boundaries_t instance. + +Help on function boundaries_next in module ida_hexrays: + +boundaries_next(*args) -> 'boundaries_iterator_t' + boundaries_next(p) -> boundaries_iterator_t + + + Move to the next element. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_prev in module ida_hexrays: + +boundaries_prev(*args) -> 'boundaries_iterator_t' + boundaries_prev(p) -> boundaries_iterator_t + + + Move to the previous element. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_second in module ida_hexrays: + +boundaries_second(*args) -> 'rangeset_t &' + boundaries_second(p) -> rangeset_t + + + Get reference to the current map value. + + + @param p (C++: boundaries_iterator_t) + +Help on function boundaries_size in module ida_hexrays: + +boundaries_size(*args) -> 'size_t' + boundaries_size(map) -> size_t + + + Get size of boundaries_t. + + + @param map (C++: boundaries_t *) + +Help on class boundaries_t in module ida_hexrays: + +class boundaries_t(builtins.object) + | Proxy of C++ std::map< cinsn_t *,rangeset_t > class. + | + | Methods defined here: + | + | __begin = boundaries_begin(...) + | boundaries_begin(map) -> boundaries_iterator_t + | + | __clear = boundaries_clear(...) + | boundaries_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = boundaries_end(...) + | boundaries_end(map) -> boundaries_iterator_t + | + | __erase = boundaries_erase(...) + | boundaries_erase(map, p) + | + | __find = boundaries_find(...) + | boundaries_find(map, key) -> boundaries_iterator_t + | + | __first = boundaries_first(...) + | boundaries_first(p) -> cinsn_t + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> boundaries_t + | + | __insert = boundaries_insert(...) + | boundaries_insert(map, key, val) -> boundaries_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = boundaries_next(...) + | boundaries_next(p) -> boundaries_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = boundaries_second(...) + | boundaries_second(p) -> rangeset_t + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = boundaries_size(...) + | boundaries_size(map) -> size_t + | + | __swig_destroy__ = delete_boundaries_t(...) + | delete_boundaries_t(self) + | + | at(self, *args) -> 'rangeset_t &' + | at(self, _Keyval) -> rangeset_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = + | Proxy of C++ cinsn_t class. + | + | valuetype = + | Proxy of C++ rangeset_t class. + +Help on function call_helper in module ida_hexrays: + +call_helper(rettype, args, *rest) + +Help on class carg_t in module ida_hexrays: + +class carg_t(cexpr_t) + | Proxy of C++ carg_t class. + | + | Method resolution order: + | carg_t + | cexpr_t + | citem_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> carg_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_carg_t(...) + | delete_carg_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | consume_cexpr(self, *args) -> 'void' + | consume_cexpr(self, e) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | formal_type + | carg_t_formal_type_get(self) -> tinfo_t + | + | is_vararg + | carg_t_is_vararg_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from cexpr_t: + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _get_a(self, *args) -> 'carglist_t *' + | _get_a(self) -> carglist_t + | + | _get_fpc(self, *args) -> 'fnumber_t *' + | _get_fpc(self) -> fnumber_t + | + | _get_helper(self, *args) -> 'char *' + | _get_helper(self) -> char * + | + | _get_insn(self, *args) -> 'cinsn_t *' + | _get_insn(self) -> cinsn_t + | + | _get_m(self, *args) -> 'int' + | _get_m(self) -> int + | + | _get_n(self, *args) -> 'cnumber_t *' + | _get_n(self) -> cnumber_t + | + | _get_obj_ea(self, *args) -> 'ea_t' + | _get_obj_ea(self) -> ea_t + | + | _get_ptrsize(self, *args) -> 'int' + | _get_ptrsize(self) -> int + | + | _get_refwidth(self, *args) -> 'int' + | _get_refwidth(self) -> int + | + | _get_string(self, *args) -> 'char *' + | _get_string(self) -> char * + | + | _get_x(self, *args) -> 'cexpr_t *' + | _get_x(self) -> cexpr_t + | + | _get_y(self, *args) -> 'cexpr_t *' + | _get_y(self) -> cexpr_t + | + | _get_z(self, *args) -> 'cexpr_t *' + | _get_z(self) -> cexpr_t + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _replace_by(self, *args) -> 'void' + | _replace_by(self, r) + | + | _set_a(self, *args) -> 'void' + | _set_a(self, _v) + | + | _set_fpc(self, *args) -> 'void' + | _set_fpc(self, _v) + | + | _set_helper(self, *args) -> 'void' + | _set_helper(self, _v) + | + | _set_insn(self, *args) -> 'void' + | _set_insn(self, _v) + | + | _set_m(self, *args) -> 'void' + | _set_m(self, _v) + | + | _set_n(self, *args) -> 'void' + | _set_n(self, _v) + | + | _set_obj_ea(self, *args) -> 'void' + | _set_obj_ea(self, _v) + | + | _set_ptrsize(self, *args) -> 'void' + | _set_ptrsize(self, _v) + | + | _set_refwidth(self, *args) -> 'void' + | _set_refwidth(self, _v) + | + | _set_string(self, *args) -> 'void' + | _set_string(self, _v) + | + | _set_x(self, *args) -> 'void' + | _set_x(self, _v) + | + | _set_y(self, *args) -> 'void' + | _set_y(self, _v) + | + | _set_z(self, *args) -> 'void' + | _set_z(self, _v) + | + | assign(self, *args) -> 'cexpr_t &' + | assign(self, r) -> cexpr_t + | + | calc_type(self, *args) -> 'void' + | calc_type(self, recursive) + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | contains_comma(self, *args) -> 'bool' + | contains_comma(self, times=1) -> bool + | + | contains_comma_or_insn_or_label(self, *args) -> 'bool' + | contains_comma_or_insn_or_label(self, maxcommas=1) -> bool + | + | contains_insn(self, *args) -> 'bool' + | contains_insn(self, times=1) -> bool + | + | contains_insn_or_label(self, *args) -> 'bool' + | contains_insn_or_label(self) -> bool + | + | contains_operator(self, *args) -> 'bool' + | contains_operator(self, needed_op, times=1) -> bool + | + | cpadone(self, *args) -> 'bool' + | cpadone(self) -> bool + | + | equal_effect(self, *args) -> 'bool' + | equal_effect(self, r) -> bool + | + | find_num_op(self, *args) -> 'cexpr_t *' + | find_num_op(self) -> cexpr_t + | find_num_op(self) -> cexpr_t + | + | find_op(self, *args) -> 'cexpr_t *' + | find_op(self, _op) -> cexpr_t + | find_op(self, _op) -> cexpr_t + | + | get_1num_op(self, *args) -> 'bool' + | get_1num_op(self, o1, o2) -> bool + | + | get_const_value(self, *args) -> 'bool' + | get_const_value(self) -> bool + | + | get_high_nbit_bound(self, *args) -> 'bit_bound_t' + | get_high_nbit_bound(self) -> bit_bound_t + | + | get_low_nbit_bound(self, *args) -> 'int' + | get_low_nbit_bound(self) -> int + | + | get_ptr_or_array(self, *args) -> 'cexpr_t *' + | get_ptr_or_array(self) -> cexpr_t + | + | get_type_sign(self, *args) -> 'type_sign_t' + | get_type_sign(self) -> type_sign_t + | + | get_v(self, *args) -> 'var_ref_t *' + | get_v(self) -> var_ref_t + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self) -> bool + | + | is_call_arg_of(self, *args) -> 'bool' + | is_call_arg_of(self, parent) -> bool + | + | is_call_object_of(self, *args) -> 'bool' + | is_call_object_of(self, parent) -> bool + | + | is_child_of(self, *args) -> 'bool' + | is_child_of(self, parent) -> bool + | + | is_const_value(self, *args) -> 'bool' + | is_const_value(self, _v) -> bool + | + | is_cstr(self, *args) -> 'bool' + | is_cstr(self) -> bool + | + | is_fpop(self, *args) -> 'bool' + | is_fpop(self) -> bool + | + | is_jumpout(self, *args) -> 'bool' + | is_jumpout(self) -> bool + | + | is_negative_const(self, *args) -> 'bool' + | is_negative_const(self) -> bool + | + | is_nice_cond(self, *args) -> 'bool' + | is_nice_cond(self) -> bool + | + | is_nice_expr(self, *args) -> 'bool' + | is_nice_expr(self) -> bool + | + | is_non_negative_const(self, *args) -> 'bool' + | is_non_negative_const(self) -> bool + | + | is_non_zero_const(self, *args) -> 'bool' + | is_non_zero_const(self) -> bool + | + | is_odd_lvalue(self, *args) -> 'bool' + | is_odd_lvalue(self) -> bool + | + | is_type_signed(self, *args) -> 'bool' + | is_type_signed(self) -> bool + | + | is_type_unsigned(self, *args) -> 'bool' + | is_type_unsigned(self) -> bool + | + | is_undef_val(self, *args) -> 'bool' + | is_undef_val(self) -> bool + | + | is_vftable(self, *args) -> 'bool' + | is_vftable(self) -> bool + | + | is_zero_const(self, *args) -> 'bool' + | is_zero_const(self) -> bool + | + | maybe_ptr(self, *args) -> 'bool' + | maybe_ptr(self) -> bool + | + | numval(self, *args) -> 'uint64' + | numval(self) -> uint64 + | + | print1(self, *args) -> 'void' + | print1(self, func) + | + | put_number(self, *args) -> 'void' + | put_number(self, func, value, nbytes, sign=no_sign) + | + | requires_lvalue(self, *args) -> 'bool' + | requires_lvalue(self, child) -> bool + | + | set_cpadone(self, *args) -> 'void' + | set_cpadone(self) + | + | set_v(self, *args) -> 'void' + | set_v(self, v) + | + | set_vftable(self, *args) -> 'void' + | set_vftable(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | theother(self, *args) -> 'cexpr_t *' + | theother(self, what) -> cexpr_t + | theother(self, what) -> cexpr_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cexpr_t: + | + | a + | + | exflags + | cexpr_t_exflags_get(self) -> uint32 + | + | fpc + | + | helper + | + | insn + | + | m + | + | n + | + | obj_ea + | + | operands + | return a dictionary with the operands of a cexpr_t. + | + | opname + | + | ptrsize + | + | refwidth + | + | string + | + | type + | cexpr_t_type_get(self) -> tinfo_t + | + | v + | + | x + | + | y + | + | z + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from cexpr_t: + | + | op_to_typename = {0: 'empty', 1: 'comma', 2: 'asg', 3: 'asgbor', 4: 'a... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) -> 'ctype_t' + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) -> 'void' + | _set_op(self, v) + | + | contains_expr(self, *args) -> 'bool' + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) -> 'bool' + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) -> 'citem_t *' + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) -> 'citem_t *' + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) -> 'bool' + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class carglist_t in module ida_hexrays: + +class carglist_t(qvector_carg_t) + | Proxy of C++ carglist_t class. + | + | Method resolution order: + | carglist_t + | qvector_carg_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> carglist_t + | __init__(self, ftype, fl=0) -> carglist_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_carglist_t(...) + | delete_carglist_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | carglist_t_flags_get(self) -> int + | + | functype + | carglist_t_functype_get(self) -> tinfo_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_carg_t: + | + | __getitem__(self, *args) -> 'carg_t const &' + | __getitem__(self, i) -> carg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'carg_t &' + | push_back(self, x) + | push_back(self) -> carg_t + | + | at = __getitem__(self, *args) -> 'carg_t const &' + | __getitem__(self, i) -> carg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< carg_t >::const_iterator' + | begin(self) -> carg_t + | begin(self) -> carg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< carg_t >::const_iterator' + | end(self) -> carg_t + | end(self) -> carg_t + | + | erase(self, *args) -> 'qvector< carg_t >::iterator' + | erase(self, it) -> carg_t + | erase(self, first, last) -> carg_t + | + | extract(self, *args) -> 'carg_t *' + | extract(self) -> carg_t + | + | find(self, *args) -> 'qvector< carg_t >::const_iterator' + | find(self, x) -> carg_t + | find(self, x) -> carg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=carg_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< carg_t >::iterator' + | insert(self, it, x) -> carg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'carg_t &' + | push_back(self, x) + | push_back(self) -> carg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_carg_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class casm_t in module ida_hexrays: + +class casm_t(ida_pro.eavec_t)↗ + | Proxy of C++ casm_t class. + | + | Method resolution order: + | casm_t + | ida_pro.eavec_t↗ + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, ea) -> casm_t + | __init__(self, r) -> casm_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_casm_t(...) + | delete_casm_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | one_insn(self, *args) -> 'bool' + | one_insn(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_pro.eavec_t:↗ + | + | __getitem__(self, *args) -> 'unsigned-ea-like-numeric-type const &'↗ + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'unsigned-ea-like-numeric-type &'↗ + | push_back(self, x) + | push_back(self) -> unsigned-ea-like-numeric-type &↗ + | + | at = __getitem__(self, *args) -> 'unsigned-ea-like-numeric-type const &'↗ + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< unsigned-ea-like-numeric-type >::const_iterator'↗ + | begin(self) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | begin(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< unsigned-ea-like-numeric-type >::const_iterator'↗ + | end(self) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | end(self) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | erase(self, *args) -> 'qvector< unsigned-ea-like-numeric-type >::iterator'↗ + | erase(self, it) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | erase(self, first, last) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | + | extract(self, *args) -> 'unsigned-ea-like-numeric-type *'↗ + | extract(self) -> unsigned-ea-like-numeric-type *↗ + | + | find(self, *args) -> 'qvector< unsigned-ea-like-numeric-type >::const_iterator'↗ + | find(self, x) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | find(self, x) -> qvector< unsigned-ea-like-numeric-type >::const_iterator↗ + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< unsigned-ea-like-numeric-type >::iterator'↗ + | insert(self, it, x) -> qvector< unsigned-ea-like-numeric-type >::iterator↗ + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'unsigned-ea-like-numeric-type &'↗ + | push_back(self, x) + | push_back(self) -> unsigned-ea-like-numeric-type &↗ + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_pro.eavec_t:↗ + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function cblock_at in module ida_hexrays: + +cblock_at(self, index) + # cblock.at(int) -> returns the item at the given index index + +Help on function cblock_find in module ida_hexrays: + +cblock_find(self, item) + # cblock.find(cinsn_t) -> returns the iterator positioned at the given item + +Help on function cblock_index in module ida_hexrays: + +cblock_index(self, item) + # cblock.index(cinsn_t) -> returns the index of the given item + +Help on function cblock_insert in module ida_hexrays: + +cblock_insert(self, index, item) + # cblock.insert(index, cinsn_t) + +Help on function cblock_iter in module ida_hexrays: + +cblock_iter(self) + +Help on function cblock_remove in module ida_hexrays: + +cblock_remove(self, item) + # cblock.remove(cinsn_t) + +Help on class cblock_t in module ida_hexrays: + +class cblock_t(qlist_cinsn_t) + | Proxy of C++ cblock_t class. + | + | Method resolution order: + | cblock_t + | qlist_cinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cblock_t + | + | __iter__ = cblock_iter(self) + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cblock_t(...) + | delete_cblock_t(self) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | at = cblock_at(self, index) + | # cblock.at(int) -> returns the item at the given index index + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | find = cblock_find(self, item) + | # cblock.find(cinsn_t) -> returns the iterator positioned at the given item + | + | index = cblock_index(self, item) + | # cblock.index(cinsn_t) -> returns the index of the given item + | + | insert = cblock_insert(self, index, item) + | # cblock.insert(index, cinsn_t) + | + | remove = cblock_remove(self, item) + | # cblock.remove(cinsn_t) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from qlist_cinsn_t: + | + | back(self, *args) -> 'cinsn_t const &' + | back(self) -> cinsn_t + | back(self) -> cinsn_t + | + | begin(self, *args) -> 'qlist_cinsn_t_iterator' + | begin(self) -> qlist_cinsn_t_iterator + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qlist_cinsn_t_iterator' + | end(self) -> qlist_cinsn_t_iterator + | + | erase(self, *args) -> 'void' + | erase(self, p) -> qlist< cinsn_t >::iterator + | erase(self, p1, p2) + | erase(self, p) + | + | front(self, *args) -> 'cinsn_t const &' + | front(self) -> cinsn_t + | front(self) -> cinsn_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | pop_front(self, *args) -> 'void' + | pop_front(self) + | + | push_back(self, *args) -> 'cinsn_t &' + | push_back(self, x) + | push_back(self) -> cinsn_t + | + | push_front(self, *args) -> 'void' + | push_front(self, x) + | + | rbegin(self, *args) -> 'qlist< cinsn_t >::const_reverse_iterator' + | rbegin(self) -> qlist< cinsn_t >::reverse_iterator + | rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | rend(self, *args) -> 'qlist< cinsn_t >::const_reverse_iterator' + | rend(self) -> qlist< cinsn_t >::reverse_iterator + | rend(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, x) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qlist_cinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class ccase_t in module ida_hexrays: + +class ccase_t(cinsn_t) + | Proxy of C++ ccase_t class. + | + | Method resolution order: + | ccase_t + | cinsn_t + | citem_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ccase_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ccase_t(...) + | delete_ccase_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | value(self, *args) -> 'uint64 const &' + | value(self, i) -> uint64 const & + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | values + | ccase_t_values_get(self) -> ulonglongvec_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from cinsn_t: + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _get_casm(self, *args) -> 'casm_t *' + | _get_casm(self) -> casm_t + | + | _get_cblock(self, *args) -> 'cblock_t *' + | _get_cblock(self) -> cblock_t + | + | _get_cdo(self, *args) -> 'cdo_t *' + | _get_cdo(self) -> cdo_t + | + | _get_cexpr(self, *args) -> 'cexpr_t *' + | _get_cexpr(self) -> cexpr_t + | + | _get_cfor(self, *args) -> 'cfor_t *' + | _get_cfor(self) -> cfor_t + | + | _get_cgoto(self, *args) -> 'cgoto_t *' + | _get_cgoto(self) -> cgoto_t + | + | _get_cif(self, *args) -> 'cif_t *' + | _get_cif(self) -> cif_t + | + | _get_creturn(self, *args) -> 'creturn_t *' + | _get_creturn(self) -> creturn_t + | + | _get_cswitch(self, *args) -> 'cswitch_t *' + | _get_cswitch(self) -> cswitch_t + | + | _get_cwhile(self, *args) -> 'cwhile_t *' + | _get_cwhile(self) -> cwhile_t + | + | _print(self, *args) -> 'void' + | _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _replace_by(self, *args) -> 'void' + | _replace_by(self, r) + | + | _set_casm(self, *args) -> 'void' + | _set_casm(self, _v) + | + | _set_cblock(self, *args) -> 'void' + | _set_cblock(self, _v) + | + | _set_cdo(self, *args) -> 'void' + | _set_cdo(self, _v) + | + | _set_cexpr(self, *args) -> 'void' + | _set_cexpr(self, _v) + | + | _set_cfor(self, *args) -> 'void' + | _set_cfor(self, _v) + | + | _set_cgoto(self, *args) -> 'void' + | _set_cgoto(self, _v) + | + | _set_cif(self, *args) -> 'void' + | _set_cif(self, _v) + | + | _set_creturn(self, *args) -> 'void' + | _set_creturn(self, _v) + | + | _set_cswitch(self, *args) -> 'void' + | _set_cswitch(self, _v) + | + | _set_cwhile(self, *args) -> 'void' + | _set_cwhile(self, _v) + | + | assign(self, *args) -> 'cinsn_t &' + | assign(self, r) -> cinsn_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | collect_free_breaks(self, *args) -> 'bool' + | collect_free_breaks(self, breaks) -> bool + | + | collect_free_continues(self, *args) -> 'bool' + | collect_free_continues(self, continues) -> bool + | + | contains_free_break(self, *args) -> 'bool' + | contains_free_break(self) -> bool + | + | contains_free_continue(self, *args) -> 'bool' + | contains_free_continue(self) -> bool + | + | contains_insn(self, *args) -> 'bool' + | contains_insn(self, type, times=1) -> bool + | + | create_if(self, *args) -> 'cif_t &' + | create_if(self, cnd) -> cif_t + | + | is_epilog(self) + | + | is_ordinary_flow(self, *args) -> 'bool' + | is_ordinary_flow(self) -> bool + | + | new_insn(self, *args) -> 'cinsn_t &' + | new_insn(self, insn_ea) -> cinsn_t + | + | print1(self, *args) -> 'void' + | print1(self, func) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | zero(self, *args) -> 'void' + | zero(self) + | + | ---------------------------------------------------------------------- + | Static methods inherited from cinsn_t: + | + | insn_is_epilog(*args) -> 'bool' + | insn_is_epilog(insn) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cinsn_t: + | + | casm + | + | cblock + | + | cdo + | + | cexpr + | + | cfor + | + | cgoto + | + | cif + | + | creturn + | + | cswitch + | + | cwhile + | + | details + | return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + | + | opname + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from cinsn_t: + | + | op_to_typename = {70: 'empty', 71: 'block', 72: 'expr', 73: 'if', 74: ... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) -> 'ctype_t' + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) -> 'void' + | _set_op(self, v) + | + | contains_expr(self, *args) -> 'bool' + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) -> 'bool' + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) -> 'citem_t *' + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) -> 'citem_t *' + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) -> 'bool' + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class ccases_t in module ida_hexrays: + +class ccases_t(qvector_ccase_t) + | Proxy of C++ ccases_t class. + | + | Method resolution order: + | ccases_t + | qvector_ccase_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ccases_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ccases_t(...) + | delete_ccases_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_ccase_t: + | + | __getitem__(self, *args) -> 'ccase_t const &' + | __getitem__(self, i) -> ccase_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'ccase_t &' + | push_back(self, x) + | push_back(self) -> ccase_t + | + | at = __getitem__(self, *args) -> 'ccase_t const &' + | __getitem__(self, i) -> ccase_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< ccase_t >::const_iterator' + | begin(self) -> ccase_t + | begin(self) -> ccase_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< ccase_t >::const_iterator' + | end(self) -> ccase_t + | end(self) -> ccase_t + | + | erase(self, *args) -> 'qvector< ccase_t >::iterator' + | erase(self, it) -> ccase_t + | erase(self, first, last) -> ccase_t + | + | extract(self, *args) -> 'ccase_t *' + | extract(self) -> ccase_t + | + | find(self, *args) -> 'qvector< ccase_t >::const_iterator' + | find(self, x) -> ccase_t + | find(self, x) -> ccase_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=ccase_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< ccase_t >::iterator' + | insert(self, it, x) -> ccase_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'ccase_t &' + | push_back(self, x) + | push_back(self) -> ccase_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_ccase_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class cdg_insn_iterator_t in module ida_hexrays: + +class cdg_insn_iterator_t(builtins.object) + | Proxy of C++ cdg_insn_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cdg_insn_iterator_t + | __init__(self, r) -> cdg_insn_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cdg_insn_iterator_t(...) + | delete_cdg_insn_iterator_t(self) + | + | dslot_with_xrefs(self, *args) -> 'bool' + | dslot_with_xrefs(self) -> bool + | + | has_dslot(self, *args) -> 'bool' + | has_dslot(self) -> bool + | + | next(self, *args) -> 'merror_t' + | next(self, ins) -> merror_t + | + | ok(self, *args) -> 'bool' + | ok(self) -> bool + | + | start(self, *args) -> 'void' + | start(self, rng) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dslot + | cdg_insn_iterator_t_dslot_get(self) -> ea_t + | + | dslot_insn + | cdg_insn_iterator_t_dslot_insn_get(self) -> insn_t * + | + | ea + | cdg_insn_iterator_t_ea_get(self) -> ea_t + | + | end + | cdg_insn_iterator_t_end_get(self) -> ea_t + | + | is_likely_dslot + | cdg_insn_iterator_t_is_likely_dslot_get(self) -> bool + | + | is_separate_dslot + | cdg_insn_iterator_t_is_separate_dslot_get(self) -> bool + | + | thisown + | The membership flag + +Help on class cdo_t in module ida_hexrays: + +class cdo_t(cloop_t) + | Proxy of C++ cdo_t class. + | + | Method resolution order: + | cdo_t + | cloop_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cdo_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cdo_t(...) + | delete_cdo_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) -> 'cloop_t &' + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class ceinsn_t in module ida_hexrays: + +class ceinsn_t(builtins.object) + | Proxy of C++ ceinsn_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ceinsn_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ceinsn_t(...) + | delete_ceinsn_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + | + | thisown + | The membership flag + +Help on function cexpr_operands in module ida_hexrays: + +cexpr_operands(self) + return a dictionary with the operands of a cexpr_t. + +Help on class cexpr_t in module ida_hexrays: + +class cexpr_t(citem_t) + | Proxy of C++ cexpr_t class. + | + | Method resolution order: + | cexpr_t + | citem_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cexpr_t + | __init__(self, cop, _x) -> cexpr_t + | __init__(self, cop, _x, _y) -> cexpr_t + | __init__(self, cop, _x, _y, _z) -> cexpr_t + | __init__(self, r) -> cexpr_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cexpr_t(...) + | delete_cexpr_t(self) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _get_a(self, *args) -> 'carglist_t *' + | _get_a(self) -> carglist_t + | + | _get_fpc(self, *args) -> 'fnumber_t *' + | _get_fpc(self) -> fnumber_t + | + | _get_helper(self, *args) -> 'char *' + | _get_helper(self) -> char * + | + | _get_insn(self, *args) -> 'cinsn_t *' + | _get_insn(self) -> cinsn_t + | + | _get_m(self, *args) -> 'int' + | _get_m(self) -> int + | + | _get_n(self, *args) -> 'cnumber_t *' + | _get_n(self) -> cnumber_t + | + | _get_obj_ea(self, *args) -> 'ea_t' + | _get_obj_ea(self) -> ea_t + | + | _get_ptrsize(self, *args) -> 'int' + | _get_ptrsize(self) -> int + | + | _get_refwidth(self, *args) -> 'int' + | _get_refwidth(self) -> int + | + | _get_string(self, *args) -> 'char *' + | _get_string(self) -> char * + | + | _get_x(self, *args) -> 'cexpr_t *' + | _get_x(self) -> cexpr_t + | + | _get_y(self, *args) -> 'cexpr_t *' + | _get_y(self) -> cexpr_t + | + | _get_z(self, *args) -> 'cexpr_t *' + | _get_z(self) -> cexpr_t + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _replace_by(self, *args) -> 'void' + | _replace_by(self, r) + | + | _set_a(self, *args) -> 'void' + | _set_a(self, _v) + | + | _set_fpc(self, *args) -> 'void' + | _set_fpc(self, _v) + | + | _set_helper(self, *args) -> 'void' + | _set_helper(self, _v) + | + | _set_insn(self, *args) -> 'void' + | _set_insn(self, _v) + | + | _set_m(self, *args) -> 'void' + | _set_m(self, _v) + | + | _set_n(self, *args) -> 'void' + | _set_n(self, _v) + | + | _set_obj_ea(self, *args) -> 'void' + | _set_obj_ea(self, _v) + | + | _set_ptrsize(self, *args) -> 'void' + | _set_ptrsize(self, _v) + | + | _set_refwidth(self, *args) -> 'void' + | _set_refwidth(self, _v) + | + | _set_string(self, *args) -> 'void' + | _set_string(self, _v) + | + | _set_x(self, *args) -> 'void' + | _set_x(self, _v) + | + | _set_y(self, *args) -> 'void' + | _set_y(self, _v) + | + | _set_z(self, *args) -> 'void' + | _set_z(self, _v) + | + | assign(self, *args) -> 'cexpr_t &' + | assign(self, r) -> cexpr_t + | + | calc_type(self, *args) -> 'void' + | calc_type(self, recursive) + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains_comma(self, *args) -> 'bool' + | contains_comma(self, times=1) -> bool + | + | contains_comma_or_insn_or_label(self, *args) -> 'bool' + | contains_comma_or_insn_or_label(self, maxcommas=1) -> bool + | + | contains_insn(self, *args) -> 'bool' + | contains_insn(self, times=1) -> bool + | + | contains_insn_or_label(self, *args) -> 'bool' + | contains_insn_or_label(self) -> bool + | + | contains_operator(self, *args) -> 'bool' + | contains_operator(self, needed_op, times=1) -> bool + | + | cpadone(self, *args) -> 'bool' + | cpadone(self) -> bool + | + | equal_effect(self, *args) -> 'bool' + | equal_effect(self, r) -> bool + | + | find_num_op(self, *args) -> 'cexpr_t *' + | find_num_op(self) -> cexpr_t + | find_num_op(self) -> cexpr_t + | + | find_op(self, *args) -> 'cexpr_t *' + | find_op(self, _op) -> cexpr_t + | find_op(self, _op) -> cexpr_t + | + | get_1num_op(self, *args) -> 'bool' + | get_1num_op(self, o1, o2) -> bool + | + | get_const_value(self, *args) -> 'bool' + | get_const_value(self) -> bool + | + | get_high_nbit_bound(self, *args) -> 'bit_bound_t' + | get_high_nbit_bound(self) -> bit_bound_t + | + | get_low_nbit_bound(self, *args) -> 'int' + | get_low_nbit_bound(self) -> int + | + | get_ptr_or_array(self, *args) -> 'cexpr_t *' + | get_ptr_or_array(self) -> cexpr_t + | + | get_type_sign(self, *args) -> 'type_sign_t' + | get_type_sign(self) -> type_sign_t + | + | get_v(self, *args) -> 'var_ref_t *' + | get_v(self) -> var_ref_t + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self) -> bool + | + | is_call_arg_of(self, *args) -> 'bool' + | is_call_arg_of(self, parent) -> bool + | + | is_call_object_of(self, *args) -> 'bool' + | is_call_object_of(self, parent) -> bool + | + | is_child_of(self, *args) -> 'bool' + | is_child_of(self, parent) -> bool + | + | is_const_value(self, *args) -> 'bool' + | is_const_value(self, _v) -> bool + | + | is_cstr(self, *args) -> 'bool' + | is_cstr(self) -> bool + | + | is_fpop(self, *args) -> 'bool' + | is_fpop(self) -> bool + | + | is_jumpout(self, *args) -> 'bool' + | is_jumpout(self) -> bool + | + | is_negative_const(self, *args) -> 'bool' + | is_negative_const(self) -> bool + | + | is_nice_cond(self, *args) -> 'bool' + | is_nice_cond(self) -> bool + | + | is_nice_expr(self, *args) -> 'bool' + | is_nice_expr(self) -> bool + | + | is_non_negative_const(self, *args) -> 'bool' + | is_non_negative_const(self) -> bool + | + | is_non_zero_const(self, *args) -> 'bool' + | is_non_zero_const(self) -> bool + | + | is_odd_lvalue(self, *args) -> 'bool' + | is_odd_lvalue(self) -> bool + | + | is_type_signed(self, *args) -> 'bool' + | is_type_signed(self) -> bool + | + | is_type_unsigned(self, *args) -> 'bool' + | is_type_unsigned(self) -> bool + | + | is_undef_val(self, *args) -> 'bool' + | is_undef_val(self) -> bool + | + | is_vftable(self, *args) -> 'bool' + | is_vftable(self) -> bool + | + | is_zero_const(self, *args) -> 'bool' + | is_zero_const(self) -> bool + | + | maybe_ptr(self, *args) -> 'bool' + | maybe_ptr(self) -> bool + | + | numval(self, *args) -> 'uint64' + | numval(self) -> uint64 + | + | print1(self, *args) -> 'void' + | print1(self, func) + | + | put_number(self, *args) -> 'void' + | put_number(self, func, value, nbytes, sign=no_sign) + | + | requires_lvalue(self, *args) -> 'bool' + | requires_lvalue(self, child) -> bool + | + | set_cpadone(self, *args) -> 'void' + | set_cpadone(self) + | + | set_v(self, *args) -> 'void' + | set_v(self, v) + | + | set_vftable(self, *args) -> 'void' + | set_vftable(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | theother(self, *args) -> 'cexpr_t *' + | theother(self, what) -> cexpr_t + | theother(self, what) -> cexpr_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | a + | + | exflags + | cexpr_t_exflags_get(self) -> uint32 + | + | fpc + | + | helper + | + | insn + | + | m + | + | n + | + | obj_ea + | + | operands + | return a dictionary with the operands of a cexpr_t. + | + | opname + | + | ptrsize + | + | refwidth + | + | string + | + | thisown + | The membership flag + | + | type + | cexpr_t_type_get(self) -> tinfo_t + | + | v + | + | x + | + | y + | + | z + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | op_to_typename = {0: 'empty', 1: 'comma', 2: 'asg', 3: 'asgbor', 4: 'a... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) -> 'ctype_t' + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) -> 'void' + | _set_op(self, v) + | + | contains_expr(self, *args) -> 'bool' + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) -> 'bool' + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) -> 'citem_t *' + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) -> 'citem_t *' + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) -> 'bool' + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on class cfor_t in module ida_hexrays: + +class cfor_t(cloop_t) + | Proxy of C++ cfor_t class. + | + | Method resolution order: + | cfor_t + | cloop_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cfor_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cfor_t(...) + | delete_cfor_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | init + | cfor_t_init_get(self) -> cexpr_t + | + | step + | cfor_t_step_get(self) -> cexpr_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) -> 'cloop_t &' + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class cfunc_parentee_t in module ida_hexrays: + +class cfunc_parentee_t(ctree_parentee_t) + | Proxy of C++ cfunc_parentee_t class. + | + | Method resolution order: + | cfunc_parentee_t + | ctree_parentee_t + | ctree_visitor_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, f, post=False) -> cfunc_parentee_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cfunc_parentee_t(...) + | delete_cfunc_parentee_t(self) + | + | calc_rvalue_type(self, *args) -> 'bool' + | calc_rvalue_type(self, target, e) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | func + | cfunc_parentee_t_func_get(self) -> cfunc_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_parentee_t: + | + | recalc_parent_types(self, *args) -> 'bool' + | recalc_parent_types(self) -> bool + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_visitor_t: + | + | apply_to(self, *args) -> 'int' + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) -> 'int' + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) -> 'void' + | clr_prune(self) + | + | clr_restart(self, *args) -> 'void' + | clr_restart(self) + | + | is_postorder(self, *args) -> 'bool' + | is_postorder(self) -> bool + | + | leave_expr(self, *args) -> 'int' + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) -> 'int' + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) -> 'bool' + | maintain_parents(self) -> bool + | + | must_prune(self, *args) -> 'bool' + | must_prune(self) -> bool + | + | must_restart(self, *args) -> 'bool' + | must_restart(self) -> bool + | + | only_insns(self, *args) -> 'bool' + | only_insns(self) -> bool + | + | parent_expr(self, *args) -> 'cexpr_t *' + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) -> 'cinsn_t *' + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) -> 'void' + | prune_now(self) + | + | set_restart(self, *args) -> 'void' + | set_restart(self) + | + | visit_expr(self, *args) -> 'int' + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) -> 'int' + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctree_visitor_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + +Help on class cfunc_t in module ida_hexrays: + +class cfunc_t(builtins.object) + | Proxy of C++ cfunc_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) -> 'qstring' + | __str__(self) -> qstring + | + | __swig_destroy__ = delete_cfunc_t(...) + | delete_cfunc_t(self) + | + | build_c_tree(self, *args) -> 'void' + | build_c_tree(self) + | + | del_orphan_cmts(self, *args) -> 'int' + | del_orphan_cmts(self) -> int + | + | find_item_coords(self, *args) -> 'PyObject *' + | find_item_coords(self, item, px, py) -> bool + | find_item_coords(self, item) -> PyObject * + | + | find_label(self, *args) -> 'citem_t *' + | find_label(self, label) -> citem_t + | + | gather_derefs(self, *args) -> 'bool' + | gather_derefs(self, ci, udm=None) -> bool + | + | get_boundaries(self, *args) -> 'boundaries_t &' + | get_boundaries(self) -> boundaries_t + | + | get_eamap(self, *args) -> 'eamap_t &' + | get_eamap(self) -> eamap_t + | + | get_func_type(self, *args) -> 'bool' + | get_func_type(self, type) -> bool + | + | get_line_item(self, *args) -> 'bool' + | get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool + | + | get_lvars(self, *args) -> 'lvars_t *' + | get_lvars(self) -> lvars_t + | + | get_pseudocode(self, *args) -> 'strvec_t const &' + | get_pseudocode(self) -> strvec_t + | + | get_stkoff_delta(self, *args) -> 'sval_t' + | get_stkoff_delta(self) -> sval_t + | + | get_user_cmt(self, *args) -> 'char const *' + | get_user_cmt(self, loc, rt) -> char const * + | + | get_user_iflags(self, *args) -> 'int32' + | get_user_iflags(self, loc) -> int32 + | + | get_user_union_selection(self, *args) -> 'bool' + | get_user_union_selection(self, ea, path) -> bool + | + | get_warnings(self, *args) -> 'hexwarns_t &' + | get_warnings(self) -> hexwarns_t + | + | has_orphan_cmts(self, *args) -> 'bool' + | has_orphan_cmts(self) -> bool + | + | print_dcl(self, *args) -> 'void' + | print_dcl(self) + | + | print_func(self, *args) -> 'void' + | print_func(self, vp) + | + | refresh_func_ctext(self, *args) -> 'void' + | refresh_func_ctext(self) + | + | release(self, *args) -> 'void' + | release(self) + | + | remove_unused_labels(self, *args) -> 'void' + | remove_unused_labels(self) + | + | save_user_cmts(self, *args) -> 'void' + | save_user_cmts(self) + | + | save_user_iflags(self, *args) -> 'void' + | save_user_iflags(self) + | + | save_user_labels(self, *args) -> 'void' + | save_user_labels(self) + | + | save_user_numforms(self, *args) -> 'void' + | save_user_numforms(self) + | + | save_user_unions(self, *args) -> 'void' + | save_user_unions(self) + | + | set_user_cmt(self, *args) -> 'void' + | set_user_cmt(self, loc, cmt) + | + | set_user_iflags(self, *args) -> 'void' + | set_user_iflags(self, loc, iflags) + | + | set_user_union_selection(self, *args) -> 'void' + | set_user_union_selection(self, ea, path) + | + | verify(self, *args) -> 'void' + | verify(self, aul, even_without_debugger) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argidx + | cfunc_t_argidx_get(self) -> intvec_t + | + | arguments + | + | body + | cfunc_t_body_get(self) -> cinsn_t + | + | boundaries + | get_boundaries(self) -> boundaries_t + | + | eamap + | get_eamap(self) -> eamap_t + | + | entry_ea + | cfunc_t_entry_ea_get(self) -> ea_t + | + | hdrlines + | cfunc_t_hdrlines_get(self) -> int + | + | lvars + | get_lvars(self) -> lvars_t + | + | maturity + | cfunc_t_maturity_get(self) -> ctree_maturity_t + | + | mba + | cfunc_t_mba_get(self) -> mbl_array_t + | + | numforms + | cfunc_t_numforms_get(self) -> user_numforms_t + | + | pseudocode + | get_pseudocode(self) -> strvec_t + | + | refcnt + | cfunc_t_refcnt_get(self) -> int + | + | statebits + | cfunc_t_statebits_get(self) -> int + | + | thisown + | The membership flag + | + | treeitems + | cfunc_t_treeitems_get(self) -> ctree_items_t + | + | type + | Get the function's return type tinfo_t object. + | + | user_cmts + | cfunc_t_user_cmts_get(self) -> user_cmts_t + | + | user_iflags + | cfunc_t_user_iflags_get(self) -> user_iflags_t + | + | user_labels + | cfunc_t_user_labels_get(self) -> user_labels_t + | + | user_unions + | cfunc_t_user_unions_get(self) -> user_unions_t + | + | warnings + | get_warnings(self) -> hexwarns_t + +Help on function cfunc_type in module ida_hexrays: + +cfunc_type(self) + Get the function's return type tinfo_t object. + +Help on class cfuncptr_t in module ida_hexrays: + +class cfuncptr_t(builtins.object) + | Proxy of C++ qrefcnt_t< cfunc_t > class. + | + | Methods defined here: + | + | __deref__(self, *args) -> 'cfunc_t *' + | __deref__(self) -> cfunc_t + | + | __eq__ lambda self, other + | + | __init__(self, *args) + | __init__(self, p) -> cfuncptr_t + | __init__(self, r) -> cfuncptr_t + | + | __ptrval__(self, *args) -> 'size_t' + | __ptrval__(self) -> size_t + | + | __ref__(self, *args) -> 'cfunc_t &' + | __ref__(self) -> cfunc_t + | + | __repr__ = _swig_repr(self) + | + | __str__ lambda self + | + | __swig_destroy__ = delete_cfuncptr_t(...) + | delete_cfuncptr_t(self) + | + | build_c_tree(self, *args) -> 'void' + | build_c_tree(self) + | + | del_orphan_cmts(self, *args) -> 'int' + | del_orphan_cmts(self) -> int + | + | find_item_coords(self, *args) -> 'PyObject *' + | find_item_coords(self, item, px, py) -> bool + | find_item_coords(self, item) -> PyObject * + | + | find_label(self, *args) -> 'citem_t *' + | find_label(self, label) -> citem_t + | + | gather_derefs(self, *args) -> 'bool' + | gather_derefs(self, ci, udm=None) -> bool + | + | get_boundaries(self, *args) -> 'boundaries_t &' + | get_boundaries(self) -> boundaries_t + | + | get_eamap(self, *args) -> 'eamap_t &' + | get_eamap(self) -> eamap_t + | + | get_func_type(self, *args) -> 'bool' + | get_func_type(self, type) -> bool + | + | get_line_item(self, *args) -> 'bool' + | get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool + | + | get_lvars(self, *args) -> 'lvars_t *' + | get_lvars(self) -> lvars_t + | + | get_pseudocode(self, *args) -> 'strvec_t const &' + | get_pseudocode(self) -> strvec_t + | + | get_stkoff_delta(self, *args) -> 'sval_t' + | get_stkoff_delta(self) -> sval_t + | + | get_user_cmt(self, *args) -> 'char const *' + | get_user_cmt(self, loc, rt) -> char const * + | + | get_user_iflags(self, *args) -> 'int32' + | get_user_iflags(self, loc) -> int32 + | + | get_user_union_selection(self, *args) -> 'bool' + | get_user_union_selection(self, ea, path) -> bool + | + | get_warnings(self, *args) -> 'hexwarns_t &' + | get_warnings(self) -> hexwarns_t + | + | has_orphan_cmts(self, *args) -> 'bool' + | has_orphan_cmts(self) -> bool + | + | print_dcl(self, *args) -> 'void' + | print_dcl(self) + | + | print_func(self, *args) -> 'void' + | print_func(self, vp) + | + | refresh_func_ctext(self, *args) -> 'void' + | refresh_func_ctext(self) + | + | release(self, *args) -> 'void' + | release(self) + | + | remove_unused_labels(self, *args) -> 'void' + | remove_unused_labels(self) + | + | reset(self, *args) -> 'void' + | reset(self) + | + | save_user_cmts(self, *args) -> 'void' + | save_user_cmts(self) + | + | save_user_iflags(self, *args) -> 'void' + | save_user_iflags(self) + | + | save_user_labels(self, *args) -> 'void' + | save_user_labels(self) + | + | save_user_numforms(self, *args) -> 'void' + | save_user_numforms(self) + | + | save_user_unions(self, *args) -> 'void' + | save_user_unions(self) + | + | set_user_cmt(self, *args) -> 'void' + | set_user_cmt(self, loc, cmt) + | + | set_user_iflags(self, *args) -> 'void' + | set_user_iflags(self, loc, iflags) + | + | set_user_union_selection(self, *args) -> 'void' + | set_user_union_selection(self, ea, path) + | + | verify(self, *args) -> 'void' + | verify(self, aul, even_without_debugger) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argidx + | cfuncptr_t_argidx_get(self) -> intvec_t + | + | arguments + | + | body + | cfuncptr_t_body_get(self) -> cinsn_t + | + | boundaries + | + | eamap + | + | entry_ea + | cfuncptr_t_entry_ea_get(self) -> ea_t + | + | hdrlines + | cfuncptr_t_hdrlines_get(self) -> int + | + | lvars + | + | maturity + | cfuncptr_t_maturity_get(self) -> ctree_maturity_t + | + | mba + | cfuncptr_t_mba_get(self) -> mbl_array_t + | + | numforms + | cfuncptr_t_numforms_get(self) -> user_numforms_t + | + | pseudocode + | + | refcnt + | cfuncptr_t_refcnt_get(self) -> int + | + | statebits + | cfuncptr_t_statebits_get(self) -> int + | + | thisown + | The membership flag + | + | treeitems + | cfuncptr_t_treeitems_get(self) -> ctree_items_t + | + | type + | + | user_cmts + | cfuncptr_t_user_cmts_get(self) -> user_cmts_t + | + | user_iflags + | cfuncptr_t_user_iflags_get(self) -> user_iflags_t + | + | user_labels + | cfuncptr_t_user_labels_get(self) -> user_labels_t + | + | user_unions + | cfuncptr_t_user_unions_get(self) -> user_unions_t + | + | warnings + +Help on class cgoto_t in module ida_hexrays: + +class cgoto_t(builtins.object) + | Proxy of C++ cgoto_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cgoto_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cgoto_t(...) + | delete_cgoto_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | label_num + | cgoto_t_label_num_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class chain_keeper_t in module ida_hexrays: + +class chain_keeper_t(builtins.object) + | Proxy of C++ chain_keeper_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _gc) -> chain_keeper_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_chain_keeper_t(...) + | delete_chain_keeper_t(self) + | + | back(self, *args) -> 'block_chains_t &' + | back(self) -> block_chains_t + | + | for_all_chains(self, *args) -> 'int' + | for_all_chains(self, cv, gca) -> int + | + | front(self, *args) -> 'block_chains_t &' + | front(self) -> block_chains_t + | + | ---------------------------------------------------------------------- + | 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 + +Help on class chain_t in module ida_hexrays: + +class chain_t(ida_pro.intvec_t) + | Proxy of C++ chain_t class. + | + | Method resolution order: + | chain_t + | ida_pro.intvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> chain_t + | __init__(self, t, off, w=1, v=-1) -> chain_t + | __init__(self, _k, w=1) -> chain_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_chain_t(...) + | delete_chain_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | append_list(self, *args) -> 'void' + | append_list(self, list) + | + | clear_varnum(self, *args) -> 'void' + | clear_varnum(self) + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | endoff(self, *args) -> 'voff_t const' + | endoff(self) -> voff_t + | + | get_reg(self, *args) -> 'mreg_t' + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) -> 'sval_t' + | get_stkoff(self) -> sval_t + | + | includes(self, *args) -> 'bool' + | includes(self, r) -> bool + | + | is_fake(self, *args) -> 'bool' + | is_fake(self) -> bool + | + | is_inited(self, *args) -> 'bool' + | is_inited(self) -> bool + | + | is_overlapped(self, *args) -> 'bool' + | is_overlapped(self) -> bool + | + | is_passreg(self, *args) -> 'bool' + | is_passreg(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_replaced(self, *args) -> 'bool' + | is_replaced(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | is_term(self, *args) -> 'bool' + | is_term(self) -> bool + | + | key(self, *args) -> 'voff_t const &' + | key(self) -> voff_t + | + | overlap(self, *args) -> 'bool' + | overlap(self, r) -> bool + | + | set_inited(self, *args) -> 'void' + | set_inited(self, b) + | + | set_overlapped(self, *args) -> 'void' + | set_overlapped(self, b) + | + | set_replaced(self, *args) -> 'void' + | set_replaced(self, b) + | + | set_term(self, *args) -> 'void' + | set_term(self, b) + | + | set_value(self, *args) -> 'void' + | set_value(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | chain_t_flags_get(self) -> uchar + | + | thisown + | The membership flag + | + | varnum + | chain_t_varnum_get(self) -> int + | + | width + | chain_t_width_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_pro.intvec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'int const &' + | __getitem__(self, i) -> int const & + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'int &' + | push_back(self, x) + | push_back(self) -> int & + | + | at = __getitem__(self, *args) -> 'int const &' + | __getitem__(self, i) -> int const & + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< int >::const_iterator' + | begin(self) -> qvector< int >::iterator + | begin(self) -> qvector< int >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< int >::const_iterator' + | end(self) -> qvector< int >::iterator + | end(self) -> qvector< int >::const_iterator + | + | erase(self, *args) -> 'qvector< int >::iterator' + | erase(self, it) -> qvector< int >::iterator + | erase(self, first, last) -> qvector< int >::iterator + | + | extract(self, *args) -> 'int *' + | extract(self) -> int * + | + | find(self, *args) -> 'qvector< int >::const_iterator' + | find(self, x) -> qvector< int >::iterator + | find(self, x) -> qvector< int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< int >::iterator' + | insert(self, it, x) -> qvector< int >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'int &' + | push_back(self, x) + | push_back(self) -> int & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_pro.intvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_pro.intvec_t: + | + | __hash__ = None + +Help on class chain_visitor_t in module ida_hexrays: + +class chain_visitor_t(builtins.object) + | Proxy of C++ chain_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> chain_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_chain_visitor_t(...) + | delete_chain_visitor_t(self) + | + | visit_chain(self, *args) -> 'int' + | visit_chain(self, nblock, ch) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | parent + | chain_visitor_t_parent_get(self) -> block_chains_t + | + | thisown + | The membership flag + +Help on function checkout_hexrays_license in module ida_hexrays: + +checkout_hexrays_license(*args) -> 'bool' + checkout_hexrays_license(silent) -> bool + + + Check out a floating decompiler license. This function will display a + dialog box if the license is not available. For non-floating licenses + this function is effectively no-op. It is not necessary to call this + function before decompiling. If the license was not checked out, the + decompiler will automatically do it. This function can be used to + check out a license in advance and ensure that a license is available. + + @param silent: silently fail if the license can not be checked out. + (C++: bool) + @return: false if failed + +Help on class cif_t in module ida_hexrays: + +class cif_t(ceinsn_t) + | Proxy of C++ cif_t class. + | + | Method resolution order: + | cif_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cif_t + | __init__(self, r) -> cif_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cif_t(...) + | delete_cif_t(self) + | + | assign(self, *args) -> 'cif_t &' + | assign(self, r) -> cif_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ielse + | cif_t_ielse_get(self) -> cinsn_t + | + | ithen + | cif_t_ithen_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function cinsn_details in module ida_hexrays: + +cinsn_details(self) + return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + +Help on class cinsn_t in module ida_hexrays: + +class cinsn_t(citem_t) + | Proxy of C++ cinsn_t class. + | + | Method resolution order: + | cinsn_t + | citem_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cinsn_t + | __init__(self, r) -> cinsn_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cinsn_t(...) + | delete_cinsn_t(self) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _get_casm(self, *args) -> 'casm_t *' + | _get_casm(self) -> casm_t + | + | _get_cblock(self, *args) -> 'cblock_t *' + | _get_cblock(self) -> cblock_t + | + | _get_cdo(self, *args) -> 'cdo_t *' + | _get_cdo(self) -> cdo_t + | + | _get_cexpr(self, *args) -> 'cexpr_t *' + | _get_cexpr(self) -> cexpr_t + | + | _get_cfor(self, *args) -> 'cfor_t *' + | _get_cfor(self) -> cfor_t + | + | _get_cgoto(self, *args) -> 'cgoto_t *' + | _get_cgoto(self) -> cgoto_t + | + | _get_cif(self, *args) -> 'cif_t *' + | _get_cif(self) -> cif_t + | + | _get_creturn(self, *args) -> 'creturn_t *' + | _get_creturn(self) -> creturn_t + | + | _get_cswitch(self, *args) -> 'cswitch_t *' + | _get_cswitch(self) -> cswitch_t + | + | _get_cwhile(self, *args) -> 'cwhile_t *' + | _get_cwhile(self) -> cwhile_t + | + | _print(self, *args) -> 'void' + | _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _replace_by(self, *args) -> 'void' + | _replace_by(self, r) + | + | _set_casm(self, *args) -> 'void' + | _set_casm(self, _v) + | + | _set_cblock(self, *args) -> 'void' + | _set_cblock(self, _v) + | + | _set_cdo(self, *args) -> 'void' + | _set_cdo(self, _v) + | + | _set_cexpr(self, *args) -> 'void' + | _set_cexpr(self, _v) + | + | _set_cfor(self, *args) -> 'void' + | _set_cfor(self, _v) + | + | _set_cgoto(self, *args) -> 'void' + | _set_cgoto(self, _v) + | + | _set_cif(self, *args) -> 'void' + | _set_cif(self, _v) + | + | _set_creturn(self, *args) -> 'void' + | _set_creturn(self, _v) + | + | _set_cswitch(self, *args) -> 'void' + | _set_cswitch(self, _v) + | + | _set_cwhile(self, *args) -> 'void' + | _set_cwhile(self, _v) + | + | assign(self, *args) -> 'cinsn_t &' + | assign(self, r) -> cinsn_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | collect_free_breaks(self, *args) -> 'bool' + | collect_free_breaks(self, breaks) -> bool + | + | collect_free_continues(self, *args) -> 'bool' + | collect_free_continues(self, continues) -> bool + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains_free_break(self, *args) -> 'bool' + | contains_free_break(self) -> bool + | + | contains_free_continue(self, *args) -> 'bool' + | contains_free_continue(self) -> bool + | + | contains_insn(self, *args) -> 'bool' + | contains_insn(self, type, times=1) -> bool + | + | create_if(self, *args) -> 'cif_t &' + | create_if(self, cnd) -> cif_t + | + | is_epilog(self) + | + | is_ordinary_flow(self, *args) -> 'bool' + | is_ordinary_flow(self) -> bool + | + | new_insn(self, *args) -> 'cinsn_t &' + | new_insn(self, insn_ea) -> cinsn_t + | + | print1(self, *args) -> 'void' + | print1(self, func) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | zero(self, *args) -> 'void' + | zero(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | insn_is_epilog(*args) -> 'bool' + | insn_is_epilog(insn) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | casm + | + | cblock + | + | cdo + | + | cexpr + | + | cfor + | + | cgoto + | + | cif + | + | creturn + | + | cswitch + | + | cwhile + | + | details + | return the details pointer for the cinsn_t object depending on the value of its op member. this is one of the cblock_t, cif_t, etc. objects. + | + | opname + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | op_to_typename = {70: 'empty', 71: 'block', 72: 'expr', 73: 'if', 74: ... + | + | ---------------------------------------------------------------------- + | Methods inherited from citem_t: + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) -> 'ctype_t' + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) -> 'void' + | _set_op(self, v) + | + | contains_expr(self, *args) -> 'bool' + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) -> 'bool' + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) -> 'citem_t *' + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) -> 'citem_t *' + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) -> 'bool' + | is_expr(self) -> bool + | + | replace_by(self, o) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from citem_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on function cinsn_t_insn_is_epilog in module ida_hexrays: + +cinsn_t_insn_is_epilog(*args) -> 'bool' + cinsn_t_insn_is_epilog(insn) -> bool + +Help on class cinsnptrvec_t in module ida_hexrays: + +class cinsnptrvec_t(builtins.object) + | Proxy of C++ qvector< cinsn_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'cinsn_t *const &' + | __getitem__(self, i) -> cinsn_t + | + | __init__(self, *args) + | __init__(self) -> cinsnptrvec_t + | __init__(self, x) -> cinsnptrvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_cinsnptrvec_t(...) + | delete_cinsnptrvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'cinsn_t *&' + | + | at = __getitem__(self, *args) -> 'cinsn_t *const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< cinsn_t * >::const_iterator' + | begin(self) -> qvector< cinsn_t * >::iterator + | begin(self) -> qvector< cinsn_t * >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< cinsn_t * >::const_iterator' + | end(self) -> qvector< cinsn_t * >::iterator + | end(self) -> qvector< cinsn_t * >::const_iterator + | + | erase(self, *args) -> 'qvector< cinsn_t * >::iterator' + | erase(self, it) -> qvector< cinsn_t * >::iterator + | erase(self, first, last) -> qvector< cinsn_t * >::iterator + | + | extract(self, *args) -> 'cinsn_t **' + | extract(self) -> cinsn_t ** + | + | find(self, *args) -> 'qvector< cinsn_t * >::const_iterator' + | find(self, x) -> qvector< cinsn_t * >::iterator + | find(self, x) -> qvector< cinsn_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< cinsn_t * >::iterator' + | insert(self, it, x) -> qvector< cinsn_t * >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'cinsn_t *&' + | push_back(self, x) + | push_back(self) -> cinsn_t *& + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class citem_cmt_t in module ida_hexrays: + +class citem_cmt_t(builtins.object) + | Proxy of C++ citem_cmt_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> citem_cmt_t + | __init__(self, s) -> citem_cmt_t + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) -> 'char const *' + | __str__(self) -> char const * + | + | __swig_destroy__ = delete_citem_cmt_t(...) + | delete_citem_cmt_t(self) + | + | c_str(self, *args) -> 'char const *' + | c_str(self) -> char const * + | + | ---------------------------------------------------------------------- + | 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 + | + | used + | citem_cmt_t_used_get(self) -> bool + +Help on class citem_locator_t in module ida_hexrays: + +class citem_locator_t(builtins.object) + | Proxy of C++ citem_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _ea, _op) -> citem_locator_t + | __init__(self, i) -> citem_locator_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_citem_locator_t(...) + | delete_citem_locator_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | citem_locator_t_ea_get(self) -> ea_t + | + | op + | citem_locator_t_op_get(self) -> ctype_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class citem_t in module ida_hexrays: + +class citem_t(builtins.object) + | Proxy of C++ citem_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> citem_t + | __init__(self, o) -> citem_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_citem_t(...) + | delete_citem_t(self) + | + | _acquire_ownership(self, v, acquire) + | + | _citem_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _citem_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_op(self) + | + | _get_op(self, *args) -> 'ctype_t' + | _get_op(self) -> ctype_t + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _set_op(self, *args) -> 'void' + | _set_op(self, v) + | + | contains_expr(self, *args) -> 'bool' + | contains_expr(self, e) -> bool + | + | contains_label(self, *args) -> 'bool' + | contains_label(self) -> bool + | + | find_closest_addr(self, *args) -> 'citem_t *' + | find_closest_addr(self, _ea) -> citem_t + | + | find_parent_of(self, *args) -> 'citem_t *' + | find_parent_of(self, sitem) -> citem_t + | find_parent_of(self, item) -> citem_t + | + | is_expr(self, *args) -> 'bool' + | is_expr(self) -> bool + | + | print1(self, *args) -> 'void' + | print1(self, func) + | + | replace_by(self, o) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cexpr + | citem_t_cexpr_get(self) -> cexpr_t + | + | cinsn + | citem_t_cinsn_get(self) -> cinsn_t + | + | ea + | citem_t_ea_get(self) -> ea_t + | + | index + | citem_t_index_get(self) -> int + | + | label_num + | citem_t_label_num_get(self) -> int + | + | meminfo + | + | obj_id + | _obj_id(self) -> PyObject * + | + | op + | _get_op(self) -> ctype_t + | + | thisown + | The membership flag + | + | to_specific_type + | cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on function citem_to_specific_type in module ida_hexrays: + +citem_to_specific_type(self) + cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. + +Help on function clear_cached_cfuncs in module ida_hexrays: + +clear_cached_cfuncs(*args) -> 'void' + clear_cached_cfuncs() + + + Flush all cached decompilation results. + +Help on class cloop_t in module ida_hexrays: + +class cloop_t(ceinsn_t) + | Proxy of C++ cloop_t class. + | + | Method resolution order: + | cloop_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cloop_t + | __init__(self, b) -> cloop_t + | __init__(self, r) -> cloop_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cloop_t(...) + | delete_cloop_t(self) + | + | assign(self, *args) -> 'cloop_t &' + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function close_pseudocode in module ida_hexrays: + +close_pseudocode(*args) -> 'bool' + close_pseudocode(f) -> bool + + + Close pseudocode window. + + @param f: pointer to window (C++: TWidget *) + @return: false if failed + +Help on class cnumber_t in module ida_hexrays: + +class cnumber_t(builtins.object) + | Proxy of C++ cnumber_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _opnum=0) -> cnumber_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cnumber_t(...) + | delete_cnumber_t(self) + | + | _print(self, *args) -> 'void' + | _print(self, type, parent=None, nice_stroff=None) + | + | assign(self, *args) -> 'void' + | assign(self, v, nbytes, sign) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | value(self, *args) -> 'uint64' + | value(self, type) -> uint64 + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _value + | cnumber_t__value_get(self) -> uint64 + | + | nf + | cnumber_t_nf_get(self) -> number_format_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class codegen_t in module ida_hexrays: + +class codegen_t(builtins.object) + | Proxy of C++ codegen_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, m) -> codegen_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_codegen_t(...) + | delete_codegen_t(self) + | + | analyze_prolog(self, *args) -> 'merror_t' + | analyze_prolog(self, fc, reachable) -> merror_t + | + | emit(self, *args) -> 'minsn_t *' + | emit(self, code, width, l, r, d, offsize) -> minsn_t + | emit(self, code, l, r, d) -> minsn_t + | + | emit_micro_mvm(self, *args) -> 'minsn_t *' + | emit_micro_mvm(self, code, dtype, l, r, d, offsize) -> minsn_t + | + | gen_micro(self, *args) -> 'merror_t' + | gen_micro(self) -> merror_t + | + | load_operand(self, *args) -> 'mreg_t' + | load_operand(self, opnum) -> mreg_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ignore_micro + | codegen_t_ignore_micro_get(self) -> char + | + | ii + | codegen_t_ii_get(self) -> cdg_insn_iterator_t + | + | insn + | codegen_t_insn_get(self) -> insn_t * + | + | mb + | codegen_t_mb_get(self) -> mblock_t + | + | mba + | codegen_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + +Help on function convert_to_user_call in module ida_hexrays: + +convert_to_user_call(*args) -> 'merror_t' + convert_to_user_call(udc, cdg) -> merror_t + + + try to generate user-defined call for an instruction + + @param udc (C++: const udcall_t &) + @param cdg (C++: codegen_t &) + @return: Microcode error codes code: MERR_OK - user-defined call + generated else - error (MERR_INSN == inacceptable udc.tif) + +Help on function create_field_name in module ida_hexrays: + +create_field_name(*args) -> 'qstring' + create_field_name(type, offset=BADADDR) -> qstring + +Help on function create_helper in module ida_hexrays: + +create_helper(*args) + +Help on function create_typedef in module ida_hexrays: + +create_typedef(*args) -> 'tinfo_t' + create_typedef(name) -> tinfo_t + create_typedef(n) -> tinfo_t + + + Create a reference to a named type. + + @param name: type name (C++: const char *) + @return: type which refers to the specified name. For example, if name + is "DWORD", the type info which refers to "DWORD" is created. + +Help on class creturn_t in module ida_hexrays: + +class creturn_t(ceinsn_t) + | Proxy of C++ creturn_t class. + | + | Method resolution order: + | creturn_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> creturn_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_creturn_t(...) + | delete_creturn_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class cswitch_t in module ida_hexrays: + +class cswitch_t(ceinsn_t) + | Proxy of C++ cswitch_t class. + | + | Method resolution order: + | cswitch_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cswitch_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cswitch_t(...) + | delete_cswitch_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cases + | cswitch_t_cases_get(self) -> ccases_t + | + | mvnf + | cswitch_t_mvnf_get(self) -> cnumber_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on class ctext_position_t in module ida_hexrays: + +class ctext_position_t(builtins.object) + | Proxy of C++ ctext_position_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _lnnum=-1, _x=0, _y=0) -> ctext_position_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ctext_position_t(...) + | delete_ctext_position_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | in_ctree(self, *args) -> 'bool' + | in_ctree(self, hdrlines) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | ctext_position_t_lnnum_get(self) -> int + | + | thisown + | The membership flag + | + | x + | ctext_position_t_x_get(self) -> int + | + | y + | ctext_position_t_y_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class ctree_anchor_t in module ida_hexrays: + +class ctree_anchor_t(builtins.object) + | Proxy of C++ ctree_anchor_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ctree_anchor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ctree_anchor_t(...) + | delete_ctree_anchor_t(self) + | + | get_index(self, *args) -> 'int' + | get_index(self) -> int + | + | get_itp(self, *args) -> 'item_preciser_t' + | get_itp(self) -> item_preciser_t + | + | is_blkcmt_anchor(self, *args) -> 'bool' + | is_blkcmt_anchor(self) -> bool + | + | is_citem_anchor(self, *args) -> 'bool' + | is_citem_anchor(self) -> bool + | + | is_itp_anchor(self, *args) -> 'bool' + | is_itp_anchor(self) -> bool + | + | is_lvar_anchor(self, *args) -> 'bool' + | is_lvar_anchor(self) -> bool + | + | is_valid_anchor(self, *args) -> 'bool' + | is_valid_anchor(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | value + | ctree_anchor_t_value_get(self) -> uval_t + +Help on class ctree_item_t in module ida_hexrays: + +class ctree_item_t(builtins.object) + | Proxy of C++ ctree_item_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ctree_item_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ctree_item_t(...) + | delete_ctree_item_t(self) + | + | _get_e(self, *args) -> 'cexpr_t *' + | _get_e(self) -> cexpr_t + | + | _get_f(self, *args) -> 'cfunc_t *' + | _get_f(self) -> cfunc_t + | + | _get_i(self, *args) -> 'cinsn_t *' + | _get_i(self) -> cinsn_t + | + | _get_it(self, *args) -> 'citem_t *' + | _get_it(self) -> citem_t + | + | _get_l(self, *args) -> 'lvar_t *' + | _get_l(self) -> lvar_t + | + | get_ea(self, *args) -> 'ea_t' + | get_ea(self) -> ea_t + | + | get_label_num(self, *args) -> 'int' + | get_label_num(self, gln_flags) -> int + | + | get_lvar(self, *args) -> 'lvar_t *' + | get_lvar(self) -> lvar_t + | + | get_memptr(self, *args) -> 'member_t *' + | get_memptr(self, p_sptr=None) -> member_t * + | + | is_citem(self, *args) -> 'bool' + | is_citem(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | citype + | ctree_item_t_citype_get(self) -> cursor_item_type_t + | + | e + | + | f + | + | i + | + | it + | + | l + | + | loc + | ctree_item_t_loc_get(self) -> treeloc_t + | + | thisown + | The membership flag + +Help on class ctree_items_t in module ida_hexrays: + +class ctree_items_t(builtins.object) + | Proxy of C++ qvector< citem_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'citem_t *const &' + | __getitem__(self, i) -> citem_t + | + | __init__(self, *args) + | __init__(self) -> ctree_items_t + | __init__(self, x) -> ctree_items_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_ctree_items_t(...) + | delete_ctree_items_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'citem_t *&' + | + | at = __getitem__(self, *args) -> 'citem_t *const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< citem_t * >::const_iterator' + | begin(self) -> qvector< citem_t * >::iterator + | begin(self) -> qvector< citem_t * >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< citem_t * >::const_iterator' + | end(self) -> qvector< citem_t * >::iterator + | end(self) -> qvector< citem_t * >::const_iterator + | + | erase(self, *args) -> 'qvector< citem_t * >::iterator' + | erase(self, it) -> qvector< citem_t * >::iterator + | erase(self, first, last) -> qvector< citem_t * >::iterator + | + | extract(self, *args) -> 'citem_t **' + | extract(self) -> citem_t ** + | + | find(self, *args) -> 'qvector< citem_t * >::const_iterator' + | find(self, x) -> qvector< citem_t * >::iterator + | find(self, x) -> qvector< citem_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< citem_t * >::iterator' + | insert(self, it, x) -> qvector< citem_t * >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'citem_t *&' + | push_back(self, x) + | push_back(self) -> citem_t *& + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class ctree_parentee_t in module ida_hexrays: + +class ctree_parentee_t(ctree_visitor_t) + | Proxy of C++ ctree_parentee_t class. + | + | Method resolution order: + | ctree_parentee_t + | ctree_visitor_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, post=False) -> ctree_parentee_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ctree_parentee_t(...) + | delete_ctree_parentee_t(self) + | + | recalc_parent_types(self, *args) -> 'bool' + | recalc_parent_types(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ctree_visitor_t: + | + | apply_to(self, *args) -> 'int' + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) -> 'int' + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) -> 'void' + | clr_prune(self) + | + | clr_restart(self, *args) -> 'void' + | clr_restart(self) + | + | is_postorder(self, *args) -> 'bool' + | is_postorder(self) -> bool + | + | leave_expr(self, *args) -> 'int' + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) -> 'int' + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) -> 'bool' + | maintain_parents(self) -> bool + | + | must_prune(self, *args) -> 'bool' + | must_prune(self) -> bool + | + | must_restart(self, *args) -> 'bool' + | must_restart(self) -> bool + | + | only_insns(self, *args) -> 'bool' + | only_insns(self) -> bool + | + | parent_expr(self, *args) -> 'cexpr_t *' + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) -> 'cinsn_t *' + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) -> 'void' + | prune_now(self) + | + | set_restart(self, *args) -> 'void' + | set_restart(self) + | + | visit_expr(self, *args) -> 'int' + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) -> 'int' + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctree_visitor_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + +Help on class ctree_visitor_t in module ida_hexrays: + +class ctree_visitor_t(builtins.object) + | Proxy of C++ ctree_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags) -> ctree_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ctree_visitor_t(...) + | delete_ctree_visitor_t(self) + | + | apply_to(self, *args) -> 'int' + | apply_to(self, item, parent) -> int + | + | apply_to_exprs(self, *args) -> 'int' + | apply_to_exprs(self, item, parent) -> int + | + | clr_prune(self, *args) -> 'void' + | clr_prune(self) + | + | clr_restart(self, *args) -> 'void' + | clr_restart(self) + | + | is_postorder(self, *args) -> 'bool' + | is_postorder(self) -> bool + | + | leave_expr(self, *args) -> 'int' + | leave_expr(self, arg0) -> int + | + | leave_insn(self, *args) -> 'int' + | leave_insn(self, arg0) -> int + | + | maintain_parents(self, *args) -> 'bool' + | maintain_parents(self) -> bool + | + | must_prune(self, *args) -> 'bool' + | must_prune(self) -> bool + | + | must_restart(self, *args) -> 'bool' + | must_restart(self) -> bool + | + | only_insns(self, *args) -> 'bool' + | only_insns(self) -> bool + | + | parent_expr(self, *args) -> 'cexpr_t *' + | parent_expr(self) -> cexpr_t + | + | parent_insn(self, *args) -> 'cinsn_t *' + | parent_insn(self) -> cinsn_t + | + | prune_now(self, *args) -> 'void' + | prune_now(self) + | + | set_restart(self, *args) -> 'void' + | set_restart(self) + | + | visit_expr(self, *args) -> 'int' + | visit_expr(self, arg0) -> int + | + | visit_insn(self, *args) -> 'int' + | visit_insn(self, arg0) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cv_flags + | ctree_visitor_t_cv_flags_get(self) -> int + | + | parents + | ctree_visitor_t_parents_get(self) -> ctree_items_t + | + | thisown + | The membership flag + +Help on class cwhile_t in module ida_hexrays: + +class cwhile_t(cloop_t) + | Proxy of C++ cwhile_t class. + | + | Method resolution order: + | cwhile_t + | cloop_t + | ceinsn_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> cwhile_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cwhile_t(...) + | delete_cwhile_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from cloop_t: + | + | assign(self, *args) -> 'cloop_t &' + | assign(self, r) -> cloop_t + | + | cleanup(self, *args) -> 'void' + | cleanup(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from cloop_t: + | + | body + | cloop_t_body_get(self) -> cinsn_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ceinsn_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | expr + | ceinsn_t_expr_get(self) -> cexpr_t + +Help on function debug_hexrays_ctree in module ida_hexrays: + +debug_hexrays_ctree(*args) -> 'void' + debug_hexrays_ctree(msg) + +Help on function decompile in module ida_hexrays: + +decompile(ea, hf=None, flags=0) + # --------------------------------------------------------------------- + +Help on function decompile_func in module ida_hexrays: + +decompile_func(*args) -> 'cfuncptr_t' + decompile_func(pfn, hf, flags=0) -> cfuncptr_t + + + Decompile a function. Multiple decompilations of the same function + return the same object. + + @param pfn: pointer to function to decompile (C++: func_t *) + @param hf: extended error information (if failed) (C++: + hexrays_failure_t *) + @param flags: bitwise combination of decompile() flags ... bits (C++: + int) + @return: pointer to the decompilation result (a reference counted + pointer). NULL if failed. + +Help on function decompile_many in module ida_hexrays: + +decompile_many(*args) -> 'bool' + decompile_many(outfile, funcaddrs, flags) -> bool + + + Batch decompilation. Decompile all or the specified functions + + @param outfile: name of the output file (C++: const char *) + @param funcaddrs: list of functions to decompile. If NULL or empty, + then decompile all nonlib functions (C++: const + eavec_t *) + @param flags: Batch decompilation bits (C++: int) + @return: true if no internal error occurred and the user has not + cancelled decompilation + +Help on function dereference in module ida_hexrays: + +dereference(e, ptrsize, is_float=False) + +Help on function dstr in module ida_hexrays: + +dstr(*args) -> 'char const *' + dstr(tif) -> char const * + + + Print the specified type info. This function can be used from a + debugger by typing "tif->dstr()" + + @param tif (C++: const tinfo_t *) + +Help on function dummy_ptrtype in module ida_hexrays: + +dummy_ptrtype(*args) -> 'tinfo_t' + dummy_ptrtype(ptrsize, isfp) -> tinfo_t + + + Generate a dummy pointer type + + @param ptrsize: size of pointed object (C++: int) + @param isfp: is floating point object? (C++: bool) + +Help on function eamap_begin in module ida_hexrays: + +eamap_begin(*args) -> 'eamap_iterator_t' + eamap_begin(map) -> eamap_iterator_t + + + Get iterator pointing to the beginning of eamap_t. + + + @param map (C++: const eamap_t *) + +Help on function eamap_clear in module ida_hexrays: + +eamap_clear(*args) -> 'void' + eamap_clear(map) + + + Clear eamap_t. + + + @param map (C++: eamap_t *) + +Help on function eamap_end in module ida_hexrays: + +eamap_end(*args) -> 'eamap_iterator_t' + eamap_end(map) -> eamap_iterator_t + + + Get iterator pointing to the end of eamap_t. + + + @param map (C++: const eamap_t *) + +Help on function eamap_erase in module ida_hexrays: + +eamap_erase(*args) -> 'void' + eamap_erase(map, p) + + + Erase current element from eamap_t. + + + @param map (C++: eamap_t *) + @param p (C++: eamap_iterator_t) + +Help on function eamap_find in module ida_hexrays: + +eamap_find(*args) -> 'eamap_iterator_t' + eamap_find(map, key) -> eamap_iterator_t + + + Find the specified key in eamap_t. + + + @param map (C++: const eamap_t *) + @param key (C++: const ea_t &) + +Help on function eamap_first in module ida_hexrays: + +eamap_first(*args) -> 'ea_t const &' + eamap_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_free in module ida_hexrays: + +eamap_free(*args) -> 'void' + eamap_free(map) + + + Delete eamap_t instance. + + + @param map (C++: eamap_t *) + +Help on function eamap_insert in module ida_hexrays: + +eamap_insert(*args) -> 'eamap_iterator_t' + eamap_insert(map, key, val) -> eamap_iterator_t + + + Insert new (ea_t, cinsnptrvec_t) pair into eamap_t. + + + @param map (C++: eamap_t *) + @param key (C++: const ea_t &) + @param val (C++: const cinsnptrvec_t &) + +Help on class eamap_iterator_t in module ida_hexrays: + +class eamap_iterator_t(builtins.object) + | Proxy of C++ eamap_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> eamap_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_eamap_iterator_t(...) + | delete_eamap_iterator_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 + | + | x + | eamap_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function eamap_new in module ida_hexrays: + +eamap_new(*args) -> 'eamap_t *' + eamap_new() -> eamap_t + + + Create a new eamap_t instance. + +Help on function eamap_next in module ida_hexrays: + +eamap_next(*args) -> 'eamap_iterator_t' + eamap_next(p) -> eamap_iterator_t + + + Move to the next element. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_prev in module ida_hexrays: + +eamap_prev(*args) -> 'eamap_iterator_t' + eamap_prev(p) -> eamap_iterator_t + + + Move to the previous element. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_second in module ida_hexrays: + +eamap_second(*args) -> 'cinsnptrvec_t &' + eamap_second(p) -> cinsnptrvec_t + + + Get reference to the current map value. + + + @param p (C++: eamap_iterator_t) + +Help on function eamap_size in module ida_hexrays: + +eamap_size(*args) -> 'size_t' + eamap_size(map) -> size_t + + + Get size of eamap_t. + + + @param map (C++: eamap_t *) + +Help on class eamap_t in module ida_hexrays: + +class eamap_t(builtins.object) + | Proxy of C++ std::map< ea_t,cinsnptrvec_t > class. + | + | Methods defined here: + | + | __begin = eamap_begin(...) + | eamap_begin(map) -> eamap_iterator_t + | + | __clear = eamap_clear(...) + | eamap_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = eamap_end(...) + | eamap_end(map) -> eamap_iterator_t + | + | __erase = eamap_erase(...) + | eamap_erase(map, p) + | + | __find = eamap_find(...) + | eamap_find(map, key) -> eamap_iterator_t + | + | __first = eamap_first(...) + | eamap_first(p) -> ea_t const & + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> eamap_t + | + | __insert = eamap_insert(...) + | eamap_insert(map, key, val) -> eamap_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = eamap_next(...) + | eamap_next(p) -> eamap_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = eamap_second(...) + | eamap_second(p) -> cinsnptrvec_t + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = eamap_size(...) + | eamap_size(map) -> size_t + | + | __swig_destroy__ = delete_eamap_t(...) + | delete_eamap_t(self) + | + | at(self, *args) -> 'cinsnptrvec_t &' + | at(self, _Keyval) -> cinsnptrvec_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = + | int(x=0) -> integer + | int(x, base=10) -> integer + | + | Convert a number or string to an integer, or return 0 if no arguments + | are given. If x is a number, return x.__int__(). For floating point + | numbers, this truncates towards zero. + | + | If x is not a number or if base is given, then x must be a string, + | bytes, or bytearray instance representing an integer literal in the + | given base. The literal can be preceded by '+' or '-' and be surrounded + | by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. + | Base 0 means to interpret the base from the string as an integer literal. + | >>> int('0b100', base=0) + | 4 + | + | valuetype = + | Proxy of C++ qvector< cinsn_t * > class. + +Help on class fnum_array in module ida_hexrays: + +class fnum_array(builtins.object) + | Proxy of C++ wrapped_array_t< uint16,6 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'unsigned short const &' + | __getitem__(self, i) -> unsigned short const & + | + | __init__(self, *args) + | __init__(self, data) -> fnum_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_fnum_array(...) + | delete_fnum_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | fnum_array_data_get(self) -> unsigned short (&)[6] + | + | thisown + | The membership flag + +Help on class fnumber_t in module ida_hexrays: + +class fnumber_t(builtins.object) + | Proxy of C++ fnumber_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> fnumber_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_fnumber_t(...) + | delete_fnumber_t(self) + | + | _fnumber_t__get_fnum = __get_fnum(self, *args) -> 'wrapped_array_t< uint16,6 >' + | __get_fnum(self) -> fnum_array + | + | _print(self, *args) -> 'void' + | _print(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | dereference_const_uint16(self, *args) -> 'uint16 const *' + | dereference_const_uint16(self) -> uint16 const * + | + | dereference_uint16(self, *args) -> 'uint16 *' + | dereference_uint16(self) -> uint16 * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fnum + | __get_fnum(self) -> fnum_array + | + | nbytes + | fnumber_t_nbytes_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class gco_info_t in module ida_hexrays: + +class gco_info_t(builtins.object) + | Proxy of C++ gco_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> gco_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_gco_info_t(...) + | delete_gco_info_t(self) + | + | append_to_list(self, *args) -> 'bool' + | append_to_list(self, list, mba) -> bool + | + | is_def(self, *args) -> 'bool' + | is_def(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_use(self, *args) -> 'bool' + | is_use(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | gco_info_t_flags_get(self) -> int + | + | name + | gco_info_t_name_get(self) -> qstring * + | + | size + | gco_info_t_size_get(self) -> int + | + | thisown + | The membership flag + +Help on function gen_microcode in module ida_hexrays: + +gen_microcode(*args) -> 'mbl_array_t *' + gen_microcode(mbr, hf, retlist=None, flags=0, reqmat=MMAT_GLBOPT3) -> mbl_array_t + + + Generate microcode of an arbitrary code snippet + + @param mbr: snippet ranges (C++: const mba_ranges_t &) + @param hf: extended error information (if failed) (C++: + hexrays_failure_t *) + @param retlist: list of registers the snippet returns (C++: const + mlist_t *) + @param flags: bitwise combination of decompile() flags ... bits (C++: + int) + @param reqmat: required microcode maturity (C++: mba_maturity_t) + @return: pointer to the microcode, NULL if failed. + +Help on function get_ctype_name in module ida_hexrays: + +get_ctype_name(*args) -> 'char const *' + get_ctype_name(op) -> char const * + +Help on function get_current_operand in module ida_hexrays: + +get_current_operand(*args) -> 'bool' + get_current_operand(out) -> bool + + + Get the instruction operand under the cursor. This function determines + the operand that is under the cursor in the active disassembly + listing. If the operand refers to a register or stack variable, it + return true. + + @param out (C++: gco_info_t *) + +Help on function get_float_type in module ida_hexrays: + +get_float_type(*args) -> 'tinfo_t' + get_float_type(width) -> tinfo_t + + + Get a type of a floating point value with the specified width + + @param width: width of the desired type (C++: int) + @return: type info object + +Help on function get_hexrays_version in module ida_hexrays: + +get_hexrays_version(*args) -> 'char const *' + get_hexrays_version() -> char const * + + + Get decompiler version. The returned string is of the form + ... + + @return: pointer to version string. For example: "2.0.0.140605" + +Help on function get_int_type_by_width_and_sign in module ida_hexrays: + +get_int_type_by_width_and_sign(*args) -> 'tinfo_t' + get_int_type_by_width_and_sign(srcwidth, sign) -> tinfo_t + + + Create a type info by width and sign. Returns a simple type (examples: + int, short) with the given width and sign. + + @param srcwidth: size of the type in bytes (C++: int) + @param sign: sign of the type (C++: type_sign_t) + +Help on function get_member_type in module ida_hexrays: + +get_member_type(*args) -> 'bool' + get_member_type(mptr, type) -> bool + + + Get type of a structure field. This function performs validity checks + of the field type. Wrong types are rejected. + + @param mptr: structure field (C++: const member_t *) + @param type: pointer to the variable where the type is returned. This + parameter can be NULL. (C++: tinfo_t *) + @return: false if failed + +Help on function get_merror_desc in module ida_hexrays: + +get_merror_desc(*args) -> 'qstring *' + get_merror_desc(code, mba) -> str + + + Get textual description of an error code + + @param code: Microcode error codes (C++: merror_t) + @param mba: the microcode array (C++: mbl_array_t *) + @return: the error address + +Help on function get_mreg_name in module ida_hexrays: + +get_mreg_name(*args) -> 'qstring *' + get_mreg_name(reg, width, ud=None) -> str + + + Get the microregister name + + @param reg (C++: mreg_t) + @param width: size of microregister in bytes. may be bigger than the + real register size. (C++: int) + @param ud: reserved, must be nullptr (C++: void *) + @return: width of the printed register. this value may be less than + the WIDTH argument. + +Help on function get_op_signness in module ida_hexrays: + +get_op_signness(*args) -> 'type_sign_t' + get_op_signness(op) -> type_sign_t + + + Get operator sign. Meaningful for sign-dependent operators, like + cot_sdiv. + + + @param op (C++: ctype_t) + +Help on function get_signed_mcode in module ida_hexrays: + +get_signed_mcode(*args) -> 'mcode_t' + get_signed_mcode(code) -> mcode_t + +Help on function get_temp_regs in module ida_hexrays: + +get_temp_regs(*args) -> 'mlist_t const &' + get_temp_regs() -> mlist_t + + + Get list of temporary registers. Tempregs are temporary registers that + are used during code generation. They do not map to regular processor + registers. They are used only to store temporary values during + execution of one instruction. Tempregs may not be used to pass a value + from one block to another. In other words, at the end of a block all + tempregs must be dead. + +Help on function get_type in module ida_hexrays: + +get_type(*args) -> 'bool' + get_type(id, tif, guess) -> bool + + + Get a global type. Global types are types of addressable objects and + struct/union/enum types + + @param id: address or id of the object (C++: uval_t) + @param tif: buffer for the answer (C++: tinfo_t *) + @param guess: what kind of types to consider (C++: type_source_t) + @return: success + +Help on function get_unk_type in module ida_hexrays: + +get_unk_type(*args) -> 'tinfo_t' + get_unk_type(size) -> tinfo_t + + + Create a partial type info by width. Returns a partially defined type + (examples: _DWORD, _BYTE) with the given width. + + @param size: size of the type in bytes (C++: int) + +Help on function get_unsigned_mcode in module ida_hexrays: + +get_unsigned_mcode(*args) -> 'mcode_t' + get_unsigned_mcode(code) -> mcode_t + +Help on function get_widget_vdui in module ida_hexrays: + +get_widget_vdui(*args) -> 'vdui_t *' + get_widget_vdui(f) -> vdui_t + + + Get the 'vdui_t' instance associated to the TWidget + + @param f: pointer to window (C++: TWidget *) + @return: a vdui_t *, or NULL + +Help on function getb_reginsn in module ida_hexrays: + +getb_reginsn(*args) -> 'minsn_t *' + getb_reginsn(ins) -> minsn_t + + + Skip assertions backward. + + + @param ins (C++: const minsn_t *) + +Help on function getf_reginsn in module ida_hexrays: + +getf_reginsn(*args) -> 'minsn_t *' + getf_reginsn(ins) -> minsn_t + + + Skip assertions forward. + + + @param ins (C++: const minsn_t *) + +Help on class graph_chains_t in module ida_hexrays: + +class graph_chains_t(block_chains_vec_t) + | Proxy of C++ graph_chains_t class. + | + | Method resolution order: + | graph_chains_t + | block_chains_vec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> graph_chains_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_chains_t(...) + | delete_graph_chains_t(self) + | + | acquire(self, *args) -> 'void' + | acquire(self) + | + | for_all_chains(self, *args) -> 'int' + | for_all_chains(self, cv, gca_flags) -> int + | + | is_locked(self, *args) -> 'bool' + | is_locked(self) -> bool + | + | release(self, *args) -> 'void' + | release(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from block_chains_vec_t: + | + | __getitem__(self, *args) -> 'block_chains_t const &' + | __getitem__(self, i) -> block_chains_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | at(self, *args) -> 'block_chains_t const &' + | at(self, _idx) -> block_chains_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< block_chains_t >::const_iterator' + | begin(self) -> block_chains_t + | begin(self) -> block_chains_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< block_chains_t >::const_iterator' + | end(self) -> block_chains_t + | end(self) -> block_chains_t + | + | erase(self, *args) -> 'qvector< block_chains_t >::iterator' + | erase(self, it) -> block_chains_t + | erase(self, first, last) -> block_chains_t + | + | extract(self, *args) -> 'block_chains_t *' + | extract(self) -> block_chains_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=block_chains_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< block_chains_t >::iterator' + | insert(self, it, x) -> block_chains_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'block_chains_t &' + | push_back(self, x) + | push_back(self) -> block_chains_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from block_chains_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function has_cached_cfunc in module ida_hexrays: + +has_cached_cfunc(*args) -> 'bool' + has_cached_cfunc(ea) -> bool + + + Do we have a cached decompilation result for 'ea'? + + + @param ea (C++: ea_t) + +Help on function hexrays_alloc in module ida_hexrays: + +hexrays_alloc(*args) -> 'void *' + hexrays_alloc(size) -> void * + +Help on class hexrays_failure_t in module ida_hexrays: + +class hexrays_failure_t(builtins.object) + | Proxy of C++ hexrays_failure_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> hexrays_failure_t + | __init__(self, c, ea, buf=None) -> hexrays_failure_t + | __init__(self, c, ea, buf) -> hexrays_failure_t + | + | __repr__ = _swig_repr(self) + | + | __str__ lambda self + | + | __swig_destroy__ = delete_hexrays_failure_t(...) + | delete_hexrays_failure_t(self) + | + | desc(self, *args) -> 'qstring' + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | hexrays_failure_t_code_get(self) -> merror_t + | + | errea + | hexrays_failure_t_errea_get(self) -> ea_t + | + | str + | hexrays_failure_t_str_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on function hexrays_free in module ida_hexrays: + +hexrays_free(*args) -> 'void' + hexrays_free(ptr) + +Help on class hexwarn_t in module ida_hexrays: + +class hexwarn_t(builtins.object) + | Proxy of C++ hexwarn_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> hexwarn_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_hexwarn_t(...) + | delete_hexwarn_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | hexwarn_t_ea_get(self) -> ea_t + | + | id + | hexwarn_t_id_get(self) -> warnid_t + | + | text + | hexwarn_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class hexwarns_t in module ida_hexrays: + +class hexwarns_t(builtins.object) + | Proxy of C++ qvector< hexwarn_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'hexwarn_t const &' + | __getitem__(self, i) -> hexwarn_t + | + | __init__(self, *args) + | __init__(self) -> hexwarns_t + | __init__(self, x) -> hexwarns_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_hexwarns_t(...) + | delete_hexwarns_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'hexwarn_t &' + | + | at = __getitem__(self, *args) -> 'hexwarn_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< hexwarn_t >::const_iterator' + | begin(self) -> hexwarn_t + | begin(self) -> hexwarn_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< hexwarn_t >::const_iterator' + | end(self) -> hexwarn_t + | end(self) -> hexwarn_t + | + | erase(self, *args) -> 'qvector< hexwarn_t >::iterator' + | erase(self, it) -> hexwarn_t + | erase(self, first, last) -> hexwarn_t + | + | extract(self, *args) -> 'hexwarn_t *' + | extract(self) -> hexwarn_t + | + | find(self, *args) -> 'qvector< hexwarn_t >::const_iterator' + | find(self, x) -> hexwarn_t + | find(self, x) -> hexwarn_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=hexwarn_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< hexwarn_t >::iterator' + | insert(self, it, x) -> hexwarn_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'hexwarn_t &' + | push_back(self, x) + | push_back(self) -> hexwarn_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class history_item_t in module ida_hexrays: + +class history_item_t(ctext_position_t) + | Proxy of C++ history_item_t class. + | + | Method resolution order: + | history_item_t + | ctext_position_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea=BADADDR, _lnnum=-1, _x=0, _y=0) -> history_item_t + | __init__(self, _ea, p) -> history_item_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_history_item_t(...) + | delete_history_item_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ea + | history_item_t_ea_get(self) -> ea_t + | + | end + | history_item_t_end_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ctext_position_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | in_ctree(self, *args) -> 'bool' + | in_ctree(self, hdrlines) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ctext_position_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | ctext_position_t_lnnum_get(self) -> int + | + | x + | ctext_position_t_x_get(self) -> int + | + | y + | ctext_position_t_y_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ctext_position_t: + | + | __hash__ = None + +Help on class history_t in module ida_hexrays: + +class history_t(qvector_history_t) + | Proxy of C++ qstack< history_item_t > class. + | + | Method resolution order: + | history_t + | qvector_history_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> history_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_history_t(...) + | delete_history_t(self) + | + | append = push_back(self, *args) -> 'history_item_t &' + | push_back(self, x) + | push_back(self) -> history_item_t + | + | at = __getitem__(self, *args) -> 'history_item_t const &' + | __getitem__(self, i) -> history_item_t + | + | pop(self, *args) -> 'history_item_t' + | pop(self) -> history_item_t + | + | push(self, *args) -> 'void' + | push(self, v) + | + | top(self, *args) -> 'history_item_t &' + | top(self) -> history_item_t + | top(self) -> history_item_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_history_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'history_item_t const &' + | __getitem__(self, i) -> history_item_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< history_item_t >::const_iterator' + | begin(self) -> history_item_t + | begin(self) -> history_item_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< history_item_t >::const_iterator' + | end(self) -> history_item_t + | end(self) -> history_item_t + | + | erase(self, *args) -> 'qvector< history_item_t >::iterator' + | erase(self, it) -> history_item_t + | erase(self, first, last) -> history_item_t + | + | extract(self, *args) -> 'history_item_t *' + | extract(self) -> history_item_t + | + | find(self, *args) -> 'qvector< history_item_t >::const_iterator' + | find(self, x) -> history_item_t + | find(self, x) -> history_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=history_item_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< history_item_t >::iterator' + | insert(self, it, x) -> history_item_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'history_item_t &' + | push_back(self, x) + | push_back(self) -> history_item_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_history_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from qvector_history_t: + | + | __hash__ = None + +Help on function init_hexrays_plugin in module ida_hexrays: + +init_hexrays_plugin(*args) -> 'bool' + init_hexrays_plugin(flags=0) -> bool + + + Initialize your plugin for hex-rays decompiler. This function must be + called before calling any other decompiler function. It initializes + the pointer to the dispatcher. + + @param flags: reserved, must be 0 (C++: int) + @return: true if the decompiler exists and the dispatcher pointer is + ready to use. + +Help on function install_hexrays_callback in module ida_hexrays: + +install_hexrays_callback(callback) + Deprecated. Please use Hexrays_Hooks instead + +Help on function install_microcode_filter in module ida_hexrays: + +install_microcode_filter(*args) -> 'void' + install_microcode_filter(filter, install=True) + + + register/unregister non-standard microcode generator + + @param filter: - microcode generator object (C++: microcode_filter_t + *) + @param install: - TRUE - register the object, FALSE - unregister (C++: + bool) + +Help on function is_additive in module ida_hexrays: + +is_additive(*args) -> 'bool' + is_additive(op) -> bool + + + Is additive operator? + + + @param op (C++: ctype_t) + +Help on function is_assignment in module ida_hexrays: + +is_assignment(*args) -> 'bool' + is_assignment(op) -> bool + + + Is assignment operator? + + + @param op (C++: ctype_t) + +Help on function is_binary in module ida_hexrays: + +is_binary(*args) -> 'bool' + is_binary(op) -> bool + + + Is binary operator? + + + @param op (C++: ctype_t) + +Help on function is_bitop in module ida_hexrays: + +is_bitop(*args) -> 'bool' + is_bitop(op) -> bool + + + Is bit related operator? + + + @param op (C++: ctype_t) + +Help on function is_bool_type in module ida_hexrays: + +is_bool_type(*args) -> 'bool' + is_bool_type(type) -> bool + + + Is a boolean type? + + @param type (C++: const tinfo_t &) + @return: true if the type is a boolean type + +Help on function is_break_consumer in module ida_hexrays: + +is_break_consumer(*args) -> 'bool' + is_break_consumer(op) -> bool + + + Does a break statement influence the specified statement code? + + + @param op (C++: ctype_t) + +Help on function is_commutative in module ida_hexrays: + +is_commutative(*args) -> 'bool' + is_commutative(op) -> bool + + + Is commutative operator? + + + @param op (C++: ctype_t) + +Help on function is_inplace_def in module ida_hexrays: + +is_inplace_def(*args) -> 'bool' + is_inplace_def(type) -> bool + + + Is struct/union/enum definition (not declaration)? + + + @param type (C++: const tinfo_t &) + +Help on function is_kreg in module ida_hexrays: + +is_kreg(*args) -> 'bool' + is_kreg(r) -> bool + + + Is a kernel register? + + + @param r (C++: mreg_t) + +Help on function is_logical in module ida_hexrays: + +is_logical(*args) -> 'bool' + is_logical(op) -> bool + + + Is logical operator? + + + @param op (C++: ctype_t) + +Help on function is_loop in module ida_hexrays: + +is_loop(*args) -> 'bool' + is_loop(op) -> bool + + + Is loop statement code? + + + @param op (C++: ctype_t) + +Help on function is_lvalue in module ida_hexrays: + +is_lvalue(*args) -> 'bool' + is_lvalue(op) -> bool + + + Is Lvalue operator? + + + @param op (C++: ctype_t) + +Help on function is_may_access in module ida_hexrays: + +is_may_access(*args) -> 'bool' + is_may_access(maymust) -> bool + +Help on function is_mcode_addsub in module ida_hexrays: + +is_mcode_addsub(*args) -> 'bool' + is_mcode_addsub(mcode) -> bool + +Help on function is_mcode_call in module ida_hexrays: + +is_mcode_call(*args) -> 'bool' + is_mcode_call(mcode) -> bool + +Help on function is_mcode_commutative in module ida_hexrays: + +is_mcode_commutative(*args) -> 'bool' + is_mcode_commutative(mcode) -> bool + +Help on function is_mcode_convertible_to_jmp in module ida_hexrays: + +is_mcode_convertible_to_jmp(*args) -> 'bool' + is_mcode_convertible_to_jmp(mcode) -> bool + +Help on function is_mcode_convertible_to_set in module ida_hexrays: + +is_mcode_convertible_to_set(*args) -> 'bool' + is_mcode_convertible_to_set(mcode) -> bool + +Help on function is_mcode_divmod in module ida_hexrays: + +is_mcode_divmod(*args) -> 'bool' + is_mcode_divmod(op) -> bool + +Help on function is_mcode_fpu in module ida_hexrays: + +is_mcode_fpu(*args) -> 'bool' + is_mcode_fpu(mcode) -> bool + +Help on function is_mcode_j1 in module ida_hexrays: + +is_mcode_j1(*args) -> 'bool' + is_mcode_j1(mcode) -> bool + +Help on function is_mcode_jcond in module ida_hexrays: + +is_mcode_jcond(*args) -> 'bool' + is_mcode_jcond(mcode) -> bool + +Help on function is_mcode_propagatable in module ida_hexrays: + +is_mcode_propagatable(*args) -> 'bool' + is_mcode_propagatable(mcode) -> bool + + + May opcode be propagated? Such opcodes can be used in sub-instructions + (nested instructions) There is a handful of non-propagatable opcodes, + like jumps, ret, nop, etc All other regular opcodes are propagatable + and may appear in a nested instruction. + + @param mcode (C++: mcode_t) + +Help on function is_mcode_set in module ida_hexrays: + +is_mcode_set(*args) -> 'bool' + is_mcode_set(mcode) -> bool + +Help on function is_mcode_set1 in module ida_hexrays: + +is_mcode_set1(*args) -> 'bool' + is_mcode_set1(mcode) -> bool + +Help on function is_mcode_shift in module ida_hexrays: + +is_mcode_shift(*args) -> 'bool' + is_mcode_shift(mcode) -> bool + +Help on function is_mcode_xdsu in module ida_hexrays: + +is_mcode_xdsu(*args) -> 'bool' + is_mcode_xdsu(mcode) -> bool + +Help on function is_multiplicative in module ida_hexrays: + +is_multiplicative(*args) -> 'bool' + is_multiplicative(op) -> bool + + + Is multiplicative operator? + + + @param op (C++: ctype_t) + +Help on function is_nonbool_type in module ida_hexrays: + +is_nonbool_type(*args) -> 'bool' + is_nonbool_type(type) -> bool + + + Is definitely a non-boolean type? + + @param type (C++: const tinfo_t &) + @return: true if the type is a non-boolean type (non bool and well + defined) + +Help on function is_paf in module ida_hexrays: + +is_paf(*args) -> 'bool' + is_paf(t) -> bool + + + Is a pointer, array, or function type? + + + @param t (C++: type_t) + +Help on function is_prepost in module ida_hexrays: + +is_prepost(*args) -> 'bool' + is_prepost(op) -> bool + + + Is pre/post increment/decrement operator? + + + @param op (C++: ctype_t) + +Help on function is_ptr_or_array in module ida_hexrays: + +is_ptr_or_array(*args) -> 'bool' + is_ptr_or_array(t) -> bool + + + Is a pointer or array type? + + + @param t (C++: type_t) + +Help on function is_relational in module ida_hexrays: + +is_relational(*args) -> 'bool' + is_relational(op) -> bool + + + Is comparison operator? + + + @param op (C++: ctype_t) + +Help on function is_signed_mcode in module ida_hexrays: + +is_signed_mcode(*args) -> 'bool' + is_signed_mcode(code) -> bool + +Help on function is_small_udt in module ida_hexrays: + +is_small_udt(*args) -> 'bool' + is_small_udt(tif) -> bool + + + Is a small structure or union? + + @param tif (C++: const tinfo_t &) + @return: true if the type is a small UDT (user defined type). Small + UDTs fit into a register (or pair or registers) as a rule. + +Help on function is_type_correct in module ida_hexrays: + +is_type_correct(*args) -> 'bool' + is_type_correct(ptr) -> bool + + + Verify a type string. + + @param ptr (C++: const type_t *) + @return: true if type string is correct + +Help on function is_unary in module ida_hexrays: + +is_unary(*args) -> 'bool' + is_unary(op) -> bool + + + Is unary operator? + + + @param op (C++: ctype_t) + +Help on function is_unsigned_mcode in module ida_hexrays: + +is_unsigned_mcode(*args) -> 'bool' + is_unsigned_mcode(code) -> bool + +Help on class ivl_t in module ida_hexrays: + +class ivl_t(uval_ivl_t) + | Proxy of C++ ivl_t class. + | + | Method resolution order: + | ivl_t + | uval_ivl_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _off, _size) -> ivl_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ivl_t(...) + | delete_ivl_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, off2) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend_to_cover(self, *args) -> 'bool' + | extend_to_cover(self, r) -> bool + | + | includes(self, *args) -> 'bool' + | includes(self, ivl) -> bool + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlap(self, *args) -> 'bool' + | overlap(self, ivl) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from uval_ivl_t: + | + | end(self, *args) -> 'unsigned-ea-like-numeric-type'↗ + | end(self) -> unsigned-ea-like-numeric-type↗ + | + | last(self, *args) -> 'unsigned-ea-like-numeric-type'↗ + | last(self) -> unsigned-ea-like-numeric-type↗ + | + | valid(self, *args) -> 'bool' + | valid(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from uval_ivl_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type↗ + | + | size + | uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type↗ + +Help on class ivl_with_name_t in module ida_hexrays: + +class ivl_with_name_t(builtins.object) + | Proxy of C++ ivl_with_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ivl_with_name_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ivl_with_name_t(...) + | delete_ivl_with_name_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ivl + | ivl_with_name_t_ivl_get(self) -> ivl_t + | + | part + | ivl_with_name_t_part_get(self) -> char const * + | + | thisown + | The membership flag + | + | whole + | ivl_with_name_t_whole_get(self) -> char const * + +Help on class ivlset_t in module ida_hexrays: + +class ivlset_t(uval_ivl_ivlset_t) + | Proxy of C++ ivlset_t class. + | + | Method resolution order: + | ivlset_t + | uval_ivl_ivlset_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ivlset_t + | __init__(self, ivl) -> ivlset_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ivlset_t(...) + | delete_ivlset_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | add(self, *args) -> 'bool' + | add(self, ivl) -> bool + | add(self, ea, size) -> bool + | add(self, ivs) -> bool + | + | addmasked(self, *args) -> 'bool' + | addmasked(self, ivs, mask) -> bool + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, off) -> bool + | + | count(self, *args) -> 'asize_t' + | count(self) -> asize_t + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | has_common(self, *args) -> 'bool' + | has_common(self, ivl, strict=False) -> bool + | has_common(self, ivs) -> bool + | + | includes(self, *args) -> 'bool' + | includes(self, ivs) -> bool + | + | intersect(self, *args) -> 'bool' + | intersect(self, ivs) -> bool + | + | sub(self, *args) -> 'bool' + | sub(self, ivl) -> bool + | sub(self, ea, size) -> bool + | sub(self, ivs) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from uval_ivl_ivlset_t: + | + | all_values(self, *args) -> 'bool' + | all_values(self) -> bool + | + | begin(self, *args) -> 'ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator'↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator'↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | getivl(self, *args) -> 'ivl_t const &' + | getivl(self, idx) -> ivl_t + | + | lastivl(self, *args) -> 'ivl_t const &' + | lastivl(self) -> ivl_t + | + | nivls(self, *args) -> 'size_t' + | nivls(self) -> size_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | set_all_values(self, *args) -> 'void' + | set_all_values(self) + | + | single_value(self, *args) -> 'bool' + | single_value(self, v) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from uval_ivl_ivlset_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function jcnd2set in module ida_hexrays: + +jcnd2set(*args) -> 'mcode_t' + jcnd2set(code) -> mcode_t + +Help on function lexcompare in module ida_hexrays: + +lexcompare(*args) -> 'int' + lexcompare(a, b) -> int + +Help on function lnot in module ida_hexrays: + +lnot(e) + +Help on class lvar_locator_t in module ida_hexrays: + +class lvar_locator_t(builtins.object) + | Proxy of C++ lvar_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_locator_t + | __init__(self, loc, ea) -> lvar_locator_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_locator_t(...) + | delete_lvar_locator_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | get_reg1(self, *args) -> 'mreg_t' + | get_reg1(self) -> mreg_t + | + | get_reg2(self, *args) -> 'mreg_t' + | get_reg2(self) -> mreg_t + | + | get_scattered(self, *args) -> 'scattered_aloc_t &' + | get_scattered(self) -> scattered_aloc_t + | get_scattered(self) -> scattered_aloc_t + | + | get_stkoff(self, *args) -> 'sval_t' + | get_stkoff(self) -> sval_t + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_reg_var(self, *args) -> 'bool' + | is_reg_var(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stk_var(self, *args) -> 'bool' + | is_stk_var(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | defea + | lvar_locator_t_defea_get(self) -> ea_t + | + | location + | lvar_locator_t_location_get(self) -> vdloc_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function lvar_mapping_begin in module ida_hexrays: + +lvar_mapping_begin(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_begin(map) -> lvar_mapping_iterator_t + + + Get iterator pointing to the beginning of lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + +Help on function lvar_mapping_clear in module ida_hexrays: + +lvar_mapping_clear(*args) -> 'void' + lvar_mapping_clear(map) + + + Clear lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + +Help on function lvar_mapping_end in module ida_hexrays: + +lvar_mapping_end(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_end(map) -> lvar_mapping_iterator_t + + + Get iterator pointing to the end of lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + +Help on function lvar_mapping_erase in module ida_hexrays: + +lvar_mapping_erase(*args) -> 'void' + lvar_mapping_erase(map, p) + + + Erase current element from lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_find in module ida_hexrays: + +lvar_mapping_find(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_find(map, key) -> lvar_mapping_iterator_t + + + Find the specified key in lvar_mapping_t. + + + @param map (C++: const lvar_mapping_t *) + @param key (C++: const lvar_locator_t &) + +Help on function lvar_mapping_first in module ida_hexrays: + +lvar_mapping_first(*args) -> 'lvar_locator_t const &' + lvar_mapping_first(p) -> lvar_locator_t + + + Get reference to the current map key. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_free in module ida_hexrays: + +lvar_mapping_free(*args) -> 'void' + lvar_mapping_free(map) + + + Delete lvar_mapping_t instance. + + + @param map (C++: lvar_mapping_t *) + +Help on function lvar_mapping_insert in module ida_hexrays: + +lvar_mapping_insert(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_insert(map, key, val) -> lvar_mapping_iterator_t + + + Insert new ( 'lvar_locator_t' , 'lvar_locator_t' ) pair into + lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + @param key (C++: const lvar_locator_t &) + @param val (C++: const lvar_locator_t &) + +Help on class lvar_mapping_iterator_t in module ida_hexrays: + +class lvar_mapping_iterator_t(builtins.object) + | Proxy of C++ lvar_mapping_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_mapping_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_mapping_iterator_t(...) + | delete_lvar_mapping_iterator_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 + | + | x + | lvar_mapping_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function lvar_mapping_new in module ida_hexrays: + +lvar_mapping_new(*args) -> 'lvar_mapping_t *' + lvar_mapping_new() -> lvar_mapping_t + + + Create a new lvar_mapping_t instance. + +Help on function lvar_mapping_next in module ida_hexrays: + +lvar_mapping_next(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_next(p) -> lvar_mapping_iterator_t + + + Move to the next element. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_prev in module ida_hexrays: + +lvar_mapping_prev(*args) -> 'lvar_mapping_iterator_t' + lvar_mapping_prev(p) -> lvar_mapping_iterator_t + + + Move to the previous element. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_second in module ida_hexrays: + +lvar_mapping_second(*args) -> 'lvar_locator_t &' + lvar_mapping_second(p) -> lvar_locator_t + + + Get reference to the current map value. + + + @param p (C++: lvar_mapping_iterator_t) + +Help on function lvar_mapping_size in module ida_hexrays: + +lvar_mapping_size(*args) -> 'size_t' + lvar_mapping_size(map) -> size_t + + + Get size of lvar_mapping_t. + + + @param map (C++: lvar_mapping_t *) + +Help on class lvar_mapping_t in module ida_hexrays: + +class lvar_mapping_t(builtins.object) + | Proxy of C++ std::map< lvar_locator_t,lvar_locator_t > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvar_mapping_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_mapping_t(...) + | delete_lvar_mapping_t(self) + | + | at(self, *args) -> 'lvar_locator_t &' + | at(self, _Keyval) -> lvar_locator_t + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + +Help on class lvar_ref_t in module ida_hexrays: + +class lvar_ref_t(builtins.object) + | Proxy of C++ lvar_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, m, i, o=0) -> lvar_ref_t + | __init__(self, r) -> lvar_ref_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_ref_t(...) + | delete_lvar_ref_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | var(self, *args) -> 'lvar_t &' + | var(self) -> lvar_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | idx + | lvar_ref_t_idx_get(self) -> int + | + | mba + | lvar_ref_t_mba_get(self) -> mbl_array_t + | + | off + | lvar_ref_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class lvar_saved_info_t in module ida_hexrays: + +class lvar_saved_info_t(builtins.object) + | Proxy of C++ lvar_saved_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lvar_saved_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_saved_info_t(...) + | delete_lvar_saved_info_t(self) + | + | clear_keep(self, *args) -> 'void' + | clear_keep(self) + | + | clr_forced_lvar(self, *args) -> 'void' + | clr_forced_lvar(self) + | + | clr_nomap_lvar(self, *args) -> 'void' + | clr_nomap_lvar(self) + | + | clr_noptr_lvar(self, *args) -> 'void' + | clr_noptr_lvar(self) + | + | has_info(self, *args) -> 'bool' + | has_info(self) -> bool + | + | is_forced_lvar(self, *args) -> 'bool' + | is_forced_lvar(self) -> bool + | + | is_kept(self, *args) -> 'bool' + | is_kept(self) -> bool + | + | is_nomap_lvar(self, *args) -> 'bool' + | is_nomap_lvar(self) -> bool + | + | is_noptr_lvar(self, *args) -> 'bool' + | is_noptr_lvar(self) -> bool + | + | set_forced_lvar(self, *args) -> 'void' + | set_forced_lvar(self) + | + | set_keep(self, *args) -> 'void' + | set_keep(self) + | + | set_nomap_lvar(self, *args) -> 'void' + | set_nomap_lvar(self) + | + | set_noptr_lvar(self, *args) -> 'void' + | set_noptr_lvar(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | lvar_saved_info_t_cmt_get(self) -> qstring * + | + | flags + | lvar_saved_info_t_flags_get(self) -> int + | + | ll + | lvar_saved_info_t_ll_get(self) -> lvar_locator_t + | + | name + | lvar_saved_info_t_name_get(self) -> qstring * + | + | size + | lvar_saved_info_t_size_get(self) -> ssize_t + | + | thisown + | The membership flag + | + | type + | lvar_saved_info_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class lvar_saved_infos_t in module ida_hexrays: + +class lvar_saved_infos_t(builtins.object) + | Proxy of C++ qvector< lvar_saved_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'lvar_saved_info_t const &' + | __getitem__(self, i) -> lvar_saved_info_t + | + | __init__(self, *args) + | __init__(self) -> lvar_saved_infos_t + | __init__(self, x) -> lvar_saved_infos_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_lvar_saved_infos_t(...) + | delete_lvar_saved_infos_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'lvar_saved_info_t &' + | + | at = __getitem__(self, *args) -> 'lvar_saved_info_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< lvar_saved_info_t >::const_iterator' + | begin(self) -> lvar_saved_info_t + | begin(self) -> lvar_saved_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< lvar_saved_info_t >::const_iterator' + | end(self) -> lvar_saved_info_t + | end(self) -> lvar_saved_info_t + | + | erase(self, *args) -> 'qvector< lvar_saved_info_t >::iterator' + | erase(self, it) -> lvar_saved_info_t + | erase(self, first, last) -> lvar_saved_info_t + | + | extract(self, *args) -> 'lvar_saved_info_t *' + | extract(self) -> lvar_saved_info_t + | + | find(self, *args) -> 'qvector< lvar_saved_info_t >::const_iterator' + | find(self, x) -> lvar_saved_info_t + | find(self, x) -> lvar_saved_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=lvar_saved_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< lvar_saved_info_t >::iterator' + | insert(self, it, x) -> lvar_saved_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'lvar_saved_info_t &' + | push_back(self, x) + | push_back(self) -> lvar_saved_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class lvar_t in module ida_hexrays: + +class lvar_t(lvar_locator_t) + | Proxy of C++ lvar_t class. + | + | Method resolution order: + | lvar_t + | lvar_locator_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | __init__(self) -> lvar_locator_t + | __init__(self, loc, ea) -> lvar_locator_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_t(...) + | delete_lvar_t(self) + | + | accepts_type(self, *args) -> 'bool' + | accepts_type(self, t, may_change_thisarg=False) -> bool + | + | append_list(self, *args) -> 'void' + | append_list(self, lst, pad_if_scattered=False) + | + | clear_used(self, *args) -> 'void' + | clear_used(self) + | + | clr_arg_var(self, *args) -> 'void' + | clr_arg_var(self) + | + | clr_automapped(self, *args) -> 'void' + | clr_automapped(self) + | + | clr_dummy_arg(self, *args) -> 'void' + | clr_dummy_arg(self) + | + | clr_fake_var(self, *args) -> 'void' + | clr_fake_var(self) + | + | clr_floating_var(self, *args) -> 'void' + | clr_floating_var(self) + | + | clr_forced_var(self, *args) -> 'void' + | clr_forced_var(self) + | + | clr_mapdst_var(self, *args) -> 'void' + | clr_mapdst_var(self) + | + | clr_mreg_done(self, *args) -> 'void' + | clr_mreg_done(self) + | + | clr_noptr_var(self, *args) -> 'void' + | clr_noptr_var(self) + | + | clr_notarg(self, *args) -> 'void' + | clr_notarg(self) + | + | clr_overlapped_var(self, *args) -> 'void' + | clr_overlapped_var(self) + | + | clr_spoiled_var(self, *args) -> 'void' + | clr_spoiled_var(self) + | + | clr_thisarg(self, *args) -> 'void' + | clr_thisarg(self) + | + | clr_unknown_width(self, *args) -> 'void' + | clr_unknown_width(self) + | + | clr_user_info(self, *args) -> 'void' + | clr_user_info(self) + | + | clr_user_name(self, *args) -> 'void' + | clr_user_name(self) + | + | clr_user_type(self, *args) -> 'void' + | clr_user_type(self) + | + | has_common(self, *args) -> 'bool' + | has_common(self, v) -> bool + | + | has_common_bit(self, *args) -> 'bool' + | has_common_bit(self, loc, width2) -> bool + | + | has_regname(self, *args) -> 'bool' + | has_regname(self) -> bool + | + | is_aliasable(self, *args) -> 'bool' + | is_aliasable(self, mba) -> bool + | + | is_automapped(self, *args) -> 'bool' + | is_automapped(self) -> bool + | + | is_dummy_arg(self, *args) -> 'bool' + | is_dummy_arg(self) -> bool + | + | is_forced_var(self, *args) -> 'bool' + | is_forced_var(self) -> bool + | + | is_noptr_var(self, *args) -> 'bool' + | is_noptr_var(self) -> bool + | + | is_notarg(self, *args) -> 'bool' + | is_notarg(self) -> bool + | + | is_thisarg(self, *args) -> 'bool' + | is_thisarg(self) -> bool + | + | set_arg_var(self, *args) -> 'void' + | set_arg_var(self) + | + | set_automapped(self, *args) -> 'void' + | set_automapped(self) + | + | set_dummy_arg(self, *args) -> 'void' + | set_dummy_arg(self) + | + | set_fake_var(self, *args) -> 'void' + | set_fake_var(self) + | + | set_final_lvar_type(self, *args) -> 'void' + | set_final_lvar_type(self, t) + | + | set_floating_var(self, *args) -> 'void' + | set_floating_var(self) + | + | set_forced_var(self, *args) -> 'void' + | set_forced_var(self) + | + | set_lvar_type(self, *args) -> 'bool' + | set_lvar_type(self, t, may_fail=False) -> bool + | + | set_mapdst_var(self, *args) -> 'void' + | set_mapdst_var(self) + | + | set_mreg_done(self, *args) -> 'void' + | set_mreg_done(self) + | + | set_non_typed(self, *args) -> 'void' + | set_non_typed(self) + | + | set_noptr_var(self, *args) -> 'void' + | set_noptr_var(self) + | + | set_notarg(self, *args) -> 'void' + | set_notarg(self) + | + | set_overlapped_var(self, *args) -> 'void' + | set_overlapped_var(self) + | + | set_spoiled_var(self, *args) -> 'void' + | set_spoiled_var(self) + | + | set_thisarg(self, *args) -> 'void' + | set_thisarg(self) + | + | set_typed(self, *args) -> 'void' + | set_typed(self) + | + | set_unknown_width(self, *args) -> 'void' + | set_unknown_width(self) + | + | set_used(self, *args) -> 'void' + | set_used(self) + | + | set_user_name(self, *args) -> 'void' + | set_user_name(self) + | + | set_user_type(self, *args) -> 'void' + | set_user_type(self) + | + | set_width(self, *args) -> 'bool' + | set_width(self, w, svw_flags=0) -> bool + | + | type(self, *args) -> 'tinfo_t &' + | type(self) -> tinfo_t + | type(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cmt + | lvar_t_cmt_get(self) -> qstring * + | + | defblk + | lvar_t_defblk_get(self) -> int + | + | divisor + | lvar_t_divisor_get(self) -> uint64 + | + | has_nice_name + | has_nice_name(self) -> bool + | + | has_user_info + | has_user_info(self) -> bool + | + | has_user_name + | has_user_name(self) -> bool + | + | has_user_type + | has_user_type(self) -> bool + | + | is_arg_var + | is_arg_var(self) -> bool + | + | is_fake_var + | is_fake_var(self) -> bool + | + | is_floating_var + | is_floating_var(self) -> bool + | + | is_mapdst_var + | is_mapdst_var(self) -> bool + | + | is_overlapped_var + | is_overlapped_var(self) -> bool + | + | is_result_var + | is_result_var(self) -> bool + | + | is_spoiled_var + | is_spoiled_var(self) -> bool + | + | is_unknown_width + | is_unknown_width(self) -> bool + | + | mreg_done + | mreg_done(self) -> bool + | + | name + | lvar_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tif + | lvar_t_tif_get(self) -> tinfo_t + | + | typed + | typed(self) -> bool + | + | used + | used(self) -> bool + | + | width + | lvar_t_width_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from lvar_locator_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | get_reg1(self, *args) -> 'mreg_t' + | get_reg1(self) -> mreg_t + | + | get_reg2(self, *args) -> 'mreg_t' + | get_reg2(self) -> mreg_t + | + | get_scattered(self, *args) -> 'scattered_aloc_t &' + | get_scattered(self) -> scattered_aloc_t + | get_scattered(self) -> scattered_aloc_t + | + | get_stkoff(self, *args) -> 'sval_t' + | get_stkoff(self) -> sval_t + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_reg_var(self, *args) -> 'bool' + | is_reg_var(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stk_var(self, *args) -> 'bool' + | is_stk_var(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from lvar_locator_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | defea + | lvar_locator_t_defea_get(self) -> ea_t + | + | location + | lvar_locator_t_location_get(self) -> vdloc_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from lvar_locator_t: + | + | __hash__ = None + +Help on class lvar_uservec_t in module ida_hexrays: + +class lvar_uservec_t(builtins.object) + | Proxy of C++ lvar_uservec_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvar_uservec_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvar_uservec_t(...) + | delete_lvar_uservec_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | find_info(self, *args) -> 'lvar_saved_info_t *' + | find_info(self, vloc) -> lvar_saved_info_t + | + | keep_info(self, *args) -> 'void' + | keep_info(self, v) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lmaps + | lvar_uservec_t_lmaps_get(self) -> lvar_mapping_t + | + | lvvec + | lvar_uservec_t_lvvec_get(self) -> lvar_saved_infos_t + | + | stkoff_delta + | lvar_uservec_t_stkoff_delta_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ulv_flags + | lvar_uservec_t_ulv_flags_get(self) -> int + +Help on class lvars_t in module ida_hexrays: + +class lvars_t(qvector_lvar_t) + | Proxy of C++ lvars_t class. + | + | Method resolution order: + | lvars_t + | qvector_lvar_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lvars_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lvars_t(...) + | delete_lvars_t(self) + | + | find(self, *args) -> 'lvar_t *' + | find(self, ll) -> lvar_t + | + | find_input_lvar(self, *args) -> 'int' + | find_input_lvar(self, argloc, _size) -> int + | + | find_lvar(self, *args) -> 'int' + | find_lvar(self, location, width, defblk=-1) -> int + | + | find_stkvar(self, *args) -> 'int' + | find_stkvar(self, spoff, width) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from qvector_lvar_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'lvar_t const &' + | __getitem__(self, i) -> lvar_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'lvar_t &' + | push_back(self, x) + | push_back(self) -> lvar_t + | + | at = __getitem__(self, *args) -> 'lvar_t const &' + | __getitem__(self, i) -> lvar_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< lvar_t >::const_iterator' + | begin(self) -> lvar_t + | begin(self) -> lvar_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< lvar_t >::const_iterator' + | end(self) -> lvar_t + | end(self) -> lvar_t + | + | erase(self, *args) -> 'qvector< lvar_t >::iterator' + | erase(self, it) -> lvar_t + | erase(self, first, last) -> lvar_t + | + | extract(self, *args) -> 'lvar_t *' + | extract(self) -> lvar_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=lvar_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< lvar_t >::iterator' + | insert(self, it, x) -> lvar_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'lvar_t &' + | push_back(self, x) + | push_back(self) -> lvar_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from qvector_lvar_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from qvector_lvar_t: + | + | __hash__ = None + +Help on function make_num in module ida_hexrays: + +make_num(*args) + +Help on function make_pointer in module ida_hexrays: + +make_pointer(*args) -> 'tinfo_t' + make_pointer(type) -> tinfo_t + + + Create a pointer type. This function performs the following + conversion: "type" -> "type*" + + @param type: object type. (C++: const tinfo_t &) + @return: "type*". for example, if 'char' is passed as the argument, + +Help on function make_ref in module ida_hexrays: + +make_ref(e) + +Help on function mark_cfunc_dirty in module ida_hexrays: + +mark_cfunc_dirty(*args) -> 'bool' + mark_cfunc_dirty(ea, close_views=False) -> bool + + + Flush the cached decompilation results. Erases a cache entry for the + specified function. + + @param ea: function to erase from the cache (C++: ea_t) + @param close_views: close pseudocode windows that show the function + (C++: bool) + @return: if a cache entry existed. + +Help on class mba_range_iterator_t in module ida_hexrays: + +class mba_range_iterator_t(builtins.object) + | Proxy of C++ mba_range_iterator_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mba_range_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mba_range_iterator_t(...) + | delete_mba_range_iterator_t(self) + | + | chunk(self, *args) -> 'range_t const &' + | chunk(self) -> range_t + | + | is_snippet(self, *args) -> 'bool' + | is_snippet(self) -> bool + | + | next(self, *args) -> 'bool' + | next(self) -> bool + | + | set(self, *args) -> 'bool' + | set(self, mbr) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fii + | mba_range_iterator_t_fii_get(self) -> func_tail_iterator_t + | + | rii + | mba_range_iterator_t_rii_get(self) -> range_chunk_iterator_t * + | + | thisown + | The membership flag + +Help on class mba_ranges_t in module ida_hexrays: + +class mba_ranges_t(builtins.object) + | Proxy of C++ mba_ranges_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _pfn=None) -> mba_ranges_t + | __init__(self, r) -> mba_ranges_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mba_ranges_t(...) + | delete_mba_ranges_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | is_fragmented(self, *args) -> 'bool' + | is_fragmented(self) -> bool + | + | is_snippet(self, *args) -> 'bool' + | is_snippet(self) -> bool + | + | start(self, *args) -> 'ea_t' + | start(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | pfn + | mba_ranges_t_pfn_get(self) -> func_t * + | + | ranges + | mba_ranges_t_ranges_get(self) -> rangevec_t + | + | thisown + | The membership flag + +Help on class mbl_array_t in module ida_hexrays: + +class mbl_array_t(builtins.object) + | Proxy of C++ mbl_array_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mbl_array_t(...) + | delete_mbl_array_t(self) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _print(self, *args) -> 'void' + | _print(self, vp) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | alloc_lvars(self, *args) -> 'void' + | alloc_lvars(self) + | + | analyze_calls(self, *args) -> 'int' + | analyze_calls(self, acflags) -> int + | + | arg(self, *args) -> 'lvar_t const &' + | arg(self, n) -> lvar_t + | arg(self, n) -> lvar_t + | + | argbase(self, *args) -> 'sval_t' + | argbase(self) -> sval_t + | + | argidx_ok(self, *args) -> 'bool' + | argidx_ok(self) -> bool + | + | bad_call_sp_detected(self, *args) -> 'bool' + | bad_call_sp_detected(self) -> bool + | + | build_graph(self, *args) -> 'merror_t' + | build_graph(self) -> merror_t + | + | calc_shins_flags(self, *args) -> 'int' + | calc_shins_flags(self) -> int + | + | callinfo_built(self, *args) -> 'bool' + | callinfo_built(self) -> bool + | + | chain_varnums_ok(self, *args) -> 'bool' + | chain_varnums_ok(self) -> bool + | + | clr_cdtr(self, *args) -> 'void' + | clr_cdtr(self) + | + | clr_mba_flags(self, *args) -> 'void' + | clr_mba_flags(self, f) + | + | clr_mba_flags2(self, *args) -> 'void' + | clr_mba_flags2(self, f) + | + | combine_blocks(self, *args) -> 'bool' + | combine_blocks(self) -> bool + | + | common_stkvars_stkargs(self, *args) -> 'bool' + | common_stkvars_stkargs(self) -> bool + | + | copy_block(self, *args) -> 'mblock_t *' + | copy_block(self, blk, new_serial, cpblk_flags=3) -> mblock_t + | + | deleted_pairs(self, *args) -> 'bool' + | deleted_pairs(self) -> bool + | + | display_numaddrs(self, *args) -> 'bool' + | display_numaddrs(self) -> bool + | + | display_valnums(self, *args) -> 'bool' + | display_valnums(self) -> bool + | + | dump(self, *args) -> 'void' + | dump(self) + | + | dump_mba(self, *args) -> 'void' + | dump_mba(self, _verify, title) + | + | find_mop(self, *args) -> 'mop_t *' + | find_mop(self, ctx, ea, is_dest, list) -> mop_t + | + | for_all_insns(self, *args) -> 'int' + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv) -> int + | + | for_all_topinsns(self, *args) -> 'int' + | for_all_topinsns(self, mv) -> int + | + | generated_asserts(self, *args) -> 'bool' + | generated_asserts(self) -> bool + | + | get_args_region(self, *args) -> 'ivl_t const &' + | get_args_region(self) -> ivl_t + | + | get_curfunc(self, *args) -> 'func_t *' + | get_curfunc(self) -> func_t * + | + | get_graph(self, *args) -> 'mbl_graph_t *' + | get_graph(self) -> mbl_graph_t + | + | get_ida_argloc(self, *args) -> 'argloc_t' + | get_ida_argloc(self, v) -> argloc_t + | + | get_lvars_region(self, *args) -> 'ivl_t const &' + | get_lvars_region(self) -> ivl_t + | + | get_mba_flags(self, *args) -> 'int' + | get_mba_flags(self) -> int + | + | get_mba_flags2(self, *args) -> 'int' + | get_mba_flags2(self) -> int + | + | get_mblock(self, *args) -> 'mblock_t *' + | get_mblock(self, n) -> mblock_t + | get_mblock(self, n) -> mblock_t + | + | get_shadow_region(self, *args) -> 'ivl_t const &' + | get_shadow_region(self) -> ivl_t + | + | get_stack_region(self, *args) -> 'ivl_t' + | get_stack_region(self) -> ivl_t + | + | get_std_region(self, *args) -> 'ivl_t const &' + | get_std_region(self, idx) -> ivl_t + | + | graph_insns(self, *args) -> 'bool' + | graph_insns(self) -> bool + | + | has_bad_sp(self, *args) -> 'bool' + | has_bad_sp(self) -> bool + | + | has_over_chains(self, *args) -> 'bool' + | has_over_chains(self) -> bool + | + | has_passregs(self, *args) -> 'bool' + | has_passregs(self) -> bool + | + | idaloc2vd(self, *args) -> 'vdloc_t' + | idaloc2vd(self, loc, width) -> vdloc_t + | + | insert_block(self, *args) -> 'mblock_t *' + | insert_block(self, bblk) -> mblock_t + | + | is_cdtr(self, *args) -> 'bool' + | is_cdtr(self) -> bool + | + | is_ctr(self, *args) -> 'bool' + | is_ctr(self) -> bool + | + | is_dtr(self, *args) -> 'bool' + | is_dtr(self) -> bool + | + | is_pattern(self, *args) -> 'bool' + | is_pattern(self) -> bool + | + | is_snippet(self, *args) -> 'bool' + | is_snippet(self) -> bool + | + | is_stkarg(self, *args) -> 'bool' + | is_stkarg(self, v) -> bool + | + | is_thunk(self, *args) -> 'bool' + | is_thunk(self) -> bool + | + | loaded_gdl(self, *args) -> 'bool' + | loaded_gdl(self) -> bool + | + | lvar_names_ok(self, *args) -> 'bool' + | lvar_names_ok(self) -> bool + | + | lvars_allocated(self, *args) -> 'bool' + | lvars_allocated(self) -> bool + | + | lvars_renamed(self, *args) -> 'bool' + | lvars_renamed(self) -> bool + | + | mark_chains_dirty(self, *args) -> 'void' + | mark_chains_dirty(self) + | + | may_refine_rettype(self, *args) -> 'bool' + | may_refine_rettype(self) -> bool + | + | optimize_global(self, *args) -> 'merror_t' + | optimize_global(self) -> merror_t + | + | optimize_local(self, *args) -> 'int' + | optimize_local(self, locopt_bits) -> int + | + | optimized(self, *args) -> 'bool' + | optimized(self) -> bool + | + | precise_defeas(self, *args) -> 'bool' + | precise_defeas(self) -> bool + | + | propagated_asserts(self, *args) -> 'bool' + | propagated_asserts(self) -> bool + | + | really_alloc(self, *args) -> 'bool' + | really_alloc(self) -> bool + | + | regargs_is_not_aligned(self, *args) -> 'bool' + | regargs_is_not_aligned(self) -> bool + | + | remove_block(self, *args) -> 'bool' + | remove_block(self, blk) -> bool + | + | remove_empty_blocks(self, *args) -> 'bool' + | remove_empty_blocks(self) -> bool + | + | returns_fpval(self, *args) -> 'bool' + | returns_fpval(self) -> bool + | + | rtype_refined(self, *args) -> 'bool' + | rtype_refined(self) -> bool + | + | saverest_done(self, *args) -> 'bool' + | saverest_done(self) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | set_mba_flags(self, *args) -> 'void' + | set_mba_flags(self, f) + | + | set_mba_flags2(self, *args) -> 'void' + | set_mba_flags2(self, f) + | + | short_display(self, *args) -> 'bool' + | short_display(self) -> bool + | + | should_beautify(self, *args) -> 'bool' + | should_beautify(self) -> bool + | + | show_reduction(self, *args) -> 'bool' + | show_reduction(self) -> bool + | + | stkoff_ida2vd(self, *args) -> 'sval_t' + | stkoff_ida2vd(self, off) -> sval_t + | + | stkoff_vd2ida(self, *args) -> 'sval_t' + | stkoff_vd2ida(self, off) -> sval_t + | + | term(self, *args) -> 'void' + | term(self) + | + | use_frame(self, *args) -> 'bool' + | use_frame(self) -> bool + | + | use_wingraph32(self, *args) -> 'bool' + | use_wingraph32(self) -> bool + | + | valranges_done(self, *args) -> 'bool' + | valranges_done(self) -> bool + | + | vd2idaloc(self, *args) -> 'argloc_t' + | vd2idaloc(self, loc, width, spd) -> argloc_t + | vd2idaloc(self, loc, width) -> argloc_t + | + | verify(self, *args) -> 'void' + | verify(self, always) + | + | write_to_const_detected(self, *args) -> 'bool' + | write_to_const_detected(self) -> bool + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | deserialize(*args) -> 'mbl_array_t *' + | deserialize(bytes) -> mbl_array_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | aliased_args + | mbl_array_t_aliased_args_get(self) -> ivl_t + | + | aliased_memory + | mbl_array_t_aliased_memory_get(self) -> ivlset_t + | + | aliased_vars + | mbl_array_t_aliased_vars_get(self) -> ivl_t + | + | argidx + | mbl_array_t_argidx_get(self) -> intvec_t + | + | blocks + | mbl_array_t_blocks_get(self) -> mblock_t + | + | cc + | mbl_array_t_cc_get(self) -> cm_t + | + | consumed_argregs + | mbl_array_t_consumed_argregs_get(self) -> rlist_t + | + | entry_ea + | mbl_array_t_entry_ea_get(self) -> ea_t + | + | error_ea + | mbl_array_t_error_ea_get(self) -> ea_t + | + | error_strarg + | mbl_array_t_error_strarg_get(self) -> qstring * + | + | final_type + | mbl_array_t_final_type_get(self) -> bool + | + | first_epilog_ea + | mbl_array_t_first_epilog_ea_get(self) -> ea_t + | + | fpd + | mbl_array_t_fpd_get(self) -> sval_t + | + | frregs + | mbl_array_t_frregs_get(self) -> sval_t + | + | frsize + | mbl_array_t_frsize_get(self) -> sval_t + | + | fti_flags + | mbl_array_t_fti_flags_get(self) -> int + | + | fullsize + | mbl_array_t_fullsize_get(self) -> sval_t + | + | gotoff_stkvars + | mbl_array_t_gotoff_stkvars_get(self) -> ivlset_t + | + | idb_node + | mbl_array_t_idb_node_get(self) -> netnode + | + | idb_spoiled + | mbl_array_t_idb_spoiled_get(self) -> reginfovec_t + | + | idb_type + | mbl_array_t_idb_type_get(self) -> tinfo_t + | + | inargoff + | mbl_array_t_inargoff_get(self) -> sval_t + | + | label + | mbl_array_t_label_get(self) -> qstring * + | + | last_prolog_ea + | mbl_array_t_last_prolog_ea_get(self) -> ea_t + | + | maturity + | mbl_array_t_maturity_get(self) -> mba_maturity_t + | + | mbr + | mbl_array_t_mbr_get(self) -> mba_ranges_t + | + | minargref + | mbl_array_t_minargref_get(self) -> sval_t + | + | minstkref + | mbl_array_t_minstkref_get(self) -> sval_t + | + | minstkref_ea + | mbl_array_t_minstkref_ea_get(self) -> ea_t + | + | natural + | mbl_array_t_natural_get(self) -> mblock_t ** + | + | nodel_memory + | mbl_array_t_nodel_memory_get(self) -> mlist_t + | + | notes + | mbl_array_t_notes_get(self) -> hexwarns_t + | + | npurged + | mbl_array_t_npurged_get(self) -> int + | + | occurred_warns + | mbl_array_t_occurred_warns_get(self) -> uchar [32] + | + | pfn_flags + | mbl_array_t_pfn_flags_get(self) -> int + | + | qty + | mbl_array_t_qty_get(self) -> int + | + | reqmat + | mbl_array_t_reqmat_get(self) -> mba_maturity_t + | + | restricted_memory + | mbl_array_t_restricted_memory_get(self) -> ivlset_t + | + | retsize + | mbl_array_t_retsize_get(self) -> int + | + | retvaridx + | mbl_array_t_retvaridx_get(self) -> int + | + | shadow_args + | mbl_array_t_shadow_args_get(self) -> int + | + | spd_adjust + | mbl_array_t_spd_adjust_get(self) -> sval_t + | + | spoiled_list + | mbl_array_t_spoiled_list_get(self) -> mlist_t + | + | stacksize + | mbl_array_t_stacksize_get(self) -> sval_t + | + | std_ivls + | mbl_array_t_std_ivls_get(self) -> ivl_with_name_t + | + | thisown + | The membership flag + | + | tmpstk_size + | mbl_array_t_tmpstk_size_get(self) -> sval_t + | + | vars + | mbl_array_t_vars_get(self) -> lvars_t + +Help on function mbl_array_t_deserialize in module ida_hexrays: + +mbl_array_t_deserialize(*args) -> 'mbl_array_t *' + mbl_array_t_deserialize(bytes) -> mbl_array_t + +Help on class mbl_graph_t in module ida_hexrays: + +class mbl_graph_t(simple_graph_t) + | Proxy of C++ mbl_graph_t class. + | + | Method resolution order: + | mbl_graph_t + | simple_graph_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | get_chain_stamp(self, *args) -> 'int' + | get_chain_stamp(self) -> int + | + | get_du(self, *args) -> 'graph_chains_t *' + | get_du(self, gctype) -> graph_chains_t + | + | get_mblock(self, *args) -> 'mblock_t *' + | get_mblock(self, n) -> mblock_t + | + | get_ud(self, *args) -> 'graph_chains_t *' + | get_ud(self, gctype) -> graph_chains_t + | + | is_du_chain_dirty(self, *args) -> 'bool' + | is_du_chain_dirty(self, gctype) -> bool + | + | is_redefined_globally(self, *args) -> 'bool' + | is_redefined_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool + | + | is_ud_chain_dirty(self, *args) -> 'bool' + | is_ud_chain_dirty(self, gctype) -> bool + | + | is_used_globally(self, *args) -> 'bool' + | is_used_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from simple_graph_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | colored_gdl_edges + | simple_graph_t_colored_gdl_edges_get(self) -> bool + | + | title + | simple_graph_t_title_get(self) -> qstring * + +Help on class mblock_t in module ida_hexrays: + +class mblock_t(builtins.object) + | Proxy of C++ mblock_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mblock_t(...) + | delete_mblock_t(self) + | + | _print(self, *args) -> 'void' + | _print(self, vp) + | + | append_def_list(self, *args) -> 'void' + | append_def_list(self, list, op, maymust) + | + | append_use_list(self, *args) -> 'void' + | append_use_list(self, list, op, maymust, mask=bitrange_t(0, USHRT_MAX)) + | + | build_def_list(self, *args) -> 'mlist_t' + | build_def_list(self, ins, maymust) -> mlist_t + | + | build_lists(self, *args) -> 'int' + | build_lists(self, kill_deads) -> int + | + | build_use_list(self, *args) -> 'mlist_t' + | build_use_list(self, ins, maymust) -> mlist_t + | + | dump(self, *args) -> 'void' + | dump(self) + | + | dump_block(self, *args) -> 'void' + | dump_block(self, title) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | find_access(self, *args) -> 'minsn_t *' + | find_access(self, op, parent, mend, fdflags) -> minsn_t + | + | find_def(self, *args) -> 'minsn_t *' + | find_def(self, op, p_i1, i2, fdflags) -> minsn_t + | + | find_first_use(self, *args) -> 'minsn_t *' + | find_first_use(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t + | + | find_redefinition(self, *args) -> 'minsn_t *' + | find_redefinition(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t + | + | find_use(self, *args) -> 'minsn_t *' + | find_use(self, op, p_i1, i2, fdflags) -> minsn_t + | + | for_all_insns(self, *args) -> 'int' + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv) -> int + | + | for_all_uses(self, *args) -> 'int' + | for_all_uses(self, list, i1, i2, mmv) -> int + | + | get_reginsn_qty(self, *args) -> 'size_t' + | get_reginsn_qty(self) -> size_t + | + | get_valranges(self, *args) -> 'bool' + | get_valranges(self, res, vivl, vrflags) -> bool + | get_valranges(self, res, vivl, m, vrflags) -> bool + | + | insert_into_block(self, *args) -> 'minsn_t *' + | insert_into_block(self, nm, om) -> minsn_t + | + | is_branch(self, *args) -> 'bool' + | is_branch(self) -> bool + | + | is_call_block(self, *args) -> 'bool' + | is_call_block(self) -> bool + | + | is_nway(self, *args) -> 'bool' + | is_nway(self) -> bool + | + | is_redefined(self, *args) -> 'bool' + | is_redefined(self, list, i1, i2, maymust=MAY_ACCESS) -> bool + | + | is_rhs_redefined(self, *args) -> 'bool' + | is_rhs_redefined(self, ins, i1, i2) -> bool + | + | is_simple_goto_block(self, *args) -> 'bool' + | is_simple_goto_block(self) -> bool + | + | is_simple_jcnd_block(self, *args) -> 'bool' + | is_simple_jcnd_block(self) -> bool + | + | is_unknown_call(self, *args) -> 'bool' + | is_unknown_call(self) -> bool + | + | is_used(self, *args) -> 'bool' + | is_used(self, list, i1, i2, maymust=MAY_ACCESS) -> bool + | + | lists_dirty(self, *args) -> 'bool' + | lists_dirty(self) -> bool + | + | lists_ready(self, *args) -> 'bool' + | lists_ready(self) -> bool + | + | make_lists_ready(self, *args) -> 'int' + | make_lists_ready(self) -> int + | + | make_nop(self, *args) -> 'void' + | make_nop(self, m) + | + | mark_lists_dirty(self, *args) -> 'void' + | mark_lists_dirty(self) + | + | needs_propagation(self, *args) -> 'bool' + | needs_propagation(self) -> bool + | + | npred(self, *args) -> 'int' + | npred(self) -> int + | + | nsucc(self, *args) -> 'int' + | nsucc(self) -> int + | + | optimize_block(self, *args) -> 'int' + | optimize_block(self) -> int + | + | optimize_insn(self, *args) -> 'int' + | optimize_insn(self, m, optflags=0x0002|0x0004) -> int + | + | optimize_useless_jump(self, *args) -> 'int' + | optimize_useless_jump(self) -> int + | + | pred(self, *args) -> 'int' + | pred(self, n) -> int + | + | preds(self) + | Iterates the list of predecessor blocks + | + | remove_from_block(self, *args) -> 'minsn_t *' + | remove_from_block(self, m) -> minsn_t + | + | request_demote64(self, *args) -> 'void' + | request_demote64(self) + | + | request_propagation(self, *args) -> 'void' + | request_propagation(self) + | + | succ(self, *args) -> 'int' + | succ(self, n) -> int + | + | succs(self) + | Iterates the list of successor blocks + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dead_at_start + | mblock_t_dead_at_start_get(self) -> mlist_t + | + | dnu + | mblock_t_dnu_get(self) -> mlist_t + | + | end + | mblock_t_end_get(self) -> ea_t + | + | flags + | mblock_t_flags_get(self) -> uint32 + | + | head + | mblock_t_head_get(self) -> minsn_t + | + | maxbsp + | mblock_t_maxbsp_get(self) -> sval_t + | + | maybdef + | mblock_t_maybdef_get(self) -> mlist_t + | + | maybuse + | mblock_t_maybuse_get(self) -> mlist_t + | + | mba + | mblock_t_mba_get(self) -> mbl_array_t + | + | minbargref + | mblock_t_minbargref_get(self) -> sval_t + | + | minbstkref + | mblock_t_minbstkref_get(self) -> sval_t + | + | mustbdef + | mblock_t_mustbdef_get(self) -> mlist_t + | + | mustbuse + | mblock_t_mustbuse_get(self) -> mlist_t + | + | nextb + | mblock_t_nextb_get(self) -> mblock_t + | + | predset + | mblock_t_predset_get(self) -> intvec_t + | + | prevb + | mblock_t_prevb_get(self) -> mblock_t + | + | serial + | mblock_t_serial_get(self) -> int + | + | start + | mblock_t_start_get(self) -> ea_t + | + | succset + | mblock_t_succset_get(self) -> intvec_t + | + | tail + | mblock_t_tail_get(self) -> minsn_t + | + | thisown + | The membership flag + | + | type + | mblock_t_type_get(self) -> mblock_type_t + +Help on class mcallarg_t in module ida_hexrays: + +class mcallarg_t(mop_t) + | Proxy of C++ mcallarg_t class. + | + | Method resolution order: + | mcallarg_t + | mop_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mcallarg_t + | __init__(self, rarg) -> mcallarg_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mcallarg_t(...) + | delete_mcallarg_t(self) + | + | _print(self, *args) -> 'void' + | _print(self, shins_flags=0x04|0x02) + | + | copy_mop(self, *args) -> 'void' + | copy_mop(self, op) + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | make_int(self, *args) -> 'void' + | make_int(self, val, val_ea, opno=0) + | + | make_uint(self, *args) -> 'void' + | make_uint(self, val, val_ea, opno=0) + | + | set_regarg(self, *args) -> 'void' + | set_regarg(self, mr, sz, tif) + | set_regarg(self, mr, tif) + | set_regarg(self, mr, dt, sign=type_unsigned) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | argloc + | mcallarg_t_argloc_get(self) -> argloc_t + | + | ea + | mcallarg_t_ea_get(self) -> ea_t + | + | name + | mcallarg_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | mcallarg_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Methods inherited from mop_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, rop) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, rop) -> bool + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) -> 'mop_addr_t *' + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) -> 'int' + | _get_b(self) -> int + | + | _get_c(self, *args) -> 'mcases_t *' + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) -> 'char const *' + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) -> 'minsn_t *' + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) -> 'mcallinfo_t *' + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) -> 'fnumber_t *' + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) -> 'ea_t' + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) -> 'char const *' + | _get_helper(self) -> char const * + | + | _get_l(self, *args) -> 'lvar_ref_t *' + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) -> 'mnumber_t *' + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) -> 'mop_pair_t *' + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) -> 'mreg_t' + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) -> 'stkvar_ref_t *' + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) -> 'scif_t *' + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) -> 'mopt_t' + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) -> 'void' + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) -> 'void' + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) -> 'void' + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) -> 'void' + | _make_gvar(self, ea) + | + | _make_insn(self, *args) -> 'void' + | _make_insn(self, ins) + | + | _make_lvar(self, *args) -> 'void' + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) -> 'void' + | _make_pair(self, _pair) + | + | _make_reg(self, *args) -> 'void' + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) -> 'void' + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) -> 'void' + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _set_a(self, *args) -> 'void' + | _set_a(self, _v) + | + | _set_b(self, *args) -> 'void' + | _set_b(self, _v) + | + | _set_c(self, *args) -> 'void' + | _set_c(self, _v) + | + | _set_cstr(self, *args) -> 'void' + | _set_cstr(self, _v) + | + | _set_d(self, *args) -> 'void' + | _set_d(self, _v) + | + | _set_f(self, *args) -> 'void' + | _set_f(self, _v) + | + | _set_fpc(self, *args) -> 'void' + | _set_fpc(self, _v) + | + | _set_g(self, *args) -> 'void' + | _set_g(self, _v) + | + | _set_helper(self, *args) -> 'void' + | _set_helper(self, _v) + | + | _set_l(self, *args) -> 'void' + | _set_l(self, _v) + | + | _set_nnn(self, *args) -> 'void' + | _set_nnn(self, _v) + | + | _set_pair(self, *args) -> 'void' + | _set_pair(self, _v) + | + | _set_r(self, *args) -> 'void' + | _set_r(self, _v) + | + | _set_s(self, *args) -> 'void' + | _set_s(self, _v) + | + | _set_scif(self, *args) -> 'void' + | _set_scif(self, _v) + | + | _set_t(self, *args) -> 'void' + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) -> 'void' + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) -> 'void' + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) -> 'void' + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) -> 'mop_t &' + | assign(self, rop) -> mop_t + | + | change_size(self, *args) -> 'bool' + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) -> 'void' + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) -> 'bool' + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) -> 'bool' + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) -> 'void' + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) -> 'void' + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) -> 'bool' + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | equal_mops(self, *args) -> 'bool' + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) -> 'void' + | erase(self) + | + | erase_but_keep_size(self, *args) -> 'void' + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) -> 'int' + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) -> 'minsn_t *' + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) -> 'bool' + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) -> 'bool' + | is01(self) -> bool + | + | is_arglist(self, *args) -> 'bool' + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) -> 'bool' + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) -> 'bool' + | is_cc(self) -> bool + | + | is_ccflags(self, *args) -> 'bool' + | is_ccflags(self) -> bool + | + | is_constant(self, *args) -> 'bool' + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) -> 'bool' + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) -> 'bool' + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) -> 'bool' + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) -> 'bool' + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) -> 'bool' + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) -> 'bool' + | is_kreg(self) -> bool + | + | is_mob(self, *args) -> 'bool' + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) -> 'bool' + | is_negative_constant(self) -> bool + | + | is_one(self, *args) -> 'bool' + | is_one(self) -> bool + | + | is_positive_constant(self, *args) -> 'bool' + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) -> 'bool' + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) -> 'bool' + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) -> 'bool' + | is_udt(self) -> bool + | + | is_undef_val(self, *args) -> 'bool' + | is_undef_val(self) -> bool + | + | is_zero(self, *args) -> 'bool' + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) -> 'bool' + | is_zero_extended_from(self, nbytes) -> bool + | + | lexcompare(self, *args) -> 'int' + | lexcompare(self, rop) -> int + | + | make_blkref(self, *args) -> 'void' + | make_blkref(self, blknum) + | + | make_first_half(self, *args) -> 'bool' + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) -> 'bool' + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) -> 'void' + | make_gvar(self, ea) + | + | make_helper(self, *args) -> 'void' + | make_helper(self, name) + | + | make_high_half(self, *args) -> 'bool' + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) -> 'void' + | make_insn(self, ins) + | + | make_low_half(self, *args) -> 'bool' + | make_low_half(self, width) -> bool + | + | make_number(self, *args) -> 'void' + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) -> 'void' + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) -> 'void' + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) -> 'bool' + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) -> 'bool' + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) -> 'bool' + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) -> 'bool' + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) -> 'void' + | set_impptr_done(self) + | + | set_udt(self, *args) -> 'void' + | set_udt(self) + | + | set_undef_val(self, *args) -> 'void' + | set_undef_val(self) + | + | shift_mop(self, *args) -> 'bool' + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) -> 'int64' + | signed_value(self) -> int64 + | + | swap(self, *args) -> 'void' + | swap(self, rop) + | + | unsigned_value(self, *args) -> 'uint64' + | unsigned_value(self) -> uint64 + | + | value(self, *args) -> 'uint64' + | value(self, is_signed) -> uint64 + | + | zero(self, *args) -> 'void' + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from mop_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | valnum + | mop_t_valnum_get(self) -> uint16 + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from mop_t: + | + | __hash__ = None + +Help on class mcallargs_t in module ida_hexrays: + +class mcallargs_t(builtins.object) + | Proxy of C++ qvector< mcallarg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'mcallarg_t const &' + | __getitem__(self, i) -> mcallarg_t + | + | __init__(self, *args) + | __init__(self) -> mcallargs_t + | __init__(self, x) -> mcallargs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_mcallargs_t(...) + | delete_mcallargs_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'mcallarg_t const &' + | at(self, _idx) -> mcallarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< mcallarg_t >::const_iterator' + | begin(self) -> mcallarg_t + | begin(self) -> mcallarg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< mcallarg_t >::const_iterator' + | end(self) -> mcallarg_t + | end(self) -> mcallarg_t + | + | erase(self, *args) -> 'qvector< mcallarg_t >::iterator' + | erase(self, it) -> mcallarg_t + | erase(self, first, last) -> mcallarg_t + | + | extract(self, *args) -> 'mcallarg_t *' + | extract(self) -> mcallarg_t + | + | find(self, *args) -> 'qvector< mcallarg_t >::const_iterator' + | find(self, x) -> mcallarg_t + | find(self, x) -> mcallarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=mcallarg_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< mcallarg_t >::iterator' + | insert(self, it, x) -> mcallarg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'mcallarg_t &' + | push_back(self, x) + | push_back(self) -> mcallarg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class mcallinfo_t in module ida_hexrays: + +class mcallinfo_t(builtins.object) + | Proxy of C++ mcallinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _callee=BADADDR, _sargs=0) -> mcallinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mcallinfo_t(...) + | delete_mcallinfo_t(self) + | + | _print(self, *args) -> 'void' + | _print(self, size=-1, shins_flags=0x04|0x02) + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | get_type(self, *args) -> 'tinfo_t' + | get_type(self) -> tinfo_t + | + | is_vararg(self, *args) -> 'bool' + | is_vararg(self) -> bool + | + | lexcompare(self, *args) -> 'int' + | lexcompare(self, f) -> int + | + | set_type(self, *args) -> 'bool' + | set_type(self, type) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | args + | mcallinfo_t_args_get(self) -> mcallargs_t + | + | call_spd + | mcallinfo_t_call_spd_get(self) -> int + | + | callee + | mcallinfo_t_callee_get(self) -> ea_t + | + | cc + | mcallinfo_t_cc_get(self) -> cm_t + | + | dead_regs + | mcallinfo_t_dead_regs_get(self) -> mlist_t + | + | flags + | mcallinfo_t_flags_get(self) -> int + | + | fti_attrs + | mcallinfo_t_fti_attrs_get(self) -> type_attrs_t + | + | pass_regs + | mcallinfo_t_pass_regs_get(self) -> mlist_t + | + | retregs + | mcallinfo_t_retregs_get(self) -> mopvec_t + | + | return_argloc + | mcallinfo_t_return_argloc_get(self) -> argloc_t + | + | return_regs + | mcallinfo_t_return_regs_get(self) -> mlist_t + | + | return_type + | mcallinfo_t_return_type_get(self) -> tinfo_t + | + | role + | mcallinfo_t_role_get(self) -> funcrole_t + | + | solid_args + | mcallinfo_t_solid_args_get(self) -> int + | + | spoiled + | mcallinfo_t_spoiled_get(self) -> mlist_t + | + | stkargs_top + | mcallinfo_t_stkargs_top_get(self) -> int + | + | thisown + | The membership flag + | + | visible_memory + | mcallinfo_t_visible_memory_get(self) -> ivlset_t + +Help on class mcases_t in module ida_hexrays: + +class mcases_t(builtins.object) + | Proxy of C++ mcases_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> mcases_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mcases_t(...) + | delete_mcases_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | resize(self, *args) -> 'void' + | resize(self, s) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | targets + | mcases_t_targets_get(self) -> intvec_t + | + | thisown + | The membership flag + | + | values + | mcases_t_values_get(self) -> casevec_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function mcode_modifies_d in module ida_hexrays: + +mcode_modifies_d(*args) -> 'bool' + mcode_modifies_d(mcode) -> bool + +Help on class microcode_filter_t in module ida_hexrays: + +class microcode_filter_t(builtins.object) + | Proxy of C++ microcode_filter_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> microcode_filter_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_microcode_filter_t(...) + | delete_microcode_filter_t(self) + | + | apply(self, *args) -> 'merror_t' + | apply(self, cdg) -> merror_t + | + | match(self, *args) -> 'bool' + | match(self, cdg) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on class minsn_t in module ida_hexrays: + +class minsn_t(builtins.object) + | Proxy of C++ minsn_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _ea) -> minsn_t + | __init__(self, m) -> minsn_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, ri) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_minsn_t(...) + | delete_minsn_t(self) + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _make_nop(self, *args) -> 'void' + | _make_nop(self) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _minsn_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _minsn_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) -> 'void' + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | clr_assert(self, *args) -> 'void' + | clr_assert(self) + | + | clr_combinable(self, *args) -> 'void' + | clr_combinable(self) + | + | clr_combined(self, *args) -> 'void' + | clr_combined(self) + | + | clr_fpinsn(self, *args) -> 'void' + | clr_fpinsn(self) + | + | clr_ignlowsrc(self, *args) -> 'void' + | clr_ignlowsrc(self) + | + | clr_multimov(self, *args) -> 'void' + | clr_multimov(self) + | + | clr_noret_icall(self, *args) -> 'void' + | clr_noret_icall(self) + | + | clr_propagatable(self, *args) -> 'void' + | clr_propagatable(self) + | + | clr_tailcall(self, *args) -> 'void' + | clr_tailcall(self) + | + | contains_call(self, *args) -> 'bool' + | contains_call(self, with_helpers=False) -> bool + | + | contains_opcode(self, *args) -> 'bool' + | contains_opcode(self, mcode) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | equal_insns(self, *args) -> 'bool' + | equal_insns(self, m, eqflags) -> bool + | + | find_call(self, *args) -> 'minsn_t *' + | find_call(self, with_helpers=False) -> minsn_t + | + | find_ins_op(self, *args) -> 'minsn_t *' + | find_ins_op(self, op=m_nop) -> minsn_t + | + | find_num_op(self, *args) -> 'mop_t *' + | find_num_op(self) -> mop_t + | + | find_opcode(self, *args) -> 'minsn_t *' + | find_opcode(self, mcode) -> minsn_t + | find_opcode(self, mcode) -> minsn_t + | + | for_all_insns(self, *args) -> 'int' + | for_all_insns(self, mv) -> int + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv) -> int + | + | get_role(self, *args) -> 'funcrole_t' + | get_role(self) -> funcrole_t + | + | get_split_size(self, *args) -> 'int' + | get_split_size(self) -> int + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is_after(self, *args) -> 'bool' + | is_after(self, m) -> bool + | + | is_alloca(self, *args) -> 'bool' + | is_alloca(self) -> bool + | + | is_assert(self, *args) -> 'bool' + | is_assert(self) -> bool + | + | is_between(self, *args) -> 'bool' + | is_between(self, m1, m2) -> bool + | + | is_bswap(self, *args) -> 'bool' + | is_bswap(self) -> bool + | + | is_cleaning_pop(self, *args) -> 'bool' + | is_cleaning_pop(self) -> bool + | + | is_combinable(self, *args) -> 'bool' + | is_combinable(self) -> bool + | + | is_combined(self, *args) -> 'bool' + | is_combined(self) -> bool + | + | is_extstx(self, *args) -> 'bool' + | is_extstx(self) -> bool + | + | is_farcall(self, *args) -> 'bool' + | is_farcall(self) -> bool + | + | is_fpinsn(self, *args) -> 'bool' + | is_fpinsn(self) -> bool + | + | is_helper(self, *args) -> 'bool' + | is_helper(self, name) -> bool + | + | is_ignlowsrc(self, *args) -> 'bool' + | is_ignlowsrc(self) -> bool + | + | is_inverted_jx(self, *args) -> 'bool' + | is_inverted_jx(self) -> bool + | + | is_like_move(self, *args) -> 'bool' + | is_like_move(self) -> bool + | + | is_mbarrier(self, *args) -> 'bool' + | is_mbarrier(self) -> bool + | + | is_memcpy(self, *args) -> 'bool' + | is_memcpy(self) -> bool + | + | is_memset(self, *args) -> 'bool' + | is_memset(self) -> bool + | + | is_mov(self, *args) -> 'bool' + | is_mov(self) -> bool + | + | is_multimov(self, *args) -> 'bool' + | is_multimov(self) -> bool + | + | is_noret_call(self, *args) -> 'bool' + | is_noret_call(self, ignore_noret_icall=False) -> bool + | + | is_optional(self, *args) -> 'bool' + | is_optional(self) -> bool + | + | is_persistent(self, *args) -> 'bool' + | is_persistent(self) -> bool + | + | is_propagatable(self, *args) -> 'bool' + | is_propagatable(self) -> bool + | + | is_readflags(self, *args) -> 'bool' + | is_readflags(self) -> bool + | + | is_tailcall(self, *args) -> 'bool' + | is_tailcall(self) -> bool + | + | is_unknown_call(self, *args) -> 'bool' + | is_unknown_call(self) -> bool + | + | is_wild_match(self, *args) -> 'bool' + | is_wild_match(self) -> bool + | + | lexcompare(self, *args) -> 'int' + | lexcompare(self, ri) -> int + | + | may_use_aliased_memory(self, *args) -> 'bool' + | may_use_aliased_memory(self) -> bool + | + | modifes_d(self, *args) -> 'bool' + | modifes_d(self) -> bool + | + | modifies_pair_mop(self, *args) -> 'bool' + | modifies_pair_mop(self) -> bool + | + | optimize_solo(self, *args) -> 'int' + | optimize_solo(self, optflags=0) -> int + | + | optimize_subtree(self, *args) -> 'int' + | optimize_subtree(self, blk, top, parent, converted_call, optflags=0x0002) -> int + | + | replace_by(self, o) + | + | set_assert(self, *args) -> 'void' + | set_assert(self) + | + | set_cleaning_pop(self, *args) -> 'void' + | set_cleaning_pop(self) + | + | set_combinable(self, *args) -> 'void' + | set_combinable(self) + | + | set_extstx(self, *args) -> 'void' + | set_extstx(self) + | + | set_farcall(self, *args) -> 'void' + | set_farcall(self) + | + | set_fpinsn(self, *args) -> 'void' + | set_fpinsn(self) + | + | set_ignlowsrc(self, *args) -> 'void' + | set_ignlowsrc(self) + | + | set_inverted_jx(self, *args) -> 'void' + | set_inverted_jx(self) + | + | set_mbarrier(self, *args) -> 'void' + | set_mbarrier(self) + | + | set_multimov(self, *args) -> 'void' + | set_multimov(self) + | + | set_noret_icall(self, *args) -> 'void' + | set_noret_icall(self) + | + | set_optional(self, *args) -> 'void' + | set_optional(self) + | + | set_persistent(self, *args) -> 'void' + | set_persistent(self) + | + | set_split_size(self, *args) -> 'void' + | set_split_size(self, s) + | + | set_tailcall(self, *args) -> 'void' + | set_tailcall(self) + | + | set_wild_match(self, *args) -> 'void' + | set_wild_match(self) + | + | setaddr(self, *args) -> 'void' + | setaddr(self, new_ea) + | + | swap(self, *args) -> 'void' + | swap(self, m) + | + | was_noret_icall(self, *args) -> 'bool' + | was_noret_icall(self) -> bool + | + | was_split(self, *args) -> 'bool' + | was_split(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | d + | minsn_t_d_get(self) -> mop_t + | + | ea + | minsn_t_ea_get(self) -> ea_t + | + | iprops + | minsn_t_iprops_get(self) -> int + | + | l + | minsn_t_l_get(self) -> mop_t + | + | meminfo + | + | next + | minsn_t_next_get(self) -> minsn_t + | + | obj_id + | _obj_id(self) -> PyObject * + | + | opcode + | minsn_t_opcode_get(self) -> mcode_t + | + | prev + | minsn_t_prev_get(self) -> minsn_t + | + | r + | minsn_t_r_get(self) -> mop_t + | + | thisown + | The membership flag + +Help on class minsn_visitor_t in module ida_hexrays: + +class minsn_visitor_t(op_parent_info_t) + | Proxy of C++ minsn_visitor_t class. + | + | Method resolution order: + | minsn_visitor_t + | op_parent_info_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> minsn_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_minsn_visitor_t(...) + | delete_minsn_visitor_t(self) + | + | visit_minsn(self, *args) -> 'int' + | visit_minsn(self) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from op_parent_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + +Help on class mlist_mop_visitor_t in module ida_hexrays: + +class mlist_mop_visitor_t(builtins.object) + | Proxy of C++ mlist_mop_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> mlist_mop_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mlist_mop_visitor_t(...) + | delete_mlist_mop_visitor_t(self) + | + | visit_mop(self, *args) -> 'int' + | visit_mop(self, op) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | changed + | mlist_mop_visitor_t_changed_get(self) -> bool + | + | curins + | mlist_mop_visitor_t_curins_get(self) -> minsn_t + | + | list + | mlist_mop_visitor_t_list_get(self) -> mlist_t + | + | thisown + | The membership flag + | + | topins + | mlist_mop_visitor_t_topins_get(self) -> minsn_t + +Help on class mlist_t in module ida_hexrays: + +class mlist_t(builtins.object) + | Proxy of C++ mlist_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> mlist_t + | __init__(self, ivl) -> mlist_t + | __init__(self, r, size) -> mlist_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mlist_t(...) + | delete_mlist_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | add(self, *args) -> 'bool' + | add(self, r, size) -> bool + | add(self, r) -> bool + | add(self, ivl) -> bool + | add(self, lst) -> bool + | + | addmem(self, *args) -> 'bool' + | addmem(self, ea, size) -> bool + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | count(self, *args) -> 'asize_t' + | count(self) -> asize_t + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | has(self, *args) -> 'bool' + | has(self, r) -> bool + | + | has_all(self, *args) -> 'bool' + | has_all(self, r, size) -> bool + | + | has_any(self, *args) -> 'bool' + | has_any(self, r, size) -> bool + | + | has_common(self, *args) -> 'bool' + | has_common(self, lst) -> bool + | + | has_memory(self, *args) -> 'bool' + | has_memory(self) -> bool + | + | includes(self, *args) -> 'bool' + | includes(self, lst) -> bool + | + | intersect(self, *args) -> 'bool' + | intersect(self, lst) -> bool + | + | is_subset_of(self, *args) -> 'bool' + | is_subset_of(self, lst) -> bool + | + | sub(self, *args) -> 'bool' + | sub(self, r, size) -> bool + | sub(self, ivl) -> bool + | sub(self, lst) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | mem + | mlist_t_mem_get(self) -> ivlset_t + | + | reg + | mlist_t_reg_get(self) -> rlist_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class mnumber_t in module ida_hexrays: + +class mnumber_t(operand_locator_t) + | Proxy of C++ mnumber_t class. + | + | Method resolution order: + | mnumber_t + | operand_locator_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, v, _ea=BADADDR, n=0) -> mnumber_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mnumber_t(...) + | delete_mnumber_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | update_value(self, *args) -> 'void' + | update_value(self, val64) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | org_value + | mnumber_t_org_value_get(self) -> uint64 + | + | thisown + | The membership flag + | + | value + | mnumber_t_value_get(self) -> uint64 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from operand_locator_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | operand_locator_t_ea_get(self) -> ea_t + | + | opnum + | operand_locator_t_opnum_get(self) -> int + +Help on function modify_user_lvar_info in module ida_hexrays: + +modify_user_lvar_info(*args) -> 'bool' + modify_user_lvar_info(func_ea, mli_flags, info) -> bool + + + Modify saved local variable settings. + + @param func_ea (C++: ea_t) + @param mli_flags: bits that specify which attrs defined by INFO are to + be set (C++: uint) + @param info: local variable info attrs (C++: const lvar_saved_info_t + &) + @return: true if modified, false if invalid MLI_FLAGS passed + +Help on function modify_user_lvars in module ida_hexrays: + +modify_user_lvars(*args) -> 'bool' + modify_user_lvars(entry_ea, mlv) -> bool + + + Modify saved local variable settings. + + @param entry_ea: function start address (C++: ea_t) + @param mlv: local variable modifier (C++: user_lvar_modifier_t &) + @return: true if modified variables + +Help on class mop_addr_t in module ida_hexrays: + +class mop_addr_t(mop_t) + | Proxy of C++ mop_addr_t class. + | + | Method resolution order: + | mop_addr_t + | mop_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mop_addr_t + | __init__(self, ra) -> mop_addr_t + | __init__(self, ra, isz, osz) -> mop_addr_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mop_addr_t(...) + | delete_mop_addr_t(self) + | + | lexcompare(self, *args) -> 'int' + | lexcompare(self, ra) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | insize + | mop_addr_t_insize_get(self) -> int + | + | outsize + | mop_addr_t_outsize_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from mop_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, rop) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, rop) -> bool + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) -> 'mop_addr_t *' + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) -> 'int' + | _get_b(self) -> int + | + | _get_c(self, *args) -> 'mcases_t *' + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) -> 'char const *' + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) -> 'minsn_t *' + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) -> 'mcallinfo_t *' + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) -> 'fnumber_t *' + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) -> 'ea_t' + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) -> 'char const *' + | _get_helper(self) -> char const * + | + | _get_l(self, *args) -> 'lvar_ref_t *' + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) -> 'mnumber_t *' + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) -> 'mop_pair_t *' + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) -> 'mreg_t' + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) -> 'stkvar_ref_t *' + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) -> 'scif_t *' + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) -> 'mopt_t' + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) -> 'void' + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) -> 'void' + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) -> 'void' + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) -> 'void' + | _make_gvar(self, ea) + | + | _make_insn(self, *args) -> 'void' + | _make_insn(self, ins) + | + | _make_lvar(self, *args) -> 'void' + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) -> 'void' + | _make_pair(self, _pair) + | + | _make_reg(self, *args) -> 'void' + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) -> 'void' + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) -> 'void' + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) -> 'void' + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _set_a(self, *args) -> 'void' + | _set_a(self, _v) + | + | _set_b(self, *args) -> 'void' + | _set_b(self, _v) + | + | _set_c(self, *args) -> 'void' + | _set_c(self, _v) + | + | _set_cstr(self, *args) -> 'void' + | _set_cstr(self, _v) + | + | _set_d(self, *args) -> 'void' + | _set_d(self, _v) + | + | _set_f(self, *args) -> 'void' + | _set_f(self, _v) + | + | _set_fpc(self, *args) -> 'void' + | _set_fpc(self, _v) + | + | _set_g(self, *args) -> 'void' + | _set_g(self, _v) + | + | _set_helper(self, *args) -> 'void' + | _set_helper(self, _v) + | + | _set_l(self, *args) -> 'void' + | _set_l(self, _v) + | + | _set_nnn(self, *args) -> 'void' + | _set_nnn(self, _v) + | + | _set_pair(self, *args) -> 'void' + | _set_pair(self, _v) + | + | _set_r(self, *args) -> 'void' + | _set_r(self, _v) + | + | _set_s(self, *args) -> 'void' + | _set_s(self, _v) + | + | _set_scif(self, *args) -> 'void' + | _set_scif(self, _v) + | + | _set_t(self, *args) -> 'void' + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) -> 'void' + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) -> 'void' + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) -> 'void' + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) -> 'mop_t &' + | assign(self, rop) -> mop_t + | + | change_size(self, *args) -> 'bool' + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) -> 'void' + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) -> 'bool' + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) -> 'bool' + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) -> 'void' + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) -> 'void' + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) -> 'bool' + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | equal_mops(self, *args) -> 'bool' + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) -> 'void' + | erase(self) + | + | erase_but_keep_size(self, *args) -> 'void' + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) -> 'int' + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) -> 'minsn_t *' + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) -> 'bool' + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) -> 'bool' + | is01(self) -> bool + | + | is_arglist(self, *args) -> 'bool' + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) -> 'bool' + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) -> 'bool' + | is_cc(self) -> bool + | + | is_ccflags(self, *args) -> 'bool' + | is_ccflags(self) -> bool + | + | is_constant(self, *args) -> 'bool' + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) -> 'bool' + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) -> 'bool' + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) -> 'bool' + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) -> 'bool' + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) -> 'bool' + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) -> 'bool' + | is_kreg(self) -> bool + | + | is_mob(self, *args) -> 'bool' + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) -> 'bool' + | is_negative_constant(self) -> bool + | + | is_one(self, *args) -> 'bool' + | is_one(self) -> bool + | + | is_positive_constant(self, *args) -> 'bool' + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) -> 'bool' + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) -> 'bool' + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) -> 'bool' + | is_udt(self) -> bool + | + | is_undef_val(self, *args) -> 'bool' + | is_undef_val(self) -> bool + | + | is_zero(self, *args) -> 'bool' + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) -> 'bool' + | is_zero_extended_from(self, nbytes) -> bool + | + | make_blkref(self, *args) -> 'void' + | make_blkref(self, blknum) + | + | make_first_half(self, *args) -> 'bool' + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) -> 'bool' + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) -> 'void' + | make_gvar(self, ea) + | + | make_helper(self, *args) -> 'void' + | make_helper(self, name) + | + | make_high_half(self, *args) -> 'bool' + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) -> 'void' + | make_insn(self, ins) + | + | make_low_half(self, *args) -> 'bool' + | make_low_half(self, width) -> bool + | + | make_number(self, *args) -> 'void' + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) -> 'void' + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) -> 'void' + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) -> 'bool' + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) -> 'bool' + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) -> 'bool' + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) -> 'bool' + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) -> 'void' + | set_impptr_done(self) + | + | set_udt(self, *args) -> 'void' + | set_udt(self) + | + | set_undef_val(self, *args) -> 'void' + | set_undef_val(self) + | + | shift_mop(self, *args) -> 'bool' + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) -> 'int64' + | signed_value(self) -> int64 + | + | swap(self, *args) -> 'void' + | swap(self, rop) + | + | unsigned_value(self, *args) -> 'uint64' + | unsigned_value(self) -> uint64 + | + | value(self, *args) -> 'uint64' + | value(self, is_signed) -> uint64 + | + | zero(self, *args) -> 'void' + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from mop_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | valnum + | mop_t_valnum_get(self) -> uint16 + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from mop_t: + | + | __hash__ = None + +Help on class mop_pair_t in module ida_hexrays: + +class mop_pair_t(builtins.object) + | Proxy of C++ mop_pair_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> mop_pair_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mop_pair_t(...) + | delete_mop_pair_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hop + | mop_pair_t_hop_get(self) -> mop_t + | + | lop + | mop_pair_t_lop_get(self) -> mop_t + | + | thisown + | The membership flag + +Help on class mop_t in module ida_hexrays: + +class mop_t(builtins.object) + | Proxy of C++ mop_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, rop) -> bool + | + | __init__(self, *args) + | __init__(self) -> mop_t + | __init__(self, rop) -> mop_t + | __init__(self, _r, _s) -> mop_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, rop) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, rop) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mop_t(...) + | delete_mop_t(self) + | + | _acquire_ownership(self, v, acquire) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _ensure_cond(self, ok, cond_str) + | + | _ensure_no_obj(self, o, attr, attr_is_acquired) + | + | _ensure_no_t(self) + | + | _get_a(self, *args) -> 'mop_addr_t *' + | _get_a(self) -> mop_addr_t + | + | _get_b(self, *args) -> 'int' + | _get_b(self) -> int + | + | _get_c(self, *args) -> 'mcases_t *' + | _get_c(self) -> mcases_t + | + | _get_cstr(self, *args) -> 'char const *' + | _get_cstr(self) -> char const * + | + | _get_d(self, *args) -> 'minsn_t *' + | _get_d(self) -> minsn_t + | + | _get_f(self, *args) -> 'mcallinfo_t *' + | _get_f(self) -> mcallinfo_t + | + | _get_fpc(self, *args) -> 'fnumber_t *' + | _get_fpc(self) -> fnumber_t + | + | _get_g(self, *args) -> 'ea_t' + | _get_g(self) -> ea_t + | + | _get_helper(self, *args) -> 'char const *' + | _get_helper(self) -> char const * + | + | _get_l(self, *args) -> 'lvar_ref_t *' + | _get_l(self) -> lvar_ref_t + | + | _get_nnn(self, *args) -> 'mnumber_t *' + | _get_nnn(self) -> mnumber_t + | + | _get_pair(self, *args) -> 'mop_pair_t *' + | _get_pair(self) -> mop_pair_t + | + | _get_r(self, *args) -> 'mreg_t' + | _get_r(self) -> mreg_t + | + | _get_s(self, *args) -> 'stkvar_ref_t *' + | _get_s(self) -> stkvar_ref_t + | + | _get_scif(self, *args) -> 'scif_t *' + | _get_scif(self) -> scif_t + | + | _get_t(self, *args) -> 'mopt_t' + | _get_t(self) -> mopt_t + | + | _make_blkref(self, *args) -> 'void' + | _make_blkref(self, blknum) + | + | _make_callinfo(self, *args) -> 'void' + | _make_callinfo(self, fi) + | + | _make_cases(self, *args) -> 'void' + | _make_cases(self, _cases) + | + | _make_gvar(self, *args) -> 'void' + | _make_gvar(self, ea) + | + | _make_insn(self, *args) -> 'void' + | _make_insn(self, ins) + | + | _make_lvar(self, *args) -> 'void' + | _make_lvar(self, mba, idx, off=0) + | + | _make_pair(self, *args) -> 'void' + | _make_pair(self, _pair) + | + | _make_reg(self, *args) -> 'void' + | _make_reg(self, reg) + | _make_reg(self, reg, _size) + | + | _make_stkvar(self, *args) -> 'void' + | _make_stkvar(self, mba, off) + | + | _make_strlit(self, *args) -> 'void' + | _make_strlit(self, str) + | + | _maybe_disown_and_deregister(self) + | + | _meminfo(self) + | + | _mop_t__dbg_get_meminfo = __dbg_get_meminfo(self, *args) -> 'qstring' + | __dbg_get_meminfo(self) -> qstring + | + | _mop_t__dbg_get_registered_kind = __dbg_get_registered_kind(self, *args) -> 'int' + | __dbg_get_registered_kind(self) -> int + | + | _obj_id(self, *args) -> 'PyObject *' + | _obj_id(self) -> PyObject * + | + | _own_and_register(self) + | + | _print(self, *args) -> 'void' + | _print(self, shins_flags=0x04|0x02) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | _set_a(self, *args) -> 'void' + | _set_a(self, _v) + | + | _set_b(self, *args) -> 'void' + | _set_b(self, _v) + | + | _set_c(self, *args) -> 'void' + | _set_c(self, _v) + | + | _set_cstr(self, *args) -> 'void' + | _set_cstr(self, _v) + | + | _set_d(self, *args) -> 'void' + | _set_d(self, _v) + | + | _set_f(self, *args) -> 'void' + | _set_f(self, _v) + | + | _set_fpc(self, *args) -> 'void' + | _set_fpc(self, _v) + | + | _set_g(self, *args) -> 'void' + | _set_g(self, _v) + | + | _set_helper(self, *args) -> 'void' + | _set_helper(self, _v) + | + | _set_l(self, *args) -> 'void' + | _set_l(self, _v) + | + | _set_nnn(self, *args) -> 'void' + | _set_nnn(self, _v) + | + | _set_pair(self, *args) -> 'void' + | _set_pair(self, _v) + | + | _set_r(self, *args) -> 'void' + | _set_r(self, _v) + | + | _set_s(self, *args) -> 'void' + | _set_s(self, _v) + | + | _set_scif(self, *args) -> 'void' + | _set_scif(self, _v) + | + | _set_t(self, *args) -> 'void' + | _set_t(self, v) + | + | apply_ld_mcode(self, *args) -> 'void' + | apply_ld_mcode(self, mcode, ea, newsize) + | + | apply_xds(self, *args) -> 'void' + | apply_xds(self, ea, newsize) + | + | apply_xdu(self, *args) -> 'void' + | apply_xdu(self, ea, newsize) + | + | assign(self, *args) -> 'mop_t &' + | assign(self, rop) -> mop_t + | + | change_size(self, *args) -> 'bool' + | change_size(self, nsize, sideff=WITH_SIDEFF) -> bool + | + | create_from_insn(self, *args) -> 'void' + | create_from_insn(self, m) + | + | create_from_ivlset(self, *args) -> 'bool' + | create_from_ivlset(self, mba, ivs, fullsize) -> bool + | + | create_from_mlist(self, *args) -> 'bool' + | create_from_mlist(self, mba, lst, fullsize) -> bool + | + | create_from_scattered_vdloc(self, *args) -> 'void' + | create_from_scattered_vdloc(self, mba, name, type, loc) + | + | create_from_vdloc(self, *args) -> 'void' + | create_from_vdloc(self, mba, loc, _size) + | + | double_size(self, *args) -> 'bool' + | double_size(self, sideff=WITH_SIDEFF) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | equal_mops(self, *args) -> 'bool' + | equal_mops(self, rop, eqflags) -> bool + | + | erase(self, *args) -> 'void' + | erase(self) + | + | erase_but_keep_size(self, *args) -> 'void' + | erase_but_keep_size(self) + | + | for_all_ops(self, *args) -> 'int' + | for_all_ops(self, mv, type=None, is_target=False) -> int + | + | for_all_scattered_submops(self, *args) -> 'int' + | for_all_scattered_submops(self, sv) -> int + | + | get_insn(self, *args) -> 'minsn_t *' + | get_insn(self, code) -> minsn_t + | get_insn(self, code) -> minsn_t + | + | get_stkoff(self, *args) -> 'bool' + | get_stkoff(self, p_off) -> bool + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, p_off) -> member_t * + | + | has_side_effects(self, *args) -> 'bool' + | has_side_effects(self, include_ldx_and_divs=False) -> bool + | + | is01(self, *args) -> 'bool' + | is01(self) -> bool + | + | is_arglist(self, *args) -> 'bool' + | is_arglist(self) -> bool + | + | is_bit_reg(self, *args) -> 'bool' + | is_bit_reg(self, reg) -> bool + | is_bit_reg(self) -> bool + | + | is_cc(self, *args) -> 'bool' + | is_cc(self) -> bool + | + | is_ccflags(self, *args) -> 'bool' + | is_ccflags(self) -> bool + | + | is_constant(self, *args) -> 'bool' + | is_constant(self, is_signed=True) -> bool + | + | is_equal_to(self, *args) -> 'bool' + | is_equal_to(self, n, is_signed=True) -> bool + | + | is_extended_from(self, *args) -> 'bool' + | is_extended_from(self, nbytes, is_signed) -> bool + | + | is_glbaddr(self, *args) -> 'bool' + | is_glbaddr(self) -> bool + | is_glbaddr(self, ea) -> bool + | + | is_impptr_done(self, *args) -> 'bool' + | is_impptr_done(self) -> bool + | + | is_insn(self, *args) -> 'bool' + | is_insn(self) -> bool + | is_insn(self, code) -> bool + | + | is_kreg(self, *args) -> 'bool' + | is_kreg(self) -> bool + | + | is_mob(self, *args) -> 'bool' + | is_mob(self, serial) -> bool + | + | is_negative_constant(self, *args) -> 'bool' + | is_negative_constant(self) -> bool + | + | is_one(self, *args) -> 'bool' + | is_one(self) -> bool + | + | is_positive_constant(self, *args) -> 'bool' + | is_positive_constant(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | is_reg(self, _r) -> bool + | is_reg(self, _r, _size) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_sign_extended_from(self, *args) -> 'bool' + | is_sign_extended_from(self, nbytes) -> bool + | + | is_stkaddr(self, *args) -> 'bool' + | is_stkaddr(self) -> bool + | + | is_udt(self, *args) -> 'bool' + | is_udt(self) -> bool + | + | is_undef_val(self, *args) -> 'bool' + | is_undef_val(self) -> bool + | + | is_zero(self, *args) -> 'bool' + | is_zero(self) -> bool + | + | is_zero_extended_from(self, *args) -> 'bool' + | is_zero_extended_from(self, nbytes) -> bool + | + | lexcompare(self, *args) -> 'int' + | lexcompare(self, rop) -> int + | + | make_blkref(self, *args) -> 'void' + | make_blkref(self, blknum) + | + | make_first_half(self, *args) -> 'bool' + | make_first_half(self, width) -> bool + | + | make_fpnum(self, *args) -> 'bool' + | make_fpnum(self, bytes, _size) -> bool + | + | make_gvar(self, *args) -> 'void' + | make_gvar(self, ea) + | + | make_helper(self, *args) -> 'void' + | make_helper(self, name) + | + | make_high_half(self, *args) -> 'bool' + | make_high_half(self, width) -> bool + | + | make_insn(self, *args) -> 'void' + | make_insn(self, ins) + | + | make_low_half(self, *args) -> 'bool' + | make_low_half(self, width) -> bool + | + | make_number(self, *args) -> 'void' + | make_number(self, _value, _size, _ea=BADADDR, opnum=0) + | + | make_reg(self, *args) -> 'void' + | make_reg(self, reg) + | make_reg(self, reg, _size) + | + | make_reg_pair(self, *args) -> 'void' + | make_reg_pair(self, loreg, hireg, halfsize) + | + | make_second_half(self, *args) -> 'bool' + | make_second_half(self, width) -> bool + | + | may_use_aliased_memory(self, *args) -> 'bool' + | may_use_aliased_memory(self) -> bool + | + | preserve_side_effects(self, *args) -> 'bool' + | preserve_side_effects(self, blk, top, moved_calls=None) -> bool + | + | probably_floating(self, *args) -> 'bool' + | probably_floating(self) -> bool + | + | replace_by(self, o) + | + | set_impptr_done(self, *args) -> 'void' + | set_impptr_done(self) + | + | set_udt(self, *args) -> 'void' + | set_udt(self) + | + | set_undef_val(self, *args) -> 'void' + | set_undef_val(self) + | + | shift_mop(self, *args) -> 'bool' + | shift_mop(self, offset) -> bool + | + | signed_value(self, *args) -> 'int64' + | signed_value(self) -> int64 + | + | swap(self, *args) -> 'void' + | swap(self, rop) + | + | unsigned_value(self, *args) -> 'uint64' + | unsigned_value(self) -> uint64 + | + | value(self, *args) -> 'uint64' + | value(self, is_signed) -> uint64 + | + | zero(self, *args) -> 'void' + | zero(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a + | + | b + | + | c + | + | cstr + | + | d + | + | f + | + | fpc + | + | g + | + | helper + | + | l + | + | meminfo + | + | nnn + | + | obj_id + | _obj_id(self) -> PyObject * + | + | oprops + | mop_t_oprops_get(self) -> uint8 + | + | pair + | + | r + | + | s + | + | scif + | + | size + | mop_t_size_get(self) -> int + | + | t + | _get_t(self) -> mopt_t + | + | thisown + | The membership flag + | + | valnum + | mop_t_valnum_get(self) -> uint16 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class mop_visitor_t in module ida_hexrays: + +class mop_visitor_t(op_parent_info_t) + | Proxy of C++ mop_visitor_t class. + | + | Method resolution order: + | mop_visitor_t + | op_parent_info_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> mop_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_mop_visitor_t(...) + | delete_mop_visitor_t(self) + | + | visit_mop(self, *args) -> 'int' + | visit_mop(self, op, type, is_target) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | prune + | mop_visitor_t_prune_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from op_parent_info_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + +Help on class mopvec_t in module ida_hexrays: + +class mopvec_t(builtins.object) + | Proxy of C++ qvector< mop_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'mop_t const &' + | __getitem__(self, i) -> mop_t + | + | __init__(self, *args) + | __init__(self) -> mopvec_t + | __init__(self, x) -> mopvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_mopvec_t(...) + | delete_mopvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'mop_t const &' + | at(self, _idx) -> mop_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< mop_t >::const_iterator' + | begin(self) -> mop_t + | begin(self) -> mop_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< mop_t >::const_iterator' + | end(self) -> mop_t + | end(self) -> mop_t + | + | erase(self, *args) -> 'qvector< mop_t >::iterator' + | erase(self, it) -> mop_t + | erase(self, first, last) -> mop_t + | + | extract(self, *args) -> 'mop_t *' + | extract(self) -> mop_t + | + | find(self, *args) -> 'qvector< mop_t >::const_iterator' + | find(self, x) -> mop_t + | find(self, x) -> mop_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=mop_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< mop_t >::iterator' + | insert(self, it, x) -> mop_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'mop_t &' + | push_back(self, x) + | push_back(self) -> mop_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function mreg2reg in module ida_hexrays: + +mreg2reg(*args) -> 'int' + mreg2reg(reg, width) -> int + + + Map a microregister to a processor register. + + @param reg: microregister number (C++: mreg_t) + @param width: size of microregister in bytes (C++: int) + @return: processor register id or -1 + +Help on function must_mcode_close_block in module ida_hexrays: + +must_mcode_close_block(*args) -> 'bool' + must_mcode_close_block(mcode, including_calls) -> bool + + + Must an instruction with the given opcode be the last one in a block? + Such opcodes are called closing opcodes. + + @param mcode: instruction opcode (C++: mcode_t) + @param including_calls: should m_call/m_icall be considered as the + closing opcodes? If this function returns + true, the opcode cannot appear in the middle + of a block. Calls are a special case because + before MMAT_CALLS they are closing opcodes. + Afteer MMAT_CALLS that are not considered as + closing opcodes. (C++: bool) + +Help on function negate_mcode_relation in module ida_hexrays: + +negate_mcode_relation(*args) -> 'mcode_t' + negate_mcode_relation(code) -> mcode_t + +Help on function negated_relation in module ida_hexrays: + +negated_relation(*args) -> 'ctype_t' + negated_relation(op) -> ctype_t + + + Negate a comparison operator. For example, cot_sge becomes cot_slt. + + + @param op (C++: ctype_t) + +Help on function new_block in module ida_hexrays: + +new_block() + +Help on class number_format_t in module ida_hexrays: + +class number_format_t(builtins.object) + | Proxy of C++ number_format_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _opnum=0) -> number_format_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_number_format_t(...) + | delete_number_format_t(self) + | + | get_radix(self, *args) -> 'int' + | get_radix(self) -> int + | + | is_char(self, *args) -> 'bool' + | is_char(self) -> bool + | + | is_dec(self, *args) -> 'bool' + | is_dec(self) -> bool + | + | is_enum(self, *args) -> 'bool' + | is_enum(self) -> bool + | + | is_fixed(self, *args) -> 'bool' + | is_fixed(self) -> bool + | + | is_hex(self, *args) -> 'bool' + | is_hex(self) -> bool + | + | is_numop(self, *args) -> 'bool' + | is_numop(self) -> bool + | + | is_oct(self, *args) -> 'bool' + | is_oct(self) -> bool + | + | is_stroff(self, *args) -> 'bool' + | is_stroff(self) -> bool + | + | needs_to_be_inverted(self, *args) -> 'bool' + | needs_to_be_inverted(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | number_format_t_flags_get(self) -> flags_t + | + | opnum + | number_format_t_opnum_get(self) -> char + | + | org_nbytes + | number_format_t_org_nbytes_get(self) -> char + | + | props + | number_format_t_props_get(self) -> char + | + | serial + | number_format_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | type_name + | number_format_t_type_name_get(self) -> qstring * + +Help on class op_parent_info_t in module ida_hexrays: + +class op_parent_info_t(builtins.object) + | Proxy of C++ op_parent_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _mba=None, _blk=None, _topins=None) -> op_parent_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_op_parent_info_t(...) + | delete_op_parent_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | blk + | op_parent_info_t_blk_get(self) -> mblock_t + | + | curins + | op_parent_info_t_curins_get(self) -> minsn_t + | + | mba + | op_parent_info_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + | + | topins + | op_parent_info_t_topins_get(self) -> minsn_t + +Help on function op_uses_x in module ida_hexrays: + +op_uses_x(*args) -> 'bool' + op_uses_x(op) -> bool + + + Does operator use the 'x' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function op_uses_y in module ida_hexrays: + +op_uses_y(*args) -> 'bool' + op_uses_y(op) -> bool + + + Does operator use the 'y' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function op_uses_z in module ida_hexrays: + +op_uses_z(*args) -> 'bool' + op_uses_z(op) -> bool + + + Does operator use the 'z' field of 'cexpr_t' ? + + + @param op (C++: ctype_t) + +Help on function open_pseudocode in module ida_hexrays: + +open_pseudocode(*args) -> 'vdui_t *' + open_pseudocode(ea, new_window) -> vdui_t + + + Open pseudocode window. The specified function is decompiled and the + pseudocode window is opened. + + @param ea: function to decompile (C++: ea_t) + @param new_window: 0:reuse existing window; 1:open new window; -1: + reuse existing window if the current view is + pseudocode (C++: int) + @return: false if failed + +Help on class operand_locator_t in module ida_hexrays: + +class operand_locator_t(builtins.object) + | Proxy of C++ operand_locator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _ea, _opnum) -> operand_locator_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_operand_locator_t(...) + | delete_operand_locator_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | operand_locator_t_ea_get(self) -> ea_t + | + | opnum + | operand_locator_t_opnum_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class operator_info_t in module ida_hexrays: + +class operator_info_t(builtins.object) + | Proxy of C++ operator_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> operator_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_operator_info_t(...) + | delete_operator_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fixtype + | operator_info_t_fixtype_get(self) -> uchar + | + | flags + | operator_info_t_flags_get(self) -> uchar + | + | precedence + | operator_info_t_precedence_get(self) -> uchar + | + | text + | operator_info_t_text_get(self) -> char const * + | + | thisown + | The membership flag + | + | valency + | operator_info_t_valency_get(self) -> uchar + +Help on class optblock_t in module ida_hexrays: + +class optblock_t(builtins.object) + | Proxy of C++ optblock_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> optblock_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_optblock_t(...) + | delete_optblock_t(self) + | + | func(self, *args) -> 'int' + | func(self, blk) -> int + | + | install(self, *args) -> 'void' + | install(self) + | + | remove(self, *args) -> 'bool' + | remove(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on class optinsn_t in module ida_hexrays: + +class optinsn_t(builtins.object) + | Proxy of C++ optinsn_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> optinsn_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_optinsn_t(...) + | delete_optinsn_t(self) + | + | func(self, *args) -> 'int' + | func(self, blk, ins) -> int + | + | install(self, *args) -> 'void' + | install(self) + | + | remove(self, *args) -> 'bool' + | remove(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function parse_user_call in module ida_hexrays: + +parse_user_call(*args) -> 'bool' + parse_user_call(udc, decl, silent) -> bool + + + Convert function type declaration into internal structure + + @param udc: - pointer to output structure (C++: udcall_t *) + @param decl: - function type declaration (C++: const char *) + @param silent: - if TRUE: do not show warning in case of incorrect + type (C++: bool) + @return: success + +Help on function partial_type_num in module ida_hexrays: + +partial_type_num(*args) -> 'int' + partial_type_num(type) -> int + + + Calculate number of partial subtypes. + + @param type (C++: const tinfo_t &) + @return: number of partial subtypes. The bigger is this number, the + uglier is the type. + +Help on function print_vdloc in module ida_hexrays: + +print_vdloc(*args) -> 'qstring *' + print_vdloc(loc, nbytes) + + + Print vdloc. Since vdloc does not always carry the size info, we pass + it as NBYTES.. + + @param loc (C++: const vdloc_t &) + @param nbytes (C++: int) + +Help on function property_op_to_typename in module ida_hexrays: + +property_op_to_typename(self) + +Help on class qlist_cinsn_t in module ida_hexrays: + +class qlist_cinsn_t(builtins.object) + | Proxy of C++ qlist< cinsn_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> qlist_cinsn_t + | __init__(self, x) -> qlist_cinsn_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, x) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qlist_cinsn_t(...) + | delete_qlist_cinsn_t(self) + | + | back(self, *args) -> 'cinsn_t const &' + | back(self) -> cinsn_t + | back(self) -> cinsn_t + | + | begin(self, *args) -> 'qlist_cinsn_t_iterator' + | begin(self) -> qlist_cinsn_t_iterator + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qlist_cinsn_t_iterator' + | end(self) -> qlist_cinsn_t_iterator + | + | erase(self, *args) -> 'void' + | erase(self, p) -> qlist< cinsn_t >::iterator + | erase(self, p1, p2) + | erase(self, p) + | + | front(self, *args) -> 'cinsn_t const &' + | front(self) -> cinsn_t + | front(self) -> cinsn_t + | + | insert(self, *args) -> 'qlist_cinsn_t_iterator' + | insert(self, p, x) -> qlist< cinsn_t >::iterator + | insert(self, p) -> qlist< cinsn_t >::iterator + | insert(self, p, x) -> qlist_cinsn_t_iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | pop_front(self, *args) -> 'void' + | pop_front(self) + | + | push_back(self, *args) -> 'cinsn_t &' + | push_back(self, x) + | push_back(self) -> cinsn_t + | + | push_front(self, *args) -> 'void' + | push_front(self, x) + | + | rbegin(self, *args) -> 'qlist< cinsn_t >::const_reverse_iterator' + | rbegin(self) -> qlist< cinsn_t >::reverse_iterator + | rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | rend(self, *args) -> 'qlist< cinsn_t >::const_reverse_iterator' + | rend(self) -> qlist< cinsn_t >::reverse_iterator + | rend(self) -> qlist< cinsn_t >::const_reverse_iterator + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, x) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qlist_cinsn_t_iterator in module ida_hexrays: + +class qlist_cinsn_t_iterator(builtins.object) + | Proxy of C++ qlist_cinsn_t_iterator class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> qlist_cinsn_t_iterator + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, x) -> bool + | + | __next__(self, *args) -> 'void' + | __next__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qlist_cinsn_t_iterator(...) + | delete_qlist_cinsn_t_iterator(self) + | + | next = __next__(self, *args) -> 'void' + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cur + | qlist_cinsn_t_iterator_cur_get(self) -> cinsn_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qstring_printer_t in module ida_hexrays: + +class qstring_printer_t(vc_printer_t) + | Proxy of C++ qstring_printer_t class. + | + | Method resolution order: + | qstring_printer_t + | vc_printer_t + | vd_printer_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, f, tags) -> qstring_printer_t + | + | __repr__ = _swig_repr(self) + | + | _print(self, *args) -> 'int' + | _print(self, indent, format) -> int + | + | get_s(self, *args) -> 'qstring' + | get_s(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | s + | + | thisown + | The membership flag + | + | with_tags + | qstring_printer_t_with_tags_get(self) -> bool + | + | ---------------------------------------------------------------------- + | Methods inherited from vc_printer_t: + | + | __disown__(self) + | + | __swig_destroy__ = delete_vc_printer_t(...) + | delete_vc_printer_t(self) + | + | oneliner(self, *args) -> 'bool' + | oneliner(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vc_printer_t: + | + | func + | vc_printer_t_func_get(self) -> cfunc_t + | + | lastchar + | vc_printer_t_lastchar_get(self) -> char + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_printer_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + +Help on function qswap in module ida_hexrays: + +qswap(*args) -> 'void' + qswap(a, b) + +Help on class qvector_carg_t in module ida_hexrays: + +class qvector_carg_t(builtins.object) + | Proxy of C++ qvector< carg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'carg_t const &' + | __getitem__(self, i) -> carg_t + | + | __init__(self, *args) + | __init__(self) -> qvector_carg_t + | __init__(self, x) -> qvector_carg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_qvector_carg_t(...) + | delete_qvector_carg_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'carg_t &' + | + | at = __getitem__(self, *args) -> 'carg_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< carg_t >::const_iterator' + | begin(self) -> carg_t + | begin(self) -> carg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< carg_t >::const_iterator' + | end(self) -> carg_t + | end(self) -> carg_t + | + | erase(self, *args) -> 'qvector< carg_t >::iterator' + | erase(self, it) -> carg_t + | erase(self, first, last) -> carg_t + | + | extract(self, *args) -> 'carg_t *' + | extract(self) -> carg_t + | + | find(self, *args) -> 'qvector< carg_t >::const_iterator' + | find(self, x) -> carg_t + | find(self, x) -> carg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=carg_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< carg_t >::iterator' + | insert(self, it, x) -> carg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'carg_t &' + | push_back(self, x) + | push_back(self) -> carg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qvector_ccase_t in module ida_hexrays: + +class qvector_ccase_t(builtins.object) + | Proxy of C++ qvector< ccase_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'ccase_t const &' + | __getitem__(self, i) -> ccase_t + | + | __init__(self, *args) + | __init__(self) -> qvector_ccase_t + | __init__(self, x) -> qvector_ccase_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_qvector_ccase_t(...) + | delete_qvector_ccase_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'ccase_t &' + | + | at = __getitem__(self, *args) -> 'ccase_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< ccase_t >::const_iterator' + | begin(self) -> ccase_t + | begin(self) -> ccase_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< ccase_t >::const_iterator' + | end(self) -> ccase_t + | end(self) -> ccase_t + | + | erase(self, *args) -> 'qvector< ccase_t >::iterator' + | erase(self, it) -> ccase_t + | erase(self, first, last) -> ccase_t + | + | extract(self, *args) -> 'ccase_t *' + | extract(self) -> ccase_t + | + | find(self, *args) -> 'qvector< ccase_t >::const_iterator' + | find(self, x) -> ccase_t + | find(self, x) -> ccase_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=ccase_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< ccase_t >::iterator' + | insert(self, it, x) -> ccase_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'ccase_t &' + | push_back(self, x) + | push_back(self) -> ccase_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qvector_history_t in module ida_hexrays: + +class qvector_history_t(builtins.object) + | Proxy of C++ qvector< history_item_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'history_item_t const &' + | __getitem__(self, i) -> history_item_t + | + | __init__(self, *args) + | __init__(self) -> qvector_history_t + | __init__(self, x) -> qvector_history_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_qvector_history_t(...) + | delete_qvector_history_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'history_item_t const &' + | at(self, _idx) -> history_item_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< history_item_t >::const_iterator' + | begin(self) -> history_item_t + | begin(self) -> history_item_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< history_item_t >::const_iterator' + | end(self) -> history_item_t + | end(self) -> history_item_t + | + | erase(self, *args) -> 'qvector< history_item_t >::iterator' + | erase(self, it) -> history_item_t + | erase(self, first, last) -> history_item_t + | + | extract(self, *args) -> 'history_item_t *' + | extract(self) -> history_item_t + | + | find(self, *args) -> 'qvector< history_item_t >::const_iterator' + | find(self, x) -> history_item_t + | find(self, x) -> history_item_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=history_item_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< history_item_t >::iterator' + | insert(self, it, x) -> history_item_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'history_item_t &' + | push_back(self, x) + | push_back(self) -> history_item_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class qvector_lvar_t in module ida_hexrays: + +class qvector_lvar_t(builtins.object) + | Proxy of C++ qvector< lvar_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'lvar_t const &' + | __getitem__(self, i) -> lvar_t + | + | __init__(self, *args) + | __init__(self) -> qvector_lvar_t + | __init__(self, x) -> qvector_lvar_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_qvector_lvar_t(...) + | delete_qvector_lvar_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'lvar_t &' + | + | at = __getitem__(self, *args) -> 'lvar_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< lvar_t >::const_iterator' + | begin(self) -> lvar_t + | begin(self) -> lvar_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< lvar_t >::const_iterator' + | end(self) -> lvar_t + | end(self) -> lvar_t + | + | erase(self, *args) -> 'qvector< lvar_t >::iterator' + | erase(self, it) -> lvar_t + | erase(self, first, last) -> lvar_t + | + | extract(self, *args) -> 'lvar_t *' + | extract(self) -> lvar_t + | + | find(self, *args) -> 'qvector< lvar_t >::const_iterator' + | find(self, x) -> lvar_t + | find(self, x) -> lvar_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=lvar_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< lvar_t >::iterator' + | insert(self, it, x) -> lvar_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'lvar_t &' + | push_back(self, x) + | push_back(self) -> lvar_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function reg2mreg in module ida_hexrays: + +reg2mreg(*args) -> 'mreg_t' + reg2mreg(reg) -> mreg_t + + + Map a processor register to a microregister. + + @param reg: processor register number (C++: int) + @return: microregister register id or mr_none + +Help on function remitem in module ida_hexrays: + +remitem(*args) -> 'void' + remitem(e) + +Help on function remove_hexrays_callback in module ida_hexrays: + +remove_hexrays_callback(callback) + Deprecated. Please use Hexrays_Hooks instead + +Help on function restore_user_cmts in module ida_hexrays: + +restore_user_cmts(*args) -> 'user_cmts_t *' + restore_user_cmts(func_ea) -> user_cmts_t + + + Restore user defined comments from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined comments. The returned object must + be deleted by the caller using delete_user_cmts() + +Help on function restore_user_defined_calls in module ida_hexrays: + +restore_user_defined_calls(*args) -> 'bool' + restore_user_defined_calls(udcalls, func_ea) -> bool + + + Restore user defined function calls from the database. + + @param udcalls: ptr to output buffer (C++: udcall_map_t *) + @param func_ea: entry address of the function (C++: ea_t) + @return: success + +Help on function restore_user_iflags in module ida_hexrays: + +restore_user_iflags(*args) -> 'user_iflags_t *' + restore_user_iflags(func_ea) -> user_iflags_t + + + Restore user defined citem iflags from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined iflags. The returned object must + be deleted by the caller using delete_user_iflags() + +Help on function restore_user_labels in module ida_hexrays: + +restore_user_labels(*args) -> 'user_labels_t *' + restore_user_labels(func_ea) -> user_labels_t + + + Restore user defined labels from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined labels. The returned object must + be deleted by the caller using delete_user_labels() + +Help on function restore_user_lvar_settings in module ida_hexrays: + +restore_user_lvar_settings(*args) -> 'bool' + restore_user_lvar_settings(lvinf, func_ea) -> bool + + + Restore user defined local variable settings in the database. + + @param lvinf: ptr to output buffer (C++: lvar_uservec_t *) + @param func_ea: entry address of the function (C++: ea_t) + @return: success + +Help on function restore_user_numforms in module ida_hexrays: + +restore_user_numforms(*args) -> 'user_numforms_t *' + restore_user_numforms(func_ea) -> user_numforms_t + + + Restore user defined number formats from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of user defined number formats. The returned + object must be deleted by the caller using + delete_user_numforms() + +Help on function restore_user_unions in module ida_hexrays: + +restore_user_unions(*args) -> 'user_unions_t *' + restore_user_unions(func_ea) -> user_unions_t + + + Restore user defined union field selections from the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @return: collection of union field selections The returned object must + be deleted by the caller using delete_user_unions() + +Help on class rlist_t in module ida_hexrays: + +class rlist_t(bitset_t) + | Proxy of C++ rlist_t class. + | + | Method resolution order: + | rlist_t + | bitset_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rlist_t + | __init__(self, m) -> rlist_t + | __init__(self, reg, width) -> rlist_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_rlist_t(...) + | delete_rlist_t(self) + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from bitset_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __iter__(self) + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __len__ = count(self, *args) -> 'int' + | count(self) -> int + | count(self, bit) -> int + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | add(self, *args) -> 'bool' + | add(self, bit) -> bool + | add(self, bit, width) -> bool + | add(self, ml) -> bool + | + | back(self, *args) -> 'int' + | back(self) -> int + | + | begin(self, *args) -> 'bitset_t::iterator' + | begin(self) -> bitset_t::iterator + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | copy(self, *args) -> 'bitset_t &' + | copy(self, m) -> bitset_t + | + | count(self, *args) -> 'int' + | count(self) -> int + | count(self, bit) -> int + | + | cut_at(self, *args) -> 'bool' + | cut_at(self, maxbit) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'bitset_t::iterator' + | end(self) -> bitset_t::iterator + | + | fill_with_ones(self, *args) -> 'void' + | fill_with_ones(self, maxbit) + | + | front(self, *args) -> 'int' + | front(self) -> int + | + | has(self, *args) -> 'bool' + | has(self, bit) -> bool + | + | has_all(self, *args) -> 'bool' + | has_all(self, bit, width) -> bool + | + | has_any(self, *args) -> 'bool' + | has_any(self, bit, width) -> bool + | + | has_common(self, *args) -> 'bool' + | has_common(self, ml) -> bool + | + | inc(self, *args) -> 'void' + | inc(self, p, n=1) + | + | includes(self, *args) -> 'bool' + | includes(self, ml) -> bool + | + | intersect(self, *args) -> 'bool' + | intersect(self, ml) -> bool + | + | is_subset_of(self, *args) -> 'bool' + | is_subset_of(self, ml) -> bool + | + | itat(self, *args) -> 'bitset_t::iterator' + | itat(self, n) -> bitset_t::iterator + | + | itv(self, *args) -> 'int' + | itv(self, it) -> int + | + | last(self, *args) -> 'int' + | last(self) -> int + | + | shift_down(self, *args) -> 'void' + | shift_down(self, shift) + | + | sub(self, *args) -> 'bool' + | sub(self, bit) -> bool + | sub(self, bit, width) -> bool + | sub(self, ml) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from bitset_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from bitset_t: + | + | __hash__ = None + +Help on function save_user_cmts in module ida_hexrays: + +save_user_cmts(*args) -> 'void' + save_user_cmts(func_ea, user_cmts) + + + Save user defined comments into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param user_cmts: collection of user defined comments (C++: const + user_cmts_t *) + +Help on function save_user_defined_calls in module ida_hexrays: + +save_user_defined_calls(*args) -> 'void' + save_user_defined_calls(func_ea, udcalls) + + + Save user defined local function calls into the database. + + @param func_ea: entry address of the function (C++: ea_t) + @param udcalls: user-specified info about user defined function calls + (C++: const udcall_map_t &) + +Help on function save_user_iflags in module ida_hexrays: + +save_user_iflags(*args) -> 'void' + save_user_iflags(func_ea, iflags) + + + Save user defined citem iflags into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param iflags: collection of user defined citem iflags (C++: const + user_iflags_t *) + +Help on function save_user_labels in module ida_hexrays: + +save_user_labels(*args) -> 'void' + save_user_labels(func_ea, user_labels) + + + Save user defined labels into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param user_labels: collection of user defined labels (C++: const + user_labels_t *) + +Help on function save_user_lvar_settings in module ida_hexrays: + +save_user_lvar_settings(*args) -> 'void' + save_user_lvar_settings(func_ea, lvinf) + + + Save user defined local variable settings into the database. + + @param func_ea: entry address of the function (C++: ea_t) + @param lvinf: user-specified info about local variables (C++: const + lvar_uservec_t &) + +Help on function save_user_numforms in module ida_hexrays: + +save_user_numforms(*args) -> 'void' + save_user_numforms(func_ea, numforms) + + + Save user defined number formats into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param numforms: collection of user defined comments (C++: const + user_numforms_t *) + +Help on function save_user_unions in module ida_hexrays: + +save_user_unions(*args) -> 'void' + save_user_unions(func_ea, unions) + + + Save user defined union field selections into the database. + + @param func_ea: the entry address of the function (C++: ea_t) + @param unions: collection of union field selections (C++: const + user_unions_t *) + +Help on class scif_t in module ida_hexrays: + +class scif_t(vdloc_t) + | Proxy of C++ scif_t class. + | + | Method resolution order: + | scif_t + | vdloc_t + | ida_typeinf.argloc_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _mba, n, tif) -> scif_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_scif_t(...) + | delete_scif_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | mba + | scif_t_mba_get(self) -> mbl_array_t + | + | name + | scif_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | scif_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Methods inherited from vdloc_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _set_reg1(self, *args) -> 'void' + | _set_reg1(self, r1) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | is_aliasable(self, *args) -> 'bool' + | is_aliasable(self, mb, size) -> bool + | + | reg1(self, *args) -> 'int' + | reg1(self) -> int + | + | set_reg1(self, *args) -> 'void' + | set_reg1(self, r1) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from vdloc_t: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_typeinf.argloc_t: + | + | _consume_rrel(self, *args) -> 'bool' + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) -> 'bool' + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) -> 'void' + | _set_badloc(self) + | + | _set_biggest(self, *args) -> 'void' + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) -> 'void' + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) -> 'void' + | _set_ea(self, _ea) + | + | _set_reg2(self, *args) -> 'void' + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) -> 'void' + | _set_stkoff(self, off) + | + | advance(self, *args) -> 'bool' + | advance(self, delta) -> bool + | + | atype(self, *args) -> 'argloc_type_t' + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) -> 'sval_t' + | calc_offset(self) -> sval_t + | + | consume_rrel(self, *args) -> 'void' + | consume_rrel(self, p) + | + | consume_scattered(self, *args) -> 'void' + | consume_scattered(self, p) + | + | get_biggest(self, *args) -> 'argloc_t::biggest_t' + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) -> 'void *' + | get_custom(self) -> void * + | + | get_ea(self, *args) -> 'ea_t' + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) -> 'uint32' + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) -> 'rrel_t const &' + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) -> 'bool' + | has_reg(self) -> bool + | + | has_stkoff(self, *args) -> 'bool' + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) -> 'bool' + | is_badloc(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_ea(self, *args) -> 'bool' + | is_ea(self) -> bool + | + | is_fragmented(self, *args) -> 'bool' + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) -> 'bool' + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_rrel(self, *args) -> 'bool' + | is_rrel(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) -> 'void' + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) -> 'void' + | justify_stkoff_right(self, size, _slotsize) + | + | reg2(self, *args) -> 'int' + | reg2(self) -> int + | + | regoff(self, *args) -> 'int' + | regoff(self) -> int + | + | scattered(self, *args) -> 'scattered_aloc_t const &' + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) -> 'void' + | set_badloc(self) + | + | set_ea(self, *args) -> 'void' + | set_ea(self, _ea) + | + | set_reg2(self, *args) -> 'void' + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, off) + | + | stkoff(self, *args) -> 'sval_t' + | stkoff(self) -> sval_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_typeinf.argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class scif_visitor_t in module ida_hexrays: + +class scif_visitor_t(builtins.object) + | Proxy of C++ scif_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> scif_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_scif_visitor_t(...) + | delete_scif_visitor_t(self) + | + | visit_scif_mop(self, *args) -> 'int' + | visit_scif_mop(self, r, off) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function select_udt_by_offset in module ida_hexrays: + +select_udt_by_offset(*args) -> 'int' + select_udt_by_offset(udts, ops, applicator) -> int + + + Select UDT + + @param udts: list of UDT tinfo_t for the selection, if NULL or empty + then UDTs from the "Local types" will be used (C++: const + qvector < tinfo_t > *) + @param ops: operands (C++: const ui_stroff_ops_t &) + @param applicator (C++: ui_stroff_applicator_t &) + +Help on function send_database in module ida_hexrays: + +send_database(*args) -> 'void' + send_database(err, silent) + + + Send the database to Hex-Rays. This function sends the current + database to the Hex-Rays server. The database is sent in the + compressed form over an encrypted (SSL) connection. + + @param err: failure description object. Empty hexrays_failure_t + object can be used if error information is not available. + (C++: const hexrays_failure_t &) + @param silent: if false, a dialog box will be displayed before sending + the database. (C++: bool) + +Help on function set2jcnd in module ida_hexrays: + +set2jcnd(*args) -> 'mcode_t' + set2jcnd(code) -> mcode_t + +Help on function set_type in module ida_hexrays: + +set_type(*args) -> 'bool' + set_type(id, tif, source, force=False) -> bool + + + Set a global type. + + @param id: address or id of the object (C++: uval_t) + @param tif: new type info (C++: const tinfo_t &) + @param source: where the type comes from (C++: type_source_t) + @param force: true means to set the type as is, false means to merge + the new type with the possibly existing old type info. + (C++: bool) + @return: success + +Help on class simple_graph_t in module ida_hexrays: + +class simple_graph_t(builtins.object) + | Proxy of C++ simple_graph_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | colored_gdl_edges + | simple_graph_t_colored_gdl_edges_get(self) -> bool + | + | thisown + | The membership flag + | + | title + | simple_graph_t_title_get(self) -> qstring * + +Help on class stkvar_ref_t in module ida_hexrays: + +class stkvar_ref_t(builtins.object) + | Proxy of C++ stkvar_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, m, o) -> stkvar_ref_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_stkvar_ref_t(...) + | delete_stkvar_ref_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, p_off=None) -> member_t * + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | mba + | stkvar_ref_t_mba_get(self) -> mbl_array_t + | + | off + | stkvar_ref_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function swap_mcode_relation in module ida_hexrays: + +swap_mcode_relation(*args) -> 'mcode_t' + swap_mcode_relation(code) -> mcode_t + +Help on function swapped_relation in module ida_hexrays: + +swapped_relation(*args) -> 'ctype_t' + swapped_relation(op) -> ctype_t + + + Swap a comparison operator. For example, cot_sge becomes cot_sle. + + + @param op (C++: ctype_t) + +Help on function term_hexrays_plugin in module ida_hexrays: + +term_hexrays_plugin(*args) -> 'void' + term_hexrays_plugin() + + + Stop working with hex-rays decompiler. + +Help on class treeloc_t in module ida_hexrays: + +class treeloc_t(builtins.object) + | Proxy of C++ treeloc_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> treeloc_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_treeloc_t(...) + | delete_treeloc_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | treeloc_t_ea_get(self) -> ea_t + | + | itp + | treeloc_t_itp_get(self) -> item_preciser_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class udc_filter_t in module ida_hexrays: + +class udc_filter_t(microcode_filter_t) + | Proxy of C++ udc_filter_t class. + | + | Method resolution order: + | udc_filter_t + | microcode_filter_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> udc_filter_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_udc_filter_t(...) + | delete_udc_filter_t(self) + | + | apply(self, *args) -> 'merror_t' + | apply(self, cdg) -> merror_t + | + | init(self, *args) -> 'bool' + | init(self, decl) -> bool + | + | match(self, *args) -> 'bool' + | match(self, cdg) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from microcode_filter_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function udcall_map_begin in module ida_hexrays: + +udcall_map_begin(*args) -> 'udcall_map_iterator_t' + udcall_map_begin(map) -> udcall_map_iterator_t + + + Get iterator pointing to the beginning of udcall_map_t. + + + @param map (C++: const udcall_map_t *) + +Help on function udcall_map_clear in module ida_hexrays: + +udcall_map_clear(*args) -> 'void' + udcall_map_clear(map) + + + Clear udcall_map_t. + + + @param map (C++: udcall_map_t *) + +Help on function udcall_map_end in module ida_hexrays: + +udcall_map_end(*args) -> 'udcall_map_iterator_t' + udcall_map_end(map) -> udcall_map_iterator_t + + + Get iterator pointing to the end of udcall_map_t. + + + @param map (C++: const udcall_map_t *) + +Help on function udcall_map_erase in module ida_hexrays: + +udcall_map_erase(*args) -> 'void' + udcall_map_erase(map, p) + + + Erase current element from udcall_map_t. + + + @param map (C++: udcall_map_t *) + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_find in module ida_hexrays: + +udcall_map_find(*args) -> 'udcall_map_iterator_t' + udcall_map_find(map, key) -> udcall_map_iterator_t + + + Find the specified key in udcall_map_t. + + + @param map (C++: const udcall_map_t *) + @param key (C++: const ea_t &) + +Help on function udcall_map_first in module ida_hexrays: + +udcall_map_first(*args) -> 'ea_t const &' + udcall_map_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_free in module ida_hexrays: + +udcall_map_free(*args) -> 'void' + udcall_map_free(map) + + + Delete udcall_map_t instance. + + + @param map (C++: udcall_map_t *) + +Help on function udcall_map_insert in module ida_hexrays: + +udcall_map_insert(*args) -> 'udcall_map_iterator_t' + udcall_map_insert(map, key, val) -> udcall_map_iterator_t + + + Insert new (ea_t, 'udcall_t' ) pair into udcall_map_t. + + + @param map (C++: udcall_map_t *) + @param key (C++: const ea_t &) + @param val (C++: const udcall_t &) + +Help on class udcall_map_iterator_t in module ida_hexrays: + +class udcall_map_iterator_t(builtins.object) + | Proxy of C++ udcall_map_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> udcall_map_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_udcall_map_iterator_t(...) + | delete_udcall_map_iterator_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 + | + | x + | udcall_map_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function udcall_map_new in module ida_hexrays: + +udcall_map_new(*args) -> 'udcall_map_t *' + udcall_map_new() -> udcall_map_t * + + + Create a new udcall_map_t instance. + +Help on function udcall_map_next in module ida_hexrays: + +udcall_map_next(*args) -> 'udcall_map_iterator_t' + udcall_map_next(p) -> udcall_map_iterator_t + + + Move to the next element. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_prev in module ida_hexrays: + +udcall_map_prev(*args) -> 'udcall_map_iterator_t' + udcall_map_prev(p) -> udcall_map_iterator_t + + + Move to the previous element. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_second in module ida_hexrays: + +udcall_map_second(*args) -> 'udcall_t &' + udcall_map_second(p) -> udcall_t + + + Get reference to the current map value. + + + @param p (C++: udcall_map_iterator_t) + +Help on function udcall_map_size in module ida_hexrays: + +udcall_map_size(*args) -> 'size_t' + udcall_map_size(map) -> size_t + + + Get size of udcall_map_t. + + + @param map (C++: udcall_map_t *) + +Help on class udcall_t in module ida_hexrays: + +class udcall_t(builtins.object) + | Proxy of C++ udcall_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> udcall_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_udcall_t(...) + | delete_udcall_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | udcall_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tif + | udcall_t_tif_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class ui_stroff_applicator_t in module ida_hexrays: + +class ui_stroff_applicator_t(builtins.object) + | Proxy of C++ ui_stroff_applicator_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_applicator_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ui_stroff_applicator_t(...) + | delete_ui_stroff_applicator_t(self) + | + | apply(self, *args) -> 'bool' + | apply(self, opnum, path) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on class ui_stroff_op_t in module ida_hexrays: + +class ui_stroff_op_t(builtins.object) + | Proxy of C++ ui_stroff_op_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_op_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ui_stroff_op_t(...) + | delete_ui_stroff_op_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | offset + | ui_stroff_op_t_offset_get(self) -> uval_t + | + | text + | ui_stroff_op_t_text_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class ui_stroff_ops_t in module ida_hexrays: + +class ui_stroff_ops_t(builtins.object) + | Proxy of C++ qvector< ui_stroff_op_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'ui_stroff_op_t const &' + | __getitem__(self, i) -> ui_stroff_op_t + | + | __init__(self, *args) + | __init__(self) -> ui_stroff_ops_t + | __init__(self, x) -> ui_stroff_ops_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_ui_stroff_ops_t(...) + | delete_ui_stroff_ops_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'ui_stroff_op_t &' + | + | at = __getitem__(self, *args) -> 'ui_stroff_op_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< ui_stroff_op_t >::const_iterator' + | begin(self) -> ui_stroff_op_t + | begin(self) -> ui_stroff_op_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< ui_stroff_op_t >::const_iterator' + | end(self) -> ui_stroff_op_t + | end(self) -> ui_stroff_op_t + | + | erase(self, *args) -> 'qvector< ui_stroff_op_t >::iterator' + | erase(self, it) -> ui_stroff_op_t + | erase(self, first, last) -> ui_stroff_op_t + | + | extract(self, *args) -> 'ui_stroff_op_t *' + | extract(self) -> ui_stroff_op_t + | + | find(self, *args) -> 'qvector< ui_stroff_op_t >::const_iterator' + | find(self, x) -> ui_stroff_op_t + | find(self, x) -> ui_stroff_op_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=ui_stroff_op_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< ui_stroff_op_t >::iterator' + | insert(self, it, x) -> ui_stroff_op_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'ui_stroff_op_t &' + | push_back(self, x) + | push_back(self) -> ui_stroff_op_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_cmts_begin in module ida_hexrays: + +user_cmts_begin(*args) -> 'user_cmts_iterator_t' + user_cmts_begin(map) -> user_cmts_iterator_t + + + Get iterator pointing to the beginning of user_cmts_t. + + + @param map (C++: const user_cmts_t *) + +Help on function user_cmts_clear in module ida_hexrays: + +user_cmts_clear(*args) -> 'void' + user_cmts_clear(map) + + + Clear user_cmts_t. + + + @param map (C++: user_cmts_t *) + +Help on function user_cmts_end in module ida_hexrays: + +user_cmts_end(*args) -> 'user_cmts_iterator_t' + user_cmts_end(map) -> user_cmts_iterator_t + + + Get iterator pointing to the end of user_cmts_t. + + + @param map (C++: const user_cmts_t *) + +Help on function user_cmts_erase in module ida_hexrays: + +user_cmts_erase(*args) -> 'void' + user_cmts_erase(map, p) + + + Erase current element from user_cmts_t. + + + @param map (C++: user_cmts_t *) + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_find in module ida_hexrays: + +user_cmts_find(*args) -> 'user_cmts_iterator_t' + user_cmts_find(map, key) -> user_cmts_iterator_t + + + Find the specified key in user_cmts_t. + + + @param map (C++: const user_cmts_t *) + @param key (C++: const treeloc_t &) + +Help on function user_cmts_first in module ida_hexrays: + +user_cmts_first(*args) -> 'treeloc_t const &' + user_cmts_first(p) -> treeloc_t + + + Get reference to the current map key. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_free in module ida_hexrays: + +user_cmts_free(*args) -> 'void' + user_cmts_free(map) + + + Delete user_cmts_t instance. + + + @param map (C++: user_cmts_t *) + +Help on function user_cmts_insert in module ida_hexrays: + +user_cmts_insert(*args) -> 'user_cmts_iterator_t' + user_cmts_insert(map, key, val) -> user_cmts_iterator_t + + + Insert new ( 'treeloc_t' , 'citem_cmt_t' ) pair into user_cmts_t. + + + @param map (C++: user_cmts_t *) + @param key (C++: const treeloc_t &) + @param val (C++: const citem_cmt_t &) + +Help on class user_cmts_iterator_t in module ida_hexrays: + +class user_cmts_iterator_t(builtins.object) + | Proxy of C++ user_cmts_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_cmts_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_cmts_iterator_t(...) + | delete_user_cmts_iterator_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 + | + | x + | user_cmts_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_cmts_new in module ida_hexrays: + +user_cmts_new(*args) -> 'user_cmts_t *' + user_cmts_new() -> user_cmts_t + + + Create a new user_cmts_t instance. + +Help on function user_cmts_next in module ida_hexrays: + +user_cmts_next(*args) -> 'user_cmts_iterator_t' + user_cmts_next(p) -> user_cmts_iterator_t + + + Move to the next element. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_prev in module ida_hexrays: + +user_cmts_prev(*args) -> 'user_cmts_iterator_t' + user_cmts_prev(p) -> user_cmts_iterator_t + + + Move to the previous element. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_second in module ida_hexrays: + +user_cmts_second(*args) -> 'citem_cmt_t &' + user_cmts_second(p) -> citem_cmt_t + + + Get reference to the current map value. + + + @param p (C++: user_cmts_iterator_t) + +Help on function user_cmts_size in module ida_hexrays: + +user_cmts_size(*args) -> 'size_t' + user_cmts_size(map) -> size_t + + + Get size of user_cmts_t. + + + @param map (C++: user_cmts_t *) + +Help on class user_cmts_t in module ida_hexrays: + +class user_cmts_t(builtins.object) + | Proxy of C++ std::map< treeloc_t,citem_cmt_t > class. + | + | Methods defined here: + | + | __begin = user_cmts_begin(...) + | user_cmts_begin(map) -> user_cmts_iterator_t + | + | __clear = user_cmts_clear(...) + | user_cmts_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = user_cmts_end(...) + | user_cmts_end(map) -> user_cmts_iterator_t + | + | __erase = user_cmts_erase(...) + | user_cmts_erase(map, p) + | + | __find = user_cmts_find(...) + | user_cmts_find(map, key) -> user_cmts_iterator_t + | + | __first = user_cmts_first(...) + | user_cmts_first(p) -> treeloc_t + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_cmts_t + | + | __insert = user_cmts_insert(...) + | user_cmts_insert(map, key, val) -> user_cmts_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = user_cmts_next(...) + | user_cmts_next(p) -> user_cmts_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = user_cmts_second(...) + | user_cmts_second(p) -> citem_cmt_t + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = user_cmts_size(...) + | user_cmts_size(map) -> size_t + | + | __swig_destroy__ = delete_user_cmts_t(...) + | delete_user_cmts_t(self) + | + | at(self, *args) -> 'citem_cmt_t &' + | at(self, _Keyval) -> citem_cmt_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = + | Proxy of C++ treeloc_t class. + | + | valuetype = + | Proxy of C++ citem_cmt_t class. + +Help on function user_iflags_begin in module ida_hexrays: + +user_iflags_begin(*args) -> 'user_iflags_iterator_t' + user_iflags_begin(map) -> user_iflags_iterator_t + + + Get iterator pointing to the beginning of user_iflags_t. + + + @param map (C++: const user_iflags_t *) + +Help on function user_iflags_clear in module ida_hexrays: + +user_iflags_clear(*args) -> 'void' + user_iflags_clear(map) + + + Clear user_iflags_t. + + + @param map (C++: user_iflags_t *) + +Help on function user_iflags_end in module ida_hexrays: + +user_iflags_end(*args) -> 'user_iflags_iterator_t' + user_iflags_end(map) -> user_iflags_iterator_t + + + Get iterator pointing to the end of user_iflags_t. + + + @param map (C++: const user_iflags_t *) + +Help on function user_iflags_erase in module ida_hexrays: + +user_iflags_erase(*args) -> 'void' + user_iflags_erase(map, p) + + + Erase current element from user_iflags_t. + + + @param map (C++: user_iflags_t *) + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_find in module ida_hexrays: + +user_iflags_find(*args) -> 'user_iflags_iterator_t' + user_iflags_find(map, key) -> user_iflags_iterator_t + + + Find the specified key in user_iflags_t. + + + @param map (C++: const user_iflags_t *) + @param key (C++: const citem_locator_t &) + +Help on function user_iflags_first in module ida_hexrays: + +user_iflags_first(*args) -> 'citem_locator_t const &' + user_iflags_first(p) -> citem_locator_t + + + Get reference to the current map key. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_free in module ida_hexrays: + +user_iflags_free(*args) -> 'void' + user_iflags_free(map) + + + Delete user_iflags_t instance. + + + @param map (C++: user_iflags_t *) + +Help on function user_iflags_insert in module ida_hexrays: + +user_iflags_insert(*args) -> 'user_iflags_iterator_t' + user_iflags_insert(map, key, val) -> user_iflags_iterator_t + + + Insert new ( 'citem_locator_t' , int32) pair into user_iflags_t. + + + @param map (C++: user_iflags_t *) + @param key (C++: const citem_locator_t &) + @param val (C++: const int32 &) + +Help on class user_iflags_iterator_t in module ida_hexrays: + +class user_iflags_iterator_t(builtins.object) + | Proxy of C++ user_iflags_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_iflags_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_iflags_iterator_t(...) + | delete_user_iflags_iterator_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 + | + | x + | user_iflags_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_iflags_new in module ida_hexrays: + +user_iflags_new(*args) -> 'user_iflags_t *' + user_iflags_new() -> user_iflags_t + + + Create a new user_iflags_t instance. + +Help on function user_iflags_next in module ida_hexrays: + +user_iflags_next(*args) -> 'user_iflags_iterator_t' + user_iflags_next(p) -> user_iflags_iterator_t + + + Move to the next element. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_prev in module ida_hexrays: + +user_iflags_prev(*args) -> 'user_iflags_iterator_t' + user_iflags_prev(p) -> user_iflags_iterator_t + + + Move to the previous element. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_second in module ida_hexrays: + +user_iflags_second(*args) -> 'int32 const &' + user_iflags_second(p) -> int32 const & + + + Get reference to the current map value. + + + @param p (C++: user_iflags_iterator_t) + +Help on function user_iflags_size in module ida_hexrays: + +user_iflags_size(*args) -> 'size_t' + user_iflags_size(map) -> size_t + + + Get size of user_iflags_t. + + + @param map (C++: user_iflags_t *) + +Help on class user_iflags_t in module ida_hexrays: + +class user_iflags_t(builtins.object) + | Proxy of C++ std::map< citem_locator_t,int32 > class. + | + | Methods defined here: + | + | __begin = user_iflags_begin(...) + | user_iflags_begin(map) -> user_iflags_iterator_t + | + | __clear = user_iflags_clear(...) + | user_iflags_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = user_iflags_end(...) + | user_iflags_end(map) -> user_iflags_iterator_t + | + | __erase = user_iflags_erase(...) + | user_iflags_erase(map, p) + | + | __find = user_iflags_find(...) + | user_iflags_find(map, key) -> user_iflags_iterator_t + | + | __first = user_iflags_first(...) + | user_iflags_first(p) -> citem_locator_t + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_iflags_t + | + | __insert = user_iflags_insert(...) + | user_iflags_insert(map, key, val) -> user_iflags_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = user_iflags_next(...) + | user_iflags_next(p) -> user_iflags_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = user_iflags_second(...) + | user_iflags_second(p) -> int32 const & + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = user_iflags_size(...) + | user_iflags_size(map) -> size_t + | + | __swig_destroy__ = delete_user_iflags_t(...) + | delete_user_iflags_t(self) + | + | at(self, *args) -> 'int &' + | at(self, _Keyval) -> int & + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = + | Proxy of C++ citem_locator_t class. + | + | valuetype = + | int(x=0) -> integer + | int(x, base=10) -> integer + | + | Convert a number or string to an integer, or return 0 if no arguments + | are given. If x is a number, return x.__int__(). For floating point + | numbers, this truncates towards zero. + | + | If x is not a number or if base is given, then x must be a string, + | bytes, or bytearray instance representing an integer literal in the + | given base. The literal can be preceded by '+' or '-' and be surrounded + | by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. + | Base 0 means to interpret the base from the string as an integer literal. + | >>> int('0b100', base=0) + | 4 + +Help on function user_labels_begin in module ida_hexrays: + +user_labels_begin(*args) -> 'user_labels_iterator_t' + user_labels_begin(map) -> user_labels_iterator_t + + + Get iterator pointing to the beginning of user_labels_t. + + + @param map (C++: const user_labels_t *) + +Help on function user_labels_clear in module ida_hexrays: + +user_labels_clear(*args) -> 'void' + user_labels_clear(map) + + + Clear user_labels_t. + + + @param map (C++: user_labels_t *) + +Help on function user_labels_end in module ida_hexrays: + +user_labels_end(*args) -> 'user_labels_iterator_t' + user_labels_end(map) -> user_labels_iterator_t + + + Get iterator pointing to the end of user_labels_t. + + + @param map (C++: const user_labels_t *) + +Help on function user_labels_erase in module ida_hexrays: + +user_labels_erase(*args) -> 'void' + user_labels_erase(map, p) + + + Erase current element from user_labels_t. + + + @param map (C++: user_labels_t *) + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_find in module ida_hexrays: + +user_labels_find(*args) -> 'user_labels_iterator_t' + user_labels_find(map, key) -> user_labels_iterator_t + + + Find the specified key in user_labels_t. + + + @param map (C++: const user_labels_t *) + @param key (C++: const int &) + +Help on function user_labels_first in module ida_hexrays: + +user_labels_first(*args) -> 'int const &' + user_labels_first(p) -> int const & + + + Get reference to the current map key. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_free in module ida_hexrays: + +user_labels_free(*args) -> 'void' + user_labels_free(map) + + + Delete user_labels_t instance. + + + @param map (C++: user_labels_t *) + +Help on function user_labels_insert in module ida_hexrays: + +user_labels_insert(*args) -> 'user_labels_iterator_t' + user_labels_insert(map, key, val) -> user_labels_iterator_t + + + Insert new (int, qstring) pair into user_labels_t. + + + @param map (C++: user_labels_t *) + @param key (C++: const int &) + @param val (C++: const qstring &) + +Help on class user_labels_iterator_t in module ida_hexrays: + +class user_labels_iterator_t(builtins.object) + | Proxy of C++ user_labels_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_labels_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_labels_iterator_t(...) + | delete_user_labels_iterator_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 + | + | x + | user_labels_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_labels_new in module ida_hexrays: + +user_labels_new(*args) -> 'user_labels_t *' + user_labels_new() -> user_labels_t + + + Create a new user_labels_t instance. + +Help on function user_labels_next in module ida_hexrays: + +user_labels_next(*args) -> 'user_labels_iterator_t' + user_labels_next(p) -> user_labels_iterator_t + + + Move to the next element. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_prev in module ida_hexrays: + +user_labels_prev(*args) -> 'user_labels_iterator_t' + user_labels_prev(p) -> user_labels_iterator_t + + + Move to the previous element. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_second in module ida_hexrays: + +user_labels_second(*args) -> 'qstring &' + user_labels_second(p) -> qstring & + + + Get reference to the current map value. + + + @param p (C++: user_labels_iterator_t) + +Help on function user_labels_size in module ida_hexrays: + +user_labels_size(*args) -> 'size_t' + user_labels_size(map) -> size_t + + + Get size of user_labels_t. + + + @param map (C++: user_labels_t *) + +Help on class user_labels_t in module ida_hexrays: + +class user_labels_t(builtins.object) + | Proxy of C++ std::map< int,qstring > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> user_labels_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_labels_t(...) + | delete_user_labels_t(self) + | + | at(self, *args) -> '_qstring< char > &' + | at(self, _Keyval) -> _qstring< char > & + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | 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 + +Help on class user_lvar_modifier_t in module ida_hexrays: + +class user_lvar_modifier_t(builtins.object) + | Proxy of C++ user_lvar_modifier_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> user_lvar_modifier_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_lvar_modifier_t(...) + | delete_user_lvar_modifier_t(self) + | + | modify_lvars(self, *args) -> 'bool' + | modify_lvars(self, lvinf) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function user_numforms_begin in module ida_hexrays: + +user_numforms_begin(*args) -> 'user_numforms_iterator_t' + user_numforms_begin(map) -> user_numforms_iterator_t + + + Get iterator pointing to the beginning of user_numforms_t. + + + @param map (C++: const user_numforms_t *) + +Help on function user_numforms_clear in module ida_hexrays: + +user_numforms_clear(*args) -> 'void' + user_numforms_clear(map) + + + Clear user_numforms_t. + + + @param map (C++: user_numforms_t *) + +Help on function user_numforms_end in module ida_hexrays: + +user_numforms_end(*args) -> 'user_numforms_iterator_t' + user_numforms_end(map) -> user_numforms_iterator_t + + + Get iterator pointing to the end of user_numforms_t. + + + @param map (C++: const user_numforms_t *) + +Help on function user_numforms_erase in module ida_hexrays: + +user_numforms_erase(*args) -> 'void' + user_numforms_erase(map, p) + + + Erase current element from user_numforms_t. + + + @param map (C++: user_numforms_t *) + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_find in module ida_hexrays: + +user_numforms_find(*args) -> 'user_numforms_iterator_t' + user_numforms_find(map, key) -> user_numforms_iterator_t + + + Find the specified key in user_numforms_t. + + + @param map (C++: const user_numforms_t *) + @param key (C++: const operand_locator_t &) + +Help on function user_numforms_first in module ida_hexrays: + +user_numforms_first(*args) -> 'operand_locator_t const &' + user_numforms_first(p) -> operand_locator_t + + + Get reference to the current map key. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_free in module ida_hexrays: + +user_numforms_free(*args) -> 'void' + user_numforms_free(map) + + + Delete user_numforms_t instance. + + + @param map (C++: user_numforms_t *) + +Help on function user_numforms_insert in module ida_hexrays: + +user_numforms_insert(*args) -> 'user_numforms_iterator_t' + user_numforms_insert(map, key, val) -> user_numforms_iterator_t + + + Insert new ( 'operand_locator_t' , 'number_format_t' ) pair into + user_numforms_t. + + + @param map (C++: user_numforms_t *) + @param key (C++: const operand_locator_t &) + @param val (C++: const number_format_t &) + +Help on class user_numforms_iterator_t in module ida_hexrays: + +class user_numforms_iterator_t(builtins.object) + | Proxy of C++ user_numforms_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_numforms_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_numforms_iterator_t(...) + | delete_user_numforms_iterator_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 + | + | x + | user_numforms_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_numforms_new in module ida_hexrays: + +user_numforms_new(*args) -> 'user_numforms_t *' + user_numforms_new() -> user_numforms_t + + + Create a new user_numforms_t instance. + +Help on function user_numforms_next in module ida_hexrays: + +user_numforms_next(*args) -> 'user_numforms_iterator_t' + user_numforms_next(p) -> user_numforms_iterator_t + + + Move to the next element. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_prev in module ida_hexrays: + +user_numforms_prev(*args) -> 'user_numforms_iterator_t' + user_numforms_prev(p) -> user_numforms_iterator_t + + + Move to the previous element. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_second in module ida_hexrays: + +user_numforms_second(*args) -> 'number_format_t &' + user_numforms_second(p) -> number_format_t + + + Get reference to the current map value. + + + @param p (C++: user_numforms_iterator_t) + +Help on function user_numforms_size in module ida_hexrays: + +user_numforms_size(*args) -> 'size_t' + user_numforms_size(map) -> size_t + + + Get size of user_numforms_t. + + + @param map (C++: user_numforms_t *) + +Help on class user_numforms_t in module ida_hexrays: + +class user_numforms_t(builtins.object) + | Proxy of C++ std::map< operand_locator_t,number_format_t > class. + | + | Methods defined here: + | + | __begin = user_numforms_begin(...) + | user_numforms_begin(map) -> user_numforms_iterator_t + | + | __clear = user_numforms_clear(...) + | user_numforms_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = user_numforms_end(...) + | user_numforms_end(map) -> user_numforms_iterator_t + | + | __erase = user_numforms_erase(...) + | user_numforms_erase(map, p) + | + | __find = user_numforms_find(...) + | user_numforms_find(map, key) -> user_numforms_iterator_t + | + | __first = user_numforms_first(...) + | user_numforms_first(p) -> operand_locator_t + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_numforms_t + | + | __insert = user_numforms_insert(...) + | user_numforms_insert(map, key, val) -> user_numforms_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = user_numforms_next(...) + | user_numforms_next(p) -> user_numforms_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = user_numforms_second(...) + | user_numforms_second(p) -> number_format_t + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = user_numforms_size(...) + | user_numforms_size(map) -> size_t + | + | __swig_destroy__ = delete_user_numforms_t(...) + | delete_user_numforms_t(self) + | + | at(self, *args) -> 'number_format_t &' + | at(self, _Keyval) -> number_format_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = + | Proxy of C++ operand_locator_t class. + | + | valuetype = + | Proxy of C++ number_format_t class. + +Help on function user_unions_begin in module ida_hexrays: + +user_unions_begin(*args) -> 'user_unions_iterator_t' + user_unions_begin(map) -> user_unions_iterator_t + + + Get iterator pointing to the beginning of user_unions_t. + + + @param map (C++: const user_unions_t *) + +Help on function user_unions_clear in module ida_hexrays: + +user_unions_clear(*args) -> 'void' + user_unions_clear(map) + + + Clear user_unions_t. + + + @param map (C++: user_unions_t *) + +Help on function user_unions_end in module ida_hexrays: + +user_unions_end(*args) -> 'user_unions_iterator_t' + user_unions_end(map) -> user_unions_iterator_t + + + Get iterator pointing to the end of user_unions_t. + + + @param map (C++: const user_unions_t *) + +Help on function user_unions_erase in module ida_hexrays: + +user_unions_erase(*args) -> 'void' + user_unions_erase(map, p) + + + Erase current element from user_unions_t. + + + @param map (C++: user_unions_t *) + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_find in module ida_hexrays: + +user_unions_find(*args) -> 'user_unions_iterator_t' + user_unions_find(map, key) -> user_unions_iterator_t + + + Find the specified key in user_unions_t. + + + @param map (C++: const user_unions_t *) + @param key (C++: const ea_t &) + +Help on function user_unions_first in module ida_hexrays: + +user_unions_first(*args) -> 'ea_t const &' + user_unions_first(p) -> ea_t const & + + + Get reference to the current map key. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_free in module ida_hexrays: + +user_unions_free(*args) -> 'void' + user_unions_free(map) + + + Delete user_unions_t instance. + + + @param map (C++: user_unions_t *) + +Help on function user_unions_insert in module ida_hexrays: + +user_unions_insert(*args) -> 'user_unions_iterator_t' + user_unions_insert(map, key, val) -> user_unions_iterator_t + + + Insert new (ea_t, intvec_t) pair into user_unions_t. + + + @param map (C++: user_unions_t *) + @param key (C++: const ea_t &) + @param val (C++: const intvec_t &) + +Help on class user_unions_iterator_t in module ida_hexrays: + +class user_unions_iterator_t(builtins.object) + | Proxy of C++ user_unions_iterator_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, p) -> bool + | + | __init__(self, *args) + | __init__(self) -> user_unions_iterator_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, p) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_user_unions_iterator_t(...) + | delete_user_unions_iterator_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 + | + | x + | user_unions_iterator_t_x_get(self) -> iterator_word + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function user_unions_new in module ida_hexrays: + +user_unions_new(*args) -> 'user_unions_t *' + user_unions_new() -> user_unions_t + + + Create a new user_unions_t instance. + +Help on function user_unions_next in module ida_hexrays: + +user_unions_next(*args) -> 'user_unions_iterator_t' + user_unions_next(p) -> user_unions_iterator_t + + + Move to the next element. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_prev in module ida_hexrays: + +user_unions_prev(*args) -> 'user_unions_iterator_t' + user_unions_prev(p) -> user_unions_iterator_t + + + Move to the previous element. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_second in module ida_hexrays: + +user_unions_second(*args) -> 'intvec_t &' + user_unions_second(p) -> intvec_t + + + Get reference to the current map value. + + + @param p (C++: user_unions_iterator_t) + +Help on function user_unions_size in module ida_hexrays: + +user_unions_size(*args) -> 'size_t' + user_unions_size(map) -> size_t + + + Get size of user_unions_t. + + + @param map (C++: user_unions_t *) + +Help on class user_unions_t in module ida_hexrays: + +class user_unions_t(builtins.object) + | Proxy of C++ std::map< ea_t,intvec_t > class. + | + | Methods defined here: + | + | __begin = user_unions_begin(...) + | user_unions_begin(map) -> user_unions_iterator_t + | + | __clear = user_unions_clear(...) + | user_unions_clear(map) + | + | __contains__ = _map___contains__(self, key) + | Returns true if the specified key exists in the . + | + | __delitem__ = _map___delitem__(self, key) + | Removes the value associated with the provided key. + | + | __end = user_unions_end(...) + | user_unions_end(map) -> user_unions_iterator_t + | + | __erase = user_unions_erase(...) + | user_unions_erase(map, p) + | + | __find = user_unions_find(...) + | user_unions_find(map, key) -> user_unions_iterator_t + | + | __first = user_unions_first(...) + | user_unions_first(p) -> ea_t const & + | + | __getitem__ = _map___getitem__(self, key) + | Returns the value associated with the provided key. + | + | __init__(self, *args) + | __init__(self) -> user_unions_t + | + | __insert = user_unions_insert(...) + | user_unions_insert(map, key, val) -> user_unions_iterator_t + | + | __iter__ = _map___iter__(self) + | Iterate over dictionary keys. + | + | __len__ = size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | __next = user_unions_next(...) + | user_unions_next(p) -> user_unions_iterator_t + | + | __repr__ = _swig_repr(self) + | + | __second = user_unions_second(...) + | user_unions_second(p) -> intvec_t + | + | __setitem__ = _map___setitem__(self, key, value) + | Returns the value associated with the provided key. + | + | __size = user_unions_size(...) + | user_unions_size(map) -> size_t + | + | __swig_destroy__ = delete_user_unions_t(...) + | delete_user_unions_t(self) + | + | at(self, *args) -> 'qvector< int > &' + | at(self, _Keyval) -> intvec_t + | + | begin lambda self, *args + | + | clear = _map_clear(self) + | + | copy = _map_copy(self) + | + | end lambda self, *args + | + | erase lambda self, *args + | + | find lambda self, *args + | + | first lambda self, *args + | + | get = _map_get(self, key, default=None) + | + | has_key = _map_has_key(self, key) + | + | insert lambda self, *args + | + | items = _map_items(self) + | + | iteritems = _map_iteritems(self) + | + | iterkeys = _map_iterkeys(self) + | + | itervalues = _map_itervalues(self) + | + | keys = _map_keys(self) + | + | next lambda self, *args + | + | pop = _map_pop(self, key) + | Sets the value associated with the provided key. + | + | popitem = _map_popitem(self) + | Sets the value associated with the provided key. + | + | second lambda self, *args + | + | setdefault = _map_setdefault(self, key, default=None) + | Sets the value associated with the provided key. + | + | size lambda self, *args + | + | values = _map_values(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | keytype = (,) + | + | valuetype = + | Proxy of C++ qvector< int > class. + +Help on class uval_ivl_ivlset_t in module ida_hexrays: + +class uval_ivl_ivlset_t(builtins.object) + | Proxy of C++ ivlset_tpl< ivl_t,uval_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, v) -> bool + | + | __init__(self, *args) + | __init__(self) -> uval_ivl_ivlset_t + | __init__(self, ivl) -> uval_ivl_ivlset_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, v) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_uval_ivl_ivlset_t(...) + | delete_uval_ivl_ivlset_t(self) + | + | all_values(self, *args) -> 'bool' + | all_values(self) -> bool + | + | begin(self, *args) -> 'ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator'↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | begin(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator'↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::const_iterator↗ + | end(self) -> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::iterator↗ + | + | getivl(self, *args) -> 'ivl_t const &' + | getivl(self, idx) -> ivl_t + | + | lastivl(self, *args) -> 'ivl_t const &' + | lastivl(self) -> ivl_t + | + | nivls(self, *args) -> 'size_t' + | nivls(self) -> size_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | set_all_values(self, *args) -> 'void' + | set_all_values(self) + | + | single_value(self, *args) -> 'bool' + | single_value(self, v) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class uval_ivl_t in module ida_hexrays: + +class uval_ivl_t(builtins.object) + | Proxy of C++ ivl_tpl< uval_t > class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _off, _size) -> uval_ivl_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_uval_ivl_t(...) + | delete_uval_ivl_t(self) + | + | end(self, *args) -> 'unsigned-ea-like-numeric-type'↗ + | end(self) -> unsigned-ea-like-numeric-type↗ + | + | last(self, *args) -> 'unsigned-ea-like-numeric-type'↗ + | last(self) -> unsigned-ea-like-numeric-type↗ + | + | valid(self, *args) -> 'bool' + | valid(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type↗ + | + | size + | uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type↗ + | + | thisown + | The membership flag + +Help on class valrng_t in module ida_hexrays: + +class valrng_t(builtins.object) + | Proxy of C++ valrng_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, size_=MAX_VLR_SIZE) -> valrng_t + | __init__(self, r) -> valrng_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_valrng_t(...) + | delete_valrng_t(self) + | + | _deregister(self, *args) -> 'void' + | _deregister(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | _register(self, *args) -> 'void' + | _register(self) + | + | all_values(self, *args) -> 'bool' + | all_values(self) -> bool + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | cvt_to_cmp(self, *args) -> 'bool' + | cvt_to_cmp(self, strict) -> bool + | + | cvt_to_single_value(self, *args) -> 'bool' + | cvt_to_single_value(self) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | get_size(self, *args) -> 'int' + | get_size(self) -> int + | + | has(self, *args) -> 'bool' + | has(self, v) -> bool + | + | intersect_with(self, *args) -> 'bool' + | intersect_with(self, r) -> bool + | + | inverse(self, *args) -> 'void' + | inverse(self) + | + | is_unknown(self, *args) -> 'bool' + | is_unknown(self) -> bool + | + | max_svalue(self, *args) -> 'uvlr_t' + | max_svalue(self, size_) -> uvlr_t + | max_svalue(self) -> uvlr_t + | + | max_value(self, *args) -> 'uvlr_t' + | max_value(self, size_) -> uvlr_t + | max_value(self) -> uvlr_t + | + | min_svalue(self, *args) -> 'uvlr_t' + | min_svalue(self, size_) -> uvlr_t + | min_svalue(self) -> uvlr_t + | + | reduce_size(self, *args) -> 'bool' + | reduce_size(self, new_size) -> bool + | + | set_all(self, *args) -> 'void' + | set_all(self) + | + | set_cmp(self, *args) -> 'void' + | set_cmp(self, cmp, _value) + | + | set_eq(self, *args) -> 'void' + | set_eq(self, v) + | + | set_none(self, *args) -> 'void' + | set_none(self) + | + | set_unk(self, *args) -> 'void' + | set_unk(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | unite_with(self, *args) -> 'bool' + | unite_with(self, r) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class var_ref_t in module ida_hexrays: + +class var_ref_t(builtins.object) + | Proxy of C++ var_ref_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> var_ref_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_var_ref_t(...) + | delete_var_ref_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | idx + | var_ref_t_idx_get(self) -> int + | + | mba + | var_ref_t_mba_get(self) -> mbl_array_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class vc_printer_t in module ida_hexrays: + +class vc_printer_t(vd_printer_t) + | Proxy of C++ vc_printer_t class. + | + | Method resolution order: + | vc_printer_t + | vd_printer_t + | builtins.object + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, f) -> vc_printer_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vc_printer_t(...) + | delete_vc_printer_t(self) + | + | oneliner(self, *args) -> 'bool' + | oneliner(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | func + | vc_printer_t_func_get(self) -> cfunc_t + | + | lastchar + | vc_printer_t_lastchar_get(self) -> char + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from vd_printer_t: + | + | _print(self, *args) -> 'int' + | _print(self, indent, format) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_printer_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + +Help on class vd_failure_t in module ida_hexrays: + +class vd_failure_t(builtins.object) + | Proxy of C++ vd_failure_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> vd_failure_t + | __init__(self, code, ea, buf=None) -> vd_failure_t + | __init__(self, code, ea, buf) -> vd_failure_t + | __init__(self, _hf) -> vd_failure_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vd_failure_t(...) + | delete_vd_failure_t(self) + | + | desc(self, *args) -> 'qstring' + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hf + | vd_failure_t_hf_get(self) -> hexrays_failure_t + | + | thisown + | The membership flag + +Help on class vd_interr_t in module ida_hexrays: + +class vd_interr_t(vd_failure_t) + | Proxy of C++ vd_interr_t class. + | + | Method resolution order: + | vd_interr_t + | vd_failure_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, ea, buf) -> vd_interr_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vd_interr_t(...) + | delete_vd_interr_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from vd_failure_t: + | + | desc(self, *args) -> 'qstring' + | desc(self) -> qstring + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from vd_failure_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hf + | vd_failure_t_hf_get(self) -> hexrays_failure_t + +Help on class vd_printer_t in module ida_hexrays: + +class vd_printer_t(builtins.object) + | Proxy of C++ vd_printer_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> vd_printer_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vd_printer_t(...) + | delete_vd_printer_t(self) + | + | _print(self, *args) -> 'int' + | _print(self, indent, format) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hdrlines + | vd_printer_t_hdrlines_get(self) -> int + | + | thisown + | The membership flag + | + | tmpbuf + | vd_printer_t_tmpbuf_get(self) -> qstring * + +Help on class vdloc_t in module ida_hexrays: + +class vdloc_t(ida_typeinf.argloc_t) + | Proxy of C++ vdloc_t class. + | + | Method resolution order: + | vdloc_t + | ida_typeinf.argloc_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> vdloc_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vdloc_t(...) + | delete_vdloc_t(self) + | + | _set_reg1(self, *args) -> 'void' + | _set_reg1(self, r1) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | is_aliasable(self, *args) -> 'bool' + | is_aliasable(self, mb, size) -> bool + | + | reg1(self, *args) -> 'int' + | reg1(self) -> int + | + | set_reg1(self, *args) -> 'void' + | set_reg1(self, r1) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_typeinf.argloc_t: + | + | _consume_rrel(self, *args) -> 'bool' + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) -> 'bool' + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) -> 'void' + | _set_badloc(self) + | + | _set_biggest(self, *args) -> 'void' + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) -> 'void' + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) -> 'void' + | _set_ea(self, _ea) + | + | _set_reg2(self, *args) -> 'void' + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) -> 'void' + | _set_stkoff(self, off) + | + | advance(self, *args) -> 'bool' + | advance(self, delta) -> bool + | + | atype(self, *args) -> 'argloc_type_t' + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) -> 'sval_t' + | calc_offset(self) -> sval_t + | + | consume_rrel(self, *args) -> 'void' + | consume_rrel(self, p) + | + | consume_scattered(self, *args) -> 'void' + | consume_scattered(self, p) + | + | get_biggest(self, *args) -> 'argloc_t::biggest_t' + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) -> 'void *' + | get_custom(self) -> void * + | + | get_ea(self, *args) -> 'ea_t' + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) -> 'uint32' + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) -> 'rrel_t const &' + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) -> 'bool' + | has_reg(self) -> bool + | + | has_stkoff(self, *args) -> 'bool' + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) -> 'bool' + | is_badloc(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_ea(self, *args) -> 'bool' + | is_ea(self) -> bool + | + | is_fragmented(self, *args) -> 'bool' + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) -> 'bool' + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_rrel(self, *args) -> 'bool' + | is_rrel(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) -> 'void' + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) -> 'void' + | justify_stkoff_right(self, size, _slotsize) + | + | reg2(self, *args) -> 'int' + | reg2(self) -> int + | + | regoff(self, *args) -> 'int' + | regoff(self) -> int + | + | scattered(self, *args) -> 'scattered_aloc_t const &' + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) -> 'void' + | set_badloc(self) + | + | set_ea(self, *args) -> 'void' + | set_ea(self, _ea) + | + | set_reg2(self, *args) -> 'void' + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, off) + | + | stkoff(self, *args) -> 'sval_t' + | stkoff(self) -> sval_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_typeinf.argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class vdui_t in module ida_hexrays: + +class vdui_t(builtins.object) + | Proxy of C++ vdui_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vdui_t(...) + | delete_vdui_t(self) + | + | calc_cmt_type(self, *args) -> 'cmt_type_t' + | calc_cmt_type(self, lnnum, cmttype) -> cmt_type_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | collapse_item(self, *args) -> 'bool' + | collapse_item(self, hide) -> bool + | + | collapse_lvars(self, *args) -> 'bool' + | collapse_lvars(self, hide) -> bool + | + | ctree_to_disasm(self, *args) -> 'bool' + | ctree_to_disasm(self) -> bool + | + | del_orphan_cmts(self, *args) -> 'bool' + | del_orphan_cmts(self) -> bool + | + | edit_cmt(self, *args) -> 'bool' + | edit_cmt(self, loc) -> bool + | + | edit_func_cmt(self, *args) -> 'bool' + | edit_func_cmt(self) -> bool + | + | get_current_item(self, *args) -> 'bool' + | get_current_item(self, idv) -> bool + | + | get_current_label(self, *args) -> 'int' + | get_current_label(self) -> int + | + | get_number(self, *args) -> 'cnumber_t *' + | get_number(self) -> cnumber_t + | + | in_ctree(self, *args) -> 'bool' + | in_ctree(self) -> bool + | + | invert_bits(self, *args) -> 'bool' + | invert_bits(self) -> bool + | + | invert_sign(self, *args) -> 'bool' + | invert_sign(self) -> bool + | + | jump_enter(self, *args) -> 'bool' + | jump_enter(self, idv, omflags) -> bool + | + | locked(self, *args) -> 'bool' + | locked(self) -> bool + | + | map_lvar(self, *args) -> 'bool' + | map_lvar(self, frm, to) -> bool + | + | refresh_cpos(self, *args) -> 'bool' + | refresh_cpos(self, idv) -> bool + | + | refresh_ctext(self, *args) -> 'void' + | refresh_ctext(self, activate=True) + | + | refresh_view(self, *args) -> 'void' + | refresh_view(self, redo_mba) + | + | rename_global(self, *args) -> 'bool' + | rename_global(self, ea) -> bool + | + | rename_label(self, *args) -> 'bool' + | rename_label(self, label) -> bool + | + | rename_lvar(self, *args) -> 'bool' + | rename_lvar(self, v, name, is_user_name) -> bool + | + | rename_strmem(self, *args) -> 'bool' + | rename_strmem(self, sptr, mptr) -> bool + | + | set_global_type(self, *args) -> 'bool' + | set_global_type(self, ea) -> bool + | + | set_locked(self, *args) -> 'bool' + | set_locked(self, v) -> bool + | + | set_lvar_cmt(self, *args) -> 'bool' + | set_lvar_cmt(self, v, cmt) -> bool + | + | set_lvar_type(self, *args) -> 'bool' + | set_lvar_type(self, v, type) -> bool + | + | set_noptr_lvar(self, *args) -> 'bool' + | set_noptr_lvar(self, v) -> bool + | + | set_num_enum(self, *args) -> 'bool' + | set_num_enum(self) -> bool + | + | set_num_radix(self, *args) -> 'bool' + | set_num_radix(self, base) -> bool + | + | set_num_stroff(self, *args) -> 'bool' + | set_num_stroff(self) -> bool + | + | set_strmem_type(self, *args) -> 'bool' + | set_strmem_type(self, sptr, mptr) -> bool + | + | set_valid(self, *args) -> 'void' + | set_valid(self, v) + | + | set_visible(self, *args) -> 'void' + | set_visible(self, v) + | + | split_item(self, *args) -> 'bool' + | split_item(self, split) -> bool + | + | switch_to(self, *args) -> 'void' + | switch_to(self, f, activate) + | + | ui_edit_lvar_cmt(self, *args) -> 'bool' + | ui_edit_lvar_cmt(self, v) -> bool + | + | ui_map_lvar(self, *args) -> 'bool' + | ui_map_lvar(self, v) -> bool + | + | ui_rename_lvar(self, *args) -> 'bool' + | ui_rename_lvar(self, v) -> bool + | + | ui_set_call_type(self, *args) -> 'bool' + | ui_set_call_type(self, e) -> bool + | + | ui_set_lvar_type(self, *args) -> 'bool' + | ui_set_lvar_type(self, v) -> bool + | + | ui_unmap_lvar(self, *args) -> 'bool' + | ui_unmap_lvar(self, v) -> bool + | + | valid(self, *args) -> 'bool' + | valid(self) -> bool + | + | visible(self, *args) -> 'bool' + | visible(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cfunc + | vdui_t_cfunc_get(self) -> cfuncptr_t + | + | cpos + | vdui_t_cpos_get(self) -> ctext_position_t + | + | ct + | vdui_t_ct_get(self) -> TWidget * + | + | flags + | vdui_t_flags_get(self) -> int + | + | head + | vdui_t_head_get(self) -> ctree_item_t + | + | item + | vdui_t_item_get(self) -> ctree_item_t + | + | last_code + | vdui_t_last_code_get(self) -> merror_t + | + | mba + | vdui_t_mba_get(self) -> mbl_array_t + | + | tail + | vdui_t_tail_get(self) -> ctree_item_t + | + | thisown + | The membership flag + | + | toplevel + | vdui_t_toplevel_get(self) -> TWidget * + | + | view_idx + | vdui_t_view_idx_get(self) -> int + +Help on class vivl_t in module ida_hexrays: + +class vivl_t(voff_t) + | Proxy of C++ vivl_t class. + | + | Method resolution order: + | vivl_t + | voff_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | __eq__(self, mop) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _type=mop_z, _off=-1, _size=0) -> vivl_t + | __init__(self, ch) -> vivl_t + | __init__(self, op) -> vivl_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_vivl_t(...) + | delete_vivl_t(self) + | + | _print(self, *args) -> 'void' + | _print(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, voff2) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | extend_to_cover(self, *args) -> 'bool' + | extend_to_cover(self, r) -> bool + | + | includes(self, *args) -> 'bool' + | includes(self, r) -> bool + | + | intersect(self, *args) -> 'uval_t' + | intersect(self, r) -> uval_t + | + | overlap(self, *args) -> 'bool' + | overlap(self, r) -> bool + | + | set(self, *args) -> 'void' + | set(self, _type, _off, _size=0) + | set(self, voff, _size) + | + | set_reg(self, *args) -> 'void' + | set_reg(self, mreg, sz=0) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, stkoff, sz=0) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | size + | vivl_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from voff_t: + | + | add(self, *args) -> 'voff_t' + | add(self, width) -> voff_t + | + | defined(self, *args) -> 'bool' + | defined(self) -> bool + | + | diff(self, *args) -> 'sval_t' + | diff(self, r) -> sval_t + | + | get_reg(self, *args) -> 'mreg_t' + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) -> 'sval_t' + | get_stkoff(self) -> sval_t + | + | inc(self, *args) -> 'void' + | inc(self, delta) + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | undef(self, *args) -> 'void' + | undef(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from voff_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | voff_t_off_get(self) -> sval_t + | + | type + | voff_t_type_get(self) -> mopt_t + +Help on class voff_t in module ida_hexrays: + +class voff_t(builtins.object) + | Proxy of C++ voff_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> voff_t + | __init__(self, _type, _off) -> voff_t + | __init__(self, op) -> voff_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_voff_t(...) + | delete_voff_t(self) + | + | add(self, *args) -> 'voff_t' + | add(self, width) -> voff_t + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | defined(self, *args) -> 'bool' + | defined(self) -> bool + | + | diff(self, *args) -> 'sval_t' + | diff(self, r) -> sval_t + | + | get_reg(self, *args) -> 'mreg_t' + | get_reg(self) -> mreg_t + | + | get_stkoff(self, *args) -> 'sval_t' + | get_stkoff(self) -> sval_t + | + | inc(self, *args) -> 'void' + | inc(self, delta) + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | set(self, *args) -> 'void' + | set(self, _type, _off) + | + | set_reg(self, *args) -> 'void' + | set_reg(self, mreg) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, stkoff) + | + | undef(self, *args) -> 'void' + | undef(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | voff_t_off_get(self) -> sval_t + | + | thisown + | The membership flag + | + | type + | voff_t_type_get(self) -> mopt_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +=== ida_hexrays EPYDOC INJECTIONS === +ida_hexrays.ACFL_BLKOPT +""" +perform interblock transformations +""" + +ida_hexrays.ACFL_GLBDEL +""" +perform dead code eliminition +""" + +ida_hexrays.ACFL_GLBPROP +""" +perform global propagation +""" + +ida_hexrays.ACFL_GUESS +""" +may guess calling conventions +""" + +ida_hexrays.ACFL_LOCOPT +""" +perform local propagation (requires ACFL_BLKOPT) +""" + +ida_hexrays.ANCHOR_BLKCMT +""" +block comment (for ctree items) +""" + +ida_hexrays.ANCHOR_CITEM +""" +c-tree item +""" + +ida_hexrays.ANCHOR_ITP +""" +item type preciser +""" + +ida_hexrays.ANCHOR_LVAR +""" +declaration of local variable +""" + +ida_hexrays.CFL_FINAL +""" +call type is final, should not be changed +""" + +ida_hexrays.CFL_HELPER +""" +created from a decompiler helper function +""" + +ida_hexrays.CFS_BOUNDS +""" +'eamap' and 'boundaries' are ready +""" + +ida_hexrays.CFS_LVARS_HIDDEN +""" +local variable definitions are collapsed +""" + +ida_hexrays.CFS_TEXT +""" +'sv' is ready (and hdrlines) +""" + +ida_hexrays.CHF_FAKE +""" +fake chain created by widen_chains() +""" + +ida_hexrays.CHF_INITED +""" +is chain initialized? (valid only after lvar allocation) +""" + +ida_hexrays.CHF_OVER +""" +overlapped chain +""" + +ida_hexrays.CHF_PASSTHRU +""" +pass-thru chain, must use the input variable to the block +""" + +ida_hexrays.CHF_REPLACED +""" +chain operands have been replaced? +""" + +ida_hexrays.CHF_TERM +""" +terminating chain; the variable does not survive across the block +""" + +ida_hexrays.CIT_COLLAPSED +""" +display element in collapsed form +""" + +ida_hexrays.CPBLK_FAST +""" +do not update minbstkref and minbargref +""" + +ida_hexrays.CPBLK_MINREF +""" +update minbstkref and minbargref +""" + +ida_hexrays.CPBLK_OPTJMP +""" +if it becomes useless + +del the jump insn at the end of the block +""" + +ida_hexrays.CV_FAST +""" +do not maintain parent information +""" + +ida_hexrays.CV_INSNS +""" +visit only statements, prune all expressions do not use before the +final ctree maturity because expressions may contain statements at +intermediate stages (see cot_insn). Otherwise you risk missing +statements embedded into expressions. +""" + +ida_hexrays.CV_PARENTS +""" +maintain parent information +""" + +ida_hexrays.CV_POST +""" +call the leave...() functions +""" + +ida_hexrays.CV_PRUNE +""" +this bit is set by visit...() to prune the walk +""" + +ida_hexrays.CV_RESTART +""" +restart enumeration at the top expr (apply_to_exprs) +""" + +ida_hexrays.DECOMP_ALL_BLKS +""" +generate microcode for unreachable blocks +""" + +ida_hexrays.DECOMP_NO_CACHE +""" +do not use decompilation cache +""" + +ida_hexrays.DECOMP_NO_FRAME +""" +do not use function frame info (only snippet mode) +""" + +ida_hexrays.DECOMP_NO_WAIT +""" +do not display waitbox +""" + +ida_hexrays.DECOMP_WARNINGS +""" +display warnings in the output window +""" + +ida_hexrays.EQ_CMPDEST +""" +compare instruction destinations +""" + +ida_hexrays.EQ_IGNCODE +""" +ignore instruction opcodes +""" + +ida_hexrays.EQ_IGNSIZE +""" +ignore operand sizes +""" + +ida_hexrays.EQ_OPTINSN +""" +optimize mop_d operands +""" + +ida_hexrays.EXFL_ALL +""" +all currently defined bits +""" + +ida_hexrays.EXFL_ALONE +""" +standalone helper +""" + +ida_hexrays.EXFL_CPADONE +""" +pointer arithmetic correction done +""" + +ida_hexrays.EXFL_CSTR +""" +string literal +""" + +ida_hexrays.EXFL_FPOP +""" +floating point operation +""" + +ida_hexrays.EXFL_JUMPOUT +""" +jump out-of-function +""" + +ida_hexrays.EXFL_LVALUE +""" +expression is lvalue even if it doesn't look like it +""" + +ida_hexrays.EXFL_PARTIAL +""" +type of the expression is considered partial +""" + +ida_hexrays.EXFL_UNDEF +""" +expression uses undefined value +""" + +ida_hexrays.EXFL_VFTABLE +""" +is ptr to vftable (used for cot_memptr, cot_memref) +""" + +ida_hexrays.FCI_DEAD +""" +some return registers were determined dead +""" + +ida_hexrays.FCI_FINAL +""" +call type is final, should not be changed +""" + +ida_hexrays.FCI_HASCALL +""" +A function is an synthetic helper combined from several instructions +and at least one of them was a call to a real functions +""" + +ida_hexrays.FCI_HASFMT +""" +printf- or scanf-style format string + +A variadic function with recognized +""" + +ida_hexrays.FCI_NORET +""" +call does not return +""" + +ida_hexrays.FCI_NOSIDE +""" +call does not have side effects +""" + +ida_hexrays.FCI_PROP +""" +call has been propagated +""" + +ida_hexrays.FCI_PURE +""" +pure function +""" + +ida_hexrays.FCI_SPLOK +""" +spoiled/visible_memory lists have been optimized. for some functions +we can reduce them as soon as information about the arguments becomes +available. in order not to try optimize them again we use this bit. +""" + +ida_hexrays.FD_BACKWARD +""" +search direction +""" + +ida_hexrays.FD_DEF +""" +look for definition +""" + +ida_hexrays.FD_DIRTY +""" +by function calls and indirect memory access + +ignore possible implicit definitions +""" + +ida_hexrays.FD_FORWARD +""" +search direction +""" + +ida_hexrays.FD_USE +""" +look for use +""" + +ida_hexrays.GCA_ALLOC +""" +enumerate only allocated chains +""" + +ida_hexrays.GCA_EMPTY +""" +include empty chains +""" + +ida_hexrays.GCA_NALLOC +""" +enumerate only non-allocated chains +""" + +ida_hexrays.GCA_OFIRST +""" +consider only chains of the first block +""" + +ida_hexrays.GCA_OLAST +""" +consider only chains of the last block +""" + +ida_hexrays.GCA_SPEC +""" +include chains for special registers +""" + +ida_hexrays.GCO_DEF +""" +is destination operand? +""" + +ida_hexrays.GCO_REG +""" +is register? otherwise a stack variable +""" + +ida_hexrays.GCO_STK +""" +a stack variable +""" + +ida_hexrays.GCO_USE +""" +is source operand? +""" + +ida_hexrays.GLN_ALL +""" +get both +""" + +ida_hexrays.GLN_CURRENT +""" +get label of the current item +""" + +ida_hexrays.GLN_GOTO_TARGET +""" +get goto target +""" + +ida_hexrays.IPROP_ASSERT +""" +assertion: usually mov #val, op. assertions are used to help the +optimizer. assertions are ignored when generating ctree +""" + +ida_hexrays.IPROP_CLNPOP +""" +(e.g. "pop ecx" is often used for that) + +the purpose of the instruction is to clean stack +""" + +ida_hexrays.IPROP_COMBINED +""" +insn has been modified because of a partial reference +""" + +ida_hexrays.IPROP_DONT_COMB +""" +may not combine this instruction with others +""" + +ida_hexrays.IPROP_DONT_PROP +""" +may not propagate +""" + +ida_hexrays.IPROP_EXTSTX +""" +this is m_ext propagated into m_stx +""" + +ida_hexrays.IPROP_FARCALL +""" +call of a far function using push cs/call sequence +""" + +ida_hexrays.IPROP_FPINSN +""" +floating point insn +""" + +ida_hexrays.IPROP_IGNLOWSRC +""" +low part of the instruction source operand has been created +artificially (this bit is used only for 'and x, 80...') +""" + +ida_hexrays.IPROP_INV_JX +""" +inverted conditional jump +""" + +ida_hexrays.IPROP_MBARRIER +""" +(instructions accessing memory may not be reordered past it) + +this instruction acts as a memory barrier +""" + +ida_hexrays.IPROP_MULTI_MOV +""" +(example: STM on ARM may transfer multiple registers) + +the minsn was generated as part of insn that moves multiple +registersbits that can be set by plugins: +""" + +ida_hexrays.IPROP_OPTIONAL +""" +optional instruction +""" + +ida_hexrays.IPROP_PERSIST +""" +persistent insn; they are not destroyed +""" + +ida_hexrays.IPROP_SPLIT +""" +the instruction has been split: +""" + +ida_hexrays.IPROP_SPLIT1 +""" +into 1 byte +""" + +ida_hexrays.IPROP_SPLIT2 +""" +into 2 bytes +""" + +ida_hexrays.IPROP_SPLIT4 +""" +into 4 bytes +""" + +ida_hexrays.IPROP_SPLIT8 +""" +into 8 bytes +""" + +ida_hexrays.IPROP_TAILCALL +""" +tail call +""" + +ida_hexrays.IPROP_WAS_NORET +""" +was noret icall +""" + +ida_hexrays.IPROP_WILDMATCH +""" +match multiple insns +""" + +ida_hexrays.LOCOPT_ALL +""" +is not set, only dirty blocks will be optimized + +redo optimization for all blocks. if this bit +""" + +ida_hexrays.LOCOPT_REFINE +""" +refine return type, ok to fail +""" + +ida_hexrays.LOCOPT_REFINE2 +""" +refine return type, try harder +""" + +ida_hexrays.LVINF_FORCE +""" +force allocation of a new variable. forces the decompiler to create a +new variable at ll.defea +""" + +ida_hexrays.LVINF_KEEP +""" +preserve saved user settings regardless of vars for example, if a var +loses all its user-defined attributes or even gets destroyed, keep its +'lvar_saved_info_t' . this is used for ephemeral variables that get +destroyed by macro recognition. +""" + +ida_hexrays.LVINF_NOMAP +""" +forbid automatic mapping of the variable +""" + +ida_hexrays.LVINF_NOPTR +""" +variable type should not be a pointer +""" + +ida_hexrays.MBA_ASRPROP +""" +assertion have been propagated +""" + +ida_hexrays.MBA_ASRTOK +""" +assertions have been generated +""" + +ida_hexrays.MBA_CALLS +""" +callinfo has been built +""" + +ida_hexrays.MBA_CHVARS +""" +can verify chain varnums +""" + +ida_hexrays.MBA_CMBBLK +""" +request to combine blocks +""" + +ida_hexrays.MBA_CMNSTK +""" +stkvars+stkargs should be considered as one area +""" + +ida_hexrays.MBA_COLGDL +""" +display graph after each reduction +""" + +ida_hexrays.MBA_DELPAIRS +""" +pairs have been deleted once +""" + +ida_hexrays.MBA_GLBOPT +""" +microcode has been optimized globally +""" + +ida_hexrays.MBA_INSGDL +""" +display instruction in graphs +""" + +ida_hexrays.MBA_LOADED +""" +loaded gdl, no instructions (debugging) +""" + +ida_hexrays.MBA_LVARS0 +""" +lvar pre-allocation has been performed +""" + +ida_hexrays.MBA_LVARS1 +""" +lvar real allocation has been performed +""" + +ida_hexrays.MBA_NICE +""" +apply transformations to c code +""" + +ida_hexrays.MBA_NOFUNC +""" +function is not present, addresses might be wrong +""" + +ida_hexrays.MBA_NUMADDR +""" +display definition addresses for numbers +""" + +ida_hexrays.MBA_PASSREGS +""" +has 'mcallinfo_t::pass_regs' +""" + +ida_hexrays.MBA_PATTERN +""" +microcode pattern, callinfo is present +""" + +ida_hexrays.MBA_PRCDEFS +""" +use precise defeas for chain-allocated lvars +""" + +ida_hexrays.MBA_PREOPT +""" +preoptimization stage complete +""" + +ida_hexrays.MBA_REFINE +""" +may refine return value size +""" + +ida_hexrays.MBA_RETFP +""" +function returns floating point value +""" + +ida_hexrays.MBA_RETREF +""" +return type has been refined +""" + +ida_hexrays.MBA_SAVRST +""" +save-restore analysis has been performed +""" + +ida_hexrays.MBA_SHORT +""" +use short display +""" + +ida_hexrays.MBA_SPLINFO +""" +(final_type ? idb_spoiled : spoiled_regs) is valid +""" + +ida_hexrays.MBA_THUNK +""" +thunk function +""" + +ida_hexrays.MBA_VALNUM +""" +display value numbers +""" + +ida_hexrays.MBA_WINGR32 +""" +use wingraph32 +""" + +ida_hexrays.MBL_BACKPROP +""" +performed backprop_cc +""" + +ida_hexrays.MBL_CALL +""" +call information has been built +""" + +ida_hexrays.MBL_COMB +""" +needs "combine" pass +""" + +ida_hexrays.MBL_DEAD +""" +needs "eliminate deads" pass +""" + +ida_hexrays.MBL_DMT64 +""" +needs "demote 64bits" +""" + +ida_hexrays.MBL_DSLOT +""" +block for delay slot +""" + +ida_hexrays.MBL_FAKE +""" +fake block (after a tail call) +""" + +ida_hexrays.MBL_GOTO +""" +this block is a goto target +""" + +ida_hexrays.MBL_INCONST +""" +inconsistent lists: we are building them +""" + +ida_hexrays.MBL_LIST +""" +use/def lists are ready (not dirty) +""" + +ida_hexrays.MBL_NONFAKE +""" +regular block +""" + +ida_hexrays.MBL_NORET +""" +dead end block: doesn't return execution control +""" + +ida_hexrays.MBL_PRIV +""" +the specified are accepted (used in patterns) + +private block - no instructions except +""" + +ida_hexrays.MBL_PROP +""" +needs 'propagation' pass +""" + +ida_hexrays.MBL_PUSH +""" +needs "convert push/pop instructions" +""" + +ida_hexrays.MBL_TCAL +""" +aritifical call block for tail calls +""" + +ida_hexrays.MBL_VALRANGES +""" +should optimize using value ranges +""" + +ida_hexrays.MLI_CLR_FLAGS +""" +clear LVINF_... bits +""" + +ida_hexrays.MLI_CMT +""" +apply lvar comment +""" + +ida_hexrays.MLI_NAME +""" +apply lvar name +""" + +ida_hexrays.MLI_SET_FLAGS +""" +set LVINF_... bits +""" + +ida_hexrays.MLI_TYPE +""" +apply lvar type +""" + +ida_hexrays.NALT_VD +""" +this index is not used by ida +""" + +ida_hexrays.NF_BINVDONE +""" +temporary internal bit: inverting bits is done +""" + +ida_hexrays.NF_BITNOT +""" +The user asked to invert bits of the constant. +""" + +ida_hexrays.NF_FIXED +""" +number format has been defined by the user +""" + +ida_hexrays.NF_NEGATE +""" +The user asked to negate the constant. +""" + +ida_hexrays.NF_NEGDONE +""" +temporary internal bit: negation has been performed +""" + +ida_hexrays.NF_STROFF +""" +internal bit: used as stroff, valid iff 'is_stroff()' +""" + +ida_hexrays.OPROP_CCFLAGS +""" +condition codes register value +""" + +ida_hexrays.OPROP_FLOAT +""" +possibly floating value +""" + +ida_hexrays.OPROP_IMPDONE +""" +imported operand (a pointer) has been dereferenced +""" + +ida_hexrays.OPROP_UDEFVAL +""" +uses undefined value +""" + +ida_hexrays.OPROP_UDT +""" +a struct or union +""" + +ida_hexrays.OPTI_ADDREXPRS +""" +optimize all address expressions (&x+N; &x-&y) +""" + +ida_hexrays.OPTI_COMBINSNS +""" +may combine insns (only for optimize_insn) +""" + +ida_hexrays.OPTI_MINSTKREF +""" +may update minstkref +""" + +ida_hexrays.OPTI_NO_LDXOPT +""" +do not optimize low/high(ldx) +""" + +ida_hexrays.SHINS_LDXEA +""" +display address of ldx expressions (not used) +""" + +ida_hexrays.SHINS_NUMADDR +""" +display definition addresses for numbers +""" + +ida_hexrays.SHINS_SHORT +""" +do not display use-def chains and other attrs +""" + +ida_hexrays.SHINS_VALNUM +""" +display value numbers +""" + +ida_hexrays.ULV_PRECISE_DEFEA +""" +Use precise defea's for lvar locations. +""" + +ida_hexrays.VDRUN_APPEND +""" +Create a new file or append to existing file. +""" + +ida_hexrays.VDRUN_CMDLINE +""" +Called from ida's command line. +""" + +ida_hexrays.VDRUN_LUMINA +""" +Use lumina server. +""" + +ida_hexrays.VDRUN_MAYSTOP +""" +The user can cancel decompilation. +""" + +ida_hexrays.VDRUN_NEWFILE +""" +Create a new file or overwrite existing file. +""" + +ida_hexrays.VDRUN_ONLYNEW +""" +Fail if output file already exists. +""" + +ida_hexrays.VDRUN_SENDIDB +""" +Send problematic databases to hex-rays.com. +""" + +ida_hexrays.VDRUN_SILENT +""" +Silent decompilation. +""" + +ida_hexrays.VDRUN_STATS +""" +Print statistics into vd_stats.txt. +""" + +ida_hexrays.VDUI_LOCKED +""" +is locked? +""" + +ida_hexrays.VDUI_VALID +""" +is valid? +""" + +ida_hexrays.VDUI_VISIBLE +""" +is visible? +""" + +ida_hexrays.VR_AT_END +""" +get value ranges after the instruction or at the block end, just after +the last instruction (if M is NULL) +""" + +ida_hexrays.VR_AT_START +""" +at the block start (if M is NULL) + +get value ranges before the instruction or +""" + +ida_hexrays.VR_EXACT +""" +valrng size will be >= vivl.size + +find exact match. if not set, the returned +""" +=== ida_hexrays EPYDOC INJECTIONS END === +Help on function __make_idainfo_accessors in module ida_ida: + +__make_idainfo_accessors(attr, getter_name=None, setter_name=None) + +Help on function __make_idainfo_bound in module ida_ida: + +__make_idainfo_bound(func, attr) + # + +Help on function __make_idainfo_getter in module ida_ida: + +__make_idainfo_getter(name) + +Help on function calc_default_idaplace_flags in module ida_ida: + +calc_default_idaplace_flags(*args) -> 'int' + calc_default_idaplace_flags() -> int + + + Get default disassembly line options. + +Help on class compiler_info_t in module ida_ida: + +class compiler_info_t(builtins.object) + | Proxy of C++ compiler_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> compiler_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_compiler_info_t(...) + | delete_compiler_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cm + | compiler_info_t_cm_get(self) -> cm_t + | + | defalign + | compiler_info_t_defalign_get(self) -> uchar + | + | id + | compiler_info_t_id_get(self) -> comp_t + | + | size_b + | compiler_info_t_size_b_get(self) -> uchar + | + | size_e + | compiler_info_t_size_e_get(self) -> uchar + | + | size_i + | compiler_info_t_size_i_get(self) -> uchar + | + | size_l + | compiler_info_t_size_l_get(self) -> uchar + | + | size_ldbl + | compiler_info_t_size_ldbl_get(self) -> uchar + | + | size_ll + | compiler_info_t_size_ll_get(self) -> uchar + | + | size_s + | compiler_info_t_size_s_get(self) -> uchar + | + | thisown + | The membership flag + +Help on class idainfo in module ida_ida: + +class idainfo(builtins.object) + | Proxy of C++ idainfo class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | big_arg_align = __func(self, *args) + | + | gen_lzero = __func(self, *args) + | + | gen_null = __func(self, *args) + | + | gen_tryblks = __func(self, *args) + | + | get_abiname(self, *args) -> 'qstring' + | get_abiname(self) -> qstring + | + | get_demname_form = __func(self, *args) + | + | get_maxEA(self, *args) -> 'ea_t' + | get_maxEA(self) -> ea_t + | + | get_minEA(self, *args) -> 'ea_t' + | get_minEA(self) -> ea_t + | + | get_pack_mode = __func(self, *args) + | + | get_procName(self, *args) -> 'qstring' + | get_procName(self) -> qstring + | + | is_32bit = __func(self, *args) + | + | is_64bit = __func(self, *args) + | + | is_auto_enabled = __func(self, *args) + | + | is_be = __func(self, *args) + | + | is_dll = __func(self, *args) + | + | is_flat_off32 = __func(self, *args) + | + | is_graph_view = __func(self, *args) + | + | is_hard_float = __func(self, *args) + | + | is_kernel_mode = __func(self, *args) + | + | is_mem_aligned4 = __func(self, *args) + | + | is_snapshot = __func(self, *args) + | + | is_wide_high_byte_first = __func(self, *args) + | + | like_binary = __func(self, *args) + | + | line_pref_with_seg = __func(self, *args) + | + | loading_idc = __func(self, *args) + | + | map_stkargs = __func(self, *args) + | + | pack_stkargs = __func(self, *args) + | + | readonly_idb = __func(self, *args) + | + | set_64bit = __func(self, *args) + | + | set_auto_enabled = __func(self, *args) + | + | set_be = __func(self, *args) + | + | set_gen_lzero = __func(self, *args) + | + | set_gen_null = __func(self, *args) + | + | set_gen_tryblks = __func(self, *args) + | + | set_graph_view = __func(self, *args) + | + | set_line_pref_with_seg = __func(self, *args) + | + | set_maxEA(self, *args) -> 'void' + | set_maxEA(self, ea) + | + | set_minEA(self, *args) -> 'void' + | set_minEA(self, ea) + | + | set_pack_mode = __func(self, *args) + | + | set_show_auto = __func(self, *args) + | + | set_show_line_pref = __func(self, *args) + | + | set_show_void = __func(self, *args) + | + | set_wide_high_byte_first = __func(self, *args) + | + | show_auto = __func(self, *args) + | + | show_line_pref = __func(self, *args) + | + | show_void = __func(self, *args) + | + | stack_ldbl = __func(self, *args) + | + | stack_varargs = __func(self, *args) + | + | use_allasm = __func(self, *args) + | + | use_gcc_layout = __func(self, *args) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | abibits + | idainfo_abibits_get(self) -> uint32 + | + | abiname + | get_abiname(self) -> qstring + | + | af + | idainfo_af_get(self) -> uint32 + | + | af2 + | idainfo_af2_get(self) -> uint32 + | + | appcall_options + | idainfo_appcall_options_get(self) -> uint32 + | + | apptype + | idainfo_apptype_get(self) -> ushort + | + | asmtype + | idainfo_asmtype_get(self) -> uchar + | + | baseaddr + | idainfo_baseaddr_get(self) -> uval_t + | + | bin_prefix_size + | idainfo_bin_prefix_size_get(self) -> short + | + | cc + | idainfo_cc_get(self) -> compiler_info_t + | + | comment + | idainfo_comment_get(self) -> uchar + | + | database_change_count + | idainfo_database_change_count_get(self) -> uint32 + | + | datatypes + | idainfo_datatypes_get(self) -> uval_t + | + | demnames + | idainfo_demnames_get(self) -> uchar + | + | filetype + | idainfo_filetype_get(self) -> ushort + | + | highoff + | idainfo_highoff_get(self) -> ea_t + | + | indent + | idainfo_indent_get(self) -> uchar + | + | lenxref + | idainfo_lenxref_get(self) -> ushort + | + | lflags + | idainfo_lflags_get(self) -> uint32 + | + | listnames + | idainfo_listnames_get(self) -> uchar + | + | long_demnames + | idainfo_long_demnames_get(self) -> uint32 + | + | lowoff + | idainfo_lowoff_get(self) -> ea_t + | + | main + | idainfo_main_get(self) -> ea_t + | + | margin + | idainfo_margin_get(self) -> ushort + | + | maxEA + | get_maxEA(self) -> ea_t + | + | max_autoname_len + | idainfo_max_autoname_len_get(self) -> ushort + | + | max_ea + | idainfo_max_ea_get(self) -> ea_t + | + | maxref + | idainfo_maxref_get(self) -> uval_t + | + | minEA + | get_minEA(self) -> ea_t + | + | min_ea + | idainfo_min_ea_get(self) -> ea_t + | + | nametype + | idainfo_nametype_get(self) -> char + | + | omax_ea + | idainfo_omax_ea_get(self) -> ea_t + | + | omin_ea + | idainfo_omin_ea_get(self) -> ea_t + | + | ostype + | idainfo_ostype_get(self) -> ushort + | + | outflags + | idainfo_outflags_get(self) -> uint32 + | + | procName + | get_procName(self) -> qstring + | + | procname + | idainfo_procname_get(self) -> char [16] + | + | refcmtnum + | idainfo_refcmtnum_get(self) -> uchar + | + | s_cmtflg + | idainfo_s_cmtflg_get(self) -> uchar + | + | s_genflags + | idainfo_s_genflags_get(self) -> ushort + | + | s_limiter + | idainfo_s_limiter_get(self) -> uchar + | + | s_prefflag + | idainfo_s_prefflag_get(self) -> uchar + | + | s_xrefflag + | idainfo_s_xrefflag_get(self) -> uchar + | + | short_demnames + | idainfo_short_demnames_get(self) -> uint32 + | + | specsegs + | idainfo_specsegs_get(self) -> uchar + | + | start_cs + | idainfo_start_cs_get(self) -> sel_t + | + | start_ea + | idainfo_start_ea_get(self) -> ea_t + | + | start_ip + | idainfo_start_ip_get(self) -> ea_t + | + | start_sp + | idainfo_start_sp_get(self) -> ea_t + | + | start_ss + | idainfo_start_ss_get(self) -> sel_t + | + | strlit_break + | idainfo_strlit_break_get(self) -> uchar + | + | strlit_flags + | idainfo_strlit_flags_get(self) -> uchar + | + | strlit_pref + | idainfo_strlit_pref_get(self) -> char [16] + | + | strlit_sernum + | idainfo_strlit_sernum_get(self) -> uval_t + | + | strlit_zeroes + | idainfo_strlit_zeroes_get(self) -> char + | + | strtype + | idainfo_strtype_get(self) -> int32 + | + | tag + | idainfo_tag_get(self) -> char [3] + | + | thisown + | The membership flag + | + | type_xrefnum + | idainfo_type_xrefnum_get(self) -> uchar + | + | version + | idainfo_version_get(self) -> ushort + | + | xrefnum + | idainfo_xrefnum_get(self) -> uchar + +Help on function inf_big_arg_align in module ida_ida: + +inf_big_arg_align(*args) -> 'bool' + inf_big_arg_align() -> bool + +Help on function inf_gen_lzero in module ida_ida: + +inf_gen_lzero(*args) -> 'bool' + inf_gen_lzero() -> bool + +Help on function inf_gen_null in module ida_ida: + +inf_gen_null(*args) -> 'bool' + inf_gen_null() -> bool + +Help on function inf_gen_tryblks in module ida_ida: + +inf_gen_tryblks(*args) -> 'bool' + inf_gen_tryblks() -> bool + +Help on function inf_get_demname_form in module ida_ida: + +inf_get_demname_form(*args) -> 'uchar' + inf_get_demname_form() -> uchar + + + Get 'DEMNAM_MASK' bits of #demnames. + +Help on function inf_get_pack_mode in module ida_ida: + +inf_get_pack_mode(*args) -> 'int' + inf_get_pack_mode() -> int + +Help on function inf_is_32bit in module ida_ida: + +inf_is_32bit(*args) -> 'bool' + inf_is_32bit() -> bool + +Help on function inf_is_64bit in module ida_ida: + +inf_is_64bit(*args) -> 'bool' + inf_is_64bit() -> bool + +Help on function inf_is_auto_enabled in module ida_ida: + +inf_is_auto_enabled(*args) -> 'bool' + inf_is_auto_enabled() -> bool + +Help on function inf_is_be in module ida_ida: + +inf_is_be(*args) -> 'bool' + inf_is_be() -> bool + +Help on function inf_is_dll in module ida_ida: + +inf_is_dll(*args) -> 'bool' + inf_is_dll() -> bool + +Help on function inf_is_flat_off32 in module ida_ida: + +inf_is_flat_off32(*args) -> 'bool' + inf_is_flat_off32() -> bool + +Help on function inf_is_graph_view in module ida_ida: + +inf_is_graph_view(*args) -> 'bool' + inf_is_graph_view() -> bool + +Help on function inf_is_hard_float in module ida_ida: + +inf_is_hard_float(*args) -> 'bool' + inf_is_hard_float() -> bool + +Help on function inf_is_kernel_mode in module ida_ida: + +inf_is_kernel_mode(*args) -> 'bool' + inf_is_kernel_mode() -> bool + +Help on function inf_is_mem_aligned4 in module ida_ida: + +inf_is_mem_aligned4(*args) -> 'bool' + inf_is_mem_aligned4() -> bool + +Help on function inf_is_snapshot in module ida_ida: + +inf_is_snapshot(*args) -> 'bool' + inf_is_snapshot() -> bool + +Help on function inf_is_wide_high_byte_first in module ida_ida: + +inf_is_wide_high_byte_first(*args) -> 'bool' + inf_is_wide_high_byte_first() -> bool + +Help on function inf_like_binary in module ida_ida: + +inf_like_binary(*args) -> 'bool' + inf_like_binary() -> bool + +Help on function inf_line_pref_with_seg in module ida_ida: + +inf_line_pref_with_seg(*args) -> 'bool' + inf_line_pref_with_seg() -> bool + +Help on function inf_loading_idc in module ida_ida: + +inf_loading_idc(*args) -> 'bool' + inf_loading_idc() -> bool + +Help on function inf_map_stkargs in module ida_ida: + +inf_map_stkargs(*args) -> 'bool' + inf_map_stkargs() -> bool + +Help on function inf_pack_stkargs in module ida_ida: + +inf_pack_stkargs(*args) -> 'bool' + inf_pack_stkargs() -> bool + +Help on function inf_readonly_idb in module ida_ida: + +inf_readonly_idb(*args) -> 'bool' + inf_readonly_idb() -> bool + +Help on function inf_set_64bit in module ida_ida: + +inf_set_64bit(*args) -> 'bool' + inf_set_64bit(_v=True) -> bool + +Help on function inf_set_auto_enabled in module ida_ida: + +inf_set_auto_enabled(*args) -> 'bool' + inf_set_auto_enabled(_v=True) -> bool + +Help on function inf_set_be in module ida_ida: + +inf_set_be(*args) -> 'bool' + inf_set_be(_v=True) -> bool + +Help on function inf_set_gen_lzero in module ida_ida: + +inf_set_gen_lzero(*args) -> 'bool' + inf_set_gen_lzero(_v=True) -> bool + +Help on function inf_set_gen_null in module ida_ida: + +inf_set_gen_null(*args) -> 'bool' + inf_set_gen_null(_v=True) -> bool + +Help on function inf_set_gen_tryblks in module ida_ida: + +inf_set_gen_tryblks(*args) -> 'bool' + inf_set_gen_tryblks(_v=True) -> bool + +Help on function inf_set_graph_view in module ida_ida: + +inf_set_graph_view(*args) -> 'bool' + inf_set_graph_view(_v=True) -> bool + +Help on function inf_set_line_pref_with_seg in module ida_ida: + +inf_set_line_pref_with_seg(*args) -> 'bool' + inf_set_line_pref_with_seg(_v=True) -> bool + +Help on function inf_set_pack_mode in module ida_ida: + +inf_set_pack_mode(*args) -> 'int' + inf_set_pack_mode(pack_mode) -> int + +Help on function inf_set_show_auto in module ida_ida: + +inf_set_show_auto(*args) -> 'bool' + inf_set_show_auto(_v=True) -> bool + +Help on function inf_set_show_line_pref in module ida_ida: + +inf_set_show_line_pref(*args) -> 'bool' + inf_set_show_line_pref(_v=True) -> bool + +Help on function inf_set_show_void in module ida_ida: + +inf_set_show_void(*args) -> 'bool' + inf_set_show_void(_v=True) -> bool + +Help on function in module ida_ida: + + lambda *args + +Help on function inf_set_wide_high_byte_first in module ida_ida: + +inf_set_wide_high_byte_first(*args) -> 'bool' + inf_set_wide_high_byte_first(_v=True) -> bool + +Help on function inf_show_auto in module ida_ida: + +inf_show_auto(*args) -> 'bool' + inf_show_auto() -> bool + +Help on function inf_show_line_pref in module ida_ida: + +inf_show_line_pref(*args) -> 'bool' + inf_show_line_pref() -> bool + +Help on function inf_show_void in module ida_ida: + +inf_show_void(*args) -> 'bool' + inf_show_void() -> bool + +Help on function inf_stack_ldbl in module ida_ida: + +inf_stack_ldbl(*args) -> 'bool' + inf_stack_ldbl() -> bool + +Help on function inf_stack_varargs in module ida_ida: + +inf_stack_varargs(*args) -> 'bool' + inf_stack_varargs() -> bool + +Help on function inf_use_allasm in module ida_ida: + +inf_use_allasm(*args) -> 'bool' + inf_use_allasm() -> bool + +Help on function inf_use_gcc_layout in module ida_ida: + +inf_use_gcc_layout(*args) -> 'bool' + inf_use_gcc_layout() -> bool + +Help on function inf_abi_set_by_user in module ida_ida: + +inf_abi_set_by_user(*args) -> 'bool' + inf_abi_set_by_user() -> bool + +Help on function inf_allow_non_matched_ops in module ida_ida: + +inf_allow_non_matched_ops(*args) -> 'bool' + inf_allow_non_matched_ops() -> bool + +Help on function inf_allow_sigmulti in module ida_ida: + +inf_allow_sigmulti(*args) -> 'bool' + inf_allow_sigmulti() -> bool + +Help on function inf_append_sigcmt in module ida_ida: + +inf_append_sigcmt(*args) -> 'bool' + inf_append_sigcmt() -> bool + +Help on function inf_check_manual_ops in module ida_ida: + +inf_check_manual_ops(*args) -> 'bool' + inf_check_manual_ops() -> bool + +Help on function inf_check_unicode_strlits in module ida_ida: + +inf_check_unicode_strlits(*args) -> 'bool' + inf_check_unicode_strlits() -> bool + +Help on function inf_coagulate_code in module ida_ida: + +inf_coagulate_code(*args) -> 'bool' + inf_coagulate_code() -> bool + +Help on function inf_coagulate_data in module ida_ida: + +inf_coagulate_data(*args) -> 'bool' + inf_coagulate_data() -> bool + +Help on function inf_compress_idb in module ida_ida: + +inf_compress_idb(*args) -> 'bool' + inf_compress_idb() -> bool + +Help on function inf_create_all_xrefs in module ida_ida: + +inf_create_all_xrefs(*args) -> 'bool' + inf_create_all_xrefs() -> bool + +Help on function inf_create_func_from_call in module ida_ida: + +inf_create_func_from_call(*args) -> 'bool' + inf_create_func_from_call() -> bool + +Help on function inf_create_func_from_ptr in module ida_ida: + +inf_create_func_from_ptr(*args) -> 'bool' + inf_create_func_from_ptr() -> bool + +Help on function inf_create_func_tails in module ida_ida: + +inf_create_func_tails(*args) -> 'bool' + inf_create_func_tails() -> bool + +Help on function inf_create_jump_tables in module ida_ida: + +inf_create_jump_tables(*args) -> 'bool' + inf_create_jump_tables() -> bool + +Help on function inf_create_off_on_dref in module ida_ida: + +inf_create_off_on_dref(*args) -> 'bool' + inf_create_off_on_dref() -> bool + +Help on function inf_create_off_using_fixup in module ida_ida: + +inf_create_off_using_fixup(*args) -> 'bool' + inf_create_off_using_fixup() -> bool + +Help on function inf_create_strlit_on_xref in module ida_ida: + +inf_create_strlit_on_xref(*args) -> 'bool' + inf_create_strlit_on_xref() -> bool + +Help on function inf_data_offset in module ida_ida: + +inf_data_offset(*args) -> 'bool' + inf_data_offset() -> bool + +Help on function inf_dbg_no_store_path in module ida_ida: + +inf_dbg_no_store_path(*args) -> 'bool' + inf_dbg_no_store_path() -> bool + +Help on function inf_decode_fpp in module ida_ida: + +inf_decode_fpp(*args) -> 'bool' + inf_decode_fpp() -> bool + +Help on function inf_del_no_xref_insns in module ida_ida: + +inf_del_no_xref_insns(*args) -> 'bool' + inf_del_no_xref_insns() -> bool + +Help on function inf_final_pass in module ida_ida: + +inf_final_pass(*args) -> 'bool' + inf_final_pass() -> bool + +Help on function inf_full_sp_ana in module ida_ida: + +inf_full_sp_ana(*args) -> 'bool' + inf_full_sp_ana() -> bool + +Help on function inf_gen_assume in module ida_ida: + +inf_gen_assume(*args) -> 'bool' + inf_gen_assume() -> bool + +Help on function inf_gen_org in module ida_ida: + +inf_gen_org(*args) -> 'bool' + inf_gen_org() -> bool + +Help on function inf_get_abibits in module ida_ida: + +inf_get_abibits(*args) -> 'uint32' + inf_get_abibits() -> uint32 + +Help on function inf_get_af in module ida_ida: + +inf_get_af(*args) -> 'uint32' + inf_get_af() -> uint32 + +Help on function inf_get_af2 in module ida_ida: + +inf_get_af2(*args) -> 'uint32' + inf_get_af2() -> uint32 + +Help on function inf_get_af2_low in module ida_ida: + +inf_get_af2_low(*args) -> 'ushort' + inf_get_af2_low() -> ushort + + + Get/set low 16bit half of inf.af2. + +Help on function inf_get_af_high in module ida_ida: + +inf_get_af_high(*args) -> 'ushort' + inf_get_af_high() -> ushort + +Help on function inf_get_af_low in module ida_ida: + +inf_get_af_low(*args) -> 'ushort' + inf_get_af_low() -> ushort + + + Get/set low/high 16bit halves of inf.af. + +Help on function inf_get_appcall_options in module ida_ida: + +inf_get_appcall_options(*args) -> 'uint32' + inf_get_appcall_options() -> uint32 + +Help on function inf_get_apptype in module ida_ida: + +inf_get_apptype(*args) -> 'ushort' + inf_get_apptype() -> ushort + +Help on function inf_get_asmtype in module ida_ida: + +inf_get_asmtype(*args) -> 'uchar' + inf_get_asmtype() -> uchar + +Help on function inf_get_baseaddr in module ida_ida: + +inf_get_baseaddr(*args) -> 'uval_t' + inf_get_baseaddr() -> uval_t + +Help on function inf_get_bin_prefix_size in module ida_ida: + +inf_get_bin_prefix_size(*args) -> 'short' + inf_get_bin_prefix_size() -> short + +Help on function inf_get_cc in module ida_ida: + +inf_get_cc(*args) -> 'bool' + inf_get_cc(out) -> bool + +Help on function inf_get_cc_cm in module ida_ida: + +inf_get_cc_cm(*args) -> 'cm_t' + inf_get_cc_cm() -> cm_t + +Help on function inf_get_cc_defalign in module ida_ida: + +inf_get_cc_defalign(*args) -> 'uchar' + inf_get_cc_defalign() -> uchar + +Help on function inf_get_cc_id in module ida_ida: + +inf_get_cc_id(*args) -> 'comp_t' + inf_get_cc_id() -> comp_t + +Help on function inf_get_cc_size_b in module ida_ida: + +inf_get_cc_size_b(*args) -> 'uchar' + inf_get_cc_size_b() -> uchar + +Help on function inf_get_cc_size_e in module ida_ida: + +inf_get_cc_size_e(*args) -> 'uchar' + inf_get_cc_size_e() -> uchar + +Help on function inf_get_cc_size_i in module ida_ida: + +inf_get_cc_size_i(*args) -> 'uchar' + inf_get_cc_size_i() -> uchar + +Help on function inf_get_cc_size_l in module ida_ida: + +inf_get_cc_size_l(*args) -> 'uchar' + inf_get_cc_size_l() -> uchar + +Help on function inf_get_cc_size_ldbl in module ida_ida: + +inf_get_cc_size_ldbl(*args) -> 'uchar' + inf_get_cc_size_ldbl() -> uchar + +Help on function inf_get_cc_size_ll in module ida_ida: + +inf_get_cc_size_ll(*args) -> 'uchar' + inf_get_cc_size_ll() -> uchar + +Help on function inf_get_cc_size_s in module ida_ida: + +inf_get_cc_size_s(*args) -> 'uchar' + inf_get_cc_size_s() -> uchar + +Help on function inf_get_cmtflg in module ida_ida: + +inf_get_cmtflg(*args) -> 'uchar' + inf_get_cmtflg() -> uchar + +Help on function inf_get_comment in module ida_ida: + +inf_get_comment(*args) -> 'uchar' + inf_get_comment() -> uchar + +Help on function inf_get_database_change_count in module ida_ida: + +inf_get_database_change_count(*args) -> 'uint32' + inf_get_database_change_count() -> uint32 + +Help on function inf_get_datatypes in module ida_ida: + +inf_get_datatypes(*args) -> 'uval_t' + inf_get_datatypes() -> uval_t + +Help on function inf_get_demnames in module ida_ida: + +inf_get_demnames(*args) -> 'uchar' + inf_get_demnames() -> uchar + +Help on function inf_get_filetype in module ida_ida: + +inf_get_filetype(*args) -> 'filetype_t' + inf_get_filetype() -> filetype_t + +Help on function inf_get_genflags in module ida_ida: + +inf_get_genflags(*args) -> 'ushort' + inf_get_genflags() -> ushort + +Help on function inf_get_highoff in module ida_ida: + +inf_get_highoff(*args) -> 'ea_t' + inf_get_highoff() -> ea_t + +Help on function inf_get_indent in module ida_ida: + +inf_get_indent(*args) -> 'uchar' + inf_get_indent() -> uchar + +Help on function inf_get_lenxref in module ida_ida: + +inf_get_lenxref(*args) -> 'ushort' + inf_get_lenxref() -> ushort + +Help on function inf_get_lflags in module ida_ida: + +inf_get_lflags(*args) -> 'uint32' + inf_get_lflags() -> uint32 + +Help on function inf_get_limiter in module ida_ida: + +inf_get_limiter(*args) -> 'uchar' + inf_get_limiter() -> uchar + +Help on function inf_get_listnames in module ida_ida: + +inf_get_listnames(*args) -> 'uchar' + inf_get_listnames() -> uchar + +Help on function inf_get_long_demnames in module ida_ida: + +inf_get_long_demnames(*args) -> 'uint32' + inf_get_long_demnames() -> uint32 + +Help on function inf_get_lowoff in module ida_ida: + +inf_get_lowoff(*args) -> 'ea_t' + inf_get_lowoff() -> ea_t + +Help on function inf_get_main in module ida_ida: + +inf_get_main(*args) -> 'ea_t' + inf_get_main() -> ea_t + +Help on function inf_get_margin in module ida_ida: + +inf_get_margin(*args) -> 'ushort' + inf_get_margin() -> ushort + +Help on function inf_get_max_autoname_len in module ida_ida: + +inf_get_max_autoname_len(*args) -> 'ushort' + inf_get_max_autoname_len() -> ushort + +Help on function inf_get_max_ea in module ida_ida: + +inf_get_max_ea(*args) -> 'ea_t' + inf_get_max_ea() -> ea_t + +Help on function inf_get_maxref in module ida_ida: + +inf_get_maxref(*args) -> 'uval_t' + inf_get_maxref() -> uval_t + +Help on function inf_get_min_ea in module ida_ida: + +inf_get_min_ea(*args) -> 'ea_t' + inf_get_min_ea() -> ea_t + +Help on function inf_get_nametype in module ida_ida: + +inf_get_nametype(*args) -> 'char' + inf_get_nametype() -> char + +Help on function inf_get_netdelta in module ida_ida: + +inf_get_netdelta(*args) -> 'sval_t' + inf_get_netdelta() -> sval_t + +Help on function inf_get_omax_ea in module ida_ida: + +inf_get_omax_ea(*args) -> 'ea_t' + inf_get_omax_ea() -> ea_t + +Help on function inf_get_omin_ea in module ida_ida: + +inf_get_omin_ea(*args) -> 'ea_t' + inf_get_omin_ea() -> ea_t + +Help on function inf_get_ostype in module ida_ida: + +inf_get_ostype(*args) -> 'ushort' + inf_get_ostype() -> ushort + +Help on function inf_get_outflags in module ida_ida: + +inf_get_outflags(*args) -> 'uint32' + inf_get_outflags() -> uint32 + +Help on function inf_get_prefflag in module ida_ida: + +inf_get_prefflag(*args) -> 'uchar' + inf_get_prefflag() -> uchar + +Help on function inf_get_privrange in module ida_ida: + +inf_get_privrange(*args) -> 'range_t' + inf_get_privrange(out) -> bool + inf_get_privrange() -> range_t + +Help on function inf_get_privrange_end_ea in module ida_ida: + +inf_get_privrange_end_ea(*args) -> 'ea_t' + inf_get_privrange_end_ea() -> ea_t + +Help on function inf_get_privrange_start_ea in module ida_ida: + +inf_get_privrange_start_ea(*args) -> 'ea_t' + inf_get_privrange_start_ea() -> ea_t + +Help on function inf_get_procname in module ida_ida: + +inf_get_procname(*args) -> 'size_t' + inf_get_procname() -> str + +Help on function inf_get_refcmtnum in module ida_ida: + +inf_get_refcmtnum(*args) -> 'uchar' + inf_get_refcmtnum() -> uchar + +Help on function inf_get_short_demnames in module ida_ida: + +inf_get_short_demnames(*args) -> 'uint32' + inf_get_short_demnames() -> uint32 + +Help on function inf_get_specsegs in module ida_ida: + +inf_get_specsegs(*args) -> 'uchar' + inf_get_specsegs() -> uchar + +Help on function inf_get_start_cs in module ida_ida: + +inf_get_start_cs(*args) -> 'sel_t' + inf_get_start_cs() -> sel_t + +Help on function inf_get_start_ea in module ida_ida: + +inf_get_start_ea(*args) -> 'ea_t' + inf_get_start_ea() -> ea_t + +Help on function inf_get_start_ip in module ida_ida: + +inf_get_start_ip(*args) -> 'ea_t' + inf_get_start_ip() -> ea_t + +Help on function inf_get_start_sp in module ida_ida: + +inf_get_start_sp(*args) -> 'ea_t' + inf_get_start_sp() -> ea_t + +Help on function inf_get_start_ss in module ida_ida: + +inf_get_start_ss(*args) -> 'sel_t' + inf_get_start_ss() -> sel_t + +Help on function inf_get_strlit_break in module ida_ida: + +inf_get_strlit_break(*args) -> 'uchar' + inf_get_strlit_break() -> uchar + +Help on function inf_get_strlit_flags in module ida_ida: + +inf_get_strlit_flags(*args) -> 'uchar' + inf_get_strlit_flags() -> uchar + +Help on function inf_get_strlit_pref in module ida_ida: + +inf_get_strlit_pref(*args) -> 'size_t' + inf_get_strlit_pref() -> str + +Help on function inf_get_strlit_sernum in module ida_ida: + +inf_get_strlit_sernum(*args) -> 'uval_t' + inf_get_strlit_sernum() -> uval_t + +Help on function inf_get_strlit_zeroes in module ida_ida: + +inf_get_strlit_zeroes(*args) -> 'char' + inf_get_strlit_zeroes() -> char + +Help on function inf_get_strtype in module ida_ida: + +inf_get_strtype(*args) -> 'int32' + inf_get_strtype() -> int32 + +Help on function inf_get_type_xrefnum in module ida_ida: + +inf_get_type_xrefnum(*args) -> 'uchar' + inf_get_type_xrefnum() -> uchar + +Help on function inf_get_version in module ida_ida: + +inf_get_version(*args) -> 'ushort' + inf_get_version() -> ushort + +Help on function inf_get_xrefflag in module ida_ida: + +inf_get_xrefflag(*args) -> 'uchar' + inf_get_xrefflag() -> uchar + +Help on function inf_get_xrefnum in module ida_ida: + +inf_get_xrefnum(*args) -> 'uchar' + inf_get_xrefnum() -> uchar + +Help on function inf_guess_func_type in module ida_ida: + +inf_guess_func_type(*args) -> 'bool' + inf_guess_func_type() -> bool + +Help on function inf_handle_eh in module ida_ida: + +inf_handle_eh(*args) -> 'bool' + inf_handle_eh() -> bool + +Help on function inf_handle_rtti in module ida_ida: + +inf_handle_rtti(*args) -> 'bool' + inf_handle_rtti() -> bool + +Help on function inf_hide_comments in module ida_ida: + +inf_hide_comments(*args) -> 'bool' + inf_hide_comments() -> bool + +Help on function inf_hide_libfuncs in module ida_ida: + +inf_hide_libfuncs(*args) -> 'bool' + inf_hide_libfuncs() -> bool + +Help on function inf_huge_arg_align in module ida_ida: + +inf_huge_arg_align(*args) -> 'bool' + inf_huge_arg_align() -> bool + +Help on function inf_inc_database_change_count in module ida_ida: + +inf_inc_database_change_count(*args) -> 'void' + inf_inc_database_change_count(cnt=1) + +Help on function inf_is_limiter_empty in module ida_ida: + +inf_is_limiter_empty(*args) -> 'bool' + inf_is_limiter_empty() -> bool + +Help on function inf_is_limiter_thick in module ida_ida: + +inf_is_limiter_thick(*args) -> 'bool' + inf_is_limiter_thick() -> bool + +Help on function inf_is_limiter_thin in module ida_ida: + +inf_is_limiter_thin(*args) -> 'bool' + inf_is_limiter_thin() -> bool + +Help on function inf_macros_enabled in module ida_ida: + +inf_macros_enabled(*args) -> 'bool' + inf_macros_enabled() -> bool + +Help on function inf_mark_code in module ida_ida: + +inf_mark_code(*args) -> 'bool' + inf_mark_code() -> bool + +Help on function inf_no_store_user_info in module ida_ida: + +inf_no_store_user_info(*args) -> 'bool' + inf_no_store_user_info() -> bool + +Help on function inf_noflow_to_data in module ida_ida: + +inf_noflow_to_data(*args) -> 'bool' + inf_noflow_to_data() -> bool + +Help on function inf_noret_ana in module ida_ida: + +inf_noret_ana(*args) -> 'bool' + inf_noret_ana() -> bool + +Help on function inf_op_offset in module ida_ida: + +inf_op_offset(*args) -> 'bool' + inf_op_offset() -> bool + +Help on function inf_pack_idb in module ida_ida: + +inf_pack_idb(*args) -> 'bool' + inf_pack_idb() -> bool + +Help on function inf_postinc_strlit_sernum in module ida_ida: + +inf_postinc_strlit_sernum(*args) -> 'uval_t' + inf_postinc_strlit_sernum(cnt=1) -> uval_t + +Help on function inf_prefix_show_funcoff in module ida_ida: + +inf_prefix_show_funcoff(*args) -> 'bool' + inf_prefix_show_funcoff() -> bool + +Help on function inf_prefix_show_segaddr in module ida_ida: + +inf_prefix_show_segaddr(*args) -> 'bool' + inf_prefix_show_segaddr() -> bool + +Help on function inf_prefix_show_stack in module ida_ida: + +inf_prefix_show_stack(*args) -> 'bool' + inf_prefix_show_stack() -> bool + +Help on function inf_prefix_truncate_opcode_bytes in module ida_ida: + +inf_prefix_truncate_opcode_bytes(*args) -> 'bool' + inf_prefix_truncate_opcode_bytes() -> bool + +Help on function inf_propagate_regargs in module ida_ida: + +inf_propagate_regargs(*args) -> 'bool' + inf_propagate_regargs() -> bool + +Help on function inf_propagate_stkargs in module ida_ida: + +inf_propagate_stkargs(*args) -> 'bool' + inf_propagate_stkargs() -> bool + +Help on function inf_rename_jumpfunc in module ida_ida: + +inf_rename_jumpfunc(*args) -> 'bool' + inf_rename_jumpfunc() -> bool + +Help on function inf_rename_nullsub in module ida_ida: + +inf_rename_nullsub(*args) -> 'bool' + inf_rename_nullsub() -> bool + +Help on function inf_set_32bit in module ida_ida: + +inf_set_32bit(*args) -> 'bool' + inf_set_32bit(_v=True) -> bool + +Help on function inf_set_abi_set_by_user in module ida_ida: + +inf_set_abi_set_by_user(*args) -> 'bool' + inf_set_abi_set_by_user(_v=True) -> bool + +Help on function inf_set_abibits in module ida_ida: + +inf_set_abibits(*args) -> 'bool' + inf_set_abibits(_v) -> bool + +Help on function inf_set_af in module ida_ida: + +inf_set_af(*args) -> 'bool' + inf_set_af(_v) -> bool + +Help on function inf_set_af2 in module ida_ida: + +inf_set_af2(*args) -> 'bool' + inf_set_af2(_v) -> bool + +Help on function inf_set_af2_low in module ida_ida: + +inf_set_af2_low(*args) -> 'void' + inf_set_af2_low(saf) + +Help on function inf_set_af_high in module ida_ida: + +inf_set_af_high(*args) -> 'void' + inf_set_af_high(saf2) + +Help on function inf_set_af_low in module ida_ida: + +inf_set_af_low(*args) -> 'void' + inf_set_af_low(saf) + +Help on function inf_set_allow_non_matched_ops in module ida_ida: + +inf_set_allow_non_matched_ops(*args) -> 'bool' + inf_set_allow_non_matched_ops(_v=True) -> bool + +Help on function inf_set_allow_sigmulti in module ida_ida: + +inf_set_allow_sigmulti(*args) -> 'bool' + inf_set_allow_sigmulti(_v=True) -> bool + +Help on function inf_set_appcall_options in module ida_ida: + +inf_set_appcall_options(*args) -> 'bool' + inf_set_appcall_options(_v) -> bool + +Help on function inf_set_append_sigcmt in module ida_ida: + +inf_set_append_sigcmt(*args) -> 'bool' + inf_set_append_sigcmt(_v=True) -> bool + +Help on function inf_set_apptype in module ida_ida: + +inf_set_apptype(*args) -> 'bool' + inf_set_apptype(_v) -> bool + +Help on function inf_set_asmtype in module ida_ida: + +inf_set_asmtype(*args) -> 'bool' + inf_set_asmtype(_v) -> bool + +Help on function inf_set_baseaddr in module ida_ida: + +inf_set_baseaddr(*args) -> 'bool' + inf_set_baseaddr(_v) -> bool + +Help on function inf_set_big_arg_align in module ida_ida: + +inf_set_big_arg_align(*args) -> 'bool' + inf_set_big_arg_align(_v=True) -> bool + +Help on function inf_set_bin_prefix_size in module ida_ida: + +inf_set_bin_prefix_size(*args) -> 'bool' + inf_set_bin_prefix_size(_v) -> bool + +Help on function inf_set_cc in module ida_ida: + +inf_set_cc(*args) -> 'bool' + inf_set_cc(_v) -> bool + +Help on function inf_set_cc_cm in module ida_ida: + +inf_set_cc_cm(*args) -> 'bool' + inf_set_cc_cm(_v) -> bool + +Help on function inf_set_cc_defalign in module ida_ida: + +inf_set_cc_defalign(*args) -> 'bool' + inf_set_cc_defalign(_v) -> bool + +Help on function inf_set_cc_id in module ida_ida: + +inf_set_cc_id(*args) -> 'bool' + inf_set_cc_id(_v) -> bool + +Help on function inf_set_cc_size_b in module ida_ida: + +inf_set_cc_size_b(*args) -> 'bool' + inf_set_cc_size_b(_v) -> bool + +Help on function inf_set_cc_size_e in module ida_ida: + +inf_set_cc_size_e(*args) -> 'bool' + inf_set_cc_size_e(_v) -> bool + +Help on function inf_set_cc_size_i in module ida_ida: + +inf_set_cc_size_i(*args) -> 'bool' + inf_set_cc_size_i(_v) -> bool + +Help on function inf_set_cc_size_l in module ida_ida: + +inf_set_cc_size_l(*args) -> 'bool' + inf_set_cc_size_l(_v) -> bool + +Help on function inf_set_cc_size_ldbl in module ida_ida: + +inf_set_cc_size_ldbl(*args) -> 'bool' + inf_set_cc_size_ldbl(_v) -> bool + +Help on function inf_set_cc_size_ll in module ida_ida: + +inf_set_cc_size_ll(*args) -> 'bool' + inf_set_cc_size_ll(_v) -> bool + +Help on function inf_set_cc_size_s in module ida_ida: + +inf_set_cc_size_s(*args) -> 'bool' + inf_set_cc_size_s(_v) -> bool + +Help on function inf_set_check_manual_ops in module ida_ida: + +inf_set_check_manual_ops(*args) -> 'bool' + inf_set_check_manual_ops(_v=True) -> bool + +Help on function inf_set_check_unicode_strlits in module ida_ida: + +inf_set_check_unicode_strlits(*args) -> 'bool' + inf_set_check_unicode_strlits(_v=True) -> bool + +Help on function inf_set_cmtflg in module ida_ida: + +inf_set_cmtflg(*args) -> 'bool' + inf_set_cmtflg(_v) -> bool + +Help on function inf_set_coagulate_code in module ida_ida: + +inf_set_coagulate_code(*args) -> 'bool' + inf_set_coagulate_code(_v=True) -> bool + +Help on function inf_set_coagulate_data in module ida_ida: + +inf_set_coagulate_data(*args) -> 'bool' + inf_set_coagulate_data(_v=True) -> bool + +Help on function inf_set_comment in module ida_ida: + +inf_set_comment(*args) -> 'bool' + inf_set_comment(_v) -> bool + +Help on function inf_set_compress_idb in module ida_ida: + +inf_set_compress_idb(*args) -> 'bool' + inf_set_compress_idb(_v=True) -> bool + +Help on function inf_set_create_all_xrefs in module ida_ida: + +inf_set_create_all_xrefs(*args) -> 'bool' + inf_set_create_all_xrefs(_v=True) -> bool + +Help on function inf_set_create_func_from_call in module ida_ida: + +inf_set_create_func_from_call(*args) -> 'bool' + inf_set_create_func_from_call(_v=True) -> bool + +Help on function inf_set_create_func_from_ptr in module ida_ida: + +inf_set_create_func_from_ptr(*args) -> 'bool' + inf_set_create_func_from_ptr(_v=True) -> bool + +Help on function inf_set_create_func_tails in module ida_ida: + +inf_set_create_func_tails(*args) -> 'bool' + inf_set_create_func_tails(_v=True) -> bool + +Help on function inf_set_create_jump_tables in module ida_ida: + +inf_set_create_jump_tables(*args) -> 'bool' + inf_set_create_jump_tables(_v=True) -> bool + +Help on function inf_set_create_off_on_dref in module ida_ida: + +inf_set_create_off_on_dref(*args) -> 'bool' + inf_set_create_off_on_dref(_v=True) -> bool + +Help on function inf_set_create_off_using_fixup in module ida_ida: + +inf_set_create_off_using_fixup(*args) -> 'bool' + inf_set_create_off_using_fixup(_v=True) -> bool + +Help on function inf_set_create_strlit_on_xref in module ida_ida: + +inf_set_create_strlit_on_xref(*args) -> 'bool' + inf_set_create_strlit_on_xref(_v=True) -> bool + +Help on function inf_set_data_offset in module ida_ida: + +inf_set_data_offset(*args) -> 'bool' + inf_set_data_offset(_v=True) -> bool + +Help on function inf_set_database_change_count in module ida_ida: + +inf_set_database_change_count(*args) -> 'bool' + inf_set_database_change_count(_v) -> bool + +Help on function inf_set_datatypes in module ida_ida: + +inf_set_datatypes(*args) -> 'bool' + inf_set_datatypes(_v) -> bool + +Help on function inf_set_dbg_no_store_path in module ida_ida: + +inf_set_dbg_no_store_path(*args) -> 'bool' + inf_set_dbg_no_store_path(_v=True) -> bool + +Help on function inf_set_decode_fpp in module ida_ida: + +inf_set_decode_fpp(*args) -> 'bool' + inf_set_decode_fpp(_v=True) -> bool + +Help on function inf_set_del_no_xref_insns in module ida_ida: + +inf_set_del_no_xref_insns(*args) -> 'bool' + inf_set_del_no_xref_insns(_v=True) -> bool + +Help on function inf_set_demnames in module ida_ida: + +inf_set_demnames(*args) -> 'bool' + inf_set_demnames(_v) -> bool + +Help on function inf_set_dll in module ida_ida: + +inf_set_dll(*args) -> 'bool' + inf_set_dll(_v=True) -> bool + +Help on function inf_set_filetype in module ida_ida: + +inf_set_filetype(*args) -> 'bool' + inf_set_filetype(_v) -> bool + +Help on function inf_set_final_pass in module ida_ida: + +inf_set_final_pass(*args) -> 'bool' + inf_set_final_pass(_v=True) -> bool + +Help on function inf_set_flat_off32 in module ida_ida: + +inf_set_flat_off32(*args) -> 'bool' + inf_set_flat_off32(_v=True) -> bool + +Help on function inf_set_full_sp_ana in module ida_ida: + +inf_set_full_sp_ana(*args) -> 'bool' + inf_set_full_sp_ana(_v=True) -> bool + +Help on function inf_set_gen_assume in module ida_ida: + +inf_set_gen_assume(*args) -> 'bool' + inf_set_gen_assume(_v=True) -> bool + +Help on function inf_set_gen_org in module ida_ida: + +inf_set_gen_org(*args) -> 'bool' + inf_set_gen_org(_v=True) -> bool + +Help on function inf_set_genflags in module ida_ida: + +inf_set_genflags(*args) -> 'bool' + inf_set_genflags(_v) -> bool + +Help on function inf_set_guess_func_type in module ida_ida: + +inf_set_guess_func_type(*args) -> 'bool' + inf_set_guess_func_type(_v=True) -> bool + +Help on function inf_set_handle_eh in module ida_ida: + +inf_set_handle_eh(*args) -> 'bool' + inf_set_handle_eh(_v=True) -> bool + +Help on function inf_set_handle_rtti in module ida_ida: + +inf_set_handle_rtti(*args) -> 'bool' + inf_set_handle_rtti(_v=True) -> bool + +Help on function inf_set_hard_float in module ida_ida: + +inf_set_hard_float(*args) -> 'bool' + inf_set_hard_float(_v=True) -> bool + +Help on function inf_set_hide_comments in module ida_ida: + +inf_set_hide_comments(*args) -> 'bool' + inf_set_hide_comments(_v=True) -> bool + +Help on function inf_set_hide_libfuncs in module ida_ida: + +inf_set_hide_libfuncs(*args) -> 'bool' + inf_set_hide_libfuncs(_v=True) -> bool + +Help on function inf_set_highoff in module ida_ida: + +inf_set_highoff(*args) -> 'bool' + inf_set_highoff(_v) -> bool + +Help on function inf_set_huge_arg_align in module ida_ida: + +inf_set_huge_arg_align(*args) -> 'bool' + inf_set_huge_arg_align(_v=True) -> bool + +Help on function inf_set_indent in module ida_ida: + +inf_set_indent(*args) -> 'bool' + inf_set_indent(_v) -> bool + +Help on function inf_set_kernel_mode in module ida_ida: + +inf_set_kernel_mode(*args) -> 'bool' + inf_set_kernel_mode(_v=True) -> bool + +Help on function inf_set_lenxref in module ida_ida: + +inf_set_lenxref(*args) -> 'bool' + inf_set_lenxref(_v) -> bool + +Help on function inf_set_lflags in module ida_ida: + +inf_set_lflags(*args) -> 'bool' + inf_set_lflags(_v) -> bool + +Help on function inf_set_limiter in module ida_ida: + +inf_set_limiter(*args) -> 'bool' + inf_set_limiter(_v) -> bool + +Help on function inf_set_limiter_empty in module ida_ida: + +inf_set_limiter_empty(*args) -> 'bool' + inf_set_limiter_empty(_v=True) -> bool + +Help on function inf_set_limiter_thick in module ida_ida: + +inf_set_limiter_thick(*args) -> 'bool' + inf_set_limiter_thick(_v=True) -> bool + +Help on function inf_set_limiter_thin in module ida_ida: + +inf_set_limiter_thin(*args) -> 'bool' + inf_set_limiter_thin(_v=True) -> bool + +Help on function inf_set_listnames in module ida_ida: + +inf_set_listnames(*args) -> 'bool' + inf_set_listnames(_v) -> bool + +Help on function inf_set_loading_idc in module ida_ida: + +inf_set_loading_idc(*args) -> 'bool' + inf_set_loading_idc(_v=True) -> bool + +Help on function inf_set_long_demnames in module ida_ida: + +inf_set_long_demnames(*args) -> 'bool' + inf_set_long_demnames(_v) -> bool + +Help on function inf_set_lowoff in module ida_ida: + +inf_set_lowoff(*args) -> 'bool' + inf_set_lowoff(_v) -> bool + +Help on function inf_set_macros_enabled in module ida_ida: + +inf_set_macros_enabled(*args) -> 'bool' + inf_set_macros_enabled(_v=True) -> bool + +Help on function inf_set_main in module ida_ida: + +inf_set_main(*args) -> 'bool' + inf_set_main(_v) -> bool + +Help on function inf_set_map_stkargs in module ida_ida: + +inf_set_map_stkargs(*args) -> 'bool' + inf_set_map_stkargs(_v=True) -> bool + +Help on function inf_set_margin in module ida_ida: + +inf_set_margin(*args) -> 'bool' + inf_set_margin(_v) -> bool + +Help on function inf_set_mark_code in module ida_ida: + +inf_set_mark_code(*args) -> 'bool' + inf_set_mark_code(_v=True) -> bool + +Help on function inf_set_max_autoname_len in module ida_ida: + +inf_set_max_autoname_len(*args) -> 'bool' + inf_set_max_autoname_len(_v) -> bool + +Help on function inf_set_max_ea in module ida_ida: + +inf_set_max_ea(*args) -> 'bool' + inf_set_max_ea(_v) -> bool + +Help on function inf_set_maxref in module ida_ida: + +inf_set_maxref(*args) -> 'bool' + inf_set_maxref(_v) -> bool + +Help on function inf_set_mem_aligned4 in module ida_ida: + +inf_set_mem_aligned4(*args) -> 'bool' + inf_set_mem_aligned4(_v=True) -> bool + +Help on function inf_set_min_ea in module ida_ida: + +inf_set_min_ea(*args) -> 'bool' + inf_set_min_ea(_v) -> bool + +Help on function inf_set_nametype in module ida_ida: + +inf_set_nametype(*args) -> 'bool' + inf_set_nametype(_v) -> bool + +Help on function inf_set_netdelta in module ida_ida: + +inf_set_netdelta(*args) -> 'bool' + inf_set_netdelta(_v) -> bool + +Help on function inf_set_no_store_user_info in module ida_ida: + +inf_set_no_store_user_info(*args) -> 'bool' + inf_set_no_store_user_info(_v=True) -> bool + +Help on function inf_set_noflow_to_data in module ida_ida: + +inf_set_noflow_to_data(*args) -> 'bool' + inf_set_noflow_to_data(_v=True) -> bool + +Help on function inf_set_noret_ana in module ida_ida: + +inf_set_noret_ana(*args) -> 'bool' + inf_set_noret_ana(_v=True) -> bool + +Help on function inf_set_omax_ea in module ida_ida: + +inf_set_omax_ea(*args) -> 'bool' + inf_set_omax_ea(_v) -> bool + +Help on function inf_set_omin_ea in module ida_ida: + +inf_set_omin_ea(*args) -> 'bool' + inf_set_omin_ea(_v) -> bool + +Help on function inf_set_op_offset in module ida_ida: + +inf_set_op_offset(*args) -> 'bool' + inf_set_op_offset(_v=True) -> bool + +Help on function inf_set_ostype in module ida_ida: + +inf_set_ostype(*args) -> 'bool' + inf_set_ostype(_v) -> bool + +Help on function inf_set_outflags in module ida_ida: + +inf_set_outflags(*args) -> 'bool' + inf_set_outflags(_v) -> bool + +Help on function inf_set_pack_idb in module ida_ida: + +inf_set_pack_idb(*args) -> 'bool' + inf_set_pack_idb(_v=True) -> bool + +Help on function inf_set_pack_stkargs in module ida_ida: + +inf_set_pack_stkargs(*args) -> 'bool' + inf_set_pack_stkargs(_v=True) -> bool + +Help on function inf_set_prefflag in module ida_ida: + +inf_set_prefflag(*args) -> 'bool' + inf_set_prefflag(_v) -> bool + +Help on function inf_set_prefix_show_funcoff in module ida_ida: + +inf_set_prefix_show_funcoff(*args) -> 'bool' + inf_set_prefix_show_funcoff(_v=True) -> bool + +Help on function inf_set_prefix_show_segaddr in module ida_ida: + +inf_set_prefix_show_segaddr(*args) -> 'bool' + inf_set_prefix_show_segaddr(_v=True) -> bool + +Help on function inf_set_prefix_show_stack in module ida_ida: + +inf_set_prefix_show_stack(*args) -> 'bool' + inf_set_prefix_show_stack(_v=True) -> bool + +Help on function inf_set_prefix_truncate_opcode_bytes in module ida_ida: + +inf_set_prefix_truncate_opcode_bytes(*args) -> 'bool' + inf_set_prefix_truncate_opcode_bytes(_v=True) -> bool + +Help on function inf_set_privrange in module ida_ida: + +inf_set_privrange(*args) -> 'bool' + inf_set_privrange(_v) -> bool + +Help on function inf_set_privrange_end_ea in module ida_ida: + +inf_set_privrange_end_ea(*args) -> 'bool' + inf_set_privrange_end_ea(_v) -> bool + +Help on function inf_set_privrange_start_ea in module ida_ida: + +inf_set_privrange_start_ea(*args) -> 'bool' + inf_set_privrange_start_ea(_v) -> bool + +Help on function inf_set_procname in module ida_ida: + +inf_set_procname(*args) -> 'bool' + inf_set_procname(_v, len=size_t(-1)) -> bool + +Help on function inf_set_propagate_regargs in module ida_ida: + +inf_set_propagate_regargs(*args) -> 'bool' + inf_set_propagate_regargs(_v=True) -> bool + +Help on function inf_set_propagate_stkargs in module ida_ida: + +inf_set_propagate_stkargs(*args) -> 'bool' + inf_set_propagate_stkargs(_v=True) -> bool + +Help on function inf_set_readonly_idb in module ida_ida: + +inf_set_readonly_idb(*args) -> 'bool' + inf_set_readonly_idb(_v=True) -> bool + +Help on function inf_set_refcmtnum in module ida_ida: + +inf_set_refcmtnum(*args) -> 'bool' + inf_set_refcmtnum(_v) -> bool + +Help on function inf_set_rename_jumpfunc in module ida_ida: + +inf_set_rename_jumpfunc(*args) -> 'bool' + inf_set_rename_jumpfunc(_v=True) -> bool + +Help on function inf_set_rename_nullsub in module ida_ida: + +inf_set_rename_nullsub(*args) -> 'bool' + inf_set_rename_nullsub(_v=True) -> bool + +Help on function inf_set_short_demnames in module ida_ida: + +inf_set_short_demnames(*args) -> 'bool' + inf_set_short_demnames(_v) -> bool + +Help on function inf_set_should_create_stkvars in module ida_ida: + +inf_set_should_create_stkvars(*args) -> 'bool' + inf_set_should_create_stkvars(_v=True) -> bool + +Help on function inf_set_should_trace_sp in module ida_ida: + +inf_set_should_trace_sp(*args) -> 'bool' + inf_set_should_trace_sp(_v=True) -> bool + +Help on function inf_set_show_all_comments in module ida_ida: + +inf_set_show_all_comments(*args) -> 'bool' + inf_set_show_all_comments(_v=True) -> bool + +Help on function inf_set_show_hidden_funcs in module ida_ida: + +inf_set_show_hidden_funcs(*args) -> 'bool' + inf_set_show_hidden_funcs(_v=True) -> bool + +Help on function inf_set_show_hidden_insns in module ida_ida: + +inf_set_show_hidden_insns(*args) -> 'bool' + inf_set_show_hidden_insns(_v=True) -> bool + +Help on function inf_set_show_hidden_segms in module ida_ida: + +inf_set_show_hidden_segms(*args) -> 'bool' + inf_set_show_hidden_segms(_v=True) -> bool + +Help on function inf_set_show_repeatables in module ida_ida: + +inf_set_show_repeatables(*args) -> 'bool' + inf_set_show_repeatables(_v=True) -> bool + +Help on function inf_set_show_src_linnum in module ida_ida: + +inf_set_show_src_linnum(*args) -> 'bool' + inf_set_show_src_linnum(_v=True) -> bool + +Help on function inf_set_show_xref_fncoff in module ida_ida: + +inf_set_show_xref_fncoff(*args) -> 'bool' + inf_set_show_xref_fncoff(_v=True) -> bool + +Help on function inf_set_show_xref_seg in module ida_ida: + +inf_set_show_xref_seg(*args) -> 'bool' + inf_set_show_xref_seg(_v=True) -> bool + +Help on function inf_set_show_xref_tmarks in module ida_ida: + +inf_set_show_xref_tmarks(*args) -> 'bool' + inf_set_show_xref_tmarks(_v=True) -> bool + +Help on function inf_set_show_xref_val in module ida_ida: + +inf_set_show_xref_val(*args) -> 'bool' + inf_set_show_xref_val(_v=True) -> bool + +Help on function inf_set_snapshot in module ida_ida: + +inf_set_snapshot(*args) -> 'bool' + inf_set_snapshot(_v=True) -> bool + +Help on function inf_set_specsegs in module ida_ida: + +inf_set_specsegs(*args) -> 'bool' + inf_set_specsegs(_v) -> bool + +Help on function inf_set_stack_ldbl in module ida_ida: + +inf_set_stack_ldbl(*args) -> 'bool' + inf_set_stack_ldbl(_v=True) -> bool + +Help on function inf_set_stack_varargs in module ida_ida: + +inf_set_stack_varargs(*args) -> 'bool' + inf_set_stack_varargs(_v=True) -> bool + +Help on function inf_set_start_cs in module ida_ida: + +inf_set_start_cs(*args) -> 'bool' + inf_set_start_cs(_v) -> bool + +Help on function inf_set_start_ea in module ida_ida: + +inf_set_start_ea(*args) -> 'bool' + inf_set_start_ea(_v) -> bool + +Help on function inf_set_start_ip in module ida_ida: + +inf_set_start_ip(*args) -> 'bool' + inf_set_start_ip(_v) -> bool + +Help on function inf_set_start_sp in module ida_ida: + +inf_set_start_sp(*args) -> 'bool' + inf_set_start_sp(_v) -> bool + +Help on function inf_set_start_ss in module ida_ida: + +inf_set_start_ss(*args) -> 'bool' + inf_set_start_ss(_v) -> bool + +Help on function inf_set_strlit_autocmt in module ida_ida: + +inf_set_strlit_autocmt(*args) -> 'bool' + inf_set_strlit_autocmt(_v=True) -> bool + +Help on function inf_set_strlit_break in module ida_ida: + +inf_set_strlit_break(*args) -> 'bool' + inf_set_strlit_break(_v) -> bool + +Help on function inf_set_strlit_flags in module ida_ida: + +inf_set_strlit_flags(*args) -> 'bool' + inf_set_strlit_flags(_v) -> bool + +Help on function inf_set_strlit_name_bit in module ida_ida: + +inf_set_strlit_name_bit(*args) -> 'bool' + inf_set_strlit_name_bit(_v=True) -> bool + +Help on function inf_set_strlit_names in module ida_ida: + +inf_set_strlit_names(*args) -> 'bool' + inf_set_strlit_names(_v=True) -> bool + +Help on function inf_set_strlit_pref in module ida_ida: + +inf_set_strlit_pref(*args) -> 'bool' + inf_set_strlit_pref(_v, len=size_t(-1)) -> bool + +Help on function inf_set_strlit_savecase in module ida_ida: + +inf_set_strlit_savecase(*args) -> 'bool' + inf_set_strlit_savecase(_v=True) -> bool + +Help on function inf_set_strlit_serial_names in module ida_ida: + +inf_set_strlit_serial_names(*args) -> 'bool' + inf_set_strlit_serial_names(_v=True) -> bool + +Help on function inf_set_strlit_sernum in module ida_ida: + +inf_set_strlit_sernum(*args) -> 'bool' + inf_set_strlit_sernum(_v) -> bool + +Help on function inf_set_strlit_zeroes in module ida_ida: + +inf_set_strlit_zeroes(*args) -> 'bool' + inf_set_strlit_zeroes(_v) -> bool + +Help on function inf_set_strtype in module ida_ida: + +inf_set_strtype(*args) -> 'bool' + inf_set_strtype(_v) -> bool + +Help on function inf_set_test_mode in module ida_ida: + +inf_set_test_mode(*args) -> 'bool' + inf_set_test_mode(_v=True) -> bool + +Help on function inf_set_trace_flow in module ida_ida: + +inf_set_trace_flow(*args) -> 'bool' + inf_set_trace_flow(_v=True) -> bool + +Help on function inf_set_truncate_on_del in module ida_ida: + +inf_set_truncate_on_del(*args) -> 'bool' + inf_set_truncate_on_del(_v=True) -> bool + +Help on function inf_set_type_xrefnum in module ida_ida: + +inf_set_type_xrefnum(*args) -> 'bool' + inf_set_type_xrefnum(_v) -> bool + +Help on function inf_set_unicode_strlits in module ida_ida: + +inf_set_unicode_strlits(*args) -> 'bool' + inf_set_unicode_strlits(_v=True) -> bool + +Help on function inf_set_use_allasm in module ida_ida: + +inf_set_use_allasm(*args) -> 'bool' + inf_set_use_allasm(_v=True) -> bool + +Help on function inf_set_use_flirt in module ida_ida: + +inf_set_use_flirt(*args) -> 'bool' + inf_set_use_flirt(_v=True) -> bool + +Help on function inf_set_use_gcc_layout in module ida_ida: + +inf_set_use_gcc_layout(*args) -> 'bool' + inf_set_use_gcc_layout(_v=True) -> bool + +Help on function inf_set_version in module ida_ida: + +inf_set_version(*args) -> 'bool' + inf_set_version(_v) -> bool + +Help on function inf_set_xrefflag in module ida_ida: + +inf_set_xrefflag(*args) -> 'bool' + inf_set_xrefflag(_v) -> bool + +Help on function inf_set_xrefnum in module ida_ida: + +inf_set_xrefnum(*args) -> 'bool' + inf_set_xrefnum(_v) -> bool + +Help on function inf_should_create_stkvars in module ida_ida: + +inf_should_create_stkvars(*args) -> 'bool' + inf_should_create_stkvars() -> bool + +Help on function inf_should_trace_sp in module ida_ida: + +inf_should_trace_sp(*args) -> 'bool' + inf_should_trace_sp() -> bool + +Help on function inf_show_all_comments in module ida_ida: + +inf_show_all_comments(*args) -> 'bool' + inf_show_all_comments() -> bool + +Help on function inf_show_hidden_funcs in module ida_ida: + +inf_show_hidden_funcs(*args) -> 'bool' + inf_show_hidden_funcs() -> bool + +Help on function inf_show_hidden_insns in module ida_ida: + +inf_show_hidden_insns(*args) -> 'bool' + inf_show_hidden_insns() -> bool + +Help on function inf_show_hidden_segms in module ida_ida: + +inf_show_hidden_segms(*args) -> 'bool' + inf_show_hidden_segms() -> bool + +Help on function inf_show_repeatables in module ida_ida: + +inf_show_repeatables(*args) -> 'bool' + inf_show_repeatables() -> bool + +Help on function inf_show_src_linnum in module ida_ida: + +inf_show_src_linnum(*args) -> 'bool' + inf_show_src_linnum() -> bool + +Help on function inf_show_xref_fncoff in module ida_ida: + +inf_show_xref_fncoff(*args) -> 'bool' + inf_show_xref_fncoff() -> bool + +Help on function inf_show_xref_seg in module ida_ida: + +inf_show_xref_seg(*args) -> 'bool' + inf_show_xref_seg() -> bool + +Help on function inf_show_xref_tmarks in module ida_ida: + +inf_show_xref_tmarks(*args) -> 'bool' + inf_show_xref_tmarks() -> bool + +Help on function inf_show_xref_val in module ida_ida: + +inf_show_xref_val(*args) -> 'bool' + inf_show_xref_val() -> bool + +Help on function inf_strlit_autocmt in module ida_ida: + +inf_strlit_autocmt(*args) -> 'bool' + inf_strlit_autocmt() -> bool + +Help on function inf_strlit_name_bit in module ida_ida: + +inf_strlit_name_bit(*args) -> 'bool' + inf_strlit_name_bit() -> bool + +Help on function inf_strlit_names in module ida_ida: + +inf_strlit_names(*args) -> 'bool' + inf_strlit_names() -> bool + +Help on function inf_strlit_savecase in module ida_ida: + +inf_strlit_savecase(*args) -> 'bool' + inf_strlit_savecase() -> bool + +Help on function inf_strlit_serial_names in module ida_ida: + +inf_strlit_serial_names(*args) -> 'bool' + inf_strlit_serial_names() -> bool + +Help on function inf_test_mode in module ida_ida: + +inf_test_mode(*args) -> 'bool' + inf_test_mode() -> bool + +Help on function inf_trace_flow in module ida_ida: + +inf_trace_flow(*args) -> 'bool' + inf_trace_flow() -> bool + +Help on function inf_truncate_on_del in module ida_ida: + +inf_truncate_on_del(*args) -> 'bool' + inf_truncate_on_del() -> bool + +Help on function inf_unicode_strlits in module ida_ida: + +inf_unicode_strlits(*args) -> 'bool' + inf_unicode_strlits() -> bool + +Help on function inf_use_flirt in module ida_ida: + +inf_use_flirt(*args) -> 'bool' + inf_use_flirt() -> bool + +Help on function is_filetype_like_binary in module ida_ida: + +is_filetype_like_binary(*args) -> 'bool' + is_filetype_like_binary(ft) -> bool + + + Is unstructured input file? + + + @param ft (C++: filetype_t) + +Help on function in module ida_ida: + + lambda *args + +Help on function to_ea in module ida_ida: + +to_ea(*args) -> 'ea_t' + to_ea(reg_cs, reg_ip) -> ea_t + + + Convert (sel,off) value to a linear address. + + + @param reg_cs (C++: sel_t) + @param reg_ip (C++: uval_t) + +=== ida_ida EPYDOC INJECTIONS === +ida_ida.ABI_8ALIGN4 +""" +4 byte alignment for 8byte scalars (__int64/double) inside structures? +""" + +ida_ida.ABI_BIGARG_ALIGN +""" +(e.g. __int64 argument should be 8byte aligned on some 32bit +platforms) + +use natural type alignment for argument if the alignment exceeds +native word size +""" + +ida_ida.ABI_GCC_LAYOUT +""" +use gcc layout for udts (used for mingw) +""" + +ida_ida.ABI_HARD_FLOAT +""" +use the floating-point register set +""" + +ida_ida.ABI_HUGEARG_ALIGN +""" +use natural type alignment for an argument even if its alignment +exceeds double native word size (the default is to use double word +max). e.g. if this bit is set, __int128 has 16-byte alignment +""" + +ida_ida.ABI_MAP_STKARGS +""" +register arguments are mapped to stack area (and consume stack slots) +""" + +ida_ida.ABI_PACK_STKARGS +""" +do not align stack arguments to stack slots +""" + +ida_ida.ABI_SET_BY_USER +""" +compiler/abi were set by user flag and require SETCOMP_BY_USER flag to +be changed +""" + +ida_ida.ABI_STACK_LDBL +""" +long double arguments are passed on stack +""" + +ida_ida.ABI_STACK_VARARGS +""" +varargs are always passed on stack (even when there are free +registers) +""" + +ida_ida.AF2_DOEH +""" +Handle EH information. +""" + +ida_ida.AF2_DORTTI +""" +Handle RTTI information. +""" + +ida_ida.AF2_MACRO +""" +Try to combine several instructions into a macro instruction +""" + +ida_ida.AF_ANORET +""" +Perform 'no-return' analysis. +""" + +ida_ida.AF_CHKUNI +""" +Check for unicode strings. +""" + +ida_ida.AF_CODE +""" +Trace execution flow. +""" + +ida_ida.AF_DATOFF +""" +Automatically convert data to offsets. +""" + +ida_ida.AF_DOCODE +""" +Coagulate code segs at the final pass. +""" + +ida_ida.AF_DODATA +""" +Coagulate data segs at the final pass. +""" + +ida_ida.AF_DREFOFF +""" +Create offset if data xref to seg32 exists. +""" + +ida_ida.AF_FINAL +""" +Final pass of analysis. +""" + +ida_ida.AF_FIXUP +""" +Create offsets and segments using fixup info. +""" + +ida_ida.AF_FLIRT +""" +Use flirt signatures. +""" + +ida_ida.AF_FTAIL +""" +Create function tails. +""" + +ida_ida.AF_HFLIRT +""" +Automatically hide library functions. +""" + +ida_ida.AF_IMMOFF +""" +Convert 32bit instruction operand to offset. +""" + +ida_ida.AF_JFUNC +""" +Rename jump functions as j_... +""" + +ida_ida.AF_JUMPTBL +""" +Locate and create jump tables. +""" + +ida_ida.AF_LVAR +""" +Create stack variables. +""" + +ida_ida.AF_MARKCODE +""" +Mark typical code sequences as code. +""" + +ida_ida.AF_MEMFUNC +""" +Try to guess member function types. +""" + +ida_ida.AF_NULLSUB +""" +Rename empty functions as nullsub_... +""" + +ida_ida.AF_PROC +""" +Create functions if call is present. +""" + +ida_ida.AF_PROCPTR +""" +Create function if data xref data->code32 exists. +""" + +ida_ida.AF_PURDAT +""" +Control flow to data segment is ignored. +""" + +ida_ida.AF_REGARG +""" +Propagate register argument information. +""" + +ida_ida.AF_SIGCMT +""" +Append a signature name comment for recognized anonymous library +functions. +""" + +ida_ida.AF_SIGMLT +""" +Allow recognition of several copies of the same function. +""" + +ida_ida.AF_STKARG +""" +Propagate stack argument information. +""" + +ida_ida.AF_STRLIT +""" +Create string literal if data xref exists. +""" + +ida_ida.AF_TRACE +""" +Trace stack pointer. +""" + +ida_ida.AF_TRFUNC +""" +Truncate functions upon code deletion. +""" + +ida_ida.AF_UNK +""" +Delete instructions with no xrefs. +""" + +ida_ida.AF_USED +""" +Analyze and create all xrefs. +""" + +ida_ida.AF_VERSP +""" +Perform full SP-analysis. (\\ph{verify_sp}) +""" + +ida_ida.DEMNAM_CMNT +""" +display demangled names as comments +""" + +ida_ida.DEMNAM_FIRST +""" +override type info +""" + +ida_ida.DEMNAM_GCC3 +""" +assume gcc3 names (valid for gnu compiler) +""" + +ida_ida.DEMNAM_MASK +""" +mask for name form +""" + +ida_ida.DEMNAM_NAME +""" +display demangled names as regular names +""" + +ida_ida.DEMNAM_NONE +""" +don't display demangled names +""" + +ida_ida.IDAINFO_TAG_SIZE +""" +The database parameters. This structure is kept in the ida database. +It contains the essential parameters for the current program +""" + +ida_ida.IDB_COMPRESSED +""" +compress & pack database components +""" + +ida_ida.IDB_PACKED +""" +pack database components into .idb +""" + +ida_ida.IDB_UNPACKED +""" +leave database components unpacked +""" + +ida_ida.INFFL_ALLASM +""" +the target assembler + +may use constructs not supported by +""" + +ida_ida.INFFL_AUTO +""" +Autoanalysis is enabled? +""" + +ida_ida.INFFL_CHKOPS +""" +check manual operands? (unused) +""" + +ida_ida.INFFL_GRAPH_VIEW +""" +currently using graph options (\\dto{graph}) +""" + +ida_ida.INFFL_LOADIDC +""" +loading an idc file that contains database info +""" + +ida_ida.INFFL_NMOPS +""" +allow non-matched operands? (unused) +""" + +ida_ida.INFFL_NOUSER +""" +do not store user info in the database +""" + +ida_ida.INFFL_READONLY +""" +(internal) temporary interdiction to modify the database +""" + +ida_ida.LFLG_64BIT +""" +64-bit program? +""" + +ida_ida.LFLG_COMPRESS +""" +compress the database? +""" + +ida_ida.LFLG_DBG_NOPATH +""" +do not store input full path in debugger process options +""" + +ida_ida.LFLG_FLAT_OFF32 +""" +treat 'REF_OFF32' as 32-bit offset for 16bit segments (otherwise try +SEG16:OFF16) +""" + +ida_ida.LFLG_IS_DLL +""" +Is dynamic library? +""" + +ida_ida.LFLG_KERNMODE +""" +is kernel mode binary? +""" + +ida_ida.LFLG_MSF +""" +Byte order: is MSB first? +""" + +ida_ida.LFLG_PACK +""" +pack the database? +""" + +ida_ida.LFLG_PC_FLAT +""" +32-bit program? +""" + +ida_ida.LFLG_PC_FPP +""" +decode floating point processor instructions? +""" + +ida_ida.LFLG_SNAPSHOT +""" +memory snapshot was taken? +""" + +ida_ida.LFLG_WIDE_HBF +""" +(wide bytes: \\ph{dnbits} > 8) + +Bit order of wide bytes: high byte first? +""" + +ida_ida.LMT_EMPTY +""" +empty lines at the end of basic blocks +""" + +ida_ida.LMT_THICK +""" +thick borders +""" + +ida_ida.LMT_THIN +""" +thin borders +""" + +ida_ida.LN_AUTO +""" +include autogenerated names +""" + +ida_ida.LN_NORMAL +""" +include normal names +""" + +ida_ida.LN_PUBLIC +""" +include public names +""" + +ida_ida.LN_WEAK +""" +include weak names +""" + +ida_ida.OFLG_GEN_ASSUME +""" +Generate 'assume' directives? +""" + +ida_ida.OFLG_GEN_NULL +""" +Generate empty lines? +""" + +ida_ida.OFLG_GEN_ORG +""" +Generate 'org' directives? +""" + +ida_ida.OFLG_GEN_TRYBLKS +""" +Generate try/catch directives? +""" + +ida_ida.OFLG_LZERO +""" +generate leading zeroes in numbers +""" + +ida_ida.OFLG_PREF_SEG +""" +line prefixes with segment name? +""" + +ida_ida.OFLG_SHOW_AUTO +""" +Display autoanalysis indicator? +""" + +ida_ida.OFLG_SHOW_PREF +""" +Show line prefixes? +""" + +ida_ida.OFLG_SHOW_VOID +""" +Display void marks? +""" + +ida_ida.PREF_FNCOFF +""" +show function offsets? +""" + +ida_ida.PREF_PFXTRUNC +""" +truncate instruction bytes if they would need more than 1 line +""" + +ida_ida.PREF_SEGADR +""" +show segment addresses? +""" + +ida_ida.PREF_STACK +""" +show stack pointer? +""" + +ida_ida.SCF_ALLCMT +""" +comment all lines? +""" + +ida_ida.SCF_LINNUM +""" +show source line numbers +""" + +ida_ida.SCF_NOCMT +""" +no comments at all +""" + +ida_ida.SCF_RPTCMT +""" +show repeatable comments? +""" + +ida_ida.SCF_SHHID_FUNC +""" +show hidden functions +""" + +ida_ida.SCF_SHHID_ITEM +""" +show hidden instructions +""" + +ida_ida.SCF_SHHID_SEGM +""" +show hidden segments +""" + +ida_ida.SCF_TESTMODE +""" +testida.idc is running +""" + +ida_ida.STRF_AUTO +""" +names have 'autogenerated' bit? +""" + +ida_ida.STRF_COMMENT +""" +generate auto comment for string references? +""" + +ida_ida.STRF_GEN +""" +generate names? +""" + +ida_ida.STRF_SAVECASE +""" +preserve case of strings for identifiers +""" + +ida_ida.STRF_SERIAL +""" +generate serial names? +""" + +ida_ida.STRF_UNICODE +""" +unicode strings are present? +""" + +ida_ida.SW_SEGXRF +""" +show segments in xrefs? +""" + +ida_ida.SW_XRFFNC +""" +show function offsets? +""" + +ida_ida.SW_XRFMRK +""" +show xref type marks? +""" + +ida_ida.SW_XRFVAL +""" +show xref values? (otherwise-"...") +""" + +ida_ida.UA_MAXOP +""" +max number of operands allowed for an instruction +""" +=== ida_ida EPYDOC INJECTIONS END === +Help on class CustomIDAMemo in module ida_kernwin: + +class CustomIDAMemo(View_Hooks) + | Proxy of C++ View_Hooks class. + | + | Method resolution order: + | CustomIDAMemo + | View_Hooks + | builtins.object + | + | Methods defined here: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | __init__(self) + | __init__(self, _flags=0) -> View_Hooks + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | view_activated(self, view) + | + | view_click(self, view, ve) + | view_click(self, view, event) + | + | view_close(self, view, *args) + | view_close(self, view) + | + | view_curpos(self, view, *args) + | view_curpos(self, view) + | + | view_dblclick(self, view, ve) + | view_dblclick(self, view, event) + | + | view_deactivated(self, view) + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, view, ve) + | view_mouse_over(self, view, event) + | + | view_switched(self, view, rt) + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_View_Hooks(...) + | delete_View_Hooks(self) + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | view_created(self, *args) -> 'void' + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on __IDAPython_Completion_Util in module ida_idaapi object: + +class __IDAPython_Completion_Util(builtins.object) + | Internal utility class for auto-completion support + | + | Methods defined here: + | + | __call__(self, line, x) + | Call self as a function. + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | debug(self, *args) + | + | dir_namespace(self, m, prefix) + | + | get_candidates(self, qname, line, match_syntax_char) + | + | maybe_extend_syntactically(self, ns, name, line, syntax_char) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | QNAME_PAT = re.compile('([a-zA-Z_]([a-zA-Z0-9_\\.]*)?)') + +Help on function IDAPython_ExecScript in module ida_idaapi: + +IDAPython_ExecScript(script, g, print_error=True) + Run the specified script. + It also addresses http://code.google.com/p/idapython/issues/detail?id=42 + + This function is used by the low-level plugin code. + +Help on function IDAPython_ExecSystem in module ida_idaapi: + +IDAPython_ExecSystem(cmd) + Executes a command with popen(). + +Help on function IDAPython_FormatExc in module ida_idaapi: + +IDAPython_FormatExc(etype, value=None, tb=None, limit=None) + This function is used to format an exception given the + values returned by a PyErr_Fetch() + +Help on function IDAPython_LoadProcMod in module ida_idaapi: + +IDAPython_LoadProcMod(script, g, print_error=True) + Load processor module. + +Help on function IDAPython_UnLoadProcMod in module ida_idaapi: + +IDAPython_UnLoadProcMod(script, g, print_error=True) + Unload processor module. + +Help on class IDAPython_displayhook in module ida_idaapi: + +class IDAPython_displayhook(builtins.object) + | # ------------------------------------------------------------ + | + | Methods defined here: + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | _print_hex(self, x) + | + | displayhook(self, item) + | + | format_item(self, num_printer, storage, item) + | + | format_seq(self, num_printer, storage, item, opn, cls) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class PyIdc_cvt_int64__ in module ida_idaapi: + +class PyIdc_cvt_int64__(pyidc_cvt_helper__) + | Helper class for explicitly representing VT_INT64 values + | + | Method resolution order: + | PyIdc_cvt_int64__ + | pyidc_cvt_helper__ + | builtins.object + | + | Methods defined here: + | + | _PyIdc_cvt_int64____op = __op(self, op_n, other, rev=False) + | + | __add__(self, other) + | + | __div__(self, other) + | + | __init__(self, v) + | Initialize self. See help(type(self)) for accurate signature. + | + | __mul__(self, other) + | + | __radd__(self, other) + | + | __rdiv__(self, other) + | + | __rmul__(self, other) + | + | __rsub__(self, other) + | + | __sub__(self, other) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _PyIdc_cvt_int64____op_table = {0: 'void' + disable_script_timeout() + + + Disables the script timeout and hides the script wait box. + Calling L{set_script_timeout} will not have any effects until the script is compiled and executed again + + @return: None + +Help on function enable_extlang_python in module ida_idaapi: + +enable_extlang_python(*args) -> 'void' + enable_extlang_python(enable) + + + Enables or disables Python extlang. + When enabled, all expressions will be evaluated by Python. + @param enable: Set to True to enable, False otherwise + +Help on function enable_python_cli in module ida_idaapi: + +enable_python_cli(*args) -> 'void' + enable_python_cli(enable) + +Help on function format_basestring in module ida_idaapi: + +format_basestring(*args) -> 'PyObject *' + format_basestring(_in) -> PyObject * + +Help on function get_inf_structure in module ida_idaapi: + +get_inf_structure(*args) -> 'idainfo *' + get_inf_structure() -> idainfo + + + Returns the global variable 'inf' (an instance of idainfo structure, see ida.hpp) + +Help on class loader_input_t in module ida_idaapi: + +class loader_input_t(builtins.object) + | Proxy of C++ loader_input_t class. + | + | + | A helper class to work with linput_t related functions. + | This class is also used by file loaders scripts. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, pycapsule=None) -> loader_input_t + | + | + | Closes the file + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_loader_input_t(...) + | delete_loader_input_t(self) + | + | close(self, *args) -> 'void' + | close(self) + | + | file2base(self, *args) -> 'int' + | file2base(self, pos, ea1, ea2, patchable) -> int + | + | + | Load portion of file into the database + | This function will include (ea1..ea2) into the addressing space of the + | program (make it enabled) + | @param li: pointer ot input source + | @param pos: position in the file + | @param (ea1..ea2): range of destination linear addresses + | @param patchable: should the kernel remember correspondance of + | file offsets to linear addresses. + | @return: 1-ok,0-read error, a warning is displayed + | + | filename(self, *args) -> 'PyObject *' + | filename(self) -> PyObject * + | + | get_byte(self, *args) -> 'PyObject *' + | get_byte(self) -> PyObject * + | + | + | Reads a single byte from the file. Returns None if EOF or the read byte + | + | get_linput(self, *args) -> 'linput_t *' + | get_linput(self) -> linput_t * + | + | gets(self, *args) -> 'PyObject *' + | gets(self, len) -> PyObject * + | + | + | Reads a line from the input file. Returns the read line or None + | + | getz(self, *args) -> 'PyObject *' + | getz(self, sz, fpos=-1) -> PyObject * + | + | + | Returns a zero terminated string at the given position + | @param sz: maximum size of the string + | @param fpos: if != -1 then seek will be performed before reading + | @return: The string or None on failure. + | + | open(self, *args) -> 'bool' + | open(self, filename, remote=False) -> bool + | + | + | Opens a file (or a remote file) + | @return: Boolean + | + | open_memory(self, *args) -> 'bool' + | open_memory(self, start, size=0) -> bool + | + | + | Create a linput for process memory (By internally calling idaapi.create_memory_linput()) + | This linput will use dbg->read_memory() to read data + | @param start: starting address of the input + | @param size: size of the memory range to represent as linput + | if unknown, may be passed as 0 + | + | opened(self, *args) -> 'bool' + | opened(self) -> bool + | + | + | Checks if the file is opened or not + | + | read(self, *args) -> 'PyObject *' + | read(self, size) -> PyObject * + | + | + | Reads from the file. Returns the buffer or None + | + | readbytes(self, *args) -> 'PyObject *' + | readbytes(self, size, big_endian) -> PyObject * + | + | + | Similar to read() but it respect the endianness + | + | seek(self, *args) -> 'int64' + | seek(self, pos, whence=SEEK_SET) -> int64 + | + | + | Set input source position + | @return: the new position (not 0 as fseek!) + | + | set_linput(self, *args) -> 'void' + | set_linput(self, linput) + | + | + | Links the current loader_input_t instance to a linput_t instance + | + | size(self, *args) -> 'int64' + | size(self) -> int64 + | + | tell(self, *args) -> 'int64' + | tell(self) -> int64 + | + | + | Returns the current position + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | from_capsule(*args) -> 'loader_input_t *' + | from_capsule(pycapsule) -> loader_input_t + | + | from_fp(*args) -> 'loader_input_t *' + | from_fp(fp) -> loader_input_t + | + | + | A static method to construct an instance from a FILE* + | + | from_linput(*args) -> 'loader_input_t *' + | from_linput(linput) -> loader_input_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __idc_cvt_id__ + | loader_input_t___idc_cvt_id___get(self) -> int + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on function loader_input_t_from_capsule in module ida_idaapi: + +loader_input_t_from_capsule(*args) -> 'loader_input_t *' + loader_input_t_from_capsule(pycapsule) -> loader_input_t + +Help on function loader_input_t_from_fp in module ida_idaapi: + +loader_input_t_from_fp(*args) -> 'loader_input_t *' + loader_input_t_from_fp(fp) -> loader_input_t + +Help on function loader_input_t_from_linput in module ida_idaapi: + +loader_input_t_from_linput(*args) -> 'loader_input_t *' + loader_input_t_from_linput(linput) -> loader_input_t + +Help on function notify_when in module ida_idaapi: + +notify_when(when, callback) + Register a callback that will be called when an event happens. + @param when: one of NW_XXXX constants + @param callback: This callback prototype varies depending on the 'when' parameter: + The general callback format: + def notify_when_callback(nw_code) + In the case of NW_OPENIDB: + def notify_when_callback(nw_code, is_old_database) + @return: Boolean + +Help on class object_t in module ida_idaapi: + +class object_t(builtins.object) + | Helper class used to initialize empty objects + | + | Methods defined here: + | + | __getitem__(self, idx) + | Allow access to object attributes by index (like dictionaries) + | + | __init__(self, **kwds) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function parse_command_line3 in module ida_idaapi: + +parse_command_line3(*args) -> 'PyObject *' + parse_command_line3(cmdline) -> PyObject * + +Help on class plugin_t in module ida_idaapi: + +class plugin_t(pyidc_opaque_object_t) + | Base class for all scripted plugins. + | + | Method resolution order: + | plugin_t + | pyidc_opaque_object_t + | builtins.object + | + | Data descriptors inherited from pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on class py_clinked_object_t in module ida_idaapi: + +class py_clinked_object_t(pyidc_opaque_object_t) + | This is a utility and base class for C linked objects + | + | Method resolution order: + | py_clinked_object_t + | pyidc_opaque_object_t + | builtins.object + | + | Methods defined here: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | __init__(self, lnk=None) + | Initialize self. See help(type(self)) for accurate signature. + | + | _create_clink(self) + | Overwrite me. + | Creates a new clink + | @return: PyCapsule representing the C link + | + | _del_clink(self, lnk) + | Overwrite me. + | This method deletes the link + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | _get_clink_ptr(self) + | Overwrite me. + | Returns the C link pointer as a 64bit number + | + | assign(self, other) + | Overwrite me. + | This method allows you to assign an instance contents to anothers + | @return: Boolean + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function pycim_get_widget in module ida_idaapi: + +pycim_get_widget(*args) -> 'TWidget *' + pycim_get_widget(_self) -> TWidget * + +Help on function pycim_view_close in module ida_idaapi: + +pycim_view_close(*args) -> 'void' + pycim_view_close(_self) + +Help on function pygc_create_groups in module ida_idaapi: + +pygc_create_groups(*args) -> 'PyObject *' + pygc_create_groups(_self, groups_infos) -> PyObject * + +Help on function pygc_delete_groups in module ida_idaapi: + +pygc_delete_groups(*args) -> 'PyObject *' + pygc_delete_groups(_self, groups, new_current) -> PyObject * + +Help on function pygc_refresh in module ida_idaapi: + +pygc_refresh(*args) -> 'void' + pygc_refresh(_self) + +Help on function pygc_set_groups_visibility in module ida_idaapi: + +pygc_set_groups_visibility(*args) -> 'PyObject *' + pygc_set_groups_visibility(_self, groups, expand, new_current) -> PyObject * + +Help on class pyidc_cvt_helper__ in module ida_idaapi: + +class pyidc_cvt_helper__(builtins.object) + | This is a special helper object that helps detect which kind + | of object is this python object wrapping and how to convert it + | back and from IDC. + | This object is characterized by its special attribute and its value + | + | Methods defined here: + | + | __init__(self, cvt_id, value) + | Initialize self. See help(type(self)) for accurate signature. + | + | _pyidc_cvt_helper____get_value = __get_value(self) + | + | _pyidc_cvt_helper____set_value = __set_value(self, v) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | value + +Help on class pyidc_opaque_object_t in module ida_idaapi: + +class pyidc_opaque_object_t(builtins.object) + | This is the base class for all Python<->IDC opaque objects + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __idc_cvt_id__ = 2 + +Help on function replfun in module ida_idaapi: + +replfun(func) + +Help on function require in module ida_idaapi: + +require(modulename, package=None) + Load, or reload a module. + + When under heavy development, a user's tool might consist of multiple + modules. If those are imported using the standard 'import' mechanism, + there is no guarantee that the Python implementation will re-read + and re-evaluate the module's Python code. In fact, it usually doesn't. + What should be done instead is 'reload()'-ing that module. + + This is a simple helper function that will do just that: In case the + module doesn't exist, it 'import's it, and if it does exist, + 'reload()'s it. + + The importing module (i.e., the module calling require()) will have + the loaded module bound to its globals(), under the name 'modulename'. + (If require() is called from the command line, the importing module + will be '__main__'.) + + For more information, see: . + +Help on function set_script_timeout in module ida_idaapi: + +set_script_timeout(*args) -> 'int' + set_script_timeout(timeout) -> int + + + Changes the script timeout value. The script wait box dialog will be hidden and shown again when the timeout elapses. + See also L{disable_script_timeout}. + + @param timeout: This value is in seconds. + If this value is set to zero then the script will never timeout. + @return: Returns the old timeout value + +Help on function struct_unpack in module ida_idaapi: + +struct_unpack(buffer, signed=False, offs=0) + Unpack a buffer given its length and offset using struct.unpack_from(). + This function will know how to unpack the given buffer by using the lookup table '__struct_unpack_table' + If the buffer is of unknown length then None is returned. Otherwise the unpacked value is returned. + +Help on function get_mark_comment in module ida_idc: + +get_mark_comment(*args) -> 'PyObject *' + get_mark_comment(slot) -> PyObject * + +Help on function get_marked_pos in module ida_idc: + +get_marked_pos(*args) -> 'ea_t' + get_marked_pos(slot) -> ea_t + +Help on function mark_position in module ida_idc: + +mark_position(*args) -> 'void' + mark_position(ea, lnnum, x, y, slot, comment) + +Help on Appcall__ in module ida_idd object: + +class Appcall__(builtins.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | _Appcall____get_consts = __get_consts(self) + | + | __getattr__(self, name_or_ea) + | Allows you to call functions as if they were member functions (by returning a callable object) + | + | __getitem__(self, idx) + | Use self[func_name] syntax if the function name contains invalid characters for an attribute name + | See __getattr___ + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | UTF16(s) + | + | _Appcall____name_or_ea = __name_or_ea(name_or_ea) + | Function that accepts a name or an ea and checks if the address is enabled. + | If a name is passed then idaapi.get_name_ea() is applied to retrieve the name + | @return: + | - Returns the resolved EA or + | - Raises an exception if the address is not enabled + | + | _Appcall____typedecl_or_tinfo = __typedecl_or_tinfo(typedecl_or_tinfo, flags=None) + | Function that accepts a tinfo_t object or type declaration as a string + | If a type declaration is passed then ida_typeinf.parse_decl() is applied to prepare tinfo_t object + | @return: + | - Returns the tinfo_t object + | - Raises an exception if the declaration cannot be parsed + | + | array(type_name) + | Defines an array type. Later you need to pack() / unpack() + | + | buffer(str=None, size=0, fill='\x00') + | Creates a string buffer. The returned value (r) will be a byref object. + | Use r.value to get the contents and r.size to get the buffer's size + | + | byref(val) + | Method to create references to immutable objects + | Currently we support references to int/strings + | Objects need not be passed by reference (this will be done automatically) + | + | cleanup_appcall(tid=0) + | Equivalent to IDC's CleanupAppcall() + | + | cstr(val) + | + | get_appcall_options() + | Return the global Appcall options + | + | int64(v) + | Whenever a 64bit number is needed use this method to construct an object + | + | obj(**kwds) + | Returns an empty object or objects with attributes as passed via its keywords arguments + | + | proto(name_or_ea, proto_or_tinfo, flags=None) + | Allows you to instantiate an appcall (callable object) with the desired prototype + | @param name_or_ea: The name of the function (will be resolved with LocByName()) + | @param proto_or_tinfo: function prototype as a string or type of the function as tinfo_t object + | @return: + | - On failure it raises an exception if the prototype could not be parsed + | or the address is not resolvable + | - Returns a callbable Appcall instance with the given prototypes and flags + | + | set_appcall_options(opt) + | Method to change the Appcall options globally (not per Appcall) + | + | typedobj(typedecl_or_tinfo, ea=None) + | Returns an appcall object for a type (can be given as tinfo_t object or + | as a string declaration) + | One can then use retrieve() member method + | @param ea: Optional parameter that later can be used to retrieve the type + | @return: Appcall object or raises ValueError exception + | + | unicode = UTF16(s) + | + | valueof(name, default=0) + | Returns the numeric value of a given name string. + | If the name could not be resolved then the default value will be returned + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Consts + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | APPCALL_DEBEV = 2 + | + | APPCALL_MANUAL = 1 + | + | APPCALL_TIMEOUT = 4 + | + | __name__ = 'Appcall__' + +Help on class Appcall__ in module ida_idd: + +class Appcall__(builtins.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | _Appcall____get_consts = __get_consts(self) + | + | __getattr__(self, name_or_ea) + | Allows you to call functions as if they were member functions (by returning a callable object) + | + | __getitem__(self, idx) + | Use self[func_name] syntax if the function name contains invalid characters for an attribute name + | See __getattr___ + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | UTF16(s) + | + | _Appcall____name_or_ea = __name_or_ea(name_or_ea) + | Function that accepts a name or an ea and checks if the address is enabled. + | If a name is passed then idaapi.get_name_ea() is applied to retrieve the name + | @return: + | - Returns the resolved EA or + | - Raises an exception if the address is not enabled + | + | _Appcall____typedecl_or_tinfo = __typedecl_or_tinfo(typedecl_or_tinfo, flags=None) + | Function that accepts a tinfo_t object or type declaration as a string + | If a type declaration is passed then ida_typeinf.parse_decl() is applied to prepare tinfo_t object + | @return: + | - Returns the tinfo_t object + | - Raises an exception if the declaration cannot be parsed + | + | array(type_name) + | Defines an array type. Later you need to pack() / unpack() + | + | buffer(str=None, size=0, fill='\x00') + | Creates a string buffer. The returned value (r) will be a byref object. + | Use r.value to get the contents and r.size to get the buffer's size + | + | byref(val) + | Method to create references to immutable objects + | Currently we support references to int/strings + | Objects need not be passed by reference (this will be done automatically) + | + | cleanup_appcall(tid=0) + | Equivalent to IDC's CleanupAppcall() + | + | cstr(val) + | + | get_appcall_options() + | Return the global Appcall options + | + | int64(v) + | Whenever a 64bit number is needed use this method to construct an object + | + | obj(**kwds) + | Returns an empty object or objects with attributes as passed via its keywords arguments + | + | proto(name_or_ea, proto_or_tinfo, flags=None) + | Allows you to instantiate an appcall (callable object) with the desired prototype + | @param name_or_ea: The name of the function (will be resolved with LocByName()) + | @param proto_or_tinfo: function prototype as a string or type of the function as tinfo_t object + | @return: + | - On failure it raises an exception if the prototype could not be parsed + | or the address is not resolvable + | - Returns a callbable Appcall instance with the given prototypes and flags + | + | set_appcall_options(opt) + | Method to change the Appcall options globally (not per Appcall) + | + | typedobj(typedecl_or_tinfo, ea=None) + | Returns an appcall object for a type (can be given as tinfo_t object or + | as a string declaration) + | One can then use retrieve() member method + | @param ea: Optional parameter that later can be used to retrieve the type + | @return: Appcall object or raises ValueError exception + | + | unicode = UTF16(s) + | + | valueof(name, default=0) + | Returns the numeric value of a given name string. + | If the name could not be resolved then the default value will be returned + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Consts + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | APPCALL_DEBEV = 2 + | + | APPCALL_MANUAL = 1 + | + | APPCALL_TIMEOUT = 4 + | + | __name__ = 'Appcall__' + +Help on class Appcall_array__ in module ida_idd: + +class Appcall_array__(builtins.object) + | This class is used with Appcall.array() method + | + | Methods defined here: + | + | __init__(self, tp) + | Initialize self. See help(type(self)) for accurate signature. + | + | pack(self, L) + | Packs a list or tuple into a byref buffer + | + | try_to_convert_to_list(self, obj) + | Is this object a list? We check for the existance of attribute zero and attribute self.size-1 + | + | unpack(self, buf, as_list=True) + | Unpacks an array back into a list or an object + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class Appcall_callable__ in module ida_idd: + +class Appcall_callable__(builtins.object) + | Helper class to issue appcalls using a natural syntax: + | appcall.FunctionNameInTheDatabase(arguments, ....) + | or + | appcall["Function@8"](arguments, ...) + | or + | f8 = appcall["Function@8"] + | f8(arg1, arg2, ...) + | or + | o = appcall.obj() + | i = byref(5) + | appcall.funcname(arg1, i, "hello", o) + | + | Methods defined here: + | + | _Appcall_callable____get_ea = __get_ea(self) + | + | _Appcall_callable____get_fields = __get_fields(self) + | + | _Appcall_callable____get_options = __get_options(self) + | + | _Appcall_callable____get_size = __get_size(self) + | + | _Appcall_callable____get_tif = __get_tif(self) + | + | _Appcall_callable____get_timeout = __get_timeout(self) + | + | _Appcall_callable____get_type = __get_type(self) + | + | _Appcall_callable____set_ea = __set_ea(self, val) + | + | _Appcall_callable____set_options = __set_options(self, v) + | + | _Appcall_callable____set_timeout = __set_timeout(self, v) + | + | __call__(self, *args) + | Make object callable. We redirect execution to idaapi.appcall() + | + | __init__(self, ea, tinfo_or_typestr=None, fields=None) + | Initializes an appcall with a given function ea + | + | retrieve(self, src=None, flags=0) + | Unpacks a typed object from the database if an ea is given or from a string if a string was passed + | @param src: the address of the object or a string + | @return: Returns a tuple of boolean and object or error number (Bool, Error | Object). + | + | store(self, obj, dest_ea=None, base_ea=0, flags=0) + | Packs an object into a given ea if provided or into a string if no address was passed. + | @param obj: The object to pack + | @param dest_ea: If packing to idb this will be the store location + | @param base_ea: If packing to a buffer, this will be the base that will be used to relocate the pointers + | + | @return: + | - If packing to a string then a Tuple(Boolean, packed_string or error code) + | - If packing to the database then a return code is returned (0 is success) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | + | fields + | + | options + | + | size + | + | tif + | + | timeout + | + | type + +Help on class Appcall_consts__ in module ida_idd: + +class Appcall_consts__(builtins.object) + | Helper class used by Appcall.Consts attribute + | It is used to retrieve constants via attribute access + | + | Methods defined here: + | + | __getattr__(self, attr) + | + | __init__(self, default=None) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function appcall in module ida_idd: + +appcall(*args) -> 'PyObject *' + appcall(func_ea, tid, _type_or_none, _fields, arg_list) -> PyObject * + +Help on class bptaddr_t in module ida_idd: + +class bptaddr_t(builtins.object) + | Proxy of C++ bptaddr_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bptaddr_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bptaddr_t(...) + | delete_bptaddr_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hea + | bptaddr_t_hea_get(self) -> ea_t + | + | kea + | bptaddr_t_kea_get(self) -> ea_t + | + | thisown + | The membership flag + +Help on class call_stack_info_t in module ida_idd: + +class call_stack_info_t(builtins.object) + | Proxy of C++ call_stack_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> call_stack_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_call_stack_info_t(...) + | delete_call_stack_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | callea + | call_stack_info_t_callea_get(self) -> ea_t + | + | fp + | call_stack_info_t_fp_get(self) -> ea_t + | + | funcea + | call_stack_info_t_funcea_get(self) -> ea_t + | + | funcok + | call_stack_info_t_funcok_get(self) -> bool + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class call_stack_t in module ida_idd: + +class call_stack_t(builtins.object) + | Proxy of C++ qvector< call_stack_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'call_stack_info_t const &' + | __getitem__(self, i) -> call_stack_info_t + | + | __init__(self, *args) + | __init__(self) -> call_stack_t + | __init__(self, x) -> call_stack_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_call_stack_t(...) + | delete_call_stack_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'call_stack_info_t const &' + | at(self, _idx) -> call_stack_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< call_stack_info_t >::const_iterator' + | begin(self) -> call_stack_info_t + | begin(self) -> call_stack_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< call_stack_info_t >::const_iterator' + | end(self) -> call_stack_info_t + | end(self) -> call_stack_info_t + | + | erase(self, *args) -> 'qvector< call_stack_info_t >::iterator' + | erase(self, it) -> call_stack_info_t + | erase(self, first, last) -> call_stack_info_t + | + | extract(self, *args) -> 'call_stack_info_t *' + | extract(self) -> call_stack_info_t + | + | find(self, *args) -> 'qvector< call_stack_info_t >::const_iterator' + | find(self, x) -> call_stack_info_t + | find(self, x) -> call_stack_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=call_stack_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< call_stack_info_t >::iterator' + | insert(self, it, x) -> call_stack_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'call_stack_info_t &' + | push_back(self, x) + | push_back(self) -> call_stack_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function can_exc_continue in module ida_idd: + +can_exc_continue(*args) -> 'bool' + can_exc_continue(ev) -> bool + +Help on function cleanup_appcall in module ida_idd: + +cleanup_appcall(*args) -> 'error_t' + cleanup_appcall(tid) -> error_t + + + Cleanup after manual appcall. + + @param tid: thread to use. NO_THREAD means to use the current thread + The application state is restored as it was before calling + the last appcall(). Nested appcalls are supported. (C++: + thid_t) + @return: eOk if successful, otherwise an error code + +Help on function dbg_appcall in module ida_idd: + +dbg_appcall(*args) -> 'error_t' + dbg_appcall(retval, func_ea, tid, ptif, argv, argnum) -> error_t + + + Call a function from the debugged application. + + @param retval (C++: idc_value_t *) + @param func_ea: address to call (C++: ea_t) + @param tid: thread to use. NO_THREAD means to use the current thread + (C++: thid_t) + @param ptif: pointer to type of the function to call (C++: const + tinfo_t *) + @param argv: array of arguments (C++: idc_value_t *) + @param argnum: number of actual arguments (C++: size_t) + @return: eOk if successful, otherwise an error code + +Help on built-in function dbg_can_query in module _ida_dbg: + +dbg_can_query(...) + dbg_can_query() -> bool + +Help on function dbg_get_memory_info in module ida_idd: + +dbg_get_memory_info(*args) -> 'PyObject *' + dbg_get_memory_info() -> PyObject * + + + This function returns the memory configuration of a debugged process. + @return: + None if no debugger is active + tuple(start_ea, end_ea, name, sclass, sbase, bitness, perm) + +Help on function dbg_get_name in module ida_idd: + +dbg_get_name(*args) -> 'PyObject *' + dbg_get_name() -> PyObject * + + + This function returns the current debugger's name. + @return: Debugger name or None if no debugger is active + +Help on function dbg_get_registers in module ida_idd: + +dbg_get_registers(*args) -> 'PyObject *' + dbg_get_registers() -> PyObject * + + + This function returns the register definition from the currently loaded debugger. + Basically, it returns an array of structure similar to to idd.hpp / register_info_t + @return: + None if no debugger is loaded + tuple(name, flags, class, dtype, bit_strings, default_bit_strings_mask) + The bit_strings can be a tuple of strings or None (if the register does not have bit_strings) + +Help on function dbg_get_thread_sreg_base in module ida_idd: + +dbg_get_thread_sreg_base(*args) -> 'PyObject *' + dbg_get_thread_sreg_base(tid, sreg_value) -> PyObject * + + + Returns the segment register base value + @param tid: thread id + @param sreg_value: segment register (selector) value + @return: + - The base as an 'ea' + - Or None on failure + +Help on function dbg_read_memory in module ida_idd: + +dbg_read_memory(*args) -> 'PyObject *' + dbg_read_memory(ea, sz) -> PyObject * + + + Reads from the debugee's memory at the specified ea + @return: + - The read buffer (as a string) + - Or None on failure + +Help on function dbg_write_memory in module ida_idd: + +dbg_write_memory(*args) -> 'PyObject *' + dbg_write_memory(ea, buf) -> PyObject * + + + Writes a buffer to the debugee's memory + @return: Boolean + +Help on class debapp_attrs_t in module ida_idd: + +class debapp_attrs_t(builtins.object) + | Proxy of C++ debapp_attrs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> debapp_attrs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_debapp_attrs_t(...) + | delete_debapp_attrs_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | addrsize + | debapp_attrs_t_addrsize_get(self) -> int + | + | cbsize + | debapp_attrs_t_cbsize_get(self) -> int32 + | + | is_be + | debapp_attrs_t_is_be_get(self) -> int + | + | platform + | debapp_attrs_t_platform_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class debug_event_t in module ida_idd: + +class debug_event_t(builtins.object) + | Proxy of C++ debug_event_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> debug_event_t + | __init__(self, r) -> debug_event_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_debug_event_t(...) + | delete_debug_event_t(self) + | + | bpt(self, *args) -> 'bptaddr_t const &' + | bpt(self) -> bptaddr_t + | bpt(self) -> bptaddr_t + | + | bpt_ea(self, *args) -> 'ea_t' + | bpt_ea(self) -> ea_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | clear_all(self, *args) -> 'void' + | clear_all(self) + | + | copy(self, *args) -> 'debug_event_t &' + | copy(self, r) -> debug_event_t + | + | eid(self, *args) -> 'event_id_t' + | eid(self) -> event_id_t + | + | exc(self, *args) -> 'excinfo_t const &' + | exc(self) -> excinfo_t + | exc(self) -> excinfo_t + | + | exit_code(self, *args) -> 'int const &' + | exit_code(self) -> int const & + | + | info(self, *args) -> 'qstring const &' + | info(self) -> qstring + | info(self) -> qstring const & + | + | modinfo(self, *args) -> 'modinfo_t const &' + | modinfo(self) -> modinfo_t + | modinfo(self) -> modinfo_t + | + | set_bpt(self, *args) -> 'bptaddr_t &' + | set_bpt(self) -> bptaddr_t + | + | set_eid(self, *args) -> 'void' + | set_eid(self, id) + | + | set_exception(self, *args) -> 'excinfo_t &' + | set_exception(self) -> excinfo_t + | + | set_exit_code(self, *args) -> 'void' + | set_exit_code(self, id, code) + | + | set_info(self, *args) -> 'qstring &' + | set_info(self, id) -> qstring & + | + | set_modinfo(self, *args) -> 'modinfo_t &' + | set_modinfo(self, id) -> modinfo_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | debug_event_t_ea_get(self) -> ea_t + | + | handled + | debug_event_t_handled_get(self) -> bool + | + | pid + | debug_event_t_pid_get(self) -> pid_t + | + | thisown + | The membership flag + | + | tid + | debug_event_t_tid_get(self) -> thid_t + +Help on class exception_info_t in module ida_idd: + +class exception_info_t(builtins.object) + | Proxy of C++ exception_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> exception_info_t + | __init__(self, _code, _flags, _name, _desc) -> exception_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_exception_info_t(...) + | delete_exception_info_t(self) + | + | break_on(self, *args) -> 'bool' + | break_on(self) -> bool + | + | handle(self, *args) -> 'bool' + | handle(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | exception_info_t_code_get(self) -> uint + | + | desc + | exception_info_t_desc_get(self) -> qstring * + | + | flags + | exception_info_t_flags_get(self) -> uint32 + | + | name + | exception_info_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class excinfo_t in module ida_idd: + +class excinfo_t(builtins.object) + | Proxy of C++ excinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> excinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_excinfo_t(...) + | delete_excinfo_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | can_cont + | excinfo_t_can_cont_get(self) -> bool + | + | code + | excinfo_t_code_get(self) -> uint32 + | + | ea + | excinfo_t_ea_get(self) -> ea_t + | + | info + | excinfo_t_info_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class excvec_t in module ida_idd: + +class excvec_t(builtins.object) + | Proxy of C++ qvector< exception_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'exception_info_t const &' + | __getitem__(self, i) -> exception_info_t + | + | __init__(self, *args) + | __init__(self) -> excvec_t + | __init__(self, x) -> excvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_excvec_t(...) + | delete_excvec_t(self) + | + | at(self, *args) -> 'exception_info_t const &' + | at(self, _idx) -> exception_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< exception_info_t >::const_iterator' + | begin(self) -> exception_info_t + | begin(self) -> exception_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< exception_info_t >::const_iterator' + | end(self) -> exception_info_t + | end(self) -> exception_info_t + | + | erase(self, *args) -> 'qvector< exception_info_t >::iterator' + | erase(self, it) -> exception_info_t + | erase(self, first, last) -> exception_info_t + | + | extract(self, *args) -> 'exception_info_t *' + | extract(self) -> exception_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=exception_info_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< exception_info_t >::iterator' + | insert(self, it, x) -> exception_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'exception_info_t &' + | push_back(self, x) + | push_back(self) -> exception_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function get_event_bpt_hea in module ida_idd: + +get_event_bpt_hea(*args) -> 'ea_t' + get_event_bpt_hea(ev) -> ea_t + +Help on function get_event_exc_code in module ida_idd: + +get_event_exc_code(*args) -> 'uint' + get_event_exc_code(ev) -> uint + +Help on function get_event_exc_ea in module ida_idd: + +get_event_exc_ea(*args) -> 'ea_t' + get_event_exc_ea(ev) -> ea_t + +Help on function get_event_exc_info in module ida_idd: + +get_event_exc_info(*args) -> 'size_t' + get_event_exc_info(ev) -> str + +Help on function get_event_info in module ida_idd: + +get_event_info(*args) -> 'size_t' + get_event_info(ev) -> str + +Help on function get_event_module_base in module ida_idd: + +get_event_module_base(*args) -> 'ea_t' + get_event_module_base(ev) -> ea_t + +Help on function get_event_module_name in module ida_idd: + +get_event_module_name(*args) -> 'size_t' + get_event_module_name(ev) -> str + +Help on function get_event_module_size in module ida_idd: + +get_event_module_size(*args) -> 'asize_t' + get_event_module_size(ev) -> asize_t + +Help on class meminfo_vec_t in module ida_idd: + +class meminfo_vec_t(builtins.object) + | Proxy of C++ qvector< memory_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'memory_info_t const &' + | __getitem__(self, i) -> memory_info_t + | + | __init__(self, *args) + | __init__(self) -> meminfo_vec_t + | __init__(self, x) -> meminfo_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_meminfo_vec_t(...) + | delete_meminfo_vec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'memory_info_t const &' + | at(self, _idx) -> memory_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | begin(self) -> memory_info_t + | begin(self) -> memory_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | end(self) -> memory_info_t + | end(self) -> memory_info_t + | + | erase(self, *args) -> 'qvector< memory_info_t >::iterator' + | erase(self, it) -> memory_info_t + | erase(self, first, last) -> memory_info_t + | + | extract(self, *args) -> 'memory_info_t *' + | extract(self) -> memory_info_t + | + | find(self, *args) -> 'qvector< memory_info_t >::const_iterator' + | find(self, x) -> memory_info_t + | find(self, x) -> memory_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=memory_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< memory_info_t >::iterator' + | insert(self, it, x) -> memory_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'memory_info_t &' + | push_back(self, x) + | push_back(self) -> memory_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class memory_info_t in module ida_idd: + +class memory_info_t(ida_range.range_t) + | Proxy of C++ memory_info_t class. + | + | Method resolution order: + | memory_info_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> memory_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_memory_info_t(...) + | delete_memory_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bitness + | memory_info_t_bitness_get(self) -> uchar + | + | name + | memory_info_t_name_get(self) -> qstring * + | + | perm + | memory_info_t_perm_get(self) -> uchar + | + | sbase + | memory_info_t_sbase_get(self) -> ea_t + | + | sclass + | memory_info_t_sclass_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + +Help on class modinfo_t in module ida_idd: + +class modinfo_t(builtins.object) + | Proxy of C++ modinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> modinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_modinfo_t(...) + | delete_modinfo_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | modinfo_t_base_get(self) -> ea_t + | + | name + | modinfo_t_name_get(self) -> qstring * + | + | rebase_to + | modinfo_t_rebase_to_get(self) -> ea_t + | + | size + | modinfo_t_size_get(self) -> asize_t + | + | thisown + | The membership flag + +Help on class process_info_t in module ida_idd: + +class process_info_t(builtins.object) + | Proxy of C++ process_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> process_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_process_info_t(...) + | delete_process_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | process_info_t_name_get(self) -> qstring * + | + | pid + | process_info_t_pid_get(self) -> pid_t + | + | thisown + | The membership flag + +Help on class procinfo_vec_t in module ida_idd: + +class procinfo_vec_t(builtins.object) + | Proxy of C++ qvector< process_info_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'process_info_t const &' + | __getitem__(self, i) -> process_info_t + | + | __init__(self, *args) + | __init__(self) -> procinfo_vec_t + | __init__(self, x) -> procinfo_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_procinfo_vec_t(...) + | delete_procinfo_vec_t(self) + | + | at(self, *args) -> 'process_info_t const &' + | at(self, _idx) -> process_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< process_info_t >::const_iterator' + | begin(self) -> process_info_t + | begin(self) -> process_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< process_info_t >::const_iterator' + | end(self) -> process_info_t + | end(self) -> process_info_t + | + | erase(self, *args) -> 'qvector< process_info_t >::iterator' + | erase(self, it) -> process_info_t + | erase(self, first, last) -> process_info_t + | + | extract(self, *args) -> 'process_info_t *' + | extract(self) -> process_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=process_info_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< process_info_t >::iterator' + | insert(self, it, x) -> process_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'process_info_t &' + | push_back(self, x) + | push_back(self) -> process_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class register_info_t in module ida_idd: + +class register_info_t(builtins.object) + | Proxy of C++ register_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> register_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_register_info_t(...) + | delete_register_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bit_strings + | register_info_t_bit_strings_get(self) -> char const *const * + | + | default_bit_strings_mask + | register_info_t_default_bit_strings_mask_get(self) -> uval_t + | + | dtype + | register_info_t_dtype_get(self) -> op_dtype_t + | + | flags + | register_info_t_flags_get(self) -> uint32 + | + | name + | register_info_t_name_get(self) -> char const * + | + | register_class + | register_info_t_register_class_get(self) -> register_class_t + | + | thisown + | The membership flag + +Help on class regval_t in module ida_idd: + +class regval_t(builtins.object) + | Proxy of C++ regval_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> regval_t + | __init__(self, r) -> regval_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_regval_t(...) + | delete_regval_t(self) + | + | bytes(self, *args) -> 'bytevec_t const &' + | bytes(self) -> bytevec_t + | bytes(self) -> bytevec_t const & + | + | clear(self, *args) -> 'void' + | clear(self) + | + | get_data(self, *args) -> 'void const *' + | get_data(self) + | get_data(self) -> void const * + | + | get_data_size(self, *args) -> 'size_t' + | get_data_size(self) -> size_t + | + | set_bytes(self, *args) -> 'bytevec_t &' + | set_bytes(self, data, size) + | set_bytes(self, v) + | set_bytes(self) -> bytevec_t & + | + | set_float(self, *args) -> 'void' + | set_float(self, x) + | + | set_int(self, *args) -> 'void' + | set_int(self, x) + | + | set_unavailable(self, *args) -> 'void' + | set_unavailable(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fval + | regval_t_fval_get(self) -> uint16 [6] + | + | ival + | regval_t_ival_get(self) -> uint64 + | + | rvtype + | regval_t_rvtype_get(self) -> int32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class scattered_segm_t in module ida_idd: + +class scattered_segm_t(ida_range.range_t) + | Proxy of C++ scattered_segm_t class. + | + | Method resolution order: + | scattered_segm_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> scattered_segm_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_scattered_segm_t(...) + | delete_scattered_segm_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | name + | scattered_segm_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on function set_debug_event_code in module ida_idd: + +set_debug_event_code(*args) -> 'void' + set_debug_event_code(ev, id) + +Help on class thread_name_t in module ida_idd: + +class thread_name_t(builtins.object) + | Proxy of C++ thread_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> thread_name_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_thread_name_t(...) + | delete_thread_name_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | thread_name_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | tid + | thread_name_t_tid_get(self) -> thid_t + +=== ida_idd EPYDOC INJECTIONS === +ida_idd.EXC_BREAK +""" +break on the exception +""" + +ida_idd.EXC_HANDLE +""" +should be handled by the debugger? +""" + +ida_idd.EXC_MSG +""" +instead of a warning, log the exception to the output window +""" + +ida_idd.EXC_SILENT +""" +do not warn or log to the output window +""" + +ida_idd.IDD_INTERFACE_VERSION +""" +The IDD interface version number. +""" + +ida_idd.NO_PROCESS +""" +No process. +""" + +ida_idd.NO_THREAD +""" +No thread. in 'PROCESS_STARTED' this value can be used to specify that +the main thread has not been created. It will be initialized later by +a 'THREAD_STARTED' event. +""" + +ida_idd.REGISTER_ADDRESS +""" +may contain an address +""" + +ida_idd.REGISTER_CS +""" +code segment +""" + +ida_idd.REGISTER_CUSTFMT +""" +register should be displayed using a custom data format. the format +name is in bit_strings[0] the corresponding 'regval_t' will use +'bytevec_t' +""" + +ida_idd.REGISTER_FP +""" +frame pointer +""" + +ida_idd.REGISTER_IP +""" +instruction pointer +""" + +ida_idd.REGISTER_NOLF +""" +allowing the next register to be displayed to its right (on the same +line) + +displays this register without returning to the next line +""" + +ida_idd.REGISTER_READONLY +""" +the user can't modify the current value of this register +""" + +ida_idd.REGISTER_SP +""" +stack pointer +""" + +ida_idd.REGISTER_SS +""" +stack segment +""" + +ida_idd.RVT_FLOAT +""" +floating point +""" + +ida_idd.RVT_INT +""" +integer +""" + +ida_idd.RVT_UNAVAILABLE +""" +other values mean custom data type + +unavailable +""" +=== ida_idd EPYDOC INJECTIONS END === +Help on function AssembleLine in module ida_idp: + +AssembleLine(*args) -> 'PyObject *' + AssembleLine(ea, cs, ip, use32, nonnul_line) -> PyObject * + + + Assemble an instruction to a string (display a warning if an error is found) + + @param ea: linear address of instruction + @param cs: cs of instruction + @param ip: ip of instruction + @param use32: is 32bit segment + @param line: line to assemble + @return: + - None on failure + - or a string containing the assembled instruction + +Help on class IDB_Hooks in module ida_idp: + +class IDB_Hooks(builtins.object) + | Proxy of C++ IDB_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> IDB_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_IDB_Hooks(...) + | delete_IDB_Hooks(self) + | + | allsegs_moved(self, *args) -> 'void' + | allsegs_moved(self, info) + | + | auto_empty(self, *args) -> 'void' + | auto_empty(self) + | + | auto_empty_finally(self, *args) -> 'void' + | auto_empty_finally(self) + | + | bookmark_changed(self, *args) -> 'void' + | bookmark_changed(self, index, pos, desc) + | + | byte_patched(self, *args) -> 'void' + | byte_patched(self, ea, old_value) + | + | callee_addr_changed(self, *args) -> 'void' + | callee_addr_changed(self, ea, callee) + | + | changing_cmt(self, *args) -> 'void' + | changing_cmt(self, ea, repeatable_cmt, newcmt) + | + | changing_enum_bf(self, *args) -> 'void' + | changing_enum_bf(self, id, new_bf) + | + | changing_enum_cmt(self, *args) -> 'void' + | changing_enum_cmt(self, id, repeatable, newcmt) + | + | changing_op_ti(self, *args) -> 'void' + | changing_op_ti(self, ea, n, new_type, new_fnames) + | + | changing_op_type(self, *args) -> 'void' + | changing_op_type(self, ea, n, opinfo) + | + | changing_range_cmt(self, *args) -> 'void' + | changing_range_cmt(self, kind, a, cmt, repeatable) + | + | changing_segm_class(self, *args) -> 'void' + | changing_segm_class(self, s) + | + | changing_segm_end(self, *args) -> 'void' + | changing_segm_end(self, s, new_end, segmod_flags) + | + | changing_segm_name(self, *args) -> 'void' + | changing_segm_name(self, s, oldname) + | + | changing_segm_start(self, *args) -> 'void' + | changing_segm_start(self, s, new_start, segmod_flags) + | + | changing_struc_align(self, *args) -> 'void' + | changing_struc_align(self, sptr) + | + | changing_struc_cmt(self, *args) -> 'void' + | changing_struc_cmt(self, struc_id, repeatable, newcmt) + | + | changing_struc_member(self, *args) -> 'void' + | changing_struc_member(self, sptr, mptr, flag, ti, nbytes) + | + | changing_ti(self, *args) -> 'void' + | changing_ti(self, ea, new_type, new_fnames) + | + | closebase(self, *args) -> 'void' + | closebase(self) + | + | cmt_changed(self, *args) -> 'void' + | cmt_changed(self, ea, repeatable_cmt) + | + | compiler_changed(self, *args) -> 'void' + | compiler_changed(self) + | + | deleting_enum(self, *args) -> 'void' + | deleting_enum(self, id) + | + | deleting_enum_member(self, *args) -> 'void' + | deleting_enum_member(self, id, cid) + | + | deleting_func(self, *args) -> 'void' + | deleting_func(self, pfn) + | + | deleting_func_tail(self, *args) -> 'void' + | deleting_func_tail(self, pfn, tail) + | + | deleting_segm(self, *args) -> 'void' + | deleting_segm(self, start_ea) + | + | deleting_struc(self, *args) -> 'void' + | deleting_struc(self, sptr) + | + | deleting_struc_member(self, *args) -> 'void' + | deleting_struc_member(self, sptr, mptr) + | + | deleting_tryblks(self, *args) -> 'void' + | deleting_tryblks(self, range) + | + | destroyed_items(self, *args) -> 'void' + | destroyed_items(self, ea1, ea2, will_disable_range) + | + | determined_main(self, *args) -> 'void' + | determined_main(self, main) + | + | enum_bf_changed(self, *args) -> 'void' + | enum_bf_changed(self, id) + | + | enum_cmt_changed(self, *args) -> 'void' + | enum_cmt_changed(self, id, repeatable) + | + | enum_created(self, *args) -> 'void' + | enum_created(self, id) + | + | enum_deleted(self, *args) -> 'void' + | enum_deleted(self, id) + | + | enum_member_created(self, *args) -> 'void' + | enum_member_created(self, id, cid) + | + | enum_member_deleted(self, *args) -> 'void' + | enum_member_deleted(self, id, cid) + | + | enum_renamed(self, *args) -> 'void' + | enum_renamed(self, id) + | + | expanding_struc(self, *args) -> 'void' + | expanding_struc(self, sptr, offset, delta) + | + | extlang_changed(self, *args) -> 'void' + | extlang_changed(self, kind, el, idx) + | + | extra_cmt_changed(self, *args) -> 'void' + | extra_cmt_changed(self, ea, line_idx, cmt) + | + | flow_chart_created(self, *args) -> 'void' + | flow_chart_created(self, fc) + | + | frame_deleted(self, *args) -> 'void' + | frame_deleted(self, pfn) + | + | func_added(self, *args) -> 'void' + | func_added(self, pfn) + | + | func_noret_changed(self, *args) -> 'void' + | func_noret_changed(self, pfn) + | + | func_tail_appended(self, *args) -> 'void' + | func_tail_appended(self, pfn, tail) + | + | func_tail_deleted(self, *args) -> 'void' + | func_tail_deleted(self, pfn, tail_ea) + | + | func_updated(self, *args) -> 'void' + | func_updated(self, pfn) + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | idasgn_loaded(self, *args) -> 'void' + | idasgn_loaded(self, short_sig_name) + | + | item_color_changed(self, *args) -> 'void' + | item_color_changed(self, ea, color) + | + | kernel_config_loaded(self, *args) -> 'void' + | kernel_config_loaded(self) + | + | loader_finished(self, *args) -> 'void' + | loader_finished(self, li, neflags, filetypename) + | + | local_types_changed(self, *args) -> 'void' + | local_types_changed(self) + | + | make_code(self, *args) -> 'void' + | make_code(self, insn) + | + | make_data(self, *args) -> 'void' + | make_data(self, ea, flags, tid, len) + | + | op_ti_changed(self, *args) -> 'void' + | op_ti_changed(self, ea, n, type, fnames) + | + | op_type_changed(self, *args) -> 'void' + | op_type_changed(self, ea, n) + | + | range_cmt_changed(self, *args) -> 'void' + | range_cmt_changed(self, kind, a, cmt, repeatable) + | + | renamed(self, *args) -> 'void' + | renamed(self, ea, new_name, local_name) + | + | renaming_enum(self, *args) -> 'void' + | renaming_enum(self, id, is_enum, newname) + | + | renaming_struc(self, *args) -> 'void' + | renaming_struc(self, id, oldname, newname) + | + | renaming_struc_member(self, *args) -> 'void' + | renaming_struc_member(self, sptr, mptr, newname) + | + | savebase(self, *args) -> 'void' + | savebase(self) + | + | segm_added(self, *args) -> 'void' + | segm_added(self, s) + | + | segm_attrs_updated(self, *args) -> 'void' + | segm_attrs_updated(self, s) + | + | segm_class_changed(self, *args) -> 'void' + | segm_class_changed(self, s, sclass) + | + | segm_deleted(self, *args) -> 'void' + | segm_deleted(self, start_ea, end_ea) + | + | segm_end_changed(self, *args) -> 'void' + | segm_end_changed(self, s, oldend) + | + | segm_moved(self, *args) -> 'void' + | segm_moved(self, _from, to, size, changed_netmap) + | + | segm_name_changed(self, *args) -> 'void' + | segm_name_changed(self, s, name) + | + | segm_start_changed(self, *args) -> 'void' + | segm_start_changed(self, s, oldstart) + | + | set_func_end(self, *args) -> 'void' + | set_func_end(self, pfn, new_end) + | + | set_func_start(self, *args) -> 'void' + | set_func_start(self, pfn, new_start) + | + | sgr_changed(self, *args) -> 'void' + | sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) + | + | sgr_deleted(self, *args) -> 'void' + | sgr_deleted(self, start_ea, end_ea, regnum) + | + | stkpnts_changed(self, *args) -> 'void' + | stkpnts_changed(self, pfn) + | + | struc_align_changed(self, *args) -> 'void' + | struc_align_changed(self, sptr) + | + | struc_cmt_changed(self, *args) -> 'void' + | struc_cmt_changed(self, struc_id, repeatable_cmt) + | + | struc_created(self, *args) -> 'void' + | struc_created(self, struc_id) + | + | struc_deleted(self, *args) -> 'void' + | struc_deleted(self, struc_id) + | + | struc_expanded(self, *args) -> 'void' + | struc_expanded(self, sptr) + | + | struc_member_changed(self, *args) -> 'void' + | struc_member_changed(self, sptr, mptr) + | + | struc_member_created(self, *args) -> 'void' + | struc_member_created(self, sptr, mptr) + | + | struc_member_deleted(self, *args) -> 'void' + | struc_member_deleted(self, sptr, member_id, offset) + | + | struc_member_renamed(self, *args) -> 'void' + | struc_member_renamed(self, sptr, mptr) + | + | struc_renamed(self, *args) -> 'void' + | struc_renamed(self, sptr) + | + | tail_owner_changed(self, *args) -> 'void' + | tail_owner_changed(self, tail, owner_func, old_owner) + | + | thunk_func_created(self, *args) -> 'void' + | thunk_func_created(self, pfn) + | + | ti_changed(self, *args) -> 'void' + | ti_changed(self, ea, type, fnames) + | + | tryblks_updated(self, *args) -> 'void' + | tryblks_updated(self, tbv) + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | updating_tryblks(self, *args) -> 'void' + | updating_tryblks(self, tbv) + | + | upgraded(self, *args) -> 'void' + | upgraded(self, _from) + | + | ---------------------------------------------------------------------- + | 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 + +Help on class IDP_Hooks in module ida_idp: + +class IDP_Hooks(builtins.object) + | Proxy of C++ IDP_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> IDP_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_IDP_Hooks(...) + | delete_IDP_Hooks(self) + | + | ev_add_cref(self, *args) -> 'int' + | ev_add_cref(self, _from, to, type) -> int + | + | ev_add_dref(self, *args) -> 'int' + | ev_add_dref(self, _from, to, type) -> int + | + | ev_adjust_argloc(self, *args) -> 'int' + | ev_adjust_argloc(self, argloc, optional_type, size) -> int + | + | ev_adjust_libfunc_ea(self, *args) -> 'int' + | ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int + | + | ev_adjust_refinfo(self, *args) -> 'int' + | ev_adjust_refinfo(self, ri, ea, n, fd) -> int + | + | ev_ana_insn(self, *args) -> 'bool' + | ev_ana_insn(self, out) -> bool + | + | + | Analyzes and decodes an instruction at insn.ea + | - insn.itype must be set >= idaapi.CUSTOM_CMD_ITYPE + | - insn.size must be set to the instruction length + | + | @return: Boolean + | - False if the instruction is not recognized + | - True if the instruction was decoded. 'insn' should be filled in that case. + | + | ev_analyze_prolog(self, *args) -> 'int' + | ev_analyze_prolog(self, ea) -> int + | + | ev_arg_addrs_ready(self, *args) -> 'int' + | ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int + | + | ev_assemble(self, *args) -> 'PyObject *' + | ev_assemble(self, ea, cs, ip, use32, line) -> PyObject * + | + | + | Assembles an instruction + | + | @param ea: linear address of instruction + | @param cs: cs of instruction + | @param ip: ip of instruction + | @param use32: is 32bit segment? + | @param line: line to assemble + | + | @return: - None to let the underlying processor module assemble the line + | - or a string containing the assembled buffer + | + | ev_auto_queue_empty(self, *args) -> 'void' + | ev_auto_queue_empty(self, type) + | + | ev_calc_arglocs(self, *args) -> 'int' + | ev_calc_arglocs(self, fti) -> int + | + | ev_calc_cdecl_purged_bytes(self, *args) -> 'int' + | ev_calc_cdecl_purged_bytes(self, ea) -> int + | + | ev_calc_next_eas(self, *args) -> 'int' + | ev_calc_next_eas(self, res, insn, over) -> int + | + | ev_calc_purged_bytes(self, *args) -> 'int' + | ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int + | + | ev_calc_retloc(self, *args) -> 'int' + | ev_calc_retloc(self, retloc, rettype, cc) -> int + | + | ev_calc_spdelta(self, *args) -> 'int' + | ev_calc_spdelta(self, spdelta, insn) -> int + | + | ev_calc_step_over(self, *args) -> 'int' + | ev_calc_step_over(self, target, ip) -> int + | + | ev_calc_switch_cases(self, *args) -> 'int' + | ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int + | + | ev_calc_varglocs(self, *args) -> 'int' + | ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int + | + | ev_calcrel(self, *args) -> 'int' + | ev_calcrel(self) -> int + | + | ev_can_have_type(self, *args) -> 'int' + | ev_can_have_type(self, op) -> int + | + | ev_clean_tbit(self, *args) -> 'int' + | ev_clean_tbit(self, ea, getreg, regvalues) -> int + | + | ev_cmp_operands(self, *args) -> 'int' + | ev_cmp_operands(self, op1, op2) -> int + | + | ev_coagulate(self, *args) -> 'int' + | ev_coagulate(self, start_ea) -> int + | + | ev_coagulate_dref(self, *args) -> 'int' + | ev_coagulate_dref(self, _from, to, may_define, code_ea) -> int + | + | ev_create_flat_group(self, *args) -> 'int' + | ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int + | + | ev_create_func_frame(self, *args) -> 'int' + | ev_create_func_frame(self, pfn) -> int + | + | ev_create_switch_xrefs(self, *args) -> 'int' + | ev_create_switch_xrefs(self, jumpea, si) -> int + | + | ev_creating_segm(self, *args) -> 'int' + | ev_creating_segm(self, seg) -> int + | + | ev_decorate_name(self, *args) -> 'PyObject *' + | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * + | + | ev_del_cref(self, *args) -> 'int' + | ev_del_cref(self, _from, to, expand) -> int + | + | ev_del_dref(self, *args) -> 'int' + | ev_del_dref(self, _from, to) -> int + | + | ev_delay_slot_insn(self, *args) -> 'PyObject *' + | ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * + | + | ev_demangle_name(self, *args) -> 'PyObject *' + | ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * + | + | ev_emu_insn(self, *args) -> 'bool' + | ev_emu_insn(self, insn) -> bool + | + | + | Emulate instruction, create cross-references, plan to analyze + | subsequent instructions, modify flags etc. Upon entrance to this function + | all information about the instruction is in 'insn' structure. + | + | @return: Boolean (whether this instruction has been emulated or not) + | + | ev_endbinary(self, *args) -> 'int' + | ev_endbinary(self, ok) -> int + | + | ev_ending_undo(self, *args) -> 'int' + | ev_ending_undo(self, action_name, is_undo) -> int + | + | ev_equal_reglocs(self, *args) -> 'int' + | ev_equal_reglocs(self, a1, a2) -> int + | + | ev_extract_address(self, *args) -> 'int' + | ev_extract_address(self, out_ea, screen_ea, string, position) -> int + | + | ev_find_op_value(self, *args) -> 'PyObject *' + | ev_find_op_value(self, pinsn, opn) -> PyObject * + | + | ev_find_reg_value(self, *args) -> 'PyObject *' + | ev_find_reg_value(self, pinsn, reg) -> PyObject * + | + | ev_func_bounds(self, *args) -> 'void' + | ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea) + | + | ev_gen_asm_or_lst(self, *args) -> 'void' + | ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) + | + | ev_gen_map_file(self, *args) -> 'int' + | ev_gen_map_file(self, nlines, fp) -> int + | + | ev_gen_regvar_def(self, *args) -> 'int' + | ev_gen_regvar_def(self, outctx, v) -> int + | + | ev_gen_src_file_lnnum(self, *args) -> 'int' + | ev_gen_src_file_lnnum(self, outctx, file, lnnum) -> int + | + | ev_gen_stkvar_def(self, *args) -> 'int' + | ev_gen_stkvar_def(self, outctx, mptr, v) -> int + | + | ev_get_abi_info(self, *args) -> 'int' + | ev_get_abi_info(self, abi_names, abi_opts, comp) -> int + | + | ev_get_autocmt(self, *args) -> 'PyObject *' + | ev_get_autocmt(self, insn) -> PyObject * + | + | ev_get_bg_color(self, *args) -> 'int' + | ev_get_bg_color(self, ea) -> int or None + | + | ev_get_cc_regs(self, *args) -> 'int' + | ev_get_cc_regs(self, regs, cc) -> int + | + | ev_get_code16_mode(self, *args) -> 'int' + | ev_get_code16_mode(self, ea) -> int + | + | ev_get_dbr_opnum(self, *args) -> 'int' + | ev_get_dbr_opnum(self, opnum, insn) -> int + | + | ev_get_default_enum_size(self, *args) -> 'int' + | ev_get_default_enum_size(self, cm) -> int + | + | ev_get_frame_retsize(self, *args) -> 'int' + | ev_get_frame_retsize(self, frsize, pfn) -> int + | + | ev_get_macro_insn_head(self, *args) -> 'int' + | ev_get_macro_insn_head(self, head, ip) -> int + | + | ev_get_operand_string(self, *args) -> 'PyObject *' + | ev_get_operand_string(self, insn, opnum) -> PyObject * + | + | ev_get_reg_info(self, *args) -> 'int' + | ev_get_reg_info(self, main_regname, bitrange, regname) -> int + | + | ev_get_reg_name(self, *args) -> 'PyObject *' + | ev_get_reg_name(self, reg, width, reghi) -> PyObject * + | + | ev_get_simd_types(self, *args) -> 'int' + | ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int + | + | ev_get_stkarg_offset(self, *args) -> 'int' + | ev_get_stkarg_offset(self) -> int + | + | ev_get_stkvar_scale_factor(self, *args) -> 'int' + | ev_get_stkvar_scale_factor(self) -> int + | + | ev_getreg(self, *args) -> 'int' + | ev_getreg(self, regval, regnum) -> int + | + | ev_init(self, *args) -> 'int' + | ev_init(self, idp_modname) -> int + | + | ev_insn_reads_tbit(self, *args) -> 'int' + | ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int + | + | ev_is_align_insn(self, *args) -> 'int' + | ev_is_align_insn(self, ea) -> int + | + | ev_is_alloca_probe(self, *args) -> 'int' + | ev_is_alloca_probe(self, ea) -> int + | + | ev_is_basic_block_end(self, *args) -> 'int' + | ev_is_basic_block_end(self, insn, call_insn_stops_block) -> int + | + | ev_is_call_insn(self, *args) -> 'int' + | ev_is_call_insn(self, insn) -> int + | + | + | Is the instruction a "call"? + | + | @param insn: instruction + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_cond_insn(self, *args) -> 'int' + | ev_is_cond_insn(self, insn) -> int + | + | ev_is_far_jump(self, *args) -> 'int' + | ev_is_far_jump(self, icode) -> int + | + | ev_is_indirect_jump(self, *args) -> 'int' + | ev_is_indirect_jump(self, insn) -> int + | + | ev_is_insn_table_jump(self, *args) -> 'int' + | ev_is_insn_table_jump(self, insn) -> int + | + | ev_is_jump_func(self, *args) -> 'int' + | ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int + | + | ev_is_ret_insn(self, *args) -> 'int' + | ev_is_ret_insn(self, insn, strict) -> int + | + | + | Is the instruction a "return"? + | + | @param insn: instruction + | @param strict: - True: report only ret instructions + | False: include instructions like "leave" which begins the function epilog + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_sane_insn(self, *args) -> 'int' + | ev_is_sane_insn(self, insn, no_crefs) -> int + | + | + | is the instruction sane for the current file type? + | @param insn: the instruction + | @param no_crefs: + | - 1: the instruction has no code refs to it. + | ida just tries to convert unexplored bytes + | to an instruction (but there is no other + | reason to convert them into an instruction) + | - 0: the instruction is created because + | of some coderef, user request or another + | weighty reason. + | @return: >=0-ok, <0-no, the instruction isn't likely to appear in the program + | + | ev_is_sp_based(self, *args) -> 'int' + | ev_is_sp_based(self, mode, insn, op) -> int + | + | ev_is_switch(self, *args) -> 'int' + | ev_is_switch(self, si, insn) -> int + | + | ev_last_cb_before_loader(self, *args) -> 'int' + | ev_last_cb_before_loader(self) -> int + | + | ev_loader(self, *args) -> 'int' + | ev_loader(self) -> int + | + | ev_lower_func_type(self, *args) -> 'int' + | ev_lower_func_type(self, argnums, fti) -> int + | + | ev_max_ptr_size(self, *args) -> 'int' + | ev_max_ptr_size(self) -> int + | + | ev_may_be_func(self, *args) -> 'int' + | ev_may_be_func(self, insn, state) -> int + | + | + | Can a function start here? + | @param insn: the instruction + | @param state: autoanalysis phase + | 0: creating functions + | 1: creating chunks + | + | @return: integer (probability 0..100) + | + | ev_may_show_sreg(self, *args) -> 'int' + | ev_may_show_sreg(self, current_ea) -> int + | + | ev_moving_segm(self, *args) -> 'int' + | ev_moving_segm(self, seg, to, flags) -> int + | + | ev_newasm(self, *args) -> 'int' + | ev_newasm(self, asmnum) -> int + | + | ev_newbinary(self, *args) -> 'int' + | ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes) -> int + | + | ev_newfile(self, *args) -> 'int' + | ev_newfile(self, fname) -> int + | + | ev_newprc(self, *args) -> 'int' + | ev_newprc(self, pnum, keep_cfg) -> int + | + | ev_next_exec_insn(self, *args) -> 'int' + | ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int + | + | ev_oldfile(self, *args) -> 'int' + | ev_oldfile(self, fname) -> int + | + | ev_out_assumes(self, *args) -> 'int' + | ev_out_assumes(self, outctx) -> int + | + | ev_out_data(self, *args) -> 'int' + | ev_out_data(self, outctx, analyze_only) -> int + | + | ev_out_footer(self, *args) -> 'void' + | ev_out_footer(self, outctx) + | + | ev_out_header(self, *args) -> 'void' + | ev_out_header(self, outctx) + | + | ev_out_insn(self, *args) -> 'bool' + | ev_out_insn(self, outctx) -> bool + | + | + | Outputs the instruction defined in 'ctx.insn' + | + | @return: Boolean (whether this instruction can be outputted or not) + | + | ev_out_label(self, *args) -> 'int' + | ev_out_label(self, outctx, colored_name) -> int + | + | ev_out_mnem(self, *args) -> 'int' + | ev_out_mnem(self, outctx) -> int + | + | ev_out_operand(self, *args) -> 'bool' + | ev_out_operand(self, outctx, op) -> bool + | + | + | Notification to generate operand text. + | If False was returned, then the standard operand output function will be called. + | + | this notification may use out_...() functions to form the operand text + | + | @return: Boolean (whether the operand has been outputted or not) + | + | ev_out_segend(self, *args) -> 'int' + | ev_out_segend(self, outctx, seg) -> int + | + | ev_out_segstart(self, *args) -> 'int' + | ev_out_segstart(self, outctx, seg) -> int + | + | ev_out_special_item(self, *args) -> 'int' + | ev_out_special_item(self, outctx, segtype) -> int + | + | ev_realcvt(self, *args) -> 'int' + | ev_realcvt(self, m, e, swt) -> int + | + | ev_rename(self, *args) -> 'int' + | ev_rename(self, ea, new_name) -> int + | + | + | The kernel is going to rename a byte. + | + | @param ea: Address + | @param new_name: The new name + | + | @return: + | - If returns value <0, then the kernel should + | not rename it. See also the 'renamed' event + | + | ev_replaying_undo(self, *args) -> 'int' + | ev_replaying_undo(self, action_name, vec, is_undo) -> int + | + | ev_set_code16_mode(self, *args) -> 'int' + | ev_set_code16_mode(self, ea, code16) -> int + | + | ev_set_idp_options(self, *args) -> 'int' + | ev_set_idp_options(self, keyword, value_type, value, errbuf, idb_loaded) -> int + | + | ev_set_proc_options(self, *args) -> 'int' + | ev_set_proc_options(self, options, confidence) -> int + | + | ev_setup_til(self, *args) -> 'void' + | ev_setup_til(self) + | + | ev_shadow_args_size(self, *args) -> 'int' + | ev_shadow_args_size(self, shadow_args_size, pfn) -> int + | + | ev_str2reg(self, *args) -> 'int' + | ev_str2reg(self, regname) -> int + | + | ev_term(self, *args) -> 'int' + | ev_term(self) -> int + | + | ev_treat_hindering_item(self, *args) -> 'int' + | ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> int + | + | ev_undefine(self, *args) -> 'int' + | ev_undefine(self, ea) -> int + | + | + | An item in the database (insn or data) is being deleted + | @param ea: Address + | @return: + | - 1 - do not delete srranges at the item end + | - 0 - srranges can be deleted + | + | ev_use_arg_types(self, *args) -> 'int' + | ev_use_arg_types(self, ea, fti, rargs) -> int + | + | ev_use_regarg_type(self, *args) -> 'PyObject *' + | ev_use_regarg_type(self, ea, rargs) -> PyObject * + | + | ev_use_stkarg_type(self, *args) -> 'int' + | ev_use_stkarg_type(self, ea, arg) -> int + | + | ev_validate_flirt_func(self, *args) -> 'int' + | ev_validate_flirt_func(self, start_ea, funcname) -> int + | + | ev_verify_noreturn(self, *args) -> 'int' + | ev_verify_noreturn(self, pfn) -> int + | + | ev_verify_sp(self, *args) -> 'int' + | ev_verify_sp(self, pfn) -> int + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | + | Creates an IDP hook + | + | @return: Boolean true on success + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | + | Removes the IDP hook + | @return: Boolean true on success + | + | ---------------------------------------------------------------------- + | 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 + +Help on class __ph in module ida_idp: + +class __ph(builtins.object) + | # ---------------------------------------------------------------------- + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cnbits + | + | dnbits + | + | flag + | + | icode_return + | + | id + | + | instruc + | + | instruc_end + | + | instruc_start + | + | reg_code_sreg + | + | reg_data_sreg + | + | reg_first_sreg + | + | reg_last_sreg + | + | regnames + | + | segreg_size + | + | tbyte_size + | + | version + +Help on class _notify_when_dispatcher_t in module ida_idp: + +class _notify_when_dispatcher_t(builtins.object) + | Methods defined here: + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | _find(self, fun) + | + | dispatch(self, slot, *args) + | + | notify_when(self, when, fun) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _IDB_Hooks = + | Proxy of C++ IDB_Hooks class. + | + | _IDP_Hooks = + | Proxy of C++ IDP_Hooks class. + | + | _callback_t = + +Help on class _processor_t_Trampoline_IDB_Hooks in module ida_idp: + +class _processor_t_Trampoline_IDB_Hooks(IDB_Hooks) + | Proxy of C++ IDB_Hooks class. + | + | Method resolution order: + | _processor_t_Trampoline_IDB_Hooks + | IDB_Hooks + | builtins.object + | + | Methods defined here: + | + | __init__(self, proc) + | __init__(self, _flags=0) -> IDB_Hooks + | + | _processor_t_Trampoline_IDB_Hooks__dummy = __dummy(self, *args) + | + | _processor_t_Trampoline_IDB_Hooks__make_parent_caller = __make_parent_caller(self, key) + | + | ---------------------------------------------------------------------- + | Methods inherited from IDB_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_IDB_Hooks(...) + | delete_IDB_Hooks(self) + | + | allsegs_moved(self, *args) -> 'void' + | allsegs_moved(self, info) + | + | auto_empty(self, *args) -> 'void' + | auto_empty(self) + | + | auto_empty_finally(self, *args) -> 'void' + | auto_empty_finally(self) + | + | bookmark_changed(self, *args) -> 'void' + | bookmark_changed(self, index, pos, desc) + | + | byte_patched(self, *args) -> 'void' + | byte_patched(self, ea, old_value) + | + | callee_addr_changed(self, *args) -> 'void' + | callee_addr_changed(self, ea, callee) + | + | changing_cmt(self, *args) -> 'void' + | changing_cmt(self, ea, repeatable_cmt, newcmt) + | + | changing_enum_bf(self, *args) -> 'void' + | changing_enum_bf(self, id, new_bf) + | + | changing_enum_cmt(self, *args) -> 'void' + | changing_enum_cmt(self, id, repeatable, newcmt) + | + | changing_op_ti(self, *args) -> 'void' + | changing_op_ti(self, ea, n, new_type, new_fnames) + | + | changing_op_type(self, *args) -> 'void' + | changing_op_type(self, ea, n, opinfo) + | + | changing_range_cmt(self, *args) -> 'void' + | changing_range_cmt(self, kind, a, cmt, repeatable) + | + | changing_segm_class(self, *args) -> 'void' + | changing_segm_class(self, s) + | + | changing_segm_end(self, *args) -> 'void' + | changing_segm_end(self, s, new_end, segmod_flags) + | + | changing_segm_name(self, *args) -> 'void' + | changing_segm_name(self, s, oldname) + | + | changing_segm_start(self, *args) -> 'void' + | changing_segm_start(self, s, new_start, segmod_flags) + | + | changing_struc_align(self, *args) -> 'void' + | changing_struc_align(self, sptr) + | + | changing_struc_cmt(self, *args) -> 'void' + | changing_struc_cmt(self, struc_id, repeatable, newcmt) + | + | changing_struc_member(self, *args) -> 'void' + | changing_struc_member(self, sptr, mptr, flag, ti, nbytes) + | + | changing_ti(self, *args) -> 'void' + | changing_ti(self, ea, new_type, new_fnames) + | + | closebase(self, *args) -> 'void' + | closebase(self) + | + | cmt_changed(self, *args) -> 'void' + | cmt_changed(self, ea, repeatable_cmt) + | + | compiler_changed(self, *args) -> 'void' + | compiler_changed(self) + | + | deleting_enum(self, *args) -> 'void' + | deleting_enum(self, id) + | + | deleting_enum_member(self, *args) -> 'void' + | deleting_enum_member(self, id, cid) + | + | deleting_func(self, *args) -> 'void' + | deleting_func(self, pfn) + | + | deleting_func_tail(self, *args) -> 'void' + | deleting_func_tail(self, pfn, tail) + | + | deleting_segm(self, *args) -> 'void' + | deleting_segm(self, start_ea) + | + | deleting_struc(self, *args) -> 'void' + | deleting_struc(self, sptr) + | + | deleting_struc_member(self, *args) -> 'void' + | deleting_struc_member(self, sptr, mptr) + | + | deleting_tryblks(self, *args) -> 'void' + | deleting_tryblks(self, range) + | + | destroyed_items(self, *args) -> 'void' + | destroyed_items(self, ea1, ea2, will_disable_range) + | + | determined_main(self, *args) -> 'void' + | determined_main(self, main) + | + | enum_bf_changed(self, *args) -> 'void' + | enum_bf_changed(self, id) + | + | enum_cmt_changed(self, *args) -> 'void' + | enum_cmt_changed(self, id, repeatable) + | + | enum_created(self, *args) -> 'void' + | enum_created(self, id) + | + | enum_deleted(self, *args) -> 'void' + | enum_deleted(self, id) + | + | enum_member_created(self, *args) -> 'void' + | enum_member_created(self, id, cid) + | + | enum_member_deleted(self, *args) -> 'void' + | enum_member_deleted(self, id, cid) + | + | enum_renamed(self, *args) -> 'void' + | enum_renamed(self, id) + | + | expanding_struc(self, *args) -> 'void' + | expanding_struc(self, sptr, offset, delta) + | + | extlang_changed(self, *args) -> 'void' + | extlang_changed(self, kind, el, idx) + | + | extra_cmt_changed(self, *args) -> 'void' + | extra_cmt_changed(self, ea, line_idx, cmt) + | + | flow_chart_created(self, *args) -> 'void' + | flow_chart_created(self, fc) + | + | frame_deleted(self, *args) -> 'void' + | frame_deleted(self, pfn) + | + | func_added(self, *args) -> 'void' + | func_added(self, pfn) + | + | func_noret_changed(self, *args) -> 'void' + | func_noret_changed(self, pfn) + | + | func_tail_appended(self, *args) -> 'void' + | func_tail_appended(self, pfn, tail) + | + | func_tail_deleted(self, *args) -> 'void' + | func_tail_deleted(self, pfn, tail_ea) + | + | func_updated(self, *args) -> 'void' + | func_updated(self, pfn) + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | idasgn_loaded(self, *args) -> 'void' + | idasgn_loaded(self, short_sig_name) + | + | item_color_changed(self, *args) -> 'void' + | item_color_changed(self, ea, color) + | + | kernel_config_loaded(self, *args) -> 'void' + | kernel_config_loaded(self) + | + | loader_finished(self, *args) -> 'void' + | loader_finished(self, li, neflags, filetypename) + | + | local_types_changed(self, *args) -> 'void' + | local_types_changed(self) + | + | make_code(self, *args) -> 'void' + | make_code(self, insn) + | + | make_data(self, *args) -> 'void' + | make_data(self, ea, flags, tid, len) + | + | op_ti_changed(self, *args) -> 'void' + | op_ti_changed(self, ea, n, type, fnames) + | + | op_type_changed(self, *args) -> 'void' + | op_type_changed(self, ea, n) + | + | range_cmt_changed(self, *args) -> 'void' + | range_cmt_changed(self, kind, a, cmt, repeatable) + | + | renamed(self, *args) -> 'void' + | renamed(self, ea, new_name, local_name) + | + | renaming_enum(self, *args) -> 'void' + | renaming_enum(self, id, is_enum, newname) + | + | renaming_struc(self, *args) -> 'void' + | renaming_struc(self, id, oldname, newname) + | + | renaming_struc_member(self, *args) -> 'void' + | renaming_struc_member(self, sptr, mptr, newname) + | + | savebase(self, *args) -> 'void' + | savebase(self) + | + | segm_added(self, *args) -> 'void' + | segm_added(self, s) + | + | segm_attrs_updated(self, *args) -> 'void' + | segm_attrs_updated(self, s) + | + | segm_class_changed(self, *args) -> 'void' + | segm_class_changed(self, s, sclass) + | + | segm_deleted(self, *args) -> 'void' + | segm_deleted(self, start_ea, end_ea) + | + | segm_end_changed(self, *args) -> 'void' + | segm_end_changed(self, s, oldend) + | + | segm_moved(self, *args) -> 'void' + | segm_moved(self, _from, to, size, changed_netmap) + | + | segm_name_changed(self, *args) -> 'void' + | segm_name_changed(self, s, name) + | + | segm_start_changed(self, *args) -> 'void' + | segm_start_changed(self, s, oldstart) + | + | set_func_end(self, *args) -> 'void' + | set_func_end(self, pfn, new_end) + | + | set_func_start(self, *args) -> 'void' + | set_func_start(self, pfn, new_start) + | + | sgr_changed(self, *args) -> 'void' + | sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) + | + | sgr_deleted(self, *args) -> 'void' + | sgr_deleted(self, start_ea, end_ea, regnum) + | + | stkpnts_changed(self, *args) -> 'void' + | stkpnts_changed(self, pfn) + | + | struc_align_changed(self, *args) -> 'void' + | struc_align_changed(self, sptr) + | + | struc_cmt_changed(self, *args) -> 'void' + | struc_cmt_changed(self, struc_id, repeatable_cmt) + | + | struc_created(self, *args) -> 'void' + | struc_created(self, struc_id) + | + | struc_deleted(self, *args) -> 'void' + | struc_deleted(self, struc_id) + | + | struc_expanded(self, *args) -> 'void' + | struc_expanded(self, sptr) + | + | struc_member_changed(self, *args) -> 'void' + | struc_member_changed(self, sptr, mptr) + | + | struc_member_created(self, *args) -> 'void' + | struc_member_created(self, sptr, mptr) + | + | struc_member_deleted(self, *args) -> 'void' + | struc_member_deleted(self, sptr, member_id, offset) + | + | struc_member_renamed(self, *args) -> 'void' + | struc_member_renamed(self, sptr, mptr) + | + | struc_renamed(self, *args) -> 'void' + | struc_renamed(self, sptr) + | + | tail_owner_changed(self, *args) -> 'void' + | tail_owner_changed(self, tail, owner_func, old_owner) + | + | thunk_func_created(self, *args) -> 'void' + | thunk_func_created(self, pfn) + | + | ti_changed(self, *args) -> 'void' + | ti_changed(self, ea, type, fnames) + | + | tryblks_updated(self, *args) -> 'void' + | tryblks_updated(self, tbv) + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | updating_tryblks(self, *args) -> 'void' + | updating_tryblks(self, tbv) + | + | upgraded(self, *args) -> 'void' + | upgraded(self, _from) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from IDB_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on class asm_t in module ida_idp: + +class asm_t(builtins.object) + | Proxy of C++ asm_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> asm_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_asm_t(...) + | delete_asm_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | a_align + | asm_t_a_align_get(self) -> char const * + | + | a_ascii + | asm_t_a_ascii_get(self) -> char const * + | + | a_band + | asm_t_a_band_get(self) -> char const * + | + | a_bnot + | asm_t_a_bnot_get(self) -> char const * + | + | a_bor + | asm_t_a_bor_get(self) -> char const * + | + | a_bss + | asm_t_a_bss_get(self) -> char const * + | + | a_byte + | asm_t_a_byte_get(self) -> char const * + | + | a_comdef + | asm_t_a_comdef_get(self) -> char const * + | + | a_curip + | asm_t_a_curip_get(self) -> char const * + | + | a_double + | asm_t_a_double_get(self) -> char const * + | + | a_dups + | asm_t_a_dups_get(self) -> char const * + | + | a_dword + | asm_t_a_dword_get(self) -> char const * + | + | a_equ + | asm_t_a_equ_get(self) -> char const * + | + | a_extrn + | asm_t_a_extrn_get(self) -> char const * + | + | a_float + | asm_t_a_float_get(self) -> char const * + | + | a_include_fmt + | asm_t_a_include_fmt_get(self) -> char const * + | + | a_mod + | asm_t_a_mod_get(self) -> char const * + | + | a_oword + | asm_t_a_oword_get(self) -> char const * + | + | a_packreal + | asm_t_a_packreal_get(self) -> char const * + | + | a_public + | asm_t_a_public_get(self) -> char const * + | + | a_qword + | asm_t_a_qword_get(self) -> char const * + | + | a_rva + | asm_t_a_rva_get(self) -> char const * + | + | a_seg + | asm_t_a_seg_get(self) -> char const * + | + | a_shl + | asm_t_a_shl_get(self) -> char const * + | + | a_shr + | asm_t_a_shr_get(self) -> char const * + | + | a_sizeof_fmt + | asm_t_a_sizeof_fmt_get(self) -> char const * + | + | a_tbyte + | asm_t_a_tbyte_get(self) -> char const * + | + | a_vstruc_fmt + | asm_t_a_vstruc_fmt_get(self) -> char const * + | + | a_weak + | asm_t_a_weak_get(self) -> char const * + | + | a_word + | asm_t_a_word_get(self) -> char const * + | + | a_xor + | asm_t_a_xor_get(self) -> char const * + | + | a_yword + | asm_t_a_yword_get(self) -> char const * + | + | accsep + | asm_t_accsep_get(self) -> char + | + | ascsep + | asm_t_ascsep_get(self) -> char + | + | cmnt + | asm_t_cmnt_get(self) -> char const * + | + | cmnt2 + | asm_t_cmnt2_get(self) -> char const * + | + | end + | asm_t_end_get(self) -> char const * + | + | esccodes + | asm_t_esccodes_get(self) -> char const * + | + | flag + | asm_t_flag_get(self) -> uint32 + | + | flag2 + | asm_t_flag2_get(self) -> uint32 + | + | header + | asm_t_header_get(self) -> char const *const * + | + | help + | asm_t_help_get(self) -> help_t + | + | high16 + | asm_t_high16_get(self) -> char const * + | + | high8 + | asm_t_high8_get(self) -> char const * + | + | lbrace + | asm_t_lbrace_get(self) -> char + | + | low16 + | asm_t_low16_get(self) -> char const * + | + | low8 + | asm_t_low8_get(self) -> char const * + | + | name + | asm_t_name_get(self) -> char const * + | + | origin + | asm_t_origin_get(self) -> char const * + | + | rbrace + | asm_t_rbrace_get(self) -> char + | + | thisown + | The membership flag + | + | uflag + | asm_t_uflag_get(self) -> uint16 + +Help on function assemble in module ida_idp: + +assemble(*args) -> 'bool' + assemble(ea, cs, ip, use32, line) -> bool + + + Assemble an instruction into the database (display a warning if an error is found) + @param ea: linear address of instruction + @param cs: cs of instruction + @param ip: ip of instruction + @param use32: is 32bit segment? + @param line: line to assemble + + @return: Boolean. True on success. + +Help on function cfg_get_cc_header_path in module ida_idp: + +cfg_get_cc_header_path(*args) -> 'char const *' + cfg_get_cc_header_path(compid) -> char const * + +Help on function cfg_get_cc_parm in module ida_idp: + +cfg_get_cc_parm(*args) -> 'char const *' + cfg_get_cc_parm(compid, name) -> char const * + +Help on function cfg_get_cc_predefined_macros in module ida_idp: + +cfg_get_cc_predefined_macros(*args) -> 'char const *' + cfg_get_cc_predefined_macros(compid) -> char const * + +Help on function delay_slot_insn in module ida_idp: + +delay_slot_insn(*args) -> 'bool' + delay_slot_insn(ea, bexec, fexec) -> bool + + + Helper function to get the delay slot instruction. + + + @param ea (C++: ea_t *) + @param bexec (C++: bool *) + @param fexec (C++: bool *) + +Help on function gen_idb_event in module ida_idp: + +gen_idb_event(*args) -> 'void' + gen_idb_event(code) + + + the kernel will use this function to generate idb_events + + + @param code (C++: idb_event::event_code_t) + +Help on function get_idb_notifier_addr in module ida_idp: + +get_idb_notifier_addr(*args) -> 'PyObject *' + get_idb_notifier_addr(arg1) -> PyObject * + +Help on function get_idb_notifier_ud_addr in module ida_idp: + +get_idb_notifier_ud_addr(*args) -> 'PyObject *' + get_idb_notifier_ud_addr(hooks) -> PyObject * + +Help on function get_idp_name in module ida_idp: + +get_idp_name(*args) -> 'size_t' + get_idp_name() -> str + + + Get name of the current processor module. The name is derived from the + file name. For example, for IBM PC the module is named "pc.w32" + (windows version), then the module name is "PC" (uppercase). If no + processor module is loaded, this function will return NULL + +Help on function get_idp_notifier_addr in module ida_idp: + +get_idp_notifier_addr(*args) -> 'PyObject *' + get_idp_notifier_addr(arg1) -> PyObject * + +Help on function get_idp_notifier_ud_addr in module ida_idp: + +get_idp_notifier_ud_addr(*args) -> 'PyObject *' + get_idp_notifier_ud_addr(hooks) -> PyObject * + +Help on function get_reg_info in module ida_idp: + +get_reg_info(*args) -> 'char const *' + get_reg_info(regname, bitrange) -> char const * + + + Get register information - useful for registers like al, ah, dil, etc. + + @param regname (C++: const char *) + @param bitrange (C++: bitrange_t *) + @return: NULL no such register + +Help on function get_reg_name in module ida_idp: + +get_reg_name(*args) -> 'qstring *' + get_reg_name(reg, width, reghi=-1) -> str + + + Get text representation of a register. For most processors this + function will just return \ph{reg_names}[reg]. If the processor module + has implemented processor_t::get_reg_name, it will be used instead + + @param reg: internal register number as defined in the processor + module (C++: int) + @param width: register width in bytes (C++: size_t) + @param reghi: if specified, then this function will return the + register pair (C++: int) + @return: length of register name in bytes or -1 if failure + +Help on function has_cf_chg in module ida_idp: + +has_cf_chg(*args) -> 'bool' + has_cf_chg(feature, opnum) -> bool + + + Does an instruction with the specified feature modify the i-th + operand? + + + @param feature (C++: uint32) + @param opnum (C++: uint) + +Help on function has_cf_use in module ida_idp: + +has_cf_use(*args) -> 'bool' + has_cf_use(feature, opnum) -> bool + + + Does an instruction with the specified feature use a value of the i-th + operand? + + + @param feature (C++: uint32) + @param opnum (C++: uint) + +Help on function has_insn_feature in module ida_idp: + +has_insn_feature(*args) -> 'bool' + has_insn_feature(icode, bit) -> bool + + + Does the specified instruction have the specified feature? + + + @param icode (C++: int) + @param bit (C++: uint32) + +Help on function is_align_insn in module ida_idp: + +is_align_insn(*args) -> 'int' + is_align_insn(ea) -> int + + + If the instruction at 'ea' looks like an alignment instruction, return + its length in bytes. Otherwise return 0. + + @param ea (C++: ea_t) + +Help on function is_basic_block_end in module ida_idp: + +is_basic_block_end(*args) -> 'bool' + is_basic_block_end(insn, call_insn_stops_block) -> bool + + + Is the instruction the end of a basic block? + + + @param insn (C++: const insn_t &) + @param call_insn_stops_block (C++: bool) + +Help on function is_call_insn in module ida_idp: + +is_call_insn(*args) -> 'bool' + is_call_insn(insn) -> bool + + + Is the instruction a "call"? + + + @param insn (C++: const insn_t &) + +Help on function is_indirect_jump_insn in module ida_idp: + +is_indirect_jump_insn(*args) -> 'bool' + is_indirect_jump_insn(insn) -> bool + + + Is the instruction an indirect jump? + + + @param insn (C++: const insn_t &) + +Help on function is_ret_insn in module ida_idp: + +is_ret_insn(*args) -> 'bool' + is_ret_insn(insn, strict=True) -> bool + + + Is the instruction a "return"? + + + @param insn (C++: const insn_t &) + @param strict (C++: bool) + +Help on function parse_reg_name in module ida_idp: + +parse_reg_name(*args) -> 'bool' + parse_reg_name(ri, regname) -> bool + + + Get register info by name. + + @param ri: result (C++: reg_info_t *) + @param regname: name of register (C++: const char *) + @return: success + +Help on __ph in module ida_idp object: + +class __ph(builtins.object) + | # ---------------------------------------------------------------------- + | + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cnbits + | + | dnbits + | + | flag + | + | icode_return + | + | id + | + | instruc + | + | instruc_end + | + | instruc_start + | + | reg_code_sreg + | + | reg_data_sreg + | + | reg_first_sreg + | + | reg_last_sreg + | + | regnames + | + | segreg_size + | + | tbyte_size + | + | version + +Help on function ph_calcrel in module ida_idp: + +ph_calcrel(*args) -> 'bytevec_t *' + ph_calcrel(ea) + +Help on function ph_find_op_value in module ida_idp: + +ph_find_op_value(*args) -> 'unsigned-ea-like-numeric-type *'↗ + ph_find_op_value(insn, op) -> ssize_t + +Help on function ph_find_reg_value in module ida_idp: + +ph_find_reg_value(*args) -> 'unsigned-ea-like-numeric-type *'↗ + ph_find_reg_value(insn, reg) -> ssize_t + +Help on function ph_get_cnbits in module ida_idp: + +ph_get_cnbits(*args) -> 'size_t' + ph_get_cnbits() -> size_t + + + Returns the 'ph.cnbits' + +Help on function ph_get_dnbits in module ida_idp: + +ph_get_dnbits(*args) -> 'size_t' + ph_get_dnbits() -> size_t + + + Returns the 'ph.dnbits' + +Help on function ph_get_flag in module ida_idp: + +ph_get_flag(*args) -> 'size_t' + ph_get_flag() -> size_t + + + Returns the 'ph.flag' + +Help on function ph_get_icode_return in module ida_idp: + +ph_get_icode_return(*args) -> 'size_t' + ph_get_icode_return() -> size_t + + + Returns the 'ph.icode_return' + +Help on function ph_get_id in module ida_idp: + +ph_get_id(*args) -> 'size_t' + ph_get_id() -> size_t + + + Returns the 'ph.id' field + +Help on function ph_get_instruc in module ida_idp: + +ph_get_instruc(*args) -> 'PyObject *' + ph_get_instruc() -> PyObject * + + + Returns a list of tuples (instruction_name, instruction_feature) containing the + instructions list as defined in he processor module + +Help on function ph_get_instruc_end in module ida_idp: + +ph_get_instruc_end(*args) -> 'size_t' + ph_get_instruc_end() -> size_t + + + Returns the 'ph.instruc_end' + +Help on function ph_get_instruc_start in module ida_idp: + +ph_get_instruc_start(*args) -> 'size_t' + ph_get_instruc_start() -> size_t + + + Returns the 'ph.instruc_start' + +Help on function ph_get_operand_info in module ida_idp: + +ph_get_operand_info(*args) -> 'PyObject *' + ph_get_operand_info(ea, n) -> PyObject * + + + Returns the operand information given an ea and operand number. + + @param ea: address + @param n: operand number + + @return: Returns an idd_opinfo_t as a tuple: (modified, ea, reg_ival, regidx, value_size). + Please refer to idd_opinfo_t structure in the SDK. + +Help on function ph_get_reg_code_sreg in module ida_idp: + +ph_get_reg_code_sreg(*args) -> 'size_t' + ph_get_reg_code_sreg() -> size_t + + + Returns the 'ph.reg_code_sreg' + +Help on function ph_get_reg_data_sreg in module ida_idp: + +ph_get_reg_data_sreg(*args) -> 'size_t' + ph_get_reg_data_sreg() -> size_t + + + Returns the 'ph.reg_data_sreg' + +Help on function ph_get_reg_first_sreg in module ida_idp: + +ph_get_reg_first_sreg(*args) -> 'size_t' + ph_get_reg_first_sreg() -> size_t + + + Returns the 'ph.reg_first_sreg' + +Help on function ph_get_reg_last_sreg in module ida_idp: + +ph_get_reg_last_sreg(*args) -> 'size_t' + ph_get_reg_last_sreg() -> size_t + + + Returns the 'ph.reg_last_sreg' + +Help on function ph_get_regnames in module ida_idp: + +ph_get_regnames(*args) -> 'PyObject *' + ph_get_regnames() -> PyObject * + + + Returns the list of register names as defined in the processor module + +Help on function ph_get_segreg_size in module ida_idp: + +ph_get_segreg_size(*args) -> 'size_t' + ph_get_segreg_size() -> size_t + + + Returns the 'ph.segreg_size' + +Help on function ph_get_tbyte_size in module ida_idp: + +ph_get_tbyte_size(*args) -> 'size_t' + ph_get_tbyte_size() -> size_t + + + Returns the 'ph.tbyte_size' field as defined in he processor module + +Help on function ph_get_version in module ida_idp: + +ph_get_version(*args) -> 'size_t' + ph_get_version() -> size_t + + + Returns the 'ph.version' + +Help on class processor_t in module ida_idp: + +class processor_t(IDP_Hooks) + | Proxy of C++ IDP_Hooks class. + | + | Method resolution order: + | processor_t + | IDP_Hooks + | builtins.object + | + | Methods defined here: + | + | __init__(self) + | __init__(self, _flags=0) -> IDP_Hooks + | + | _get_idb_notifier_addr(self) + | + | _get_idb_notifier_ud_addr(self) + | + | _get_idp_notifier_addr(self) + | + | _get_idp_notifier_ud_addr(self) + | + | _get_notify(self, what, unimp_val=0, imp_forced_val=None, add_prefix=True, mandatory_impl=None) + | This helper is used to implement backward-compatibility + | of pre IDA 7.3 processor_t interfaces. + | + | _make_forced_value_wrapper(self, val, meth=None) + | + | _make_int_returning_wrapper(self, meth, intval=0) + | + | auto_empty(self, *args) + | + | auto_empty_finally(self, *args) + | + | closebase(self, *args) + | + | compiler_changed(self, *args) + | + | deleting_func(self, pfn) + | + | determined_main(self, *args) + | + | ev_ana_insn(self, *args) + | ev_ana_insn(self, out) -> bool + | + | + | Analyzes and decodes an instruction at insn.ea + | - insn.itype must be set >= idaapi.CUSTOM_CMD_ITYPE + | - insn.size must be set to the instruction length + | + | @return: Boolean + | - False if the instruction is not recognized + | - True if the instruction was decoded. 'insn' should be filled in that case. + | + | ev_assemble(self, *args) + | ev_assemble(self, ea, cs, ip, use32, line) -> PyObject * + | + | + | Assembles an instruction + | + | @param ea: linear address of instruction + | @param cs: cs of instruction + | @param ip: ip of instruction + | @param use32: is 32bit segment? + | @param line: line to assemble + | + | @return: - None to let the underlying processor module assemble the line + | - or a string containing the assembled buffer + | + | ev_auto_queue_empty(self, *args) + | ev_auto_queue_empty(self, type) + | + | ev_calc_step_over(self, target, ip) + | ev_calc_step_over(self, target, ip) -> int + | + | ev_can_have_type(self, *args) + | ev_can_have_type(self, op) -> int + | + | ev_cmp_operands(self, *args) + | ev_cmp_operands(self, op1, op2) -> int + | + | ev_coagulate(self, *args) + | ev_coagulate(self, start_ea) -> int + | + | ev_coagulate_dref(self, from_ea, to_ea, may_define, _code_ea) + | ev_coagulate_dref(self, _from, to, may_define, code_ea) -> int + | + | ev_create_func_frame(self, pfn) + | ev_create_func_frame(self, pfn) -> int + | + | ev_create_switch_xrefs(self, *args) + | ev_create_switch_xrefs(self, jumpea, si) -> int + | + | ev_creating_segm(self, s) + | ev_creating_segm(self, seg) -> int + | + | ev_emu_insn(self, *args) + | ev_emu_insn(self, insn) -> bool + | + | + | Emulate instruction, create cross-references, plan to analyze + | subsequent instructions, modify flags etc. Upon entrance to this function + | all information about the instruction is in 'insn' structure. + | + | @return: Boolean (whether this instruction has been emulated or not) + | + | ev_endbinary(self, *args) + | ev_endbinary(self, ok) -> int + | + | ev_func_bounds(self, _possible_return_code, pfn, max_func_end_ea) + | ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea) + | + | ev_gen_map_file(self, nlines, fp) + | ev_gen_map_file(self, nlines, fp) -> int + | + | ev_gen_regvar_def(self, ctx, v) + | ev_gen_regvar_def(self, outctx, v) -> int + | + | ev_gen_src_file_lnnum(self, *args) + | ev_gen_src_file_lnnum(self, outctx, file, lnnum) -> int + | + | ev_get_autocmt(self, *args) + | ev_get_autocmt(self, insn) -> PyObject * + | + | ev_get_frame_retsize(self, frsize, pfn) + | ev_get_frame_retsize(self, frsize, pfn) -> int + | + | ev_get_operand_string(self, buf, insn, opnum) + | ev_get_operand_string(self, insn, opnum) -> PyObject * + | + | ev_is_align_insn(self, *args) + | ev_is_align_insn(self, ea) -> int + | + | ev_is_alloca_probe(self, *args) + | ev_is_alloca_probe(self, ea) -> int + | + | ev_is_basic_block_end(self, *args) + | ev_is_basic_block_end(self, insn, call_insn_stops_block) -> int + | + | ev_is_call_insn(self, *args) + | ev_is_call_insn(self, insn) -> int + | + | + | Is the instruction a "call"? + | + | @param insn: instruction + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_far_jump(self, *args) + | ev_is_far_jump(self, icode) -> int + | + | ev_is_indirect_jump(self, *args) + | ev_is_indirect_jump(self, insn) -> int + | + | ev_is_insn_table_jump(self, *args) + | ev_is_insn_table_jump(self, insn) -> int + | + | ev_is_ret_insn(self, *args) + | ev_is_ret_insn(self, insn, strict) -> int + | + | + | Is the instruction a "return"? + | + | @param insn: instruction + | @param strict: - True: report only ret instructions + | False: include instructions like "leave" which begins the function epilog + | @return: 0-unknown, 1-yes, -1-no + | + | ev_is_sane_insn(self, *args) + | ev_is_sane_insn(self, insn, no_crefs) -> int + | + | + | is the instruction sane for the current file type? + | @param insn: the instruction + | @param no_crefs: + | - 1: the instruction has no code refs to it. + | ida just tries to convert unexplored bytes + | to an instruction (but there is no other + | reason to convert them into an instruction) + | - 0: the instruction is created because + | of some coderef, user request or another + | weighty reason. + | @return: >=0-ok, <0-no, the instruction isn't likely to appear in the program + | + | ev_is_sp_based(self, mode, insn, op) + | ev_is_sp_based(self, mode, insn, op) -> int + | + | ev_is_switch(self, *args) + | ev_is_switch(self, si, insn) -> int + | + | ev_may_be_func(self, *args) + | ev_may_be_func(self, insn, state) -> int + | + | + | Can a function start here? + | @param insn: the instruction + | @param state: autoanalysis phase + | 0: creating functions + | 1: creating chunks + | + | @return: integer (probability 0..100) + | + | ev_may_show_sreg(self, *args) + | ev_may_show_sreg(self, current_ea) -> int + | + | ev_moving_segm(self, s, to_ea, flags) + | ev_moving_segm(self, seg, to, flags) -> int + | + | ev_newbinary(self, *args) + | ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes) -> int + | + | ev_newfile(self, *args) + | ev_newfile(self, fname) -> int + | + | ev_newprc(self, *args) + | ev_newprc(self, pnum, keep_cfg) -> int + | + | ev_oldfile(self, *args) + | ev_oldfile(self, fname) -> int + | + | ev_out_assumes(self, *args) + | ev_out_assumes(self, outctx) -> int + | + | ev_out_data(self, *args) + | ev_out_data(self, outctx, analyze_only) -> int + | + | ev_out_footer(self, *args) + | ev_out_footer(self, outctx) + | + | ev_out_header(self, *args) + | ev_out_header(self, outctx) + | + | ev_out_insn(self, *args) + | ev_out_insn(self, outctx) -> bool + | + | + | Outputs the instruction defined in 'ctx.insn' + | + | @return: Boolean (whether this instruction can be outputted or not) + | + | ev_out_label(self, *args) + | ev_out_label(self, outctx, colored_name) -> int + | + | ev_out_mnem(self, *args) + | ev_out_mnem(self, outctx) -> int + | + | ev_out_operand(self, *args) + | ev_out_operand(self, outctx, op) -> bool + | + | + | Notification to generate operand text. + | If False was returned, then the standard operand output function will be called. + | + | this notification may use out_...() functions to form the operand text + | + | @return: Boolean (whether the operand has been outputted or not) + | + | ev_out_segend(self, ctx, s) + | ev_out_segend(self, outctx, seg) -> int + | + | ev_out_segstart(self, ctx, s) + | ev_out_segstart(self, outctx, seg) -> int + | + | ev_out_special_item(self, *args) + | ev_out_special_item(self, outctx, segtype) -> int + | + | ev_rename(self, *args) + | ev_rename(self, ea, new_name) -> int + | + | + | The kernel is going to rename a byte. + | + | @param ea: Address + | @param new_name: The new name + | + | @return: + | - If returns value <0, then the kernel should + | not rename it. See also the 'renamed' event + | + | ev_set_idp_options(self, keyword, value_type, value) + | ev_set_idp_options(self, keyword, value_type, value, errbuf, idb_loaded) -> int + | + | ev_set_proc_options(self, *args) + | ev_set_proc_options(self, options, confidence) -> int + | + | ev_str2reg(self, *args) + | ev_str2reg(self, regname) -> int + | + | ev_treat_hindering_item(self, *args) + | ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> int + | + | ev_undefine(self, *args) + | ev_undefine(self, ea) -> int + | + | + | An item in the database (insn or data) is being deleted + | @param ea: Address + | @return: + | - 1 - do not delete srranges at the item end + | - 0 - srranges can be deleted + | + | ev_validate_flirt_func(self, *args) + | ev_validate_flirt_func(self, start_ea, funcname) -> int + | + | ev_verify_noreturn(self, pfn) + | ev_verify_noreturn(self, pfn) -> int + | + | ev_verify_sp(self, pfn) + | ev_verify_sp(self, pfn) -> int + | + | func_added(self, pfn) + | + | get_auxpref(self, insn) + | This function returns insn.auxpref value + | + | get_idpdesc(self) + | This function must be present and should return the list of + | short processor names similar to the one in ph.psnames. + | This method can be overridden to return to the kernel a different IDP description. + | + | get_uFlag(self) + | Use this utility function to retrieve the 'uFlag' global variable + | + | idasgn_loaded(self, *args) + | + | kernel_config_loaded(self, *args) + | + | make_code(self, *args) + | + | make_data(self, *args) + | + | renamed(self, *args) + | + | savebase(self, *args) + | + | segm_moved(self, from_ea, to_ea, size, changed_netmap) + | + | set_func_end(self, *args) + | + | set_func_start(self, *args) + | + | sgr_changed(self, *args) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __idc_cvt_id__ = 2 + | + | ---------------------------------------------------------------------- + | Methods inherited from IDP_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_IDP_Hooks(...) + | delete_IDP_Hooks(self) + | + | ev_add_cref(self, *args) -> 'int' + | ev_add_cref(self, _from, to, type) -> int + | + | ev_add_dref(self, *args) -> 'int' + | ev_add_dref(self, _from, to, type) -> int + | + | ev_adjust_argloc(self, *args) -> 'int' + | ev_adjust_argloc(self, argloc, optional_type, size) -> int + | + | ev_adjust_libfunc_ea(self, *args) -> 'int' + | ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int + | + | ev_adjust_refinfo(self, *args) -> 'int' + | ev_adjust_refinfo(self, ri, ea, n, fd) -> int + | + | ev_analyze_prolog(self, *args) -> 'int' + | ev_analyze_prolog(self, ea) -> int + | + | ev_arg_addrs_ready(self, *args) -> 'int' + | ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int + | + | ev_calc_arglocs(self, *args) -> 'int' + | ev_calc_arglocs(self, fti) -> int + | + | ev_calc_cdecl_purged_bytes(self, *args) -> 'int' + | ev_calc_cdecl_purged_bytes(self, ea) -> int + | + | ev_calc_next_eas(self, *args) -> 'int' + | ev_calc_next_eas(self, res, insn, over) -> int + | + | ev_calc_purged_bytes(self, *args) -> 'int' + | ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int + | + | ev_calc_retloc(self, *args) -> 'int' + | ev_calc_retloc(self, retloc, rettype, cc) -> int + | + | ev_calc_spdelta(self, *args) -> 'int' + | ev_calc_spdelta(self, spdelta, insn) -> int + | + | ev_calc_switch_cases(self, *args) -> 'int' + | ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int + | + | ev_calc_varglocs(self, *args) -> 'int' + | ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int + | + | ev_calcrel(self, *args) -> 'int' + | ev_calcrel(self) -> int + | + | ev_clean_tbit(self, *args) -> 'int' + | ev_clean_tbit(self, ea, getreg, regvalues) -> int + | + | ev_create_flat_group(self, *args) -> 'int' + | ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int + | + | ev_decorate_name(self, *args) -> 'PyObject *' + | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * + | + | ev_del_cref(self, *args) -> 'int' + | ev_del_cref(self, _from, to, expand) -> int + | + | ev_del_dref(self, *args) -> 'int' + | ev_del_dref(self, _from, to) -> int + | + | ev_delay_slot_insn(self, *args) -> 'PyObject *' + | ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * + | + | ev_demangle_name(self, *args) -> 'PyObject *' + | ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * + | + | ev_ending_undo(self, *args) -> 'int' + | ev_ending_undo(self, action_name, is_undo) -> int + | + | ev_equal_reglocs(self, *args) -> 'int' + | ev_equal_reglocs(self, a1, a2) -> int + | + | ev_extract_address(self, *args) -> 'int' + | ev_extract_address(self, out_ea, screen_ea, string, position) -> int + | + | ev_find_op_value(self, *args) -> 'PyObject *' + | ev_find_op_value(self, pinsn, opn) -> PyObject * + | + | ev_find_reg_value(self, *args) -> 'PyObject *' + | ev_find_reg_value(self, pinsn, reg) -> PyObject * + | + | ev_gen_asm_or_lst(self, *args) -> 'void' + | ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) + | + | ev_gen_stkvar_def(self, *args) -> 'int' + | ev_gen_stkvar_def(self, outctx, mptr, v) -> int + | + | ev_get_abi_info(self, *args) -> 'int' + | ev_get_abi_info(self, abi_names, abi_opts, comp) -> int + | + | ev_get_bg_color(self, *args) -> 'int' + | ev_get_bg_color(self, ea) -> int or None + | + | ev_get_cc_regs(self, *args) -> 'int' + | ev_get_cc_regs(self, regs, cc) -> int + | + | ev_get_code16_mode(self, *args) -> 'int' + | ev_get_code16_mode(self, ea) -> int + | + | ev_get_dbr_opnum(self, *args) -> 'int' + | ev_get_dbr_opnum(self, opnum, insn) -> int + | + | ev_get_default_enum_size(self, *args) -> 'int' + | ev_get_default_enum_size(self, cm) -> int + | + | ev_get_macro_insn_head(self, *args) -> 'int' + | ev_get_macro_insn_head(self, head, ip) -> int + | + | ev_get_reg_info(self, *args) -> 'int' + | ev_get_reg_info(self, main_regname, bitrange, regname) -> int + | + | ev_get_reg_name(self, *args) -> 'PyObject *' + | ev_get_reg_name(self, reg, width, reghi) -> PyObject * + | + | ev_get_simd_types(self, *args) -> 'int' + | ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int + | + | ev_get_stkarg_offset(self, *args) -> 'int' + | ev_get_stkarg_offset(self) -> int + | + | ev_get_stkvar_scale_factor(self, *args) -> 'int' + | ev_get_stkvar_scale_factor(self) -> int + | + | ev_getreg(self, *args) -> 'int' + | ev_getreg(self, regval, regnum) -> int + | + | ev_init(self, *args) -> 'int' + | ev_init(self, idp_modname) -> int + | + | ev_insn_reads_tbit(self, *args) -> 'int' + | ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int + | + | ev_is_cond_insn(self, *args) -> 'int' + | ev_is_cond_insn(self, insn) -> int + | + | ev_is_jump_func(self, *args) -> 'int' + | ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int + | + | ev_last_cb_before_loader(self, *args) -> 'int' + | ev_last_cb_before_loader(self) -> int + | + | ev_loader(self, *args) -> 'int' + | ev_loader(self) -> int + | + | ev_lower_func_type(self, *args) -> 'int' + | ev_lower_func_type(self, argnums, fti) -> int + | + | ev_max_ptr_size(self, *args) -> 'int' + | ev_max_ptr_size(self) -> int + | + | ev_newasm(self, *args) -> 'int' + | ev_newasm(self, asmnum) -> int + | + | ev_next_exec_insn(self, *args) -> 'int' + | ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int + | + | ev_realcvt(self, *args) -> 'int' + | ev_realcvt(self, m, e, swt) -> int + | + | ev_replaying_undo(self, *args) -> 'int' + | ev_replaying_undo(self, action_name, vec, is_undo) -> int + | + | ev_set_code16_mode(self, *args) -> 'int' + | ev_set_code16_mode(self, ea, code16) -> int + | + | ev_setup_til(self, *args) -> 'void' + | ev_setup_til(self) + | + | ev_shadow_args_size(self, *args) -> 'int' + | ev_shadow_args_size(self, shadow_args_size, pfn) -> int + | + | ev_term(self, *args) -> 'int' + | ev_term(self) -> int + | + | ev_use_arg_types(self, *args) -> 'int' + | ev_use_arg_types(self, ea, fti, rargs) -> int + | + | ev_use_regarg_type(self, *args) -> 'PyObject *' + | ev_use_regarg_type(self, ea, rargs) -> PyObject * + | + | ev_use_stkarg_type(self, *args) -> 'int' + | ev_use_stkarg_type(self, ea, arg) -> int + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | + | Creates an IDP hook + | + | @return: Boolean true on success + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | + | Removes the IDP hook + | @return: Boolean true on success + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from IDP_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on class reg_info_t in module ida_idp: + +class reg_info_t(builtins.object) + | Proxy of C++ reg_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> reg_info_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_reg_info_t(...) + | delete_reg_info_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | reg + | reg_info_t_reg_get(self) -> int + | + | size + | reg_info_t_size_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function set_processor_type in module ida_idp: + +set_processor_type(*args) -> 'bool' + set_processor_type(procname, level) -> bool + + + Set target processor type. Once a processor module is loaded, it + cannot be replaced until we close the idb. + + @param procname: name of processor type (one of names present in + \ph{psnames}) (C++: const char *) + @param level: SETPROC_ (C++: setproc_level_t) + @return: success + +Help on function set_target_assembler in module ida_idp: + +set_target_assembler(*args) -> 'bool' + set_target_assembler(asmnum) -> bool + + + Set target assembler. + + @param asmnum: number of assembler in the current processor module + (C++: int) + @return: success + +Help on function sizeof_ldbl in module ida_idp: + +sizeof_ldbl(*args) -> 'size_t' + sizeof_ldbl() -> size_t + + + Get size of long double. + +Help on function str2reg in module ida_idp: + +str2reg(*args) -> 'int' + str2reg(p) -> int + + + Get any reg number (-1 on error) + + + @param p (C++: const char *) + +=== ida_idp EPYDOC INJECTIONS === +ida_idp.AS2_BRACE +""" +Use braces for all expressions. +""" + +ida_idp.AS2_BYTE1CHAR +""" +Meaningful only for wide byte processors. + +One symbol per processor byte +""" + +ida_idp.AS2_COLONSUF +""" +addresses may have ":xx" suffix this suffix must be ignored when +extracting the address under the cursor +""" + +ida_idp.AS2_IDEALDSCR +""" +Description of struc/union is in the 'reverse' form (keyword before +name) the same as in borland tasm ideal +""" + +ida_idp.AS2_STRINV +""" +(For processors with bytes bigger than 8 bits) + +Invert meaning of \\inf{wide_high_byte_first} for text strings +""" + +ida_idp.AS2_TERSESTR +""" +NAME is supported. + +'terse' structure initialization form +""" + +ida_idp.AS2_YWORD +""" +a_yword field is present and valid +""" + +ida_idp.ASB_BINF0 +""" +010101b +""" + +ida_idp.ASB_BINF1 +""" +^B010101 +""" + +ida_idp.ASB_BINF2 +""" +%010101 +""" + +ida_idp.ASB_BINF3 +""" +0b1010101 +""" + +ida_idp.ASB_BINF4 +""" +b'1010101 +""" + +ida_idp.ASB_BINF5 +""" +b'1010101' +""" + +ida_idp.ASD_DECF0 +""" +34 +""" + +ida_idp.ASD_DECF1 +""" +#34 +""" + +ida_idp.ASD_DECF3 +""" +.34 +""" + +ida_idp.ASH_HEXF0 +""" +34h +""" + +ida_idp.ASH_HEXF1 +""" +h'34 +""" + +ida_idp.ASH_HEXF2 +""" +34 +""" + +ida_idp.ASH_HEXF3 +""" +0x34 +""" + +ida_idp.ASH_HEXF4 +""" +$34 +""" + +ida_idp.ASH_HEXF5 +""" +<^R > (radix) +""" + +ida_idp.ASO_OCTF0 +""" +123o +""" + +ida_idp.ASO_OCTF1 +""" +0123 +""" + +ida_idp.ASO_OCTF2 +""" +123 +""" + +ida_idp.ASO_OCTF3 +""" +@123 +""" + +ida_idp.ASO_OCTF4 +""" +o'123 +""" + +ida_idp.ASO_OCTF5 +""" +123q +""" + +ida_idp.ASO_OCTF6 +""" +~123 +""" + +ida_idp.ASO_OCTF7 +""" +q'123 +""" + +ida_idp.AS_1TEXT +""" +1 text per line, no bytes +""" + +ida_idp.AS_2CHRE +""" +double char constants are: "xy +""" + +ida_idp.AS_ALIGN2 +""" +(.align 5 means to align at 32byte boundary) + +.align directive expects an exponent rather than a power of 2 +""" + +ida_idp.AS_ASCIIC +""" +(\\n,\\x01 and similar) + +ascii directive accepts C-like escape sequences +""" + +ida_idp.AS_ASCIIZ +""" +ascii directive inserts implicit zero byte at the end +""" + +ida_idp.AS_BINFM +""" +mask - binary number format +""" + +ida_idp.AS_COLON +""" +create colons after data names ? +""" + +ida_idp.AS_DECFM +""" +mask - decimal number format +""" + +ida_idp.AS_HEXFM +""" +mask - hex number format +""" + +ida_idp.AS_LALIGN +""" +Labels at "align" keyword are supported. +""" + +ida_idp.AS_N2CHR +""" +can't have 2 byte char consts +""" + +ida_idp.AS_NCHRE +""" +char constants are: 'x +""" + +ida_idp.AS_NCMAS +""" +no commas in ascii directives +""" + +ida_idp.AS_NHIAS +""" +no characters with high bit +""" + +ida_idp.AS_NOCODECLN +""" +don't create colons after code names +""" + +ida_idp.AS_NOSPACE +""" +No spaces in expressions. +""" + +ida_idp.AS_NOXRF +""" +Disable xrefs during the output file generation. +""" + +ida_idp.AS_OCTFM +""" +mask - octal number format +""" + +ida_idp.AS_OFFST +""" +offsets are 'offset xxx' ? +""" + +ida_idp.AS_ONEDUP +""" +One array definition per line. +""" + +ida_idp.AS_RELSUP +""" +Checkarg: 'and','or','xor' operations with addresses are possible. +""" + +ida_idp.AS_UDATA +""" +can use '?' in data directives +""" + +ida_idp.AS_UNEQU +""" +replace undefined data items with EQU (for ANTA's A80) +""" + +ida_idp.AS_XTRNTYPE +""" +Assembler understands type of extern symbols as ":type" suffix. +""" + +ida_idp.CF_CALL +""" +CALL instruction (should make a procedure here) +""" + +ida_idp.CF_CHG1 +""" +The instruction modifies the first operand. +""" + +ida_idp.CF_CHG2 +""" +The instruction modifies the second operand. +""" + +ida_idp.CF_CHG3 +""" +The instruction modifies the third operand. +""" + +ida_idp.CF_CHG4 +""" +The instruction modifies 4 operand. +""" + +ida_idp.CF_CHG5 +""" +The instruction modifies 5 operand. +""" + +ida_idp.CF_CHG6 +""" +The instruction modifies 6 operand. +""" + +ida_idp.CF_HLL +""" +language function. + +Instruction may be present in a high level +""" + +ida_idp.CF_JUMP +""" +jump or call (thus needs additional analysis) + +The instruction passes execution using indirect +""" + +ida_idp.CF_SHFT +""" +Bit-shift instruction (shl,shr...) +""" + +ida_idp.CF_STOP +""" +next instruction + +Instruction doesn't pass execution to the +""" + +ida_idp.CF_USE1 +""" +The instruction uses value of the first operand. +""" + +ida_idp.CF_USE2 +""" +The instruction uses value of the second operand. +""" + +ida_idp.CF_USE3 +""" +The instruction uses value of the third operand. +""" + +ida_idp.CF_USE4 +""" +The instruction uses value of the 4 operand. +""" + +ida_idp.CF_USE5 +""" +The instruction uses value of the 5 operand. +""" + +ida_idp.CF_USE6 +""" +The instruction uses value of the 6 operand. +""" + +ida_idp.CUSTOM_INSN_ITYPE +""" +Custom instruction codes defined by processor extension plugins must +be greater than or equal to this +""" + +ida_idp.IDP_INTERFACE_VERSION +""" +The interface version number.see also 'IDA_SDK_VERSION' from 'pro.h' +""" + +ida_idp.OP_FP_BASED +""" +operand is FP based +""" + +ida_idp.OP_SP_ADD +""" +operand value is added to the pointer +""" + +ida_idp.OP_SP_BASED +""" +operand is SP based +""" + +ida_idp.OP_SP_SUB +""" +operand value is subtracted from the pointer +""" + +ida_idp.PLFM_386 +""" +Intel 80x86. +""" + +ida_idp.PLFM_6502 +""" +6502 +""" + +ida_idp.PLFM_65C816 +""" +65802/65816 +""" + +ida_idp.PLFM_6800 +""" +Motorola 68xx. +""" + +ida_idp.PLFM_68K +""" +Motorola 680x0. +""" + +ida_idp.PLFM_80196 +""" +Intel 80196. +""" + +ida_idp.PLFM_8051 +""" +8051 +""" + +ida_idp.PLFM_AD2106X +""" +Analog Devices ADSP 2106X. +""" + +ida_idp.PLFM_AD218X +""" +Analog Devices ADSP 218X. +""" + +ida_idp.PLFM_ALPHA +""" +DEC Alpha. +""" + +ida_idp.PLFM_ARC +""" +Argonaut RISC Core. +""" + +ida_idp.PLFM_ARM +""" +Advanced RISC Machines. +""" + +ida_idp.PLFM_AVR +""" +Atmel 8-bit RISC processor(s) +""" + +ida_idp.PLFM_C166 +""" +Siemens C166 family. +""" + +ida_idp.PLFM_C39 +""" +Rockwell C39. +""" + +ida_idp.PLFM_CR16 +""" +NSC CR16. +""" + +ida_idp.PLFM_DALVIK +""" +Android Dalvik Virtual Machine. +""" + +ida_idp.PLFM_DSP56K +""" +Motorola DSP5600x. +""" + +ida_idp.PLFM_DSP96K +""" +Motorola DSP96000. +""" + +ida_idp.PLFM_EBC +""" +EFI Bytecode. +""" + +ida_idp.PLFM_F2MC +""" +Fujistu F2MC-16. +""" + +ida_idp.PLFM_FR +""" +Fujitsu FR Family. +""" + +ida_idp.PLFM_H8 +""" +Hitachi H8/300, H8/2000. +""" + +ida_idp.PLFM_H8500 +""" +Hitachi H8/500. +""" + +ida_idp.PLFM_HPPA +""" +Hewlett-Packard PA-RISC. +""" + +ida_idp.PLFM_I860 +""" +Intel 860. +""" + +ida_idp.PLFM_I960 +""" +Intel 960. +""" + +ida_idp.PLFM_IA64 +""" +Intel Itanium IA64. +""" + +ida_idp.PLFM_JAVA +""" +Java. +""" + +ida_idp.PLFM_KR1878 +""" +Angstrem KR1878. +""" + +ida_idp.PLFM_M16C +""" +Renesas M16C. +""" + +ida_idp.PLFM_M32R +""" +Mitsubishi 32bit RISC. +""" + +ida_idp.PLFM_M740 +""" +Mitsubishi 8bit. +""" + +ida_idp.PLFM_M7700 +""" +Mitsubishi 16bit. +""" + +ida_idp.PLFM_M7900 +""" +Mitsubishi 7900. +""" + +ida_idp.PLFM_MC6812 +""" +Motorola 68HC12. +""" + +ida_idp.PLFM_MC6816 +""" +Motorola 68HC16. +""" + +ida_idp.PLFM_MIPS +""" +MIPS. +""" + +ida_idp.PLFM_MN102L00 +""" +Panasonic MN10200. +""" + +ida_idp.PLFM_MSP430 +""" +Texas Instruments MSP430. +""" + +ida_idp.PLFM_NEC_78K0 +""" +NEC 78K0. +""" + +ida_idp.PLFM_NEC_78K0S +""" +NEC 78K0S. +""" + +ida_idp.PLFM_NEC_V850X +""" +NEC V850 and V850ES/E1/E2. +""" + +ida_idp.PLFM_NET +""" +Microsoft Visual Studio.Net. +""" + +ida_idp.PLFM_OAKDSP +""" +Atmel OAK DSP. +""" + +ida_idp.PLFM_PDP +""" +PDP11. +""" + +ida_idp.PLFM_PIC +""" +Microchip's PIC. +""" + +ida_idp.PLFM_PIC16 +""" +Microchip's 16-bit PIC. +""" + +ida_idp.PLFM_PPC +""" +PowerPC. +""" + +ida_idp.PLFM_S390 +""" +IBM's S390. +""" + +ida_idp.PLFM_SCR_ADPT +""" +Processor module adapter for processor modules written in scripting +languages. +""" + +ida_idp.PLFM_SH +""" +Renesas (formerly Hitachi) SuperH. +""" + +ida_idp.PLFM_SPARC +""" +SPARC. +""" + +ida_idp.PLFM_SPC700 +""" +Sony SPC700. +""" + +ida_idp.PLFM_SPU +""" +Cell Broadband Engine Synergistic Processor Unit. +""" + +ida_idp.PLFM_ST20 +""" +SGS-Thomson ST20. +""" + +ida_idp.PLFM_ST7 +""" +SGS-Thomson ST7. +""" + +ida_idp.PLFM_ST9 +""" +ST9+. +""" + +ida_idp.PLFM_TLCS900 +""" +Toshiba TLCS-900. +""" + +ida_idp.PLFM_TMS +""" +Texas Instruments TMS320C5x. +""" + +ida_idp.PLFM_TMS320C1X +""" +Texas Instruments TMS320C1x. +""" + +ida_idp.PLFM_TMS320C28 +""" +Texas Instruments TMS320C28x. +""" + +ida_idp.PLFM_TMS320C3 +""" +Texas Instruments TMS320C3. +""" + +ida_idp.PLFM_TMS320C54 +""" +Texas Instruments TMS320C54xx. +""" + +ida_idp.PLFM_TMS320C55 +""" +Texas Instruments TMS320C55xx. +""" + +ida_idp.PLFM_TMSC6 +""" +Texas Instruments TMS320C6x. +""" + +ida_idp.PLFM_TRICORE +""" +Tasking Tricore. +""" + +ida_idp.PLFM_TRIMEDIA +""" +Trimedia. +""" + +ida_idp.PLFM_UNSP +""" +SunPlus unSP. +""" + +ida_idp.PLFM_Z8 +""" +Z8. +""" + +ida_idp.PLFM_Z80 +""" +8085, Z80 +""" + +ida_idp.PRN_BIN +""" +binary +""" + +ida_idp.PRN_DEC +""" +decimal +""" + +ida_idp.PRN_HEX +""" +hex +""" + +ida_idp.PRN_OCT +""" +octal +""" + +ida_idp.PR_ADJSEGS +""" +IDA may adjust segments' starting/ending addresses. +""" + +ida_idp.PR_ALIGN +""" +All data items should be aligned properly. +""" + +ida_idp.PR_ALIGN_INSN +""" +allow ida to create alignment instructions arbitrarily. Since these +instructions might lead to other wrong instructions and spoil the +listing, IDA does not create them by default anymore +""" + +ida_idp.PR_ASSEMBLE +""" +Module has a built-in assembler and will react to ev_assemble. +""" + +ida_idp.PR_BINMEM +""" +the processor module provides correct segmentation for binary files +(i.e. it creates additional segments) The kernel will not ask the user +to specify the RAM/ROM sizes +""" + +ida_idp.PR_CHK_XREF +""" +don't allow near xrefs between segments with different bases +""" + +ida_idp.PR_CNDINSNS +""" +has conditional instructions +""" + +ida_idp.PR_DEFNUM +""" +mask - default number representation +""" + +ida_idp.PR_DEFSEG32 +""" +segments are 32-bit by default +""" + +ida_idp.PR_DEFSEG64 +""" +segments are 64-bit by default +""" + +ida_idp.PR_DELAYED +""" +has delayed jumps and calls if this flag is set, +\\ph{is_basic_block_end}, \\ph{has_delay_slot} should be implemented +""" + +ida_idp.PR_NOCHANGE +""" +(display only) + +The user can't change segments and code/data attributes +""" + +ida_idp.PR_NO_SEGMOVE +""" +(i.e. the user can't move segments) + +the processor module doesn't support 'move_segm()' +""" + +ida_idp.PR_PURGING +""" +there are calling conventions which may purge bytes from the stack +""" + +ida_idp.PR_RNAMESOK +""" +allow user register names for location names +""" + +ida_idp.PR_SCALE_STKVARS +""" +use \\ph{get_stkvar_scale} callback +""" + +ida_idp.PR_SEGS +""" +has segment registers? +""" + +ida_idp.PR_SEGTRANS +""" +the processor module supports the segment translation feature (meaning +it calculates the code addresses using the 'map_code_ea()' function) +""" + +ida_idp.PR_SGROTHER +""" +the segment registers don't contain the segment selectors. +""" + +ida_idp.PR_STACK_UP +""" +the stack grows up +""" + +ida_idp.PR_TYPEINFO +""" +ALL OF THEM SHOULD BE IMPLEMENTED! + +the processor module supports type information callbacks +""" + +ida_idp.PR_USE32 +""" +supports 32-bit addressing? +""" + +ida_idp.PR_USE64 +""" +supports 64-bit addressing? +""" + +ida_idp.PR_USE_ARG_TYPES +""" +use \\ph{use_arg_types} callback +""" + +ida_idp.PR_USE_TBYTE +""" + 'BTMT_SPECFLT' means _TBYTE type +""" + +ida_idp.PR_WORD_INS +""" +instruction codes are grouped 2bytes in binary line prefix +""" + +ida_idp.REG_SPOIL +""" +processor_t::use_regarg_type uses this bit in the return value to +indicate that the register value has been spoiled +""" +=== ida_idp EPYDOC INJECTIONS END === +Help on class Choose in module ida_kernwin: + +class Choose(builtins.object) + | Chooser wrapper class. + | + | Some constants are defined in this class. + | Please refer to kernwin.hpp for more information. + | + | Methods defined here: + | + | Activate(self) + | Activates a visible chooser + | + | AddCommand(self, caption, flags=4, menu_index=-1, icon=-1, emb=None, shortcut=None) + | + | Close(self) + | Closes the chooser + | + | Embedded(self, create_chobj=False) + | Creates an embedded chooser (as opposed to Show()) + | @return: Returns 0 on success or NO_ATTR + | + | GetEmbSelection(self) + | Deprecated. For embedded choosers, the selection is + | available through 'Form.EmbeddedChooserControl.selection' + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | OnPopup(self, widget, popup_handle) + | + | Refresh(self) + | Causes the refresh callback to trigger + | + | Show(self, modal=False) + | Activates or creates a chooser window + | @param modal: Display as modal dialog + | @return: For all choosers it will return NO_ATTR if some mandatory + | attribute is missing. The mandatory attributes are: flags, + | title, cols, OnGetSize(), OnGetLine(); + | For modal choosers it will return the selected item index (0-based), + | or NO_SELECTION if no selection, + | or EMPTY_CHOOSER if the OnRefresh() callback returns EMPTY_CHOOSER; + | For non-modal choosers it will return 0 + | or ALREADY_EXISTS if the chooser was already open and is active now; + | + | __init__(self, title, cols, flags=0, popup_names=None, icon=-1, x1=-1, y1=-1, x2=-1, y2=-1, deflt=None, embedded=False, width=None, height=None, forbidden_cb=0) + | Constructs a chooser window. + | @param title: The chooser title + | @param cols: a list of colums; each list item is a list of two items + | example: [ ["Address", 10 | Choose.CHCOL_HEX], + | ["Name", 30 | Choose.CHCOL_PLAIN] ] + | @param flags: One of CH_XXXX constants + | @param deflt: The index of the default item (0-based) for single + | selection choosers or the list of indexes for multi selection + | chooser + | @param popup_names: List of new captions to replace this list + | ["Insert", "Delete", "Edit", "Refresh"] + | @param icon: Icon index (the icon should exist in ida resources or + | an index to a custom loaded icon) + | @param x1, y1, x2, y2: The default location (for txt-version) + | @param embedded: Create as embedded chooser + | @param width: Embedded chooser width + | @param height: Embedded chooser height + | @param forbidden_cb: Explicitly forbidden callbacks + | + | adjust_last_item(self, n) + | Helper for OnDeleteLine() and OnRefresh() callbacks. + | They can be finished by the following line: + | return [Choose.ALL_CHANGED] + self.adjust_last_item(n) + | @param: line number of the remaining select item + | @return: list of selected lines numbers (one element or empty) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | ALL_CHANGED = 1 + | + | ALREADY_EXISTS = -3 + | + | CHCOL_DEC = 196608 + | + | CHCOL_EA = 262144 + | + | CHCOL_FNAME = 327680 + | + | CHCOL_FORMAT = 458752 + | + | CHCOL_HEX = 131072 + | + | CHCOL_PATH = 65536 + | + | CHCOL_PLAIN = 0 + | + | CHOOSE_HAVE_DEL = 16 + | + | CHOOSE_HAVE_EDIT = 32 + | + | CHOOSE_HAVE_ENTER = 64 + | + | CHOOSE_HAVE_GETATTR = 4 + | + | CHOOSE_HAVE_GETICON = 2 + | + | CHOOSE_HAVE_INIT = 1 + | + | CHOOSE_HAVE_INS = 8 + | + | CHOOSE_HAVE_ONCLOSE = 512 + | + | CHOOSE_HAVE_REFRESH = 128 + | + | CHOOSE_HAVE_SELECT = 256 + | + | CH_ATTRS = 32 + | + | CH_BUILTIN_MASK = 33030144 + | + | CH_BUILTIN_SHIFT = 19 + | + | CH_CAN_DEL = 512 + | + | CH_CAN_EDIT = 1024 + | + | CH_CAN_INS = 256 + | + | CH_CAN_REFRESH = 2048 + | + | CH_FORCE_DEFAULT = 128 + | + | CH_MODAL = 1 + | + | CH_MULTI = 4 + | + | CH_NOBTNS = 16 + | + | CH_NOIDB = 64 + | + | CH_NO_STATUS_BAR = 65536 + | + | CH_QFLT = 4096 + | + | CH_QFTYP_DEFAULT = 0 + | + | CH_QFTYP_FUZZY = 32768 + | + | CH_QFTYP_MASK = 57344 + | + | CH_QFTYP_NORMAL = 8192 + | + | CH_QFTYP_REGEX = 24576 + | + | CH_QFTYP_SHIFT = 13 + | + | CH_QFTYP_WHOLE_WORDS = 16384 + | + | CH_RESTORE = 131072 + | + | EMPTY_CHOOSER = -2 + | + | NOTHING_CHANGED = 0 + | + | NO_ATTR = -4 + | + | NO_SELECTION = -1 + | + | SELECTION_CHANGED = 2 + | + | UI_Hooks_Trampoline = + | Proxy of C++ UI_Hooks class. + +Help on class CustomIDAMemo in module ida_kernwin: + +class CustomIDAMemo(View_Hooks) + | Proxy of C++ View_Hooks class. + | + | Method resolution order: + | CustomIDAMemo + | View_Hooks + | builtins.object + | + | Methods defined here: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | __init__(self) + | __init__(self, _flags=0) -> View_Hooks + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | view_activated(self, view) + | + | view_click(self, view, ve) + | view_click(self, view, event) + | + | view_close(self, view, *args) + | view_close(self, view) + | + | view_curpos(self, view, *args) + | view_curpos(self, view) + | + | view_dblclick(self, view, ve) + | view_dblclick(self, view, event) + | + | view_deactivated(self, view) + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, view, ve) + | view_mouse_over(self, view, event) + | + | view_switched(self, view, rt) + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_View_Hooks(...) + | delete_View_Hooks(self) + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | view_created(self, *args) -> 'void' + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on class Form in module ida_kernwin: + +class Form(builtins.object) + | # ----------------------------------------------------------------------- + | + | Methods defined here: + | + | Add(self, name, ctrl, mkattr=True) + | Low level function. Prefer AddControls() to this function. + | This function adds one control to the form. + | + | @param name: Control name + | @param ctrl: Control object + | @param mkattr: Create control name / control object as a form attribute + | + | AddControls(self, controls, mkattr=True) + | Adds controls from a dictionary. + | The dictionary key is the control name and the value is a Form.Control object + | @param controls: The control dictionary + | + | Close(self, close_normally) + | Close the form + | @param close_normally: + | 1: form is closed normally as if the user pressed Enter + | 0: form is closed abnormally as if the user pressed Esc + | @return: None + | + | Compile(self) + | Compiles a form and returns the form object (self) and the argument list. + | The form object will contain object names corresponding to the form elements + | + | @return: It will raise an exception on failure. Otherwise the return value is ignored + | + | CompileEx(self, form) + | Low level function. + | Compiles (parses the form syntax and adds the control) the form string and + | returns the argument list to be passed the argument list to ask_form(). + | + | The form controls are wrapped inside curly braces: {ControlName}. + | + | A special operator can be used to return the index of a given control by its name: {id:ControlName}. + | This is useful when you use the STARTITEM form keyword to set the initially focused control. + | (note that, technically, the index is not the same as the ID; that's because STARTITEM + | uses raw, 0-based indexes rather than control IDs to determine the focused widget.) + | + | @param form: Compiles the form and returns the arguments needed to be passed to ask_form() + | + | Compiled(self) + | Checks if the form has already been compiled + | + | @return: Boolean + | + | EnableField(self, ctrl, enable) + | Enable or disable an input field + | @return: False - no such control + | + | Execute(self) + | Displays a modal dialog containing the compiled form. + | @return: 1 - ok ; 0 - cancel + | + | FindControlById(self, id) + | Finds a control instance given its id + | + | Free(self) + | Frees all resources associated with a compiled form. + | Make sure you call this function when you finish using the form. + | + | GetControlValue(self, ctrl) + | Returns the control's value depending on its type + | @param ctrl: Form control instance + | @return: + | - color button, radio controls: integer + | - file/dir input, string input and string label: string + | - embedded chooser control (0-based indices of selected items): integer list + | - for multilinetext control: textctrl_info_t + | - dropdown list controls: string (when editable) or index (when readonly) + | - None: on failure + | + | GetFocusedField(self) + | Get currently focused input field. + | @return: None if no field is selected otherwise the control ID + | + | MoveField(self, ctrl, x, y, w, h) + | Move/resize an input field + | + | @return: False - no such fiel + | + | Open(self) + | Opens a widget containing the compiled form. + | + | RefreshField(self, ctrl) + | Refresh a field + | @return: False - no such control + | + | SetControlValue(self, ctrl, value) + | Set the control's value depending on its type + | @param ctrl: Form control instance + | @param value: + | - embedded chooser: a 0-base indices list to select embedded chooser items + | - multilinetext: a textctrl_info_t + | - dropdown list: an integer designating the selection index if readonly + | a string designating the edit control value if not readonly + | @return: Boolean true on success + | + | SetFocusedField(self, ctrl) + | Set currently focused input field + | @return: False - no such control + | + | ShowField(self, ctrl, show) + | Show or hide an input field + | @return: False - no such control + | + | _AddGroup(self, Group, mkattr=True) + | Internal function. + | This function expands the group item names and creates individual group item controls + | + | @param Group: The group class (checkbox or radio group class) + | + | _ChkCompiled(self) + | + | __getitem__(self, name) + | Returns a control object by name + | + | __init__(self, form, controls) + | Contruct a Form class. + | This class wraps around ask_form() or open_form() and provides an easier / alternative syntax for describing forms. + | The form control names are wrapped inside the opening and closing curly braces and the control themselves are + | defined and instantiated via various form controls (subclasses of Form). + | + | @param form: The form string + | @param controls: A dictionary containing the control name as a _key_ and control object as _value_ + | + | _reset(self) + | Resets the Form class state variables + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | ControlToFieldTypeIdAndSize(ctrl) + | Converts a control object to a tuple containing the field id + | and the associated buffer size + | + | _ParseFormTitle(form) + | Parses the form's title from the form text + | + | create_string_buffer(value, size=None) + | + | fieldtype_to_ctype(tp, i64=False) + | Factory method returning a ctype class corresponding to the field type string + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | ButtonInput = + | Button control. + | A handler along with a 'code' (numeric value) can be associated with the button. + | This way one handler can handle many buttons based on the button code (or in other terms id or tag) + | + | ChkGroupControl = + | Checkbox group control class. + | It holds a set of checkbox controls + | + | ChkGroupItemControl = + | Checkbox group item control + | + | ColorInput = + | Color button input control + | + | Control = + | + | + | DirInput = + | Directory browsing control + | + | DropdownListControl = + | Dropdown control + | This control allows manipulating a dropdown control + | + | EmbeddedChooserControl = + | File Open/Save input control + | + | FormChangeCb = + | Form change handler. + | This can be thought of like a dialog procedure. + | Everytime a form action occurs, this handler will be called along with the control id. + | The programmer can then call various form actions accordingly: + | - EnableField + | - ShowField + | - MoveField + | - GetFieldValue + | - etc... + | + | Special control IDs: -1 (The form is initialized) and -2 (Ok has been clicked) + | + | GroupControl = + | Base class for group controls + | + | GroupItemControl = + | Base class for group control items + | + | InputControl = + | Generic form input control. + | It could be numeric control, string control, directory/file browsing, etc... + | + | LabelControl = + | Base class for static label control + | + | MultiLineTextControl = + | Multi line text control. + | This class inherits from textctrl_info_t. Thus the attributes are also inherited + | This control allows manipulating a multilinetext control + | + | NumericArgument = + | Argument representing various integer arguments (ushort, uint32, uint64, etc...) + | @param tp: One of Form.FT_XXX + | + | NumericInput = + | A composite class serving as a base numeric input control class + | + | NumericLabel = + | Numeric label control + | + | RadGroupControl = + | Radiobox group control class. + | It holds a set of radiobox controls + | + | RadGroupItemControl = + | Radiobox group item control + | + | StringArgument = + | Argument representing a character buffer + | + | StringInput = + | Base string input control class. + | This class also constructs a StringArgument + | + | StringLabel = + | String label control + | + | _FT_USHORT = '_US' + +Help on class IDAViewWrapper in module ida_kernwin: + +class IDAViewWrapper(CustomIDAMemo) + | Deprecated. Use View_Hooks instead. + | + | Because the lifecycle of an IDAView is not trivial to track (e.g., a user + | might close, then re-open the same disassembly view), this wrapper doesn't + | bring anything superior to the View_Hooks: quite the contrary, as the + | latter is much more generic (and better maps IDA's internal model.) + | + | Method resolution order: + | IDAViewWrapper + | CustomIDAMemo + | View_Hooks + | builtins.object + | + | Methods defined here: + | + | Bind(self) + | + | Unbind(self) + | + | __init__(self, title) + | __init__(self, _flags=0) -> View_Hooks + | + | ---------------------------------------------------------------------- + | Methods inherited from CustomIDAMemo: + | + | CreateGroups(self, groups_infos) + | Send a request to modify the graph by creating a + | (set of) group(s), and perform an animation. + | + | Each object in the 'groups_infos' list must be of the format: + | { + | "nodes" : [, , , ...] # The list of nodes to group + | "text" : # The synthetic text for that group + | } + | + | @param groups_infos: A list of objects that describe those groups. + | @return: A [, , ...] list of group nodes, or None (failure). + | + | DelNodesInfos(self, *nodes) + | Delete the properties for the given node(s). + | + | @param nodes: A list of node IDs + | + | DeleteGroups(self, groups, new_current=-1) + | Send a request to delete the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param new_current: A node to focus on after the groups have been deleted + | @return: True on success, False otherwise. + | + | GetCurrentRendererType(self) + | + | GetNodeInfo(self, *args) + | Get the properties for the given node. + | + | @param ni: A node_info_t instance + | @param node: The index of the node. + | @return: success + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | GetWidgetAsGraphViewer(self) + | Return the graph_viewer_t underlying this view. + | + | @return: The graph_viewer_t underlying this view, or None. + | + | Refresh(self) + | Refreshes the view. This causes the OnRefresh() to be called + | + | SetCurrentRendererType(self, rtype) + | Set the current view's renderer. + | + | @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. + | + | SetGroupsVisibility(self, groups, expand, new_current=-1) + | Send a request to expand/collapse the specified groups in the graph, + | and perform an animation. + | + | @param groups: A list of group node numbers. + | @param expand: True to expand the group, False otherwise. + | @param new_current: A node to focus on after the groups have been expanded/collapsed. + | @return: True on success, False otherwise. + | + | SetNodeInfo(self, node_index, node_info, flags) + | Set the properties for the given node. + | + | Example usage (set second nodes's bg color to red): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff0000 + | inst.SetNodeInfo(1, p, idaapi.NIF_BG_COLOR) + | + | @param node_index: The node index. + | @param node_info: An idaapi.node_info_t instance. + | @param flags: An OR'ed value of NIF_* values. + | + | SetNodesInfos(self, values) + | Set the properties for the given nodes. + | + | Example usage (set first three nodes's bg color to purple): + | inst = ... + | p = idaapi.node_info_t() + | p.bg_color = 0x00ff00ff + | inst.SetNodesInfos({0 : p, 1 : p, 2 : p}) + | + | @param values: A dictionary of 'int -> node_info_t' objects. + | + | _get_cb(self, view, cb_name) + | + | _get_cb_arity(self, cb) + | + | _graph_item_tuple(self, ve) + | + | view_activated(self, view) + | view_activated(self, view) + | + | view_click(self, view, ve) + | view_click(self, view, event) + | + | view_close(self, view, *args) + | view_close(self, view) + | + | view_curpos(self, view, *args) + | view_curpos(self, view) + | + | view_dblclick(self, view, ve) + | view_dblclick(self, view, event) + | + | view_deactivated(self, view) + | view_deactivated(self, view) + | + | view_keydown(self, view, key, state) + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, view, now, was) + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, view, ve) + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, view, ve) + | view_mouse_over(self, view, event) + | + | view_switched(self, view, rt) + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | Static methods inherited from CustomIDAMemo: + | + | _dummy_cb(*args) + | + | ---------------------------------------------------------------------- + | Methods inherited from View_Hooks: + | + | __disown__(self) + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_View_Hooks(...) + | delete_View_Hooks(self) + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | view_created(self, *args) -> 'void' + | view_created(self, view) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from View_Hooks: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + +Help on class PluginForm in module ida_kernwin: + +class PluginForm(builtins.object) + | PluginForm class. + | + | This form can be used to host additional controls. Please check the PyQt example. + | + | Methods defined here: + | + | Close(self, options) + | Closes the form. + | + | @param options: Close options (WCLS_SAVE, WCLS_NO_CONTEXT, ...) + | + | @return: None + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | OnClose(self, form) + | Called when the plugin form is closed + | + | @return: None + | + | OnCreate(self, form) + | This event is called when the plugin form is created. + | The programmer should populate the form when this event is triggered. + | + | @return: None + | + | Show(self, caption, options=0) + | Creates the form if not was not created or brings to front if it was already created + | + | @param caption: The form caption + | @param options: One of PluginForm.WOPN_ constants + | + | __init__(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | 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=) + | 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=) + | 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=) + | 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=) + | 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 + | + | _ensure_widget_deps(ctx) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | VALID_CAPSULE_NAME = b'$valid$' + | + | WCLS_CLOSE_LATER = 8 + | + | WCLS_DONT_SAVE_SIZE = 4 + | + | WCLS_NO_CONTEXT = 2 + | + | WCLS_SAVE = 1 + | + | WOPN_CENTERED = 32 + | + | WOPN_CREATE_ONLY = {} + | + | WOPN_DP_BEFORE = 2097152 + | + | WOPN_DP_BOTTOM = 524288 + | + | WOPN_DP_FLOATING = 8388608 + | + | WOPN_DP_INSIDE = 1048576 + | + | WOPN_DP_INSIDE_BEFORE = 3145728 + | + | WOPN_DP_LEFT = 65536 + | + | WOPN_DP_RIGHT = 262144 + | + | WOPN_DP_TAB = 4194304 + | + | WOPN_DP_TAB_BEFORE = 6291456 + | + | WOPN_DP_TOP = 131072 + | + | WOPN_MDI = 1 + | + | WOPN_MENU = 16 + | + | WOPN_ONTOP = 8 + | + | WOPN_PERSIST = 64 + | + | WOPN_RESTORE = 4 + | + | WOPN_TAB = 2 + +Help on function TWidget__from_ptrval__ in module ida_kernwin: + +TWidget__from_ptrval__(*args) -> 'TWidget *' + TWidget__from_ptrval__(ptrval) -> TWidget * + +Help on class UI_Hooks in module ida_kernwin: + +class UI_Hooks(builtins.object) + | Proxy of C++ UI_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> UI_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_UI_Hooks(...) + | delete_UI_Hooks(self) + | + | create_desktop_widget(self, *args) -> 'PyObject *' + | create_desktop_widget(self, title, cfg) -> PyObject * + | + | current_widget_changed(self, *args) -> 'void' + | current_widget_changed(self, widget, prev_widget) + | + | database_inited(self, *args) -> 'void' + | database_inited(self, is_new_database, idc_script) + | + | debugger_menu_change(self, *args) -> 'void' + | debugger_menu_change(self, enable) + | + | finish_populating_widget_popup(self, *args) -> 'void' + | finish_populating_widget_popup(self, widget, popup_handle, ctx=None) + | + | + | The UI is about to be done populating the TWidget's popup menu. + | Now is a good time to call idaapi.attach_action_to_popup() + | + | @param widget: The widget + | @param popup: The popup menu. + | @return: Ignored + | + | get_chooser_item_attrs(self, *args) -> 'void' + | get_chooser_item_attrs(self, chooser, n, attrs) + | + | get_custom_viewer_hint(self, *args) -> 'PyObject *' + | get_custom_viewer_hint(self, viewer, place) -> PyObject * + | + | get_ea_hint(self, *args) -> 'PyObject *' + | get_ea_hint(self, ea) -> PyObject * + | + | + | The UI wants to display a simple hint for an address in the navigation band + | + | @param ea: The address + | @return: String with the hint or None + | + | get_item_hint(self, *args) -> 'PyObject *' + | get_item_hint(self, ea, max_lines) -> PyObject * + | + | get_widget_config(self, *args) -> 'PyObject *' + | get_widget_config(self, widget, cfg) -> PyObject * + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | + | Creates an UI hook + | + | @return: Boolean true on success + | + | idcstart(self, *args) -> 'void' + | idcstart(self) + | + | idcstop(self, *args) -> 'void' + | idcstop(self) + | + | plugin_loaded(self, *args) -> 'void' + | plugin_loaded(self, plugin_info) + | + | plugin_unloading(self, *args) -> 'void' + | plugin_unloading(self, plugin_info) + | + | populating_widget_popup(self, *args) -> 'void' + | populating_widget_popup(self, widget, popup_handle, ctx=None) + | + | + | The UI is populating the TWidget's popup menu. + | Now is a good time to call idaapi.attach_action_to_popup() + | + | @param widget: The widget + | @param popup: The popup menu. + | @return: Ignored + | + | postprocess_action(self, *args) -> 'void' + | postprocess_action(self) + | + | + | An ida ui action has been handled + | + | @return: Ignored + | + | preprocess_action(self, *args) -> 'void' + | preprocess_action(self, name) + | + | + | IDA ui is about to handle a user action + | + | @param name: ui action name + | (these names can be looked up in ida[tg]ui.cfg) + | @return: 0-ok, nonzero - a plugin has handled the action + | + | range(self, *args) -> 'void' + | range(self) + | + | ready_to_run(self, *args) -> 'void' + | ready_to_run(self) + | + | resume(self, *args) -> 'void' + | resume(self) + | + | saved(self, *args) -> 'void' + | saved(self) + | + | + | The kernel has saved the database. + | + | @return: Ignored + | + | saving(self, *args) -> 'void' + | saving(self) + | + | + | The kernel is saving the database. + | + | @return: Ignored + | + | screen_ea_changed(self, *args) -> 'void' + | screen_ea_changed(self, ea, prev_ea) + | + | set_widget_config(self, *args) -> 'void' + | set_widget_config(self, widget, cfg) + | + | suspend(self, *args) -> 'void' + | suspend(self) + | + | term(self, *args) -> 'void' + | term(self) + | + | + | IDA is terminated and the database is already closed. + | The UI may close its windows in this callback. + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | + | Removes the UI hook + | @return: Boolean true on success + | + | updated_actions(self, *args) -> 'void' + | updated_actions(self) + | + | + | The UI is done updating actions. + | + | @return: Ignored + | + | updating_actions(self, *args) -> 'void' + | updating_actions(self, ctx) + | + | + | The UI is about to batch-update some actions. + | + | @param ctx: The action_update_ctx_t instance + | @return: Ignored + | + | widget_closing(self, *args) -> 'void' + | widget_closing(self, widget) + | + | widget_invisible(self, *args) -> 'void' + | widget_invisible(self, widget) + | + | widget_visible(self, *args) -> 'void' + | widget_visible(self, widget) + | + | ---------------------------------------------------------------------- + | 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 + +Help on class View_Hooks in module ida_kernwin: + +class View_Hooks(builtins.object) + | Proxy of C++ View_Hooks class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, _flags=0) -> View_Hooks + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_View_Hooks(...) + | delete_View_Hooks(self) + | + | hook(self, *args) -> 'bool' + | hook(self) -> bool + | + | unhook(self, *args) -> 'bool' + | unhook(self) -> bool + | + | view_activated(self, *args) -> 'void' + | view_activated(self, view) + | + | view_click(self, *args) -> 'void' + | view_click(self, view, event) + | + | view_close(self, *args) -> 'void' + | view_close(self, view) + | + | view_created(self, *args) -> 'void' + | view_created(self, view) + | + | view_curpos(self, *args) -> 'void' + | view_curpos(self, view) + | + | view_dblclick(self, *args) -> 'void' + | view_dblclick(self, view, event) + | + | view_deactivated(self, *args) -> 'void' + | view_deactivated(self, view) + | + | view_keydown(self, *args) -> 'void' + | view_keydown(self, view, key, state) + | + | view_loc_changed(self, *args) -> 'void' + | view_loc_changed(self, view, now, was) + | + | view_mouse_moved(self, *args) -> 'void' + | view_mouse_moved(self, view, event) + | + | view_mouse_over(self, *args) -> 'void' + | view_mouse_over(self, view, event) + | + | view_switched(self, *args) -> 'void' + | view_switched(self, view, rt) + | + | ---------------------------------------------------------------------- + | 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 + +Help on class __qtimer_t in module ida_kernwin: + +class __qtimer_t(builtins.object) + | Proxy of C++ __qtimer_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qtimer_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete___qtimer_t(...) + | delete___qtimer_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 + +Help on function _ask_addr in module ida_kernwin: + +_ask_addr(*args) -> 'ea_t *' + _ask_addr(addr, format) -> bool + +Help on function _ask_long in module ida_kernwin: + +_ask_long(*args) -> 'sval_t *' + _ask_long(value, format) -> bool + +Help on function _ask_seg in module ida_kernwin: + +_ask_seg(*args) -> 'sel_t *' + _ask_seg(sel, format) -> bool + +Help on function _call_ask_form in module ida_kernwin: + +_call_ask_form(*args) + +Help on function _call_open_form in module ida_kernwin: + +_call_open_form(*args) + +Help on class action_ctx_base_t in module ida_kernwin: + +class action_ctx_base_t(builtins.object) + | Proxy of C++ action_ctx_base_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> action_ctx_base_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_action_ctx_base_t(...) + | delete_action_ctx_base_t(self) + | + | _get_form(self, *args) -> 'TWidget *' + | _get_form(self) -> TWidget * + | + | _get_form_title(self, *args) -> 'qstring' + | _get_form_title(self) -> qstring + | + | _get_form_type(self, *args) -> 'twidget_type_t' + | _get_form_type(self) -> twidget_type_t + | + | has_flag(self, *args) -> 'bool' + | has_flag(self, flag) -> bool + | + | reset(self, *args) -> 'void' + | reset(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | action + | action_ctx_base_t_action_get(self) -> char const * + | + | chooser_selection + | action_ctx_base_t_chooser_selection_get(self) -> sizevec_t * + | + | cur_ea + | action_ctx_base_t_cur_ea_get(self) -> ea_t + | + | cur_enum + | action_ctx_base_t_cur_enum_get(self) -> enum_t + | + | cur_extracted_ea + | action_ctx_base_t_cur_value_get(self) -> uval_t + | + | cur_fchunk + | action_ctx_base_t_cur_fchunk_get(self) -> func_t * + | + | cur_flags + | action_ctx_base_t_cur_flags_get(self) -> uint32 + | + | cur_func + | action_ctx_base_t_cur_func_get(self) -> func_t * + | + | cur_seg + | action_ctx_base_t_cur_seg_get(self) -> segment_t * + | + | cur_strmem + | action_ctx_base_t_cur_strmem_get(self) -> member_t * + | + | cur_struc + | action_ctx_base_t_cur_struc_get(self) -> struc_t * + | + | cur_value + | action_ctx_base_t_cur_value_get(self) -> uval_t + | + | focus + | action_ctx_base_t_focus_get(self) -> TWidget * + | + | form + | _get_form(self) -> TWidget * + | + | form_title + | _get_form_title(self) -> qstring + | + | form_type + | _get_form_type(self) -> twidget_type_t + | + | graph_selection + | action_ctx_base_t_graph_selection_get(self) -> screen_graph_selection_t * + | + | regname + | action_ctx_base_t_regname_get(self) -> char const * + | + | thisown + | The membership flag + | + | widget + | action_ctx_base_t_widget_get(self) -> TWidget * + | + | widget_title + | action_ctx_base_t_widget_title_get(self) -> qstring * + | + | widget_type + | action_ctx_base_t_widget_type_get(self) -> twidget_type_t + +Help on class action_desc_t in module ida_kernwin: + +class action_desc_t(builtins.object) + | Proxy of C++ action_desc_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, name, label, handler, shortcut=None, tooltip=None, icon=-1, flags=0) -> action_desc_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_action_desc_t(...) + | delete_action_desc_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | action_desc_t_cb_get(self) -> int + | + | flags + | action_desc_t_flags_get(self) -> int + | + | icon + | action_desc_t_icon_get(self) -> int + | + | label + | action_desc_t_label_get(self) -> char const * + | + | name + | action_desc_t_name_get(self) -> char const * + | + | owner + | action_desc_t_owner_get(self) -> plugin_t const * + | + | shortcut + | action_desc_t_shortcut_get(self) -> char const * + | + | thisown + | The membership flag + | + | tooltip + | action_desc_t_tooltip_get(self) -> char const * + +Help on class action_handler_t in module ida_kernwin: + +class action_handler_t(builtins.object) + | # ---------------------------------------------------------------------- + | + | Methods defined here: + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | activate(self, ctx) + | + | update(self, ctx) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function activate_widget in module ida_kernwin: + +activate_widget(*args) -> 'void' + activate_widget(widget, take_focus) + + + Activate widget (only gui version) ( 'ui_activate_widget' ). + + @param widget: existing widget to display (C++: TWidget *) + @param take_focus: give focus to given widget (C++: bool) + +Help on function add_hotkey in module ida_kernwin: + +add_hotkey(*args) -> 'PyObject *' + add_hotkey(hotkey, pyfunc) -> PyObject * + + + Associates a function call with a hotkey. + Callable pyfunc will be called each time the hotkey is pressed + + @param hotkey: The hotkey + @param pyfunc: Callable + + @return: Context object on success or None on failure. + +Help on function add_idc_hotkey in module ida_kernwin: + +add_idc_hotkey(*args) -> 'int' + add_idc_hotkey(hotkey, idcfunc) -> int + + + Add hotkey for IDC function ( 'ui_add_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + @param idcfunc: IDC function name (C++: const char *) + @return: IDC hotkey error codes + +Help on function add_spaces in module ida_kernwin: + +add_spaces(*args) -> 'PyObject *' + add_spaces(s, len) -> PyObject * + + + Add space characters to the colored string so that its length will be + at least 'len' characters. Don't trim the string if it is longer than + 'len'. + + @param len: the desired length of the string (C++: ssize_t) + @return: pointer to the end of input string + +Help on function addon_count in module ida_kernwin: + +addon_count(*args) -> 'int' + addon_count() -> int + + + Get number of installed addons. + +Help on class addon_info_t in module ida_kernwin: + +class addon_info_t(builtins.object) + | Proxy of C++ addon_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> addon_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_addon_info_t(...) + | delete_addon_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cb + | addon_info_t_cb_get(self) -> size_t + | + | custom_data + | addon_info_t_custom_data_get(self) -> void const * + | + | custom_size + | addon_info_t_custom_size_get(self) -> size_t + | + | freeform + | addon_info_t_freeform_get(self) -> char const * + | + | id + | addon_info_t_id_get(self) -> char const * + | + | name + | addon_info_t_name_get(self) -> char const * + | + | producer + | addon_info_t_producer_get(self) -> char const * + | + | thisown + | The membership flag + | + | url + | addon_info_t_url_get(self) -> char const * + | + | version + | addon_info_t_version_get(self) -> char const * + +Help on function analyzer_options in module ida_kernwin: + +analyzer_options(*args) -> 'void' + analyzer_options() + + + Allow the user to set analyzer options. (show a dialog box) ( + 'ui_analyzer_options' ) + +Help on function ask_addr in module ida_kernwin: + +ask_addr(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_buttons in module ida_kernwin: + +ask_buttons(*args) -> 'int' + ask_buttons(Yes, No, Cancel, deflt, format) -> int + + + Display a dialog box and get choice from maximum three possibilities ( + 'ui_ask_buttons' ).for all buttons:use "" or NULL to take the default + name for the button.use 'format' to hide the cancel button + + @param Yes: text for the first button (C++: const char *) + @param No: text for the second button (C++: const char *) + @param Cancel: text for the third button (C++: const char *) + @param deflt: default choice: one of Button IDs (C++: int) + @param format: printf-style format string for question. It may have + some prefixes, see below. (C++: const char *) + @return: one of Button IDs specifying the selected button (Esc key + returns Cancel/3rd button value) + +Help on function ask_file in module ida_kernwin: + +ask_file(*args) -> 'char *' + ask_file(for_saving, defval, format) -> char * + +Help on function ask_for_feedback in module ida_kernwin: + +ask_for_feedback(*args) -> 'void' + ask_for_feedback(format) + + + Show a message box asking to send the input file tosupport@hex- + rays.com. + + @param format: the reason why the input file is bad (C++: const char + *) + +Help on function ask_ident in module ida_kernwin: + +ask_ident(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_long in module ida_kernwin: + +ask_long(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_seg in module ida_kernwin: + +ask_seg(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_str in module ida_kernwin: + +ask_str(*args) -> 'PyObject *' + ask_str(defval, hist, prompt) -> PyObject * + + + Asks for a long text + + @param hist: history id + @param defval: The default value + @param prompt: The prompt value + @return: None or the entered string + +Help on function ask_text in module ida_kernwin: + +ask_text(*args) -> 'PyObject *' + ask_text(max_size, defval, prompt) -> PyObject * + + + Asks for a long text + + @param max_size: Maximum text length, 0 for unlimited + @param defval: The default value + @param prompt: The prompt value + @return: None or the entered string + +Help on function ask_yn in module ida_kernwin: + +ask_yn(*args) -> 'int' + ask_yn(deflt, format) -> int + + + Display a dialog box and get choice from "Yes", "No", "Cancel". + + @param deflt: default choice: one of Button IDs (C++: int) + @param format: The question in printf() style format (C++: const char + *) + @return: the selected button (one of Button IDs ). Esc key returns + ASKBTN_CANCEL . + +Help on function attach_action_to_menu in module ida_kernwin: + +attach_action_to_menu(*args) -> 'bool' + attach_action_to_menu(menupath, name, flags) -> bool + + + Attach a previously-registered action to the menu ( + 'ui_attach_action_to_menu' ).You should not change top level menu, or + the Edit,Plugins submenus If you want to modify the debugger menu, do + it at the ui_debugger_menu_change event (ida might destroy your menu + item if you do it elsewhere). + + @param menupath: path to the menu item after or before which the + insertion will take place. Example: + Debug/StartProcess Whitespace, punctuation are + ignored. It is allowed to specify only the prefix + of the menu item. Comparison is case insensitive. + menupath may start with the following prefixes: [S] + - modify the main menu of the structure window [E] + - modify the main menu of the enum window (C++: const + char *) + @param name: the action name (C++: const char *) + @param flags: a combination of Set menu flags , to determine menu + item position (C++: int) + @return: success + +Help on function attach_action_to_popup in module ida_kernwin: + +attach_action_to_popup(*args) -> 'bool' + attach_action_to_popup(widget, popup_handle, name, popuppath=None, flags=0) -> bool + + + Insert a previously-registered action into the widget's popup menu ( + 'ui_attach_action_to_popup' ). This function has two "modes": 'single- + shot', and 'permanent'. + + @param widget: target widget (C++: TWidget *) + @param popup_handle: target popup menu if non-NULL, the action is + added to this popup menu invocation (i.e., + 'single-shot') if NULL, the action is added to + a list of actions that should always be present + in context menus for this widget (i.e., + 'permanent'.) (C++: TPopupMenu *) + @param name: action name (C++: const char *) + @param popuppath: can be NULL (C++: const char *) + @param flags: a combination of SETMENU_ flags (see Set menu flags ) + (C++: int) + @return: success + +Help on function attach_action_to_toolbar in module ida_kernwin: + +attach_action_to_toolbar(*args) -> 'bool' + attach_action_to_toolbar(toolbar_name, name) -> bool + + + Attach an action to an existing toolbar ( + 'ui_attach_action_to_toolbar' ). + + @param toolbar_name: the name of the toolbar (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on function attach_dynamic_action_to_popup in module ida_kernwin: + +attach_dynamic_action_to_popup(*args) -> 'bool' + attach_dynamic_action_to_popup(widget, popup_handle, desc, popuppath=None, flags=0) -> bool + + + Create & insert an action into the widget's popup menu ( + 'ui_attach_dynamic_action_to_popup' ). 'action_desc_t::handler' for + 'desc' must be instantiated using 'new', as it will be 'delete'd when + the action is unregistered. + + @param widget: target widget (C++: TWidget *) + @param popup_handle: target popup (C++: TPopupMenu *) + @param desc: created with DYNACTION_DESC_LITERAL (C++: const + action_desc_t &) + @param popuppath: can be NULL (C++: const char *) + @param flags: a combination of SETMENU_ constants (see Set menu flags + ) (C++: int) + @return: success + +Help on function banner in module ida_kernwin: + +banner(*args) -> 'bool' + banner(wait) -> bool + + + Show a banner dialog box ( 'ui_banner' ). + + @param wait: time to wait before closing (C++: int) + +Help on function beep in module ida_kernwin: + +beep(*args) -> 'void' + beep(beep_type=beep_default) + + + Issue a beeping sound ( 'ui_beep' ). + + @param beep_type: beep_t (C++: beep_t) + +Help on function call_nav_colorizer in module ida_kernwin: + +call_nav_colorizer(*args) -> 'uint32' + call_nav_colorizer(dict, ea, nbytes) -> uint32 + + + To be used with the IDA-provided colorizer, that is + returned as result of the first call to set_nav_colorizer(). + +Help on function cancel_exec_request in module ida_kernwin: + +cancel_exec_request(*args) -> 'bool' + cancel_exec_request(req_id) -> bool + + + Try to cancel an asynchronous exec request ( 'ui_cancel_exec_request' + ). + + @param req_id: request id (C++: int) + +Help on function choose_activate in module ida_kernwin: + +choose_activate(*args) -> 'void' + choose_activate(_self) + +Help on function choose_choose in module ida_kernwin: + +choose_choose(*args) -> 'PyObject *' + choose_choose(_self) -> PyObject * + +Help on function choose_close in module ida_kernwin: + +choose_close(*args) -> 'void' + choose_close(_self) + +Help on function choose_create_embedded_chobj in module ida_kernwin: + +choose_create_embedded_chobj(*args) -> 'PyObject *' + choose_create_embedded_chobj(_self) -> PyObject * + +Help on function choose_entry in module ida_kernwin: + +choose_entry(*args) -> 'ea_t' + choose_entry(title) -> ea_t + + + Choose an entry point ( 'ui_choose' , 'chtype_entry' ). + + @param title: chooser title (C++: const char *) + @return: ea of selected entry point, BADADDR if none selected + +Help on function choose_enum in module ida_kernwin: + +choose_enum(*args) -> 'enum_t' + choose_enum(title, default_id) -> enum_t + + + Choose an enum ( 'ui_choose' , 'chtype_enum' ). + + @param title: chooser title (C++: const char *) + @param default_id: id of enum to select by default (C++: enum_t) + @return: enum id of selected enum, BADNODE if none selected + +Help on function choose_enum_by_value in module ida_kernwin: + +choose_enum_by_value(*args) -> 'uchar *' + choose_enum_by_value(title, default_id, value, nbytes) -> enum_t + + + Choose an enum, restricted by value & size ( 'ui_choose' , + 'chtype_enum_by_value_and_size' ). If the given value cannot be found + initially, this function will ask if the user would like to import a + standard enum. + + @param title: chooser title (C++: const char *) + @param default_id: id of enum to select by default (C++: enum_t) + @param value: value to search for (C++: uval_t) + @param nbytes: size of value (C++: int) + @return: enum id of selected (or imported) enum, BADNODE if none was + found + +Help on function choose_find in module ida_kernwin: + +choose_find(*args) -> 'PyObject *' + choose_find(title) -> PyObject * + +Help on function choose_func in module ida_kernwin: + +choose_func(*args) -> 'func_t *' + choose_func(title, default_ea) -> func_t * + + + Choose a function ( 'ui_choose' , 'chtype_func' ). + + @param title: chooser title (C++: const char *) + @param default_ea: ea of function to select by default (C++: ea_t) + @return: pointer to function that was selected, NULL if none selected + +Help on function choose_get_widget in module ida_kernwin: + +choose_get_widget(*args) -> 'TWidget *' + choose_get_widget(_self) -> TWidget * + +Help on function choose_idasgn in module ida_kernwin: + +choose_idasgn(*args) -> 'PyObject *' + choose_idasgn() -> PyObject * + + + Opens the signature chooser + + @return: None or the selected signature name + +Help on function choose_name in module ida_kernwin: + +choose_name(*args) -> 'ea_t' + choose_name(title) -> ea_t + + + Choose a name ( 'ui_choose' , 'chtype_name' ). + + @param title: chooser title (C++: const char *) + @return: ea of selected name, BADADDR if none selected + +Help on function choose_refresh in module ida_kernwin: + +choose_refresh(*args) -> 'void' + choose_refresh(_self) + +Help on function choose_segm in module ida_kernwin: + +choose_segm(*args) -> 'segment_t *' + choose_segm(title, default_ea) -> segment_t * + + + Choose a segment ( 'ui_choose' , 'chtype_segm' ). + + @param title: chooser title (C++: const char *) + @param default_ea: ea of segment to select by default (C++: ea_t) + @return: pointer to segment that was selected, NULL if none selected + +Help on function choose_srcp in module ida_kernwin: + +choose_srcp(*args) -> 'sreg_range_t *' + choose_srcp(title) -> sreg_range_t * + + + Choose a segment register change point ( 'ui_choose' , 'chtype_srcp' + ). + + @param title: chooser title (C++: const char *) + @return: pointer to segment register range of selected change point, + NULL if none selected + +Help on function choose_stkvar_xref in module ida_kernwin: + +choose_stkvar_xref(*args) -> 'ea_t' + choose_stkvar_xref(pfn, mptr) -> ea_t + + + Choose an xref to a stack variable ( 'ui_choose' , 'chtype_name' ). + + @param pfn: function (C++: func_t *) + @param mptr: variable (C++: member_t *) + @return: ea of the selected xref, BADADDR if none selected + +Help on function choose_struc in module ida_kernwin: + +choose_struc(*args) -> 'struc_t *' + choose_struc(title) -> struc_t * + + + Choose a structure ( 'ui_choose' , 'chtype_segm' ). + + @param title: chooser title; (C++: const char *) + @return: pointer to structure that was selected, NULL if none selected + +Help on function choose_til in module ida_kernwin: + +choose_til(*args) -> 'qstring *' + choose_til() -> str + + + Choose a type library ( 'ui_choose' , 'chtype_idatil' ). + +Help on function choose_xref in module ida_kernwin: + +choose_xref(*args) -> 'ea_t' + choose_xref(to) -> ea_t + + + Choose an xref to an address ( 'ui_choose' , 'chtype_xref' ). + + @param to: referenced address (C++: ea_t) + @return: ea of selected xref, BADADDR if none selected + +Help on class chooser_item_attrs_t in module ida_kernwin: + +class chooser_item_attrs_t(builtins.object) + | Proxy of C++ chooser_item_attrs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> chooser_item_attrs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_chooser_item_attrs_t(...) + | delete_chooser_item_attrs_t(self) + | + | reset(self, *args) -> 'void' + | reset(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | color + | chooser_item_attrs_t_color_get(self) -> bgcolor_t + | + | flags + | chooser_item_attrs_t_flags_get(self) -> int + | + | thisown + | The membership flag + +Help on function clear_refresh_request in module ida_kernwin: + +clear_refresh_request(*args) -> 'void' + clear_refresh_request(mask) + +Help on class cli_t in module ida_kernwin: + +class cli_t(ida_idaapi.pyidc_opaque_object_t) + | cli_t wrapper class. + | + | This class allows you to implement your own command line interface handlers. + | + | Method resolution order: + | cli_t + | ida_idaapi.pyidc_opaque_object_t + | builtins.object + | + | Methods defined here: + | + | __del__(self) + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | register(self, flags=0, sname=None, lname=None, hint=None) + | Registers the CLI. + | + | @param flags: Feature bits. No bits are defined yet, must be 0 + | @param sname: Short name (displayed on the button) + | @param lname: Long name (displayed in the menu) + | @param hint: Hint for the input line + | + | @return Boolean: True-Success, False-Failed + | + | unregister(self) + | Unregisters the CLI (if it was registered) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function close_chooser in module ida_kernwin: + +close_chooser(*args) -> 'bool' + close_chooser(title) -> bool + + + Close a non-modal chooser ( 'ui_close_chooser' ). + + @param title: window title of chooser to close (C++: const char *) + @return: success + +Help on function close_widget in module ida_kernwin: + +close_widget(*args) -> 'void' + close_widget(widget, options) + + + Close widget ( 'ui_close_widget' , only gui version). + + @param widget: pointer to the widget to close (C++: TWidget *) + @param options: Form close flags (C++: int) + +Help on function clr_cancelled in module ida_kernwin: + +clr_cancelled(*args) -> 'void' + clr_cancelled() + + + Clear "Cancelled" flag ( 'ui_clr_cancelled' ) + +Help on function create_code_viewer in module ida_kernwin: + +create_code_viewer(*args) -> 'TWidget *' + create_code_viewer(custview, flags=0, parent=None) -> TWidget * + + + Create a code viewer ( 'ui_create_code_viewer' ). A code viewer + contains on the left side a widget representing the line numbers, and + on the right side, the child widget passed as parameter. It will + inherit its title from the child widget. + + @param custview: the custom view to be added (C++: TWidget *) + @param flags: Code viewer flags (C++: int) + @param parent: widget to contain the new code viewer (C++: TWidget *) + +Help on function create_empty_widget in module ida_kernwin: + +create_empty_widget(*args) -> 'TWidget *' + create_empty_widget(title, icon=-1) -> TWidget * + + + Create an empty widget, serving as a container for custom user widgets + + @param title (C++: const char *) + @param icon (C++: int) + +Help on function create_menu in module ida_kernwin: + +create_menu(*args) -> 'bool' + create_menu(name, label, menupath=None) -> bool + + + Create a menu with the given name, label and optional position, either + in the menubar, or as a submenu. If 'menupath' is non-NULL, it + provides information about where the menu should be positioned. First, + IDA will try and resolve the corresponding menu by its name. If such + an existing menu is found and is present in the menubar, then the new + menu will be inserted in the menubar before it. Otherwise, IDA will + try to resolve 'menupath' as it would for 'attach_action_to_menu()' + and, if found, add the new menu like so: + + // The new 'My menu' submenu will appear in the 'Comments' submenu + // before the 'Enter comment..." command + create_menu("(...)", "My menu", "Edit/Comments/Enter comment..."); + + or + + // The new 'My menu' submenu will appear at the end of the + // 'Comments' submenu. + create_menu("(...)", "My menu", "Edit/Comments/"); + + If the above fails, the new menu will be appended to the menubar. + + @param name: name of menu (must be unique) (C++: const char *) + @param label: label of menu (C++: const char *) + @param menupath: where should the menu be inserted (C++: const char *) + @return: success + +Help on function create_toolbar in module ida_kernwin: + +create_toolbar(*args) -> 'bool' + create_toolbar(name, label, before=None, flags=0) -> bool + + + Create a toolbar with the given name, label and optional position + + @param name: name of toolbar (must be unique) (C++: const char *) + @param label: label of toolbar (C++: const char *) + @param before: if non-NULL, the toolbar before which the new toolbar + will be inserted (C++: const char *) + @param flags: a combination of create toolbar flags , to determine + toolbar position (C++: int) + @return: success + +Help on function custom_viewer_jump in module ida_kernwin: + +custom_viewer_jump(*args) -> 'bool' + custom_viewer_jump(v, loc, flags=0) -> bool + + + Append 'loc' to the viewer's history, and cause the viewer to display + it. + + @param v: (TWidget *) (C++: TWidget *) + @param loc: (const lochist_entry_t &) (C++: const lochist_entry_t + &) + @param flags: (uint32) or'ed combination of CVNF_* values (C++: + uint32) + @return: success + +Help on function del_hotkey in module ida_kernwin: + +del_hotkey(*args) -> 'bool' + del_hotkey(pyctx) -> bool + + + Deletes a previously registered function hotkey + + @param ctx: Hotkey context previously returned by add_hotkey() + + @return: Boolean. + +Help on function del_idc_hotkey in module ida_kernwin: + +del_idc_hotkey(*args) -> 'bool' + del_idc_hotkey(hotkey) -> bool + + + Delete IDC function hotkey ( 'ui_del_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + +Help on function delete_menu in module ida_kernwin: + +delete_menu(*args) -> 'bool' + delete_menu(name) -> bool + + + Delete an existing menu + + @param name: name of menu (C++: const char *) + @return: success + +Help on function delete_toolbar in module ida_kernwin: + +delete_toolbar(*args) -> 'bool' + delete_toolbar(name) -> bool + + + Delete an existing toolbar + + @param name: name of toolbar (C++: const char *) + @return: success + +Help on function detach_action_from_menu in module ida_kernwin: + +detach_action_from_menu(*args) -> 'bool' + detach_action_from_menu(menupath, name) -> bool + + + Detach an action from the menu ( 'ui_detach_action_from_menu' ). + + @param menupath: path to the menu item (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on function detach_action_from_popup in module ida_kernwin: + +detach_action_from_popup(*args) -> 'bool' + detach_action_from_popup(widget, name) -> bool + + + Remove a previously-registered action, from the list of 'permanent' + context menu actions for this widget ( 'ui_detach_action_from_popup' + ). This only makes sense if the action has been added to 'widget's + list of permanent popup actions by calling attach_action_to_popup in + 'permanent' mode. + + @param widget: target widget (C++: TWidget *) + @param name: action name (C++: const char *) + +Help on function detach_action_from_toolbar in module ida_kernwin: + +detach_action_from_toolbar(*args) -> 'bool' + detach_action_from_toolbar(toolbar_name, name) -> bool + + + Detach an action from the toolbar ( 'ui_detach_action_from_toolbar' ). + + @param toolbar_name: the name of the toolbar (C++: const char *) + @param name: the action name (C++: const char *) + @return: success + +Help on class disasm_line_t in module ida_kernwin: + +class disasm_line_t(builtins.object) + | Proxy of C++ disasm_line_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> disasm_line_t + | __init__(self, other) -> disasm_line_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_disasm_line_t(...) + | delete_disasm_line_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | at + | disasm_line_t_at_get(self) -> place_t + | + | bg_color + | disasm_line_t_bg_color_get(self) -> bgcolor_t + | + | is_default + | disasm_line_t_is_default_get(self) -> bool + | + | line + | disasm_line_t_line_get(self) -> qstring * + | + | prefix_color + | disasm_line_t_prefix_color_get(self) -> color_t + | + | thisown + | The membership flag + +Help on class disasm_text_t in module ida_kernwin: + +class disasm_text_t(builtins.object) + | Proxy of C++ qvector< disasm_line_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'disasm_line_t const &' + | __getitem__(self, i) -> disasm_line_t + | + | __init__(self, *args) + | __init__(self) -> disasm_text_t + | __init__(self, x) -> disasm_text_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_disasm_text_t(...) + | delete_disasm_text_t(self) + | + | at(self, *args) -> 'disasm_line_t const &' + | at(self, _idx) -> disasm_line_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< disasm_line_t >::const_iterator' + | begin(self) -> disasm_line_t + | begin(self) -> disasm_line_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< disasm_line_t >::const_iterator' + | end(self) -> disasm_line_t + | end(self) -> disasm_line_t + | + | erase(self, *args) -> 'qvector< disasm_line_t >::iterator' + | erase(self, it) -> disasm_line_t + | erase(self, first, last) -> disasm_line_t + | + | extract(self, *args) -> 'disasm_line_t *' + | extract(self) -> disasm_line_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=disasm_line_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< disasm_line_t >::iterator' + | insert(self, it, x) -> disasm_line_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'disasm_line_t &' + | push_back(self, x) + | push_back(self) -> disasm_line_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function display_copyright_warning in module ida_kernwin: + +display_copyright_warning(*args) -> 'bool' + display_copyright_warning() -> bool + + + Display copyright warning ( 'ui_copywarn' ). + + @return: yes/no + +Help on function display_widget in module ida_kernwin: + +display_widget(*args) -> 'void' + display_widget(widget, options, dest_ctrl=None) + + + Display a widget, dock it if not done before + + @param widget: widget to display (C++: TWidget *) + @param options: Widget open flags (C++: uint32) + @param dest_ctrl: where to dock: if NULL or invalid then use the + active docker if there is not create a new tab + relative to current active tab (C++: const char *) + +Help on function ea2str in module ida_kernwin: + +ea2str(*args) -> 'size_t' + ea2str(ea) -> str + + + Convert linear address to UTF-8 string. + + + @param ea (C++: ea_t) + +Help on function ea_viewer_history_push_and_jump in module ida_kernwin: + +ea_viewer_history_push_and_jump(*args) -> 'bool' + ea_viewer_history_push_and_jump(v, ea, x, y, lnnum) -> bool + + + Push current location in the history and jump to the given location ( + 'ui_ea_viewer_history_push_and_jump' ). This will jump in the given ea + viewer and also in other synchronized views. + + @param v: ea viewer (C++: TWidget *) + @param ea: jump destination (C++: ea_t) + @param x: coords on screen (C++: int) + @param y: coords on screen (C++: int) + @param lnnum: desired line number of given address (C++: int) + +Help on function enable_chooser_item_attrs in module ida_kernwin: + +enable_chooser_item_attrs(*args) -> 'bool' + enable_chooser_item_attrs(chooser_caption, enable) -> bool + + + Enable item-specific attributes for chooser items ( + 'ui_enable_chooser_item_attrs' ). For example: color list items + differently depending on a criterium.If enabled, the chooser will + generate ui_get_chooser_item_attrsevents that can be intercepted by a + plugin to modify the item attributes.This event is generated only in + the GUI version of IDA.Specifying 'CH_ATTRS' bit at the chooser + creation time has the same effect. + + @param chooser_caption (C++: const char *) + @param enable (C++: bool) + @return: success + +Help on class enumplace_t in module ida_kernwin: + +class enumplace_t(place_t) + | Proxy of C++ enumplace_t class. + | + | Method resolution order: + | enumplace_t + | place_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_enumplace_t(...) + | delete_enumplace_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bmask + | enumplace_t_bmask_get(self) -> bmask_t + | + | idx + | enumplace_t_idx_get(self) -> size_t + | + | serial + | enumplace_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | value + | enumplace_t_value_get(self) -> uval_t + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) -> 'void' + | _print(self, out_buf, ud) + | + | adjust(self, *args) -> 'void' + | adjust(self, ud) + | + | beginning(self, *args) -> 'bool' + | beginning(self, ud) -> bool + | + | clone(self, *args) -> 'place_t *' + | clone(self) -> place_t + | + | compare(self, *args) -> 'int' + | compare(self, t2) -> int + | + | copyfrom(self, *args) -> 'void' + | copyfrom(self, _from) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, _in) -> bool + | + | ending(self, *args) -> 'bool' + | ending(self, ud) -> bool + | + | enter(self, *args) -> 'place_t *' + | enter(self, arg2) -> place_t + | + | generate(self, *args) -> 'PyObject *' + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) -> 'int' + | id(self) -> int + | + | leave(self, *args) -> 'void' + | leave(self, arg2) + | + | makeplace(self, *args) -> 'place_t *' + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) -> 'char const *' + | name(self) -> char const * + | + | next(self, *args) -> 'bool' + | next(self, ud) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, ud) -> bool + | + | rebase(self, *args) -> 'bool' + | rebase(self, arg2) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self) -> ea_t + | + | touval(self, *args) -> 'uval_t' + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) -> 'enumplace_t *' + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) -> 'idaplace_t *' + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) -> 'simpleline_place_t *' + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) -> 'structplace_t *' + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on function error in module ida_kernwin: + +error(*args) -> 'void' + error(format) + + + Display a fatal message in a message box and quit IDA + + @param format: message to print + +Help on function execute_sync in module ida_kernwin: + +execute_sync(*args) -> 'int' + execute_sync(py_callable, reqf) -> int + + + Executes a function in the context of the main thread. + If the current thread not the main thread, then the call is queued and + executed afterwards. + + @param callable: A python callable object, must return an integer value + @param reqf: one of MFF_ flags + @return: -1 or the return value of the callable + +Help on function execute_ui_requests in module ida_kernwin: + +execute_ui_requests(*args) -> 'bool' + execute_ui_requests(py_list) -> bool + + + Inserts a list of callables into the UI message processing queue. + When the UI is ready it will call one callable. + A callable can request to be called more than once if it returns True. + + @param callable_list: A list of python callable objects. + @note: A callable should return True if it wants to be called more than once. + @return: Boolean. False if the list contains a non callabale item + +Help on function find_widget in module ida_kernwin: + +find_widget(*args) -> 'TWidget *' + find_widget(caption) -> TWidget * + + + Find widget with the specified caption (only gui version) ( + 'ui_find_widget' ). NB: this callback works only with the tabbed + widgets! + + @param caption: title of tab, or window title if widget is not tabbed + (C++: const char *) + @return: pointer to the TWidget, NULL if none is found + +Help on function formchgcbfa_close in module ida_kernwin: + +formchgcbfa_close(*args) -> 'void' + formchgcbfa_close(p_fa, close_normally) + +Help on function formchgcbfa_enable_field in module ida_kernwin: + +formchgcbfa_enable_field(*args) -> 'bool' + formchgcbfa_enable_field(p_fa, fid, enable) -> bool + +Help on function formchgcbfa_get_field_value in module ida_kernwin: + +formchgcbfa_get_field_value(*args) -> 'PyObject *' + formchgcbfa_get_field_value(p_fa, fid, ft, sz) -> PyObject * + +Help on function formchgcbfa_get_focused_field in module ida_kernwin: + +formchgcbfa_get_focused_field(*args) -> 'int' + formchgcbfa_get_focused_field(p_fa) -> int + +Help on function formchgcbfa_move_field in module ida_kernwin: + +formchgcbfa_move_field(*args) -> 'bool' + formchgcbfa_move_field(p_fa, fid, x, y, w, h) -> bool + +Help on function formchgcbfa_refresh_field in module ida_kernwin: + +formchgcbfa_refresh_field(*args) -> 'void' + formchgcbfa_refresh_field(p_fa, fid) + +Help on function formchgcbfa_set_field_value in module ida_kernwin: + +formchgcbfa_set_field_value(*args) -> 'bool' + formchgcbfa_set_field_value(p_fa, fid, ft, py_val) -> bool + +Help on function formchgcbfa_set_focused_field in module ida_kernwin: + +formchgcbfa_set_focused_field(*args) -> 'bool' + formchgcbfa_set_focused_field(p_fa, fid) -> bool + +Help on function formchgcbfa_show_field in module ida_kernwin: + +formchgcbfa_show_field(*args) -> 'bool' + formchgcbfa_show_field(p_fa, fid, show) -> bool + +Help on function free_custom_icon in module ida_kernwin: + +free_custom_icon(*args) -> 'void' + free_custom_icon(icon_id) + + + Frees an icon loaded with load_custom_icon() + +Help on function gen_disasm_text in module ida_kernwin: + +gen_disasm_text(*args) -> 'void' + gen_disasm_text(text, ea1, ea2, truncate_lines) + + + Generate disassembly text for a range. + + @param text: result (C++: text_t &) + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @param truncate_lines: (on idainfo::margin ) (C++: bool) + +Help on function get_action_checkable in module ida_kernwin: + +get_action_checkable(*args) -> 'bool *' + get_action_checkable(name) -> bool + + + Get an action's checkability ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_checked in module ida_kernwin: + +get_action_checked(*args) -> 'bool *' + get_action_checked(name) -> bool + + + Get an action's checked state ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_icon in module ida_kernwin: + +get_action_icon(*args) -> 'int *' + get_action_icon(name) -> bool + + + Get an action's icon ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_label in module ida_kernwin: + +get_action_label(*args) -> 'qstring *' + get_action_label(name) -> str + + + Get an action's label ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_shortcut in module ida_kernwin: + +get_action_shortcut(*args) -> 'qstring *' + get_action_shortcut(name) -> str + + + Get an action's shortcut ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_state in module ida_kernwin: + +get_action_state(*args) -> 'action_state_t *' + get_action_state(name) -> bool + + + Get an action's state ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_tooltip in module ida_kernwin: + +get_action_tooltip(*args) -> 'qstring *' + get_action_tooltip(name) -> str + + + Get an action's tooltip ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_action_visibility in module ida_kernwin: + +get_action_visibility(*args) -> 'bool *' + get_action_visibility(name) -> bool + + + Get an action's visibility ( 'ui_get_action_attr' ). + + @param name: the action name (C++: const char *) + @return: success + +Help on function get_active_modal_widget in module ida_kernwin: + +get_active_modal_widget(*args) -> 'TWidget *' + get_active_modal_widget() -> TWidget * + + + Get the current, active modal TWidget instance. Note that in this + context, the "wait dialog" is not considered: this function will + return NULL even if it is currently shown. + + @return: TWidget * the active modal widget, or NULL + +Help on function get_addon_info in module ida_kernwin: + +get_addon_info(*args) -> 'bool' + get_addon_info(id, info) -> bool + + + Get info about a registered addon with a given product code. info->cb + must be valid! NB: all pointers are invalidated by next call to + register_addon or get_addon_info + + @param id (C++: const char *) + @param info (C++: addon_info_t *) + @return: false if not found + +Help on function get_addon_info_idx in module ida_kernwin: + +get_addon_info_idx(*args) -> 'bool' + get_addon_info_idx(index, info) -> bool + + + Get info about a registered addon with specific index. info->cb must + be valid! NB: all pointers are invalidated by next call to + register_addon or get_addon_info + + @param index (C++: int) + @param info (C++: addon_info_t *) + @return: false if index is out of range + +Help on function get_chooser_data in module ida_kernwin: + +get_chooser_data(*args) -> 'PyObject *' + get_chooser_data(chooser_caption, n) -> PyObject * + + + Get the text corresponding to the index N in the chooser data. Use -1 + to get the header. + + @param chooser_caption (C++: const char *) + @param n (C++: int) + +Help on function get_chooser_obj in module ida_kernwin: + +get_chooser_obj(*args) -> 'void *' + get_chooser_obj(chooser_caption) -> void * + + + Get the underlying object of the specified chooser ( + 'ui_get_chooser_obj' ).This is object is chooser-specific. + + @param chooser_caption (C++: const char *) + @return: the object that was used to create the chooser + +Help on function get_curline in module ida_kernwin: + +get_curline(*args) -> 'char const *' + get_curline() -> char const * + + + Get current line from the disassemble window ( 'ui_get_curline' ). + + @return: cptr current line with the color codes (use tag_remove() to + remove the color codes) + +Help on function get_current_viewer in module ida_kernwin: + +get_current_viewer(*args) -> 'TWidget *' + get_current_viewer() -> TWidget * + + + Get current ida viewer (idaview or custom viewer) ( + 'ui_get_current_viewer' ) + +Help on function get_current_widget in module ida_kernwin: + +get_current_widget(*args) -> 'TWidget *' + get_current_widget() -> TWidget * + + + Get a pointer to the current widget ( 'ui_get_current_widget' ). + +Help on function get_cursor in module ida_kernwin: + +get_cursor(*args) -> 'int *, int *' + get_cursor() -> bool + + + Get the cursor position on the screen ( 'ui_get_cursor' ).coordinates + are 0-based + +Help on function get_custom_viewer_curline in module ida_kernwin: + +get_custom_viewer_curline(*args) -> 'char const *' + get_custom_viewer_curline(custom_viewer, mouse) -> char const * + + + Get current line of custom viewer ( 'ui_get_custom_viewer_curline' ). + The returned line contains color codes + + @param custom_viewer: view (C++: TWidget *) + @param mouse: mouse position (otherwise cursor position) (C++: bool) + @return: pointer to contents of current line + +Help on function get_custom_viewer_location in module ida_kernwin: + +get_custom_viewer_location(*args) -> 'bool' + get_custom_viewer_location(out, custom_viewer, mouse=False) -> bool + + + Get the current location in a custom viewer ( + 'ui_get_custom_viewer_location' ). + + + @param out (C++: lochist_entry_t *) + @param custom_viewer (C++: TWidget *) + @param mouse (C++: bool) + +Help on function get_custom_viewer_place in module ida_kernwin: + +get_custom_viewer_place(*args) -> 'int *, int *' + get_custom_viewer_place(custom_viewer, mouse) -> place_t + + + Get current place in a custom viewer ( 'ui_get_curplace' ).See also + the more complete 'get_custom_viewer_location()' + + @param custom_viewer: view (C++: TWidget *) + @param mouse: mouse position (otherwise cursor position) (C++: bool) + +Help on function get_ea_viewer_history_info in module ida_kernwin: + +get_ea_viewer_history_info(*args) -> 'bool' + get_ea_viewer_history_info(nback, nfwd, v) -> bool + + + Get information about what's in the history ( + 'ui_ea_viewer_history_info' ). + + @param nback: number of available back steps (C++: int *) + @param nfwd: number of available forward steps (C++: int *) + @param v: ea viewer (C++: TWidget *) + +Help on function get_hexdump_ea in module ida_kernwin: + +get_hexdump_ea(*args) -> 'ea_t' + get_hexdump_ea(hexdump_num) -> ea_t + + + Get the current address in a hex view. + + @param hexdump_num: number of hexview window (C++: int) + +Help on function get_highlight in module ida_kernwin: + +get_highlight(*args) -> 'PyObject *' + get_highlight(v) -> PyObject * + + + Returns the currently highlighted identifier and flags + + @return: a tuple (text, flags), or None if nothing + is highlighted or in case of error. + +Help on function get_kernel_version in module ida_kernwin: + +get_kernel_version(*args) -> 'size_t' + get_kernel_version() -> str + + + Get IDA kernel version (in a string like "5.1"). + +Help on function get_key_code in module ida_kernwin: + +get_key_code(*args) -> 'ushort' + get_key_code(keyname) -> ushort + + + Get keyboard key code by its name ( 'ui_get_key_code' ) + + + @param keyname (C++: const char *) + +Help on function get_navband_ea in module ida_kernwin: + +get_navband_ea(*args) -> 'ea_t' + get_navband_ea(pixel) -> ea_t + + + Translate the pixel position on the navigation band, into an address. + + + @param pixel (C++: int) + +Help on function get_navband_pixel in module ida_kernwin: + +get_navband_pixel(*args) -> 'bool *' + get_navband_pixel(ea) -> int + + + Maps an address, onto a pixel coordinate within the navband + + @param ea: The address to map + @return: a list [pixel, is_vertical] + +Help on function get_opnum in module ida_kernwin: + +get_opnum(*args) -> 'int' + get_opnum() -> int + + + Get current operand number, -1 means no operand ( 'ui_get_opnum' ) + +Help on function get_output_curline in module ida_kernwin: + +get_output_curline(*args) -> 'qstring *' + get_output_curline(mouse) -> str + + + Get current line of output window ( 'ui_get_output_curline' ). + + @param mouse: current for mouse pointer? (C++: bool) + @return: false if output contains no text + +Help on function get_output_cursor in module ida_kernwin: + +get_output_cursor(*args) -> 'int *, int *' + get_output_cursor() -> bool + + + Get coordinates of the output window's cursor ( 'ui_get_output_cursor' + ).coordinates are 0-basedthis function will succeed even if the output + window is not visible + +Help on function get_output_selected_text in module ida_kernwin: + +get_output_selected_text(*args) -> 'qstring *' + get_output_selected_text() -> str + + + Returns selected text from output window ( + 'ui_get_output_selected_text' ). + + @return: true if there is a selection + +Help on function get_place_class in module ida_kernwin: + +get_place_class(*args) -> 'place_t const *' + get_place_class(out_flags, out_sdk_version, id) -> place_t + + + Get information about a previously-registered 'place_t' class. See + also 'register_place_class()' . + + @param out_flags: output flags (can be NULL) (C++: int *) + @param out_sdk_version: sdk version the place was created with (can be + NULL) (C++: int *) + @param id: place class ID (C++: int) + @return: the place_t template, or NULL if not found + +Help on function get_place_class_id in module ida_kernwin: + +get_place_class_id(*args) -> 'int' + get_place_class_id(name) -> int + + + Get the place class ID for the place that has been registered as + 'name'. + + @param name: the class name (C++: const char *) + @return: the place class ID, or -1 if not found + +Help on function get_place_class_template in module ida_kernwin: + +get_place_class_template(*args) -> 'place_t const *' + get_place_class_template(id) -> place_t + + + See 'get_place_class()' + + + @param id (C++: int) + +Help on function get_registered_actions in module ida_kernwin: + +get_registered_actions(*args) -> 'PyObject *' + get_registered_actions() -> PyObject * + + + Get a list of all currently-registered actions + +Help on function get_screen_ea in module ida_kernwin: + +get_screen_ea(*args) -> 'ea_t' + get_screen_ea() -> ea_t + + + Get the address at the screen cursor ( 'ui_screenea' ) + +Help on function get_tab_size in module ida_kernwin: + +get_tab_size(*args) -> 'int' + get_tab_size(path) -> int + + + Get the size of a tab in spaces ( 'ui_get_tab_size' ). + + @param path: the path of the source view for which the tab size is + requested. if NULL, the default size is returned. (C++: + const char *) + +Help on function get_user_strlist_options in module ida_kernwin: + +get_user_strlist_options(*args) -> 'void' + get_user_strlist_options(out) + +Help on function get_view_renderer_type in module ida_kernwin: + +get_view_renderer_type(*args) -> 'tcc_renderer_type_t' + get_view_renderer_type(v) -> tcc_renderer_type_t + + + Get the type of renderer currently in use in the given view ( + 'ui_get_renderer_type' ) + + + @param v (C++: TWidget *) + +Help on function get_viewer_place_type in module ida_kernwin: + +get_viewer_place_type(*args) -> 'tcc_place_type_t' + get_viewer_place_type(viewer) -> tcc_place_type_t + + + Get the type of 'place_t' instances a viewer uses & creates ( + 'ui_get_viewer_place_type' ). + + + @param viewer (C++: TWidget *) + +Help on function get_viewer_user_data in module ida_kernwin: + +get_viewer_user_data(*args) -> 'void *' + get_viewer_user_data(viewer) -> void * + + + Get the user data from a custom viewer ( 'ui_get_viewer_user_data' ) + + + @param viewer (C++: TWidget *) + +Help on function get_widget_title in module ida_kernwin: + +get_widget_title(*args) -> 'qstring *' + get_widget_title(widget) -> str + + + Get the TWidget's title ( 'ui_get_widget_title' ). + + + @param widget (C++: TWidget *) + +Help on function get_widget_type in module ida_kernwin: + +get_widget_type(*args) -> 'twidget_type_t' + get_widget_type(widget) -> twidget_type_t + + + Get the type of the TWidget * ( 'ui_get_widget_type' ). + + + @param widget (C++: TWidget *) + +Help on function get_window_id in module ida_kernwin: + +get_window_id(*args) -> 'void *' + get_window_id(name=None) -> void * + + + Get the system-specific window ID (GUI version only) + + @param name (C++: const char *) + @return: the low-level window ID + +Help on function hide_wait_box in module ida_kernwin: + +hide_wait_box(*args) -> 'void' + hide_wait_box() + + + Hide the "Please wait dialog box". + +Help on class idaplace_t in module ida_kernwin: + +class idaplace_t(place_t) + | Proxy of C++ idaplace_t class. + | + | Method resolution order: + | idaplace_t + | place_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_idaplace_t(...) + | delete_idaplace_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | ea + | idaplace_t_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) -> 'void' + | _print(self, out_buf, ud) + | + | adjust(self, *args) -> 'void' + | adjust(self, ud) + | + | beginning(self, *args) -> 'bool' + | beginning(self, ud) -> bool + | + | clone(self, *args) -> 'place_t *' + | clone(self) -> place_t + | + | compare(self, *args) -> 'int' + | compare(self, t2) -> int + | + | copyfrom(self, *args) -> 'void' + | copyfrom(self, _from) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, _in) -> bool + | + | ending(self, *args) -> 'bool' + | ending(self, ud) -> bool + | + | enter(self, *args) -> 'place_t *' + | enter(self, arg2) -> place_t + | + | generate(self, *args) -> 'PyObject *' + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) -> 'int' + | id(self) -> int + | + | leave(self, *args) -> 'void' + | leave(self, arg2) + | + | makeplace(self, *args) -> 'place_t *' + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) -> 'char const *' + | name(self) -> char const * + | + | next(self, *args) -> 'bool' + | next(self, ud) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, ud) -> bool + | + | rebase(self, *args) -> 'bool' + | rebase(self, arg2) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self) -> ea_t + | + | touval(self, *args) -> 'uval_t' + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) -> 'enumplace_t *' + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) -> 'idaplace_t *' + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) -> 'simpleline_place_t *' + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) -> 'structplace_t *' + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on function info in module ida_kernwin: + +info(*args) -> 'void' + info(format) + +Help on function install_command_interpreter in module ida_kernwin: + +install_command_interpreter(*args) -> 'int' + install_command_interpreter(py_obj) -> int + + + Install command line interpreter ( 'ui_install_cli' ) + +Help on function internal_register_place_class in module ida_kernwin: + +internal_register_place_class(*args) -> 'int' + internal_register_place_class(tmplate, flags, owner, sdk_version) -> int + +Help on function is_action_enabled in module ida_kernwin: + +is_action_enabled(*args) -> 'bool' + is_action_enabled(s) -> bool + + + Check if the given action state is one of AST_ENABLE*. + + + @param s (C++: action_state_t) + +Help on function is_chooser_widget in module ida_kernwin: + +is_chooser_widget(*args) -> 'bool' + is_chooser_widget(t) -> bool + + + Does the given widget type specify a chooser widget? + + + @param t (C++: twidget_type_t) + +Help on function is_idaq in module ida_kernwin: + +is_idaq(*args) -> 'bool' + is_idaq() -> bool + + + Returns True or False depending if IDAPython is hosted by IDAQ + +Help on function is_msg_inited in module ida_kernwin: + +is_msg_inited(*args) -> 'bool' + is_msg_inited() -> bool + + + Can we use msg() functions? + +Help on function is_place_class_ea_capable in module ida_kernwin: + +is_place_class_ea_capable(*args) -> 'bool' + is_place_class_ea_capable(id) -> bool + + + See 'get_place_class()' + + + @param id (C++: int) + +Help on function is_refresh_requested in module ida_kernwin: + +is_refresh_requested(*args) -> 'bool' + is_refresh_requested(mask) -> bool + + + Get a refresh request state + + @param mask: Window refresh flags (C++: uint64) + @return: the state (set or cleared) + +Help on class jobj_wrapper_t in module ida_kernwin: + +class jobj_wrapper_t(builtins.object) + | Proxy of C++ jobj_wrapper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | get_dict(self, *args) -> 'PyObject *' + | get_dict(self) -> PyObject * + | + | ---------------------------------------------------------------------- + | 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 + +Help on function jumpto in module ida_kernwin: + +jumpto(*args) -> 'bool' + jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool + jumpto(custom_viewer, place, x, y) -> bool + + + Jump to the specified address ( 'ui_jumpto' ). + + @param ea: destination (C++: ea_t) + @param opnum: -1: don't change x coord (C++: int) + @param uijmp_flags: Jump flags (C++: int) + @return: success + +Help on function load_custom_icon in module ida_kernwin: + +load_custom_icon(file_name=None, data=None, format=None) + Loads a custom icon and returns an identifier that can be used with other APIs + + If file_name is passed then the other two arguments are ignored. + + @param file_name: The icon file name + @param data: The icon data + @param format: The icon data format + + @return: Icon id or 0 on failure. + Use free_custom_icon() to free it + + + Load an icon from a file ( 'ui_load_custom_icon_file' ). Also see + 'load_custom_icon(const void *, unsigned int, const char *)' + + @return: icon id + +Help on function load_dbg_dbginfo in module ida_kernwin: + +load_dbg_dbginfo(*args) -> 'bool' + load_dbg_dbginfo(path, li=None, base=BADADDR, verbose=False) -> bool + + + Load debugging information from a file. + + @param path: path to file (C++: const char *) + @param li: loader input. if NULL, check DBG_NAME_KEY (C++: linput_t *) + @param base: loading address (C++: ea_t) + @param verbose: dump status to message window (C++: bool) + +Help on function lookup_key_code in module ida_kernwin: + +lookup_key_code(*args) -> 'ushort' + lookup_key_code(key, shift, is_qt) -> ushort + + + Get shortcut code previously created by 'ui_get_key_code' . + + @param key: key constant (C++: int) + @param shift: modifiers (C++: int) + @param is_qt: are we using gui version? (C++: bool) + +Help on function msg in module ida_kernwin: + +msg(*args) -> 'PyObject *' + msg(o) -> PyObject * + + + Display an UTF-8 string in the message window + + The result of the stringification of the arguments + will be treated as an UTF-8 string. + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + +Help on function msg_clear in module ida_kernwin: + +msg_clear(*args) -> 'void' + msg_clear() + + + Clear the "Output window". + +Help on function msg_get_lines in module ida_kernwin: + +msg_get_lines(*args) -> 'PyObject *' + msg_get_lines(count=-1) -> PyObject * + + + Retrieve the last 'count' lines from the output window, in reverse + order (from most recent, to least recent) + + @param count: The number of lines to retrieve. -1 means: all (C++: + int) + +Help on function msg_save in module ida_kernwin: + +msg_save(*args) -> 'bool' + msg_save(path) -> bool + + + Save the "Output window" contents into a file + + @param path: The path of the file to save the contents into. An empty + path means that the user will be prompted for the + destination and, if the file already exists, the user + will be asked to confirm before overriding its contents. + Upon return, 'path' will contain the path that the user + chose. (C++: qstring &) + @return: success + +Help on function nomem in module ida_kernwin: + +nomem(*args) -> 'void' + nomem(format) + +Help on function open_bpts_window in module ida_kernwin: + +open_bpts_window(*args) -> 'TWidget *' + open_bpts_window(ea) -> TWidget * + + + Open the breakpoints window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_calls_window in module ida_kernwin: + +open_calls_window(*args) -> 'TWidget *' + open_calls_window(ea) -> TWidget * + + + Open the function calls window ( 'ui_open_builtin' ). + + @param ea (C++: ea_t) + @return: pointer to resulting window + +Help on function open_disasm_window in module ida_kernwin: + +open_disasm_window(*args) -> 'TWidget *' + open_disasm_window(window_title, ranges=None) -> TWidget * + + + Open a disassembly view ( 'ui_open_builtin' ). + + @param window_title: title of view to open (C++: const char *) + @param ranges: if != NULL, then display a flow chart with the + specified ranges (C++: const rangevec_t *) + @return: pointer to resulting window + +Help on function open_enums_window in module ida_kernwin: + +open_enums_window(*args) -> 'TWidget *' + open_enums_window(const_id=BADADDR) -> TWidget * + + + Open the enums window ( 'ui_open_builtin' ). + + @param const_id: index of entry to select by default (C++: tid_t) + @return: pointer to resulting window + +Help on function open_exports_window in module ida_kernwin: + +open_exports_window(*args) -> 'TWidget *' + open_exports_window(ea) -> TWidget * + + + Open the exports window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_frame_window in module ida_kernwin: + +open_frame_window(*args) -> 'TWidget *' + open_frame_window(pfn, offset) -> TWidget * + + + Open the frame window for the given function ( 'ui_open_builtin' ). + + @param pfn: function to analyze (C++: func_t *) + @param offset: offset where the cursor is placed (C++: uval_t) + @return: pointer to resulting window if 'pfn' is a valid function and + the window was displayed, NULL otherwise + +Help on function open_funcs_window in module ida_kernwin: + +open_funcs_window(*args) -> 'TWidget *' + open_funcs_window(ea) -> TWidget * + + + Open the functions window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_hexdump_window in module ida_kernwin: + +open_hexdump_window(*args) -> 'TWidget *' + open_hexdump_window(window_title) -> TWidget * + + + Open a hexdump view ( 'ui_open_builtin' ). + + @param window_title: title of view to open (C++: const char *) + @return: pointer to resulting window + +Help on function open_imports_window in module ida_kernwin: + +open_imports_window(*args) -> 'TWidget *' + open_imports_window(ea) -> TWidget * + + + Open the exports window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_loctypes_window in module ida_kernwin: + +open_loctypes_window(*args) -> 'TWidget *' + open_loctypes_window(ordinal) -> TWidget * + + + Open the local types window ( 'ui_open_builtin' ). + + @param ordinal: ordinal of type to select by default (C++: int) + @return: pointer to resulting window + +Help on function open_modules_window in module ida_kernwin: + +open_modules_window(*args) -> 'TWidget *' + open_modules_window() -> TWidget * + + + Open the modules window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_names_window in module ida_kernwin: + +open_names_window(*args) -> 'TWidget *' + open_names_window(ea) -> TWidget * + + + Open the names window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_navband_window in module ida_kernwin: + +open_navband_window(*args) -> 'TWidget *' + open_navband_window(ea, zoom) -> TWidget * + + + Open the navigation band window ( 'ui_open_builtin' ). + + @param ea: sets the address of the navband arrow (C++: ea_t) + @param zoom: sets the navband zoom level (C++: int) + @return: pointer to resulting window + +Help on function open_notepad_window in module ida_kernwin: + +open_notepad_window(*args) -> 'TWidget *' + open_notepad_window() -> TWidget * + + + Open the notepad window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_problems_window in module ida_kernwin: + +open_problems_window(*args) -> 'TWidget *' + open_problems_window(ea) -> TWidget * + + + Open the problems window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_segments_window in module ida_kernwin: + +open_segments_window(*args) -> 'TWidget *' + open_segments_window(ea) -> TWidget * + + + Open the segments window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_segregs_window in module ida_kernwin: + +open_segregs_window(*args) -> 'TWidget *' + open_segregs_window(ea) -> TWidget * + + + Open the segment registers window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on function open_selectors_window in module ida_kernwin: + +open_selectors_window(*args) -> 'TWidget *' + open_selectors_window() -> TWidget * + + + Open the selectors window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_signatures_window in module ida_kernwin: + +open_signatures_window(*args) -> 'TWidget *' + open_signatures_window() -> TWidget * + + + Open the signatures window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_stack_window in module ida_kernwin: + +open_stack_window(*args) -> 'TWidget *' + open_stack_window() -> TWidget * + + + Open the call stack window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_strings_window in module ida_kernwin: + +open_strings_window(*args) -> 'TWidget *' + open_strings_window(ea, selstart=BADADDR, selend=BADADDR) -> TWidget * + + + Open the strings window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @param selstart: only display strings that occur within this range + (C++: ea_t) + @param selend: only display strings that occur within this range (C++: + ea_t) + @return: pointer to resulting window + +Help on function open_structs_window in module ida_kernwin: + +open_structs_window(*args) -> 'TWidget *' + open_structs_window(id=BADADDR, offset=0) -> TWidget * + + + Open the structs window ( 'ui_open_builtin' ). + + @param id: index of entry to select by default (C++: tid_t) + @param offset: offset where the cursor is placed (C++: uval_t) + @return: pointer to resulting window + +Help on function open_threads_window in module ida_kernwin: + +open_threads_window(*args) -> 'TWidget *' + open_threads_window() -> TWidget * + + + Open the threads window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_tils_window in module ida_kernwin: + +open_tils_window(*args) -> 'TWidget *' + open_tils_window() -> TWidget * + + + Open the type libraries window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_trace_window in module ida_kernwin: + +open_trace_window(*args) -> 'TWidget *' + open_trace_window() -> TWidget * + + + Open the trace window ( 'ui_open_builtin' ). + + @return: pointer to resulting window + +Help on function open_url in module ida_kernwin: + +open_url(*args) -> 'void' + open_url(url) + + + Open the given url ( 'ui_open_url' ) + + + @param url (C++: const char *) + +Help on function open_xrefs_window in module ida_kernwin: + +open_xrefs_window(*args) -> 'TWidget *' + open_xrefs_window(ea) -> TWidget * + + + Open the cross references window ( 'ui_open_builtin' ). + + @param ea: index of entry to select by default (C++: ea_t) + @return: pointer to resulting window + +Help on class place_t in module ida_kernwin: + +class place_t(builtins.object) + | Proxy of C++ place_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_place_t(...) + | delete_place_t(self) + | + | _print(self, *args) -> 'void' + | _print(self, out_buf, ud) + | + | adjust(self, *args) -> 'void' + | adjust(self, ud) + | + | beginning(self, *args) -> 'bool' + | beginning(self, ud) -> bool + | + | clone(self, *args) -> 'place_t *' + | clone(self) -> place_t + | + | compare(self, *args) -> 'int' + | compare(self, t2) -> int + | + | copyfrom(self, *args) -> 'void' + | copyfrom(self, _from) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, _in) -> bool + | + | ending(self, *args) -> 'bool' + | ending(self, ud) -> bool + | + | enter(self, *args) -> 'place_t *' + | enter(self, arg2) -> place_t + | + | generate(self, *args) -> 'PyObject *' + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) -> 'int' + | id(self) -> int + | + | leave(self, *args) -> 'void' + | leave(self, arg2) + | + | makeplace(self, *args) -> 'place_t *' + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) -> 'char const *' + | name(self) -> char const * + | + | next(self, *args) -> 'bool' + | next(self, ud) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, ud) -> bool + | + | rebase(self, *args) -> 'bool' + | rebase(self, arg2) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self) -> ea_t + | + | touval(self, *args) -> 'uval_t' + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | as_enumplace_t(*args) -> 'enumplace_t *' + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) -> 'idaplace_t *' + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) -> 'simpleline_place_t *' + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) -> 'structplace_t *' + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + | + | thisown + | The membership flag + +Help on function place_t_as_enumplace_t in module ida_kernwin: + +place_t_as_enumplace_t(*args) -> 'enumplace_t *' + place_t_as_enumplace_t(p) -> enumplace_t + +Help on function place_t_as_idaplace_t in module ida_kernwin: + +place_t_as_idaplace_t(*args) -> 'idaplace_t *' + place_t_as_idaplace_t(p) -> idaplace_t + +Help on function place_t_as_simpleline_place_t in module ida_kernwin: + +place_t_as_simpleline_place_t(*args) -> 'simpleline_place_t *' + place_t_as_simpleline_place_t(p) -> simpleline_place_t + +Help on function place_t_as_structplace_t in module ida_kernwin: + +place_t_as_structplace_t(*args) -> 'structplace_t *' + place_t_as_structplace_t(p) -> structplace_t + +Help on function plgform_close in module ida_kernwin: + +plgform_close(*args) -> 'void' + plgform_close(py_link, options) + +Help on function plgform_get_widget in module ida_kernwin: + +plgform_get_widget(*args) -> 'TWidget *' + plgform_get_widget(py_link) -> TWidget * + +Help on function plgform_new in module ida_kernwin: + +plgform_new(*args) -> 'PyObject *' + plgform_new() -> PyObject * + +Help on function plgform_show in module ida_kernwin: + +plgform_show(*args) -> 'bool' + plgform_show(py_link, py_obj, caption, options=WOPN_DP_TAB|WOPN_RESTORE) -> bool + +Help on function process_ui_action in module ida_kernwin: + +process_ui_action(*args) -> 'bool' + process_ui_action(name, flags=0) -> bool + + + Invokes an IDA UI action by name + + @param name: action name + @return: Boolean + +Help on function py_get_ask_form in module ida_kernwin: + +py_get_ask_form(*args) -> 'size_t' + py_get_ask_form() -> size_t + +Help on function py_get_open_form in module ida_kernwin: + +py_get_open_form(*args) -> 'size_t' + py_get_open_form() -> size_t + +Help on function py_load_custom_icon_data in module ida_kernwin: + +py_load_custom_icon_data(*args) -> 'int' + py_load_custom_icon_data(data, format) -> int + +Help on function py_load_custom_icon_fn in module ida_kernwin: + +py_load_custom_icon_fn(*args) -> 'int' + py_load_custom_icon_fn(filename) -> int + +Help on function py_register_compiled_form in module ida_kernwin: + +py_register_compiled_form(*args) -> 'void' + py_register_compiled_form(py_form) + +Help on function py_ss_restore_callback in module ida_kernwin: + +py_ss_restore_callback(*args) -> 'void' + py_ss_restore_callback(err_msg, userdata) + +Help on function py_unregister_compiled_form in module ida_kernwin: + +py_unregister_compiled_form(*args) -> 'void' + py_unregister_compiled_form(py_form) + +Help on function pyidag_bind in module ida_kernwin: + +pyidag_bind(*args) -> 'bool' + pyidag_bind(_self) -> bool + +Help on function pyidag_unbind in module ida_kernwin: + +pyidag_unbind(*args) -> 'bool' + pyidag_unbind(_self) -> bool + +Help on function pyscv_add_line in module ida_kernwin: + +pyscv_add_line(*args) -> 'bool' + pyscv_add_line(py_this, py_sl) -> bool + +Help on function pyscv_clear_lines in module ida_kernwin: + +pyscv_clear_lines(*args) -> 'PyObject *' + pyscv_clear_lines(py_this) -> PyObject * + +Help on function pyscv_close in module ida_kernwin: + +pyscv_close(*args) -> 'void' + pyscv_close(py_this) + +Help on function pyscv_count in module ida_kernwin: + +pyscv_count(*args) -> 'size_t' + pyscv_count(py_this) -> size_t + +Help on function pyscv_del_line in module ida_kernwin: + +pyscv_del_line(*args) -> 'bool' + pyscv_del_line(py_this, nline) -> bool + +Help on function pyscv_edit_line in module ida_kernwin: + +pyscv_edit_line(*args) -> 'bool' + pyscv_edit_line(py_this, nline, py_sl) -> bool + +Help on function pyscv_get_current_line in module ida_kernwin: + +pyscv_get_current_line(*args) -> 'PyObject *' + pyscv_get_current_line(py_this, mouse, notags) -> PyObject * + +Help on function pyscv_get_current_word in module ida_kernwin: + +pyscv_get_current_word(*args) -> 'PyObject *' + pyscv_get_current_word(py_this, mouse) -> PyObject * + +Help on function pyscv_get_line in module ida_kernwin: + +pyscv_get_line(*args) -> 'PyObject *' + pyscv_get_line(py_this, nline) -> PyObject * + +Help on function pyscv_get_pos in module ida_kernwin: + +pyscv_get_pos(*args) -> 'PyObject *' + pyscv_get_pos(py_this, mouse) -> PyObject * + +Help on function pyscv_get_selection in module ida_kernwin: + +pyscv_get_selection(*args) -> 'PyObject *' + pyscv_get_selection(py_this) -> PyObject * + +Help on function pyscv_get_widget in module ida_kernwin: + +pyscv_get_widget(*args) -> 'TWidget *' + pyscv_get_widget(py_this) -> TWidget * + +Help on function pyscv_init in module ida_kernwin: + +pyscv_init(*args) -> 'PyObject *' + pyscv_init(py_link, title) -> PyObject * + +Help on function pyscv_insert_line in module ida_kernwin: + +pyscv_insert_line(*args) -> 'bool' + pyscv_insert_line(py_this, nline, py_sl) -> bool + +Help on function pyscv_is_focused in module ida_kernwin: + +pyscv_is_focused(*args) -> 'bool' + pyscv_is_focused(py_this) -> bool + +Help on function pyscv_jumpto in module ida_kernwin: + +pyscv_jumpto(*args) -> 'bool' + pyscv_jumpto(py_this, ln, x, y) -> bool + +Help on function pyscv_patch_line in module ida_kernwin: + +pyscv_patch_line(*args) -> 'bool' + pyscv_patch_line(py_this, nline, offs, value) -> bool + +Help on function pyscv_refresh in module ida_kernwin: + +pyscv_refresh(*args) -> 'bool' + pyscv_refresh(py_this) -> bool + +Help on function pyscv_show in module ida_kernwin: + +pyscv_show(*args) -> 'bool' + pyscv_show(py_this) -> bool + +Help on function qcleanline in module ida_kernwin: + +qcleanline(*args) -> 'qstring *' + qcleanline(cmt_char='\0', flags=((1 << 0)|(1 << 1))|(1 << 2)) -> str + + + Performs some cleanup operations to a line. + + @param cmt_char: character that denotes the start of a comment: the + entire text is removed if the line begins with this + character (ignoring leading spaces) all text after + (and including) this character is removed if flag + CLNL_FINDCMT is set (C++: char) + @param flags: a combination of line cleanup flags . defaults to + CLNL_TRIM (C++: uint32) + @return: length of line + +Help on class quick_widget_commands_t in module ida_kernwin: + +class quick_widget_commands_t(builtins.object) + | # ---------------------------------------------------------------------- + | # This provides an alternative to register_action()+attach_action_to_popup_menu() + | + | Methods defined here: + | + | __init__(self, callback) + | Initialize self. See help(type(self)) for accurate signature. + | + | add(self, caption, flags, menu_index, icon, emb, shortcut) + | + | populate_popup(self, widget, popup) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | _ah_t = + | + | + | _cmd_t = + +Help on function read_range_selection in module ida_kernwin: + +read_range_selection(*args) -> 'ea_t *, ea_t *' + read_range_selection(v) -> bool + + + Get the address range for the selected range boundaries, this is the + convenient function for 'read_selection()' + + @param v: view, NULL means the last active window containing addresses + (C++: TWidget *) + +Help on function read_selection in module ida_kernwin: + +read_selection(*args) -> 'bool' + read_selection(v, p1, p2) -> bool + + + Read the user selection, and store its information in p0 (from) and p1 (to). + + This can be used as follows: + + + >>> p0 = idaapi.twinpos_t() + p1 = idaapi.twinpos_t() + view = idaapi.get_current_viewer() + idaapi.read_selection(view, p0, p1) + + + At that point, p0 and p1 hold information for the selection. + But, the 'at' property of p0 and p1 is not properly typed. + To specialize it, call #place() on it, passing it the view + they were retrieved from. Like so: + + + >>> place0 = p0.place(view) + place1 = p1.place(view) + + + This will effectively "cast" the place into a specialized type, + holding proper information, depending on the view type (e.g., + disassembly, structures, enums, ...) + + @param view: The view to retrieve the selection for. + @param p0: Storage for the "from" part of the selection. + @param p1: Storage for the "to" part of the selection. + @return: a bool value indicating success. + +Help on function refresh_chooser in module ida_kernwin: + +refresh_chooser(*args) -> 'bool' + refresh_chooser(title) -> bool + + + Mark a non-modal custom chooser for a refresh ( 'ui_refresh_chooser' + ). + + @param title: title of chooser (C++: const char *) + @return: success + +Help on function refresh_choosers in module ida_kernwin: + +refresh_choosers(*args) -> 'void' + refresh_choosers() + +Help on function refresh_idaview in module ida_kernwin: + +refresh_idaview(*args) -> 'void' + refresh_idaview() + + + Refresh marked windows ( 'ui_refreshmarked' ) + +Help on function refresh_idaview_anyway in module ida_kernwin: + +refresh_idaview_anyway(*args) -> 'void' + refresh_idaview_anyway() + + + Refresh all disassembly views ( 'ui_refresh' ), forces an immediate + refresh. Please consider 'request_refresh()' instead + +Help on function refresh_navband in module ida_kernwin: + +refresh_navband(*args) -> 'void' + refresh_navband(force) + + + Refresh navigation band if changed ( 'ui_refresh_navband' ). + + @param force: refresh regardless (C++: bool) + +Help on function register_action in module ida_kernwin: + +register_action(*args) -> 'bool' + register_action(desc) -> bool + + + Create a new action ( 'ui_register_action' ). After an action has been + created, it is possible to attach it to menu items ( + 'attach_action_to_menu()' ), or to popup menus ( + 'attach_action_to_popup()' ).Because the actions will need to call the + handler's activate() and update() methods at any time, you shouldn't + build your action handler on the stack.Please see the SDK's "ht_view" + plugin for an example how to register actions. + + @param desc: action to register (C++: const action_desc_t &) + @return: success + +Help on function register_addon in module ida_kernwin: + +register_addon(*args) -> 'int' + register_addon(info) -> int + + + Register an add-on. Show its info in the About box. For plugins, + should be called from init() function (repeated calls with the same + product code overwrite previous entries) returns: index of the add-on + in the list, or -1 on error + + @param info (C++: const addon_info_t *) + +Help on function register_and_attach_to_menu in module ida_kernwin: + +register_and_attach_to_menu(*args) -> 'bool' + register_and_attach_to_menu(menupath, name, label, shortcut, flags, handler, owner) -> bool + + + Helper.You are not encouraged to use this, as it mixes flags for both + 'register_action()' , and 'attach_action_to_menu()' .The only reason + for its existence is to make it simpler to port existing plugins to + the new actions API. + + @param menupath (C++: const char *) + @param name (C++: const char *) + @param label (C++: const char *) + @param shortcut (C++: const char *) + @param flags (C++: int) + @param handler (C++: action_handler_t *) + @param owner (C++: const plugin_t *) + +Help on function register_timer in module ida_kernwin: + +register_timer(*args) -> 'PyObject *' + register_timer(interval, py_callback) -> PyObject * + + + Register a timer + + @param interval: Interval in milliseconds + @param callback: A Python callable that takes no parameters and returns an integer. + The callback may return: + -1 : to unregister the timer + >= 0 : the new or same timer interval + @return: None or a timer object + +Help on function remove_command_interpreter in module ida_kernwin: + +remove_command_interpreter(*args) -> 'void' + remove_command_interpreter(cli_idx) + + + Remove command line interpreter ( 'ui_install_cli' ) + +Help on class renderer_pos_info_t in module ida_kernwin: + +class renderer_pos_info_t(builtins.object) + | Proxy of C++ renderer_pos_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_pos_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_renderer_pos_info_t(...) + | delete_renderer_pos_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cx + | renderer_pos_info_t_cx_get(self) -> short + | + | cy + | renderer_pos_info_t_cy_get(self) -> short + | + | node + | renderer_pos_info_t_node_get(self) -> int + | + | sx + | renderer_pos_info_t_sx_get(self) -> short + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function repaint_custom_viewer in module ida_kernwin: + +repaint_custom_viewer(*args) -> 'void' + repaint_custom_viewer(custom_viewer) + + + Repaint the given widget immediately ( 'ui_repaint_qwidget' ) + + + @param custom_viewer (C++: TWidget *) + +Help on function replace_wait_box in module ida_kernwin: + +replace_wait_box(*args) -> 'void' + replace_wait_box(format) + + + Replace the label of "Please wait dialog box". + + + @param format (C++: const char *) + +Help on function request_refresh in module ida_kernwin: + +request_refresh(*args) -> 'void' + request_refresh(mask, cnd=True) + + + Request a refresh of a builtin window. + + @param mask: Window refresh flags (C++: uint64) + @param cnd: set if true or clear flag otherwise (C++: bool) + +Help on function restore_database_snapshot in module ida_kernwin: + +restore_database_snapshot(*args) -> 'PyObject *' + restore_database_snapshot(ss, pyfunc_or_none, pytuple_or_none) -> PyObject * + + + Restore a database snapshot. Note: This call is asynchronous. When it + is completed, the callback will be triggered. + + @param ss: snapshot instance (see build_snapshot_tree() ) (C++: const + snapshot_t *) + @return: false if restoration could not be started (snapshot file was + not found). If the returned value is True then check if + the operation succeeded from the callback. + +Help on function set_cancelled in module ida_kernwin: + +set_cancelled(*args) -> 'void' + set_cancelled() + + + Set "Cancelled" flag ( 'ui_set_cancelled' ) + +Help on function set_code_viewer_handler in module ida_kernwin: + +set_code_viewer_handler(*args) -> 'void *' + set_code_viewer_handler(code_viewer, handler_id, handler_or_data) -> void * + + + Set a handler for a code viewer event ( 'ui_set_custom_viewer_handler' + ). + + @param code_viewer: the code viewer (C++: TWidget *) + @param handler_id: one of CDVH_ in custom_viewer_handler_id_t (C++: + custom_viewer_handler_id_t) + @param handler_or_data: can be a handler or data. see examples in + Functions: custom viewer handlers (C++: void + *) + @return: old value of the handler or data + +Help on function set_code_viewer_is_source in module ida_kernwin: + +set_code_viewer_is_source(*args) -> 'bool' + set_code_viewer_is_source(code_viewer) -> bool + + + Specify that the given code viewer is used to display source code ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + +Help on function set_code_viewer_line_handlers in module ida_kernwin: + +set_code_viewer_line_handlers(*args) -> 'void' + set_code_viewer_line_handlers(code_viewer, click_handler, popup_handler, dblclick_handler, drawicon_handler, linenum_handler) + + + Set handlers for code viewer line events. Any of these handlers may be + NULL + + @param code_viewer (C++: TWidget *) + @param click_handler (C++: code_viewer_lines_click_t *) + @param popup_handler (C++: code_viewer_lines_click_t *) + @param dblclick_handler (C++: code_viewer_lines_click_t *) + @param drawicon_handler (C++: code_viewer_lines_icon_t *) + @param linenum_handler (C++: code_viewer_lines_linenum_t *) + +Help on function set_code_viewer_lines_alignment in module ida_kernwin: + +set_code_viewer_lines_alignment(*args) -> 'bool' + set_code_viewer_lines_alignment(code_viewer, align) -> bool + + + Set alignment for lines in a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param align (C++: int) + +Help on function set_code_viewer_lines_icon_margin in module ida_kernwin: + +set_code_viewer_lines_icon_margin(*args) -> 'bool' + set_code_viewer_lines_icon_margin(code_viewer, margin) -> bool + + + Set space allowed for icons in the margin of a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param margin (C++: int) + +Help on function set_code_viewer_lines_radix in module ida_kernwin: + +set_code_viewer_lines_radix(*args) -> 'bool' + set_code_viewer_lines_radix(code_viewer, radix) -> bool + + + Set radix for values displayed in a code viewer ( + 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param radix (C++: int) + +Help on function set_code_viewer_user_data in module ida_kernwin: + +set_code_viewer_user_data(*args) -> 'bool' + set_code_viewer_user_data(code_viewer, ud) -> bool + + + Set the user data on a code viewer ( 'ui_set_custom_viewer_handler' ). + + + @param code_viewer (C++: TWidget *) + @param ud (C++: void *) + +Help on function set_custom_viewer_qt_aware in module ida_kernwin: + +set_custom_viewer_qt_aware(*args) -> 'bool' + set_custom_viewer_qt_aware(custom_viewer) -> bool + + + Allow the given viewer to interpret Qt events ( + 'ui_set_custom_viewer_handler' ) + + + @param custom_viewer (C++: TWidget *) + +Help on function set_dock_pos in module ida_kernwin: + +set_dock_pos(*args) -> 'bool' + set_dock_pos(src_ctrl, dest_ctrl, orient, left=0, top=0, right=0, bottom=0) -> bool + + + Sets the dock orientation of a window relatively to another window. + + @param src: Source docking control + @param dest: Destination docking control + @param orient: One of DOR_XXXX constants + @param left, top, right, bottom: These parameter if DOR_FLOATING is used, or if you want to specify the width of docked windows + @return: Boolean + + Example: + set_dock_pos('Structures', 'Enums', DOR_RIGHT) <- docks the Structures window to the right of Enums window + +Help on function set_highlight in module ida_kernwin: + +set_highlight(*args) -> 'bool' + set_highlight(viewer, str, flags) -> bool + + + Set the highlighted identifier in the viewer ( 'ui_set_highlight' ). + + @param viewer: the viewer (C++: TWidget *) + @param str: the text to match, or NULL to remove current (C++: const + char *) + @param flags: combination of HIF_... bits (see set_highlightr flags ) + (C++: int) + @return: false if an error occurred + +Help on function set_nav_colorizer in module ida_kernwin: + +set_nav_colorizer(*args) -> 'PyObject *' + set_nav_colorizer(new_py_colorizer) -> PyObject * + + + Set a new colorizer for the navigation band. + + The 'callback' is a function of 2 arguments: + - ea (the EA to colorize for) + - nbytes (the number of bytes at that EA) + and must return a 'long' value. + + The previous colorizer is returned, allowing + the new 'callback' to use 'call_nav_colorizer' + with it. + + Note that the previous colorizer is returned + only the first time set_nav_colorizer() is called: + due to the way the colorizers API is defined in C, + it is impossible to chain more than 2 colorizers + in IDAPython: the original, IDA-provided colorizer, + and a user-provided one. + + Example: colorizer inverting the color provided by the IDA colorizer: + def my_colorizer(ea, nbytes): + global ida_colorizer + orig = idaapi.call_nav_colorizer(ida_colorizer, ea, nbytes) + return long(~orig) + + ida_colorizer = idaapi.set_nav_colorizer(my_colorizer) + +Help on function set_view_renderer_type in module ida_kernwin: + +set_view_renderer_type(*args) -> 'void' + set_view_renderer_type(v, rt) + + + Set the type of renderer to use in a view ( 'ui_set_renderer_type' ) + + + @param v (C++: TWidget *) + @param rt (C++: tcc_renderer_type_t) + +Help on function show_wait_box in module ida_kernwin: + +show_wait_box(*args) -> 'void' + show_wait_box(message) + + + Display a dialog box with "Please wait...". If the text message starts + with "HIDECANCEL\n", the cancel buttonwon't be displayed in the dialog + box and you don't need to checkfor cancellations with + 'user_cancelled()' . Plugins must call 'hide_wait_box()' to close the + dialog box, otherwise the user interface will be disabled.Note that, + if the wait dialog is already visible, 'show_wait_box()' will1) push + the currently-displayed text on a stack2) display the new textThen, + when 'hide_wait_box()' is called, if that stack isn't empty its + toplabel will be popped and restored in the wait dialog.This implies + that a plugin should call 'hide_wait_box()' exactly as manytimes as it + called 'show_wait_box()' , or the wait dialog might remainvisible and + block the UI.Also, in case the plugin knows the wait dialog is + currently displayed,alternatively it can call 'replace_wait_box()' , + to replace the text of thedialog without pushing the currently- + displayed text on the stack. + +Help on class simplecustviewer_t in module ida_kernwin: + +class simplecustviewer_t(builtins.object) + | The base class for implementing simple custom viewers + | + | Methods defined here: + | + | AddLine(self, line, fgcolor=None, bgcolor=None) + | Adds a colored line to the view + | @return: Boolean + | + | ClearLines(self) + | Clears all the lines + | + | Close(self) + | Destroys the view. + | One has to call Create() afterwards. + | Show() can be called and it will call Create() internally. + | @return: Boolean + | + | Count(self) + | Returns the number of lines in the view + | + | Create(self, title) + | Creates the custom view. This should be the first method called after instantiation + | + | @param title: The title of the view + | @return: Boolean whether it succeeds or fails. It may fail if a window with the same title is already open. + | In this case better close existing windows + | + | DelLine(self, lineno) + | Deletes an existing line + | @return: Boolean + | + | EditLine(self, lineno, line, fgcolor=None, bgcolor=None) + | Edits an existing line. + | @return: Boolean + | + | GetCurrentLine(self, mouse=0, notags=0) + | Returns the current line. + | @param mouse: Current line at mouse pos + | @param notags: If True then tag_remove() will be called before returning the line + | @return: Returns the current line (colored or uncolored) or None on failure + | + | GetCurrentWord(self, mouse=0) + | Returns the current word + | @param mouse: Use mouse position or cursor position + | @return: None if failed or a String containing the current word at mouse or cursor + | + | GetLine(self, lineno) + | Returns a line + | @param lineno: The line number + | @return: + | Returns a tuple (colored_line, fgcolor, bgcolor) or None + | + | GetLineNo(self, mouse=0) + | Calls GetPos() and returns the current line number or -1 on failure + | + | GetPos(self, mouse=0) + | Returns the current cursor or mouse position. + | @param mouse: return mouse position + | @return: Returns a tuple (lineno, x, y) + | + | GetSelection(self) + | Returns the selected range or None + | @return: + | - tuple(x1, y1, x2, y2) + | - None if no selection + | + | GetWidget(self) + | Return the TWidget underlying this view. + | + | @return: The TWidget underlying this view, or None. + | + | InsertLine(self, lineno, line, fgcolor=None, bgcolor=None) + | Inserts a line in the given position + | @return: Boolean + | + | IsFocused(self) + | Returns True if the current view is the focused view + | + | Jump(self, lineno, x=0, y=0) + | + | OnPopup(self, form, popup_handle) + | Context menu popup is about to be shown. Create items dynamically if you wish + | @return: Boolean. True if you handled the event + | + | PatchLine(self, lineno, offs, value) + | Patches an existing line character at the given offset. This is a low level function. You must know what you're doing + | + | Refresh(self) + | + | RefreshCurrent(self) + | Refreshes the current line only + | + | Show(self) + | Shows an already created view. It the view was close, then it will call Create() for you + | @return: Boolean + | + | __init__(self) + | Initialize self. See help(type(self)) for accurate signature. + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | _simplecustviewer_t__make_sl_arg = __make_sl_arg(line, fgcolor=None, bgcolor=None) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | UI_Hooks_Trampoline = uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) -> 'void' + | _print(self, out_buf, ud) + | + | adjust(self, *args) -> 'void' + | adjust(self, ud) + | + | beginning(self, *args) -> 'bool' + | beginning(self, ud) -> bool + | + | clone(self, *args) -> 'place_t *' + | clone(self) -> place_t + | + | compare(self, *args) -> 'int' + | compare(self, t2) -> int + | + | copyfrom(self, *args) -> 'void' + | copyfrom(self, _from) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, _in) -> bool + | + | ending(self, *args) -> 'bool' + | ending(self, ud) -> bool + | + | enter(self, *args) -> 'place_t *' + | enter(self, arg2) -> place_t + | + | generate(self, *args) -> 'PyObject *' + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) -> 'int' + | id(self) -> int + | + | leave(self, *args) -> 'void' + | leave(self, arg2) + | + | makeplace(self, *args) -> 'place_t *' + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) -> 'char const *' + | name(self) -> char const * + | + | next(self, *args) -> 'bool' + | next(self, ud) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, ud) -> bool + | + | rebase(self, *args) -> 'bool' + | rebase(self, arg2) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self) -> ea_t + | + | touval(self, *args) -> 'uval_t' + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) -> 'enumplace_t *' + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) -> 'idaplace_t *' + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) -> 'simpleline_place_t *' + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) -> 'structplace_t *' + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on class simpleline_t in module ida_kernwin: + +class simpleline_t(builtins.object) + | Proxy of C++ simpleline_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> simpleline_t + | __init__(self, c, str) -> simpleline_t + | __init__(self, str) -> simpleline_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_simpleline_t(...) + | delete_simpleline_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | bgcolor + | simpleline_t_bgcolor_get(self) -> bgcolor_t + | + | color + | simpleline_t_color_get(self) -> color_t + | + | line + | simpleline_t_line_get(self) -> qstring * + | + | thisown + | The membership flag + +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. + + @return: BADADDR or address value + +Help on function str2user in module ida_pro: + +str2user(*args) -> 'PyObject *' + str2user(str) -> PyObject * + + + Insert C-style escape characters to string + + @return: new string with escape characters inserted + +Help on function strarray in module ida_kernwin: + +strarray(*args) -> 'char const *' + strarray(array, array_size, code) -> char const * + + + Find a line with the specified code in the 'strarray_t' array. If the + last element of the array has code==0 then it is considered as the + default entry.If no default entry exists and the code is not found, + 'strarray()' returns "". + + @param array (C++: const strarray_t *) + @param array_size (C++: size_t) + @param code (C++: int) + +Help on class strarray_t in module ida_kernwin: + +class strarray_t(builtins.object) + | Proxy of C++ strarray_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strarray_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_strarray_t(...) + | delete_strarray_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | code + | strarray_t_code_get(self) -> int + | + | text + | strarray_t_text_get(self) -> char const * + | + | thisown + | The membership flag + +Help on class structplace_t in module ida_kernwin: + +class structplace_t(place_t) + | Proxy of C++ structplace_t class. + | + | Method resolution order: + | structplace_t + | place_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_structplace_t(...) + | delete_structplace_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | idx + | structplace_t_idx_get(self) -> uval_t + | + | offset + | structplace_t_offset_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from place_t: + | + | _print(self, *args) -> 'void' + | _print(self, out_buf, ud) + | + | adjust(self, *args) -> 'void' + | adjust(self, ud) + | + | beginning(self, *args) -> 'bool' + | beginning(self, ud) -> bool + | + | clone(self, *args) -> 'place_t *' + | clone(self) -> place_t + | + | compare(self, *args) -> 'int' + | compare(self, t2) -> int + | + | copyfrom(self, *args) -> 'void' + | copyfrom(self, _from) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, _in) -> bool + | + | ending(self, *args) -> 'bool' + | ending(self, ud) -> bool + | + | enter(self, *args) -> 'place_t *' + | enter(self, arg2) -> place_t + | + | generate(self, *args) -> 'PyObject *' + | generate(self, ud, maxsize) -> PyObject * + | + | id(self, *args) -> 'int' + | id(self) -> int + | + | leave(self, *args) -> 'void' + | leave(self, arg2) + | + | makeplace(self, *args) -> 'place_t *' + | makeplace(self, ud, x, lnnum) -> place_t + | + | name(self, *args) -> 'char const *' + | name(self) -> char const * + | + | next(self, *args) -> 'bool' + | next(self, ud) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self, ud) -> bool + | + | rebase(self, *args) -> 'bool' + | rebase(self, arg2) -> bool + | + | serialize(self, *args) -> 'void' + | serialize(self) + | + | toea(self, *args) -> 'ea_t' + | toea(self) -> ea_t + | + | touval(self, *args) -> 'uval_t' + | touval(self, ud) -> uval_t + | + | ---------------------------------------------------------------------- + | Static methods inherited from place_t: + | + | as_enumplace_t(*args) -> 'enumplace_t *' + | as_enumplace_t(p) -> enumplace_t + | + | as_idaplace_t(*args) -> 'idaplace_t *' + | as_idaplace_t(p) -> idaplace_t + | + | as_simpleline_place_t(*args) -> 'simpleline_place_t *' + | as_simpleline_place_t(p) -> simpleline_place_t + | + | as_structplace_t(*args) -> 'structplace_t *' + | as_structplace_t(p) -> structplace_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from place_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | lnnum + | place_t_lnnum_get(self) -> int + +Help on class sync_source_t in module ida_kernwin: + +class sync_source_t(builtins.object) + | Proxy of C++ sync_source_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, _o) -> bool + | + | __init__(self, *args) + | __init__(self, _view) -> sync_source_t + | __init__(self, _regname) -> sync_source_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, _o) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_sync_source_t(...) + | delete_sync_source_t(self) + | + | get_register(self, *args) -> 'char const *' + | get_register(self) -> char const * + | + | get_widget(self, *args) -> 'TWidget const *' + | get_widget(self) -> TWidget const * + | + | is_register(self, *args) -> 'bool' + | is_register(self) -> bool + | + | is_widget(self, *args) -> 'bool' + | is_widget(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function sync_sources in module ida_kernwin: + +sync_sources(*args) -> 'bool' + sync_sources(what, _with, sync) -> bool + + + [Un]synchronize sources + + @param what (C++: const sync_source_t &) + @param _with (C++: const sync_source_t &) + @param sync (C++: bool) + @return: success + +Help on function take_database_snapshot in module ida_kernwin: + +take_database_snapshot(*args) -> 'PyObject *' + take_database_snapshot(ss) -> PyObject * + + + Take a database snapshot ( 'ui_take_database_snapshot' ). + + @param ss: in/out parameter. in: description, flags out: filename, + id (C++: snapshot_t *) + @return: success + +Help on class textctrl_info_t in module ida_kernwin: + +class textctrl_info_t(ida_idaapi.py_clinked_object_t) + | Class representing textctrl_info_t + | + | Method resolution order: + | textctrl_info_t + | ida_idaapi.py_clinked_object_t + | ida_idaapi.pyidc_opaque_object_t + | builtins.object + | + | Methods defined here: + | + | __get_flags__(self) + | Returns the flags value + | + | __get_tabsize__(self) + | Returns the tabsize value + | + | __init__(self, text='', flags=0, tabsize=0) + | Initialize self. See help(type(self)) for accurate signature. + | + | __set_flags__(self, flags) + | Sets the flags value + | + | __set_tabsize__(self, tabsize) + | Sets the tabsize value + | + | _create_clink(self) + | Overwrite me. + | Creates a new clink + | @return: PyCapsule representing the C link + | + | _del_clink(self, lnk) + | Overwrite me. + | This method deletes the link + | + | _get_clink_ptr(self) + | Overwrite me. + | Returns the C link pointer as a 64bit number + | + | _textctrl_info_t__get_text = __get_text(self) + | Sets the text value + | + | _textctrl_info_t__set_text = __set_text(self, s) + | Sets the text value + | + | assign(self, other) + | Copies the contents of 'other' to 'self' + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | flags + | Returns the flags value + | + | tabsize + | Returns the tabsize value + | + | text + | Sets the text value + | + | value + | Sets the text value + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | TXTF_ACCEPTTABS = 2 + | + | TXTF_AUTOINDENT = 1 + | + | TXTF_FIXEDFONT = 32 + | + | TXTF_MODIFIED = 16 + | + | TXTF_READONLY = 4 + | + | TXTF_SELECTED = 8 + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_idaapi.py_clinked_object_t: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.py_clinked_object_t: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on function textctrl_info_t_assign in module ida_kernwin: + +textctrl_info_t_assign(*args) -> 'bool' + textctrl_info_t_assign(_self, other) -> bool + +Help on function textctrl_info_t_create in module ida_kernwin: + +textctrl_info_t_create(*args) -> 'PyObject *' + textctrl_info_t_create() -> PyObject * + +Help on function textctrl_info_t_destroy in module ida_kernwin: + +textctrl_info_t_destroy(*args) -> 'bool' + textctrl_info_t_destroy(py_obj) -> bool + +Help on function textctrl_info_t_get_clink in module ida_kernwin: + +textctrl_info_t_get_clink(*args) -> 'textctrl_info_t *' + textctrl_info_t_get_clink(_self) -> textctrl_info_t * + +Help on function textctrl_info_t_get_clink_ptr in module ida_kernwin: + +textctrl_info_t_get_clink_ptr(*args) -> 'PyObject *' + textctrl_info_t_get_clink_ptr(_self) -> PyObject * + +Help on function textctrl_info_t_get_flags in module ida_kernwin: + +textctrl_info_t_get_flags(*args) -> 'unsigned int' + textctrl_info_t_get_flags(_self) -> unsigned int + +Help on function textctrl_info_t_get_tabsize in module ida_kernwin: + +textctrl_info_t_get_tabsize(*args) -> 'unsigned int' + textctrl_info_t_get_tabsize(_self) -> unsigned int + +Help on function textctrl_info_t_get_text in module ida_kernwin: + +textctrl_info_t_get_text(*args) -> 'char const *' + textctrl_info_t_get_text(_self) -> char const * + +Help on function textctrl_info_t_set_flags in module ida_kernwin: + +textctrl_info_t_set_flags(*args) -> 'bool' + textctrl_info_t_set_flags(_self, flags) -> bool + +Help on function textctrl_info_t_set_tabsize in module ida_kernwin: + +textctrl_info_t_set_tabsize(*args) -> 'bool' + textctrl_info_t_set_tabsize(_self, tabsize) -> bool + +Help on function textctrl_info_t_set_text in module ida_kernwin: + +textctrl_info_t_set_text(*args) -> 'bool' + textctrl_info_t_set_text(_self, s) -> bool + +Help on class twinpos_t in module ida_kernwin: + +class twinpos_t(builtins.object) + | Proxy of C++ twinpos_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> twinpos_t + | __init__(self, t) -> twinpos_t + | __init__(self, t, x0) -> twinpos_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_twinpos_t(...) + | delete_twinpos_t(self) + | + | place(self, view) + | + | place_as_enumplace_t(self) + | + | place_as_idaplace_t(self) + | + | place_as_simpleline_place_t(self) + | + | place_as_structplace_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | at + | twinpos_t_at_get(self) -> place_t + | + | thisown + | The membership flag + | + | x + | twinpos_t_x_get(self) -> int + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function ui_load_new_file in module ida_kernwin: + +ui_load_new_file(*args) -> 'bool' + ui_load_new_file(temp_file, filename, pli, neflags, ploaders) -> bool + + + Display a load file dialog and load file ( 'ui_load_file' ). + + @param temp_file: name of the file with the extracted archive member. + (C++: qstring *) + @param filename: the name of input file as is, library or archive name + (C++: qstring *) + @param pli: loader input source, may be changed to point to temp_file + (C++: linput_t **) + @param neflags: combination of NEF_... bits (see Load file flags ) + (C++: ushort) + @param ploaders: list of loaders which accept file, may be changed for + loaders of temp_file (C++: load_info_t **) + +Help on class ui_requests_t in module ida_kernwin: + +class ui_requests_t(builtins.object) + | Proxy of C++ ui_requests_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ui_requests_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ui_requests_t(...) + | delete_ui_requests_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 + +Help on function ui_run_debugger in module ida_kernwin: + +ui_run_debugger(*args) -> 'bool' + ui_run_debugger(dbgopts, exename, argc, argv) -> bool + + + Load a debugger plugin and run the specified program ( 'ui_run_dbg' ). + + @param dbgopts: value of the -r command line switch (C++: const char + *) + @param exename: name of the file to run (C++: const char *) + @param argc: number of arguments for the executable (C++: int) + @param argv: argument vector (C++: const char *const *) + @return: success + +Help on function unmark_selection in module ida_kernwin: + +unmark_selection(*args) -> 'void' + unmark_selection() + + + Unmark selection ( 'ui_unmarksel' ) + +Help on function unregister_action in module ida_kernwin: + +unregister_action(*args) -> 'bool' + unregister_action(name) -> bool + + + Delete a previously-registered action ( 'ui_unregister_action' ). + + @param name: name of action (C++: const char *) + @return: success + +Help on function unregister_timer in module ida_kernwin: + +unregister_timer(*args) -> 'bool' + unregister_timer(py_timerctx) -> bool + + + Unregister a timer + + @param timer_obj: a timer object previously returned by a register_timer() + @return: Boolean + @note: After the timer has been deleted, the timer_obj will become invalid. + +Help on function update_action_checkable in module ida_kernwin: + +update_action_checkable(*args) -> 'bool' + update_action_checkable(name, checkable) -> bool + + + Update an action's checkability ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param checkable: new checkability (C++: bool) + @return: success + +Help on function update_action_checked in module ida_kernwin: + +update_action_checked(*args) -> 'bool' + update_action_checked(name, checked) -> bool + + + Update an action's checked state ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param checked: new checked state (C++: bool) + @return: success + +Help on function update_action_icon in module ida_kernwin: + +update_action_icon(*args) -> 'bool' + update_action_icon(name, icon) -> bool + + + Update an action's icon ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param icon: new icon id (C++: int) + @return: success + +Help on function update_action_label in module ida_kernwin: + +update_action_label(*args) -> 'bool' + update_action_label(name, label) -> bool + + + Update an action's label ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param label: new label (C++: const char *) + @return: success + +Help on function update_action_shortcut in module ida_kernwin: + +update_action_shortcut(*args) -> 'bool' + update_action_shortcut(name, shortcut) -> bool + + + Update an action's shortcut ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param shortcut: new shortcut (C++: const char *) + @return: success + +Help on function update_action_state in module ida_kernwin: + +update_action_state(*args) -> 'bool' + update_action_state(name, state) -> bool + + + Update an action's state ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param state: new state (C++: action_state_t) + @return: success + +Help on function update_action_tooltip in module ida_kernwin: + +update_action_tooltip(*args) -> 'bool' + update_action_tooltip(name, tooltip) -> bool + + + Update an action's tooltip ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param tooltip: new tooltip (C++: const char *) + @return: success + +Help on function update_action_visibility in module ida_kernwin: + +update_action_visibility(*args) -> 'bool' + update_action_visibility(name, visible) -> bool + + + Update an action's visibility ( 'ui_update_action_attr' ). + + @param name: action name (C++: const char *) + @param visible: new visibility (C++: bool) + @return: success + +Help on function user_cancelled in module ida_kernwin: + +user_cancelled(*args) -> 'bool' + user_cancelled() -> bool + + + Test the ctrl-break flag ( 'ui_test_cancelled' ). + +Help on class view_mouse_event_location_t in module ida_kernwin: + +class view_mouse_event_location_t(builtins.object) + | Proxy of C++ view_mouse_event_location_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> view_mouse_event_location_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_view_mouse_event_location_t(...) + | delete_view_mouse_event_location_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | view_mouse_event_location_t_ea_get(self) -> ea_t + | + | item + | view_mouse_event_location_t_item_get(self) -> selection_item_t const * + | + | thisown + | The membership flag + +Help on class view_mouse_event_t in module ida_kernwin: + +class view_mouse_event_t(builtins.object) + | Proxy of C++ view_mouse_event_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> view_mouse_event_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_view_mouse_event_t(...) + | delete_view_mouse_event_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | button + | view_mouse_event_t_button_get(self) -> vme_button_t + | + | location + | view_mouse_event_t_location_get(self) -> view_mouse_event_location_t + | + | renderer_pos + | view_mouse_event_t_renderer_pos_get(self) -> renderer_pos_info_t + | + | rtype + | view_mouse_event_t_rtype_get(self) -> tcc_renderer_type_t + | + | state + | view_mouse_event_t_state_get(self) -> view_event_state_t + | + | thisown + | The membership flag + | + | x + | view_mouse_event_t_x_get(self) -> uint32 + | + | y + | view_mouse_event_t_y_get(self) -> uint32 + +Help on function warning in module ida_kernwin: + +warning(*args) -> 'void' + warning(format) + + + Display a message in a message box + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + The user will be able to hide messages if they appear twice in a row on + the screen + +=== ida_kernwin EPYDOC INJECTIONS === +ida_kernwin.ACF_HAS_SELECTION +""" +there is currently a valid selection +""" + +ida_kernwin.ACF_XTRN_EA +""" +cur_ea is in 'externs' segment +""" + +ida_kernwin.ADF_NO_UNDO +""" +useful for actions that do not modify the database. + +the action does not create an undo point. +""" + +ida_kernwin.ADF_OWN_HANDLER +""" +handler is owned by the action; it'll be destroyed when the action is +unregistered. You shouldn't have to use this. +""" + +ida_kernwin.AHF_VERSION +""" +action handler version (used by 'action_handler_t::flags' ) +""" + +ida_kernwin.AHF_VERSION_MASK +""" +mask for 'action_handler_t::flags' +""" + +ida_kernwin.ASKBTN_BTN1 +""" +First (Yes) button. +""" + +ida_kernwin.ASKBTN_BTN2 +""" +Second (No) button. +""" + +ida_kernwin.ASKBTN_BTN3 +""" +Third (Cancel) button. +""" + +ida_kernwin.ASKBTN_CANCEL +""" +Cancel button. +""" + +ida_kernwin.ASKBTN_NO +""" +No button. +""" + +ida_kernwin.ASKBTN_YES +""" +Yes button. +""" + +ida_kernwin.BWN_ADDRWATCH +""" +the 'Watch List' window +""" + +ida_kernwin.BWN_BPTS +""" +breakpoints +""" + +ida_kernwin.BWN_CALLS +""" +function calls +""" + +ida_kernwin.BWN_CALLS_CALLEES +""" +function calls, callees +""" + +ida_kernwin.BWN_CALLS_CALLERS +""" +function calls, callers +""" + +ida_kernwin.BWN_CALL_STACK +""" +call stack +""" + +ida_kernwin.BWN_CHOOSER +""" +a non-builtin chooser +""" + +ida_kernwin.BWN_CLI +""" +the command-line, in the output window +""" + +ida_kernwin.BWN_CMDPALCSR +""" +the command palette chooser (Qt version only) +""" + +ida_kernwin.BWN_CMDPALWIN +""" +the command palette window (Qt version only) +""" + +ida_kernwin.BWN_CPUREGS +""" +one of the 'General registers', 'FPU register', ... debugger windows +""" + +ida_kernwin.BWN_CUSTVIEW +""" +custom viewers +""" + +ida_kernwin.BWN_CV_LINE_INFOS +""" +custom viewers' lineinfo widget +""" + +ida_kernwin.BWN_DISASM +""" +disassembly views +""" + +ida_kernwin.BWN_DISASMS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_DISASM_ARROWS +""" +disassembly arrows widget +""" + +ida_kernwin.BWN_DUMP +""" +hex dumps +""" + +ida_kernwin.BWN_DUMPS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_ENUMS +""" +enumerations +""" + +ida_kernwin.BWN_EXPORTS +""" +exports +""" + +ida_kernwin.BWN_FRAME +""" +function frame +""" + +ida_kernwin.BWN_FUNCS +""" +functions +""" + +ida_kernwin.BWN_IMPORTS +""" +imports +""" + +ida_kernwin.BWN_LOCALS +""" +the 'locals' debugger window +""" + +ida_kernwin.BWN_LOCTYPS +""" +local types +""" + +ida_kernwin.BWN_MDVIEWCSR +""" +lumina metadata view chooser +""" + +ida_kernwin.BWN_MODULES +""" +modules +""" + +ida_kernwin.BWN_NAMES +""" +names +""" + +ida_kernwin.BWN_NAVBAND +""" +navigation band +""" + +ida_kernwin.BWN_NOTEPAD +""" +notepad +""" + +ida_kernwin.BWN_OUTPUT +""" +the text area, in the output window +""" + +ida_kernwin.BWN_PROBS +""" +problems +""" + +ida_kernwin.BWN_PSEUDOCODE +""" +hexrays decompiler views +""" + +ida_kernwin.BWN_SCRIPTS_CSR +""" +the "Recent scripts" chooser +""" + +ida_kernwin.BWN_SEARCH +""" +search results +""" + +ida_kernwin.BWN_SEARCHS +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_SEGREGS +""" +segment registers +""" + +ida_kernwin.BWN_SEGS +""" +segments +""" + +ida_kernwin.BWN_SELS +""" +selectors +""" + +ida_kernwin.BWN_SHORTCUTCSR +""" +the shortcuts chooser (Qt version only) +""" + +ida_kernwin.BWN_SHORTCUTWIN +""" +the shortcuts window (Qt version only) +""" + +ida_kernwin.BWN_SIGNS +""" +signatures +""" + +ida_kernwin.BWN_SNIPPETS +""" +the 'Execute script' window +""" + +ida_kernwin.BWN_SNIPPETS_CSR +""" +the list of snippets in the 'Execute script' window +""" + +ida_kernwin.BWN_SO_OFFSETS +""" +the 'Structure offsets' dialog's offset panel +""" + +ida_kernwin.BWN_SO_STRUCTS +""" +the 'Structure offsets' dialog's 'Structures and Unions' panel +""" + +ida_kernwin.BWN_SRCPTHMAP_CSR +""" +"Source paths..."'s path mappings chooser +""" + +ida_kernwin.BWN_SRCPTHUND_CSR +""" +"Source paths..."'s undesired paths chooser +""" + +ida_kernwin.BWN_STACK +""" +Alias. Some BWN_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.BWN_STKVIEW +""" +the 'Stack view' debugger window +""" + +ida_kernwin.BWN_STRINGS +""" +strings +""" + +ida_kernwin.BWN_STRUCTS +""" +structures +""" + +ida_kernwin.BWN_THREADS +""" +threads +""" + +ida_kernwin.BWN_TILS +""" +type libraries +""" + +ida_kernwin.BWN_TRACE +""" +trace view +""" + +ida_kernwin.BWN_UNDOHIST +""" +Undo history. +""" + +ida_kernwin.BWN_UNKNOWN +""" +unknown window +""" + +ida_kernwin.BWN_WATCH +""" +the 'watches' debugger window +""" + +ida_kernwin.BWN_XREFS +""" +xrefs +""" + +ida_kernwin.CHCOL_DEC +""" +decimal number +""" + +ida_kernwin.CHCOL_DEFHIDDEN +""" +column should be hidden by default +""" + +ida_kernwin.CHCOL_EA +""" +address +""" + +ida_kernwin.CHCOL_FNAME +""" +function name +""" + +ida_kernwin.CHCOL_FORMAT +""" +column format mask +""" + +ida_kernwin.CHCOL_HEX +""" +hexadecimal number +""" + +ida_kernwin.CHCOL_PATH +""" +file path +""" + +ida_kernwin.CHCOL_PLAIN +""" +plain string +""" + +ida_kernwin.CHITEM_BOLD +""" +display the item in bold +""" + +ida_kernwin.CHITEM_GRAY +""" +gray out the item +""" + +ida_kernwin.CHITEM_ITALIC +""" +display the item in italic +""" + +ida_kernwin.CHITEM_STRIKE +""" +strikeout the item +""" + +ida_kernwin.CHITEM_UNDER +""" +underline the item +""" + +ida_kernwin.CHOOSER_MENU_EDIT +""" +Values of the 'menu_index' parameter. + +Obsolete. Please don't use +""" + +ida_kernwin.CHOOSER_MENU_JUMP +""" +Obsolete. Please don't use. +""" + +ida_kernwin.CHOOSER_MENU_SEARCH +""" +Obsolete. Please don't use. +""" + +ida_kernwin.CHOOSER_MULTI_SELECTION +""" +enable for multiple selections. A callback of type +'chooser_multi_cb_t' will be called for all selected items. +""" + +ida_kernwin.CHOOSER_NO_SELECTION +""" +Flags. + +enable even if there's no selected item. 'n' will be NO_SELECTION for +a callback. +""" + +ida_kernwin.CHOOSER_POPUP_MENU +""" +Add command to the popup menu. +""" + +ida_kernwin.CH_ATTRS +""" +generate ui_get_chooser_item_attrs (gui only) +""" + +ida_kernwin.CH_BUILTIN_MASK +""" +Mask for builtin chooser numbers. Plugins should not use them. +""" + +ida_kernwin.CH_CAN_DEL +""" +allow to delete existing item(s) +""" + +ida_kernwin.CH_CAN_EDIT +""" +allow to edit existing item(s) +""" + +ida_kernwin.CH_CAN_INS +""" +allow to insert new items +""" + +ida_kernwin.CH_CAN_REFRESH +""" +allow to refresh chooser +""" + +ida_kernwin.CH_FORCE_DEFAULT +""" +if a non-modal chooser was already open, change selection to the +default one +""" + +ida_kernwin.CH_KEEP +""" +The chooser instance's lifecycle is not tied to the lifecycle of the +widget showing its contents. Closing the widget will not destroy the +chooser structure. This allows for, e.g., static global chooser +instances that don't need to be allocated on the heap. Also stack- +allocated chooser instances must set this bit. +""" + +ida_kernwin.CH_MODAL +""" +Modal chooser. +""" + +ida_kernwin.CH_MULTI +""" +Obsolete. + +The chooser will allow multi-selection (only for GUI choosers). This +bit is set when using the 'chooser_multi_t' structure. +""" + +ida_kernwin.CH_NOBTNS +""" +do not display ok/cancel/help/search buttons. Meaningful only for gui +modal windows because non-modal windows do not have any buttons +anyway. Text mode does not have them neither. +""" + +ida_kernwin.CH_NOIDB +""" +use the chooser before opening the database +""" + +ida_kernwin.CH_NO_STATUS_BAR +""" +don't show a status bar +""" + +ida_kernwin.CH_QFLT +""" +open with quick filter enabled and focused +""" + +ida_kernwin.CH_QFTYP_DEFAULT +""" +set quick filtering type to the possible existing default for this +chooser +""" + +ida_kernwin.CH_QFTYP_FUZZY +""" +fuzzy search quick filter type +""" + +ida_kernwin.CH_QFTYP_NORMAL +""" +normal (i.e., lexicographical) quick filter type +""" + +ida_kernwin.CH_QFTYP_REGEX +""" +regex quick filter type +""" + +ida_kernwin.CH_QFTYP_WHOLE_WORDS +""" +whole words quick filter type +""" + +ida_kernwin.CH_RESTORE +""" +restore floating position if present (equivalent of WOPN_RESTORE) (GUI +version only) +""" + +ida_kernwin.CLNL_FINDCMT +""" +Search for the comment symbol everywhere in the line, not only at the +beginning. +""" + +ida_kernwin.CLNL_LTRIM +""" +Remove leading space characters. +""" + +ida_kernwin.CLNL_RTRIM +""" +Remove trailing space characters. +""" + +ida_kernwin.CREATETB_ADV +""" +toolbar is for 'advanced mode' only +""" + +ida_kernwin.DP_BEFORE +""" +used with 'DP_INSIDE' . + +place src_form before dst_form in the tab bar instead of after +""" + +ida_kernwin.DP_BOTTOM +""" +Dock src_form below dest_form. +""" + +ida_kernwin.DP_FLOATING +""" +Make src_form floating. +""" + +ida_kernwin.DP_INSIDE +""" +Create a new tab bar with both src_form and dest_form. +""" + +ida_kernwin.DP_LEFT +""" +Dock src_form to the left of dest_form. +""" + +ida_kernwin.DP_RIGHT +""" +Dock src_form to the right of dest_form. +""" + +ida_kernwin.DP_TAB +""" +Place src_form into a tab next to dest_form, if dest_form is in a tab +bar (otherwise the same as 'DP_INSIDE' ) +""" + +ida_kernwin.DP_TOP +""" +Dock src_form above dest_form. +""" + +ida_kernwin.HIF_IDENTIFIER +""" +text is an identifier (i.e., when searching for the current highlight, +SEARCH_IDENT will be used) +""" + +ida_kernwin.HIF_LOCKED +""" +locked; clicking/moving the cursor around doesn't change the highlight +""" + +ida_kernwin.HIF_NOCASE +""" +case insensitive +""" + +ida_kernwin.HIF_REGISTER +""" +text represents a register (aliases/subregisters will be highlit as +well) +""" + +ida_kernwin.HIST_CMD +""" +commands +""" + +ida_kernwin.HIST_CMT +""" +comments +""" + +ida_kernwin.HIST_DIR +""" +directory names (text version only) +""" + +ida_kernwin.HIST_FILE +""" +file names +""" + +ida_kernwin.HIST_IDENT +""" +names +""" + +ida_kernwin.HIST_SEG +""" +segment names +""" + +ida_kernwin.HIST_SRCH +""" +search substrings +""" + +ida_kernwin.HIST_TYPE +""" +type declarations +""" + +ida_kernwin.IWID_ADDRWATCH +""" +address watches (47) +""" + +ida_kernwin.IWID_ALL +""" +mask +""" + +ida_kernwin.IWID_BPTS +""" +breakpoints (13) +""" + +ida_kernwin.IWID_CALLS +""" +function calls (11) +""" + +ida_kernwin.IWID_CALLS_CALLEES +""" +funcalls, callees (50) +""" + +ida_kernwin.IWID_CALLS_CALLERS +""" +funcalls, callers (49) +""" + +ida_kernwin.IWID_CALL_STACK +""" +call stack (17) +""" + +ida_kernwin.IWID_CHOOSER +""" +chooser (37) +""" + +ida_kernwin.IWID_CLI +""" +input line (33) +""" + +ida_kernwin.IWID_CMDPALCSR +""" +command palette (43) +""" + +ida_kernwin.IWID_CMDPALWIN +""" +command palette (44) +""" + +ida_kernwin.IWID_CPUREGS +""" +registers (40) +""" + +ida_kernwin.IWID_CUSTVIEW +""" +custom viewers (46) +""" + +ida_kernwin.IWID_CV_LINE_INFOS +""" +lineinfo widget (53) +""" + +ida_kernwin.IWID_DISASM +""" +disassembly views (29) +""" + +ida_kernwin.IWID_DISASM_ARROWS +""" +arrows widget (52) +""" + +ida_kernwin.IWID_DUMP +""" +hex dumps (30) +""" + +ida_kernwin.IWID_ENUMS +""" +enumerations (27) +""" + +ida_kernwin.IWID_EXPORTS +""" +exports (0) +""" + +ida_kernwin.IWID_FRAME +""" +function frame (25) +""" + +ida_kernwin.IWID_FUNCS +""" +functions (3) +""" + +ida_kernwin.IWID_IMPORTS +""" +imports (1) +""" + +ida_kernwin.IWID_LOCALS +""" +locals (35) +""" + +ida_kernwin.IWID_LOCTYPS +""" +local types (10) +""" + +ida_kernwin.IWID_MDVIEWCSR +""" +lumina md view (51) +""" + +ida_kernwin.IWID_MODULES +""" +modules (15) +""" + +ida_kernwin.IWID_NAMES +""" +names (2) +""" + +ida_kernwin.IWID_NAVBAND +""" +navigation band (26) +""" + +ida_kernwin.IWID_NOTEPAD +""" +notepad (31) +""" + +ida_kernwin.IWID_OUTPUT +""" +output (32) +""" + +ida_kernwin.IWID_PROBS +""" +problems (12) +""" + +ida_kernwin.IWID_PSEUDOCODE +""" +decompiler (48) +""" + +ida_kernwin.IWID_SCRIPTS_CSR +""" +recent scripts (58) +""" + +ida_kernwin.IWID_SEARCH +""" +search results (19) +""" + +ida_kernwin.IWID_SEGREGS +""" +segment registers (6) +""" + +ida_kernwin.IWID_SEGS +""" +segments (5) +""" + +ida_kernwin.IWID_SELS +""" +selectors (7) +""" + +ida_kernwin.IWID_SHORTCUTCSR +""" +shortcuts chooser (38) +""" + +ida_kernwin.IWID_SHORTCUTWIN +""" +shortcuts window (39) +""" + +ida_kernwin.IWID_SIGNS +""" +signatures (8) +""" + +ida_kernwin.IWID_SNIPPETS +""" +snippets (45) +""" + +ida_kernwin.IWID_SNIPPETS_CSR +""" +snippets chooser (57) +""" + +ida_kernwin.IWID_SO_OFFSETS +""" +stroff (42) +""" + +ida_kernwin.IWID_SO_STRUCTS +""" +stroff (41) +""" + +ida_kernwin.IWID_SRCPTHMAP_CSR +""" +mappings chooser (54) +""" + +ida_kernwin.IWID_SRCPTHUND_CSR +""" +undesired chooser (55) +""" + +ida_kernwin.IWID_STACK +""" +Alias. Some IWID_* were confusing, and thus have been renamed. This is +to ensure bw-compat. +""" + +ida_kernwin.IWID_STKVIEW +""" +stack view (36) +""" + +ida_kernwin.IWID_STRINGS +""" +strings (4) +""" + +ida_kernwin.IWID_STRUCTS +""" +structures (28) +""" + +ida_kernwin.IWID_THREADS +""" +threads (14) +""" + +ida_kernwin.IWID_TILS +""" +type libraries (9) +""" + +ida_kernwin.IWID_TRACE +""" +trace view (16) +""" + +ida_kernwin.IWID_UNDOHIST +""" +Undo history (56) +""" + +ida_kernwin.IWID_WATCH +""" +watches (34) +""" + +ida_kernwin.IWID_XREFS +""" +xrefs (18) +""" + +ida_kernwin.MFF_FAST +""" +Execute code as soon as possible. this mode is ok for calling ui +related functions that do not query the database. +""" + +ida_kernwin.MFF_NOWAIT +""" +Do not wait for the request to be executed. the caller should ensure +that the request is not destroyed until the execution completes. if +not, the request will be ignored. 'execute_sync()' returns the request +id in this case. it can be used in 'cancel_exec_request()' . This flag +can be used to delay the code execution until the next UI loop run +even from the main thread. +""" + +ida_kernwin.MFF_READ +""" +Execute code only when ida is idle and it is safe to query the +database. this mode is recommended only for code that does not modify +the database. (nb: ida may be in the middle of executing another user +request, for example it may be waiting for him to enter values into a +modal dialog box) +""" + +ida_kernwin.MFF_WRITE +""" +Execute code only when ida is idle and it is safe to modify the +database. in particular, this flag will suspend execution if there is +a modal dialog box on the screen this mode can be used to call any ida +api function 'MFF_WRITE' implies 'MFF_READ' +""" + +ida_kernwin.SETMENU_APP +""" +add menu item after the specified path +""" + +ida_kernwin.SETMENU_FIRST +""" +add item to the beginning of menu +""" + +ida_kernwin.SETMENU_INS +""" +add menu item before the specified path (default) +""" + +ida_kernwin.UIJMP_ACTIVATE +""" +activate the new window +""" + +ida_kernwin.UIJMP_ANYVIEW +""" +jump in any ea_t-capable view +""" + +ida_kernwin.UIJMP_DONTPUSH +""" +in the navigation history + +do not remember the current address +""" + +ida_kernwin.UIJMP_IDAVIEW +""" +jump in idaview +""" + +ida_kernwin.UIJMP_IDAVIEW_NEW +""" +jump in new idaview +""" + +ida_kernwin.VES_SHIFT +""" +state & 1 => Shift is pressedstate & 2 => Alt is pressedstate & 4 => +Ctrl is pressedstate & 8 => Mouse left button is pressedstate & 16 => +Mouse right button is pressedstate & 32 => Mouse middle button is +pressedstate & 128 => Meta is pressed (OSX only) +""" +=== ida_kernwin EPYDOC INJECTIONS END === +Help on function COLSTR in module ida_lines: + +COLSTR(str, tag) + Utility function to create a colored line + @param str: The string + @param tag: Color tag constant. One of SCOLOR_XXXX + +Help on function add_extra_cmt in module ida_lines: + +add_extra_cmt(*args) -> 'bool' + add_extra_cmt(ea, isprev, format) -> bool + + + Add anterior/posterior comment line(s). + + @param ea: linear address (C++: ea_t) + @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) + @param format: printf() style format string. may contain \n to denote + new lines. The resulting string should not contain + comment characters (;), the kernel will add them + automatically. (C++: const char *) + @return: true if success + +Help on function add_extra_line in module ida_lines: + +add_extra_line(*args) -> 'bool' + add_extra_line(ea, isprev, format) -> bool + + + Add anterior/posterior non-comment line(s). + + @param ea: linear address (C++: ea_t) + @param isprev: do we add anterior lines? (0-no, posterior) (C++: bool) + @param format: printf() style format string. may contain \n to denote + new lines. (C++: const char *) + @return: true if success + +Help on function add_pgm_cmt in module ida_lines: + +add_pgm_cmt(*args) -> 'bool' + add_pgm_cmt(format) -> bool + + + Add anterior comment line(s) at the start of program. + + @param format: printf() style format string. may contain \n to denote + new lines. The resulting string should not contain + comment characters (;), the kernel will add them + automatically. (C++: const char *) + @return: true if success + +Help on function add_sourcefile in module ida_lines: + +add_sourcefile(*args) -> 'bool' + add_sourcefile(ea1, ea2, filename) -> bool + + + Mark a range of address as belonging to a source file. An address + range may belong only to one source file. A source file may be + represented by several address ranges. + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (excluded) + (C++: ea_t) + @param filename: name of source file. (C++: const char *) + @return: success + +Help on class bgcolors_t in module ida_lines: + +class bgcolors_t(builtins.object) + | Proxy of C++ bgcolors_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> bgcolors_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bgcolors_t(...) + | delete_bgcolors_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | epilog_color + | bgcolors_t_epilog_color_get(self) -> bgcolor_t + | + | prolog_color + | bgcolors_t_prolog_color_get(self) -> bgcolor_t + | + | switch_color + | bgcolors_t_switch_color_get(self) -> bgcolor_t + | + | thisown + | The membership flag + +Help on function calc_bg_color in module ida_lines: + +calc_bg_color(*args) -> 'bgcolor_t' + calc_bg_color(ea) -> bgcolor_t + + + Get background color for line at 'ea' + + @param ea (C++: ea_t) + @return: RGB color + +Help on function calc_prefix_color in module ida_lines: + +calc_prefix_color(*args) -> 'color_t' + calc_prefix_color(ea) -> color_t + + + Get prefix color for line at 'ea' + + @param ea (C++: ea_t) + @return: Line prefix colors + +Help on function create_encoding_helper in module ida_lines: + +create_encoding_helper(*args) -> 'encoder_t *' + create_encoding_helper(encidx=-1, nr=nr_once) -> encoder_t * + +Help on function del_extra_cmt in module ida_lines: + +del_extra_cmt(*args) -> 'void' + del_extra_cmt(ea, what) + +Help on function del_sourcefile in module ida_lines: + +del_sourcefile(*args) -> 'bool' + del_sourcefile(ea) -> bool + + + Delete information about the source file. + + @param ea: linear address (C++: ea_t) + @return: success + +Help on function delete_extra_cmts in module ida_lines: + +delete_extra_cmts(*args) -> 'void' + delete_extra_cmts(ea, what) + +Help on function generate_disasm_line in module ida_lines: + +generate_disasm_line(*args) -> 'qstring *' + generate_disasm_line(ea, flags=0) -> str + +Help on function generate_disassembly in module ida_lines: + +generate_disassembly(*args) -> 'PyObject *' + generate_disassembly(ea, max_lines, as_stack, notags) -> PyObject * + + + Generate disassembly lines (many lines) and put them into a buffer + + @param ea: address to generate disassembly for + @param max_lines: how many lines max to generate + @param as_stack: Display undefined items as 2/4/8 bytes + @return: + - None on failure + - tuple(most_important_line_number, tuple(lines)) : Returns a tuple containing + the most important line number and a tuple of generated lines + +Help on function get_extra_cmt in module ida_lines: + +get_extra_cmt(*args) -> 'int' + get_extra_cmt(ea, what) -> ssize_t + +Help on function get_first_free_extra_cmtidx in module ida_lines: + +get_first_free_extra_cmtidx(*args) -> 'int' + get_first_free_extra_cmtidx(ea, start) -> int + +Help on function get_sourcefile in module ida_lines: + +get_sourcefile(*args) -> 'char const *' + get_sourcefile(ea, bounds=None) -> char const * + + + Get name of source file occupying the given address. + + @param ea: linear address (C++: ea_t) + @param bounds: pointer to the output buffer with the address range for + the current file. May be NULL. (C++: range_t *) + @return: NULL if source file information is not found, otherwise + returns pointer to file name + +Help on function requires_color_esc in module ida_lines: + +requires_color_esc(c) + Checks if the given character requires escaping + @param c: character (string of one char) + @return: Boolean + + + Is the given char a color escape character? + +Help on function set_user_defined_prefix in module ida_lines: + +set_user_defined_prefix(*args) -> 'PyObject *' + set_user_defined_prefix(width, pycb) -> PyObject * + + + User-defined line-prefixes are displayed just after the autogenerated + line prefixes. In order to use them, the plugin should call the + following function to specify its width and contents. + @param width: the width of the user-defined prefix + @param callback: a get_user_defined_prefix callback to get the contents of the prefix. + Its arguments: + ea - linear address + lnnum - line number + indent - indent of the line contents (-1 means the default instruction) + indent and is used for instruction itself. see explanations for printf_line() + line - the line to be generated. the line usually contains color tags this argument + can be examined to decide whether to generated the prefix + It returns a buffer of size < bufsize + + In order to remove the callback before unloading the plugin, specify the width = 0 or the callback = None + +Help on function tag_addr in module ida_lines: + +tag_addr(*args) -> 'PyObject *' + tag_addr(ea) -> PyObject * + + + Insert an address mark into a string. + + @param ea: address to include (C++: ea_t) + +Help on function tag_advance in module ida_lines: + +tag_advance(*args) -> 'int' + tag_advance(line, cnt) -> int + + + Move pointer to a 'line' to 'cnt' positions right. Take into account + escape sequences. + + @param line: pointer to string (C++: const char *) + @param cnt: number of positions to move right (C++: int) + @return: moved pointer + +Help on function tag_remove in module ida_lines: + +tag_remove(*args) -> 'PyObject *' + tag_remove(nonnul_instr) -> PyObject * + + + Remove color escape sequences from a string + @param colstr: the colored string with embedded tags + @return: a new string w/o the tags + +Help on function tag_skipcode in module ida_lines: + +tag_skipcode(*args) -> 'int' + tag_skipcode(line) -> int + + + Skip one color code. This function should be used if you are + interested in color codes and want to analyze all of them. Otherwise + 'tag_skipcodes()' function is better since it will skip all colors at + once. This function will skip the current color code if there is one. + If the current symbol is not a color code, it will return the input. + + @param line (C++: const char *) + @return: moved pointer + +Help on function tag_skipcodes in module ida_lines: + +tag_skipcodes(*args) -> 'int' + tag_skipcodes(line) -> int + + + Move the pointer past all color codes. + + @param line: can't be NULL (C++: const char *) + @return: moved pointer, can't be NULL + +Help on function tag_strlen in module ida_lines: + +tag_strlen(*args) -> 'ssize_t' + tag_strlen(line) -> ssize_t + + + Calculate length of a colored string This function computes the length + in unicode codepoints of a line + + @param line (C++: const char *) + @return: the number of codepoints in the line, or -1 on error + +Help on function update_extra_cmt in module ida_lines: + +update_extra_cmt(*args) -> 'void' + update_extra_cmt(ea, what, str) + +=== ida_lines EPYDOC INJECTIONS === +ida_lines.COLOR_ADDR_SIZE +""" +Size of a tagged address (see 'COLOR_ADDR' ) +""" + +ida_lines.COLOR_BG_MAX +""" +Max color number. +""" + +ida_lines.COLOR_CODE +""" +Single instruction. +""" + +ida_lines.COLOR_CURITEM +""" +Current item. +""" + +ida_lines.COLOR_CURLINE +""" +Current line. +""" + +ida_lines.COLOR_DATA +""" +Data bytes. +""" + +ida_lines.COLOR_DEFAULT +""" +Default. +""" + +ida_lines.COLOR_ESC +""" +Escape character (Quote next character). This is needed to output '\\1' +and '\\2' characters. +""" + +ida_lines.COLOR_EXTERN +""" +External name definition segment. +""" + +ida_lines.COLOR_HIDLINE +""" +Hidden line. +""" + +ida_lines.COLOR_INV +""" +Escape character (Inverse foreground and background colors). This +escape character has no corresponding 'COLOR_OFF' . Its action +continues until the next 'COLOR_INV' or end of line. +""" + +ida_lines.COLOR_LIBFUNC +""" +Library function. +""" + +ida_lines.COLOR_LUMFUNC +""" +Lumina function. +""" + +ida_lines.COLOR_OFF +""" +Followed by a color code ( 'color_t' ). + +Escape character (OFF). +""" + +ida_lines.COLOR_ON +""" +Followed by a color code ( 'color_t' ). + +Escape character (ON). +""" + +ida_lines.COLOR_REGFUNC +""" +Regular function. +""" + +ida_lines.COLOR_SELECTED +""" +Selected. +""" + +ida_lines.COLOR_UNKNOWN +""" +Unexplored byte. +""" + +ida_lines.SCOLOR_ADDR +""" +Hidden address mark. +""" + +ida_lines.SCOLOR_ALTOP +""" +Alternative operand. +""" + +ida_lines.SCOLOR_ASMDIR +""" +Assembler directive. +""" + +ida_lines.SCOLOR_AUTOCMT +""" +Automatic comment. +""" + +ida_lines.SCOLOR_BINPREF +""" +Binary line prefix bytes. +""" + +ida_lines.SCOLOR_CHAR +""" +Char constant in instruction. +""" + +ida_lines.SCOLOR_CNAME +""" +Regular code name. +""" + +ida_lines.SCOLOR_CODNAME +""" +Dummy code name. +""" + +ida_lines.SCOLOR_COLLAPSED +""" +Collapsed line. +""" + +ida_lines.SCOLOR_CREF +""" +Code reference. +""" + +ida_lines.SCOLOR_CREFTAIL +""" +Code reference to tail byte. +""" + +ida_lines.SCOLOR_DATNAME +""" +Dummy Data Name. +""" + +ida_lines.SCOLOR_DCHAR +""" +Char constant in data directive. +""" + +ida_lines.SCOLOR_DEFAULT +""" +Default. +""" + +ida_lines.SCOLOR_DEMNAME +""" +Demangled Name. +""" + +ida_lines.SCOLOR_DNAME +""" +Regular Data Name. +""" + +ida_lines.SCOLOR_DNUM +""" +Numeric constant in data directive. +""" + +ida_lines.SCOLOR_DREF +""" +Data reference. +""" + +ida_lines.SCOLOR_DREFTAIL +""" +Data reference to tail byte. +""" + +ida_lines.SCOLOR_DSTR +""" +String constant in data directive. +""" + +ida_lines.SCOLOR_ERROR +""" +Error or problem. +""" + +ida_lines.SCOLOR_ESC +""" +Escape character (Quote next character) +""" + +ida_lines.SCOLOR_EXTRA +""" +Extra line. +""" + +ida_lines.SCOLOR_HIDNAME +""" +Hidden name. +""" + +ida_lines.SCOLOR_IMPNAME +""" +Imported name. +""" + +ida_lines.SCOLOR_INSN +""" +Instruction. +""" + +ida_lines.SCOLOR_INV +""" +Escape character (Inverse colors) +""" + +ida_lines.SCOLOR_KEYWORD +""" +Keywords. +""" + +ida_lines.SCOLOR_LIBNAME +""" +Library function name. +""" + +ida_lines.SCOLOR_LOCNAME +""" +Local variable name. +""" + +ida_lines.SCOLOR_MACRO +""" +Macro. +""" + +ida_lines.SCOLOR_NUMBER +""" +Numeric constant in instruction. +""" + +ida_lines.SCOLOR_OFF +""" +Escape character (OFF) +""" + +ida_lines.SCOLOR_ON +""" +Escape character (ON) +""" + +ida_lines.SCOLOR_PREFIX +""" +Line prefix. +""" + +ida_lines.SCOLOR_REG +""" +Register name. +""" + +ida_lines.SCOLOR_REGCMT +""" +Regular comment. +""" + +ida_lines.SCOLOR_RPTCMT +""" +Repeatable comment (defined not here) +""" + +ida_lines.SCOLOR_SEGNAME +""" +Segment name. +""" + +ida_lines.SCOLOR_STRING +""" +String constant in instruction. +""" + +ida_lines.SCOLOR_SYMBOL +""" +Punctuation. +""" + +ida_lines.SCOLOR_UNAME +""" +Regular unknown name. +""" + +ida_lines.SCOLOR_UNKNAME +""" +Dummy unknown name. +""" + +ida_lines.SCOLOR_VOIDOP +""" +Void operand. +""" +=== ida_lines EPYDOC INJECTIONS END === +Help on function base2file in module ida_loader: + +base2file(*args) -> 'int' + base2file(fp, pos, ea1, ea2) -> int + + + Unload database to a binary file. This function works for wide byte + processors too. + + @param fp: pointer to file (C++: FILE *) + @param pos: position in the file (C++: qoff64_t) + @param ea1: range of source linear addresses (C++: ea_t) + @param ea2: range of source linear addresses (C++: ea_t) + @return: 1-ok(always), write error leads to immediate exit + +Help on function build_snapshot_tree in module ida_loader: + +build_snapshot_tree(*args) -> 'bool' + build_snapshot_tree(root) -> bool + + + Build the snapshot tree. + + @param root: snapshot root that will contain the snapshot tree + elements. (C++: snapshot_t *) + @return: success + +Help on function clr_database_flag in module ida_loader: + +clr_database_flag(*args) -> 'void' + clr_database_flag(dbfl) + +Help on function extract_module_from_archive in module ida_loader: + +extract_module_from_archive(*args) -> 'PyObject *' + extract_module_from_archive(fname, is_remote=False) -> PyObject * + + + Extract a module for an archive file. Parse an archive file, show the + list of modules to the user, allow him to select a module, extract the + selected module to a file (if the extract module is an archive, repeat + the process). This function can handle ZIP, AR, AIXAR, OMFLIB files. + The temporary file will be automatically deleted by IDA at the end. + + @param is_remote: is the input file remote? (C++: bool) + +Help on function file2base in module ida_loader: + +file2base(*args) -> 'int' + file2base(li, pos, ea1, ea2, patchable) -> int + + + Load portion of file into the database. This function will include + (ea1..ea2) into the addressing space of the program (make it enabled) + + @param li: pointer of input source (C++: linput_t *) + @param pos: position in the file (C++: qoff64_t) + @param ea1: range of destination linear addresses (C++: ea_t) + @param ea2: range of destination linear addresses (C++: ea_t) + @param patchable: should the kernel remember correspondence of file + offsets to linear addresses. (C++: int) + +Help on function find_plugin in module ida_loader: + +find_plugin(*args) -> 'plugin_t *' + find_plugin(name, load_if_needed=False) -> plugin_t * + + + Find a user-defined plugin and optionally load it. + + @param name: short plugin name without path and extension, or absolute + path to the file name (C++: const char *) + @param load_if_needed: if the plugin is not present in the memory, try + to load it (C++: bool) + @return: pointer to plugin description block + +Help on function flush_buffers in module ida_loader: + +flush_buffers(*args) -> 'int' + flush_buffers() -> int + + + Flush buffers to the disk. + +Help on function gen_exe_file in module ida_loader: + +gen_exe_file(*args) -> 'int' + gen_exe_file(fp) -> int + + + Generate an exe file (unload the database in binary form). + + @param fp (C++: FILE *) + @return: fp the output file handle. if fp == NULL then return: 1: + can generate an executable file 0: can't generate an + executable file + +Help on function gen_file in module ida_loader: + +gen_file(*args) -> 'int' + gen_file(otype, fp, ea1, ea2, flags) -> int + + + Generate an output file. 'OFILE_EXE' : + + @param otype: type of output file. (C++: ofile_type_t) + @param fp: the output file handle (C++: FILE *) + @param ea1: start address. For some file types this argument is + ignored (C++: ea_t) + @param ea2: end address. For some file types this argument is ignored + as usual in ida, the end address of the range is not + included (C++: ea_t) + @param flags: Generate file flags (C++: int) + @return: number of the generated lines. -1 if an error occurred + +Help on function get_basic_file_type in module ida_loader: + +get_basic_file_type(*args) -> 'filetype_t' + get_basic_file_type(li) -> filetype_t + + + Get the input file type. This function can recognize libraries and zip + files. + + @param li (C++: linput_t *) + +Help on function get_elf_debug_file_directory in module ida_loader: + +get_elf_debug_file_directory(*args) -> 'char const *' + get_elf_debug_file_directory() -> char const * + + + Get the value of the ELF_DEBUG_FILE_DIRECTORY configuration directive. + +Help on function get_file_type_name in module ida_loader: + +get_file_type_name(*args) -> 'size_t' + get_file_type_name() -> str + + + Get name of the current file type. The current file type is kept in + \inf{filetype}. + + @return: size of answer, this function always succeeds + +Help on function get_fileregion_ea in module ida_loader: + +get_fileregion_ea(*args) -> 'ea_t' + get_fileregion_ea(offset) -> ea_t + + + Get linear address which corresponds to the specified input file + offset. If can't be found, return 'BADADDR' + + @param offset (C++: qoff64_t) + +Help on function get_fileregion_offset in module ida_loader: + +get_fileregion_offset(*args) -> 'qoff64_t' + get_fileregion_offset(ea) -> qoff64_t + + + Get offset in the input file which corresponds to the given ea. If the + specified ea can't be mapped into the input file offset, return -1. + + @param ea (C++: ea_t) + +Help on function get_path in module ida_loader: + +get_path(*args) -> 'char const *' + get_path(pt) -> char const * + + + Get the file path + + @param pt: file path type Types of the file pathes (C++: path_type_t) + @return: file path, never returns NULL + +Help on function get_plugin_options in module ida_loader: + +get_plugin_options(*args) -> 'char const *' + get_plugin_options(plugin) -> char const * + + + Get plugin options from the command line. If the user has specified + the options in the -Oplugin_name:options format, them this function + will return the 'options' part of it The 'plugin' parameter should + denote the plugin name Returns NULL if there we no options specified + + @param plugin (C++: const char *) + +Help on class idp_desc_t in module ida_loader: + +class idp_desc_t(builtins.object) + | Proxy of C++ idp_desc_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idp_desc_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_idp_desc_t(...) + | delete_idp_desc_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | checked + | idp_desc_t_checked_get(self) -> bool + | + | family + | idp_desc_t_family_get(self) -> qstring * + | + | is_script + | idp_desc_t_is_script_get(self) -> bool + | + | mtime + | idp_desc_t_mtime_get(self) -> time_t + | + | names + | idp_desc_t_names_get(self) -> idp_names_t * + | + | path + | idp_desc_t_path_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class idp_name_t in module ida_loader: + +class idp_name_t(builtins.object) + | Proxy of C++ idp_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> idp_name_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_idp_name_t(...) + | delete_idp_name_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | hidden + | idp_name_t_hidden_get(self) -> bool + | + | lname + | idp_name_t_lname_get(self) -> qstring * + | + | sname + | idp_name_t_sname_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on function is_database_flag in module ida_loader: + +is_database_flag(*args) -> 'bool' + is_database_flag(dbfl) -> bool + + + Get the current database flag + + @param dbfl: flag Database flags (C++: uint32) + @return: the state of the flag (set or cleared) + +Help on function is_trusted_idb in module ida_loader: + +is_trusted_idb(*args) -> 'bool' + is_trusted_idb() -> bool + + + Is the database considered as trusted? + +Help on function load_and_run_plugin in module ida_loader: + +load_and_run_plugin(*args) -> 'bool' + load_and_run_plugin(name, arg) -> bool + + + Load & run a plugin. + + + @param name (C++: const char *) + @param arg (C++: size_t) + +Help on function load_binary_file in module ida_loader: + +load_binary_file(*args) -> 'bool' + load_binary_file(filename, li, _neflags, fileoff, basepara, binoff, nbytes) -> bool + + + Load a binary file into the database. This function usually is called + from ui. + + @param filename: the name of input file as is (if the input file is + from library, then this is the name from the library) + (C++: const char *) + @param li: loader input source (C++: linput_t *) + @param _neflags: Load file flags . For the first file, the flag + NEF_FIRST must be set. (C++: ushort) + @param fileoff: Offset in the input file (C++: qoff64_t) + @param basepara: Load address in paragraphs (C++: ea_t) + @param binoff: Load offset (load_address=(basepara<<4)+binoff) (C++: + ea_t) + @param nbytes: Number of bytes to load from the file. 0: up to the + end of the file (C++: uint64) + +Help on function load_ids_module in module ida_loader: + +load_ids_module(*args) -> 'int' + load_ids_module(fname) -> int + + + Load and apply IDS file. This function loads the specified IDS file + and applies it to the database. If the program imports functions from + a module with the same name as the name of the ids file being loaded, + then only functions from this module will be affected. Otherwise (i.e. + when the program does not import a module with this name) any function + in the program may be affected. + + @param fname: name of file to apply (C++: char *) + +Help on function load_plugin in module ida_loader: + +load_plugin(*args) -> 'PyObject *' + load_plugin(name) -> PyObject * + + + Loads a plugin + @return: + - None if plugin could not be loaded + - An opaque object representing the loaded plugin + +Help on class loader_t in module ida_loader: + +class loader_t(builtins.object) + | Proxy of C++ loader_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> loader_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_loader_t(...) + | delete_loader_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | flags + | loader_t_flags_get(self) -> uint32 + | + | thisown + | The membership flag + | + | version + | loader_t_version_get(self) -> uint32 + +Help on function mem2base in module ida_loader: + +mem2base(*args) -> 'int' + mem2base(py_mem, ea, fpos=-1) -> int + + + Load database from the memory. + @param mem: the buffer + @param ea: start linear addresses + @param fpos: position in the input file the data is taken from. + if == -1, then no file position correspond to the data. + @return: + - Returns zero if the passed buffer was not a string + - Otherwise 1 is returned + +Help on class plugin_info_t in module ida_loader: + +class plugin_info_t(builtins.object) + | Proxy of C++ plugin_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> plugin_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_plugin_info_t(...) + | delete_plugin_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | arg + | plugin_info_t_arg_get(self) -> size_t + | + | comment + | plugin_info_t_comment_get(self) -> char * + | + | dllmem + | plugin_info_t_dllmem_get(self) -> idadll_t * + | + | entry + | plugin_info_t_entry_get(self) -> plugin_t * + | + | flags + | plugin_info_t_flags_get(self) -> int + | + | hotkey + | plugin_info_t_hotkey_get(self) -> ushort + | + | name + | plugin_info_t_name_get(self) -> char * + | + | next + | plugin_info_t_next_get(self) -> plugin_info_t + | + | org_hotkey + | plugin_info_t_org_hotkey_get(self) -> ushort + | + | org_name + | plugin_info_t_org_name_get(self) -> char * + | + | path + | plugin_info_t_path_get(self) -> char * + | + | thisown + | The membership flag + +Help on function process_archive in module ida_loader: + +process_archive(*args) -> 'qstring *' + process_archive(temp_file, li, module_name, neflags, defmember, loader) -> str + + + Calls 'loader_t::process_archive()' For parameters and return value + description look at 'loader_t::process_archive()' . Additional + parameter: + + @param temp_file (C++: qstring *) + @param li (C++: linput_t *) + @param module_name (C++: qstring *) + @param neflags (C++: ushort *) + @param defmember (C++: const char *) + @param loader: pointer to load_info_t structure. (C++: const + load_info_t *) + +Help on class qvector_snapshotvec_t in module ida_loader: + +class qvector_snapshotvec_t(builtins.object) + | Proxy of C++ qvector< snapshot_t * > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'snapshot_t *const &' + | __getitem__(self, i) -> snapshot_t + | + | __init__(self, *args) + | __init__(self) -> qvector_snapshotvec_t + | __init__(self, x) -> qvector_snapshotvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_qvector_snapshotvec_t(...) + | delete_qvector_snapshotvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'snapshot_t *const &' + | at(self, _idx) -> snapshot_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< snapshot_t * >::const_iterator' + | begin(self) -> qvector< snapshot_t * >::iterator + | begin(self) -> qvector< snapshot_t * >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< snapshot_t * >::const_iterator' + | end(self) -> qvector< snapshot_t * >::iterator + | end(self) -> qvector< snapshot_t * >::const_iterator + | + | erase(self, *args) -> 'qvector< snapshot_t * >::iterator' + | erase(self, it) -> qvector< snapshot_t * >::iterator + | erase(self, first, last) -> qvector< snapshot_t * >::iterator + | + | extract(self, *args) -> 'snapshot_t **' + | extract(self) -> snapshot_t ** + | + | find(self, *args) -> 'qvector< snapshot_t * >::const_iterator' + | find(self, x) -> qvector< snapshot_t * >::iterator + | find(self, x) -> qvector< snapshot_t * >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< snapshot_t * >::iterator' + | insert(self, it, x) -> qvector< snapshot_t * >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'snapshot_t *&' + | push_back(self, x) + | push_back(self) -> snapshot_t *& + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function reload_file in module ida_loader: + +reload_file(*args) -> 'bool' + reload_file(file, is_remote) -> bool + + + Reload the input file. This function reloads the byte values from the + input file. It doesn't modify the segmentation, names, comments, etc. + + @param file: name of the input file. if file == NULL then returns: + 1: can reload the input file 0: can't reload the input + file (C++: const char *) + @param is_remote: is the file located on a remote computer with the + debugger server? (C++: bool) + @return: success + +Help on function run_plugin in module ida_loader: + +run_plugin(*args) -> 'bool' + run_plugin(plg, arg) -> bool + + + Runs a plugin + @param plg: A plugin object (returned by load_plugin()) + @return: Boolean + +Help on function save_database in module ida_loader: + +save_database(*args) -> 'bool' + save_database(outfile, flags, root=None, attr=None) -> bool + + + Save current database using a new file name.when both root and attr + are not NULL then the snapshot attributes will be updated, otherwise + the snapshot attributes will be inherited from the current database. + + @param outfile: output database file name (C++: const char *) + @param flags: Database flags (C++: uint32) + @param root: optional: snapshot tree root. (C++: const snapshot_t *) + @param attr: optional: snapshot attributes (C++: const snapshot_t *) + @return: success + +Help on function set_database_flag in module ida_loader: + +set_database_flag(*args) -> 'void' + set_database_flag(dbfl, cnd=True) + + + Set or clear database flag + + @param dbfl: flag Database flags (C++: uint32) + @param cnd: set if true or clear flag otherwise (C++: bool) + +Help on function set_path in module ida_loader: + +set_path(*args) -> 'void' + set_path(pt, path) + + + Set the file path + + @param pt: file path type Types of the file pathes (C++: path_type_t) + @param path: new file path, use NULL or empty string to clear the file + path (C++: const char *) + +Help on class snapshot_t in module ida_loader: + +class snapshot_t(builtins.object) + | Proxy of C++ snapshot_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> snapshot_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_snapshot_t(...) + | delete_snapshot_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | children + | snapshot_t_children_get(self) -> qvector_snapshotvec_t + | + | desc + | snapshot_t_desc_get(self) -> char [128] + | + | filename + | snapshot_t_filename_get(self) -> char [QMAXPATH] + | + | flags + | snapshot_t_flags_get(self) -> uint16 + | + | id + | snapshot_t_id_get(self) -> qtime64_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +=== ida_loader EPYDOC INJECTIONS === +ida_loader.ACCEPT_ARCHIVE +""" +Specify that a file format is served by archive loader See +'loader_t::accept_file' +""" + +ida_loader.ACCEPT_CONTINUE +""" +Specify that the function must be called another time See +'loader_t::accept_file' +""" + +ida_loader.ACCEPT_FIRST +""" +Specify that a file format should be place first in "load file" dialog +box. See 'loader_t::accept_file' +""" + +ida_loader.DBFL_BAK +""" +create backup file (if !DBFL_KILL) +""" + +ida_loader.DBFL_COMP +""" +collect garbage +""" + +ida_loader.DBFL_KILL +""" +delete unpacked database +""" + +ida_loader.DBFL_TEMP +""" +temporary database +""" + +ida_loader.FILEREG_NOTPATCHABLE +""" +form in the file. + +the data is kept in some encoded +""" + +ida_loader.FILEREG_PATCHABLE +""" +means that the input file may be patched (i.e. no compression, no +iterated data, etc) +""" + +ida_loader.GENFLG_ASMINC +""" + 'OFILE_ASM' , 'OFILE_LST' : gen information only about types +""" + +ida_loader.GENFLG_ASMTYPE +""" + 'OFILE_ASM' , 'OFILE_LST' : gen information about types too +""" + +ida_loader.GENFLG_GENHTML +""" + 'OFILE_ASM' , 'OFILE_LST' : generate html ( 'ui_genfile_callback' +will be used) +""" + +ida_loader.GENFLG_IDCTYPE +""" + 'OFILE_IDC' : gen only information about types +""" + +ida_loader.GENFLG_MAPDMNG +""" + 'OFILE_MAP' : demangle names +""" + +ida_loader.GENFLG_MAPLOC +""" + 'OFILE_MAP' : include local names +""" + +ida_loader.GENFLG_MAPNAME +""" + 'OFILE_MAP' : include dummy names +""" + +ida_loader.GENFLG_MAPSEG +""" + 'OFILE_MAP' : generate map of segments +""" + +ida_loader.LDRF_RELOAD +""" +loader recognizes 'NEF_RELOAD' flag +""" + +ida_loader.LDRF_REQ_PROC +""" +Requires a processor to be set. if this bit is not set, load_file() +must call set_processor_type(..., SETPROC_LOADER) +""" + +ida_loader.MAX_DATABASE_DESCRIPTION +""" +Maximum database snapshot description length. +""" + +ida_loader.NEF_CODE +""" +load as a code segment + +for 'load_binary_file()' : +""" + +ida_loader.NEF_FILL +""" +Fill segment gaps. +""" + +ida_loader.NEF_FIRST +""" +into the database. + +This is the first file loaded +""" + +ida_loader.NEF_FLAT +""" +Autocreate FLAT group (PE) +""" + +ida_loader.NEF_IMPS +""" +Create import segment. +""" + +ida_loader.NEF_LALL +""" +Load all segments without questions. +""" + +ida_loader.NEF_LOPT +""" +Display additional loader options dialog. +""" + +ida_loader.NEF_MAN +""" +Manual load. +""" + +ida_loader.NEF_MINI +""" +Create mini database (do not copy segment bytes from the input file; +use only the file header metadata) +""" + +ida_loader.NEF_NAME +""" +Rename entries. +""" + +ida_loader.NEF_RELOAD +""" +reload the file at the same place: - don't create segmentsdon't create +fixup infodon't import segmentsetc load only the bytes into the base. +a loader should have 'LDRF_RELOAD' bit set +""" + +ida_loader.NEF_RSCS +""" +Load resources. +""" + +ida_loader.NEF_SEGS +""" +Create segments. +""" + +ida_loader.PLUGIN_DLL +""" +Pattern to find plugin files. +""" + +ida_loader.SSF_AUTOMATIC +""" +automatic snapshot +""" + +ida_loader.SSUF_DESC +""" +Update the description. +""" + +ida_loader.SSUF_FLAGS +""" +Update the flags. +""" + +ida_loader.SSUF_PATH +""" +Update the path. +""" +=== ida_loader EPYDOC INJECTIONS END === +Help on class bookmarks_t in module ida_moves: + +class bookmarks_t(builtins.object) + | Proxy of C++ bookmarks_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | erase(*args) -> 'bool' + | erase(e, index, ud) -> bool + | + | find_index(*args) -> 'uint32' + | find_index(e, ud) -> uint32 + | + | get(*args) -> 'bool' + | get(out_entry, out_desc, index, ud) -> bool + | + | get_desc(*args) -> 'qstring *' + | get_desc(e, index, ud) -> bool + | + | mark(*args) -> 'uint32' + | mark(e, index, title, desc, ud) -> uint32 + | + | size(*args) -> 'uint32' + | size(e, ud) -> uint32 + | + | ---------------------------------------------------------------------- + | 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 + +Help on function bookmarks_t_erase in module ida_moves: + +bookmarks_t_erase(*args) -> 'bool' + bookmarks_t_erase(e, index, ud) -> bool + +Help on function bookmarks_t_find_index in module ida_moves: + +bookmarks_t_find_index(*args) -> 'uint32' + bookmarks_t_find_index(e, ud) -> uint32 + +Help on function bookmarks_t_get in module ida_moves: + +bookmarks_t_get(*args) -> 'bool' + bookmarks_t_get(out_entry, out_desc, index, ud) -> bool + +Help on function bookmarks_t_get_desc in module ida_moves: + +bookmarks_t_get_desc(*args) -> 'qstring *' + bookmarks_t_get_desc(e, index, ud) -> str + +Help on function bookmarks_t_mark in module ida_moves: + +bookmarks_t_mark(*args) -> 'uint32' + bookmarks_t_mark(e, index, title, desc, ud) -> uint32 + +Help on function bookmarks_t_size in module ida_moves: + +bookmarks_t_size(*args) -> 'uint32' + bookmarks_t_size(e, ud) -> uint32 + +Help on class graph_location_info_t in module ida_moves: + +class graph_location_info_t(builtins.object) + | Proxy of C++ graph_location_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> graph_location_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_graph_location_info_t(...) + | delete_graph_location_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | orgx + | graph_location_info_t_orgx_get(self) -> double + | + | orgy + | graph_location_info_t_orgy_get(self) -> double + | + | thisown + | The membership flag + | + | zoom + | graph_location_info_t_zoom_get(self) -> double + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class lochist_entry_t in module ida_moves: + +class lochist_entry_t(builtins.object) + | Proxy of C++ lochist_entry_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> lochist_entry_t + | __init__(self, p, r) -> lochist_entry_t + | __init__(self, other) -> lochist_entry_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lochist_entry_t(...) + | delete_lochist_entry_t(self) + | + | acquire_place(self, *args) -> 'void' + | acquire_place(self, in_p) + | + | is_valid(self, *args) -> 'bool' + | is_valid(self) -> bool + | + | place(self, *args) -> 'place_t *' + | place(self) -> place_t + | place(self) -> place_t + | + | renderer_info(self, *args) -> 'renderer_info_t &' + | renderer_info(self) -> renderer_info_t + | renderer_info(self) -> renderer_info_t + | + | set_place(self, *args) -> 'void' + | set_place(self, p) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | plce + | lochist_entry_t_plce_get(self) -> place_t + | + | rinfo + | lochist_entry_t_rinfo_get(self) -> renderer_info_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class lochist_t in module ida_moves: + +class lochist_t(builtins.object) + | Proxy of C++ lochist_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> lochist_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lochist_t(...) + | delete_lochist_t(self) + | + | back(self, *args) -> 'bool' + | back(self, cnt, try_to_unhide) -> bool + | + | clear(self, *args) -> 'void' + | clear(self) + | + | current_index(self, *args) -> 'uint32' + | current_index(self) -> uint32 + | + | fwd(self, *args) -> 'bool' + | fwd(self, cnt, try_to_unhide) -> bool + | + | get(self, *args) -> 'bool' + | get(self, out, index) -> bool + | + | get_current(self, *args) -> 'lochist_entry_t const &' + | get_current(self) -> lochist_entry_t + | + | get_place_id(self, *args) -> 'int' + | get_place_id(self) -> int + | + | get_template_place(self, *args) -> 'place_t const *' + | get_template_place(self) -> place_t + | + | init(self, *args) -> 'bool' + | init(self, stream_name, _defpos, _ud, _flags) -> bool + | + | is_history_enabled(self, *args) -> 'bool' + | is_history_enabled(self) -> bool + | + | jump(self, *args) -> 'void' + | jump(self, try_to_unhide, e) + | + | netcode(self, *args) -> 'nodeidx_t' + | netcode(self) -> nodeidx_t + | + | save(self, *args) -> 'void' + | save(self) + | + | seek(self, *args) -> 'bool' + | seek(self, index, try_to_unhide) -> bool + | + | set(self, *args) -> 'void' + | set(self, index, e) + | + | set_current(self, *args) -> 'void' + | set_current(self, e) + | + | size(self, *args) -> 'uint32' + | size(self) -> uint32 + | + | ---------------------------------------------------------------------- + | 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 + +Help on class renderer_info_pos_t in module ida_moves: + +class renderer_info_pos_t(builtins.object) + | Proxy of C++ renderer_info_pos_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_info_pos_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_renderer_info_pos_t(...) + | delete_renderer_info_pos_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cx + | renderer_info_pos_t_cx_get(self) -> short + | + | cy + | renderer_info_pos_t_cy_get(self) -> short + | + | node + | renderer_info_pos_t_node_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class renderer_info_t in module ida_moves: + +class renderer_info_t(builtins.object) + | Proxy of C++ renderer_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> renderer_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_renderer_info_t(...) + | delete_renderer_info_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | gli + | renderer_info_t_gli_get(self) -> graph_location_info_t + | + | pos + | renderer_info_t_pos_get(self) -> renderer_info_pos_t + | + | rtype + | renderer_info_t_rtype_get(self) -> tcc_renderer_type_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class segm_move_info_t in module ida_moves: + +class segm_move_info_t(builtins.object) + | Proxy of C++ segm_move_info_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _from=0, _to=0, _sz=0) -> segm_move_info_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_segm_move_info_t(...) + | delete_segm_move_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _from + | segm_move_info_t__from_get(self) -> ea_t + | + | size + | segm_move_info_t_size_get(self) -> size_t + | + | thisown + | The membership flag + | + | to + | segm_move_info_t_to_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class segm_move_info_vec_t in module ida_moves: + +class segm_move_info_vec_t(builtins.object) + | Proxy of C++ qvector< segm_move_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'segm_move_info_t const &' + | __getitem__(self, i) -> segm_move_info_t + | + | __init__(self, *args) + | __init__(self) -> segm_move_info_vec_t + | __init__(self, x) -> segm_move_info_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_segm_move_info_vec_t(...) + | delete_segm_move_info_vec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'segm_move_info_t const &' + | at(self, _idx) -> segm_move_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< segm_move_info_t >::const_iterator' + | begin(self) -> segm_move_info_t + | begin(self) -> segm_move_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< segm_move_info_t >::const_iterator' + | end(self) -> segm_move_info_t + | end(self) -> segm_move_info_t + | + | erase(self, *args) -> 'qvector< segm_move_info_t >::iterator' + | erase(self, it) -> segm_move_info_t + | erase(self, first, last) -> segm_move_info_t + | + | extract(self, *args) -> 'segm_move_info_t *' + | extract(self) -> segm_move_info_t + | + | find(self, *args) -> 'qvector< segm_move_info_t >::const_iterator' + | find(self, x) -> segm_move_info_t + | find(self, x) -> segm_move_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=segm_move_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< segm_move_info_t >::iterator' + | insert(self, it, x) -> segm_move_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'segm_move_info_t &' + | push_back(self, x) + | push_back(self) -> segm_move_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class segm_move_infos_t in module ida_moves: + +class segm_move_infos_t(segm_move_info_vec_t) + | Proxy of C++ segm_move_infos_t class. + | + | Method resolution order: + | segm_move_infos_t + | segm_move_info_vec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> segm_move_infos_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_segm_move_infos_t(...) + | delete_segm_move_infos_t(self) + | + | find(self, *args) -> 'segm_move_info_t const *' + | find(self, ea) -> segm_move_info_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from segm_move_info_vec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'segm_move_info_t const &' + | __getitem__(self, i) -> segm_move_info_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'segm_move_info_t const &' + | at(self, _idx) -> segm_move_info_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< segm_move_info_t >::const_iterator' + | begin(self) -> segm_move_info_t + | begin(self) -> segm_move_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< segm_move_info_t >::const_iterator' + | end(self) -> segm_move_info_t + | end(self) -> segm_move_info_t + | + | erase(self, *args) -> 'qvector< segm_move_info_t >::iterator' + | erase(self, it) -> segm_move_info_t + | erase(self, first, last) -> segm_move_info_t + | + | extract(self, *args) -> 'segm_move_info_t *' + | extract(self) -> segm_move_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=segm_move_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< segm_move_info_t >::iterator' + | insert(self, it, x) -> segm_move_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'segm_move_info_t &' + | push_back(self, x) + | push_back(self) -> segm_move_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from segm_move_info_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from segm_move_info_vec_t: + | + | __hash__ = None + +Help on function get_switch_info in module ida_nalt: + +get_switch_info(*args) -> 'ssize_t' + get_switch_info(out, ea) -> ssize_t + +Help on function add_encoding in module ida_nalt: + +add_encoding(*args) -> 'int' + add_encoding(encoding) -> int + + + Add a new encoding (e.g. "UTF-8"). + + @param encoding (C++: const char *) + @return: its index (1-based) if it's already in the list, return its + index + +Help on class array_parameters_t in module ida_nalt: + +class array_parameters_t(builtins.object) + | Proxy of C++ array_parameters_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> array_parameters_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_array_parameters_t(...) + | delete_array_parameters_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | alignment + | array_parameters_t_alignment_get(self) -> int32 + | + | flags + | array_parameters_t_flags_get(self) -> int32 + | + | lineitems + | array_parameters_t_lineitems_get(self) -> int32 + | + | thisown + | The membership flag + +Help on function clr__bnot0 in module ida_nalt: + +clr__bnot0(*args) -> 'void' + clr__bnot0(ea) + +Help on function clr__bnot1 in module ida_nalt: + +clr__bnot1(*args) -> 'void' + clr__bnot1(ea) + +Help on function clr__invsign0 in module ida_nalt: + +clr__invsign0(*args) -> 'void' + clr__invsign0(ea) + +Help on function clr__invsign1 in module ida_nalt: + +clr__invsign1(*args) -> 'void' + clr__invsign1(ea) + +Help on function clr_abits in module ida_nalt: + +clr_abits(*args) -> 'void' + clr_abits(ea, bits) + +Help on function clr_align_flow in module ida_nalt: + +clr_align_flow(*args) -> 'void' + clr_align_flow(ea) + +Help on function clr_colored_item in module ida_nalt: + +clr_colored_item(*args) -> 'void' + clr_colored_item(ea) + +Help on function clr_fixed_spd in module ida_nalt: + +clr_fixed_spd(*args) -> 'void' + clr_fixed_spd(ea) + +Help on function clr_has_lname in module ida_nalt: + +clr_has_lname(*args) -> 'void' + clr_has_lname(ea) + +Help on function clr_has_ti in module ida_nalt: + +clr_has_ti(*args) -> 'void' + clr_has_ti(ea) + +Help on function clr_has_ti0 in module ida_nalt: + +clr_has_ti0(*args) -> 'void' + clr_has_ti0(ea) + +Help on function clr_has_ti1 in module ida_nalt: + +clr_has_ti1(*args) -> 'void' + clr_has_ti1(ea) + +Help on function clr_libitem in module ida_nalt: + +clr_libitem(*args) -> 'void' + clr_libitem(ea) + +Help on function clr_lzero0 in module ida_nalt: + +clr_lzero0(*args) -> 'void' + clr_lzero0(ea) + +Help on function clr_lzero1 in module ida_nalt: + +clr_lzero1(*args) -> 'void' + clr_lzero1(ea) + +Help on function clr_noret in module ida_nalt: + +clr_noret(*args) -> 'void' + clr_noret(ea) + +Help on function clr_notcode in module ida_nalt: + +clr_notcode(*args) -> 'void' + clr_notcode(ea) + + + Clear not-code mark. + + + @param ea (C++: ea_t) + +Help on function clr_notproc in module ida_nalt: + +clr_notproc(*args) -> 'void' + clr_notproc(ea) + +Help on function clr_retfp in module ida_nalt: + +clr_retfp(*args) -> 'void' + clr_retfp(ea) + +Help on function clr_terse_struc in module ida_nalt: + +clr_terse_struc(*args) -> 'void' + clr_terse_struc(ea) + +Help on function clr_tilcmt in module ida_nalt: + +clr_tilcmt(*args) -> 'void' + clr_tilcmt(ea) + +Help on function clr_usemodsp in module ida_nalt: + +clr_usemodsp(*args) -> 'void' + clr_usemodsp(ea) + +Help on function clr_usersp in module ida_nalt: + +clr_usersp(*args) -> 'void' + clr_usersp(ea) + +Help on function clr_userti in module ida_nalt: + +clr_userti(*args) -> 'void' + clr_userti(ea) + +Help on function clr_zstroff in module ida_nalt: + +clr_zstroff(*args) -> 'void' + clr_zstroff(ea) + +Help on class custom_data_type_ids_fids_array in module ida_nalt: + +class custom_data_type_ids_fids_array(builtins.object) + | Proxy of C++ wrapped_array_t< int16,8 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'short const &' + | __getitem__(self, i) -> short const & + | + | __init__(self, *args) + | __init__(self, data) -> custom_data_type_ids_fids_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_custom_data_type_ids_fids_array(...) + | delete_custom_data_type_ids_fids_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | custom_data_type_ids_fids_array_data_get(self) -> short (&)[8] + | + | thisown + | The membership flag + +Help on class custom_data_type_ids_t in module ida_nalt: + +class custom_data_type_ids_t(builtins.object) + | Proxy of C++ custom_data_type_ids_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> custom_data_type_ids_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_custom_data_type_ids_t(...) + | delete_custom_data_type_ids_t(self) + | + | _custom_data_type_ids_t__getFids = __getFids(self, *args) -> 'wrapped_array_t< int16,8 >' + | __getFids(self) -> custom_data_type_ids_fids_array + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | dtid + | custom_data_type_ids_t_dtid_get(self) -> int16 + | + | fids + | __getFids(self) -> custom_data_type_ids_fids_array + | + | thisown + | The membership flag + +Help on function dbg_get_input_path in module ida_nalt: + +dbg_get_input_path(*args) -> 'size_t' + dbg_get_input_path() -> str + + + Get debugger input file name/path (see 'LFLG_DBG_NOPATH' ) + +Help on function del_absbase in module ida_nalt: + +del_absbase(*args) -> 'void' + del_absbase(ea) + +Help on function del_aflags in module ida_nalt: + +del_aflags(*args) -> 'void' + del_aflags(ea) + +Help on function del_alignment in module ida_nalt: + +del_alignment(*args) -> 'void' + del_alignment(ea) + +Help on function del_array_parameters in module ida_nalt: + +del_array_parameters(*args) -> 'void' + del_array_parameters(ea) + +Help on function del_custom_data_type_ids in module ida_nalt: + +del_custom_data_type_ids(*args) -> 'void' + del_custom_data_type_ids(ea) + +Help on function del_encoding in module ida_nalt: + +del_encoding(*args) -> 'bool' + del_encoding(idx) -> bool + + + Delete an encoding (1-based) + + + @param idx (C++: int) + +Help on function del_ind_purged in module ida_nalt: + +del_ind_purged(*args) -> 'void' + del_ind_purged(ea) + +Help on function del_item_color in module ida_nalt: + +del_item_color(*args) -> 'bool' + del_item_color(ea) -> bool + +Help on function del_op_tinfo in module ida_nalt: + +del_op_tinfo(*args) -> 'void' + del_op_tinfo(ea, n) + +Help on function del_refinfo in module ida_nalt: + +del_refinfo(*args) -> 'bool' + del_refinfo(ea, n) -> bool + +Help on function del_source_linnum in module ida_nalt: + +del_source_linnum(*args) -> 'void' + del_source_linnum(ea) + +Help on function del_str_type in module ida_nalt: + +del_str_type(*args) -> 'void' + del_str_type(ea) + +Help on function del_switch_info in module ida_nalt: + +del_switch_info(*args) -> 'void' + del_switch_info(ea) + +Help on function del_switch_parent in module ida_nalt: + +del_switch_parent(*args) -> 'void' + del_switch_parent(ea) + +Help on function del_tinfo in module ida_nalt: + +del_tinfo(*args) -> 'void' + del_tinfo(ea) + +Help on function delete_imports in module ida_nalt: + +delete_imports(*args) -> 'void' + delete_imports() + + + Delete all imported modules information. + +Help on function ea2node in module ida_nalt: + +ea2node(*args) -> 'nodeidx_t' + ea2node(ea) -> nodeidx_t + + + Get netnode for the specified address. + + + @param ea (C++: ea_t) + +Help on function encoding_from_strtype in module ida_nalt: + +encoding_from_strtype(*args) -> 'char const *' + encoding_from_strtype(strtype) -> char const * + + + Get encoding name for this strtype. + + + @param strtype (C++: int32) + +Help on class enum_const_t in module ida_nalt: + +class enum_const_t(builtins.object) + | Proxy of C++ enum_const_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> enum_const_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_enum_const_t(...) + | delete_enum_const_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | serial + | enum_const_t_serial_get(self) -> uchar + | + | thisown + | The membership flag + | + | tid + | enum_const_t_tid_get(self) -> tid_t + +Help on function enum_import_names in module ida_nalt: + +enum_import_names(*args) -> 'int' + enum_import_names(mod_index, py_cb) -> int + + + Enumerate imports from a specific module. + Please refer to ex_imports.py example. + + @param mod_index: The module index + @param callback: A callable object that will be invoked with an ea, name (could be None) and ordinal. + @return: 1-finished ok, -1 on error, otherwise callback return value (<=0) + +Help on function find_custom_refinfo in module ida_nalt: + +find_custom_refinfo(*args) -> 'int' + find_custom_refinfo(name) -> int + + + Get id of a custom refinfo type. + + + @param name (C++: const char *) + +Help on function get_abi_name in module ida_nalt: + +get_abi_name(*args) + +Help on function get_absbase in module ida_nalt: + +get_absbase(*args) -> 'ea_t' + get_absbase(ea) -> ea_t + +Help on function get_aflags in module ida_nalt: + +get_aflags(*args) -> 'uint32' + get_aflags(ea) -> uint32 + +Help on function get_alignment in module ida_nalt: + +get_alignment(*args) -> 'uint32' + get_alignment(ea) -> uint32 + +Help on function get_archive_path in module ida_nalt: + +get_archive_path(*args) -> 'qstring *' + get_archive_path() -> str + + + Get archive file path from which input file was extracted. + +Help on function get_array_parameters in module ida_nalt: + +get_array_parameters(*args) -> 'ssize_t' + get_array_parameters(out, ea) -> ssize_t + +Help on function get_asm_inc_file in module ida_nalt: + +get_asm_inc_file(*args) -> 'qstring *' + get_asm_inc_file() -> str + + + Get name of the include file. + +Help on function get_custom_data_type_ids in module ida_nalt: + +get_custom_data_type_ids(*args) -> 'int' + get_custom_data_type_ids(cdis, ea) -> int + +Help on function get_custom_refinfo in module ida_nalt: + +get_custom_refinfo(*args) -> 'custom_refinfo_handler_t const *' + get_custom_refinfo(crid) -> custom_refinfo_handler_t const * + + + Get definition of a registered custom refinfo type. + + + @param crid (C++: int) + +Help on function get_default_encoding_idx in module ida_nalt: + +get_default_encoding_idx(*args) -> 'int' + get_default_encoding_idx(bpu) -> int + + + Get default encoding index for a specific string type. + + @param bpu: the amount of bytes per unit (e.g., 1 for ASCII, CP1252, + UTF-8..., 2 for UTF-16, 4 for UTF-32) 0 means no specific + encoding is set - byte values are displayed without + conversion. (C++: int) + +Help on function get_encoding_bpu in module ida_nalt: + +get_encoding_bpu(*args) -> 'int' + get_encoding_bpu(idx) -> int + + + Get the amount of bytes per unit (e.g., 2 for UTF-16, 4 for UTF-32) + for the encoding with the given index. + + @param idx: the encoding index (C++: int) + @return: the number of bytes per units (1/2/4); -1 means error + +Help on function get_encoding_name in module ida_nalt: + +get_encoding_name(*args) -> 'char const *' + get_encoding_name(idx) -> char const * + + + Get encoding name for specific index (1-based). + + @param idx (C++: int) + @return: NULL if idx is out of bounds + +Help on function get_encoding_qty in module ida_nalt: + +get_encoding_qty(*args) -> 'int' + get_encoding_qty() -> int + + + Get total number of encodings (counted from 0) + +Help on function get_gotea in module ida_nalt: + +get_gotea(*args) -> 'ea_t' + get_gotea() -> ea_t + +Help on function get_ids_modnode in module ida_nalt: + +get_ids_modnode(*args) -> 'netnode' + get_ids_modnode() -> netnode + + + Get ids modnode. + +Help on function get_imagebase in module ida_nalt: + +get_imagebase(*args) -> 'ea_t' + get_imagebase() -> ea_t + + + Get image base address. + +Help on function get_import_module_name in module ida_nalt: + +get_import_module_name(*args) -> 'PyObject *' + get_import_module_name(mod_index) -> PyObject * + + + Returns the name of an imported module given its index + @return: None or the module name + +Help on function get_import_module_qty in module ida_nalt: + +get_import_module_qty(*args) -> 'uint' + get_import_module_qty() -> uint + + + Get number of import modules. + +Help on function get_ind_purged in module ida_nalt: + +get_ind_purged(*args) -> 'ea_t' + get_ind_purged(ea) -> ea_t + +Help on function get_input_file_path in module ida_nalt: + +get_input_file_path(*args) -> 'size_t' + get_input_file_path() -> str + + + Get full path of the input file. + +Help on function get_item_color in module ida_nalt: + +get_item_color(*args) -> 'bgcolor_t' + get_item_color(ea) -> bgcolor_t + +Help on function get_op_tinfo in module ida_nalt: + +get_op_tinfo(*args) -> 'bool' + get_op_tinfo(tif, ea, n) -> bool + +Help on function get_outfile_encoding_idx in module ida_nalt: + +get_outfile_encoding_idx(*args) -> 'int' + get_outfile_encoding_idx() -> int + + + Get the index of the encoding used when producing files 0 means no + that the IDB's default 1 byte-per-unit encoding is used + +Help on function get_refinfo in module ida_nalt: + +get_refinfo(*args) -> 'bool' + get_refinfo(ri, ea, n) -> bool + +Help on function get_reftype_by_size in module ida_nalt: + +get_reftype_by_size(*args) -> 'reftype_t' + get_reftype_by_size(size) -> reftype_t + + + Get REF_... constant from size Supported sizes: 1,2,4,8,16 For other + sizes returns reftype_t(-1) + + @param size (C++: size_t) + +Help on function get_root_filename in module ida_nalt: + +get_root_filename(*args) -> 'size_t' + get_root_filename() -> str + + + Get file name only of the input file. + +Help on function get_source_linnum in module ida_nalt: + +get_source_linnum(*args) -> 'uval_t' + get_source_linnum(ea) -> uval_t + +Help on function get_str_encoding_idx in module ida_nalt: + +get_str_encoding_idx(*args) -> 'uchar' + get_str_encoding_idx(strtype) -> uchar + + + Get index of the string encoding for this string. + + + @param strtype (C++: int32) + +Help on function get_str_term1 in module ida_nalt: + +get_str_term1(*args) -> 'char' + get_str_term1(strtype) -> char + +Help on function get_str_term2 in module ida_nalt: + +get_str_term2(*args) -> 'char' + get_str_term2(strtype) -> char + +Help on function get_str_type in module ida_nalt: + +get_str_type(*args) -> 'uint32' + get_str_type(ea) -> uint32 + +Help on function get_str_type_code in module ida_nalt: + +get_str_type_code(*args) -> 'uchar' + get_str_type_code(strtype) -> uchar + +Help on function get_strtype_bpu in module ida_nalt: + +get_strtype_bpu(*args) -> 'int' + get_strtype_bpu(strtype) -> int + +Help on function get_switch_info in module ida_nalt: + +get_switch_info(*args) + +Help on function get_switch_parent in module ida_nalt: + +get_switch_parent(*args) -> 'ea_t' + get_switch_parent(ea) -> ea_t + +Help on function get_tinfo in module ida_nalt: + +get_tinfo(*args) -> 'bool' + get_tinfo(tif, ea) -> bool + +Help on function getnode in module ida_nalt: + +getnode(*args) -> 'netnode' + getnode(ea) -> netnode + +Help on function has_lname in module ida_nalt: + +has_lname(*args) -> 'bool' + has_lname(ea) -> bool + +Help on function has_ti in module ida_nalt: + +has_ti(*args) -> 'bool' + has_ti(ea) -> bool + +Help on function has_ti0 in module ida_nalt: + +has_ti0(*args) -> 'bool' + has_ti0(ea) -> bool + +Help on function has_ti1 in module ida_nalt: + +has_ti1(*args) -> 'bool' + has_ti1(ea) -> bool + +Help on function hide_border in module ida_nalt: + +hide_border(*args) -> 'void' + hide_border(ea) + +Help on function hide_item in module ida_nalt: + +hide_item(*args) -> 'void' + hide_item(ea) + +Help on function is__bnot0 in module ida_nalt: + +is__bnot0(*args) -> 'bool' + is__bnot0(ea) -> bool + +Help on function is__bnot1 in module ida_nalt: + +is__bnot1(*args) -> 'bool' + is__bnot1(ea) -> bool + +Help on function is__invsign0 in module ida_nalt: + +is__invsign0(*args) -> 'bool' + is__invsign0(ea) -> bool + +Help on function is__invsign1 in module ida_nalt: + +is__invsign1(*args) -> 'bool' + is__invsign1(ea) -> bool + +Help on function is_align_flow in module ida_nalt: + +is_align_flow(*args) -> 'bool' + is_align_flow(ea) -> bool + +Help on function is_colored_item in module ida_nalt: + +is_colored_item(*args) -> 'bool' + is_colored_item(ea) -> bool + +Help on function is_finally_visible_item in module ida_nalt: + +is_finally_visible_item(*args) -> 'bool' + is_finally_visible_item(ea) -> bool + + + Is instruction visible? + + + @param ea (C++: ea_t) + +Help on function is_fixed_spd in module ida_nalt: + +is_fixed_spd(*args) -> 'bool' + is_fixed_spd(ea) -> bool + +Help on function is_hidden_border in module ida_nalt: + +is_hidden_border(*args) -> 'bool' + is_hidden_border(ea) -> bool + +Help on function is_hidden_item in module ida_nalt: + +is_hidden_item(*args) -> 'bool' + is_hidden_item(ea) -> bool + +Help on function is_libitem in module ida_nalt: + +is_libitem(*args) -> 'bool' + is_libitem(ea) -> bool + +Help on function is_lzero0 in module ida_nalt: + +is_lzero0(*args) -> 'bool' + is_lzero0(ea) -> bool + +Help on function is_lzero1 in module ida_nalt: + +is_lzero1(*args) -> 'bool' + is_lzero1(ea) -> bool + +Help on function is_noret in module ida_nalt: + +is_noret(*args) -> 'bool' + is_noret(ea) -> bool + +Help on function is_notcode in module ida_nalt: + +is_notcode(*args) -> 'bool' + is_notcode(ea) -> bool + + + Is the address marked as not-code? + + + @param ea (C++: ea_t) + +Help on function is_notproc in module ida_nalt: + +is_notproc(*args) -> 'bool' + is_notproc(ea) -> bool + +Help on function is_pascal in module ida_nalt: + +is_pascal(*args) -> 'bool' + is_pascal(strtype) -> bool + +Help on function is_reftype_target_optional in module ida_nalt: + +is_reftype_target_optional(*args) -> 'bool' + is_reftype_target_optional(type) -> bool + + + Can the target be calculated using operand value? + + + @param type (C++: reftype_t) + +Help on function is_retfp in module ida_nalt: + +is_retfp(*args) -> 'bool' + is_retfp(ea) -> bool + +Help on function is_terse_struc in module ida_nalt: + +is_terse_struc(*args) -> 'bool' + is_terse_struc(ea) -> bool + +Help on function is_tilcmt in module ida_nalt: + +is_tilcmt(*args) -> 'bool' + is_tilcmt(ea) -> bool + +Help on function is_usersp in module ida_nalt: + +is_usersp(*args) -> 'bool' + is_usersp(ea) -> bool + +Help on function is_userti in module ida_nalt: + +is_userti(*args) -> 'bool' + is_userti(ea) -> bool + +Help on function is_visible_item in module ida_nalt: + +is_visible_item(*args) -> 'bool' + is_visible_item(ea) -> bool + + + Test visibility of item at given ea. + + + @param ea (C++: ea_t) + +Help on function is_zstroff in module ida_nalt: + +is_zstroff(*args) -> 'bool' + is_zstroff(ea) -> bool + +Help on function node2ea in module ida_nalt: + +node2ea(*args) -> 'ea_t' + node2ea(ndx) -> ea_t + +Help on class opinfo_t in module ida_nalt: + +class opinfo_t(builtins.object) + | Proxy of C++ opinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> opinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_opinfo_t(...) + | delete_opinfo_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cd + | opinfo_t_cd_get(self) -> custom_data_type_ids_t + | + | ec + | opinfo_t_ec_get(self) -> enum_const_t + | + | path + | opinfo_t_path_get(self) -> strpath_t + | + | ri + | opinfo_t_ri_get(self) -> refinfo_t + | + | strtype + | opinfo_t_strtype_get(self) -> int32 + | + | thisown + | The membership flag + | + | tid + | opinfo_t_tid_get(self) -> tid_t + +Help on class printop_t in module ida_nalt: + +class printop_t(builtins.object) + | Proxy of C++ printop_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> printop_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_printop_t(...) + | delete_printop_t(self) + | + | get_ti(self, *args) -> 'opinfo_t const *' + | get_ti(self) -> opinfo_t + | + | is_aflags_initialized(self, *args) -> 'bool' + | is_aflags_initialized(self) -> bool + | + | is_ti_initialized(self, *args) -> 'bool' + | is_ti_initialized(self) -> bool + | + | set_aflags_initialized(self, *args) -> 'void' + | set_aflags_initialized(self, v=True) + | + | set_ti_initialized(self, *args) -> 'void' + | set_ti_initialized(self, v=True) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | aflags + | printop_t_aflags_get(self) -> flags_t + | + | features + | printop_t_features_get(self) -> uchar + | + | flags + | printop_t_flags_get(self) -> flags_t + | + | is_ti_valid + | is_ti_initialized(self) -> bool + | + | suspop + | printop_t_suspop_get(self) -> int + | + | thisown + | The membership flag + | + | ti + | printop_t_ti_get(self) -> opinfo_t + +Help on class refinfo_t in module ida_nalt: + +class refinfo_t(builtins.object) + | Proxy of C++ refinfo_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> refinfo_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_refinfo_t(...) + | delete_refinfo_t(self) + | + | init(self, *args) -> 'void' + | init(self, reft_and_flags, _base=0, _target=BADADDR, _tdelta=0) + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_pastend(self, *args) -> 'bool' + | is_pastend(self) -> bool + | + | is_rvaoff(self, *args) -> 'bool' + | is_rvaoff(self) -> bool + | + | is_signed(self, *args) -> 'bool' + | is_signed(self) -> bool + | + | is_subtract(self, *args) -> 'bool' + | is_subtract(self) -> bool + | + | is_target_optional(self, *args) -> 'bool' + | is_target_optional(self) -> bool + | + | no_base_xref(self, *args) -> 'bool' + | no_base_xref(self) -> bool + | + | set_type(self, *args) -> 'void' + | set_type(self, t) + | + | type(self, *args) -> 'reftype_t' + | type(self) -> reftype_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | refinfo_t_base_get(self) -> ea_t + | + | flags + | refinfo_t_flags_get(self) -> uint32 + | + | target + | refinfo_t_target_get(self) -> ea_t + | + | tdelta + | refinfo_t_tdelta_get(self) -> adiff_t + | + | thisown + | The membership flag + +Help on function rename_encoding in module ida_nalt: + +rename_encoding(*args) -> 'bool' + rename_encoding(idx, encoding) -> bool + + + Change name for an encoding (1-based) + + + @param idx (C++: int) + @param encoding (C++: const char *) + +Help on function retrieve_input_file_crc32 in module ida_nalt: + +retrieve_input_file_crc32(*args) -> 'uint32' + retrieve_input_file_crc32() -> uint32 + + + Get input file crc32 stored in the database. it can be used to check + that the input file has not been changed. + +Help on function retrieve_input_file_md5 in module ida_nalt: + +retrieve_input_file_md5(*args) -> 'uchar [ANY]' + retrieve_input_file_md5() -> str + + + Get input file md5. + +Help on function retrieve_input_file_sha256 in module ida_nalt: + +retrieve_input_file_sha256(*args) -> 'uchar [ANY]' + retrieve_input_file_sha256() -> str + + + Get input file sha256. + +Help on function retrieve_input_file_size in module ida_nalt: + +retrieve_input_file_size(*args) -> 'uint32' + retrieve_input_file_size() -> uint32 + + + Get size of input file in bytes. + +Help on function set__bnot0 in module ida_nalt: + +set__bnot0(*args) -> 'void' + set__bnot0(ea) + +Help on function set__bnot1 in module ida_nalt: + +set__bnot1(*args) -> 'void' + set__bnot1(ea) + +Help on function set__invsign0 in module ida_nalt: + +set__invsign0(*args) -> 'void' + set__invsign0(ea) + +Help on function set__invsign1 in module ida_nalt: + +set__invsign1(*args) -> 'void' + set__invsign1(ea) + +Help on function set_abits in module ida_nalt: + +set_abits(*args) -> 'void' + set_abits(ea, bits) + +Help on function set_absbase in module ida_nalt: + +set_absbase(*args) -> 'void' + set_absbase(ea, x) + +Help on function set_aflags in module ida_nalt: + +set_aflags(*args) -> 'void' + set_aflags(ea, flags) + +Help on function set_align_flow in module ida_nalt: + +set_align_flow(*args) -> 'void' + set_align_flow(ea) + +Help on function set_alignment in module ida_nalt: + +set_alignment(*args) -> 'void' + set_alignment(ea, x) + +Help on function set_archive_path in module ida_nalt: + +set_archive_path(*args) -> 'bool' + set_archive_path(file) -> bool + + + Set archive file path from which input file was extracted. + + + @param file (C++: const char *) + +Help on function set_array_parameters in module ida_nalt: + +set_array_parameters(*args) -> 'void' + set_array_parameters(ea, _in) + +Help on function set_asm_inc_file in module ida_nalt: + +set_asm_inc_file(*args) -> 'bool' + set_asm_inc_file(file) -> bool + + + Set name of the include file. + + + @param file (C++: const char *) + +Help on function set_colored_item in module ida_nalt: + +set_colored_item(*args) -> 'void' + set_colored_item(ea) + +Help on function set_custom_data_type_ids in module ida_nalt: + +set_custom_data_type_ids(*args) -> 'void' + set_custom_data_type_ids(ea, cdis) + +Help on function set_default_encoding_idx in module ida_nalt: + +set_default_encoding_idx(*args) -> 'bool' + set_default_encoding_idx(bpu, idx) -> bool + + + set default encoding for a string type + + @param bpu: the amount of bytes per unit (C++: int) + @param idx: the encoding index idx can be 0 to disable encoding + conversion (C++: int) + +Help on function set_fixed_spd in module ida_nalt: + +set_fixed_spd(*args) -> 'void' + set_fixed_spd(ea) + +Help on function set_gotea in module ida_nalt: + +set_gotea(*args) -> 'void' + set_gotea(gotea) + +Help on function set_has_lname in module ida_nalt: + +set_has_lname(*args) -> 'void' + set_has_lname(ea) + +Help on function set_has_ti in module ida_nalt: + +set_has_ti(*args) -> 'void' + set_has_ti(ea) + +Help on function set_has_ti0 in module ida_nalt: + +set_has_ti0(*args) -> 'void' + set_has_ti0(ea) + +Help on function set_has_ti1 in module ida_nalt: + +set_has_ti1(*args) -> 'void' + set_has_ti1(ea) + +Help on function set_ids_modnode in module ida_nalt: + +set_ids_modnode(*args) -> 'void' + set_ids_modnode(id) + + + Set ids modnode. + + + @param id (C++: netnode) + +Help on function set_imagebase in module ida_nalt: + +set_imagebase(*args) -> 'void' + set_imagebase(base) + + + Set image base address. + + + @param base (C++: ea_t) + +Help on function set_item_color in module ida_nalt: + +set_item_color(*args) -> 'void' + set_item_color(ea, color) + +Help on function set_libitem in module ida_nalt: + +set_libitem(*args) -> 'void' + set_libitem(ea) + +Help on function set_lzero0 in module ida_nalt: + +set_lzero0(*args) -> 'void' + set_lzero0(ea) + +Help on function set_lzero1 in module ida_nalt: + +set_lzero1(*args) -> 'void' + set_lzero1(ea) + +Help on function set_noret in module ida_nalt: + +set_noret(*args) -> 'void' + set_noret(ea) + +Help on function set_notcode in module ida_nalt: + +set_notcode(*args) -> 'void' + set_notcode(ea) + + + Mark address so that it cannot be converted to instruction. + + + @param ea (C++: ea_t) + +Help on function set_notproc in module ida_nalt: + +set_notproc(*args) -> 'void' + set_notproc(ea) + +Help on function set_op_tinfo in module ida_nalt: + +set_op_tinfo(*args) -> 'bool' + set_op_tinfo(ea, n, tif) -> bool + +Help on function set_outfile_encoding_idx in module ida_nalt: + +set_outfile_encoding_idx(*args) -> 'bool' + set_outfile_encoding_idx(idx) -> bool + + + set encoding to be used when producing files + + @param idx: the encoding index idx can be 0 to use the IDB's default + 1-byte-per-unit encoding (C++: int) + +Help on function set_refinfo in module ida_nalt: + +set_refinfo(*args) -> 'bool' + set_refinfo(ea, n, type, target=BADADDR, base=0, tdelta=0) -> bool + +Help on function set_refinfo_ex in module ida_nalt: + +set_refinfo_ex(*args) -> 'bool' + set_refinfo_ex(ea, n, ri) -> bool + +Help on function set_retfp in module ida_nalt: + +set_retfp(*args) -> 'void' + set_retfp(ea) + +Help on function set_root_filename in module ida_nalt: + +set_root_filename(*args) -> 'void' + set_root_filename(file) + + + Set full path of the input file. + + + @param file (C++: const char *) + +Help on function set_source_linnum in module ida_nalt: + +set_source_linnum(*args) -> 'void' + set_source_linnum(ea, lnnum) + +Help on function set_str_type in module ida_nalt: + +set_str_type(*args) -> 'void' + set_str_type(ea, x) + +Help on function set_switch_info in module ida_nalt: + +set_switch_info(*args) -> 'void' + set_switch_info(ea, _in) + +Help on function set_switch_parent in module ida_nalt: + +set_switch_parent(*args) -> 'void' + set_switch_parent(ea, x) + +Help on function set_terse_struc in module ida_nalt: + +set_terse_struc(*args) -> 'void' + set_terse_struc(ea) + +Help on function set_tilcmt in module ida_nalt: + +set_tilcmt(*args) -> 'void' + set_tilcmt(ea) + +Help on function set_tinfo in module ida_nalt: + +set_tinfo(*args) -> 'bool' + set_tinfo(ea, tif) -> bool + +Help on function set_usemodsp in module ida_nalt: + +set_usemodsp(*args) -> 'void' + set_usemodsp(ea) + +Help on function set_usersp in module ida_nalt: + +set_usersp(*args) -> 'void' + set_usersp(ea) + +Help on function set_userti in module ida_nalt: + +set_userti(*args) -> 'void' + set_userti(ea) + +Help on function set_visible_item in module ida_nalt: + +set_visible_item(*args) -> 'void' + set_visible_item(ea, visible) + + + Change visibility of item at given ea. + + + @param ea (C++: ea_t) + @param visible (C++: bool) + +Help on function set_zstroff in module ida_nalt: + +set_zstroff(*args) -> 'void' + set_zstroff(ea) + +Help on class strpath_ids_array in module ida_nalt: + +class strpath_ids_array(builtins.object) + | Proxy of C++ wrapped_array_t< tid_t,32 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'unsigned-ea-like-numeric-type const &'↗ + | __getitem__(self, i) -> unsigned-ea-like-numeric-type const &↗ + | + | __init__(self, *args) + | __init__(self, data) -> strpath_ids_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_strpath_ids_array(...) + | delete_strpath_ids_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | strpath_ids_array_data_get(self) -> unsigned-ea-like-numeric-type (&)[32]↗ + | + | thisown + | The membership flag + +Help on class strpath_t in module ida_nalt: + +class strpath_t(builtins.object) + | Proxy of C++ strpath_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strpath_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_strpath_t(...) + | delete_strpath_t(self) + | + | _strpath_t__getIds = __getIds(self, *args) -> 'wrapped_array_t< tid_t,32 >' + | __getIds(self) -> strpath_ids_array + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | delta + | strpath_t_delta_get(self) -> adiff_t + | + | ids + | __getIds(self) -> strpath_ids_array + | + | len + | strpath_t_len_get(self) -> int + | + | thisown + | The membership flag + +Help on class switch_info_t in module ida_nalt: + +class switch_info_t(builtins.object) + | Proxy of C++ switch_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> switch_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_switch_info_t(...) + | delete_switch_info_t(self) + | + | _get_values_lowcase(self, *args) -> 'ea_t' + | _get_values_lowcase(self) -> ea_t + | + | _set_values_lowcase(self, *args) -> 'void' + | _set_values_lowcase(self, values) + | + | assign(self, *args) -> 'void' + | assign(self, other) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | get_jrange_vrange(self, *args) -> 'bool' + | get_jrange_vrange(self, jrange=None, vrange=None) -> bool + | + | get_jtable_element_size(self, *args) -> 'int' + | get_jtable_element_size(self) -> int + | + | get_jtable_size(self, *args) -> 'int' + | get_jtable_size(self) -> int + | + | get_lowcase(self, *args) -> 'sval_t' + | get_lowcase(self) -> sval_t + | + | get_shift(self, *args) -> 'int' + | get_shift(self) -> int + | + | get_version(self, *args) -> 'int' + | get_version(self) -> int + | + | get_vtable_element_size(self, *args) -> 'int' + | get_vtable_element_size(self) -> int + | + | has_default(self, *args) -> 'bool' + | has_default(self) -> bool + | + | has_elbase(self, *args) -> 'bool' + | has_elbase(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_indirect(self, *args) -> 'bool' + | is_indirect(self) -> bool + | + | is_nolowcase(self, *args) -> 'bool' + | is_nolowcase(self) -> bool + | + | is_sparse(self, *args) -> 'bool' + | is_sparse(self) -> bool + | + | is_subtract(self, *args) -> 'bool' + | is_subtract(self) -> bool + | + | set_elbase(self, *args) -> 'void' + | set_elbase(self, base) + | + | set_expr(self, *args) -> 'void' + | set_expr(self, r, dt) + | + | set_jtable_element_size(self, *args) -> 'void' + | set_jtable_element_size(self, size) + | + | set_jtable_size(self, *args) -> 'void' + | set_jtable_size(self, size) + | + | set_shift(self, *args) -> 'void' + | set_shift(self, shift) + | + | set_vtable_element_size(self, *args) -> 'void' + | set_vtable_element_size(self, size) + | + | use_std_table(self, *args) -> 'bool' + | use_std_table(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | custom + | switch_info_t_custom_get(self) -> uval_t + | + | defjump + | switch_info_t_defjump_get(self) -> ea_t + | + | elbase + | switch_info_t_elbase_get(self) -> ea_t + | + | expr_ea + | switch_info_t_expr_ea_get(self) -> ea_t + | + | flags + | switch_info_t_flags_get(self) -> uint32 + | + | ind_lowcase + | switch_info_t_ind_lowcase_get(self) -> sval_t + | + | jcases + | switch_info_t_jcases_get(self) -> int + | + | jumps + | switch_info_t_jumps_get(self) -> ea_t + | + | lowcase + | _get_values_lowcase(self) -> ea_t + | + | marks + | switch_info_t_marks_get(self) -> eavec_t * + | + | ncases + | switch_info_t_ncases_get(self) -> ushort + | + | regdtype + | switch_info_t_regdtype_get(self) -> op_dtype_t + | + | regnum + | switch_info_t_regnum_get(self) -> int + | + | startea + | switch_info_t_startea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | values + | _get_values_lowcase(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | SWITCH_INFO_VERSION = 2 + +Help on function switch_info_t__from_ptrval__ in module ida_nalt: + +switch_info_t__from_ptrval__(*args) -> 'switch_info_t *' + switch_info_t__from_ptrval__(ptrval) -> switch_info_t + +Help on function unhide_border in module ida_nalt: + +unhide_border(*args) -> 'void' + unhide_border(ea) + +Help on function unhide_item in module ida_nalt: + +unhide_item(*args) -> 'void' + unhide_item(ea) + +Help on function uses_modsp in module ida_nalt: + +uses_modsp(*args) -> 'bool' + uses_modsp(ea) -> bool + +Help on function validate_idb_names in module ida_nalt: + +validate_idb_names(*args) -> 'int' + validate_idb_names(do_repair) -> int + +=== ida_nalt EPYDOC INJECTIONS === +ida_nalt.AFL_ALIGNFLOW +""" +the previous insn was created for alignment purposes only +""" + +ida_nalt.AFL_BNOT0 +""" +the 1st operand is bitwise negated +""" + +ida_nalt.AFL_BNOT1 +""" +the 2nd operand is bitwise negated +""" + +ida_nalt.AFL_COLORED +""" +has user defined instruction color? +""" + +ida_nalt.AFL_FIXEDSPD +""" +should not be modified by modules + +sp delta value is fixed by analysis. +""" + +ida_nalt.AFL_HIDDEN +""" +the item is hidden completely +""" + +ida_nalt.AFL_LIB +""" +item from the standard library. low level flag, is used to set +'FUNC_LIB' of 'func_t' +""" + +ida_nalt.AFL_LINNUM +""" +has line number info +""" + +ida_nalt.AFL_LNAME +""" +has local name too ( 'FF_NAME' should be set) +""" + +ida_nalt.AFL_LZERO0 +""" +toggle leading zeroes for the 1st operand +""" + +ida_nalt.AFL_LZERO1 +""" +toggle leading zeroes for the 2nd operand +""" + +ida_nalt.AFL_MANUAL +""" +the instruction/data is specified by the user +""" + +ida_nalt.AFL_NOBRD +""" +the code/data border is hidden +""" + +ida_nalt.AFL_NORET +""" +for imported function pointers: doesn't return. this flag can also be +used for any instruction which halts or finishes the program execution +""" + +ida_nalt.AFL_NOTCODE +""" +autoanalysis should not create code here +""" + +ida_nalt.AFL_NOTPROC +""" +autoanalysis should not create proc here +""" + +ida_nalt.AFL_PUBNAM +""" +name is public (inter-file linkage) +""" + +ida_nalt.AFL_RETFP +""" +function returns a floating point value +""" + +ida_nalt.AFL_SIGN0 +""" +code: toggle sign of the 1st operand +""" + +ida_nalt.AFL_SIGN1 +""" +code: toggle sign of the 2nd operand +""" + +ida_nalt.AFL_TERSESTR +""" +terse structure variable display? +""" + +ida_nalt.AFL_TI +""" +has typeinfo? ( 'NSUP_TYPEINFO' ) +""" + +ida_nalt.AFL_TI0 +""" +has typeinfo for operand 0? ( 'NSUP_OPTYPES' ) +""" + +ida_nalt.AFL_TI1 +""" +has typeinfo for operand 1? ( 'NSUP_OPTYPES' +1) +""" + +ida_nalt.AFL_TILCMT +""" +has type comment? (such a comment may be changed by IDA) +""" + +ida_nalt.AFL_USEMODSP +""" +example: pop [rsp+N] + +insn modifes SP and uses the modified value +""" + +ida_nalt.AFL_USERSP +""" +user-defined SP value +""" + +ida_nalt.AFL_USERTI +""" +(comes from the user or type library) + +the type information is definitive. +""" + +ida_nalt.AFL_WEAKNAM +""" +name is weak +""" + +ida_nalt.AFL_ZSTROFF +""" +display struct field name at 0 offset when displaying an offset. +example: \\v{offset somestruct.field_0} if this flag is clear, then +\\v{offset somestruct} +""" + +ida_nalt.AP_ALLOWDUPS +""" +use 'dup' construct +""" + +ida_nalt.AP_ARRAY +""" +create as array (this flag is not stored in database) +""" + +ida_nalt.AP_IDXBASEMASK +""" +mask for number base of the indexes +""" + +ida_nalt.AP_IDXBIN +""" +display indexes in binary +""" + +ida_nalt.AP_IDXDEC +""" +display indexes in decimal +""" + +ida_nalt.AP_IDXHEX +""" +display indexes in hex +""" + +ida_nalt.AP_IDXOCT +""" +display indexes in octal +""" + +ida_nalt.AP_INDEX +""" +display array element indexes as comments +""" + +ida_nalt.AP_SIGNED +""" +treats numbers as signed +""" + +ida_nalt.MAXSTRUCPATH +""" +maximal inclusion depth of unions +""" + +ida_nalt.NALT_ABSBASE +""" +absolute segment location +""" + +ida_nalt.NALT_AFLAGS +""" +additional flags for an item +""" + +ida_nalt.NALT_ALIGN +""" +(should by equal to power of 2) + +alignment value if the item is 'FF_ALIGN' +""" + +ida_nalt.NALT_COLOR +""" +instruction/data background color +""" + +ida_nalt.NALT_CREF_FROM +""" +code xref from, idx: source address +""" + +ida_nalt.NALT_CREF_TO +""" +code xref to, idx: target address +""" + +ida_nalt.NALT_DREF_FROM +""" +data xref from, idx: source address +""" + +ida_nalt.NALT_DREF_TO +""" +data xref to, idx: target address +""" + +ida_nalt.NALT_ENUM0 +""" +enum id for the first operand +""" + +ida_nalt.NALT_ENUM1 +""" +enum id for the second operand +""" + +ida_nalt.NALT_GR_LAYX +""" +group layout ptrs, hash: md5 of 'belongs' +""" + +ida_nalt.NALT_LINNUM +""" +source line number +""" + +ida_nalt.NALT_PURGE +""" +number of bytes purged from the stack when a function is called +indirectly +""" + +ida_nalt.NALT_STRTYPE +""" +type of string item +""" + +ida_nalt.NALT_STRUCT +""" +struct id +""" + +ida_nalt.NALT_SWITCH +""" +switch idiom address (used at jump targets) +""" + +ida_nalt.NSUP_ARGEAS +""" +instructions that initialize call arguments +""" + +ida_nalt.NSUP_ARRAY +""" +array parameters +""" + +ida_nalt.NSUP_CMT +""" +regular comment +""" + +ida_nalt.NSUP_CUSTDT +""" +custom data type id +""" + +ida_nalt.NSUP_FOP1 +""" +forced operand 1 +""" + +ida_nalt.NSUP_FOP2 +""" +forced operand 2 +""" + +ida_nalt.NSUP_FOP3 +""" +forced operand 3 +""" + +ida_nalt.NSUP_FOP4 +""" +forced operand 4 +""" + +ida_nalt.NSUP_FOP5 +""" +forced operand 5 +""" + +ida_nalt.NSUP_FOP6 +""" +forced operand 6 +""" + +ida_nalt.NSUP_FOP7 +""" +forced operand 7 +""" + +ida_nalt.NSUP_FOP8 +""" +forced operand 8 +""" + +ida_nalt.NSUP_FTAILS +""" +function tails or tail referers values NSUP_FTAILS..NSUP_FTAILS+0x1000 +are reserved +""" + +ida_nalt.NSUP_GROUP +""" +graph group information values NSUP_GROUP..NSUP_GROUP+0x1000 are +reserved +""" + +ida_nalt.NSUP_GROUPS +""" +SEG_GRP: pack_dd encoded list of selectors. +""" + +ida_nalt.NSUP_GR_INFO +""" +group node info: color, ea, text +""" + +ida_nalt.NSUP_GR_LAYT +""" +group layouts, idx: layout pointer +""" + +ida_nalt.NSUP_JINFO +""" +jump table info +""" + +ida_nalt.NSUP_LLABEL +""" +local labels. values NSUP_LLABEL..NSUP_LLABEL+0x1000 are reserved +""" + +ida_nalt.NSUP_MANUAL +""" +manual instruction. values NSUP_MANUAL..NSUP_MANUAL+0x1000 are +reserved +""" + +ida_nalt.NSUP_OMFGRP +""" +OMF: group of segments (not used anymore) +""" + +ida_nalt.NSUP_OPTYPES +""" +operand type information. values NSUP_OPTYPES..NSUP_OPTYPES+0x100000 +are reserved +""" + +ida_nalt.NSUP_OREF0 +""" +outer complex reference information for operand 1 +""" + +ida_nalt.NSUP_OREF1 +""" +outer complex reference information for operand 2 +""" + +ida_nalt.NSUP_OREF2 +""" +outer complex reference information for operand 3 +""" + +ida_nalt.NSUP_OREF3 +""" +outer complex reference information for operand 4 +""" + +ida_nalt.NSUP_OREF4 +""" +outer complex reference information for operand 5 +""" + +ida_nalt.NSUP_OREF5 +""" +outer complex reference information for operand 6 +""" + +ida_nalt.NSUP_OREF6 +""" +outer complex reference information for operand 7 +""" + +ida_nalt.NSUP_OREF7 +""" +outer complex reference information for operand 8 +""" + +ida_nalt.NSUP_ORIGFMD +""" +function metadata before lumina information was applied values +NSUP_ORIGFMD..NSUP_ORIGFMD+0x1000 are reserved +""" + +ida_nalt.NSUP_POINTS +""" +SP change points blob (see funcs.cpp). values +NSUP_POINTS..NSUP_POINTS+0x1000 are reserved +""" + +ida_nalt.NSUP_REF0 +""" +complex reference information for operand 1 +""" + +ida_nalt.NSUP_REF1 +""" +complex reference information for operand 2 +""" + +ida_nalt.NSUP_REF2 +""" +complex reference information for operand 3 +""" + +ida_nalt.NSUP_REF3 +""" +complex reference information for operand 4 +""" + +ida_nalt.NSUP_REF4 +""" +complex reference information for operand 5 +""" + +ida_nalt.NSUP_REF5 +""" +complex reference information for operand 6 +""" + +ida_nalt.NSUP_REF6 +""" +complex reference information for operand 7 +""" + +ida_nalt.NSUP_REF7 +""" +complex reference information for operand 8 +""" + +ida_nalt.NSUP_REGARG +""" +register argument type/name descriptions values +NSUP_REGARG..NSUP_REGARG+0x1000 are reserved +""" + +ida_nalt.NSUP_REGVAR +""" +register variables. values NSUP_REGVAR..NSUP_REGVAR+0x1000 are +reserved +""" + +ida_nalt.NSUP_REPCMT +""" +repeatable comment +""" + +ida_nalt.NSUP_SEGTRANS +""" +segment translations +""" + +ida_nalt.NSUP_STROFF0 +""" +stroff: struct path for the first operand +""" + +ida_nalt.NSUP_STROFF1 +""" +stroff: struct path for the second operand +""" + +ida_nalt.NSUP_SWITCH +""" +switch information +""" + +ida_nalt.NSUP_TYPEINFO +""" +type information. values NSUP_TYPEINFO..NSUP_TYPEINFO+0x1000 are +reserved +""" + +ida_nalt.NSUP_XREFPOS +""" +saved xref address and type in the xrefs window +""" + +ida_nalt.PATCH_TAG +""" +Patch netnode tag. +""" + +ida_nalt.REFINFO_CUSTOM +""" +a custom reference the kernel will call \\ph{notify}(ph.custom_offset, +.... that can change all arguments used for calculations. This flag is +useful for custom fixups +""" + +ida_nalt.REFINFO_NOBASE +""" +don't create the base xref implies that the base can be any value nb: +base xrefs are created only if the offset base points to the middle of +a segment +""" + +ida_nalt.REFINFO_PASTEND +""" +reference past an item it may point to an nonexistent address do not +destroy alignment dirs +""" + +ida_nalt.REFINFO_RVAOFF +""" +based reference (rva) 'refinfo_t::base' will be forced to +'get_imagebase()' such a reference is displayed with the \\ash{a_rva} +keyword +""" + +ida_nalt.REFINFO_SIGNEDOP +""" +the operand value is sign-extended (only supported for +REF_OFF8/16/32/64) +""" + +ida_nalt.REFINFO_SUBTRACT +""" +the reference value is subtracted from the base value instead of (as +usual) being added to it +""" + +ida_nalt.REFINFO_TYPE +""" +reference type +""" + +ida_nalt.RIDX_ABINAME +""" +ABI name (processor specific) +""" + +ida_nalt.RIDX_ARCHIVE_PATH +""" +archive file path +""" + +ida_nalt.RIDX_C_MACROS +""" +C predefined macros. +""" + +ida_nalt.RIDX_DBG_BINPATHS +""" +unused (20 indexes) +""" + +ida_nalt.RIDX_DUALOP_GRAPH +""" +Graph text representation options. +""" + +ida_nalt.RIDX_DUALOP_TEXT +""" +Text text representation options. +""" + +ida_nalt.RIDX_FILE_FORMAT_NAME +""" +file format name for loader modules +""" + +ida_nalt.RIDX_GROUPS +""" +segment group information (see init_groups()) +""" + +ida_nalt.RIDX_H_PATH +""" +C header path. +""" + +ida_nalt.RIDX_IDA_VERSION +""" +version of ida which created the database +""" + +ida_nalt.RIDX_INCLUDE +""" +assembler include file name +""" + +ida_nalt.RIDX_MD5 +""" +MD5 of the input file. +""" + +ida_nalt.RIDX_NOTEPAD +""" +notepad blob, occupies 1000 indexes (1MB of text) +""" + +ida_nalt.RIDX_PROBLEMS +""" +problem lists +""" + +ida_nalt.RIDX_SELECTED_EXTLANG +""" +last selected extlang name (from the execute script box) +""" + +ida_nalt.RIDX_SELECTORS +""" +2..63 are for selector_t blob (see init_selectors()) +""" + +ida_nalt.RIDX_SHA256 +""" +SHA256 of the input file. +""" + +ida_nalt.RIDX_SMALL_IDC +""" +Instant IDC statements, blob. +""" + +ida_nalt.RIDX_SMALL_IDC_OLD +""" +Instant IDC statements (obsolete) +""" + +ida_nalt.RIDX_SRCDBG_PATHS +""" +source debug paths, occupies 20 indexes +""" + +ida_nalt.RIDX_SRCDBG_UNDESIRED +""" +user-closed source files, occupies 20 indexes +""" + +ida_nalt.RIDX_STR_ENCODINGS +""" +a list of encodings for the program strings +""" + +ida_nalt.STRENC_DEFAULT +""" +use default encoding for this type (see 'get_default_encoding_idx()' ) +""" + +ida_nalt.STRENC_NONE +""" +force no-conversion encoding +""" + +ida_nalt.STRTYPE_C +""" +Zero-terminated 16bit chars. +""" + +ida_nalt.STRTYPE_C_16 +""" +Zero-terminated 32bit chars. +""" + +ida_nalt.STRTYPE_C_32 +""" +Pascal-style, one-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN2 +""" +Pascal-style, 16bit chars, two-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN2_16 +""" +Pascal-style, four-byte length prefix. +""" + +ida_nalt.STRTYPE_LEN4 +""" +Pascal-style, 16bit chars, four-byte length prefix. +""" + +ida_nalt.STRTYPE_PASCAL +""" +Pascal-style, 16bit chars, one-byte length prefix. +""" + +ida_nalt.STRTYPE_PASCAL_16 +""" +Pascal-style, two-byte length prefix. +""" + +ida_nalt.STRTYPE_TERMCHR +""" +C-style string. + +< Character-terminated string. The termination characters are kept in +the next bytes of string type. +""" + +ida_nalt.SWI_CUSTOM +""" +custom jump table. \\ph{create_switch_xrefs} will be called to create +code xrefs for the table. Custom jump table must be created by the +module (see also 'SWI_STDTBL' ) +""" + +ida_nalt.SWI_DEFRET +""" +return in the default case (defjump==BADADDR) +""" + +ida_nalt.SWI_DEF_IN_TBL +""" +default case is an entry in the jump table. This flag is applicable in +2 cases:The sparse indirect switch (i.e. a switch with a values table) +=""> ==+ 1. The default case entry is the last one +in the table (or the first one in the case of an inversed jump +table).The switch with insns in the jump table. The default case entry +is before the first entry of the table. See also the +find_defjump_from_table() helper function. +""" + +ida_nalt.SWI_ELBASE +""" +segment will be used) + +elbase is present (otherwise the base of the switch +""" + +ida_nalt.SWI_HXNOLOWCASE +""" +lowcase value should not be used by the decompiler (internal flag) +""" + +ida_nalt.SWI_INDIRECT +""" +(for sparse switches) + +value table elements are used as indexes into the jump table +""" + +ida_nalt.SWI_J32 +""" +32-bit jump offsets +""" + +ida_nalt.SWI_JMPINSN +""" +jump table entries are insns. For such entries SHIFT has a different +meaning. It denotes the number of insns in the entry. For example, 0 - +the entry contains the jump to the case, 1 - the entry contains one +insn like a 'mov' and jump to the end of case, and so on. +""" + +ida_nalt.SWI_JMP_INV +""" +for first entry in values table) + +jumptable is inversed. (last entry is +""" + +ida_nalt.SWI_JSIZE +""" +jump offset expansion bit +""" + +ida_nalt.SWI_RESERVED +""" +was: SWI_DEFAULT +""" + +ida_nalt.SWI_SELFREL +""" +jump address is relative to the element not to ELBASE +""" + +ida_nalt.SWI_SEPARATE +""" +create an array of individual elements (otherwise separate items) +""" + +ida_nalt.SWI_SHIFT_MASK +""" +use formula (element< 'qstring *, adiff_t *' + append_struct_fields(disp, n, path, flags, delta, appzero) -> str + + + Append names of struct fields to a name if the name is a struct name. + + @param disp: displacement from the name (C++: adiff_t *) + @param n: number of operand n which the name appears (C++: int) + @param path: 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 (if any). (C++: const tid_t + *) + @param flags: the input flags. they will be returned if the struct + cannot be found. (C++: flags_t) + @param delta: delta to add to displacement (C++: adiff_t) + @param appzero: should append a struct field name if the displacement + is zero? (C++: bool) + @return: flags of the innermost struct member or the input flags + +Help on function calc_gtn_flags in module ida_name: + +calc_gtn_flags(fromaddr, ea) + Calculate flags for get_ea_name() function + + @param fromaddr: the referring address. May be BADADDR. + @param ea: linear address + + @return: flags + +Help on function cleanup_name in module ida_name: + +cleanup_name(*args) -> 'qstring *' + cleanup_name(ea, name, flags=0) -> str + +Help on function del_debug_names in module ida_name: + +del_debug_names(*args) -> 'void' + del_debug_names(ea1, ea2) + +Help on function del_global_name in module ida_name: + +del_global_name(*args) -> 'bool' + del_global_name(ea) -> bool + +Help on function del_local_name in module ida_name: + +del_local_name(*args) -> 'bool' + del_local_name(ea) -> bool + +Help on function demangle_name in module ida_name: + +demangle_name(*args) -> 'qstring *' + demangle_name(name, disable_mask, demreq=DQT_FULL) -> str + + + Demangle a name. + + @param name: name to demangle (C++: const char *) + @param disable_mask: bits to inhibit parts of demangled name (see + MNG_). by the M_COMPILER bits a specific compiler + can be selected (see MT_). (C++: uint32) + @param demreq (C++: demreq_type_t) + @return: ME_... or MT__ bitmasks from demangle.hpp + +Help on class ea_name_t in module ida_name: + +class ea_name_t(builtins.object) + | Proxy of C++ ea_name_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ea_name_t + | __init__(self, _ea, _name) -> ea_name_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ea_name_t(...) + | delete_ea_name_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | ea_name_t_ea_get(self) -> ea_t + | + | name + | ea_name_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on class ea_name_vec_t in module ida_name: + +class ea_name_vec_t(builtins.object) + | Proxy of C++ qvector< ea_name_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'ea_name_t const &' + | __getitem__(self, i) -> ea_name_t + | + | __init__(self, *args) + | __init__(self) -> ea_name_vec_t + | __init__(self, x) -> ea_name_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_ea_name_vec_t(...) + | delete_ea_name_vec_t(self) + | + | at(self, *args) -> 'ea_name_t const &' + | at(self, _idx) -> ea_name_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< ea_name_t >::const_iterator' + | begin(self) -> ea_name_t + | begin(self) -> ea_name_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< ea_name_t >::const_iterator' + | end(self) -> ea_name_t + | end(self) -> ea_name_t + | + | erase(self, *args) -> 'qvector< ea_name_t >::iterator' + | erase(self, it) -> ea_name_t + | erase(self, first, last) -> ea_name_t + | + | extract(self, *args) -> 'ea_name_t *' + | extract(self) -> ea_name_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=ea_name_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< ea_name_t >::iterator' + | insert(self, it, x) -> ea_name_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'ea_name_t &' + | push_back(self, x) + | push_back(self) -> ea_name_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function extract_name in module ida_name: + +extract_name(*args) -> 'qstring *' + extract_name(line, x) -> str + + + Extract a name or address from the specified string. + + @param line: input string (C++: const char *) + @param x: x coordinate of cursor (C++: int) + @return: -1 if cannot extract. otherwise length of the name + +Help on function force_name in module ida_name: + +force_name(*args) -> 'bool' + force_name(ea, name, flags=0) -> bool + +Help on function get_colored_demangled_name in module ida_name: + +get_colored_demangled_name(*args) -> 'qstring' + get_colored_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring + +Help on function get_colored_long_name in module ida_name: + +get_colored_long_name(*args) -> 'qstring' + get_colored_long_name(ea, gtn_flags=0) -> qstring + +Help on function get_colored_name in module ida_name: + +get_colored_name(*args) -> 'qstring' + get_colored_name(ea) -> qstring + +Help on function get_colored_short_name in module ida_name: + +get_colored_short_name(*args) -> 'qstring' + get_colored_short_name(ea, gtn_flags=0) -> qstring + +Help on function get_cp_validity in module ida_name: + +get_cp_validity(*args) -> 'bool' + get_cp_validity(kind, cp, endcp=wchar32_t(-1)) -> bool + + + Is the given codepoint (or range) acceptable in the given context? If + 'endcp' is not BADCP, it is considered to be the end of the range: + [cp, endcp), and is not included in the range + + @param kind (C++: ucdr_kind_t) + @param cp (C++: wchar32_t) + @param endcp (C++: wchar32_t) + +Help on function get_debug_name in module ida_name: + +get_debug_name(*args) -> 'qstring *' + get_debug_name(ea_ptr, how) -> str + +Help on function get_debug_name_ea in module ida_name: + +get_debug_name_ea(*args) -> 'ea_t' + get_debug_name_ea(name) -> ea_t + +Help on function get_debug_names in module ida_name: + +get_debug_names(*args) -> 'PyObject *' + get_debug_names(names, ea1, ea2) + get_debug_names(ea1, ea2, return_list=False) -> PyObject * + +Help on function get_demangled_name in module ida_name: + +get_demangled_name(*args) -> 'qstring' + get_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring + +Help on function get_ea_name in module ida_name: + +get_ea_name(*args) -> 'qstring' + get_ea_name(ea, gtn_flags=0) -> qstring + + + Get name at the specified address. + + @param ea: linear address (C++: ea_t) + @param gtn_flags: how exactly the name should be retrieved. + combination of bits for get_ea_name() function. + There is a convenience bits (C++: int) + @return: success + +Help on function get_long_name in module ida_name: + +get_long_name(*args) -> 'qstring' + get_long_name(ea, gtn_flags=0) -> qstring + +Help on function get_name in module ida_name: + +get_name(*args) -> 'qstring' + get_name(ea) -> qstring + +Help on function get_name_base_ea in module ida_name: + +get_name_base_ea(*args) -> 'ea_t' + get_name_base_ea(_from, to) -> ea_t + + + Get address of the name used in the expression for the address + + @param _from: address of the operand which references to the address + (C++: ea_t) + @param to: the referenced address (C++: ea_t) + @return: address of the name used to represent the operand + +Help on function get_name_color in module ida_name: + +get_name_color(*args) -> 'color_t' + get_name_color(_from, ea) -> color_t + + + Calculate flags for 'get_ea_name()' function. + + Get name color. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . The kernel returns + a local name color if the reference is within a + function, i.e. 'from' and 'ea' belong to the same + function. (C++: ea_t) + @param ea: linear address (C++: ea_t) + +Help on function get_name_ea in module ida_name: + +get_name_ea(*args) -> 'ea_t' + get_name_ea(_from, name) -> ea_t + + + Get address of the name. Dummy names (like byte_xxxx where xxxx are + hex digits) are parsed by this function to obtain the address. The + database is not consulted for them. This function works only with + regular names. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: address of the name or BADADDR + +Help on function get_name_expr in module ida_name: + +get_name_expr(*args) -> 'qstring *' + get_name_expr(_from, n, ea, off, flags=0x0001) -> str + + + Convert address to name expression (name with a displacement). This + function takes into account fixup information and returns a colored + name expression (in the form +/- ). It also knows about + structure members and arrays. If the specified address doesn't have a + name, a dummy name is generated. + + @param _from: 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 the + operand in the instruction. (C++: ea_t) + @param n: number of referencing operand. for data items specify 0 + (C++: int) + @param ea: address to convert to name expression (C++: ea_t) + @param off: the value of name expression. this parameter is used only + to check that the name expression will have the wanted + value. 'off' may be equal to BADADDR but this is + discouraged because it prohibits checks. (C++: uval_t) + @param flags: Name expression flags (C++: int) + @return: < 0 if address is not valid, no segment or other failure. + otherwise the length of the name expression in characters. + +Help on function get_name_value in module ida_name: + +get_name_value(*args) -> 'uval_t *' + get_name_value(_from, name) -> int + + + Get value of the name. This function knows about: regular names, + enums, special segments, etc. + + @param _from: linear address where the name is used if not applicable, + then should be BADADDR (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: Name value result codes + +Help on function get_nice_colored_name in module ida_name: + +get_nice_colored_name(*args) -> 'qstring *' + get_nice_colored_name(ea, flags=0) -> str + + + Get a nice colored name at the specified address. Ex:segment:sub+offse + tsegment:sub:local_labelsegment:labelsegment:addresssegment:address+of + fset + + @param ea (C++: ea_t) + @param flags (C++: int) + @return: the length of the generated name in bytes. + +Help on function get_nlist_ea in module ida_name: + +get_nlist_ea(*args) -> 'ea_t' + get_nlist_ea(idx) -> ea_t + + + Get address from the list at 'idx'. + + + @param idx (C++: size_t) + +Help on function get_nlist_idx in module ida_name: + +get_nlist_idx(*args) -> 'size_t' + get_nlist_idx(ea) -> size_t + + + Get index of the name in the listreturns the closest match. may return + idx >= size. + + @param ea (C++: ea_t) + +Help on function get_nlist_name in module ida_name: + +get_nlist_name(*args) -> 'char const *' + get_nlist_name(idx) -> char const * + + + Get name using idx. + + + @param idx (C++: size_t) + +Help on function get_nlist_size in module ida_name: + +get_nlist_size(*args) -> 'size_t' + get_nlist_size() -> size_t + + + Get number of names in the list. + +Help on function get_short_name in module ida_name: + +get_short_name(*args) -> 'qstring' + get_short_name(ea, gtn_flags=0) -> qstring + +Help on function get_visible_name in module ida_name: + +get_visible_name(*args) -> 'qstring' + get_visible_name(ea, gtn_flags=0) -> qstring + +Help on function hide_name in module ida_name: + +hide_name(*args) -> 'void' + hide_name(ea) + + + Remove name from the list of names + + @param ea: address of the name (C++: ea_t) + +Help on function is_ident in module ida_name: + +is_ident(*args) -> 'bool' + is_ident(name) -> bool + + + Is a valid name? (including ::MangleChars) + + + @param name (C++: const char *) + +Help on function is_ident_cp in module ida_name: + +is_ident_cp(*args) -> 'bool' + is_ident_cp(cp) -> bool + + + Can a character appear in a name? (present in ::NameChars or + ::MangleChars) + + + @param cp (C++: wchar32_t) + +Help on function is_in_nlist in module ida_name: + +is_in_nlist(*args) -> 'bool' + is_in_nlist(ea) -> bool + + + Is name included into names list? + + + @param ea (C++: ea_t) + +Help on function is_name_defined_locally in module ida_name: + +is_name_defined_locally(*args) -> 'bool' + is_name_defined_locally(pfn, name, ignore_name_def, ea1=BADADDR, ea2=BADADDR) -> bool + + + Is the name defined locally in the specified function? + + @param pfn: pointer to function (C++: func_t *) + @param name: name to check (C++: const char *) + @param ignore_name_def: which names to ignore when checking (C++: + ignore_name_def_t) + @param ea1: the starting address of the range inside the function + (optional) (C++: ea_t) + @param ea2: the ending address of the range inside the function + (optional) (C++: ea_t) + @return: true if the name has been defined + +Help on function is_public_name in module ida_name: + +is_public_name(*args) -> 'bool' + is_public_name(ea) -> bool + +Help on function is_strlit_cp in module ida_name: + +is_strlit_cp(*args) -> 'bool' + is_strlit_cp(cp, specific_ranges=None) -> bool + + + Can a character appear in a string literal (present in ::StrlitChars) + If 'specific_ranges' are specified, those will be used instead of the + ones corresponding to the current culture (only if ::StrlitChars is + configured to use the current culture) + + @param cp (C++: wchar32_t) + @param specific_ranges (C++: const rangeset_crefvec_t *) + +Help on function is_uname in module ida_name: + +is_uname(*args) -> 'bool' + is_uname(name) -> bool + + + Is valid user-specified name? (valid name & !dummy prefix). + + @param name: name to test. may be NULL. (C++: const char *) + +Help on function is_valid_cp in module ida_name: + +is_valid_cp(*args) -> 'bool' + is_valid_cp(cp, kind, data=None) -> bool + + + Is the given codepoint acceptable in the given context? + + + @param cp (C++: wchar32_t) + @param kind (C++: nametype_t) + @param data (C++: void *) + +Help on function is_valid_typename in module ida_name: + +is_valid_typename(*args) -> 'bool' + is_valid_typename(name) -> bool + + + Is valid type name? + + @param name: name to test. may be NULL. (C++: const char *) + +Help on function is_visible_cp in module ida_name: + +is_visible_cp(*args) -> 'bool' + is_visible_cp(cp) -> bool + + + Can a character be displayed in a name? (present in ::NameChars) + + + @param cp (C++: wchar32_t) + +Help on function is_weak_name in module ida_name: + +is_weak_name(*args) -> 'bool' + is_weak_name(ea) -> bool + +Help on function make_name_auto in module ida_name: + +make_name_auto(*args) -> 'bool' + make_name_auto(ea) -> bool + +Help on function make_name_non_public in module ida_name: + +make_name_non_public(*args) -> 'void' + make_name_non_public(ea) + +Help on function make_name_non_weak in module ida_name: + +make_name_non_weak(*args) -> 'void' + make_name_non_weak(ea) + +Help on function make_name_public in module ida_name: + +make_name_public(*args) -> 'void' + make_name_public(ea) + +Help on function make_name_user in module ida_name: + +make_name_user(*args) -> 'bool' + make_name_user(ea) -> bool + +Help on function make_name_weak in module ida_name: + +make_name_weak(*args) -> 'void' + make_name_weak(ea) + +Help on function rebuild_nlist in module ida_name: + +rebuild_nlist(*args) -> 'void' + rebuild_nlist() + + + Rebuild names list. + +Help on function reorder_dummy_names in module ida_name: + +reorder_dummy_names(*args) -> 'void' + reorder_dummy_names() + + + Renumber dummy names. + +Help on function set_cp_validity in module ida_name: + +set_cp_validity(*args) -> 'void' + set_cp_validity(kind, cp, endcp=wchar32_t(-1), valid=True) + + + Mark the given codepoint (or range) as acceptable or unacceptable in + the given context If 'endcp' is not BADCP, it is considered to be the + end of the range: [cp, endcp), and is not included in the range + + @param kind (C++: ucdr_kind_t) + @param cp (C++: wchar32_t) + @param endcp (C++: wchar32_t) + @param valid (C++: bool) + +Help on function set_debug_name in module ida_name: + +set_debug_name(*args) -> 'bool' + set_debug_name(ea, name) -> bool + +Help on function set_dummy_name in module ida_name: + +set_dummy_name(*args) -> 'bool' + set_dummy_name(_from, ea) -> bool + + + Give an autogenerated (dummy) name. Autogenerated names have special + prefixes (loc_...). + + @param _from: linear address of the operand which references to the + address (C++: ea_t) + @param ea: linear address (C++: ea_t) + +Help on function set_name in module ida_name: + +set_name(*args) -> 'bool' + set_name(ea, name, flags=0) -> bool + + + Set or delete name of an item at the specified address. An item can be + anything: instruction, function, data byte, word, string, structure, + etc... Include name into the list of names. + + @param ea: linear address. do nothing if ea is not valid (return 0). + tail bytes can't have names. (C++: ea_t) + @param name: new name. NULL: do nothing (return 0). "" : delete + name. otherwise this is a new name. (C++: const char *) + @param flags: Set name flags . If a bit is not specified, then the + corresponding action is not performed and the name will + retain the same bits as before calling this function. + For new names, default is: non-public, non-weak, non- + auto. (C++: int) + +Help on function show_name in module ida_name: + +show_name(*args) -> 'void' + show_name(ea) + + + Insert name to the list of names. + + + @param ea (C++: ea_t) + +Help on function validate_name in module ida_name: + +validate_name(*args) -> 'PyObject *' + validate_name(name, type, flags=0) -> PyObject * + + + Validate a name. This function replaces all invalid characters in the + name with SUBSTCHAR. However, it will return false if name is valid + but not allowed to be an identifier (is a register name). + + @param name: ptr to name. the name will be modified (C++: qstring *) + @param type: the type of name we want to validate (C++: nametype_t) + @param flags: see SN_* . Only SN_IDBENC is currently considered (C++: + int) + @return: success + +=== ida_name EPYDOC INJECTIONS === +ida_name.FUNC_IMPORT_PREFIX +""" +Name prefix used by IDA for the imported functions. +""" + +ida_name.GETN_APPZERO +""" +append a struct field name if the field offset is zero? + +meaningful only if the name refers to a structure. +""" + +ida_name.GETN_NODUMMY +""" +do not create a new dummy name but pretend it exists +""" + +ida_name.GETN_NOFIXUP +""" +ignore the fixup information when producing the name +""" + +ida_name.GNCN_NOCOLOR +""" +generate an uncolored name +""" + +ida_name.GNCN_NODBGNM +""" +don't use debug names +""" + +ida_name.GNCN_NOFUNC +""" +don't generate funcname+... expressions +""" + +ida_name.GNCN_NOLABEL +""" +don't generate labels +""" + +ida_name.GNCN_NOSEG +""" +ignore the segment prefix when producing the name +""" + +ida_name.GNCN_PREFDBG +""" +if using debug names, prefer debug names over function names +""" + +ida_name.GNCN_REQFUNC +""" +return 0 if the address does not belong to a function +""" + +ida_name.GNCN_REQNAME +""" +return 0 if the address can only be represented as a hex number +""" + +ida_name.GNCN_SEGNUM +""" +segment part is displayed as a hex number +""" + +ida_name.GNCN_SEG_FUNC +""" +generate both segment and function names (default is to omit segment +name if a function name is present) +""" + +ida_name.GN_COLORED +""" +return colored name +""" + +ida_name.GN_DEMANGLED +""" +return demangled name +""" + +ida_name.GN_ISRET +""" +for dummy names: use retloc +""" + +ida_name.GN_LOCAL +""" +try to get local name first; if failed, get global +""" + +ida_name.GN_LONG +""" +use long form of demangled name +""" + +ida_name.GN_NOT_DUMMY +""" +do not return a dummy name +""" + +ida_name.GN_NOT_ISRET +""" +for dummy names: do not use retloc +""" + +ida_name.GN_SHORT +""" +use short form of demangled name +""" + +ida_name.GN_STRICT +""" +fail if cannot demangle +""" + +ida_name.GN_VISIBLE +""" +replace forbidden characters by SUBSTCHAR +""" + +ida_name.MAXNAMELEN +""" +Maximum length of a name in IDA (with the trailing zero) +""" + +ida_name.NT_ABS +""" +name is absolute symbol ( 'SEG_ABSSYM' ) +""" + +ida_name.NT_BMASK +""" +name is a bit group mask name +""" + +ida_name.NT_BYTE +""" +name is byte name (regular name) +""" + +ida_name.NT_ENUM +""" +name is symbolic constant +""" + +ida_name.NT_LOCAL +""" +name is local label +""" + +ida_name.NT_NONE +""" +name doesn't exist or has no value +""" + +ida_name.NT_REGVAR +""" +name is a renamed register (*value is idx into pfn->regvars) +""" + +ida_name.NT_SEG +""" +name is segment or segment register name +""" + +ida_name.NT_STKVAR +""" +name is stack variable name +""" + +ida_name.NT_STROFF +""" +name is structure member +""" + +ida_name.SN_AUTO +""" +if set, make name autogenerated +""" + +ida_name.SN_DELTAIL +""" +delete the hindering item + +if name cannot be set because of a tail byte, +""" + +ida_name.SN_FORCE +""" +if the specified name is already present in the database, try +variations with a numerical suffix like "_123" +""" + +ida_name.SN_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly. Specifying SN_IDBENC also implies SN_NODUMMY +""" + +ida_name.SN_LOCAL +""" +create local name. a function should exist. local names can't be +public or weak. also they are not included into the list of names they +can't have dummy prefixes. +""" + +ida_name.SN_NOCHECK +""" +Don't fail if the name contains invalid characters. If this bit is +clear, all invalid chars (those !is_ident_cp()) will be replaced by +SUBSTCHAR List of valid characters is defined in ida.cfg +""" + +ida_name.SN_NODUMMY +""" +automatically prepend the name with '_' if it begins with a dummy +suffix such as 'sub_'. See also SN_IDBENC +""" + +ida_name.SN_NOLIST +""" +if set, exclude name from the list. if not set, then include the name +into the list (however, if other bits are set, the name might be +immediately excluded from the list). +""" + +ida_name.SN_NON_AUTO +""" +if set, make name non-autogenerated +""" + +ida_name.SN_NON_PUBLIC +""" +if set, make name non-public +""" + +ida_name.SN_NON_WEAK +""" +if set, make name non-weak +""" + +ida_name.SN_NOWARN +""" +don't display a warning if failed +""" + +ida_name.SN_PUBLIC +""" +if set, make name public +""" + +ida_name.SN_WEAK +""" +if set, make name weak +""" +=== ida_name EPYDOC INJECTIONS END === +Help on function exist in module ida_netnode: + +exist(*args) -> 'bool' + exist(n) -> bool + +Help on class netnode in module ida_netnode: + +class netnode(builtins.object) + | Proxy of C++ netnode class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, n) -> bool + | __eq__(self, x) -> bool + | + | __init__(self, *args) + | __init__(self) -> netnode + | __init__(self, num) -> netnode + | __init__(self, _name, namlen=0, do_create=False) -> netnode + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, n) -> bool + | __ne__(self, x) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_netnode(...) + | delete_netnode(self) + | + | altdel(self, *args) -> 'bool' + | altdel(self, alt, tag=atag) -> bool + | altdel(self) -> bool + | + | altdel_all(self, *args) -> 'bool' + | altdel_all(self, tag) -> bool + | + | altdel_ea(self, *args) -> 'bool' + | altdel_ea(self, ea, tag=atag) -> bool + | + | altdel_idx8(self, *args) -> 'bool' + | altdel_idx8(self, alt, tag) -> bool + | + | altfirst(self, *args) -> 'nodeidx_t' + | altfirst(self, tag=atag) -> nodeidx_t + | + | altfirst_idx8(self, *args) -> 'nodeidx_t' + | altfirst_idx8(self, tag) -> nodeidx_t + | + | altlast(self, *args) -> 'nodeidx_t' + | altlast(self, tag=atag) -> nodeidx_t + | + | altlast_idx8(self, *args) -> 'nodeidx_t' + | altlast_idx8(self, tag) -> nodeidx_t + | + | altnext(self, *args) -> 'nodeidx_t' + | altnext(self, cur, tag=atag) -> nodeidx_t + | + | altnext_idx8(self, *args) -> 'nodeidx_t' + | altnext_idx8(self, cur, tag) -> nodeidx_t + | + | altprev(self, *args) -> 'nodeidx_t' + | altprev(self, cur, tag=atag) -> nodeidx_t + | + | altprev_idx8(self, *args) -> 'nodeidx_t' + | altprev_idx8(self, cur, tag) -> nodeidx_t + | + | altset(self, *args) -> 'bool' + | altset(self, alt, value, tag=atag) -> bool + | + | altset_ea(self, *args) -> 'bool' + | altset_ea(self, ea, value, tag=atag) -> bool + | + | altset_idx8(self, *args) -> 'bool' + | altset_idx8(self, alt, val, tag) -> bool + | + | altshift(self, *args) -> 'size_t' + | altshift(self, _from, to, size, tag=atag) -> size_t + | + | altval(self, *args) -> 'nodeidx_t' + | altval(self, alt, tag=atag) -> nodeidx_t + | + | altval_ea(self, *args) -> 'nodeidx_t' + | altval_ea(self, ea, tag=atag) -> nodeidx_t + | + | altval_idx8(self, *args) -> 'nodeidx_t' + | altval_idx8(self, alt, tag) -> nodeidx_t + | + | blobsize(self, *args) -> 'size_t' + | blobsize(self, _start, tag) -> size_t + | + | blobsize_ea(self, *args) -> 'size_t' + | blobsize_ea(self, ea, tag) -> size_t + | + | chardel(self, *args) -> 'bool' + | chardel(self, alt, tag) -> bool + | + | chardel_ea(self, *args) -> 'bool' + | chardel_ea(self, ea, tag) -> bool + | + | chardel_idx8(self, *args) -> 'bool' + | chardel_idx8(self, alt, tag) -> bool + | + | charfirst(self, *args) -> 'nodeidx_t' + | charfirst(self, tag) -> nodeidx_t + | + | charfirst_idx8(self, *args) -> 'nodeidx_t' + | charfirst_idx8(self, tag) -> nodeidx_t + | + | charlast(self, *args) -> 'nodeidx_t' + | charlast(self, tag) -> nodeidx_t + | + | charlast_idx8(self, *args) -> 'nodeidx_t' + | charlast_idx8(self, tag) -> nodeidx_t + | + | charnext(self, *args) -> 'nodeidx_t' + | charnext(self, cur, tag) -> nodeidx_t + | + | charnext_idx8(self, *args) -> 'nodeidx_t' + | charnext_idx8(self, cur, tag) -> nodeidx_t + | + | charprev(self, *args) -> 'nodeidx_t' + | charprev(self, cur, tag) -> nodeidx_t + | + | charprev_idx8(self, *args) -> 'nodeidx_t' + | charprev_idx8(self, cur, tag) -> nodeidx_t + | + | charset(self, *args) -> 'bool' + | charset(self, alt, val, tag) -> bool + | + | charset_ea(self, *args) -> 'bool' + | charset_ea(self, ea, val, tag) -> bool + | + | charset_idx8(self, *args) -> 'bool' + | charset_idx8(self, alt, val, tag) -> bool + | + | charshift(self, *args) -> 'size_t' + | charshift(self, _from, to, size, tag) -> size_t + | + | charval(self, *args) -> 'uchar' + | charval(self, alt, tag) -> uchar + | + | charval_ea(self, *args) -> 'uchar' + | charval_ea(self, ea, tag) -> uchar + | + | charval_idx8(self, *args) -> 'uchar' + | charval_idx8(self, alt, tag) -> uchar + | + | copyto(self, *args) -> 'size_t' + | copyto(self, target, count=1) -> size_t + | + | create(self, *args) -> 'bool' + | create(self, _name, namlen=0) -> bool + | create(self) -> bool + | + | delblob(self, *args) -> 'int' + | delblob(self, _start, tag) -> int + | + | delblob_ea(self, *args) -> 'int' + | delblob_ea(self, ea, tag) -> int + | + | delvalue(self, *args) -> 'bool' + | delvalue(self) -> bool + | + | eadel(self, *args) -> 'bool' + | eadel(self, ea, tag) -> bool + | + | eadel_idx8(self, *args) -> 'bool' + | eadel_idx8(self, idx, tag) -> bool + | + | eaget(self, *args) -> 'ea_t' + | eaget(self, ea, tag) -> ea_t + | + | eaget_idx(self, *args) -> 'ea_t' + | eaget_idx(self, idx, tag) -> ea_t + | + | eaget_idx8(self, *args) -> 'ea_t' + | eaget_idx8(self, idx, tag) -> ea_t + | + | easet(self, *args) -> 'bool' + | easet(self, ea, addr, tag) -> bool + | + | easet_idx(self, *args) -> 'bool' + | easet_idx(self, idx, addr, tag) -> bool + | + | easet_idx8(self, *args) -> 'bool' + | easet_idx8(self, idx, addr, tag) -> bool + | + | end(self, *args) -> 'bool' + | end(self) -> bool + | + | get_name(self, *args) -> 'ssize_t' + | get_name(self) -> ssize_t + | + | getblob(self, *args) -> 'PyObject *' + | getblob(self, start, tag) -> PyObject * + | + | getblob_ea(self, *args) -> 'PyObject *' + | getblob_ea(self, ea, tag) -> PyObject * + | + | getclob(self, *args) -> 'PyObject *' + | getclob(self, start, tag) -> PyObject * + | + | hashdel(self, *args) -> 'bool' + | hashdel(self, idx, tag=htag) -> bool + | + | hashdel_all(self, *args) -> 'bool' + | hashdel_all(self, tag=htag) -> bool + | + | hashfirst(self, *args) -> 'ssize_t' + | hashfirst(self, tag=htag) -> ssize_t + | + | hashlast(self, *args) -> 'ssize_t' + | hashlast(self, tag=htag) -> ssize_t + | + | hashnext(self, *args) -> 'ssize_t' + | hashnext(self, idx, tag=htag) -> ssize_t + | + | hashprev(self, *args) -> 'ssize_t' + | hashprev(self, idx, tag=htag) -> ssize_t + | + | hashset(self, *args) -> 'bool' + | hashset(self, idx, value, tag=htag) -> bool + | + | hashset_buf(self, *args) -> 'bool' + | hashset_buf(self, idx, py_str, tag=htag) -> bool + | + | hashset_idx(self, *args) -> 'bool' + | hashset_idx(self, idx, value, tag=htag) -> bool + | + | hashstr(self, *args) -> 'ssize_t' + | hashstr(self, idx, tag=htag) -> ssize_t + | + | hashstr_buf(self, *args) -> 'PyObject *' + | hashstr_buf(self, idx, tag=htag) -> PyObject * + | + | hashval(self, *args) -> 'ssize_t' + | hashval(self, idx, tag=htag) -> ssize_t + | + | hashval_long(self, *args) -> 'nodeidx_t' + | hashval_long(self, idx, tag=htag) -> nodeidx_t + | + | index(self, *args) -> 'nodeidx_t' + | index(self) -> nodeidx_t + | + | kill(self, *args) -> 'void' + | kill(self) + | + | long_value(self, *args) -> 'nodeidx_t' + | long_value(self) -> nodeidx_t + | + | lower_bound(self, *args) -> 'nodeidx_t' + | lower_bound(self, cur, tag=stag) -> nodeidx_t + | + | lower_bound_ea(self, *args) -> 'nodeidx_t' + | lower_bound_ea(self, ea, tag=stag) -> nodeidx_t + | + | lower_bound_idx8(self, *args) -> 'nodeidx_t' + | lower_bound_idx8(self, alt, tag) -> nodeidx_t + | + | moveto(self, *args) -> 'size_t' + | moveto(self, target, count=1) -> size_t + | + | next(self, *args) -> 'bool' + | next(self) -> bool + | + | prev(self, *args) -> 'bool' + | prev(self) -> bool + | + | rename(self, *args) -> 'bool' + | rename(self, newname, namlen=0) -> bool + | + | set(self, *args) -> 'bool' + | set(self, value) -> bool + | + | set_long(self, *args) -> 'bool' + | set_long(self, x) -> bool + | + | setblob(self, *args) -> 'bool' + | setblob(self, buf, _start, tag) -> bool + | + | setblob_ea(self, *args) -> 'bool' + | setblob_ea(self, buf, ea, tag) -> bool + | + | start(self, *args) -> 'bool' + | start(self) -> bool + | + | supdel(self, *args) -> 'bool' + | supdel(self, alt, tag=stag) -> bool + | supdel(self) -> bool + | + | supdel_all(self, *args) -> 'bool' + | supdel_all(self, tag) -> bool + | + | supdel_ea(self, *args) -> 'bool' + | supdel_ea(self, ea, tag=stag) -> bool + | + | supdel_idx8(self, *args) -> 'bool' + | supdel_idx8(self, alt, tag) -> bool + | + | supdel_range(self, *args) -> 'int' + | supdel_range(self, idx1, idx2, tag) -> int + | + | supdel_range_idx8(self, *args) -> 'int' + | supdel_range_idx8(self, idx1, idx2, tag) -> int + | + | supfirst(self, *args) -> 'nodeidx_t' + | supfirst(self, tag=stag) -> nodeidx_t + | + | supfirst_idx8(self, *args) -> 'nodeidx_t' + | supfirst_idx8(self, tag) -> nodeidx_t + | + | suplast(self, *args) -> 'nodeidx_t' + | suplast(self, tag=stag) -> nodeidx_t + | + | suplast_idx8(self, *args) -> 'nodeidx_t' + | suplast_idx8(self, tag) -> nodeidx_t + | + | supnext(self, *args) -> 'nodeidx_t' + | supnext(self, cur, tag=stag) -> nodeidx_t + | + | supnext_idx8(self, *args) -> 'nodeidx_t' + | supnext_idx8(self, alt, tag) -> nodeidx_t + | + | supprev(self, *args) -> 'nodeidx_t' + | supprev(self, cur, tag=stag) -> nodeidx_t + | + | supprev_idx8(self, *args) -> 'nodeidx_t' + | supprev_idx8(self, alt, tag) -> nodeidx_t + | + | supset(self, *args) -> 'bool' + | supset(self, alt, value, tag=stag) -> bool + | supset(self, alt, value, tag=stag) -> bool + | + | supset_ea(self, *args) -> 'bool' + | supset_ea(self, ea, value, tag=stag) -> bool + | supset_ea(self, ea, value, tag=stag) -> bool + | + | supset_idx8(self, *args) -> 'bool' + | supset_idx8(self, alt, value, tag) -> bool + | + | supshift(self, *args) -> 'size_t' + | supshift(self, _from, to, size, tag=stag) -> size_t + | + | supstr(self, *args) -> 'ssize_t' + | supstr(self, alt, tag=stag) -> ssize_t + | + | supstr_ea(self, *args) -> 'ssize_t' + | supstr_ea(self, ea, tag=stag) -> ssize_t + | + | supstr_idx8(self, *args) -> 'ssize_t' + | supstr_idx8(self, alt, tag) -> ssize_t + | + | supval(self, *args) -> 'ssize_t' + | supval(self, alt, tag=stag) -> ssize_t + | + | supval_ea(self, *args) -> 'ssize_t' + | supval_ea(self, ea, tag=stag) -> ssize_t + | + | supval_idx8(self, *args) -> 'ssize_t' + | supval_idx8(self, alt, tag) -> ssize_t + | + | valobj(self, *args) -> 'ssize_t' + | valobj(self) -> ssize_t + | + | valstr(self, *args) -> 'ssize_t' + | valstr(self) -> ssize_t + | + | value_exists(self, *args) -> 'bool' + | value_exists(self) -> bool + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +=== ida_netnode EPYDOC INJECTIONS === +ida_netnode.BADNODE +""" +A number to represent a bad netnode reference. +""" +=== ida_netnode EPYDOC INJECTIONS END === +Help on function add_refinfo_dref in module ida_offset: + +add_refinfo_dref(*args) -> 'ea_t' + add_refinfo_dref(insn, _from, ri, opval, type, opoff) -> ea_t + + + Add xrefs for a reference from the given instruction (\insn_t{ea}). + This function creates a cross references to the target and the base. + 'insn_t::add_off_drefs()' calls this function to create xrefs for + 'offset' operand. + + @param insn: the referencing instruction (C++: const insn_t &) + @param _from: the referencing instruction/data address (C++: ea_t) + @param ri: reference info block from the database (C++: const + refinfo_t &) + @param opval: operand value (usually op_t::value or op_t::addr ) + (C++: adiff_t) + @param type: type of xref (C++: dref_t) + @param opoff: offset of the operand from the start of instruction + (C++: int) + @return: the target address of the reference + +Help on function calc_basevalue in module ida_offset: + +calc_basevalue(*args) -> 'ea_t' + calc_basevalue(target, base) -> ea_t + + + Calculate the value of the reference base. + + + @param target (C++: ea_t) + @param base (C++: ea_t) + +Help on function calc_offset_base in module ida_offset: + +calc_offset_base(*args) -> 'ea_t' + calc_offset_base(ea, n) -> ea_t + + + Try to calculate the offset base This function takes into account the + fixup information, current ds and cs values. + + @param ea: the referencing instruction/data address (C++: ea_t) + @param n: operand number 0: first operand 1: other operand (C++: + int) + @return: output base address or BADADDR + +Help on function calc_probable_base_by_value in module ida_offset: + +calc_probable_base_by_value(*args) -> 'ea_t' + calc_probable_base_by_value(ea, off) -> ea_t + + + Try to calculate the offset base. 2 bases are checked: current ds and + cs. If fails, return 'BADADDR' + + @param ea (C++: ea_t) + @param off (C++: uval_t) + +Help on function calc_reference_data in module ida_offset: + +calc_reference_data(*args) -> 'bool' + calc_reference_data(target, base, _from, ri, opval) -> bool + + + Calculate the target and base addresses of an offset expression. The + calculated target and base addresses are returned in the locations + pointed by 'base' and 'target'. In case 'ri.base' is 'BADADDR' , the + function calculates the offset base address from the referencing + instruction/data address. The target address is copied from ri.target. + If ri.target is 'BADADDR' then the target is calculated using the base + address and 'opval'. This function also checks if 'opval' matches the + full value of the reference and takes in account the memory-mapping. + + @param target: output target address (C++: ea_t *) + @param base: output base address (C++: ea_t *) + @param _from: the referencing instruction/data address (C++: ea_t) + @param ri: reference info block from the database (C++: const + refinfo_t &) + @param opval: operand value (usually op_t::value or op_t::addr ) + (C++: adiff_t) + @return: success + +Help on function calc_target in module ida_offset: + +calc_target(*args) -> 'ea_t' + calc_target(_from, opval, ri) -> ea_t + calc_target(_from, ea, n, opval) -> ea_t + + + Calculates the target, using the provided 'refinfo_t' . + + + @param _from (C++: ea_t) + @param opval (C++: adiff_t) + @param ri (C++: const refinfo_t &) + +Help on function can_be_off32 in module ida_offset: + +can_be_off32(*args) -> 'ea_t' + can_be_off32(ea) -> ea_t + + + Does the specified address contain a valid OFF32 value?. For symbols + in special segments the displacement is not taken into account. If + yes, then the target address of OFF32 will be returned. If not, then + 'BADADDR' is returned. + + @param ea (C++: ea_t) + +Help on function get_default_reftype in module ida_offset: + +get_default_reftype(*args) -> 'reftype_t' + get_default_reftype(ea) -> reftype_t + + + Get default reference type depending on the segment. + + @param ea (C++: ea_t) + @return: one of REF_OFF8 , REF_OFF16 , REF_OFF32 + +Help on function get_offbase in module ida_offset: + +get_offbase(*args) -> 'ea_t' + get_offbase(ea, n) -> ea_t + + + Get offset base value + + @param ea: linear address (C++: ea_t) + @param n: number of operand (C++: int) + @return: offset base or BADADDR + +Help on function get_offset_expr in module ida_offset: + +get_offset_expr(*args) -> 'qstring *' + get_offset_expr(ea, n, ri, _from, offset, getn_flags=0) -> str + + + See 'get_offset_expression()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param ri (C++: const refinfo_t &) + @param _from (C++: ea_t) + @param offset (C++: adiff_t) + @param getn_flags (C++: int) + +Help on function get_offset_expression in module ida_offset: + +get_offset_expression(*args) -> 'qstring *' + get_offset_expression(ea, n, _from, offset, getn_flags=0) -> str + + + Get offset expression (in the form "offset name+displ"). This function + uses offset translation function (\ph{translate}) if your IDP module + has such a function. Translation function is used to map linear + addresses in the program (only for offsets).Example: suppose we have + instruction at linear address 0x00011000: \v{mov ax, [bx+7422h]} and + at ds:7422h: \v{array dw ...} We want to represent the second operand + with an offset expression, so then we call: \v{ + get_offset_expresion(0x001100, 1, 0x001102, 0x7422, buf); | | | | | | + | | | +output buffer | | | +value of offset expression | | +address + offset value in the instruction | +the second operand +address of + instruction } and the function will return a colored string: \v{offset + array} + + @param ea: start of instruction or data with the offset expression + (C++: ea_t) + @param n: number of operand (may be ORed with OPND_OUTER ) 0: first + operand 1: second operand (C++: int) + @param _from: 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. (C++: ea_t) + @param offset: value of operand or its part. The function will return + text representation of this value as offset expression. + (C++: adiff_t) + @param getn_flags: combination of: GETN_APPZERO : meaningful only if + the name refers to a structure. appends the struct + field name if the field offset is zero + GETN_NODUMMY : do not generate dummy names for the + expression but pretend they already exist (useful + to verify that the offset expression can be + represented) (C++: int) + +Help on function op_offset in module ida_offset: + +op_offset(*args) -> 'int' + op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int + + + See 'op_offset_ex()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param type (C++: reftype_t) + @param target (C++: ea_t) + @param base (C++: ea_t) + @param tdelta (C++: adiff_t) + +Help on function op_offset_ex in module ida_offset: + +op_offset_ex(*args) -> 'int' + op_offset_ex(ea, n, ri) -> int + + + Convert operand to a reference. To delete an offset, use + 'clr_op_type()' function. + + @param ea: linear address. if 'ea' has unexplored bytes, try to + convert them to no segment: fail 16bit segment: to + 16bit word data 32bit segment: to dword (C++: ea_t) + @param n: number of operand (may be ORed with OPND_OUTER ) 0: first + 1: second 2: third OPND_MASK : all operands (C++: int) + @param ri: reference information (C++: const refinfo_t *) + @return: success + +Help on function op_plain_offset in module ida_offset: + +op_plain_offset(*args) -> 'bool' + op_plain_offset(ea, n, base) -> bool + + + Convert operand to a reference with the default reference type. + + + @param ea (C++: ea_t) + @param n (C++: int) + @param base (C++: ea_t) + +Help on class __qmutex_t in module ida_pro: + +class __qmutex_t(builtins.object) + | Proxy of C++ __qmutex_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qmutex_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete___qmutex_t(...) + | delete___qmutex_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 + +Help on class __qsemaphore_t in module ida_pro: + +class __qsemaphore_t(builtins.object) + | Proxy of C++ __qsemaphore_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qsemaphore_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete___qsemaphore_t(...) + | delete___qsemaphore_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 + +Help on class __qthread_t in module ida_pro: + +class __qthread_t(builtins.object) + | Proxy of C++ __qthread_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> __qthread_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete___qthread_t(...) + | delete___qthread_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 + +Help on class _qstrvec_t in module ida_pro: + +class _qstrvec_t(ida_idaapi.py_clinked_object_t) + | WARNING: It is very unlikely an IDAPython user should ever, ever + | have to use this type. It should only be used for IDAPython internals. + | + | For example, in py_askusingform.py, we ctypes-expose to the IDA + | kernel & UI a qstrvec instance, in case a DropdownListControl is + | constructed. + | That's because that's what ask_form expects, and we have no + | choice but to make a DropdownListControl hold a qstrvec_t. + | This is, afaict, the only situation where a Python + | _qstrvec_t is required. + | + | Method resolution order: + | _qstrvec_t + | ida_idaapi.py_clinked_object_t + | ida_idaapi.pyidc_opaque_object_t + | builtins.object + | + | Methods defined here: + | + | __getitem__(self, idx) + | Gets the string at the given index + | + | __init__(self, items=None) + | Initialize self. See help(type(self)) for accurate signature. + | + | __setitem__(self, idx, s) + | Sets string at the given index + | + | _create_clink(self) + | Overwrite me. + | Creates a new clink + | @return: PyCapsule representing the C link + | + | _del_clink(self, lnk) + | Overwrite me. + | This method deletes the link + | + | _get_clink_ptr(self) + | Overwrite me. + | Returns the C link pointer as a 64bit number + | + | _qstrvec_t__get_size = __get_size(self) + | + | add(self, s) + | Add a string to the vector + | + | addressof(self, idx) + | Returns the address (as number) of the qstring at the given index + | + | assign(self, other) + | Copies the contents of 'other' to 'self' + | + | clear(self, qclear=False) + | Clears all strings from the vector. + | @param qclear: Just reset the size but do not actually free the memory + | + | from_list(self, lst) + | Populates the vector from a Python string list + | + | insert(self, idx, s) + | Insert a string into the vector + | + | remove(self, idx) + | Removes a string from the vector + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | size + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_idaapi.py_clinked_object_t: + | + | __del__(self) + | Delete the link upon object destruction (only if not static) + | + | _free(self) + | Explicitly delete the link (only if not static) + | + | copy(self) + | Returns a new copy of this class + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.py_clinked_object_t: + | + | clink + | + | clink_ptr + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_idaapi.pyidc_opaque_object_t: + | + | __idc_cvt_id__ = 2 + +Help on class boolvec_t in module ida_pro: + +class boolvec_t(builtins.object) + | Proxy of C++ qvector< bool > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'bool const &' + | __getitem__(self, i) -> bool const & + | + | __init__(self, *args) + | __init__(self) -> boolvec_t + | __init__(self, x) -> boolvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_boolvec_t(...) + | delete_boolvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'bool &' + | + | at = __getitem__(self, *args) -> 'bool const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< bool >::const_iterator' + | begin(self) -> qvector< bool >::iterator + | begin(self) -> qvector< bool >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< bool >::const_iterator' + | end(self) -> qvector< bool >::iterator + | end(self) -> qvector< bool >::const_iterator + | + | erase(self, *args) -> 'qvector< bool >::iterator' + | erase(self, it) -> qvector< bool >::iterator + | erase(self, first, last) -> qvector< bool >::iterator + | + | extract(self, *args) -> 'bool *' + | extract(self) -> bool * + | + | find(self, *args) -> 'qvector< bool >::const_iterator' + | find(self, x) -> qvector< bool >::iterator + | find(self, x) -> qvector< bool >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=bool()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< bool >::iterator' + | insert(self, it, x) -> qvector< bool >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'bool &' + | push_back(self, x) + | push_back(self) -> bool & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class channel_redir_t in module ida_pro: + +class channel_redir_t(builtins.object) + | Proxy of C++ channel_redir_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> channel_redir_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_channel_redir_t(...) + | delete_channel_redir_t(self) + | + | is_append(self, *args) -> 'bool' + | is_append(self) -> bool + | + | is_input(self, *args) -> 'bool' + | is_input(self) -> bool + | + | is_output(self, *args) -> 'bool' + | is_output(self) -> bool + | + | is_quoted(self, *args) -> 'bool' + | is_quoted(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fd + | channel_redir_t_fd_get(self) -> int + | + | file + | channel_redir_t_file_get(self) -> qstring * + | + | flags + | channel_redir_t_flags_get(self) -> int + | + | length + | channel_redir_t_length_get(self) -> int + | + | start + | channel_redir_t_start_get(self) -> int + | + | thisown + | The membership flag + +Help on function check_process_exit in module ida_pro: + +check_process_exit(*args) -> 'int' + check_process_exit(handle, exit_code, msecs=-1) -> int + + + Check whether process has terminated or not. + + @param handle: process handle to wait for (C++: void *) + @param exit_code: pointer to the buffer for the exit code (C++: int *) + +Help on function clear_bits in module ida_pro: + +clear_bits(*args) -> 'void' + clear_bits(bitmap, low, high) + + + Clear bits between [low, high) in 'bitmap'. + + + @param bitmap (C++: uchar *) + @param low (C++: size_t) + @param high (C++: size_t) + +Help on class ea_array in module ida_pro: + +class ea_array(builtins.object) + | Proxy of C++ ea_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'ea_t' + | __getitem__(self, index) -> ea_t + | + | __init__(self, *args) + | __init__(self, nelements) -> ea_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, index, value) + | + | __swig_destroy__ = delete_ea_array(...) + | delete_ea_array(self) + | + | cast(self, *args) -> 'ea_t *' + | cast(self) -> ea_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'ea_array *' + | frompointer(t) -> ea_array + | + | ---------------------------------------------------------------------- + | 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 + +Help on function ea_array_frompointer in module ida_pro: + +ea_array_frompointer(*args) -> 'ea_array *' + ea_array_frompointer(t) -> ea_array + +Help on class ea_pointer in module ida_pro: + +class ea_pointer(builtins.object) + | Proxy of C++ ea_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> ea_pointer + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ea_pointer(...) + | delete_ea_pointer(self) + | + | assign(self, *args) -> 'void' + | assign(self, value) + | + | cast(self, *args) -> 'ea_t *' + | cast(self) -> ea_t * + | + | value(self, *args) -> 'ea_t' + | value(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'ea_pointer *' + | frompointer(t) -> ea_pointer + | + | ---------------------------------------------------------------------- + | 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 + +Help on function ea_pointer_frompointer in module ida_pro: + +ea_pointer_frompointer(*args) -> 'ea_pointer *' + ea_pointer_frompointer(t) -> ea_pointer + +Help on function extend_sign in module ida_pro: + +extend_sign(*args) -> 'uint64' + extend_sign(v, nbytes, sign_extend) -> uint64 + + + Sign-, or zero-extend the value 'v' to occupy 64 bits. The value 'v' + is considered to be of size 'nbytes'. + + @param v (C++: uint64) + @param nbytes (C++: int) + @param sign_extend (C++: bool) + +Help on class instant_dbgopts_t in module ida_pro: + +class instant_dbgopts_t(builtins.object) + | Proxy of C++ instant_dbgopts_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> instant_dbgopts_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_instant_dbgopts_t(...) + | delete_instant_dbgopts_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | _pass + | instant_dbgopts_t__pass_get(self) -> qstring * + | + | attach + | instant_dbgopts_t_attach_get(self) -> bool + | + | debmod + | instant_dbgopts_t_debmod_get(self) -> qstring * + | + | env + | instant_dbgopts_t_env_get(self) -> qstring * + | + | event_id + | instant_dbgopts_t_event_id_get(self) -> int + | + | host + | instant_dbgopts_t_host_get(self) -> qstring * + | + | pid + | instant_dbgopts_t_pid_get(self) -> int + | + | port + | instant_dbgopts_t_port_get(self) -> int + | + | thisown + | The membership flag + +Help on class longlongvec_t in module ida_pro: + +class longlongvec_t(builtins.object) + | Proxy of C++ qvector< long long > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'long long const &' + | __getitem__(self, i) -> long long const & + | + | __init__(self, *args) + | __init__(self) -> longlongvec_t + | __init__(self, x) -> longlongvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_longlongvec_t(...) + | delete_longlongvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'long long &' + | + | at = __getitem__(self, *args) -> 'long long const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< long long >::const_iterator' + | begin(self) -> qvector< long long >::iterator + | begin(self) -> qvector< long long >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< long long >::const_iterator' + | end(self) -> qvector< long long >::iterator + | end(self) -> qvector< long long >::const_iterator + | + | erase(self, *args) -> 'qvector< long long >::iterator' + | erase(self, it) -> qvector< long long >::iterator + | erase(self, first, last) -> qvector< long long >::iterator + | + | extract(self, *args) -> 'long long *' + | extract(self) -> long long * + | + | find(self, *args) -> 'qvector< long long >::const_iterator' + | find(self, x) -> qvector< long long >::iterator + | find(self, x) -> qvector< long long >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< long long >::iterator' + | insert(self, it, x) -> qvector< long long >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'long long &' + | push_back(self, x) + | push_back(self) -> long long & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class int_pointer in module ida_pro: + +class int_pointer(builtins.object) + | Proxy of C++ int_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> int_pointer + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_int_pointer(...) + | delete_int_pointer(self) + | + | assign(self, *args) -> 'void' + | assign(self, value) + | + | cast(self, *args) -> 'int *' + | cast(self) -> int * + | + | value(self, *args) -> 'int' + | value(self) -> int + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'int_pointer *' + | frompointer(t) -> int_pointer + | + | ---------------------------------------------------------------------- + | 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 + +Help on function int_pointer_frompointer in module ida_pro: + +int_pointer_frompointer(*args) -> 'int_pointer *' + int_pointer_frompointer(t) -> int_pointer + +Help on class intvec_t in module ida_pro: + +class intvec_t(builtins.object) + | Proxy of C++ qvector< int > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'int const &' + | __getitem__(self, i) -> int const & + | + | __init__(self, *args) + | __init__(self) -> intvec_t + | __init__(self, x) -> intvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_intvec_t(...) + | delete_intvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'int &' + | + | at = __getitem__(self, *args) -> 'int const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< int >::const_iterator' + | begin(self) -> qvector< int >::iterator + | begin(self) -> qvector< int >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< int >::const_iterator' + | end(self) -> qvector< int >::iterator + | end(self) -> qvector< int >::const_iterator + | + | erase(self, *args) -> 'qvector< int >::iterator' + | erase(self, it) -> qvector< int >::iterator + | erase(self, first, last) -> qvector< int >::iterator + | + | extract(self, *args) -> 'int *' + | extract(self) -> int * + | + | find(self, *args) -> 'qvector< int >::const_iterator' + | find(self, x) -> qvector< int >::iterator + | find(self, x) -> qvector< int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< int >::iterator' + | insert(self, it, x) -> qvector< int >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'int &' + | push_back(self, x) + | push_back(self) -> int & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function is_control_tty in module ida_pro: + +is_control_tty(*args) -> 'enum tty_control_t' + is_control_tty(fd) -> enum tty_control_t + + + Check if the current process is the owner of the TTY specified by 'fd' + (typically an opened descriptor to /dev/tty). + + @param fd (C++: int) + +Help on function is_main_thread in module ida_pro: + +is_main_thread(*args) -> 'bool' + is_main_thread() -> bool + + + Are we running in the main thread? + +Help on function log2ceil in module ida_pro: + +log2ceil(*args) -> 'int' + log2ceil(d64) -> int + + + calculate ceil(log2(d64)) or floor(log2(d64)), it returns 0 if d64 == + 0 + + @param d64 (C++: uint64) + +Help on function log2floor in module ida_pro: + +log2floor(*args) -> 'int' + log2floor(d64) -> int + +Help on function parse_dbgopts in module ida_pro: + +parse_dbgopts(*args) -> 'bool' + parse_dbgopts(ido, r_switch) -> bool + + + Parse the -r command line switch (for instant debugging). r_switch + points to the value of the -r switch. Example: win32@localhost+ + + @param ido (C++: struct instant_dbgopts_t *) + @param r_switch (C++: const char *) + @return: true-ok, false-parse error + +Help on function qatoll in module ida_pro: + +qatoll(*args) -> 'int64' + qatoll(nptr) -> int64 + +Help on function qcontrol_tty in module ida_pro: + +qcontrol_tty(*args) -> 'void' + qcontrol_tty() + + + Make the current terminal the controlling terminal of the calling + process.The current terminal is supposed to be /dev/tty + +Help on function qdetach_tty in module ida_pro: + +qdetach_tty(*args) -> 'void' + qdetach_tty() + + + If the current terminal is the controlling terminal of the calling + process, give up this controlling terminal.The current terminal is + supposed to be /dev/tty + +Help on function qexit in module ida_pro: + +qexit(*args) -> 'void' + qexit(code) + + + Call qatexit functions, shut down UI and kernel, and exit. + + @param code: exit code (C++: int) + +Help on class qmutex_locker_t in module ida_pro: + +class qmutex_locker_t(builtins.object) + | Proxy of C++ qmutex_locker_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _lock) -> qmutex_locker_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qmutex_locker_t(...) + | delete_qmutex_locker_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 + +Help on class qrefcnt_obj_t in module ida_pro: + +class qrefcnt_obj_t(builtins.object) + | Proxy of C++ qrefcnt_obj_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_qrefcnt_obj_t(...) + | delete_qrefcnt_obj_t(self) + | + | release(self, *args) -> 'void' + | release(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | refcnt + | qrefcnt_obj_t_refcnt_get(self) -> int + | + | thisown + | The membership flag + +Help on function qstrvec_t_add in module ida_pro: + +qstrvec_t_add(*args) -> 'bool' + qstrvec_t_add(_self, s) -> bool + +Help on function qstrvec_t_addressof in module ida_pro: + +qstrvec_t_addressof(*args) -> 'PyObject *' + qstrvec_t_addressof(_self, idx) -> PyObject * + +Help on function qstrvec_t_assign in module ida_pro: + +qstrvec_t_assign(*args) -> 'bool' + qstrvec_t_assign(_self, other) -> bool + +Help on function qstrvec_t_clear in module ida_pro: + +qstrvec_t_clear(*args) -> 'bool' + qstrvec_t_clear(_self, qclear) -> bool + +Help on function qstrvec_t_create in module ida_pro: + +qstrvec_t_create(*args) -> 'PyObject *' + qstrvec_t_create() -> PyObject * + +Help on function qstrvec_t_destroy in module ida_pro: + +qstrvec_t_destroy(*args) -> 'bool' + qstrvec_t_destroy(py_obj) -> bool + +Help on function qstrvec_t_from_list in module ida_pro: + +qstrvec_t_from_list(*args) -> 'bool' + qstrvec_t_from_list(_self, py_list) -> bool + +Help on function qstrvec_t_get in module ida_pro: + +qstrvec_t_get(*args) -> 'PyObject *' + qstrvec_t_get(_self, idx) -> PyObject * + +Help on function qstrvec_t_get_clink in module ida_pro: + +qstrvec_t_get_clink(*args) -> 'qstrvec_t *' + qstrvec_t_get_clink(_self) -> qstrvec_t * + +Help on function qstrvec_t_get_clink_ptr in module ida_pro: + +qstrvec_t_get_clink_ptr(*args) -> 'PyObject *' + qstrvec_t_get_clink_ptr(_self) -> PyObject * + +Help on function qstrvec_t_insert in module ida_pro: + +qstrvec_t_insert(*args) -> 'bool' + qstrvec_t_insert(_self, idx, s) -> bool + +Help on function qstrvec_t_remove in module ida_pro: + +qstrvec_t_remove(*args) -> 'bool' + qstrvec_t_remove(_self, idx) -> bool + +Help on function qstrvec_t_set in module ida_pro: + +qstrvec_t_set(*args) -> 'bool' + qstrvec_t_set(_self, idx, s) -> bool + +Help on function qstrvec_t_size in module ida_pro: + +qstrvec_t_size(*args) -> 'size_t' + qstrvec_t_size(_self) -> size_t + +Help on function quote_cmdline_arg in module ida_pro: + +quote_cmdline_arg(*args) -> 'bool' + quote_cmdline_arg(arg) -> bool + + + Quote a command line argument if it contains escape characters. For + example, *.c will be converted into "*.c" because * may be + inadvertently expanded by the shell + + @param arg (C++: qstring *) + @return: true: modified 'arg' + +Help on function qvector_reserve in module ida_pro: + +qvector_reserve(*args) -> 'void *' + qvector_reserve(vec, old, cnt, elsize) -> void * + + + Change capacity of given qvector. + + @param vec: a pointer to a qvector (C++: void *) + @param old: a pointer to the qvector's array (C++: void *) + @param cnt: number of elements to reserve (C++: size_t) + @param elsize: size of each element (C++: size_t) + @return: a pointer to the newly allocated array + +Help on function readbytes in module ida_pro: + +readbytes(*args) -> 'int' + readbytes(h, res, size, mf) -> int + + + Read at most 4 bytes from file. + + @param h: file handle (C++: int) + @param res: value read from file (C++: uint32 *) + @param size: size of value in bytes (1,2,4) (C++: int) + @param mf: is MSB first? (C++: bool) + @return: 0 on success, nonzero otherwise + +Help on function reloc_value in module ida_pro: + +reloc_value(*args) -> 'void' + reloc_value(value, size, delta, mf) + +Help on function relocate_relobj in module ida_pro: + +relocate_relobj(*args) -> 'bool' + relocate_relobj(_relobj, ea, mf) -> bool + +Help on class sel_array in module ida_pro: + +class sel_array(builtins.object) + | Proxy of C++ sel_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'sel_t' + | __getitem__(self, index) -> sel_t + | + | __init__(self, *args) + | __init__(self, nelements) -> sel_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, index, value) + | + | __swig_destroy__ = delete_sel_array(...) + | delete_sel_array(self) + | + | cast(self, *args) -> 'sel_t *' + | cast(self) -> sel_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'sel_array *' + | frompointer(t) -> sel_array + | + | ---------------------------------------------------------------------- + | 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 + +Help on function sel_array_frompointer in module ida_pro: + +sel_array_frompointer(*args) -> 'sel_array *' + sel_array_frompointer(t) -> sel_array + +Help on class sel_pointer in module ida_pro: + +class sel_pointer(builtins.object) + | Proxy of C++ sel_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sel_pointer + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_sel_pointer(...) + | delete_sel_pointer(self) + | + | assign(self, *args) -> 'void' + | assign(self, value) + | + | cast(self, *args) -> 'sel_t *' + | cast(self) -> sel_t * + | + | value(self, *args) -> 'sel_t' + | value(self) -> sel_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'sel_pointer *' + | frompointer(t) -> sel_pointer + | + | ---------------------------------------------------------------------- + | 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 + +Help on function sel_pointer_frompointer in module ida_pro: + +sel_pointer_frompointer(*args) -> 'sel_pointer *' + sel_pointer_frompointer(t) -> sel_pointer + +Help on function set_bits in module ida_pro: + +set_bits(*args) -> 'void' + set_bits(bitmap, low, high) + + + Set bits between [low, high) in 'bitmap'. + + + @param bitmap (C++: uchar *) + @param low (C++: size_t) + @param high (C++: size_t) + +Help on class sizevec_t in module ida_pro: + +class sizevec_t(builtins.object) + | Proxy of C++ qvector< size_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'size_t const &' + | __getitem__(self, i) -> size_t const & + | + | __init__(self, *args) + | __init__(self) -> sizevec_t + | __init__(self, x) -> sizevec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_sizevec_t(...) + | delete_sizevec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'size_t const &' + | at(self, _idx) -> size_t const & + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< size_t >::const_iterator' + | begin(self) -> qvector< size_t >::iterator + | begin(self) -> qvector< size_t >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< size_t >::const_iterator' + | end(self) -> qvector< size_t >::iterator + | end(self) -> qvector< size_t >::const_iterator + | + | erase(self, *args) -> 'qvector< size_t >::iterator' + | erase(self, it) -> qvector< size_t >::iterator + | erase(self, first, last) -> qvector< size_t >::iterator + | + | extract(self, *args) -> 'size_t *' + | extract(self) -> size_t * + | + | find(self, *args) -> 'qvector< size_t >::const_iterator' + | find(self, x) -> qvector< size_t >::iterator + | find(self, x) -> qvector< size_t >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=size_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< size_t >::iterator' + | insert(self, it, x) -> qvector< size_t >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'size_t &' + | push_back(self, x) + | push_back(self) -> size_t & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function str2user in module ida_pro: + +str2user(*args) -> 'PyObject *' + str2user(str) -> PyObject * + + + Insert C-style escape characters to string + + @return: new string with escape characters inserted + +Help on class strvec_t in module ida_pro: + +class strvec_t(builtins.object) + | Proxy of C++ qvector< simpleline_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'simpleline_t const &' + | __getitem__(self, i) -> simpleline_t const & + | + | __init__(self, *args) + | __init__(self) -> strvec_t + | __init__(self, x) -> strvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_strvec_t(...) + | delete_strvec_t(self) + | + | append = push_back(self, *args) -> 'simpleline_t &' + | + | at = __getitem__(self, *args) -> 'simpleline_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< simpleline_t >::const_iterator' + | begin(self) -> qvector< simpleline_t >::iterator + | begin(self) -> qvector< simpleline_t >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< simpleline_t >::const_iterator' + | end(self) -> qvector< simpleline_t >::iterator + | end(self) -> qvector< simpleline_t >::const_iterator + | + | erase(self, *args) -> 'qvector< simpleline_t >::iterator' + | erase(self, it) -> qvector< simpleline_t >::iterator + | erase(self, first, last) -> qvector< simpleline_t >::iterator + | + | extract(self, *args) -> 'simpleline_t *' + | extract(self) -> simpleline_t * + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=simpleline_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< simpleline_t >::iterator' + | insert(self, it, x) -> qvector< simpleline_t >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'simpleline_t &' + | push_back(self, x) + | push_back(self) -> simpleline_t & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class sval_pointer in module ida_pro: + +class sval_pointer(builtins.object) + | Proxy of C++ sval_pointer class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sval_pointer + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_sval_pointer(...) + | delete_sval_pointer(self) + | + | assign(self, *args) -> 'void' + | assign(self, value) + | + | cast(self, *args) -> 'sval_t *' + | cast(self) -> sval_t * + | + | value(self, *args) -> 'sval_t' + | value(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'sval_pointer *' + | frompointer(t) -> sval_pointer + | + | ---------------------------------------------------------------------- + | 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 + +Help on function sval_pointer_frompointer in module ida_pro: + +sval_pointer_frompointer(*args) -> 'sval_pointer *' + sval_pointer_frompointer(t) -> sval_pointer + +Help on class tid_array in module ida_pro: + +class tid_array(builtins.object) + | Proxy of C++ tid_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'tid_t' + | __getitem__(self, index) -> tid_t + | + | __init__(self, *args) + | __init__(self, nelements) -> tid_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, index, value) + | + | __swig_destroy__ = delete_tid_array(...) + | delete_tid_array(self) + | + | cast(self, *args) -> 'tid_t *' + | cast(self) -> tid_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'tid_array *' + | frompointer(t) -> tid_array + | + | ---------------------------------------------------------------------- + | 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 + +Help on function tid_array_frompointer in module ida_pro: + +tid_array_frompointer(*args) -> 'tid_array *' + tid_array_frompointer(t) -> tid_array + +Help on class uchar_array in module ida_pro: + +class uchar_array(builtins.object) + | Proxy of C++ uchar_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'uchar' + | __getitem__(self, index) -> uchar + | + | __init__(self, *args) + | __init__(self, nelements) -> uchar_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, index, value) + | + | __swig_destroy__ = delete_uchar_array(...) + | delete_uchar_array(self) + | + | cast(self, *args) -> 'uchar *' + | cast(self) -> uchar * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'uchar_array *' + | frompointer(t) -> uchar_array + | + | ---------------------------------------------------------------------- + | 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 + +Help on function uchar_array_frompointer in module ida_pro: + +uchar_array_frompointer(*args) -> 'uchar_array *' + uchar_array_frompointer(t) -> uchar_array + +Help on class ulonglongvec_t in module ida_pro: + +class ulonglongvec_t(builtins.object) + | Proxy of C++ qvector< unsigned long long > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'unsigned long long const &' + | __getitem__(self, i) -> unsigned long long const & + | + | __init__(self, *args) + | __init__(self) -> ulonglongvec_t + | __init__(self, x) -> ulonglongvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_ulonglongvec_t(...) + | delete_ulonglongvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'unsigned long long &' + | + | at = __getitem__(self, *args) -> 'unsigned long long const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< unsigned long long >::const_iterator' + | begin(self) -> qvector< unsigned long long >::iterator + | begin(self) -> qvector< unsigned long long >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< unsigned long long >::const_iterator' + | end(self) -> qvector< unsigned long long >::iterator + | end(self) -> qvector< unsigned long long >::const_iterator + | + | erase(self, *args) -> 'qvector< unsigned long long >::iterator' + | erase(self, it) -> qvector< unsigned long long >::iterator + | erase(self, first, last) -> qvector< unsigned long long >::iterator + | + | extract(self, *args) -> 'unsigned long long *' + | extract(self) -> unsigned long long * + | + | find(self, *args) -> 'qvector< unsigned long long >::const_iterator' + | find(self, x) -> qvector< unsigned long long >::iterator + | find(self, x) -> qvector< unsigned long long >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< unsigned long long >::iterator' + | insert(self, it, x) -> qvector< unsigned long long >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'unsigned long long &' + | push_back(self, x) + | push_back(self) -> unsigned long long & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class uintvec_t in module ida_pro: + +class uintvec_t(builtins.object) + | Proxy of C++ qvector< unsigned int > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'unsigned int const &' + | __getitem__(self, i) -> unsigned int const & + | + | __init__(self, *args) + | __init__(self) -> uintvec_t + | __init__(self, x) -> uintvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_uintvec_t(...) + | delete_uintvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'unsigned int &' + | + | at = __getitem__(self, *args) -> 'unsigned int const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< unsigned int >::const_iterator' + | begin(self) -> qvector< unsigned int >::iterator + | begin(self) -> qvector< unsigned int >::const_iterator + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< unsigned int >::const_iterator' + | end(self) -> qvector< unsigned int >::iterator + | end(self) -> qvector< unsigned int >::const_iterator + | + | erase(self, *args) -> 'qvector< unsigned int >::iterator' + | erase(self, it) -> qvector< unsigned int >::iterator + | erase(self, first, last) -> qvector< unsigned int >::iterator + | + | extract(self, *args) -> 'unsigned int *' + | extract(self) -> unsigned int * + | + | find(self, *args) -> 'qvector< unsigned int >::const_iterator' + | find(self, x) -> qvector< unsigned int >::iterator + | find(self, x) -> qvector< unsigned int >::const_iterator + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< unsigned int >::iterator' + | insert(self, it, x) -> qvector< unsigned int >::iterator + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'unsigned int &' + | push_back(self, x) + | push_back(self) -> unsigned int & + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class uval_array in module ida_pro: + +class uval_array(builtins.object) + | Proxy of C++ uval_array class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'uval_t' + | __getitem__(self, index) -> uval_t + | + | __init__(self, *args) + | __init__(self, nelements) -> uval_array + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, index, value) + | + | __swig_destroy__ = delete_uval_array(...) + | delete_uval_array(self) + | + | cast(self, *args) -> 'uval_t *' + | cast(self) -> uval_t * + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | frompointer(*args) -> 'uval_array *' + | frompointer(t) -> uval_array + | + | ---------------------------------------------------------------------- + | 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 + +Help on function uval_array_frompointer in module ida_pro: + +uval_array_frompointer(*args) -> 'uval_array *' + uval_array_frompointer(t) -> uval_array + +Help on function writebytes in module ida_pro: + +writebytes(*args) -> 'int' + writebytes(h, l, size, mf) -> int + + + Write at most 4 bytes to file. + + @param h: file handle (C++: int) + @param l: value to write (C++: uint32) + @param size: size of value in bytes (1,2,4) (C++: int) + @param mf: is MSB first? (C++: bool) + @return: 0 on success, nonzero otherwise + +=== ida_pro EPYDOC INJECTIONS === +ida_pro.CP_UTF16 +""" +UTF-16 codepage. +""" + +ida_pro.IDA_SDK_VERSION +""" +IDA SDK v7.4. +""" + +ida_pro.IDBDEC_ESCAPE +""" +convert non-printable characters to C escapes (, \\xNN, \\uNNNN) +""" + +ida_pro.IOREDIR_APPEND +""" +append, do not overwrite the output file +""" + +ida_pro.IOREDIR_INPUT +""" +input redirection +""" + +ida_pro.IOREDIR_OUTPUT +""" +output redirection +""" + +ida_pro.IOREDIR_QUOTED +""" +the file name was quoted +""" + +ida_pro.MAXSTR +""" +maximum string size +""" + +ida_pro.SUBSTCHAR +""" +default char, used if a char cannot be represented in a codepage +""" + +ida_pro.__MF__ +""" +byte sex of our platform (Most significant byte First). 0: little +endian (Intel 80x86). 1: big endian (PowerPC). +""" +=== ida_pro EPYDOC INJECTIONS END === +Help on function forget_problem in module ida_problems: + +forget_problem(*args) -> 'bool' + forget_problem(type, ea) -> bool + + + Remove an address from a problem list + + @param type: problem list type (C++: problist_id_t) + @param ea: linear address (C++: ea_t) + @return: success + +Help on function get_problem in module ida_problems: + +get_problem(*args) -> 'ea_t' + get_problem(type, lowea) -> ea_t + + + Get an address from the specified problem list. The address is not + removed from the list. + + @param type: problem list type (C++: problist_id_t) + @param lowea: the returned address will be higher or equal than the + specified address (C++: ea_t) + @return: linear address or BADADDR + +Help on function get_problem_desc in module ida_problems: + +get_problem_desc(*args) -> 'qstring *' + get_problem_desc(t, ea) -> str + + + Get the human-friendly description of the problem, if one was provided + to remember_problem. + + @param t: problem list type. (C++: problist_id_t) + @param ea: linear address. (C++: ea_t) + @return: the message length or -1 if none + +Help on function get_problem_name in module ida_problems: + +get_problem_name(*args) -> 'char const *' + get_problem_name(type, longname=True) -> char const * + + + Get problem list description. + + + @param type (C++: problist_id_t) + @param longname (C++: bool) + +Help on function is_problem_present in module ida_problems: + +is_problem_present(*args) -> 'bool' + is_problem_present(t, ea) -> bool + + + Check if the specified address is present in the problem list. + + + @param t (C++: problist_id_t) + @param ea (C++: ea_t) + +Help on function remember_problem in module ida_problems: + +remember_problem(*args) -> 'void' + remember_problem(type, ea, msg=None) + + + Insert an address to a list of problems. Display a message saying + about the problem (except of 'PR_ATTN' , 'PR_FINAL' ) 'PR_JUMP' is + temporarily ignored. + + @param type: problem list type (C++: problist_id_t) + @param ea: linear address (C++: ea_t) + @param msg: a user-friendly message to be displayed instead of the + default more generic one associated with the type of + problem. Defaults to NULL. (C++: const char *) + +Help on function was_ida_decision in module ida_problems: + +was_ida_decision(*args) -> 'bool' + was_ida_decision(ea) -> bool + +Help on class array_of_rangesets in module ida_range: + +class array_of_rangesets(builtins.object) + | Proxy of C++ qvector< rangeset_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'rangeset_t const &' + | __getitem__(self, i) -> rangeset_t + | + | __init__(self, *args) + | __init__(self) -> array_of_rangesets + | __init__(self, x) -> array_of_rangesets + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_array_of_rangesets(...) + | delete_array_of_rangesets(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'rangeset_t const &' + | at(self, _idx) -> rangeset_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< rangeset_t >::const_iterator' + | begin(self) -> rangeset_t + | begin(self) -> rangeset_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< rangeset_t >::const_iterator' + | end(self) -> rangeset_t + | end(self) -> rangeset_t + | + | erase(self, *args) -> 'qvector< rangeset_t >::iterator' + | erase(self, it) -> rangeset_t + | erase(self, first, last) -> rangeset_t + | + | extract(self, *args) -> 'rangeset_t *' + | extract(self) -> rangeset_t + | + | find(self, *args) -> 'qvector< rangeset_t >::const_iterator' + | find(self, x) -> rangeset_t + | find(self, x) -> rangeset_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=rangeset_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< rangeset_t >::iterator' + | insert(self, it, x) -> rangeset_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'rangeset_t &' + | push_back(self, x) + | push_back(self) -> rangeset_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class range_t in module ida_range: + +class range_t(builtins.object) + | Proxy of C++ range_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> range_t + | __init__(self, ea1, ea2) -> range_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_range_t(...) + | delete_range_t(self) + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function range_t_print in module ida_range: + +range_t_print(*args) -> 'size_t' + range_t_print(cb) -> str + + + Helper function. Should not be called directly! + +Help on class rangeset_t in module ida_range: + +class rangeset_t(builtins.object) + | Proxy of C++ rangeset_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, aset) -> bool + | + | __getitem__(self, idx) + | + | __init__(self, *args) + | __init__(self) -> rangeset_t + | __init__(self, range) -> rangeset_t + | __init__(self, ivs) -> rangeset_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = nranges(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, aset) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_rangeset_t(...) + | delete_rangeset_t(self) + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | add(self, *args) -> 'bool' + | add(self, range) -> bool + | add(self, start, _end) -> bool + | add(self, aset) -> bool + | + | begin(self, *args) -> 'rangeset_t::iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | cached_range(self, *args) -> 'range_t const *' + | cached_range(self) -> range_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, aset) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'rangeset_t::iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | find_range(self, *args) -> 'range_t const *' + | find_range(self, ea) -> range_t + | + | getrange(self, *args) -> 'range_t const &' + | getrange(self, idx) -> range_t + | + | has_common(self, *args) -> 'bool' + | has_common(self, range) -> bool + | has_common(self, aset) -> bool + | + | includes(self, *args) -> 'bool' + | includes(self, range) -> bool + | + | intersect(self, *args) -> 'bool' + | intersect(self, aset) -> bool + | + | is_equal(self, *args) -> 'bool' + | is_equal(self, aset) -> bool + | + | is_subset_of(self, *args) -> 'bool' + | is_subset_of(self, aset) -> bool + | + | lastrange(self, *args) -> 'range_t const &' + | lastrange(self) -> range_t + | + | next_addr(self, *args) -> 'ea_t' + | next_addr(self, ea) -> ea_t + | + | next_range(self, *args) -> 'ea_t' + | next_range(self, ea) -> ea_t + | + | nranges(self, *args) -> 'size_t' + | nranges(self) -> size_t + | + | prev_addr(self, *args) -> 'ea_t' + | prev_addr(self, ea) -> ea_t + | + | prev_range(self, *args) -> 'ea_t' + | prev_range(self, ea) -> ea_t + | + | sub(self, *args) -> 'bool' + | sub(self, range) -> bool + | sub(self, ea) -> bool + | sub(self, aset) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class rangevec_base_t in module ida_range: + +class rangevec_base_t(builtins.object) + | Proxy of C++ qvector< range_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __init__(self, *args) + | __init__(self) -> rangevec_base_t + | __init__(self, x) -> rangevec_base_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_rangevec_base_t(...) + | delete_rangevec_base_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class rangevec_t in module ida_range: + +class rangevec_t(rangevec_base_t) + | Proxy of C++ rangevec_t class. + | + | Method resolution order: + | rangevec_t + | rangevec_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rangevec_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_rangevec_t(...) + | delete_rangevec_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from rangevec_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from rangevec_base_t: + | + | __hash__ = None + +Help on function reg_data_type in module ida_registry: + +reg_data_type(*args) -> 'regval_type_t' + reg_data_type(name, subkey=None) -> regval_type_t + + + Get data type of a given value. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: false if the [key+]value doesn't exist + +Help on function reg_delete in module ida_registry: + +reg_delete(*args) -> 'bool' + reg_delete(name, subkey=None) -> bool + + + Delete a value from the registry. + + @param name: value name (C++: const char *) + @param subkey: parent key (C++: const char *) + @return: success + +Help on function reg_delete_subkey in module ida_registry: + +reg_delete_subkey(*args) -> 'bool' + reg_delete_subkey(name) -> bool + + + Delete a key from the registry. + + + @param name (C++: const char *) + +Help on function reg_delete_tree in module ida_registry: + +reg_delete_tree(*args) -> 'bool' + reg_delete_tree(name) -> bool + + + Delete a subtree from the registry. + + + @param name (C++: const char *) + +Help on function reg_exists in module ida_registry: + +reg_exists(*args) -> 'bool' + reg_exists(name, subkey=None) -> bool + + + Is there already a value with the given name? + + @param name: value name (C++: const char *) + @param subkey: parent key (C++: const char *) + +Help on function reg_flush in module ida_registry: + +reg_flush(*args) -> 'void' + reg_flush() + +Help on function reg_load in module ida_registry: + +reg_load(*args) -> 'void' + reg_load() + +Help on function reg_read_binary in module ida_registry: + +reg_read_binary(*args) -> 'PyObject *' + reg_read_binary(name, subkey=None) -> PyObject * + + + Read binary data from the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: false if 'data' is not large enough to hold all data present. + in this case 'data' is left untouched. + +Help on function reg_read_bool in module ida_registry: + +reg_read_bool(*args) -> 'bool' + reg_read_bool(name, defval, subkey=None) -> bool + + + Read boolean value from the registry. + + @param name: value name (C++: const char *) + @param defval: default value (C++: bool) + @param subkey: key name (C++: const char *) + @return: boolean read from registry, or 'defval' if the read failed + +Help on function reg_read_int in module ida_registry: + +reg_read_int(*args) -> 'int' + reg_read_int(name, defval, subkey=None) -> int + + + Read integer value from the registry. + + @param name: value name (C++: const char *) + @param defval: default value (C++: int) + @param subkey: key name (C++: const char *) + @return: the value read from the registry, or 'defval' if the read + failed + +Help on function reg_read_string in module ida_registry: + +reg_read_string(*args) -> 'PyObject *' + reg_read_string(name, subkey=None, _def=None) -> PyObject * + + + Read a string from the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + @return: success + +Help on function reg_read_strlist in module ida_registry: + +reg_read_strlist(*args) -> 'qstrvec_t *' + reg_read_strlist(subkey) + + + Retrieve all string values associated with the given key. Also see + 'reg_update_strlist()' . + + @param subkey (C++: const char *) + +Help on function reg_subkey_exists in module ida_registry: + +reg_subkey_exists(*args) -> 'bool' + reg_subkey_exists(name) -> bool + + + Is there already a key with the given name? + + + @param name (C++: const char *) + +Help on function reg_subkey_subkeys in module ida_registry: + +reg_subkey_subkeys(*args) -> 'PyObject *' + reg_subkey_subkeys(name) -> PyObject * + + + Get all subkey names of given key. + + + @param name (C++: const char *) + +Help on function reg_subkey_values in module ida_registry: + +reg_subkey_values(*args) -> 'PyObject *' + reg_subkey_values(name) -> PyObject * + + + Get all value names under given key. + + + @param name (C++: const char *) + +Help on function reg_update_filestrlist in module ida_registry: + +reg_update_filestrlist(*args) -> 'void' + reg_update_filestrlist(subkey, add, maxrecs, rem=None) + + + Update registry with a file list. Case sensitivity will vary depending + on the target OS.'add' and 'rem' must be UTF-8, just like for regular + string operations. + + @param subkey (C++: const char *) + @param add (C++: const char *) + @param maxrecs (C++: size_t) + @param rem (C++: const char *) + +Help on function reg_update_strlist in module ida_registry: + +reg_update_strlist(*args) -> 'void' + reg_update_strlist(subkey, add, maxrecs, rem=None, ignorecase=False) + + + Update list of strings associated with given key. + + @param subkey: key name (C++: const char *) + @param add: string to be added to list, can be NULL (C++: const char + *) + @param maxrecs: limit list to this size (C++: size_t) + @param rem: string to be removed from list, can be NULL (C++: const + char *) + @param ignorecase: ignore case for 'add' and 'rem' (C++: bool) + +Help on function reg_write_binary in module ida_registry: + +reg_write_binary(*args) -> 'PyObject *' + reg_write_binary(name, py_bytes, subkey=None) -> PyObject * + + + Write binary data to the registry. + + @param name: value name (C++: const char *) + @param subkey: key name (C++: const char *) + +Help on function reg_write_bool in module ida_registry: + +reg_write_bool(*args) -> 'void' + reg_write_bool(name, value, subkey=None) + + + Write boolean value to the registry. + + @param name: value name (C++: const char *) + @param value: boolean to write (nonzero = true) (C++: int) + @param subkey: key name (C++: const char *) + +Help on function reg_write_int in module ida_registry: + +reg_write_int(*args) -> 'void' + reg_write_int(name, value, subkey=None) + + + Write integer value to the registry. + + @param name: value name (C++: const char *) + @param value: value to write (C++: int) + @param subkey: key name (C++: const char *) + +Help on function reg_write_string in module ida_registry: + +reg_write_string(*args) -> 'void' + reg_write_string(name, utf8, subkey=None) + + + Write a string to the registry. + + @param name: value name (C++: const char *) + @param utf8: utf8-encoded string (C++: const char *) + @param subkey: key name (C++: const char *) + +=== ida_registry EPYDOC INJECTIONS === +ida_registry.ROOT_KEY_NAME +""" +Key used to store IDA settings in registry (Windows version).this name +is automatically prepended to all key names passed to functions in +this file. +""" +=== ida_registry EPYDOC INJECTIONS END === +Help on function find_binary in module ida_search: + +find_binary(*args) -> 'ea_t' + find_binary(arg1, arg2, arg3, arg4, arg5) -> ea_t + +Help on function find_code in module ida_search: + +find_code(*args) -> 'ea_t' + find_code(ea, sflag) -> ea_t + + + Find next code address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_data in module ida_search: + +find_data(*args) -> 'ea_t' + find_data(ea, sflag) -> ea_t + + + Find next data address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_defined in module ida_search: + +find_defined(*args) -> 'ea_t' + find_defined(ea, sflag) -> ea_t + + + Find next ea that is the start of an instruction or data. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_error in module ida_search: + +find_error(*args) -> 'int *' + find_error(ea, sflag) -> ea_t + + + Find next error or problem. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_imm in module ida_search: + +find_imm(*args) -> 'int *' + find_imm(newEA, sflag, srchValue) -> ea_t + + + Find next immediate operand with the given value. + + + @param newEA (C++: ea_t) + @param sflag (C++: int) + @param srchValue (C++: uval_t) + +Help on function find_not_func in module ida_search: + +find_not_func(*args) -> 'ea_t' + find_not_func(ea, sflag) -> ea_t + + + Find next code address that does not belong to a function. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_notype in module ida_search: + +find_notype(*args) -> 'int *' + find_notype(ea, sflag) -> ea_t + + + Find next operand without any type info. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_suspop in module ida_search: + +find_suspop(*args) -> 'int *' + find_suspop(ea, sflag) -> ea_t + + + Find next suspicious operand. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_text in module ida_search: + +find_text(*args) -> 'ea_t' + find_text(start_ea, y, x, ustr, sflag) -> ea_t + + + See 'search()' + + + @param start_ea (C++: ea_t) + @param y (C++: int) + @param x (C++: int) + @param ustr (C++: const char *) + @param sflag (C++: int) + +Help on function find_unknown in module ida_search: + +find_unknown(*args) -> 'ea_t' + find_unknown(ea, sflag) -> ea_t + + + Find next unexplored address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function search_down in module ida_search: + +search_down(*args) -> 'bool' + search_down(sflag) -> bool + + + Is the 'SEARCH_DOWN' bit set? + + + @param sflag (C++: int) + +=== ida_search EPYDOC INJECTIONS === +ida_search.SEARCH_BRK +""" +return 'BADADDR' if Ctrl-Break wass pressed during search +""" + +ida_search.SEARCH_CASE +""" +case-sensitive search (case-insensitive otherwise) +""" + +ida_search.SEARCH_DOWN +""" +search towards higher addresses +""" + +ida_search.SEARCH_IDENT +""" +search for an identifier (text search). it means that the characters +before and after the match cannot be is_visible_char(). +""" + +ida_search.SEARCH_NEXT +""" +for other find_.. functions it is implicitly set + +useful only for 'search()' and find_binary(). +""" + +ida_search.SEARCH_NOBRK +""" +don't test for ctrl-break to interrupt the search +""" + +ida_search.SEARCH_NOSHOW +""" +don't display the search progress/refresh screen +""" + +ida_search.SEARCH_REGEX +""" +regular expressions in search string (only supported for txt search) +""" + +ida_search.SEARCH_UP +""" +search towards lower addresses +""" +=== ida_search EPYDOC INJECTIONS END === +Help on function add_segm in module ida_segment: + +add_segm(*args) -> 'bool' + add_segm(para, start, end, name, sclass, flags=0) -> bool + + + Add a new segment, second form. Segment alignment is set to + 'saRelByte' . Segment combination is "public" or "stack" (if segment + class is "STACK"). Addressing mode of segment is taken as default + (16bit or 32bit). Default segment registers are set to 'BADSEL' . If a + segment already exists at the specified range of addresses, this + segment will be truncated. Instructions and data in the old segment + will be deleted if the new segment has another addressing mode or + another segment base address. + + @param para: segment base paragraph. if paragraph can't fit in 16bit, + then a new selector is allocated and mapped to the + paragraph. (C++: ea_t) + @param start: start address of the segment. if start== BADADDR then + start <- to_ea(para,0). (C++: ea_t) + @param end: end address of the segment. end address should be higher + than start address. For emulate empty segments, use + SEG_NULL segment type. If the end address is lower than + start address, then fail. If end== BADADDR , then a + segment up to the next segment will be created (if the + next segment doesn't exist, then 1 byte segment will be + created). If 'end' is too high and the new segment would + overlap the next segment, 'end' is adjusted properly. + (C++: ea_t) + @param name: name of new segment. may be NULL (C++: const char *) + @param sclass: class of the segment. may be NULL. type of the new + segment is modified if class is one of predefined + names: "CODE" -> SEG_CODE "DATA" -> SEG_DATA + "CONST" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> + SEG_BSS "XTRN" -> SEG_XTRN "COMM" -> SEG_COMM + "ABS" -> SEG_ABSSYM (C++: const char *) + @param flags (C++: int) + +Help on function add_segm_ex in module ida_segment: + +add_segm_ex(*args) -> 'bool' + add_segm_ex(s, name, sclass, flags) -> bool + + + Add a new segment. If a segment already exists at the specified range + of addresses, this segment will be truncated. Instructions and data in + the old segment will be deleted if the new segment has another + addressing mode or another segment base address. + + @param s: pointer to filled segment structure. segment selector should + have proper mapping (see set_selector() ). if + s.start_ea== BADADDR then s.start_ea <- get_segm_base(&s) + if s.end_ea== BADADDR , then a segment up to the next + segment will be created (if the next segment doesn't exist, + then 1 byte segment will be created). if the s.end_ea < + s.start_ea, then fail. if s.end_ea is too high and the new + segment would overlap the next segment, s.end_ea is adjusted + properly. (C++: segment_t *) + @param name: name of new segment. may be NULL. if specified, the + segment is immediately renamed (C++: const char *) + @param sclass: class of the segment. may be NULL. if specified, the + segment class is immediately changed (C++: const char + *) + @param flags: Add segment flags (C++: int) + +Help on function add_segment_translation in module ida_segment: + +add_segment_translation(*args) -> 'bool' + add_segment_translation(segstart, mappedseg) -> bool + + + Add segment translation. + + @param segstart: start address of the segment to add translation to + (C++: ea_t) + @param mappedseg: start address of the overlayed segment (C++: ea_t) + +Help on function allocate_selector in module ida_segment: + +allocate_selector(*args) -> 'sel_t' + allocate_selector(segbase) -> sel_t + + + Allocate a selector for a segment unconditionally. You must call this + function before calling 'add_segm_ex()' . 'add_segm()' calls this + function itself, so you don't need to allocate a selector. This + function will allocate a new free selector and setup its mapping using + 'find_free_selector()' and 'set_selector()' functions. + + @param segbase: a new segment base paragraph (C++: ea_t) + @return: the allocated selector number + +Help on function change_segment_status in module ida_segment: + +change_segment_status(*args) -> 'int' + change_segment_status(s, is_deb_segm) -> int + + + Convert a debugger segment to a regular segment and vice versa. When + converting debug->regular, the memory contents will be copied to the + database. + + @param s: segment to modify (C++: segment_t *) + @param is_deb_segm: new status of the segment (C++: bool) + @return: Change segment status result codes + +Help on function del_segm in module ida_segment: + +del_segm(*args) -> 'bool' + del_segm(ea, flags) -> bool + + + Delete a segment. + + @param ea: any address belonging to the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function del_segment_translations in module ida_segment: + +del_segment_translations(*args) -> 'void' + del_segment_translations(segstart) + + + Delete the translation list + + @param segstart: start address of the segment to delete translation + list (C++: ea_t) + +Help on function del_selector in module ida_segment: + +del_selector(*args) -> 'void' + del_selector(selector) + + + Delete mapping of a selector. Be wary of deleting selectors that are + being used in the program, this can make a mess in the segments. + + @param selector: number of selector to remove from the translation + table (C++: sel_t) + +Help on function find_free_selector in module ida_segment: + +find_free_selector(*args) -> 'sel_t' + find_free_selector() -> sel_t + + + Find first unused selector. + + @return: a number >= 1 + +Help on function find_selector in module ida_segment: + +find_selector(*args) -> 'sel_t' + find_selector(base) -> sel_t + + + Find a selector that has mapping to the specified paragraph. + + @param base: paragraph to search in the translation table (C++: ea_t) + @return: selector value or base + +Help on function get_defsr in module ida_segment: + +get_defsr(*args) -> 'sel_t' + get_defsr(s, reg) -> sel_t + +Help on function get_first_seg in module ida_segment: + +get_first_seg(*args) -> 'segment_t *' + get_first_seg() -> segment_t + + + Get pointer to the first segment. + +Help on function get_group_selector in module ida_segment: + +get_group_selector(*args) -> 'sel_t' + get_group_selector(grpsel) -> sel_t + + + Get common selector for a group of segments. + + @param grpsel: selector of group segment (C++: sel_t) + @return: common selector of the group or 'grpsel' if no such group is + found + +Help on function get_last_seg in module ida_segment: + +get_last_seg(*args) -> 'segment_t *' + get_last_seg() -> segment_t + + + Get pointer to the last segment. + +Help on function get_next_seg in module ida_segment: + +get_next_seg(*args) -> 'segment_t *' + get_next_seg(ea) -> segment_t + + + Get pointer to the next segment. + + + @param ea (C++: ea_t) + +Help on function get_prev_seg in module ida_segment: + +get_prev_seg(*args) -> 'segment_t *' + get_prev_seg(ea) -> segment_t + + + Get pointer to the previous segment. + + + @param ea (C++: ea_t) + +Help on function get_segm_base in module ida_segment: + +get_segm_base(*args) -> 'ea_t' + get_segm_base(s) -> ea_t + + + Get segment base linear address. Segment base linear address is used + to calculate virtual addresses. The virtual address of the first byte + of the segment will be (start address of segment - segment base linear + address) + + @param s: pointer to segment (C++: const segment_t *) + @return: 0 if s == NULL, otherwise segment base linear address + +Help on function get_segm_by_name in module ida_segment: + +get_segm_by_name(*args) -> 'segment_t *' + get_segm_by_name(name) -> segment_t + + + Get pointer to segment by its name. If there are several segments with + the same name, returns the first of them. + + @param name: segment name. may be NULL. (C++: const char *) + @return: NULL or pointer to segment structure + +Help on function get_segm_by_sel in module ida_segment: + +get_segm_by_sel(*args) -> 'segment_t *' + get_segm_by_sel(selector) -> segment_t + + + Get pointer to segment structure. This function finds a segment by its + selector. If there are several segments with the same selectors, the + last one will be returned. + + @param selector: a segment with the specified selector will be + returned (C++: sel_t) + @return: pointer to segment or NULL + +Help on function get_segm_class in module ida_segment: + +get_segm_class(*args) -> 'qstring *' + get_segm_class(s) -> str + + + Get segment class. Segment class is arbitrary text (max 8 characters). + + @param s: pointer to segment (C++: const segment_t *) + @return: size of segment class (-1 if s==NULL or bufsize<=0) + +Help on function get_segm_name in module ida_segment: + +get_segm_name(*args) -> 'qstring *' + get_segm_name(s, flags=0) -> str + + + Get true segment name by pointer to segment. + + @param s: pointer to segment (C++: const segment_t *) + @param flags: 0-return name as is; 1-substitute bad symbols with _ 1 + corresponds to GN_VISIBLE (C++: int) + @return: size of segment name (-1 if s==NULL) + +Help on function get_segm_num in module ida_segment: + +get_segm_num(*args) -> 'int' + get_segm_num(ea) -> int + + + Get number of segment by address. + + @param ea: linear address belonging to the segment (C++: ea_t) + @return: -1 if no segment occupies the specified address. otherwise + returns number of the specified segment (0.. get_segm_qty() + -1) + +Help on function get_segm_para in module ida_segment: + +get_segm_para(*args) -> 'ea_t' + get_segm_para(s) -> ea_t + + + Get segment base paragraph. Segment base paragraph may be converted to + segment base linear address using 'to_ea()' function. In fact, + to_ea(get_segm_para(s), 0) == get_segm_base(s). + + @param s: pointer to segment (C++: const segment_t *) + @return: 0 if s == NULL, the segment base paragraph + +Help on function get_segm_qty in module ida_segment: + +get_segm_qty(*args) -> 'int' + get_segm_qty() -> int + + + Get number of segments. + +Help on function get_segment_alignment in module ida_segment: + +get_segment_alignment(*args) -> 'char const *' + get_segment_alignment(align) -> char const * + + + Get text representation of segment alignment code. + + @param align (C++: uchar) + @return: text digestable by IBM PC assembler. + +Help on function get_segment_cmt in module ida_segment: + +get_segment_cmt(*args) -> 'qstring *' + get_segment_cmt(s, repeatable) -> str + + + Get segment comment. + + @param s: pointer to segment structure (C++: const segment_t *) + @param repeatable: 0: get regular comment. 1: get repeatable comment. + (C++: bool) + @return: size of comment or -1 + +Help on function get_segment_combination in module ida_segment: + +get_segment_combination(*args) -> 'char const *' + get_segment_combination(comb) -> char const * + + + Get text representation of segment combination code. + + @param comb (C++: uchar) + @return: text digestable by IBM PC assembler. + +Help on function get_segment_translations in module ida_segment: + +get_segment_translations(*args) -> 'ssize_t' + get_segment_translations(transmap, segstart) -> ssize_t + + + Get segment translation list. + + @param transmap: vector of segment start addresses for the translation + list (C++: eavec_t *) + @param segstart: start address of the segment to get information about + (C++: ea_t) + @return: -1 if no translation list or bad segstart. otherwise returns + size of translation list. + +Help on function get_selector_qty in module ida_segment: + +get_selector_qty(*args) -> 'int' + get_selector_qty() -> int + + + Get number of defined selectors. + +Help on function get_visible_segm_name in module ida_segment: + +get_visible_segm_name(*args) -> 'qstring *' + get_visible_segm_name(s) -> str + + + Get segment name by pointer to segment. + + @param s: pointer to segment (C++: const segment_t *) + @return: size of segment name (-1 if s==NULL) + +Help on function getn_selector in module ida_segment: + +getn_selector(*args) -> 'sel_t *, ea_t *' + getn_selector(n) -> bool + + + Get description of selector (0.. 'get_selector_qty()' -1) + + + @param n (C++: int) + +Help on function getnseg in module ida_segment: + +getnseg(*args) -> 'segment_t *' + getnseg(n) -> segment_t + + + Get pointer to segment by its number.Obsoleted because it can slow + down the debugger (it has to refresh the whole memory segmentation to + calculate the correct answer) + + @param n: segment number in the range (0.. get_segm_qty() -1) (C++: + int) + @return: NULL or pointer to segment structure + +Help on function getseg in module ida_segment: + +getseg(*args) -> 'segment_t *' + getseg(ea) -> segment_t + + + Get pointer to segment by linear address. + + @param ea: linear address belonging to the segment (C++: ea_t) + @return: NULL or pointer to segment structure + +Help on function is_finally_visible_segm in module ida_segment: + +is_finally_visible_segm(*args) -> 'bool' + is_finally_visible_segm(s) -> bool + + + See 'SFL_HIDDEN' , 'SCF_SHHID_SEGM' . + + + @param s (C++: segment_t *) + +Help on function is_miniidb in module ida_segment: + +is_miniidb(*args) -> 'bool' + is_miniidb() -> bool + + + Is the database a miniidb created by the debugger?. + + @return: true if the database contains no segments or only debugger + segments + +Help on function is_segm_locked in module ida_segment: + +is_segm_locked(*args) -> 'bool' + is_segm_locked(segm) -> bool + + + Is a segment pointer locked? + + + @param segm (C++: const segment_t *) + +Help on function is_spec_ea in module ida_segment: + +is_spec_ea(*args) -> 'bool' + is_spec_ea(ea) -> bool + + + Does the address belong to a segment with a special type?. ( + 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , 'SEG_COMM' ) + + @param ea: linear address (C++: ea_t) + +Help on function is_spec_segm in module ida_segment: + +is_spec_segm(*args) -> 'bool' + is_spec_segm(seg_type) -> bool + + + Has segment a special type?. ( 'SEG_XTRN' , 'SEG_GRP' , 'SEG_ABSSYM' , + 'SEG_COMM' ) + + @param seg_type (C++: uchar) + +Help on function is_visible_segm in module ida_segment: + +is_visible_segm(*args) -> 'bool' + is_visible_segm(s) -> bool + + + See 'SFL_HIDDEN' . + + + @param s (C++: segment_t *) + +Help on function lock_segm in module ida_segment: + +lock_segm(*args) -> 'void' + lock_segm(segm, lock) + + + Lock segment pointer Locked pointers are guaranteed to remain valid + until they are unlocked. Ranges with locked pointers cannot be deleted + or moved. + + @param segm (C++: const segment_t *) + @param lock (C++: bool) + +Help on class lock_segment in module ida_segment: + +class lock_segment(builtins.object) + | Proxy of C++ lock_segment class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _segm) -> lock_segment + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lock_segment(...) + | delete_lock_segment(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 + +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. + + @param s: segment to move (C++: segment_t *) + @param to: new segment start address (C++: ea_t) + @param flags: Move segment flags (C++: int) + @return: Move segment result codes + +Help on function move_segm_start in module ida_segment: + +move_segm_start(*args) -> 'bool' + move_segm_start(ea, newstart, mode) -> bool + + + Move segment start. The main difference between this function and + 'set_segm_start()' is that this function may expand the previous + segment while 'set_segm_start()' never does it. So, this function + allows to change bounds of two segments simultaneously. If the + previous segment and the specified segment have the same addressing + mode and segment base, then instructions and data are not destroyed - + they simply move from one segment to another. Otherwise all + instructions/data which migrate from one segment to another are + destroyed.this function never disables addresses. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newstart: new start address of the segment note that segment + start address should be higher than segment base + linear address. (C++: ea_t) + @param mode: policy for destroying defined items 0: if it is + necessary to destroy defined items, display a dialog box + and ask confirmation 1: if it is necessary to destroy + defined items, just destroy them without asking the user + -1: if it is necessary to destroy defined items, don't + destroy them (i.e. function will fail) -2: don't + destroy defined items (function will succeed) (C++: int) + +Help on function rebase_program in module ida_segment: + +rebase_program(*args) -> 'int' + rebase_program(delta, flags) -> int + + + Rebase the whole program by 'delta' bytes. + + @param delta: number of bytes to move the program (C++: adiff_t) + @param flags: Move segment flags it is recommended to use + MSF_FIXONCE so that the loader takes care of global + variables it stored in the database (C++: int) + @return: Move segment result codes + +Help on function segm_adjust_diff in module ida_segment: + +segm_adjust_diff(*args) -> 'adiff_t' + segm_adjust_diff(s, delta) -> adiff_t + + + Truncate and sign extend a delta depending on the segment. + + + @param s (C++: const segment_t *) + @param delta (C++: adiff_t) + +Help on function segm_adjust_ea in module ida_segment: + +segm_adjust_ea(*args) -> 'ea_t' + segm_adjust_ea(s, ea) -> ea_t + + + Truncate an address depending on the segment. + + + @param s (C++: const segment_t *) + @param ea (C++: ea_t) + +Help on class segment_t in module ida_segment: + +class segment_t(ida_range.range_t) + | Proxy of C++ segment_t class. + | + | Method resolution order: + | segment_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> segment_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_segment_t(...) + | delete_segment_t(self) + | + | abits(self, *args) -> 'int' + | abits(self) -> int + | + | abytes(self, *args) -> 'int' + | abytes(self) -> int + | + | clr_comorg(self, *args) -> 'void' + | clr_comorg(self) + | + | clr_ob_ok(self, *args) -> 'void' + | clr_ob_ok(self) + | + | comorg(self, *args) -> 'bool' + | comorg(self) -> bool + | + | is_header_segm(self, *args) -> 'bool' + | is_header_segm(self) -> bool + | + | is_hidden_segtype(self, *args) -> 'bool' + | is_hidden_segtype(self) -> bool + | + | is_loader_segm(self, *args) -> 'bool' + | is_loader_segm(self) -> bool + | + | is_visible_segm(self, *args) -> 'bool' + | is_visible_segm(self) -> bool + | + | ob_ok(self, *args) -> 'bool' + | ob_ok(self) -> bool + | + | set_comorg(self, *args) -> 'void' + | set_comorg(self) + | + | set_debugger_segm(self, *args) -> 'void' + | set_debugger_segm(self, debseg) + | + | set_header_segm(self, *args) -> 'void' + | set_header_segm(self, on) + | + | set_hidden_segtype(self, *args) -> 'void' + | set_hidden_segtype(self, hide) + | + | set_loader_segm(self, *args) -> 'void' + | set_loader_segm(self, ldrseg) + | + | set_ob_ok(self, *args) -> 'void' + | set_ob_ok(self) + | + | set_visible_segm(self, *args) -> 'void' + | set_visible_segm(self, visible) + | + | update(self, *args) -> 'bool' + | update(self) -> bool + | + | use32(self, *args) -> 'bool' + | use32(self) -> bool + | + | use64(self, *args) -> 'bool' + | use64(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | align + | segment_t_align_get(self) -> uchar + | + | bitness + | segment_t_bitness_get(self) -> uchar + | + | color + | segment_t_color_get(self) -> bgcolor_t + | + | comb + | segment_t_comb_get(self) -> uchar + | + | defsr + | segment_t_defsr_get(self) -> sel_t [16] + | + | end_ea + | segment_t_end_ea_get(self) -> ea_t + | + | flags + | segment_t_flags_get(self) -> ushort + | + | name + | segment_t_name_get(self) -> uval_t + | + | orgbase + | segment_t_orgbase_get(self) -> uval_t + | + | perm + | segment_t_perm_get(self) -> uchar + | + | sclass + | segment_t_sclass_get(self) -> uval_t + | + | sel + | segment_t_sel_get(self) -> sel_t + | + | start_ea + | segment_t_start_ea_get(self) -> ea_t + | + | thisown + | The membership flag + | + | type + | segment_t_type_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | startEA + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +Help on function segtype in module ida_segment: + +segtype(*args) -> 'uchar' + segtype(ea) -> uchar + + + Get segment type. + + @param ea: any linear address within the segment (C++: ea_t) + @return: Segment types , SEG_UNDF if no segment found at 'ea' + +Help on function sel2ea in module ida_segment: + +sel2ea(*args) -> 'ea_t' + sel2ea(selector) -> ea_t + + + Get mapping of a selector as a linear address. + + @param selector: number of selector to translate to linear address + (C++: sel_t) + @return: linear address the specified selector is mapped to. if there + is no mapping, returns to_ea(selector,0); + +Help on function sel2para in module ida_segment: + +sel2para(*args) -> 'ea_t' + sel2para(selector) -> ea_t + + + Get mapping of a selector. + + @param selector: number of selector to translate (C++: sel_t) + @return: paragraph the specified selector is mapped to. if there is no + mapping, returns 'selector'. + +Help on function set_defsr in module ida_segment: + +set_defsr(*args) -> 'void' + set_defsr(s, reg, value) + +Help on function set_group_selector in module ida_segment: + +set_group_selector(*args) -> 'int' + set_group_selector(grp, sel) -> int + + + Initialize groups. The kernel calls this function at the start of + work.Create a new group of segments (used OMF files). + + @param grp: selector of group segment (segment type is SEG_GRP ) You + should create an 'empty' (1 byte) group segment It won't + contain anything and will be used to redirect references + to the group of segments to the common selector. (C++: + sel_t) + @param sel: common selector of all segments belonging to the segment + You should create all segments within the group with the + same selector value. (C++: sel_t) + @return: 1 ok + +Help on function set_segm_addressing in module ida_segment: + +set_segm_addressing(*args) -> 'bool' + set_segm_addressing(s, bitness) -> bool + + + Change segment addressing mode (16, 32, 64 bits). You must use this + function to change segment addressing, never change the 'bitness' + field directly. This function will delete all instructions, comments + and names in the segment + + @param s: pointer to segment (C++: segment_t *) + @param bitness: new addressing mode of segment 2: 64bit segment 1: + 32bit segment 0: 16bit segment (C++: size_t) + @return: success + +Help on function set_segm_base in module ida_segment: + +set_segm_base(*args) -> 'bool' + set_segm_base(s, newbase) -> bool + + + Internal function. + + + @param s (C++: segment_t *) + @param newbase (C++: ea_t) + +Help on function set_segm_class in module ida_segment: + +set_segm_class(*args) -> 'int' + set_segm_class(s, sclass, flags=0) -> int + + + Set segment class. + + @param s: pointer to segment (may be NULL) (C++: segment_t *) + @param sclass: segment class (may be NULL). If segment type is + SEG_NORM and segment class is one of predefined names, + then segment type is changed to: "CODE" -> SEG_CODE + "DATA" -> SEG_DATA "STACK" -> SEG_BSS "BSS" -> + SEG_BSS if "UNK" then segment type is reset to + SEG_NORM . (C++: const char *) + @param flags (C++: int) + +Help on function set_segm_end in module ida_segment: + +set_segm_end(*args) -> 'bool' + set_segm_end(ea, newend, flags) -> bool + + + Set segment end address. The next segment is shrinked to allow + expansion of the specified segment. The kernel might even delete the + next segment if necessary. The kernel will ask the user for a + permission to destroy instructions or data going out of segment scope + if such instructions exist. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newend: new end address of the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function set_segm_name in module ida_segment: + +set_segm_name(*args) -> 'int' + set_segm_name(s, name, flags=0) -> int + + + Rename segment. The new name is validated (see validate_name). A + segment always has a name. If you hadn't specified a name, the kernel + will assign it "seg###" name where ### is segment number. + + @param s: pointer to segment (may be NULL) (C++: segment_t *) + @param name: new segment name (C++: const char *) + @param flags: ADDSEG_IDBENC or 0 (C++: int) + +Help on function set_segm_start in module ida_segment: + +set_segm_start(*args) -> 'bool' + set_segm_start(ea, newstart, flags) -> bool + + + Set segment start address. The previous segment is trimmed to allow + expansion of the specified segment. The kernel might even delete the + previous segment if necessary. The kernel will ask the user for a + permission to destroy instructions or data going out of segment scope + if such instructions exist. + + @param ea: any address belonging to the segment (C++: ea_t) + @param newstart: new start address of the segment note that segment + start address should be higher than segment base + linear address. (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function set_segment_cmt in module ida_segment: + +set_segment_cmt(*args) -> 'void' + set_segment_cmt(s, cmt, repeatable) + + + Set segment comment. + + @param s: pointer to segment structure (C++: const segment_t *) + @param cmt: comment string, may be multiline (with ' '). maximal size + is 4096 bytes. Use empty str ("") to delete comment (C++: + const char *) + @param repeatable: 0: set regular comment. 1: set repeatable comment. + (C++: bool) + +Help on function set_segment_translations in module ida_segment: + +set_segment_translations(*args) -> 'bool' + set_segment_translations(segstart, transmap) -> bool + + + Set new translation list. + + @param segstart: start address of the segment to add translation to + (C++: ea_t) + @param transmap: vector of segment start addresses for the translation + list. If transmap is empty, the translation list is + deleted. (C++: const eavec_t &) + +Help on function set_selector in module ida_segment: + +set_selector(*args) -> 'int' + set_selector(selector, paragraph) -> int + + + Set mapping of selector to a paragraph. You should call this + functionbeforecreating a segment which uses the selector, otherwise + the creation of the segment will fail. + + @param selector: number of selector to map if selector == BADSEL , + then return 0 (fail) if the selector has had a + mapping, old mapping is destroyed if the selector + number is equal to paragraph value, then the mapping + is destroyed because we don't need to keep trivial + mappings. (C++: sel_t) + @param paragraph: paragraph to map selector (C++: ea_t) + +Help on function set_visible_segm in module ida_segment: + +set_visible_segm(*args) -> 'void' + set_visible_segm(s, visible) + + + See 'SFL_HIDDEN' . + + + @param s (C++: segment_t *) + @param visible (C++: bool) + +Help on function setup_selector in module ida_segment: + +setup_selector(*args) -> 'sel_t' + setup_selector(segbase) -> sel_t + + + Allocate a selector for a segment if necessary. You must call this + function before calling 'add_segm_ex()' . 'add_segm()' calls this + function itself, so you don't need to allocate a selector. This + function will allocate a selector if 'segbase' requires more than 16 + bits and the current processor is IBM PC. Otherwise it will return the + segbase value. + + @param segbase: a new segment base paragraph (C++: ea_t) + @return: the allocated selector number + +Help on function std_out_segm_footer in module ida_segment: + +std_out_segm_footer(*args) -> 'void' + std_out_segm_footer(ctx, seg) + + + Generate segment footer line as a comment line. This function may be + used in IDP modules to generate segment footer if the target assembler + doesn't have 'ends' directive. + + @param ctx (C++: struct outctx_t &) + @param seg (C++: segment_t *) + +Help on function take_memory_snapshot in module ida_segment: + +take_memory_snapshot(*args) -> 'bool' + take_memory_snapshot(only_loader_segs) -> bool + + + Take a memory snapshot of the running process. + + @param only_loader_segs: only is_loader_segm() segments will be + affected (C++: bool) + @return: success + +Help on function update_segm in module ida_segment: + +update_segm(*args) -> 'bool' + update_segm(s) -> bool + +=== ida_segment EPYDOC INJECTIONS === +ida_segment.ADDSEG_FILLGAP +""" +fill gap between new segment and previous one. i.e. if such a gap +exists, and this gap is less than 64K, then fill the gap by extending +the previous segment and adding .align directive to it. This way we +avoid gaps between segments. too many gaps lead to a virtual array +failure. it cannot hold more than ~1000 gaps. +""" + +ida_segment.ADDSEG_IDBENC +""" +non-ASCII bytes will be decoded accordingly + +'name' and 'sclass' are given in the IDB encoding; +""" + +ida_segment.ADDSEG_NOAA +""" +do not mark new segment for auto-analysis +""" + +ida_segment.ADDSEG_NOSREG +""" +(undefine all default segment registers) + +set all default segment register values to 'BADSEL' +""" + +ida_segment.ADDSEG_NOTRUNC +""" +destroy/truncate old segments instead. + +don't truncate the new segment at the beginning of the next segment if +they overlap. +""" + +ida_segment.ADDSEG_OR_DIE +""" + 'qexit()' if can't add a segment +""" + +ida_segment.ADDSEG_QUIET +""" +silent mode, no "Adding segment..." in the messages window +""" + +ida_segment.ADDSEG_SPARSE +""" +use sparse storage method for the new segment +""" + +ida_segment.CSS_BREAK +""" +memory reading process stopped by user +""" + +ida_segment.CSS_NODBG +""" +debugger is not running +""" + +ida_segment.CSS_NOMEM +""" +is too big) + +not enough memory (might be because the segment +""" + +ida_segment.CSS_NORANGE +""" +could not find corresponding memory range +""" + +ida_segment.CSS_OK +""" +ok +""" + +ida_segment.MAX_GROUPS +""" +max number of segment groups +""" + +ida_segment.MAX_SEGM_TRANSLATIONS +""" +max number of segment translations +""" + +ida_segment.MOVE_SEGM_CHUNK +""" +Too many chunks are defined, can't move. +""" + +ida_segment.MOVE_SEGM_DEBUG +""" +Debugger segments cannot be moved. +""" + +ida_segment.MOVE_SEGM_IDP +""" +IDP module forbids moving the segment. +""" + +ida_segment.MOVE_SEGM_LOADER +""" +The segment has been moved but the loader complained. +""" + +ida_segment.MOVE_SEGM_ODD +""" +Cannot move segments by an odd number of bytes. +""" + +ida_segment.MOVE_SEGM_OK +""" +all ok +""" + +ida_segment.MOVE_SEGM_ORPHAN +""" +Orphan bytes hinder segment movement. +""" + +ida_segment.MOVE_SEGM_PARAM +""" +The specified segment does not exist. +""" + +ida_segment.MOVE_SEGM_ROOM +""" +Not enough free room at the target address. +""" + +ida_segment.MSF_FIXONCE +""" +valid for 'rebase_program()' . see 'loader_t::move_segm' . + +call loader only once with the special calling method. +""" + +ida_segment.MSF_LDKEEP +""" +keep the loader in the memory (optimization) +""" + +ida_segment.MSF_NETNODES +""" +valid for 'rebase_program()' + +move netnodes instead of changing inf.netdelta (this is slower) +""" + +ida_segment.MSF_NOFIX +""" +don't call the loader to fix relocations +""" + +ida_segment.MSF_PRIORITY +""" +valid for 'move_segm()' + +loader segments will overwrite any existing debugger segments when +moved. +""" + +ida_segment.MSF_SILENT +""" +don't display a "please wait" box on the screen +""" + +ida_segment.SEGMOD_KEEP +""" +keep information (code & data, etc) +""" + +ida_segment.SEGMOD_KEEP0 +""" +flag for internal use, don't set +""" + +ida_segment.SEGMOD_KEEPSEL +""" +do not try to delete unused selector +""" + +ida_segment.SEGMOD_KILL +""" +disable addresses if segment gets shrinked or deleted +""" + +ida_segment.SEGMOD_NOMOVE +""" +(for 'set_segm_start()' ) + +don't move info from the start of segment to the new start address +""" + +ida_segment.SEGMOD_SILENT +""" +be silent +""" + +ida_segment.SEGMOD_SPARSE +""" +(for 'set_segm_start()' , 'set_segm_end()' ) + +use sparse storage if extending the segment +""" + +ida_segment.SEGPERM_EXEC +""" +Execute. +""" + +ida_segment.SEGPERM_READ +""" +Read. +""" + +ida_segment.SEGPERM_WRITE +""" +Write. +""" + +ida_segment.SEG_ABSSYM +""" +segment with definitions of absolute symbols +""" + +ida_segment.SEG_BSS +""" +uninitialized segment +""" + +ida_segment.SEG_CODE +""" +code segment +""" + +ida_segment.SEG_COMM +""" +segment with communal definitions +""" + +ida_segment.SEG_DATA +""" +data segment +""" + +ida_segment.SEG_GRP +""" +group of segments +""" + +ida_segment.SEG_IMEM +""" +internal processor memory & sfr (8051) +""" + +ida_segment.SEG_IMP +""" +java: implementation segment +""" + +ida_segment.SEG_NORM +""" +unknown type, no assumptions +""" + +ida_segment.SEG_NULL +""" +zero-length segment +""" + +ida_segment.SEG_UNDF +""" +undefined segment type (not used) +""" + +ida_segment.SEG_XTRN +""" +no instructions are allowed + +segment with 'extern' definitions. +""" + +ida_segment.SFL_COMORG +""" +IDP dependent field (IBM PC: if set, ORG directive is not commented +out) +""" + +ida_segment.SFL_DEBUG +""" +Is the segment created for the debugger?. Such segments are temporary +and do not have permanent flags. +""" + +ida_segment.SFL_HEADER +""" +Header segment (do not create offsets to it in the disassembly) +""" + +ida_segment.SFL_HIDDEN +""" +Is the segment hidden? +""" + +ida_segment.SFL_HIDETYPE +""" +Hide segment type (do not print it in the listing) +""" + +ida_segment.SFL_LOADER +""" +Is the segment created by the loader? +""" + +ida_segment.SFL_OBOK +""" +Orgbase is present? (IDP dependent field) +""" + +ida_segment.SREG_NUM +""" +Maximum number of segment registers is 16 (see 'segregs.hpp' ) +""" + +ida_segment.saAbs +""" +Absolute segment. +""" + +ida_segment.saGroup +""" +Segment group. +""" + +ida_segment.saRel1024Bytes +""" +1024 bytes +""" + +ida_segment.saRel128Bytes +""" +128 bytes +""" + +ida_segment.saRel2048Bytes +""" +2048 bytes +""" + +ida_segment.saRel32Bytes +""" +32 bytes +""" + +ida_segment.saRel4K +""" +alignment. It is not supported by LINK. + +This value is used by the PharLap OMF for page (4K) +""" + +ida_segment.saRel512Bytes +""" +512 bytes +""" + +ida_segment.saRel64Bytes +""" +64 bytes +""" + +ida_segment.saRelByte +""" +Relocatable, byte aligned. +""" + +ida_segment.saRelDble +""" +boundary. + +Relocatable, aligned on a double word (4-byte) +""" + +ida_segment.saRelPage +""" +Relocatable, aligned on 256-byte boundary. +""" + +ida_segment.saRelPara +""" +Relocatable, paragraph (16-byte) aligned. +""" + +ida_segment.saRelQword +""" +8 bytes +""" + +ida_segment.saRelWord +""" +Relocatable, word (2-byte) aligned. +""" + +ida_segment.scCommon +""" +Common. Combine by overlay using maximum size. +""" + +ida_segment.scGroup +""" +Segment group. +""" + +ida_segment.scPriv +""" +segment. + +Private. Do not combine with any other program +""" + +ida_segment.scPub +""" +the alignment requirement. + +Public. Combine by appending at an offset that meets +""" + +ida_segment.scPub2 +""" +As defined by Microsoft, same as C=2 (public). +""" + +ida_segment.scPub3 +""" +As defined by Microsoft, same as C=2 (public). +""" + +ida_segment.scStack +""" +byte alignment. + +Stack. Combine as for C=2. This combine type forces +""" +=== ida_segment EPYDOC INJECTIONS END === +Help on function copy_sreg_ranges in module ida_segregs: + +copy_sreg_ranges(*args) -> 'void' + copy_sreg_ranges(dst_rg, src_rg, map_selector=False) + + + Duplicate segment register ranges. + + @param dst_rg: number of destination segment register (C++: int) + @param src_rg: copy ranges from (C++: int) + @param map_selector: map selectors to linear addresses using sel2ea() + (C++: bool) + +Help on function del_sreg_range in module ida_segregs: + +del_sreg_range(*args) -> 'bool' + del_sreg_range(ea, rg) -> bool + + + Delete segment register range started at ea. When a segment register + range is deleted, the previous range is extended to cover the empty + space. The segment register range at the beginning of a segment cannot + be deleted. + + @param ea: start_ea of the deleted range (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_prev_sreg_range in module ida_segregs: + +get_prev_sreg_range(*args) -> 'bool' + get_prev_sreg_range(out, ea, rg) -> bool + + + Get segment register range previous to one with address.more efficient + then get_sreg_range(reg, ea-1) + + @param out: segment register range (C++: sreg_range_t *) + @param ea: any linear address in the program (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_sreg in module ida_segregs: + +get_sreg(*args) -> 'sel_t' + get_sreg(ea, rg) -> sel_t + + + Get value of a segment register. This function uses segment register + range and default segment register values stored in the segment + structure. + + @param ea: linear address in the program (C++: ea_t) + @param rg: number of the segment register (C++: int) + @return: value of the segment register, BADSEL if value is unknown. + +Help on function get_sreg_range in module ida_segregs: + +get_sreg_range(*args) -> 'bool' + get_sreg_range(out, ea, rg) -> bool + + + Get segment register range by linear address. + + @param out: segment register range (C++: sreg_range_t *) + @param ea: any linear address in the program (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: success + +Help on function get_sreg_range_num in module ida_segregs: + +get_sreg_range_num(*args) -> 'int' + get_sreg_range_num(ea, rg) -> int + + + Get number of segment register range by address. + + @param ea: any address in the range (C++: ea_t) + @param rg: the segment register number (C++: int) + @return: -1 if no range occupies the specified address. otherwise + returns number of the specified range + (0..get_srranges_qty()-1) + +Help on function get_sreg_ranges_qty in module ida_segregs: + +get_sreg_ranges_qty(*args) -> 'size_t' + get_sreg_ranges_qty(rg) -> size_t + + + Get number of segment register ranges. + + @param rg: the segment register number (C++: int) + +Help on function getn_sreg_range in module ida_segregs: + +getn_sreg_range(*args) -> 'bool' + getn_sreg_range(out, rg, n) -> bool + + + Get segment register range by its number. + + @param out: segment register range (C++: sreg_range_t *) + @param rg: the segment register number (C++: int) + @param n: number of range (0..qty()-1) (C++: int) + @return: success + +Help on function set_default_dataseg in module ida_segregs: + +set_default_dataseg(*args) -> 'void' + set_default_dataseg(ds_sel) + + + Set default value of DS register for all segments. + + + @param ds_sel (C++: sel_t) + +Help on function set_default_sreg_value in module ida_segregs: + +set_default_sreg_value(*args) -> 'bool' + set_default_sreg_value(sg, rg, value) -> bool + + + Set default value of a segment register for a segment. + + @param sg: pointer to segment structure if NULL, then set the register + for all segments (C++: segment_t *) + @param rg: number of segment register (C++: int) + @param value: its default value. this value will be used by + get_sreg() if value of the register is unknown at the + specified address. (C++: sel_t) + @return: success + +Help on function set_sreg_at_next_code in module ida_segregs: + +set_sreg_at_next_code(*args) -> 'void' + set_sreg_at_next_code(ea1, ea2, rg, value) + + + Set the segment register value at the next instruction. This function + is designed to be called from 'idb_event::sgr_changed' handler in + order to contain the effect of changing a segment register value only + until the next instruction.It is useful, for example, in the ARM + module: the modification of the T register does not affect existing + instructions later in the code. + + @param ea1: address to start to search for an instruction (C++: ea_t) + @param ea2: the maximal address (C++: ea_t) + @param rg: the segment register number (C++: int) + @param value: the segment register value (C++: sel_t) + +Help on function split_sreg_range in module ida_segregs: + +split_sreg_range(*args) -> 'bool' + split_sreg_range(ea, rg, v, tag, silent=False) -> bool + + + Create a new segment register range. This function is used when the + IDP emulator detects that a segment register changes its value. + + @param ea: linear address where the segment register will have a new + value. if ea== BADADDR , nothing to do. (C++: ea_t) + @param rg: the number of the segment register (C++: int) + @param v: the new value of the segment register. If the value is + unknown, you should specify BADSEL . (C++: sel_t) + @param tag: the register info tag. see Segment register range tags + (C++: uchar) + @param silent: if false, display a warning() in the case of failure + (C++: bool) + @return: success + +Help on class sreg_range_t in module ida_segregs: + +class sreg_range_t(ida_range.range_t) + | Proxy of C++ sreg_range_t class. + | + | Method resolution order: + | sreg_range_t + | ida_range.range_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> sreg_range_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_sreg_range_t(...) + | delete_sreg_range_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | tag + | sreg_range_t_tag_get(self) -> uchar + | + | thisown + | The membership flag + | + | val + | sreg_range_t_val_get(self) -> sel_t + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.range_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _print(self, *args) -> 'size_t' + | _print(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | contains(self, *args) -> 'bool' + | contains(self, ea) -> bool + | contains(self, r) -> bool + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | extend(self, *args) -> 'void' + | extend(self, ea) + | + | intersect(self, *args) -> 'void' + | intersect(self, r) + | + | overlaps(self, *args) -> 'bool' + | overlaps(self, r) -> bool + | + | size(self, *args) -> 'asize_t' + | size(self) -> asize_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.range_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | endEA + | + | end_ea + | range_t_end_ea_get(self) -> ea_t + | + | startEA + | + | start_ea + | range_t_start_ea_get(self) -> ea_t + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.range_t: + | + | __hash__ = None + +=== ida_segregs EPYDOC INJECTIONS === +ida_segregs.SR_auto +""" +the value is determined by IDA +""" + +ida_segregs.SR_autostart +""" +used as 'SR_auto' for segment starting address +""" + +ida_segregs.SR_inherit +""" +the value is inherited from the previous range +""" + +ida_segregs.SR_user +""" +the value is specified by the user +""" +=== ida_segregs EPYDOC INJECTIONS END === +Help on function build_strlist in module ida_strlist: + +build_strlist(*args) -> 'void' + build_strlist() + + + Build the string list. You should initialize options before this call + using the restore_config() or setup_strings_window() methods. + +Help on function clear_strlist in module ida_strlist: + +clear_strlist(*args) -> 'void' + clear_strlist() + + + Clear the string list. + +Help on function get_strlist_item in module ida_strlist: + +get_strlist_item(*args) -> 'bool' + get_strlist_item(si, n) -> bool + + + Get nth element of the string list (n=0.. 'get_strlist_qty()' -1) + + + @param si (C++: string_info_t *) + @param n (C++: size_t) + +Help on function get_strlist_options in module ida_strlist: + +get_strlist_options(*args) -> 'strwinsetup_t *' + get_strlist_options() -> strwinsetup_t + + + Get access to the static string list options. + +Help on function get_strlist_qty in module ida_strlist: + +get_strlist_qty(*args) -> 'size_t' + get_strlist_qty() -> size_t + + + Get number of elements in the string list. + +Help on class string_info_t in module ida_strlist: + +class string_info_t(builtins.object) + | Proxy of C++ string_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> string_info_t + | __init__(self, _ea) -> string_info_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_string_info_t(...) + | delete_string_info_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ea + | string_info_t_ea_get(self) -> ea_t + | + | length + | string_info_t_length_get(self) -> int + | + | thisown + | The membership flag + | + | type + | string_info_t_type_get(self) -> int + +Help on class strwinsetup_t in module ida_strlist: + +class strwinsetup_t(builtins.object) + | Proxy of C++ strwinsetup_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> strwinsetup_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_strwinsetup_t(...) + | delete_strwinsetup_t(self) + | + | _get_strtypes(self, *args) -> 'PyObject *' + | _get_strtypes(self) -> PyObject * + | + | _set_strtypes(self, *args) -> 'PyObject *' + | _set_strtypes(self, py_t) -> PyObject * + | + | is_initialized(self, *args) -> 'bool' + | is_initialized(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | display_only_existing_strings + | strwinsetup_t_display_only_existing_strings_get(self) -> uchar + | + | ignore_heads + | strwinsetup_t_ignore_heads_get(self) -> uchar + | + | minlen + | strwinsetup_t_minlen_get(self) -> sval_t + | + | only_7bit + | strwinsetup_t_only_7bit_get(self) -> uchar + | + | strtypes + | _get_strtypes(self) -> PyObject * + | + | thisown + | The membership flag + +Help on function add_struc in module ida_struct: + +add_struc(*args) -> 'tid_t' + add_struc(idx, name, is_union=False) -> tid_t + + + Create a structure type. if idx== 'BADADDR' then add as the last idx. + if name==NULL then a name will be generated "struct_%d". + + @param idx (C++: uval_t) + @param name (C++: const char *) + @param is_union (C++: bool) + +Help on function add_struc_member in module ida_struct: + +add_struc_member(*args) -> 'struc_error_t' + add_struc_member(sptr, fieldname, offset, flag, mt, nbytes) -> struc_error_t + + + Add member to existing structure. + + @param sptr: structure to modify (C++: struc_t *) + @param fieldname: if NULL, then "anonymous_#" name will be generated + (C++: const char *) + @param offset: BADADDR means add to the end of structure (C++: ea_t) + @param flag: type + representation bits (C++: flags_t) + @param mt: additional info about member type. must be present for + structs, offsets, enums, strings, struct offsets. (C++: + const opinfo_t *) + @param nbytes: if == 0 then the structure will be a varstruct. in this + case the member should be the last member in the + structure (C++: asize_t) + +Help on function del_member_tinfo in module ida_struct: + +del_member_tinfo(*args) -> 'bool' + del_member_tinfo(sptr, mptr) -> bool + + + Delete tinfo for given member. + + + @param sptr (C++: struc_t *) + @param mptr (C++: member_t *) + +Help on function del_struc in module ida_struct: + +del_struc(*args) -> 'bool' + del_struc(sptr) -> bool + + + Delete a structure type. + + + @param sptr (C++: struc_t *) + +Help on function del_struc_member in module ida_struct: + +del_struc_member(*args) -> 'bool' + del_struc_member(sptr, offset) -> bool + + + Delete member at given offset. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + +Help on function del_struc_members in module ida_struct: + +del_struc_members(*args) -> 'int' + del_struc_members(sptr, off1, off2) -> int + + + Delete members which occupy range of offsets (off1..off2). + + @param sptr (C++: struc_t *) + @param off1 (C++: ea_t) + @param off2 (C++: ea_t) + @return: number of deleted members or -1 on error + +Help on function expand_struc in module ida_struct: + +expand_struc(*args) -> 'bool' + expand_struc(sptr, offset, delta, recalc=True) -> bool + + + Expand/Shrink structure type. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param delta (C++: adiff_t) + @param recalc (C++: bool) + +Help on function get_best_fit_member in module ida_struct: + +get_best_fit_member(*args) -> 'member_t *' + get_best_fit_member(sptr, offset) -> member_t + + + Get member that is most likely referenced by the specified offset. + Useful for offsets > sizeof(struct). + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_first_struc_idx in module ida_struct: + +get_first_struc_idx(*args) -> 'uval_t' + get_first_struc_idx() -> uval_t + + + Get index of first structure. + + @return: BADADDR if no known structures, 0 otherwise + +Help on function get_last_struc_idx in module ida_struct: + +get_last_struc_idx(*args) -> 'uval_t' + get_last_struc_idx() -> uval_t + + + Get index of last structure. + + @return: BADADDR if no known structures, get_struc_qty() -1 + otherwise + +Help on function get_max_offset in module ida_struct: + +get_max_offset(*args) -> 'ea_t' + get_max_offset(sptr) -> ea_t + + + For unions: returns number of members, for structs: returns size of + structure. + + + @param sptr (C++: struc_t *) + +Help on function get_member in module ida_struct: + +get_member(*args) -> 'member_t *' + get_member(sptr, offset) -> member_t + + + Get member at given offset. + + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_member_by_fullname in module ida_struct: + +get_member_by_fullname(*args) -> 'struc_t **' + get_member_by_fullname(fullname) -> member_t + + + Get a member by its fully qualified name, "struct.field". + + + @param fullname (C++: const char *) + +Help on function get_member_by_id in module ida_struct: + +get_member_by_id(*args) -> 'qstring *, struc_t **' + get_member_by_id(mid) -> member_t + + + Check if the specified member id points to a struct member. + + + @param mid (C++: tid_t) + +Help on function get_member_by_name in module ida_struct: + +get_member_by_name(*args) -> 'member_t *' + get_member_by_name(sptr, membername) -> member_t + + + Get a member by its name, like "field44". + + + @param sptr (C++: const struc_t *) + @param membername (C++: const char *) + +Help on function get_member_cmt in module ida_struct: + +get_member_cmt(*args) -> 'qstring *' + get_member_cmt(mid, repeatable) -> str + + + Get comment of structure member. + + + @param mid (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_member_fullname in module ida_struct: + +get_member_fullname(*args) -> 'qstring *' + get_member_fullname(mid) -> str + + + Get a member's fully qualified name, "struct.field". + + + @param mid (C++: tid_t) + +Help on function get_member_id in module ida_struct: + +get_member_id(*args) -> 'tid_t' + get_member_id(sptr, offset) -> tid_t + + + Get member id at given offset. + + + @param sptr (C++: const struc_t *) + @param offset (C++: asize_t) + +Help on function get_member_name in module ida_struct: + +get_member_name(*args) -> 'qstring *' + get_member_name(mid) -> str + + + Get name of structure member. + + + @param mid (C++: tid_t) + +Help on function get_member_size in module ida_struct: + +get_member_size(*args) -> 'asize_t' + get_member_size(nonnul_mptr) -> asize_t + + + Get size of structure member. May return 0 for the last member of + varstruct. For union members, returns 'member_t::eoff' . + +Help on function get_member_struc in module ida_struct: + +get_member_struc(*args) -> 'struc_t *' + get_member_struc(fullname) -> struc_t + + + Get containing structure of member by its full name "struct.field". + + + @param fullname (C++: const char *) + +Help on function get_member_tinfo in module ida_struct: + +get_member_tinfo(*args) -> 'bool' + get_member_tinfo(tif, mptr) -> bool + + + Get tinfo for given member. + + + @param tif (C++: tinfo_t *) + @param mptr (C++: const member_t *) + +Help on function get_next_member_idx in module ida_struct: + +get_next_member_idx(*args) -> 'ssize_t' + get_next_member_idx(sptr, off) -> ssize_t + + + Get the next member idx, if it does not exist, return -1. + + + @param sptr (C++: const struc_t *) + @param off (C++: asize_t) + +Help on function get_next_struc_idx in module ida_struct: + +get_next_struc_idx(*args) -> 'uval_t' + get_next_struc_idx(idx) -> uval_t + + + Get next struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is out of bounds, otherwise idx++ + +Help on function get_or_guess_member_tinfo in module ida_struct: + +get_or_guess_member_tinfo(*args) -> 'bool' + get_or_guess_member_tinfo(tif, mptr) -> bool + + + Try to get tinfo for given member - if failed, generate a tinfo using + information about the member id from the disassembly + + @param tif (C++: tinfo_t *) + @param mptr (C++: const member_t *) + +Help on function get_prev_member_idx in module ida_struct: + +get_prev_member_idx(*args) -> 'ssize_t' + get_prev_member_idx(sptr, off) -> ssize_t + + + Get the prev member idx, if it does not exist, return -1. + + + @param sptr (C++: const struc_t *) + @param off (C++: asize_t) + +Help on function get_prev_struc_idx in module ida_struct: + +get_prev_struc_idx(*args) -> 'uval_t' + get_prev_struc_idx(idx) -> uval_t + + + Get previous struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is negative, otherwise idx - 1 + +Help on function get_sptr in module ida_struct: + +get_sptr(*args) -> 'struc_t *' + get_sptr(mptr) -> struc_t + + + Get child struct if member is a struct. + + + @param mptr (C++: const member_t *) + +Help on function get_struc in module ida_struct: + +get_struc(*args) -> 'struc_t *' + get_struc(id) -> struc_t + + + Get pointer to struct type info. + + + @param id (C++: tid_t) + +Help on function get_struc_by_idx in module ida_struct: + +get_struc_by_idx(*args) -> 'tid_t' + get_struc_by_idx(idx) -> tid_t + + + Get struct id by struct number. + + + @param idx (C++: uval_t) + +Help on function get_struc_cmt in module ida_struct: + +get_struc_cmt(*args) -> 'qstring *' + get_struc_cmt(id, repeatable) -> str + + + Get struct comment. + + + @param id (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_struc_first_offset in module ida_struct: + +get_struc_first_offset(*args) -> 'ea_t' + get_struc_first_offset(sptr) -> ea_t + + + Get offset of first member. + + @param sptr (C++: const struc_t *) + @return: BADADDR if memqty == 0 + +Help on function get_struc_id in module ida_struct: + +get_struc_id(*args) -> 'tid_t' + get_struc_id(name) -> tid_t + + + Get struct id by name. + + + @param name (C++: const char *) + +Help on function get_struc_idx in module ida_struct: + +get_struc_idx(*args) -> 'uval_t' + get_struc_idx(id) -> uval_t + + + Get internal number of the structure. + + + @param id (C++: tid_t) + +Help on function get_struc_last_offset in module ida_struct: + +get_struc_last_offset(*args) -> 'ea_t' + get_struc_last_offset(sptr) -> ea_t + + + Get offset of last member. + + @param sptr (C++: const struc_t *) + @return: BADADDR if memqty == 0 + +Help on function get_struc_name in module ida_struct: + +get_struc_name(*args) -> 'qstring *' + get_struc_name(id, flags=0) -> str + + + Get struct name by id + + @param id: struct id (C++: tid_t) + @param flags: Struct name flags (C++: int) + +Help on function get_struc_next_offset in module ida_struct: + +get_struc_next_offset(*args) -> 'ea_t' + get_struc_next_offset(sptr, offset) -> ea_t + + + Get offset of member with smallest offset larger than 'offset'. + + @param sptr (C++: const struc_t *) + @param offset (C++: ea_t) + @return: BADADDR if no next offset + +Help on function get_struc_prev_offset in module ida_struct: + +get_struc_prev_offset(*args) -> 'ea_t' + get_struc_prev_offset(sptr, offset) -> ea_t + + + Get offset of member with largest offset less than 'offset'. + + @param sptr (C++: const struc_t *) + @param offset (C++: ea_t) + @return: BADADDR if no prev offset + +Help on function get_struc_qty in module ida_struct: + +get_struc_qty(*args) -> 'size_t' + get_struc_qty() -> size_t + + + Get number of known structures. + +Help on function get_struc_size in module ida_struct: + +get_struc_size(*args) -> 'asize_t' + get_struc_size(sptr) -> asize_t + get_struc_size(id) -> asize_t + + + Get struct size (also see 'get_struc_size(tid_t)' ) + + + @param sptr (C++: const struc_t *) + +Help on function is_anonymous_member_name in module ida_struct: + +is_anonymous_member_name(*args) -> 'bool' + is_anonymous_member_name(name) -> bool + + + Is member name prefixed with "anonymous"? + + + @param name (C++: const char *) + +Help on function is_dummy_member_name in module ida_struct: + +is_dummy_member_name(*args) -> 'bool' + is_dummy_member_name(name) -> bool + + + Is member name an auto-generated name? + + + @param name (C++: const char *) + +Help on function is_member_id in module ida_struct: + +is_member_id(*args) -> 'bool' + is_member_id(mid) -> bool + + + Is a member id? + + + @param mid (C++: tid_t) + +Help on function is_special_member in module ida_struct: + +is_special_member(*args) -> 'bool' + is_special_member(id) -> bool + + + Is a special member with the name beginning with ' '? + + + @param id (C++: tid_t) + +Help on function is_union in module ida_struct: + +is_union(*args) -> 'bool' + is_union(id) -> bool + + + Is a union? + + + @param id (C++: tid_t) + +Help on function is_varmember in module ida_struct: + +is_varmember(*args) -> 'bool' + is_varmember(mptr) -> bool + + + Is variable size member? + + + @param mptr (C++: const member_t *) + +Help on function is_varstr in module ida_struct: + +is_varstr(*args) -> 'bool' + is_varstr(id) -> bool + + + Is variable size structure? + + + @param id (C++: tid_t) + +Help on class member_t in module ida_struct: + +class member_t(builtins.object) + | Proxy of C++ member_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> member_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_member_t(...) + | delete_member_t(self) + | + | by_til(self, *args) -> 'bool' + | by_til(self) -> bool + | + | get_soff(self, *args) -> 'ea_t' + | get_soff(self) -> ea_t + | + | has_ti(self, *args) -> 'bool' + | has_ti(self) -> bool + | + | has_union(self, *args) -> 'bool' + | has_union(self) -> bool + | + | is_baseclass(self, *args) -> 'bool' + | is_baseclass(self) -> bool + | + | is_destructor(self, *args) -> 'bool' + | is_destructor(self) -> bool + | + | is_dupname(self, *args) -> 'bool' + | is_dupname(self) -> bool + | + | unimem(self, *args) -> 'bool' + | unimem(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | eoff + | member_t_eoff_get(self) -> ea_t + | + | flag + | member_t_flag_get(self) -> flags_t + | + | id + | member_t_id_get(self) -> tid_t + | + | props + | member_t_props_get(self) -> uint32 + | + | soff + | member_t_soff_get(self) -> ea_t + | + | thisown + | The membership flag + +Help on function retrieve_member_info in module ida_struct: + +retrieve_member_info(*args) -> 'opinfo_t *' + retrieve_member_info(buf, mptr) -> opinfo_t + + + Get operand type info for member. + + + @param buf (C++: opinfo_t *) + @param mptr (C++: const member_t *) + +Help on function save_struc in module ida_struct: + +save_struc(*args) -> 'void' + save_struc(sptr, may_update_ltypes=True) + + + Update struct information in the database (internal function) + + + @param sptr (C++: struc_t *) + @param may_update_ltypes (C++: bool) + +Help on function set_member_cmt in module ida_struct: + +set_member_cmt(*args) -> 'bool' + set_member_cmt(mptr, cmt, repeatable) -> bool + + + Set member comment. + + + @param mptr (C++: member_t *) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_member_name in module ida_struct: + +set_member_name(*args) -> 'bool' + set_member_name(sptr, offset, name) -> bool + + + Set name of member at given offset. + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param name (C++: const char *) + +Help on function set_member_tinfo in module ida_struct: + +set_member_tinfo(*args) -> 'smt_code_t' + set_member_tinfo(sptr, mptr, memoff, tif, flags) -> smt_code_t + + + Set tinfo for given member. + + @param sptr: containing struct (C++: struc_t *) + @param mptr: target member (C++: member_t *) + @param memoff: offset within member (C++: uval_t) + @param tif: type info (C++: const tinfo_t &) + @param flags: Set member tinfo flags (C++: int) + +Help on function set_member_type in module ida_struct: + +set_member_type(*args) -> 'bool' + set_member_type(sptr, offset, flag, mt, nbytes) -> bool + + + Set type of member at given offset (also see 'add_struc_member()' ) + + + @param sptr (C++: struc_t *) + @param offset (C++: ea_t) + @param flag (C++: flags_t) + @param mt (C++: const opinfo_t *) + @param nbytes (C++: asize_t) + +Help on function set_struc_align in module ida_struct: + +set_struc_align(*args) -> 'bool' + set_struc_align(sptr, shift) -> bool + + + Set structure alignment ( 'SF_ALIGN' ) + + + @param sptr (C++: struc_t *) + @param shift (C++: int) + +Help on function set_struc_cmt in module ida_struct: + +set_struc_cmt(*args) -> 'bool' + set_struc_cmt(id, cmt, repeatable) -> bool + + + Set structure comment. + + + @param id (C++: tid_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_struc_hidden in module ida_struct: + +set_struc_hidden(*args) -> 'void' + set_struc_hidden(sptr, is_hidden) + + + Hide/unhide a struct type. + + + @param sptr (C++: struc_t *) + @param is_hidden (C++: bool) + +Help on function set_struc_idx in module ida_struct: + +set_struc_idx(*args) -> 'bool' + set_struc_idx(sptr, idx) -> bool + + + Set internal number of struct. Also see 'get_struc_idx()' , + 'get_struc_by_idx()' . + + @param sptr (C++: const struc_t *) + @param idx (C++: uval_t) + +Help on function set_struc_listed in module ida_struct: + +set_struc_listed(*args) -> 'void' + set_struc_listed(sptr, is_listed) + + + Add/remove a struct type from the struct list. + + + @param sptr (C++: struc_t *) + @param is_listed (C++: bool) + +Help on function set_struc_name in module ida_struct: + +set_struc_name(*args) -> 'bool' + set_struc_name(id, name) -> bool + + + Set structure name. + + + @param id (C++: tid_t) + @param name (C++: const char *) + +Help on function stroff_as_size in module ida_struct: + +stroff_as_size(*args) -> 'bool' + stroff_as_size(plen, sptr, value) -> bool + + + Should display a structure offset expression as the structure size? + + + @param plen (C++: int) + @param sptr (C++: const struc_t *) + @param value (C++: asize_t) + +Help on class struc_t in module ida_struct: + +class struc_t(builtins.object) + | Proxy of C++ struc_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_struc_t(...) + | delete_struc_t(self) + | + | from_til(self, *args) -> 'bool' + | from_til(self) -> bool + | + | get_alignment(self, *args) -> 'int' + | get_alignment(self) -> int + | + | get_member(self, *args) -> 'member_t *' + | get_member(self, index) -> member_t + | + | has_union(self, *args) -> 'bool' + | has_union(self) -> bool + | + | is_choosable(self, *args) -> 'bool' + | is_choosable(self) -> bool + | + | is_frame(self, *args) -> 'bool' + | is_frame(self) -> bool + | + | is_ghost(self, *args) -> 'bool' + | is_ghost(self) -> bool + | + | is_hidden(self, *args) -> 'bool' + | is_hidden(self) -> bool + | + | is_union(self, *args) -> 'bool' + | is_union(self) -> bool + | + | is_varstr(self, *args) -> 'bool' + | is_varstr(self) -> bool + | + | set_alignment(self, *args) -> 'void' + | set_alignment(self, shift) + | + | set_ghost(self, *args) -> 'void' + | set_ghost(self, _is_ghost) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | age + | struc_t_age_get(self) -> ushort + | + | id + | struc_t_id_get(self) -> tid_t + | + | members + | struc_t_members_get(self) -> member_t + | + | memqty + | struc_t_memqty_get(self) -> uint32 + | + | ordinal + | struc_t_ordinal_get(self) -> int32 + | + | props + | struc_t_props_get(self) -> uint32 + | + | thisown + | The membership flag + +Help on class struct_field_visitor_t in module ida_struct: + +class struct_field_visitor_t(builtins.object) + | Proxy of C++ struct_field_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> struct_field_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_struct_field_visitor_t(...) + | delete_struct_field_visitor_t(self) + | + | visit_field(self, *args) -> 'int' + | visit_field(self, sptr, mptr) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function visit_stroff_fields in module ida_struct: + +visit_stroff_fields(*args) -> 'adiff_t *' + visit_stroff_fields(sfv, path, disp, appzero) -> flags_t + + + Visit structure fields in a stroff expression or in a reference to a + struct data variable. This function can be used to enumerate all + components of an expression like 'a.b.c'. + + @param sfv: visitor object (C++: struct_field_visitor_t &) + @param path: struct path (path[0] contains the initial struct id) + (C++: const tid_t *) + @param disp: offset into structure (C++: adiff_t *) + @param appzero: should visit field at offset zero? (C++: bool) + +=== ida_struct EPYDOC INJECTIONS === +ida_struct.MF_BASECLASS +""" +a special member representing base class +""" + +ida_struct.MF_BYTIL +""" +the member was created due to the type system +""" + +ida_struct.MF_DTOR +""" +a special member representing destructor +""" + +ida_struct.MF_DUPNAME +""" +duplicate name resolved with _N suffix (N==soff) +""" + +ida_struct.MF_HASTI +""" +has type information? +""" + +ida_struct.MF_HASUNI +""" +has members of type "union"? +""" + +ida_struct.MF_OK +""" +is the member ok? (always yes) +""" + +ida_struct.MF_UNIMEM +""" +is a member of a union? +""" + +ida_struct.SET_MEMTI_BYTIL +""" +new type was created by the type subsystem +""" + +ida_struct.SET_MEMTI_COMPATIBLE +""" +new type must be compatible with the old +""" + +ida_struct.SET_MEMTI_FUNCARG +""" +mptr is function argument (cannot create arrays) +""" + +ida_struct.SET_MEMTI_MAY_DESTROY +""" +may destroy other members +""" + +ida_struct.SET_MEMTI_USERTI +""" +user-specified type +""" + +ida_struct.SF_ALIGN +""" +alignment (shift amount: 0..31) +""" + +ida_struct.SF_FRAME +""" +the structure is a function frame +""" + +ida_struct.SF_GHOST +""" +ghost copy of a local type +""" + +ida_struct.SF_HASUNI +""" +has members of type "union"? +""" + +ida_struct.SF_HIDDEN +""" +the structure is collapsed +""" + +ida_struct.SF_NOLIST +""" +don't include in the chooser list +""" + +ida_struct.SF_TYPLIB +""" +the structure comes from type library +""" + +ida_struct.SF_UNION +""" +varunions are prohibited! + +is a union? +""" + +ida_struct.SF_VAR +""" +is variable size structure (varstruct)? a variable size structure is +one with the zero size last member. if the last member is a varstruct, +then the current structure is a varstruct too. +""" + +ida_struct.STRNFL_REGEX +""" +apply regular expressions to beautify the name +""" + +ida_struct.STRUC_SEPARATOR +""" +structname.fieldname +""" +=== ida_struct EPYDOC INJECTIONS END === +Help on function add_tryblk in module ida_tryblks: + +add_tryblk(*args) -> 'int' + add_tryblk(tb) -> int + + + Add one try block information. + + @param tb: try block to add. (C++: const tryblk_t &) + @return: error code; 0 means good + +Help on class catch_t in module ida_tryblks: + +class catch_t(try_handler_t) + | Proxy of C++ catch_t class. + | + | Method resolution order: + | catch_t + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> catch_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_catch_t(...) + | delete_catch_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | obj + | catch_t_obj_get(self) -> sval_t + | + | thisown + | The membership flag + | + | type_id + | catch_t_type_id_get(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Methods inherited from try_handler_t: + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from try_handler_t: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.rangevec_base_t: + | + | __hash__ = None + +Help on class catchvec_t in module ida_tryblks: + +class catchvec_t(builtins.object) + | Proxy of C++ qvector< catch_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'catch_t const &' + | __getitem__(self, i) -> catch_t + | + | __init__(self, *args) + | __init__(self) -> catchvec_t + | __init__(self, x) -> catchvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_catchvec_t(...) + | delete_catchvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'catch_t const &' + | at(self, _idx) -> catch_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< catch_t >::const_iterator' + | begin(self) -> catch_t + | begin(self) -> catch_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< catch_t >::const_iterator' + | end(self) -> catch_t + | end(self) -> catch_t + | + | erase(self, *args) -> 'qvector< catch_t >::iterator' + | erase(self, it) -> catch_t + | erase(self, first, last) -> catch_t + | + | extract(self, *args) -> 'catch_t *' + | extract(self) -> catch_t + | + | find(self, *args) -> 'qvector< catch_t >::const_iterator' + | find(self, x) -> catch_t + | find(self, x) -> catch_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=catch_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< catch_t >::iterator' + | insert(self, it, x) -> catch_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'catch_t &' + | push_back(self, x) + | push_back(self) -> catch_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function del_tryblks in module ida_tryblks: + +del_tryblks(*args) -> 'void' + del_tryblks(range) + + + Delete try block information in the specified range. + + @param range: the range to be cleared (C++: const range_t &) + +Help on function find_syseh in module ida_tryblks: + +find_syseh(*args) -> 'ea_t' + find_syseh(ea) -> ea_t + + + Find the start address of the system eh region including the argument. + + @param ea: search address (C++: ea_t) + @return: start address of surrounding tryblk, otherwise BADADDR + +Help on function get_tryblks in module ida_tryblks: + +get_tryblks(*args) -> 'size_t' + get_tryblks(tbv, range) -> size_t + + + Retrieve try block information from the specified address range. Try + blocks are sorted by starting address and their nest levels + calculated. + + @param tbv: output buffer; may be NULL (C++: tryblks_t *) + @param range: address range to change (C++: const range_t &) + @return: number of found try blocks + +Help on class seh_t in module ida_tryblks: + +class seh_t(try_handler_t) + | Proxy of C++ seh_t class. + | + | Method resolution order: + | seh_t + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> seh_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_seh_t(...) + | delete_seh_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | filter + | seh_t_filter_get(self) -> rangevec_t + | + | seh_code + | seh_t_seh_code_get(self) -> ea_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from try_handler_t: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.rangevec_base_t: + | + | __hash__ = None + +Help on class try_handler_t in module ida_tryblks: + +class try_handler_t(ida_range.rangevec_t) + | Proxy of C++ try_handler_t class. + | + | Method resolution order: + | try_handler_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> try_handler_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_try_handler_t(...) + | delete_try_handler_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | disp + | try_handler_t_disp_get(self) -> sval_t + | + | fpreg + | try_handler_t_fpreg_get(self) -> int + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.rangevec_base_t: + | + | __hash__ = None + +Help on class tryblk_t in module ida_tryblks: + +class tryblk_t(ida_range.rangevec_t) + | Proxy of C++ tryblk_t class. + | + | Method resolution order: + | tryblk_t + | ida_range.rangevec_t + | ida_range.rangevec_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> tryblk_t + | __init__(self, r) -> tryblk_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_tryblk_t(...) + | delete_tryblk_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | cpp(self, *args) -> 'catchvec_t &' + | cpp(self) -> catchvec_t + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | get_kind(self, *args) -> 'uchar' + | get_kind(self) -> uchar + | + | is_cpp(self, *args) -> 'bool' + | is_cpp(self) -> bool + | + | is_seh(self, *args) -> 'bool' + | is_seh(self) -> bool + | + | seh(self, *args) -> 'seh_t &' + | seh(self) -> seh_t + | + | set_cpp(self, *args) -> 'catchvec_t &' + | set_cpp(self) -> catchvec_t + | + | set_seh(self, *args) -> 'seh_t &' + | set_seh(self) -> seh_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | level + | tryblk_t_level_get(self) -> uchar + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from ida_range.rangevec_base_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'range_t const &' + | __getitem__(self, i) -> range_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'range_t const &' + | at(self, _idx) -> range_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< range_t >::const_iterator' + | begin(self) -> range_t + | begin(self) -> range_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | end(self, *args) -> 'qvector< range_t >::const_iterator' + | end(self) -> range_t + | end(self) -> range_t + | + | erase(self, *args) -> 'qvector< range_t >::iterator' + | erase(self, it) -> range_t + | erase(self, first, last) -> range_t + | + | extract(self, *args) -> 'range_t *' + | extract(self) -> range_t + | + | find(self, *args) -> 'qvector< range_t >::const_iterator' + | find(self, x) -> range_t + | find(self, x) -> range_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=range_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< range_t >::iterator' + | insert(self, it, x) -> range_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'range_t &' + | push_back(self, x) + | push_back(self) -> range_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from ida_range.rangevec_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from ida_range.rangevec_base_t: + | + | __hash__ = None + +Help on class tryblks_t in module ida_tryblks: + +class tryblks_t(builtins.object) + | Proxy of C++ qvector< tryblk_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'tryblk_t const &' + | __getitem__(self, i) -> tryblk_t + | + | __init__(self, *args) + | __init__(self) -> tryblks_t + | __init__(self, x) -> tryblks_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_tryblks_t(...) + | delete_tryblks_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'tryblk_t const &' + | at(self, _idx) -> tryblk_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< tryblk_t >::const_iterator' + | begin(self) -> tryblk_t + | begin(self) -> tryblk_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< tryblk_t >::const_iterator' + | end(self) -> tryblk_t + | end(self) -> tryblk_t + | + | erase(self, *args) -> 'qvector< tryblk_t >::iterator' + | erase(self, it) -> tryblk_t + | erase(self, first, last) -> tryblk_t + | + | extract(self, *args) -> 'tryblk_t *' + | extract(self) -> tryblk_t + | + | find(self, *args) -> 'qvector< tryblk_t >::const_iterator' + | find(self, x) -> tryblk_t + | find(self, x) -> tryblk_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=tryblk_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< tryblk_t >::iterator' + | insert(self, it, x) -> tryblk_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'tryblk_t &' + | push_back(self, x) + | push_back(self) -> tryblk_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +=== ida_tryblks EPYDOC INJECTIONS === +ida_tryblks.TBERR_EMPTY +""" +empty try block +""" + +ida_tryblks.TBERR_END +""" +bad end address +""" + +ida_tryblks.TBERR_INTERSECT +""" +range would intersect inner tryblk +""" + +ida_tryblks.TBERR_KIND +""" +illegal try block kind +""" + +ida_tryblks.TBERR_NO_CATCHES +""" +no catch blocks at all +""" + +ida_tryblks.TBERR_OK +""" +ok +""" + +ida_tryblks.TBERR_ORDER +""" +bad address order +""" + +ida_tryblks.TBERR_START +""" +bad start address +""" +=== ida_tryblks EPYDOC INJECTIONS END === +Help on function add_til in module ida_typeinf: + +add_til(*args) -> 'int' + add_til(name, flags) -> int + + + Load a til file. + + @param name: til name (C++: const char *) + @param flags: combination of Load TIL flags (C++: int) + @return: one of Load TIL result codes + +Help on function alloc_type_ordinal in module ida_typeinf: + +alloc_type_ordinal(*args) -> 'uint32' + alloc_type_ordinal(ti) -> uint32 + + + \call2{alloc_type_ordinals,ti,1} + + + @param ti (C++: til_t *) + +Help on function alloc_type_ordinals in module ida_typeinf: + +alloc_type_ordinals(*args) -> 'uint32' + alloc_type_ordinals(ti, qty) -> uint32 + + + Allocate a range of ordinal numbers for new types. + + @param ti: type library (C++: til_t *) + @param qty: number of ordinals to allocate (C++: int) + @return: the first ordinal. 0 means failure. + +Help on class aloc_visitor_t in module ida_typeinf: + +class aloc_visitor_t(builtins.object) + | Proxy of C++ aloc_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> aloc_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_aloc_visitor_t(...) + | delete_aloc_visitor_t(self) + | + | visit_location(self, *args) -> 'int' + | visit_location(self, v, off, size) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function append_abi_opts in module ida_typeinf: + +append_abi_opts(*args) -> 'bool' + append_abi_opts(abi_opts, user_level=False) -> bool + + + Add/remove/check ABI option General form of full abi name: abiname- + opt1-opt2-... or -opt1-opt2-... + + @param abi_opts: - ABI options to add/remove in form opt1-opt2-... + (C++: const char *) + @param user_level: - initiated by user if TRUE (==SETCOMP_BY_USER) + (C++: bool) + @return: success + +Help on function append_argloc in module ida_typeinf: + +append_argloc(*args) -> 'bool' + append_argloc(out, vloc) -> bool + + + Serialize argument location. + + + @param out (C++: qtype *) + @param vloc (C++: const argloc_t &) + +Help on function append_tinfo_covered in module ida_typeinf: + +append_tinfo_covered(*args) -> 'bool' + append_tinfo_covered(out, typid, offset) -> bool + +Help on function apply_callee_tinfo in module ida_typeinf: + +apply_callee_tinfo(*args) -> 'bool' + apply_callee_tinfo(caller, tif) -> bool + + + Apply the type of the called function to the calling instruction. This + function will append parameter comments and rename the local variables + of the calling function. It also stores information about the + instructions that initialize call arguments in the database. Use + 'get_arg_addrs()' to retrieve it if necessary. Alternatively it is + possible to hook to processor_t::arg_addrs_ready event. + + @param caller: linear address of the calling instruction. must belong + to a function. (C++: ea_t) + @param tif: type info (C++: const tinfo_t &) + @return: success + +Help on function apply_cdecl in module ida_typeinf: + +apply_cdecl(*args) -> 'bool' + apply_cdecl(til, ea, decl, flags=0) -> bool + + + Apply the specified type to the address. This function parses the + declaration and calls 'apply_tinfo()' + + @param til: type library (C++: til_t *) + @param ea: linear address (C++: ea_t) + @param decl: type declaration in C form (C++: const char *) + @param flags: flags to pass to apply_tinfo ( TINFO_DEFINITE is always + passed) (C++: int) + @return: success + +Help on function apply_named_type in module ida_typeinf: + +apply_named_type(*args) -> 'bool' + apply_named_type(ea, name) -> bool + + + Apply the specified named type to the address. + + @param ea: linear address (C++: ea_t) + @param name: the type name, e.g. "FILE" (C++: const char *) + @return: success + +Help on function apply_once_tinfo_and_name in module ida_typeinf: + +apply_once_tinfo_and_name(*args) -> 'bool' + apply_once_tinfo_and_name(dea, tif, name) -> bool + + + Apply the specified type and name to the address. This function checks + if the address already has a type. If the old typedoes not exist or + the new type is 'better' than the old type, then thenew type will be + applied. A type is considered better if it has moreinformation (e.g. + 'BTMT_STRUCT' is better than 'BT_INT' ).The same logic is with the + name: if the address already have a meaningfulname, it will be + preserved. Only if the old name does not exist or itis a dummy name + like byte_123, it will be replaced by the new name. + + @param dea: linear address (C++: ea_t) + @param tif: type string in the internal format (C++: const tinfo_t + &) + @param name: new name for the address (C++: const char *) + @return: success + +Help on function apply_tinfo in module ida_typeinf: + +apply_tinfo(*args) -> 'bool' + apply_tinfo(ea, tif, flags) -> bool + + + Apply the specified type to the specified address. This function sets + the type and tries to convert the item at the specified address to + conform the type. + + @param ea: linear address (C++: ea_t) + @param tif: type string in internal format (C++: const tinfo_t &) + @param flags: combination of Apply tinfo flags (C++: uint32) + @return: success + +Help on function apply_tinfo_to_stkarg in module ida_typeinf: + +apply_tinfo_to_stkarg(*args) -> 'bool' + apply_tinfo_to_stkarg(insn, x, v, tif, name) -> bool + + + Helper function for the processor modules. to be called from + \ph{use_stkarg_type} + + @param insn (C++: const insn_t &) + @param x (C++: const op_t &) + @param v (C++: uval_t) + @param tif (C++: const tinfo_t &) + @param name (C++: const char *) + +Help on function apply_type in module ida_typeinf: + +apply_type(*args) -> 'bool' + apply_type(ti, _type, _fields, ea, flags) -> bool + + + Apply the specified type to the address + @param ti: Type info library. 'None' can be used. + @param py_type: type string + @param py_fields: fields string (may be empty or None) + @param ea: the address of the object + @param flags: combination of TINFO_... constants or 0 + @return: Boolean + +Help on class argloc_t in module ida_typeinf: + +class argloc_t(builtins.object) + | Proxy of C++ argloc_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> argloc_t + | __init__(self, r) -> argloc_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_argloc_t(...) + | delete_argloc_t(self) + | + | _consume_rrel(self, *args) -> 'bool' + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) -> 'bool' + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) -> 'void' + | _set_badloc(self) + | + | _set_biggest(self, *args) -> 'void' + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) -> 'void' + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) -> 'void' + | _set_ea(self, _ea) + | + | _set_reg1(self, *args) -> 'void' + | _set_reg1(self, reg, off=0) + | + | _set_reg2(self, *args) -> 'void' + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) -> 'void' + | _set_stkoff(self, off) + | + | advance(self, *args) -> 'bool' + | advance(self, delta) -> bool + | + | atype(self, *args) -> 'argloc_type_t' + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) -> 'sval_t' + | calc_offset(self) -> sval_t + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | consume_rrel(self, *args) -> 'void' + | consume_rrel(self, p) + | + | consume_scattered(self, *args) -> 'void' + | consume_scattered(self, p) + | + | get_biggest(self, *args) -> 'argloc_t::biggest_t' + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) -> 'void *' + | get_custom(self) -> void * + | + | get_ea(self, *args) -> 'ea_t' + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) -> 'uint32' + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) -> 'rrel_t const &' + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) -> 'bool' + | has_reg(self) -> bool + | + | has_stkoff(self, *args) -> 'bool' + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) -> 'bool' + | is_badloc(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_ea(self, *args) -> 'bool' + | is_ea(self) -> bool + | + | is_fragmented(self, *args) -> 'bool' + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) -> 'bool' + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_rrel(self, *args) -> 'bool' + | is_rrel(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) -> 'void' + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) -> 'void' + | justify_stkoff_right(self, size, _slotsize) + | + | reg1(self, *args) -> 'int' + | reg1(self) -> int + | + | reg2(self, *args) -> 'int' + | reg2(self) -> int + | + | regoff(self, *args) -> 'int' + | regoff(self) -> int + | + | scattered(self, *args) -> 'scattered_aloc_t const &' + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) -> 'void' + | set_badloc(self) + | + | set_ea(self, *args) -> 'void' + | set_ea(self, _ea) + | + | set_reg1(self, *args) -> 'void' + | set_reg1(self, reg, off=0) + | + | set_reg2(self, *args) -> 'void' + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, off) + | + | stkoff(self, *args) -> 'sval_t' + | stkoff(self) -> sval_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class argpart_t in module ida_typeinf: + +class argpart_t(argloc_t) + | Proxy of C++ argpart_t class. + | + | Method resolution order: + | argpart_t + | argloc_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, a) -> argpart_t + | __init__(self) -> argpart_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_argpart_t(...) + | delete_argpart_t(self) + | + | bad_offset(self, *args) -> 'bool' + | bad_offset(self) -> bool + | + | bad_size(self, *args) -> 'bool' + | bad_size(self) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | off + | argpart_t_off_get(self) -> ushort + | + | size + | argpart_t_size_get(self) -> ushort + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from argloc_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | _consume_rrel(self, *args) -> 'bool' + | _consume_rrel(self, p) -> bool + | + | _consume_scattered(self, *args) -> 'bool' + | _consume_scattered(self, p) -> bool + | + | _set_badloc(self, *args) -> 'void' + | _set_badloc(self) + | + | _set_biggest(self, *args) -> 'void' + | _set_biggest(self, ct, data) + | + | _set_custom(self, *args) -> 'void' + | _set_custom(self, ct, pdata) + | + | _set_ea(self, *args) -> 'void' + | _set_ea(self, _ea) + | + | _set_reg1(self, *args) -> 'void' + | _set_reg1(self, reg, off=0) + | + | _set_reg2(self, *args) -> 'void' + | _set_reg2(self, _reg1, _reg2) + | + | _set_stkoff(self, *args) -> 'void' + | _set_stkoff(self, off) + | + | advance(self, *args) -> 'bool' + | advance(self, delta) -> bool + | + | atype(self, *args) -> 'argloc_type_t' + | atype(self) -> argloc_type_t + | + | calc_offset(self, *args) -> 'sval_t' + | calc_offset(self) -> sval_t + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | consume_rrel(self, *args) -> 'void' + | consume_rrel(self, p) + | + | consume_scattered(self, *args) -> 'void' + | consume_scattered(self, p) + | + | get_biggest(self, *args) -> 'argloc_t::biggest_t' + | get_biggest(self) -> argloc_t::biggest_t + | + | get_custom(self, *args) -> 'void *' + | get_custom(self) -> void * + | + | get_ea(self, *args) -> 'ea_t' + | get_ea(self) -> ea_t + | + | get_reginfo(self, *args) -> 'uint32' + | get_reginfo(self) -> uint32 + | + | get_rrel(self, *args) -> 'rrel_t const &' + | get_rrel(self) -> rrel_t + | get_rrel(self) -> rrel_t + | + | has_reg(self, *args) -> 'bool' + | has_reg(self) -> bool + | + | has_stkoff(self, *args) -> 'bool' + | has_stkoff(self) -> bool + | + | is_badloc(self, *args) -> 'bool' + | is_badloc(self) -> bool + | + | is_custom(self, *args) -> 'bool' + | is_custom(self) -> bool + | + | is_ea(self, *args) -> 'bool' + | is_ea(self) -> bool + | + | is_fragmented(self, *args) -> 'bool' + | is_fragmented(self) -> bool + | + | is_mixed_scattered(self, *args) -> 'bool' + | is_mixed_scattered(self) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self) -> bool + | + | is_reg1(self, *args) -> 'bool' + | is_reg1(self) -> bool + | + | is_reg2(self, *args) -> 'bool' + | is_reg2(self) -> bool + | + | is_rrel(self, *args) -> 'bool' + | is_rrel(self) -> bool + | + | is_scattered(self, *args) -> 'bool' + | is_scattered(self) -> bool + | + | is_stkoff(self, *args) -> 'bool' + | is_stkoff(self) -> bool + | + | justify_reg_high(self, *args) -> 'void' + | justify_reg_high(self, size, _slotsize) + | + | justify_stkoff_right(self, *args) -> 'void' + | justify_stkoff_right(self, size, _slotsize) + | + | reg1(self, *args) -> 'int' + | reg1(self) -> int + | + | reg2(self, *args) -> 'int' + | reg2(self) -> int + | + | regoff(self, *args) -> 'int' + | regoff(self) -> int + | + | scattered(self, *args) -> 'scattered_aloc_t const &' + | scattered(self) -> scattered_aloc_t + | scattered(self) -> scattered_aloc_t + | + | set_badloc(self, *args) -> 'void' + | set_badloc(self) + | + | set_ea(self, *args) -> 'void' + | set_ea(self, _ea) + | + | set_reg1(self, *args) -> 'void' + | set_reg1(self, reg, off=0) + | + | set_reg2(self, *args) -> 'void' + | set_reg2(self, _reg1, _reg2) + | + | set_stkoff(self, *args) -> 'void' + | set_stkoff(self, off) + | + | stkoff(self, *args) -> 'sval_t' + | stkoff(self) -> sval_t + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from argloc_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from argloc_t: + | + | __hash__ = None + +Help on class argpartvec_t in module ida_typeinf: + +class argpartvec_t(builtins.object) + | Proxy of C++ qvector< argpart_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'argpart_t const &' + | __getitem__(self, i) -> argpart_t + | + | __init__(self, *args) + | __init__(self) -> argpartvec_t + | __init__(self, x) -> argpartvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_argpartvec_t(...) + | delete_argpartvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'argpart_t const &' + | at(self, _idx) -> argpart_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< argpart_t >::const_iterator' + | begin(self) -> argpart_t + | begin(self) -> argpart_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< argpart_t >::const_iterator' + | end(self) -> argpart_t + | end(self) -> argpart_t + | + | erase(self, *args) -> 'qvector< argpart_t >::iterator' + | erase(self, it) -> argpart_t + | erase(self, first, last) -> argpart_t + | + | extract(self, *args) -> 'argpart_t *' + | extract(self) -> argpart_t + | + | find(self, *args) -> 'qvector< argpart_t >::const_iterator' + | find(self, x) -> argpart_t + | find(self, x) -> argpart_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=argpart_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< argpart_t >::iterator' + | insert(self, it, x) -> argpart_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'argpart_t &' + | push_back(self, x) + | push_back(self) -> argpart_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class array_type_data_t in module ida_typeinf: + +class array_type_data_t(builtins.object) + | Proxy of C++ array_type_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, b=0, n=0) -> array_type_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_array_type_data_t(...) + | delete_array_type_data_t(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | base + | array_type_data_t_base_get(self) -> uint32 + | + | elem_type + | array_type_data_t_elem_type_get(self) -> tinfo_t + | + | nelems + | array_type_data_t_nelems_get(self) -> uint32 + | + | thisown + | The membership flag + +Help on function begin_type_updating in module ida_typeinf: + +begin_type_updating(*args) -> 'void' + begin_type_updating(utp) + + + Mark the beginning of a large update operation on the types. Can be + used with 'add_enum_member()' , add_struc_member, etc... Also see + 'end_type_updating()' + + @param utp (C++: update_type_t) + +Help on class bitfield_type_data_t in module ida_typeinf: + +class bitfield_type_data_t(builtins.object) + | Proxy of C++ bitfield_type_data_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, _nbytes=0, _width=0, _is_unsigned=False) -> bitfield_type_data_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_bitfield_type_data_t(...) + | delete_bitfield_type_data_t(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | is_unsigned + | bitfield_type_data_t_is_unsigned_get(self) -> bool + | + | nbytes + | bitfield_type_data_t_nbytes_get(self) -> uchar + | + | thisown + | The membership flag + | + | width + | bitfield_type_data_t_width_get(self) -> uchar + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function calc_c_cpp_name in module ida_typeinf: + +calc_c_cpp_name(*args) -> 'qstring *' + calc_c_cpp_name(name, type, ccn_flags) -> str + + + Get C or C++ form of the name. + + @param name: original (mangled or decorated) name (C++: const char *) + @param type: name type if known, otherwise NULL (C++: const tinfo_t + *) + @param ccn_flags: one of C/C++ naming flags (C++: int) + +Help on function calc_number_of_children in module ida_typeinf: + +calc_number_of_children(*args) -> 'int' + calc_number_of_children(loc, tif, dont_deref_ptr=False) -> int + + + Calculate max number of lines of a formatted c data, when expanded ( + 'PTV_EXPAND' ). + + @param loc: location of the data ( ALOC_STATIC or ALOC_CUSTOM ) + (C++: const argloc_t &) + @param tif: type info (C++: const tinfo_t &) + @param dont_deref_ptr: consider 'ea' as the ptr value (C++: bool) + +Help on function calc_tinfo_gaps in module ida_typeinf: + +calc_tinfo_gaps(*args) -> 'bool' + calc_tinfo_gaps(out, typid) -> bool + +Help on function calc_type_size in module ida_typeinf: + +calc_type_size(*args) -> 'PyObject *' + calc_type_size(ti, tp) -> PyObject * + + + Returns the size of a type + @param ti: Type info. 'None' can be passed. + @param tp: type string + @return: + - None on failure + - The size of the type + +Help on class callregs_t in module ida_typeinf: + +class callregs_t(builtins.object) + | Proxy of C++ callregs_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> callregs_t + | __init__(self, cc) -> callregs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_callregs_t(...) + | delete_callregs_t(self) + | + | init_regs(self, *args) -> 'void' + | init_regs(self, cc) + | + | reginds(self, *args) -> 'bool' + | reginds(self, gp_ind, fp_ind, r) -> bool + | + | reset(self, *args) -> 'void' + | reset(self) + | + | set(self, *args) -> 'void' + | set(self, _policy, gprs, fprs) + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | regcount(*args) -> 'int' + | regcount(cc) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | fpregs + | callregs_t_fpregs_get(self) -> intvec_t * + | + | gpregs + | callregs_t_gpregs_get(self) -> intvec_t * + | + | nregs + | callregs_t_nregs_get(self) -> int + | + | policy + | callregs_t_policy_get(self) -> argreg_policy_t + | + | thisown + | The membership flag + +Help on function callregs_t_regcount in module ida_typeinf: + +callregs_t_regcount(*args) -> 'int' + callregs_t_regcount(cc) -> int + +Help on function choose_local_tinfo in module ida_typeinf: + +choose_local_tinfo(*args) -> 'uint32' + choose_local_tinfo(ti, title, func=None, def_ord=0, ud=None) -> uint32 + + + Choose a type from the local type library. + + @param ti: pointer to til (C++: const til_t *) + @param title: title of listbox to display (C++: const char *) + @param func: predicate to select types to display (maybe NULL) (C++: + local_tinfo_predicate_t *) + @param def_ord: ordinal to position cursor before choose (C++: uint32) + @param ud: user data (C++: void *) + @return: == 0 means nothing is chosen, otherwise an ordinal number + +Help on function choose_local_tinfo_and_delta in module ida_typeinf: + +choose_local_tinfo_and_delta(*args) -> 'uint32' + choose_local_tinfo_and_delta(delta, ti, title, func=None, def_ord=0, ud=None) -> uint32 + + + Choose a type from the local type library and specify the pointer + shift value. + + @param delta: pointer shift value (C++: int32 *) + @param ti: pointer to til (C++: const til_t *) + @param title: title of listbox to display (C++: const char *) + @param func: predicate to select types to display (maybe NULL) (C++: + local_tinfo_predicate_t *) + @param def_ord: ordinal to position cursor before choose (C++: uint32) + @param ud: user data (C++: void *) + @return: == 0 means nothing is chosen, otherwise an ordinal number + +Help on function choose_named_type in module ida_typeinf: + +choose_named_type(*args) -> 'bool' + choose_named_type(out_sym, root_til, title, ntf_flags, predicate=None) -> bool + + + Choose a type from a type library. + + @param out_sym: pointer to be filled with the chosen type (C++: + til_symbol_t *) + @param root_til: pointer to starting til (the function will inspect + the base tils if allowed by flags) (C++: const til_t + *) + @param title: title of listbox to display (C++: const char *) + @param ntf_flags: combination of Flags for named types (C++: int) + @param predicate: predicate to select types to display (maybe NULL) + (C++: predicate_t *) + @return: false if nothing is chosen, otherwise true + +Help on function clear_tinfo_t in module ida_typeinf: + +clear_tinfo_t(*args) -> 'void' + clear_tinfo_t(_this) + +Help on function compact_til in module ida_typeinf: + +compact_til(*args) -> 'bool' + compact_til(ti) -> bool + + + Collect garbage in til. Must be called before storing the til. + + @param ti (C++: til_t *) + @return: true if any memory was freed + +Help on function compare_tinfo in module ida_typeinf: + +compare_tinfo(*args) -> 'bool' + compare_tinfo(t1, t2, tcflags) -> bool + +Help on class const_aloc_visitor_t in module ida_typeinf: + +class const_aloc_visitor_t(builtins.object) + | Proxy of C++ const_aloc_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> const_aloc_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_const_aloc_visitor_t(...) + | delete_const_aloc_visitor_t(self) + | + | visit_location(self, *args) -> 'int' + | visit_location(self, v, off, size) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function convert_pt_flags_to_hti in module ida_typeinf: + +convert_pt_flags_to_hti(*args) -> 'int' + convert_pt_flags_to_hti(pt_flags) -> int + + + Convert 'Type parsing flags' to 'Type formatting flags' . Type parsing + flags lesser than 0x10 don't have stable meaning and will be ignored + (more on these flags can be seen in idc.idc) + + @param pt_flags (C++: int) + +Help on function copy_named_type in module ida_typeinf: + +copy_named_type(*args) -> 'uint32' + copy_named_type(dsttil, srctil, name) -> uint32 + + + Copy a named type from one til to another. This function will copy the + specified type and all dependent types from the source type library to + the destination library. + + @param dsttil: Destination til. It must have orginal types enabled + (C++: til_t *) + @param srctil: Source til. (C++: const til_t *) + @param name: name of the type to copy (C++: const char *) + @return: ordinal number of the copied type. 0 means error + +Help on function copy_tinfo_t in module ida_typeinf: + +copy_tinfo_t(*args) -> 'void' + copy_tinfo_t(_this, r) + +Help on function create_numbered_type_name in module ida_typeinf: + +create_numbered_type_name(*args) -> 'qstring *' + create_numbered_type_name(ord) -> str + + + Create anonymous name for numbered type. This name can be used to + reference a numbered type by its ordinal Ordinal names have the + following format: '#' + set_de(ord) Returns: -1 if error, otherwise + the name length + + @param ord (C++: int32) + +Help on function create_tinfo in module ida_typeinf: + +create_tinfo(*args) -> 'bool' + create_tinfo(_this, bt, bt2, ptr) -> bool + +Help on function default_compiler in module ida_typeinf: + +default_compiler(*args) -> 'comp_t' + default_compiler() -> comp_t + + + Get compiler specified by \varmem{inf,idainfo,cc}. + +Help on function del_named_type in module ida_typeinf: + +del_named_type(*args) -> 'bool' + del_named_type(ti, name, ntf_flags) -> bool + + + Delete information about a symbol. + + @param ti: type library (C++: til_t *) + @param name: name of symbol (C++: const char *) + @param ntf_flags: combination of Flags for named types (C++: int) + @return: success + +Help on function del_numbered_type in module ida_typeinf: + +del_numbered_type(*args) -> 'bool' + del_numbered_type(ti, ordinal) -> bool + + + Delete a numbered type. + + + @param ti (C++: til_t *) + @param ordinal (C++: uint32) + +Help on function del_til in module ida_typeinf: + +del_til(*args) -> 'bool' + del_til(name) -> bool + + + Unload a til file. + + + @param name (C++: const char *) + +Help on function del_tinfo_attr in module ida_typeinf: + +del_tinfo_attr(*args) -> 'bool' + del_tinfo_attr(tif, key, make_copy) -> bool + +Help on function deref_ptr in module ida_typeinf: + +deref_ptr(*args) -> 'bool' + deref_ptr(ptr_ea, tif, closure_obj=None) -> bool + + + Dereference a pointer. + + @param ptr_ea: in/out parameter in: address of the pointer out: + the pointed address (C++: ea_t *) + @param tif: type of the pointer (C++: const tinfo_t &) + @param closure_obj: closure object (not used yet) (C++: ea_t *) + @return: success + +Help on function deserialize_tinfo in module ida_typeinf: + +deserialize_tinfo(*args) -> 'bool' + deserialize_tinfo(tif, til, ptype, pfields, pfldcmts) -> bool + +Help on function dstr_tinfo in module ida_typeinf: + +dstr_tinfo(*args) -> 'char const *' + dstr_tinfo(tif) -> char const * + +Help on function dump_func_type_data in module ida_typeinf: + +dump_func_type_data(*args) -> 'qstring *' + dump_func_type_data(fti, praloc_bits) -> str + + + Use 'func_type_data_t::dump()' + + + @param fti (C++: const func_type_data_t &) + @param praloc_bits (C++: int) + +Help on function end_type_updating in module ida_typeinf: + +end_type_updating(*args) -> 'void' + end_type_updating(utp) + + + Mark the end of a large update operation on the types (see + 'begin_type_updating()' ) + + + @param utp (C++: update_type_t) + +Help on class enum_member_t in module ida_typeinf: + +class enum_member_t(builtins.object) + | Proxy of C++ enum_member_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> enum_member_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_enum_member_t(...) + | delete_enum_member_t(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | enum_member_t_cmt_get(self) -> qstring * + | + | name + | enum_member_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | enum_member_t_value_get(self) -> uint64 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class enum_member_vec_t in module ida_typeinf: + +class enum_member_vec_t(builtins.object) + | Proxy of C++ qvector< enum_member_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'enum_member_t const &' + | __getitem__(self, i) -> enum_member_t + | + | __init__(self, *args) + | __init__(self) -> enum_member_vec_t + | __init__(self, x) -> enum_member_vec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_enum_member_vec_t(...) + | delete_enum_member_vec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'enum_member_t const &' + | at(self, _idx) -> enum_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | begin(self) -> enum_member_t + | begin(self) -> enum_member_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | end(self) -> enum_member_t + | end(self) -> enum_member_t + | + | erase(self, *args) -> 'qvector< enum_member_t >::iterator' + | erase(self, it) -> enum_member_t + | erase(self, first, last) -> enum_member_t + | + | extract(self, *args) -> 'enum_member_t *' + | extract(self) -> enum_member_t + | + | find(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | find(self, x) -> enum_member_t + | find(self, x) -> enum_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=enum_member_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< enum_member_t >::iterator' + | insert(self, it, x) -> enum_member_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'enum_member_t &' + | push_back(self, x) + | push_back(self) -> enum_member_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class enum_type_data_t in module ida_typeinf: + +class enum_type_data_t(enum_member_vec_t) + | Proxy of C++ enum_type_data_t class. + | + | Method resolution order: + | enum_type_data_t + | enum_member_vec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _bte=BTE_ALWAYS|BTE_HEX) -> enum_type_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_enum_type_data_t(...) + | delete_enum_type_data_t(self) + | + | calc_mask(self, *args) -> 'uint64' + | calc_mask(self) -> uint64 + | + | calc_nbytes(self, *args) -> 'int' + | calc_nbytes(self) -> int + | + | is_64bit(self, *args) -> 'bool' + | is_64bit(self) -> bool + | + | is_char(self, *args) -> 'bool' + | is_char(self) -> bool + | + | is_hex(self, *args) -> 'bool' + | is_hex(self) -> bool + | + | is_sdec(self, *args) -> 'bool' + | is_sdec(self) -> bool + | + | is_udec(self, *args) -> 'bool' + | is_udec(self) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bte + | enum_type_data_t_bte_get(self) -> bte_t + | + | group_sizes + | enum_type_data_t_group_sizes_get(self) -> intvec_t * + | + | taenum_bits + | enum_type_data_t_taenum_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from enum_member_vec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'enum_member_t const &' + | __getitem__(self, i) -> enum_member_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'enum_member_t const &' + | at(self, _idx) -> enum_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | begin(self) -> enum_member_t + | begin(self) -> enum_member_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | end(self) -> enum_member_t + | end(self) -> enum_member_t + | + | erase(self, *args) -> 'qvector< enum_member_t >::iterator' + | erase(self, it) -> enum_member_t + | erase(self, first, last) -> enum_member_t + | + | extract(self, *args) -> 'enum_member_t *' + | extract(self) -> enum_member_t + | + | find(self, *args) -> 'qvector< enum_member_t >::const_iterator' + | find(self, x) -> enum_member_t + | find(self, x) -> enum_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=enum_member_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< enum_member_t >::iterator' + | insert(self, it, x) -> enum_member_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'enum_member_t &' + | push_back(self, x) + | push_back(self) -> enum_member_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from enum_member_vec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from enum_member_vec_t: + | + | __hash__ = None + +Help on function extract_argloc in module ida_typeinf: + +extract_argloc(*args) -> 'bool' + extract_argloc(vloc, ptype, is_retval) -> bool + + + Deserialize argument location. + + + @param vloc (C++: argloc_t *) + @param ptype (C++: const type_t **) + @param is_retval (C++: bool) + +Help on function find_tinfo_udt_member in module ida_typeinf: + +find_tinfo_udt_member(*args) -> 'int' + find_tinfo_udt_member(udm, typid, strmem_flags) -> int + +Help on function first_named_type in module ida_typeinf: + +first_named_type(*args) -> 'char const *' + first_named_type(ti, ntf_flags) -> char const * + + + Enumerate types. Returns mangled names. Never returns anonymous types. + To include it, enumerate types by ordinals. + + @param ti (C++: const til_t *) + @param ntf_flags (C++: int) + +Help on function for_all_arglocs in module ida_typeinf: + +for_all_arglocs(*args) -> 'int' + for_all_arglocs(vv, vloc, size, off=0) -> int + + + Compress larger argloc types and initiate the aloc visitor. + + + @param vv (C++: aloc_visitor_t &) + @param vloc (C++: argloc_t &) + @param size (C++: int) + @param off (C++: int) + +Help on function for_all_const_arglocs in module ida_typeinf: + +for_all_const_arglocs(*args) -> 'int' + for_all_const_arglocs(vv, vloc, size, off=0) -> int + + + See 'for_all_arglocs()' + + + @param vv (C++: const_aloc_visitor_t &) + @param vloc (C++: const argloc_t &) + @param size (C++: int) + @param off (C++: int) + +Help on function free_til in module ida_typeinf: + +free_til(*args) -> 'void' + free_til(ti) + + + Free memory allocated by til. + + + @param ti (C++: til_t *) + +Help on function func_has_stkframe_hole in module ida_typeinf: + +func_has_stkframe_hole(*args) -> 'bool' + func_has_stkframe_hole(ea, fti) -> bool + + + Looks for a hole at the beginning of the stack arguments. Will make + use of the IDB's 'func_t' function at that place (if present) to help + determine the presence of such a hole. + + @param ea (C++: ea_t) + @param fti (C++: const func_type_data_t &) + +Help on class func_type_data_t in module ida_typeinf: + +class func_type_data_t(funcargvec_t) + | Proxy of C++ func_type_data_t class. + | + | Method resolution order: + | func_type_data_t + | funcargvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> func_type_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_type_data_t(...) + | delete_func_type_data_t(self) + | + | dump(self, *args) -> 'bool' + | dump(self, praloc_bits=0x02) -> bool + | + | get_call_method(self, *args) -> 'int' + | get_call_method(self) -> int + | + | guess_cc(self, *args) -> 'cm_t' + | guess_cc(self, purged, cc_flags) -> cm_t + | + | is_high(self, *args) -> 'bool' + | is_high(self) -> bool + | + | is_noret(self, *args) -> 'bool' + | is_noret(self) -> bool + | + | is_pure(self, *args) -> 'bool' + | is_pure(self) -> bool + | + | is_vararg_cc(self, *args) -> 'bool' + | is_vararg_cc(self) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | cc + | func_type_data_t_cc_get(self) -> cm_t + | + | flags + | func_type_data_t_flags_get(self) -> int + | + | retloc + | func_type_data_t_retloc_get(self) -> argloc_t + | + | rettype + | func_type_data_t_rettype_get(self) -> tinfo_t + | + | spoiled + | func_type_data_t_spoiled_get(self) -> reginfovec_t + | + | stkargs + | func_type_data_t_stkargs_get(self) -> uval_t + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from funcargvec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'funcarg_t const &' + | __getitem__(self, i) -> funcarg_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'funcarg_t const &' + | at(self, _idx) -> funcarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | begin(self) -> funcarg_t + | begin(self) -> funcarg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | end(self) -> funcarg_t + | end(self) -> funcarg_t + | + | erase(self, *args) -> 'qvector< funcarg_t >::iterator' + | erase(self, it) -> funcarg_t + | erase(self, first, last) -> funcarg_t + | + | extract(self, *args) -> 'funcarg_t *' + | extract(self) -> funcarg_t + | + | find(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | find(self, x) -> funcarg_t + | find(self, x) -> funcarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=funcarg_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< funcarg_t >::iterator' + | insert(self, it, x) -> funcarg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'funcarg_t &' + | push_back(self, x) + | push_back(self) -> funcarg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from funcargvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from funcargvec_t: + | + | __hash__ = None + +Help on class funcarg_t in module ida_typeinf: + +class funcarg_t(builtins.object) + | Proxy of C++ funcarg_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> funcarg_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_funcarg_t(...) + | delete_funcarg_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | argloc + | funcarg_t_argloc_get(self) -> argloc_t + | + | cmt + | funcarg_t_cmt_get(self) -> qstring * + | + | flags + | funcarg_t_flags_get(self) -> uint32 + | + | name + | funcarg_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | funcarg_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class funcargvec_t in module ida_typeinf: + +class funcargvec_t(builtins.object) + | Proxy of C++ qvector< funcarg_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'funcarg_t const &' + | __getitem__(self, i) -> funcarg_t + | + | __init__(self, *args) + | __init__(self) -> funcargvec_t + | __init__(self, x) -> funcargvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_funcargvec_t(...) + | delete_funcargvec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'funcarg_t const &' + | at(self, _idx) -> funcarg_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | begin(self) -> funcarg_t + | begin(self) -> funcarg_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | end(self) -> funcarg_t + | end(self) -> funcarg_t + | + | erase(self, *args) -> 'qvector< funcarg_t >::iterator' + | erase(self, it) -> funcarg_t + | erase(self, first, last) -> funcarg_t + | + | extract(self, *args) -> 'funcarg_t *' + | extract(self) -> funcarg_t + | + | find(self, *args) -> 'qvector< funcarg_t >::const_iterator' + | find(self, x) -> funcarg_t + | find(self, x) -> funcarg_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=funcarg_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< funcarg_t >::iterator' + | insert(self, it, x) -> funcarg_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'funcarg_t &' + | push_back(self, x) + | push_back(self) -> funcarg_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function gcc_layout in module ida_typeinf: + +gcc_layout(*args) -> 'bool' + gcc_layout() -> bool + + + Should use the struct/union layout as done by gcc? + +Help on function gen_decorate_name in module ida_typeinf: + +gen_decorate_name(*args) -> 'qstring *' + gen_decorate_name(name, mangle, cc, type) -> str + + + Generic function for 'decorate_name()' (may be used in IDP modules) + + + @param name (C++: const char *) + @param mangle (C++: bool) + @param cc (C++: cm_t) + @param type (C++: const tinfo_t *) + +Help on function gen_use_arg_tinfos in module ida_typeinf: + +gen_use_arg_tinfos(*args) -> 'void' + gen_use_arg_tinfos(caller, fti, rargs, set_optype, is_stkarg_load, has_delay_slot) + + + The main function using these callbacks: + + + @param caller (C++: ea_t) + @param fti (C++: func_type_data_t *) + @param rargs (C++: funcargvec_t *) + @param set_optype (C++: set_op_tinfo_t *) + @param is_stkarg_load (C++: is_stkarg_load_t *) + @param has_delay_slot (C++: has_delay_slot_t *) + +Help on function get_abi_name in module ida_typeinf: + +get_abi_name(*args) -> 'qstring *' + get_abi_name() -> str + + + Get ABI name. + + @return: length of the name (>=0) + +Help on function get_alias_target in module ida_typeinf: + +get_alias_target(*args) -> 'uint32' + get_alias_target(ti, ordinal) -> uint32 + + + Find the final alias destination. If the ordinal has not been aliased, + return the specified ordinal itself If failed, returns 0. + + @param ti (C++: const til_t *) + @param ordinal (C++: uint32) + +Help on function get_arg_addrs in module ida_typeinf: + +get_arg_addrs(*args) -> 'PyObject *' + get_arg_addrs(caller) -> PyObject * + + + Retrieve addresses of argument initialization instructions + + @param caller: the address of the call instruction + @return: list of instruction addresses + +Help on function get_base_type in module ida_typeinf: + +get_base_type(*args) -> 'type_t' + get_base_type(t) -> type_t + + + Get get basic type bits ( 'TYPE_BASE_MASK' ) + + + @param t (C++: type_t) + +Help on function get_c_header_path in module ida_typeinf: + +get_c_header_path(*args) -> 'qstring *' + get_c_header_path() -> str + + + Get the include directory path of the target compiler. + +Help on function get_c_macros in module ida_typeinf: + +get_c_macros(*args) -> 'qstring *' + get_c_macros() -> str + + + Get predefined macros for the target compiler. + +Help on function get_comp in module ida_typeinf: + +get_comp(*args) -> 'comp_t' + get_comp(comp) -> comp_t + + + Get compiler bits. + + + @param comp (C++: comp_t) + +Help on function get_compiler_abbr in module ida_typeinf: + +get_compiler_abbr(*args) -> 'char const *' + get_compiler_abbr(id) -> char const * + + + Get abbreviated compiler name. + + + @param id (C++: comp_t) + +Help on function get_compiler_name in module ida_typeinf: + +get_compiler_name(*args) -> 'char const *' + get_compiler_name(id) -> char const * + + + Get full compiler name. + + + @param id (C++: comp_t) + +Help on function get_compilers in module ida_typeinf: + +get_compilers(*args) -> 'void' + get_compilers(ids, names, abbrs) + + + Get names of all built-in compilers. + + + @param ids (C++: compvec_t *) + @param names (C++: qstrvec_t *) + @param abbrs (C++: qstrvec_t *) + +Help on function get_enum_member_expr in module ida_typeinf: + +get_enum_member_expr(*args) -> 'qstring *' + get_enum_member_expr(tif, serial, value) -> str + + + Return a C expression that can be used to represent an enum member. If + the value does not correspond to any single enum member, this function + tries to find a bitwise combination of enum members that correspond to + it. If more than half of value bits do not match any enum members, it + fails. + + @param tif: enumeration type (C++: const tinfo_t &) + @param serial: which enumeration member to use (0 means the first with + the given value) (C++: int) + @param value: value to search in the enumeration type. only 32-bit + number can be handled yet (C++: uint64) + @return: success + +Help on function get_full_type in module ida_typeinf: + +get_full_type(*args) -> 'type_t' + get_full_type(t) -> type_t + + + Get basic type bits + type flags ( 'TYPE_FULL_MASK' ) + + + @param t (C++: type_t) + +Help on function get_idainfo_by_type in module ida_typeinf: + +get_idainfo_by_type(*args) -> 'size_t *, flags_t *, opinfo_t *, size_t *' + get_idainfo_by_type(tif) -> bool + + + Extract information from a 'tinfo_t' . + + @param tif: the type to inspect (C++: const tinfo_t &) + +Help on function get_idati in module ida_typeinf: + +get_idati(*args) -> 'til_t const *' + get_idati() -> til_t + + + Pointer to the local type library - this til is private for each IDB + file Function that accepts til_t* uses local type library instead of + NULL. + +Help on function get_named_type in module ida_typeinf: + +get_named_type(*args) -> 'PyObject *' + get_named_type(til, name, ntf_flags) -> PyObject * + + + Get a type data by its name. + @param til: the type library + @param name: the type name + @param ntf_flags: a combination of NTF_* constants + @return: + None on failure + tuple(code, type_str, fields_str, cmt, field_cmts, sclass, value) on success + +Help on function get_named_type64 in module ida_typeinf: + +get_named_type64(*args) -> 'PyObject *' + get_named_type64(til, name, ntf_flags) -> PyObject * + + + See 'get_named_type()' above.If the value in the 'ti' library is + 32-bit, it will be sign-extended before being stored in the 'value' + pointer. + + @param name (C++: const char *) + @param ntf_flags (C++: int) + +Help on function get_numbered_type in module ida_typeinf: + +get_numbered_type(*args) -> 'PyObject *' + get_numbered_type(til, ordinal) -> PyObject * + + + Retrieve a type by its ordinal number. + + + @param ordinal (C++: uint32) + +Help on function get_numbered_type_name in module ida_typeinf: + +get_numbered_type_name(*args) -> 'char const *' + get_numbered_type_name(ti, ordinal) -> char const * + + + Get type name (if exists) by its ordinal. If the type is anonymous, + returns "". If failed, returns NULL + + @param ti (C++: const til_t *) + @param ordinal (C++: uint32) + +Help on function get_ordinal_from_idb_type in module ida_typeinf: + +get_ordinal_from_idb_type(*args) -> 'int' + get_ordinal_from_idb_type(name, type) -> int + + + Get ordinal number of an idb type (struct/enum). The 'type' parameter + is used only to determine the kind of the type (struct or enum) Use + this function to find out the correspondence between idb types and til + types + + @param name (C++: const char *) + @param type (C++: const type_t *) + +Help on function get_ordinal_qty in module ida_typeinf: + +get_ordinal_qty(*args) -> 'uint32' + get_ordinal_qty(ti) -> uint32 + + + Get number of allocated ordinals. + + @param ti (C++: const til_t *) + @return: uint32(-1) if failed + +Help on function get_scalar_bt in module ida_typeinf: + +get_scalar_bt(*args) -> 'type_t' + get_scalar_bt(size) -> type_t + +Help on function get_stock_tinfo in module ida_typeinf: + +get_stock_tinfo(*args) -> 'bool' + get_stock_tinfo(tif, id) -> bool + +Help on function get_tinfo_attr in module ida_typeinf: + +get_tinfo_attr(*args) -> 'bool' + get_tinfo_attr(typid, key, bv, all_attrs) -> bool + +Help on function get_tinfo_attrs in module ida_typeinf: + +get_tinfo_attrs(*args) -> 'bool' + get_tinfo_attrs(typid, tav, include_ref_attrs) -> bool + +Help on function get_tinfo_details in module ida_typeinf: + +get_tinfo_details(*args) -> 'bool' + get_tinfo_details(typid, bt2, buf) -> bool + +Help on function get_tinfo_pdata in module ida_typeinf: + +get_tinfo_pdata(*args) -> 'size_t' + get_tinfo_pdata(outptr, typid, what) -> size_t + +Help on function get_tinfo_property in module ida_typeinf: + +get_tinfo_property(*args) -> 'size_t' + get_tinfo_property(typid, gta_prop) -> size_t + +Help on function get_tinfo_size in module ida_typeinf: + +get_tinfo_size(*args) -> 'size_t' + get_tinfo_size(p_effalign, typid, gts_code) -> size_t + +Help on function get_type_flags in module ida_typeinf: + +get_type_flags(*args) -> 'type_t' + get_type_flags(t) -> type_t + + + Get type flags ( 'TYPE_FLAGS_MASK' ) + + + @param t (C++: type_t) + +Help on function get_type_ordinal in module ida_typeinf: + +get_type_ordinal(*args) -> 'int32' + get_type_ordinal(ti, name) -> int32 + + + Get type ordinal by its name. + + + @param ti (C++: const til_t *) + @param name (C++: const char *) + +Help on function guess_func_cc in module ida_typeinf: + +guess_func_cc(*args) -> 'cm_t' + guess_func_cc(fti, npurged, cc_flags) -> cm_t + + + Use 'func_type_data_t::guess_cc()' + + + @param fti (C++: const func_type_data_t &) + @param npurged (C++: int) + @param cc_flags (C++: int) + +Help on function guess_tinfo in module ida_typeinf: + +guess_tinfo(*args) -> 'int' + guess_tinfo(tif, id) -> int + + + Generate a type information about the id from the disassembly. id can + be a structure/union/enum id or an address. + + @param tif (C++: tinfo_t *) + @param id (C++: tid_t) + @return: one of Guess tinfo codes + +Help on class ida_lowertype_helper_t in module ida_typeinf: + +class ida_lowertype_helper_t(lowertype_helper_t) + | Proxy of C++ ida_lowertype_helper_t class. + | + | Method resolution order: + | ida_lowertype_helper_t + | lowertype_helper_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _tif, _ea, _pb) -> ida_lowertype_helper_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ida_lowertype_helper_t(...) + | delete_ida_lowertype_helper_t(self) + | + | func_has_stkframe_hole(self, *args) -> 'bool' + | func_has_stkframe_hole(self, candidate, candidate_data) -> bool + | + | get_func_purged_bytes(self, *args) -> 'int' + | get_func_purged_bytes(self, candidate, arg3) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from lowertype_helper_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function idc_get_local_type in module ida_typeinf: + +idc_get_local_type(*args) -> 'int' + idc_get_local_type(ordinal, flags, buf, maxsize) -> int + +Help on function idc_get_local_type_name in module ida_typeinf: + +idc_get_local_type_name(*args) -> 'size_t' + idc_get_local_type_name(ordinal) -> str + +Help on function idc_get_local_type_raw in module ida_typeinf: + +idc_get_local_type_raw(*args) -> 'PyObject *' + idc_get_local_type_raw(ordinal) -> PyObject * + +Help on function idc_get_type in module ida_typeinf: + +idc_get_type(*args) -> 'size_t' + idc_get_type(ea) -> str + +Help on function idc_get_type_raw in module ida_typeinf: + +idc_get_type_raw(*args) -> 'PyObject *' + idc_get_type_raw(ea) -> PyObject * + +Help on function idc_guess_type in module ida_typeinf: + +idc_guess_type(*args) -> 'size_t' + idc_guess_type(ea) -> str + +Help on function idc_parse_decl in module ida_typeinf: + +idc_parse_decl(*args) -> 'PyObject *' + idc_parse_decl(ti, decl, flags) -> PyObject * + +Help on function idc_parse_types in module ida_typeinf: + +idc_parse_types(*args) -> 'int' + idc_parse_types(input, flags) -> int + +Help on function idc_print_type in module ida_typeinf: + +idc_print_type(*args) -> 'PyObject *' + idc_print_type(_type, _fields, name, flags) -> PyObject * + +Help on function idc_set_local_type in module ida_typeinf: + +idc_set_local_type(*args) -> 'int' + idc_set_local_type(ordinal, dcl, flags) -> int + +Help on function import_type in module ida_typeinf: + +import_type(*args) -> 'tid_t' + import_type(til, idx, name, flags=0) -> tid_t + + + Copy a named type from til to idb. + + @param til: type library (C++: const til_t *) + @param idx: the position of the new type in the list of types + (structures or enums). -1 means at the end of the list + (C++: int) + @param name: the type name (C++: const char *) + @param flags: combination of Import type flags (C++: int) + @return: BADNODE on error + +Help on function is_autosync in module ida_typeinf: + +is_autosync(*args) -> 'bool' + is_autosync(name, type) -> bool + is_autosync(name, tif) -> bool + + + Is the specified idb type automatically synchronized? + + + @param name (C++: const char *) + @param type (C++: const type_t *) + +Help on function is_code_far in module ida_typeinf: + +is_code_far(*args) -> 'bool' + is_code_far(cm) -> bool + + + Does the given model specify far code?. + + + @param cm (C++: cm_t) + +Help on function is_comp_unsure in module ida_typeinf: + +is_comp_unsure(*args) -> 'comp_t' + is_comp_unsure(comp) -> comp_t + + + See 'COMP_UNSURE' . + + + @param comp (C++: comp_t) + +Help on function is_data_far in module ida_typeinf: + +is_data_far(*args) -> 'bool' + is_data_far(cm) -> bool + + + Does the given model specify far data?. + + + @param cm (C++: cm_t) + +Help on function is_gcc in module ida_typeinf: + +is_gcc(*args) -> 'bool' + is_gcc() -> bool + + + Is the target compiler 'COMP_GNU' ? + +Help on function is_gcc32 in module ida_typeinf: + +is_gcc32(*args) -> 'bool' + is_gcc32() -> bool + + + Is the target compiler 32 bit gcc? + +Help on function is_gcc64 in module ida_typeinf: + +is_gcc64(*args) -> 'bool' + is_gcc64() -> bool + + + Is the target compiler 64 bit gcc? + +Help on function is_ordinal_name in module ida_typeinf: + +is_ordinal_name(*args) -> 'bool' + is_ordinal_name(name, ord=None) -> bool + + + Check if the name is an ordinal name. Ordinal names have the following + format: '#' + set_de(ord) + + @param name (C++: const char *) + @param ord (C++: uint32 *) + +Help on function is_purging_cc in module ida_typeinf: + +is_purging_cc(*args) -> 'bool' + is_purging_cc(cm) -> bool + + + Does the calling convention clean the stack arguments upon + return?.this function is valid only for x86 code + + @param cm (C++: cm_t) + +Help on function is_restype_enum in module ida_typeinf: + +is_restype_enum(*args) -> 'bool' + is_restype_enum(til, type) -> bool + +Help on function is_restype_struct in module ida_typeinf: + +is_restype_struct(*args) -> 'bool' + is_restype_struct(til, type) -> bool + +Help on function is_restype_struni in module ida_typeinf: + +is_restype_struni(*args) -> 'bool' + is_restype_struni(til, type) -> bool + +Help on function is_restype_void in module ida_typeinf: + +is_restype_void(*args) -> 'bool' + is_restype_void(til, type) -> bool + +Help on function is_sdacl_byte in module ida_typeinf: + +is_sdacl_byte(*args) -> 'bool' + is_sdacl_byte(t) -> bool + + + Identify an sdacl byte. The first sdacl byte has the following format: + 11xx000x. The sdacl bytes are appended to udt fields. They indicate + the start of type attributes (as the tah-bytes do). The sdacl bytes + are used in the udt headers instead of the tah-byte. This is done for + compatibility with old databases, they were already using sdacl bytes + in udt headers and as udt field postfixes. (see "sdacl-typeattrs" in + the type bit definitions) + + @param t (C++: type_t) + +Help on function is_tah_byte in module ida_typeinf: + +is_tah_byte(*args) -> 'bool' + is_tah_byte(t) -> bool + + + The TAH byte (type attribute header byte) denotes the start of type + attributes. (see "tah-typeattrs" in the type bit definitions) + + @param t (C++: type_t) + +Help on function is_type_arithmetic in module ida_typeinf: + +is_type_arithmetic(*args) -> 'bool' + is_type_arithmetic(t) -> bool + + + Is the type an arithmetic type? (floating or integral) + + + @param t (C++: type_t) + +Help on function is_type_array in module ida_typeinf: + +is_type_array(*args) -> 'bool' + is_type_array(t) -> bool + + + See 'BT_ARRAY' . + + + @param t (C++: type_t) + +Help on function is_type_bitfld in module ida_typeinf: + +is_type_bitfld(*args) -> 'bool' + is_type_bitfld(t) -> bool + + + See 'BT_BITFIELD' . + + + @param t (C++: type_t) + +Help on function is_type_bool in module ida_typeinf: + +is_type_bool(*args) -> 'bool' + is_type_bool(t) -> bool + + + See 'BTF_BOOL' . + + + @param t (C++: type_t) + +Help on function is_type_char in module ida_typeinf: + +is_type_char(*args) -> 'bool' + is_type_char(t) -> bool + + + Does the type specify a char value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_complex in module ida_typeinf: + +is_type_complex(*args) -> 'bool' + is_type_complex(t) -> bool + + + See 'BT_COMPLEX' . + + + @param t (C++: type_t) + +Help on function is_type_const in module ida_typeinf: + +is_type_const(*args) -> 'bool' + is_type_const(t) -> bool + + + See 'BTM_CONST' . + + + @param t (C++: type_t) + +Help on function is_type_double in module ida_typeinf: + +is_type_double(*args) -> 'bool' + is_type_double(t) -> bool + + + See 'BTF_DOUBLE' . + + + @param t (C++: type_t) + +Help on function is_type_enum in module ida_typeinf: + +is_type_enum(*args) -> 'bool' + is_type_enum(t) -> bool + + + See 'BTF_ENUM' . + + + @param t (C++: type_t) + +Help on function is_type_ext_arithmetic in module ida_typeinf: + +is_type_ext_arithmetic(*args) -> 'bool' + is_type_ext_arithmetic(t) -> bool + + + Is the type an extended arithmetic type? (arithmetic or enum) + + + @param t (C++: type_t) + +Help on function is_type_ext_integral in module ida_typeinf: + +is_type_ext_integral(*args) -> 'bool' + is_type_ext_integral(t) -> bool + + + Is the type an extended integral type? (integral or enum) + + + @param t (C++: type_t) + +Help on function is_type_float in module ida_typeinf: + +is_type_float(*args) -> 'bool' + is_type_float(t) -> bool + + + See 'BTF_FLOAT' . + + + @param t (C++: type_t) + +Help on function is_type_floating in module ida_typeinf: + +is_type_floating(*args) -> 'bool' + is_type_floating(t) -> bool + + + Is the type a floating point type? + + + @param t (C++: type_t) + +Help on function is_type_func in module ida_typeinf: + +is_type_func(*args) -> 'bool' + is_type_func(t) -> bool + + + See 'BT_FUNC' . + + + @param t (C++: type_t) + +Help on function is_type_int in module ida_typeinf: + +is_type_int(*args) -> 'bool' + is_type_int(bt) -> bool + + + Does the type_t specify one of the basic types in 'Basic type: + integer' ? + + + @param bt (C++: type_t) + +Help on function is_type_int128 in module ida_typeinf: + +is_type_int128(*args) -> 'bool' + is_type_int128(t) -> bool + + + Does the type specify a 128-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int16 in module ida_typeinf: + +is_type_int16(*args) -> 'bool' + is_type_int16(t) -> bool + + + Does the type specify a 16-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int32 in module ida_typeinf: + +is_type_int32(*args) -> 'bool' + is_type_int32(t) -> bool + + + Does the type specify a 32-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_int64 in module ida_typeinf: + +is_type_int64(*args) -> 'bool' + is_type_int64(t) -> bool + + + Does the type specify a 64-bit value? (signed or unsigned, see 'Basic + type: integer' ) + + + @param t (C++: type_t) + +Help on function is_type_integral in module ida_typeinf: + +is_type_integral(*args) -> 'bool' + is_type_integral(t) -> bool + + + Is the type an integral type (char/short/int/long/bool)? + + + @param t (C++: type_t) + +Help on function is_type_ldouble in module ida_typeinf: + +is_type_ldouble(*args) -> 'bool' + is_type_ldouble(t) -> bool + + + See 'BTF_LDOUBLE' . + + + @param t (C++: type_t) + +Help on function is_type_paf in module ida_typeinf: + +is_type_paf(*args) -> 'bool' + is_type_paf(t) -> bool + + + Is the type a pointer, array, or function type? + + + @param t (C++: type_t) + +Help on function is_type_partial in module ida_typeinf: + +is_type_partial(*args) -> 'bool' + is_type_partial(t) -> bool + + + Identifies an unknown or void type with a known size (see 'Basic type: + unknown & void' ) + + + @param t (C++: type_t) + +Help on function is_type_ptr in module ida_typeinf: + +is_type_ptr(*args) -> 'bool' + is_type_ptr(t) -> bool + + + See 'BT_PTR' . + + + @param t (C++: type_t) + +Help on function is_type_ptr_or_array in module ida_typeinf: + +is_type_ptr_or_array(*args) -> 'bool' + is_type_ptr_or_array(t) -> bool + + + Is the type a pointer or array type? + + + @param t (C++: type_t) + +Help on function is_type_struct in module ida_typeinf: + +is_type_struct(*args) -> 'bool' + is_type_struct(t) -> bool + + + See 'BTF_STRUCT' . + + + @param t (C++: type_t) + +Help on function is_type_struni in module ida_typeinf: + +is_type_struni(*args) -> 'bool' + is_type_struni(t) -> bool + + + Is the type a struct or union? + + + @param t (C++: type_t) + +Help on function is_type_sue in module ida_typeinf: + +is_type_sue(*args) -> 'bool' + is_type_sue(t) -> bool + + + Is the type a struct/union/enum? + + + @param t (C++: type_t) + +Help on function is_type_tbyte in module ida_typeinf: + +is_type_tbyte(*args) -> 'bool' + is_type_tbyte(t) -> bool + + + See 'BTF_FLOAT' . + + + @param t (C++: type_t) + +Help on function is_type_typedef in module ida_typeinf: + +is_type_typedef(*args) -> 'bool' + is_type_typedef(t) -> bool + + + See 'BTF_TYPEDEF' . + + + @param t (C++: type_t) + +Help on function is_type_uchar in module ida_typeinf: + +is_type_uchar(*args) -> 'bool' + is_type_uchar(t) -> bool + + + See 'BTF_UCHAR' . + + + @param t (C++: type_t) + +Help on function is_type_uint in module ida_typeinf: + +is_type_uint(*args) -> 'bool' + is_type_uint(t) -> bool + + + See 'BTF_UINT' . + + + @param t (C++: type_t) + +Help on function is_type_uint128 in module ida_typeinf: + +is_type_uint128(*args) -> 'bool' + is_type_uint128(t) -> bool + + + See 'BTF_UINT128' . + + + @param t (C++: type_t) + +Help on function is_type_uint16 in module ida_typeinf: + +is_type_uint16(*args) -> 'bool' + is_type_uint16(t) -> bool + + + See 'BTF_UINT16' . + + + @param t (C++: type_t) + +Help on function is_type_uint32 in module ida_typeinf: + +is_type_uint32(*args) -> 'bool' + is_type_uint32(t) -> bool + + + See 'BTF_UINT32' . + + + @param t (C++: type_t) + +Help on function is_type_uint64 in module ida_typeinf: + +is_type_uint64(*args) -> 'bool' + is_type_uint64(t) -> bool + + + See 'BTF_UINT64' . + + + @param t (C++: type_t) + +Help on function is_type_union in module ida_typeinf: + +is_type_union(*args) -> 'bool' + is_type_union(t) -> bool + + + See 'BTF_UNION' . + + + @param t (C++: type_t) + +Help on function is_type_unknown in module ida_typeinf: + +is_type_unknown(*args) -> 'bool' + is_type_unknown(t) -> bool + + + See 'BT_UNKNOWN' . + + + @param t (C++: type_t) + +Help on function is_type_void in module ida_typeinf: + +is_type_void(*args) -> 'bool' + is_type_void(t) -> bool + + + See 'BTF_VOID' . + + + @param t (C++: type_t) + +Help on function is_type_volatile in module ida_typeinf: + +is_type_volatile(*args) -> 'bool' + is_type_volatile(t) -> bool + + + See 'BTM_VOLATILE' . + + + @param t (C++: type_t) + +Help on function is_typeid_last in module ida_typeinf: + +is_typeid_last(*args) -> 'bool' + is_typeid_last(t) -> bool + + + Is the type_t the last byte of type declaration? (there are no + additional bytes after a basic type, see '_BT_LAST_BASIC' ) + + @param t (C++: type_t) + +Help on function is_user_cc in module ida_typeinf: + +is_user_cc(*args) -> 'bool' + is_user_cc(cm) -> bool + + + Does the calling convention specify argument locations explicitly? + + + @param cm (C++: cm_t) + +Help on function is_vararg_cc in module ida_typeinf: + +is_vararg_cc(*args) -> 'bool' + is_vararg_cc(cm) -> bool + + + Does the calling convention use ellipsis? + + + @param cm (C++: cm_t) + +Help on function lexcompare_tinfo in module ida_typeinf: + +lexcompare_tinfo(*args) -> 'int' + lexcompare_tinfo(t1, t2, arg3) -> int + +Help on function load_til in module ida_typeinf: + +load_til(*args) -> 'qstring *' + load_til(name, tildir=None) -> til_t + + + Load til from a file. Failure to load base tils are reported into + 'errbuf'. They do not prevent loading of the main til. + + @param name: filename of the til. If it's an absolute path, tildir is + ignored. NB: the file extension is forced to .til (C++: + const char *) + @param tildir: directory where to load the til from. NULL means + default til subdirectories. (C++: const char *) + @return: pointer to resulting til, NULL if failed and error message is + in errbuf + +Help on function load_til_header in module ida_typeinf: + +load_til_header(*args) -> 'qstring *' + load_til_header(tildir, name) -> til_t + + + Get human-readable til description. + + + @param tildir (C++: const char *) + @param name (C++: const char *) + +Help on function lower_type in module ida_typeinf: + +lower_type(*args) -> 'int' + lower_type(til, tif, name=None, _helper=None) -> int + + + Lower type. Inspect the type and lower all function subtypes using + lower_func_type().We call the prototypes usually encountered in source + files "high level"They may have implicit arguments, array arguments, + big structure retvals, etcWe introduce explicit arguments (i.e. 'this' + pointer) and call the result"low level prototype". See 'FTI_HIGH' .In + order to improve heuristics for recognition of big structure + retvals,it is recommended to pass a helper that will be used to make + decisions.That helper will be used only for lowering 'tif', and not + for the childrentypes walked through by recursion. + + @param til (C++: til_t *) + @param tif (C++: tinfo_t *) + @param name (C++: const char *) + @param _helper (C++: lowertype_helper_t *) + +Help on class lowertype_helper_t in module ida_typeinf: + +class lowertype_helper_t(builtins.object) + | Proxy of C++ lowertype_helper_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_lowertype_helper_t(...) + | delete_lowertype_helper_t(self) + | + | func_has_stkframe_hole(self, *args) -> 'bool' + | func_has_stkframe_hole(self, candidate, candidate_data) -> bool + | + | get_func_purged_bytes(self, *args) -> 'int' + | get_func_purged_bytes(self, candidate, candidate_data) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on function new_til in module ida_typeinf: + +new_til(*args) -> 'til_t *' + new_til(name, desc) -> til_t + + + Initialize a til. + + + @param name (C++: const char *) + @param desc (C++: const char *) + +Help on function next_named_type in module ida_typeinf: + +next_named_type(*args) -> 'char const *' + next_named_type(ti, name, ntf_flags) -> char const * + + + Enumerate types. Returns mangled names. Never returns anonymous types. + To include it, enumerate types by ordinals. + + @param ti (C++: const til_t *) + @param name (C++: const char *) + @param ntf_flags (C++: int) + +Help on function optimize_argloc in module ida_typeinf: + +optimize_argloc(*args) -> 'bool' + optimize_argloc(vloc, size, gaps) -> bool + + + Verify and optimize scattered argloc into simple form. All new arglocs + must be processed by this function. + + @param vloc (C++: argloc_t *) + @param size (C++: int) + @param gaps (C++: const rangeset_t *) + +Help on function pack_idcobj_to_bv in module ida_typeinf: + +pack_idcobj_to_bv(*args) -> 'error_t' + pack_idcobj_to_bv(obj, tif, bytes, objoff, pio_flags=0) -> error_t + + + Write a typed idc object to the byte vector. Byte vector may be non- + empty, this function will append data to it + + @param obj (C++: const idc_value_t *) + @param tif (C++: const tinfo_t &) + @param bytes (C++: relobj_t *) + @param objoff (C++: void *) + @param pio_flags (C++: int) + +Help on function pack_idcobj_to_idb in module ida_typeinf: + +pack_idcobj_to_idb(*args) -> 'error_t' + pack_idcobj_to_idb(obj, tif, ea, pio_flags=0) -> error_t + + + Write a typed idc object to the database. + + + @param obj (C++: const idc_value_t *) + @param tif (C++: const tinfo_t &) + @param ea (C++: ea_t) + @param pio_flags (C++: int) + +Help on function pack_object_to_bv in module ida_typeinf: + +pack_object_to_bv(*args) -> 'PyObject *' + pack_object_to_bv(py_obj, ti, _type, _fields, base_ea, pio_flags=0) -> PyObject * + + + Packs a typed object to a string + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param base_ea: base ea used to relocate the pointers in the packed object + @param pio_flags: flags used while unpacking + @return: + tuple(0, err_code) on failure + tuple(1, packed_buf) on success + +Help on function pack_object_to_idb in module ida_typeinf: + +pack_object_to_idb(*args) -> 'PyObject *' + pack_object_to_idb(py_obj, ti, _type, _fields, ea, pio_flags=0) -> PyObject * + + + Write a typed object to the database. + Raises an exception if wrong parameters were passed or conversion fails + Returns the error_t returned by idaapi.pack_object_to_idb + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param ea: ea to be used while packing + @param pio_flags: flags used while unpacking + +Help on function parse_decl in module ida_typeinf: + +parse_decl(*args) -> 'qstring *' + parse_decl(tif, til, decl, flags) -> str + + + Parse ONE declaration. If the input string contains more than one + declaration, the first complete type declaration ( 'PT_TYP' ) or the + last variable declaration ( 'PT_VAR' ) will be used.name & tif may be + empty after the call! + + @param tif: type info (C++: tinfo_t *) + @param til: type library to use. may be NULL (C++: til_t *) + @param decl: C declaration to parse (C++: const char *) + @param flags: combination of Type parsing flags bits (C++: int) + +Help on function parse_decls in module ida_typeinf: + +parse_decls(*args) -> 'int' + parse_decls(til, input, printer, hti_flags) -> int + + + Parse many declarations and store them in a til. If there are any + errors, they will be printed using 'printer'. This function uses + default include path and predefined macros from the database settings. + It always uses the 'HTI_DCL' bit. + + @param til: type library to store the result (C++: til_t *) + @param input: input string or file name (see hti_flags) (C++: const + char *) + @param printer: function to output error messages (use msg or NULL or + your own callback) (C++: printer_t *) + @param hti_flags: combination of Type formatting flags (C++: int) + @return: number of errors, 0 means ok. + +Help on class predicate_t in module ida_typeinf: + +class predicate_t(builtins.object) + | Proxy of C++ predicate_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> predicate_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_predicate_t(...) + | delete_predicate_t(self) + | + | should_display(self, *args) -> 'bool' + | should_display(self, til, name, type, fields) -> bool + | + | ---------------------------------------------------------------------- + | 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 + +Help on function print_argloc in module ida_typeinf: + +print_argloc(*args) -> 'size_t' + print_argloc(vloc, size=0, vflags=0) -> str + + + Convert an argloc to human readable form. + + + @param vloc (C++: const argloc_t &) + @param size (C++: int) + @param vflags (C++: int) + +Help on function print_decls in module ida_typeinf: + +print_decls(*args) -> 'PyObject *' + print_decls(printer, til, py_ordinals, flags) -> PyObject * + + + Print types (and possibly their dependencies) in a format suitable for + use in a header file. This is the reverse 'parse_decls()' . + + @param printer: a handler for printing text (C++: text_sink_t &) + @param til: the type library holding the ordinals (C++: til_t *) + @param flags: flags for the algorithm. A combination of PDF_* + constants (C++: uint32) + +Help on function print_tinfo in module ida_typeinf: + +print_tinfo(*args) -> 'qstring *' + print_tinfo(prefix, indent, cmtindent, flags, tif, name, cmt) -> str + +Help on function print_type in module ida_typeinf: + +print_type(*args) -> 'qstring *' + print_type(ea, prtype_flags) -> str + + + Get type declaration for the specified address. + + @param ea: address (C++: ea_t) + @param prtype_flags: combination of Type printing flags (C++: int) + @return: success + +Help on class ptr_type_data_t in module ida_typeinf: + +class ptr_type_data_t(builtins.object) + | Proxy of C++ ptr_type_data_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self, c=tinfo_t(), bps=0, p=tinfo_t(), d=0) -> ptr_type_data_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_ptr_type_data_t(...) + | delete_ptr_type_data_t(self) + | + | is_code_ptr(self, *args) -> 'bool' + | is_code_ptr(self) -> bool + | + | is_shifted(self, *args) -> 'bool' + | is_shifted(self) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | based_ptr_size + | ptr_type_data_t_based_ptr_size_get(self) -> uchar + | + | closure + | ptr_type_data_t_closure_get(self) -> tinfo_t + | + | delta + | ptr_type_data_t_delta_get(self) -> int32 + | + | obj_type + | ptr_type_data_t_obj_type_get(self) -> tinfo_t + | + | parent + | ptr_type_data_t_parent_get(self) -> tinfo_t + | + | taptr_bits + | ptr_type_data_t_taptr_bits_get(self) -> uchar + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function read_tinfo_bitfield_value in module ida_typeinf: + +read_tinfo_bitfield_value(*args) -> 'uint64' + read_tinfo_bitfield_value(typid, v, bitoff) -> uint64 + +Help on class reginfovec_t in module ida_typeinf: + +class reginfovec_t(builtins.object) + | Proxy of C++ qvector< reg_info_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'reg_info_t const &' + | __getitem__(self, i) -> reg_info_t + | + | __init__(self, *args) + | __init__(self) -> reginfovec_t + | __init__(self, x) -> reginfovec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_reginfovec_t(...) + | delete_reginfovec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'reg_info_t &' + | + | at = __getitem__(self, *args) -> 'reg_info_t const &' + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< reg_info_t >::const_iterator' + | begin(self) -> reg_info_t + | begin(self) -> reg_info_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< reg_info_t >::const_iterator' + | end(self) -> reg_info_t + | end(self) -> reg_info_t + | + | erase(self, *args) -> 'qvector< reg_info_t >::iterator' + | erase(self, it) -> reg_info_t + | erase(self, first, last) -> reg_info_t + | + | extract(self, *args) -> 'reg_info_t *' + | extract(self) -> reg_info_t + | + | find(self, *args) -> 'qvector< reg_info_t >::const_iterator' + | find(self, x) -> reg_info_t + | find(self, x) -> reg_info_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=reg_info_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< reg_info_t >::iterator' + | insert(self, it, x) -> reg_info_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'reg_info_t &' + | push_back(self, x) + | push_back(self) -> reg_info_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class regobj_t in module ida_typeinf: + +class regobj_t(builtins.object) + | Proxy of C++ regobj_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regobj_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_regobj_t(...) + | delete_regobj_t(self) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | regidx + | regobj_t_regidx_get(self) -> int + | + | relocate + | regobj_t_relocate_get(self) -> int + | + | thisown + | The membership flag + | + | value + | regobj_t_value_get(self) -> bytevec_t * + +Help on class regobjs_t in module ida_typeinf: + +class regobjs_t(regobjvec_t) + | Proxy of C++ regobjs_t class. + | + | Method resolution order: + | regobjs_t + | regobjvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> regobjs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_regobjs_t(...) + | delete_regobjs_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from regobjvec_t: + | + | __getitem__(self, *args) -> 'regobj_t const &' + | __getitem__(self, i) -> regobj_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | at(self, *args) -> 'regobj_t const &' + | at(self, _idx) -> regobj_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< regobj_t >::const_iterator' + | begin(self) -> regobj_t + | begin(self) -> regobj_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< regobj_t >::const_iterator' + | end(self) -> regobj_t + | end(self) -> regobj_t + | + | erase(self, *args) -> 'qvector< regobj_t >::iterator' + | erase(self, it) -> regobj_t + | erase(self, first, last) -> regobj_t + | + | extract(self, *args) -> 'regobj_t *' + | extract(self) -> regobj_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=regobj_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< regobj_t >::iterator' + | insert(self, it, x) -> regobj_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'regobj_t &' + | push_back(self, x) + | push_back(self) -> regobj_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from regobjvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class regobjvec_t in module ida_typeinf: + +class regobjvec_t(builtins.object) + | Proxy of C++ qvector< regobj_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'regobj_t const &' + | __getitem__(self, i) -> regobj_t + | + | __init__(self, *args) + | __init__(self) -> regobjvec_t + | __init__(self, x) -> regobjvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_regobjvec_t(...) + | delete_regobjvec_t(self) + | + | at(self, *args) -> 'regobj_t const &' + | at(self, _idx) -> regobj_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< regobj_t >::const_iterator' + | begin(self) -> regobj_t + | begin(self) -> regobj_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< regobj_t >::const_iterator' + | end(self) -> regobj_t + | end(self) -> regobj_t + | + | erase(self, *args) -> 'qvector< regobj_t >::iterator' + | erase(self, it) -> regobj_t + | erase(self, first, last) -> regobj_t + | + | extract(self, *args) -> 'regobj_t *' + | extract(self) -> regobj_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=regobj_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< regobj_t >::iterator' + | insert(self, it, x) -> regobj_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'regobj_t &' + | push_back(self, x) + | push_back(self) -> regobj_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function remove_abi_opts in module ida_typeinf: + +remove_abi_opts(*args) -> 'bool' + remove_abi_opts(abi_opts, user_level=False) -> bool + +Help on function remove_pointer in module ida_typeinf: + +remove_pointer(*args) -> 'tinfo_t' + remove_pointer(tif) -> tinfo_t + + + 'BT_PTR' : If the current type is a pointer, return the pointed + object. If the current type is not a pointer, return the current type. + See also get_ptrarr_object() and get_pointed_object() + + @param tif (C++: const tinfo_t &) + +Help on function remove_tinfo_pointer in module ida_typeinf: + +remove_tinfo_pointer(*args) -> 'PyObject *' + remove_tinfo_pointer(tif, name, til) -> PyObject * + + + Remove pointer of a type. (i.e. convert "char *" into "char"). + Optionally remove the "lp" (or similar) prefix of the input name. If + the input type is not a pointer, then fail. + + @param tif (C++: tinfo_t *) + @param til (C++: const til_t *) + +Help on function replace_ordinal_typerefs in module ida_typeinf: + +replace_ordinal_typerefs(*args) -> 'int' + replace_ordinal_typerefs(til, tif) -> int + + + Replace references to ordinal types by name references. This function + 'unties' the type from the current local type library and makes it + easier to export it. + + @param til: type library to use. may be NULL. (C++: til_t *) + @param tif: type to modify (in/out) (C++: tinfo_t *) + +Help on function resolve_typedef in module ida_typeinf: + +resolve_typedef(*args) -> 'type_t const *' + resolve_typedef(til, type) -> type_t const * + +Help on class rrel_t in module ida_typeinf: + +class rrel_t(builtins.object) + | Proxy of C++ rrel_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> rrel_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_rrel_t(...) + | delete_rrel_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | off + | rrel_t_off_get(self) -> sval_t + | + | reg + | rrel_t_reg_get(self) -> int + | + | thisown + | The membership flag + +Help on function save_tinfo in module ida_typeinf: + +save_tinfo(*args) -> 'tinfo_code_t' + save_tinfo(tif, til, ord, name, ntf_flags) -> tinfo_code_t + +Help on class scattered_aloc_t in module ida_typeinf: + +class scattered_aloc_t(argpartvec_t) + | Proxy of C++ scattered_aloc_t class. + | + | Method resolution order: + | scattered_aloc_t + | argpartvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> scattered_aloc_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_scattered_aloc_t(...) + | delete_scattered_aloc_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from argpartvec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'argpart_t const &' + | __getitem__(self, i) -> argpart_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'argpart_t const &' + | at(self, _idx) -> argpart_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< argpart_t >::const_iterator' + | begin(self) -> argpart_t + | begin(self) -> argpart_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< argpart_t >::const_iterator' + | end(self) -> argpart_t + | end(self) -> argpart_t + | + | erase(self, *args) -> 'qvector< argpart_t >::iterator' + | erase(self, it) -> argpart_t + | erase(self, first, last) -> argpart_t + | + | extract(self, *args) -> 'argpart_t *' + | extract(self) -> argpart_t + | + | find(self, *args) -> 'qvector< argpart_t >::const_iterator' + | find(self, x) -> argpart_t + | find(self, x) -> argpart_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=argpart_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< argpart_t >::iterator' + | insert(self, it, x) -> argpart_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'argpart_t &' + | push_back(self, x) + | push_back(self) -> argpart_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from argpartvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from argpartvec_t: + | + | __hash__ = None + +Help on function score_tinfo in module ida_typeinf: + +score_tinfo(*args) -> 'uint32' + score_tinfo(tif) -> uint32 + +Help on function serialize_tinfo in module ida_typeinf: + +serialize_tinfo(*args) -> 'bool' + serialize_tinfo(type, fields, fldcmts, tif, sudt_flags) -> bool + +Help on function set_abi_name in module ida_typeinf: + +set_abi_name(*args) -> 'bool' + set_abi_name(abiname, user_level=False) -> bool + + + Set abi name (see 'Compiler IDs' ) + + + @param abiname (C++: const char *) + @param user_level (C++: bool) + +Help on function set_c_header_path in module ida_typeinf: + +set_c_header_path(*args) -> 'void' + set_c_header_path(incdir) + + + Set include directory path the target compiler. + + + @param incdir (C++: const char *) + +Help on function set_c_macros in module ida_typeinf: + +set_c_macros(*args) -> 'void' + set_c_macros(macros) + + + Set predefined macros for the target compiler. + + + @param macros (C++: const char *) + +Help on function set_compiler in module ida_typeinf: + +set_compiler(*args) -> 'bool' + set_compiler(cc, flags, abiname=None) -> bool + + + Change current compiler. + + @param cc: compiler to switch to (C++: const compiler_info_t &) + @param flags: Set compiler flags (C++: int) + @param abiname: ABI name (C++: const char *) + @return: success + +Help on function set_compiler_id in module ida_typeinf: + +set_compiler_id(*args) -> 'bool' + set_compiler_id(id, abiname=None) -> bool + + + Set the compiler id (see 'Compiler IDs' ) + + + @param id (C++: comp_t) + @param abiname (C++: const char *) + +Help on function set_compiler_string in module ida_typeinf: + +set_compiler_string(*args) -> 'bool' + set_compiler_string(compstr, user_level) -> bool + +Help on function set_numbered_type in module ida_typeinf: + +set_numbered_type(*args) -> 'tinfo_code_t' + set_numbered_type(ti, ordinal, ntf_flags, name, type, fields=None, cmt=None, fldcmts=None, sclass=None) -> tinfo_code_t + + + Store a type in the til. 'name' may be NULL for anonymous types. The + specified ordinal must be free (no other type is using it). For + ntf_flags, only 'NTF_REPLACE' is consulted. + + @param ti (C++: til_t *) + @param ordinal (C++: uint32) + @param ntf_flags (C++: int) + @param name (C++: const char *) + @param type (C++: const type_t *) + @param fields (C++: const p_list *) + @param cmt (C++: const char *) + @param fldcmts (C++: const p_list *) + @param sclass (C++: const sclass_t *) + +Help on function set_tinfo_attr in module ida_typeinf: + +set_tinfo_attr(*args) -> 'bool' + set_tinfo_attr(tif, ta, may_overwrite) -> bool + +Help on function set_tinfo_attrs in module ida_typeinf: + +set_tinfo_attrs(*args) -> 'bool' + set_tinfo_attrs(tif, ta) -> bool + +Help on function set_tinfo_property in module ida_typeinf: + +set_tinfo_property(*args) -> 'size_t' + set_tinfo_property(tif, sta_prop, x) -> size_t + +Help on function set_type_alias in module ida_typeinf: + +set_type_alias(*args) -> 'bool' + set_type_alias(ti, src_ordinal, dst_ordinal) -> bool + + + Create a type alias. Redirects all references to source type to the + destination type. This is equivalent to instantaneous replacement all + reference to srctype by dsttype. + + @param ti (C++: til_t *) + @param src_ordinal (C++: uint32) + @param dst_ordinal (C++: uint32) + +Help on class simd_info_t in module ida_typeinf: + +class simd_info_t(builtins.object) + | Proxy of C++ simd_info_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, nm=None, sz=0, memt=BTF_UNK) -> simd_info_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_simd_info_t(...) + | delete_simd_info_t(self) + | + | match_pattern(self, *args) -> 'bool' + | match_pattern(self, pattern) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | memtype + | simd_info_t_memtype_get(self) -> type_t + | + | name + | simd_info_t_name_get(self) -> char const * + | + | size + | simd_info_t_size_get(self) -> uint16 + | + | thisown + | The membership flag + | + | tif + | simd_info_t_tif_get(self) -> tinfo_t + +Help on function store_til in module ida_typeinf: + +store_til(*args) -> 'bool' + store_til(ti, tildir, name) -> bool + + + Store til to a file. If the til contains garbage, it will be collected + before storing the til. Your plugin should call 'compact_til()' before + calling 'store_til()' . + + @param ti: type library to store (C++: til_t *) + @param tildir: directory where to store the til. NULL means current + directory. (C++: const char *) + @param name: filename of the til. If it's an absolute path, tildir is + ignored. NB: the file extension is forced to .til (C++: + const char *) + @return: success + +Help on class text_sink_t in module ida_typeinf: + +class text_sink_t(builtins.object) + | Proxy of C++ text_sink_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self) -> text_sink_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_text_sink_t(...) + | delete_text_sink_t(self) + | + | _print(self, *args) -> 'int' + | _print(self, str) -> int + | + | ---------------------------------------------------------------------- + | 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 + +Help on class til_symbol_t in module ida_typeinf: + +class til_symbol_t(builtins.object) + | Proxy of C++ til_symbol_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, n=None, t=None) -> til_symbol_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_til_symbol_t(...) + | delete_til_symbol_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | name + | til_symbol_t_name_get(self) -> char const * + | + | thisown + | The membership flag + | + | til + | til_symbol_t_til_get(self) -> til_t + +Help on class til_t in module ida_typeinf: + +class til_t(builtins.object) + | Proxy of C++ til_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> til_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_til_t(...) + | delete_til_t(self) + | + | base(self, *args) -> 'til_t *' + | base(self, n) -> til_t + | + | is_dirty(self, *args) -> 'bool' + | is_dirty(self) -> bool + | + | set_dirty(self, *args) -> 'void' + | set_dirty(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cc + | til_t_cc_get(self) -> compiler_info_t + | + | desc + | til_t_desc_get(self) -> char * + | + | flags + | til_t_flags_get(self) -> uint32 + | + | name + | til_t_name_get(self) -> char * + | + | nbases + | til_t_nbases_get(self) -> int + | + | nrefs + | til_t_nrefs_get(self) -> int + | + | nstreams + | til_t_nstreams_get(self) -> int + | + | streams + | til_t_streams_get(self) -> til_stream_t ** + | + | thisown + | The membership flag + +Help on class tinfo_t in module ida_typeinf: + +class tinfo_t(builtins.object) + | Proxy of C++ tinfo_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __gt__(self, *args) -> 'bool' + | __gt__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> tinfo_t + | __init__(self, decl_type) -> tinfo_t + | __init__(self, r) -> tinfo_t + | + | __le__(self, *args) -> 'bool' + | __le__(self, r) -> bool + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __str__(self, *args) -> 'qstring' + | __str__(self) -> qstring + | + | __swig_destroy__ = delete_tinfo_t(...) + | delete_tinfo_t(self) + | + | _print(self, *args) -> 'bool' + | _print(self, name=None, prtype_flags=0, indent=0, cmtindent=0, prefix=None, cmt=None) -> bool + | + | append_covered(self, *args) -> 'bool' + | append_covered(self, out, offset=0) -> bool + | + | calc_gaps(self, *args) -> 'bool' + | calc_gaps(self, out) -> bool + | + | calc_purged_bytes(self, *args) -> 'int' + | calc_purged_bytes(self) -> int + | + | calc_score(self, *args) -> 'uint32' + | calc_score(self) -> uint32 + | + | calc_udt_aligns(self, *args) -> 'bool' + | calc_udt_aligns(self, sudt_flags=0x0004) -> bool + | + | change_sign(self, *args) -> 'bool' + | change_sign(self, sign) -> bool + | + | clear(self, *args) -> 'void' + | clear(self) + | + | clr_const(self, *args) -> 'void' + | clr_const(self) + | + | clr_const_volatile(self, *args) -> 'void' + | clr_const_volatile(self) + | + | clr_volatile(self, *args) -> 'void' + | clr_volatile(self) + | + | compare(self, *args) -> 'int' + | compare(self, r) -> int + | + | compare_with(self, *args) -> 'bool' + | compare_with(self, r, tcflags=0) -> bool + | + | convert_array_to_ptr(self, *args) -> 'bool' + | convert_array_to_ptr(self) -> bool + | + | copy(self, *args) -> 'tinfo_t' + | copy(self) -> tinfo_t + | + | create_array(self, *args) -> 'bool' + | create_array(self, p, decl_type=BT_ARRAY) -> bool + | create_array(self, tif, nelems=0, base=0, decl_type=BT_ARRAY) -> bool + | + | create_bitfield(self, *args) -> 'bool' + | create_bitfield(self, p, decl_type=BT_BITFIELD) -> bool + | create_bitfield(self, nbytes, width, is_unsigned=False, decl_type=BT_BITFIELD) -> bool + | + | create_enum(self, *args) -> 'bool' + | create_enum(self, p, decl_type=BTF_ENUM) -> bool + | + | create_forward_decl(self, *args) -> 'tinfo_code_t' + | create_forward_decl(self, til, decl_type, name, ntf_flags=0) -> tinfo_code_t + | + | create_func(self, *args) -> 'bool' + | create_func(self, p, decl_type=BT_FUNC) -> bool + | + | create_ptr(self, *args) -> 'bool' + | create_ptr(self, p, decl_type=BT_PTR) -> bool + | create_ptr(self, tif, bps=0, decl_type=BT_PTR) -> bool + | + | create_simple_type(self, *args) -> 'bool' + | create_simple_type(self, decl_type) -> bool + | + | create_typedef(self, *args) -> 'void' + | create_typedef(self, p, decl_type=BTF_TYPEDEF, try_ordinal=True) -> bool + | create_typedef(self, til, name, decl_type=BTF_TYPEDEF, try_ordinal=True) + | create_typedef(self, til, ord, decl_type=BTF_TYPEDEF) + | + | create_udt(self, *args) -> 'bool' + | create_udt(self, p, decl_type) -> bool + | + | del_attr(self, *args) -> 'bool' + | del_attr(self, key, make_copy=True) -> bool + | + | del_attrs(self, *args) -> 'void' + | del_attrs(self) + | + | deserialize(self, *args) -> 'bool' + | deserialize(self, til, ptype, pfields=None, pfldcmts=None) -> bool + | deserialize(self, til, type, fields, cmts=None) -> bool + | + | dstr(self, *args) -> 'char const *' + | dstr(self) -> char const * + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | equals_to(self, *args) -> 'bool' + | equals_to(self, r) -> bool + | + | find_udt_member(self, *args) -> 'int' + | find_udt_member(self, udm, strmem_flags) -> int + | + | get_array_details(self, *args) -> 'bool' + | get_array_details(self, ai) -> bool + | + | get_array_element(self, *args) -> 'tinfo_t' + | get_array_element(self) -> tinfo_t + | + | get_array_nelems(self, *args) -> 'int' + | get_array_nelems(self) -> int + | + | get_attr(self, *args) -> 'PyObject *' + | get_attr(self, key, all_attrs=True) -> PyObject * + | + | get_attrs(self, *args) -> 'bool' + | get_attrs(self, tav, all_attrs=False) -> bool + | + | get_bitfield_details(self, *args) -> 'bool' + | get_bitfield_details(self, bi) -> bool + | + | get_declalign(self, *args) -> 'uchar' + | get_declalign(self) -> uchar + | + | get_decltype(self, *args) -> 'type_t' + | get_decltype(self) -> type_t + | + | get_enum_base_type(self, *args) -> 'type_t' + | get_enum_base_type(self) -> type_t + | + | get_enum_details(self, *args) -> 'bool' + | get_enum_details(self, ei) -> bool + | + | get_final_ordinal(self, *args) -> 'uint32' + | get_final_ordinal(self) -> uint32 + | + | get_final_type_name(self, *args) -> 'bool' + | get_final_type_name(self) -> bool + | + | get_func_details(self, *args) -> 'bool' + | get_func_details(self, fi, gtd=GTD_CALC_ARGLOCS) -> bool + | + | get_modifiers(self, *args) -> 'type_t' + | get_modifiers(self) -> type_t + | + | get_named_type(self, *args) -> 'bool' + | get_named_type(self, til, name, decl_type=BTF_TYPEDEF, resolve=True, try_ordinal=True) -> bool + | + | get_nargs(self, *args) -> 'int' + | get_nargs(self) -> int + | + | get_next_type_name(self, *args) -> 'bool' + | get_next_type_name(self) -> bool + | + | get_nth_arg(self, *args) -> 'tinfo_t' + | get_nth_arg(self, n) -> tinfo_t + | + | get_numbered_type(self, *args) -> 'bool' + | get_numbered_type(self, til, ordinal, decl_type=BTF_TYPEDEF, resolve=True) -> bool + | + | get_onemember_type(self, *args) -> 'tinfo_t' + | get_onemember_type(self) -> tinfo_t + | + | get_ordinal(self, *args) -> 'uint32' + | get_ordinal(self) -> uint32 + | + | get_pointed_object(self, *args) -> 'tinfo_t' + | get_pointed_object(self) -> tinfo_t + | + | get_ptr_details(self, *args) -> 'bool' + | get_ptr_details(self, pi) -> bool + | + | get_ptrarr_object(self, *args) -> 'tinfo_t' + | get_ptrarr_object(self) -> tinfo_t + | + | get_ptrarr_objsize(self, *args) -> 'int' + | get_ptrarr_objsize(self) -> int + | + | get_realtype(self, *args) -> 'type_t' + | get_realtype(self, full=False) -> type_t + | + | get_rettype(self, *args) -> 'tinfo_t' + | get_rettype(self) -> tinfo_t + | + | get_sign(self, *args) -> 'type_sign_t' + | get_sign(self) -> type_sign_t + | + | get_size(self, *args) -> 'size_t' + | get_size(self, p_effalign=None, gts_code=0) -> size_t + | + | get_til(self, *args) -> 'til_t const *' + | get_til(self) -> til_t + | + | get_type_name(self, *args) -> 'bool' + | get_type_name(self) -> bool + | + | get_udt_details(self, *args) -> 'bool' + | get_udt_details(self, udt, gtd=GTD_CALC_LAYOUT) -> bool + | + | get_udt_nmembers(self, *args) -> 'int' + | get_udt_nmembers(self) -> int + | + | get_unpadded_size(self, *args) -> 'size_t' + | get_unpadded_size(self) -> size_t + | + | has_details(self, *args) -> 'bool' + | has_details(self) -> bool + | + | has_vftable(self, *args) -> 'bool' + | has_vftable(self) -> bool + | + | is_anonymous_udt(self, *args) -> 'bool' + | is_anonymous_udt(self) -> bool + | + | is_arithmetic(self, *args) -> 'bool' + | is_arithmetic(self) -> bool + | + | is_array(self, *args) -> 'bool' + | is_array(self) -> bool + | + | is_bitfield(self, *args) -> 'bool' + | is_bitfield(self) -> bool + | + | is_bool(self, *args) -> 'bool' + | is_bool(self) -> bool + | + | is_castable_to(self, *args) -> 'bool' + | is_castable_to(self, target) -> bool + | + | is_char(self, *args) -> 'bool' + | is_char(self) -> bool + | + | is_complex(self, *args) -> 'bool' + | is_complex(self) -> bool + | + | is_const(self, *args) -> 'bool' + | is_const(self) -> bool + | + | is_correct(self, *args) -> 'bool' + | is_correct(self) -> bool + | + | is_decl_array(self, *args) -> 'bool' + | is_decl_array(self) -> bool + | + | is_decl_bitfield(self, *args) -> 'bool' + | is_decl_bitfield(self) -> bool + | + | is_decl_bool(self, *args) -> 'bool' + | is_decl_bool(self) -> bool + | + | is_decl_char(self, *args) -> 'bool' + | is_decl_char(self) -> bool + | + | is_decl_complex(self, *args) -> 'bool' + | is_decl_complex(self) -> bool + | + | is_decl_const(self, *args) -> 'bool' + | is_decl_const(self) -> bool + | + | is_decl_double(self, *args) -> 'bool' + | is_decl_double(self) -> bool + | + | is_decl_enum(self, *args) -> 'bool' + | is_decl_enum(self) -> bool + | + | is_decl_float(self, *args) -> 'bool' + | is_decl_float(self) -> bool + | + | is_decl_floating(self, *args) -> 'bool' + | is_decl_floating(self) -> bool + | + | is_decl_func(self, *args) -> 'bool' + | is_decl_func(self) -> bool + | + | is_decl_int(self, *args) -> 'bool' + | is_decl_int(self) -> bool + | + | is_decl_int128(self, *args) -> 'bool' + | is_decl_int128(self) -> bool + | + | is_decl_int16(self, *args) -> 'bool' + | is_decl_int16(self) -> bool + | + | is_decl_int32(self, *args) -> 'bool' + | is_decl_int32(self) -> bool + | + | is_decl_int64(self, *args) -> 'bool' + | is_decl_int64(self) -> bool + | + | is_decl_last(self, *args) -> 'bool' + | is_decl_last(self) -> bool + | + | is_decl_ldouble(self, *args) -> 'bool' + | is_decl_ldouble(self) -> bool + | + | is_decl_paf(self, *args) -> 'bool' + | is_decl_paf(self) -> bool + | + | is_decl_partial(self, *args) -> 'bool' + | is_decl_partial(self) -> bool + | + | is_decl_ptr(self, *args) -> 'bool' + | is_decl_ptr(self) -> bool + | + | is_decl_struct(self, *args) -> 'bool' + | is_decl_struct(self) -> bool + | + | is_decl_sue(self, *args) -> 'bool' + | is_decl_sue(self) -> bool + | + | is_decl_tbyte(self, *args) -> 'bool' + | is_decl_tbyte(self) -> bool + | + | is_decl_typedef(self, *args) -> 'bool' + | is_decl_typedef(self) -> bool + | + | is_decl_uchar(self, *args) -> 'bool' + | is_decl_uchar(self) -> bool + | + | is_decl_udt(self, *args) -> 'bool' + | is_decl_udt(self) -> bool + | + | is_decl_uint(self, *args) -> 'bool' + | is_decl_uint(self) -> bool + | + | is_decl_uint128(self, *args) -> 'bool' + | is_decl_uint128(self) -> bool + | + | is_decl_uint16(self, *args) -> 'bool' + | is_decl_uint16(self) -> bool + | + | is_decl_uint32(self, *args) -> 'bool' + | is_decl_uint32(self) -> bool + | + | is_decl_uint64(self, *args) -> 'bool' + | is_decl_uint64(self) -> bool + | + | is_decl_union(self, *args) -> 'bool' + | is_decl_union(self) -> bool + | + | is_decl_unknown(self, *args) -> 'bool' + | is_decl_unknown(self) -> bool + | + | is_decl_void(self, *args) -> 'bool' + | is_decl_void(self) -> bool + | + | is_decl_volatile(self, *args) -> 'bool' + | is_decl_volatile(self) -> bool + | + | is_double(self, *args) -> 'bool' + | is_double(self) -> bool + | + | is_empty_udt(self, *args) -> 'bool' + | is_empty_udt(self) -> bool + | + | is_enum(self, *args) -> 'bool' + | is_enum(self) -> bool + | + | is_ext_arithmetic(self, *args) -> 'bool' + | is_ext_arithmetic(self) -> bool + | + | is_ext_integral(self, *args) -> 'bool' + | is_ext_integral(self) -> bool + | + | is_float(self, *args) -> 'bool' + | is_float(self) -> bool + | + | is_floating(self, *args) -> 'bool' + | is_floating(self) -> bool + | + | is_forward_decl(self, *args) -> 'bool' + | is_forward_decl(self) -> bool + | + | is_from_subtil(self, *args) -> 'bool' + | is_from_subtil(self) -> bool + | + | is_func(self, *args) -> 'bool' + | is_func(self) -> bool + | + | is_funcptr(self, *args) -> 'bool' + | is_funcptr(self) -> bool + | + | is_high_func(self, *args) -> 'bool' + | is_high_func(self) -> bool + | + | is_int(self, *args) -> 'bool' + | is_int(self) -> bool + | + | is_int128(self, *args) -> 'bool' + | is_int128(self) -> bool + | + | is_int16(self, *args) -> 'bool' + | is_int16(self) -> bool + | + | is_int32(self, *args) -> 'bool' + | is_int32(self) -> bool + | + | is_int64(self, *args) -> 'bool' + | is_int64(self) -> bool + | + | is_integral(self, *args) -> 'bool' + | is_integral(self) -> bool + | + | is_ldouble(self, *args) -> 'bool' + | is_ldouble(self) -> bool + | + | is_manually_castable_to(self, *args) -> 'bool' + | is_manually_castable_to(self, target) -> bool + | + | is_one_fpval(self, *args) -> 'bool' + | is_one_fpval(self) -> bool + | + | is_paf(self, *args) -> 'bool' + | is_paf(self) -> bool + | + | is_partial(self, *args) -> 'bool' + | is_partial(self) -> bool + | + | is_ptr(self, *args) -> 'bool' + | is_ptr(self) -> bool + | + | is_ptr_or_array(self, *args) -> 'bool' + | is_ptr_or_array(self) -> bool + | + | is_purging_cc(self, *args) -> 'bool' + | is_purging_cc(self) -> bool + | + | is_pvoid(self, *args) -> 'bool' + | is_pvoid(self) -> bool + | + | is_scalar(self, *args) -> 'bool' + | is_scalar(self) -> bool + | + | is_shifted_ptr(self, *args) -> 'bool' + | is_shifted_ptr(self) -> bool + | + | is_signed(self, *args) -> 'bool' + | is_signed(self) -> bool + | + | is_small_udt(self, *args) -> 'bool' + | is_small_udt(self) -> bool + | + | is_sse_type(self, *args) -> 'bool' + | is_sse_type(self) -> bool + | + | is_struct(self, *args) -> 'bool' + | is_struct(self) -> bool + | + | is_sue(self, *args) -> 'bool' + | is_sue(self) -> bool + | + | is_tbyte(self, *args) -> 'bool' + | is_tbyte(self) -> bool + | + | is_typeref(self, *args) -> 'bool' + | is_typeref(self) -> bool + | + | is_uchar(self, *args) -> 'bool' + | is_uchar(self) -> bool + | + | is_udt(self, *args) -> 'bool' + | is_udt(self) -> bool + | + | is_uint(self, *args) -> 'bool' + | is_uint(self) -> bool + | + | is_uint128(self, *args) -> 'bool' + | is_uint128(self) -> bool + | + | is_uint16(self, *args) -> 'bool' + | is_uint16(self) -> bool + | + | is_uint32(self, *args) -> 'bool' + | is_uint32(self) -> bool + | + | is_uint64(self, *args) -> 'bool' + | is_uint64(self) -> bool + | + | is_union(self, *args) -> 'bool' + | is_union(self) -> bool + | + | is_unknown(self, *args) -> 'bool' + | is_unknown(self) -> bool + | + | is_unsigned(self, *args) -> 'bool' + | is_unsigned(self) -> bool + | + | is_user_cc(self, *args) -> 'bool' + | is_user_cc(self) -> bool + | + | is_vararg_cc(self, *args) -> 'bool' + | is_vararg_cc(self) -> bool + | + | is_varstruct(self, *args) -> 'bool' + | is_varstruct(self) -> bool + | + | is_vftable(self, *args) -> 'bool' + | is_vftable(self) -> bool + | + | is_void(self, *args) -> 'bool' + | is_void(self) -> bool + | + | is_volatile(self, *args) -> 'bool' + | is_volatile(self) -> bool + | + | is_well_defined(self, *args) -> 'bool' + | is_well_defined(self) -> bool + | + | present(self, *args) -> 'bool' + | present(self) -> bool + | + | read_bitfield_value(self, *args) -> 'uint64' + | read_bitfield_value(self, v, bitoff) -> uint64 + | + | remove_ptr_or_array(self, *args) -> 'bool' + | remove_ptr_or_array(self) -> bool + | + | requires_qualifier(self, *args) -> 'bool' + | requires_qualifier(self, name, offset) -> bool + | + | serialize(self, *args) -> 'PyObject *' + | serialize(self, sudt_flags=SUDT_FAST|SUDT_TRUNC) -> PyObject * + | + | set_attr(self, *args) -> 'bool' + | set_attr(self, ta, may_overwrite=True) -> bool + | + | set_attrs(self, *args) -> 'bool' + | set_attrs(self, tav) -> bool + | + | set_const(self, *args) -> 'void' + | set_const(self) + | + | set_declalign(self, *args) -> 'bool' + | set_declalign(self, declalign) -> bool + | + | set_modifiers(self, *args) -> 'void' + | set_modifiers(self, mod) + | + | set_named_type(self, *args) -> 'tinfo_code_t' + | set_named_type(self, til, name, ntf_flags=0) -> tinfo_code_t + | + | set_numbered_type(self, *args) -> 'tinfo_code_t' + | set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t + | + | set_symbol_type(self, *args) -> 'tinfo_code_t' + | set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t + | + | set_volatile(self, *args) -> 'void' + | set_volatile(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | write_bitfield_value(self, *args) -> 'uint64' + | write_bitfield_value(self, dst, v, bitoff) -> uint64 + | + | ---------------------------------------------------------------------- + | Static methods defined here: + | + | get_stock(*args) -> 'tinfo_t' + | get_stock(id) -> tinfo_t + | + | ---------------------------------------------------------------------- + | 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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function tinfo_t_get_stock in module ida_typeinf: + +tinfo_t_get_stock(*args) -> 'tinfo_t' + tinfo_t_get_stock(id) -> tinfo_t + +Help on class tinfo_visitor_t in module ida_typeinf: + +class tinfo_visitor_t(builtins.object) + | Proxy of C++ tinfo_visitor_t class. + | + | Methods defined here: + | + | __disown__(self) + | + | __init__(self, *args) + | __init__(self, s=0) -> tinfo_visitor_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_tinfo_visitor_t(...) + | delete_tinfo_visitor_t(self) + | + | apply_to(self, *args) -> 'int' + | apply_to(self, tif, out=None, name=None, cmt=None) -> int + | + | prune_now(self, *args) -> 'void' + | prune_now(self) + | + | visit_type(self, *args) -> 'int' + | visit_type(self, out, tif, name, cmt) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | state + | tinfo_visitor_t_state_get(self) -> int + | + | thisown + | The membership flag + +Help on class type_attr_t in module ida_typeinf: + +class type_attr_t(builtins.object) + | Proxy of C++ type_attr_t class. + | + | Methods defined here: + | + | __ge__(self, *args) -> 'bool' + | __ge__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> type_attr_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_type_attr_t(...) + | delete_type_attr_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | key + | type_attr_t_key_get(self) -> qstring * + | + | thisown + | The membership flag + | + | value + | type_attr_t_value_get(self) -> bytevec_t * + +Help on class type_attrs_t in module ida_typeinf: + +class type_attrs_t(builtins.object) + | Proxy of C++ qvector< type_attr_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'type_attr_t const &' + | __getitem__(self, i) -> type_attr_t + | + | __init__(self, *args) + | __init__(self) -> type_attrs_t + | __init__(self, x) -> type_attrs_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_type_attrs_t(...) + | delete_type_attrs_t(self) + | + | at(self, *args) -> 'type_attr_t const &' + | at(self, _idx) -> type_attr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< type_attr_t >::const_iterator' + | begin(self) -> type_attr_t + | begin(self) -> type_attr_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< type_attr_t >::const_iterator' + | end(self) -> type_attr_t + | end(self) -> type_attr_t + | + | erase(self, *args) -> 'qvector< type_attr_t >::iterator' + | erase(self, it) -> type_attr_t + | erase(self, first, last) -> type_attr_t + | + | extract(self, *args) -> 'type_attr_t *' + | extract(self) -> type_attr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=type_attr_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< type_attr_t >::iterator' + | insert(self, it, x) -> type_attr_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'type_attr_t &' + | push_back(self, x) + | push_back(self) -> type_attr_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on class type_mods_t in module ida_typeinf: + +class type_mods_t(builtins.object) + | Proxy of C++ type_mods_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> type_mods_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_type_mods_t(...) + | delete_type_mods_t(self) + | + | clear(self, *args) -> 'void' + | clear(self) + | + | has_cmt(self, *args) -> 'bool' + | has_cmt(self) -> bool + | + | has_info(self, *args) -> 'bool' + | has_info(self) -> bool + | + | has_name(self, *args) -> 'bool' + | has_name(self) -> bool + | + | has_type(self, *args) -> 'bool' + | has_type(self) -> bool + | + | set_new_cmt(self, *args) -> 'void' + | set_new_cmt(self, c) + | + | set_new_name(self, *args) -> 'void' + | set_new_name(self, n) + | + | set_new_type(self, *args) -> 'void' + | set_new_type(self, t) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | type_mods_t_cmt_get(self) -> qstring * + | + | flags + | type_mods_t_flags_get(self) -> int + | + | name + | type_mods_t_name_get(self) -> qstring * + | + | thisown + | The membership flag + | + | type + | type_mods_t_type_get(self) -> tinfo_t + +Help on class typedef_type_data_t in module ida_typeinf: + +class typedef_type_data_t(builtins.object) + | Proxy of C++ typedef_type_data_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self, _til, _name, _resolve=False) -> typedef_type_data_t + | __init__(self, _til, ord, _resolve=False) -> typedef_type_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_typedef_type_data_t(...) + | delete_typedef_type_data_t(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | is_ordref + | typedef_type_data_t_is_ordref_get(self) -> bool + | + | resolve + | typedef_type_data_t_resolve_get(self) -> bool + | + | thisown + | The membership flag + | + | til + | typedef_type_data_t_til_get(self) -> til_t + +Help on class udt_member_t in module ida_typeinf: + +class udt_member_t(builtins.object) + | Proxy of C++ udt_member_t class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __init__(self, *args) + | __init__(self) -> udt_member_t + | + | __lt__(self, *args) -> 'bool' + | __lt__(self, r) -> bool + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_udt_member_t(...) + | delete_udt_member_t(self) + | + | begin(self, *args) -> 'uint64' + | begin(self) -> uint64 + | + | clr_baseclass(self, *args) -> 'void' + | clr_baseclass(self) + | + | clr_unaligned(self, *args) -> 'void' + | clr_unaligned(self) + | + | clr_vftable(self, *args) -> 'void' + | clr_vftable(self) + | + | clr_virtbase(self, *args) -> 'void' + | clr_virtbase(self) + | + | end(self, *args) -> 'uint64' + | end(self) -> uint64 + | + | is_anonymous_udm(self, *args) -> 'bool' + | is_anonymous_udm(self) -> bool + | + | is_baseclass(self, *args) -> 'bool' + | is_baseclass(self) -> bool + | + | is_bitfield(self, *args) -> 'bool' + | is_bitfield(self) -> bool + | + | is_unaligned(self, *args) -> 'bool' + | is_unaligned(self) -> bool + | + | is_vftable(self, *args) -> 'bool' + | is_vftable(self) -> bool + | + | is_virtbase(self, *args) -> 'bool' + | is_virtbase(self) -> bool + | + | is_zero_bitfield(self, *args) -> 'bool' + | is_zero_bitfield(self) -> bool + | + | set_baseclass(self, *args) -> 'void' + | set_baseclass(self) + | + | set_unaligned(self, *args) -> 'void' + | set_unaligned(self) + | + | set_vftable(self, *args) -> 'void' + | set_vftable(self) + | + | set_virtbase(self, *args) -> 'void' + | set_virtbase(self) + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cmt + | udt_member_t_cmt_get(self) -> qstring * + | + | effalign + | udt_member_t_effalign_get(self) -> int + | + | fda + | udt_member_t_fda_get(self) -> uchar + | + | name + | udt_member_t_name_get(self) -> qstring * + | + | offset + | udt_member_t_offset_get(self) -> uint64 + | + | size + | udt_member_t_size_get(self) -> uint64 + | + | tafld_bits + | udt_member_t_tafld_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | type + | udt_member_t_type_get(self) -> tinfo_t + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on class udt_type_data_t in module ida_typeinf: + +class udt_type_data_t(udtmembervec_t) + | Proxy of C++ udt_type_data_t class. + | + | Method resolution order: + | udt_type_data_t + | udtmembervec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> udt_type_data_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_udt_type_data_t(...) + | delete_udt_type_data_t(self) + | + | is_cppobj(self, *args) -> 'bool' + | is_cppobj(self) -> bool + | + | is_last_baseclass(self, *args) -> 'bool' + | is_last_baseclass(self, idx) -> bool + | + | is_msstruct(self, *args) -> 'bool' + | is_msstruct(self) -> bool + | + | is_unaligned(self, *args) -> 'bool' + | is_unaligned(self) -> bool + | + | is_vftable(self, *args) -> 'bool' + | is_vftable(self) -> bool + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | effalign + | udt_type_data_t_effalign_get(self) -> uint32 + | + | is_union + | udt_type_data_t_is_union_get(self) -> bool + | + | pack + | udt_type_data_t_pack_get(self) -> uchar + | + | sda + | udt_type_data_t_sda_get(self) -> uchar + | + | taudt_bits + | udt_type_data_t_taudt_bits_get(self) -> uint32 + | + | thisown + | The membership flag + | + | total_size + | udt_type_data_t_total_size_get(self) -> size_t + | + | unpadded_size + | udt_type_data_t_unpadded_size_get(self) -> size_t + | + | ---------------------------------------------------------------------- + | Methods inherited from udtmembervec_t: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'udt_member_t const &' + | __getitem__(self, i) -> udt_member_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'udt_member_t const &' + | at(self, _idx) -> udt_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | begin(self) -> udt_member_t + | begin(self) -> udt_member_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | end(self) -> udt_member_t + | end(self) -> udt_member_t + | + | erase(self, *args) -> 'qvector< udt_member_t >::iterator' + | erase(self, it) -> udt_member_t + | erase(self, first, last) -> udt_member_t + | + | extract(self, *args) -> 'udt_member_t *' + | extract(self) -> udt_member_t + | + | find(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | find(self, x) -> udt_member_t + | find(self, x) -> udt_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=udt_member_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< udt_member_t >::iterator' + | insert(self, it, x) -> udt_member_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'udt_member_t &' + | push_back(self, x) + | push_back(self) -> udt_member_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from udtmembervec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes inherited from udtmembervec_t: + | + | __hash__ = None + +Help on class udtmembervec_t in module ida_typeinf: + +class udtmembervec_t(builtins.object) + | Proxy of C++ qvector< udt_member_t > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'udt_member_t const &' + | __getitem__(self, i) -> udt_member_t + | + | __init__(self, *args) + | __init__(self) -> udtmembervec_t + | __init__(self, x) -> udtmembervec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_udtmembervec_t(...) + | delete_udtmembervec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | at(self, *args) -> 'udt_member_t const &' + | at(self, _idx) -> udt_member_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | begin(self) -> udt_member_t + | begin(self) -> udt_member_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | end(self) -> udt_member_t + | end(self) -> udt_member_t + | + | erase(self, *args) -> 'qvector< udt_member_t >::iterator' + | erase(self, it) -> udt_member_t + | erase(self, first, last) -> udt_member_t + | + | extract(self, *args) -> 'udt_member_t *' + | extract(self) -> udt_member_t + | + | find(self, *args) -> 'qvector< udt_member_t >::const_iterator' + | find(self, x) -> udt_member_t + | find(self, x) -> udt_member_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=udt_member_t()) + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< udt_member_t >::iterator' + | insert(self, it, x) -> udt_member_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'udt_member_t &' + | push_back(self, x) + | push_back(self) -> udt_member_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function unpack_idcobj_from_bv in module ida_typeinf: + +unpack_idcobj_from_bv(*args) -> 'error_t' + unpack_idcobj_from_bv(obj, tif, bytes, pio_flags=0) -> error_t + + + Read a typed idc object from the byte vector. + + + @param obj (C++: idc_value_t *) + @param tif (C++: const tinfo_t &) + @param bytes (C++: const bytevec_t &) + @param pio_flags (C++: int) + +Help on function unpack_idcobj_from_idb in module ida_typeinf: + +unpack_idcobj_from_idb(*args) -> 'error_t' + unpack_idcobj_from_idb(obj, tif, ea, off0, pio_flags=0) -> error_t + + + Collection of register objects. + + Read a typed idc object from the database + + @param obj (C++: idc_value_t *) + @param tif (C++: const tinfo_t &) + @param ea (C++: ea_t) + @param off0 (C++: const bytevec_t *) + @param pio_flags (C++: int) + +Help on function unpack_object_from_bv in module ida_typeinf: + +unpack_object_from_bv(*args) -> 'PyObject *' + unpack_object_from_bv(ti, _type, _fields, bytes, pio_flags=0) -> PyObject * + + + Unpacks a buffer into an object. + Returns the error_t returned by idaapi.pack_object_to_idb + @param ti: Type info. 'None' can be passed. + @param tp: type string + @param fields: fields string (may be empty or None) + @param bytes: the bytes to unpack + @param pio_flags: flags used while unpacking + @return: + - tuple(0, err) on failure + - tuple(1, obj) on success + +Help on function unpack_object_from_idb in module ida_typeinf: + +unpack_object_from_idb(*args) -> 'PyObject *' + unpack_object_from_idb(ti, _type, _fields, ea, pio_flags=0) -> PyObject * + +Help on class valstr_t in module ida_typeinf: + +class valstr_t(builtins.object) + | Proxy of C++ valstr_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> valstr_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_valstr_t(...) + | delete_valstr_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | info + | valstr_t_info_get(self) -> valinfo_t * + | + | length + | valstr_t_length_get(self) -> size_t + | + | members + | valstr_t_members_get(self) -> valstrs_t + | + | oneline + | valstr_t_oneline_get(self) -> qstring * + | + | props + | valstr_t_props_get(self) -> int + | + | thisown + | The membership flag + +Help on class valstrs_t in module ida_typeinf: + +class valstrs_t(valstrvec_t) + | Proxy of C++ valstrs_t class. + | + | Method resolution order: + | valstrs_t + | valstrvec_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> valstrs_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_valstrs_t(...) + | delete_valstrs_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | thisown + | The membership flag + | + | ---------------------------------------------------------------------- + | Methods inherited from valstrvec_t: + | + | __getitem__(self, *args) -> 'valstr_t const &' + | __getitem__(self, i) -> valstr_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | at(self, *args) -> 'valstr_t const &' + | at(self, _idx) -> valstr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< valstr_t >::const_iterator' + | begin(self) -> valstr_t + | begin(self) -> valstr_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< valstr_t >::const_iterator' + | end(self) -> valstr_t + | end(self) -> valstr_t + | + | erase(self, *args) -> 'qvector< valstr_t >::iterator' + | erase(self, it) -> valstr_t + | erase(self, first, last) -> valstr_t + | + | extract(self, *args) -> 'valstr_t *' + | extract(self) -> valstr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=valstr_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< valstr_t >::iterator' + | insert(self, it, x) -> valstr_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'valstr_t &' + | push_back(self, x) + | push_back(self) -> valstr_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(self) + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from valstrvec_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on class valstrvec_t in module ida_typeinf: + +class valstrvec_t(builtins.object) + | Proxy of C++ qvector< valstr_t > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'valstr_t const &' + | __getitem__(self, i) -> valstr_t + | + | __init__(self, *args) + | __init__(self) -> valstrvec_t + | __init__(self, x) -> valstrvec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_valstrvec_t(...) + | delete_valstrvec_t(self) + | + | at(self, *args) -> 'valstr_t const &' + | at(self, _idx) -> valstr_t + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< valstr_t >::const_iterator' + | begin(self) -> valstr_t + | begin(self) -> valstr_t + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< valstr_t >::const_iterator' + | end(self) -> valstr_t + | end(self) -> valstr_t + | + | erase(self, *args) -> 'qvector< valstr_t >::iterator' + | erase(self, it) -> valstr_t + | erase(self, first, last) -> valstr_t + | + | extract(self, *args) -> 'valstr_t *' + | extract(self) -> valstr_t + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=valstr_t()) + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< valstr_t >::iterator' + | insert(self, it, x) -> valstr_t + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'valstr_t &' + | push_back(self, x) + | push_back(self) -> valstr_t + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + +Help on function verify_argloc in module ida_typeinf: + +verify_argloc(*args) -> 'int' + verify_argloc(vloc, size, gaps) -> int + + + Verify 'argloc_t' . + + @param vloc (C++: const argloc_t &) + @param size: total size of the variable (C++: int) + @param gaps: if not NULL, specifies gaps in structure definition. + these gaps should not map to any argloc, but everything + else must be covered (C++: const rangeset_t *) + @return: 0 if ok, otherwise an interr code. + +Help on function verify_tinfo in module ida_typeinf: + +verify_tinfo(*args) -> 'int' + verify_tinfo(typid) -> int + +Help on function visit_subtypes in module ida_typeinf: + +visit_subtypes(*args) -> 'int' + visit_subtypes(visitor, out, tif, name, cmt) -> int + +Help on function write_tinfo_bitfield_value in module ida_typeinf: + +write_tinfo_bitfield_value(*args) -> 'uint64' + write_tinfo_bitfield_value(typid, dst, v, bitoff) -> uint64 + +=== ida_typeinf EPYDOC INJECTIONS === +ida_typeinf.ADDTIL_ABORTED +""" +til was not loaded (incompatible til rejected by user) +""" + +ida_typeinf.ADDTIL_COMP +""" +ok, but til is not compatible with the current compiler +""" + +ida_typeinf.ADDTIL_DEFAULT +""" +default behavior +""" + +ida_typeinf.ADDTIL_FAILED +""" +something bad, the warning is displayed +""" + +ida_typeinf.ADDTIL_INCOMP +""" +load incompatible tils +""" + +ida_typeinf.ADDTIL_OK +""" +ok, til is loaded +""" + +ida_typeinf.ADDTIL_SILENT +""" +do not ask any questions +""" + +ida_typeinf.CC_ALLOW_ARGPERM +""" +disregard argument order? +""" + +ida_typeinf.CC_ALLOW_REGHOLES +""" +allow holes in register argument list? +""" + +ida_typeinf.CC_CDECL_OK +""" +can use __cdecl calling convention? +""" + +ida_typeinf.CC_HAS_ELLIPSIS +""" +function has a variable list of arguments? +""" + +ida_typeinf.FAH_BYTE +""" +function argument attribute header byte +""" + +ida_typeinf.FAI_ARRAY +""" +was initially an array see "__org_typedef" or "__org_arrdim" type +attributes to determine the original type +""" + +ida_typeinf.FAI_HIDDEN +""" +hidden argument +""" + +ida_typeinf.FAI_RETPTR +""" +pointer to return value. implies hidden +""" + +ida_typeinf.FAI_STRUCT +""" +was initially a structure +""" + +ida_typeinf.FTI_ALL +""" +all defined bits +""" + +ida_typeinf.FTI_ARGLOCS +""" +(stkargs and retloc too) + +info about argument locations has been calculated +""" + +ida_typeinf.FTI_CALLTYPE +""" +mask for FTI_*CALL +""" + +ida_typeinf.FTI_DEFCALL +""" +default call +""" + +ida_typeinf.FTI_FARCALL +""" +far call +""" + +ida_typeinf.FTI_HIGH +""" +high level prototype (with possibly hidden args) +""" + +ida_typeinf.FTI_INTCALL +""" +interrupt call +""" + +ida_typeinf.FTI_NEARCALL +""" +near call +""" + +ida_typeinf.FTI_NORET +""" +noreturn +""" + +ida_typeinf.FTI_PURE +""" +__pure +""" + +ida_typeinf.FTI_SPOILED +""" +information about spoiled registers is present +""" + +ida_typeinf.FTI_STATIC +""" +static +""" + +ida_typeinf.FTI_VIRTUAL +""" +virtual +""" + +ida_typeinf.GUESS_FUNC_FAILED +""" +couldn't guess the function type +""" + +ida_typeinf.GUESS_FUNC_OK +""" +ok, some non-trivial information is gathered +""" + +ida_typeinf.GUESS_FUNC_TRIVIAL +""" +the function type doesn't have interesting info +""" + +ida_typeinf.HTI_CPP +""" +C++ mode (not implemented) +""" + +ida_typeinf.HTI_DCL +""" +don't complain about redeclarations +""" + +ida_typeinf.HTI_EXT +""" +debug: print external representation of types +""" + +ida_typeinf.HTI_FIL +""" +otherwise "input" contains a C declaration + +"input" is file name, +""" + +ida_typeinf.HTI_HIGH +""" +(with hidden args, etc) + +assume high level prototypes +""" + +ida_typeinf.HTI_INT +""" +debug: print internal representation of types +""" + +ida_typeinf.HTI_LEX +""" +debug: print tokens +""" + +ida_typeinf.HTI_LOWER +""" +lower the function prototypes +""" + +ida_typeinf.HTI_MAC +""" +define macros from the base tils +""" + +ida_typeinf.HTI_NDC +""" +don't decorate names +""" + +ida_typeinf.HTI_NER +""" +ignore all errors but display them +""" + +ida_typeinf.HTI_NWR +""" +no warning messages +""" + +ida_typeinf.HTI_PAK +""" +explicit structure pack value (#pragma pack) +""" + +ida_typeinf.HTI_PAK1 +""" +#pragma pack(1) +""" + +ida_typeinf.HTI_PAK16 +""" +#pragma pack(16) +""" + +ida_typeinf.HTI_PAK2 +""" +#pragma pack(2) +""" + +ida_typeinf.HTI_PAK4 +""" +#pragma pack(4) +""" + +ida_typeinf.HTI_PAK8 +""" +#pragma pack(8) +""" + +ida_typeinf.HTI_PAKDEF +""" +default pack value +""" + +ida_typeinf.HTI_PAK_SHIFT +""" +shift for 'HTI_PAK' . This field should be used if you want to +remember an explicit pack value for each structure/union type. See +'HTI_PAK' ... definitions +""" + +ida_typeinf.HTI_RAWARGS +""" +leave argument names unchanged (do not remove underscores) +""" + +ida_typeinf.HTI_TST +""" +test mode: discard the result +""" + +ida_typeinf.HTI_UNP +""" +debug: check the result by unpacking it +""" + +ida_typeinf.IMPTYPE_LOCAL +""" +the type is local, the struct/enum won't be marked as til type. there +is no need to specify this bit if til==idati, the kernel will set it +automatically +""" + +ida_typeinf.IMPTYPE_OVERRIDE +""" +override existing type +""" + +ida_typeinf.IMPTYPE_VERBOSE +""" +more verbose output (dialog boxes may appear) +""" + +ida_typeinf.MAX_FUNC_ARGS +""" +max number of function arguments +""" + +ida_typeinf.NTF_64BIT +""" +value is 64bit +""" + +ida_typeinf.NTF_CHKSYNC +""" +(set_numbered_type, set_named_type) + +check that synchronization to IDB passed OK +""" + +ida_typeinf.NTF_FIXNAME +""" +(set_named_type, set_numbered_type only) + +force-validate the name of the type when setting +""" + +ida_typeinf.NTF_IDBENC +""" +the name is given in the IDB encoding; non-ASCII bytes will be decoded +accordingly (set_named_type, set_numbered_type only) +""" + +ida_typeinf.NTF_NOBASE +""" +don't inspect base tils (for get_named_type) +""" + +ida_typeinf.NTF_NOCUR +""" +don't inspect current til file (for get_named_type) +""" + +ida_typeinf.NTF_REPLACE +""" +replace original type (for set_named_type) +""" + +ida_typeinf.NTF_SYMM +""" +only one of 'NTF_TYPE' and 'NTF_SYMU' , 'NTF_SYMM' can be used + +symbol, name is mangled ('_func') +""" + +ida_typeinf.NTF_SYMU +""" +symbol, name is unmangled ('func') +""" + +ida_typeinf.NTF_TYPE +""" +type name +""" + +ida_typeinf.NTF_UMANGLED +""" +name is unmangled (don't use this flag) +""" + +ida_typeinf.PCN_CHR +""" +character +""" + +ida_typeinf.PCN_DEC +""" +decimal +""" + +ida_typeinf.PCN_DECSEXT +""" +automatically extend sign of signed decimal numbers +""" + +ida_typeinf.PCN_HEX +""" +hexadecimal +""" + +ida_typeinf.PCN_LZHEX +""" +print leading zeroes for hexdecimal number +""" + +ida_typeinf.PCN_NEGSIGN +""" +print negated value (-N) for negative numbers +""" + +ida_typeinf.PCN_OCT +""" +octal +""" + +ida_typeinf.PCN_RADIX +""" +number base to use +""" + +ida_typeinf.PCN_UNSIGNED +""" +add 'u' suffix +""" + +ida_typeinf.PDF_DEF_BASE +""" +Include base types: __int8, __int16, etc.. +""" + +ida_typeinf.PDF_DEF_FWD +""" +Allow forward declarations. +""" + +ida_typeinf.PDF_HEADER_CMT +""" +Prepend output with a descriptive comment. +""" + +ida_typeinf.PDF_INCL_DEPS +""" +Include all type dependencies. +""" + +ida_typeinf.PIO_IGNORE_PTRS +""" +do not follow pointers +""" + +ida_typeinf.PIO_NOATTR_FAIL +""" +missing attributes are not ok +""" + +ida_typeinf.PRALOC_STKOFF +""" +print stack offsets +""" + +ida_typeinf.PRALOC_VERIFY +""" +interr if illegal argloc +""" + +ida_typeinf.PRTYPE_1LINE +""" +print to one line +""" + +ida_typeinf.PRTYPE_COLORED +""" +add color tag COLOR_SYMBOL for any parentheses, commas and colons +""" + +ida_typeinf.PRTYPE_CPP +""" +use c++ name (only for 'print_type()' ) +""" + +ida_typeinf.PRTYPE_DEF +""" + 'tinfo_t' : print definition, if available +""" + +ida_typeinf.PRTYPE_MULTI +""" +print to many lines +""" + +ida_typeinf.PRTYPE_NOARGS +""" + 'tinfo_t' : do not print function argument names +""" + +ida_typeinf.PRTYPE_NOARRS +""" + 'tinfo_t' : print arguments with 'FAI_ARRAY' as pointers +""" + +ida_typeinf.PRTYPE_NOREGEX +""" +do not apply regular expressions to beautify name +""" + +ida_typeinf.PRTYPE_NORES +""" + 'tinfo_t' : never resolve types (meaningful with PRTYPE_DEF) +""" + +ida_typeinf.PRTYPE_PRAGMA +""" +print pragmas for alignment +""" + +ida_typeinf.PRTYPE_RESTORE +""" + 'tinfo_t' : print restored types for 'FAI_ARRAY' and 'FAI_STRUCT' +""" + +ida_typeinf.PRTYPE_SEMI +""" +append ; to the end +""" + +ida_typeinf.PRTYPE_TYPE +""" +print type declaration (not variable declaration) +""" + +ida_typeinf.PT_HIGH +""" +(with hidden args, etc) + +assume high level prototypes +""" + +ida_typeinf.PT_LOWER +""" +lower the function prototypes +""" + +ida_typeinf.PT_NDC +""" +don't decorate names +""" + +ida_typeinf.PT_PACKMASK +""" +mask for pack alignment values +""" + +ida_typeinf.PT_RAWARGS +""" +leave argument names unchanged (do not remove underscores) +""" + +ida_typeinf.PT_REPLACE +""" +replace the old type (used in idc) +""" + +ida_typeinf.PT_SIL +""" +silent, no messages +""" + +ida_typeinf.PT_TYP +""" +return declared type information +""" + +ida_typeinf.PT_VAR +""" +return declared object information +""" + +ida_typeinf.RESERVED_BYTE +""" +multifunctional purpose +""" + +ida_typeinf.SETCOMP_BY_USER +""" +invoked by user, cannot be replaced by module/loader +""" + +ida_typeinf.SETCOMP_ONLY_ABI +""" +ignore cc field complete, use only abiname +""" + +ida_typeinf.SETCOMP_ONLY_ID +""" +cc has only 'id' field the rest will be set to defaults corresponding +to the program bitness +""" + +ida_typeinf.SETCOMP_OVERRIDE +""" +may override old compiler info +""" + +ida_typeinf.STRMEM_ANON +""" +can be combined with 'STRMEM_NAME' : look inside anonymous members +too. +""" + +ida_typeinf.STRMEM_AUTO +""" +get member by offset if struct, or get member by index if union - nb: +union: index is stored in the udm->offset field!nb: struct: offset is +in bytes (not in bits)! +""" + +ida_typeinf.STRMEM_CASTABLE_TO +""" +can be combined with 'STRMEM_TYPE' : member type must be castable to +the specified type +""" + +ida_typeinf.STRMEM_INDEX +""" +get member by number- in: udm->offset - is a member number +""" + +ida_typeinf.STRMEM_MAXS +""" +get biggest member by size. +""" + +ida_typeinf.STRMEM_MINS +""" +get smallest member by size. +""" + +ida_typeinf.STRMEM_NAME +""" +get member by name- in: udm->name - the desired member name. +""" + +ida_typeinf.STRMEM_OFFSET +""" +get member by offset- in: udm->offset - is a member offset in bits +""" + +ida_typeinf.STRMEM_SIZE +""" +get member by size.- in: udm->size - the desired member size. +""" + +ida_typeinf.STRMEM_SKIP_EMPTY +""" +can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' skip empty +members (i.e. having zero size) only last empty member can be returned +""" + +ida_typeinf.STRMEM_TYPE +""" +get member by type. - in: udm->type - the desired member type. member +types are compared with tinfo_t::equals_to() +""" + +ida_typeinf.STRMEM_VFTABLE +""" +can be combined with 'STRMEM_OFFSET' , 'STRMEM_AUTO' get vftable +instead of the base class +""" + +ida_typeinf.SUDT_ALIGN +""" +to match the offsets and size info + +recalculate field alignments, struct packing, etc +""" + +ida_typeinf.SUDT_CONST +""" +only for serialize_udt: make type const +""" + +ida_typeinf.SUDT_FAST +""" +serialize without verifying offsets and alignments +""" + +ida_typeinf.SUDT_GAPS +""" +allow to fill gaps with additional members (_BYTE[]) +""" + +ida_typeinf.SUDT_SORT +""" +fields are not sorted by offset, sort them first +""" + +ida_typeinf.SUDT_TRUNC +""" +serialize: truncate useless strings from fields, fldcmts +""" + +ida_typeinf.SUDT_UNEX +""" +references to nonexistent member types are acceptable in this case it +is better to set the corresponding 'udt_member_t::fda' field to the +type alignment. if this field is not set, ida will try to guess the +alignment. +""" + +ida_typeinf.SUDT_VOLATILE +""" +only for serialize_udt: make type volatile +""" + +ida_typeinf.TAENUM_64BIT +""" +enum: store 64-bit values +""" + +ida_typeinf.TAENUM_SIGNED +""" +enum: signed +""" + +ida_typeinf.TAENUM_UNSIGNED +""" +enum: unsigned +""" + +ida_typeinf.TAFLD_BASECLASS +""" +field: do not include but inherit from the current field +""" + +ida_typeinf.TAFLD_UNALIGNED +""" +field: unaligned field +""" + +ida_typeinf.TAFLD_VFTABLE +""" +field: ptr to virtual function table +""" + +ida_typeinf.TAFLD_VIRTBASE +""" +field: virtual base (not supported yet) +""" + +ida_typeinf.TAH_ALL +""" +all defined bits +""" + +ida_typeinf.TAH_BYTE +""" +type attribute header byte +""" + +ida_typeinf.TAH_HASATTRS +""" +has extended attributes +""" + +ida_typeinf.TAPTR_PTR32 +""" +ptr: __ptr32 +""" + +ida_typeinf.TAPTR_PTR64 +""" +ptr: __ptr64 +""" + +ida_typeinf.TAPTR_RESTRICT +""" +ptr: __restrict +""" + +ida_typeinf.TAPTR_SHIFTED +""" +ptr: __shifted(parent_struct, delta) +""" + +ida_typeinf.TAUDT_CPPOBJ +""" +struct: a c++ object, not simple pod type +""" + +ida_typeinf.TAUDT_MSSTRUCT +""" +struct: gcc msstruct attribute +""" + +ida_typeinf.TAUDT_UNALIGNED +""" +struct: unaligned struct +""" + +ida_typeinf.TAUDT_VFTABLE +""" +struct: is virtual function table +""" + +ida_typeinf.TA_FORMAT +""" +info about the 'format' argument 3 times pack_dd: 'format_functype_t' +, argument number of 'format', argument number of '...' +""" + +ida_typeinf.TA_ORG_ARRDIM +""" +the original array dimension (pack_dd) +""" + +ida_typeinf.TA_ORG_TYPEDEF +""" +the original typedef name (simple string) +""" + +ida_typeinf.TCMP_ANYBASE +""" +accept any base class when casting +""" + +ida_typeinf.TCMP_AUTOCAST +""" +can t1 be cast into t2 automatically? +""" + +ida_typeinf.TCMP_CALL +""" +can t1 be called with t2 type? +""" + +ida_typeinf.TCMP_DECL +""" +compare declarations without resolving them +""" + +ida_typeinf.TCMP_DELPTR +""" +remove pointer from types before comparing +""" + +ida_typeinf.TCMP_EQUAL +""" +are types equal? +""" + +ida_typeinf.TCMP_IGNMODS +""" +ignore const/volatile modifiers +""" + +ida_typeinf.TCMP_MANCAST +""" +can t1 be cast into t2 manually? +""" + +ida_typeinf.TCMP_SKIPTHIS +""" +skip the first function argument in comparison +""" + +ida_typeinf.TIL_ADD_ALREADY +""" +the base til was already added +""" + +ida_typeinf.TIL_ADD_FAILED +""" +see errbuf +""" + +ida_typeinf.TIL_ADD_OK +""" +some tils were added +""" + +ida_typeinf.TIL_ALI +""" +type aliases are present (this bit is used only on the disk) +""" + +ida_typeinf.TIL_ESI +""" +extended sizeof info (short, long, longlong) +""" + +ida_typeinf.TIL_MAC +""" +til has macro table +""" + +ida_typeinf.TIL_MOD +""" +til has been modified, should be saved +""" + +ida_typeinf.TIL_ORD +""" +type ordinal numbers are present +""" + +ida_typeinf.TIL_SLD +""" +sizeof(long double) +""" + +ida_typeinf.TIL_STM +""" +til has extra streams +""" + +ida_typeinf.TIL_UNI +""" +universal til for any compiler +""" + +ida_typeinf.TIL_ZIP +""" +pack buckets using zip +""" + +ida_typeinf.TINFO_DEFINITE +""" +this is a definite type +""" + +ida_typeinf.TINFO_DELAYFUNC +""" +if type is a function and no function exists at ea, schedule its +creation and argument renaming to auto-analysis otherwise try to +create it immediately +""" + +ida_typeinf.TINFO_GUESSED +""" +this is a guessed type +""" + +ida_typeinf.TINFO_STRICT +""" +never convert given type to another one before applying +""" + +ida_typeinf.TVIS_CMT +""" +new comment is present +""" + +ida_typeinf.TVIS_NAME +""" +new name is present +""" + +ida_typeinf.TVIS_TYPE +""" +new type info is present +""" + +ida_typeinf.TVST_DEF +""" +visit type definition (meaningful for typerefs) +""" + +ida_typeinf.TVST_PRUNE +""" +don't visit children of current type +""" + +ida_typeinf.VALSTR_OPEN +""" +printed opening curly brace '{' +""" +=== ida_typeinf EPYDOC INJECTIONS END === +Help on function calc_dataseg in module ida_ua: + +calc_dataseg(*args) -> 'ea_t' + calc_dataseg(insn, n=-1, rgnum=-1) -> ea_t + + + Get data segment for the instruction operand. 'opnum' and 'rgnum' are + meaningful only if the processor has segment registers. + + @param insn (C++: const insn_t &) + @param n (C++: int) + @param rgnum (C++: int) + +Help on function can_decode in module ida_ua: + +can_decode(*args) -> 'bool' + can_decode(ea) -> bool + + + Can the bytes at address 'ea' be decoded as instruction? + + @param ea: linear address (C++: ea_t) + @return: whether or not the contents at that address could be a valid + instruction + +Help on function construct_macro in module ida_ua: + +construct_macro(*args) -> 'bool' + construct_macro(insn, enable, build_macro) -> bool + + + See ua.hpp's construct_macro(). + +Help on function create_insn in module ida_ua: + +create_insn(*args) -> 'int' + create_insn(ea, out=None) -> int + + + Create an instruction at the specified address. This function checks + if an instruction is present at the specified address and will try to + create one if there is none. It will fail if there is a data item or + other items hindering the creation of the new instruction. This + function will also fill the 'out' structure. + + @param ea: linear address (C++: ea_t) + @param out: the resulting instruction (C++: insn_t *) + @return: the length of the instruction or 0 + +Help on function create_outctx in module ida_ua: + +create_outctx(*args) -> 'outctx_base_t *' + create_outctx(ea, F=0, suspop=0) -> outctx_base_t + + + Create a new output context. To delete it, just use "delete pctx" + + @param ea (C++: ea_t) + @param F (C++: flags_t) + @param suspop (C++: int) + +Help on function decode_insn in module ida_ua: + +decode_insn(*args) -> 'int' + decode_insn(out, ea) -> int + + + Analyze the specified address and fill 'out'. This function does not + modify the database. It just tries to interpret the specified address + as an instruction and fills the 'out' structure. + + @param out: the resulting instruction (C++: insn_t *) + @param ea: linear address (C++: ea_t) + @return: the length of the (possible) instruction or 0 + +Help on function decode_preceding_insn in module ida_ua: + +decode_preceding_insn(*args) -> 'PyObject *' + decode_preceding_insn(out, ea) -> PyObject * + + + Decodes the preceding instruction. Please check ua.hpp / decode_preceding_insn() + @param ea: current ea + @param out: instruction storage + @return: tuple(preceeding_ea or BADADDR, farref = Boolean) + +Help on function decode_prev_insn in module ida_ua: + +decode_prev_insn(*args) -> 'ea_t' + decode_prev_insn(out, ea) -> ea_t + + + Decode previous instruction if it exists, fill 'out'. + + @param out: the resulting instruction (C++: insn_t *) + @param ea: the address to decode the previous instruction from (C++: + ea_t) + @return: the previous instruction address ( BADADDR -no such insn) + +Help on function get_dtype_by_size in module ida_ua: + +get_dtype_by_size(*args) -> 'int' + get_dtype_by_size(size) -> int + + + Get 'op_t::dtype' from size. + + + @param size (C++: asize_t) + +Help on function get_dtype_flag in module ida_ua: + +get_dtype_flag(*args) -> 'flags_t' + get_dtype_flag(dtype) -> flags_t + + + Get flags for 'op_t::dtype' field. + + + @param dtype (C++: op_dtype_t) + +Help on function get_dtype_size in module ida_ua: + +get_dtype_size(*args) -> 'size_t' + get_dtype_size(dtype) -> size_t + + + Get size of opt_::dtype field. + + + @param dtype (C++: op_dtype_t) + +Help on function get_immvals in module ida_ua: + +get_immvals(*args) -> 'PyObject *' + get_immvals(ea, n, F=0) -> PyObject * + + + Get immediate values at the specified address. This function decodes + instruction at the specified address or inspects the data item. It + finds immediate values and copies them to 'out'. This function will + store the original value of the operands in 'out', unless the last + bits of 'F' are "...0 11111111", in which case the transformed values + (as needed for printing) will be stored instead. + + @param ea: address to analyze (C++: ea_t) + @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands + (C++: int) + @param F: flags for the specified address (C++: flags_t) + @return: number of immediate values (0..2* UA_MAXOP ) + +Help on function get_lookback in module ida_ua: + +get_lookback(*args) -> 'int' + get_lookback() -> int + + + Number of instructions to look back. This variable is not used by the + kernel. Its value may be specified in ida.cfg: LOOKBACK = . + IDP may use it as you like it. (TMS module uses it) + +Help on function get_printable_immvals in module ida_ua: + +get_printable_immvals(*args) -> 'PyObject *' + get_printable_immvals(ea, n, F=0) -> PyObject * + + + Get immediate ready-to-print values at the specified address + + @param ea: address to analyze (C++: ea_t) + @param n: number of operand (0.. UA_MAXOP -1), -1 means all operands + (C++: int) + @param F: flags for the specified address (C++: flags_t) + @return: number of immediate values (0..2* UA_MAXOP ) + +Help on function guess_table_address in module ida_ua: + +guess_table_address(*args) -> 'ea_t' + guess_table_address(insn) -> ea_t + + + Guess the jump table address (ibm pc specific) + + + @param insn (C++: const insn_t &) + +Help on function guess_table_size in module ida_ua: + +guess_table_size(*args) -> 'asize_t' + guess_table_size(insn, jump_table) -> asize_t + + + Guess the jump table size. + + + @param insn (C++: const insn_t &) + @param jump_table (C++: ea_t) + +Help on function insn_add_cref in module ida_ua: + +insn_add_cref(*args) -> 'void' + insn_add_cref(insn, to, opoff, type) + +Help on function insn_add_dref in module ida_ua: + +insn_add_dref(*args) -> 'void' + insn_add_dref(insn, to, opoff, type) + +Help on function insn_add_off_drefs in module ida_ua: + +insn_add_off_drefs(*args) -> 'ea_t' + insn_add_off_drefs(insn, x, type, outf) -> ea_t + +Help on function insn_create_stkvar in module ida_ua: + +insn_create_stkvar(*args) -> 'bool' + insn_create_stkvar(insn, x, v, flags) -> bool + +Help on class insn_t in module ida_ua: + +class insn_t(builtins.object) + | Proxy of C++ insn_t class. + | + | Methods defined here: + | + | __get_auxpref__(self, *args) -> 'uint16' + | __get_auxpref__(self) -> uint16 + | + | __get_operand__(self, *args) -> 'op_t *' + | __get_operand__(self, n) -> op_t + | + | __get_ops__(self, *args) -> 'wrapped_array_t< op_t,8 >' + | __get_ops__(self) -> operands_array + | + | __getitem__(self, idx) + | Operands can be accessed directly as indexes + | @return op_t: Returns an operand of type op_t + | + | __init__(self, *args) + | __init__(self) -> insn_t + | + | __iter__(self) + | + | __repr__ = _swig_repr(self) + | + | __set_auxpref__(self, *args) -> 'void' + | __set_auxpref__(self, v) + | + | __swig_destroy__ = delete_insn_t(...) + | delete_insn_t(self) + | + | add_cref(self, *args) -> 'void' + | add_cref(self, to, opoff, type) + | + | add_dref(self, *args) -> 'void' + | add_dref(self, to, opoff, type) + | + | add_off_drefs(self, *args) -> 'ea_t' + | add_off_drefs(self, x, type, outf) -> ea_t + | + | assign(self, *args) -> 'void' + | assign(self, other) + | + | create_op_data(self, *args) -> 'bool' + | create_op_data(self, ea_, opoff, dtype) -> bool + | create_op_data(self, ea_, op) -> bool + | + | create_stkvar(self, *args) -> 'bool' + | create_stkvar(self, x, v, flags_) -> bool + | + | get_canon_feature(self, *args) -> 'uint32' + | get_canon_feature(self) -> uint32 + | + | get_canon_mnem(self, *args) -> 'char const *' + | get_canon_mnem(self) -> char const * + | + | get_next_byte(self, *args) -> 'uint8' + | get_next_byte(self) -> uint8 + | + | get_next_dword(self, *args) -> 'uint32' + | get_next_dword(self) -> uint32 + | + | get_next_qword(self, *args) -> 'uint64' + | get_next_qword(self) -> uint64 + | + | get_next_word(self, *args) -> 'uint16' + | get_next_word(self) -> uint16 + | + | is_64bit(self, *args) -> 'bool' + | is_64bit(self) -> bool + | + | is_canon_insn(self, *args) -> 'bool' + | is_canon_insn(self) -> bool + | + | is_macro(self, *args) -> 'bool' + | is_macro(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | Op1 + | + | Op2 + | + | Op3 + | + | Op4 + | + | Op5 + | + | Op6 + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | auxpref + | __get_auxpref__(self) -> uint16 + | + | cs + | insn_t_cs_get(self) -> ea_t + | + | ea + | insn_t_ea_get(self) -> ea_t + | + | flags + | insn_t_flags_get(self) -> int16 + | + | insnpref + | insn_t_insnpref_get(self) -> char + | + | ip + | insn_t_ip_get(self) -> ea_t + | + | itype + | insn_t_itype_get(self) -> uint16 + | + | ops + | __get_ops__(self) -> operands_array + | + | segpref + | insn_t_segpref_get(self) -> char + | + | size + | insn_t_size_get(self) -> uint16 + | + | thisown + | The membership flag + +Help on function insn_t__from_ptrval__ in module ida_ua: + +insn_t__from_ptrval__(*args) -> 'insn_t *' + insn_t__from_ptrval__(ptrval) -> insn_t + +Help on function is_floating_dtype in module ida_ua: + +is_floating_dtype(*args) -> 'bool' + is_floating_dtype(dtype) -> bool + + + Is a floating type operand? + + + @param dtype (C++: op_dtype_t) + +Help on function map_code_ea in module ida_ua: + +map_code_ea(*args) -> 'ea_t' + map_code_ea(insn, addr, opnum) -> ea_t + map_code_ea(insn, op) -> ea_t + + + Map a code address. This function takes into account the segment + translations. + + @param insn: the current instruction (C++: const insn_t &) + @param addr: the referenced address to map (C++: ea_t) + @param opnum: operand number (C++: int) + +Help on function map_data_ea in module ida_ua: + +map_data_ea(*args) -> 'ea_t' + map_data_ea(insn, addr, opnum=-1) -> ea_t + map_data_ea(insn, op) -> ea_t + + + Map a data address. + + @param insn: the current instruction (C++: const insn_t &) + @param addr: the referenced address to map (C++: ea_t) + @param opnum: operand number (C++: int) + +Help on function map_ea in module ida_ua: + +map_ea(*args) -> 'ea_t' + map_ea(insn, op, iscode) -> ea_t + map_ea(insn, addr, opnum, iscode) -> ea_t + +Help on class op_t in module ida_ua: + +class op_t(builtins.object) + | Proxy of C++ op_t class. + | + | Methods defined here: + | + | __get_addr__(self, *args) -> 'ea_t' + | __get_addr__(self) -> ea_t + | + | __get_reg_phrase__(self, *args) -> 'uint16' + | __get_reg_phrase__(self) -> uint16 + | + | __get_specval__(self, *args) -> 'ea_t' + | __get_specval__(self) -> ea_t + | + | __get_value__(self, *args) -> 'ea_t' + | __get_value__(self) -> ea_t + | + | __init__(self, *args) + | __init__(self) -> op_t + | + | __repr__ = _swig_repr(self) + | + | __set_addr__(self, *args) -> 'void' + | __set_addr__(self, v) + | + | __set_reg_phrase__(self, *args) -> 'void' + | __set_reg_phrase__(self, r) + | + | __set_specval__(self, *args) -> 'void' + | __set_specval__(self, v) + | + | __set_value__(self, *args) -> 'void' + | __set_value__(self, v) + | + | __swig_destroy__ = delete_op_t(...) + | delete_op_t(self) + | + | assign(self, *args) -> 'void' + | assign(self, other) + | + | clr_shown(self, *args) -> 'void' + | clr_shown(self) + | + | has_reg(self, r) + | Checks if the operand accesses the given processor register + | + | is_imm(self, *args) -> 'bool' + | is_imm(self, v) -> bool + | + | is_reg(self, *args) -> 'bool' + | is_reg(self, r) -> bool + | + | set_shown(self, *args) -> 'void' + | set_shown(self) + | + | shown(self, *args) -> 'bool' + | shown(self) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | addr + | __get_addr__(self) -> ea_t + | + | dtype + | op_t_dtype_get(self) -> op_dtype_t + | + | flags + | op_t_flags_get(self) -> uchar + | + | n + | op_t_n_get(self) -> uchar + | + | offb + | op_t_offb_get(self) -> char + | + | offo + | op_t_offo_get(self) -> char + | + | phrase + | __get_reg_phrase__(self) -> uint16 + | + | reg + | __get_reg_phrase__(self) -> uint16 + | + | specflag1 + | op_t_specflag1_get(self) -> char + | + | specflag2 + | op_t_specflag2_get(self) -> char + | + | specflag3 + | op_t_specflag3_get(self) -> char + | + | specflag4 + | op_t_specflag4_get(self) -> char + | + | specval + | __get_specval__(self) -> ea_t + | + | thisown + | The membership flag + | + | type + | op_t_type_get(self) -> optype_t + | + | value + | __get_value__(self) -> ea_t + +Help on function op_t__from_ptrval__ in module ida_ua: + +op_t__from_ptrval__(*args) -> 'op_t *' + op_t__from_ptrval__(ptrval) -> op_t + +Help on class operands_array in module ida_ua: + +class operands_array(builtins.object) + | Proxy of C++ wrapped_array_t< op_t,8 > class. + | + | Methods defined here: + | + | __getitem__(self, *args) -> 'op_t const &' + | __getitem__(self, i) -> op_t + | + | __init__(self, *args) + | __init__(self, data) -> operands_array + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__(self, *args) -> 'size_t' + | __len__(self) -> size_t + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_operands_array(...) + | delete_operands_array(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | data + | operands_array_data_get(self) -> op_t (&)[8] + | + | thisown + | The membership flag + +Help on class outctx_base_t in module ida_ua: + +class outctx_base_t(builtins.object) + | Proxy of C++ outctx_base_t class. + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | close_comment(self, *args) -> 'void' + | close_comment(self) + | + | clr_gen_label(self, *args) -> 'void' + | clr_gen_label(self) + | + | display_voids(self, *args) -> 'bool' + | display_voids(self) -> bool + | + | flush_buf(self, *args) -> 'bool' + | flush_buf(self, buf, indent=-1) -> bool + | + | flush_outbuf(self, *args) -> 'bool' + | flush_outbuf(self, indent=-1) -> bool + | + | forbid_annotations(self, *args) -> 'int' + | forbid_annotations(self) -> int + | + | force_code(self, *args) -> 'bool' + | force_code(self) -> bool + | + | gen_block_cmt(self, *args) -> 'bool' + | gen_block_cmt(self, cmt, color) -> bool + | + | gen_border_line(self, *args) -> 'bool' + | gen_border_line(self, solid=False) -> bool + | + | gen_cmt_line(self, *args) -> 'bool' + | gen_cmt_line(self, format) -> bool + | + | gen_collapsed_line(self, *args) -> 'bool' + | gen_collapsed_line(self, format) -> bool + | + | gen_empty_line(self, *args) -> 'bool' + | gen_empty_line(self) -> bool + | + | gen_empty_line_without_annotations(self, *args) -> 'void' + | gen_empty_line_without_annotations(self) + | + | gen_printf(self, *args) -> 'bool' + | gen_printf(self, indent, format) -> bool + | + | gen_xref_lines(self, *args) -> 'bool' + | gen_xref_lines(self) -> bool + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * + | + | init_lines_array(self, *args) -> 'void' + | init_lines_array(self, answers, maxsize) + | + | multiline(self, *args) -> 'bool' + | multiline(self) -> bool + | + | only_main_line(self, *args) -> 'bool' + | only_main_line(self) -> bool + | + | out_addr_tag(self, *args) -> 'void' + | out_addr_tag(self, ea) + | + | out_btoa(self, *args) -> 'void' + | out_btoa(self, Word, radix=0) + | + | out_char(self, *args) -> 'void' + | out_char(self, c) + | + | out_chars(self, *args) -> 'void' + | out_chars(self, c, n) + | + | out_colored_register_line(self, *args) -> 'void' + | out_colored_register_line(self, str) + | + | out_keyword(self, *args) -> 'void' + | out_keyword(self, str) + | + | out_line(self, *args) -> 'void' + | out_line(self, str, color=0) + | + | out_long(self, *args) -> 'void' + | out_long(self, v, radix) + | + | out_name_expr(self, *args) -> 'bool' + | out_name_expr(self, x, ea, off=BADADDR) -> bool + | + | out_printf(self, *args) -> 'void' + | out_printf(self, format) + | + | out_register(self, *args) -> 'void' + | out_register(self, str) + | + | out_spaces(self, *args) -> 'void' + | out_spaces(self, len) + | + | out_symbol(self, *args) -> 'void' + | out_symbol(self, c) + | + | out_tagoff(self, *args) -> 'void' + | out_tagoff(self, tag) + | + | out_tagon(self, *args) -> 'void' + | out_tagon(self, tag) + | + | out_value(self, *args) -> 'flags_t' + | out_value(self, x, outf=0) -> flags_t + | + | print_label_now(self, *args) -> 'bool' + | print_label_now(self) -> bool + | + | restore_ctxflags(self, *args) -> 'void' + | restore_ctxflags(self, saved_flags) + | + | retrieve_cmt(self, *args) -> 'ssize_t' + | retrieve_cmt(self) -> ssize_t + | + | retrieve_name(self, *args) -> 'ssize_t' + | retrieve_name(self, arg2, arg3) -> ssize_t + | + | set_comment_addr(self, *args) -> 'void' + | set_comment_addr(self, ea) + | + | set_dlbind_opnd(self, *args) -> 'void' + | set_dlbind_opnd(self) + | + | set_gen_cmt(self, *args) -> 'void' + | set_gen_cmt(self, on=True) + | + | set_gen_demangled_label(self, *args) -> 'void' + | set_gen_demangled_label(self) + | + | set_gen_label(self, *args) -> 'void' + | set_gen_label(self) + | + | set_gen_xrefs(self, *args) -> 'void' + | set_gen_xrefs(self, on=True) + | + | setup_outctx(self, *args) -> 'void' + | setup_outctx(self, prefix, makeline_flags) + | + | stack_view(self, *args) -> 'bool' + | stack_view(self) -> bool + | + | term_outctx(self, *args) -> 'int' + | term_outctx(self, prefix=None) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | default_lnnum + | outctx_base_t_default_lnnum_get(self) -> int + | + | insn_ea + | outctx_base_t_insn_ea_get(self) -> ea_t + | + | outbuf + | outctx_base_t_outbuf_get(self) -> qstring * + | + | thisown + | The membership flag + +Help on function outctx_base_t__from_ptrval__ in module ida_ua: + +outctx_base_t__from_ptrval__(*args) -> 'outctx_base_t *' + outctx_base_t__from_ptrval__(ptrval) -> outctx_base_t + +Help on class outctx_t in module ida_ua: + +class outctx_t(outctx_base_t) + | Proxy of C++ outctx_t class. + | + | Method resolution order: + | outctx_t + | outctx_base_t + | builtins.object + | + | Methods defined here: + | + | __init__(self, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__ = _swig_repr(self) + | + | gen_func_footer(self, *args) -> 'void' + | gen_func_footer(self, pfn) + | + | gen_func_header(self, *args) -> 'void' + | gen_func_header(self, pfn) + | + | gen_header(self, *args) -> 'void' + | gen_header(self, flags=((1 << 0)|(1 << 1)), proc_name=None, proc_flavour=None) + | + | gen_header_extra(self, *args) -> 'void' + | gen_header_extra(self) + | + | gen_xref_lines(self, *args) -> 'bool' + | gen_xref_lines(self) -> bool + | + | out_custom_mnem(self, *args) -> 'void' + | out_custom_mnem(self, mnem, width=8, postfix=None) + | + | out_data(self, *args) -> 'void' + | out_data(self, analyze_only) + | + | out_immchar_cmts(self, *args) -> 'void' + | out_immchar_cmts(self) + | + | out_mnem(self, *args) -> 'void' + | out_mnem(self, width=8, postfix=None) + | + | out_mnemonic(self, *args) -> 'void' + | out_mnemonic(self) + | + | out_one_operand(self, *args) -> 'bool' + | out_one_operand(self, n) -> bool + | + | out_specea(self, *args) -> 'bool' + | out_specea(self, segtype) -> bool + | + | retrieve_cmt(self, *args) -> 'ssize_t' + | retrieve_cmt(self) -> ssize_t + | + | retrieve_name(self, *args) -> 'ssize_t' + | retrieve_name(self, arg2, arg3) -> ssize_t + | + | set_bin_state(self, *args) -> 'void' + | set_bin_state(self, value) + | + | setup_outctx(self, *args) -> 'void' + | setup_outctx(self, prefix, flags) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | bin_ea + | outctx_t_bin_ea_get(self) -> ea_t + | + | bin_state + | outctx_t_bin_state_get(self) -> char + | + | bin_width + | outctx_t_bin_width_get(self) -> int + | + | curlabel + | outctx_t_curlabel_get(self) -> qstring * + | + | gl_bpsize + | outctx_t_gl_bpsize_get(self) -> int + | + | insn + | outctx_t_insn_get(self) -> insn_t + | + | thisown + | The membership flag + | + | wif + | outctx_t_wif_get(self) -> printop_t + | + | ---------------------------------------------------------------------- + | Methods inherited from outctx_base_t: + | + | close_comment(self, *args) -> 'void' + | close_comment(self) + | + | clr_gen_label(self, *args) -> 'void' + | clr_gen_label(self) + | + | display_voids(self, *args) -> 'bool' + | display_voids(self) -> bool + | + | flush_buf(self, *args) -> 'bool' + | flush_buf(self, buf, indent=-1) -> bool + | + | flush_outbuf(self, *args) -> 'bool' + | flush_outbuf(self, indent=-1) -> bool + | + | forbid_annotations(self, *args) -> 'int' + | forbid_annotations(self) -> int + | + | force_code(self, *args) -> 'bool' + | force_code(self) -> bool + | + | gen_block_cmt(self, *args) -> 'bool' + | gen_block_cmt(self, cmt, color) -> bool + | + | gen_border_line(self, *args) -> 'bool' + | gen_border_line(self, solid=False) -> bool + | + | gen_cmt_line(self, *args) -> 'bool' + | gen_cmt_line(self, format) -> bool + | + | gen_collapsed_line(self, *args) -> 'bool' + | gen_collapsed_line(self, format) -> bool + | + | gen_empty_line(self, *args) -> 'bool' + | gen_empty_line(self) -> bool + | + | gen_empty_line_without_annotations(self, *args) -> 'void' + | gen_empty_line_without_annotations(self) + | + | gen_printf(self, *args) -> 'bool' + | gen_printf(self, indent, format) -> bool + | + | get_stkvar(self, *args) -> 'member_t *' + | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * + | + | init_lines_array(self, *args) -> 'void' + | init_lines_array(self, answers, maxsize) + | + | multiline(self, *args) -> 'bool' + | multiline(self) -> bool + | + | only_main_line(self, *args) -> 'bool' + | only_main_line(self) -> bool + | + | out_addr_tag(self, *args) -> 'void' + | out_addr_tag(self, ea) + | + | out_btoa(self, *args) -> 'void' + | out_btoa(self, Word, radix=0) + | + | out_char(self, *args) -> 'void' + | out_char(self, c) + | + | out_chars(self, *args) -> 'void' + | out_chars(self, c, n) + | + | out_colored_register_line(self, *args) -> 'void' + | out_colored_register_line(self, str) + | + | out_keyword(self, *args) -> 'void' + | out_keyword(self, str) + | + | out_line(self, *args) -> 'void' + | out_line(self, str, color=0) + | + | out_long(self, *args) -> 'void' + | out_long(self, v, radix) + | + | out_name_expr(self, *args) -> 'bool' + | out_name_expr(self, x, ea, off=BADADDR) -> bool + | + | out_printf(self, *args) -> 'void' + | out_printf(self, format) + | + | out_register(self, *args) -> 'void' + | out_register(self, str) + | + | out_spaces(self, *args) -> 'void' + | out_spaces(self, len) + | + | out_symbol(self, *args) -> 'void' + | out_symbol(self, c) + | + | out_tagoff(self, *args) -> 'void' + | out_tagoff(self, tag) + | + | out_tagon(self, *args) -> 'void' + | out_tagon(self, tag) + | + | out_value(self, *args) -> 'flags_t' + | out_value(self, x, outf=0) -> flags_t + | + | print_label_now(self, *args) -> 'bool' + | print_label_now(self) -> bool + | + | restore_ctxflags(self, *args) -> 'void' + | restore_ctxflags(self, saved_flags) + | + | set_comment_addr(self, *args) -> 'void' + | set_comment_addr(self, ea) + | + | set_dlbind_opnd(self, *args) -> 'void' + | set_dlbind_opnd(self) + | + | set_gen_cmt(self, *args) -> 'void' + | set_gen_cmt(self, on=True) + | + | set_gen_demangled_label(self, *args) -> 'void' + | set_gen_demangled_label(self) + | + | set_gen_label(self, *args) -> 'void' + | set_gen_label(self) + | + | set_gen_xrefs(self, *args) -> 'void' + | set_gen_xrefs(self, on=True) + | + | stack_view(self, *args) -> 'bool' + | stack_view(self) -> bool + | + | term_outctx(self, *args) -> 'int' + | term_outctx(self, prefix=None) -> int + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from outctx_base_t: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | default_lnnum + | outctx_base_t_default_lnnum_get(self) -> int + | + | insn_ea + | outctx_base_t_insn_ea_get(self) -> ea_t + | + | outbuf + | outctx_base_t_outbuf_get(self) -> qstring * + +Help on function outctx_t__from_ptrval__ in module ida_ua: + +outctx_t__from_ptrval__(*args) -> 'outctx_t *' + outctx_t__from_ptrval__(ptrval) -> outctx_t + +Help on function print_insn_mnem in module ida_ua: + +print_insn_mnem(*args) -> 'qstring *' + print_insn_mnem(ea) -> str + + + Print instruction mnemonics. + + @param ea: linear address of the instruction (C++: ea_t) + @return: success + +Help on function print_operand in module ida_ua: + +print_operand(*args) -> 'qstring *' + print_operand(ea, n, getn_flags=0, newtype=None) -> str + + + Generate text representation for operand #n. This function will + generate the text representation of the specified operand (includes + color codes.) + + @param ea: the item address (instruction or data) (C++: ea_t) + @param n: operand number (0,1,2...). meaningful only for instructions + (C++: int) + @param getn_flags (C++: int) + @param newtype: if specified, print the operand using the specified + type (C++: struct printop_t *) + @return: success + +=== ida_ua EPYDOC INJECTIONS === +ida_ua.FCBF_CONT +""" +don't stop on decoding, or any other kind of error +""" + +ida_ua.FCBF_DELIM +""" +add the 'ash'-specified delimiters around the generated data. Note: if +those are not defined and the INFFL_ALLASM is not set, +'format_charlit()' will return an error +""" + +ida_ua.FCBF_ERR_REPL +""" +of a hex representation of the problematic byte + +in case of an error, use a CP_REPLCHAR instead +""" + +ida_ua.FCBF_FF_LIT +""" +in case of codepoints == 0xFF, use it as-is (i.e., LATIN SMALL LETTER +Y WITH DIAERESIS) If both this, and FCBF_REPL are specified, this will +take precedence +""" + +ida_ua.INSN_64BIT +""" +belongs to 64bit segment? +""" + +ida_ua.INSN_MACRO +""" +macro instruction +""" + +ida_ua.INSN_MODMAC +""" +may modify the database to make room for the macro insn +""" + +ida_ua.OF_NO_BASE_DISP +""" +base displacement doesn't exist. meaningful only for 'o_displ' type. +if set, base displacement ( 'op_t::addr' ) doesn't exist. +""" + +ida_ua.OF_NUMBER +""" +the operand can be converted to a number only +""" + +ida_ua.OF_OUTER_DISP +""" +outer displacement exists. meaningful only for 'o_displ' type. if set, +outer displacement ( 'op_t::value' ) exists. +""" + +ida_ua.OF_SHOW +""" +should the operand be displayed? +""" + +ida_ua.OOFS_IFSIGN +""" +output sign if needed +""" + +ida_ua.OOFS_NEEDSIGN +""" +always out sign (+-) +""" + +ida_ua.OOFS_NOSIGN +""" +don't output sign, forbid the user to change the sign +""" + +ida_ua.OOFW_16 +""" +16 bit width +""" + +ida_ua.OOFW_24 +""" +24 bit width +""" + +ida_ua.OOFW_32 +""" +32 bit width +""" + +ida_ua.OOFW_64 +""" +64 bit width +""" + +ida_ua.OOFW_8 +""" +8 bit width +""" + +ida_ua.OOFW_IMM +""" +take from x.dtype +""" + +ida_ua.OOF_ADDR +""" +output x.addr, otherwise x.value +""" + +ida_ua.OOF_ANYSERIAL +""" +if enum: select first available serial +""" + +ida_ua.OOF_NOBNOT +""" +prohibit use of binary not +""" + +ida_ua.OOF_NUMBER +""" +always as a number +""" + +ida_ua.OOF_OUTER +""" +output outer operand +""" + +ida_ua.OOF_SIGNED +""" +output as signed if < 0 +""" + +ida_ua.OOF_SIGNMASK +""" +sign symbol (+/-) output +""" + +ida_ua.OOF_SPACES +""" +currently works only for floating point numbers + +do not suppress leading spaces +""" + +ida_ua.OOF_WIDTHMASK +""" +width of value in bits +""" + +ida_ua.OOF_ZSTROFF +""" +meaningful only if is_stroff(uFlag) append a struct field name if the +field offset is zero? if 'AFL_ZSTROFF' is set, then this flag is +ignored. +""" + +ida_ua.PACK_FORM_DEF +""" +(! 'o_reg' + 'dt_packreal' ) + +packed factor defined. +""" + +ida_ua.dt_bitfild +""" +bit field (mc680x0) +""" + +ida_ua.dt_byte +""" +8 bit integer +""" + +ida_ua.dt_byte16 +""" +128 bit integer +""" + +ida_ua.dt_byte32 +""" +256 bit integer +""" + +ida_ua.dt_byte64 +""" +512 bit integer +""" + +ida_ua.dt_code +""" +ptr to code (not used?) +""" + +ida_ua.dt_double +""" +8 byte floating point +""" + +ida_ua.dt_dword +""" +32 bit integer +""" + +ida_ua.dt_float +""" +4 byte floating point +""" + +ida_ua.dt_fword +""" +48 bit +""" + +ida_ua.dt_half +""" +2-byte floating point +""" + +ida_ua.dt_ldbl +""" +long double (which may be different from tbyte) +""" + +ida_ua.dt_packreal +""" +packed real format for mc68040 +""" + +ida_ua.dt_qword +""" +64 bit integer +""" + +ida_ua.dt_string +""" +pointer to asciiz string +""" + +ida_ua.dt_tbyte +""" +variable size (\\ph{tbyte_size}) floating point +""" + +ida_ua.dt_unicode +""" +pointer to unicode string +""" + +ida_ua.dt_void +""" +none +""" + +ida_ua.dt_word +""" +16 bit integer +""" +=== ida_ua EPYDOC INJECTIONS END === +Help on function add_cref in module ida_xref: + +add_cref(*args) -> 'bool' + add_cref(frm, to, type) -> bool + + + Create a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param type: cross-reference type (C++: cref_t) + @return: success + +Help on function add_dref in module ida_xref: + +add_dref(*args) -> 'bool' + add_dref(frm, to, type) -> bool + + + Create a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + @param type: cross-reference type (C++: dref_t) + @return: success (may fail if user-defined xref exists from->to) + +Help on function calc_switch_cases in module ida_xref: + +calc_switch_cases(*args) -> 'cases_and_targets_t *' + calc_switch_cases(ea, si) -> cases_and_targets_t + + + Get information about a switch's cases. + + The returned information can be used as follows: + + for idx in range(len(results.cases)): + cur_case = results.cases[idx] + for cidx in range(len(cur_case)): + print("case: %d" % cur_case[cidx]) + print(" goto 0x%x" % results.targets[idx]) + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: a structure with 2 members: 'cases', and 'targets'. + +Help on class cases_and_targets_t in module ida_xref: + +class cases_and_targets_t(builtins.object) + | Proxy of C++ cases_and_targets_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> cases_and_targets_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_cases_and_targets_t(...) + | delete_cases_and_targets_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | cases + | cases_and_targets_t_cases_get(self) -> casevec_t + | + | targets + | cases_and_targets_t_targets_get(self) -> eavec_t * + | + | thisown + | The membership flag + +Help on class casevec_t in module ida_xref: + +class casevec_t(builtins.object) + | Proxy of C++ qvector< qvector< sval_t > > class. + | + | Methods defined here: + | + | __eq__(self, *args) -> 'bool' + | __eq__(self, r) -> bool + | + | __getitem__(self, *args) -> 'qvector< signed-ea-like-numeric-type > const &'↗ + | __getitem__(self, i) -> qvector< signed-ea-like-numeric-type > const &↗ + | + | __init__(self, *args) + | __init__(self) -> casevec_t + | __init__(self, x) -> casevec_t + | + | __iter__ = _bounded_getitem_iterator(self) + | Helper function, to be set as __iter__ method for qvector-, or array-based classes. + | + | __len__ = size(self, *args) -> 'size_t' + | + | __ne__(self, *args) -> 'bool' + | __ne__(self, r) -> bool + | + | __repr__ = _swig_repr(self) + | + | __setitem__(self, *args) -> 'void' + | __setitem__(self, i, v) + | + | __swig_destroy__ = delete_casevec_t(...) + | delete_casevec_t(self) + | + | _del(self, *args) -> 'bool' + | _del(self, x) -> bool + | + | add_unique(self, *args) -> 'bool' + | add_unique(self, x) -> bool + | + | append = push_back(self, *args) -> 'qvector< signed-ea-like-numeric-type > &'↗ + | + | at = __getitem__(self, *args) -> 'qvector< signed-ea-like-numeric-type > const &'↗ + | + | back = _qvector_back(self) + | # ----------------------------------------------------------------------- + | + | begin(self, *args) -> 'qvector< qvector< signed-ea-like-numeric-type > >::const_iterator'↗ + | begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | begin(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | capacity(self, *args) -> 'size_t' + | capacity(self) -> size_t + | + | clear(self, *args) -> 'void' + | clear(self) + | + | empty(self, *args) -> 'bool' + | empty(self) -> bool + | + | end(self, *args) -> 'qvector< qvector< signed-ea-like-numeric-type > >::const_iterator'↗ + | end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | end(self) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | erase(self, *args) -> 'qvector< qvector< signed-ea-like-numeric-type > >::iterator'↗ + | erase(self, it) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | erase(self, first, last) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | + | extract(self, *args) -> 'qvector< signed-ea-like-numeric-type > *'↗ + | extract(self) -> qvector< signed-ea-like-numeric-type > *↗ + | + | find(self, *args) -> 'qvector< qvector< signed-ea-like-numeric-type > >::const_iterator'↗ + | find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator↗ + | + | front = _qvector_front(self) + | # ----------------------------------------------------------------------- + | + | grow(self, *args) -> 'void' + | grow(self, x=qvector< signed-ea-like-numeric-type >())↗ + | + | has(self, *args) -> 'bool' + | has(self, x) -> bool + | + | inject(self, *args) -> 'void' + | inject(self, s, len) + | + | insert(self, *args) -> 'qvector< qvector< signed-ea-like-numeric-type > >::iterator'↗ + | insert(self, it, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator↗ + | + | pop_back(self, *args) -> 'void' + | pop_back(self) + | + | push_back(self, *args) -> 'qvector< signed-ea-like-numeric-type > &'↗ + | push_back(self, x) + | push_back(self) -> qvector< signed-ea-like-numeric-type > &↗ + | + | qclear(self, *args) -> 'void' + | qclear(self) + | + | reserve(self, *args) -> 'void' + | reserve(self, cnt) + | + | resize(self, *args) -> 'void' + | resize(self, _newsize, x) + | resize(self, _newsize) + | + | size(self, *args) -> 'size_t' + | size(self) -> size_t + | + | swap(self, *args) -> 'void' + | swap(self, r) + | + | truncate(self, *args) -> 'void' + | truncate(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 + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | __hash__ = None + +Help on function create_switch_table in module ida_xref: + +create_switch_table(*args) -> 'bool' + create_switch_table(ea, si) -> bool + + + Create switch table from the switch information + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: Boolean + +Help on function create_switch_xrefs in module ida_xref: + +create_switch_xrefs(*args) -> 'bool' + create_switch_xrefs(ea, si) -> bool + + + This function creates xrefs from the indirect jump. + + Usually there is no need to call this function directly because the kernel + will call it for switch tables + + Note: Custom switch information are not supported yet. + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: Boolean + +Help on function del_cref in module ida_xref: + +del_cref(*args) -> 'int' + del_cref(frm, to, expand) -> int + + + Delete a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param expand: policy to delete the referenced instruction 1: plan + to delete the referenced instruction if it has no more + references. 0: don't delete the referenced + instruction even if no more cross-references point to + it (C++: bool) + +Help on function del_dref in module ida_xref: + +del_dref(*args) -> 'void' + del_dref(frm, to) + + + Delete a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + +Help on function delete_switch_table in module ida_xref: + +delete_switch_table(*args) -> 'void' + delete_switch_table(jump_ea, si) + +Help on function get_first_cref_from in module ida_xref: + +get_first_cref_from(*args) -> 'ea_t' + get_first_cref_from(frm) -> ea_t + + + Get first instruction referenced from the specified instruction. If + the specified instruction passes execution to the next instruction + then the next instruction is returned. Otherwise the lowest referenced + address is returned (remember that xrefs are kept sorted!). + + @return: first referenced address. The lastXR variable contains type + of the reference. If the specified instruction doesn't + reference to other instructions then returns BADADDR . + +Help on function get_first_cref_to in module ida_xref: + +get_first_cref_to(*args) -> 'ea_t' + get_first_cref_to(to) -> ea_t + + + Get first instruction referencing to the specified instruction. If the + specified instruction may be executed immediately after its previous + instruction then the previous instruction is returned. Otherwise the + lowest referencing address is returned. (remember that xrefs are kept + sorted!). + + @param to: linear address of referenced instruction (C++: ea_t) + @return: linear address of the first referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_first_dref_from in module ida_xref: + +get_first_dref_from(*args) -> 'ea_t' + get_first_dref_from(frm) -> ea_t + + + Get first data referenced from the specified address. + + @return: linear address of first (lowest) data referenced from the + specified address. The lastXR variable contains type of the + reference. Return BADADDR if the specified instruction/data + doesn't reference to anything. + +Help on function get_first_dref_to in module ida_xref: + +get_first_dref_to(*args) -> 'ea_t' + get_first_dref_to(to) -> ea_t + + + Get address of instruction/data referencing to the specified data. + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_first_fcref_from in module ida_xref: + +get_first_fcref_from(*args) -> 'ea_t' + get_first_fcref_from(frm) -> ea_t + +Help on function get_first_fcref_to in module ida_xref: + +get_first_fcref_to(*args) -> 'ea_t' + get_first_fcref_to(to) -> ea_t + +Help on function get_next_cref_from in module ida_xref: + +get_next_cref_from(*args) -> 'ea_t' + get_next_cref_from(frm, current) -> ea_t + + + Get next instruction referenced from the specified instruction. + + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_from() or + previous call to get_next_cref_from() functions. + (C++: ea_t) + @return: next referenced address or BADADDR . The lastXR variable + contains type of the reference. + +Help on function get_next_cref_to in module ida_xref: + +get_next_cref_to(*args) -> 'ea_t' + get_next_cref_to(to, current) -> ea_t + + + Get next instruction referencing to the specified instruction. + + @param to: linear address of referenced instruction (C++: ea_t) + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_to() or previous + call to get_next_cref_to() functions. (C++: ea_t) + @return: linear address of the next referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_next_dref_from in module ida_xref: + +get_next_dref_from(*args) -> 'ea_t' + get_next_dref_from(frm, current) -> ea_t + + + Get next data referenced from the specified address. + + @param current: linear address of current referenced data. This value + is returned by get_first_dref_from() or previous + call to get_next_dref_from() functions. (C++: ea_t) + @return: linear address of next data or BADADDR . The lastXR + variable contains type of the reference + +Help on function get_next_dref_to in module ida_xref: + +get_next_dref_to(*args) -> 'ea_t' + get_next_dref_to(to, current) -> ea_t + + + Get address of instruction/data referencing to the specified data + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @param current: current linear address. This value is returned by + get_first_dref_to() or previous call to + get_next_dref_to() functions. (C++: ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_next_fcref_from in module ida_xref: + +get_next_fcref_from(*args) -> 'ea_t' + get_next_fcref_from(frm, current) -> ea_t + +Help on function get_next_fcref_to in module ida_xref: + +get_next_fcref_to(*args) -> 'ea_t' + get_next_fcref_to(to, current) -> ea_t + +Help on function has_external_refs in module ida_xref: + +has_external_refs(*args) -> 'bool' + has_external_refs(pfn, ea) -> bool + + + Has a location external to the function references? + + + @param pfn (C++: func_t *) + @param ea (C++: ea_t) + +Help on class xrefblk_t in module ida_xref: + +class xrefblk_t(builtins.object) + | Proxy of C++ xrefblk_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> xrefblk_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_xrefblk_t(...) + | delete_xrefblk_t(self) + | + | first_from(self, *args) -> 'bool' + | first_from(self, _from, flags) -> bool + | + | first_to(self, *args) -> 'bool' + | first_to(self, _to, flags) -> bool + | + | next_from(self, *args) -> 'bool' + | next_from(self) -> bool + | next_from(self, _from, _to, flags) -> bool + | + | next_to(self, *args) -> 'bool' + | next_to(self) -> bool + | next_to(self, _from, _to, flags) -> bool + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | frm + | xrefblk_t_frm_get(self) -> ea_t + | + | iscode + | xrefblk_t_iscode_get(self) -> uchar + | + | thisown + | The membership flag + | + | to + | xrefblk_t_to_get(self) -> ea_t + | + | type + | xrefblk_t_type_get(self) -> uchar + | + | user + | xrefblk_t_user_get(self) -> uchar + +Help on function xrefchar in module ida_xref: + +xrefchar(*args) -> 'char' + xrefchar(xrtype) -> char + + + Get character describing the xref type. + + @param xrtype: combination of Cross-Reference type flags and a + cref_t of dref_t value (C++: char) + +=== ida_xref EPYDOC INJECTIONS === +ida_xref.XREF_ALL +""" +return all references +""" + +ida_xref.XREF_BASE +""" +Reference to the base part of an offset. +""" + +ida_xref.XREF_DATA +""" +return data references only +""" + +ida_xref.XREF_FAR +""" +don't return ordinary flow xrefs +""" + +ida_xref.XREF_MASK +""" +Mask to get xref type. +""" + +ida_xref.XREF_PASTEND +""" +Reference is past item. This bit may be passed to 'add_dref()' +functions but it won't be saved in the database. It will prevent the +destruction of eventual alignment directives. +""" + +ida_xref.XREF_TAIL +""" +Reference to tail byte in extrn symbols. +""" + +ida_xref.XREF_USER +""" +User specified xref. This xref will not be deleted by IDA. This bit +should be combined with the existing xref types ( 'cref_t' & 'dref_t' +) Cannot be used for fl_F xrefs +""" +=== ida_xref EPYDOC INJECTIONS END === +Help on function AddSeg in module idc: + +AddSeg(startea, endea, base, use32, align, comb) + +Help on function AutoMark in module idc: + +AutoMark(ea, qtype) + Plan to analyze an address + +Help on class DeprecatedIDCError in module idc: + +class DeprecatedIDCError(builtins.Exception) + | Exception for deprecated function calls + | + | Method resolution order: + | DeprecatedIDCError + | builtins.Exception + | builtins.BaseException + | builtins.object + | + | Data descriptors defined here: + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Methods inherited from builtins.Exception: + | + | __init__(self, /, *args, **kwargs) + | Initialize self. See help(type(self)) for accurate signature. + | + | __new__(*args, **kwargs) from builtins.type + | Create and return a new object. See help(type) for accurate signature. + | + | ---------------------------------------------------------------------- + | Methods inherited from builtins.BaseException: + | + | __delattr__(self, name, /) + | Implement delattr(self, name). + | + | __getattribute__(self, name, /) + | Return getattr(self, name). + | + | __reduce__(...) + | helper for pickle + | + | __repr__(self, /) + | Return repr(self). + | + | __setattr__(self, name, value, /) + | Implement setattr(self, name, value). + | + | __setstate__(...) + | + | __str__(self, /) + | Return str(self). + | + | with_traceback(...) + | Exception.with_traceback(tb) -- + | set self.__traceback__ to tb and return self. + | + | ---------------------------------------------------------------------- + | Data descriptors inherited from builtins.BaseException: + | + | __cause__ + | exception cause + | + | __context__ + | exception context + | + | __dict__ + | + | __suppress_context__ + | + | __traceback__ + | + | args + +Help on function EVAL_FAILURE in module idc: + +EVAL_FAILURE(code) + Check the result of eval_idc() for evaluation failures + + @param code: result of eval_idc() + + @return: True if there was an evaluation error + +Help on function get_cmt in module ida_bytes: + +get_cmt(*args) -> 'qstring *' + get_cmt(ea, rptble) -> str + + + Get an indented comment. + + @param ea: linear address. may point to tail byte, the function will + find start of the item (C++: ea_t) + @param rptble: get repeatable comment? (C++: bool) + @return: size of comment or -1 + +Help on function GetDisasm in module idc: + +GetDisasm(ea) + Get disassembly line + + @param ea: linear address of instruction + + @return: "" - could not decode instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function GetDouble in module idc: + +GetDouble(ea) + Get value of a floating point number (8 bytes) + This function assumes number stored using IEEE format + and in the same endianness as integers. + + @param ea: linear address + + @return: double + +Help on function GetFloat in module idc: + +GetFloat(ea) + Get value of a floating point number (4 bytes) + This function assumes number stored using IEEE format + and in the same endianness as integers. + + @param ea: linear address + + @return: float + +Help on function GetLocalType in module idc: + +GetLocalType(ordinal, flags) + Retrieve a local type declaration + @param flags: any of PRTYPE_* constants + @return: local type as a C declaration or "" + +Help on function LoadFile in module idc: + +LoadFile(filepath, pos, ea, size) + Load file into IDA database + + @param filepath: path to input file + @param pos: position in the file + @param ea: linear address to load + @param size: number of bytes to load + + @return: 0 - error, 1 - ok + +Help on function MakeVar in module idc: + +MakeVar(ea) + Mark the location as "variable" + + @param ea: address to mark + + @return: None + + @note: All that IDA does is to mark the location as "variable". + Nothing else, no additional analysis is performed. + This function may disappear in the future. + +Help on function SaveFile in module idc: + +SaveFile(filepath, pos, ea, size) + Save from IDA database to file + + @param filepath: path to output file + @param pos: position in the file + @param ea: linear address to save from + @param size: number of bytes to save + + @return: 0 - error, 1 - ok + +Help on function SetPrcsr in module idc: + +SetPrcsr(processor) + +Help on function SetType in module idc: + +SetType(ea, newtype) + Set type of function/variable + + @param ea: the address of the object + @param newtype: the type string in C declaration form. + Must contain the closing ';' + if specified as an empty string, then the + item associated with 'ea' will be deleted. + + @return: 1-ok, 0-failed. + +Help on function SizeOf in module idc: + +SizeOf(typestr) + Returns the size of the type. It is equivalent to IDC's sizeof(). + Use name, tp, fld = idc.parse_decl() ; SizeOf(tp) to retrieve the size + @return: -1 if typestring is not valid otherwise the size of the type + +Help on function _IDC_GetAttr in module idc: + +_IDC_GetAttr(obj, attrmap, attroffs) + Internal function to generically get object attributes + Do not use unless you know what you are doing + +Help on function _IDC_SetAttr in module idc: + +_IDC_SetAttr(obj, attrmap, attroffs, value) + Internal function to generically set object attributes + Do not use unless you know what you are doing + +Help on function __DbgValue in module idc: + +__DbgValue(ea, len) + +Help on function __GetArrayById in module idc: + +__GetArrayById(array_id) + Get an array, by its ID. + + This (internal) wrapper around 'idaaip.netnode(array_id)' + will ensure a certain safety around the retrieval of + arrays (by catching quite unexpect[ed|able] exceptions, + and making sure we don't create & use `transient' netnodes). + + @param array_id: A positive, valid array ID. + +Help on class __dummy_netnode in module idc: + +class __dummy_netnode(builtins.object) + | Implements, in an "always failing" fashion, the + | netnode functions that are necessary for the + | array-related functions. + | + | The sole purpose of this singleton class is to + | serve as a placeholder for netnode-manipulating + | functions, that don't want to each have to perform + | checks on the existence of the netnode. + | (..in other words: it avoids a bunch of if/else's). + | + | See __GetArrayById() for more info. + | + | Methods defined here: + | + | altdel(self, *args) + | + | altfirst(self, *args) + | + | altlast(self, *args) + | + | altnext(self, *args) + | + | altprev(self, *args) + | + | altset(self, *args) + | + | altval(self, *args) + | + | hashdel(self, *args) + | + | hashfirst(self, *args) + | + | hashlast(self, *args) + | + | hashnext(self, *args) + | + | hashprev(self, *args) + | + | hashset(self, *args) + | + | hashset_buf(self, *args) + | + | hashset_idx(self, *args) + | + | hashstr(self, *args) + | + | hashstr_buf(self, *args) + | + | hashval(self, *args) + | + | hashval_long(self, *args) + | + | index(self, *args) + | + | kill(self, *args) + | + | rename(self, *args) + | + | supdel(self, *args) + | + | supfirst(self, *args) + | + | suplast(self, *args) + | + | supnext(self, *args) + | + | supprev(self, *args) + | + | supset(self, *args) + | + | supval(self, *args) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | ---------------------------------------------------------------------- + | Data and other attributes defined here: + | + | instance = + +Help on function __l2m1 in module idc: + +__l2m1(v) + Long to minus 1: If the 'v' appears to be the + 'signed long' version of -1, then return -1. + Otherwise, return 'v'. + +Help on function __warn_once_deprecated_proto_confusion in module idc: + +__warn_once_deprecated_proto_confusion(what, alternative) + +Help on function _get_modules in module idc: + +_get_modules() + INTERNAL: Enumerate process modules + +Help on function add_auto_stkpnt in module idc: + +add_auto_stkpnt(func_ea, ea, delta) + Add automatical SP register change point + @param func_ea: function start + @param ea: linear address where SP changes + usually this is the end of the instruction which + modifies the stack pointer (insn.ea+insn.size) + @param delta: difference between old and new values of SP + @return: 1-ok, 0-failed + +Help on function add_bpt in module ida_dbg: + +add_bpt(*args) -> 'bool' + add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool + add_bpt(bpt) -> bool + + + Add a new breakpoint in the debugged process. \sq{Type, Synchronous + function - available as request, Notification, none (synchronous + function)}Only one breakpoint can exist at a given address. + + @param ea: any address in the process memory space. Depending on the + architecture, hardware breakpoints always be setup at + random address. For example, on x86, hardware breakpoints + should be aligned depending on their size. Moreover, on the + x86 architecture, it is impossible to setup more than 4 + hardware breakpoints. (C++: ea_t) + @param size: size of the breakpoint (irrelevant for software + breakpoints): As for the address, hardware breakpoints + can't always be setup with random size. (C++: asize_t) + @param type: type of the breakpoint ( BPT_SOFT for software + breakpoint) special case BPT_DEFAULT ( BPT_SOFT | + BPT_EXEC ): try to add instruction breakpoint of the + appropriate type as follows: software bpt if supported, + hwbpt otherwise (C++: bpttype_t) + +Help on function add_cref in module ida_xref: + +add_cref(*args) -> 'bool' + add_cref(frm, to, type) -> bool + + + Create a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param type: cross-reference type (C++: cref_t) + @return: success + +Help on function add_default_til in module idc: + +add_default_til(name) + Load a type library + + @param name: name of type library. + @return: 1-ok, 0-failed. + +Help on function add_dref in module ida_xref: + +add_dref(*args) -> 'bool' + add_dref(frm, to, type) -> bool + + + Create a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + @param type: cross-reference type (C++: dref_t) + @return: success (may fail if user-defined xref exists from->to) + +Help on function add_entry in module ida_entry: + +add_entry(*args) -> 'bool' + add_entry(ord, ea, name, makecode, flags=0) -> bool + + + Add an entry point to the list of entry points. + + @param ord: ordinal number if ordinal number is equal to 'ea' then + ordinal is not used (C++: uval_t) + @param ea: linear address (C++: ea_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to the regular + comment. If name == NULL, then the old name will be + retained. (C++: const char *) + @param makecode: should the kernel convert bytes at the entry point to + instruction(s) (C++: bool) + @param flags: See AEF_* (C++: int) + @return: success (currently always true) + +Help on function add_enum in module idc: + +add_enum(idx, name, flag) + Add a new enum type + + @param idx: serial number of the new enum. + If another enum with the same serial number + exists, then all enums with serial + numbers >= the specified idx get their + serial numbers incremented (in other words, + the new enum is put in the middle of the list of enums). + + If idx >= get_enum_qty() or idx == idaapi.BADNODE + then the new enum is created at the end of + the list of enums. + + @param name: name of the enum. + @param flag: flags for representation of numeric constants + in the definition of enum. + + @return: id of new enum or BADADDR + +Help on function add_enum_member in module idc: + +add_enum_member(enum_id, name, value, bmask) + Add a member of enum - a symbolic constant + + @param enum_id: id of enum + @param name: name of symbolic constant. Must be unique in the program. + @param value: value of symbolic constant. + @param bmask: bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + all bits set in value should be set in bmask too + + @return: 0-ok, otherwise error code (one of ENUM_MEMBER_ERROR_*) + +Help on function add_func in module ida_funcs: + +add_func(*args) -> 'bool' + add_func(ea1, ea2=BADADDR) -> bool + + + Add a new function. If the function end address is 'BADADDR' , then + IDA will try to determine the function bounds by calling + find_func_bounds(..., 'FIND_FUNC_DEFINE' ). + + @param ea1: start address (C++: ea_t) + @param ea2: end address (C++: ea_t) + @return: success + +Help on function add_hidden_range in module ida_bytes: + +add_hidden_range(*args) -> 'bool' + add_hidden_range(ea1, ea2, description, header, footer, color) -> bool + + + Mark a range of addresses as hidden. The range will be created in the + invisible state with the default color + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (C++: ea_t) + @param description: range parameters (C++: const char *) + @param header: range parameters (C++: const char *) + @param footer: range parameters (C++: const char *) + @param color (C++: bgcolor_t) + @return: success + +Help on function add_idc_hotkey in module ida_kernwin: + +add_idc_hotkey(*args) -> 'int' + add_idc_hotkey(hotkey, idcfunc) -> int + + + Add hotkey for IDC function ( 'ui_add_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + @param idcfunc: IDC function name (C++: const char *) + @return: IDC hotkey error codes + +Help on function add_segm_ex in module idc: + +add_segm_ex(startea, endea, base, use32, align, comb, flags) + Create a new segment + + @param startea: linear address of the start of the segment + @param endea: linear address of the end of the segment + this address will not belong to the segment + 'endea' should be higher than 'startea' + @param base: base paragraph or selector of the segment. + a paragraph is 16byte memory chunk. + If a selector value is specified, the selector should be + already defined. + @param use32: 0: 16bit segment, 1: 32bit segment, 2: 64bit segment + @param align: segment alignment. see below for alignment values + @param comb: segment combination. see below for combination values. + @param flags: combination of ADDSEG_... bits + + @return: 0-failed, 1-ok + +Help on function add_sourcefile in module ida_lines: + +add_sourcefile(*args) -> 'bool' + add_sourcefile(ea1, ea2, filename) -> bool + + + Mark a range of address as belonging to a source file. An address + range may belong only to one source file. A source file may be + represented by several address ranges. + + @param ea1: linear address of start of the address range (C++: ea_t) + @param ea2: linear address of end of the address range (excluded) + (C++: ea_t) + @param filename: name of source file. (C++: const char *) + @return: success + +Help on function add_struc in module idc: + +add_struc(index, name, is_union) + Define a new structure type + + @param index: index of new structure type + If another structure has the specified index, + then index of that structure and all other + structures will be incremented, freeing the specifed + index. If index is == -1, then the biggest index + number will be used. + See get_first_struc_idx() for the explanation of + structure indices and IDs. + @param name: name of the new structure type. + @param is_union: 0: structure + 1: union + + @return: -1 if can't define structure type because of + bad structure name: the name is ill-formed or is + already used in the program. + otherwise returns ID of the new structure type + +Help on function add_struc_member in module idc: + +add_struc_member(sid, name, offset, flag, typeid, nbytes, target=-1, tdelta=0, reftype=2) + Add structure member + + @param sid: structure type ID + @param name: name of the new member + @param offset: offset of the new member + -1 means to add at the end of the structure + @param flag: type of the new member. Should be one of + FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA + @param typeid: if is_struct(flag) then typeid specifies the structure id for the member + if is_off0(flag) then typeid specifies the offset base. + if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). + if is_stroff(flag) then typeid specifies the structure id + if is_enum(flag) then typeid specifies the enum id + if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) + Otherwise typeid should be -1. + @param nbytes: number of bytes in the new member + + @param target: target address of the offset expr. You may specify it as + -1, ida will calculate it itself + @param tdelta: offset target delta. usually 0 + @param reftype: see REF_... definitions + + @note: The remaining arguments are allowed only if is_off0(flag) and you want + to specify a complex offset expression + + @return: 0 - ok, otherwise error code (one of STRUC_ERROR_*) + +Help on function add_user_stkpnt in module ida_frame: + +add_user_stkpnt(*args) -> 'bool' + add_user_stkpnt(ea, delta) -> bool + + + Add user-defined SP register change point. + + @param ea: linear address where SP changes (C++: ea_t) + @param delta: difference between old and new values of SP (C++: + sval_t) + @return: success + +Help on function append_func_tail in module idc: + +append_func_tail(funcea, ea1, ea2) + Append a function chunk to the function + + @param funcea: any address in the function + @param ea1: start of function tail + @param ea2: end of function tail + @return: 0 if failed, 1 if success + + @note: If a chunk exists at the specified addresses, it must have exactly + the specified boundaries + +Help on function apply_type in module idc: + +apply_type(ea, py_type, flags=1) + Apply the specified type to the address + + @param ea: the address of the object + @param py_type: typeinfo tuple (type, fields) as get_tinfo() returns + or tuple (name, type, fields) as parse_decl() returns + or None + if specified as None, then the + item associated with 'ea' will be deleted. + @param flags: combination of TINFO_... constants or 0 + @return: Boolean + +Help on function ask_seg in module ida_kernwin: + +ask_seg(defval, format) + # ---------------------------------------------------------------------- + +Help on function ask_yn in module ida_kernwin: + +ask_yn(*args) -> 'int' + ask_yn(deflt, format) -> int + + + Display a dialog box and get choice from "Yes", "No", "Cancel". + + @param deflt: default choice: one of Button IDs (C++: int) + @param format: The question in printf() style format (C++: const char + *) + @return: the selected button (one of Button IDs ). Esc key returns + ASKBTN_CANCEL . + +Help on function atoa in module idc: + +atoa(ea) + Convert address value to a string + Return address in the form 'seg000:1234' + (the same as in line prefixes) + + @param ea: address to format + +Help on function atol in module idc: + +atol(s) + +Help on function attach_process in module ida_dbg: + +attach_process(*args) -> 'int' + attach_process(pid=pid_t(-1), event_id=-1) -> int + + + Attach the debugger to a running process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_attach' + }This function shouldn't be called as a request if 'NO_PROCESS' is + used. + + @param pid: PID of the process to attach to. If NO_PROCESS , a dialog + box will interactively ask the user for the process to + attach to. (C++: pid_t) + @param event_id (C++: int) + +Help on function auto_mark_range in module ida_auto: + +auto_mark_range(*args) -> 'void' + auto_mark_range(start, end, type) + + + Put range of addresses into a queue. 'start' may be higher than 'end', + the kernel will swap them in this case. 'end' doesn't belong to the + range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_unmark in module ida_auto: + +auto_unmark(*args) -> 'void' + auto_unmark(start, end, type) + + + Remove range of addresses from a queue. 'start' may be higher than + 'end', the kernel will swap them in this case. 'end' doesn't belong to + the range. + + @param start (C++: ea_t) + @param end (C++: ea_t) + @param type (C++: atype_t) + +Help on function auto_wait in module ida_auto: + +auto_wait(*args) -> 'bool' + auto_wait() -> bool + + + Process everything in the queues and return true. + + @return: false if the user clicked cancel. (the wait box must be + displayed by the caller if desired) + +Help on function batch in module idc: + +batch(batch) + Enable/disable batch mode of operation + + @param batch: batch mode + 0 - ida will display dialog boxes and wait for the user input + 1 - ida will not display dialog boxes, warnings, etc. + + @return: old balue of batch flag + +Help on function byte_value in module idc: + +byte_value(F) + Get byte value from flags + Get value of byte provided that the byte is initialized. + This macro works ok only for 8-bit byte machines. + +Help on function calc_gtn_flags in module ida_name: + +calc_gtn_flags(fromaddr, ea) + Calculate flags for get_ea_name() function + + @param fromaddr: the referring address. May be BADADDR. + @param ea: linear address + + @return: flags + +Help on function call_system in module idc: + +call_system(command) + Execute an OS command. + + @param command: command line to execute + + @return: error code from OS + + @note: + IDA will wait for the started program to finish. + In order to start the command in parallel, use OS methods. + For example, you may start another program in parallel using + "start" command. + +Help on function can_exc_continue in module idc: + +can_exc_continue() + Can it continue after EXCEPTION event? + + @return: boolean + +Help on function check_bpt in module ida_dbg: + +check_bpt(*args) -> 'int' + check_bpt(ea) -> int + + + Check the breakpoint at the specified address. + + @param ea (C++: ea_t) + @return: one of Breakpoint status codes + +Help on function choose_func in module idc: + +choose_func(title) + Ask the user to select a function + + Arguments: + + @param title: title of the dialog box + + @return: -1 - user refused to select a function + otherwise returns the selected function start address + +Help on function clear_trace in module idc: + +clear_trace(filename) + Clear the current trace buffer + +Help on function create_align in module ida_bytes: + +create_align(*args) -> 'bool' + create_align(ea, length, alignment) -> bool + + + Alignment: 0 or 2..32. If it is 0, is will be calculated. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param alignment (C++: int) + +Help on function create_array in module idc: + +create_array(name) + Create array. + + @param name: The array name. + + @return: -1 in case of failure, a valid array_id otherwise. + +Help on function create_byte in module idc: + +create_byte(ea) + Convert the current item to a byte + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_custdata in module ida_bytes: + +create_custdata(*args) -> 'bool' + create_custdata(ea, length, dtid, fid, force=False) -> bool + + + Convert to custom data type. + + + @param ea (C++: ea_t) + @param length (C++: asize_t) + @param dtid (C++: int) + @param fid (C++: int) + @param force (C++: bool) + +Help on function create_data in module ida_bytes: + +create_data(*args) -> 'bool' + create_data(ea, dataflag, size, tid) -> bool + + + Convert to data (byte, word, dword, etc). This function may be used to + create arrays. + + @param ea: linear address (C++: ea_t) + @param dataflag: type of data. Value of function byte_flag() , + word_flag() , etc. (C++: flags_t) + @param size: size of array in bytes. should be divisible by the size + of one item of the specified type. for variable sized + items it can be specified as 0, and the kernel will try + to calculate the size. (C++: asize_t) + @param tid: type id. If the specified type is a structure, then tid is + structure id. Otherwise should be BADNODE . (C++: tid_t) + @return: success + +Help on function create_double in module idc: + +create_double(ea) + Convert the current item to a double floating point (8 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_dword in module idc: + +create_dword(ea) + Convert the current item to a double word (4 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_float in module idc: + +create_float(ea) + Convert the current item to a floating point (4 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_insn in module ida_ua: + +create_insn(*args) -> 'int' + create_insn(ea, out=None) -> int + + + Create an instruction at the specified address. This function checks + if an instruction is present at the specified address and will try to + create one if there is none. It will fail if there is a data item or + other items hindering the creation of the new instruction. This + function will also fill the 'out' structure. + + @param ea: linear address (C++: ea_t) + @param out: the resulting instruction (C++: insn_t *) + @return: the length of the instruction or 0 + +Help on function create_oword in module idc: + +create_oword(ea) + Convert the current item to an octa word (16 bytes/128 bits) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_pack_real in module idc: + +create_pack_real(ea) + Convert the current item to a packed real (10 or 12 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_qword in module idc: + +create_qword(ea) + Convert the current item to a quadro word (8 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_strlit in module idc: + +create_strlit(ea, endea) + Create a string. + + This function creates a string (the string type is determined by the + value of get_inf_attr(INF_STRTYPE)) + + @param ea: linear address + @param endea: ending address of the string (excluded) + if endea == BADADDR, then length of string will be calculated + by the kernel + + @return: 1-ok, 0-failure + + @note: The type of an existing string is returned by get_str_type() + +Help on function create_struct in module idc: + +create_struct(ea, size, strname) + Convert the current item to a structure instance + + @param ea: linear address + @param size: structure size in bytes. -1 means that the size + will be calculated automatically + @param strname: name of a structure type + + @return: 1-ok, 0-failure + +Help on function create_tbyte in module idc: + +create_tbyte(ea) + Convert the current item to a tbyte (10 or 12 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_word in module idc: + +create_word(ea) + Convert the current item to a word (2 bytes) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function create_yword in module idc: + +create_yword(ea) + Convert the current item to a ymm word (32 bytes/256 bits) + + @param ea: linear address + + @return: 1-ok, 0-failure + +Help on function define_exception in module ida_dbg: + +define_exception(*args) -> 'char const *' + define_exception(code, name, desc, flags) -> char const * + + + Convenience function: define new exception code. + + @param code: exception code (cannot be 0) (C++: uint) + @param name: exception name (cannot be empty or NULL) (C++: const char + *) + @param desc: exception description (maybe NULL) (C++: const char *) + @param flags: combination of Exception info flags (C++: int) + @return: failure message or NULL. You must call store_exceptions() + if this function succeeds + +Help on function define_local_var in module idc: + +define_local_var(start, end, location, name) + Create a local variable + + @param start: start of address range for the local variable + @param end: end of address range for the local variable + @param location: the variable location in the "[bp+xx]" form where xx is + a number. The location can also be specified as a + register name. + @param name: name of the local variable + + @return: 1-ok, 0-failure + + @note: For the stack variables the end address is ignored. + If there is no function at 'start' then this function. + will fail. + +Help on function del_array_element in module idc: + +del_array_element(tag, array_id, idx) + Delete an array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of an element. + + @return: 1 in case of success, 0 otherwise. + +Help on function del_bpt in module ida_dbg: + +del_bpt(*args) -> 'bool' + del_bpt(ea) -> bool + del_bpt(bptloc) -> bool + + + Delete an existing breakpoint in the debugged process. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param ea: any address in the breakpoint range (C++: ea_t) + +Help on function del_cref in module ida_xref: + +del_cref(*args) -> 'int' + del_cref(frm, to, expand) -> int + + + Delete a code cross-reference. + + @param to: linear address of referenced instruction (C++: ea_t) + @param expand: policy to delete the referenced instruction 1: plan + to delete the referenced instruction if it has no more + references. 0: don't delete the referenced + instruction even if no more cross-references point to + it (C++: bool) + +Help on function del_dref in module ida_xref: + +del_dref(*args) -> 'void' + del_dref(frm, to) + + + Delete a data cross-reference. + + @param to: linear address of referenced data (C++: ea_t) + +Help on function del_enum in module ida_enum: + +del_enum(*args) -> 'void' + del_enum(id) + + + Delete an enum type. + + + @param id (C++: enum_t) + +Help on function del_enum_member in module idc: + +del_enum_member(enum_id, value, serial, bmask) + Delete a member of enum - a symbolic constant + + @param enum_id: id of enum + @param value: value of symbolic constant. + @param serial: serial number of the constant in the + enumeration. See op_enum() for for details. + @param bmask: bitmask of the constant ordinary enums accept + only ida_enum.DEFMASK as a bitmask + + @return: 1-ok, 0-failed + +Help on function del_extra_cmt in module ida_lines: + +del_extra_cmt(*args) -> 'void' + del_extra_cmt(ea, what) + +Help on function del_fixup in module ida_fixup: + +del_fixup(*args) -> 'void' + del_fixup(source) + + + Delete fixup information. + + + @param source (C++: ea_t) + +Help on function del_func in module ida_funcs: + +del_func(*args) -> 'bool' + del_func(ea) -> bool + + + Delete a function. + + @param ea: any address in the function entry chunk (C++: ea_t) + @return: success + +Help on function del_hash_string in module idc: + +del_hash_string(hash_id, key) + Delete a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element + + @return: 1 upon success, 0 otherwise. + +Help on function del_hidden_range in module ida_bytes: + +del_hidden_range(*args) -> 'bool' + del_hidden_range(ea) -> bool + + + Delete hidden range. + + @param ea: any address in the hidden range (C++: ea_t) + @return: success + +Help on function del_idc_hotkey in module ida_kernwin: + +del_idc_hotkey(*args) -> 'bool' + del_idc_hotkey(hotkey) -> bool + + + Delete IDC function hotkey ( 'ui_del_idckey' ). + + @param hotkey: hotkey name (C++: const char *) + +Help on function del_items in module ida_bytes: + +del_items(*args) -> 'bool' + del_items(ea, flags=0, nbytes=1, may_destroy=None) -> bool + + + Convert item (instruction/data) to unexplored bytes. The whole item + (including the head and tail bytes) will be destroyed. It is allowed + to pass any address in the item to this function + + @param ea: any address within the first item to delete (C++: ea_t) + @param flags: combination of Unexplored byte conversion flags (C++: + int) + @param nbytes: number of bytes in the range to be undefined (C++: + asize_t) + @param may_destroy: optional routine invoked before deleting a head + item. If callback returns false then item has not + to be deleted and operation fails (C++: + may_destroy_cb_t *) + @return: true on sucessful operation, otherwise false + +Help on function del_segm in module ida_segment: + +del_segm(*args) -> 'bool' + del_segm(ea, flags) -> bool + + + Delete a segment. + + @param ea: any address belonging to the segment (C++: ea_t) + @param flags: Segment modification flags (C++: int) + +Help on function del_selector in module ida_segment: + +del_selector(*args) -> 'void' + del_selector(selector) + + + Delete mapping of a selector. Be wary of deleting selectors that are + being used in the program, this can make a mess in the segments. + + @param selector: number of selector to remove from the translation + table (C++: sel_t) + +Help on function del_source_linnum in module ida_nalt: + +del_source_linnum(*args) -> 'void' + del_source_linnum(ea) + +Help on function del_sourcefile in module ida_lines: + +del_sourcefile(*args) -> 'bool' + del_sourcefile(ea) -> bool + + + Delete information about the source file. + + @param ea: linear address (C++: ea_t) + @return: success + +Help on function del_stkpnt in module idc: + +del_stkpnt(func_ea, ea) + Delete SP register change point + + @param func_ea: function start + @param ea: linear address + @return: 1-ok, 0-failed + +Help on function del_struc in module idc: + +del_struc(sid) + Delete a structure type + + @param sid: structure type ID + + @return: 0 if bad structure type ID is passed + 1 otherwise the structure type is deleted. All data + and other structure types referencing to the + deleted structure type will be displayed as array + of bytes. + +Help on function del_struc_member in module idc: + +del_struc_member(sid, member_offset) + Delete structure member + + @param sid: structure type ID + @param member_offset: offset of the member + + @return: != 0 - ok. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + +Help on function delete_all_segments in module idc: + +delete_all_segments() + Delete all segments, instructions, comments, i.e. everything + except values of bytes. + +Help on function delete_array in module idc: + +delete_array(array_id) + Delete array, by its ID. + + @param array_id: The ID of the array to delete. + +Help on function demangle_name in module idc: + +demangle_name(name, disable_mask) + demangle_name a name + + @param name: name to demangle + @param disable_mask: a mask that tells how to demangle the name + it is a good idea to get this mask using + get_inf_attr(INF_SHORT_DN) or get_inf_attr(INF_LONG_DN) + + @return: a demangled name + If the input name cannot be demangled, returns None + +Help on function detach_process in module ida_dbg: + +detach_process(*args) -> 'bool' + detach_process() -> bool + + + Detach the debugger from the debugged process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_detach' } + +Help on function diff_trace_file in module ida_dbg: + +diff_trace_file(*args) -> 'bool' + diff_trace_file(nonnul_filename) -> bool + + + Show difference between the current trace and the one from 'filename'. + +Help on function enable_bpt in module ida_dbg: + +enable_bpt(*args) -> 'bool' + enable_bpt(ea, enable=True) -> bool + enable_bpt(bptloc, enable=True) -> bool + +Help on function enable_tracing in module idc: + +enable_tracing(trace_level, enable) + Enable step tracing + + @param trace_level: what kind of trace to modify + @param enable: 0: turn off, 1: turn on + + @return: success + +Help on function error in module ida_kernwin: + +error(*args) -> 'void' + error(format) + + + Display a fatal message in a message box and quit IDA + + @param format: message to print + +Help on function eval_idc in module idc: + +eval_idc(expr) + Evaluate an IDC expression + + @param expr: an expression + + @return: the expression value. If there are problems, the returned value will be "IDC_FAILURE: xxx" + where xxx is the error description + + @note: Python implementation evaluates IDC only, while IDC can call other registered languages + +Help on function exit_process in module ida_dbg: + +exit_process(*args) -> 'bool' + exit_process() -> bool + + + Terminate the debugging of the current process. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_process_exit' } + +Help on function expand_struc in module idc: + +expand_struc(sid, offset, delta, recalc) + Expand or shrink a structure type + @param id: structure type ID + @param offset: offset in the structure + @param delta: how many bytes to add or remove + @param recalc: recalculate the locations where the structure + type is used + @return: != 0 - ok + +Help on function fclose in module idc: + +fclose(handle) + +Help on function fgetc in module idc: + +fgetc(handle) + +Help on function filelength in module idc: + +filelength(handle) + +Help on function find_binary in module idc: + +find_binary(ea, flag, searchstr, radix=16, from_bc695=False) + +Help on function find_code in module ida_search: + +find_code(*args) -> 'ea_t' + find_code(ea, sflag) -> ea_t + + + Find next code address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_data in module ida_search: + +find_data(*args) -> 'ea_t' + find_data(ea, sflag) -> ea_t + + + Find next data address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_defined in module ida_search: + +find_defined(*args) -> 'ea_t' + find_defined(ea, sflag) -> ea_t + + + Find next ea that is the start of an instruction or data. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_func_end in module idc: + +find_func_end(ea) + Determine a new function boundaries + + @param ea: starting address of a new function + + @return: if a function already exists, then return its end address. + If a function end cannot be determined, the return BADADDR + otherwise return the end address of the new function + +Help on function find_imm in module ida_search: + +find_imm(*args) -> 'int *' + find_imm(newEA, sflag, srchValue) -> ea_t + + + Find next immediate operand with the given value. + + + @param newEA (C++: ea_t) + @param sflag (C++: int) + @param srchValue (C++: uval_t) + +Help on function find_selector in module idc: + +find_selector(val) + Find a selector which has the specifed value + + @param val: value to search for + + @return: the selector number if found, + otherwise the input value (val & 0xFFFF) + + @note: selector values are always in paragraphs + +Help on function find_suspop in module ida_search: + +find_suspop(*args) -> 'int *' + find_suspop(ea, sflag) -> ea_t + + + Find next suspicious operand. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function find_text in module idc: + +find_text(ea, flag, y, x, searchstr, from_bc695=False) + +Help on function find_unknown in module ida_search: + +find_unknown(*args) -> 'ea_t' + find_unknown(ea, sflag) -> ea_t + + + Find next unexplored address. + + + @param ea (C++: ea_t) + @param sflag (C++: int) + +Help on function first_func_chunk in module idc: + +first_func_chunk(funcea) + Get the first function chunk of the specified function + + @param funcea: any address in the function + + @return: the function entry point or BADADDR + + @note: This function returns the first (main) chunk of the specified function + +Help on function fopen in module idc: + +fopen(f, mode) + #---------------------------------------------------------------------------- + # F I L E I / O + #---------------------------------------------------------------------------- + +Help on function force_bl_call in module idc: + +force_bl_call(ea) + Force BL instruction to be a call + + @param ea: address of the BL instruction + + @return: 1-ok, 0-failed + +Help on function force_bl_jump in module idc: + +force_bl_jump(ea) + Some ARM compilers in Thumb mode use BL (branch-and-link) + instead of B (branch) for long jumps, since BL has more range. + By default, IDA tries to determine if BL is a jump or a call. + You can override IDA's decision using commands in Edit/Other menu + (Force BL call/Force BL jump) or the following two functions. + + Force BL instruction to be a jump + + @param ea: address of the BL instruction + + @return: 1-ok, 0-failed + +Help on function form in module idc: + +form(format, *args) + +Help on function fprintf in module idc: + +fprintf(handle, format, *args) + +Help on function fputc in module idc: + +fputc(byte, handle) + +Help on function fseek in module idc: + +fseek(handle, offset, origin) + +Help on function ftell in module idc: + +ftell(handle) + +Help on function func_contains in module idc: + +func_contains(func_ea, ea) + Does the given function contain the given address? + + @param func_ea: any address belonging to the function + @param ea: linear address + + @return: success + +Help on function gen_file in module idc: + +gen_file(filetype, path, ea1, ea2, flags) + Generate an output file + + @param filetype: type of output file. One of OFILE_... symbols. See below. + @param path: the output file path (will be overwritten!) + @param ea1: start address. For some file types this argument is ignored + @param ea2: end address. For some file types this argument is ignored + @param flags: bit combination of GENFLG_... + + @returns: number of the generated lines. + -1 if an error occurred + OFILE_EXE: 0-can't generate exe file, 1-ok + +Help on function gen_flow_graph in module idc: + +gen_flow_graph(outfile, title, ea1, ea2, flags) + Generate a flow chart GDL file + + @param outfile: output file name. GDL extension will be used + @param title: graph title + @param ea1: beginning of the range to flow chart + @param ea2: end of the range to flow chart. + @param flags: combination of CHART_... constants + + @note: If ea2 == BADADDR then ea1 is treated as an address within a function. + That function will be flow charted. + +Help on function gen_simple_call_chart in module idc: + +gen_simple_call_chart(outfile, title, flags) + Generate a function call graph GDL file + + @param outfile: output file name. GDL extension will be used + @param title: graph title + @param flags: combination of CHART_GEN_GDL, CHART_WINGRAPH, CHART_NOLIBFUNCS + +Help on function generate_disasm_line in module idc: + +generate_disasm_line(ea, flags) + Get disassembly line + + @param ea: linear address of instruction + + @param flags: combination of the GENDSM_ flags, or 0 + + @return: "" - could not decode instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function get_array_element in module idc: + +get_array_element(tag, array_id, idx) + Get value of array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of an element. + + @return: Value of the specified array element. Note that + this function may return char or long result. Unexistent + array elements give zero as a result. + +Help on function get_array_id in module idc: + +get_array_id(name) + Get array array_id, by name. + + @param name: The array name. + + @return: -1 in case of failure (i.e., no array with that + name exists), a valid array_id otherwise. + +Help on function get_bmask_cmt in module idc: + +get_bmask_cmt(enum_id, bmask, repeatable) + Get bitmask comment (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param repeatable: type of comment, 0-regular, 1-repeatable + + @return: comment attached to bitmask or None + +Help on function get_bmask_name in module idc: + +get_bmask_name(enum_id, bmask) + Get bitmask name (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + + @return: name of bitmask or None + +Help on function get_marked_pos in module ida_idc: + +get_marked_pos(*args) -> 'ea_t' + get_marked_pos(slot) -> ea_t + +Help on function get_mark_comment in module ida_idc: + +get_mark_comment(*args) -> 'PyObject *' + get_mark_comment(slot) -> PyObject * + +Help on function get_bpt_attr in module idc: + +get_bpt_attr(ea, bptattr) + Get the characteristics of a breakpoint + + @param ea: any address in the breakpoint range + @param bptattr: the desired attribute code, one of BPTATTR_... constants + + @return: the desired attribute value or -1 + +Help on function get_bpt_ea in module idc: + +get_bpt_ea(n) + Get breakpoint address + + @param n: number of breakpoint, is in range 0..get_bpt_qty()-1 + + @return: address of the breakpoint or BADADDR + +Help on function get_bpt_qty in module ida_dbg: + +get_bpt_qty(*args) -> 'int' + get_bpt_qty() -> int + + + Get number of breakpoints. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + +Help on function get_bpt_tev_ea in module ida_dbg: + +get_bpt_tev_ea(*args) -> 'ea_t' + get_bpt_tev_ea(n) -> ea_t + + + Get the address associated to a read, read/write or execution trace + event. \sq{Type, Synchronous function, Notification, none (synchronous + function)}Usually, a breakpoint is associated with a read, read/write + or execution trace event. However, the returned address could be any + address in the range of this breakpoint. If the breakpoint was deleted + after the trace event, the address no longer corresponds to a valid + breakpoint. + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a read, read/write or execution trace event. + +Help on function get_bytes in module idc: + +get_bytes(ea, size, use_dbg=False) + Return the specified number of bytes of the program + + @param ea: linear address + + @param size: size of buffer in normal 8-bit bytes + + @param use_dbg: if True, use debugger memory, otherwise just the database + + @return: None on failure + otherwise a string containing the read bytes + +Help on function get_call_tev_callee in module ida_dbg: + +get_call_tev_callee(*args) -> 'ea_t' + get_call_tev_callee(n) -> ea_t + + + Get the called function from a function call trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function call event. + +Help on function get_color in module idc: + +get_color(ea, what) + Get item color + + @param ea: address of the item + @param what: type of the item (one of CIC_* constants) + + @return: color code in RGB (hex 0xBBGGRR) + +Help on function get_curline in module idc: + +get_curline() + Get the disassembly line at the cursor + + @return: string + +Help on function get_current_thread in module ida_dbg: + +get_current_thread(*args) -> 'thid_t' + get_current_thread() -> thid_t + + + Get current thread ID. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_db_byte in module ida_bytes: + +get_db_byte(*args) -> 'uchar' + get_db_byte(ea) -> uchar + + + Get one byte (8-bit) of the program at 'ea' from the database. Works + even if the debugger is active. See also 'get_dbg_byte()' to read the + process memory directly. This function works only for 8bit byte + processors. + + @param ea (C++: ea_t) + +Help on function get_debugger_event_cond in module ida_dbg: + +get_debugger_event_cond(*args) -> 'char const *' + get_debugger_event_cond() -> char const * + +Help on function get_entry in module ida_entry: + +get_entry(*args) -> 'ea_t' + get_entry(ord) -> ea_t + + + Get entry point address by its ordinal + + @param ord: ordinal number of entry point (C++: uval_t) + @return: address or BADADDR + +Help on function get_entry_name in module ida_entry: + +get_entry_name(*args) -> 'qstring *' + get_entry_name(ord) -> str + + + Get name of the entry point by its ordinal. + + @param ord: ordinal number of entry point (C++: uval_t) + @return: size of entry name or -1 + +Help on function get_entry_ordinal in module ida_entry: + +get_entry_ordinal(*args) -> 'uval_t' + get_entry_ordinal(idx) -> uval_t + + + Get ordinal number of an entry point. + + @param idx: internal number of entry point. Should be in the range 0.. + get_entry_qty() -1 (C++: size_t) + @return: ordinal number or 0. + +Help on function get_entry_qty in module ida_entry: + +get_entry_qty(*args) -> 'size_t' + get_entry_qty() -> size_t + + + Get number of entry points. + +Help on function get_enum in module ida_enum: + +get_enum(*args) -> 'enum_t' + get_enum(name) -> enum_t + + + Get enum by name. + + + @param name (C++: const char *) + +Help on function get_enum_cmt in module ida_enum: + +get_enum_cmt(*args) -> 'qstring *' + get_enum_cmt(id, repeatable) -> str + + + Get enum comment. + + + @param id (C++: enum_t) + @param repeatable (C++: bool) + +Help on function get_enum_flag in module ida_enum: + +get_enum_flag(*args) -> 'flags_t' + get_enum_flag(id) -> flags_t + + + Get flags determining the representation of the enum. (currently they + define the numeric base: octal, decimal, hex, bin) and signness. + + @param id (C++: enum_t) + +Help on function get_enum_idx in module ida_enum: + +get_enum_idx(*args) -> 'uval_t' + get_enum_idx(id) -> uval_t + + + Get serial number of enum. The serial number determines the place of + the enum in the enum window. + + @param id (C++: enum_t) + +Help on function get_enum_member in module idc: + +get_enum_member(enum_id, value, serial, bmask) + Get id of constant + + @param enum_id: id of enum + @param value: value of constant + @param serial: serial number of the constant in the + enumeration. See op_enum() for details. + @param bmask: bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + + @return: id of constant or -1 if error + +Help on function get_enum_member_bmask in module ida_enum: + +get_enum_member_bmask(*args) -> 'bmask_t' + get_enum_member_bmask(id) -> bmask_t + + + Get bitmask of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_by_name in module ida_enum: + +get_enum_member_by_name(*args) -> 'const_t' + get_enum_member_by_name(name) -> const_t + + + Get a reference to an enum member by its name. + + + @param name (C++: const char *) + +Help on function get_enum_member_cmt in module idc: + +get_enum_member_cmt(const_id, repeatable) + Get comment of a constant + + @param const_id: id of const + @param repeatable: 0:get regular comment, 1:get repeatable comment + + @return: comment string + +Help on function get_enum_member_enum in module ida_enum: + +get_enum_member_enum(*args) -> 'enum_t' + get_enum_member_enum(id) -> enum_t + + + Get the parent enum of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_member_name in module idc: + +get_enum_member_name(const_id) + Get name of a constant + + @param const_id: id of const + + Returns: name of constant + +Help on function get_enum_member_value in module ida_enum: + +get_enum_member_value(*args) -> 'uval_t' + get_enum_member_value(id) -> uval_t + + + Get value of an enum member. + + + @param id (C++: const_t) + +Help on function get_enum_name in module ida_enum: + +get_enum_name(*args) -> 'qstring *' + get_enum_name(id) -> str + + + Get name of enum. + + + @param id (C++: enum_t) + +Help on function get_enum_qty in module ida_enum: + +get_enum_qty(*args) -> 'size_t' + get_enum_qty() -> size_t + + + Get number of declared 'enum_t' types. + +Help on function get_enum_size in module ida_enum: + +get_enum_size(*args) -> 'size_t' + get_enum_size(id) -> size_t + + + Get the number of the members of the enum. + + + @param id (C++: enum_t) + +Help on function get_enum_width in module ida_enum: + +get_enum_width(*args) -> 'size_t' + get_enum_width(id) -> size_t + + + Get the width of a enum element allowed values: 0 + (unspecified),1,2,4,8,16,32,64 + + @param id (C++: enum_t) + +Help on function get_event_bpt_hea in module idc: + +get_event_bpt_hea() + Get hardware address for BREAKPOINT event + + @return: hardware address + +Help on function get_event_ea in module idc: + +get_event_ea() + Get ea for debug event + + @return: ea + +Help on function get_event_exc_code in module idc: + +get_event_exc_code() + Get exception code for EXCEPTION event + + @return: exception code + +Help on function get_event_exc_ea in module idc: + +get_event_exc_ea() + Get address for EXCEPTION event + + @return: adress of exception + +Help on function get_event_exc_info in module idc: + +get_event_exc_info() + Get info for EXCEPTION event + + @return: info string + +Help on function get_event_exit_code in module idc: + +get_event_exit_code() + Get exit code for debug event + + @return: exit code for PROCESS_EXITED, THREAD_EXITED events + +Help on function get_event_id in module idc: + +get_event_id() + Get ID of debug event + + @return: event ID + +Help on function get_event_info in module idc: + +get_event_info() + Get debug event info + + @return: event info: for THREAD_STARTED (thread name) + for LIB_UNLOADED (unloaded library name) + for INFORMATION (message to display) + +Help on function get_event_module_base in module idc: + +get_event_module_base() + Get module base for debug event + + @return: module base + +Help on function get_event_module_name in module idc: + +get_event_module_name() + Get module name for debug event + + @return: module name + +Help on function get_event_module_size in module idc: + +get_event_module_size() + Get module size for debug event + + @return: module size + +Help on function get_event_pid in module idc: + +get_event_pid() + Get process ID for debug event + + @return: process ID + +Help on function get_event_tid in module idc: + +get_event_tid() + Get type ID for debug event + + @return: type ID + +Help on function get_extra_cmt in module ida_lines: + +get_extra_cmt(*args) -> 'int' + get_extra_cmt(ea, what) -> ssize_t + +Help on function get_fchunk_attr in module idc: + +get_fchunk_attr(ea, attr) + Get a function chunk attribute + + @param ea: any address in the chunk + @param attr: one of: FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER, FUNCATTR_REFQTY + + @return: desired attribute or -1 + +Help on function get_fchunk_referer in module ida_funcs: + +get_fchunk_referer(*args) -> 'ea_t' + get_fchunk_referer(ea, idx) -> ea_t + +Help on function get_first_bmask in module ida_enum: + +get_first_bmask(*args) -> 'bmask_t' + get_first_bmask(id) -> bmask_t + + + Get first bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the smallest bitmask for enum, or DEFMASK + +Help on function get_first_cref_from in module ida_xref: + +get_first_cref_from(*args) -> 'ea_t' + get_first_cref_from(frm) -> ea_t + + + Get first instruction referenced from the specified instruction. If + the specified instruction passes execution to the next instruction + then the next instruction is returned. Otherwise the lowest referenced + address is returned (remember that xrefs are kept sorted!). + + @return: first referenced address. The lastXR variable contains type + of the reference. If the specified instruction doesn't + reference to other instructions then returns BADADDR . + +Help on function get_first_cref_to in module ida_xref: + +get_first_cref_to(*args) -> 'ea_t' + get_first_cref_to(to) -> ea_t + + + Get first instruction referencing to the specified instruction. If the + specified instruction may be executed immediately after its previous + instruction then the previous instruction is returned. Otherwise the + lowest referencing address is returned. (remember that xrefs are kept + sorted!). + + @param to: linear address of referenced instruction (C++: ea_t) + @return: linear address of the first referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_first_dref_from in module ida_xref: + +get_first_dref_from(*args) -> 'ea_t' + get_first_dref_from(frm) -> ea_t + + + Get first data referenced from the specified address. + + @return: linear address of first (lowest) data referenced from the + specified address. The lastXR variable contains type of the + reference. Return BADADDR if the specified instruction/data + doesn't reference to anything. + +Help on function get_first_dref_to in module ida_xref: + +get_first_dref_to(*args) -> 'ea_t' + get_first_dref_to(to) -> ea_t + + + Get address of instruction/data referencing to the specified data. + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_first_enum_member in module idc: + +get_first_enum_member(enum_id, bmask) + Get first constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) + + @return: value of constant or idaapi.BADNODE no constants are defined + All constants are sorted by their values as unsigned longs. + +Help on function get_first_fcref_from in module ida_xref: + +get_first_fcref_from(*args) -> 'ea_t' + get_first_fcref_from(frm) -> ea_t + +Help on function get_first_fcref_to in module ida_xref: + +get_first_fcref_to(*args) -> 'ea_t' + get_first_fcref_to(to) -> ea_t + +Help on function get_first_hash_key in module idc: + +get_first_hash_key(hash_id) + Get the first key in the hash. + + @param hash_id: The hash ID. + + @return: the key, 0 otherwise. + +Help on function get_first_index in module idc: + +get_first_index(tag, array_id) + Get index of the first existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + + @return: -1 if the array is empty, otherwise index of first array + element of given type. + +Help on function get_first_member in module idc: + +get_first_member(sid) + Get offset of the first member of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if structure has no members, + otherwise returns offset of the first member. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_first_module in module idc: + +get_first_module() + Enumerate process modules + + @return: first module's base address or None on failure + +Help on function get_first_seg in module idc: + +get_first_seg() + Get first segment + + @return: address of the start of the first segment + BADADDR - no segments are defined + +Help on function get_first_struc_idx in module ida_struct: + +get_first_struc_idx(*args) -> 'uval_t' + get_first_struc_idx() -> uval_t + + + Get index of first structure. + + @return: BADADDR if no known structures, 0 otherwise + +Help on function get_fixup_target_dis in module idc: + +get_fixup_target_dis(ea) + Get fixup target displacement + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup target displacement + +Help on function get_fixup_target_flags in module idc: + +get_fixup_target_flags(ea) + Get fixup target flags + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup target flags + +Help on function get_fixup_target_off in module idc: + +get_fixup_target_off(ea) + Get fixup target offset + + @param ea: address to get information about + + @return: BADADDR - no fixup at the specified address + otherwise returns fixup target offset + +Help on function get_fixup_target_sel in module idc: + +get_fixup_target_sel(ea) + Get fixup target selector + + @param ea: address to get information about + + @return: BADSEL - no fixup at the specified address + otherwise returns fixup target selector + +Help on function get_fixup_target_type in module idc: + +get_fixup_target_type(ea) + Get fixup target type + + @param ea: address to get information about + + @return: 0 - no fixup at the specified address + otherwise returns fixup type + +Help on function get_forced_operand in module ida_bytes: + +get_forced_operand(*args) -> 'qstring *' + get_forced_operand(ea, n) -> str + + + Get forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @return: size of forced operand or -1 + +Help on function get_frame_args_size in module idc: + +get_frame_args_size(ea) + Get size of arguments in function frame which are purged upon return + + @param ea: any address belonging to the function + + @return: Size of function arguments in bytes. + If the function doesn't have a frame, return 0 + If the function does't exist, return -1 + +Help on function get_frame_id in module idc: + +get_frame_id(ea) + Get ID of function frame structure + + @param ea: any address belonging to the function + + @return: ID of function frame or None In order to access stack variables + you need to use structure member manipulaion functions with the + obtained ID. + +Help on function get_frame_lvar_size in module idc: + +get_frame_lvar_size(ea) + Get size of local variables in function frame + + @param ea: any address belonging to the function + + @return: Size of local variables in bytes. + If the function doesn't have a frame, return 0 + If the function does't exist, return None + +Help on function get_frame_regs_size in module idc: + +get_frame_regs_size(ea) + Get size of saved registers in function frame + + @param ea: any address belonging to the function + + @return: Size of saved registers in bytes. + If the function doesn't have a frame, return 0 + This value is used as offset for BP (if FUNC_FRAME is set) + If the function does't exist, return None + +Help on function get_frame_size in module idc: + +get_frame_size(ea) + Get full size of function frame + + @param ea: any address belonging to the function + @returns: Size of function frame in bytes. + This function takes into account size of local + variables + size of saved registers + size of + return address + size of function arguments + If the function doesn't have a frame, return size of + function return address in the stack. + If the function does't exist, return 0 + +Help on function get_full_flags in module ida_bytes: + +get_full_flags(*args) -> 'flags_t' + get_full_flags(ea) -> flags_t + + + Get flags value for address 'ea'. + + @param ea (C++: ea_t) + @return: 0 if address is not present in the program + +Help on function get_func_attr in module idc: + +get_func_attr(ea, attr) + Get a function attribute + + @param ea: any address belonging to the function + @param attr: one of FUNCATTR_... constants + + @return: BADADDR - error otherwise returns the attribute value + +Help on function get_func_cmt in module idc: + +get_func_cmt(ea, repeatable) + Retrieve function comment + + @param ea: any address belonging to the function + @param repeatable: 1: get repeatable comment + 0: get regular comment + + @return: function comment string + +Help on function get_func_flags in module idc: + +get_func_flags(ea) + Retrieve function flags + + @param ea: any address belonging to the function + + @return: -1 - function doesn't exist otherwise returns the flags + +Help on function get_func_name in module idc: + +get_func_name(ea) + Retrieve function name + + @param ea: any address belonging to the function + + @return: null string - function doesn't exist + otherwise returns function name + +Help on function get_func_off_str in module idc: + +get_func_off_str(ea) + Convert address to 'funcname+offset' string + + @param ea: address to convert + + @return: if the address belongs to a function then return a string + formed as 'name+offset' where 'name' is a function name + 'offset' is offset within the function else return null string + +Help on function get_hash_long in module idc: + +get_hash_long(hash_id, key) + Gets the long value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + + @return: the 32bit or 64bit value of the element, or 0 if no such + element. + +Help on function get_hash_string in module idc: + +get_hash_string(hash_id, key) + Gets the string value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + + @return: the string value of the element, or None if no such + element. + +Help on function get_idb_path in module idc: + +get_idb_path() + Get IDB full path + + This function returns full path of the current IDB database + +Help on function get_inf_attr in module idc: + +get_inf_attr(attr) + +Help on function get_input_file_path in module ida_nalt: + +get_input_file_path(*args) -> 'size_t' + get_input_file_path() -> str + + + Get full path of the input file. + +Help on function get_item_end in module ida_bytes: + +get_item_end(*args) -> 'ea_t' + get_item_end(ea) -> ea_t + + + Get the end address of the item at 'ea'. The returned address doesn't + belong to the current item. Unexplored bytes are counted as 1 byte + entities. + + @param ea (C++: ea_t) + +Help on function get_item_head in module ida_bytes: + +get_item_head(*args) -> 'ea_t' + get_item_head(ea) -> ea_t + + + Get the start address of the item at 'ea'. If there is no current + item, then 'ea' will be returned (see definition at the end of + 'bytes.hpp' source) + + @param ea (C++: ea_t) + +Help on function get_item_size in module idc: + +get_item_size(ea) + Get size of instruction or data item in bytes + + @param ea: linear address + + @return: 1..n + +Help on function get_last_bmask in module ida_enum: + +get_last_bmask(*args) -> 'bmask_t' + get_last_bmask(id) -> bmask_t + + + Get last bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @return: the biggest bitmask for enum, or DEFMASK + +Help on function get_last_enum_member in module idc: + +get_last_enum_member(enum_id, bmask) + Get last constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant (ordinary enums accept only ida_enum.DEFMASK as a bitmask) + + @return: value of constant or idaapi.BADNODE no constants are defined + All constants are sorted by their values + as unsigned longs. + +Help on function get_last_hash_key in module idc: + +get_last_hash_key(hash_id) + Get the last key in the hash. + + @param hash_id: The hash ID. + + @return: the key, 0 otherwise. + +Help on function get_last_index in module idc: + +get_last_index(tag, array_id) + Get index of last existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + + @return: -1 if the array is empty, otherwise index of first array + element of given type. + +Help on function get_last_member in module idc: + +get_last_member(sid) + Get offset of the last member of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if structure has no members, + otherwise returns offset of the last member. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_last_struc_idx in module ida_struct: + +get_last_struc_idx(*args) -> 'uval_t' + get_last_struc_idx() -> uval_t + + + Get index of last structure. + + @return: BADADDR if no known structures, get_struc_qty() -1 + otherwise + +Help on function get_local_tinfo in module idc: + +get_local_tinfo(ordinal) + Get local type information as 'typeinfo' object + + @param ordinal: slot number (1...NumberOfLocalTypes) + @return: None on failure, or (type, fields) tuple. + +Help on function get_manual_insn in module ida_bytes: + +get_manual_insn(*args) -> 'qstring *' + get_manual_insn(ea) -> str + + + Retrieve the user-specified string for the manual instruction. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @return: size of manual instruction or -1 + +Help on function get_member_cmt in module idc: + +get_member_cmt(sid, member_offset, repeatable) + Get comment of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + @param repeatable: 1: get repeatable comment + 0: get regular comment + + @return: None if bad structure type ID is passed + or no such member in the structure + otherwise returns comment of the specified member. + +Help on function get_member_flag in module idc: + +get_member_flag(sid, member_offset) + Get type of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns type of the member, see bit + definitions above. If the member type is a structure + then function GetMemberStrid() should be used to + get the structure type id. + +Help on function get_member_id in module idc: + +get_member_id(sid, member_offset) + @param sid: structure type ID + @param member_offset:. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: -1 if bad structure type ID is passed or there is + no member at the specified offset. + otherwise returns the member id. + +Help on function get_member_name in module idc: + +get_member_name(sid, member_offset) + Get name of a member of a structure + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: None if bad structure type ID is passed + or no such member in the structure + otherwise returns name of the specified member. + +Help on function get_member_offset in module idc: + +get_member_offset(sid, member_name) + Get offset of a member of a structure by the member name + + @param sid: structure type ID + @param member_name: name of structure member + + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns offset of the specified member. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_member_qty in module idc: + +get_member_qty(sid) + Get number of members of a structure + + @param sid: structure type ID + + @return: -1 if bad structure type ID is passed otherwise + returns number of members. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_member_size in module idc: + +get_member_size(sid, member_offset) + Get size of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + + @return: None if bad structure type ID is passed, + or no such member in the structure + otherwise returns size of the specified + member in bytes. + +Help on function get_member_strid in module idc: + +get_member_strid(sid, member_offset) + Get structure id of a member + + @param sid: structure type ID + @param member_offset: member offset. The offset can be + any offset in the member. For example, + is a member is 4 bytes long and starts + at offset 2, then 2,3,4,5 denote + the same structure member. + @return: -1 if bad structure type ID is passed + or no such member in the structure + otherwise returns structure id of the member. + If the current member is not a structure, returns -1. + +Help on function get_min_spd_ea in module idc: + +get_min_spd_ea(func_ea) + Return the address with the minimal spd (stack pointer delta) + If there are no SP change points, then return BADADDR. + + @param func_ea: function start + @return: BADDADDR - no such function + +Help on function get_module_name in module idc: + +get_module_name(base) + Get process module name + + @param base: the base address of the module + + @return: required info or None + +Help on function get_module_size in module idc: + +get_module_size(base) + Get process module size + + @param base: the base address of the module + + @return: required info or -1 + +Help on function get_name in module idc: + +get_name(ea, gtn_flags=0) + Get name at the specified address + + @param ea: linear address + @param gtn_flags: how exactly the name should be retrieved. + combination of GN_ bits + + @return: "" - byte has no name + +Help on function get_name_ea in module ida_name: + +get_name_ea(*args) -> 'ea_t' + get_name_ea(_from, name) -> ea_t + + + Get address of the name. Dummy names (like byte_xxxx where xxxx are + hex digits) are parsed by this function to obtain the address. The + database is not consulted for them. This function works only with + regular names. + + @param _from: linear address where the name is used. if not + applicable, then should be BADADDR . (C++: ea_t) + @param name: any name in the program or NULL (C++: const char *) + @return: address of the name or BADADDR + +Help on function get_name_ea_simple in module idc: + +get_name_ea_simple(name) + Get linear address of a name + + @param name: name of program byte + + @return: address of the name + BADADDR - No such name + +Help on function get_next_bmask in module ida_enum: + +get_next_bmask(*args) -> 'bmask_t' + get_next_bmask(id, bmask) -> bmask_t + + + Get next bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value higher than the specified + value, or DEFMASK + +Help on function get_next_cref_from in module ida_xref: + +get_next_cref_from(*args) -> 'ea_t' + get_next_cref_from(frm, current) -> ea_t + + + Get next instruction referenced from the specified instruction. + + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_from() or + previous call to get_next_cref_from() functions. + (C++: ea_t) + @return: next referenced address or BADADDR . The lastXR variable + contains type of the reference. + +Help on function get_next_cref_to in module ida_xref: + +get_next_cref_to(*args) -> 'ea_t' + get_next_cref_to(to, current) -> ea_t + + + Get next instruction referencing to the specified instruction. + + @param to: linear address of referenced instruction (C++: ea_t) + @param current: linear address of current referenced instruction This + value is returned by get_first_cref_to() or previous + call to get_next_cref_to() functions. (C++: ea_t) + @return: linear address of the next referencing instruction or + BADADDR . The lastXR variable contains type of the + reference. + +Help on function get_next_dref_from in module ida_xref: + +get_next_dref_from(*args) -> 'ea_t' + get_next_dref_from(frm, current) -> ea_t + + + Get next data referenced from the specified address. + + @param current: linear address of current referenced data. This value + is returned by get_first_dref_from() or previous + call to get_next_dref_from() functions. (C++: ea_t) + @return: linear address of next data or BADADDR . The lastXR + variable contains type of the reference + +Help on function get_next_dref_to in module ida_xref: + +get_next_dref_to(*args) -> 'ea_t' + get_next_dref_to(to, current) -> ea_t + + + Get address of instruction/data referencing to the specified data + + @param to: linear address of referencing instruction or data (C++: + ea_t) + @param current: current linear address. This value is returned by + get_first_dref_to() or previous call to + get_next_dref_to() functions. (C++: ea_t) + @return: BADADDR if nobody refers to the specified data. The lastXR + variable contains type of the reference. + +Help on function get_next_enum_member in module idc: + +get_next_enum_member(enum_id, value, bmask) + Get next constant in the enum + + @param enum_id: id of enum + @param bmask: bitmask of the constant ordinary enums accept only ida_enum.DEFMASK as a bitmask + @param value: value of the current constant + + @return: value of a constant with value higher than the specified + value. idaapi.BADNODE no such constants exist. + All constants are sorted by their values as unsigned longs. + +Help on function get_next_fchunk in module idc: + +get_next_fchunk(ea) + Get next function chunk + + @param ea: any address + + @return: the starting address of the next function chunk or BADADDR + + @note: This function enumerates all chunks of all functions in the database + +Help on function get_next_fcref_from in module ida_xref: + +get_next_fcref_from(*args) -> 'ea_t' + get_next_fcref_from(frm, current) -> ea_t + +Help on function get_next_fcref_to in module ida_xref: + +get_next_fcref_to(*args) -> 'ea_t' + get_next_fcref_to(to, current) -> ea_t + +Help on function get_next_fixup_ea in module ida_fixup: + +get_next_fixup_ea(*args) -> 'ea_t' + get_next_fixup_ea(ea) -> ea_t + + + Find next address with fixup information + + @param ea: current address (C++: ea_t) + @return: the next address with fixup information, or BADADDR + +Help on function get_next_func in module idc: + +get_next_func(ea) + Find next function + + @param ea: any address belonging to the function + + @return: BADADDR - no more functions + otherwise returns the next function start address + +Help on function get_next_hash_key in module idc: + +get_next_hash_key(hash_id, key) + Get the next key in the hash. + + @param hash_id: The hash ID. + @param key: The current key. + + @return: the next key, 0 otherwise + +Help on function get_next_index in module idc: + +get_next_index(tag, array_id, idx) + Get index of the next existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of the current element. + + @return: -1 if no more elements, otherwise returns index of the + next array element of given type. + +Help on function get_next_module in module idc: + +get_next_module(base) + Enumerate process modules + + @param base: previous module's base address + + @return: next module's base address or None on failure + +Help on function get_next_offset in module idc: + +get_next_offset(sid, offset) + Get next offset in a structure + + @param sid: structure type ID + @param offset: current offset + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if no (more) offsets in the structure, + otherwise returns next offset in a structure. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + This function returns a member offset or a hole offset. + It will return size of the structure if input + 'offset' belongs to the last member of the structure. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_next_seg in module idc: + +get_next_seg(ea) + Get next segment + + @param ea: linear address + + @return: start of the next segment + BADADDR - no next segment + +Help on function get_next_struc_idx in module ida_struct: + +get_next_struc_idx(*args) -> 'uval_t' + get_next_struc_idx(idx) -> uval_t + + + Get next struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is out of bounds, otherwise idx++ + +Help on function get_numbered_type_name in module idc: + +get_numbered_type_name(ordinal) + Retrieve a local type name + + @param ordinal: slot number (1...NumberOfLocalTypes) + + returns: local type name or None + +Help on function get_operand_type in module idc: + +get_operand_type(ea, n) + Get type of instruction operand + + @param ea: linear address of instruction + @param n: number of operand: + 0 - the first operand + 1 - the second operand + + @return: any of o_* constants or -1 on error + +Help on function get_operand_value in module idc: + +get_operand_value(ea, n) + Get number used in the operand + + This function returns an immediate number used in the operand + + @param ea: linear address of instruction + @param n: the operand number + + @return: value + operand is an immediate value => immediate value + operand has a displacement => displacement + operand is a direct memory ref => memory address + operand is a register => register number + operand is a register phrase => phrase number + otherwise => -1 + +Help on function get_ordinal_qty in module idc: + +get_ordinal_qty() + Get number of local types + 1 + + @return: value >= 1. 1 means that there are no local types. + +Help on function get_original_byte in module ida_bytes: + +get_original_byte(*args) -> 'uint64' + get_original_byte(ea) -> uint64 + + + Get original byte value (that was before patching). This function + works for wide byte processors too. + + @param ea (C++: ea_t) + +Help on function get_prev_bmask in module ida_enum: + +get_prev_bmask(*args) -> 'bmask_t' + get_prev_bmask(id, bmask) -> bmask_t + + + Get prev bitmask in the enum (bitfield) + + @param id (C++: enum_t) + @param bmask (C++: bmask_t) + @return: value of a bitmask with value lower than the specified value, + or DEFMASK + +Help on function get_prev_enum_member in module idc: + +get_prev_enum_member(enum_id, value, bmask) + Get prev constant in the enum + + @param enum_id: id of enum + @param bmask : bitmask of the constant + ordinary enums accept only ida_enum.DEFMASK as a bitmask + @param value: value of the current constant + + @return: value of a constant with value lower than the specified + value. idaapi.BADNODE no such constants exist. + All constants are sorted by their values as unsigned longs. + +Help on function get_prev_fchunk in module idc: + +get_prev_fchunk(ea) + Get previous function chunk + + @param ea: any address + + @return: the starting address of the function chunk or BADADDR + + @note: This function enumerates all chunks of all functions in the database + +Help on function get_prev_fixup_ea in module ida_fixup: + +get_prev_fixup_ea(*args) -> 'ea_t' + get_prev_fixup_ea(ea) -> ea_t + + + Find previous address with fixup information + + @param ea: current address (C++: ea_t) + @return: the previous address with fixup information, or BADADDR + +Help on function get_prev_func in module idc: + +get_prev_func(ea) + Find previous function + + @param ea: any address belonging to the function + + @return: BADADDR - no more functions + otherwise returns the previous function start address + +Help on function get_prev_hash_key in module idc: + +get_prev_hash_key(hash_id, key) + Get the previous key in the hash. + + @param hash_id: The hash ID. + @param key: The current key. + + @return: the previous key, 0 otherwise + +Help on function get_prev_index in module idc: + +get_prev_index(tag, array_id, idx) + Get index of the previous existing array element. + + @param tag: Tag of array, specifies one of two array types: AR_LONG, AR_STR + @param array_id: The array ID. + @param idx: Index of the current element. + + @return: -1 if no more elements, otherwise returns index of the + previous array element of given type. + +Help on function get_prev_offset in module idc: + +get_prev_offset(sid, offset) + Get previous offset in a structure + + @param sid: structure type ID + @param offset: current offset + + @return: -1 if bad structure type ID is passed, + ida_idaapi.BADADDR if no (more) offsets in the structure, + otherwise returns previous offset in a structure. + + @note: IDA allows 'holes' between members of a + structure. It treats these 'holes' + as unnamed arrays of bytes. + This function returns a member offset or a hole offset. + It will return size of the structure if input + 'offset' is bigger than the structure size. + + @note: Union members are, in IDA's internals, located + at subsequent byte offsets: member 0 -> offset 0x0, + member 1 -> offset 0x1, etc... + +Help on function get_prev_struc_idx in module ida_struct: + +get_prev_struc_idx(*args) -> 'uval_t' + get_prev_struc_idx(idx) -> uval_t + + + Get previous struct index. + + @param idx (C++: uval_t) + @return: BADADDR if resulting index is negative, otherwise idx - 1 + +Help on function get_process_state in module ida_dbg: + +get_process_state(*args) -> 'int' + get_process_state() -> int + + + Return the state of the currently debugged process. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @return: one of Debugged process states + +Help on function get_processes in module ida_dbg: + +get_processes(*args) -> 'ssize_t' + get_processes(proclist) -> ssize_t + + + Take a snapshot of running processes and return their description. + \sq{Type, Synchronous function, Notification, none (synchronous + function)} + + @param proclist (C++: procinfo_vec_t *) + @return: number of processes or -1 on error + +Help on function get_qword in module ida_bytes: + +get_qword(*args) -> 'uint64' + get_qword(ea) -> uint64 + + + Get one qword (64-bit) of the program at 'ea'. This function takes + into account order of bytes specified in \inf{is_be()} This function + works only for 8bit byte processors. + + @param ea (C++: ea_t) + +Help on function get_reg_value in module idc: + +get_reg_value(name) + Get register value + + @param name: the register name + + @note: The debugger should be running. otherwise the function fails + the register name should be valid. + It is not necessary to use this function to get register values + because a register name in the script will do too. + + @return: register value (integer or floating point) + +Help on function get_ret_tev_return in module ida_dbg: + +get_ret_tev_return(*args) -> 'ea_t' + get_ret_tev_return(n) -> ea_t + + + Get the return address from a function return trace event. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0.. get_bpt_qty() -1. 0 + represents the latest added trace event. (C++: int) + @return: BADADDR if not a function return event. + +Help on function get_root_filename in module ida_nalt: + +get_root_filename(*args) -> 'size_t' + get_root_filename() -> str + + + Get file name only of the input file. + +Help on function get_screen_ea in module ida_kernwin: + +get_screen_ea(*args) -> 'ea_t' + get_screen_ea() -> ea_t + + + Get the address at the screen cursor ( 'ui_screenea' ) + +Help on function get_segm_attr in module idc: + +get_segm_attr(segea, attr) + Get segment attribute + + @param segea: any address within segment + @param attr: one of SEGATTR_... constants + +Help on function get_segm_by_sel in module idc: + +get_segm_by_sel(base) + Get segment by segment base + + @param base: segment base paragraph or selector + + @return: linear address of the start of the segment or BADADDR + if no such segment + +Help on function get_segm_end in module idc: + +get_segm_end(ea) + Get end address of a segment + + @param ea: any address in the segment + + @return: end of segment (an address past end of the segment) + BADADDR - the specified address doesn't belong to any segment + +Help on function get_segm_name in module idc: + +get_segm_name(ea) + Get name of a segment + + @param ea: any address in the segment + + @return: "" - no segment at the specified address + +Help on function get_segm_start in module idc: + +get_segm_start(ea) + Get start address of a segment + + @param ea: any address in the segment + + @return: start of segment + BADADDR - the specified address doesn't belong to any segment + +Help on function get_source_linnum in module ida_nalt: + +get_source_linnum(*args) -> 'uval_t' + get_source_linnum(ea) -> uval_t + +Help on function get_sourcefile in module ida_lines: + +get_sourcefile(*args) -> 'char const *' + get_sourcefile(ea, bounds=None) -> char const * + + + Get name of source file occupying the given address. + + @param ea: linear address (C++: ea_t) + @param bounds: pointer to the output buffer with the address range for + the current file. May be NULL. (C++: range_t *) + @return: NULL if source file information is not found, otherwise + returns pointer to file name + +Help on function get_sp_delta in module idc: + +get_sp_delta(ea) + Get modification of SP made by the instruction + + @param ea: end address of the instruction + i.e.the last address of the instruction+1 + + @return: Get modification of SP made at the specified location + If the specified location doesn't contain a SP change point, return 0 + Otherwise return delta of SP modification + +Help on function get_spd in module idc: + +get_spd(ea) + Get current delta for the stack pointer + + @param ea: end address of the instruction + i.e.the last address of the instruction+1 + + @return: The difference between the original SP upon + entering the function and SP for the specified address + +Help on function get_sreg in module idc: + +get_sreg(ea, reg) + Get value of segment register at the specified address + + @param ea: linear address + @param reg: name of segment register + + @return: the value of the segment register or -1 on error + + @note: The segment registers in 32bit program usually contain selectors, + so to get paragraph pointed to by the segment register you need to + call sel2para() function. + +Help on function get_step_trace_options in module ida_dbg: + +get_step_trace_options(*args) -> 'int' + get_step_trace_options() -> int + + + Get current step tracing options. \sq{Type, Synchronous function, + Notification, none (synchronous function)} + + @return: Step trace options + +Help on function get_str_type in module idc: + +get_str_type(ea) + Get string type + + @param ea: linear address + + @return: One of STRTYPE_... constants + +Help on function get_strlit_contents in module idc: + +get_strlit_contents(ea, length=-1, strtype=0) + Get string contents + @param ea: linear address + @param length: string length. -1 means to calculate the max string length + @param strtype: the string type (one of STRTYPE_... constants) + + @return: string contents or empty string + +Help on function get_struc_by_idx in module ida_struct: + +get_struc_by_idx(*args) -> 'tid_t' + get_struc_by_idx(idx) -> tid_t + + + Get struct id by struct number. + + + @param idx (C++: uval_t) + +Help on function get_struc_cmt in module ida_struct: + +get_struc_cmt(*args) -> 'qstring *' + get_struc_cmt(id, repeatable) -> str + + + Get struct comment. + + + @param id (C++: tid_t) + @param repeatable (C++: bool) + +Help on function get_struc_id in module ida_struct: + +get_struc_id(*args) -> 'tid_t' + get_struc_id(name) -> tid_t + + + Get struct id by name. + + + @param name (C++: const char *) + +Help on function get_struc_idx in module ida_struct: + +get_struc_idx(*args) -> 'uval_t' + get_struc_idx(id) -> uval_t + + + Get internal number of the structure. + + + @param id (C++: tid_t) + +Help on function get_struc_name in module ida_struct: + +get_struc_name(*args) -> 'qstring *' + get_struc_name(id, flags=0) -> str + + + Get struct name by id + + @param id: struct id (C++: tid_t) + @param flags: Struct name flags (C++: int) + +Help on function get_struc_qty in module ida_struct: + +get_struc_qty(*args) -> 'size_t' + get_struc_qty() -> size_t + + + Get number of known structures. + +Help on function get_struc_size in module ida_struct: + +get_struc_size(*args) -> 'asize_t' + get_struc_size(sptr) -> asize_t + get_struc_size(id) -> asize_t + + + Get struct size (also see 'get_struc_size(tid_t)' ) + + + @param sptr (C++: const struc_t *) + +Help on function get_tev_ea in module ida_dbg: + +get_tev_ea(*args) -> 'ea_t' + get_tev_ea(n) -> ea_t + +Help on function get_tev_reg_mem in module ida_dbg: + +get_tev_reg_mem(tev, idx) + +Help on function get_tev_reg_mem_ea in module ida_dbg: + +get_tev_reg_mem_ea(tev, idx) + +Help on function get_tev_reg_mem_qty in module ida_dbg: + +get_tev_reg_mem_qty(tev) + +Help on function get_tev_qty in module ida_dbg: + +get_tev_qty(*args) -> 'int' + get_tev_qty() -> int + + + Get number of trace events available in trace buffer. \sq{Type, + Synchronous function, Notification, none (synchronous function)} + +Help on function get_tev_reg_val in module ida_dbg: + +get_tev_reg_val(tev, reg) + +Help on function get_tev_tid in module ida_dbg: + +get_tev_tid(*args) -> 'int' + get_tev_tid(n) -> int + +Help on function get_tev_type in module ida_dbg: + +get_tev_type(*args) -> 'int' + get_tev_type(n) -> int + +Help on function get_thread_qty in module ida_dbg: + +get_thread_qty(*args) -> 'int' + get_thread_qty() -> int + + + Get number of threads. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + +Help on function get_tinfo in module idc: + +get_tinfo(ea) + Get type information of function/variable as 'typeinfo' object + + @param ea: the address of the object + @return: None on failure, or (type, fields) tuple. + +Help on function get_trace_file_desc in module ida_dbg: + +get_trace_file_desc(*args) -> 'qstring *' + get_trace_file_desc(filename) -> str + + + Get the file header of the specified trace file. + + + @param filename (C++: const char *) + +Help on function get_type in module idc: + +get_type(ea) + Get type of function/variable + + @param ea: the address of the object + + @return: type string or None if failed + +Help on function get_wide_byte in module ida_bytes: + +get_wide_byte(*args) -> 'uint64' + get_wide_byte(ea) -> uint64 + + + Get one wide byte of the program at 'ea'. Some processors may access + more than 8bit quantity at an address. These processors have 32-bit + byte organization from the IDA's point of view. + + @param ea (C++: ea_t) + +Help on function get_wide_dword in module ida_bytes: + +get_wide_dword(*args) -> 'uint64' + get_wide_dword(ea) -> uint64 + + + Get two wide words (4 'bytes') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in + \inf{is_be()}this function works incorrectly if \ph{nbits} > 16 + + @param ea (C++: ea_t) + +Help on function get_wide_word in module ida_bytes: + +get_wide_word(*args) -> 'uint64' + get_wide_word(ea) -> uint64 + + + Get one wide word (2 'byte') of the program at 'ea'. Some processors + may access more than 8bit quantity at an address. These processors + have 32-bit byte organization from the IDA's point of view. This + function takes into account order of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + +Help on function get_xref_type in module idc: + +get_xref_type() + Return type of the last xref obtained by + [RD]first/next[B0] functions. + + @return: constants fl_* or dr_* + +Help on function getn_enum in module ida_enum: + +getn_enum(*args) -> 'enum_t' + getn_enum(n) -> enum_t + + + Get enum by its ordinal number (0..n). + + + @param n (C++: size_t) + +Help on function getn_thread in module ida_dbg: + +getn_thread(*args) -> 'thid_t' + getn_thread(n) -> thid_t + + + Get the ID of a thread. \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 (C++: + int) + @return: NO_THREAD if the thread doesn't exist. + +Help on function getn_thread_name in module ida_dbg: + +getn_thread_name(*args) -> 'char const *' + getn_thread_name(n) -> char const * + + + Get the NAME of a thread \sq{Type, Synchronous function, Notification, + none (synchronous function)} + + @param n: number of thread, is in range 0.. get_thread_qty() -1 or -1 + for the current thread (C++: int) + @return: thread name or NULL if the thread doesn't exist. + +Help on function guess_type in module idc: + +guess_type(ea) + Guess type of function/variable + + @param ea: the address of the object, can be the structure member id too + + @return: type string or None if failed + +Help on function hasName in module idc: + +hasName(F) + +Help on function hasUserName in module idc: + +hasUserName(F) + +Help on function has_value in module idc: + +has_value(F) + +Help on function here in module idc: + +here() + # Convenience functions: + +Help on function idadir in module idc: + +idadir() + Get IDA directory + + This function returns the directory where IDA.EXE resides + +Help on function import_type in module idc: + +import_type(idx, type_name) + Copy information from type library to database + Copy structure, union, or enum definition from the type library + to the IDA database. + + @param idx: the position of the new type in the list of + types (structures or enums) -1 means at the end of the list + @param type_name: name of type to copy + + @return: BADNODE-failed, otherwise the type id (structure id or enum id) + +Help on function isBin0 in module idc: + +isBin0(F) + +Help on function isBin1 in module idc: + +isBin1(F) + +Help on function isDec0 in module idc: + +isDec0(F) + +Help on function isDec1 in module idc: + +isDec1(F) + +Help on function isExtra in module idc: + +isExtra(F) + +Help on function isHex0 in module idc: + +isHex0(F) + +Help on function isHex1 in module idc: + +isHex1(F) + +Help on function isOct0 in module idc: + +isOct0(F) + +Help on function isOct1 in module idc: + +isOct1(F) + +Help on function isRef in module idc: + +isRef(F) + +Help on function is_align in module idc: + +is_align(F) + +Help on function is_bf in module ida_enum: + +is_bf(*args) -> 'bool' + is_bf(id) -> bool + + + Is enum a bitfield? (otherwise - plain enum, no bitmasks except for + 'DEFMASK' are allowed) + + @param id (C++: enum_t) + +Help on function is_byte in module idc: + +is_byte(F) + +Help on function is_char0 in module idc: + +is_char0(F) + +Help on function is_char1 in module idc: + +is_char1(F) + +Help on function is_code in module idc: + +is_code(F) + +Help on function is_data in module idc: + +is_data(F) + +Help on function is_defarg0 in module idc: + +is_defarg0(F) + +Help on function is_defarg1 in module idc: + +is_defarg1(F) + +Help on function is_double in module idc: + +is_double(F) + +Help on function is_dword in module idc: + +is_dword(F) + +Help on function is_enum0 in module idc: + +is_enum0(F) + +Help on function is_enum1 in module idc: + +is_enum1(F) + +Help on function is_event_handled in module idc: + +is_event_handled() + Is the debug event handled? + + @return: boolean + +Help on function is_float in module idc: + +is_float(F) + +Help on function is_flow in module idc: + +is_flow(F) + +Help on function is_head in module idc: + +is_head(F) + +Help on function is_loaded in module idc: + +is_loaded(ea) + Is the byte initialized? + +Help on function is_manual0 in module idc: + +is_manual0(F) + +Help on function is_manual1 in module idc: + +is_manual1(F) + +Help on function is_mapped in module idc: + +is_mapped(ea) + +Help on function is_off0 in module idc: + +is_off0(F) + +Help on function is_off1 in module idc: + +is_off1(F) + +Help on function is_oword in module idc: + +is_oword(F) + +Help on function is_pack_real in module idc: + +is_pack_real(F) + +Help on function is_qword in module idc: + +is_qword(F) + +Help on function is_seg0 in module idc: + +is_seg0(F) + +Help on function is_seg1 in module idc: + +is_seg1(F) + +Help on function is_stkvar0 in module idc: + +is_stkvar0(F) + +Help on function is_stkvar1 in module idc: + +is_stkvar1(F) + +Help on function is_strlit in module idc: + +is_strlit(F) + +Help on function is_stroff0 in module idc: + +is_stroff0(F) + +Help on function is_stroff1 in module idc: + +is_stroff1(F) + +Help on function is_struct in module idc: + +is_struct(F) + +Help on function is_tail in module idc: + +is_tail(F) + +Help on function is_tbyte in module idc: + +is_tbyte(F) + +Help on function is_union in module idc: + +is_union(sid) + Is a structure a union? + + @param sid: structure type ID + + @return: 1: yes, this is a union id + 0: no + + @note: Unions are a special kind of structures + +Help on function is_unknown in module idc: + +is_unknown(F) + +Help on function is_valid_trace_file in module ida_dbg: + +is_valid_trace_file(*args) -> 'bool' + is_valid_trace_file(filename) -> bool + + + Is the specified file a valid trace file for the current database? + + + @param filename (C++: const char *) + +Help on function is_word in module idc: + +is_word(F) + +Help on function jumpto in module ida_kernwin: + +jumpto(*args) -> 'bool' + jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool + jumpto(custom_viewer, place, x, y) -> bool + + + Jump to the specified address ( 'ui_jumpto' ). + + @param ea: destination (C++: ea_t) + @param opnum: -1: don't change x coord (C++: int) + @param uijmp_flags: Jump flags (C++: int) + @return: success + +Help on function load_and_run_plugin in module ida_loader: + +load_and_run_plugin(*args) -> 'bool' + load_and_run_plugin(name, arg) -> bool + + + Load & run a plugin. + + + @param name (C++: const char *) + @param arg (C++: size_t) + +Help on function load_debugger in module ida_dbg: + +load_debugger(*args) -> 'bool' + load_debugger(dbgname, use_remote) -> bool + +Help on function load_trace_file in module ida_dbg: + +load_trace_file(*args) -> 'qstring *' + load_trace_file(filename) -> str + + + Load a recorded trace file in the trace window. If the call succeeds + and 'buf' is not null, the description of the trace stored in the + binary trace file will be returned in 'buf' + + @param filename (C++: const char *) + +Help on function loadfile in module idc: + +loadfile(filepath, pos, ea, size) + +Help on function ltoa in module idc: + +ltoa(n, radix) + +Help on function make_array in module idc: + +make_array(ea, nitems) + Create an array. + + @param ea: linear address + @param nitems: size of array in items + + @note: This function will create an array of the items with the same type as + the type of the item at 'ea'. If the byte at 'ea' is undefined, then + this function will create an array of bytes. + +Help on function move_segm in module idc: + +move_segm(ea, to, flags) + 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 + + @param ea: any address within the segment to move + @param to: new segment start address + @param flags: combination MFS_... constants + + @returns: MOVE_SEGM_... error code + +Help on function msg in module ida_kernwin: + +msg(*args) -> 'PyObject *' + msg(o) -> PyObject * + + + Display an UTF-8 string in the message window + + The result of the stringification of the arguments + will be treated as an UTF-8 string. + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + +Help on function next_addr in module ida_bytes: + +next_addr(*args) -> 'ea_t' + next_addr(ea) -> ea_t + + + Get next address in the program (i.e. next address which has flags). + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function next_func_chunk in module idc: + +next_func_chunk(funcea, tailea) + Get the next function chunk of the specified function + + @param funcea: any address in the function + @param tailea: any address in the current chunk + + @return: the starting address of the next function chunk or BADADDR + + @note: This function returns the next chunk of the specified function + +Help on function next_head in module idc: + +next_head(ea, maxea=BADADDR)↗ + Get next defined item (instruction or data) in the program + + @param ea: linear address to start search from + @param maxea: the search will stop at the address + maxea is not included in the search range + + @return: BADADDR - no (more) defined items + +Help on function next_not_tail in module ida_bytes: + +next_not_tail(*args) -> 'ea_t' + next_not_tail(ea) -> ea_t + + + Get address of next non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function op_bin in module ida_bytes: + +op_bin(*args) -> 'bool' + op_bin(ea, n) -> bool + + + set op type to 'bin_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_chr in module ida_bytes: + +op_chr(*args) -> 'bool' + op_chr(ea, n) -> bool + + + set op type to 'char_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_dec in module ida_bytes: + +op_dec(*args) -> 'bool' + op_dec(ea, n) -> bool + + + set op type to 'dec_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_enum in module ida_bytes: + +op_enum(*args) -> 'bool' + op_enum(ea, n, id, serial) -> bool + + + Set operand representation to be 'enum_t'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @param id: id of enum (C++: enum_t) + @param serial: the serial number of the constant in the enumeration, + usually 0. the serial numbers are used if the + enumeration contains several constants with the same + value (C++: uchar) + @return: success + +Help on function op_flt in module ida_bytes: + +op_flt(*args) -> 'bool' + op_flt(ea, n) -> bool + + + set op type to 'flt_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_hex in module ida_bytes: + +op_hex(*args) -> 'bool' + op_hex(ea, n) -> bool + + + set op type to 'hex_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function set_forced_operand in module ida_bytes: + +set_forced_operand(*args) -> 'bool' + set_forced_operand(ea, n, op) -> bool + + + Set forced operand. + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, 2) (C++: int) + @param op: text of operand NULL: do nothing (return 0) "" : delete + forced operand (C++: const char *) + @return: success + +Help on function op_num in module ida_bytes: + +op_num(*args) -> 'bool' + op_num(ea, n) -> bool + + + set op type to 'num_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_oct in module ida_bytes: + +op_oct(*args) -> 'bool' + op_oct(ea, n) -> bool + + + set op type to 'oct_flag()' + + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function op_offset in module ida_offset: + +op_offset(*args) -> 'int' + op_offset(ea, n, type, target=BADADDR, base=0, tdelta=0) -> int + + + See 'op_offset_ex()' + + + @param ea (C++: ea_t) + @param n (C++: int) + @param type (C++: reftype_t) + @param target (C++: ea_t) + @param base (C++: ea_t) + @param tdelta (C++: adiff_t) + +Help on function op_offset_high16 in module idc: + +op_offset_high16(ea, n, target) + Convert operand to a high offset + High offset is the upper 16bits of an offset. + This type is used by TMS320C6 processors (and probably by other + RISC processors too) + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param target: the full value (all 32bits) of the offset + +Help on function op_plain_offset in module idc: + +op_plain_offset(ea, n, base) + Convert operand to an offset + (for the explanations of 'ea' and 'n' please see op_bin()) + + Example: + ======== + + seg000:2000 dw 1234h + + and there is a segment at paragraph 0x1000 and there is a data item + within the segment at 0x1234: + + seg000:1234 MyString db 'Hello, world!',0 + + Then you need to specify a linear address of the segment base to + create a proper offset: + + op_plain_offset(["seg000",0x2000],0,0x10000); + + and you will have: + + seg000:2000 dw offset MyString + + Motorola 680x0 processor have a concept of "outer offsets". + If you want to create an outer offset, you need to combine number + of the operand with the following bit: + + Please note that the outer offsets are meaningful only for + Motorola 680x0. + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param base: base of the offset as a linear address + If base == BADADDR then the current operand becomes non-offset + +Help on function op_seg in module ida_bytes: + +op_seg(*args) -> 'bool' + op_seg(ea, n) -> bool + + + Set operand representation to be 'segment'. If applied to unexplored + bytes, converts them to 16/32bit word data + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stkvar in module ida_bytes: + +op_stkvar(*args) -> 'bool' + op_stkvar(ea, n) -> bool + + + Set operand representation to be 'stack variable'. Should be applied + to an instruction within a function. Should be applied after creating + a stack var using 'insn_t::create_stkvar()' . + + @param ea: linear address (C++: ea_t) + @param n: number of operand (0, 1, -1) (C++: int) + @return: success + +Help on function op_stroff in module idc: + +op_stroff(ea, n, strid, delta) + Convert operand to an offset in a structure + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + @param strid: id of a structure type + @param delta: struct offset delta. usually 0. denotes the difference + between the structure base and the pointer into the structure. + +Help on function parse_decl in module idc: + +parse_decl(inputtype, flags) + Parse type declaration + + @param inputtype: file name or C declarations (depending on the flags) + @param flags: combination of PT_... constants or 0 + + @return: None on failure or (name, type, fields) tuple + +Help on function parse_decls in module idc: + +parse_decls(inputtype, flags=0) + Parse type declarations + + @param inputtype: file name or C declarations (depending on the flags) + @param flags: combination of PT_... constants or 0 + + @return: number of parsing errors (0 no errors) + +Help on function patch_byte in module ida_bytes: + +patch_byte(*args) -> 'bool' + patch_byte(ea, x) -> bool + + + Patch a byte of the program. The original value of the byte is saved + and can be obtained by 'get_original_byte()' . This function works for + wide byte processors too. + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function put_dbg_byte in module ida_dbg: + +put_dbg_byte(*args) -> 'bool' + put_dbg_byte(ea, x) -> bool + + + Change one byte of the debugged process memory. + + @param ea: linear address (C++: ea_t) + @param x: byte value (C++: uint32) + @return: true if the process memory has been modified + +Help on function patch_dword in module ida_bytes: + +patch_dword(*args) -> 'bool' + patch_dword(ea, x) -> bool + + + Patch a dword of the program. The original value of the dword is saved + and can be obtained by 'get_original_dword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_qword in module ida_bytes: + +patch_qword(*args) -> 'bool' + patch_qword(ea, x) -> bool + + + Patch a qword of the program. The original value of the qword is saved + and can be obtained by 'get_original_qword()' . This function DOESN'T + work for wide byte processors. This function takes into account order + of bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function patch_word in module ida_bytes: + +patch_word(*args) -> 'bool' + patch_word(ea, x) -> bool + + + Patch a word of the program. The original value of the word is saved + and can be obtained by 'get_original_word()' . This function works for + wide byte processors too. This function takes into account order of + bytes specified in \inf{is_be()} + + @param ea (C++: ea_t) + @param x (C++: uint64) + +Help on function plan_and_wait in module idc: + +plan_and_wait(sEA, eEA, final_pass=True) + Perform full analysis of the range + + @param sEA: starting linear address + @param eEA: ending linear address (excluded) + @param final_pass: make the final pass over the specified range + + @return: 1-ok, 0-Ctrl-Break was pressed. + +Help on function plan_to_apply_idasgn in module ida_funcs: + +plan_to_apply_idasgn(*args) -> 'int' + plan_to_apply_idasgn(fname) -> int + + + Add a signature file to the list of planned signature files. + + @param fname: file name. should not contain directory part. (C++: + const char *) + @return: 0 if failed, otherwise number of planned (and applied) + signatures + +Help on function prev_addr in module ida_bytes: + +prev_addr(*args) -> 'ea_t' + prev_addr(ea) -> ea_t + + + Get previous address in the program. + + @param ea (C++: ea_t) + @return: BADADDR if no such address exist. + +Help on function prev_head in module idc: + +prev_head(ea, minea=0) + Get previous defined item (instruction or data) in the program + + @param ea: linear address to start search from + @param minea: the search will stop at the address + minea is included in the search range + + @return: BADADDR - no (more) defined items + +Help on function prev_not_tail in module ida_bytes: + +prev_not_tail(*args) -> 'ea_t' + prev_not_tail(ea) -> ea_t + + + Get address of previous non-tail byte. + + @param ea (C++: ea_t) + @return: BADADDR if none exists. + +Help on function print_decls in module idc: + +print_decls(ordinals, flags) + Print types in a format suitable for use in a header file + + @param ordinals: comma-separated list of type ordinals + @param flags: combination of PDF_... constants or 0 + + @return: string containing the type definitions + +Help on _Feature in module __future__ object: + +class _Feature(builtins.object) + | Methods defined here: + | + | __init__(self, optionalRelease, mandatoryRelease, compiler_flag) + | Initialize self. See help(type(self)) for accurate signature. + | + | __repr__(self) + | Return repr(self). + | + | getMandatoryRelease(self) + | Return release in which this feature will become mandatory. + | + | This is a 5-tuple, of the same form as sys.version_info, or, if + | the feature was dropped, is None. + | + | getOptionalRelease(self) + | Return first release in which this feature was recognized. + | + | This is a 5-tuple, of the same form as sys.version_info. + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + +Help on function print_insn_mnem in module idc: + +print_insn_mnem(ea) + Get instruction mnemonics + + @param ea: linear address of instruction + + @return: "" - no instruction at the specified location + + @note: this function may not return exactly the same mnemonics + as you see on the screen. + +Help on function print_operand in module idc: + +print_operand(ea, n) + Get operand of an instruction or data + + @param ea: linear address of the item + @param n: number of operand: + 0 - the first operand + 1 - the second operand + + @return: the current text representation of operand or "" + +Help on function process_config_line in module idc: + +process_config_line(directive) + Parse one or more ida.cfg config directives + @param directive: directives to process, for example: PACK_DATABASE=2 + + @note: If the directives are erroneous, a fatal error will be generated. + The settings are permanent: effective for the current session and the next ones + +Help on function process_ui_action in module idc: + +process_ui_action(name, flags=0) + Invokes an IDA UI action by name + + @param name: Command name + @param flags: Reserved. Must be zero + @return: Boolean + +Help on function mark_position in module ida_idc: + +mark_position(*args) -> 'void' + mark_position(ea, lnnum, x, y, slot, comment) + +Help on function qexit in module ida_pro: + +qexit(*args) -> 'void' + qexit(code) + + + Call qatexit functions, shut down UI and kernel, and exit. + + @param code: exit code (C++: int) + +Help on function qsleep in module idc: + +qsleep(milliseconds) + qsleep the specified number of milliseconds + This function suspends IDA for the specified amount of time + + @param milliseconds: time to sleep + +Help on function read_dbg_byte in module idc: + +read_dbg_byte(ea) + Get value of program byte using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_dbg_dword in module idc: + +read_dbg_dword(ea) + Get value of program double-word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function dbg_read_memory in module ida_idd: + +dbg_read_memory(*args) -> 'PyObject *' + dbg_read_memory(ea, sz) -> PyObject * + + + Reads from the debugee's memory at the specified ea + @return: + - The read buffer (as a string) + - Or None on failure + +Help on function read_dbg_qword in module idc: + +read_dbg_qword(ea) + Get value of program quadro-word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_dbg_word in module idc: + +read_dbg_word(ea) + Get value of program word using the debugger memory + + @param ea: linear address + @return: The value or None on failure. + +Help on function read_selection_end in module idc: + +read_selection_end() + Get end address of the selected range + + @return: BADADDR - the user has not selected an range + +Help on function read_selection_start in module idc: + +read_selection_start() + Get start address of the selected range + returns BADADDR - the user has not selected an range + +Help on function readlong in module idc: + +readlong(handle, mostfirst) + +Help on function readshort in module idc: + +readshort(handle, mostfirst) + +Help on function readstr in module idc: + +readstr(handle) + +Help on function rebase_program in module ida_segment: + +rebase_program(*args) -> 'int' + rebase_program(delta, flags) -> int + + + Rebase the whole program by 'delta' bytes. + + @param delta: number of bytes to move the program (C++: adiff_t) + @param flags: Move segment flags it is recommended to use + MSF_FIXONCE so that the loader takes care of global + variables it stored in the database (C++: int) + @return: Move segment result codes + +Help on function recalc_spd in module ida_frame: + +recalc_spd(*args) -> 'bool' + recalc_spd(cur_ea) -> bool + + + Recalculate SP delta for an instruction that stops execution. The next + instruction is not reached from the current instruction. We need to + recalculate SP for the next instruction.This function will create a + new automatic SP register change point if necessary. It should be + called from the emulator (emu.cpp) when auto_state == 'AU_USED' if the + current instruction doesn't pass the execution flow to the next + instruction. + + @param cur_ea: linear address of the current instruction (C++: ea_t) + +Help on function refresh_debugger_memory in module ida_dbg: + +refresh_debugger_memory(*args) -> 'PyObject *' + refresh_debugger_memory() -> PyObject * + + + Refreshes the debugger memory + @return: Nothing + +Help on function refresh_idaview_anyway in module ida_kernwin: + +refresh_idaview_anyway(*args) -> 'void' + refresh_idaview_anyway() + + + Refresh all disassembly views ( 'ui_refresh' ), forces an immediate + refresh. Please consider 'request_refresh()' instead + +Help on function refresh_choosers in module ida_kernwin: + +refresh_choosers(*args) -> 'void' + refresh_choosers() + +Help on function remove_fchunk in module idc: + +remove_fchunk(funcea, tailea) + Remove a function chunk from the function + + @param funcea: any address in the function + @param tailea: any address in the function chunk to remove + + @return: 0 if failed, 1 if success + +Help on function rename_array in module idc: + +rename_array(array_id, newname) + Rename array, by its ID. + + @param id: The ID of the array to rename. + @param newname: The new name of the array. + + @return: 1 in case of success, 0 otherwise + +Help on function rename_entry in module ida_entry: + +rename_entry(*args) -> 'bool' + rename_entry(ord, name, flags=0) -> bool + + + Rename entry point. + + @param ord: ordinal number of the entry point (C++: uval_t) + @param name: name of entry point. If the specified location already + has a name, the old name will be appended to a repeatable + comment. (C++: const char *) + @param flags: See AEF_* (C++: int) + @return: success + +Help on function resume_process in module idc: + +resume_process() + +Help on function resume_thread in module ida_dbg: + +resume_thread(*args) -> 'int' + resume_thread(tid) -> int + + + Resume thread. \sq{Type, Synchronous function - available as request, + Notification, none (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function retrieve_input_file_md5 in module ida_nalt: + +retrieve_input_file_md5(*args) -> 'uchar [ANY]' + retrieve_input_file_md5() -> str + + + Get input file md5. + +Help on function rotate_byte in module idc: + +rotate_byte(x, count) + +Help on function rotate_dword in module idc: + +rotate_dword(x, count) + +Help on function rotate_left in module idc: + +rotate_left(value, count, nbits, offset) + Rotate a value to the left (or right) + + @param value: value to rotate + @param count: number of times to rotate. negative counter means + rotate to the right + @param nbits: number of bits to rotate + @param offset: offset of the first bit to rotate + + @return: the value with the specified field rotated + all other bits are not modified + +Help on function rotate_word in module idc: + +rotate_word(x, count) + +Help on function run_to in module ida_dbg: + +run_to(*args) -> 'bool' + run_to(ea, pid=pid_t(-1), tid=0) -> bool + + + Execute the process until the given address is reached. If no process + is active, a new process is started. Technically, the debugger sets up + a temporary breakpoint at the given address, and continues (or starts) + the execution of the whole process. So, all threads continue their + execution! \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_run_to' } + + @param ea: target address (C++: ea_t) + @param pid: not used yet. please do not specify this parameter. (C++: + pid_t) + @param tid: not used yet. please do not specify this parameter. (C++: + thid_t) + +Help on function save_database in module idc: + +save_database(idbname, flags=0) + Save current database to the specified idb file + + @param idbname: name of the idb file. if empty, the current idb + file will be used. + @param flags: combination of ida_loader.DBFL_... bits or 0 + +Help on function save_trace_file in module ida_dbg: + +save_trace_file(*args) -> 'bool' + save_trace_file(filename, description) -> bool + + + Save the current trace in the specified file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function savefile in module idc: + +savefile(filepath, pos, ea, size) + +Help on function sel2para in module idc: + +sel2para(sel) + Get a selector value + + @param sel: the selector number + + @return: selector value if found + otherwise the input value (sel) + + @note: selector values are always in paragraphs + +Help on function select_thread in module ida_dbg: + +select_thread(*args) -> 'bool' + select_thread(tid) -> bool + + + Select the given thread as the current debugged thread. All thread + related execution functions will work on this thread. The process must + be suspended to select a new thread. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param tid: ID of the thread to select (C++: thid_t) + @return: false if the thread doesn't exist. + +Help on function selector_by_name in module idc: + +selector_by_name(segname) + Get segment selector by name + + @param segname: name of segment + + @return: segment selector or BADADDR + +Help on function send_dbg_command in module idc: + +send_dbg_command(cmd) + Sends a command to the debugger module and returns the output string. + An exception will be raised if the debugger is not running or the current debugger does not export + the 'send_dbg_command' IDC command. + +Help on function set_array_long in module idc: + +set_array_long(array_id, idx, value) + Sets the long value of an array element. + + @param array_id: The array ID. + @param idx: Index of an element. + @param value: 32bit or 64bit value to store in the array + + @return: 1 in case of success, 0 otherwise + +Help on function set_array_params in module idc: + +set_array_params(ea, flags, litems, align) + Set array representation format + + @param ea: linear address + @param flags: combination of AP_... constants or 0 + @param litems: number of items per line. 0 means auto + @param align: element alignment + - -1: do not align + - 0: automatic alignment + - other values: element width + + @return: 1-ok, 0-failure + +Help on function set_array_string in module idc: + +set_array_string(array_id, idx, value) + Sets the string value of an array element. + + @param array_id: The array ID. + @param idx: Index of an element. + @param value: String value to store in the array + + @return: 1 in case of success, 0 otherwise + +Help on function set_bmask_cmt in module idc: + +set_bmask_cmt(enum_id, bmask, cmt, repeatable) + Set bitmask comment (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param cmt: comment + repeatable - type of comment, 0-regular, 1-repeatable + + @return: 1-ok, 0-failed + +Help on function set_bmask_name in module idc: + +set_bmask_name(enum_id, bmask, name) + Set bitmask name (only for bitfields) + + @param enum_id: id of enum + @param bmask: bitmask of the constant + @param name: name of bitmask + + @return: 1-ok, 0-failed + +Help on function set_bpt_attr in module idc: + +set_bpt_attr(address, bptattr, value) + modifiable characteristics of a breakpoint + + @param address: any address in the breakpoint range + @param bptattr: the attribute code, one of BPTATTR_* constants + BPTATTR_CND is not allowed, see set_bpt_cond() + @param value: the attibute value + + @return: success + +Help on function set_bpt_cond in module idc: + +set_bpt_cond(ea, cnd, is_lowcnd=0) + Set breakpoint condition + + @param ea: any address in the breakpoint range + @param cnd: breakpoint condition + @param is_lowcnd: 0 - regular condition, 1 - low level condition + + @return: success + +Help on function set_cmt in module ida_bytes: + +set_cmt(*args) -> 'bool' + set_cmt(ea, comm, rptble) -> bool + + + Set an indented comment. + + @param ea: linear address (C++: ea_t) + @param comm: comment string NULL: do nothing (return 0) "" : + delete comment (C++: const char *) + @param rptble: is repeatable? (C++: bool) + @return: success + +Help on function set_color in module idc: + +set_color(ea, what, color) + Set item color + + @param ea: address of the item + @param what: type of the item (one of CIC_* constants) + @param color: new color code in RGB (hex 0xBBGGRR) + + @return: success (True or False) + +Help on function set_debugger_event_cond in module ida_dbg: + +set_debugger_event_cond(*args) -> 'void' + set_debugger_event_cond(nonnul_cond) + +Help on function set_debugger_options in module ida_dbg: + +set_debugger_options(*args) -> 'uint' + set_debugger_options(options) -> uint + + + Set debugger options. Replaces debugger options with the specification + combination 'Debugger options' + + @param options (C++: uint) + @return: the old debugger options + +Help on function set_default_sreg_value in module idc: + +set_default_sreg_value(ea, reg, value) + Set default segment register value for a segment + + @param ea: any address in the segment + if no segment is present at the specified address + then all segments will be affected + @param reg: name of segment register + @param value: default value of the segment register. -1-undefined. + +Help on function set_enum_bf in module ida_enum: + +set_enum_bf(*args) -> 'bool' + set_enum_bf(id, bf) -> bool + + + Set 'bitfield' bit of enum (i.e. convert it to a bitfield) + + + @param id (C++: enum_t) + @param bf (C++: bool) + +Help on function set_enum_cmt in module ida_enum: + +set_enum_cmt(*args) -> 'bool' + set_enum_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum type. + + + @param id (C++: enum_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_flag in module ida_enum: + +set_enum_flag(*args) -> 'bool' + set_enum_flag(id, flag) -> bool + + + Set data representation flags. + + + @param id (C++: enum_t) + @param flag (C++: flags_t) + +Help on function set_enum_idx in module ida_enum: + +set_enum_idx(*args) -> 'bool' + set_enum_idx(id, idx) -> bool + + + Set serial number of enum. Also see 'get_enum_idx()' . + + @param id (C++: enum_t) + @param idx (C++: size_t) + +Help on function set_enum_member_cmt in module ida_enum: + +set_enum_member_cmt(*args) -> 'bool' + set_enum_member_cmt(id, cmt, repeatable) -> bool + + + Set comment for enum member. + + + @param id (C++: const_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_enum_member_name in module ida_enum: + +set_enum_member_name(*args) -> 'bool' + set_enum_member_name(id, name) -> bool + + + Set name of enum member. + + + @param id (C++: const_t) + @param name (C++: const char *) + +Help on function set_enum_name in module ida_enum: + +set_enum_name(*args) -> 'bool' + set_enum_name(id, name) -> bool + + + Set name of enum type. + + + @param id (C++: enum_t) + @param name (C++: const char *) + +Help on function set_enum_width in module ida_enum: + +set_enum_width(*args) -> 'bool' + set_enum_width(id, width) -> bool + + + See comment for 'get_enum_width()' + + + @param id (C++: enum_t) + @param width (C++: int) + +Help on function set_fchunk_attr in module idc: + +set_fchunk_attr(ea, attr, value) + Set a function chunk attribute + + @param ea: any address in the chunk + @param attr: only FUNCATTR_START, FUNCATTR_END, FUNCATTR_OWNER + @param value: desired value + + @return: 0 if failed, 1 if success + +Help on function set_fixup in module idc: + +set_fixup(ea, fixuptype, fixupflags, targetsel, targetoff, displ) + Set fixup information + + @param ea: address to set fixup information about + @param fixuptype: fixup type. see get_fixup_target_type() + for possible fixup types. + @param fixupflags: fixup flags. see get_fixup_target_flags() + for possible fixup types. + @param targetsel: target selector + @param targetoff: target offset + @param displ: displacement + + @return: none + +Help on function set_flag in module idc: + +set_flag(off, bit, value) + #-------------------------------------------------------------------------- + +Help on function set_frame_size in module idc: + +set_frame_size(ea, lvsize, frregs, argsize) + Make function frame + + @param ea: any address belonging to the function + @param lvsize: size of function local variables + @param frregs: size of saved registers + @param argsize: size of function arguments + + @return: ID of function frame or -1 + If the function did not have a frame, the frame + will be created. Otherwise the frame will be modified + +Help on function set_func_attr in module idc: + +set_func_attr(ea, attr, value) + Set a function attribute + + @param ea: any address belonging to the function + @param attr: one of FUNCATTR_... constants + @param value: new value of the attribute + + @return: 1-ok, 0-failed + +Help on function set_func_cmt in module idc: + +set_func_cmt(ea, cmt, repeatable) + Set function comment + + @param ea: any address belonging to the function + @param cmt: a function comment line + @param repeatable: 1: get repeatable comment + 0: get regular comment + +Help on function set_func_end in module ida_funcs: + +set_func_end(*args) -> 'bool' + set_func_end(ea, newend) -> bool + + + Move function chunk end address. + + @param ea: any address in the function (C++: ea_t) + @param newend: new end address of the function (C++: ea_t) + @return: success + +Help on function set_func_flags in module idc: + +set_func_flags(ea, flags) + Change function flags + + @param ea: any address belonging to the function + @param flags: see get_func_flags() for explanations + + @return: !=0 - ok + +Help on function set_hash_long in module idc: + +set_hash_long(hash_id, key, value) + Sets the long value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + @param value: 32bit or 64bit value to store in the hash + + @return: 1 in case of success, 0 otherwise + +Help on function set_hash_string in module idc: + +set_hash_string(hash_id, key, value) + Sets the string value of a hash element. + + @param hash_id: The hash ID. + @param key: Key of an element. + @param value: string value to store in the hash + + @return: 1 in case of success, 0 otherwise + +Help on function set_ida_state in module ida_auto: + +set_ida_state(*args) -> 'idastate_t' + set_ida_state(st) -> idastate_t + + + Change IDA status indicator value + + @param st: - new indicator status (C++: idastate_t) + @return: old indicator status + +Help on function set_inf_attr in module idc: + +set_inf_attr(attr, value) + +Help on function set_local_type in module idc: + +set_local_type(ordinal, input, flags) + Parse one type declaration and store it in the specified slot + + @param ordinal: slot number (1...NumberOfLocalTypes) + -1 means allocate new slot or reuse the slot + of the existing named type + @param input: C declaration. Empty input empties the slot + @param flags: combination of PT_... constants or 0 + + @return: slot number or 0 if error + +Help on function set_manual_insn in module ida_bytes: + +set_manual_insn(*args) -> 'void' + set_manual_insn(ea, manual_insn) + + + Set manual instruction string. + + @param ea: linear address of the instruction or data item (C++: ea_t) + @param manual_insn: "" - delete manual string. NULL - do nothing (C++: + const char *) + +Help on function set_member_cmt in module idc: + +set_member_cmt(sid, member_offset, comment, repeatable) + Change structure member comment + + @param sid: structure type ID + @param member_offset: offset of the member + @param comment: new comment of the structure member + @param repeatable: 1: change repeatable comment + 0: change regular comment + + @return: != 0 - ok + +Help on function set_member_name in module idc: + +set_member_name(sid, member_offset, name) + Change structure member name + + @param sid: structure type ID + @param member_offset: offset of the member + @param name: new name of the member + + @return: != 0 - ok. + +Help on function set_member_type in module idc: + +set_member_type(sid, member_offset, flag, typeid, nitems, target=-1, tdelta=0, reftype=2) + Change structure member type + + @param sid: structure type ID + @param member_offset: offset of the member + @param flag: new type of the member. Should be one of + FF_BYTE..FF_PACKREAL (see above) combined with FF_DATA + @param typeid: if is_struct(flag) then typeid specifies the structure id for the member + if is_off0(flag) then typeid specifies the offset base. + if is_strlit(flag) then typeid specifies the string type (STRTYPE_...). + if is_stroff(flag) then typeid specifies the structure id + if is_enum(flag) then typeid specifies the enum id + if is_custom(flags) then typeid specifies the dtid and fid: dtid|(fid<<16) + Otherwise typeid should be -1. + @param nitems: number of items in the member + + @param target: target address of the offset expr. You may specify it as + -1, ida will calculate it itself + @param tdelta: offset target delta. usually 0 + @param reftype: see REF_... definitions + + @note: The remaining arguments are allowed only if is_off0(flag) and you want + to specify a complex offset expression + + @return: !=0 - ok. + +Help on function set_name in module idc: + +set_name(ea, name, flags=0) + Rename an address + + @param ea: linear address + @param name: new name of address. If name == "", then delete old name + @param flags: combination of SN_... constants + + @return: 1-ok, 0-failure + +Help on function set_processor_type in module ida_idp: + +set_processor_type(*args) -> 'bool' + set_processor_type(procname, level) -> bool + + + Set target processor type. Once a processor module is loaded, it + cannot be replaced until we close the idb. + + @param procname: name of processor type (one of names present in + \ph{psnames}) (C++: const char *) + @param level: SETPROC_ (C++: setproc_level_t) + @return: success + +Help on function set_reg_value in module idc: + +set_reg_value(value, name) + Set register value + + @param name: the register name + @param value: new register value + + @note: The debugger should be running + It is not necessary to use this function to set register values. + A register name in the left side of an assignment will do too. + +Help on function set_remote_debugger in module ida_dbg: + +set_remote_debugger(*args) -> 'void' + set_remote_debugger(host, _pass, port=-1) + + + Set remote debugging options. Should be used before starting the + debugger. + + @param host: If empty, IDA will use local debugger. If NULL, the host + will not be set. (C++: const char *) + @param port: If -1, the default port number will be used (C++: int) + +Help on function set_root_filename in module ida_nalt: + +set_root_filename(*args) -> 'void' + set_root_filename(file) + + + Set full path of the input file. + + + @param file (C++: const char *) + +Help on function set_segm_addressing in module idc: + +set_segm_addressing(ea, bitness) + Change segment addressing + + @param ea: any address in the segment + @param bitness: 0: 16bit, 1: 32bit, 2: 64bit + + @return: success (boolean) + +Help on function set_segm_alignment in module idc: + +set_segm_alignment(ea, alignment) + Change alignment of the segment + + @param ea: any address in the segment + @param alignment: new alignment of the segment (one of the sa... constants) + + @return: success (boolean) + +Help on function set_segm_attr in module idc: + +set_segm_attr(segea, attr, value) + Set segment attribute + + @param segea: any address within segment + @param attr: one of SEGATTR_... constants + + @note: Please note that not all segment attributes are modifiable. + Also some of them should be modified using special functions + like set_segm_addressing, etc. + +Help on function set_segm_class in module idc: + +set_segm_class(ea, segclass) + Change class of the segment + + @param ea: any address in the segment + @param segclass: new class of the segment + + @return: success (boolean) + +Help on function set_segm_combination in module idc: + +set_segm_combination(segea, comb) + Change combination of the segment + + @param segea: any address in the segment + @param comb: new combination of the segment (one of the sc... constants) + + @return: success (boolean) + +Help on function set_segm_name in module idc: + +set_segm_name(ea, name) + Change name of the segment + + @param ea: any address in the segment + @param name: new name of the segment + + @return: success (boolean) + +Help on function set_segm_type in module idc: + +set_segm_type(segea, segtype) + Set segment type + + @param segea: any address within segment + @param segtype: new segment type: + + @return: !=0 - ok + +Help on function set_segment_bounds in module idc: + +set_segment_bounds(ea, startea, endea, flags) + Change segment boundaries + + @param ea: any address in the segment + @param startea: new start address of the segment + @param endea: new end address of the segment + @param flags: combination of SEGMOD_... flags + + @return: boolean success + +Help on function set_selector in module ida_segment: + +set_selector(*args) -> 'int' + set_selector(selector, paragraph) -> int + + + Set mapping of selector to a paragraph. You should call this + functionbeforecreating a segment which uses the selector, otherwise + the creation of the segment will fail. + + @param selector: number of selector to map if selector == BADSEL , + then return 0 (fail) if the selector has had a + mapping, old mapping is destroyed if the selector + number is equal to paragraph value, then the mapping + is destroyed because we don't need to keep trivial + mappings. (C++: sel_t) + @param paragraph: paragraph to map selector (C++: ea_t) + +Help on function set_source_linnum in module ida_nalt: + +set_source_linnum(*args) -> 'void' + set_source_linnum(ea, lnnum) + +Help on function set_step_trace_options in module ida_dbg: + +set_step_trace_options(*args) -> 'void' + set_step_trace_options(options) + + + Modify step tracing options. \sq{Type, Synchronous function - + available as request, Notification, none (synchronous function)} + + @param options (C++: int) + +Help on function change_storage_type in module ida_bytes: + +change_storage_type(*args) -> 'error_t' + change_storage_type(start_ea, end_ea, stt) -> error_t + + + Change flag storage type for address range. + + @param start_ea: should be lower than end_ea. (C++: ea_t) + @param end_ea: does not belong to the range. (C++: ea_t) + @param stt: storage_type_t (C++: storage_type_t) + @return: error code + +Help on function set_struc_cmt in module ida_struct: + +set_struc_cmt(*args) -> 'bool' + set_struc_cmt(id, cmt, repeatable) -> bool + + + Set structure comment. + + + @param id (C++: tid_t) + @param cmt (C++: const char *) + @param repeatable (C++: bool) + +Help on function set_struc_idx in module idc: + +set_struc_idx(sid, index) + Change structure index + + @param sid: structure type ID + @param index: new index of the structure + + @return: != 0 - ok + + @note: See get_first_struc_idx() for the explanation of + structure indices and IDs. + +Help on function set_struc_name in module ida_struct: + +set_struc_name(*args) -> 'bool' + set_struc_name(id, name) -> bool + + + Set structure name. + + + @param id (C++: tid_t) + @param name (C++: const char *) + +Help on function set_tail_owner in module idc: + +set_tail_owner(tailea, funcea) + Change the function chunk owner + + @param tailea: any address in the function chunk + @param funcea: the starting address of the new owner + + @return: False if failed, True if success + + @note: The new owner must already have the chunk appended before the call + +Help on function set_target_assembler in module ida_idp: + +set_target_assembler(*args) -> 'bool' + set_target_assembler(asmnum) -> bool + + + Set target assembler. + + @param asmnum: number of assembler in the current processor module + (C++: int) + @return: success + +Help on function set_trace_file_desc in module ida_dbg: + +set_trace_file_desc(*args) -> 'bool' + set_trace_file_desc(filename, description) -> bool + + + Change the description of the specified trace file. + + + @param filename (C++: const char *) + @param description (C++: const char *) + +Help on function split_sreg_range in module idc: + +split_sreg_range(ea, reg, value, tag=2) + Set value of a segment register. + + @param ea: linear address + @param reg: name of a register, like "cs", "ds", "es", etc. + @param value: new value of the segment register. + @param tag: of SR_... constants + + @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. + +Help on function start_process in module ida_dbg: + +start_process(*args) -> 'int' + start_process(path=None, args=None, sdir=None) -> int + + + Start a process in the debugger. \sq{Type, Asynchronous function - + available as Request, Notification, 'dbg_process_start' }You can also + use the 'run_to()' function to easily start the execution of a process + until a given address is reached.For all parameters, a NULL value + indicates the debugger will take the value from the defined Process + Options. + + @param path: path to the executable to start (C++: const char *) + @param args: arguments to pass to process (C++: const char *) + @param sdir: starting directory for the process (C++: const char *) + +Help on function step_into in module ida_dbg: + +step_into(*args) -> 'bool' + step_into() -> bool + + + Execute one instruction in the current thread. Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_into' } + +Help on function step_over in module ida_dbg: + +step_over(*args) -> 'bool' + step_over() -> bool + + + Execute one instruction in the current thread, but without entering + into functions. Others threads keep suspended. \sq{Type, Asynchronous + function - available as Request, Notification, 'dbg_step_over' } + +Help on function step_until_ret in module ida_dbg: + +step_until_ret(*args) -> 'bool' + step_until_ret() -> bool + + + Execute instructions in the current thread until a function return + instruction is executed (aka "step out"). Other threads are kept + suspended. \sq{Type, Asynchronous function - available as Request, + Notification, 'dbg_step_until_ret' } + +Help on function strlen in module idc: + +strlen(s) + +Help on function strstr in module idc: + +strstr(s1, s2) + +Help on function substr in module idc: + +substr(s, x1, x2) + +Help on function suspend_process in module ida_dbg: + +suspend_process(*args) -> 'bool' + suspend_process() -> bool + + + Suspend the process in the debugger. \sq{ Type,Synchronous function + (if in a notification handler)Asynchronous function (everywhere + else)available as Request, Notification,none (if in a notification + handler) 'dbg_suspend_process' (everywhere else) }The + 'suspend_process()' function can be called from a notification handler + to force the stopping of the process. In this case, no notification + will be generated. When you suspend a process, the running command is + always aborted. + +Help on function suspend_thread in module ida_dbg: + +suspend_thread(*args) -> 'int' + suspend_thread(tid) -> int + + + Suspend thread. Suspending a thread may deadlock the whole application + if the suspended was owning some synchronization objects. \sq{Type, + Synchronous function - available as request, Notification, none + (synchronous function)} + + @param tid: thread id (C++: thid_t) + +Help on function take_memory_snapshot in module ida_segment: + +take_memory_snapshot(*args) -> 'bool' + take_memory_snapshot(only_loader_segs) -> bool + + + Take a memory snapshot of the running process. + + @param only_loader_segs: only is_loader_segm() segments will be + affected (C++: bool) + @return: success + +Help on function to_ea in module idc: + +to_ea(seg, off) + Return value of expression: ((seg<<4) + off) + +Help on function toggle_bnot in module idc: + +toggle_bnot(ea, n) + Toggle the bitwise not operator for the operand + + @param ea: linear address + @param n: number of operand + - 0 - the first operand + - 1 - the second, third and all other operands + - -1 - all operands + +Help on function toggle_sign in module ida_bytes: + +toggle_sign(*args) -> 'bool' + toggle_sign(ea, n) -> bool + + + Toggle sign of n-th operand. allowed values of n: 0-first operand, + 1-other operands + + @param ea (C++: ea_t) + @param n (C++: int) + +Help on function update_extra_cmt in module ida_lines: + +update_extra_cmt(*args) -> 'void' + update_extra_cmt(ea, what, str) + +Help on function update_hidden_range in module idc: + +update_hidden_range(ea, visible) + Set hidden range state + + @param ea: any address belonging to the hidden range + @param visible: new state of the range + + @return: != 0 - ok + +Help on function validate_idb_names in module idc: + +validate_idb_names(do_repair=0) + check consistency of IDB name records + @param do_repair: try to repair netnode header it TRUE + @return: number of inconsistent name records + +Help on function value_is_float in module idc: + +value_is_float(var) + +Help on function value_is_func in module idc: + +value_is_func(var) + +Help on function value_is_int64 in module idc: + +value_is_int64(var) + +Help on function value_is_long in module idc: + +value_is_long(var) + +Help on function value_is_pvoid in module idc: + +value_is_pvoid(var) + +Help on function value_is_string in module idc: + +value_is_string(var) + # List of built-in functions + # -------------------------- + # + # The following conventions are used in this list: + # 'ea' is a linear address + # 'success' is 0 if a function failed, 1 otherwise + # 'void' means that function returns no meaningful value (always 0) + # + # All function parameter conversions are made automatically. + # + # ---------------------------------------------------------------------------- + # M I S C E L L A N E O U S + # ---------------------------------------------------------------------------- + +Help on function wait_for_next_event in module ida_dbg: + +wait_for_next_event(*args) -> 'dbg_event_code_t' + wait_for_next_event(wfne, timeout) -> dbg_event_code_t + + + Wait for the next event.This function (optionally) resumes the process + execution, and waits for a debugger event until a possible timeout + occurs. + + @param wfne: combination of Wait for debugger event flags constants + (C++: int) + @param timeout: number of seconds to wait, -1-infinity (C++: int) + @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= + 0) + +Help on function warning in module ida_kernwin: + +warning(*args) -> 'void' + warning(format) + + + Display a message in a message box + + @param message: message to print (formatting is done in Python) + + This function can be used to debug IDAPython scripts + The user will be able to hide messages if they appear twice in a row on + the screen + +Help on function write_dbg_memory in module idc: + +write_dbg_memory(ea, data) + Write to debugger memory. + + @param ea: linear address + @param data: string to write + @return: number of written bytes (-1 - network/debugger error) + + Thread-safe function (may be called only from the main thread and debthread) + +Help on function writelong in module idc: + +writelong(handle, dword, mostfirst) + +Help on function writeshort in module idc: + +writeshort(handle, word, mostfirst) + +Help on function writestr in module idc: + +writestr(handle, s) + +Help on function xtol in module idc: + +xtol(s) + diff --git a/swig/bytes.i b/swig/bytes.i index cf53bba..f88ea18 100644 --- a/swig/bytes.i +++ b/swig/bytes.i @@ -184,8 +184,7 @@ %include "bytes.hpp" -%apply (char *STRING, int LENGTH) { (const uchar *image, size_t len) }; -%apply (char *) { (const uchar *mask) }; +%apply (const bytevec_t &_fields) { const bytevec_t &imask }; %clear(void *buf, ssize_t size); diff --git a/swig/dbg.i b/swig/dbg.i index aed639f..97d2a71 100644 --- a/swig/dbg.i +++ b/swig/dbg.i @@ -98,28 +98,29 @@ bool request_run_to(ea_t ea, pid_t pid = NO_PROCESS, thid_t tid = NO_THREAD); %{ PyObject *bpt_t_condition_get(bpt_t *bpt) { - return PyString_FromString(bpt->cndbody.c_str()); + return IDAPyStr_FromUTF8(bpt->cndbody.c_str()); } void bpt_t_condition_set(bpt_t *bpt, PyObject *val) { - if ( PyString_Check(val) ) - bpt->cndbody = PyString_AsString(val); + if ( IDAPyStr_Check(val) ) + IDAPyStr_AsUTF8(&bpt->cndbody, val); else PyErr_SetString(PyExc_ValueError, "expected a string"); } PyObject *bpt_t_elang_get(bpt_t *bpt) { - return PyString_FromString(bpt->get_cnd_elang()); + return IDAPyStr_FromUTF8(bpt->get_cnd_elang()); } void bpt_t_elang_set(bpt_t *bpt, PyObject *val) { - if ( PyString_Check(val) ) + if ( IDAPyStr_Check(val) ) { - char *cval = PyString_AsString(val); - if ( !bpt->set_cnd_elang(cval) ) + qstring cval; + IDAPyStr_AsUTF8(&cval, val); + if ( !bpt->set_cnd_elang(cval.c_str()) ) PyErr_SetString(PyExc_ValueError, "too many extlangs"); } else @@ -136,7 +137,7 @@ void bpt_t_elang_set(bpt_t *bpt, PyObject *val) { PyObject *get_bytes() const { - return PyString_FromStringAndSize( + return IDAPyBytes_FromMemAndSize( (const char *) $self->bytes.begin(), $self->bytes.size()); } diff --git a/swig/diskio.i b/swig/diskio.i index cd3d9ca..7c1d113 100644 --- a/swig/diskio.i +++ b/swig/diskio.i @@ -51,6 +51,8 @@ // %ignore fopenM; // %ignore fopenA; +%apply Pointer NONNULL { linput_t *li }; + %ignore qfsize; %ignore echsize; %ignore get_free_disk_space; diff --git a/swig/enum.i b/swig/enum.i index 03b76ee..497e40f 100644 --- a/swig/enum.i +++ b/swig/enum.i @@ -1,7 +1,7 @@ %{ #include %} -%ignore get_enum_name(tid_t); +%ignore get_enum_name(tid_t, int); %constant bmask_t DEFMASK = bmask_t(-1); diff --git a/swig/expr.i b/swig/expr.i index 967a4f6..af96bdb 100644 --- a/swig/expr.i +++ b/swig/expr.i @@ -91,8 +91,13 @@ %extend idc_value_t { + wrapped_array_t __get_e() { + return wrapped_array_t($self->e); + } + %pythoncode { str = property(lambda self: self.c_str(), lambda self, v: self.set_string(v)) + e = property(__get_e) } } diff --git a/swig/funcs.i b/swig/funcs.i index 931853d..f6d311d 100644 --- a/swig/funcs.i +++ b/swig/funcs.i @@ -49,6 +49,20 @@ } } +%rename (__next__) next; + +%define %make_python2_iterator(TYPE) +%extend TYPE +{ + %pythoncode { + next = __next__ + } +} +%enddef +%make_python2_iterator(func_tail_iterator_t); +%make_python2_iterator(func_item_iterator_t); +%make_python2_iterator(func_parent_iterator_t); + // // diff --git a/swig/hexrays.i b/swig/hexrays.i index 27f385b..4e21d4d 100644 --- a/swig/hexrays.i +++ b/swig/hexrays.i @@ -211,6 +211,12 @@ static void _kludge_use_TPopupMenu(TPopupMenu *m); %newobject gen_microcode; %define_hexrays_lifecycle_object(mbl_array_t); +#ifdef PY3 +%const_void_pointer_and_size(uchar, bytes, nbytes); +#else +%apply (char *STRING, int LENGTH) { (const uchar *bytes, size_t nbytes) }; +%apply Pointer NONNULL { const uchar *bytes }; +#endif %define_hexrays_lifecycle_object(valrng_t); %apply ulonglong *OUTPUT { uvlr_t *v }; // valrng_t::cvt_to_single_value @@ -340,7 +346,7 @@ public: return True def _acquire_ownership(self, v, acquire): - if acquire and (v is not None) and not isinstance(v, (int, long)): + if acquire and (v is not None) and not isinstance(v, ida_idaapi.integer_types): if not v.thisown: raise Exception("%s is already owned, and cannot be reused" % v) v.thisown = False @@ -495,6 +501,20 @@ public: } %monitored_lifecycle_object_t(minsn_t); +%typemap(in,numinputs=0) (mop_t **other) (mop_t *tmp_op) +{ + // %typemap(in,numinputs=0) (mop_t **other) + $1 = &tmp_op; +} +%typemap(argout) (mop_t **other) +{ + // %typemap(argout) (mop_t **other) + $result = Py_BuildValue( + "(OO)", + $result, + SWIG_NewPointerObj(SWIG_as_voidptr(result != nullptr ? *$1 : nullptr), SWIGTYPE_p_mop_t, 0 | 0)); +} + //------------------------------------------------------------------------- // bitset_t @@ -507,7 +527,7 @@ public: __len__ = count def __iter__(self): it = self.begin() - for i in xrange(self.count()): + for i in range(self.count()): yield self.itv(it) self.inc(it) } @@ -582,7 +602,7 @@ cexpr_t *citem_t_cexpr_get(citem_t *item) { return (cexpr_t *) item; } CINSN_MEMBER_REF(goto); CINSN_MEMBER_REF(asm); - static bool insn_is_epilog(const cinsn_t *insn) const { return insn == INS_EPILOG; } + static bool insn_is_epilog(const cinsn_t *insn) { return insn == INS_EPILOG; } %pythoncode { def is_epilog(self): @@ -692,10 +712,10 @@ treeloc_t *ctree_item_t_loc_get(ctree_item_t *item) { return item->citype == VDI }; // ignore future declarations of at() for these classes -%ignore qvector< cinsn_t *>::at(size_t) const; -%ignore qvector< cinsn_t *>::at(size_t); -%ignore qvector< citem_t *>::at(size_t) const; -%ignore qvector< citem_t *>::at(size_t); +/* %ignore qvector< cinsn_t *>::at(size_t) const; */ +/* %ignore qvector< cinsn_t *>::at(size_t); */ +/* %ignore qvector< citem_t *>::at(size_t) const; */ +/* %ignore qvector< citem_t *>::at(size_t); */ %ignore qvector< citem_t *>::grow; %ignore qvector< cinsn_t *>::grow; @@ -777,9 +797,12 @@ typedef qlist::iterator qlist_cinsn_t_iterator; class qlist_cinsn_t_iterator {}; %extend qlist_cinsn_t_iterator { const cinsn_t &cur { return *(*self); } - void next(void) { (*self)++; } + void __next__(void) { (*self)++; } bool operator==(const qlist_cinsn_t_iterator *x) const { return &(self->operator*()) == &(x->operator*()); } bool operator!=(const qlist_cinsn_t_iterator *x) const { return &(self->operator*()) != &(x->operator*()); } + %pythoncode { + next = __next__ + } }; %extend qlist { @@ -856,7 +879,7 @@ void qswap(cinsn_t &a, cinsn_t &b); %rename (get_widget_vdui) py_get_widget_vdui; //------------------------------------------------------------------------- -#if SWIG_VERSION == 0x20012 +#if SWIG_VERSION == 0x40000 || SWIG_VERSION == 0x40001 %typemap(out) cfuncptr_t {} %typemap(ret) cfuncptr_t { diff --git a/swig/idaapi.i b/swig/idaapi.i index 5cfa0c4..a5d216f 100644 --- a/swig/idaapi.i +++ b/swig/idaapi.i @@ -36,6 +36,11 @@ // %} +%pythoncode %{ +import types +uses_swig_builtins = isinstance(get_inf_structure, types.BuiltinFunctionType) +%} + //------------------------------------------------------------------------- %inline %{ // diff --git a/swig/idp.i b/swig/idp.i index 3bb066a..f5c357f 100644 --- a/swig/idp.i +++ b/swig/idp.i @@ -33,7 +33,7 @@ struct undo_records_t; %ignore parse_config_value; %define_Hooks_class(IDP); -%ignore _wrap_addr_in_pycobject; +%ignore _wrap_addr_in_pycapsule; %ignore s_preline; %ignore ca_operation_t; diff --git a/swig/kernwin.i b/swig/kernwin.i index bf64616..36ccd6a 100644 --- a/swig/kernwin.i +++ b/swig/kernwin.i @@ -54,7 +54,12 @@ extern plugin_t PLUGIN; %calls_execute_sync(clr_cancelled); %calls_execute_sync(set_cancelled); %calls_execute_sync(user_cancelled); -%calls_execute_sync(hide_wait_box); +%calls_execute_sync(py_hide_wait_box); + +%ignore show_wait_box; +%rename (show_wait_box) py_show_wait_box; +%ignore hide_wait_box; +%rename (hide_wait_box) py_hide_wait_box; %ignore choose_idasgn; %rename (choose_idasgn) py_choose_idasgn; @@ -147,17 +152,16 @@ extern plugin_t PLUGIN; %ignore jobj_wrapper_t::~jobj_wrapper_t; %ignore jobj_wrapper_t::fill_jobj_from_dict; -// We will %ignore those ATM, since they cannot be trivially -// wrapped: bytevec_t is not exposed. -// (besides, serializing/deserializing should probably -// be done by locstack_t instances only.) -%ignore place_t::serialize; %ignore place_t__serialize; -%ignore place_t::deserialize; +%ignore place_t::deserialize(const uchar **pptr, const uchar *end); %ignore place_t__deserialize; %ignore place_t::generate; %ignore place_t__generate; %rename (generate) py_generate; +%newobject place_t::clone; + +// For place_t::serialize() +%apply bytevec_t *vout { bytevec_t *out }; %ignore register_place_class; %ignore register_loc_converter; @@ -200,18 +204,18 @@ struct py_action_handler_t : public action_handler_t if ( !has_activate ) return 0; PYW_GIL_GET_AND_REPORT_ERROR; - newref_t pyctx(SWIG_NewPointerObj(SWIG_as_voidptr(ctx), SWIGTYPE_p_action_ctx_base_t, 0)); + newref_t pyctx(SWIG_InternalNewPointerObj(SWIG_as_voidptr(ctx), SWIGTYPE_p_action_ctx_base_t, 0)); newref_t pyres(PyObject_CallMethod(pyah.o, (char *)"activate", (char *) "O", pyctx.o)); - return PyErr_Occurred() ? 0 : ((pyres != NULL && PyInt_Check(pyres.o)) ? PyInt_AsLong(pyres.o) : 0); + return PyErr_Occurred() ? 0 : ((pyres != NULL && IDAPyInt_Check(pyres.o)) ? IDAPyInt_AsLong(pyres.o) : 0); } virtual action_state_t idaapi update(action_update_ctx_t *ctx) { if ( !has_update ) return AST_DISABLE; PYW_GIL_GET_AND_REPORT_ERROR; - newref_t pyctx(SWIG_NewPointerObj(SWIG_as_voidptr(ctx), SWIGTYPE_p_action_ctx_base_t, 0)); + newref_t pyctx(SWIG_InternalNewPointerObj(SWIG_as_voidptr(ctx), SWIGTYPE_p_action_ctx_base_t, 0)); newref_t pyres(PyObject_CallMethod(pyah.o, (char *)"update", (char *) "O", pyctx.o)); - return PyErr_Occurred() ? AST_DISABLE_ALWAYS : ((pyres != NULL && PyInt_Check(pyres.o)) ? action_state_t(PyInt_AsLong(pyres.o)) : AST_DISABLE); + return PyErr_Occurred() ? AST_DISABLE_ALWAYS : ((pyres != NULL && IDAPyInt_Check(pyres.o)) ? action_state_t(IDAPyInt_AsLong(pyres.o)) : AST_DISABLE); } private: @@ -270,6 +274,14 @@ SWIG_DECLARE_PY_CLINKED_OBJECT(textctrl_info_t) %uncomparable_elements_qvector(disasm_line_t, disasm_text_t); +%extend place_t { + virtual bool idaapi deserialize(const bytevec_t &in) + { + const uchar *ptr = in.begin(); + return $self->deserialize(&ptr, ptr + in.size()); + } +} + %extend action_desc_t { action_desc_t( const char *name, @@ -327,11 +339,15 @@ SWIG_DECLARE_PY_CLINKED_OBJECT(textctrl_info_t) } //------------------------------------------------------------------------- +%newobject place_t::as_idaplace_t; +%newobject place_t::as_enumplace_t; +%newobject place_t::as_structplace_t; +%newobject place_t::as_simpleline_place_t; %extend place_t { - static idaplace_t *as_idaplace_t(place_t *p) { return (idaplace_t *) p; } - static enumplace_t *as_enumplace_t(place_t *p) { return (enumplace_t *) p; } - static structplace_t *as_structplace_t(place_t *p) { return (structplace_t *) p; } - static simpleline_place_t *as_simpleline_place_t(place_t *p) { return (simpleline_place_t *) p; } + static idaplace_t *as_idaplace_t(place_t *p) { return (idaplace_t *) p->clone(); } + static enumplace_t *as_enumplace_t(place_t *p) { return (enumplace_t *) p->clone(); } + static structplace_t *as_structplace_t(place_t *p) { return (structplace_t *) p->clone(); } + static simpleline_place_t *as_simpleline_place_t(place_t *p) { return (simpleline_place_t *) p->clone(); } PyObject *py_generate(void *ud, int maxsize) { diff --git a/swig/lines.i b/swig/lines.i index c297d64..bc9a8eb 100644 --- a/swig/lines.i +++ b/swig/lines.i @@ -40,7 +40,7 @@ Py_XDECREF(resultobj); if (result >= 0) { - resultobj = PyString_FromStringAndSize((const char *) $1->c_str(), $1->length()); + resultobj = IDAPyStr_FromUTF8AndSize((const char *) $1->c_str(), $1->length()); } else { diff --git a/swig/loader.i b/swig/loader.i index 2e96910..8e86d12 100644 --- a/swig/loader.i +++ b/swig/loader.i @@ -83,11 +83,11 @@ %ignore extract_module_from_archive; %rename (extract_module_from_archive) py_extract_module_from_archive; -%extend qvector< snapshot_t *> { - snapshot_t *at(size_t n) { return self->at(n); } -}; -%ignore qvector< snapshot_t *>::at(size_t) const; -%ignore qvector< snapshot_t *>::at(size_t); +/* %extend qvector< snapshot_t *> { */ +/* snapshot_t *at(size_t n) { return self->at(n); } */ +/* }; */ +/* %ignore qvector< snapshot_t *>::at(size_t) const; */ +/* %ignore qvector< snapshot_t *>::at(size_t); */ %ignore qvector< snapshot_t *>::grow; %template(qvector_snapshotvec_t) qvector; diff --git a/swig/lumina.i b/swig/lumina.i index 85e93fe..bc0a745 100644 --- a/swig/lumina.i +++ b/swig/lumina.i @@ -75,17 +75,35 @@ //------------------------------------------------------------------------- // metadata_t //------------------------------------------------------------------------- -%bytes_container(metadata_t *, metadata_t, begin, size,); -%bytes_container(metadata_t &, metadata_t, begin, size,); +#ifdef PY3 +%bytes_container_ptr_and_ref( + metadata_t, + begin, + size, + , + IDAPyBytes_Check, + IDAPyBytes_AsBytes, + IDAPyBytes_FromMemAndSize, + _sized_binary_result, + _maybe_sized_binary_result, + "bytes", + "bytes"); +#else +%bytes_container_ptr_and_ref( + metadata_t, + begin, + size, + , + IDAPyBytes_Check, + IDAPyBytes_AsBytes, + IDAPyBytes_FromMemAndSize, + _sized_binary_result, + _maybe_sized_binary_result, + "string", + "str"); +#endif -%typemap(argout) (qstring *errbuf) { - if ( !$1->empty() ) - { - if ( $result != NULL ) - delete $result; - SWIG_exception_fail(SWIG_RuntimeError, $1->c_str()); - } -} +%make_argout_errbuf_raise_exception_when_non_empty(); %uncomparable_elements_qvector(func_info_t, func_info_vec_t); %uncomparable_elements_qvector(func_info_and_frequency_t, func_info_and_frequency_vec_t); @@ -103,15 +121,13 @@ //------------------------------------------------------------------------- %typemap(in) (const uchar *ptr, const uchar *end) // for _wrap_extract_..._from_metadata { - if ( !PyString_Check($input) ) + if ( !IDAPyStr_Check($input) ) SWIG_exception_fail(SWIG_TypeError, "Expected string in method '$symname', argument $argnum of type 'str'"); - char *buf = NULL; - Py_ssize_t length = 0; - int success = PyString_AsStringAndSize($input, &buf, &length); - if ( success >= 0 ) + qstring buf; + if ( IDAPyStr_AsUTF8(&buf, $input) ) { - $1 = (uchar *) buf; - $2 = $1 + length; + $1 = (uchar *) buf.c_str(); + $2 = $1 + buf.length(); QASSERT(30575, $2 >= $1); } } @@ -120,7 +136,7 @@ %typemap(argout) (metadata_t *out_md) { // bytes_container typemap(argout) (metadata_t *out_md) - PyObject *py_md = PyString_FromStringAndSize((const char *) $1->begin(), $1->size()); + PyObject *py_md = IDAPyBytes_FromMemAndSize((const char *) $1->begin(), $1->size()); $result = SWIG_Python_AppendOutput($result, py_md); } @@ -131,11 +147,10 @@ %typemap(in) md5_t *md5 // for _wrap_input_file_t_md5_set { // typemap(in) md5_t * - char *buf = NULL; - Py_ssize_t length = 0; - /*int success =*/ PyString_AsStringAndSize($input, &buf, &length); + qstring buf; + IDAPyStr_AsUTF8(&buf, $input); $1 = new md5_t; - memmove($1->hash, buf, qmin(sizeof($1->hash), length)); + memmove($1->hash, buf.c_str(), qmin(sizeof($1->hash), buf.length())); } %typemap(freearg) md5_t *md5 // for _wrap_input_file_t_md5_set @@ -146,7 +161,7 @@ %typemap(out) md5_t * { // typemap(out) md5_t * - $result = PyString_FromStringAndSize((const char *) $1->hash, sizeof($1->hash)); + $result = IDAPyBytes_FromMemAndSize((const char *) $1->hash, sizeof($1->hash)); } // suppress the output parameter as an input. @@ -158,7 +173,7 @@ %typemap(argout) (md5_t *out) { // typemap(argout) (md5_t *out) - PyObject *py_hash = PyString_FromStringAndSize((const char *) $1->hash, sizeof($1->hash)); + PyObject *py_hash = IDAPyBytes_FromMemAndSize((const char *) $1->hash, sizeof($1->hash)); $result = SWIG_Python_AppendOutput($result, py_hash); } diff --git a/swig/moves.i b/swig/moves.i index 6962774..3cce9eb 100644 --- a/swig/moves.i +++ b/swig/moves.i @@ -20,6 +20,8 @@ %template(segm_move_info_vec_t) qvector; +%apply SWIGTYPE *DISOWN { place_t *in_p }; + %inline %{ // // diff --git a/swig/nalt.i b/swig/nalt.i index 7471d9b..b466a06 100644 --- a/swig/nalt.i +++ b/swig/nalt.i @@ -117,6 +117,12 @@ } } +%extend printop_t { + %pythoncode { + is_ti_valid = property(is_ti_initialized, set_ti_initialized) + } +} + %ignore switch_info_t::version; %apply uchar { op_dtype_t regdtype }; diff --git a/swig/netnode.i b/swig/netnode.i index d947c8b..1e36213 100644 --- a/swig/netnode.i +++ b/swig/netnode.i @@ -130,7 +130,7 @@ bytevec_t blob; if ( self->getblob(&blob, start, uchar(tag)) <= 0 ) Py_RETURN_NONE; - return PyString_FromStringAndSize((const char *)blob.begin(), blob.size()); + return IDAPyBytes_FromMemAndSize((const char *)blob.begin(), blob.size()); } PyObject *getclob(nodeidx_t start, char tag) @@ -138,7 +138,7 @@ qstring clob; if ( self->getblob(&clob, start, uchar(tag)) <= 0 ) Py_RETURN_NONE; - return PyString_FromStringAndSize((const char *)clob.begin(), clob.length()); + return IDAPyStr_FromUTF8AndSize((const char *)clob.begin(), clob.length()); } PyObject *getblob_ea(ea_t ea, char tag) @@ -146,7 +146,7 @@ bytevec_t blob; if ( self->getblob(&blob, ea, tag) <= 0 ) Py_RETURN_NONE; - return PyString_FromStringAndSize((const char *)blob.begin(), blob.size()); + return IDAPyBytes_FromMemAndSize((const char *)blob.begin(), blob.size()); } PyObject *hashstr_buf(const char *idx, char tag=htag) @@ -156,15 +156,25 @@ if ( sz < 0 ) Py_RETURN_NONE; else - return PyString_FromStringAndSize(buf, sz); + return IDAPyStr_FromUTF8AndSize(buf, sz); } bool hashset_buf(const char *idx, PyObject *py_str, char tag=htag) { - char *buf; - Py_ssize_t sz; - if ( PyString_AsStringAndSize(py_str, &buf, &sz) == -1 ) - return false; - return self->hashset(idx, buf, sz, uchar(tag)); + qstring buf; + return IDAPyStr_AsUTF8(&buf, py_str) + && self->hashset(idx, buf.c_str(), buf.length(), uchar(tag)); } + +#ifdef PY3 + bool supset(nodeidx_t alt, const char *value, size_t length=0, uchar tag=stag) + { + return self->supset(alt, (void *) value, length, tag); + } + + bool supset_ea(ea_t ea, const char *value, size_t length=0, uchar tag=stag) + { + return self->supset_ea(ea, (void *) value, length, tag); + } +#endif } diff --git a/swig/pro.i b/swig/pro.i index 0ad487a..917e09f 100644 --- a/swig/pro.i +++ b/swig/pro.i @@ -37,6 +37,15 @@ %ignore round_up_power2; %ignore round_down_power2; %ignore unpack_memory; +%ignore cliopt_t; +%ignore cliopts_t; + +%extend qrefcnt_t { + size_t __ptrval__() const + { + return size_t($self->operator T *()); + } +} // // diff --git a/swig/range.i b/swig/range.i index cae3eef..8d82eff 100644 --- a/swig/range.i +++ b/swig/range.i @@ -17,10 +17,21 @@ def __getitem__(self, idx): return self.getrange(idx) - import ida_idaapi __len__ = nranges __iter__ = ida_idaapi._bounded_getitem_iterator } }; +%extend range_t { + %pythoncode { + startEA = ida_idaapi._make_badattr_property("startEA", "start_ea") + endEA = ida_idaapi._make_badattr_property("endEA", "end_ea") + } +}; + +%pythoncode %{ +# +# +%} + %include "range.hpp" diff --git a/swig/strlist.i b/swig/strlist.i index 1c70e5b..445f796 100644 --- a/swig/strlist.i +++ b/swig/strlist.i @@ -28,9 +28,9 @@ for ( size_t i = 0; i < n; ++i ) { newref_t pyo(PySequence_GetItem(py_t, i)); - if ( PyInt_Check(pyo.o) ) + if ( IDAPyInt_Check(pyo.o) ) { - long stype = PyInt_AsLong(pyo.o); + long stype = IDAPyInt_AsLong(pyo.o); if ( stype < 0 || stype >= 0x100 ) { PyErr_SetString(PyExc_ValueError, "values must be between 0 & 0x100"); diff --git a/swig/struct.i b/swig/struct.i index 899cd30..e3d57b2 100644 --- a/swig/struct.i +++ b/swig/struct.i @@ -3,7 +3,7 @@ %} // Kernel-only symbols %ignore save_structs; -%ignore get_struc_name(tid_t); +%ignore get_struc_name(tid_t, int); %ignore get_member_name(tid_t); %ignore get_member_by_id(tid_t, struc_t **); // allow version w/ qstring* only @@ -15,7 +15,7 @@ %typemap(argout) qstring *out_mname { if (result) { - %append_output(PyString_FromStringAndSize($1->begin(), $1->length())); + %append_output(IDAPyStr_FromUTF8AndSize($1->begin(), $1->length())); } else { diff --git a/swig/typeinf.i b/swig/typeinf.i index 2b8edd5..249480d 100644 --- a/swig/typeinf.i +++ b/swig/typeinf.i @@ -40,6 +40,7 @@ %ignore perform_funcarg_conversion; %ignore get_argloc_info; %ignore argloc_t::dstr; +%ignore argloc_t::consume_scattered(scattered_aloc_t *p); %ignore argpart_t::copy_from; %ignore get_numbered_type(const til_t *, uint32, const type_t **, const p_list **, const char **, const p_list **, sclass_t *); @@ -135,11 +136,20 @@ %ignore remove_custom_argloc; %ignore retrieve_custom_argloc; +%make_argout_errbuf_raise_when_null_result(); + %{ // // %} +%extend argloc_t { + void consume_scattered(const scattered_aloc_t &p) + { + $self->consume_scattered(new scattered_aloc_t(p)); + } +} + %extend til_t { til_t *base(int n) @@ -197,12 +207,22 @@ } %enddef -%tinfo_t_or_simple_tinfo_t_container_lifecycle(tinfo_t); %tinfo_t_or_simple_tinfo_t_container_lifecycle(ptr_type_data_t); %tinfo_t_or_simple_tinfo_t_container_lifecycle(array_type_data_t); %tinfo_t_or_simple_tinfo_t_container_lifecycle(func_type_data_t); %tinfo_t_or_simple_tinfo_t_container_lifecycle(udt_type_data_t); +// We can't use tinfo_t_or_simple_tinfo_t_container_lifecycle() for tinfo_t, +// as it would call til_register_python_tinfo_t_instance() a second time +// after '%typemap(out) tinfo_t *' already did it. +%extend tinfo_t { + ~tinfo_t(void) + { + til_deregister_python_tinfo_t_instance($self); + delete $self; + } +} + %ignore tinfo_t::~tinfo_t(void); %template(funcargvec_t) qvector; @@ -219,9 +239,7 @@ { bytevec_t bv; if ( $self->get_attr(key, &bv, all_attrs) ) - return PyString_FromStringAndSize( - (const char *) bv.begin(), - bv.size()); + return IDAPyStr_FromUTF8AndSize((const char *) bv.begin(), bv.size()); else Py_RETURN_NONE; } @@ -230,11 +248,6 @@ %feature("director") predicate_t; -%ignore load_til; -%rename (load_til) py_load_til; -%ignore load_til_header; -%rename (load_til_header) py_load_til_header; - %ignore remove_tinfo_pointer; %rename (remove_tinfo_pointer) py_remove_tinfo_pointer; @@ -249,8 +262,8 @@ // %typemap(in) const sclass_t * if ( $input == Py_None ) $1 = new sclass_t(sc_unk); - else if ( PyInt_Check($input) ) - $1 = new sclass_t(sclass_t(PyInt_AsLong($input))); + else if ( IDAPyInt_Check($input) ) + $1 = new sclass_t(sclass_t(IDAPyInt_AsLong($input))); else SWIG_exception_fail( SWIG_ValueError, diff --git a/swig/ua.i b/swig/ua.i index b754f89..d31b742 100644 --- a/swig/ua.i +++ b/swig/ua.i @@ -88,7 +88,7 @@ auxpref = property(__get_auxpref__, __set_auxpref__) def __iter__(self): - return (self.ops[idx] for idx in xrange(0, UA_MAXOP)) + return (self.ops[idx] for idx in range(0, UA_MAXOP)) def __getitem__(self, idx): """ @@ -143,6 +143,11 @@ %apply ea_t { adiff_t off }; %apply ea_t { adiff_t off }; +#ifdef PY3 +%apply uchar { char segpref }; +%apply uchar { char insnpref }; +#endif + %include "ua.hpp" %rename (decode_preceding_insn) py_decode_preceding_insn; diff --git a/tools/chkapi.py b/tools/chkapi.py index ae07e88..12d4979 100644 --- a/tools/chkapi.py +++ b/tools/chkapi.py @@ -1,46 +1,20 @@ from __future__ import with_statement from __future__ import print_function -import sys, optparse, re, pprint +import sys +import os +import argparse +import re +import six +import pprint -class TextStream: - def __init__(self, text): - self.text = text - self.point = 0 - self.maxpoint = len(self.text) - self.line_nr = 0 - self.char_nr = 0 +mydir, _ = os.path.split(__file__) +if mydir not in sys.path: + sys.path.append(mydir) - def line(self): - pt = self.point - self.advance_to_newline() - return self.text[pt : self.point] +import wrapper_utils - def char(self): - c, self.point = self.text[self.point], self.point + 1 - if c == '\n': - self.line_nr += 1 - self.char_nr = 0 - return c - - def advance_to_newline(self): - p = self.point - while self.text[p] != '\n': - p += 1 - p += 1 - self.line_nr += 1 - self.char_nr = 0 - self.point = p - - def empty(self): - return self.point >= self.maxpoint - - -def check_cpp(opts): - - api_contents = { - "functions" : [] - } +def check_cpp(args): functions_coherence_base = { # @@ -145,11 +119,11 @@ def check_cpp(opts): "_wrap_warning__varargs__" : { "nullptrcheck" : 1, # 1st arg - "mustcall" : "PyString_AsString", + "mustcall" : "IDAPyStr_AsUTF8", }, "_wrap_error__varargs__" : { "nullptrcheck" : 1, - "mustcall" : "PyString_AsString", + "mustcall" : "IDAPyStr_AsUTF8", }, "_wrap_tag_remove" : { "nullptrcheck" : 1, @@ -182,19 +156,19 @@ def check_cpp(opts): functions_coherence_hexrays = { "_wrap_cfuncptr_t___str__" : { - "mustcall" : ["cfunc_t___str__", "PyString_FromStringAndSize"], + "mustcall" : ["cfunc_t___str__", "IDAPyStr_FromUTF8AndSize"], }, "_wrap_cfunc_t___str__" : { - "mustcall" : ["cfunc_t___str__", "PyString_FromStringAndSize"], + "mustcall" : ["cfunc_t___str__", "IDAPyStr_FromUTF8AndSize"], }, "_wrap_hexrays_failure_t_desc" : { - "mustcall" : "PyString_FromStringAndSize", + "mustcall" : "IDAPyStr_FromUTF8AndSize", }, "_wrap_vd_failure_t_desc" : { - "mustcall" : "PyString_FromStringAndSize", + "mustcall" : "IDAPyStr_FromUTF8AndSize", }, "_wrap_create_field_name" : { - "mustcall" : "PyString_FromStringAndSize", + "mustcall" : "IDAPyStr_FromUTF8AndSize", }, "delete_qrefcnt_t_Sl_cfunc_t_Sg_" : { "mustcall" : "hexrays_deregister_python_clearable_instance", @@ -240,7 +214,7 @@ def check_cpp(opts): }, "mbl_array_t_serialize" : { "string" : "bytes_container typemap(argout) (bytevec_t &vout)", - "mustcall" : "PyString_FromStringAndSize", + "mustcall" : "_sized_binary_result", }, # @@ -264,7 +238,7 @@ def check_cpp(opts): } functions_coherence = functions_coherence_base.copy() - if opts.with_hexrays: + if args.with_hexrays: functions_coherence.update(functions_coherence_hexrays) # Mark all functions as not-spotted. @@ -272,103 +246,68 @@ def check_cpp(opts): chk = functions_coherence[fname] chk["spotted"] = False - def dbg(msg): - if opts.verbose: + def verb(msg): + if args.verbose: print("DEBUG: %s" % msg) - def is_fundecl(line): - if len(line) <= 2: - return False - if line[0:1].isspace(): - return False - if line[len(line)-1:] != "{": - return False - if line.find("(") == -1 or line.find(")") == -1: - return False - return True + api_functions_names = [] + for one_file in args.cpp_input.split(","): + verb("Handling file: '%s'" % one_file) + parser = wrapper_utils.cpp_wrapper_file_parser_t(args) + functions = parser.parse(one_file) - def collect_funbody_lines(ts): - pt = ts.point - braces_cnt = 1 - while True: - c = ts.char() - if c == "{": - braces_cnt = braces_cnt + 1 - elif c == "}": - braces_cnt = braces_cnt - 1 - if braces_cnt == 0: - break; - # TODO: Skip strings! - return ts.text[pt : ts.point].split("\n") - - api_fname_regex = re.compile(".*PyObject \\*_wrap_([^\\(]*)\\(.*\\).*") - - KICKME_functions_lines = {} - - # Read and go through lines - for one_file in opts.files.split(","): - with open(one_file, "r") as f: - raw = f.read() # ensure we have improved director out type reporting - if raw.find("""in output value of type '""int""'");""") > -1: + if parser.text.find("""in output value of type '""int""'");""") > -1: raise Exception("Director output value type reporting doesn't appear to be patched") - ts = TextStream(raw) - # Process lines - while not ts.empty(): - line = ts.line().rstrip() - # dbg("Line: '%s'" % line) + for fname, fdef in six.iteritems(functions): - if is_fundecl(line): - # dbg("Entering function (from line %d: '%s')" % (ts.line_nr, line)) - funstart = line - match = api_fname_regex.match(funstart) - if match: - fname = match.group(1) - api_contents["functions"].append(fname) - funlines = collect_funbody_lines(ts) - KICKME_functions_lines[fname] = funlines - # Do we care about this function? - check_for = None - for fname in functions_coherence.keys(): - if funstart.find(fname + "(") > -1: - check_for = fname - break - if check_for: - dbg("Checking function at line %d: '%s'" % (ts.line_nr, check_for)) - chk = functions_coherence[check_for] - chk["spotted"] = True - def look_for_stuff(stuff, is_funcall, lookForPresence=True): - if isinstance(stuff, str): - stuff = [stuff] - for bit in stuff: - found = False - bit_pat = ("%s(" % bit) if is_funcall else bit - dbg("Thing to look for: '%s'" % bit_pat) - for funline in funlines: - # dbg("Testing line: '%s'" % funline) - if funline.find(bit_pat) > -1: - found = True - break - if lookForPresence: - if not found: - raise Exception("Couldn't find '%s', from function '%s' (lines: %s)" % - (bit_pat, check_for, "\n".join([""] + funlines))) - else: - if found: - raise Exception("Did find unwanted '%s', from function '%s' (lines: %s)" % - (bit_pat, check_for, "\n".join([""] + funlines))) + if fdef.api_function_name: + api_functions_names.append(fdef.api_function_name) - if "mustcall" in chk: - look_for_stuff(chk["mustcall"], True) - if "string" in chk: - look_for_stuff(chk["string"], False) - if "nostring" in chk: - look_for_stuff(chk["nostring"], False, lookForPresence=False) - if "nullptrcheck" in chk: - look_for_stuff('"invalid null pointer " "in method \'" "%s" "\', argument " "%d""' % ( - fname.replace("_wrap_", "").replace("__varargs__", ""), - chk["nullptrcheck"]), False) + # Do we care about this function? + funstart = fdef.contents[0] + check_for = None + for fname in functions_coherence.keys(): + if funstart.find(fname + "(") > -1: + check_for = fname + break + + if check_for: + verb("Checking function at line %d: '%s'" % (fdef.line_nr, check_for)) + chk = functions_coherence[check_for] + chk["spotted"] = True + def look_for_stuff(stuff, is_funcall, lookForPresence=True): + if isinstance(stuff, str): + stuff = [stuff] + for bit in stuff: + found = False + bit_pat = ("%s(" % bit) if is_funcall else bit + verb("Thing to look for: '%s'" % bit_pat) + for funline in fdef.contents[1:]: + # verb("Testing line: '%s'" % funline) + if funline.find(bit_pat) > -1: + found = True + break + if lookForPresence: + if not found: + raise Exception("Couldn't find '%s', from function '%s' (lines: %s)" % + (bit_pat, check_for, "\n".join(fdef.contents))) + else: + if found: + raise Exception("Did find unwanted '%s', from function '%s' (lines: %s)" % + (bit_pat, check_for, "\n".join(fdef.contents))) + + if "mustcall" in chk: + look_for_stuff(chk["mustcall"], True) + if "string" in chk: + look_for_stuff(chk["string"], False) + if "nostring" in chk: + look_for_stuff(chk["nostring"], False, lookForPresence=False) + if "nullptrcheck" in chk: + look_for_stuff('"invalid null pointer " "in method \'" "%s" "\', argument " "%d""' % ( + fname.replace("_wrap_", "").replace("__varargs__", ""), + chk["nullptrcheck"]), False) # Ensure all functions were spotted. for fname in functions_coherence.keys(): @@ -377,7 +316,7 @@ def check_cpp(opts): raise Exception("Couldn't spot function '%s'" % fname) # Report contents - if opts.report_contents: + if args.report_contents: ignorable_functions = [ "citem_t___dbg_get_meminfo", @@ -407,21 +346,17 @@ def check_cpp(opts): ] to_report = sorted(filter( lambda fn: fn not in ignorable_functions, - api_contents["functions"])) + api_functions_names)) # NB: we use "wb" here so that the endlines # are written as-is, in Unix format # and so 'diff' does not report bogus changes # against the file from repository - with open(opts.report_contents, "wb") as f: - f.write(pprint.pformat({"functions" : to_report})) - - # import pickle - # with open("/tmp/funlines.last", "wb") as fo: - # pickle.dump(KICKME_functions_lines, fo) + with open(args.report_contents, "wb") as f: + f.write(pprint.pformat({"functions" : to_report}).encode("UTF-8")) -def check_python(opts): +def check_python(args): types_coherence_base = { "func_t" : { "mustinherit" : "ida_range.range_t" }, "hidden_range_t" : { "mustinherit" : "ida_range.range_t" }, @@ -489,7 +424,7 @@ def check_python(opts): } types_coherence = types_coherence_base.copy() - if opts.with_hexrays: + if args.with_hexrays: types_coherence.update(types_coherence_hexrays) # Mark all types as not-spotted. @@ -499,9 +434,9 @@ def check_python(opts): class_re = re.compile("^class ([a-zA-Z0-9_]*)\\(([a-zA-Z0-9_\\.]*)\\):") var_re = re.compile("^([a-zA-Z0-9_]*) = .*") - for one_file in opts.python_files.split(","): - with open(one_file, "r") as f: - ts = TextStream(f.read()) + for one_file in args.python_input.split(","): + with open(one_file) as f: + ts = wrapper_utils.TextStream(f.read()) while not ts.empty(): line = ts.line().rstrip() @@ -535,17 +470,17 @@ def check_python(opts): if __name__ == "__main__": - p = optparse.OptionParser(description='Check the generated idaapi_include.cpp file') - p.add_option('-v', "--verbose", dest="verbose", action="store_true") - p.add_option('-i', "--input", dest="files", type="string") - p.add_option('-p', "--python-input", dest="python_files", type="string") - p.add_option('-x', "--with-hexrays", dest="with_hexrays", action="store_true") - p.add_option('-r', "--report-contents", dest="report_contents", type="string") - opts, _ = p.parse_args(sys.argv[1:]) + p = argparse.ArgumentParser(description='Check the generated idaapi_include.cpp file') + p.add_argument('-v', "--verbose", action="store_true") + p.add_argument('-i', "--cpp-input", type=str) + p.add_argument('-p', "--python-input", type=str) + p.add_argument('-x', "--with-hexrays", action="store_true") + p.add_argument('-r', "--report-contents", type=str) + args = p.parse_args() - if not opts.files or not opts.python_files: + if not args.cpp_input or not args.python_input: p.print_help() sys.exit(1) - check_cpp(opts) - check_python(opts) + check_cpp(args) + check_python(args) diff --git a/tools/deploy.py b/tools/deploy.py index 1e5fa48..86cff53 100644 --- a/tools/deploy.py +++ b/tools/deploy.py @@ -123,7 +123,8 @@ def deploy(module, template, output, pywraps, iface_deps, lifecycle_aware, verbo output = convert_path(output) # read template file - template_str = "".join(file(template, "r").readlines()) + with open(template) as fin: + template_str = fin.read() # read input file(s) all_files = glob.glob(os.path.join(pywraps, "py_%s.*" % module)) + \ @@ -144,7 +145,8 @@ def deploy(module, template, output, pywraps, iface_deps, lifecycle_aware, verbo ('pycode_BC695', make_re('pycode_BC695', tagname, '#')), ) - input_str = "".join(file(path, "r").readlines()) + with open(path) as fin: + input_str = fin.read() template_str = apply_tags(template_str, input_str, tags, verbose, path) # synthetic tags diff --git a/tools/deploy/header.i.in b/tools/deploy/header.i.in index 0078cc1..d80a2d1 100644 --- a/tools/deploy/header.i.in +++ b/tools/deploy/header.i.in @@ -9,6 +9,12 @@ #define DEPRECATED %} +%{ +#include "../../../idapy.hpp" +%} + +#define SWIG_PYTHON_LEGACY_BOOL 1 + // Auto-inserted header // generate directors for all classes that have virtual methods %feature("director"); @@ -51,6 +57,11 @@ %ignore qvector::front; %ignore qvector::back; +%ignore qlist::iterator::operator--; +%ignore qlist::const_iterator::operator--; +%ignore qlist::reverse_iterator::operator--; +%ignore qlist::const_reverse_iterator::operator--; + %define %uncomparable_elements_qvector(ELEMENT_TYPE, VECTOR_TYPE) %ignore qvector::operator==; %ignore qvector::operator!=; @@ -171,12 +182,12 @@ import sys _BC695 = sys.modules["__main__"].IDAPYTHON_COMPAT_695_API if _BC695: - # This is a helper for replacing an existing function, with a wrapper - # providing backwards-compatibility for API 6.95 -- typically because - # the number/types of arguments changed, while the function name itself - # remained the same in 7.0. - # (Note that this shouldn't be used for functions that don't exist - # in the vanilla 7.0 API, such as 'choose_named_type2'.) + ## This is a helper for replacing an existing function, with a wrapper + ## providing backwards-compatibility for API 6.95 -- typically because + ## the number/types of arguments changed, while the function name itself + ## remained the same in 7.0. + ## (Note that this shouldn't be used for functions that don't exist + ## in the vanilla 7.0 API, such as 'choose_named_type2'.) def bc695redef(func): ida_idaapi._BC695.replace_fun(func) return func @@ -236,8 +247,8 @@ if _BC695: catch ( const std::bad_alloc &ba ) { __raise_ba(ba); SWIG_fail; } catch ( const std::out_of_range &e ) { __raise_oor(e); SWIG_fail; } catch ( const interr_exc_t &e ) { __raise_ie(e); SWIG_fail; }%ida_hexrays_wrapper_exception_catch() - catch ( const std::exception &e ) { __raise_e(e); SWIG_fail; } catch ( const Swig::DirectorException &e ) { __raise_de(e); SWIG_fail; } + catch ( const std::exception &e ) { __raise_e(e); SWIG_fail; } catch ( ... ) { __raise_u(); SWIG_fail; } } %enddef @@ -267,14 +278,14 @@ inline size_t strnlen(const char *s, size_t maxlen) static PyObject *type##_create() { PYW_GIL_CHECK_LOCKED_SCOPE(); - return PyCObject_FromVoidPtr(new type(), NULL); + return PyCapsule_New(new type(), VALID_CAPSULE_NAME, NULL); } static bool type##_destroy(PyObject *py_obj) { PYW_GIL_CHECK_LOCKED_SCOPE(); - if ( !PyCObject_Check(py_obj) ) + if ( !PyCapsule_IsValid(py_obj, VALID_CAPSULE_NAME) ) return false; - delete (type *)PyCObject_AsVoidPtr(py_obj); + delete (type *)PyCapsule_GetPointer(py_obj, VALID_CAPSULE_NAME); return true; } static type *type##_get_clink(PyObject *self) @@ -298,12 +309,47 @@ static PyObject *type##_get_clink_ptr(PyObject *self) %typemap(directorout) PyObject * "/*%dout%*/$result = result;Py_XINCREF($result);" //--------------------------------------------------------------------- -%define %treat_serialized_tinfo_raw_pointer_as_str(TYPE) +#ifdef PY3 +%define %treat_serialized_tinfo_raw_pointer_as_bytes_1(_TYPE) +%typemap(in) _TYPE * +{ // %treat_serialized_tinfo_raw_pointer_as_bytes_1 %typemap(in) _TYPE * + if ( $input == Py_None ) + $1 = ($1_ltype) NULL; + else if ( PyBytes_Check($input) ) + $1 = ($1_ltype) PyBytes_AsString($input); + else + SWIG_exception_fail( + SWIG_ValueError, + "Expected bytes " "in method '" "$symname" "', argument " "$argnum"" of type 'bytes'"); +} +%typemap(directorin) _TYPE * +{ // %treat_serialized_tinfo_raw_pointer_as_bytes_1 %typemap(directorin) _TYPE * + $input = PyBytes_FromString($1 != NULL ? (const char *) $1 : ""); +} +%typemap(out) _TYPE * +{ // %treat_serialized_tinfo_raw_pointer_as_bytes_1 %typemap(out) _TYPE * + $result = PyBytes_FromString($1 != NULL ? (const char *) $1 : ""); +} +// 'typecheck' typemaps are used for polymorphism. We want to favor +// tinfo_t wrappers at the expense of 'type_t *' ones, so we want the +// precedence for this to be very low. +%typemap(typecheck, precedence=SWIG_TYPECHECK_STRING_ARRAY) _TYPE * +{ // %treat_serialized_tinfo_raw_pointer_as_bytes_1 %typemap(typecheck) _TYPE * + $1 = ($input == Py_None || PyBytes_Check($input)) ? 1 : 0; +} +%enddef +%define %treat_serialized_tinfo_raw_pointer_as_bytes(TYPE) +%treat_serialized_tinfo_raw_pointer_as_bytes_1(TYPE); +%treat_serialized_tinfo_raw_pointer_as_bytes_1(const TYPE); +%enddef +#else +%define %treat_serialized_tinfo_raw_pointer_as_bytes(TYPE) %apply char * { TYPE * } %apply const char * { const TYPE * } %enddef -%treat_serialized_tinfo_raw_pointer_as_str(type_t); -%treat_serialized_tinfo_raw_pointer_as_str(p_list); +#endif +%treat_serialized_tinfo_raw_pointer_as_bytes(type_t); +%treat_serialized_tinfo_raw_pointer_as_bytes(p_list); //------------------------------------------------------------------------- // For some reason, SWIG converts char arrays by computing the size @@ -396,7 +442,16 @@ SWIGINTERN PyObject *_maybe_cstring_result( Py_XDECREF(resultobj); if ( result <= 0 ) Py_RETURN_NONE; - return PyString_FromString(cstr); + return IDAPyStr_FromUTF8(cstr); +} + +SWIGINTERN PyObject *_sized_cstring_result( + PyObject *resultobj, + const char *cstr, + size_t cstrsz) +{ + Py_XDECREF(resultobj); + return IDAPyStr_FromUTF8AndSize(cstr, cstrsz); } SWIGINTERN PyObject *_maybe_sized_cstring_result( @@ -408,7 +463,38 @@ SWIGINTERN PyObject *_maybe_sized_cstring_result( Py_XDECREF(resultobj); if ( result <= 0 ) Py_RETURN_NONE; - return PyString_FromStringAndSize(cstr, cstrsz); + return IDAPyStr_FromUTF8AndSize(cstr, cstrsz); +} + +SWIGINTERN PyObject *_maybe_cstring_result_on_charptr_using_allocated_buf( + PyObject *resultobj, + const char *result, + char *buf) +{ + Py_XDECREF(resultobj); + PyObject *out = NULL; + if ( result != NULL ) + { + out = IDAPyStr_FromUTF8(buf); + } + else + { + Py_INCREF(Py_None); + out = Py_None; + } + qfree(buf); + return out; +} + +SWIGINTERN PyObject *_maybe_cstring_result_on_charptr_using_qbuf( + PyObject *resultobj, + const char *result, + const qstring &buf) +{ + Py_XDECREF(resultobj); + if ( result == NULL ) + Py_RETURN_NONE; + return IDAPyStr_FromUTF8AndSize(buf.begin(), buf.length()); } SWIGINTERN PyObject *_maybe_binary_result( @@ -419,9 +505,60 @@ SWIGINTERN PyObject *_maybe_binary_result( Py_XDECREF(resultobj); if ( result <= 0 ) Py_RETURN_NONE; +#ifdef PY3 + return PyBytes_FromStringAndSize((const char *) buf, result); +#else return PyString_FromStringAndSize((const char *) buf, result); +#endif +} + +SWIGINTERN PyObject *_sized_binary_result( + PyObject *resultobj, + const char *cstr, + size_t cstrsz) +{ + Py_XDECREF(resultobj); + return IDAPyBytes_FromMemAndSize(cstr, cstrsz); +} + +SWIGINTERN PyObject *_maybe_sized_binary_result( + PyObject *resultobj, + const char *cstr, + size_t cstrsz, + int result) +{ + Py_XDECREF(resultobj); + if ( result <= 0 ) + Py_RETURN_NONE; + return IDAPyBytes_FromMemAndSize(cstr, cstrsz); +} + +%} + +#if defined(IDA_MODULE_NALT) +%{ +#include +SWIGINTERN PyObject *_maybe_byte_array_as_hex_or_none_result( + PyObject *resultobj, + bool result, + const uchar *bytes, + size_t nbytes) +{ + Py_XDECREF(resultobj); + if ( !result ) + Py_RETURN_NONE; + qstring buf; + buf.resize(2*nbytes); + get_hex_string(buf.begin(), buf.length(), bytes, nbytes); +#ifdef PY3 + return PyBytes_FromStringAndSize(buf.c_str(), buf.length()); +#else + return PyString_FromStringAndSize(buf.c_str(), buf.length()); +#endif } %} +#endif + //--------------------------------------------------------------------- @@ -465,17 +602,7 @@ SWIGINTERN PyObject *_maybe_binary_result( %define %cstring_output_buf_and_size_returning_charptr(BUFIDX, ...) %typemap(argout) (__VA_ARGS__) { // cstring_output_buf_and_size_returning_charptr's argout - Py_XDECREF(resultobj); - if (result != NULL) - { - resultobj = PyString_FromString($BUFIDX); - } - else - { - Py_INCREF(Py_None); - resultobj = Py_None; - } - qfree($BUFIDX); + resultobj = _maybe_cstring_result_on_charptr_using_allocated_buf(resultobj, (const char *) result, $BUFIDX); } %enddef @@ -485,16 +612,7 @@ SWIGINTERN PyObject *_maybe_binary_result( %typemap(argout) (__VA_ARGS__) { // %cstring_output_qstring_returning_charptr typemap(argout) __VA_ARGS__ - Py_XDECREF(resultobj); - if (result != NULL) - { - resultobj = PyString_FromStringAndSize($BUFIDX->begin(), $BUFIDX->length()); - } - else - { - Py_INCREF(Py_None); - resultobj = Py_None; - } + resultobj = _maybe_cstring_result_on_charptr_using_qbuf(resultobj, (const char *) result, *$BUFIDX); } %enddef @@ -524,18 +642,7 @@ SWIGINTERN PyObject *_maybe_binary_result( } %typemap(argout) uchar PARAM_NAME[ANY] { // byte_array_as_hex_or_none typemap(argout) uchar PARAM_NAME[ANY] - Py_XDECREF(resultobj); - if (result) - { - char buf[2*$1_dim0 + 1]; - get_hex_string(buf, sizeof(buf), $1, $1_dim0); - resultobj = PyString_FromString(buf); - } - else - { - Py_INCREF(Py_None); - resultobj = Py_None; - } + resultobj = _maybe_byte_array_as_hex_or_none_result(resultobj, result, $1, $1_dim0); } %enddef %byte_array_as_hex_or_none(hash); @@ -596,27 +703,66 @@ SWIGINTERN PyObject *_maybe_binary_result( //--------------------------------------------------------------------- // IN/OUT qstring/bytevec_t //--------------------------------------------------------------------- -%define %bytes_container(REFTYPE, CONTAINER_TYPE, START_ACCESSOR, SIZE_ACCESSOR, INSTANCE_CAST) +%define %bytes_container( + REFTYPE, + CONTAINER_TYPE, + START_ACCESSOR, + SIZE_ACCESSOR, + INSTANCE_CAST, + CHECKER, + IN_CONVERTER, + OUT_CONVERTER, + ARGOUT_CONVERTER, + ARGOUT_MAYBE_CONVERTER, + ELTYPE_TO_REPORT1, + ELTYPE_TO_REPORT2) %typemap(typecheck) REFTYPE { // bytes_container REFTYPE typemap(typecheck) - $1 = PyString_Check($input) ? 1 : 0; + $1 = CHECKER($input) ? 1 : 0; } -%typemap(in) REFTYPE -{ // bytes_container REFTYPE, CONTAINER_TYPE typemap(in) - if ( PyString_Check($input) ) +%fragment("cvt_" #CONTAINER_TYPE, "header") +{ + CONTAINER_TYPE *cvt_##CONTAINER_TYPE(PyObject *obj, bool can_be_none=false) { - // init properly, so ctor can't crash - char *buf = NULL; - Py_ssize_t length = 0; - /*int success =*/ PyString_AsStringAndSize($input, &buf, &length); - $1 = new CONTAINER_TYPE(INSTANCE_CAST buf, length); // build regardless of success + CONTAINER_TYPE *out = NULL; + if ( can_be_none && obj == Py_None ) + { + out = new CONTAINER_TYPE; + } + else if ( CHECKER(obj) ) + { + // init properly, so ctor can't crash + out = new CONTAINER_TYPE; + IN_CONVERTER(out, obj); + } + return out; } - else - { +} + +%typemap(in, fragment="cvt_" #CONTAINER_TYPE) REFTYPE +{ // bytes_container REFTYPE, CONTAINER_TYPE typemap(in) + $1 = cvt_ ## CONTAINER_TYPE($input); + if ( $1 == NULL ) SWIG_exception_fail( SWIG_ValueError, - "Expected string " "in method '" "$symname" "', argument " "$argnum"" of type 'str'"); - } + "Expected " ELTYPE_TO_REPORT1 " " "in method '" "$symname" "', argument " "$argnum"" of type '" ELTYPE_TO_REPORT2 "'"); +} + +%typemap(in) const REFTYPE _type_or_none +{ // bytes_container REFTYPE _type_or_none, CONTAINER_TYPE typemap(in) + $1 = cvt_ ## CONTAINER_TYPE($input, /*can_be_none=*/ true); + if ( $1 == NULL ) + SWIG_exception_fail( + SWIG_ValueError, + "Expected " ELTYPE_TO_REPORT1 " " "in method '" "$symname" "', argument " "$argnum"" of type '" ELTYPE_TO_REPORT2 "'"); +} +%typemap(in) const REFTYPE _fields +{ // bytes_container REFTYPE _fields, CONTAINER_TYPE typemap(in) + $1 = cvt_ ## CONTAINER_TYPE($input, /*can_be_none=*/ true); + if ( $1 == NULL ) + 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) @@ -624,15 +770,15 @@ SWIGINTERN PyObject *_maybe_binary_result( } %typemap(out) REFTYPE // e.g., %typemap(out) qstring* { // bytes_container typemap(out) REFTYPE - $result = PyString_FromStringAndSize((const char *) $1->START_ACCESSOR(), $1->SIZE_ACCESSOR()); + $result = OUT_CONVERTER((const char *) $1->START_ACCESSOR(), $1->SIZE_ACCESSOR()); } %typemap(out) CONTAINER_TYPE // e.g., %typemap(out) qstring { // bytes_container typemap(out) CONTAINER_TYPE - $result = PyString_FromStringAndSize((const char *) $1.START_ACCESSOR(), $1.SIZE_ACCESSOR()); + $result = OUT_CONVERTER((const char *) $1.START_ACCESSOR(), $1.SIZE_ACCESSOR()); } %typemap(varout) CONTAINER_TYPE // e.g., %typemap(varout) qstring { // bytes_container typemap(varout) CONTAINER_TYPE - $result = PyString_FromStringAndSize((const char *) $1.START_ACCESSOR(), $1.SIZE_ACCESSOR()); + $result = OUT_CONVERTER((const char *) $1.START_ACCESSOR(), $1.SIZE_ACCESSOR()); } // the following is used to turn a '... *result' output parameter, // into an actual return value. @@ -649,12 +795,12 @@ SWIGINTERN PyObject *_maybe_binary_result( %typemap(argout) CONTAINER_TYPE *result { // bytes_container typemap(argout) CONTAINER_TYPE *result - resultobj = _maybe_sized_cstring_result(resultobj, $1->START_ACCESSOR(), $1->SIZE_ACCESSOR(), int(result)); + resultobj = ARGOUT_MAYBE_CONVERTER(resultobj, $1->START_ACCESSOR(), $1->SIZE_ACCESSOR(), int(result)); } %typemap(argout) CONTAINER_TYPE &result { // bytes_container typemap(argout) CONTAINER_TYPE &result - resultobj = _maybe_sized_cstring_result(resultobj, $1->START_ACCESSOR(), $1->SIZE_ACCESSOR(), int(result)); + resultobj = ARGOUT_MAYBE_CONVERTER(resultobj, $1->START_ACCESSOR(), $1->SIZE_ACCESSOR(), int(result)); } %typemap(freearg) CONTAINER_TYPE* result { @@ -679,20 +825,18 @@ SWIGINTERN PyObject *_maybe_binary_result( %typemap(argout) (CONTAINER_TYPE *vout) { // bytes_container typemap(argout) (CONTAINER_TYPE *vout) - Py_XDECREF(resultobj); - resultobj = PyString_FromStringAndSize((const char *) $1->START_ACCESSOR(), $1->SIZE_ACCESSOR()); + resultobj = ARGOUT_CONVERTER(resultobj, (const char *) $1->START_ACCESSOR(), $1->SIZE_ACCESSOR()); } %typemap(argout) (CONTAINER_TYPE &vout) { // bytes_container typemap(argout) (CONTAINER_TYPE &vout) - Py_XDECREF(resultobj); - resultobj = PyString_FromStringAndSize((const char *) $1->START_ACCESSOR(), $1->SIZE_ACCESSOR()); + resultobj = ARGOUT_CONVERTER(resultobj, (const char *) $1->START_ACCESSOR(), $1->SIZE_ACCESSOR()); } %typemap(directorin) CONTAINER_TYPE * { // bytes_container typemap(directorin) CONTAINER_TYPE * if ( $1 != NULL ) { - $input = PyString_FromStringAndSize($1->START_ACCESSOR(), $1->SIZE_ACCESSOR()); + $input = OUT_CONVERTER($1->START_ACCESSOR(), $1->SIZE_ACCESSOR()); } else { @@ -702,25 +846,172 @@ SWIGINTERN PyObject *_maybe_binary_result( } %typemap(directorin) REFTYPE { // bytes_container typemap(directorin) REFTYPE - $input = PyString_FromStringAndSize($1.START_ACCESSOR(), $1.SIZE_ACCESSOR()); + $input = OUT_CONVERTER($1.START_ACCESSOR(), $1.SIZE_ACCESSOR()); } %enddef -%bytes_container(qstring *, qstring, c_str, length,); -%bytes_container(qstring &, qstring, c_str, length,); -%bytes_container(bytevec_t *, bytevec_t, begin, size,); -%bytes_container(bytevec_t &, bytevec_t, begin, size,); -%bytes_container(qtype *, qtype, begin, length, (const uchar *)); -%bytes_container(qtype &, qtype, begin, length, (const uchar *)); +%define %bytes_container_ptr_and_ref( + CONTAINER_TYPE, + START_ACCESSOR, + SIZE_ACCESSOR, + INSTANCE_CAST, + CHECKER, + IN_CONVERTER, + OUT_CONVERTER, + ARGOUT_CONVERTER, + ARGOUT_MAYBE_CONVERTER, + ELTYPE_TO_REPORT1, + ELTYPE_TO_REPORT2) +%bytes_container( + CONTAINER_TYPE *, + CONTAINER_TYPE, + START_ACCESSOR, + SIZE_ACCESSOR, + INSTANCE_CAST, + CHECKER, + IN_CONVERTER, + OUT_CONVERTER, + ARGOUT_CONVERTER, + ARGOUT_MAYBE_CONVERTER, + ELTYPE_TO_REPORT1, + ELTYPE_TO_REPORT2); +%bytes_container( + CONTAINER_TYPE &, + CONTAINER_TYPE, + START_ACCESSOR, + SIZE_ACCESSOR, + INSTANCE_CAST, + CHECKER, + IN_CONVERTER, + OUT_CONVERTER, + ARGOUT_CONVERTER, + ARGOUT_MAYBE_CONVERTER, + ELTYPE_TO_REPORT1, + ELTYPE_TO_REPORT2); +%enddef + + +#ifdef PY3 +%bytes_container_ptr_and_ref( + qstring, + c_str, + length, + , + IDAPyStr_Check, + IDAPyStr_AsUTF8, + IDAPyStr_FromUTF8AndSize, + _sized_cstring_result, + _maybe_sized_cstring_result, + "string", + "str"); +%bytes_container_ptr_and_ref( + bytevec_t, + begin, + size, + , + IDAPyBytes_Check, + IDAPyBytes_AsBytes, + IDAPyBytes_FromMemAndSize, + _sized_binary_result, + _maybe_sized_binary_result, + "bytes", + "bytes"); +%bytes_container_ptr_and_ref( + qtype, + begin, + length, + (const uchar *), + IDAPyBytes_Check, + IDAPyBytes_as_qtype, + IDAPyBytes_FromMemAndSize, + _sized_binary_result, + _maybe_sized_binary_result, + "bytes", + "bytes"); +#else +%bytes_container_ptr_and_ref( + qstring, + c_str, + length, + , + IDAPyStr_Check, + IDAPyStr_AsUTF8, + IDAPyStr_FromUTF8AndSize, + _sized_cstring_result, + _maybe_sized_cstring_result, + "string", + "str"); +%bytes_container_ptr_and_ref( + bytevec_t, + begin, + size, + , + IDAPyBytes_Check, + IDAPyBytes_AsBytes, + IDAPyBytes_FromMemAndSize, + _sized_binary_result, + _maybe_sized_binary_result, + "string", + "str"); +%bytes_container_ptr_and_ref( + qtype, + begin, + length, + (const uchar *), + IDAPyBytes_Check, + IDAPyBytes_as_qtype, + IDAPyBytes_FromMemAndSize, + _sized_binary_result, + _maybe_sized_binary_result, + "string", + "str"); +#endif + +//------------------------------------------------------------------------- +// insn_t +//------------------------------------------------------------------------- +%fragment("cvt_const_insn_t_ref", "header") +{ + bool convert_const_insn_t_ref(insn_t *out, PyObject *in) + { + uint64 ea; + bool ok = PyW_GetNumber(in, &ea); + if ( ok ) + { + insn_t tmp; + ok = decode_insn(&tmp, ea_t(ea)); + if ( ok ) + *out = tmp; + } + else + { + insn_t *p_insn = nullptr; + ok = SWIG_ConvertPtr(in, (void **) &p_insn, SWIGTYPE_p_insn_t, 0) >= 0 && p_insn != nullptr; + if ( ok ) + *out = *p_insn; + } + return ok; + } +} + +//------------------------------------------------------------------------- +%typemap(in, fragment="cvt_const_insn_t_ref") (const insn_t &) (insn_t lins) +{ + // %typemap(in) (const insn_t &) + if ( !convert_const_insn_t_ref(&lins, $input) ) + SWIG_exception_fail(SWIG_ValueError, "Expected either an address, or a non-null ida_ua.insn_t instance"); + $1 = &lins; +} //--------------------------------------------------------------------- // varargs (mostly kernwin.hpp) //--------------------------------------------------------------------- // This is used for functions like warning(), info() and so on -%typemap(in) (const char *format, ...) +%typemap(in) (const char *format, ...) (qstring buf) { $1 = "%s"; /* Fix format string to %s */ - $2 = (void *) PyString_AsString($input); /* Get string argument */ + IDAPyStr_AsUTF8(&buf, $input); /* Get string argument */ + $2 = (void *) buf.begin(); /* Note: we cannot rely on 'nonnul_argument_prototype' for */ /* these, since we fiddle with the arguments number */ if ( $2 == NULL ) @@ -776,6 +1067,35 @@ typedef long long longlong; %apply bool *OUTPUT { bool *checked }; %apply bool *OUTPUT { bool *visibility }; +//------------------------------------------------------------------------- +// 'errbuf' output handling can go many ways. Let's provide common helpers. +%define %make_argout_errbuf_raise_exception_when_non_empty() +%typemap(argout) (qstring *errbuf) +{ + // %typemap(argout) qstring *errbuf (from: %make_argout_errbuf_raise_exception_when_non_empty) + if ( !$1->empty() ) + { + if ( $result != NULL ) + Py_XDECREF($result); + SWIG_exception_fail(SWIG_RuntimeError, $1->c_str()); + } +} +%enddef + +%define %make_argout_errbuf_raise_when_null_result() +%typemap(argout) (qstring *errbuf) +{ + // %typemap(argout) qstring *errbuf (from: %make_argout_errbuf_raise_when_null_result) + if ( result == NULL ) + { + if ( $result != NULL ) + Py_XDECREF($result); + SWIG_exception_fail(SWIG_RuntimeError, $1->c_str()); + } +} +%enddef + + //------------------------------------------------------------------------- // The following is to be used to expose an array of items // to IDAPython. This will not make a copy (on purpose!). @@ -853,21 +1173,35 @@ struct dynamic_wrapped_array_t { } //------------------------------------------------------------------------- -#if SWIG_VERSION == 0x20012 +#if SWIG_VERSION == 0x40000 || SWIG_VERSION == 0x40001 %typemap(out) tinfo_t {} %typemap(ret) tinfo_t { - // ret tinfo_t + // %typemap(ret) tinfo_t tinfo_t *ni = new tinfo_t($1); til_register_python_tinfo_t_instance(ni); $result = SWIG_NewPointerObj(ni, $&1_descriptor, SWIG_POINTER_OWN | 0); } -%typemap(check) tinfo_t* +%typemap(check) tinfo_t * { + // %typemap(check) tinfo_t * if ( $1 == NULL ) SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "$symname" "', argument " "$argnum"" of type '" "$1_type""'"); } + +%typemap(out) tinfo_t * +{ + // %typemap(out) tinfo_t * + tinfo_t *ni = new tinfo_t(*$1); + til_register_python_tinfo_t_instance(ni); + $result = SWIG_NewPointerObj(ni, $1_descriptor, SWIG_POINTER_OWN | 0); +} + +%typemap(newfree) tinfo_t * { + // %typemap(newfree) tinfo_t * + delete $1; +} #else #error Ensure tinfo_t wrapping is compatible with this version of SWIG #endif @@ -885,6 +1219,42 @@ struct dynamic_wrapped_array_t { %apply (char *STRING, int LENGTH) { (const void *buf, size_t len) }; %apply (char *STRING, int LENGTH) { (const void *value, size_t length) }; %apply (char *STRING, int LENGTH) { (const void *dataptr,size_t len) }; +#ifdef PY3 +%define %const_pointer_and_size(PTRTYPE, BUFNAME, SIZENAME, STORAGE_TYPE, CONVERTER, LENGTH_GETTER) +%typemap(in) (const PTRTYPE *BUFNAME, size_t SIZENAME) (STORAGE_TYPE tmp) +{ + // typemap(in) (const PTRTYPE *BUFNAME, size_t SIZENAME) + if ( !CONVERTER(&tmp, $input) ) { + %argument_fail(SWIG_ERROR, "$type", $symname, $argnum); + } + $1 = %reinterpret_cast(tmp.begin(), $1_ltype); + $2 = %numeric_cast(tmp.LENGTH_GETTER(), $2_ltype); +} +%typemap(freearg) (const PTRTYPE *BUFNAME, size_t SIZENAME) +{ + // typemap(freearg) (const PTRTYPE *BUFNAME, size_t SIZENAME) +} +%enddef + +%define %const_void_pointer_and_size(PTRTYPE, BUFNAME, SIZENAME) + %typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER) (const PTRTYPE *BUFNAME, size_t SIZENAME) + { // %typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER) (const PTRTYPE *BUFNAME, size_t SIZENAME) + $1 = PyBytes_Check($input) ? 1 : 0; + } + %const_pointer_and_size(PTRTYPE, BUFNAME, SIZENAME, bytevec_t, IDAPyBytes_AsBytes, size) +%enddef + +%define %const_char_pointer_and_size(PTRTYPE, BUFNAME, SIZENAME) + %const_pointer_and_size(PTRTYPE, BUFNAME, SIZENAME, qstring, IDAPyStr_AsUTF8, length) +%enddef + +%const_void_pointer_and_size(void, buf, size); +%const_void_pointer_and_size(void, buf, bufsize); +%const_void_pointer_and_size(void, buf, len); +%const_void_pointer_and_size(void, value, length); +%const_void_pointer_and_size(void, dataptr, len); +%const_char_pointer_and_size(char, value, length); +#endif // Create wrapper classes for basic type arrays %array_class(uchar, uchar_array); @@ -904,31 +1274,41 @@ SWIGINTERN PyObject *qstrvec2pylist(const qstrvec_t &vec) size_t n = vec.size(); PyObject *py_list = PyList_New(n); for ( size_t i=0; i < n; ++i ) - PyList_SetItem( - py_list, - i, - PyString_FromStringAndSize(vec[i].c_str(), vec[i].length())); + PyList_SetItem(py_list, i, IDAPyStr_FromUTF8AndSize(vec[i].c_str(), vec[i].length())); return py_list; } %} -//--------------------------------------------------------------------- -%typemap(out) uint64 +//------------------------------------------------------------------------- +// When it comes to uint64, we have been typically very tolerant and +// accept negative values as if were logical to perform C-like numbers +// 'wrapping' in Python. It's not, but bw-compat imposes that we do. +%fragment("cvt_uint64", "header") { - // %typemap(out) uint64 - $result = PyLong_FromUnsignedLongLong((unsigned long long) $1); + int cvt_uint64(uint64 *out, PyObject *obj) + { + unsigned long long ull = PyLong_AsUnsignedLongLong(obj); + if ( PyErr_Occurred() ) + { + PyErr_Clear(); + long long ll = PyLong_AsLongLong(obj); + if ( PyErr_Occurred() ) + { + PyErr_Clear(); + return SWIG_OverflowError; + } + ull = (unsigned long long) ll; + } + *out = uint64(ull); + return SWIG_OK; + } } - -%typemap(in) uint64 +%typemap(in, fragment="cvt_uint64") uint64 (int ecode) { // %typemap(in) uint64 - uint64 $1_temp; - if ( !PyW_GetNumber($input, &$1_temp) ) - { - PyErr_SetString(PyExc_TypeError, "Expected an uint64 type"); - return NULL; - } - $1 = $1_temp; + ecode = cvt_uint64(&$1, $input); + if ( !SWIG_IsOK(ecode) ) + SWIG_exception_fail(SWIG_ArgError(ecode), "in method '$symname', argument $argnum of type $1_type"); } //------------------------------------------------------------------------- @@ -1166,9 +1546,10 @@ SWIGINTERN void __raise_de(const Swig::DirectorException &e) newref_t as_str(PyObject_Str(v)); if ( as_str != NULL ) { - qstring buf(e.getMessage()); - buf.append(" : "); - buf.append(PyString_AsString(as_str.o)); + qstring buf; + IDAPyStr_AsUTF8(&buf, as_str.o); + buf.insert(" : "); + buf.insert(e.getMessage()); PyErr_SetString(PyExc_RuntimeError, buf.c_str()); handled = true; } @@ -1202,6 +1583,8 @@ SWIGINTERN bool __chkreqidb() %} +%include + // If the module is 'pro', don't import pro.h, or the %include // at the beginning of pro.i won't have any effect. Same for all // modules. diff --git a/tools/docs/hrdoc.py b/tools/docs/hrdoc.py index 379f60f..e673fe9 100644 --- a/tools/docs/hrdoc.py +++ b/tools/docs/hrdoc.py @@ -123,7 +123,7 @@ def main(): import ida_pro try: ida_pro._BC695 - print("'ida_pro._BC695' exists. Please recompile with BC695=0 (see makefile). Bailing out.") + print("'ida_pro._BC695' exists. Please recompile with BC695 undefined (see makefile). Bailing out.") return -1 except: pass # ok diff --git a/tools/doxygen_utils.py b/tools/doxygen_utils.py index 79057e3..ee03ec2 100644 --- a/tools/doxygen_utils.py +++ b/tools/doxygen_utils.py @@ -8,7 +8,7 @@ def load_xml_for_module(xml_dir_path, module_name, or_dummy=True): for sfx in ["_8hpp", "_8h"]: xml_path = os.path.join(xml_dir_path, "%s%s.xml" % (module_name, sfx)) if os.path.isfile(xml_path): - with open(xml_path, "rb") as fin: + with open(xml_path) as fin: xml_tree = ET.fromstring(fin.read()) return xml_tree diff --git a/tools/doxygen_utils.pyc b/tools/doxygen_utils.pyc deleted file mode 100644 index 3af4c39626be74eeeeb5bce09dc17eee996ddae0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3188 zcmb_e&2k$>5bn{BV>t>5F>w({KoE>|AX*5Aq#%T(NUpA89V%23*Rs}*gzOXk`_b!i4N{tP{D4Q+aR77NnHkM61#dF-2O7CviUSE99OEBezzp2obM#@y*1Ddj|>S3 zg)vl2;w)2;+I??}L@|`dmF7u!nSxZ9riMMvIN+72C==@xtVbS<=sis*Wt}nJsQlFW z$d^@Sf40EfQTcHf!Eu)`h*`pSRi9OJy#XBoM{^Z)KY?h#1Ly&33Z9mDOcX6B7yuHW zxQF5uuv%?_f%(;0TY(2=TlP9qKc`!oLN#gjF+eQvxHaU7n;PX&uUbJaajO--d%;{Q7l(YAK#9-fbpFsmMojc1>_U>^f;D`*M?4w%rs)ieTJ$f z?k2tTD?*H_p)q5{SQH9&qra4eX0pVJ@o@W3hB~<*&k^%3JIf(@4UmDwb1W-Ox#4tK zr`nb3z9CdZ_Id((za*s4a1%5mZu(3P(VUi5g%!3gV(&=&&4O`WyH-yQdJ9(9Bz>9T z{GQBknzps3zd@-NUGw6N;P-^sgN3MrPzFl2QTTq)=C?IuHQv;;J+5hr6irvwhvQ7T zjmaoTtdG&HP#oR3PAj(fpo;5Q2ecnsXQ}gxVo6TEv8@H3dB#V}++7gI@j1!06DQqa zVj)=cQ+r`rhr|{WPm9z^9wA3X1`VD&AX&K-^`W+A+L1!FWB9YRR=P*{E_j+KfV*xp zK4W~d0ukTn*k~pZbs*#&vr15q`o=LoM~w%yJ12IWX)~uS{$*wT1rX{?dKjkUj#?hQ z!!?T2^TD%Yv6BYmSRYRbp9)_18CZ=sH#hYn6Ml{r&H32FO*`rw7@(KC2M*nfL4Q=& zWgXsxsFs=&XNM!M1>9AAPZL->)UYvn!%jTjYibbn4R3+pOo^57I;VW6g563`S-lfg zl#gh9GbKYC%^3%bDZx97jmNvVBtfeiSaH`dh`DJlnqFrOBfpo;nz@Sqz8RV!W2Blz zXg_{l+b9b8PDuFqD;RJa8d=`OMn^Zq$Gn%ZXz8lwUG5YoBu9PlxSrdPL2Uf|5h+?7 kKEQBdzEWp$fuqWIn@ih0=9b=EF17mRa;x9#uk=>_10=oC$^ZZW diff --git a/tools/dumpdoc.py b/tools/dumpdoc.py index 0231d42..d8f857d 100644 --- a/tools/dumpdoc.py +++ b/tools/dumpdoc.py @@ -2,143 +2,306 @@ import re import sys import inspect +import types + +if sys.version_info[0] == 3: + # for Python3, we always use the same pydoc module from Python3.5. this keeps the output consistent across different Python3 versions. + import imp + inspect = imp.load_source('inspect', os.path.join("tools", "inspect.py")) + pydoc = imp.load_source('pydoc', os.path.join("tools", "pydoc.py")) + +import inspect +import pydoc import idc -ignore_python_builtin_docs = [ - int.__doc__, - long.__doc__, - float.__doc__, - str.__doc__, - bool.__doc__, - dict.__doc__, - list.__doc__, - tuple.__doc__, -] +try: + from cStringIO import StringIO +except: + from io import StringIO -def dump_thing(f, label, thing, vec_info=None): - try: - doc = thing.__doc__ - if doc and not doc in ignore_python_builtin_docs: - doc_lines = doc.split("\n") - doc_lines = map(lambda l: "\t%s" % l, doc_lines) - if vec_info: - doc_lines = map(vec_info["process_line"], doc_lines) - f.write("%s:\n%s\n\n" % (label, "\n".join(doc_lines))) - except: - pass +ignore_types = (int, float, str, bool, dict, list, tuple, types.ModuleType) +TRANSLATED_MARKER = b"\xE2\x86\x97" -def lexicographical_compare(s0, s1): - if s0 < s1: - return -1 - elif s0 > s1: - return 1 - else: - return 0 +if sys.version_info.major < 3: + string_types = (str, unicode) + ignore_types = ignore_types + (long, types.NoneType) +else: + string_types = (str,) + ignore_types = ignore_types + (type(None),) + TRANSLATED_MARKER = TRANSLATED_MARKER.decode("UTF-8") ignore_names = [ - "weakref_proxy", - "thisown", - ("ida_nalt", "strpath_ids_array", "data"), - re.compile(".*dump_state$"), + "_IDCFUNC_CB_T", + "call_idc_func__", + "_BUTTONCB_T", + "_FORMCHGCB_T", + "__ask_form_callable", + "__open_form_callable", + "_notify_when_dispatcher", + "_make_badattr_property", + "long_type", + "cvar", + "__spec__", + "SourceFileLoader", + "__loader__", + "_make_badattr_property", + re.compile("_Swig.*"), + re.compile("_swig.*"), + "SWIG_PyInstanceMethod_New", + "svalvec_t", # aliased with intvec_t or longlongvec_t + "uvalvec_t", # aliased with uintvec_t or ulonglongvec_t + "eavec_t", # aliased with uvalvec_t ] -def should_ignore_name(namespace_name, name): + +def should_ignore_name(name): for ign in ignore_names: if isinstance(ign, tuple): - if ".".join(ign) == ".".join((namespace_name, name)): + if ".".join(ign) == name: return True - elif isinstance(ign, basestring): + elif isinstance(ign, string_types): if ign == name: return True else: - if ign.match(".".join((namespace_name, name))): + if ign.match(name): return True return False -def make_eavec_lines_processor(directives): - def f(l): - for tokens, replacement in directives: - for token in tokens: - l = l.replace(token, replacement) - return l - return f +def apply_translations(translations, input): + lines = input.split("\n") + out = [] + for l in lines: + for all_frm, dst, marker in translations: + assert(isinstance(all_frm, tuple)) + for frm in all_frm: + idx = l.find(frm) + if idx > -1: + # sys.stderr.write("SPOTTED '%s' in '%s', position %s\n" % (frm, l, idx)) + l = l[0:idx] + dst + l[idx+len(frm):] + if marker: + l += TRANSLATED_MARKER + # sys.stderr.write("ADDING '%s'\n" % l) + out.append(l) + return '\n'.join(out) -classes = { - "svalvec_t" : - { - "process_line" : make_eavec_lines_processor( - [ - (("<(int)>", "<(long long)>"), "<(signed-ea-like-numeric-type)>"), - (("qvector< int >", "qvector< long long >"), "qvector< signed-ea-like-numeric-type >"), - (("-> int &", "-> long long &"), "-> signed-ea-like-numeric-type &"), - (("-> int *", "-> long long *"), "-> signed-ea-like-numeric-type *"), - (("-> int const &", "-> long long const &"), "-> signed-ea-like-numeric-type &"), - ]) - }, - "uvalvec_t" : - { - "process_line" : make_eavec_lines_processor( - [ - (("<(unsigned int)>", "<(unsigned long long)>"), "<(unsigned-ea-like-numeric-type)>"), - (("qvector< unsigned int >", "qvector< unsigned long long >"), "qvector< unsigned-ea-like-numeric-type >"), - (("-> unsigned int &", "-> unsigned long long &"), "-> unsigned-ea-like-numeric-type &"), - (("-> unsigned int *", "-> unsigned long long *"), "-> unsigned-ea-like-numeric-type *"), - (("-> unsigned int const &", "-> unsigned long long const &"), "-> unsigned-ea-like-numeric-type &"), - ]) - }, - "uval_ivl_t" : { - "process_line" : make_eavec_lines_processor( - [ - (("-> unsigned int", "-> unsigned long long"), "-> unsigned-ea-like-numeric-type"), - ]) - }, - "uval_ivl_ivlset_t" : { - "process_line" : make_eavec_lines_processor( - [ - (("-> ivlset_tpl< ivl_t,unsigned int >", - "-> ivlset_tpl< ivl_t,unsigned long long >"), - "-> ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >"), - ]) - }, +all_specific_translations = { + "ida_hexrays.casm_t" : [ + (( + "uintvec_t", + "ulonglongvec_t" + ), "eavec_t", True), + (( + "unsigned int *", + "unsigned long long *" + ), "unsigned-ea-like-numeric-type *", True), + (( + "unsigned int &", + "unsigned long long &" + ), "unsigned-ea-like-numeric-type &", True), + (( + "unsigned int const &", + "unsigned long long const &" + ), "unsigned-ea-like-numeric-type const &", True), + (( + "qvector< unsigned int >::", + "qvector< unsigned long long >::" + ), "qvector< unsigned-ea-like-numeric-type >::", True), + ], + "ida_hexrays.ivl_t" : [ + (( + "uval_ivl_t_off_get(self) -> unsigned int", + "uval_ivl_t_off_get(self) -> unsigned long long", + ), "uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type", True), + (( + "uval_ivl_t_size_get(self) -> unsigned int", + "uval_ivl_t_size_get(self) -> unsigned long long", + ), "uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type", True), + (( + ") -> 'unsigned int'", + ") -> 'unsigned long long'", # py3 + ), ") -> 'unsigned-ea-like-numeric-type'", True), + (( + ") -> unsigned int", + ") -> unsigned long long", # py3 + ), ") -> unsigned-ea-like-numeric-type", True), + ], + "ida_hexrays.uval_ivl_t" : [ + (( + "uval_ivl_t_off_get(self) -> unsigned int", + "uval_ivl_t_off_get(self) -> unsigned long long", + ), "uval_ivl_t_off_get(self) -> unsigned-ea-like-numeric-type", True), + (( + "uval_ivl_t_size_get(self) -> unsigned int", + "uval_ivl_t_size_get(self) -> unsigned long long", + ), "uval_ivl_t_size_get(self) -> unsigned-ea-like-numeric-type", True), + (( + ") -> 'unsigned int'", + ") -> 'unsigned long long'", # py3 + ), ") -> 'unsigned-ea-like-numeric-type'", True), + (( + ") -> unsigned int", + ") -> unsigned long long", # py3 + ), ") -> unsigned-ea-like-numeric-type", True), + ], + "ida_hexrays.ivlset_t" : [ + (( + "ivlset_tpl< ivl_t,unsigned int >::", + "ivlset_tpl< ivl_t,unsigned long long >::", # py3 + ), "ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::", True), + ], + "ida_hexrays.uval_ivl_ivlset_t" : [ + (( + "ivlset_tpl< ivl_t,unsigned int >::", + "ivlset_tpl< ivl_t,unsigned long long >::", + ), "ivlset_tpl< ivl_t,unsigned-ea-like-numeric-type >::", True), + ], + "ida_nalt.strpath_ids_array" : [ + (( + "strpath_ids_array_data_get(self) -> unsigned int", + "strpath_ids_array_data_get(self) -> unsigned long long" + ), "strpath_ids_array_data_get(self) -> unsigned-ea-like-numeric-type", True), + # py3 + (( + "unsigned int const &", + "unsigned long long const &", + ), "unsigned-ea-like-numeric-type const &", True), + ], + "idc.add_func" : [ + (("add_func(start, end=4294967295)", + "add_func(start, end=4294967295L)", + "add_func(start, end=18446744073709551615)", # py3 + "add_func(start, end=18446744073709551615L)", + ), "add_func(start, end=BADADDR)", True), + ], + "idc.next_head" : [ + (("next_head(ea, maxea=4294967295)", + "next_head(ea, maxea=4294967295L)", + "next_head(ea, maxea=18446744073709551615)", # py3 + "next_head(ea, maxea=18446744073709551615L)", + ), "next_head(ea, maxea=BADADDR)", True), + ], + "ida_xref.casevec_t" : [ + (( + "qvector< int >", + "qvector< long long >", + ), "qvector< signed-ea-like-numeric-type >", True), + ], + + # all that follows is for py3 + "ida_dbg.dbg_bin_search" : [ + (( + "'uint32 *, qstring *'", + "'uint64 *, qstring *'", + ), "'unsigned-ea-like-numeric-type *, qstring *'", True), + ], + "ida_dbg.get_ip_val" : [ + (( + "'uint32 *'", + "'uint64 *'", + ), "'unsigned-ea-like-numeric-type *'", True), + ], + "ida_dbg.get_sp_val" : [ + (( + "'uint32 *'", + "'uint64 *'", + ), "'unsigned-ea-like-numeric-type *'", True), + ], + "ida_idp.ph_find_op_value" : [ + (( + "uint32", + "uint64", + ), "unsigned-ea-like-numeric-type", True), + ], + "ida_idp.ph_find_reg_value" : [ + (( + "uint32", + "uint64", + ), "unsigned-ea-like-numeric-type", True), + ], + "ida_hexrays.user_iflags_t" : [ + (( + "int([x]) -> integer", + ), "int(x=0) -> integer", False), + ], + "ida_hexrays.eamap_t" : [ + (( + "int([x]) -> integer", + ), "int(x=0) -> integer", False), + ], + "ida_hexrays.DecompilationFailure" : [ + (( + "Helper for pickle.", + ), "helper for pickle", False), + ], + "idc.DeprecatedIDCError" : [ + (( + "Helper for pickle.", + ), "helper for pickle", False), + ], } -classes["casevec_t"] = classes["svalvec_t"] -classes["eavec_t"] = classes["uvalvec_t"] -classes["casm_t"] = classes["eavec_t"] -classes["ivl_t"] = classes["uval_ivl_t"] -classes["ivlset_t"] = classes["uval_ivl_ivlset_t"] -def dump_namespace(f, namespace, namespace_name, keys, vec_info=None): +def dump_namespace(namespace, namespace_name, keys, vec_info=None): + spotted_things = [] for thing_name in keys: - if thing_name.startswith("_") and not thing_name in ["_print", "_free"]: - continue - if should_ignore_name(namespace_name, thing_name): + # sys.stderr.write("THING NAME: %s\n" % thing_name) + if should_ignore_name(thing_name): continue thing = getattr(namespace, thing_name) - if inspect.isclass(thing): - vec_info = classes.get(thing_name, None) - dump_thing(f, "class %s.%s()" % (namespace_name, thing_name), thing, vec_info) - members = map(lambda t: t[0], inspect.getmembers(thing)) - dump_namespace(f, thing, "%s.%s" % (namespace_name, thing_name), members, vec_info) - elif callable(thing): - dump_thing(f, "%s.%s()" % (namespace_name, thing_name), thing, vec_info) - elif not inspect.ismodule(thing): - dump_thing(f, "%s.%s" % (namespace_name, thing_name), thing, vec_info) + if isinstance(thing, ignore_types): + continue + if thing in spotted_things: + continue + specific_translations = all_specific_translations.get( + "%s.%s" % (namespace_name, thing_name), + None) + if specific_translations: + was_stdout = sys.stdout + sys.stdout = StringIO() + pydoc.help(thing) + # sys.stderr.write("VALUE FOR %s.%s: %s" % (namespace_name, thing_name, sys.stdout.getvalue())) + translated = apply_translations(specific_translations, sys.stdout.getvalue()) + # sys.stderr.write("TRANSLATED %s.%s: %s" % (namespace_name, thing_name, translated)) + sys.stdout = was_stdout + sys.stdout.write(translated) + else: + pydoc.help(thing) + spotted_things.append(thing) -output = idc.ARGV[1] -wrappers_dir = idc.ARGV[2] +output, wrappers_dir = idc.ARGV[1], idc.ARGV[2] + +# By default, pydoc.help() hides members that start with "_" +# unless they start and end with "__" (with an exception for +# __doc__ and __module__) +# We want those "_" members, since there are important +# things such as tinfo_t._print in there. +orig_visiblename = pydoc.visiblename +def my_visiblename(name, all=None, obj=None): + v = orig_visiblename(name, all=all, obj=obj) + if not v and name.startswith("_") and name not in ["__doc__", "__module__"]: + v = True + return v +pydoc.visiblename = my_visiblename + +sys.stdout = StringIO() +for mname in sorted(sys.modules): + if mname.startswith("ida_") or mname == "idc": + module = sys.modules[mname] + dump_namespace(module, mname, sorted(dir(module))) + epydoc_path = os.path.join(wrappers_dir, "%s.epydoc_injection" % mname) + if os.path.isfile(epydoc_path): + with open(epydoc_path) as epydoc_f: + epydoc_injections = epydoc_f.read() + epydoc_injections = epydoc_injections.strip() + if epydoc_injections: + print("=== %s EPYDOC INJECTIONS ===" % mname) + print(epydoc_injections) + print("=== %s EPYDOC INJECTIONS END ===" % mname) + +final = apply_translations([], sys.stdout.getvalue()) with open(output, "wb") as f: - for mname in sorted(sys.modules): - if mname.startswith("ida_") or mname == "idc": - module = sys.modules[mname] - dump_namespace(f, module, mname, sorted(dir(module))) - epydoc_path = os.path.join(wrappers_dir, "%s.epydoc_injection" % mname) - if os.path.isfile(epydoc_path): - with open(epydoc_path) as epydoc_f: - epydoc_injections = epydoc_f.read() - epydoc_injections = epydoc_injections.strip() - if epydoc_injections: - f.write("\n=== %s EPYDOC INJECTIONS ===\n" % mname) - f.write(epydoc_injections) - f.write("\n=== %s EPYDOC INJECTIONS END ===\n" % mname) + if sys.version_info.major <= 2: + f.write(final) + else: + f.write(final.encode("utf-8")) idaapi.qexit(0) diff --git a/tools/gen_idc_bc695.py b/tools/gen_idc_bc695.py index 57b9329..118470f 100644 --- a/tools/gen_idc_bc695.py +++ b/tools/gen_idc_bc695.py @@ -14,11 +14,11 @@ args = p.parse_args() import os -with open(args.idc, "r") as fin: +with open(args.idc) as fin: inlines = fin.readlines() # search for compat macros section, and remove uninteresting lines -for idx in xrange(len(inlines)): +for idx in range(len(inlines)): if inlines[idx].replace(" ", "").find("COMPATIBILITYMACROS") > -1: break assert(idx < len(inlines)) @@ -70,69 +70,70 @@ forbidden = [ "SegEnd", "SetSegmentType", "CleanupAppcall", + "DelUserInfo", ] -symbols_modules = { - "AF_ANORET" : "ida_ida", - "AF_ANORET" : "ida_ida", - "AF_CHKUNI" : "ida_ida", - "AF_DATOFF" : "ida_ida", - "AF_DOCODE" : "ida_ida", - "AF_DODATA" : "ida_ida", - "AF_FTAIL" : "ida_ida", - "AF_HFLIRT" : "ida_ida", - "AF_JUMPTBL" : "ida_ida", - "AF_PURDAT" : "ida_ida", - "AF_REGARG" : "ida_ida", - "AF_SIGCMT" : "ida_ida", - "AF_SIGMLT" : "ida_ida", - "AF_STKARG" : "ida_ida", - "AF_STRLIT" : "ida_ida", - "AF_TRFUNC" : "ida_ida", - "AF_VERSP" : "ida_ida", - "BADADDR" : "ida_idaapi", - "FF_UNUSED" : "ida_bytes", - "FIXUPF_CREATED" : "ida_fixup", - "FIXUPF_EXTDEF" : "ida_fixup", - "FIXUPF_REL" : "ida_fixup", - "FIXUPF_UNUSED" : "ida_fixup", - "FIXUP_OFF8" : "ida_fixup", - "GN_VISIBLE" : "ida_name", - "SEGMOD_KEEP" : "ida_segment", - "SEGMOD_KILL" : "ida_segment", - "SEGMOD_SILENT" : "ida_segment", - "SETPROC_IDB" : "ida_idp", - "SETPROC_LOADER" : "ida_idp", - "SETPROC_LOADER_NON_FATAL" : "ida_idp", - "STRF_AUTO" : "ida_ida", - "STRF_COMMENT" : "ida_ida", - "STRF_GEN" : "ida_ida", - "STRF_SAVECASE" : "ida_ida", - "STRF_SERIAL" : "ida_ida", - "STRTYPE_C" : "ida_nalt", - "STRTYPE_C_16" : "ida_nalt", - "STRTYPE_C_32" : "ida_nalt", - "STRTYPE_LEN2_16" : "ida_nalt", - "STRTYPE_LEN4_16" : "ida_nalt", - "STRTYPE_PASCAL" : "ida_nalt", - "STRTYPE_TERMCHR" : "ida_nalt", - "V695_REF_VHIGH" : "ida_nalt", - "V695_REF_VLOW" : "ida_nalt", - "error" : "ida_kernwin", - "warning" : "ida_kernwin", - "ask_str" : "ida_kernwin", - "ask_file" : "ida_kernwin", - "ask_addr" : "ida_kernwin", - "ask_long" : "ida_kernwin", - "is_mapped" : "ida_bytes", - "decode_insn" : "ida_ua", - "HIST_IDENT" : "ida_kernwin", -} +symbols_modules = [ + ("AF_ANORET", "ida_ida"), + ("AF_ANORET", "ida_ida"), + ("AF_CHKUNI", "ida_ida"), + ("AF_DATOFF", "ida_ida"), + ("AF_DOCODE", "ida_ida"), + ("AF_DODATA", "ida_ida"), + ("AF_FTAIL", "ida_ida"), + ("AF_HFLIRT", "ida_ida"), + ("AF_JUMPTBL", "ida_ida"), + ("AF_PURDAT", "ida_ida"), + ("AF_REGARG", "ida_ida"), + ("AF_SIGCMT", "ida_ida"), + ("AF_SIGMLT", "ida_ida"), + ("AF_STKARG", "ida_ida"), + ("AF_STRLIT", "ida_ida"), + ("AF_TRFUNC", "ida_ida"), + ("AF_VERSP", "ida_ida"), + ("BADADDR", "ida_idaapi"), + ("FF_UNUSED", "ida_bytes"), + ("FIXUPF_CREATED", "ida_fixup"), + ("FIXUPF_EXTDEF", "ida_fixup"), + ("FIXUPF_REL", "ida_fixup"), + ("FIXUPF_UNUSED", "ida_fixup"), + ("FIXUP_OFF8", "ida_fixup"), + ("GN_VISIBLE", "ida_name"), + ("SEGMOD_KEEP", "ida_segment"), + ("SEGMOD_KILL", "ida_segment"), + ("SEGMOD_SILENT", "ida_segment"), + ("SETPROC_IDB", "ida_idp"), + ("SETPROC_LOADER", "ida_idp"), + ("SETPROC_LOADER_NON_FATAL", "ida_idp"), + ("STRF_AUTO", "ida_ida"), + ("STRF_COMMENT", "ida_ida"), + ("STRF_GEN", "ida_ida"), + ("STRF_SAVECASE", "ida_ida"), + ("STRF_SERIAL", "ida_ida"), + ("STRTYPE_C", "ida_nalt"), + ("STRTYPE_C_16", "ida_nalt"), + ("STRTYPE_C_32", "ida_nalt"), + ("STRTYPE_LEN2_16", "ida_nalt"), + ("STRTYPE_LEN4_16", "ida_nalt"), + ("STRTYPE_PASCAL", "ida_nalt"), + ("STRTYPE_TERMCHR", "ida_nalt"), + ("V695_REF_VHIGH", "ida_nalt"), + ("V695_REF_VLOW", "ida_nalt"), + ("error", "ida_kernwin"), + ("warning", "ida_kernwin"), + ("ask_str", "ida_kernwin"), + ("ask_file", "ida_kernwin"), + ("ask_addr", "ida_kernwin"), + ("ask_long", "ida_kernwin"), + ("is_mapped", "ida_bytes"), + ("decode_insn", "ida_ua"), + ("HIST_IDENT", "ida_kernwin"), +] import re def maybe_qualify(s): last_idx = -1 - for sym, mod in symbols_modules.items(): + for sym, mod in symbols_modules: idx = s.find(sym) if idx > last_idx: s = s.replace(sym, "%s.%s" % (mod, sym)) @@ -170,7 +171,7 @@ funcall_pat = re.compile(r"#define\s+([a-zA-Z0-9_]*)\s*(\([^\)]*\))\s*(.*)") alias_pat = re.compile(r"#define\s+([a-zA-Z0-9_]*)\s*([a-zA-Z0-9_/\*\.]*)\s*$") with open(args.output, "w") as fout: fout.write("# Autogenerated on: %s\n\n" % time.strftime("%c")) - for mod in sorted(list(set(symbols_modules.values()))): + for mod in sorted(list(set(map(lambda tpl: tpl[1], symbols_modules)))): fout.write("import %s\n" % mod) fout.write("from idc import *\n\n") while len(inlines): diff --git a/tools/genhooks/gendoxycfg.py b/tools/genhooks/gendoxycfg.py index 19e8d9f..f19d859 100644 --- a/tools/genhooks/gendoxycfg.py +++ b/tools/genhooks/gendoxycfg.py @@ -8,8 +8,8 @@ p.add_argument("-o", "--output", required=True, dest="output", help="O p.add_argument("-I", "--includes", required=True) args = p.parse_args() -with open(args.input, "rb") as fin: - with open(args.output, "wb") as fout: +with open(args.input) as fin: + with open(args.output, "w") as fout: template = string.Template(fin.read()) kvps = { "INCLUDES" : " ".join(args.includes.split(",")), diff --git a/tools/genhooks/genhooks.py b/tools/genhooks/genhooks.py index e519679..30fb4ba 100644 --- a/tools/genhooks/genhooks.py +++ b/tools/genhooks/genhooks.py @@ -7,11 +7,7 @@ from __future__ import print_function # convoluted. Especially since it doesn't do that much. Perhaps a good # refactoring is in order? -import sys -major, minor, micro, _, _ = sys.version_info -if major < 2 or minor < 7: - raise Exception("Expected Python version 2.7.x, but got %s.%s.%s (from %s)" % (major, minor, micro, sys.executable)) - +import six from argparse import ArgumentParser p = ArgumentParser() @@ -35,7 +31,7 @@ def warn(msg): print("#### WARNING: %s" % msg) if args.recipe: - execfile(args.recipe) + exec(open(args.recipe).read()) else: recipe = {} @@ -194,7 +190,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, basestring): + if isinstance(p, six.string_types): assert(p[0] == "@") synth_info = recipe["synthetic_params"][p] ptype = synth_info["type"] @@ -273,7 +269,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, basestring): + if isinstance(p, six.string_types): assert(p[0] == "@") synth_info = recipe["synthetic_params"][p] ptype = synth_info["type"] @@ -425,8 +421,8 @@ def gen_safecall(out, class_name): """ % (class_name, class_name)) -with open(args.input, "rt") as fin: - with open(args.output, "wt") as fout: +with open(args.input) as fin: + with open(args.output, "w") as fout: for line in fin: fout.write(line) import re diff --git a/tools/genhooks/recipe_dbghooks.py b/tools/genhooks/recipe_dbghooks.py index e9a3318..702da00 100644 --- a/tools/genhooks/recipe_dbghooks.py +++ b/tools/genhooks/recipe_dbghooks.py @@ -161,5 +161,4 @@ recipe = { }, }, }, - } diff --git a/tools/genidaapi.py b/tools/genidaapi.py index bc9d5fb..7820028 100644 --- a/tools/genidaapi.py +++ b/tools/genidaapi.py @@ -15,8 +15,8 @@ parser.add_argument("-o", "--output", required=True) parser.add_argument("-m", "--modules", required=True) args = parser.parse_args() -with open(args.input, "rb") as fin: - with open(args.output, "wb") as fout: +with open(args.input) as fin: + with open(args.output, "w") as fout: template = string.Template(fin.read()) kvps = { "MODULES" : args.modules, diff --git a/tools/genswigheader.py b/tools/genswigheader.py index e3b86df..ed9d893 100644 --- a/tools/genswigheader.py +++ b/tools/genswigheader.py @@ -17,8 +17,8 @@ parser.add_argument("-m", "--modules", required=True) parser.add_argument("-s", "--sdk", required=True) args = parser.parse_args() -with open(args.input, "rb") as fin: - with open(args.output, "wb") as fout: +with open(args.input) as fin: + with open(args.output, "w") as fout: parts = [] def add_imports_from_dep(depname): @@ -42,4 +42,5 @@ with open(args.input, "rb") as fin: # Can't use string.Template here, because it's a nightmare # to use with a file that has many '$' is it. template = fin.read() - fout.write(template.replace("${ALL_IMPORTS}", "\n".join(parts))) + result = template.replace("${ALL_IMPORTS}", "\n".join(parts)) + fout.write(result) diff --git a/tools/inject_base_hooks_flags.py b/tools/inject_base_hooks_flags.py index eefd92d..0a6f95f 100644 --- a/tools/inject_base_hooks_flags.py +++ b/tools/inject_base_hooks_flags.py @@ -30,6 +30,6 @@ kvps = { "BASE_HOOKS_FLAGS" : "\n".join(decls) } -with open(args.output, "wt") as fout: +with open(args.output, "w") as fout: fout.write(template.substitute(kvps)) diff --git a/tools/inject_plfm.py b/tools/inject_plfm.py index 89d1c15..d74cfb9 100644 --- a/tools/inject_plfm.py +++ b/tools/inject_plfm.py @@ -37,6 +37,6 @@ kvps = { "PLFM_DECLS" : "\n".join(decls) } -with open(args.output, "wt") as fout: +with open(args.output, "w") as fout: fout.write(template.substitute(kvps)) diff --git a/tools/inject_pydoc.py b/tools/inject_pydoc.py index dfc7366..4161b4a 100644 --- a/tools/inject_pydoc.py +++ b/tools/inject_pydoc.py @@ -16,6 +16,7 @@ import os import re import textwrap import xml.etree.ElementTree as ET +import six try: from argparse import ArgumentParser @@ -23,9 +24,16 @@ except: print("Failed to import module 'argparse'. Upgrade to Python 2.7, copy argparse.py to this directory or try 'apt-get install python-argparse'") raise +mydir, _ = os.path.split(__file__) +if mydir not in sys.path: + sys.path.append(mydir) + +import wrapper_utils + parser = ArgumentParser() parser.add_argument("-i", "--input", required=True) -parser.add_argument("-w", "--wrapper", required=True) +parser.add_argument("-s", "--interface", required=True) +parser.add_argument("-w", "--cpp-wrapper", required=True) parser.add_argument("-o", "--output", required=True) parser.add_argument("-x", "--xml-doc-directory", required=True) parser.add_argument("-e", "--epydoc-injections", required=True) @@ -38,7 +46,8 @@ this_dir, _ = os.path.split(__file__) sys.path.append(this_dir) import doxygen_utils -DOCSTR_MARKER = '"""' +DOCSTR_MARKER = '"""' +DOCSTR_MARKER_START_RAW = 'r"""' def verb(msg): if args.verbose: @@ -60,12 +69,17 @@ def load_patches(args): return patches # -------------------------------------------------------------------------- -def split_oneliner_comments(lines): +def split_oneliner_comments_and_remove_property_docstrings(lines): out_lines = [] + pat = re.compile('(.*= property\(.*), doc=r""".*"""(\))') for line in lines: line = line.rstrip() + m = pat.match(line) + if m: + line = m.group(1) + m.group(2) + if line.startswith("#"): out_lines.append(line) continue @@ -74,22 +88,48 @@ def split_oneliner_comments(lines): out_lines.append("") continue - pfx = None - while line.find(DOCSTR_MARKER) > -1: - idx = line.find(DOCSTR_MARKER) - meat = line[0:idx] - try: - if len(meat.strip()) == 0: - pfx = meat + handled = False + if line.endswith(DOCSTR_MARKER): + emarker_idx = line.rfind(DOCSTR_MARKER) + if line.lstrip().startswith(DOCSTR_MARKER_START_RAW): + smarker = DOCSTR_MARKER_START_RAW + smarker_idx = line.find(DOCSTR_MARKER_START_RAW) + elif line.lstrip().startswith(DOCSTR_MARKER): + smarker = DOCSTR_MARKER + smarker_idx = line.find(DOCSTR_MARKER) + else: + smarker_idx = -1 + if smarker_idx > -1: + pfx = line[0:smarker_idx] + meat = line[smarker_idx+len(smarker):emarker_idx] + if len(meat.strip()): + out_lines.append(pfx + smarker) + out_lines.append(pfx + meat) out_lines.append(pfx + DOCSTR_MARKER) - else: - out_lines.append((pfx if pfx is not None else "") + meat) - out_lines.append((pfx if pfx is not None else "") + DOCSTR_MARKER) - except: - raise BaseException("Error at line: " + line) - line = line[idx + len(DOCSTR_MARKER):] - if len(line.strip()) > 0: - out_lines.append((pfx if pfx is not None else "") + line) + handled = True + if not handled: + out_lines.append(line) + # meat = line[0:idx] + + # pfx = None + # while line.find(DOCSTR_MARKER) > -1: + # idx = line.find(DOCSTR_MARKER) + # if idx > 0 and line[idx-1] == 'r': + # idx -= 1 + # meat = line[0:idx] + # # print("MEAT: '%s'" % meat) + # try: + # if len(meat.strip()) == 0: + # pfx = meat + # out_lines.append(pfx + DOCSTR_MARKER) + # else: + # out_lines.append((pfx if pfx is not None else "") + meat) + # out_lines.append((pfx if pfx is not None else "") + DOCSTR_MARKER) + # except: + # raise BaseException("Error at line: " + line) + # line = line[idx + len(DOCSTR_MARKER):] + # if len(line.strip()) > 0: + # out_lines.append((pfx if pfx is not None else "") + line) return out_lines # -------------------------------------------------------------------------- @@ -154,7 +194,7 @@ class collect_pydoc_t(object): def collect_fun(self, fun_name): collected = [] while len(self.lines) > 0: - line = next(self) + line = self.next() if self.state is self.S_IN_PYDOC: if line.startswith(self.PYDOC_END): self.state = self.S_UNKNOWN @@ -178,7 +218,7 @@ class collect_pydoc_t(object): def collect_method(self, cls, method_name): collected = [] while len(self.lines) > 0: - line = next(self) + line = self.next() if self.state is self.S_IN_PYDOC: if line.startswith(self.PYDOC_END): self.state = self.S_UNKNOWN @@ -200,7 +240,7 @@ class collect_pydoc_t(object): collected = [] cls = {"methods":{},"doc":None} while len(self.lines) > 0: - line = next(self) + line = self.next() if self.state is self.S_IN_PYDOC: if line.startswith(" def "): self.collect_method(cls, get_fun_name(line)) @@ -221,12 +261,12 @@ class collect_pydoc_t(object): def collect_file_pydoc(self, filename): self.state = self.S_UNKNOWN - with open(filename, "rt") as f: - self.lines = split_oneliner_comments(f.readlines()) + with open(filename) as f: + self.lines = split_oneliner_comments_and_remove_property_docstrings(f.readlines()) context = None doc = [] while len(self.lines) > 0: - line = next(self) + line = self.next() if self.state is self.S_UNKNOWN: if line.startswith(self.PYDOC_START): self.state = self.S_IN_PYDOC @@ -334,6 +374,7 @@ class base_doc_t: def append_lines(self, out): tmp = self.generate_lines() + # dbg("generate_lines() returned %s" % tmp) tmp = self.remove_empty_header_or_footer_lines(tmp) if tmp: out.extend(tmp) @@ -361,8 +402,12 @@ class fun_doc_t(base_doc_t): # collect params def add_param(name, ptyp, desc): - if name == "from": - name = "_from" # SWiG will rename 'from' to '_from' automatically, and we want to match that + # dbg("add_param(name=%s, ptyp=%s, desc=%s)" % (name, ptyp, desc)) + # SWiG will rename e.g., 'from' to '_from' automatically, and we want to match that + for candidate in ["from", "with"]: + if name == candidate: + name = "_%s" % name + # dbg("==> name='%s', swig_generated_param_names='%s'" % (name, swig_generated_param_names)) if name in swig_generated_param_names: self.params.append(ioarg_t(name, ptyp, desc)) doxygen_utils.for_each_param(node, add_param) @@ -419,7 +464,7 @@ class def_doc_t(base_doc_t): if self.detailed: out.extend(self.detailed) out = self.remove_empty_header_or_footer_lines(out) - return [DOCSTR_MARKER] + map(lambda s : s.replace('\\', '\\\\'), out) + [DOCSTR_MARKER] + return [DOCSTR_MARKER] + list(map(lambda s : s.replace('\\', '\\\\'), out)) + [DOCSTR_MARKER] # -------------------------------------------------------------------------- @@ -434,9 +479,10 @@ def collect_structured_fun_doc(node, swig_generated_param_names): class idaapi_fixer_t(object): lines = None - def __init__(self, collected_info, patches): + def __init__(self, collected_info, patches, cpp_wrapper_functions): self.collected_info = collected_info self.patches = patches + self.cpp_wrapper_functions = cpp_wrapper_functions # Since variables cannot have a docstring in Python, # but epydoc supports the syntax: # --- @@ -456,7 +502,7 @@ class idaapi_fixer_t(object): return line def copy(self, out): - line = next(self) + line = self.next() out.append(line) return line @@ -464,12 +510,16 @@ class idaapi_fixer_t(object): self.lines.insert(0, line) def get_fun_info(self, fun_name, swig_generated_param_names): + # dbg("idaapi_fixer_t.get_fun_info(fun_name=%s, swig_generated_param_names=%s)" % ( + # fun_name, + # str(list(swig_generated_param_names)))); fun_info = self.collected_info["funcs"].get(fun_name) if not fun_info: # def get_all_functions(xml_tree, name=None): fnodes = doxygen_utils.get_toplevel_functions(self.xml_tree, name=fun_name) nfnodes = len(fnodes) if nfnodes > 0: + # dbg("idaapi_fixer_t.get_fun_info: got doxygen information") if nfnodes > 1: print("Warning: more than 1 function doc found for '%s'; picking first" % fun_name) @@ -518,9 +568,37 @@ class idaapi_fixer_t(object): and idx_close_paren > idx_open_paren+1: clob = l[idx_open_paren+1:idx_close_paren] parts = clob.split(",") - return map(sanitize_param_name, parts) + return list(map(sanitize_param_name, parts)) return [] + def maybe_fix_swig_generated_docstring_prototype(self, fun_name, line): + forced_output_type = None + fdef = None + for _, one in six.iteritems(self.cpp_wrapper_functions): + if one.api_function_name == fun_name: + fdef = one + break + if fdef: + for l in fdef.contents: + for pattern, forced in [ + ("resultobj = _maybe_sized_cstring_result(", "str"), + ("resultobj = _maybe_cstring_result(", "str"), + ("resultobj = _maybe_binary_result(", "str"), + ("resultobj = _maybe_cstring_result_on_charptr_using_allocated_buf(", "str"), + ("resultobj = _maybe_cstring_result_on_charptr_using_qbuf(", "str"), + ("resultobj = _maybe_byte_array_as_hex_or_none_result(", "str"), + ("resultobj = _sized_cstring_result(", "str"), + ]: + if l.find(pattern) > -1: + assert(forced_output_type is None); + forced_output_type = forced + if forced_output_type: + splitter = " -> " + idx = line.find(splitter) + if idx > -1: + line = line[0:idx + len(splitter)] + forced_output_type + return line + def fix_fun(self, out, class_info=None): line = self.copy(out) fun_name = get_fun_name(line) @@ -530,9 +608,14 @@ class idaapi_fixer_t(object): if line.find(DOCSTR_MARKER) > -1: # Opening docstring line; determine indentation level indent = get_indent_string(line) + docstring_line_nr = 0 while True: - line = next(self) + line = self.next() + if docstring_line_nr == 0: + line = self.maybe_fix_swig_generated_docstring_prototype(fun_name, line) + if line.find(DOCSTR_MARKER) > -1: + # Closing docstring line swig_generated_param_names = self.extract_swig_generated_param_names(fun_name, out[doc_start_line_idx:]) if class_info is None: @@ -543,7 +626,7 @@ class idaapi_fixer_t(object): verb("fix_%s: found info for %s" % ( "method" if class_info else "fun", fun_name)); out.append("\n") - out.extend(map(lambda l: indent + l, found)) + out.extend(list(map(lambda l: indent + l, found))) # @@ -553,19 +636,20 @@ class idaapi_fixer_t(object): example = fun_patches.get("+example", None) if example: - ex_lines = map(lambda l: "Python> %s" % l, example.split("\n")) - out.extend(map(lambda l: indent + l, ["", "Example:"] + ex_lines)) + ex_lines = list(map(lambda l: "Python> %s" % l, example.split("\n"))) + out.extend(list(map(lambda l: indent + l, ["", "Example:"] + ex_lines))) repl_text = fun_patches.get("repl_text", None) if repl_text: from_text, to_text = repl_text - for i in xrange(doc_start_line_idx, len(out)): + for i in range(doc_start_line_idx, len(out)): out[i] = out[i].replace(from_text, to_text) out.append(line) break else: out.append(line) + docstring_line_nr += 1 def fix_method(self, class_info, out): return self.fix_fun(out, class_info) @@ -584,7 +668,7 @@ class idaapi_fixer_t(object): # If class has doc, maybe inject additional if line.find(DOCSTR_MARKER) > -1: while True: - line = next(self) + line = self.next() if line.find(DOCSTR_MARKER) > -1: doc = found["doc"] if doc is not None: @@ -600,7 +684,7 @@ class idaapi_fixer_t(object): # their docstring method_start = indent + "def " while True: - line = next(self) + line = self.next() # print "Fixing methods.. Line is '%s'" % line if line.startswith(indent) or line.strip() == "": if line.startswith(method_start): @@ -615,7 +699,7 @@ class idaapi_fixer_t(object): def fix_assignment(self, out, match): # out.append("LOL: %s" % match.group(1)) line = self.copy(out) - line = next(self) + line = self.next() if not line.startswith(DOCSTR_MARKER): # apparently no epydoc-compliant docstring follows. Let's # look for a possible match in the xml doc. @@ -633,12 +717,12 @@ class idaapi_fixer_t(object): def fix_file(self, args): input_path, xml_dir_path, out_path = args.input, args.xml_doc_directory, args.output - with open(input_path, "rt") as f: - self.lines = split_oneliner_comments(f.readlines()) + with open(input_path) as f: + self.lines = split_oneliner_comments_and_remove_property_docstrings(f.readlines()) self.xml_tree = doxygen_utils.load_xml_for_module(xml_dir_path, args.module) out = [] while len(self.lines) > 0: - line = next(self) + line = self.next() if line.startswith("def "): self.push_front(line) self.fix_fun(out) @@ -652,16 +736,18 @@ class idaapi_fixer_t(object): self.fix_assignment(out, m) else: out.append(line) - with open(out_path, "wt") as o: + with open(out_path, "w") as o: o.write("\n".join(out)) # -------------------------------------------------------------------------- patches = load_patches(args) -collecter = collect_pydoc_t(args.wrapper) +collecter = collect_pydoc_t(args.interface) collected = collecter.collect() -fixer = idaapi_fixer_t(collected, patches) +parser = wrapper_utils.cpp_wrapper_file_parser_t(args) +cpp_wrapper_functions = parser.parse(args.cpp_wrapper) +fixer = idaapi_fixer_t(collected, patches, cpp_wrapper_functions) fixer.fix_file(args) -with open(args.epydoc_injections, "wb") as fout: +with open(args.epydoc_injections, "w") as fout: for key in sorted(fixer.epydoc_injections.keys()): fout.write("\n\nida_%s.%s\n" % (args.module, key)) fout.write("\n".join(fixer.epydoc_injections[key])) diff --git a/tools/inspect.py b/tools/inspect.py new file mode 100644 index 0000000..e830eb6 --- /dev/null +++ b/tools/inspect.py @@ -0,0 +1,3049 @@ +"""Get useful information from live Python objects. + +This module encapsulates the interface provided by the internal special +attributes (co_*, im_*, tb_*, etc.) in a friendlier fashion. +It also provides some help for examining source code and class layout. + +Here are some of the useful functions provided by this module: + + ismodule(), isclass(), ismethod(), isfunction(), isgeneratorfunction(), + isgenerator(), istraceback(), isframe(), iscode(), isbuiltin(), + isroutine() - check object types + getmembers() - get members of an object that satisfy a given condition + + getfile(), getsourcefile(), getsource() - find an object's source code + getdoc(), getcomments() - get documentation on an object + getmodule() - determine the module that an object came from + getclasstree() - arrange classes so as to represent their hierarchy + + getargspec(), getargvalues(), getcallargs() - get info about function arguments + getfullargspec() - same, with support for Python 3 features + formatargspec(), formatargvalues() - format an argument spec + getouterframes(), getinnerframes() - get info about frames + currentframe() - get the current stack frame + stack(), trace() - get info about frames on the stack or in a traceback + + signature() - get a Signature object for the callable +""" + +# This module is in the public domain. No warranties. + +__author__ = ('Ka-Ping Yee ', + 'Yury Selivanov ') + +import ast +import dis +import collections.abc +import enum +import importlib.machinery +import itertools +import linecache +import os +import re +import sys +import tokenize +import token +import types +import warnings +import functools +import builtins +from operator import attrgetter +from collections import namedtuple, OrderedDict + +# Create constants for the compiler flags in Include/code.h +# We try to get them from dis to avoid duplication +mod_dict = globals() +for k, v in dis.COMPILER_FLAG_NAMES.items(): + mod_dict["CO_" + v] = k + +# See Include/object.h +TPFLAGS_IS_ABSTRACT = 1 << 20 + +# ----------------------------------------------------------- type-checking +def ismodule(object): + """Return true if the object is a module. + + Module objects provide these attributes: + __cached__ pathname to byte compiled file + __doc__ documentation string + __file__ filename (missing for built-in modules)""" + return isinstance(object, types.ModuleType) + +def isclass(object): + """Return true if the object is a class. + + Class objects provide these attributes: + __doc__ documentation string + __module__ name of module in which this class was defined""" + return isinstance(object, type) + +def ismethod(object): + """Return true if the object is an instance method. + + Instance method objects provide these attributes: + __doc__ documentation string + __name__ name with which this method was defined + __func__ function object containing implementation of method + __self__ instance to which this method is bound""" + return isinstance(object, types.MethodType) + +def ismethoddescriptor(object): + """Return true if the object is a method descriptor. + + But not if ismethod() or isclass() or isfunction() are true. + + This is new in Python 2.2, and, for example, is true of int.__add__. + An object passing this test has a __get__ attribute but not a __set__ + attribute, but beyond that the set of attributes varies. __name__ is + usually sensible, and __doc__ often is. + + Methods implemented via descriptors that also pass one of the other + tests return false from the ismethoddescriptor() test, simply because + the other tests promise more -- you can, e.g., count on having the + __func__ attribute (etc) when an object passes ismethod().""" + if isclass(object) or ismethod(object) or isfunction(object): + # mutual exclusion + return False + tp = type(object) + return hasattr(tp, "__get__") and not hasattr(tp, "__set__") + +def isdatadescriptor(object): + """Return true if the object is a data descriptor. + + Data descriptors have both a __get__ and a __set__ attribute. Examples are + properties (defined in Python) and getsets and members (defined in C). + Typically, data descriptors will also have __name__ and __doc__ attributes + (properties, getsets, and members have both of these attributes), but this + is not guaranteed.""" + if isclass(object) or ismethod(object) or isfunction(object): + # mutual exclusion + return False + tp = type(object) + return hasattr(tp, "__set__") and hasattr(tp, "__get__") + +if hasattr(types, 'MemberDescriptorType'): + # CPython and equivalent + def ismemberdescriptor(object): + """Return true if the object is a member descriptor. + + Member descriptors are specialized descriptors defined in extension + modules.""" + return isinstance(object, types.MemberDescriptorType) +else: + # Other implementations + def ismemberdescriptor(object): + """Return true if the object is a member descriptor. + + Member descriptors are specialized descriptors defined in extension + modules.""" + return False + +if hasattr(types, 'GetSetDescriptorType'): + # CPython and equivalent + def isgetsetdescriptor(object): + """Return true if the object is a getset descriptor. + + getset descriptors are specialized descriptors defined in extension + modules.""" + return isinstance(object, types.GetSetDescriptorType) +else: + # Other implementations + def isgetsetdescriptor(object): + """Return true if the object is a getset descriptor. + + getset descriptors are specialized descriptors defined in extension + modules.""" + return False + +def isfunction(object): + """Return true if the object is a user-defined function. + + Function objects provide these attributes: + __doc__ documentation string + __name__ name with which this function was defined + __code__ code object containing compiled function bytecode + __defaults__ tuple of any default values for arguments + __globals__ global namespace in which this function was defined + __annotations__ dict of parameter annotations + __kwdefaults__ dict of keyword only parameters with defaults""" + return isinstance(object, types.FunctionType) + +def isgeneratorfunction(object): + """Return true if the object is a user-defined generator function. + + Generator function objects provides same attributes as functions. + + See help(isfunction) for attributes listing.""" + return bool((isfunction(object) or ismethod(object)) and + object.__code__.co_flags & CO_GENERATOR) + +def iscoroutinefunction(object): + """Return true if the object is a coroutine function. + + Coroutine functions are defined with "async def" syntax, + or generators decorated with "types.coroutine". + """ + return bool((isfunction(object) or ismethod(object)) and + object.__code__.co_flags & CO_COROUTINE) + +def isgenerator(object): + """Return true if the object is a generator. + + Generator objects provide these attributes: + __iter__ defined to support iteration over container + close raises a new GeneratorExit exception inside the + generator to terminate the iteration + gi_code code object + gi_frame frame object or possibly None once the generator has + been exhausted + gi_running set to 1 when generator is executing, 0 otherwise + next return the next item from the container + send resumes the generator and "sends" a value that becomes + the result of the current yield-expression + throw used to raise an exception inside the generator""" + return isinstance(object, types.GeneratorType) + +def iscoroutine(object): + """Return true if the object is a coroutine.""" + return isinstance(object, types.CoroutineType) + +def isawaitable(object): + """Return true is object can be passed to an ``await`` expression.""" + return (isinstance(object, types.CoroutineType) or + isinstance(object, types.GeneratorType) and + object.gi_code.co_flags & CO_ITERABLE_COROUTINE or + isinstance(object, collections.abc.Awaitable)) + +def istraceback(object): + """Return true if the object is a traceback. + + Traceback objects provide these attributes: + tb_frame frame object at this level + tb_lasti index of last attempted instruction in bytecode + tb_lineno current line number in Python source code + tb_next next inner traceback object (called by this level)""" + return isinstance(object, types.TracebackType) + +def isframe(object): + """Return true if the object is a frame object. + + Frame objects provide these attributes: + f_back next outer frame object (this frame's caller) + f_builtins built-in namespace seen by this frame + f_code code object being executed in this frame + f_globals global namespace seen by this frame + f_lasti index of last attempted instruction in bytecode + f_lineno current line number in Python source code + f_locals local namespace seen by this frame + f_trace tracing function for this frame, or None""" + return isinstance(object, types.FrameType) + +def iscode(object): + """Return true if the object is a code object. + + Code objects provide these attributes: + co_argcount number of arguments (not including * or ** args) + co_code string of raw compiled bytecode + co_consts tuple of constants used in the bytecode + co_filename name of file in which this code object was created + co_firstlineno number of first line in Python source code + co_flags bitmap: 1=optimized | 2=newlocals | 4=*arg | 8=**arg + co_lnotab encoded mapping of line numbers to bytecode indices + co_name name with which this code object was defined + co_names tuple of names of local variables + co_nlocals number of local variables + co_stacksize virtual machine stack space required + co_varnames tuple of names of arguments and local variables""" + return isinstance(object, types.CodeType) + +def isbuiltin(object): + """Return true if the object is a built-in function or method. + + Built-in functions and methods provide these attributes: + __doc__ documentation string + __name__ original name of this function or method + __self__ instance to which a method is bound, or None""" + return isinstance(object, types.BuiltinFunctionType) + +def isroutine(object): + """Return true if the object is any kind of function or method.""" + return (isbuiltin(object) + or isfunction(object) + or ismethod(object) + or ismethoddescriptor(object)) + +def isabstract(object): + """Return true if the object is an abstract base class (ABC).""" + return bool(isinstance(object, type) and object.__flags__ & TPFLAGS_IS_ABSTRACT) + +def getmembers(object, predicate=None): + """Return all members of an object as (name, value) pairs sorted by name. + Optionally, only return members that satisfy a given predicate.""" + if isclass(object): + mro = (object,) + getmro(object) + else: + mro = () + results = [] + processed = set() + names = dir(object) + # :dd any DynamicClassAttributes to the list of names if object is a class; + # this may result in duplicate entries if, for example, a virtual + # attribute with the same name as a DynamicClassAttribute exists + try: + for base in object.__bases__: + for k, v in base.__dict__.items(): + if isinstance(v, types.DynamicClassAttribute): + names.append(k) + except AttributeError: + pass + for key in names: + # First try to get the value via getattr. Some descriptors don't + # like calling their __get__ (see bug #1785), so fall back to + # looking in the __dict__. + try: + value = getattr(object, key) + # handle the duplicate key + if key in processed: + raise AttributeError + except AttributeError: + for base in mro: + if key in base.__dict__: + value = base.__dict__[key] + break + else: + # could be a (currently) missing slot member, or a buggy + # __dir__; discard and move on + continue + if not predicate or predicate(value): + results.append((key, value)) + processed.add(key) + results.sort(key=lambda pair: pair[0]) + return results + +Attribute = namedtuple('Attribute', 'name kind defining_class object') + +def classify_class_attrs(cls): + """Return list of attribute-descriptor tuples. + + For each name in dir(cls), the return list contains a 4-tuple + with these elements: + + 0. The name (a string). + + 1. The kind of attribute this is, one of these strings: + 'class method' created via classmethod() + 'static method' created via staticmethod() + 'property' created via property() + 'method' any other flavor of method or descriptor + 'data' not a method + + 2. The class which defined this attribute (a class). + + 3. The object as obtained by calling getattr; if this fails, or if the + resulting object does not live anywhere in the class' mro (including + metaclasses) then the object is looked up in the defining class's + dict (found by walking the mro). + + If one of the items in dir(cls) is stored in the metaclass it will now + be discovered and not have None be listed as the class in which it was + defined. Any items whose home class cannot be discovered are skipped. + """ + + mro = getmro(cls) + metamro = getmro(type(cls)) # for attributes stored in the metaclass + metamro = tuple([cls for cls in metamro if cls not in (type, object)]) + class_bases = (cls,) + mro + all_bases = class_bases + metamro + names = dir(cls) + # :dd any DynamicClassAttributes to the list of names; + # this may result in duplicate entries if, for example, a virtual + # attribute with the same name as a DynamicClassAttribute exists. + for base in mro: + for k, v in base.__dict__.items(): + if isinstance(v, types.DynamicClassAttribute): + names.append(k) + result = [] + processed = set() + + for name in names: + # Get the object associated with the name, and where it was defined. + # Normal objects will be looked up with both getattr and directly in + # its class' dict (in case getattr fails [bug #1785], and also to look + # for a docstring). + # For DynamicClassAttributes on the second pass we only look in the + # class's dict. + # + # Getting an obj from the __dict__ sometimes reveals more than + # using getattr. Static and class methods are dramatic examples. + homecls = None + get_obj = None + dict_obj = None + if name not in processed: + try: + if name == '__dict__': + raise Exception("__dict__ is special, don't want the proxy") + get_obj = getattr(cls, name) + except Exception as exc: + pass + else: + homecls = getattr(get_obj, "__objclass__", homecls) + if homecls not in class_bases: + # if the resulting object does not live somewhere in the + # mro, drop it and search the mro manually + homecls = None + last_cls = None + # first look in the classes + for srch_cls in class_bases: + srch_obj = getattr(srch_cls, name, None) + if srch_obj is get_obj: + last_cls = srch_cls + # then check the metaclasses + for srch_cls in metamro: + try: + srch_obj = srch_cls.__getattr__(cls, name) + except AttributeError: + continue + if srch_obj is get_obj: + last_cls = srch_cls + if last_cls is not None: + homecls = last_cls + for base in all_bases: + if name in base.__dict__: + dict_obj = base.__dict__[name] + if homecls not in metamro: + homecls = base + break + if homecls is None: + # unable to locate the attribute anywhere, most likely due to + # buggy custom __dir__; discard and move on + continue + obj = get_obj if get_obj is not None else dict_obj + # Classify the object or its descriptor. + if isinstance(dict_obj, staticmethod): + kind = "static method" + obj = dict_obj + elif isinstance(dict_obj, classmethod): + kind = "class method" + obj = dict_obj + elif isinstance(dict_obj, property): + kind = "property" + obj = dict_obj + elif isroutine(obj): + kind = "method" + else: + kind = "data" + result.append(Attribute(name, kind, homecls, obj)) + processed.add(name) + return result + +# ----------------------------------------------------------- class helpers + +def getmro(cls): + "Return tuple of base classes (including cls) in method resolution order." + return cls.__mro__ + +# -------------------------------------------------------- function helpers + +def unwrap(func, *, stop=None): + """Get the object wrapped by *func*. + + Follows the chain of :attr:`__wrapped__` attributes returning the last + object in the chain. + + *stop* is an optional callback accepting an object in the wrapper chain + as its sole argument that allows the unwrapping to be terminated early if + the callback returns a true value. If the callback never returns a true + value, the last object in the chain is returned as usual. For example, + :func:`signature` uses this to stop unwrapping if any object in the + chain has a ``__signature__`` attribute defined. + + :exc:`ValueError` is raised if a cycle is encountered. + + """ + if stop is None: + def _is_wrapper(f): + return hasattr(f, '__wrapped__') + else: + def _is_wrapper(f): + return hasattr(f, '__wrapped__') and not stop(f) + f = func # remember the original func for error reporting + memo = {id(f)} # Memoise by id to tolerate non-hashable objects + while _is_wrapper(func): + func = func.__wrapped__ + id_func = id(func) + if id_func in memo: + raise ValueError('wrapper loop when unwrapping {!r}'.format(f)) + memo.add(id_func) + return func + +# -------------------------------------------------- source code extraction +def indentsize(line): + """Return the indent size, in spaces, at the start of a line of text.""" + expline = line.expandtabs() + return len(expline) - len(expline.lstrip()) + +def _findclass(func): + cls = sys.modules.get(func.__module__) + if cls is None: + return None + for name in func.__qualname__.split('.')[:-1]: + cls = getattr(cls, name) + if not isclass(cls): + return None + return cls + +def _finddoc(obj): + if isclass(obj): + for base in obj.__mro__: + if base is not object: + try: + doc = base.__doc__ + except AttributeError: + continue + if doc is not None: + return doc + return None + + if ismethod(obj): + name = obj.__func__.__name__ + self = obj.__self__ + if (isclass(self) and + getattr(getattr(self, name, None), '__func__') is obj.__func__): + # classmethod + cls = self + else: + cls = self.__class__ + elif isfunction(obj): + name = obj.__name__ + cls = _findclass(obj) + if cls is None or getattr(cls, name) is not obj: + return None + elif isbuiltin(obj): + name = obj.__name__ + self = obj.__self__ + if (isclass(self) and + self.__qualname__ + '.' + name == obj.__qualname__): + # classmethod + cls = self + else: + cls = self.__class__ + # Should be tested before isdatadescriptor(). + elif isinstance(obj, property): + func = obj.fget + name = func.__name__ + cls = _findclass(func) + if cls is None or getattr(cls, name) is not obj: + return None + elif ismethoddescriptor(obj) or isdatadescriptor(obj): + name = obj.__name__ + cls = obj.__objclass__ + if getattr(cls, name) is not obj: + return None + else: + return None + + for base in cls.__mro__: + try: + doc = getattr(base, name).__doc__ + except AttributeError: + continue + if doc is not None: + return doc + return None + +def getdoc(object): + """Get the documentation string for an object. + + All tabs are expanded to spaces. To clean up docstrings that are + indented to line up with blocks of code, any whitespace than can be + uniformly removed from the second line onwards is removed.""" + try: + doc = object.__doc__ + except AttributeError: + return None + if doc is None: + try: + doc = _finddoc(object) + except (AttributeError, TypeError): + return None + if not isinstance(doc, str): + return None + return cleandoc(doc) + +def cleandoc(doc): + """Clean up indentation from docstrings. + + Any whitespace that can be uniformly removed from the second line + onwards is removed.""" + try: + lines = doc.expandtabs().split('\n') + except UnicodeError: + return None + else: + # Find minimum indentation of any non-blank lines after first line. + margin = sys.maxsize + for line in lines[1:]: + content = len(line.lstrip()) + if content: + indent = len(line) - content + margin = min(margin, indent) + # Remove indentation. + if lines: + lines[0] = lines[0].lstrip() + if margin < sys.maxsize: + for i in range(1, len(lines)): lines[i] = lines[i][margin:] + # Remove any trailing or leading blank lines. + while lines and not lines[-1]: + lines.pop() + while lines and not lines[0]: + lines.pop(0) + return '\n'.join(lines) + +def getfile(object): + """Work out which source or compiled file an object was defined in.""" + if ismodule(object): + if hasattr(object, '__file__'): + return object.__file__ + raise TypeError('{!r} is a built-in module'.format(object)) + if isclass(object): + if hasattr(object, '__module__'): + object = sys.modules.get(object.__module__) + if hasattr(object, '__file__'): + return object.__file__ + raise TypeError('{!r} is a built-in class'.format(object)) + if ismethod(object): + object = object.__func__ + if isfunction(object): + object = object.__code__ + if istraceback(object): + object = object.tb_frame + if isframe(object): + object = object.f_code + if iscode(object): + return object.co_filename + raise TypeError('{!r} is not a module, class, method, ' + 'function, traceback, frame, or code object'.format(object)) + +ModuleInfo = namedtuple('ModuleInfo', 'name suffix mode module_type') + +def getmoduleinfo(path): + """Get the module name, suffix, mode, and module type for a given file.""" + warnings.warn('inspect.getmoduleinfo() is deprecated', DeprecationWarning, + 2) + with warnings.catch_warnings(): + warnings.simplefilter('ignore', PendingDeprecationWarning) + import imp + filename = os.path.basename(path) + suffixes = [(-len(suffix), suffix, mode, mtype) + for suffix, mode, mtype in imp.get_suffixes()] + suffixes.sort() # try longest suffixes first, in case they overlap + for neglen, suffix, mode, mtype in suffixes: + if filename[neglen:] == suffix: + return ModuleInfo(filename[:neglen], suffix, mode, mtype) + +def getmodulename(path): + """Return the module name for a given file, or None.""" + fname = os.path.basename(path) + # Check for paths that look like an actual module file + suffixes = [(-len(suffix), suffix) + for suffix in importlib.machinery.all_suffixes()] + suffixes.sort() # try longest suffixes first, in case they overlap + for neglen, suffix in suffixes: + if fname.endswith(suffix): + return fname[:neglen] + return None + +def getsourcefile(object): + """Return the filename that can be used to locate an object's source. + Return None if no way can be identified to get the source. + """ + filename = getfile(object) + all_bytecode_suffixes = importlib.machinery.DEBUG_BYTECODE_SUFFIXES[:] + all_bytecode_suffixes += importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES[:] + if any(filename.endswith(s) for s in all_bytecode_suffixes): + filename = (os.path.splitext(filename)[0] + + importlib.machinery.SOURCE_SUFFIXES[0]) + elif any(filename.endswith(s) for s in + importlib.machinery.EXTENSION_SUFFIXES): + return None + if os.path.exists(filename): + return filename + # only return a non-existent filename if the module has a PEP 302 loader + if getattr(getmodule(object, filename), '__loader__', None) is not None: + return filename + # or it is in the linecache + if filename in linecache.cache: + return filename + +def getabsfile(object, _filename=None): + """Return an absolute path to the source or compiled file for an object. + + The idea is for each object to have a unique origin, so this routine + normalizes the result as much as possible.""" + if _filename is None: + _filename = getsourcefile(object) or getfile(object) + return os.path.normcase(os.path.abspath(_filename)) + +modulesbyfile = {} +_filesbymodname = {} + +def getmodule(object, _filename=None): + """Return the module an object was defined in, or None if not found.""" + if ismodule(object): + return object + if hasattr(object, '__module__'): + return sys.modules.get(object.__module__) + # Try the filename to modulename cache + if _filename is not None and _filename in modulesbyfile: + return sys.modules.get(modulesbyfile[_filename]) + # Try the cache again with the absolute file name + try: + file = getabsfile(object, _filename) + except TypeError: + return None + if file in modulesbyfile: + return sys.modules.get(modulesbyfile[file]) + # Update the filename to module name cache and check yet again + # Copy sys.modules in order to cope with changes while iterating + for modname, module in list(sys.modules.items()): + if ismodule(module) and hasattr(module, '__file__'): + f = module.__file__ + if f == _filesbymodname.get(modname, None): + # Have already mapped this module, so skip it + continue + _filesbymodname[modname] = f + f = getabsfile(module) + # Always map to the name the module knows itself by + modulesbyfile[f] = modulesbyfile[ + os.path.realpath(f)] = module.__name__ + if file in modulesbyfile: + return sys.modules.get(modulesbyfile[file]) + # Check the main module + main = sys.modules['__main__'] + if not hasattr(object, '__name__'): + return None + if hasattr(main, object.__name__): + mainobject = getattr(main, object.__name__) + if mainobject is object: + return main + # Check builtins + builtin = sys.modules['builtins'] + if hasattr(builtin, object.__name__): + builtinobject = getattr(builtin, object.__name__) + if builtinobject is object: + return builtin + +def findsource(object): + """Return the entire source file and starting line number for an object. + + The argument may be a module, class, method, function, traceback, frame, + or code object. The source code is returned as a list of all the lines + in the file and the line number indexes a line in that list. An OSError + is raised if the source code cannot be retrieved.""" + + file = getsourcefile(object) + if file: + # Invalidate cache if needed. + linecache.checkcache(file) + else: + file = getfile(object) + # Allow filenames in form of "" to pass through. + # `doctest` monkeypatches `linecache` module to enable + # inspection, so let `linecache.getlines` to be called. + if not (file.startswith('<') and file.endswith('>')): + raise OSError('source code not available') + + module = getmodule(object, file) + if module: + lines = linecache.getlines(file, module.__dict__) + else: + lines = linecache.getlines(file) + if not lines: + raise OSError('could not get source code') + + if ismodule(object): + return lines, 0 + + if isclass(object): + name = object.__name__ + pat = re.compile(r'^(\s*)class\s*' + name + r'\b') + # make some effort to find the best matching class definition: + # use the one with the least indentation, which is the one + # that's most probably not inside a function definition. + candidates = [] + for i in range(len(lines)): + match = pat.match(lines[i]) + if match: + # if it's at toplevel, it's already the best one + if lines[i][0] == 'c': + return lines, i + # else add whitespace to candidate list + candidates.append((match.group(1), i)) + if candidates: + # this will sort by whitespace, and by line number, + # less whitespace first + candidates.sort() + return lines, candidates[0][1] + else: + raise OSError('could not find class definition') + + if ismethod(object): + object = object.__func__ + if isfunction(object): + object = object.__code__ + if istraceback(object): + object = object.tb_frame + if isframe(object): + object = object.f_code + if iscode(object): + if not hasattr(object, 'co_firstlineno'): + raise OSError('could not find function definition') + lnum = object.co_firstlineno - 1 + pat = re.compile(r'^(\s*def\s)|(\s*async\s+def\s)|(.*(? 0: + if pat.match(lines[lnum]): break + lnum = lnum - 1 + return lines, lnum + raise OSError('could not find code object') + +def getcomments(object): + """Get lines of comments immediately preceding an object's source code. + + Returns None when source can't be found. + """ + try: + lines, lnum = findsource(object) + except (OSError, TypeError): + return None + + if ismodule(object): + # Look for a comment block at the top of the file. + start = 0 + if lines and lines[0][:2] == '#!': start = 1 + while start < len(lines) and lines[start].strip() in ('', '#'): + start = start + 1 + if start < len(lines) and lines[start][:1] == '#': + comments = [] + end = start + while end < len(lines) and lines[end][:1] == '#': + comments.append(lines[end].expandtabs()) + end = end + 1 + return ''.join(comments) + + # Look for a preceding block of comments at the same indentation. + elif lnum > 0: + indent = indentsize(lines[lnum]) + end = lnum - 1 + if end >= 0 and lines[end].lstrip()[:1] == '#' and \ + indentsize(lines[end]) == indent: + comments = [lines[end].expandtabs().lstrip()] + if end > 0: + end = end - 1 + comment = lines[end].expandtabs().lstrip() + while comment[:1] == '#' and indentsize(lines[end]) == indent: + comments[:0] = [comment] + end = end - 1 + if end < 0: break + comment = lines[end].expandtabs().lstrip() + while comments and comments[0].strip() == '#': + comments[:1] = [] + while comments and comments[-1].strip() == '#': + comments[-1:] = [] + return ''.join(comments) + +class EndOfBlock(Exception): pass + +class BlockFinder: + """Provide a tokeneater() method to detect the end of a code block.""" + def __init__(self): + self.indent = 0 + self.islambda = False + self.started = False + self.passline = False + self.indecorator = False + self.decoratorhasargs = False + self.last = 1 + + def tokeneater(self, type, token, srowcol, erowcol, line): + if not self.started and not self.indecorator: + # skip any decorators + if token == "@": + self.indecorator = True + # look for the first "def", "class" or "lambda" + elif token in ("def", "class", "lambda"): + if token == "lambda": + self.islambda = True + self.started = True + self.passline = True # skip to the end of the line + elif token == "(": + if self.indecorator: + self.decoratorhasargs = True + elif token == ")": + if self.indecorator: + self.indecorator = False + self.decoratorhasargs = False + elif type == tokenize.NEWLINE: + self.passline = False # stop skipping when a NEWLINE is seen + self.last = srowcol[0] + if self.islambda: # lambdas always end at the first NEWLINE + raise EndOfBlock + # hitting a NEWLINE when in a decorator without args + # ends the decorator + if self.indecorator and not self.decoratorhasargs: + self.indecorator = False + elif self.passline: + pass + elif type == tokenize.INDENT: + self.indent = self.indent + 1 + self.passline = True + elif type == tokenize.DEDENT: + self.indent = self.indent - 1 + # the end of matching indent/dedent pairs end a block + # (note that this only works for "def"/"class" blocks, + # not e.g. for "if: else:" or "try: finally:" blocks) + if self.indent <= 0: + raise EndOfBlock + elif self.indent == 0 and type not in (tokenize.COMMENT, tokenize.NL): + # any other token on the same indentation level end the previous + # block as well, except the pseudo-tokens COMMENT and NL. + raise EndOfBlock + +def getblock(lines): + """Extract the block of code at the top of the given list of lines.""" + blockfinder = BlockFinder() + try: + tokens = tokenize.generate_tokens(iter(lines).__next__) + for _token in tokens: + blockfinder.tokeneater(*_token) + except (EndOfBlock, IndentationError): + pass + return lines[:blockfinder.last] + +def getsourcelines(object): + """Return a list of source lines and starting line number for an object. + + The argument may be a module, class, method, function, traceback, frame, + or code object. The source code is returned as a list of the lines + corresponding to the object and the line number indicates where in the + original source file the first line of code was found. An OSError is + raised if the source code cannot be retrieved.""" + object = unwrap(object) + lines, lnum = findsource(object) + + if ismodule(object): + return lines, 0 + else: + return getblock(lines[lnum:]), lnum + 1 + +def getsource(object): + """Return the text of the source code for an object. + + The argument may be a module, class, method, function, traceback, frame, + or code object. The source code is returned as a single string. An + OSError is raised if the source code cannot be retrieved.""" + lines, lnum = getsourcelines(object) + return ''.join(lines) + +# --------------------------------------------------- class tree extraction +def walktree(classes, children, parent): + """Recursive helper function for getclasstree().""" + results = [] + classes.sort(key=attrgetter('__module__', '__name__')) + for c in classes: + results.append((c, c.__bases__)) + if c in children: + results.append(walktree(children[c], children, c)) + return results + +def getclasstree(classes, unique=False): + """Arrange the given list of classes into a hierarchy of nested lists. + + Where a nested list appears, it contains classes derived from the class + whose entry immediately precedes the list. Each entry is a 2-tuple + containing a class and a tuple of its base classes. If the 'unique' + argument is true, exactly one entry appears in the returned structure + for each class in the given list. Otherwise, classes using multiple + inheritance and their descendants will appear multiple times.""" + children = {} + roots = [] + for c in classes: + if c.__bases__: + for parent in c.__bases__: + if not parent in children: + children[parent] = [] + if c not in children[parent]: + children[parent].append(c) + if unique and parent in classes: break + elif c not in roots: + roots.append(c) + for parent in children: + if parent not in classes: + roots.append(parent) + return walktree(roots, children, None) + +# ------------------------------------------------ argument list extraction +Arguments = namedtuple('Arguments', 'args, varargs, varkw') + +def getargs(co): + """Get information about the arguments accepted by a code object. + + Three things are returned: (args, varargs, varkw), where + 'args' is the list of argument names. Keyword-only arguments are + appended. 'varargs' and 'varkw' are the names of the * and ** + arguments or None.""" + args, varargs, kwonlyargs, varkw = _getfullargs(co) + return Arguments(args + kwonlyargs, varargs, varkw) + +def _getfullargs(co): + """Get information about the arguments accepted by a code object. + + Four things are returned: (args, varargs, kwonlyargs, varkw), where + 'args' and 'kwonlyargs' are lists of argument names, and 'varargs' + and 'varkw' are the names of the * and ** arguments or None.""" + + if not iscode(co): + raise TypeError('{!r} is not a code object'.format(co)) + + nargs = co.co_argcount + names = co.co_varnames + nkwargs = co.co_kwonlyargcount + args = list(names[:nargs]) + kwonlyargs = list(names[nargs:nargs+nkwargs]) + step = 0 + + nargs += nkwargs + varargs = None + if co.co_flags & CO_VARARGS: + varargs = co.co_varnames[nargs] + nargs = nargs + 1 + varkw = None + if co.co_flags & CO_VARKEYWORDS: + varkw = co.co_varnames[nargs] + return args, varargs, kwonlyargs, varkw + + +ArgSpec = namedtuple('ArgSpec', 'args varargs keywords defaults') + +def getargspec(func): + """Get the names and default values of a function's arguments. + + A tuple of four things is returned: (args, varargs, keywords, defaults). + 'args' is a list of the argument names, including keyword-only argument names. + 'varargs' and 'keywords' are the names of the * and ** arguments or None. + 'defaults' is an n-tuple of the default values of the last n arguments. + + Use the getfullargspec() API for Python 3 code, as annotations + and keyword arguments are supported. getargspec() will raise ValueError + if the func has either annotations or keyword arguments. + """ + warnings.warn("inspect.getargspec() is deprecated, " + "use inspect.signature() instead", DeprecationWarning, + stacklevel=2) + args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, ann = \ + getfullargspec(func) + if kwonlyargs or ann: + raise ValueError("Function has keyword-only arguments or annotations" + ", use getfullargspec() API which can support them") + return ArgSpec(args, varargs, varkw, defaults) + +FullArgSpec = namedtuple('FullArgSpec', + 'args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations') + +def getfullargspec(func): + """Get the names and default values of a callable object's arguments. + + A tuple of seven things is returned: + (args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults annotations). + 'args' is a list of the argument names. + 'varargs' and 'varkw' are the names of the * and ** arguments or None. + 'defaults' is an n-tuple of the default values of the last n arguments. + 'kwonlyargs' is a list of keyword-only argument names. + 'kwonlydefaults' is a dictionary mapping names from kwonlyargs to defaults. + 'annotations' is a dictionary mapping argument names to annotations. + + The first four items in the tuple correspond to getargspec(). + + This function is deprecated, use inspect.signature() instead. + """ + + try: + # Re: `skip_bound_arg=False` + # + # There is a notable difference in behaviour between getfullargspec + # and Signature: the former always returns 'self' parameter for bound + # methods, whereas the Signature always shows the actual calling + # signature of the passed object. + # + # To simulate this behaviour, we "unbind" bound methods, to trick + # inspect.signature to always return their first parameter ("self", + # usually) + + # Re: `follow_wrapper_chains=False` + # + # getfullargspec() historically ignored __wrapped__ attributes, + # so we ensure that remains the case in 3.3+ + + sig = _signature_from_callable(func, + follow_wrapper_chains=False, + skip_bound_arg=False, + sigcls=Signature) + except Exception as ex: + # Most of the times 'signature' will raise ValueError. + # But, it can also raise AttributeError, and, maybe something + # else. So to be fully backwards compatible, we catch all + # possible exceptions here, and reraise a TypeError. + raise TypeError('unsupported callable') from ex + + args = [] + varargs = None + varkw = None + kwonlyargs = [] + defaults = () + annotations = {} + defaults = () + kwdefaults = {} + + if sig.return_annotation is not sig.empty: + annotations['return'] = sig.return_annotation + + for param in sig.parameters.values(): + kind = param.kind + name = param.name + + if kind is _POSITIONAL_ONLY: + args.append(name) + elif kind is _POSITIONAL_OR_KEYWORD: + args.append(name) + if param.default is not param.empty: + defaults += (param.default,) + elif kind is _VAR_POSITIONAL: + varargs = name + elif kind is _KEYWORD_ONLY: + kwonlyargs.append(name) + if param.default is not param.empty: + kwdefaults[name] = param.default + elif kind is _VAR_KEYWORD: + varkw = name + + if param.annotation is not param.empty: + annotations[name] = param.annotation + + if not kwdefaults: + # compatibility with 'func.__kwdefaults__' + kwdefaults = None + + if not defaults: + # compatibility with 'func.__defaults__' + defaults = None + + return FullArgSpec(args, varargs, varkw, defaults, + kwonlyargs, kwdefaults, annotations) + + +ArgInfo = namedtuple('ArgInfo', 'args varargs keywords locals') + +def getargvalues(frame): + """Get information about arguments passed into a particular frame. + + A tuple of four things is returned: (args, varargs, varkw, locals). + 'args' is a list of the argument names. + 'varargs' and 'varkw' are the names of the * and ** arguments or None. + 'locals' is the locals dictionary of the given frame.""" + args, varargs, varkw = getargs(frame.f_code) + return ArgInfo(args, varargs, varkw, frame.f_locals) + +def formatannotation(annotation, base_module=None): + if isinstance(annotation, type): + if annotation.__module__ in ('builtins', base_module): + return annotation.__qualname__ + return annotation.__module__+'.'+annotation.__qualname__ + return repr(annotation) + +def formatannotationrelativeto(object): + module = getattr(object, '__module__', None) + def _formatannotation(annotation): + return formatannotation(annotation, module) + return _formatannotation + +def formatargspec(args, varargs=None, varkw=None, defaults=None, + kwonlyargs=(), kwonlydefaults={}, annotations={}, + formatarg=str, + formatvarargs=lambda name: '*' + name, + formatvarkw=lambda name: '**' + name, + formatvalue=lambda value: '=' + repr(value), + formatreturns=lambda text: ' -> ' + text, + formatannotation=formatannotation): + """Format an argument spec from the values returned by getargspec + or getfullargspec. + + The first seven arguments are (args, varargs, varkw, defaults, + kwonlyargs, kwonlydefaults, annotations). The other five arguments + are the corresponding optional formatting functions that are called to + turn names and values into strings. The last argument is an optional + function to format the sequence of arguments.""" + def formatargandannotation(arg): + result = formatarg(arg) + if arg in annotations: + result += ': ' + formatannotation(annotations[arg]) + return result + specs = [] + if defaults: + firstdefault = len(args) - len(defaults) + for i, arg in enumerate(args): + spec = formatargandannotation(arg) + if defaults and i >= firstdefault: + spec = spec + formatvalue(defaults[i - firstdefault]) + specs.append(spec) + if varargs is not None: + specs.append(formatvarargs(formatargandannotation(varargs))) + else: + if kwonlyargs: + specs.append('*') + if kwonlyargs: + for kwonlyarg in kwonlyargs: + spec = formatargandannotation(kwonlyarg) + if kwonlydefaults and kwonlyarg in kwonlydefaults: + spec += formatvalue(kwonlydefaults[kwonlyarg]) + specs.append(spec) + if varkw is not None: + specs.append(formatvarkw(formatargandannotation(varkw))) + result = '(' + ', '.join(specs) + ')' + if 'return' in annotations: + result += formatreturns(formatannotation(annotations['return'])) + return result + +def formatargvalues(args, varargs, varkw, locals, + formatarg=str, + formatvarargs=lambda name: '*' + name, + formatvarkw=lambda name: '**' + name, + formatvalue=lambda value: '=' + repr(value)): + """Format an argument spec from the 4 values returned by getargvalues. + + The first four arguments are (args, varargs, varkw, locals). The + next four arguments are the corresponding optional formatting functions + that are called to turn names and values into strings. The ninth + argument is an optional function to format the sequence of arguments.""" + def convert(name, locals=locals, + formatarg=formatarg, formatvalue=formatvalue): + return formatarg(name) + formatvalue(locals[name]) + specs = [] + for i in range(len(args)): + specs.append(convert(args[i])) + if varargs: + specs.append(formatvarargs(varargs) + formatvalue(locals[varargs])) + if varkw: + specs.append(formatvarkw(varkw) + formatvalue(locals[varkw])) + return '(' + ', '.join(specs) + ')' + +def _missing_arguments(f_name, argnames, pos, values): + names = [repr(name) for name in argnames if name not in values] + missing = len(names) + if missing == 1: + s = names[0] + elif missing == 2: + s = "{} and {}".format(*names) + else: + tail = ", {} and {}".format(*names[-2:]) + del names[-2:] + s = ", ".join(names) + tail + raise TypeError("%s() missing %i required %s argument%s: %s" % + (f_name, missing, + "positional" if pos else "keyword-only", + "" if missing == 1 else "s", s)) + +def _too_many(f_name, args, kwonly, varargs, defcount, given, values): + atleast = len(args) - defcount + kwonly_given = len([arg for arg in kwonly if arg in values]) + if varargs: + plural = atleast != 1 + sig = "at least %d" % (atleast,) + elif defcount: + plural = True + sig = "from %d to %d" % (atleast, len(args)) + else: + plural = len(args) != 1 + sig = str(len(args)) + kwonly_sig = "" + if kwonly_given: + msg = " positional argument%s (and %d keyword-only argument%s)" + kwonly_sig = (msg % ("s" if given != 1 else "", kwonly_given, + "s" if kwonly_given != 1 else "")) + raise TypeError("%s() takes %s positional argument%s but %d%s %s given" % + (f_name, sig, "s" if plural else "", given, kwonly_sig, + "was" if given == 1 and not kwonly_given else "were")) + +def getcallargs(*func_and_positional, **named): + """Get the mapping of arguments to values. + + A dict is returned, with keys the function argument names (including the + names of the * and ** arguments, if any), and values the respective bound + values from 'positional' and 'named'.""" + func = func_and_positional[0] + positional = func_and_positional[1:] + spec = getfullargspec(func) + args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, ann = spec + f_name = func.__name__ + arg2value = {} + + + if ismethod(func) and func.__self__ is not None: + # implicit 'self' (or 'cls' for classmethods) argument + positional = (func.__self__,) + positional + num_pos = len(positional) + num_args = len(args) + num_defaults = len(defaults) if defaults else 0 + + n = min(num_pos, num_args) + for i in range(n): + arg2value[args[i]] = positional[i] + if varargs: + arg2value[varargs] = tuple(positional[n:]) + possible_kwargs = set(args + kwonlyargs) + if varkw: + arg2value[varkw] = {} + for kw, value in named.items(): + if kw not in possible_kwargs: + if not varkw: + raise TypeError("%s() got an unexpected keyword argument %r" % + (f_name, kw)) + arg2value[varkw][kw] = value + continue + if kw in arg2value: + raise TypeError("%s() got multiple values for argument %r" % + (f_name, kw)) + arg2value[kw] = value + if num_pos > num_args and not varargs: + _too_many(f_name, args, kwonlyargs, varargs, num_defaults, + num_pos, arg2value) + if num_pos < num_args: + req = args[:num_args - num_defaults] + for arg in req: + if arg not in arg2value: + _missing_arguments(f_name, req, True, arg2value) + for i, arg in enumerate(args[num_args - num_defaults:]): + if arg not in arg2value: + arg2value[arg] = defaults[i] + missing = 0 + for kwarg in kwonlyargs: + if kwarg not in arg2value: + if kwonlydefaults and kwarg in kwonlydefaults: + arg2value[kwarg] = kwonlydefaults[kwarg] + else: + missing += 1 + if missing: + _missing_arguments(f_name, kwonlyargs, False, arg2value) + return arg2value + +ClosureVars = namedtuple('ClosureVars', 'nonlocals globals builtins unbound') + +def getclosurevars(func): + """ + Get the mapping of free variables to their current values. + + Returns a named tuple of dicts mapping the current nonlocal, global + and builtin references as seen by the body of the function. A final + set of unbound names that could not be resolved is also provided. + """ + + if ismethod(func): + func = func.__func__ + + if not isfunction(func): + raise TypeError("'{!r}' is not a Python function".format(func)) + + code = func.__code__ + # Nonlocal references are named in co_freevars and resolved + # by looking them up in __closure__ by positional index + if func.__closure__ is None: + nonlocal_vars = {} + else: + nonlocal_vars = { + var : cell.cell_contents + for var, cell in zip(code.co_freevars, func.__closure__) + } + + # Global and builtin references are named in co_names and resolved + # by looking them up in __globals__ or __builtins__ + global_ns = func.__globals__ + builtin_ns = global_ns.get("__builtins__", builtins.__dict__) + if ismodule(builtin_ns): + builtin_ns = builtin_ns.__dict__ + global_vars = {} + builtin_vars = {} + unbound_names = set() + for name in code.co_names: + if name in ("None", "True", "False"): + # Because these used to be builtins instead of keywords, they + # may still show up as name references. We ignore them. + continue + try: + global_vars[name] = global_ns[name] + except KeyError: + try: + builtin_vars[name] = builtin_ns[name] + except KeyError: + unbound_names.add(name) + + return ClosureVars(nonlocal_vars, global_vars, + builtin_vars, unbound_names) + +# -------------------------------------------------- stack frame extraction + +Traceback = namedtuple('Traceback', 'filename lineno function code_context index') + +def getframeinfo(frame, context=1): + """Get information about a frame or traceback object. + + A tuple of five things is returned: the filename, the line number of + the current line, the function name, a list of lines of context from + the source code, and the index of the current line within that list. + The optional second argument specifies the number of lines of context + to return, which are centered around the current line.""" + if istraceback(frame): + lineno = frame.tb_lineno + frame = frame.tb_frame + else: + lineno = frame.f_lineno + if not isframe(frame): + raise TypeError('{!r} is not a frame or traceback object'.format(frame)) + + filename = getsourcefile(frame) or getfile(frame) + if context > 0: + start = lineno - 1 - context//2 + try: + lines, lnum = findsource(frame) + except OSError: + lines = index = None + else: + start = max(start, 1) + start = max(0, min(start, len(lines) - context)) + lines = lines[start:start+context] + index = lineno - 1 - start + else: + lines = index = None + + return Traceback(filename, lineno, frame.f_code.co_name, lines, index) + +def getlineno(frame): + """Get the line number from a frame object, allowing for optimization.""" + # FrameType.f_lineno is now a descriptor that grovels co_lnotab + return frame.f_lineno + +FrameInfo = namedtuple('FrameInfo', ('frame',) + Traceback._fields) + +def getouterframes(frame, context=1): + """Get a list of records for a frame and all higher (calling) frames. + + Each record contains a frame object, filename, line number, function + name, a list of lines of context, and index within the context.""" + framelist = [] + while frame: + frameinfo = (frame,) + getframeinfo(frame, context) + framelist.append(FrameInfo(*frameinfo)) + frame = frame.f_back + return framelist + +def getinnerframes(tb, context=1): + """Get a list of records for a traceback's frame and all lower frames. + + Each record contains a frame object, filename, line number, function + name, a list of lines of context, and index within the context.""" + framelist = [] + while tb: + frameinfo = (tb.tb_frame,) + getframeinfo(tb, context) + framelist.append(FrameInfo(*frameinfo)) + tb = tb.tb_next + return framelist + +def currentframe(): + """Return the frame of the caller or None if this is not possible.""" + return sys._getframe(1) if hasattr(sys, "_getframe") else None + +def stack(context=1): + """Return a list of records for the stack above the caller's frame.""" + return getouterframes(sys._getframe(1), context) + +def trace(context=1): + """Return a list of records for the stack below the current exception.""" + return getinnerframes(sys.exc_info()[2], context) + + +# ------------------------------------------------ static version of getattr + +_sentinel = object() + +def _static_getmro(klass): + return type.__dict__['__mro__'].__get__(klass) + +def _check_instance(obj, attr): + instance_dict = {} + try: + instance_dict = object.__getattribute__(obj, "__dict__") + except AttributeError: + pass + return dict.get(instance_dict, attr, _sentinel) + + +def _check_class(klass, attr): + for entry in _static_getmro(klass): + if _shadowed_dict(type(entry)) is _sentinel: + try: + return entry.__dict__[attr] + except KeyError: + pass + return _sentinel + +def _is_type(obj): + try: + _static_getmro(obj) + except TypeError: + return False + return True + +def _shadowed_dict(klass): + dict_attr = type.__dict__["__dict__"] + for entry in _static_getmro(klass): + try: + class_dict = dict_attr.__get__(entry)["__dict__"] + except KeyError: + pass + else: + if not (type(class_dict) is types.GetSetDescriptorType and + class_dict.__name__ == "__dict__" and + class_dict.__objclass__ is entry): + return class_dict + return _sentinel + +def getattr_static(obj, attr, default=_sentinel): + """Retrieve attributes without triggering dynamic lookup via the + descriptor protocol, __getattr__ or __getattribute__. + + Note: this function may not be able to retrieve all attributes + that getattr can fetch (like dynamically created attributes) + and may find attributes that getattr can't (like descriptors + that raise AttributeError). It can also return descriptor objects + instead of instance members in some cases. See the + documentation for details. + """ + instance_result = _sentinel + if not _is_type(obj): + klass = type(obj) + dict_attr = _shadowed_dict(klass) + if (dict_attr is _sentinel or + type(dict_attr) is types.MemberDescriptorType): + instance_result = _check_instance(obj, attr) + else: + klass = obj + + klass_result = _check_class(klass, attr) + + if instance_result is not _sentinel and klass_result is not _sentinel: + if (_check_class(type(klass_result), '__get__') is not _sentinel and + _check_class(type(klass_result), '__set__') is not _sentinel): + return klass_result + + if instance_result is not _sentinel: + return instance_result + if klass_result is not _sentinel: + return klass_result + + if obj is klass: + # for types we check the metaclass too + for entry in _static_getmro(type(klass)): + if _shadowed_dict(type(entry)) is _sentinel: + try: + return entry.__dict__[attr] + except KeyError: + pass + if default is not _sentinel: + return default + raise AttributeError(attr) + + +# ------------------------------------------------ generator introspection + +GEN_CREATED = 'GEN_CREATED' +GEN_RUNNING = 'GEN_RUNNING' +GEN_SUSPENDED = 'GEN_SUSPENDED' +GEN_CLOSED = 'GEN_CLOSED' + +def getgeneratorstate(generator): + """Get current state of a generator-iterator. + + Possible states are: + GEN_CREATED: Waiting to start execution. + GEN_RUNNING: Currently being executed by the interpreter. + GEN_SUSPENDED: Currently suspended at a yield expression. + GEN_CLOSED: Execution has completed. + """ + if generator.gi_running: + return GEN_RUNNING + if generator.gi_frame is None: + return GEN_CLOSED + if generator.gi_frame.f_lasti == -1: + return GEN_CREATED + return GEN_SUSPENDED + + +def getgeneratorlocals(generator): + """ + Get the mapping of generator local variables to their current values. + + A dict is returned, with the keys the local variable names and values the + bound values.""" + + if not isgenerator(generator): + raise TypeError("'{!r}' is not a Python generator".format(generator)) + + frame = getattr(generator, "gi_frame", None) + if frame is not None: + return generator.gi_frame.f_locals + else: + return {} + + +# ------------------------------------------------ coroutine introspection + +CORO_CREATED = 'CORO_CREATED' +CORO_RUNNING = 'CORO_RUNNING' +CORO_SUSPENDED = 'CORO_SUSPENDED' +CORO_CLOSED = 'CORO_CLOSED' + +def getcoroutinestate(coroutine): + """Get current state of a coroutine object. + + Possible states are: + CORO_CREATED: Waiting to start execution. + CORO_RUNNING: Currently being executed by the interpreter. + CORO_SUSPENDED: Currently suspended at an await expression. + CORO_CLOSED: Execution has completed. + """ + if coroutine.cr_running: + return CORO_RUNNING + if coroutine.cr_frame is None: + return CORO_CLOSED + if coroutine.cr_frame.f_lasti == -1: + return CORO_CREATED + return CORO_SUSPENDED + + +def getcoroutinelocals(coroutine): + """ + Get the mapping of coroutine local variables to their current values. + + A dict is returned, with the keys the local variable names and values the + bound values.""" + frame = getattr(coroutine, "cr_frame", None) + if frame is not None: + return frame.f_locals + else: + return {} + + +############################################################################### +### Function Signature Object (PEP 362) +############################################################################### + + +_WrapperDescriptor = type(type.__call__) +_MethodWrapper = type(all.__call__) +_ClassMethodWrapper = type(int.__dict__['from_bytes']) + +_NonUserDefinedCallables = (_WrapperDescriptor, + _MethodWrapper, + _ClassMethodWrapper, + types.BuiltinFunctionType) + + +def _signature_get_user_defined_method(cls, method_name): + """Private helper. Checks if ``cls`` has an attribute + named ``method_name`` and returns it only if it is a + pure python function. + """ + try: + meth = getattr(cls, method_name) + except AttributeError: + return + else: + if not isinstance(meth, _NonUserDefinedCallables): + # Once '__signature__' will be added to 'C'-level + # callables, this check won't be necessary + return meth + + +def _signature_get_partial(wrapped_sig, partial, extra_args=()): + """Private helper to calculate how 'wrapped_sig' signature will + look like after applying a 'functools.partial' object (or alike) + on it. + """ + + old_params = wrapped_sig.parameters + new_params = OrderedDict(old_params.items()) + + partial_args = partial.args or () + partial_keywords = partial.keywords or {} + + if extra_args: + partial_args = extra_args + partial_args + + try: + ba = wrapped_sig.bind_partial(*partial_args, **partial_keywords) + except TypeError as ex: + msg = 'partial object {!r} has incorrect arguments'.format(partial) + raise ValueError(msg) from ex + + + transform_to_kwonly = False + for param_name, param in old_params.items(): + try: + arg_value = ba.arguments[param_name] + except KeyError: + pass + else: + if param.kind is _POSITIONAL_ONLY: + # If positional-only parameter is bound by partial, + # it effectively disappears from the signature + new_params.pop(param_name) + continue + + if param.kind is _POSITIONAL_OR_KEYWORD: + if param_name in partial_keywords: + # This means that this parameter, and all parameters + # after it should be keyword-only (and var-positional + # should be removed). Here's why. Consider the following + # function: + # foo(a, b, *args, c): + # pass + # + # "partial(foo, a='spam')" will have the following + # signature: "(*, a='spam', b, c)". Because attempting + # to call that partial with "(10, 20)" arguments will + # raise a TypeError, saying that "a" argument received + # multiple values. + transform_to_kwonly = True + # Set the new default value + new_params[param_name] = param.replace(default=arg_value) + else: + # was passed as a positional argument + new_params.pop(param.name) + continue + + if param.kind is _KEYWORD_ONLY: + # Set the new default value + new_params[param_name] = param.replace(default=arg_value) + + if transform_to_kwonly: + assert param.kind is not _POSITIONAL_ONLY + + if param.kind is _POSITIONAL_OR_KEYWORD: + new_param = new_params[param_name].replace(kind=_KEYWORD_ONLY) + new_params[param_name] = new_param + new_params.move_to_end(param_name) + elif param.kind in (_KEYWORD_ONLY, _VAR_KEYWORD): + new_params.move_to_end(param_name) + elif param.kind is _VAR_POSITIONAL: + new_params.pop(param.name) + + return wrapped_sig.replace(parameters=new_params.values()) + + +def _signature_bound_method(sig): + """Private helper to transform signatures for unbound + functions to bound methods. + """ + + params = tuple(sig.parameters.values()) + + if not params or params[0].kind in (_VAR_KEYWORD, _KEYWORD_ONLY): + raise ValueError('invalid method signature') + + kind = params[0].kind + if kind in (_POSITIONAL_OR_KEYWORD, _POSITIONAL_ONLY): + # Drop first parameter: + # '(p1, p2[, ...])' -> '(p2[, ...])' + params = params[1:] + else: + if kind is not _VAR_POSITIONAL: + # Unless we add a new parameter type we never + # get here + raise ValueError('invalid argument type') + # It's a var-positional parameter. + # Do nothing. '(*args[, ...])' -> '(*args[, ...])' + + return sig.replace(parameters=params) + + +def _signature_is_builtin(obj): + """Private helper to test if `obj` is a callable that might + support Argument Clinic's __text_signature__ protocol. + """ + return (isbuiltin(obj) or + ismethoddescriptor(obj) or + isinstance(obj, _NonUserDefinedCallables) or + # Can't test 'isinstance(type)' here, as it would + # also be True for regular python classes + obj in (type, object)) + + +def _signature_is_functionlike(obj): + """Private helper to test if `obj` is a duck type of FunctionType. + A good example of such objects are functions compiled with + Cython, which have all attributes that a pure Python function + would have, but have their code statically compiled. + """ + + if not callable(obj) or isclass(obj): + # All function-like objects are obviously callables, + # and not classes. + return False + + name = getattr(obj, '__name__', None) + code = getattr(obj, '__code__', None) + defaults = getattr(obj, '__defaults__', _void) # Important to use _void ... + kwdefaults = getattr(obj, '__kwdefaults__', _void) # ... and not None here + annotations = getattr(obj, '__annotations__', None) + + return (isinstance(code, types.CodeType) and + isinstance(name, str) and + (defaults is None or isinstance(defaults, tuple)) and + (kwdefaults is None or isinstance(kwdefaults, dict)) and + isinstance(annotations, dict)) + + +def _signature_get_bound_param(spec): + """ Private helper to get first parameter name from a + __text_signature__ of a builtin method, which should + be in the following format: '($param1, ...)'. + Assumptions are that the first argument won't have + a default value or an annotation. + """ + + assert spec.startswith('($') + + pos = spec.find(',') + if pos == -1: + pos = spec.find(')') + + cpos = spec.find(':') + assert cpos == -1 or cpos > pos + + cpos = spec.find('=') + assert cpos == -1 or cpos > pos + + return spec[2:pos] + + +def _signature_strip_non_python_syntax(signature): + """ + Private helper function. Takes a signature in Argument Clinic's + extended signature format. + + Returns a tuple of three things: + * that signature re-rendered in standard Python syntax, + * the index of the "self" parameter (generally 0), or None if + the function does not have a "self" parameter, and + * the index of the last "positional only" parameter, + or None if the signature has no positional-only parameters. + """ + + if not signature: + return signature, None, None + + self_parameter = None + last_positional_only = None + + lines = [l.encode('ascii') for l in signature.split('\n')] + generator = iter(lines).__next__ + token_stream = tokenize.tokenize(generator) + + delayed_comma = False + skip_next_comma = False + text = [] + add = text.append + + current_parameter = 0 + OP = token.OP + ERRORTOKEN = token.ERRORTOKEN + + # token stream always starts with ENCODING token, skip it + t = next(token_stream) + assert t.type == tokenize.ENCODING + + for t in token_stream: + type, string = t.type, t.string + + if type == OP: + if string == ',': + if skip_next_comma: + skip_next_comma = False + else: + assert not delayed_comma + delayed_comma = True + current_parameter += 1 + continue + + if string == '/': + assert not skip_next_comma + assert last_positional_only is None + skip_next_comma = True + last_positional_only = current_parameter - 1 + continue + + if (type == ERRORTOKEN) and (string == '$'): + assert self_parameter is None + self_parameter = current_parameter + continue + + if delayed_comma: + delayed_comma = False + if not ((type == OP) and (string == ')')): + add(', ') + add(string) + if (string == ','): + add(' ') + clean_signature = ''.join(text) + return clean_signature, self_parameter, last_positional_only + + +def _signature_fromstr(cls, obj, s, skip_bound_arg=True): + """Private helper to parse content of '__text_signature__' + and return a Signature based on it. + """ + + Parameter = cls._parameter_cls + + clean_signature, self_parameter, last_positional_only = \ + _signature_strip_non_python_syntax(s) + + program = "def foo" + clean_signature + ": pass" + + try: + module = ast.parse(program) + except SyntaxError: + module = None + + if not isinstance(module, ast.Module): + raise ValueError("{!r} builtin has invalid signature".format(obj)) + + f = module.body[0] + + parameters = [] + empty = Parameter.empty + invalid = object() + + module = None + module_dict = {} + module_name = getattr(obj, '__module__', None) + if module_name: + module = sys.modules.get(module_name, None) + if module: + module_dict = module.__dict__ + sys_module_dict = sys.modules + + def parse_name(node): + assert isinstance(node, ast.arg) + if node.annotation != None: + raise ValueError("Annotations are not currently supported") + return node.arg + + def wrap_value(s): + try: + value = eval(s, module_dict) + except NameError: + try: + value = eval(s, sys_module_dict) + except NameError: + raise RuntimeError() + + if isinstance(value, str): + return ast.Str(value) + if isinstance(value, (int, float)): + return ast.Num(value) + if isinstance(value, bytes): + return ast.Bytes(value) + if value in (True, False, None): + return ast.NameConstant(value) + raise RuntimeError() + + class RewriteSymbolics(ast.NodeTransformer): + def visit_Attribute(self, node): + a = [] + n = node + while isinstance(n, ast.Attribute): + a.append(n.attr) + n = n.value + if not isinstance(n, ast.Name): + raise RuntimeError() + a.append(n.id) + value = ".".join(reversed(a)) + return wrap_value(value) + + def visit_Name(self, node): + if not isinstance(node.ctx, ast.Load): + raise ValueError() + return wrap_value(node.id) + + def p(name_node, default_node, default=empty): + name = parse_name(name_node) + if name is invalid: + return None + if default_node and default_node is not _empty: + try: + default_node = RewriteSymbolics().visit(default_node) + o = ast.literal_eval(default_node) + except ValueError: + o = invalid + if o is invalid: + return None + default = o if o is not invalid else default + parameters.append(Parameter(name, kind, default=default, annotation=empty)) + + # non-keyword-only parameters + args = reversed(f.args.args) + defaults = reversed(f.args.defaults) + iter = itertools.zip_longest(args, defaults, fillvalue=None) + if last_positional_only is not None: + kind = Parameter.POSITIONAL_ONLY + else: + kind = Parameter.POSITIONAL_OR_KEYWORD + for i, (name, default) in enumerate(reversed(list(iter))): + p(name, default) + if i == last_positional_only: + kind = Parameter.POSITIONAL_OR_KEYWORD + + # *args + if f.args.vararg: + kind = Parameter.VAR_POSITIONAL + p(f.args.vararg, empty) + + # keyword-only arguments + kind = Parameter.KEYWORD_ONLY + for name, default in zip(f.args.kwonlyargs, f.args.kw_defaults): + p(name, default) + + # **kwargs + if f.args.kwarg: + kind = Parameter.VAR_KEYWORD + p(f.args.kwarg, empty) + + if self_parameter is not None: + # Possibly strip the bound argument: + # - We *always* strip first bound argument if + # it is a module. + # - We don't strip first bound argument if + # skip_bound_arg is False. + assert parameters + _self = getattr(obj, '__self__', None) + self_isbound = _self is not None + self_ismodule = ismodule(_self) + if self_isbound and (self_ismodule or skip_bound_arg): + parameters.pop(0) + else: + # for builtins, self parameter is always positional-only! + p = parameters[0].replace(kind=Parameter.POSITIONAL_ONLY) + parameters[0] = p + + return cls(parameters, return_annotation=cls.empty) + + +def _signature_from_builtin(cls, func, skip_bound_arg=True): + """Private helper function to get signature for + builtin callables. + """ + + if not _signature_is_builtin(func): + raise TypeError("{!r} is not a Python builtin " + "function".format(func)) + + s = getattr(func, "__text_signature__", None) + if not s: + raise ValueError("no signature found for builtin {!r}".format(func)) + + return _signature_fromstr(cls, func, s, skip_bound_arg) + + +def _signature_from_function(cls, func): + """Private helper: constructs Signature for the given python function.""" + + is_duck_function = False + if not isfunction(func): + if _signature_is_functionlike(func): + is_duck_function = True + else: + # If it's not a pure Python function, and not a duck type + # of pure function: + raise TypeError('{!r} is not a Python function'.format(func)) + + Parameter = cls._parameter_cls + + # Parameter information. + func_code = func.__code__ + pos_count = func_code.co_argcount + arg_names = func_code.co_varnames + positional = tuple(arg_names[:pos_count]) + keyword_only_count = func_code.co_kwonlyargcount + keyword_only = arg_names[pos_count:(pos_count + keyword_only_count)] + annotations = func.__annotations__ + defaults = func.__defaults__ + kwdefaults = func.__kwdefaults__ + + if defaults: + pos_default_count = len(defaults) + else: + pos_default_count = 0 + + parameters = [] + + # Non-keyword-only parameters w/o defaults. + non_default_count = pos_count - pos_default_count + for name in positional[:non_default_count]: + annotation = annotations.get(name, _empty) + parameters.append(Parameter(name, annotation=annotation, + kind=_POSITIONAL_OR_KEYWORD)) + + # ... w/ defaults. + for offset, name in enumerate(positional[non_default_count:]): + annotation = annotations.get(name, _empty) + parameters.append(Parameter(name, annotation=annotation, + kind=_POSITIONAL_OR_KEYWORD, + default=defaults[offset])) + + # *args + if func_code.co_flags & CO_VARARGS: + name = arg_names[pos_count + keyword_only_count] + annotation = annotations.get(name, _empty) + parameters.append(Parameter(name, annotation=annotation, + kind=_VAR_POSITIONAL)) + + # Keyword-only parameters. + for name in keyword_only: + default = _empty + if kwdefaults is not None: + default = kwdefaults.get(name, _empty) + + annotation = annotations.get(name, _empty) + parameters.append(Parameter(name, annotation=annotation, + kind=_KEYWORD_ONLY, + default=default)) + # **kwargs + if func_code.co_flags & CO_VARKEYWORDS: + index = pos_count + keyword_only_count + if func_code.co_flags & CO_VARARGS: + index += 1 + + name = arg_names[index] + annotation = annotations.get(name, _empty) + parameters.append(Parameter(name, annotation=annotation, + kind=_VAR_KEYWORD)) + + # Is 'func' is a pure Python function - don't validate the + # parameters list (for correct order and defaults), it should be OK. + return cls(parameters, + return_annotation=annotations.get('return', _empty), + __validate_parameters__=is_duck_function) + + +def _signature_from_callable(obj, *, + follow_wrapper_chains=True, + skip_bound_arg=True, + sigcls): + + """Private helper function to get signature for arbitrary + callable objects. + """ + + if not callable(obj): + raise TypeError('{!r} is not a callable object'.format(obj)) + + if isinstance(obj, types.MethodType): + # In this case we skip the first parameter of the underlying + # function (usually `self` or `cls`). + sig = _signature_from_callable( + obj.__func__, + follow_wrapper_chains=follow_wrapper_chains, + skip_bound_arg=skip_bound_arg, + sigcls=sigcls) + + if skip_bound_arg: + return _signature_bound_method(sig) + else: + return sig + + # Was this function wrapped by a decorator? + if follow_wrapper_chains: + obj = unwrap(obj, stop=(lambda f: hasattr(f, "__signature__"))) + if isinstance(obj, types.MethodType): + # If the unwrapped object is a *method*, we might want to + # skip its first parameter (self). + # See test_signature_wrapped_bound_method for details. + return _signature_from_callable( + obj, + follow_wrapper_chains=follow_wrapper_chains, + skip_bound_arg=skip_bound_arg, + sigcls=sigcls) + + try: + sig = obj.__signature__ + except AttributeError: + pass + else: + if sig is not None: + if not isinstance(sig, Signature): + raise TypeError( + 'unexpected object {!r} in __signature__ ' + 'attribute'.format(sig)) + return sig + + try: + partialmethod = obj._partialmethod + except AttributeError: + pass + else: + if isinstance(partialmethod, functools.partialmethod): + # Unbound partialmethod (see functools.partialmethod) + # This means, that we need to calculate the signature + # as if it's a regular partial object, but taking into + # account that the first positional argument + # (usually `self`, or `cls`) will not be passed + # automatically (as for boundmethods) + + wrapped_sig = _signature_from_callable( + partialmethod.func, + follow_wrapper_chains=follow_wrapper_chains, + skip_bound_arg=skip_bound_arg, + sigcls=sigcls) + + sig = _signature_get_partial(wrapped_sig, partialmethod, (None,)) + + first_wrapped_param = tuple(wrapped_sig.parameters.values())[0] + new_params = (first_wrapped_param,) + tuple(sig.parameters.values()) + + return sig.replace(parameters=new_params) + + if isfunction(obj) or _signature_is_functionlike(obj): + # If it's a pure Python function, or an object that is duck type + # of a Python function (Cython functions, for instance), then: + return _signature_from_function(sigcls, obj) + + if _signature_is_builtin(obj): + return _signature_from_builtin(sigcls, obj, + skip_bound_arg=skip_bound_arg) + + if isinstance(obj, functools.partial): + wrapped_sig = _signature_from_callable( + obj.func, + follow_wrapper_chains=follow_wrapper_chains, + skip_bound_arg=skip_bound_arg, + sigcls=sigcls) + return _signature_get_partial(wrapped_sig, obj) + + sig = None + if isinstance(obj, type): + # obj is a class or a metaclass + + # First, let's see if it has an overloaded __call__ defined + # in its metaclass + call = _signature_get_user_defined_method(type(obj), '__call__') + if call is not None: + sig = _signature_from_callable( + call, + follow_wrapper_chains=follow_wrapper_chains, + skip_bound_arg=skip_bound_arg, + sigcls=sigcls) + else: + # Now we check if the 'obj' class has a '__new__' method + new = _signature_get_user_defined_method(obj, '__new__') + if new is not None: + sig = _signature_from_callable( + new, + follow_wrapper_chains=follow_wrapper_chains, + skip_bound_arg=skip_bound_arg, + sigcls=sigcls) + else: + # Finally, we should have at least __init__ implemented + init = _signature_get_user_defined_method(obj, '__init__') + if init is not None: + sig = _signature_from_callable( + init, + follow_wrapper_chains=follow_wrapper_chains, + skip_bound_arg=skip_bound_arg, + sigcls=sigcls) + + if sig is None: + # At this point we know, that `obj` is a class, with no user- + # defined '__init__', '__new__', or class-level '__call__' + + for base in obj.__mro__[:-1]: + # Since '__text_signature__' is implemented as a + # descriptor that extracts text signature from the + # class docstring, if 'obj' is derived from a builtin + # class, its own '__text_signature__' may be 'None'. + # Therefore, we go through the MRO (except the last + # class in there, which is 'object') to find the first + # class with non-empty text signature. + try: + text_sig = base.__text_signature__ + except AttributeError: + pass + else: + if text_sig: + # If 'obj' class has a __text_signature__ attribute: + # return a signature based on it + return _signature_fromstr(sigcls, obj, text_sig) + + # No '__text_signature__' was found for the 'obj' class. + # Last option is to check if its '__init__' is + # object.__init__ or type.__init__. + if type not in obj.__mro__: + # We have a class (not metaclass), but no user-defined + # __init__ or __new__ for it + if (obj.__init__ is object.__init__ and + obj.__new__ is object.__new__): + # Return a signature of 'object' builtin. + return signature(object) + else: + raise ValueError( + 'no signature found for builtin type {!r}'.format(obj)) + + elif not isinstance(obj, _NonUserDefinedCallables): + # An object with __call__ + # We also check that the 'obj' is not an instance of + # _WrapperDescriptor or _MethodWrapper to avoid + # infinite recursion (and even potential segfault) + call = _signature_get_user_defined_method(type(obj), '__call__') + if call is not None: + try: + sig = _signature_from_callable( + call, + follow_wrapper_chains=follow_wrapper_chains, + skip_bound_arg=skip_bound_arg, + sigcls=sigcls) + except ValueError as ex: + msg = 'no signature found for {!r}'.format(obj) + raise ValueError(msg) from ex + + if sig is not None: + # For classes and objects we skip the first parameter of their + # __call__, __new__, or __init__ methods + if skip_bound_arg: + return _signature_bound_method(sig) + else: + return sig + + if isinstance(obj, types.BuiltinFunctionType): + # Raise a nicer error message for builtins + msg = 'no signature found for builtin function {!r}'.format(obj) + raise ValueError(msg) + + raise ValueError('callable {!r} is not supported by signature'.format(obj)) + + +class _void: + """A private marker - used in Parameter & Signature.""" + + +class _empty: + """Marker object for Signature.empty and Parameter.empty.""" + + +class _ParameterKind(enum.IntEnum): + POSITIONAL_ONLY = 0 + POSITIONAL_OR_KEYWORD = 1 + VAR_POSITIONAL = 2 + KEYWORD_ONLY = 3 + VAR_KEYWORD = 4 + + def __str__(self): + return self._name_ + + +_POSITIONAL_ONLY = _ParameterKind.POSITIONAL_ONLY +_POSITIONAL_OR_KEYWORD = _ParameterKind.POSITIONAL_OR_KEYWORD +_VAR_POSITIONAL = _ParameterKind.VAR_POSITIONAL +_KEYWORD_ONLY = _ParameterKind.KEYWORD_ONLY +_VAR_KEYWORD = _ParameterKind.VAR_KEYWORD + + +class Parameter: + """Represents a parameter in a function signature. + + Has the following public attributes: + + * name : str + The name of the parameter as a string. + * default : object + The default value for the parameter if specified. If the + parameter has no default value, this attribute is set to + `Parameter.empty`. + * annotation + The annotation for the parameter if specified. If the + parameter has no annotation, this attribute is set to + `Parameter.empty`. + * kind : str + Describes how argument values are bound to the parameter. + Possible values: `Parameter.POSITIONAL_ONLY`, + `Parameter.POSITIONAL_OR_KEYWORD`, `Parameter.VAR_POSITIONAL`, + `Parameter.KEYWORD_ONLY`, `Parameter.VAR_KEYWORD`. + """ + + __slots__ = ('_name', '_kind', '_default', '_annotation') + + POSITIONAL_ONLY = _POSITIONAL_ONLY + POSITIONAL_OR_KEYWORD = _POSITIONAL_OR_KEYWORD + VAR_POSITIONAL = _VAR_POSITIONAL + KEYWORD_ONLY = _KEYWORD_ONLY + VAR_KEYWORD = _VAR_KEYWORD + + empty = _empty + + def __init__(self, name, kind, *, default=_empty, annotation=_empty): + + if kind not in (_POSITIONAL_ONLY, _POSITIONAL_OR_KEYWORD, + _VAR_POSITIONAL, _KEYWORD_ONLY, _VAR_KEYWORD): + raise ValueError("invalid value for 'Parameter.kind' attribute") + self._kind = kind + + if default is not _empty: + if kind in (_VAR_POSITIONAL, _VAR_KEYWORD): + msg = '{} parameters cannot have default values'.format(kind) + raise ValueError(msg) + self._default = default + self._annotation = annotation + + if name is _empty: + raise ValueError('name is a required attribute for Parameter') + + if not isinstance(name, str): + raise TypeError("name must be a str, not a {!r}".format(name)) + + if not name.isidentifier(): + raise ValueError('{!r} is not a valid parameter name'.format(name)) + + self._name = name + + def __reduce__(self): + return (type(self), + (self._name, self._kind), + {'_default': self._default, + '_annotation': self._annotation}) + + def __setstate__(self, state): + self._default = state['_default'] + self._annotation = state['_annotation'] + + @property + def name(self): + return self._name + + @property + def default(self): + return self._default + + @property + def annotation(self): + return self._annotation + + @property + def kind(self): + return self._kind + + def replace(self, *, name=_void, kind=_void, + annotation=_void, default=_void): + """Creates a customized copy of the Parameter.""" + + if name is _void: + name = self._name + + if kind is _void: + kind = self._kind + + if annotation is _void: + annotation = self._annotation + + if default is _void: + default = self._default + + return type(self)(name, kind, default=default, annotation=annotation) + + def __str__(self): + kind = self.kind + formatted = self._name + + # Add annotation and default value + if self._annotation is not _empty: + formatted = '{}:{}'.format(formatted, + formatannotation(self._annotation)) + + if self._default is not _empty: + formatted = '{}={}'.format(formatted, repr(self._default)) + + if kind == _VAR_POSITIONAL: + formatted = '*' + formatted + elif kind == _VAR_KEYWORD: + formatted = '**' + formatted + + return formatted + + def __repr__(self): + return '<{} "{}">'.format(self.__class__.__name__, self) + + def __hash__(self): + return hash((self.name, self.kind, self.annotation, self.default)) + + def __eq__(self, other): + if self is other: + return True + if not isinstance(other, Parameter): + return NotImplemented + return (self._name == other._name and + self._kind == other._kind and + self._default == other._default and + self._annotation == other._annotation) + + +class BoundArguments: + """Result of `Signature.bind` call. Holds the mapping of arguments + to the function's parameters. + + Has the following public attributes: + + * arguments : OrderedDict + An ordered mutable mapping of parameters' names to arguments' values. + Does not contain arguments' default values. + * signature : Signature + The Signature object that created this instance. + * args : tuple + Tuple of positional arguments values. + * kwargs : dict + Dict of keyword arguments values. + """ + + __slots__ = ('arguments', '_signature', '__weakref__') + + def __init__(self, signature, arguments): + self.arguments = arguments + self._signature = signature + + @property + def signature(self): + return self._signature + + @property + def args(self): + args = [] + for param_name, param in self._signature.parameters.items(): + if param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY): + break + + try: + arg = self.arguments[param_name] + except KeyError: + # We're done here. Other arguments + # will be mapped in 'BoundArguments.kwargs' + break + else: + if param.kind == _VAR_POSITIONAL: + # *args + args.extend(arg) + else: + # plain argument + args.append(arg) + + return tuple(args) + + @property + def kwargs(self): + kwargs = {} + kwargs_started = False + for param_name, param in self._signature.parameters.items(): + if not kwargs_started: + if param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY): + kwargs_started = True + else: + if param_name not in self.arguments: + kwargs_started = True + continue + + if not kwargs_started: + continue + + try: + arg = self.arguments[param_name] + except KeyError: + pass + else: + if param.kind == _VAR_KEYWORD: + # **kwargs + kwargs.update(arg) + else: + # plain keyword argument + kwargs[param_name] = arg + + return kwargs + + def apply_defaults(self): + """Set default values for missing arguments. + + For variable-positional arguments (*args) the default is an + empty tuple. + + For variable-keyword arguments (**kwargs) the default is an + empty dict. + """ + arguments = self.arguments + new_arguments = [] + for name, param in self._signature.parameters.items(): + try: + new_arguments.append((name, arguments[name])) + except KeyError: + if param.default is not _empty: + val = param.default + elif param.kind is _VAR_POSITIONAL: + val = () + elif param.kind is _VAR_KEYWORD: + val = {} + else: + # This BoundArguments was likely produced by + # Signature.bind_partial(). + continue + new_arguments.append((name, val)) + self.arguments = OrderedDict(new_arguments) + + def __eq__(self, other): + if self is other: + return True + if not isinstance(other, BoundArguments): + return NotImplemented + return (self.signature == other.signature and + self.arguments == other.arguments) + + def __setstate__(self, state): + self._signature = state['_signature'] + self.arguments = state['arguments'] + + def __getstate__(self): + return {'_signature': self._signature, 'arguments': self.arguments} + + def __repr__(self): + args = [] + for arg, value in self.arguments.items(): + args.append('{}={!r}'.format(arg, value)) + return '<{} ({})>'.format(self.__class__.__name__, ', '.join(args)) + + +class Signature: + """A Signature object represents the overall signature of a function. + It stores a Parameter object for each parameter accepted by the + function, as well as information specific to the function itself. + + A Signature object has the following public attributes and methods: + + * parameters : OrderedDict + An ordered mapping of parameters' names to the corresponding + Parameter objects (keyword-only arguments are in the same order + as listed in `code.co_varnames`). + * return_annotation : object + The annotation for the return type of the function if specified. + If the function has no annotation for its return type, this + attribute is set to `Signature.empty`. + * bind(*args, **kwargs) -> BoundArguments + Creates a mapping from positional and keyword arguments to + parameters. + * bind_partial(*args, **kwargs) -> BoundArguments + Creates a partial mapping from positional and keyword arguments + to parameters (simulating 'functools.partial' behavior.) + """ + + __slots__ = ('_return_annotation', '_parameters') + + _parameter_cls = Parameter + _bound_arguments_cls = BoundArguments + + empty = _empty + + def __init__(self, parameters=None, *, return_annotation=_empty, + __validate_parameters__=True): + """Constructs Signature from the given list of Parameter + objects and 'return_annotation'. All arguments are optional. + """ + + if parameters is None: + params = OrderedDict() + else: + if __validate_parameters__: + params = OrderedDict() + top_kind = _POSITIONAL_ONLY + kind_defaults = False + + for idx, param in enumerate(parameters): + kind = param.kind + name = param.name + + if kind < top_kind: + msg = 'wrong parameter order: {!r} before {!r}' + msg = msg.format(top_kind, kind) + raise ValueError(msg) + elif kind > top_kind: + kind_defaults = False + top_kind = kind + + if kind in (_POSITIONAL_ONLY, _POSITIONAL_OR_KEYWORD): + if param.default is _empty: + if kind_defaults: + # No default for this parameter, but the + # previous parameter of the same kind had + # a default + msg = 'non-default argument follows default ' \ + 'argument' + raise ValueError(msg) + else: + # There is a default for this parameter. + kind_defaults = True + + if name in params: + msg = 'duplicate parameter name: {!r}'.format(name) + raise ValueError(msg) + + params[name] = param + else: + params = OrderedDict(((param.name, param) + for param in parameters)) + + self._parameters = types.MappingProxyType(params) + self._return_annotation = return_annotation + + @classmethod + def from_function(cls, func): + """Constructs Signature for the given python function.""" + + warnings.warn("inspect.Signature.from_function() is deprecated, " + "use Signature.from_callable()", + DeprecationWarning, stacklevel=2) + return _signature_from_function(cls, func) + + @classmethod + def from_builtin(cls, func): + """Constructs Signature for the given builtin function.""" + + warnings.warn("inspect.Signature.from_builtin() is deprecated, " + "use Signature.from_callable()", + DeprecationWarning, stacklevel=2) + return _signature_from_builtin(cls, func) + + @classmethod + def from_callable(cls, obj, *, follow_wrapped=True): + """Constructs Signature for the given callable object.""" + return _signature_from_callable(obj, sigcls=cls, + follow_wrapper_chains=follow_wrapped) + + @property + def parameters(self): + return self._parameters + + @property + def return_annotation(self): + return self._return_annotation + + def replace(self, *, parameters=_void, return_annotation=_void): + """Creates a customized copy of the Signature. + Pass 'parameters' and/or 'return_annotation' arguments + to override them in the new copy. + """ + + if parameters is _void: + parameters = self.parameters.values() + + if return_annotation is _void: + return_annotation = self._return_annotation + + return type(self)(parameters, + return_annotation=return_annotation) + + def _hash_basis(self): + params = tuple(param for param in self.parameters.values() + if param.kind != _KEYWORD_ONLY) + + kwo_params = {param.name: param for param in self.parameters.values() + if param.kind == _KEYWORD_ONLY} + + return params, kwo_params, self.return_annotation + + def __hash__(self): + params, kwo_params, return_annotation = self._hash_basis() + kwo_params = frozenset(kwo_params.values()) + return hash((params, kwo_params, return_annotation)) + + def __eq__(self, other): + if self is other: + return True + if not isinstance(other, Signature): + return NotImplemented + return self._hash_basis() == other._hash_basis() + + def _bind(self, args, kwargs, *, partial=False): + """Private method. Don't use directly.""" + + arguments = OrderedDict() + + parameters = iter(self.parameters.values()) + parameters_ex = () + arg_vals = iter(args) + + while True: + # Let's iterate through the positional arguments and corresponding + # parameters + try: + arg_val = next(arg_vals) + except StopIteration: + # No more positional arguments + try: + param = next(parameters) + except StopIteration: + # No more parameters. That's it. Just need to check that + # we have no `kwargs` after this while loop + break + else: + if param.kind == _VAR_POSITIONAL: + # That's OK, just empty *args. Let's start parsing + # kwargs + break + elif param.name in kwargs: + if param.kind == _POSITIONAL_ONLY: + msg = '{arg!r} parameter is positional only, ' \ + 'but was passed as a keyword' + msg = msg.format(arg=param.name) + raise TypeError(msg) from None + parameters_ex = (param,) + break + elif (param.kind == _VAR_KEYWORD or + param.default is not _empty): + # That's fine too - we have a default value for this + # parameter. So, lets start parsing `kwargs`, starting + # with the current parameter + parameters_ex = (param,) + break + else: + # No default, not VAR_KEYWORD, not VAR_POSITIONAL, + # not in `kwargs` + if partial: + parameters_ex = (param,) + break + else: + msg = 'missing a required argument: {arg!r}' + msg = msg.format(arg=param.name) + raise TypeError(msg) from None + else: + # We have a positional argument to process + try: + param = next(parameters) + except StopIteration: + raise TypeError('too many positional arguments') from None + else: + if param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY): + # Looks like we have no parameter for this positional + # argument + raise TypeError( + 'too many positional arguments') from None + + if param.kind == _VAR_POSITIONAL: + # We have an '*args'-like argument, let's fill it with + # all positional arguments we have left and move on to + # the next phase + values = [arg_val] + values.extend(arg_vals) + arguments[param.name] = tuple(values) + break + + if param.name in kwargs: + raise TypeError( + 'multiple values for argument {arg!r}'.format( + arg=param.name)) from None + + arguments[param.name] = arg_val + + # Now, we iterate through the remaining parameters to process + # keyword arguments + kwargs_param = None + for param in itertools.chain(parameters_ex, parameters): + if param.kind == _VAR_KEYWORD: + # Memorize that we have a '**kwargs'-like parameter + kwargs_param = param + continue + + if param.kind == _VAR_POSITIONAL: + # Named arguments don't refer to '*args'-like parameters. + # We only arrive here if the positional arguments ended + # before reaching the last parameter before *args. + continue + + param_name = param.name + try: + arg_val = kwargs.pop(param_name) + except KeyError: + # We have no value for this parameter. It's fine though, + # if it has a default value, or it is an '*args'-like + # parameter, left alone by the processing of positional + # arguments. + if (not partial and param.kind != _VAR_POSITIONAL and + param.default is _empty): + raise TypeError('missing a required argument: {arg!r}'. \ + format(arg=param_name)) from None + + else: + if param.kind == _POSITIONAL_ONLY: + # This should never happen in case of a properly built + # Signature object (but let's have this check here + # to ensure correct behaviour just in case) + raise TypeError('{arg!r} parameter is positional only, ' + 'but was passed as a keyword'. \ + format(arg=param.name)) + + arguments[param_name] = arg_val + + if kwargs: + if kwargs_param is not None: + # Process our '**kwargs'-like parameter + arguments[kwargs_param.name] = kwargs + else: + raise TypeError( + 'got an unexpected keyword argument {arg!r}'.format( + arg=next(iter(kwargs)))) + + return self._bound_arguments_cls(self, arguments) + + def bind(*args, **kwargs): + """Get a BoundArguments object, that maps the passed `args` + and `kwargs` to the function's signature. Raises `TypeError` + if the passed arguments can not be bound. + """ + return args[0]._bind(args[1:], kwargs) + + def bind_partial(*args, **kwargs): + """Get a BoundArguments object, that partially maps the + passed `args` and `kwargs` to the function's signature. + Raises `TypeError` if the passed arguments can not be bound. + """ + return args[0]._bind(args[1:], kwargs, partial=True) + + def __reduce__(self): + return (type(self), + (tuple(self._parameters.values()),), + {'_return_annotation': self._return_annotation}) + + def __setstate__(self, state): + self._return_annotation = state['_return_annotation'] + + def __repr__(self): + return '<{} {}>'.format(self.__class__.__name__, self) + + def __str__(self): + result = [] + render_pos_only_separator = False + render_kw_only_separator = True + for param in self.parameters.values(): + formatted = str(param) + + kind = param.kind + + if kind == _POSITIONAL_ONLY: + render_pos_only_separator = True + elif render_pos_only_separator: + # It's not a positional-only parameter, and the flag + # is set to 'True' (there were pos-only params before.) + result.append('/') + render_pos_only_separator = False + + if kind == _VAR_POSITIONAL: + # OK, we have an '*args'-like parameter, so we won't need + # a '*' to separate keyword-only arguments + render_kw_only_separator = False + elif kind == _KEYWORD_ONLY and render_kw_only_separator: + # We have a keyword-only parameter to render and we haven't + # rendered an '*args'-like parameter before, so add a '*' + # separator to the parameters list ("foo(arg1, *, arg2)" case) + result.append('*') + # This condition should be only triggered once, so + # reset the flag + render_kw_only_separator = False + + result.append(formatted) + + if render_pos_only_separator: + # There were only positional-only parameters, hence the + # flag was not reset to 'False' + result.append('/') + + rendered = '({})'.format(', '.join(result)) + + if self.return_annotation is not _empty: + anno = formatannotation(self.return_annotation) + rendered += ' -> {}'.format(anno) + + return rendered + + +def signature(obj, *, follow_wrapped=True): + """Get a signature object for the passed callable.""" + return Signature.from_callable(obj, follow_wrapped=follow_wrapped) + + +def _main(): + """ Logic for inspecting an object given at command line """ + import argparse + import importlib + + parser = argparse.ArgumentParser() + parser.add_argument( + 'object', + help="The object to be analysed. " + "It supports the 'module:qualname' syntax") + parser.add_argument( + '-d', '--details', action='store_true', + help='Display info about the module rather than its source code') + + args = parser.parse_args() + + target = args.object + mod_name, has_attrs, attrs = target.partition(":") + try: + obj = module = importlib.import_module(mod_name) + except Exception as exc: + msg = "Failed to import {} ({}: {})".format(mod_name, + type(exc).__name__, + exc) + print(msg, file=sys.stderr) + exit(2) + + if has_attrs: + parts = attrs.split(".") + obj = module + for part in parts: + obj = getattr(obj, part) + + if module.__name__ in sys.builtin_module_names: + print("Can't get info for builtin modules.", file=sys.stderr) + exit(1) + + if args.details: + print('Target: {}'.format(target)) + print('Origin: {}'.format(getsourcefile(module))) + print('Cached: {}'.format(module.__cached__)) + if obj is module: + print('Loader: {}'.format(repr(module.__loader__))) + if hasattr(module, '__path__'): + print('Submodule search path: {}'.format(module.__path__)) + else: + try: + __, lineno = findsource(obj) + except Exception: + pass + else: + print('Line: {}'.format(lineno)) + + print('\n') + else: + print(getsource(obj)) + + +if __name__ == "__main__": + _main() diff --git a/tools/patch_codegen.py b/tools/patch_codegen.py index b7cff23..2f143da 100644 --- a/tools/patch_codegen.py +++ b/tools/patch_codegen.py @@ -3,6 +3,7 @@ from __future__ import print_function import os import re import sys +import six import xml.etree.ElementTree as ET try: @@ -31,7 +32,7 @@ patched_cmt = "// patched by patch_codegen.py" # Load specific patches patches = {} if os.path.isfile(args.patches): - with open(args.patches, "r") as fin: + with open(args.patches) as fin: patches = eval(fin.read()) class batch_patches_t: @@ -51,7 +52,7 @@ class batch_patches_t: batch_patches_data = {} if os.path.isfile(args.batch_patches): - with open(args.batch_patches, "r") as fin: + with open(args.batch_patches) as fin: batch_patches_data = eval(fin.read()) batch_patches = batch_patches_t(batch_patches_data) @@ -127,7 +128,7 @@ all_lines = [ "# define SWIG_NORETURN __attribute__((noreturn))\n", "#endif\n", ] -with open(args.input, "rb") as f: +with open(args.input) as f: STAT_UNKNOWN = {} STAT_IN_FUNCTION = {} stat = STAT_UNKNOWN @@ -187,6 +188,8 @@ with open(args.input, "rb") as f: else: if line.find("PyArg_UnpackTuple(args") > -1: current_function_uses_args = True + elif line.find(" = args;"): + current_function_uses_args = True elif line.find("varargs") > -1: current_function_uses_varargs = True for patch_kind, patch_data in func_patches: @@ -208,14 +211,14 @@ with open(args.input, "rb") as f: " PyErr_Print();\n" " }\n", line) - elif line.rstrip().endswith("c_result;"): - vtype = line.strip().split()[0] - init_line = " %s c_result = %s(0);" % (vtype, vtype) + elif line.rstrip().find("c_result = SwigValueInit") > -1: + # vtype = line.strip().split()[0] + # init_line = " %s c_result = %s(0);" % (vtype, vtype) subst = append_subst( subst, " PYW_GIL_GET; %s\n" % patched_cmt + " try {", - init_line) + line) elif patch_kind == "repl_text": idx = line.find(patch_data[0]) @@ -234,6 +237,10 @@ with open(args.input, "rb") as f: " init_director_hooks(self, %s::mappings, %s::mappings_size);" % ( hooks_class_name, hooks_class_name), ] + for forbidden, replacement in (patch_data or []): + subst.append("ensure_no_method_when_no_695_compat(self, \"%s\", \"%s\");" % ( + forbidden, replacement)) + elif patch_kind == "thread_unsafe": if entered_function: subst = prepend_subst(subst, " if ( !__chkthr() ) return NULL; %s" % patched_cmt, line) @@ -282,15 +289,15 @@ with open(args.input, "rb") as f: current_function_proto = None if subst is not None: - if isinstance(subst, basestring): + if isinstance(subst, six.string_types): subst = [subst] all_lines.extend(map(lambda l: "%s\n" % l, subst)) else: all_lines.append(line) import tempfile -temp = tempfile.NamedTemporaryFile(delete=False) -temp.writelines(all_lines) +temp = tempfile.NamedTemporaryFile(mode="w", delete=False) +temp.write("".join(all_lines)) temp.close() import shutil diff --git a/tools/patch_codegen/idp.py b/tools/patch_codegen/idp.py index 9d44a3e..747f8ff 100644 --- a/tools/patch_codegen/idp.py +++ b/tools/patch_codegen/idp.py @@ -1,6 +1,9 @@ { "SwigDirector_IDP_Hooks::SwigDirector_IDP_Hooks" : [ - ("maybe_collect_director_fixed_method_set", None), + ("maybe_collect_director_fixed_method_set", + [ + ("auto_queue_empty", "ev_auto_queue_empty"), + ]), ], "SwigDirector_IDB_Hooks::SwigDirector_IDB_Hooks" : [ ("maybe_collect_director_fixed_method_set", None), @@ -21,10 +24,10 @@ if ( __argcnt == 2 ) { result = PyInt_FromLong(0); } - else if ( PyInt_Check(result) ) + else if ( IDAPyInt_Check(result) ) { - *color = bgcolor_t(PyInt_AsLong(result)); - result = PyInt_FromLong(1); + *color = bgcolor_t(IDAPyInt_AsLong(result)); + result = IDAPyInt_FromLong(1); } } """)), diff --git a/tools/patch_codegen/kernwin.py b/tools/patch_codegen/kernwin.py index f57c95c..8e9b328 100644 --- a/tools/patch_codegen/kernwin.py +++ b/tools/patch_codegen/kernwin.py @@ -3,7 +3,15 @@ ("va_copy", ("arg4", "temp")), ], "SwigDirector_UI_Hooks::SwigDirector_UI_Hooks" : [ - ("maybe_collect_director_fixed_method_set", None), + ("maybe_collect_director_fixed_method_set", + [ + ("tform_visible", "widget_visible"), + ("tform_invisible", "widget_invisible"), + ("populating_tform_popup", "populating_widget_popup"), + ("finish_populating_tform_popup", "finish_populating_widget_popup"), + ("current_tform_changed", "current_widget_changed"), + ] + ), ], "SwigDirector_View_Hooks::SwigDirector_View_Hooks" : [ ("maybe_collect_director_fixed_method_set", None), @@ -22,7 +30,12 @@ "(swig_get_self(), (PyObject *) swig_method_name ,(PyObject *)obj0,(PyObject *)obj1,(__argcnt < 4 ? NULL : (PyObject *)obj2), NULL)", )), ], - "__additional_thread_unsafe__" : ["py_get_ask_form", "py_get_open_form"], + "__additional_thread_unsafe__" : + [ + "py_get_ask_form", + "py_get_open_form", + "pyscv_init", + ], "error__varargs__" : [ ("repl_text", ("resultobj = SWIG_Py_Void();", " // resultobj = SWIG_Py_Void();")), ("repl_text", ("return resultobj;", "qnotused(resultobj); // return resultobj;")), diff --git a/tools/patch_codegen/nalt.py b/tools/patch_codegen/nalt.py new file mode 100644 index 0000000..c465666 --- /dev/null +++ b/tools/patch_codegen/nalt.py @@ -0,0 +1,6 @@ +{ + "__additional_thread_unsafe__" : + [ + "validate_idb_names", + ] +} diff --git a/tools/patch_constants.py b/tools/patch_constants.py index cf81c22..61d3d21 100644 --- a/tools/patch_constants.py +++ b/tools/patch_constants.py @@ -1,3 +1,14 @@ +""" + This script replaces the long sequence of calls like: + SWIG_Python_SetConstant(d, "s39_xg",SWIG_From_int(static_cast< int >(s39_xg))); + SWIG_Python_SetConstant(d, "s39_xgr",SWIG_From_int(static_cast< int >(s39_xgr))); + + by a table of names+values and a loop calling the function. + + This is necessitated by the huge slowdown in GCC when trying to optimize a huge list of such calls + in allins.cpp SWIG wrapper (~20 min). + +""" from __future__ import print_function import re @@ -55,75 +66,27 @@ subexprs = { "cit_int", "i", "int", - "SWIG_From_int(static_cast< int >(ci.val.i))"), - "u" : Foldable( - pyobj_expr_uint, - "cit_uint", - "u", - "unsigned int", - "SWIG_From_unsigned_SS_int(static_cast< unsigned int >(ci.val.u))"), - "l" : Foldable( - pyobj_expr_long, - "cit_long", - "l", - "long", - "SWIG_From_long(static_cast< long >(ci.val.l))"), - "ul" : Foldable( - pyobj_expr_ulong, - "cit_ulong", - "ul", - "unsigned long", - "SWIG_From_unsigned_SS_long(static_cast< unsigned long >(ci.val.ul))"), - "s" : Foldable( - pyobj_expr_str, - "cit_charptr", - "s", - "char *", - "SWIG_FromCharPtr(ci.val.s)"), + "SWIG_From_int(static_cast< int >(ci.val))"), } def generate_constants(constants): # now, generate the array & loop outlines.append(""" /* 'SetConstant' replacement */ -union ida_local cival_t -{ - PyObject *o; - int i; - unsigned int u; - long l; - unsigned long ul; - const char *s; -}; - -enum cit_t -{ - cit_int = 1, - cit_uint, - cit_long, - cit_ulong, - cit_charptr, - cit_obj, -}; - static const ida_local struct ci_t { const char *name; - cival_t val; - cit_t type; + int val; } cis[%d] = { """ % len(constants)) for c in constants: name = c[0] expr = c[1] - init = "o" - cast = "PyObject *" - citype = "cit_obj" # Analyze expression. If it is one of the # supported types, let's simplify the code. - for kind in subexprs.keys(): + for kind in ["i"]: subexpr = subexprs[kind] sematch = subexpr.re.search(expr) if sematch: @@ -133,7 +96,7 @@ static const ida_local struct ci_t cast = subexpr.cast subexpr.found_any = True break - outlines.append("\t{%s, {.%s = (%s) (%s)}, %s},\n" % (name, init, cast, expr, citype)) + outlines.append("\t{%s, static_cast< int >(%s)},\n" % (name, expr)) outlines.append(""" }; @@ -141,31 +104,17 @@ static const ida_local struct ci_t for ( size_t _cidx = 0; _cidx < qnumber(cis); ++_cidx ) { const ci_t &ci = cis[_cidx]; - PyObject *o = NULL; - switch ( ci.type ) - { -""") + PyObject *o = """) - for kind in subexprs.keys(): - subexpr = subexprs[kind] - if subexpr.found_any: - outlines.append(""" - case %s: - o = %s; - break; - """ % (subexpr.enum, subexpr.replacement)) + subexpr = subexprs["i"] + outlines.append("""%s;""" % (subexpr.replacement)) outlines.append(""" - case cit_obj: - o = ci.val.o; - break; - default: INTERR(0); - } SWIG_Python_SetConstant(d, ci.name, o); } """) -with open(args.input, "rb") as f: +with open(args.input) as f: constants = [] for line in f: @@ -196,7 +145,7 @@ with open(args.input, "rb") as f: print("Done collecting at line: '%s'" % line) else: match = set_constant_re.search(line) - if match: + if match and pyobj_expr_int.search(match.group(2)): tpl = (match.group(1), match.group(2)) constants.append(tpl) if args.verbose: @@ -205,7 +154,7 @@ with open(args.input, "rb") as f: outlines.append(line) import tempfile -temp = tempfile.NamedTemporaryFile(delete=False) +temp = tempfile.NamedTemporaryFile(mode="w", delete=False) temp.write("".join(outlines)) temp.close() diff --git a/tools/patch_directors_cc.py b/tools/patch_directors_cc.py index 87a48f0..ddcdfc6 100644 --- a/tools/patch_directors_cc.py +++ b/tools/patch_directors_cc.py @@ -1,10 +1,10 @@ from __future__ import print_function try: - from argparse import ArgumentParser + from argparse import ArgumentParser except: - print("Failed to import module 'argparse'. Upgrade to Python 2.7, copy argparse.py to this directory or try 'apt-get install python-argparse'") - raise + print("Failed to import module 'argparse'. Upgrade to Python 2.7, copy argparse.py to this directory or try 'apt-get install python-argparse'") + raise parser = ArgumentParser(description='Patch calling conventions for some functions, so it builds on windows') parser.add_argument("-f", "--file", required=True) @@ -102,7 +102,7 @@ patches = [ outlines = [] -with open(args.file, "rb") as f: +with open(args.file) as f: lines = f.readlines() for line in lines: for patch in patches: @@ -114,8 +114,8 @@ with open(args.file, "rb") as f: outlines.append(line) import tempfile -temp = tempfile.NamedTemporaryFile(delete=False) -temp.writelines(outlines) +temp = tempfile.NamedTemporaryFile(mode="w", delete=False) +temp.write("".join(outlines)) temp.close() import shutil diff --git a/tools/patch_h_codegen.py b/tools/patch_h_codegen.py index c9bb1b9..cf2a2b8 100644 --- a/tools/patch_h_codegen.py +++ b/tools/patch_h_codegen.py @@ -12,7 +12,7 @@ args = parser.parse_args() if os.path.isfile(args.patches): with open(args.file) as fin: - lines = map(str.rstrip, fin.readlines()) + lines = fin.readlines() patches = {} with open(args.patches) as fin: @@ -24,8 +24,8 @@ if os.path.isfile(args.patches): all_lines.append(l) import tempfile - temp = tempfile.NamedTemporaryFile(delete=False) - temp.write("\n".join(all_lines)) + temp = tempfile.NamedTemporaryFile(mode="w", delete=False) + temp.writelines(all_lines) temp.close() import shutil diff --git a/tools/patch_python_codegen.py b/tools/patch_python_codegen.py index a0c396d..8d708b6 100644 --- a/tools/patch_python_codegen.py +++ b/tools/patch_python_codegen.py @@ -1,6 +1,8 @@ from __future__ import print_function import os +import six + from argparse import ArgumentParser parser = ArgumentParser(description='Patch some Python code generation, so it builds') @@ -12,6 +14,7 @@ args = parser.parse_args() if os.path.isfile(args.patches): with open(args.file) as fin: + # strip newlines for easier matching lines = map(str.rstrip, fin.readlines()) patches = {} @@ -20,7 +23,7 @@ if os.path.isfile(args.patches): all_lines = [] for l in lines: - for patch_kind, patch_data in patches.iteritems(): + for patch_kind, patch_data in six.iteritems(patches): if patch_kind == "repl_line": for from_, to in patch_data: if l == from_: @@ -28,7 +31,8 @@ if os.path.isfile(args.patches): all_lines.append(l) import tempfile - temp = tempfile.NamedTemporaryFile(delete=False) + temp = tempfile.NamedTemporaryFile(mode="w", delete=False) + # since we had stripped newlines, need to add them back explicitly temp.write("\n".join(all_lines)) temp.close() diff --git a/tools/pydoc.py b/tools/pydoc.py new file mode 100755 index 0000000..94bd687 --- /dev/null +++ b/tools/pydoc.py @@ -0,0 +1,2663 @@ +#! /usr/bin/python3.5 +"""Generate Python documentation in HTML or text for interactive use. + +At the Python interactive prompt, calling help(thing) on a Python object +documents the object, and calling help() starts up an interactive +help session. + +Or, at the shell command line outside of Python: + +Run "pydoc " to show documentation on something. may be +the name of a function, module, package, or a dotted reference to a +class or function within a module or module in a package. If the +argument contains a path segment delimiter (e.g. slash on Unix, +backslash on Windows) it is treated as the path to a Python source file. + +Run "pydoc -k " to search for a keyword in the synopsis lines +of all available modules. + +Run "pydoc -p " to start an HTTP server on the given port on the +local machine. Port number 0 can be used to get an arbitrary unused port. + +Run "pydoc -b" to start an HTTP server on an arbitrary unused port and +open a Web browser to interactively browse documentation. The -p option +can be used with the -b option to explicitly specify the server port. + +Run "pydoc -w " to write out the HTML documentation for a module +to a file named ".html". + +Module docs for core modules are assumed to be in + + /usr/share/doc/pythonX.Y/html/library + +if the pythonX.Y-doc package is installed or in + + http://docs.python.org/X.Y/library/ + +This can be overridden by setting the PYTHONDOCS environment variable +to a different URL or to a local directory containing the Library +Reference Manual pages. +""" +__all__ = ['help'] +__author__ = "Ka-Ping Yee " +__date__ = "26 February 2001" + +__credits__ = """Guido van Rossum, for an excellent programming language. +Tommy Burnette, the original creator of manpy. +Paul Prescod, for all his work on onlinehelp. +Richard Chamberlain, for the first implementation of textdoc. +""" + +# Known bugs that can't be fixed here: +# - synopsis() cannot be prevented from clobbering existing +# loaded modules. +# - If the __file__ attribute on a module is a relative path and +# the current directory is changed with os.chdir(), an incorrect +# path will be displayed. + +import builtins +import sys +import importlib._bootstrap +if sys.version_info.major == 3 and sys.version_info.minor <= 4: + # Python 3.4 has everything in importlib._bootstrap + # For some reason, idapython doesn't let us catch ImportError, so there's + # no better solution than testing version. + importlib._bootstrap_external = importlib._bootstrap +else: + import importlib._bootstrap_external +import importlib.machinery +import importlib.util +import inspect +import io +import os +import pkgutil +import platform +import re +import time +import tokenize +import urllib.parse +import warnings +from collections import deque +from reprlib import Repr +from traceback import format_exception_only + + +# --------------------------------------------------------- common routines + +def pathdirs(): + """Convert sys.path into a list of absolute, existing, unique paths.""" + dirs = [] + normdirs = [] + for dir in sys.path: + dir = os.path.abspath(dir or '.') + normdir = os.path.normcase(dir) + if normdir not in normdirs and os.path.isdir(dir): + dirs.append(dir) + normdirs.append(normdir) + return dirs + +def getdoc(object): + """Get the doc string or comments for an object.""" + result = inspect.getdoc(object) or inspect.getcomments(object) + return result and re.sub('^ *\n', '', result.rstrip()) or '' + +def splitdoc(doc): + """Split a doc string into a synopsis line (if any) and the rest.""" + lines = doc.strip().split('\n') + if len(lines) == 1: + return lines[0], '' + elif len(lines) >= 2 and not lines[1].rstrip(): + return lines[0], '\n'.join(lines[2:]) + return '', '\n'.join(lines) + +def classname(object, modname): + """Get a class name and qualify it with a module name if necessary.""" + name = object.__name__ + if object.__module__ != modname: + name = object.__module__ + '.' + name + return name + +def isdata(object): + """Check if an object is of a type that probably means it's data.""" + return not (inspect.ismodule(object) or inspect.isclass(object) or + inspect.isroutine(object) or inspect.isframe(object) or + inspect.istraceback(object) or inspect.iscode(object)) + +def replace(text, *pairs): + """Do a series of global replacements on a string.""" + while pairs: + text = pairs[1].join(text.split(pairs[0])) + pairs = pairs[2:] + return text + +def cram(text, maxlen): + """Omit part of a string if needed to make it fit in a maximum length.""" + if len(text) > maxlen: + pre = max(0, (maxlen-3)//2) + post = max(0, maxlen-3-pre) + return text[:pre] + '...' + text[len(text)-post:] + return text + +_re_stripid = re.compile(r' at 0x[0-9a-f]{6,16}(>+)$', re.IGNORECASE) +def stripid(text): + """Remove the hexadecimal id from a Python object representation.""" + # The behaviour of %p is implementation-dependent in terms of case. + return _re_stripid.sub(r'\1', text) + +def _is_some_method(obj): + return (inspect.isfunction(obj) or + inspect.ismethod(obj) or + inspect.isbuiltin(obj) or + inspect.ismethoddescriptor(obj)) + +def _is_bound_method(fn): + """ + Returns True if fn is a bound method, regardless of whether + fn was implemented in Python or in C. + """ + if inspect.ismethod(fn): + return True + if inspect.isbuiltin(fn): + self = getattr(fn, '__self__', None) + return not (inspect.ismodule(self) or (self is None)) + return False + + +def allmethods(cl): + methods = {} + for key, value in inspect.getmembers(cl, _is_some_method): + methods[key] = 1 + for base in cl.__bases__: + methods.update(allmethods(base)) # all your base are belong to us + for key in methods.keys(): + methods[key] = getattr(cl, key) + return methods + +def _split_list(s, predicate): + """Split sequence s via predicate, and return pair ([true], [false]). + + The return value is a 2-tuple of lists, + ([x for x in s if predicate(x)], + [x for x in s if not predicate(x)]) + """ + + yes = [] + no = [] + for x in s: + if predicate(x): + yes.append(x) + else: + no.append(x) + return yes, no + +def visiblename(name, all=None, obj=None): + """Decide whether to show documentation on a variable.""" + # Certain special names are redundant or internal. + # XXX Remove __initializing__? + if name in {'__author__', '__builtins__', '__cached__', '__credits__', + '__date__', '__doc__', '__file__', '__spec__', + '__loader__', '__module__', '__name__', '__package__', + '__path__', '__qualname__', '__slots__', '__version__'}: + return 0 + # Private names are hidden, but special names are displayed. + if name.startswith('__') and name.endswith('__'): return 1 + # Namedtuples have public fields and methods with a single leading underscore + if name.startswith('_') and hasattr(obj, '_fields'): + return True + if all is not None: + # only document that which the programmer exported in __all__ + return name in all + else: + return not name.startswith('_') + +def classify_class_attrs(object): + """Wrap inspect.classify_class_attrs, with fixup for data descriptors.""" + results = [] + for (name, kind, cls, value) in inspect.classify_class_attrs(object): + if inspect.isdatadescriptor(value): + kind = 'data descriptor' + results.append((name, kind, cls, value)) + return results + +# ----------------------------------------------------- module manipulation + +def ispackage(path): + """Guess whether a path refers to a package directory.""" + if os.path.isdir(path): + for ext in ('.py', '.pyc'): + if os.path.isfile(os.path.join(path, '__init__' + ext)): + return True + return False + +def source_synopsis(file): + line = file.readline() + while line[:1] == '#' or not line.strip(): + line = file.readline() + if not line: break + line = line.strip() + if line[:4] == 'r"""': line = line[1:] + if line[:3] == '"""': + line = line[3:] + if line[-1:] == '\\': line = line[:-1] + while not line.strip(): + line = file.readline() + if not line: break + result = line.split('"""')[0].strip() + else: result = None + return result + +def synopsis(filename, cache={}): + """Get the one-line summary out of a module file.""" + mtime = os.stat(filename).st_mtime + lastupdate, result = cache.get(filename, (None, None)) + if lastupdate is None or lastupdate < mtime: + # Look for binary suffixes first, falling back to source. + if filename.endswith(tuple(importlib.machinery.BYTECODE_SUFFIXES)): + loader_cls = importlib.machinery.SourcelessFileLoader + elif filename.endswith(tuple(importlib.machinery.EXTENSION_SUFFIXES)): + loader_cls = importlib.machinery.ExtensionFileLoader + else: + loader_cls = None + # Now handle the choice. + if loader_cls is None: + # Must be a source file. + try: + file = tokenize.open(filename) + except OSError: + # module can't be opened, so skip it + return None + # text modules can be directly examined + with file: + result = source_synopsis(file) + else: + # Must be a binary module, which has to be imported. + loader = loader_cls('__temp__', filename) + # XXX We probably don't need to pass in the loader here. + spec = importlib.util.spec_from_file_location('__temp__', filename, + loader=loader) + try: + module = importlib._bootstrap._load(spec) + except: + return None + del sys.modules['__temp__'] + result = module.__doc__.splitlines()[0] if module.__doc__ else None + # Cache the result. + cache[filename] = (mtime, result) + return result + +class ErrorDuringImport(Exception): + """Errors that occurred while trying to import something to document it.""" + def __init__(self, filename, exc_info): + self.filename = filename + self.exc, self.value, self.tb = exc_info + + def __str__(self): + exc = self.exc.__name__ + return 'problem in %s - %s: %s' % (self.filename, exc, self.value) + +def importfile(path): + """Import a Python source file or compiled file given its path.""" + magic = importlib.util.MAGIC_NUMBER + with open(path, 'rb') as file: + is_bytecode = magic == file.read(len(magic)) + filename = os.path.basename(path) + name, ext = os.path.splitext(filename) + if is_bytecode: + loader = importlib._bootstrap_external.SourcelessFileLoader(name, path) + else: + loader = importlib._bootstrap_external.SourceFileLoader(name, path) + # XXX We probably don't need to pass in the loader here. + spec = importlib.util.spec_from_file_location(name, path, loader=loader) + try: + return importlib._bootstrap._load(spec) + except: + raise ErrorDuringImport(path, sys.exc_info()) + +def safeimport(path, forceload=0, cache={}): + """Import a module; handle errors; return None if the module isn't found. + + If the module *is* found but an exception occurs, it's wrapped in an + ErrorDuringImport exception and reraised. Unlike __import__, if a + package path is specified, the module at the end of the path is returned, + not the package at the beginning. If the optional 'forceload' argument + is 1, we reload the module from disk (unless it's a dynamic extension).""" + try: + # If forceload is 1 and the module has been previously loaded from + # disk, we always have to reload the module. Checking the file's + # mtime isn't good enough (e.g. the module could contain a class + # that inherits from another module that has changed). + if forceload and path in sys.modules: + if path not in sys.builtin_module_names: + # Remove the module from sys.modules and re-import to try + # and avoid problems with partially loaded modules. + # Also remove any submodules because they won't appear + # in the newly loaded module's namespace if they're already + # in sys.modules. + subs = [m for m in sys.modules if m.startswith(path + '.')] + for key in [path] + subs: + # Prevent garbage collection. + cache[key] = sys.modules[key] + del sys.modules[key] + module = __import__(path) + except: + # Did the error occur before or after the module was found? + (exc, value, tb) = info = sys.exc_info() + if path in sys.modules: + # An error occurred while executing the imported module. + raise ErrorDuringImport(sys.modules[path].__file__, info) + elif exc is SyntaxError: + # A SyntaxError occurred before we could execute the module. + raise ErrorDuringImport(value.filename, info) + elif exc is ImportError and value.name == path: + # No such module in the path. + return None + else: + # Some other error occurred during the importing process. + raise ErrorDuringImport(path, sys.exc_info()) + for part in path.split('.')[1:]: + try: module = getattr(module, part) + except AttributeError: return None + return module + +# ---------------------------------------------------- formatter base class + +class Doc: + + PYTHONDOCS = os.environ.get("PYTHONDOCS", + "https://docs.python.org/%d.%d/library" + % sys.version_info[:2]) + + def document(self, object, name=None, *args): + """Generate documentation for an object.""" + args = (object, name) + args + # 'try' clause is to attempt to handle the possibility that inspect + # identifies something in a way that pydoc itself has issues handling; + # think 'super' and how it is a descriptor (which raises the exception + # by lacking a __name__ attribute) and an instance. + if inspect.isgetsetdescriptor(object): return self.docdata(*args) + if inspect.ismemberdescriptor(object): return self.docdata(*args) + try: + if inspect.ismodule(object): return self.docmodule(*args) + if inspect.isclass(object): return self.docclass(*args) + if inspect.isroutine(object): return self.docroutine(*args) + except AttributeError: + pass + if isinstance(object, property): return self.docproperty(*args) + return self.docother(*args) + + def fail(self, object, name=None, *args): + """Raise an exception for unimplemented types.""" + message = "don't know how to document object%s of type %s" % ( + name and ' ' + repr(name), type(object).__name__) + raise TypeError(message) + + docmodule = docclass = docroutine = docother = docproperty = docdata = fail + + def getdocloc(self, object, + basedir=os.path.join(sys.base_exec_prefix, "lib", + "python%d.%d" % sys.version_info[:2])): + """Return the location of module docs or None""" + + try: + file = inspect.getabsfile(object) + except TypeError: + file = '(built-in)' + + docloc = os.environ.get("PYTHONDOCS", self.PYTHONDOCS) + + if (isinstance(object, type(os)) and + (object.__name__ in ('errno', 'exceptions', 'gc', 'imp', + 'marshal', 'posix', 'signal', 'sys', + '_thread', 'zipimport') or + (file.startswith(basedir) and + not file.startswith(os.path.join(basedir, 'dist-packages')) and + not file.startswith(os.path.join(basedir, 'site-packages')))) and + object.__name__ not in ('xml.etree', 'test.pydoc_mod')): + if docloc.startswith("http://"): + docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__.lower()) + else: + docloc = os.path.join(docloc, object.__name__.lower() + ".html") + else: + docloc = None + return docloc + +# -------------------------------------------- HTML documentation generator + +class HTMLRepr(Repr): + """Class for safely making an HTML representation of a Python object.""" + def __init__(self): + Repr.__init__(self) + self.maxlist = self.maxtuple = 20 + self.maxdict = 10 + self.maxstring = self.maxother = 100 + + def escape(self, text): + return replace(text, '&', '&', '<', '<', '>', '>') + + def repr(self, object): + return Repr.repr(self, object) + + def repr1(self, x, level): + if hasattr(type(x), '__name__'): + methodname = 'repr_' + '_'.join(type(x).__name__.split()) + if hasattr(self, methodname): + return getattr(self, methodname)(x, level) + return self.escape(cram(stripid(repr(x)), self.maxother)) + + def repr_string(self, x, level): + test = cram(x, self.maxstring) + testrepr = repr(test) + if '\\' in test and '\\' not in replace(testrepr, r'\\', ''): + # Backslashes are only literal in the string and are never + # needed to make any special characters, so show a raw string. + return 'r' + testrepr[0] + self.escape(test) + testrepr[0] + return re.sub(r'((\\[\\abfnrtv\'"]|\\[0-9]..|\\x..|\\u....)+)', + r'\1', + self.escape(testrepr)) + + repr_str = repr_string + + def repr_instance(self, x, level): + try: + return self.escape(cram(stripid(repr(x)), self.maxstring)) + except: + return self.escape('<%s instance>' % x.__class__.__name__) + + repr_unicode = repr_string + +class HTMLDoc(Doc): + """Formatter class for HTML documentation.""" + + # ------------------------------------------- HTML formatting utilities + + _repr_instance = HTMLRepr() + repr = _repr_instance.repr + escape = _repr_instance.escape + + def page(self, title, contents): + """Format an HTML page.""" + return '''\ + +Python: %s + + +%s +''' % (title, contents) + + def heading(self, title, fgcol, bgcol, extras=''): + """Format a page heading.""" + return ''' + + +
     
    + 
    %s
    %s
    + ''' % (bgcol, fgcol, title, fgcol, extras or ' ') + + def section(self, title, fgcol, bgcol, contents, width=6, + prelude='', marginalia=None, gap=' '): + """Format a section with a heading.""" + if marginalia is None: + marginalia = '' + ' ' * width + '' + result = '''
    ' + result = result + self.classlink(c, modname) + if bases and bases != (parent,): + parents = [] + for base in bases: + parents.append(self.classlink(base, modname)) + result = result + '(' + ', '.join(parents) + ')' + result = result + '\n
    ' + elif type(entry) is type([]): + result = result + '
    \n%s
    \n' % self.formattree( + entry, modname, c) + return '
    \n%s
    \n' % result + + def docmodule(self, object, name=None, mod=None, *ignored): + """Produce HTML documentation for a module object.""" + name = object.__name__ # ignore the passed-in name + try: + all = object.__all__ + except AttributeError: + all = None + parts = name.split('.') + links = [] + for i in range(len(parts)-1): + links.append( + '%s' % + ('.'.join(parts[:i+1]), parts[i])) + linkedname = '.'.join(links + parts[-1:]) + head = '%s' % linkedname + try: + path = inspect.getabsfile(object) + url = urllib.parse.quote(path) + filelink = self.filelink(url, path) + except TypeError: + filelink = '(built-in)' + info = [] + if hasattr(object, '__version__'): + version = str(object.__version__) + if version[:11] == '$' + 'Revision: ' and version[-1:] == '$': + version = version[11:-1].strip() + info.append('version %s' % self.escape(version)) + if hasattr(object, '__date__'): + info.append(self.escape(str(object.__date__))) + if info: + head = head + ' (%s)' % ', '.join(info) + docloc = self.getdocloc(object) + if docloc is not None: + docloc = '
    Module Reference' % locals() + else: + docloc = '' + result = self.heading( + head, '#ffffff', '#7799ee', + 'index
    ' + filelink + docloc) + + modules = inspect.getmembers(object, inspect.ismodule) + + classes, cdict = [], {} + for key, value in inspect.getmembers(object, inspect.isclass): + # if __all__ exists, believe it. Otherwise use old heuristic. + if (all is not None or + (inspect.getmodule(value) or object) is object): + if visiblename(key, all, object): + classes.append((key, value)) + cdict[key] = cdict[value] = '#' + key + for key, value in classes: + for base in value.__bases__: + key, modname = base.__name__, base.__module__ + module = sys.modules.get(modname) + if modname != name and module and hasattr(module, key): + if getattr(module, key) is base: + if not key in cdict: + cdict[key] = cdict[base] = modname + '.html#' + key + funcs, fdict = [], {} + for key, value in inspect.getmembers(object, inspect.isroutine): + # if __all__ exists, believe it. Otherwise use old heuristic. + if (all is not None or + inspect.isbuiltin(value) or inspect.getmodule(value) is object): + if visiblename(key, all, object): + funcs.append((key, value)) + fdict[key] = '#-' + key + if inspect.isfunction(value): fdict[value] = fdict[key] + data = [] + for key, value in inspect.getmembers(object, isdata): + if visiblename(key, all, object): + data.append((key, value)) + + doc = self.markup(getdoc(object), self.preformat, fdict, cdict) + doc = doc and '%s' % doc + result = result + '

    %s

    \n' % doc + + if hasattr(object, '__path__'): + modpkgs = [] + for importer, modname, ispkg in pkgutil.iter_modules(object.__path__): + modpkgs.append((modname, name, ispkg, 0)) + modpkgs.sort() + contents = self.multicolumn(modpkgs, self.modpkglink) + result = result + self.bigsection( + 'Package Contents', '#ffffff', '#aa55cc', contents) + elif modules: + contents = self.multicolumn( + modules, lambda t: self.modulelink(t[1])) + result = result + self.bigsection( + 'Modules', '#ffffff', '#aa55cc', contents) + + if classes: + classlist = [value for (key, value) in classes] + contents = [ + self.formattree(inspect.getclasstree(classlist, 1), name)] + for key, value in classes: + contents.append(self.document(value, key, name, fdict, cdict)) + result = result + self.bigsection( + 'Classes', '#ffffff', '#ee77aa', ' '.join(contents)) + if funcs: + contents = [] + for key, value in funcs: + contents.append(self.document(value, key, name, fdict, cdict)) + result = result + self.bigsection( + 'Functions', '#ffffff', '#eeaa77', ' '.join(contents)) + if data: + contents = [] + for key, value in data: + contents.append(self.document(value, key)) + result = result + self.bigsection( + 'Data', '#ffffff', '#55aa55', '
    \n'.join(contents)) + if hasattr(object, '__author__'): + contents = self.markup(str(object.__author__), self.preformat) + result = result + self.bigsection( + 'Author', '#ffffff', '#7799ee', contents) + if hasattr(object, '__credits__'): + contents = self.markup(str(object.__credits__), self.preformat) + result = result + self.bigsection( + 'Credits', '#ffffff', '#7799ee', contents) + + return result + + def docclass(self, object, name=None, mod=None, funcs={}, classes={}, + *ignored): + """Produce HTML documentation for a class object.""" + realname = object.__name__ + name = name or realname + bases = object.__bases__ + + contents = [] + push = contents.append + + # Cute little class to pump out a horizontal rule between sections. + class HorizontalRule: + def __init__(self): + self.needone = 0 + def maybe(self): + if self.needone: + push('
    \n') + self.needone = 1 + hr = HorizontalRule() + + # List the mro, if non-trivial. + mro = deque(inspect.getmro(object)) + if len(mro) > 2: + hr.maybe() + push('
    Method resolution order:
    \n') + for base in mro: + push('
    %s
    \n' % self.classlink(base, + object.__module__)) + push('
    \n') + + def spill(msg, attrs, predicate): + ok, attrs = _split_list(attrs, predicate) + if ok: + hr.maybe() + push(msg) + for name, kind, homecls, value in ok: + try: + value = getattr(object, name) + except Exception: + # Some descriptors may meet a failure in their __get__. + # (bug #1785) + push(self._docdescriptor(name, value, mod)) + else: + push(self.document(value, name, mod, + funcs, classes, mdict, object)) + push('\n') + return attrs + + def spilldescriptors(msg, attrs, predicate): + ok, attrs = _split_list(attrs, predicate) + if ok: + hr.maybe() + push(msg) + for name, kind, homecls, value in ok: + push(self._docdescriptor(name, value, mod)) + return attrs + + def spilldata(msg, attrs, predicate): + ok, attrs = _split_list(attrs, predicate) + if ok: + hr.maybe() + push(msg) + for name, kind, homecls, value in ok: + base = self.docother(getattr(object, name), name, mod) + if callable(value) or inspect.isdatadescriptor(value): + doc = getattr(value, "__doc__", None) + else: + doc = None + if doc is None: + push('
    %s
    \n' % base) + else: + doc = self.markup(getdoc(value), self.preformat, + funcs, classes, mdict) + doc = '
    %s' % doc + push('
    %s%s
    \n' % (base, doc)) + push('\n') + return attrs + + attrs = [(name, kind, cls, value) + for name, kind, cls, value in classify_class_attrs(object) + if visiblename(name, obj=object)] + + mdict = {} + for key, kind, homecls, value in attrs: + mdict[key] = anchor = '#' + name + '-' + key + try: + value = getattr(object, name) + except Exception: + # Some descriptors may meet a failure in their __get__. + # (bug #1785) + pass + try: + # The value may not be hashable (e.g., a data attr with + # a dict or list value). + mdict[value] = anchor + except TypeError: + pass + + while attrs: + if mro: + thisclass = mro.popleft() + else: + thisclass = attrs[0][2] + attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass) + + if thisclass is builtins.object: + attrs = inherited + continue + elif thisclass is object: + tag = 'defined here' + else: + tag = 'inherited from %s' % self.classlink(thisclass, + object.__module__) + tag += ':
    \n' + + # Sort attrs by name. + attrs.sort(key=lambda t: t[0]) + + # Pump out the attrs, segregated by kind. + attrs = spill('Methods %s' % tag, attrs, + lambda t: t[1] == 'method') + attrs = spill('Class methods %s' % tag, attrs, + lambda t: t[1] == 'class method') + attrs = spill('Static methods %s' % tag, attrs, + lambda t: t[1] == 'static method') + attrs = spilldescriptors('Data descriptors %s' % tag, attrs, + lambda t: t[1] == 'data descriptor') + attrs = spilldata('Data and other attributes %s' % tag, attrs, + lambda t: t[1] == 'data') + assert attrs == [] + attrs = inherited + + contents = ''.join(contents) + + if name == realname: + title = 'class %s' % ( + name, realname) + else: + title = '%s = class %s' % ( + name, name, realname) + if bases: + parents = [] + for base in bases: + parents.append(self.classlink(base, object.__module__)) + title = title + '(%s)' % ', '.join(parents) + doc = self.markup(getdoc(object), self.preformat, funcs, classes, mdict) + doc = doc and '%s
     
    ' % doc + + return self.section(title, '#000000', '#ffc8d8', contents, 3, doc) + + def formatvalue(self, object): + """Format an argument default value as text.""" + return self.grey('=' + self.repr(object)) + + def docroutine(self, object, name=None, mod=None, + funcs={}, classes={}, methods={}, cl=None): + """Produce HTML documentation for a function or method object.""" + realname = object.__name__ + name = name or realname + anchor = (cl and cl.__name__ or '') + '-' + name + note = '' + skipdocs = 0 + if _is_bound_method(object): + imclass = object.__self__.__class__ + if cl: + if imclass is not cl: + note = ' from ' + self.classlink(imclass, mod) + else: + if object.__self__ is not None: + note = ' method of %s instance' % self.classlink( + object.__self__.__class__, mod) + else: + note = ' unbound %s method' % self.classlink(imclass,mod) + + if name == realname: + title = '%s' % (anchor, realname) + else: + if (cl and realname in cl.__dict__ and + cl.__dict__[realname] is object): + reallink = '%s' % ( + cl.__name__ + '-' + realname, realname) + skipdocs = 1 + else: + reallink = realname + title = '%s = %s' % ( + anchor, name, reallink) + argspec = None + if inspect.isroutine(object): + try: + signature = inspect.signature(object) + except (ValueError, TypeError): + signature = None + if signature: + argspec = str(signature) + if realname == '': + title = '%s lambda ' % name + # XXX lambda's won't usually have func_annotations['return'] + # since the syntax doesn't support but it is possible. + # So removing parentheses isn't truly safe. + argspec = argspec[1:-1] # remove parentheses + if not argspec: + argspec = '(...)' + + decl = title + self.escape(argspec) + (note and self.grey( + '%s' % note)) + + if skipdocs: + return '
    %s
    \n' % decl + else: + doc = self.markup( + getdoc(object), self.preformat, funcs, classes, methods) + doc = doc and '
    %s
    ' % doc + return '
    %s
    %s
    \n' % (decl, doc) + + def _docdescriptor(self, name, value, mod): + results = [] + push = results.append + + if name: + push('
    %s
    \n' % name) + if value.__doc__ is not None: + doc = self.markup(getdoc(value), self.preformat) + push('
    %s
    \n' % doc) + push('
    \n') + + return ''.join(results) + + def docproperty(self, object, name=None, mod=None, cl=None): + """Produce html documentation for a property.""" + return self._docdescriptor(name, object, mod) + + def docother(self, object, name=None, mod=None, *ignored): + """Produce HTML documentation for a data object.""" + lhs = name and '%s = ' % name or '' + return lhs + self.repr(object) + + def docdata(self, object, name=None, mod=None, cl=None): + """Produce html documentation for a data descriptor.""" + return self._docdescriptor(name, object, mod) + + def index(self, dir, shadowed=None): + """Generate an HTML index for a directory of modules.""" + modpkgs = [] + if shadowed is None: shadowed = {} + for importer, name, ispkg in pkgutil.iter_modules([dir]): + if any((0xD800 <= ord(ch) <= 0xDFFF) for ch in name): + # ignore a module if its name contains a surrogate character + continue + modpkgs.append((name, '', ispkg, name in shadowed)) + shadowed[name] = 1 + + modpkgs.sort() + contents = self.multicolumn(modpkgs, self.modpkglink) + return self.bigsection(dir, '#ffffff', '#ee77aa', contents) + +# -------------------------------------------- text documentation generator + +class TextRepr(Repr): + """Class for safely making a text representation of a Python object.""" + def __init__(self): + Repr.__init__(self) + self.maxlist = self.maxtuple = 20 + self.maxdict = 10 + self.maxstring = self.maxother = 100 + + def repr1(self, x, level): + if hasattr(type(x), '__name__'): + methodname = 'repr_' + '_'.join(type(x).__name__.split()) + if hasattr(self, methodname): + return getattr(self, methodname)(x, level) + return cram(stripid(repr(x)), self.maxother) + + def repr_string(self, x, level): + test = cram(x, self.maxstring) + testrepr = repr(test) + if '\\' in test and '\\' not in replace(testrepr, r'\\', ''): + # Backslashes are only literal in the string and are never + # needed to make any special characters, so show a raw string. + return 'r' + testrepr[0] + test + testrepr[0] + return testrepr + + repr_str = repr_string + + def repr_instance(self, x, level): + try: + return cram(stripid(repr(x)), self.maxstring) + except: + return '<%s instance>' % x.__class__.__name__ + +class TextDoc(Doc): + """Formatter class for text documentation.""" + + # ------------------------------------------- text formatting utilities + + _repr_instance = TextRepr() + repr = _repr_instance.repr + + def bold(self, text): + """Format a string in bold by overstriking.""" + return ''.join(ch + '\b' + ch for ch in text) + + def indent(self, text, prefix=' '): + """Indent text by prepending a given prefix to each line.""" + if not text: return '' + lines = [prefix + line for line in text.split('\n')] + if lines: lines[-1] = lines[-1].rstrip() + return '\n'.join(lines) + + def section(self, title, contents): + """Format a section with a given heading.""" + clean_contents = self.indent(contents).rstrip() + return self.bold(title) + '\n' + clean_contents + '\n\n' + + # ---------------------------------------------- type-specific routines + + def formattree(self, tree, modname, parent=None, prefix=''): + """Render in text a class tree as returned by inspect.getclasstree().""" + result = '' + for entry in tree: + if type(entry) is type(()): + c, bases = entry + result = result + prefix + classname(c, modname) + if bases and bases != (parent,): + parents = (classname(c, modname) for c in bases) + result = result + '(%s)' % ', '.join(parents) + result = result + '\n' + elif type(entry) is type([]): + result = result + self.formattree( + entry, modname, c, prefix + ' ') + return result + + def docmodule(self, object, name=None, mod=None): + """Produce text documentation for a given module object.""" + name = object.__name__ # ignore the passed-in name + synop, desc = splitdoc(getdoc(object)) + result = self.section('NAME', name + (synop and ' - ' + synop)) + all = getattr(object, '__all__', None) + docloc = self.getdocloc(object) + if docloc is not None: + result = result + self.section('MODULE REFERENCE', docloc + """ + +The following documentation is automatically generated from the Python +source files. It may be incomplete, incorrect or include features that +are considered implementation detail and may vary between Python +implementations. When in doubt, consult the module reference at the +location listed above. +""") + + if desc: + result = result + self.section('DESCRIPTION', desc) + + classes = [] + for key, value in inspect.getmembers(object, inspect.isclass): + # if __all__ exists, believe it. Otherwise use old heuristic. + if (all is not None + or (inspect.getmodule(value) or object) is object): + if visiblename(key, all, object): + classes.append((key, value)) + funcs = [] + for key, value in inspect.getmembers(object, inspect.isroutine): + # if __all__ exists, believe it. Otherwise use old heuristic. + if (all is not None or + inspect.isbuiltin(value) or inspect.getmodule(value) is object): + if visiblename(key, all, object): + funcs.append((key, value)) + data = [] + for key, value in inspect.getmembers(object, isdata): + if visiblename(key, all, object): + data.append((key, value)) + + modpkgs = [] + modpkgs_names = set() + if hasattr(object, '__path__'): + for importer, modname, ispkg in pkgutil.iter_modules(object.__path__): + modpkgs_names.add(modname) + if ispkg: + modpkgs.append(modname + ' (package)') + else: + modpkgs.append(modname) + + modpkgs.sort() + result = result + self.section( + 'PACKAGE CONTENTS', '\n'.join(modpkgs)) + + # Detect submodules as sometimes created by C extensions + submodules = [] + for key, value in inspect.getmembers(object, inspect.ismodule): + if value.__name__.startswith(name + '.') and key not in modpkgs_names: + submodules.append(key) + if submodules: + submodules.sort() + result = result + self.section( + 'SUBMODULES', '\n'.join(submodules)) + + if classes: + classlist = [value for key, value in classes] + contents = [self.formattree( + inspect.getclasstree(classlist, 1), name)] + for key, value in classes: + contents.append(self.document(value, key, name)) + result = result + self.section('CLASSES', '\n'.join(contents)) + + if funcs: + contents = [] + for key, value in funcs: + contents.append(self.document(value, key, name)) + result = result + self.section('FUNCTIONS', '\n'.join(contents)) + + if data: + contents = [] + for key, value in data: + contents.append(self.docother(value, key, name, maxlen=70)) + result = result + self.section('DATA', '\n'.join(contents)) + + if hasattr(object, '__version__'): + version = str(object.__version__) + if version[:11] == '$' + 'Revision: ' and version[-1:] == '$': + version = version[11:-1].strip() + result = result + self.section('VERSION', version) + if hasattr(object, '__date__'): + result = result + self.section('DATE', str(object.__date__)) + if hasattr(object, '__author__'): + result = result + self.section('AUTHOR', str(object.__author__)) + if hasattr(object, '__credits__'): + result = result + self.section('CREDITS', str(object.__credits__)) + try: + file = inspect.getabsfile(object) + except TypeError: + file = '(built-in)' + result = result + self.section('FILE', file) + return result + + def docclass(self, object, name=None, mod=None, *ignored): + """Produce text documentation for a given class object.""" + realname = object.__name__ + name = name or realname + bases = object.__bases__ + + def makename(c, m=object.__module__): + return classname(c, m) + + if name == realname: + title = 'class ' + self.bold(realname) + else: + title = self.bold(name) + ' = class ' + realname + if bases: + parents = map(makename, bases) + title = title + '(%s)' % ', '.join(parents) + + doc = getdoc(object) + contents = doc and [doc + '\n'] or [] + push = contents.append + + # List the mro, if non-trivial. + mro = deque(inspect.getmro(object)) + if len(mro) > 2: + push("Method resolution order:") + for base in mro: + push(' ' + makename(base)) + push('') + + # Cute little class to pump out a horizontal rule between sections. + class HorizontalRule: + def __init__(self): + self.needone = 0 + def maybe(self): + if self.needone: + push('-' * 70) + self.needone = 1 + hr = HorizontalRule() + + def spill(msg, attrs, predicate): + ok, attrs = _split_list(attrs, predicate) + if ok: + hr.maybe() + push(msg) + for name, kind, homecls, value in ok: + try: + value = getattr(object, name) + except Exception: + # Some descriptors may meet a failure in their __get__. + # (bug #1785) + push(self._docdescriptor(name, value, mod)) + else: + push(self.document(value, + name, mod, object)) + return attrs + + def spilldescriptors(msg, attrs, predicate): + ok, attrs = _split_list(attrs, predicate) + if ok: + hr.maybe() + push(msg) + for name, kind, homecls, value in ok: + push(self._docdescriptor(name, value, mod)) + return attrs + + def spilldata(msg, attrs, predicate): + ok, attrs = _split_list(attrs, predicate) + if ok: + hr.maybe() + push(msg) + for name, kind, homecls, value in ok: + if callable(value) or inspect.isdatadescriptor(value): + doc = getdoc(value) + else: + doc = None + try: + obj = getattr(object, name) + except AttributeError: + obj = homecls.__dict__[name] + push(self.docother(obj, name, mod, maxlen=70, doc=doc) + + '\n') + return attrs + + attrs = [(name, kind, cls, value) + for name, kind, cls, value in classify_class_attrs(object) + if visiblename(name, obj=object)] + + while attrs: + if mro: + thisclass = mro.popleft() + else: + thisclass = attrs[0][2] + attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass) + + if thisclass is builtins.object: + attrs = inherited + continue + elif thisclass is object: + tag = "defined here" + else: + tag = "inherited from %s" % classname(thisclass, + object.__module__) + # Sort attrs by name. + attrs.sort() + + # Pump out the attrs, segregated by kind. + attrs = spill("Methods %s:\n" % tag, attrs, + lambda t: t[1] == 'method') + attrs = spill("Class methods %s:\n" % tag, attrs, + lambda t: t[1] == 'class method') + attrs = spill("Static methods %s:\n" % tag, attrs, + lambda t: t[1] == 'static method') + attrs = spilldescriptors("Data descriptors %s:\n" % tag, attrs, + lambda t: t[1] == 'data descriptor') + attrs = spilldata("Data and other attributes %s:\n" % tag, attrs, + lambda t: t[1] == 'data') + + assert attrs == [] + attrs = inherited + + contents = '\n'.join(contents) + if not contents: + return title + '\n' + return title + '\n' + self.indent(contents.rstrip(), ' | ') + '\n' + + def formatvalue(self, object): + """Format an argument default value as text.""" + return '=' + self.repr(object) + + def docroutine(self, object, name=None, mod=None, cl=None): + """Produce text documentation for a function or method object.""" + realname = object.__name__ + name = name or realname + note = '' + skipdocs = 0 + if _is_bound_method(object): + imclass = object.__self__.__class__ + if cl: + if imclass is not cl: + note = ' from ' + classname(imclass, mod) + else: + if object.__self__ is not None: + note = ' method of %s instance' % classname( + object.__self__.__class__, mod) + else: + note = ' unbound %s method' % classname(imclass,mod) + + if name == realname: + title = self.bold(realname) + else: + if (cl and realname in cl.__dict__ and + cl.__dict__[realname] is object): + skipdocs = 1 + title = self.bold(name) + ' = ' + realname + argspec = None + + if inspect.isroutine(object): + try: + signature = inspect.signature(object) + except (ValueError, TypeError): + signature = None + if signature: + argspec = str(signature) + if realname == '': + title = self.bold(name) + ' lambda ' + # XXX lambda's won't usually have func_annotations['return'] + # since the syntax doesn't support but it is possible. + # So removing parentheses isn't truly safe. + argspec = argspec[1:-1] # remove parentheses + if not argspec: + argspec = '(...)' + decl = title + argspec + note + + if skipdocs: + return decl + '\n' + else: + doc = getdoc(object) or '' + return decl + '\n' + (doc and self.indent(doc).rstrip() + '\n') + + def _docdescriptor(self, name, value, mod): + results = [] + push = results.append + + if name: + push(self.bold(name)) + push('\n') + doc = getdoc(value) or '' + if doc: + push(self.indent(doc)) + push('\n') + return ''.join(results) + + def docproperty(self, object, name=None, mod=None, cl=None): + """Produce text documentation for a property.""" + return self._docdescriptor(name, object, mod) + + def docdata(self, object, name=None, mod=None, cl=None): + """Produce text documentation for a data descriptor.""" + return self._docdescriptor(name, object, mod) + + def docother(self, object, name=None, mod=None, parent=None, maxlen=None, doc=None): + """Produce text documentation for a data object.""" + repr = self.repr(object) + if maxlen: + line = (name and name + ' = ' or '') + repr + chop = maxlen - len(line) + if chop < 0: repr = repr[:chop] + '...' + line = (name and self.bold(name) + ' = ' or '') + repr + if doc is not None: + line += '\n' + self.indent(str(doc)) + return line + +class _PlainTextDoc(TextDoc): + """Subclass of TextDoc which overrides string styling""" + def bold(self, text): + return text + +# --------------------------------------------------------- user interfaces + +def pager(text): + """The first time this is called, determine what kind of pager to use.""" + global pager + pager = getpager() + pager(text) + +def getpager(): + """Decide what method to use for paging through text.""" + if not hasattr(sys.stdin, "isatty"): + return plainpager + if not hasattr(sys.stdout, "isatty"): + return plainpager + if not sys.stdin.isatty() or not sys.stdout.isatty(): + return plainpager + if 'PAGER' in os.environ: + if sys.platform == 'win32': # pipes completely broken in Windows + return lambda text: tempfilepager(plain(text), os.environ['PAGER']) + elif os.environ.get('TERM') in ('dumb', 'emacs'): + return lambda text: pipepager(plain(text), os.environ['PAGER']) + else: + return lambda text: pipepager(text, os.environ['PAGER']) + if os.environ.get('TERM') in ('dumb', 'emacs'): + return plainpager + if sys.platform == 'win32': + return lambda text: tempfilepager(plain(text), 'more <') + if hasattr(os, 'system') and os.system('(pager) 2>/dev/null') == 0: + return lambda text: pipepager(text, 'pager') + if hasattr(os, 'system') and os.system('(less) 2>/dev/null') == 0: + return lambda text: pipepager(text, 'less') + + import tempfile + (fd, filename) = tempfile.mkstemp() + os.close(fd) + try: + if hasattr(os, 'system') and os.system('more "%s"' % filename) == 0: + return lambda text: pipepager(text, 'more') + else: + return ttypager + finally: + os.unlink(filename) + +def plain(text): + """Remove boldface formatting from text.""" + return re.sub('.\b', '', text) + +def pipepager(text, cmd): + """Page through text by feeding it to another program.""" + import subprocess + proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE) + try: + with io.TextIOWrapper(proc.stdin, errors='backslashreplace') as pipe: + try: + pipe.write(text) + except KeyboardInterrupt: + # We've hereby abandoned whatever text hasn't been written, + # but the pager is still in control of the terminal. + pass + except OSError: + pass # Ignore broken pipes caused by quitting the pager program. + while True: + try: + proc.wait() + break + except KeyboardInterrupt: + # Ignore ctl-c like the pager itself does. Otherwise the pager is + # left running and the terminal is in raw mode and unusable. + pass + +def tempfilepager(text, cmd): + """Page through text by invoking a program on a temporary file.""" + import tempfile + filename = tempfile.mktemp() + with open(filename, 'w', errors='backslashreplace') as file: + file.write(text) + try: + os.system(cmd + ' "' + filename + '"') + finally: + os.unlink(filename) + +def _escape_stdout(text): + # Escape non-encodable characters to avoid encoding errors later + encoding = getattr(sys.stdout, 'encoding', None) or 'utf-8' + return text.encode(encoding, 'backslashreplace').decode(encoding) + +def ttypager(text): + """Page through text on a text terminal.""" + lines = plain(_escape_stdout(text)).split('\n') + try: + import tty + fd = sys.stdin.fileno() + old = tty.tcgetattr(fd) + tty.setcbreak(fd) + getchar = lambda: sys.stdin.read(1) + except (ImportError, AttributeError, io.UnsupportedOperation): + tty = None + getchar = lambda: sys.stdin.readline()[:-1][:1] + + try: + try: + h = int(os.environ.get('LINES', 0)) + except ValueError: + h = 0 + if h <= 1: + h = 25 + r = inc = h - 1 + sys.stdout.write('\n'.join(lines[:inc]) + '\n') + while lines[r:]: + sys.stdout.write('-- more --') + sys.stdout.flush() + c = getchar() + + if c in ('q', 'Q'): + sys.stdout.write('\r \r') + break + elif c in ('\r', '\n'): + sys.stdout.write('\r \r' + lines[r] + '\n') + r = r + 1 + continue + if c in ('b', 'B', '\x1b'): + r = r - inc - inc + if r < 0: r = 0 + sys.stdout.write('\n' + '\n'.join(lines[r:r+inc]) + '\n') + r = r + inc + + finally: + if tty: + tty.tcsetattr(fd, tty.TCSAFLUSH, old) + +def plainpager(text): + """Simply print unformatted text. This is the ultimate fallback.""" + sys.stdout.write(plain(_escape_stdout(text))) + +def describe(thing): + """Produce a short description of the given thing.""" + if inspect.ismodule(thing): + if thing.__name__ in sys.builtin_module_names: + return 'built-in module ' + thing.__name__ + if hasattr(thing, '__path__'): + return 'package ' + thing.__name__ + else: + return 'module ' + thing.__name__ + if inspect.isbuiltin(thing): + return 'built-in function ' + thing.__name__ + if inspect.isgetsetdescriptor(thing): + return 'getset descriptor %s.%s.%s' % ( + thing.__objclass__.__module__, thing.__objclass__.__name__, + thing.__name__) + if inspect.ismemberdescriptor(thing): + return 'member descriptor %s.%s.%s' % ( + thing.__objclass__.__module__, thing.__objclass__.__name__, + thing.__name__) + if inspect.isclass(thing): + return 'class ' + thing.__name__ + if inspect.isfunction(thing): + return 'function ' + thing.__name__ + if inspect.ismethod(thing): + return 'method ' + thing.__name__ + return type(thing).__name__ + +def locate(path, forceload=0): + """Locate an object by name or dotted path, importing as necessary.""" + parts = [part for part in path.split('.') if part] + module, n = None, 0 + while n < len(parts): + nextmodule = safeimport('.'.join(parts[:n+1]), forceload) + if nextmodule: module, n = nextmodule, n + 1 + else: break + if module: + object = module + else: + object = builtins + for part in parts[n:]: + try: + object = getattr(object, part) + except AttributeError: + return None + return object + +# --------------------------------------- interactive interpreter interface + +text = TextDoc() +plaintext = _PlainTextDoc() +html = HTMLDoc() + +def resolve(thing, forceload=0): + """Given an object or a path to an object, get the object and its name.""" + if isinstance(thing, str): + object = locate(thing, forceload) + if object is None: + raise ImportError('''\ +No Python documentation found for %r. +Use help() to get the interactive help utility. +Use help(str) for help on the str class.''' % thing) + return object, thing + else: + name = getattr(thing, '__name__', None) + return thing, name if isinstance(name, str) else None + +def render_doc(thing, title='Python Library Documentation: %s', forceload=0, + renderer=None): + """Render text documentation, given an object or a path to an object.""" + if renderer is None: + renderer = text + object, name = resolve(thing, forceload) + desc = describe(object) + module = inspect.getmodule(object) + if name and '.' in name: + desc += ' in ' + name[:name.rfind('.')] + elif module and module is not object: + desc += ' in module ' + module.__name__ + + if not (inspect.ismodule(object) or + inspect.isclass(object) or + inspect.isroutine(object) or + inspect.isgetsetdescriptor(object) or + inspect.ismemberdescriptor(object) or + isinstance(object, property)): + # If the passed object is a piece of data or an instance, + # document its available methods instead of its value. + object = type(object) + desc += ' object' + return title % desc + '\n\n' + renderer.document(object, name) + +def doc(thing, title='Python Library Documentation: %s', forceload=0, + output=None): + """Display text documentation, given an object or a path to an object.""" + try: + if output is None: + pager(render_doc(thing, title, forceload)) + else: + output.write(render_doc(thing, title, forceload, plaintext)) + except (ImportError, ErrorDuringImport) as value: + print(value) + +def writedoc(thing, forceload=0): + """Write HTML documentation to a file in the current directory.""" + try: + object, name = resolve(thing, forceload) + page = html.page(describe(object), html.document(object, name)) + with open(name + '.html', 'w', encoding='utf-8') as file: + file.write(page) + print('wrote', name + '.html') + except (ImportError, ErrorDuringImport) as value: + print(value) + +def writedocs(dir, pkgpath='', done=None): + """Write out HTML documentation for all modules in a directory tree.""" + if done is None: done = {} + for importer, modname, ispkg in pkgutil.walk_packages([dir], pkgpath): + writedoc(modname) + return + +class Helper: + + # These dictionaries map a topic name to either an alias, or a tuple + # (label, seealso-items). The "label" is the label of the corresponding + # section in the .rst file under Doc/ and an index into the dictionary + # in pydoc_data/topics.py. + # + # CAUTION: if you change one of these dictionaries, be sure to adapt the + # list of needed labels in Doc/tools/pyspecific.py and + # regenerate the pydoc_data/topics.py file by running + # make pydoc-topics + # in Doc/ and copying the output file into the Lib/ directory. + + keywords = { + 'False': '', + 'None': '', + 'True': '', + 'and': 'BOOLEAN', + 'as': 'with', + 'assert': ('assert', ''), + 'break': ('break', 'while for'), + 'class': ('class', 'CLASSES SPECIALMETHODS'), + 'continue': ('continue', 'while for'), + 'def': ('function', ''), + 'del': ('del', 'BASICMETHODS'), + 'elif': 'if', + 'else': ('else', 'while for'), + 'except': 'try', + 'finally': 'try', + 'for': ('for', 'break continue while'), + 'from': 'import', + 'global': ('global', 'nonlocal NAMESPACES'), + 'if': ('if', 'TRUTHVALUE'), + 'import': ('import', 'MODULES'), + 'in': ('in', 'SEQUENCEMETHODS'), + 'is': 'COMPARISON', + 'lambda': ('lambda', 'FUNCTIONS'), + 'nonlocal': ('nonlocal', 'global NAMESPACES'), + 'not': 'BOOLEAN', + 'or': 'BOOLEAN', + 'pass': ('pass', ''), + 'raise': ('raise', 'EXCEPTIONS'), + 'return': ('return', 'FUNCTIONS'), + 'try': ('try', 'EXCEPTIONS'), + 'while': ('while', 'break continue if TRUTHVALUE'), + 'with': ('with', 'CONTEXTMANAGERS EXCEPTIONS yield'), + 'yield': ('yield', ''), + } + # Either add symbols to this dictionary or to the symbols dictionary + # directly: Whichever is easier. They are merged later. + _symbols_inverse = { + 'STRINGS' : ("'", "'''", "r'", "b'", '"""', '"', 'r"', 'b"'), + 'OPERATORS' : ('+', '-', '*', '**', '/', '//', '%', '<<', '>>', '&', + '|', '^', '~', '<', '>', '<=', '>=', '==', '!=', '<>'), + 'COMPARISON' : ('<', '>', '<=', '>=', '==', '!=', '<>'), + 'UNARY' : ('-', '~'), + 'AUGMENTEDASSIGNMENT' : ('+=', '-=', '*=', '/=', '%=', '&=', '|=', + '^=', '<<=', '>>=', '**=', '//='), + 'BITWISE' : ('<<', '>>', '&', '|', '^', '~'), + 'COMPLEX' : ('j', 'J') + } + symbols = { + '%': 'OPERATORS FORMATTING', + '**': 'POWER', + ',': 'TUPLES LISTS FUNCTIONS', + '.': 'ATTRIBUTES FLOAT MODULES OBJECTS', + '...': 'ELLIPSIS', + ':': 'SLICINGS DICTIONARYLITERALS', + '@': 'def class', + '\\': 'STRINGS', + '_': 'PRIVATENAMES', + '__': 'PRIVATENAMES SPECIALMETHODS', + '`': 'BACKQUOTES', + '(': 'TUPLES FUNCTIONS CALLS', + ')': 'TUPLES FUNCTIONS CALLS', + '[': 'LISTS SUBSCRIPTS SLICINGS', + ']': 'LISTS SUBSCRIPTS SLICINGS' + } + for topic, symbols_ in _symbols_inverse.items(): + for symbol in symbols_: + topics = symbols.get(symbol, topic) + if topic not in topics: + topics = topics + ' ' + topic + symbols[symbol] = topics + + topics = { + 'TYPES': ('types', 'STRINGS UNICODE NUMBERS SEQUENCES MAPPINGS ' + 'FUNCTIONS CLASSES MODULES FILES inspect'), + 'STRINGS': ('strings', 'str UNICODE SEQUENCES STRINGMETHODS ' + 'FORMATTING TYPES'), + 'STRINGMETHODS': ('string-methods', 'STRINGS FORMATTING'), + 'FORMATTING': ('formatstrings', 'OPERATORS'), + 'UNICODE': ('strings', 'encodings unicode SEQUENCES STRINGMETHODS ' + 'FORMATTING TYPES'), + 'NUMBERS': ('numbers', 'INTEGER FLOAT COMPLEX TYPES'), + 'INTEGER': ('integers', 'int range'), + 'FLOAT': ('floating', 'float math'), + 'COMPLEX': ('imaginary', 'complex cmath'), + 'SEQUENCES': ('typesseq', 'STRINGMETHODS FORMATTING range LISTS'), + 'MAPPINGS': 'DICTIONARIES', + 'FUNCTIONS': ('typesfunctions', 'def TYPES'), + 'METHODS': ('typesmethods', 'class def CLASSES TYPES'), + 'CODEOBJECTS': ('bltin-code-objects', 'compile FUNCTIONS TYPES'), + 'TYPEOBJECTS': ('bltin-type-objects', 'types TYPES'), + 'FRAMEOBJECTS': 'TYPES', + 'TRACEBACKS': 'TYPES', + 'NONE': ('bltin-null-object', ''), + 'ELLIPSIS': ('bltin-ellipsis-object', 'SLICINGS'), + 'SPECIALATTRIBUTES': ('specialattrs', ''), + 'CLASSES': ('types', 'class SPECIALMETHODS PRIVATENAMES'), + 'MODULES': ('typesmodules', 'import'), + 'PACKAGES': 'import', + 'EXPRESSIONS': ('operator-summary', 'lambda or and not in is BOOLEAN ' + 'COMPARISON BITWISE SHIFTING BINARY FORMATTING POWER ' + 'UNARY ATTRIBUTES SUBSCRIPTS SLICINGS CALLS TUPLES ' + 'LISTS DICTIONARIES'), + 'OPERATORS': 'EXPRESSIONS', + 'PRECEDENCE': 'EXPRESSIONS', + 'OBJECTS': ('objects', 'TYPES'), + 'SPECIALMETHODS': ('specialnames', 'BASICMETHODS ATTRIBUTEMETHODS ' + 'CALLABLEMETHODS SEQUENCEMETHODS MAPPINGMETHODS ' + 'NUMBERMETHODS CLASSES'), + 'BASICMETHODS': ('customization', 'hash repr str SPECIALMETHODS'), + 'ATTRIBUTEMETHODS': ('attribute-access', 'ATTRIBUTES SPECIALMETHODS'), + 'CALLABLEMETHODS': ('callable-types', 'CALLS SPECIALMETHODS'), + 'SEQUENCEMETHODS': ('sequence-types', 'SEQUENCES SEQUENCEMETHODS ' + 'SPECIALMETHODS'), + 'MAPPINGMETHODS': ('sequence-types', 'MAPPINGS SPECIALMETHODS'), + 'NUMBERMETHODS': ('numeric-types', 'NUMBERS AUGMENTEDASSIGNMENT ' + 'SPECIALMETHODS'), + 'EXECUTION': ('execmodel', 'NAMESPACES DYNAMICFEATURES EXCEPTIONS'), + 'NAMESPACES': ('naming', 'global nonlocal ASSIGNMENT DELETION DYNAMICFEATURES'), + 'DYNAMICFEATURES': ('dynamic-features', ''), + 'SCOPING': 'NAMESPACES', + 'FRAMES': 'NAMESPACES', + 'EXCEPTIONS': ('exceptions', 'try except finally raise'), + 'CONVERSIONS': ('conversions', ''), + 'IDENTIFIERS': ('identifiers', 'keywords SPECIALIDENTIFIERS'), + 'SPECIALIDENTIFIERS': ('id-classes', ''), + 'PRIVATENAMES': ('atom-identifiers', ''), + 'LITERALS': ('atom-literals', 'STRINGS NUMBERS TUPLELITERALS ' + 'LISTLITERALS DICTIONARYLITERALS'), + 'TUPLES': 'SEQUENCES', + 'TUPLELITERALS': ('exprlists', 'TUPLES LITERALS'), + 'LISTS': ('typesseq-mutable', 'LISTLITERALS'), + 'LISTLITERALS': ('lists', 'LISTS LITERALS'), + 'DICTIONARIES': ('typesmapping', 'DICTIONARYLITERALS'), + 'DICTIONARYLITERALS': ('dict', 'DICTIONARIES LITERALS'), + 'ATTRIBUTES': ('attribute-references', 'getattr hasattr setattr ATTRIBUTEMETHODS'), + 'SUBSCRIPTS': ('subscriptions', 'SEQUENCEMETHODS'), + 'SLICINGS': ('slicings', 'SEQUENCEMETHODS'), + 'CALLS': ('calls', 'EXPRESSIONS'), + 'POWER': ('power', 'EXPRESSIONS'), + 'UNARY': ('unary', 'EXPRESSIONS'), + 'BINARY': ('binary', 'EXPRESSIONS'), + 'SHIFTING': ('shifting', 'EXPRESSIONS'), + 'BITWISE': ('bitwise', 'EXPRESSIONS'), + 'COMPARISON': ('comparisons', 'EXPRESSIONS BASICMETHODS'), + 'BOOLEAN': ('booleans', 'EXPRESSIONS TRUTHVALUE'), + 'ASSERTION': 'assert', + 'ASSIGNMENT': ('assignment', 'AUGMENTEDASSIGNMENT'), + 'AUGMENTEDASSIGNMENT': ('augassign', 'NUMBERMETHODS'), + 'DELETION': 'del', + 'RETURNING': 'return', + 'IMPORTING': 'import', + 'CONDITIONAL': 'if', + 'LOOPING': ('compound', 'for while break continue'), + 'TRUTHVALUE': ('truth', 'if while and or not BASICMETHODS'), + 'DEBUGGING': ('debugger', 'pdb'), + 'CONTEXTMANAGERS': ('context-managers', 'with'), + } + + def __init__(self, input=None, output=None): + self._input = input + self._output = output + + input = property(lambda self: self._input or sys.stdin) + output = property(lambda self: self._output or sys.stdout) + + def __repr__(self): + if inspect.stack()[1][3] == '?': + self() + return '' + return '<%s.%s instance>' % (self.__class__.__module__, + self.__class__.__qualname__) + + _GoInteractive = object() + def __call__(self, request=_GoInteractive): + if request is not self._GoInteractive: + self.help(request) + else: + self.intro() + self.interact() + self.output.write(''' +You are now leaving help and returning to the Python interpreter. +If you want to ask for help on a particular object directly from the +interpreter, you can type "help(object)". Executing "help('string')" +has the same effect as typing a particular string at the help> prompt. +''') + + def interact(self): + self.output.write('\n') + while True: + try: + request = self.getline('help> ') + if not request: break + except (KeyboardInterrupt, EOFError): + break + request = replace(request, '"', '', "'", '').strip() + if request.lower() in ('q', 'quit'): break + if request == 'help': + self.intro() + else: + self.help(request) + + def getline(self, prompt): + """Read one line, using input() when appropriate.""" + if self.input is sys.stdin: + return input(prompt) + else: + self.output.write(prompt) + self.output.flush() + return self.input.readline() + + def help(self, request): + if type(request) is type(''): + request = request.strip() + if request == 'keywords': self.listkeywords() + elif request == 'symbols': self.listsymbols() + elif request == 'topics': self.listtopics() + elif request == 'modules': self.listmodules() + elif request[:8] == 'modules ': + self.listmodules(request.split()[1]) + elif request in self.symbols: self.showsymbol(request) + elif request in ['True', 'False', 'None']: + # special case these keywords since they are objects too + doc(eval(request), 'Help on %s:') + elif request in self.keywords: self.showtopic(request) + elif request in self.topics: self.showtopic(request) + elif request: doc(request, 'Help on %s:', output=self._output) + else: doc(str, 'Help on %s:', output=self._output) + elif isinstance(request, Helper): self() + else: doc(request, 'Help on %s:', output=self._output) + self.output.write('\n') + + def intro(self): + self.output.write(''' +Welcome to Python %s's help utility! + +If this is your first time using Python, you should definitely check out +the tutorial on the Internet at http://docs.python.org/%s/tutorial/. + +Enter the name of any module, keyword, or topic to get help on writing +Python programs and using Python modules. To quit this help utility and +return to the interpreter, just type "quit". + +To get a list of available modules, keywords, symbols, or topics, type +"modules", "keywords", "symbols", or "topics". Each module also comes +with a one-line summary of what it does; to list the modules whose name +or summary contain a given string such as "spam", type "modules spam". +''' % tuple([sys.version[:3]]*2)) + + def list(self, items, columns=4, width=80): + items = list(sorted(items)) + colw = width // columns + rows = (len(items) + columns - 1) // columns + for row in range(rows): + for col in range(columns): + i = col * rows + row + if i < len(items): + self.output.write(items[i]) + if col < columns - 1: + self.output.write(' ' + ' ' * (colw - 1 - len(items[i]))) + self.output.write('\n') + + def listkeywords(self): + self.output.write(''' +Here is a list of the Python keywords. Enter any keyword to get more help. + +''') + self.list(self.keywords.keys()) + + def listsymbols(self): + self.output.write(''' +Here is a list of the punctuation symbols which Python assigns special meaning +to. Enter any symbol to get more help. + +''') + self.list(self.symbols.keys()) + + def listtopics(self): + self.output.write(''' +Here is a list of available topics. Enter any topic name to get more help. + +''') + self.list(self.topics.keys()) + + def showtopic(self, topic, more_xrefs=''): + try: + import pydoc_data.topics + except ImportError: + self.output.write(''' +Sorry, topic and keyword documentation is not available because the +module "pydoc_data.topics" could not be found. +''') + return + target = self.topics.get(topic, self.keywords.get(topic)) + if not target: + self.output.write('no documentation found for %s\n' % repr(topic)) + return + if type(target) is type(''): + return self.showtopic(target, more_xrefs) + + label, xrefs = target + try: + doc = pydoc_data.topics.topics[label] + except KeyError: + self.output.write('no documentation found for %s\n' % repr(topic)) + return + pager(doc.strip() + '\n') + if more_xrefs: + xrefs = (xrefs or '') + ' ' + more_xrefs + if xrefs: + import textwrap + text = 'Related help topics: ' + ', '.join(xrefs.split()) + '\n' + wrapped_text = textwrap.wrap(text, 72) + self.output.write('\n%s\n' % ''.join(wrapped_text)) + + def _gettopic(self, topic, more_xrefs=''): + """Return unbuffered tuple of (topic, xrefs). + + If an error occurs here, the exception is caught and displayed by + the url handler. + + This function duplicates the showtopic method but returns its + result directly so it can be formatted for display in an html page. + """ + try: + import pydoc_data.topics + except ImportError: + return(''' +Sorry, topic and keyword documentation is not available because the +module "pydoc_data.topics" could not be found. +''' , '') + target = self.topics.get(topic, self.keywords.get(topic)) + if not target: + raise ValueError('could not find topic') + if isinstance(target, str): + return self._gettopic(target, more_xrefs) + label, xrefs = target + doc = pydoc_data.topics.topics[label] + if more_xrefs: + xrefs = (xrefs or '') + ' ' + more_xrefs + return doc, xrefs + + def showsymbol(self, symbol): + target = self.symbols[symbol] + topic, _, xrefs = target.partition(' ') + self.showtopic(topic, xrefs) + + def listmodules(self, key=''): + if key: + self.output.write(''' +Here is a list of modules whose name or summary contains '{}'. +If there are any, enter a module name to get more help. + +'''.format(key)) + apropos(key) + else: + self.output.write(''' +Please wait a moment while I gather a list of all available modules... + +''') + modules = {} + def callback(path, modname, desc, modules=modules): + if modname and modname[-9:] == '.__init__': + modname = modname[:-9] + ' (package)' + if modname.find('.') < 0: + modules[modname] = 1 + def onerror(modname): + callback(None, modname, None) + ModuleScanner().run(callback, onerror=onerror) + self.list(modules.keys()) + self.output.write(''' +Enter any module name to get more help. Or, type "modules spam" to search +for modules whose name or summary contain the string "spam". +''') + +help = Helper() + +class ModuleScanner: + """An interruptible scanner that searches module synopses.""" + + def run(self, callback, key=None, completer=None, onerror=None): + if key: key = key.lower() + self.quit = False + seen = {} + + for modname in sys.builtin_module_names: + if modname != '__main__': + seen[modname] = 1 + if key is None: + callback(None, modname, '') + else: + name = __import__(modname).__doc__ or '' + desc = name.split('\n')[0] + name = modname + ' - ' + desc + if name.lower().find(key) >= 0: + callback(None, modname, desc) + + for importer, modname, ispkg in pkgutil.walk_packages(onerror=onerror): + if self.quit: + break + + if key is None: + callback(None, modname, '') + else: + try: + spec = pkgutil._get_spec(importer, modname) + except SyntaxError: + # raised by tests for bad coding cookies or BOM + continue + loader = spec.loader + if hasattr(loader, 'get_source'): + try: + source = loader.get_source(modname) + except Exception: + if onerror: + onerror(modname) + continue + desc = source_synopsis(io.StringIO(source)) or '' + if hasattr(loader, 'get_filename'): + path = loader.get_filename(modname) + else: + path = None + else: + try: + module = importlib._bootstrap._load(spec) + except ImportError: + if onerror: + onerror(modname) + continue + desc = module.__doc__.splitlines()[0] if module.__doc__ else '' + path = getattr(module,'__file__',None) + name = modname + ' - ' + desc + if name.lower().find(key) >= 0: + callback(path, modname, desc) + + if completer: + completer() + +def apropos(key): + """Print all the one-line module summaries that contain a substring.""" + def callback(path, modname, desc): + if modname[-9:] == '.__init__': + modname = modname[:-9] + ' (package)' + print(modname, desc and '- ' + desc) + def onerror(modname): + pass + with warnings.catch_warnings(): + warnings.filterwarnings('ignore') # ignore problems during import + ModuleScanner().run(callback, key, onerror=onerror) + +# --------------------------------------- enhanced Web browser interface + +def _start_server(urlhandler, port): + """Start an HTTP server thread on a specific port. + + Start an HTML/text server thread, so HTML or text documents can be + browsed dynamically and interactively with a Web browser. Example use: + + >>> import time + >>> import pydoc + + Define a URL handler. To determine what the client is asking + for, check the URL and content_type. + + Then get or generate some text or HTML code and return it. + + >>> def my_url_handler(url, content_type): + ... text = 'the URL sent was: (%s, %s)' % (url, content_type) + ... return text + + Start server thread on port 0. + If you use port 0, the server will pick a random port number. + You can then use serverthread.port to get the port number. + + >>> port = 0 + >>> serverthread = pydoc._start_server(my_url_handler, port) + + Check that the server is really started. If it is, open browser + and get first page. Use serverthread.url as the starting page. + + >>> if serverthread.serving: + ... import webbrowser + + The next two lines are commented out so a browser doesn't open if + doctest is run on this module. + + #... webbrowser.open(serverthread.url) + #True + + Let the server do its thing. We just need to monitor its status. + Use time.sleep so the loop doesn't hog the CPU. + + >>> starttime = time.time() + >>> timeout = 1 #seconds + + This is a short timeout for testing purposes. + + >>> while serverthread.serving: + ... time.sleep(.01) + ... if serverthread.serving and time.time() - starttime > timeout: + ... serverthread.stop() + ... break + + Print any errors that may have occurred. + + >>> print(serverthread.error) + None + """ + import http.server + import email.message + import select + import threading + + class DocHandler(http.server.BaseHTTPRequestHandler): + + def do_GET(self): + """Process a request from an HTML browser. + + The URL received is in self.path. + Get an HTML page from self.urlhandler and send it. + """ + if self.path.endswith('.css'): + content_type = 'text/css' + else: + content_type = 'text/html' + self.send_response(200) + self.send_header('Content-Type', '%s; charset=UTF-8' % content_type) + self.end_headers() + self.wfile.write(self.urlhandler( + self.path, content_type).encode('utf-8')) + + def log_message(self, *args): + # Don't log messages. + pass + + class DocServer(http.server.HTTPServer): + + def __init__(self, port, callback): + self.host = 'localhost' + self.address = (self.host, port) + self.callback = callback + self.base.__init__(self, self.address, self.handler) + self.quit = False + + def serve_until_quit(self): + while not self.quit: + rd, wr, ex = select.select([self.socket.fileno()], [], [], 1) + if rd: + self.handle_request() + self.server_close() + + def server_activate(self): + self.base.server_activate(self) + if self.callback: + self.callback(self) + + class ServerThread(threading.Thread): + + def __init__(self, urlhandler, port): + self.urlhandler = urlhandler + self.port = int(port) + threading.Thread.__init__(self) + self.serving = False + self.error = None + + def run(self): + """Start the server.""" + try: + DocServer.base = http.server.HTTPServer + DocServer.handler = DocHandler + DocHandler.MessageClass = email.message.Message + DocHandler.urlhandler = staticmethod(self.urlhandler) + docsvr = DocServer(self.port, self.ready) + self.docserver = docsvr + docsvr.serve_until_quit() + except Exception as e: + self.error = e + + def ready(self, server): + self.serving = True + self.host = server.host + self.port = server.server_port + self.url = 'http://%s:%d/' % (self.host, self.port) + + def stop(self): + """Stop the server and this thread nicely""" + self.docserver.quit = True + self.serving = False + self.url = None + + thread = ServerThread(urlhandler, port) + thread.start() + # Wait until thread.serving is True to make sure we are + # really up before returning. + while not thread.error and not thread.serving: + time.sleep(.01) + return thread + + +def _url_handler(url, content_type="text/html"): + """The pydoc url handler for use with the pydoc server. + + If the content_type is 'text/css', the _pydoc.css style + sheet is read and returned if it exits. + + If the content_type is 'text/html', then the result of + get_html_page(url) is returned. + """ + class _HTMLDoc(HTMLDoc): + + def page(self, title, contents): + """Format an HTML page.""" + css_path = "pydoc_data/_pydoc.css" + css_link = ( + '' % + css_path) + return '''\ + +Pydoc: %s + +%s%s
    %s
    +''' % (title, css_link, html_navbar(), contents) + + def filelink(self, url, path): + return '%s' % (url, path) + + + html = _HTMLDoc() + + def html_navbar(): + version = html.escape("%s [%s, %s]" % (platform.python_version(), + platform.python_build()[0], + platform.python_compiler())) + return """ +
    + Python %s
    %s +
    +
    + +
    +
    + + +
      +
    + + +
    +
    +
    + """ % (version, html.escape(platform.platform(terse=True))) + + def html_index(): + """Module Index page.""" + + def bltinlink(name): + return '%s' % (name, name) + + heading = html.heading( + 'Index of Modules', + '#ffffff', '#7799ee') + names = [name for name in sys.builtin_module_names + if name != '__main__'] + contents = html.multicolumn(names, bltinlink) + contents = [heading, '

    ' + html.bigsection( + 'Built-in Modules', '#ffffff', '#ee77aa', contents)] + + seen = {} + for dir in sys.path: + contents.append(html.index(dir, seen)) + + contents.append( + '

    pydoc by Ka-Ping Yee' + '<ping@lfw.org>') + return 'Index of Modules', ''.join(contents) + + def html_search(key): + """Search results page.""" + # scan for modules + search_result = [] + + def callback(path, modname, desc): + if modname[-9:] == '.__init__': + modname = modname[:-9] + ' (package)' + search_result.append((modname, desc and '- ' + desc)) + + with warnings.catch_warnings(): + warnings.filterwarnings('ignore') # ignore problems during import + def onerror(modname): + pass + ModuleScanner().run(callback, key, onerror=onerror) + + # format page + def bltinlink(name): + return '%s' % (name, name) + + results = [] + heading = html.heading( + 'Search Results', + '#ffffff', '#7799ee') + for name, desc in search_result: + results.append(bltinlink(name) + desc) + contents = heading + html.bigsection( + 'key = %s' % key, '#ffffff', '#ee77aa', '
    '.join(results)) + return 'Search Results', contents + + def html_getfile(path): + """Get and display a source file listing safely.""" + path = urllib.parse.unquote(path) + with tokenize.open(path) as fp: + lines = html.escape(fp.read()) + body = '

    %s
    ' % lines + heading = html.heading( + 'File Listing', + '#ffffff', '#7799ee') + contents = heading + html.bigsection( + 'File: %s' % path, '#ffffff', '#ee77aa', body) + return 'getfile %s' % path, contents + + def html_topics(): + """Index of topic texts available.""" + + def bltinlink(name): + return '%s' % (name, name) + + heading = html.heading( + 'INDEX', + '#ffffff', '#7799ee') + names = sorted(Helper.topics.keys()) + + contents = html.multicolumn(names, bltinlink) + contents = heading + html.bigsection( + 'Topics', '#ffffff', '#ee77aa', contents) + return 'Topics', contents + + def html_keywords(): + """Index of keywords.""" + heading = html.heading( + 'INDEX', + '#ffffff', '#7799ee') + names = sorted(Helper.keywords.keys()) + + def bltinlink(name): + return '%s' % (name, name) + + contents = html.multicolumn(names, bltinlink) + contents = heading + html.bigsection( + 'Keywords', '#ffffff', '#ee77aa', contents) + return 'Keywords', contents + + def html_topicpage(topic): + """Topic or keyword help page.""" + buf = io.StringIO() + htmlhelp = Helper(buf, buf) + contents, xrefs = htmlhelp._gettopic(topic) + if topic in htmlhelp.keywords: + title = 'KEYWORD' + else: + title = 'TOPIC' + heading = html.heading( + '%s' % title, + '#ffffff', '#7799ee') + contents = '
    %s
    ' % html.markup(contents) + contents = html.bigsection(topic , '#ffffff','#ee77aa', contents) + if xrefs: + xrefs = sorted(xrefs.split()) + + def bltinlink(name): + return '%s' % (name, name) + + xrefs = html.multicolumn(xrefs, bltinlink) + xrefs = html.section('Related help topics: ', + '#ffffff', '#ee77aa', xrefs) + return ('%s %s' % (title, topic), + ''.join((heading, contents, xrefs))) + + def html_getobj(url): + obj = locate(url, forceload=1) + if obj is None and url != 'None': + raise ValueError('could not find object') + title = describe(obj) + content = html.document(obj, url) + return title, content + + def html_error(url, exc): + heading = html.heading( + 'Error', + '#ffffff', '#7799ee') + contents = '
    '.join(html.escape(line) for line in + format_exception_only(type(exc), exc)) + contents = heading + html.bigsection(url, '#ffffff', '#bb0000', + contents) + return "Error - %s" % url, contents + + def get_html_page(url): + """Generate an HTML page for url.""" + complete_url = url + if url.endswith('.html'): + url = url[:-5] + try: + if url in ("", "index"): + title, content = html_index() + elif url == "topics": + title, content = html_topics() + elif url == "keywords": + title, content = html_keywords() + elif '=' in url: + op, _, url = url.partition('=') + if op == "search?key": + title, content = html_search(url) + elif op == "getfile?key": + title, content = html_getfile(url) + elif op == "topic?key": + # try topics first, then objects. + try: + title, content = html_topicpage(url) + except ValueError: + title, content = html_getobj(url) + elif op == "get?key": + # try objects first, then topics. + if url in ("", "index"): + title, content = html_index() + else: + try: + title, content = html_getobj(url) + except ValueError: + title, content = html_topicpage(url) + else: + raise ValueError('bad pydoc url') + else: + title, content = html_getobj(url) + except Exception as exc: + # Catch any errors and display them in an error page. + title, content = html_error(complete_url, exc) + return html.page(title, content) + + if url.startswith('/'): + url = url[1:] + if content_type == 'text/css': + path_here = os.path.dirname(os.path.realpath(__file__)) + css_path = os.path.join(path_here, url) + with open(css_path) as fp: + return ''.join(fp.readlines()) + elif content_type == 'text/html': + return get_html_page(url) + # Errors outside the url handler are caught by the server. + raise TypeError('unknown content type %r for url %s' % (content_type, url)) + + +def browse(port=0, *, open_browser=True): + """Start the enhanced pydoc Web server and open a Web browser. + + Use port '0' to start the server on an arbitrary port. + Set open_browser to False to suppress opening a browser. + """ + import webbrowser + serverthread = _start_server(_url_handler, port) + if serverthread.error: + print(serverthread.error) + return + if serverthread.serving: + server_help_msg = 'Server commands: [b]rowser, [q]uit' + if open_browser: + webbrowser.open(serverthread.url) + try: + print('Server ready at', serverthread.url) + print(server_help_msg) + while serverthread.serving: + cmd = input('server> ') + cmd = cmd.lower() + if cmd == 'q': + break + elif cmd == 'b': + webbrowser.open(serverthread.url) + else: + print(server_help_msg) + except (KeyboardInterrupt, EOFError): + print() + finally: + if serverthread.serving: + serverthread.stop() + print('Server stopped') + + +# -------------------------------------------------- command-line interface + +def ispath(x): + return isinstance(x, str) and x.find(os.sep) >= 0 + +def cli(): + """Command-line interface (looks at sys.argv to decide what to do).""" + import getopt + class BadUsage(Exception): pass + + # Scripts don't get the current directory in their path by default + # unless they are run with the '-m' switch + if '' not in sys.path: + scriptdir = os.path.dirname(sys.argv[0]) + if scriptdir in sys.path: + sys.path.remove(scriptdir) + sys.path.insert(0, '.') + + try: + opts, args = getopt.getopt(sys.argv[1:], 'bk:p:w') + writing = False + start_server = False + open_browser = False + port = None + for opt, val in opts: + if opt == '-b': + start_server = True + open_browser = True + if opt == '-k': + apropos(val) + return + if opt == '-p': + start_server = True + port = val + if opt == '-w': + writing = True + + if start_server: + if port is None: + port = 0 + browse(port, open_browser=open_browser) + return + + if not args: raise BadUsage + for arg in args: + if ispath(arg) and not os.path.exists(arg): + print('file %r does not exist' % arg) + break + try: + if ispath(arg) and os.path.isfile(arg): + arg = importfile(arg) + if writing: + if ispath(arg) and os.path.isdir(arg): + writedocs(arg) + else: + writedoc(arg) + else: + help.help(arg) + except ErrorDuringImport as value: + print(value) + + except (getopt.error, BadUsage): + cmd = os.path.splitext(os.path.basename(sys.argv[0]))[0] + print("""pydoc - the Python documentation tool + +{cmd} ... + Show text documentation on something. may be the name of a + Python keyword, topic, function, module, or package, or a dotted + reference to a class or function within a module or module in a + package. If contains a '{sep}', it is used as the path to a + Python source file to document. If name is 'keywords', 'topics', + or 'modules', a listing of these things is displayed. + +{cmd} -k + Search for a keyword in the synopsis lines of all available modules. + +{cmd} -p + Start an HTTP server on the given port on the local machine. Port + number 0 can be used to get an arbitrary unused port. + +{cmd} -b + Start an HTTP server on an arbitrary unused port and open a Web browser + to interactively browse documentation. The -p option can be used with + the -b option to explicitly specify the server port. + +{cmd} -w ... + Write out the HTML documentation for a module to a file in the current + directory. If contains a '{sep}', it is treated as a filename; if + it names a directory, documentation is written for all the contents. +""".format(cmd=cmd, sep=os.sep)) + +if __name__ == '__main__': + cli() diff --git a/tools/pydoc_data/__init__.py b/tools/pydoc_data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tools/pydoc_data/_pydoc.css b/tools/pydoc_data/_pydoc.css new file mode 100644 index 0000000..f036ef3 --- /dev/null +++ b/tools/pydoc_data/_pydoc.css @@ -0,0 +1,6 @@ +/* + CSS file for pydoc. + + Contents of this file are subject to change without notice. + +*/ diff --git a/tools/pydoc_data/topics.py b/tools/pydoc_data/topics.py new file mode 100644 index 0000000..d6f1366 --- /dev/null +++ b/tools/pydoc_data/topics.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# Autogenerated by Sphinx on Sat Jun 25 14:08:44 2016 +topics = {'assert': u'\nThe "assert" statement\n**********************\n\nAssert statements are a convenient way to insert debugging assertions\ninto a program:\n\n assert_stmt ::= "assert" expression ["," expression]\n\nThe simple form, "assert expression", is equivalent to\n\n if __debug__:\n if not expression: raise AssertionError\n\nThe extended form, "assert expression1, expression2", is equivalent to\n\n if __debug__:\n if not expression1: raise AssertionError(expression2)\n\nThese equivalences assume that "__debug__" and "AssertionError" refer\nto the built-in variables with those names. In the current\nimplementation, the built-in variable "__debug__" is "True" under\nnormal circumstances, "False" when optimization is requested (command\nline option -O). The current code generator emits no code for an\nassert statement when optimization is requested at compile time. Note\nthat it is unnecessary to include the source code for the expression\nthat failed in the error message; it will be displayed as part of the\nstack trace.\n\nAssignments to "__debug__" are illegal. The value for the built-in\nvariable is determined when the interpreter starts.\n', + 'assignment': u'\nAssignment statements\n*********************\n\nAssignment statements are used to (re)bind names to values and to\nmodify attributes or items of mutable objects:\n\n assignment_stmt ::= (target_list "=")+ (starred_expression | yield_expression)\n target_list ::= target ("," target)* [","]\n target ::= identifier\n | "(" target_list ")"\n | "[" [target_list] "]"\n | attributeref\n | subscription\n | slicing\n | "*" target\n\n(See section *Primaries* for the syntax definitions for\n*attributeref*, *subscription*, and *slicing*.)\n\nAn assignment statement evaluates the expression list (remember that\nthis can be a single expression or a comma-separated list, the latter\nyielding a tuple) and assigns the single resulting object to each of\nthe target lists, from left to right.\n\nAssignment is defined recursively depending on the form of the target\n(list). When a target is part of a mutable object (an attribute\nreference, subscription or slicing), the mutable object must\nultimately perform the assignment and decide about its validity, and\nmay raise an exception if the assignment is unacceptable. The rules\nobserved by various types and the exceptions raised are given with the\ndefinition of the object types (see section *The standard type\nhierarchy*).\n\nAssignment of an object to a target list, optionally enclosed in\nparentheses or square brackets, is recursively defined as follows.\n\n* If the target list is empty: The object must also be an empty\n iterable.\n\n* If the target list is a single target in parentheses: The object\n is assigned to that target.\n\n* If the target list is a comma-separated list of targets, or a\n single target in square brackets: The object must be an iterable\n with the same number of items as there are targets in the target\n list, and the items are assigned, from left to right, to the\n corresponding targets.\n\n * If the target list contains one target prefixed with an\n asterisk, called a "starred" target: The object must be an\n iterable with at least as many items as there are targets in the\n target list, minus one. The first items of the iterable are\n assigned, from left to right, to the targets before the starred\n target. The final items of the iterable are assigned to the\n targets after the starred target. A list of the remaining items\n in the iterable is then assigned to the starred target (the list\n can be empty).\n\n * Else: The object must be an iterable with the same number of\n items as there are targets in the target list, and the items are\n assigned, from left to right, to the corresponding targets.\n\nAssignment of an object to a single target is recursively defined as\nfollows.\n\n* If the target is an identifier (name):\n\n * If the name does not occur in a "global" or "nonlocal" statement\n in the current code block: the name is bound to the object in the\n current local namespace.\n\n * Otherwise: the name is bound to the object in the global\n namespace or the outer namespace determined by "nonlocal",\n respectively.\n\n The name is rebound if it was already bound. This may cause the\n reference count for the object previously bound to the name to reach\n zero, causing the object to be deallocated and its destructor (if it\n has one) to be called.\n\n* If the target is an attribute reference: The primary expression in\n the reference is evaluated. It should yield an object with\n assignable attributes; if this is not the case, "TypeError" is\n raised. That object is then asked to assign the assigned object to\n the given attribute; if it cannot perform the assignment, it raises\n an exception (usually but not necessarily "AttributeError").\n\n Note: If the object is a class instance and the attribute reference\n occurs on both sides of the assignment operator, the RHS expression,\n "a.x" can access either an instance attribute or (if no instance\n attribute exists) a class attribute. The LHS target "a.x" is always\n set as an instance attribute, creating it if necessary. Thus, the\n two occurrences of "a.x" do not necessarily refer to the same\n attribute: if the RHS expression refers to a class attribute, the\n LHS creates a new instance attribute as the target of the\n assignment:\n\n class Cls:\n x = 3 # class variable\n inst = Cls()\n inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3\n\n This description does not necessarily apply to descriptor\n attributes, such as properties created with "property()".\n\n* If the target is a subscription: The primary expression in the\n reference is evaluated. It should yield either a mutable sequence\n object (such as a list) or a mapping object (such as a dictionary).\n Next, the subscript expression is evaluated.\n\n If the primary is a mutable sequence object (such as a list), the\n subscript must yield an integer. If it is negative, the sequence\'s\n length is added to it. The resulting value must be a nonnegative\n integer less than the sequence\'s length, and the sequence is asked\n to assign the assigned object to its item with that index. If the\n index is out of range, "IndexError" is raised (assignment to a\n subscripted sequence cannot add new items to a list).\n\n If the primary is a mapping object (such as a dictionary), the\n subscript must have a type compatible with the mapping\'s key type,\n and the mapping is then asked to create a key/datum pair which maps\n the subscript to the assigned object. This can either replace an\n existing key/value pair with the same key value, or insert a new\n key/value pair (if no key with the same value existed).\n\n For user-defined objects, the "__setitem__()" method is called with\n appropriate arguments.\n\n* If the target is a slicing: The primary expression in the\n reference is evaluated. It should yield a mutable sequence object\n (such as a list). The assigned object should be a sequence object\n of the same type. Next, the lower and upper bound expressions are\n evaluated, insofar they are present; defaults are zero and the\n sequence\'s length. The bounds should evaluate to integers. If\n either bound is negative, the sequence\'s length is added to it. The\n resulting bounds are clipped to lie between zero and the sequence\'s\n length, inclusive. Finally, the sequence object is asked to replace\n the slice with the items of the assigned sequence. The length of\n the slice may be different from the length of the assigned sequence,\n thus changing the length of the target sequence, if the target\n sequence allows it.\n\n**CPython implementation detail:** In the current implementation, the\nsyntax for targets is taken to be the same as for expressions, and\ninvalid syntax is rejected during the code generation phase, causing\nless detailed error messages.\n\nAlthough the definition of assignment implies that overlaps between\nthe left-hand side and the right-hand side are \'simultaneous\' (for\nexample "a, b = b, a" swaps two variables), overlaps *within* the\ncollection of assigned-to variables occur left-to-right, sometimes\nresulting in confusion. For instance, the following program prints\n"[0, 2]":\n\n x = [0, 1]\n i = 0\n i, x[i] = 1, 2 # i is updated, then x[i] is updated\n print(x)\n\nSee also: **PEP 3132** - Extended Iterable Unpacking\n\n The specification for the "*target" feature.\n\n\nAugmented assignment statements\n===============================\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions of the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like "x += 1" can be rewritten as\n"x = x + 1" to achieve a similar, but not exactly equal effect. In the\naugmented version, "x" is only evaluated once. Also, when possible,\nthe actual operation is performed *in-place*, meaning that rather than\ncreating a new object and assigning that to the target, the old object\nis modified instead.\n\nUnlike normal assignments, augmented assignments evaluate the left-\nhand side *before* evaluating the right-hand side. For example, "a[i]\n+= f(x)" first looks-up "a[i]", then it evaluates "f(x)" and performs\nthe addition, and lastly, it writes the result back to "a[i]".\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n', + 'atom-identifiers': u'\nIdentifiers (Names)\n*******************\n\nAn identifier occurring as an atom is a name. See section\n*Identifiers and keywords* for lexical definition and section *Naming\nand binding* for documentation of naming and binding.\n\nWhen the name is bound to an object, evaluation of the atom yields\nthat object. When a name is not bound, an attempt to evaluate it\nraises a "NameError" exception.\n\n**Private name mangling:** When an identifier that textually occurs in\na class definition begins with two or more underscore characters and\ndoes not end in two or more underscores, it is considered a *private\nname* of that class. Private names are transformed to a longer form\nbefore code is generated for them. The transformation inserts the\nclass name, with leading underscores removed and a single underscore\ninserted, in front of the name. For example, the identifier "__spam"\noccurring in a class named "Ham" will be transformed to "_Ham__spam".\nThis transformation is independent of the syntactical context in which\nthe identifier is used. If the transformed name is extremely long\n(longer than 255 characters), implementation defined truncation may\nhappen. If the class name consists only of underscores, no\ntransformation is done.\n', + 'atom-literals': u"\nLiterals\n********\n\nPython supports string and bytes literals and various numeric\nliterals:\n\n literal ::= stringliteral | bytesliteral\n | integer | floatnumber | imagnumber\n\nEvaluation of a literal yields an object of the given type (string,\nbytes, integer, floating point number, complex number) with the given\nvalue. The value may be approximated in the case of floating point\nand imaginary (complex) literals. See section *Literals* for details.\n\nAll literals correspond to immutable data types, and hence the\nobject's identity is less important than its value. Multiple\nevaluations of literals with the same value (either the same\noccurrence in the program text or a different occurrence) may obtain\nthe same object or a different object with the same value.\n", + 'attribute-access': u'\nCustomizing attribute access\n****************************\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of "x.name") for\nclass instances.\n\nobject.__getattr__(self, name)\n\n Called when an attribute lookup has not found the attribute in the\n usual places (i.e. it is not an instance attribute nor is it found\n in the class tree for "self"). "name" is the attribute name. This\n method should return the (computed) attribute value or raise an\n "AttributeError" exception.\n\n Note that if the attribute is found through the normal mechanism,\n "__getattr__()" is not called. (This is an intentional asymmetry\n between "__getattr__()" and "__setattr__()".) This is done both for\n efficiency reasons and because otherwise "__getattr__()" would have\n no way to access other attributes of the instance. Note that at\n least for instance variables, you can fake total control by not\n inserting any values in the instance attribute dictionary (but\n instead inserting them in another object). See the\n "__getattribute__()" method below for a way to actually get total\n control over attribute access.\n\nobject.__getattribute__(self, name)\n\n Called unconditionally to implement attribute accesses for\n instances of the class. If the class also defines "__getattr__()",\n the latter will not be called unless "__getattribute__()" either\n calls it explicitly or raises an "AttributeError". This method\n should return the (computed) attribute value or raise an\n "AttributeError" exception. In order to avoid infinite recursion in\n this method, its implementation should always call the base class\n method with the same name to access any attributes it needs, for\n example, "object.__getattribute__(self, name)".\n\n Note: This method may still be bypassed when looking up special\n methods as the result of implicit invocation via language syntax\n or built-in functions. See *Special method lookup*.\n\nobject.__setattr__(self, name, value)\n\n Called when an attribute assignment is attempted. This is called\n instead of the normal mechanism (i.e. store the value in the\n instance dictionary). *name* is the attribute name, *value* is the\n value to be assigned to it.\n\n If "__setattr__()" wants to assign to an instance attribute, it\n should call the base class method with the same name, for example,\n "object.__setattr__(self, name, value)".\n\nobject.__delattr__(self, name)\n\n Like "__setattr__()" but for attribute deletion instead of\n assignment. This should only be implemented if "del obj.name" is\n meaningful for the object.\n\nobject.__dir__(self)\n\n Called when "dir()" is called on the object. A sequence must be\n returned. "dir()" converts the returned sequence to a list and\n sorts it.\n\n\nImplementing Descriptors\n========================\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in an\n*owner* class (the descriptor must be in either the owner\'s class\ndictionary or in the class dictionary for one of its parents). In the\nexamples below, "the attribute" refers to the attribute whose name is\nthe key of the property in the owner class\' "__dict__".\n\nobject.__get__(self, instance, owner)\n\n Called to get the attribute of the owner class (class attribute\n access) or of an instance of that class (instance attribute\n access). *owner* is always the owner class, while *instance* is the\n instance that the attribute was accessed through, or "None" when\n the attribute is accessed through the *owner*. This method should\n return the (computed) attribute value or raise an "AttributeError"\n exception.\n\nobject.__set__(self, instance, value)\n\n Called to set the attribute on an instance *instance* of the owner\n class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n Called to delete the attribute on an instance *instance* of the\n owner class.\n\nThe attribute "__objclass__" is interpreted by the "inspect" module as\nspecifying the class where this object was defined (setting this\nappropriately can assist in runtime introspection of dynamic class\nattributes). For callables, it may indicate that an instance of the\ngiven type (or a subclass) is expected or required as the first\npositional argument (for example, CPython sets this attribute for\nunbound methods that are implemented in C).\n\n\nInvoking Descriptors\n====================\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol: "__get__()", "__set__()", and\n"__delete__()". If any of those methods are defined for an object, it\nis said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, "a.x" has a\nlookup chain starting with "a.__dict__[\'x\']", then\n"type(a).__dict__[\'x\']", and continuing through the base classes of\n"type(a)" excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead. Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called.\n\nThe starting point for descriptor invocation is a binding, "a.x". How\nthe arguments are assembled depends on "a":\n\nDirect Call\n The simplest and least common call is when user code directly\n invokes a descriptor method: "x.__get__(a)".\n\nInstance Binding\n If binding to an object instance, "a.x" is transformed into the\n call: "type(a).__dict__[\'x\'].__get__(a, type(a))".\n\nClass Binding\n If binding to a class, "A.x" is transformed into the call:\n "A.__dict__[\'x\'].__get__(None, A)".\n\nSuper Binding\n If "a" is an instance of "super", then the binding "super(B,\n obj).m()" searches "obj.__class__.__mro__" for the base class "A"\n immediately preceding "B" and then invokes the descriptor with the\n call: "A.__dict__[\'m\'].__get__(obj, obj.__class__)".\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined. A descriptor can define\nany combination of "__get__()", "__set__()" and "__delete__()". If it\ndoes not define "__get__()", then accessing the attribute will return\nthe descriptor object itself unless there is a value in the object\'s\ninstance dictionary. If the descriptor defines "__set__()" and/or\n"__delete__()", it is a data descriptor; if it defines neither, it is\na non-data descriptor. Normally, data descriptors define both\n"__get__()" and "__set__()", while non-data descriptors have just the\n"__get__()" method. Data descriptors with "__set__()" and "__get__()"\ndefined always override a redefinition in an instance dictionary. In\ncontrast, non-data descriptors can be overridden by instances.\n\nPython methods (including "staticmethod()" and "classmethod()") are\nimplemented as non-data descriptors. Accordingly, instances can\nredefine and override methods. This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe "property()" function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n=========\n\nBy default, instances of classes have a dictionary for attribute\nstorage. This wastes space for objects having very few instance\nvariables. The space consumption can become acute when creating large\nnumbers of instances.\n\nThe default can be overridden by defining *__slots__* in a class\ndefinition. The *__slots__* declaration takes a sequence of instance\nvariables and reserves just enough space in each instance to hold a\nvalue for each variable. Space is saved because *__dict__* is not\ncreated for each instance.\n\nobject.__slots__\n\n This class variable can be assigned a string, iterable, or sequence\n of strings with variable names used by instances. *__slots__*\n reserves space for the declared variables and prevents the\n automatic creation of *__dict__* and *__weakref__* for each\n instance.\n\n\nNotes on using *__slots__*\n--------------------------\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n attribute of that class will always be accessible, so a *__slots__*\n definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n variables not listed in the *__slots__* definition. Attempts to\n assign to an unlisted variable name raises "AttributeError". If\n dynamic assignment of new variables is desired, then add\n "\'__dict__\'" to the sequence of strings in the *__slots__*\n declaration.\n\n* Without a *__weakref__* variable for each instance, classes\n defining *__slots__* do not support weak references to its\n instances. If weak reference support is needed, then add\n "\'__weakref__\'" to the sequence of strings in the *__slots__*\n declaration.\n\n* *__slots__* are implemented at the class level by creating\n descriptors (*Implementing Descriptors*) for each variable name. As\n a result, class attributes cannot be used to set default values for\n instance variables defined by *__slots__*; otherwise, the class\n attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n where it is defined. As a result, subclasses will have a *__dict__*\n unless they also define *__slots__* (which must only contain names\n of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the\n instance variable defined by the base class slot is inaccessible\n (except by retrieving its descriptor directly from the base class).\n This renders the meaning of the program undefined. In the future, a\n check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n "variable-length" built-in types such as "int", "bytes" and "tuple".\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings\n may also be used; however, in the future, special meaning may be\n assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n *__slots__*.\n', + 'attribute-references': u'\nAttribute references\n********************\n\nAn attribute reference is a primary followed by a period and a name:\n\n attributeref ::= primary "." identifier\n\nThe primary must evaluate to an object of a type that supports\nattribute references, which most objects do. This object is then\nasked to produce the attribute whose name is the identifier. This\nproduction can be customized by overriding the "__getattr__()" method.\nIf this attribute is not available, the exception "AttributeError" is\nraised. Otherwise, the type and value of the object produced is\ndetermined by the object. Multiple evaluations of the same attribute\nreference may yield different objects.\n', + 'augassign': u'\nAugmented assignment statements\n*******************************\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions of the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like "x += 1" can be rewritten as\n"x = x + 1" to achieve a similar, but not exactly equal effect. In the\naugmented version, "x" is only evaluated once. Also, when possible,\nthe actual operation is performed *in-place*, meaning that rather than\ncreating a new object and assigning that to the target, the old object\nis modified instead.\n\nUnlike normal assignments, augmented assignments evaluate the left-\nhand side *before* evaluating the right-hand side. For example, "a[i]\n+= f(x)" first looks-up "a[i]", then it evaluates "f(x)" and performs\nthe addition, and lastly, it writes the result back to "a[i]".\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n', + 'binary': u'\nBinary arithmetic operations\n****************************\n\nThe binary arithmetic operations have the conventional priority\nlevels. Note that some of these operations also apply to certain non-\nnumeric types. Apart from the power operator, there are only two\nlevels, one for multiplicative operators and one for additive\noperators:\n\n m_expr ::= u_expr | m_expr "*" u_expr | m_expr "@" m_expr |\n m_expr "//" u_expr| m_expr "/" u_expr |\n m_expr "%" u_expr\n a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr\n\nThe "*" (multiplication) operator yields the product of its arguments.\nThe arguments must either both be numbers, or one argument must be an\ninteger and the other must be a sequence. In the former case, the\nnumbers are converted to a common type and then multiplied together.\nIn the latter case, sequence repetition is performed; a negative\nrepetition factor yields an empty sequence.\n\nThe "@" (at) operator is intended to be used for matrix\nmultiplication. No builtin Python types implement this operator.\n\nNew in version 3.5.\n\nThe "/" (division) and "//" (floor division) operators yield the\nquotient of their arguments. The numeric arguments are first\nconverted to a common type. Division of integers yields a float, while\nfloor division of integers results in an integer; the result is that\nof mathematical division with the \'floor\' function applied to the\nresult. Division by zero raises the "ZeroDivisionError" exception.\n\nThe "%" (modulo) operator yields the remainder from the division of\nthe first argument by the second. The numeric arguments are first\nconverted to a common type. A zero right argument raises the\n"ZeroDivisionError" exception. The arguments may be floating point\nnumbers, e.g., "3.14%0.7" equals "0.34" (since "3.14" equals "4*0.7 +\n0.34".) The modulo operator always yields a result with the same sign\nas its second operand (or zero); the absolute value of the result is\nstrictly smaller than the absolute value of the second operand [1].\n\nThe floor division and modulo operators are connected by the following\nidentity: "x == (x//y)*y + (x%y)". Floor division and modulo are also\nconnected with the built-in function "divmod()": "divmod(x, y) ==\n(x//y, x%y)". [2].\n\nIn addition to performing the modulo operation on numbers, the "%"\noperator is also overloaded by string objects to perform old-style\nstring formatting (also known as interpolation). The syntax for\nstring formatting is described in the Python Library Reference,\nsection *printf-style String Formatting*.\n\nThe floor division operator, the modulo operator, and the "divmod()"\nfunction are not defined for complex numbers. Instead, convert to a\nfloating point number using the "abs()" function if appropriate.\n\nThe "+" (addition) operator yields the sum of its arguments. The\narguments must either both be numbers or both be sequences of the same\ntype. In the former case, the numbers are converted to a common type\nand then added together. In the latter case, the sequences are\nconcatenated.\n\nThe "-" (subtraction) operator yields the difference of its arguments.\nThe numeric arguments are first converted to a common type.\n', + 'bitwise': u'\nBinary bitwise operations\n*************************\n\nEach of the three bitwise operations has a different priority level:\n\n and_expr ::= shift_expr | and_expr "&" shift_expr\n xor_expr ::= and_expr | xor_expr "^" and_expr\n or_expr ::= xor_expr | or_expr "|" xor_expr\n\nThe "&" operator yields the bitwise AND of its arguments, which must\nbe integers.\n\nThe "^" operator yields the bitwise XOR (exclusive OR) of its\narguments, which must be integers.\n\nThe "|" operator yields the bitwise (inclusive) OR of its arguments,\nwhich must be integers.\n', + 'bltin-code-objects': u'\nCode Objects\n************\n\nCode objects are used by the implementation to represent "pseudo-\ncompiled" executable Python code such as a function body. They differ\nfrom function objects because they don\'t contain a reference to their\nglobal execution environment. Code objects are returned by the built-\nin "compile()" function and can be extracted from function objects\nthrough their "__code__" attribute. See also the "code" module.\n\nA code object can be executed or evaluated by passing it (instead of a\nsource string) to the "exec()" or "eval()" built-in functions.\n\nSee *The standard type hierarchy* for more information.\n', + 'bltin-ellipsis-object': u'\nThe Ellipsis Object\n*******************\n\nThis object is commonly used by slicing (see *Slicings*). It supports\nno special operations. There is exactly one ellipsis object, named\n"Ellipsis" (a built-in name). "type(Ellipsis)()" produces the\n"Ellipsis" singleton.\n\nIt is written as "Ellipsis" or "...".\n', + 'bltin-null-object': u'\nThe Null Object\n***************\n\nThis object is returned by functions that don\'t explicitly return a\nvalue. It supports no special operations. There is exactly one null\nobject, named "None" (a built-in name). "type(None)()" produces the\nsame singleton.\n\nIt is written as "None".\n', + 'bltin-type-objects': u'\nType Objects\n************\n\nType objects represent the various object types. An object\'s type is\naccessed by the built-in function "type()". There are no special\noperations on types. The standard module "types" defines names for\nall standard built-in types.\n\nTypes are written like this: "".\n', + 'booleans': u'\nBoolean operations\n******************\n\n or_test ::= and_test | or_test "or" and_test\n and_test ::= not_test | and_test "and" not_test\n not_test ::= comparison | "not" not_test\n\nIn the context of Boolean operations, and also when expressions are\nused by control flow statements, the following values are interpreted\nas false: "False", "None", numeric zero of all types, and empty\nstrings and containers (including strings, tuples, lists,\ndictionaries, sets and frozensets). All other values are interpreted\nas true. User-defined objects can customize their truth value by\nproviding a "__bool__()" method.\n\nThe operator "not" yields "True" if its argument is false, "False"\notherwise.\n\nThe expression "x and y" first evaluates *x*; if *x* is false, its\nvalue is returned; otherwise, *y* is evaluated and the resulting value\nis returned.\n\nThe expression "x or y" first evaluates *x*; if *x* is true, its value\nis returned; otherwise, *y* is evaluated and the resulting value is\nreturned.\n\n(Note that neither "and" nor "or" restrict the value and type they\nreturn to "False" and "True", but rather return the last evaluated\nargument. This is sometimes useful, e.g., if "s" is a string that\nshould be replaced by a default value if it is empty, the expression\n"s or \'foo\'" yields the desired value. Because "not" has to create a\nnew value, it returns a boolean value regardless of the type of its\nargument (for example, "not \'foo\'" produces "False" rather than "\'\'".)\n', + 'break': u'\nThe "break" statement\n*********************\n\n break_stmt ::= "break"\n\n"break" may only occur syntactically nested in a "for" or "while"\nloop, but not nested in a function or class definition within that\nloop.\n\nIt terminates the nearest enclosing loop, skipping the optional "else"\nclause if the loop has one.\n\nIf a "for" loop is terminated by "break", the loop control target\nkeeps its current value.\n\nWhen "break" passes control out of a "try" statement with a "finally"\nclause, that "finally" clause is executed before really leaving the\nloop.\n', + 'callable-types': u'\nEmulating callable objects\n**************************\n\nobject.__call__(self[, args...])\n\n Called when the instance is "called" as a function; if this method\n is defined, "x(arg1, arg2, ...)" is a shorthand for\n "x.__call__(arg1, arg2, ...)".\n', + 'calls': u'\nCalls\n*****\n\nA call calls a callable object (e.g., a *function*) with a possibly\nempty series of *arguments*:\n\n call ::= primary "(" [argument_list [","] | comprehension] ")"\n argument_list ::= positional_arguments ["," starred_and_keywords]\n ["," keywords_arguments]\n | starred_and_keywords ["," keywords_arguments]\n | keywords_arguments\n positional_arguments ::= ["*"] expression ("," ["*"] expression)*\n starred_and_keywords ::= ("*" expression | keyword_item)\n ("," "*" expression | "," keyword_item)*\n keywords_arguments ::= (keyword_item | "**" expression)\n ("," keyword_item | "**" expression)*\n keyword_item ::= identifier "=" expression\n\nAn optional trailing comma may be present after the positional and\nkeyword arguments but does not affect the semantics.\n\nThe primary must evaluate to a callable object (user-defined\nfunctions, built-in functions, methods of built-in objects, class\nobjects, methods of class instances, and all objects having a\n"__call__()" method are callable). All argument expressions are\nevaluated before the call is attempted. Please refer to section\n*Function definitions* for the syntax of formal *parameter* lists.\n\nIf keyword arguments are present, they are first converted to\npositional arguments, as follows. First, a list of unfilled slots is\ncreated for the formal parameters. If there are N positional\narguments, they are placed in the first N slots. Next, for each\nkeyword argument, the identifier is used to determine the\ncorresponding slot (if the identifier is the same as the first formal\nparameter name, the first slot is used, and so on). If the slot is\nalready filled, a "TypeError" exception is raised. Otherwise, the\nvalue of the argument is placed in the slot, filling it (even if the\nexpression is "None", it fills the slot). When all arguments have\nbeen processed, the slots that are still unfilled are filled with the\ncorresponding default value from the function definition. (Default\nvalues are calculated, once, when the function is defined; thus, a\nmutable object such as a list or dictionary used as default value will\nbe shared by all calls that don\'t specify an argument value for the\ncorresponding slot; this should usually be avoided.) If there are any\nunfilled slots for which no default value is specified, a "TypeError"\nexception is raised. Otherwise, the list of filled slots is used as\nthe argument list for the call.\n\n**CPython implementation detail:** An implementation may provide\nbuilt-in functions whose positional parameters do not have names, even\nif they are \'named\' for the purpose of documentation, and which\ntherefore cannot be supplied by keyword. In CPython, this is the case\nfor functions implemented in C that use "PyArg_ParseTuple()" to parse\ntheir arguments.\n\nIf there are more positional arguments than there are formal parameter\nslots, a "TypeError" exception is raised, unless a formal parameter\nusing the syntax "*identifier" is present; in this case, that formal\nparameter receives a tuple containing the excess positional arguments\n(or an empty tuple if there were no excess positional arguments).\n\nIf any keyword argument does not correspond to a formal parameter\nname, a "TypeError" exception is raised, unless a formal parameter\nusing the syntax "**identifier" is present; in this case, that formal\nparameter receives a dictionary containing the excess keyword\narguments (using the keywords as keys and the argument values as\ncorresponding values), or a (new) empty dictionary if there were no\nexcess keyword arguments.\n\nIf the syntax "*expression" appears in the function call, "expression"\nmust evaluate to an *iterable*. Elements from these iterables are\ntreated as if they were additional positional arguments. For the call\n"f(x1, x2, *y, x3, x4)", if *y* evaluates to a sequence *y1*, ...,\n*yM*, this is equivalent to a call with M+4 positional arguments *x1*,\n*x2*, *y1*, ..., *yM*, *x3*, *x4*.\n\nA consequence of this is that although the "*expression" syntax may\nappear *after* explicit keyword arguments, it is processed *before*\nthe keyword arguments (and any "**expression" arguments -- see below).\nSo:\n\n >>> def f(a, b):\n ... print(a, b)\n ...\n >>> f(b=1, *(2,))\n 2 1\n >>> f(a=1, *(2,))\n Traceback (most recent call last):\n File "", line 1, in ?\n TypeError: f() got multiple values for keyword argument \'a\'\n >>> f(1, *(2,))\n 1 2\n\nIt is unusual for both keyword arguments and the "*expression" syntax\nto be used in the same call, so in practice this confusion does not\narise.\n\nIf the syntax "**expression" appears in the function call,\n"expression" must evaluate to a *mapping*, the contents of which are\ntreated as additional keyword arguments. If a keyword is already\npresent (as an explicit keyword argument, or from another unpacking),\na "TypeError" exception is raised.\n\nFormal parameters using the syntax "*identifier" or "**identifier"\ncannot be used as positional argument slots or as keyword argument\nnames.\n\nChanged in version 3.5: Function calls accept any number of "*" and\n"**" unpackings, positional arguments may follow iterable unpackings\n("*"), and keyword arguments may follow dictionary unpackings ("**").\nOriginally proposed by **PEP 448**.\n\nA call always returns some value, possibly "None", unless it raises an\nexception. How this value is computed depends on the type of the\ncallable object.\n\nIf it is---\n\na user-defined function:\n The code block for the function is executed, passing it the\n argument list. The first thing the code block will do is bind the\n formal parameters to the arguments; this is described in section\n *Function definitions*. When the code block executes a "return"\n statement, this specifies the return value of the function call.\n\na built-in function or method:\n The result is up to the interpreter; see *Built-in Functions* for\n the descriptions of built-in functions and methods.\n\na class object:\n A new instance of that class is returned.\n\na class instance method:\n The corresponding user-defined function is called, with an argument\n list that is one longer than the argument list of the call: the\n instance becomes the first argument.\n\na class instance:\n The class must define a "__call__()" method; the effect is then the\n same as if that method was called.\n', + 'class': u'\nClass definitions\n*****************\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n classdef ::= [decorators] "class" classname [inheritance] ":" suite\n inheritance ::= "(" [argument_list] ")"\n classname ::= identifier\n\nA class definition is an executable statement. The inheritance list\nusually gives a list of base classes (see *Customizing class creation*\nfor more advanced uses), so each item in the list should evaluate to a\nclass object which allows subclassing. Classes without an inheritance\nlist inherit, by default, from the base class "object"; hence,\n\n class Foo:\n pass\n\nis equivalent to\n\n class Foo(object):\n pass\n\nThe class\'s suite is then executed in a new execution frame (see\n*Naming and binding*), using a newly created local namespace and the\noriginal global namespace. (Usually, the suite contains mostly\nfunction definitions.) When the class\'s suite finishes execution, its\nexecution frame is discarded but its local namespace is saved. [4] A\nclass object is then created using the inheritance list for the base\nclasses and the saved local namespace for the attribute dictionary.\nThe class name is bound to this class object in the original local\nnamespace.\n\nClass creation can be customized heavily using *metaclasses*.\n\nClasses can also be decorated: just like when decorating functions,\n\n @f1(arg)\n @f2\n class Foo: pass\n\nis equivalent to\n\n class Foo: pass\n Foo = f1(arg)(f2(Foo))\n\nThe evaluation rules for the decorator expressions are the same as for\nfunction decorators. The result must be a class object, which is then\nbound to the class name.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass attributes; they are shared by instances. Instance attributes\ncan be set in a method with "self.name = value". Both class and\ninstance attributes are accessible through the notation ""self.name"",\nand an instance attribute hides a class attribute with the same name\nwhen accessed in this way. Class attributes can be used as defaults\nfor instance attributes, but using mutable values there can lead to\nunexpected results. *Descriptors* can be used to create instance\nvariables with different implementation details.\n\nSee also: **PEP 3115** - Metaclasses in Python 3 **PEP 3129** -\n Class Decorators\n', + 'comparisons': u'\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation. Also unlike C, expressions like "a < b < c" have the\ninterpretation that is conventional in mathematics:\n\n comparison ::= or_expr ( comp_operator or_expr )*\n comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="\n | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: "True" or "False".\n\nComparisons can be chained arbitrarily, e.g., "x < y <= z" is\nequivalent to "x < y and y <= z", except that "y" is evaluated only\nonce (but in both cases "z" is not evaluated at all when "x < y" is\nfound to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then "a op1 b op2 c ... y\nopN z" is equivalent to "a op1 b and b op2 c and ... y opN z", except\nthat each expression is evaluated at most once.\n\nNote that "a op1 b op2 c" doesn\'t imply any kind of comparison between\n*a* and *c*, so that, e.g., "x < y > z" is perfectly legal (though\nperhaps not pretty).\n\n\nValue comparisons\n=================\n\nThe operators "<", ">", "==", ">=", "<=", and "!=" compare the values\nof two objects. The objects do not need to have the same type.\n\nChapter *Objects, values and types* states that objects have a value\n(in addition to type and identity). The value of an object is a\nrather abstract notion in Python: For example, there is no canonical\naccess method for an object\'s value. Also, there is no requirement\nthat the value of an object should be constructed in a particular way,\ne.g. comprised of all its data attributes. Comparison operators\nimplement a particular notion of what the value of an object is. One\ncan think of them as defining the value of an object indirectly, by\nmeans of their comparison implementation.\n\nBecause all types are (direct or indirect) subtypes of "object", they\ninherit the default comparison behavior from "object". Types can\ncustomize their comparison behavior by implementing *rich comparison\nmethods* like "__lt__()", described in *Basic customization*.\n\nThe default behavior for equality comparison ("==" and "!=") is based\non the identity of the objects. Hence, equality comparison of\ninstances with the same identity results in equality, and equality\ncomparison of instances with different identities results in\ninequality. A motivation for this default behavior is the desire that\nall objects should be reflexive (i.e. "x is y" implies "x == y").\n\nA default order comparison ("<", ">", "<=", and ">=") is not provided;\nan attempt raises "TypeError". A motivation for this default behavior\nis the lack of a similar invariant as for equality.\n\nThe behavior of the default equality comparison, that instances with\ndifferent identities are always unequal, may be in contrast to what\ntypes will need that have a sensible definition of object value and\nvalue-based equality. Such types will need to customize their\ncomparison behavior, and in fact, a number of built-in types have done\nthat.\n\nThe following list describes the comparison behavior of the most\nimportant built-in types.\n\n* Numbers of built-in numeric types (*Numeric Types --- int, float,\n complex*) and of the standard library types "fractions.Fraction" and\n "decimal.Decimal" can be compared within and across their types,\n with the restriction that complex numbers do not support order\n comparison. Within the limits of the types involved, they compare\n mathematically (algorithmically) correct without loss of precision.\n\n The not-a-number values "float(\'NaN\')" and "Decimal(\'NaN\')" are\n special. They are identical to themselves ("x is x" is true) but\n are not equal to themselves ("x == x" is false). Additionally,\n comparing any number to a not-a-number value will return "False".\n For example, both "3 < float(\'NaN\')" and "float(\'NaN\') < 3" will\n return "False".\n\n* Binary sequences (instances of "bytes" or "bytearray") can be\n compared within and across their types. They compare\n lexicographically using the numeric values of their elements.\n\n* Strings (instances of "str") compare lexicographically using the\n numerical Unicode code points (the result of the built-in function\n "ord()") of their characters. [3]\n\n Strings and binary sequences cannot be directly compared.\n\n* Sequences (instances of "tuple", "list", or "range") can be\n compared only within each of their types, with the restriction that\n ranges do not support order comparison. Equality comparison across\n these types results in unequality, and ordering comparison across\n these types raises "TypeError".\n\n Sequences compare lexicographically using comparison of\n corresponding elements, whereby reflexivity of the elements is\n enforced.\n\n In enforcing reflexivity of elements, the comparison of collections\n assumes that for a collection element "x", "x == x" is always true.\n Based on that assumption, element identity is compared first, and\n element comparison is performed only for distinct elements. This\n approach yields the same result as a strict element comparison\n would, if the compared elements are reflexive. For non-reflexive\n elements, the result is different than for strict element\n comparison, and may be surprising: The non-reflexive not-a-number\n values for example result in the following comparison behavior when\n used in a list:\n\n >>> nan = float(\'NaN\')\n >>> nan is nan\n True\n >>> nan == nan\n False <-- the defined non-reflexive behavior of NaN\n >>> [nan] == [nan]\n True <-- list enforces reflexivity and tests identity first\n\n Lexicographical comparison between built-in collections works as\n follows:\n\n * For two collections to compare equal, they must be of the same\n type, have the same length, and each pair of corresponding\n elements must compare equal (for example, "[1,2] == (1,2)" is\n false because the type is not the same).\n\n * Collections that support order comparison are ordered the same\n as their first unequal elements (for example, "[1,2,x] <= [1,2,y]"\n has the same value as "x <= y"). If a corresponding element does\n not exist, the shorter collection is ordered first (for example,\n "[1,2] < [1,2,3]" is true).\n\n* Mappings (instances of "dict") compare equal if and only if they\n have equal *(key, value)* pairs. Equality comparison of the keys and\n elements enforces reflexivity.\n\n Order comparisons ("<", ">", "<=", and ">=") raise "TypeError".\n\n* Sets (instances of "set" or "frozenset") can be compared within\n and across their types.\n\n They define order comparison operators to mean subset and superset\n tests. Those relations do not define total orderings (for example,\n the two sets "{1,2}" and "{2,3}" are not equal, nor subsets of one\n another, nor supersets of one another). Accordingly, sets are not\n appropriate arguments for functions which depend on total ordering\n (for example, "min()", "max()", and "sorted()" produce undefined\n results given a list of sets as inputs).\n\n Comparison of sets enforces reflexivity of its elements.\n\n* Most other built-in types have no comparison methods implemented,\n so they inherit the default comparison behavior.\n\nUser-defined classes that customize their comparison behavior should\nfollow some consistency rules, if possible:\n\n* Equality comparison should be reflexive. In other words, identical\n objects should compare equal:\n\n "x is y" implies "x == y"\n\n* Comparison should be symmetric. In other words, the following\n expressions should have the same result:\n\n "x == y" and "y == x"\n\n "x != y" and "y != x"\n\n "x < y" and "y > x"\n\n "x <= y" and "y >= x"\n\n* Comparison should be transitive. The following (non-exhaustive)\n examples illustrate that:\n\n "x > y and y > z" implies "x > z"\n\n "x < y and y <= z" implies "x < z"\n\n* Inverse comparison should result in the boolean negation. In other\n words, the following expressions should have the same result:\n\n "x == y" and "not x != y"\n\n "x < y" and "not x >= y" (for total ordering)\n\n "x > y" and "not x <= y" (for total ordering)\n\n The last two expressions apply to totally ordered collections (e.g.\n to sequences, but not to sets or mappings). See also the\n "total_ordering()" decorator.\n\nPython does not enforce these consistency rules. In fact, the\nnot-a-number values are an example for not following these rules.\n\n\nMembership test operations\n==========================\n\nThe operators "in" and "not in" test for membership. "x in s"\nevaluates to true if *x* is a member of *s*, and false otherwise. "x\nnot in s" returns the negation of "x in s". All built-in sequences\nand set types support this as well as dictionary, for which "in" tests\nwhether the dictionary has a given key. For container types such as\nlist, tuple, set, frozenset, dict, or collections.deque, the\nexpression "x in y" is equivalent to "any(x is e or x == e for e in\ny)".\n\nFor the string and bytes types, "x in y" is true if and only if *x* is\na substring of *y*. An equivalent test is "y.find(x) != -1". Empty\nstrings are always considered to be a substring of any other string,\nso """ in "abc"" will return "True".\n\nFor user-defined classes which define the "__contains__()" method, "x\nin y" is true if and only if "y.__contains__(x)" is true.\n\nFor user-defined classes which do not define "__contains__()" but do\ndefine "__iter__()", "x in y" is true if some value "z" with "x == z"\nis produced while iterating over "y". If an exception is raised\nduring the iteration, it is as if "in" raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n"__getitem__()", "x in y" is true if and only if there is a non-\nnegative integer index *i* such that "x == y[i]", and all lower\ninteger indices do not raise "IndexError" exception. (If any other\nexception is raised, it is as if "in" raised that exception).\n\nThe operator "not in" is defined to have the inverse true value of\n"in".\n\n\nIdentity comparisons\n====================\n\nThe operators "is" and "is not" test for object identity: "x is y" is\ntrue if and only if *x* and *y* are the same object. "x is not y"\nyields the inverse truth value. [4]\n', + 'compound': u'\nCompound statements\n*******************\n\nCompound statements contain (groups of) other statements; they affect\nor control the execution of those other statements in some way. In\ngeneral, compound statements span multiple lines, although in simple\nincarnations a whole compound statement may be contained in one line.\n\nThe "if", "while" and "for" statements implement traditional control\nflow constructs. "try" specifies exception handlers and/or cleanup\ncode for a group of statements, while the "with" statement allows the\nexecution of initialization and finalization code around a block of\ncode. Function and class definitions are also syntactically compound\nstatements.\n\nA compound statement consists of one or more \'clauses.\' A clause\nconsists of a header and a \'suite.\' The clause headers of a\nparticular compound statement are all at the same indentation level.\nEach clause header begins with a uniquely identifying keyword and ends\nwith a colon. A suite is a group of statements controlled by a\nclause. A suite can be one or more semicolon-separated simple\nstatements on the same line as the header, following the header\'s\ncolon, or it can be one or more indented statements on subsequent\nlines. Only the latter form of a suite can contain nested compound\nstatements; the following is illegal, mostly because it wouldn\'t be\nclear to which "if" clause a following "else" clause would belong:\n\n if test1: if test2: print(x)\n\nAlso note that the semicolon binds tighter than the colon in this\ncontext, so that in the following example, either all or none of the\n"print()" calls are executed:\n\n if x < y < z: print(x); print(y); print(z)\n\nSummarizing:\n\n compound_stmt ::= if_stmt\n | while_stmt\n | for_stmt\n | try_stmt\n | with_stmt\n | funcdef\n | classdef\n | async_with_stmt\n | async_for_stmt\n | async_funcdef\n suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT\n statement ::= stmt_list NEWLINE | compound_stmt\n stmt_list ::= simple_stmt (";" simple_stmt)* [";"]\n\nNote that statements always end in a "NEWLINE" possibly followed by a\n"DEDENT". Also note that optional continuation clauses always begin\nwith a keyword that cannot start a statement, thus there are no\nambiguities (the \'dangling "else"\' problem is solved in Python by\nrequiring nested "if" statements to be indented).\n\nThe formatting of the grammar rules in the following sections places\neach clause on a separate line for clarity.\n\n\nThe "if" statement\n==================\n\nThe "if" statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the "if" statement is executed or evaluated).\nIf all expressions are false, the suite of the "else" clause, if\npresent, is executed.\n\n\nThe "while" statement\n=====================\n\nThe "while" statement is used for repeated execution as long as an\nexpression is true:\n\n while_stmt ::= "while" expression ":" suite\n ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the "else" clause, if present, is executed\nand the loop terminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite. A "continue" statement\nexecuted in the first suite skips the rest of the suite and goes back\nto testing the expression.\n\n\nThe "for" statement\n===================\n\nThe "for" statement is used to iterate over the elements of a sequence\n(such as a string, tuple or list) or other iterable object:\n\n for_stmt ::= "for" target_list "in" expression_list ":" suite\n ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject. An iterator is created for the result of the\n"expression_list". The suite is then executed once for each item\nprovided by the iterator, in the order returned by the iterator. Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments (see *Assignment statements*), and then the suite is\nexecuted. When the items are exhausted (which is immediately when the\nsequence is empty or an iterator raises a "StopIteration" exception),\nthe suite in the "else" clause, if present, is executed, and the loop\nterminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite. A "continue" statement\nexecuted in the first suite skips the rest of the suite and continues\nwith the next item, or with the "else" clause if there is no next\nitem.\n\nThe for-loop makes assignments to the variables(s) in the target list.\nThis overwrites all previous assignments to those variables including\nthose made in the suite of the for-loop:\n\n for i in range(10):\n print(i)\n i = 5 # this will not affect the for-loop\n # because i will be overwritten with the next\n # index in the range\n\nNames in the target list are not deleted when the loop is finished,\nbut if the sequence is empty, they will not have been assigned to at\nall by the loop. Hint: the built-in function "range()" returns an\niterator of integers suitable to emulate the effect of Pascal\'s "for i\n:= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, 2]".\n\nNote: There is a subtlety when the sequence is being modified by the\n loop (this can only occur for mutable sequences, i.e. lists). An\n internal counter is used to keep track of which item is used next,\n and this is incremented on each iteration. When this counter has\n reached the length of the sequence the loop terminates. This means\n that if the suite deletes the current (or a previous) item from the\n sequence, the next item will be skipped (since it gets the index of\n the current item which has already been treated). Likewise, if the\n suite inserts an item in the sequence before the current item, the\n current item will be treated again the next time through the loop.\n This can lead to nasty bugs that can be avoided by making a\n temporary copy using a slice of the whole sequence, e.g.,\n\n for x in a[:]:\n if x < 0: a.remove(x)\n\n\nThe "try" statement\n===================\n\nThe "try" statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n try_stmt ::= try1_stmt | try2_stmt\n try1_stmt ::= "try" ":" suite\n ("except" [expression ["as" identifier]] ":" suite)+\n ["else" ":" suite]\n ["finally" ":" suite]\n try2_stmt ::= "try" ":" suite\n "finally" ":" suite\n\nThe "except" clause(s) specify one or more exception handlers. When no\nexception occurs in the "try" clause, no exception handler is\nexecuted. When an exception occurs in the "try" suite, a search for an\nexception handler is started. This search inspects the except clauses\nin turn until one is found that matches the exception. An expression-\nless except clause, if present, must be last; it matches any\nexception. For an except clause with an expression, that expression\nis evaluated, and the clause matches the exception if the resulting\nobject is "compatible" with the exception. An object is compatible\nwith an exception if it is the class or a base class of the exception\nobject or a tuple containing an item compatible with the exception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire "try" statement raised\nthe exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified after the "as" keyword in that except clause, if\npresent, and the except clause\'s suite is executed. All except\nclauses must have an executable block. When the end of this block is\nreached, execution continues normally after the entire try statement.\n(This means that if two nested handlers exist for the same exception,\nand the exception occurs in the try clause of the inner handler, the\nouter handler will not handle the exception.)\n\nWhen an exception has been assigned using "as target", it is cleared\nat the end of the except clause. This is as if\n\n except E as N:\n foo\n\nwas translated to\n\n except E as N:\n try:\n foo\n finally:\n del N\n\nThis means the exception must be assigned to a different name to be\nable to refer to it after the except clause. Exceptions are cleared\nbecause with the traceback attached to them, they form a reference\ncycle with the stack frame, keeping all locals in that frame alive\nuntil the next garbage collection occurs.\n\nBefore an except clause\'s suite is executed, details about the\nexception are stored in the "sys" module and can be accessed via\n"sys.exc_info()". "sys.exc_info()" returns a 3-tuple consisting of the\nexception class, the exception instance and a traceback object (see\nsection *The standard type hierarchy*) identifying the point in the\nprogram where the exception occurred. "sys.exc_info()" values are\nrestored to their previous values (before the call) when returning\nfrom a function that handled an exception.\n\nThe optional "else" clause is executed if and when control flows off\nthe end of the "try" clause. [2] Exceptions in the "else" clause are\nnot handled by the preceding "except" clauses.\n\nIf "finally" is present, it specifies a \'cleanup\' handler. The "try"\nclause is executed, including any "except" and "else" clauses. If an\nexception occurs in any of the clauses and is not handled, the\nexception is temporarily saved. The "finally" clause is executed. If\nthere is a saved exception it is re-raised at the end of the "finally"\nclause. If the "finally" clause raises another exception, the saved\nexception is set as the context of the new exception. If the "finally"\nclause executes a "return" or "break" statement, the saved exception\nis discarded:\n\n >>> def f():\n ... try:\n ... 1/0\n ... finally:\n ... return 42\n ...\n >>> f()\n 42\n\nThe exception information is not available to the program during\nexecution of the "finally" clause.\n\nWhen a "return", "break" or "continue" statement is executed in the\n"try" suite of a "try"..."finally" statement, the "finally" clause is\nalso executed \'on the way out.\' A "continue" statement is illegal in\nthe "finally" clause. (The reason is a problem with the current\nimplementation --- this restriction may be lifted in the future).\n\nThe return value of a function is determined by the last "return"\nstatement executed. Since the "finally" clause always executes, a\n"return" statement executed in the "finally" clause will always be the\nlast one executed:\n\n >>> def foo():\n ... try:\n ... return \'try\'\n ... finally:\n ... return \'finally\'\n ...\n >>> foo()\n \'finally\'\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the "raise" statement to\ngenerate exceptions may be found in section *The raise statement*.\n\n\nThe "with" statement\n====================\n\nThe "with" statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section *With Statement\nContext Managers*). This allows common "try"..."except"..."finally"\nusage patterns to be encapsulated for convenient reuse.\n\n with_stmt ::= "with" with_item ("," with_item)* ":" suite\n with_item ::= expression ["as" target]\n\nThe execution of the "with" statement with one "item" proceeds as\nfollows:\n\n1. The context expression (the expression given in the "with_item")\n is evaluated to obtain a context manager.\n\n2. The context manager\'s "__exit__()" is loaded for later use.\n\n3. The context manager\'s "__enter__()" method is invoked.\n\n4. If a target was included in the "with" statement, the return\n value from "__enter__()" is assigned to it.\n\n Note: The "with" statement guarantees that if the "__enter__()"\n method returns without an error, then "__exit__()" will always be\n called. Thus, if an error occurs during the assignment to the\n target list, it will be treated the same as an error occurring\n within the suite would be. See step 6 below.\n\n5. The suite is executed.\n\n6. The context manager\'s "__exit__()" method is invoked. If an\n exception caused the suite to be exited, its type, value, and\n traceback are passed as arguments to "__exit__()". Otherwise, three\n "None" arguments are supplied.\n\n If the suite was exited due to an exception, and the return value\n from the "__exit__()" method was false, the exception is reraised.\n If the return value was true, the exception is suppressed, and\n execution continues with the statement following the "with"\n statement.\n\n If the suite was exited for any reason other than an exception, the\n return value from "__exit__()" is ignored, and execution proceeds\n at the normal location for the kind of exit that was taken.\n\nWith more than one item, the context managers are processed as if\nmultiple "with" statements were nested:\n\n with A() as a, B() as b:\n suite\n\nis equivalent to\n\n with A() as a:\n with B() as b:\n suite\n\nChanged in version 3.1: Support for multiple context expressions.\n\nSee also: **PEP 343** - The "with" statement\n\n The specification, background, and examples for the Python "with"\n statement.\n\n\nFunction definitions\n====================\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n decorators ::= decorator+\n decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n dotted_name ::= identifier ("." identifier)*\n parameter_list ::= (defparameter ",")*\n | "*" [parameter] ("," defparameter)* ["," "**" parameter]\n | "**" parameter\n | defparameter [","] )\n parameter ::= identifier [":" expression]\n defparameter ::= parameter ["=" expression]\n funcname ::= identifier\n\nA function definition is an executable statement. Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function). This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition. The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object. Multiple decorators are applied in\nnested fashion. For example, the following code\n\n @f1(arg)\n @f2\n def func(): pass\n\nis equivalent to\n\n def func(): pass\n func = f1(arg)(f2(func))\n\nWhen one or more *parameters* have the form *parameter* "="\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted. If a parameter has a default value, all following\nparameters up until the ""*"" must also have a default value --- this\nis a syntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated from left to right when the\nfunction definition is executed.** This means that the expression is\nevaluated once, when the function is defined, and that the same "pre-\ncomputed" value is used for each call. This is especially important\nto understand when a default parameter is a mutable object, such as a\nlist or a dictionary: if the function modifies the object (e.g. by\nappending an item to a list), the default value is in effect modified.\nThis is generally not what was intended. A way around this is to use\n"None" as the default, and explicitly test for it in the body of the\nfunction, e.g.:\n\n def whats_on_the_telly(penguin=None):\n if penguin is None:\n penguin = []\n penguin.append("property of the zoo")\n return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values. If the form\n""*identifier"" is present, it is initialized to a tuple receiving any\nexcess positional parameters, defaulting to the empty tuple. If the\nform ""**identifier"" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary. Parameters after ""*"" or ""*identifier"" are\nkeyword-only parameters and may only be passed used keyword arguments.\n\nParameters may have annotations of the form "": expression"" following\nthe parameter name. Any parameter may have an annotation even those\nof the form "*identifier" or "**identifier". Functions may have\n"return" annotation of the form ""-> expression"" after the parameter\nlist. These annotations can be any valid Python expression and are\nevaluated when the function definition is executed. Annotations may\nbe evaluated in a different order than they appear in the source code.\nThe presence of annotations does not change the semantics of a\nfunction. The annotation values are available as values of a\ndictionary keyed by the parameters\' names in the "__annotations__"\nattribute of the function object.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions. This uses lambda\nexpressions, described in section *Lambdas*. Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a ""def"" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression. The ""def"" form is actually more powerful since it\nallows the execution of multiple statements and annotations.\n\n**Programmer\'s note:** Functions are first-class objects. A ""def""\nstatement executed inside a function definition defines a local\nfunction that can be returned or passed around. Free variables used\nin the nested function can access the local variables of the function\ncontaining the def. See section *Naming and binding* for details.\n\nSee also: **PEP 3107** - Function Annotations\n\n The original specification for function annotations.\n\n\nClass definitions\n=================\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n classdef ::= [decorators] "class" classname [inheritance] ":" suite\n inheritance ::= "(" [argument_list] ")"\n classname ::= identifier\n\nA class definition is an executable statement. The inheritance list\nusually gives a list of base classes (see *Customizing class creation*\nfor more advanced uses), so each item in the list should evaluate to a\nclass object which allows subclassing. Classes without an inheritance\nlist inherit, by default, from the base class "object"; hence,\n\n class Foo:\n pass\n\nis equivalent to\n\n class Foo(object):\n pass\n\nThe class\'s suite is then executed in a new execution frame (see\n*Naming and binding*), using a newly created local namespace and the\noriginal global namespace. (Usually, the suite contains mostly\nfunction definitions.) When the class\'s suite finishes execution, its\nexecution frame is discarded but its local namespace is saved. [4] A\nclass object is then created using the inheritance list for the base\nclasses and the saved local namespace for the attribute dictionary.\nThe class name is bound to this class object in the original local\nnamespace.\n\nClass creation can be customized heavily using *metaclasses*.\n\nClasses can also be decorated: just like when decorating functions,\n\n @f1(arg)\n @f2\n class Foo: pass\n\nis equivalent to\n\n class Foo: pass\n Foo = f1(arg)(f2(Foo))\n\nThe evaluation rules for the decorator expressions are the same as for\nfunction decorators. The result must be a class object, which is then\nbound to the class name.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass attributes; they are shared by instances. Instance attributes\ncan be set in a method with "self.name = value". Both class and\ninstance attributes are accessible through the notation ""self.name"",\nand an instance attribute hides a class attribute with the same name\nwhen accessed in this way. Class attributes can be used as defaults\nfor instance attributes, but using mutable values there can lead to\nunexpected results. *Descriptors* can be used to create instance\nvariables with different implementation details.\n\nSee also: **PEP 3115** - Metaclasses in Python 3 **PEP 3129** -\n Class Decorators\n\n\nCoroutines\n==========\n\nNew in version 3.5.\n\n\nCoroutine function definition\n-----------------------------\n\n async_funcdef ::= [decorators] "async" "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n\nExecution of Python coroutines can be suspended and resumed at many\npoints (see *coroutine*). In the body of a coroutine, any "await" and\n"async" identifiers become reserved keywords; "await" expressions,\n"async for" and "async with" can only be used in coroutine bodies.\n\nFunctions defined with "async def" syntax are always coroutine\nfunctions, even if they do not contain "await" or "async" keywords.\n\nIt is a "SyntaxError" to use "yield" expressions in "async def"\ncoroutines.\n\nAn example of a coroutine function:\n\n async def func(param1, param2):\n do_stuff()\n await some_coroutine()\n\n\nThe "async for" statement\n-------------------------\n\n async_for_stmt ::= "async" for_stmt\n\nAn *asynchronous iterable* is able to call asynchronous code in its\n*iter* implementation, and *asynchronous iterator* can call\nasynchronous code in its *next* method.\n\nThe "async for" statement allows convenient iteration over\nasynchronous iterators.\n\nThe following code:\n\n async for TARGET in ITER:\n BLOCK\n else:\n BLOCK2\n\nIs semantically equivalent to:\n\n iter = (ITER)\n iter = type(iter).__aiter__(iter)\n running = True\n while running:\n try:\n TARGET = await type(iter).__anext__(iter)\n except StopAsyncIteration:\n running = False\n else:\n BLOCK\n else:\n BLOCK2\n\nSee also "__aiter__()" and "__anext__()" for details.\n\nIt is a "SyntaxError" to use "async for" statement outside of an\n"async def" function.\n\n\nThe "async with" statement\n--------------------------\n\n async_with_stmt ::= "async" with_stmt\n\nAn *asynchronous context manager* is a *context manager* that is able\nto suspend execution in its *enter* and *exit* methods.\n\nThe following code:\n\n async with EXPR as VAR:\n BLOCK\n\nIs semantically equivalent to:\n\n mgr = (EXPR)\n aexit = type(mgr).__aexit__\n aenter = type(mgr).__aenter__(mgr)\n exc = True\n\n VAR = await aenter\n try:\n BLOCK\n except:\n if not await aexit(mgr, *sys.exc_info()):\n raise\n else:\n await aexit(mgr, None, None, None)\n\nSee also "__aenter__()" and "__aexit__()" for details.\n\nIt is a "SyntaxError" to use "async with" statement outside of an\n"async def" function.\n\nSee also: **PEP 492** - Coroutines with async and await syntax\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack unless\n there is a "finally" clause which happens to raise another\n exception. That new exception causes the old one to be lost.\n\n[2] Currently, control "flows off the end" except in the case of\n an exception or the execution of a "return", "continue", or\n "break" statement.\n\n[3] A string literal appearing as the first statement in the\n function body is transformed into the function\'s "__doc__"\n attribute and therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n body is transformed into the namespace\'s "__doc__" item and\n therefore the class\'s *docstring*.\n', + 'context-managers': u'\nWith Statement Context Managers\n*******************************\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a "with" statement. The context manager\nhandles the entry into, and the exit from, the desired runtime context\nfor the execution of the block of code. Context managers are normally\ninvoked using the "with" statement (described in section *The with\nstatement*), but can also be used by directly invoking their methods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n Enter the runtime context related to this object. The "with"\n statement will bind this method\'s return value to the target(s)\n specified in the "as" clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n Exit the runtime context related to this object. The parameters\n describe the exception that caused the context to be exited. If the\n context was exited without an exception, all three arguments will\n be "None".\n\n If an exception is supplied, and the method wishes to suppress the\n exception (i.e., prevent it from being propagated), it should\n return a true value. Otherwise, the exception will be processed\n normally upon exit from this method.\n\n Note that "__exit__()" methods should not reraise the passed-in\n exception; this is the caller\'s responsibility.\n\nSee also: **PEP 343** - The "with" statement\n\n The specification, background, and examples for the Python "with"\n statement.\n', + 'continue': u'\nThe "continue" statement\n************************\n\n continue_stmt ::= "continue"\n\n"continue" may only occur syntactically nested in a "for" or "while"\nloop, but not nested in a function or class definition or "finally"\nclause within that loop. It continues with the next cycle of the\nnearest enclosing loop.\n\nWhen "continue" passes control out of a "try" statement with a\n"finally" clause, that "finally" clause is executed before really\nstarting the next loop cycle.\n', + 'conversions': u'\nArithmetic conversions\n**********************\n\nWhen a description of an arithmetic operator below uses the phrase\n"the numeric arguments are converted to a common type," this means\nthat the operator implementation for built-in types works as follows:\n\n* If either argument is a complex number, the other is converted to\n complex;\n\n* otherwise, if either argument is a floating point number, the\n other is converted to floating point;\n\n* otherwise, both must be integers and no conversion is necessary.\n\nSome additional rules apply for certain operators (e.g., a string as a\nleft argument to the \'%\' operator). Extensions must define their own\nconversion behavior.\n', + 'customization': u'\nBasic customization\n*******************\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. "__new__()" is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of "__new__()" should be the new object instance (usually an\n instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s "__new__()" method using\n "super(currentclass, cls).__new__(cls[, ...])" with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If "__new__()" returns an instance of *cls*, then the new\n instance\'s "__init__()" method will be invoked like\n "__init__(self[, ...])", where *self* is the new instance and the\n remaining arguments are the same as were passed to "__new__()".\n\n If "__new__()" does not return an instance of *cls*, then the new\n instance\'s "__init__()" method will not be invoked.\n\n "__new__()" is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called after the instance has been created (by "__new__()"), but\n before it is returned to the caller. The arguments are those\n passed to the class constructor expression. If a base class has an\n "__init__()" method, the derived class\'s "__init__()" method, if\n any, must explicitly call it to ensure proper initialization of the\n base class part of the instance; for example:\n "BaseClass.__init__(self, [args...])".\n\n Because "__new__()" and "__init__()" work together in constructing\n objects ("__new__()" to create it, and "__init__()" to customise\n it), no non-"None" value may be returned by "__init__()"; doing so\n will cause a "TypeError" to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a "__del__()" method, the\n derived class\'s "__del__()" method, if any, must explicitly call it\n to ensure proper deletion of the base class part of the instance.\n Note that it is possible (though not recommended!) for the\n "__del__()" method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n "__del__()" methods are called for objects that still exist when\n the interpreter exits.\n\n Note: "del x" doesn\'t directly call "x.__del__()" --- the former\n decrements the reference count for "x" by one, and the latter is\n only called when "x"\'s reference count reaches zero. Some common\n situations that may prevent the reference count of an object from\n going to zero include: circular references between objects (e.g.,\n a doubly-linked list or a tree data structure with parent and\n child pointers); a reference to the object on the stack frame of\n a function that caught an exception (the traceback stored in\n "sys.exc_info()[2]" keeps the stack frame alive); or a reference\n to the object on the stack frame that raised an unhandled\n exception in interactive mode (the traceback stored in\n "sys.last_traceback" keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the second can be resolved by freeing the reference to the\n traceback object when it is no longer useful, and the third can\n be resolved by storing "None" in "sys.last_traceback". Circular\n references which are garbage are detected and cleaned up when the\n cyclic garbage collector is enabled (it\'s on by default). Refer\n to the documentation for the "gc" module for more information\n about this topic.\n\n Warning: Due to the precarious circumstances under which\n "__del__()" methods are invoked, exceptions that occur during\n their execution are ignored, and a warning is printed to\n "sys.stderr" instead. Also, when "__del__()" is invoked in\n response to a module being deleted (e.g., when execution of the\n program is done), other globals referenced by the "__del__()"\n method may already have been deleted or in the process of being\n torn down (e.g. the import machinery shutting down). For this\n reason, "__del__()" methods should do the absolute minimum needed\n to maintain external invariants. Starting with version 1.5,\n Python guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the "__del__()" method is called.\n\nobject.__repr__(self)\n\n Called by the "repr()" built-in function to compute the "official"\n string representation of an object. If at all possible, this\n should look like a valid Python expression that could be used to\n recreate an object with the same value (given an appropriate\n environment). If this is not possible, a string of the form\n "<...some useful description...>" should be returned. The return\n value must be a string object. If a class defines "__repr__()" but\n not "__str__()", then "__repr__()" is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by "str(object)" and the built-in functions "format()" and\n "print()" to compute the "informal" or nicely printable string\n representation of an object. The return value must be a *string*\n object.\n\n This method differs from "object.__repr__()" in that there is no\n expectation that "__str__()" return a valid Python expression: a\n more convenient or concise representation can be used.\n\n The default implementation defined by the built-in type "object"\n calls "object.__repr__()".\n\nobject.__bytes__(self)\n\n Called by "bytes()" to compute a byte-string representation of an\n object. This should return a "bytes" object.\n\nobject.__format__(self, format_spec)\n\n Called by the "format()" built-in function (and by extension, the\n "str.format()" method of class "str") to produce a "formatted"\n string representation of an object. The "format_spec" argument is a\n string that contains a description of the formatting options\n desired. The interpretation of the "format_spec" argument is up to\n the type implementing "__format__()", however most classes will\n either delegate formatting to one of the built-in types, or use a\n similar formatting option syntax.\n\n See *Format Specification Mini-Language* for a description of the\n standard formatting syntax.\n\n The return value must be a string object.\n\n Changed in version 3.4: The __format__ method of "object" itself\n raises a "TypeError" if passed any non-empty string.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n These are the so-called "rich comparison" methods. The\n correspondence between operator symbols and method names is as\n follows: "xy" calls\n "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n\n A rich comparison method may return the singleton "NotImplemented"\n if it does not implement the operation for a given pair of\n arguments. By convention, "False" and "True" are returned for a\n successful comparison. However, these methods can return any value,\n so if the comparison operator is used in a Boolean context (e.g.,\n in the condition of an "if" statement), Python will call "bool()"\n on the value to determine if the result is true or false.\n\n By default, "__ne__()" delegates to "__eq__()" and inverts the\n result unless it is "NotImplemented". There are no other implied\n relationships among the comparison operators, for example, the\n truth of "(x.__hash__".\n\n If a class that does not override "__eq__()" wishes to suppress\n hash support, it should include "__hash__ = None" in the class\n definition. A class which defines its own "__hash__()" that\n explicitly raises a "TypeError" would be incorrectly identified as\n hashable by an "isinstance(obj, collections.Hashable)" call.\n\n Note: By default, the "__hash__()" values of str, bytes and\n datetime objects are "salted" with an unpredictable random value.\n Although they remain constant within an individual Python\n process, they are not predictable between repeated invocations of\n Python.This is intended to provide protection against a denial-\n of-service caused by carefully-chosen inputs that exploit the\n worst case performance of a dict insertion, O(n^2) complexity.\n See http://www.ocert.org/advisories/ocert-2011-003.html for\n details.Changing hash values affects the iteration order of\n dicts, sets and other mappings. Python has never made guarantees\n about this ordering (and it typically varies between 32-bit and\n 64-bit builds).See also "PYTHONHASHSEED".\n\n Changed in version 3.3: Hash randomization is enabled by default.\n\nobject.__bool__(self)\n\n Called to implement truth value testing and the built-in operation\n "bool()"; should return "False" or "True". When this method is not\n defined, "__len__()" is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither "__len__()" nor "__bool__()", all its instances are\n considered true.\n', + 'debugger': u'\n"pdb" --- The Python Debugger\n*****************************\n\n**Source code:** Lib/pdb.py\n\n======================================================================\n\nThe module "pdb" defines an interactive source code debugger for\nPython programs. It supports setting (conditional) breakpoints and\nsingle stepping at the source line level, inspection of stack frames,\nsource code listing, and evaluation of arbitrary Python code in the\ncontext of any stack frame. It also supports post-mortem debugging\nand can be called under program control.\n\nThe debugger is extensible -- it is actually defined as the class\n"Pdb". This is currently undocumented but easily understood by reading\nthe source. The extension interface uses the modules "bdb" and "cmd".\n\nThe debugger\'s prompt is "(Pdb)". Typical usage to run a program under\ncontrol of the debugger is:\n\n >>> import pdb\n >>> import mymodule\n >>> pdb.run(\'mymodule.test()\')\n > (0)?()\n (Pdb) continue\n > (1)?()\n (Pdb) continue\n NameError: \'spam\'\n > (1)?()\n (Pdb)\n\nChanged in version 3.3: Tab-completion via the "readline" module is\navailable for commands and command arguments, e.g. the current global\nand local names are offered as arguments of the "p" command.\n\n"pdb.py" can also be invoked as a script to debug other scripts. For\nexample:\n\n python3 -m pdb myscript.py\n\nWhen invoked as a script, pdb will automatically enter post-mortem\ndebugging if the program being debugged exits abnormally. After post-\nmortem debugging (or after normal exit of the program), pdb will\nrestart the program. Automatic restarting preserves pdb\'s state (such\nas breakpoints) and in most cases is more useful than quitting the\ndebugger upon program\'s exit.\n\nNew in version 3.2: "pdb.py" now accepts a "-c" option that executes\ncommands as if given in a ".pdbrc" file, see *Debugger Commands*.\n\nThe typical usage to break into the debugger from a running program is\nto insert\n\n import pdb; pdb.set_trace()\n\nat the location you want to break into the debugger. You can then\nstep through the code following this statement, and continue running\nwithout the debugger using the "continue" command.\n\nThe typical usage to inspect a crashed program is:\n\n >>> import pdb\n >>> import mymodule\n >>> mymodule.test()\n Traceback (most recent call last):\n File "", line 1, in ?\n File "./mymodule.py", line 4, in test\n test2()\n File "./mymodule.py", line 3, in test2\n print(spam)\n NameError: spam\n >>> pdb.pm()\n > ./mymodule.py(3)test2()\n -> print(spam)\n (Pdb)\n\nThe module defines the following functions; each enters the debugger\nin a slightly different way:\n\npdb.run(statement, globals=None, locals=None)\n\n Execute the *statement* (given as a string or a code object) under\n debugger control. The debugger prompt appears before any code is\n executed; you can set breakpoints and type "continue", or you can\n step through the statement using "step" or "next" (all these\n commands are explained below). The optional *globals* and *locals*\n arguments specify the environment in which the code is executed; by\n default the dictionary of the module "__main__" is used. (See the\n explanation of the built-in "exec()" or "eval()" functions.)\n\npdb.runeval(expression, globals=None, locals=None)\n\n Evaluate the *expression* (given as a string or a code object)\n under debugger control. When "runeval()" returns, it returns the\n value of the expression. Otherwise this function is similar to\n "run()".\n\npdb.runcall(function, *args, **kwds)\n\n Call the *function* (a function or method object, not a string)\n with the given arguments. When "runcall()" returns, it returns\n whatever the function call returned. The debugger prompt appears\n as soon as the function is entered.\n\npdb.set_trace()\n\n Enter the debugger at the calling stack frame. This is useful to\n hard-code a breakpoint at a given point in a program, even if the\n code is not otherwise being debugged (e.g. when an assertion\n fails).\n\npdb.post_mortem(traceback=None)\n\n Enter post-mortem debugging of the given *traceback* object. If no\n *traceback* is given, it uses the one of the exception that is\n currently being handled (an exception must be being handled if the\n default is to be used).\n\npdb.pm()\n\n Enter post-mortem debugging of the traceback found in\n "sys.last_traceback".\n\nThe "run*" functions and "set_trace()" are aliases for instantiating\nthe "Pdb" class and calling the method of the same name. If you want\nto access further features, you have to do this yourself:\n\nclass class pdb.Pdb(completekey=\'tab\', stdin=None, stdout=None, skip=None, nosigint=False)\n\n "Pdb" is the debugger class.\n\n The *completekey*, *stdin* and *stdout* arguments are passed to the\n underlying "cmd.Cmd" class; see the description there.\n\n The *skip* argument, if given, must be an iterable of glob-style\n module name patterns. The debugger will not step into frames that\n originate in a module that matches one of these patterns. [1]\n\n By default, Pdb sets a handler for the SIGINT signal (which is sent\n when the user presses "Ctrl-C" on the console) when you give a\n "continue" command. This allows you to break into the debugger\n again by pressing "Ctrl-C". If you want Pdb not to touch the\n SIGINT handler, set *nosigint* tot true.\n\n Example call to enable tracing with *skip*:\n\n import pdb; pdb.Pdb(skip=[\'django.*\']).set_trace()\n\n New in version 3.1: The *skip* argument.\n\n New in version 3.2: The *nosigint* argument. Previously, a SIGINT\n handler was never set by Pdb.\n\n run(statement, globals=None, locals=None)\n runeval(expression, globals=None, locals=None)\n runcall(function, *args, **kwds)\n set_trace()\n\n See the documentation for the functions explained above.\n\n\nDebugger Commands\n=================\n\nThe commands recognized by the debugger are listed below. Most\ncommands can be abbreviated to one or two letters as indicated; e.g.\n"h(elp)" means that either "h" or "help" can be used to enter the help\ncommand (but not "he" or "hel", nor "H" or "Help" or "HELP").\nArguments to commands must be separated by whitespace (spaces or\ntabs). Optional arguments are enclosed in square brackets ("[]") in\nthe command syntax; the square brackets must not be typed.\nAlternatives in the command syntax are separated by a vertical bar\n("|").\n\nEntering a blank line repeats the last command entered. Exception: if\nthe last command was a "list" command, the next 11 lines are listed.\n\nCommands that the debugger doesn\'t recognize are assumed to be Python\nstatements and are executed in the context of the program being\ndebugged. Python statements can also be prefixed with an exclamation\npoint ("!"). This is a powerful way to inspect the program being\ndebugged; it is even possible to change a variable or call a function.\nWhen an exception occurs in such a statement, the exception name is\nprinted but the debugger\'s state is not changed.\n\nThe debugger supports *aliases*. Aliases can have parameters which\nallows one a certain level of adaptability to the context under\nexamination.\n\nMultiple commands may be entered on a single line, separated by ";;".\n(A single ";" is not used as it is the separator for multiple commands\nin a line that is passed to the Python parser.) No intelligence is\napplied to separating the commands; the input is split at the first\n";;" pair, even if it is in the middle of a quoted string.\n\nIf a file ".pdbrc" exists in the user\'s home directory or in the\ncurrent directory, it is read in and executed as if it had been typed\nat the debugger prompt. This is particularly useful for aliases. If\nboth files exist, the one in the home directory is read first and\naliases defined there can be overridden by the local file.\n\nChanged in version 3.2: ".pdbrc" can now contain commands that\ncontinue debugging, such as "continue" or "next". Previously, these\ncommands had no effect.\n\nh(elp) [command]\n\n Without argument, print the list of available commands. With a\n *command* as argument, print help about that command. "help pdb"\n displays the full documentation (the docstring of the "pdb"\n module). Since the *command* argument must be an identifier, "help\n exec" must be entered to get help on the "!" command.\n\nw(here)\n\n Print a stack trace, with the most recent frame at the bottom. An\n arrow indicates the current frame, which determines the context of\n most commands.\n\nd(own) [count]\n\n Move the current frame *count* (default one) levels down in the\n stack trace (to a newer frame).\n\nu(p) [count]\n\n Move the current frame *count* (default one) levels up in the stack\n trace (to an older frame).\n\nb(reak) [([filename:]lineno | function) [, condition]]\n\n With a *lineno* argument, set a break there in the current file.\n With a *function* argument, set a break at the first executable\n statement within that function. The line number may be prefixed\n with a filename and a colon, to specify a breakpoint in another\n file (probably one that hasn\'t been loaded yet). The file is\n searched on "sys.path". Note that each breakpoint is assigned a\n number to which all the other breakpoint commands refer.\n\n If a second argument is present, it is an expression which must\n evaluate to true before the breakpoint is honored.\n\n Without argument, list all breaks, including for each breakpoint,\n the number of times that breakpoint has been hit, the current\n ignore count, and the associated condition if any.\n\ntbreak [([filename:]lineno | function) [, condition]]\n\n Temporary breakpoint, which is removed automatically when it is\n first hit. The arguments are the same as for "break".\n\ncl(ear) [filename:lineno | bpnumber [bpnumber ...]]\n\n With a *filename:lineno* argument, clear all the breakpoints at\n this line. With a space separated list of breakpoint numbers, clear\n those breakpoints. Without argument, clear all breaks (but first\n ask confirmation).\n\ndisable [bpnumber [bpnumber ...]]\n\n Disable the breakpoints given as a space separated list of\n breakpoint numbers. Disabling a breakpoint means it cannot cause\n the program to stop execution, but unlike clearing a breakpoint, it\n remains in the list of breakpoints and can be (re-)enabled.\n\nenable [bpnumber [bpnumber ...]]\n\n Enable the breakpoints specified.\n\nignore bpnumber [count]\n\n Set the ignore count for the given breakpoint number. If count is\n omitted, the ignore count is set to 0. A breakpoint becomes active\n when the ignore count is zero. When non-zero, the count is\n decremented each time the breakpoint is reached and the breakpoint\n is not disabled and any associated condition evaluates to true.\n\ncondition bpnumber [condition]\n\n Set a new *condition* for the breakpoint, an expression which must\n evaluate to true before the breakpoint is honored. If *condition*\n is absent, any existing condition is removed; i.e., the breakpoint\n is made unconditional.\n\ncommands [bpnumber]\n\n Specify a list of commands for breakpoint number *bpnumber*. The\n commands themselves appear on the following lines. Type a line\n containing just "end" to terminate the commands. An example:\n\n (Pdb) commands 1\n (com) p some_variable\n (com) end\n (Pdb)\n\n To remove all commands from a breakpoint, type commands and follow\n it immediately with "end"; that is, give no commands.\n\n With no *bpnumber* argument, commands refers to the last breakpoint\n set.\n\n You can use breakpoint commands to start your program up again.\n Simply use the continue command, or step, or any other command that\n resumes execution.\n\n Specifying any command resuming execution (currently continue,\n step, next, return, jump, quit and their abbreviations) terminates\n the command list (as if that command was immediately followed by\n end). This is because any time you resume execution (even with a\n simple next or step), you may encounter another breakpoint--which\n could have its own command list, leading to ambiguities about which\n list to execute.\n\n If you use the \'silent\' command in the command list, the usual\n message about stopping at a breakpoint is not printed. This may be\n desirable for breakpoints that are to print a specific message and\n then continue. If none of the other commands print anything, you\n see no sign that the breakpoint was reached.\n\ns(tep)\n\n Execute the current line, stop at the first possible occasion\n (either in a function that is called or on the next line in the\n current function).\n\nn(ext)\n\n Continue execution until the next line in the current function is\n reached or it returns. (The difference between "next" and "step"\n is that "step" stops inside a called function, while "next"\n executes called functions at (nearly) full speed, only stopping at\n the next line in the current function.)\n\nunt(il) [lineno]\n\n Without argument, continue execution until the line with a number\n greater than the current one is reached.\n\n With a line number, continue execution until a line with a number\n greater or equal to that is reached. In both cases, also stop when\n the current frame returns.\n\n Changed in version 3.2: Allow giving an explicit line number.\n\nr(eturn)\n\n Continue execution until the current function returns.\n\nc(ont(inue))\n\n Continue execution, only stop when a breakpoint is encountered.\n\nj(ump) lineno\n\n Set the next line that will be executed. Only available in the\n bottom-most frame. This lets you jump back and execute code again,\n or jump forward to skip code that you don\'t want to run.\n\n It should be noted that not all jumps are allowed -- for instance\n it is not possible to jump into the middle of a "for" loop or out\n of a "finally" clause.\n\nl(ist) [first[, last]]\n\n List source code for the current file. Without arguments, list 11\n lines around the current line or continue the previous listing.\n With "." as argument, list 11 lines around the current line. With\n one argument, list 11 lines around at that line. With two\n arguments, list the given range; if the second argument is less\n than the first, it is interpreted as a count.\n\n The current line in the current frame is indicated by "->". If an\n exception is being debugged, the line where the exception was\n originally raised or propagated is indicated by ">>", if it differs\n from the current line.\n\n New in version 3.2: The ">>" marker.\n\nll | longlist\n\n List all source code for the current function or frame.\n Interesting lines are marked as for "list".\n\n New in version 3.2.\n\na(rgs)\n\n Print the argument list of the current function.\n\np expression\n\n Evaluate the *expression* in the current context and print its\n value.\n\n Note: "print()" can also be used, but is not a debugger command\n --- this executes the Python "print()" function.\n\npp expression\n\n Like the "p" command, except the value of the expression is pretty-\n printed using the "pprint" module.\n\nwhatis expression\n\n Print the type of the *expression*.\n\nsource expression\n\n Try to get source code for the given object and display it.\n\n New in version 3.2.\n\ndisplay [expression]\n\n Display the value of the expression if it changed, each time\n execution stops in the current frame.\n\n Without expression, list all display expressions for the current\n frame.\n\n New in version 3.2.\n\nundisplay [expression]\n\n Do not display the expression any more in the current frame.\n Without expression, clear all display expressions for the current\n frame.\n\n New in version 3.2.\n\ninteract\n\n Start an interative interpreter (using the "code" module) whose\n global namespace contains all the (global and local) names found in\n the current scope.\n\n New in version 3.2.\n\nalias [name [command]]\n\n Create an alias called *name* that executes *command*. The command\n must *not* be enclosed in quotes. Replaceable parameters can be\n indicated by "%1", "%2", and so on, while "%*" is replaced by all\n the parameters. If no command is given, the current alias for\n *name* is shown. If no arguments are given, all aliases are listed.\n\n Aliases may be nested and can contain anything that can be legally\n typed at the pdb prompt. Note that internal pdb commands *can* be\n overridden by aliases. Such a command is then hidden until the\n alias is removed. Aliasing is recursively applied to the first\n word of the command line; all other words in the line are left\n alone.\n\n As an example, here are two useful aliases (especially when placed\n in the ".pdbrc" file):\n\n # Print instance variables (usage "pi classInst")\n alias pi for k in %1.__dict__.keys(): print("%1.",k,"=",%1.__dict__[k])\n # Print instance variables in self\n alias ps pi self\n\nunalias name\n\n Delete the specified alias.\n\n! statement\n\n Execute the (one-line) *statement* in the context of the current\n stack frame. The exclamation point can be omitted unless the first\n word of the statement resembles a debugger command. To set a\n global variable, you can prefix the assignment command with a\n "global" statement on the same line, e.g.:\n\n (Pdb) global list_options; list_options = [\'-l\']\n (Pdb)\n\nrun [args ...]\nrestart [args ...]\n\n Restart the debugged Python program. If an argument is supplied,\n it is split with "shlex" and the result is used as the new\n "sys.argv". History, breakpoints, actions and debugger options are\n preserved. "restart" is an alias for "run".\n\nq(uit)\n\n Quit from the debugger. The program being executed is aborted.\n\n-[ Footnotes ]-\n\n[1] Whether a frame is considered to originate in a certain module\n is determined by the "__name__" in the frame globals.\n', + 'del': u'\nThe "del" statement\n*******************\n\n del_stmt ::= "del" target_list\n\nDeletion is recursively defined very similar to the way assignment is\ndefined. Rather than spelling it out in full details, here are some\nhints.\n\nDeletion of a target list recursively deletes each target, from left\nto right.\n\nDeletion of a name removes the binding of that name from the local or\nglobal namespace, depending on whether the name occurs in a "global"\nstatement in the same code block. If the name is unbound, a\n"NameError" exception will be raised.\n\nDeletion of attribute references, subscriptions and slicings is passed\nto the primary object involved; deletion of a slicing is in general\nequivalent to assignment of an empty slice of the right type (but even\nthis is determined by the sliced object).\n\nChanged in version 3.2: Previously it was illegal to delete a name\nfrom the local namespace if it occurs as a free variable in a nested\nblock.\n', + 'dict': u'\nDictionary displays\n*******************\n\nA dictionary display is a possibly empty series of key/datum pairs\nenclosed in curly braces:\n\n dict_display ::= "{" [key_datum_list | dict_comprehension] "}"\n key_datum_list ::= key_datum ("," key_datum)* [","]\n key_datum ::= expression ":" expression | "**" or_expr\n dict_comprehension ::= expression ":" expression comp_for\n\nA dictionary display yields a new dictionary object.\n\nIf a comma-separated sequence of key/datum pairs is given, they are\nevaluated from left to right to define the entries of the dictionary:\neach key object is used as a key into the dictionary to store the\ncorresponding datum. This means that you can specify the same key\nmultiple times in the key/datum list, and the final dictionary\'s value\nfor that key will be the last one given.\n\nA double asterisk "**" denotes *dictionary unpacking*. Its operand\nmust be a *mapping*. Each mapping item is added to the new\ndictionary. Later values replace values already set by earlier\nkey/datum pairs and earlier dictionary unpackings.\n\nNew in version 3.5: Unpacking into dictionary displays, originally\nproposed by **PEP 448**.\n\nA dict comprehension, in contrast to list and set comprehensions,\nneeds two expressions separated with a colon followed by the usual\n"for" and "if" clauses. When the comprehension is run, the resulting\nkey and value elements are inserted in the new dictionary in the order\nthey are produced.\n\nRestrictions on the types of the key values are listed earlier in\nsection *The standard type hierarchy*. (To summarize, the key type\nshould be *hashable*, which excludes all mutable objects.) Clashes\nbetween duplicate keys are not detected; the last datum (textually\nrightmost in the display) stored for a given key value prevails.\n', + 'dynamic-features': u'\nInteraction with dynamic features\n*********************************\n\nName resolution of free variables occurs at runtime, not at compile\ntime. This means that the following code will print 42:\n\n i = 10\n def f():\n print(i)\n i = 42\n f()\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nThe "eval()" and "exec()" functions do not have access to the full\nenvironment for resolving names. Names may be resolved in the local\nand global namespaces of the caller. Free variables are not resolved\nin the nearest enclosing namespace, but in the global namespace. [1]\nThe "exec()" and "eval()" functions have optional arguments to\noverride the global and local namespace. If only one namespace is\nspecified, it is used for both.\n', + 'else': u'\nThe "if" statement\n******************\n\nThe "if" statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the "if" statement is executed or evaluated).\nIf all expressions are false, the suite of the "else" clause, if\npresent, is executed.\n', + 'exceptions': u'\nExceptions\n**********\n\nExceptions are a means of breaking out of the normal flow of control\nof a code block in order to handle errors or other exceptional\nconditions. An exception is *raised* at the point where the error is\ndetected; it may be *handled* by the surrounding code block or by any\ncode block that directly or indirectly invoked the code block where\nthe error occurred.\n\nThe Python interpreter raises an exception when it detects a run-time\nerror (such as division by zero). A Python program can also\nexplicitly raise an exception with the "raise" statement. Exception\nhandlers are specified with the "try" ... "except" statement. The\n"finally" clause of such a statement can be used to specify cleanup\ncode which does not handle the exception, but is executed whether an\nexception occurred or not in the preceding code.\n\nPython uses the "termination" model of error handling: an exception\nhandler can find out what happened and continue execution at an outer\nlevel, but it cannot repair the cause of the error and retry the\nfailing operation (except by re-entering the offending piece of code\nfrom the top).\n\nWhen an exception is not handled at all, the interpreter terminates\nexecution of the program, or returns to its interactive main loop. In\neither case, it prints a stack backtrace, except when the exception is\n"SystemExit".\n\nExceptions are identified by class instances. The "except" clause is\nselected depending on the class of the instance: it must reference the\nclass of the instance or a base class thereof. The instance can be\nreceived by the handler and can carry additional information about the\nexceptional condition.\n\nNote: Exception messages are not part of the Python API. Their\n contents may change from one version of Python to the next without\n warning and should not be relied on by code which will run under\n multiple versions of the interpreter.\n\nSee also the description of the "try" statement in section *The try\nstatement* and "raise" statement in section *The raise statement*.\n\n-[ Footnotes ]-\n\n[1] This limitation occurs because the code that is executed by\n these operations is not available at the time the module is\n compiled.\n', + 'execmodel': u'\nExecution model\n***************\n\n\nStructure of a program\n======================\n\nA Python program is constructed from code blocks. A *block* is a piece\nof Python program text that is executed as a unit. The following are\nblocks: a module, a function body, and a class definition. Each\ncommand typed interactively is a block. A script file (a file given\nas standard input to the interpreter or specified as a command line\nargument to the interpreter) is a code block. A script command (a\ncommand specified on the interpreter command line with the \'**-c**\'\noption) is a code block. The string argument passed to the built-in\nfunctions "eval()" and "exec()" is a code block.\n\nA code block is executed in an *execution frame*. A frame contains\nsome administrative information (used for debugging) and determines\nwhere and how execution continues after the code block\'s execution has\ncompleted.\n\n\nNaming and binding\n==================\n\n\nBinding of names\n----------------\n\n*Names* refer to objects. Names are introduced by name binding\noperations.\n\nThe following constructs bind names: formal parameters to functions,\n"import" statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, "for" loop header, or after\n"as" in a "with" statement or "except" clause. The "import" statement\nof the form "from ... import *" binds all names defined in the\nimported module, except those beginning with an underscore. This form\nmay only be used at the module level.\n\nA target occurring in a "del" statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name).\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name is bound in a block, it is a local variable of that block,\nunless declared as "nonlocal" or "global". If a name is bound at the\nmodule level, it is a global variable. (The variables of the module\ncode block are local and global.) If a variable is used in a code\nblock but not defined there, it is a *free variable*.\n\nEach occurrence of a name in the program text refers to the *binding*\nof that name established by the following name resolution rules.\n\n\nResolution of names\n-------------------\n\nA *scope* defines the visibility of a name within a block. If a local\nvariable is defined in a block, its scope includes that block. If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name.\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope. The set of all such scopes visible to a code block\nis called the block\'s *environment*.\n\nWhen a name is not found at all, a "NameError" exception is raised. If\nthe current scope is a function scope, and the name refers to a local\nvariable that has not yet been bound to a value at the point where the\nname is used, an "UnboundLocalError" exception is raised.\n"UnboundLocalError" is a subclass of "NameError".\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block. This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle. Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block. The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the "global" statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtins namespace, the namespace\nof the module "builtins". The global namespace is searched first. If\nthe name is not found there, the builtins namespace is searched. The\n"global" statement must precede all uses of the name.\n\nThe "global" statement has the same scope as a name binding operation\nin the same block. If the nearest enclosing scope for a free variable\ncontains a global statement, the free variable is treated as a global.\n\nThe "nonlocal" statement causes corresponding names to refer to\npreviously bound variables in the nearest enclosing function scope.\n"SyntaxError" is raised at compile time if the given name does not\nexist in any enclosing function scope.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported. The main module for a script is always called\n"__main__".\n\nClass definition blocks and arguments to "exec()" and "eval()" are\nspecial in the context of name resolution. A class definition is an\nexecutable statement that may use and define names. These references\nfollow the normal rules for name resolution with an exception that\nunbound local variables are looked up in the global namespace. The\nnamespace of the class definition becomes the attribute dictionary of\nthe class. The scope of names defined in a class block is limited to\nthe class block; it does not extend to the code blocks of methods --\nthis includes comprehensions and generator expressions since they are\nimplemented using a function scope. This means that the following\nwill fail:\n\n class A:\n a = 42\n b = list(a + i for i in range(10))\n\n\nBuiltins and restricted execution\n---------------------------------\n\nThe builtins namespace associated with the execution of a code block\nis actually found by looking up the name "__builtins__" in its global\nnamespace; this should be a dictionary or a module (in the latter case\nthe module\'s dictionary is used). By default, when in the "__main__"\nmodule, "__builtins__" is the built-in module "builtins"; when in any\nother module, "__builtins__" is an alias for the dictionary of the\n"builtins" module itself. "__builtins__" can be set to a user-created\ndictionary to create a weak form of restricted execution.\n\n**CPython implementation detail:** Users should not touch\n"__builtins__"; it is strictly an implementation detail. Users\nwanting to override values in the builtins namespace should "import"\nthe "builtins" module and modify its attributes appropriately.\n\n\nInteraction with dynamic features\n---------------------------------\n\nName resolution of free variables occurs at runtime, not at compile\ntime. This means that the following code will print 42:\n\n i = 10\n def f():\n print(i)\n i = 42\n f()\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nThe "eval()" and "exec()" functions do not have access to the full\nenvironment for resolving names. Names may be resolved in the local\nand global namespaces of the caller. Free variables are not resolved\nin the nearest enclosing namespace, but in the global namespace. [1]\nThe "exec()" and "eval()" functions have optional arguments to\noverride the global and local namespace. If only one namespace is\nspecified, it is used for both.\n\n\nExceptions\n==========\n\nExceptions are a means of breaking out of the normal flow of control\nof a code block in order to handle errors or other exceptional\nconditions. An exception is *raised* at the point where the error is\ndetected; it may be *handled* by the surrounding code block or by any\ncode block that directly or indirectly invoked the code block where\nthe error occurred.\n\nThe Python interpreter raises an exception when it detects a run-time\nerror (such as division by zero). A Python program can also\nexplicitly raise an exception with the "raise" statement. Exception\nhandlers are specified with the "try" ... "except" statement. The\n"finally" clause of such a statement can be used to specify cleanup\ncode which does not handle the exception, but is executed whether an\nexception occurred or not in the preceding code.\n\nPython uses the "termination" model of error handling: an exception\nhandler can find out what happened and continue execution at an outer\nlevel, but it cannot repair the cause of the error and retry the\nfailing operation (except by re-entering the offending piece of code\nfrom the top).\n\nWhen an exception is not handled at all, the interpreter terminates\nexecution of the program, or returns to its interactive main loop. In\neither case, it prints a stack backtrace, except when the exception is\n"SystemExit".\n\nExceptions are identified by class instances. The "except" clause is\nselected depending on the class of the instance: it must reference the\nclass of the instance or a base class thereof. The instance can be\nreceived by the handler and can carry additional information about the\nexceptional condition.\n\nNote: Exception messages are not part of the Python API. Their\n contents may change from one version of Python to the next without\n warning and should not be relied on by code which will run under\n multiple versions of the interpreter.\n\nSee also the description of the "try" statement in section *The try\nstatement* and "raise" statement in section *The raise statement*.\n\n-[ Footnotes ]-\n\n[1] This limitation occurs because the code that is executed by\n these operations is not available at the time the module is\n compiled.\n', + 'exprlists': u'\nExpression lists\n****************\n\n expression_list ::= expression ( "," expression )* [","]\n starred_list ::= starred_item ( "," starred_item )* [","]\n starred_expression ::= expression | ( starred_item "," )* [starred_item]\n starred_item ::= expression | "*" or_expr\n\nExcept when part of a list or set display, an expression list\ncontaining at least one comma yields a tuple. The length of the tuple\nis the number of expressions in the list. The expressions are\nevaluated from left to right.\n\nAn asterisk "*" denotes *iterable unpacking*. Its operand must be an\n*iterable*. The iterable is expanded into a sequence of items, which\nare included in the new tuple, list, or set, at the site of the\nunpacking.\n\nNew in version 3.5: Iterable unpacking in expression lists, originally\nproposed by **PEP 448**.\n\nThe trailing comma is required only to create a single tuple (a.k.a. a\n*singleton*); it is optional in all other cases. A single expression\nwithout a trailing comma doesn\'t create a tuple, but rather yields the\nvalue of that expression. (To create an empty tuple, use an empty pair\nof parentheses: "()".)\n', + 'floating': u'\nFloating point literals\n***********************\n\nFloating point literals are described by the following lexical\ndefinitions:\n\n floatnumber ::= pointfloat | exponentfloat\n pointfloat ::= [intpart] fraction | intpart "."\n exponentfloat ::= (intpart | pointfloat) exponent\n intpart ::= digit+\n fraction ::= "." digit+\n exponent ::= ("e" | "E") ["+" | "-"] digit+\n\nNote that the integer and exponent parts are always interpreted using\nradix 10. For example, "077e010" is legal, and denotes the same number\nas "77e10". The allowed range of floating point literals is\nimplementation-dependent. Some examples of floating point literals:\n\n 3.14 10. .001 1e100 3.14e-10 0e0\n\nNote that numeric literals do not include a sign; a phrase like "-1"\nis actually an expression composed of the unary operator "-" and the\nliteral "1".\n', + 'for': u'\nThe "for" statement\n*******************\n\nThe "for" statement is used to iterate over the elements of a sequence\n(such as a string, tuple or list) or other iterable object:\n\n for_stmt ::= "for" target_list "in" expression_list ":" suite\n ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject. An iterator is created for the result of the\n"expression_list". The suite is then executed once for each item\nprovided by the iterator, in the order returned by the iterator. Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments (see *Assignment statements*), and then the suite is\nexecuted. When the items are exhausted (which is immediately when the\nsequence is empty or an iterator raises a "StopIteration" exception),\nthe suite in the "else" clause, if present, is executed, and the loop\nterminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite. A "continue" statement\nexecuted in the first suite skips the rest of the suite and continues\nwith the next item, or with the "else" clause if there is no next\nitem.\n\nThe for-loop makes assignments to the variables(s) in the target list.\nThis overwrites all previous assignments to those variables including\nthose made in the suite of the for-loop:\n\n for i in range(10):\n print(i)\n i = 5 # this will not affect the for-loop\n # because i will be overwritten with the next\n # index in the range\n\nNames in the target list are not deleted when the loop is finished,\nbut if the sequence is empty, they will not have been assigned to at\nall by the loop. Hint: the built-in function "range()" returns an\niterator of integers suitable to emulate the effect of Pascal\'s "for i\n:= a to b do"; e.g., "list(range(3))" returns the list "[0, 1, 2]".\n\nNote: There is a subtlety when the sequence is being modified by the\n loop (this can only occur for mutable sequences, i.e. lists). An\n internal counter is used to keep track of which item is used next,\n and this is incremented on each iteration. When this counter has\n reached the length of the sequence the loop terminates. This means\n that if the suite deletes the current (or a previous) item from the\n sequence, the next item will be skipped (since it gets the index of\n the current item which has already been treated). Likewise, if the\n suite inserts an item in the sequence before the current item, the\n current item will be treated again the next time through the loop.\n This can lead to nasty bugs that can be avoided by making a\n temporary copy using a slice of the whole sequence, e.g.,\n\n for x in a[:]:\n if x < 0: a.remove(x)\n', + 'formatstrings': u'\nFormat String Syntax\n********************\n\nThe "str.format()" method and the "Formatter" class share the same\nsyntax for format strings (although in the case of "Formatter",\nsubclasses can define their own format string syntax).\n\nFormat strings contain "replacement fields" surrounded by curly braces\n"{}". Anything that is not contained in braces is considered literal\ntext, which is copied unchanged to the output. If you need to include\na brace character in the literal text, it can be escaped by doubling:\n"{{" and "}}".\n\nThe grammar for a replacement field is as follows:\n\n replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"\n field_name ::= arg_name ("." attribute_name | "[" element_index "]")*\n arg_name ::= [identifier | integer]\n attribute_name ::= identifier\n element_index ::= integer | index_string\n index_string ::= +\n conversion ::= "r" | "s" | "a"\n format_spec ::= \n\nIn less formal terms, the replacement field can start with a\n*field_name* that specifies the object whose value is to be formatted\nand inserted into the output instead of the replacement field. The\n*field_name* is optionally followed by a *conversion* field, which is\npreceded by an exclamation point "\'!\'", and a *format_spec*, which is\npreceded by a colon "\':\'". These specify a non-default format for the\nreplacement value.\n\nSee also the *Format Specification Mini-Language* section.\n\nThe *field_name* itself begins with an *arg_name* that is either a\nnumber or a keyword. If it\'s a number, it refers to a positional\nargument, and if it\'s a keyword, it refers to a named keyword\nargument. If the numerical arg_names in a format string are 0, 1, 2,\n... in sequence, they can all be omitted (not just some) and the\nnumbers 0, 1, 2, ... will be automatically inserted in that order.\nBecause *arg_name* is not quote-delimited, it is not possible to\nspecify arbitrary dictionary keys (e.g., the strings "\'10\'" or\n"\':-]\'") within a format string. The *arg_name* can be followed by any\nnumber of index or attribute expressions. An expression of the form\n"\'.name\'" selects the named attribute using "getattr()", while an\nexpression of the form "\'[index]\'" does an index lookup using\n"__getitem__()".\n\nChanged in version 3.1: The positional argument specifiers can be\nomitted, so "\'{} {}\'" is equivalent to "\'{0} {1}\'".\n\nSome simple format string examples:\n\n "First, thou shalt count to {0}" # References first positional argument\n "Bring me a {}" # Implicitly references the first positional argument\n "From {} to {}" # Same as "From {0} to {1}"\n "My quest is {name}" # References keyword argument \'name\'\n "Weight in tons {0.weight}" # \'weight\' attribute of first positional arg\n "Units destroyed: {players[0]}" # First element of keyword argument \'players\'.\n\nThe *conversion* field causes a type coercion before formatting.\nNormally, the job of formatting a value is done by the "__format__()"\nmethod of the value itself. However, in some cases it is desirable to\nforce a type to be formatted as a string, overriding its own\ndefinition of formatting. By converting the value to a string before\ncalling "__format__()", the normal formatting logic is bypassed.\n\nThree conversion flags are currently supported: "\'!s\'" which calls\n"str()" on the value, "\'!r\'" which calls "repr()" and "\'!a\'" which\ncalls "ascii()".\n\nSome examples:\n\n "Harold\'s a clever {0!s}" # Calls str() on the argument first\n "Bring out the holy {name!r}" # Calls repr() on the argument first\n "More {!a}" # Calls ascii() on the argument first\n\nThe *format_spec* field contains a specification of how the value\nshould be presented, including such details as field width, alignment,\npadding, decimal precision and so on. Each value type can define its\nown "formatting mini-language" or interpretation of the *format_spec*.\n\nMost built-in types support a common formatting mini-language, which\nis described in the next section.\n\nA *format_spec* field can also include nested replacement fields\nwithin it. These nested replacement fields may contain a field name,\nconversion flag and format specification, but deeper nesting is not\nallowed. The replacement fields within the format_spec are\nsubstituted before the *format_spec* string is interpreted. This\nallows the formatting of a value to be dynamically specified.\n\nSee the *Format examples* section for some examples.\n\n\nFormat Specification Mini-Language\n==================================\n\n"Format specifications" are used within replacement fields contained\nwithin a format string to define how individual values are presented\n(see *Format String Syntax*). They can also be passed directly to the\nbuilt-in "format()" function. Each formattable type may define how\nthe format specification is to be interpreted.\n\nMost built-in types implement the following options for format\nspecifications, although some of the formatting options are only\nsupported by the numeric types.\n\nA general convention is that an empty format string ("""") produces\nthe same result as if you had called "str()" on the value. A non-empty\nformat string typically modifies the result.\n\nThe general form of a *standard format specifier* is:\n\n format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]\n fill ::= \n align ::= "<" | ">" | "=" | "^"\n sign ::= "+" | "-" | " "\n width ::= integer\n precision ::= integer\n type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n\nIf a valid *align* value is specified, it can be preceded by a *fill*\ncharacter that can be any character and defaults to a space if\nomitted. It is not possible to use a literal curly brace (""{"" or\n""}"") as the *fill* character when using the "str.format()" method.\nHowever, it is possible to insert a curly brace with a nested\nreplacement field. This limitation doesn\'t affect the "format()"\nfunction.\n\nThe meaning of the various alignment options is as follows:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | "\'<\'" | Forces the field to be left-aligned within the available |\n | | space (this is the default for most objects). |\n +-----------+------------------------------------------------------------+\n | "\'>\'" | Forces the field to be right-aligned within the available |\n | | space (this is the default for numbers). |\n +-----------+------------------------------------------------------------+\n | "\'=\'" | Forces the padding to be placed after the sign (if any) |\n | | but before the digits. This is used for printing fields |\n | | in the form \'+000000120\'. This alignment option is only |\n | | valid for numeric types. It becomes the default when \'0\' |\n | | immediately precedes the field width. |\n +-----------+------------------------------------------------------------+\n | "\'^\'" | Forces the field to be centered within the available |\n | | space. |\n +-----------+------------------------------------------------------------+\n\nNote that unless a minimum field width is defined, the field width\nwill always be the same size as the data to fill it, so that the\nalignment option has no meaning in this case.\n\nThe *sign* option is only valid for number types, and can be one of\nthe following:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | "\'+\'" | indicates that a sign should be used for both positive as |\n | | well as negative numbers. |\n +-----------+------------------------------------------------------------+\n | "\'-\'" | indicates that a sign should be used only for negative |\n | | numbers (this is the default behavior). |\n +-----------+------------------------------------------------------------+\n | space | indicates that a leading space should be used on positive |\n | | numbers, and a minus sign on negative numbers. |\n +-----------+------------------------------------------------------------+\n\nThe "\'#\'" option causes the "alternate form" to be used for the\nconversion. The alternate form is defined differently for different\ntypes. This option is only valid for integer, float, complex and\nDecimal types. For integers, when binary, octal, or hexadecimal output\nis used, this option adds the prefix respective "\'0b\'", "\'0o\'", or\n"\'0x\'" to the output value. For floats, complex and Decimal the\nalternate form causes the result of the conversion to always contain a\ndecimal-point character, even if no digits follow it. Normally, a\ndecimal-point character appears in the result of these conversions\nonly if a digit follows it. In addition, for "\'g\'" and "\'G\'"\nconversions, trailing zeros are not removed from the result.\n\nThe "\',\'" option signals the use of a comma for a thousands separator.\nFor a locale aware separator, use the "\'n\'" integer presentation type\ninstead.\n\nChanged in version 3.1: Added the "\',\'" option (see also **PEP 378**).\n\n*width* is a decimal integer defining the minimum field width. If not\nspecified, then the field width will be determined by the content.\n\nWhen no explicit alignment is given, preceding the *width* field by a\nzero ("\'0\'") character enables sign-aware zero-padding for numeric\ntypes. This is equivalent to a *fill* character of "\'0\'" with an\n*alignment* type of "\'=\'".\n\nThe *precision* is a decimal number indicating how many digits should\nbe displayed after the decimal point for a floating point value\nformatted with "\'f\'" and "\'F\'", or before and after the decimal point\nfor a floating point value formatted with "\'g\'" or "\'G\'". For non-\nnumber types the field indicates the maximum field size - in other\nwords, how many characters will be used from the field content. The\n*precision* is not allowed for integer values.\n\nFinally, the *type* determines how the data should be presented.\n\nThe available string presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | "\'s\'" | String format. This is the default type for strings and |\n | | may be omitted. |\n +-----------+------------------------------------------------------------+\n | None | The same as "\'s\'". |\n +-----------+------------------------------------------------------------+\n\nThe available integer presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | "\'b\'" | Binary format. Outputs the number in base 2. |\n +-----------+------------------------------------------------------------+\n | "\'c\'" | Character. Converts the integer to the corresponding |\n | | unicode character before printing. |\n +-----------+------------------------------------------------------------+\n | "\'d\'" | Decimal Integer. Outputs the number in base 10. |\n +-----------+------------------------------------------------------------+\n | "\'o\'" | Octal format. Outputs the number in base 8. |\n +-----------+------------------------------------------------------------+\n | "\'x\'" | Hex format. Outputs the number in base 16, using lower- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | "\'X\'" | Hex format. Outputs the number in base 16, using upper- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | "\'n\'" | Number. This is the same as "\'d\'", except that it uses the |\n | | current locale setting to insert the appropriate number |\n | | separator characters. |\n +-----------+------------------------------------------------------------+\n | None | The same as "\'d\'". |\n +-----------+------------------------------------------------------------+\n\nIn addition to the above presentation types, integers can be formatted\nwith the floating point presentation types listed below (except "\'n\'"\nand None). When doing so, "float()" is used to convert the integer to\na floating point number before formatting.\n\nThe available presentation types for floating point and decimal values\nare:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | "\'e\'" | Exponent notation. Prints the number in scientific |\n | | notation using the letter \'e\' to indicate the exponent. |\n | | The default precision is "6". |\n +-----------+------------------------------------------------------------+\n | "\'E\'" | Exponent notation. Same as "\'e\'" except it uses an upper |\n | | case \'E\' as the separator character. |\n +-----------+------------------------------------------------------------+\n | "\'f\'" | Fixed point. Displays the number as a fixed-point number. |\n | | The default precision is "6". |\n +-----------+------------------------------------------------------------+\n | "\'F\'" | Fixed point. Same as "\'f\'", but converts "nan" to "NAN" |\n | | and "inf" to "INF". |\n +-----------+------------------------------------------------------------+\n | "\'g\'" | General format. For a given precision "p >= 1", this |\n | | rounds the number to "p" significant digits and then |\n | | formats the result in either fixed-point format or in |\n | | scientific notation, depending on its magnitude. The |\n | | precise rules are as follows: suppose that the result |\n | | formatted with presentation type "\'e\'" and precision "p-1" |\n | | would have exponent "exp". Then if "-4 <= exp < p", the |\n | | number is formatted with presentation type "\'f\'" and |\n | | precision "p-1-exp". Otherwise, the number is formatted |\n | | with presentation type "\'e\'" and precision "p-1". In both |\n | | cases insignificant trailing zeros are removed from the |\n | | significand, and the decimal point is also removed if |\n | | there are no remaining digits following it. Positive and |\n | | negative infinity, positive and negative zero, and nans, |\n | | are formatted as "inf", "-inf", "0", "-0" and "nan" |\n | | respectively, regardless of the precision. A precision of |\n | | "0" is treated as equivalent to a precision of "1". The |\n | | default precision is "6". |\n +-----------+------------------------------------------------------------+\n | "\'G\'" | General format. Same as "\'g\'" except switches to "\'E\'" if |\n | | the number gets too large. The representations of infinity |\n | | and NaN are uppercased, too. |\n +-----------+------------------------------------------------------------+\n | "\'n\'" | Number. This is the same as "\'g\'", except that it uses the |\n | | current locale setting to insert the appropriate number |\n | | separator characters. |\n +-----------+------------------------------------------------------------+\n | "\'%\'" | Percentage. Multiplies the number by 100 and displays in |\n | | fixed ("\'f\'") format, followed by a percent sign. |\n +-----------+------------------------------------------------------------+\n | None | Similar to "\'g\'", except that fixed-point notation, when |\n | | used, has at least one digit past the decimal point. The |\n | | default precision is as high as needed to represent the |\n | | particular value. The overall effect is to match the |\n | | output of "str()" as altered by the other format |\n | | modifiers. |\n +-----------+------------------------------------------------------------+\n\n\nFormat examples\n===============\n\nThis section contains examples of the "str.format()" syntax and\ncomparison with the old "%"-formatting.\n\nIn most of the cases the syntax is similar to the old "%"-formatting,\nwith the addition of the "{}" and with ":" used instead of "%". For\nexample, "\'%03.2f\'" can be translated to "\'{:03.2f}\'".\n\nThe new format syntax also supports new and different options, shown\nin the follow examples.\n\nAccessing arguments by position:\n\n >>> \'{0}, {1}, {2}\'.format(\'a\', \'b\', \'c\')\n \'a, b, c\'\n >>> \'{}, {}, {}\'.format(\'a\', \'b\', \'c\') # 3.1+ only\n \'a, b, c\'\n >>> \'{2}, {1}, {0}\'.format(\'a\', \'b\', \'c\')\n \'c, b, a\'\n >>> \'{2}, {1}, {0}\'.format(*\'abc\') # unpacking argument sequence\n \'c, b, a\'\n >>> \'{0}{1}{0}\'.format(\'abra\', \'cad\') # arguments\' indices can be repeated\n \'abracadabra\'\n\nAccessing arguments by name:\n\n >>> \'Coordinates: {latitude}, {longitude}\'.format(latitude=\'37.24N\', longitude=\'-115.81W\')\n \'Coordinates: 37.24N, -115.81W\'\n >>> coord = {\'latitude\': \'37.24N\', \'longitude\': \'-115.81W\'}\n >>> \'Coordinates: {latitude}, {longitude}\'.format(**coord)\n \'Coordinates: 37.24N, -115.81W\'\n\nAccessing arguments\' attributes:\n\n >>> c = 3-5j\n >>> (\'The complex number {0} is formed from the real part {0.real} \'\n ... \'and the imaginary part {0.imag}.\').format(c)\n \'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.\'\n >>> class Point:\n ... def __init__(self, x, y):\n ... self.x, self.y = x, y\n ... def __str__(self):\n ... return \'Point({self.x}, {self.y})\'.format(self=self)\n ...\n >>> str(Point(4, 2))\n \'Point(4, 2)\'\n\nAccessing arguments\' items:\n\n >>> coord = (3, 5)\n >>> \'X: {0[0]}; Y: {0[1]}\'.format(coord)\n \'X: 3; Y: 5\'\n\nReplacing "%s" and "%r":\n\n >>> "repr() shows quotes: {!r}; str() doesn\'t: {!s}".format(\'test1\', \'test2\')\n "repr() shows quotes: \'test1\'; str() doesn\'t: test2"\n\nAligning the text and specifying a width:\n\n >>> \'{:<30}\'.format(\'left aligned\')\n \'left aligned \'\n >>> \'{:>30}\'.format(\'right aligned\')\n \' right aligned\'\n >>> \'{:^30}\'.format(\'centered\')\n \' centered \'\n >>> \'{:*^30}\'.format(\'centered\') # use \'*\' as a fill char\n \'***********centered***********\'\n\nReplacing "%+f", "%-f", and "% f" and specifying a sign:\n\n >>> \'{:+f}; {:+f}\'.format(3.14, -3.14) # show it always\n \'+3.140000; -3.140000\'\n >>> \'{: f}; {: f}\'.format(3.14, -3.14) # show a space for positive numbers\n \' 3.140000; -3.140000\'\n >>> \'{:-f}; {:-f}\'.format(3.14, -3.14) # show only the minus -- same as \'{:f}; {:f}\'\n \'3.140000; -3.140000\'\n\nReplacing "%x" and "%o" and converting the value to different bases:\n\n >>> # format also supports binary numbers\n >>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)\n \'int: 42; hex: 2a; oct: 52; bin: 101010\'\n >>> # with 0x, 0o, or 0b as prefix:\n >>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)\n \'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010\'\n\nUsing the comma as a thousands separator:\n\n >>> \'{:,}\'.format(1234567890)\n \'1,234,567,890\'\n\nExpressing a percentage:\n\n >>> points = 19\n >>> total = 22\n >>> \'Correct answers: {:.2%}\'.format(points/total)\n \'Correct answers: 86.36%\'\n\nUsing type-specific formatting:\n\n >>> import datetime\n >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)\n >>> \'{:%Y-%m-%d %H:%M:%S}\'.format(d)\n \'2010-07-04 12:15:58\'\n\nNesting arguments and more complex examples:\n\n >>> for align, text in zip(\'<^>\', [\'left\', \'center\', \'right\']):\n ... \'{0:{fill}{align}16}\'.format(text, fill=align, align=align)\n ...\n \'left<<<<<<<<<<<<\'\n \'^^^^^center^^^^^\'\n \'>>>>>>>>>>>right\'\n >>>\n >>> octets = [192, 168, 0, 1]\n >>> \'{:02X}{:02X}{:02X}{:02X}\'.format(*octets)\n \'C0A80001\'\n >>> int(_, 16)\n 3232235521\n >>>\n >>> width = 5\n >>> for num in range(5,12): #doctest: +NORMALIZE_WHITESPACE\n ... for base in \'dXob\':\n ... print(\'{0:{width}{base}}\'.format(num, base=base, width=width), end=\' \')\n ... print()\n ...\n 5 5 5 101\n 6 6 6 110\n 7 7 7 111\n 8 8 10 1000\n 9 9 11 1001\n 10 A 12 1010\n 11 B 13 1011\n', + 'function': u'\nFunction definitions\n********************\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite\n decorators ::= decorator+\n decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n dotted_name ::= identifier ("." identifier)*\n parameter_list ::= (defparameter ",")*\n | "*" [parameter] ("," defparameter)* ["," "**" parameter]\n | "**" parameter\n | defparameter [","] )\n parameter ::= identifier [":" expression]\n defparameter ::= parameter ["=" expression]\n funcname ::= identifier\n\nA function definition is an executable statement. Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function). This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition. The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object. Multiple decorators are applied in\nnested fashion. For example, the following code\n\n @f1(arg)\n @f2\n def func(): pass\n\nis equivalent to\n\n def func(): pass\n func = f1(arg)(f2(func))\n\nWhen one or more *parameters* have the form *parameter* "="\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding *argument* may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted. If a parameter has a default value, all following\nparameters up until the ""*"" must also have a default value --- this\nis a syntactic restriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated from left to right when the\nfunction definition is executed.** This means that the expression is\nevaluated once, when the function is defined, and that the same "pre-\ncomputed" value is used for each call. This is especially important\nto understand when a default parameter is a mutable object, such as a\nlist or a dictionary: if the function modifies the object (e.g. by\nappending an item to a list), the default value is in effect modified.\nThis is generally not what was intended. A way around this is to use\n"None" as the default, and explicitly test for it in the body of the\nfunction, e.g.:\n\n def whats_on_the_telly(penguin=None):\n if penguin is None:\n penguin = []\n penguin.append("property of the zoo")\n return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values. If the form\n""*identifier"" is present, it is initialized to a tuple receiving any\nexcess positional parameters, defaulting to the empty tuple. If the\nform ""**identifier"" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary. Parameters after ""*"" or ""*identifier"" are\nkeyword-only parameters and may only be passed used keyword arguments.\n\nParameters may have annotations of the form "": expression"" following\nthe parameter name. Any parameter may have an annotation even those\nof the form "*identifier" or "**identifier". Functions may have\n"return" annotation of the form ""-> expression"" after the parameter\nlist. These annotations can be any valid Python expression and are\nevaluated when the function definition is executed. Annotations may\nbe evaluated in a different order than they appear in the source code.\nThe presence of annotations does not change the semantics of a\nfunction. The annotation values are available as values of a\ndictionary keyed by the parameters\' names in the "__annotations__"\nattribute of the function object.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions. This uses lambda\nexpressions, described in section *Lambdas*. Note that the lambda\nexpression is merely a shorthand for a simplified function definition;\na function defined in a ""def"" statement can be passed around or\nassigned to another name just like a function defined by a lambda\nexpression. The ""def"" form is actually more powerful since it\nallows the execution of multiple statements and annotations.\n\n**Programmer\'s note:** Functions are first-class objects. A ""def""\nstatement executed inside a function definition defines a local\nfunction that can be returned or passed around. Free variables used\nin the nested function can access the local variables of the function\ncontaining the def. See section *Naming and binding* for details.\n\nSee also: **PEP 3107** - Function Annotations\n\n The original specification for function annotations.\n', + 'global': u'\nThe "global" statement\n**********************\n\n global_stmt ::= "global" identifier ("," identifier)*\n\nThe "global" statement is a declaration which holds for the entire\ncurrent code block. It means that the listed identifiers are to be\ninterpreted as globals. It would be impossible to assign to a global\nvariable without "global", although free variables may refer to\nglobals without being declared global.\n\nNames listed in a "global" statement must not be used in the same code\nblock textually preceding that "global" statement.\n\nNames listed in a "global" statement must not be defined as formal\nparameters or in a "for" loop control target, "class" definition,\nfunction definition, or "import" statement.\n\n**CPython implementation detail:** The current implementation does not\nenforce the two restrictions, but programs should not abuse this\nfreedom, as future implementations may enforce them or silently change\nthe meaning of the program.\n\n**Programmer\'s note:** the "global" is a directive to the parser. It\napplies only to code parsed at the same time as the "global"\nstatement. In particular, a "global" statement contained in a string\nor code object supplied to the built-in "exec()" function does not\naffect the code block *containing* the function call, and code\ncontained in such a string is unaffected by "global" statements in the\ncode containing the function call. The same applies to the "eval()"\nand "compile()" functions.\n', + 'id-classes': u'\nReserved classes of identifiers\n*******************************\n\nCertain classes of identifiers (besides keywords) have special\nmeanings. These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n"_*"\n Not imported by "from module import *". The special identifier "_"\n is used in the interactive interpreter to store the result of the\n last evaluation; it is stored in the "builtins" module. When not\n in interactive mode, "_" has no special meaning and is not defined.\n See section *The import statement*.\n\n Note: The name "_" is often used in conjunction with\n internationalization; refer to the documentation for the\n "gettext" module for more information on this convention.\n\n"__*__"\n System-defined names. These names are defined by the interpreter\n and its implementation (including the standard library). Current\n system names are discussed in the *Special method names* section\n and elsewhere. More will likely be defined in future versions of\n Python. *Any* use of "__*__" names, in any context, that does not\n follow explicitly documented use, is subject to breakage without\n warning.\n\n"__*"\n Class-private names. Names in this category, when used within the\n context of a class definition, are re-written to use a mangled form\n to help avoid name clashes between "private" attributes of base and\n derived classes. See section *Identifiers (Names)*.\n', + 'identifiers': u'\nIdentifiers and keywords\n************************\n\nIdentifiers (also referred to as *names*) are described by the\nfollowing lexical definitions.\n\nThe syntax of identifiers in Python is based on the Unicode standard\nannex UAX-31, with elaboration and changes as defined below; see also\n**PEP 3131** for further details.\n\nWithin the ASCII range (U+0001..U+007F), the valid characters for\nidentifiers are the same as in Python 2.x: the uppercase and lowercase\nletters "A" through "Z", the underscore "_" and, except for the first\ncharacter, the digits "0" through "9".\n\nPython 3.0 introduces additional characters from outside the ASCII\nrange (see **PEP 3131**). For these characters, the classification\nuses the version of the Unicode Character Database as included in the\n"unicodedata" module.\n\nIdentifiers are unlimited in length. Case is significant.\n\n identifier ::= xid_start xid_continue*\n id_start ::= \n id_continue ::= \n xid_start ::= \n xid_continue ::= \n\nThe Unicode category codes mentioned above stand for:\n\n* *Lu* - uppercase letters\n\n* *Ll* - lowercase letters\n\n* *Lt* - titlecase letters\n\n* *Lm* - modifier letters\n\n* *Lo* - other letters\n\n* *Nl* - letter numbers\n\n* *Mn* - nonspacing marks\n\n* *Mc* - spacing combining marks\n\n* *Nd* - decimal numbers\n\n* *Pc* - connector punctuations\n\n* *Other_ID_Start* - explicit list of characters in PropList.txt to\n support backwards compatibility\n\n* *Other_ID_Continue* - likewise\n\nAll identifiers are converted into the normal form NFKC while parsing;\ncomparison of identifiers is based on NFKC.\n\nA non-normative HTML file listing all valid identifier characters for\nUnicode 4.1 can be found at https://www.dcl.hpi.uni-\npotsdam.de/home/loewis/table-3131.html.\n\n\nKeywords\n========\n\nThe following identifiers are used as reserved words, or *keywords* of\nthe language, and cannot be used as ordinary identifiers. They must\nbe spelled exactly as written here:\n\n False class finally is return\n None continue for lambda try\n True def from nonlocal while\n and del global not with\n as elif if or yield\n assert else import pass\n break except in raise\n\n\nReserved classes of identifiers\n===============================\n\nCertain classes of identifiers (besides keywords) have special\nmeanings. These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n"_*"\n Not imported by "from module import *". The special identifier "_"\n is used in the interactive interpreter to store the result of the\n last evaluation; it is stored in the "builtins" module. When not\n in interactive mode, "_" has no special meaning and is not defined.\n See section *The import statement*.\n\n Note: The name "_" is often used in conjunction with\n internationalization; refer to the documentation for the\n "gettext" module for more information on this convention.\n\n"__*__"\n System-defined names. These names are defined by the interpreter\n and its implementation (including the standard library). Current\n system names are discussed in the *Special method names* section\n and elsewhere. More will likely be defined in future versions of\n Python. *Any* use of "__*__" names, in any context, that does not\n follow explicitly documented use, is subject to breakage without\n warning.\n\n"__*"\n Class-private names. Names in this category, when used within the\n context of a class definition, are re-written to use a mangled form\n to help avoid name clashes between "private" attributes of base and\n derived classes. See section *Identifiers (Names)*.\n', + 'if': u'\nThe "if" statement\n******************\n\nThe "if" statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the "if" statement is executed or evaluated).\nIf all expressions are false, the suite of the "else" clause, if\npresent, is executed.\n', + 'imaginary': u'\nImaginary literals\n******************\n\nImaginary literals are described by the following lexical definitions:\n\n imagnumber ::= (floatnumber | intpart) ("j" | "J")\n\nAn imaginary literal yields a complex number with a real part of 0.0.\nComplex numbers are represented as a pair of floating point numbers\nand have the same restrictions on their range. To create a complex\nnumber with a nonzero real part, add a floating point number to it,\ne.g., "(3+4j)". Some examples of imaginary literals:\n\n 3.14j 10.j 10j .001j 1e100j 3.14e-10j\n', + 'import': u'\nThe "import" statement\n**********************\n\n import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )*\n | "from" relative_module "import" identifier ["as" name]\n ( "," identifier ["as" name] )*\n | "from" relative_module "import" "(" identifier ["as" name]\n ( "," identifier ["as" name] )* [","] ")"\n | "from" module "import" "*"\n module ::= (identifier ".")* identifier\n relative_module ::= "."* module | "."+\n name ::= identifier\n\nThe basic import statement (no "from" clause) is executed in two\nsteps:\n\n1. find a module, loading and initializing it if necessary\n\n2. define a name or names in the local namespace for the scope\n where the "import" statement occurs.\n\nWhen the statement contains multiple clauses (separated by commas) the\ntwo steps are carried out separately for each clause, just as though\nthe clauses had been separated out into individual import statements.\n\nThe details of the first step, finding and loading modules are\ndescribed in greater detail in the section on the *import system*,\nwhich also describes the various types of packages and modules that\ncan be imported, as well as all the hooks that can be used to\ncustomize the import system. Note that failures in this step may\nindicate either that the module could not be located, *or* that an\nerror occurred while initializing the module, which includes execution\nof the module\'s code.\n\nIf the requested module is retrieved successfully, it will be made\navailable in the local namespace in one of three ways:\n\n* If the module name is followed by "as", then the name following\n "as" is bound directly to the imported module.\n\n* If no other name is specified, and the module being imported is a\n top level module, the module\'s name is bound in the local namespace\n as a reference to the imported module\n\n* If the module being imported is *not* a top level module, then the\n name of the top level package that contains the module is bound in\n the local namespace as a reference to the top level package. The\n imported module must be accessed using its full qualified name\n rather than directly\n\nThe "from" form uses a slightly more complex process:\n\n1. find the module specified in the "from" clause, loading and\n initializing it if necessary;\n\n2. for each of the identifiers specified in the "import" clauses:\n\n 1. check if the imported module has an attribute by that name\n\n 2. if not, attempt to import a submodule with that name and then\n check the imported module again for that attribute\n\n 3. if the attribute is not found, "ImportError" is raised.\n\n 4. otherwise, a reference to that value is stored in the local\n namespace, using the name in the "as" clause if it is present,\n otherwise using the attribute name\n\nExamples:\n\n import foo # foo imported and bound locally\n import foo.bar.baz # foo.bar.baz imported, foo bound locally\n import foo.bar.baz as fbb # foo.bar.baz imported and bound as fbb\n from foo.bar import baz # foo.bar.baz imported and bound as baz\n from foo import attr # foo imported and foo.attr bound as attr\n\nIf the list of identifiers is replaced by a star ("\'*\'"), all public\nnames defined in the module are bound in the local namespace for the\nscope where the "import" statement occurs.\n\nThe *public names* defined by a module are determined by checking the\nmodule\'s namespace for a variable named "__all__"; if defined, it must\nbe a sequence of strings which are names defined or imported by that\nmodule. The names given in "__all__" are all considered public and\nare required to exist. If "__all__" is not defined, the set of public\nnames includes all names found in the module\'s namespace which do not\nbegin with an underscore character ("\'_\'"). "__all__" should contain\nthe entire public API. It is intended to avoid accidentally exporting\nitems that are not part of the API (such as library modules which were\nimported and used within the module).\n\nThe wild card form of import --- "from module import *" --- is only\nallowed at the module level. Attempting to use it in class or\nfunction definitions will raise a "SyntaxError".\n\nWhen specifying what module to import you do not have to specify the\nabsolute name of the module. When a module or package is contained\nwithin another package it is possible to make a relative import within\nthe same top package without having to mention the package name. By\nusing leading dots in the specified module or package after "from" you\ncan specify how high to traverse up the current package hierarchy\nwithout specifying exact names. One leading dot means the current\npackage where the module making the import exists. Two dots means up\none package level. Three dots is up two levels, etc. So if you execute\n"from . import mod" from a module in the "pkg" package then you will\nend up importing "pkg.mod". If you execute "from ..subpkg2 import mod"\nfrom within "pkg.subpkg1" you will import "pkg.subpkg2.mod". The\nspecification for relative imports is contained within **PEP 328**.\n\n"importlib.import_module()" is provided to support applications that\ndetermine dynamically the modules to be loaded.\n\n\nFuture statements\n=================\n\nA *future statement* is a directive to the compiler that a particular\nmodule should be compiled using syntax or semantics that will be\navailable in a specified future release of Python where the feature\nbecomes standard.\n\nThe future statement is intended to ease migration to future versions\nof Python that introduce incompatible changes to the language. It\nallows use of the new features on a per-module basis before the\nrelease in which the feature becomes standard.\n\n future_statement ::= "from" "__future__" "import" feature ["as" name]\n ("," feature ["as" name])*\n | "from" "__future__" "import" "(" feature ["as" name]\n ("," feature ["as" name])* [","] ")"\n feature ::= identifier\n name ::= identifier\n\nA future statement must appear near the top of the module. The only\nlines that can appear before a future statement are:\n\n* the module docstring (if any),\n\n* comments,\n\n* blank lines, and\n\n* other future statements.\n\nThe features recognized by Python 3.0 are "absolute_import",\n"division", "generators", "unicode_literals", "print_function",\n"nested_scopes" and "with_statement". They are all redundant because\nthey are always enabled, and only kept for backwards compatibility.\n\nA future statement is recognized and treated specially at compile\ntime: Changes to the semantics of core constructs are often\nimplemented by generating different code. It may even be the case\nthat a new feature introduces new incompatible syntax (such as a new\nreserved word), in which case the compiler may need to parse the\nmodule differently. Such decisions cannot be pushed off until\nruntime.\n\nFor any given release, the compiler knows which feature names have\nbeen defined, and raises a compile-time error if a future statement\ncontains a feature not known to it.\n\nThe direct runtime semantics are the same as for any import statement:\nthere is a standard module "__future__", described later, and it will\nbe imported in the usual way at the time the future statement is\nexecuted.\n\nThe interesting runtime semantics depend on the specific feature\nenabled by the future statement.\n\nNote that there is nothing special about the statement:\n\n import __future__ [as name]\n\nThat is not a future statement; it\'s an ordinary import statement with\nno special semantics or syntax restrictions.\n\nCode compiled by calls to the built-in functions "exec()" and\n"compile()" that occur in a module "M" containing a future statement\nwill, by default, use the new syntax or semantics associated with the\nfuture statement. This can be controlled by optional arguments to\n"compile()" --- see the documentation of that function for details.\n\nA future statement typed at an interactive interpreter prompt will\ntake effect for the rest of the interpreter session. If an\ninterpreter is started with the *-i* option, is passed a script name\nto execute, and the script includes a future statement, it will be in\neffect in the interactive session started after the script is\nexecuted.\n\nSee also: **PEP 236** - Back to the __future__\n\n The original proposal for the __future__ mechanism.\n', + 'in': u'\nMembership test operations\n**************************\n\nThe operators "in" and "not in" test for membership. "x in s"\nevaluates to true if *x* is a member of *s*, and false otherwise. "x\nnot in s" returns the negation of "x in s". All built-in sequences\nand set types support this as well as dictionary, for which "in" tests\nwhether the dictionary has a given key. For container types such as\nlist, tuple, set, frozenset, dict, or collections.deque, the\nexpression "x in y" is equivalent to "any(x is e or x == e for e in\ny)".\n\nFor the string and bytes types, "x in y" is true if and only if *x* is\na substring of *y*. An equivalent test is "y.find(x) != -1". Empty\nstrings are always considered to be a substring of any other string,\nso """ in "abc"" will return "True".\n\nFor user-defined classes which define the "__contains__()" method, "x\nin y" is true if and only if "y.__contains__(x)" is true.\n\nFor user-defined classes which do not define "__contains__()" but do\ndefine "__iter__()", "x in y" is true if some value "z" with "x == z"\nis produced while iterating over "y". If an exception is raised\nduring the iteration, it is as if "in" raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n"__getitem__()", "x in y" is true if and only if there is a non-\nnegative integer index *i* such that "x == y[i]", and all lower\ninteger indices do not raise "IndexError" exception. (If any other\nexception is raised, it is as if "in" raised that exception).\n\nThe operator "not in" is defined to have the inverse true value of\n"in".\n', + 'integers': u'\nInteger literals\n****************\n\nInteger literals are described by the following lexical definitions:\n\n integer ::= decimalinteger | octinteger | hexinteger | bininteger\n decimalinteger ::= nonzerodigit digit* | "0"+\n nonzerodigit ::= "1"..."9"\n digit ::= "0"..."9"\n octinteger ::= "0" ("o" | "O") octdigit+\n hexinteger ::= "0" ("x" | "X") hexdigit+\n bininteger ::= "0" ("b" | "B") bindigit+\n octdigit ::= "0"..."7"\n hexdigit ::= digit | "a"..."f" | "A"..."F"\n bindigit ::= "0" | "1"\n\nThere is no limit for the length of integer literals apart from what\ncan be stored in available memory.\n\nNote that leading zeros in a non-zero decimal number are not allowed.\nThis is for disambiguation with C-style octal literals, which Python\nused before version 3.0.\n\nSome examples of integer literals:\n\n 7 2147483647 0o177 0b100110111\n 3 79228162514264337593543950336 0o377 0xdeadbeef\n', + 'lambda': u'\nLambdas\n*******\n\n lambda_expr ::= "lambda" [parameter_list]: expression\n lambda_expr_nocond ::= "lambda" [parameter_list]: expression_nocond\n\nLambda expressions (sometimes called lambda forms) are used to create\nanonymous functions. The expression "lambda arguments: expression"\nyields a function object. The unnamed object behaves like a function\nobject defined with\n\n def (arguments):\n return expression\n\nSee section *Function definitions* for the syntax of parameter lists.\nNote that functions created with lambda expressions cannot contain\nstatements or annotations.\n', + 'lists': u'\nList displays\n*************\n\nA list display is a possibly empty series of expressions enclosed in\nsquare brackets:\n\n list_display ::= "[" [starred_list | comprehension] "]"\n\nA list display yields a new list object, the contents being specified\nby either a list of expressions or a comprehension. When a comma-\nseparated list of expressions is supplied, its elements are evaluated\nfrom left to right and placed into the list object in that order.\nWhen a comprehension is supplied, the list is constructed from the\nelements resulting from the comprehension.\n', + 'naming': u'\nNaming and binding\n******************\n\n\nBinding of names\n================\n\n*Names* refer to objects. Names are introduced by name binding\noperations.\n\nThe following constructs bind names: formal parameters to functions,\n"import" statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, "for" loop header, or after\n"as" in a "with" statement or "except" clause. The "import" statement\nof the form "from ... import *" binds all names defined in the\nimported module, except those beginning with an underscore. This form\nmay only be used at the module level.\n\nA target occurring in a "del" statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name).\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name is bound in a block, it is a local variable of that block,\nunless declared as "nonlocal" or "global". If a name is bound at the\nmodule level, it is a global variable. (The variables of the module\ncode block are local and global.) If a variable is used in a code\nblock but not defined there, it is a *free variable*.\n\nEach occurrence of a name in the program text refers to the *binding*\nof that name established by the following name resolution rules.\n\n\nResolution of names\n===================\n\nA *scope* defines the visibility of a name within a block. If a local\nvariable is defined in a block, its scope includes that block. If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name.\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope. The set of all such scopes visible to a code block\nis called the block\'s *environment*.\n\nWhen a name is not found at all, a "NameError" exception is raised. If\nthe current scope is a function scope, and the name refers to a local\nvariable that has not yet been bound to a value at the point where the\nname is used, an "UnboundLocalError" exception is raised.\n"UnboundLocalError" is a subclass of "NameError".\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block. This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle. Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block. The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the "global" statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtins namespace, the namespace\nof the module "builtins". The global namespace is searched first. If\nthe name is not found there, the builtins namespace is searched. The\n"global" statement must precede all uses of the name.\n\nThe "global" statement has the same scope as a name binding operation\nin the same block. If the nearest enclosing scope for a free variable\ncontains a global statement, the free variable is treated as a global.\n\nThe "nonlocal" statement causes corresponding names to refer to\npreviously bound variables in the nearest enclosing function scope.\n"SyntaxError" is raised at compile time if the given name does not\nexist in any enclosing function scope.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported. The main module for a script is always called\n"__main__".\n\nClass definition blocks and arguments to "exec()" and "eval()" are\nspecial in the context of name resolution. A class definition is an\nexecutable statement that may use and define names. These references\nfollow the normal rules for name resolution with an exception that\nunbound local variables are looked up in the global namespace. The\nnamespace of the class definition becomes the attribute dictionary of\nthe class. The scope of names defined in a class block is limited to\nthe class block; it does not extend to the code blocks of methods --\nthis includes comprehensions and generator expressions since they are\nimplemented using a function scope. This means that the following\nwill fail:\n\n class A:\n a = 42\n b = list(a + i for i in range(10))\n\n\nBuiltins and restricted execution\n=================================\n\nThe builtins namespace associated with the execution of a code block\nis actually found by looking up the name "__builtins__" in its global\nnamespace; this should be a dictionary or a module (in the latter case\nthe module\'s dictionary is used). By default, when in the "__main__"\nmodule, "__builtins__" is the built-in module "builtins"; when in any\nother module, "__builtins__" is an alias for the dictionary of the\n"builtins" module itself. "__builtins__" can be set to a user-created\ndictionary to create a weak form of restricted execution.\n\n**CPython implementation detail:** Users should not touch\n"__builtins__"; it is strictly an implementation detail. Users\nwanting to override values in the builtins namespace should "import"\nthe "builtins" module and modify its attributes appropriately.\n\n\nInteraction with dynamic features\n=================================\n\nName resolution of free variables occurs at runtime, not at compile\ntime. This means that the following code will print 42:\n\n i = 10\n def f():\n print(i)\n i = 42\n f()\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nThe "eval()" and "exec()" functions do not have access to the full\nenvironment for resolving names. Names may be resolved in the local\nand global namespaces of the caller. Free variables are not resolved\nin the nearest enclosing namespace, but in the global namespace. [1]\nThe "exec()" and "eval()" functions have optional arguments to\noverride the global and local namespace. If only one namespace is\nspecified, it is used for both.\n', + 'nonlocal': u'\nThe "nonlocal" statement\n************************\n\n nonlocal_stmt ::= "nonlocal" identifier ("," identifier)*\n\nThe "nonlocal" statement causes the listed identifiers to refer to\npreviously bound variables in the nearest enclosing scope excluding\nglobals. This is important because the default behavior for binding is\nto search the local namespace first. The statement allows\nencapsulated code to rebind variables outside of the local scope\nbesides the global (module) scope.\n\nNames listed in a "nonlocal" statement, unlike those listed in a\n"global" statement, must refer to pre-existing bindings in an\nenclosing scope (the scope in which a new binding should be created\ncannot be determined unambiguously).\n\nNames listed in a "nonlocal" statement must not collide with pre-\nexisting bindings in the local scope.\n\nSee also: **PEP 3104** - Access to Names in Outer Scopes\n\n The specification for the "nonlocal" statement.\n', + 'numbers': u'\nNumeric literals\n****************\n\nThere are three types of numeric literals: integers, floating point\nnumbers, and imaginary numbers. There are no complex literals\n(complex numbers can be formed by adding a real number and an\nimaginary number).\n\nNote that numeric literals do not include a sign; a phrase like "-1"\nis actually an expression composed of the unary operator \'"-"\' and the\nliteral "1".\n', + 'numeric-types': u'\nEmulating numeric types\n***********************\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__matmul__(self, other)\nobject.__truediv__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations ("+", "-", "*", "@", "/", "//", "%", "divmod()",\n "pow()", "**", "<<", ">>", "&", "^", "|"). For instance, to\n evaluate the expression "x + y", where *x* is an instance of a\n class that has an "__add__()" method, "x.__add__(y)" is called.\n The "__divmod__()" method should be the equivalent to using\n "__floordiv__()" and "__mod__()"; it should not be related to\n "__truediv__()". Note that "__pow__()" should be defined to accept\n an optional third argument if the ternary version of the built-in\n "pow()" function is to be supported.\n\n If one of those methods does not support the operation with the\n supplied arguments, it should return "NotImplemented".\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rmatmul__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations ("+", "-", "*", "@", "/", "//", "%", "divmod()",\n "pow()", "**", "<<", ">>", "&", "^", "|") with reflected (swapped)\n operands. These functions are only called if the left operand does\n not support the corresponding operation and the operands are of\n different types. [2] For instance, to evaluate the expression "x -\n y", where *y* is an instance of a class that has an "__rsub__()"\n method, "y.__rsub__(x)" is called if "x.__sub__(y)" returns\n *NotImplemented*.\n\n Note that ternary "pow()" will not try calling "__rpow__()" (the\n coercion rules would become too complicated).\n\n Note: If the right operand\'s type is a subclass of the left\n operand\'s type and that subclass provides the reflected method\n for the operation, this method will be called before the left\n operand\'s non-reflected method. This behavior allows subclasses\n to override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__imatmul__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n These methods are called to implement the augmented arithmetic\n assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", "**=",\n "<<=", ">>=", "&=", "^=", "|="). These methods should attempt to\n do the operation in-place (modifying *self*) and return the result\n (which could be, but does not have to be, *self*). If a specific\n method is not defined, the augmented assignment falls back to the\n normal methods. For instance, if *x* is an instance of a class\n with an "__iadd__()" method, "x += y" is equivalent to "x =\n x.__iadd__(y)" . Otherwise, "x.__add__(y)" and "y.__radd__(x)" are\n considered, as with the evaluation of "x + y". In certain\n situations, augmented assignment can result in unexpected errors\n (see *Why does a_tuple[i] += [\'item\'] raise an exception when the\n addition works?*), but this behavior is in fact part of the data\n model.\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n Called to implement the unary arithmetic operations ("-", "+",\n "abs()" and "~").\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__float__(self)\nobject.__round__(self[, n])\n\n Called to implement the built-in functions "complex()", "int()",\n "float()" and "round()". Should return a value of the appropriate\n type.\n\nobject.__index__(self)\n\n Called to implement "operator.index()", and whenever Python needs\n to losslessly convert the numeric object to an integer object (such\n as in slicing, or in the built-in "bin()", "hex()" and "oct()"\n functions). Presence of this method indicates that the numeric\n object is an integer type. Must return an integer.\n\n Note: In order to have a coherent integer type class, when\n "__index__()" is defined "__int__()" should also be defined, and\n both should return the same value.\n', + 'objects': u'\nObjects, values and types\n*************************\n\n*Objects* are Python\'s abstraction for data. All data in a Python\nprogram is represented by objects or by relations between objects. (In\na sense, and in conformance to Von Neumann\'s model of a "stored\nprogram computer," code is also represented by objects.)\n\nEvery object has an identity, a type and a value. An object\'s\n*identity* never changes once it has been created; you may think of it\nas the object\'s address in memory. The \'"is"\' operator compares the\nidentity of two objects; the "id()" function returns an integer\nrepresenting its identity.\n\n**CPython implementation detail:** For CPython, "id(x)" is the memory\naddress where "x" is stored.\n\nAn object\'s type determines the operations that the object supports\n(e.g., "does it have a length?") and also defines the possible values\nfor objects of that type. The "type()" function returns an object\'s\ntype (which is an object itself). Like its identity, an object\'s\n*type* is also unchangeable. [1]\n\nThe *value* of some objects can change. Objects whose value can\nchange are said to be *mutable*; objects whose value is unchangeable\nonce they are created are called *immutable*. (The value of an\nimmutable container object that contains a reference to a mutable\nobject can change when the latter\'s value is changed; however the\ncontainer is still considered immutable, because the collection of\nobjects it contains cannot be changed. So, immutability is not\nstrictly the same as having an unchangeable value, it is more subtle.)\nAn object\'s mutability is determined by its type; for instance,\nnumbers, strings and tuples are immutable, while dictionaries and\nlists are mutable.\n\nObjects are never explicitly destroyed; however, when they become\nunreachable they may be garbage-collected. An implementation is\nallowed to postpone garbage collection or omit it altogether --- it is\na matter of implementation quality how garbage collection is\nimplemented, as long as no objects are collected that are still\nreachable.\n\n**CPython implementation detail:** CPython currently uses a reference-\ncounting scheme with (optional) delayed detection of cyclically linked\ngarbage, which collects most objects as soon as they become\nunreachable, but is not guaranteed to collect garbage containing\ncircular references. See the documentation of the "gc" module for\ninformation on controlling the collection of cyclic garbage. Other\nimplementations act differently and CPython may change. Do not depend\non immediate finalization of objects when they become unreachable (so\nyou should always close files explicitly).\n\nNote that the use of the implementation\'s tracing or debugging\nfacilities may keep objects alive that would normally be collectable.\nAlso note that catching an exception with a \'"try"..."except"\'\nstatement may keep objects alive.\n\nSome objects contain references to "external" resources such as open\nfiles or windows. It is understood that these resources are freed\nwhen the object is garbage-collected, but since garbage collection is\nnot guaranteed to happen, such objects also provide an explicit way to\nrelease the external resource, usually a "close()" method. Programs\nare strongly recommended to explicitly close such objects. The\n\'"try"..."finally"\' statement and the \'"with"\' statement provide\nconvenient ways to do this.\n\nSome objects contain references to other objects; these are called\n*containers*. Examples of containers are tuples, lists and\ndictionaries. The references are part of a container\'s value. In\nmost cases, when we talk about the value of a container, we imply the\nvalues, not the identities of the contained objects; however, when we\ntalk about the mutability of a container, only the identities of the\nimmediately contained objects are implied. So, if an immutable\ncontainer (like a tuple) contains a reference to a mutable object, its\nvalue changes if that mutable object is changed.\n\nTypes affect almost all aspects of object behavior. Even the\nimportance of object identity is affected in some sense: for immutable\ntypes, operations that compute new values may actually return a\nreference to any existing object with the same type and value, while\nfor mutable objects this is not allowed. E.g., after "a = 1; b = 1",\n"a" and "b" may or may not refer to the same object with the value\none, depending on the implementation, but after "c = []; d = []", "c"\nand "d" are guaranteed to refer to two different, unique, newly\ncreated empty lists. (Note that "c = d = []" assigns the same object\nto both "c" and "d".)\n', + 'operator-summary': u'\nOperator precedence\n*******************\n\nThe following table summarizes the operator precedence in Python, from\nlowest precedence (least binding) to highest precedence (most\nbinding). Operators in the same box have the same precedence. Unless\nthe syntax is explicitly given, operators are binary. Operators in\nthe same box group left to right (except for exponentiation, which\ngroups from right to left).\n\nNote that comparisons, membership tests, and identity tests, all have\nthe same precedence and have a left-to-right chaining feature as\ndescribed in the *Comparisons* section.\n\n+-------------------------------------------------+---------------------------------------+\n| Operator | Description |\n+=================================================+=======================================+\n| "lambda" | Lambda expression |\n+-------------------------------------------------+---------------------------------------+\n| "if" -- "else" | Conditional expression |\n+-------------------------------------------------+---------------------------------------+\n| "or" | Boolean OR |\n+-------------------------------------------------+---------------------------------------+\n| "and" | Boolean AND |\n+-------------------------------------------------+---------------------------------------+\n| "not" "x" | Boolean NOT |\n+-------------------------------------------------+---------------------------------------+\n| "in", "not in", "is", "is not", "<", "<=", ">", | Comparisons, including membership |\n| ">=", "!=", "==" | tests and identity tests |\n+-------------------------------------------------+---------------------------------------+\n| "|" | Bitwise OR |\n+-------------------------------------------------+---------------------------------------+\n| "^" | Bitwise XOR |\n+-------------------------------------------------+---------------------------------------+\n| "&" | Bitwise AND |\n+-------------------------------------------------+---------------------------------------+\n| "<<", ">>" | Shifts |\n+-------------------------------------------------+---------------------------------------+\n| "+", "-" | Addition and subtraction |\n+-------------------------------------------------+---------------------------------------+\n| "*", "@", "/", "//", "%" | Multiplication, matrix multiplication |\n| | division, remainder [5] |\n+-------------------------------------------------+---------------------------------------+\n| "+x", "-x", "~x" | Positive, negative, bitwise NOT |\n+-------------------------------------------------+---------------------------------------+\n| "**" | Exponentiation [6] |\n+-------------------------------------------------+---------------------------------------+\n| "await" "x" | Await expression |\n+-------------------------------------------------+---------------------------------------+\n| "x[index]", "x[index:index]", | Subscription, slicing, call, |\n| "x(arguments...)", "x.attribute" | attribute reference |\n+-------------------------------------------------+---------------------------------------+\n| "(expressions...)", "[expressions...]", "{key: | Binding or tuple display, list |\n| value...}", "{expressions...}" | display, dictionary display, set |\n| | display |\n+-------------------------------------------------+---------------------------------------+\n\n-[ Footnotes ]-\n\n[1] While "abs(x%y) < abs(y)" is true mathematically, for floats\n it may not be true numerically due to roundoff. For example, and\n assuming a platform on which a Python float is an IEEE 754 double-\n precision number, in order that "-1e-100 % 1e100" have the same\n sign as "1e100", the computed result is "-1e-100 + 1e100", which\n is numerically exactly equal to "1e100". The function\n "math.fmod()" returns a result whose sign matches the sign of the\n first argument instead, and so returns "-1e-100" in this case.\n Which approach is more appropriate depends on the application.\n\n[2] If x is very close to an exact integer multiple of y, it\'s\n possible for "x//y" to be one larger than "(x-x%y)//y" due to\n rounding. In such cases, Python returns the latter result, in\n order to preserve that "divmod(x,y)[0] * y + x % y" be very close\n to "x".\n\n[3] The Unicode standard distinguishes between *code points* (e.g.\n U+0041) and *abstract characters* (e.g. "LATIN CAPITAL LETTER A").\n While most abstract characters in Unicode are only represented\n using one code point, there is a number of abstract characters\n that can in addition be represented using a sequence of more than\n one code point. For example, the abstract character "LATIN\n CAPITAL LETTER C WITH CEDILLA" can be represented as a single\n *precomposed character* at code position U+00C7, or as a sequence\n of a *base character* at code position U+0043 (LATIN CAPITAL\n LETTER C), followed by a *combining character* at code position\n U+0327 (COMBINING CEDILLA).\n\n The comparison operators on strings compare at the level of\n Unicode code points. This may be counter-intuitive to humans. For\n example, ""\\u00C7" == "\\u0043\\u0327"" is "False", even though both\n strings represent the same abstract character "LATIN CAPITAL\n LETTER C WITH CEDILLA".\n\n To compare strings at the level of abstract characters (that is,\n in a way intuitive to humans), use "unicodedata.normalize()".\n\n[4] Due to automatic garbage-collection, free lists, and the\n dynamic nature of descriptors, you may notice seemingly unusual\n behaviour in certain uses of the "is" operator, like those\n involving comparisons between instance methods, or constants.\n Check their documentation for more info.\n\n[5] The "%" operator is also used for string formatting; the same\n precedence applies.\n\n[6] The power operator "**" binds less tightly than an arithmetic\n or bitwise unary operator on its right, that is, "2**-1" is "0.5".\n', + 'pass': u'\nThe "pass" statement\n********************\n\n pass_stmt ::= "pass"\n\n"pass" is a null operation --- when it is executed, nothing happens.\nIt is useful as a placeholder when a statement is required\nsyntactically, but no code needs to be executed, for example:\n\n def f(arg): pass # a function that does nothing (yet)\n\n class C: pass # a class with no methods (yet)\n', + 'power': u'\nThe power operator\n******************\n\nThe power operator binds more tightly than unary operators on its\nleft; it binds less tightly than unary operators on its right. The\nsyntax is:\n\n power ::= ( await_expr | primary ) ["**" u_expr]\n\nThus, in an unparenthesized sequence of power and unary operators, the\noperators are evaluated from right to left (this does not constrain\nthe evaluation order for the operands): "-1**2" results in "-1".\n\nThe power operator has the same semantics as the built-in "pow()"\nfunction, when called with two arguments: it yields its left argument\nraised to the power of its right argument. The numeric arguments are\nfirst converted to a common type, and the result is of that type.\n\nFor int operands, the result has the same type as the operands unless\nthe second argument is negative; in that case, all arguments are\nconverted to float and a float result is delivered. For example,\n"10**2" returns "100", but "10**-2" returns "0.01".\n\nRaising "0.0" to a negative power results in a "ZeroDivisionError".\nRaising a negative number to a fractional power results in a "complex"\nnumber. (In earlier versions it raised a "ValueError".)\n', + 'raise': u'\nThe "raise" statement\n*********************\n\n raise_stmt ::= "raise" [expression ["from" expression]]\n\nIf no expressions are present, "raise" re-raises the last exception\nthat was active in the current scope. If no exception is active in\nthe current scope, a "RuntimeError" exception is raised indicating\nthat this is an error.\n\nOtherwise, "raise" evaluates the first expression as the exception\nobject. It must be either a subclass or an instance of\n"BaseException". If it is a class, the exception instance will be\nobtained when needed by instantiating the class with no arguments.\n\nThe *type* of the exception is the exception instance\'s class, the\n*value* is the instance itself.\n\nA traceback object is normally created automatically when an exception\nis raised and attached to it as the "__traceback__" attribute, which\nis writable. You can create an exception and set your own traceback in\none step using the "with_traceback()" exception method (which returns\nthe same exception instance, with its traceback set to its argument),\nlike so:\n\n raise Exception("foo occurred").with_traceback(tracebackobj)\n\nThe "from" clause is used for exception chaining: if given, the second\n*expression* must be another exception class or instance, which will\nthen be attached to the raised exception as the "__cause__" attribute\n(which is writable). If the raised exception is not handled, both\nexceptions will be printed:\n\n >>> try:\n ... print(1 / 0)\n ... except Exception as exc:\n ... raise RuntimeError("Something bad happened") from exc\n ...\n Traceback (most recent call last):\n File "", line 2, in \n ZeroDivisionError: int division or modulo by zero\n\n The above exception was the direct cause of the following exception:\n\n Traceback (most recent call last):\n File "", line 4, in \n RuntimeError: Something bad happened\n\nA similar mechanism works implicitly if an exception is raised inside\nan exception handler or a "finally" clause: the previous exception is\nthen attached as the new exception\'s "__context__" attribute:\n\n >>> try:\n ... print(1 / 0)\n ... except:\n ... raise RuntimeError("Something bad happened")\n ...\n Traceback (most recent call last):\n File "", line 2, in \n ZeroDivisionError: int division or modulo by zero\n\n During handling of the above exception, another exception occurred:\n\n Traceback (most recent call last):\n File "", line 4, in \n RuntimeError: Something bad happened\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information about handling exceptions is in section\n*The try statement*.\n', + 'return': u'\nThe "return" statement\n**********************\n\n return_stmt ::= "return" [expression_list]\n\n"return" may only occur syntactically nested in a function definition,\nnot within a nested class definition.\n\nIf an expression list is present, it is evaluated, else "None" is\nsubstituted.\n\n"return" leaves the current function call with the expression list (or\n"None") as return value.\n\nWhen "return" passes control out of a "try" statement with a "finally"\nclause, that "finally" clause is executed before really leaving the\nfunction.\n\nIn a generator function, the "return" statement indicates that the\ngenerator is done and will cause "StopIteration" to be raised. The\nreturned value (if any) is used as an argument to construct\n"StopIteration" and becomes the "StopIteration.value" attribute.\n', + 'sequence-types': u'\nEmulating container types\n*************************\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which "0 <= k < N" where\n*N* is the length of the sequence, or slice objects, which define a\nrange of items. It is also recommended that mappings provide the\nmethods "keys()", "values()", "items()", "get()", "clear()",\n"setdefault()", "pop()", "popitem()", "copy()", and "update()"\nbehaving similar to those for Python\'s standard dictionary objects.\nThe "collections" module provides a "MutableMapping" abstract base\nclass to help create those methods from a base set of "__getitem__()",\n"__setitem__()", "__delitem__()", and "keys()". Mutable sequences\nshould provide methods "append()", "count()", "index()", "extend()",\n"insert()", "pop()", "remove()", "reverse()" and "sort()", like Python\nstandard list objects. Finally, sequence types should implement\naddition (meaning concatenation) and multiplication (meaning\nrepetition) by defining the methods "__add__()", "__radd__()",\n"__iadd__()", "__mul__()", "__rmul__()" and "__imul__()" described\nbelow; they should not define other numerical operators. It is\nrecommended that both mappings and sequences implement the\n"__contains__()" method to allow efficient use of the "in" operator;\nfor mappings, "in" should search the mapping\'s keys; for sequences, it\nshould search through the values. It is further recommended that both\nmappings and sequences implement the "__iter__()" method to allow\nefficient iteration through the container; for mappings, "__iter__()"\nshould be the same as "keys()"; for sequences, it should iterate\nthrough the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function "len()". Should return\n the length of the object, an integer ">=" 0. Also, an object that\n doesn\'t define a "__bool__()" method and whose "__len__()" method\n returns zero is considered to be false in a Boolean context.\n\nobject.__length_hint__(self)\n\n Called to implement "operator.length_hint()". Should return an\n estimated length for the object (which may be greater or less than\n the actual length). The length must be an integer ">=" 0. This\n method is purely an optimization and is never required for\n correctness.\n\n New in version 3.4.\n\nNote: Slicing is done exclusively with the following three methods.\n A call like\n\n a[1:2] = b\n\n is translated to\n\n a[slice(1, 2, None)] = b\n\n and so forth. Missing slice items are always filled in with "None".\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of "self[key]". For sequence types,\n the accepted keys should be integers and slice objects. Note that\n the special interpretation of negative indexes (if the class wishes\n to emulate a sequence type) is up to the "__getitem__()" method. If\n *key* is of an inappropriate type, "TypeError" may be raised; if of\n a value outside the set of indexes for the sequence (after any\n special interpretation of negative values), "IndexError" should be\n raised. For mapping types, if *key* is missing (not in the\n container), "KeyError" should be raised.\n\n Note: "for" loops expect that an "IndexError" will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__missing__(self, key)\n\n Called by "dict"."__getitem__()" to implement "self[key]" for dict\n subclasses when key is not in the dictionary.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to "self[key]". Same note as for\n "__getitem__()". This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the "__getitem__()" method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of "self[key]". Same note as for\n "__getitem__()". This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the "__getitem__()" method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the "reversed()" built-in to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the "__reversed__()" method is not provided, the "reversed()"\n built-in will fall back to using the sequence protocol ("__len__()"\n and "__getitem__()"). Objects that support the sequence protocol\n should only provide "__reversed__()" if they can provide an\n implementation that is more efficient than the one provided by\n "reversed()".\n\nThe membership test operators ("in" and "not in") are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n\n For objects that don\'t define "__contains__()", the membership test\n first tries iteration via "__iter__()", then the old sequence\n iteration protocol via "__getitem__()", see *this section in the\n language reference*.\n', + 'shifting': u'\nShifting operations\n*******************\n\nThe shifting operations have lower priority than the arithmetic\noperations:\n\n shift_expr ::= a_expr | shift_expr ( "<<" | ">>" ) a_expr\n\nThese operators accept integers as arguments. They shift the first\nargument to the left or right by the number of bits given by the\nsecond argument.\n\nA right shift by *n* bits is defined as floor division by "pow(2,n)".\nA left shift by *n* bits is defined as multiplication with "pow(2,n)".\n\nNote: In the current implementation, the right-hand operand is\n required to be at most "sys.maxsize". If the right-hand operand is\n larger than "sys.maxsize" an "OverflowError" exception is raised.\n', + 'slicings': u'\nSlicings\n********\n\nA slicing selects a range of items in a sequence object (e.g., a\nstring, tuple or list). Slicings may be used as expressions or as\ntargets in assignment or "del" statements. The syntax for a slicing:\n\n slicing ::= primary "[" slice_list "]"\n slice_list ::= slice_item ("," slice_item)* [","]\n slice_item ::= expression | proper_slice\n proper_slice ::= [lower_bound] ":" [upper_bound] [ ":" [stride] ]\n lower_bound ::= expression\n upper_bound ::= expression\n stride ::= expression\n\nThere is ambiguity in the formal syntax here: anything that looks like\nan expression list also looks like a slice list, so any subscription\ncan be interpreted as a slicing. Rather than further complicating the\nsyntax, this is disambiguated by defining that in this case the\ninterpretation as a subscription takes priority over the\ninterpretation as a slicing (this is the case if the slice list\ncontains no proper slice).\n\nThe semantics for a slicing are as follows. The primary is indexed\n(using the same "__getitem__()" method as normal subscription) with a\nkey that is constructed from the slice list, as follows. If the slice\nlist contains at least one comma, the key is a tuple containing the\nconversion of the slice items; otherwise, the conversion of the lone\nslice item is the key. The conversion of a slice item that is an\nexpression is that expression. The conversion of a proper slice is a\nslice object (see section *The standard type hierarchy*) whose\n"start", "stop" and "step" attributes are the values of the\nexpressions given as lower bound, upper bound and stride,\nrespectively, substituting "None" for missing expressions.\n', + 'specialattrs': u'\nSpecial Attributes\n******************\n\nThe implementation adds a few special read-only attributes to several\nobject types, where they are relevant. Some of these are not reported\nby the "dir()" built-in function.\n\nobject.__dict__\n\n A dictionary or other mapping object used to store an object\'s\n (writable) attributes.\n\ninstance.__class__\n\n The class to which a class instance belongs.\n\nclass.__bases__\n\n The tuple of base classes of a class object.\n\nclass.__name__\n\n The name of the class or type.\n\nclass.__qualname__\n\n The *qualified name* of the class or type.\n\n New in version 3.3.\n\nclass.__mro__\n\n This attribute is a tuple of classes that are considered when\n looking for base classes during method resolution.\n\nclass.mro()\n\n This method can be overridden by a metaclass to customize the\n method resolution order for its instances. It is called at class\n instantiation, and its result is stored in "__mro__".\n\nclass.__subclasses__()\n\n Each class keeps a list of weak references to its immediate\n subclasses. This method returns a list of all those references\n still alive. Example:\n\n >>> int.__subclasses__()\n []\n\n-[ Footnotes ]-\n\n[1] Additional information on these special methods may be found\n in the Python Reference Manual (*Basic customization*).\n\n[2] As a consequence, the list "[1, 2]" is considered equal to\n "[1.0, 2.0]", and similarly for tuples.\n\n[3] They must have since the parser can\'t tell the type of the\n operands.\n\n[4] Cased characters are those with general category property\n being one of "Lu" (Letter, uppercase), "Ll" (Letter, lowercase),\n or "Lt" (Letter, titlecase).\n\n[5] To format only a tuple you should therefore provide a\n singleton tuple whose only element is the tuple to be formatted.\n', + 'specialnames': u'\nSpecial method names\n********************\n\nA class can implement certain operations that are invoked by special\nsyntax (such as arithmetic operations or subscripting and slicing) by\ndefining methods with special names. This is Python\'s approach to\n*operator overloading*, allowing classes to define their own behavior\nwith respect to language operators. For instance, if a class defines\na method named "__getitem__()", and "x" is an instance of this class,\nthen "x[i]" is roughly equivalent to "type(x).__getitem__(x, i)".\nExcept where mentioned, attempts to execute an operation raise an\nexception when no appropriate method is defined (typically\n"AttributeError" or "TypeError").\n\nWhen implementing a class that emulates any built-in type, it is\nimportant that the emulation only be implemented to the degree that it\nmakes sense for the object being modelled. For example, some\nsequences may work well with retrieval of individual elements, but\nextracting a slice may not make sense. (One example of this is the\n"NodeList" interface in the W3C\'s Document Object Model.)\n\n\nBasic customization\n===================\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. "__new__()" is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of "__new__()" should be the new object instance (usually an\n instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s "__new__()" method using\n "super(currentclass, cls).__new__(cls[, ...])" with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If "__new__()" returns an instance of *cls*, then the new\n instance\'s "__init__()" method will be invoked like\n "__init__(self[, ...])", where *self* is the new instance and the\n remaining arguments are the same as were passed to "__new__()".\n\n If "__new__()" does not return an instance of *cls*, then the new\n instance\'s "__init__()" method will not be invoked.\n\n "__new__()" is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called after the instance has been created (by "__new__()"), but\n before it is returned to the caller. The arguments are those\n passed to the class constructor expression. If a base class has an\n "__init__()" method, the derived class\'s "__init__()" method, if\n any, must explicitly call it to ensure proper initialization of the\n base class part of the instance; for example:\n "BaseClass.__init__(self, [args...])".\n\n Because "__new__()" and "__init__()" work together in constructing\n objects ("__new__()" to create it, and "__init__()" to customise\n it), no non-"None" value may be returned by "__init__()"; doing so\n will cause a "TypeError" to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a "__del__()" method, the\n derived class\'s "__del__()" method, if any, must explicitly call it\n to ensure proper deletion of the base class part of the instance.\n Note that it is possible (though not recommended!) for the\n "__del__()" method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n "__del__()" methods are called for objects that still exist when\n the interpreter exits.\n\n Note: "del x" doesn\'t directly call "x.__del__()" --- the former\n decrements the reference count for "x" by one, and the latter is\n only called when "x"\'s reference count reaches zero. Some common\n situations that may prevent the reference count of an object from\n going to zero include: circular references between objects (e.g.,\n a doubly-linked list or a tree data structure with parent and\n child pointers); a reference to the object on the stack frame of\n a function that caught an exception (the traceback stored in\n "sys.exc_info()[2]" keeps the stack frame alive); or a reference\n to the object on the stack frame that raised an unhandled\n exception in interactive mode (the traceback stored in\n "sys.last_traceback" keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the second can be resolved by freeing the reference to the\n traceback object when it is no longer useful, and the third can\n be resolved by storing "None" in "sys.last_traceback". Circular\n references which are garbage are detected and cleaned up when the\n cyclic garbage collector is enabled (it\'s on by default). Refer\n to the documentation for the "gc" module for more information\n about this topic.\n\n Warning: Due to the precarious circumstances under which\n "__del__()" methods are invoked, exceptions that occur during\n their execution are ignored, and a warning is printed to\n "sys.stderr" instead. Also, when "__del__()" is invoked in\n response to a module being deleted (e.g., when execution of the\n program is done), other globals referenced by the "__del__()"\n method may already have been deleted or in the process of being\n torn down (e.g. the import machinery shutting down). For this\n reason, "__del__()" methods should do the absolute minimum needed\n to maintain external invariants. Starting with version 1.5,\n Python guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the "__del__()" method is called.\n\nobject.__repr__(self)\n\n Called by the "repr()" built-in function to compute the "official"\n string representation of an object. If at all possible, this\n should look like a valid Python expression that could be used to\n recreate an object with the same value (given an appropriate\n environment). If this is not possible, a string of the form\n "<...some useful description...>" should be returned. The return\n value must be a string object. If a class defines "__repr__()" but\n not "__str__()", then "__repr__()" is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by "str(object)" and the built-in functions "format()" and\n "print()" to compute the "informal" or nicely printable string\n representation of an object. The return value must be a *string*\n object.\n\n This method differs from "object.__repr__()" in that there is no\n expectation that "__str__()" return a valid Python expression: a\n more convenient or concise representation can be used.\n\n The default implementation defined by the built-in type "object"\n calls "object.__repr__()".\n\nobject.__bytes__(self)\n\n Called by "bytes()" to compute a byte-string representation of an\n object. This should return a "bytes" object.\n\nobject.__format__(self, format_spec)\n\n Called by the "format()" built-in function (and by extension, the\n "str.format()" method of class "str") to produce a "formatted"\n string representation of an object. The "format_spec" argument is a\n string that contains a description of the formatting options\n desired. The interpretation of the "format_spec" argument is up to\n the type implementing "__format__()", however most classes will\n either delegate formatting to one of the built-in types, or use a\n similar formatting option syntax.\n\n See *Format Specification Mini-Language* for a description of the\n standard formatting syntax.\n\n The return value must be a string object.\n\n Changed in version 3.4: The __format__ method of "object" itself\n raises a "TypeError" if passed any non-empty string.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n These are the so-called "rich comparison" methods. The\n correspondence between operator symbols and method names is as\n follows: "xy" calls\n "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n\n A rich comparison method may return the singleton "NotImplemented"\n if it does not implement the operation for a given pair of\n arguments. By convention, "False" and "True" are returned for a\n successful comparison. However, these methods can return any value,\n so if the comparison operator is used in a Boolean context (e.g.,\n in the condition of an "if" statement), Python will call "bool()"\n on the value to determine if the result is true or false.\n\n By default, "__ne__()" delegates to "__eq__()" and inverts the\n result unless it is "NotImplemented". There are no other implied\n relationships among the comparison operators, for example, the\n truth of "(x.__hash__".\n\n If a class that does not override "__eq__()" wishes to suppress\n hash support, it should include "__hash__ = None" in the class\n definition. A class which defines its own "__hash__()" that\n explicitly raises a "TypeError" would be incorrectly identified as\n hashable by an "isinstance(obj, collections.Hashable)" call.\n\n Note: By default, the "__hash__()" values of str, bytes and\n datetime objects are "salted" with an unpredictable random value.\n Although they remain constant within an individual Python\n process, they are not predictable between repeated invocations of\n Python.This is intended to provide protection against a denial-\n of-service caused by carefully-chosen inputs that exploit the\n worst case performance of a dict insertion, O(n^2) complexity.\n See http://www.ocert.org/advisories/ocert-2011-003.html for\n details.Changing hash values affects the iteration order of\n dicts, sets and other mappings. Python has never made guarantees\n about this ordering (and it typically varies between 32-bit and\n 64-bit builds).See also "PYTHONHASHSEED".\n\n Changed in version 3.3: Hash randomization is enabled by default.\n\nobject.__bool__(self)\n\n Called to implement truth value testing and the built-in operation\n "bool()"; should return "False" or "True". When this method is not\n defined, "__len__()" is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither "__len__()" nor "__bool__()", all its instances are\n considered true.\n\n\nCustomizing attribute access\n============================\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of "x.name") for\nclass instances.\n\nobject.__getattr__(self, name)\n\n Called when an attribute lookup has not found the attribute in the\n usual places (i.e. it is not an instance attribute nor is it found\n in the class tree for "self"). "name" is the attribute name. This\n method should return the (computed) attribute value or raise an\n "AttributeError" exception.\n\n Note that if the attribute is found through the normal mechanism,\n "__getattr__()" is not called. (This is an intentional asymmetry\n between "__getattr__()" and "__setattr__()".) This is done both for\n efficiency reasons and because otherwise "__getattr__()" would have\n no way to access other attributes of the instance. Note that at\n least for instance variables, you can fake total control by not\n inserting any values in the instance attribute dictionary (but\n instead inserting them in another object). See the\n "__getattribute__()" method below for a way to actually get total\n control over attribute access.\n\nobject.__getattribute__(self, name)\n\n Called unconditionally to implement attribute accesses for\n instances of the class. If the class also defines "__getattr__()",\n the latter will not be called unless "__getattribute__()" either\n calls it explicitly or raises an "AttributeError". This method\n should return the (computed) attribute value or raise an\n "AttributeError" exception. In order to avoid infinite recursion in\n this method, its implementation should always call the base class\n method with the same name to access any attributes it needs, for\n example, "object.__getattribute__(self, name)".\n\n Note: This method may still be bypassed when looking up special\n methods as the result of implicit invocation via language syntax\n or built-in functions. See *Special method lookup*.\n\nobject.__setattr__(self, name, value)\n\n Called when an attribute assignment is attempted. This is called\n instead of the normal mechanism (i.e. store the value in the\n instance dictionary). *name* is the attribute name, *value* is the\n value to be assigned to it.\n\n If "__setattr__()" wants to assign to an instance attribute, it\n should call the base class method with the same name, for example,\n "object.__setattr__(self, name, value)".\n\nobject.__delattr__(self, name)\n\n Like "__setattr__()" but for attribute deletion instead of\n assignment. This should only be implemented if "del obj.name" is\n meaningful for the object.\n\nobject.__dir__(self)\n\n Called when "dir()" is called on the object. A sequence must be\n returned. "dir()" converts the returned sequence to a list and\n sorts it.\n\n\nImplementing Descriptors\n------------------------\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in an\n*owner* class (the descriptor must be in either the owner\'s class\ndictionary or in the class dictionary for one of its parents). In the\nexamples below, "the attribute" refers to the attribute whose name is\nthe key of the property in the owner class\' "__dict__".\n\nobject.__get__(self, instance, owner)\n\n Called to get the attribute of the owner class (class attribute\n access) or of an instance of that class (instance attribute\n access). *owner* is always the owner class, while *instance* is the\n instance that the attribute was accessed through, or "None" when\n the attribute is accessed through the *owner*. This method should\n return the (computed) attribute value or raise an "AttributeError"\n exception.\n\nobject.__set__(self, instance, value)\n\n Called to set the attribute on an instance *instance* of the owner\n class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n Called to delete the attribute on an instance *instance* of the\n owner class.\n\nThe attribute "__objclass__" is interpreted by the "inspect" module as\nspecifying the class where this object was defined (setting this\nappropriately can assist in runtime introspection of dynamic class\nattributes). For callables, it may indicate that an instance of the\ngiven type (or a subclass) is expected or required as the first\npositional argument (for example, CPython sets this attribute for\nunbound methods that are implemented in C).\n\n\nInvoking Descriptors\n--------------------\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol: "__get__()", "__set__()", and\n"__delete__()". If any of those methods are defined for an object, it\nis said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, "a.x" has a\nlookup chain starting with "a.__dict__[\'x\']", then\n"type(a).__dict__[\'x\']", and continuing through the base classes of\n"type(a)" excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead. Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called.\n\nThe starting point for descriptor invocation is a binding, "a.x". How\nthe arguments are assembled depends on "a":\n\nDirect Call\n The simplest and least common call is when user code directly\n invokes a descriptor method: "x.__get__(a)".\n\nInstance Binding\n If binding to an object instance, "a.x" is transformed into the\n call: "type(a).__dict__[\'x\'].__get__(a, type(a))".\n\nClass Binding\n If binding to a class, "A.x" is transformed into the call:\n "A.__dict__[\'x\'].__get__(None, A)".\n\nSuper Binding\n If "a" is an instance of "super", then the binding "super(B,\n obj).m()" searches "obj.__class__.__mro__" for the base class "A"\n immediately preceding "B" and then invokes the descriptor with the\n call: "A.__dict__[\'m\'].__get__(obj, obj.__class__)".\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined. A descriptor can define\nany combination of "__get__()", "__set__()" and "__delete__()". If it\ndoes not define "__get__()", then accessing the attribute will return\nthe descriptor object itself unless there is a value in the object\'s\ninstance dictionary. If the descriptor defines "__set__()" and/or\n"__delete__()", it is a data descriptor; if it defines neither, it is\na non-data descriptor. Normally, data descriptors define both\n"__get__()" and "__set__()", while non-data descriptors have just the\n"__get__()" method. Data descriptors with "__set__()" and "__get__()"\ndefined always override a redefinition in an instance dictionary. In\ncontrast, non-data descriptors can be overridden by instances.\n\nPython methods (including "staticmethod()" and "classmethod()") are\nimplemented as non-data descriptors. Accordingly, instances can\nredefine and override methods. This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe "property()" function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n---------\n\nBy default, instances of classes have a dictionary for attribute\nstorage. This wastes space for objects having very few instance\nvariables. The space consumption can become acute when creating large\nnumbers of instances.\n\nThe default can be overridden by defining *__slots__* in a class\ndefinition. The *__slots__* declaration takes a sequence of instance\nvariables and reserves just enough space in each instance to hold a\nvalue for each variable. Space is saved because *__dict__* is not\ncreated for each instance.\n\nobject.__slots__\n\n This class variable can be assigned a string, iterable, or sequence\n of strings with variable names used by instances. *__slots__*\n reserves space for the declared variables and prevents the\n automatic creation of *__dict__* and *__weakref__* for each\n instance.\n\n\nNotes on using *__slots__*\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n attribute of that class will always be accessible, so a *__slots__*\n definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n variables not listed in the *__slots__* definition. Attempts to\n assign to an unlisted variable name raises "AttributeError". If\n dynamic assignment of new variables is desired, then add\n "\'__dict__\'" to the sequence of strings in the *__slots__*\n declaration.\n\n* Without a *__weakref__* variable for each instance, classes\n defining *__slots__* do not support weak references to its\n instances. If weak reference support is needed, then add\n "\'__weakref__\'" to the sequence of strings in the *__slots__*\n declaration.\n\n* *__slots__* are implemented at the class level by creating\n descriptors (*Implementing Descriptors*) for each variable name. As\n a result, class attributes cannot be used to set default values for\n instance variables defined by *__slots__*; otherwise, the class\n attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n where it is defined. As a result, subclasses will have a *__dict__*\n unless they also define *__slots__* (which must only contain names\n of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the\n instance variable defined by the base class slot is inaccessible\n (except by retrieving its descriptor directly from the base class).\n This renders the meaning of the program undefined. In the future, a\n check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n "variable-length" built-in types such as "int", "bytes" and "tuple".\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings\n may also be used; however, in the future, special meaning may be\n assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n *__slots__*.\n\n\nCustomizing class creation\n==========================\n\nBy default, classes are constructed using "type()". The class body is\nexecuted in a new namespace and the class name is bound locally to the\nresult of "type(name, bases, namespace)".\n\nThe class creation process can be customised by passing the\n"metaclass" keyword argument in the class definition line, or by\ninheriting from an existing class that included such an argument. In\nthe following example, both "MyClass" and "MySubclass" are instances\nof "Meta":\n\n class Meta(type):\n pass\n\n class MyClass(metaclass=Meta):\n pass\n\n class MySubclass(MyClass):\n pass\n\nAny other keyword arguments that are specified in the class definition\nare passed through to all metaclass operations described below.\n\nWhen a class definition is executed, the following steps occur:\n\n* the appropriate metaclass is determined\n\n* the class namespace is prepared\n\n* the class body is executed\n\n* the class object is created\n\n\nDetermining the appropriate metaclass\n-------------------------------------\n\nThe appropriate metaclass for a class definition is determined as\nfollows:\n\n* if no bases and no explicit metaclass are given, then "type()" is\n used\n\n* if an explicit metaclass is given and it is *not* an instance of\n "type()", then it is used directly as the metaclass\n\n* if an instance of "type()" is given as the explicit metaclass, or\n bases are defined, then the most derived metaclass is used\n\nThe most derived metaclass is selected from the explicitly specified\nmetaclass (if any) and the metaclasses (i.e. "type(cls)") of all\nspecified base classes. The most derived metaclass is one which is a\nsubtype of *all* of these candidate metaclasses. If none of the\ncandidate metaclasses meets that criterion, then the class definition\nwill fail with "TypeError".\n\n\nPreparing the class namespace\n-----------------------------\n\nOnce the appropriate metaclass has been identified, then the class\nnamespace is prepared. If the metaclass has a "__prepare__" attribute,\nit is called as "namespace = metaclass.__prepare__(name, bases,\n**kwds)" (where the additional keyword arguments, if any, come from\nthe class definition).\n\nIf the metaclass has no "__prepare__" attribute, then the class\nnamespace is initialised as an empty "dict()" instance.\n\nSee also: **PEP 3115** - Metaclasses in Python 3000\n\n Introduced the "__prepare__" namespace hook\n\n\nExecuting the class body\n------------------------\n\nThe class body is executed (approximately) as "exec(body, globals(),\nnamespace)". The key difference from a normal call to "exec()" is that\nlexical scoping allows the class body (including any methods) to\nreference names from the current and outer scopes when the class\ndefinition occurs inside a function.\n\nHowever, even when the class definition occurs inside the function,\nmethods defined inside the class still cannot see names defined at the\nclass scope. Class variables must be accessed through the first\nparameter of instance or class methods, and cannot be accessed at all\nfrom static methods.\n\n\nCreating the class object\n-------------------------\n\nOnce the class namespace has been populated by executing the class\nbody, the class object is created by calling "metaclass(name, bases,\nnamespace, **kwds)" (the additional keywords passed here are the same\nas those passed to "__prepare__").\n\nThis class object is the one that will be referenced by the zero-\nargument form of "super()". "__class__" is an implicit closure\nreference created by the compiler if any methods in a class body refer\nto either "__class__" or "super". This allows the zero argument form\nof "super()" to correctly identify the class being defined based on\nlexical scoping, while the class or instance that was used to make the\ncurrent call is identified based on the first argument passed to the\nmethod.\n\nAfter the class object is created, it is passed to the class\ndecorators included in the class definition (if any) and the resulting\nobject is bound in the local namespace as the defined class.\n\nWhen a new class is created by "type.__new__", the object provided as\nthe namespace parameter is copied to a standard Python dictionary and\nthe original object is discarded. The new copy becomes the "__dict__"\nattribute of the class object.\n\nSee also: **PEP 3135** - New super\n\n Describes the implicit "__class__" closure reference\n\n\nMetaclass example\n-----------------\n\nThe potential uses for metaclasses are boundless. Some ideas that have\nbeen explored include logging, interface checking, automatic\ndelegation, automatic property creation, proxies, frameworks, and\nautomatic resource locking/synchronization.\n\nHere is an example of a metaclass that uses an\n"collections.OrderedDict" to remember the order that class variables\nare defined:\n\n class OrderedClass(type):\n\n @classmethod\n def __prepare__(metacls, name, bases, **kwds):\n return collections.OrderedDict()\n\n def __new__(cls, name, bases, namespace, **kwds):\n result = type.__new__(cls, name, bases, dict(namespace))\n result.members = tuple(namespace)\n return result\n\n class A(metaclass=OrderedClass):\n def one(self): pass\n def two(self): pass\n def three(self): pass\n def four(self): pass\n\n >>> A.members\n (\'__module__\', \'one\', \'two\', \'three\', \'four\')\n\nWhen the class definition for *A* gets executed, the process begins\nwith calling the metaclass\'s "__prepare__()" method which returns an\nempty "collections.OrderedDict". That mapping records the methods and\nattributes of *A* as they are defined within the body of the class\nstatement. Once those definitions are executed, the ordered dictionary\nis fully populated and the metaclass\'s "__new__()" method gets\ninvoked. That method builds the new type and it saves the ordered\ndictionary keys in an attribute called "members".\n\n\nCustomizing instance and subclass checks\n========================================\n\nThe following methods are used to override the default behavior of the\n"isinstance()" and "issubclass()" built-in functions.\n\nIn particular, the metaclass "abc.ABCMeta" implements these methods in\norder to allow the addition of Abstract Base Classes (ABCs) as\n"virtual base classes" to any class or type (including built-in\ntypes), including other ABCs.\n\nclass.__instancecheck__(self, instance)\n\n Return true if *instance* should be considered a (direct or\n indirect) instance of *class*. If defined, called to implement\n "isinstance(instance, class)".\n\nclass.__subclasscheck__(self, subclass)\n\n Return true if *subclass* should be considered a (direct or\n indirect) subclass of *class*. If defined, called to implement\n "issubclass(subclass, class)".\n\nNote that these methods are looked up on the type (metaclass) of a\nclass. They cannot be defined as class methods in the actual class.\nThis is consistent with the lookup of special methods that are called\non instances, only in this case the instance is itself a class.\n\nSee also: **PEP 3119** - Introducing Abstract Base Classes\n\n Includes the specification for customizing "isinstance()" and\n "issubclass()" behavior through "__instancecheck__()" and\n "__subclasscheck__()", with motivation for this functionality in\n the context of adding Abstract Base Classes (see the "abc"\n module) to the language.\n\n\nEmulating callable objects\n==========================\n\nobject.__call__(self[, args...])\n\n Called when the instance is "called" as a function; if this method\n is defined, "x(arg1, arg2, ...)" is a shorthand for\n "x.__call__(arg1, arg2, ...)".\n\n\nEmulating container types\n=========================\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which "0 <= k < N" where\n*N* is the length of the sequence, or slice objects, which define a\nrange of items. It is also recommended that mappings provide the\nmethods "keys()", "values()", "items()", "get()", "clear()",\n"setdefault()", "pop()", "popitem()", "copy()", and "update()"\nbehaving similar to those for Python\'s standard dictionary objects.\nThe "collections" module provides a "MutableMapping" abstract base\nclass to help create those methods from a base set of "__getitem__()",\n"__setitem__()", "__delitem__()", and "keys()". Mutable sequences\nshould provide methods "append()", "count()", "index()", "extend()",\n"insert()", "pop()", "remove()", "reverse()" and "sort()", like Python\nstandard list objects. Finally, sequence types should implement\naddition (meaning concatenation) and multiplication (meaning\nrepetition) by defining the methods "__add__()", "__radd__()",\n"__iadd__()", "__mul__()", "__rmul__()" and "__imul__()" described\nbelow; they should not define other numerical operators. It is\nrecommended that both mappings and sequences implement the\n"__contains__()" method to allow efficient use of the "in" operator;\nfor mappings, "in" should search the mapping\'s keys; for sequences, it\nshould search through the values. It is further recommended that both\nmappings and sequences implement the "__iter__()" method to allow\nefficient iteration through the container; for mappings, "__iter__()"\nshould be the same as "keys()"; for sequences, it should iterate\nthrough the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function "len()". Should return\n the length of the object, an integer ">=" 0. Also, an object that\n doesn\'t define a "__bool__()" method and whose "__len__()" method\n returns zero is considered to be false in a Boolean context.\n\nobject.__length_hint__(self)\n\n Called to implement "operator.length_hint()". Should return an\n estimated length for the object (which may be greater or less than\n the actual length). The length must be an integer ">=" 0. This\n method is purely an optimization and is never required for\n correctness.\n\n New in version 3.4.\n\nNote: Slicing is done exclusively with the following three methods.\n A call like\n\n a[1:2] = b\n\n is translated to\n\n a[slice(1, 2, None)] = b\n\n and so forth. Missing slice items are always filled in with "None".\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of "self[key]". For sequence types,\n the accepted keys should be integers and slice objects. Note that\n the special interpretation of negative indexes (if the class wishes\n to emulate a sequence type) is up to the "__getitem__()" method. If\n *key* is of an inappropriate type, "TypeError" may be raised; if of\n a value outside the set of indexes for the sequence (after any\n special interpretation of negative values), "IndexError" should be\n raised. For mapping types, if *key* is missing (not in the\n container), "KeyError" should be raised.\n\n Note: "for" loops expect that an "IndexError" will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__missing__(self, key)\n\n Called by "dict"."__getitem__()" to implement "self[key]" for dict\n subclasses when key is not in the dictionary.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to "self[key]". Same note as for\n "__getitem__()". This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the "__getitem__()" method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of "self[key]". Same note as for\n "__getitem__()". This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the "__getitem__()" method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the "reversed()" built-in to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the "__reversed__()" method is not provided, the "reversed()"\n built-in will fall back to using the sequence protocol ("__len__()"\n and "__getitem__()"). Objects that support the sequence protocol\n should only provide "__reversed__()" if they can provide an\n implementation that is more efficient than the one provided by\n "reversed()".\n\nThe membership test operators ("in" and "not in") are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n\n For objects that don\'t define "__contains__()", the membership test\n first tries iteration via "__iter__()", then the old sequence\n iteration protocol via "__getitem__()", see *this section in the\n language reference*.\n\n\nEmulating numeric types\n=======================\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__matmul__(self, other)\nobject.__truediv__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations ("+", "-", "*", "@", "/", "//", "%", "divmod()",\n "pow()", "**", "<<", ">>", "&", "^", "|"). For instance, to\n evaluate the expression "x + y", where *x* is an instance of a\n class that has an "__add__()" method, "x.__add__(y)" is called.\n The "__divmod__()" method should be the equivalent to using\n "__floordiv__()" and "__mod__()"; it should not be related to\n "__truediv__()". Note that "__pow__()" should be defined to accept\n an optional third argument if the ternary version of the built-in\n "pow()" function is to be supported.\n\n If one of those methods does not support the operation with the\n supplied arguments, it should return "NotImplemented".\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rmatmul__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations ("+", "-", "*", "@", "/", "//", "%", "divmod()",\n "pow()", "**", "<<", ">>", "&", "^", "|") with reflected (swapped)\n operands. These functions are only called if the left operand does\n not support the corresponding operation and the operands are of\n different types. [2] For instance, to evaluate the expression "x -\n y", where *y* is an instance of a class that has an "__rsub__()"\n method, "y.__rsub__(x)" is called if "x.__sub__(y)" returns\n *NotImplemented*.\n\n Note that ternary "pow()" will not try calling "__rpow__()" (the\n coercion rules would become too complicated).\n\n Note: If the right operand\'s type is a subclass of the left\n operand\'s type and that subclass provides the reflected method\n for the operation, this method will be called before the left\n operand\'s non-reflected method. This behavior allows subclasses\n to override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__imatmul__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n These methods are called to implement the augmented arithmetic\n assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", "**=",\n "<<=", ">>=", "&=", "^=", "|="). These methods should attempt to\n do the operation in-place (modifying *self*) and return the result\n (which could be, but does not have to be, *self*). If a specific\n method is not defined, the augmented assignment falls back to the\n normal methods. For instance, if *x* is an instance of a class\n with an "__iadd__()" method, "x += y" is equivalent to "x =\n x.__iadd__(y)" . Otherwise, "x.__add__(y)" and "y.__radd__(x)" are\n considered, as with the evaluation of "x + y". In certain\n situations, augmented assignment can result in unexpected errors\n (see *Why does a_tuple[i] += [\'item\'] raise an exception when the\n addition works?*), but this behavior is in fact part of the data\n model.\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n Called to implement the unary arithmetic operations ("-", "+",\n "abs()" and "~").\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__float__(self)\nobject.__round__(self[, n])\n\n Called to implement the built-in functions "complex()", "int()",\n "float()" and "round()". Should return a value of the appropriate\n type.\n\nobject.__index__(self)\n\n Called to implement "operator.index()", and whenever Python needs\n to losslessly convert the numeric object to an integer object (such\n as in slicing, or in the built-in "bin()", "hex()" and "oct()"\n functions). Presence of this method indicates that the numeric\n object is an integer type. Must return an integer.\n\n Note: In order to have a coherent integer type class, when\n "__index__()" is defined "__int__()" should also be defined, and\n both should return the same value.\n\n\nWith Statement Context Managers\n===============================\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a "with" statement. The context manager\nhandles the entry into, and the exit from, the desired runtime context\nfor the execution of the block of code. Context managers are normally\ninvoked using the "with" statement (described in section *The with\nstatement*), but can also be used by directly invoking their methods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n Enter the runtime context related to this object. The "with"\n statement will bind this method\'s return value to the target(s)\n specified in the "as" clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n Exit the runtime context related to this object. The parameters\n describe the exception that caused the context to be exited. If the\n context was exited without an exception, all three arguments will\n be "None".\n\n If an exception is supplied, and the method wishes to suppress the\n exception (i.e., prevent it from being propagated), it should\n return a true value. Otherwise, the exception will be processed\n normally upon exit from this method.\n\n Note that "__exit__()" methods should not reraise the passed-in\n exception; this is the caller\'s responsibility.\n\nSee also: **PEP 343** - The "with" statement\n\n The specification, background, and examples for the Python "with"\n statement.\n\n\nSpecial method lookup\n=====================\n\nFor custom classes, implicit invocations of special methods are only\nguaranteed to work correctly if defined on an object\'s type, not in\nthe object\'s instance dictionary. That behaviour is the reason why\nthe following code raises an exception:\n\n >>> class C:\n ... pass\n ...\n >>> c = C()\n >>> c.__len__ = lambda: 5\n >>> len(c)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: object of type \'C\' has no len()\n\nThe rationale behind this behaviour lies with a number of special\nmethods such as "__hash__()" and "__repr__()" that are implemented by\nall objects, including type objects. If the implicit lookup of these\nmethods used the conventional lookup process, they would fail when\ninvoked on the type object itself:\n\n >>> 1 .__hash__() == hash(1)\n True\n >>> int.__hash__() == hash(int)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: descriptor \'__hash__\' of \'int\' object needs an argument\n\nIncorrectly attempting to invoke an unbound method of a class in this\nway is sometimes referred to as \'metaclass confusion\', and is avoided\nby bypassing the instance when looking up special methods:\n\n >>> type(1).__hash__(1) == hash(1)\n True\n >>> type(int).__hash__(int) == hash(int)\n True\n\nIn addition to bypassing any instance attributes in the interest of\ncorrectness, implicit special method lookup generally also bypasses\nthe "__getattribute__()" method even of the object\'s metaclass:\n\n >>> class Meta(type):\n ... def __getattribute__(*args):\n ... print("Metaclass getattribute invoked")\n ... return type.__getattribute__(*args)\n ...\n >>> class C(object, metaclass=Meta):\n ... def __len__(self):\n ... return 10\n ... def __getattribute__(*args):\n ... print("Class getattribute invoked")\n ... return object.__getattribute__(*args)\n ...\n >>> c = C()\n >>> c.__len__() # Explicit lookup via instance\n Class getattribute invoked\n 10\n >>> type(c).__len__(c) # Explicit lookup via type\n Metaclass getattribute invoked\n 10\n >>> len(c) # Implicit lookup\n 10\n\nBypassing the "__getattribute__()" machinery in this fashion provides\nsignificant scope for speed optimisations within the interpreter, at\nthe cost of some flexibility in the handling of special methods (the\nspecial method *must* be set on the class object itself in order to be\nconsistently invoked by the interpreter).\n', + 'string-methods': u'\nString Methods\n**************\n\nStrings implement all of the *common* sequence operations, along with\nthe additional methods described below.\n\nStrings also support two styles of string formatting, one providing a\nlarge degree of flexibility and customization (see "str.format()",\n*Format String Syntax* and *Custom String Formatting*) and the other\nbased on C "printf" style formatting that handles a narrower range of\ntypes and is slightly harder to use correctly, but is often faster for\nthe cases it can handle (*printf-style String Formatting*).\n\nThe *Text Processing Services* section of the standard library covers\na number of other modules that provide various text related utilities\n(including regular expression support in the "re" module).\n\nstr.capitalize()\n\n Return a copy of the string with its first character capitalized\n and the rest lowercased.\n\nstr.casefold()\n\n Return a casefolded copy of the string. Casefolded strings may be\n used for caseless matching.\n\n Casefolding is similar to lowercasing but more aggressive because\n it is intended to remove all case distinctions in a string. For\n example, the German lowercase letter "\'\xdf\'" is equivalent to ""ss"".\n Since it is already lowercase, "lower()" would do nothing to "\'\xdf\'";\n "casefold()" converts it to ""ss"".\n\n The casefolding algorithm is described in section 3.13 of the\n Unicode Standard.\n\n New in version 3.3.\n\nstr.center(width[, fillchar])\n\n Return centered in a string of length *width*. Padding is done\n using the specified *fillchar* (default is an ASCII space). The\n original string is returned if *width* is less than or equal to\n "len(s)".\n\nstr.count(sub[, start[, end]])\n\n Return the number of non-overlapping occurrences of substring *sub*\n in the range [*start*, *end*]. Optional arguments *start* and\n *end* are interpreted as in slice notation.\n\nstr.encode(encoding="utf-8", errors="strict")\n\n Return an encoded version of the string as a bytes object. Default\n encoding is "\'utf-8\'". *errors* may be given to set a different\n error handling scheme. The default for *errors* is "\'strict\'",\n meaning that encoding errors raise a "UnicodeError". Other possible\n values are "\'ignore\'", "\'replace\'", "\'xmlcharrefreplace\'",\n "\'backslashreplace\'" and any other name registered via\n "codecs.register_error()", see section *Error Handlers*. For a list\n of possible encodings, see section *Standard Encodings*.\n\n Changed in version 3.1: Support for keyword arguments added.\n\nstr.endswith(suffix[, start[, end]])\n\n Return "True" if the string ends with the specified *suffix*,\n otherwise return "False". *suffix* can also be a tuple of suffixes\n to look for. With optional *start*, test beginning at that\n position. With optional *end*, stop comparing at that position.\n\nstr.expandtabs(tabsize=8)\n\n Return a copy of the string where all tab characters are replaced\n by one or more spaces, depending on the current column and the\n given tab size. Tab positions occur every *tabsize* characters\n (default is 8, giving tab positions at columns 0, 8, 16 and so on).\n To expand the string, the current column is set to zero and the\n string is examined character by character. If the character is a\n tab ("\\t"), one or more space characters are inserted in the result\n until the current column is equal to the next tab position. (The\n tab character itself is not copied.) If the character is a newline\n ("\\n") or return ("\\r"), it is copied and the current column is\n reset to zero. Any other character is copied unchanged and the\n current column is incremented by one regardless of how the\n character is represented when printed.\n\n >>> \'01\\t012\\t0123\\t01234\'.expandtabs()\n \'01 012 0123 01234\'\n >>> \'01\\t012\\t0123\\t01234\'.expandtabs(4)\n \'01 012 0123 01234\'\n\nstr.find(sub[, start[, end]])\n\n Return the lowest index in the string where substring *sub* is\n found within the slice "s[start:end]". Optional arguments *start*\n and *end* are interpreted as in slice notation. Return "-1" if\n *sub* is not found.\n\n Note: The "find()" method should be used only if you need to know\n the position of *sub*. To check if *sub* is a substring or not,\n use the "in" operator:\n\n >>> \'Py\' in \'Python\'\n True\n\nstr.format(*args, **kwargs)\n\n Perform a string formatting operation. The string on which this\n method is called can contain literal text or replacement fields\n delimited by braces "{}". Each replacement field contains either\n the numeric index of a positional argument, or the name of a\n keyword argument. Returns a copy of the string where each\n replacement field is replaced with the string value of the\n corresponding argument.\n\n >>> "The sum of 1 + 2 is {0}".format(1+2)\n \'The sum of 1 + 2 is 3\'\n\n See *Format String Syntax* for a description of the various\n formatting options that can be specified in format strings.\n\nstr.format_map(mapping)\n\n Similar to "str.format(**mapping)", except that "mapping" is used\n directly and not copied to a "dict". This is useful if for example\n "mapping" is a dict subclass:\n\n >>> class Default(dict):\n ... def __missing__(self, key):\n ... return key\n ...\n >>> \'{name} was born in {country}\'.format_map(Default(name=\'Guido\'))\n \'Guido was born in country\'\n\n New in version 3.2.\n\nstr.index(sub[, start[, end]])\n\n Like "find()", but raise "ValueError" when the substring is not\n found.\n\nstr.isalnum()\n\n Return true if all characters in the string are alphanumeric and\n there is at least one character, false otherwise. A character "c"\n is alphanumeric if one of the following returns "True":\n "c.isalpha()", "c.isdecimal()", "c.isdigit()", or "c.isnumeric()".\n\nstr.isalpha()\n\n Return true if all characters in the string are alphabetic and\n there is at least one character, false otherwise. Alphabetic\n characters are those characters defined in the Unicode character\n database as "Letter", i.e., those with general category property\n being one of "Lm", "Lt", "Lu", "Ll", or "Lo". Note that this is\n different from the "Alphabetic" property defined in the Unicode\n Standard.\n\nstr.isdecimal()\n\n Return true if all characters in the string are decimal characters\n and there is at least one character, false otherwise. Decimal\n characters are those from general category "Nd". This category\n includes digit characters, and all characters that can be used to\n form decimal-radix numbers, e.g. U+0660, ARABIC-INDIC DIGIT ZERO.\n\nstr.isdigit()\n\n Return true if all characters in the string are digits and there is\n at least one character, false otherwise. Digits include decimal\n characters and digits that need special handling, such as the\n compatibility superscript digits. Formally, a digit is a character\n that has the property value Numeric_Type=Digit or\n Numeric_Type=Decimal.\n\nstr.isidentifier()\n\n Return true if the string is a valid identifier according to the\n language definition, section *Identifiers and keywords*.\n\n Use "keyword.iskeyword()" to test for reserved identifiers such as\n "def" and "class".\n\nstr.islower()\n\n Return true if all cased characters [4] in the string are lowercase\n and there is at least one cased character, false otherwise.\n\nstr.isnumeric()\n\n Return true if all characters in the string are numeric characters,\n and there is at least one character, false otherwise. Numeric\n characters include digit characters, and all characters that have\n the Unicode numeric value property, e.g. U+2155, VULGAR FRACTION\n ONE FIFTH. Formally, numeric characters are those with the\n property value Numeric_Type=Digit, Numeric_Type=Decimal or\n Numeric_Type=Numeric.\n\nstr.isprintable()\n\n Return true if all characters in the string are printable or the\n string is empty, false otherwise. Nonprintable characters are\n those characters defined in the Unicode character database as\n "Other" or "Separator", excepting the ASCII space (0x20) which is\n considered printable. (Note that printable characters in this\n context are those which should not be escaped when "repr()" is\n invoked on a string. It has no bearing on the handling of strings\n written to "sys.stdout" or "sys.stderr".)\n\nstr.isspace()\n\n Return true if there are only whitespace characters in the string\n and there is at least one character, false otherwise. Whitespace\n characters are those characters defined in the Unicode character\n database as "Other" or "Separator" and those with bidirectional\n property being one of "WS", "B", or "S".\n\nstr.istitle()\n\n Return true if the string is a titlecased string and there is at\n least one character, for example uppercase characters may only\n follow uncased characters and lowercase characters only cased ones.\n Return false otherwise.\n\nstr.isupper()\n\n Return true if all cased characters [4] in the string are uppercase\n and there is at least one cased character, false otherwise.\n\nstr.join(iterable)\n\n Return a string which is the concatenation of the strings in the\n *iterable* *iterable*. A "TypeError" will be raised if there are\n any non-string values in *iterable*, including "bytes" objects.\n The separator between elements is the string providing this method.\n\nstr.ljust(width[, fillchar])\n\n Return the string left justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is an ASCII\n space). The original string is returned if *width* is less than or\n equal to "len(s)".\n\nstr.lower()\n\n Return a copy of the string with all the cased characters [4]\n converted to lowercase.\n\n The lowercasing algorithm used is described in section 3.13 of the\n Unicode Standard.\n\nstr.lstrip([chars])\n\n Return a copy of the string with leading characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or "None", the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a prefix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.lstrip()\n \'spacious \'\n >>> \'www.example.com\'.lstrip(\'cmowz.\')\n \'example.com\'\n\nstatic str.maketrans(x[, y[, z]])\n\n This static method returns a translation table usable for\n "str.translate()".\n\n If there is only one argument, it must be a dictionary mapping\n Unicode ordinals (integers) or characters (strings of length 1) to\n Unicode ordinals, strings (of arbitrary lengths) or None.\n Character keys will then be converted to ordinals.\n\n If there are two arguments, they must be strings of equal length,\n and in the resulting dictionary, each character in x will be mapped\n to the character at the same position in y. If there is a third\n argument, it must be a string, whose characters will be mapped to\n None in the result.\n\nstr.partition(sep)\n\n Split the string at the first occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing the string itself, followed by\n two empty strings.\n\nstr.replace(old, new[, count])\n\n Return a copy of the string with all occurrences of substring *old*\n replaced by *new*. If the optional argument *count* is given, only\n the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n Return the highest index in the string where substring *sub* is\n found, such that *sub* is contained within "s[start:end]".\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return "-1" on failure.\n\nstr.rindex(sub[, start[, end]])\n\n Like "rfind()" but raises "ValueError" when the substring *sub* is\n not found.\n\nstr.rjust(width[, fillchar])\n\n Return the string right justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is an ASCII\n space). The original string is returned if *width* is less than or\n equal to "len(s)".\n\nstr.rpartition(sep)\n\n Split the string at the last occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing two empty strings, followed by\n the string itself.\n\nstr.rsplit(sep=None, maxsplit=-1)\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n are done, the *rightmost* ones. If *sep* is not specified or\n "None", any whitespace string is a separator. Except for splitting\n from the right, "rsplit()" behaves like "split()" which is\n described in detail below.\n\nstr.rstrip([chars])\n\n Return a copy of the string with trailing characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or "None", the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a suffix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.rstrip()\n \' spacious\'\n >>> \'mississippi\'.rstrip(\'ipz\')\n \'mississ\'\n\nstr.split(sep=None, maxsplit=-1)\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit*\n splits are done (thus, the list will have at most "maxsplit+1"\n elements). If *maxsplit* is not specified or "-1", then there is\n no limit on the number of splits (all possible splits are made).\n\n If *sep* is given, consecutive delimiters are not grouped together\n and are deemed to delimit empty strings (for example,\n "\'1,,2\'.split(\',\')" returns "[\'1\', \'\', \'2\']"). The *sep* argument\n may consist of multiple characters (for example,\n "\'1<>2<>3\'.split(\'<>\')" returns "[\'1\', \'2\', \'3\']"). Splitting an\n empty string with a specified separator returns "[\'\']".\n\n For example:\n\n >>> \'1,2,3\'.split(\',\')\n [\'1\', \'2\', \'3\']\n >>> \'1,2,3\'.split(\',\', maxsplit=1)\n [\'1\', \'2,3\']\n >>> \'1,2,,3,\'.split(\',\')\n [\'1\', \'2\', \'\', \'3\', \'\']\n\n If *sep* is not specified or is "None", a different splitting\n algorithm is applied: runs of consecutive whitespace are regarded\n as a single separator, and the result will contain no empty strings\n at the start or end if the string has leading or trailing\n whitespace. Consequently, splitting an empty string or a string\n consisting of just whitespace with a "None" separator returns "[]".\n\n For example:\n\n >>> \'1 2 3\'.split()\n [\'1\', \'2\', \'3\']\n >>> \'1 2 3\'.split(maxsplit=1)\n [\'1\', \'2 3\']\n >>> \' 1 2 3 \'.split()\n [\'1\', \'2\', \'3\']\n\nstr.splitlines([keepends])\n\n Return a list of the lines in the string, breaking at line\n boundaries. Line breaks are not included in the resulting list\n unless *keepends* is given and true.\n\n This method splits on the following line boundaries. In\n particular, the boundaries are a superset of *universal newlines*.\n\n +-------------------------+-------------------------------+\n | Representation | Description |\n +=========================+===============================+\n | "\\n" | Line Feed |\n +-------------------------+-------------------------------+\n | "\\r" | Carriage Return |\n +-------------------------+-------------------------------+\n | "\\r\\n" | Carriage Return + Line Feed |\n +-------------------------+-------------------------------+\n | "\\v" or "\\x0b" | Line Tabulation |\n +-------------------------+-------------------------------+\n | "\\f" or "\\x0c" | Form Feed |\n +-------------------------+-------------------------------+\n | "\\x1c" | File Separator |\n +-------------------------+-------------------------------+\n | "\\x1d" | Group Separator |\n +-------------------------+-------------------------------+\n | "\\x1e" | Record Separator |\n +-------------------------+-------------------------------+\n | "\\x85" | Next Line (C1 Control Code) |\n +-------------------------+-------------------------------+\n | "\\u2028" | Line Separator |\n +-------------------------+-------------------------------+\n | "\\u2029" | Paragraph Separator |\n +-------------------------+-------------------------------+\n\n Changed in version 3.2: "\\v" and "\\f" added to list of line\n boundaries.\n\n For example:\n\n >>> \'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines()\n [\'ab c\', \'\', \'de fg\', \'kl\']\n >>> \'ab c\\n\\nde fg\\rkl\\r\\n\'.splitlines(keepends=True)\n [\'ab c\\n\', \'\\n\', \'de fg\\r\', \'kl\\r\\n\']\n\n Unlike "split()" when a delimiter string *sep* is given, this\n method returns an empty list for the empty string, and a terminal\n line break does not result in an extra line:\n\n >>> "".splitlines()\n []\n >>> "One line\\n".splitlines()\n [\'One line\']\n\n For comparison, "split(\'\\n\')" gives:\n\n >>> \'\'.split(\'\\n\')\n [\'\']\n >>> \'Two lines\\n\'.split(\'\\n\')\n [\'Two lines\', \'\']\n\nstr.startswith(prefix[, start[, end]])\n\n Return "True" if string starts with the *prefix*, otherwise return\n "False". *prefix* can also be a tuple of prefixes to look for.\n With optional *start*, test string beginning at that position.\n With optional *end*, stop comparing string at that position.\n\nstr.strip([chars])\n\n Return a copy of the string with the leading and trailing\n characters removed. The *chars* argument is a string specifying the\n set of characters to be removed. If omitted or "None", the *chars*\n argument defaults to removing whitespace. The *chars* argument is\n not a prefix or suffix; rather, all combinations of its values are\n stripped:\n\n >>> \' spacious \'.strip()\n \'spacious\'\n >>> \'www.example.com\'.strip(\'cmowz.\')\n \'example\'\n\n The outermost leading and trailing *chars* argument values are\n stripped from the string. Characters are removed from the leading\n end until reaching a string character that is not contained in the\n set of characters in *chars*. A similar action takes place on the\n trailing end. For example:\n\n >>> comment_string = \'#....... Section 3.2.1 Issue #32 .......\'\n >>> comment_string.strip(\'.#! \')\n \'Section 3.2.1 Issue #32\'\n\nstr.swapcase()\n\n Return a copy of the string with uppercase characters converted to\n lowercase and vice versa. Note that it is not necessarily true that\n "s.swapcase().swapcase() == s".\n\nstr.title()\n\n Return a titlecased version of the string where words start with an\n uppercase character and the remaining characters are lowercase.\n\n For example:\n\n >>> \'Hello world\'.title()\n \'Hello World\'\n\n The algorithm uses a simple language-independent definition of a\n word as groups of consecutive letters. The definition works in\n many contexts but it means that apostrophes in contractions and\n possessives form word boundaries, which may not be the desired\n result:\n\n >>> "they\'re bill\'s friends from the UK".title()\n "They\'Re Bill\'S Friends From The Uk"\n\n A workaround for apostrophes can be constructed using regular\n expressions:\n\n >>> import re\n >>> def titlecase(s):\n ... return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n ... lambda mo: mo.group(0)[0].upper() +\n ... mo.group(0)[1:].lower(),\n ... s)\n ...\n >>> titlecase("they\'re bill\'s friends.")\n "They\'re Bill\'s Friends."\n\nstr.translate(table)\n\n Return a copy of the string in which each character has been mapped\n through the given translation table. The table must be an object\n that implements indexing via "__getitem__()", typically a *mapping*\n or *sequence*. When indexed by a Unicode ordinal (an integer), the\n table object can do any of the following: return a Unicode ordinal\n or a string, to map the character to one or more other characters;\n return "None", to delete the character from the return string; or\n raise a "LookupError" exception, to map the character to itself.\n\n You can use "str.maketrans()" to create a translation map from\n character-to-character mappings in different formats.\n\n See also the "codecs" module for a more flexible approach to custom\n character mappings.\n\nstr.upper()\n\n Return a copy of the string with all the cased characters [4]\n converted to uppercase. Note that "str.upper().isupper()" might be\n "False" if "s" contains uncased characters or if the Unicode\n category of the resulting character(s) is not "Lu" (Letter,\n uppercase), but e.g. "Lt" (Letter, titlecase).\n\n The uppercasing algorithm used is described in section 3.13 of the\n Unicode Standard.\n\nstr.zfill(width)\n\n Return a copy of the string left filled with ASCII "\'0\'" digits to\n make a string of length *width*. A leading sign prefix\n ("\'+\'"/"\'-\'") is handled by inserting the padding *after* the sign\n character rather than before. The original string is returned if\n *width* is less than or equal to "len(s)".\n\n For example:\n\n >>> "42".zfill(5)\n \'00042\'\n >>> "-42".zfill(5)\n \'-0042\'\n', + 'strings': u'\nString and Bytes literals\n*************************\n\nString literals are described by the following lexical definitions:\n\n stringliteral ::= [stringprefix](shortstring | longstring)\n stringprefix ::= "r" | "u" | "R" | "U"\n shortstring ::= "\'" shortstringitem* "\'" | \'"\' shortstringitem* \'"\'\n longstring ::= "\'\'\'" longstringitem* "\'\'\'" | \'"""\' longstringitem* \'"""\'\n shortstringitem ::= shortstringchar | stringescapeseq\n longstringitem ::= longstringchar | stringescapeseq\n shortstringchar ::= \n longstringchar ::= \n stringescapeseq ::= "\\" \n\n bytesliteral ::= bytesprefix(shortbytes | longbytes)\n bytesprefix ::= "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"\n shortbytes ::= "\'" shortbytesitem* "\'" | \'"\' shortbytesitem* \'"\'\n longbytes ::= "\'\'\'" longbytesitem* "\'\'\'" | \'"""\' longbytesitem* \'"""\'\n shortbytesitem ::= shortbyteschar | bytesescapeseq\n longbytesitem ::= longbyteschar | bytesescapeseq\n shortbyteschar ::= \n longbyteschar ::= \n bytesescapeseq ::= "\\" \n\nOne syntactic restriction not indicated by these productions is that\nwhitespace is not allowed between the "stringprefix" or "bytesprefix"\nand the rest of the literal. The source character set is defined by\nthe encoding declaration; it is UTF-8 if no encoding declaration is\ngiven in the source file; see section *Encoding declarations*.\n\nIn plain English: Both types of literals can be enclosed in matching\nsingle quotes ("\'") or double quotes ("""). They can also be enclosed\nin matching groups of three single or double quotes (these are\ngenerally referred to as *triple-quoted strings*). The backslash\n("\\") character is used to escape characters that otherwise have a\nspecial meaning, such as newline, backslash itself, or the quote\ncharacter.\n\nBytes literals are always prefixed with "\'b\'" or "\'B\'"; they produce\nan instance of the "bytes" type instead of the "str" type. They may\nonly contain ASCII characters; bytes with a numeric value of 128 or\ngreater must be expressed with escapes.\n\nAs of Python 3.3 it is possible again to prefix string literals with a\n"u" prefix to simplify maintenance of dual 2.x and 3.x codebases.\n\nBoth string and bytes literals may optionally be prefixed with a\nletter "\'r\'" or "\'R\'"; such strings are called *raw strings* and treat\nbackslashes as literal characters. As a result, in string literals,\n"\'\\U\'" and "\'\\u\'" escapes in raw strings are not treated specially.\nGiven that Python 2.x\'s raw unicode literals behave differently than\nPython 3.x\'s the "\'ur\'" syntax is not supported.\n\nNew in version 3.3: The "\'rb\'" prefix of raw bytes literals has been\nadded as a synonym of "\'br\'".\n\nNew in version 3.3: Support for the unicode legacy literal\n("u\'value\'") was reintroduced to simplify the maintenance of dual\nPython 2.x and 3.x codebases. See **PEP 414** for more information.\n\nIn triple-quoted literals, unescaped newlines and quotes are allowed\n(and are retained), except that three unescaped quotes in a row\nterminate the literal. (A "quote" is the character used to open the\nliteral, i.e. either "\'" or """.)\n\nUnless an "\'r\'" or "\'R\'" prefix is present, escape sequences in string\nand bytes literals are interpreted according to rules similar to those\nused by Standard C. The recognized escape sequences are:\n\n+-------------------+-----------------------------------+---------+\n| Escape Sequence | Meaning | Notes |\n+===================+===================================+=========+\n| "\\newline" | Backslash and newline ignored | |\n+-------------------+-----------------------------------+---------+\n| "\\\\" | Backslash ("\\") | |\n+-------------------+-----------------------------------+---------+\n| "\\\'" | Single quote ("\'") | |\n+-------------------+-----------------------------------+---------+\n| "\\"" | Double quote (""") | |\n+-------------------+-----------------------------------+---------+\n| "\\a" | ASCII Bell (BEL) | |\n+-------------------+-----------------------------------+---------+\n| "\\b" | ASCII Backspace (BS) | |\n+-------------------+-----------------------------------+---------+\n| "\\f" | ASCII Formfeed (FF) | |\n+-------------------+-----------------------------------+---------+\n| "\\n" | ASCII Linefeed (LF) | |\n+-------------------+-----------------------------------+---------+\n| "\\r" | ASCII Carriage Return (CR) | |\n+-------------------+-----------------------------------+---------+\n| "\\t" | ASCII Horizontal Tab (TAB) | |\n+-------------------+-----------------------------------+---------+\n| "\\v" | ASCII Vertical Tab (VT) | |\n+-------------------+-----------------------------------+---------+\n| "\\ooo" | Character with octal value *ooo* | (1,3) |\n+-------------------+-----------------------------------+---------+\n| "\\xhh" | Character with hex value *hh* | (2,3) |\n+-------------------+-----------------------------------+---------+\n\nEscape sequences only recognized in string literals are:\n\n+-------------------+-----------------------------------+---------+\n| Escape Sequence | Meaning | Notes |\n+===================+===================================+=========+\n| "\\N{name}" | Character named *name* in the | (4) |\n| | Unicode database | |\n+-------------------+-----------------------------------+---------+\n| "\\uxxxx" | Character with 16-bit hex value | (5) |\n| | *xxxx* | |\n+-------------------+-----------------------------------+---------+\n| "\\Uxxxxxxxx" | Character with 32-bit hex value | (6) |\n| | *xxxxxxxx* | |\n+-------------------+-----------------------------------+---------+\n\nNotes:\n\n1. As in Standard C, up to three octal digits are accepted.\n\n2. Unlike in Standard C, exactly two hex digits are required.\n\n3. In a bytes literal, hexadecimal and octal escapes denote the\n byte with the given value. In a string literal, these escapes\n denote a Unicode character with the given value.\n\n4. Changed in version 3.3: Support for name aliases [1] has been\n added.\n\n5. Exactly four hex digits are required.\n\n6. Any Unicode character can be encoded this way. Exactly eight\n hex digits are required.\n\nUnlike Standard C, all unrecognized escape sequences are left in the\nstring unchanged, i.e., *the backslash is left in the result*. (This\nbehavior is useful when debugging: if an escape sequence is mistyped,\nthe resulting output is more easily recognized as broken.) It is also\nimportant to note that the escape sequences only recognized in string\nliterals fall into the category of unrecognized escapes for bytes\nliterals.\n\nEven in a raw literal, quotes can be escaped with a backslash, but the\nbackslash remains in the result; for example, "r"\\""" is a valid\nstring literal consisting of two characters: a backslash and a double\nquote; "r"\\"" is not a valid string literal (even a raw string cannot\nend in an odd number of backslashes). Specifically, *a raw literal\ncannot end in a single backslash* (since the backslash would escape\nthe following quote character). Note also that a single backslash\nfollowed by a newline is interpreted as those two characters as part\nof the literal, *not* as a line continuation.\n', + 'subscriptions': u'\nSubscriptions\n*************\n\nA subscription selects an item of a sequence (string, tuple or list)\nor mapping (dictionary) object:\n\n subscription ::= primary "[" expression_list "]"\n\nThe primary must evaluate to an object that supports subscription\n(lists or dictionaries for example). User-defined objects can support\nsubscription by defining a "__getitem__()" method.\n\nFor built-in objects, there are two types of objects that support\nsubscription:\n\nIf the primary is a mapping, the expression list must evaluate to an\nobject whose value is one of the keys of the mapping, and the\nsubscription selects the value in the mapping that corresponds to that\nkey. (The expression list is a tuple except if it has exactly one\nitem.)\n\nIf the primary is a sequence, the expression (list) must evaluate to\nan integer or a slice (as discussed in the following section).\n\nThe formal syntax makes no special provision for negative indices in\nsequences; however, built-in sequences all provide a "__getitem__()"\nmethod that interprets negative indices by adding the length of the\nsequence to the index (so that "x[-1]" selects the last item of "x").\nThe resulting value must be a nonnegative integer less than the number\nof items in the sequence, and the subscription selects the item whose\nindex is that value (counting from zero). Since the support for\nnegative indices and slicing occurs in the object\'s "__getitem__()"\nmethod, subclasses overriding this method will need to explicitly add\nthat support.\n\nA string\'s items are characters. A character is not a separate data\ntype but a string of exactly one character.\n', + 'truth': u'\nTruth Value Testing\n*******************\n\nAny object can be tested for truth value, for use in an "if" or\n"while" condition or as operand of the Boolean operations below. The\nfollowing values are considered false:\n\n* "None"\n\n* "False"\n\n* zero of any numeric type, for example, "0", "0.0", "0j".\n\n* any empty sequence, for example, "\'\'", "()", "[]".\n\n* any empty mapping, for example, "{}".\n\n* instances of user-defined classes, if the class defines a\n "__bool__()" or "__len__()" method, when that method returns the\n integer zero or "bool" value "False". [1]\n\nAll other values are considered true --- so objects of many types are\nalways true.\n\nOperations and built-in functions that have a Boolean result always\nreturn "0" or "False" for false and "1" or "True" for true, unless\notherwise stated. (Important exception: the Boolean operations "or"\nand "and" always return one of their operands.)\n', + 'try': u'\nThe "try" statement\n*******************\n\nThe "try" statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n try_stmt ::= try1_stmt | try2_stmt\n try1_stmt ::= "try" ":" suite\n ("except" [expression ["as" identifier]] ":" suite)+\n ["else" ":" suite]\n ["finally" ":" suite]\n try2_stmt ::= "try" ":" suite\n "finally" ":" suite\n\nThe "except" clause(s) specify one or more exception handlers. When no\nexception occurs in the "try" clause, no exception handler is\nexecuted. When an exception occurs in the "try" suite, a search for an\nexception handler is started. This search inspects the except clauses\nin turn until one is found that matches the exception. An expression-\nless except clause, if present, must be last; it matches any\nexception. For an except clause with an expression, that expression\nis evaluated, and the clause matches the exception if the resulting\nobject is "compatible" with the exception. An object is compatible\nwith an exception if it is the class or a base class of the exception\nobject or a tuple containing an item compatible with the exception.\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire "try" statement raised\nthe exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified after the "as" keyword in that except clause, if\npresent, and the except clause\'s suite is executed. All except\nclauses must have an executable block. When the end of this block is\nreached, execution continues normally after the entire try statement.\n(This means that if two nested handlers exist for the same exception,\nand the exception occurs in the try clause of the inner handler, the\nouter handler will not handle the exception.)\n\nWhen an exception has been assigned using "as target", it is cleared\nat the end of the except clause. This is as if\n\n except E as N:\n foo\n\nwas translated to\n\n except E as N:\n try:\n foo\n finally:\n del N\n\nThis means the exception must be assigned to a different name to be\nable to refer to it after the except clause. Exceptions are cleared\nbecause with the traceback attached to them, they form a reference\ncycle with the stack frame, keeping all locals in that frame alive\nuntil the next garbage collection occurs.\n\nBefore an except clause\'s suite is executed, details about the\nexception are stored in the "sys" module and can be accessed via\n"sys.exc_info()". "sys.exc_info()" returns a 3-tuple consisting of the\nexception class, the exception instance and a traceback object (see\nsection *The standard type hierarchy*) identifying the point in the\nprogram where the exception occurred. "sys.exc_info()" values are\nrestored to their previous values (before the call) when returning\nfrom a function that handled an exception.\n\nThe optional "else" clause is executed if and when control flows off\nthe end of the "try" clause. [2] Exceptions in the "else" clause are\nnot handled by the preceding "except" clauses.\n\nIf "finally" is present, it specifies a \'cleanup\' handler. The "try"\nclause is executed, including any "except" and "else" clauses. If an\nexception occurs in any of the clauses and is not handled, the\nexception is temporarily saved. The "finally" clause is executed. If\nthere is a saved exception it is re-raised at the end of the "finally"\nclause. If the "finally" clause raises another exception, the saved\nexception is set as the context of the new exception. If the "finally"\nclause executes a "return" or "break" statement, the saved exception\nis discarded:\n\n >>> def f():\n ... try:\n ... 1/0\n ... finally:\n ... return 42\n ...\n >>> f()\n 42\n\nThe exception information is not available to the program during\nexecution of the "finally" clause.\n\nWhen a "return", "break" or "continue" statement is executed in the\n"try" suite of a "try"..."finally" statement, the "finally" clause is\nalso executed \'on the way out.\' A "continue" statement is illegal in\nthe "finally" clause. (The reason is a problem with the current\nimplementation --- this restriction may be lifted in the future).\n\nThe return value of a function is determined by the last "return"\nstatement executed. Since the "finally" clause always executes, a\n"return" statement executed in the "finally" clause will always be the\nlast one executed:\n\n >>> def foo():\n ... try:\n ... return \'try\'\n ... finally:\n ... return \'finally\'\n ...\n >>> foo()\n \'finally\'\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the "raise" statement to\ngenerate exceptions may be found in section *The raise statement*.\n', + 'types': u'\nThe standard type hierarchy\n***************************\n\nBelow is a list of the types that are built into Python. Extension\nmodules (written in C, Java, or other languages, depending on the\nimplementation) can define additional types. Future versions of\nPython may add types to the type hierarchy (e.g., rational numbers,\nefficiently stored arrays of integers, etc.), although such additions\nwill often be provided via the standard library instead.\n\nSome of the type descriptions below contain a paragraph listing\n\'special attributes.\' These are attributes that provide access to the\nimplementation and are not intended for general use. Their definition\nmay change in the future.\n\nNone\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name "None". It\n is used to signify the absence of a value in many situations, e.g.,\n it is returned from functions that don\'t explicitly return\n anything. Its truth value is false.\n\nNotImplemented\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name\n "NotImplemented". Numeric methods and rich comparison methods\n should return this value if they do not implement the operation for\n the operands provided. (The interpreter will then try the\n reflected operation, or some other fallback, depending on the\n operator.) Its truth value is true.\n\n See *Implementing the arithmetic operations* for more details.\n\nEllipsis\n This type has a single value. There is a single object with this\n value. This object is accessed through the literal "..." or the\n built-in name "Ellipsis". Its truth value is true.\n\n"numbers.Number"\n These are created by numeric literals and returned as results by\n arithmetic operators and arithmetic built-in functions. Numeric\n objects are immutable; once created their value never changes.\n Python numbers are of course strongly related to mathematical\n numbers, but subject to the limitations of numerical representation\n in computers.\n\n Python distinguishes between integers, floating point numbers, and\n complex numbers:\n\n "numbers.Integral"\n These represent elements from the mathematical set of integers\n (positive and negative).\n\n There are two types of integers:\n\n Integers ("int")\n\n These represent numbers in an unlimited range, subject to\n available (virtual) memory only. For the purpose of shift\n and mask operations, a binary representation is assumed, and\n negative numbers are represented in a variant of 2\'s\n complement which gives the illusion of an infinite string of\n sign bits extending to the left.\n\n Booleans ("bool")\n These represent the truth values False and True. The two\n objects representing the values "False" and "True" are the\n only Boolean objects. The Boolean type is a subtype of the\n integer type, and Boolean values behave like the values 0 and\n 1, respectively, in almost all contexts, the exception being\n that when converted to a string, the strings ""False"" or\n ""True"" are returned, respectively.\n\n The rules for integer representation are intended to give the\n most meaningful interpretation of shift and mask operations\n involving negative integers.\n\n "numbers.Real" ("float")\n These represent machine-level double precision floating point\n numbers. You are at the mercy of the underlying machine\n architecture (and C or Java implementation) for the accepted\n range and handling of overflow. Python does not support single-\n precision floating point numbers; the savings in processor and\n memory usage that are usually the reason for using these are\n dwarfed by the overhead of using objects in Python, so there is\n no reason to complicate the language with two kinds of floating\n point numbers.\n\n "numbers.Complex" ("complex")\n These represent complex numbers as a pair of machine-level\n double precision floating point numbers. The same caveats apply\n as for floating point numbers. The real and imaginary parts of a\n complex number "z" can be retrieved through the read-only\n attributes "z.real" and "z.imag".\n\nSequences\n These represent finite ordered sets indexed by non-negative\n numbers. The built-in function "len()" returns the number of items\n of a sequence. When the length of a sequence is *n*, the index set\n contains the numbers 0, 1, ..., *n*-1. Item *i* of sequence *a* is\n selected by "a[i]".\n\n Sequences also support slicing: "a[i:j]" selects all items with\n index *k* such that *i* "<=" *k* "<" *j*. When used as an\n expression, a slice is a sequence of the same type. This implies\n that the index set is renumbered so that it starts at 0.\n\n Some sequences also support "extended slicing" with a third "step"\n parameter: "a[i:j:k]" selects all items of *a* with index *x* where\n "x = i + n*k", *n* ">=" "0" and *i* "<=" *x* "<" *j*.\n\n Sequences are distinguished according to their mutability:\n\n Immutable sequences\n An object of an immutable sequence type cannot change once it is\n created. (If the object contains references to other objects,\n these other objects may be mutable and may be changed; however,\n the collection of objects directly referenced by an immutable\n object cannot change.)\n\n The following types are immutable sequences:\n\n Strings\n A string is a sequence of values that represent Unicode code\n points. All the code points in the range "U+0000 - U+10FFFF"\n can be represented in a string. Python doesn\'t have a "char"\n type; instead, every code point in the string is represented\n as a string object with length "1". The built-in function\n "ord()" converts a code point from its string form to an\n integer in the range "0 - 10FFFF"; "chr()" converts an\n integer in the range "0 - 10FFFF" to the corresponding length\n "1" string object. "str.encode()" can be used to convert a\n "str" to "bytes" using the given text encoding, and\n "bytes.decode()" can be used to achieve the opposite.\n\n Tuples\n The items of a tuple are arbitrary Python objects. Tuples of\n two or more items are formed by comma-separated lists of\n expressions. A tuple of one item (a \'singleton\') can be\n formed by affixing a comma to an expression (an expression by\n itself does not create a tuple, since parentheses must be\n usable for grouping of expressions). An empty tuple can be\n formed by an empty pair of parentheses.\n\n Bytes\n A bytes object is an immutable array. The items are 8-bit\n bytes, represented by integers in the range 0 <= x < 256.\n Bytes literals (like "b\'abc\'") and the built-in function\n "bytes()" can be used to construct bytes objects. Also,\n bytes objects can be decoded to strings via the "decode()"\n method.\n\n Mutable sequences\n Mutable sequences can be changed after they are created. The\n subscription and slicing notations can be used as the target of\n assignment and "del" (delete) statements.\n\n There are currently two intrinsic mutable sequence types:\n\n Lists\n The items of a list are arbitrary Python objects. Lists are\n formed by placing a comma-separated list of expressions in\n square brackets. (Note that there are no special cases needed\n to form lists of length 0 or 1.)\n\n Byte Arrays\n A bytearray object is a mutable array. They are created by\n the built-in "bytearray()" constructor. Aside from being\n mutable (and hence unhashable), byte arrays otherwise provide\n the same interface and functionality as immutable bytes\n objects.\n\n The extension module "array" provides an additional example of a\n mutable sequence type, as does the "collections" module.\n\nSet types\n These represent unordered, finite sets of unique, immutable\n objects. As such, they cannot be indexed by any subscript. However,\n they can be iterated over, and the built-in function "len()"\n returns the number of items in a set. Common uses for sets are fast\n membership testing, removing duplicates from a sequence, and\n computing mathematical operations such as intersection, union,\n difference, and symmetric difference.\n\n For set elements, the same immutability rules apply as for\n dictionary keys. Note that numeric types obey the normal rules for\n numeric comparison: if two numbers compare equal (e.g., "1" and\n "1.0"), only one of them can be contained in a set.\n\n There are currently two intrinsic set types:\n\n Sets\n These represent a mutable set. They are created by the built-in\n "set()" constructor and can be modified afterwards by several\n methods, such as "add()".\n\n Frozen sets\n These represent an immutable set. They are created by the\n built-in "frozenset()" constructor. As a frozenset is immutable\n and *hashable*, it can be used again as an element of another\n set, or as a dictionary key.\n\nMappings\n These represent finite sets of objects indexed by arbitrary index\n sets. The subscript notation "a[k]" selects the item indexed by "k"\n from the mapping "a"; this can be used in expressions and as the\n target of assignments or "del" statements. The built-in function\n "len()" returns the number of items in a mapping.\n\n There is currently a single intrinsic mapping type:\n\n Dictionaries\n These represent finite sets of objects indexed by nearly\n arbitrary values. The only types of values not acceptable as\n keys are values containing lists or dictionaries or other\n mutable types that are compared by value rather than by object\n identity, the reason being that the efficient implementation of\n dictionaries requires a key\'s hash value to remain constant.\n Numeric types used for keys obey the normal rules for numeric\n comparison: if two numbers compare equal (e.g., "1" and "1.0")\n then they can be used interchangeably to index the same\n dictionary entry.\n\n Dictionaries are mutable; they can be created by the "{...}"\n notation (see section *Dictionary displays*).\n\n The extension modules "dbm.ndbm" and "dbm.gnu" provide\n additional examples of mapping types, as does the "collections"\n module.\n\nCallable types\n These are the types to which the function call operation (see\n section *Calls*) can be applied:\n\n User-defined functions\n A user-defined function object is created by a function\n definition (see section *Function definitions*). It should be\n called with an argument list containing the same number of items\n as the function\'s formal parameter list.\n\n Special attributes:\n\n +---------------------------+---------------------------------+-------------+\n | Attribute | Meaning | |\n +===========================+=================================+=============+\n | "__doc__" | The function\'s documentation | Writable |\n | | string, or "None" if | |\n | | unavailable; not inherited by | |\n | | subclasses | |\n +---------------------------+---------------------------------+-------------+\n | "__name__" | The function\'s name | Writable |\n +---------------------------+---------------------------------+-------------+\n | "__qualname__" | The function\'s *qualified name* | Writable |\n | | New in version 3.3. | |\n +---------------------------+---------------------------------+-------------+\n | "__module__" | The name of the module the | Writable |\n | | function was defined in, or | |\n | | "None" if unavailable. | |\n +---------------------------+---------------------------------+-------------+\n | "__defaults__" | A tuple containing default | Writable |\n | | argument values for those | |\n | | arguments that have defaults, | |\n | | or "None" if no arguments have | |\n | | a default value | |\n +---------------------------+---------------------------------+-------------+\n | "__code__" | The code object representing | Writable |\n | | the compiled function body. | |\n +---------------------------+---------------------------------+-------------+\n | "__globals__" | A reference to the dictionary | Read-only |\n | | that holds the function\'s | |\n | | global variables --- the global | |\n | | namespace of the module in | |\n | | which the function was defined. | |\n +---------------------------+---------------------------------+-------------+\n | "__dict__" | The namespace supporting | Writable |\n | | arbitrary function attributes. | |\n +---------------------------+---------------------------------+-------------+\n | "__closure__" | "None" or a tuple of cells that | Read-only |\n | | contain bindings for the | |\n | | function\'s free variables. | |\n +---------------------------+---------------------------------+-------------+\n | "__annotations__" | A dict containing annotations | Writable |\n | | of parameters. The keys of the | |\n | | dict are the parameter names, | |\n | | and "\'return\'" for the return | |\n | | annotation, if provided. | |\n +---------------------------+---------------------------------+-------------+\n | "__kwdefaults__" | A dict containing defaults for | Writable |\n | | keyword-only parameters. | |\n +---------------------------+---------------------------------+-------------+\n\n Most of the attributes labelled "Writable" check the type of the\n assigned value.\n\n Function objects also support getting and setting arbitrary\n attributes, which can be used, for example, to attach metadata\n to functions. Regular attribute dot-notation is used to get and\n set such attributes. *Note that the current implementation only\n supports function attributes on user-defined functions. Function\n attributes on built-in functions may be supported in the\n future.*\n\n Additional information about a function\'s definition can be\n retrieved from its code object; see the description of internal\n types below.\n\n Instance methods\n An instance method object combines a class, a class instance and\n any callable object (normally a user-defined function).\n\n Special read-only attributes: "__self__" is the class instance\n object, "__func__" is the function object; "__doc__" is the\n method\'s documentation (same as "__func__.__doc__"); "__name__"\n is the method name (same as "__func__.__name__"); "__module__"\n is the name of the module the method was defined in, or "None"\n if unavailable.\n\n Methods also support accessing (but not setting) the arbitrary\n function attributes on the underlying function object.\n\n User-defined method objects may be created when getting an\n attribute of a class (perhaps via an instance of that class), if\n that attribute is a user-defined function object or a class\n method object.\n\n When an instance method object is created by retrieving a user-\n defined function object from a class via one of its instances,\n its "__self__" attribute is the instance, and the method object\n is said to be bound. The new method\'s "__func__" attribute is\n the original function object.\n\n When a user-defined method object is created by retrieving\n another method object from a class or instance, the behaviour is\n the same as for a function object, except that the "__func__"\n attribute of the new instance is not the original method object\n but its "__func__" attribute.\n\n When an instance method object is created by retrieving a class\n method object from a class or instance, its "__self__" attribute\n is the class itself, and its "__func__" attribute is the\n function object underlying the class method.\n\n When an instance method object is called, the underlying\n function ("__func__") is called, inserting the class instance\n ("__self__") in front of the argument list. For instance, when\n "C" is a class which contains a definition for a function "f()",\n and "x" is an instance of "C", calling "x.f(1)" is equivalent to\n calling "C.f(x, 1)".\n\n When an instance method object is derived from a class method\n object, the "class instance" stored in "__self__" will actually\n be the class itself, so that calling either "x.f(1)" or "C.f(1)"\n is equivalent to calling "f(C,1)" where "f" is the underlying\n function.\n\n Note that the transformation from function object to instance\n method object happens each time the attribute is retrieved from\n the instance. In some cases, a fruitful optimization is to\n assign the attribute to a local variable and call that local\n variable. Also notice that this transformation only happens for\n user-defined functions; other callable objects (and all non-\n callable objects) are retrieved without transformation. It is\n also important to note that user-defined functions which are\n attributes of a class instance are not converted to bound\n methods; this *only* happens when the function is an attribute\n of the class.\n\n Generator functions\n A function or method which uses the "yield" statement (see\n section *The yield statement*) is called a *generator function*.\n Such a function, when called, always returns an iterator object\n which can be used to execute the body of the function: calling\n the iterator\'s "iterator.__next__()" method will cause the\n function to execute until it provides a value using the "yield"\n statement. When the function executes a "return" statement or\n falls off the end, a "StopIteration" exception is raised and the\n iterator will have reached the end of the set of values to be\n returned.\n\n Coroutine functions\n A function or method which is defined using "async def" is\n called a *coroutine function*. Such a function, when called,\n returns a *coroutine* object. It may contain "await"\n expressions, as well as "async with" and "async for" statements.\n See also the *Coroutine Objects* section.\n\n Built-in functions\n A built-in function object is a wrapper around a C function.\n Examples of built-in functions are "len()" and "math.sin()"\n ("math" is a standard built-in module). The number and type of\n the arguments are determined by the C function. Special read-\n only attributes: "__doc__" is the function\'s documentation\n string, or "None" if unavailable; "__name__" is the function\'s\n name; "__self__" is set to "None" (but see the next item);\n "__module__" is the name of the module the function was defined\n in or "None" if unavailable.\n\n Built-in methods\n This is really a different disguise of a built-in function, this\n time containing an object passed to the C function as an\n implicit extra argument. An example of a built-in method is\n "alist.append()", assuming *alist* is a list object. In this\n case, the special read-only attribute "__self__" is set to the\n object denoted by *alist*.\n\n Classes\n Classes are callable. These objects normally act as factories\n for new instances of themselves, but variations are possible for\n class types that override "__new__()". The arguments of the\n call are passed to "__new__()" and, in the typical case, to\n "__init__()" to initialize the new instance.\n\n Class Instances\n Instances of arbitrary classes can be made callable by defining\n a "__call__()" method in their class.\n\nModules\n Modules are a basic organizational unit of Python code, and are\n created by the *import system* as invoked either by the "import"\n statement (see "import"), or by calling functions such as\n "importlib.import_module()" and built-in "__import__()". A module\n object has a namespace implemented by a dictionary object (this is\n the dictionary referenced by the "__globals__" attribute of\n functions defined in the module). Attribute references are\n translated to lookups in this dictionary, e.g., "m.x" is equivalent\n to "m.__dict__["x"]". A module object does not contain the code\n object used to initialize the module (since it isn\'t needed once\n the initialization is done).\n\n Attribute assignment updates the module\'s namespace dictionary,\n e.g., "m.x = 1" is equivalent to "m.__dict__["x"] = 1".\n\n Special read-only attribute: "__dict__" is the module\'s namespace\n as a dictionary object.\n\n **CPython implementation detail:** Because of the way CPython\n clears module dictionaries, the module dictionary will be cleared\n when the module falls out of scope even if the dictionary still has\n live references. To avoid this, copy the dictionary or keep the\n module around while using its dictionary directly.\n\n Predefined (writable) attributes: "__name__" is the module\'s name;\n "__doc__" is the module\'s documentation string, or "None" if\n unavailable; "__file__" is the pathname of the file from which the\n module was loaded, if it was loaded from a file. The "__file__"\n attribute may be missing for certain types of modules, such as C\n modules that are statically linked into the interpreter; for\n extension modules loaded dynamically from a shared library, it is\n the pathname of the shared library file.\n\nCustom classes\n Custom class types are typically created by class definitions (see\n section *Class definitions*). A class has a namespace implemented\n by a dictionary object. Class attribute references are translated\n to lookups in this dictionary, e.g., "C.x" is translated to\n "C.__dict__["x"]" (although there are a number of hooks which allow\n for other means of locating attributes). When the attribute name is\n not found there, the attribute search continues in the base\n classes. This search of the base classes uses the C3 method\n resolution order which behaves correctly even in the presence of\n \'diamond\' inheritance structures where there are multiple\n inheritance paths leading back to a common ancestor. Additional\n details on the C3 MRO used by Python can be found in the\n documentation accompanying the 2.3 release at\n https://www.python.org/download/releases/2.3/mro/.\n\n When a class attribute reference (for class "C", say) would yield a\n class method object, it is transformed into an instance method\n object whose "__self__" attributes is "C". When it would yield a\n static method object, it is transformed into the object wrapped by\n the static method object. See section *Implementing Descriptors*\n for another way in which attributes retrieved from a class may\n differ from those actually contained in its "__dict__".\n\n Class attribute assignments update the class\'s dictionary, never\n the dictionary of a base class.\n\n A class object can be called (see above) to yield a class instance\n (see below).\n\n Special attributes: "__name__" is the class name; "__module__" is\n the module name in which the class was defined; "__dict__" is the\n dictionary containing the class\'s namespace; "__bases__" is a tuple\n (possibly empty or a singleton) containing the base classes, in the\n order of their occurrence in the base class list; "__doc__" is the\n class\'s documentation string, or None if undefined.\n\nClass instances\n A class instance is created by calling a class object (see above).\n A class instance has a namespace implemented as a dictionary which\n is the first place in which attribute references are searched.\n When an attribute is not found there, and the instance\'s class has\n an attribute by that name, the search continues with the class\n attributes. If a class attribute is found that is a user-defined\n function object, it is transformed into an instance method object\n whose "__self__" attribute is the instance. Static method and\n class method objects are also transformed; see above under\n "Classes". See section *Implementing Descriptors* for another way\n in which attributes of a class retrieved via its instances may\n differ from the objects actually stored in the class\'s "__dict__".\n If no class attribute is found, and the object\'s class has a\n "__getattr__()" method, that is called to satisfy the lookup.\n\n Attribute assignments and deletions update the instance\'s\n dictionary, never a class\'s dictionary. If the class has a\n "__setattr__()" or "__delattr__()" method, this is called instead\n of updating the instance dictionary directly.\n\n Class instances can pretend to be numbers, sequences, or mappings\n if they have methods with certain special names. See section\n *Special method names*.\n\n Special attributes: "__dict__" is the attribute dictionary;\n "__class__" is the instance\'s class.\n\nI/O objects (also known as file objects)\n A *file object* represents an open file. Various shortcuts are\n available to create file objects: the "open()" built-in function,\n and also "os.popen()", "os.fdopen()", and the "makefile()" method\n of socket objects (and perhaps by other functions or methods\n provided by extension modules).\n\n The objects "sys.stdin", "sys.stdout" and "sys.stderr" are\n initialized to file objects corresponding to the interpreter\'s\n standard input, output and error streams; they are all open in text\n mode and therefore follow the interface defined by the\n "io.TextIOBase" abstract class.\n\nInternal types\n A few types used internally by the interpreter are exposed to the\n user. Their definitions may change with future versions of the\n interpreter, but they are mentioned here for completeness.\n\n Code objects\n Code objects represent *byte-compiled* executable Python code,\n or *bytecode*. The difference between a code object and a\n function object is that the function object contains an explicit\n reference to the function\'s globals (the module in which it was\n defined), while a code object contains no context; also the\n default argument values are stored in the function object, not\n in the code object (because they represent values calculated at\n run-time). Unlike function objects, code objects are immutable\n and contain no references (directly or indirectly) to mutable\n objects.\n\n Special read-only attributes: "co_name" gives the function name;\n "co_argcount" is the number of positional arguments (including\n arguments with default values); "co_nlocals" is the number of\n local variables used by the function (including arguments);\n "co_varnames" is a tuple containing the names of the local\n variables (starting with the argument names); "co_cellvars" is a\n tuple containing the names of local variables that are\n referenced by nested functions; "co_freevars" is a tuple\n containing the names of free variables; "co_code" is a string\n representing the sequence of bytecode instructions; "co_consts"\n is a tuple containing the literals used by the bytecode;\n "co_names" is a tuple containing the names used by the bytecode;\n "co_filename" is the filename from which the code was compiled;\n "co_firstlineno" is the first line number of the function;\n "co_lnotab" is a string encoding the mapping from bytecode\n offsets to line numbers (for details see the source code of the\n interpreter); "co_stacksize" is the required stack size\n (including local variables); "co_flags" is an integer encoding a\n number of flags for the interpreter.\n\n The following flag bits are defined for "co_flags": bit "0x04"\n is set if the function uses the "*arguments" syntax to accept an\n arbitrary number of positional arguments; bit "0x08" is set if\n the function uses the "**keywords" syntax to accept arbitrary\n keyword arguments; bit "0x20" is set if the function is a\n generator.\n\n Future feature declarations ("from __future__ import division")\n also use bits in "co_flags" to indicate whether a code object\n was compiled with a particular feature enabled: bit "0x2000" is\n set if the function was compiled with future division enabled;\n bits "0x10" and "0x1000" were used in earlier versions of\n Python.\n\n Other bits in "co_flags" are reserved for internal use.\n\n If a code object represents a function, the first item in\n "co_consts" is the documentation string of the function, or\n "None" if undefined.\n\n Frame objects\n Frame objects represent execution frames. They may occur in\n traceback objects (see below).\n\n Special read-only attributes: "f_back" is to the previous stack\n frame (towards the caller), or "None" if this is the bottom\n stack frame; "f_code" is the code object being executed in this\n frame; "f_locals" is the dictionary used to look up local\n variables; "f_globals" is used for global variables;\n "f_builtins" is used for built-in (intrinsic) names; "f_lasti"\n gives the precise instruction (this is an index into the\n bytecode string of the code object).\n\n Special writable attributes: "f_trace", if not "None", is a\n function called at the start of each source code line (this is\n used by the debugger); "f_lineno" is the current line number of\n the frame --- writing to this from within a trace function jumps\n to the given line (only for the bottom-most frame). A debugger\n can implement a Jump command (aka Set Next Statement) by writing\n to f_lineno.\n\n Frame objects support one method:\n\n frame.clear()\n\n This method clears all references to local variables held by\n the frame. Also, if the frame belonged to a generator, the\n generator is finalized. This helps break reference cycles\n involving frame objects (for example when catching an\n exception and storing its traceback for later use).\n\n "RuntimeError" is raised if the frame is currently executing.\n\n New in version 3.4.\n\n Traceback objects\n Traceback objects represent a stack trace of an exception. A\n traceback object is created when an exception occurs. When the\n search for an exception handler unwinds the execution stack, at\n each unwound level a traceback object is inserted in front of\n the current traceback. When an exception handler is entered,\n the stack trace is made available to the program. (See section\n *The try statement*.) It is accessible as the third item of the\n tuple returned by "sys.exc_info()". When the program contains no\n suitable handler, the stack trace is written (nicely formatted)\n to the standard error stream; if the interpreter is interactive,\n it is also made available to the user as "sys.last_traceback".\n\n Special read-only attributes: "tb_next" is the next level in the\n stack trace (towards the frame where the exception occurred), or\n "None" if there is no next level; "tb_frame" points to the\n execution frame of the current level; "tb_lineno" gives the line\n number where the exception occurred; "tb_lasti" indicates the\n precise instruction. The line number and last instruction in\n the traceback may differ from the line number of its frame\n object if the exception occurred in a "try" statement with no\n matching except clause or with a finally clause.\n\n Slice objects\n Slice objects are used to represent slices for "__getitem__()"\n methods. They are also created by the built-in "slice()"\n function.\n\n Special read-only attributes: "start" is the lower bound; "stop"\n is the upper bound; "step" is the step value; each is "None" if\n omitted. These attributes can have any type.\n\n Slice objects support one method:\n\n slice.indices(self, length)\n\n This method takes a single integer argument *length* and\n computes information about the slice that the slice object\n would describe if applied to a sequence of *length* items.\n It returns a tuple of three integers; respectively these are\n the *start* and *stop* indices and the *step* or stride\n length of the slice. Missing or out-of-bounds indices are\n handled in a manner consistent with regular slices.\n\n Static method objects\n Static method objects provide a way of defeating the\n transformation of function objects to method objects described\n above. A static method object is a wrapper around any other\n object, usually a user-defined method object. When a static\n method object is retrieved from a class or a class instance, the\n object actually returned is the wrapped object, which is not\n subject to any further transformation. Static method objects are\n not themselves callable, although the objects they wrap usually\n are. Static method objects are created by the built-in\n "staticmethod()" constructor.\n\n Class method objects\n A class method object, like a static method object, is a wrapper\n around another object that alters the way in which that object\n is retrieved from classes and class instances. The behaviour of\n class method objects upon such retrieval is described above,\n under "User-defined methods". Class method objects are created\n by the built-in "classmethod()" constructor.\n', + 'typesfunctions': u'\nFunctions\n*********\n\nFunction objects are created by function definitions. The only\noperation on a function object is to call it: "func(argument-list)".\n\nThere are really two flavors of function objects: built-in functions\nand user-defined functions. Both support the same operation (to call\nthe function), but the implementation is different, hence the\ndifferent object types.\n\nSee *Function definitions* for more information.\n', + 'typesmapping': u'\nMapping Types --- "dict"\n************************\n\nA *mapping* object maps *hashable* values to arbitrary objects.\nMappings are mutable objects. There is currently only one standard\nmapping type, the *dictionary*. (For other containers see the built-\nin "list", "set", and "tuple" classes, and the "collections" module.)\n\nA dictionary\'s keys are *almost* arbitrary values. Values that are\nnot *hashable*, that is, values containing lists, dictionaries or\nother mutable types (that are compared by value rather than by object\nidentity) may not be used as keys. Numeric types used for keys obey\nthe normal rules for numeric comparison: if two numbers compare equal\n(such as "1" and "1.0") then they can be used interchangeably to index\nthe same dictionary entry. (Note however, that since computers store\nfloating-point numbers as approximations it is usually unwise to use\nthem as dictionary keys.)\n\nDictionaries can be created by placing a comma-separated list of "key:\nvalue" pairs within braces, for example: "{\'jack\': 4098, \'sjoerd\':\n4127}" or "{4098: \'jack\', 4127: \'sjoerd\'}", or by the "dict"\nconstructor.\n\nclass class dict(**kwarg)\nclass class dict(mapping, **kwarg)\nclass class dict(iterable, **kwarg)\n\n Return a new dictionary initialized from an optional positional\n argument and a possibly empty set of keyword arguments.\n\n If no positional argument is given, an empty dictionary is created.\n If a positional argument is given and it is a mapping object, a\n dictionary is created with the same key-value pairs as the mapping\n object. Otherwise, the positional argument must be an *iterable*\n object. Each item in the iterable must itself be an iterable with\n exactly two objects. The first object of each item becomes a key\n in the new dictionary, and the second object the corresponding\n value. If a key occurs more than once, the last value for that key\n becomes the corresponding value in the new dictionary.\n\n If keyword arguments are given, the keyword arguments and their\n values are added to the dictionary created from the positional\n argument. If a key being added is already present, the value from\n the keyword argument replaces the value from the positional\n argument.\n\n To illustrate, the following examples all return a dictionary equal\n to "{"one": 1, "two": 2, "three": 3}":\n\n >>> a = dict(one=1, two=2, three=3)\n >>> b = {\'one\': 1, \'two\': 2, \'three\': 3}\n >>> c = dict(zip([\'one\', \'two\', \'three\'], [1, 2, 3]))\n >>> d = dict([(\'two\', 2), (\'one\', 1), (\'three\', 3)])\n >>> e = dict({\'three\': 3, \'one\': 1, \'two\': 2})\n >>> a == b == c == d == e\n True\n\n Providing keyword arguments as in the first example only works for\n keys that are valid Python identifiers. Otherwise, any valid keys\n can be used.\n\n These are the operations that dictionaries support (and therefore,\n custom mapping types should support too):\n\n len(d)\n\n Return the number of items in the dictionary *d*.\n\n d[key]\n\n Return the item of *d* with key *key*. Raises a "KeyError" if\n *key* is not in the map.\n\n If a subclass of dict defines a method "__missing__()" and *key*\n is not present, the "d[key]" operation calls that method with\n the key *key* as argument. The "d[key]" operation then returns\n or raises whatever is returned or raised by the\n "__missing__(key)" call. No other operations or methods invoke\n "__missing__()". If "__missing__()" is not defined, "KeyError"\n is raised. "__missing__()" must be a method; it cannot be an\n instance variable:\n\n >>> class Counter(dict):\n ... def __missing__(self, key):\n ... return 0\n >>> c = Counter()\n >>> c[\'red\']\n 0\n >>> c[\'red\'] += 1\n >>> c[\'red\']\n 1\n\n The example above shows part of the implementation of\n "collections.Counter". A different "__missing__" method is used\n by "collections.defaultdict".\n\n d[key] = value\n\n Set "d[key]" to *value*.\n\n del d[key]\n\n Remove "d[key]" from *d*. Raises a "KeyError" if *key* is not\n in the map.\n\n key in d\n\n Return "True" if *d* has a key *key*, else "False".\n\n key not in d\n\n Equivalent to "not key in d".\n\n iter(d)\n\n Return an iterator over the keys of the dictionary. This is a\n shortcut for "iter(d.keys())".\n\n clear()\n\n Remove all items from the dictionary.\n\n copy()\n\n Return a shallow copy of the dictionary.\n\n classmethod fromkeys(seq[, value])\n\n Create a new dictionary with keys from *seq* and values set to\n *value*.\n\n "fromkeys()" is a class method that returns a new dictionary.\n *value* defaults to "None".\n\n get(key[, default])\n\n Return the value for *key* if *key* is in the dictionary, else\n *default*. If *default* is not given, it defaults to "None", so\n that this method never raises a "KeyError".\n\n items()\n\n Return a new view of the dictionary\'s items ("(key, value)"\n pairs). See the *documentation of view objects*.\n\n keys()\n\n Return a new view of the dictionary\'s keys. See the\n *documentation of view objects*.\n\n pop(key[, default])\n\n If *key* is in the dictionary, remove it and return its value,\n else return *default*. If *default* is not given and *key* is\n not in the dictionary, a "KeyError" is raised.\n\n popitem()\n\n Remove and return an arbitrary "(key, value)" pair from the\n dictionary.\n\n "popitem()" is useful to destructively iterate over a\n dictionary, as often used in set algorithms. If the dictionary\n is empty, calling "popitem()" raises a "KeyError".\n\n setdefault(key[, default])\n\n If *key* is in the dictionary, return its value. If not, insert\n *key* with a value of *default* and return *default*. *default*\n defaults to "None".\n\n update([other])\n\n Update the dictionary with the key/value pairs from *other*,\n overwriting existing keys. Return "None".\n\n "update()" accepts either another dictionary object or an\n iterable of key/value pairs (as tuples or other iterables of\n length two). If keyword arguments are specified, the dictionary\n is then updated with those key/value pairs: "d.update(red=1,\n blue=2)".\n\n values()\n\n Return a new view of the dictionary\'s values. See the\n *documentation of view objects*.\n\n Dictionaries compare equal if and only if they have the same "(key,\n value)" pairs. Order comparisons (\'<\', \'<=\', \'>=\', \'>\') raise\n "TypeError".\n\nSee also: "types.MappingProxyType" can be used to create a read-only\n view of a "dict".\n\n\nDictionary view objects\n=======================\n\nThe objects returned by "dict.keys()", "dict.values()" and\n"dict.items()" are *view objects*. They provide a dynamic view on the\ndictionary\'s entries, which means that when the dictionary changes,\nthe view reflects these changes.\n\nDictionary views can be iterated over to yield their respective data,\nand support membership tests:\n\nlen(dictview)\n\n Return the number of entries in the dictionary.\n\niter(dictview)\n\n Return an iterator over the keys, values or items (represented as\n tuples of "(key, value)") in the dictionary.\n\n Keys and values are iterated over in an arbitrary order which is\n non-random, varies across Python implementations, and depends on\n the dictionary\'s history of insertions and deletions. If keys,\n values and items views are iterated over with no intervening\n modifications to the dictionary, the order of items will directly\n correspond. This allows the creation of "(value, key)" pairs using\n "zip()": "pairs = zip(d.values(), d.keys())". Another way to\n create the same list is "pairs = [(v, k) for (k, v) in d.items()]".\n\n Iterating views while adding or deleting entries in the dictionary\n may raise a "RuntimeError" or fail to iterate over all entries.\n\nx in dictview\n\n Return "True" if *x* is in the underlying dictionary\'s keys, values\n or items (in the latter case, *x* should be a "(key, value)"\n tuple).\n\nKeys views are set-like since their entries are unique and hashable.\nIf all values are hashable, so that "(key, value)" pairs are unique\nand hashable, then the items view is also set-like. (Values views are\nnot treated as set-like since the entries are generally not unique.)\nFor set-like views, all of the operations defined for the abstract\nbase class "collections.abc.Set" are available (for example, "==",\n"<", or "^").\n\nAn example of dictionary view usage:\n\n >>> dishes = {\'eggs\': 2, \'sausage\': 1, \'bacon\': 1, \'spam\': 500}\n >>> keys = dishes.keys()\n >>> values = dishes.values()\n\n >>> # iteration\n >>> n = 0\n >>> for val in values:\n ... n += val\n >>> print(n)\n 504\n\n >>> # keys and values are iterated over in the same order\n >>> list(keys)\n [\'eggs\', \'bacon\', \'sausage\', \'spam\']\n >>> list(values)\n [2, 1, 1, 500]\n\n >>> # view objects are dynamic and reflect dict changes\n >>> del dishes[\'eggs\']\n >>> del dishes[\'sausage\']\n >>> list(keys)\n [\'spam\', \'bacon\']\n\n >>> # set operations\n >>> keys & {\'eggs\', \'bacon\', \'salad\'}\n {\'bacon\'}\n >>> keys ^ {\'sausage\', \'juice\'}\n {\'juice\', \'sausage\', \'bacon\', \'spam\'}\n', + 'typesmethods': u'\nMethods\n*******\n\nMethods are functions that are called using the attribute notation.\nThere are two flavors: built-in methods (such as "append()" on lists)\nand class instance methods. Built-in methods are described with the\ntypes that support them.\n\nIf you access a method (a function defined in a class namespace)\nthrough an instance, you get a special object: a *bound method* (also\ncalled *instance method*) object. When called, it will add the "self"\nargument to the argument list. Bound methods have two special read-\nonly attributes: "m.__self__" is the object on which the method\noperates, and "m.__func__" is the function implementing the method.\nCalling "m(arg-1, arg-2, ..., arg-n)" is completely equivalent to\ncalling "m.__func__(m.__self__, arg-1, arg-2, ..., arg-n)".\n\nLike function objects, bound method objects support getting arbitrary\nattributes. However, since method attributes are actually stored on\nthe underlying function object ("meth.__func__"), setting method\nattributes on bound methods is disallowed. Attempting to set an\nattribute on a method results in an "AttributeError" being raised. In\norder to set a method attribute, you need to explicitly set it on the\nunderlying function object:\n\n >>> class C:\n ... def method(self):\n ... pass\n ...\n >>> c = C()\n >>> c.method.whoami = \'my name is method\' # can\'t set on the method\n Traceback (most recent call last):\n File "", line 1, in \n AttributeError: \'method\' object has no attribute \'whoami\'\n >>> c.method.__func__.whoami = \'my name is method\'\n >>> c.method.whoami\n \'my name is method\'\n\nSee *The standard type hierarchy* for more information.\n', + 'typesmodules': u'\nModules\n*******\n\nThe only special operation on a module is attribute access: "m.name",\nwhere *m* is a module and *name* accesses a name defined in *m*\'s\nsymbol table. Module attributes can be assigned to. (Note that the\n"import" statement is not, strictly speaking, an operation on a module\nobject; "import foo" does not require a module object named *foo* to\nexist, rather it requires an (external) *definition* for a module\nnamed *foo* somewhere.)\n\nA special attribute of every module is "__dict__". This is the\ndictionary containing the module\'s symbol table. Modifying this\ndictionary will actually change the module\'s symbol table, but direct\nassignment to the "__dict__" attribute is not possible (you can write\n"m.__dict__[\'a\'] = 1", which defines "m.a" to be "1", but you can\'t\nwrite "m.__dict__ = {}"). Modifying "__dict__" directly is not\nrecommended.\n\nModules built into the interpreter are written like this: "". If loaded from a file, they are written as\n"".\n', + 'typesseq': u'\nSequence Types --- "list", "tuple", "range"\n*******************************************\n\nThere are three basic sequence types: lists, tuples, and range\nobjects. Additional sequence types tailored for processing of *binary\ndata* and *text strings* are described in dedicated sections.\n\n\nCommon Sequence Operations\n==========================\n\nThe operations in the following table are supported by most sequence\ntypes, both mutable and immutable. The "collections.abc.Sequence" ABC\nis provided to make it easier to correctly implement these operations\non custom sequence types.\n\nThis table lists the sequence operations sorted in ascending priority.\nIn the table, *s* and *t* are sequences of the same type, *n*, *i*,\n*j* and *k* are integers and *x* is an arbitrary object that meets any\ntype and value restrictions imposed by *s*.\n\nThe "in" and "not in" operations have the same priorities as the\ncomparison operations. The "+" (concatenation) and "*" (repetition)\noperations have the same priority as the corresponding numeric\noperations.\n\n+----------------------------+----------------------------------+------------+\n| Operation | Result | Notes |\n+============================+==================================+============+\n| "x in s" | "True" if an item of *s* is | (1) |\n| | equal to *x*, else "False" | |\n+----------------------------+----------------------------------+------------+\n| "x not in s" | "False" if an item of *s* is | (1) |\n| | equal to *x*, else "True" | |\n+----------------------------+----------------------------------+------------+\n| "s + t" | the concatenation of *s* and *t* | (6)(7) |\n+----------------------------+----------------------------------+------------+\n| "s * n" or "n * s" | equivalent to adding *s* to | (2)(7) |\n| | itself *n* times | |\n+----------------------------+----------------------------------+------------+\n| "s[i]" | *i*th item of *s*, origin 0 | (3) |\n+----------------------------+----------------------------------+------------+\n| "s[i:j]" | slice of *s* from *i* to *j* | (3)(4) |\n+----------------------------+----------------------------------+------------+\n| "s[i:j:k]" | slice of *s* from *i* to *j* | (3)(5) |\n| | with step *k* | |\n+----------------------------+----------------------------------+------------+\n| "len(s)" | length of *s* | |\n+----------------------------+----------------------------------+------------+\n| "min(s)" | smallest item of *s* | |\n+----------------------------+----------------------------------+------------+\n| "max(s)" | largest item of *s* | |\n+----------------------------+----------------------------------+------------+\n| "s.index(x[, i[, j]])" | index of the first occurrence of | (8) |\n| | *x* in *s* (at or after index | |\n| | *i* and before index *j*) | |\n+----------------------------+----------------------------------+------------+\n| "s.count(x)" | total number of occurrences of | |\n| | *x* in *s* | |\n+----------------------------+----------------------------------+------------+\n\nSequences of the same type also support comparisons. In particular,\ntuples and lists are compared lexicographically by comparing\ncorresponding elements. This means that to compare equal, every\nelement must compare equal and the two sequences must be of the same\ntype and have the same length. (For full details see *Comparisons* in\nthe language reference.)\n\nNotes:\n\n1. While the "in" and "not in" operations are used only for simple\n containment testing in the general case, some specialised sequences\n (such as "str", "bytes" and "bytearray") also use them for\n subsequence testing:\n\n >>> "gg" in "eggs"\n True\n\n2. Values of *n* less than "0" are treated as "0" (which yields an\n empty sequence of the same type as *s*). Note that items in the\n sequence *s* are not copied; they are referenced multiple times.\n This often haunts new Python programmers; consider:\n\n >>> lists = [[]] * 3\n >>> lists\n [[], [], []]\n >>> lists[0].append(3)\n >>> lists\n [[3], [3], [3]]\n\n What has happened is that "[[]]" is a one-element list containing\n an empty list, so all three elements of "[[]] * 3" are references\n to this single empty list. Modifying any of the elements of\n "lists" modifies this single list. You can create a list of\n different lists this way:\n\n >>> lists = [[] for i in range(3)]\n >>> lists[0].append(3)\n >>> lists[1].append(5)\n >>> lists[2].append(7)\n >>> lists\n [[3], [5], [7]]\n\n Further explanation is available in the FAQ entry *How do I create\n a multidimensional list?*.\n\n3. If *i* or *j* is negative, the index is relative to the end of\n the string: "len(s) + i" or "len(s) + j" is substituted. But note\n that "-0" is still "0".\n\n4. The slice of *s* from *i* to *j* is defined as the sequence of\n items with index *k* such that "i <= k < j". If *i* or *j* is\n greater than "len(s)", use "len(s)". If *i* is omitted or "None",\n use "0". If *j* is omitted or "None", use "len(s)". If *i* is\n greater than or equal to *j*, the slice is empty.\n\n5. The slice of *s* from *i* to *j* with step *k* is defined as the\n sequence of items with index "x = i + n*k" such that "0 <= n <\n (j-i)/k". In other words, the indices are "i", "i+k", "i+2*k",\n "i+3*k" and so on, stopping when *j* is reached (but never\n including *j*). If *i* or *j* is greater than "len(s)", use\n "len(s)". If *i* or *j* are omitted or "None", they become "end"\n values (which end depends on the sign of *k*). Note, *k* cannot be\n zero. If *k* is "None", it is treated like "1".\n\n6. Concatenating immutable sequences always results in a new\n object. This means that building up a sequence by repeated\n concatenation will have a quadratic runtime cost in the total\n sequence length. To get a linear runtime cost, you must switch to\n one of the alternatives below:\n\n * if concatenating "str" objects, you can build a list and use\n "str.join()" at the end or else write to an "io.StringIO"\n instance and retrieve its value when complete\n\n * if concatenating "bytes" objects, you can similarly use\n "bytes.join()" or "io.BytesIO", or you can do in-place\n concatenation with a "bytearray" object. "bytearray" objects are\n mutable and have an efficient overallocation mechanism\n\n * if concatenating "tuple" objects, extend a "list" instead\n\n * for other types, investigate the relevant class documentation\n\n7. Some sequence types (such as "range") only support item\n sequences that follow specific patterns, and hence don\'t support\n sequence concatenation or repetition.\n\n8. "index" raises "ValueError" when *x* is not found in *s*. When\n supported, the additional arguments to the index method allow\n efficient searching of subsections of the sequence. Passing the\n extra arguments is roughly equivalent to using "s[i:j].index(x)",\n only without copying any data and with the returned index being\n relative to the start of the sequence rather than the start of the\n slice.\n\n\nImmutable Sequence Types\n========================\n\nThe only operation that immutable sequence types generally implement\nthat is not also implemented by mutable sequence types is support for\nthe "hash()" built-in.\n\nThis support allows immutable sequences, such as "tuple" instances, to\nbe used as "dict" keys and stored in "set" and "frozenset" instances.\n\nAttempting to hash an immutable sequence that contains unhashable\nvalues will result in "TypeError".\n\n\nMutable Sequence Types\n======================\n\nThe operations in the following table are defined on mutable sequence\ntypes. The "collections.abc.MutableSequence" ABC is provided to make\nit easier to correctly implement these operations on custom sequence\ntypes.\n\nIn the table *s* is an instance of a mutable sequence type, *t* is any\niterable object and *x* is an arbitrary object that meets any type and\nvalue restrictions imposed by *s* (for example, "bytearray" only\naccepts integers that meet the value restriction "0 <= x <= 255").\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| "s[i] = x" | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j] = t" | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j]" | same as "s[i:j] = []" | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j:k] = t" | the elements of "s[i:j:k]" are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j:k]" | removes the elements of | |\n| | "s[i:j:k]" from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.append(x)" | appends *x* to the end of the | |\n| | sequence (same as | |\n| | "s[len(s):len(s)] = [x]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.clear()" | removes all items from "s" (same | (5) |\n| | as "del s[:]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.copy()" | creates a shallow copy of "s" | (5) |\n| | (same as "s[:]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.extend(t)" or "s += t" | extends *s* with the contents of | |\n| | *t* (for the most part the same | |\n| | as "s[len(s):len(s)] = t") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s *= n" | updates *s* with its contents | (6) |\n| | repeated *n* times | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.insert(i, x)" | inserts *x* into *s* at the | |\n| | index given by *i* (same as | |\n| | "s[i:i] = [x]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.pop([i])" | retrieves the item at *i* and | (2) |\n| | also removes it from *s* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.remove(x)" | remove the first item from *s* | (3) |\n| | where "s[i] == x" | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.reverse()" | reverses the items of *s* in | (4) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The optional argument *i* defaults to "-1", so that by default\n the last item is removed and returned.\n\n3. "remove" raises "ValueError" when *x* is not found in *s*.\n\n4. The "reverse()" method modifies the sequence in place for\n economy of space when reversing a large sequence. To remind users\n that it operates by side effect, it does not return the reversed\n sequence.\n\n5. "clear()" and "copy()" are included for consistency with the\n interfaces of mutable containers that don\'t support slicing\n operations (such as "dict" and "set")\n\n New in version 3.3: "clear()" and "copy()" methods.\n\n6. The value *n* is an integer, or an object implementing\n "__index__()". Zero and negative values of *n* clear the sequence.\n Items in the sequence are not copied; they are referenced multiple\n times, as explained for "s * n" under *Common Sequence Operations*.\n\n\nLists\n=====\n\nLists are mutable sequences, typically used to store collections of\nhomogeneous items (where the precise degree of similarity will vary by\napplication).\n\nclass class list([iterable])\n\n Lists may be constructed in several ways:\n\n * Using a pair of square brackets to denote the empty list: "[]"\n\n * Using square brackets, separating items with commas: "[a]",\n "[a, b, c]"\n\n * Using a list comprehension: "[x for x in iterable]"\n\n * Using the type constructor: "list()" or "list(iterable)"\n\n The constructor builds a list whose items are the same and in the\n same order as *iterable*\'s items. *iterable* may be either a\n sequence, a container that supports iteration, or an iterator\n object. If *iterable* is already a list, a copy is made and\n returned, similar to "iterable[:]". For example, "list(\'abc\')"\n returns "[\'a\', \'b\', \'c\']" and "list( (1, 2, 3) )" returns "[1, 2,\n 3]". If no argument is given, the constructor creates a new empty\n list, "[]".\n\n Many other operations also produce lists, including the "sorted()"\n built-in.\n\n Lists implement all of the *common* and *mutable* sequence\n operations. Lists also provide the following additional method:\n\n sort(*, key=None, reverse=None)\n\n This method sorts the list in place, using only "<" comparisons\n between items. Exceptions are not suppressed - if any comparison\n operations fail, the entire sort operation will fail (and the\n list will likely be left in a partially modified state).\n\n "sort()" accepts two arguments that can only be passed by\n keyword (*keyword-only arguments*):\n\n *key* specifies a function of one argument that is used to\n extract a comparison key from each list element (for example,\n "key=str.lower"). The key corresponding to each item in the list\n is calculated once and then used for the entire sorting process.\n The default value of "None" means that list items are sorted\n directly without calculating a separate key value.\n\n The "functools.cmp_to_key()" utility is available to convert a\n 2.x style *cmp* function to a *key* function.\n\n *reverse* is a boolean value. If set to "True", then the list\n elements are sorted as if each comparison were reversed.\n\n This method modifies the sequence in place for economy of space\n when sorting a large sequence. To remind users that it operates\n by side effect, it does not return the sorted sequence (use\n "sorted()" to explicitly request a new sorted list instance).\n\n The "sort()" method is guaranteed to be stable. A sort is\n stable if it guarantees not to change the relative order of\n elements that compare equal --- this is helpful for sorting in\n multiple passes (for example, sort by department, then by salary\n grade).\n\n **CPython implementation detail:** While a list is being sorted,\n the effect of attempting to mutate, or even inspect, the list is\n undefined. The C implementation of Python makes the list appear\n empty for the duration, and raises "ValueError" if it can detect\n that the list has been mutated during a sort.\n\n\nTuples\n======\n\nTuples are immutable sequences, typically used to store collections of\nheterogeneous data (such as the 2-tuples produced by the "enumerate()"\nbuilt-in). Tuples are also used for cases where an immutable sequence\nof homogeneous data is needed (such as allowing storage in a "set" or\n"dict" instance).\n\nclass class tuple([iterable])\n\n Tuples may be constructed in a number of ways:\n\n * Using a pair of parentheses to denote the empty tuple: "()"\n\n * Using a trailing comma for a singleton tuple: "a," or "(a,)"\n\n * Separating items with commas: "a, b, c" or "(a, b, c)"\n\n * Using the "tuple()" built-in: "tuple()" or "tuple(iterable)"\n\n The constructor builds a tuple whose items are the same and in the\n same order as *iterable*\'s items. *iterable* may be either a\n sequence, a container that supports iteration, or an iterator\n object. If *iterable* is already a tuple, it is returned\n unchanged. For example, "tuple(\'abc\')" returns "(\'a\', \'b\', \'c\')"\n and "tuple( [1, 2, 3] )" returns "(1, 2, 3)". If no argument is\n given, the constructor creates a new empty tuple, "()".\n\n Note that it is actually the comma which makes a tuple, not the\n parentheses. The parentheses are optional, except in the empty\n tuple case, or when they are needed to avoid syntactic ambiguity.\n For example, "f(a, b, c)" is a function call with three arguments,\n while "f((a, b, c))" is a function call with a 3-tuple as the sole\n argument.\n\n Tuples implement all of the *common* sequence operations.\n\nFor heterogeneous collections of data where access by name is clearer\nthan access by index, "collections.namedtuple()" may be a more\nappropriate choice than a simple tuple object.\n\n\nRanges\n======\n\nThe "range" type represents an immutable sequence of numbers and is\ncommonly used for looping a specific number of times in "for" loops.\n\nclass class range(stop)\nclass class range(start, stop[, step])\n\n The arguments to the range constructor must be integers (either\n built-in "int" or any object that implements the "__index__"\n special method). If the *step* argument is omitted, it defaults to\n "1". If the *start* argument is omitted, it defaults to "0". If\n *step* is zero, "ValueError" is raised.\n\n For a positive *step*, the contents of a range "r" are determined\n by the formula "r[i] = start + step*i" where "i >= 0" and "r[i] <\n stop".\n\n For a negative *step*, the contents of the range are still\n determined by the formula "r[i] = start + step*i", but the\n constraints are "i >= 0" and "r[i] > stop".\n\n A range object will be empty if "r[0]" does not meet the value\n constraint. Ranges do support negative indices, but these are\n interpreted as indexing from the end of the sequence determined by\n the positive indices.\n\n Ranges containing absolute values larger than "sys.maxsize" are\n permitted but some features (such as "len()") may raise\n "OverflowError".\n\n Range examples:\n\n >>> list(range(10))\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n >>> list(range(1, 11))\n [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n >>> list(range(0, 30, 5))\n [0, 5, 10, 15, 20, 25]\n >>> list(range(0, 10, 3))\n [0, 3, 6, 9]\n >>> list(range(0, -10, -1))\n [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]\n >>> list(range(0))\n []\n >>> list(range(1, 0))\n []\n\n Ranges implement all of the *common* sequence operations except\n concatenation and repetition (due to the fact that range objects\n can only represent sequences that follow a strict pattern and\n repetition and concatenation will usually violate that pattern).\n\n start\n\n The value of the *start* parameter (or "0" if the parameter was\n not supplied)\n\n stop\n\n The value of the *stop* parameter\n\n step\n\n The value of the *step* parameter (or "1" if the parameter was\n not supplied)\n\nThe advantage of the "range" type over a regular "list" or "tuple" is\nthat a "range" object will always take the same (small) amount of\nmemory, no matter the size of the range it represents (as it only\nstores the "start", "stop" and "step" values, calculating individual\nitems and subranges as needed).\n\nRange objects implement the "collections.abc.Sequence" ABC, and\nprovide features such as containment tests, element index lookup,\nslicing and support for negative indices (see *Sequence Types ---\nlist, tuple, range*):\n\n>>> r = range(0, 20, 2)\n>>> r\nrange(0, 20, 2)\n>>> 11 in r\nFalse\n>>> 10 in r\nTrue\n>>> r.index(10)\n5\n>>> r[5]\n10\n>>> r[:5]\nrange(0, 10, 2)\n>>> r[-1]\n18\n\nTesting range objects for equality with "==" and "!=" compares them as\nsequences. That is, two range objects are considered equal if they\nrepresent the same sequence of values. (Note that two range objects\nthat compare equal might have different "start", "stop" and "step"\nattributes, for example "range(0) == range(2, 1, 3)" or "range(0, 3,\n2) == range(0, 4, 2)".)\n\nChanged in version 3.2: Implement the Sequence ABC. Support slicing\nand negative indices. Test "int" objects for membership in constant\ntime instead of iterating through all items.\n\nChanged in version 3.3: Define \'==\' and \'!=\' to compare range objects\nbased on the sequence of values they define (instead of comparing\nbased on object identity).\n\nNew in version 3.3: The "start", "stop" and "step" attributes.\n', + 'typesseq-mutable': u'\nMutable Sequence Types\n**********************\n\nThe operations in the following table are defined on mutable sequence\ntypes. The "collections.abc.MutableSequence" ABC is provided to make\nit easier to correctly implement these operations on custom sequence\ntypes.\n\nIn the table *s* is an instance of a mutable sequence type, *t* is any\niterable object and *x* is an arbitrary object that meets any type and\nvalue restrictions imposed by *s* (for example, "bytearray" only\naccepts integers that meet the value restriction "0 <= x <= 255").\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| "s[i] = x" | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j] = t" | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j]" | same as "s[i:j] = []" | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s[i:j:k] = t" | the elements of "s[i:j:k]" are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "del s[i:j:k]" | removes the elements of | |\n| | "s[i:j:k]" from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.append(x)" | appends *x* to the end of the | |\n| | sequence (same as | |\n| | "s[len(s):len(s)] = [x]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.clear()" | removes all items from "s" (same | (5) |\n| | as "del s[:]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.copy()" | creates a shallow copy of "s" | (5) |\n| | (same as "s[:]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.extend(t)" or "s += t" | extends *s* with the contents of | |\n| | *t* (for the most part the same | |\n| | as "s[len(s):len(s)] = t") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s *= n" | updates *s* with its contents | (6) |\n| | repeated *n* times | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.insert(i, x)" | inserts *x* into *s* at the | |\n| | index given by *i* (same as | |\n| | "s[i:i] = [x]") | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.pop([i])" | retrieves the item at *i* and | (2) |\n| | also removes it from *s* | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.remove(x)" | remove the first item from *s* | (3) |\n| | where "s[i] == x" | |\n+--------------------------------+----------------------------------+-----------------------+\n| "s.reverse()" | reverses the items of *s* in | (4) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The optional argument *i* defaults to "-1", so that by default\n the last item is removed and returned.\n\n3. "remove" raises "ValueError" when *x* is not found in *s*.\n\n4. The "reverse()" method modifies the sequence in place for\n economy of space when reversing a large sequence. To remind users\n that it operates by side effect, it does not return the reversed\n sequence.\n\n5. "clear()" and "copy()" are included for consistency with the\n interfaces of mutable containers that don\'t support slicing\n operations (such as "dict" and "set")\n\n New in version 3.3: "clear()" and "copy()" methods.\n\n6. The value *n* is an integer, or an object implementing\n "__index__()". Zero and negative values of *n* clear the sequence.\n Items in the sequence are not copied; they are referenced multiple\n times, as explained for "s * n" under *Common Sequence Operations*.\n', + 'unary': u'\nUnary arithmetic and bitwise operations\n***************************************\n\nAll unary arithmetic and bitwise operations have the same priority:\n\n u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr\n\nThe unary "-" (minus) operator yields the negation of its numeric\nargument.\n\nThe unary "+" (plus) operator yields its numeric argument unchanged.\n\nThe unary "~" (invert) operator yields the bitwise inversion of its\ninteger argument. The bitwise inversion of "x" is defined as\n"-(x+1)". It only applies to integral numbers.\n\nIn all three cases, if the argument does not have the proper type, a\n"TypeError" exception is raised.\n', + 'while': u'\nThe "while" statement\n*********************\n\nThe "while" statement is used for repeated execution as long as an\nexpression is true:\n\n while_stmt ::= "while" expression ":" suite\n ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the "else" clause, if present, is executed\nand the loop terminates.\n\nA "break" statement executed in the first suite terminates the loop\nwithout executing the "else" clause\'s suite. A "continue" statement\nexecuted in the first suite skips the rest of the suite and goes back\nto testing the expression.\n', + 'with': u'\nThe "with" statement\n********************\n\nThe "with" statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section *With Statement\nContext Managers*). This allows common "try"..."except"..."finally"\nusage patterns to be encapsulated for convenient reuse.\n\n with_stmt ::= "with" with_item ("," with_item)* ":" suite\n with_item ::= expression ["as" target]\n\nThe execution of the "with" statement with one "item" proceeds as\nfollows:\n\n1. The context expression (the expression given in the "with_item")\n is evaluated to obtain a context manager.\n\n2. The context manager\'s "__exit__()" is loaded for later use.\n\n3. The context manager\'s "__enter__()" method is invoked.\n\n4. If a target was included in the "with" statement, the return\n value from "__enter__()" is assigned to it.\n\n Note: The "with" statement guarantees that if the "__enter__()"\n method returns without an error, then "__exit__()" will always be\n called. Thus, if an error occurs during the assignment to the\n target list, it will be treated the same as an error occurring\n within the suite would be. See step 6 below.\n\n5. The suite is executed.\n\n6. The context manager\'s "__exit__()" method is invoked. If an\n exception caused the suite to be exited, its type, value, and\n traceback are passed as arguments to "__exit__()". Otherwise, three\n "None" arguments are supplied.\n\n If the suite was exited due to an exception, and the return value\n from the "__exit__()" method was false, the exception is reraised.\n If the return value was true, the exception is suppressed, and\n execution continues with the statement following the "with"\n statement.\n\n If the suite was exited for any reason other than an exception, the\n return value from "__exit__()" is ignored, and execution proceeds\n at the normal location for the kind of exit that was taken.\n\nWith more than one item, the context managers are processed as if\nmultiple "with" statements were nested:\n\n with A() as a, B() as b:\n suite\n\nis equivalent to\n\n with A() as a:\n with B() as b:\n suite\n\nChanged in version 3.1: Support for multiple context expressions.\n\nSee also: **PEP 343** - The "with" statement\n\n The specification, background, and examples for the Python "with"\n statement.\n', + 'yield': u'\nThe "yield" statement\n*********************\n\n yield_stmt ::= yield_expression\n\nA "yield" statement is semantically equivalent to a *yield\nexpression*. The yield statement can be used to omit the parentheses\nthat would otherwise be required in the equivalent yield expression\nstatement. For example, the yield statements\n\n yield \n yield from \n\nare equivalent to the yield expression statements\n\n (yield )\n (yield from )\n\nYield expressions and statements are only used when defining a\n*generator* function, and are only used in the body of the generator\nfunction. Using yield in a function definition is sufficient to cause\nthat definition to create a generator function instead of a normal\nfunction.\n\nFor full details of "yield" semantics, refer to the *Yield\nexpressions* section.\n'} diff --git a/tools/split_hexrays_templates.py b/tools/split_hexrays_templates.py index 6e5d1f1..3755bd5 100644 --- a/tools/split_hexrays_templates.py +++ b/tools/split_hexrays_templates.py @@ -24,7 +24,7 @@ for line in lines: if line.startswith("};"): in_template = False -with open(args.out_templates, "wt") as fout: +with open(args.out_templates, "w") as fout: fout.write("".join(templates)) -with open(args.out_body, "wt") as fout: +with open(args.out_body, "w") as fout: fout.write("".join(body)) diff --git a/tools/wrapper_utils.py b/tools/wrapper_utils.py new file mode 100644 index 0000000..bb45726 --- /dev/null +++ b/tools/wrapper_utils.py @@ -0,0 +1,111 @@ + +from __future__ import with_statement +from __future__ import print_function + +import re + +class TextStream: + def __init__(self, text): + self.text = text + self.point = 0 + self.maxpoint = len(self.text) + self.line_nr = 0 + self.char_nr = 0 + + def line(self): + pt = self.point + self.advance_to_newline() + return self.text[pt : self.point] + + def char(self): + c, self.point = self.text[self.point], self.point + 1 + if c == '\n': + self.line_nr += 1 + self.char_nr = 0 + return c + + def advance_to_newline(self): + p = self.point + while self.text[p] != '\n': + p += 1 + p += 1 + self.line_nr += 1 + self.char_nr = 0 + self.point = p + + def empty(self): + return self.point >= self.maxpoint + + +class function_def_t: + def __init__(self, api_function_name, line_nr, contents): + self.api_function_name = api_function_name + self.line_nr = line_nr + self.contents = contents + + +class cpp_wrapper_file_parser_t: + + API_FNAME_REGEX = re.compile(".*PyObject \\*_wrap_([^\\(]*)\\(.*\\).*") + + def __init__(self, args): + self.args = args + self.text = None + + def _is_fundecl(self, line): + if len(line) <= 2: + return None + if line[0:1].isspace(): + return None + if line[len(line)-1:] != "{": + return None + open_paren_idx = line.find("(") + if open_paren_idx == -1 or line.find(")") == -1: + return None + part = line[0:open_paren_idx] + for idx in range(len(part) - 1, 0, -1): + c = part[idx] + if not c.isalnum() and c not in ["_"]: + return part[idx+1:] + + def _collect_funbody_lines(self, ts): + pt = ts.point + braces_cnt = 1 + while True: + c = ts.char() + if c == "{": + braces_cnt = braces_cnt + 1 + elif c == "}": + braces_cnt = braces_cnt - 1 + if braces_cnt == 0: + break; + # TODO: Skip strings! + return ts.text[pt : ts.point].split("\n") + + def verb(self, msg): + if self.args.verbose: + print("DEBUG: %s" % msg) + + def parse(self, path): + with open(path) as f: + self.text = f.read() + + ts = TextStream(self.text) + functions = {} + + # Process lines + while not ts.empty(): + line = ts.line().rstrip() + # self.verb("Line: '%s'" % line) + + fname = self._is_fundecl(line) + if fname: + + # self.verb("Entering function (from line %d: '%s')" % (ts.line_nr, line)) + line_nr = ts.line_nr + match = self.API_FNAME_REGEX.match(line) + api_fname = match.group(1) if match else None + body = self._collect_funbody_lines(ts) + functions[fname] = function_def_t(api_fname, line_nr, [line] + body) + + return functions

    + + + + ''' % (bgcol, fgcol, title) + if prelude: + result = result + ''' + + +''' % (bgcol, marginalia, prelude, gap) + else: + result = result + ''' +''' % (bgcol, marginalia, gap) + + return result + '\n
     
    +%s
    %s%s
    %s
    %s%s%s
    ' % contents + + def bigsection(self, title, *args): + """Format a section with a big heading.""" + title = '%s' % title + return self.section(title, *args) + + def preformat(self, text): + """Format literal preformatted text.""" + text = self.escape(text.expandtabs()) + return replace(text, '\n\n', '\n \n', '\n\n', '\n \n', + ' ', ' ', '\n', '
    \n') + + def multicolumn(self, list, format, cols=4): + """Format a list of items into a multi-column list.""" + result = '' + rows = (len(list)+cols-1)//cols + for col in range(cols): + result = result + '' % (100//cols) + for i in range(rows*col, rows*col+rows): + if i < len(list): + result = result + format(list[i]) + '
    \n' + result = result + '' + return '%s
    ' % result + + def grey(self, text): return '%s' % text + + def namelink(self, name, *dicts): + """Make a link for an identifier, given name-to-URL mappings.""" + for dict in dicts: + if name in dict: + return '
    %s' % (dict[name], name) + return name + + def classlink(self, object, modname): + """Make a link for a class.""" + name, module = object.__name__, sys.modules.get(object.__module__) + if hasattr(module, name) and getattr(module, name) is object: + return '%s' % ( + module.__name__, name, classname(object, modname)) + return classname(object, modname) + + def modulelink(self, object): + """Make a link for a module.""" + return '%s' % (object.__name__, object.__name__) + + def modpkglink(self, modpkginfo): + """Make a link for a module or package to display in an index.""" + name, path, ispackage, shadowed = modpkginfo + if shadowed: + return self.grey(name) + if path: + url = '%s.%s.html' % (path, name) + else: + url = '%s.html' % name + if ispackage: + text = '%s (package)' % name + else: + text = name + return '%s' % (url, text) + + def filelink(self, url, path): + """Make a link to source file.""" + return '%s' % (url, path) + + def markup(self, text, escape=None, funcs={}, classes={}, methods={}): + """Mark up some plain text, given a context of symbols to look for. + Each context dictionary maps object names to anchor names.""" + escape = escape or self.escape + results = [] + here = 0 + pattern = re.compile(r'\b((http|ftp)://\S+[\w/]|' + r'RFC[- ]?(\d+)|' + r'PEP[- ]?(\d+)|' + r'(self\.)?(\w+))') + while True: + match = pattern.search(text, here) + if not match: break + start, end = match.span() + results.append(escape(text[here:start])) + + all, scheme, rfc, pep, selfdot, name = match.groups() + if scheme: + url = escape(all).replace('"', '"') + results.append('%s' % (url, url)) + elif rfc: + url = 'http://www.rfc-editor.org/rfc/rfc%d.txt' % int(rfc) + results.append('%s' % (url, escape(all))) + elif pep: + url = 'http://www.python.org/dev/peps/pep-%04d/' % int(pep) + results.append('%s' % (url, escape(all))) + elif selfdot: + # Create a link for methods like 'self.method(...)' + # and use for attributes like 'self.attr' + if text[end:end+1] == '(': + results.append('self.' + self.namelink(name, methods)) + else: + results.append('self.%s' % name) + elif text[end:end+1] == '(': + results.append(self.namelink(name, methods, funcs, classes)) + else: + results.append(self.namelink(name, classes)) + here = end + results.append(escape(text[here:])) + return ''.join(results) + + # ---------------------------------------------- type-specific routines + + def formattree(self, tree, modname, parent=None): + """Produce HTML for a class tree as given by inspect.getclasstree().""" + result = '' + for entry in tree: + if type(entry) is type(()): + c, bases = entry + result = result + '

    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°7?DlUJs*)lGC!=_ZKGuKBbjbBzTse7OpZp?hgr zN^4KlxUpSRY64ev1vu!YaKiSwb-f~}i0giTDn_fmWeo#4o6>o|g;$-!AyRgDXZnDMKM?MSy*4YI&M_>5gK9+X|gUKvEp=!&3fl-`~%chZw23~@S;h}i{ zr7&XfNxnX|OJ~>GfQ?a~`9X5)71Y0fLf94FySgmXEQqJd$hG8yI+GG3b=^Q-&^6H> zC@Th%?yuZwd@_(H-pJX8GN8k4?D;K%Hn^qsI4Uf&&EEY)QETKE8ReZHu;ZAl^B%dR3t*-0msuqSM&*w`+$Zbt0yF$`A3<9{!=dbu;mBQysh>mwT)A~t`^6_cag(~RfxC4CJd^*GXTtL;g zkQJp`Cg2XNWPt(h8znr+0R4o&qX*njf1{e;HbTU;UFpd`?&2 zSSr-M*}04Z09rffJStE+y6tAFhM;1yrwvy#cFnYg-R15wXM+fK8V0QQ992w*V7IpF z1pKAuZb@hP742w;&KxZLrlB9wb9(S#I#T!10a6OA?i1v#Z(vVv>bUIlHzbq@mbCye z^8nN8#rqPFw7}xM>{Xh7uDg1V>PJLaR)wq10fOafN$w%IXP52$0O_uwi0T&+m2Se1 zg%zvjTbmfnJ=2h^+1st}QH4A#B=nlC@1=8f$>grpbh;s(0=L`E7w_ZG5cA{HEbmft zt_qZQssk(RE~C6>yLr7?Oi-)M)W!8@#rwFjwgeInwl({x^P1Lw-$F`_xi7@XdLT6goXb>u7QMqQpJ5J|D^9=COz zq}e@Bzr)YYHpK##&kv$NYCE41f|SS^i5h|du9>*IvN)})TJP78sjy4@&VOwX_nGPf zu1b^6JPDxh)OAbh_Vw3@t5c!>TP2Af^F&4rShy zdN=SZHZvEP@aLNQo#!Aw%+e6$jaF1GWdl)e150WkG4xJ;*@jec8|CCNl#o6+5Ev@6 zty~yMlp4?sXuRJsx6bK8mwg+Ch$*qAh8#MP4+iLI0@ho#=Cn>f^&Mrr*J)}&R>@R= z(P8+AE7MkgAN5_RdVj3Qd;OJvhcM!5q*@o?zLv%Sz3~~=;!2Pw)!hJ{Z>Zg3#<1?L zt^m98BSFv{^JILxS8uzIbipwaWEE(;kdMCV3u}ysc#X!WjXM10%00jT@*GhNnW$`S zRZ?oZftyONz5BY_&CfwDW_=B*(8L0Y!wV#5XP;4jYi((n05=10S#J6LYfOcnz3U0foRZ{r#_ll;sXC3>b)u*3bJS1vC>^jJFhmjWcf4=Ikj~VBj5z_XK$^XS zX$>Bm3vV7t_#K_^*YqA_l^@C!giD&_t=OnRlQ#a=w*n{ zahXNES-?uZj`0kt&@+|FG!AbUdO7r{L#w1zCYMAPL~2-!AtO^#>RDZD|A2h~w;!#j z(Nw9HlkJk=8Jpyf{|OOTS+%hd9M-`SJ788VY|L%Tn5Eum#hYOvZJ5)KjfS+++A@=W zRPn8=Jt%Ed#_LU-8`dH`Ha99@CC?CTcncU<^q4a9>Dy=Re#o$pgSIr0vHYN@!d>7O z2%=>If^O<i>vc-y&{yR!4p~h$dW? z3XD8}rCTaBWHG)m{a3?6=6o8sJ^Pb?K-3-uo0T;!&*rDNKIiXp4*2G=5X*eb%xXaJ z{_Jg5aGstQ;bVH*gcm5o|`G=`C7T;YBIa+ek%kM@z4U{qajoG^IW? zsF$+%mR#yuV51K($#LF!Y5B9yLb67eVw(GdGXh(0WHX;a2m&sw=QdjJ|C|;9_*Xw` z<1?+NEZCzq)fN|V$#Z!}nc*jY%R-Vyo=6Ws6@LEQIgg5n7Wi?llS$v1vG)&`g>+8( zKql^GxMsGWf9>9Z(x|Iy%kR98`PpR=hM8_=#B=7HdiNLF#KUOrieT<{2FLuvWg)`Z zskf3wJw9Yl8HLJxt_Dyf(8hj8I_b@_zrKEY{{HDXqGL+E38AG0V39q4lw)dIWxdWT zYd8G=YT6fA7jZ^VGwJ}A{scb(3CL;f?qf`aX?D6@9RL0;q#5s6m(JdxkFX{(0L88i z+{wFRYrhqMmm|MDhdfcil1FjOhBTXNNhN8UGz@kvX9FLxE982i)&>lV9l#ygzS>M_ z(i$@@KJ|+JU;LF{gujq~?-9j@^0SxKv0EDe7}?u62x<40#vXPB9rmO~#>0g&751nP zim$!;JC(IAvxJ|%hse#e)L2R{27=`Bxuq#v6ZV}+OK)dATSH`!{r=ySVbxkb_+~W2 zlAn!dm;2G?@AmZTe}^#rm}F!iTNbo3lWTB0`wEcijM@R*{-qhEcbQ08RLyg4>kw=jZbhp~pIy`eSwr zvE@u<(m1RSKQ6(wl(Wtpms)Gh?~>3fKX*b$VQ zk=I6QPXfz$&`dsmkb^-kFL!)TAz1;o^tr~G6N|hiknO$q=$c$;d)&yz)Axu4mB+5U zOUcq&IcHXsWNP>Uip^PiL0L~4VG~ePVSll9hW4iL*Bp(&9|s`LXqQF)C1gDT6S!FQ zI%muS+;U*da50rEYW9wt=c`R2>#1_J2FRXexK>bFz{+)hC!Zs>&2F9YUqaTCWb#*i z_*$2kcXrm5i?{9?a)Mp<-ItK{WIk{Mm}S%kk~*>Tdd`i`oN!ioM;86{T>Ovo?+A%e zxP%J))d~<)9XSCcxU6;qyYWt?i&alw{~eRf<)maFTQkFB(}%*=>eAY>b_EH$kQ+Xq zL%da-p)xIhU;>2E%7n8DD-VQnXSq;l{^bODODzErW9I?8AeWLfkV6JxZM`_Nz7*sa z0MOsQ#mwnKK2IH-2AM$@7=2dTzzFaorJ6505l|syq?saYwo31VQ2h*BQ2I8oz?l)^ zcSdpiZPlk=BOd+vs~M21<}=sMDOopYecmaZ>WcG!x7Lk6|B9JmuW6=JTr(Y|xh6{e zXa;E|KnZFWtMn-Cx15t)$QBdEW~F%`(+NAbt1p^QBPZ~b+x?Ov8G%46l8M-$Eoyr^`PKn3Zf!Vkmc?vPS3^2g2Ws}nLh1uB=gzhIPQ6{M{2bAcw$&xzLdW~O9^+@l zP}oHULA+1hAcStiCeOKf{o8+Xm(s$V*(20d~R&yQKW*x>T_*>CL8bW z8O~Na2r~<3Ij-VzFY1q|MsV;}rMW<0c?S!2HJ}~Pysk(EZuuhS|6xZpFh0>`E1%z@mVR}yHO?O z;)BG7&si)EF?bzx6k{5Q(`mrj zW#}>iYdJ{%#4hy*>~Yn9TYAHe&)_N{bihjY;k8O&cg?Rw;Kegj^N*~&K9b9VV(LS@ z@;EDZZ)i280?I-TX`A{Wt^dGrA6NhHs+LUJMoHMWysD*3JYm@{8t1mci!@0ae#|Wi=9B@3P`j+; z-upmApT5SJhRvDF@oCFgWUdx(+3M<=c~ZtMy+;(5g+#P}Fkyua?mlf!_TZ|sO}|*& zK;pNg`xenCw@Ei-x7AQE%VY3d>e6Yb`D1m}3*vo^=m|0{dl&iw+ZzaPp;B|IG*3CT zBeUJKcRZpeD58GpD%v_yg=8O~IdejdNKUTy?Um1uhz7ZB9N9X$xsI;Z;>SeGHA)tC z0e<7M5uSg4lYa$;^Gq4$E!KuYe@dRdB_{R0G@qN!_QS52V78gNDU1NfaD}{+eep}y z4RlT)*q(9uwx#9s9g+f6&eLoGM3!1ms;W-`zrc>?mm@E3S&ZX2fqshiR7V!k$>g1b zyw?$0=hn*qX590yA!mNW=*(QnCq>qVZ&06rKfD)zrqX(6u&1xO{V=;Z4mWG5i8|>M=A0|{Q zUe@)1*k>Rk)cV_N@wc!B#)Y5t z4&~a9SNMTcEVUsAr=}Ivly3J2f4lD`%7JD1yaE~$`*-UQNq@T{0) z%f=lAg1As}#f}U(Zfac)U>v8L1m-Kx3L&R|s8)jg*})Tp4W(YDHkZ|^m4~>Ofms6_9Z)s6K{@!Ef$?r^B z{F!8hgwx+K`6TaC82ECZVWSjQ#1kf4|3EmM{>2>73~>4E6G<$)OfD}lRUVxAp#0x| z3H_sFg@m)L###>O@~J5LjavoERKyi1_}nyC-xyZRd0Xm}w)wjms<5wt^PQedC5eoE z0lq)DUqm=pUB=lp+(ay6!L3y1pgi(QOKz`yA2cRrYihD4W#rSqOHZAeH`YIZ<;a`p zRz)AQF9cBzEVDebjwTH`V<~WN0nJK(k9YVVqJ1ITGFMdak*H@ipI%bUOlR%f3i8@L zVf+$THMxl`e5m=9g4z6PIZ;`~Cbzk6*Y9sA{7()loIsDD3DXAqYzGhpNUjhDpkdwyXv}~JnwgTduc&IY+ZKmG*b;iC;r}>-rMa6aU>4L&EOR2)8k~b^j z*T4eBg_1r<{6c&;T29Dkmi&F^9(97DHj|nc+?hX0{35)TI(XD+u3pJQ@E6-}AhCCs zfAsd+`)_6yl}d^&wnZ?~+;zr(?00L25$09WO<-#Cm(Nk1y4VYf(y;Nhzen0R)#~#n zQNtX?-5Nn&Eem0zezrhoN}9+h$Q;d+iE`)e81p7e_hwnhk=q^u)Kt8-n+5vNaquy$y4EQsUG^$HRa5}|1$<7)X>rQXl9}nXKU3cbICCz;S zbO40=?Aj?!H_AXB^FN7f$Y_g-pOmrjXIFn_%>JmC%dx)wIQ7Gk4UvL_T@`76dzt@V z+O93ft{Vq#Nh0+iR})C0G&a!AICgrHFSl2Cy3lTII5QD=FoL*7~<7?pKCm7aWXLiKYR32o9uF1z45mM`( zqt(ia9A-~>UZiut*a=3qqFN3zpl)?_|9A-l4WpOlJU zY)fv6^8awY2=hvRpN|nf_^&YOA>DOr^PZe)^HxpvfqO%)QIpH!=BX8i376XWEHH)Q z`IYoJbQ!|{!Qtzy6Frb0hpWuz43M;2K{`8h zyV-q1mmwR8Q;2krM36akq=T(Ma;F#MFqL|nIs1;sLz*SXtH-p!Kt$cysSW_~rp7xN z-K2Zp@p#CQECs>!OrEt+s|obI2$*u&h#}=RQ1vqlL>2xge^AcNYl*!;vE(9*Jh~Q5 z^_TFc;8B==b(IjtdX;vH>^!?He1k2XyCZ4ch6BD^_wyG&r4i=&l#>aRyVB#nZS%qb zoiZza(Wd}Cl|jR5|1-C9M%tUem#g5%)`}zaGQ0NqjCCKL7lJOev{PAp#Xz`RFFg%E z!NqW5*T3+*kiL!%pUVipRBL_6Z2K*$-=`M*#_iUB?H`^OLL3&Q?!TYrht9S}S{JO6{47yuV^z1hn*7tlK5$V88#+VVklD?hV*A7LfJyfZ|Ucq!vZ3>KfC z?2m6-Qr@6DfBz<~gz&DN3-|%3))J7f4&>B&o33z_X_u$$i!`qwk*%Si z_#^@twOb4LKaOq)sZOVjIy6mWTF&{DCe+P4$VN?9VURB`K{wR1mkvyVfU>iI94;hT zHiW@NHII2~dvd#Cq!3#3aZ9@}0eFh)N-Fc%Zuy*je;elY^UIH*^-`x+V9TsM!@H2l zD)=d#zB_Eai9*4y5hS9LT%?EH|AnlX>$Mr8aoLTm(oJ~wOH}>mlCcl(ob;HcWeK1O zUbZ%%NTu75diSrOmxkm+W<4vkM1Yru{64t|<;CnbHP09p)Urbdh9pF<`atJLdIpk1 zau}V)e}z2zP6n-*%XGK2Q)WlJbP)YzVxU&T`kqy%Nm132Tava* z@j()|_N%uQi`mM)&1d1#u$2JHt>w{2LpC}+)2;mO5iDYMGM_Fi#hc}|jMAD*Rf|4` z2j%ii&<}fI219WD3SE-$102T%%!WOktFQZte?2S1v_`78>IjNuCN*bx|HC_1lY#vt1PSb_# zpK<>mF{(Ub$U&ob>|D-$XKihH5luVZHF2SNZ;>pf=jsfXi?7 ze^Jv?qe?RM6qGSE+{tDM0Co zfcC$j)9Ia>C2P%D6xhtWzr4uPGWHh%f8+{fUxHp+>aM^$Tae9X@=Fc`HhiN}lXK4} zPC(2ZeJ_)}#7H~mio|}rh^Lha*Pq6E6IyyuxQKl`r`s@(8K;S9aV2Y5>SG*Rkz4Qi zgObDuc>yd60)O?^%*_N&nYfGNeivtcCSiu`Oz9p|tq;5MEq{^q#c#Ou_NZoZo$)7J;Z2*eih1PhL!Y$wQs2)ry zMvjV3n!C@r8HuQQ|5OG@bGgZ`e^sC2mLXe-Jk72%Tvpk~vSSS#1344Ezw2`uJmvw^ z1{g0=xFNWDmrKw6>l4)LOr9fge<7vS%>eU} zAQv`up3$ltqam4Henf85$lh^(jH4k1HS48wWk0Dxq+pgZeeBP<2`PQDrI0>a0jiL` z<^t&@pIu7Uy|^z=Cw0$qk`TCvv`GujHbi>TdrR$xQ%T3~@sl2U7Mu-^G>j~WLEa%L)0)~)dS#UgCdwNLiCd9)>%?JYo6soM1>q&EI0OQ*q>3Bf9(W7(T3qHPVtKY zfUu1eaE|!^-Rnf*-+uWy!b$W^%(q&+|NUjyq>C!tjAnyb9dL9I0cS(ZUX7wUSEEOg%8Hb zl!I75C_V1W*33Q~&*vr`y^RU`+aV1pqN>T0AFus*@~P6;=V68 zj^9S)Bqajbe>{H2$90`)&34z$pmm#bTeofy_qez{O$|&_6DgHkx~z@^F(-NHZJzU1 zKmBG~)Si}|O7X#|Y0haX1GH|tz;HgZom++NBWne&TwjNJk}`A{Tbs!Ww+W)BLlIss zx#2I53&~q86-kyA`t3+PUJ%1TIQkj;=@H(%NUv17pX$wf)#Pu(XhO&drExw53xm!{^DkOd_&ZM(XO9 zXBGPve=}ZkuI+{mAM#p9P2Q3O6yjpO)4R%^-pL;!9W@isZ7j~Ptw}H7HOFMH1gx~_ zcIW*bJ7W4(&Lo>`B_peICHFQ3Z1eY68`Z9+{fskBN!lDz@00cH+X#VAe^eQAiHqpv6EEeg10+s0HlTs`D*T`2aKS1eoLL{jGwsmv`-yo&JWdb!tkAk9h_es&C0k`9 ze^>P}LB4KT;S=-5c-%Tj<}5f7T@iT~=>6&W@N760*D-s4d0a#sDWVT6@I%mO@fkR) zNFE7zyj=@4A6fo2;tpv8uXUjDa<;2m^Lc2LA1^qeb0aZ-BMKqzw#{eDBLu&+@H9Mjx((!9}eDyyNyDuUbxRoN2OhSNZQlx7IfX~6Q8nyJ)gaN;)fyIe^*9; zfvL9(E~g6-;jMRsGV+nWVTUBGZi zqgX}|h6`|Wv;G%i7auwJ2fJqj3CHLxpJ0(ij%B3Mt6kqC?oLIzwVX?xGwJY_`%Xt1 zr_vYSv})Wai!dt_m|ijCma@sJe=VnTK&lX8Eib!?VwnAmu&VN`35;qB=$$mPlqAjS z0-@X0k8gDyUtj(kktq?Wxaz@i)ZMl4;+;8LDRBIHQ-Jd=jF8Q12&2G@gwKrnoJ?b= zDTsh%Y#V98}56ZEGVXga>6WVGwY;OICbD_?Q@f4U$U{9IJvUKI(Od7Ncla?9oW><*Rf03-UT&Wm;W5wY6 zpyRylAa&N-Z||IOXtfm=;6t7S>Go0IoYWt%L5xmYa;*bz#qLhxmfq{WGfF!RM#xm;YS~qMFcRLddM_waE=3}e^v_!T=5FXQC$4|smL0$ zXmz+8rQ$qRP^7`GDcVj3n{?K6ErR$kE#%>*xYV@y+#DJ%apN<_0UDS2t2y5a&?12~ z_0#i1sH;%ly^0Aw^U1DOG~N2dED~A6wACkEAKQmb1XRS~%mDuVsP$V-;m4wdoPsW_ zLPrzjQpLLxeREAaFf zB&!ucFqsH-($?8c$ZnOtpUW1pr7Jg;$ptKq7pF5@o5&A`b}LJ+#kFCaK@ZrrDC=0`U9#cqN{_H-& z9!9wG0n$J}pyV6dS(9sZKVw)(Qm;cxV{q@8E0Sk37fX~~@^}cwUarYrXVgy8Okm&K zT>cugd}%p24)tVbcvWwG@~<;$C-aa-{{Mwz3D1JR`FhntC9~Xg!ru&w=|co=?ZaEx zcHWEgf2ymo>Rx*vxhasmoyj0YnF`_!?4Nzo%P_{@?N+7WFXw9crgiq_{6UH`-~r2g zs7ftB{`yGcI1{;?gDq_rHuqs#$mL=O_90NDQ3%}J$Jh%SR&vaK=1oxg?PLb+Cop!^ zRr+YDpN+J%tyBP7m`hXjCi?L>0zvyJFpAU%e~@|00uDeaN2pMU?cAo7|IqE ze^&x0Pu`h)Bf0L~sB%vI)>1USf8W1G)Mjg0$%VVxVOX`Oi7s0ywcYUH?agbBm#_c% zHNx``Xs>I@B(O>^E(RL&N$|*^v(oJX`}>a_v|K*2sHWxBYZZ zMu-gg?i*>RKNPWYQbuU?W~)+1CtjDse+Zi*7HWBaRcTtbzom{-c>|86y(=HFc|klc zV}+=-;e1P4pmic9Te~kzS zYn1=fb}hTL-|e~_*K17~Gbwt20NcsV*Oo}P+sKV}F`NTqbI=x+Gk z@VXK_c%IhVf+!mgKc z&pquiz!*kWsQs+=lzjNtKj!*_DB=xHCkpRF$QMvn_Qs;5uT@QTgn+y>qs3-Ge7wEPhb%iwvy$8 zM+HOk=7qtvjh0QRdB&^WJ+TNAYd(>qBpd;&d^{$Oe0ce)4WAMAkUaVX7GY!ECGtLX zb@hSLIeW5gY-+sLspY|k{cnXd5YGfstcc1qp`u|}Lo4s@D+j37e+Op|On-%FoSLX3 z48n1Z?u+D7l~N4keG-kQR>@!Uk6#}je?&YkI|z$Mh9=1RL%xI|!C@pw9ozbJm-mG% zX3kbpQl`~35%jYqXbdCXFGbxR=*<_hm>VDnijj<4X{Yz)Q`FAF$%NB@^0-76B3pAi z$#(b;66`@wl}grLkz8V-#vnNIN3MEC-wGRUoHR&+gNX*h0N~h zuc_AxjlpmeMSbVTR=nWaa(nE%`hpfR%GM`+aas)mwz*czT4~NI**84XEwl(*^UZ%y z)QCaw`FS_O1z-r+BJYe;vA>^jXS%KCQ6(LKbp& z)`yGk)T@~1CYKi~=Ul8f(|#&{|3Vhi%#Q$dYCZ&powR}qwL{5UB}ZFNi*~<|h4{1t zQA=Aut^3|OPFs>YpK{jnYS$}dF+PoY9%JXaIcsW(S4B9O+3Pu`RJsYC4lSm70&dlG z<&$5N3`_Odf82SrV*AL`r1js>B1}!p_bCko_KerJ%OX6jDQz)J$0@yp7GY})J5%y> z+{s`?EqNo)s%4Uo%X!)v@rD+|)6%d*;wvxr0sSxt^j6qcXpzq#` zMSMRAc@cB&P@tF4Lb{?_9o~-4Yax^t8FW}ke2yEb%I#B&urPX+n6vh-<@(27}6}I_+}vz^HP+HSoOvh!q-5wX~TCk8EaB$3DO-758iIU zr`#NcU;D2RbDMc<-H>)dqd@Z^cKOuUf@9E>9%og3K?|whFQbaSmJ$>nIgOa$Bim~B ze^%Mrp2iw|K?}KP&7d9&(aFvp5LE}RmiQ2nFQhpa0{I0k=ksZ5+c&n5Ch^jj`D!#jq}1L`jmbBG z;lPfk&iZd`G3Hhw)JyAU_@ZQ3Scf*Xe@%=ywr-M=Z)_pg`zcKyObm&aX!;@m%1{c` z7rl@4RMhsu_Rsyd5OX_XORcBj`>RB_WrnL;W3(k{Ka~vsh88k;8W7B<64#a(hW8qG zmp4oHpBOg`#G!?hr#Hm%Dy8{UuX0A~F#ql)6MK}NZ-}@<3(4j7gP0`vo^(iMe_|V+ zs${a>8+gebv>4we%v*hai7!80l{*9sguNZctE09K6rfawQ}Yrl zO9ep-7;o$i|GSt>o6M=btyw%ve^Vi-q~R#6il_?ac6Cf&*g{$lgcWeQR$l#_qTn8k zNY$&2!%q_)zOjYK(p+?r=n)T7h+PWj>!+fO(&(x4@*7(Sck|gy-aZ9M&#gi&x0I+t zJMb>eZnU3ci*azZ4Y-Rla9CHiYT7fU=?$1Ir+JlXc!LXBLF9hpq;98se+|+0S*_Vl z?g{!~r28iq;^I=)Q@s8;jlQ@bW{n9qj33>!pK5AbPKKLZ*(-rhUAjC8osJsVlHA-7 zy|4w5IEc~(33FPqY+$|1d}SE5-Mqo+(v1XV-+F>f_T=SCYv^83(%RNKGhbvx zUeH3;N|jZ;a&!2bl#!BeH`#S9&7dj!LNvUfh4?qMx(-)kYY3~tb=vYp<33|QJ*{Z} zf)?Z6mUeHWlYxh{f7o|Ttll^;EjX(ACV&6N7UJD@OYGkPFPG61-f$&#>l1-my&y?% zY!T+RT^Y1d`b=Gxua(+`NArvv&v}z~cw-CUZ^dn{rn$xeAJ2`GvTvbm7Bqn*sw5^pUj+~<5;c>Dz|#<$Ic zP+k$weE`W2wgS=I_{{7hBAzDfe`AZVwpyTJijTTXdY13TRZ1n*k(>qJ-08ltg`|54 zf)7p&G9Cn^f9sfD6SWMn%Q^5(t>+6{h;LJ$79q9Qt;W7@5DLHKlf4R~-O%xWOkc?y za=Ea`ygtf1_1L$i54JV>knO@|T|Bopwve0Cktg{*E_bR1AF`mBAqu(s{JnkQc;DDU z+}p0{91?I!@D6RYo^!J3E7@Cb?%CehBJ7O{z5cNjf8~l`+O;r&H9=q1Zh9eNfbGv9 zgKNIWkD#rFCzL=z@NS{{TFLb^xw&)x1Q((eMDU=_BwfX~l^Psyrw(9Kr9Ewc`vEQ_ z9U{kyj@}XR59cH&L#x(?sO7_JFG9m7xDag$?b1Dmzcw8&=NeVPGW(zcTKCkP_H`cq z6O#_1e=%kmR)M6gB&#kxEhm+n;79Jx1F(hEBAFDwsXRSdkp+U3d3nac)b-2-O?qPs zDIITBy;lLDYS>vmTvs^rtRPRL-gN4`v4zxGGA%2GAr8t}1EP!i$UgL8ro=b;^mQ0w z46gLF08ozj^u0AGbrq0c*dE!uY1a7!7o<=-fBCA-eXA?5_7jaxSoV{%1i zv#fZvIU(ljYWVeZMPz7D(HDZ|6I{qhn3_CcnGm{o_rmyNZOVumV}LW=_>n*V85C9- zfwXdh?awhm$=PLAnZhy}SjsiFkb6`fZ5&l+=Ay5J;A;4|rPlZ3=!|b{A)QzQ?=!0} ze|O?SRk$~V{Q)A77;)={$GxzH)LX8ya8O4YbHW*KWdbo-@Fu6Pb(6USwkRIw-xhEY z_+2R?okwwrbHGJ1G|dfFdV>p54hLShnyID%lRLzPg?y_8X{D!u>p#H7%$kOxu~XJs zensAMfyg;4Q`!e4`0hAF@whV(N6U~*e{<0GRZwk^;gsx-$9EMSa2{g9Dwow$!x`Pn z;MHW+RbiwL*o9mZXh`!Jiz2hKs!K8(YXV!5BTfIF2N9{0i)5>u(2Idk`&jah5$vIOswP4P74X)Va_!w_R|1hzErfBtBl zg+R|;e3X$jb2_}PM9mvqNK_rW3D+_3dJi7ep+QoH_jp?BcEf<*;6hB!rX&cMVojGX znM54Z#hhej(tUSSqj+4IT6Q|Sw39)Q*ehmX3ko@n`>cho1fBT?DFPR?H6lYhm^h1~VxR{RmvjtY42aQ~NF>QNI z^ZAXO{cij&bMr?`Pd&VCHy>h0MApXjV+)yDPLzi&~5~wg`KJfHBP=z^}{G?bi&{@ORY=FWfH(=Gy-Xv9{fNZxCEArG2LWa`hQ!}+Pbo!j^Bs-7SY!wLB zYWwnShV;zjq==j2w3^a}f3T{3kvFpwf)}leSOsK3En2lghMEeL)j6~DqCRJxvg7hA;}QXH5^W>ZPN7nk8Kmu3a%E)wB-w8 z^nwwJGJ3Gid66qqxA~CfX_h}-uT=X zwvZmJD&_cY>8?6YNjMuhYlh36KJNbJD17`Cm3vd(ZL?3PshejnpdPJ5zU;(M3{UIl zet-+vK!>=VO66=lf3>!F`X#jAx~Z7&e7*)3Vsdb~Al(f<*T`=u@t>yzsnX>9GWyt+;S;{2QQ~rBcF8>zJ5TE|zRp8TDx^!Bxv&}SE{LH_w#_)@GgG?i^n7EB zsY{Z)dJ`jv8QDIZqn57CFGQ4|R;7Mpi&;wAU+G=%nrR!+e}PtEhC5COXoW5kA#ZFk zGX*6fKry&ThEnJmfnNCN7XK=D?=&j+Ci~!|`ukg(i`Xu{Yu4MMAPUzNgL{JuQ44FA zvX{-;wx=BYh8Kbv+WFXEz9?e(1Q$}81o=|a$SpxE8+Spp@II)S6qNm@-SZP%OuknT z1hSW?>f}?Ue|h^IqAKF*hMK+sx1)GmqP|bxzCa1T9}x9^64X3Cp73M0*g`6Ob6*TS zvw2iGk~687{FcmP)pFDO{KghjR}PAVczTG}*#a>GT?%)cz4NZ#Bzxc3LSpJ%8K+Y5 zxQdN~_j)=4zfWoOSy*@W7RBSXEuR`JdZ1{^nuXT{e+Ssi!g-e~a=xQ@TuGaK0$e}c z=S<~(h6=Qfh)evZ?L|Mp#S9zF+I?85Qy>T6a*>TT}c35Tq`d9Xrrn zv-Nou@OKoCV-Htp*&e6l4mQU=V&1$2jdZ3fa=ycA;b!FmKRnVYYqwH-%}-0I(8+y2 zEeibsE~eie>eL77l-af+S)5?`B5JUmiHpFAv%g*ySw&L z@P(La)b8k&hejN=ciO#z-9m=!xeL3Y!&rF1c$Mx)1kDg>@7!7U3Z>$AFiEc&=(VYy zKF{pCKr9P!_?@QoX34`|gp~JDCv=aq-F2T%Xue|+I^@`LsM_A@M(KEg`rMbFf8{-B zR9?kq(Mb2x7h6tb>%QjRGKjq`PzPQ@fIpes7V_NuVoN#y&^zQx?R&WCX6vW;>!cwC zBs`)GzSvUEczxj1e&>qMw0>1Cmp#_0&{@opJGO0>RC}cKo*ev4pP9QOjIG!fNE9yX zBUJ5+EhWBPu-PNc_W5`m*M`uxe;U@HkGhSlw=cF7VE{SM*0tO9LQmDxTESYYUVz*< zVoCnRmQs5JSvMZ^o}Za^#XF_DsMR~3PYDmi5McY2wBUS>!P7eX8IS^Aq_VgWV|(Du zZi&6rUs)?|d-=H0>UEQ?<&*Vfb!066wc_AXmYi?UWnjKEwRsnhUP$ISf7V`*dok;w zUrB53mfKz{h_q7*J?37oR$q3vza2TZ|A5OOaRcgwD&V}g0B72M-pMO-7X@Dm9FG46 zm!e5`Q)(jJ2T4{&E}h2MCe-ohYNW&dH@KX_x7)!xuxVSDHE8a3>YnF4I|bq}3@&LB z`y%Sl^5@*uiucx&m%EcEf7nP9&j(!AnVYt0g@=1=zar)Ohah((M_c5m;WxOHGdIXl zyia6R2z#eVI_cOH?1$M`v`} zbrs}^s&kbBatFd>>-e~X5~*|8e`VdB`o$mUZ=qVev}|)b?wHq*e;w8ijS~1`OPM&i zF45bi7ZI`k$*SF5!w{KeN9J^Xv85coop*f@EOw_|XhZ4q4hVc~V3iS>bMVEMa>h%B zwcqih;-?TkPU8X+7@hhUoJauvE9)K$Pv?-;GP(~G9q-e1hnOd=sh`6|v86D%D!#IM zn~N6qEdD`zZbVq!e?MV_pIb`b!g`}ANN`<#C9^++uC-rxW1$f_Q~hE~>C0MU>6wjo zCq`0WH=4Sy%UN}v5qqb9CIz_8`;gwtczi%OF0{n(Be^yUK@o<*<+zA6anFS3CrTS) z5b6ISlU+n%WQJH2`7?{hbuFW@lx^Z*R-=BsZ2Rh#9l2!te+@2U%}qm+7oV3rpksWH z(ZR~Qbs@yvv7>7)C&(#r-*i6~NrD_v1zhv+cK@(@G?wuH%&NL{-~Iw64Ss(5B*Yfw z^VGmPCr2D7euGQVt9YHyJDlB{OCb*tNTfmJ?1`Xk5qkawmoj4)#N$3W$nt%G8;#fc zs`P9e1iOekf5ESRoh-dtu}Pl~PIjv)TcGIY@ok{Ltk|-V!}Bk=lsUWPL(P%*{Q?9! za20z@!$$yvW$wrc^%q>qnj6qp%WV>L%qbH@SS!<1Z_|BK2oS8n$P82mmlNk0s=gFA(Q9QvFLZo$-m?Hte?9hv!KHMe4r|C?Ca<%$26ldw zki#0tF(O~&7VZl!Kg3xKZe!Aq|Vk~B=P?SmvXlX`e8P}jfT+m8e1FQr)?+FhxBiFDQ-4rGoPjV+4OF=(;HaS zx?hC^r1y0uSf z&|{!fC*t?8fiG$0O{6edvVm>;OslqBRs94#}9W*N9&K;ZV@|*-{4X-#rk+<^kFJvi=D=gCpT%c zfA&Gq*P7&`WID0@?=!96Nkg5EEEVhOW0At(QqE4i=4%<9UC+C-wBvTC>wXSYZj0Qe zf5D|_iZ&tki;n^uJlei}>{AD|r(U2OIRW^BOSzAjS8Opz3c@e;Es|R6c+EZ)Y2AW31C&;SY%5A-ng}mUirXQV-Bry0Ds@LafZ`x2`f<4eje+yk` z{v&Pt(b2=@?0HL>#pg-5UYye1gwjT2+TlO)<{yzNGG zzf<;7?^6Lx-ts)`B8_eWRgb8ee}AOSq=EXI*R6njl>D^%dZ}ZGiccAo9pG>FpMNDu z1|p$rx8jSm#xCSOBcGx2XAg?_C4RA`xL{)GuL@nySaW_j*fsn4k5ykMumQ%nq ziXfGWmmaKfkW?A^Z}hdE-?~PzrJRqH!Cbl8d;LPHPNog6gtWy7$0NW(e;iwmT)3~- ze#xgCN@)+GhOo-`*}i2;#3SH~EhV2)1G%lxGJa5fs|tt`K9s@bQe;5n7h6h?s@w}< zU+;qie8^LUhrDyZN!slk$n{@rDR=wsR%<@!qNPM5LVQ$IqgY6nbrTtC&ia!SXOgnTBOkvcy6=l}eX6hx}GDEXWm zD0)$lOXIqF_lu-~9|bnUZ*VCWNj{=lTLU$>WrNq*U?Ok&Sm?7Ou4li&rO__At1V&D!uK_VKdb zlyp6lLAG`VZSot}=xfc{t!!j#gDz>s@7Ny#5&hVT58xP)+9mtLd#I9b-vnV}irmA} z5q($LlbRMaeiN!DjxOc$ZGo5{<)?K#d>aC%NHg6B|E(2ZeMd!+lp{>Zzz9Dab=3W1M^v{APY z@S9aP0^xZYe|ocdSC>#+wy6uiE%gU?M;|!PC5 zozb4TnO8u6ebMFYS%!jGHm|f-3<6A!n-^}k7oSuu6piyP2)W$h&WX?F06V$2s^Jkr z@F3lW=12aGE=7ecT_7j@419^LKk$`WkDd7(aKtDjf5|3@{OoHpv5?e5(nrCgdtOFY z-Ip(hEQPG|mgOTGsG0B`)UoU!TDw8waO5QTSCUZ>i><4mn*FLDFZHvAYy@B~)jfn_ z$Wkh9CaqUCH|jn`xGKH7&ZtB0YfmEeNVnkY$-0?e+$r{tx7Kgl-C-U4rjdl#V%I3t@IIq?)wv^k!eqWs%`Cy$=CKw!%eQciBLo^Pg)GxM_ zQ=7Z)1KEA$@$E#T*4bo>xj`UDPS1huf1f!@p?0kM);l4bmF0IxyPtCAbW4&@i_I5X z%1Pl~Lrt;5*oj*!uav=q`>G|@)%C@eQvGne*!Qg8?t4BQ8cJpiEoBdm@T4!cl=!xn z_h9UPp+-wTwzam!c$`}B@B-NW^XFebbBZ6-Eh*iBctBjaQ9aEKS_0|iGm!$XfAj+_ zrz-@ZpKRfs>U4j=#>2;Mf@4;*6NqjfXc>zQ5bzPppwio2b1L!_UlF#7ybyhADHAW4 zUdMCW-u`|cvH6Uo?snQo73v znV3ysL88~*hdx?Te7p*tWPn(Hf1u@vh5DQo_2(m_xDL0Rt_R>A(rTpS>;o-DEA&Ti zu$QiyzURj@@(3%96sRKuB>*jnx7~Fh>s6nDg_qBKEAq16wU_@T_SlkmoA1!l>UIXQ zW<3Za)=OWjfiCF|oR5F8rSP^f>Kol>N7Ors8A4$^Idj}QC8A=!*izhVe-E^~jUsqx zvxBM$xW~j=^9YBB8p4*u+aQl8HS^lW)pq4pK$Y5tIAsHSi@nn<-bQZRK7z#y^sHTXjcFQ11tBL~rrL0#xud9}CSZa-;CYmgDqDdtL>F1o;MayBG1c zp55vI1KEMB@Yk;&FKa;Ff9$7OWkaGGy}sMdMSfsB!5%3%`#?*n$+y$Gwo)%b$(dkp z`wf8}eHBVIGTZnAEv1-%Md_4k?gucCp}-``9nK3j?2NQ&f1ssk1XZci3-Q;wZH?ly zBn}w4H!+q-$I-7pcMfkuVy}&g586CqJvSM-cJO6G;0>AWeW0bde`Tz37IzR4klji= zYukSRttLK~E^@5p&@$HAxD#o#R3!ST_da*SoCOJN_v*Pn2rcFOV~|fe8WWWKmLZkv zLEvy(s`(H@V$gDqc-e=3AzFaAwWAAZU{cY|)mx)#WSaaJTgnZV@bCfE+CU(&?!LnX z%Y|at#Uhp4Uu-$;f8x}R4@l*6=0P^yZgzTy?~sYT5XF|#{h^JxV=D~(IGaNvZ1!m( z>Qi%W#QNmVpEjD+=Bfv7-DyAhA+kPg+HZG0pE}iZgt`mH+v6s*+Y>KUs z)3z_Rl;U14-rTH(`k0IT1PKIuA#M3xI0tt^PHc0hGZA57df-D7>S{32}BGXSir82ho7!Gxp0yzlBeMj1je&kj4viKk{f7QpkAzj(zHH~TEsr5NRYc8*- zcOEt)x5Q{zfa~D-c?)BA7XZ^2II{eaSJO-KSiJAf55(z$#UcAQvV(6tl|b(Lk!VL` zZlYtGy?dOuU+vBgE#q!tG$R+`KN1~(ba=DT=Hopn*N0W>J@y_Rs24tj!Q}+ueJ6hL z98g@ce|z^c{5Bt$)2=;mZ22Rvp4Xnfji0XekpDNfuJ+EKQ3(SvFyf^D-}WDWWt>DS z?{Z!dJG@WTQHnWnIu~&yREPv*IV2Ms;F3=Vvp03I7WQs3>+OGOyV~Wdavbli+e zWanW$jn!yVhO=EHhOa@mT!xkml#A3wKDJ2=^d61|L|mEl!m`(>H3OQgK9%>-W=>}; z@Ik*<=x3PRX#2fJEtUhnp6&Y=e$6_*7$a2`5d2gqj?GZxF1TV$`TRKN;jgc^i0W_B<&msrQ~R z8JU!uCZeD#Kd(>(*XzVw!4LBGj)h(7Dmu#Ko5riC8^7Kezg+_{t$gzKspGB9f8BcV zAHVRlpm+yhKeLvsL{%ZPn5q-N=i$ zVSl~ER4Xn97Y1#jPU(0}eFhBaV93)Q@Ma*xV_JwhLK=l?)4FZbIiM>5;62mX$D2GZ zj@lm6LUcB#dcWKh>flfZBx(-Wf4RB`x^y!j>M z)A_#XYfN*~+^1(bm9tFsR4`Kme*yqkMBTfB;@6noCP8eqAyz77M%b7pZD|Kn=uB5- z43B9c)rzHMuSzM44*p--Du!U2dRh&(T@d5Pw2)4^o)99oSLzNGK~lFZe}zs@J84-L ziT(BEtHu;7`XFOV`FPK(*J&xRH}dp*uAAaSrwbK$(Vi?ILcmm zU8JeUw2+d2SaOD+D0BkGO{MQskFa>FdFNj(`|4Y)% zD6Q9*-!ZsdI@WpT>psn3TkoylMeibSM{|1FWjCwB9GE z>9{#!dyESj)+$&lIGG68^2A2)cF6TyLr%7v0@P3ALhf#9aBjJF1mTG=TpRh-gCCdOrc@QwAw@G%v9;KzHwcM-S%tiY&e=ek6pcC>bF-`9#sy-VP zZy=`hQ!?+HE~3}>zfaIX<@Dn=P?)+vX5Y}J^4{$B>S{cPF zF23Q%s%_+s7jJC~p$#QJIzq#;Vv9}@*-fV37q!*p0sw#57SrLBVASCZrcfIIoFuEw zXYh?-c6HJ5fBHKH$RRl#ANVwp4zjt3JA8~u`Y8445Xmiz@U`8TQ`?6DJT^#711|*z zUb~L9?dHJVEeom1KFC&mr@EWpNOnXIWO~K&Nh(;uJIf;ctS_&oU_@K?5r9-duaFMN z=TjoiU7(N^<7Nant{Je`CEKW!bYLt!1*vwjUL2#Ye;6;z18Ka&0@kb`qagpgQ9vf)w1D~X?5c%9;sC4JfH)-F&- zlt@~}VilmqnfxfXDMIZS)s>gmnp7^lKT0F5xFTg*8xBUbRNG|%?P|$`x1F1Z86}a{ zK-d|Nf7A|3ZUV|u1t}9yG7W%^3nUb!kj4$cRQ94y;43x43sMx7ez83t(_$1x6TEF^e>E$HH!K~IwbD}WSiZTm#lP}BCJ#^> zKpT=%^)t7Itk4uG3eVH>xoL%bObeM-KpSs11dwcn;avqjw@N!J4ZG5`#RCmmwv$gH z@J!Y;X2Wx>Q#yzg;C9XDavub(TUS7A@q_uiQX3*(BZI7-6Y$&BH~`a^Al430=5h>4 ze-!)})?uHP>b-|Kx05d_cplS2I>2%+ZEK^>Hg^>oq%(uEWVT~;Q6_^Y8nkT6pinlQ z+9m6|*Rr(x^q*onXk0zfpF!)kK;taS%%>&~B>RB7Cnc_a&vtYBf=3!d*;T7*Vv$k+ zkHCs|_F8LEZQiMKwMk!M7`so4_KF!{f8%M%@PM%a@X>yNNbKSi#-C`+vW=d=gR_f` z?twU0E!%8^2;|*`%Yu+=NAMDq-zC2(_J5q`Jtt_1+P7 zHyjQdcgg_@DRxt3^d5xT>YCu8R1k63NelZmSD*5iHo{7}5h}L#Ak?-FfZE!;fBSH; znc2ayus!hyl&{R2@bMmm+JGNL^QsKg>lJ|57>$-Ip98wVlK@I@odGy)Kyzxk5;D@B4-RE1Cf78rmNM_2~ zK%09W)NX2K9@ApZCb_qK%IITptBGel+eesy(AP0<0OflWYRkoAnAI*mhtqH1)7TyO zccfNFyNVxCs13_h4lV3bNgg%&TKGWfIiCjRaFY|fxjSTrLmJB`&mZbVCP?3&Kt*sk zc%BoQOVdJlJlqW!NNFOk7W+24L{tZc&mowe}Xi%0CKk%j&UCe zq~_AJ5MLwzhNO7WuCBGW3-SP#W0Q*TO@{vx71-3~GRsnVJOy`%zZq07@fhojo6@2W z+d@W-*OC*_eKd9^-qX%W98Cw^V>AyQroE) zN^&2z#Y}EMBF)v?O9t}1nSzjtYoq{UK%BqKe9q0}E!eid#&m!+pDV2SP#M+0VX7J4 zTMj_HV*J*&n3|{AwhtdbKIkmn=WdGh43x>M(oKB(@jYbKOx1h&a(~T82;R+FM?JQ% zcm1^CW=@k^7BdvAVLMtq3D2^K>v_(-Y+BPg(v4P-efcZqtPL+ON~E>73GDHR8FlZ7 zr{e<}Z!)Qy7Q*9OD>M}3(?;nEl=)6+U z`mimg5`U!Qp&oyrMVmJyusn)#G#I(;YTcspDU!O^_iXroBWisU+o^5km3@H1rD-uJ z#7RuzVa;4SqIvC1E8G?#q26?HAZNV=MYo)*PYNNVRoNrSD!`e-dy@h%T_)7Gpy<|4 z2758(ZQwEk2z~fe*R$Ed$+b0s<6k)j#CBzp0$IxDt?%q<>e2 zeE=7W3qqRLgx1}FjCX$yDQ(>?!TTZp%< zQbA_YA!#nA!n-Cv1Unh7*RCqMUcUY(=KdbBEURo*q^`1cWLYkhQ@j;*Bca{e7J^BH zYbkS$#V3{H$8vK~>D5&()(uX#^MC8-x0tFfpmDCr7Q9UaCfZ4S{Awv{<-6vJ592~A zAC!Q~Yn@;c<}Ijsr`1{!fV))buDamox0v&#EIa$4I#|ac=z0zQ=gmoUW;&VEEa^4pr(tBNaqBk9JoFt!`RK z_2og5r>gyUqn+63x*aiXd_DClFZ}SF6(lLhEyJ(8{>|}HMHE3w0COe$(4w1OflupV zGzDdo_#B;)O-IcgMitG~M}J%^T`?}VE{Je#(3sVFT`dW?HAzX>4hB-as$O;ee_9uk z9R{@}r5$hM)jEx_U#TQe>U_@4j487?zjNs?q|$;AhhG3Cr}>~sBn+Om*1xbWBtNvC zX)a?Vg(P;)cKt*3$#r1abc2^H&hNyh{G|=h>wTz+EOV1K`?P+*R)4S8F2?Whk<41W zt8AR!6p$$qO_#9RBo9*9U^Wo~ zU~F3K{&)MI??0ZO4?wE^{GM>&o8L6DuqUp2Zg}k>mHG7p6(9|Hz&YL`qC6z9tPHa1 z-n!1_4GJNEX99KjIe*tYf$48<$$mllc>vP*ye?L3 zROgaP&V+C$IDbY-#B3FH-9uoHX)`GwfEork8V#o)@uo0Q32TODbJ*Ct2XPf)8sZpUqN9L|2EG+9Fy< z4jVz`O?UzGh6GGHL1`fmmXr?4wzuqcVvQyb=yNDgcqT+<-iE8x8-fVfgT{XkW?+Z7qLUh88dX`G;X$sb-Rc~hzv_!Cxh=8(bKjw&DPp~$B zn~N=kLTOm=hQwxrSuIBKY2I5z-%fZ)5VTUOz<-=dywaNrS+lxU_I6cafBJtran|Ch zF?w3bs9>|f%sQ4y)67iX(q-?n59o|h1zKOgBXh1wpaIiXr2-EbW6;f&$+bo&5W!cw zCM*;Bt9cvWv1qI;sq!p!lVWwP(TQE7k!yq7mTa{x&fxyw*pShcN4Bt!wCnlp03;zQ zE`I@Hg;}do_F*l(goY1N-@K?gq^C19GR=~8`s5hI*5d6Hu#bhSzm?~V2XdVhxGHvGJh58RvD)Yu4yjI2>n64PeQrI{OzO35nJkA zq12LC>|WXtVd)J*G7Kl%Yg5#DF}If!8wWE6W4lV%d`g%mi@tq`!_!5{o+usJwvbcv z7JcgMv9N?hLQ(U?#x1hFb-(M0MY7@#jO@ehr^fi6czzFz=RPoN;PSUc@ZwBOKP=wm*(QveAq5Hq9S! z+?EIyF8B~i4!gD|Z)bdxHc$0xu;vA;66~R-QA1Yf+g#JuxIqKHjT6$OP&BCiGMQqn zHT$(hErkcA#It>Ud+ngUy`BgsnSWr}a}}S=(@F{k-`#|h#>%N}jY-Cd>!cogYVb?B zXVxi^QfUlf5G`?Q`v527gnUchOQC6#g0L1+>X5wIdrAA-ugTU0z}ik2H{8+c(I!;4 zdh@H&45B;GqF{4VI_rp@e*bwyadRH?d1({8nD0#gh>|jrggQ0`uTCh z!bg`pliC9JCu~_@Fy7S!!XSVd+(0_9b>2@Flqq==4g)?7qP3@mpT`9M-9dW#e&W!D znd&sA8H(W{Vjf2?Q$^zvqn&JYtw?9gJzx2$@q=4udiks%RG5r0v(3hoRda5O5U z+~B8M;@&9254dgh=AvMW=#1Z{x>5{MGR2Iu7jrGKj#!hAo7*IK|3YN1C$767|Ec18 z9qy>FIHZ)woC{s4N}Fynzd(H)0TtwGsyAZ?eQVbJ4P})DuP}+mp5}i0@qC1yKm-J@ zX`s@=95yQ;rVN^!4S!U8ZvB8`IuYaAkQS==U!@-46lQO&)=0reLv8wEc{+#wcH~_k zg#hK|T^x0YR4=+C6&CN1wSPJN{&FJ5^*n7h(`i18jaZ<23zo;kTGag|#hHs7=r$h) zj(T^+X?4Qo%-;j zRea2AZlUEG`{W`SylK;b3y5Bim=TvGQi4JVP@gG~#KkEtZMn}{x8&{h$NK{X;P)|i zjz<2TR5JifQwgItpWO%-HF$g0-d;XVJPZ0rO@jedFJ$sgQYQb(7SqQG7SId)AwC)*L>eoBK|xpl8y?)lQ&5t-ZTm_7K_ zl8^dqWpMzp469Th#IYHT3PkUJA16#nyz`IxfQZRML)I+A2+IeJ4Z@R8b};k3?@z$3|vwcs-EARRexlEE5_ z@XB8L39FKJlHJ`!gO=~?wekfUK;qYqUqx+Wo-jF}S%)AdBS&!Kq#IHKY@_AV1t z8|;dE=YKVYA|+zD&b7bmdjB|~zKc=`(tJi7>xw?)rjt4;Nh6NUsP|upj%eMAujDp7 zv%4eCF1E0YL{f>^yZtls`;P}kHUEhNH%k-kKC+9cWCa07bRo|aVBOy=0nrKP-53rj z6>i?jl6qwg-CN?qDS_4PF9ZSUL=JThJ;9)4FO;8nw3<`X4ZovdK<4N9&|v8#IGqi4WAT4mL@0VYI!Je+OnlHZ-Z&V zXNRTJ6NK2jOqs;nRbu00Z6*!=LUh6fbh>Wapt?ihm?savf%A5)Y#KMkwZG`wiJ;rn z`hTTGD3?mMLi4Id&o;aEackY+Z%6bAha4wV34Wp|AiRxZOoB+~g%w-L^zG&MZzobs zhDuJ*0i|`Tm8*E2YDI`i#hbKji2yLYpTM-16mKv&yiHb$xk~H`LW#ISF|C`F{3D)8 zCm0F0nsN-$6BfXHV*rioD~1rZ?i_*UqDTAT`DnDnAuFX>vY5uEKa5SjaMDL2cJ1wVvn%&PK;=Ds&g1&)V+VW5rx=*Vp6&+`~?o?T*X5T0wFq4#tK(=6u7Qp9Jz`=kJf^1AR{c&KT% zgrQ7j6pCO9O&Pw~7Ql79u#nZy2GXWEhcGcEAi5WR^(eYLFy8cbg4mAxm( zruFTw$DJeZOc}C5Wv%k-851l-nDMLy4&#zBrgR1j{y^>?WxvR0I z(DtF_$McC7u*hEX4hS{`@`Php4P+DFGHtexc37noki2d3B7>NdIEATqZ+|Kiy7yC@ z`QDa}B*WA)TQc^#VIGJp-tK<{^*Iiq?$auK=Z>Gf%$dSetW{&1o%hcd z;F$AFijGej7zI|{4W1IFC7$_RyzaBpEv6HvZfRK2YN}p8#F3`oJGZtBjvUPMCd>Nm z$U0S@&Ibk_sI3LFahNb}a5p8tst^kxPnCPC44wdHuyqBG z^>wI|VYeb2NV>u`0-ogN9?>M~7kwStfBqMNP|rYW-p{yZE})LHCW}7q454gO*7>); z{^h~O4!4+^wZ$t~a&{&(C&vskiBcc~5XrWfhRDC{04OXh2s8VC;l%n+xezw{Q2>a0BtNXof{n~OJ6!`TCOaP*w`dAkbBTs%6ABk8O z$RtEu_&SPxVtPQ@-dnkaHF6bbNGjAu7q#37q-`lz*PJ)bYvY`NTna`r?U& zV$Tg;Rj@9rhS?EtqTy#sX0?5Nh4YE&Oo(Aq_7RY}Br+7Yv+mA1XXrI;+6P^+_>ttL z`@IVlCM7=g+21aQB``QBaOni)8~2X$?fJwi)#byT>jFb#OF0@u6C0F8JL@nlSu<$MN}9MTgzu(} zkb{~>!b@Ra6=*fFf!!JoPVoR7>jl2O9Bq&$> z8=&1gP3V{B6BHQApZqRh4$m1}W9gK133ABqawGJhUyguMN$Qi_%WM`&doGp@yO|`6 zyf(8{FMnP>j;PN#6o%fx>vG|hvn24T5K?Q1c)RC;KlFi;Th9&DZo2aH zzDF6y>Sp}GC#oY$l?h?jlTl@sl|0ERGBqoz*AZ)U{l(gge=i!hz7rv7S$V11=@LJ z|9@QB`5+B7DZ?99#6qQu)tN#Fo6FQshIa&1(GVf=Jf#qU4_>{%-iH%Bp4!^i>8TFt z<@Mv~<%Cg*L06f9P>pb95{*vP$3s*YSm}H6^6~a`g1ayw*o`VP#^R$qhCtZBho)FF zD9qj`xL7~3eWRF4_T+{UqrcosShe?9p?^$w{h+UfdjB{9U!#Ps#`i zrvP5R9AG zV@$Vkl?B1Y(4)M`4ZSe^@9T+mihmIfdsz0nsF@N(9}Bzyr~-}7n_eHEn2u~-T}mKQ z%^>+21rj2HRMq?$snJgPJdt;(;_8- z$cs2`qO>e(U%KGWq2Bj*EsvyK+y_1UU$NAEB0;fEh=Tr}=M_lH=FJ<-JYr3Z@FHF( zww!9p?0G`^S%TIZv$Xx~!8~&8yoX(b(}X7X#5u_wR!*z0nFHLxKDx{^hb~81nJ5@U z)RjuKN~r}T*wYV+-0a+uBY(%qr|2%9&|(Q{r4~xqPD&H*<9L144e6793(k&>Yug*~ZpSG*(t;0sHe~F(%@~yHhr$!Z9mE?8W zH-0Vx7~a%QYG8kT&$-w3b{|RxLMM5Mb9D_3$l=U6AJ2L8(m5_VC(xsYKGS zs^l>;_RARjkkVwXK2rEv6Y380e%?6JQE3X1`Rd`_Wh_ zP=Z+e$ex!!&J{$`%+_ft-vQkn3Z#BpU*>;ltd$wl%+Q7pV@UkMq1aU)mu z-K@X&VMaw!ddTqlb^JxM@%PZq`Q?vuqkJ@_#+3brAsc>_BZ89Fo`& z(!PL%l~O96)yH5Xgrvz9Aajwy?2BUJ95TDlIM?zmmC%qx%o^+;S>VW}8jnOXd>vxa zI++ElKB<^BB)EXzpYT;_E3}kyp~QL(Y>eNV#S$(JqXfrrfwD(XD^?*iM2aLY^2I^JsFZ*?*}Pn1q?$0eSC?W! zugiqB8C7#F5Y!2xF(W28?W`| z9?2)~#(!O33m0{a8n&`dVj?0GGI|%_U_cMm*vuh%2cwjh3iJ=y6JDJH=Z+e?nst%) zAUTIn_vq@&{9Wh#vG)W9MTu^;xH!sc_GBsY-`7U^{2Oy#Uz-kMXp}j$#kY~MVzD?R zW#cA5vH*&ni%&JIa)5lM`N0wiV9@N+rQNEn>wkFi{q5exDwV|=(fFEdg2Tr!9WVNP z@%ZXoMp8N4ey}K3Co)(epD`VoCiXrY)%`-|K(sOr@rv);U;eJ)@T2w87vhsCd}6DT zN4G7wNNxMnj-?zro<$`_lZ#D4%}5UX1Y8cR`)Ys>2ZY>o;*~{OUNPj^Sjw32&j5U= z-G5RMB5!6{d@I*gVO`UNOEUutyf|gk=ic&#=8qURZQwuZbyao`Cr?;3XmH}FtnYJ} z;P=1^rP#KQR+oZZmHo@e#v;WnS#a=dH~a2B$Z}t-wT{#V-;<3E2m>7DYMAwW_W95a^0{i*RLXFiNg;M)i0bak6wEIVogMZ3m1?Q+a zmOu?y;3a;5X@xRdx-_`|iGBhVC>4{yvm57**ZyUZfJK%J?ne0ZhKCUmHHDXn1 zeN-x@kIC_=g7oK|FIdDhB_1>`*gMlSma5e?OmHEC&$!V{c2u+(Ze>Za%tJ@dA0Iz{ zRq-oq7a;mbNHr8~=m-&}H-C5h5`J$VKM##V*bqkn^4v%(fcqh&rs>!WGAbLA z_w?#&l}4wE$I<|&*qm&)hzQbKvW~5O!NgN+xSI70MeZ|s=;C~nDZL~IUkCpL0`08U z%Lrb3f4`Wek_ugm(*qfI88K5O#DPIn&VSAz&4)X6nDtd9zE^MtPk(JIUJQ$k<|3*x z0o#EB)2RvLVwHw#S^R3Vnh4c+@I_!EDyu12 zG|)0j)Ap4o7qe7cE6yQoRN-u#dZZ}up!2q0qGverC)fW{_4xd`j93D_v z(-A=6Blw}ozE|s8+w+N!UsR+^O0gFuaq8sH0+i=+Z}<@qR)5Rjtp}S_)@cH5;+XYy zkp)1+f?-y8{8D!1P^Ef(sL}BAnu8bI4PF>M8XHXQ78tTXvlMHQe&xK2hy01%F@ zCnGL4oWNyx*?6oI`ueLzjEZ1eHsl401Ad$xC;2!j1+He@MzZ@7qn@RPxe71F@k^H< zF?9U4#=*49nlVH9=PKRrzwKXa`Tze#NTU*mZN2B><9`ID>(~iaD2Z`3?K`rqJW~(z zXqC?y$9j&-jccCl>!Wg6%o8BRZN`{ft-Af?<-aOe1(It3{8Np+yAWNZklF-rb4a;k z-$x6pet!2C1)~U%ko5zI9J}aB@bqsRJ17f+(iV2ZsK*aC_X<{Z9JNbt?{ck_S?Y9r z^=x_I$A4>o*#oPdUfeyrQrSXaTFbJQj*u|p@{4VTy|5b@N$%wC7rX8h>~gJ@>aBHr zn6)u2+bg0};N_IDdro(?>%)`Adev3I$BP@OX6z|Pc}aH$K&1}klP%8uZkNV-b(73u z>0}jW#o?=QBB8+NQuK2(UGT?IyubNL!!G>1Wq%J)NvkrV>r5f$j);cfwV70Rwd>~9 zD~)K%IrTk>7f@efw`A=A40c^`AocBge{n1(k1BJt&y9?65^L(3G#fH6ts`1%7T3zn`K4Qq60PT$AER52H2~x!d&E)W-GY` ze5v#S-;ZEBW?x|jqh8)=c)B&s)_-F2ij^$7Uwf3n?|UmC)Ti_J^4-rGS((Dx*}2@O zUHEtbdAgBlpdVv1eCS(Ney6cgAx<`ctTx949i*rr5>Ik&bYz=-T{Vn)d#k}}gj06= zif$oR0vx+p;at>L2~^QMCcxV#js2rGu`e1L0VG}`;vhUD@Re!&z>|c@8 zO%qol*u&}})F@*NemtnJa*7F$8b%q(;0>Um;CvZ06p3(f6p_iCC%3N%f>C!WMmgJ& z{;+>omX=LfxvVi+2`i~~IUT=;I}N0s1+dN(mr1V-jPsmQf}hH=tF;q-c(_yH4NJw59`86;^T}S_Gu%Q&4z#P+6)} zBAjXnV0ski%5q#GzYw+9$aB07)!;NOmQ_|TX4VMCMOj}f#+5mOoh6(+{e@0WmYjkC z)^uid>VId>2{WA0LrBxNHI=jqQC%Z`u8d!wig&cgCKnvm%C|aVw|}-D*XmINeu6ZJ z<>cg=DRM6Xkgo#ZWgl39dR(d}jieltZEPb?W)-oCoueF63gkDCd+I4vy?A<5*}rfR zdvP3ck-Pv%d0^x*5z?&;f4V=TRgWsyLM{SudXjlN1sTwWLA6%fT2AH^7GC2FYFsvk z&Y{4oBi$ec@($G7P=A9YkZ7^n*KAt#+G<#pe4u&|sA#ZKz?{PZ3{9+=&zymCwn`&h zWqevY2fXx1F}4Zp!be)^26%a%h$$RPCEfJt7^5zi9@C6osGa2u%Ybq-Ct?GuG`t=}*Cz;*c2uAkrybz0`OSEUk+-!`P8K-%I(lWPhTujHtX@INJ1#;=nV8 zi7`rgBmwtaQr)vTX163%QjuS?>AiG4Z5g}|HaE?HLGOYC0F zy3;VrO>9}4&3{eL>2FAe#R|vcI1@p|&Yt!7R^xiFQL4`8O5|Qb@K~z+<9{MN zsJJ}xUBmLQfqWDh){DuVj}itH$K>N}+WiX^mj_m0F@H?yaV2;e?`4o};tT<>!R&RV znF}9oRGvu;OHes5$QBFCY{4U7V`)g)0M4hiy1CPUSQIB-eh$BEEY@JtI@t3v5k$Yr zUM?9{{q*kXok}SYFoTpaB(LZSVrW`Y0B&sSKsKio{h+m2zOE3dOr8zAz0TsgAfP(a z@%_!*`hRa`-QM5cX!v^^J~(Qo1M5xBsY=79GLlVm`Rq@(Y7e(huit1yEdfp+$b7xE z04OmXwh%CxJ*7m3$8EfQQhCFf!L-&3=mj;^-Hf+E|~TH;jK!=hX)K5 zQs@kj+zOCjvH~MxS!pj$%C{wrlgJr}K3gtU0)Mt*t<%bbx*RUl(oYfo?(M&6+(PEs z4Btk;aH1Py%;=g84WC4K{AmO4->DQDP6G#8(Imf8V9Ot;r-w!%C^-n2)2R248f9~Q zR|?s(1J~jlQUt#*sm^5Z)*enF>%Gnfvf*7ob`pmzaCv4x-pOvb%n9!&V*m2);lnEx ztbdGP)lA@PNy?mj@p5IB*wMuIWM@&+pm(|bXzU~~N0D3wRcS#SWI;ecX9_YMq^InS=7Mx~PzoVow- z@OYz94CVmVYcdgV!LHamCufk}rw9sE#(y~zD&27-tV`+vZd6$(%@HvS639Ct)_rd< zqx+4|u@36+CQ9QMY+z#Hg$dMmJ#n2!9iyzoiPiE2fSC$o;(f0YU@5%)xPgza zpH$3Z!J|nqsaeF&Xp1bqhc$fN%iNCvy#~@}^yi;XAuDSLHM)?}x=E--?b2j+8H7(%Z!DMLmt!>wmcAYZ_Oa&~8Z0M;FWqI=;4on(S|g-20ElC-U=xmS(1D!_dyNx<(TDdMv4(*-x;(Xn&jsN*-Mz zvNcX(L1G?KPpI#CJ&L0N{5pij02(~P41E=RxLgStT>hV~^M3Rwx@Wx7oPJT|_~Dvc z%^82l2?)4zbFfgc)wG!<{dj-#@bZ~Gibtz_UN}rXf))=M9YGSI(s!}!|It zDQx^^*C!3nip2}~c&WT6_V@u9y0sDpl{td^-^uNVQ7UWoKeS!#j(=S@j(jCa6iMlE z^f}4Gj+5^8jQ8!g>bhgk{>W9sfPw%?_q~P-=SXCgL>8AU9|h4GbAF<_vk!F^x+viD7Dw=o-REt! zJOo)co?hZF_+A_#*?-nNb52us2E*(%Nqr1#MgGIv{AYUk4(S(+aL%tUMdbU4y*Ghl zEG(~}G|uWCm!y9_kop_bFIdi;-<`#|wGWjNI8fSG@miGSmK@b_dUrIxxPWT1E*1=C zSGV1u&{<3vv|9_bAw0#Z(O!SSx#S!b#>}!fEIDNxZ3U=d+J9rEl7{XlEba%YZ#Q6h z-O%WzKoE>LIjp=CsB(CPJ{9r6`=j`obsiSxlX{cy zsCMhG7f@xP?LO8OC>}=~#od4hKhm>q>WNJI)*_J>|>%)o0+lhw~)r}q4*sz>7$Z?yA$JEif4hQ{933TS4 z4}{-g&ENlhBjF?#!i7#h@G9^Y!1@Kxr8AkK@io$m zbC!bD7WKR`}3C@iwhKaaN^QNuo~br{kykFi@XQ%C*31IQC(rkSm21A zxz?rlLVrtjX1a`VoYpSm$<%hp0XwV+bRW9;Q<^GQj^JE}j{zizNBH$XNXL)BxNKBi#DGdxe173=ynHe5$bFrys|?! zosMz&w0^+^_XumpX4(oXX^lgv70?8)Z>3mAc~YqJ^J(3H)r+x#nEr_qp*^uXPb*n` zY&5U^z)rjYE9bV-WD!j9WnNOGFMq>!Po?MOrz6wfKYe<8X*UkI8VGZ;kyJK_a^i(S zs>7#XBP4m^yZR37^PhA5`3uEq=ViakjH4P@vIJX$Q%olqkFi_Go)~NVH?UuD!8;!b zB7n}eMn=juS%JknG+2bVU7S5~0QNth|Gc5BIWil0CoiZBP85!_A#`<)4u3UUPwITX zqxy8^@LQbby*A2-jh4*GN90nQBRV+!i3tMKjY|~-F3^RJU^Ur%Q}T#_l%QP)SkFfu z)h`SgIHQu8H)6VQPBndCdt#A$iB3ZJWR~eqR5u=04Lg(o+Eu)@!A5oIAcUzQTi0jq zV1L89@vI~wpoZX!{$vpS$bUkzQZ>tLF778P|LM-7f(#4M#AE90Ys6cekk`fb_OeSp zMXXQ1HhJV6uPj19uZg6iV*$(#YxJRc7cIU|2dAIrUpHRicyw3x9#V=3TXZ4O*k_`x zT0%7Y0ID1B5KGAiM2`4`bQLvvC^eS&fZm@kTtCg%8)sXzQ5!5X!hdVrk4n}Op=N^) z?8*AXb>Jte8xLy_j`(nGob{1C%u*KzzKy{FqkcNg1*{v_DoB89SFlio2opt~L2Q83 z7<;zd{hV}Of4lLpgpOBjsw1xVNJ|T+C5a_vUz~m5VZGfsHx)3f+#2U*kCmt7#;!Q4 zol`)b_#gi_t}9#79DlME(bTGr(PQ%&rA^bRw$}&Z*6WSSG3c*UyE|A!NgYg3LK@v1 zOb`k-ovwR`>c+#$mE%r94E%4i4`9UHSsEyIeurOg#4Q@x7k@D1q}t<%Jcr-VVucA)SXZu~Vy^*d8EGdbt>DZ%FBXijL)GlO z3$K*6wJ^MP4u6d3?En@pw7U<- zOIP5!5grzpUg;A&aI5sJk7AM0dxAbp?a5e`_hy+dSL*K4Y*LY=70YN>A7IRN@71I1 z<;RkYFE^GI;-xg!-^OW4#L`@1QoJk~(ZcDd^vlbYMO6?mmBlm&>Dzhxq-GNoOTt?9 zc-#8r<$p#y1JAj`X2T%914YJ0`i_5EbhbF0AJv_1hQjZxFgVP2JW7!8X|xu@@_N27 z|MSbAS5VbTk40S^ep*=JQ)X3>=*2>OGOOSn75>)sHf~VTltA(lqUVm-e8tQXBw=o| zQM^8B@&EtGuF!`L4Hy6r8!~k0LrzghZrya7?0?e{;LDBU?$ksT>8}*+9HA9?Dk4y3 z5@_>z3R*AoN*l=P9Eg*u&>v-JNuZ>mNFAXyP_R>uep#EtMXae5i|?AN z_FY5D*qcl8K0dDRz^=5ebyoajka;?(yO$1~;RCNzp@HNSQ(xBG%m3bZlh9rGz&R2s z@qYlKvCy=otg2qZam}x{uUDddH%YrDjhsf@!p!0dlDZnm4*uK;*K7Otjpfyc&e}^; z8ev79n-le-dEvq4y}=I3$Ex_GYT z95dgm+bH_PoA@2pdi(80l>t6fwp=I_h759ty+OHhuFIevk5B9O8~LYfa|K@jDa>VS zZ%grEaOlsus{MyiOVyRUdU69K3zRk_v`A+*E*`G1qf zgc75_W-hIS5#&_7@_MIe-{QZ(mA9j|!+>c+y-P&UoxK}$7* zV6^}dQAUa3d@OI?_I3RwP4p5RF6P`;NJ<#YOA`2e96aebVl_qQdg3PeRM)Vcq za2zOg@1-AFiC)*)u7>aq9i!6H@@epA=<1}%2F-g$kyLHnw2)_>5{h0kgf zAK7Lw%N5JM%CSNipl-auxq}C%w{`WkEf}W;3oE@>-mRS%`<3#Z&JYkb-ro!zv0SZU zUF}{x?H>0>P+fUg5T?6LsIE@;%q(rz5S!WRrR!1NzrNjgRv;`KD_ce#2`Sl06QC%l zpcA6lIWpWSqan9a9w--%jemQbck5UKONx$%M>+9!=WZuh$qCrjEHtGnA@}6ii!Db) z(Q#x9Z#NFv5W!^#6ghYF>Su4kZEV3XhrTapE1+o2ze=9HwLQ8Kh$Q zz#F_%HMYFRyjj^p!(Ukn(zjyUDaCWIe*V zaYe30>84O1<}KkR_7-Ew-d0b{J?HFv<%T?kt&jN%vfZLQ{I2O9yJO5rj(1?MZ#Os} z&_EHULL(uNNa9D`{C4GrJW9puOCWv9*87S*h`=D`$w45FN8CVlCyGLq z>U>P3Z?xc^wo*c*H-E9hcKoBnxl(E*t!AZ1v&GoE*+%whYg9mL0}1;K>duW5UKCQ^ zqibPvnB25cgLtf1YHOXU90==1807$%9m`ILP7{8#(A09^P(QH#W5lMuUG0BnuKODX&t5g9?it>o&jRdb{FJ;~}pa zvhUO+y7L0KctO6l0{VP>Vz+{XOD?qC1%bf7vwP~hWe76th-mv1B);Ri^27=)WP{TX zbg~~ZjHO{)?tkDBvi!6mZ@5o{Jf#f_Nmm6)Ui2=v&e31%(gh2v*q$+2H!iZI|tp8a%Uae4nwu2VXf!pHGjtyrLAMXfCTF&85FV%C@a>N)g=3a%G;LT#iH!pl+`Y8zV@AkpFx3yBy0We^_yXc5)L}Lx zM-`}^IDcEq(TcBQsq42Z4{LKmE{7%ts}Mj_4J!)Ee@f|^kJZZGE z7Z^Rr-;4vRET0WRuecND$!Y94X+fkfSvbODL-Wh3bwcx>Taj<1!r`3a7>akRoo6=q zj#M{+K!o%^HEv(5XX8D1hnUb7cvD~3vW2)XcYkR!gGwKX)(t`fF@a17HZRbHCG@E* zQr;mVAC>TA_VSOao*TRH;n}T^QZ{zaS@%eD+&*K9`eaP?4^USUw1l)E#5P@L=}4oM zzP+Q^WaZ@XCVIVHX+{Z}u=!%1Y+YS#?H>!cM^-W7_~ zAAi+ssuf%Fcv!lwoV69lCuzsoHEqN5;#kKz0;jRy&mPZ8fB)AXH(+^O?ALBK=nJ|y z8``8L1@+nv&2y}Rzp)G34ABNCJaRK$S}ot(rP&wRgCFe@@3p{Rkbl@P8W)zn9|Z+K-H2CdKoiDLjDA%`L_CHC zMd(;#YtK`@p{w|fbLEh7;d~*aXo+jYJ(n^0@Hz$b`2(nKJgjIuhnZO32_(K(>^@e3 zSbJ2y`iZ;${>K&RwIc$%k1`T;^qQ^LxRG^?4R!HYCk9Y=hFGK!y5L1hl-(13N`L#V zIb<*zWTR6eoa@S2gQi$h1kc+55~lBtjVL8^`eZqtHOzJASy|u=h77So`->pK)o9CJ z>fECq6HdRw`X*9v%(|`ou5i2$eM z?gOjrM6d2Vsu@%k$g$Fex;J`4t)&f79lsn$^$buqF6UNDoGPU?b6_YUL_-9fVVX+h z{EsuL8){GkeT=oMM)nqRCQ)gzY0jhccAU8bR9CX|N?;7j19YiWR*?c{+ke55?3Ryy zpg?s+r{}xH40H z#P>#8@_)2l-Hx3(ZhR&Ek)rOByIgN+afmEGauK1iMEfPIpQwuLJ!{cblFzNdI?Z&J`kcf>)W(5HZ;dI+hJqmxmb8*>u z9S7LIBfBvyu}F?>hBV~rg=uq)T4_K?{p5gjW!WqFx{E15&1#PcNI< zkF#EZ>*Ez8DtsbZE4;NH)5w2jO#64qxmR0w6@CHN6@x5<2uX-wg#Au2K@k+AgK2E+ zwK%Fg;o5(ExwG-Tv`kTWM6EaXQmNLK*RFy!&HO8_AoBJ5ADM5Qz(qfiZM=~&jJB`T z>WDK`5Dw_ucHCrv?fb_&*c!guD}x-yeP;@Sh~FV|3u|3xbBVxq2bq7>K2e~H(SjQ|-B%QN{Q@?-_9{#wnyHe;_@U%J;+&%O+QM>To&6>r;BLJOnYV+H?eI%P zO5YUcJ>j6E_(VIK$NhhPC$#O1XhtiQxIRuk7DSUMCuFHz+p*l)?_B*yhkheNq)20! z;Nv^C8pl8>wc`Y2zeE@_Sy%&z`iui=#fRw8f;WdvI(FFjCAR2cgf_UjO++-_4NK>` zrpJ9YHvS3L9lJ}JiF;pyXwhOeECev3L>q{_MynqEjy}I#TE%~)3=uhE7MLe6{aIR_ zPAPSWfqiU9dIxr69Z4KeV<**^rZZiKE%MGCgpf(XgEDc%9@dq=TXU#7>*c&UGc&}2-e=+`JZtj*}Y0imX` z@K?*xro->l>KTtN1G2VmP%nf9Xtl+qOH510-#VfC-~IOaN{`vrQYKbwdW;-V-EmPv z_{jt#I~6Z|u@6_S{N`$VmAXJ6jJ(cA|98nYEFr9(hcNv1{hNLM=ZyhQDOZcirPe?L z6TaHjkQ9GeQmTWFLhWsTyYaljh~2B`4tpBfVw&+`o z64eneWahOZpswz85@!qR=zirmtaA;AT)cbHcq({&!=W`6A;cmVpI*l}(!a60m^;T% z%BY@QHlVv@TaJ;)d5m@(68mPqU8xlhe-()8s0e=;QL@)*jI_8S0mVS#Q%L>i+Z|ZN zGswJdZ1S2bXoDnu43_5banoas3ydxxDRz@U5 z@Ovl)&t_3A1sy0>wdSAS3csUz<-GBTNfLrGQrV(a3qDeN2iuIRelTKrQV{V2lfDqA z&+9jqa-Peimq{rNg@pGM%@|(Olfi@!R5x~%@v^>Gc*2z@ng1Qq3)JlhiNS4m?bKJ3hbc)$tO^HZ^I6!)( zmhAkPpoI7AdBj4w+87YR*xVe~5c;HW@*UILo-fevBPzEQZA2y#7N|b)?wRj0HXf9X zeOkO1>W|L(#iO?noIrQ)9g2=q7pi}G&n+%b93lUNbYnwd#UKLGRI%2k3%3CRsbxP# z6h0|&cwo|({2WQI1W%RRJI*K^}#L7l5~}n9-~ve zV|!EH%Rvx+elGkcsJHd)g|e|DtOmBUpylfJ$6#PhReU7y@i4g9KR*+>tJ z_ZM>VDkVWoO`eoj%*J6v2C08NVYlbgc7JJT) zbz@WEtDJjVF`txu6Dz{Qo^c&1yFVF0^B1Taj|$v{6!9Q&+d77_c7uc;rnKal)%H88 z5A%h-kMsJ)fC)#+o9=ykpTbsJ^(Z~mXNEiPpssKQ&zl-nZ6<9|2n-_Z7A|UoiBGD1 z|MBe=JCrlAiVok-X%v6Z6^~}a-NFvJjWT6E8HN29svA3fU_U8hQkd0B_mboE#gM0G z)ZacCoAp5D_Ckx=8Iz{6c~nUE-NQbkQ3`9R6l8|S&kyc@V7j3oLa-~INQX4W7p)^c z$?Ca;q0Bgf`f%exF_#%t+p7y;A?axY?E^z5+r!%-Ap_GDsTF^R3C4v>5knjgPrO#r z26;!mc~X7<0QK9QgILgn-J=F)7RAS7z}UzLjux87A0H?^3<6T3c#&0+o0LYD2ooKF9GV#!^)ZCB(|pp&PPgu z5XB6NJ`m=ekBj(9<;@wC5R%YXe8Fc~k0dQ8QToyJic$tCUWvjj z7q4BzuQ1iA)mV-ENh#_NP&cUFUM1?(r**6vvJERo|0+H_jHevZ&7C7qMDSgwN&>Yi z*{3F?XFz|;Mbze#5k@~Sz0lcse)VKSqi>3d&Y+$yF(j)~lC(K|3{Rk5=+6Fyv}`kM z9ed1DkKs4eYbkX>e1T}42+YSj7m;gQm}5X&#kiopaw@$(9vW5T=_9BYs@=|*L`pCz z5nH~E3FN#~NSv6FfQ39^`ugFXrQ9&{{{dtw{pQx@#zm-c$ z9!;pwHZ=~-W?GgdBf9q|C8s|y-FWv#FV%ChTzc}g7e$*$2YqjAQnSNp?8jF|OaB6K z!NNJhr)jkLBWSeKDoX!{q20pziqHpwQwHl4{oql($bIsS9?;x|0k*s zHy(eLwkBkp+;&uRfF#t%ky(}*GUAZ-cCvxN zoIrj4#|?(3Tia?hC}u5sN_~|i{MK}Y%on31TPDA z+mk69@2I|A3JO_5=#7z5)J@vl6Xdv;UYumM!*SlHZ(rxzl|q~xQv(sB+EU~kgwqDy zjyz+jAq(|G{sXQXpu{$fxSnZ!m$X{us^FZP!{@G?=nFvI2v)Vl0ly@Yf&`cfmacyd ztwVH?&eJ*LmD?=$Fh8=rX}ji#1vMMKZGs$4Px{v$kiJ|wBj(0K*G@Y@7&nLoD>5}M zn4ukx3hPT8CfwLj5O?8JKT@4srde*-T%hS5)A`5Y-tU3x#*wVA(Ps=etkI@iVUhCqBBuD#`$K?)+@h?>njwca|{Pfg#&HPlbe+ zxK zQqVDzdx}vNX%()9omZBWT{<9;1F6^#{KOslg2O-cO@?hZl{qv3d zyoLKVOC9>OG}$14YjF$}+`<12Ve8Frtf8h+;xeRyTxC-p2x56I!Vbfh(?i~QyTW5u z#iIhTS_NE+r4jL}x+>^H!`^>7=+kRAHsHg;BPlY>U}!F4AuMESwkA08p)%m>Z*Nzs zV4R{doyiE%oJOPi=5CB-%%mH zryGGGR4EgLj><~5EbYC4tBa4Kr;4FKb))-8>I7S-w!>hu7Xc{?*135dLuMYboErnn^&WJwm4oysROxDHlq9i z)s=7+a~AWIm}dy~Sz;oeAQ`qk!IoVQH@Po4il2*fpl76u7SRy{3bYN7K!O_Eso@bG zF}*O8@)yoR+1bOJpiO`23;Vs4BI3%k;SD_8L)@tW%{#hhI9DoQ=@cc!$b8X$pK6hI z#&qS-c*K-bjpF%e)8XpE;UWjF5!779>TmJb@jgHnMe?84aORd^G}mS+fl#S+@6M@%oM+#bK@Ai)F1_?&3Q^PR|+WbPa_%c*$X#v-O+7Nk%)D4>8D05V7ftw<8(io zTP?96iWU;>eU#-O?333in*Yx$J_Y9#vl)p_3XCqf8;4NFG4hryIKp z{1+i93UNB~f^L6^MzWfd^(c2P2lenhyg+YcWX8sF7O8Ta8Dy!9FWvF`ep)Uowb0 zzka1AgT`yEl?wU`Xy8-O@ioW%ti$W)`umM`$yuE9s)Z874E_|#p@NW-v|eNW;0e^1 z8{CCfu`C?ZFY5I9Xp8cJ<@64~`Lxkra+UoBi6v%&X~g1R6;MB{td(zhq0&i*WS zzEYOTE$4r*-2mI$N^vJy8T!5M)#pBSD*K(Ps--n7S{Vl) zO==iJuByr!t!=Y6jqAVCxNYNdTD?zK_Ic9Wr6g!$0*4vQnkkdi)jemPha?lAE>%18 z>Z2Fm%NhiH$gEvE&_Zzyr_;6qu1j$}E+ThRT55ktI3-N|kaxmKZ^dQhsSN_ae!qlF zR;3m$Y|9mlDyH%{D4%moit{IPN&iB2hqY_diWE&)yvlV>*=27*!oh3lHcwCNCD*z$ zxhhQ51e^~WD<_TNSbLgs7X%GE#dm2&1bZ~MwU zM7V!6rh=@)oTBzw4GS0tMeci^)P%oX8Mx9drijF_0QL#}yc4#5)ttL`h>8Pe_pkr` zcB5(?xtUT5yO~ltrw+cLG39^gl95iwLw@JXs*{FmayW#u$!^g>vI{{-Snbjd2Mm7a z)MKuhL%fsL{YXL0G83y%jUjrc2!AJ5ZNYy_CivN)WN9>i*zsB%!&IA3931zYSIFqb_A+R&L_i0n5k^Y;`P5n*y3MMr-W%B8_-DffS5 ze%-YzU-+WGp9r8!x&>eEszJ;~S^29qK$$3pNGGHFG zQfU;Xq=I;!eG6=#j+~J46VjbhwVDwXpy@+~3e*+G!|-osQSfe3Qe3(vg z@K$cr@xKop$3;r@M|8PfG|PYa?+$W&)BkjfYO1dgi^3zhGqgK%_$`)t`qi)}eKbI<*v& zn7#P~U)8+5!MYI_Kd`i_wpE8e%<`B>bzuKxq&BK4^pC)@1F&LAv><=yhJfK>0)Yqm zMQ22C)O5Aq-(a0s@)p)uy)HkAs`wYL=Bk>5xZ`fSs%w6Ob%TR{V99fvHCgUXELX`X zCh!zQ@RV6Dob8`sJ?V`@j1Pnd{AB`ZOB1ULIW~KY13wVI~@$&?z;ceus zj35npBl=yfc*`XQTe5#<7rE^L>X+Q8k=TOr+K3rAPAFg`Sbu>yXLA0;Da>%eET2c} z|K^R9yG4cnutBUk^BWducFhm7{V*ZIIc9p^P0bN8nsV`A;sQDSdoza!fe)O z=B#1H7-<_FFjgm`yL5HS*y&H7LM0528(ddS#3hBRqx09HI)N&N8UlntT>%NF*kH(D zzXQnx9&uH#^g4f5H(Gh^6Lhk%2uq8R_#~|n`~|116ujR{x;Tw`9jgJRlEv+S$>V>H}#tAi@AX?Q6`TH*EIII&IEP`BtUJ=6R!p0i|`EWo)C#Is8caRTQ z>(`w}T6=#!<1c*3r15$T7YMx@Qn+OhXI*VQ4!c*h%V-MH^VL-l6%p|6<1ND=On+hp`q z5G4?_c7gPk_w}C3(DaAyxx^XN{aOn>Tt%Auq_%&puKziY$miJN5{jiG#mq-f5u*l3 zjGZVKt&3l%%$@7@EvVK>`tm2roed$B+^HtcIUl|TWw)m8RHN>fRE(V;)v=)Okn*Wk zB~4|`?5-j^>2<3_cE6-@p6X2vK=26cfkVl@8xcNTzwXXt{`h(#A~?H?hRMUObCpBG zpyYo6tw2!F+R=p{pYAk--yg{guwgEBtu``1QJ+2c6sI?@m$X$9pYGf@>^b`iTB#+A z-b9uykH!{5d60*A<$e8v>d5J~YMV6bLL&4AHPH19acc%A%|N+ZRzP)PtYUAz?S!&) zG3{PLwepAjZZhn8G9jk>3R?0m6EOJ4v?#2qJPK;Hb_)UB~ z#_+3m09)CM&2k^B(p8=FE2>{71}i~7q)-$Qemw|ZVvuD5FOF8huRZ|l#AvzUG-A}U zfbHi;GGS_LZu74Gz;s6!_{W{{gb$#yhtZfDiqy!tE9eZdEWg}|S8XYtQJrBiZb^Sy z2d5Nj=^?P+R`yj*LmWEVjxg|cmJP z7b9YNtHz4JG=nv;7i*QZ481Jte~DBlj$xJ)1#hNK8is)UfjlTPhOlX5-KKwu=~ zAfXf~tXTp+-Hd5MD_3tuEWBM)f1OxUtx-vJ<-oCLg_NiZf1L~rLVCKgM|=TwVoi0+ zv^urYwb$i!K|LcLhzKcB-jxjSwJTwj7^{7BAS3^d=db@w}4C1}B)LHy3mpS^!muF2*$qJKMs zs$ylYn(z&C44DZWbhYW7hP-tCs^0oV(i}NM6UjkkbhrCM{#$E$`H8>Fz=Gf2P<}oF zD$atO!qRy`DNJ&Yj%i9^Kt<0hW73!TJA%r*V9&hknBO>n6hk262bBCsdtJ4ad{)Xw zu0=pF5iA8?AN<9bn5ut}_oOF3M3$X&_;v=Bk!noHEzdo$lOl9s?+NroLAu%1Vt&8# z4C*5%9X3YyHx5ZlP7MUvi_^S>*L}wJLv;exsC|GTkXzxejGP=mV}`d{PN2nCmI}`Y zdvfH~dp^o8nImL8r|O;G!8@yXUB9f|2K@Pb-Z7%zmk5B)i9dgZGJK7wbaT4rD+;-K zZf_Q^84$E6h#u^{480-y>a|dww3s^uBCcW!?_p4K`+8FJRe-d99yt)a1|P$w9K=Gka&VLjckp5F5qi`*z{&85dc z8M#>|{;ZIMAfx+A+7qCX=23=lrbMG*mFrSJDa!uQcIB?{dTDy(5T<4;X^lB1D~7F( z6@t@Ze=b2`e`|UIR0%OpaAY^==!%@2{lYZVfE9(@vx|QVzs{gaoguSoOJiCcX8tyz z_$A4tK;i1)=F7e5iT!8b=5C|hQ_YYRwIpw$6F_CWa%X=E^X-T@9onFeXOR(U;3JDg zR|Z{9z3mnAz1K%bxn2;94A&s3YAjJkiS8Qkp2)^X z9`VsRgjau}6)v>-fBo8)6yqNRO0EsiIdv~jEcNc8TTJ47Kc~Hd zy7O>#2g*98&HIGZSs}|MbRw^|4(=;R>;0Ve2I_yrqAJ$3c5G_U6T|Qjk_bUXL6ifB|k^S$n>q`f*}a_2Hdxx~_+hZY>U_ zF-U(o#2u)?`xkp}pz?_wScW2YrZ6#=X44J8g_ArEgYtNvz`de6veccvwWVcY(jEt6 zEr-?+)gkskn)aYh4AsJ#Cb3>0u7Z!FD99HC2=eAD7Y5RAsA4?;tF4;7CNMYl#%vjj zijkBnc@?o;klklkZ1U-j)zdZ!Chr8WrsjX<7Y%i>J6SW?YL+k`3mdjJ>%x> z;z}kdQ-f52f{OldQxbWPAxV=i?iv0K*NI@7y&qfh7IvDP!SopYtpnnPci+6|Vg7%D z>(1T(ez1B=waV&!c!*KPFNLJ;i8{Un~*h@IT9q$?}OUgC^(6{tHm@B&=hZp1VD z&;t~i_q9cUA0=_|7*WN&d6wAwr@}9&?i2*=W0v^6sJm#U+H)S>dzZ)$V0CG>_r>rl zs54_VSH$FDiL1l_9#{t{mKi{<(%XLr#_C^3mODlXTyG&y+bFFga*gP2(jB2cw2LRW zudvR9QmpJ5ba|tRwBiUVS+ud&eL|OA*ap48`f+5iMpw$_?sN>*fdiSOTIy}~*&g`H|ucaF_eM#1kP>B)acqz1^v z3+KF7R40bYS~iX5w+n=U%T+B$?(T_C(=JNEUqPK2tJEPUEEK;=V+wBWw}v5O1Eybi z?_k}k_uSJgt=U%3<_;%7h?!i)Ejzq*ciJv@`ShpyRzv3l|jtka;$p>?^{rQ(Y7dhFD5Tz>b(|kn-eTE!ssrx1J#Kgh{%70y_UosAC`8I zhMcrdNx^8Wt%}ygf1Y5;9K1DK@Ym(bN_T-+04gC3^(O5@u#OOi;{I^rJzl{=Sq*yVxA8pDD z^gXSsXTdM9ZnY2CrW}9G$_b&gFqYZ!HuVh&F~&v=bh}ijU*?G!)RwpfLLd(YIp{w0 z4Oz(A@ZNh{iltvq>_KqO=8qB!Mu;*ETZT>Ik#tSB*x=U<>$T!(Q~p)O8@Fsv+dp?FN7R`u)gQspFaD@oqVb zTWcYxhe{n=vNztHHLO4M$imV!kPH1H*Zriu>j~CZ?8U1ZHC((*e1Uaj3TJ>&^+vb$ zaGH(??jY>5YBNCF?!fiy=l3Z`xVw>C+m@Vb^pounDz;zF1odon%iUjqo!}0Or_PI9|?3w+hO)c|6LD>Blb9~F(FqRBedG}yycO08VjOg`iK ze1y7tKLa-pm}P;yv)`r=`H9h3VYG_}!mpr?2>V_m7Q45O6M`5_b&!q40ygHOU4?%dB(%nhgMqa7&Qz>I@0ed8?sCrOGl#Ysllrd^rzKkAR)DN36Ra8eakmLS zA3C&EgU$hW&>YBW_jY&EX|T72$Yt#|;pa04kwF^PQYs`huN7*V1(L#D@67*c$CGb8 z9@#U72~unmWL<~10P|z53_(UQiSfn5l|Njp{BiJRMn8 zJ*SSn7o5c?A<;mj3Pb3aTU%|<+@JnDa(Nj?U*3~*P2vdJp4~le#=s+%F55M=PJoJo zhM0eNH=oLwK|f4eZtv4$^v9?Whl+ULdFpEpn^iq=40 zDnZo~xVm7hz+Rx4wP~4o^{u1_s^5P6c0zTPskyU1?vzQ1R{>*(vI)K62m3|y?l)jZ zB0I*a$55dBLeR-8AUu=_Dr5eZ^8IIlf1`i;f7-5XS+LVq{t_TS@OFL$gp~5Bab{{f zxj0{cTH9l%&dbuSRmDRbXU}%I11zaqh}Ml=oZ!cFhIOjcYS+DM8M0Tw`XMhyLG;)4 z!g)5n%i*rweU)=sWA8jSmg(fY5|vRUKJfp(aX%pj@+pW=l(#N9$F@jIoR8^9IqHAm z`BlHac^UtS=26cu1m2L{uLgu>PdR%DG>-~J()rh~|Ga?;!M$>+{x~p^Ss8~QzjQ!L zi1C9F;D1rw2&Hy*O$bhOQrTURb8yPoGI#Ic=FcqFjjyoOItnDI*bslAkh#vR+uGjv z7$02N{|oEJiSI{yvZC%+GmAfyvUGoPcOxAqfe}S^SXacCzqHxl!xL+U5AsZZ%FF`# zp6VH4CdtlntqnxHQCf9|Q(M2>la@3P*Kg7m;ER$+b^eI;#n(nSnDG z&y(lD;{WFpt5+j?!*n?Ig8agd%U-D=dh+BMt0&{o{qN zWBeJmR-sw5oIIDf0at-8Lx#-I{fVP({ASdt0|1!G;bjTqMH2 zefcUcj3HuOQEmG;y54_S#+n8>2L0U6Y21Z43Z);gu9V*0b+)(K=154?T4kk8+y~Uy zc{2C-iR&MKzqDXE0TKwjm{CJ+9IHW4_thp+_6iGaKY?8-mNuOAJd*d-O<`+HrE_fs zvBKje6+^WH5)5*{d~PdSLgmS)dbwUkHm@->*D9&OF`Q+ZxTbTQ~Kp*0F^RHE51- zt-jv4uIM`>K%K$0fMX$IEqBt`%ZJMdhmU-}UttjBv$&wW=D_(@s&cWB8n|AwGya zO47gWD?vf~$XKAXz1}C-J~wzv(vI-j5B{M)LH)QQcDk+Zlgp$Oulp^ZAwOzGfX|TC zDY^rDH8w1c3B417XcMws+50~xNQBhUE8^C}AgsSY-3WgQnitYv8%ARu?PqAQ#rPF! z_@{FeK7r~|5kyCI3Ps#o(yKarUCM82Cy!Ud!+@9DwRz3>(Y zghZ%*TuIA%RvSgu#HLlhljFX4olUt)o#9#kVOMw+lxkuShU!D;JbL!AbT$0(IOk#9 z?_Z!^3@Lw)^~6xwD%p&oP`x(lW-3WI7fLDYE&{3>=0zf4dFp*vwCYAGbbr%%s`}3n zE+SOlubg$s)M+w~(Lh8O9tomrP%9wDlS7f?sP6Qw`SaN{+pLiCWtY4in;V?=Oe4Hn zz4M|_3W?8l!#6m0)-zISk`6c@9cy733!rWs_ql%-&N20_LLZ3dsI{!aL z_vgRwf8Mk{NB<)Hf4AxvGhQUa=0K_73$u}#x9#~{8=h|s@Iq8f8OH_bw)eEg%!#!1 zq~|P|D?Q9-{{z)41H2H_N@e+UD}TnUEE|6W&Q9uX$FT5Og`nPe&4r*2FK4+v6hc=u z{6(x$K|cFvn0qW){{iYnt_@Mua}Fz%fb7|tA4D`s8eoZy)%xE1-(czB79=^8X9fi&*`Mvz~t# zvc(|I*Mu5qb$26x-3-F=OnB!@uelf$7}3(g*~ey&L=2E;`hWq@@%%8B{ZCLY1WWt@ z+JQ9T?(c1gAnv+xLgMwR&%w$Cpk8@4g`i|G*9HRDt7KQ5dc^4TMjLGRVO-i@pl*DC zt>g|aDQD)s!Mmq7!t_Iy6EHn@0?dE6PEsK%N;Z=Dz&)=Z?grM294MltfYm*BnasCN zQt`1`*t=8&+N65-3;qm}lba8~Tl-;P+D}yW%as_KYg@S~gM&*}0YvZ5h5+?@+ovh3 zKViLT@sHy|c001B5Gft8bSrcBx<)&KP5lI@J6pJtBqhn zw?6x`l$vi1u0Fx~aDH~#&a;0qOZ5(g-us^BQj5a_ePFX9qnIHv&8Mk$0=v5oR}6ghFhSB~lab zY`5arFuGNur8PJ9xi(fhgsRpwJ7Psdk?(whvo~;K^;l458j^bLV99?KlE)uNJk|~7 zOUtI1_pOazF{Xx7o>n;!^t=gwYz1sN3ReJigJCtFz&>lsrTcHDETpTKDM&xwLK~oZ z?Lrin8P?3+8MoR*X2$V10aihLRnX<^9cp%l@*wY8Ja-jaV+d^(D$h#N%Eb3fI5=@#>eBxpXLdhcYVl$`y&fes#-SfC4| z-Fs=v67L_req9X^fQ8)nZZN(}qA`vaKqFXJ)@qG>#(==lo(dv_mApq;jhD~9s8I-g z{9Wu)X`e<2iCd{v)|Dsao5$H#||UA-Kjn@j<@$RQcHc5Qhjht86!=qwUb7S&r!W< znTSQs<_YdT@ZWBy-FKJMKNhU{El9YDcgix=!-E{^GKq*92k(w$XdVC1UP&OB3!P zi!)eW&s#vS_8D108bEKbiqEeD9oHQ`N?_=etS#!x5Iog+d_uPNX?UqUx=4MXx zla64HyaRDqm!?sA5zX3>5Z8>zj9p@+M*G8axq-)&u|I#_B{hS<08=e>g(v=&}SZCL&Z6~0iwYFD9PR?PFm#^P`zma^{E87SL3w%a>W=Xc%Y*cS5+`(J|$90dv zOX21gJ7akXxlUsDL`hJtnucHRE?)SQ4Sl#CEC5(vKf~o?VWwoCuGl1A22#_!lh*#rfhvU zyBR&DXaB7~VO?3SQtgPp%JbG#AFVrw7Xy*I5&M6iEs!18m#^!_kuSR-th#;m%w=^2 z^Wr{x15MRd^QU0FctafG>h|G#oO`capKe7{dDY`y~nFqb2qcPPQ{x z>1lrzdkK|RyeS%D@RP{y$e@()cbil9m#HB1XP)Mk16akW_H0f0C%8Mv#MuLKP=VTj z{s2i#nHvHJD}yD5`SFzxLR{2UA~|`NJRmz(6{RCDqGnVTTIBUHc1`f}r=+-+5+R@{HNz2r7_?uhiqp9g{IguO@ho9dNMG8cSN z2C?7F-C;lGe9^*oZhWA!!eHUJt`y;Lo)r9<+-}NFsX9P$dad4ao1aGuec-xNDghTf zVufv-q648T6>zeKW7cMVZuWIluigQ~XCAp{GtRwacf09Q@r!j%f18cH4cF>z8~J}H zLPP^9o&=$dzjC9amh*I9944ZM!o?bXwUI|(>fU+LrPLkWFT_)!V+%w-j`-=I^}T0AtdoC9!y^49 z*-zzCbJ_Dds-XM|@=-qU*9)hmka!Lz#5U6fY8lTl@Rd=;1TNIxjK|A_qNt*VIvf-t| z&DK%Y<}}Yk;nUnO9{26^#*>*gdE~TjK@X8MS69r1m zrXTtqDHp5>WqK33 zm9r%wxHkbBF!>V_^H!`;6PG@&B@O&RQ+8GhwDe1cqbwC>cEllxnD zqpWO-5YHcTzmiC^-T3)M{d{YJ8gF3HgG06Z_8Y`O{?OL1%)zd@kFbhRz3~N#tA3IW z2_?dT~~i;VlriA zQn5bAdZ~LO5q4;3L##Sk-77iDIA6bCsjCg0)x893+CG6j8;@4YZi9==@Q&`4+2|)a zItNxuc}re(C&(PZ!A~U({BI4D;425gPqgYI%k0J7XRUuP?=?7F3r>2*($y4$x}l=H|1|kX#T)rvM$&Uu$#93g5VY|8Zlb zkl`}VcB+4A@pqy=Re_rh?CGK!-d?`4>WdG$_j7B3XrKwQfH0MgmeTXdjEo$W`SA7q z>jrztgtKi$7qr8K{6e^zrio~>yO~9(zI}P)y%Y0w0b3WGA)mmRr`OPcY>zgQKa7ly z)d#E_@m{diHPLFphpFSV3P=ICU-vo?Q>Z^bRm)U=pZ1}-dH9eF^_`(dBq zjn|#a=P`D#)3%pv^E?}p!pcN)&ZD#$HmCs99SS<6r#W+NG8;HUmeR4I$kFCcxC2yo zZp5j(V=i|Y{>@832}yW0Y>6U50P{j}h4 zI9sK*N&90zdN0Ac3N|~4*3ZGW z=9cX0T(7BA%BV9qZ%@lKnF8n(StBL*$rOM8Whq|1?}s;UpH5u-tiGzpVh@mQLK9dG z+8Ct4wHdKoqNU%ql^@>V|Nrg%n^TvHOIUq$#MkVKuN9{XM5WpkkO8S@Igqz+ST3-B zq#rk63L|l`PUk{4)CK&~ci&RUEtJs?(sC}Ce*Pr=^Nyt|GVJ}uS9l^52cog!qmzI5 zGD79HI={gB<*#qfTqv$L&}QFogHhFxCGwmIYv7tKaR5hHEY>f7#h35cLrpqooE_U{ zImgAu09zh;$f1bKw|UbA)_3vav}sR~Lq}ku4)O{Hyx^xyApW z^zZ*7o6t^{L5b**YnWrgBNocd3T+xz>gNCbw?3ckz_$b?X?PpdPSzr(t3XHk1XWu- zjT#RMw=SSgrCKjB#Y)kdW`HgF8mi-%OHY9qM?M|(k9xs$g2BE5lTpT7uO_~N+ObqMl7uj_P4P%V zL1wVN8Np6`&*^p&(iPR2hE_{VvoWG+^jxh)MM%DR(NsW5=7@DH4j(Y>SSZPzleHiP z!zW<0VM%rcU}^FY-nV(;71V#@-%jX{HK@idfJlezEyp0*G)jBuX|5K_<6nUKeE;EY zhpETlQw!F!qa?fdt`&#QMVvl2@NaJSVY$HKJyw-%5@sH70$tdg6HcR+2`_Is-z%qZ zuBF@(l=I!5ha%Tv46spS%PWW=)x_M7TrMWoX{its%B#(7B+m0CgfUalL^7@s9k=J`>zQ zR+y7o!`I9SqVu*OxT1eLb2Y!jg#FT-2SQDQ1omJpBE=qkT+<*2vjMM|PQ9!wL5&b7 zA=+@wL!za%IS=KeK3QuPx&2;n1@&diN=;Z0tQ?Ag;HQ|JR9BfH3Ysn5?dP5gsDW=g zk?*i}>fkRn4HFwyhNff=YFc~a0<&smu~dfY#M{ae75vl)nP-2?(?-=u9QZFntkbF+ z+(EI^S5!N8Fk6#e>wP3771VBcyYL!wLeIo}P)PR`)rr@YB`SOIL8KWrFRDZ>mf#Js z$pQ{2JXff;1i;u_^V~xgpL)$YoK79RO#Dno!BF?ikui8eIHB*BGiDYX$XbrL0!-D4?M> zfK0QN><3lx2i4_QRG)URDhHk(6=ES~*K&runJMs$$)$h9;b1n?3#J_h5OM+3lWMWY zm5vDQTuv2ICj{`UmDrNI$KPcOTbKZ1kBD}|>MOC$wDP%Fjm6-DhKbLxb`a2*01Cva zrozc4S%6bnab_4WEYPhbrX5BFijEK*plo<@Q^+lj7WWE3wF4CBCXMP{5ugHdfSCvHQkhsWm4m(^7f|!=ux?YOX!Z->q^%E z)eip22q`cluoxa4VaGcUB5I{g){16zEo7i}ELCc~O2!V74PtM=(g#nt&(=Uf!y?w) z$(h~~ukh*t1bxN=BCL^GsSsHS0TF`Bd$%}$zwU_1APO_K)?2qGguz>9UWpuwjd_)W z#`%BGkapaDY8WkpdqQOSmK~fs#aiu=Y7YOJo9K786ClrLT4YLM1J6&gO{8$}9Z zw!#HcVhL)8PVN<;20>*hoKgpA$lx==ap<7Hi;G5p+Hv%TddLT|HwbKA>MB`198^ut z#>%Wg?eJ2NR3LS+I%^pody0zPin8Lw4w--!1b}yNS3~@9pidnl0J~n0>ng-&2FeB+Js2$ta?Uk>zsA@h6M6W92 zFb0!q?Kpke=MIS#Msz)Ymj*SeDe3T*`0Lw2>xe6;Gs(znk1*O$ z^2$_43^s(`dQHKV`fLpv7Or#8qeJlQIn{|%HzL=7qi6-#ldUFz7JGO9uw&~wvEa}- ztIE>|jH$qv<416*7X0FF%hqhD~2O6WMSdsCWpg76l39xk;$U{l390M}}x%{wC;E}SPo?I3uql*;g#lzmq(BUgqyb<)IXrIorm zRW!H`d<@^&yi%RX0$qWsnPNBBkw;j)%bcnie8pw;fG)RoNyS;0u+d_-l(>?A)OS8; zFmS>2IL-`*c~!cZbxaaJCHey0SFDGOuUR{6YX$0WJ2sE-y9~tw=BZXa-@q6s=HZ>! zk`I#KpD}I8Dv8=jn~igXY{{B5=H4pgLZ#{Q!pI*V&XknAB73;bz|y0)a)r>P17XF_ z%DK})oyRk%f9!d_f|`Ps={DPcBm`5%!V1P2t?MKcK-#!29^YI4b@7|-Qn4(yFw5&Emt4o$j!zR_Ed;Nt?@Oe-t6G&;O6*$AQz;-Z(lp{| z=3v9?*RX!sfy!$v$+xLce={r8R+iYHw5V9t>=M;q-tJ(0Q{yF_5}|NFX91sO28qJX zMyK019WSW9|L+}+)anPVS8h(px+;2Wu9LxGK>NI>^;-S>-Ins6K~ysSZsqcq24yW- z#9^y~a!Yf6`=|eZ+L0VPa>rh&S}ofU2PajqjhbAo!5<`-yrBAihaUw4Zc3qe%FYFs zVki~M1wrrfEC=O1&!~QUyTgsLjbjUeTcIS{FU@HOD5;y#O?RMgo>9H~^A5YJ6@Ju( zpb#`g1-=uyCPA0>;S~yJjcP}HuHuUy#YQ*GGSzXZ*0jZcp8r4w+j0lr{q+5hf7&4i z2jX&x9^$$3WE=gL;l7GE=Ue0T9{&7?ErfKo)}6OZi9}T4)jQV~prz#%DPAA<2xoHe z?m-}*Ap*fkEg_)b)0ueMxaEcP;)lQQ2!y@$6sb!fwJvTIOnD$=BjhB`2UX)2Q0JOy z6r3X^Q4KJE<{Vn9zO*>7HtOb(>3?0fW}OxY?KvY(Z5URe35;@yBy*ub3Xr^a5R5IcP0edVYf%hFwh@IO{CbBtmc2BNc3*PTfr} zL6sSQl1>XnMqx zF0eko-+_vqWo*_0o41DD5O+jy5}te{>x{ib^`SqW2(wFE1Iv^lf5(jAybPZMEu0lU%>MUJ_ooIXEum%RnhIF1 z1lL2gJZ}~7UTk9Q6prK_pp9R5xKV<$BDO-JY^7Gg_wEx#u~f5pkZyBh_IKu?{SGgGWiO1Q z^$ruibe-xUC9z-_9CXgYckYPDqvag42DW=Jwc=w9ITd`aCGrQe@2-gYiO0|-CgIsR zgDV7fsk1UfA1RhAx`a5r*tqw6YAELV)YS+>*3z!`_ic2oJu6e}jh!rb@%t@OIpc^~ zhYh~T?`icF6Pq;*6h*U^YNO+stzG6}aYR6KU zOS0jrLmT2TLT|KI)7b`qbxZGDp*mAFw*(ceb*HzwQ2gdn307=QTAq%7GZt~Vf1e)i z3+WbE+zAjj2QK)jCEj@T0}3UhI`JwvME?1s(pVcVBi~Id+1WBIiccl4E310?C7y zcRr_s@n2U^XKGW{W*#Xf6Uqt@ID(N7lI=B(+t7Y66X_Y#4&mT`t=NJcaN%d-;z=Sx zpIn;22`^aH{h4a$^{WV6fJ1bV>0H8jQ&2yfu{As#!(83zok?0;Q(_nJ*Isi8kfWLd zMBi)z{xZF!gO2^rkYw&aMFL+CEEmrjRa!p+7wtyKS&4R_GQ&njv)?Y0P4id>0XB&!d*7OCN~{Fa=S# zfaHxi!kCih(7cGm4^JoR)Ydms83&GXsy-HNvxCBTE)M8_W)v!m0Q1;CKRuk9%&>L} zYRyrGHTrhS!%e&OY%MsSyq&=XuubYcSR?B$EsN#ElBI2^17R7tdM~ojTBpi**710f z&&^uF22ccHusthJakgf2%Hqy?&r|9D(RQ`VaosxdmG}h`{I_qCB0wn3`H9l~|U?B@_=1&co~ z`;jc@psc=0oYt_3K-!TO5kB$d#w>v0=k&SuSfTVlrJBT$!2n6BUu@O93Qd;FF4$j& zy}lm-d&?(5rW6^1OgPP=hB-9#AQ}F(LB+Q-P@PwQrxD0kN8tT9){wFdtul8$W1?P5#8msNMf(%Vx~>Hi?eGnZCMRy;Wkc$!hdaFvi! zyX~s8UzRxskwZ6?@MN*kbPH(EkLealz&)u=0?6cwL!odqs#*D@Kq0p zk?|H@=>7h-=|s>93GbWNXIoFXEYjX4vSV6*;9oelol!r>_xyyi?msxI94kVCEsZ4> z;jYe70hHlj<6=ADFSE`>cwbfMb%rFVX-b*L3Ts)2;&+sJQ)Rfn{AIV-7d?TNbB(h! zSB?Fe`di?JRjQ8a8#*pJnje;Zo~iN~1H}vk2j6V!W34zfS`)yYJ73AYd>QrTFz`r! zw`y42YwBKbcQKTcehgfyix0zpo5CNe+;Kc+RPQkM(m$}h8y zRMt39&^Q~?VR09aUM#AiPuQyYa*tZi&^G)M$=i!L!pD=#`^BI+Srdwzz%F{ECDiB4%goc8`w`z=#hs_4J~&u^OFMQi zFZVNMbuiQD`QES8_G>XBea`Ptj$eGk*Uf>2ht&;#|h9Q)RSkEvO zylmG>d#H_1LJi1&hNqUAbVPc8E1hgwZLV9jIVl~VH?xnYM346VHH7^73%QvP78(FV zKw^x6RguIu{`HKM$UaR2DhB{~@jKn&eSN*wm9y(@0&H!n4k{<^bV{veVrEJJ4ioUf zWK9q6vEUuuL@q_#dSbiDo>wRgX%+E6>&UFWT4A;o5;EfK7fW-#tXi*s@TwCT5hR{! zV^Ux%-*~jdcW}1HDqCF}oTV>EY^tDK5(B7?RVAw2q~s;OxT@4$qYP|1;Z?*9lxr^U z%Z!iVCGq7CeN}jVyif@LGV1kR|21DuWF5!saUzh{TmdEOu*aRfbafHeT}kp`m^~wa zy@$&LXuMPnD5eq^m?Uq1voM$R0G8OKYJL6q<~Z<(*Gr8mz&FDMMfmFlfJqju1kwu) z`Y+QyRQ`SBLabNsoFjzy6025qu_1!n!@w|B+1qspK9m#?wK`tOP<%Kw&Q4AgwWO3N z>_X}Zx0f{V-2@moCLSgMunLfA=%5&?moi8XlivP3fgbQ{MSOsNArl8B0IH=SMkwGP zhkBu6^~5>8aJvW>yrI}Tm9&EQTv@Jrz@ zS@Vrmha7!+r3ijL8-Y;sTulNAAy^cg-^Hf+UsGp4o>{H6XZXG(QOtMY1`DOsH~^H# z0vnsO>L&NNRVUtmz&>EhqKf~wOdSxAK&XvM(!A!y68QgEb)qRGS)8p|n2_MjSi)Z(GQ9t(Q&;2gpILl|w>dI-C2Cp?R)Fb>Kd*K%|E zeQOWA;OeQ6?vw`HsuP|CmvX7gm7@>L5(pWhL!O!Zl3-nb>?iz>RYzv2qHyc^F*9KS zaUS2uz+S9%Y0aB5&3sww#8Kh#;k%$bpoU#7RsnC->AOef%A4R0M0!NOg78aV4#X_J zvUFxo%UnH(tzB$~Q74>Ay~;4M_^z+AreBJKyUvN&o_pG*K^S#J1EJsvu8a)WUE)if zJmaXk-}T^s;cksO(dsu+D6UhL7F%hWGV_`x<~6Do*)@}cOB`v+s-O@pmDI=VAkv~e z4{Jdf+^g&ms6Dk!=O0W?u-_{+EoKQZJQjqkwqod|m0ETayKi!&sli7W1wh6(!B50X zB*3;Zu>+X4OUw2)Pu$g4aqVfN7R@(Dl^lF%PhH)ACKlxB&B*SV79+|O-I=ClE}cs$ z!>Q>6RsfK{R0nmVzTfS3h@UnjnwEP2G;ZED8{;*+#u0*Fj1^jOl; zoeK7Um0Yhr6_?qNH8wEj<;cCbFWagCux|#}vlH_!m88wzfp)PL>6b}2`?#OdKUh?F zPzW}JOV*iuPawCDZAup2ypG4bt7=R<(|~>IIx^n6Mp+THX7gFAtyyQBs{#_QwES`o z1i$qG6d|BwsTC0XvFTENIit*=E~hrQ)CLECqqJ)Gtv|IRH);rBH?(&~xhx?>r69=3 za4hjX$C6j+#Q4J0cJqx#B15Fu1ANJ*dZY)2@dsMGd3j~oxcaM{m^#VRYF<^5sR7u* zP2uS!aBU0ZweFzk>wHv_Pqf_nMrv7bp(O!tpqJt;;h!L}uDO8@uM>3e$T;u%QZRIX zib_$D2v?OAvH%kzTI@uoUJvm>u1S4=P4c2BFey;8JW39^L?3_LTJ?6qsvK}e+|@VZ zQVXf&rlZ!1Alga~n>&ivGdw2(Ncmd8;!+=+fM*ODaTZMl2&Zn<2k^sh_wjN6ab%3a z0=^>nKKF=71v?oYhlt${zZtDRFqQ1xDa3uMHY zyMGS0Mp?<`PE_#qOyd}`jZdH;J?GW%R{G3wNZ!}RJtW$N)ieB6*3{K_y1YJ6bF*9( z;gtiJ(Bi%`>d2jd%v8av{o2=|-;AVvASw0)EU}xNdp$Ee=i4Hfh+HHa1|lg+1jFzZ zUDEQ!O2gkqod^s?ko%?zUOX0mZuoD`3cx%N-BYbQSaYT$i|dR)eE4l9g?|_D!#-k8 zGbQgR-5T}R37?9wX{)gSn_8ZLSW=Bz8i7ZuyaQUd6JQxXp5WrXRtBtf=9ns|81W1x z$huUBhfRN-QSofESVA6*9L0vV0Ti#Ume6Cf(l-Zn=-!L^92$JIs>IcQO9w=+7B05A)`2z*&~XjBv!UV++O7M(#}386EC z7E(f-2(}xU`!enA{q2A3F_m2|+3}7q8Lh!_NX>Dq{cCKy|+&-kp2g1Ms)zPk5zz^L3d)vYx(J|pu;jzvjl2()Vr`7n7u zA{nyqAl0V~;p})12j$U0v?&L#dhhxQKI{nQVg#nrK)LYZApwJ2F9muIq5$%36S6++ zW_LY7TM^WOX@E?Bvx4peDf^{CW`I>NSKIZgz%DP?9MOSFT{Li^Ii#v9^ONg9Axv=Z zyIRtjV!ROW)&O28zC6rt3`QA2Ec14sBh35nV7P2S$?&H&2XI4j2?}Doo14r7v(C_00MZp&b`0;G1)*?}SZ7i= zJzQ*iT0iVW%<9S&zi-p0Y>RhdWLhnPsb#pBZsnJL*oj97H>w)MtAJ_LkSdweGLxh@ z#ho(vk!Hky7-$XnkO7${K>2Ffmv!MIaH%pk!5t~*Ofv>N9S|>8n9|h6cENq9nd^?h z<940qFzehLLtGWWPitr?tPz;ZfR^iu#9*+y+a8#9Qm?>e!b=2Zm^wAbRtthGp5<5; z2kkBtZ-DiBRbs$s<9YI|)Y1Xo?x3!T$Lwddo0B2Od9$jSkkrzh8B8y0)u?z(@Y z#@+3}?SAT(Iz&7~_HCqXAe4evr?ptSzvb$>l_mmjm#B#{$*NkhqnY85VQ`=OapFs%U+Pe8_oM>nVq0}-n| zs=(O2T}M>xIzGX!SC9gtdn#-(`5M5K@IZHeeXqCsv8(Bv@v>#A-P&q+?G*m50*D%B zpWSv~`F`qZT6vXNhxdpW!hM*Ils&jhG`}g^+I8q^x)AVZort9fohwi;EMWx??}!?^ ztq@;!ow=G`sRfYy>UW1@A!1D`9C|U~5@XsaR(&3VG-ZKG5Iz=NV>#3T6y5!TtXB4a zW80Z^q~`7NJs@DKc~rnNwNVjPz2e=zd1Y$A#GlaY67FQo;-9yG$1+;0c7> z-D<%5Db1WwP4XN>lfiem6yueES$i3O6kFMF#dDqe-rzk#<%b?;&9%Bt0MH@4-W#|! zB?!0c99zsy5@%uVWs;H8TJ|Mwwe%dzPJq^J`~ES`i1u=;Q>{%)ArG*ykebwKarxTX zwyW#jkMznLr(8-y(gxR9?8CSC*F`cG%i1wT&q8M!(s?GIa>%PKgo-k2?+6lq)RTqf zfn#siA-xB1R|30sh=bQLG=D+CwL?y&ubpzv{Y()&43~jPfvoeKi+qG8#TeOPVjmly z|9tyC^j}A+;H_$BLYnkNAHJq<$s!oU2#%5_AWLrcg6axdC^ z57+S|AR(WJP#xepK32Pz-OBeKx)QEQoigqYJa?aKGSD^w6&>f7^wjL zg2{k52SvP&z%Q+JLm0T~iEMw2XO;nOOQmD=2-C;WD6 z63tNxFcMXl9w72dOCZcBm0IS0mDOOf>>pgG?9VJj^5HmtZ`iIZO)W+RUb(8uHeVtB1RmM@cO;F9Bwv!Z`YoS%tSu$5 zD_2v#_HTJgbAEqLF&9q3o0=?6(+M+!SI|PKT`ybIVAK7-pD5>TZ33JWsv4K^%tJto zQ$=9l4x$kFQfc>L(}{Be+Q9KlE+hMT4A5cX#BEl_A$7X;r{~6hjJGz$D9V&w$0@e} zN>F^m$gnUb$Dr4dz-@YhJMF_0sAeonK}c4GUsc%Cm$${>^T4~;MjbJ!kkj5aeOXi` zpNb2;G1#xu&URU|hDj%)6HuB(3M0?7fEocqD)4RYNqm<_y22iA(Ftcl&` z0ne4@`j{D@8?n5H0bi%<(DeDlk<-G}d@>YHT=hl?ED}(`8nJ7)cD-?*U*?JUtq9x1 zDS0gft;?!^q)Dy~Ta%ex$I8zypKjc|?3W4QvHIIFZ&Q!X89Qhtg&3{3e0hoeu<1kq z2bTsqN?s#L12Ge+7opNG&T8`B^^Hv@mPrWiTzvAUc^9fk2&Ud=){?7OUjyFHFJDjC zq{GKtvs5Bgih$mR-vE<`I9*I;W7CZ*pgk{WF)tr~+7Lm-5yia(9w)+7E#{icyJb3I z6Low@O*r~AF+n)+K@JaQ4q&kL@Gm#sRPU1tCy@r8f}L_rVd8?A#7!w^c?$awL{6dlkcp+*;8(Iiyq{lAU=%g($tIOlL4#WyICJFUUorNj8#<0< zI$;wf)`G>#BO{m0QR~36#f9LWq|465|2TqqM=3LsgjGF+C-W<6W9wc`wQ_m0`7r9k z35Rk`RRCR3%B=PA4$u+7(hQi{+GY9n&8QQ9E7hVlmv+s$YgF^rc%Lnkz!?_)?z&v) z+jnB6089Gt={sX_^b2z0>JxxLT4r70IvhNms24_X${BFt~{(#=HgiVdfGkR8sfg^<5m!}o$}VE!ize9%9227 zwNWm0+UVYE!@Vnon8d3~IA4Ax-j@%ySz-AEl54>NnDoc%3Di4)CI@mzC*(J91Q?gI zH@d1nc!04ES7JEo5pZxxO?wQ%EU{_+2@-6hcXn0it9k zq?ei--1{2zzI-}?!!xoR016T$dz72K`+Ww*-AtuGIk zF5crKDdqBYC`>v6x6RaxzawNcuNDg8{E4I zbtGQpW!3>Uqs&c(*PD7zER)t!Td`2QNl9Q|TP4iiMxfj;M}E<7-@g8T^Taac0Y8qN zrRD_4OPs00O6sG`k*}A@TL(`hUU31Q#5KC6%%sJL;yq;Yx7b#$&)nbbNJ*~6#tF!c zuw~5Py>KjlfXz0MlCNthw}#K|$t4V!5~Ysl*SwB%=R%6Bx_WPXy>s{4y6VDt?qIb@ ztP;W52wW(xqRUnH}!i|E{uLg1e839w^YtBLZ-3-cFPy~>oyX@O zjg5iPVsWMTi+J;H(}^SJ6OLYy15(u#n=zZDwH{ycPh7VoTLZaQ)zGt8PH-twptek6Bi2e(N2Phr`wumRtpwp*JdOuD!fH#>K)ad;2ysHR|um~B>{ zD%t>3B8xLi{Pf%{lYYOW<+``ZTTcD0hajmSCJ{-0=-nuqi~stE}Y$k$(bc^?WQ{6(+s535cD z^W=mfx7Ak7t;fnW=h;_`bzs>pn$h2FdU-jLi)-&d=FPy2k%0TEu6hB)t}%sh(Xabv z)|V51+ZRBHd*wo2?2cyYz41IccjQC95D$O1=>#@6xYXj&ICB_C!pm<@RqODvJ1zbE za^T&l@AC1(31$pC7;#``K`sVB$4T@@yvT{j&#>*63`-}92wrS5^L7EjI&o11P!5)W zL_6=`%MZg&Y$a$6&_V-Js2%(GcrJ!)omcjMFI`9$|F>Z$s#7+?s-s|`wBrC6lFstC z|AcQ>%A1mc{C{$^y%O za{gWeS@s5ps}~vXMxBTanS5j}U`we1a3R7dv4*8HL(>S#U@Lp4Q=pWA`^uUC@v=L2r|2IQBsp)vsu5v-a*QU5O23~7P%cjn{#Ogl+~8MmY|YEmRr6%-!nl6_b^;m@cFbGmR|tu$XBWuh zs@FT{ewjChH2p$$=_UFcz(y1p zjvh;J{ryV3N$04Gs2TyQTcHh!uun%W zkq`(hL@kkG}=gzY(s>@vvD3S!v>EZ7vn;I z7^N?F9(L}N4q|A3SW&&(OM1y!WF;lyBs1AIL!ZH-xepDXqhzJ5(3kqGcz@=ZGJ-<< zd7taMQ71OA6mJva>foO+OtfPA3SJF9L@QQcQTM+HE@M}s&!fA3%x+(ubo zIo)^I{@&TelFmAd5}Wz3L`5uZfC?^0&btcH^BGr{yy($C+{TtahjT-omd4cyruGbz{M^Ut?ybtJS`A9JSBpBH!!Xfax#62WW% zh^~tP82>ivgtr582H;>H6dZXH@OuDWC`r{D=;z+5L+IG&lnjJ|JiN^#r$p1d5i^dI zW4_RT|9`jZ3_O;?z@8q{M_Vxs>P$ms?+6w6{?@7^=~<8hW7FDVZ*}srP8`2z&;W?r&rgwo#0)x z!wk>I(5N{`rX1pshQl|LS8$OT=L`hOvjq-+XW*!$j)W7M3vBwkUaTF^d*|7jR6xMJ zRcG+1H4eoJP>jFD_8z%H$U914KuFR%vtH!+#A=a_rLH(4IEp?)5==hi;EMBF_AvSR z<@K*G-%c0?mOMQPA}=F7BT^Juia%G@>c!-ZVTYDWsKVX7vmzv~U{!D5%LG)@mh`!Q zbNOSd1?o^&8CGQCGnXf`hcuW^<+R*))#O)wQaOTZl1uVemzYKnOP0xX=4!E#T?J_8 z^*(|92#xj^_D%gA$@Hfra53_3QH`nS*d?D^kN@|zwJdD}@WI?`LE>SLuYJL+P}?3o z+YZE&C?_zlhc<3VTz%Moa^02OU%#L5DwmuUVYSR8}f`-4g|-m$Ome;j#;0G8Sfbd{tO87T!VHO}RKy_i>$ z!4I2GV7}=p<^{g3OS6^;&NUl$ZjFJT-aVH3a3aMFAN`=A7eL}tTjvyqbhYK zPdK=-=8(i5#ZZb=5XfN)H6JQ}D;H}0Z#JEX;bJ-Zi~OkC28Xl)`?T=6X6eaxRmTtC zPAn5yqEwdqHe!>8EZ`4}xTHfz3!AOGp$)h{bmDVu3H-fMEl}QB`=57oj>3lL(F20z)xXAI-k~w z7e}>??y46v2w*{PgkuMC_tw!NyB^S|b>hJhOPMXCXeq?b10ag2CmQf40czQJ_|uUl zuRMEMK7)c00({(}a3ZAN^e7JRo{K#lY40LhK0L2kEM=^fBW3n~M*1Z!@UTs?ds-*Z zT&mJLPF*Shb0s(YN{NtY%pZ!#bTx(_5#stq_}V}A0vdHNn+e{RzP9tDGH5CfCB z6PVEtc@9M$HcmT#RSQL2+&P9(SS~&$RbbQ&hOpDFQJ=7ifIDpg_RY9+J4RXa(6dqB zZtNfLy1?yHO#QY;6{@WcV7GGFQ%>wIthyqWg*8ctE1J1AU2_7xI6jYgu!&E#yJ6Lh zM+UFJ0;%tvIJd}2yTN&q3gVxOAA`)k^H3DpeG_0#Hn>WEC&EW5%Hnp4$<_y>Zk+UZ zqhdf4Sb(3wwTriSl~MRr0x~|Cbb~73@`JvVh6tFa)n;{sp{dB|;Y1HMJxYmh#6C)) zVPrAapbU>HdRjvgJJ@hLHEDhM+Wks#EWCM-DWob68Z&UZN@&tl9Sz>%R9kXM&ZOmq z4`r+YK83G;Q1eeD7V~3QeP?{^52J1XVdvtYz8!m3%G?NkE6;^+2z&OBllQ#Rm#o8P z#i7c~)2)cl0>C%MV4dUi68hyzGGlHQxNlZ)D9Sk6EL1#?wIoKjo{;dB)PcZ*1BXZA zKB>fnb}ZKfU(lWHov{KBlWx@GP476-Gg`<=gSo_i5DoCDXiS!4?c(qK=}MU{!boqU z0|HMR?KHjE#KD%Fu!5)P^81x0C~MqjR5b&lx12&8wyqvZnsv%4Tlf3tE9w#w9c#+q zz0lUPk7?uKuepIu*k+rK}=xLd*yyVT%W{D;~u!8{~ zMN5fhZCbPrZ-*ECrz-=eNek`>WFgil z<&ukKKCzaM3~fDwx*)DvERmuQ$mSS2X8DcN&Lnw|K z=DrSa{OR=uB#8Xiq6Ol)5#Ms9pqd-o=xnW?I-#FlZydp(}NJ75zw6RtVB~}f8NyD9plAdI5zIDIyK0I~jHMt8%*JT@wT^vj;l&tOe zoDf#s*uiP7^VIYxtAXQ0#BnMEki}Ge9Cz@J5C|nUmZS@(YOUs^(QZ64)=O=l%Im)M zKdxvFJ5VKC+_@GNS|J)uEu{h)gFh!B!LaJa4yG868oH0TaJ9`otM;LPtt|)XlT$xa zSoQKYt{nK$2oznauL7nHVmw=}A;&lu{Of^P{nM};D<&}!a00hvT8%P!PSNuV0$TIv zr$kxwhTd4NR-yoq8uk#;j|#rwiPdW!6AMm6G_1Pf;bB8UgxQk|0??lLNQ1`9l9l*x zSal_tz9yMKj^zdK5%_~~XFroXfEmXDCwX2P)lR#QYYN;px zeuL)#c8)w_IyOjZ8q!i})N}lJ)O~sq{r3EI+(@A1AkB(EqXMj_D`)U{$vHc|r*VP~ zFZ~Ko9^Cf;ziE|!M;m}x3My@$N%sVVIBnm{r!QB4a!N*_3aJ9PfWW+|N-GxOv4C2f zt-28i8%y3%8R$zGQHH^psd0Nu5~=%;AquN5@rrF#wQOu*2hXY8)_S~X*;)y9oqX0M zhZULFy0wIYWhn)I%ShoxqXyjOJ|C^;E1Nhfn7kS#fSQSadnlpCzgM+t$xbSfVb!Hg z90)iX2Px(Xf$7bqZcG`haYY{TWY{fUp+$QmrJ=o;KPo-FHLa64OEBRDm5?0+fT6r&xhUX6C4q87_+B}SK4{4`kG8JY`W4Lnmsz{8`;`foV&S8RClEjS|x|wyI~P!)n+!i*RssO zPE+91xku&btUp-PZzPa&;gH`?aO;|4ywM&q11dX!JDsS+^SUxd+EcZLL*5(qtxk%9 zjv8lcMa(_~n&)-p{nj1VP2eOc;c%-iXUDC}oT$)$Y0mERM`p7Bo%AE`X+6){W;jtM zfIT2UKxAorvgzeUqMh;WWSpv5^uYy(4-P!lC$8Zs96!I^uqg`5Ko?4m2?2T8TyEuhiOC#YK})r?Ndx9_ zuBSlvas#D+<<&?`0RRJb4#6$sCB?CQU=V&taJM3yc2!H}H~e(B|ZN|S{*sZqyl+CUa!z^){?rVRfCH+4GR zcLWDw;IPF+LGkE}5#uQA>LC?T_BypcgM8k|v@nGfACuROg)%M4sSbGc7EhEXXZaw+ zH!_POk4FHOvRtX7GB#x{^wVgHqW*l%skLp|DPM#t~~pTTdsC@af8b zm_vDJ89FF=h{$w@mm+*E&6My7DfD+npHzF_wU{wHi$*fGwkxnC=n{nv3BmPF7t>3a^=L zG)g_dleBnxA9bqpKmclT^67U5_$^|8Yb`ZtxND`rZGsWkX|@po1 z%dQWh9W8?rhz#RgG27;o#?{LerVt&_d)1DG!krV(PCmf<96-ioo&e{SIXLVSa1Q8q zGweuH@&xQGvhl-$Lw2y~N_AdqKyj4!0?ji~HV4yNJeg7G&m5FP%EXe!(i zl1%`?bFSGCi_hoj2Ewz{SyoD8SQ=z~gc=wedMgfuFb~hPu<42j0m3kM(U9`hI{E}~ zu}DazF3If_UtX_>5IBgzoY6#oPgVrp+$&SY1uU9dIz2kVs2i-oHy7B06O<~bOUW`N z!AWcZSzf0iR2X%`Z%Qj8W+3CL#kkDYU{}WWEu%J#PDWjkz)TTN`i3u8357Y>)0hez z#NsjbA&dBOB@^WcZz?my8oPx=&4pFW;{O7}+&Pb!Bva@n!5Fug9-W z#61D-JT27sD-ni_Gqx*(V_|jFGHn6}t)=vih;zDo->-xi)2w?W+`g)h%EijHig*vb z-gfFTeEH8SjcTK< zIT{e9oF)&yKJ`1y3Z!6AuashhM6Rt;QCr|w2>|)De^=D9Dmo&UAcW85{5<=lZu)YCKttKhVpU>xOcGXwcp4gL>F{_%obf^^4>cwTA(jr z43m88X|mG|v4#W>H9J5-)K4~$K49|PK=;Ou!h^%+-Pt;+(KEM~#*n_bK_AA7wg(+8 z9@Gy0;O*&7SIBfAfdoA6oO)>SMQ>P?TrYq-F!qyG(SdQLM5FYLP@I{T+VJ5{98YLt zhisS}P{I$p?&#rv8ThfliOU>)Yy{)R!z<00XR!|9?}uGCu)+dM0AFYAvT{i(8g1l7 zuykqKJS45(?xZ&;CoiSqtV_q&u0#otN>iS>tV0^;?d^t5JvHiBp3-S0_$Hy`K8g+o zP1RFs>h0}{w9FD1!^`$#YP3ajRu}lIu@|+|IO`kl#Vpl-`-q1s0&>Bb0^V$eS4@7=mukM;cuq7vrXB*s>Zv~bEB!Jn2X)|*YhmxEQWSNf1=h^*JBu9y8@OMs0CYf$ziPVuaKyjQPgh!>fKRF`!5Rc(X;kp5 zGqPryz(!B6>tWTEf4*N;t~l*AF%Xn9Sm^M=im(_()qlgPOXZxad$!gxz-FutnAR>^ z)1L602b339-AI~+NT%CLqPzB(%xuwwQ2^KhY2-A^>HCf3V#2w`VQN^gjALG~Zv~8* zlSCoMX%PAMD>Ix1=z2x8Tb}!<+qln)kKi@)irqWebY+5*e^wCDVr%+dh1volpiJ9m zj98HOt5qSZX{JGN zq9O;7e&a2TB)ou5ibuWz=c&4OXnBi)Tb)+v&pSCh_r#tYzLT~X_=~2oMkq}r!1a?- z^`Ccgc*7e3f6$fMIfJviO9r&!p|ES%iLw8ACx~ZR<2ZYqW{I6e*Sg;Qtbc#FN(P-VkoFuCn9gPaBpi^O9e4R@*3|X z#s6X!DDRDPr85B12w}qZtUUYNii^M_o{UV$}MF}FELjj zs%Z`;e?9%ypFfbBJDOG9nvPIJNsnpkDQb^^PiT!SPQM0iKh2u`$}KFRnD!X3jJ4v? zR_C$P)-qP;tiJCVe%SRPf#vf)x*_C-);b~x^O)R?27}vWE%}|$_R}!$A5jB3+66ub z5D@hbqDvY)0{|skon72G{hE^h)vk|}avv>Ie_G9A&=0&tSGH8W^pM7c-XI z>(kfIFR$yyitW5h}ZQT`7C##hhG1V;G<;g(SzXIqAc& z=l}Tf`38yTvW=WZHXsRjvC*5)4lhxX(2{p1-h^4>BkHhcu%j&+z_caY#3jbSW4gVP zrM8Q|kE3DImF*)ijUA((3*g}(Dk`vtYiofI59expM6vel7-nPY(f5(?Thtmbe`2Wv z?lspChdY^c=a~1Em9|HLOK;db(n>H9Ait;lj%dSAqpmOw2Zq_;J+tfqf7-nZoN1Oq z;QaKCrqcgdb!D|C&i0sUj4%j?S|9!tSYil%U*74T`(f7&hY-Dlj*UV*j4o9i?Ft|- zBP)pi*3(kG-T|j`7Le;1Bg>*ye^u~f5Di4=|Dx?$ck8@y?JMa@icd3;L<-H+iHpST z!8uQV7Pp;=TVOtY*nobdjpJ>2K^Jl@ikA>P4`vJM%&Dpng#z}@1Pw%~diTmaS4k^} zn76xk>Qr@!b>))R0&`FJUabA`j@1*5aZyhD!1YXv=KVp3TWQ+j@*%=(f6?1(7x8M9 z02<#mHvQ#{t zlyy;}`3uzp72eIL)4QLf4Uc_^kOidUJiv@ zPc#+(b1ukBAMbV8_kGO!{se`{F#Wm*+(UFa7J`mbsXPq^VHCu8@m4d&%PpO+@ z{@tEQxZe9ew@Z%`9c91|1I}Vkp>JS*yIpitM^%H@6OW)7<;gxZGsOZ)T33}A6zBe8%F9nse}8@Xeu7=KCD=oW(HmiL zE9#jijWYNHY+1SH?6d!Pn=k#DjMN+YMp7EJ!qW^ZqDILYL|De@$7Wui_<1B|1!vsA zUnIfxSl7Z+%2c@K!jIgzYe;8=eCup&sfZ`?YbllBrE3Y^+Tp69!v~}@%*vBIu^#?d zq^n@d)_}l?e@VzY!EM6E^Y``T+n2X90@aFl?DK$ZQAu-gX%do5&quq+2!G%@qHcr@ z1P^B@x2!Z zsj!y@HP{KR&=b(4*a)FY5|El3sGi8M+DDCZ#Ue%ge_0X&NhqVi<1qX+w{ldsi za;$EgESRa0r{E*DQZ`SK13iW4@wqhD0it(UPh?r`VL|l~J~u*1UUJlZbcaV`BDg6w z^9HOZGG=c)3`U({;pWu{(##<9iC3gSGrP0i!}1K86Q_Q}iJfc#e@YlW#+_+Y6COY~ zFY-bEe~#?L$)C=S1+H3Y8tv7i6MJd-mpq*K`5*zF)t3b3i@0f#=$Av8y z$!r&C(SJvG!g{1cB^C<7_3KE=xV9{h`h7@lf4aM;e?3-{WEf=zG40L@l?0`*0<^gp1TS-7Y^rlKWFDh%qQWjqp-;N@4i zZ{yB@Ymy83ycSENFAxyc7IN?*GP%Xg``v%QJyDIePXemTC)Br$qXuHTxaFBfOsN_% zf4+4S*$LOct#^8~N`g4b(Nd-QnA;f#$yhgc^v^@C!S50Vpf#b?wHCo@5&&EO_=bJmD*JIC#2# zjeh_;;oZZ6Qcn1nAS<=B%4#`>+PqUTbHCvUj(B!>Oj&B4;U1#oS!(ba)9gLbQr=|t zzQa1=H*vnjTadzGjzI%wYhmj&fAAczW;d+Z5wDbC;Nd5|Fwk3^;A^9-85GKe?C!Q*okJ&8M4FzN#n14>O+sLpI+GLYI zH2-)V|32}43icpjr5+MD;Rez;^JDyA_jdf(w@|DCkcmR4?Exnj(2v$P??m!=6&B@j8;Ne?HOh;YOGR*RLAKnF>b+qR68) z8Wtf<==ycizUlh%@@7Y}7eEAy2CqiQo;(W^nkBXFQ7WH8y$ALUzwwFc^E>a9OSNbz z9Sb-7Non|)O)!3}+~z&df8TA+mf9%kb8_Mti^{*#} zo9snJ^cK!k4Fo<*Fl(b1aEKn^q-($4zIRwBc;A9{oy;`H&^6VfNu6;_O>;@T7)iO*lt(RWx+3_980!D2m`%FK$u1QSiHY z1J;SG3RBJ6TE?woe~I2MD$s~4)tnQk&Gn1T1J;p(S*{&YN2lj9z!1m&*BYU+xAjbBa#g-muR5RDT2!6WZr-lE}-X~ zp?}~yaqcUTtR7-%?EX4&^)YGGw5JgHqSM_cT=j&hhgBV;VGosfMV-)O43yEkyR~th zmhyp%PT-m(f0UUaG?JI+dAkPCuLp}Rd@*b56D~gDgK&_DQk1SK1Px#|sTIo5u<2^d zz$aWsQb4@^G>K2;&9kOz(o*(1Sp$)1{nmPYJ@b|ZM_sH4j+8jT)4e0LF#dzT=oLK`+~_0i09z?;Xk<E zj)df$F)Yg(NmELloj?%&7Z&_u3_Afd&qU;-u_ty2%?b+Dj6ZRmxQY^|hqNlp=i*tVNyrr%HbyWBzG&F_ z8Q2Ljf1xEnW@PO=){1?YaKo+irwkz0dnw{DWzj#x+;i)L;Ds zcEnzYWCd?s@YgeF92}L>G9DvCMBZ^pCqfj}9}q@Q47(aeE#9aqXXvCAgAeZ6z*;XS zf0{svwH^qo6+OU9OWW*W&a8txwz)H50Ci%ilsfeSzN((wl4IyI`4IbRK6xhYLSO6c z%6OuIfOnWQFKGV;QsU(TKl|m0(CtNnP&zQ#jQNi6>ZpC0#XMv@ME827kdB=5x z;{=@eT1~y$K8>M0c!+8Glt?Msc69ZD>xg)qY?chN){hf=U$)l349Vx&mQ6kDe+RB3 z45vP-iON`|jc%67XB{#A3mH_ZT12vMd8HW8%0wiZ&F+vvoL9qAha zPOr)yR!!zn3WdLh4I5ZABHMZFf0x%MhA`d9Cs_$3KKRW0qFj|z7;O%3g(hpeQm^yK zD~IBoe>4DnrD$n$;2qSNmPe2joizn1&2Zjf)}iyEgGMWv<_6ZQcc(eR z0OwRKqMBlfYt^MNpx!&DH*XHV;WS@=$1m;QPUOfYucYM+%Py@Rf%c z@f}!)+PabuP>3-^7c*pQNz-B{ur6DhUOwOKL^^7PmH=bN*7=x-4Cw_{n!vn^GhK3j)-}6pW(Y2SzTjcqd^}(%_!3lg1L;H}c(4u~?aV3-i=Hqty$|oe z*{4-DZ6=->B)5+%tGCnhnZap5#cLWeOIfm{FHY+^((uQTeS>W9YOK}0Z-cbQdo`%& zqtrC==77KZf0(!b{o@2(7z`5C12v64*3R=7W8gzkPpwVvO-#HiHF+ z3f4J6`M3})X$(^1AclnADAXUn9Z~WS4+C5ezn`kc#E(H(-uM}(U;Fju{rK&K`CRPJ z_S3{Wax=&tOhRouJj@Lhcr8r<=}_D0I>23qA0tqOJYYE=sWiE_)>gUJT0g%0pS_;o zo|L7re-BZcU27kq%{UW9YlYI>bs+iicBbSgLb^2bH>IAuLd9~*OQ4r4wXkfnRBy-1 zLcG>U;ghvfSgC}BACSN@h9?MaZr|InJU}uJxF``-?{5=Qf;E8q(G`=oGP;H9NKHWq z!lT3CL>wk>XdWOOC4fg=o9j$4_7znsZ(LN((q@KDvYa{i^Ps^1L`ecXYv3k7Z~`u zf5yb2Pc_u+WWooNENtfv*_kkRjB(ZBZ4#k1YS8LQH4CP8n)~kE$v>5PG-3v$F&wM~ zJqRCOU?pJCYLD3BO?#0KSVv4Nfitl8o`q@P5mKM9^a*z%8?M97Zy!rNQku}M9{0l$ zXMBH3_qkU9T%~TF!9H-EFcZ!pB;ocAe=r;Nkw7^2iT#{`VrWJzo3l?;C*EQGsqPS{eo$s3e{ZDm+s&DDqEIdx3mkTH)A|VOM0bb+IXU_;$evQO zl+#q!wb=X`fAbLV5!R9CcAQlfzyOLP7w;K1DUCuM?(4QOW&d`_0i~7ZO=2{Q=e~c6 z?BhVFYYnC49cmrwEbsxpl0k9Y?pDo^U9~UmvTDw|#`tePPD~zVLRuTZf4!BugeZfj zYQXZ5rfPjtc7BXQH*{p)gC3zT8vf6~nB9A~O{%f=u^I0E5!RuzQ@6~BY>?SKF84qe zfux-w_R!nrKIPlLU(U>&_iqoV*(>-$q&87(u!YT^70eVjqjbObm)jplx|SyjG?Wj6 zzpOaAEu-X5y{&?@ULTVje>>3~ZH;1t{5Fn=2CNIIpHhzEmv)yy{dnuQmp|WhomehZ zXz>}NGXfGSCYnU>oav%ThzN`!49X;`8DHegwOE*%gO=^^h;QG&_LoBlk;r8|h+lMD(HbO8q}4K1 zB)9n3v|_xU2nl3re}EuQAMRNNLMO)1H4{o<$9H&ru=`c}dVjn9=R{yMErq0%tDC%W zn{FrI9Y}?Z)@ESdtv};{=Y#Mn+42X!T0-;wkAOYnDnWJpAHDnh)BYBp(0jW-sCzrK z=R``V8%!WfS($v8!3vEo4mtku_rQNV*MhtaYDya+))GYoe{{eH;-QdODid1a>H+yZ zs6L)(s@=wv@sC_vi3us|*WpB5Vo^;VMo7BYT-axv>jZpk?z61G7dS*g~1Qd-E-)GBCFP-H%pSu{c|?C@Z%CnWkdD8iRF z{Jzbb7jlIx=;UVSA#+db;#TAl)Z3ZuTmBps1rMdwe;ZV%jHa_kw`l|M{k3NK4C=)8 zLgO(AK&}J-gT@;da^*9q`NRS2e*YSZ9AKSBY!y3(SimfsfP&{TE-nEd zQGGj6_zH)mRkYazuPlOJ7nVCK7wylVL7jkvnH!{?iCbGjop2e5a;#A$@{s;( zMeq^S6H;@Z=F@?)Lji}t2I4Jax);5VlpEv1j^s0@6Dj3$yF(19zKcM?LmVr)iT{XB zvHJGg`+6d!kmW%EOf6SVJ_FNy1l95}D0%Wle@pf~sBr|OsuB=<5%w>**?L$2O`Sgf zl>;DQ7t`%TO10d_;_QZNV46DB=Vp+1@O6;&wOyzu?iRK&F-fo4`_QCeb-<+DkwL~N z+E5aAF+DSGd5`8AC1F`6`|XBS1w7bHb@sNH!mlr_9x?s-L`(KICLMuhic;|DcYJ|9 ze`-AVDB3lRz(IF0y`8{KKkSw4=G+jW$-THVrV>b|4p4;+MvZ3%Q}1<5&wgU>uke;T zki?at6lRPqrq;@@PX!(^{qu>AmpzeM*e{@W(BcPSIr}+qaK~bf9sjzE>BNV(GBGHE z0m#|>c`kUm7DNY4ylUGa)XVo1^<@R)f0i5hdrk%O4aF@58&WBhq8CPQpFy3dFGjhy zM02<~Wdb39WRQ{l(zt-NYy`u&oq&TG*MhujKA*z9GfOQghv`!di1LN++(%6BCo~Kb zQ^sQT_#)m;n992aJ3%A(g#dEtyOs^*pN}0!C&B$^esxU#!S8t?#bKL2|9p(|!+mRf1 z8=vl=04%2(VxQGLbx@Nn+r>-jM@(N%2)#@iO7@pynV|Pji$U+YKhm(7`^7AZM@&aZ z`BFx?&A{yhqQaH%@ntMuGE`y-f4g=1dWLLv_xb|aji|k3K68jG!b_Rk?4@p_dg5k( zPk^Dy>-0$q5vx>H$r}FMPpVN0(~d-a{r1emsC`u41c8wJlrxC`( zBdRk&Q2{{efJjgxGk@Zm&7YJ_LaEv5^l?NIH^8NWSCZYg%x8A6%mA%ke{-B^7t>!S zgkHkJ6i}5~XF;WrJ|<_2aS+f{E*gG5VmhL!*r4uYt}-j(!|Ra5lY8*~^p$vXoZ+qt zClX4Ou}KIh&dky%#Dd?UGZ;W&hn(}s-B1NDXk1OeIdkRAW#z(gSTI4^+pvRqJCRTj zz}x{(fOFInH`f|&Ta~7te_pjva6_2Ix@nU%8Fx1Q=)q zTyi7OgklPbHCt-XdMxB;og4jvm`)^=w`U1(n^AW)B9-vXRqq$ZZ}Cyb+n|mdxms%@ zq#y;d#nlx`O=@o5I2!cU=4Nl+o|q)L*HlUnQcR$|HG{qQj*Zfze?O(hs_h`^^~;$% zG+hOnZkSuEXvx?($|%onh|U+&ct3+Wv3pvYUsP8kM~1b0$~e*~>k_Ga@e=V7)cX^y zJ-2_74ByVcj1oh>_shwLsyD{%d66)~t`|dY;)(b@PEW6$N za)Pp?w2;x>mhS_ofRvpkM`)S^OrOf9}_xy)M7L0uG49!5gKw z&Ya;}s5X{@C5X2iaIiw|wo;mgHp>Rf*O?OyGt0yada5yDaoWJfc>_>Oh3D=Zc(s&#>pYiroT$k@ukEf=3MoifmC7t;yctgeNn z3KRlroN)tE6`GO=AVC-QB_A=Jz|9;}vzi*7toJtlo>oceE& zgPEfnt4Et2VN&w}7CA-`_LP1js1qsGN>~PQj(qoJC0VsuOE9 z1@z8Bf0mxg9C@1Gg@jYMy8s2>&5-g0Ijy$zxN|2 zF3TTU=G79G$RAc|h_j^9z~93RyB-AnK29W6e-QUSa6^RTZtCEAI+UhC$-7^|E~$P# z;Y#%zntk>%I|ry?3jwg1`%0eViE_L!w7thGV5UKMSAS5IV=onW~hBAhO#-`csZkIV!$3jxp&X@Sqs=_O-p9rVZvzx=`Uxt zf3I~#ow1fHsJSSCNu@A#WX;1B;XbGn;ECmks4jJ6zp@%_tQdw^vLR7vcbWb2c0&4P zzemrYofU!s0P5DZ?ggBI>)sZ>jp+oS^Yr)ML$NgZZcm<(>DqY2f{=DZ4?&%20pczp zx&i)zLIyG{X~6h$H*(qChT=~;aWJeAe}5+t8L`Dd(_L*V#Tv83nm5N&FK;KLUxTuW zUf6nw# zQ#F}mw&Jg0)o&k_0b9XerLgW=ac^gOmRrM*sV=AI-2hJ0Cj}&GSTQ#P-UW4pAXFU? zdlQnFE5ec$K#HMk26f2Out}-gnXY9LzeiJ$6l9T2b+b_)f|g1z%hm?WZ)ZA$o6p~z z#I+f9l;SmG?W1sG1z3g6UBm56e~WMeEttS^V0x^nxh!5ZqIc#7t9f&fcRSM~JdH#4 zE_xV(-`^)j|_8n<|MJ7%2GYkbwPXaMYs5}1bV>D~KQ-s?Ybydf77OXS$F_G^U z1s`MVTb%JGdr_9pi_EpweeV zF>ZCX7`Hferr8vfg_6Hwebzwf~F%&m4HZ}ax2DAuRH2J_+K`2G^= zpqlJfYV{*mki%;ovL{&a9~3N+tkEjOgkE_yeFSylT)+5rI_Q8Ke=>BRCvI3P{BsZ$ zX1^+qN-2nthMa1{l*={AZ z>qxk*6WVwQ3hyXsDn2&nFm;e$y(7660vR*N-BO%t$y?(YjY-iJ7a|a%x3XXaCPLs*+*Xc0CVWTLZMz* z9DfFNq_eX@DcB5a5!m@+h+^=)1mx@x&S^(F&sZV&gb*7>f7GIjV{#Y3Bwc38ZtA@| zMmTaZ6`C85fT0XzI7p^VskJPuTpKCQ9de$rLI5%u3UN;ABiB-zrBUr*oHkOCu}!HX z7mpOw9oW5dv7x>+N=y|g#=1mD+wp^MUr(i!TL5wK@#Q+TR$dt?p2Y_VZ4S?0`_CiS z480af{z%nNe}McIScHZt18HA*+cCs_Mp~^{=cdTKK4as! zSD}o82T}(>pW+i^Ir~gt4di2cE+&aRVtRQya_bKT109v>0{vvr%v5Gl{1TMHQ7=ZP zdN}eTLilmfI?)iOBj z+^!JR6Arz5$}LcE{k6ViHtsZdld_iI{8yFMVqbc9PWgu09-K&MW13a@Gz!dL=+ z;jT9qe?c7)#-&GaULPXn{GfEK+$aO&pfA*$&A0c|T-M(>=|uiS_PgSQMavvni)mR> zvVrqm$MpX7OtU_Oa0?&_*@AFu#0oSm-n-}zk2i3RppMWM0OY92$K+Yi*mH(}sHlbH zQSKa^-oGBXdW;-nwGjPz=-@8V+YcBLMgy<1f9p;9^6j5To~V^JqUD-R3{1tBDh)}3 zA_K;LF#z>5s1w_V|Kz~TN0bH^mqW!<*BA*d7E$Djg>{mDlJGW0wXC7qID z?@4W^LlM*w?@3_5DsvW4yIex**_4e+?|uQeHtGsNojBT9C@UIsUdW;mq0^T(@L&jc ze<2gv$SVYO;%EcRe0qVY4ZMo00@GW_6{5>%0)^208tT|>ZUdnnO;j|Cx#Mc+xB_aa_Vo(FM%B!(kcNdF! z*0{^5A7{=sWXOyy7QY#?&J?pi>V*lWf3RfN7muKh91EAY>Hwf4<%3BKtAVIj@B;#Q zsXIvcaXaz#q1F{}P5^n##m_hYOWW1#=#}fnSCU9kKg%qFyg(M-1(GN_&Yg(|-94De z+oyQk4(`hO5P-n^x$OZ8M-o|-$SU`W^$Dz$P>IrIPraRxwp`YY3ZeCrB@KVdf5Pc= zCxNuao^~l3fGMJq*_x#mS;ggFiSp>R`O8&f!56bjK7RWiQOV$UKsX0jT`}z&oETet zCi7QFDYwf`V2a_L`*@ExHhQWvrRj1v(oksuX@22Dg%ro2!Q+s(bCt2`Se8!L&IYf~r20wv{9Erht< zgezG3g-pH0Oj(fAO+s{m`y`r&hsydl&ZR#hh~A zU4%e{1O4JTD!E zGUr=!#CwPuQ0jSjU*gh^PeY&zi$-Ft$T5Duc*7LZ4i6rlj<}ZiXyO(~KxRJO)LO+6 zyj%$bRE*+smA-c=$aCu2U{*JS+hO%GzSreu<2_`K9gJn?vgb7NWNdlNx=hQis7LMA znDl-kPM+30tIi^u>X5`(f5P2;EmxXmH$j>A5E@0^EtMDdik~X>$EwqWR&L$ydNS`J z6XQMlbikhn61YF3$`$x!48M}o}C7-*)*&NLh7ku#?^1D9z-(!TF$Qe_v_2TEi`FeuP}U zdaWXYgV#!)IEBN!`0Pt(!yii5Efq7vUSv#T?DWEwQ0aBBUunR!n&k_NdjE(xdIdEC zXeKs~J4k`$`P?yqwVVg&g#y2SL{y)WOPw2)Cb^%->FwZ`4Gh8cNXj)F{29Uy+`*>J zon6a<4l-cM`RNcue=tW@zQyuCS4;tuYg>xc=OZzGjWC_P2(sQfGA_jeKt;p@^P@(~ zHnSVpP1okjDAR?w;6vR&{S}dkk>cFlZy;DMZTL@|J*r5_*lZxfm$(@d%hM*;1#~46 z#=q9tNx&5>Y4f4J3yb=g5nfAw8<`A5jfJK*KZr6<=I ztOXoOpSxFb4a1f%;ou`?+$x=fGd8+re5v_}wm5@Au2C&ljn$Y5e~@s$Ld+mk$5tEt zfWo-fdiR^ebK6icQw*bZuKuv!w_jy+Y;{+5t9lX&8@ce!4~w{CspOAmgnEI_I2nBN z_@!d223(` z*es%y*sZGicn=W=^V^-;q%ODLqh$fYsgGYMwz+Vbfbe|qS{L8XCdDpd~#`*unABh8mq(94LAXg4MEARf>H3L zys@BiQy_W&$G1On#9g9FDJu9vmeLfL^51=Ue~@5J$*IZnwoY^zRQ=+PxDnrq-A-;lU2Zbid<4Xm zbJyXv2qEH*Dx`r+=cxNAgID?R*POe8v=ilgXkT9VzPQtCM88IEqmX)IcOvZvpUcMM zcSl|~U&fmrR3U!wrJzt?r7`fAdq}W%e{^*OR8W}9B-n#0Vg*MkEm5OW>!{WSF^$yx zeN_DF`qvcHQN2a1VA&}pN_`-jr`m_2e_hr*s6q;xT!}YA1CC$Yp-z#Ww%b*Wue|7a9 zPehEB_Pk83KB!_?U+y-P+2sr~J`g)T#MSC@eV3b0p!x`zg)V;6xP8#KwShfOjJ(r? zrnklCbX&pwTgVv%7_*x3x1?^Y<+SGeDS10AO0qkukUr*Igi*{CaEHv^Rc&4C8mTLi z&bpmJpo-X6#oS!cc$Fb(c#`4Me*jRpZx=G@*yw~Be`4yE!$ZbJ zoa;dq6B+tiJy#okZRLJS3zTN|lvl!v-grAug@|tqN@b|HAy5%lke4#uR0$Yuke=Vg*q)AP*1xelBwk9`3lB4b_-;EnViG z9#j!4h^VeM{f@!>oiz73e^FKV1$WBb{HA?1*QAHFKH)SPhf;FtX5kuETbTGNm zzOO+-Pg;=hQrReU)Lg=>say6P@aDz&(zE-(3ULlAIk6!`ArNFcf8tcs9a+VvHfi2? z-`5zirzF<(PWM3- zatF!7l^2KA-LMN#krvh>a`pSx=>LuFBX(scB~vKMA+_W)1{&K2do(H zMFmqYezA?xetH^ee>z6(qcdur>wb^vw`^V9Ell}5?yyYMruE0*v@W{aUwl?M0@Y-& z^^|t?poIkJma$0zaDvB|i+$dMDrmbmtRHs#KxyG~%8dVKR3#tRzqHOhs6s4X@J9rh z5IJUme|@f;MeQfmo5O%XPQE|G7eTJ8k#duD#7=kA7AgpvZfVIdxw=EFV-My)ushH=njqQcQmm zKj2k!f%JheUm9z_c>8!rr-kb_TL#z5+s*(l#V*Sr$;CYpFEdjQst}8@1@>70NWeUc ze{rjnaxJ|yErK+8M-{Sy%+*e^e8?tgro__Nf3RASYeoMa(yz^n3i3@W2v6p7y4Cxl zGxAU4lrFAyU;gc1{{3J71BW7F4QIv18Y8=+Ne55?*V!^{%|HAJ#QTd2)Bgec&yWF=f8(EPEjmJTcvp&2%cv=Kt9C1*eo3bV1uWl#zyrqxEGpaQgkMoH|2NtZSB?= z<;Ph~LG1g^)LpiBfU2FF(bYdei&5Y~GHR9Q$fvjxtZr%GwW!u`Ixh;^|AZ~1XE>RF zoi$|k^x!+i{=8>I16axtrGuUR*DJ0*gpai}WmP zbV7iwn)k6j0kw$Y>ycjWFFt{Vw4>I-k2`_u9$IN7RU{^57c?NdUFClQ3n3cSHiCtz zKU;0^MC|=#J1wha$ZH%Z#0j;NaoZbI-wW|YLx)ThOO|l})_E!Re~0LZl%}>uPdu4U z2Cv;`be19hC)Y(M`4d=(BdTjGctdzg`xNSkVYTr@3~44xx5v>Rz(Pb@k-L)-$SV>4 z^g>i6^GUAiZU)z0>`!3-2nqcl)a+hR-Wu-W29uLtT(g<?rDz6~>9$^zzyvC)jNJt43 zwq_+xyI4+(8!FIOfc+7%`%RfpjwAa}R(Db^W05S^!!CX!fAku#2(H+W6>Ckk5)ZdA zKa7(g-O;9z(klUDzlXS^p@btdki;c>xQ{Z<=t#qcGmND#?XnOXPIhm-Uf9)tke6KL zoYHE|ug^5y+U7oiMO@@1pTQv)*V+8|FHGR+#>nN_+C}y52eAK|G56TbZIvhJSa%VN zqeW`MN%f|be>q>FWWQ;Mj1vl8>FghFrS6Tjss@&ga??C^yaX)bSgOC7;@dRoh^SJ{ z+rhwL_ZUX&rEBcpLT<5FYL!>7U|+=8YHK?i%cX;vRYZ}OfQ1ZK^|p|MJQKCzdI+U# z>@ZX&iTAt>8UFwl5-waeG~ooyTq~DUc$MY zB)jIYS!)Ec_|mmvj2|BM6t^m$f<5%g{>hK9HB3c}9oxFIUKGIrq zQxxV%OviQi+qq5JKfwN&A;O+Z-Fu3enlt`f{nEO*5!M*Hy;P3Gc=Dv|zS@a(xP@5< zvk=|2meQUg;1xO+V>h$aDsuIzWn^|aWT&t_e~JGRNMETeV;n-L9Q#%H3+; znJ10yhTAUydtV{VE4sbmuctZIvQ-!BDLTDd^4K}Au$~wf1=@0C=XRPawOZHQ1`<)) zO$;&jl|A1o0pUr3_q(o6>M*5caHuhS8m$j~qwUF~HH1?_K@F%c4@-5u+3=uDoOFg;HHfAk+2JA)|9|r0Zw2*^R1{cayNkaSj(y@ctGvihD*z3sv`tvbm)vg>PvLndU({KM`<$|8b>|V+B&2(ey~OF*-7af7i4O z&JXF-_9yWl$ZjlvN{eklDN-DCATg7 zFaB9z9iLsRO!bP{g0xoLJn8TnS0DO_*7H%qAnBtLF#fm$O^5m_k~?VZ+%r*+Nk4N+ zmc@SRgLv=yUxC&wBXtZ_E3pMdf7JnN)e$_>WPP-evHs@@v=z1sar%|H_JSq3T9~@g zR*|v~mfmkUcL$lzxLD8^A*)U5!%;rBHj6PpL6LB+od=nz`8yU;iha{f6}o zYd*nB$(Boq`Tq6Rc8+G%iecNyAI^l9uQ!Eso@+KWW4_tSc`u#U+KX zm2_JvywMaNgo{2Fs6XzH{DO5QJs_-IxTLV@Mc~IMYR<@`dqk7s2M_B;dg#4?b8^Yr zxIjA)BW17b>E#svXqWv)b${bwA>uhsgOISu!SIkAP>7KCBhlB#8wxL2cLFPSs>tVp zpr0kD7~R4#q`Iyt{Op|g6V+Ff=8l0yqeKsGrnN2CCVPx9u0fnl*^hUUf1*RDb{D zN?;NDSe2)_Y^V8Z8SDD;S->mR<0}07A6MR?m6vsh&&`o4W;`Tm2}^OON%>fI#+7)V z;m%fb>@@Fcnu;Nrh7|=;shS?yAHwhktPPS^5M7IqA5u_20vq+-s-qe`4pV!>x)NGD zy1SVxr3zI@y&&q>&VMFh#`kFL^M-X}A+j^*LqXilk+Bl8okMHcjfe-6 zu~wM-pxKvl)>Sn#Z?NW=m2if&Zp2obEsC=^it=kOA*ae6NecvUO+O}6z`7Azt6?b` zA<#>U{i>>?B)nF<#v%K$Pv;HmMr@Vn(nL5F30Xf$HCztTihm&ljnk270oIM!ik4d= zwoXZA6RnMq%7CrRmQ0RHY+OOL_G}i$^$udHRQia!Ewhu04clh|cqPXRjW!gOx{sDq z*jiO3hti3itNb`1?-!~oIlfFS9QK@zDJ)hS*s^y|-4`F`v%g{8Sci}jxn^L17F(08 zZ3O?qgA+=*$$xS82(Ydwp71*%MzF^zkJD<&kyTUM(c4tcI&5Ca@x9v^NCyywP(3rb z;W2FqE5&4}kw;i})}gd+)?`YaIe1_h9_mLYl4{FO*QS1=`fh;y@nMY>Lk*iX%`#@& zG8$Dpz?t1@J}<=YM#vuvVz0Yz+Ug2k(|tqcPZ?=5vVTT?^kR9#x*{*qoEchrduOpY zs0PtmV&SIp=+gbIfTkmWx??!FpYQ0GU(}J>x z-e_S~2KuFs&b>b$)>mc<$6N~4IwI_Mf7yj?H8&mxdG`jmzB2G z*WtZzii!6-WfX5c$NP6TR*uz>>Y6Fxza>iG9DjWmQw7%osh7uIh&QS$I_x#$iI=yL z)Tz(SvzKl!yOsJl`S%U$ipB@kgB~srU>k828-FOx(E2qMB#NW5_^(Sl-bKTBZ+L;A z;@QH`4J%U%QfWxq4`AJh_^o)6Tf<>>wVoQdMBR(TbiAlI)TGXW@tV@qeh$d@R z3X76eX>gv;RfN4UmhvM+TV0M9F?n)HINxyOJgp97m}u3SxW)yIg6fsWeX_`mvVJ$+kZi| zR&6CNU+rA1iaxtBzhPb3%FQIZLQuqh2+`^SqLs!@Gp}sty_zrQ`kgNzS&wOTvIJk% zkxMOM3lc>LVSmi>zx{C|w47_s)<-d_I>WLMg>mJr(JNISr_aApUD-4hyaih7Qg)A_ zAb6>)P_G?1ULWmw-mtE)Q%bJ9q<=M^(AUvRR%4TLg|B^moSgiIbtAM|1NCG4%1ROy zCdTvg)drR*mgR9F+K+E8#2-;f+lj-x6zZ^hG=gW~Yg{(1XU~*3svDsd+cUey6!qeq z@*?ha7@|u>o1D`FU|rb;Oo%4X8IPOX`L)L!22eFG&tWn70jwLs2Vy>Ml7AIMcwDg8`CCBe+0OnG$9!a72 z_qG)NH{xTqV>bQH@aA~eXK?uZ?QEk@2SiBxfnwA$XQJ~C1W;YsfgmT)(Y#l+JoeBI zi7_|t0{+*>C$MfT#GaTS6n{Hy6u^cbXOL5*eEh0_gq=g{&);t>#7s85uMn^r_O3B! zGgtCdU64$V2V;PB<*X;~fxs%=oj~Z}E?dsA$_Av`gwjPDSQ#qdqn}y-{7cb${n%PK_OPN7ka8 zc^Dt;v;adbCUmZp5Bo^RFs;OWo~FNkr6XFbRdnD zx>o5&={o+natkSYsec`Eg5z>9GzRiTOS&mRH9{1fZz270*Uqn&=RPx+45rqq{ThbW#=f2nD zto2{8u3Vm!Tz_P8Y|Vp@GWZ}k4m4|rj%}NcmHJL(#f;e$daT7+7_x(eO@MK@|IG5} zar;6wf4g!XOuRIfSaN6z({7q@asbs*%9J8pn=Ncnq}=sDG@r%|WgUn+dT74Do zvw8)r8-E!>AQ7WiM)Sl2ssk~$fwf$@fQ<;F;-m)76e;-tV6lGhFsjHx_! zJ}Zo`Oj(aip7C(n+=y<(7m6V=>ztf+3KNmDz<&U$E8-Qus7#s4Dl;-@r26HPsMYG{ ztNVa;V!jqh3+9Wn1ZCypp9;PWgk@zbh4y zY=6hdV42ZA-9fNoz|HPThA7MD(lhQk%q;o zC^Q(YRCmk$+z16&ca9Pzp(v7QFS4682%cuK^K4->aukVxb>#$OH!%1)Y2{p?@qgJk z4t!?ZCkCxKmL9;ma+JtBwdkR4kQvet@`HB_hDXAP+iquAS2SYY(wlf5NCq3wsCN(Z z2c;SI%pah-(nT{$O$A)$HCAB;hu042-@v&HEAsma>P2ZGT2jNU}%9{Lec(l#*5PpgM%%nhNfW>La@&WyERv z`Em_l-B^erEVykR8KrUe)ar<#-K9hDqfj10{<|S>$I#kw;WUX7XR0$?q*}~fFWTMf z2RniP{NqM?C@a@F?BxvF*zk1+VO};i1njwA<-1Yc=fb04S50aX6ddqo>wnhsEYOG+ z$LeQPH!jF?nA&xe!FYLzHpitJZH`A}2@mUt>Z>8$=S@Hmg%)oN8nH|oHB>%j(^!$` z{@d@SQyy!ydY;j8o)Z|VjM~e~@_RuyE|MdM|86wp`Ti>_xE^4Ezi3Li3K`bqMl}R+ zK5s97H309pAJQjkaj78hG=DkfgiE7Wy03(4eH5+VjaWRQa>$yBN`qk6vJHz+k=HGy z?M3VZR5#WjgjTqimXrm0te2@&W6bWL9mVjRufCcpeXKZhlpHoEnzO_d6R$odULgm; z(IfTyZl>u6n!43C^L+;GhBy+65)wzP;5I)v% zys!V=NaXX5;?$yS-kmVd2Wn$4ui%UDo~XWNb+cPJJ0ruH!FQSI8eeo^68qp&BCeA%7_t+*G|A3-8BKRc}~V zp4P}=4liw2@7ub|^xWD6gJ!pVKE%I6N(scJW)alGn8^wDU~AW1$4dT*(cO?)LCT=84W33z8 zU*Ch3J$4_w+}SCeXlzG25r!avb4cI-5uRdb8bL2iz<(Ki9_P)0aX-vDfw#!KEzD;R zlt}^bZy-vfSq))BH16wZ&VbXdA~h(Oeu&wHUlH{QNEK`!d~B~t`*a4KMx^A~8r&5f zZ+fa?&8d1A+o2%#$)Cs z#m9llLd*}0UjcM``#SK@w9;+VT2)IiLuMYjIDb>G8bp3!(Ok@4wrB2V{%FTj|r z)H;ve{BZ?Hz7B*7?RzE6zfV{-3PtJW_2&w@x`sH}M~XB7q@aC8lsqy$b$bo3a_z$x zZN0adXBDJD#gyo%9;NN~m7ee*U2ESn_EC&E#OaMPrLVb$L*@PBz<6ka@wWO;$*VIO#Q&Yo6s|8>CnnXL{K{lVGjF^cd2Naly zUA3bOuT<>oj$X|VCp?G*Xv6P5u)%UoJ#t9N)|j!?xYiw3o$w$+Qv`tqaG7H%5FbK9 z?=|BPtlswwYmH2G*ApHb#e$ZcD=!mHq0R)3!-yCNq+wq{Gha`55F0Bs#%>3@$;qGXD_Qc3 zKyrw+jaN@c@}M_)l$m`(LoLmVLNe8>08G`adpV}3BY7|&f)*tn&0Ho&LX#FlXf01| zwwGgiI+F*hH_1%k&&ESr=2mJn$$zy{x6<~?*_RU@l!XLi$z@cdU(gsKc=_{OAuh|d zyZ!BQ1dIA`U4VrQ@;5*Wmt+JgSvBh-*|%uET~2tgCbo%G7+r#?1F(kFDAXbo$z3b4fGvZ50JfR=pZ;V!harr1XJPd z1?lDOga^9-+x3afeHE|ryJej~5UP3hrF(JXFGos38g~LsPI*kv&C6x0R#`~_A|&qj z)t4hkMrSb!HO&?P@(8?MDncva1m?LHt-5?Uat5a)8OV5~IEkeoL(kq;4oMo0TLR!RM2ft4-==o? zdcuR!>$nb>sUXZiel8tMUCA;S>)aRhT)rK-Rjb`)38xPS8pQ?JXH@VD^_mRbH>q8| zo$w%#LLafTLIU2!ZE&d}0Sf}UXKb*&RcBag0IA7snP2U>d;(>BYkvZXx{%y9ihlXy z2pC;N2wHv#;xCyiaBfWy)horQceJ>}tP`tM1<5eg5m*4OqRW>eYE8oI?*+naUdUM2*Pz+QaFCp_v>`m@EEBK0ml`{oX_PB?KT z5gfn~0YbBof4Mr%a)0%NKJ<=RpGR(HXxbDZ0#q&u@qH~$Kv|Y%ph|blkP!Rp1SB;| zIDB9>wS)4kIDIzALU@N?)4u=lB5xKEIVko0u!f6#Ibl{L zZ{D`6S4N(jCu$4u7f?A5WrvA5Jgw?Sxsw zb^dx~5%%IS)8*wCAgtmlQF9Nq?5`7jSL3?bCB{)&ES_%ETyMhT#TfYxZg|A3DxrX@ za-DOrbqR_C>3Yy{@wlV6_VVS3S=l+y2u*4W*;RX8C3|+U;-ffp&n>( zA>ppS9=ruBwSVbO-Jis7N6Z3LKtddjYO-dZd=n&fZ*!WpjeXDW_;93|s6?yH;>^QK zpE8^&p!!rJl|JqmBldd2Ds3iyi^VX*2Nr`(x6l&)ss@U-O+8O~!m0=y%9`c^$pDh? zQ-D&%W}>Bm_RZvPM=A*vxzLC27>`EF6XJ?FfwhKgaewTEmS5lgJTkqqMP@H32vfoG zi$(F7!>$U&;Aq*6orXxheHKtIpVRsC_{-`Hv*j5cCWeSY} zBFu%eOwGRqh5<^wO*}83PFQ6lxx`Tgt?oKyAZh!n1r;&IZ~Lp|al$HKQE!~9nK;e} zbn2Lky-av=(0vu+<%kDIU&)^e8LmUN9wWr+*MGRiE^L?fX!*zl(p=ZV?lx=K-~;)m zRIJ-T@@dH%-1k-;(SGg}37mpTS~!U;Q5d+iXpc%r0LP(I z8h@^l13UQ+9lK8_%v#BC?xI`=7=c$WrxbHle~m8SL0hc+bi}N36h+%b6^08_N2r9L*x7-WTGk?x##h$+hY8_fJe9JX@CQy6=aFAI?a5Z+x zK0au#MRUe1uXQJ%IJL0tU0!mHfX$^Ea1_=aY+dyE$n_+`rZobP2QLip9T*srca5{p zV0WCxi|L6VVY7`)RFMfA0)yAqrBZET>nRruLV3LxmJ=itzjqZWUB^?%xo zeWm2(*-o?!Q0b{AUVa_Vnw!7ngIt7bFXG5segU(Ns8aU@&IM$OP(?1M;Qe!mUgiUp z${q8^DUvXqiX z*x%zsV$6XI@Yw6k%Pim+)qlzK=pbf@w7OTW|KsBcFM21DWgj3LtW~4#Ely1$ zcs3C0+Rq6(;zECB^-;wfvQI@Vuo7&)4FVy`WxrTYc3~BKa6@gu~H++^7%+4@MRgg#HYmO&Rp}Y zOOAJ=o-X!DJ{&kz0}QVeuYV0oxh1FTjes`QJFAio`F#j_H|&wHxc8vB?#%+L>a`)E zO;Bcb_3~;>%8l#wA2xk_Ik8mW=-5L*<4SFKmFRWUX=AMkfxGXH;AK2Acx!7_jM(9t zqE4&2at{rrb`}Aim zCN3+0+0D=qNwYsd_`r5kx}nhUZj_uzG_}J|o|JLoY&Ev&(uY$xv)Q^K!2R8(2Oa_U z8>(oXDQg5Js1|0YG=H@Qp9i4`U>leqA5Wy2(rF0xx$mIf7EkX+ZPII*Ed#}DY3%y68PiphQgbDQ(H9V=v4Iy98@dVR^1#jTK4elT6`7)&)^Ya{m2& z!S_`#MrKyOvEJBpB03FCp>@HD&VSMSVtsB-bMY|zD)B~T z&i4&|VwoziNuP6;s3Wb&L|*S$Bc&!_=R4OuqK2~HP66K?u>uh^^CFnI+C%_HIM3cg zys_y-9LSS#?t03u*9lB8n_?H4cgZ45(eBWlNGnUjENi9fJPy}|busyndI~OOb3>Z> zYSJ7>SQWN(xPM-$GO`|L0z**kF7_rq@N$#u+^7?og?RKRBXFpLy+&azUY3WKX;Zb$ z!E>ulI1t{88NUz}Qivp@OIX*}(c!~qHxy?6`PUf&!|IJSDGYCOTfGlpOzL*k{h_>L z>+|UluL36!>Un^F27I`NZGtRQR%Qk1YlWKJD9HX{*NMdvM&yjHRtCfZh+evaht3+h zjJ(zccDhk#V4h3EtlH`w+EL5Ah zI8!KSJ+KmAZzu0wRy_(hx+mNVTzcZ`O(R&MAie2Sm zw|1Q{N@u7bhS>Nqd7%lLctYTg?$`j~Z}e_qZ6ddaI=j@U}sW^6c)$U|L0(xzj?4I8`K zb>vA2{II%=Zf|YyV5+k-%>^H}oNi35`f1jYKwoh7{DD0c&VjI5J&`mp0>OHpMNhO524fw%ELx2B6Am)3mb;d00|cIo4?_QieIg~@@C;aDfSGiP|XjnNh77k#B z^Wr{Sv*`B~6Yo}ixqKS)$R)(&PQ}MB6#$4{Len;}*#h_&ovPY1WCn)1rD6 zyO&+AqD!KSeuUmubFM!&A?tm$j__9&G7iA=DVu8y)Mzw|KkRU->G$=GKkYj5Y>^N@ zXGMH3U2AU@Cv#c4$~C(R&OMv{#B!xMfdhN7fwkf>Qw!ibGez&NEI0ZQet%i66Lxi9 zvf!h~1}$DPhhGjh>(aW=jrm7E?K;9=b53ctBET_Y5Q41tBjk}3=_lT3DSkKW=`&)z zorn?$?Xjkr#hG;g>K9ec{l8Ne0rb;dJpCU5LK+~>W1LcBlx`yHrA5h z{f(O-@yHC}eO3fwAix(b%zr_0P;0YDN7|-jTSon)4>VBiW2uP7Rn^<3Le5&eawjPa zsv#rj?`-;TqBOb1qn#omvZq`&62hg9;bDHoR z%`mq{oe1rz=eTCl0!q7IT@=KdD+|`(kFdjlGYwxHE`y_CH621m|>I(pQTCE zsrDOcecx?5QvRrY5mMev-jzo&2b#P_Y~VhTcYNYdERU9JV8$-0RlRU0UiG5$3>s$M zU4T5l=p)@fdpb|%w|}(@IK5+MCnLi*YwhBdhhY=WVbuvbAKAq_xp17L7O+x9s!53M z-rJ(P=S(+hJ)nBEKYoam<|E>UA=#z5S}3j~2rrU9Y;MhZJ>fxX6-K17tWoLa(^Q9I(IF!wGI$9KA3sH$eIWJvV%aht z)cX=mbG0IMbsy1tIY|bl5Mi_0nzISCme0YUL||7?5n~PYp^jHj5kb9oq~9}EGoSN< zud;N%_o^U!vwz>Nq5&!-s`t}+SDknXJAp|t&5an*$6y`vBIG}Q{SXnVa@t9^x|#>s z+hvHil_;pX8%LLmpaG}|mDL8)o!hh%A*u^_lvmgy7$iL%)augf5>x*V+VlV>iIJbx zXQ-xn@Cr6^yU~kMe*W|u{fY00QkqLu2;-JPLYa~FR(~Z*faL{$H%t-R+$~0+XVRL8 zOAASO?%M27)^r@>6;sgT(=AoEKQluTH1oT0_d)T-Hhp8<*)Lcz6WJ&y;l$^Zwc}~ zl8nf8>VNb)@=HSg^b)h#4T+Cwbt~BT2~n$Rp6agJGHBdd0ABQW#@)Une2Vu|ZuUXb zgRCGxL2G5G=H(&&3M!`ZgN}I+&E#ck?WAP3R*_zO2;p_5LaH>|Dy8hxKnr@63V}l@ zojs7Kh0_faLRHAodIDWJ+fJK0Hy|SG`R!n4K!4oyhE@9m*6W_nQL*X>^;s%`%Yd*P z-~5)KYPQcZxrERMuJ17m2IhjTZaP*TDJ^8nA-Gx2$u4sF^-IWEKlBz}ztWIi?1)bTLGUc9<_FpBrUC&f;_1x^dWWq8`G4TU z*St=fS!g7N$dNZ@wf+PZaV)ee57~YVQT9eWC~KE8CM1{Nl-T85;q^<%sZc&yWJnes zY52I&?tOcMkqL{w;cM~()7OyBW?mJtxOVHSQt`Kquv#rcm2T$?S5Og|Zwizi^4{^S z?PK1jm4vquG~V0!Z#(L1Oi$z4I)A$X$uUag)mC-2Gsc_^yX&^4zCUjZxj?mS9$du0!n|rpmCa(PxRgefQAm~kb_~=-lKY+B?LA0PvcezmF$67_ent$AFy7^z9 zt!6L3Tx}Q~tRbM%I~FVC3f@P4Xe)_(>ZetNh2!Q>W;wNbBgK#X9#Z-bvQQA3u&;c0 z9yBT#jDZ~EZ5&lDwCb@~5wP;6sVft)LS#u!em?X_hCbWxrnVebNV#fyjNr+c<#@+L zZG#VOXhG)9H&lPc9IzAKxqpMe=?=Xa|2Z9cE3LtE)BPyzuMkX-?+U$;mKQxYKjcdf zGicZK#q^eP&c}!nrtGsdx(XzN9n+Dvzmo$G6s+sWjTnD_-64TNtwJJ0{86oLGfwj$ z>j<&+(pR|@EqskxEAmPh1ob?pl7Kj5>kY!tZ%uZ8V{p-rYXAN8{C_Rv5#|ZCfK=E? z9;GJf`q8K{Qlh@2yD|b*XG>&b_6M@P z(k=;sVY=hF%B@3by?_4WcMSgT=P>>3gd8}FpEL9W4TcTnU2sc5uPy=W>G?}cfnytB zc)eOzGu}4p1V1G$cExVRus1e$n|f>J%|A)_dr9ffi+dUj`#lXsAFE4*?Z7u4`M}~Q0mw?6RbGw$npY$2|JYsi^ zl`45yEs9+aY=1tat{eFojh<^A^yfb#iXN$9%eR47FwF`^gAd#8Qm3rhO>Re7-=9Oe z5Ttm=wbGE0+?;PHNDXvZ@-76D3oo^&5Z|f6hBVVl?)xxwShF$8fNW)}{oLvcPn4Z6 zw);FZD~l{BXUQFOu=@rR+P7Qh6Ldm~taH4rrH$O{?0>^W#c)e+hQ#PMpT!eYV%SF4 zKILq%Kez342T$iXt7-+AxY<~IdOj~2QcYV*)m#@gQ}Zg{)<+qJ-pzJGrG`1xgrxas<&*xhIK$rd~lC=O+J zH_MwVB*(4d=}$dD$UqkI?8wTejy2XS?nlnv(`d&>TV9aOZyE&bAV?r8&`fxqb1%eH zZ~9VDElB=zxwZEc^p6=*3vy0nyncShya}9?z?zSG0V3EcIM3U_fi*SSeP#-h zwST*gw!)Rt(tYdndVTu)bBG1F%XwyO zG_?eNYIvgCMWWTzyglGn{PcCjtk%-jsDG73V0CK^kY)d(rd}7h&bZeWgusFnOM7ES zd84zB{#<2fbrSuv>~77+^;pZufr$C%X6y8b>><88EzO)c_eyIF9|)XI)dN-L z6K~&`c=)f-9#XP`b@Ed3wD8Z)B*@GYq}_7%O@FJJ_Sha{3Q1hlCmeR8Du1OK?c|Ly z?js9P{f^)s0&9Dd;{d9ekr1s`koUoaB;@Yuw|g-}_mHhsd)djuX0?K3?PG~c>7ese zGT-XCeaA;goh8EJPJ%Yp@d}7J<`hsZKXBGt1Ez2I5LC#=$yqVz%S^+k9?2*+Kx4GG zYeNP0dx$q{7D!ZSEtOqrwtq%ExL~J^-1E74tNC`1Kt)9-a^W7Pr(<^|P0GY;?+tMK zCMY!IF6GfCKzRSyhX6AaS5_ZWk*reQ>pmIrQ%FUk`yh0kax@#saq6dFSn9*a_P&)D zJfv!fiEU1)w2mB2V^(3eDVjqn^aP&dt;pvgRYT12PC2PB^AbQn+J9BdZ=S{gdoO&A zqb^lr7%5|mkKC4Fk7;c*GH5*V52Uo_Th@V84MBC>$S^~l_NF|kvv(9pPuq`jZ_O2t z@E($NI#RJDKjHIP>Imu#peZrvmo$FI;Y~x~)%A=>t{oy0P zhwS)zu$$U?Tmq*p?tfQ)3_N~$2}^oM<3|WA?Kzu)7V~lYW^Z6cKy?@H>|@n$=kN&e zA!^6n`JwH#79FkO)$;+7DnuP0mZDbq*35_f9@4j3#5$Hp8v+-Ew0||RQgzD#g;?nwdNsr< z!An8XW1&)YBmC_ZuUVx*jM42r47)u7l(AR6yM@tgwW>FQ?Bc!I1!;)Z)mQhNh*~I! zn&Yl-vtV&f9>~~&_1o3wNG-mZBY*zGo?b%Qe0Mhg5`!CqpK^vGBpsd)z1rtCIq|Vv zAs0J2jSYEE&3}g>rQ~+82l4_*5;EgfSzz!M^&z%D%-7e5^}<^>NR&rEc$$5I$M3^dIJN5T z+wZ~^vS1JqU0u~@D?Q5scX0n$GO6v{3Lnf1<3sk>_J3xu#p2Kx zhsQN^0apa9a#)}&v{5^Hmf%@#BuTAvcb{Ezhkq5~j>Dt*loLPpqXx!I$) zHt&HI(h*WlFN;o+F6OgpWI1C^gWP&4Ut`y|FaHy=ULZ6l?1ulS0T z%QfOpTp{xw=WdzX^g;F$vA&OLco}6p%&>313U;2ph3tAn2Qd4NcMqhH&q{jA8nv(9 zEPvlhC?BXox?J1l?QMtnsDKoX;$z&ToKZ(Ex9NqZe}&Kp1b1YgWbWg-66C(wgVi*j z(=2vNL5?b7v34b|*Pqb$BeNesFe9AG&SHWb5%w0l08B&nSM|Z6eUIG@Zy`Ts`Vz!! z6~^|zP4f7OD~8oWRo9)X-vT4<<8Ptn*XoBlUuXRQSjhfjKMrh@>e^8JW}p#uw6zXW zx5_(~E9OL^FL!?*)oVqvYQt-QpYTN5-q$(E_VH6lpr_{2THJPplP5zdjmk=!tbd$z z?@)6#Gp@)3<=`AZdtdQI4ahjWmL%e1x=}~3SWFJ2S>ucS( z^T)3t%-J@Ls!Qq2R&~3>NiAfYCLXBXpCM3%T%zw%9z+$HxhE>-zAHYbwtLO|ZL)y9 z=*N%~rA{_SDv7g6YJE=~?6US8e}6@9S@$@=Bf z*XNLPXU#d~LxbJ#neh}^M5vBgaud20G5^FB5>CNKD|f%YP;d!++Wow;pK3DN%^b#F z_xzwSrZvK{U9?)R?yLnJ1Z}&$J8|S&bMQ}GASicq$3{kwKPWFnM_HwXKZ+A4-n^d7{TK`utJDnGDfgZJOFQ|YE+b@X)#`M9ZqDg zUsnhbOrum=6Fl{3lUkb3{(k_;x4lIAHADbaOnYgX!b!?#1F8%pf==cwz3oC^t`}HA zH&bk-AC`7>HH7*EY%fO@^B*5( z$h9Y*0{)&`#Wz-lPV_FQ)=hwpYQH?h-vqU%_0z5M;5M+a$w!mP8GjXuqW}Ax<6nQ= z-$efZ|Df3m-s`eYhiE8k^luw%l4`FsCOe zh!0S|+Fx$$-ats3GMGnKk9x=Q=vT~e468q>J$_rLPZvOq3V-4oSsxa8YDBBXeYO#G zs2XnvlfpvX0M(;*5RnYpxY%T!SfsI%b`xHJW2DwL3h-cCAgGT&2I+`llN^7&A`l&LhK%!n8TYWWeO1g~5jP6aWL&jUAj2 zNub}K2a*ZR3d7o?lmS7&QV-T1-s(ySEW8`YF!efhgLHD`Sqn$8hw78@u5WgAWe1_+ zYMPGdw|^05IJeEAsUT?pSNISE1J#Wkq!5-lMhVdB-ND$o<^g_{3*zI6!-QwJ!mMCT z<&pihX-lz*it#Di0=gQ-EETXdy5Fst>hc5r9^ znRLS^M5`iRF{nGbYnIt|OcE~Vb-LoHvZt{aoG<2zWU^wV^+hmqjz*Tpg}MPsH!tC6 z2N$J!(}=0`i4UooG>*MC-G>Sl-gUQ?YjwFr8d;%?|k?&at6_uVf) z-`K!aB#F;F;0(r$0uxmbt5kc1r^+Y)2~;;WP__1WK5$Us4rT{$np$y+tS?*ug+`#a}_wXq!Q;S_~=NBs55{r(2;Y{B#K# zu&y}wZj0d^c5NO06c}q(nPA~F+U0%yDfG?WudLO^S#yQI?35wjXJ^&6t5A>b7Kexf zP&Zb}1V7shLn1f@hM*WU<0);`=zkw^1a-qP7?Z8il8z`rC>?86+xBR(+x%Hc@taj$ z5zAZ=jvdxhR@^W~=?&Q~&1O_foc+R$?PE{_UCA}CHCk2IV!Jo%>|n?9>=y3a3=Q{` z0}K9))tM>J2tEs;C+1(CQQcUpJirm8Lmuar*+D{Aja(&Fsg|E~Px`Fj-+$GO_~;Wr zU~;N?Gl&BIm1q?)tkhA6`;$&24@~c>5N+7HC!JsnA`AaKNxXhD zrz=Nq0aT1v(YY!C8RMfUk$)wHYloIUqq=eQBKyuOj-EFTIQNi!j{q+9udgY$D5AN7Ggcv}Yz9;w^A}UUfhlHT z?;OvN(f_Wj4kh1Z(u96b?Mcb-n@!ySRgz2xFNd$xmZ7qwfqlZwFIbwLe8Q{0ry=YK zleZmRwWGba?^P-^GJh17MLVLk_vxY$m~NPP6UY{jV2b<+8Y5RDD$s$z3OaKz^Vc80 zzhdSZ!%RknwMV+QO)W8?U{$l^g$e`Tk-VtU=~Dk-KV_SVZ7gK0hK z+Vlm~%MDNz^(mk*kw%g8*pX_oG_}1zVfaZ8`OjYJT|ESjL4RhgvZHddaq<~-0a77n z+UoFMPdZmWFuh#CltwmeT!B~+EK;*-ktN(5e%|MkOwKQuZdkd~#(!B1ges#J$JVtK zlX5nGYjVnb`FMvSG^s1bTCSKC965xo)RYH&W>n~>gO>_aSMoWQwRkwr%Voo5Su_I6 zwZzN>gyzE=+keZYwc;r*3F2KME#9O<`f-ocIEitRhqZdSv{nmzQz^}uAt`0#7;+v+ zcZJWAC!;~$Z2ihw)$9UF3<)~H^`c)OG*<2<>LTG#4}vC8UCA=(4p$Cmxl@Yzavh~} zEe&!o+E|}h-ut?poF9*%MeA;3QIFU+DCcFV5FBVte1CB2FLyu{5KrDMW)*YHn3*eO z;do`{M*SrHuzxo|Eirl&vU&x-vu$I=LlzkO$l3eBE$DAIHZK}%`SM7zF5Ri+k;L#V zn=FwWt{3(71|}~hDl)-cQryV4s+LJx8!3hum&4w@YvSP1q5I-Jby!@rG%OI9OeEms zsqppbK!4EnN^(hWhZ7am*h%Oy|(0h8L03)ucL%YO~!B%U}wPlLo z^U>!amD4J{-oeC(Db?3R@P(Ms#AB__sV?JnN`Ju78#kTBHs~gJoj7X(tJac6!^ zlsPWb4NR>h$dm>P2gf836-eaBAU6~9&f2-#hqPQZTf^*FL5^w`WtVM z#p-G6-ZgIExK2H~;&2=B(f}!iZ;jc~1ti_2o$?X%T^)mu_EbIl9?_b#M(Vyi>Yd`k zlYeuN&C@#F*t=f4%UGkV8O7MeWwp2jf|(Vtg#-E3m-h@2JePx{)@FrA@&*0bWaQzd z$rI>QKf0&Cyr)&xah+1&TDe#4kM{mW9z&egCM|w+Pe0BZ5<&2(jlv*N2*p%(9V4nU zn{Mh)dPzJm{q_4B(XLCP7!BrB@*Wbi6@R%T{AocQ=&9%em~Mc|7PEF{+|s4lJDhrt z0V(iUW78@JBe!{li^DIC0(Ob*f^y=xE$@hVLvRk`1^Eo>Mi@o_-crmVTgVAqyr>%- z1O%0IdeXM*cT_hva0ndK8X~#Yfd~wj0M+8)FSelE52w%cT_X>UONHgh2~4x4rhj71 z;V|p2Y&xldOdUXdx`QgFJqk1nHS8n=DDmpp${p7UGoR{<)*V5`5SnmPIjv%>Rmr0h zwM3iJotvKW@IKu^Rae`TGX$_E(-DP-8o*KlEI%#PcL04rg1=Yz-4flJrTNyHi4((p z!f(}v_}8r*d^#}QIDRQU_Zs=8lzY_8L?3^WL@h>>>*>h~pvH~ev(oqCK~X;twa62G zG~Q=oBv*MdHRkjCg8y`bCe(;}eM2l%!{OTsm$lpEzCn!XM1}EJ{qGHz5KU1dTT!d4 zVv%Y*p|!puOSheL`p>VIVAZzU+NB}fw4e$cIZ|asx0`~{eBQttm~i5V)Y8I_m;`^( zT9hRF(7eVtNj_k@68&a$_bffe2$-#CU{-9(3YeY8;W6gJ&mXT;w=-g%*M%>^Ey0u` zRUZOp#nfDvCoPjdqx#{)6;P6UWFUB-X)mzzY1E{uCWM^j2T*^tpKf$Jlznfk0*9I9KhEfuE+-olER($@G`uwz2hp6qWZ$}la@(eR_aD^yUDIp zs%FrrzHAZ%L~=wQ{8Ex1e8T$a1}0h%!jei%3LwqAgQrUZ^_=niczCkC?J+o0rH0%m?pH8u`eMIVa^L8ro+S_x3b3D(80#-#$A4M$Qc~7 zJ)n^@JHsWAlpdMr(C;UO^{%dzM`!LVE9Or?eae8N>fppRhMq{v<;l33H@|sf^P-p4 z3Q?Tm)ImK^O(P2&M3fw!(u99M`jwOC_zWD%qftp8!hKZJocAK#(SYW#doMp;aR(Y# zWLpO)UiC+X5yEj|v0yZ(7i_)qjAkGRbyMWEC`k+x>14rV)}pnaOjiAZ>Be;@*g;{P zz-CnT&M6l-as@Xwfp9)ZzK?f6xh;kP(G=M{QyCPu!AV<+^4}*DL>_;jKIu<4K(%2t zRNiPY-C?mrw?|(Ep%Aoq9vlKdUGbb?0f@P~N}aP+4f@jB1Xqvp=u_GM$4~PHWog_H zi(^=5b;q|Q52dVdP-#*>c9{XFE4?K4ZVnE-MOP`%S*b#0i4n1Gdoo4tfy#fqq4->y z!OFSR*&QxRt4MDSMMHmu?a9dVH%vDc%HxUHc;!5mZTZ5fLmZYq5~XAZfBxH@l^Rq^ z6xOdwtIt}};=0=Kt?Uhv<_zk_Qf1A}wI;*YJ*`X$gG7tmFy4eX+s8pHW?@x~d=uKm}($e01H>xuIK>sd0bhW0xoM|GV?FrfKgT z-4Qm_j2M{SXtVAUlTNPaQsEx-oT-m;^h6G(qdAeD9M0B4`>7(CT7=CCeJppq@A!P0gCh1m{ic({3az`C(oHNnmk z!4E*?Xo)vJ0h*aeqCLUElZM4#v8`Pni5mbA-C|W@oTJ7RCajj}G2`Vot~Wq&Jo@9* zNynPOIY31iI6KEJdy+%_zrNl(X_XA`O4G8eC)8kw`cMPsZO{LF~YJ|F>GTZ3a9)WM1BFLx|Gr{Du_PEuXj+TrKXW|ns(e%MdskbVzs)Ac0Lt7>B}8dLeMxM#~^=sEJS3@ zGW#fL>VWB=Ga0X-S~_#|HAFmygP(-Bmuwh(gtdRs+R1~y+(Ct?Qv0AWqc1WHJ&kxO zwH(v*lJ`>x{GU5Jm>ahQ4*(_6YD~NxqYl~x&wyV~?;`s0@eZmQ^PQwcn{*p-^FKgD zL+AJ^@L|V{#!G8e;y&9;C&U+qx`~0$4bCD)y7oViRdvUU(kLXLSfG2%jYk73PMLxU znx20y)E;?NcbtR7-7FW#iWPn4rKAMHVB1L6Jf$|STci&zD_)Z-Z}yn-2M^j)(hPS2 zKJjE2)!%Zf?!+DN1?h>l@qVN>nlk0C&=z8~pLoM1HafS)^zbx#Ub;9d*!o6LOm&tR z%6ohOxPz+rWcM{T%nAa`r%UuqULby3PHBG&AMe2ugk;qX-L=EYYA!bM%?a!wof_4> zZ=TDjG3qMCGrPuc360r14Sye;Xes}gLG||6{fp#({$Dg5|JTI`i!i9OCRN1_krL<5 zMqdvl|Mj1LmPCJ&|9#sGC$Ug&0x^k}l0=uknASuTz)5L-y@A7l27r+PfwM-d;89>Y$-zfroMw zw*4V9`}Uh}FCeqky2dE39J7*J%42XXoXY>xc6GgS*f#brQ6HqFN2hkTMxEHOoo)KG zkVLU45GSc`0=WNv59g-vodq%@T&x}v-+0FGi6oNeNc;dZ^-1eH$Ugk#gk^s&VSz}^ zu*C?RBaLpc{wwG~vRG5~ZnoN2#JBrc6e*=};}z!$*@^QH zh0M7n>J_fTXD}8TfnlMbqndA|#(YKg=hr_R0A{)9?72nlWm&7m=fJeuR-|I}MlJpm zU~k^O_;|vbfvX3lY(7QAA5?!UBbvv6Z=2*T19<)N&8rhm0|wA?NDS5vilLL)yC{zg zk3n*yBmOnAXEc1c3(co8_7YbpnxQoMrFrWtl$%EE=O3$!uh8DSJh5gfRRSB^N;vr7 zYDMsSkccu8Li`_J;64R*gaW~__UN||b4t^oDS|>z?-0x(#GMELU?+c^#$^n4huR6P zStM-*aTMyO%@F-7TgXlTqcx#*)CVn)*T_Q4N|Fli(X7oIy)v$V9pM?7OQI5Io!Jzt zRAgDDQt=<~y?-oXpCbGAgrDu!V#f)Cjt$~zuDy8SP>3VOcB8x26JST8`KkrDY}OX1 z*K%ZvHO81Le65bH0Puh9yT6|>OrN4S2E|;0UM}UyCya+sgnjVyA76xDAv;Z%%Nt&N%o}Xb!Hhg*FkAs--$DBGzvrJK|;s z=coa{mX*BVu_zR0SrVgi9y`$-$WH90kCz+02lBKe)-bwH5!8R0llzPtU9O%Wd;9Lh zwLwls-my?>xSTf7*bGhJH=8nUOig+U?EMLEHi^2=|Ct-J{Yh!aM2kYFq&Up9zk+9uOw!O)%8sM`_Qih>AKtxsb>b#S1EoTRLK{J5 zsvOC0ta6%AQ;l|f+WR9{R0VuHq|5>xpb);EA|BJ4p_@{>(ZlZvu(xkc#3xF13^-S? z#W=(}3f2^~bbKL0>g@qLaYZZsN_*+tC4EAbEKTY?O%h1$0MspHCrlvLI$1TF83Z}D z(*QJx&trd*1`e_Z?8K6_l)PPD$qO7(y}6fn<%c-&nq|4sI{gWiZJktSsT z-m0w)2)#Th*p24yPm!GfR^c76Wv(zK)LOeYvh;rkCmep8H`;t%0Xwo}#YiCH7S|Sd zr8$V#Tv{5U6y3;Tc!KQp5q%;7=BOGgM2X=?T7*BKOCUjKE<3j^AHM(Qgxaj7NX-QO z!_joDXwT?mM@QKz71un3dK+wb^sA zVoHDP=~#V9NT9boc4!8W9eJbhzW6>nk$UsVL!~o*A*-IJyy8v-0J8Td4w^+c{vxU8 zB+JKIMV++RE7(o)+_}|uXeah_QoYP!K~TcKq0uEkQAPG5ozZXPTwFst;%qzqi8k8g zn*3qYpANM^<}=@A43I87R&$6x0?vJwq4sywR}tE3zMs@G}){ z7I5MP2S59bS@E0XhMlEic_(nbe(|Tj9zfPdXbTi0Bx44-4gpkyV;-HR-AdoQ&WA`x zloKcruq{eHiz^j_eI|G`v9{utK=Fi#6VSv&A<-8|8gqfDWAAv_A@UkTOWuhCo)Ld> z0vg4@vqvaQQV^n&Ewv>L?$(O-t&8^;-@QD63`kggToL4XFA$nC2Uf4;8lVN{j&*uY z#0h9^5*7+7ohZdYMze=($ddI04OUm{hnjoU4LJMGE@ZL-N_NQ*I=~ zUOkH)LDsox(oi@O;%69~dc3eAgs6O@;OP2Y>;$x-*h<9jisMh-VJyg)AvR9che~hV zqrLn4nf-+J^=vbIfxAWuYe*r)r^*QNTklVA-=6?h^Uz!p99p9_yNv21Up#+2_)PU1 zrCQe_>I5_&XHq1?>q0n5>s04TKGYCAl zc6;Qgk(Cqzd@F~PM%K#y$T)wUgCnr+gwHoG|2%(w&Wzdn440)xvneI`(65+7RDdSJKwHY4j!Tjp z2>F#WgjLv~x9{Jbk;TK)-dFQMF~x*xi>Y`qKgguD8&lk#xZA&-N%&HA1{D2y2cgq9 zmBQ?BX5IjK>+~NoObOr|LBTvKj#e-5XFlUC4rk!~#yq#L&|aRxwkk1Ypzs^4!ccX7 zIf{T#IMZl5IWKMlr~H3yn*$pNo5b(N3=hi$@0*7=)0G=d+Mh(w_b=WZLI;(XvgH8B zrUn``wX5fx_{7{1;+B=Z`gkfFcrR^kt$U9F#}9|l+0+c> zG9dOi=YaT>R}xEJRG@S0&^BMY?@z=lkRr>P%@d}R4WIhNBcy*>OPaawTx0pdoq!f* z^#q;Hp@G~suDN0XAsMi%860UVsp-2Dxzmw}SZ7igXp12&N<7GOgG163cNXp2|NfuX zFHaN@v=uvi#;6GK*iDc%o?7zoK1V>eV+qeIJRG1ptx<&lmRtvxiS?{Aq8KY~C(BU{n0}y@m8^@^kkMtw5XH-z!MOMQCaZWL|D7h`q z@PhsOFqO1M&3E0vBeG|xx4X!u$;y+-GpAB4outj+c_e>6h&bupr^82N&*-Un|C|M% zwuIyE!zv-%h8l#pMPrM}cGv9F0c2oWr4IJ)$ly7i0WlgDFIB7l+H;p4J|cTYbJV-Y zq>Ky~X~CzeIA6uj(z_-wYroXqK=$z4IANQKeY}}Bb@wKlTC-SNAFw`g2$o=Z3M`R~#vlJ_#g_2?gea=2xUKWW@1UHKJAI~3= zJ)^DjeSg;BEo2F(jFm8{563S#`{%7kH}7Vjj~n=Ma*Rz6?l;Z-^(t>$%5T~ z%y~q1!ZvHF4P0kT^F7Q2lFtZEbE^0a)m`BRWS@V2`S%G6SY;LFtoePqi468!C8*q15CT>yFoSsimh2JPZzqgXh;XVZzLs)^CK@$z zGkoHH_5!DY;{ zH`EBzpMtS?eaT8z=0h|(QMx4Aj_<9biujgju>!gCpJ{fi%uwW0{w?B z5NMQ1@UvLZmT%1PyoUDq#EuS}EJ#f7j^HC8Q(@+y$wxjlqZ?C;{tvbjTbi9gmPLOt zH5_~?KK(d@iS)1C!lE0wzJ;)!oejlDwlaDsOT zT!u1?L7|IvVDUn%URjN};B~ND&>nwI7{Sz)HA)pvDlaicNS5hY++=l>wC6k?PMAP@ z9GMqWR$9dz*z9B*F9#;BpIO!u>k7|6n_^r)2PH zo!Jny8ZU70n(>#81VO|1pMigWm!T)LJCBTy!l*vYEgG0xEu#boQ+T>|V_L;Ev?KRd z>S?M8bf~liH{$(L5V~}Bp0RG-tm&cW72h~5suOE9hLz&kXCxE*%#!ctYy1xFh}`pm zoZcwHlaeQbCyty|SZv@Cb&E*?+KIQ!K5B2?>0II1dK2OX37XX`d#-=b{bB)!_W9wr z6Zgx*8?Hv2{iF*Hcj&TE#ids0wcjtXaA*%*Ppn#K6ej$?Hx6zHQr3;2q+qxUhwjG6 zjLpT;@p8X2Ooz;wD=Gbp6=>ed1Q3Ft~qO(@cZB9S-cZ zuld#_>95e%mlKx?I-B4tv&WSx9NA1OrBH`~i2JkI1~B{Q5jwP}6ORI?hCpD}3au3p zw;)L;6wMB@A3q(*0iZlcg4JWWzIl zYY_;nognb(pFe+{Sh1C7o;X*-61k&oo||tFd&5Y_j%fdB{o{zjt4dl&C=yaEicmGv z<8=aJeMmd+>_B$r`LkvJ8cFv7e-@#th6Ol~?73=N`Ds6Y{&Zr|iuLAQgwjj`0TpZU zd^PVllNx^7xgK(8N8Y7k%%HF>wVubCel_puml{*b-Xwo#1KKY?|9Bz-gv>pQfJ06= zkkDo>vV!_G0)qODSxjG%eg5f4R-bih!cfMxvfsxvZ-=~QWkO`gX@_h8*%2BP5SGY$ z8`(+>X&2Y@^!FA*%5BRA9{LeZE27f9c-}HYtpr(6pU}bu2hV6LJ?CF%=yowL;t$xj z?A=4ThT?y1gcu|ec5#1fg_GJd=WI1GRruApst=F@xAj5GF-;pgW#Es9g%1o*!wz5=1?voHxpnk?D9Lg7RuIA;9OZs(E|C3vUF>MT37^V`|*YXDYG|y5E8L0_;eRGGQxw z&jh{!BQ3Fw;KOf<`at^|L(rcBJ8{VJW0PumSALnM0Q9G9L!vB^0Z!1~=BpcuuW`;Jy<8zMMH_P)I8) zQ)qvEz;zYG@FjhDbHF_ER&v^xGslc-2u!2Z)z=_4KlP<~(!TfMvmIad<;*$rhr^n< zm+5!Nmtvh6AXZlC!maHXz~`S&l!8DiRj)yug(1&n4ly5L9b1>YwC_Bm0NAf5@_-S} zYwfO_Dueq&;$>?@mRguWZ%kW!3hhLup;~_o-AYNM&0_5#<|Gsm*4vc1m!NFF9(jfZ zs9E}?5(B)LsR;IQnvlN=sO$(Qhjt{%DoR+~wJgY{=2v++c)3xXt!Lv2o-t=|bJ!_D=>9NnsjeCk@-^3HIx^ z>bN_-*q5U*Rxcg5&q+c^B3UJo#cwzG$?WWuuh`cDtQhm!pir4p%JH*27Z3V0Y~O%E zLp1^TXXMY0bg4^AFF0nL6jAbt3&4M}E3Z4%&1Nt}{@^%kNjKZk$AH($Sx(p2?>921 zOVb3YcJ=gJOP6NdD0`GZj1gi?ph?d|jy%B%^N!%P@ zC(GkvyY0b|&SB)~K(yn8&(X3QiCzMf*6}r-E!o0 z-r{0$qG?(2ti&9aUBR;yePU%$P8xMcAFGSm#@Vahj&6bWmH3~94X1;HK1$jdJl)EY z0miaqmJ`~vuOtAA>TE|uw1sOH#imw#%u7+^tmhKf55sO{far}QioAab`v6sOv{=5> z0;t~eSpvUIyRmE`#8m_Ysn@oX_uhIz6xlLsK-fJAv^rmIR60gLefBT_S$NS&g_N?8 zJUKfW5ah%IXxSC8F&>=(ya;k~V&_Q0p}BQ9sizYT0Ml+eGE7fVO z0u#weJ%nD#n*q2nFhL1p2G%O%wyPTcElZ=FaA3WYH)|<5YTi3c%K&E8fN5QlWly_~ zqavz1c~kO&Ek;SPA*_q;hF{D;Z9t@`6CSWH1++H9-p2R*ZbpA(y9cFB8@^tP9I4Oj zTM;cbfX5yaL})ll$#&e|+4yKES7s4lS>m05(8U04Ia$>N#&+Cz#{o zZQiKZ3u_J2nk#<-8p8h$-~(%dvB=!1KUcBie!lsYtGyxtpcawBfX%#BB3lsA(C31q zp4@HFvMY!qJ%%qB(&q>nNOCQl{V9Peh4J|)_n)Tujj$#hJ0dnG;2H?s+@*P`k#84O zo-0ZJGVR8)_1v(Nc>s6gJ2o98U7E2%G&yqq$s>9v28k-Dao5&cVNMdpaMoD(f( zn9rwIJPf;$+2aP7mFB~{NGsIqG2TEr7IMU+%>H%-4Ama_<|+stapbg8p#B($6a_EN z`efepN?j0NH4*M9#0O>^$L!mHiY(>b*z0^|*_HPl(O|MExt%zpd2VfC34q(!DfP3> zyaLnQVyb^0HkCL$_s8fDOC~iV?A9aNc_#;0Fl)%^VOe|3{st$I66cQieECUsx|9Np zzqAOD<`J9Mfi!H#p0$_KqZ}^TjSQejk6{l4SjiJ1ZS}rO&7lEtn~sy@bSnXXB^4iu zbCqgbh2xBdn0iGz?f!gF)~9JVUh9T!;rQJJ(G z7&L~Z$dYO3SiynR+&KW@#I)~M%2q)|ILI*ooh|T!x;pF8v{N|uFl&DQxN^o3n{3FK3b}!)+)Lpc&M|*=*+Ymk30>Z0b2J> z-7kNRv`Zz8$a=@t5Qa}I+i&>$jq1=oqV6rBb6#SZZG(QM8T(QjQ%~Z?_dma1p_~X~ z!^_5Bw&X;twnhgCigk?meE#vLWmi;B9qAi}J??=3e>g2Mjv5W9h+|StEPMawjWt^X znH!)dj_yYNAj+uQv<=c?dh}!m%WkZhS5JQ#$v{A!fXy}zUTDA?pi>zOcS4@N*~<+N zuoij!GpS&hGes?A&6)td6Dv5*v?FfZY)rtN0sa(<5p#H`wF78?gx0pSpCGh9{=9Lq zk*f*&Jq%k34!|Bii3@x)g0ZjX^N$}H{rw864FT{%yCv3W3?%ciboxL7T~>g1PfUM% zUw_?TPdz)=s)qnBoFt_>%v5KvMa8sJ({9iwe8aP(*un5hEMULbRxe0a0*rfvxZf|W zTAjH$tCpgs$MZmO%0Lba6YfxsiV82STGmo#pb9rD(g1;G$k@{)wplxI;-7zAx!RcQ zitGSBvzO^9!dYwL=|irPd{k5N*PVZN9_Mh1x)YqV7DTqOt156%Mk-Z3*-X1~z1@L< zkS!-=ELz`)9Iz>Hh$+%T4<|(6<;s-{r*&2BK#O2>sZ+jr00A{++n62|VZPjX7+U~n zTZ+!6(FH(OShQE7*<9_Y2Iu9D%#7Kh+&jA|R_tZ4*%dTkz$XHJJTmMC0$P9UMQPH( zoWkBAw%9=C%E*YiU5}JpUhK*XN}%lg=);QWL)FfFc%@ay0Y{aNFLpz$u;;?p>isC$ zuER7iUS)P|GH&h((7b?Z^S8gls?O7eLdr_vowIjWtD?O#0Q@V4jMg{J^ zW{j+TEGcG$*>u!~az|jvWtV>d(Bm-yxdLvm8#l76R9cs#EdKG&D_vNr1<>)(-~*4T z%wie?)ww8Lex%h2%kDG=Y)WraiwcP|Dncy2N~1Duk8%?I-#=~`2B)k(y4E^9JJ@BP4~0GO6S~AnzSP(6H{@ILa;->4Ar+&V3^1&$ zG7-lp$9iPh`=w&S0s1zyBNdI^sD-%~(AlO^e$D&&ST36OcF8moo2hs0u%qx^qa}RF zfX!I4an$Pc@pi{FPi24YZ3WKBKd^jx@XB3NN%g2a^!?)>R|r6k&1X!Lg*FlY#HouB zv!Q`EjFgJuRg03V>B z9r!ui)i-$FnKJ;WTxm*~b*wO&hMEGXQ?Q-Z1PJe%<>=-Sw%yToOl%L6A+tp++ej5g zsw9NA6?dOU{jVRFJT^e(8_g#s{@X6l=`u4Hx67)2*5e#z{1)E^C&;# zzANAd{NYFn=i`5tr#gtIa>nrX9kdiN_(9h;9u+2M{NR?SPUQENHF5|@7rsDoZrcjc zN8m`1L*u?*kt@uOL)S-KihPArCJEr2*H&p-=_i}|`r}FrVYOr8h>c0f2uV$(7Cx`% zI5_p?%(8!7DM_mw3fRI-(fK&c9j+YMpcdrlkqnmIz~X3;q3uPX)J*s_Jx?qLJx+8h&5X_jgQ z!EGFk27LYTddCB1wN`iV1XP5bwaRRgbbgxHxDHMyl$x4iK+Rs@WER+l#IMlZ(gc-*4YOuJqj*s}NGr38pgEa!{&Lx2%8A35-rw?Q65OrF5?>wXAhe^UU{5 zbFWdCxBojX?$`hGzjFQm{~yhkvWyvfuWL(?tT;m}w&jn}iSaoJDPNqe{nRpG1~q`^ zki$|q7yy0(S3)G+g*_DqmVHqt{i$i&o6nLJAS*7DzyfV)BLNG})ynheS-z-~{?xLO zwDy0`&|Y=L(Y4GG0lgA3qT6#aUcRW4{?sy08^o=0_;Jk+QaO8!urUjMBM0)m<%^@z zpIWAsRV$e{Wk6ZjRpaQBM1<(9GQF{>uEQ~c z07*PYst?oNt}I)2&6$!dX>YKhU@dNB>QP6GY1y%DH`c8x=laP`wQi2H4l4)s?xBC| zSnXgkT%o|cecNBCyMOMaxw4fMQ5KoAJc>j6gn_L_YKESKT)Sx9=c~SEVTZLvpy|dg zKhL0(t31brg%bFej1yhKdmC!2Y3Pp31NfL%=GWwag>dPvS(jo%YI3W2A*8Jc)ZxRV zX|GfQe@;Xm9>J;edLsn4HJdf;Ey90W54kH-17LOn8wT)xewX*#ymG<3uoB!8z=$HE zE_v-*Y{g(Yfs{rE7=HdnRvz+>H%tqI zb;vt&dU=gFcG;Vz#P@7=4V<_vclAaf<`^~(Pi(NJ0ciq;z)}jhHR8DwKtg}hZeXRh z3joMN`lDqyXh}jb(b|zPVCeJr*k9-E#$i*|Z-kA*l@mwra6Whe_v-=KAi*C$4bBe%@I+or54L(r}L40Q!kx7koyuc0tym+is3OGkZ?d( z$I^upiqH4OTSrf3;4H@=BAbFQfs?Sknp0;Ni2ckw3D*waB=-u)S`B}n_8ySbV$8lk zN2`Q%IKOz)K*8SvE+l%qrc6&vbnJ}MUa-B9e6Y- zSS?cuXIGkrqX7N)@?9|y;EJU)NWsAIQ3mH?Y-Q2EX|aPgxu1X8_bUZH&$F+CnIVO& zCBf4k-dTYJ-vIxxc^LheeZN%V^Zf7)&bwNT?^@JrPYF95s?54ZnRenEKeI3YykOvJ zQJ8VfIcRg27nXH)`?T;<^m8ON6Inqkj$Mf?x8#h!pdBWk0j&2+=g(N~ zmTe^fRG|AlC-8rLk1IFW4L3Q?zIV=FjtM_wXXB3GYtfU{oeP6AvdAI0dcS!7++iE_ zr<%z^#ux}M(U8rxJ7>@;<`Pj$ljj+z`QG)`?wt7 zi%)yJ9dNpUW>|@s*v!j0I=FTEs5!|Ew!C_iqHC&^v?6C~bU(Xwc|^Z2REa)^1{@UE zCw0g6nuya&9APlQRcb-xIgfr{sS`c$TusYMipINJ?HRG9Do2~vp3^}+$?xd*er0o6 znqTP-oM(Smx)s1aU;_Xx1=>0&`}$we@BPxfew6e#!d;Q1jpFeJ3s)DGTwufGF0;cjJo8tgd4cq2X zkr}OfyJQ|xZd@T3#FCg`C>C>$HTJ0N>iA)7RRAwPqK)*)t(doU z*&oDI*FuQh6G(pC257u&XRqv|wOhl5&%)O3)urLgG0;if0tys8r3veP`|^JxA0XYk z@mzB6fFU7k2jk#i76=fvOttx!^DDB6|BOrk%lSOsiUq&#<-YeommSY$liacB3hu17hXf= zXb1yf3-Rbw3@nCMuYI+BQ^MAO;(t7`tj?&F*%~7*E7)k6R{Mx` z&&8RVF>0q#<1H%^{C(}Nkwwf|_GHn@8b?E=YSEyE-E3H}6(h#f#!2C{Fzrd?Bx=32 zvnE`}zJ{feA&Zoqg28{}QZ+9YEqXoHDIGAQg~XE58f~Z!jr4wEXxGQGCq0y9cWxeI zK8}P|ZJ#6Zgw?!9aL8HqBB9zzq!rORJATYoh-e-Ba03}wOv$w1lRL0>>#KmWOUOtA z6xpY2cF6WNZ(_c|Pt)F@$FeJk9z5+Wh~|4Rfl{$bLEy?2V8MU1Crz0 z;P3Epp>}GZRLNEQ_ls4dUGXC{u#M!SL;-5_5i0-^HaRg)=BH^dRt>C#`$H{7^tvVL)xqJn zQxuOhH{GFbp0w_-7q%JKa2?ZDw7vqXwNTB`Np%zWUMhbTEBC~>-84{|-_eSXw(Lxv zrAtiWuFM(ZfW&`6J}Xg)QMfOhv6zr$*v*R@dV34Snqxb&rD55NB)Dn^O<4lA?D$&@ znQ;m&EgXNgLp^&@e?fNdpNTRkJWvN*nUCEX08Im$wI zlR;x+)#jwO@yj{Oo)DPX8PT**A-FeOP2uQ5yc2&P-cXiGn)W2h<2+eNhR+r_{A%fR z$939p9yKwW=TkE9q{3(J9x1Gt7#j0wW0u4&jqd$?o~y2Xq9_3$d%T#Icr6$)fB1+? zHS2u?_2zo!^a(Jsxd7R8RRjFEWf{c_U#qp%Wh>clsDHj#wcf8xP#3XvZ!LO@frn~c zg%N)dMsn4jkUsZW@U^IeyvOmPYHM@!xFWhH3sdypFIKJWOMHjaKDf(7pw}rE1a;Ik zjgkdNZ#Z8R^xWu5uYPI=;25EC1sFmEnvkl&``Gqk-SE9eHtTFMDI&)Wn39GgRP~w| zyY#aZ>V?aVdJp$dbwpfh7FzY6)-H9R4@rNiTZL&acC^;vyHbgndk9qv)G9>&N8b|! zpHkTmnD$~r7s9#+(F4|AJsQ6)N~6b?apvG;C;uC&>~-C)eMvvnn*vEHB36^Wx~xOV zi|~djTdUTDx@tL~Dx+QjU$_8BE!2{eEuvqZTvE0WYsMl~aH`#EYbGJ`KN_I9rAmKf zKF93|Q3m52O%P5EwA9w81jR@;c(S)%v)2@$?}_V$w{-^bEHQIK7px7@oJGBaLUDRm zA1z&_s)$)41A*&?l2vbatB>)cg=f;Me1Y7wdq%28HI8LsbqgK(w9G9*hb11o}||3o1xPg_u+QHx#lqpHM6N8 zF;60DNae3xdSd{~Yf6SYL9-OU?arNhzdcVP>RyV4Yf%LVcl)V31!*>o`9iQW(*hr+ zJqcS3S7vM%z7}99}Xxq^RpUWJDZBO_Df@eoum*^cUK)gyad5)L^zgtQw@?+bR zO|65L1wVy#ZCaHPwOOIY9s)Tni$&frh8?vs@V9n>f_Gj0Hh2(rU&=>QVC4HBPh_-P z)qV?szpqolN>|k=2V8)cyj_2Cndc`m+G2Ce1-r_fEn??_m0n$$Tic0IG#|^JOI-GtrfJ&M*a5A`qQio6eK{1aiA& zBWB$d{V#T1?+jFVfPYs?w-S~;$p-EsSg7 zF*|O}IuQ5(QMgIru_u^~4D1SUP0s?uT8#(3)FN~Ye0t?_;@_WSL2d`n!!@8Kq;q-= z;s?-i_z;*vc0-@sgXn)B4Q-<4GdjTg;?h`63wz9T8;qs*L5;w*dm=?FP<58h?D`k80qzuNREJ!qx?#0n)i16OZj!Km&%)lVn z=%n9$lm+R#@H*Y}f>d3V+ z|FrJK+R+VpQI@EJYILIlui{^7o4YMfO{M@odJ-B+)CTx0C%&FW1S+@)-j|}`m2+>* zZ$g8&0kFp6Qlc7=HkX)wjuq$L>tw2wx(YDv+Y=>6222AY~F_)01rtru4@h0K+S*Ovr4n!wxXDI5fW!Gac zKw>2CPt#tk+FH|aBfU6*0#ciI;m6wAq~|V6A)|l$<4MLX6o*Yg^PGU&*qVi$8h#v{ zuv|}-2Ew#A*?Jr^oVS>JD+umItwz;7u7tFj!;>)W$$%XmT@lXjxMy(Py`O2Vl$eSh z%2BBT*|6Q@n%#gKxFhnu1}HHoK9>MLmcaw zi&}rpP}1*z$&)_UXt#oGQGFK`mIW3?LyYZGORm>DW?((ZJUg#GNx1ZlOVB?9(U0OD z%vChif%}&{Notwi4lZB~28|XE@gAd>Tagpho;k~&Bxcm%Hdfbb2WV0OzCn=5cfGyr zlpd740pQePiYlUkgTDhtUf5U$P8jSgzA}G+NbcXi|HAy|#CGBi-X1C>V#Vv;1>8>y zoi5cS<2PX1ugn_%=h%)wIrXC_cLPB37@=5osknulTT(6P1xaSG?Q^yEg6A-Ri!P*4kqA_{C?LApiUKe?2k|z{r2ZsFgNK zr`E5l#JT}a?r~CCdeN^h{6|-?DgX@|-NMnutd!w0Kp3#WB?Ca<*j`+O4aOodK1j3) z+%MK{7O;5y9*d;3W?Dv!u!<;2jw+LJyG$2Ni$<8UpS%W8nh zsDfIf)Si0l{`MqD*<3E#;~w_#yMSv7*L(Wvty@a&;M*Iy6rBID?N*grLrFYFqrpyr z!|45H_VU}4$50Ao?usDLroyM`NpX3P0AdzmOe!(fa91c z6}0dFdtNXo*Bfe%MeB{4PFNG;rN$84&sk?G84t@|m}WueNCk(#9G*LhV-POu5o*Sq zU9=|!SX8~9;>3U&pRsz1Pgu&i+GkH{TtBH#|0$v?twu*Hyjy>Wek^7IC%$#0s=&Yf z&y%j8UZO&0M5LN)o|q@^fJ8oTVan=)Q+Wb68Y8f)sR?u8_IU-Oxknj$aZ0Y){I~OB zM)4=b5n=|gMPrmtAJ-8;*AU*8Dgy^2ev;wXch=!PL>2a|;XvEBfEep$N-<7Y_GUX3 zYt-h7*1`_wA+Ue;-acc8J*5i{qW)sd?ke1yt$S)z&giFJ_g=b{Q9+h4e#NWm61d8rm){rzUgp`l5IUM~R3u z#Q&IGHrA?+wQ(&%^N!Upq=>Xt+rQlpbjvCjB)>Mzxj)7(6OjaUcQ%3 zSh5hP%qo8%5SvWToV2gsUclPjXhwIL$@SR{)L?{YQ91j@c*s=I@;CfX^F>H!5MTi9 z&1d$IYp!5*5;b6;cy?3ekiY+s-@f6JzVK`VXcl20zU;8|;2TgF!SN&26!C<4FJO0V z%?Yq4#`Jz>%Z;&c5kLuGaB7+>EPLWVs)H5x(_MdPQz5SLka6|~5jD;!1;DfyzQbBa z;9RVr<`kV6Cq^7EKq3=O4WNf%Zw70WBm94~UCWMLNpAcl=7X8coekKFSiFvtg~ zF1w^wSJmz5@z*;5S3s!0c!iSGy*QP)Z~_gXRXTzK`5+^he5B=*$XE9<%%iUy2jFEh zrm_=E1GY1NqcuRzy5{KdgI2|4`1}thjl&>D=hlYmnX~3Pox@7fc&N`;G6>>oB@fje z_qO!N>%V!4ZwB-5MieXM0+~0uMb)NdZPjA{*wc}YVj#64z^+NI3=Oa(YtM^e(bA-y z5aiRBBZ))eFV$o9Ik2Cx`up&N0%em){^PARJCn?R0UWuN4mDh$JG)XM^&D3c=&QcP ziQZn0#M3y>td?O|LAWgxnPW_ui@j-A+G=O>+#kud3g%-l?cU~ijC%nCPSLcQJgc_+ ziB`P-oBx*T|NlSKgAdS!s}X2ipWwvFJL#m9HL`}Qnu`DW+u#55KmPXb|M+rygyMe) z%m+AsfkTAFxc!tCp~d41AF@P_VR!c_z)ScSvI$qtw0F1ka4{#froii zHeEHm_<>A+JAo|rLj`ApeEI~m+9a;xE%H(c zb>R4=zUZo__jhDp&a4^!Gm{0`R>@1Bs+2B&Yv$NniS4R|+IM97+w%!zrZTl;q5%rg z2Q+x+4k8AX3)Oq|sPr8f_|^$zOOy$Yru$?%Ff8)9S2=j$f78ptzaQreeC+`)`0+s_ z9{~WVW>kd0ZUzyy6Q;gKD_5^d@6euCiYJh%OYgGCIYb)X^Cbykm#YarxEk^Lj_me- zyyOJ38bkEVLD&l}Ay~>4Dx8@;5ZmU)c0RwJv9!V*$Ea}RmP1TQR`x1-iPIg|g;0A3 z*3SUb;4N}IDZ1(K8BP{w^^}Z0y#w^dUiQ}`HpBhVXsgtfI&4MvzH^@1n7yt-t^#8} z+l&*yz$<2%04R#h#2=4)du3@W^l_Dcit!!TLjvtXU}-|^l-#^&W>YZviZ!fJ6htw= zdhB`gBj&%1=*_3W;!~N>vw3!(vzDy0Zkhj2k4TM=Sq4OZ?*5wEWA*@lV%3y zaUp`;cCeJJ2X3gWBzA~dVg_)#rL2@nKMEX)QFqv?e;g;?DNx?1HdHB zSv(Tq4dq6Mf6|1j%8e}4ICnPlbN}N6u=`AE{CIH)lSFl7Qt{s1+U4p=EXHNEIEp2u9nIv>&L~X?*a`Ehjls#h zY)(^&5hP>Epm5bq?q_U&XSC+B+7fiY2vXH6;$d!iaCKQMeFvMf?Gpk8P#8;PN}SVB zp3`PaVM-F2EpH&Zonf`XeG*m)7XZ9ArLt^hUhtw*Lf!>-V#)eYjW#+Ixe+`({1nuH z44*e-c2%7A1KAOUlB?GH!}#zyl?fVvjD0T0vIQ2hVQO!O0-<4l!997;W({!=OD*KD z4&KufiYjdc4m_xL#GqLP6DxhyoEJR#!fKUdplAb*eZvXd4n-R${&j10wYeacMByb#?MkLIdB1Uze+1=HHj>Q0UkvW#+-E{x;ECr&^t& zF+4yS;c8OOkBHuXnQ%L&;AzF2*U$=`lH4glc!IGdiB~Pwe|iWwb2Fuv8o2ZxhLC#F zbBSa#u?IP>TA%&2W=D{j#pMdXTIi`Uw>q=ky9z9}z7x~?1(bWdo^a>cXCFkTJO(Gl z(I4+;SxFhUVkfFM`^(D%3C|yg^;Eo{boPnjIR9~#(4dKbv65Ii*prQe_P_e_>xnC1 zz50-I9g`DefHx~5i`2lp#c1b^;>)jJPJwGd&^)ex=M$epgm03fHMUTorb=GH$Ts%$RsVP-QSf8Z5gQCxAlUy3TAK%0+Q97$ z4dP&4b=iAI_O;Ld8UK3I6UHrz&fZ283I;2}xd#my!Z=GEICp#KLV12Y@jOsN&q3e~ zw07&OFj?<&g*sdCmVmqHJ|98nh05BJd58L$mrp}~S7=gdG2?#p9R_mWRz1OWW6`B5 z#W>AM8laWa%1ye6*JABNV$Ol9VBU3l0kwDnkeBPvOyEZzEedfXAo*EeKIxf5hwW@S z%7P7%`{<}d*;bwNUc__NM)6PJ&YU?fL~kYI!WIU@#FF8_#Z*HK2`6!bjCkzt=}2%P zMNc$;5sp}|7*~{Tu)@Jpn-$0B*6Y_pEUtu{3k4k^N{Guk2~il`mSL~Mh8ezN zI})Fl#NPW1H^D|Au#f?NDscu*)dz2FVY{8d=A{8-S|H~e-{)Oqo;8o;K01-WafWCKIF=-`zy*-a)AFh86L3 zTetpvW?$9dP9b1o1GrJTcIHL+N%UyoRUfUt;ybf`R++%YdtBZrIO*@&9q9x7jr zAo#O2xv$_6i$Wu>SWKY@b4x>p<@2wB+eRmQ6YbsDHm6J=L5xOo_ugW=`r{(qVSVW@z4Xu|w}0xN%BBOWU9T-?sLD_IyT5 zc<8VhD%&qj?qSy4B8dO4Fwz%vU~pI4Jx#L`)fp{d4DvgFA-4(yKY z#J)-?xTcBAtgv+gF{Y;YEhu~ekKb6gJGLVt3`%A;213W~^+a2C9kuvyp91jb`xqIEcJK<=(00 znIsXMs;?4?XY;QQ0cHH51o=yzNX zb+_6`UC$v9jGARA{83j zhC{8r24-A~xD(NQNB2O_rjK{FUwvyek7H(2Fc88OA@4u2W9b~(sfF{-QZz`U2FM$K$gKj04>{-qhw->o-tVLxtDI;N`M1P zyt8uOu$@}GhO1D2X5yS$IZ&kvt~sg? zq)2h>loq{%JGFeCDqYRs`zNe&%oI5@wbBZw5P7G-^xX1wPgwQNCs;mD{nc1K6`4nw zH0xDE$-ja-wR{5I8dUKG6uzFRH3S? za2QHv*ygLgdVd9XYWc8QxWKtU!zT6&{TkOw)LTgbihC!q@7(eg?57VWY>+$&0#P9t z5qOyDaX{bGUWxZ5Mp58}Z zn96zD&im_sH)yApE=(0~=dPtl09|QPQfBXxTsn=Nt{1mcrGm*v$YdW%#Z+7I7e)M> zeV(EZ*x1RHxI;U}LE#&gF_w-5+Kg;^6FxKbF*vpv<2<;vpetCbn5MSXK=`yp=gBj> z@|j!Z>_^uR$KRV@{?>-uDiQ}2MJhURfA^N`1hUe*-G3beo&oZ8cq+`Kwlsvi zHu#f=V9)Gl)Y_pad>$a-B1DEcHtTR-vMg;qgS~z|bk?X43<>tK=bTp-Rvwf}Pa{Hn z%f=;t^}@zeS9Db{kqJVVIMia4ysw-Te48reoeXt5Q*c%bSL%JH)WgW3v-eJ@u4SjD zxs!$9z)me2m9jv7GmwoqxQ?NmA%MIHfsA$nv1f|Tz{hJyh2TY-nok@^Am?=?NtL5+ z0z0*A=DW!&EFn^Cq(Fa_=Iso1q_x9E>`dW*S(*kVn9~@*l56du!sRz_WaAy+HeP}q z*s*2v>N7EI=1!|YQ_m<7CIn1mN!~FbXNu3tilGn6YrqraYyy5XJiu9b7?|)Luw%?O z)QPPWqs&~RMJU)AT)Cz}Y+Dh|r%xwxN?>YzK$~Ul-W_HsC`m6qcAa`0vUA)V*)iUK z)^OHF?$B2z!CL@xor;TL3%qG3ac=%=J|8KEfat5@?PA~=S^}loaGe4JtUSX)+Ia#t+nAyU$n3F^?`P_A5$dQU4`*jV~x>AP6>uBXkHdw z;A~t5$M$*zoB5!&)uPT>nlB!lDB-hz?oH{!RVV$Qv3;Gd|2&bLW(!^*yN``IIUnHGbN6yDZx>0PFBjp))(RYWr`q5S?#z)3HlzqNeqa?V zlro6~h(MpXHLn_p{|VfoeT9DKI5H0aB6xdK2neZBW-2x9#r;s%5MM zVBooHQ7k3hgGj<*gTDcoolt*&T4yn7uITXtAH1tsrL8vMyLhJ|)*)ntIASNgddiEv zSja|8Jh_*_ee0>=p}FfHlQy^kb;DsMPLsgl$mXP6ate0UNBn!_=;`x`z|l%a&h+l2hed}+xBO#9gN*1ef zYAtvi}zuw)y^!vY2rcC-)2#omRc{Pv>jFaYO)hYV0rpy*z%d(5#QvfUfqT@ zjXtn%vw6pVkv0Ggn~FJhg?6#bi0Xaj)>HMn1lxI=b+%1`zf@dmhzQ*MFa*S`GW?P> zfxfLB*>b3V0xipwXBv%Zg4DuyjHyt{Dm}E_IW|Xn#Yn?iDg@sc05&~UH8kTV-uPta z5(e`4#5rgq6xUK~<~XegP?F(ncxw!V)(v1^<_U&>>oqc}ukVQlNywg#d4(p4g{-V@k(OWsx`vLf&+!C zS)Ol!oiG`M9AT?Ls|cWYV{*k;W{}sf?1=TBem=4LvFE{Gsg_uo7JH-IS)lE@tjZXlnJRL>=Z@q{2=O2nUBYs=ns3#)3p+Rhk?U(Q%; zEC^t)I3$3?KOh@};ACIt5!uzm@HfCtSgg;%AlP1fo(aAci|B>7C3*o2?=XyY$YMBp z%%v}!$s&f`MX;VUuPjl7(Jf#nEJibbs*f;sQsMQ$qtP4*C)CFVgJy3m<(Z1xsnk~L zA=i?!4Qf>i4Uvu?`lR3uU}tJteUc8?1)Bj$sx$N!RvF;4-hF&0v*Ua0SiOGt8gtN} z3=Qtxv}5$~)YDd^RkvR4e?C`nYd-9=1kWNaZ*G{p?qwkYfIMc|sXo`QKmPcC^+dTB zd8PTp0?sg@D`OjKUWXgvsc&OTy zDYk`Rn46}mqbDsH+PA%PrN94w%D+huNZ{QsdY!KuLQdvK3(8TXc$I1t;gxiKyfpvv z$3J{m}!(YsBq-k7#w|y=G-yaU&p^60A>L`T*e#|#B}=9o;fuqYQqZ&>|=I+`p#kxJmxJj ziaLCDRZmclp%JTAFlhD*YpWMciQbv)1hNVa*lLB5vIoGPhmQtPe`u#GhmSqLH)M}` zHs1mhS`uOrCkkw}y>`ROB~_`0n6tCX0PI16=Kf%2_MuP=iWN010>#S3@@t>}R4)>N z-;h0OSaS<(xx}soi`wdcoJ-U4K7RtTKt0d?@qNxaU?)uGLwZ7m${x{uZV%B14lJy0 z$r;jiXEC3QalQqXS{#%}FNa)@IYmpk1t2zHm zo;<3{8zha|*GjeS0E53c;`~LS9qUARs@k9%t!P0sm>i7d;wjU+V|m2+lZZ4KNoL5h zLMqFPKA|+Aar2gs#bTa7#?yPcaIabw;6OCMf7+P%%wP0>tj*qp@?SnbXx4j+tSEa(VWaUyzNJiOqiw0zMt@*A{I zUrxAx@9m~O=r>ZCRyf&IuAtrpE=?{vTD`H^JORvS+<1i%{tJGr`QsK#Alb}ITfQiq zd1tW`YZUCr@!_V#5 z?8hUaDTe5^*G=Q(x-^benqq02jRGU?0Xw1OMz2DU+1WxDf4o{VzjoH@QM6uMPQSC* ziTzK_@4Udku+s{G%&wL5jKS}mR@5Dh36q^bhCc&hH%aNhm0BlyZO5Odk0NP1#0)m$ z6O@q?A$q5O0m=_I>+|>Ec@z7{#(B>({J!A0x+>C8l(xrNs*uBD0~5X7R8Q)^vK z{e5?9@SsKYhC>UTgT@kVqySjOYK)ZAl!_3#MQOi(*a>8C59(8EA$#?;0ZHgN25G&{ z0y(hb(Z2q80$9)zM~^(J#MD~ELXxnL1r&tCi_w_xbkhlBdHNhSg%Z&jWQ+t=l2)G! zah<|N)z}*qFrRcn-?-0103B!9As#bg4%P)3MKmT^|wMI!u-&H9mRV}gqSw+@=& zV0lqqInZP`9tct0xt(%k56S@V*>;lQPeVhhPz2DwaAcEs3Kgi7wIiJz+JSsSA7Mdq z&IH#Hd~iVrsfEkvrPVO>qP^ZXX!_%S9AVpk0alWfWHs}Kq7t08A-Koh`zvYL-3Kj2~jhtr8WYv-kvnx^s61WDnA9 z_jgniK4avTD2&`$2R`;Akz)=_wiBIx_~oY)sT1;oJF9iIly$Os>+{Abs(B&tMPG$~ zH^`p6)7ZE=s2xIc!eOwN%SUMRqBK$)IGh*VoZlYI69!w=Z}!NtsVuPCoP4-nspd^D zFXke>!F576b$xC2XHmqvP$YM(ItZjYL)_IJAFD_1fO2LVkd#<8){ebZSEi{E@}%Ot z?l>}i&~y0SVA&_rlsZ8$9EX9a;WSKto~cmCJGTb<dhjI7kKoyRyn{FBG1iP>b+5^rinIPK+PYN^^{OimC zFn2VG{`{z)$h{K-;b*K__xX%)TI3IE;aAg$l<1;A(wob?Gn;H6Q2NV84Gmj=9`bFB zfWJ!Br8&l}l;M-9>G#KSBpN<#Yj92YcA^wAFMk6OJa@Q7{f`7B{Pqkc=1)a(S~PqX zc=UeTpcZQ@$@<5CIAO51T==q=v~l(aj@fU4s0*k?H(Y=JxBv8~6Fjkhw+eP4voWPoV=7wU$$Ug_4R$dI?;En0KmF^!omfj~ zqRa(ammuZ_)j(>!`Pft+>$bzKpVeg%sC%B^FB$ZqO(vg24P+&;O@5ya|5lgP{{MfG z-xqdS{tPOLc`>&cT^bPO{&<^ZgRgE0Q=r(N1zof91Z|B6(o><`Ve)SP*7=>>?wyWcl#*i zb}tA9NLi?_131T+9#O$0NwW`<$~$+iFHaL&_YOBVZ+>75Z9CH7XtT_gEhQT(&n+GG zD1mhEaDDy;vtWx^Oe8QI?B^$;4_P}UAukW}H21y(Q6S*MmMb>d3`7VC6`n)XD#F4J zv`24mZjnWQQ5lOvu2$kCAhOb-`5H7R^widJK6-p}e+UqhG)W#I8Yk9F84dF_+-H;IkCo35_B<`Th9u;Ahh#f>E&VV#r^RN-EVpj1k_gUy(@yL7f8Y9 zLcHwVB|Iv=xVIWB&y-{6)0?&-RGD{zpI{+gy0s;L*`HNk+(*y>*~wnwmSYo^no>k~ zpkRUW)f|a8(4Hky@1fc9G2l|6RYLZA1nNLrMI?o?Q%v*nER(u%Z8g0fPzR+rhEmG~ zA#3?_|L&tzHl5lL7FkTeJ1hk;X%xD*hXP4k5(@a_)>eCx<-NZgO0_9j7}6o4QmSM* zOv@a93ID@Ra`5F*n)eo12wsG`dR{hdL9Ph+8P+zh>_s+P+w4)E_uixF^0OHSNwQQ+ zg@4 zz9V-=At8uTP}dB4rzTFo2eEH5PkFH^*I{Al(nJ+>|P|0H*LuLI0~ z%c2(IcBmO5g)PR_mKe!eqi?zYXUWU^$P_6S5Jg@-Y>DG|ePmUKkv9xUThN|mFE=g` za;E|3nx=|?)5e3rh9ajsr?j>-g<4-Ww^udFpOwLbpO^yT+d#&@57 z{;wbAcL#oB2T!2kFF#xMkzK1b_Lj7NRa+{NF4EusOyv&`Gnlua2E>N9YsubRY0&bU z{)za*S?ZAdaRTQR)T0i$x0w8SET>m|MQ+%=0U#@5d2SX=MBvtwbSO5Uw(( z53q^FDo6R4690zk&-1~f^!r_v6)V`Y_Xb{zdy66ZORSNDnOI`zGe3$ z!7DJAzmCKXCm*rpb;zc(Lf!O>CXv5k`aDkrzxpZ~nue4_CuFjD!DEKAuh>;L!B4;c zdH_=Z8_3Y4;%!?Zg5Gd_+(PJDrs~I+3;%oiP6Xu4L$vyYT_vL$s?MQ>d|)7U*6lX` zeB|(Hw;7}O5ahP}>AA*#3LR=3V?dO?HPz=Mjw-e!gDNR6&`mh0SSkqCTwEY5E*?++ ze)>)WudyKR_GoL?))wY3s zNU2d+C2-K~uAm8B$a5(2Fa%^N#?Tyn`nMb4g>=tVc46LL?I_)@0JqCeY4nErkL zZXn{hxcV%JE#6XUJ-3ocBX?G`Kk40mH|pyhpa&kBz}8(6UvkVbiY_5U8`d1-1x`!# z^_5DEGfW`-b(<}J3p{A9pfI*_XzT1evOk$G_RFXn`-l5i^4gh~3G5?KK1mY@i`HYb z@5!j|H}V&=;wV)We@N$)tX*-m)F)_iQmzN?x4ynq+_il5~UQ#?{ z_Ge=f->tfHr~nE?(gt*i_qQcnVl2=?_=69nLyF_2Ufy$miX#fd(}dUbZI3i@!`}hV zIH{b0!rLol7)PUw>)uRJhqq+y(O{aFXr5gS#-3clopT-~sGi880CbHejcnOSDwQMr z{C#%ww^29JL7RXwIq|HDBP3%Gw`|i(0eqNrx_z+fO5&{6U88@u0!C4r;P0T##h7=C zvi5^jcU*#hyH-#wFH<}ZD>AZG+`W|@t~DK4)=S+H=ipacOkAN=hYt9H!T@?PO5T$b zJrR0&*kpH7jLey=A_msA3Zf15;RHw;Rp_4jA|p~rM2}%^@)am_Pb4=UZ}?U07fsSrBss%qUfNK?HV^|oH<7CDDL5-==y@TIk|ZUi0MIPQSw+4jkE+Dk1g=Ui;0$P_?j zSfw_9EM~z67-j~qky9>qfBn91`173#zQv9Wfh%~7K$`IGG1q6caeAHE|M~R&hMxi* zrOHO+HH}UM7jlx*;OJZdJ3U!-B_2m!Dw(H!Q9uuDfk`e3I5q)Oo`cl$f@8M!I!R9(nEr$`yuwd)Sz+>eN={N z%i!ucfvrbJ8Jp}HZ-KlIKH<|V*9nT$l>mNzVkSPPmWe_Yf=wLgz7TXhpEmO`)Gkorj&a@5<9m=ttr1 zm(DqBT`>XESB&BG3@n@uLFV&~mzf;$hHa-h*^8FopS{+&jKgskPs?=WVMe5EUBGx0 zMG0`DMOM>}>nL@a9NfX@8_uA*Smxe;dl_RF(pp(0vUjG&{$!HmuX}gHljCxQ#OOe1 z$)P5I#cDn?B}5rte_tZ|bL*~LyO2$jtkNCSfju)RAZB{!aH9lW?kb!S%bH{M_m~%T4 zJ|cZnjGE2Kp9pdPx_LJod5&JG#GazY%r=6JbTB`|-y`sy&eN5I6dXaT-eiuL^07KR z`{;c|dcRF>r*-=B?S0kV1(~aE=5%8ARo=t2T ztz{HrcT4oWi9Asn`(@OP-J|R!UK#8m<>30bc<}-WvJl#i&yD)?O5Qbp37D^jz=dXS zYnI_HCg8!zPXwOB-GfcvZ=}hj1yDgONjurjYvEJXN~SjZEGNwJr(LN7iX6)-q2CCC zAc>-F-Es$g->sIzOWL0X{&^!$hTlI|q{Moc9a7N?>*J%Bc!W%+>j$&G-Kea#VCtg` z?B7g=h2v1**d?`GJ)cT{-d^e%KCjfsA{V;I~@Z#ZI&|+qB|yk@5#%WbK|wrvkuI6qh69y z_&^OwhU*UH{_&U_AGP1c<1sky{5%^*-2g6I;R^tqxDXI^snL@84=C2-rOIUT| zRKX3bGy#A2u$?xAT%IlLW7gr%^fiB5b>mnes1QXqLnJ!0r&X??U5?L7*K+Wkf9+3K zoM(2@-mM6KHMmjoP9emtX-tontb);RGuF%klvjgumG<8_i%i^@Q-ba0n3L%9m{*!L5eR(67`~uNXVA)Y7P%(taPLun?D}aXIE;Vbhg7 z?2e{m7$mbbN+TusEeXIb>cD=7C-%4RSMsobUZn_7aN`^!=J06{3B=?CK)g=Hrf=V` z_)Y>CNRr~&!_&$|f;Rw6i37yY>6!NJ`;}+f{phZT@9aE01_zn~5w8`}+w2D{44ZD8 zDBVLtudXDO(3|2N9TyCCI)d7qPSllBQy72)MZ3-D${rOcuP@xWsi(ss=vF_ic)Mf znW0LA4;4he9+lPmG3pm5>L@H@H{3yg)xj%T4B2OhNwpFzE9M8W0&<>Oi9UVDPxlSO zR?${VGp}odU#-esbHN{ zY1sXrD*;)6@T_f3O!#R`vO}zyWz81iedBQ0{ZbythcS*5AvVJwT&;W1ZD0G9t!{u+&HA2?V-pucgt;w$RPl}n{^`y?qo!Z_Yz-KfTh$&sL#bX$HFJ+ zjd#0lFbSQh>F_M^62}Z){^DlLVj_GdFq+MkLCAtHmhhHP$+1 zJ>KoQv5k2&OSpdS;ud{0t#|5qPn&%|Q;dCo>Yg`ZVrh=px8uDw8mSR026vBgY>zs#bd-R3W$)_sIFaNyKqzQTzip`!mvY>1s>Zfb$$8dD+ zr<$A}f8If)JEc%4k;mA76l`Av#OOrKI<}v{-<#g)G!g{lkYF{febgEi6rFP9LVMkE zdWLw@JFP}u8^9=_=)-4{ilitIFXD~BH%{3!z0_;ec9mLI!6&27eK)`@;*H}K<4I4s z553ZC6jP`?_aY^a9p&k1i%`d(Rij+)WYiTMIN)`!J;@NDEXP8BwK!hev3HA}%!mJJ z(;Xc+1eUHGnU0=CdbHXOXJ$7YQV;I)O>cAIcYZyVj)>jhYHSGEPclDA}4jgyph(AaQGn!TPMb33mpR8M_vusnSAv^T!q8goTwc^&WZ-Y=ff?ycl7gAiYN<$7y zo2W$+asp3v5a*d=K&wkT3GkcUs9DGn>6(-RUQBG6IVBpoR%!{z=HS$)z1=X10(Xwp z@zEtqbk$~EX#x0!3h5zt4EK4%C|TGjZ_5gx@LbG)jY~_bTXY1DQ?;dj{nw`(R_(e5 z!H>o@jG+l*0=ro4o4v;d9)+K77!^wCRwz+T-LYISPl1geBRr!c_wXQbN4E=X)Qeae zmSWVNAjqVkq_z+f{iL_OF9~*4%MKzZcXJxH8WT*Yxmz2BWh({+d$NcCv zLhx*Vf;lryutL(4#?qaRnnz84=p&b05Ly7wsb!ooiW0}35B_ssYN^4Woco>$EV-;P z`;3xDNeO#cpABXE`S|wfm0_kIsHmv$O&d6h;H>tp*)`^uurnCNhcf;z%y2v}mNXbM z2S~H4*3b-SV1Ysi*?aO))CgwXcxuixm@C|W6j02Dqn{f8HO5x}?R;?UI9NBFX!W%n z=V+H&8(>UY>K+sA7QSC6fn6AN!!hs>Ynw+I7Ioq}CW7_oJuSvnJXI6^_0K!CIwdlo z#$&28D154%Msg{E9maYxOYdj#*Of*jEQsK%Q9>v{DKYbi3D%%GrEEJ@$^Cd`hTaE% zo{*x@IkZsI2KnlqBgs$8u&d&H;#)tye*bjCwZ|(YjUxD2jD@!8{?N;6nXDk>9L)On zAD^ydLA6grJXmC7%l4hIQhgvY;_$b6>X3SIoEa#~kO3f9i|(9uQsqQe#nT%9x0>qL zult`$|Np;eg3HBF?0ESv@l0hSbV0g*_XZN$pOkriDfzEgrgJ2TpCNy*(Mt{mZCVV99a!@DW`w!bk+D5zmFdyvyGKUG2wORa1ndlXAlA%mlBztZK7BXorT5tL zd0Jy|i!dAGib4axr-PK^g!8k$zF#)I^7wMRd5ACg^|*RNch`{nhIa>;D{Jddu2_#CyOwf)EwJn~1Z>yo@{MQ{s(>H_c#WB}B96P8(Y&!a{ls))^NJ5t)LGq`z)wAKUQkfx zrF#uGou)5PKc75b-C;70sURGY56HBZYV$GZ%bm12>y28vFg+W8|FOe_Ok&GDTo#-5 z$T(Bt4P>Q>lyOsV`owgC1q<71Q445ivJ!Bn!VFmx70?xg(k-Ybb<7>8Ip2Xc0lTuX)Dn8u+*Vm-#@y~~v@cNqI+2PS4pGoG z3S0LF_ld!tYSerU$FmKOdgi{mCBb1uoz%xDmJp}12I%3e9847F>K@ah=KSr>c@MX6 zX)%-lhUfPjNPq*Ih!b_wfb<(uOefZ<2&6AxMT7;C0P?<0n zxp}C2@F?T+pI$Dk93^Fh^G(=%n@{YDwzOQaXH(cMZrq+EM?y?rQ0*<7+*mgJ#&jZP z))*&_lQLNxHPE1rB)oV9W44rNJi4Z=(i+fpx4;Q-I4- z%q*^(!7ZPt{^!VIQD^8W{ExqGDhZ!sPt_lPc-y&u?Mf{U>&R+JBuR0Yu}fnYS6LP| zuNArc7B{dSUFvVil!c0*w1!>Np}Ebqv}TA1(3n9R-U3WVHV`SUF9{{$q!NdmbrGB}U{7*~bu2=rtgOjn{v_fa}N>CaxtFCkPaMd~O6EMrzK{jU4!9 zoc(`seLJyU2o96mWk--3e$WSWjReg__#o|n=F!I|t`oI01ggmh?xh8?A^78xD9ZqG zpDpb-@z3J0zDmhN~cn& z-#kURFg>!t*)l#smZ@Rp)wpQBrU+pZ-0{pXRZQMV7nuX1`#kY7ap9(r)~ z2IiZF$qUm%+u?06SP6n}As#jE!8 z5z4*jB=k@=^^TwYM0|29HL&zvO4k^mbmnZMcx&+R891AI2QZ!3ymmci0-;iTZ)sGp z_87cu4Lw-vO|$C@)OzBAy#Mm97azlCcq&QM${Abdb4H=)Z@M=>F&(M#gHO$Wg5L#i zNv=}854RP!lV6~un@{iOBZtFnc3GOj7`=-5Xv$gI%pH^=`)*3uEY$n@b>c)#u1?Mc zKk3!|P}s-!m6~#hIQAQE@P4H8t;_Hyd;SW{bFm;|`oqgSAqZ=`agX@KbRwAZV7DO| zGiHcpg!H*e^WoK^>?2UOppGzqP8Z4*Dlf!bt4{M5D6>p(&t|sk0eC-hIl5A-7N^v# zkpuEvqv}I&lw*;+>k$N|BfAH#1Ww?jC1)sjwiI0csA?)oIZhg`#`z zbXKrn0G&1}wHq7O-=I!>dqWe>c2(`s%+Gsdw&r#qx^d%rVLEbuZB!N8XEm1KZYXsvmB}FF2}n!dH7Nnpi85Y^5%MM11$>9YrGG&}E*4`@4m|wNmvRSELKl=#@)1WcqEFvv} zx9CLfgQ8N%21A0b8(H<&zfWDUg&>UILAtAv5>{x?vLKXA^Y&$b!!yU)ZRJM_5{e~W zkPB62(z1G~?1K$Q*tG$CoYCqfaG%~%!amR&u$JXEeCQ1#Rpa~p`}pV36Ui8g(-a~B zYKDWics5XU_Zj8p-rDym=EFM|PoRqG({edXP1V2)VoyF_iHdhNryEPk7b^Ys<4A`! z5NPx%zBFShLlL!qKpA`jc}_mdXbpD^nlGdK7Z-h7!Z#aP{jUf9ko;2~_^HsN6i` z{TtSiiw5Q-Gz#}vttP&vu@)^!-9$QUYGxnjx)e-8vC;``cAX0$%k$Kb5J!$wj z))dfNNQev*gjkf+e`ndo8cOg=wm;z9!#Z=iKt`#Q5F6BTud#Y36R!{xOSD4UQ-7*0 z0I>nQ5Ab49$@m5W`!~6VVVN?Z5#Ma$Xz4s$^BeFU* zG}RnDMK*8$e=1TtHkECzFQ7WHR^uAoY=}1{fvi!za0y$ z`VAK`^0s8j7HeHHB#+H2w-*`w>xpB~o;*+0<~C;~f5x~*M8v`$tYm#=U0X8vK8^&^ z=|+sffS^#BZc^eeDY^RSzlP7@3+(2|a&=kWu{Zjx*g&D&RHQU_i3^MJ7dZXfA183l zk;rnx(dyK|1YI`HwHhs^K{sQae;@i2d1n;J)$1*Z&neb6lg$LeYKybX8}HHIn2t#6 z7DFGhe|)NCwt&@&?4M+TY+R|{%u=|@fOaN0Ot7nK#Ad3RM}X*`KI~!8^mc;X^_QKw z8pt&(d(9ytu(u}uV+rT1fOHw{+K%l|J9|v6*bH$NkWoSYQ~a#BOR`trHg_m?=D}i( zSdUVQ4K5m|Dfl}>m<_hD*6y0uzMVN#f<%~mf3&31qgZp+?jGt3$_K(?b75iM&YUW> z4mb-xl)^|p6ftUQ8fh-Xs++NY7pgyheShNGwf+8Tq|lkFcAwTU+Z@g3y@SAmk=pJW z9xQmJq7+WsTK6K83;{+nFus z+ll+atb|W)GW#%fLBzPgPnKU@Fp;u_6|K!A*6k;-BRyk?=2~M9I9%%g^iutw#>j+N2_t zL47ARmj(lwSN@*?1r{$_+l8tWR@RqRG_mP8Nj1-GDv zKj1;gi8XUnQl`B8G9sCRQqoQOcTjykkOcdM@*y+$Pva?JN;AL90z<;*o@TgzyYId* zJuzL|VuF5CGSJ8&H9#;ys%XfgQ8BT2N4_si?kC$**k*a>aX!Z&K_F(}{IjSdN$D?Hqedr7Q_8&M}ZxJgYUZ+W>4n#cbSA$qUnynYvp{8Gk+KHOJ`BYe6fU zls-oVzBMe~)SNC%Pp*dc@u`jiX+*(mo(dmOaOXyru^40l2$ecTD>B zpro_Kk}iYeH_o(YJHw^l{n) zQsK@j?}h0^zT=T>n6LsvPtgW=3)pz@-qS#Lh07PF2PNJ;rZ6C<+$RCxCL;PO46cbN z$|29Y`;`mRlM2&*??SFb_{1#b(9FH$@w3T?R!3cFw@%+5Jj>j#(^?$_+{aQE2}84_ zHIipM?UL6f2kVc22c7$0;7<{!XOIL^!~oDsf2d+^Q-|M@jYiNP|9j+&M;^8KkFivP z#MA8M!dOO5ck^E_Omm%xnN}y#?PM-FLTQRj^2QpaYhKu0hx`lEiM{gyqSL2bjY-zo zukWCTQ)w{=2$>Ckn(M^g39S~8@pABJ08U3Ur>Nj8A;#Q)HoV}`71S5_Qw+MO_1O`| zy^(UVb~mw(g=^jH-FoukV$UtL5N}-Mz zU>*w)xr4Wl^_ko@6T4bB@#)WhpE%>-j2)q>Eu!SsIO zjDuRLD&ZG6ST+skJ=fv37La{*=O^Qs-sTB?$I~yK5h8nSh~|_kG3(M`AfFaCeEe;m z;04&I2tL&(X@zb4SgNACYx${(ltlD8Z z^4)o_UjsP^HBQd6KzN3dRs|uZVjHgVcI1p_L;kl8uBisrk_$3l@B%_bR9IoNcaQo& zzQD(;_;c|xh9$wL#^%;7-d^N&yUiJY;{>LLWH*wgSi9vlp$rsqoofV@0vFz# z@gIMj*gFUV!y+jVOc3(fh_cVPSlzplclGffZ%5)dxaAy`6iZfsu2zI5(2e@;Ys|ZGsu!kzpWjc!0%>6qTk>}>gLSxhVNkc&Ur@z& zp5re}Ct_yw7ba$7a8F5^meJf6R@^tKg*y|j3)9aB4MqEP^48T-J!HBygMvXJvS*+0 z3hA=N^kk0eJ{DAeK8t;FEj5zWR>57yB>1>BdvSaS!OmLVBy)N7EN^`1wWbUe_^_zrL3Cmx}jNUZj-UQbjs%-0Waec zJiDL$#yTPMx;w<)Zhbj&R-aTHuy>4nBV0}l_1n4}HzGkXoR z)T=_rU#M3(otpQHd}eZ=(-OIVN$y%82=rve_l4=o9xs}w94e*L*)zH2q+-q5PQs5P z8a|l*yb_<>^9QoC^wxX=-#Xwc#oC(3+(0zKbb~+1YM$R@V=JZVhnt8{73^iCBsL;U z|Gu$KG}}QS-`W!)w-l0<5E#6=*ZWz5GuHpTQrFX|RQGwt2Sn2Q-dsL^ZGjNznWMYc zcjc+6`Ggv%rQt4nJ{n0hokG|$-Cf-NzC2a_^M6ri>;}IvA<3y!#KM&*Q=Q!%1nPWx zn<~AnPYqGcttoXZzm|fRI+45P)GXLBiEKUPR!8-!Ks8<}PKPGVb67GBS#vM#UWvZa zl*h}R52!a4sv#&JcEYZIyuH_OFDMeFV_M|YG~458*9X*_64ekCft0mMBU{VMFEGJA z%GBmpVo3fGs8=ihiy^`=TSe*2P_e-7jf;^`MEb~tyTC7O2 zesfVkb;X-ykm#T^pQ!Bz)SEihcu(aca{Rh?v?6s19th)mpuEj@SOn@#QD_KiWD;+; zZ*$>0*yGK`qmD$jjo8DJ1=aZgP1;aWf7hO(zhX~h8z7&S!f*5r@4C& zr(T!$`5t_`F=v{8lN8J#0`=yuAl_3u)wGk64x<6dlx5?$*kRm8dz$(14eCW^m_BTfzT zBLH{zD=gC=Tym>o=Gnm=9@`Ea)T`Rim?a>Ld*4;xWR`V*(w-F?zl{v~*Xz@{PF|)JgGh{AG0ykv@iLL(W-SXAITemdQ-I)f~wXU z)Sgs#kl3vzpMm64PO|$UK22EvfO=J$8EOX}*=Ww&5U`5?Q!8>gqS6yKn( zkUTSp1#EVnSf-gp?IhN6n)jAHxletAx^NENcZKNdxlTwdw|KFY$pp-=7mue=M1NH= z`U?tqQEC40@C^6j-e}PFy-#J88s)xMC8IG*I7*zi$4;3=POj>u_TEMXmOMgGSKdB< z1rwfW^x-~O#8q@bpF#olzL`!0>c6g#yp_E)yMnL`J`LYY1hov>QU*_Z8g}vp>VN)q zV^5ttCb$$MuR!`iESz~P9RSR|{Q{^P5&d(N#x)GbjWsv6zh(XGJYG$+Sx>P8C-sm?-UZPnL7wojUPd?BM%lvADc+UOkoB0ju26Zt@ zOYp;R1)ma#g8Rz1GgEJUKG{cqfqK)R5C_kroF#L@XQj@)K6+*$=PcW;hkNSEjl<%_ zJGsNDB3iaANqx#5h_J3X!^8dG-&jAyVst~fq?#QTc9xg?bZq^3>TYv?Sr|O8oTE#! z2C6ba)m6oPDrK-+9;$1cP&oYl#{40^S|hythG?}Q`%+~{b$pz=Ie)On#?voQSB`>w zxF#W`;EUqrw%(Fcq?#Z2+oP4<7pNN{Ar}QXr(@s>ts9g(`NVg!vizzo1odXldmIu- zNW`Z&Oi*J!e#@scu;sOXnw3bl|Nf>~Fs8%H&op)er6X$za3-HplFkGzbE1g;$Ccpe zwz+e;unAs3G$cKBjNBfR1P&YU_ zLS#iC@TbOPRQ>w#Sas_KeAgmA^{R2{7lP-Qhj=AqV=h`i89FzAH;!!C2NZ^&u9Uy| zED5i5IcL|Ci%_Ofa#=E3*ByhpQI{aRNxk&GkU`E=ELUeA*EY6}5ngP+>Zgi9RZ!pq znv#>xo$jSC$cMaD<~9vw`>TekIHI4#km?R!!HRP`&Z+$3pFu=d+8SO$zUo1XH~JZV9|N*i zcnsbko2(FjqluSy@ka&CubR+e>Y|B~Zv60Z99uHE6c#tY?qFHbM*lgk$o5ro1(H!{ zWgT-?cjK;Jf|^ysg65xBD)*0Kf8Ka}vw4m8F|OJY zBlA%kCOs{pV~_K1zCqoH=%=>c+6FgJH&Pzu?BZr0I%-#bG)Maab)~FiEU3|n;9d4k zlCjSTR2V_4OytBc_q}Q3jaSMi-#}8OypU;stlP+1A^)JTTB>1>!_R+Txp6=)X{AEp zkyB#vSYB){kzM#adTD%tx^j!<<#@+(p1c-fLRGN#f$tEfGJ3SpUv)gkCwcB&(?ERb zGjH_F=3Vr&_}z@A8l{;(`<0L&ePE++V=t?O)Kg8f`K8hBlAkwv_D0q#)r$z=P<<7D z-|^{!M4iAo@ldf|Afb;OJ%0+Cue2EXEG(Zxw+G%gqK#jyQr)gU7pUa`)&BF!0VB4y z`<}E@8n(R9tUk|ACx~(prf98z>ctr1c&+f3l}sQpw5hx07Q|I6Bw*_!Ki`DpPX*kK zwNhG!x3GJoXiCsne#t$F3ZAQO;F+~2EmH!l(Xd((mR zpZ|+oTO!@h<=588tevIbXCb>(HEl7lV4C$U{^<$o`0=zU$Um5T_4+UMC;@ zrL}E1>r4I9ERUg@vvB8pC^CLz*aosOeS9aB=y5~MfBP|c@=Ipj6a@)oqq-SJaaLslO0$CVBf$GL1EIcbGJVsfTOU=!y zfI+$O?UcQrq`_aXZal*+ll^p@5F18AgdY&Zy^^f94qf?rJ*!WDffM7@R%=EX zuq63#g$?Qwqk18vLR37G5ANNmyDJ&>0-7|}=*_(v_G5F?H>wxvJVe!%KNi6~CpLxru29fCG!Cs!KBK|^kCFi&;Xl~vVgBK72 zCU;;Pb1QZk+poa7v9o%cUS-N&d0;@&PHP|#V9Mj@vs+PnYc>^vsy#O!NKv8g=IUpj zxeFfV0LLkhW5@pj^`f6B<}!)r;3btN7$7r}^;kAi!UEd!M6YjuRO<#T?DLaSVUs%T z3?!R8HM4B*O2NNFST9al;@zI>5Xgu<$kbTt&_;c#)s|~kE0!QO)0xqM_fh(o+xp7FEPs0Bc3Fq;T3um0&TV+lg znz3A?(*eW6>qvg(E(f2+p#J;DA<;6M(DDW`U%dp!_DE;gIAgkLZG`HdH=duHbQ=_M z68FH;wEaMTM(5tA*3#C~&G9#=8%xERz34n`zeuazQ9#oCJfz9QiiP>_O}k9IR6fg6 zoLsqcryHIQ{`6&eYh8Qv6aRpE;{zG5R3Ex|Z_3O2h?X^KSvzDH7()-m=_?<|I4Icg zF08WD-TZU%VjI(nY!miGe?YzQfs9uQaKI2Cvj*#buG9|AT&P29@tkp_dehP#f;z~= zNOP?YFuvKa$IAgvfQ)X_MtDREP&by!dXs~1AqA%;3Cd<0;LHx{nQIC&%^P>hm{Yax zPmme-L^!+2xwl5|Ol^-6=HwqY*vlSR4~1T+;#Hj|Ygtu#Ej~D6%`kjkky_a&l=>mN z>KN32N5@(XTcelc9)sbg`f-C&X||P>hI?+%+6bOLmlVwN7(lj2E59-qjgJ+uOx7XQ zWwn0#**+Hq6#1}El6kBK`T})DJd|2|fD|Ly`F%-IY;Yt%KMM8kwE)z-!#WEU#MTpyQ^C@eUt8;e!_ewi|_?eojAZq4WL`K&Uj18-#n>y1NfthHL- zyERU2n7?*u0vro?yYBh_Di;10)D2qYS8n1DawAl^J%LtA1EC&U3NL23t=>4q#tdeE zr~jkv+IB6wZR9UWq)3UMqYL%qOaj}P$^88kcOO4`X=7m&7)aZF+Ae5OWR*m*82@^i zprW%%%?jd2p3;zQ?QuTyFHkR@@|=r}HmN3V-dVxdt?oP&^*PRp`AF60Z#OC+ONU-& zgi~1pEf3*LeQwmjRHAAA4C=}a<)%e{6(zXWD%ulj-&)9?(X?N_NTI*|e&ssXO-log zYMf(;yw9ekFZ|!mR!@aFP~BLpJ()pd@?hI!*+=-#%90v`CLkxyux{K?Qd!c&N2ZZbZD&AiGm!JpU~hRc#o+kPBh`-AF6y4pOGaU2tq zHGDFLhL^CLgIvu!9n%$1-S~umKGq%?3k8ShwTuiZVR`;Ib>=TvH@;!D$O~J` z0JGBAk~w<%D%df2dp>T$H&e;abuj*Fr8FuzM+dD=?;Uy~;h&~;46HW;E6A6h^`ewE3jEkWQ{BiK%-FO_Z5cH+RDy*wNwC6xqG-iC(>b8kYV=w_FIU zNh4gY5q=xmwJ~)E95>NV6k-m7M= zh$^=-l1VMthdvbA=VM;?1*#j1rF)5|UV|aiX8=Y#l%#mViHvbP=6m-@>zqgx$-LNt zp0E(o0~8`8z4X3+E$tJN2~<}aX(8z+FIs7Z|9GisHuv7F7)a@(b4b8?WzumLIfaN( zZ20rA+o7G=SKGSc(uDb>CSI9zeACp_KwNBPi*}Rnu-su<6%P{a9PO`6I==XP_)0`t z2hSJ|&_xLQa+@Z^zn(tdE0d1%@uL#33~nET#(^vWBWlQ@Rw%E{rn6Cu&YB}8WMqnCBR>|K-`1tZ?CL;- z(2g$XFqD=ACFao{GyCy9*DLpzGZ6)^N(s0kz;vV@>}m=}gRkUA&)r|3Zq%B&u>HC~ zqoNweAR#A|y-@OFkLF*1x1vx2sT!+gL>rn%Lp$lDV*g79k-Kc=k-XRmz0GqEO zIiUWf(lfVN#^mFB4S>3G9!geCMk8Ae)ujv_FB+#tA7i%T2fR{jh9ymNP7YfIUSn;F z?1iLI2KVD3?QeJ9AjnYC4g@xlhOD?HRekXQR0v>hK!1*$7mP_!Y5_lB`ssF&b5$_#|6FPngz8d9O0Fs>C!>Kfl@eQggSG!2>HjO6PTwn{e zMXu6#r{ony=mhJ^`G3N{T5OgHNjg)m>YxgL>P>2;Ch4SZ-pvsC;zZ5j)5UPh=&mTK zwt_#@$6}TBIC%bp>Wz)od8wK-h|@}?Y%jAaZL(pGjTvKQ&!BE-t|g>taMraGYTrf@ z&0q@PGX~aRr-Jie{=%N-e9~S&FQ$fXonsPyKPJ`m7^jSYdmJtF1M13?^f2k@yo_^y zTp@vg#()8a{-T&ybqe)Yj$>ybxV9^?5jCJ1QhS%)(v~a>sp@o7`O0zZi|se3=Ll?Q z(H3p05>v*eB_8%XdHx5~jr`eaS(O`TABPy+fTKnWzgIH;)am{PsBTnd2`htEbWv_= z)SV(bc+CDBdpA8DdIYK~r~f^=1hR#H0YwApD>WwA6^&2QJc}>Ed)k^vcWb%&a=ZRzs{yTrHz28_$xE(#N2gj#F%2dD)$R^Lo7X z-k_n4R_>WF*G^M zNh$gUpqkx_CwZPu`U}*ZPWG%ZC#Iqhw;9gY(SD*c?od0IP?6x-AN}lpfx6OFIBSW?yP#GO5n!Oc<8}+2!InCm?vY;E5uRhJ=CID8 zxL59_Nf1yZ_5@XdB7JjdhR9pQPU;t|lN zz2BrvBu^yrJ>r-n)VrT#*6;uL*9}ytx-{_t!Rq2gb=VH+$kFNVh0pU7UzsGHB~9O% z!sc>d2ks?xoABnz#(nQc-_##aSMG5W6oW+*v_Zpc!{3c2=G3Yf(Mi())twugMXMCs zyG0sk;Kqtk=D;^b>+^@!p3}i zMYbX7mUeFP+M)!1u$#(k+B_76r;1ZJ`OVfzFC&Z$D+lm>N^4Eo}ftX^5Do|R4I z5f&aP9tDEA6ai`QB3i)KshtY*D+|>x-b*F?#|2D(&jtfhj3$IaRVguA`1q{lm4)iL z05a-JM*cP%D@N~WSe}%neF*V9B~XC6GWn!h9zOFf*xnVfG(kke0a_7Jt)6b-|9E8$ zdX6eKUGbJIra#Z*aW-3}sL}3Ik4?s}>}J1caYU6V;>qIZW%m{X_Z2ruGoz}%|ZHvVxI6Zeg1n~Dax! z9Y_U@sSt``?>vgvcS98Zy2nQ=2O#|zVdb!YHGOgfpf7Vpd(8?mKLpnkKkEIww2e_xqtY%%w_ zwiS=dBo$wvF`n?-BP-JUNt*)IjV#LeI}rAXV5*=lPEhuv2}Or!jEX;_x{^j?NU)cG z1nItg;zz?}G8;3LSS;WH6-x6B#kIkq)`DcW29;Vzj-e-u*5`@fJ{}vtvh6-E6@e&# z;Mw#rAz2v|#%gkswG;6vHN3LzK1Y>=)1=g3EOqRZb1k6n@u;QPH!F1`sOFTE+F)1F z*-}lQpe4_EU#%;(6Ak@yTnVbQH}3&|Y*ZJ~OtbUe$!7tP2MIi-g;&1aXTg=j_ZGwj zRCE}!XR!Ce;a)bzJQ~To^6mcO4fA58rCO~ZaYhH2Z7V1#Nu*($fmF<>VUAXJwC%}kEm{h`i3_4x}o1^18D#Utz}W^F_csGu|MFIo%s1Gw<(fS9|NpU z!$5FnmuZ`!pk0mwVqV#apM%PS=z)rkiaj^OvP?9(h(MLgIL`0B^H$#ti_?iSey(mB zF)$4rUQ?wO)CDoPTkIt-ItH zvNecpP0rr%G1CbD)vCwOcjf8i+ANfN@zgBZ>QR9DY02|iU z;!U-n;#Cd%5lAiPFwZ@JdgXC`KA7F0cWv8D$e+>B-!-8cbG))?bR;jYJkGyhREVmq zy=`~rX&`tZ83vGs`|$C9J?<;p=PVV11q&dkAYx4ug8{Gf>5i@SZ)~5-|Nnoen_#E& zNC;Q+j_|Nl!nK!uGN%VY{>Pv8()9U=sUuJoK`~Hb+ZyH&bRFNMsaeKPJYsrtQG7-e zc0wIlk&&FiC$lYT&b@gC!F-rW^$XGeT!18;1&L4N7-e+qCoc_ue3G%FNc+Pq{9lm% z_2S_Eh$+R``%e=mq^0I6F=-bPxb20XcsNJ-!F1!(ftt;j11<%zGy$#T7E=Ip$=pxF zU4CI&H`WOfk~kh?Qr?^q*2;6IH5xu%%MUIvKbUT;Q?ALD4@Uip!NjtDWk`+DAUyWp zm$AU~%6s|2puNH@0Kj#KAZr)ALCTsmq=is#4R zCW*_#u&!U2UfiLdAuS_FrJx=aFv2UY5uj!7yN`#9{U1m-mZ^{Evr9?h;Q)dNam{Mj zaZNPagQrPgdUY*zP6P}=67Af(BC?PJyvF50V&QG$;bqK!52P#6lzcZUm06vn?|37M zgcZ&31H$AvVZLgqIYUB?#afBPtVM)TOJ#ujbHXnvKR6ZtK)O=v7Hw2t>b7E1!;%E1 zmc!?Pw3LU7pHGCpF?2pJ)5p>;2F%wYxf_)-T@q`aBAfo6VE;h6u}p;piLoKNW$bPZ zyO1;&p5Rk|1B&ty)0=M6Ga?^Y8v_N;J%$9a`&h;{Ok-;L^N0KA?>81{P90lED$qtH z<>_&fDv_|*M}HX65Rm?JWtF;tlK6zUjWHGpN(jL{CCA+~^zL&O_|KhXibE|5!&s%J zVagFF^f7j-q2A>3TvX-_(&S;us$mP#GPD{s<559>0|dDVr0MSuDSsilu}I-2K}rVs zG{-hxe+|`L2^8;P=1xHR^To~m7ttN&PTR5l6V?Z+Zc$vWP%*1d$IHJE-B_f$A)ach zgm0F?!NaS(_c~J+Szwyakmik5%GKP8Qz-wMN=&tB%uok=Vb>kXE+E}lCNRi0N}4I! zG+h&ap~__l1keHoL3pMoug035WeOMMrri^7&oLd)HiuEUA~{8$`w7yGWr7a3;+~KeChbAbsS=Q`MAP1Djj9xl zDRY~sHW%X<{nPZ}api}_y?I9UMQS1kd4phoqMnD>0f4RSRj2!eOg}-oBU89jZntx3=74=Ly_sQi{&L7gDW#X4p8z z{WFr}oQ>nE7m1x9ho5QO@4sJ>DS5f4@OJ`(+Y(XK)VD}mF?r-UHv!U>++_bp+m$ST z>3JK;S1Rnl(YHCwVcx)jrOF~lqGUE@>G3D?Z;li`G@$sxIH<*L{*2DRQk7Y#C5JHb zWGhVEx}LN`jSpQBp3a56TlxBATHiS$*IQY2W=J{#Rl!2V0qqM0p22x#?^OWl3Iq2c zXDNl@FKO913!W{GA)+{`;p3eD7p5zJ4BUgki81$5)^ZD!7ed9uG&t)smcwa!Qc8K& zyf`+4x%H#5tGL7G+Iw5-+N4+@3+&$5u#+rG0!j{T->=f!Z~cZ)300EkYp&;r8{9I;JJ6Q7hSXVq4>J5o zE9$cqNFGENL?v_dh?6`c$99emo1ke^082!_{Q9K+{A|F}GVP*nl)zSdU9;7MV+9Fg zIqnY=F z1)P6*();i1=Mrc*vtQE0T7fEmvD6!UU{o1BZR(@GL%I@4ZNXr?WfhwxrCHU$F5!P; z5+63rnEwAb{d!~Xpl=}qK%F3ZIR+1=yhF0IA^7Z!uwL)fVIqcwljNw+Rake%%#QJM_L)oF70K)PfuFG{FMmCoZ4gH12Aks6~~Fp zo^(cw?OpMsL40R(4sxQSF$*L>nSA5M3J%c6@Heki8(?dE2zWwB6Ji zBwkDlUZt*-S5E4EYX|f6^~wRC+11yO(4u_0gE8lD+dt;NwNG-nlRPc~MU)KZgw%@9Xo`uug?h-W6oc4sJY z4eylM@wu5yOSum>HnR*~n0~o}sp8fbm`qpL;#R5)kTYww#iSnHw2XYmbR*tloHA6T z2Uzn8a#vK=tgWz7T-mhcct>>OfOqI!)><_9w~(1>2+(XfP}jO`&ddX0~_ZWe#{EnLzMONmj^Rb|3W@U zoG{=;aP=Cv6Xb$-!S(1}gw;G?`t1&=FiXs-s%2q+@=mnEUXigl5671d0mS*sXM50M z=`TdaU>L!?htJuQ!|vC)xrLyB3)+c?MeudWQ|{>Q3$s zkmQDccPXXKh?Q~!l5S46V8mG()=H6GRr_~L?uvJrd_){U*>jXZ;OOCLv~|Ac%RZ#} zcBMW8gpTDj!G*;S6rY=);4hfuE-%JWZqx| z&PlR{FDs*XVVm{(`wy`MK`Tg<9Jj75#GC$JF65* zg==HkL*a90jV0H{`L>>qRfpHvg^#A2oeiZ}3Y^2Sn3X93Bzy*@7Fp)xi~aHb?FwV!G*)OQ zuco1D2&OZ*;%3Eyf5Yi9*$q0bIz)sq5uG$K*$5KPgVBp#+tYxcfGobZlyuW?D zl70c*9Y)fm4dgPyJTWi;zN8s`uKPWI3D-NJ6#5NoDfX(da<)uNoNL{Df%;AJP{4Ah zq_yYfnoFZN<8Y_J%)W*XWUvHxs`tB7(@G+uOR^MBNzc6n%DOUQWlQvfetKAmZKFx^ zV=iTd(ejc9z{GB2;I{qSul%zTJN@T>QD4C+>xy7(5*&UI$HbTpZnVM}^tkB|4(Y~O^5CvA1E*4Sv*6fO2zHa9o09V$(){TO=Qtt4Z=C^uXD60o=2(Ko zAvQgfk^=VhW5@N5=*Hn5aHw$YYmQoM)#V3VJw!Fgzhx}o_QE}SF+F;d#d|hNgEzq) zWAUEW(!5w-1a<8VOn|o38mF7ccr{JV z*u`by)Q95pX8Z#nJ$k`^J>IquC4t?;_t)Xm8dM>zgS}1|(DX5PeF3_$Ys>pK1J(ns zZKk-`eu;%vuhDIFQ+D}6bYs)j=q{((W`hKZ+C8YQce0$pY(mlQ5b2d&n_$^Vw5v`F zfjV{+ElKApJ*>@Og?B_Zw#`RnHm3+J_+W|pn9%?epY&t%p8O7f>BhcA70K}QVOnzD zqI#V%rz{KXEp9r^0}}H}Zjf$WZRO&$R++Tp)9^F4Jqii`IBd=2xMU}rNVVu^3QP`M z8P_bESSSkPSvCz?iRtIBHgN6L9ny_e0wrn!JLKmA z0xRk(dx$~k&*1Ji;aWM1e&FV(970>bCqsjGVr7|X9t&@ z4j=4rz^VJfCO=s>BV>VTefpO?Np(4TU-*v%JERU;Wq9@?k2V6Vreml3Ek_}y8^>u# zgkVcJ%YtKn#HOC=SSpi;YcX!h(%vyWc}PBz%T%(N_ddq~C1*9Q*zgaqqcga;HJ5;N zLtJ7dn4uKtR5Y_Ga>I!?a1Vs@&Q1K zHx4))n*-l|$)y=45c;W(5{iu)H!b9W>BqMl2Al(b?pqMpZjbwxJH)S>*v%0zY?52EP0g|?|^U_Y!Jnf%8LjP?*Cp6%SCcecO2D+qWB=21(Kd95S*5HOf+9eX~IC8aqXQ z?v>@wPiiaA54&2xbG6hA$2NNJ0ft;$!FO$!RSHC(ue|Bt=6k-V;l0^7yj3C_EA&c9_?p|Ek~o>{rE1MIP|ekHX*L5 z`30k?n>;`u`t;=nqNvSR5PuySQwqv|x!D@vP)Y%Hvn|5~BE4aeuwM=5xZuu#(F!C= z$-Xh+EoU(x{ZR|;rXU?3p zwH)g^{DS-Mw)l*?kLP~*`39XF?AO7BoB`AAXPr{DtjxFPkq!}N{pSrt)}jA@XR?+{ zlAK_Z)TGUcbsN(5!Q3x5jVg&1k zaD$J_MjHUdv;}m-)0%Yr1AqK&?BJ^ zc8Du5MwRvxC=O~2tLBa=TemSy^Z|F z-DavMM<%v>zqsqewNtaUNtUM{>P_XO+K1*FE=PdCsti%@kJ=AtAX>I>Y= z4p%h94+%Q8WpiZnuqG%uq#RwP6MJwbg3U*}X@h)k8XYT|?A^aP$}-f+nb=r;TDjY|(1V={FHUb~f&N^f|2h4;n>T?vRFpq_fgk7{+wjPyC2P!NWjEI7Bt@e8zF}v z4#cgo+#_n^#n+An;GY|^I`$HyAr*1|v9?K?Z?$Te*)QJPGs_lyeJG^7$RybObsuE1 zDqD%W;gXenn@N1jb7wDS-LcNCBvw$mEpC!yrKG7HME;FNWoPLg5$EZ-0CQwNAF2GL zxObR!b(TgUy0mg1XQdptg`7>k_m^0hgMvar*sjlwJFZO};+ti%6cv=EUthGaCAr?H*HAzN{*ZGlJh`TJVgvJOG+R}mhxpWeUg-;YB{-9dAhm$p|%%e~(nT$TihR9%xRY@dAJ z9Qt%M$Xq`W=o%H#T2L?s|1peGCML1UoO$*{d)!f;SXX?>{&!Eeez!<53#&_JR=-!|ML=jrw`>j`^)gRHcW zs&c_88qSeV%|e&3m^C{QztZ0zLvR_`^tvc@5r=gq_{=pzxGv4as3eQH7|>!whpAWKU7jPjlii5HSFfh%)@2X{50+a`FXrPyi>$Pm*ahk2HP$IW2g zy8XuwPRrw%EUp+IYGwQguXJH9wAxuPw;NxY?{fvOTjpb8K@eQ9?y7=+pkO#CVK^TU z*L=6QyMtbkT2Y!Rsh;GKvS~3~rW|udE{S*gZA!9T^6-|Ix=!_lg>|jNYdT|95jlVWE;0qMk(=B*j4sdNMePNJ9VnP9ip=AmKp;Kh)9?epUtLaVNI|VASVgYX|3{I&{X>sR%@y7?9CzGp zK`EjzTxsfQNki+ib3V$yQ!4Zu3$KuF1!!fonvr@#h^>sE*)VQl&(~|$2gQ%O%Mq#( zn$R5)46_+2O}K+4{e+3pUi<)=ry#%7?cW()D9rY@g(Rem%;Ly_2*bZ`k01A+KdMD0 z$%xFC#g;S=cF;Z%fjJe7=ce8G?QUa}@`y#$^gUetV~2)t9)hehlvJ$VBe|s)__z6cCc&GbNrtF$(rw(7J^KWjv1d}sJ?;{ z?PU(;-%OY0H<~LyTfDrXIaAP9#d{AsSNlnNCMyrO>G!x&36ewKQMl+Z{NVh_8e_cn zap)EW>toh&_Bp#FSJB<5MAohVg$?a%6tri;pbo9TCCO6s8a4xK{^>HH8w8>#V^%y1 zN+lQeN(ezW)SQV`l$pn8P{(uAMlg$vp%keYPOJsJ_qtL;qgMY7)+@3d7ySb1Z6~Tr z&SmSnE2b|a>Z_=Spx$77n2YJVyTYTs1pns2YJJPBn{z(>pv)nDUb&<#E#^)0LM3|= zM?^kDI|!@m{#j8E3XcV#d5+@}h3&UiE<1r3zm-;mJT}mD@Qkxmnzr;Rk2SKUv0>S- zyDViU9-4Y@bs}!lK62JEP=*_Vb|A!MZZe)?nAco59(BawT+=r3HSUo__YIgy6s*#g z7>if&dGfJnSy>bLiAe5Pl8{-$g#hL4#;mwT`#$Kp%O)$WZ=SzJG|>w6N@{i@xiBi? zRkhiANrH)(e^!)u&IyK+!(T?uDbEP1?({!ig^y^PYSQt>gJJw&#qQx=7xcI&Wdp%f zI=4DOSK4cK{<8s;|7p2a;}+NU_T`E{)n^Ac;(RoS)xqmQ$LSkKc_L)r>Gs`|+d-fL z`zhe~`h7h&nAbu=t4T{`9o+Dc9uP!s?6&SS6C>^_VXk8zbvan`!!|%bI8(&d|ER9* zXt*8XcrY7XaF&&@vzj543X@5v7ro&eVcj?I_U$g9g#lpxOkO!kXq3uwl-{nF{&@Kr z{mQB&GU4$pk9CXIODv9e zF-6nbn;1GrR{G}Ab=6r0hn6Tx9Ck8j4uuzd&yLw-%I}@^j(BXqmHkb8`-Z0%qf;gb zk@Kln@de;hnPMA@>M~mQDA1?o+4qrD^fpgh`awR;4gFwnG^43;4A-y~MS-x0a457b z>foLnrCM!6sRW`5dHDBw3dh(ORDv3!C%J+ch5Ro5LRrEE_r?a=u=f$yX*sOrcQz5T zmyQ&OZEdTk`S_eGYH=xSOHXhYRBSOcQfvlUasm?!Xe*lhW#8V27LtuIrNafyYIl{3 zED!Ry;V~RPSI24^u5Y3vKPhPrOj&bHZVg~j9DWhZ+iQ%`#;mrBW10^`Q0~DGT!8zL z(&jY%%-KJGV~VrS+?asa$M_g`Qi9s2*jlymGHL#{y}Szo&-Ld zZ-9qy6vq(F@er3$Z);7H72YE2=VA#ey4}cjn29ojZLSZm|46t&JHTAr`vT^U_->r!5Zpw(%omowq5X@*)nkQ&0ju zuPcYo#I$I))oED!buako8V%6o43=l1SD)%(^}hN3d4m4UCUDtZ%dg~0K_}wDG#ORY zaG2d!42MmnD?eLdWBR;(Ss;o#r9!VzGMYULyPS|K#^_LyH^nc%wRZ#6QSZ9Cehe(< zCbRy%F9|l_($sv(p!7_a$;7uml>G1{iTBPsCaq&$^{U<^xoo2>ksk0(CH_n)6&qDu zO+)4_9A|<2P?WfE$rqyXqerydp`Jo-Bh=9+S8c^a=7(bXFCe#7!+h2nQmzEjTUW5j zhO2IvCO@W|qNM-d;*kxF3LBPTSUGJ-W%iMFIjttlyv0AmccP`_^z)8odzScIF4#2d zAP8f~cu|^7ndn@F6)Q8;iQ?bqTe?4Dhh+skaL>Jx3ebLr7$2!h-jbWRZ^C0~i>?*;s z@EeQ~?T?yRVKVRBGuGLqYA{I%4SfCZQ5ylKPgD}l%Jy6s5G9{TK;le0!M|I;9nkXH zIW7+2Z6B{@!V%XPk~(?FeJmtE{IF8Na#2u>GTMFsY|Zt#2`UCGS)&cbKD=dYG+RrO z|1=r5DxX%$zalL8JmD?O7DHQ{3iP$c``t;dMKBHeU(-Ssj*$SCBn=Xmsv4g`49O}r zTDh;BGqF0A$VV11e^qof2})ugD4h54KiHy{o47Z)q?V9nX1wbK&Cz|cBG}&cWt}Bu zYOSCEo?8;E&r~>#W$0mOo@!V*BCo8#^VMq8y+Kv=9Dy8+@dEB@YtwW-2b1=SLb|N% zOvC=aJ1?Do&~?$1WvzH_j+}~l#yw8)c)~4!O9gCrmck;J{qYo0Y3P?z^-FJZbnBQN zb0c@tyg|BFTK#Lc0XvGOz33?gln)B90pCFq6Wvb%w@dA}ZbgJL#pJb3x)gXFu!WXo zOA7S1aRFISFRQq9A%RIJ*3}&lD)B{By^w;*vvBheB269A>72}^Wkwc;JHoW1FCzGrNQ(U3uk{h7jVJdgx+1P#A4Ssm% z+bgd8@uTmg0x<*xT>I429EPbbP3me9j1_+tOd#Qd+NgXG0?oUJV*`sxYi*2^^KM)i zLO*M-KeelLCq%d!1lWDEjU=yi_u&PCt9};FOViV^)ddDw&2-KYdlNv?&u*;0R^-L({-H!IYIAX>o|n}J zLH{kF%QzHfETD>y@K0x%A|+I<(@v#7sC4LsN0x9rxofv{4v)bV$Stv35fpw|)$4t(6~*{@}*3DLM-vmqT6tVlAjWCNT7^yPRt4>KZfD<9d)FGm#ShN@eiWWF$cl|ISzHy6mv~aePZL)Y)@Q_o zO_;JCp2Ebfom?ZI@kVb%6@`pfF)GQa+(G^FyFyng$|$oJ`|W8wQ93uDhKDOpeMg@Y zb_Q>5cdGYKT)a$11Kh){6RLi1PE>(-AT+rt?jh; zFa<<)YpzXnI%qCNk2=xy>SH-RL%^>MG4=vDCu+L8JS&QJ719)|lkUf`G z6&y1$&m2IbtP5Ni!gUTW&+)i|UW~r&&Hi;4$nV=e6Od?^E`n#n78K#jns*5QwXMEu zyOf9dW&RG3WUXf$P?apVr}E9)_@ZiBT^ouvRUykk zI;L2aLI_!H#$WzL+GVL!dNd%RDvy3O{Y;v^uX2EVdm)M+xD#AE4xv z*mlS2;!WM}2^7CT6@yfz8(r-Nj>QOLJ~$=!vbK#b!p9~bxW4E0u{d$nc40mmPxXV! zni1pJdmuwBiZdzNlZ9D%R3p7I6Sx2^BdF1olJ^8wV*A(E{>|kMFIfwn5PRf+v$*oRbG8}paTmhE=Y4^nvstv4)$=oM@!G-+N^&{|Og%_I#jX`PP{TP~%Ixy(ZVc6to5H=jYH%&W zL7%%cH7J$H-V$Ro*6{-dRhlf5n3S6khPA7hSI1vTJ%x43wY?3tl)-veMArSq4^Y$D z$y4H<<~3nL8{orpz*lic{xp-mhIZMcqKvH1*j10#0X*PmWED{&m0aLh}U9*S%$lf@7; zVyUWrND7_Z+5a0YSFo2z)!|xS0OHf-ESC?UH5?IE<9pZs25F_6BKCG(2J{|ks9u9X z_h9qe8y7`2cQ9RCRt3Sq7-?SY_|*g`5%(D*;xWYDgDR$0t95`dk+unAE?+BP#HVgZviDB=qsJI! z*3oPabvo}AL#TbL&IIZFI=HX7>r^ZScil{JeW|Uj;_$~io+S54s|rQh)2Gmq8Y$7t zvd`&!6|!BdwO+0u0%VwFcNl}lS;xMxi6x0Iak;G?*!AJxAFJvLo`NB_i$bD@gBqs< ziOvGWQiz?Ct0FG!Hy06 znH}B+st7Nq)7i+2;b92nLwHVyj>YQ2`vQ7V?bRiy;wS4eFaL(TDD4>;p2?wxiC_n` zdxji6DFa1*lcRYDo(YbN zF}#Zb{W-Wb{x4R@e6P1veuc*JtS-*SYm#wsL?^@`n%-LeWb)G;HsLJKa62elXv~Fh z>tJa$yPEJxE3F}4AZkM>>(D9c9P}+wJjPlfQ(!g^H_D|o;8f!nr8JF!yr0zg!ic!Q zP>Pue&OpMJuWufh%%$%T7872E$>}$$5T)?q2w;z9vnTT%nv#kkzyGXaidT171}yJG zcszH&y*9|V`Ja-cVeRARgKgbRG2qA67;hNiBaMU|SrLTOf-Bvmuf*D3XL6KE97{dJd z1w~B?r`}>0`tPl-L8&*%MKUxqD#cG7a^KL%CpLhd`pSCfM?GxlZyN16{GqtUz-fb{ z*f~mgdVyhLlD{#cde8f1!8%$V_MkF?QnAh}ZT!M=d`JUSUasaFXYLv; z{Uo4x%#w5~XV19?SEZpoonfSLxT9-UVS}~EP=l5~q3w8w`eTj3z>$;n(nZ?T`ReOsq81mZv~n>6?uu=Bzsz~qxJ1tZ(>(ZOSoi!_=^dA6$_VQ9DmyZj1v}dV)&6kFU{f zwH+;q!nNPO{QIMo$AY&DLa?Rd=$c!qoG-z)hLwOAQf>cb;EE12M#y`R{(Wslo*5WK zS34JP5-2?i&qbj2pG$GyXh4!*%ZoF~c|ETJ1cf_XtD2=krr{P)Y4spYV^l_Q(AdO9 zJXQ;?I!oaVS$-4OzziDQcv>!2YrTjILaW=&Saf-ZVpp3g_n(<@)5CQ4KlpCOXn(C(T>jsjnmn}oZG zDhN^=1d#~r&k^OQS0P?^W8L+|NX37;N^eQuOdE6uD$|02a{i(T*O@doA;1s*Sh z`+E1wnHgGIc@-}-WhButa)2Z4KifAhgVY!}r%_+O< z(v76Y*L)ID-p&R{0*MhfNKa7w8qU?<7@6qWHA4{4X%|N6t@X4&rZBidFjuoJ!o4a} zZV+!CUmyU#9qU2LN%k&2ZCkP-*unZyX2lR@FDDpN1%2)!! zypJmU4dijt$D%5p9jL!AtkYDyLPsX#K)o$nk-&wKB6M>h%G*fyYo{$l;Bvq)WGxHq zz|VezQl62mSZ;2)dvQZiT>E{?E~(3!){*6X%Ti5pM!{v-;hDFn5kMj`uPTd5*0YDq z|1vk4JqhkWncSY}>x2JO)zx|FQt$o)=3czVB2xSTw5^G%3QV+h+=K68ZjLeUJF5*C zIQ@U_e(*}JxY&kf1*WH(P5LfCy3XhS;F%|hCzD~7zvCvN>J zLSgPOc|Aci2wdcO7ie;n?MKaY%+H}mvqad#_fYAwBM2;76$^i+h_4`h)9M{@q>q{Y zVCP!>9f8T32QEW`h0HgVp-kxwwKoW#g#@#vr$D?!7B4i?W=lQ+Ce)XHh`zmi>NFYc>~c(?G$?NMT^;%JHY{auYO)#`QAX;Lcgo`x_j zir737%o3283`)2>uS2b(1NChFd$T%?eVc49eT^o=H_74YgezV6c0qWumak+I zUH!r&@#baPkXt7?yY*`2`*Rh=l^qYxNS|T(?e*&V=}N&nzhhvEKfeJAo6SBd(|V8> zl`7|m??`{?{XP|YtcdDy9ak@w*SdusMkX{72wTSf)-;84z6-}V*z&74-N?K@0k%9v zt+hBI-@WFs%NZJc0B(DZ+(h$sIA6;Xq4RDtAvNhir+$$B!G*Z_o=y3_n9%~MqeZ7Y zCfgmbk!~8o4bexOS2VwmO7`GC57dx}@?C^~YS_=X8u;%5 z*xi!&ifkXma|oVco=|@`*I~Snj_rP5B3HXWENLw!b$v?0^hB1=d=6P37m1K<8v*%1 z-bv<7;r*Vvjl`Z@EeYi0mQhMhE@#BD@Zm{#n1Dhqf3=_Sw=6X8E?Z!+&x1GMqhsI z=_!^)aUvM``P<889?Ya5?x#EOHs1~!?y6)+^^XvV?c zq4^7@J|iS&YZ01+&UPFRKS7u1UCG=L;Z#ic@7*oZ5C-kh1PH(0Wh~x*+SWyCcYKf7?edL|t{Liq)>xZ<6s1X&;tUzLAx8gl;p1 zk43a3o#?JU%f)8MR^bEx$GuZw~-YImP@FsreBz6Wmn7WKnd3NIzu(9T4> zau10=dy?z=FOx_91Kv}iuj;{${RH_VCPuIQbzNvmD$D8c=|dBAsK^6^ zR#X}M|0LSoo*zu~9cE@WJ8_$eqMsr?7kBPpmk+J`mkKr*(UIaaq&XP=EGFEP$x2Jd-J;?T7 zq&;lk%N-wX4wM5d5?}~)F3OB-iTauUlVt3A79pdhC>JAaGF8l0j~y3({fGNuzgQRK zGNPh-X=FxHN>k`T+&}H8lkf3ga=dI1M3tQ~9|kWjIn5{76r2VCB*D6xk6`|67DUwj zE_5rS{HP?-%ecAyMmf1s*yVdOI&8zb^IHz^PLa83QYWjB?{6V) z5{FxB1ojHSLti|6f zfQHN}-s&xfE_I z6$|12Sy6BXx%(Wk+WjTOOyKJ6q}1u819H4zKRgprHeLjYC~%$=DTh6_?z8`Zv$#U| zNTmj{i>YnHTpDzcF-++GFJ~fG(aiH4SdtGBoLi!5G%7vuw_J&QiC_q(mQ9G^I@}NA z-At_;VUO+ihgFk+MnCRPS>jRnriK4v!TwngFk4#8o&CuV>KBeFRqs+g&}gCK85k>J zr(U!;=lmCKcBVYUt-z36pb?OBGL!-{1fhq1E}u>uv<=YNY53W%jxb~lIPQ1HT+~E- zu*uJT8vBfi^Bp4(W^$?*FD?F%8+b zzkJW-6aJeV#js`dvRXg_8OsvYd9q;rXWR!w?&Z%oSTTF_Wvd)*<)>ui#2;}kEa+;g zfyy=P!@niEr&(jy{Bc+o66XGx0U&lC?luQjknZF-eE}B&r1tza)g-XfkubLps~%m) zc$?1fl^R3WMo;BxZU63n8j>M_L3Q_mj@33u$#|YkMv(yLz3dCre?9QW@m_?!0;{=x z4u+|g^^uMEVX#2UbEl)$#52A3Ppcxm8SH6VP51oX8W!3q)qmq(oO(`M8jPPMV$x>* zPeO$k;Zx@S3-V3O_p#(0Fswqp1oRi`x<0Kh3wHDbkhG8$)H80ub9)15bd)AVEXcho zz~0mNAX$Qxiv&_n^W-?I?DC4f`EMIzq zxRWE3BHakaTl2Mk(=v$ib^Bw<;Cy-UTy`4BQ;EF>1#Zynr#fgrJff0^i3~~X7REc* z9tVb813yr{S#BBhxO*-JN}X*3^=tt+_r{K92VE(Butw0>FStA#O4hoP3e$JpFAI-9 z$rLdnWgwv{9QQL#Iav(ouPsC{ma?1F#vMtvaC^;IO^d895J?y*+@QO@V)pLXfp^_? zX@9~h35WD2ZE9Jw=8%>Act$Z(gBh1Pb`4b5P32kl-cFLuV+`$!RSlZb>vjj4Y9}1C z$Z-ix{o5O<^(h2UbqQY_R+930P9O9B@%GSt7IhL6N6YLM44gwr7{+MrIj^!O4D8(G z6{TYgHb3IX*qnW{Bm8yslZ};tQs4@kmO$dymEir zE2pFoB$7Yr(27$r(^%WWT5&G^*7nWb4r&h&s`+r77|W%wcyp1aRxW*6-qIhVsXfifB6T_0w!juy=i`Y*9zj~d?_X_5-aGlHm49tjT;%cj&t7c+?2fjw^&s6RN(c8FJzVaHOeTBvO z9rHiN<_pU=K71$aSjPfl2}rx4PPC&Y$d3Y1$YeT!V2?q!K${1WVU(Ctc}e29lu+vx z*}jV5XRha1MWK^0M;+waFaB1l5T9e{&>Uhi{|F;5b-L`pok$;sDF(?;*7#nDPy!c7 zOUv7OTBrFr=hlX_I|XDgSXRQ8~E8l59~6Tv@?H}ghQ&daAl-`AZ;g2JjY7clMzPVjD`+~HIG{=zfc0&yms z;SwBSnzn_lQ?Tzj=dtW=D{U8`1~*t}=n3-Q_27lT)k0u91XHts0qEh~rmOQGcXGo| zx=L5Ipdp*3P}|-vcU-IT&$>t|b6E<3;9104JPTSX9VpyfOj+&hefUU4$xYHMzmBaC zgN06vo&XE6H}YaV5Yi0Er(*i4_VcIBYVOh#!wNa8wH-wj!|Tyls1u5Yr>+q`;l~RyvC52@UMNlW9I5^=JRi+3!Ayz z)yqCADTSZaJ;(0JteP5QP3O$@uTr$H1DfPQxGNCG@Y+f3#>xVYviJp9{mss4@KxoJ zN!Q4j`m~N7>AByMYZaqb#JqENSNwWFm4wE#Y5+D&B}aV3H6ET1&XBJeoKlu{H5gZ$ z)w!~z+YZv$CfDR*SKfU7)Okj1ee+JO>y;YZt%+!`ht!nyx&EWvx|1hHFpC@qG0MCM z>fdh9ZH&D7gy)jKx$JXyxA&_9rTzFL{X^aU5BS_;hEjYqS+xi08YVUuEh&(de}m$( zC@`AKpOsb*&rusPWwu+fp-;9a1QzfW!ldPld+zK$M;zyHM%hCmwi~gKMq4?Gt=cGl zc~l_%6xZAp5BBUUf&b#J*fK`){g-e_qF(z7xD6mZyc(!}alFN4+U`5i0I1+<)ID!%qYXCv1*VyAWA;#~K@Hth)v_m# z5k}u`iIfqev5~@>#-y-EL zJH_gyxfM#i5TC4KcUbcRd(VJQT7X{{FtU{rxeU^*z+@KlY|E9p9yJ* zBeC{dyK%*~7+G$x_=p36mW%z+5a0O;wq`1swmwVFVE_r$?vD{5fF0D~&8gO{H!(9Q z5vh}^;c)SpFj3ylj3(4R`6D!-5{_hua&WqxUtUBgtf_N0?dVzMA(x?F!(-qXM8yj*>!@-+srlj* z!xOyyNY%cHsfN`6Qe{isRwQr_;!6m?_RiulwJAWyuKm%*wK>2WGi^Ebl`L~}t^H6= zJtq(Wstj*H_3#&Z4`Quf9p;qK#l}Iv#PVzI2wRXsWU3n4Xl_gve>O|Uo{gIC^9N`3 z+pEyV>(JsWeVD?$)xb&KhhH-yip&cJZjkTVP!_gUo;{P*;-dl-NBw0f&uBOKs< z&y9;V+N%-PnxwD#)@w)9U~975CwB)beTCRuN_Sa}+757yn+ zP7`T@=JRmzR19h@l@h^A+oxNU;~KhdKCM1%3ooO(y`Z9S>Kl51YRf^!1|R#(K;t+s zZIMsQca&gL51Fh!PVO^20kX$$<+d+aJ^{B||Jv*gx&(v^o0f`8iqXT>aXwfmz~0DA z1mATh2*ya{?yy&(`Mn}1o`vP3A-WE)lT|!hCa8+m&|OXk}Hu=cUI6CobL=(Z72#~)8uvB z6ZV7HV9tYa|22%O!ZK%P7_5&;!5!M7FVSOyzl@%KqBCEcJ)nz(;)@i!<81Q^IS!5m zEwy&*eW3*e(E(&G&>GM_F(p^NWtnV2a+wE z^ru{fKIC;!AbjO8%!D%XZuwC7y7 z=}hmGDyPj$~5D?E0&#va&hVYNshDU+x;+$6_UFe<#@U1buQ0-)XI26}^P} z!Q(N^N&3u=?B$$wP;Z3BH4F$P;k*EM8|>!m$qUp(jt#Y#+aGUJxi0xkw_uY-^ld2K zSMT)2w=E_Aai_Ix3cd1-I^n2MhNGUqZ^50a78E?R)t^r#a|=A0(y^64bUEI#b7iFe zOSG>N75UYCsH61k*WR2xdK!F!!;9~c_#W(K)={_Lo>J?T#3wK^2R(9A@f~fllM+s4{agdPi%bl!K?|R}^t94NIgtE3F=mAn9Z$WwpDg<5w|g(I$80 z?l$8qaIYYuOuLu$_m_ZC#$0n9Er)yBwMIZyIAXTsc{57PLThqbgmlvg@p(R>WD31q z(#|o&Xt^e!Qu62N0@1K_@XK(tSLe^Ei!m49M-K@6{w`WohwbfHFcjeeHbnHmr?~qj z<&Ad_)9(j@aXgj{os#!EonHmX%H(Z}aH%^9^q+d2NeR=N^(uF_)WT`v;0e5cFNE2pFP2bW&h9*1Ohnf9y;B$8~R z1;*dnwr{=dO=Z)JLTH<<$t#d?&t#Q**dr)-1zr(NP)j6#i3M@l`qM_~mT$JSss7Qk z{v&N9t!w$^^PGHVzogKQQqJOfkxmZu!Ak2xBZa#lsGpw3yaqQ4)Z~1-5|k-i2$ly` z8*SE%pq^fRKH}pZSUmTEN{uZ(!E}j}MJSVz`_`;$wCrQZe?GN5^jL*W3~J#hLbU%8 z40AWG({@9jCti7IOmoVhOB=IjL#+^0_jN{+>h>?JbLk_STh|v3-+JrN{-cn| zqXFySe=xTbHMe=fS_={rOKc$Y^VpB87;1Nod=UQ{u`^@F8!H3;o zoh!(IB+apSox5MdmCbP~w=pHk-Mm<|Q?SptzwmzqEvsF9fI8Yulnv-#38Y?*&wdfK zI3Py_vwMI2Q(LGY{npMwCVNzDa7jOh1`7jNl zA$16f8jbe;GXG(+xRv(rhjsH^^vdEk_&ef~Lf)LPIkil;bwNkVL+o=0 zAM?p%a(ss*HN)Z|TKUDk<@frF6;&)m!Do7o*-{$3lzOme4a zUw`{gQ`>1Vu3n3Ea5T!2b+E{8zw#cQhIoyBM8*dS?67~@E>#aHBEYUs&Rv&m3&MS? zQ6OeM&}7jGsoxK*z&^?51n5}g$XHHI9`35Jna@$BMpcehSnnw8WwkTtCPwj0qp))xDaT)A?yO_kjdoKVCY{Q4n0sdl(fM3HsgBQVUu=8a2lE zo4i|%A7B%*vL^lQTJ7M{yMBQULMkxkkjuw_@SQH@zQxpFWKb*zFmd{H+IpK)oTRj| z{j(6NCHu~zZIHY-@UCI1^z-8U3DEZV)P`nbu_>cP%h?<+K4mdP$9Vsapoz=k4!spDUW7_++H`YT33)V;az~ z8Q`sS9!BuyoZYPs(8Dvk6mc}i*B$Pxv-J|wsdq}-0D}Y9vpMKVxhLl)2F*SJ-|MtU zDNIz$rXg-w9p3q}ZBB;;-R2=x1Nx|gUqPf5&_d%f3_B}ezsnp8|B&u15jt*9>sNYl zHE}-2cv)^cZ$kr{H_y+Z1}@N^sjs?bCVSZZ$eho@K@HNL559jgp#8w8$K0oxEkkH@lGYFfB^~=IuAFZGI z;4=%cOQSOa%X-a|{7bzaq4~-V@D>?hwJt0UC(G5H7;+xJ&G2CvqL2tTRnmsO{Ddaq zPmVvbvcEgV_6S{hP`B)EvYqC`a_;G7;)z;JmEOjH(7Jh@uDmZt{z3;jf}j4av(mMP z;qcC^4CrQRcE^~uYgQ@mjVejZI%`@!X8fEXy-;2OGLSZTMJ^I8LSig~&HcC0;r-^Q>;~Z1@3aTjjR36=L*=Aby7}zp?5r!elp4bVZ_AG8*{z| z?SoS`Hy^w&Q59maOp>GU+lNtMr=4A=bTp4ectWd``XQjq+wP}@!^E1@b-+#>Y2C$* zn>c?PuFrvU{5|FZvlM%w|Ew@<5!Opy>~|G=fJy2>_9}JewdVceQQYg7_{YDy5~wb@M#YdFSxOY+ter=96Xbu6Y1}8|>A-`z#*-Y+%k=4#%ufLDG za7TSqQXcSSSH#Pq+~08bRrtS`j?0u!MK<~aB3`-9Q+SE2VQO0XA)VZ67?5B45CqY{ zvCK3u8{Y&7qSr{jkX?QXR?S+5k93~x1hfW|bUEsqMlO&`vE>F@Qf*Ye2TgrF&dMV& zq-R^OR0k7Z4?z{KCXWh+SN0ux4Y^>Rkosh?n!N=4-e?q<`mMl-qu?G4i7>Xhcb7eO z2In>aFE zlhce+=!q6XU*)n-{p(;+o4+27ysflL1z)0J<0@#^E@n;+M{LmQE3ygTr?}Xl&pl&v z#R`+tZKg~pn-!3k{0k)#-*cVW@Lgq;g7 zx>{_K(f8fjWheqc?J9V|R)E>JC1kgDUg;7kmPGUmYhw z6W;ARsZV$Jzk&^gtsqg9gws71s3Q>(>}_l zT|_RWG99JLWNKJx?GAf7p*muB?j^~5%vT*lP4*EqDhVA%06!rlG;y7G4`48MR7mP0 z-MXDAPxH4f{8*4}Q(6~vw?vy%#eLoa~ z2t6AfLiy5g(Sa)icSaQE83E9B&-SysSQL?3Pu4bMqSg+`*=1R#W4kQDmUi8|*Xymu zknqI3P|GBJIr0=T&1JADIH_##HYdEkC35^@y}^iz6-PE&Nkpu~I)V^^FHWlUe10w} z$g=KnyQE{Z|LXU8L><%V^^`~4v z6~MsvD*SLz1h#w=`rg63?h0xomJmL}8no2st$zoC916cg zf(KLX1xM>gk19|&r66`dT7Yin4UurUkw;WvKk2Z4kjSc|#OKTp=6RwU8U0$>eg zusESv1X=VvFS~Q{n-efB0*_g`MJ@>wbejt&Fv{^uEtrOf@X-M^;Wmd3r_2+?;bb$O zfDEn)TRa^<<5o%|Zh+HCPayvSqA;Z{`Gmp6@TZ%h@)R6SChkw438%$0uSh0&?ocFy z?$IiZ?XBEB1K@2xBCUzgAUfE#)=aVas08Ouo_k*b?*lcd(j?ZnXHl4joRiYk!Ogc` z0xwbJ_>mlMumBLuEJ%}!4GMIYHeXz1mrwSA)s77L`^#k;_d9p~WCNw?@94#v$_gCe z(U30hQOlcqqEzI81(;_$L)8!&D}HIsK#B_-H$;-{i+cdvjl=C({J6+A2j{jgmmQGi zjNVXPHuuo)(l=akzxhQh@@_9xxNIuZa3@HIG)2gCWDr=Soq(6RJgnd=>m2;30xa(q zLPpM&cgebXK)0YGR?Rf~q6z7r-;YPZCGbU0;Y43k=`XZN&urT^+8%@%i{oJE?H18^ zgu1yd#~<>X64Q&=w?d;==`*<5UmROLwf16O>3(>edJ)(F){*$Fq3p|Ymc=)mteQ!c zD}v-cIaMG8&{mLI)7^g;`a?_A9%D7N8?Q1wceUw4AJaQ>k%?`C&UkLBLH?C1J9jG5 zdneSJ3 z@&34yqmC&@XK)4(q&dbOU6QI{;&(Xi>~KuarcfX4$&EEQK`AW9%La`aic>I`wMyT# z`Fvu!aZr|jrEol5?nA-0Q!?khQn{dS1B>j^LU_BtxABpEnIfA2$BwMpCgZL!1k>FYVfrH8<0Y%(;LI$IT3> z7p6b&926)(N-8OaMFPc%O%7hl8pn9#O;788hmrsCS3>c0kqI*2V_H3HUDAi|5XuQ` zZ&Qo>3F^l6UWyAcim6sA1r8`1B?gTKQN{i1hdlL_!pUg`@rBiG(tB7ir09n)O2!8b ze{fOrMx{n?YEpa(aFo!WT`W0Jm^q3|Vbx=<>;~O*rqef8Z>0`*=|+cV$e=MRsOA%Y z-Te0rOdi4)))baEwkdGKI$S_%1LWBG%{uxQrZ4sFhBN3bFM%YE(KQd(X|Xh}gbBIV zI8O}f?MnFpEIK!J+PP(HwMcjamY;JG&Wbu=x=~&lVvKlBtakUHnZDA*7Py^*+>4ue zZ6BDv{&>=Bf20Q4Lz6@7dEtz`GWAt|@)|ft3(@(I=KSZ6w;Q0Q2?zo6ce!vtR7_Bx zE_!PmjM)#K{B2y}zac;-Bp0U7s~6aM$qKjC*jczvmwR7-Tp^nXB&`&K&o;|BK^?%z z@z0vN8-6pi`txe`1}G|EYY28#SmGwhhC%9q>@7Lh<^Sq8{6QL7Lk~Hv#VH|wSv5g) z;wZ$Ba|z0GR%P|Ne$c;OH5jBc3D9EXfG) zo!seQ&7*KvtxVP4LDg--brmwb z42SP_+d=+@b?XTRNE)ragzn-9Is?v%T~85A27evI-<2kr|>bFG@-!5LrE}qeLksMPq2<4S-BZ;^lmsNOPoXi@mGDQ zo3`+e2z}+gJ>_7tWP>}%qTWMkMc*1X$%pDUlOsMcT{$8rlqWZWBnO8&`W%D9jZX>npVuCu14$nEBRPwOAW-)ps*n`X z2B#vPtm{fRbO6(;%L0-$m~jxPAr%2XUB#a&(%){yLk>5uhF8yjv7V~4W=YjpMZwin zr&?>^y7ds_%x;L4wIB&O(*??+SZostcFkid`wFKi*|pRX1fsSI60>qLA4&kr@opSj z9j=iY*He29CUq*T22i|`;4_GiMVp;UI)2?_H90#Ea~g<*ojXAWm}!J_MR<&yS#V-o zH)>6S6mtmDkj`CyXXfn9m@Nrkfodni`uXz)CO5l8)=%)3%jJN#l4)em36c&3Y>(;N zjeK^@87>p908A@3WrO>i@T&$p*R&aL{x_t5^gphY3PD9ji+EH^C%AH)3dcIRMgm{X z^AHWc-5|;VtW!)3FCQ3u0$VR})~apxB6YJK>u*T6j;eTneAhr?oM;mO)97d7p7@m@ zTo1ne+Z7kuGdEV`x;$BePA;vp?i@8De)Av;f$7#^IV)P=7ivti#?@W+%H0EahE~F6 z@bt$uWxc{0tg@}ox#l<^Puz5|m&mJc(d9R5fz!moW&?=_sp_+F4OQuQ zf`^kD-+tVG=*WO11dHJ!fgu{W_W%;L;-qHk5F3X~^0S$h|3&?0S(+j1IiEhbQl#@j zx8NO=b!vX#z{*Ruu3XOr$()8bxb&)^R(0eqW#95!8*lLAde`7ZoJp1H3{SUOea?PAQguc4~HiwgBrG0bO^a7W~sA;B^0* zSk~86&0wTlN}vfl7jZKmvF8zm=hLFsYCS(IH`U<~-Z!~N2;k!5VCjSx^-`tm6P z+-k+=UhuYM|C^CzPb$z4|4{|8O}$5sk8zW$7CFIX1VojEe{X8N|3}KxiDf5DWpW~k zi)(OyC}$PV{eYroDO!~c`zEGm9qcDa#%#|BnHP^eM3(0ZFWYPmd}sbXN%jHhiQhRv zf=d>zy02_NNg+9bl{<5d_wBlVA30u-9(B>4Ah}7A(!E!Z5+5scW^WZIF{f1480+`G z`331w%KQXr@h(AzlLFq2m;vgohR<7v6yB|2enI+m!wGbUaK#38^)AdTL7cWlpU}dD zH$OnSa!T++VS-eb=97oBgw*Bv453QdjMgBe_Gob0@sy&&pUj-5vT_=8mkG3@&1B!DJCB#Z*y;2N1a^|)K zWoD=Cy?1L@PKmSSI*e&R+BVZxjQ6r7G}oJ^-?PRSq(@~D#~9}eSKj!Q7fX{;$aMk^ z_&~=|jo)V|J|NvVr7>Ig(6mfSjMp@ORl&in28>;G{hph>AkF{10EzRpS~j*1BJe{) z=3Wut8t7A*aWfY91?f>m_wm8uMA(&LVGrrirQOk0W}xz&LqbEDt}QJyfW@U;M#`Jo+Yd-j3II=# zVoC`6bGo_wiarKV009T6>Qb1S%;^i#zizln;Xvmydn#I5#EF@+AbpaxsHQz%YLEKn zk8j)*#Mz-E3D=dU0&ZEn>&nf4YBlYdKz~%zc047}+Qm+OZ3ZIlize5^L*0R_^v#XM z2c#QvprqKBs{w+S+9U#2;N%)m-w|UvLAv28S$z)_AqB6m<)_ke2~t@ImCSzMhx!5O z$zX^Rq*)y(ZiwdLyNiO*B?xg1MV8jQxtIHZ^rQ*(1PL@dL$wurw|01cZwJcT6kl|c zORo0;rGI~N({zGVR{~p_a|#%4&K`%fVDS)}ot02~R@vX5q}Yz9l!CL_Z52MU1wt?+ z!=I{ts;z! zz>VZ<3OD_>5jPD>FG!Dn#%djPoTkKf1n(B@* zX9U8Fh?cFwuBve%$ASU|9p6Lx>xL~wfyQ-pL60Ojq{(uy3V)=3CR~@ZcLLAG>mA>? z99@~VLgK=JG+A5QVCc|x+3VatxUWBMgx#zH%Z{ZFYPw{qeJ1FpXx2dN_U8Td$Bj2m z@jp+}kvhx5Gc3M%NEWC}@Xe)rCh+ygjW-VJ2vj71|9g=fEi4CaA|T&>THK6?dO`a2 zq>1tvc9X}ms>?Kg*bJJBZ*Y?X^0y53d2JzmyTSxU@Rf^R$}&H>?_5Ozv#Mu3``D9{ zZ;z&3pCC0^-iOjTxp|cWSyC3;PT|#i9GeB+FGyD&Tx&g>?}3YP>JsxqRKPS1q@bQ` z>D!fzZd)-mZk}P=fpB?iU_)TH0lyjMUNpVc8>i%LMvsSoCG0wf%l6vwO{=RUC%*0j z%3HmWIRQTsi-Ajc>u7FNL3nc}3;MV9gF<<$H_UsDF}!b1!Mx3!9|$cjrmSOtv1}HG zd_ekf!~9eHl#+0&nC#X4XMBai@{BAbGQe{srmljW;fa&^?H^b1}wH9g~6PAW@QV zjOD>qUh&>mQwkN5q&twO85?W~w0Ggj&1r|)g}1+dZkTs7a5wAI1R z&GJ6K^lV)7@jfn9P{{_SlxpA}aEGTB!J(u#4_Cg2^k_22QK8hDxiFeD%_0Z2GEpd1 z*xl-X@}_nA1?jIFH%$%Nwig$DiyBu1UE-*`UK`{=?3<}7g!IRi3k%`%Vs6kUpFjjc z$+5Hgby%2rGg^?4-oM;{w4#${fjeAk3hV??Gp-_U@J?=1SN#F$3Sa7M2uobt?lmwU z4-WuD66TaS_W|Yo%MJ5phXrSKS#;dskXngjIf+R3Ku~qCs-U_!PP+F+JP^P2HTx)< zb6;!}fR&*BD0ukA(C`<0ufmCUU=ddy&QBj|EqC>end;&)ZumoB`&-EacXClmar zat(WjX6hVgHUhL}ibg8-;9pED~ zBa-=PDWui2VSA~=>&A!aB%hFO7y%E(u!lm=FL7n8Sq(S)y)BZrts@L=zbI?zEb#SLn>tx_gABTKn0deCU;n)WN>p zd#P!}Cn~4mVwq&Wrk~g6JCu(r2_8Wql5);H2MuE|wHdzvRXz&DTsUlRzu{0kk-YJW zG8PWITdBti%Ca^)CzTU_q$@$@3WFHOiWQEn%U}?$)AjX=bEnVY(~m2`oGEY~fT6dm>>kh*i$iq-N%>cYogZmCXYT;<6+VI<_p!tZ6=+xGQ0bIk6PY;LTFm zvI}DooOXm#%~C-c$uUAA zYl7q5rr>d<`Lnct{P=pq2*gFfD=|#`5O1+ocVejovJyt&z?Z&W2~$Lcx?~@J@PTQy zSFm2_URHgLeYpJkdWBUwWQfVC4KyVcb#UChaSU57ul(Tyq&qpfYk8AZ3KV!#T|Gr@ zB5f9IvWE#jpO9`u;T*bl4;Fsb0kx91bT+D=rR=mpfuA9N{q0Juvh!?3<1|+oNX^yr z#xku&k9V-%Uq5c_C6-gMH?Kkkl!g@=>aTGEnv0bDeB!?T^Ge(s_R%%0q3oo(wrvYL zC$P;f4NvYF(v?ejlj*8B`f7Yo5etKL0_jdE!Hypu+#fe6Tzl1{ZP3U-2A*aH$Mp=a zn;q)lu)Y6(>&7ajwoKvzVOu%X8XSy(J=WK5Y`XF+2i|Lg(crh>RZCfL6@Az4(n^ic zxHjwm8MpMWHW+V=JUsoO8Q`p#J*sPU=P1oK%qxd-Fe+Lf0wVtr>zjQrj-Y7$4DK^> zV)Fo`Hd8Qg5c4$bDYu-UXreBF>T9s`Ba{DlFXEto{(DV)V(eANdbs`j2I>uOaRgU)h04iwPu0ucQQcUp zE|q^=*#ouWGg^ENU!d2nL!YYhzM)z-)@o*ECQT67!dA(Qac!tJUM#PzPbFvHQQcUp zkt{KPZz6^!p!oqjsb-pK$hR#|;{S!}?^jMBYZg4?AMM3NfoZ;Cl%Z~u@zl-W8>kyA zm1#CLO-tZItR8l@4uiK@!fS#D3i$%{@z*OSu&=lpGypGj_hu@5(>Sa*GaL5M$?ONJ zDPS z{qyN7Gbc%+^vJXHFjHl&>C7d1e(1UQiRqn=6h};TI5U=ObnK>RRUvdqA8cc%&8MuT zPfTybmXDZL4snWdfM&qwLMCZQw-KbD&#pm#vmaRI2FtNj7q#_pXU=8#y7Z~oWUP1cRO5yB7A5fUR>1YK? zH)?!{<$kWyjdQmGj+!dAG_b)~a;{0>IMfnt_ovX(3)8;w>>#ptZkf}OBQ$P+sRE-~ z!5ZGijz3|#aqcosoW|5r(ZuFrE=#ObIPOX1;S@arSqcjsF8oQHiaxL2WAF3e}R1GM+lseXi4ub7$~uy4xJN;&n3e zIo3KyH7O#eJ^q&)=dLeo?4DI)8#`_#4_-{wZ(O!=vQKZMQ=Dl5BtjX|Lfkoj4{WQ! z`meNPaOToJxx057cAk%2syK2ZudsBnl)=F@i|#Ek?(lTGOHAvR-)=C?rLqH9aIhFc zja3EA0Q@d+qF#6^y8Z_02GL9bi=%n82yjg*Hq#mjn@e)rl1>ND|MQ(Gs7F+rb9f}L z-9XPdP9Ab$m#{pr3-eRa<#$wnS4jEv5Cyb67o~IIRIw3vH|d*4;D{>RSgYXp`%s)4 z&{z!4(v$&XEKVDFti>cpIGh8dKi=u7a|8uL zj^$|hOq+2PWvv+4@dAr~(VF*xyZm$|rh!KU0}iTCy)5vl2obZz9M&C1^eL17h3QI6 zgH1I%-q|g&B|~QB4#;u$lEGyj=4pOnx)RfnFlY$cSl&T39j24nGBp=(`1fFl4$J zmvFdVuGunJ`Et^BY<(Ei18Mo` zPE2Dbh!-0TlC!s(yv7K41;PrJ>#3Obh3QI6qqDc((vk&l024 zDGek}W?`nrWVN9R9+g;iaJoVJ>GyZ~HJyzCOjHLe8F-I>7qo2MQem6A+g`d(4)01- z13aa>t|c=s7WF~n)m587A4}DTp;s?VKmR(f+%;}&9>(v%3#=Ad-P#()a9J9Cl>>z$ zsvA0Ca-2=!pn|lpa!nKKTD!mtyUIAkHHhksp@DxQ91KMeu)V7-XolDXU|<&2*)xy8+{Ar9S?8V^gKgk!2~>Q8kvS13sCZZCWo$ zi=7tggz8O+v53ockRSO;)_`1yY)Zd1ne);tuSHeFF>w>o+Ks%fu8}iTK zQZl4ME~n!MP&ZbpO<62zo31vU{bZOQJzx2Kxt)@KZ2;MAct@;3cvjR^OcnXg|gRtzRXa9jK&yM>`Wr5c8b3O)RnC+oY5(4n6}c~wT9s! zE-+nxz4d&$SqG?h8Y%vXtfZRV6#Hku1zR?0#-a`E{8HOGXc?lqk}IV!nFA7eE*)%G zX6CZ0EOx?5PYvk5p}LZ5gFnnLa9%aXk+S0dmca4hQO@3s zt2K~Tc$?7~4}uZh(%7Wq8PjjSztd&nyv;)fhS#u;Qs++C=(Pl29PzEk^vU0@Y$&`0 zec@ha&F0YRS#@ER!tzt>9GKoHnfMcb zjMzsCr6uD{n&kx6SC&iMi1d z@+?_)nmuM1D~6^9I78%p?E%x3Ky`G`P8fsjBQF6atHCFG;uLTCRBHZ-=|;dzA^0{k zsUh>W<6Te$e0jr<7_2&Ax)P{vi3J>g*yV#4L#$bD5XOm-#)^*|?$JK31ge#F6op9} zd-l9=_8L1;iF7y}KLr*)t^}%k>WuwJ~91Q!?=Wn%VCIfFH)gf3pQwE{Jl1{vFN^)!@RS z-K+A>zl~i=J7KyKz1uT`(FF&8)hr+f9DiO~NZ`cPnN)ee^!1KZDA+yNP8%FJvl?h} ziib;K=T-I@Kcl)66XsyC>bjtYaSGWUN2g?t`&1CUGpZXgVTjwxNay_0}f!3Q||aC6dm)CO}f8zh#M2>WmZbtTlYRCnEsE$-fbMvorwwMVPc z**)tB>PlJK(gD-05-gUXtwXgJ1&J!)z&MSky$)1Yimi5m^IIZ8SbN!GN~^#RC->QR zIQW^bZ%rZn6UnAK&kj+{_C^K)0|vUb)S=pEIAv@Q)RnOC?p-1Xf{vYY8jhDfl+)z_ zPY!qNM0F+Ew6hsioI?bEk~3$|F)oKT&d%`~hsegqrM2p>ctHrjl3__l5~zk83rkjq zKTX#8j_Sr*`Cw%n2S`E1NRRBDHCF*aA2GWh#PPbcRx}9iAnQdeP$%FLj@*Cy_Sa(>fQ#sfl zcc|4;@Xnavazch7wccau(-;NKwVrAo-)jxwwswjE+#9SnzGRW>QQ^z8|*lFMkI~c(XUe5fyX_{=-unrDo0_w5Z+( zyA9JW{d-&ei3-1c0hAT%aYhTae9yv!V0?0TpRTb#R15t8^+u%Nh$>h&JUfG?!%}gc zb%?2kxNPq+A109gK=t>10Tz^aqTJ2%HGi-}wsf$!6!Ttx8C>cF>zyXUM^H11>@=#x zU_oFLYT+Ff7?h-${J5>&ne%f51rnYIGiq|{+FD9M6>r)~y?9Oko&kJtU^R!Zacz&=GPYQNJU*d%=YHx4N59l6bF)t88JEp z@o`uE<(>QCvss9E{R*)5mP$&a^W?eV;i>4uV2f|4-nq~_yJg0}SP++UVr6)!c)vik zXcg9f&YnTtSgORpVZ!SU5*m7Co48KR0>9Iq`VfCZ_0Ij-d8rZ{Uop5GgED8UEBe3G zTIG3s2yXrWbz`Y|WNBl9T~bz`fT-g`)~2SwG1y15@XnR&*(x~H!sw|8yfZA9fg=Pb zi`Tx}!>oiKpl&QxwFsr_p>Z#{iwCW#F>tD$t5^-^akSW7 zXAiB^hgn=dK;2lXf}f;eu;X2HrmeoWSKw=7dVT1n_#M?9TNQ=nXmg0IsT^dOW+`ib z3HJVa=w$H&)RkSeJ(ircP(oK{1n z?v~WH$E%-+TO}LwVNy64!f?UTy@JAgWJV#>sJ`EbA~vX*Y)dJYd(b{3 zsIsyy!x5+!%`~$=KwY6QC9)NeOf9bA$m2^> zM-HGboJVnTf#XThM^fjdEu!A{U-z0RtgPNay`Ol5Bj^iUM!e#+V zWvze1jr4Fqb%nZlTX;uhPsSX7A3*AdX|ifSZnX63rJKCo~(Ytum?~)hhJ*sS*oTpr73Ck01JPTHZNE=PFCyz z<`QBC!nsNBC63a^XwxM)!%dr%KXKiFRp%>M)!=LdpB6sgM6lA{=j{G}DCPfg#WpOd z5M4~F9zhlqMPoZ(iQ8C;N?u$c`HaP@k`WTHr0& z#nc1Kd}GN9_6Ox0YL1fTX{Fx&`OB3v1!kUNRIn>ILaqhWok?aa1_5I@gSufDV8W*g z9J6ByE2lD7--`ezZl6DY?jKRzxPa65IQr<;T?m(UUJ}qWe9Tg7iGH+bM3ay3JnG9Tcp99RqghFjzOTj@qB~?5rqdOlg zxW8n>MyL@Nk}s2G6<3*UG2&*N?GI2_6zZ#tXi8zqbtsOR0%LKwCI#81QSCdZCqs76 z#%l7>K?XExaHTbW(Vi4SLaWc5FLA*1uivg{dCra;gF}%-6vsTh4<}8sbOyJ{oq9+0 zXhiavw0Cxl7x1c7SAx{(HnZ`KMA(Jybfz8+Nj_8KV#RRbU_;{K1O5}!eTm1IzZY^n|WnK>yfB`vdS zFmwLomcKojYVi}EhC@-qs%eZIEaIE2gaij1twUU#L0yUa!yYh{=OG!C$(6CC+B`N; zTV6+0-}{%}Z@52mkfISHBACY)`+|dJ-W8J=>ZaGs4^%fm`H%-Y(!t|Ir?lo$5)Sz? zJ}ixsH2v*=j#2OsdKov*XDpKMF2F$bltP0(b(`$(54rUy&9gc;N2_cG&lJ?^H47i# zeVAiL{Xab5&os~Y|Nj@Y234TLN$9v!SSXlj9OUZDXzYaf*Z=!}``dp#O!7QqVkv*h zy+i{ASWx9ISJ#KeVBE(orbj8BM@WN}aWmKGvQN2xafnnHe6-C$)^dMMCqE!Puslah z2A-ywy-H_DX>nlPm_t(UZ1u4zE&jmt;A!uOshCT?I2G&`>zk9M9vGU2jshY0YufgK z>4AqmVoH`>FxlY*WQrMurG=V$Yjb{9T>BiDn5PdgP0dy|P)u(w|21oSfqIg|eBQiNoxo-~r~yp_=cwb? zqvlj5h``~Pf4O3!8VH&}HdXdJh(%b;K{GmkMOahu*Qquim~NN@aI&rw7ftFC<_yo;oQY@OpV~L0|2{C?V7^%lgh^`? zrsx;e4Q4+%5MshyZcpn>{uSi2gwJpl0yQ$$gugqEoSRv9QHQ3PCH&i{N86Er?#I zzTRO5Ie1+H;=8n189l1P1^SVbIPmp@LHK%!8x-f&6>;9ot-`lg#&*S}FyWAY)1E?& zulDZ;Pl`uSt{5&~i?x&`HPs$L7qr0tRj|)~I8|T2+}S|5U3t|zrsP4U=15=*3ko@N zLpLGb4^&SACueS#quDSo+N#M)vx6h_p0KAl@9|*MA4Pc2rs@^z@l1Kp9@$ddwd}+u zd^69uWjrm^qp;W6P}LwlPDoE`yvFwn^EJ;b z5D>OoG{85B#@RhrfaI*i)}1>X!x zrVW|i_N0ZNZdj>*1=?$INn9yPVm7d>;RpNSa>)9gwXD`}gk2ZT(PSWTy_$Uu9HhP| zVG78nmc2D!cb*z&WXYL-=Lxc)s2Z#MGjyKuPaQGcSSZIqjgWiATG!+>+VInwy1Jm0 zHzk)ZPy>JEjYk-soPf_eEVvHO@s_@cOJy*PW^c{cc>C9X4a3RoW45yZ#cWXMzGn|> z#eN@dF+=hQ>V`88UOhR5xsA%}dH~mQ`@+*mxG-DylOV zhjX=;3@=cBHtfS3R!~TfSqiLalueS+3l)gxjYN&v^VH=tsME|1rqidU z5%Nkbthgr$#B{@Y`i5VyTWM+#$AZm-+LNIUDq@YiCkgBAj-RPDv$(jHG<14=4%+Er zfcxRI$foDjAE0h5RnL9l;w@%JXNSAk>hvW5CksJd53!B)b|X~QEBo?FOI9m(ae{(+ z&b@_Oiy(gohy3;^8S)H@?+ihY)&ukuD3nB4 zPdK08B~*Vp=ufIS&Y_LP#u^-n)`pi{t0EYGn@`}Hv2m77cZC^2z_kbUjO&Ddr-BtRJk@ms`dY3`OCMYv&-ODhr~$YfpYy2QfZm1OnC_Qw1jAlFML! z2{XbOd*>Q%WKOUX63b>7;Gd{&ELQP#&8kzIX-!>iRRht2&MIN$&Gexctgm*(EL0dL zaHu+SuMUD4u4n3mpjZuF`oPn_e!G#o0pZdtTEjJredrj_?>YJ!AtHP^o%OHZ{{8j) zl?=R0;u+!iLXIf?;Hj=>@I5_;@29v<4)9Yd9B z<|La!8iO_B03i51fg1H1pihsOZY-3jhwF`#(crq23B$92A{V|x$fo}YL4CS^^8h)D z)L}480fr$L@y_b#SUXsAsINVx`tp^l9fEP3KIdgPS|i=3x?lIBe?#>ISBsMh-L0lA(*C_DY{V48elc1%kZ4c%QE* z_JErQPG>_k6)~~G)I1Lv7^M4sSpV~EUvDhaE0&RA#2d4x@r4jvf+;QDI1A;lbywbK zV^;VU2B#_5p|hB;k<}^$ApG-QGXT<+(**bL!RT@jj^}RD`lu;&Mm)-Y>4E+8ya6e5 z){ykHT3&2%W$XYn-m5=AsP;j{&+Ens@0_o$;Fs0-#sJA~mK;cee?6}qPWZZVnvy!# zp@6F|b0wC1sKcQWjWzqS84>&g(~Z3gYzf1b{(XkhLJm#BTI>(O+S7R4yBnCqaGE-F zi-7(bS$O~QRHr0-jig{Dw_1V=9Q_bVB&I8SC!E0xkK3h3EycyyLKi6HU?c*2Q}|NY7fXwLXmT0YGQ z2#}uI0~TtrmH#|{6cPf`jYB@Iu&_!?kHNbL>crlJ(4CPZ;KM%JLrhm3ULVkxY%WRVB#p?8ej_sIEsR^*v!MPoNCl{s;c<>b|vx0Pt`hHA7CjA z*Ui3IJv3NHR1QJS&)&2V=EzR7OJ=cH zBdk=^_o2>ER1kiLaGQ9ojPN6vsJxH`xrK_3AV8Eia~R5Mx!^p(a27ihegV{##L~gR3$choijOsl zazt5QT3qUX-cAd3$Kh4ZPwsif!tv6>mtx76v9$By_!L&TlE-2iKrEp%q0z0XD|vzm zLnVy0$~x}d6^A!+mny-*EY&sKs!d?9Ao)0XA)k!quXh~Y;LMuU*NjkAAmI^4z_(>R zS;=P$b;aSO9QhyEvEEyROm{<#1Ahb@As#+90W4^>`SpN=cY_IeJ#1Ddzg9OUR>q1Khn3>^)Z%>*6pRZn%5Itl$G%*WdtTmlugo=M~+VfK5IwG5~ z6~_)zQTGpv0CfYCFWK6Q^GXRza!X*DR$@-Z35xrtDPsEc<%U5>p1oQvga6{lH$ZdX zDiMY&kF=SN_KxbweCeM^R2Iz|ICUii0Y_+m&@LlK2=*CDIGpqEcg(pt_Q9WCyMp<) zmR*UxfVG%+p&hCO-oCGI-CdFCumjaawqt=-=rKz1Gi8g+%#V8s^Frlspu!oN;85C_ zs|9yQryM#IX>nHCUNI2WjSWn$rm0i&YL%@J4Ts4bJRd1l2zycd0(C=!lC*EmYEmW)fx|FdoNH|^6l!HoB)_o zXN_ZJALRfSm^qG9HdANcQQh%0;84@D&goW})fHRC`m+C}?aFrSx^dtyX{Yox1CbPy z0PQT@H*x0gr+6I9<5gbhI6yl-0SGOBr7DRmLL`G9m&;=nf(qeNbXf797_9D;Q#QWT zmX_bbl-m=r#}s0oC|FNPiW>rA&LFi4b=z8%c>qrDL4}-uD^~;atyUk?EpR@+JoBj= zlXJf?g;&t241V_{PlKS3>CcWnqo*F=mh5X(e}4QNF@uI*%4gM_S8FQ`N_jMwW3wU^ zf8j~%$xCM4x_{Fp2i~I!Db+d0JG_>*m$SY`k7If9H?`XHKVLDHmZmxRB9jqR#HqY%Pl7`w??J6# zwa;DLfe*)xY#rDA_YtwEnhMwfVX9OIXu!Qg&WM6t^|Qy=?`3k3DN*g@-6SjNFsyEX zx--58`31gQFAF`USir#XQUL_W8l0*wF2t@(kXc&36zyR zueG<3LMj$;tU!aBj}0`{w9y=;z&I=Zc&P&Y4AC&$2>aeWmDAChSNH1#OKCL8EA98n z>NBP+TwCuz$;KPdbkdq7&k0^vR{jZ2kRhe$2h=m>ZkEZEX7^YkJ=rbJGagOQ&7@S-w6arf#$a zMV^n;b)0mTQfAV+@r}1Hzf4`olOvS)SOoDhJBaTXt-7PeYGZ(+-_jEiQb>RH4=sZ# zUsEu7b#Av2S6^2Ll632PrROn)WZG;jV_CWPot9$WW>o^wR4%8EH=We~2`VH77u0t$ zLu(dLU%wzPh=;s=O;ec{%zTB^FsVIl#oXSiRx!w`vL@(fD>C-wtqLJYNP4387)k{& zo}10Q^@zFa`Z;UxS?_OH5LAD}BF}8)sX(17fbyQl^SS_L2WpTnzB(RLNRfcsl7XC5 zaFZ%bwO8;15l_H5gD=G36;fEGr*Gh8ZBos6)>ZIXF&56Y_rBoxE2L6yQ}!plIt_AN z7N-vMq&e1vVBm`xr^ghrqTI`ztfb{Gp|p)=o`clDfKRR$OOGe05Zr$Roioplf|_#1 zDK3zq58S><#wFL>qlyS>YQdPWCvm#57N*U5!C9Ex-gT#oc6nKhKX3AsX|4iH2Vjn3 zE4Sq(mwimg`N4mgxF3S-Je`hd$8nRh0TjmQIB2d>g_H|)&Td?sY1dP(pTDuic1@XlZ@rr zf#T$yPJ?l{eC8o|1Iq2tUVg1jAq@&C-9E6)S3ascJ4qrZ=~0 z@2|}fR7l+yL}u~+dVDwo0-T^*oggn(uibRMULl2FMD;B7=kyLp0{eXWfp($R`qX?| z<}sCDOKg&!$DRyzVv5-rA#?)2565buYmB4O{I|DR#e2~ z0V7=^ER2t3q3(azQE6?cz->F%+p!l^J=D*tsap1xRjH0y*{o*mTiw`(<#JDkphB7h*Hd?D z%_^5QdtNM>4?@-BO&IP$#WZ&YWKscZQ81`ufGH?abtkf6lP@VY9#u#qQ)PqBlH+2##dI;eWeHm&4R4%G`Hyh2`vQaZJGlVaeLv@-_d zvz)Z4x1rDP#ojCENj7J%A<{)WCmH?~-+4<|&uD+`!tP!{PqM2|lMEd1txM74h1urr zu6vlZ{Qi;}K?SYyIi+m3Yvbx{NL}pzk~86X<6Y_XA#8ZEeSc*UDp6dC}pRM zsnz~^{fGBg2tnxX28ealK?gv_i`Nl>>b1_^*YT3@D&Kw&S?X1-YMn%07ywS!73WI> zsX7pTbzgelBB%&FS4VF;n6@O_%{NsQ5>S8L8Ejn?gEz#EagUkFy{zi+40AA0tI&Jh z`*geCtG(9@PgEgD#l0QHB%X5W+-n{IUbP`IEMHPu5L5_BSbRK-WjLFn+N8+tUQJut zWb2nARSznJBart{o^A~&Jb;=V>mHl$?454r{XTmkBL!ha!V`moQ!l51`4lR3v*mv} zTD`Qx_NXEjIvDs$?#f_rFM@Uaz@!VUIeJZFyrY?WIvzNkXFNp54q`sd&B9?h#uTov9vME6P9O=7Q z#Q`nWF3{<-7or*za6kr;bxv#euzDo}uj8#b>D`WW*fCUe*I$JJ)@I7Sm+VYLJE7Xg)J!fS;IC9#5 z_HKZB;pmvWh;gbmPSWyp3HJKk{IuHxZgRzP&)1kD#!12L7#gd9w^*^23@fV4Rpwdi zTyDx<-+zsWX<|8JsEXJCopaxjq`QwPYwPUw{e$s?*jYGcQ6kr_3&!lWZi3HptHE)D1O?1x`M};t=m|gKSEM*byh*B>W0=%vzT`s;M|fC?~I;6{pN|4TIAMLhy>{A@`kbwCuCSS`SIa&)f-zv3t{h_e;i< zLwZP1i@YLK)!&TTTGJR(bkQtx4!I~%$Mle*&;eW+c~<4Tc>1Q>6VVlrWG$CuQwQ}B z{B-{c=>sG)6=jT2>KG}AnSo7s$u@my3`6$>va-jv?bQrWf9@3FJwl84b^nD z1A(l2&rIIr;MAJOs)~RhOvj~vQ0}E644t{wISVBy_9+`0xx1$^t8K^|y3bw&QQ&!$ zz%VD47MIy_+Fkd_M}QBu@3R;3%9mYx61&Mc;rC#Z0~Mh?Q<~>;B5TMpcY=vT{|NyDep3-xc`2z}xHc zrs8s8cpAje-LbckKoIX*wvET|YExa!Q{L8X1IDa%#<_>x)&QB6@dE}A)Ji(!R;uNa zhv$eMGJk2W0xDN&V%JTp830-!liBNw=I!W<*?(YAT8PH!&9=9HGGC@%Wz=~P?c05) z#;hp?ginP)9xmO;?PEM+ltF4Ojx%Jt-*$%Bz&E9XnUw;dE zYcQY`egYUAK)|U`$tfQ&PAse2wf?Wah1{QelT>_h#;yXvAl}Bf zOViSB#oI@%ly#AR)tP__U%KV%BveBgtQpU2#n7HJ_kP^)S> zpeW)abG(#xW_+J=!MeJ%L<$)s?a;)SDJ_-AsAH>T?;k~fDr59pzQ*U*i9mu>Gj!)B z2r8l77R~8K2xUyS1-w1@f5yO*7pk-C;J&fKz2{G{VO-hWlG3F)i+q0j?XQq$tD~ju z#FI5uNWP@UE1ldX+Z(sNzY&&C`3P}^-@Ue89il)}NHBQQ|A%un&btfU{Pz0$gct}< zAULI-%4BSRJ8#PEoti8S@L{sc@$w28DC{_h@|>{Sh}Xo@2A|Sgp=`>*uS-nwiU{fy z;8Y)!vA`#Uf{x}2BC9tqE*HO#Z!i7&CBy)FN;*BaF}(q2T|+00VMJ2qY?^LP*}5Zw zQg85qP|6y+fTJ5?Lp;nny0(jPA%Z#)r*ZS%sh;Y8)(+6US;OkWE?i!I<g)3} z!qvabBH~YJR#)evrnQUUQ-=QQ*9HiPD#FztP%fnj0k3p7ojMZ9>02Sz>%5d%JpSuH zMGV%#k;k@_&VoYDqjD}DRR{Sz^YWzjBdmzga#vjM&638LqW}@=f!wMS(PAzyMkznS zDiLpgwFxL%@dtmm(xKkT7{_9z;nf!xef1-(8j_{UcIK#qJ=+G-Cfn?dfT5u4dUc0? zafIC?m9?c!^CYFAgn$wRMHP^Uz2s6W<3UB#^jV^%kP($zTHfRaDrXjhlE;~oZ+%EC zhA;^Drf1sp)s);fdvO_5tSaFgfQ%kiOOC@x9jwpnT0U|eVFD63;nkJq6ovGk`kwX z(>9aaRuc$marUtMvhmi%DTpwfjU`Rn6Jxy-ZY@51vsIv0^Ge%WR6&G6k2eeDREABh z(Dc}VTnlw@EwK216IR4%k#{HC1Jp{qA5h-ldIJQ$EKz5G|01jq!Z3GhZk|89;84?n zAf!4rs}!M2xAPxiMG%HTo>MX_gsD}3^^Aa~Q1P-i7G1vhdwbuq2*NM`o?b@a>2Urq z)AM#0hr{BX2jn7gEQT;J^8sFgCvVPfV77TNq+#>oo>^`|{r*=7wu7nfZrFvR_hmR@ z?3_}|k6VU|KOXOo@B6zn>gg_dP7>;vL2jS7}0NKi!UhS!on7 zVfN%fOx)@Hr2d|RhWHXdElB?#ZCA2fhpj7riQokCb2xyp>d98Fy)D+cTLp>9%7Tyy8WSM9 zPKBfy`LasDbA9ivxJo0&{L}oeEl{Ah@d=nufxP4MJEX!v_x%T%9342 zCgAY=5_@is%>xst5n8m9sVC;3t`2x}Pv}9l+vd6KU7rOG>Cw2T=kb^ae^Oj+adJ|) zywU)Z$JR~IfC!F0Yvm9kY~Sgru3p6UkxNq7bjej}3o*`83_7j%%)V29vz6XXfm6UI zFOXb{E||cKFw*EX!F_iVZ31V$Gp}batK^cm2!*f*bG>U06*Mz8P7MsvR?10ltK?If z(lWSP4(!KXo1__YOdFe|TY%4L+){N^*3x`u8Y zmaDRTY-G01W;3<%n5@XgT$j9Dpn7*fH3X6F zK%n=MRrc<=w`?p(X^1oVIVZp$@>#14lV)?01t3We6_nG)ZK5GTu z6kAXO2?&S%!fY1dEiu%Up34x6_ctfIiZi9&)1x&zXhEN>(1dZ-efVH{nbq>E10Lu|n_=?J<8G%e#68Jb98nSSp!Mn$t!7~$E+F#nw`D|Zrteum^ z`ZO@873O1lOV=8InqB*i`)r;>gY6tJa@Eaoio(jrlxX$ZE_I^o_1$Nsuplv~m0(#i zu|jK}r6Vv`9;(dc$2M34 zTUc1+dm>yF_O|r&T*U0PmW#2M)y__{EI3hw!XEL@u48L|k}UhVU*GH9Tt?hvRydsn z)2asDxl&}B~}vn<_k>sG)PdRnYl!+|t5NAD05&yD@XY5QbN96ZFA zBBi9=d*!UD3i)}`X_pe#7q9Kx@Z~ddc&Q#?{$f|@0nBgL0-1anxO{wu7vU-upAD2;1j;>} zW0|j!*g}NE#MS_p0fqqe(_^JdAFv^oICa3_Jib1EK!azEL$@?50MUauc66}2fH=yOCD zPP7P|hpEsKLF-yu_XX6;4;Oj0y6hP=v$S{ciMW9gpQx#VuRr%sfaGD}U{9P1h`m~} zKCP>W1+tiUmh7Pg}1MYLzirY5aSMT69|0dd83`@y6T$` zi^`nm_L$9J`}970m}j$cG|mYo`h4$y{(Sp$eRCNhYCWt3Ly8kYS!>v5v;qf@ScCt& zbm4g)9?6P=GnY=~^?o=yjnl5+2OyPYgmalF^L{>lxJ>cpOmRNwEsHIl(ifymF%2kGA-f7dyN)<6C@!bIw!A8ij zo;j^w>IVSHBSGTq(t2G9a$&1~AvD9%Ip(yU%$$JRGQD_U%9+U{%&AU&?$%rGK(e(* zEzo|K;_+7>P`t|*5%wL3vz)x@fEx`vwzhV?4V`;^^}rO;fmT5Dn{|a1!B-}8IFjjL z&BYCq2c)RIRWXGN&=G+F3uI#!D2Pryb9v+&E_)}3-9Ac9?7_t@7yEF3=N=>9EQHIH zqW9r}i7u%KhZ{3HKLr?9mA+d};KM;Lb9Y?sf)QS#9JU@fb7i=6DLX+|DZZJ5-j>Nc z2Fkz{1qI>k8q=(NR-0DY*@BZdK-6!TT>KNL0chonA@8%ANJDhl5T99D+!~>!*cJ|6wo7M{cNYhh zO)^J^Hti|29yxw%p0sCPtw_9`I}b>eHC2@(Qg}U8_L5N%f5&NaHVDwm3)O;kRu zD5qv)sTEVr!G6IDQj)SXNP=#7ZdF9(;?cDZ2)uFF1vd5-@B!@Su~iNSHaz#}d(Bsu zD}>P?&7teyFtLAs1BWjUsG3dRAeSC*0QLRVD-Pq$QD-fpY*lvd>7Cj~g>{^t!R4`Dl6siXIVEw@3w|s!W-uKP zFj==cVBq=&Lhs?ZHsHX{_ek3i#NkXE{Apx=aWI1Tx=3(9GlyFns$AESJ+5LFs|XH0N^?xQ^gM zgQNZyR_r;2wjcH%kJnvJE?HsY_$7qHQd1C6an4IQK0y8V`-jI9ea0ayRoNMT zAR-Q0#iw@8W5%;s7V!yKUwo?a`)N6hIF-G4=gzRLQ#XF8$)#?@e!OlE3c)5`cI3dS z`pKGOX$DrqC>})R=CuIIL+%fOlLz6OQf(SvRd+Z;M9%utcw!&+z z)4Dbo*<|sLY410)0w|BA5~aGBvqLd|N@xv2J8pq*g{|qn+-(t+hi^BwnZ|xWV=%!9 z1_d$?{@!im*sd}bpj;9$&(V#=0z7NHfV0@w3M(_s2qE%@>dP1V`15smTzyw<9ov?J zfu-h}GKUS#45nk%(zyDD-_TqtZc6AZ57eIKj+SMz*oMs-jSTe`5rOUP!)x7t1`gzz zyI3wo<_wDHEkLWAlPTgY0{x54W8nhFt#B4ZZFOztY^D|^x1CNvT)KKOfcwjB;o!(> zWv~35k2cQ2g={n&kTwHY#iy~kSRCiPo@r&L2`5`i?}dXI(pIRVdXs9eKfidSK!8Xr zF#B3}TOjsu{no42UUC}j7x4*yR33}96-P0ox^is|CzTzVGNNQ1qf5DDW;|fMx$x); zV7Ztu1D~H^nsSE(Ibm>&;%8uaEZ51lN*pk*bIh7lHq}qIuw?l8Wg^NiTps)$BoI!O zeK|v&vcart%q?-6I9bOvj1!i}a#fDOWKBN{8JBFPM`(obKnN9`*O>W#^NW`U>q*Xt z3v{&vd?3{N7*@7wSt-}+ea>%W9*YK4Ih~wRNT6p8<}Ns+91mZm-b$MY?WfnGxK7EyNASP*-mCCz_hTF(IkTiK{>5)N(^mhxjfqf z+86ud?2sXTf2*Yp?&i>oqNN7v$g<x0oRXfH0S2A_H&ubvDC0C7FmV0O-y6oB|rzWpyWk5%K|H4etYh9)S@e#&WW zXn`8gxo+;3(Ef5-wGR7gSg0zw)@Y5x?l%HyT02&-kWWJMShbyaLpB5Fp6!mvl-ZoM zw_-J@UAYjT;S_j(+-ew|M;sy6zD0WKod3e^Vi}R(lHT+im&ac2mJuh_h75cX45K2X zgQdwnDcsWe{sHFlnwt?U*{o_WFzsr&hsZ)DNPx)!a-ZIilqICthW zYzeDuM0(y0eGZt5na#-IaXHnbu&R?f!$B}vTK61syFdFInv0oPYLVrpmH%EnAX35b zpr%;cwJ!yOzo31%^ex6-;#l&&ptb;pjiov@4=^K+Ed0!peYkkDFvc2{Ll+V>~^UID3bW3)d%rzoEI9*|PaCsniPFj@V;X znw%^L!cO{U4yRj2Pr*Wg&(_}Rv0OvV5r-59G($yQ`t|+;&1KbkLKJEwvfyg?lyvwr z?B(7T*SeIXJ)r&N5(7qEZKk0StiMJ!->MYEGjgtfsOTr0#$P@$Alpi!hddTcOrb!> zX(wZkLA-GUJ_pRj%(Uk6=$RdgvO>++?XhJnV>R2C<`Mrub1^gK^n?>8g1DN zk&QANJnv^#&FgRmHqD0g-Q^S}xY^R96}|(c2z>JPNbxr`msOKpCN@&%Y*jQv(bdgf z)>-m@)E4in_U5M4i*e=fpDCzf#22^?S&J1>JA6Xey}2oM7(Twi)|8R2Vp?HkFtH5- z#L`__3I2xWqdD0stn6T%(ifXrBBvduSiZA+y}cy?e-6sEr=CNv-eKfIj1&%_krdbj%-}hLd z@7vV$2Q(k09s}fg9qRWgi^eTTbOKTrMTcf(0`iP{b-ZdzwNZXW=NC zDAw+A{mo6O4_0g$-9#L6I%|a^n~30e<_yC7IcP3{APPHmM2PdaM?2}H3Aa`_aB1v+ zdVS@8Ky&HZiiHWG!{rZn*!;M(;=JObS|{Sbr*OHjw7J+r3*^687m$pFP|9{0y_cQJ zr|jRWD1r9qHmMuNqYD>h8@=saLoQJC(<>=P*`}hy&Qq$zH*qQN(XP zN0!_VElwEi0| zvWT5OMg}^NGZHoIJ-;CAeuOFYdU^u4ofF9@`)gvwvR9~Kf8@Vk3bavTV3jj}$-6SG zj4WApgCu~2B5jRy%1aX(v^iI=*}JqX>d>2YNtRX@1Oaz97{BY3A2CYZmTU6~cEJb~ z$E%=FJBMlqgbtCD( z=<#l`(uf}CC&`E#pn zm{grtnhjtfgfUqGu}Hn|q`6kG+5-JFhL^@|lj~u|gDXUrfZpVhNA)TLwdJZw@y!B@ z#GqYS*`F^lNt}B@G7^7(+qjlB!ahtVx8#d|)=Q)Izi`Ezm<`HC6QRFWAl#)?U_@-| zB_lswfqjd+az#+hZs1Tli<>VRVS9@CtFTP>Dvb|lL3d$3YYGup+BtKW9>2D*)|OVP z_ki&&jA48A4`GEt!ujiyy~G<=s@Im(W%rBf4`?Byw!s#c^;0^3a=BZuHLs2KO8h=n zxpd}upv7#?4yGf1h)q~;z4mj;IMC^cBHiR#v-*K6VslCxa#k8-QZa6JkSRf5mHd2` z?_BW%SjaL<1Ws}4^rp5TvAryJud0FU;_R;L`hw^K zR|v<>i_bVpyHSA_cc+fpr=K1}ue=cdqpl6XD!6QX-qhcJD7c-%5qEzWtL2ei8L^mV zdu0jOG)<+vTj>qDd^0{YI(k3*{1Zg|6*C5DTOoO~bT89W_xR!EWk9NTVitAB%1GfV zlrU)E8iN<2L+`rCFqM3Lu=4>dVu7VRyw4W5mc^TT415Oa?>A0~>C(;k0T!Z_ikD*4 zUd*2ZBumwQn`|kahEZhjv{zt-RJGeEbvxHjUhm*Hg-@}~@hh*zFAY~r1Sy=Kuv{d~ISi}PJ-lYhoC3l4QS!h7Ujg$7+x_ZBKBywOe^p!AJDea@! zg@e5cE_ZLWx=tI2BKOQ4RmlY*ayo4!@4BIJOYNP1hx=zkn2dBiAN~_n@8E4-ksWQX zw7ox|G?3|?>fAP%wzsHz>jcQsaIeSQB z=;7=RkcA6*qmApUgzqP!y;PkC^dUh6EzBZvWm6CH^9Tlxuh(zie?)YbLX;9My>GXM zIe0NqE??I5}#&_3Bl^?%C9Na*;$V(9 zL3LzIXU0!nJsy935Ak1VyW<~c%ol#yb_3skPQ243ans@3s*15fA8sOQ-sx%$no`yR z9bAHBbHF4nE$09#WL5RL^IoS6o36-8!b*2f#mo%)bj{8|ZR;(AfKojMehk`Bt9ADc zX}Y(!5xs@a=Z&_79F#Zjs5q9+ItW10a4UtjcOlIu-wu5rU?KJL-iWU*$Q~?p);3aq zsz<05e9Wocw&B~aKVKtEFuYbiZOFut6OB`+?wO?~hQ^-OUx5{3HnB?`!d~3Uc{68) zm<5UH-raYXTP+1(MGV%Mv-mx7v1SEe~p<6!KF_LP`!uPwxya&ZsRmx>$?VgSeey zq7$f$>oope7FNaKudwpWS!MCr-QPd?NlkMNG|#nt!hSJSn7l^htyvQmS zr0~@w-Cwdfwy+C!@4j^W(b!OLRB(E2LP!Aa^wKeauV4$SF>!vMPxG^zJSL?j%WpMC zSMmDV7qEp4+0pE2+q#KJ^$JMrQXccz!QQ>9j^FER2rdJom`r_bmp{j*=E`kj%n;=2 z)!OLaA?Jc;X*KY`KJ4j#{mID_IyXPD?4p;mO4~8*X`nmmE@wz@Bqx#ESRj|Lc6xTF zo-3*tF|-A0QFslnLx9d;BqyK(J8N0nCGOi+3+bcL2eh1rs_ZS(AOl0K4#pD)G zKVU_yt!BuN5Ra!r>kr^sjOc1^%`+7d_Kxd!#4P%2zBL}(IwT?Qeqk6e)3u}|Nf#ph zzzVtRM1b#LTu!%U&8Akc3-F7?CCl~r8b-mHOu>pdiyCfEWJ!0c-y^tz?hYC3-VDI279-t3(mS4gm*)um6WRxw(BhmJMYc0bcgd)w_1zymAfF32lB zvp4PS)w?dAO+34mGCFzH_A9VLmKSxztD0T-q*>aYJ^RI@`%ocQ-ppA(fJNY9gaXA# zHTGH-bNj)6o{KH2#Usdd!1mXOCO*i7ZYpKj_CW~C$)B)p@8Nd5{^oKzZu_6VBQA>- zOX@W5jkBBAho?TPCEE!cLHg}p-S+nw0i=o5tK8}w1IgNJWH-+xVEG`5x8`Gj6;f?8 zn3x7tEbc-_8+5jN3<~syLKj`*7Nm8=HuTfo&Z|Iwl|e}RO{_B8VuVs{mv-Jj_5SuA zLb_<@d~z>tT?upu_s*%>aD|XAZ)Wn?A=So5Di=2@SR%6aHYCXxaD|XA zzxl~dn@yT~A2wTHs0*41`dV+UP4=c1LFvn+Av}b#ck#ASZH>;1(Mlbf=r)UQG4X-C zs2^#6FeOBW<~~2*4?cfJZZ&%&sBbX`BtvVV%9&Q_#)SX5@nTvC7!@@2K7%2&xphzm zDAp>owrrJhpX_z1e!hFgjn}*d9Yyrvev8P~5F2Ul?zN|bdoPgOZQqVh9aabn%*Zsd zX*!+Br7aLHO2gm53Fh(Ez3PD#;(>JB%B?zo;X_ni{+1m=dsQ)Y_m%r321)B(_lE4z z)p+~$x<7&*CqZm0kX~ucTa>g;{=(P^srbVrB<;y!LRu8Mn)~Id@xc`m<&D7@$Zzxb zq=tOR;y_dHTvC<$@`{nx+PNYW5ZAQkN~16A#YuKDuUT(5vk$C@RbR9m(K1S@v{)5? zaICuH(2};>&BNydR)oZ`%8=FzxF#kNyK&Uoyht5+y7KiX{4GeqV*6R&+YgxMPTod^ z6Y^uKpkbD;_Xcl43bqqgRacn^^^2i<@;>D9b<@dOURYc)LQ!(lO?m8{1vxua!ZtAP zzhr(QaVbi*w-}*F$9hl0FkWd)nc32Rppv~i?m2R9XU=aiLJ_K~C91WIY1#Xh%0Ykt z=W2`b%{6XC3B_IO2Iupa#By34W0GQXy1OW7{-pp1utJ0)GGCo*8=ZMb)7BF>%e{arhC(a@tKmw$Wsvx@NB}g;^8Q6#ZZ#26 zn(S<(YB|+vYe`d~RZ#Zx^xu3R7j6 zKUL9@AuhbT__VqCFf z+-Oy8=ZqlHkPT<^AEE0DpfF*^t>y)V*deBsk2hUNqfkEu>YuLWRB_6zwC84jn>&>! zN7>C%o?;t6X)jDJj2pUoj9P0T4{3Rz@lZ^Ncp+O3>7Or0%6utrkBUwV zvDZtuLWn)0sV;~MRL9nO?H?1S&$i#_``i2=pyOA+3!WOyI0^Z_*ooCDT@FV(vd;yLjy< zGPqyI&U41;>-tnZPN$91$zN=oVl=o54Y%)7-iWK(ueI25Le0C6QYUSlH-cF0Q@Vmo z*Lg~|d3(kir_{XK5=$u|CmM1O@-{*J<8!wN&6jt2>*x9P&j>}-lW;j8&c2XJ!q)X8aB?HZhvSt?jnyss-gH!t8{UGksb6%N{ z6}fKgIxjKy4qy$U|MNxlZOxE11z`b3watUTQ_SzZ;d_HND{d42c~JlMB?eRi8>NFk z$7Hci=rM4Ao2=~NV%1Cc)1Ni74Mg77oJ-}hPx^T>0ZQ zwx*4A7=ZyqYq*+#BBNRmLvKFR9zjE%;ekzI?;Ypw-g2yC_qD~wkh9>b;W{Mm5dv{rjZISy;PP#g#V+3 z)Fic4HpJ;_wIr6OOv6hT_kz0MOLGQye+t=wf-eiJ7kG{>-Au|(WkO72FP4kj2QUFw z#InM_j)k?xEE${~ie3@ry*uF&>X%-7LC@O`IMgOE;!1vjL8mw{w}7|o^<`H~5t=K3 zaQ20NfG)JpfP~=fcb@)YQH?GN0-VskMr=T@#y|k5MJ!{8=(L^B;zrdQHS6bL{R34< z#cB2Wqh;Vztqx41KQygbI=5AC9j*N_O~h+?j1;KLD&mHLr!b^nVG>JT0zvk9k--Bh zM9WL*LwPEO>d2JIUAfqRn%HMun3bc7pnKqdc9~n1mPcu+_oUgIS&#j+WxiBCJfK4E zQFi0Gdnr_%B|~$$g~nbOHt4PEVt?O1Lmq`duXAdM1ljwXwW9_CI9DF^ECeCKO-FSfU|MbX$W%aQ-kc&#+0)JmMZ4iiMBj_|OWrP}Zfcnl`!kdXGyrKebo; z3Rt+BM1rlrnf4cT=6!zn;5`Edo?tX-2n7wK?lgMIfPTn|dXazpvdUwzdIh~n$j>F5 zqbz{M*^6T>S<>yI>ASzXi2meOmz8as!!Qbm>U4z9Wnj+TZgmc{$t4G7raxeRPWX07 zs+;IV5hiwx+S?_t`@D9I)~9ilPRtx!R;7k6u^e4(hIy%or%fIUl{b~4=V_b>93#7m zLQv2_-K(`rVetO@AD8j5HKt<%n4SVWT@rQOvISiWk?NwyOq*P42ej9m7w1}OY}%)A zI^Tw`Q?Y$s9wBIyi=WGZJ5>gMPPM1fTv{y)$Ce@eU0Pacm5)z>gN|^r$?CSiodFkg zz|Ub@zKGxLkL`k9xGb?}^Z0D<9Q%WTt*$TQtif(;O=HX3oEVSki1*M1<&^ z8Z}qlz5Iz)F6F?$2$FM!hY3hSh@+&lGY~R>a!NEdv32Ro90`ZRYUV?OI%torm|rVSB*m$I92^o+$}^P%!` z)Ocfj38A0s%_G|!=?cexPJnkogN{|DJWDG$v2fh3(P)%Q?_7Bnfx*!=g*IvhOpu|f zR9-21$$_8i!(*waB#bp#zy~cKHj#6x#5hY=2$nBsfkwGRP@YEo1y?| zU5t8sKDNiCi)zvXzpgz#i%vk4N0>VdPT-Ks_C2j~ATw@M#VM;Szs4- zF7n<_vpnk3s&tNSe0Ezc>&Pwv*(WuyQ^3I6y~5KfpCg#yR%e$w5V<6xxg6K#PA|p3%-_APFLQzR|##WOWo@J zKNr6`^{5rF;{obkYS<;m0ra<#hh$#fO=*+MLgguIPKk?uPbDV~4))G=2DMf9zBv1* z%QUz+SYgjv`+AUg!2V3Bjd4;rV-VIPv_VB_x|u&tTAg2 zSeekPS~QtwBOU~}`B|~H*FoWFmP`73YN~O6>Q3QD>xoAKA>N8`{cvG2KRl*#4J!(K zpkW>xEg)hxJ|uG(P&(_ThWhR2hfD3mDI993d7qRvP(o;Ff|F7em2Wq%ndpc8X%0Y~2FmtMO7}^8WePdh^JB^(0WK9T3Dzr;6-zUO7Aq+!QSEbx4PQ zRi7^JA+;~$;|dF!nNlB55$F%+_SI7_>2CvF9FMn$s^Rq9;POFIiwVh3$KXrE!qQ!W z0<8LcxR`|u2m@pTx^zO&b3z5#Dy0?GJ}*xqOMR@`qV2TO8k^D&#krmrw41Y8ksNQu zdiro%t$}1G{TvD-Q%#0#2j%EEQg1VV7h%`GKCWc|4J+rinRY_AT1OZ?+8IUkI#uUw z@AK2;o~n((+o=%X`0JF=S}znYhx?y+8=Uc+Q0ZgX7^yd#+cXL%`~opp9x!$w9mY#7 z==Y`HeVnUu-orxv(cJ{DM%`w~)%IvbE@dZg>a$efdnv57tOcr#WMn~(D+hjm=v6=` zZg)dYR%wzzkUmYC_O)8GJ(s0J3C8$3n7(~;a(6Hqv(1;R9dIP;?wJ~lykws>yv{ps zznoTThtxpfb3AKF;Y5g;yKqcdgY*A^Q6BYi3cdxOs-qvQ(qWG7lQ-FMM6H*ay|>>! zOQjr7gD91Ptud&+4JuK=#O7Ilsa!^Qd_J5GU@`zasw~3WVG~YWC;^!C^e{LC@_K9K zW0u*0K~i>GQUetZCrB9bw5DPE0{uQ8PDfA+;U~w++32tJ|9k} zP*Mh(N}QCo@N2J^u_kacRyd&V+)eVuQBV|=Wt zp)F;Vs%3e0!2-%e4)<*}0{LAoMD6Fh2PedFliDZf>M&UY-XsfTJ}=8K_EKZ@{%|r1 zR9Q%sbI6U8wRd5@UT0H(&%M4zG4J+pGAiw5bCx(xKN~S3H!zH}jy^RZE-U3@RBfQA zR5C!Il7(G7NzWK%gdWPcOu~G;>8FpZNR5dK;5%qtC-%kf+bT&D0>*sZcwh_vOP5iY zd@2RgQY4-_7S7zH%Bae2?Z`!=`Dv9$r(&tfnmEe|95t+lpdfjFR{*X(4vym=Smh$Y zs&O!K43vF^K z_CTsxWb}c)4o6zmx)teNYhU9=1$|bELfQ*x51FRt6DDf}5)ySW4v{~9V3bew*H|gV zl0{;~MxHkCDTGn{)90l~&eqS*zdY*Xk}Tt3$v#)AsVd(G0gqcrx z@@lyZr4TfNX51}VFKJUR<7Sh`(K`(Uz5z|Of>ay=G7fd^TV?U3UBrf9lLtls_6)W6 z$Ud9E!D6+BJvs{t^Qo6U#rL_^HxF4YEvtmy=tk#%w2&(>Xg@1*2vo-h|G+92ODYGRXb{kf(MoD|nU?UMSswUv7|`(I_o_X$kiaB17+2!p&2@Po`LfHytURja zx%pm`XFz^ViohNe^d5NY((DbhzPb38fzu=r9KACO{C&r@3jT0p02`M-vC6}@HdswA z)CbLfR?=e4&N6(y5CV=%5dF_AAK&6&r5+2Adg2tC)^eIDg>iDN&?Zta@`w8Q4tJ87^|i=>8tb(IFtM9^3X4L$6~SQ zgRR1Bmy!YungUSQ2#QbSbLrcFSw2C&l|13_waei6!PcKDrV7&9+0c9m@=vQ=#M1JA zfmw9>%%RUoS8HI<>}~G3T}01emQU0=F>p#l<2wYLy|eCP6bbkn8szdg_+^#HV#ST{ ziNGM4n#ODxESr}NW(h#&0^xtSVbh6R4d|zU3?ge$$Vzi)h+9K@s;{pge>j3undxwz z>j2=2sfqC2q_Rh$_j7r8{^16I30IapBiayv-^}4|C?fqYmW_|=vFt45_T&lsV6d@k$jJNNrgIB-4^>a~wGo3q^ zSY!)g6i40w_{ok_4pLFP#H`PUi(o}emG8VrGrR4Sl9Y%f2w#r^K7FbB{oj8*Zm~iE znCTi%jWKs6kO^ITSqpyw!Rk`c_wRC1!bBu!V`l16TN@xbC2>ss4B-1y>|)jSF)H(Y zP^kYUEl_i-2rz>(CsLm1;^W_coR%t=21nx1JX@-r?bUPlR6tq5uJ`3-;iS`Pr7eQ^-v#Q*O0{)fEB*XoPZ#)afCwW-Ud2?f=Y1kOI(pS=>9$tioU8&^$;WgjO1`cjF_cC*XvC^sE-LY#kKaC4 zohl*9uE@bGj2;DPuq6$D$Uuw2iq~$`<5B!LIZg(r8@a{U`BDxNVQ$;vh=B61FV^0E z9re*X0CR7^d8-c&XyubUh#_0(r}S~Def)L4xnvtkjE5X|3aj7;{fLD`Ak%h9mu3kV z_1mdIorB$~_BI%(T0o3KT9my4so=$^PZ!bG$Y4G=%d-eu83C_qpq+ zQO*}Ab^>e#1jWHSLlO`l$6zb+;5o0WG2ec}Q$dEQ&S7M~Oz)ZdTcedNavm z>l%I{14|=C@_82Mte{EONr80?m-^6OpUY+QU{otDjINyI+}5_r2?*?70xZ6~!#$j= z>aq3FtC;{Dt<{GOcz{`($sikE#yG!T{988`vxboa!d=c~=(cx@(6^Q#4y*S0r zY;`P<^rz-mDWz5gcaR~foH%-GDRBy(0GzX}+BC9$FHEZ`@zP^*`tNDC!AUMrq0Taj zrBHSqrL5g+kcK>HsR1fnY71$TM_4!roh^XZJf~@ddGf}8o|3#TaKVfC*RKiw^N+{n zSr>2z4u@dvb4n_;Q7V2l5o$@jjtex)T)I#}6b9>s`T&kO6EUhjg=BJ>me%VXq*b3T z1AY<3cS}H<5_S_xL;!pqum{_60Nn3peRHWDFFmx)mg|7uwITzBnga_oquQk}?`f9H z{im%YNI3O>w92t_$k6`{A*QHlyNF@Ztbf#_^r~cRp(NfX$QWQXg2O0z@Vyr>`8Bio zGRtMPU_uX)Z4W6NDw+m)GhD0(tCs}*H0ztkYK<27f>h5uVKxr5$Z^2mLK#8p<$B@E zEFYI2rNur+$C?>nve~5ecs+-u(XWBu)2!bft93+w@m-Lt5Xk4tDHLfhb%nF?tvBe) zESI>Isph>EI~iA9qimCSYAFa4Jzh7_MOmW}E{r46!Edr^C}BpRE?o@$cMgZ_o^^oAgU_Un#3!ZW6t!Kegiw+pUYu#6+}@lKm5YV8 z=1tq36Bb8P#=HWHXtRnzSIm4n>_FwQgP;iqDgr#6e@(1gMf(QPI*_VqgiEvi6O~W1 zq0*V9X7FR#VeDj9fKj%`1ck1G=r4TnPN&yykoS~(?Z%OmY>$q8W+cGDi7Bhw&F-JD?0+t} zqO3G~f2yS^NT3F+TN_iC&BK`+7g6!Vk&z*>V}HwSaNmEpJOaeVSC}KmHE3e|;e*stOIsb{--!7N758Q=?wO{1cZ8 ztpV4=KeBlMq;xDOL#Un|kQ5b3`{FkIA1)Us!RLL%3JnTJ5bOhXl1~GWi!xu@{|+vn zoUV;{jF>NpZo#%WJrsVTH5n!~Qa(!RxsUyo0h zvF^JSiR<|{QQL8ZfN&~&YE|RDk%?dLE~xM$X>5t9&&8iH5Y{?y;CBI^x9_`uKkW1M zmrty3jW0s$YNgrg`yhldZ-e5{qV85ifBNy$DFrElf~=!w%H(5XZS<6`E8^VSSQn-E z;#JNKAtDu)xOz%qV<%G@8GovV1ep=9us(fISrZVyI*^KR$h8(4_HBs7Hs#jhKvXVS z5locV^n>-avO#J1lCPbXCI}IgPd=<*f+L0jnyehuSQ1q1sb#jY%f;a7iOORK z@y*rTSHc;GlBNS=#SWIL5@e){XUY?mOYb(g15)$s((SC=&x9-klL%=*sO^i!c=^-q zPDR;z0X%e#7|6>3AwEc-(Eg%Oe`PmdZ*IuI6d*1@1a(SIQ=u+^2h!T|=&jwt)?fd) z1k-W$DNwP6jC1M_$YE47?&MScc?gUAe!MTEjc6qe=@$&Y^ zpDw|njg-?k3JO{wUu~Dkf40}UQ$5;lObe)7^0aP4BDBDFp=HjLV%{P)g&p3P_l{3g zK5wkD+QESztpM1jGl#M14*YAii-8eQ{cyP$i`+Qc&dXReL-Vv%CGMGP%;7TE>xs%^ z2jd9}g^Jt^A%PP=K$6oePZw@*ha0B>DwnFm+G8aU<;H=Lij$N_f0|pdp{b^8f_}We zytuSuD4#r!LW_`-wPc#R?3seq3DtA4Z+_x>xWp`3e3pIed6f_PpeBe`Y0;{D&Wn-J zf4E%gG;@i@RF+~tb!Rr4cO18*p>WvH9hXmA&Cz4UK$tspVhRyj)$)>-5Ya@>EhQ3{ z%RVCGG}^(XBdx`Te@vKr-@Be3cEeHo9b7K^ICfHej2%*E8zfNS2;5QeBb{a|7hLZ@ z%%>^f?^UMW6dd8}5MVIiE(wIErMe-IJ4%+_ps)Fk`XFalUV zebiVzqw%$P)z)djtJqQ`@yv>NxQs~qg5|MV7A7L+2`uB5C9!a(>y8WR8Z@HcBnDvl zl#u`idAjZz4x+1q%g>x`tj-~;^F~hz%Y~mFj=0>&*HDL}^%$p(EqiZ;n7!Sq{DXk% z({*rSv_==;e?VBH%}6%~=&?NuC(K=N{q*rKMOm~|MsyW zU4d=E_yjFMla(4)OuXxCXSXsg#Ps!V&_55}khJ!te?@SbcD5432`SRaIkaBwc0WK^ zE|%PdKK-V>C);(NPUgIlCO$D*yI({PVEyZ|T6-VhF&VTEI_ZR{26;HxZko%j$AGY0 zR_h@9&9-z%Uww^1bAqY6g#(c<>B6#J|9=1T-Q_#Xkf}Yd1tC1El9ijR*~>tNG4MXxZbqr`IkoUI zSndm!$7(Ga10RI-PG1)~c{Q6Lq*8M|*T(8MpNnbe=C5Wz2#PuQs5UOgd{t$Hf}0+fdffA0usDgxEXu^^5ju-4emvR!J+AQV?n zF0E~rRiWl1cC0JtLWmW=Q1H`&Gk@Pc4mJ+aT*ON%#`dSqV+31#OrRy$+y@;=v+yRH+kgBND}=2DHE ze`T}%wnciVwDug{VTmIuNh!(y$CWlKmtv7QUJa`7j?!o;l_z!72(5x>`?uE;Jj1CzNhg@?`}(4hvQRiazYx*$n*#S%et_Hhf72_ zE8vq`iJUXkIIK>j<6(SuG2+FB1DJlg6o;@ZyV4vBGHdQ_lfDU^PYw6YTo9N%qEsj+ z@73Z-l3E|ofMe7qI(G_+oOr?X`s0_&IS<=R!!BTU8$z^}=V=;>xY-dG?x;M@f7B|6 z9zhC{pd4#5Ea%$uwgxWRZe)t6{&Fcg$~=`4K10p(^+(Hy>R2pfnkwKjzk|!AqfVoA z4w#fU^FB4TK+7e>hh+W!4L)(X+!G>Jn&lPO;e^mS#o|!WgbbMKjp`AX%a^z_?Qlvc zATTB%F}bEmhn{}sx!7?#+2L5mf3MFiyu#cjduIj5Dj^KIhhKEo<864H_L+-DEe)}N zo+W@$EBHF-`s6tRK-7>35>>XcU0yjonNJUo&w0yU6z2XHZmxrR9`kb^Jk+7kU zB|&L5E%bhZe7@YjJ>EQa4_md5?7<*P6`J;m+DkoRTGzVVRX*Na;uPXHf4f9eVaAz# zcb11XdoD7~-EWvYxPk>R6wAcw-tjgw2Tt zdKGI9Q!ax}J|6GW$KR!f6QHTWAd;gZgJXi(4$`vdzAcs0WlfskpAg2S_oEHm*gDGz zAz|?}j7yONsC@ig3eM76e*kj$k`No(&7kL>?m_unjQO9ie0q^XWX?ShU^n)_>v*P zmO!))xrZ&E?wGRaDFM;~K`)@AHSs}5Ssa{Z((YfPkH3q=jA#{_K*%rr9B_ey#IJ`o~ih_8iEaE{q9J*@MUl?u`l zqQy0Ey%eW7pBvo>e`Yu%w4GP&v9yQ?5B4|Y))V%`<@2;7g4d*M5@`HnR$G*GO2Rj~ z@srnN{Zf2lS4BjnZOJ&$V6BYKmaB~bTLh8*_OhL=kUrx(Dyd)JAUMxUT}073Y*hi9 z0E550gn57c`%jm~0SH0Jd2pE_Ygbm<&+18)X|l&~IbDS1fAg@=_UVv>hqVuyxaPo+ zk3SX)Yk$81%crwX%3Pa14nn7+x`j-2wpD`Rd%VK>;j)R9b22yPZG4o~+e7&QrFvmTAd2 zQy@0uHblqkV5z0}?E9Tv!XEflHhgf>s^+ej8RLZIvxloU{7y9JFZ!?XR!5E{s-Qij ze_#9ie2n>UnKOP;E~~2UJ`ol`X&RkeNuAf2qTj0vz}njdR#?X5(q;%t8V9T{FjLzt zXGDjKe?{=;W4*lobisxH-%5wSws#pxCG-eUo%bHdLg{>exSqJ)U2x60IQ%jRhe!by zU8uq8&*?`}zch{l7bmkjoiF4VpklcJB08iMOPONNEBt)1m<6zp{rYe*Q%U%z$m_Ye zR^d->(0TAdj%2XQyxjkAeQuXWIy!cYw7H1$e}F*DyaXIo<7}L`^II$S>7soqLg`#F zD`&xGVOuh%v;>xzK)k+B*aaIQ#SuDibX`&6-rIQb^9%3E^F3#n}P*0 z8WfCaQ5qX)%7OCO@iJJ7$R4jg0k%T+_lY3J_Hv6X>lWHk8_wPtzk%!1C-UzlG>hXj ze>K)mn;fiPhKvpLt+MZ{a0K@51dOjx+D=*$w9l#>%iMZvr3e_4|7RZqX+Bs9ff4--OU%*~` zRt(2`$l;r&4mmU=#xu9F3{Y&z_gy0dVD{+(tIv&v$+5(`VpFVIT?cCxt;|;R7QACqrCY(G9lB7i(n)D34K!(W~u7 zs0qyHd?7V*sC>(9>>zpDMwh${BN~4ekg-+}B(&%nx9t6omjdZg5LzK{>DQ4X2g2sr z!KY*9rhZ?Z051E(iBX?YKy4zgvg0^QIpS$B(xGm+_se(*JbRDfh$?0ksKEm&+iI9eM6ltO-PHAXfr5zQjKq&J#k# z`O=Ow&}Y}n5a-Vaf%y=M6rL}WIbnKq!4YFaeWahZt$r<`Afo!{w19t1lMNXWn+mqN z5bb4x=j6RLUrUF-yo6c<@fvg}eEJ>lim$+s8nJGtM$5Nt{N=WfWrIA3WLa`T?W1V5 zIx>e$^kkPh{^y4mFXa3DB{hQ6BxPT?TC6-}GNpudsZ0}=OW`on%pT0Nfug3MmUs)Q zi34Eh2z!xfA6^A>#8NHgqkxU_!3um7fU| z8aB33*WNbqIncppy<%TWQ&|=f-E*nPjk??JCUu@0z5fE{vSJ*U95t<>yj4@t(4o-M zi3Mb=txF~UYt)3xilxfgOY5)~jiFSbx7P%^V7ZrZAvs^bTvmVV?9sJq4jDAUXdPc! z_#IZkFVc;xewpt3h>ri$c5Taf-Z=7=cm%dhW5JHU*jP@Od`hC?BG54xvJz_VExn8A;w8QLEWZ0cg{?!=b|=hc0(P^ z@}>I=fQ8)_4Q+pJd51MWsnW)ba+%h!8A!|ZjN%WlkP$n}*ZkmfrazyOhP;IDo7V*F zcDwrc2)o8gkI-wZK}Y-~%v+D~A=-7MMS1m9%B8Q?A7nw-Sd)MJY3u~Y&s7u>MEYX49FVkI zzxc5JgDhmsx|g6x>vg+prZd1= zUl_6XsP(^O5v{#@R`z~(= zgKj0QcdcW2t&UqQ3P_LNI`rYkn(N|k_&2Z^=D)oLGW$EU!I?@cm{pQohtj-O@H~M1 zjyc%ZR8QXKjwuVoY>iEVIM$A;(wC<4cT6r<0<3>o%dpdP?lxO%r%r<^cNc&wu&A5w zbUORP)!B0AK4?}t#haCllt9<61lxgyjMx${B&twwVvEeX%PFE;J&fqT%U6KKtT8Rs zRx0kn(GepwSz@FCv&yG{41EPy$cVA`*K&WLt$Xi+luk`oL&B7tR=ymde?*;)d0*3Q zTtI*SM@Hycz4nDPwUG@PUz*%MV8v+hQMj`2#+8^Qk22k#5gMRKx^;8={D`{(bi>%X zR)^j#J1<5CYC`6{G}tEH4xt{vVq%#0^uQ8RFUOk86VmKNXH}VsFTVgR=9&%UO9(L@ zse792?G-b;CXxUP66IG$>@{S>6v<~S1Lsf2D0SW{#rY1> z`t@YBYEUB6EwIV`{_e11PA;tVv!HpqUr|!UHau2$?`D+wnu?-|WLBNo8m4ikQSr~p zBX5_V5+fOZNQGEx^Fp>8tg!2Nh0x7yXVvaanx(jY>t{}-)o!ib{stDqC{k((3_m-c zIQ~$2Z(uB^6S&ToMl2?NsgBxb?_grYkmF;!d*o)Tc9v6MstvNWw-$gs&-m@)LRhuS{d6QK^Rqpd#QeZ%v0-iNB(+=IY)%PZf*fZT@Usk zq{k5>>0W+&>!D+r%#v*OC3{ZMT}-B2+=U*nLPiU`hIOBEO7$j?RS(ac8SH1a z+S5&!wi6>Df9=$dO&$Z{tR=;|qJkezkz0N1M_@Hwhjc`YhcGg(g%IgGlx`VGtHb;n zvKY=fcnf8BqA23dT0V|*i7xLbbCn-~b$*+RcVNV_+Wj%L1X_swDK5mVWKZE0k8fLh^zvs5Ua^j8ruD6tFRb*^QWQheyF6mRsA=Kd2&VBOl#R zXF(pC-DWOTCwGM=a@%E4?JvLzsg2zJCTkC@uTzHBF+g@$c4r>==$65wY9ldoOWnI> zF}rzaf8owZ-Str=SuPFp{=kZ;jRfObb8oP3)e(LQk|1GBOqtto)^lJ+bZusq76>ANInu@e^J2ZTIkBJVaBMqi8 zA!-Y+)V3sAeqzUG>~dZ2??IK*?NLo`ZOk#Ze^zI!Rk6BC?)dLDI=sh32X9%)SWZhS z&(s@~BUkK8!jD<_D{~k^aFULWsGtS0;Blv>6@g-O)6C7jGKmq<0U5e9@|Hj#(F06c zcW!Hs$77Xr=^FO=5m=)%hPp3K%>N*Z;a#a?U12kVNNh`W zf7RBY-l`W&X1Tcje}05j-MSy8v*;-V3av&9!BvxIYTcS|C*_VShTHExGPx69-KV#7 zFiIZ$8e7pGnP@ zX|0N}s>80e6k)~Yt@LIqr%E6=>*xaEf08V|PoW+!P3ZsNiaDW3*me*-$zey%Zi^-t?27=Ple{ky|U*S)v)wc zdDFN|c!AIbP5@ZHZw+ z);zs&ow}pb1y@W*qf(HSi<^k#GAl${dfcDk^RrI5J+%FNe>uM+#>#!lKxX>G-ei+0 zi<{&nC3Tf$ql1zTKf=*HwDEc#uK)>uT}X*z1Cmr*U3QW; zWz?L^kg%tTU200sd&Jyjni(|Rq%ez@>zz3lH}F1xQNhpoJ0L}1n#LV@uR$TYV<*(B zV1YwsU`l7ZG}8p8kb%Oof62XTG31z%K}XBp4Uy|)OsB2uK*bD|s~H0kW?=E_f@Ga5 z5qr}?%NL#V^6?VlsOaY(<_|H=O%$seVRVJ2$NZgMp5LfAriiV_1g?jeAey&GO?hqa z181}5Bjs{4{POV@Vjt?YuwF>qfr5HfA!}W{m28=GDVlOjAq@s0f92;%#~Wa1_qrR} z6?AmE-Gp9@C*Oa@EGftt3>B?2T*Uh|goR9P3N+y|(Lp*oT}LIQFgRj4d~6PHVC zMZJCmS@0>Ug&<2Ie|G|g52$6g7l#-voo21<_nOBS`}1W5R3!vdf>t($g7C;xvBIae z36Yv1v?e`IG!IZAZ6$Q=IjFRpa#JtDaCbZK&y5IXm&*C|J!Ystz_y+rcF5~re=%#l*HlQxvRayS+j$r3 z#cSs)2p~O=>p&G@6<;9xb}s&yIBNzs0B!KIs)nB}t>+rcF~tlOmUkv`znN8JrNg}R z_`&GlY`UK>D~A=5Y^FCwPJOLiQ_5iM$?=>s8Jd1R7k&>=F@v>wrjaY#qmcPjH>_s% zTb;7pp6!M!e+bqPsJ*&Wy~QB-sBE)2cXBJQX8Qce;_I)Mmym#!Ad_1mY(nI|x|<&d zLH@Y~2UgbQw)e+d2&SRMn?nlEZM!3=dy9(!5mt8Mxt`N?#}x9elhj61Ym^US!!p(e z<^V=&R6*RIf{JNV4m6p(21SxpEz+A)n9{w29;E8?e*g+dAzWdm;?^?I>iw`0(CnQS zb%7|Qi(BxPm$wK|GxsBNSjrQ8y(3_PzuAEl97EHkFUkIwevbeJ-r`Z2s)z6X0+ zYyMQr9oe7H-hN&0|BgU)Dn#)fL);dn`Hdxzfv^wSC-sXz_I}r&F|4Y1hk@Rzx8Uxo zlMtSef1r`CZR=(Je!ho*nyXvhW4rqml)Fs#(m7sVt~0 zzqVz7@kcN+_P(5-0aeUc5toxvXJT$`f4AOG^?rR&GYP?>ePOIZNb#}Mym&9yIsMkJ zx<#Ld2PlclbIkXc=@T|&KtsF&Yk^j`GG-xrblDx}(gP@Hp*OeV%jYy@cXRiOS^^6# zNxi50#l{nYCT6610UNGOO>Dd45SIKNe(0aeIOk&L22??zsu{u+B_^cdvm4kse*!xs zgzVhqa>?yu6|}Ch*RXTdsZ=Y2vgd}|F&Z{S(S zG6rkur7Ok%#$Y;TY07*&1%13LbS3JSNx8bI&+|i$BikZ)dTofC{g9V8A{;;pl8Cnf zM}9u}(n$9KD#RaWcFAQD$kbv*e|$>2ddYYpP^)yQn+2+n%l9l8pt{Llb1kf|r2YnB z&eGhD?~;@qR7_1kqSHFfPJKXVc~c}X;>4iG;DPy4Q1$Zr{XgF$N{0oA@7{MIAHsuh~kgyvG`TIhJn4y_T^|nLh7AO_i1^g zO3j}e^ud0=eB6-Jn>F9Oe>Z-_yoq3}?VSJ+jk|PAUgLYaL4)f62M^7y5kvz5a@T zbqIQ5X8eitY%^ImC@>5ekYd1|XB{wy|K`FGMIO?z?J#Y2AWSRfaX@4|YX7&$MbE$f ze0_gY4M~Oz0v_v}Tk^M-ttC6j?Sy?g?b1AdkPZ~lFj6d_yt zV$|-&Vy`s>*JP|LM681BJY{=wC^C#(p>*8o^11B!@RvX_uUkeJjEZsm-M!;%o zCy3P!otQF$=$_l^u_J1>8Iy=GA?|0K6LbXYke zYSE~=li#nBGMMtAl`7A!ec=CjehLU!?j9L2TnF6P4=5nLSrFWv^^7dmP>&uJhNETL9TZ8>|4r11(0!HEQioXOb zV#Ipde{yo7|EKNRcI>)wy$1$QT zgnS~D>)srf(g(2dx;pP>Qng$!a}i(_)-ZyUe{J4UZ09U9Cv$NiKL!Z=9Z2jV5#+uK zX>wLeKKf>7_(;`zDcT12S>A-*O>L={h>Xhk#E_1-V@YqR`XBG2MG+4x;)QiIGSCB3HMSJzy3A&C9rphH zfBRE+SIjw_-d`z{htRK8H8-@J*!N9n=>!f z81H!gw-7vE3#abonxJB8nsor?jKm0Oe@t`>UBL5SB9OBS`r{y$vIo@@6p zFO|w4WHAD7=>lLNu){*RRD>*WYY>m4?yhucVDQ)#@lLjY7T_=}9s-uNnkCCXe_|Yq zhS8m7_(_a#mc5s6B4@h@!Sa%ff3?GD$ z#^qVjabSp5yfYZjXq_-?hm;(gvy(T}=TX?lV&zr< zY>wGBaJ6TaMQkwF^4H=T%7kN>e{D&2Aqk}NRb^dToW5F?Lz0k~Uv-V)8h*0Q?ml=E zyNyrvI=p9=MfeQf%9L7vl_ll1UDj;777iTP%ldwL^ryUkL}2JH@RDXE#Up&QOlb$~ zhu6qCrR(M3|AiP;&feuD@yE|TJFr#}oX7$u#KSJni|o zt;y##q;@-w4kRMB71c3RhgWUkQ?Lx6)NBa;-co)MWc+|P5fK7bRFlGIb;Q!{MJ43b zX4%!>FPFReAA1V|&)C=fBp8qi7I35{E?en}{wzq5x4IQ zE$c;gYL@|eZkKb}kSF!re={Q?Zp8J?y2R@S>+lvyotH@wZdViw%H~amgM=DwP#;jV zDvf<=>H_n)G=;nji&;q?s|>$99i*}(iA)=NHgi>s&fm{K?>j$&ZsfDUu)B7k!{gV4 zt|#l-vWOQ01ov*%FTX~_2^y!dH`)*6MZ_#0!bU``=Z(W~KaYOFe;cxnXLD)7t}RyP zT7;+}P5C6_c72|Dok*XN60!CB?h1_B3Z0j*SNF*%3vAXH0r#RJ{%%=>6#Up)wjogT zO!>5N*awqTb5~aUx|(%7$~JnsH9+qz3DBx%4GndyB0+UvtzL8h(j(j0Y4 z<+h7@g^SGw#)f=8f9P@}_tj-Fs|n(trOoNGUUTokT~2C92EvLXa1UeH`yp`*uGy=X zT(ir;P&&E~&stofY2|xD!m*68i(E8dRN$RMTe55~Q`kz9d0(z`{t9FfrU9Lb;9N?b z+XF0MPSrj9x^R`-tI%JOEaX`m8L9e&8_HC-axJ^e;iU>Rf3E|eUs>r(NEHARZC}4! zz-LEk%#;;a4B*xJTK8B6yCPl|W@W4(7!lUASRc)Y#l0(xmu33MU%!P!i&mB{)}fO? zZo640eNE-rZQA#*cHFLQArc2;sgKum>4lUg0>^0nr~liCR^b3ttPPk>YoReQI}Y^Ck_+Cmm~u zXFLa86md0-MXq+#ukhK5i5!3V2Nl{>8{+=C>7T@re@ITQEMnS08k1%*1l8J72Qx~E zFIv4C$06s=!|%nXNbming?Vc4g@F_OrTb=AOf)3~D(t1<+>8+FmusBo>0)JN!>p@S zA;Gk6L{lsBlBXZ)GySl$TzVOJ`qb}R_0NC(=cj-F9-#sTRH~%&z)u7!d$^_Tbj_-i zH1zvhf9vg!FuT0hv-eX**{RHvD;BQsl4*diGKTGv&2KWfm5};eRYHDv+4gDIBd)h~N`@yW^v z9`_9vWti%0(&tfg@#CWdIjMNveUc5Hdp(fymp7eoYF=A$c^Uo7YZg&>Vm?77b-#+v<5Y89 zU%()rQ#xE({;6#d$6)!?HSU`m)y?Dse}@O9p$vc}iLyS@+Xh(6Tn2oAXp=e|+1U z9qBdKM7^sE_&@VpkZ~^KTz!(a?CRr0MxSeJKAy9-j7P@3Y>QY`mQKZW=Yh6uA!*@* z(lS-cYmG~h(Knt8sr>^SVgnv3*kMcXj{=H-O{axc?N3ASFLVC4gxq{uH_*&2)1TwK z0v0F2$6Jy1TpxvDPpm=ax#lble`JJOK-kA=8&Ra?y4x00N|< z9=jC~bc21MCASd6gN4a88v4;Rvh%Jr@8Q>u-ze=kiDugjYY z)B(8{D}DCx`7`h+fBI*nfoHL;0-`;t9`9b#jul_T_`HttJo$!H%vlqE)SjTS zpk)J0ZShp9N?k6U3ZFA?MBZR$i0LqOVpn=T3+c8MA1hE6KMH*BX*VM04lP(ipcaI` zT-XQV)@r@2kr8GtucDuFZp6Ljp#qjjww5)VRiug3)yzsumao+?f1eU=#2s}h$gzGa zwkllc)wZ;U!dw97cIkusHrTi>6h#XmW2_NMD zzNGr3)uig^ULBpvqfGW^oOyakx9KKRFI)qh=L1(J#Fn$^TDtQo(S|f4y0(5Vp8ktu z7CJV4DlC8^J3~C-EuXU|D=VjWwf|s}HCEe|(Noeh)EEfa6XB{|6Aj4}kw{mD0~ltIU4Y z-~E=>hIEP(e~-=PBVvxrHW*Sy&SNg|&mV=A57rog@?Zf^pEA;xlOJ8mh|H3*3_#~c zi~DDsc{FhpT*Se9#T&laTxLV&?JjmSAAy0dlriGuiqc`7^#H(6$*OUy$M8PxDW|;2|VWAhb!?kSr@UD&z_5TV4;(cT6aG_k9Abt<+Pe; z2q{NhBA&c;E^ zOTaJ0e?30|0x!>n7&pMmq*u$yz_*cf6A*JP0$$c+Ji1`~*mDt2Q+3w9E4S9xWFUdm zcPaS*g09-_T8#f`(?wX9%yMSs!;Mm(&Jbq?L1$1 zP~hM%lv196ypL!X^*9AiYk={2vKH}%#B=;8e>d7f{i0R=&F%{_@VMAqHbP3X0vhfE z$;=fjl1o-TdLH=LfI$XgeSNw}(zz%le4BYRZ9M_{RohSQk3S+`kbw=H(M~5jv~oK* z!KR!5;|HQNKMKts(J#nA8PjLaPM4J(+JKgIEN_ubUAkUozkVA5gDfmY_{&MhGB6%n ze>)Rr*`?}FCOG&9qF|7P3mhnUUEW%R_c!PndMOl!PiI_a)?{woKk_9HPc;sM;qr}Fshc0iS3YHQ?% z+zaT}`+2gmUjtwWC|wB=dN!Pg)r}_%e=7jB;rk*U%UA)}qsu|LIIbX3!ya>5w)wO}^+b|1Iu?fUD`V;&5s?!G*RqptDyY zXR6?rKahDt%)?p8vNz(2x>jL#96g6{q2{k>Pu_z5!hR7kFMB(h6AxDf`&3?Bdbtw^H1T_C!GUzy)-X8vQ%&i+FbFd2a4tA7V03O}132O~c`cs16bUg9k{1S4JR%&hFyJa05;#xG-l*`#{ zU~SlYPjbi4Gv{WF=fVF@KxfrN^)r>peVq+Z9cU16kfZ}N6%G1zeTl)FprGHnr6#BYH-$V zr2#S5iGBENMZbhx?(OW8lIsEA9$>Qsek zGBA9rXFQD~aqa`U1QFZa-wKY;H)`x%UPk1dw2x{UUk5hojuu=I9|48zoLuN$Q=+5T zcGcUc1S%db(f5eR&bZs{4qlC1Z%DN`t7+J%B0lU2iMFk$ zxh&3o)eEHXl@Di@mixAoSM8Iico+4PVvF}&8)V-WZBkMxwE#%9C9Q04UPWND?UgSKzHXXN@V$Z_5Z zrwPfmo$6>WjfNjh0_;*?_CpRE^CFO!0YfQ!LIZqXE48W_pH4EMghz||7Gzs@MToM! zr_0p@Y12etf60O`)O7|PXR-)@tjMg>Cl=KqTKK3QIxV*bm*z)04DV?yq*gUoSkr3K zDk*O;ec8}s$2xV!C1o|gPTe*}|E_udTBX@O-U&Hpc zjs}pzS?8F5n_9%XRsf7uw3MqR{a++8qyTRS$W9r|t%5!*P{S=^a5dRVyLsEGZ+`?m zf1$vFi~~0jy7a&;!_;D~LJuq9X>L588y6((Mn<(DS}Yy-%IpWujyyqY!0uNnU@zlh zmJX+G(B=j5N}9mNI18XbLQosI$PEs7U%HT2J92t>T5BM)GpBi6996tMUp*0ZXI#)r z3PJ_XM$^n?fBUK?6K8I>(~9ZCNbbKIe;2WGz?#~Gxuh+WyUx9O11W30F~G`Aq^NH{ z!mdOHtkq^YmHN8)?9JTqv*KyaY&) zqw}{|=^M_ix*$Vq??Ry*$ zV_)e7c%(D;(${kQxl`FbMjAWZu7pW`LV+LyaT)qLtHM&rfB~bFvGHv=fB3cC6axN4 z13@kZ0qtlR{xX0gcgifr)eG<`0U=xif~e=k?sH9izC3<6n*q^VQV?(51)=w5{Uq>l z`*5b}#ad3XRo5=B;Yhm4n~tv3awYO{do+(@qGys8+~nhgEdUpsmM5=rHh%Ozf92o62Qda7pS)`w^sy}0I7rF0kjBwAP1ECS)W1W7h~-O^ zsMI`aN_~T(ZIV+}O=)eY zI#g^W**>AM5->q)H7N-1{o=)Fy^X1bt9Sxb`(U6eZu2y8EyP@Ye+_(&;KteO4)w*U3^pHVRM)iXYHIs<+ZHnz$oAHcs|sIteU z9qyw?Ilq}Ae~4hXr&e$bo6RNjPZ24qM{0Q&sJ+eKhMhij{r3u_tgIO(;eT~;7Rly) zHFp#@>{C>01<@XdK{acG!l5!Y}zfBsH@Z!{T;vp!29L{vM%iV9@KzbLB|U1Nv5s#Ts>!2K`Low%1@JAf0`E4 zfZS`t$)jOowwc`|*Vw>KY2H1xuSCqF8jv@+px{|Rb?_{eGKf&wgDY{(bT>;U=y?>l zZUHcLe+KjJy=Up(%wXrGsDY2~mM!K9lF1OjX5&-A&YYkPZ9phkG5_M_j>c3n5TM8u zb*>HWnAhs9@&cs*i7ZdU#ouiUdK*opAN2{PXB1_SSZh*8O9G@v;N;eW1WhfOD*-6&f7X23pm{;)(xXZ10@%B%0r~z>;v2Gf z(^V)6NlAdfYfGVC!6{Vn5$?p@sf)5MRYZKE*&2hq&QY0%)x1|Nu99*k=O6dzJw`V3 zxd&;I*sQJjXs$L@fCQ#q$(F}G=pj-KnM?!%+p`ZcG1}ddSNODaH_s>V!8?h;d(6%( zf7L6^TVg&w3!FL*;njok_rTX4g0BM_IhNRm(jurPO+ZTXG?S;P_kZ(v5nv9^w@H&p z+4X@|D_AzM=H>Z`&SiX!vF(6SYbziP27JN=8@W2-1?7rA%U5deVa<5Dxfqb}#BtkI z5Mu|xQ=L5@&y8JUrVs{Enl{ka0jya%f7lm-L{hGYYh%>i`-%H`a}E*>_8pdMKLU^2v#Yd>oosUl zd&N)vi8y@yCZA5ka)CDUo*h7Ur?OI}&YJcot zLNrwaqee)5ila-uMpy;>?Jt96Zp2F^7qZ!{GCtr8zW)@XU{%B(HtLA%Z31-XoJM!e zu0A!xvIY_qOyYC^vL!5KOhZLSVIxga40^F?%S*$8ql51^r7k?IL*iKhx zIE8kd02R+>MYvLu2K+FKm-u)mtEnJ7a$8*LmPbKbmr|NxK0KS8JT%^0Ga{j zRuHE1(>;V)5gr~JcSON4@>ybi%&i8zWz6`0{W0?ct0J7kY=AD-vy_}G+`Ms`;ExI~ zsy+$s#yLdT)l^62UTf`jxPLI7l?s=yd!Jo_axU&+gjq>5F}TENI<#Ux2e3`j-g$wJ zKc+oj?jgdi%|#~I1+Zw})BF#1UONHc;H!^Ahy5moEEjMLYd>AZ+oa19NgdZxyutT8 zHdVYFM1)TY2ZXHpva~6{=u0HCID5vm~ zKeZo!{Wl^ej_xxHmySRqAb+Eh;THM;{;KV3vlcvG4>R6yPhICx1htOjakB z3K6M1j^%?{-`~DPT*k3|NU%R}?c*}GQvm5lT3)tfQlC!!%dikq27mN!(u*0`hCftV za#0;Ql|X|AJyqSj&R58awV7Qz6qa-YlvuNp9p;i3R~Yt$C0>Swtk|oTYkDykpITer zy0Etc5tCm12RBDQWW^ANSPNP4@@|ku&Z{?Dwp5GJqZHB0u#go4xWR|xz>s{(u7v?$ zDb15|Zq}Y6kstog5q~Z}Gnh1J*zVrjKUb?-7JRBpbEo+jiu{Ou4oScXR*3P1gx}(7 z4hFD*`yX>jtK%uX>l^tw!n?X=!(#5))vc@p6wcv-=6O!|{72D-_k9dG`l)T7a0LXG z*t-bk;+Cqi9bG;v;mWd*vtM0Kpy#YLW$tY>^Kn9;v_wb1?dS_Y4n(3*)VQ>?pmXqN7&#E|aS;t6eJ@zEMpZ}ns)as-SH&2IJ zQLNk~Zd;4GNa#hhgk>>4Hsczmf$%MG_jzNC9)G+NawP_mJ|7_L{`8;y>GKXzG~hMHsjy%q_%66HFC5RxiEt;L-nqYh z{_=lspX6JJ3X^z?Al6JquB+}cT)XFRFK{F6@eSs~v?0tCkNE=9R>aJjsk%_qqgLgI zX(6jNJ%dP2HHSK^RqL}dXbBKnf9~=8FfBxqPeChxfvZR9BDfKrykoW^?2>r&lw$d~ zpb?hQ@s4rxq;(N2l1VP&@`i=6bauC$-~R|1dS@r8g1q%1n`-K=y_^vXzzjC6$9%^7 zss-7$ffCE{{>@a&KK(Q{P!?*31}^WDZC}@4U-er^KO%naAmT;L06>zL>{4zA&_nB~ zPp;#CWmrh|vwP!#$(Cf^LYxwoj~eJ^t!E<^Tp0HDEdr(Ot`4ntnPXcs?_QhQWVp=T zTIC52y$lN}lkwIxn{{n%27qxCA>QS@Pi@18%03(R?fbU~z?}rwa2olv9dDNC43@G^ zZdt+Z9-B*i#lD9yfhC3a?!8C_)*x-C6a{vF97oqmk5k58hJ~z{O*k;_4WxWk?jeT361KNj-pwa-i8LK`5Xnbw^Ick;Y{ zv>QmClG(2_7IG_Hww{D>&Zlw}anCP;NVx|k@RX}t84@dbahh|cnJTw2ds{y4$7kva zVA0K10$ykYz8Ew{UY4+Oa}IFxp`#Y+Ob7+1-UKBHaTs3e-FtG0En`|>cItt1cf@j^ z;(T$+Vv0&-)c4VEWq5jO!JnzYT+7~nvivwr=ilqc+n112W?4Yq#FhNdY`|pGOTKCI zmX5ISl+Jq@7UIcx3|cNZGit{dbeecA^}->O&5yMqFigJ0c(S$HOT$0K6O0`jD0z2O%M>PriJvpx=gfnndje2b_dgCEf01+b%aNWkByQRCJp!QwXO9u3bj{N)6=b&4Ovt)-yb1An} zv5m>#*S2uxR`O%j-OI3$Te(U(!1y!)b@o=9nX>1lwyU_E$JRF(7IZ6B_Qq*nvu-)` z|Fm7}Zk@NTd?o5aT^>iIsOHXsr82~&^C>M5d5U!j3f??GB_F* z*lx5Soal;U9$3h(EDakn6>3!rwq>S_3ZAAP;sMUCtRH~|?MipZfZpxYXrESq`reaT z*b>kD0*-lLA-j^ur{J+!RUn5`u{?V6mTloyuQxe>i=XR1Uop48wV-T&Q?5Sw%R7%W z8IrYlV+&l}Za*FosBh^cnfS#3t!}kqO(j%rf7q;L-cbMJ5#s(+0q;<072C0*LYfr- zeG}`gnqHq+fBf@UpFb>OH~M3v&S`i*K^dJ+ozj!{QMR=5^#JM_SjaigX}N*7^2y7r z1G}E1vuZu;j&@gl^c`4#M9SvckR4nr@48W$GInO6BUu;_vaVfi&&Wdf&a68z`*orA zA*U)2t93Sf%Q~;t_J0D4NLkX|$^exZ_^kE##HR+y1nN4h%k|OXcVrRJDn2BmffM?D z5Ex$=Bsu-D40r` zd@QDq!>oRionAuP6H?Gy2c}gl|9re3wc)qikWTRb!8)!+;r~V!ku+?~EO}Ra)-+K) z{Si=}WB@nBdwur#C$xx?Ufp9;!G7p;OKmL6HoaT6NWo8kT+i?RL>7@W&LFSl`?{BP z`!#+C8A2fi?NEM+pq-GSjw0|h$S;IlN{OamnGKH%dDPb+?ZnI(7^vu+7<>^7Qu-O* zFgw8|CA(kqi?|VEljFXcnh7Ku5|c*-=pN~rDtTAvi`z4#u1_D3gG%lym{6^%H^t4l zfN#8BlLC%^93h2Wp?DK7I_yS=_@WzobzABMg!g{y`)7m347Cu{b;@8sPdERT^63Pw zyBiSrI;-w4c7zmAqzh8%Ia$>Jw(O_vOD0OY`0VQ!!6Rg~v4M2BUv-|ftjz8Mz^Qu+ z@+^7_O@IFLpU?d}f)2HT&*racruY$dqC&d29}hKu?A;rO{0=PQ6lj#CduA?JUb35! zU?ZTCZtR8Ku7?{4>=Bf)Qov)E-zg0@IX=U!=KO6h6eyM3jp27-5gEfzxQ}}+X^#Yo zhJ^(h31I*n8SUzVhrsOrLMo?UjIW7*Ht*}G{vG|UE+594ldDYmTK~w~k4FUEIJrHa zp(dMu&4(@=Tg!Js23;HD>ZAD#?eXg^C?aJ96^0|Q@m?c_s}BF zs<7%0?Vj0$p>^pMv7UlKFkflB;g|@8^4nItQ#m%%zk8^r@y&d{)7*TCo1_lP8{pEaZ)U z-~wzGUwqYz^vU?w&C}_ocz)p$Z_pHK(azs z7L;yn9eN|#5%UjNrui*^m!EzWllG7wpFb&r7z*M-SVDU>@IvkWKHQB=&8Mzi+1Gbu zDdfbnt)@G%bFMLxNlkNR8P#>}mF0g&7LhR@*9^w`G%T3jzn1`}-s)@6fLdz;QK|E$Aw8@J zk-Tv&wlE>IQ*JcBiQC5^)Tm zRrhG%Rw&P@@v)reT#cuRQ=2P)LcE7~kWFbT^-(+Z)7z=XpELIc&`93?c4ap2@+0QV z1S@=2Dx6oF;0#);&xn}18p*Yt-NOnoS71u5h&q3~O@lnME}YQ*=LsG3{smC?>*=?RoM`&cRkVmvLPZ+!XV{Vie(CP7sO zahTKu`Rwz|2}SyUdP9n^LOcM|S-cBW7c!+o!DWUtEU|+^IL@^aJ|akbOK!ml z`Mh=R4&?MF%AkUCFxc|A+6aXNWt_ZaY&qv6@MQ%d9UU9M?-E+So&!EY4%^gk%21(2 z=Nee;B_|#WL~s+(!fxFCJtnGUKG>4{q4b{B#`bYx&^sv9$8BhTu8Tcl2UZ^L#x`r| znv=Ms-Zd$0?;6|Jp`ah{A$~!P3wMxYrjgT-GtAwDZ8vSqSEuEV_ZYBBcwLX<-$Sqpz`4@mqI)Ht{_M7@zk{iC{E+6hsva@#xOdehHVPKIPh;NG zXO*QsJLI8lxiJQRMD-rhQ{)pXvlOsT63HM7AfkpMM2T~|E1X{;3+ouF%E;4ZlYV?j zl_|UI)mE`HuVUiyD}?mbEqzP!aV{v#O*yBcS&=ks!+eEyBrBvgvlIc2N?p`i0zl{_ zHzKs;BS3C|_1N;?2;rq3Rh>0Y74Ojmqfy4ceS9%p9nKJcRmc&kJ^LqCI|}eTw0y$X zqvfv<6IKA3iJlh%~#V?cdlUDB|!((xl+@ zBbQl+@7MFZz$?c6S~EXm>Ht)}k7Ea+&d_9os22!-Han^_?fbAE4=aNA6sA*hAH(lH zOS3GLds37pD57hCEL$t7#O2a4I z-CxmvlJ_CzmaDx`Eq{GPq^nI3Y1GRx*js=bFKZ@log}9C>y@}7xIUlbk1W^D9bb;> z%D_}`TF4L~xr)fopuPBP&o^)F-uRjbE&Cmwfv2HZf|I=xSIB!VgamLfVPn4&o=}!q z@GHXxs8_{?uzp3Pi`>6>Thl7|SvQWs&kfFhxdQOhmG3{}3TX)T8Smyp8@-pQAsEvl z+S7qJ((7zQgcY*5o>To;XK%jj3Ai=bM__bH-l+CMSP>EgMS6}?hZewAtEf2DEi-tu zYV&Hc@bUQ;lB~8sP3JrY?6M}PI;x{eA%jlh>s%ZUD`I7pEscEe*{Eycr)CF=HJ@dF zeR{q6D?Il88Ii17eYlZ#3gs~~b*z4t3@GFEs)CsCkz@4ES_Zhtzczr(; zQV2}`RuLcjEhJexXX7#5pS8HwKEQ~7135IjU1DEbst{I0vQTOo=sXx-HlO9{LvM}2 zYWzLpeI(msOGvV)gEsSaW3ZYk3x3Q^iyP%R=f3*kA*_&XsP$|r)4(EXOZXkpl66(U z=<0SoEO~pgr+$rDUkg;(G%v0T3oWBAvU;1Gf$K~bct*S#D6Z*VcUX&Yz(=>sL?qX(2z z?Ud_TbNS)xJ+@!J9|(kvb!H^>91sz5z}6>JQ68N} z9s)X4jz_hE2I&J2VMd!Qe2gRZ=x#Ze3xTDJ?n@ynMFA?VhB!Dg8R2m-0= zRx*3|_&e`9%uITwE#qjghV)n2))`SlT!u-(8S@$3Gq zmn*Xmk(DP-XE&@ew?FJYWt6DSsgmwbX#T{17Lm5KK{*I(D^)0T z($vn>(dL=}wt229^xu2InDr*q(>n8Put*V9tVLDkI)k!HnpcAhk?*6L&)0Q1dgPQ@ zR(3;S)U8^}-AU{-=ornXMiraZM$dv3=8c*~4rL!-maeuL9#=%Vx*rpx1hkn7sF0fm z^pr(?Kx=RJj+D=Tpo27&&N4e>3If7^>(kLdQPII8v)%h`KVwePC@niWdNSZ_5!dR% z-lD%z-JxCXVZ|u+A$s!8tH>w-wM83?pXx{*cmwNxvobA5RC8FQL{CO+z-)}2x>YsR|Mr@NsR`- z@Z?B>#L`H5lrp&-$;^H+Bz>plXsa20&7k5Le235BRi zBfs%lxen_E@ua!^LS?^lZ6A`bjZZm_P6qH(gLXTAR!jjNt8LZt%7^?FlCVrz_pMGZ zJUtJvX(Dsi<)Nvbd@tR8;uC?b2K7^tKeV2N$WjsTdwfx;jmOo(ayH)mQ(Ce|;-PP~_@TD47m$y%^24#7C7+=56tNQ%uutRXeGO)gyLVoOfgSQ73QYBfMcjBft1|XvwGS;{@DvDIf3ki!MtrteckS8dRdi;$k_5!88?}v8&8Dlo2)its~IQGK` ztLgMonN4TqW%-4CeT8gD1#tP~ZRkho?)86v^30p6_^gS{_x1G_v%Z>oPxl5Hl&NaK zjaJIaZEl`vU!QY&Tp=86=CXR>$r;+#+Q`G3C_PH<FwaUj|=3c}42nj1^aZ<7R?jRLsj=pAbhi5RxdGA6;STX66nz6dvvB?VXewR#t zlTn)h^&``@4c*ffF_^FxkeYc4^*W##yA{D6$Y<|KJ{kPJxPC@tt86G(_wblbtGrw#L3C#O>2$eg3_qk``+*h}aVp%G-L%WX|gX##0%WsFwT~Bi- z_Pcol$X1=hUEb#Pkv#t7kC3=pTctoT&fI`yvz!80MS09Va`J8&<8j3#Y&-{LjSBhm z|Fm7*j-5FQd?njpgCEDn_GF~=MA}xi_wlzl-JQAgcY~s2k~60zlupROmja*)*2qhEFYu09 zN?xFBFmqnV;J95uC*LzBMeSrIp0CREO{WR|icoN^I{ort5z6X-e=dLGs@x!vM^5&a z$eQ6Rydvc4D?XiAj2yjLm1;hJF=8%oj{H)jpI{{FRk4q}SjcpqoptZ-CrZXt*wY$Q zhQl4bj|aEX-B^TSgu5p#jqC;LSu@e8oS9%;KK(xxCAh% z%?;nixm~09$9s%j!`rsR+tHacxvXuOVpCYU9lbu2zI{Xi>$&nk_&KtYrlpcwg+&E> zcv8#v!NMQ=$6xPnA*NM-(A-)Ziz<#*pIHH`TdB_I4zFue`Z6uzUb4Sih!cclyv9wIKG}?CwgRL*u6+^TriJ7!_By%G+0v#>_%4|g zfS{^N>bj0e|GWYr6PAWoI2nBXS*dBE)DsEl$i&I(`|%wJfoAJ}Oq~ds<~m!>7NJ{(J%g)Qvy4^|%eRe! z9bJmU=E3R~*4?W25H-hK&+e@L(v{uc`ZMn!US+SP^{VEGjSLyp0H6UrCuX$0YIz^r zfi};<*=oI9pTym)ko9W4SvsKPrmJn2V6Tq7#T`V@RFdX5GNBx{L8%rTdik zL^U7$gk2eb@XM@_^(q5<2iGOK%o=zJ0mr7JrMKDgeLlHwWJr<9oN(@EnCnRx;A`q` z+sSl5RqjugFS|lk3=y&JoJoChx|i|WN>gQf#ju_0lq_sz$ov6W*tofbl=f`3%HqDL z@dRkJt3Iw<6|!2>AK?;MI8YBSO0*PMrwVrw{MeI!KoqfD3m!ESmP^3ebQCt9kASGT zclYj^CuW7L*Ve2$yz|b0z~)M47k_^%6>&VR2jDeAz$Cle5_OlVHh3`jjJ|Nj{CUay zi*LzTw<=_{xShIePRY1>#j8xSRD4?r9J5@@mwg)}mdnyE)v{;H7=AQ+f{eT+D))lu z{Um6A$E;VgH8*Hw=F&;WJghkJt6Qt&dcF?;YY?D-=bS!!76(3^DosmXQ+mpV?Opr; zf5l;nH3qGP_yY$^xgGTvRZCXj@Y~8ywlfH|CIj4=e6}7IxYbm&PWG}+?_Io7-EYf6 zR?VeMQcHXoU~z+8HX!PX_>}WF^;#G5y`v$2iYsf$TErFZ17;=ay{5jfqunQz--6N~ z(?ZrwYJ&S%TheNt=Q&(<&C}n_=g#*wx34`7X%&YhRGOTbMak>FK`V1QoYv0iUef$+ zTFAO3FM~R@j)g6qrq~$!=)b%^Wdw5E$vX0}q#%@G;!^;5(RdDm`OOD5X z&Jeqpd~T0(Z;+!_d|+F8v0nTPXy>(9(IHTbVTxlls)W6{cHDuj|ADij+nc6qBft~yau}kwAI%?5mR(4_U0~)iR<1=67nj>(# z{ug3cYg6P%*}xqQY-Cq3x}rcqIoZ5_H`!n(V^(Yp@drYD5qoHQvL*zjY*~4VK8l+` zOE%JL1ll6pN^IaDPGC<5_6fhUm=VqPfW%-wZyj?bX1RB)Jp@-#o^@ zwuShAn;ZXG2;*?MuE+-@nR;(RB!qN;L|4cL*VEIq)xIH^XZTJBsmonp}Yb6@PzBPA!J5e2)A_Mo~k}bum6a- zq%K0^`s6A=j0=dioSu`|X8-qm@+1+nVq^s9GpdiNV4v2Kd5lC_TdWe#T)G{7d`MG6^MiPU033NWmilhd+e60 zwq0Di8GMe|Y>(kJBs8yzhF>f=qL}L>nt1{RtqoANS7zl6H#@fi|6dD}zAcNPnVjkY zDg%eJ-K0+eoSkXU)<6dMiNo+q5CMRC*@W+nA_aJ11AUWsq&3evmh=QLn%X;3xaY@-sFbBoE#=MurT~0x+z3 zv$6J;v;Kx<*kG$MNPo3yrpjg z4%20oa3*4uM~VCCyc0Cn!m3xTZ4b++Lj4-{+K=3CeKu41is$ z_15#wxS7<~@?fyC&{aOcS1e{+D)-kEIM;5Q0MbZJw%;3mEO8!gtfy(gv z)w|nWXy~L_4uKGZncQDk-IGNaHihwfv?Of_mMdB6;*#&Ddg<;nG&V*A@5MpG6&zS3 z7xID2AIJPXM|bgdod;Lbomq%!3IMxmE2iLW_?WnV)&+XbJe;09@U!mDLQKnbRz{R; z4G2*xI7rSaWW)+SJ|4t!cW5D|jh2h`>@$~KfL`nr@ZEa)%EyyaPhDD!adn;6k8v~J z4xlpcyNnlq<&ZjgzP5p_r zkLFVnr*_RvypwNU2@|Y}pm88e33x*1tLzhJ9U%(W^Rz>+na~ds|NE~H0irGlniWv=#h^tyssOJp zjPJ6KHESJx9T#!7P4p;x7qx11bV;X8`wZDWkouL+%Zt0LzMt&pub4#>d;-8fnr`)) zH>{I&*QM~1!u!C)FUvwaSz?}z3Cnai*FjZnR&q%X{JN{g`gR5_S~;9f$&(X8`I>-# zXn7Tv$pfd-{(x(KnijEYn;5>fi-R(6daTvE0?q_cZ#$(2`}yO?-@ij%z$ys(IRMWRF8lXd()NAl)Dxvy-Ey%7A-FVRZ?1j zXRdMBfgXn!xhLt~Zt~2ukX6&9v$&Rjv#IN`Xa_E{-bd|=0URGZoB#OvD`e3~;VRg3 z>!REX;wPxF*W1i)RIVyhpO%HJS#5b+8>4pvnoVE=8<)YB_qFD9)nR;XXV9YY9CN_j7%peu-dtyL5zqZM(Xx z$nGc0A?X<;s{8CyqpVb~g{m(ZtT5ZA&qm+g0$g`%E}bVJdmA)>@%yQGScq+li;w?q zbHkHmC!aGPV8}gf>AFtF{FV=kv5mUglHIAVB6V8v$0n7b0{DH`Lz(-vr6D~<@cFNi zq6HUK;LJ+yqc@)oC06x%+~$6Nk1|aGz-Q|-x8(^m1o+cszX}}Z#AZJc5sR|zOxJ^V z4L$sI>QUG1+Jg(|ve0z^x66n{nTG3Gx$7R@AGZA+I88Y{_2j^<-8DCVh3#lV^kgBQ ze^#X%d~l+a%Unj9<@$>Lk`jxuZGi?rc!}*SDK5d*rDv&0(p#Eg7i!5FT^yg6j*0Y z-dy@B+x9;2nhid#sa|1!+qc|bh;2MFl}vRfWki6MfyW0QBcG#i_%6ow^Aj3TL_}EX z4Nkctd;%7AS=mJhM}mXvhpw3NyAai<>RF6& z*0Vp*+NJ||2`UP#WD{RxAmDwS(D7+pkZlBSXEY}Cp{yQR8icq_@9_n z+s*ZSOQ$x#{|p2$EpP5gtmQsZ%pLs` zk_}wiGXbQB<Sg2l8UMG1yJScwQ=>tga^4qW6 z(LW)|DyzPK22~(5WqV0(+r*`yDGA_GA5iA^DAOo8PnaSub*=vTShNjpWl?S*^bd1K zA-2g&f~J(L;8-WQmLh{UlfaM6^dQslE6g;KqkU+0Q5E%8=OSA6S)3XO^td|S&)iXn zX;`M@Ei{HrUBJ9;j_I?oz+`*%3*_Tt2Yrx{u`j${ocVwnVJ6FJ*tft%$1#rGQA}?bvpmD*lx_3Nfu# z#bUvKyUpE?xr9~PbxZ>^8rJmgb$`X}Xm1Em@E*G+*~M}PJQ~YIz?hcsom>66vr@T~rD)Z{i`n6T>{qE@Rhz%w4 zxd&rc5N`wmY^+adOTBT;^|@&{A;8uF%O!Emkg=vK6LO}dqTI?`;b&SJdNP(qeGCl$p0Cqlxvz=iV)vMy>_ zyit|CHzK>h+eBd9{n~%|zq_LdY`sg#N;X{E2bj_%HRgG&tzPWfMZSOTe{JWNYxX%_T+Z?p`Z+7XxryA@^*5!)K29 zlnrF>$dbFly0qr*qc_^Umv;aB^fRQ7d@ll}-CjB7(w<1ES{r90rmivDbyDFwu!w$* z1M|jS`eZ6_v_2H8Ca2eg_=K;owbu?TMA%`#+cUn$hgua9d(0?Y@V|GJr&x$^;F6y3TKRU?JKLE^Mx_r`@Z8YY_KTyO!d$*xoDs6tEE0 zA>IUEN)wJOwYK~v`EXyz-l@@f0@zE;ib=}g*iK)4+PAib51CX}xcyPv6YljTX2rOb zU2z(bu$RPn>nx8w^mlJi$R|$aON<}uJFmt_NW8OgXJ;CDl~etcmUW$f&-@N7WW`)6 z)BCimG9u(CaBX`Ozm{~V;HS1S#E&JU<cR8*Nf3in`p-&lqh#xC3{Pa+@ zbxDWE-4#8qM)#OG-%sVRkm~f6#)N;bNCFPL=|Czxrx@o0XEx;8qA@I{bA-UZlAT)n zs8UYzsWWh3-LFU!-Lg1;z$$MM46!zmJZ#N~=ybKu^T_yLTr7c!IAQfbi((y@v0>b}9V0w)K z=Jn;RKV~0f@MuFevU+8cLRsoFjLaiuNLg}H9}u*q86b_bOjd!z?J&0mDtm2~eUF(T z(CU=pufC}~Rvd&Z{cuCpn~GSnaV@3#6E$O+J{6dn7+`>ND0QF7K(0{cwJz5;)<1DG zrUc$?%4?>xCQzYmt@>pKm%wl%7Jn*&3J z6&d0vGS22rQMYF$0Q>hX{#_xZ<1=*M^(6h?B7>~-XPoJo5WJ??Ha=VpJ0a(yh8h`IYV2IvZ zR9a5RF^kr=dd`;9yyd>{TlwWBL^rCcWs)Pals=J?TOABSJK=EY!0|qT?bGY$eSU=O zD3abmySwZK((#dN7liq>M;(RcjXJ(BTnx12EY|CkVE*L2#a36|lM{CzsCz#JfA%zJ z;Z`C}ur$9vI}_jY`C~}b%YQi1uJ4yX2R0M~?TFO1wq`M%CE?JzBqaQ<*eH4}8F@g9 zvbR+MgIslS?}U#b3~*&yr<8<1f5-L)b{jJgIU_x9RFkRA%9dj}KsdVmIMFf-DUubTRVaB5fnkrvm0Uk$)f*knpV6^bUt} zhbSc+f4?l++4dNuAZb?X*6~hAfeGWdGo^XMhl;Im#;m54_q%HD>e|+;l)5^Ic<2cvt1E&$y|rL%Il6S z23LcL)zsTruA1XR_J3qHkX-m)>Zw0r_`nsim;0nT8CK=_fJ;TeQS7`|W3Ozys#F5m zw~#XllCiTXynZEWWy_S|9f@Edxh;F*OonVE@^PF=pD&z8wFzFaaYz?_YjL4#zofxc zMBJOH3)CwdY8!^t=}D1X0#UNobY82rEXc7Azb7ctD+w>lHh*-%+cM4~Qp~JZVODpn z5zFOju^mRAtfZz{LC%JCY^pFq=DB zo{u5lJ|}%2(0{Qr1sgdN(oG)E_=p&nYCMhL5Q@*Nm>cxIO!cY)1~BliTiNOO9aF63 zQfNo@v|2ci!G4q1j-9q2Lld8X6~a|B4Px^3i-ULV38G#|EqgZ1U_5Wkf(fJ}Ui zK)9P7OMk2NGT7u4<$0~*2dtQx=mmkt48BVJ`1RuR)({+LV(^G3V8xVudz*+S8yjbF zCGgec5j+h-c9yQS!VW9M%Oehg(PVE6nM=q8yec9%T&ykpafcOC@(nl8c=hQDgu9p4 z&9(4{HiE_7b>RRj#BYJafc>orceN)AgV^jraDS=Zw!vxUc8z{b z$wyPT4$Cee71u6p{4nHMW`LVwp%gCFMq;CWb|LG|zUqA<>90>Awgnxe#!!c=wLTi_Q^S| z4S$xJ>?|5SIp7IcA&*2$w^yI=IH~!hnB(_J%hmD(Y3$A90V}2`J^@&@LXA@cxv3!W zY42Lj*|x5oZ4N8svOdFMH9;&)l0?YoI4$t3spQ1|I<@}Srx3qY+v&L#mbwK2n|iC9 zD4l_oD}1fMbyy)>e(6HGPo7%X$so?+LVwj|r`(2KW8%YaMa_t}V27wbMMbzpC^ zv$1E~R|Kv{Je)R>0fEW0_w%H+5H5Q!uIBS0uAlZ6F+Ha(@3c^DIFP4r22IV!@_=2@ zT>LR}{uvT|x;!LP^dLj5q)7L(Vt@B|&F(#aAM?PU|As7+V7ICMj6toaSV7Kzkslz|B7MTq=FPo?ov&EXFA$*N#s9 z`pc!s=@a-^otXCYv9&)?{rg{pUpOQMoP8wSl6YsyLmP}=(ZN3|lPFs7h(r zEGDEafhbR(p{27Tm%gKlX@3ZF=?Mji#}~IxEC@Jt$;X!EsJ?~t4hc0%H2q3> znrxY=hjI}$3WE2fbQ$LO4(n@#d!V}N zDWiKHbc%j46pD6a+ECLck2e1eC`(Y|!&gbz(*gyrHN!n{_U zo3}Q?rZqVBQ*-64RRkL#eF6Yo;{SyI; z7E-^2k4bCTM+V2543Y%{0|C>EWdYWX!BqynooK<;b81734u7ausYP;GwSSyGJFfNi zPe{`qvM*{QA>{ZbY6dQUAVae6<6rN~6@+X0Fk$kE2|hP3``D(vvei0k#c}u;*X!Gi zF?z|M3!A}ZCgm=3xbbt^WL%vP-eH9p7d&P~Ocdl~dwMynw5(^j)N^ZekxO$}K}K)l z8Q6g*t?H77tAA0?jOe&~>hm%Z+Hu7g*WB~C)~NHqll%dl00`-rm!|i8@$DqpX?^*fX!PF8Wmt>+RnN4*}z%K3vL&UD-ToO5?Z)r5>;DyqWy?{Tguv zG1D%G>MT{j8w$IE2v76M5u336E2_5$R14WnQBQwXKXbL^N?#3}*~&WQB9`Fw7$Iww zit7^&+kbQ@#>Y2qzt-39 z`=1b8-J6JAhM=sR&1Gp^hOD!b*0%S@Z|08c)6bAygc+?`miNS#+T?7agbiJJ3`Mqa zv8@NLkoBUxYpwW(D}^+t&WUR)bx1np=p|I|e}8_3C~#n{xVnORD#Hitf|8zA1q8a_ z41A2~@9}rYLM3hU*hcErEB7gsrI}~bXECDU$DqFbSP?nT!Q$}PCbTA7o~w7Usnu$4 z&Huop;y1vqF#DUuFqC#q$sbrRyD7X*5fZdvsmJNx!L-EWFa@Fgj~?Xd#FpXU3=G|_%wktPkLNCwXBO`(s)52WoEFr@~xd?H^x% ze~WOexnv|c$nHD2l!hnR=C8rs#%Ove)B1n)Y0eNA!7wI9LO;cC!nG!;g|*MT5RxuJ zm%rA_e-X#9=ppJzqXDk?*bwj=*t_*y&Gg(-o|peZdb_1lD_-ncTLX(fEgAlpOqAI! z!T}B{#Mb|hwrg3E!^V-n#5al0A@T5ZOiOC3T6TNCeiNmcJr?%@9~`RgQV2nUKqh|) zBzp5Izco%Nr&1>z$d)-*$zRuyg>w2K=r{-a~B(fZnfa{7pae1=Jsp z@F8y(Whe8I=PoNwt}c~arIZ8#OaY!Rg_D8+7xHorh>SQ2e&(0o4cQQ|5c#<$ArQ2i zRgVxw-Z7dkCa;m=Hh3d=Eo<<8<^nwbI&QsxJ>LG_5m3IDNogj)D(l&WWe0x^$@ti4 zBTK%HTrlhL5nw;JcpPO0i18`K+x$Ve@BI3v?YUV06Jgd&GO6iv%&yO)M2-et z9xH=2;&{H!(vMHKE5aX-rMSvZL8OLCx5*F;Oa&5x=4Y2J@_yAczi_6WdjvE zDeb1k+f(W|jBJf01Vgp%%gjkP?C~KXhP8U6fnY4nzGkNafDJ6yDaY(wYQCR_eZ_30 zWG{B`83;U6FAX$S(v+btrY{#d=7#+WGAtjUt#a5_WrX-M*2GufbEJQzwo4z|*F)a^ z3NcGvY_1k{k)P8X-~hB{WF`PZx;@%`J-&I9bBJLb5kUZ+4d3IvbLrar>8Dxly7Fs0 z_}j2=F@`0s1qhX_RHPw9*}4$wE65|#(B<(Jh5<{&tk|x)o4C42Sv?aOOeKGV#j%`u zyk@b#4U1W^TvA`^y7_;@^)r@FlBn!2iU*wWq9G2$e!a&;ee#lr4KfC}?7<&K8X^Y{ zs_uQcQ2Kg&kMn(>`^u;HdUTCy$+Z{Gm_o%L^Ulr1zQ;MgODpi4>XSm}@;g*eZzOIn z6@;O$*^pZn=KTeHzgsPSOPI6eO+8_BFHjie5vmcUnXoG3b z1b%ci>d&8_G0TPD07w9+u0D1<(9pH&xnVIY*1*cd)6fJ^tQlA$B_zoM zb4$6d7@R)DEHHmXmb&I?j(b3hidSLpj9fm~yv*YK`g)J4jFybL`^ffwP}tvke5& zgEP2J+TIZHI*NYo^W$g4gSuse0qIT2M^RBR=~E_XV_8FNy$%b%t@=CS1op97&kd}< z;eT6f)aifeCW&)@etlc=U%Mh2_SMBiOB&){-tsJ`IwgXu&xzA;5fOMACLtj!ImHHQ zZmwcIy0P~ec*w%SZMp~v{Ku|{1?vijB8GSUmLMA5skn1ugb0Asi#SDyUdHe4hvIi5 z+uwpJX|bAf#VY1}Y1{hbe<}YvB0wM(xR@Kz=vjY0bB(c=lP0s(V;9Y)pU&Mvnted_ zt2J<)m7IZX(p3_^KY#}>eRrQfmEZSUNO5}ay`|YE11RSW1Y<7a&OD@Rx-=oVUH|&` zM@WH^5O<_$Y+}z==Bmim+hFcq{aiX9zCHeUe3uAJn!2UT2%k!)!^Kw30{SDvXC~=+ z?OT5^i{F1nm<8XWzJNx7`^o}F9$2#Bx6$BeM6Y*I_`HWa<9Sj(x%30?Qkivn&qK|6 znz#h&OQYU`jMC|XlLJA%dB$cVpBL$3i#{)GUY@SMg_N@}cFYBHOTn5^U5lq=7Hi1f zF!WL<_#@)@u}-8x>Y#Rk&qiufh|Mom&)r{Q4H56hjSA9g!;a(MU2@ zE9Zl+9Yl9H`)kPX?epU!1T^&doMF=7^}z06i179SMj?rEx>WIhvlydzP|se;oDzQ) z$xC!8H^nkl9|U3C`gxoWibHmF*$&a@PqkLrC8Zxt;u}8_> z%R476>fXh9k#vMnKO#s(K|bC@lv?QuVmcDSCZ{>((AoNHqyBl*kdC7wLpOip`0?}# z%C$Nd)9ktdYsp0xdW)P8AtZcc?-Dx)ghmU`4N^E*HCqF+}Xz@Eeh zOso0xG-Kx$V6v8r9vQ6qJH#qxA2m~%s=135UYO@w(4|I0U=Gf`r?=jxKy*=6rXsM>0tHDn28&K4GO18_KTv!$3?K;ILl`fgh zhvP2olzkRK*^`p;C9-3!LUvG30pBW$fNptLLa-`HT((UR-R%NluvUK|R%L&^!MOuo z=rprS4Q2cuqzlPs(B%ndM=<8v>O%GdX2CWlFh52NJubM)fTWk&(#Nl3G5MzUbaeGK z&&qwQd{oC?&&*@07d0O@D=6VqV3n5oS!c}d2XRds)-szESavll<_tC=zt5)Oqd(O| z1j%qM1pPy2TxLf;H!*)k53ni?2K1XS$LoYaR9zuZt$ESi>(KDr#F$Ljb%QjwL8C68 zehx&_{b$~(()INn?Q;`D%o0GpGaDPA)$zV=gb8Q$2biH~e_axf;P42UyK#~&iwOAo+h1wS28Y#_~w5<~0mm zQvnaeQmq93wd+_~E<%&fwF(&tCx=Cki%aGWCeJX%`X(1N$iSzsAr``W2%8tCJl85@MBQB2I-50h z4_6(Zcptov>M93d6o@ph zJSj7N0pyqaKC`>Z$pwtUt3s?&q9#c}OC>JLiR9Xs6DDr9_^n(;Y4dlU<# za#jIBHA@3f24U;IRuNWtmAkf)fQCtdLHDS0$XGpVrFE&=@e>%)##;T_5qN#)0zwFH znmNsr02zOB;my~u5F$pn_F|mEGRI5|tk91nuzFkAMf{D|cu&4ZR1hKG6&~C6qSBqm zySg%Bx;s@?x&-z2^QM19fQ79%X%(=plnp0Z{tiL3WzUiaUD^y`)sC>r_scz+CLpp8 zm|DvV>H6{{bS{lBurLxk(sd2*)UIO^PNu9q(?wMIw^bnn zrDY;2ZACyhmd#b+^8^W0FV^1sZdS;rA z_5nqGv%s{T)}%AJyD-~Mi7yRa4-KiT=wAD!mb=Uj8#FmD#0QeWlP*=5-+oAl6t91t zd9=aZ(=M5rTuu*Qk1GvZsa)Q=en^N8?>R}qBarSAPF{b?Hm>5Op-kw-flBsunVm zt4=V$Cdh$Vn+~664FJD&_#?nYN9Dm0y_F-K+SqUVv55s)CgUJ(gsJJ;V&^qr_-Qdl zRRLYjXHHeWQUHk_Mw?n~NI>%{gYzS#4Ix$UBvG|8slnyt_zZArNXlS`uU~)O_{YaT zA<_{U1k}m$v!Nv|(?PiqF`WE1+2dnBJ|iliGidwv*&b=Qk}`f+PMLdwP$01G*PHh) zA(a9^<<-a6?0l-vf5=N~$+`;9nQkfr?|+BbM9B+4+g1cCud!>z`ys~XH6juf_dc%fUYAWI#KZnL{Eomxhq{R zK|dd#4~rmx)=QSAfOV};kihI>6`+7#89ilRClJ(QYs zjPjb*92T|^0kO0j;&{^9=Qs-fhcoG;Vm9qPF9Kput0IQNO7}yU2KI2MO-(-Qs_ICi zw3RPyByQDb#9F}&udC10S1vBiD5t0w@T{`1T(1-J)2fKI((P}zOhmKc3%Xhc`~#o2 zgy71ran;kRM})guKgfSK-lwr=%e4Z6wo}stQ$3CM-7E_+tGejnPBL7ji@_aJUKChea@h?lR=dB7(=3ySB&6u-?75PGdbwgtk*X^r zczIKQs>C-j=cj*J5tS(Zh9eu`uTHId5A%1Dq-FSg-+k$r|7}*p6;@{axa68}5?h-t zdWGLLVIPaU{$JA9As3^W>gmigorzG95Y3M$6U=RI%hswZ(6{B4U>~-oigm$U^M( ztAJa(wLO1p&G>vD{D|cWnMH&{N7G8@4zSs4XKbOSv}J&o^?Q&ADUdFv=CccZm@g7H z!s`L%nxi3km+N4U&k)CgHSERhavU;q1#+mh_Or{BY}XMeF@+6h%~`!ey&dJ|1>~ui zfcOK0AuR{zXvy7Q#j<~36)yo^zdnC%{tUreX23B1CI_mq zk%ERX<3Q$Kz^La-tkJ!m z{QG}2Mqld(4OLqOUtigEH7a%S-~inu*!YOdWw=Kwf`CW1xAWdma}7$8CG)C7%i)Ez zUX_ttnvG2E$E~Z3$RX}sV_;x1uVmDqLrVRC%cWUGp%k%XbpY8=>DCq%)36B^L(2I< zUS7DYSGW6n$+{zFZX{u9x3dDalVIU?nx%hx!{riRTWnP#gGE33kzt@O{|ZHCzwll}9HH^65amHkTRX3JOr$E%VN4)mF-B z;`R-fONUP`6m3h_Os4bP3k3;OCy6n_5yOGl8?F~V>$MSH$X&*oXX6>x<_v*m#_xZ< z$8UI!FI?7Z4l>jE-s_sNCSU^T;oBZ7*#(C)u0LGXi&xrQ3Pjq_O}ql#Y(j#KU@-UA zZ@}dfU!Xa~`c+1ad2ot09Yt->O#;){hbe;io7Ov*F0z!9If!X10M;ZobD>!`v!~2j z5BdHBE)S|Riy*6RfwBb)!>1All?s2ojhtUj4U%!OHBYWNZNO6l z)tDVc)W1KFFpF>N*EtVBG>9X%UKbu3Xz5r(Kgb>$%4ZS!GEbHK2kct8zv@ z%bfzA>dHIi(=hJ!+@&+Hg3^QqDzUdY4+dV1!T4K8+TV0|hPDUo;zx=|uR7NPoHPj% zx2C@0?sguO53Y5OZ{NNDzu|vE?Q;$pQe%Z)0wO+52#;FrjqGzBoM=A4a%nnMvjg5# zmvo|uWdgyUkwGIOY55jd9xoxSD9O&r0FIDZQNd^7J*Aj$_{rz?-K#&|co@aaUBT?Z zo-+tVYz_5@ICG2&azlr!wub7pM>~+(7HUUeq5KGhkH%($7o{Wm899IBgi2l3Dko`i zPRUSX1F}}^rZOl5mmNX54io~YT-IuE*r*DK;>boJ_bSAZ`);F_iS0f5hYg zDmI`R%{D$1S&C*-C>#Y3L|*Aznmd4Xm

r?J?h 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%0Dj0U$mMh)~of{qxlFw_3 zs}n}UmxLV$ysov`N!i~nwx6gzUkvfEi^(X=7Ar??iGTH?n37yH^$nGs*C+Yk>&vSO zJsae41-DTH2|5U{!VzsDILQceXu6$pIkuQ5W1G8U*rYiN+eDk+pTQaa0whjeDW#tuV8>khk*ijKa??)t-{u~)Q5 zSS{`rd%ReWFlKphIUwT+Btg&~5yzq-mT2z1Iv?z9(88h?X^Y(6B6WreUe+S-B6txvWAi0M1YTevhy{kmrQ=B6%DqOV70kVj_GrfL}4B!;#fmgB5G3}@{Ft=mt2XvB3XZ6R(UufD9W_!8T1p-mJv z-((+#J+%rF?JL0cs0~gb05uS)CR!T9B7Y+?NFuE?E|}wXS$l*q?16B;6OVle-8+f! zF`#~=`0N>Kj^_pKE;1}m$`oX7GQkBifoekodZki1EfC@2j4L&cL-9`9d=3bGUh})? z8amxrL#Ml6L-+SMfBinrYn|DyYGb@=B0*kN^i{=PZSA(3@Gsu&fPS=`DuujSXMg8a zI3*0%NhYTN3~1%amI{Mke*O8~;9qaw|L1yxiib}Tc}gIC)G-LciS@x-6AY*LN{6(q z=}di!Uw;4a({D@VzS$aMKAC)9y_<~xY_BG>zbv+Pn>Sl&yh58CJKmV%)z{?{yv3+3 z*U^HIs0Wodp2=u9;R1*FEBo0s<$o88p<7C#7YeLT#^n4rV+LGunpo~qIIa)ciC2^4 zVOpXA-`a;@WfyF`;#n&ZNUf&Boy2PMgl9pghT{jNx6DoN$<vnDeGb_nTEufvWWHwk%4qTtt8H9CcSa=glk}mqW=KsJ#T5SHb41bm^GL}F7 z$J=*r-@W^7`DWgb_eZp#HVjkBUqbRWw?C4$n&LUAiA@F3ur|mcg6GDgAFn8JkbK}E zsdPBwlr>vy-}=GqUccSGquPN(zL*c&PO+GwpX_M+x^;=f!BZb1Bu9KAfe^+6fJb{9 zf=FBLdpYS=cfFKe{+?DlR)2r}j>r*bUxMVpL9Ovq;1ZshJ?J9v<`^LNc9I%orCi1+ zR6wdqk^j>mP8oPR-X471%N{gH-#S*lG!HvN=6kC4^WaZU+3q|qtn)6`Oraf4l!Ic4 zsT3$h%Y>e&)QS5*B6)Is1PFdw*B!<)Op4#OfEHv7IV#!SQM zEN7ha*Ya!p?Y4{fQp|8Zi=*^CIys?6k{#Vjsa^~d%D;J8&90&!rkiC=>0&UmEW5bI z>NAR5G`B@*IEeL0E`RNp;U&t;>xt?w*O!Uc@-?S{xF}7a5*dkOgownQ(h>wgH#Jfv zwvgw4z5So}AAbA&ufM+i@Q+m>ayeW$G}Cpg5EVz>WdfgLbusx|zcHL$jqrMIhhmb_ ztZ3OPA)YG6O-RX!s5wXHz=+@-NZ|;Wrvu()l* zhx#G3A(^X(-PN$OWR1FDQs+G?Ed@)ViQeYS7zh)}iJ=DFujPe4Bw<4?~_wX|P`e0(V2!`7nq z`vHL4ZL?SE>-B9>{2A^9LzLptQc5J(%DNa8Awe^zgImXUPuLfwOqO8YGHy6uWeDcO z)V`d4erRUEk1UFPC@nB=pA^7LJ`0}oytIw%!jWQJMx|0nf)S#k6@gI^jdTCc-jy{s zk!0)l`ztEuVZwA^I``#v%mYmW_)-j#hKA=S{o#yR&>5R+go_@HC?$D6LYLA&Wh?(fSqY-dVomi`{>W z-)-|_mcR302DdH$u({t|D#|{l(~uwomBx4;FaahJqgV?|l}Er8-Q#qcGB$PxqBj>s zbh5U)(*0hr>cN`-o=D$EH3Wm;Ff|5{#l|{>BHyXeQR9Q*!R*#UqF-zN&ivkJ*Z+`Q zJ}|PdvVKEaZ^dtjPy0`)i|DN2+>L*Ie6Wq{@Vx$Pm7p-KT+)kBnRp#MT$od+Uq5>G z788yiS6|{$jK55e)3ZlW>3uSjsLArDs-yRxhGBO6uaozWtB)UE9IN<&@ud3iJT+yw zT5q1S-;R_Jk1I_{^g8l68JC=tp&h~U_;U)Hi@G59EuW0fDqJ1K1AxCOlrn$e(txAM zXYh|YIxdUr*HGp~jq==krKu&rO-Nf?LGTE3Mj3C57+x0%zrOuAz`x!Q23h2o(eVG` zO~DDy%clp*I!af%f$H5^m)E;u-El{ycN;RC04tf(fjNOZ4a5W_r~u887R0v|05&0m zv?GH&AS2&NRTvqn2V@XNrI&x8r8QWwXb33;IAAIrlOE%)GJ~}vgFPT4-$`8<8F~j~ zv^3sj5etqH!!(T#xWOEF)Op4S6NK1f26KsKYnN(y@aOF77WVVTVAuM3*Fb+0vkQCW zWi&Qs7yQU%z~Zt7 zZt4{c&FZI45MF-qr(2<%P`3q^x5+qdSa&;5@O#XCT#^k|9fVwRv#4enx@uvGAK~Lv z8|~Bf!E|_bF@of@)Bu~nY(6>vTkUMT{`l%u+K`B+l+5?>e3s~IQ?O@s8qso<^z1r; zzgrq^-_^cDGI(H?2N{2)m0+FJ#&}^FV%m5_C>QrfgBb6x=&?$>+5gF zywx9Rjm4}S_qX8TQ}3foehy!jY&?P|r%$TC|2ZGee#yS};^7t~9L}cKnVUH|yDVEX zqm(@VHGU}X5srq_S?c?d)~J?WzVCGHr7wU-$bkzUb7B$1hg^RJ<BL;v064249(4 z;SPk|Mn$eK`K`6%f)2mI2xgG#K$qOQ;>97Dk3{!C1cQmd(r6;$2@57MD5s3G3^1pj z$ooWu2_$UYfeVkT&RXooZ|#>P-&jvB82RjzIj;lH+1@-{YSLbM*GR09vV=>ixle5t zrK6rXg&jvE>^6T5=-UM)?8UqfM=me>tu@u%F}@NsiKd)6OW~31bEQt3)dl1R3bTbZ z`M4sPZ^@j*;&H{Uo>B5BKTd00Q8CwHq*qRdpW%FA6+XGL3iE%9E0tOYBqOp$W`6B& zEAI_wa8`dKKTp>ueg67uiz~SP(*In0;rjO)F2>qPT(^H^Z~5ZS*AMpRwKIz^Y%sdh zk1hjN>sNmorP|NrXZGlq>KIpNV9uu%OeXPq-*+3E_2LqPWC%PlR0pL(z#M@z*rfjV zp6;hJb_3Pd#MOB{%WO8uJ^8klO_WsicQ(&6TU~pH;$|)aHc|F#qL}7F7*K+7jFD1c zC8&nty?lS5o7)W5NBEFwaFZAu7tJ)t>n$@4DCfmeeHcXJfJTQFDIbCcOBf6BLuNi&(eAZQ-oj{zG}}nY=H-hR548mOR>nhpX4my*w$7LF;Kh~6S?f=# z!n!|SfFinolM#gTX+3@a?BwKemD65GozC*)$p(KL3Dw&Be7w9U%S$#*8K%{7{@LoY z8O>pl;8M3z0-sH)6cmrl`3#e3Jn$zaY?FIqFNi*NvZ4r6ntHIF1t|k1lvx%O1FL+R zSAL&D5!0Q8*mm7hZvUPAO0#?CX-%7iWi2L`((xV&$L?b2JM!<+eq){4i0bBbW;M}p zMc@-2mb_Jcgnq4L%6LyeQfjqIb=Q|0QwuT?8}~H5(7b2(bh_V@6xHbBRjVBCAK2Ty)^c(h!M@o%aZ#> z;@y|Mkn6T`Js7T0NF3iHBo4`j*86|#nf~Ic#Y4O^U#_~L4bKvhH;)BREQ-$>RK2Bv zNgQooNwFZH6$h&wlhk5tU0c6~hOLn;>N4visg|FvPa=wl`PsnP!R*FZ-)zk%U_Y+r zpUo(~IiC2(i&on|W&Aw4!?573R=r)iT|eqQsQzbWG_uD1k?rU7!!U_=BN3O2R0~rj zU2xmH1nfLa@EAEstkHy8MTkJiGz~D#G_NV23u7DRjF$sd3nT%gmnc;WIRT)T zVpR(!e-M#6hWcop!iC^IaOAC3)M??AF`PT=h1Hh3-I}L-gVt#40Nb*j?$3HN>?b=9 ziyg`M{Xup>J0iMEp5uA3XBH^MxdW&hi?yu(Sr4$qK5VS@f8|yt2 zo_K^*04E4zlT85Ep$GS=_ zBqwJXMu*{Kcc^jPegEv_^n5&l>TKvHf8#BhBc8+TeC#0wk^ca=SiL!^W%_&;h1Fy@ zo=@{{Pjj5)d@&I>Z_<_NN(hQOjlm)ynmLJ`2*F!s1&YQi=WP*#>u5jueen9t>*uX4 z#?V8Hv4qRj5}g7q#u(ovqo?H=jkoXKf4qA0 z@}Xzt7T_R-!9jWeht^(2AD0_O1x}q8oKiYEyTXCgM70fFX#mIbw>5^1Egf3(4S?NUnR?M}nle3lk%%nrKI|Gze|8r%QZ?=|PA zuX+oYcG@tTcZ1rz+vFUyruD3?)MHA|_m5cCk5fvWkj|%u+fq>v0;7mI8IguCce~}5 zcNihCd3Hd2GU$e@%}!^-qW$`vKQcaf*=b*Sy=6T`dRl7d7a?Mq;8Y;Xe=X+>X{SLN z?}Q+T>=uYAiTN2!&WdBcVbKT7-x>3=Fy`et=4G*rA7X`*8X-VIAQLz@K?MgI09guj zFU5eL%%rvaFQowI%z|!^-*&L^T|oaZ`0-A(P=#rs)@h+i(L$$|h!O|uBoQD*z(7VPflbVi&8K4Vnfl84uQgg+PUNPUzqrmDC2OeUj)M%u5#%iPQB!zB zsEFQDkmUQ(774n8cr2swX-Qh#T=sz$J<@^{rUhB21u53y)jDvLMcsg?1%ZPDs-<(p zOQ05gKi*NsFI)`!f1t(MvJbTAkrrk9@#OVZX+ev{j}7J4Xrx?pG?k0)rjmhCVleZ_ zq1|Qy6{p4Y%W&pC6{p48vJbTAkrri#A?Nj0X|Z7#a)+%%rZJZsbD|hT+bQq>!V;if zY2wgcLd>Z!u8kIp!ntV=Ce-ysA1KiyC3s;<@O4TQ>)H*1e<2sRcS1>Pr4|xNiMT>U zn*gRQ^K0*vC~rPpU-W?zJyN3Z=DS$md>6$w-wh+o8>KL~RN+r}aF_=J%wXq?+if6K zVM>%YovttXK#3kHQFw1&tnbZ>VteyE{ROK9!qRvV93{l1EEVp3uz0uG4kalu{WPAB zd>`8tjVnKpf1^io6yBj1>pS#f!w&sc6-0H)^sS6qO{qSejOQ1F!Qgyg2BX0&KEkI) zMyDSkZ#2~o5s#woG1gnHqkn>}u{n{M;9u3A4XCD>~83GK`XR;pH@5!l9S!ZeB?COSB!qtR1}#>>Ks_X#gx zIKs-ue-vl{C6IOuYl5XZL9lAf~$Gcn*gE9$6MVvQO}E1HuL% z#%W*@Yo!85&KVhB;5M|?QZ<6->5ErSU%qbze~;=4o+ys8FJ(qm7@5=Q<>2MiQsV&d zv|7(w08hord7JS>EkY4JR3O2CDvg373N%$LAV=G_#~bnV>g4q%2SaxjM&tR!LB6_| zO(YKhMP+UIVs*cbC}Pn$1soV5l0`US%XQRe!UTuB#iVW9tXV4k`u^9a@7v9J+@ZHb ze=V2nG+xkXbx+~+49;iO)h#*zIF&WPcd8WL9P`kKYEN;X)Tn^9H6BM8Y0N`(6T2JW zDdvIN!PMCRPr-#`A69dBBjVF1L2lP_EQP4|2EI z;RM`l^z{(Xr^}*G_iAr(Oo#^r&KqI4^{M7B_3-j25UuYLLiq5Xw;S*$y5cWSf2WP; ztNU{wi2JuzN3%PS*2-wg$D$DPGDzuhP|8Ra1(~o`fif;wO54&vn+^9@Cof;O!$@|8 z(a~aKH4T!1Kj&tYI_O=DzbqshDG}bR-GkBa^gR0oi>Ul?F$XcjHVVbn?Sso}8RDOT zH#1|0vuQRoa3F*@3pD;CTq30jf6^j2=^X~uRM7e2#pPAIWtZwZg*h$@^HLq{nj`ug z0V1AQYdPlF2w*~cV;N)GNZZ!1yAkHk-n@GAuDyL(XYX{S+2hX%QdR0>o6aU0fAK<( z42 zY67S8k(tCRdX~l7kB=W&)`gJeU5FL@SW1K;S}}_~bCyf$2qIJkFN9INOH0L!pLfsS zZh}zfD8~dYz~l~WhlHZCQb_hHg`&m55aOH=Yq$nSvGquBN+nngxKn;mLeYyiZ`&gq zodX+TJaMoLWZ*+UkSdEHf7K^~Jk#+HAf!xGUWN)9RT&`a5G7o93*OfVB4u}@uOWyW z0)onhBV_q-#43UiSmrGjlw*l}6h2H7h}ICXj3d{jb96?~zfNAic+(0Y))hi^Mody< zsqy*&AV`&sL#Xm`h!q5JgG0(|kjfbYLE%6-J^fEBf;vZ2 z&17P}E@#3{4*^1DeSB5k$6tXESg)f&9VHP{hy_BVBg!~Twb$IVc1vo6(3{_1ynOez z6+@jPqH)dtt@6?5xaeXVdRiTwk7v~)ckle`*?0nnkh7=Crpc)CX)-I|qJev%t->N` zXM#kOYMIg=0`>%Cf2SSk+D4+S(CQo|y=EiPLqJg36d6@MMP>y-K?gx3U?!uILz4Qa z;X>4SmKtLa>9hr%5VS>7ap%On%cSC!$utLmqOzGWs(fb5DvB_-3(1W(yXP<36Jt6j>!tFW5&V^QN?-!#4%Xn5k{b>we-NO`X341XSu(3i4s$Ls z5}tEQFknI@6G~YsEm4%+At3o;Ly}DAkoNZII)osBDjV)ry@tCTa1sQw!gz$8<5<%` zts|J)2)x$r-M68uJMm|SyxOqy^85J3ZaC_MWrdo zM~+qz9i;Lm2uX@g+Ixg-gQF}~(@P;6g1fYJ^>*8<-X3`%L?a6^1PQ@Ag#tVi%tf71 zD^?>e&rc6GIm}|oeZH7YV|>vpyHRgpaWmL{3tLxrv_?*1aGn^cgeQ#iylrS8 zI9Xh~aCmwq)?-vG%YU-9BZh!bT~XflD#|Oye>IU&p%DgidtvaDcnu5$Q6v;wqlA!L zk5I8H{|Q2J2nf}c-fgeayEjH#V~x`?C@r`l!dvZg6_uyXt~gwyZSACr-DP43v zeHK1*ZK&G73=ET(=`asSXWWE{VM8C0`(3734%2$rl6cL6q+bUXechdI^FCV zdsozl;2p?@TZ%7WU-=NirEl6B_(yG z^>)1;)drI?LKhj3NCPU9Ad?i4VN8ZD*kWz{bhEQ8R@O@~8-mNEq^`o=uGeQ*pbHG0 zw81NoOcQQEaC9*Wm148vT8Cc}W@o4C6?RsxutS~@f1gKlJPbk3JhhW&Mw50Ye<%Ot zym^=2_4M5!FsrM+x9j!T_$8P}M+r(`-UynkS_IAram)v;izailLloXzT<))Lf@j47 zyuX_-rf-{eDo2Ob5OxG9sVl;_>-8w1<|AknDsVu8OaC&@tOf-Z8EHemGLl}MpT0TU zV6TdG_=|&AY2mXM%`Ny}uR>^&e_Nb}WWvUyT+NVs!p7(q)7kv_APB3g(YNdMm`4&H zBPy$c3N9HZP86nK%nBZONMGems;>_A))U6RWQ@=}`9D}RA70-M_G@5veb@CJ4uP<` z5`Md0e}oYwBp1YF2MEj&LQSwCNBl8|`MV7B(Chgs*6=^s2GWCosIF4qf3DYK@f9^f zDo+gsZ6otmSd5;q+;pfyC~kyK5SjH5ed$OTGYE+43i9oG{XwKXLGLUVl0iOyj7ZC* zw1{4%%y6e}o%I{iyhlZT7)GkDB;T&r=Z=pcT(E#v3m${BjzOSGr|3OOXN#lt#McH- zS1ieI&(|RA7p*MDKdjLYe_srx37QzjT#&@G6jucuo#&C+loJ*YY&hL)zBn~=;U&}@<8q>AqDEg?yM}8v9reCz~ma6f7|IOixX}VpK=!GO)TXp@ia>i!5d;8n#Cb^s zL@E<1flJ4X1wkwie>TrA4USO(NXwImd+^f3Bko+w02PmZSs5ogTcWLGnrof$KLwW1<1YlstnHXdNj{bPUx;I!ekc=*Zj@!pRI zn>?}nss!d6I&Q|`aQq2--Ni21>mEFD_9}0?^M0G(Qu;wCM=M0if|(XnDguE>Nhpcs z1sutG?47^bz@GZQv3?Ibr)?2Pdxg!))90U>#PmKsn8ftpiDOwgIpMt~Cz#J$qTEG6 zIY@$1YUzS!e-We2yI{qeV3&JG$D1-{{Z+AiJh3l7W8UP!1?iimz%%=p#_sZ$G+8oUoq80A6p6fzo5RIyCh)+TL$(R@`HuV-+3vm9-`DlD!- z*k1LL!S?$nj$q|1MfBSqDs{4k4vkRC3JyYg5>PrJe}HIJ-eG)tmUGQb7SVoH2p<&e z^(pi6%9kK6A1zUQvM|cZ35)DCVNs4*qd7w%jHQ-K;b|bjJL|aS z(EhqOK04^P={enzewdiVCf%md1U|Bp?_l1*?d^D!p!*2c?wvir+C6&OcC+$P^t8vb z=e}_hq0!hJ>2PfL5)J8}!DbMl57wX*Y;gRPDhgX;DMaF-E+v)sYf9d{LUbqmt zwufdheU{$Y{fiVC&aQFs*dsB34ZhX$N$rcop$2oXw#_K{>zo+XX$h_s0c*cq4T2Q4lNb6B^B84Fe zimlmxfi(+XirKKOnWzg|{n+d(VFp*%ZIQA>#Hh6Q$hi`bv}iHI(=l49cK>yUvvk1KWh-4H4D5S!r{79ld6R2`ibfaVKx{S4Y7f#;Cadc zScnc4rr;mFHpQ`jBJ6nYFTZR-*zK1PHiq}pyG3)mn9ZLxH!#0>(Yy^Z_ZN1nIvh_Y z*YobdAfT(84e0vWzzTHA7%q}6QxY5je+@o`X^Mjsgc9N74r+0RZhcd9hr;;Fp_?yV z=L3Sdm=9-zV61K;plc-pdHE}o*1w{;H~>9$QjT+-WUTp`|*=}5&K|YRdf{WH;F5r3)P0?D_<*4?y0$jxu>vsis$pr>RloCcNf9ie8 zD+Ov4JV*<&=upGG!{e*tqmz?2>tlR!Pr5I9TuM{&gY8G$Oz!fV9LhP+j8*l0?Q*^G zM2Smbyy64`^HPF}f@@^NGDA2kIhG>x^ycE={9@BS>5?Z_%+uW*XMgD4P-rgBI@x{@ zKvi{gta^>`3Q$^d9XaP(8l81if2p-2%;m~Vf=ZOMfn}i1-u!s7x21s+#Xz+MMWcDs zT}<s zpAYu_yft5DXTIJc{5lAbs%ly7a=n2RY0RUrc<{_q<&he1w9Y-zfhtl`f3B86`srwY z|KMaRjwmVSC{I-zE%0q->1LGf`efN%xWMuIL4YOef>nEJ(F$0=k~QLlc>?J2Xm}Nj zU;?EFFib!pSX=dIEd#0@!TQi^^)Ia^pCFsxq94Uv8sXlzGyQVtH3-nErh=?`AIu79 z&Rge#r$VG8kV&GrHVHN^e;6?WVo5Jn2JPhZ$Ma3~Jj*z1H_r0zbqAQ6rgu48F=j&m zOV7ywnCA3l_D+h$P5BOLM}%c4x_Lg_bEnYj;|f8<3;9Zjwqm@NP1d4u09j9 zd)}^hMgHE5Vltr#_Be*?480#C%${YlI{EA?|Ndku%NR3tsjl6ju$q{1Cm3o$xOEr| zB4N~uNSu(M4K305Gu1zyoL;U!eRIh)CA*nRx^mcNg2s&&??!WMCU^~t&lVs4zcZP< zZd%HFOiN<`2Ub(ce=W6&Q_CDP!9;qOdS#*u$`e)6Y}#r5KW>ATC_-y@QkFwhb9S5SfV#6_7YR(5 z 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 z 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